Diff of the two buildlogs:

--
--- b1/build.log	2021-08-16 22:04:29.804775680 +0000
+++ b2/build.log	2021-08-16 22:25:27.013306975 +0000
@@ -1,6 +1,6 @@
 I: pbuilder: network access will be disabled during build
-I: Current time: Sun Sep 18 16:10:51 -12 2022
-I: pbuilder-time-stamp: 1663560651
+I: Current time: Tue Aug 17 12:04:33 +14 2021
+I: pbuilder-time-stamp: 1629151473
 I: Building the build Environment
 I: extracting base tarball [/var/cache/pbuilder/buster-reproducible-base.tgz]
 I: copying local configuration
@@ -17,7 +17,7 @@
 I: Extracting source
 gpgv: unknown type of key resource 'trustedkeys.kbx'
 gpgv: keyblock resource '/root/.gnupg/trustedkeys.kbx': General error
-gpgv: Signature made Sun Jan 20 05:49:11 2019 -12
+gpgv: Signature made Mon Jan 21 07:49:11 2019 +14
 gpgv:                using RSA key 8F58342BEABE1EF4379551FBB193770C186A1C7D
 gpgv: Can't check signature: No public key
 dpkg-source: warning: failed to verify signature on ./ppl_1.2-7.dsc
@@ -31,136 +31,170 @@
 dpkg-source: info: applying fix_AC_CHECK_SWI_PROLOG.patch
 I: Not using root during the build.
 I: Installing the build-deps
-I: user script /srv/workspace/pbuilder/39463/tmp/hooks/D02_print_environment starting
+I: user script /srv/workspace/pbuilder/44001/tmp/hooks/D01_modify_environment starting
+debug: Running on ionos1-amd64.
+I: Changing host+domainname to test build reproducibility
+I: Adding a custom variable just for the fun of it...
+I: Changing /bin/sh to bash
+Removing 'diversion of /bin/sh to /bin/sh.distrib by dash'
+Adding 'diversion of /bin/sh to /bin/sh.distrib by bash'
+Removing 'diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by dash'
+Adding 'diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by bash'
+I: Setting pbuilder2's login shell to /bin/bash
+I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other
+I: user script /srv/workspace/pbuilder/44001/tmp/hooks/D01_modify_environment finished
+I: user script /srv/workspace/pbuilder/44001/tmp/hooks/D02_print_environment starting
 I: set
-  BUILDDIR='/build'
-  BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other'
-  BUILDUSERNAME='pbuilder1'
-  BUILD_ARCH='amd64'
-  DEBIAN_FRONTEND='noninteractive'
-  DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=16'
-  DISTRIBUTION=''
-  HOME='/root'
-  HOST_ARCH='amd64'
+  BASH=/bin/sh
+  BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
+  BASH_ALIASES=()
+  BASH_ARGC=()
+  BASH_ARGV=()
+  BASH_CMDS=()
+  BASH_LINENO=([0]="12" [1]="0")
+  BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment")
+  BASH_VERSINFO=([0]="5" [1]="0" [2]="3" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
+  BASH_VERSION='5.0.3(1)-release'
+  BUILDDIR=/build
+  BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other'
+  BUILDUSERNAME=pbuilder2
+  BUILD_ARCH=amd64
+  DEBIAN_FRONTEND=noninteractive
+  DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=15'
+  DIRSTACK=()
+  DISTRIBUTION=
+  EUID=0
+  FUNCNAME=([0]="Echo" [1]="main")
+  GROUPS=()
+  HOME=/root
+  HOSTNAME=i-capture-the-hostname
+  HOSTTYPE=x86_64
+  HOST_ARCH=amd64
   IFS=' 	
   '
-  INVOCATION_ID='f909f9157d7745b3a45208e1da47cd44'
-  LANG='C'
-  LANGUAGE='en_US:en'
-  LC_ALL='C'
-  MAIL='/var/mail/root'
-  OPTIND='1'
-  PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games'
-  PBCURRENTCOMMANDLINEOPERATION='build'
-  PBUILDER_OPERATION='build'
-  PBUILDER_PKGDATADIR='/usr/share/pbuilder'
-  PBUILDER_PKGLIBDIR='/usr/lib/pbuilder'
-  PBUILDER_SYSCONFDIR='/etc'
-  PPID='39463'
-  PS1='# '
-  PS2='> '
+  INVOCATION_ID=3fd77959b253415d84ee1dc36a5b8e76
+  LANG=C
+  LANGUAGE=et_EE:et
+  LC_ALL=C
+  MACHTYPE=x86_64-pc-linux-gnu
+  MAIL=/var/mail/root
+  OPTERR=1
+  OPTIND=1
+  OSTYPE=linux-gnu
+  PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path
+  PBCURRENTCOMMANDLINEOPERATION=build
+  PBUILDER_OPERATION=build
+  PBUILDER_PKGDATADIR=/usr/share/pbuilder
+  PBUILDER_PKGLIBDIR=/usr/lib/pbuilder
+  PBUILDER_SYSCONFDIR=/etc
+  PIPESTATUS=([0]="0")
+  POSIXLY_CORRECT=y
+  PPID=44001
   PS4='+ '
-  PWD='/'
-  SHELL='/bin/bash'
-  SHLVL='2'
-  SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/tmp.FaNRruZ0Tl/pbuilderrc_hXQK --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/buster-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/tmp.FaNRruZ0Tl/b1 --logfile b1/build.log ppl_1.2-7.dsc'
-  SUDO_GID='110'
-  SUDO_UID='105'
-  SUDO_USER='jenkins'
-  TERM='unknown'
-  TZ='/usr/share/zoneinfo/Etc/GMT+12'
-  USER='root'
-  _='/usr/bin/systemd-run'
-  http_proxy='http://85.184.249.68:3128'
+  PWD=/
+  SHELL=/bin/bash
+  SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix
+  SHLVL=3
+  SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/tmp.FaNRruZ0Tl/pbuilderrc_wsi9 --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/buster-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/tmp.FaNRruZ0Tl/b2 --logfile b2/build.log ppl_1.2-7.dsc'
+  SUDO_GID=110
+  SUDO_UID=105
+  SUDO_USER=jenkins
+  TERM=unknown
+  TZ=/usr/share/zoneinfo/Etc/GMT-14
+  UID=0
+  USER=root
+  _='I: set'
+  http_proxy=http://78.137.99.97:3128
 I: uname -a
-  Linux ionos5-amd64 5.10.0-0.bpo.8-amd64 #1 SMP Debian 5.10.46-2~bpo10+1 (2021-07-22) x86_64 GNU/Linux
+  Linux i-capture-the-hostname 4.19.0-17-amd64 #1 SMP Debian 4.19.194-3 (2021-07-18) x86_64 GNU/Linux
 I: ls -l /bin
   total 5116
-  -rwxr-xr-x 1 root root 1168776 Apr 17  2019 bash
-  -rwxr-xr-x 3 root root   38984 Jul 10  2019 bunzip2
-  -rwxr-xr-x 3 root root   38984 Jul 10  2019 bzcat
-  lrwxrwxrwx 1 root root       6 Jul 10  2019 bzcmp -> bzdiff
-  -rwxr-xr-x 1 root root    2227 Jul 10  2019 bzdiff
-  lrwxrwxrwx 1 root root       6 Jul 10  2019 bzegrep -> bzgrep
-  -rwxr-xr-x 1 root root    4877 Jun 24  2019 bzexe
-  lrwxrwxrwx 1 root root       6 Jul 10  2019 bzfgrep -> bzgrep
-  -rwxr-xr-x 1 root root    3641 Jul 10  2019 bzgrep
-  -rwxr-xr-x 3 root root   38984 Jul 10  2019 bzip2
-  -rwxr-xr-x 1 root root   14328 Jul 10  2019 bzip2recover
-  lrwxrwxrwx 1 root root       6 Jul 10  2019 bzless -> bzmore
-  -rwxr-xr-x 1 root root    1297 Jul 10  2019 bzmore
-  -rwxr-xr-x 1 root root   43744 Feb 28  2019 cat
-  -rwxr-xr-x 1 root root   64320 Feb 28  2019 chgrp
-  -rwxr-xr-x 1 root root   64288 Feb 28  2019 chmod
-  -rwxr-xr-x 1 root root   72512 Feb 28  2019 chown
-  -rwxr-xr-x 1 root root  146880 Feb 28  2019 cp
-  -rwxr-xr-x 1 root root  121464 Jan 17  2019 dash
-  -rwxr-xr-x 1 root root  109408 Feb 28  2019 date
-  -rwxr-xr-x 1 root root   76712 Feb 28  2019 dd
-  -rwxr-xr-x 1 root root   93744 Feb 28  2019 df
-  -rwxr-xr-x 1 root root  138856 Feb 28  2019 dir
-  -rwxr-xr-x 1 root root   84288 Jan  9  2019 dmesg
-  lrwxrwxrwx 1 root root       8 Sep 26  2018 dnsdomainname -> hostname
-  lrwxrwxrwx 1 root root       8 Sep 26  2018 domainname -> hostname
-  -rwxr-xr-x 1 root root   39520 Feb 28  2019 echo
-  -rwxr-xr-x 1 root root      28 Jan  7  2019 egrep
-  -rwxr-xr-x 1 root root   35424 Feb 28  2019 false
-  -rwxr-xr-x 1 root root      28 Jan  7  2019 fgrep
-  -rwxr-xr-x 1 root root   68880 Jan  9  2019 findmnt
-  -rwsr-xr-x 1 root root   34896 Apr 22  2020 fusermount
-  -rwxr-xr-x 1 root root  198976 Jan  7  2019 grep
-  -rwxr-xr-x 2 root root    2345 Jan  5  2019 gunzip
-  -rwxr-xr-x 1 root root    6375 Jan  5  2019 gzexe
-  -rwxr-xr-x 1 root root   98048 Jan  5  2019 gzip
-  -rwxr-xr-x 1 root root   26696 Sep 26  2018 hostname
-  -rwxr-xr-x 1 root root   68552 Feb 28  2019 ln
-  -rwxr-xr-x 1 root root   56760 Jul 26  2018 login
-  -rwxr-xr-x 1 root root  138856 Feb 28  2019 ls
-  -rwxr-xr-x 1 root root  108624 Jan  9  2019 lsblk
-  -rwxr-xr-x 1 root root   89088 Feb 28  2019 mkdir
-  -rwxr-xr-x 1 root root   68544 Feb 28  2019 mknod
-  -rwxr-xr-x 1 root root   43808 Feb 28  2019 mktemp
-  -rwxr-xr-x 1 root root   43008 Jan  9  2019 more
-  -rwsr-xr-x 1 root root   51280 Jan  9  2019 mount
-  -rwxr-xr-x 1 root root   14408 Jan  9  2019 mountpoint
-  -rwxr-xr-x 1 root root  138728 Feb 28  2019 mv
-  lrwxrwxrwx 1 root root       8 Sep 26  2018 nisdomainname -> hostname
-  lrwxrwxrwx 1 root root      14 Feb 14  2019 pidof -> /sbin/killall5
-  -rwxr-xr-x 1 root root   39616 Feb 28  2019 pwd
-  lrwxrwxrwx 1 root root       4 Apr 17  2019 rbash -> bash
-  -rwxr-xr-x 1 root root   47776 Feb 28  2019 readlink
-  -rwxr-xr-x 1 root root   68416 Feb 28  2019 rm
-  -rwxr-xr-x 1 root root   47776 Feb 28  2019 rmdir
-  -rwxr-xr-x 1 root root   23312 Jan 21  2019 run-parts
-  -rwxr-xr-x 1 root root  122224 Dec 22  2018 sed
-  lrwxrwxrwx 1 root root       4 Sep  9 02:46 sh -> dash
-  -rwxr-xr-x 1 root root   39552 Feb 28  2019 sleep
-  -rwxr-xr-x 1 root root   80672 Feb 28  2019 stty
-  -rwsr-xr-x 1 root root   63568 Jan  9  2019 su
-  -rwxr-xr-x 1 root root   35488 Feb 28  2019 sync
-  -rwxr-xr-x 1 root root  445560 Apr 23  2019 tar
-  -rwxr-xr-x 1 root root   14440 Jan 21  2019 tempfile
-  -rwxr-xr-x 1 root root   97152 Feb 28  2019 touch
-  -rwxr-xr-x 1 root root   35424 Feb 28  2019 true
-  -rwxr-xr-x 1 root root   14328 Apr 22  2020 ulockmgr_server
-  -rwsr-xr-x 1 root root   34888 Jan  9  2019 umount
-  -rwxr-xr-x 1 root root   39584 Feb 28  2019 uname
-  -rwxr-xr-x 2 root root    2345 Jan  5  2019 uncompress
-  -rwxr-xr-x 1 root root  138856 Feb 28  2019 vdir
-  -rwxr-xr-x 1 root root   34896 Jan  9  2019 wdctl
-  -rwxr-xr-x 1 root root     946 Jan 21  2019 which
-  lrwxrwxrwx 1 root root       8 Sep 26  2018 ypdomainname -> hostname
-  -rwxr-xr-x 1 root root    1983 Jan  5  2019 zcat
-  -rwxr-xr-x 1 root root    1677 Jan  5  2019 zcmp
-  -rwxr-xr-x 1 root root    5879 Jan  5  2019 zdiff
-  -rwxr-xr-x 1 root root      29 Jan  5  2019 zegrep
-  -rwxr-xr-x 1 root root      29 Jan  5  2019 zfgrep
-  -rwxr-xr-x 1 root root    2080 Jan  5  2019 zforce
-  -rwxr-xr-x 1 root root    7584 Jan  5  2019 zgrep
-  -rwxr-xr-x 1 root root    2205 Jan  5  2019 zless
-  -rwxr-xr-x 1 root root    1841 Jan  5  2019 zmore
-  -rwxr-xr-x 1 root root    4552 Jan  5  2019 znew
-I: user script /srv/workspace/pbuilder/39463/tmp/hooks/D02_print_environment finished
+  -rwxr-xr-x 1 root root 1168776 Apr 18  2019 bash
+  -rwxr-xr-x 3 root root   38984 Jul 11  2019 bunzip2
+  -rwxr-xr-x 3 root root   38984 Jul 11  2019 bzcat
+  lrwxrwxrwx 1 root root       6 Jul 11  2019 bzcmp -> bzdiff
+  -rwxr-xr-x 1 root root    2227 Jul 11  2019 bzdiff
+  lrwxrwxrwx 1 root root       6 Jul 11  2019 bzegrep -> bzgrep
+  -rwxr-xr-x 1 root root    4877 Jun 25  2019 bzexe
+  lrwxrwxrwx 1 root root       6 Jul 11  2019 bzfgrep -> bzgrep
+  -rwxr-xr-x 1 root root    3641 Jul 11  2019 bzgrep
+  -rwxr-xr-x 3 root root   38984 Jul 11  2019 bzip2
+  -rwxr-xr-x 1 root root   14328 Jul 11  2019 bzip2recover
+  lrwxrwxrwx 1 root root       6 Jul 11  2019 bzless -> bzmore
+  -rwxr-xr-x 1 root root    1297 Jul 11  2019 bzmore
+  -rwxr-xr-x 1 root root   43744 Mar  1  2019 cat
+  -rwxr-xr-x 1 root root   64320 Mar  1  2019 chgrp
+  -rwxr-xr-x 1 root root   64288 Mar  1  2019 chmod
+  -rwxr-xr-x 1 root root   72512 Mar  1  2019 chown
+  -rwxr-xr-x 1 root root  146880 Mar  1  2019 cp
+  -rwxr-xr-x 1 root root  121464 Jan 18  2019 dash
+  -rwxr-xr-x 1 root root  109408 Mar  1  2019 date
+  -rwxr-xr-x 1 root root   76712 Mar  1  2019 dd
+  -rwxr-xr-x 1 root root   93744 Mar  1  2019 df
+  -rwxr-xr-x 1 root root  138856 Mar  1  2019 dir
+  -rwxr-xr-x 1 root root   84288 Jan 10  2019 dmesg
+  lrwxrwxrwx 1 root root       8 Sep 27  2018 dnsdomainname -> hostname
+  lrwxrwxrwx 1 root root       8 Sep 27  2018 domainname -> hostname
+  -rwxr-xr-x 1 root root   39520 Mar  1  2019 echo
+  -rwxr-xr-x 1 root root      28 Jan  8  2019 egrep
+  -rwxr-xr-x 1 root root   35424 Mar  1  2019 false
+  -rwxr-xr-x 1 root root      28 Jan  8  2019 fgrep
+  -rwxr-xr-x 1 root root   68880 Jan 10  2019 findmnt
+  -rwsr-xr-x 1 root root   34896 Apr 23  2020 fusermount
+  -rwxr-xr-x 1 root root  198976 Jan  8  2019 grep
+  -rwxr-xr-x 2 root root    2345 Jan  6  2019 gunzip
+  -rwxr-xr-x 1 root root    6375 Jan  6  2019 gzexe
+  -rwxr-xr-x 1 root root   98048 Jan  6  2019 gzip
+  -rwxr-xr-x 1 root root   26696 Sep 27  2018 hostname
+  -rwxr-xr-x 1 root root   68552 Mar  1  2019 ln
+  -rwxr-xr-x 1 root root   56760 Jul 27  2018 login
+  -rwxr-xr-x 1 root root  138856 Mar  1  2019 ls
+  -rwxr-xr-x 1 root root  108624 Jan 10  2019 lsblk
+  -rwxr-xr-x 1 root root   89088 Mar  1  2019 mkdir
+  -rwxr-xr-x 1 root root   68544 Mar  1  2019 mknod
+  -rwxr-xr-x 1 root root   43808 Mar  1  2019 mktemp
+  -rwxr-xr-x 1 root root   43008 Jan 10  2019 more
+  -rwsr-xr-x 1 root root   51280 Jan 10  2019 mount
+  -rwxr-xr-x 1 root root   14408 Jan 10  2019 mountpoint
+  -rwxr-xr-x 1 root root  138728 Mar  1  2019 mv
+  lrwxrwxrwx 1 root root       8 Sep 27  2018 nisdomainname -> hostname
+  lrwxrwxrwx 1 root root      14 Feb 15  2019 pidof -> /sbin/killall5
+  -rwxr-xr-x 1 root root   39616 Mar  1  2019 pwd
+  lrwxrwxrwx 1 root root       4 Apr 18  2019 rbash -> bash
+  -rwxr-xr-x 1 root root   47776 Mar  1  2019 readlink
+  -rwxr-xr-x 1 root root   68416 Mar  1  2019 rm
+  -rwxr-xr-x 1 root root   47776 Mar  1  2019 rmdir
+  -rwxr-xr-x 1 root root   23312 Jan 22  2019 run-parts
+  -rwxr-xr-x 1 root root  122224 Dec 23  2018 sed
+  lrwxrwxrwx 1 root root       4 Aug 17 12:04 sh -> bash
+  lrwxrwxrwx 1 root root       4 Aug  7 22:25 sh.distrib -> dash
+  -rwxr-xr-x 1 root root   39552 Mar  1  2019 sleep
+  -rwxr-xr-x 1 root root   80672 Mar  1  2019 stty
+  -rwsr-xr-x 1 root root   63568 Jan 10  2019 su
+  -rwxr-xr-x 1 root root   35488 Mar  1  2019 sync
+  -rwxr-xr-x 1 root root  445560 Apr 24  2019 tar
+  -rwxr-xr-x 1 root root   14440 Jan 22  2019 tempfile
+  -rwxr-xr-x 1 root root   97152 Mar  1  2019 touch
+  -rwxr-xr-x 1 root root   35424 Mar  1  2019 true
+  -rwxr-xr-x 1 root root   14328 Apr 23  2020 ulockmgr_server
+  -rwsr-xr-x 1 root root   34888 Jan 10  2019 umount
+  -rwxr-xr-x 1 root root   39584 Mar  1  2019 uname
+  -rwxr-xr-x 2 root root    2345 Jan  6  2019 uncompress
+  -rwxr-xr-x 1 root root  138856 Mar  1  2019 vdir
+  -rwxr-xr-x 1 root root   34896 Jan 10  2019 wdctl
+  -rwxr-xr-x 1 root root     946 Jan 22  2019 which
+  lrwxrwxrwx 1 root root       8 Sep 27  2018 ypdomainname -> hostname
+  -rwxr-xr-x 1 root root    1983 Jan  6  2019 zcat
+  -rwxr-xr-x 1 root root    1677 Jan  6  2019 zcmp
+  -rwxr-xr-x 1 root root    5879 Jan  6  2019 zdiff
+  -rwxr-xr-x 1 root root      29 Jan  6  2019 zegrep
+  -rwxr-xr-x 1 root root      29 Jan  6  2019 zfgrep
+  -rwxr-xr-x 1 root root    2080 Jan  6  2019 zforce
+  -rwxr-xr-x 1 root root    7584 Jan  6  2019 zgrep
+  -rwxr-xr-x 1 root root    2205 Jan  6  2019 zless
+  -rwxr-xr-x 1 root root    1841 Jan  6  2019 zmore
+  -rwxr-xr-x 1 root root    4552 Jan  6  2019 znew
+I: user script /srv/workspace/pbuilder/44001/tmp/hooks/D02_print_environment finished
  -> Attempting to satisfy build-dependencies
  -> Creating pbuilder-satisfydepends-dummy package
 Package: pbuilder-satisfydepends-dummy
@@ -406,7 +440,7 @@
 Get: 188 http://deb.debian.org/debian buster/main amd64 swi-prolog amd64 8.0.2+dfsg-3+deb10u1 [24.3 kB]
 Get: 189 http://deb.debian.org/debian buster/main amd64 texlive-lang-greek all 2018.20190227-2 [76.3 MB]
 Get: 190 http://deb.debian.org/debian buster/main amd64 texlive-science all 2018.20190227-2 [3168 kB]
-Fetched 293 MB in 4s (74.9 MB/s)
+Fetched 293 MB in 5s (59.3 MB/s)
 debconf: delaying package configuration, since apt-utils is not installed
 Selecting previously unselected package libbsd0:amd64.
 (Reading database ... 
(Reading database ... 5%
(Reading database ... 10%
(Reading database ... 15%
(Reading database ... 20%
(Reading database ... 25%
(Reading database ... 30%
(Reading database ... 35%
(Reading database ... 40%
(Reading database ... 45%
(Reading database ... 50%
(Reading database ... 55%
(Reading database ... 60%
(Reading database ... 65%
(Reading database ... 70%
(Reading database ... 75%
(Reading database ... 80%
(Reading database ... 85%
(Reading database ... 90%
(Reading database ... 95%
(Reading database ... 100%
(Reading database ... 19195 files and directories currently installed.)
@@ -1206,7 +1240,7 @@
 Building tag database...
  -> Finished parsing the build-deps
 I: Building the package
-I: Running cd /build/ppl-1.2/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b
+I: Running cd /build/ppl-1.2/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b
 dpkg-buildpackage: info: source package ppl
 dpkg-buildpackage: info: source version 1:1.2-7
 dpkg-buildpackage: info: source distribution unstable
@@ -1245,8 +1279,8 @@
 checking for mawk... mawk
 checking whether make sets $(MAKE)... yes
 checking whether make supports nested variables... yes
-checking whether UID '1111' is supported by ustar format... yes
-checking whether GID '1111' is supported by ustar format... yes
+checking whether UID '2222' is supported by ustar format... yes
+checking whether GID '2222' is supported by ustar format... yes
 checking how to create a ustar tar archive... gnutar
 checking for gcc... gcc
 checking whether the C compiler works... yes
@@ -1532,7 +1566,7 @@
    debian/rules override_dh_auto_build-indep
 make[1]: Entering directory '/build/ppl-1.2'
 dh_auto_build
-	make -j16
+	make -j15
 make[2]: Entering directory '/build/ppl-1.2'
 make  all-recursive
 make[3]: Entering directory '/build/ppl-1.2'
@@ -1565,10 +1599,10 @@
 	../COPYING >>COPYING.hh
 ../utils/text2cxxarray --name=CREDITS_array --decl-only \
 	../CREDITS >>CREDITS.hh
-../utils/text2cxxarray --name=COPYING_array \
-	../COPYING >>COPYING.cc
 ../utils/text2cxxarray --name=BUGS_array \
 	../BUGS >>BUGS.cc
+../utils/text2cxxarray --name=COPYING_array \
+	../COPYING >>COPYING.cc
 ../utils/text2cxxarray --name=CREDITS_array \
 	../CREDITS >>CREDITS.cc
 ../utils/build_header \
@@ -1580,55 +1614,86 @@
 g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o COPYING.o COPYING.cc
 g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o CREDITS.o CREDITS.cc
 g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl-config.o ppl-config.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o assertions.lo assertions.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Box.lo Box.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o checked.lo checked.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Checked_Number.lo Checked_Number.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Float.lo Float.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o fpu-ia32.lo fpu-ia32.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o BDS_Status.lo BDS_Status.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Box_Status.lo Box_Status.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Og_Status.lo Og_Status.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Concrete_Expression.lo Concrete_Expression.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Constraint.lo Constraint.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Constraint_System.lo Constraint_System.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Congruence.lo Congruence.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Congruence_System.lo Congruence_System.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Generator_System.lo Generator_System.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o assertions.lo assertions.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Box.lo Box.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o checked.lo checked.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Checked_Number.lo Checked_Number.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Float.lo Float.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o fpu-ia32.lo fpu-ia32.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o BDS_Status.lo BDS_Status.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Box_Status.lo Box_Status.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Og_Status.lo Og_Status.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Concrete_Expression.lo Concrete_Expression.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Constraint.lo Constraint.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Constraint_System.lo Constraint_System.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Congruence.lo Congruence.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Congruence_System.lo Congruence_System.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c BDS_Status.cc  -fPIC -DPIC -o .libs/BDS_Status.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Og_Status.cc  -fPIC -DPIC -o .libs/Og_Status.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c assertions.cc  -fPIC -DPIC -o .libs/assertions.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Box.cc  -fPIC -DPIC -o .libs/Box.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Checked_Number.cc  -fPIC -DPIC -o .libs/Checked_Number.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c checked.cc  -fPIC -DPIC -o .libs/checked.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Float.cc  -fPIC -DPIC -o .libs/Float.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Og_Status.cc  -fPIC -DPIC -o .libs/Og_Status.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Box_Status.cc  -fPIC -DPIC -o .libs/Box_Status.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c BDS_Status.cc  -fPIC -DPIC -o .libs/BDS_Status.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c checked.cc  -fPIC -DPIC -o .libs/checked.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c fpu-ia32.cc  -fPIC -DPIC -o .libs/fpu-ia32.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Congruence.cc  -fPIC -DPIC -o .libs/Congruence.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Constraint_System.cc  -fPIC -DPIC -o .libs/Constraint_System.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Box.cc  -fPIC -DPIC -o .libs/Box.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Concrete_Expression.cc  -fPIC -DPIC -o .libs/Concrete_Expression.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Og_Status.cc -o Og_Status.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Constraint.cc  -fPIC -DPIC -o .libs/Constraint.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Box_Status.cc -o Box_Status.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Congruence_System.cc  -fPIC -DPIC -o .libs/Congruence_System.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c fpu-ia32.cc  -fPIC -DPIC -o .libs/fpu-ia32.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Congruence.cc  -fPIC -DPIC -o .libs/Congruence.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Concrete_Expression.cc  -fPIC -DPIC -o .libs/Concrete_Expression.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c BDS_Status.cc -o BDS_Status.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Generator_System.cc  -fPIC -DPIC -o .libs/Generator_System.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Box_Status.cc -o Box_Status.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Og_Status.cc -o Og_Status.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c fpu-ia32.cc -o fpu-ia32.o >/dev/null 2>&1
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Grid_Generator_System.lo Grid_Generator_System.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Generator.lo Generator.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Grid_Generator.lo Grid_Generator.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Handler.lo Handler.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_Generator_System.cc  -fPIC -DPIC -o .libs/Grid_Generator_System.o
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Generator_System.lo Generator_System.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Grid_Generator_System.lo Grid_Generator_System.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Generator.lo Generator.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Grid_Generator.lo Grid_Generator.cc
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_Generator.cc  -fPIC -DPIC -o .libs/Grid_Generator.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Generator.cc  -fPIC -DPIC -o .libs/Generator.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Handler.cc  -fPIC -DPIC -o .libs/Handler.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Generator_System.cc  -fPIC -DPIC -o .libs/Generator_System.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_Generator_System.cc  -fPIC -DPIC -o .libs/Grid_Generator_System.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c assertions.cc -o assertions.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Handler.cc -o Handler.o >/dev/null 2>&1
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Init.lo Init.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Init.cc  -fPIC -DPIC -o .libs/Init.o
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Coefficient.lo Coefficient.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Float.cc -o Float.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Coefficient.cc  -fPIC -DPIC -o .libs/Coefficient.o
+In file included from CO_Tree_defs.hh:1557,
+                 from Sparse_Row_defs.hh:29,
+                 from Expression_Adapter_defs.hh:31,
+                 from Linear_Expression_defs.hh:48,
+                 from Congruence_defs.hh:35,
+                 from Congruence_System_defs.hh:33,
+                 from Congruence_System.cc:25:
+CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from meta_programming.hh:27,
+                 from C_Integer.hh:27,
+                 from globals_defs.hh:28,
+                 from Swapping_Vector_defs.hh:28,
+                 from Congruence_System_defs.hh:32,
+                 from Congruence_System.cc:25:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Handler.lo Handler.cc
+In file included from Linear_System_templates.hh:30,
+                 from Linear_System_defs.hh:580,
+                 from Constraint_System_defs.hh:29,
+                 from Congruence_System.cc:27:
+Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
+Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
 In file included from ppl-config.cc:25:
 ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
@@ -1639,6 +1704,8 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Handler.cc  -fPIC -DPIC -o .libs/Handler.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Handler.cc -o Handler.o >/dev/null 2>&1
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
@@ -1659,51 +1726,8 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from CO_Tree_defs.hh:1557,
-                 from Sparse_Row_defs.hh:29,
-                 from Expression_Adapter_defs.hh:31,
-                 from Linear_Expression_defs.hh:48,
-                 from Constraint_defs.hh:36,
-                 from Box_defs.hh:34,
-                 from Box.cc:25:
-CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from mp_std_bits_defs.hh:28,
-                 from checked_defs.hh:27,
-                 from Checked_Number_defs.hh:28,
-                 from Coefficient_types.hh:16,
-                 from Coefficient_defs.hh:27,
-                 from Box_defs.hh:29,
-                 from Box.cc:25:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Checked_Number.cc -o Checked_Number.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Concrete_Expression.cc -o Concrete_Expression.o >/dev/null 2>&1
-In file included from CO_Tree_defs.hh:1557,
-                 from Sparse_Row_defs.hh:29,
-                 from Expression_Adapter_defs.hh:31,
-                 from Linear_Expression_defs.hh:48,
-                 from Linear_System_templates.hh:28,
-                 from Linear_System_defs.hh:580,
-                 from Generator_System_defs.hh:30,
-                 from Generator_System.cc:25:
-CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from meta_programming.hh:27,
-                 from C_Integer.hh:27,
-                 from globals_defs.hh:28,
-                 from Swapping_Vector_defs.hh:28,
-                 from Linear_System_defs.hh:29,
-                 from Generator_System_defs.hh:30,
-                 from Generator_System.cc:25:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Float.cc -o Float.o >/dev/null 2>&1
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Init.lo Init.cc
 In file included from ppl-config.cc:25:
 ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
@@ -1723,9 +1747,10 @@
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
                  from Linear_Expression_defs.hh:48,
-                 from Congruence_defs.hh:35,
-                 from Congruence_System_defs.hh:33,
-                 from Congruence_System.cc:25:
+                 from Linear_System_templates.hh:28,
+                 from Linear_System_defs.hh:580,
+                 from Constraint_System_defs.hh:29,
+                 from Constraint_System.cc:25:
 CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -1734,35 +1759,17 @@
                  from C_Integer.hh:27,
                  from globals_defs.hh:28,
                  from Swapping_Vector_defs.hh:28,
-                 from Congruence_System_defs.hh:32,
-                 from Congruence_System.cc:25:
+                 from Linear_System_defs.hh:29,
+                 from Constraint_System_defs.hh:29,
+                 from Constraint_System.cc:25:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from Linear_System_templates.hh:30,
-                 from Linear_System_defs.hh:580,
-                 from Generator_System_defs.hh:30,
-                 from Generator_System.cc:25:
-Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
-Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Init.cc  -fPIC -DPIC -o .libs/Init.o
 In file included from Linear_System_templates.hh:30,
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
-                 from Box_inlines.hh:28,
-                 from Box_defs.hh:2285,
-                 from Box.cc:25:
+                 from Constraint_System.cc:25:
 Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -1781,8 +1788,8 @@
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
                  from Linear_Expression_defs.hh:48,
-                 from Grid_Generator_defs.hh:35,
-                 from Grid_Generator.cc:25:
+                 from Constraint_defs.hh:36,
+                 from Constraint.cc:25:
 CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -1791,9 +1798,31 @@
                  from checked_defs.hh:27,
                  from Checked_Number_defs.hh:28,
                  from Coefficient_types.hh:16,
-                 from Coefficient_defs.hh:27,
-                 from Grid_Generator_defs.hh:34,
-                 from Grid_Generator.cc:25:
+                 from Linear_Expression_defs.hh:36,
+                 from Constraint_defs.hh:36,
+                 from Constraint.cc:25:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from CO_Tree_defs.hh:1557,
+                 from Sparse_Row_defs.hh:29,
+                 from Expression_Adapter_defs.hh:31,
+                 from Linear_Expression_defs.hh:48,
+                 from Linear_System_templates.hh:28,
+                 from Linear_System_defs.hh:580,
+                 from Generator_System_defs.hh:30,
+                 from Generator_System.cc:25:
+CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from meta_programming.hh:27,
+                 from C_Integer.hh:27,
+                 from globals_defs.hh:28,
+                 from Swapping_Vector_defs.hh:28,
+                 from Linear_System_defs.hh:29,
+                 from Generator_System_defs.hh:30,
+                 from Generator_System.cc:25:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -1802,7 +1831,8 @@
                  from Expression_Adapter_defs.hh:31,
                  from Linear_Expression_defs.hh:48,
                  from Constraint_defs.hh:36,
-                 from Constraint.cc:25:
+                 from Box_defs.hh:34,
+                 from Box.cc:25:
 CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -1811,38 +1841,41 @@
                  from checked_defs.hh:27,
                  from Checked_Number_defs.hh:28,
                  from Coefficient_types.hh:16,
-                 from Linear_Expression_defs.hh:36,
-                 from Constraint_defs.hh:36,
-                 from Constraint.cc:25:
+                 from Coefficient_defs.hh:27,
+                 from Box_defs.hh:29,
+                 from Box.cc:25:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from Linear_System_templates.hh:30,
-                 from Linear_System_defs.hh:580,
-                 from Constraint_System_defs.hh:29,
-                 from Congruence_System.cc:27:
-Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
-Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
+In file included from CO_Tree_defs.hh:1557,
+                 from Sparse_Row_defs.hh:29,
+                 from Expression_Adapter_defs.hh:31,
+                 from Linear_Expression_defs.hh:48,
+                 from Grid_Generator_defs.hh:35,
+                 from Grid_Generator.cc:25:
+CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from mp_std_bits_defs.hh:28,
+                 from checked_defs.hh:27,
+                 from Checked_Number_defs.hh:28,
+                 from Coefficient_types.hh:16,
+                 from Coefficient_defs.hh:27,
+                 from Grid_Generator_defs.hh:34,
+                 from Grid_Generator.cc:25:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Checked_Number.cc -o Checked_Number.o >/dev/null 2>&1
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
                  from Linear_Expression_defs.hh:48,
                  from Linear_System_templates.hh:28,
                  from Linear_System_defs.hh:580,
-                 from Constraint_System_defs.hh:29,
-                 from Constraint_System.cc:25:
+                 from Grid_Generator_System_defs.hh:29,
+                 from Grid_Generator_System.cc:25:
 CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -1852,15 +1885,15 @@
                  from globals_defs.hh:28,
                  from Swapping_Vector_defs.hh:28,
                  from Linear_System_defs.hh:29,
-                 from Constraint_System_defs.hh:29,
-                 from Constraint_System.cc:25:
+                 from Grid_Generator_System_defs.hh:29,
+                 from Grid_Generator_System.cc:25:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from Linear_System_templates.hh:30,
                  from Linear_System_defs.hh:580,
-                 from Constraint_System_defs.hh:29,
-                 from Constraint_System.cc:25:
+                 from Generator_System_defs.hh:30,
+                 from Generator_System.cc:25:
 Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -1875,28 +1908,45 @@
 Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-In file included from CO_Tree_defs.hh:1557,
-                 from Sparse_Row_defs.hh:29,
-                 from Expression_Adapter_defs.hh:31,
-                 from Linear_Expression_defs.hh:48,
-                 from Linear_System_templates.hh:28,
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Concrete_Expression.cc -o Concrete_Expression.o >/dev/null 2>&1
+In file included from Linear_System_templates.hh:30,
                  from Linear_System_defs.hh:580,
                  from Grid_Generator_System_defs.hh:29,
                  from Grid_Generator_System.cc:25:
-CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from meta_programming.hh:27,
-                 from C_Integer.hh:27,
-                 from globals_defs.hh:28,
-                 from Swapping_Vector_defs.hh:28,
-                 from Linear_System_defs.hh:29,
-                 from Grid_Generator_System_defs.hh:29,
-                 from Grid_Generator_System.cc:25:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
+Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
+Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+In file included from Linear_System_templates.hh:30,
+                 from Linear_System_defs.hh:580,
+                 from Constraint_System_defs.hh:29,
+                 from Box_inlines.hh:28,
+                 from Box_defs.hh:2285,
+                 from Box.cc:25:
+Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
+Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
@@ -1917,26 +1967,12 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Linear_Expression.lo Linear_Expression.cc
-In file included from Linear_System_templates.hh:30,
-                 from Linear_System_defs.hh:580,
-                 from Grid_Generator_System_defs.hh:29,
-                 from Grid_Generator_System.cc:25:
-Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
-Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c checked.cc -o checked.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Congruence.cc -o Congruence.o >/dev/null 2>&1
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Coefficient.lo Coefficient.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Coefficient.cc  -fPIC -DPIC -o .libs/Coefficient.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_Generator.cc -o Grid_Generator.o >/dev/null 2>&1
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Linear_Expression.lo Linear_Expression.cc
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
@@ -1956,7 +1992,7 @@
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Linear_Expression.cc  -fPIC -DPIC -o .libs/Linear_Expression.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Coefficient.cc -o Coefficient.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Constraint.cc -o Constraint.o >/dev/null 2>&1
 In file included from Linear_System_templates.hh:30,
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
@@ -1975,17 +2011,20 @@
 Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Linear_Expression_Impl.lo Linear_Expression_Impl.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Congruence.cc -o Congruence.o >/dev/null 2>&1
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Linear_Expression_Impl.lo Linear_Expression_Impl.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Congruence_System.cc -o Congruence_System.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_Generator_System.cc -o Grid_Generator_System.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Generator.cc -o Generator.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Linear_Expression_Impl.cc  -fPIC -DPIC -o .libs/Linear_Expression_Impl.o
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Linear_Expression_Interface.lo Linear_Expression_Interface.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_Generator.cc -o Grid_Generator.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Constraint.cc -o Constraint.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Linear_Expression_Interface.cc  -fPIC -DPIC -o .libs/Linear_Expression_Interface.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Constraint_System.cc -o Constraint_System.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Coefficient.cc -o Coefficient.o >/dev/null 2>&1
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Linear_Expression_Interface.lo Linear_Expression_Interface.cc
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Init.cc -o Init.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Box.cc -o Box.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Generator.cc -o Generator.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_Generator_System.cc -o Grid_Generator_System.o >/dev/null 2>&1
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Linear_Form.lo Linear_Form.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Linear_Expression_Interface.cc  -fPIC -DPIC -o .libs/Linear_Expression_Interface.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Linear_Form.cc  -fPIC -DPIC -o .libs/Linear_Form.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Generator_System.cc -o Generator_System.o >/dev/null 2>&1
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
@@ -2004,12 +2043,7 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Linear_Form.lo Linear_Form.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Generator_System.cc -o Generator_System.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Congruence_System.cc -o Congruence_System.o >/dev/null 2>&1
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Scalar_Products.lo Scalar_Products.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Linear_Form.cc  -fPIC -DPIC -o .libs/Linear_Form.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Scalar_Products.cc  -fPIC -DPIC -o .libs/Scalar_Products.o
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Scalar_Products.lo Scalar_Products.cc
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Linear_Expression_Impl_defs.hh:33,
@@ -2029,16 +2063,15 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o MIP_Problem.lo MIP_Problem.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Constraint_System.cc -o Constraint_System.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Linear_Expression_Interface.cc -o Linear_Expression_Interface.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c MIP_Problem.cc  -fPIC -DPIC -o .libs/MIP_Problem.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Scalar_Products.cc  -fPIC -DPIC -o .libs/Scalar_Products.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Linear_Form.cc -o Linear_Form.o >/dev/null 2>&1
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o PIP_Tree.lo PIP_Tree.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o PIP_Problem.lo PIP_Problem.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o MIP_Problem.lo MIP_Problem.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o PIP_Tree.lo PIP_Tree.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c MIP_Problem.cc  -fPIC -DPIC -o .libs/MIP_Problem.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c PIP_Tree.cc  -fPIC -DPIC -o .libs/PIP_Tree.o
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o PIP_Problem.lo PIP_Problem.cc
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c PIP_Problem.cc  -fPIC -DPIC -o .libs/PIP_Problem.o
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Poly_Con_Relation.lo Poly_Con_Relation.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Linear_Expression_Interface.cc -o Linear_Expression_Interface.o >/dev/null 2>&1
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
@@ -2058,7 +2091,6 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Poly_Con_Relation.cc  -fPIC -DPIC -o .libs/Poly_Con_Relation.o
 In file included from Scalar_Products.cc:26:
 Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
@@ -2074,6 +2106,17 @@
 Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Poly_Con_Relation.lo Poly_Con_Relation.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Scalar_Products.cc -o Scalar_Products.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Linear_Expression_Impl.cc -o Linear_Expression_Impl.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Poly_Con_Relation.cc  -fPIC -DPIC -o .libs/Poly_Con_Relation.o
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Poly_Gen_Relation.lo Poly_Gen_Relation.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o BHRZ03_Certificate.lo BHRZ03_Certificate.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Poly_Gen_Relation.cc  -fPIC -DPIC -o .libs/Poly_Gen_Relation.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c BHRZ03_Certificate.cc  -fPIC -DPIC -o .libs/BHRZ03_Certificate.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Poly_Con_Relation.cc -o Poly_Con_Relation.o >/dev/null 2>&1
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o H79_Certificate.lo H79_Certificate.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Grid_Certificate.lo Grid_Certificate.cc
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
@@ -2093,34 +2136,9 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Linear_Expression_Impl.cc -o Linear_Expression_Impl.o >/dev/null 2>&1
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Poly_Gen_Relation.lo Poly_Gen_Relation.cc
-In file included from Linear_System_templates.hh:30,
-                 from Linear_System_defs.hh:580,
-                 from Constraint_System_defs.hh:29,
-                 from MIP_Problem.cc:30:
-Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
-Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Scalar_Products.cc -o Scalar_Products.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Poly_Gen_Relation.cc  -fPIC -DPIC -o .libs/Poly_Gen_Relation.o
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o BHRZ03_Certificate.lo BHRZ03_Certificate.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c BHRZ03_Certificate.cc  -fPIC -DPIC -o .libs/BHRZ03_Certificate.o
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o H79_Certificate.lo H79_Certificate.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Grid_Certificate.lo Grid_Certificate.cc
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c H79_Certificate.cc  -fPIC -DPIC -o .libs/H79_Certificate.o
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Partial_Function.lo Partial_Function.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_Certificate.cc  -fPIC -DPIC -o .libs/Grid_Certificate.o
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Partial_Function.lo Partial_Function.cc
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
@@ -2144,10 +2162,45 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Poly_Gen_Relation.cc -o Poly_Gen_Relation.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_Certificate.cc  -fPIC -DPIC -o .libs/Grid_Certificate.o
+In file included from CO_Tree_defs.hh:1557,
+                 from Sparse_Row_defs.hh:29,
+                 from Expression_Adapter_defs.hh:31,
+                 from Linear_Expression_defs.hh:48,
+                 from PIP_Problem_defs.hh:30,
+                 from PIP_Problem.cc:25:
+CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from mp_std_bits_defs.hh:28,
+                 from checked_defs.hh:27,
+                 from Checked_Number_defs.hh:28,
+                 from Coefficient_types.hh:16,
+                 from Linear_Expression_defs.hh:36,
+                 from PIP_Problem_defs.hh:30,
+                 from PIP_Problem.cc:25:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from Linear_System_templates.hh:30,
+                 from Linear_System_defs.hh:580,
+                 from Constraint_System_defs.hh:29,
+                 from MIP_Problem.cc:30:
+Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
+Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Partial_Function.cc  -fPIC -DPIC -o .libs/Partial_Function.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Poly_Con_Relation.cc -o Poly_Con_Relation.o >/dev/null 2>&1
 In file included from Linear_System_templates.hh:30,
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
@@ -2167,7 +2220,27 @@
 Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Polyhedron_nonpublic.lo Polyhedron_nonpublic.cc
+In file included from Linear_System_templates.hh:30,
+                 from Linear_System_defs.hh:580,
+                 from Constraint_System_defs.hh:29,
+                 from PIP_Tree_defs.hh:30,
+                 from PIP_Problem.cc:26:
+Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
+Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Polyhedron_nonpublic.lo Polyhedron_nonpublic.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Poly_Gen_Relation.cc -o Poly_Gen_Relation.o >/dev/null 2>&1
 PIP_Tree.cc: In copy constructor 'Parma_Polyhedra_Library::PIP_Decision_Node::PIP_Decision_Node(const Parma_Polyhedra_Library::PIP_Decision_Node&)':
 PIP_Tree.cc:1105:8: warning: 'template<class> class std::auto_ptr' is deprecated [-Wdeprecated-declarations]
    std::auto_ptr<PIP_Tree_Node> wrapped_node(false_child);
@@ -2187,6 +2260,7 @@
 /usr/include/c++/8/bits/unique_ptr.h:53:28: note: declared here
    template<typename> class auto_ptr;
                             ^~~~~~~~
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Polyhedron_nonpublic.cc  -fPIC -DPIC -o .libs/Polyhedron_nonpublic.o
 PIP_Tree.cc: In member function 'virtual Parma_Polyhedra_Library::PIP_Tree_Node* Parma_Polyhedra_Library::PIP_Solution_Node::solve(const Parma_Polyhedra_Library::PIP_Problem&, bool, const Parma_Polyhedra_Library::Matrix<Parma_Polyhedra_Library::Sparse_Row>&, const Parma_Polyhedra_Library::Variables_Set&, Parma_Polyhedra_Library::dimension_type, int)':
 PIP_Tree.cc:3144:12: warning: 'template<class> class std::auto_ptr' is deprecated [-Wdeprecated-declarations]
        std::auto_ptr<PIP_Tree_Node> wrapped_node(t_node);
@@ -2206,49 +2280,29 @@
 /usr/include/c++/8/bits/unique_ptr.h:53:28: note: declared here
    template<typename> class auto_ptr;
                             ^~~~~~~~
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Polyhedron_nonpublic.cc  -fPIC -DPIC -o .libs/Polyhedron_nonpublic.o
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Polyhedron_public.lo Polyhedron_public.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Polyhedron_chdims.lo Polyhedron_chdims.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Polyhedron_public.cc  -fPIC -DPIC -o .libs/Polyhedron_public.o
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
                  from Linear_Expression_defs.hh:48,
-                 from PIP_Problem_defs.hh:30,
-                 from PIP_Problem.cc:25:
+                 from Grid_defs.hh:31,
+                 from Grid_Certificate.cc:27:
 CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
                                             ^
-In file included from mp_std_bits_defs.hh:28,
-                 from checked_defs.hh:27,
-                 from Checked_Number_defs.hh:28,
-                 from Coefficient_types.hh:16,
-                 from Linear_Expression_defs.hh:36,
-                 from PIP_Problem_defs.hh:30,
-                 from PIP_Problem.cc:25:
+In file included from meta_programming.hh:27,
+                 from C_Integer.hh:27,
+                 from globals_defs.hh:28,
+                 from Grid_Certificate_defs.hh:30,
+                 from Grid_Certificate.cc:26:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Polyhedron_public.lo Polyhedron_public.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Polyhedron_public.cc  -fPIC -DPIC -o .libs/Polyhedron_public.o
-In file included from Linear_System_templates.hh:30,
-                 from Linear_System_defs.hh:580,
-                 from Constraint_System_defs.hh:29,
-                 from PIP_Tree_defs.hh:30,
-                 from PIP_Problem.cc:26:
-Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
-Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Polyhedron_chdims.lo Polyhedron_chdims.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Polyhedron_widenings.lo Polyhedron_widenings.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Polyhedron_chdims.cc  -fPIC -DPIC -o .libs/Polyhedron_chdims.o
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
@@ -2270,11 +2324,25 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Polyhedron_widenings.lo Polyhedron_widenings.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Partial_Function.cc -o Partial_Function.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Polyhedron_chdims.cc  -fPIC -DPIC -o .libs/Polyhedron_chdims.o
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o C_Polyhedron.lo C_Polyhedron.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o NNC_Polyhedron.lo NNC_Polyhedron.cc
+In file included from Linear_System_templates.hh:30,
+                 from Linear_System_defs.hh:580,
+                 from Constraint_System_defs.hh:29,
+                 from Grid_defs.hh:33,
+                 from Grid_Certificate.cc:27:
+Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
+Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Polyhedron_widenings.cc  -fPIC -DPIC -o .libs/Polyhedron_widenings.o
 In file included from Linear_System_templates.hh:30,
                  from Linear_System_defs.hh:580,
@@ -2295,14 +2363,21 @@
 Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Grid_nonpublic.lo Grid_nonpublic.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Grid_public.lo Grid_public.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Partial_Function.cc -o Partial_Function.o >/dev/null 2>&1
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o C_Polyhedron.lo C_Polyhedron.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o NNC_Polyhedron.lo NNC_Polyhedron.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Grid_nonpublic.lo Grid_nonpublic.cc
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
                  from Linear_Expression_defs.hh:48,
-                 from Grid_defs.hh:31,
-                 from Grid_Certificate.cc:27:
+                 from Linear_System_templates.hh:28,
+                 from Linear_System_defs.hh:580,
+                 from Constraint_System_defs.hh:29,
+                 from Polyhedron_defs.hh:32,
+                 from H79_Certificate_inlines.hh:27,
+                 from H79_Certificate_defs.hh:95,
+                 from H79_Certificate.cc:26:
 CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -2310,21 +2385,25 @@
 In file included from meta_programming.hh:27,
                  from C_Integer.hh:27,
                  from globals_defs.hh:28,
-                 from Grid_Certificate_defs.hh:30,
-                 from Grid_Certificate.cc:26:
+                 from Variable_inlines.hh:27,
+                 from Variable_defs.hh:155,
+                 from Polyhedron_defs.hh:29,
+                 from H79_Certificate_inlines.hh:27,
+                 from H79_Certificate_defs.hh:95,
+                 from H79_Certificate.cc:26:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c C_Polyhedron.cc  -fPIC -DPIC -o .libs/C_Polyhedron.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c NNC_Polyhedron.cc  -fPIC -DPIC -o .libs/NNC_Polyhedron.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c C_Polyhedron.cc  -fPIC -DPIC -o .libs/C_Polyhedron.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_nonpublic.cc  -fPIC -DPIC -o .libs/Grid_nonpublic.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_public.cc  -fPIC -DPIC -o .libs/Grid_public.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Linear_Expression.cc -o Linear_Expression.o >/dev/null 2>&1
 In file included from Linear_System_templates.hh:30,
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
-                 from Grid_defs.hh:33,
-                 from Grid_Certificate.cc:27:
+                 from Polyhedron_defs.hh:32,
+                 from H79_Certificate_inlines.hh:27,
+                 from H79_Certificate_defs.hh:95,
+                 from H79_Certificate.cc:26:
 Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -2339,6 +2418,7 @@
 Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_Certificate.cc -o Grid_Certificate.o >/dev/null 2>&1
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
@@ -2347,9 +2427,7 @@
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
                  from Polyhedron_defs.hh:32,
-                 from H79_Certificate_inlines.hh:27,
-                 from H79_Certificate_defs.hh:95,
-                 from H79_Certificate.cc:26:
+                 from Polyhedron_nonpublic.cc:26:
 CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -2360,19 +2438,17 @@
                  from Variable_inlines.hh:27,
                  from Variable_defs.hh:155,
                  from Polyhedron_defs.hh:29,
-                 from H79_Certificate_inlines.hh:27,
-                 from H79_Certificate_defs.hh:95,
-                 from H79_Certificate.cc:26:
+                 from Polyhedron_nonpublic.cc:26:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Grid_public.lo Grid_public.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Linear_Expression.cc -o Linear_Expression.o >/dev/null 2>&1
 In file included from Linear_System_templates.hh:30,
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
                  from Polyhedron_defs.hh:32,
-                 from H79_Certificate_inlines.hh:27,
-                 from H79_Certificate_defs.hh:95,
-                 from H79_Certificate.cc:26:
+                 from Polyhedron_nonpublic.cc:26:
 Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -2387,8 +2463,7 @@
 Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Grid_chdims.lo Grid_chdims.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_Certificate.cc -o Grid_Certificate.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_public.cc  -fPIC -DPIC -o .libs/Grid_public.o
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
@@ -2397,7 +2472,7 @@
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
                  from Polyhedron_defs.hh:32,
-                 from Polyhedron_public.cc:25:
+                 from Polyhedron_chdims.cc:26:
 CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -2408,7 +2483,7 @@
                  from Variable_inlines.hh:27,
                  from Variable_defs.hh:155,
                  from Polyhedron_defs.hh:29,
-                 from Polyhedron_public.cc:25:
+                 from Polyhedron_chdims.cc:26:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -2416,7 +2491,7 @@
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
                  from Polyhedron_defs.hh:32,
-                 from Polyhedron_public.cc:25:
+                 from Polyhedron_chdims.cc:26:
 Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -2431,7 +2506,6 @@
 Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_chdims.cc  -fPIC -DPIC -o .libs/Grid_chdims.o
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
@@ -2440,7 +2514,7 @@
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
                  from Polyhedron_defs.hh:32,
-                 from Polyhedron_nonpublic.cc:26:
+                 from Polyhedron_widenings.cc:26:
 CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -2451,11 +2525,10 @@
                  from Variable_inlines.hh:27,
                  from Variable_defs.hh:155,
                  from Polyhedron_defs.hh:29,
-                 from Polyhedron_nonpublic.cc:26:
+                 from Polyhedron_widenings.cc:26:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c BHRZ03_Certificate.cc -o BHRZ03_Certificate.o >/dev/null 2>&1
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
@@ -2464,7 +2537,7 @@
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
                  from Polyhedron_defs.hh:32,
-                 from Polyhedron_chdims.cc:26:
+                 from Polyhedron_public.cc:25:
 CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -2475,15 +2548,16 @@
                  from Variable_inlines.hh:27,
                  from Variable_defs.hh:155,
                  from Polyhedron_defs.hh:29,
-                 from Polyhedron_chdims.cc:26:
+                 from Polyhedron_public.cc:25:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c BHRZ03_Certificate.cc -o BHRZ03_Certificate.o >/dev/null 2>&1
 In file included from Linear_System_templates.hh:30,
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
                  from Polyhedron_defs.hh:32,
-                 from Polyhedron_nonpublic.cc:26:
+                 from Polyhedron_widenings.cc:26:
 Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -2498,36 +2572,11 @@
 Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-In file included from CO_Tree_defs.hh:1557,
-                 from Sparse_Row_defs.hh:29,
-                 from Expression_Adapter_defs.hh:31,
-                 from Linear_Expression_defs.hh:48,
-                 from Linear_System_templates.hh:28,
-                 from Linear_System_defs.hh:580,
-                 from Constraint_System_defs.hh:29,
-                 from Polyhedron_defs.hh:32,
-                 from NNC_Polyhedron_defs.hh:29,
-                 from NNC_Polyhedron.cc:25:
-CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from meta_programming.hh:27,
-                 from C_Integer.hh:27,
-                 from globals_defs.hh:28,
-                 from Variable_inlines.hh:27,
-                 from Variable_defs.hh:155,
-                 from Polyhedron_defs.hh:29,
-                 from NNC_Polyhedron_defs.hh:29,
-                 from NNC_Polyhedron.cc:25:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from Linear_System_templates.hh:30,
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
                  from Polyhedron_defs.hh:32,
-                 from Polyhedron_chdims.cc:26:
+                 from Polyhedron_public.cc:25:
 Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -2542,6 +2591,7 @@
 Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c PIP_Problem.cc -o PIP_Problem.o >/dev/null 2>&1
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
@@ -2567,12 +2617,13 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c H79_Certificate.cc -o H79_Certificate.o >/dev/null 2>&1
 In file included from Linear_System_templates.hh:30,
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
                  from Polyhedron_defs.hh:32,
-                 from NNC_Polyhedron_defs.hh:29,
-                 from NNC_Polyhedron.cc:25:
+                 from C_Polyhedron_defs.hh:29,
+                 from C_Polyhedron.cc:25:
 Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -2591,21 +2642,12 @@
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
                  from Linear_Expression_defs.hh:48,
-                 from Grid_defs.hh:31,
-                 from Grid_nonpublic.cc:26:
-CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from CO_Tree_defs.hh:1557,
-                 from Sparse_Row_defs.hh:29,
-                 from Expression_Adapter_defs.hh:31,
-                 from Linear_Expression_defs.hh:48,
                  from Linear_System_templates.hh:28,
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
                  from Polyhedron_defs.hh:32,
-                 from Polyhedron_widenings.cc:26:
+                 from NNC_Polyhedron_defs.hh:29,
+                 from NNC_Polyhedron.cc:25:
 CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -2616,10 +2658,21 @@
                  from Variable_inlines.hh:27,
                  from Variable_defs.hh:155,
                  from Polyhedron_defs.hh:29,
-                 from Polyhedron_widenings.cc:26:
+                 from NNC_Polyhedron_defs.hh:29,
+                 from NNC_Polyhedron.cc:25:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from CO_Tree_defs.hh:1557,
+                 from Sparse_Row_defs.hh:29,
+                 from Expression_Adapter_defs.hh:31,
+                 from Linear_Expression_defs.hh:48,
+                 from Grid_defs.hh:31,
+                 from Grid_nonpublic.cc:26:
+CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
 In file included from meta_programming.hh:27,
                  from C_Integer.hh:27,
                  from globals_defs.hh:28,
@@ -2631,26 +2684,6 @@
 In file included from Linear_System_templates.hh:30,
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
-                 from Polyhedron_defs.hh:32,
-                 from C_Polyhedron_defs.hh:29,
-                 from C_Polyhedron.cc:25:
-Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
-Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-In file included from Linear_System_templates.hh:30,
-                 from Linear_System_defs.hh:580,
-                 from Constraint_System_defs.hh:29,
                  from Grid_defs.hh:33,
                  from Grid_nonpublic.cc:26:
 Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
@@ -2667,26 +2700,6 @@
 Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c H79_Certificate.cc -o H79_Certificate.o >/dev/null 2>&1
-In file included from Linear_System_templates.hh:30,
-                 from Linear_System_defs.hh:580,
-                 from Constraint_System_defs.hh:29,
-                 from Polyhedron_defs.hh:32,
-                 from Polyhedron_widenings.cc:26:
-Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
-Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
@@ -2708,8 +2721,9 @@
 In file included from Linear_System_templates.hh:30,
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
-                 from Grid_defs.hh:33,
-                 from Grid_public.cc:25:
+                 from Polyhedron_defs.hh:32,
+                 from NNC_Polyhedron_defs.hh:29,
+                 from NNC_Polyhedron.cc:25:
 Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -2724,30 +2738,11 @@
 Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-In file included from CO_Tree_defs.hh:1557,
-                 from Sparse_Row_defs.hh:29,
-                 from Expression_Adapter_defs.hh:31,
-                 from Linear_Expression_defs.hh:48,
-                 from Grid_defs.hh:31,
-                 from Grid_chdims.cc:26:
-CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from meta_programming.hh:27,
-                 from C_Integer.hh:27,
-                 from globals_defs.hh:28,
-                 from Grid_defs.hh:28,
-                 from Grid_chdims.cc:26:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c PIP_Problem.cc -o PIP_Problem.o >/dev/null 2>&1
 In file included from Linear_System_templates.hh:30,
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
                  from Grid_defs.hh:33,
-                 from Grid_chdims.cc:26:
+                 from Grid_public.cc:25:
 Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -2762,22 +2757,22 @@
 Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c C_Polyhedron.cc -o C_Polyhedron.o >/dev/null 2>&1
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Grid_chdims.lo Grid_chdims.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_chdims.cc  -fPIC -DPIC -o .libs/Grid_chdims.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Polyhedron_chdims.cc -o Polyhedron_chdims.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c NNC_Polyhedron.cc -o NNC_Polyhedron.o >/dev/null 2>&1
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Grid_widenings.lo Grid_widenings.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Grid_widenings.lo Grid_widenings.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o BD_Shape.lo BD_Shape.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c BD_Shape.cc  -fPIC -DPIC -o .libs/BD_Shape.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_widenings.cc  -fPIC -DPIC -o .libs/Grid_widenings.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c C_Polyhedron.cc -o C_Polyhedron.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_nonpublic.cc -o Grid_nonpublic.o >/dev/null 2>&1
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o BD_Shape.lo BD_Shape.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c BD_Shape.cc  -fPIC -DPIC -o .libs/BD_Shape.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Polyhedron_chdims.cc -o Polyhedron_chdims.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c MIP_Problem.cc -o MIP_Problem.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_chdims.cc -o Grid_chdims.o >/dev/null 2>&1
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
                  from Linear_Expression_defs.hh:48,
                  from Grid_defs.hh:31,
-                 from Grid_widenings.cc:26:
+                 from Grid_chdims.cc:26:
 CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -2786,16 +2781,15 @@
                  from C_Integer.hh:27,
                  from globals_defs.hh:28,
                  from Grid_defs.hh:28,
-                 from Grid_widenings.cc:26:
+                 from Grid_chdims.cc:26:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Octagonal_Shape.lo Octagonal_Shape.cc
 In file included from Linear_System_templates.hh:30,
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
                  from Grid_defs.hh:33,
-                 from Grid_widenings.cc:26:
+                 from Grid_chdims.cc:26:
 Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -2810,7 +2804,10 @@
 Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Octagonal_Shape.lo Octagonal_Shape.cc
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Octagonal_Shape.cc  -fPIC -DPIC -o .libs/Octagonal_Shape.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c MIP_Problem.cc -o MIP_Problem.o >/dev/null 2>&1
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Pointset_Powerset.lo Pointset_Powerset.cc
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
@@ -2833,7 +2830,25 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_widenings.cc -o Grid_widenings.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Pointset_Powerset.cc  -fPIC -DPIC -o .libs/Pointset_Powerset.o
+In file included from CO_Tree_defs.hh:1557,
+                 from Sparse_Row_defs.hh:29,
+                 from Expression_Adapter_defs.hh:31,
+                 from Linear_Expression_defs.hh:48,
+                 from Grid_defs.hh:31,
+                 from Grid_widenings.cc:26:
+CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from meta_programming.hh:27,
+                 from C_Integer.hh:27,
+                 from globals_defs.hh:28,
+                 from Grid_defs.hh:28,
+                 from Grid_widenings.cc:26:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from Linear_System_templates.hh:30,
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
@@ -2854,6 +2869,29 @@
 Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o CO_Tree.lo CO_Tree.cc
+In file included from Linear_System_templates.hh:30,
+                 from Linear_System_defs.hh:580,
+                 from Constraint_System_defs.hh:29,
+                 from Grid_defs.hh:33,
+                 from Grid_widenings.cc:26:
+Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
+Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c CO_Tree.cc  -fPIC -DPIC -o .libs/CO_Tree.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_chdims.cc -o Grid_chdims.o >/dev/null 2>&1
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Sparse_Row.lo Sparse_Row.cc
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
@@ -2880,7 +2918,7 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Pointset_Powerset.lo Pointset_Powerset.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Sparse_Row.cc  -fPIC -DPIC -o .libs/Sparse_Row.o
 In file included from Linear_System_templates.hh:30,
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
@@ -2904,11 +2942,9 @@
 Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o CO_Tree.lo CO_Tree.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Pointset_Powerset.cc  -fPIC -DPIC -o .libs/Pointset_Powerset.o
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Sparse_Row.lo Sparse_Row.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c CO_Tree.cc  -fPIC -DPIC -o .libs/CO_Tree.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Sparse_Row.cc  -fPIC -DPIC -o .libs/Sparse_Row.o
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Dense_Row.lo Dense_Row.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Dense_Row.cc  -fPIC -DPIC -o .libs/Dense_Row.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Polyhedron_widenings.cc -o Polyhedron_widenings.o >/dev/null 2>&1
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
@@ -2932,7 +2968,23 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Dense_Row.lo Dense_Row.cc
+In file included from CO_Tree_defs.hh:1557,
+                 from CO_Tree.cc:25:
+CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from mp_std_bits_defs.hh:28,
+                 from checked_defs.hh:27,
+                 from Checked_Number_defs.hh:28,
+                 from Coefficient_types.hh:16,
+                 from Coefficient_defs.hh:27,
+                 from CO_Tree_defs.hh:29,
+                 from CO_Tree.cc:25:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c BD_Shape.cc -o BD_Shape.o >/dev/null 2>&1
 In file included from Linear_System_templates.hh:30,
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
@@ -2954,26 +3006,9 @@
 Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-In file included from CO_Tree_defs.hh:1557,
-                 from CO_Tree.cc:25:
-CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from mp_std_bits_defs.hh:28,
-                 from checked_defs.hh:27,
-                 from Checked_Number_defs.hh:28,
-                 from Coefficient_types.hh:16,
-                 from Coefficient_defs.hh:27,
-                 from CO_Tree_defs.hh:29,
-                 from CO_Tree.cc:25:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Bit_Matrix.lo Bit_Matrix.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Dense_Row.cc  -fPIC -DPIC -o .libs/Dense_Row.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Octagonal_Shape.cc -o Octagonal_Shape.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c BD_Shape.cc -o BD_Shape.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_public.cc -o Grid_public.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_widenings.cc -o Grid_widenings.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c CO_Tree.cc -o CO_Tree.o >/dev/null 2>&1
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Sparse_Row.cc:25:
@@ -2992,13 +3027,8 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Bit_Matrix.lo Bit_Matrix.cc
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Bit_Matrix.cc  -fPIC -DPIC -o .libs/Bit_Matrix.o
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Bit_Row.lo Bit_Row.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Bit_Row.cc  -fPIC -DPIC -o .libs/Bit_Row.o
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Ph_Status.lo Ph_Status.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Ph_Status.cc  -fPIC -DPIC -o .libs/Ph_Status.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c CO_Tree.cc -o CO_Tree.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Polyhedron_widenings.cc -o Polyhedron_widenings.o >/dev/null 2>&1
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Dense_Row.cc:28:
@@ -3049,7 +3079,6 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::Coefficient' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_public.cc -o Grid_public.o >/dev/null 2>&1
 Dense_Row.cc: In member function 'void Parma_Polyhedra_Library::Dense_Row::add_zeroes_and_shift(Parma_Polyhedra_Library::dimension_type, Parma_Polyhedra_Library::dimension_type)':
 Dense_Row.cc:168:63: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::Coefficient' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
      memcpy(new_row.impl.vec, impl.vec, sizeof(Coefficient) * i);
@@ -3084,13 +3113,23 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::Coefficient' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Grid_Status.lo Grid_Status.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c PIP_Tree.cc -o PIP_Tree.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Octagonal_Shape.cc -o Octagonal_Shape.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Dense_Row.cc -o Dense_Row.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Polyhedron_nonpublic.cc -o Polyhedron_nonpublic.o >/dev/null 2>&1
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Bit_Row.lo Bit_Row.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Bit_Row.cc  -fPIC -DPIC -o .libs/Bit_Row.o
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Ph_Status.lo Ph_Status.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Ph_Status.cc  -fPIC -DPIC -o .libs/Ph_Status.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Bit_Row.cc -o Bit_Row.o >/dev/null 2>&1
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Grid_Status.lo Grid_Status.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Sparse_Row.cc -o Sparse_Row.o >/dev/null 2>&1
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Variable.lo Variable.cc
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_Status.cc  -fPIC -DPIC -o .libs/Grid_Status.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c PIP_Tree.cc -o PIP_Tree.o >/dev/null 2>&1
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Variable.lo Variable.cc
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Variable.cc  -fPIC -DPIC -o .libs/Variable.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Dense_Row.cc -o Dense_Row.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Bit_Matrix.cc -o Bit_Matrix.o >/dev/null 2>&1
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Variables_Set.lo Variables_Set.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Variables_Set.cc  -fPIC -DPIC -o .libs/Variables_Set.o
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
@@ -3114,24 +3153,8 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from CO_Tree_defs.hh:1557,
-                 from Sparse_Row_defs.hh:29,
-                 from Expression_Adapter_defs.hh:31,
-                 from Linear_Expression_defs.hh:48,
-                 from Grid_defs.hh:31,
-                 from Grid_Status.cc:25:
-CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from meta_programming.hh:27,
-                 from C_Integer.hh:27,
-                 from globals_defs.hh:28,
-                 from Grid_defs.hh:28,
-                 from Grid_Status.cc:25:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Grid_conversion.lo Grid_conversion.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Grid_simplify.lo Grid_simplify.cc
 In file included from Linear_System_templates.hh:30,
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
@@ -3151,6 +3174,31 @@
 Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_conversion.cc  -fPIC -DPIC -o .libs/Grid_conversion.o
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o set_GMP_memory_alloc_funcs.lo set_GMP_memory_alloc_funcs.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_simplify.cc  -fPIC -DPIC -o .libs/Grid_simplify.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c set_GMP_memory_alloc_funcs.cc  -fPIC -DPIC -o .libs/set_GMP_memory_alloc_funcs.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Variable.cc -o Variable.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c set_GMP_memory_alloc_funcs.cc -o set_GMP_memory_alloc_funcs.o >/dev/null 2>&1
+In file included from CO_Tree_defs.hh:1557,
+                 from Sparse_Row_defs.hh:29,
+                 from Expression_Adapter_defs.hh:31,
+                 from Linear_Expression_defs.hh:48,
+                 from Grid_defs.hh:31,
+                 from Grid_Status.cc:25:
+CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from meta_programming.hh:27,
+                 from C_Integer.hh:27,
+                 from globals_defs.hh:28,
+                 from Grid_defs.hh:28,
+                 from Grid_Status.cc:25:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o stdiobuf.lo stdiobuf.cc
 In file included from Linear_System_templates.hh:30,
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
@@ -3170,18 +3218,30 @@
 Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Polyhedron_nonpublic.cc -o Polyhedron_nonpublic.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Sparse_Row.cc -o Sparse_Row.o >/dev/null 2>&1
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Variables_Set.lo Variables_Set.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Grid_conversion.lo Grid_conversion.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Variables_Set.cc  -fPIC -DPIC -o .libs/Variables_Set.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_Status.cc -o Grid_Status.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_conversion.cc  -fPIC -DPIC -o .libs/Grid_conversion.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c stdiobuf.cc  -fPIC -DPIC -o .libs/stdiobuf.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Pointset_Powerset.cc -o Pointset_Powerset.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Bit_Matrix.cc -o Bit_Matrix.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Variable.cc -o Variable.o >/dev/null 2>&1
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Grid_simplify.lo Grid_simplify.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_simplify.cc  -fPIC -DPIC -o .libs/Grid_simplify.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Variables_Set.cc -o Variables_Set.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_Status.cc -o Grid_Status.o >/dev/null 2>&1
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o c_streambuf.lo c_streambuf.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c c_streambuf.cc  -fPIC -DPIC -o .libs/c_streambuf.o
+In file included from CO_Tree_defs.hh:1557,
+                 from Sparse_Row_defs.hh:29,
+                 from Expression_Adapter_defs.hh:31,
+                 from Linear_Expression_defs.hh:48,
+                 from Grid_defs.hh:31,
+                 from Grid_simplify.cc:26:
+CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from meta_programming.hh:27,
+                 from C_Integer.hh:27,
+                 from globals_defs.hh:28,
+                 from Grid_defs.hh:28,
+                 from Grid_simplify.cc:26:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Ph_Status.cc -o Ph_Status.o >/dev/null 2>&1
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
@@ -3201,12 +3261,12 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o set_GMP_memory_alloc_funcs.lo set_GMP_memory_alloc_funcs.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c stdiobuf.cc -o stdiobuf.o >/dev/null 2>&1
 In file included from Linear_System_templates.hh:30,
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
                  from Grid_defs.hh:33,
-                 from Grid_conversion.cc:25:
+                 from Grid_simplify.cc:26:
 Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -3221,34 +3281,11 @@
 Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c set_GMP_memory_alloc_funcs.cc  -fPIC -DPIC -o .libs/set_GMP_memory_alloc_funcs.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c set_GMP_memory_alloc_funcs.cc -o set_GMP_memory_alloc_funcs.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Variables_Set.cc -o Variables_Set.o >/dev/null 2>&1
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o stdiobuf.lo stdiobuf.cc
-In file included from CO_Tree_defs.hh:1557,
-                 from Sparse_Row_defs.hh:29,
-                 from Expression_Adapter_defs.hh:31,
-                 from Linear_Expression_defs.hh:48,
-                 from Grid_defs.hh:31,
-                 from Grid_simplify.cc:26:
-CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from meta_programming.hh:27,
-                 from C_Integer.hh:27,
-                 from globals_defs.hh:28,
-                 from Grid_defs.hh:28,
-                 from Grid_simplify.cc:26:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o c_streambuf.lo c_streambuf.cc
 In file included from Linear_System_templates.hh:30,
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
                  from Grid_defs.hh:33,
-                 from Grid_simplify.cc:26:
+                 from Grid_conversion.cc:25:
 Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -3263,23 +3300,31 @@
 Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c stdiobuf.cc  -fPIC -DPIC -o .libs/stdiobuf.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c c_streambuf.cc  -fPIC -DPIC -o .libs/c_streambuf.o
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o globals.lo globals.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o globals.lo globals.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c c_streambuf.cc -o c_streambuf.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c globals.cc  -fPIC -DPIC -o .libs/globals.o
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o mp_std_bits.lo mp_std_bits.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o mp_std_bits.lo mp_std_bits.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Weight_Profiler.lo Weight_Profiler.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o version.lo version.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Polyhedron_public.cc -o Polyhedron_public.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c mp_std_bits.cc  -fPIC -DPIC -o .libs/mp_std_bits.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c stdiobuf.cc -o stdiobuf.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c c_streambuf.cc -o c_streambuf.o >/dev/null 2>&1
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Weight_Profiler.lo Weight_Profiler.cc
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Weight_Profiler.cc  -fPIC -DPIC -o .libs/Weight_Profiler.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_conversion.cc -o Grid_conversion.o >/dev/null 2>&1
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o version.lo version.cc
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c version.cc  -fPIC -DPIC -o .libs/version.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c mp_std_bits.cc -o mp_std_bits.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c version.cc -o version.o >/dev/null 2>&1
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o termination.lo termination.cc
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o wrap_string.lo wrap_string.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o termination.lo termination.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o wrap_string.lo wrap_string.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Time.lo Time.cc
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Watchdog.lo Watchdog.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c termination.cc  -fPIC -DPIC -o .libs/termination.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c wrap_string.cc  -fPIC -DPIC -o .libs/wrap_string.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Watchdog.cc  -fPIC -DPIC -o .libs/Watchdog.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Time.cc  -fPIC -DPIC -o .libs/Time.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Time.cc -o Time.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c mp_std_bits.cc -o mp_std_bits.o >/dev/null 2>&1
+/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Threshold_Watcher.lo Threshold_Watcher.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Threshold_Watcher.cc  -fPIC -DPIC -o .libs/Threshold_Watcher.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_simplify.cc -o Grid_simplify.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Weight_Profiler.cc -o Weight_Profiler.o >/dev/null 2>&1
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
@@ -3297,20 +3342,10 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Time.lo Time.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c termination.cc  -fPIC -DPIC -o .libs/termination.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c wrap_string.cc  -fPIC -DPIC -o .libs/wrap_string.o
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Watchdog.lo Watchdog.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Time.cc  -fPIC -DPIC -o .libs/Time.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Weight_Profiler.cc -o Weight_Profiler.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Time.cc -o Time.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_simplify.cc -o Grid_simplify.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Watchdog.cc  -fPIC -DPIC -o .libs/Watchdog.o
-/bin/bash ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..  -I.. -I../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o Threshold_Watcher.lo Threshold_Watcher.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Threshold_Watcher.cc  -fPIC -DPIC -o .libs/Threshold_Watcher.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c globals.cc -o globals.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c wrap_string.cc -o wrap_string.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Grid_conversion.cc -o Grid_conversion.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Threshold_Watcher.cc -o Threshold_Watcher.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Watchdog.cc -o Watchdog.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c wrap_string.cc -o wrap_string.o >/dev/null 2>&1
 In file included from CO_Tree_defs.hh:1557,
                  from Sparse_Row_defs.hh:29,
                  from Expression_Adapter_defs.hh:31,
@@ -3332,7 +3367,7 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Watchdog.cc -o Watchdog.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c globals.cc -o globals.o >/dev/null 2>&1
 In file included from Linear_System_templates.hh:30,
                  from Linear_System_defs.hh:580,
                  from Constraint_System_defs.hh:29,
@@ -3353,9 +3388,8 @@
 Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c Polyhedron_public.cc -o Polyhedron_public.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -I.. -I../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c termination.cc -o termination.o >/dev/null 2>&1
-/bin/bash ../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -version-info 14:0:0 -Wl,-z,relro -o libppl.la -rpath /usr/lib/x86_64-linux-gnu assertions.lo Box.lo checked.lo Checked_Number.lo Float.lo fpu-ia32.lo BDS_Status.lo Box_Status.lo Og_Status.lo Concrete_Expression.lo Constraint.lo Constraint_System.lo Congruence.lo Congruence_System.lo Generator_System.lo Grid_Generator_System.lo Generator.lo Grid_Generator.lo Handler.lo Init.lo Coefficient.lo Linear_Expression.lo Linear_Expression_Impl.lo Linear_Expression_Interface.lo Linear_Form.lo Scalar_Products.lo MIP_Problem.lo PIP_Tree.lo PIP_Problem.lo Poly_Con_Relation.lo Poly_Gen_Relation.lo BHRZ03_Certificate.lo H79_Certificate.lo Grid_Certificate.lo Partial_Function.lo Polyhedron_nonpublic.lo Polyhedron_public.lo Polyhedron_chdims.lo Polyhedron_widenings.lo C_Polyhedron.lo NNC_Polyhedron.lo Grid_nonpublic.lo Grid_public.lo Grid_chdims.lo Grid_widenings.lo BD_Shape.lo Octagonal_Shape.lo Pointset_Powerset.lo CO_Tree.lo Sparse_Row.lo Dense_Row.lo Bit_Matrix.lo Bit_Row.lo Ph_Status.lo Grid_Status.lo Variable.lo Variables_Set.lo Grid_conversion.lo Grid_simplify.lo set_GMP_memory_alloc_funcs.lo stdiobuf.lo c_streambuf.lo globals.lo mp_std_bits.lo Weight_Profiler.lo version.lo    termination.lo wrap_string.lo Time.lo Watchdog.lo Threshold_Watcher.lo -lgmpxx -lgmp 
+/bin/sh ../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -version-info 14:0:0 -Wl,-z,relro -o libppl.la -rpath /usr/lib/x86_64-linux-gnu assertions.lo Box.lo checked.lo Checked_Number.lo Float.lo fpu-ia32.lo BDS_Status.lo Box_Status.lo Og_Status.lo Concrete_Expression.lo Constraint.lo Constraint_System.lo Congruence.lo Congruence_System.lo Generator_System.lo Grid_Generator_System.lo Generator.lo Grid_Generator.lo Handler.lo Init.lo Coefficient.lo Linear_Expression.lo Linear_Expression_Impl.lo Linear_Expression_Interface.lo Linear_Form.lo Scalar_Products.lo MIP_Problem.lo PIP_Tree.lo PIP_Problem.lo Poly_Con_Relation.lo Poly_Gen_Relation.lo BHRZ03_Certificate.lo H79_Certificate.lo Grid_Certificate.lo Partial_Function.lo Polyhedron_nonpublic.lo Polyhedron_public.lo Polyhedron_chdims.lo Polyhedron_widenings.lo C_Polyhedron.lo NNC_Polyhedron.lo Grid_nonpublic.lo Grid_public.lo Grid_chdims.lo Grid_widenings.lo BD_Shape.lo Octagonal_Shape.lo Pointset_Powerset.lo CO_Tree.lo Sparse_Row.lo Dense_Row.lo Bit_Matrix.lo Bit_Row.lo Ph_Status.lo Grid_Status.lo Variable.lo Variables_Set.lo Grid_conversion.lo Grid_simplify.lo set_GMP_memory_alloc_funcs.lo stdiobuf.lo c_streambuf.lo globals.lo mp_std_bits.lo Weight_Profiler.lo version.lo    termination.lo wrap_string.lo Time.lo Watchdog.lo Threshold_Watcher.lo -lgmpxx -lgmp 
 libtool: link: g++  -fPIC -DPIC -shared -nostdlib /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/8/crtbeginS.o  .libs/assertions.o .libs/Box.o .libs/checked.o .libs/Checked_Number.o .libs/Float.o .libs/fpu-ia32.o .libs/BDS_Status.o .libs/Box_Status.o .libs/Og_Status.o .libs/Concrete_Expression.o .libs/Constraint.o .libs/Constraint_System.o .libs/Congruence.o .libs/Congruence_System.o .libs/Generator_System.o .libs/Grid_Generator_System.o .libs/Generator.o .libs/Grid_Generator.o .libs/Handler.o .libs/Init.o .libs/Coefficient.o .libs/Linear_Expression.o .libs/Linear_Expression_Impl.o .libs/Linear_Expression_Interface.o .libs/Linear_Form.o .libs/Scalar_Products.o .libs/MIP_Problem.o .libs/PIP_Tree.o .libs/PIP_Problem.o .libs/Poly_Con_Relation.o .libs/Poly_Gen_Relation.o .libs/BHRZ03_Certificate.o .libs/H79_Certificate.o .libs/Grid_Certificate.o .libs/Partial_Function.o .libs/Polyhedron_nonpublic.o .libs/Polyhedron_public.o .libs/Polyhedron_chdims.o .libs/Polyhedron_widenings.o .libs/C_Polyhedron.o .libs/NNC_Polyhedron.o .libs/Grid_nonpublic.o .libs/Grid_public.o .libs/Grid_chdims.o .libs/Grid_widenings.o .libs/BD_Shape.o .libs/Octagonal_Shape.o .libs/Pointset_Powerset.o .libs/CO_Tree.o .libs/Sparse_Row.o .libs/Dense_Row.o .libs/Bit_Matrix.o .libs/Bit_Row.o .libs/Ph_Status.o .libs/Grid_Status.o .libs/Variable.o .libs/Variables_Set.o .libs/Grid_conversion.o .libs/Grid_simplify.o .libs/set_GMP_memory_alloc_funcs.o .libs/stdiobuf.o .libs/c_streambuf.o .libs/globals.o .libs/mp_std_bits.o .libs/Weight_Profiler.o .libs/version.o .libs/termination.o .libs/wrap_string.o .libs/Time.o .libs/Watchdog.o .libs/Threshold_Watcher.o   -lgmpxx -lgmp -L/usr/lib/gcc/x86_64-linux-gnu/8 -L/usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/8/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/8/../../.. -lstdc++ -lm -lc -lgcc_s /usr/lib/gcc/x86_64-linux-gnu/8/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crtn.o  -g -O2 -g -O2 -fstack-protector-strong -g -Wl,-z -Wl,relro   -Wl,-soname -Wl,libppl.so.14 -o .libs/libppl.so.14.0.0
 libtool: link: (cd ".libs" && rm -f "libppl.so.14" && ln -s "libppl.so.14.0.0" "libppl.so.14")
 libtool: link: (cd ".libs" && rm -f "libppl.so" && ln -s "libppl.so.14.0.0" "libppl.so")
@@ -3363,7 +3397,7 @@
 ar: `u' modifier ignored since `D' is the default (see `U')
 libtool: link: ranlib .libs/libppl.a
 libtool: link: ( cd ".libs" && rm -f "libppl.la" && ln -s "../libppl.la" "libppl.la" )
-/bin/bash ../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o ppl-config BUGS.o COPYING.o CREDITS.o ppl-config.o -lgmpxx -lgmp libppl.la 
+/bin/sh ../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o ppl-config BUGS.o COPYING.o CREDITS.o ppl-config.o -lgmpxx -lgmp libppl.la 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/ppl-config BUGS.o COPYING.o CREDITS.o ppl-config.o  -lgmpxx -lgmp ./.libs/libppl.so
 make[5]: Leaving directory '/build/ppl-1.2/src'
 make[4]: Leaving directory '/build/ppl-1.2/src'
@@ -3456,67 +3490,43 @@
 make[7]: Entering directory '/build/ppl-1.2/interfaces/C'
 Making all in .
 make[8]: Entering directory '/build/ppl-1.2/interfaces/C'
-/bin/bash ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_implementation_common.lo ppl_c_implementation_common.cc
-/bin/bash ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_Polyhedron.lo ppl_c_Polyhedron.cc
-/bin/bash ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_Grid.lo ppl_c_Grid.cc
-/bin/bash ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_Rational_Box.lo ppl_c_Rational_Box.cc
-/bin/bash ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_BD_Shape_mpz_class.lo ppl_c_BD_Shape_mpz_class.cc
-/bin/bash ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_BD_Shape_mpq_class.lo ppl_c_BD_Shape_mpq_class.cc
-/bin/bash ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_Octagonal_Shape_mpz_class.lo ppl_c_Octagonal_Shape_mpz_class.cc
-/bin/bash ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_Octagonal_Shape_mpq_class.lo ppl_c_Octagonal_Shape_mpq_class.cc
-/bin/bash ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_Constraints_Product_C_Polyhedron_Grid.lo ppl_c_Constraints_Product_C_Polyhedron_Grid.cc
-/bin/bash ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_Pointset_Powerset_C_Polyhedron.lo ppl_c_Pointset_Powerset_C_Polyhedron.cc
-/bin/bash ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_Pointset_Powerset_NNC_Polyhedron.lo ppl_c_Pointset_Powerset_NNC_Polyhedron.cc
-/bin/bash ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_Double_Box.lo ppl_c_Double_Box.cc
-/bin/bash ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_BD_Shape_double.lo ppl_c_BD_Shape_double.cc
-/bin/bash ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_Octagonal_Shape_double.lo ppl_c_Octagonal_Shape_double.cc
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Grid.cc  -fPIC -DPIC -o .libs/ppl_c_Grid.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Rational_Box.cc  -fPIC -DPIC -o .libs/ppl_c_Rational_Box.o
+/bin/sh ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_implementation_common.lo ppl_c_implementation_common.cc
+/bin/sh ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_Polyhedron.lo ppl_c_Polyhedron.cc
+/bin/sh ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_Grid.lo ppl_c_Grid.cc
+/bin/sh ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_Rational_Box.lo ppl_c_Rational_Box.cc
+/bin/sh ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_BD_Shape_mpz_class.lo ppl_c_BD_Shape_mpz_class.cc
+/bin/sh ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_BD_Shape_mpq_class.lo ppl_c_BD_Shape_mpq_class.cc
+/bin/sh ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_Octagonal_Shape_mpz_class.lo ppl_c_Octagonal_Shape_mpz_class.cc
+/bin/sh ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_Octagonal_Shape_mpq_class.lo ppl_c_Octagonal_Shape_mpq_class.cc
+/bin/sh ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_Constraints_Product_C_Polyhedron_Grid.lo ppl_c_Constraints_Product_C_Polyhedron_Grid.cc
+/bin/sh ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_Pointset_Powerset_C_Polyhedron.lo ppl_c_Pointset_Powerset_C_Polyhedron.cc
+/bin/sh ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_Pointset_Powerset_NNC_Polyhedron.lo ppl_c_Pointset_Powerset_NNC_Polyhedron.cc
+/bin/sh ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_Double_Box.lo ppl_c_Double_Box.cc
+/bin/sh ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_BD_Shape_double.lo ppl_c_BD_Shape_double.cc
+/bin/sh ../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../..  -I../../interfaces -I../../interfaces/C -I../../src  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_c_Octagonal_Shape_double.lo ppl_c_Octagonal_Shape_double.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Polyhedron.cc  -fPIC -DPIC -o .libs/ppl_c_Polyhedron.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_implementation_common.cc  -fPIC -DPIC -o .libs/ppl_c_implementation_common.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_BD_Shape_mpq_class.cc  -fPIC -DPIC -o .libs/ppl_c_BD_Shape_mpq_class.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Octagonal_Shape_mpz_class.cc  -fPIC -DPIC -o .libs/ppl_c_Octagonal_Shape_mpz_class.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_BD_Shape_mpz_class.cc  -fPIC -DPIC -o .libs/ppl_c_BD_Shape_mpz_class.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Polyhedron.cc  -fPIC -DPIC -o .libs/ppl_c_Polyhedron.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Grid.cc  -fPIC -DPIC -o .libs/ppl_c_Grid.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Rational_Box.cc  -fPIC -DPIC -o .libs/ppl_c_Rational_Box.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Pointset_Powerset_C_Polyhedron.cc  -fPIC -DPIC -o .libs/ppl_c_Pointset_Powerset_C_Polyhedron.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Octagonal_Shape_mpq_class.cc  -fPIC -DPIC -o .libs/ppl_c_Octagonal_Shape_mpq_class.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Octagonal_Shape_mpz_class.cc  -fPIC -DPIC -o .libs/ppl_c_Octagonal_Shape_mpz_class.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Pointset_Powerset_NNC_Polyhedron.cc  -fPIC -DPIC -o .libs/ppl_c_Pointset_Powerset_NNC_Polyhedron.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_BD_Shape_mpq_class.cc  -fPIC -DPIC -o .libs/ppl_c_BD_Shape_mpq_class.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Octagonal_Shape_double.cc  -fPIC -DPIC -o .libs/ppl_c_Octagonal_Shape_double.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Constraints_Product_C_Polyhedron_Grid.cc  -fPIC -DPIC -o .libs/ppl_c_Constraints_Product_C_Polyhedron_Grid.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Pointset_Powerset_NNC_Polyhedron.cc  -fPIC -DPIC -o .libs/ppl_c_Pointset_Powerset_NNC_Polyhedron.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_BD_Shape_double.cc  -fPIC -DPIC -o .libs/ppl_c_BD_Shape_double.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Double_Box.cc  -fPIC -DPIC -o .libs/ppl_c_Double_Box.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Pointset_Powerset_C_Polyhedron.cc  -fPIC -DPIC -o .libs/ppl_c_Pointset_Powerset_C_Polyhedron.o
-In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Grid.cc:24:
-../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/ppl.hh:754,
-                 from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Grid.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Octagonal_Shape_double.cc:24:
-../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/ppl.hh:754,
-                 from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Octagonal_Shape_double.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Octagonal_Shape_double.cc  -fPIC -DPIC -o .libs/ppl_c_Octagonal_Shape_double.o
 In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Pointset_Powerset_C_Polyhedron.cc:24:
+                 from ppl_c_Polyhedron.cc:24:
 ../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
                                             ^
 In file included from ../../src/ppl.hh:754,
                  from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Pointset_Powerset_C_Polyhedron.cc:24:
+                 from ppl_c_Polyhedron.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -3533,19 +3543,35 @@
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Polyhedron.cc:24:
+                 from ppl_c_Pointset_Powerset_NNC_Polyhedron.cc:24:
+../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
+../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/ppl.hh:42068:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+../../src/ppl.hh:42075:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+In file included from ppl_c_implementation_common_defs.hh:28,
+                 from ppl_c_Constraints_Product_C_Polyhedron_Grid.cc:24:
 ../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
                                             ^
 In file included from ../../src/ppl.hh:754,
                  from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Polyhedron.cc:24:
+                 from ppl_c_Constraints_Product_C_Polyhedron_Grid.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Grid.cc:24:
+                 from ppl_c_Polyhedron.cc:24:
 ../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -3561,19 +3587,31 @@
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
 In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_BD_Shape_mpz_class.cc:24:
+                 from ppl_c_Rational_Box.cc:24:
 ../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
                                             ^
 In file included from ../../src/ppl.hh:754,
                  from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_BD_Shape_mpz_class.cc:24:
+                 from ppl_c_Rational_Box.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Octagonal_Shape_double.cc:24:
+                 from ppl_c_Octagonal_Shape_mpq_class.cc:24:
+../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/ppl.hh:754,
+                 from ppl_c_implementation_common_defs.hh:28,
+                 from ppl_c_Octagonal_Shape_mpq_class.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ppl_c_implementation_common_defs.hh:28,
+                 from ppl_c_Constraints_Product_C_Polyhedron_Grid.cc:24:
 ../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -3589,7 +3627,7 @@
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
 In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Pointset_Powerset_C_Polyhedron.cc:24:
+                 from ppl_c_Rational_Box.cc:24:
 ../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -3605,7 +3643,19 @@
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
 In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Pointset_Powerset_NNC_Polyhedron.cc:24:
+                 from ppl_c_BD_Shape_double.cc:24:
+../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/ppl.hh:754,
+                 from ppl_c_implementation_common_defs.hh:28,
+                 from ppl_c_BD_Shape_double.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ppl_c_implementation_common_defs.hh:28,
+                 from ppl_c_Octagonal_Shape_mpq_class.cc:24:
 ../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -3621,31 +3671,31 @@
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
 In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_BD_Shape_double.cc:24:
+                 from ppl_c_Grid.cc:24:
 ../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
                                             ^
 In file included from ../../src/ppl.hh:754,
                  from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_BD_Shape_double.cc:24:
+                 from ppl_c_Grid.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Double_Box.cc:24:
+                 from ppl_c_implementation_common.cc:26:
 ../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
                                             ^
 In file included from ../../src/ppl.hh:754,
                  from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Double_Box.cc:24:
+                 from ppl_c_implementation_common.cc:26:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Polyhedron.cc:24:
+                 from ppl_c_BD_Shape_double.cc:24:
 ../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -3661,7 +3711,19 @@
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
 In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_BD_Shape_mpz_class.cc:24:
+                 from ppl_c_Pointset_Powerset_C_Polyhedron.cc:24:
+../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/ppl.hh:754,
+                 from ppl_c_implementation_common_defs.hh:28,
+                 from ppl_c_Pointset_Powerset_C_Polyhedron.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ppl_c_implementation_common_defs.hh:28,
+                 from ppl_c_Grid.cc:24:
 ../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -3677,66 +3739,62 @@
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
 In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Constraints_Product_C_Polyhedron_Grid.cc:24:
+                 from ppl_c_Octagonal_Shape_mpz_class.cc:24:
 ../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
                                             ^
 In file included from ../../src/ppl.hh:754,
                  from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Constraints_Product_C_Polyhedron_Grid.cc:24:
+                 from ppl_c_Octagonal_Shape_mpz_class.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_implementation_common.cc:26:
+                 from ppl_c_BD_Shape_mpz_class.cc:24:
 ../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
                                             ^
 In file included from ../../src/ppl.hh:754,
                  from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_implementation_common.cc:26:
+                 from ppl_c_BD_Shape_mpz_class.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_BD_Shape_double.cc:24:
-../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
-../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/ppl.hh:42068:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-../../src/ppl.hh:42075:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
+                 from ppl_c_BD_Shape_mpq_class.cc:24:
+../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/ppl.hh:754,
+                 from ppl_c_implementation_common_defs.hh:28,
+                 from ppl_c_BD_Shape_mpq_class.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Rational_Box.cc:24:
+                 from ppl_c_Octagonal_Shape_double.cc:24:
 ../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
                                             ^
 In file included from ../../src/ppl.hh:754,
                  from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Rational_Box.cc:24:
+                 from ppl_c_Octagonal_Shape_double.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_BD_Shape_mpq_class.cc:24:
+                 from ppl_c_Double_Box.cc:24:
 ../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
                                             ^
 In file included from ../../src/ppl.hh:754,
                  from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_BD_Shape_mpq_class.cc:24:
+                 from ppl_c_Double_Box.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -3757,7 +3815,7 @@
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
 In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Double_Box.cc:24:
+                 from ppl_c_Pointset_Powerset_C_Polyhedron.cc:24:
 ../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -3773,7 +3831,7 @@
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
 In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Constraints_Product_C_Polyhedron_Grid.cc:24:
+                 from ppl_c_Octagonal_Shape_mpz_class.cc:24:
 ../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -3789,7 +3847,7 @@
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
 In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_BD_Shape_mpq_class.cc:24:
+                 from ppl_c_BD_Shape_mpz_class.cc:24:
 ../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -3805,19 +3863,7 @@
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
 In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Octagonal_Shape_mpq_class.cc:24:
-../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/ppl.hh:754,
-                 from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Octagonal_Shape_mpq_class.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Rational_Box.cc:24:
+                 from ppl_c_BD_Shape_mpq_class.cc:24:
 ../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -3833,19 +3879,7 @@
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
 In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Octagonal_Shape_mpz_class.cc:24:
-../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/ppl.hh:754,
-                 from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Octagonal_Shape_mpz_class.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Octagonal_Shape_mpq_class.cc:24:
+                 from ppl_c_Octagonal_Shape_double.cc:24:
 ../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -3861,7 +3895,7 @@
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
 In file included from ppl_c_implementation_common_defs.hh:28,
-                 from ppl_c_Octagonal_Shape_mpz_class.cc:24:
+                 from ppl_c_Double_Box.cc:24:
 ../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -3879,18 +3913,18 @@
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Pointset_Powerset_NNC_Polyhedron.cc -o ppl_c_Pointset_Powerset_NNC_Polyhedron.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Pointset_Powerset_C_Polyhedron.cc -o ppl_c_Pointset_Powerset_C_Polyhedron.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Grid.cc -o ppl_c_Grid.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_implementation_common.cc -o ppl_c_implementation_common.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Constraints_Product_C_Polyhedron_Grid.cc -o ppl_c_Constraints_Product_C_Polyhedron_Grid.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_implementation_common.cc -o ppl_c_implementation_common.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Polyhedron.cc -o ppl_c_Polyhedron.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Rational_Box.cc -o ppl_c_Rational_Box.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_BD_Shape_double.cc -o ppl_c_BD_Shape_double.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_BD_Shape_mpq_class.cc -o ppl_c_BD_Shape_mpq_class.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_BD_Shape_mpz_class.cc -o ppl_c_BD_Shape_mpz_class.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_BD_Shape_double.cc -o ppl_c_BD_Shape_double.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Octagonal_Shape_double.cc -o ppl_c_Octagonal_Shape_double.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Double_Box.cc -o ppl_c_Double_Box.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Octagonal_Shape_mpq_class.cc -o ppl_c_Octagonal_Shape_mpq_class.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Double_Box.cc -o ppl_c_Double_Box.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Octagonal_Shape_mpz_class.cc -o ppl_c_Octagonal_Shape_mpz_class.o >/dev/null 2>&1
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -version-info 4:0:0 -Wl,-z,relro -o libppl_c.la -rpath /usr/lib/x86_64-linux-gnu ppl_c_implementation_common.lo  ppl_c_Polyhedron.lo ppl_c_Grid.lo ppl_c_Rational_Box.lo ppl_c_BD_Shape_mpz_class.lo ppl_c_BD_Shape_mpq_class.lo ppl_c_Octagonal_Shape_mpz_class.lo ppl_c_Octagonal_Shape_mpq_class.lo ppl_c_Constraints_Product_C_Polyhedron_Grid.lo ppl_c_Pointset_Powerset_C_Polyhedron.lo ppl_c_Pointset_Powerset_NNC_Polyhedron.lo ppl_c_Double_Box.lo ppl_c_BD_Shape_double.lo ppl_c_Octagonal_Shape_double.lo ../../src/libppl.la -lgmpxx -lgmp 
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../.. -I../../interfaces -I../../interfaces/C -I../../src -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_c_Octagonal_Shape_double.cc -o ppl_c_Octagonal_Shape_double.o >/dev/null 2>&1
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -version-info 4:0:0 -Wl,-z,relro -o libppl_c.la -rpath /usr/lib/x86_64-linux-gnu ppl_c_implementation_common.lo  ppl_c_Polyhedron.lo ppl_c_Grid.lo ppl_c_Rational_Box.lo ppl_c_BD_Shape_mpz_class.lo ppl_c_BD_Shape_mpq_class.lo ppl_c_Octagonal_Shape_mpz_class.lo ppl_c_Octagonal_Shape_mpq_class.lo ppl_c_Constraints_Product_C_Polyhedron_Grid.lo ppl_c_Pointset_Powerset_C_Polyhedron.lo ppl_c_Pointset_Powerset_NNC_Polyhedron.lo ppl_c_Double_Box.lo ppl_c_BD_Shape_double.lo ppl_c_Octagonal_Shape_double.lo ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++  -fPIC -DPIC -shared -nostdlib /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/8/crtbeginS.o  .libs/ppl_c_implementation_common.o .libs/ppl_c_Polyhedron.o .libs/ppl_c_Grid.o .libs/ppl_c_Rational_Box.o .libs/ppl_c_BD_Shape_mpz_class.o .libs/ppl_c_BD_Shape_mpq_class.o .libs/ppl_c_Octagonal_Shape_mpz_class.o .libs/ppl_c_Octagonal_Shape_mpq_class.o .libs/ppl_c_Constraints_Product_C_Polyhedron_Grid.o .libs/ppl_c_Pointset_Powerset_C_Polyhedron.o .libs/ppl_c_Pointset_Powerset_NNC_Polyhedron.o .libs/ppl_c_Double_Box.o .libs/ppl_c_BD_Shape_double.o .libs/ppl_c_Octagonal_Shape_double.o   -Wl,-rpath -Wl,/build/ppl-1.2/src/.libs ../../src/.libs/libppl.so -lgmpxx -lgmp -L/usr/lib/gcc/x86_64-linux-gnu/8 -L/usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/8/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/8/../../.. -lstdc++ -lm -lc -lgcc_s /usr/lib/gcc/x86_64-linux-gnu/8/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crtn.o  -g -O2 -g -O2 -fstack-protector-strong -g -Wl,-z -Wl,relro   -Wl,-soname -Wl,libppl_c.so.4 -o .libs/libppl_c.so.4.0.0
 libtool: link: (cd ".libs" && rm -f "libppl_c.so.4" && ln -s "libppl_c.so.4.0.0" "libppl_c.so.4")
 libtool: link: (cd ".libs" && rm -f "libppl_c.so" && ln -s "libppl_c.so.4.0.0" "libppl_c.so")
@@ -3934,78 +3968,36 @@
 make[8]: Leaving directory '/build/ppl-1.2/interfaces/Prolog/tests'
 Making all in SWI
 make[8]: Entering directory '/build/ppl-1.2/interfaces/Prolog/SWI'
-/bin/bash ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o swi_efli.lo swi_efli.cc
+/bin/sh ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o swi_efli.lo swi_efli.cc
 /usr/bin/m4 --prefix-builtin -I../.. -I./.. -I./../.. \
            ./ppl_interface_generator_swiprolog_cc.m4 > ppl_swiprolog.cc
-/bin/bash ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_common.lo `test -f '../ppl_prolog_common.cc' || echo './'`../ppl_prolog_common.cc
-/bin/bash ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_Polyhedron.lo `test -f '../ppl_prolog_Polyhedron.cc' || echo './'`../ppl_prolog_Polyhedron.cc
-/bin/bash ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_Grid.lo `test -f '../ppl_prolog_Grid.cc' || echo './'`../ppl_prolog_Grid.cc
-/bin/bash ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_Rational_Box.lo `test -f '../ppl_prolog_Rational_Box.cc' || echo './'`../ppl_prolog_Rational_Box.cc
-/bin/bash ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_BD_Shape_mpz_class.lo `test -f '../ppl_prolog_BD_Shape_mpz_class.cc' || echo './'`../ppl_prolog_BD_Shape_mpz_class.cc
-/bin/bash ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_BD_Shape_mpq_class.lo `test -f '../ppl_prolog_BD_Shape_mpq_class.cc' || echo './'`../ppl_prolog_BD_Shape_mpq_class.cc
-/bin/bash ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_Octagonal_Shape_mpz_class.lo `test -f '../ppl_prolog_Octagonal_Shape_mpz_class.cc' || echo './'`../ppl_prolog_Octagonal_Shape_mpz_class.cc
-/bin/bash ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_Octagonal_Shape_mpq_class.lo `test -f '../ppl_prolog_Octagonal_Shape_mpq_class.cc' || echo './'`../ppl_prolog_Octagonal_Shape_mpq_class.cc
-/bin/bash ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_Constraints_Product_C_Polyhedron_Grid.lo `test -f '../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc' || echo './'`../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc
-/bin/bash ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_Pointset_Powerset_C_Polyhedron.lo `test -f '../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc' || echo './'`../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc
-/bin/bash ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_Pointset_Powerset_NNC_Polyhedron.lo `test -f '../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc' || echo './'`../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc
-/bin/bash ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_Double_Box.lo `test -f '../ppl_prolog_Double_Box.cc' || echo './'`../ppl_prolog_Double_Box.cc
-/bin/bash ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_BD_Shape_double.lo `test -f '../ppl_prolog_BD_Shape_double.cc' || echo './'`../ppl_prolog_BD_Shape_double.cc
-/bin/bash ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_Octagonal_Shape_double.lo `test -f '../ppl_prolog_Octagonal_Shape_double.cc' || echo './'`../ppl_prolog_Octagonal_Shape_double.cc
+/bin/sh ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_common.lo `test -f '../ppl_prolog_common.cc' || echo './'`../ppl_prolog_common.cc
+/bin/sh ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_Polyhedron.lo `test -f '../ppl_prolog_Polyhedron.cc' || echo './'`../ppl_prolog_Polyhedron.cc
+/bin/sh ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_Grid.lo `test -f '../ppl_prolog_Grid.cc' || echo './'`../ppl_prolog_Grid.cc
+/bin/sh ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_Rational_Box.lo `test -f '../ppl_prolog_Rational_Box.cc' || echo './'`../ppl_prolog_Rational_Box.cc
+/bin/sh ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_BD_Shape_mpz_class.lo `test -f '../ppl_prolog_BD_Shape_mpz_class.cc' || echo './'`../ppl_prolog_BD_Shape_mpz_class.cc
+/bin/sh ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_BD_Shape_mpq_class.lo `test -f '../ppl_prolog_BD_Shape_mpq_class.cc' || echo './'`../ppl_prolog_BD_Shape_mpq_class.cc
+/bin/sh ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_Octagonal_Shape_mpz_class.lo `test -f '../ppl_prolog_Octagonal_Shape_mpz_class.cc' || echo './'`../ppl_prolog_Octagonal_Shape_mpz_class.cc
+/bin/sh ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_Octagonal_Shape_mpq_class.lo `test -f '../ppl_prolog_Octagonal_Shape_mpq_class.cc' || echo './'`../ppl_prolog_Octagonal_Shape_mpq_class.cc
+/bin/sh ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_Constraints_Product_C_Polyhedron_Grid.lo `test -f '../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc' || echo './'`../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc
+/bin/sh ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_Pointset_Powerset_C_Polyhedron.lo `test -f '../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc' || echo './'`../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc
+/bin/sh ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_Pointset_Powerset_NNC_Polyhedron.lo `test -f '../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc' || echo './'`../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc
+/bin/sh ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_Double_Box.lo `test -f '../ppl_prolog_Double_Box.cc' || echo './'`../ppl_prolog_Double_Box.cc
+/bin/sh ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_BD_Shape_double.lo `test -f '../ppl_prolog_BD_Shape_double.cc' || echo './'`../ppl_prolog_BD_Shape_double.cc
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_common.cc  -fPIC -DPIC -o .libs/ppl_prolog_common.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc  -fPIC -DPIC -o .libs/ppl_prolog_Pointset_Powerset_NNC_Polyhedron.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Double_Box.cc  -fPIC -DPIC -o .libs/ppl_prolog_Double_Box.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc  -fPIC -DPIC -o .libs/ppl_prolog_Constraints_Product_C_Polyhedron_Grid.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Polyhedron.cc  -fPIC -DPIC -o .libs/ppl_prolog_Polyhedron.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Rational_Box.cc  -fPIC -DPIC -o .libs/ppl_prolog_Rational_Box.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_BD_Shape_mpq_class.cc  -fPIC -DPIC -o .libs/ppl_prolog_BD_Shape_mpq_class.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_BD_Shape_mpz_class.cc  -fPIC -DPIC -o .libs/ppl_prolog_BD_Shape_mpz_class.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Octagonal_Shape_mpz_class.cc  -fPIC -DPIC -o .libs/ppl_prolog_Octagonal_Shape_mpz_class.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc  -fPIC -DPIC -o .libs/ppl_prolog_Pointset_Powerset_C_Polyhedron.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Octagonal_Shape_double.cc  -fPIC -DPIC -o .libs/ppl_prolog_Octagonal_Shape_double.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Octagonal_Shape_mpq_class.cc  -fPIC -DPIC -o .libs/ppl_prolog_Octagonal_Shape_mpq_class.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Grid.cc  -fPIC -DPIC -o .libs/ppl_prolog_Grid.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c swi_efli.cc  -fPIC -DPIC -o .libs/swi_efli.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Grid.cc  -fPIC -DPIC -o .libs/ppl_prolog_Grid.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Octagonal_Shape_mpq_class.cc  -fPIC -DPIC -o .libs/ppl_prolog_Octagonal_Shape_mpq_class.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc  -fPIC -DPIC -o .libs/ppl_prolog_Pointset_Powerset_C_Polyhedron.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Octagonal_Shape_mpz_class.cc  -fPIC -DPIC -o .libs/ppl_prolog_Octagonal_Shape_mpz_class.o
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_BD_Shape_double.cc  -fPIC -DPIC -o .libs/ppl_prolog_BD_Shape_double.o
-In file included from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_BD_Shape_mpq_class.hh:24,
-                 from ../ppl_prolog_BD_Shape_mpq_class.cc:24:
-../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../../src/ppl.hh:754,
-                 from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_BD_Shape_mpq_class.hh:24,
-                 from ../ppl_prolog_BD_Shape_mpq_class.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_common.cc:24:
-../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../../src/ppl.hh:754,
-                 from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_common.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Octagonal_Shape_mpq_class.hh:24,
-                 from ../ppl_prolog_Octagonal_Shape_mpq_class.cc:24:
-../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../../src/ppl.hh:754,
-                 from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Octagonal_Shape_mpq_class.hh:24,
-                 from ../ppl_prolog_Octagonal_Shape_mpq_class.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_BD_Shape_mpz_class.cc  -fPIC -DPIC -o .libs/ppl_prolog_BD_Shape_mpz_class.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Rational_Box.cc  -fPIC -DPIC -o .libs/ppl_prolog_Rational_Box.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Double_Box.cc  -fPIC -DPIC -o .libs/ppl_prolog_Double_Box.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_BD_Shape_mpq_class.cc  -fPIC -DPIC -o .libs/ppl_prolog_BD_Shape_mpq_class.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc  -fPIC -DPIC -o .libs/ppl_prolog_Constraints_Product_C_Polyhedron_Grid.o
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc  -fPIC -DPIC -o .libs/ppl_prolog_Pointset_Powerset_NNC_Polyhedron.o
 In file included from ../ppl_prolog_common_defs.hh:28,
                  from ../ppl_prolog_Polyhedron.hh:24,
                  from ../ppl_prolog_Polyhedron.cc:24:
@@ -4021,61 +4013,79 @@
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.hh:24,
-                 from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc:24:
+                 from ../ppl_prolog_Polyhedron.hh:24,
+                 from ../ppl_prolog_Polyhedron.cc:24:
+../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
+../../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../../src/ppl.hh:42068:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+../../../src/ppl.hh:42075:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+In file included from ../ppl_prolog_common_defs.hh:28,
+                 from ../ppl_prolog_Pointset_Powerset_C_Polyhedron.hh:24,
+                 from ../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc:24:
 ../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
                                             ^
 In file included from ../../../src/ppl.hh:754,
                  from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.hh:24,
-                 from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc:24:
+                 from ../ppl_prolog_Pointset_Powerset_C_Polyhedron.hh:24,
+                 from ../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Octagonal_Shape_mpz_class.hh:24,
-                 from ../ppl_prolog_Octagonal_Shape_mpz_class.cc:24:
+                 from ../ppl_prolog_BD_Shape_mpz_class.hh:24,
+                 from ../ppl_prolog_BD_Shape_mpz_class.cc:24:
 ../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
                                             ^
 In file included from ../../../src/ppl.hh:754,
                  from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Octagonal_Shape_mpz_class.hh:24,
-                 from ../ppl_prolog_Octagonal_Shape_mpz_class.cc:24:
+                 from ../ppl_prolog_BD_Shape_mpz_class.hh:24,
+                 from ../ppl_prolog_BD_Shape_mpz_class.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.hh:24,
-                 from ../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc:24:
+                 from ../ppl_prolog_Grid.hh:24,
+                 from ../ppl_prolog_Grid.cc:24:
 ../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
                                             ^
 In file included from ../../../src/ppl.hh:754,
                  from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.hh:24,
-                 from ../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc:24:
+                 from ../ppl_prolog_Grid.hh:24,
+                 from ../ppl_prolog_Grid.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from swi_efli.hh:28,
-                 from swi_efli.cc:24:
+In file included from ../ppl_prolog_common_defs.hh:28,
+                 from ../ppl_prolog_common.cc:24:
 ../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
                                             ^
 In file included from ../../../src/ppl.hh:754,
-                 from swi_efli.hh:28,
-                 from swi_efli.cc:24:
+                 from ../ppl_prolog_common_defs.hh:28,
+                 from ../ppl_prolog_common.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_common.cc:24:
+                 from ../ppl_prolog_Pointset_Powerset_C_Polyhedron.hh:24,
+                 from ../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc:24:
 ../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -4093,23 +4103,20 @@
 In file included from ../ppl_prolog_common_defs.hh:28,
                  from ../ppl_prolog_Octagonal_Shape_mpq_class.hh:24,
                  from ../ppl_prolog_Octagonal_Shape_mpq_class.cc:24:
-../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
-../../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../../src/ppl.hh:42068:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-../../../src/ppl.hh:42075:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
+../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../../src/ppl.hh:754,
+                 from ../ppl_prolog_common_defs.hh:28,
+                 from ../ppl_prolog_Octagonal_Shape_mpq_class.hh:24,
+                 from ../ppl_prolog_Octagonal_Shape_mpq_class.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Polyhedron.hh:24,
-                 from ../ppl_prolog_Polyhedron.cc:24:
+                 from ../ppl_prolog_BD_Shape_mpz_class.hh:24,
+                 from ../ppl_prolog_BD_Shape_mpz_class.cc:24:
 ../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -4139,8 +4146,8 @@
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Octagonal_Shape_mpz_class.hh:24,
-                 from ../ppl_prolog_Octagonal_Shape_mpz_class.cc:24:
+                 from ../ppl_prolog_Grid.hh:24,
+                 from ../ppl_prolog_Grid.cc:24:
 ../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -4158,20 +4165,31 @@
 In file included from ../ppl_prolog_common_defs.hh:28,
                  from ../ppl_prolog_BD_Shape_mpq_class.hh:24,
                  from ../ppl_prolog_BD_Shape_mpq_class.cc:24:
-../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
-../../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../../src/ppl.hh:42068:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-../../../src/ppl.hh:42075:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
+../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../../src/ppl.hh:754,
+                 from ../ppl_prolog_common_defs.hh:28,
+                 from ../ppl_prolog_BD_Shape_mpq_class.hh:24,
+                 from ../ppl_prolog_BD_Shape_mpq_class.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../ppl_prolog_common_defs.hh:28,
+                 from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.hh:24,
+                 from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc:24:
+../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../../src/ppl.hh:754,
+                 from ../ppl_prolog_common_defs.hh:28,
+                 from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.hh:24,
+                 from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../ppl_prolog_common_defs.hh:28,
                  from ../ppl_prolog_BD_Shape_double.hh:24,
                  from ../ppl_prolog_BD_Shape_double.cc:24:
@@ -4187,8 +4205,61 @@
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.hh:24,
-                 from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc:24:
+                 from ../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.hh:24,
+                 from ../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc:24:
+../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../../src/ppl.hh:754,
+                 from ../ppl_prolog_common_defs.hh:28,
+                 from ../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.hh:24,
+                 from ../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from swi_efli.hh:28,
+                 from swi_efli.cc:24:
+../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../../src/ppl.hh:754,
+                 from swi_efli.hh:28,
+                 from swi_efli.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../ppl_prolog_common_defs.hh:28,
+                 from ../ppl_prolog_Rational_Box.hh:24,
+                 from ../ppl_prolog_Rational_Box.cc:24:
+../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../../src/ppl.hh:754,
+                 from ../ppl_prolog_common_defs.hh:28,
+                 from ../ppl_prolog_Rational_Box.hh:24,
+                 from ../ppl_prolog_Rational_Box.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../ppl_prolog_common_defs.hh:28,
+                 from ../ppl_prolog_Octagonal_Shape_mpz_class.hh:24,
+                 from ../ppl_prolog_Octagonal_Shape_mpz_class.cc:24:
+../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../../src/ppl.hh:754,
+                 from ../ppl_prolog_common_defs.hh:28,
+                 from ../ppl_prolog_Octagonal_Shape_mpz_class.hh:24,
+                 from ../ppl_prolog_Octagonal_Shape_mpz_class.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../ppl_prolog_common_defs.hh:28,
+                 from ../ppl_prolog_common.cc:24:
 ../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -4204,8 +4275,8 @@
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
 In file included from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.hh:24,
-                 from ../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc:24:
+                 from ../ppl_prolog_Octagonal_Shape_mpq_class.hh:24,
+                 from ../ppl_prolog_Octagonal_Shape_mpq_class.cc:24:
 ../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -4221,35 +4292,8 @@
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
 In file included from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Rational_Box.hh:24,
-                 from ../ppl_prolog_Rational_Box.cc:24:
-../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../../src/ppl.hh:754,
-                 from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Rational_Box.hh:24,
-                 from ../ppl_prolog_Rational_Box.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Octagonal_Shape_double.hh:24,
-                 from ../ppl_prolog_Octagonal_Shape_double.cc:24:
-../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../../src/ppl.hh:754,
-                 from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Octagonal_Shape_double.hh:24,
-                 from ../ppl_prolog_Octagonal_Shape_double.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from swi_efli.hh:28,
-                 from swi_efli.cc:24:
+                 from ../ppl_prolog_BD_Shape_mpq_class.hh:24,
+                 from ../ppl_prolog_BD_Shape_mpq_class.cc:24:
 ../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -4299,50 +4343,8 @@
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
 In file included from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Grid.hh:24,
-                 from ../ppl_prolog_Grid.cc:24:
-../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../../src/ppl.hh:754,
-                 from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Grid.hh:24,
-                 from ../ppl_prolog_Grid.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_BD_Shape_mpz_class.hh:24,
-                 from ../ppl_prolog_BD_Shape_mpz_class.cc:24:
-../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../../src/ppl.hh:754,
-                 from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_BD_Shape_mpz_class.hh:24,
-                 from ../ppl_prolog_BD_Shape_mpz_class.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Pointset_Powerset_C_Polyhedron.hh:24,
-                 from ../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc:24:
-../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../../src/ppl.hh:754,
-                 from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Pointset_Powerset_C_Polyhedron.hh:24,
-                 from ../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Rational_Box.hh:24,
-                 from ../ppl_prolog_Rational_Box.cc:24:
+                 from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.hh:24,
+                 from ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc:24:
 ../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -4358,8 +4360,8 @@
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
 In file included from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Octagonal_Shape_double.hh:24,
-                 from ../ppl_prolog_Octagonal_Shape_double.cc:24:
+                 from ../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.hh:24,
+                 from ../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc:24:
 ../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -4374,9 +4376,8 @@
 ../../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-In file included from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Pointset_Powerset_C_Polyhedron.hh:24,
-                 from ../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc:24:
+In file included from swi_efli.hh:28,
+                 from swi_efli.cc:24:
 ../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -4392,8 +4393,8 @@
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
 In file included from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_Grid.hh:24,
-                 from ../ppl_prolog_Grid.cc:24:
+                 from ../ppl_prolog_Rational_Box.hh:24,
+                 from ../ppl_prolog_Rational_Box.cc:24:
 ../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -4409,8 +4410,8 @@
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
 In file included from ../ppl_prolog_common_defs.hh:28,
-                 from ../ppl_prolog_BD_Shape_mpz_class.hh:24,
-                 from ../ppl_prolog_BD_Shape_mpz_class.cc:24:
+                 from ../ppl_prolog_Octagonal_Shape_mpz_class.hh:24,
+                 from ../ppl_prolog_Octagonal_Shape_mpz_class.cc:24:
 ../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -4425,11 +4426,11 @@
 ../../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-../ppl_prolog_BD_Shape_mpq_class.cc: In function 'Prolog_foreign_return_type ppl_new_BD_Shape_mpq_class_from_space_dimension(Prolog_term_ref, Prolog_term_ref, Prolog_term_ref)':
-../ppl_prolog_BD_Shape_mpq_class.cc:57:5: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
+../ppl_prolog_Grid.cc: In function 'Prolog_foreign_return_type ppl_new_Grid_from_space_dimension(Prolog_term_ref, Prolog_term_ref, Prolog_term_ref)':
+../ppl_prolog_Grid.cc:57:5: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
      else
      ^~~~
-../ppl_prolog_BD_Shape_mpq_class.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
+../ppl_prolog_Grid.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
        Prolog_term_ref tmp = Prolog_new_term_ref();
        ^~~~~~~~~~~~~~~
 ../ppl_prolog_Polyhedron.cc: In function 'Prolog_foreign_return_type ppl_new_C_Polyhedron_from_space_dimension(Prolog_term_ref, Prolog_term_ref, Prolog_term_ref)':
@@ -4446,25 +4447,25 @@
 ../ppl_prolog_Polyhedron.cc:92:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
        Prolog_term_ref tmp = Prolog_new_term_ref();
        ^~~~~~~~~~~~~~~
-../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc: In function 'Prolog_foreign_return_type ppl_new_Pointset_Powerset_NNC_Polyhedron_from_space_dimension(Prolog_term_ref, Prolog_term_ref, Prolog_term_ref)':
-../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc:57:5: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
+../ppl_prolog_BD_Shape_mpz_class.cc: In function 'Prolog_foreign_return_type ppl_new_BD_Shape_mpz_class_from_space_dimension(Prolog_term_ref, Prolog_term_ref, Prolog_term_ref)':
+../ppl_prolog_BD_Shape_mpz_class.cc:57:5: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
      else
      ^~~~
-../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
+../ppl_prolog_BD_Shape_mpz_class.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
        Prolog_term_ref tmp = Prolog_new_term_ref();
        ^~~~~~~~~~~~~~~
-../ppl_prolog_BD_Shape_double.cc: In function 'Prolog_foreign_return_type ppl_new_BD_Shape_double_from_space_dimension(Prolog_term_ref, Prolog_term_ref, Prolog_term_ref)':
-../ppl_prolog_BD_Shape_double.cc:57:5: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
+../ppl_prolog_Octagonal_Shape_mpz_class.cc: In function 'Prolog_foreign_return_type ppl_new_Octagonal_Shape_mpz_class_from_space_dimension(Prolog_term_ref, Prolog_term_ref, Prolog_term_ref)':
+../ppl_prolog_Octagonal_Shape_mpz_class.cc:57:5: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
      else
      ^~~~
-../ppl_prolog_BD_Shape_double.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
+../ppl_prolog_Octagonal_Shape_mpz_class.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
        Prolog_term_ref tmp = Prolog_new_term_ref();
        ^~~~~~~~~~~~~~~
-../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc: In function 'Prolog_foreign_return_type ppl_new_Constraints_Product_C_Polyhedron_Grid_from_space_dimension(Prolog_term_ref, Prolog_term_ref, Prolog_term_ref)':
-../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc:57:5: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
+../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc: In function 'Prolog_foreign_return_type ppl_new_Pointset_Powerset_C_Polyhedron_from_space_dimension(Prolog_term_ref, Prolog_term_ref, Prolog_term_ref)':
+../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc:57:5: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
      else
      ^~~~
-../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
+../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
        Prolog_term_ref tmp = Prolog_new_term_ref();
        ^~~~~~~~~~~~~~~
 ../ppl_prolog_Octagonal_Shape_mpq_class.cc: In function 'Prolog_foreign_return_type ppl_new_Octagonal_Shape_mpq_class_from_space_dimension(Prolog_term_ref, Prolog_term_ref, Prolog_term_ref)':
@@ -4474,6 +4475,20 @@
 ../ppl_prolog_Octagonal_Shape_mpq_class.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
        Prolog_term_ref tmp = Prolog_new_term_ref();
        ^~~~~~~~~~~~~~~
+../ppl_prolog_BD_Shape_double.cc: In function 'Prolog_foreign_return_type ppl_new_BD_Shape_double_from_space_dimension(Prolog_term_ref, Prolog_term_ref, Prolog_term_ref)':
+../ppl_prolog_BD_Shape_double.cc:57:5: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
+     else
+     ^~~~
+../ppl_prolog_BD_Shape_double.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
+       Prolog_term_ref tmp = Prolog_new_term_ref();
+       ^~~~~~~~~~~~~~~
+../ppl_prolog_BD_Shape_mpq_class.cc: In function 'Prolog_foreign_return_type ppl_new_BD_Shape_mpq_class_from_space_dimension(Prolog_term_ref, Prolog_term_ref, Prolog_term_ref)':
+../ppl_prolog_BD_Shape_mpq_class.cc:57:5: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
+     else
+     ^~~~
+../ppl_prolog_BD_Shape_mpq_class.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
+       Prolog_term_ref tmp = Prolog_new_term_ref();
+       ^~~~~~~~~~~~~~~
 ../ppl_prolog_Double_Box.cc: In function 'Prolog_foreign_return_type ppl_new_Double_Box_from_space_dimension(Prolog_term_ref, Prolog_term_ref, Prolog_term_ref)':
 ../ppl_prolog_Double_Box.cc:57:5: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
      else
@@ -4481,18 +4496,18 @@
 ../ppl_prolog_Double_Box.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
        Prolog_term_ref tmp = Prolog_new_term_ref();
        ^~~~~~~~~~~~~~~
-../ppl_prolog_Octagonal_Shape_mpz_class.cc: In function 'Prolog_foreign_return_type ppl_new_Octagonal_Shape_mpz_class_from_space_dimension(Prolog_term_ref, Prolog_term_ref, Prolog_term_ref)':
-../ppl_prolog_Octagonal_Shape_mpz_class.cc:57:5: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
+../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc: In function 'Prolog_foreign_return_type ppl_new_Pointset_Powerset_NNC_Polyhedron_from_space_dimension(Prolog_term_ref, Prolog_term_ref, Prolog_term_ref)':
+../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc:57:5: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
      else
      ^~~~
-../ppl_prolog_Octagonal_Shape_mpz_class.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
+../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
        Prolog_term_ref tmp = Prolog_new_term_ref();
        ^~~~~~~~~~~~~~~
-../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc: In function 'Prolog_foreign_return_type ppl_new_Pointset_Powerset_C_Polyhedron_from_space_dimension(Prolog_term_ref, Prolog_term_ref, Prolog_term_ref)':
-../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc:57:5: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
+../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc: In function 'Prolog_foreign_return_type ppl_new_Constraints_Product_C_Polyhedron_Grid_from_space_dimension(Prolog_term_ref, Prolog_term_ref, Prolog_term_ref)':
+../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc:57:5: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
      else
      ^~~~
-../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
+../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
        Prolog_term_ref tmp = Prolog_new_term_ref();
        ^~~~~~~~~~~~~~~
 ../ppl_prolog_Rational_Box.cc: In function 'Prolog_foreign_return_type ppl_new_Rational_Box_from_space_dimension(Prolog_term_ref, Prolog_term_ref, Prolog_term_ref)':
@@ -4502,6 +4517,40 @@
 ../ppl_prolog_Rational_Box.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
        Prolog_term_ref tmp = Prolog_new_term_ref();
        ^~~~~~~~~~~~~~~
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c swi_efli.cc -o swi_efli.o >/dev/null 2>&1
+/bin/sh ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_prolog_Octagonal_Shape_double.lo `test -f '../ppl_prolog_Octagonal_Shape_double.cc' || echo './'`../ppl_prolog_Octagonal_Shape_double.cc
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Octagonal_Shape_double.cc  -fPIC -DPIC -o .libs/ppl_prolog_Octagonal_Shape_double.o
+In file included from ../ppl_prolog_common_defs.hh:28,
+                 from ../ppl_prolog_Octagonal_Shape_double.hh:24,
+                 from ../ppl_prolog_Octagonal_Shape_double.cc:24:
+../../../src/ppl.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../../src/ppl.hh:23961:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../../src/ppl.hh:754,
+                 from ../ppl_prolog_common_defs.hh:28,
+                 from ../ppl_prolog_Octagonal_Shape_double.hh:24,
+                 from ../ppl_prolog_Octagonal_Shape_double.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../ppl_prolog_common_defs.hh:28,
+                 from ../ppl_prolog_Octagonal_Shape_double.hh:24,
+                 from ../ppl_prolog_Octagonal_Shape_double.cc:24:
+../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
+../../../src/ppl.hh:42067:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../../src/ppl.hh:42068:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+../../../src/ppl.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+../../../src/ppl.hh:42075:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
 ../ppl_prolog_Octagonal_Shape_double.cc: In function 'Prolog_foreign_return_type ppl_new_Octagonal_Shape_double_from_space_dimension(Prolog_term_ref, Prolog_term_ref, Prolog_term_ref)':
 ../ppl_prolog_Octagonal_Shape_double.cc:57:5: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
      else
@@ -4509,25 +4558,10 @@
 ../ppl_prolog_Octagonal_Shape_double.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
        Prolog_term_ref tmp = Prolog_new_term_ref();
        ^~~~~~~~~~~~~~~
-../ppl_prolog_Grid.cc: In function 'Prolog_foreign_return_type ppl_new_Grid_from_space_dimension(Prolog_term_ref, Prolog_term_ref, Prolog_term_ref)':
-../ppl_prolog_Grid.cc:57:5: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
-     else
-     ^~~~
-../ppl_prolog_Grid.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
-       Prolog_term_ref tmp = Prolog_new_term_ref();
-       ^~~~~~~~~~~~~~~
-../ppl_prolog_BD_Shape_mpz_class.cc: In function 'Prolog_foreign_return_type ppl_new_BD_Shape_mpz_class_from_space_dimension(Prolog_term_ref, Prolog_term_ref, Prolog_term_ref)':
-../ppl_prolog_BD_Shape_mpz_class.cc:57:5: warning: this 'else' clause does not guard... [-Wmisleading-indentation]
-     else
-     ^~~~
-../ppl_prolog_BD_Shape_mpz_class.cc:62:7: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'else'
-       Prolog_term_ref tmp = Prolog_new_term_ref();
-       ^~~~~~~~~~~~~~~
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c swi_efli.cc -o swi_efli.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_common.cc -o ppl_prolog_common.o >/dev/null 2>&1
-/bin/bash ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_swiprolog.lo ppl_swiprolog.cc
+/bin/sh ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../..  -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl  -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o ppl_swiprolog.lo ppl_swiprolog.cc
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_swiprolog.cc  -fPIC -DPIC -o .libs/ppl_swiprolog.o
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc -o ppl_prolog_Pointset_Powerset_C_Polyhedron.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc -o ppl_prolog_Pointset_Powerset_NNC_Polyhedron.o >/dev/null 2>&1
 In file included from ../ppl_prolog_common_defs.hh:28,
                  from ../ppl_prolog_domains.hh:24,
                  from ppl_swiprolog.cc:24:
@@ -4559,20 +4593,20 @@
 ../../../src/ppl.hh:42076:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Pointset_Powerset_NNC_Polyhedron.cc -o ppl_prolog_Pointset_Powerset_NNC_Polyhedron.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Pointset_Powerset_C_Polyhedron.cc -o ppl_prolog_Pointset_Powerset_C_Polyhedron.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ppl_swiprolog.cc -o ppl_swiprolog.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Grid.cc -o ppl_prolog_Grid.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Constraints_Product_C_Polyhedron_Grid.cc -o ppl_prolog_Constraints_Product_C_Polyhedron_Grid.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Polyhedron.cc -o ppl_prolog_Polyhedron.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_BD_Shape_double.cc -o ppl_prolog_BD_Shape_double.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Double_Box.cc -o ppl_prolog_Double_Box.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_BD_Shape_mpz_class.cc -o ppl_prolog_BD_Shape_mpz_class.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_BD_Shape_mpq_class.cc -o ppl_prolog_BD_Shape_mpq_class.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Rational_Box.cc -o ppl_prolog_Rational_Box.o >/dev/null 2>&1
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Double_Box.cc -o ppl_prolog_Double_Box.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Octagonal_Shape_mpz_class.cc -o ppl_prolog_Octagonal_Shape_mpz_class.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_BD_Shape_mpq_class.cc -o ppl_prolog_BD_Shape_mpq_class.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_BD_Shape_mpz_class.cc -o ppl_prolog_BD_Shape_mpz_class.o >/dev/null 2>&1
-libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Octagonal_Shape_double.cc -o ppl_prolog_Octagonal_Shape_double.o >/dev/null 2>&1
 libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Octagonal_Shape_mpq_class.cc -o ppl_prolog_Octagonal_Shape_mpq_class.o >/dev/null 2>&1
-/bin/bash ../../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -module -avoid-version -Wl,-z,relro -o libppl_swiprolog.la -rpath /usr/lib/x86_64-linux-gnu/ppl swi_efli.lo ppl_swiprolog.lo ppl_prolog_common.lo ppl_prolog_Polyhedron.lo ppl_prolog_Grid.lo ppl_prolog_Rational_Box.lo ppl_prolog_BD_Shape_mpz_class.lo ppl_prolog_BD_Shape_mpq_class.lo ppl_prolog_Octagonal_Shape_mpz_class.lo ppl_prolog_Octagonal_Shape_mpq_class.lo ppl_prolog_Constraints_Product_C_Polyhedron_Grid.lo ppl_prolog_Pointset_Powerset_C_Polyhedron.lo ppl_prolog_Pointset_Powerset_NNC_Polyhedron.lo ppl_prolog_Double_Box.lo ppl_prolog_BD_Shape_double.lo ppl_prolog_Octagonal_Shape_double.lo ../../../src/libppl.la -lgmpxx -lgmp -L/usr/lib/swi-prolog/lib/x86_64-linux -L/usr/lib/swi-prolog/lib -lswipl  
+libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I../../../interfaces -I../../../interfaces/Prolog -I/interfaces/Prolog -I../../../src -I/usr/lib/swi-prolog/include -I/usr/include/pl -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c ../ppl_prolog_Octagonal_Shape_double.cc -o ppl_prolog_Octagonal_Shape_double.o >/dev/null 2>&1
+/bin/sh ../../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -module -avoid-version -Wl,-z,relro -o libppl_swiprolog.la -rpath /usr/lib/x86_64-linux-gnu/ppl swi_efli.lo ppl_swiprolog.lo ppl_prolog_common.lo ppl_prolog_Polyhedron.lo ppl_prolog_Grid.lo ppl_prolog_Rational_Box.lo ppl_prolog_BD_Shape_mpz_class.lo ppl_prolog_BD_Shape_mpq_class.lo ppl_prolog_Octagonal_Shape_mpz_class.lo ppl_prolog_Octagonal_Shape_mpq_class.lo ppl_prolog_Constraints_Product_C_Polyhedron_Grid.lo ppl_prolog_Pointset_Powerset_C_Polyhedron.lo ppl_prolog_Pointset_Powerset_NNC_Polyhedron.lo ppl_prolog_Double_Box.lo ppl_prolog_BD_Shape_double.lo ppl_prolog_Octagonal_Shape_double.lo ../../../src/libppl.la -lgmpxx -lgmp -L/usr/lib/swi-prolog/lib/x86_64-linux -L/usr/lib/swi-prolog/lib -lswipl  
 libtool: link: g++  -fPIC -DPIC -shared -nostdlib /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/8/crtbeginS.o  .libs/swi_efli.o .libs/ppl_swiprolog.o .libs/ppl_prolog_common.o .libs/ppl_prolog_Polyhedron.o .libs/ppl_prolog_Grid.o .libs/ppl_prolog_Rational_Box.o .libs/ppl_prolog_BD_Shape_mpz_class.o .libs/ppl_prolog_BD_Shape_mpq_class.o .libs/ppl_prolog_Octagonal_Shape_mpz_class.o .libs/ppl_prolog_Octagonal_Shape_mpq_class.o .libs/ppl_prolog_Constraints_Product_C_Polyhedron_Grid.o .libs/ppl_prolog_Pointset_Powerset_C_Polyhedron.o .libs/ppl_prolog_Pointset_Powerset_NNC_Polyhedron.o .libs/ppl_prolog_Double_Box.o .libs/ppl_prolog_BD_Shape_double.o .libs/ppl_prolog_Octagonal_Shape_double.o   -Wl,-rpath -Wl,/build/ppl-1.2/src/.libs ../../../src/.libs/libppl.so -lgmpxx -lgmp -L/usr/lib/swi-prolog/lib/x86_64-linux -L/usr/lib/swi-prolog/lib -lswipl -L/usr/lib/gcc/x86_64-linux-gnu/8 -L/usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/8/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/8/../../.. -lstdc++ -lm -lc -lgcc_s /usr/lib/gcc/x86_64-linux-gnu/8/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crtn.o  -g -O2 -g -O2 -fstack-protector-strong -g -Wl,-z -Wl,relro   -Wl,-soname -Wl,libppl_swiprolog.so -o .libs/libppl_swiprolog.so
 libtool: link: ar cru .libs/libppl_swiprolog.a  swi_efli.o ppl_swiprolog.o ppl_prolog_common.o ppl_prolog_Polyhedron.o ppl_prolog_Grid.o ppl_prolog_Rational_Box.o ppl_prolog_BD_Shape_mpz_class.o ppl_prolog_BD_Shape_mpq_class.o ppl_prolog_Octagonal_Shape_mpz_class.o ppl_prolog_Octagonal_Shape_mpq_class.o ppl_prolog_Constraints_Product_C_Polyhedron_Grid.o ppl_prolog_Pointset_Powerset_C_Polyhedron.o ppl_prolog_Pointset_Powerset_NNC_Polyhedron.o ppl_prolog_Double_Box.o ppl_prolog_BD_Shape_double.o ppl_prolog_Octagonal_Shape_double.o
 ar: `u' modifier ignored since `D' is the default (see `U')
@@ -4641,7 +4675,7 @@
 /usr/include/c++/8/bits/unique_ptr.h:53:28: note: declared here
    template<typename> class auto_ptr;
                             ^~~~~~~~
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o ppl_pips ppl_pips.o ../../src/libppl.la ../../utils/libppl_utils.a -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o ppl_pips ppl_pips.o ../../src/libppl.la ../../utils/libppl_utils.a -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/ppl_pips ppl_pips.o  ../../src/.libs/libppl.so ../../utils/libppl_utils.a -lgmpxx -lgmp
 make[6]: Leaving directory '/build/ppl-1.2/demos/ppl_pips'
 make[5]: Leaving directory '/build/ppl-1.2/demos/ppl_pips'
@@ -4660,12 +4694,12 @@
 make[3]: Leaving directory '/build/ppl-1.2'
 make[2]: Leaving directory '/build/ppl-1.2'
 save_size=10000 dh_auto_build --builddirectory=doc -- user-configured
-	cd doc && make -j16 user-configured
+	cd doc && make -j15 user-configured
 make[2]: Entering directory '/build/ppl-1.2/doc'
 rm -rf ppl-user-1.2-html
 rm -rf user-configured-c-interface.latex-dir
-rm -rf user-configured-prolog-interface.latex-dir
 TEXINPUTS=/build/ppl-1.2/doc: texmf_casefold_search=0 doxygen user.doxyconf-html
+rm -rf user-configured-prolog-interface.latex-dir
 /bin/sed -e 's/<PPL_SED_CONFIGURED_MANUAL>/PPL_DOXYGEN_CONFIGURED_MANUAL/' -e 's/<PPL_SED_LANGUAGE_NAME>/Configured C/' -e 's/<PPL_SED_INTERFACE_NAME>/configured-c-interface/' -e 's/<PPL_SED_USEPACKAGE_OCAMLDOC>//' \
     ./user-language-interface.tex \
     > user-configured-c-interface.tex
@@ -5020,7 +5054,13 @@
 
 Underfull \hbox (badness 10000) in paragraph at lines 484--485
 
-[22]
+[22]TEXINPUTS=/build/ppl-1.2/doc: texmf_casefold_search=0 make -C user-configured-c-interface.latex-dir refman.pdf \
+  && mv -f user-configured-c-interface.latex-dir/refman.pdf ppl-user-configured-c-interface-1.2.pdf
+make[3]: Entering directory '/build/ppl-1.2/doc'
+make[3]: warning: jobserver unavailable: using -j1.  Add '+' to parent make rule.
+rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf
+pdflatex refman
+
 Overfull \hbox (62.5953pt too wide) in paragraph at lines 504--505
 []\OT1/pcr/m/n/10 ppl[][][][]P[]I[]P[][][][]Problem[][][]get[][][]control[][][]
 parameter(+[]Handle, +[]Control[][][][]Parameter[][][][]Name, ?Control[]
@@ -5049,7 +5089,9 @@
 
 Underfull \hbox (badness 10000) in paragraph at lines 544--545
 
-[23]) (./configured_domains_predicates.tex [24]
+[23]) (./configured_domains_predicates.tex [24]This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) (preloaded format=pdflatex)
+ restricted \write18 enabled.
+
 Overfull \hbox (6.19531pt too wide) in paragraph at lines 34--36
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]C[][][][]Polyhedron[][][]from[][][]space[
 ][][]dimension(+[]Dimension[][][][]Type, +[]Universe[][][]or[]
@@ -5060,7 +5102,22 @@
 
 Underfull \hbox (badness 10000) in paragraph at lines 71--72
 
-[25]
+[25]entering extended mode
+(./refman.tex
+LaTeX2e <2018-12-01>
+(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
+Document Class: article 2018/09/03 v1.4i Standard LaTeX document class
+(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo))
+(/usr/share/texlive/texmf-dist/tex/latex/a4wide/a4wide.sty
+(/usr/share/texlive/texmf-dist/tex/latex/ntgclass/a4.sty))
+(/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
+(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty
+(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg)
+(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def
 Overfull \hbox (11.00215pt too wide) in paragraph at lines 104--106
 \OT1/ptm/m/it/10 Builds a new N[]NC poly-he-dron \OT1/pcr/m/sl/10 P[][][]1 \OT1
 /ptm/m/it/10 from the bd[][][]shape[][][]mpz[][][]class ref-er-enced by han-dle
@@ -5086,7 +5143,18 @@
 Overfull \hbox (9.79532pt too wide) in paragraph at lines 122--124
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]N[]N[]C[][][][]Polyhedron[][][]from[][][]
 []Octagonal[][][][]Shape[][][]mpq[][][]class(+[]Handle[][][]1, -[]Handle[]
-[26]
+[26)))
+(/usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty])
+(/usr/share/texlive/texmf-dist/tex/latex/float/float.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty
+(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def
+(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu)))
+(/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/tocloft/tocloft.sty)
+(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
+(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg)
 Overfull \hbox (15.07239pt too wide) in paragraph at lines 137--139
 \OT1/ptm/m/it/10 Builds a new C poly-he-dron \OT1/pcr/m/sl/10 P[][][]1 \OT1/ptm
 /m/it/10 from the octagonal[][][]shape[][][]double ref-er-enced by han-dle \OT1
@@ -5132,7 +5200,12 @@
 Overfull \hbox (1.39532pt too wide) in paragraph at lines 167--169
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]C[][][][]Polyhedron[][][]from[][][][]B[]D
 [][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity(+[]Handle, +[]
-[27]
+[27
+(/usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty
+(/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty))])
+(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
+(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty
+(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty)
 Overfull \hbox (13.39532pt too wide) in paragraph at lines 170--172
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]N[]N[]C[][][][]Polyhedron[][][]from[][][]
 []B[]D[][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity(+[]Handle, +[
@@ -5183,11 +5256,17 @@
 Overfull \hbox (6.81381pt too wide) in paragraph at lines 203--205
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]C[][][][]Polyhedron[][][]from[][][][]Octa
 gonal[][][][]Shape[][][]double[][][]with[][][]complexity(+[]Handle,
-[28]
+[28)]
+(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def)
 Overfull \hbox (18.81381pt too wide) in paragraph at lines 206--208
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]N[]N[]C[][][][]Polyhedron[][][]from[][][]
 []Octagonal[][][][]Shape[][][]double[][][]with[][][]complexity(+[]Handle,
 [29]
+(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg)
+(/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def
 Overfull \hbox (15.79529pt too wide) in paragraph at lines 274--276
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]relation[][][]with[][][]constraint
 (+[]Handle, +[]Constraint, ?Relation[]
@@ -5257,7 +5336,10 @@
 Overfull \hbox (6.19531pt too wide) in paragraph at lines 401--403
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]generalized[][][]affine[][][]image
 [][][]lhs[][][]rhs(+[]Handle, +[]Lin[][][][]Expr[][][]1, +[]
-[32]
+[32])
+(/usr/share/texlive/texmf-dist/tex/latex/hyperref/backref.sty
+(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty))
+(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty)
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 404--406
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]generalized[][][]affine[][][]preim
 age[][][]lhs[][][]rhs(+[]Handle, +[]Lin[][][][]Expr[][][]
@@ -5273,7 +5355,17 @@
 Overfull \hbox (16.9953pt too wide) in paragraph at lines 441--443
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]linear[][][]partition(+[]Handle[][
 ][]1, +[]Handle[][][]2, -[]Handle[][][]3, -[]Handle[]
-[33]
+[33])
+(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def)
+(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty) (./doxygen.sty
+(/usr/share/texlive/texmf-dist/tex/latex/tools/calc.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/tools/verbatim.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/tabu/tabu.sty
+(/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty))
+(/usr/share/texlive/texmf-dist/tex/latex/tools/tabularx.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/multirow/multirow.sty)
 Overfull \hbox (18.19531pt too wide) in paragraph at lines 448--450
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][][]B[]H[]R[]Z03[][][]widening[][][]
 assign[][][]with[][][]tokens(+[]Handle[][][]1, +[]Handle[][][]2, +[]
@@ -5301,7 +5393,16 @@
 Overfull \hbox (12.19531pt too wide) in paragraph at lines 475--477
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]bounded[][][][]H79[][][]extrapolat
 ion[][][]assign[][][]with[][][]tokens(+[]Handle[][][]1, +[]
-[34]
+[34])
+(/build/ppl-1.2/doc/ppl.sty
+(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
+For additional information on amsmath, use the `?' option.
+(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
+(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty))
+(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty))
+(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty
+(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty
 Overfull \hbox (2.5953pt too wide) in paragraph at lines 478--480
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]limited[][][][]B[]H[]R[]Z03[][][]e
 xtrapolation[][][]assign(+[]Handle[][][]1, +[]Handle[][][]
@@ -5325,7 +5426,8 @@
 Overfull \hbox (2.0138pt too wide) in paragraph at lines 512--514
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]remove[][][]higher[][][]space[][][
 ]dimensions(+[]Handle, +[]Dimension[][][][]Type) 
-[35]
+[35)])
+(/usr/share/texlive/texmf-dist/tex/latex/stmaryrd/stmaryrd.sty)
 Overfull \hbox (14.0138pt too wide) in paragraph at lines 515--517
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]expand[][][]space[][][]dimension(+
 []Handle, +[]P[]P[]L[][][][]Var, +[]Dimension[][][][]Type) 
@@ -5340,7 +5442,21 @@
 
 Underfull \hbox (badness 10000) in paragraph at lines 561--562
 
-[36]
+[36)]
+Writing index file refman.idx
+No file refman.aux.
+(/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd)
+(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1ptm.fd)
+(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
+[Loading MPS to PDF converter (version 2006.09.02).]
+) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty
+(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg))
+(/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty
+(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty))
+(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1phv.fd)
+(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd)
+(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd)
 Overfull \hbox (2.5953pt too wide) in paragraph at lines 600--602
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]C[][][][]Polyhedron
 [][][]with[][][]complexity(+[]Handle, +[]Complexity, -[]
@@ -5356,7 +5472,10 @@
 Overfull \hbox (12.81381pt too wide) in paragraph at lines 612--614
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[]
 [][]mpz[][][]class[][][]with[][][]complexity(+[]Handle, +[]Complexity,
-[37]
+[37
+(/usr/share/texlive/texmf-dist/tex/latex/stmaryrd/Ustmry.fd)
+(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd)] [1{/var/lib/texmf/fo
+nts/map/pdftex/updmap/pdftex.map} </build/ppl-1.2/doc/ppl_logo.pdf>] [2]
 Overfull \hbox (12.81381pt too wide) in paragraph at lines 615--617
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[]
 [][]mpq[][][]class[][][]with[][][]complexity(+[]Handle, +[]Complexity,
@@ -5380,7 +5499,17 @@
 Overfull \hbox (39.2138pt too wide) in paragraph at lines 630--632
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[][][][]Sh
 ape[][][]double[][][]with[][][]complexity(+[]Handle, +[]Complexity,
-[38]
+[38
+(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1pcr.fd) [3] </build/ppl-1.2/d
+oc/bugseng_logo.pdf>] [4] [1] [2] (./index.tex
+Underfull \hbox (badness 10000) detected at line 9
+[][][]
+pdfTeX warning (ext4): destination with the same identifier (name{page.1}) has 
+been already used, duplicate ignored
+<to be read again> 
+                   \relax 
+l.25 
+      [1
 Overfull \hbox (7.44052pt too wide) in paragraph at lines 692--694
 \OT1/ptm/m/it/10 Unifies \OT1/pcr/m/sl/10 Dimension[][][][]Type \OT1/ptm/m/it/1
 0 with the di-men-sion of the vec-tor space en-clos-ing the grid ref-er-enced b
@@ -5407,11 +5536,18 @@
 Overfull \hbox (22.9953pt too wide) in paragraph at lines 707--709
 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]relation[][][]with[][][]grid[][][]genera
 tor(+[]Handle, +[]Grid[][][][]Generator, ?Relation[]
-[39TEXINPUTS=/build/ppl-1.2/doc: texmf_casefold_search=0 make -C user-configured-c-interface.latex-dir refman.pdf \
-  && mv -f user-configured-c-interface.latex-dir/refman.pdf ppl-user-configured-c-interface-1.2.pdf
-]make[3]: Entering directory '/build/ppl-1.2/doc'
-make[3]: warning: jobserver unavailable: using -j1.  Add '+' to parent make rule.
-
+[39])] (./GPL.texpdfTeX warning (ext4): destination with the same identifie
+r (name{page.2}) has been already used, duplicate ignored
+<to be read again> 
+                   \relax 
+l.37 `
+      `Copyright'' also means copyright-\/like laws that apply to other kind...
+[2]pdfTeX warning (ext4): destination with the same identifier (name{page.3}) h
+as been already used, duplicate ignored
+<to be read again> 
+                   \relax 
+l.68 
+      [3]
 Overfull \hbox (41.6138pt too wide) in paragraph at lines 738--740
 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]maximize[][][]with[][][]point(+[]Handle,
  +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[][][]2, ?Boolean,
@@ -5419,9 +5555,12 @@
 Overfull \hbox (41.6138pt too wide) in paragraph at lines 743--745
 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]minimize[][][]with[][][]point(+[]Handle,
  +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[][][]2, ?Boolean,
-[40rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf
-]pdflatex refman
-
+[40]pdfTeX warning (ext4): destination with the same identifier (name{page
+.4}) has been already used, duplicate ignored
+<to be read again> 
+                   \relax 
+l.104 
+       [4] [5] [6] [7] [8]
 Overfull \hbox (7.24037pt too wide) in paragraph at lines 785--787
 \OT1/ptm/m/it/10 Updates the grid ref-er-enced by \OT1/pcr/m/sl/10 Handle \OT1/
 ptm/m/it/10 to one ob-tained by re-fin-ing its con-straint sys-tem with \OT1/pc
@@ -5443,7 +5582,11 @@
 Overfull \hbox (16.9953pt too wide) in paragraph at lines 822--824
 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]generalized[][][]affine[][][]image(+[]Ha
 ndle, +[]P[]P[]L[][][][]Var, +[]Relation[][][][]Symbol, +[]
-[41]
+[41] [9])
+Overfull \hbox (10.35326pt too wide) in paragraph at lines 291--187
+\OT1/ptm/m/n/10 stead of this Li-cense. But first, please read [][]\OT1/pcr/m/n
+/10 http[]://www.[]gnu.[]org/philosophy/why-not-lgpl.[]
+(./GFDL.tex [10]
 Overfull \hbox (14.0138pt too wide) in paragraph at lines 825--827
 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]generalized[][][]affine[][][]preimage(+[
 ]Handle, +[]P[]P[]L[][][][]Var, +[]Relation[][][][]Symbol,
@@ -5475,9 +5618,13 @@
 Overfull \hbox (8.0138pt too wide) in paragraph at lines 846--848
 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]wrap[][][]assign(+[]Handle, +[]List[][][
 ]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[]Representation,
-[42]This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) (preloaded format=pdflatex)
- restricted \write18 enabled.
+[42 [11]] [12] [13]
+Overfull \hbox (7.49895pt too wide) in paragraph at lines 97--98
+\OT1/ptm/m/n/10 ments, form-ing one sec-tion En-ti-tled "[]History"; like-wise 
+com-bine any sec-tions En-ti-tled "[]Acknowledgements",
 
+Underfull \vbox (badness 1377) has occurred while \output is active [14])
+(./modules.tex
 Overfull \hbox (6.19531pt too wide) in paragraph at lines 875--877
 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]congruence[][][]widening[][][]assign[][]
 []with[][][]tokens(+[]Handle[][][]1, +[]Handle[][][]2, +[]
@@ -5505,27 +5652,130 @@
 Overfull \hbox (8.5953pt too wide) in paragraph at lines 902--904
 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]limited[][][]generator[][][]extrapolatio
 n[][][]assign(+[]Handle[][][]1, +[]Handle[][][]2, +[]
-[43]
+[43
+
+LaTeX Warning: Reference `group__PPL__C__interface' on page 15 undefined on inp
+ut line 3.
+
+
+LaTeX Warning: Reference `group__Init' on page 15 undefined on input line 4.
+
+
+LaTeX Warning: Reference `group__Version' on page 15 undefined on input line 5.
+
+
+
+LaTeX Warning: Reference `group__Error' on page 15 undefined on input line 6.
+
+
+LaTeX Warning: Reference `group__Timeout' on page 15 undefined on input line 7.
+
+
+
+LaTeX Warning: Reference `group__Datatypes' on page 15 undefined on input line 
+8.
+
+) (./annotated.tex]
+
+LaTeX Warning: Reference `interfaceppl__Artificial__Parameter__Sequence__const_
+_iterator__tag' on page 15 undefined on input line 3.
+
+
+LaTeX Warning: Reference `interfaceppl__Artificial__Parameter__tag' on page 15 
+undefined on input line 4.
+
+
+LaTeX Warning: Reference `interfaceppl__BD__Shape__double__tag' on page 15 unde
+fined on input line 5.
+
+
+LaTeX Warning: Reference `interfaceppl__BD__Shape__mpq__class__tag' on page 15 
+undefined on input line 6.
+
+[15]
 Overfull \hbox (0.99101pt too wide) in paragraph at lines 911--913
 \OT1/ptm/m/it/10 Assigns to the grid \OT1/pcr/m/sl/10 P \OT1/ptm/m/it/10 ref-er
 -enced by \OT1/pcr/m/sl/10 Handle[][][]1 \OT1/ptm/m/it/10 the con-cate-na-tion 
 of \OT1/pcr/m/sl/10 P \OT1/ptm/m/it/10 and the grid ref-er-enced by \OT1/pcr/m/
 sl/10 Handle[]
-[44entering extended mode
-(./refman.tex]
-LaTeX2e <2018-12-01>
-(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
-Document Class: article 2018/09/03 v1.4i Standard LaTeX document class
-(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo))
-(/usr/share/texlive/texmf-dist/tex/latex/a4wide/a4wide.sty
-(/usr/share/texlive/texmf-dist/tex/latex/ntgclass/a4.sty))
-(/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
-(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty
-(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/graphics.cfg)
+[44]
+
+LaTeX Warning: Reference `interfaceppl__BD__Shape__mpz__class__tag' on page 16 
+undefined on input line 7.
+
+
+LaTeX Warning: Reference `interfaceppl__Coefficient__tag' on page 16 undefined 
+on input line 8.
+
+
+LaTeX Warning: Reference `interfaceppl__Congruence__System__const__iterator__ta
+g' on page 16 undefined on input line 9.
+
+
+LaTeX Warning: Reference `interfaceppl__Congruence__System__tag' on page 16 und
+efined on input line 10.
+
+
+LaTeX Warning: Reference `interfaceppl__Congruence__tag' on page 16 undefined o
+n input line 11.
+
+
+LaTeX Warning: Reference `interfaceppl__Constraint__System__const__iterator__ta
+g' on page 16 undefined on input line 12.
+
+
+LaTeX Warning: Reference `interfaceppl__Constraint__System__tag' on page 16 und
+efined on input line 13.
+
+
+LaTeX Warning: Reference `interfaceppl__Constraint__tag' on page 16 undefined o
+n input line 14.
+
+
+LaTeX Warning: Reference `interfaceppl__Constraints__Product__C__Polyhedron__Gr
+id__tag' on page 16 undefined on input line 15.
+
+
+LaTeX Warning: Reference `interfaceppl__Double__Box__tag' on page 16 undefined 
+on input line 16.
+
+
+LaTeX Warning: Reference `interfaceppl__Generator__System__const__iterator__tag
+' on page 16 undefined on input line 17.
+
+
+LaTeX Warning: Reference `interfaceppl__Generator__System__tag' on page 16 unde
+fined on input line 18.
+
+
+LaTeX Warning: Reference `interfaceppl__Generator__tag' on page 16 undefined on
+ input line 19.
+
+
+LaTeX Warning: Reference `interfaceppl__Grid__Generator__System__const__iterato
+r__tag' on page 16 undefined on input line 20.
+
+
+LaTeX Warning: Reference `interfaceppl__Grid__Generator__System__tag' on page 1
+6 undefined on input line 21.
+
+
+LaTeX Warning: Reference `interfaceppl__Grid__Generator__tag' on page 16 undefi
+ned on input line 22.
+
+
+LaTeX Warning: Reference `interfaceppl__Grid__tag' on page 16 undefined on inpu
+t line 23.
+
+
+LaTeX Warning: Reference `interfaceppl__Linear__Expression__tag' on page 16 und
+efined on input line 24.
+
+
+LaTeX Warning: Reference `interfaceppl__MIP__Problem__tag' on page 16 undefined
+ on input line 25.
+
+[16]
 Overfull \hbox (6.19531pt too wide) in paragraph at lines 955--957
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][]space[
 ][][]dimension(+[]Dimension[][][][]Type, +[]Universe[][][]or[]
@@ -5536,16 +5786,74 @@
 Overfull \hbox (1.39532pt too wide) in paragraph at lines 1000--1002
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][][]Octa
 gonal[][][][]Shape[][][]mpz[][][]class(+[]Handle[][][]1, -[]Handle[][][]
-[45
-(/usr/share/texlive/texmf-dist/tex/latex/graphics-def/pdftex.def))])
-(/usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/float/float.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty
-(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def
-(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu)))
-(/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/tocloft/tocloft.sty
+[45]
+
+LaTeX Warning: Reference `interfaceppl__Octagonal__Shape__double__tag' on page 
+17 undefined on input line 26.
+
+
+LaTeX Warning: Reference `interfaceppl__Octagonal__Shape__mpq__class__tag' on p
+age 17 undefined on input line 27.
+
+
+LaTeX Warning: Reference `interfaceppl__Octagonal__Shape__mpz__class__tag' on p
+age 17 undefined on input line 28.
+
+
+LaTeX Warning: Reference `interfaceppl__PIP__Decision__Node__tag' on page 17 un
+defined on input line 29.
+
+
+LaTeX Warning: Reference `interfaceppl__PIP__Problem__tag' on page 17 undefined
+ on input line 30.
+
+
+LaTeX Warning: Reference `interfaceppl__PIP__Solution__Node__tag' on page 17 un
+defined on input line 31.
+
+
+LaTeX Warning: Reference `interfaceppl__PIP__Tree__Node__tag' on page 17 undefi
+ned on input line 32.
+
+
+LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__C__Polyhedron__cons
+t__iterator__tag' on page 17 undefined on input line 33.
+
+
+LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__C__Polyhedron__iter
+ator__tag' on page 17 undefined on input line 34.
+
+
+Overfull \hbox (20.64815pt too wide) in paragraph at lines 34--34
+ \OT1/ptm/b/n/10 Types and func-tions for it-er-at-ing on the dis-juncts of a [
+][]ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedron[] 
+
+LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__C__Polyhedron__tag'
+ on page 17 undefined on input line 35.
+
+
+LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__NNC__Polyhedron__co
+nst__iterator__tag' on page 17 undefined on input line 36.
+
+
+LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__NNC__Polyhedron__it
+erator__tag' on page 17 undefined on input line 37.
+
+
+LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__NNC__Polyhedron__ta
+g' on page 17 undefined on input line 38.
+
+
+LaTeX Warning: Reference `interfaceppl__Polyhedron__tag' on page 17 undefined o
+n input line 39.
+
+
+LaTeX Warning: Reference `interfaceppl__Rational__Box__tag' on page 17 undefine
+d on input line 40.
+
+) (./group__PPL__C__interface.tex)
+Underfull \vbox (badness 7740) has occurred while \output is active [17]
+[18] (./group__Init.tex
 Overfull \hbox (1.39532pt too wide) in paragraph at lines 1003--1005
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][][]Octa
 gonal[][][][]Shape[][][]mpq[][][]class(+[]Handle[][][]1, -[]Handle[][][]
@@ -5586,12 +5894,13 @@
 Overfull \hbox (22.41382pt too wide) in paragraph at lines 1036--1038
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][][]Octa
 gonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity(+[]Handle,
-[46])
-(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
-(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg)
-(/usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty
-(/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty))
+[46]
+Underfull \hbox (badness 10000) detected at line 35
+[][][]
+
+Underfull \hbox (badness 10000) detected at line 48
+[][][]
+[19]) [20] (./group__Version.tex
 Overfull \hbox (15.2138pt too wide) in paragraph at lines 1039--1041
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][][]Doub
 le[][][][]Box[][][]with[][][]complexity(+[]Handle, +[]Complexity,
@@ -5603,10 +5912,7 @@
 Overfull \hbox (6.81381pt too wide) in paragraph at lines 1045--1047
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][][]Octa
 gonal[][][][]Shape[][][]double[][][]with[][][]complexity(+[]Handle,
-[47])
-(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
-(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty
-(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty
+[47]
 Overfull \hbox (25.3953pt too wide) in paragraph at lines 1113--1115
 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]relation[][][]with[][][]c
 onstraint(+[]Handle, +[]Constraint, ?Relation[]
@@ -5638,8 +5944,15 @@
 Overfull \hbox (26.0138pt too wide) in paragraph at lines 1144--1146
 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]maximize(+[]Handle, +[]Li
 n[][][][]Expr, ?Coeff[][][]1, ?Coeff[][][]2, ?Boolean) 
-[48]))
-(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty)
+[48]/build/ppl-1.2/src/ppl.hh:44030: warning: no matching class member found for 
+  Parma_Polyhedra_Library::Constraint_System_const_iterator::Constraint_System_const_iterator(const Parma_Polyhedra_Library::Linear_System< Parma_Polyhedra_Library::Constraint >::const_iterator &iter, const Constraint_System &cs)
+Possible candidates:
+  Parma_Polyhedra_Library::Constraint_System_const_iterator::Constraint_System_const_iterator()
+  Parma_Polyhedra_Library::Constraint_System_const_iterator::Constraint_System_const_iterator(const Constraint_System_const_iterator &y)
+  Parma_Polyhedra_Library::Constraint_System_const_iterator::Constraint_System_const_iterator(const Linear_System< Constraint > ::const_iterator &iter, const Constraint_System &cs)
+
+ [21]) [22] (./group__Error.tex
+(/usr/share/texlive/texmf-dist/tex/latex/psnfss/omsptm.fd)
 Overfull \hbox (26.0138pt too wide) in paragraph at lines 1149--1151
 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]minimize(+[]Handle, +[]Li
 n[][][][]Expr, ?Coeff[][][]1, ?Coeff[][][]2, ?Boolean) 
@@ -5651,10 +5964,7 @@
 Overfull \hbox (20.5953pt too wide) in paragraph at lines 1159--1161
 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]minimize[][][]with[][][]p
 oint(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[]
-[49
-(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty])
-(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def)
+[49]
 Overfull \hbox (3.2138pt too wide) in paragraph at lines 1217--1219
 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]unconstrain[][][]space[][
 ][]dimensions(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Var) 
@@ -5680,8 +5990,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]generalized[][][]affine[]
 [][]preimage(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Relation[]
 [50]
-(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg)
-(/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def
 Overfull \hbox (15.79532pt too wide) in paragraph at lines 1238--1240
 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]generalized[][][]affine[]
 [][]image[][][]lhs[][][]rhs(+[]Handle, +[]Lin[][][][]Expr[][][]1, +[]
@@ -5717,7 +6025,7 @@
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 1291--1293
 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]limited[][][][]C[]C76[][]
 []extrapolation[][][]assign(+[]Handle[][][]1, +[]Handle[][][]
-[52])
+[52]
 Overfull \hbox (9.2138pt too wide) in paragraph at lines 1310--1312
 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]add[][][]space[][][]dimen
 sions[][][]and[][][]embed(+[]Handle, +[]Dimension[][][][]Type) 
@@ -5749,10 +6057,7 @@
 Overfull \hbox (3.2138pt too wide) in paragraph at lines 1357--1359
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
 []from[][][]congruences(+[]Congruence[][][][]System, -[]Handle) 
-[53
-(/usr/share/texlive/texmf-dist/tex/latex/hyperref/backref.sty]
-(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty))
-(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty)
+[53]
 Underfull \hbox (badness 10000) in paragraph at lines 1368--1369
 
 
@@ -5779,17 +6084,7 @@
 Overfull \hbox (13.39532pt too wide) in paragraph at lines 1404--1406
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
 []from[][][][]Octagonal[][][][]Shape[][][]double(+[]Handle[][][]1, -[]Handle[]
-[54)
-(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def])
-(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty) (./doxygen.sty
-(/usr/share/texlive/texmf-dist/tex/latex/tools/calc.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/tools/verbatim.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/tabu/tabu.sty
-(/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty))
-(/usr/share/texlive/texmf-dist/tex/latex/tools/tabularx.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/multirow/multirow.sty)
+[54]
 Overfull \hbox (1.39532pt too wide) in paragraph at lines 1407--1409
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
 []from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[]
@@ -5840,15 +6135,23 @@
 Overfull \hbox (4.99533pt too wide) in paragraph at lines 1437--1439
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
 []from[][][][]Octagonal[][][][]Shape[][][]double[][][]with[][][]complexity(+[]
-[55])
-(/build/ppl-1.2/doc/ppl.sty
-(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
-For additional information on amsmath, use the `?' option.
-(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty
-(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty))
-(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty))
-(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty
+[55]
+Overfull \hbox (1.62299pt too wide) in paragraph at lines 6--20
+[][]\OT1/ptm/m/n/10 P[]P[]L[][][][]E[]R[]R[]O[]R[][][][]O[]U[]T[][][][]O[]F[][]
+[][]M[]E[]M[]O[]RY[][], [][]P[]P[]L[][][][]E[]R[]R[]O[]R[][][][]I[]N[]V[]A[]L[]
+I[]D[][][][]A[]R[]G[]U[]M[]E[]NT[][], [][]P[]P[]L[][][][]E[]R[]R[]O[]R[][][][]D
+[]O[]M[]
+
+Overfull \hbox (1.35289pt too wide) in paragraph at lines 6--20
+[][]\OT1/ptm/m/n/10 P[]P[]L[][][][]A[]R[]I[]T[]H[]M[]E[]T[]I[]C[][][][]O[]V[]E[
+]R[]F[]L[]OW[][], [][]P[]P[]L[][][][]S[]T[]D[]I[]O[][][][]E[]R[]R[]OR[][], [][]
+P[]P[]L[][][][]E[]R[]R[]O[]R[][][][]I[]N[]T[]E[]R[]N[]A[]L[][][][]E[]R[]R[]OR[]
+[], [][]P[]
+
+Package longtable Warning: Column widths have changed
+(longtable)                in table 1 on input line 88.
+
+[23]) [24] (./group__Timeout.tex
 Overfull \hbox (4.99533pt too wide) in paragraph at lines 1480--1482
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]strictl
 y[][][]contains[][][][]B[]D[][][][]Shape[][][]mpz[][][]class(+[]Handle[][][]1, 
@@ -5876,9 +6179,7 @@
 \OT1/ptm/m/it/10 Unifies \OT1/pcr/m/sl/10 Relation[][][][]List \OT1/ptm/m/it/10
  with the list of re-la-tions the bd shape ref-er-enced by \OT1/pcr/m/sl/10 Han
 dle \OT1/ptm/m/it/10 has with \OT1/pcr/m/sl/10 Generator\OT1/ptm/m/it/10 .
-[56
-(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty)])
-(/usr/share/texlive/texmf-dist/tex/latex/stmaryrd/stmaryrd.sty)
+[56]
 Overfull \hbox (56.5953pt too wide) in paragraph at lines 1511--1513
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]relatio
 n[][][]with[][][]congruence(+[]Handle, +[]Congruence, ?Relation[]
@@ -5911,17 +6212,30 @@
 Overfull \hbox (0.81381pt too wide) in paragraph at lines 1541--1543
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]minimiz
 e[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1,
-[57])
-Writing index file refman.idx
-No file refman.aux.
-(/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd)
-(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1ptm.fd)
-(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
-[Loading MPS to PDF converter (version 2006.09.02).]
-) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty
-(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg))
-(/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty
+[57]
+
+Package longtable Warning: Column widths have changed
+(longtable)                in table 2 on input line 36.
+
+
+Underfull \hbox (badness 10000) detected at line 47
+[][][]
+
+Overfull \hbox (4.67143pt too wide) in paragraph at lines 48--49
+[]\OT1/pcr/m/n/10 P[]P[]L[][][][]E[]R[]R[]O[]R[][][][]I[]N[]V[]A[]L[]I[]D[][][]
+[]A[]R[]G[]U[]M[]E[]NT \OT1/ptm/bc/n/10 if \OT1/pcr/m/n/10 unscaled[][][]weight
+ \OT1/ptm/bc/n/10 is zero or if the com-puted weight thresh-
+
+Package longtable Warning: Column widths have changed
+(longtable)                in table 3 on input line 56.
+
+[25]
+Underfull \hbox (badness 10000) detected at line 59
+[][][]
+
+Underfull \hbox (badness 10000) detected at line 62
+[][][]
+) [26] (./group__Datatypes.tex
 Overfull \hbox (25.80045pt too wide) in paragraph at lines 1577--1579
 \OT1/ptm/m/it/10 Updates the bd shape ref-er-enced by \OT1/pcr/m/sl/10 Handle \
 OT1/ptm/m/it/10 to one ob-tained by re-fin-ing its con-straint sys-tem with \OT
@@ -5942,13 +6256,7 @@
 Overfull \hbox (9.2138pt too wide) in paragraph at lines 1602--1604
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]affine[
 ][][]image(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr, +[]Coeff) 
-[58
-(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty)])
-(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1phv.fd)
-(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd)
-(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd)
-(/usr/share/texlive/texmf-dist/tex/latex/stmaryrd/Ustmry.fd)
-(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd)
+[58]
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 1605--1607
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]affine[
 ][][]preimage(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr, +[]
@@ -5980,17 +6288,19 @@
 Overfull \hbox (3.79532pt too wide) in paragraph at lines 1626--1628
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]wrap[][
 ][]assign(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[]
-[59] [1{/var/lib/texmf/fo
-nts/map/pdftex/updmap/pdftex.map} </build/ppl-1.2/doc/ppl_logo.pdf>] [2]
-(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1pcr.fd) [3 </build/ppl-1.2/d
-oc/bugseng_logo.pdf>] [4] [1] [2]/build/ppl-1.2/src/ppl.hh:44030: warning: no matching class member found for 
-  Parma_Polyhedra_Library::Constraint_System_const_iterator::Constraint_System_const_iterator(const Parma_Polyhedra_Library::Linear_System< Parma_Polyhedra_Library::Constraint >::const_iterator &iter, const Constraint_System &cs)
-Possible candidates:
-  Parma_Polyhedra_Library::Constraint_System_const_iterator::Constraint_System_const_iterator()
-  Parma_Polyhedra_Library::Constraint_System_const_iterator::Constraint_System_const_iterator(const Constraint_System_const_iterator &y)
-  Parma_Polyhedra_Library::Constraint_System_const_iterator::Constraint_System_const_iterator(const Linear_System< Constraint > ::const_iterator &iter, const Constraint_System &cs)
+[59
+Overfull \hbox (3.74069pt too wide) in paragraph at lines 43--45
+[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Constraint[][][][]System[]
+[][]const[][][]iterator[][][]tag[][] const $\OMS/cmsy/m/n/10 ^^C$ [][]\OT1/ptm/
+bc/n/10 ppl[][][]const[][][][]Constraint[][][][]System[][][]const[]
+
+Overfull \hbox (0.36111pt too wide) in paragraph at lines 61--63
+[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Generator[][][][]System[][
+][]const[][][]iterator[][][]tag[][] const $\OMS/cmsy/m/n/10 ^^C$ [][]\OT1/ptm/b
+c/n/10 ppl[][][]const[][][][]Generator[][][][]System[][][]const[]
+[27]]GPL:-1: warning: multiple use of section label 'GPL', (first occurrence: /build/ppl-1.2/doc/gpl.dox, line 6)
+GFDL:-1: warning: multiple use of section label 'GFDL', (first occurrence: /build/ppl-1.2/doc/fdl.dox, line 6)
 
- (./index.tex
 Overfull \hbox (3.79532pt too wide) in paragraph at lines 1648--1650
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]simplif
 y[][][]using[][][]context[][][]assign(+[]Handle[][][]1, +[]Handle[]
@@ -6016,14 +6326,16 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limited
 [][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign[][][]with[][][]tokens(+[]
 [60]
-Underfull \hbox (badness 10000) detected at line 9
-[][][]
-pdfTeX warning (ext4): destination with the same identifier (name{page.1}) has 
-been already used, duplicate ignored
-<to be read again> 
-                   \relax 
-l.25 
-      [1]) (./GPL.tex
+Overfull \hbox (1.80132pt too wide) in paragraph at lines 76--78
+[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Congruence[][][][]System[]
+[][]const[][][]iterator[][][]tag[][] $\OMS/cmsy/m/n/10 ^^C$ [][]\OT1/ptm/bc/n/1
+0 ppl[][][][]Congruence[][][][]System[][][]const[][][]iterator[]
+
+Overfull \hbox (16.4409pt too wide) in paragraph at lines 139--141
+[][] \OT1/ptm/bc/n/10 type-def struct ppl[][][][]Artificial[][][][]Parameter[][
+][][]Sequence[][][]tag const $\OMS/cmsy/m/n/10 ^^C$ [][]\OT1/ptm/bc/n/10 ppl[][
+][]const[][][][]Artificial[][][][]Parameter[][][][]Sequence[]
+[28]
 Overfull \hbox (25.39532pt too wide) in paragraph at lines 1679--1681
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limited
 [][][][]H79[][][]extrapolation[][][]assign[][][]with[][][]tokens(+[]Handle[]
@@ -6048,23 +6360,7 @@
 Overfull \hbox (15.79532pt too wide) in paragraph at lines 1710--1712
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][]
 []space[][][]dimensions[][][]and[][][]embed(+[]Handle, +[]Dimension[]
-[61pdfTeX warning (ext4): destination with the same identifie
-r (name{page.2}) has been already used, duplicate ignored
-<to be read again> 
-                   \relax 
-l.37 `
-      `Copyright'' also means copyright-\/like laws that apply to other kind...
-[2]]pdfTeX warning (ext4): destination with the same identifier (name{page.3}) h
-as been already used, duplicate ignored
-<to be read again> 
-                   \relax 
-l.68 
-      [3]pdfTeX warning (ext4): destination with the same identifier (name{page
-.4}) has been already used, duplicate ignored
-<to be read again> 
-                   \relax 
-l.104 
-       [4] [5] [6
+[61]
 Overfull \hbox (27.79532pt too wide) in paragraph at lines 1713--1715
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][]
 []space[][][]dimensions[][][]and[][][]project(+[]Handle, +[]Dimension[]
@@ -6098,7 +6394,18 @@
 Overfull \hbox (3.2138pt too wide) in paragraph at lines 1757--1759
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
 []from[][][]congruences(+[]Congruence[][][][]System, -[]Handle) 
-[62]] [7] [8]
+[62]
+Overfull \hbox (27.11154pt too wide) in paragraph at lines 190--192
+[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Constraints[][][][]Product
+[][][][]C[][][][]Polyhedron[][][][]Grid[][][]tag[][] $\OMS/cmsy/m/n/10 ^^C$ [][
+]\OT1/ptm/bc/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
+ron[]
+
+Overfull \hbox (14.85136pt too wide) in paragraph at lines 193--195
+[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Constraints[][][][]Product
+[][][][]C[][][][]Polyhedron[][][][]Grid[][][]tag[][] const $\OMS/cmsy/m/n/10 ^^
+C$ [][]\OT1/ptm/bc/n/10 ppl[][][]const[][][][]Constraints[][][][]Product[]
+[29]
 Underfull \hbox (badness 10000) in paragraph at lines 1768--1769
 
 
@@ -6129,11 +6436,7 @@
 Overfull \hbox (1.39532pt too wide) in paragraph at lines 1807--1809
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
 []from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[]
-[63] [9])
-Overfull \hbox (10.35326pt too wide) in paragraph at lines 291--187
-\OT1/ptm/m/n/10 stead of this Li-cense. But first, please read [][]\OT1/pcr/m/n
-/10 http[]://www.[]gnu.[]org/philosophy/why-not-lgpl.[]
-(./GFDL.tex [10]
+[63]
 Overfull \hbox (13.39532pt too wide) in paragraph at lines 1810--1812
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
 []from[][][][]N[]N[]C[][][][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[
@@ -6180,7 +6483,34 @@
 Overfull \hbox (4.99533pt too wide) in paragraph at lines 1837--1839
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
 []from[][][][]Octagonal[][][][]Shape[][][]double[][][]with[][][]complexity(+[]
-[64 [11]] [12] [13]
+[64
+Overfull \hbox (18.00154pt too wide) in paragraph at lines 202--204
+[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Pointset[][][][]Powerset[]
+[][][]N[]N[]C[][][][]Polyhedron[][][]tag[][] $\OMS/cmsy/m/n/10 ^^C$ [][]\OT1/pt
+m/bc/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Polyhedron[
+]
+
+Overfull \hbox (21.60114pt too wide) in paragraph at lines 226--228
+[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Pointset[][][][]Powerset[]
+[][][]C[][][][]Polyhedron[][][]iterator[][][]tag[][] $\OMS/cmsy/m/n/10 ^^C$ [][
+]\OT1/ptm/bc/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
+n[]
+
+Overfull \hbox (9.34096pt too wide) in paragraph at lines 229--231
+[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Pointset[][][][]Powerset[]
+[][][]C[][][][]Polyhedron[][][]iterator[][][]tag[][] const $\OMS/cmsy/m/n/10 ^^
+C$ [][]\OT1/ptm/bc/n/10 ppl[][][]const[][][][]Pointset[][][][]Powerset[]
+
+Overfull \hbox (0.77115pt too wide) in paragraph at lines 244--246
+[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Pointset[][][][]Powerset[]
+[][][]N[]N[]C[][][][]Polyhedron[][][]const[][][]iterator[][][]tag[][] $\OMS/cms
+y/m/n/10 ^^C$ [][]\OT1/ptm/bc/n/10 ppl[][][][]Pointset[][][][]Powerset[]
+
+Overfull \hbox (8.4811pt too wide) in paragraph at lines 247--249
+[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Pointset[][][][]Powerset[]
+[][][]N[]N[]C[][][][]Polyhedron[][][]const[][][]iterator[][][]tag[][] const $\O
+MS/cmsy/m/n/10 ^^C$ [][]\OT1/ptm/bc/n/10 ppl[][][]const[][][][]Pointset[]
+[30]]
 Overfull \hbox (4.99533pt too wide) in paragraph at lines 1880--1882
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]strictl
 y[][][]contains[][][][]B[]D[][][][]Shape[][][]mpq[][][]class(+[]Handle[][][]1, 
@@ -6208,36 +6538,7 @@
 \OT1/ptm/m/it/10 Unifies \OT1/pcr/m/sl/10 Relation[][][][]List \OT1/ptm/m/it/10
  with the list of re-la-tions the bd shape ref-er-enced by \OT1/pcr/m/sl/10 Han
 dle \OT1/ptm/m/it/10 has with \OT1/pcr/m/sl/10 Generator\OT1/ptm/m/it/10 .
-[65
-Overfull \hbox (7.49895pt too wide) in paragraph at lines 97--98
-\OT1/ptm/m/n/10 ments, form-ing one sec-tion En-ti-tled "[]History"; like-wise 
-com-bine any sec-tions En-ti-tled "[]Acknowledgements",
-
-Underfull \vbox (badness 1377) has occurred while \output is active [14]])
-(./modules.tex
-
-LaTeX Warning: Reference `group__PPL__C__interface' on page 15 undefined on inp
-ut line 3.
-
-
-LaTeX Warning: Reference `group__Init' on page 15 undefined on input line 4.
-
-
-LaTeX Warning: Reference `group__Version' on page 15 undefined on input line 5.
-
-
-
-LaTeX Warning: Reference `group__Error' on page 15 undefined on input line 6.
-
-
-LaTeX Warning: Reference `group__Timeout' on page 15 undefined on input line 7.
-
-
-
-LaTeX Warning: Reference `group__Datatypes' on page 15 undefined on input line 
-8.
-
-) (./annotated.tex
+[65]
 Overfull \hbox (56.5953pt too wide) in paragraph at lines 1911--1913
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]relatio
 n[][][]with[][][]congruence(+[]Handle, +[]Congruence, ?Relation[]
@@ -6270,24 +6571,7 @@
 Overfull \hbox (0.81381pt too wide) in paragraph at lines 1941--1943
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]minimiz
 e[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1,
-[66
-
-LaTeX Warning: Reference `interfaceppl__Artificial__Parameter__Sequence__const_
-_iterator__tag' on page 15 undefined on input line 3.
-
-
-LaTeX Warning: Reference `interfaceppl__Artificial__Parameter__tag' on page 15 
-undefined on input line 4.
-
-
-LaTeX Warning: Reference `interfaceppl__BD__Shape__double__tag' on page 15 unde
-fined on input line 5.
-
-
-LaTeX Warning: Reference `interfaceppl__BD__Shape__mpq__class__tag' on page 15 
-undefined on input line 6.
-
-[15]]
+[66] [31]
 Overfull \hbox (25.80045pt too wide) in paragraph at lines 1977--1979
 \OT1/ptm/m/it/10 Updates the bd shape ref-er-enced by \OT1/pcr/m/sl/10 Handle \
 OT1/ptm/m/it/10 to one ob-tained by re-fin-ing its con-straint sys-tem with \OT
@@ -6309,83 +6593,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]affine[
 ][][]image(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr, +[]Coeff) 
 [67]
-
-LaTeX Warning: Reference `interfaceppl__BD__Shape__mpz__class__tag' on page 16 
-undefined on input line 7.
-
-
-LaTeX Warning: Reference `interfaceppl__Coefficient__tag' on page 16 undefined 
-on input line 8.
-
-
-LaTeX Warning: Reference `interfaceppl__Congruence__System__const__iterator__ta
-g' on page 16 undefined on input line 9.
-
-
-LaTeX Warning: Reference `interfaceppl__Congruence__System__tag' on page 16 und
-efined on input line 10.
-
-
-LaTeX Warning: Reference `interfaceppl__Congruence__tag' on page 16 undefined o
-n input line 11.
-
-
-LaTeX Warning: Reference `interfaceppl__Constraint__System__const__iterator__ta
-g' on page 16 undefined on input line 12.
-
-
-LaTeX Warning: Reference `interfaceppl__Constraint__System__tag' on page 16 und
-efined on input line 13.
-
-
-LaTeX Warning: Reference `interfaceppl__Constraint__tag' on page 16 undefined o
-n input line 14.
-
-
-LaTeX Warning: Reference `interfaceppl__Constraints__Product__C__Polyhedron__Gr
-id__tag' on page 16 undefined on input line 15.
-
-
-LaTeX Warning: Reference `interfaceppl__Double__Box__tag' on page 16 undefined 
-on input line 16.
-
-
-LaTeX Warning: Reference `interfaceppl__Generator__System__const__iterator__tag
-' on page 16 undefined on input line 17.
-
-
-LaTeX Warning: Reference `interfaceppl__Generator__System__tag' on page 16 unde
-fined on input line 18.
-
-
-LaTeX Warning: Reference `interfaceppl__Generator__tag' on page 16 undefined on
- input line 19.
-
-
-LaTeX Warning: Reference `interfaceppl__Grid__Generator__System__const__iterato
-r__tag' on page 16 undefined on input line 20.
-
-
-LaTeX Warning: Reference `interfaceppl__Grid__Generator__System__tag' on page 1
-6 undefined on input line 21.
-
-
-LaTeX Warning: Reference `interfaceppl__Grid__Generator__tag' on page 16 undefi
-ned on input line 22.
-
-
-LaTeX Warning: Reference `interfaceppl__Grid__tag' on page 16 undefined on inpu
-t line 23.
-
-
-LaTeX Warning: Reference `interfaceppl__Linear__Expression__tag' on page 16 und
-efined on input line 24.
-
-
-LaTeX Warning: Reference `interfaceppl__MIP__Problem__tag' on page 16 undefined
- on input line 25.
-
-[16]
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 2005--2007
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]affine[
 ][][]preimage(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr, +[]
@@ -6418,73 +6625,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]wrap[][
 ][]assign(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[]
 [68]
-
-LaTeX Warning: Reference `interfaceppl__Octagonal__Shape__double__tag' on page 
-17 undefined on input line 26.
-
-
-LaTeX Warning: Reference `interfaceppl__Octagonal__Shape__mpq__class__tag' on p
-age 17 undefined on input line 27.
-
-
-LaTeX Warning: Reference `interfaceppl__Octagonal__Shape__mpz__class__tag' on p
-age 17 undefined on input line 28.
-
-
-LaTeX Warning: Reference `interfaceppl__PIP__Decision__Node__tag' on page 17 un
-defined on input line 29.
-
-
-LaTeX Warning: Reference `interfaceppl__PIP__Problem__tag' on page 17 undefined
- on input line 30.
-
-
-LaTeX Warning: Reference `interfaceppl__PIP__Solution__Node__tag' on page 17 un
-defined on input line 31.
-
-
-LaTeX Warning: Reference `interfaceppl__PIP__Tree__Node__tag' on page 17 undefi
-ned on input line 32.
-
-
-LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__C__Polyhedron__cons
-t__iterator__tag' on page 17 undefined on input line 33.
-
-
-LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__C__Polyhedron__iter
-ator__tag' on page 17 undefined on input line 34.
-
-
-Overfull \hbox (20.64815pt too wide) in paragraph at lines 34--34
- \OT1/ptm/b/n/10 Types and func-tions for it-er-at-ing on the dis-juncts of a [
-][]ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedron[] 
-
-LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__C__Polyhedron__tag'
- on page 17 undefined on input line 35.
-
-
-LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__NNC__Polyhedron__co
-nst__iterator__tag' on page 17 undefined on input line 36.
-
-
-LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__NNC__Polyhedron__it
-erator__tag' on page 17 undefined on input line 37.
-
-
-LaTeX Warning: Reference `interfaceppl__Pointset__Powerset__NNC__Polyhedron__ta
-g' on page 17 undefined on input line 38.
-
-
-LaTeX Warning: Reference `interfaceppl__Polyhedron__tag' on page 17 undefined o
-n input line 39.
-
-
-LaTeX Warning: Reference `interfaceppl__Rational__Box__tag' on page 17 undefine
-d on input line 40.
-
-) (./group__PPL__C__interface.tex)
-Underfull \vbox (badness 7740) has occurred while \output is active [17]
-[18] (./group__Init.tex
 Overfull \hbox (3.79532pt too wide) in paragraph at lines 2048--2050
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]simplif
 y[][][]using[][][]context[][][]assign(+[]Handle[][][]1, +[]Handle[]
@@ -6510,12 +6650,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limited
 [][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign[][][]with[][][]tokens(+[]
 [69]
-Underfull \hbox (badness 10000) detected at line 35
-[][][]
-
-Underfull \hbox (badness 10000) detected at line 48
-[][][]
-[19]) [20] (./group__Version.tex
 Overfull \hbox (25.39532pt too wide) in paragraph at lines 2079--2081
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limited
 [][][][]H79[][][]extrapolation[][][]assign[][][]with[][][]tokens(+[]Handle[]
@@ -6540,7 +6674,21 @@
 Overfull \hbox (15.79532pt too wide) in paragraph at lines 2110--2112
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]add[][]
 []space[][][]dimensions[][][]and[][][]embed(+[]Handle, +[]Dimension[]
-[70]
+[70
+Underfull \hbox (badness 10000) detected at line 351
+[][][]
+
+Overfull \hbox (27.05392pt too wide) in paragraph at lines 361--362
+ []\OT1/ptm/b/n/10 ppl[][][]io[][][]variable[][][]output[][][]function[][][]typ
+e[] \OT1/pcr/m/n/8 typedef const char$\OMS/cmsy/m/n/8 ^^C$ \OT1/pcr/m/n/8 ppl[]
+[][]io[][][]variable[][][]output[][][]function[][][]type([][]ppl[]
+
+Package longtable Warning: Column widths have changed
+(longtable)                in table 4 on input line 401.
+
+
+Overfull \vbox (4.91087pt too high) has occurred while \output is active
+[32]]
 Overfull \hbox (27.79532pt too wide) in paragraph at lines 2113--2115
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]add[][]
 []space[][][]dimensions[][][]and[][][]project(+[]Handle, +[]Dimension[]
@@ -6574,8 +6722,7 @@
 Overfull \hbox (12.19531pt too wide) in paragraph at lines 2157--2159
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpz[][][]clas
 s[][][]from[][][]congruences(+[]Congruence[][][][]System, -[]
-[71 [21])] [22] (./group__Error.tex
-(/usr/share/texlive/texmf-dist/tex/latex/psnfss/omsptm.fd)
+[71]
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 2160--2162
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpz[][][]clas
 s[][][]from[][][]generators(+[]Generator[][][][]System, -[]
@@ -6817,6 +6964,29 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]ge
 neralized[][][]affine[][][]preimage[][][]lhs[][][]rhs(+[]Handle,
 [77]
+
+Package longtable Warning: Column widths have changed
+(longtable)                in table 5 on input line 429.
+
+
+Package longtable Warning: Column widths have changed
+(longtable)                in table 6 on input line 453.
+
+
+Package longtable Warning: Column widths have changed
+(longtable)                in table 7 on input line 485.
+
+
+Overfull \hbox (19.9918pt too wide) in paragraph at lines 490--491
+ []\OT1/ptm/b/n/10 ppl[][][]enum[][][][]Bounded[][][][]Integer[][][][]Type[][][
+][]Representation[] \OT1/pcr/m/n/8 enum [][]ppl[][][]enum[][][][]Bounded[][][][
+]Integer[][][][]Type[][][][]Representation[][] 
+
+Package longtable Warning: Column widths have changed
+(longtable)                in table 8 on input line 505.
+
+
+Underfull \vbox (badness 3746) has occurred while \output is active [33
 Overfull \hbox (24.81381pt too wide) in paragraph at lines 2426--2428
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]wr
 ap[][][]assign(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width,
@@ -6836,9 +7006,7 @@
 Overfull \hbox (9.79532pt too wide) in paragraph at lines 2458--2460
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][][]
 B[]H[]M[]Z05[][][]widening[][][]assign[][][]with[][][]tokens(+[]Handle[]
-[78]GPL:-1: warning: multiple use of section label 'GPL', (first occurrence: /build/ppl-1.2/doc/gpl.dox, line 6)
-GFDL:-1: warning: multiple use of section label 'GFDL', (first occurrence: /build/ppl-1.2/doc/fdl.dox, line 6)
-
+[78]]
 Overfull \hbox (6.19531pt too wide) in paragraph at lines 2461--2463
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][][]
 B[]H[]M[]Z05[][][]widening[][][]assign(+[]Handle[][][]1, +[]Handle[]
@@ -6876,22 +7044,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][][]
 C[]C76[][][]narrowing[][][]assign(+[]Handle[][][]1, +[]Handle[]
 [79]
-Overfull \hbox (1.62299pt too wide) in paragraph at lines 6--20
-[][]\OT1/ptm/m/n/10 P[]P[]L[][][][]E[]R[]R[]O[]R[][][][]O[]U[]T[][][][]O[]F[][]
-[][]M[]E[]M[]O[]RY[][], [][]P[]P[]L[][][][]E[]R[]R[]O[]R[][][][]I[]N[]V[]A[]L[]
-I[]D[][][][]A[]R[]G[]U[]M[]E[]NT[][], [][]P[]P[]L[][][][]E[]R[]R[]O[]R[][][][]D
-[]O[]M[]
-
-Overfull \hbox (1.35289pt too wide) in paragraph at lines 6--20
-[][]\OT1/ptm/m/n/10 P[]P[]L[][][][]A[]R[]I[]T[]H[]M[]E[]T[]I[]C[][][][]O[]V[]E[
-]R[]F[]L[]OW[][], [][]P[]P[]L[][][][]S[]T[]D[]I[]O[][][][]E[]R[]R[]OR[][], [][]
-P[]P[]L[][][][]E[]R[]R[]O[]R[][][][]I[]N[]T[]E[]R[]N[]A[]L[][][][]E[]R[]R[]OR[]
-[], [][]P[]
-
-Package longtable Warning: Column widths have changed
-(longtable)                in table 1 on input line 88.
-
-[23
 Overfull \hbox (3.79532pt too wide) in paragraph at lines 2498--2500
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]ad
 d[][][]space[][][]dimensions[][][]and[][][]embed(+[]Handle, +[]
@@ -6919,7 +7071,7 @@
 Overfull \hbox (15.79532pt too wide) in paragraph at lines 2535--2537
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas
 s[][][]from[][][]space[][][]dimension(+[]Dimension[][][][]Type, +[]
-[80]]) [24] (./group__Timeout.tex
+[80]
 Overfull \hbox (12.19531pt too wide) in paragraph at lines 2542--2544
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas
 s[][][]from[][][]constraints(+[]Constraint[][][][]System, -[]
@@ -6971,29 +7123,21 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas
 s[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class(+[]Handle[]
 [81]
+Underfull \hbox (badness 10000) detected at line 534
+[][][]
 
 Package longtable Warning: Column widths have changed
-(longtable)                in table 2 on input line 36.
-
-
-Underfull \hbox (badness 10000) detected at line 47
-[][][]
+(longtable)                in table 9 on input line 534.
 
-Overfull \hbox (4.67143pt too wide) in paragraph at lines 48--49
-[]\OT1/pcr/m/n/10 P[]P[]L[][][][]E[]R[]R[]O[]R[][][][]I[]N[]V[]A[]L[]I[]D[][][]
-[]A[]R[]G[]U[]M[]E[]NT \OT1/ptm/bc/n/10 if \OT1/pcr/m/n/10 unscaled[][][]weight
- \OT1/ptm/bc/n/10 is zero or if the com-puted weight thresh-
 
 Package longtable Warning: Column widths have changed
-(longtable)                in table 3 on input line 56.
+(longtable)                in table 10 on input line 558.
 
-[25]
-Underfull \hbox (badness 10000) detected at line 59
-[][][]
 
-Underfull \hbox (badness 10000) detected at line 62
+Underfull \hbox (badness 10000) detected at line 559
 [][][]
-) [26]
+) [34]
+(./interfaceppl__Artificial__Parameter__Sequence__const__iterator__tag.tex
 Overfull \hbox (7.39532pt too wide) in paragraph at lines 2583--2585
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas
 s[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class(+[]Handle[]
@@ -7041,7 +7185,7 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas
 s[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]co
 mplexity(+[]
-[82 (./group__Datatypes.tex]
+[82]
 Overfull \hbox (10.41382pt too wide) in paragraph at lines 2619--2621
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas
 s[][][]from[][][][]Double[][][][]Box[][][]with[][][]complexity(+[]Handle,
@@ -7071,16 +7215,36 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]eq
 uals[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class(+[]Handle[][][]
 [83]
-Overfull \hbox (3.74069pt too wide) in paragraph at lines 43--45
-[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Constraint[][][][]System[]
-[][]const[][][]iterator[][][]tag[][] const $\OMS/cmsy/m/n/10 ^^C$ [][]\OT1/ptm/
-bc/n/10 ppl[][][]const[][][][]Constraint[][][][]System[][][]const[]
+Overfull \hbox (7.82706pt too wide) in paragraph at lines 22--24
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]Artificial[][][][]Paramete
+r[][][][]Sequence[][][]const[][][]iterator[][][]from[][][][]Artificial[][][][]P
+arameter[][][][]Sequence[]
 
-Overfull \hbox (0.36111pt too wide) in paragraph at lines 61--63
-[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Generator[][][][]System[][
-][]const[][][]iterator[][][]tag[][] const $\OMS/cmsy/m/n/10 ^^C$ [][]\OT1/ptm/b
-c/n/10 ppl[][][]const[][][][]Generator[][][][]System[][][]const[]
-[27
+Overfull \hbox (23.68665pt too wide) in paragraph at lines 22--24
+[][]\OT1/ptm/bc/n/10 const[][][]iterator[][] ([][]ppl[][][][]Artificial[][][][]
+Parameter[][][][]Sequence[][][]const[][][]iterator[][][]t[][] dst, [][]ppl[][][
+]const[][][][]Artificial[][][][]Parameter[]
+
+Overfull \hbox (26.38684pt too wide) in paragraph at lines 25--27
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]delete[][][][]Artificial[][][][]Paramete
+r[][][][]Sequence[][][]const[][][]iterator[][] ([][]ppl[][][]const[][][][]Artif
+icial[][][][]Parameter[][][][]Sequence[]
+
+Overfull \hbox (7.21704pt too wide) in paragraph at lines 32--34
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Artificial[][][][]Parameter[][][][]Seq
+uence[][][]const[][][]iterator[][][]dereference[][] ([][]ppl[][][]const[][][][]
+Artificial[][][][]Parameter[]
+
+Overfull \hbox (17.78696pt too wide) in paragraph at lines 35--37
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Artificial[][][][]Parameter[][][][]Seq
+uence[][][]const[][][]iterator[][][]increment[][] ([][]ppl[][][][]Artificial[][
+][][]Parameter[][][][]Sequence[]
+) (./interfaceppl__Artificial__Parameter__tag.tex
+Overfull \hbox (4.9309pt too wide) in paragraph at lines 15--17
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Artificial[][][][]Parameter[][][]get[]
+[][][]Linear[][][][]Expression[][] ([][]ppl[][][]const[][][][]Artificial[][][][
+]Parameter[][][]t[][] ap, [][]ppl[][][][]Linear[]
+[35
 Overfull \hbox (5.6138pt too wide) in paragraph at lines 2690--2692
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]af
 fine[][][]dimension(+[]Handle, ?Dimension[][][][]Type) 
@@ -7145,6 +7309,11 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]re
 fine[][][]with[][][]constraint( +[]Handle, +[]Constraint) 
 [85]
+Overfull \hbox (0.85934pt too wide) in paragraph at lines 18--20
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Artificial[][][][]Parameter[][][]coeff
+icient[][] ([][]ppl[][][]const[][][][]Artificial[][][][]Parameter[][][]t[][] ap
+, [][]ppl[][][]dimension[][][]type[][] var,
+) (./interfaceppl__BD__Shape__double__tag.tex
 Overfull \hbox (23.6138pt too wide) in paragraph at lines 2768--2770
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]re
 fine[][][]with[][][]congruence( +[]Handle, +[]Congruence) 
@@ -7194,16 +7363,36 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]ge
 neralized[][][]affine[][][]preimage(+[]Handle, +[]P[]P[]
 [86]
-Overfull \hbox (1.80132pt too wide) in paragraph at lines 76--78
-[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Congruence[][][][]System[]
-[][]const[][][]iterator[][][]tag[][] $\OMS/cmsy/m/n/10 ^^C$ [][]\OT1/ptm/bc/n/1
-0 ppl[][][][]Congruence[][][][]System[][][]const[][][]iterator[]
+Overfull \hbox (10.32233pt too wide) in paragraph at lines 17--19
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
+][]from[][][]space[][][]dimension[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]do
+uble[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]dimens
+ion[]
 
-Overfull \hbox (16.4409pt too wide) in paragraph at lines 139--141
-[][] \OT1/ptm/bc/n/10 type-def struct ppl[][][][]Artificial[][][][]Parameter[][
-][][]Sequence[][][]tag const $\OMS/cmsy/m/n/10 ^^C$ [][]\OT1/ptm/bc/n/10 ppl[][
-][]const[][][][]Artificial[][][][]Parameter[][][][]Sequence[]
-[28]
+Overfull \hbox (28.3727pt too wide) in paragraph at lines 19--21
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
+][]from[][][][]C[][][][]Polyhedron[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]d
+ouble[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const
+[][][][]Polyhedron[]
+
+Overfull \hbox (13.9322pt too wide) in paragraph at lines 25--27
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
+][]from[][][][]Rational[][][][]Box[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]d
+ouble[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const
+[][][][]Rational[]
+
+Overfull \hbox (8.07243pt too wide) in paragraph at lines 27--29
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
+][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][][]B[]D[]
+[][][]Shape[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, 
+[][]ppl[][][]const[]
+
+Overfull \hbox (8.63249pt too wide) in paragraph at lines 29--31
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
+][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][][]B[]D[]
+[][][]Shape[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, 
+[][]ppl[][][]const[]
+[36]
 Overfull \hbox (15.79532pt too wide) in paragraph at lines 2808--2810
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]ge
 neralized[][][]affine[][][]image[][][]lhs[][][]rhs(+[]Handle, +[]
@@ -7269,17 +7458,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][][]
 C[]C76[][][]narrowing[][][]assign(+[]Handle[][][]1, +[]Handle[]
 [88]
-Overfull \hbox (27.11154pt too wide) in paragraph at lines 190--192
-[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Constraints[][][][]Product
-[][][][]C[][][][]Polyhedron[][][][]Grid[][][]tag[][] $\OMS/cmsy/m/n/10 ^^C$ [][
-]\OT1/ptm/bc/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
-ron[]
-
-Overfull \hbox (14.85136pt too wide) in paragraph at lines 193--195
-[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Constraints[][][][]Product
-[][][][]C[][][][]Polyhedron[][][][]Grid[][][]tag[][] const $\OMS/cmsy/m/n/10 ^^
-C$ [][]\OT1/ptm/bc/n/10 ppl[][][]const[][][][]Constraints[][][][]Product[]
-[29]
 Overfull \hbox (3.79532pt too wide) in paragraph at lines 2886--2888
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]ad
 d[][][]space[][][]dimensions[][][]and[][][]embed(+[]Handle, +[]
@@ -7304,6 +7482,61 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]fo
 ld[][][]space[][][]dimensions(+[]Handle, +[]List[][][]of[][][][]P[]
 [89]
+Overfull \hbox (10.57239pt too wide) in paragraph at lines 31--33
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
+][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][][]B
+[]D[][][][]Shape[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 
+pph, [][]ppl[]
+
+Overfull \hbox (11.13245pt too wide) in paragraph at lines 33--35
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
+][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][][]B
+[]D[][][][]Shape[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 
+pph, [][]ppl[]
+
+Overfull \hbox (5.03285pt too wide) in paragraph at lines 35--37
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
+][]from[][][][]Double[][][][]Box[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]dou
+ble[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const[]
+[][][]Double[]
+
+Overfull \hbox (10.44244pt too wide) in paragraph at lines 45--47
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
+][]from[][][][]Grid[][][]with[][][]complexity[][] ([][]ppl[][][][]B[]D[][][][]S
+hape[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl
+[][][]const[]
+
+Overfull \hbox (7.61217pt too wide) in paragraph at lines 49--51
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
+][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity[
+][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[]
+
+Overfull \hbox (8.17223pt too wide) in paragraph at lines 51--53
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
+][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity[
+][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[]
+
+Overfull \hbox (4.00201pt too wide) in paragraph at lines 53--55
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
+][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]with[][][]comple
+xity[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (4.56207pt too wide) in paragraph at lines 55--57
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
+][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]comple
+xity[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (21.78229pt too wide) in paragraph at lines 61--63
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
+][]from[][][][]Octagonal[][][][]Shape[][][]double[][][]with[][][]complexity[][]
+ ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[]
+
+Overfull \hbox (3.65257pt too wide) in paragraph at lines 65--67
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
+][]from[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
+[][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]
+const[]
+[37
 Overfull \hbox (39.79532pt too wide) in paragraph at lines 2923--2925
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][]
 []Polyhedron[][][][]Grid[][][]from[][][]space[][][]dimension(+[]Dimension[]
@@ -7331,34 +7564,7 @@
 Overfull \hbox (21.79532pt too wide) in paragraph at lines 2953--2955
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][]
 []Polyhedron[][][][]Grid[][][]from[][][][]Grid(+[]Handle[][][]1, -[]Handle[]
-[90]
-Overfull \hbox (18.00154pt too wide) in paragraph at lines 202--204
-[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Pointset[][][][]Powerset[]
-[][][]N[]N[]C[][][][]Polyhedron[][][]tag[][] $\OMS/cmsy/m/n/10 ^^C$ [][]\OT1/pt
-m/bc/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Polyhedron[
-]
-
-Overfull \hbox (21.60114pt too wide) in paragraph at lines 226--228
-[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Pointset[][][][]Powerset[]
-[][][]C[][][][]Polyhedron[][][]iterator[][][]tag[][] $\OMS/cmsy/m/n/10 ^^C$ [][
-]\OT1/ptm/bc/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
-n[]
-
-Overfull \hbox (9.34096pt too wide) in paragraph at lines 229--231
-[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Pointset[][][][]Powerset[]
-[][][]C[][][][]Polyhedron[][][]iterator[][][]tag[][] const $\OMS/cmsy/m/n/10 ^^
-C$ [][]\OT1/ptm/bc/n/10 ppl[][][]const[][][][]Pointset[][][][]Powerset[]
-
-Overfull \hbox (0.77115pt too wide) in paragraph at lines 244--246
-[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Pointset[][][][]Powerset[]
-[][][]N[]N[]C[][][][]Polyhedron[][][]const[][][]iterator[][][]tag[][] $\OMS/cms
-y/m/n/10 ^^C$ [][]\OT1/ptm/bc/n/10 ppl[][][][]Pointset[][][][]Powerset[]
-
-Overfull \hbox (8.4811pt too wide) in paragraph at lines 247--249
-[][] \OT1/ptm/bc/n/10 type-def struct [][]ppl[][][][]Pointset[][][][]Powerset[]
-[][][]N[]N[]C[][][][]Polyhedron[][][]const[][][]iterator[][][]tag[][] const $\O
-MS/cmsy/m/n/10 ^^C$ [][]\OT1/ptm/bc/n/10 ppl[][][]const[][][][]Pointset[]
-[30]
+[90]]
 Overfull \hbox (3.79532pt too wide) in paragraph at lines 2956--2958
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][]
 []Polyhedron[][][][]Grid[][][]from[][][][]Rational[][][][]Box(+[]Handle[]
@@ -7473,7 +7679,7 @@
 Overfull \hbox (1.39532pt too wide) in paragraph at lines 3016--3018
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][]
 []Polyhedron[][][][]Grid[][][]from[][][][]Constraints[][][][]Product[][][]
-[92] [31
+[92]
 Overfull \hbox (15.2138pt too wide) in paragraph at lines 3041--3043
 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
 ron[][][][]Grid[][][]is[][][]topologically[][][]closed(+[]Handle) 
@@ -7517,7 +7723,82 @@
 Overfull \hbox (15.2138pt too wide) in paragraph at lines 3084--3086
 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
 ron[][][][]Grid[][][]relation[][][]with[][][]generator(+[]Handle,
-[93]]
+[93
+Overfull \hbox (11.66246pt too wide) in paragraph at lines 81--83
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]get[][
+][]congruences[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]double[][]
+[]t[][] ph, [][]ppl[][][]const[][][][]Congruence[]
+
+Overfull \hbox (6.1221pt too wide) in paragraph at lines 85--87
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]get[][
+][]minimized[][][]congruences[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[
+][][]double[][][]t[][] ph, [][]ppl[][][]const[]
+
+Overfull \hbox (2.7528pt too wide) in paragraph at lines 101--103
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]bounds
+[][][]from[][][]above[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]dou
+ble[][][]t[][] ph, [][]ppl[][][]const[][][][]Linear[]
+
+Overfull \hbox (3.36253pt too wide) in paragraph at lines 103--105
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]bounds
+[][][]from[][][]below[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]dou
+ble[][][]t[][] ph, [][]ppl[][][]const[][][][]Linear[]
+
+Overfull \hbox (11.12198pt too wide) in paragraph at lines 105--107
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]maximi
+ze[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]double[][][]t[][] ph, 
+[][]ppl[][][]const[][][][]Linear[][][][]Expression[]
+
+Overfull \hbox (9.46193pt too wide) in paragraph at lines 107--109
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]minimi
+ze[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]double[][][]t[][] ph, 
+[][]ppl[][][]const[][][][]Linear[][][][]Expression[]
+
+Overfull \hbox (8.62196pt too wide) in paragraph at lines 109--111
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]maximi
+ze[][][]with[][][]point[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]d
+ouble[][][]t[][] ph, [][]ppl[][][]const[][][][]Linear[]
+
+Overfull \hbox (6.96191pt too wide) in paragraph at lines 111--113
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]minimi
+ze[][][]with[][][]point[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]d
+ouble[][][]t[][] ph, [][]ppl[][][]const[][][][]Linear[]
+
+Overfull \hbox (11.51242pt too wide) in paragraph at lines 113--115
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]freque
+ncy[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]double[][][]t[][] ph,
+ [][]ppl[][][]const[][][][]Linear[][][][]Expression[]
+
+Overfull \hbox (5.29205pt too wide) in paragraph at lines 117--119
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]strict
+ly[][][]contains[][][][]B[]D[][][][]Shape[][][]double[][] ([][]ppl[][][]const[]
+[][][]B[]D[][][][]Shape[][][]double[][][]t[][] x, [][]ppl[]
+
+Overfull \hbox (3.90219pt too wide) in paragraph at lines 119--121
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]is[][]
+[]disjoint[][][]from[][][][]B[]D[][][][]Shape[][][]double[][] ([][]ppl[][][]con
+st[][][][]B[]D[][][][]Shape[][][]double[][][]t[][] x, [][]ppl[]
+
+Overfull \hbox (8.92177pt too wide) in paragraph at lines 129--131
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]add[][
+][]constraints[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]t[][] ph,
+ [][]ppl[][][]const[][][][]Constraint[][][][]System[]
+
+Overfull \hbox (1.69191pt too wide) in paragraph at lines 133--135
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]refine
+[][][]with[][][]constraint[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[][
+][]t[][] ph, [][]ppl[][][]const[][][][]Constraint[]
+
+Overfull \hbox (14.99254pt too wide) in paragraph at lines 135--137
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]refine
+[][][]with[][][]congruence[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[][
+][]t[][] ph, [][]ppl[][][]const[][][][]Congruence[]
+
+Overfull \hbox (5.5818pt too wide) in paragraph at lines 137--139
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]refine
+[][][]with[][][]constraints[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[]
+[][]t[][] ph, [][]ppl[][][]const[][][][]Constraint[]
+[38]]
 Overfull \hbox (21.2138pt too wide) in paragraph at lines 3087--3089
 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
 ron[][][][]Grid[][][]relation[][][]with[][][]congruence(+[]Handle,
@@ -7590,6 +7871,81 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
 ron[][][][]Grid[][][]unconstrain[][][]space[][][]dimensions(+[]
 [95]
+Overfull \hbox (18.88243pt too wide) in paragraph at lines 139--141
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]refine
+[][][]with[][][]congruences[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[]
+[][]t[][] ph, [][]ppl[][][]const[][][][]Congruence[]
+
+Overfull \hbox (15.842pt too wide) in paragraph at lines 141--143
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]inters
+ection[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]t[][]
+ x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]double[]
+
+Overfull \hbox (9.46228pt too wide) in paragraph at lines 145--147
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]differ
+ence[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]t[][] x
+, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]double[]
+
+Overfull \hbox (16.38219pt too wide) in paragraph at lines 147--149
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]concat
+enate[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]t[][] 
+x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]double[]
+
+Overfull \hbox (15.55199pt too wide) in paragraph at lines 149--151
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]time[]
+[][]elapse[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]t
+[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]double[]
+
+Overfull \hbox (7.5321pt too wide) in paragraph at lines 157--159
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]uncons
+train[][][]space[][][]dimension[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]doub
+le[][][]t[][] ph, [][]ppl[][][]dimension[]
+
+Overfull \hbox (11.422pt too wide) in paragraph at lines 159--161
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]uncons
+train[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]dou
+ble[][][]t[][] ph, [][]ppl[][][]dimension[]
+
+Overfull \hbox (5.26245pt too wide) in paragraph at lines 163--165
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]affine
+[][][]preimage[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]t[][] ph,
+ [][]ppl[][][]dimension[][][]type[][] var, [][]ppl[]
+
+Overfull \hbox (4.2718pt too wide) in paragraph at lines 167--169
+\OT1/ptm/bc/n/10 type[][] var, [][]ppl[][][]const[][][][]Linear[][][][]Expressi
+on[][][]t[][] lb, [][]ppl[][][]const[][][][]Linear[][][][]Expression[][][]t[][]
+ ub, [][]ppl[][][]const[][][][]Coefficient[]
+
+Overfull \hbox (2.81215pt too wide) in paragraph at lines 171--173
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]genera
+lized[][][]affine[][][]preimage[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]doub
+le[][][]t[][] ph, [][]ppl[][][]dimension[]
+
+Overfull \hbox (0.57211pt too wide) in paragraph at lines 173--175
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]genera
+lized[][][]affine[][][]image[][][]lhs[][][]rhs[][] ([][]ppl[][][][]B[]D[][][][]
+Shape[][][]double[][][]t[][] ph, [][]ppl[][][]const[]
+
+Overfull \hbox (12.92154pt too wide) in paragraph at lines 175--177
+\OT1/ptm/bc/n/10 const[][][][]Linear[][][][]Expression[][][]t[][] lhs, enum [][
+]ppl[][][]enum[][][][]Constraint[][][][]Type[][] rel-sym, [][]ppl[][][]const[][
+][][]Linear[][][][]Expression[]
+
+Overfull \hbox (27.50215pt too wide) in paragraph at lines 177--179
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]add[][
+][]space[][][]dimensions[][][]and[][][]embed[][] ([][]ppl[][][][]B[]D[][][][]Sh
+ape[][][]double[][][]t[][] ph, [][]ppl[][][]dimension[]
+
+Overfull \hbox (28.612pt too wide) in paragraph at lines 179--181
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]add[][
+][]space[][][]dimensions[][][]and[][][]project[][] ([][]ppl[][][][]B[]D[][][][]
+Shape[][][]double[][][]t[][] ph, [][]ppl[][][]dimension[]
+
+Overfull \hbox (23.6022pt too wide) in paragraph at lines 183--185
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]remove
+[][][]higher[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
+[][]double[][][]t[][] ph, [][]ppl[][][]dimension[]
+[39
 Overfull \hbox (9.2138pt too wide) in paragraph at lines 3166--3168
 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
 ron[][][][]Grid[][][]affine[][][]image(+[]Handle, +[]P[]P[]L[][][][]Var,
@@ -7633,7 +7989,7 @@
 Overfull \hbox (12.19531pt too wide) in paragraph at lines 3200--3202
 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
 ron[][][][]Grid[][][]difference[][][]assign(+[]Handle[][][]1, +[]
-[96]
+[96]]
 Overfull \hbox (15.79532pt too wide) in paragraph at lines 3203--3205
 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
 ron[][][][]Grid[][][]time[][][]elapse[][][]assign(+[]Handle[][][]1, +[]
@@ -7694,20 +8050,6 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]C[][][][]
 Polyhedron[][][]from[][][]congruences(+[]Congruence[][][][]System,
 [98]
-Underfull \hbox (badness 10000) detected at line 351
-[][][]
-
-Overfull \hbox (27.05392pt too wide) in paragraph at lines 361--362
- []\OT1/ptm/b/n/10 ppl[][][]io[][][]variable[][][]output[][][]function[][][]typ
-e[] \OT1/pcr/m/n/8 typedef const char$\OMS/cmsy/m/n/8 ^^C$ \OT1/pcr/m/n/8 ppl[]
-[][]io[][][]variable[][][]output[][][]function[][][]type([][]ppl[]
-
-Package longtable Warning: Column widths have changed
-(longtable)                in table 4 on input line 401.
-
-
-Overfull \vbox (4.91087pt too high) has occurred while \output is active
-[32]
 Underfull \hbox (badness 10000) in paragraph at lines 3287--3288
 
 
@@ -7747,6 +8089,48 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]bounds[][][]from[][][]below(+[]Handle, +[]Lin[][][][]Expr) 
 [99]
+Overfull \hbox (19.30246pt too wide) in paragraph at lines 193--195
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]drop[]
+[][]some[][][]non[][][]integer[][][]points[][][]2[][] ([][]ppl[][][][]B[]D[][][
+][]Shape[][][]double[][][]t[][] ph, [][]ppl[][][]dimension[]
+
+Overfull \hbox (1.86237pt too wide) in paragraph at lines 201--203
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][][]H79[
+][][]widening[][][]assign[][][]with[][][]tokens[][] ([][]ppl[][][][]B[]D[][][][
+]Shape[][][]double[][][]t[][] x, [][]ppl[][][]const[]
+
+Overfull \hbox (6.40245pt too wide) in paragraph at lines 209--211
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]wideni
+ng[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]t[][] x, 
+[][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]double[]
+
+Overfull \hbox (15.58176pt too wide) in paragraph at lines 211--213
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]limite
+d[][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign[][][]with[][][]tokens[][] 
+([][]ppl[][][][]B[]D[][][][]Shape[][][]double[]
+
+Overfull \hbox (4.3319pt too wide) in paragraph at lines 221--223
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]limite
+d[][][][]C[]C76[][][]extrapolation[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]
+Shape[][][]double[][][]t[][] x, [][]ppl[][][]const[]
+
+Overfull \hbox (6.15248pt too wide) in paragraph at lines 227--229
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][][]C[]C
+76[][][]narrowing[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double
+[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (26.84183pt too wide) in paragraph at lines 233--235
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
+][]recycle[][][][]Constraint[][][][]System[][] ([][]ppl[][][][]B[]D[][][][]Shap
+e[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][
+][][]Constraint[]
+
+Overfull \hbox (23.46225pt too wide) in paragraph at lines 237--239
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
+][]recycle[][][][]Generator[][][][]System[][] ([][]ppl[][][][]B[]D[][][][]Shape
+[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][]
+[][]Generator[]
+[40
 Overfull \hbox (33.79532pt too wide) in paragraph at lines 3342--3344
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]contains[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedron(+[]
@@ -7794,7 +8178,7 @@
 Overfull \hbox (4.9953pt too wide) in paragraph at lines 3385--3387
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]maximize(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[]
-[100]
+[100]]
 Overfull \hbox (4.9953pt too wide) in paragraph at lines 3390--3392
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]minimize(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[]
@@ -7864,6 +8248,36 @@
 sl/10 Handle \OT1/ptm/m/it/10 as-sign-ing the affine ex-pres-sion for \OT1/pcr/
 m/sl/10 Lin[][][][]Expr/Coeff
 [102]
+Overfull \hbox (1.78282pt too wide) in paragraph at lines 243--245
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]add[][
+][]recycled[][][]congruences[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[
+][][]t[][] ph, [][]ppl[][][][]Congruence[]
+
+Overfull \hbox (5.03233pt too wide) in paragraph at lines 249--251
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[
+][][][]M[]S[][][][]B[]D[][][][]Shape[][][]double[][] ([][]ppl[][][]const[][][][
+]B[]D[][][][]Shape[][][]double[][][]t[][] pset, [][]ppl[]
+
+Overfull \hbox (2.81236pt too wide) in paragraph at lines 251--253
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[
+][][][]P[]R[][][][]B[]D[][][][]Shape[][][]double[][] ([][]ppl[][][]const[][][][
+]B[]D[][][][]Shape[][][]double[][][]t[][] pset, [][]ppl[]
+
+Overfull \hbox (4.48201pt too wide) in paragraph at lines 253--255
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions
+[][][][]M[]S[][][][]B[]D[][][][]Shape[][][]double[][] ([][]ppl[][][]const[][][]
+[]B[]D[][][][]Shape[][][]double[][][]t[][] pset, [][]ppl[]
+
+Overfull \hbox (2.26204pt too wide) in paragraph at lines 255--257
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions
+[][][][]P[]R[][][][]B[]D[][][][]Shape[][][]double[][] ([][]ppl[][][]const[][][]
+[]B[]D[][][][]Shape[][][]double[][][]t[][] pset, [][]ppl[]
+
+Overfull \hbox (20.41179pt too wide) in paragraph at lines 295--296
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][]
+[]Shape[][][]double[][][]from[][][]space[][][]dimension
+[41
 Overfull \hbox (8.5953pt too wide) in paragraph at lines 3473--3475
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]affine[][][]preimage(+[]Handle, +[]P[]P[]L[][][][]Var, +[]
@@ -7903,7 +8317,7 @@
 Overfull \hbox (8.5953pt too wide) in paragraph at lines 3504--3506
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]difference[][][]assign(+[]Handle[][][]1, +[]Handle[]
-[103]
+[103]]
 Overfull \hbox (12.19531pt too wide) in paragraph at lines 3507--3509
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]time[][][]elapse[][][]assign(+[]Handle[][][]1, +[]Handle[]
@@ -7978,6 +8392,41 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]iterator[][][]equals[][][]iterator(+[]Iterator[][][]
 [105]
+Overfull \hbox (4.67235pt too wide) in paragraph at lines 301--302
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][][]C[][][][]Polyhedron()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][
+][]Shape[][][]double[][][]from[][][][]C[][][][]Polyhedron ( 
+
+Overfull \hbox (19.11229pt too wide) in paragraph at lines 307--308
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][][]N[]N[]C[][][][]Polyhedron()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]
+D[][][][]Shape[][][]double[][][]from[][][][]N[]N[]C[][][][]Polyhedron
+
+Overfull \hbox (1.72226pt too wide) in paragraph at lines 319--320
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][][]Rational[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][
+][]Shape[][][]double[][][]from[][][][]Rational[][][][]Box ( 
+
+Overfull \hbox (14.10329pt too wide) in paragraph at lines 325--326
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]ne
+w[][][][]B[]D[][][][]Shape[][][]double[][][]from[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (15.22328pt too wide) in paragraph at lines 331--332
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]ne
+w[][][][]B[]D[][][][]Shape[][][]double[][][]from[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (4.74298pt too wide) in paragraph at lines 337--338
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][][]Octagonal[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][
+][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[]
+
+Overfull \hbox (5.86298pt too wide) in paragraph at lines 343--344
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][][]Octagonal[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][
+][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[]
+[42]
 Overfull \hbox (29.6138pt too wide) in paragraph at lines 3588--3590
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]iterator[][][]get[][][]disjunct(+[]Iterator, -[]Handle) 
@@ -8025,6 +8474,46 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]bounds[][][]from[][][]above(+[]Handle, +[]Lin[][][][]Expr) 
 [107]
+Overfull \hbox (1.07347pt too wide) in paragraph at lines 355--356
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][][]B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][
+]B[]D[][][][]Shape[][][]double[][][]from[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (37.7932pt too wide) in paragraph at lines 361--362
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][][]Octagonal[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][]new[]
+[][][]B[]D[][][][]Shape[][][]double[][][]from[][][][]Octagonal[]
+
+Overfull \hbox (18.24309pt too wide) in paragraph at lines 367--368
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][][]C[][][][]Polyhedron[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl
+[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[]
+
+Overfull \hbox (10.60301pt too wide) in paragraph at lines 373--374
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][][]N[]N[]C[][][][]Polyhedron[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 i
+nt ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[]
+
+Overfull \hbox (0.9931pt too wide) in paragraph at lines 379--380
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][][]Grid[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][]
+[]B[]D[][][][]Shape[][][]double[][][]from[][][][]Grid[]
+
+Overfull \hbox (15.293pt too wide) in paragraph at lines 385--386
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][][]Rational[][][][]Box[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl
+[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[]
+
+Overfull \hbox (25.41252pt too wide) in paragraph at lines 391--392
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity()[] \OT1
+/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[]
+
+Overfull \hbox (26.53252pt too wide) in paragraph at lines 397--398
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity()[] \OT1
+/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[]
+[43]
 Overfull \hbox (15.2138pt too wide) in paragraph at lines 3689--3691
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]bounds[][][]from[][][]below(+[]Handle, +[]Lin[][][][]Expr) 
@@ -8099,29 +8588,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]total[][][]memory[][][]in[][][]bytes(+[]Handle, ?Number) 
 [109]
-
-Package longtable Warning: Column widths have changed
-(longtable)                in table 5 on input line 429.
-
-
-Package longtable Warning: Column widths have changed
-(longtable)                in table 6 on input line 453.
-
-
-Package longtable Warning: Column widths have changed
-(longtable)                in table 7 on input line 485.
-
-
-Overfull \hbox (19.9918pt too wide) in paragraph at lines 490--491
- []\OT1/ptm/b/n/10 ppl[][][]enum[][][][]Bounded[][][][]Integer[][][][]Type[][][
-][]Representation[] \OT1/pcr/m/n/8 enum [][]ppl[][][]enum[][][][]Bounded[][][][
-]Integer[][][][]Type[][][][]Representation[][] 
-
-Package longtable Warning: Column widths have changed
-(longtable)                in table 8 on input line 505.
-
-
-Underfull \vbox (badness 3746) has occurred while \output is active [33]
 Overfull \hbox (14.0138pt too wide) in paragraph at lines 3777--3779
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]add[][][]constraint(+[]Handle, +[]Constraint) 
@@ -8166,6 +8632,41 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]unconstrain[][][]space[][][]dimensions(+[]Handle,
 [110]
+Overfull \hbox (23.73222pt too wide) in paragraph at lines 403--404
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity()[]
+ \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (0.8522pt too wide) in paragraph at lines 409--410
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity()[]
+ \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][]
+
+Overfull \hbox (9.18303pt too wide) in paragraph at lines 415--416
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][][]Double[][][][]Box[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[]
+[][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[]
+
+Overfull \hbox (12.3827pt too wide) in paragraph at lines 421--422
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][][]B[]D[][][][]Shape[][][]double[][][]with[][][]complexity()[] \OT1/pcr/m/n
+/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[]
+
+Overfull \hbox (10.70241pt too wide) in paragraph at lines 427--428
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][][]Octagonal[][][][]Shape[][][]double[][][]with[][][]complexity()[] \OT1/pc
+r/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (16.74335pt too wide) in paragraph at lines 433--434
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][][]Constraint[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D
+[][][][]Shape[][][]double[][][]from[][][][]Constraint[]
+
+Overfull \hbox (22.29341pt too wide) in paragraph at lines 439--440
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][][]Congruence[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D
+[][][][]Shape[][][]double[][][]from[][][][]Congruence[]
+[44]
 Overfull \hbox (2.5953pt too wide) in paragraph at lines 3820--3822
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]affine[][][]image(+[]Handle, +[]P[]P[]L[][][][]Var, +[]
@@ -8250,20 +8751,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]concatenate[][][]assign(+[]Handle[][][]1, +[]Handle[]
 [112]
-Underfull \hbox (badness 10000) detected at line 534
-[][][]
-
-Package longtable Warning: Column widths have changed
-(longtable)                in table 9 on input line 534.
-
-
-Package longtable Warning: Column widths have changed
-(longtable)                in table 10 on input line 558.
-
-
-Underfull \hbox (badness 10000) detected at line 559
-[][][]
-) [34
 Overfull \hbox (24.81381pt too wide) in paragraph at lines 3895--3897
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]add[][][]space[][][]dimensions[][][]and[][][]embed(+[]Handle,
@@ -8304,8 +8791,37 @@
 Overfull \hbox (2.0138pt too wide) in paragraph at lines 3923--3925
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]begin[][][]iterator(+[]Handle, -[]Iterator) 
-[113]]
-(./interfaceppl__Artificial__Parameter__Sequence__const__iterator__tag.tex
+[113]
+Overfull \hbox (10.26341pt too wide) in paragraph at lines 445--446
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
+][][][]Generator[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[
+][][][]Shape[][][]double[][][]from[][][][]Generator[]
+
+Overfull \hbox (11.51178pt too wide) in paragraph at lines 463--464
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]relation[][][]
+with[][][][]Constraint()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][
+]double[][][]relation[][][]with[][][][]Constraint
+
+Overfull \hbox (5.03185pt too wide) in paragraph at lines 469--470
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]relation[][][]
+with[][][][]Generator()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]
+double[][][]relation[][][]with[][][][]Generator
+
+Overfull \hbox (17.06184pt too wide) in paragraph at lines 475--476
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]relation[][][]
+with[][][][]Congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][
+]double[][][]relation[][][]with[][][][]Congruence
+
+Overfull \hbox (23.1515pt too wide) in paragraph at lines 493--494
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]get[][][]minim
+ized[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]
+double[][][]get[][][]minimized[][][]constraints
+
+Overfull \hbox (28.70157pt too wide) in paragraph at lines 499--500
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]get[][][]minim
+ized[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]
+double[][][]get[][][]minimized[][][]congruences
+[45]
 Overfull \hbox (8.5953pt too wide) in paragraph at lines 3929--3931
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]iterator[][][]equals[][][]iterator(+[]Iterator[]
@@ -8322,31 +8838,6 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][]space[][
 ][]dimension(+[]Dimension[][][][]Type, +[]Universe[][][]or[][][][]Empty,
 [114]
-Overfull \hbox (7.82706pt too wide) in paragraph at lines 22--24
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]Artificial[][][][]Paramete
-r[][][][]Sequence[][][]const[][][]iterator[][][]from[][][][]Artificial[][][][]P
-arameter[][][][]Sequence[]
-
-Overfull \hbox (23.68665pt too wide) in paragraph at lines 22--24
-[][]\OT1/ptm/bc/n/10 const[][][]iterator[][] ([][]ppl[][][][]Artificial[][][][]
-Parameter[][][][]Sequence[][][]const[][][]iterator[][][]t[][] dst, [][]ppl[][][
-]const[][][][]Artificial[][][][]Parameter[]
-
-Overfull \hbox (26.38684pt too wide) in paragraph at lines 25--27
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]delete[][][][]Artificial[][][][]Paramete
-r[][][][]Sequence[][][]const[][][]iterator[][] ([][]ppl[][][]const[][][][]Artif
-icial[][][][]Parameter[][][][]Sequence[]
-
-Overfull \hbox (7.21704pt too wide) in paragraph at lines 32--34
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Artificial[][][][]Parameter[][][][]Seq
-uence[][][]const[][][]iterator[][][]dereference[][] ([][]ppl[][][]const[][][][]
-Artificial[][][][]Parameter[]
-
-Overfull \hbox (17.78696pt too wide) in paragraph at lines 35--37
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Artificial[][][][]Parameter[][][][]Seq
-uence[][][]const[][][]iterator[][][]increment[][] ([][]ppl[][][][]Artificial[][
-][][]Parameter[][][][]Sequence[]
-)
 Underfull \hbox (badness 10000) in paragraph at lines 3990--3991
 
 
@@ -8363,12 +8854,22 @@
 Overfull \hbox (15.2138pt too wide) in paragraph at lines 4029--4031
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]C[][][
 ][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[]Complexity,
-[115 (./interfaceppl__Artificial__Parameter__tag.tex]
-Overfull \hbox (4.9309pt too wide) in paragraph at lines 15--17
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Artificial[][][][]Parameter[][][]get[]
-[][][]Linear[][][][]Expression[][] ([][]ppl[][][]const[][][][]Artificial[][][][
-]Parameter[][][]t[][] ap, [][]ppl[][][][]Linear[]
-[35]
+[115]
+Overfull \hbox (1.1418pt too wide) in paragraph at lines 523--524
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]contains[][][]
+integer[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]dou
+ble[][][]contains[][][]integer[][][]point ( 
+
+Overfull \hbox (5.39171pt too wide) in paragraph at lines 529--530
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]is[][][]topolo
+gically[][][]closed()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]do
+uble[][][]is[][][]topologically[][][]closed ( 
+
+Overfull \hbox (3.42314pt too wide) in paragraph at lines 541--542
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]topological[][
+][]closure[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][
+]double[][][]topological[][][]closure[]
+[46]
 Overfull \hbox (27.2138pt too wide) in paragraph at lines 4032--4034
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]N[]N[]
 C[][][][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[]Complexity,
@@ -8411,11 +8912,6 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Octago
 nal[][][][]Shape[][][]double[][][]with[][][]complexity(+[]Handle, +[]
 [116]
-Overfull \hbox (0.85934pt too wide) in paragraph at lines 18--20
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Artificial[][][][]Parameter[][][]coeff
-icient[][] ([][]ppl[][][]const[][][][]Artificial[][][][]Parameter[][][]t[][] ap
-, [][]ppl[][][]dimension[][][]type[][] var,
-) (./interfaceppl__BD__Shape__double__tag.tex
 Overfull \hbox (13.3953pt too wide) in paragraph at lines 4127--4129
 []\OT1/pcr/m/n/10 ppl[][][][]Double[][][][]Box[][][]relation[][][]with[][][]con
 straint(+[]Handle, +[]Constraint, ?Relation[]
@@ -8466,37 +8962,27 @@
 Overfull \hbox (8.5953pt too wide) in paragraph at lines 4173--4175
 []\OT1/pcr/m/n/10 ppl[][][][]Double[][][][]Box[][][]minimize[][][]with[][][]poi
 nt(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[]
-[118]
-Overfull \hbox (10.32233pt too wide) in paragraph at lines 17--19
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
-][]from[][][]space[][][]dimension[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]do
-uble[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]dimens
-ion[]
-
-Overfull \hbox (28.3727pt too wide) in paragraph at lines 19--21
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
-][]from[][][][]C[][][][]Polyhedron[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]d
-ouble[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const
-[][][][]Polyhedron[]
+[118] [119]
+Overfull \hbox (19.51176pt too wide) in paragraph at lines 589--590
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]contains[][][]
+[]B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]S
+hape[][][]double[][][]contains[][][][]B[]D[][][][]Shape[][][]double
 
-Overfull \hbox (13.9322pt too wide) in paragraph at lines 25--27
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
-][]from[][][][]Rational[][][][]Box[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]d
-ouble[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const
-[][][][]Rational[]
+Overfull \hbox (32.32272pt too wide) in paragraph at lines 595--596
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]strictly[][][]
+contains[][][][]B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][][
+]B[]D[][][][]Shape[][][]double[][][]strictly[][][]contains[]
 
-Overfull \hbox (8.07243pt too wide) in paragraph at lines 27--29
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
-][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][][]B[]D[]
-[][][]Shape[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, 
-[][]ppl[][][]const[]
+Overfull \hbox (1.39285pt too wide) in paragraph at lines 601--602
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]is[][][]disjoi
+nt[][][]from[][][][]B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][
+][][]B[]D[][][][]Shape[][][]double[][][]is[][][]disjoint[]
 
-Overfull \hbox (8.63249pt too wide) in paragraph at lines 29--31
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
-][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][][]B[]D[]
-[][][]Shape[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, 
-[][]ppl[][][]const[]
-[36] [119]
+Overfull \hbox (1.5818pt too wide) in paragraph at lines 607--608
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]equals[][][][]
+B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sha
+pe[][][]double[][][]equals[][][][]B[]D[][][][]Shape[][][]double
+[47]
 Overfull \hbox (1.38072pt too wide) in paragraph at lines 4237--4239
 \OT1/ptm/m/it/10 Transforms the dou-ble box ref-er-enced by \OT1/pcr/m/sl/10 Ha
 ndle \OT1/ptm/m/it/10 sub-sti-tut-ing the affine ex-pres-sion for \OT1/pcr/m/sl
@@ -8551,6 +9037,21 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Double[][][][]Box[][][]limited[][][][]C[]C76[][][]
 extrapolation[][][]assign[][][]with[][][]tokens(+[]Handle[][][]1, +[]
 [121]
+Overfull \hbox (5.39195pt too wide) in paragraph at lines 649--650
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]refine[][][]wi
+th[][][]congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]dou
+ble[][][]refine[][][]with[][][]congruence ( 
+
+Overfull \hbox (8.53178pt too wide) in paragraph at lines 655--656
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]refine[][][]wi
+th[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]do
+uble[][][]refine[][][]with[][][]constraints ( 
+
+Overfull \hbox (4.48184pt too wide) in paragraph at lines 661--662
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]refine[][][]wi
+th[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]do
+uble[][][]refine[][][]with[][][]congruences
+[48]
 Overfull \hbox (12.19531pt too wide) in paragraph at lines 4305--4307
 []\OT1/pcr/m/n/10 ppl[][][][]Double[][][][]Box[][][]limited[][][][]C[]C76[][][]
 extrapolation[][][]assign(+[]Handle[][][]1, +[]Handle[][][]2, +[]
@@ -8568,61 +9069,6 @@
 ions(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Vars, +[]P[]P[]L[][][][]V
 ar) 
 [122]
-Overfull \hbox (10.57239pt too wide) in paragraph at lines 31--33
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
-][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][][]B
-[]D[][][][]Shape[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 
-pph, [][]ppl[]
-
-Overfull \hbox (11.13245pt too wide) in paragraph at lines 33--35
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
-][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][][]B
-[]D[][][][]Shape[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 
-pph, [][]ppl[]
-
-Overfull \hbox (5.03285pt too wide) in paragraph at lines 35--37
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
-][]from[][][][]Double[][][][]Box[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]dou
-ble[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const[]
-[][][]Double[]
-
-Overfull \hbox (10.44244pt too wide) in paragraph at lines 45--47
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
-][]from[][][][]Grid[][][]with[][][]complexity[][] ([][]ppl[][][][]B[]D[][][][]S
-hape[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl
-[][][]const[]
-
-Overfull \hbox (7.61217pt too wide) in paragraph at lines 49--51
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
-][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity[
-][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[]
-
-Overfull \hbox (8.17223pt too wide) in paragraph at lines 51--53
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
-][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity[
-][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[]
-
-Overfull \hbox (4.00201pt too wide) in paragraph at lines 53--55
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
-][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]with[][][]comple
-xity[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
-
-Overfull \hbox (4.56207pt too wide) in paragraph at lines 55--57
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
-][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]comple
-xity[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
-
-Overfull \hbox (21.78229pt too wide) in paragraph at lines 61--63
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
-][]from[][][][]Octagonal[][][][]Shape[][][]double[][][]with[][][]complexity[][]
- ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[]
-
-Overfull \hbox (3.65257pt too wide) in paragraph at lines 65--67
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
-][]from[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
-[][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]
-const[]
-[37]
 Overfull \hbox (6.19531pt too wide) in paragraph at lines 4361--4363
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[]
 [][]space[][][]dimension(+[]Dimension[][][][]Type, +[]Universe[]
@@ -8630,6 +9076,26 @@
 Underfull \hbox (badness 10000) in paragraph at lines 4382--4383
 
 [123]
+Overfull \hbox (7.98315pt too wide) in paragraph at lines 697--698
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]upper[][][]bou
+nd[][][]assign[][][]if[][][]exact()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][
+]Shape[][][]double[][][]upper[][][]bound[][][]assign[]
+
+Overfull \hbox (30.80284pt too wide) in paragraph at lines 703--704
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]simplify[][][]
+using[][][]context[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh
+ape[][][]double[][][]simplify[][][]using[][][]context[]
+
+Overfull \hbox (9.01286pt too wide) in paragraph at lines 715--716
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]unconstrain[][
+][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][]
+[]double[][][]unconstrain[][][]space[]
+
+Overfull \hbox (12.90276pt too wide) in paragraph at lines 721--722
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]unconstrain[][
+][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][
+][]double[][][]unconstrain[][][]space[]
+[49
 Overfull \hbox (13.39532pt too wide) in paragraph at lines 4406--4408
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[]
 [][][]Octagonal[][][][]Shape[][][]mpz[][][]class(+[]Handle[][][]1, -[]Handle[]
@@ -8686,7 +9152,7 @@
 Overfull \hbox (4.99533pt too wide) in paragraph at lines 4442--4444
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[]
 [][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity(+[]
-[124]
+[124]]
 Overfull \hbox (30.81381pt too wide) in paragraph at lines 4445--4447
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[]
 [][][]Double[][][][]Box[][][]with[][][]complexity(+[]Handle, +[]Complexity,
@@ -8707,81 +9173,21 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]is[][][]disjoin
 t[][][]from[][][][]B[]D[][][][]Shape[][][]double(+[]Handle[][][]1, +[]Handle[]
 [125]
-Overfull \hbox (11.66246pt too wide) in paragraph at lines 81--83
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]get[][
-][]congruences[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]double[][]
-[]t[][] ph, [][]ppl[][][]const[][][][]Congruence[]
-
-Overfull \hbox (6.1221pt too wide) in paragraph at lines 85--87
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]get[][
-][]minimized[][][]congruences[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[
-][][]double[][][]t[][] ph, [][]ppl[][][]const[]
-
-Overfull \hbox (2.7528pt too wide) in paragraph at lines 101--103
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]bounds
-[][][]from[][][]above[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]dou
-ble[][][]t[][] ph, [][]ppl[][][]const[][][][]Linear[]
-
-Overfull \hbox (3.36253pt too wide) in paragraph at lines 103--105
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]bounds
-[][][]from[][][]below[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]dou
-ble[][][]t[][] ph, [][]ppl[][][]const[][][][]Linear[]
-
-Overfull \hbox (11.12198pt too wide) in paragraph at lines 105--107
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]maximi
-ze[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]double[][][]t[][] ph, 
-[][]ppl[][][]const[][][][]Linear[][][][]Expression[]
-
-Overfull \hbox (9.46193pt too wide) in paragraph at lines 107--109
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]minimi
-ze[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]double[][][]t[][] ph, 
-[][]ppl[][][]const[][][][]Linear[][][][]Expression[]
-
-Overfull \hbox (8.62196pt too wide) in paragraph at lines 109--111
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]maximi
-ze[][][]with[][][]point[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]d
-ouble[][][]t[][] ph, [][]ppl[][][]const[][][][]Linear[]
-
-Overfull \hbox (6.96191pt too wide) in paragraph at lines 111--113
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]minimi
-ze[][][]with[][][]point[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]d
-ouble[][][]t[][] ph, [][]ppl[][][]const[][][][]Linear[]
-
-Overfull \hbox (11.51242pt too wide) in paragraph at lines 113--115
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]freque
-ncy[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]double[][][]t[][] ph,
- [][]ppl[][][]const[][][][]Linear[][][][]Expression[]
-
-Overfull \hbox (5.29205pt too wide) in paragraph at lines 117--119
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]strict
-ly[][][]contains[][][][]B[]D[][][][]Shape[][][]double[][] ([][]ppl[][][]const[]
-[][][]B[]D[][][][]Shape[][][]double[][][]t[][] x, [][]ppl[]
-
-Overfull \hbox (3.90219pt too wide) in paragraph at lines 119--121
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]is[][]
-[]disjoint[][][]from[][][][]B[]D[][][][]Shape[][][]double[][] ([][]ppl[][][]con
-st[][][][]B[]D[][][][]Shape[][][]double[][][]t[][] x, [][]ppl[]
-
-Overfull \hbox (8.92177pt too wide) in paragraph at lines 129--131
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]add[][
-][]constraints[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]t[][] ph,
- [][]ppl[][][]const[][][][]Constraint[][][][]System[]
-
-Overfull \hbox (1.69191pt too wide) in paragraph at lines 133--135
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]refine
-[][][]with[][][]constraint[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[][
-][]t[][] ph, [][]ppl[][][]const[][][][]Constraint[]
+Overfull \hbox (9.50198pt too wide) in paragraph at lines 745--746
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]bounded[][][]a
+ffine[][][]preimage()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]do
+uble[][][]bounded[][][]affine[][][]preimage
 
-Overfull \hbox (14.99254pt too wide) in paragraph at lines 135--137
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]refine
-[][][]with[][][]congruence[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[][
-][]t[][] ph, [][]ppl[][][]const[][][][]Congruence[]
+Overfull \hbox (11.68184pt too wide) in paragraph at lines 751--752
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]generalized[][
+][]affine[][][]image()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]d
+ouble[][][]generalized[][][]affine[][][]image
 
-Overfull \hbox (5.5818pt too wide) in paragraph at lines 137--139
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]refine
-[][][]with[][][]constraints[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[]
-[][]t[][] ph, [][]ppl[][][]const[][][][]Constraint[]
-[38
+Overfull \hbox (8.04321pt too wide) in paragraph at lines 757--758
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]generalized[][
+][]affine[][][]preimage()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][]
+[]double[][][]generalized[][][]affine[]
+[50
 Overfull \hbox (40.9953pt too wide) in paragraph at lines 4519--4521
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]relation[][][]w
 ith[][][]constraint(+[]Handle, +[]Constraint, ?Relation[]
@@ -8842,6 +9248,41 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]refine[][][]wit
 h[][][]constraints( +[]Handle, +[]Constraint[][][][]System) 
 [127]
+Overfull \hbox (27.10283pt too wide) in paragraph at lines 763--764
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]generalized[][
+][]affine[][][]image[][][]lhs[][][]rhs()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[]
+[][][]Shape[][][]double[][][]generalized[][][]affine[]
+
+Overfull \hbox (9.6827pt too wide) in paragraph at lines 769--770
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]generalized[][
+][]affine[][][]preimage[][][]lhs[][][]rhs()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]
+D[][][][]Shape[][][]double[][][]generalized[]
+
+Overfull \hbox (42.03287pt too wide) in paragraph at lines 775--776
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]add[][][]space
+[][][]dimensions[][][]and[][][]embed()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][]
+[][]Shape[][][]double[][][]add[][][]space[][][]dimensions[]
+
+Overfull \hbox (44.0629pt too wide) in paragraph at lines 781--782
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]add[][][]space
+[][][]dimensions[][][]and[][][]project()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[]
+[][][]Shape[][][]double[][][]add[][][]space[][][]dimensions[]
+
+Overfull \hbox (10.95177pt too wide) in paragraph at lines 787--788
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]remove[][][]sp
+ace[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]do
+uble[][][]remove[][][]space[][][]dimensions
+
+Overfull \hbox (5.2329pt too wide) in paragraph at lines 793--794
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]remove[][][]hi
+gher[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]S
+hape[][][]double[][][]remove[][][]higher[]
+
+Overfull \hbox (2.11176pt too wide) in paragraph at lines 799--800
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]expand[][][]sp
+ace[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]dou
+ble[][][]expand[][][]space[][][]dimension
+[51
 Overfull \hbox (11.6138pt too wide) in paragraph at lines 4600--4602
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]refine[][][]wit
 h[][][]congruences( +[]Handle, +[]Congruence[][][][]System) 
@@ -8877,7 +9318,7 @@
 Overfull \hbox (21.79532pt too wide) in paragraph at lines 4637--4639
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]generalized[][]
 []affine[][][]preimage[][][]lhs[][][]rhs(+[]Handle, +[]Lin[][][][]Expr[]
-[128]
+[128]]
 Overfull \hbox (69.2138pt too wide) in paragraph at lines 4640--4642
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]wrap[][][]assig
 n(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[]Representa
@@ -8895,81 +9336,36 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][][]B[]H[]M[]Z05[
 ][][]widening[][][]assign[][][]with[][][]tokens(+[]Handle[][][]1, +[]Handle[]
 [129]
-Overfull \hbox (18.88243pt too wide) in paragraph at lines 139--141
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]refine
-[][][]with[][][]congruences[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[]
-[][]t[][] ph, [][]ppl[][][]const[][][][]Congruence[]
-
-Overfull \hbox (15.842pt too wide) in paragraph at lines 141--143
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]inters
-ection[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]t[][]
- x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]double[]
-
-Overfull \hbox (9.46228pt too wide) in paragraph at lines 145--147
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]differ
-ence[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]t[][] x
-, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]double[]
-
-Overfull \hbox (16.38219pt too wide) in paragraph at lines 147--149
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]concat
-enate[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]t[][] 
-x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]double[]
-
-Overfull \hbox (15.55199pt too wide) in paragraph at lines 149--151
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]time[]
-[][]elapse[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]t
-[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]double[]
-
-Overfull \hbox (7.5321pt too wide) in paragraph at lines 157--159
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]uncons
-train[][][]space[][][]dimension[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]doub
-le[][][]t[][] ph, [][]ppl[][][]dimension[]
-
-Overfull \hbox (11.422pt too wide) in paragraph at lines 159--161
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]uncons
-train[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]dou
-ble[][][]t[][] ph, [][]ppl[][][]dimension[]
-
-Overfull \hbox (5.26245pt too wide) in paragraph at lines 163--165
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]affine
-[][][]preimage[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]t[][] ph,
- [][]ppl[][][]dimension[][][]type[][] var, [][]ppl[]
-
-Overfull \hbox (4.2718pt too wide) in paragraph at lines 167--169
-\OT1/ptm/bc/n/10 type[][] var, [][]ppl[][][]const[][][][]Linear[][][][]Expressi
-on[][][]t[][] lb, [][]ppl[][][]const[][][][]Linear[][][][]Expression[][][]t[][]
- ub, [][]ppl[][][]const[][][][]Coefficient[]
-
-Overfull \hbox (2.81215pt too wide) in paragraph at lines 171--173
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]genera
-lized[][][]affine[][][]preimage[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]doub
-le[][][]t[][] ph, [][]ppl[][][]dimension[]
+Overfull \hbox (27.4932pt too wide) in paragraph at lines 817--818
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]drop[][][]some
+[][][]non[][][]integer[][][]points()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][]
+[]Shape[][][]double[][][]drop[][][]some[][][]non[][][]integer[]
 
-Overfull \hbox (0.57211pt too wide) in paragraph at lines 173--175
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]genera
-lized[][][]affine[][][]image[][][]lhs[][][]rhs[][] ([][]ppl[][][][]B[]D[][][][]
-Shape[][][]double[][][]t[][] ph, [][]ppl[][][]const[]
+Overfull \hbox (2.49318pt too wide) in paragraph at lines 823--824
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]drop[][][]some
+[][][]non[][][]integer[][][]points[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]
+D[][][][]Shape[][][]double[][][]drop[][][]some[][][]non[][][]
 
-Overfull \hbox (12.92154pt too wide) in paragraph at lines 175--177
-\OT1/ptm/bc/n/10 const[][][][]Linear[][][][]Expression[][][]t[][] lhs, enum [][
-]ppl[][][]enum[][][][]Constraint[][][][]Type[][] rel-sym, [][]ppl[][][]const[][
-][][]Linear[][][][]Expression[]
+Overfull \hbox (0.96347pt too wide) in paragraph at lines 829--830
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]external[][][]
+memory[][][]in[][][]bytes()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[]
+[][]double[][][]external[][][]memory[][][]in[][][]
 
-Overfull \hbox (27.50215pt too wide) in paragraph at lines 177--179
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]add[][
-][]space[][][]dimensions[][][]and[][][]embed[][] ([][]ppl[][][][]B[]D[][][][]Sh
-ape[][][]double[][][]t[][] ph, [][]ppl[][][]dimension[]
+Overfull \hbox (2.0126pt too wide) in paragraph at lines 841--842
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][][]B[]H[]M[]Z05
+[][][]widening[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][]
+[][]B[]D[][][][]Shape[][][]double[][][][]B[]H[]M[]Z05[][][]
 
-Overfull \hbox (28.612pt too wide) in paragraph at lines 179--181
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]add[][
-][]space[][][]dimensions[][][]and[][][]project[][] ([][]ppl[][][][]B[]D[][][][]
-Shape[][][]double[][][]t[][] ph, [][]ppl[][][]dimension[]
+Overfull \hbox (3.23283pt too wide) in paragraph at lines 847--848
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][][]H79[][][]wid
+ening[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[
+][][][]Shape[][][]double[][][][]H79[][][]widening[]
 
-Overfull \hbox (23.6022pt too wide) in paragraph at lines 183--185
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]remove
-[][][]higher[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
-[][]double[][][]t[][] ph, [][]ppl[][][]dimension[]
-[39]
+Overfull \hbox (9.3417pt too wide) in paragraph at lines 853--854
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][][]B[]H[]M[]Z05
+[][][]widening[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[
+][][]double[][][][]B[]H[]M[]Z05[][][]widening[][][]assign
+[52]
 Overfull \hbox (1.39532pt too wide) in paragraph at lines 4675--4677
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][][]H79[][][]wide
 ning[][][]assign[][][]with[][][]tokens(+[]Handle[][][]1, +[]Handle[][][]
@@ -9022,6 +9418,31 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]fold[][][]space
 [][][]dimensions(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Vars, +[]
 [131]
+Overfull \hbox (18.33296pt too wide) in paragraph at lines 865--866
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]widening[][][]
+assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shap
+e[][][]double[][][]widening[][][]assign[][][]with[]
+
+Overfull \hbox (19.372pt too wide) in paragraph at lines 877--878
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]limited[][][][
+]B[]H[]M[]Z05[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/pcr
+/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]double[]
+
+Overfull \hbox (33.07224pt too wide) in paragraph at lines 883--884
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]limited[][][][
+]H79[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 in
+t ppl[][][][]B[]D[][][][]Shape[][][]double[][][]limited[]
+
+Overfull \hbox (3.25226pt too wide) in paragraph at lines 889--890
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]limited[][][][
+]C[]C76[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8
+ int ppl[][][][]B[]D[][][][]Shape[][][]double[]
+
+Overfull \hbox (2.08258pt too wide) in paragraph at lines 895--896
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]limited[][][][
+]B[]H[]M[]Z05[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]
+B[]D[][][][]Shape[][][]double[][][]limited[]
+[53]
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 4761--4763
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]double[][][]f
 rom[][][]space[][][]dimension(+[]Dimension[][][][]Type, +[]
@@ -9113,48 +9534,36 @@
 rom[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity
 (+[]
 [133]
-Overfull \hbox (19.30246pt too wide) in paragraph at lines 193--195
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]drop[]
-[][]some[][][]non[][][]integer[][][]points[][][]2[][] ([][]ppl[][][][]B[]D[][][
-][]Shape[][][]double[][][]t[][] ph, [][]ppl[][][]dimension[]
-
-Overfull \hbox (1.86237pt too wide) in paragraph at lines 201--203
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][][]H79[
-][][]widening[][][]assign[][][]with[][][]tokens[][] ([][]ppl[][][][]B[]D[][][][
-]Shape[][][]double[][][]t[][] x, [][]ppl[][][]const[]
-
-Overfull \hbox (6.40245pt too wide) in paragraph at lines 209--211
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]wideni
-ng[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]t[][] x, 
-[][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]double[]
+Overfull \hbox (61.86285pt too wide) in paragraph at lines 901--902
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]limited[][][][
+]H79[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][
+][]Shape[][][]double[][][]limited[][][][]H79[][][]extrapolation[]
 
-Overfull \hbox (15.58176pt too wide) in paragraph at lines 211--213
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]limite
-d[][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign[][][]with[][][]tokens[][] 
-([][]ppl[][][][]B[]D[][][][]Shape[][][]double[]
+Overfull \hbox (8.04286pt too wide) in paragraph at lines 907--908
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]limited[][][][
+]C[]C76[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[]
+[][][]Shape[][][]double[][][]limited[][][][]C[]C76[]
 
-Overfull \hbox (4.3319pt too wide) in paragraph at lines 221--223
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]limite
-d[][][][]C[]C76[][][]extrapolation[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]
-Shape[][][]double[][][]t[][] x, [][]ppl[][][]const[]
+Overfull \hbox (57.01285pt too wide) in paragraph at lines 913--914
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][][]C[]C76[][][]
+extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][
+][]B[]D[][][][]Shape[][][]double[][][][]C[]C76[][][]extrapolation[]
 
-Overfull \hbox (6.15248pt too wide) in paragraph at lines 227--229
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][][]C[]C
-76[][][]narrowing[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double
-[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[]
+Overfull \hbox (3.24341pt too wide) in paragraph at lines 919--920
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][][]C[]C76[][][]
+extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[]
+[][]double[][][][]C[]C76[][][]extrapolation[]
 
-Overfull \hbox (26.84183pt too wide) in paragraph at lines 233--235
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
-][]recycle[][][][]Constraint[][][][]System[][] ([][]ppl[][][][]B[]D[][][][]Shap
-e[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][
-][][]Constraint[]
+Overfull \hbox (3.84216pt too wide) in paragraph at lines 925--926
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][][]C[]C76[][][]
+narrowing[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]
+double[][][][]C[]C76[][][]narrowing[][][]assign ( 
 
-Overfull \hbox (23.46225pt too wide) in paragraph at lines 237--239
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][
-][]recycle[][][][]Generator[][][][]System[][] ([][]ppl[][][][]B[]D[][][][]Shape
-[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][]
-[][]Generator[]
-[40]
+Overfull \hbox (40.0231pt too wide) in paragraph at lines 943--944
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]recyc
+le[][][][]Constraint[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B
+[]D[][][][]Shape[][][]double[][][]recycle[][][][]Constraint[]
+[54]
 Overfull \hbox (15.79532pt too wide) in paragraph at lines 4845--4847
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]double[][][]f
 rom[][][][]Double[][][][]Box[][][]with[][][]complexity(+[]Handle, +[]
@@ -9235,6 +9644,41 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]add[][][]c
 ongruences( +[]Handle, +[]Congruence[][][][]System) 
 [136]
+Overfull \hbox (45.57317pt too wide) in paragraph at lines 949--950
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]recyc
+le[][][][]Congruence[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B
+[]D[][][][]Shape[][][]double[][][]recycle[][][][]Congruence[]
+
+Overfull \hbox (33.54317pt too wide) in paragraph at lines 955--956
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]recyc
+le[][][][]Generator[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[
+]D[][][][]Shape[][][]double[][][]recycle[][][][]Generator[]
+
+Overfull \hbox (0.37323pt too wide) in paragraph at lines 961--962
+ []\OT1/ptm/b/n/10 ppl[][][]assign[][][][]B[]D[][][][]Shape[][][]double[][][]fr
+om[][][][]B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][]assign[
+][][][]B[]D[][][][]Shape[][][]double[][][]from[][][][]B[]D[][][]
+
+Overfull \hbox (12.06174pt too wide) in paragraph at lines 967--968
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]add[][][]recyc
+led[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]d
+ouble[][][]add[][][]recycled[][][]constraints
+
+Overfull \hbox (17.6118pt too wide) in paragraph at lines 973--974
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]add[][][]recyc
+led[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]d
+ouble[][][]add[][][]recycled[][][]congruences
+
+Overfull \hbox (2.01312pt too wide) in paragraph at lines 991--992
+ []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]M
+[]S[][][][]B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][]one[][
+][]affine[][][]ranking[][][]function[][][][]M[]
+
+Overfull \hbox (0.3432pt too wide) in paragraph at lines 997--998
+ []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]P
+[]R[][][][]B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][]one[][
+][]affine[][][]ranking[][][]function[][][][]P[]
+[55]
 Overfull \hbox (8.0138pt too wide) in paragraph at lines 4991--4993
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]refine[][]
 []with[][][]constraint( +[]Handle, +[]Constraint) 
@@ -9284,36 +9728,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]generalize
 d[][][]affine[][][]image(+[]Handle, +[]P[]P[]L[][][][]Var, +[]
 [137]
-Overfull \hbox (1.78282pt too wide) in paragraph at lines 243--245
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]double[][][]add[][
-][]recycled[][][]congruences[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]double[
-][][]t[][] ph, [][]ppl[][][][]Congruence[]
-
-Overfull \hbox (5.03233pt too wide) in paragraph at lines 249--251
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[
-][][][]M[]S[][][][]B[]D[][][][]Shape[][][]double[][] ([][]ppl[][][]const[][][][
-]B[]D[][][][]Shape[][][]double[][][]t[][] pset, [][]ppl[]
-
-Overfull \hbox (2.81236pt too wide) in paragraph at lines 251--253
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[
-][][][]P[]R[][][][]B[]D[][][][]Shape[][][]double[][] ([][]ppl[][][]const[][][][
-]B[]D[][][][]Shape[][][]double[][][]t[][] pset, [][]ppl[]
-
-Overfull \hbox (4.48201pt too wide) in paragraph at lines 253--255
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions
-[][][][]M[]S[][][][]B[]D[][][][]Shape[][][]double[][] ([][]ppl[][][]const[][][]
-[]B[]D[][][][]Shape[][][]double[][][]t[][] pset, [][]ppl[]
-
-Overfull \hbox (2.26204pt too wide) in paragraph at lines 255--257
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions
-[][][][]P[]R[][][][]B[]D[][][][]Shape[][][]double[][] ([][]ppl[][][]const[][][]
-[]B[]D[][][][]Shape[][][]double[][][]t[][] pset, [][]ppl[]
-
-Overfull \hbox (20.41179pt too wide) in paragraph at lines 295--296
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][]
-[]Shape[][][]double[][][]from[][][]space[][][]dimension
-[41]
 Overfull \hbox (11.6138pt too wide) in paragraph at lines 5031--5033
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]generalize
 d[][][]affine[][][]preimage(+[]Handle, +[]P[]P[]L[][][][]Var,
@@ -9338,6 +9752,36 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]simplify[]
 [][]using[][][]context[][][]assign(+[]Handle[][][]1, +[]Handle[]
 [138]
+Overfull \hbox (1.46292pt too wide) in paragraph at lines 1003--1004
+ []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
+M[]S[][][][]B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][]all[]
+[][]affine[][][]ranking[][][]functions[][][]
+
+Overfull \hbox (4.593pt too wide) in paragraph at lines 1009--1010
+ []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
+P[]R[][][][]B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][]all[]
+[][]affine[][][]ranking[][][]functions[][][][]P[]
+
+Overfull \hbox (2.93312pt too wide) in paragraph at lines 1027--1028
+ []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]M
+[]S[][][][]B[]D[][][][]Shape[][][]double[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][
+]one[][][]affine[][][]ranking[][][]function[]
+
+Overfull \hbox (1.2632pt too wide) in paragraph at lines 1033--1034
+ []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]P
+[]R[][][][]B[]D[][][][]Shape[][][]double[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][
+]one[][][]affine[][][]ranking[][][]function[]
+
+Overfull \hbox (7.18292pt too wide) in paragraph at lines 1039--1040
+ []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
+M[]S[][][][]B[]D[][][][]Shape[][][]double[][][]2()[] \OT1/pcr/m/n/8 int ppl[][]
+[]all[][][]affine[][][]ranking[][][]functions[]
+
+Overfull \hbox (5.513pt too wide) in paragraph at lines 1045--1046
+ []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
+P[]R[][][][]B[]D[][][][]Shape[][][]double[][][]2()[] \OT1/pcr/m/n/8 int ppl[][]
+[]all[][][]affine[][][]ranking[][][]functions[]
+[56]
 Overfull \hbox (20.5953pt too wide) in paragraph at lines 5065--5067
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]linear[][]
 []partition(+[]Handle[][][]1, +[]Handle[][][]2, -[]Handle[]
@@ -9365,42 +9809,7 @@
 Overfull \hbox (18.19531pt too wide) in paragraph at lines 5093--5095
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]limited[][
 ][][]C[]C76[][][]extrapolation[][][]assign(+[]Handle[][][]1, +[]
-[139]
-Overfull \hbox (4.67235pt too wide) in paragraph at lines 301--302
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][][]C[][][][]Polyhedron()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][
-][]Shape[][][]double[][][]from[][][][]C[][][][]Polyhedron ( 
-
-Overfull \hbox (19.11229pt too wide) in paragraph at lines 307--308
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][][]N[]N[]C[][][][]Polyhedron()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]
-D[][][][]Shape[][][]double[][][]from[][][][]N[]N[]C[][][][]Polyhedron
-
-Overfull \hbox (1.72226pt too wide) in paragraph at lines 319--320
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][][]Rational[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][
-][]Shape[][][]double[][][]from[][][][]Rational[][][][]Box ( 
-
-Overfull \hbox (14.10329pt too wide) in paragraph at lines 325--326
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]ne
-w[][][][]B[]D[][][][]Shape[][][]double[][][]from[][][][]B[]D[][][][]Shape[]
-
-Overfull \hbox (15.22328pt too wide) in paragraph at lines 331--332
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]ne
-w[][][][]B[]D[][][][]Shape[][][]double[][][]from[][][][]B[]D[][][][]Shape[]
-
-Overfull \hbox (4.74298pt too wide) in paragraph at lines 337--338
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][][]Octagonal[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][
-][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[]
-
-Overfull \hbox (5.86298pt too wide) in paragraph at lines 343--344
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][][]Octagonal[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][
-][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[]
-[42]
+[139) (./interfaceppl__BD__Shape__mpq__class__tag.tex]
 Overfull \hbox (42.19531pt too wide) in paragraph at lines 5112--5114
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]add[][][]s
 pace[][][]dimensions[][][]and[][][]embed(+[]Handle, +[]Dimension[]
@@ -9424,7 +9833,31 @@
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 5127--5129
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]fold[][][]
 space[][][]dimensions(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[]
-) (./PI_Compilation.tex [140]) (./PI_SD_Features.tex [141] [142]
+) (./PI_Compilation.tex [140]) (./PI_SD_Features.tex
+Overfull \hbox (5.86221pt too wide) in paragraph at lines 19--21
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
+class[][][]from[][][][]C[][][][]Polyhedron[][] ([][]ppl[][][][]B[]D[][][][]Shap
+e[][][]mpq[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, []
+[]ppl[][][]const[]
+
+Overfull \hbox (3.64197pt too wide) in paragraph at lines 25--27
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
+class[][][]from[][][][]Rational[][][][]Box[][] ([][]ppl[][][][]B[]D[][][][]Shap
+e[][][]mpq[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, []
+[]ppl[][][]const[]
+
+Overfull \hbox (10.56195pt too wide) in paragraph at lines 27--29
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
+class[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]
+[]B[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/p
+tm/bc/n/10 pph, [][]ppl[]
+
+Overfull \hbox (11.12201pt too wide) in paragraph at lines 29--31
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
+class[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][]
+[]B[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/p
+tm/bc/n/10 pph, [][]ppl[]
+[57 [141]] [142]
 Overfull \hbox (30.3312pt too wide) in paragraph at lines 86--87
 []\OT1/ptm/m/n/10 Notice that, for dy-namic link-ing to work, you should have c
 on-fig-ured the li-brary with the \OT1/pcr/m/n/10 --enable-shared
@@ -9441,47 +9874,7 @@
 LaTeX Warning: Reference `group__PPL__Prolog__interface' on page 143 undefined 
 on input line 3.
 
-)
-Overfull \hbox (1.07347pt too wide) in paragraph at lines 355--356
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][][]B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][
-]B[]D[][][][]Shape[][][]double[][][]from[][][][]B[]D[][][][]Shape[]
-
-Overfull \hbox (37.7932pt too wide) in paragraph at lines 361--362
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][][]Octagonal[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][]new[]
-[][][]B[]D[][][][]Shape[][][]double[][][]from[][][][]Octagonal[]
-
-Overfull \hbox (18.24309pt too wide) in paragraph at lines 367--368
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][][]C[][][][]Polyhedron[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl
-[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[]
-
-Overfull \hbox (10.60301pt too wide) in paragraph at lines 373--374
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][][]N[]N[]C[][][][]Polyhedron[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 i
-nt ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[]
-
-Overfull \hbox (0.9931pt too wide) in paragraph at lines 379--380
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][][]Grid[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][]
-[]B[]D[][][][]Shape[][][]double[][][]from[][][][]Grid[]
-
-Overfull \hbox (15.293pt too wide) in paragraph at lines 385--386
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][][]Rational[][][][]Box[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl
-[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[]
-
-Overfull \hbox (25.41252pt too wide) in paragraph at lines 391--392
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity()[] \OT1
-/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[]
-
-Overfull \hbox (26.53252pt too wide) in paragraph at lines 397--398
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity()[] \OT1
-/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[]
-[43 (./group__PPL__Prolog__interface.tex) [143]] [144]
+) (./group__PPL__Prolog__interface.tex) [143] [144]
 No file refman.ind.
 (./refman.aux)
 
@@ -9508,121 +9901,171 @@
 mf-dist/fonts/type1/urw/courier/ucrr8a.pfb></usr/share/texlive/texmf-dist/fonts
 /type1/urw/courier/ucrro8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/h
 elvetic/uhvr8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmb8a.
-pfb>
-Overfull \hbox (23.73222pt too wide) in paragraph at lines 403--404
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity()[]
- \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[]
+pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmr8a.pfb></usr/share
+/texlive/texmf-dist/fonts/type1/urw/times/utmri8a.pfb>
+Output written on refman.pdf (150 pages, 754055 bytes).
+Transcript written on refman.log.
 
-Overfull \hbox (0.8522pt too wide) in paragraph at lines 409--410
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity()[]
- \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][]
+Overfull \hbox (0.95065pt too wide) in paragraph at lines 39--41
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
+class[][][]from[][][][]Octagonal[][][][]Shape[][][]double[][] ([][]ppl[][][][]B
+[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/
+bc/n/10 pph,
 
-Overfull \hbox (9.18303pt too wide) in paragraph at lines 415--416
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][][]Double[][][][]Box[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[]
-[][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[]
+Overfull \hbox (5.40195pt too wide) in paragraph at lines 41--43
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
+class[][][]from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity[][] ([][]p
+pl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
 
-Overfull \hbox (12.3827pt too wide) in paragraph at lines 421--422
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][][]B[]D[][][][]Shape[][][]double[][][]with[][][]complexity()[] \OT1/pcr/m/n
-/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[]
+Overfull \hbox (12.93196pt too wide) in paragraph at lines 45--47
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
+class[][][]from[][][][]Grid[][][]with[][][]complexity[][] ([][]ppl[][][][]B[]D[
+][][][]Shape[][][]mpq[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n
+/10 pph, [][]ppl[]
 
-Overfull \hbox (10.70241pt too wide) in paragraph at lines 427--428
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][][]Octagonal[][][][]Shape[][][]double[][][]with[][][]complexity()[] \OT1/pc
-r/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[]
+Overfull \hbox (3.1817pt too wide) in paragraph at lines 47--49
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
+class[][][]from[][][][]Rational[][][][]Box[][][]with[][][]complexity[][] ([][]p
+pl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
 
-Overfull \hbox (16.74335pt too wide) in paragraph at lines 433--434
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][][]Constraint[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D
-[][][][]Shape[][][]double[][][]from[][][][]Constraint[]
+Overfull \hbox (11.77185pt too wide) in paragraph at lines 49--51
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
+class[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]with[][][]com
+plexity[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[]
 
-Overfull \hbox (22.29341pt too wide) in paragraph at lines 439--440
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][][]Congruence[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D
-[][][][]Shape[][][]double[][][]from[][][][]Congruence[]
-[44</usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmr8a.pfb>]</usr/share
-/texlive/texmf-dist/fonts/type1/urw/times/utmri8a.pfb>
-Output written on refman.pdf (150 pages, 754483 bytes).
-Transcript written on refman.log.
-makeindex refman.idx
+Overfull \hbox (12.33191pt too wide) in paragraph at lines 51--53
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
+class[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]with[][][]com
+plexity[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[]
 
-Overfull \hbox (10.26341pt too wide) in paragraph at lines 445--446
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[
-][][][]Generator[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[
-][][][]Shape[][][]double[][][]from[][][][]Generator[]
+Overfull \hbox (17.60164pt too wide) in paragraph at lines 53--55
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
+class[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]with[][]
+[]complexity[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
 
-Overfull \hbox (11.51178pt too wide) in paragraph at lines 463--464
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]relation[][][]
-with[][][][]Constraint()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][
-]double[][][]relation[][][]with[][][][]Constraint
+Overfull \hbox (18.1617pt too wide) in paragraph at lines 55--57
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
+class[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][]
+[]complexity[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
 
-Overfull \hbox (5.03185pt too wide) in paragraph at lines 469--470
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]relation[][][]
-with[][][][]Generator()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]
-double[][][]relation[][][]with[][][][]Generator
+Overfull \hbox (4.56207pt too wide) in paragraph at lines 61--63
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
+class[][][]from[][][][]Octagonal[][][][]Shape[][][]double[][][]with[][][]comple
+xity[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
 
-Overfull \hbox (17.06184pt too wide) in paragraph at lines 475--476
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]relation[][][]
-with[][][][]Congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][
-]double[][][]relation[][][]with[][][][]Congruence
+Overfull \hbox (6.14209pt too wide) in paragraph at lines 65--67
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
+class[][][]from[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]B[]D[][][][
+]Shape[][][]mpq[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pp
+h, [][]ppl[]
 
-Overfull \hbox (23.1515pt too wide) in paragraph at lines 493--494
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]get[][][]minim
-ized[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]
-double[][][]get[][][]minimized[][][]constraints
+Overfull \hbox (9.18156pt too wide) in paragraph at lines 69--71
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]space[][][]dimension[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mp
+q[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
 
-Overfull \hbox (28.70157pt too wide) in paragraph at lines 499--500
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]get[][][]minim
-ized[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]
-double[][][]get[][][]minimized[][][]congruences
-[45]This is makeindex, version 2.15 [TeX Live 2019/dev] (kpathsea + Thai support).
+Overfull \hbox (9.49162pt too wide) in paragraph at lines 71--73
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]affine[][][]dimension[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]m
+pq[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
+
+Overfull \hbox (0.2818pt too wide) in paragraph at lines 77--79
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]relation[][][]with[][][][]Congruence[][] ([][]ppl[][][]const[][][][]B[]D[][][
+][]Shape[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[]
+
+Overfull \hbox (25.56108pt too wide) in paragraph at lines 79--81
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]get[][][]constraints[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mp
+q[][][]class[][][]t[][] ph, [][]ppl[][][]const[][][][]Constraint[]
+[58makeindex refman.idx
+]This is makeindex, version 2.15 [TeX Live 2019/dev] (kpathsea + Thai support).
 Scanning input file refman.idx....done (1 entries accepted, 0 rejected).
 Sorting entries...done (0 comparisons).
 Generating output file refman.ind....done (5 lines written, 0 warnings).
 Output written in refman.ind.
 Transcript written in refman.ilg.
 pdflatex refman
+This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) (preloaded format=pdflatex)
+ restricted \write18 enabled.
 
-Overfull \hbox (1.1418pt too wide) in paragraph at lines 523--524
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]contains[][][]
-integer[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]dou
-ble[][][]contains[][][]integer[][][]point ( 
+Overfull \hbox (1.9613pt too wide) in paragraph at lines 83--85
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]get[][][]minimized[][][]constraints[][] ([][]ppl[][][]const[][][][]B[]D[][][]
+[]Shape[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[]
 
-Overfull \hbox (5.39171pt too wide) in paragraph at lines 529--530
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]is[][][]topolo
-gically[][][]closed()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]do
-uble[][][]is[][][]topologically[][][]closed ( 
+Overfull \hbox (8.61162pt too wide) in paragraph at lines 85--87
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]get[][][]minimized[][][]congruences[][] ([][]ppl[][][]const[][][][]B[]D[][][]
+[]Shape[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[]
 
-Overfull \hbox (3.42314pt too wide) in paragraph at lines 541--542
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]topological[][
-][]closure[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][
-]double[][][]topological[][][]closure[]
-[46]This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) (preloaded format=pdflatex)
- restricted \write18 enabled.
+Overfull \hbox (0.25233pt too wide) in paragraph at lines 101--103
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]bounds[][][]from[][][]above[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[
+][][]mpq[][][]class[][][]t[][] ph, [][]ppl[][][]const[]
 
-Overfull \hbox (19.51176pt too wide) in paragraph at lines 589--590
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]contains[][][]
-[]B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]S
-hape[][][]double[][][]contains[][][][]B[]D[][][][]Shape[][][]double
+Overfull \hbox (0.86206pt too wide) in paragraph at lines 103--105
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]bounds[][][]from[][][]below[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[
+][][]mpq[][][]class[][][]t[][] ph, [][]ppl[][][]const[]
 
-Overfull \hbox (32.32272pt too wide) in paragraph at lines 595--596
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]strictly[][][]
-contains[][][][]B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][][
-]B[]D[][][][]Shape[][][]double[][][]strictly[][][]contains[]
+Overfull \hbox (6.12149pt too wide) in paragraph at lines 109--111
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]maximize[][][]with[][][]point[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shap
+e[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[][][]const[]
 
-Overfull \hbox (1.39285pt too wide) in paragraph at lines 601--602
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]is[][][]disjoi
-nt[][][]from[][][][]B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][
-][][]B[]D[][][][]Shape[][][]double[][][]is[][][]disjoint[]
+Overfull \hbox (14.09169pt too wide) in paragraph at lines 109--111
+[][][]\OT1/ptm/bc/n/10 Linear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]C
+oefficient[][][]t[][] ext[][][]n, [][]ppl[][][][]Coefficient[][][]t[][] ext[][]
+[]d, int $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 poptimum, [][]ppl[][][][]Genera
+tor[]
 
-Overfull \hbox (1.5818pt too wide) in paragraph at lines 607--608
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]equals[][][][]
-B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sha
-pe[][][]double[][][]equals[][][][]B[]D[][][][]Shape[][][]double
-[47]entering extended mode
+Overfull \hbox (4.46144pt too wide) in paragraph at lines 111--113
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]minimize[][][]with[][][]point[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shap
+e[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[][][]const[]
+
+Overfull \hbox (14.09169pt too wide) in paragraph at lines 111--113
+[][][]\OT1/ptm/bc/n/10 Linear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]C
+oefficient[][][]t[][] ext[][][]n, [][]ppl[][][][]Coefficient[][][]t[][] ext[][]
+[]d, int $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 poptimum, [][]ppl[][][][]Genera
+tor[]
+
+Overfull \hbox (14.71156pt too wide) in paragraph at lines 115--117
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]contains[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][]const
+[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] x, [][]ppl[]
+
+Overfull \hbox (14.12123pt too wide) in paragraph at lines 119--121
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]is[][][]disjoint[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] (
+[][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
+
+Overfull \hbox (6.93167pt too wide) in paragraph at lines 121--123
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]equals[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][]const[]
+[][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] x, [][]ppl[]
+
+Overfull \hbox (12.4822pt too wide) in paragraph at lines 127--129
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]add[][][]congruence[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class
+[][][]t[][] ph, [][]ppl[][][]const[][][][]Congruence[]
+
+Overfull \hbox (3.07146pt too wide) in paragraph at lines 129--131
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]add[][][]constraints[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]clas
+s[][][]t[][] ph, [][]ppl[][][]const[][][][]Constraint[]
+
+Overfull \hbox (16.37209pt too wide) in paragraph at lines 131--133
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]add[][][]congruences[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]clas
+s[][][]t[][] ph, [][]ppl[][][]const[][][][]Congruence[]
+
+Overfull \hbox (28.89116pt too wide) in paragraph at lines 133--135
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]refine[][][]with[][][]constraint[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]m
+pq[][][]class[][][]t[][] ph, [][]ppl[][][]const[][][][]Constraint[]
+[59]entering extended mode
 (./refman.tex
 LaTeX2e <2018-12-01>
 (/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
@@ -9641,145 +10084,197 @@
 (/usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty)
 (/usr/share/texlive/texmf-dist/tex/latex/float/float.sty)
 (/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty
-Overfull \hbox (5.39195pt too wide) in paragraph at lines 649--650
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]refine[][][]wi
-th[][][]congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]dou
-ble[][][]refine[][][]with[][][]congruence ( 
-
-Overfull \hbox (8.53178pt too wide) in paragraph at lines 655--656
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]refine[][][]wi
-th[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]do
-uble[][][]refine[][][]with[][][]constraints ( 
-
-Overfull \hbox (4.48184pt too wide) in paragraph at lines 661--662
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]refine[][][]wi
-th[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]do
-uble[][][]refine[][][]with[][][]congruences
-[48
 (/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def
-(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu])))
+(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu)))
 (/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty)
 (/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/tocloft/tocloft.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/tocloft/tocloft.sty
+Overfull \hbox (12.2214pt too wide) in paragraph at lines 141--143
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]intersection[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]
+class[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (5.84169pt too wide) in paragraph at lines 145--147
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]difference[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]cl
+ass[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (12.7616pt too wide) in paragraph at lines 147--149
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]concatenate[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]c
+lass[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (11.9314pt too wide) in paragraph at lines 149--151
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]time[][][]elapse[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[]
+[][]class[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (5.66202pt too wide) in paragraph at lines 151--153
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]upper[][][]bound[][][]assign[][][]if[][][]exact[][] ([][]ppl[][][][]B[]D[][][
+][]Shape[][][]mpq[][][]class[][][]t[][] x, [][]ppl[][][]const[]
+
+Overfull \hbox (5.592pt too wide) in paragraph at lines 165--167
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]bounded[][][]affine[][][]image[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq
+[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
+
+Overfull \hbox (7.27184pt too wide) in paragraph at lines 165--167
+[][]\OT1/ptm/bc/n/10 type[][] var, [][]ppl[][][]const[][][][]Linear[][][][]Expr
+ession[][][]t[][] lb, [][]ppl[][][]const[][][][]Linear[][][][]Expression[][][]t
+[][] ub, [][]ppl[][][]const[][][][]Coefficient[]
+
+Overfull \hbox (18.3619pt too wide) in paragraph at lines 167--169
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]bounded[][][]affine[][][]preimage[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]
+mpq[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
+
+Overfull \hbox (7.27184pt too wide) in paragraph at lines 167--169
+[][]\OT1/ptm/bc/n/10 type[][] var, [][]ppl[][][]const[][][][]Linear[][][][]Expr
+ession[][][]t[][] lb, [][]ppl[][][]const[][][][]Linear[][][][]Expression[][][]t
+[][] ub, [][]ppl[][][]const[][][][]Coefficient[]
+
+Overfull \hbox (17.2415pt too wide) in paragraph at lines 169--171
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]generalized[][][]affine[][][]image[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][
+]mpq[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
+
+Overfull \hbox (30.0114pt too wide) in paragraph at lines 171--173
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]generalized[][][]affine[][][]preimage[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
+[][]mpq[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
+
+Overfull \hbox (3.06163pt too wide) in paragraph at lines 173--175
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]generalized[][][]affine[][][]image[][][]lhs[][][]rhs[][] ([][]ppl[][][][]B[]D
+[][][][]Shape[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[]
+
+Overfull \hbox (15.92157pt too wide) in paragraph at lines 173--175
+[][]\OT1/ptm/bc/n/10 const[][][][]Linear[][][][]Expression[][][]t[][] lhs, enum
+ [][]ppl[][][]enum[][][][]Constraint[][][][]Type[][] rel-sym, [][]ppl[][][]cons
+t[][][][]Linear[][][][]Expression[]
+
+Overfull \hbox (15.83153pt too wide) in paragraph at lines 175--177
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]generalized[][][]affine[][][]preimage[][][]lhs[][][]rhs[][] ([][]ppl[][][][]B
+[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[]
+
+Overfull \hbox (15.92157pt too wide) in paragraph at lines 175--177
+[][]\OT1/ptm/bc/n/10 const[][)
 (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty)
 (/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
 (/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg)
 (/usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty
-(/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty)))
-(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
-(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty
-(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty
-Overfull \hbox (7.98315pt too wide) in paragraph at lines 697--698
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]upper[][][]bou
-nd[][][]assign[][][]if[][][]exact()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][
-]Shape[][][]double[][][]upper[][][]bound[][][]assign[]
+(/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty))][][]Linear[][][][]Expression[][][]t[][] lhs, enum
+ [][]ppl[][][]enum[][][][]Constraint[][][][]Type[][] rel-sym, [][]ppl[][][]cons
+t[][][][]Linear[][][][]Expression[]
 
-Overfull \hbox (30.80284pt too wide) in paragraph at lines 703--704
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]simplify[][][]
-using[][][]context[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh
-ape[][][]double[][][]simplify[][][]using[][][]context[]
+Overfull \hbox (9.43188pt too wide) in paragraph at lines 177--179
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]add[][][]space[][][]dimensions[][][]and[][][]embed[][] ([][]ppl[][][][]B[]D[]
+[][][]Shape[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[]
 
-Overfull \hbox (9.01286pt too wide) in paragraph at lines 715--716
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]unconstrain[][
-][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][]
-[]double[][][]unconstrain[][][]space[]
+Overfull \hbox (10.54173pt too wide) in paragraph at lines 179--181
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]add[][][]space[][][]dimensions[][][]and[][][]project[][] ([][]ppl[][][][]B[]D
+[][][][]Shape[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[]
 
-Overfull \hbox (12.90276pt too wide) in paragraph at lines 721--722
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]unconstrain[][
-][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][
-][]double[][][]unconstrain[][][]space[]
-[49]))
+Overfull \hbox (21.65166pt too wide) in paragraph at lines 181--183
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]remove[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]
+mpq[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
+
+Overfull \hbox (5.53194pt too wide) in paragraph at lines 183--185
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]remove[][][]higher[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][
+]Shape[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[]
+[60)
+(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
+(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty
+(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty]))
 (/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty)
 (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty)
 (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def)
-Overfull \hbox (9.50198pt too wide) in paragraph at lines 745--746
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]bounded[][][]a
-ffine[][][]preimage()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]do
-uble[][][]bounded[][][]affine[][][]preimage
-
-Overfull \hbox (11.68184pt too wide) in paragraph at lines 751--752
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]generalized[][
-][]affine[][][]image()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]d
-ouble[][][]generalized[][][]affine[][][]image
+(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def)This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) (preloaded format=latex)
+ restricted \write18 enabled.
 
-Overfull \hbox (8.04321pt too wide) in paragraph at lines 757--758
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]generalized[][
-][]affine[][][]preimage()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][]
-[]double[][][]generalized[][][]affine[]
-[50]
 (/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg)
-(/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def
-Overfull \hbox (27.10283pt too wide) in paragraph at lines 763--764
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]generalized[][
-][]affine[][][]image[][][]lhs[][][]rhs()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[]
-[][][]Shape[][][]double[][][]generalized[][][]affine[]
-
-Overfull \hbox (9.6827pt too wide) in paragraph at lines 769--770
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]generalized[][
-][]affine[][][]preimage[][][]lhs[][][]rhs()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]
-D[][][][]Shape[][][]double[][][]generalized[]
+(/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.defentering extended mode
+(./_formulas.tex
+LaTeX2e <2018-12-01>
 
-Overfull \hbox (42.03287pt too wide) in paragraph at lines 775--776
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]add[][][]space
-[][][]dimensions[][][]and[][][]embed()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][]
-[][]Shape[][][]double[][][]add[][][]space[][][]dimensions[]
+)
+(/usr/share/texlive/texmf-dist/tex/latex/hyperref/backref.sty
+(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty))
+(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty)
+Overfull \hbox (16.80182pt too wide) in paragraph at lines 185--187
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]expand[][][]space[][][]dimension[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]m
+pq[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
 
-Overfull \hbox (44.0629pt too wide) in paragraph at lines 781--782
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]add[][][]space
-[][][]dimensions[][][]and[][][]project()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[]
-[][][]Shape[][][]double[][][]add[][][]space[][][]dimensions[]
+Overfull \hbox (8.07158pt too wide) in paragraph at lines 187--189
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]fold[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mp
+q[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
 
-Overfull \hbox (10.95177pt too wide) in paragraph at lines 787--788
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]remove[][][]sp
-ace[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]do
-uble[][][]remove[][][]space[][][]dimensions
+Overfull \hbox (9.18156pt too wide) in paragraph at lines 189--191
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]map[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq
+[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
 
-Overfull \hbox (5.2329pt too wide) in paragraph at lines 793--794
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]remove[][][]hi
-gher[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]S
-hape[][][]double[][][]remove[][][]higher[]
+Overfull \hbox (3.88039pt too wide) in paragraph at lines 191--193
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]drop[][][]some[][][]non[][][]integer[][][]points[][] ([][]ppl[][][][]B[]D[][]
+[][]Shape[][][]mpq[][][]class[][][]t[][] ph, int com-
 
-Overfull \hbox (2.11176pt too wide) in paragraph at lines 799--800
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]expand[][][]sp
-ace[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]dou
-ble[][][]expand[][][]space[][][]dimension
-[51])
-(/usr/share/texlive/texmf-dist/tex/latex/hyperref/backref.sty
-(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty
-Overfull \hbox (27.4932pt too wide) in paragraph at lines 817--818
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]drop[][][]some
-[][][]non[][][]integer[][][]points()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][]
-[]Shape[][][]double[][][]drop[][][]some[][][]non[][][]integer[]
+Overfull \hbox (1.2322pt too wide) in paragraph at lines 193--195
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]drop[][][]some[][][]non[][][]integer[][][]points[][][]2[][] ([][]ppl[][][][]B
+[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[]
 
-Overfull \hbox (2.49318pt too wide) in paragraph at lines 823--824
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]drop[][][]some
-[][][]non[][][]integer[][][]points[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]
-D[][][][]Shape[][][]double[][][]drop[][][]some[][][]non[][][]
+Overfull \hbox (3.17146pt too wide) in paragraph at lines 195--197
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]external[][][]memory[][][]in[][][]bytes[][] ([][]ppl[][][]const[][][][]B[]D[]
+[][][]Shape[][][]mpq[][][]class[][][]t[][] ps, size[]
 
-Overfull \hbox (0.96347pt too wide) in paragraph at lines 829--830
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]external[][][]
-memory[][][]in[][][]bytes()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[]
-[][]double[][][]external[][][]memory[][][]in[][][]
+Overfull \hbox (4.35188pt too wide) in paragraph at lines 201--203
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[][]H79[][][]widening[][][]assign[][][]with[][][]tokens[][] ([][]ppl[][][][]B[]
+D[][][][]Shape[][][]mpq[][][]class[][][]t[][] x, [][]ppl[]
 
-Overfull \hbox (2.0126pt too wide) in paragraph at lines 841--842
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][][]B[]H[]M[]Z05
-[][][]widening[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][]
-[][]B[]D[][][][]Shape[][][]double[][][][]B[]H[]M[]Z05[][][]
+Overfull \hbox (8.24164pt too wide) in paragraph at lines 207--209
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]widening[][][]assign[][][]with[][][]tokens[][] ([][]ppl[][][][]B[]D[][][][]Sh
+ape[][][]mpq[][][]class[][][]t[][] x, [][]ppl[][][]const[]
 
-Overfull \hbox (3.23283pt too wide) in paragraph at lines 847--848
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][][]H79[][][]wid
-ening[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[
-][][][]Shape[][][]double[][][][]H79[][][]widening[]
+Overfull \hbox (2.78186pt too wide) in paragraph at lines 209--211
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]widening[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]clas
+s[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[]
 
-Overfull \hbox (9.3417pt too wide) in paragraph at lines 853--854
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][][]B[]H[]M[]Z05
-[][][]widening[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[
-][][]double[][][][]B[]H[]M[]Z05[][][]widening[][][]assign
-[52))
-(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty)])
+Overfull \hbox (4.19151pt too wide) in paragraph at lines 215--217
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]limited[][][][]C[]C76[][][]extrapolation[][][]assign[][][]with[][][]tokens[][
+] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[]
+
+Overfull \hbox (0.70154pt too wide) in paragraph at lines 219--221
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]limited[][][][]H79[][][]extrapolation[][][]assign[][] ([][]ppl[][][][]B[]D[][
+][][]Shape[][][]mpq[][][]class[][][]t[][] x, [][]ppl[]
+
+Overfull \hbox (6.82141pt too wide) in paragraph at lines 221--223
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]limited[][][][]C[]C76[][][]extrapolation[][][]assign[][] ([][]ppl[][][][]B[]D
+[][][][]Shape[][][]mpq[][][]class[][][]t[][] x, [][]ppl[]
+
+Overfull \hbox (9.79172pt too wide) in paragraph at lines 229--231
+\OT1/ptm/bc/n/10 Shape[][][]mpq[][][]class[][][]t[][] y, [][]ppl[][][][]B[]D[][
+][][]Shape[][][]mpq[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/1
+0 p[][][]inters, [][]ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]
+Polyhedron[]
+[61)
 (/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def)
-(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty) (./doxygen.sty
+(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty) (./doxygen.sty]
 (/usr/share/texlive/texmf-dist/tex/latex/tools/calc.sty)
 (/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty)
 (/usr/share/texlive/texmf-dist/tex/latex/tools/verbatim.sty)
@@ -9787,32 +10282,7 @@
 (/usr/share/texlive/texmf-dist/tex/latex/tabu/tabu.sty
 (/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty))
 (/usr/share/texlive/texmf-dist/tex/latex/tools/tabularx.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/multirow/multirow.sty)
-Overfull \hbox (18.33296pt too wide) in paragraph at lines 865--866
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]widening[][][]
-assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shap
-e[][][]double[][][]widening[][][]assign[][][]with[]
-
-Overfull \hbox (19.372pt too wide) in paragraph at lines 877--878
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]limited[][][][
-]B[]H[]M[]Z05[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/pcr
-/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]double[]
-
-Overfull \hbox (33.07224pt too wide) in paragraph at lines 883--884
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]limited[][][][
-]H79[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 in
-t ppl[][][][]B[]D[][][][]Shape[][][]double[][][]limited[]
-
-Overfull \hbox (3.25226pt too wide) in paragraph at lines 889--890
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]limited[][][][
-]C[]C76[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8
- int ppl[][][][]B[]D[][][][]Shape[][][]double[]
-
-Overfull \hbox (2.08258pt too wide) in paragraph at lines 895--896
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]limited[][][][
-]B[]H[]M[]Z05[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]
-B[]D[][][][]Shape[][][]double[][][]limited[]
-[53])
+(/usr/share/texlive/texmf-dist/tex/latex/multirow/multirow.sty))
 (/build/ppl-1.2/doc/ppl.sty
 (/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty
 For additional information on amsmath, use the `?' option.
@@ -9824,39 +10294,9 @@
 (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty))
 (/usr/share/texlive/texmf-dist/tex/latex/stmaryrd/stmaryrd.sty))
 Writing index file refman.idx
-(./refman.aux
-Overfull \hbox (61.86285pt too wide) in paragraph at lines 901--902
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]limited[][][][
-]H79[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][
-][]Shape[][][]double[][][]limited[][][][]H79[][][]extrapolation[]
-
-Overfull \hbox (8.04286pt too wide) in paragraph at lines 907--908
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]limited[][][][
-]C[]C76[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[]
-[][][]Shape[][][]double[][][]limited[][][][]C[]C76[]
-
-Overfull \hbox (57.01285pt too wide) in paragraph at lines 913--914
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][][]C[]C76[][][]
-extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][
-][]B[]D[][][][]Shape[][][]double[][][][]C[]C76[][][]extrapolation[]
-
-Overfull \hbox (3.24341pt too wide) in paragraph at lines 919--920
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][][]C[]C76[][][]
-extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[]
-[][]double[][][][]C[]C76[][][]extrapolation[]
-
-Overfull \hbox (3.84216pt too wide) in paragraph at lines 925--926
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][][]C[]C76[][][]
-narrowing[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]
-double[][][][]C[]C76[][][]narrowing[][][]assign ( 
-
-Overfull \hbox (40.0231pt too wide) in paragraph at lines 943--944
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]recyc
-le[][][][]Constraint[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B
-[]D[][][][]Shape[][][]double[][][]recycle[][][][]Constraint[]
-[54) (/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd)
+(./refman.aux) (/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd)
 (/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1ptm.fd)
-(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii]
+(/usr/share/texlive/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
 [Loading MPS to PDF converter (version 2006.09.02).]
 ) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty
 (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty)
@@ -9868,76 +10308,64 @@
 (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd)
 (/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd)
 (/usr/share/texlive/texmf-dist/tex/latex/stmaryrd/Ustmry.fd)
-(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd)
-Overfull \hbox (45.57317pt too wide) in paragraph at lines 949--950
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]recyc
-le[][][][]Congruence[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B
-[]D[][][][]Shape[][][]double[][][]recycle[][][][]Congruence[]
-
-Overfull \hbox (33.54317pt too wide) in paragraph at lines 955--956
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]recyc
-le[][][][]Generator[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[
-]D[][][][]Shape[][][]double[][][]recycle[][][][]Generator[]
-
-Overfull \hbox (0.37323pt too wide) in paragraph at lines 961--962
- []\OT1/ptm/b/n/10 ppl[][][]assign[][][][]B[]D[][][][]Shape[][][]double[][][]fr
-om[][][][]B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][]assign[
-][][][]B[]D[][][][]Shape[][][]double[][][]from[][][][]B[]D[][][]
+(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd) [1{/var/lib/texmf/fo
+nts/map/pdftex/updmap/pdftex.map} </build/ppl-1.2/doc/ppl_logo.pdf>] [2]
+(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1pcr.fd) [3 </build/ppl-1.2/d
+oc/bugseng_logo.pdf>] [4] (./refman.toc) [1 </build/ppl-1.2/doc/ppl_logo_no_ppl
+.pdf>] [2] (./index.tex
+Overfull \hbox (8.77168pt too wide) in paragraph at lines 233--235
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
+class[][][]recycle[][][][]Constraint[][][][]System[][] ([][]ppl[][][][]B[]D[][]
+[][]Shape[][][]mpq[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10
+ pph, [][]ppl[]
 
-Overfull \hbox (12.06174pt too wide) in paragraph at lines 967--968
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]add[][][]recyc
-led[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]d
-ouble[][][]add[][][]recycled[][][]constraints
+Overfull \hbox (15.422pt too wide) in paragraph at lines 235--237
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
+class[][][]recycle[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]B[]D[][]
+[][]Shape[][][]mpq[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10
+ pph, [][]ppl[]
 
-Overfull \hbox (17.6118pt too wide) in paragraph at lines 973--974
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]add[][][]recyc
-led[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]d
-ouble[][][]add[][][]recycled[][][]congruences
+Overfull \hbox (7.0819pt too wide) in paragraph at lines 237--239
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
+class[][][]recycle[][][][]Generator[][][][]System[][] ([][]ppl[][][][]B[]D[][][
+][]Shape[][][]mpq[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 
+pph, [][]ppl[]
 
-Overfull \hbox (2.01312pt too wide) in paragraph at lines 991--992
- []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]M
-[]S[][][][]B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][]one[][
-][]affine[][][]ranking[][][]function[][][][]M[]
+Overfull \hbox (11.38148pt too wide) in paragraph at lines 239--241
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]B[]D[][][][]Shape[][][]mpq[][
+][]class[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][
+][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] dst, [][]ppl[]
 
-Overfull \hbox (0.3432pt too wide) in paragraph at lines 997--998
- []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]P
-[]R[][][][]B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][]one[][
-][]affine[][][]ranking[][][]function[][][][]P[]
-[55] [1{/var/lib/texmf/fo
-nts/map/pdftex/updmap/pdftex.map} </build/ppl-1.2/doc/ppl_logo.pdf>] [2]
-(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1pcr.fd) [3 </build/ppl-1.2/d
-oc/bugseng_logo.pdf>] [4] (./refman.toc) [1 </build/ppl-1.2/doc/ppl_logo_no_ppl
-.pdf>] [2] (./index.tex) (./GPL.tex
-Overfull \hbox (1.46292pt too wide) in paragraph at lines 1003--1004
- []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
-M[]S[][][][]B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][]all[]
-[][]affine[][][]ranking[][][]functions[][][]
+Overfull \hbox (15.68144pt too wide) in paragraph at lines 241--243
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]add[][][]recycled[][][]constraints[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][
+]mpq[][][]class[][][]t[][] ph, [][]ppl[][][][]Constraint[]
 
-Overfull \hbox (4.593pt too wide) in paragraph at lines 1009--1010
- []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
-P[]R[][][][]B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][]all[]
-[][]affine[][][]ranking[][][]functions[][][][]P[]
+Overfull \hbox (28.98207pt too wide) in paragraph at lines 243--245
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
+[]add[][][]recycled[][][]congruences[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][
+]mpq[][][]class[][][]t[][] ph, [][]ppl[][][][]Congruence[]
 
-Overfull \hbox (2.93312pt too wide) in paragraph at lines 1027--1028
- []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]M
-[]S[][][][]B[]D[][][][]Shape[][][]double[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][
-]one[][][]affine[][][]ranking[][][]function[]
+Overfull \hbox (8.45016pt too wide) in paragraph at lines 249--251
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[
+][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][]cons
+t[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] pset,
 
-Overfull \hbox (1.2632pt too wide) in paragraph at lines 1033--1034
- []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]P
-[]R[][][][]B[]D[][][][]Shape[][][]double[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][
-]one[][][]affine[][][]ranking[][][]function[]
+Overfull \hbox (6.2302pt too wide) in paragraph at lines 251--253
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[
+][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][]cons
+t[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] pset,
 
-Overfull \hbox (7.18292pt too wide) in paragraph at lines 1039--1040
- []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
-M[]S[][][][]B[]D[][][][]Shape[][][]double[][][]2()[] \OT1/pcr/m/n/8 int ppl[][]
-[]all[][][]affine[][][]ranking[][][]functions[]
+Overfull \hbox (7.89984pt too wide) in paragraph at lines 253--255
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions
+[][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][]con
+st[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] pset,
 
-Overfull \hbox (5.513pt too wide) in paragraph at lines 1045--1046
- []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
-P[]R[][][][]B[]D[][][][]Shape[][][]double[][][]2()[] \OT1/pcr/m/n/8 int ppl[][]
-[]all[][][]affine[][][]ranking[][][]functions[]
-[56pdfTeX warning (ext4): destination with the 
+Overfull \hbox (5.67987pt too wide) in paragraph at lines 255--257
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions
+[][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][]con
+st[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] pset,
+[62) (./GPL.texpdfTeX warning (ext4): destination with the 
 same identifier (name{page.1}) has been already used, duplicate ignored
 <to be read again> 
                    \relax 
@@ -9957,31 +10385,7 @@
 <to be read again> 
                    \relax 
 l.121 
-       [4]) [5 (./interfaceppl__BD__Shape__mpq__class__tag.tex] [6] [7]
-Overfull \hbox (5.86221pt too wide) in paragraph at lines 19--21
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
-class[][][]from[][][][]C[][][][]Polyhedron[][] ([][]ppl[][][][]B[]D[][][][]Shap
-e[][][]mpq[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, []
-[]ppl[][][]const[]
-
-Overfull \hbox (3.64197pt too wide) in paragraph at lines 25--27
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
-class[][][]from[][][][]Rational[][][][]Box[][] ([][]ppl[][][][]B[]D[][][][]Shap
-e[][][]mpq[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, []
-[]ppl[][][]const[]
-
-Overfull \hbox (10.56195pt too wide) in paragraph at lines 27--29
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
-class[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]
-[]B[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/p
-tm/bc/n/10 pph, [][]ppl[]
-
-Overfull \hbox (11.12201pt too wide) in paragraph at lines 29--31
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
-class[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][]
-[]B[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/p
-tm/bc/n/10 pph, [][]ppl[]
-[57 [8]])
+       [4] [5] [6] [7] [8])
 Overfull \hbox (10.35326pt too wide) in paragraph at lines 291--187
 \OT1/ptm/m/n/10 stead of this Li-cense. But first, please read [][]\OT1/pcr/m/n
 /10 http[]://www.[]gnu.[]org/philosophy/why-not-lgpl.[]
@@ -9989,7 +10393,47 @@
 Overfull \hbox (7.49895pt too wide) in paragraph at lines 97--98
 \OT1/ptm/m/n/10 ments, form-ing one sec-tion En-ti-tled "[]History"; like-wise 
 com-bine any sec-tions En-ti-tled "[]Acknowledgements",
-[13]) (./PI_SI_Features.tex [14]
+[13])
+Overfull \hbox (9.94308pt too wide) in paragraph at lines 295--296
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[
+]D[][][][]Shape[][][]mpq[][][]class[][][]from[][][]space[]
+
+Overfull \hbox (21.70216pt too wide) in paragraph at lines 301--302
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]C[][][][]Polyhedron()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B
+[]D[][][][]Shape[][][]mpq[][][]class[][][]from[][][][]C[][][][]Polyhedron
+
+Overfull \hbox (3.84358pt too wide) in paragraph at lines 307--308
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]N[]N[]C[][][][]Polyhedron()[] \OT1/pcr/m/n/8 int ppl[][][]new[][
+][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]from[][][][]N[]N[]C[]
+
+Overfull \hbox (10.45357pt too wide) in paragraph at lines 319--320
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]Rational[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B
+[]D[][][][]Shape[][][]mpq[][][]class[][][]from[][][][]Rational[]
+
+Overfull \hbox (1.37308pt too wide) in paragraph at lines 325--326
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl
+[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]from[]
+
+Overfull \hbox (2.49307pt too wide) in paragraph at lines 331--332
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl
+[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]from[]
+
+Overfull \hbox (9.29279pt too wide) in paragraph at lines 337--338
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 in
+t ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
+
+Overfull \hbox (10.41278pt too wide) in paragraph at lines 343--344
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 in
+t ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
+[63 (./PI_SI_Features.tex [14]]
 Underfull \hbox (badness 10000) in paragraph at lines 19--20
 
 
@@ -10086,79 +10530,6 @@
 Underfull \hbox (badness 10000) in paragraph at lines 374--375
 
 [20]
-Overfull \hbox (0.95065pt too wide) in paragraph at lines 39--41
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
-class[][][]from[][][][]Octagonal[][][][]Shape[][][]double[][] ([][]ppl[][][][]B
-[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/
-bc/n/10 pph,
-
-Overfull \hbox (5.40195pt too wide) in paragraph at lines 41--43
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
-class[][][]from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity[][] ([][]p
-pl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
-
-Overfull \hbox (12.93196pt too wide) in paragraph at lines 45--47
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
-class[][][]from[][][][]Grid[][][]with[][][]complexity[][] ([][]ppl[][][][]B[]D[
-][][][]Shape[][][]mpq[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n
-/10 pph, [][]ppl[]
-
-Overfull \hbox (3.1817pt too wide) in paragraph at lines 47--49
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
-class[][][]from[][][][]Rational[][][][]Box[][][]with[][][]complexity[][] ([][]p
-pl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
-
-Overfull \hbox (11.77185pt too wide) in paragraph at lines 49--51
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
-class[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]with[][][]com
-plexity[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[]
-
-Overfull \hbox (12.33191pt too wide) in paragraph at lines 51--53
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
-class[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]with[][][]com
-plexity[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[]
-
-Overfull \hbox (17.60164pt too wide) in paragraph at lines 53--55
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
-class[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]with[][]
-[]complexity[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
-
-Overfull \hbox (18.1617pt too wide) in paragraph at lines 55--57
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
-class[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][]
-[]complexity[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
-
-Overfull \hbox (4.56207pt too wide) in paragraph at lines 61--63
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
-class[][][]from[][][][]Octagonal[][][][]Shape[][][]double[][][]with[][][]comple
-xity[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
-
-Overfull \hbox (6.14209pt too wide) in paragraph at lines 65--67
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
-class[][][]from[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]B[]D[][][][
-]Shape[][][]mpq[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pp
-h, [][]ppl[]
-
-Overfull \hbox (9.18156pt too wide) in paragraph at lines 69--71
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]space[][][]dimension[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mp
-q[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
-
-Overfull \hbox (9.49162pt too wide) in paragraph at lines 71--73
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]affine[][][]dimension[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]m
-pq[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
-
-Overfull \hbox (0.2818pt too wide) in paragraph at lines 77--79
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]relation[][][]with[][][][]Congruence[][] ([][]ppl[][][]const[][][][]B[]D[][][
-][]Shape[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[]
-
-Overfull \hbox (25.56108pt too wide) in paragraph at lines 79--81
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]get[][][]constraints[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mp
-q[][][]class[][][]t[][] ph, [][]ppl[][][]const[][][][]Constraint[]
-[58
 Underfull \hbox (badness 10000) in paragraph at lines 379--380
 
 
@@ -10236,7 +10607,7 @@
 
 Underfull \hbox (badness 10000) in paragraph at lines 439--440
 
-[21]]
+[21]
 Underfull \hbox (badness 10000) in paragraph at lines 444--445
 
 
@@ -10271,6 +10642,46 @@
 Underfull \hbox (badness 10000) in paragraph at lines 484--485
 
 [22]
+Overfull \hbox (3.0421pt too wide) in paragraph at lines 349--350
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]Double[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]
+D[][][][]Shape[][][]mpq[][][]class[][][]from[][][][]Double[][][][]Box
+
+Overfull \hbox (0.82327pt too wide) in paragraph at lines 355--356
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][]ne
+w[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]from[][][][]B[]D[]
+
+Overfull \hbox (18.34299pt too wide) in paragraph at lines 361--362
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]Octagonal[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][
+][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]from[]
+
+Overfull \hbox (22.7929pt too wide) in paragraph at lines 367--368
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity()[] \OT1/pcr/m/n/8
+ int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
+
+Overfull \hbox (10.35281pt too wide) in paragraph at lines 373--374
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]N[]N[]C[][][][]Polyhedron[][][]with[][][]complexity()[] \OT1/pcr
+/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[]
+
+Overfull \hbox (5.54291pt too wide) in paragraph at lines 379--380
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]Grid[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]n
+ew[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]from[]
+
+Overfull \hbox (19.8428pt too wide) in paragraph at lines 385--386
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]Rational[][][][]Box[][][]with[][][]complexity()[] \OT1/pcr/m/n/8
+ int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
+
+Overfull \hbox (7.88231pt too wide) in paragraph at lines 391--392
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity(
+)[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[]
+[64]
 Overfull \hbox (62.5953pt too wide) in paragraph at lines 504--505
 []\OT1/pcr/m/n/10 ppl[][][][]P[]I[]P[][][][]Problem[][][]get[][][]control[][][]
 parameter(+[]Handle, +[]Control[][][][]Parameter[][][][]Name, ?Control[]
@@ -10300,83 +10711,6 @@
 Underfull \hbox (badness 10000) in paragraph at lines 544--545
 
 [23]) (./configured_domains_predicates.tex [24]
-Overfull \hbox (1.9613pt too wide) in paragraph at lines 83--85
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]get[][][]minimized[][][]constraints[][] ([][]ppl[][][]const[][][][]B[]D[][][]
-[]Shape[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[]
-
-Overfull \hbox (8.61162pt too wide) in paragraph at lines 85--87
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]get[][][]minimized[][][]congruences[][] ([][]ppl[][][]const[][][][]B[]D[][][]
-[]Shape[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[]
-
-Overfull \hbox (0.25233pt too wide) in paragraph at lines 101--103
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]bounds[][][]from[][][]above[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[
-][][]mpq[][][]class[][][]t[][] ph, [][]ppl[][][]const[]
-
-Overfull \hbox (0.86206pt too wide) in paragraph at lines 103--105
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]bounds[][][]from[][][]below[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[
-][][]mpq[][][]class[][][]t[][] ph, [][]ppl[][][]const[]
-
-Overfull \hbox (6.12149pt too wide) in paragraph at lines 109--111
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]maximize[][][]with[][][]point[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shap
-e[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[][][]const[]
-
-Overfull \hbox (14.09169pt too wide) in paragraph at lines 109--111
-[][][]\OT1/ptm/bc/n/10 Linear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]C
-oefficient[][][]t[][] ext[][][]n, [][]ppl[][][][]Coefficient[][][]t[][] ext[][]
-[]d, int $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 poptimum, [][]ppl[][][][]Genera
-tor[]
-
-Overfull \hbox (4.46144pt too wide) in paragraph at lines 111--113
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]minimize[][][]with[][][]point[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shap
-e[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[][][]const[]
-
-Overfull \hbox (14.09169pt too wide) in paragraph at lines 111--113
-[][][]\OT1/ptm/bc/n/10 Linear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]C
-oefficient[][][]t[][] ext[][][]n, [][]ppl[][][][]Coefficient[][][]t[][] ext[][]
-[]d, int $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 poptimum, [][]ppl[][][][]Genera
-tor[]
-
-Overfull \hbox (14.71156pt too wide) in paragraph at lines 115--117
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]contains[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][]const
-[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] x, [][]ppl[]
-
-Overfull \hbox (14.12123pt too wide) in paragraph at lines 119--121
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]is[][][]disjoint[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] (
-[][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
-
-Overfull \hbox (6.93167pt too wide) in paragraph at lines 121--123
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]equals[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][]const[]
-[][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] x, [][]ppl[]
-
-Overfull \hbox (12.4822pt too wide) in paragraph at lines 127--129
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]add[][][]congruence[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class
-[][][]t[][] ph, [][]ppl[][][]const[][][][]Congruence[]
-
-Overfull \hbox (3.07146pt too wide) in paragraph at lines 129--131
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]add[][][]constraints[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]clas
-s[][][]t[][] ph, [][]ppl[][][]const[][][][]Constraint[]
-
-Overfull \hbox (16.37209pt too wide) in paragraph at lines 131--133
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]add[][][]congruences[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]clas
-s[][][]t[][] ph, [][]ppl[][][]const[][][][]Congruence[]
-
-Overfull \hbox (28.89116pt too wide) in paragraph at lines 133--135
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]refine[][][]with[][][]constraint[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]m
-pq[][][]class[][][]t[][] ph, [][]ppl[][][]const[][][][]Constraint[]
-[59
 Overfull \hbox (6.19531pt too wide) in paragraph at lines 34--36
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]C[][][][]Polyhedron[][][]from[][][]space[
 ][][]dimension(+[]Dimension[][][][]Type, +[]Universe[][][]or[]
@@ -10387,7 +10721,7 @@
 
 Underfull \hbox (badness 10000) in paragraph at lines 71--72
 
-[25]]
+[25]
 Overfull \hbox (11.00215pt too wide) in paragraph at lines 104--106
 \OT1/ptm/m/it/10 Builds a new N[]NC poly-he-dron \OT1/pcr/m/sl/10 P[][][]1 \OT1
 /ptm/m/it/10 from the bd[][][]shape[][][]mpz[][][]class ref-er-enced by han-dle
@@ -10414,6 +10748,41 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]N[]N[]C[][][][]Polyhedron[][][]from[][][]
 []Octagonal[][][][]Shape[][][]mpq[][][]class(+[]Handle[][][]1, -[]Handle[]
 [26]
+Overfull \hbox (9.0023pt too wide) in paragraph at lines 397--398
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity(
+)[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (1.40201pt too wide) in paragraph at lines 403--404
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]with[][][]comple
+xity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][]
+
+Overfull \hbox (2.522pt too wide) in paragraph at lines 409--410
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]comple
+xity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][]
+
+Overfull \hbox (13.73283pt too wide) in paragraph at lines 415--416
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]Double[][][][]Box[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 i
+nt ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
+
+Overfull \hbox (12.1325pt too wide) in paragraph at lines 421--422
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]B[]D[][][][]Shape[][][]double[][][]with[][][]complexity()[] \OT1
+/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[]
+
+Overfull \hbox (0.8522pt too wide) in paragraph at lines 427--428
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]Octagonal[][][][]Shape[][][]double[][][]with[][][]complexity()[]
+ \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][]
+
+Overfull \hbox (43.37317pt too wide) in paragraph at lines 433--434
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]Constraint[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][]
+[][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]from[][][][]Constraint[]
+[65
 Overfull \hbox (15.07239pt too wide) in paragraph at lines 137--139
 \OT1/ptm/m/it/10 Builds a new C poly-he-dron \OT1/pcr/m/sl/10 P[][][]1 \OT1/ptm
 /m/it/10 from the octagonal[][][]shape[][][]double ref-er-enced by han-dle \OT1
@@ -10459,102 +10828,7 @@
 Overfull \hbox (1.39532pt too wide) in paragraph at lines 167--169
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]C[][][][]Polyhedron[][][]from[][][][]B[]D
 [][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity(+[]Handle, +[]
-[27]
-Overfull \hbox (12.2214pt too wide) in paragraph at lines 141--143
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]intersection[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]
-class[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[]
-
-Overfull \hbox (5.84169pt too wide) in paragraph at lines 145--147
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]difference[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]cl
-ass[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[]
-
-Overfull \hbox (12.7616pt too wide) in paragraph at lines 147--149
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]concatenate[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]c
-lass[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[]
-
-Overfull \hbox (11.9314pt too wide) in paragraph at lines 149--151
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]time[][][]elapse[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[]
-[][]class[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[]
-
-Overfull \hbox (5.66202pt too wide) in paragraph at lines 151--153
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]upper[][][]bound[][][]assign[][][]if[][][]exact[][] ([][]ppl[][][][]B[]D[][][
-][]Shape[][][]mpq[][][]class[][][]t[][] x, [][]ppl[][][]const[]
-
-Overfull \hbox (5.592pt too wide) in paragraph at lines 165--167
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]bounded[][][]affine[][][]image[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq
-[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
-
-Overfull \hbox (7.27184pt too wide) in paragraph at lines 165--167
-[][]\OT1/ptm/bc/n/10 type[][] var, [][]ppl[][][]const[][][][]Linear[][][][]Expr
-ession[][][]t[][] lb, [][]ppl[][][]const[][][][]Linear[][][][]Expression[][][]t
-[][] ub, [][]ppl[][][]const[][][][]Coefficient[]
-
-Overfull \hbox (18.3619pt too wide) in paragraph at lines 167--169
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]bounded[][][]affine[][][]preimage[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]
-mpq[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
-
-Overfull \hbox (7.27184pt too wide) in paragraph at lines 167--169
-[][]\OT1/ptm/bc/n/10 type[][] var, [][]ppl[][][]const[][][][]Linear[][][][]Expr
-ession[][][]t[][] lb, [][]ppl[][][]const[][][][]Linear[][][][]Expression[][][]t
-[][] ub, [][]ppl[][][]const[][][][]Coefficient[]
-
-Overfull \hbox (17.2415pt too wide) in paragraph at lines 169--171
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]generalized[][][]affine[][][]image[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][
-]mpq[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
-
-Overfull \hbox (30.0114pt too wide) in paragraph at lines 171--173
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]generalized[][][]affine[][][]preimage[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
-[][]mpq[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
-
-Overfull \hbox (3.06163pt too wide) in paragraph at lines 173--175
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]generalized[][][]affine[][][]image[][][]lhs[][][]rhs[][] ([][]ppl[][][][]B[]D
-[][][][]Shape[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[]
-
-Overfull \hbox (15.92157pt too wide) in paragraph at lines 173--175
-[][]\OT1/ptm/bc/n/10 const[][][][]Linear[][][][]Expression[][][]t[][] lhs, enum
- [][]ppl[][][]enum[][][][]Constraint[][][][]Type[][] rel-sym, [][]ppl[][][]cons
-t[][][][]Linear[][][][]Expression[]
-
-Overfull \hbox (15.83153pt too wide) in paragraph at lines 175--177
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]generalized[][][]affine[][][]preimage[][][]lhs[][][]rhs[][] ([][]ppl[][][][]B
-[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[]
-
-Overfull \hbox (15.92157pt too wide) in paragraph at lines 175--177
-[][]\OT1/ptm/bc/n/10 const[][][][]Linear[][][][]Expression[][][]t[][] lhs, enum
- [][]ppl[][][]enum[][][][]Constraint[][][][]Type[][] rel-sym, [][]ppl[][][]cons
-t[][][][]Linear[][][][]Expression[]
-
-Overfull \hbox (9.43188pt too wide) in paragraph at lines 177--179
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]add[][][]space[][][]dimensions[][][]and[][][]embed[][] ([][]ppl[][][][]B[]D[]
-[][][]Shape[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[]
-
-Overfull \hbox (10.54173pt too wide) in paragraph at lines 179--181
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]add[][][]space[][][]dimensions[][][]and[][][]project[][] ([][]ppl[][][][]B[]D
-[][][][]Shape[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[]
-
-Overfull \hbox (21.65166pt too wide) in paragraph at lines 181--183
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]remove[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]
-mpq[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
-
-Overfull \hbox (5.53194pt too wide) in paragraph at lines 183--185
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]remove[][][]higher[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][
-]Shape[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[]
-[60]
+[27]]
 Overfull \hbox (13.39532pt too wide) in paragraph at lines 170--172
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]N[]N[]C[][][][]Polyhedron[][][]from[][][]
 []B[]D[][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity(+[]Handle, +[
@@ -10605,9 +10879,7 @@
 Overfull \hbox (6.81381pt too wide) in paragraph at lines 203--205
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]C[][][][]Polyhedron[][][]from[][][][]Octa
 gonal[][][][]Shape[][][]double[][][]with[][][]complexity(+[]Handle,
-[28]This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) (preloaded format=latex)
- restricted \write18 enabled.
-
+[28]
 Overfull \hbox (18.81381pt too wide) in paragraph at lines 206--208
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]N[]N[]C[][][][]Polyhedron[][][]from[][][]
 []Octagonal[][][][]Shape[][][]double[][][]with[][][]complexity(+[]Handle,
@@ -10652,11 +10924,7 @@
 Overfull \hbox (10.9953pt too wide) in paragraph at lines 311--313
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]maximize[][][]with[][][]point(+[]H
 andle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[]
-[30]entering extended mode
-(./_formulas.tex
-LaTeX2e <2018-12-01>
-
-
+[30]
 Overfull \hbox (10.9953pt too wide) in paragraph at lines 316--318
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]minimize[][][]with[][][]point(+[]H
 andle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[]
@@ -10686,72 +10954,31 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]generalized[][][]affine[][][]image
 [][][]lhs[][][]rhs(+[]Handle, +[]Lin[][][][]Expr[][][]1, +[]
 [32]
-Overfull \hbox (16.80182pt too wide) in paragraph at lines 185--187
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]expand[][][]space[][][]dimension[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]m
-pq[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
-
-Overfull \hbox (8.07158pt too wide) in paragraph at lines 187--189
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]fold[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mp
-q[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
-
-Overfull \hbox (9.18156pt too wide) in paragraph at lines 189--191
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]map[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq
-[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
-
-Overfull \hbox (3.88039pt too wide) in paragraph at lines 191--193
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]drop[][][]some[][][]non[][][]integer[][][]points[][] ([][]ppl[][][][]B[]D[][]
-[][]Shape[][][]mpq[][][]class[][][]t[][] ph, int com-
-
-Overfull \hbox (1.2322pt too wide) in paragraph at lines 193--195
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]drop[][][]some[][][]non[][][]integer[][][]points[][][]2[][] ([][]ppl[][][][]B
-[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] ph, [][]ppl[]
-
-Overfull \hbox (3.17146pt too wide) in paragraph at lines 195--197
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]external[][][]memory[][][]in[][][]bytes[][] ([][]ppl[][][]const[][][][]B[]D[]
-[][][]Shape[][][]mpq[][][]class[][][]t[][] ps, size[]
-
-Overfull \hbox (4.35188pt too wide) in paragraph at lines 201--203
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[][]H79[][][]widening[][][]assign[][][]with[][][]tokens[][] ([][]ppl[][][][]B[]
-D[][][][]Shape[][][]mpq[][][]class[][][]t[][] x, [][]ppl[]
-
-Overfull \hbox (8.24164pt too wide) in paragraph at lines 207--209
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]widening[][][]assign[][][]with[][][]tokens[][] ([][]ppl[][][][]B[]D[][][][]Sh
-ape[][][]mpq[][][]class[][][]t[][] x, [][]ppl[][][]const[]
-
-Overfull \hbox (2.78186pt too wide) in paragraph at lines 209--211
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]widening[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]clas
-s[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[]
+Overfull \hbox (0.9232pt too wide) in paragraph at lines 439--440
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]Congruence[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][]
+[][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]from[][][]
 
-Overfull \hbox (4.19151pt too wide) in paragraph at lines 215--217
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]limited[][][][]C[]C76[][][]extrapolation[][][]assign[][][]with[][][]tokens[][
-] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[]
+Overfull \hbox (36.89323pt too wide) in paragraph at lines 445--446
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]from[][][][]Generator[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][
+][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]from[][][][]Generator[]
 
-Overfull \hbox (0.70154pt too wide) in paragraph at lines 219--221
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]limited[][][][]H79[][][]extrapolation[][][]assign[][] ([][]ppl[][][][]B[]D[][
-][][]Shape[][][]mpq[][][]class[][][]t[][] x, [][]ppl[]
+Overfull \hbox (38.1416pt too wide) in paragraph at lines 463--464
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]relati
+on[][][]with[][][][]Constraint()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh
+ape[][][]mpq[][][]class[][][]relation[][][]with[][][][]Constraint
 
-Overfull \hbox (6.82141pt too wide) in paragraph at lines 221--223
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]limited[][][][]C[]C76[][][]extrapolation[][][]assign[][] ([][]ppl[][][][]B[]D
-[][][][]Shape[][][]mpq[][][]class[][][]t[][] x, [][]ppl[]
+Overfull \hbox (31.66167pt too wide) in paragraph at lines 469--470
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]relati
+on[][][]with[][][][]Generator()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sha
+pe[][][]mpq[][][]class[][][]relation[][][]with[][][][]Generator
 
-Overfull \hbox (9.79172pt too wide) in paragraph at lines 229--231
-\OT1/ptm/bc/n/10 Shape[][][]mpq[][][]class[][][]t[][] y, [][]ppl[][][][]B[]D[][
-][][]Shape[][][]mpq[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/1
-0 p[][][]inters, [][]ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]
-Polyhedron[]
-[61
+Overfull \hbox (1.79314pt too wide) in paragraph at lines 475--476
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]relati
+on[][][]with[][][][]Congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh
+ape[][][]mpq[][][]class[][][]relation[][][]with[]
+[66]
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 404--406
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]generalized[][][]affine[][][]preim
 age[][][]lhs[][][]rhs(+[]Handle, +[]Lin[][][][]Expr[][][]
@@ -10767,7 +10994,7 @@
 Overfull \hbox (16.9953pt too wide) in paragraph at lines 441--443
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]linear[][][]partition(+[]Handle[][
 ][]1, +[]Handle[][][]2, -[]Handle[][][]3, -[]Handle[]
-[33]]
+[33]
 Overfull \hbox (18.19531pt too wide) in paragraph at lines 448--450
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][][]B[]H[]R[]Z03[][][]widening[][][]
 assign[][][]with[][][]tokens(+[]Handle[][][]1, +[]Handle[][][]2, +[]
@@ -10819,60 +11046,7 @@
 Overfull \hbox (2.0138pt too wide) in paragraph at lines 512--514
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]remove[][][]higher[][][]space[][][
 ]dimensions(+[]Handle, +[]Dimension[][][][]Type) 
-[35
-Overfull \hbox (8.77168pt too wide) in paragraph at lines 233--235
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
-class[][][]recycle[][][][]Constraint[][][][]System[][] ([][]ppl[][][][]B[]D[][]
-[][]Shape[][][]mpq[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10
- pph, [][]ppl[]
-
-Overfull \hbox (15.422pt too wide) in paragraph at lines 235--237
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
-class[][][]recycle[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]B[]D[][]
-[][]Shape[][][]mpq[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10
- pph, [][]ppl[]
-
-Overfull \hbox (7.0819pt too wide) in paragraph at lines 237--239
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]
-class[][][]recycle[][][][]Generator[][][][]System[][] ([][]ppl[][][][]B[]D[][][
-][]Shape[][][]mpq[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 
-pph, [][]ppl[]
-
-Overfull \hbox (11.38148pt too wide) in paragraph at lines 239--241
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]B[]D[][][][]Shape[][][]mpq[][
-][]class[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][
-][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] dst, [][]ppl[]
-
-Overfull \hbox (15.68144pt too wide) in paragraph at lines 241--243
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]add[][][]recycled[][][]constraints[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][
-]mpq[][][]class[][][]t[][] ph, [][]ppl[][][][]Constraint[]
-
-Overfull \hbox (28.98207pt too wide) in paragraph at lines 243--245
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
-[]add[][][]recycled[][][]congruences[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][
-]mpq[][][]class[][][]t[][] ph, [][]ppl[][][][]Congruence[]
-
-Overfull \hbox (8.45016pt too wide) in paragraph at lines 249--251
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[
-][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][]cons
-t[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] pset,
-
-Overfull \hbox (6.2302pt too wide) in paragraph at lines 251--253
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[
-][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][]cons
-t[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] pset,
-
-Overfull \hbox (7.89984pt too wide) in paragraph at lines 253--255
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions
-[][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][]con
-st[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] pset,
-
-Overfull \hbox (5.67987pt too wide) in paragraph at lines 255--257
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions
-[][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][]con
-st[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]t[][] pset,
-[62]]
+[35]
 Overfull \hbox (14.0138pt too wide) in paragraph at lines 515--517
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]expand[][][]space[][][]dimension(+
 []Handle, +[]P[]P[]L[][][][]Var, +[]Dimension[][][][]Type) 
@@ -10904,46 +11078,31 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[]
 [][]mpz[][][]class[][][]with[][][]complexity(+[]Handle, +[]Complexity,
 [37]
-Overfull \hbox (9.94308pt too wide) in paragraph at lines 295--296
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[
-]D[][][][]Shape[][][]mpq[][][]class[][][]from[][][]space[]
-
-Overfull \hbox (21.70216pt too wide) in paragraph at lines 301--302
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]C[][][][]Polyhedron()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B
-[]D[][][][]Shape[][][]mpq[][][]class[][][]from[][][][]C[][][][]Polyhedron
-
-Overfull \hbox (3.84358pt too wide) in paragraph at lines 307--308
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]N[]N[]C[][][][]Polyhedron()[] \OT1/pcr/m/n/8 int ppl[][][]new[][
-][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]from[][][][]N[]N[]C[]
-
-Overfull \hbox (10.45357pt too wide) in paragraph at lines 319--320
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]Rational[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B
-[]D[][][][]Shape[][][]mpq[][][]class[][][]from[][][][]Rational[]
+Overfull \hbox (3.0828pt too wide) in paragraph at lines 493--494
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]get[][
+][]minimized[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sha
+pe[][][]mpq[][][]class[][][]get[][][]minimized[]
 
-Overfull \hbox (1.37308pt too wide) in paragraph at lines 325--326
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl
-[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]from[]
+Overfull \hbox (8.63286pt too wide) in paragraph at lines 499--500
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]get[][
+][]minimized[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sha
+pe[][][]mpq[][][]class[][][]get[][][]minimized[]
 
-Overfull \hbox (2.49307pt too wide) in paragraph at lines 331--332
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl
-[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]from[]
+Overfull \hbox (0.2731pt too wide) in paragraph at lines 523--524
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]contai
+ns[][][]integer[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[
+][][]mpq[][][]class[][][]contains[][][]integer[]
 
-Overfull \hbox (9.29279pt too wide) in paragraph at lines 337--338
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 in
-t ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
+Overfull \hbox (2.60301pt too wide) in paragraph at lines 529--530
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]is[][]
+[]topologically[][][]closed()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape
+[][][]mpq[][][]class[][][]is[][][]topologically[][][]
 
-Overfull \hbox (10.41278pt too wide) in paragraph at lines 343--344
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 in
-t ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
-[63
+Overfull \hbox (30.05296pt too wide) in paragraph at lines 541--542
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]topolo
+gical[][][]closure[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh
+ape[][][]mpq[][][]class[][][]topological[][][]closure[]
+[67]
 Overfull \hbox (12.81381pt too wide) in paragraph at lines 615--617
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[]
 [][]mpq[][][]class[][][]with[][][]complexity(+[]Handle, +[]Complexity,
@@ -10967,7 +11126,7 @@
 Overfull \hbox (39.2138pt too wide) in paragraph at lines 630--632
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[][][][]Sh
 ape[][][]double[][][]with[][][]complexity(+[]Handle, +[]Complexity,
-[38]]
+[38]
 Overfull \hbox (7.44052pt too wide) in paragraph at lines 692--694
 \OT1/ptm/m/it/10 Unifies \OT1/pcr/m/sl/10 Dimension[][][][]Type \OT1/ptm/m/it/1
 0 with the di-men-sion of the vec-tor space en-clos-ing the grid ref-er-enced b
@@ -11003,46 +11162,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]minimize[][][]with[][][]point(+[]Handle,
  +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[][][]2, ?Boolean,
 [40]
-Overfull \hbox (3.0421pt too wide) in paragraph at lines 349--350
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]Double[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]
-D[][][][]Shape[][][]mpq[][][]class[][][]from[][][][]Double[][][][]Box
-
-Overfull \hbox (0.82327pt too wide) in paragraph at lines 355--356
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][]ne
-w[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]from[][][][]B[]D[]
-
-Overfull \hbox (18.34299pt too wide) in paragraph at lines 361--362
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]Octagonal[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][
-][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]from[]
-
-Overfull \hbox (22.7929pt too wide) in paragraph at lines 367--368
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity()[] \OT1/pcr/m/n/8
- int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
-
-Overfull \hbox (10.35281pt too wide) in paragraph at lines 373--374
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]N[]N[]C[][][][]Polyhedron[][][]with[][][]complexity()[] \OT1/pcr
-/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[]
-
-Overfull \hbox (5.54291pt too wide) in paragraph at lines 379--380
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]Grid[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]n
-ew[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]from[]
-
-Overfull \hbox (19.8428pt too wide) in paragraph at lines 385--386
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]Rational[][][][]Box[][][]with[][][]complexity()[] \OT1/pcr/m/n/8
- int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
-
-Overfull \hbox (7.88231pt too wide) in paragraph at lines 391--392
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity(
-)[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[]
-[64
 Overfull \hbox (7.24037pt too wide) in paragraph at lines 785--787
 \OT1/ptm/m/it/10 Updates the grid ref-er-enced by \OT1/pcr/m/sl/10 Handle \OT1/
 ptm/m/it/10 to one ob-tained by re-fin-ing its con-straint sys-tem with \OT1/pc
@@ -11064,7 +11183,7 @@
 Overfull \hbox (16.9953pt too wide) in paragraph at lines 822--824
 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]generalized[][][]affine[][][]image(+[]Ha
 ndle, +[]P[]P[]L[][][][]Var, +[]Relation[][][][]Symbol, +[]
-[41]]
+[41]
 Overfull \hbox (14.0138pt too wide) in paragraph at lines 825--827
 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]generalized[][][]affine[][][]preimage(+[
 ]Handle, +[]P[]P[]L[][][][]Var, +[]Relation[][][][]Symbol,
@@ -11096,42 +11215,27 @@
 Overfull \hbox (8.0138pt too wide) in paragraph at lines 846--848
 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]wrap[][][]assign(+[]Handle, +[]List[][][
 ]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[]Representation,
-[42]
-Overfull \hbox (9.0023pt too wide) in paragraph at lines 397--398
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity(
-)[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[]
-
-Overfull \hbox (1.40201pt too wide) in paragraph at lines 403--404
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]with[][][]comple
-xity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][]
-
-Overfull \hbox (2.522pt too wide) in paragraph at lines 409--410
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]comple
-xity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][]
-
-Overfull \hbox (13.73283pt too wide) in paragraph at lines 415--416
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]Double[][][][]Box[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 i
-nt ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
+[42
+Overfull \hbox (7.81178pt too wide) in paragraph at lines 571--572
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]maximi
+ze[][][]with[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][]
+[]mpq[][][]class[][][]maximize[][][]with[][][]point ( 
 
-Overfull \hbox (12.1325pt too wide) in paragraph at lines 421--422
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]B[]D[][][][]Shape[][][]double[][][]with[][][]complexity()[] \OT1
-/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[]
+Overfull \hbox (6.15161pt too wide) in paragraph at lines 577--578
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]minimi
+ze[][][]with[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][]
+[]mpq[][][]class[][][]minimize[][][]with[][][]point ( 
 
-Overfull \hbox (0.8522pt too wide) in paragraph at lines 427--428
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]Octagonal[][][][]Shape[][][]double[][][]with[][][]complexity()[]
- \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][]
+Overfull \hbox (1.11285pt too wide) in paragraph at lines 589--590
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]contai
+ns[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][
+][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]contains[][][]
 
-Overfull \hbox (43.37317pt too wide) in paragraph at lines 433--434
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]Constraint[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][]
-[][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]from[][][][]Constraint[]
-[65
+Overfull \hbox (31.82233pt too wide) in paragraph at lines 595--596
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]strict
+ly[][][]contains[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/
+8 int ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]strictly[]
+[68]]
 Overfull \hbox (6.19531pt too wide) in paragraph at lines 875--877
 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]congruence[][][]widening[][][]assign[][]
 []with[][][]tokens(+[]Handle[][][]1, +[]Handle[][][]2, +[]
@@ -11159,7 +11263,7 @@
 Overfull \hbox (8.5953pt too wide) in paragraph at lines 902--904
 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]limited[][][]generator[][][]extrapolatio
 n[][][]assign(+[]Handle[][][]1, +[]Handle[][][]2, +[]
-[43]]
+[43]
 Overfull \hbox (0.99101pt too wide) in paragraph at lines 911--913
 \OT1/ptm/m/it/10 Assigns to the grid \OT1/pcr/m/sl/10 P \OT1/ptm/m/it/10 ref-er
 -enced by \OT1/pcr/m/sl/10 Handle[][][]1 \OT1/ptm/m/it/10 the con-cate-na-tion 
@@ -11177,31 +11281,6 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][][]Octa
 gonal[][][][]Shape[][][]mpz[][][]class(+[]Handle[][][]1, -[]Handle[][][]
 [45]
-Overfull \hbox (0.9232pt too wide) in paragraph at lines 439--440
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]Congruence[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][]
-[][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]from[][][]
-
-Overfull \hbox (36.89323pt too wide) in paragraph at lines 445--446
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]from[][][][]Generator[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][
-][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]from[][][][]Generator[]
-
-Overfull \hbox (38.1416pt too wide) in paragraph at lines 463--464
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]relati
-on[][][]with[][][][]Constraint()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh
-ape[][][]mpq[][][]class[][][]relation[][][]with[][][][]Constraint
-
-Overfull \hbox (31.66167pt too wide) in paragraph at lines 469--470
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]relati
-on[][][]with[][][][]Generator()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sha
-pe[][][]mpq[][][]class[][][]relation[][][]with[][][][]Generator
-
-Overfull \hbox (1.79314pt too wide) in paragraph at lines 475--476
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]relati
-on[][][]with[][][][]Congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh
-ape[][][]mpq[][][]class[][][]relation[][][]with[]
-[66]
 Overfull \hbox (1.39532pt too wide) in paragraph at lines 1003--1005
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][][]Octa
 gonal[][][][]Shape[][][]mpq[][][]class(+[]Handle[][][]1, -[]Handle[][][]
@@ -11243,6 +11322,26 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][][]Octa
 gonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity(+[]Handle,
 [46]
+Overfull \hbox (0.89246pt too wide) in paragraph at lines 601--602
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]is[][]
+[]disjoint[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/
+m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]is[]
+
+Overfull \hbox (19.66292pt too wide) in paragraph at lines 607--608
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]equals
+[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][][
+]B[]D[][][][]Shape[][][]mpq[][][]class[][][]equals[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (16.8717pt too wide) in paragraph at lines 643--644
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]refine
+[][][]with[][][]constraint()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[
+][][]mpq[][][]class[][][]refine[][][]with[][][]constraint
+
+Overfull \hbox (22.42177pt too wide) in paragraph at lines 649--650
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]refine
+[][][]with[][][]congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[
+][][]mpq[][][]class[][][]refine[][][]with[][][]congruence
+[69]
 Overfull \hbox (15.2138pt too wide) in paragraph at lines 1039--1041
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][][]Doub
 le[][][][]Box[][][]with[][][]complexity(+[]Handle, +[]Complexity,
@@ -11255,31 +11354,6 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][][]Octa
 gonal[][][][]Shape[][][]double[][][]with[][][]complexity(+[]Handle,
 [47]
-Overfull \hbox (3.0828pt too wide) in paragraph at lines 493--494
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]get[][
-][]minimized[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sha
-pe[][][]mpq[][][]class[][][]get[][][]minimized[]
-
-Overfull \hbox (8.63286pt too wide) in paragraph at lines 499--500
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]get[][
-][]minimized[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sha
-pe[][][]mpq[][][]class[][][]get[][][]minimized[]
-
-Overfull \hbox (0.2731pt too wide) in paragraph at lines 523--524
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]contai
-ns[][][]integer[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[
-][][]mpq[][][]class[][][]contains[][][]integer[]
-
-Overfull \hbox (2.60301pt too wide) in paragraph at lines 529--530
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]is[][]
-[]topologically[][][]closed()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape
-[][][]mpq[][][]class[][][]is[][][]topologically[][][]
-
-Overfull \hbox (30.05296pt too wide) in paragraph at lines 541--542
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]topolo
-gical[][][]closure[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh
-ape[][][]mpq[][][]class[][][]topological[][][]closure[]
-[67]
 Overfull \hbox (25.3953pt too wide) in paragraph at lines 1113--1115
 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]relation[][][]with[][][]c
 onstraint(+[]Handle, +[]Constraint, ?Relation[]
@@ -11349,26 +11423,26 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]generalized[][][]affine[]
 [][]preimage(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Relation[]
 [50]
-Overfull \hbox (7.81178pt too wide) in paragraph at lines 571--572
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]maximi
-ze[][][]with[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][]
-[]mpq[][][]class[][][]maximize[][][]with[][][]point ( 
+Overfull \hbox (25.5616pt too wide) in paragraph at lines 655--656
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]refine
+[][][]with[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape
+[][][]mpq[][][]class[][][]refine[][][]with[][][]constraints
 
-Overfull \hbox (6.15161pt too wide) in paragraph at lines 577--578
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]minimi
-ze[][][]with[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][]
-[]mpq[][][]class[][][]minimize[][][]with[][][]point ( 
+Overfull \hbox (31.11166pt too wide) in paragraph at lines 661--662
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]refine
+[][][]with[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape
+[][][]mpq[][][]class[][][]refine[][][]with[][][]congruences
 
-Overfull \hbox (1.11285pt too wide) in paragraph at lines 589--590
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]contai
-ns[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][
-][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]contains[][][]
+Overfull \hbox (2.93295pt too wide) in paragraph at lines 697--698
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]upper[
+][][]bound[][][]assign[][][]if[][][]exact()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]
+D[][][][]Shape[][][]mpq[][][]class[][][]upper[][][]bound[]
 
-Overfull \hbox (31.82233pt too wide) in paragraph at lines 595--596
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]strict
-ly[][][]contains[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/
-8 int ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]strictly[]
-[68]
+Overfull \hbox (20.95264pt too wide) in paragraph at lines 703--704
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]simpli
+fy[][][]using[][][]context[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[]
+[][][]Shape[][][]mpq[][][]class[][][]simplify[][][]using[]
+[70]
 Overfull \hbox (15.79532pt too wide) in paragraph at lines 1238--1240
 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]generalized[][][]affine[]
 [][]image[][][]lhs[][][]rhs(+[]Handle, +[]Lin[][][][]Expr[][][]1, +[]
@@ -11405,26 +11479,26 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]limited[][][][]C[]C76[][]
 []extrapolation[][][]assign(+[]Handle[][][]1, +[]Handle[][][]
 [52]
-Overfull \hbox (0.89246pt too wide) in paragraph at lines 601--602
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]is[][]
-[]disjoint[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/
-m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]is[]
+Overfull \hbox (8.76266pt too wide) in paragraph at lines 715--716
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]uncons
+train[][][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]S
+hape[][][]mpq[][][]class[][][]unconstrain[]
 
-Overfull \hbox (19.66292pt too wide) in paragraph at lines 607--608
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]equals
-[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][][
-]B[]D[][][][]Shape[][][]mpq[][][]class[][][]equals[][][][]B[]D[][][][]Shape[]
+Overfull \hbox (12.65256pt too wide) in paragraph at lines 721--722
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]uncons
+train[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]
+Shape[][][]mpq[][][]class[][][]unconstrain[]
 
-Overfull \hbox (16.8717pt too wide) in paragraph at lines 643--644
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]refine
-[][][]with[][][]constraint()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[
-][][]mpq[][][]class[][][]refine[][][]with[][][]constraint
+Overfull \hbox (7.47191pt too wide) in paragraph at lines 739--740
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]bounde
+d[][][]affine[][][]image()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][
+][]mpq[][][]class[][][]bounded[][][]affine[][][]image
 
-Overfull \hbox (22.42177pt too wide) in paragraph at lines 649--650
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]refine
-[][][]with[][][]congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[
-][][]mpq[][][]class[][][]refine[][][]with[][][]congruence
-[69]
+Overfull \hbox (3.83328pt too wide) in paragraph at lines 745--746
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]bounde
+d[][][]affine[][][]preimage()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape
+[][][]mpq[][][]class[][][]bounded[][][]affine[]
+[71]
 Overfull \hbox (9.2138pt too wide) in paragraph at lines 1310--1312
 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]add[][][]space[][][]dimen
 sions[][][]and[][][]embed(+[]Handle, +[]Dimension[][][][]Type) 
@@ -11484,26 +11558,41 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
 []from[][][][]Octagonal[][][][]Shape[][][]double(+[]Handle[][][]1, -[]Handle[]
 [54]
-Overfull \hbox (25.5616pt too wide) in paragraph at lines 655--656
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]refine
-[][][]with[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape
-[][][]mpq[][][]class[][][]refine[][][]with[][][]constraints
+Overfull \hbox (20.41315pt too wide) in paragraph at lines 751--752
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]genera
+lized[][][]affine[][][]image()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shap
+e[][][]mpq[][][]class[][][]generalized[][][]affine[]
 
-Overfull \hbox (31.11166pt too wide) in paragraph at lines 661--662
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]refine
-[][][]with[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape
-[][][]mpq[][][]class[][][]refine[][][]with[][][]congruences
+Overfull \hbox (2.99301pt too wide) in paragraph at lines 757--758
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]genera
+lized[][][]affine[][][]preimage()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]S
+hape[][][]mpq[][][]class[][][]generalized[]
 
-Overfull \hbox (2.93295pt too wide) in paragraph at lines 697--698
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]upper[
-][][]bound[][][]assign[][][]if[][][]exact()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]
-D[][][][]Shape[][][]mpq[][][]class[][][]upper[][][]bound[]
+Overfull \hbox (22.05263pt too wide) in paragraph at lines 763--764
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]genera
+lized[][][]affine[][][]image[][][]lhs[][][]rhs()[] \OT1/pcr/m/n/8 int ppl[][][]
+[]B[]D[][][][]Shape[][][]mpq[][][]class[][][]generalized[]
 
-Overfull \hbox (20.95264pt too wide) in paragraph at lines 703--704
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]simpli
-fy[][][]using[][][]context[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[]
-[][][]Shape[][][]mpq[][][]class[][][]simplify[][][]using[]
-[70]
+Overfull \hbox (36.31252pt too wide) in paragraph at lines 769--770
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]genera
+lized[][][]affine[][][]preimage[][][]lhs[][][]rhs()[] \OT1/pcr/m/n/8 int ppl[][
+][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]generalized[]
+
+Overfull \hbox (17.78265pt too wide) in paragraph at lines 775--776
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]add[][
+][]space[][][]dimensions[][][]and[][][]embed()[] \OT1/pcr/m/n/8 int ppl[][][][]
+B[]D[][][][]Shape[][][]mpq[][][]class[][][]add[][][]space[]
+
+Overfull \hbox (19.81268pt too wide) in paragraph at lines 781--782
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]add[][
+][]space[][][]dimensions[][][]and[][][]project()[] \OT1/pcr/m/n/8 int ppl[][][]
+[]B[]D[][][][]Shape[][][]mpq[][][]class[][][]add[][][]space[]
+
+Overfull \hbox (37.58159pt too wide) in paragraph at lines 787--788
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]remove
+[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape
+[][][]mpq[][][]class[][][]remove[][][]space[][][]dimensions
+[72]
 Overfull \hbox (1.39532pt too wide) in paragraph at lines 1407--1409
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
 []from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[]
@@ -11555,26 +11644,6 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
 []from[][][][]Octagonal[][][][]Shape[][][]double[][][]with[][][]complexity(+[]
 [55]
-Overfull \hbox (8.76266pt too wide) in paragraph at lines 715--716
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]uncons
-train[][][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]S
-hape[][][]mpq[][][]class[][][]unconstrain[]
-
-Overfull \hbox (12.65256pt too wide) in paragraph at lines 721--722
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]uncons
-train[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]
-Shape[][][]mpq[][][]class[][][]unconstrain[]
-
-Overfull \hbox (7.47191pt too wide) in paragraph at lines 739--740
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]bounde
-d[][][]affine[][][]image()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][
-][]mpq[][][]class[][][]bounded[][][]affine[][][]image
-
-Overfull \hbox (3.83328pt too wide) in paragraph at lines 745--746
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]bounde
-d[][][]affine[][][]preimage()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape
-[][][]mpq[][][]class[][][]bounded[][][]affine[]
-[71
 Overfull \hbox (4.99533pt too wide) in paragraph at lines 1480--1482
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]strictl
 y[][][]contains[][][][]B[]D[][][][]Shape[][][]mpz[][][]class(+[]Handle[][][]1, 
@@ -11602,7 +11671,42 @@
 \OT1/ptm/m/it/10 Unifies \OT1/pcr/m/sl/10 Relation[][][][]List \OT1/ptm/m/it/10
  with the list of re-la-tions the bd shape ref-er-enced by \OT1/pcr/m/sl/10 Han
 dle \OT1/ptm/m/it/10 has with \OT1/pcr/m/sl/10 Generator\OT1/ptm/m/it/10 .
-[56]]
+[56]
+Overfull \hbox (0.1827pt too wide) in paragraph at lines 793--794
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]remove
+[][][]higher[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[
+][][][]Shape[][][]mpq[][][]class[][][]remove[]
+
+Overfull \hbox (28.74158pt too wide) in paragraph at lines 799--800
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]expand
+[][][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[
+][][]mpq[][][]class[][][]expand[][][]space[][][]dimension
+
+Overfull \hbox (13.1315pt too wide) in paragraph at lines 805--806
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]fold[]
+[][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[]
+[][]mpq[][][]class[][][]fold[][][]space[][][]dimensions
+
+Overfull \hbox (10.8016pt too wide) in paragraph at lines 811--812
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]map[][
+][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][
+][]mpq[][][]class[][][]map[][][]space[][][]dimensions
+
+Overfull \hbox (0.36298pt too wide) in paragraph at lines 817--818
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]drop[]
+[][]some[][][]non[][][]integer[][][]points()[] \OT1/pcr/m/n/8 int ppl[][][][]B[
+]D[][][][]Shape[][][]mpq[][][]class[][][]drop[][][]some[]
+
+Overfull \hbox (8.96298pt too wide) in paragraph at lines 823--824
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]drop[]
+[][]some[][][]non[][][]integer[][][]points[][][]2()[] \OT1/pcr/m/n/8 int ppl[][
+][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]drop[][][]some[]
+
+Overfull \hbox (12.23328pt too wide) in paragraph at lines 829--830
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]extern
+al[][][]memory[][][]in[][][]bytes()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][
+]Shape[][][]mpq[][][]class[][][]external[][][]memory[]
+[73]
 Overfull \hbox (56.5953pt too wide) in paragraph at lines 1511--1513
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]relatio
 n[][][]with[][][]congruence(+[]Handle, +[]Congruence, ?Relation[]
@@ -11657,41 +11761,41 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]affine[
 ][][]image(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr, +[]Coeff) 
 [58]
-Overfull \hbox (20.41315pt too wide) in paragraph at lines 751--752
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]genera
-lized[][][]affine[][][]image()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shap
-e[][][]mpq[][][]class[][][]generalized[][][]affine[]
+Overfull \hbox (12.81189pt too wide) in paragraph at lines 835--836
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]total[
+][][]memory[][][]in[][][]bytes()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh
+ape[][][]mpq[][][]class[][][]total[][][]memory[][][]in[][][]bytes
 
-Overfull \hbox (2.99301pt too wide) in paragraph at lines 757--758
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]genera
-lized[][][]affine[][][]preimage()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]S
-hape[][][]mpq[][][]class[][][]generalized[]
+Overfull \hbox (1.7624pt too wide) in paragraph at lines 841--842
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]B[]H
+[]M[]Z05[][][]widening[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int
+ ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]B[]
 
-Overfull \hbox (22.05263pt too wide) in paragraph at lines 763--764
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]genera
-lized[][][]affine[][][]image[][][]lhs[][][]rhs()[] \OT1/pcr/m/n/8 int ppl[][][]
-[]B[]D[][][][]Shape[][][]mpq[][][]class[][][]generalized[]
+Overfull \hbox (29.86266pt too wide) in paragraph at lines 847--848
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]H79[
+][][]widening[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][
+][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]H79[][][]widening[]
 
-Overfull \hbox (36.31252pt too wide) in paragraph at lines 769--770
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]genera
-lized[][][]affine[][][]preimage[][][]lhs[][][]rhs()[] \OT1/pcr/m/n/8 int ppl[][
-][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]generalized[]
+Overfull \hbox (13.27301pt too wide) in paragraph at lines 853--854
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]B[]H
+[]M[]Z05[][][]widening[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][]
+[]Shape[][][]mpq[][][]class[][][][]B[]H[]M[]Z05[][][]widening[]
 
-Overfull \hbox (17.78265pt too wide) in paragraph at lines 775--776
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]add[][
-][]space[][][]dimensions[][][]and[][][]embed()[] \OT1/pcr/m/n/8 int ppl[][][][]
-B[]D[][][][]Shape[][][]mpq[][][]class[][][]add[][][]space[]
+Overfull \hbox (8.39174pt too wide) in paragraph at lines 859--860
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]H79[
+][][]widening[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[]
+[][]mpq[][][]class[][][][]H79[][][]widening[][][]assign ( 
 
-Overfull \hbox (19.81268pt too wide) in paragraph at lines 781--782
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]add[][
-][]space[][][]dimensions[][][]and[][][]project()[] \OT1/pcr/m/n/8 int ppl[][][]
-[]B[]D[][][][]Shape[][][]mpq[][][]class[][][]add[][][]space[]
+Overfull \hbox (22.88277pt too wide) in paragraph at lines 865--866
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]wideni
+ng[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][]
+[][]Shape[][][]mpq[][][]class[][][]widening[][][]assign[]
 
-Overfull \hbox (37.58159pt too wide) in paragraph at lines 787--788
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]remove
-[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape
-[][][]mpq[][][]class[][][]remove[][][]space[][][]dimensions
-[72]
+Overfull \hbox (1.84178pt too wide) in paragraph at lines 877--878
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limite
+d[][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] 
+\OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[]
+[74]
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 1605--1607
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]affine[
 ][][]preimage(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr, +[]
@@ -11724,41 +11828,41 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]wrap[][
 ][]assign(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[]
 [59]
-Overfull \hbox (0.1827pt too wide) in paragraph at lines 793--794
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]remove
-[][][]higher[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[
-][][][]Shape[][][]mpq[][][]class[][][]remove[]
+Overfull \hbox (23.22203pt too wide) in paragraph at lines 883--884
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limite
+d[][][][]H79[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/
+m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
 
-Overfull \hbox (28.74158pt too wide) in paragraph at lines 799--800
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]expand
-[][][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[
-][][]mpq[][][]class[][][]expand[][][]space[][][]dimension
+Overfull \hbox (3.00206pt too wide) in paragraph at lines 889--890
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limite
+d[][][][]C[]C76[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/p
+cr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]mpq[]
 
-Overfull \hbox (13.1315pt too wide) in paragraph at lines 805--806
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]fold[]
-[][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[]
-[][]mpq[][][]class[][][]fold[][][]space[][][]dimensions
+Overfull \hbox (28.7124pt too wide) in paragraph at lines 895--896
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limite
+d[][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl
+[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limited[]
 
-Overfull \hbox (10.8016pt too wide) in paragraph at lines 811--812
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]map[][
-][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][
-][]mpq[][][]class[][][]map[][][]space[][][]dimensions
+Overfull \hbox (5.93262pt too wide) in paragraph at lines 901--902
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limite
+d[][][][]H79[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B
+[]D[][][][]Shape[][][]mpq[][][]class[][][]limited[]
 
-Overfull \hbox (0.36298pt too wide) in paragraph at lines 817--818
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]drop[]
-[][]some[][][]non[][][]integer[][][]points()[] \OT1/pcr/m/n/8 int ppl[][][][]B[
-]D[][][][]Shape[][][]mpq[][][]class[][][]drop[][][]some[]
+Overfull \hbox (12.59267pt too wide) in paragraph at lines 907--908
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limite
+d[][][][]C[]C76[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][]
+[]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limited[]
 
-Overfull \hbox (8.96298pt too wide) in paragraph at lines 823--824
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]drop[]
-[][]some[][][]non[][][]integer[][][]points[][][]2()[] \OT1/pcr/m/n/8 int ppl[][
-][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]drop[][][]some[]
+Overfull \hbox (3.96262pt too wide) in paragraph at lines 913--914
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]C[]C
+76[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int 
+ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]C[]
 
-Overfull \hbox (12.23328pt too wide) in paragraph at lines 829--830
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]extern
-al[][][]memory[][][]in[][][]bytes()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][
-]Shape[][][]mpq[][][]class[][][]external[][][]memory[]
-[73]
+Overfull \hbox (29.87323pt too wide) in paragraph at lines 919--920
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]C[]C
+76[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][
+]Shape[][][]mpq[][][]class[][][][]C[]C76[][][]extrapolation[]
+[75]
 Overfull \hbox (3.79532pt too wide) in paragraph at lines 1648--1650
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]simplif
 y[][][]using[][][]context[][][]assign(+[]Handle[][][]1, +[]Handle[]
@@ -11809,41 +11913,31 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][]
 []space[][][]dimensions[][][]and[][][]embed(+[]Handle, +[]Dimension[]
 [61]
-Overfull \hbox (12.81189pt too wide) in paragraph at lines 835--836
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]total[
-][][]memory[][][]in[][][]bytes()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh
-ape[][][]mpq[][][]class[][][]total[][][]memory[][][]in[][][]bytes
-
-Overfull \hbox (1.7624pt too wide) in paragraph at lines 841--842
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]B[]H
-[]M[]Z05[][][]widening[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int
- ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]B[]
-
-Overfull \hbox (29.86266pt too wide) in paragraph at lines 847--848
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]H79[
-][][]widening[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][
-][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]H79[][][]widening[]
+Overfull \hbox (1.05347pt too wide) in paragraph at lines 925--926
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]C[]C
+76[][][]narrowing[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sha
+pe[][][]mpq[][][]class[][][][]C[]C76[][][]narrowing[][][]
 
-Overfull \hbox (13.27301pt too wide) in paragraph at lines 853--854
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]B[]H
-[]M[]Z05[][][]widening[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][]
-[]Shape[][][]mpq[][][]class[][][][]B[]H[]M[]Z05[][][]widening[]
+Overfull \hbox (15.77289pt too wide) in paragraph at lines 943--944
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]recycle[][][][]Constraint[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[
+][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]recycle[]
 
-Overfull \hbox (8.39174pt too wide) in paragraph at lines 859--860
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]H79[
-][][]widening[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[]
-[][]mpq[][][]class[][][][]H79[][][]widening[][][]assign ( 
+Overfull \hbox (21.32295pt too wide) in paragraph at lines 949--950
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]recycle[][][][]Congruence[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[
+][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]recycle[]
 
-Overfull \hbox (22.88277pt too wide) in paragraph at lines 865--866
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]wideni
-ng[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][]
-[][]Shape[][][]mpq[][][]class[][][]widening[][][]assign[]
+Overfull \hbox (14.09296pt too wide) in paragraph at lines 955--956
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
+][]recycle[][][][]Generator[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[]
+[][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]recycle[]
 
-Overfull \hbox (1.84178pt too wide) in paragraph at lines 877--878
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limite
-d[][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] 
-\OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[]
-[74]
+Overfull \hbox (3.71283pt too wide) in paragraph at lines 961--962
+ []\OT1/ptm/b/n/10 ppl[][][]assign[][][][]B[]D[][][][]Shape[][][]mpq[][][]class
+[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int 
+ppl[][][]assign[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
+[76]
 Overfull \hbox (27.79532pt too wide) in paragraph at lines 1713--1715
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][]
 []space[][][]dimensions[][][]and[][][]project(+[]Handle, +[]Dimension[]
@@ -11877,42 +11971,7 @@
 Overfull \hbox (3.2138pt too wide) in paragraph at lines 1757--1759
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
 []from[][][]congruences(+[]Congruence[][][][]System, -[]Handle) 
-[62
-Overfull \hbox (23.22203pt too wide) in paragraph at lines 883--884
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limite
-d[][][][]H79[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/
-m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
-
-Overfull \hbox (3.00206pt too wide) in paragraph at lines 889--890
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limite
-d[][][][]C[]C76[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/p
-cr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]mpq[]
-
-Overfull \hbox (28.7124pt too wide) in paragraph at lines 895--896
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limite
-d[][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl
-[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limited[]
-
-Overfull \hbox (5.93262pt too wide) in paragraph at lines 901--902
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limite
-d[][][][]H79[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B
-[]D[][][][]Shape[][][]mpq[][][]class[][][]limited[]
-
-Overfull \hbox (12.59267pt too wide) in paragraph at lines 907--908
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limite
-d[][][][]C[]C76[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][]
-[]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limited[]
-
-Overfull \hbox (3.96262pt too wide) in paragraph at lines 913--914
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]C[]C
-76[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int 
-ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]C[]
-
-Overfull \hbox (29.87323pt too wide) in paragraph at lines 919--920
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]C[]C
-76[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][
-]Shape[][][]mpq[][][]class[][][][]C[]C76[][][]extrapolation[]
-[75]]
+[62]
 Underfull \hbox (badness 10000) in paragraph at lines 1768--1769
 
 
@@ -11943,32 +12002,52 @@
 Overfull \hbox (1.39532pt too wide) in paragraph at lines 1807--1809
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
 []from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[]
-[63]
-Overfull \hbox (1.05347pt too wide) in paragraph at lines 925--926
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][][]C[]C
-76[][][]narrowing[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sha
-pe[][][]mpq[][][]class[][][][]C[]C76[][][]narrowing[][][]
+[63
+Overfull \hbox (38.69156pt too wide) in paragraph at lines 967--968
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]add[][
+][]recycled[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shap
+e[][][]mpq[][][]class[][][]add[][][]recycled[][][]constraints
 
-Overfull \hbox (15.77289pt too wide) in paragraph at lines 943--944
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]recycle[][][][]Constraint[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[
-][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]recycle[]
+Overfull \hbox (0.4231pt too wide) in paragraph at lines 973--974
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]add[][
+][]recycled[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shap
+e[][][]mpq[][][]class[][][]add[][][]recycled[][][]
 
-Overfull \hbox (21.32295pt too wide) in paragraph at lines 949--950
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]recycle[][][][]Congruence[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[
-][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]recycle[]
+Overfull \hbox (6.13176pt too wide) in paragraph at lines 979--980
+ []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]M[]S[][][][]B[]D[][][]
+[]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]termination[][][]te
+st[][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpq[][][]class ( 
 
-Overfull \hbox (14.09296pt too wide) in paragraph at lines 955--956
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][
-][]recycle[][][][]Generator[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[]
-[][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]recycle[]
+Overfull \hbox (4.46184pt too wide) in paragraph at lines 985--986
+ []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]P[]R[][][][]B[]D[][][]
+[]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]termination[][][]te
+st[][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpq[][][]class ( 
 
-Overfull \hbox (3.71283pt too wide) in paragraph at lines 961--962
- []\OT1/ptm/b/n/10 ppl[][][]assign[][][][]B[]D[][][][]Shape[][][]mpq[][][]class
-[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int 
-ppl[][][]assign[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
-[76]
+Overfull \hbox (8.48293pt too wide) in paragraph at lines 991--992
+ []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]M
+[]S[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][]
+[]one[][][]affine[][][]ranking[][][]function[]
+
+Overfull \hbox (6.813pt too wide) in paragraph at lines 997--998
+ []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]P
+[]R[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][]
+[]one[][][]affine[][][]ranking[][][]function[]
+
+Overfull \hbox (12.73273pt too wide) in paragraph at lines 1003--1004
+ []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
+M[]S[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][
+][]all[][][]affine[][][]ranking[][][]functions[]
+
+Overfull \hbox (11.0628pt too wide) in paragraph at lines 1009--1010
+ []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
+P[]R[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][
+][]all[][][]affine[][][]ranking[][][]functions[]
+
+Overfull \hbox (14.11327pt too wide) in paragraph at lines 1015--1016
+ []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]M[]S[][][][]B[]D[][][]
+[]Shape[][][]mpq[][][]class[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][]termination[
+][][]test[][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
+[77]]
 Overfull \hbox (13.39532pt too wide) in paragraph at lines 1810--1812
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
 []from[][][][]N[]N[]C[][][][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[
@@ -12016,6 +12095,31 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
 []from[][][][]Octagonal[][][][]Shape[][][]double[][][]with[][][]complexity(+[]
 [64]
+Overfull \hbox (12.44334pt too wide) in paragraph at lines 1021--1022
+ []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]P[]R[][][][]B[]D[][][]
+[]Shape[][][]mpq[][][]class[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][]termination[
+][][]test[][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
+
+Overfull \hbox (17.08293pt too wide) in paragraph at lines 1027--1028
+ []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]M
+[]S[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]2()[] \OT1/pcr/m/n/8 int 
+ppl[][][]one[][][]affine[][][]ranking[][][]function[]
+
+Overfull \hbox (15.41301pt too wide) in paragraph at lines 1033--1034
+ []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]P
+[]R[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]2()[] \OT1/pcr/m/n/8 int 
+ppl[][][]one[][][]affine[][][]ranking[][][]function[]
+
+Overfull \hbox (21.33273pt too wide) in paragraph at lines 1039--1040
+ []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
+M[]S[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]2()[] \OT1/pcr/m/n/8 int
+ ppl[][][]all[][][]affine[][][]ranking[][][]functions[]
+
+Overfull \hbox (19.66281pt too wide) in paragraph at lines 1045--1046
+ []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
+P[]R[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]2()[] \OT1/pcr/m/n/8 int
+ ppl[][][]all[][][]affine[][][]ranking[][][]functions[]
+[78]) (./interfaceppl__BD__Shape__mpz__class__tag.tex
 Overfull \hbox (4.99533pt too wide) in paragraph at lines 1880--1882
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]strictl
 y[][][]contains[][][][]B[]D[][][][]Shape[][][]mpq[][][]class(+[]Handle[][][]1, 
@@ -12044,51 +12148,6 @@
  with the list of re-la-tions the bd shape ref-er-enced by \OT1/pcr/m/sl/10 Han
 dle \OT1/ptm/m/it/10 has with \OT1/pcr/m/sl/10 Generator\OT1/ptm/m/it/10 .
 [65]
-Overfull \hbox (38.69156pt too wide) in paragraph at lines 967--968
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]add[][
-][]recycled[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shap
-e[][][]mpq[][][]class[][][]add[][][]recycled[][][]constraints
-
-Overfull \hbox (0.4231pt too wide) in paragraph at lines 973--974
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]add[][
-][]recycled[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shap
-e[][][]mpq[][][]class[][][]add[][][]recycled[][][]
-
-Overfull \hbox (6.13176pt too wide) in paragraph at lines 979--980
- []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]M[]S[][][][]B[]D[][][]
-[]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]termination[][][]te
-st[][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpq[][][]class ( 
-
-Overfull \hbox (4.46184pt too wide) in paragraph at lines 985--986
- []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]P[]R[][][][]B[]D[][][]
-[]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]termination[][][]te
-st[][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpq[][][]class ( 
-
-Overfull \hbox (8.48293pt too wide) in paragraph at lines 991--992
- []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]M
-[]S[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][]
-[]one[][][]affine[][][]ranking[][][]function[]
-
-Overfull \hbox (6.813pt too wide) in paragraph at lines 997--998
- []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]P
-[]R[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][]
-[]one[][][]affine[][][]ranking[][][]function[]
-
-Overfull \hbox (12.73273pt too wide) in paragraph at lines 1003--1004
- []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
-M[]S[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][
-][]all[][][]affine[][][]ranking[][][]functions[]
-
-Overfull \hbox (11.0628pt too wide) in paragraph at lines 1009--1010
- []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
-P[]R[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][
-][]all[][][]affine[][][]ranking[][][]functions[]
-
-Overfull \hbox (14.11327pt too wide) in paragraph at lines 1015--1016
- []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]M[]S[][][][]B[]D[][][]
-[]Shape[][][]mpq[][][]class[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][]termination[
-][][]test[][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
-[77
 Overfull \hbox (56.5953pt too wide) in paragraph at lines 1911--1913
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]relatio
 n[][][]with[][][]congruence(+[]Handle, +[]Congruence, ?Relation[]
@@ -12121,7 +12180,7 @@
 Overfull \hbox (0.81381pt too wide) in paragraph at lines 1941--1943
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]minimiz
 e[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1,
-[66]]
+[66]
 Overfull \hbox (25.80045pt too wide) in paragraph at lines 1977--1979
 \OT1/ptm/m/it/10 Updates the bd shape ref-er-enced by \OT1/pcr/m/sl/10 Handle \
 OT1/ptm/m/it/10 to one ob-tained by re-fin-ing its con-straint sys-tem with \OT
@@ -12143,31 +12202,47 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]affine[
 ][][]image(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr, +[]Coeff) 
 [67]
-Overfull \hbox (12.44334pt too wide) in paragraph at lines 1021--1022
- []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]P[]R[][][][]B[]D[][][]
-[]Shape[][][]mpq[][][]class[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][]termination[
-][][]test[][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[]
+Overfull \hbox (4.7421pt too wide) in paragraph at lines 19--21
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
+class[][][]from[][][][]C[][][][]Polyhedron[][] ([][]ppl[][][][]B[]D[][][][]Shap
+e[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, []
+[]ppl[][][]const[]
 
-Overfull \hbox (17.08293pt too wide) in paragraph at lines 1027--1028
- []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]M
-[]S[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]2()[] \OT1/pcr/m/n/8 int 
-ppl[][][]one[][][]affine[][][]ranking[][][]function[]
+Overfull \hbox (2.52185pt too wide) in paragraph at lines 25--27
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
+class[][][]from[][][][]Rational[][][][]Box[][] ([][]ppl[][][][]B[]D[][][][]Shap
+e[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, []
+[]ppl[][][]const[]
 
-Overfull \hbox (15.41301pt too wide) in paragraph at lines 1033--1034
- []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]P
-[]R[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]2()[] \OT1/pcr/m/n/8 int 
-ppl[][][]one[][][]affine[][][]ranking[][][]function[]
+Overfull \hbox (9.44183pt too wide) in paragraph at lines 27--29
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
+class[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]
+[]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/p
+tm/bc/n/10 pph, [][]ppl[]
 
-Overfull \hbox (21.33273pt too wide) in paragraph at lines 1039--1040
- []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
-M[]S[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]2()[] \OT1/pcr/m/n/8 int
- ppl[][][]all[][][]affine[][][]ranking[][][]functions[]
+Overfull \hbox (10.00189pt too wide) in paragraph at lines 29--31
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
+class[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][]
+[]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/p
+tm/bc/n/10 pph, [][]ppl[]
 
-Overfull \hbox (19.66281pt too wide) in paragraph at lines 1045--1046
- []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
-P[]R[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]2()[] \OT1/pcr/m/n/8 int
- ppl[][][]all[][][]affine[][][]ranking[][][]functions[]
-[78
+Overfull \hbox (12.8701pt too wide) in paragraph at lines 31--33
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
+class[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[
+][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\
+OT1/ptm/bc/n/10 pph,
+
+Overfull \hbox (4.28183pt too wide) in paragraph at lines 41--43
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
+class[][][]from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity[][] ([][]p
+pl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
+
+Overfull \hbox (11.81184pt too wide) in paragraph at lines 45--47
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
+class[][][]from[][][][]Grid[][][]with[][][]complexity[][] ([][]ppl[][][][]B[]D[
+][][][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n
+/10 pph, [][]ppl[]
+[79]
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 2005--2007
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]affine[
 ][][]preimage(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr, +[]
@@ -12199,7 +12274,7 @@
 Overfull \hbox (3.79532pt too wide) in paragraph at lines 2026--2028
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]wrap[][
 ][]assign(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[]
-[68]]) (./interfaceppl__BD__Shape__mpz__class__tag.tex
+[68]
 Overfull \hbox (3.79532pt too wide) in paragraph at lines 2048--2050
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]simplif
 y[][][]using[][][]context[][][]assign(+[]Handle[][][]1, +[]Handle[]
@@ -12225,6 +12300,72 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limited
 [][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign[][][]with[][][]tokens(+[]
 [69]
+Overfull \hbox (2.06158pt too wide) in paragraph at lines 47--49
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
+class[][][]from[][][][]Rational[][][][]Box[][][]with[][][]complexity[][] ([][]p
+pl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
+
+Overfull \hbox (10.65173pt too wide) in paragraph at lines 49--51
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
+class[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]with[][][]com
+plexity[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[]
+
+Overfull \hbox (11.21179pt too wide) in paragraph at lines 51--53
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
+class[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]with[][][]com
+plexity[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[]
+
+Overfull \hbox (17.04158pt too wide) in paragraph at lines 53--55
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
+class[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]with[][]
+[]complexity[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (17.60164pt too wide) in paragraph at lines 55--57
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
+class[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][]
+[]complexity[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (4.00201pt too wide) in paragraph at lines 61--63
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
+class[][][]from[][][][]Octagonal[][][][]Shape[][][]double[][][]with[][][]comple
+xity[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (5.02197pt too wide) in paragraph at lines 65--67
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
+class[][][]from[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]B[]D[][][][
+]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pp
+h, [][]ppl[]
+
+Overfull \hbox (8.06145pt too wide) in paragraph at lines 69--71
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]space[][][]dimension[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mp
+z[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
+
+Overfull \hbox (8.3715pt too wide) in paragraph at lines 71--73
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]affine[][][]dimension[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]m
+pz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
+
+Overfull \hbox (24.44096pt too wide) in paragraph at lines 79--81
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]get[][][]constraints[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mp
+z[][][]class[][][]t[][] ph, [][]ppl[][][]const[][][][]Constraint[]
+
+Overfull \hbox (37.7416pt too wide) in paragraph at lines 81--83
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]get[][][]congruences[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mp
+z[][][]class[][][]t[][] ph, [][]ppl[][][]const[][][][]Congruence[]
+
+Overfull \hbox (0.84119pt too wide) in paragraph at lines 83--85
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]get[][][]minimized[][][]constraints[][] ([][]ppl[][][]const[][][][]B[]D[][][]
+[]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[]
+
+Overfull \hbox (7.4915pt too wide) in paragraph at lines 85--87
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]get[][][]minimized[][][]congruences[][] ([][]ppl[][][]const[][][][]B[]D[][][]
+[]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[]
+[80]
 Overfull \hbox (25.39532pt too wide) in paragraph at lines 2079--2081
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limited
 [][][][]H79[][][]extrapolation[][][]assign[][][]with[][][]tokens(+[]Handle[]
@@ -12250,47 +12391,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]add[][]
 []space[][][]dimensions[][][]and[][][]embed(+[]Handle, +[]Dimension[]
 [70]
-Overfull \hbox (4.7421pt too wide) in paragraph at lines 19--21
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
-class[][][]from[][][][]C[][][][]Polyhedron[][] ([][]ppl[][][][]B[]D[][][][]Shap
-e[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, []
-[]ppl[][][]const[]
-
-Overfull \hbox (2.52185pt too wide) in paragraph at lines 25--27
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
-class[][][]from[][][][]Rational[][][][]Box[][] ([][]ppl[][][][]B[]D[][][][]Shap
-e[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, []
-[]ppl[][][]const[]
-
-Overfull \hbox (9.44183pt too wide) in paragraph at lines 27--29
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
-class[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]
-[]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/p
-tm/bc/n/10 pph, [][]ppl[]
-
-Overfull \hbox (10.00189pt too wide) in paragraph at lines 29--31
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
-class[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][]
-[]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/p
-tm/bc/n/10 pph, [][]ppl[]
-
-Overfull \hbox (12.8701pt too wide) in paragraph at lines 31--33
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
-class[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[
-][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\
-OT1/ptm/bc/n/10 pph,
-
-Overfull \hbox (4.28183pt too wide) in paragraph at lines 41--43
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
-class[][][]from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity[][] ([][]p
-pl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
-
-Overfull \hbox (11.81184pt too wide) in paragraph at lines 45--47
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
-class[][][]from[][][][]Grid[][][]with[][][]complexity[][] ([][]ppl[][][][]B[]D[
-][][][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n
-/10 pph, [][]ppl[]
-[79
 Overfull \hbox (27.79532pt too wide) in paragraph at lines 2113--2115
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]add[][]
 []space[][][]dimensions[][][]and[][][]project(+[]Handle, +[]Dimension[]
@@ -12324,7 +12424,7 @@
 Overfull \hbox (12.19531pt too wide) in paragraph at lines 2157--2159
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpz[][][]clas
 s[][][]from[][][]congruences(+[]Congruence[][][][]System, -[]
-[71]]
+[71]
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 2160--2162
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpz[][][]clas
 s[][][]from[][][]generators(+[]Generator[][][][]System, -[]
@@ -12376,6 +12476,98 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpz[][][]clas
 s[][][]from[][][][]B[]D[][][][]Shape[][][]double(+[]Handle[][][]1, -[]Handle[]
 [72]
+Overfull \hbox (5.00137pt too wide) in paragraph at lines 109--111
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]maximize[][][]with[][][]point[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shap
+e[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[][][]const[]
+
+Overfull \hbox (14.09169pt too wide) in paragraph at lines 109--111
+[][][]\OT1/ptm/bc/n/10 Linear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]C
+oefficient[][][]t[][] ext[][][]n, [][]ppl[][][][]Coefficient[][][]t[][] ext[][]
+[]d, int $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 poptimum, [][]ppl[][][][]Genera
+tor[]
+
+Overfull \hbox (3.34132pt too wide) in paragraph at lines 111--113
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]minimize[][][]with[][][]point[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shap
+e[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[][][]const[]
+
+Overfull \hbox (14.09169pt too wide) in paragraph at lines 111--113
+[][][]\OT1/ptm/bc/n/10 Linear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]C
+oefficient[][][]t[][] ext[][][]n, [][]ppl[][][][]Coefficient[][][]t[][] ext[][]
+[]d, int $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 poptimum, [][]ppl[][][][]Genera
+tor[]
+
+Overfull \hbox (13.03139pt too wide) in paragraph at lines 115--117
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]contains[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]const
+[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[]
+
+Overfull \hbox (13.83092pt too wide) in paragraph at lines 117--119
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]strictly[][][]contains[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]
+ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
+
+Overfull \hbox (12.44106pt too wide) in paragraph at lines 119--121
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]is[][][]disjoint[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] (
+[][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
+
+Overfull \hbox (5.2515pt too wide) in paragraph at lines 121--123
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]equals[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]const[]
+[][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[]
+
+Overfull \hbox (11.36208pt too wide) in paragraph at lines 127--129
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]add[][][]congruence[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class
+[][][]t[][] ph, [][]ppl[][][]const[][][][]Congruence[]
+
+Overfull \hbox (1.95134pt too wide) in paragraph at lines 129--131
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]add[][][]constraints[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]clas
+s[][][]t[][] ph, [][]ppl[][][]const[][][][]Constraint[]
+
+Overfull \hbox (15.25197pt too wide) in paragraph at lines 131--133
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]add[][][]congruences[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]clas
+s[][][]t[][] ph, [][]ppl[][][]const[][][][]Congruence[]
+
+Overfull \hbox (27.77104pt too wide) in paragraph at lines 133--135
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]refine[][][]with[][][]constraint[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]m
+pz[][][]class[][][]t[][] ph, [][]ppl[][][]const[][][][]Constraint[]
+
+Overfull \hbox (11.10129pt too wide) in paragraph at lines 141--143
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]intersection[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]
+class[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (4.72157pt too wide) in paragraph at lines 145--147
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]difference[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]cl
+ass[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (11.64148pt too wide) in paragraph at lines 147--149
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]concatenate[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]c
+lass[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (10.81128pt too wide) in paragraph at lines 149--151
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]time[][][]elapse[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[]
+[][]class[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (4.5419pt too wide) in paragraph at lines 151--153
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]upper[][][]bound[][][]assign[][][]if[][][]exact[][] ([][]ppl[][][][]B[]D[][][
+][]Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[][][]const[]
+
+Overfull \hbox (10.4113pt too wide) in paragraph at lines 153--155
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]simplify[][][]using[][][]context[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]
+Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[][][]const[]
+[81
 Overfull \hbox (19.39532pt too wide) in paragraph at lines 2204--2206
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpz[][][]clas
 s[][][]from[][][][]Octagonal[][][][]Shape[][][]double(+[]Handle[][][]1, -[]
@@ -12428,7 +12620,7 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpz[][][]clas
 s[][][]from[][][][]Octagonal[][][][]Shape[][][]double[][][]with[][][]complexity
 (+[]
-[73]
+[73]]
 Overfull \hbox (9.79532pt too wide) in paragraph at lines 2277--2279
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]co
 ntains[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class(+[]Handle[]
@@ -12445,72 +12637,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]eq
 uals[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class(+[]Handle[][][]
 [74]
-Overfull \hbox (2.06158pt too wide) in paragraph at lines 47--49
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
-class[][][]from[][][][]Rational[][][][]Box[][][]with[][][]complexity[][] ([][]p
-pl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
-
-Overfull \hbox (10.65173pt too wide) in paragraph at lines 49--51
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
-class[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]with[][][]com
-plexity[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[]
-
-Overfull \hbox (11.21179pt too wide) in paragraph at lines 51--53
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
-class[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]with[][][]com
-plexity[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[]
-
-Overfull \hbox (17.04158pt too wide) in paragraph at lines 53--55
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
-class[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]with[][]
-[]complexity[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
-
-Overfull \hbox (17.60164pt too wide) in paragraph at lines 55--57
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
-class[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][]
-[]complexity[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
-
-Overfull \hbox (4.00201pt too wide) in paragraph at lines 61--63
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
-class[][][]from[][][][]Octagonal[][][][]Shape[][][]double[][][]with[][][]comple
-xity[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
-
-Overfull \hbox (5.02197pt too wide) in paragraph at lines 65--67
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
-class[][][]from[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]B[]D[][][][
-]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pp
-h, [][]ppl[]
-
-Overfull \hbox (8.06145pt too wide) in paragraph at lines 69--71
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]space[][][]dimension[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mp
-z[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
-
-Overfull \hbox (8.3715pt too wide) in paragraph at lines 71--73
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]affine[][][]dimension[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]m
-pz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
-
-Overfull \hbox (24.44096pt too wide) in paragraph at lines 79--81
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]get[][][]constraints[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mp
-z[][][]class[][][]t[][] ph, [][]ppl[][][]const[][][][]Constraint[]
-
-Overfull \hbox (37.7416pt too wide) in paragraph at lines 81--83
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]get[][][]congruences[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mp
-z[][][]class[][][]t[][] ph, [][]ppl[][][]const[][][][]Congruence[]
-
-Overfull \hbox (0.84119pt too wide) in paragraph at lines 83--85
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]get[][][]minimized[][][]constraints[][] ([][]ppl[][][]const[][][][]B[]D[][][]
-[]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[]
-
-Overfull \hbox (7.4915pt too wide) in paragraph at lines 85--87
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]get[][][]minimized[][][]congruences[][] ([][]ppl[][][]const[][][][]B[]D[][][]
-[]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[]
-[80]
 Overfull \hbox (5.6138pt too wide) in paragraph at lines 2302--2304
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]af
 fine[][][]dimension(+[]Handle, ?Dimension[][][][]Type) 
@@ -12587,77 +12713,106 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]re
 fine[][][]with[][][]congruences( +[]Handle, +[]Congruence[]
 [76]
-Overfull \hbox (5.00137pt too wide) in paragraph at lines 109--111
+Overfull \hbox (4.47188pt too wide) in paragraph at lines 165--167
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]maximize[][][]with[][][]point[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shap
-e[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[][][]const[]
+[]bounded[][][]affine[][][]image[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz
+[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
 
-Overfull \hbox (14.09169pt too wide) in paragraph at lines 109--111
-[][][]\OT1/ptm/bc/n/10 Linear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]C
-oefficient[][][]t[][] ext[][][]n, [][]ppl[][][][]Coefficient[][][]t[][] ext[][]
-[]d, int $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 poptimum, [][]ppl[][][][]Genera
-tor[]
+Overfull \hbox (7.27184pt too wide) in paragraph at lines 165--167
+[][]\OT1/ptm/bc/n/10 type[][] var, [][]ppl[][][]const[][][][]Linear[][][][]Expr
+ession[][][]t[][] lb, [][]ppl[][][]const[][][][]Linear[][][][]Expression[][][]t
+[][] ub, [][]ppl[][][]const[][][][]Coefficient[]
 
-Overfull \hbox (3.34132pt too wide) in paragraph at lines 111--113
+Overfull \hbox (17.24178pt too wide) in paragraph at lines 167--169
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]minimize[][][]with[][][]point[][] ([][]ppl[][][]const[][][][]B[]D[][][][]Shap
-e[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[][][]const[]
+[]bounded[][][]affine[][][]preimage[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]
+mpz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
 
-Overfull \hbox (14.09169pt too wide) in paragraph at lines 111--113
-[][][]\OT1/ptm/bc/n/10 Linear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]C
-oefficient[][][]t[][] ext[][][]n, [][]ppl[][][][]Coefficient[][][]t[][] ext[][]
-[]d, int $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 poptimum, [][]ppl[][][][]Genera
-tor[]
+Overfull \hbox (7.27184pt too wide) in paragraph at lines 167--169
+[][]\OT1/ptm/bc/n/10 type[][] var, [][]ppl[][][]const[][][][]Linear[][][][]Expr
+ession[][][]t[][] lb, [][]ppl[][][]const[][][][]Linear[][][][]Expression[][][]t
+[][] ub, [][]ppl[][][]const[][][][]Coefficient[]
 
-Overfull \hbox (13.03139pt too wide) in paragraph at lines 115--117
+Overfull \hbox (16.12138pt too wide) in paragraph at lines 169--171
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]contains[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]const
-[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[]
+[]generalized[][][]affine[][][]image[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][
+]mpz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
 
-Overfull \hbox (13.83092pt too wide) in paragraph at lines 117--119
+Overfull \hbox (28.89128pt too wide) in paragraph at lines 171--173
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]strictly[][][]contains[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]
-ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
+[]generalized[][][]affine[][][]preimage[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
+[][]mpz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
 
-Overfull \hbox (12.44106pt too wide) in paragraph at lines 119--121
+Overfull \hbox (1.94151pt too wide) in paragraph at lines 173--175
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]is[][][]disjoint[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] (
-[][]ppl[][][]const[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
+[]generalized[][][]affine[][][]image[][][]lhs[][][]rhs[][] ([][]ppl[][][][]B[]D
+[][][][]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[]
 
-Overfull \hbox (5.2515pt too wide) in paragraph at lines 121--123
+Overfull \hbox (15.92157pt too wide) in paragraph at lines 173--175
+[][]\OT1/ptm/bc/n/10 const[][][][]Linear[][][][]Expression[][][]t[][] lhs, enum
+ [][]ppl[][][]enum[][][][]Constraint[][][][]Type[][] rel-sym, [][]ppl[][][]cons
+t[][][][]Linear[][][][]Expression[]
+
+Overfull \hbox (14.71141pt too wide) in paragraph at lines 175--177
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]equals[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]const[]
-[][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[]
+[]generalized[][][]affine[][][]preimage[][][]lhs[][][]rhs[][] ([][]ppl[][][][]B
+[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[]
 
-Overfull \hbox (11.36208pt too wide) in paragraph at lines 127--129
+Overfull \hbox (15.92157pt too wide) in paragraph at lines 175--177
+[][]\OT1/ptm/bc/n/10 const[][][][]Linear[][][][]Expression[][][]t[][] lhs, enum
+ [][]ppl[][][]enum[][][][]Constraint[][][][]Type[][] rel-sym, [][]ppl[][][]cons
+t[][][][]Linear[][][][]Expression[]
+
+Overfull \hbox (8.31177pt too wide) in paragraph at lines 177--179
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]add[][][]congruence[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class
-[][][]t[][] ph, [][]ppl[][][]const[][][][]Congruence[]
+[]add[][][]space[][][]dimensions[][][]and[][][]embed[][] ([][]ppl[][][][]B[]D[]
+[][][]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[]
 
-Overfull \hbox (1.95134pt too wide) in paragraph at lines 129--131
+Overfull \hbox (9.42162pt too wide) in paragraph at lines 179--181
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]add[][][]constraints[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]clas
-s[][][]t[][] ph, [][]ppl[][][]const[][][][]Constraint[]
+[]add[][][]space[][][]dimensions[][][]and[][][]project[][] ([][]ppl[][][][]B[]D
+[][][][]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[]
 
-Overfull \hbox (15.25197pt too wide) in paragraph at lines 131--133
+Overfull \hbox (20.53154pt too wide) in paragraph at lines 181--183
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]add[][][]congruences[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]clas
-s[][][]t[][] ph, [][]ppl[][][]const[][][][]Congruence[]
+[]remove[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]
+mpz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
 
-Overfull \hbox (27.77104pt too wide) in paragraph at lines 133--135
+Overfull \hbox (4.41182pt too wide) in paragraph at lines 183--185
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]refine[][][]with[][][]constraint[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]m
-pz[][][]class[][][]t[][] ph, [][]ppl[][][]const[][][][]Constraint[]
+[]remove[][][]higher[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][
+]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[]
 
-Overfull \hbox (11.10129pt too wide) in paragraph at lines 141--143
+Overfull \hbox (15.6817pt too wide) in paragraph at lines 185--187
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]intersection[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]
-class[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[]
+[]expand[][][]space[][][]dimension[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]m
+pz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
 
-Overfull \hbox (4.72157pt too wide) in paragraph at lines 145--147
+Overfull \hbox (6.95146pt too wide) in paragraph at lines 187--189
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]difference[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]cl
-ass[][][]t[][] x, [][]ppl[][][]const[][][
+[]fold[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mp
+z[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
+
+Overfull \hbox (8.06145pt too wide) in paragraph at lines 189--191
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]map[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz
+[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
+
+Overfull \hbox (2.76027pt too wide) in paragraph at lines 191--193
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]drop[][][]some[][][]non[][][]integer[][][]points[][] ([][]ppl[][][][]B[]D[][]
+[][]Shape[][][]mpz[][][]class[][][]t[][] ph, int com-
+
+Overfull \hbox (0.11208pt too wide) in paragraph at lines 193--195
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]drop[][][]some[][][]non[][][]integer[][][]points[][][]2[][] ([][]ppl[][][][]B
+[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[]
+
+Overfull \hbox (2.05135pt too wide) in paragraph at lines 195--197
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
+[]external[][][]memory[][][]in[][][]bytes[][] ([][]ppl[][][]const[][][][]B[]D[]
+[][][]Shape[][][]mpz[][][]class[][][]t[][] ps, size[]
+[82]
 Overfull \hbox (2.5953pt too wide) in paragraph at lines 2396--2398
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]un
 constrain[][][]space[][][]dimension(+[]Handle, +[]P[]P[]
@@ -12702,28 +12857,7 @@
 Overfull \hbox (12.81381pt too wide) in paragraph at lines 2423--2425
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]ge
 neralized[][][]affine[][][]preimage[][][]lhs[][][]rhs(+[]Handle,
-[77]][]B[]D[][][][]Shape[]
-
-Overfull \hbox (11.64148pt too wide) in paragraph at lines 147--149
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]concatenate[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]c
-lass[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[]
-
-Overfull \hbox (10.81128pt too wide) in paragraph at lines 149--151
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]time[][][]elapse[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[]
-[][]class[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[]
-
-Overfull \hbox (4.5419pt too wide) in paragraph at lines 151--153
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]upper[][][]bound[][][]assign[][][]if[][][]exact[][] ([][]ppl[][][][]B[]D[][][
-][]Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[][][]const[]
-
-Overfull \hbox (10.4113pt too wide) in paragraph at lines 153--155
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]simplify[][][]using[][][]context[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]
-Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[][][]const[]
-[81
+[77]
 Overfull \hbox (24.81381pt too wide) in paragraph at lines 2426--2428
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]wr
 ap[][][]assign(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width,
@@ -12780,7 +12914,7 @@
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 2482--2484
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][][]
 C[]C76[][][]narrowing[][][]assign(+[]Handle[][][]1, +[]Handle[]
-[79]]
+[79]
 Overfull \hbox (3.79532pt too wide) in paragraph at lines 2498--2500
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]ad
 d[][][]space[][][]dimensions[][][]and[][][]embed(+[]Handle, +[]
@@ -12860,79 +12994,75 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas
 s[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class(+[]Handle[]
 [81]
-Overfull \hbox (4.47188pt too wide) in paragraph at lines 165--167
+Overfull \hbox (3.23177pt too wide) in paragraph at lines 201--203
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]bounded[][][]affine[][][]image[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz
-[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
-
-Overfull \hbox (7.27184pt too wide) in paragraph at lines 165--167
-[][]\OT1/ptm/bc/n/10 type[][] var, [][]ppl[][][]const[][][][]Linear[][][][]Expr
-ession[][][]t[][] lb, [][]ppl[][][]const[][][][]Linear[][][][]Expression[][][]t
-[][] ub, [][]ppl[][][]const[][][][]Coefficient[]
+[][]H79[][][]widening[][][]assign[][][]with[][][]tokens[][] ([][]ppl[][][][]B[]
+D[][][][]Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[]
 
-Overfull \hbox (17.24178pt too wide) in paragraph at lines 167--169
+Overfull \hbox (7.12152pt too wide) in paragraph at lines 207--209
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]bounded[][][]affine[][][]preimage[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]
-mpz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
-
-Overfull \hbox (7.27184pt too wide) in paragraph at lines 167--169
-[][]\OT1/ptm/bc/n/10 type[][] var, [][]ppl[][][]const[][][][]Linear[][][][]Expr
-ession[][][]t[][] lb, [][]ppl[][][]const[][][][]Linear[][][][]Expression[][][]t
-[][] ub, [][]ppl[][][]const[][][][]Coefficient[]
+[]widening[][][]assign[][][]with[][][]tokens[][] ([][]ppl[][][][]B[]D[][][][]Sh
+ape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[][][]const[]
 
-Overfull \hbox (16.12138pt too wide) in paragraph at lines 169--171
+Overfull \hbox (1.66174pt too wide) in paragraph at lines 209--211
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]generalized[][][]affine[][][]image[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][
-]mpz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
+[]widening[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]clas
+s[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[]
 
-Overfull \hbox (28.89128pt too wide) in paragraph at lines 171--173
+Overfull \hbox (3.0714pt too wide) in paragraph at lines 215--217
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]generalized[][][]affine[][][]preimage[][] ([][]ppl[][][][]B[]D[][][][]Shape[]
-[][]mpz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
+[]limited[][][][]C[]C76[][][]extrapolation[][][]assign[][][]with[][][]tokens[][
+] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[]
 
-Overfull \hbox (1.94151pt too wide) in paragraph at lines 173--175
+Overfull \hbox (5.7013pt too wide) in paragraph at lines 221--223
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]generalized[][][]affine[][][]image[][][]lhs[][][]rhs[][] ([][]ppl[][][][]B[]D
-[][][][]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[]
+[]limited[][][][]C[]C76[][][]extrapolation[][][]assign[][] ([][]ppl[][][][]B[]D
+[][][][]Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[]
 
-Overfull \hbox (15.92157pt too wide) in paragraph at lines 173--175
-[][]\OT1/ptm/bc/n/10 const[][][][]Linear[][][][]Expression[][][]t[][] lhs, enum
- [][]ppl[][][]enum[][][][]Constraint[][][][]Type[][] rel-sym, [][]ppl[][][]cons
-t[][][][]Linear[][][][]Expression[]
+Overfull \hbox (8.6716pt too wide) in paragraph at lines 229--231
+\OT1/ptm/bc/n/10 Shape[][][]mpz[][][]class[][][]t[][] y, [][]ppl[][][][]B[]D[][
+][][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/1
+0 p[][][]inters, [][]ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]
+Polyhedron[]
 
-Overfull \hbox (14.71141pt too wide) in paragraph at lines 175--177
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]generalized[][][]affine[][][]preimage[][][]lhs[][][]rhs[][] ([][]ppl[][][][]B
-[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[]
+Overfull \hbox (7.65157pt too wide) in paragraph at lines 233--235
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
+class[][][]recycle[][][][]Constraint[][][][]System[][] ([][]ppl[][][][]B[]D[][]
+[][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10
+ pph, [][]ppl[]
 
-Overfull \hbox (15.92157pt too wide) in paragraph at lines 175--177
-[][]\OT1/ptm/bc/n/10 const[][][][]Linear[][][][]Expression[][][]t[][] lhs, enum
- [][]ppl[][][]enum[][][][]Constraint[][][][]Type[][] rel-sym, [][]ppl[][][]cons
-t[][][][]Linear[][][][]Expression[]
+Overfull \hbox (14.30188pt too wide) in paragraph at lines 235--237
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
+class[][][]recycle[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]B[]D[][]
+[][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10
+ pph, [][]ppl[]
 
-Overfull \hbox (8.31177pt too wide) in paragraph at lines 177--179
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]add[][][]space[][][]dimensions[][][]and[][][]embed[][] ([][]ppl[][][][]B[]D[]
-[][][]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[]
+Overfull \hbox (5.96178pt too wide) in paragraph at lines 237--239
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
+class[][][]recycle[][][][]Generator[][][][]System[][] ([][]ppl[][][][]B[]D[][][
+][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 
+pph, [][]ppl[]
 
-Overfull \hbox (9.42162pt too wide) in paragraph at lines 179--181
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]add[][][]space[][][]dimensions[][][]and[][][]project[][] ([][]ppl[][][][]B[]D
-[][][][]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[]
+Overfull \hbox (9.70131pt too wide) in paragraph at lines 239--241
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]B[]D[][][][]Shape[][][]mpz[][
+][]class[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][
+][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] dst, [][]ppl[]
 
-Overfull \hbox (20.53154pt too wide) in paragraph at lines 181--183
+Overfull \hbox (14.56133pt too wide) in paragraph at lines 241--243
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]remove[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]
-mpz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
+[]add[][][]recycled[][][]constraints[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][
+]mpz[][][]class[][][]t[][] ph, [][]ppl[][][][]Constraint[]
 
-Overfull \hbox (4.41182pt too wide) in paragraph at lines 183--185
+Overfull \hbox (27.86195pt too wide) in paragraph at lines 243--245
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]remove[][][]higher[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][
-]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[]
+[]add[][][]recycled[][][]congruences[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][
+]mpz[][][]class[][][]t[][] ph, [][]ppl[][][][]Congruence[]
 
-Overfull \hbox (15.6817pt too wide) in paragraph at lines 185--187
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]expand[][][
+Overfull \hbox (7.33005pt too wide) in paragraph at lines 249--251
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[
+][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]cons
+t[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] pset,
+[83]
 Overfull \hbox (7.39532pt too wide) in paragraph at lines 2583--2585
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas
 s[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class(+[]Handle[]
@@ -12980,33 +13110,6 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas
 s[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]co
 mplexity(+[]
-[82]]space[][][]dimension[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]m
-pz[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
-
-Overfull \hbox (6.95146pt too wide) in paragraph at lines 187--189
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]fold[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mp
-z[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
-
-Overfull \hbox (8.06145pt too wide) in paragraph at lines 189--191
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]map[][][]space[][][]dimensions[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz
-[][][]class[][][]t[][] ph, [][]ppl[][][]dimension[]
-
-Overfull \hbox (2.76027pt too wide) in paragraph at lines 191--193
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]drop[][][]some[][][]non[][][]integer[][][]points[][] ([][]ppl[][][][]B[]D[][]
-[][]Shape[][][]mpz[][][]class[][][]t[][] ph, int com-
-
-Overfull \hbox (0.11208pt too wide) in paragraph at lines 193--195
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]drop[][][]some[][][]non[][][]integer[][][]points[][][]2[][] ([][]ppl[][][][]B
-[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] ph, [][]ppl[]
-
-Overfull \hbox (2.05135pt too wide) in paragraph at lines 195--197
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]external[][][]memory[][][]in[][][]bytes[][] ([][]ppl[][][]const[][][][]B[]D[]
-[][][]Shape[][][]mpz[][][]class[][][]t[][] ps, size[]
 [82]
 Overfull \hbox (10.41382pt too wide) in paragraph at lines 2619--2621
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas
@@ -13077,6 +13180,36 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]mi
 nimize(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[]
 [84]
+Overfull \hbox (5.11008pt too wide) in paragraph at lines 251--253
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[
+][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]cons
+t[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] pset,
+
+Overfull \hbox (6.77972pt too wide) in paragraph at lines 253--255
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions
+[][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]con
+st[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] pset,
+
+Overfull \hbox (4.55975pt too wide) in paragraph at lines 255--257
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions
+[][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]con
+st[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] pset,
+
+Overfull \hbox (8.82309pt too wide) in paragraph at lines 295--296
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]from[][][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[
+]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][]space[]
+
+Overfull \hbox (20.58217pt too wide) in paragraph at lines 301--302
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]from[][][][]C[][][][]Polyhedron()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B
+[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]C[][][][]Polyhedron
+
+Overfull \hbox (2.72359pt too wide) in paragraph at lines 307--308
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]from[][][][]N[]N[]C[][][][]Polyhedron()[] \OT1/pcr/m/n/8 int ppl[][][]new[][
+][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]N[]N[]C[]
+[84
 Overfull \hbox (36.19531pt too wide) in paragraph at lines 2724--2726
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]ma
 ximize[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[]
@@ -13100,7 +13233,7 @@
 Overfull \hbox (23.6138pt too wide) in paragraph at lines 2765--2767
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]re
 fine[][][]with[][][]constraint( +[]Handle, +[]Constraint) 
-[85]
+[85]]
 Overfull \hbox (23.6138pt too wide) in paragraph at lines 2768--2770
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]re
 fine[][][]with[][][]congruence( +[]Handle, +[]Congruence) 
@@ -13150,75 +13283,46 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]ge
 neralized[][][]affine[][][]preimage(+[]Handle, +[]P[]P[]
 [86]
-Overfull \hbox (3.23177pt too wide) in paragraph at lines 201--203
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[][]H79[][][]widening[][][]assign[][][]with[][][]tokens[][] ([][]ppl[][][][]B[]
-D[][][][]Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[]
-
-Overfull \hbox (7.12152pt too wide) in paragraph at lines 207--209
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]widening[][][]assign[][][]with[][][]tokens[][] ([][]ppl[][][][]B[]D[][][][]Sh
-ape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[][][]const[]
-
-Overfull \hbox (1.66174pt too wide) in paragraph at lines 209--211
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]widening[][][]assign[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]clas
-s[][][]t[][] x, [][]ppl[][][]const[][][][]B[]D[][][][]Shape[]
-
-Overfull \hbox (3.0714pt too wide) in paragraph at lines 215--217
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]limited[][][][]C[]C76[][][]extrapolation[][][]assign[][][]with[][][]tokens[][
-] ([][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[]
-
-Overfull \hbox (5.7013pt too wide) in paragraph at lines 221--223
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]limited[][][][]C[]C76[][][]extrapolation[][][]assign[][] ([][]ppl[][][][]B[]D
-[][][][]Shape[][][]mpz[][][]class[][][]t[][] x, [][]ppl[]
-
-Overfull \hbox (8.6716pt too wide) in paragraph at lines 229--231
-\OT1/ptm/bc/n/10 Shape[][][]mpz[][][]class[][][]t[][] y, [][]ppl[][][][]B[]D[][
-][][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/1
-0 p[][][]inters, [][]ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]
-Polyhedron[]
+Overfull \hbox (9.33357pt too wide) in paragraph at lines 319--320
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]from[][][][]Rational[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B
+[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]Rational[]
 
-Overfull \hbox (7.65157pt too wide) in paragraph at lines 233--235
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
-class[][][]recycle[][][][]Constraint[][][][]System[][] ([][]ppl[][][][]B[]D[][]
-[][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10
- pph, [][]ppl[]
+Overfull \hbox (0.25308pt too wide) in paragraph at lines 325--326
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl
+[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[]
 
-Overfull \hbox (14.30188pt too wide) in paragraph at lines 235--237
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
-class[][][]recycle[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]B[]D[][]
-[][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10
- pph, [][]ppl[]
+Overfull \hbox (1.37308pt too wide) in paragraph at lines 331--332
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl
+[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[]
 
-Overfull \hbox (5.96178pt too wide) in paragraph at lines 237--239
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]
-class[][][]recycle[][][][]Generator[][][][]System[][] ([][]ppl[][][][]B[]D[][][
-][]Shape[][][]mpz[][][]class[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 
-pph, [][]ppl[]
+Overfull \hbox (8.17279pt too wide) in paragraph at lines 337--338
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 in
+t ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
 
-Overfull \hbox (9.70131pt too wide) in paragraph at lines 239--241
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]B[]D[][][][]Shape[][][]mpz[][
-][]class[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][
-][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] dst, [][]ppl[]
+Overfull \hbox (9.29279pt too wide) in paragraph at lines 343--344
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 in
+t ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
 
-Overfull \hbox (14.56133pt too wide) in paragraph at lines 241--243
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]add[][][]recycled[][][]constraints[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][
-]mpz[][][]class[][][]t[][] ph, [][]ppl[][][][]Constraint[]
+Overfull \hbox (1.9221pt too wide) in paragraph at lines 349--350
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]from[][][][]Double[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]
+D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]Double[][][][]Box
 
-Overfull \hbox (27.86195pt too wide) in paragraph at lines 243--245
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
-[]add[][][]recycled[][][]congruences[][] ([][]ppl[][][][]B[]D[][][][]Shape[][][
-]mpz[][][]class[][][]t[][] ph, [][]ppl[][][][]Congruence[]
+Overfull \hbox (2.58328pt too wide) in paragraph at lines 355--356
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]from[][][][]B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][]ne
+w[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]B[]D[][][]
 
-Overfull \hbox (7.33005pt too wide) in paragraph at lines 249--251
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[
-][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]cons
-t[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] pset,
-[83
+Overfull \hbox (17.22299pt too wide) in paragraph at lines 361--362
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]from[][][][]Octagonal[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][
+][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[]
+[85]
 Overfull \hbox (15.79532pt too wide) in paragraph at lines 2808--2810
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]ge
 neralized[][][]affine[][][]image[][][]lhs[][][]rhs(+[]Handle, +[]
@@ -13242,7 +13346,7 @@
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 2839--2841
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]li
 near[][][]partition(+[]Handle[][][]1, +[]Handle[][][]2, -[]
-[87]]
+[87]
 Overfull \hbox (9.79532pt too wide) in paragraph at lines 2846--2848
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][][]
 B[]H[]M[]Z05[][][]widening[][][]assign[][][]with[][][]tokens(+[]Handle[]
@@ -13284,6 +13388,41 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][][]
 C[]C76[][][]narrowing[][][]assign(+[]Handle[][][]1, +[]Handle[]
 [88]
+Overfull \hbox (21.6729pt too wide) in paragraph at lines 367--368
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity()[] \OT1/pcr/m/n/8
+ int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
+
+Overfull \hbox (9.23282pt too wide) in paragraph at lines 373--374
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]from[][][][]N[]N[]C[][][][]Polyhedron[][][]with[][][]complexity()[] \OT1/pcr
+/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[]
+
+Overfull \hbox (4.42291pt too wide) in paragraph at lines 379--380
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]from[][][][]Grid[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]n
+ew[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[]
+
+Overfull \hbox (18.72281pt too wide) in paragraph at lines 385--386
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]from[][][][]Rational[][][][]Box[][][]with[][][]complexity()[] \OT1/pcr/m/n/8
+ int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
+
+Overfull \hbox (6.76231pt too wide) in paragraph at lines 391--392
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity(
+)[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (7.88231pt too wide) in paragraph at lines 397--398
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity(
+)[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (0.28201pt too wide) in paragraph at lines 403--404
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]with[][][]comple
+xity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][]
+[86]
 Overfull \hbox (3.79532pt too wide) in paragraph at lines 2886--2888
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]ad
 d[][][]space[][][]dimensions[][][]and[][][]embed(+[]Handle, +[]
@@ -13336,36 +13475,41 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][]
 []Polyhedron[][][][]Grid[][][]from[][][][]Grid(+[]Handle[][][]1, -[]Handle[]
 [90]
-Overfull \hbox (5.11008pt too wide) in paragraph at lines 251--253
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[
-][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]cons
-t[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] pset,
+Overfull \hbox (1.40201pt too wide) in paragraph at lines 409--410
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]comple
+xity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][]
 
-Overfull \hbox (6.77972pt too wide) in paragraph at lines 253--255
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions
-[][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]con
-st[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] pset,
+Overfull \hbox (12.61284pt too wide) in paragraph at lines 415--416
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]from[][][][]Double[][][][]Box[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 i
+nt ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
 
-Overfull \hbox (4.55975pt too wide) in paragraph at lines 255--257
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions
-[][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][]con
-st[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]t[][] pset,
+Overfull \hbox (11.01251pt too wide) in paragraph at lines 421--422
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]from[][][][]B[]D[][][][]Shape[][][]double[][][]with[][][]complexity()[] \OT1
+/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[]
 
-Overfull \hbox (8.82309pt too wide) in paragraph at lines 295--296
+Overfull \hbox (23.73222pt too wide) in paragraph at lines 427--428
  []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[
-]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][]space[]
+][]from[][][][]Octagonal[][][][]Shape[][][]double[][][]with[][][]complexity()[]
+ \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[]
 
-Overfull \hbox (20.58217pt too wide) in paragraph at lines 301--302
+Overfull \hbox (42.25317pt too wide) in paragraph at lines 433--434
  []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]C[][][][]Polyhedron()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B
-[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]C[][][][]Polyhedron
+][]from[][][][]Constraint[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][]
+[][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]Constraint[]
 
-Overfull \hbox (2.72359pt too wide) in paragraph at lines 307--308
+Overfull \hbox (47.80324pt too wide) in paragraph at lines 439--440
  []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]N[]N[]C[][][][]Polyhedron()[] \OT1/pcr/m/n/8 int ppl[][][]new[][
-][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]N[]N[]C[]
-[84]
+][]from[][][][]Congruence[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][]
+[][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]Congruence[]
+
+Overfull \hbox (35.77324pt too wide) in paragraph at lines 445--446
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]from[][][][]Generator[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][
+][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]Generator[]
+[87]
 Overfull \hbox (3.79532pt too wide) in paragraph at lines 2956--2958
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][]
 []Polyhedron[][][][]Grid[][][]from[][][][]Rational[][][][]Box(+[]Handle[]
@@ -13481,46 +13625,31 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][]
 []Polyhedron[][][][]Grid[][][]from[][][][]Constraints[][][][]Product[][][]
 [92]
-Overfull \hbox (9.33357pt too wide) in paragraph at lines 319--320
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]Rational[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B
-[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]Rational[]
-
-Overfull \hbox (0.25308pt too wide) in paragraph at lines 325--326
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl
-[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[]
-
-Overfull \hbox (1.37308pt too wide) in paragraph at lines 331--332
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl
-[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[]
-
-Overfull \hbox (8.17279pt too wide) in paragraph at lines 337--338
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 in
-t ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
+Overfull \hbox (37.0216pt too wide) in paragraph at lines 463--464
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]relati
+on[][][]with[][][][]Constraint()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh
+ape[][][]mpz[][][]class[][][]relation[][][]with[][][][]Constraint
 
-Overfull \hbox (9.29279pt too wide) in paragraph at lines 343--344
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 in
-t ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
+Overfull \hbox (30.54167pt too wide) in paragraph at lines 469--470
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]relati
+on[][][]with[][][][]Generator()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sha
+pe[][][]mpz[][][]class[][][]relation[][][]with[][][][]Generator
 
-Overfull \hbox (1.9221pt too wide) in paragraph at lines 349--350
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]Double[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]
-D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]Double[][][][]Box
+Overfull \hbox (0.67314pt too wide) in paragraph at lines 475--476
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]relati
+on[][][]with[][][][]Congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh
+ape[][][]mpz[][][]class[][][]relation[][][]with[]
 
-Overfull \hbox (2.58328pt too wide) in paragraph at lines 355--356
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]B[]D[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][]ne
-w[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]B[]D[][][]
+Overfull \hbox (1.9628pt too wide) in paragraph at lines 493--494
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]get[][
+][]minimized[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sha
+pe[][][]mpz[][][]class[][][]get[][][]minimized[]
 
-Overfull \hbox (17.22299pt too wide) in paragraph at lines 361--362
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]Octagonal[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][
-][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[]
-[85]
+Overfull \hbox (7.51286pt too wide) in paragraph at lines 499--500
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]get[][
+][]minimized[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sha
+pe[][][]mpz[][][]class[][][]get[][][]minimized[]
+[88]
 Overfull \hbox (15.2138pt too wide) in paragraph at lines 3041--3043
 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
 ron[][][][]Grid[][][]is[][][]topologically[][][]closed(+[]Handle) 
@@ -13593,41 +13722,21 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
 ron[][][][]Grid[][][]total[][][]memory[][][]in[][][]bytes(+[]Handle,
 [94]
-Overfull \hbox (21.6729pt too wide) in paragraph at lines 367--368
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity()[] \OT1/pcr/m/n/8
- int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
-
-Overfull \hbox (9.23282pt too wide) in paragraph at lines 373--374
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]N[]N[]C[][][][]Polyhedron[][][]with[][][]complexity()[] \OT1/pcr
-/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[]
-
-Overfull \hbox (4.42291pt too wide) in paragraph at lines 379--380
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]Grid[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]n
-ew[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[]
-
-Overfull \hbox (18.72281pt too wide) in paragraph at lines 385--386
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]Rational[][][][]Box[][][]with[][][]complexity()[] \OT1/pcr/m/n/8
- int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
-
-Overfull \hbox (6.76231pt too wide) in paragraph at lines 391--392
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity(
-)[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[]
+Overfull \hbox (2.03311pt too wide) in paragraph at lines 523--524
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]contai
+ns[][][]integer[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[
+][][]mpz[][][]class[][][]contains[][][]integer[][][]
 
-Overfull \hbox (7.88231pt too wide) in paragraph at lines 397--398
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity(
-)[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[]
+Overfull \hbox (1.48302pt too wide) in paragraph at lines 529--530
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]is[][]
+[]topologically[][][]closed()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape
+[][][]mpz[][][]class[][][]is[][][]topologically[][][]
 
-Overfull \hbox (0.28201pt too wide) in paragraph at lines 403--404
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]with[][][]comple
-xity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][]
-[86
+Overfull \hbox (28.93297pt too wide) in paragraph at lines 541--542
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]topolo
+gical[][][]closure[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh
+ape[][][]mpz[][][]class[][][]topological[][][]closure[]
+[89
 Overfull \hbox (41.6138pt too wide) in paragraph at lines 3129--3131
 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
 ron[][][][]Grid[][][]add[][][]constraint(+[]Handle, +[]Constraint) 
@@ -13716,41 +13825,36 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
 ron[][][][]Grid[][][]difference[][][]assign(+[]Handle[][][]1, +[]
 [96]
-Overfull \hbox (1.40201pt too wide) in paragraph at lines 409--410
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]comple
-xity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][]
-
-Overfull \hbox (12.61284pt too wide) in paragraph at lines 415--416
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]Double[][][][]Box[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 i
-nt ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
+Overfull \hbox (6.69179pt too wide) in paragraph at lines 571--572
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]maximi
+ze[][][]with[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][]
+[]mpz[][][]class[][][]maximize[][][]with[][][]point ( 
 
-Overfull \hbox (11.01251pt too wide) in paragraph at lines 421--422
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]B[]D[][][][]Shape[][][]double[][][]with[][][]complexity()[] \OT1
-/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[]
+Overfull \hbox (5.03162pt too wide) in paragraph at lines 577--578
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]minimi
+ze[][][]with[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][]
+[]mpz[][][]class[][][]minimize[][][]with[][][]point ( 
 
-Overfull \hbox (23.73222pt too wide) in paragraph at lines 427--428
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]Octagonal[][][][]Shape[][][]double[][][]with[][][]complexity()[]
- \OT1/pcr/m/n/8 int ppl[][][]new[][][][]B[]D[][][][]Shape[]
+Overfull \hbox (3.67287pt too wide) in paragraph at lines 589--590
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]contai
+ns[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][
+][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]contains[][][][]B[]
 
-Overfull \hbox (42.25317pt too wide) in paragraph at lines 433--434
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]Constraint[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][]
-[][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]Constraint[]
+Overfull \hbox (29.58234pt too wide) in paragraph at lines 595--596
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]strict
+ly[][][]contains[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/
+8 int ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]strictly[]
 
-Overfull \hbox (47.80324pt too wide) in paragraph at lines 439--440
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]Congruence[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][]
-[][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]Congruence[]
+Overfull \hbox (1.53247pt too wide) in paragraph at lines 601--602
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]is[][]
+[]disjoint[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/
+m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]is[][][]
 
-Overfull \hbox (35.77324pt too wide) in paragraph at lines 445--446
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]from[][][][]Generator[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][
-][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]from[][][][]Generator[]
-[87
+Overfull \hbox (17.42293pt too wide) in paragraph at lines 607--608
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]equals
+[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][][
+]B[]D[][][][]Shape[][][]mpz[][][]class[][][]equals[][][][]B[]D[][][][]Shape[]
+[90
 Overfull \hbox (15.79532pt too wide) in paragraph at lines 3203--3205
 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
 ron[][][][]Grid[][][]time[][][]elapse[][][]assign(+[]Handle[][][]1, +[]
@@ -13811,6 +13915,26 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]C[][][][]
 Polyhedron[][][]from[][][]congruences(+[]Congruence[][][][]System,
 [98]
+Overfull \hbox (15.75171pt too wide) in paragraph at lines 643--644
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]refine
+[][][]with[][][]constraint()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[
+][][]mpz[][][]class[][][]refine[][][]with[][][]constraint
+
+Overfull \hbox (21.30177pt too wide) in paragraph at lines 649--650
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]refine
+[][][]with[][][]congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[
+][][]mpz[][][]class[][][]refine[][][]with[][][]congruence
+
+Overfull \hbox (24.4416pt too wide) in paragraph at lines 655--656
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]refine
+[][][]with[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape
+[][][]mpz[][][]class[][][]refine[][][]with[][][]constraints
+
+Overfull \hbox (29.99167pt too wide) in paragraph at lines 661--662
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]refine
+[][][]with[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape
+[][][]mpz[][][]class[][][]refine[][][]with[][][]congruences
+[91]
 Underfull \hbox (badness 10000) in paragraph at lines 3287--3288
 
 
@@ -13850,31 +13974,21 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]bounds[][][]from[][][]below(+[]Handle, +[]Lin[][][][]Expr) 
 [99]
-Overfull \hbox (37.0216pt too wide) in paragraph at lines 463--464
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]relati
-on[][][]with[][][][]Constraint()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh
-ape[][][]mpz[][][]class[][][]relation[][][]with[][][][]Constraint
-
-Overfull \hbox (30.54167pt too wide) in paragraph at lines 469--470
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]relati
-on[][][]with[][][][]Generator()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sha
-pe[][][]mpz[][][]class[][][]relation[][][]with[][][][]Generator
-
-Overfull \hbox (0.67314pt too wide) in paragraph at lines 475--476
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]relati
-on[][][]with[][][][]Congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh
-ape[][][]mpz[][][]class[][][]relation[][][]with[]
+Overfull \hbox (1.81296pt too wide) in paragraph at lines 697--698
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]upper[
+][][]bound[][][]assign[][][]if[][][]exact()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]
+D[][][][]Shape[][][]mpz[][][]class[][][]upper[][][]bound[]
 
-Overfull \hbox (1.9628pt too wide) in paragraph at lines 493--494
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]get[][
-][]minimized[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sha
-pe[][][]mpz[][][]class[][][]get[][][]minimized[]
+Overfull \hbox (19.83264pt too wide) in paragraph at lines 703--704
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]simpli
+fy[][][]using[][][]context[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[]
+[][][]Shape[][][]mpz[][][]class[][][]simplify[][][]using[]
 
-Overfull \hbox (7.51286pt too wide) in paragraph at lines 499--500
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]get[][
-][]minimized[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sha
-pe[][][]mpz[][][]class[][][]get[][][]minimized[]
-[88]
+Overfull \hbox (7.64267pt too wide) in paragraph at lines 715--716
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]uncons
+train[][][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]S
+hape[][][]mpz[][][]class[][][]unconstrain[]
+[92
 Overfull \hbox (33.79532pt too wide) in paragraph at lines 3342--3344
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]contains[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedron(+[]
@@ -13922,7 +14036,7 @@
 Overfull \hbox (4.9953pt too wide) in paragraph at lines 3385--3387
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]maximize(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[]
-[100]
+[100]]
 Overfull \hbox (4.9953pt too wide) in paragraph at lines 3390--3392
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]minimize(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[]
@@ -13947,21 +14061,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]add[][][]constraint(+[]Handle, +[]Constraint) 
 [101]
-Overfull \hbox (2.03311pt too wide) in paragraph at lines 523--524
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]contai
-ns[][][]integer[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[
-][][]mpz[][][]class[][][]contains[][][]integer[][][]
-
-Overfull \hbox (1.48302pt too wide) in paragraph at lines 529--530
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]is[][]
-[]topologically[][][]closed()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape
-[][][]mpz[][][]class[][][]is[][][]topologically[][][]
-
-Overfull \hbox (28.93297pt too wide) in paragraph at lines 541--542
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]topolo
-gical[][][]closure[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh
-ape[][][]mpz[][][]class[][][]topological[][][]closure[]
-[89
 Overfull \hbox (2.0138pt too wide) in paragraph at lines 3430--3432
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]add[][][]congruence(+[]Handle, +[]Congruence) 
@@ -14006,7 +14105,7 @@
 \OT1/ptm/m/it/10 Transforms the pointset pow-er-set ref-er-enced by \OT1/pcr/m/
 sl/10 Handle \OT1/ptm/m/it/10 as-sign-ing the affine ex-pres-sion for \OT1/pcr/
 m/sl/10 Lin[][][][]Expr/Coeff
-[102]]
+[102]
 Overfull \hbox (8.5953pt too wide) in paragraph at lines 3473--3475
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]affine[][][]preimage(+[]Handle, +[]P[]P[]L[][][][]Var, +[]
@@ -14047,36 +14146,31 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]difference[][][]assign(+[]Handle[][][]1, +[]Handle[]
 [103]
-Overfull \hbox (6.69179pt too wide) in paragraph at lines 571--572
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]maximi
-ze[][][]with[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][]
-[]mpz[][][]class[][][]maximize[][][]with[][][]point ( 
-
-Overfull \hbox (5.03162pt too wide) in paragraph at lines 577--578
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]minimi
-ze[][][]with[][][]point()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][]
-[]mpz[][][]class[][][]minimize[][][]with[][][]point ( 
+Overfull \hbox (11.53256pt too wide) in paragraph at lines 721--722
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]uncons
+train[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]
+Shape[][][]mpz[][][]class[][][]unconstrain[]
 
-Overfull \hbox (3.67287pt too wide) in paragraph at lines 589--590
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]contai
-ns[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][
-][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]contains[][][][]B[]
+Overfull \hbox (6.35191pt too wide) in paragraph at lines 739--740
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]bounde
+d[][][]affine[][][]image()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][
+][]mpz[][][]class[][][]bounded[][][]affine[][][]image
 
-Overfull \hbox (29.58234pt too wide) in paragraph at lines 595--596
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]strict
-ly[][][]contains[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/
-8 int ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]strictly[]
+Overfull \hbox (2.71329pt too wide) in paragraph at lines 745--746
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]bounde
+d[][][]affine[][][]preimage()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape
+[][][]mpz[][][]class[][][]bounded[][][]affine[]
 
-Overfull \hbox (1.53247pt too wide) in paragraph at lines 601--602
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]is[][]
-[]disjoint[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/
-m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]is[][][]
+Overfull \hbox (19.29315pt too wide) in paragraph at lines 751--752
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]genera
+lized[][][]affine[][][]image()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shap
+e[][][]mpz[][][]class[][][]generalized[][][]affine[]
 
-Overfull \hbox (17.42293pt too wide) in paragraph at lines 607--608
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]equals
-[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][][
-]B[]D[][][][]Shape[][][]mpz[][][]class[][][]equals[][][][]B[]D[][][][]Shape[]
-[90
+Overfull \hbox (1.87302pt too wide) in paragraph at lines 757--758
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]genera
+lized[][][]affine[][][]preimage()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]S
+hape[][][]mpz[][][]class[][][]generalized[]
+[93]
 Overfull \hbox (12.19531pt too wide) in paragraph at lines 3507--3509
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]time[][][]elapse[][][]assign(+[]Handle[][][]1, +[]Handle[]
@@ -14109,7 +14203,7 @@
 Overfull \hbox (14.5953pt too wide) in paragraph at lines 3538--3540
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]concatenate[][][]assign(+[]Handle[][][]1, +[]Handle[]
-[104]]
+[104]
 Overfull \hbox (12.81381pt too wide) in paragraph at lines 3545--3547
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]add[][][]space[][][]dimensions[][][]and[][][]embed(+[]Handle,
@@ -14150,7 +14244,42 @@
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 3579--3581
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]iterator[][][]equals[][][]iterator(+[]Iterator[][][]
-[105]
+[105
+Overfull \hbox (20.93263pt too wide) in paragraph at lines 763--764
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]genera
+lized[][][]affine[][][]image[][][]lhs[][][]rhs()[] \OT1/pcr/m/n/8 int ppl[][][]
+[]B[]D[][][][]Shape[][][]mpz[][][]class[][][]generalized[]
+
+Overfull \hbox (35.19252pt too wide) in paragraph at lines 769--770
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]genera
+lized[][][]affine[][][]preimage[][][]lhs[][][]rhs()[] \OT1/pcr/m/n/8 int ppl[][
+][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]generalized[]
+
+Overfull \hbox (16.66266pt too wide) in paragraph at lines 775--776
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][
+][]space[][][]dimensions[][][]and[][][]embed()[] \OT1/pcr/m/n/8 int ppl[][][][]
+B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][][]space[]
+
+Overfull \hbox (18.69269pt too wide) in paragraph at lines 781--782
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][
+][]space[][][]dimensions[][][]and[][][]project()[] \OT1/pcr/m/n/8 int ppl[][][]
+[]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][][]space[]
+
+Overfull \hbox (36.4616pt too wide) in paragraph at lines 787--788
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]remove
+[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape
+[][][]mpz[][][]class[][][]remove[][][]space[][][]dimensions
+
+Overfull \hbox (1.9427pt too wide) in paragraph at lines 793--794
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]remove
+[][][]higher[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[
+][][][]Shape[][][]mpz[][][]class[][][]remove[][][]
+
+Overfull \hbox (27.62158pt too wide) in paragraph at lines 799--800
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]expand
+[][][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[
+][][]mpz[][][]class[][][]expand[][][]space[][][]dimension
+[94]]
 Overfull \hbox (29.6138pt too wide) in paragraph at lines 3588--3590
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]iterator[][][]get[][][]disjunct(+[]Iterator, -[]Handle) 
@@ -14170,27 +14299,7 @@
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 3629--3631
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[]
 [][][]Polyhedron[][][]from[][][]congruences(+[]Congruence[][][]
-[106
-Overfull \hbox (15.75171pt too wide) in paragraph at lines 643--644
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]refine
-[][][]with[][][]constraint()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[
-][][]mpz[][][]class[][][]refine[][][]with[][][]constraint
-
-Overfull \hbox (21.30177pt too wide) in paragraph at lines 649--650
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]refine
-[][][]with[][][]congruence()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[
-][][]mpz[][][]class[][][]refine[][][]with[][][]congruence
-
-Overfull \hbox (24.4416pt too wide) in paragraph at lines 655--656
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]refine
-[][][]with[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape
-[][][]mpz[][][]class[][][]refine[][][]with[][][]constraints
-
-Overfull \hbox (29.99167pt too wide) in paragraph at lines 661--662
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]refine
-[][][]with[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape
-[][][]mpz[][][]class[][][]refine[][][]with[][][]congruences
-[91]]
+[106]
 Underfull \hbox (badness 10000) in paragraph at lines 3637--3638
 
 
@@ -14218,6 +14327,41 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]bounds[][][]from[][][]above(+[]Handle, +[]Lin[][][][]Expr) 
 [107]
+Overfull \hbox (12.0115pt too wide) in paragraph at lines 805--806
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]fold[]
+[][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[]
+[][]mpz[][][]class[][][]fold[][][]space[][][]dimensions
+
+Overfull \hbox (9.68161pt too wide) in paragraph at lines 811--812
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]map[][
+][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][
+][]mpz[][][]class[][][]map[][][]space[][][]dimensions
+
+Overfull \hbox (2.12299pt too wide) in paragraph at lines 817--818
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]drop[]
+[][]some[][][]non[][][]integer[][][]points()[] \OT1/pcr/m/n/8 int ppl[][][][]B[
+]D[][][][]Shape[][][]mpz[][][]class[][][]drop[][][]some[][][]
+
+Overfull \hbox (7.84299pt too wide) in paragraph at lines 823--824
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]drop[]
+[][]some[][][]non[][][]integer[][][]points[][][]2()[] \OT1/pcr/m/n/8 int ppl[][
+][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]drop[][][]some[]
+
+Overfull \hbox (11.11328pt too wide) in paragraph at lines 829--830
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]extern
+al[][][]memory[][][]in[][][]bytes()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][
+]Shape[][][]mpz[][][]class[][][]external[][][]memory[]
+
+Overfull \hbox (11.6919pt too wide) in paragraph at lines 835--836
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]total[
+][][]memory[][][]in[][][]bytes()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh
+ape[][][]mpz[][][]class[][][]total[][][]memory[][][]in[][][]bytes
+
+Overfull \hbox (0.64241pt too wide) in paragraph at lines 841--842
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]B[]H
+[]M[]Z05[][][]widening[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int
+ ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]B[]
+[95]
 Overfull \hbox (15.2138pt too wide) in paragraph at lines 3689--3691
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]bounds[][][]from[][][]below(+[]Handle, +[]Lin[][][][]Expr) 
@@ -14267,22 +14411,7 @@
 Overfull \hbox (14.5953pt too wide) in paragraph at lines 3732--3734
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]relation[][][]with[][][]congruence(+[]Handle, +[]
-[108
-Overfull \hbox (1.81296pt too wide) in paragraph at lines 697--698
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]upper[
-][][]bound[][][]assign[][][]if[][][]exact()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]
-D[][][][]Shape[][][]mpz[][][]class[][][]upper[][][]bound[]
-
-Overfull \hbox (19.83264pt too wide) in paragraph at lines 703--704
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]simpli
-fy[][][]using[][][]context[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[]
-[][][]Shape[][][]mpz[][][]class[][][]simplify[][][]using[]
-
-Overfull \hbox (7.64267pt too wide) in paragraph at lines 715--716
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]uncons
-train[][][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]S
-hape[][][]mpz[][][]class[][][]unconstrain[]
-[92]]
+[108]
 Overfull \hbox (16.9953pt too wide) in paragraph at lines 3735--3737
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]maximize(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[]
@@ -14307,6 +14436,41 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]total[][][]memory[][][]in[][][]bytes(+[]Handle, ?Number) 
 [109]
+Overfull \hbox (28.74266pt too wide) in paragraph at lines 847--848
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]H79[
+][][]widening[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][
+][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]H79[][][]widening[]
+
+Overfull \hbox (12.15302pt too wide) in paragraph at lines 853--854
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]B[]H
+[]M[]Z05[][][]widening[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][]
+[]Shape[][][]mpz[][][]class[][][][]B[]H[]M[]Z05[][][]widening[]
+
+Overfull \hbox (7.27174pt too wide) in paragraph at lines 859--860
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]H79[
+][][]widening[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[]
+[][]mpz[][][]class[][][][]H79[][][]widening[][][]assign ( 
+
+Overfull \hbox (21.76277pt too wide) in paragraph at lines 865--866
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]wideni
+ng[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][]
+[][]Shape[][][]mpz[][][]class[][][]widening[][][]assign[]
+
+Overfull \hbox (0.72179pt too wide) in paragraph at lines 877--878
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite
+d[][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] 
+\OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[]
+
+Overfull \hbox (22.10204pt too wide) in paragraph at lines 883--884
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite
+d[][][][]H79[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/
+m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
+
+Overfull \hbox (1.88206pt too wide) in paragraph at lines 889--890
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite
+d[][][][]C[]C76[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/p
+cr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]mpz[]
+[96]
 Overfull \hbox (14.0138pt too wide) in paragraph at lines 3777--3779
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]add[][][]constraint(+[]Handle, +[]Constraint) 
@@ -14351,31 +14515,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]unconstrain[][][]space[][][]dimensions(+[]Handle,
 [110]
-Overfull \hbox (11.53256pt too wide) in paragraph at lines 721--722
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]uncons
-train[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]
-Shape[][][]mpz[][][]class[][][]unconstrain[]
-
-Overfull \hbox (6.35191pt too wide) in paragraph at lines 739--740
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]bounde
-d[][][]affine[][][]image()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][
-][]mpz[][][]class[][][]bounded[][][]affine[][][]image
-
-Overfull \hbox (2.71329pt too wide) in paragraph at lines 745--746
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]bounde
-d[][][]affine[][][]preimage()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape
-[][][]mpz[][][]class[][][]bounded[][][]affine[]
-
-Overfull \hbox (19.29315pt too wide) in paragraph at lines 751--752
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]genera
-lized[][][]affine[][][]image()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shap
-e[][][]mpz[][][]class[][][]generalized[][][]affine[]
-
-Overfull \hbox (1.87302pt too wide) in paragraph at lines 757--758
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]genera
-lized[][][]affine[][][]preimage()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]S
-hape[][][]mpz[][][]class[][][]generalized[]
-[93]
 Overfull \hbox (2.5953pt too wide) in paragraph at lines 3820--3822
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]affine[][][]image(+[]Handle, +[]P[]P[]L[][][][]Var, +[]
@@ -14425,6 +14564,36 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]difference[][][]assign(+[]Handle[][][]1, +[]Handle[]
 [111]
+Overfull \hbox (27.5924pt too wide) in paragraph at lines 895--896
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite
+d[][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl
+[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limited[]
+
+Overfull \hbox (4.81262pt too wide) in paragraph at lines 901--902
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite
+d[][][][]H79[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B
+[]D[][][][]Shape[][][]mpz[][][]class[][][]limited[]
+
+Overfull \hbox (11.47267pt too wide) in paragraph at lines 907--908
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite
+d[][][][]C[]C76[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][]
+[]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limited[]
+
+Overfull \hbox (2.84262pt too wide) in paragraph at lines 913--914
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]C[]C
+76[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int 
+ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]C[]
+
+Overfull \hbox (28.75323pt too wide) in paragraph at lines 919--920
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]C[]C
+76[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][
+]Shape[][][]mpz[][][]class[][][][]C[]C76[][][]extrapolation[]
+
+Overfull \hbox (19.75198pt too wide) in paragraph at lines 925--926
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]C[]C
+76[][][]narrowing[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sha
+pe[][][]mpz[][][]class[][][][]C[]C76[][][]narrowing[][][]assign
+[97]
 Overfull \hbox (24.19531pt too wide) in paragraph at lines 3857--3859
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]time[][][]elapse[][][]assign(+[]Handle[][][]1, +[]Handle[]
@@ -14459,42 +14628,42 @@
 Overfull \hbox (26.5953pt too wide) in paragraph at lines 3888--3890
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]concatenate[][][]assign(+[]Handle[][][]1, +[]Handle[]
-[112
-Overfull \hbox (20.93263pt too wide) in paragraph at lines 763--764
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]genera
-lized[][][]affine[][][]image[][][]lhs[][][]rhs()[] \OT1/pcr/m/n/8 int ppl[][][]
-[]B[]D[][][][]Shape[][][]mpz[][][]class[][][]generalized[]
+[112]
+Overfull \hbox (14.6529pt too wide) in paragraph at lines 943--944
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]recycle[][][][]Constraint[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[
+][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]recycle[]
 
-Overfull \hbox (35.19252pt too wide) in paragraph at lines 769--770
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]genera
-lized[][][]affine[][][]preimage[][][]lhs[][][]rhs()[] \OT1/pcr/m/n/8 int ppl[][
-][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]generalized[]
+Overfull \hbox (20.20296pt too wide) in paragraph at lines 949--950
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]recycle[][][][]Congruence[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[
+][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]recycle[]
 
-Overfull \hbox (16.66266pt too wide) in paragraph at lines 775--776
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][
-][]space[][][]dimensions[][][]and[][][]embed()[] \OT1/pcr/m/n/8 int ppl[][][][]
-B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][][]space[]
+Overfull \hbox (12.97296pt too wide) in paragraph at lines 955--956
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
+][]recycle[][][][]Generator[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[]
+[][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]recycle[]
 
-Overfull \hbox (18.69269pt too wide) in paragraph at lines 781--782
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][
-][]space[][][]dimensions[][][]and[][][]project()[] \OT1/pcr/m/n/8 int ppl[][][]
-[]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][][]space[]
+Overfull \hbox (1.47284pt too wide) in paragraph at lines 961--962
+ []\OT1/ptm/b/n/10 ppl[][][]assign[][][][]B[]D[][][][]Shape[][][]mpz[][][]class
+[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int 
+ppl[][][]assign[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
 
-Overfull \hbox (36.4616pt too wide) in paragraph at lines 787--788
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]remove
-[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape
-[][][]mpz[][][]class[][][]remove[][][]space[][][]dimensions
+Overfull \hbox (37.57156pt too wide) in paragraph at lines 967--968
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][
+][]recycled[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shap
+e[][][]mpz[][][]class[][][]add[][][]recycled[][][]constraints
 
-Overfull \hbox (1.9427pt too wide) in paragraph at lines 793--794
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]remove
-[][][]higher[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[
-][][][]Shape[][][]mpz[][][]class[][][]remove[][][]
+Overfull \hbox (43.12163pt too wide) in paragraph at lines 973--974
+ []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][
+][]recycled[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shap
+e[][][]mpz[][][]class[][][]add[][][]recycled[][][]congruences
 
-Overfull \hbox (27.62158pt too wide) in paragraph at lines 799--800
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]expand
-[][][]space[][][]dimension()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[
-][][]mpz[][][]class[][][]expand[][][]space[][][]dimension
-[94]]
+Overfull \hbox (5.01176pt too wide) in paragraph at lines 979--980
+ []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]M[]S[][][][]B[]D[][][]
+[]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]termination[][][]te
+st[][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class ( 
+[98]
 Overfull \hbox (24.81381pt too wide) in paragraph at lines 3895--3897
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]add[][][]space[][][]dimensions[][][]and[][][]embed(+[]Handle,
@@ -14551,42 +14720,52 @@
 Overfull \hbox (24.81381pt too wide) in paragraph at lines 3969--3971
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][]space[][
 ][]dimension(+[]Dimension[][][][]Type, +[]Universe[][][]or[][][][]Empty,
-[114
-Overfull \hbox (12.0115pt too wide) in paragraph at lines 805--806
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]fold[]
-[][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[]
-[][]mpz[][][]class[][][]fold[][][]space[][][]dimensions
+[114]
+Overfull \hbox (3.34184pt too wide) in paragraph at lines 985--986
+ []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]P[]R[][][][]B[]D[][][]
+[]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]termination[][][]te
+st[][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class ( 
 
-Overfull \hbox (9.68161pt too wide) in paragraph at lines 811--812
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]map[][
-][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][
-][]mpz[][][]class[][][]map[][][]space[][][]dimensions
+Overfull \hbox (7.36293pt too wide) in paragraph at lines 991--992
+ []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]M
+[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][]
+[]one[][][]affine[][][]ranking[][][]function[]
 
-Overfull \hbox (2.12299pt too wide) in paragraph at lines 817--818
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]drop[]
-[][]some[][][]non[][][]integer[][][]points()[] \OT1/pcr/m/n/8 int ppl[][][][]B[
-]D[][][][]Shape[][][]mpz[][][]class[][][]drop[][][]some[][][]
+Overfull \hbox (5.69301pt too wide) in paragraph at lines 997--998
+ []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]P
+[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][]
+[]one[][][]affine[][][]ranking[][][]function[]
 
-Overfull \hbox (7.84299pt too wide) in paragraph at lines 823--824
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]drop[]
-[][]some[][][]non[][][]integer[][][]points[][][]2()[] \OT1/pcr/m/n/8 int ppl[][
-][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]drop[][][]some[]
+Overfull \hbox (11.61273pt too wide) in paragraph at lines 1003--1004
+ []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
+M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][
+][]all[][][]affine[][][]ranking[][][]functions[]
 
-Overfull \hbox (11.11328pt too wide) in paragraph at lines 829--830
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]extern
-al[][][]memory[][][]in[][][]bytes()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][
-]Shape[][][]mpz[][][]class[][][]external[][][]memory[]
+Overfull \hbox (9.94281pt too wide) in paragraph at lines 1009--1010
+ []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
+P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][
+][]all[][][]affine[][][]ranking[][][]functions[]
 
-Overfull \hbox (11.6919pt too wide) in paragraph at lines 835--836
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]total[
-][][]memory[][][]in[][][]bytes()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sh
-ape[][][]mpz[][][]class[][][]total[][][]memory[][][]in[][][]bytes
+Overfull \hbox (12.99327pt too wide) in paragraph at lines 1015--1016
+ []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]M[]S[][][][]B[]D[][][]
+[]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][]termination[
+][][]test[][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
 
-Overfull \hbox (0.64241pt too wide) in paragraph at lines 841--842
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]B[]H
-[]M[]Z05[][][]widening[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int
- ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]B[]
-[95]]
+Overfull \hbox (11.32335pt too wide) in paragraph at lines 1021--1022
+ []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]P[]R[][][][]B[]D[][][]
+[]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][]termination[
+][][]test[][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
+
+Overfull \hbox (15.96294pt too wide) in paragraph at lines 1027--1028
+ []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]M
+[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int 
+ppl[][][]one[][][]affine[][][]ranking[][][]function[]
+
+Overfull \hbox (14.29301pt too wide) in paragraph at lines 1033--1034
+ []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]P
+[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int 
+ppl[][][]one[][][]affine[][][]ranking[][][]function[]
+[99
 Underfull \hbox (badness 10000) in paragraph at lines 3990--3991
 
 
@@ -14603,7 +14782,7 @@
 Overfull \hbox (15.2138pt too wide) in paragraph at lines 4029--4031
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]C[][][
 ][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[]Complexity,
-[115]
+[115]]
 Overfull \hbox (27.2138pt too wide) in paragraph at lines 4032--4034
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]N[]N[]
 C[][][][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[]Complexity,
@@ -14646,41 +14825,16 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Octago
 nal[][][][]Shape[][][]double[][][]with[][][]complexity(+[]Handle, +[]
 [116]
-Overfull \hbox (28.74266pt too wide) in paragraph at lines 847--848
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]H79[
-][][]widening[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][
-][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]H79[][][]widening[]
-
-Overfull \hbox (12.15302pt too wide) in paragraph at lines 853--854
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]B[]H
-[]M[]Z05[][][]widening[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][]
-[]Shape[][][]mpz[][][]class[][][][]B[]H[]M[]Z05[][][]widening[]
-
-Overfull \hbox (7.27174pt too wide) in paragraph at lines 859--860
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]H79[
-][][]widening[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[]
-[][]mpz[][][]class[][][][]H79[][][]widening[][][]assign ( 
-
-Overfull \hbox (21.76277pt too wide) in paragraph at lines 865--866
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]wideni
-ng[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][]
-[][]Shape[][][]mpz[][][]class[][][]widening[][][]assign[]
-
-Overfull \hbox (0.72179pt too wide) in paragraph at lines 877--878
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite
-d[][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] 
-\OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[]
-
-Overfull \hbox (22.10204pt too wide) in paragraph at lines 883--884
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite
-d[][][][]H79[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/
-m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
+Overfull \hbox (20.21274pt too wide) in paragraph at lines 1039--1040
+ []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
+M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int
+ ppl[][][]all[][][]affine[][][]ranking[][][]functions[]
 
-Overfull \hbox (1.88206pt too wide) in paragraph at lines 889--890
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite
-d[][][][]C[]C76[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/p
-cr/m/n/8 int ppl[][][][]B[]D[][][][]Shape[][][]mpz[]
-[96]
+Overfull \hbox (18.54282pt too wide) in paragraph at lines 1045--1046
+ []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
+P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int
+ ppl[][][]all[][][]affine[][][]ranking[][][]functions[]
+) (./interfaceppl__Coefficient__tag.tex
 Overfull \hbox (13.3953pt too wide) in paragraph at lines 4127--4129
 []\OT1/pcr/m/n/10 ppl[][][][]Double[][][][]Box[][][]relation[][][]with[][][]con
 straint(+[]Handle, +[]Constraint, ?Relation[]
@@ -14707,7 +14861,7 @@
 \OT1/ptm/m/it/10 Unifies \OT1/pcr/m/sl/10 Relation[][][][]List \OT1/ptm/m/it/10
  with the list of re-la-tions the dou-ble box ref-er-enced by \OT1/pcr/m/sl/10 
 Handle \OT1/ptm/m/it/10 has with \OT1/pcr/m/sl/10 Congruence\OT1/ptm/m/it/10 .
-[117]
+[117 [100]]
 Overfull \hbox (23.6138pt too wide) in paragraph at lines 4148--4150
 []\OT1/pcr/m/n/10 ppl[][][][]Double[][][][]Box[][][]has[][][]upper[][][]bound(+
 []Handle, +[]Var, ?Coeff[][][]1, ?Coeff[][][]2, ?Boolean) 
@@ -14731,37 +14885,8 @@
 Overfull \hbox (8.5953pt too wide) in paragraph at lines 4173--4175
 []\OT1/pcr/m/n/10 ppl[][][][]Double[][][][]Box[][][]minimize[][][]with[][][]poi
 nt(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[]
-[118] [119
-Overfull \hbox (27.5924pt too wide) in paragraph at lines 895--896
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite
-d[][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl
-[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limited[]
-
-Overfull \hbox (4.81262pt too wide) in paragraph at lines 901--902
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite
-d[][][][]H79[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B
-[]D[][][][]Shape[][][]mpz[][][]class[][][]limited[]
-
-Overfull \hbox (11.47267pt too wide) in paragraph at lines 907--908
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limite
-d[][][][]C[]C76[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][]
-[]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limited[]
-
-Overfull \hbox (2.84262pt too wide) in paragraph at lines 913--914
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]C[]C
-76[][][]extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int 
-ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]C[]
-
-Overfull \hbox (28.75323pt too wide) in paragraph at lines 919--920
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]C[]C
-76[][][]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][
-]Shape[][][]mpz[][][]class[][][][]C[]C76[][][]extrapolation[]
-
-Overfull \hbox (19.75198pt too wide) in paragraph at lines 925--926
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][][]C[]C
-76[][][]narrowing[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Sha
-pe[][][]mpz[][][]class[][][][]C[]C76[][][]narrowing[][][]assign
-[97]]
+[118] [119])
+(./interfaceppl__Congruence__System__const__iterator__tag.tex [101]
 Overfull \hbox (1.38072pt too wide) in paragraph at lines 4237--4239
 \OT1/ptm/m/it/10 Transforms the dou-ble box ref-er-enced by \OT1/pcr/m/sl/10 Ha
 ndle \OT1/ptm/m/it/10 sub-sti-tut-ing the affine ex-pres-sion for \OT1/pcr/m/sl
@@ -14796,41 +14921,6 @@
  +[]List[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[]Representation,
 
 Underfull \vbox (badness 3503) has occurred while \output is active [120]
-Overfull \hbox (14.6529pt too wide) in paragraph at lines 943--944
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]recycle[][][][]Constraint[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[
-][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]recycle[]
-
-Overfull \hbox (20.20296pt too wide) in paragraph at lines 949--950
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]recycle[][][][]Congruence[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[
-][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]recycle[]
-
-Overfull \hbox (12.97296pt too wide) in paragraph at lines 955--956
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][
-][]recycle[][][][]Generator[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[]
-[][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]recycle[]
-
-Overfull \hbox (1.47284pt too wide) in paragraph at lines 961--962
- []\OT1/ptm/b/n/10 ppl[][][]assign[][][][]B[]D[][][][]Shape[][][]mpz[][][]class
-[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int 
-ppl[][][]assign[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
-
-Overfull \hbox (37.57156pt too wide) in paragraph at lines 967--968
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][
-][]recycled[][][]constraints()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shap
-e[][][]mpz[][][]class[][][]add[][][]recycled[][][]constraints
-
-Overfull \hbox (43.12163pt too wide) in paragraph at lines 973--974
- []\OT1/ptm/b/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][
-][]recycled[][][]congruences()[] \OT1/pcr/m/n/8 int ppl[][][][]B[]D[][][][]Shap
-e[][][]mpz[][][]class[][][]add[][][]recycled[][][]congruences
-
-Overfull \hbox (5.01176pt too wide) in paragraph at lines 979--980
- []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]M[]S[][][][]B[]D[][][]
-[]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]termination[][][]te
-st[][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class ( 
-[98
 Overfull \hbox (27.2138pt too wide) in paragraph at lines 4280--4282
 []\OT1/pcr/m/n/10 ppl[][][][]Double[][][][]Box[][][]simplify[][][]using[][][]co
 ntext[][][]assign(+[]Handle[][][]1, +[]Handle[][][]2, ?Boolean) 
@@ -14850,7 +14940,22 @@
 Overfull \hbox (15.79532pt too wide) in paragraph at lines 4302--4304
 []\OT1/pcr/m/n/10 ppl[][][][]Double[][][][]Box[][][]limited[][][][]C[]C76[][][]
 extrapolation[][][]assign[][][]with[][][]tokens(+[]Handle[][][]1, +[]
-[121]]
+[121
+Overfull \hbox (1.72762pt too wide) in paragraph at lines 22--24
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]Congruence[][][][]System[]
+[][]const[][][]iterator[][][]from[][][][]Congruence[][][][]System[][][]const[][
+][]iterator[][] ([][]ppl[]
+
+Overfull \hbox (2.27753pt too wide) in paragraph at lines 25--27
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]delete[][][][]Congruence[][][][]System[]
+[][]const[][][]iterator[][] ([][]ppl[][][]const[][][][]Congruence[][][][]System
+[][][]const[][][]iterator[]
+
+Overfull \hbox (17.54732pt too wide) in paragraph at lines 38--40
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Congruence[][][][]System[][][]const[][
+][]iterator[][][]equal[][][]test[][] ([][]ppl[][][]const[][][][]Congruence[][][
+][]System[][][]const[][][]iterator[]
+) (./interfaceppl__Congruence__System__tag.tex] [102]
 Overfull \hbox (12.19531pt too wide) in paragraph at lines 4305--4307
 []\OT1/pcr/m/n/10 ppl[][][][]Double[][][][]Box[][][]limited[][][][]C[]C76[][][]
 extrapolation[][][]assign(+[]Handle[][][]1, +[]Handle[][][]2, +[]
@@ -14875,51 +14980,31 @@
 Underfull \hbox (badness 10000) in paragraph at lines 4382--4383
 
 [123]
-Overfull \hbox (3.34184pt too wide) in paragraph at lines 985--986
- []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]P[]R[][][][]B[]D[][][]
-[]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]termination[][][]te
-st[][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class ( 
-
-Overfull \hbox (7.36293pt too wide) in paragraph at lines 991--992
- []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]M
-[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][]
-[]one[][][]affine[][][]ranking[][][]function[]
-
-Overfull \hbox (5.69301pt too wide) in paragraph at lines 997--998
- []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]P
-[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][]
-[]one[][][]affine[][][]ranking[][][]function[]
-
-Overfull \hbox (11.61273pt too wide) in paragraph at lines 1003--1004
- []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
-M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][
-][]all[][][]affine[][][]ranking[][][]functions[]
-
-Overfull \hbox (9.94281pt too wide) in paragraph at lines 1009--1010
- []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
-P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][
-][]all[][][]affine[][][]ranking[][][]functions[]
+Overfull \hbox (7.63844pt too wide) in paragraph at lines 25--27
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Congruence[][][][]System[][][
+]from[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]Congruence[][][][]Sys
+tem[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pcs, [][]ppl[]
 
-Overfull \hbox (12.99327pt too wide) in paragraph at lines 1015--1016
- []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]M[]S[][][][]B[]D[][][]
-[]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][]termination[
-][][]test[][][][]M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
+Overfull \hbox (9.56808pt too wide) in paragraph at lines 28--30
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]Congruence[][][][]System[]
+[][]from[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]Congruence[][][][]
+System[][][]t[][] dst, [][]ppl[]
 
-Overfull \hbox (11.32335pt too wide) in paragraph at lines 1021--1022
- []\OT1/ptm/b/n/10 ppl[][][]termination[][][]test[][][][]P[]R[][][][]B[]D[][][]
-[]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][]termination[
-][][]test[][][][]P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[]
+Overfull \hbox (10.67792pt too wide) in paragraph at lines 38--40
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Congruence[][][][]System[][][]space[][
+][]dimension[][] ([][]ppl[][][]const[][][][]Congruence[][][][]System[][][]t[][]
+ cs, [][]ppl[][][]dimension[]
 
-Overfull \hbox (15.96294pt too wide) in paragraph at lines 1027--1028
- []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]M
-[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int 
-ppl[][][]one[][][]affine[][][]ranking[][][]function[]
+Overfull \hbox (4.96837pt too wide) in paragraph at lines 44--46
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Congruence[][][][]System[][][]begin[][
+] ([][]ppl[][][]const[][][][]Congruence[][][][]System[][][]t[][] cs, [][]ppl[][
+][][]Congruence[][][][]System[]
 
-Overfull \hbox (14.29301pt too wide) in paragraph at lines 1033--1034
- []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]P
-[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int 
-ppl[][][]one[][][]affine[][][]ranking[][][]function[]
-[99]
+Overfull \hbox (23.98816pt too wide) in paragraph at lines 60--62
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Congruence[][][][]System[][][]insert[]
+[][][]Congruence[][] ([][]ppl[][][][]Congruence[][][][]System[][][]t[][] cs, []
+[]ppl[][][]const[][][][]Congruence[]
+[103]) (./interfaceppl__Congruence__tag.tex
 Overfull \hbox (13.39532pt too wide) in paragraph at lines 4406--4408
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[]
 [][][]Octagonal[][][][]Shape[][][]mpz[][][]class(+[]Handle[][][]1, -[]Handle[]
@@ -14977,16 +15062,6 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[]
 [][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity(+[]
 [124]
-Overfull \hbox (20.21274pt too wide) in paragraph at lines 1039--1040
- []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
-M[]S[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int
- ppl[][][]all[][][]affine[][][]ranking[][][]functions[]
-
-Overfull \hbox (18.54282pt too wide) in paragraph at lines 1045--1046
- []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
-P[]R[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]2()[] \OT1/pcr/m/n/8 int
- ppl[][][]all[][][]affine[][][]ranking[][][]functions[]
-) (./interfaceppl__Coefficient__tag.tex
 Overfull \hbox (30.81381pt too wide) in paragraph at lines 4445--4447
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[]
 [][][]Double[][][][]Box[][][]with[][][]complexity(+[]Handle, +[]Complexity,
@@ -15006,8 +15081,12 @@
 Overfull \hbox (1.39532pt too wide) in paragraph at lines 4497--4499
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]is[][][]disjoin
 t[][][]from[][][][]B[]D[][][][]Shape[][][]double(+[]Handle[][][]1, +[]Handle[]
-[125 [100]])
-(./interfaceppl__Congruence__System__const__iterator__tag.tex
+[125]
+Overfull \hbox (15.0983pt too wide) in paragraph at lines 41--43
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Congruence[][][]coefficient[][] ([][]p
+pl[][][]const[][][][]Congruence[][][]t[][] c, [][]ppl[][][]dimension[][][]type[
+][] var, [][]ppl[][][][]Coefficient[]
+[104]
 Overfull \hbox (40.9953pt too wide) in paragraph at lines 4519--4521
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]relation[][][]w
 ith[][][]constraint(+[]Handle, +[]Constraint, ?Relation[]
@@ -15054,7 +15133,7 @@
 Overfull \hbox (36.19531pt too wide) in paragraph at lines 4550--4552
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]maximize[][][]w
 ith[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[]
-[126] [101]
+[126) (./interfaceppl__Constraint__System__const__iterator__tag.tex]
 Overfull \hbox (36.19531pt too wide) in paragraph at lines 4555--4557
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]minimize[][][]w
 ith[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[]
@@ -15068,21 +15147,26 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]refine[][][]wit
 h[][][]constraints( +[]Handle, +[]Constraint[][][][]System) 
 [127]
-Overfull \hbox (1.72762pt too wide) in paragraph at lines 22--24
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]Congruence[][][][]System[]
-[][]const[][][]iterator[][][]from[][][][]Congruence[][][][]System[][][]const[][
-][]iterator[][] ([][]ppl[]
+Overfull \hbox (25.10667pt too wide) in paragraph at lines 19--21
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraint[][][][]System[][][
+]const[][][]iterator[][][]from[][][][]Constraint[][][][]System[][][]const[][][]
+iterator[][] ([][]ppl[][][][]Constraint[]
 
-Overfull \hbox (2.27753pt too wide) in paragraph at lines 25--27
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]delete[][][][]Congruence[][][][]System[]
-[][]const[][][]iterator[][] ([][]ppl[][][]const[][][][]Congruence[][][][]System
-[][][]const[][][]iterator[]
+Overfull \hbox (33.69638pt too wide) in paragraph at lines 22--24
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]Constraint[][][][]System[]
+[][]const[][][]iterator[][][]from[][][][]Constraint[][][][]System[][][]const[][
+][]iterator[][] ([][]ppl[][][][]Constraint[]
 
-Overfull \hbox (17.54732pt too wide) in paragraph at lines 38--40
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Congruence[][][][]System[][][]const[][
-][]iterator[][][]equal[][][]test[][] ([][]ppl[][][]const[][][][]Congruence[][][
+Overfull \hbox (11.7268pt too wide) in paragraph at lines 32--34
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraint[][][][]System[][][]const[][
+][]iterator[][][]dereference[][] ([][]ppl[][][]const[][][][]Constraint[][][][]S
+ystem[][][]const[][][]iterator[]
+
+Overfull \hbox (4.24669pt too wide) in paragraph at lines 38--40
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraint[][][][]System[][][]const[][
+][]iterator[][][]equal[][][]test[][] ([][]ppl[][][]const[][][][]Constraint[][][
 ][]System[][][]const[][][]iterator[]
-) (./interfaceppl__Congruence__System__tag.tex [102]
+[105]) (./interfaceppl__Constraint__System__tag.tex
 Overfull \hbox (11.6138pt too wide) in paragraph at lines 4600--4602
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]refine[][][]wit
 h[][][]congruences( +[]Handle, +[]Congruence[][][][]System) 
@@ -15119,31 +15203,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]generalized[][]
 []affine[][][]preimage[][][]lhs[][][]rhs(+[]Handle, +[]Lin[][][][]Expr[]
 [128]
-Overfull \hbox (7.63844pt too wide) in paragraph at lines 25--27
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Congruence[][][][]System[][][
-]from[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]Congruence[][][][]Sys
-tem[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pcs, [][]ppl[]
-
-Overfull \hbox (9.56808pt too wide) in paragraph at lines 28--30
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]Congruence[][][][]System[]
-[][]from[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]Congruence[][][][]
-System[][][]t[][] dst, [][]ppl[]
-
-Overfull \hbox (10.67792pt too wide) in paragraph at lines 38--40
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Congruence[][][][]System[][][]space[][
-][]dimension[][] ([][]ppl[][][]const[][][][]Congruence[][][][]System[][][]t[][]
- cs, [][]ppl[][][]dimension[]
-
-Overfull \hbox (4.96837pt too wide) in paragraph at lines 44--46
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Congruence[][][][]System[][][]begin[][
-] ([][]ppl[][][]const[][][][]Congruence[][][][]System[][][]t[][] cs, [][]ppl[][
-][][]Congruence[][][][]System[]
-
-Overfull \hbox (23.98816pt too wide) in paragraph at lines 60--62
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Congruence[][][][]System[][][]insert[]
-[][][]Congruence[][] ([][]ppl[][][][]Congruence[][][][]System[][][]t[][] cs, []
-[]ppl[][][]const[][][][]Congruence[]
-[103
 Overfull \hbox (69.2138pt too wide) in paragraph at lines 4640--4642
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]wrap[][][]assig
 n(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[]Representa
@@ -15160,7 +15219,18 @@
 Overfull \hbox (15.79532pt too wide) in paragraph at lines 4672--4674
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][][]B[]H[]M[]Z05[
 ][][]widening[][][]assign[][][]with[][][]tokens(+[]Handle[][][]1, +[]Handle[]
-[129]]) (./interfaceppl__Congruence__tag.tex
+[129]
+Overfull \hbox (24.61707pt too wide) in paragraph at lines 22--24
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraint[][][][]System[][][
+]from[][][][]Constraint[][] ([][]ppl[][][][]Constraint[][][][]System[][][]t[][]
+ $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pcs, [][]ppl[][][]const[][][][]Constrai
+nt[]
+
+Overfull \hbox (2.09717pt too wide) in paragraph at lines 50--52
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraint[][][][]System[][][]end[][] 
+([][]ppl[][][]const[][][][]Constraint[][][][]System[][][]t[][] cs, [][]ppl[][][
+][]Constraint[][][][]System[][][]const[]
+[106]
 Overfull \hbox (1.39532pt too wide) in paragraph at lines 4675--4677
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][][]H79[][][]wide
 ning[][][]assign[][][]with[][][]tokens(+[]Handle[][][]1, +[]Handle[][][]
@@ -15192,12 +15262,7 @@
 Overfull \hbox (12.19531pt too wide) in paragraph at lines 4705--4707
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]limited[][][][]
 C[]C76[][][]extrapolation[][][]assign(+[]Handle[][][]1, +[]Handle[]
-[130]
-Overfull \hbox (15.0983pt too wide) in paragraph at lines 41--43
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Congruence[][][]coefficient[][] ([][]p
-pl[][][]const[][][][]Congruence[][][]t[][] c, [][]ppl[][][]dimension[][][]type[
-][] var, [][]ppl[][][][]Coefficient[]
-[104]
+[130]) (./interfaceppl__Constraint__tag.tex
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 4724--4726
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]add[][][]space[
 ][][]dimensions[][][]and[][][]embed(+[]Handle, +[]Dimension[]
@@ -15217,7 +15282,12 @@
 Overfull \hbox (3.79532pt too wide) in paragraph at lines 4739--4741
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]fold[][][]space
 [][][]dimensions(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Vars, +[]
-[131]) (./interfaceppl__Constraint__System__const__iterator__tag.tex
+[131]
+Overfull \hbox (1.5281pt too wide) in paragraph at lines 16--18
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraint[][] ([][]ppl[][][]
+[]Constraint[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pc, [][]ppl[][][
+]const[][][][]Linear[][][][]Expression[][][]t[][] le, enum [][]ppl[][][]enum[]
+[107]
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 4761--4763
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]double[][][]f
 rom[][][]space[][][]dimension(+[]Dimension[][][][]Type, +[]
@@ -15259,26 +15329,11 @@
 /ptm/m/it/10 from the bd[][][]shape[][][]mpq[][][]class ref-er-enced by han-dle
  \OT1/pcr/m/sl/10 Handle[][][]1\OT1/ptm/m/it/10 . \OT1/pcr/m/sl/10 Handle[]
 [132]
-Overfull \hbox (25.10667pt too wide) in paragraph at lines 19--21
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraint[][][][]System[][][
-]const[][][]iterator[][][]from[][][][]Constraint[][][][]System[][][]const[][][]
-iterator[][] ([][]ppl[][][][]Constraint[]
-
-Overfull \hbox (33.69638pt too wide) in paragraph at lines 22--24
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]Constraint[][][][]System[]
-[][]const[][][]iterator[][][]from[][][][]Constraint[][][][]System[][][]const[][
-][]iterator[][] ([][]ppl[][][][]Constraint[]
-
-Overfull \hbox (11.7268pt too wide) in paragraph at lines 32--34
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraint[][][][]System[][][]const[][
-][]iterator[][][]dereference[][] ([][]ppl[][][]const[][][][]Constraint[][][][]S
-ystem[][][]const[][][]iterator[]
-
-Overfull \hbox (4.24669pt too wide) in paragraph at lines 38--40
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraint[][][][]System[][][]const[][
-][]iterator[][][]equal[][][]test[][] ([][]ppl[][][]const[][][][]Constraint[][][
-][]System[][][]const[][][]iterator[]
-[105]) (./interfaceppl__Constraint__System__tag.tex
+Overfull \hbox (1.79767pt too wide) in paragraph at lines 44--46
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraint[][][]coefficient[][] ([][]p
+pl[][][]const[][][][]Constraint[][][]t[][] c, [][]ppl[][][]dimension[][][]type[
+][] var, [][]ppl[][][][]Coefficient[]
+) (./interfaceppl__Constraints__Product__C__Polyhedron__Grid__tag.tex
 Overfull \hbox (19.39532pt too wide) in paragraph at lines 4806--4808
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]double[][][]f
 rom[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class(+[]Handle[][][]1, -[]
@@ -15353,17 +15408,36 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]is[][][]di
 sjoint[][][]from[][][][]Octagonal[][][][]Shape[][][]double(+[]Handle[]
 [134]
-Overfull \hbox (24.61707pt too wide) in paragraph at lines 22--24
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraint[][][][]System[][][
-]from[][][][]Constraint[][] ([][]ppl[][][][]Constraint[][][][]System[][][]t[][]
- $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pcs, [][]ppl[][][]const[][][][]Constrai
-nt[]
+Overfull \hbox (14.4614pt too wide) in paragraph at lines 15--17
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]delete[][][][]Constraints[][][][]Product[][
+][][]C[][][][]Polyhedron[][][][]Grid[][] ([][]ppl[][][]const[][][][]Constraints
+[][][][]Product[][][][]C[][][][]Polyhedron[]
 
-Overfull \hbox (2.09717pt too wide) in paragraph at lines 50--52
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraint[][][][]System[][][]end[][] 
-([][]ppl[][][]const[][][][]Constraint[][][][]System[][][]t[][] cs, [][]ppl[][][
-][]Constraint[][][][]System[][][]const[]
-[106
+Overfull \hbox (16.42136pt too wide) in paragraph at lines 17--19
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][]
+[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][]space[][][]dimension[][] ([][]
+ppl[][][][]Constraints[][][][]Product[]
+
+Overfull \hbox (5.32178pt too wide) in paragraph at lines 19--21
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][]
+[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]C[][][][]Polyhedron[][] ([][
+]ppl[][][][]Constraints[][][][]Product[]
+
+Overfull \hbox (19.76172pt too wide) in paragraph at lines 21--23
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][]
+[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]N[]N[]C[][][][]Polyhedron[][
+] ([][]ppl[][][][]Constraints[][][][]Product[]
+
+Overfull \hbox (27.2516pt too wide) in paragraph at lines 23--25
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][]
+[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Grid[][] ([][]ppl[][][][]Con
+straints[][][][]Product[][][][]C[][][][]Polyhedron[]
+
+Overfull \hbox (3.10153pt too wide) in paragraph at lines 25--27
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][]
+[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Rational[][][][]Box[][] ([][
+]ppl[][][][]Constraints[][][][]Product[]
+[108]
 Overfull \hbox (30.19531pt too wide) in paragraph at lines 4900--4902
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]equals[][]
 [][]Octagonal[][][][]Shape[][][]double(+[]Handle[][][]1, +[]Handle[]
@@ -15403,7 +15477,7 @@
 Overfull \hbox (16.9953pt too wide) in paragraph at lines 4945--4947
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]minimize(+
 []Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[]
-[135]]
+[135]
 Overfull \hbox (20.5953pt too wide) in paragraph at lines 4950--4952
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]maximize[]
 [][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[]
@@ -15419,7 +15493,7 @@
 Overfull \hbox (8.0138pt too wide) in paragraph at lines 4988--4990
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]add[][][]c
 ongruences( +[]Handle, +[]Congruence[][][][]System) 
-[136) (./interfaceppl__Constraint__tag.tex]
+[136]
 Overfull \hbox (8.0138pt too wide) in paragraph at lines 4991--4993
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]refine[][]
 []with[][][]constraint( +[]Handle, +[]Constraint) 
@@ -15468,135 +15542,7 @@
 Overfull \hbox (14.5953pt too wide) in paragraph at lines 5028--5030
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]generalize
 d[][][]affine[][][]image(+[]Handle, +[]P[]P[]L[][][][]Var, +[]
-[137
-Overfull \hbox (1.5281pt too wide) in paragraph at lines 16--18
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraint[][] ([][]ppl[][][]
-[]Constraint[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pc, [][]ppl[][][
-]const[][][][]Linear[][][][]Expression[][][]t[][] le, enum [][]ppl[][][]enum[]
-[107]]
-Overfull \hbox (11.6138pt too wide) in paragraph at lines 5031--5033
-[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]generalize
-d[][][]affine[][][]preimage(+[]Handle, +[]P[]P[]L[][][][]Var,
-
-Overfull \hbox (0.19531pt too wide) in paragraph at lines 5034--5036
-[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]generalize
-d[][][]affine[][][]image[][][]lhs[][][]rhs(+[]Handle, +[]
-
-Overfull \hbox (18.19531pt too wide) in paragraph at lines 5037--5039
-[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]generalize
-d[][][]affine[][][]preimage[][][]lhs[][][]rhs(+[]Handle, +[]
-
-Overfull \hbox (9.2138pt too wide) in paragraph at lines 5040--5042
-[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]wrap[][][]
-assign(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width,
-
-Overfull \hbox (15.79532pt too wide) in paragraph at lines 5059--5061
-[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]upper[][][
-]bound[][][]assign[][][]if[][][]exact(+[]Handle[][][]1, +[]Handle[]
-
-Overfull \hbox (30.19531pt too wide) in paragraph at lines 5062--5064
-[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]simplify[]
-[][]using[][][]context[][][]assign(+[]Handle[][][]1, +[]Handle[]
-[138
-Overfull \hbox (1.79767pt too wide) in paragraph at lines 44--46
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraint[][][]coefficient[][] ([][]p
-pl[][][]const[][][][]Constraint[][][]t[][] c, [][]ppl[][][]dimension[][][]type[
-][] var, [][]ppl[][][][]Coefficient[]
-) (./interfaceppl__Constraints__Product__C__Polyhedron__Grid__tag.tex]
-Overfull \hbox (20.5953pt too wide) in paragraph at lines 5065--5067
-[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]linear[][]
-[]partition(+[]Handle[][][]1, +[]Handle[][][]2, -[]Handle[]
-
-Overfull \hbox (0.81381pt too wide) in paragraph at lines 5072--5074
-[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][][]B[]H[]M[
-]Z05[][][]widening[][][]assign[][][]with[][][]tokens(+[]Handle[][][]1,
-
-Overfull \hbox (18.19531pt too wide) in paragraph at lines 5078--5080
-[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]widening[]
-[][]assign[][][]with[][][]tokens(+[]Handle[][][]1, +[]Handle[]
-
-Overfull \hbox (33.79532pt too wide) in paragraph at lines 5084--5086
-[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]limited[][
-][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign[][][]with[][][]tokens(+[]
-
-Overfull \hbox (21.79532pt too wide) in paragraph at lines 5087--5089
-[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]limited[][
-][][]C[]C76[][][]extrapolation[][][]assign[][][]with[][][]tokens(+[]
-
-Overfull \hbox (2.5953pt too wide) in paragraph at lines 5090--5092
-[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]limited[][
-][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign(+[]Handle[]
-
-Overfull \hbox (18.19531pt too wide) in paragraph at lines 5093--5095
-[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]limited[][
-][][]C[]C76[][][]extrapolation[][][]assign(+[]Handle[][][]1, +[]
-[139]
-Overfull \hbox (14.4614pt too wide) in paragraph at lines 15--17
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]delete[][][][]Constraints[][][][]Product[][
-][][]C[][][][]Polyhedron[][][][]Grid[][] ([][]ppl[][][]const[][][][]Constraints
-[][][][]Product[][][][]C[][][][]Polyhedron[]
-
-Overfull \hbox (16.42136pt too wide) in paragraph at lines 17--19
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][]
-[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][]space[][][]dimension[][] ([][]
-ppl[][][][]Constraints[][][][]Product[]
-
-Overfull \hbox (5.32178pt too wide) in paragraph at lines 19--21
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][]
-[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]C[][][][]Polyhedron[][] ([][
-]ppl[][][][]Constraints[][][][]Product[]
-
-Overfull \hbox (19.76172pt too wide) in paragraph at lines 21--23
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][]
-[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]N[]N[]C[][][][]Polyhedron[][
-] ([][]ppl[][][][]Constraints[][][][]Product[]
-
-Overfull \hbox (27.2516pt too wide) in paragraph at lines 23--25
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][]
-[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Grid[][] ([][]ppl[][][][]Con
-straints[][][][]Product[][][][]C[][][][]Polyhedron[]
-
-Overfull \hbox (3.10153pt too wide) in paragraph at lines 25--27
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][]
-[]C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Rational[][][][]Box[][] ([][
-]ppl[][][][]Constraints[][][][]Product[]
-[108]
-Overfull \hbox (42.19531pt too wide) in paragraph at lines 5112--5114
-[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]add[][][]s
-pace[][][]dimensions[][][]and[][][]embed(+[]Handle, +[]Dimension[]
-
-Overfull \hbox (0.19531pt too wide) in paragraph at lines 5115--5117
-[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]add[][][]s
-pace[][][]dimensions[][][]and[][][]project(+[]Handle, +[]
-
-Overfull \hbox (0.19531pt too wide) in paragraph at lines 5118--5120
-[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]remove[][]
-[]space[][][]dimensions(+[]Handle, +[]List[][][]of[][][][]P[]
-
-Overfull \hbox (44.5953pt too wide) in paragraph at lines 5121--5123
-[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]remove[][]
-[]higher[][][]space[][][]dimensions(+[]Handle, +[]Dimension[]
-
-Overfull \hbox (2.5953pt too wide) in paragraph at lines 5124--5126
-[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]expand[][]
-[]space[][][]dimension(+[]Handle, +[]P[]P[]L[][][][]Var, +[]
-
-Overfull \hbox (0.19531pt too wide) in paragraph at lines 5127--5129
-[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]fold[][][]
-space[][][]dimensions(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[]
-) (./PI_Compilation.tex [140]) (./PI_SD_Features.tex [141] [142]
-Overfull \hbox (30.3312pt too wide) in paragraph at lines 86--87
-[]\OT1/ptm/m/n/10 Notice that, for dy-namic link-ing to work, you should have c
-on-fig-ured the li-brary with the \OT1/pcr/m/n/10 --enable-shared
-
-Overfull \hbox (2.20367pt too wide) in paragraph at lines 100--101
-\OT1/ptm/m/n/10 e.[]g., [][]\OT1/pcr/m/n/10 http[]://www.[]cs.[]unipr.[]it/pipe
-rmail/ppl-devel/2006-[]January/007780.[]html[][]\OT1/ptm/m/n/10 ). 
-)
-Overfull \hbox (0.40225pt too wide) in paragraph at lines 102--207
-[]\OT1/ptm/m/n/10 In or-der to dy-nam-i-cally load the li-brary from Y[]AP you 
-should sim-ply load \OT1/pcr/m/n/10 prefix/lib/ppl/ppl[]
-(./modules.tex) (./group__PPL__Prolog__interface.tex
+[137]
 Overfull \hbox (0.58157pt too wide) in paragraph at lines 29--31
 []\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][]
 []C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[]
@@ -15670,19 +15616,31 @@
 Overfull \hbox (2.55026pt too wide) in paragraph at lines 55--57
 \OT1/ptm/bc/n/10 ([][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Pol
 yhedron[][][][]Grid[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]
-ppl[][][]const[][][) [143] [144] (./refman.ind
- [145]) (./refman.aux)
+ppl[][][]const[][][
+Overfull \hbox (11.6138pt too wide) in paragraph at lines 5031--5033
+[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]generalize
+d[][][]affine[][][]preimage(+[]Handle, +[]P[]P[]L[][][][]Var,
 
-Package rerunfilecheck Warning: File `refman.out' has changed.
-(rerunfilecheck)                Rerun to get outlines right
-(rerunfilecheck)                or use package `bookmark'.
+Overfull \hbox (0.19531pt too wide) in paragraph at lines 5034--5036
+[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]generalize
+d[][][]affine[][][]image[][][]lhs[][][]rhs(+[]Handle, +[]
 
- )
-(see the transcript file for additional information){/usr/share/texlive/texmf-d
-ist/fonts/enc/dvips/base/8r.enc}</usr/share/texlive/texmf-dist/fonts/type1/publ
-ic/amsfonts/cm/cmmi10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/ams
-fonts/cm/cmmi7.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/c
-m/cmr10.pfb][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]t[][] ph,
+Overfull \hbox (18.19531pt too wide) in paragraph at lines 5037--5039
+[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]generalize
+d[][][]affine[][][]preimage[][][]lhs[][][]rhs(+[]Handle, +[]
+
+Overfull \hbox (9.2138pt too wide) in paragraph at lines 5040--5042
+[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]wrap[][][]
+assign(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width,
+
+Overfull \hbox (15.79532pt too wide) in paragraph at lines 5059--5061
+[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]upper[][][
+]bound[][][]assign[][][]if[][][]exact(+[]Handle[][][]1, +[]Handle[]
+
+Overfull \hbox (30.19531pt too wide) in paragraph at lines 5062--5064
+[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]simplify[]
+[][]using[][][]context[][][]assign(+[]Handle[][][]1, +[]Handle[]
+[138]][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]t[][] ph,
  int
 
 Overfull \hbox (21.46991pt too wide) in paragraph at lines 57--59
@@ -15726,16 +15684,59 @@
 []\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Constraints[][][][]Product[][][]
 []C[][][][]Polyhedron[][][][]Grid[][][]from[][][][]Constraint[][][][]System[][]
  ([][]ppl[][][][]Constraints[][][][]Product[]
-[109></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr7.
-pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb]></
-usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy7.pfb></usr/sha
-re/texlive/texmf-dist/fonts/type1/public/amsfonts/symbols/msbm10.pfb></usr/shar
-e/texlive/texmf-dist/fonts/type1/urw/courier/ucrb8a.pfb></usr/share/texlive/tex
-mf-dist/fonts/type1/urw/courier/ucrr8a.pfb></usr/share/texlive/texmf-dist/fonts
-/type1/urw/courier/ucrro8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/h
-elvetic/uhvr8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmb8a.
-pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmr8a.pfb></usr/share
-/texlive/texmf-dist/fonts/type1/urw/times/utmri8a.pfb
+[109
+Overfull \hbox (20.5953pt too wide) in paragraph at lines 5065--5067
+[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]linear[][]
+[]partition(+[]Handle[][][]1, +[]Handle[][][]2, -[]Handle[]
+
+Overfull \hbox (0.81381pt too wide) in paragraph at lines 5072--5074
+[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][][]B[]H[]M[
+]Z05[][][]widening[][][]assign[][][]with[][][]tokens(+[]Handle[][][]1,
+
+Overfull \hbox (18.19531pt too wide) in paragraph at lines 5078--5080
+[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]widening[]
+[][]assign[][][]with[][][]tokens(+[]Handle[][][]1, +[]Handle[]
+
+Overfull \hbox (33.79532pt too wide) in paragraph at lines 5084--5086
+[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]limited[][
+][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign[][][]with[][][]tokens(+[]
+
+Overfull \hbox (21.79532pt too wide) in paragraph at lines 5087--5089
+[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]limited[][
+][][]C[]C76[][][]extrapolation[][][]assign[][][]with[][][]tokens(+[]
+
+Overfull \hbox (2.5953pt too wide) in paragraph at lines 5090--5092
+[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]limited[][
+][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign(+[]Handle[]
+
+Overfull \hbox (18.19531pt too wide) in paragraph at lines 5093--5095
+[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]limited[][
+][][]C[]C76[][][]extrapolation[][][]assign(+[]Handle[][][]1, +[]
+[139]]
+Overfull \hbox (42.19531pt too wide) in paragraph at lines 5112--5114
+[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]add[][][]s
+pace[][][]dimensions[][][]and[][][]embed(+[]Handle, +[]Dimension[]
+
+Overfull \hbox (0.19531pt too wide) in paragraph at lines 5115--5117
+[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]add[][][]s
+pace[][][]dimensions[][][]and[][][]project(+[]Handle, +[]
+
+Overfull \hbox (0.19531pt too wide) in paragraph at lines 5118--5120
+[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]remove[][]
+[]space[][][]dimensions(+[]Handle, +[]List[][][]of[][][][]P[]
+
+Overfull \hbox (44.5953pt too wide) in paragraph at lines 5121--5123
+[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]remove[][]
+[]higher[][][]space[][][]dimensions(+[]Handle, +[]Dimension[]
+
+Overfull \hbox (2.5953pt too wide) in paragraph at lines 5124--5126
+[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]expand[][]
+[]space[][][]dimension(+[]Handle, +[]P[]P[]L[][][][]Var, +[]
+
+Overfull \hbox (0.19531pt too wide) in paragraph at lines 5127--5129
+[]\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]fold[][][]
+space[][][]dimensions(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[]
+) (./PI_Compilation.tex [140]) (./PI_SD_Features.tex [141]
 Overfull \hbox (26.11101pt too wide) in paragraph at lines 77--79
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][]
 []Polyhedron[][][][]Grid[][][]relation[][][]with[][][][]Generator[][] ([][]ppl[
@@ -15810,17 +15811,19 @@
 
 Overfull \hbox (3.36195pt too wide) in paragraph at lines 101--103
 [][][]\OT1/ptm/bc/n/10 C[][][][]Polyhedron[][][][]Grid[][][]t[][] ph, [][]ppl[]
->
-Output written on refman.pdf (151 pages, 759272 bytes).
-Transcript written on refman.log.
-latex_count=8 ; \
-while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $latex_count -gt 0 ] ;\
-    do \
-      echo "Rerunning latex...." ;\
-      pdflatex refman ;\
-      latex_count=`expr $latex_count - 1` ;\
-    done
-[][]const[][][][]Linear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]Coeffic
+ [142]
+Overfull \hbox (30.3312pt too wide) in paragraph at lines 86--87
+[]\OT1/ptm/m/n/10 Notice that, for dy-namic link-ing to work, you should have c
+on-fig-ured the li-brary with the \OT1/pcr/m/n/10 --enable-shared
+
+Overfull \hbox (2.20367pt too wide) in paragraph at lines 100--101
+\OT1/ptm/m/n/10 e.[]g., [][]\OT1/pcr/m/n/10 http[]://www.[]cs.[]unipr.[]it/pipe
+rmail/ppl-devel/2006-[]January/007780.[]html[][]\OT1/ptm/m/n/10 ). 
+)
+Overfull \hbox (0.40225pt too wide) in paragraph at lines 102--207
+[]\OT1/ptm/m/n/10 In or-der to dy-nam-i-cally load the li-brary from Y[]AP you 
+should sim-ply load \OT1/pcr/m/n/10 prefix/lib/ppl/ppl[]
+(./modules.tex) (./group__PPL__Prolog__interface.tex)[][]const[][][][]Linear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]Coeffic
 ient[][][]t[][] ext[][][]n, [][]ppl[][][][]Coefficient[]
 
 Overfull \hbox (13.92102pt too wide) in paragraph at lines 103--105
@@ -15867,14 +15870,38 @@
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][]
 []Polyhedron[][][][]Grid[][][]add[][][]congruence[][] ([][]ppl[][][][]Constrain
 ts[][][][]Product[][][][]C[][][][]Polyhedron[]
-[110makeindex refman.idx
-]This is makeindex, version 2.15 [TeX Live 2019/dev] (kpathsea + Thai support).
-Scanning input file refman.idx....done (1 entries accepted, 0 rejected).
-Sorting entries...done (0 comparisons).
-Generating output file refman.ind....done (5 lines written, 0 warnings).
-Output written in refman.ind.
-Transcript written in refman.ilg.
-pdflatex refman
+[110 [143] [144] (./refman.ind
+ [145]) (./refman.aux)
+
+Package rerunfilecheck Warning: File `refman.out' has changed.
+(rerunfilecheck)                Rerun to get outlines right
+(rerunfilecheck)                or use package `bookmark'.
+
+ )
+(see the transcript file for additional information){/usr/share/texlive/texmf-d
+ist/fonts/enc/dvips/base/8r.enc}</usr/share/texlive/texmf-dist/fonts/type1/publ
+ic/amsfonts/cm/cmmi10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/ams
+fonts/cm/cmmi7.pfb>]</usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/c
+m/cmr10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr7.
+pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb></
+usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy7.pfb></usr/sha
+re/texlive/texmf-dist/fonts/type1/public/amsfonts/symbols/msbm10.pfb></usr/shar
+e/texlive/texmf-dist/fonts/type1/urw/courier/ucrb8a.pfb></usr/share/texlive/tex
+mf-dist/fonts/type1/urw/courier/ucrr8a.pfb></usr/share/texlive/texmf-dist/fonts
+/type1/urw/courier/ucrro8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/h
+elvetic/uhvr8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmb8a.
+pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmr8a.pfb></usr/share
+/texlive/texmf-dist/fonts/type1/urw/times/utmri8a.pfb>
+Output written on refman.pdf (151 pages, 758851 bytes).
+Transcript written on refman.log.
+latex_count=8 ; \
+while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $latex_count -gt 0 ] ;\
+    do \
+      echo "Rerunning latex...." ;\
+      pdflatex refman ;\
+      latex_count=`expr $latex_count - 1` ;\
+    done
+makeindex refman.idx
 
 Overfull \hbox (27.2413pt too wide) in paragraph at lines 119--121
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][]
@@ -15950,14 +15977,21 @@
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][]
 []Polyhedron[][][][]Grid[][][]generalized[][][]affine[][][]preimage[][][]lhs[][
 ][]rhs[][] ([][]ppl[][][][]Constraints[]
-[111This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) (preloaded format=pdflatex)
+[111This is makeindex, version 2.15 [TeX Live 2019/dev] (kpathsea + Thai support).
+Scanning input file refman.idx....done (1 entries accepted, 0 rejected).
+Sorting entries...done (0 comparisons).
+Generating output file refman.ind....done (5 lines written, 0 warnings).
+Output written in refman.ind.
+Transcript written in refman.ilg.
+pdflatex refman
+]This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2019/dev/Debian) (preloaded format=pdflatex)
  restricted \write18 enabled.
 entering extended mode
 (./refman.tex
 LaTeX2e <2018-12-01>
 (/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
 Document Class: article 2018/09/03 v1.4i Standard LaTeX document class
-(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo)])
+(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo))
 (/usr/share/texlive/texmf-dist/tex/latex/a4wide/a4wide.sty
 (/usr/share/texlive/texmf-dist/tex/latex/ntgclass/a4.sty))
 (/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty)
@@ -15971,11 +16005,6 @@
 (/usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty)
 (/usr/share/texlive/texmf-dist/tex/latex/float/float.sty)
 (/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty
-(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def
-(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu)))
-(/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/tocloft/tocloft.sty
 Overfull \hbox (8.89146pt too wide) in paragraph at lines 165--167
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Constraints[][][][]Product[][][][]C[][][]
 []Polyhedron[][][][]Grid[][][]add[][][]space[][][]dimensions[][][]and[][][]embe
@@ -16050,25 +16079,29 @@
 Overfull \hbox (36.6532pt too wide) in paragraph at lines 211--212
  []\OT1/ptm/b/n/10 ppl[][][]delete[][][][]Constraints[][][][]Product[][][][]C[]
 [][][]Polyhedron[][][][]Grid()[] \OT1/pcr/m/n/8 int ppl[][][]delete[][][][]Cons
-traints[][][][]Product[][][][]C[][][][]Polyhedro)
-(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
-(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg)n[]
+traints[][][][]Product[][][][]C[][][][]Polyhedro
+(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def
+(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu)n[]
 
 Overfull \hbox (18.3924pt too wide) in paragraph at lines 217--218
  []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][
 ][]Polyhedron[][][][]Grid[][][]from[][][]space[][][]dimension()[] \OT1/pcr/m/n/
 8 int ppl[][][]new[][][][]Constraints[]
-[112
+[112))
+(/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/tocloft/tocloft.sty])
+(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/xcolor/xcolor.sty
+(/usr/share/texlive/texmf-dist/tex/latex/graphics-cfg/color.cfg)
 (/usr/share/texlive/texmf-dist/tex/latex/colortbl/colortbl.sty
-(/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty))])
+(/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty)))
 (/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty
 (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty
 (/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty))
 (/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty)
 (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty)
 (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def)
 Overfull \hbox (7.45296pt too wide) in paragraph at lines 223--224
  []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][
 ][]Polyhedron[][][][]Grid[][][]from[][][][]C[][][][]Polyhedron()[] \OT1/pcr/m/n
@@ -16108,7 +16141,8 @@
  []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][
 ][]Polyhedron[][][][]Grid[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][
 ]class()[] \OT1/pcr/m/n/8 int ppl[][][]new[]
-[113]
+[113
+(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def])
 (/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg)
 (/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def
 Overfull \hbox (1.2729pt too wide) in paragraph at lines 271--272
@@ -16157,11 +16191,6 @@
 (/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def)
 (/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty) (./doxygen.sty
 (/usr/share/texlive/texmf-dist/tex/latex/tools/calc.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/tools/verbatim.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty)
-(/usr/share/texlive/texmf-dist/tex/latex/tabu/tabu.sty
-(/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty)
 Overfull \hbox (8.31012pt too wide) in paragraph at lines 319--320
  []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][
 ][]Polyhedron[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]clas
@@ -16211,7 +16240,12 @@
 \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][
 ][]Polyhedron[][][][]Grid[][][]from[][][][]Octagonal[][][][]Shape[][][]double[]
 [][]with[][][]complexity ( 
-[115])
+[115
+(/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/tools/verbatim.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty)
+(/usr/share/texlive/texmf-dist/tex/latex/tabu/tabu.sty
+(/usr/share/texlive/texmf-dist/tex/latex/varwidth/varwidth.sty]))
 (/usr/share/texlive/texmf-dist/tex/latex/tools/tabularx.sty)
 (/usr/share/texlive/texmf-dist/tex/latex/multirow/multirow.sty))
 (/build/ppl-1.2/doc/ppl.sty
@@ -16329,11 +16363,16 @@
  []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
 dron[][][][]Grid[][][]maximize()[] \OT1/pcr/m/n/8 int ppl[][][][]Constraints[][
 ][][]Product[][][][]C[][][][]Polyhedron[]
-[117] [1{/var/lib/texmf/fo
+[117 [1]{/var/lib/texmf/fo
 nts/map/pdftex/updmap/pdftex.map} </build/ppl-1.2/doc/ppl_logo.pdf>] [2]
 (/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1pcr.fd) [3 </build/ppl-1.2/d
 oc/bugseng_logo.pdf>] [4] (./refman.toc) [1 </build/ppl-1.2/doc/ppl_logo_no_ppl
-.pdf>] [2] (./index.tex
+.pdf>] [2] (./index.tex) (./GPL.texpdfTeX warning (ext4): destination with the 
+same identifier (name{page.1}) has been already used, duplicate ignored
+<to be read again> 
+                   \relax 
+l.22 
+      [1
 Overfull \hbox (19.42297pt too wide) in paragraph at lines 463--464
  []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
 dron[][][][]Grid[][][]minimize()[] \OT1/pcr/m/n/8 int ppl[][][][]Constraints[][
@@ -16373,17 +16412,12 @@
 [][][]\OT1/ptm/b/n/10 Grid()[] \OT1/pcr/m/n/8 int ppl[][][][]Constraints[][][][
 ]Product[][][][]C[][][][]Polyhedron[][][][]Grid[][][]is[][][]disjoint[][][]from
 [][][][]Constraints[][][][]Product[][][][]C[]
-[118) (./GPL.tex]pdfTeX warning (ext4): destination with the 
-same identifier (name{page.1}) has been already used, duplicate ignored
-<to be read again> 
-                   \relax 
-l.22 
-      [1]pdfTeX warning (ext4): destination with the same identifier (name{page
+[118]pdfTeX warning (ext4): destination with the same identifier (name{page
 .2}) has been already used, duplicate ignored
 <to be read again> 
                    \relax 
 l.58 
-      [2]pdfTeX warning (ext4): destination with the same identifier (name{page
+      [2]]pdfTeX warning (ext4): destination with the same identifier (name{page
 .3}) has been already used, duplicate ignored
 <to be read again> 
                    \relax 
@@ -16437,7 +16471,11 @@
 Overfull \hbox (10.35326pt too wide) in paragraph at lines 291--187
 \OT1/ptm/m/n/10 stead of this Li-cense. But first, please read [][]\OT1/pcr/m/n
 /10 http[]://www.[]gnu.[]org/philosophy/why-not-lgpl.[]
-[9] (./GFDL.tex [10] [11] [12
+[9] (./GFDL.tex [10] [11] [12]
+Overfull \hbox (7.49895pt too wide) in paragraph at lines 97--98
+\OT1/ptm/m/n/10 ments, form-ing one sec-tion En-ti-tled "[]History"; like-wise 
+com-bine any sec-tions En-ti-tled "[]Acknowledgements",
+[13]
 Overfull \hbox (18.9924pt too wide) in paragraph at lines 547--548
  []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
 dron[][][][]Grid[][][]refine[][][]with[][][]constraints()[] \OT1/pcr/m/n/8 int 
@@ -16477,11 +16515,7 @@
  []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
 dron[][][][]Grid[][][]upper[][][]bound[][][]assign[][][]if[][][]exact()[] \OT1/
 pcr/m/n/8 int ppl[][][][]Constraints[]
-[120]]
-Overfull \hbox (7.49895pt too wide) in paragraph at lines 97--98
-\OT1/ptm/m/n/10 ments, form-ing one sec-tion En-ti-tled "[]History"; like-wise 
-com-bine any sec-tions En-ti-tled "[]Acknowledgements",
-[13]) (./PI_SI_Features.tex [14]
+[120)] (./PI_SI_Features.tex [14]
 Underfull \hbox (badness 10000) in paragraph at lines 19--20
 
 
@@ -16496,41 +16530,6 @@
 []S[][][]T, Smash[][][][]Product[][][][]S[][][]T, Constraints[][][][]Product[]
 [15] [16]
 Underfull \vbox (badness 10000) has occurred while \output is active [17]
-Overfull \hbox (23.87296pt too wide) in paragraph at lines 595--596
- []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
-dron[][][][]Grid[][][]constrains()[] \OT1/pcr/m/n/8 int ppl[][][][]Constraints[
-][][][]Product[][][][]C[][][][]Polyhedron[]
-
-Overfull \hbox (10.49197pt too wide) in paragraph at lines 601--602
- []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
-dron[][][][]Grid[][][]unconstrain[][][]space[][][]dimension()[] \OT1/pcr/m/n/8 
-int ppl[][][][]Constraints[]
-
-Overfull \hbox (14.38187pt too wide) in paragraph at lines 607--608
- []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
-dron[][][][]Grid[][][]unconstrain[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8
- int ppl[][][][]Constraints[]
-
-Overfull \hbox (33.02313pt too wide) in paragraph at lines 613--614
- []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
-dron[][][][]Grid[][][]affine[][][]image()[] \OT1/pcr/m/n/8 int ppl[][][][]Const
-raints[][][][]Product[][][][]C[][][][]Polyhedron[]
-
-Overfull \hbox (47.28302pt too wide) in paragraph at lines 619--620
- []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
-dron[][][][]Grid[][][]affine[][][]preimage()[] \OT1/pcr/m/n/8 int ppl[][][][]Co
-nstraints[][][][]Product[][][][]C[][][][]Polyhedron[]
-
-Overfull \hbox (15.30272pt too wide) in paragraph at lines 625--626
- []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
-dron[][][][]Grid[][][]bounded[][][]affine[][][]image()[] \OT1/pcr/m/n/8 int ppl
-[][][][]Constraints[][][][]Product[]
-
-Overfull \hbox (29.5626pt too wide) in paragraph at lines 631--632
- []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
-dron[][][][]Grid[][][]bounded[][][]affine[][][]preimage()[] \OT1/pcr/m/n/8 int 
-ppl[][][][]Constraints[][][][]Product[]
-[121]
 Underfull \hbox (badness 10000) in paragraph at lines 241--242
 
 
@@ -16572,7 +16571,42 @@
 
 Underfull \hbox (badness 10000) in paragraph at lines 308--309
 
-[19]
+[19
+Overfull \hbox (23.87296pt too wide) in paragraph at lines 595--596
+ []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
+dron[][][][]Grid[][][]constrains()[] \OT1/pcr/m/n/8 int ppl[][][][]Constraints[
+][][][]Product[][][][]C[][][][]Polyhedron[]
+
+Overfull \hbox (10.49197pt too wide) in paragraph at lines 601--602
+ []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
+dron[][][][]Grid[][][]unconstrain[][][]space[][][]dimension()[] \OT1/pcr/m/n/8 
+int ppl[][][][]Constraints[]
+
+Overfull \hbox (14.38187pt too wide) in paragraph at lines 607--608
+ []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
+dron[][][][]Grid[][][]unconstrain[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8
+ int ppl[][][][]Constraints[]
+
+Overfull \hbox (33.02313pt too wide) in paragraph at lines 613--614
+ []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
+dron[][][][]Grid[][][]affine[][][]image()[] \OT1/pcr/m/n/8 int ppl[][][][]Const
+raints[][][][]Product[][][][]C[][][][]Polyhedron[]
+
+Overfull \hbox (47.28302pt too wide) in paragraph at lines 619--620
+ []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
+dron[][][][]Grid[][][]affine[][][]preimage()[] \OT1/pcr/m/n/8 int ppl[][][][]Co
+nstraints[][][][]Product[][][][]C[][][][]Polyhedron[]
+
+Overfull \hbox (15.30272pt too wide) in paragraph at lines 625--626
+ []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
+dron[][][][]Grid[][][]bounded[][][]affine[][][]image()[] \OT1/pcr/m/n/8 int ppl
+[][][][]Constraints[][][][]Product[]
+
+Overfull \hbox (29.5626pt too wide) in paragraph at lines 631--632
+ []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
+dron[][][][]Grid[][][]bounded[][][]affine[][][]preimage()[] \OT1/pcr/m/n/8 int 
+ppl[][][][]Constraints[][][][]Product[]
+[121]]
 Underfull \hbox (badness 10000) in paragraph at lines 313--314
 
 
@@ -16613,36 +16647,6 @@
 Underfull \hbox (badness 10000) in paragraph at lines 374--375
 
 [20]
-Overfull \hbox (26.94246pt too wide) in paragraph at lines 637--638
- []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
-dron[][][][]Grid[][][]generalized[][][]affine[][][]image()[] \OT1/pcr/m/n/8 int
- ppl[][][][]Constraints[][][][]Product[]
-
-Overfull \hbox (4.72232pt too wide) in paragraph at lines 643--644
- []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
-dron[][][][]Grid[][][]generalized[][][]affine[][][]preimage()[] \OT1/pcr/m/n/8 
-int ppl[][][][]Constraints[]
-
-Overfull \hbox (23.78194pt too wide) in paragraph at lines 649--650
- []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
-dron[][][][]Grid[][][]generalized[][][]affine[][][]image[][][]lhs[][][]rhs()[] 
-\OT1/pcr/m/n/8 int ppl[][][][]Constraints[]
-
-Overfull \hbox (38.04182pt too wide) in paragraph at lines 655--656
- []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
-dron[][][][]Grid[][][]generalized[][][]affine[][][]preimage[][][]lhs[][][]rhs()
-[] \OT1/pcr/m/n/8 int ppl[][][][]Constraints[]
-
-Overfull \hbox (31.03197pt too wide) in paragraph at lines 661--662
- []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
-dron[][][][]Grid[][][]add[][][]space[][][]dimensions[][][]and[][][]embed()[] \O
-T1/pcr/m/n/8 int ppl[][][][]Constraints[]
-
-Overfull \hbox (33.062pt too wide) in paragraph at lines 667--668
- []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
-dron[][][][]Grid[][][]add[][][]space[][][]dimensions[][][]and[][][]project()[] 
-\OT1/pcr/m/n/8 int ppl[][][][]Constraints[]
-[122
 Underfull \hbox (badness 10000) in paragraph at lines 379--380
 
 
@@ -16720,7 +16724,37 @@
 
 Underfull \hbox (badness 10000) in paragraph at lines 439--440
 
-[21]]
+[21]
+Overfull \hbox (26.94246pt too wide) in paragraph at lines 637--638
+ []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
+dron[][][][]Grid[][][]generalized[][][]affine[][][]image()[] \OT1/pcr/m/n/8 int
+ ppl[][][][]Constraints[][][][]Product[]
+
+Overfull \hbox (4.72232pt too wide) in paragraph at lines 643--644
+ []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
+dron[][][][]Grid[][][]generalized[][][]affine[][][]preimage()[] \OT1/pcr/m/n/8 
+int ppl[][][][]Constraints[]
+
+Overfull \hbox (23.78194pt too wide) in paragraph at lines 649--650
+ []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
+dron[][][][]Grid[][][]generalized[][][]affine[][][]image[][][]lhs[][][]rhs()[] 
+\OT1/pcr/m/n/8 int ppl[][][][]Constraints[]
+
+Overfull \hbox (38.04182pt too wide) in paragraph at lines 655--656
+ []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
+dron[][][][]Grid[][][]generalized[][][]affine[][][]preimage[][][]lhs[][][]rhs()
+[] \OT1/pcr/m/n/8 int ppl[][][][]Constraints[]
+
+Overfull \hbox (31.03197pt too wide) in paragraph at lines 661--662
+ []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
+dron[][][][]Grid[][][]add[][][]space[][][]dimensions[][][]and[][][]embed()[] \O
+T1/pcr/m/n/8 int ppl[][][][]Constraints[]
+
+Overfull \hbox (33.062pt too wide) in paragraph at lines 667--668
+ []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
+dron[][][][]Grid[][][]add[][][]space[][][]dimensions[][][]and[][][]project()[] 
+\OT1/pcr/m/n/8 int ppl[][][][]Constraints[]
+[122]
 Underfull \hbox (badness 10000) in paragraph at lines 444--445
 
 
@@ -16783,7 +16817,7 @@
 
 Underfull \hbox (badness 10000) in paragraph at lines 544--545
 
-[23]
+[23]) (./configured_domains_predicates.tex [24
 Overfull \hbox (31.01239pt too wide) in paragraph at lines 673--674
  []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
 dron[][][][]Grid[][][]remove[][][]space[][][]dimensions()[] \OT1/pcr/m/n/8 int 
@@ -16823,7 +16857,7 @@
  []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
 dron[][][][]Grid[][][]external[][][]memory[][][]in[][][]bytes()[] \OT1/pcr/m/n/
 8 int ppl[][][][]Constraints[][][][]Product[]
-[123)] (./configured_domains_predicates.tex [24]
+[123]]
 Overfull \hbox (6.19531pt too wide) in paragraph at lines 34--36
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]C[][][][]Polyhedron[][][]from[][][]space[
 ][][]dimension(+[]Dimension[][][][]Type, +[]Universe[][][]or[]
@@ -16835,6 +16869,32 @@
 Underfull \hbox (badness 10000) in paragraph at lines 71--72
 
 [25]
+Overfull \hbox (11.00215pt too wide) in paragraph at lines 104--106
+\OT1/ptm/m/it/10 Builds a new N[]NC poly-he-dron \OT1/pcr/m/sl/10 P[][][]1 \OT1
+/ptm/m/it/10 from the bd[][][]shape[][][]mpz[][][]class ref-er-enced by han-dle
+ \OT1/pcr/m/sl/10 Handle[][][]1\OT1/ptm/m/it/10 . \OT1/pcr/m/sl/10 Handle[]
+
+Overfull \hbox (12.11226pt too wide) in paragraph at lines 110--112
+\OT1/ptm/m/it/10 Builds a new N[]NC poly-he-dron \OT1/pcr/m/sl/10 P[][][]1 \OT1
+/ptm/m/it/10 from the bd[][][]shape[][][]mpq[][][]class ref-er-enced by han-dle
+ \OT1/pcr/m/sl/10 Handle[][][]1\OT1/ptm/m/it/10 . \OT1/pcr/m/sl/10 Handle[]
+
+Overfull \hbox (1.39532pt too wide) in paragraph at lines 113--115
+[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]C[][][][]Polyhedron[][][]from[][][][]Octa
+gonal[][][][]Shape[][][]mpz[][][]class(+[]Handle[][][]1, -[]Handle[][][]
+
+Overfull \hbox (9.79532pt too wide) in paragraph at lines 116--118
+[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]N[]N[]C[][][][]Polyhedron[][][]from[][][]
+[]Octagonal[][][][]Shape[][][]mpz[][][]class(+[]Handle[][][]1, -[]Handle[]
+
+Overfull \hbox (1.39532pt too wide) in paragraph at lines 119--121
+[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]C[][][][]Polyhedron[][][]from[][][][]Octa
+gonal[][][][]Shape[][][]mpq[][][]class(+[]Handle[][][]1, -[]Handle[][][]
+
+Overfull \hbox (9.79532pt too wide) in paragraph at lines 122--124
+[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]N[]N[]C[][][][]Polyhedron[][][]from[][][]
+[]Octagonal[][][][]Shape[][][]mpq[][][]class(+[]Handle[][][]1, -[]Handle[]
+[26
 Overfull \hbox (17.7627pt too wide) in paragraph at lines 721--722
  []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
 dron[][][][]Grid[][][]total[][][]memory[][][]in[][][]bytes()[] \OT1/pcr/m/n/8 i
@@ -16874,87 +16934,7 @@
  []\OT1/ptm/b/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhe
 dron[][][][]Grid[][][]ascii[][][]load()[] \OT1/pcr/m/n/8 int ppl[][][][]Constra
 ints[][][][]Product[][][][]C[][][][]Polyhedron[]
-[124]) (./interfaceppl__Double__Box__tag.tex
-Overfull \hbox (11.00215pt too wide) in paragraph at lines 104--106
-\OT1/ptm/m/it/10 Builds a new N[]NC poly-he-dron \OT1/pcr/m/sl/10 P[][][]1 \OT1
-/ptm/m/it/10 from the bd[][][]shape[][][]mpz[][][]class ref-er-enced by han-dle
- \OT1/pcr/m/sl/10 Handle[][][]1\OT1/ptm/m/it/10 . \OT1/pcr/m/sl/10 Handle[]
-
-Overfull \hbox (12.11226pt too wide) in paragraph at lines 110--112
-\OT1/ptm/m/it/10 Builds a new N[]NC poly-he-dron \OT1/pcr/m/sl/10 P[][][]1 \OT1
-/ptm/m/it/10 from the bd[][][]shape[][][]mpq[][][]class ref-er-enced by han-dle
- \OT1/pcr/m/sl/10 Handle[][][]1\OT1/ptm/m/it/10 . \OT1/pcr/m/sl/10 Handle[]
-
-Overfull \hbox (1.39532pt too wide) in paragraph at lines 113--115
-[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]C[][][][]Polyhedron[][][]from[][][][]Octa
-gonal[][][][]Shape[][][]mpz[][][]class(+[]Handle[][][]1, -[]Handle[][][]
-
-Overfull \hbox (9.79532pt too wide) in paragraph at lines 116--118
-[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]N[]N[]C[][][][]Polyhedron[][][]from[][][]
-[]Octagonal[][][][]Shape[][][]mpz[][][]class(+[]Handle[][][]1, -[]Handle[]
-
-Overfull \hbox (1.39532pt too wide) in paragraph at lines 119--121
-[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]C[][][][]Polyhedron[][][]from[][][][]Octa
-gonal[][][][]Shape[][][]mpq[][][]class(+[]Handle[][][]1, -[]Handle[][][]
-
-Overfull \hbox (9.79532pt too wide) in paragraph at lines 122--124
-[]\OT1/pcr/m/n/10 ppl[][][]new[][][][]N[]N[]C[][][][]Polyhedron[][][]from[][][]
-[]Octagonal[][][][]Shape[][][]mpq[][][]class(+[]Handle[][][]1, -[]Handle[]
-[26]
-Overfull \hbox (7.5225pt too wide) in paragraph at lines 27--29
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][
-][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][][]Double[][][][]Box[
-][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const[][][]
-[]B[]D[][][][]Shape[]
-
-Overfull \hbox (8.08257pt too wide) in paragraph at lines 29--31
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][
-][]B[]D[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][][]Double[][][][]Box[
-][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const[][][]
-[]B[]D[][][][]Shape[]
-
-Overfull \hbox (20.86249pt too wide) in paragraph at lines 39--41
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][
-][]Octagonal[][][][]Shape[][][]double[][] ([][]ppl[][][][]Double[][][][]Box[][]
-[]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const[][][][]O
-ctagonal[]
-
-Overfull \hbox (2.41263pt too wide) in paragraph at lines 41--43
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][
-][]C[][][][]Polyhedron[][][]with[][][]complexity[][] ([][]ppl[][][][]Double[][]
-[][]Box[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]con
-st[]
-
-Overfull \hbox (0.19238pt too wide) in paragraph at lines 47--49
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][
-][]Rational[][][][]Box[][][]with[][][]complexity[][] ([][]ppl[][][][]Double[][]
-[][]Box[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]con
-st[]
-
-Overfull \hbox (7.11237pt too wide) in paragraph at lines 49--51
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][
-][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity[][] ([][]ppl
-[][][][]Double[][][][]Box[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph
-, [][]ppl[]
-
-Overfull \hbox (7.67242pt too wide) in paragraph at lines 51--53
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][
-][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity[][] ([][]ppl
-[][][][]Double[][][][]Box[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph
-, [][]ppl[]
-
-Overfull \hbox (10.54063pt too wide) in paragraph at lines 53--55
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][
-][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity[][] ([]
-[]ppl[][][][]Double[][][][]Box[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/1
-0 pph,
-
-Overfull \hbox (11.1007pt too wide) in paragraph at lines 55--57
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][
-][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity[][] ([]
-[]ppl[][][][]Double[][][][]Box[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/1
-0 pph,
-[125]
+[124]]) (./interfaceppl__Double__Box__tag.tex
 Overfull \hbox (15.07239pt too wide) in paragraph at lines 137--139
 \OT1/ptm/m/it/10 Builds a new C poly-he-dron \OT1/pcr/m/sl/10 P[][][]1 \OT1/ptm
 /m/it/10 from the octagonal[][][]shape[][][]double ref-er-enced by han-dle \OT1
@@ -17055,7 +17035,61 @@
 Overfull \hbox (18.81381pt too wide) in paragraph at lines 206--208
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]N[]N[]C[][][][]Polyhedron[][][]from[][][]
 []Octagonal[][][][]Shape[][][]double[][][]with[][][]complexity(+[]Handle,
-[29]
+[29
+Overfull \hbox (7.5225pt too wide) in paragraph at lines 27--29
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][
+][]B[]D[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][][][]Double[][][][]Box[
+][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const[][][]
+[]B[]D[][][][]Shape[]
+
+Overfull \hbox (8.08257pt too wide) in paragraph at lines 29--31
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][
+][]B[]D[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][][][]Double[][][][]Box[
+][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const[][][]
+[]B[]D[][][][]Shape[]
+
+Overfull \hbox (20.86249pt too wide) in paragraph at lines 39--41
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][
+][]Octagonal[][][][]Shape[][][]double[][] ([][]ppl[][][][]Double[][][][]Box[][]
+[]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const[][][][]O
+ctagonal[]
+
+Overfull \hbox (2.41263pt too wide) in paragraph at lines 41--43
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][
+][]C[][][][]Polyhedron[][][]with[][][]complexity[][] ([][]ppl[][][][]Double[][]
+[][]Box[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]con
+st[]
+
+Overfull \hbox (0.19238pt too wide) in paragraph at lines 47--49
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][
+][]Rational[][][][]Box[][][]with[][][]complexity[][] ([][]ppl[][][][]Double[][]
+[][]Box[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]con
+st[]
+
+Overfull \hbox (7.11237pt too wide) in paragraph at lines 49--51
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][
+][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity[][] ([][]ppl
+[][][][]Double[][][][]Box[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph
+, [][]ppl[]
+
+Overfull \hbox (7.67242pt too wide) in paragraph at lines 51--53
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][
+][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity[][] ([][]ppl
+[][][][]Double[][][][]Box[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph
+, [][]ppl[]
+
+Overfull \hbox (10.54063pt too wide) in paragraph at lines 53--55
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][
+][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity[][] ([]
+[]ppl[][][][]Double[][][][]Box[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/1
+0 pph,
+
+Overfull \hbox (11.1007pt too wide) in paragraph at lines 55--57
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][
+][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity[][] ([]
+[]ppl[][][][]Double[][][][]Box[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/1
+0 pph,
+[125]]
 Overfull \hbox (15.79529pt too wide) in paragraph at lines 274--276
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]relation[][][]with[][][]constraint
 (+[]Handle, +[]Constraint, ?Relation[]
@@ -17097,6 +17131,51 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]maximize[][][]with[][][]point(+[]H
 andle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[]
 [30]
+Overfull \hbox (10.9953pt too wide) in paragraph at lines 316--318
+[]\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]minimize[][][]with[][][]point(+[]H
+andle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[]
+[31]
+Overfull \hbox (2.92062pt too wide) in paragraph at lines 386--388
+\OT1/ptm/m/it/10 Transforms the poly-he-dron ref-er-enced by \OT1/pcr/m/sl/10 H
+andle \OT1/ptm/m/it/10 sub-sti-tut-ing the affine ex-pres-sion for \OT1/pcr/m/s
+l/10 Lin[][][][]Expr/Coeff
+
+Overfull \hbox (14.5953pt too wide) in paragraph at lines 389--391
+[]\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]bounded[][][]affine[][][]image(+[]
+Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr[][][]1, +[]Lin[]
+
+Overfull \hbox (14.5953pt too wide) in paragraph at lines 392--394
+[]\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]bounded[][][]affine[][][]preimage(
++[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr[][][]1, +[]
+
+Overfull \hbox (32.0138pt too wide) in paragraph at lines 395--397
+[]\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]generalized[][][]affine[][][]image
+(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Relation[][][][]Symbol,
+
+Overfull \hbox (13.3953pt too wide) in paragraph at lines 398--400
+[]\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]generalized[][][]affine[][][]preim
+age(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Relation[]
+
+Overfull \hbox (6.19531pt too wide) in paragraph at lines 401--403
+[]\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]generalized[][][]affine[][][]image
+[][][]lhs[][][]rhs(+[]Handle, +[]Lin[][][][]Expr[][][]1, +[]
+[32]
+Overfull \hbox (0.19531pt too wide) in paragraph at lines 404--406
+[]\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]generalized[][][]affine[][][]preim
+age[][][]lhs[][][]rhs(+[]Handle, +[]Lin[][][][]Expr[][][]
+
+Overfull \hbox (44.0138pt too wide) in paragraph at lines 407--409
+[]\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]wrap[][][]assign(+[]Handle, +[]Lis
+t[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[]Representation,
+
+Overfull \hbox (29.6138pt too wide) in paragraph at lines 438--440
+[]\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]simplify[][][]using[][][]context[]
+[][]assign(+[]Handle[][][]1, +[]Handle[][][]2, ?Boolean) 
+
+Overfull \hbox (16.9953pt too wide) in paragraph at lines 441--443
+[]\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]linear[][][]partition(+[]Handle[][
+][]1, +[]Handle[][][]2, -[]Handle[][][]3, -[]Handle[]
+[33]
 Overfull \hbox (9.49263pt too wide) in paragraph at lines 65--67
 []\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][
 ][]Congruence[][][][]System[][] ([][]ppl[][][][]Double[][][][]Box[][][]t[][] $\
@@ -17149,51 +17228,6 @@
 [][][]point[][] ([][]ppl[][][]const[][][][]Double[][][][]Box[][][]t[][] ph, [][
 ]ppl[][][]const[][][][]Linear[][][][]Expression[]
 [126
-Overfull \hbox (10.9953pt too wide) in paragraph at lines 316--318
-[]\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]minimize[][][]with[][][]point(+[]H
-andle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[]
-[31]]
-Overfull \hbox (2.92062pt too wide) in paragraph at lines 386--388
-\OT1/ptm/m/it/10 Transforms the poly-he-dron ref-er-enced by \OT1/pcr/m/sl/10 H
-andle \OT1/ptm/m/it/10 sub-sti-tut-ing the affine ex-pres-sion for \OT1/pcr/m/s
-l/10 Lin[][][][]Expr/Coeff
-
-Overfull \hbox (14.5953pt too wide) in paragraph at lines 389--391
-[]\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]bounded[][][]affine[][][]image(+[]
-Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr[][][]1, +[]Lin[]
-
-Overfull \hbox (14.5953pt too wide) in paragraph at lines 392--394
-[]\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]bounded[][][]affine[][][]preimage(
-+[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr[][][]1, +[]
-
-Overfull \hbox (32.0138pt too wide) in paragraph at lines 395--397
-[]\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]generalized[][][]affine[][][]image
-(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Relation[][][][]Symbol,
-
-Overfull \hbox (13.3953pt too wide) in paragraph at lines 398--400
-[]\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]generalized[][][]affine[][][]preim
-age(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Relation[]
-
-Overfull \hbox (6.19531pt too wide) in paragraph at lines 401--403
-[]\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]generalized[][][]affine[][][]image
-[][][]lhs[][][]rhs(+[]Handle, +[]Lin[][][][]Expr[][][]1, +[]
-[32]
-Overfull \hbox (0.19531pt too wide) in paragraph at lines 404--406
-[]\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]generalized[][][]affine[][][]preim
-age[][][]lhs[][][]rhs(+[]Handle, +[]Lin[][][][]Expr[][][]
-
-Overfull \hbox (44.0138pt too wide) in paragraph at lines 407--409
-[]\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]wrap[][][]assign(+[]Handle, +[]Lis
-t[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[]Representation,
-
-Overfull \hbox (29.6138pt too wide) in paragraph at lines 438--440
-[]\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]simplify[][][]using[][][]context[]
-[][]assign(+[]Handle[][][]1, +[]Handle[][][]2, ?Boolean) 
-
-Overfull \hbox (16.9953pt too wide) in paragraph at lines 441--443
-[]\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]linear[][][]partition(+[]Handle[][
-][]1, +[]Handle[][][]2, -[]Handle[][][]3, -[]Handle[]
-[33]
 Overfull \hbox (18.19531pt too wide) in paragraph at lines 448--450
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][][]B[]H[]R[]Z03[][][]widening[][][]
 assign[][][]with[][][]tokens(+[]Handle[][][]1, +[]Handle[][][]2, +[]
@@ -17221,7 +17255,7 @@
 Overfull \hbox (12.19531pt too wide) in paragraph at lines 475--477
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]bounded[][][][]H79[][][]extrapolat
 ion[][][]assign[][][]with[][][]tokens(+[]Handle[][][]1, +[]
-[34]
+[34]]
 Overfull \hbox (2.5953pt too wide) in paragraph at lines 478--480
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]limited[][][][]B[]H[]R[]Z03[][][]e
 xtrapolation[][][]assign(+[]Handle[][][]1, +[]Handle[][][]
@@ -17245,32 +17279,7 @@
 Overfull \hbox (2.0138pt too wide) in paragraph at lines 512--514
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]remove[][][]higher[][][]space[][][
 ]dimensions(+[]Handle, +[]Dimension[][][][]Type) 
-[35
-Overfull \hbox (5.85234pt too wide) in paragraph at lines 143--145
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Double[][][][]Box[][][]refine[][][]with[]
-[][]congruences[][] ([][]ppl[][][][]Double[][][][]Box[][][]t[][] ph, [][]ppl[][
-][]const[][][][]Congruence[][][][]System[]
-
-Overfull \hbox (0.82236pt too wide) in paragraph at lines 165--167
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Double[][][][]Box[][][]affine[][][]image[
-][] ([][]ppl[][][][]Double[][][][]Box[][][]t[][] ph, [][]ppl[][][]dimension[][]
-[]type[][] var, [][]ppl[][][]const[][][][]Linear[]
-
-Overfull \hbox (9.33069pt too wide) in paragraph at lines 175--177
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Double[][][][]Box[][][]generalized[][][]a
-ffine[][][]preimage[][] ([][]ppl[][][][]Double[][][][]Box[][][]t[][] ph, [][]pp
-l[][][]dimension[][][]type[][] var, enum
-
-Overfull \hbox (32.23175pt too wide) in paragraph at lines 177--179
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Double[][][][]Box[][][]generalized[][][]a
-ffine[][][]image[][][]lhs[][][]rhs[][] ([][]ppl[][][][]Double[][][][]Box[][][]t
-[][] ph, [][]ppl[][][]const[][][][]Linear[][][][]Expression[]
-
-Overfull \hbox (8.37874pt too wide) in paragraph at lines 185--187
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Double[][][][]Box[][][]remove[][][]space[
-][][]dimensions[][] ([][]ppl[][][][]Double[][][][]Box[][][]t[][] ph, [][]ppl[][
-][]dimension[][][]type[][] ds[]$ $[], size[]
-[127]
+[35]
 Overfull \hbox (14.0138pt too wide) in paragraph at lines 515--517
 []\OT1/pcr/m/n/10 ppl[][][][]Polyhedron[][][]expand[][][]space[][][]dimension(+
 []Handle, +[]P[]P[]L[][][][]Var, +[]Dimension[][][][]Type) 
@@ -17285,7 +17294,7 @@
 
 Underfull \hbox (badness 10000) in paragraph at lines 561--562
 
-[36]]
+[36]
 Overfull \hbox (2.5953pt too wide) in paragraph at lines 600--602
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]C[][][][]Polyhedron
 [][][]with[][][]complexity(+[]Handle, +[]Complexity, -[]
@@ -17353,63 +17362,31 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]relation[][][]with[][][]grid[][][]genera
 tor(+[]Handle, +[]Grid[][][][]Generator, ?Relation[]
 [39]
-Overfull \hbox (8.12848pt too wide) in paragraph at lines 193--195
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Double[][][][]Box[][][]map[][][]space[][]
-[]dimensions[][] ([][]ppl[][][][]Double[][][][]Box[][][]t[][] ph, [][]ppl[][][]
-dimension[][][]type[][] maps[]$ $[], size[]
-
-Overfull \hbox (6.6776pt too wide) in paragraph at lines 197--199
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Double[][][][]Box[][][]drop[][][]some[][]
-[]non[][][]integer[][][]points[][][]2[][] ([][]ppl[][][][]Double[][][][]Box[][]
-[]t[][] ph, [][]ppl[][][]dimension[][][]type[][] ds[]$ $[],
-
-Overfull \hbox (9.24174pt too wide) in paragraph at lines 211--213
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Double[][][][]Box[][][]limited[][][][]C[]
-C76[][][]extrapolation[][][]assign[][][]with[][][]tokens[][] ([][]ppl[][][][]Do
-uble[][][][]Box[][][]t[][] x, [][]ppl[][][]const[]
-
-Overfull \hbox (13.81174pt too wide) in paragraph at lines 221--223
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Double[][][][]Box[][][]recycle[]
-[][][]Constraint[][][][]System[][] ([][]ppl[][][][]Double[][][][]Box[][][]t[][]
- $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][][]Constraint[][][][]S
-ystem[]
-
-Overfull \hbox (10.43216pt too wide) in paragraph at lines 225--227
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Double[][][][]Box[][][]recycle[]
-[][][]Generator[][][][]System[][] ([][]ppl[][][][]Double[][][][]Box[][][]t[][] 
-$\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][][]Generator[][][][]Sys
-tem[]
-
-Overfull \hbox (2.53229pt too wide) in paragraph at lines 237--239
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[
-][][][]M[]S[][][][]Double[][][][]Box[][] ([][]ppl[][][]const[][][][]Double[][][
-][]Box[][][]t[][] pset, [][]ppl[][][][]Generator[]
-
-Overfull \hbox (0.31232pt too wide) in paragraph at lines 239--241
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[
-][][][]P[]R[][][][]Double[][][][]Box[][] ([][]ppl[][][]const[][][][]Double[][][
-][]Box[][][]t[][] pset, [][]ppl[][][][]Generator[]
+Overfull \hbox (5.85234pt too wide) in paragraph at lines 143--145
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Double[][][][]Box[][][]refine[][][]with[]
+[][]congruences[][] ([][]ppl[][][][]Double[][][][]Box[][][]t[][] ph, [][]ppl[][
+][]const[][][][]Congruence[][][][]System[]
 
-Overfull \hbox (8.11209pt too wide) in paragraph at lines 241--243
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions
-[][][][]M[]S[][][][]Double[][][][]Box[][] ([][]ppl[][][]const[][][][]Double[][]
-[][]Box[][][]t[][] pset, [][]ppl[][][][]Polyhedron[]
+Overfull \hbox (0.82236pt too wide) in paragraph at lines 165--167
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Double[][][][]Box[][][]affine[][][]image[
+][] ([][]ppl[][][][]Double[][][][]Box[][][]t[][] ph, [][]ppl[][][]dimension[][]
+[]type[][] var, [][]ppl[][][]const[][][][]Linear[]
 
-Overfull \hbox (5.89212pt too wide) in paragraph at lines 243--245
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions
-[][][][]P[]R[][][][]Double[][][][]Box[][] ([][]ppl[][][]const[][][][]Double[][]
-[][]Box[][][]t[][] pset, [][]ppl[][][][]Polyhedron[]
+Overfull \hbox (9.33069pt too wide) in paragraph at lines 175--177
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Double[][][][]Box[][][]generalized[][][]a
+ffine[][][]preimage[][] ([][]ppl[][][][]Double[][][][]Box[][][]t[][] ph, [][]pp
+l[][][]dimension[][][]type[][] var, enum
 
-Overfull \hbox (6.40175pt too wide) in paragraph at lines 245--247
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]termination[][][]test[][][][]M[]S[][][][]Do
-uble[][][][]Box[][][]2[][] ([][]ppl[][][]const[][][][]Double[][][][]Box[][][]t[
-][] pset[][][]before, [][]ppl[][][]const[][][][]Double[]
+Overfull \hbox (32.23175pt too wide) in paragraph at lines 177--179
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Double[][][][]Box[][][]generalized[][][]a
+ffine[][][]image[][][]lhs[][][]rhs[][] ([][]ppl[][][][]Double[][][][]Box[][][]t
+[][] ph, [][]ppl[][][]const[][][][]Linear[][][][]Expression[]
 
-Overfull \hbox (4.18178pt too wide) in paragraph at lines 247--249
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]termination[][][]test[][][][]P[]R[][][][]Do
-uble[][][][]Box[][][]2[][] ([][]ppl[][][]const[][][][]Double[][][][]Box[][][]t[
-][] pset[][][]before, [][]ppl[][][]const[][][][]Double[]
-[128
+Overfull \hbox (8.37874pt too wide) in paragraph at lines 185--187
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Double[][][][]Box[][][]remove[][][]space[
+][][]dimensions[][] ([][]ppl[][][][]Double[][][][]Box[][][]t[][] ph, [][]ppl[][
+][]dimension[][][]type[][] ds[]$ $[], size[]
+[127
 Overfull \hbox (41.6138pt too wide) in paragraph at lines 738--740
 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]maximize[][][]with[][][]point(+[]Handle,
  +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[][][]2, ?Boolean,
@@ -17440,11 +17417,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]generalized[][][]affine[][][]image(+[]Ha
 ndle, +[]P[]P[]L[][][][]Var, +[]Relation[][][][]Symbol, +[]
 [41]
-Overfull \hbox (1.9221pt too wide) in paragraph at lines 313--314
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]B[]D[
-][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Dou
-ble[][][][]Box[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class
-[129
 Overfull \hbox (14.0138pt too wide) in paragraph at lines 825--827
 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]generalized[][][]affine[][][]preimage(+[
 ]Handle, +[]P[]P[]L[][][][]Var, +[]Relation[][][][]Symbol,
@@ -17476,7 +17448,7 @@
 Overfull \hbox (8.0138pt too wide) in paragraph at lines 846--848
 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]wrap[][][]assign(+[]Handle, +[]List[][][
 ]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[]Representation,
-[42]]
+[42]
 Overfull \hbox (6.19531pt too wide) in paragraph at lines 875--877
 []\OT1/pcr/m/n/10 ppl[][][][]Grid[][][]congruence[][][]widening[][][]assign[][]
 []with[][][]tokens(+[]Handle[][][]1, +[]Handle[][][]2, +[]
@@ -17510,37 +17482,64 @@
 -enced by \OT1/pcr/m/sl/10 Handle[][][]1 \OT1/ptm/m/it/10 the con-cate-na-tion 
 of \OT1/pcr/m/sl/10 P \OT1/ptm/m/it/10 and the grid ref-er-enced by \OT1/pcr/m/
 sl/10 Handle[]
-[44
-Overfull \hbox (3.0421pt too wide) in paragraph at lines 319--320
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]B[]D[
-][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Dou
-ble[][][][]Box[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class
+[44]
+Overfull \hbox (8.12848pt too wide) in paragraph at lines 193--195
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Double[][][][]Box[][][]map[][][]space[][]
+[]dimensions[][] ([][]ppl[][][][]Double[][][][]Box[][][]t[][] ph, [][]ppl[][][]
+dimension[][][]type[][] maps[]$ $[], size[]
 
-Overfull \hbox (3.4633pt too wide) in paragraph at lines 325--326
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Octag
-onal[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][]
-[]Double[][][][]Box[][][]from[][][][]Octagonal[]
+Overfull \hbox (6.6776pt too wide) in paragraph at lines 197--199
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Double[][][][]Box[][][]drop[][][]some[][]
+[]non[][][]integer[][][]points[][][]2[][] ([][]ppl[][][][]Double[][][][]Box[][]
+[]t[][] ph, [][]ppl[][][]dimension[][][]type[][] ds[]$ $[],
 
-Overfull \hbox (4.5833pt too wide) in paragraph at lines 331--332
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Octag
-onal[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][]
-[]Double[][][][]Box[][][]from[][][][]Octagonal[]
+Overfull \hbox (9.24174pt too wide) in paragraph at lines 211--213
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Double[][][][]Box[][][]limited[][][][]C[]
+C76[][][]extrapolation[][][]assign[][][]with[][][]tokens[][] ([][]ppl[][][][]Do
+uble[][][][]Box[][][]t[][] x, [][]ppl[][][]const[]
 
-Overfull \hbox (17.3135pt too wide) in paragraph at lines 349--350
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Octag
-onal[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Double
-[][][][]Box[][][]from[][][][]Octagonal[][][][]Shape[]
+Overfull \hbox (13.81174pt too wide) in paragraph at lines 221--223
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Double[][][][]Box[][][]recycle[]
+[][][]Constraint[][][][]System[][] ([][]ppl[][][][]Double[][][][]Box[][][]t[][]
+ $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][][]Constraint[][][][]S
+ystem[]
 
-Overfull \hbox (29.44342pt too wide) in paragraph at lines 355--356
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]C[][]
-[][]Polyhedron[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][
-][][]Double[][][][]Box[][][]from[][][][]C[][][][]Polyhedron[]
+Overfull \hbox (10.43216pt too wide) in paragraph at lines 225--227
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Double[][][][]Box[][][]recycle[]
+[][][]Generator[][][][]System[][] ([][]ppl[][][][]Double[][][][]Box[][][]t[][] 
+$\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][][]Generator[][][][]Sys
+tem[]
 
-Overfull \hbox (2.60333pt too wide) in paragraph at lines 361--362
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]N[]N[
-]C[][][][]Polyhedron[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]
-new[][][][]Double[][][][]Box[][][]from[][][][]N[]N[]C[]
-[130]]
+Overfull \hbox (2.53229pt too wide) in paragraph at lines 237--239
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[
+][][][]M[]S[][][][]Double[][][][]Box[][] ([][]ppl[][][]const[][][][]Double[][][
+][]Box[][][]t[][] pset, [][]ppl[][][][]Generator[]
+
+Overfull \hbox (0.31232pt too wide) in paragraph at lines 239--241
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[
+][][][]P[]R[][][][]Double[][][][]Box[][] ([][]ppl[][][]const[][][][]Double[][][
+][]Box[][][]t[][] pset, [][]ppl[][][][]Generator[]
+
+Overfull \hbox (8.11209pt too wide) in paragraph at lines 241--243
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions
+[][][][]M[]S[][][][]Double[][][][]Box[][] ([][]ppl[][][]const[][][][]Double[][]
+[][]Box[][][]t[][] pset, [][]ppl[][][][]Polyhedron[]
+
+Overfull \hbox (5.89212pt too wide) in paragraph at lines 243--245
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions
+[][][][]P[]R[][][][]Double[][][][]Box[][] ([][]ppl[][][]const[][][][]Double[][]
+[][]Box[][][]t[][] pset, [][]ppl[][][][]Polyhedron[]
+
+Overfull \hbox (6.40175pt too wide) in paragraph at lines 245--247
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]termination[][][]test[][][][]M[]S[][][][]Do
+uble[][][][]Box[][][]2[][] ([][]ppl[][][]const[][][][]Double[][][][]Box[][][]t[
+][] pset[][][]before, [][]ppl[][][]const[][][][]Double[]
+
+Overfull \hbox (4.18178pt too wide) in paragraph at lines 247--249
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]termination[][][]test[][][][]P[]R[][][][]Do
+uble[][][][]Box[][][]2[][] ([][]ppl[][][]const[][][][]Double[][][][]Box[][][]t[
+][] pset[][][]before, [][]ppl[][][]const[][][][]Double[]
+[128
 Overfull \hbox (6.19531pt too wide) in paragraph at lines 955--957
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][]space[
 ][][]dimension(+[]Dimension[][][][]Type, +[]Universe[][][]or[]
@@ -17551,7 +17550,7 @@
 Overfull \hbox (1.39532pt too wide) in paragraph at lines 1000--1002
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][][]Octa
 gonal[][][][]Shape[][][]mpz[][][]class(+[]Handle[][][]1, -[]Handle[][][]
-[45]
+[45]]
 Overfull \hbox (1.39532pt too wide) in paragraph at lines 1003--1005
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][][]Octa
 gonal[][][][]Shape[][][]mpq[][][]class(+[]Handle[][][]1, -[]Handle[][][]
@@ -17592,47 +17591,7 @@
 Overfull \hbox (22.41382pt too wide) in paragraph at lines 1036--1038
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][][]Octa
 gonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity(+[]Handle,
-[46
-Overfull \hbox (17.61194pt too wide) in paragraph at lines 367--368
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Grid[
-][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Double[][]
-[][]Box[][][]from[][][][]Grid[][][]with[][][]complexity
-
-Overfull \hbox (9.21332pt too wide) in paragraph at lines 373--374
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Ratio
-nal[][][][]Box[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][
-][][]Double[][][][]Box[][][]from[][][][]Rational[]
-
-Overfull \hbox (0.13283pt too wide) in paragraph at lines 379--380
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]B[]D[
-][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 i
-nt ppl[][][]new[][][][]Double[][][][]Box[][][]from[]
-
-Overfull \hbox (1.25282pt too wide) in paragraph at lines 385--386
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]B[]D[
-][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 i
-nt ppl[][][]new[][][][]Double[][][][]Box[][][]from[]
-
-Overfull \hbox (8.05254pt too wide) in paragraph at lines 391--392
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Octag
-onal[][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/
-n/8 int ppl[][][]new[][][][]Double[][][][]Box[]
-
-Overfull \hbox (9.17253pt too wide) in paragraph at lines 397--398
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Octag
-onal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/
-n/8 int ppl[][][]new[][][][]Double[][][][]Box[]
-
-Overfull \hbox (10.78336pt too wide) in paragraph at lines 403--404
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Doubl
-e[][][][]Box[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][
-][]Double[][][][]Box[][][]from[][][][]Double[][][][]Box[]
-
-Overfull \hbox (2.46303pt too wide) in paragraph at lines 409--410
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]B[]D[
-][][][]Shape[][][]double[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[]
-[][]new[][][][]Double[][][][]Box[][][]from[][][][]B[]D[][][]
-[131]]
+[46]
 Overfull \hbox (15.2138pt too wide) in paragraph at lines 1039--1041
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][][]Doub
 le[][][][]Box[][][]with[][][]complexity(+[]Handle, +[]Complexity,
@@ -17645,6 +17604,11 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Rational[][][][]Box[][][]from[][][][]Octa
 gonal[][][][]Shape[][][]double[][][]with[][][]complexity(+[]Handle,
 [47]
+Overfull \hbox (1.9221pt too wide) in paragraph at lines 313--314
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]B[]D[
+][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Dou
+ble[][][][]Box[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class
+[129
 Overfull \hbox (25.3953pt too wide) in paragraph at lines 1113--1115
 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]relation[][][]with[][][]c
 onstraint(+[]Handle, +[]Constraint, ?Relation[]
@@ -17676,22 +17640,7 @@
 Overfull \hbox (26.0138pt too wide) in paragraph at lines 1144--1146
 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]maximize(+[]Handle, +[]Li
 n[][][][]Expr, ?Coeff[][][]1, ?Coeff[][][]2, ?Boolean) 
-[48]
-Overfull \hbox (17.10274pt too wide) in paragraph at lines 415--416
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Octag
-onal[][][][]Shape[][][]double[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int 
-ppl[][][]new[][][][]Double[][][][]Box[][][]from[]
-
-Overfull \hbox (1.68216pt too wide) in paragraph at lines 421--422
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Const
-raint[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Double[][][][]Bo
-x[][][]from[][][][]Constraint[][][][]System ( 
-
-Overfull \hbox (7.23222pt too wide) in paragraph at lines 427--428
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Congr
-uence[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Double[][][][]Bo
-x[][][]from[][][][]Congruence[][][][]System ( 
-[132]
+[48]]
 Overfull \hbox (26.0138pt too wide) in paragraph at lines 1149--1151
 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]minimize(+[]Handle, +[]Li
 n[][][][]Expr, ?Coeff[][][]1, ?Coeff[][][]2, ?Boolean) 
@@ -17728,7 +17677,37 @@
 Overfull \hbox (22.9953pt too wide) in paragraph at lines 1235--1237
 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]generalized[][][]affine[]
 [][]preimage(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Relation[]
-[50] [133
+[50]
+Overfull \hbox (3.0421pt too wide) in paragraph at lines 319--320
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]B[]D[
+][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Dou
+ble[][][][]Box[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class
+
+Overfull \hbox (3.4633pt too wide) in paragraph at lines 325--326
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Octag
+onal[][][][]Shape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][]
+[]Double[][][][]Box[][][]from[][][][]Octagonal[]
+
+Overfull \hbox (4.5833pt too wide) in paragraph at lines 331--332
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Octag
+onal[][][][]Shape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][]
+[]Double[][][][]Box[][][]from[][][][]Octagonal[]
+
+Overfull \hbox (17.3135pt too wide) in paragraph at lines 349--350
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Octag
+onal[][][][]Shape[][][]double()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Double
+[][][][]Box[][][]from[][][][]Octagonal[][][][]Shape[]
+
+Overfull \hbox (29.44342pt too wide) in paragraph at lines 355--356
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]C[][]
+[][]Polyhedron[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][
+][][]Double[][][][]Box[][][]from[][][][]C[][][][]Polyhedron[]
+
+Overfull \hbox (2.60333pt too wide) in paragraph at lines 361--362
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]N[]N[
+]C[][][][]Polyhedron[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]
+new[][][][]Double[][][][]Box[][][]from[][][][]N[]N[]C[]
+[130]
 Overfull \hbox (15.79532pt too wide) in paragraph at lines 1238--1240
 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]generalized[][][]affine[]
 [][]image[][][]lhs[][][]rhs(+[]Handle, +[]Lin[][][][]Expr[][][]1, +[]
@@ -17748,7 +17727,7 @@
 Overfull \hbox (26.5953pt too wide) in paragraph at lines 1269--1271
 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]linear[][][]partition(+[]
 Handle[][][]1, +[]Handle[][][]2, -[]Handle[][][]3, -[]Handle[]
-[51]]
+[51]
 Overfull \hbox (15.79532pt too wide) in paragraph at lines 1276--1278
 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][][]C[]C76[][][]widening[][
 ][]assign[][][]with[][][]tokens(+[]Handle[][][]1, +[]Handle[][][]2, +[]
@@ -17764,7 +17743,47 @@
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 1291--1293
 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]limited[][][][]C[]C76[][]
 []extrapolation[][][]assign(+[]Handle[][][]1, +[]Handle[][][]
-[52] [134
+[52]
+Overfull \hbox (17.61194pt too wide) in paragraph at lines 367--368
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Grid[
+][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Double[][]
+[][]Box[][][]from[][][][]Grid[][][]with[][][]complexity
+
+Overfull \hbox (9.21332pt too wide) in paragraph at lines 373--374
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Ratio
+nal[][][][]Box[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][
+][][]Double[][][][]Box[][][]from[][][][]Rational[]
+
+Overfull \hbox (0.13283pt too wide) in paragraph at lines 379--380
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]B[]D[
+][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 i
+nt ppl[][][]new[][][][]Double[][][][]Box[][][]from[]
+
+Overfull \hbox (1.25282pt too wide) in paragraph at lines 385--386
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]B[]D[
+][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 i
+nt ppl[][][]new[][][][]Double[][][][]Box[][][]from[]
+
+Overfull \hbox (8.05254pt too wide) in paragraph at lines 391--392
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Octag
+onal[][][][]Shape[][][]mpz[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/
+n/8 int ppl[][][]new[][][][]Double[][][][]Box[]
+
+Overfull \hbox (9.17253pt too wide) in paragraph at lines 397--398
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Octag
+onal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/
+n/8 int ppl[][][]new[][][][]Double[][][][]Box[]
+
+Overfull \hbox (10.78336pt too wide) in paragraph at lines 403--404
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Doubl
+e[][][][]Box[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][
+][]Double[][][][]Box[][][]from[][][][]Double[][][][]Box[]
+
+Overfull \hbox (2.46303pt too wide) in paragraph at lines 409--410
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]B[]D[
+][][][]Shape[][][]double[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[]
+[][]new[][][][]Double[][][][]Box[][][]from[][][][]B[]D[][][]
+[131]
 Overfull \hbox (9.2138pt too wide) in paragraph at lines 1310--1312
 []\OT1/pcr/m/n/10 ppl[][][][]Rational[][][][]Box[][][]add[][][]space[][][]dimen
 sions[][][]and[][][]embed(+[]Handle, +[]Dimension[][][][]Type) 
@@ -17796,7 +17815,7 @@
 Overfull \hbox (3.2138pt too wide) in paragraph at lines 1357--1359
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
 []from[][][]congruences(+[]Congruence[][][][]System, -[]Handle) 
-[53]]
+[53]
 Underfull \hbox (badness 10000) in paragraph at lines 1368--1369
 
 
@@ -17824,16 +17843,21 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
 []from[][][][]Octagonal[][][][]Shape[][][]double(+[]Handle[][][]1, -[]Handle[]
 [54]
-Overfull \hbox (9.26186pt too wide) in paragraph at lines 595--596
- []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]strictly[][][]contains[][]
-[][]Double[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[][][]
-strictly[][][]contains[][][][]Double[][][][]Box ( 
+Overfull \hbox (17.10274pt too wide) in paragraph at lines 415--416
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Octag
+onal[][][][]Shape[][][]double[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int 
+ppl[][][]new[][][][]Double[][][][]Box[][][]from[]
 
-Overfull \hbox (0.412pt too wide) in paragraph at lines 601--602
- []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]is[][][]disjoint[][][]from
-[][][][]Double[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[]
-[][]is[][][]disjoint[][][]from[][][][]Double[][][][]Box ( 
-[135]
+Overfull \hbox (1.68216pt too wide) in paragraph at lines 421--422
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Const
+raint[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Double[][][][]Bo
+x[][][]from[][][][]Constraint[][][][]System ( 
+
+Overfull \hbox (7.23222pt too wide) in paragraph at lines 427--428
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Congr
+uence[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Double[][][][]Bo
+x[][][]from[][][][]Congruence[][][][]System ( 
+[132]
 Overfull \hbox (1.39532pt too wide) in paragraph at lines 1407--1409
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
 []from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[]
@@ -17884,7 +17908,7 @@
 Overfull \hbox (4.99533pt too wide) in paragraph at lines 1437--1439
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][]
 []from[][][][]Octagonal[][][][]Shape[][][]double[][][]with[][][]complexity(+[]
-[55] [136
+[55]
 Overfull \hbox (4.99533pt too wide) in paragraph at lines 1480--1482
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]strictl
 y[][][]contains[][][][]B[]D[][][][]Shape[][][]mpz[][][]class(+[]Handle[][][]1, 
@@ -17912,7 +17936,7 @@
 \OT1/ptm/m/it/10 Unifies \OT1/pcr/m/sl/10 Relation[][][][]List \OT1/ptm/m/it/10
  with the list of re-la-tions the bd shape ref-er-enced by \OT1/pcr/m/sl/10 Han
 dle \OT1/ptm/m/it/10 has with \OT1/pcr/m/sl/10 Generator\OT1/ptm/m/it/10 .
-[56]]
+[56] [133]
 Overfull \hbox (56.5953pt too wide) in paragraph at lines 1511--1513
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]relatio
 n[][][]with[][][]congruence(+[]Handle, +[]Congruence, ?Relation[]
@@ -17946,26 +17970,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]minimiz
 e[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1,
 [57]
-Overfull \hbox (0.60197pt too wide) in paragraph at lines 697--698
- []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]upper[][][]bound[][][]assi
-gn[][][]if[][][]exact()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[][][]
-upper[][][]bound[][][]assign[][][]if[][][]exact ( 
-
-Overfull \hbox (6.14165pt too wide) in paragraph at lines 703--704
- []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]simplify[][][]using[][][]c
-ontext[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[][][]sim
-plify[][][]using[][][]context[][][]assign
-
-Overfull \hbox (8.35168pt too wide) in paragraph at lines 715--716
- []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]unconstrain[][][]space[][]
-[]dimension()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[][][]unconstrai
-n[][][]space[][][]dimension ( 
-
-Overfull \hbox (7.44157pt too wide) in paragraph at lines 721--722
- []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]unconstrain[][][]space[][]
-[]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[][][]unconstra
-in[][][]space[][][]dimensions
-[137
 Overfull \hbox (25.80045pt too wide) in paragraph at lines 1577--1579
 \OT1/ptm/m/it/10 Updates the bd shape ref-er-enced by \OT1/pcr/m/sl/10 Handle \
 OT1/ptm/m/it/10 to one ob-tained by re-fin-ing its con-straint sys-tem with \OT
@@ -17986,7 +17990,7 @@
 Overfull \hbox (9.2138pt too wide) in paragraph at lines 1602--1604
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]affine[
 ][][]image(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr, +[]Coeff) 
-[58]]
+[58] [134]
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 1605--1607
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]affine[
 ][][]preimage(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr, +[]
@@ -18019,31 +18023,16 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]wrap[][
 ][]assign(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[]
 [59]
-Overfull \hbox (2.58203pt too wide) in paragraph at lines 757--758
- []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]generalized[][][]affine[][
-][]preimage()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[][][]generalize
-d[][][]affine[][][]preimage ( 
-
-Overfull \hbox (6.62314pt too wide) in paragraph at lines 763--764
- []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]generalized[][][]affine[][
-][]image[][][]lhs[][][]rhs()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[
-][][]generalized[][][]affine[][][]image[]
-
-Overfull \hbox (35.28304pt too wide) in paragraph at lines 769--770
- []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]generalized[][][]affine[][
-][]preimage[][][]lhs[][][]rhs()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]B
-ox[][][]generalized[][][]affine[][][]preimage[]
-
-Overfull \hbox (11.95317pt too wide) in paragraph at lines 775--776
- []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]add[][][]space[][][]dimens
-ions[][][]and[][][]embed()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[][
-][]add[][][]space[][][]dimensions[][][]and[]
+Overfull \hbox (9.26186pt too wide) in paragraph at lines 595--596
+ []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]strictly[][][]contains[][]
+[][]Double[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[][][]
+strictly[][][]contains[][][][]Double[][][][]Box ( 
 
-Overfull \hbox (13.9832pt too wide) in paragraph at lines 781--782
- []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]add[][][]space[][][]dimens
-ions[][][]and[][][]project()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[
-][][]add[][][]space[][][]dimensions[][][]and[]
-[138]
+Overfull \hbox (0.412pt too wide) in paragraph at lines 601--602
+ []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]is[][][]disjoint[][][]from
+[][][][]Double[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[]
+[][]is[][][]disjoint[][][]from[][][][]Double[][][][]Box ( 
+[135]
 Overfull \hbox (3.79532pt too wide) in paragraph at lines 1648--1650
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]simplif
 y[][][]using[][][]context[][][]assign(+[]Handle[][][]1, +[]Handle[]
@@ -18069,21 +18058,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limited
 [][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign[][][]with[][][]tokens(+[]
 [60]
-Overfull \hbox (26.65173pt too wide) in paragraph at lines 793--794
- []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]remove[][][]higher[][][]sp
-ace[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[][][]re
-move[][][]higher[][][]space[][][]dimensions
-
-Overfull \hbox (2.832pt too wide) in paragraph at lines 817--818
- []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]drop[][][]some[][][]non[][
-][]integer[][][]points()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[][][
-]drop[][][]some[][][]non[][][]integer[][][]points
-
-Overfull \hbox (20.41351pt too wide) in paragraph at lines 823--824
- []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]drop[][][]some[][][]non[][
-][]integer[][][]points[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]B
-ox[][][]drop[][][]some[][][]non[][][]integer[][][]points[]
-[139]
 Overfull \hbox (25.39532pt too wide) in paragraph at lines 1679--1681
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]limited
 [][][][]H79[][][]extrapolation[][][]assign[][][]with[][][]tokens(+[]Handle[]
@@ -18108,7 +18082,7 @@
 Overfull \hbox (15.79532pt too wide) in paragraph at lines 1710--1712
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][]
 []space[][][]dimensions[][][]and[][][]embed(+[]Handle, +[]Dimension[]
-[61]
+[61] [136]
 Overfull \hbox (27.79532pt too wide) in paragraph at lines 1713--1715
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]add[][]
 []space[][][]dimensions[][][]and[][][]project(+[]Handle, +[]Dimension[]
@@ -18143,21 +18117,26 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
 []from[][][]congruences(+[]Congruence[][][][]System, -[]Handle) 
 [62]
-Overfull \hbox (1.8932pt too wide) in paragraph at lines 841--842
- []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][][]C[]C76[][][]widening[][]
-[]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]
-Box[][][][]C[]C76[][][]widening[][][]assign[][][]
+Overfull \hbox (0.60197pt too wide) in paragraph at lines 697--698
+ []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]upper[][][]bound[][][]assi
+gn[][][]if[][][]exact()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[][][]
+upper[][][]bound[][][]assign[][][]if[][][]exact ( 
 
-Overfull \hbox (3.27177pt too wide) in paragraph at lines 853--854
- []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]widening[][][]assign[][][]
-with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[][][]widen
-ing[][][]assign[][][]with[][][]tokens ( 
+Overfull \hbox (6.14165pt too wide) in paragraph at lines 703--704
+ []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]simplify[][][]using[][][]c
+ontext[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[][][]sim
+plify[][][]using[][][]context[][][]assign
 
-Overfull \hbox (25.9632pt too wide) in paragraph at lines 871--872
- []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]limited[][][][]C[]C76[][][
-]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[
-][][]limited[][][][]C[]C76[][][]extrapolation[]
-[140]
+Overfull \hbox (8.35168pt too wide) in paragraph at lines 715--716
+ []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]unconstrain[][][]space[][]
+[]dimension()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[][][]unconstrai
+n[][][]space[][][]dimension ( 
+
+Overfull \hbox (7.44157pt too wide) in paragraph at lines 721--722
+ []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]unconstrain[][][]space[][]
+[]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[][][]unconstra
+in[][][]space[][][]dimensions
+[137
 Underfull \hbox (badness 10000) in paragraph at lines 1768--1769
 
 
@@ -18188,22 +18167,7 @@
 Overfull \hbox (1.39532pt too wide) in paragraph at lines 1807--1809
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
 []from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[]
-[63
-Overfull \hbox (15.36191pt too wide) in paragraph at lines 895--896
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]recycle[][][][]Co
-nstraint[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Double[][][][
-]Box[][][]recycle[][][][]Constraint[][][][]System
-
-Overfull \hbox (1.09346pt too wide) in paragraph at lines 901--902
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]recycle[][][][]Co
-ngruence[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Double[][][][
-]Box[][][]recycle[][][][]Congruence[][][]
-
-Overfull \hbox (8.88197pt too wide) in paragraph at lines 907--908
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]recycle[][][][]Ge
-nerator[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Double[][][][]
-Box[][][]recycle[][][][]Generator[][][][]System
-[141]]
+[63]]
 Overfull \hbox (13.39532pt too wide) in paragraph at lines 1810--1812
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
 []from[][][][]N[]N[]C[][][][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[
@@ -18251,36 +18215,31 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][]
 []from[][][][]Octagonal[][][][]Shape[][][]double[][][]with[][][]complexity(+[]
 [64]
-Overfull \hbox (13.21346pt too wide) in paragraph at lines 943--944
- []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]M
-[]S[][][][]Double[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][]one[][][]affine[][
-][]ranking[][][]function[][][][]M[]S[][][][]Double[]
-
-Overfull \hbox (11.54353pt too wide) in paragraph at lines 949--950
- []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]P
-[]R[][][][]Double[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][]one[][][]affine[][
-][]ranking[][][]function[][][][]P[]R[][][][]Double[]
+Overfull \hbox (2.58203pt too wide) in paragraph at lines 757--758
+ []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]generalized[][][]affine[][
+][]preimage()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[][][]generalize
+d[][][]affine[][][]preimage ( 
 
-Overfull \hbox (17.46326pt too wide) in paragraph at lines 955--956
- []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
-M[]S[][][][]Double[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][]all[][][]affine[]
-[][]ranking[][][]functions[][][][]M[]S[][][][]Double[]
+Overfull \hbox (6.62314pt too wide) in paragraph at lines 763--764
+ []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]generalized[][][]affine[][
+][]image[][][]lhs[][][]rhs()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[
+][][]generalized[][][]affine[][][]image[]
 
-Overfull \hbox (15.79333pt too wide) in paragraph at lines 961--962
- []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
-P[]R[][][][]Double[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][]all[][][]affine[]
-[][]ranking[][][]functions[][][][]P[]R[][][][]Double[]
+Overfull \hbox (35.28304pt too wide) in paragraph at lines 769--770
+ []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]generalized[][][]affine[][
+][]preimage[][][]lhs[][][]rhs()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]B
+ox[][][]generalized[][][]affine[][][]preimage[]
 
-Overfull \hbox (21.81346pt too wide) in paragraph at lines 979--980
- []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]M
-[]S[][][][]Double[][][][]Box[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][]one[][][]af
-fine[][][]ranking[][][]function[][][][]M[]S[][][][]Double[]
+Overfull \hbox (11.95317pt too wide) in paragraph at lines 775--776
+ []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]add[][][]space[][][]dimens
+ions[][][]and[][][]embed()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[][
+][]add[][][]space[][][]dimensions[][][]and[]
 
-Overfull \hbox (20.14354pt too wide) in paragraph at lines 985--986
- []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]P
-[]R[][][][]Double[][][][]Box[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][]one[][][]af
-fine[][][]ranking[][][]function[][][][]P[]R[][][][]Double[]
-[142]
+Overfull \hbox (13.9832pt too wide) in paragraph at lines 781--782
+ []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]add[][][]space[][][]dimens
+ions[][][]and[][][]project()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[
+][][]add[][][]space[][][]dimensions[][][]and[]
+[138]
 Overfull \hbox (4.99533pt too wide) in paragraph at lines 1880--1882
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]strictl
 y[][][]contains[][][][]B[]D[][][][]Shape[][][]mpq[][][]class(+[]Handle[][][]1, 
@@ -18342,16 +18301,21 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]minimiz
 e[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1,
 [66]
-Overfull \hbox (26.06326pt too wide) in paragraph at lines 991--992
- []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
-M[]S[][][][]Double[][][][]Box[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][]all[][][]a
-ffine[][][]ranking[][][]functions[][][][]M[]S[][][][]Double[]
+Overfull \hbox (26.65173pt too wide) in paragraph at lines 793--794
+ []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]remove[][][]higher[][][]sp
+ace[][][]dimensions()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[][][]re
+move[][][]higher[][][]space[][][]dimensions
 
-Overfull \hbox (24.39334pt too wide) in paragraph at lines 997--998
- []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
-P[]R[][][][]Double[][][][]Box[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][]all[][][]a
-ffine[][][]ranking[][][]functions[][][][]P[]R[][][][]Double[]
-) (./interfaceppl__Generator__System__const__iterator__tag.tex [143
+Overfull \hbox (2.832pt too wide) in paragraph at lines 817--818
+ []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]drop[][][]some[][][]non[][
+][]integer[][][]points()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[][][
+]drop[][][]some[][][]non[][][]integer[][][]points
+
+Overfull \hbox (20.41351pt too wide) in paragraph at lines 823--824
+ []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]drop[][][]some[][][]non[][
+][]integer[][][]points[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]B
+ox[][][]drop[][][]some[][][]non[][][]integer[][][]points[]
+[139]
 Overfull \hbox (25.80045pt too wide) in paragraph at lines 1977--1979
 \OT1/ptm/m/it/10 Updates the bd shape ref-er-enced by \OT1/pcr/m/sl/10 Handle \
 OT1/ptm/m/it/10 to one ob-tained by re-fin-ing its con-straint sys-tem with \OT
@@ -18372,27 +18336,7 @@
 Overfull \hbox (9.2138pt too wide) in paragraph at lines 2002--2004
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]affine[
 ][][]image(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr, +[]Coeff) 
-[67]]
-Overfull \hbox (20.03731pt too wide) in paragraph at lines 19--21
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Generator[][][][]System[][][]
-const[][][]iterator[][][]from[][][][]Generator[][][][]System[][][]const[][][]it
-erator[][] ([][]ppl[][][][]Generator[]
-
-Overfull \hbox (28.62701pt too wide) in paragraph at lines 22--24
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]Generator[][][][]System[][
-][]const[][][]iterator[][][]from[][][][]Generator[][][][]System[][][]const[][][
-]iterator[][] ([][]ppl[][][][]Generator[]
-
-Overfull \hbox (8.34723pt too wide) in paragraph at lines 32--34
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Generator[][][][]System[][][]const[][]
-[]iterator[][][]dereference[][] ([][]ppl[][][]const[][][][]Generator[][][][]Sys
-tem[][][]const[][][]iterator[]
-
-Overfull \hbox (0.86711pt too wide) in paragraph at lines 38--40
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Generator[][][][]System[][][]const[][]
-[]iterator[][][]equal[][][]test[][] ([][]ppl[][][]const[][][][]Generator[][][][
-]System[][][]const[][][]iterator[]
-) (./interfaceppl__Generator__System__tag.tex
+[67]
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 2005--2007
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]affine[
 ][][]preimage(+[]Handle, +[]P[]P[]L[][][][]Var, +[]Lin[][][][]Expr, +[]
@@ -18425,17 +18369,21 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]wrap[][
 ][]assign(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[]
 [68]
-Overfull \hbox (18.41797pt too wide) in paragraph at lines 19--21
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Generator[][][][]System[][][]
-from[][][][]Generator[][] ([][]ppl[][][][]Generator[][][][]System[][][]t[][] $\
-OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pgs, [][]ppl[][][]const[][][][]Generator[]
+Overfull \hbox (1.8932pt too wide) in paragraph at lines 841--842
+ []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][][]C[]C76[][][]widening[][]
+[]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]
+Box[][][][]C[]C76[][][]widening[][][]assign[][][]
 
+Overfull \hbox (3.27177pt too wide) in paragraph at lines 853--854
+ []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]widening[][][]assign[][][]
+with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[][][]widen
+ing[][][]assign[][][]with[][][]tokens ( 
 
-Overfull \hbox (7.88792pt too wide) in paragraph at lines 22--24
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Generator[][][][]System[][][]
-from[][][][]Generator[][][][]System[][] ([][]ppl[][][][]Generator[][][][]System
-[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pgs, [][]ppl[][][]const[]
-[144]
+Overfull \hbox (25.9632pt too wide) in paragraph at lines 871--872
+ []\OT1/ptm/b/n/10 ppl[][][][]Double[][][][]Box[][][]limited[][][][]C[]C76[][][
+]extrapolation[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]Double[][][][]Box[
+][][]limited[][][][]C[]C76[][][]extrapolation[]
+[140]
 Overfull \hbox (3.79532pt too wide) in paragraph at lines 2048--2050
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]simplif
 y[][][]using[][][]context[][][]assign(+[]Handle[][][]1, +[]Handle[]
@@ -18461,11 +18409,21 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limited
 [][][][]B[]H[]M[]Z05[][][]extrapolation[][][]assign[][][]with[][][]tokens(+[]
 [69]
-Overfull \hbox (5.21785pt too wide) in paragraph at lines 41--43
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Generator[][][][]System[][][]begin[][]
- ([][]ppl[][][]const[][][][]Generator[][][][]System[][][]t[][] gs, [][]ppl[][][
-][]Generator[][][][]System[][][]const[]
-) (./interfaceppl__Generator__tag.tex
+Overfull \hbox (15.36191pt too wide) in paragraph at lines 895--896
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]recycle[][][][]Co
+nstraint[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Double[][][][
+]Box[][][]recycle[][][][]Constraint[][][][]System
+
+Overfull \hbox (1.09346pt too wide) in paragraph at lines 901--902
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]recycle[][][][]Co
+ngruence[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Double[][][][
+]Box[][][]recycle[][][][]Congruence[][][]
+
+Overfull \hbox (8.88197pt too wide) in paragraph at lines 907--908
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]recycle[][][][]Ge
+nerator[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Double[][][][]
+Box[][][]recycle[][][][]Generator[][][][]System
+[141]
 Overfull \hbox (25.39532pt too wide) in paragraph at lines 2079--2081
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]limited
 [][][][]H79[][][]extrapolation[][][]assign[][][]with[][][]tokens(+[]Handle[]
@@ -18490,7 +18448,7 @@
 Overfull \hbox (15.79532pt too wide) in paragraph at lines 2110--2112
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]add[][]
 []space[][][]dimensions[][][]and[][][]embed(+[]Handle, +[]Dimension[]
-[70] [145]
+[70]
 Overfull \hbox (27.79532pt too wide) in paragraph at lines 2113--2115
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]add[][]
 []space[][][]dimensions[][][]and[][][]project(+[]Handle, +[]Dimension[]
@@ -18524,7 +18482,37 @@
 Overfull \hbox (12.19531pt too wide) in paragraph at lines 2157--2159
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpz[][][]clas
 s[][][]from[][][]congruences(+[]Congruence[][][][]System, -[]
-[71] [146
+[71]
+Overfull \hbox (13.21346pt too wide) in paragraph at lines 943--944
+ []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]M
+[]S[][][][]Double[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][]one[][][]affine[][
+][]ranking[][][]function[][][][]M[]S[][][][]Double[]
+
+Overfull \hbox (11.54353pt too wide) in paragraph at lines 949--950
+ []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]P
+[]R[][][][]Double[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][]one[][][]affine[][
+][]ranking[][][]function[][][][]P[]R[][][][]Double[]
+
+Overfull \hbox (17.46326pt too wide) in paragraph at lines 955--956
+ []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
+M[]S[][][][]Double[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][]all[][][]affine[]
+[][]ranking[][][]functions[][][][]M[]S[][][][]Double[]
+
+Overfull \hbox (15.79333pt too wide) in paragraph at lines 961--962
+ []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
+P[]R[][][][]Double[][][][]Box()[] \OT1/pcr/m/n/8 int ppl[][][]all[][][]affine[]
+[][]ranking[][][]functions[][][][]P[]R[][][][]Double[]
+
+Overfull \hbox (21.81346pt too wide) in paragraph at lines 979--980
+ []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]M
+[]S[][][][]Double[][][][]Box[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][]one[][][]af
+fine[][][]ranking[][][]function[][][][]M[]S[][][][]Double[]
+
+Overfull \hbox (20.14354pt too wide) in paragraph at lines 985--986
+ []\OT1/ptm/b/n/10 ppl[][][]one[][][]affine[][][]ranking[][][]function[][][][]P
+[]R[][][][]Double[][][][]Box[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][]one[][][]af
+fine[][][]ranking[][][]function[][][][]P[]R[][][][]Double[]
+[142
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 2160--2162
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpz[][][]clas
 s[][][]from[][][]generators(+[]Generator[][][][]System, -[]
@@ -18575,8 +18563,7 @@
 Overfull \hbox (13.39532pt too wide) in paragraph at lines 2201--2203
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpz[][][]clas
 s[][][]from[][][][]B[]D[][][][]Shape[][][]double(+[]Handle[][][]1, -[]Handle[]
-[72]])
-(./interfaceppl__Grid__Generator__System__const__iterator__tag.tex
+[72]]
 Overfull \hbox (19.39532pt too wide) in paragraph at lines 2204--2206
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpz[][][]clas
 s[][][]from[][][][]Octagonal[][][][]Shape[][][]double(+[]Handle[][][]1, -[]
@@ -18629,37 +18616,17 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpz[][][]clas
 s[][][]from[][][][]Octagonal[][][][]Shape[][][]double[][][]with[][][]complexity
 (+[]
-[73]
-Overfull \hbox (20.31735pt too wide) in paragraph at lines 19--21
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Grid[][][][]Generator[][][][]
-System[][][]const[][][]iterator[][][]from[][][][]Grid[][][][]Generator[][][][]S
-ystem[][][]const[][][]iterator[][] ([][]ppl[]
-
-Overfull \hbox (2.36742pt too wide) in paragraph at lines 19--21
-[][][]\OT1/ptm/bc/n/10 Grid[][][][]Generator[][][][]System[][][]const[][][]iter
-ator[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pgit, [][]ppl[][][]const
-[][][][]Grid[][][][]Generator[][][][]System[][][]const[][][]iterator[]
-
-Overfull \hbox (1.91568pt too wide) in paragraph at lines 22--24
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]Grid[][][][]Generator[][][
-][]System[][][]const[][][]iterator[][][]from[][][][]Grid[][][][]Generator[][][]
-[]System[][][]const[][][]iterator[][]
-
-Overfull \hbox (10.18723pt too wide) in paragraph at lines 22--24
-\OT1/ptm/bc/n/10 ([][]ppl[][][][]Grid[][][][]Generator[][][][]System[][][]const
-[][][]iterator[][][]t[][] dst, [][]ppl[][][]const[][][][]Grid[][][][]Generator[
-][][][]System[][][]const[][][]iterator[]
-
-Overfull \hbox (20.85709pt too wide) in paragraph at lines 35--37
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][][]Generator[][][][]System[][
-][]const[][][]iterator[][][]increment[][] ([][]ppl[][][][]Grid[][][][]Generator
-[][][][]System[][][]const[][][]iterator[]
+[73
+Overfull \hbox (26.06326pt too wide) in paragraph at lines 991--992
+ []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
+M[]S[][][][]Double[][][][]Box[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][]all[][][]a
+ffine[][][]ranking[][][]functions[][][][]M[]S[][][][]Double[]
 
-Overfull \hbox (12.24728pt too wide) in paragraph at lines 38--40
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][][]Generator[][][][]System[][
-][]const[][][]iterator[][][]equal[][][]test[][] ([][]ppl[][][]const[][][][]Grid
-[][][][]Generator[][][][]System[][][]const[]
-) (./interfaceppl__Grid__Generator__System__tag.tex
+Overfull \hbox (24.39334pt too wide) in paragraph at lines 997--998
+ []\OT1/ptm/b/n/10 ppl[][][]all[][][]affine[][][]ranking[][][]functions[][][][]
+P[]R[][][][]Double[][][][]Box[][][]2()[] \OT1/pcr/m/n/8 int ppl[][][]all[][][]a
+ffine[][][]ranking[][][]functions[][][][]P[]R[][][][]Double[]
+) (./interfaceppl__Generator__System__const__iterator__tag.tex] [143]
 Overfull \hbox (9.79532pt too wide) in paragraph at lines 2277--2279
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]co
 ntains[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class(+[]Handle[]
@@ -18675,7 +18642,27 @@
 Overfull \hbox (1.39532pt too wide) in paragraph at lines 2286--2288
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]eq
 uals[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class(+[]Handle[][][]
-[74] [147]
+[74]
+Overfull \hbox (20.03731pt too wide) in paragraph at lines 19--21
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Generator[][][][]System[][][]
+const[][][]iterator[][][]from[][][][]Generator[][][][]System[][][]const[][][]it
+erator[][] ([][]ppl[][][][]Generator[]
+
+Overfull \hbox (28.62701pt too wide) in paragraph at lines 22--24
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]Generator[][][][]System[][
+][]const[][][]iterator[][][]from[][][][]Generator[][][][]System[][][]const[][][
+]iterator[][] ([][]ppl[][][][]Generator[]
+
+Overfull \hbox (8.34723pt too wide) in paragraph at lines 32--34
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Generator[][][][]System[][][]const[][]
+[]iterator[][][]dereference[][] ([][]ppl[][][]const[][][][]Generator[][][][]Sys
+tem[][][]const[][][]iterator[]
+
+Overfull \hbox (0.86711pt too wide) in paragraph at lines 38--40
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Generator[][][][]System[][][]const[][]
+[]iterator[][][]equal[][][]test[][] ([][]ppl[][][]const[][][][]Generator[][][][
+]System[][][]const[][][]iterator[]
+)
 Overfull \hbox (5.6138pt too wide) in paragraph at lines 2302--2304
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]af
 fine[][][]dimension(+[]Handle, ?Dimension[][][][]Type) 
@@ -18723,7 +18710,7 @@
 Overfull \hbox (36.19531pt too wide) in paragraph at lines 2341--2343
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]mi
 nimize[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[]
-[75]
+[75 (./interfaceppl__Generator__System__tag.tex]
 Overfull \hbox (3.2138pt too wide) in paragraph at lines 2346--2348
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]ex
 ternal[][][]memory[][][]in[][][]bytes(+[]Handle, ?Number) 
@@ -18751,32 +18738,18 @@
 Overfull \hbox (32.5953pt too wide) in paragraph at lines 2386--2388
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]re
 fine[][][]with[][][]congruences( +[]Handle, +[]Congruence[]
-[76]
-Overfull \hbox (4.49792pt too wide) in paragraph at lines 22--24
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Grid[][][][]Generator[][][][]
-System[][][]from[][][][]Grid[][][][]Generator[][][][]System[][] ([][]ppl[][][][
-]Grid[][][][]Generator[][][][]System[]
-
-Overfull \hbox (13.08763pt too wide) in paragraph at lines 25--27
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]Grid[][][][]Generator[][][
-][]System[][][]from[][][][]Grid[][][][]Generator[][][][]System[][] ([][]ppl[][]
-[][]Grid[][][][]Generator[][][][]System[]
-
-Overfull \hbox (13.24803pt too wide) in paragraph at lines 41--43
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][][]Generator[][][][]System[][
-][]begin[][] ([][]ppl[][][]const[][][][]Grid[][][][]Generator[][][][]System[][]
-[]t[][] gs, [][]ppl[][][][]Grid[][][][]Generator[]
+[76
+Overfull \hbox (18.41797pt too wide) in paragraph at lines 19--21
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Generator[][][][]System[][][]
+from[][][][]Generator[][] ([][]ppl[][][][]Generator[][][][]System[][][]t[][] $\
+OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pgs, [][]ppl[][][]const[][][][]Generator[]
 
-Overfull \hbox (5.61804pt too wide) in paragraph at lines 44--46
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][][]Generator[][][][]System[][
-][]end[][] ([][]ppl[][][]const[][][][]Grid[][][][]Generator[][][][]System[][][]
-t[][] gs, [][]ppl[][][][]Grid[][][][]Generator[]
 
-Overfull \hbox (2.72562pt too wide) in paragraph at lines 73--75
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][][]Generator[][][][]System[][
-][]ascii[][][]dump[][] ([][]ppl[][][]const[][][][]Grid[][][][]Generator[][][][]
-System[][][]t[][] x, F[]I[]LE $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 stream) 
-[148]
+Overfull \hbox (7.88792pt too wide) in paragraph at lines 22--24
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Generator[][][][]System[][][]
+from[][][][]Generator[][][][]System[][] ([][]ppl[][][][]Generator[][][][]System
+[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pgs, [][]ppl[][][]const[]
+[144]]
 Overfull \hbox (2.5953pt too wide) in paragraph at lines 2396--2398
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]un
 constrain[][][]space[][][]dimension(+[]Handle, +[]P[]P[]
@@ -18821,7 +18794,12 @@
 Overfull \hbox (12.81381pt too wide) in paragraph at lines 2423--2425
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]ge
 neralized[][][]affine[][][]preimage[][][]lhs[][][]rhs(+[]Handle,
-[77) (./interfaceppl__Grid__Generator__tag.tex]
+[77]
+Overfull \hbox (5.21785pt too wide) in paragraph at lines 41--43
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Generator[][][][]System[][][]begin[][]
+ ([][]ppl[][][]const[][][][]Generator[][][][]System[][][]t[][] gs, [][]ppl[][][
+][]Generator[][][][]System[][][]const[]
+) (./interfaceppl__Generator__tag.tex [145]
 Overfull \hbox (24.81381pt too wide) in paragraph at lines 2426--2428
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]wr
 ap[][][]assign(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width,
@@ -18841,7 +18819,7 @@
 Overfull \hbox (9.79532pt too wide) in paragraph at lines 2458--2460
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][][]
 B[]H[]M[]Z05[][][]widening[][][]assign[][][]with[][][]tokens(+[]Handle[]
-[78] [149]
+[78]
 Overfull \hbox (6.19531pt too wide) in paragraph at lines 2461--2463
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][][]
 B[]H[]M[]Z05[][][]widening[][][]assign(+[]Handle[][][]1, +[]Handle[]
@@ -18878,8 +18856,8 @@
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 2482--2484
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][][]
 C[]C76[][][]narrowing[][][]assign(+[]Handle[][][]1, +[]Handle[]
-[79])
-(./interfaceppl__Grid__tag.tex
+[79] [146])
+(./interfaceppl__Grid__Generator__System__const__iterator__tag.tex
 Overfull \hbox (3.79532pt too wide) in paragraph at lines 2498--2500
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]ad
 d[][][]space[][][]dimensions[][][]and[][][]embed(+[]Handle, +[]
@@ -18958,13 +18936,37 @@
 Overfull \hbox (7.39532pt too wide) in paragraph at lines 2580--2582
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas
 s[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class(+[]Handle[]
-[81
-Overfull \hbox (3.80247pt too wide) in paragraph at lines 43--45
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Grid[][][]from[][][][]N[]N[]C[][
-][][]Polyhedron[][][]with[][][]complexity[][] ([][]ppl[][][][]Grid[][][]t[][] $
-\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const[][][][]Polyhedron
-[]
-[150]]
+[81]
+Overfull \hbox (20.31735pt too wide) in paragraph at lines 19--21
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Grid[][][][]Generator[][][][]
+System[][][]const[][][]iterator[][][]from[][][][]Grid[][][][]Generator[][][][]S
+ystem[][][]const[][][]iterator[][] ([][]ppl[]
+
+Overfull \hbox (2.36742pt too wide) in paragraph at lines 19--21
+[][][]\OT1/ptm/bc/n/10 Grid[][][][]Generator[][][][]System[][][]const[][][]iter
+ator[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pgit, [][]ppl[][][]const
+[][][][]Grid[][][][]Generator[][][][]System[][][]const[][][]iterator[]
+
+Overfull \hbox (1.91568pt too wide) in paragraph at lines 22--24
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]Grid[][][][]Generator[][][
+][]System[][][]const[][][]iterator[][][]from[][][][]Grid[][][][]Generator[][][]
+[]System[][][]const[][][]iterator[][]
+
+Overfull \hbox (10.18723pt too wide) in paragraph at lines 22--24
+\OT1/ptm/bc/n/10 ([][]ppl[][][][]Grid[][][][]Generator[][][][]System[][][]const
+[][][]iterator[][][]t[][] dst, [][]ppl[][][]const[][][][]Grid[][][][]Generator[
+][][][]System[][][]const[][][]iterator[]
+
+Overfull \hbox (20.85709pt too wide) in paragraph at lines 35--37
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][][]Generator[][][][]System[][
+][]const[][][]iterator[][][]increment[][] ([][]ppl[][][][]Grid[][][][]Generator
+[][][][]System[][][]const[][][]iterator[]
+
+Overfull \hbox (12.24728pt too wide) in paragraph at lines 38--40
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][][]Generator[][][][]System[][
+][]const[][][]iterator[][][]equal[][][]test[][] ([][]ppl[][][]const[][][][]Grid
+[][][][]Generator[][][][]System[][][]const[]
+) (./interfaceppl__Grid__Generator__System__tag.tex [147]
 Overfull \hbox (7.39532pt too wide) in paragraph at lines 2583--2585
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]mpq[][][]clas
 s[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class(+[]Handle[]
@@ -19042,6 +19044,31 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]eq
 uals[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class(+[]Handle[][][]
 [83]
+Overfull \hbox (4.49792pt too wide) in paragraph at lines 22--24
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Grid[][][][]Generator[][][][]
+System[][][]from[][][][]Grid[][][][]Generator[][][][]System[][] ([][]ppl[][][][
+]Grid[][][][]Generator[][][][]System[]
+
+Overfull \hbox (13.08763pt too wide) in paragraph at lines 25--27
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]Grid[][][][]Generator[][][
+][]System[][][]from[][][][]Grid[][][][]Generator[][][][]System[][] ([][]ppl[][]
+[][]Grid[][][][]Generator[][][][]System[]
+
+Overfull \hbox (13.24803pt too wide) in paragraph at lines 41--43
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][][]Generator[][][][]System[][
+][]begin[][] ([][]ppl[][][]const[][][][]Grid[][][][]Generator[][][][]System[][]
+[]t[][] gs, [][]ppl[][][][]Grid[][][][]Generator[]
+
+Overfull \hbox (5.61804pt too wide) in paragraph at lines 44--46
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][][]Generator[][][][]System[][
+][]end[][] ([][]ppl[][][]const[][][][]Grid[][][][]Generator[][][][]System[][][]
+t[][] gs, [][]ppl[][][][]Grid[][][][]Generator[]
+
+Overfull \hbox (2.72562pt too wide) in paragraph at lines 73--75
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][][]Generator[][][][]System[][
+][]ascii[][][]dump[][] ([][]ppl[][][]const[][][][]Grid[][][][]Generator[][][][]
+System[][][]t[][] x, F[]I[]LE $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 stream) 
+[148]
 Overfull \hbox (5.6138pt too wide) in paragraph at lines 2690--2692
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]af
 fine[][][]dimension(+[]Handle, ?Dimension[][][][]Type) 
@@ -19081,7 +19108,7 @@
 Overfull \hbox (32.5953pt too wide) in paragraph at lines 2719--2721
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]mi
 nimize(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[]
-[84]
+[84) (./interfaceppl__Grid__Generator__tag.tex]
 Overfull \hbox (36.19531pt too wide) in paragraph at lines 2724--2726
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]ma
 ximize[][][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[]
@@ -19105,46 +19132,8 @@
 Overfull \hbox (23.6138pt too wide) in paragraph at lines 2765--2767
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]re
 fine[][][]with[][][]constraint( +[]Handle, +[]Constraint) 
-[85]
-Overfull \hbox (1.55243pt too wide) in paragraph at lines 59--61
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Grid[][][]from[][][][]B[]D[][][]
-[]Shape[][][]double[][][]with[][][]complexity[][] ([][]ppl[][][][]Grid[][][]t[]
-[] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const[][][][]B[]D[]
-[][][]Shape[]
-
-Overfull \hbox (27.93198pt too wide) in paragraph at lines 61--63
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[
-][][][]Shape[][][]double[][][]with[][][]complexity[][] ([][]ppl[][][][]Grid[][]
-[]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const[][][][]O
-ctagonal[]
-
-Overfull \hbox (6.9618pt too wide) in paragraph at lines 67--69
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Grid[][][]from[][][][]Grid[][][]
-[]Generator[][][][]System[][] ([][]ppl[][][][]Grid[][][]t[][] $\OMS/cmsy/m/n/10
- ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const[][][][]Grid[][][][]Generator[][][
-][]System[]
-
-Overfull \hbox (3.21011pt too wide) in paragraph at lines 89--91
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]get[][][]minimized[][][]congrue
-nces[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] ph, [][]ppl[][][]const[][][
-][]Congruence[][][][]System[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 p
-cs) 
-
-Overfull \hbox (7.22137pt too wide) in paragraph at lines 91--93
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]get[][][]minimized[][][]grid[][
-][]generators[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] ph, [][]ppl[][][]c
-onst[][][][]Grid[][][][]Generator[][][][]System[]
-
-Overfull \hbox (28.41115pt too wide) in paragraph at lines 115--117
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]maximize[][][]with[][][]point[]
-[] ([][]ppl[][][]const[][][][]Grid[][][]t[][] ph, [][]ppl[][][]const[][][][]Lin
-ear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]Coefficient[]
-
-Overfull \hbox (26.7511pt too wide) in paragraph at lines 117--119
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]minimize[][][]with[][][]point[]
-[] ([][]ppl[][][]const[][][][]Grid[][][]t[][] ph, [][]ppl[][][]const[][][][]Lin
-ear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]Coefficient[]
-[151]
+[85] [149])
+(./interfaceppl__Grid__tag.tex
 Overfull \hbox (23.6138pt too wide) in paragraph at lines 2768--2770
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]re
 fine[][][]with[][][]congruence( +[]Handle, +[]Congruence) 
@@ -19218,6 +19207,12 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]li
 near[][][]partition(+[]Handle[][][]1, +[]Handle[][][]2, -[]
 [87]
+Overfull \hbox (3.80247pt too wide) in paragraph at lines 43--45
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Grid[][][]from[][][][]N[]N[]C[][
+][][]Polyhedron[][][]with[][][]complexity[][] ([][]ppl[][][][]Grid[][][]t[][] $
+\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const[][][][]Polyhedron
+[]
+[150]
 Overfull \hbox (9.79532pt too wide) in paragraph at lines 2846--2848
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][][]
 B[]H[]M[]Z05[][][]widening[][][]assign[][][]with[][][]tokens(+[]Handle[]
@@ -19283,26 +19278,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]fo
 ld[][][]space[][][]dimensions(+[]Handle, +[]List[][][]of[][][][]P[]
 [89]
-Overfull \hbox (24.14204pt too wide) in paragraph at lines 175--177
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]bounded[][][]affine[][][]image[
-][] ([][]ppl[][][][]Grid[][][]t[][] ph, [][]ppl[][][]dimension[][][]type[][] va
-r, [][]ppl[][][]const[][][][]Linear[][][][]Expression[]
-
-Overfull \hbox (7.17998pt too wide) in paragraph at lines 183--185
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]generalized[][][]affine[][][]im
-age[][][]lhs[][][]rhs[][] ([][]ppl[][][][]Grid[][][]t[][] ph, [][]ppl[][][]cons
-t[][][][]Linear[][][][]Expression[][][]t[][] lhs, enum
-
-Overfull \hbox (4.87045pt too wide) in paragraph at lines 187--189
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]generalized[][][]affine[][][]im
-age[][][]with[][][]congruence[][] ([][]ppl[][][][]Grid[][][]t[][] ph, [][]ppl[]
-[][]dimension[][][]type[][] var, enum
-
-Overfull \hbox (1.3616pt too wide) in paragraph at lines 187--189
-[][]\OT1/ptm/bc/n/10 ppl[][][]enum[][][][]Constraint[][][][]Type[][] rel-sym, [
-][]ppl[][][]const[][][][]Linear[][][][]Expression[][][]t[][] le, [][]ppl[][][]c
-onst[][][][]Coefficient[][][]t[][] d, [][]ppl[]
-[152
 Overfull \hbox (39.79532pt too wide) in paragraph at lines 2923--2925
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][]
 []Polyhedron[][][][]Grid[][][]from[][][]space[][][]dimension(+[]Dimension[]
@@ -19330,7 +19305,46 @@
 Overfull \hbox (21.79532pt too wide) in paragraph at lines 2953--2955
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][]
 []Polyhedron[][][][]Grid[][][]from[][][][]Grid(+[]Handle[][][]1, -[]Handle[]
-[90]]
+[90]
+Overfull \hbox (1.55243pt too wide) in paragraph at lines 59--61
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Grid[][][]from[][][][]B[]D[][][]
+[]Shape[][][]double[][][]with[][][]complexity[][] ([][]ppl[][][][]Grid[][][]t[]
+[] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const[][][][]B[]D[]
+[][][]Shape[]
+
+Overfull \hbox (27.93198pt too wide) in paragraph at lines 61--63
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[
+][][][]Shape[][][]double[][][]with[][][]complexity[][] ([][]ppl[][][][]Grid[][]
+[]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const[][][][]O
+ctagonal[]
+
+Overfull \hbox (6.9618pt too wide) in paragraph at lines 67--69
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Grid[][][]from[][][][]Grid[][][]
+[]Generator[][][][]System[][] ([][]ppl[][][][]Grid[][][]t[][] $\OMS/cmsy/m/n/10
+ ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[][][]const[][][][]Grid[][][][]Generator[][][
+][]System[]
+
+Overfull \hbox (3.21011pt too wide) in paragraph at lines 89--91
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]get[][][]minimized[][][]congrue
+nces[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] ph, [][]ppl[][][]const[][][
+][]Congruence[][][][]System[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 p
+cs) 
+
+Overfull \hbox (7.22137pt too wide) in paragraph at lines 91--93
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]get[][][]minimized[][][]grid[][
+][]generators[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] ph, [][]ppl[][][]c
+onst[][][][]Grid[][][][]Generator[][][][]System[]
+
+Overfull \hbox (28.41115pt too wide) in paragraph at lines 115--117
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]maximize[][][]with[][][]point[]
+[] ([][]ppl[][][]const[][][][]Grid[][][]t[][] ph, [][]ppl[][][]const[][][][]Lin
+ear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]Coefficient[]
+
+Overfull \hbox (26.7511pt too wide) in paragraph at lines 117--119
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]minimize[][][]with[][][]point[]
+[] ([][]ppl[][][]const[][][][]Grid[][][]t[][] ph, [][]ppl[][][]const[][][][]Lin
+ear[][][][]Expression[][][]t[][] le, [][]ppl[][][][]Coefficient[]
+[151
 Overfull \hbox (3.79532pt too wide) in paragraph at lines 2956--2958
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][]
 []Polyhedron[][][][]Grid[][][]from[][][][]Rational[][][][]Box(+[]Handle[]
@@ -19402,7 +19416,7 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][]
 []Polyhedron[][][][]Grid[][][]from[][][][]Rational[][][][]Box[][][]with[][][]co
 mplexity(+[]
-[91]
+[91]]
 Overfull \hbox (14.59534pt too wide) in paragraph at lines 2995--2997
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Constraints[][][][]Product[][][][]C[][][]
 []Polyhedron[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class
@@ -19489,27 +19503,7 @@
 Overfull \hbox (15.2138pt too wide) in paragraph at lines 3084--3086
 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
 ron[][][][]Grid[][][]relation[][][]with[][][]generator(+[]Handle,
-[93
-Overfull \hbox (5.27174pt too wide) in paragraph at lines 193--195
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]generalized[][][]affine[][][]pr
-eimage[][][]lhs[][][]rhs[][][]with[][][]congruence[][] ([][]ppl[][][][]Grid[][]
-[]t[][] ph, [][]ppl[][][]const[][][][]Linear[]
-
-Overfull \hbox (7.88818pt too wide) in paragraph at lines 205--207
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]fold[][][]space[][][]dimensions
-[][] ([][]ppl[][][][]Grid[][][]t[][] ph, [][]ppl[][][]dimension[][][]type[][] d
-s[]$ $[], size[][][]t n, [][]ppl[][][]dimension[]
-
-Overfull \hbox (9.77875pt too wide) in paragraph at lines 237--239
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]wrap[][][]assign[][] ([][]ppl[]
-[][][]Grid[][][]t[][] ph, [][]ppl[][][]dimension[][][]type[][] ds[]$ $[], size[
-][][]t n, enum [][]ppl[][][]enum[][][][]Bounded[]
-
-Overfull \hbox (8.82231pt too wide) in paragraph at lines 237--239
-[][][]\OT1/ptm/bc/n/10 Bounded[][][][]Integer[][][][]Type[][][][]Overflow[][] o
-, const [][]ppl[][][]const[][][][]Constraint[][][][]System[][][]t[][] $\OMS/cms
-y/m/n/10 ^^C$\OT1/ptm/bc/n/10 pcs, un-signed complexity[]
-[153]]
+[93]
 Overfull \hbox (21.2138pt too wide) in paragraph at lines 3087--3089
 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
 ron[][][][]Grid[][][]relation[][][]with[][][]congruence(+[]Handle,
@@ -19537,7 +19531,27 @@
 Overfull \hbox (0.81381pt too wide) in paragraph at lines 3113--3115
 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
 ron[][][][]Grid[][][]total[][][]memory[][][]in[][][]bytes(+[]Handle,
-[94]
+[94
+Overfull \hbox (24.14204pt too wide) in paragraph at lines 175--177
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]bounded[][][]affine[][][]image[
+][] ([][]ppl[][][][]Grid[][][]t[][] ph, [][]ppl[][][]dimension[][][]type[][] va
+r, [][]ppl[][][]const[][][][]Linear[][][][]Expression[]
+
+Overfull \hbox (7.17998pt too wide) in paragraph at lines 183--185
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]generalized[][][]affine[][][]im
+age[][][]lhs[][][]rhs[][] ([][]ppl[][][][]Grid[][][]t[][] ph, [][]ppl[][][]cons
+t[][][][]Linear[][][][]Expression[][][]t[][] lhs, enum
+
+Overfull \hbox (4.87045pt too wide) in paragraph at lines 187--189
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]generalized[][][]affine[][][]im
+age[][][]with[][][]congruence[][] ([][]ppl[][][][]Grid[][][]t[][] ph, [][]ppl[]
+[][]dimension[][][]type[][] var, enum
+
+Overfull \hbox (1.3616pt too wide) in paragraph at lines 187--189
+[][]\OT1/ptm/bc/n/10 ppl[][][]enum[][][][]Constraint[][][][]Type[][] rel-sym, [
+][]ppl[][][]const[][][][]Linear[][][][]Expression[][][]t[][] le, [][]ppl[][][]c
+onst[][][][]Coefficient[][][]t[][] d, [][]ppl[]
+[152]]
 Overfull \hbox (41.6138pt too wide) in paragraph at lines 3129--3131
 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
 ron[][][][]Grid[][][]add[][][]constraint(+[]Handle, +[]Constraint) 
@@ -19582,26 +19596,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
 ron[][][][]Grid[][][]unconstrain[][][]space[][][]dimensions(+[]
 [95]
-Overfull \hbox (4.96187pt too wide) in paragraph at lines 269--271
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[
-][][][]M[]S[][][][]Grid[][][]2[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] p
-set[][][]before, [][]ppl[][][]const[][][][]Grid[][][]t[][] pset[]
-
-Overfull \hbox (2.7419pt too wide) in paragraph at lines 271--273
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[
-][][][]P[]R[][][][]Grid[][][]2[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] p
-set[][][]before, [][]ppl[][][]const[][][][]Grid[][][]t[][] pset[]
-
-Overfull \hbox (4.41154pt too wide) in paragraph at lines 273--275
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions
-[][][][]M[]S[][][][]Grid[][][]2[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] 
-pset[][][]before, [][]ppl[][][]const[][][][]Grid[][][]t[][] pset[]
-
-Overfull \hbox (2.19157pt too wide) in paragraph at lines 275--277
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions
-[][][][]P[]R[][][][]Grid[][][]2[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] 
-pset[][][]before, [][]ppl[][][]const[][][][]Grid[][][]t[][] pset[]
-[154
 Overfull \hbox (9.2138pt too wide) in paragraph at lines 3166--3168
 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
 ron[][][][]Grid[][][]affine[][][]image(+[]Handle, +[]P[]P[]L[][][][]Var,
@@ -19645,7 +19639,7 @@
 Overfull \hbox (12.19531pt too wide) in paragraph at lines 3200--3202
 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
 ron[][][][]Grid[][][]difference[][][]assign(+[]Handle[][][]1, +[]
-[96]]
+[96]
 Overfull \hbox (15.79532pt too wide) in paragraph at lines 3203--3205
 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
 ron[][][][]Grid[][][]time[][][]elapse[][][]assign(+[]Handle[][][]1, +[]
@@ -19678,6 +19672,26 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
 ron[][][][]Grid[][][]remove[][][]space[][][]dimensions(+[]Handle,
 [97]
+Overfull \hbox (5.27174pt too wide) in paragraph at lines 193--195
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]generalized[][][]affine[][][]pr
+eimage[][][]lhs[][][]rhs[][][]with[][][]congruence[][] ([][]ppl[][][][]Grid[][]
+[]t[][] ph, [][]ppl[][][]const[][][][]Linear[]
+
+Overfull \hbox (7.88818pt too wide) in paragraph at lines 205--207
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]fold[][][]space[][][]dimensions
+[][] ([][]ppl[][][][]Grid[][][]t[][] ph, [][]ppl[][][]dimension[][][]type[][] d
+s[]$ $[], size[][][]t n, [][]ppl[][][]dimension[]
+
+Overfull \hbox (9.77875pt too wide) in paragraph at lines 237--239
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Grid[][][]wrap[][][]assign[][] ([][]ppl[]
+[][][]Grid[][][]t[][] ph, [][]ppl[][][]dimension[][][]type[][] ds[]$ $[], size[
+][][]t n, enum [][]ppl[][][]enum[][][][]Bounded[]
+
+Overfull \hbox (8.82231pt too wide) in paragraph at lines 237--239
+[][][]\OT1/ptm/bc/n/10 Bounded[][][][]Integer[][][][]Type[][][][]Overflow[][] o
+, const [][]ppl[][][]const[][][][]Constraint[][][][]System[][][]t[][] $\OMS/cms
+y/m/n/10 ^^C$\OT1/ptm/bc/n/10 pcs, un-signed complexity[]
+[153
 Overfull \hbox (21.79532pt too wide) in paragraph at lines 3241--3243
 []\OT1/pcr/m/n/10 ppl[][][][]Constraints[][][][]Product[][][][]C[][][][]Polyhed
 ron[][][][]Grid[][][]remove[][][]higher[][][]space[][][]dimensions(+[]
@@ -19705,27 +19719,7 @@
 Overfull \hbox (21.2138pt too wide) in paragraph at lines 3279--3281
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]C[][][][]
 Polyhedron[][][]from[][][]congruences(+[]Congruence[][][][]System,
-[98]
-Overfull \hbox (8.37189pt too wide) in paragraph at lines 345--346
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[][][][]S
-hape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Grid[][][]f
-rom[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class
-
-Overfull \hbox (9.49188pt too wide) in paragraph at lines 351--352
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[][][][]S
-hape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Grid[][][]f
-rom[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class
-
-Overfull \hbox (36.272pt too wide) in paragraph at lines 375--376
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]C[][][][]Polyhedro
-n[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Grid[][]
-[]from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity
-
-Overfull \hbox (18.41342pt too wide) in paragraph at lines 381--382
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]N[]N[]C[][][][]Pol
-yhedron[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Gr
-id[][][]from[][][][]N[]N[]C[][][][]Polyhedron[][][]with[]
-[155]
+[98]]
 Underfull \hbox (badness 10000) in paragraph at lines 3287--3288
 
 
@@ -19765,6 +19759,26 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]bounds[][][]from[][][]below(+[]Handle, +[]Lin[][][][]Expr) 
 [99]
+Overfull \hbox (4.96187pt too wide) in paragraph at lines 269--271
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[
+][][][]M[]S[][][][]Grid[][][]2[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] p
+set[][][]before, [][]ppl[][][]const[][][][]Grid[][][]t[][] pset[]
+
+Overfull \hbox (2.7419pt too wide) in paragraph at lines 271--273
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]one[][][]affine[][][]ranking[][][]function[
+][][][]P[]R[][][][]Grid[][][]2[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] p
+set[][][]before, [][]ppl[][][]const[][][][]Grid[][][]t[][] pset[]
+
+Overfull \hbox (4.41154pt too wide) in paragraph at lines 273--275
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions
+[][][][]M[]S[][][][]Grid[][][]2[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] 
+pset[][][]before, [][]ppl[][][]const[][][][]Grid[][][]t[][] pset[]
+
+Overfull \hbox (2.19157pt too wide) in paragraph at lines 275--277
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions
+[][][][]P[]R[][][][]Grid[][][]2[][] ([][]ppl[][][]const[][][][]Grid[][][]t[][] 
+pset[][][]before, [][]ppl[][][]const[][][][]Grid[][][]t[][] pset[]
+[154
 Overfull \hbox (33.79532pt too wide) in paragraph at lines 3342--3344
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]contains[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedron(+[]
@@ -19812,37 +19826,7 @@
 Overfull \hbox (4.9953pt too wide) in paragraph at lines 3385--3387
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]maximize(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[]
-[100]
-Overfull \hbox (33.32191pt too wide) in paragraph at lines 393--394
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Rational[][][][]Bo
-x[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Grid[][]
-[]from[][][][]Rational[][][][]Box[][][]with[][][]complexity
-
-Overfull \hbox (2.50291pt too wide) in paragraph at lines 399--400
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[
-][][]mpz[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]n
-ew[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]
-
-Overfull \hbox (0.7429pt too wide) in paragraph at lines 405--406
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[
-][][]mpq[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]n
-ew[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[]
-
-Overfull \hbox (19.06262pt too wide) in paragraph at lines 411--412
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[][][][]S
-hape[][][]mpz[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[]
-[][]new[][][][]Grid[][][]from[][][][]Octagonal[]
-
-Overfull \hbox (20.18262pt too wide) in paragraph at lines 417--418
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[][][][]S
-hape[][][]mpq[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[]
-[][]new[][][][]Grid[][][]from[][][][]Octagonal[]
-
-Overfull \hbox (17.61194pt too wide) in paragraph at lines 423--424
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Double[][][][]Box[
-][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Grid[][][]
-from[][][][]Double[][][][]Box[][][]with[][][]complexity
-[156]
+[100]]
 Overfull \hbox (4.9953pt too wide) in paragraph at lines 3390--3392
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]minimize(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[]
@@ -19867,6 +19851,26 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]add[][][]constraint(+[]Handle, +[]Constraint) 
 [101]
+Overfull \hbox (8.37189pt too wide) in paragraph at lines 345--346
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[][][][]S
+hape[][][]mpz[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Grid[][][]f
+rom[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class
+
+Overfull \hbox (9.49188pt too wide) in paragraph at lines 351--352
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[][][][]S
+hape[][][]mpq[][][]class()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Grid[][][]f
+rom[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class
+
+Overfull \hbox (36.272pt too wide) in paragraph at lines 375--376
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]C[][][][]Polyhedro
+n[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Grid[][]
+[]from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity
+
+Overfull \hbox (18.41342pt too wide) in paragraph at lines 381--382
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]N[]N[]C[][][][]Pol
+yhedron[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Gr
+id[][][]from[][][][]N[]N[]C[][][][]Polyhedron[][][]with[]
+[155
 Overfull \hbox (2.0138pt too wide) in paragraph at lines 3430--3432
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]add[][][]congruence(+[]Handle, +[]Congruence) 
@@ -19911,17 +19915,7 @@
 \OT1/ptm/m/it/10 Transforms the pointset pow-er-set ref-er-enced by \OT1/pcr/m/
 sl/10 Handle \OT1/ptm/m/it/10 as-sign-ing the affine ex-pres-sion for \OT1/pcr/
 m/sl/10 Lin[][][][]Expr/Coeff
-[102]
-Overfull \hbox (0.9931pt too wide) in paragraph at lines 429--430
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[
-][][]double[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][]
-[]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]double[]
-
-Overfull \hbox (6.0328pt too wide) in paragraph at lines 435--436
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[][][][]S
-hape[][][]double[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[
-][][][]Grid[][][]from[][][][]Octagonal[]
-[157]
+[102]]
 Overfull \hbox (8.5953pt too wide) in paragraph at lines 3473--3475
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]affine[][][]preimage(+[]Handle, +[]P[]P[]L[][][][]Var, +[]
@@ -19962,6 +19956,36 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]difference[][][]assign(+[]Handle[][][]1, +[]Handle[]
 [103]
+Overfull \hbox (33.32191pt too wide) in paragraph at lines 393--394
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Rational[][][][]Bo
+x[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Grid[][]
+[]from[][][][]Rational[][][][]Box[][][]with[][][]complexity
+
+Overfull \hbox (2.50291pt too wide) in paragraph at lines 399--400
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[
+][][]mpz[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]n
+ew[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]
+
+Overfull \hbox (0.7429pt too wide) in paragraph at lines 405--406
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[
+][][]mpq[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]n
+ew[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[]
+
+Overfull \hbox (19.06262pt too wide) in paragraph at lines 411--412
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[][][][]S
+hape[][][]mpz[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[]
+[][]new[][][][]Grid[][][]from[][][][]Octagonal[]
+
+Overfull \hbox (20.18262pt too wide) in paragraph at lines 417--418
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[][][][]S
+hape[][][]mpq[][][]class[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[]
+[][]new[][][][]Grid[][][]from[][][][]Octagonal[]
+
+Overfull \hbox (17.61194pt too wide) in paragraph at lines 423--424
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Double[][][][]Box[
+][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Grid[][][]
+from[][][][]Double[][][][]Box[][][]with[][][]complexity
+[156]
 Overfull \hbox (12.19531pt too wide) in paragraph at lines 3507--3509
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]time[][][]elapse[][][]assign(+[]Handle[][][]1, +[]Handle[]
@@ -19994,7 +20018,17 @@
 Overfull \hbox (14.5953pt too wide) in paragraph at lines 3538--3540
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]concatenate[][][]assign(+[]Handle[][][]1, +[]Handle[]
-[104] [158]
+[104]
+Overfull \hbox (0.9931pt too wide) in paragraph at lines 429--430
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]B[]D[][][][]Shape[
+][][]double[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][]
+[]Grid[][][]from[][][][]B[]D[][][][]Shape[][][]double[]
+
+Overfull \hbox (6.0328pt too wide) in paragraph at lines 435--436
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]from[][][][]Octagonal[][][][]S
+hape[][][]double[][][]with[][][]complexity()[] \OT1/pcr/m/n/8 int ppl[][][]new[
+][][][]Grid[][][]from[][][][]Octagonal[]
+[157
 Overfull \hbox (12.81381pt too wide) in paragraph at lines 3545--3547
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]add[][][]space[][][]dimensions[][][]and[][][]embed(+[]Handle,
@@ -20035,7 +20069,7 @@
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 3579--3581
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]iterator[][][]equals[][][]iterator(+[]Iterator[][][]
-[105]
+[105]]
 Overfull \hbox (29.6138pt too wide) in paragraph at lines 3588--3590
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]C[][][][]Polyhedro
 n[][][]iterator[][][]get[][][]disjunct(+[]Iterator, -[]Handle) 
@@ -20055,7 +20089,7 @@
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 3629--3631
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[]
 [][][]Polyhedron[][][]from[][][]congruences(+[]Congruence[][][]
-[106] [159]
+[106] [158]
 Underfull \hbox (badness 10000) in paragraph at lines 3637--3638
 
 
@@ -20082,7 +20116,7 @@
 Overfull \hbox (15.2138pt too wide) in paragraph at lines 3686--3688
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]bounds[][][]from[][][]above(+[]Handle, +[]Lin[][][][]Expr) 
-[107] [160
+[107] [159]
 Overfull \hbox (15.2138pt too wide) in paragraph at lines 3689--3691
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]bounds[][][]from[][][]below(+[]Handle, +[]Lin[][][][]Expr) 
@@ -20132,7 +20166,7 @@
 Overfull \hbox (14.5953pt too wide) in paragraph at lines 3732--3734
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]relation[][][]with[][][]congruence(+[]Handle, +[]
-[108]]
+[108]
 Overfull \hbox (16.9953pt too wide) in paragraph at lines 3735--3737
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]maximize(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[]
@@ -20156,7 +20190,7 @@
 Overfull \hbox (27.2138pt too wide) in paragraph at lines 3758--3760
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]total[][][]memory[][][]in[][][]bytes(+[]Handle, ?Number) 
-[109] [161
+[109] [160]
 Overfull \hbox (14.0138pt too wide) in paragraph at lines 3777--3779
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]add[][][]constraint(+[]Handle, +[]Constraint) 
@@ -20200,7 +20234,7 @@
 Overfull \hbox (17.6138pt too wide) in paragraph at lines 3817--3819
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]unconstrain[][][]space[][][]dimensions(+[]Handle,
-[110]]
+[110] [161]
 Overfull \hbox (2.5953pt too wide) in paragraph at lines 3820--3822
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]affine[][][]image(+[]Handle, +[]P[]P[]L[][][][]Var, +[]
@@ -20249,7 +20283,7 @@
 Overfull \hbox (20.5953pt too wide) in paragraph at lines 3854--3856
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]difference[][][]assign(+[]Handle[][][]1, +[]Handle[]
-[111 [162]]
+[111] [162]
 Overfull \hbox (24.19531pt too wide) in paragraph at lines 3857--3859
 []\OT1/pcr/m/n/10 ppl[][][][]Pointset[][][][]Powerset[][][][]N[]N[]C[][][][]Pol
 yhedron[][][]time[][][]elapse[][][]assign(+[]Handle[][][]1, +[]Handle[]
@@ -20384,6 +20418,16 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]C[][][
 ][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[]Complexity,
 [115]
+Overfull \hbox (17.18285pt too wide) in paragraph at lines 903--904
+ []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]congruence[][][]widening[][][]assign[][
+][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][][]congruence[][][
+]widening[][][]assign[][][]with[]
+
+Overfull \hbox (5.15298pt too wide) in paragraph at lines 909--910
+ []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]generator[][][]widening[][][]assign[][]
+[]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][][]generator[][][]w
+idening[][][]assign[][][]with[]
+[165]
 Overfull \hbox (27.2138pt too wide) in paragraph at lines 4032--4034
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]N[]N[]
 C[][][][]Polyhedron[][][]with[][][]complexity(+[]Handle, +[]Complexity,
@@ -20426,16 +20470,26 @@
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Double[][][][]Box[][][]from[][][][]Octago
 nal[][][][]Shape[][][]double[][][]with[][][]complexity(+[]Handle, +[]
 [116]
-Overfull \hbox (17.18285pt too wide) in paragraph at lines 903--904
- []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]congruence[][][]widening[][][]assign[][
-][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][][]congruence[][][
-]widening[][][]assign[][][]with[]
+Overfull \hbox (10.54222pt too wide) in paragraph at lines 939--940
+ []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]limited[][][]congruence[][][]extrapolat
+ion[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][
+][]limited[][][]congruence[]
 
-Overfull \hbox (5.15298pt too wide) in paragraph at lines 909--910
- []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]generator[][][]widening[][][]assign[][]
-[]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][][]generator[][][]w
-idening[][][]assign[][][]with[]
-[165]
+Overfull \hbox (1.39236pt too wide) in paragraph at lines 945--946
+ []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]limited[][][]generator[][][]extrapolati
+on[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][]
+[]limited[][][]generator[][][]
+
+Overfull \hbox (22.05283pt too wide) in paragraph at lines 951--952
+ []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]limited[][][]congruence[][][]extrapolat
+ion[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][][]limited[][][]congru
+ence[][][]extrapolation[]
+
+Overfull \hbox (10.02296pt too wide) in paragraph at lines 957--958
+ []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]limited[][][]generator[][][]extrapolati
+on[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][][]limited[][][]generat
+or[][][]extrapolation[]
+[166]
 Overfull \hbox (13.3953pt too wide) in paragraph at lines 4127--4129
 []\OT1/pcr/m/n/10 ppl[][][][]Double[][][][]Box[][][]relation[][][]with[][][]con
 straint(+[]Handle, +[]Constraint, ?Relation[]
@@ -20487,26 +20541,11 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Double[][][][]Box[][][]minimize[][][]with[][][]poi
 nt(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[]
 [118]
-Overfull \hbox (10.54222pt too wide) in paragraph at lines 939--940
- []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]limited[][][]congruence[][][]extrapolat
-ion[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][
-][]limited[][][]congruence[]
-
-Overfull \hbox (1.39236pt too wide) in paragraph at lines 945--946
- []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]limited[][][]generator[][][]extrapolati
-on[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][]
-[]limited[][][]generator[][][]
-
-Overfull \hbox (22.05283pt too wide) in paragraph at lines 951--952
- []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]limited[][][]congruence[][][]extrapolat
-ion[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][][]limited[][][]congru
-ence[][][]extrapolation[]
-
-Overfull \hbox (10.02296pt too wide) in paragraph at lines 957--958
- []\OT1/ptm/b/n/10 ppl[][][][]Grid[][][]limited[][][]generator[][][]extrapolati
-on[][][]assign()[] \OT1/pcr/m/n/8 int ppl[][][][]Grid[][][]limited[][][]generat
-or[][][]extrapolation[]
-[166 [119]]
+Overfull \hbox (7.5717pt too wide) in paragraph at lines 981--982
+ []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]recycle[][][][]Grid[][][][]Gen
+erator[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Grid[][][]recyc
+le[][][][]Grid[][][][]Generator[][][][]System ( 
+[167 [119]]
 Overfull \hbox (1.38072pt too wide) in paragraph at lines 4237--4239
 \OT1/ptm/m/it/10 Transforms the dou-ble box ref-er-enced by \OT1/pcr/m/sl/10 Ha
 ndle \OT1/ptm/m/it/10 sub-sti-tut-ing the affine ex-pres-sion for \OT1/pcr/m/sl
@@ -20540,12 +20579,7 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Double[][][][]Box[][][]wrap[][][]assign(+[]Handle,
  +[]List[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[]Representation,
 
-Underfull \vbox (badness 3503) has occurred while \output is active [120]
-Overfull \hbox (7.5717pt too wide) in paragraph at lines 981--982
- []\OT1/ptm/b/n/10 ppl[][][]new[][][][]Grid[][][]recycle[][][][]Grid[][][][]Gen
-erator[][][][]System()[] \OT1/pcr/m/n/8 int ppl[][][]new[][][][]Grid[][][]recyc
-le[][][][]Grid[][][][]Generator[][][][]System ( 
-[167]
+Underfull \vbox (badness 3503) has occurred while \output is active [120 [168]]) (./interfaceppl__Linear__Expression__tag.tex
 Overfull \hbox (27.2138pt too wide) in paragraph at lines 4280--4282
 []\OT1/pcr/m/n/10 ppl[][][][]Double[][][][]Box[][][]simplify[][][]using[][][]co
 ntext[][][]assign(+[]Handle[][][]1, +[]Handle[][][]2, ?Boolean) 
@@ -20565,7 +20599,7 @@
 Overfull \hbox (15.79532pt too wide) in paragraph at lines 4302--4304
 []\OT1/pcr/m/n/10 ppl[][][][]Double[][][][]Box[][][]limited[][][][]C[]C76[][][]
 extrapolation[][][]assign[][][]with[][][]tokens(+[]Handle[][][]1, +[]
-[121]
+[121] [169]
 Overfull \hbox (12.19531pt too wide) in paragraph at lines 4305--4307
 []\OT1/pcr/m/n/10 ppl[][][][]Double[][][][]Box[][][]limited[][][][]C[]C76[][][]
 extrapolation[][][]assign(+[]Handle[][][]1, +[]Handle[][][]2, +[]
@@ -20582,14 +20616,46 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Double[][][][]Box[][][]fold[][][]space[][][]dimens
 ions(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Vars, +[]P[]P[]L[][][][]V
 ar) 
-[122] [168]
+[122]
 Overfull \hbox (6.19531pt too wide) in paragraph at lines 4361--4363
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[]
 [][]space[][][]dimension(+[]Dimension[][][][]Type, +[]Universe[]
 
 Underfull \hbox (badness 10000) in paragraph at lines 4382--4383
 
-[123]) (./interfaceppl__Linear__Expression__tag.tex [169]
+[123
+Overfull \hbox (22.34773pt too wide) in paragraph at lines 25--27
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Linear[][][][]Expression[][][
+]from[][][][]Constraint[][] ([][]ppl[][][][]Linear[][][][]Expression[][][]t[][]
+ $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 ple, [][]ppl[][][]const[][][][]Constrai
+nt[]
+
+Overfull \hbox (18.96815pt too wide) in paragraph at lines 28--30
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Linear[][][][]Expression[][][
+]from[][][][]Generator[][] ([][]ppl[][][][]Linear[][][][]Expression[][][]t[][] 
+$\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 ple, [][]ppl[][][]const[][][][]Generator
+[]
+
+Overfull \hbox (15.40788pt too wide) in paragraph at lines 53--55
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Linear[][][][]Expression[][][]inhomoge
+neous[][][]term[][] ([][]ppl[][][]const[][][][]Linear[][][][]Expression[][][]t[
+][] le, [][]ppl[][][][]Coefficient[]
+
+Overfull \hbox (2.65662pt too wide) in paragraph at lines 69--71
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Linear[][][][]Expression[][][]add[][][
+]to[][][]coefficient[][] ([][]ppl[][][][]Linear[][][][]Expression[][][]t[][] le
+, [][]ppl[][][]dimension[][][]type[][] var,
+[170]]
+Overfull \hbox (22.89804pt too wide) in paragraph at lines 72--74
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Linear[][][][]Expression[][][]add[][][
+]to[][][]inhomogeneous[][] ([][]ppl[][][][]Linear[][][][]Expression[][][]t[][] 
+le, [][]ppl[][][]const[][][][]Coefficient[]
+
+Overfull \hbox (25.43753pt too wide) in paragraph at lines 81--83
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]multiply[][][][]Linear[][][][]Expression
+[][][]by[][][][]Coefficient[][] ([][]ppl[][][][]Linear[][][][]Expression[][][]t
+[][] le, [][]ppl[][][]const[][][][]Coefficient[]
+) (./interfaceppl__MIP__Problem__tag.tex
 Overfull \hbox (13.39532pt too wide) in paragraph at lines 4406--4408
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[]
 [][][]Octagonal[][][][]Shape[][][]mpz[][][]class(+[]Handle[][][]1, -[]Handle[]
@@ -20646,7 +20712,7 @@
 Overfull \hbox (4.99533pt too wide) in paragraph at lines 4442--4444
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[]
 [][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]complexity(+[]
-[124]
+[124] [171]
 Overfull \hbox (30.81381pt too wide) in paragraph at lines 4445--4447
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]B[]D[][][][]Shape[][][]double[][][]from[]
 [][][]Double[][][][]Box[][][]with[][][]complexity(+[]Handle, +[]Complexity,
@@ -20667,28 +20733,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]is[][][]disjoin
 t[][][]from[][][][]B[]D[][][][]Shape[][][]double(+[]Handle[][][]1, +[]Handle[]
 [125]
-Overfull \hbox (22.34773pt too wide) in paragraph at lines 25--27
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Linear[][][][]Expression[][][
-]from[][][][]Constraint[][] ([][]ppl[][][][]Linear[][][][]Expression[][][]t[][]
- $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 ple, [][]ppl[][][]const[][][][]Constrai
-nt[]
-
-Overfull \hbox (18.96815pt too wide) in paragraph at lines 28--30
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Linear[][][][]Expression[][][
-]from[][][][]Generator[][] ([][]ppl[][][][]Linear[][][][]Expression[][][]t[][] 
-$\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 ple, [][]ppl[][][]const[][][][]Generator
-[]
-
-Overfull \hbox (15.40788pt too wide) in paragraph at lines 53--55
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Linear[][][][]Expression[][][]inhomoge
-neous[][][]term[][] ([][]ppl[][][]const[][][][]Linear[][][][]Expression[][][]t[
-][] le, [][]ppl[][][][]Coefficient[]
-
-Overfull \hbox (2.65662pt too wide) in paragraph at lines 69--71
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Linear[][][][]Expression[][][]add[][][
-]to[][][]coefficient[][] ([][]ppl[][][][]Linear[][][][]Expression[][][]t[][] le
-, [][]ppl[][][]dimension[][][]type[][] var,
-[170
 Overfull \hbox (40.9953pt too wide) in paragraph at lines 4519--4521
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]relation[][][]w
 ith[][][]constraint(+[]Handle, +[]Constraint, ?Relation[]
@@ -20735,7 +20779,39 @@
 Overfull \hbox (36.19531pt too wide) in paragraph at lines 4550--4552
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]maximize[][][]w
 ith[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[]
-[126]]
+[126]
+Overfull \hbox (14.92802pt too wide) in paragraph at lines 50--52
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]M[]I[]P[][][][]Problem[][] ([
+][]ppl[][][][]M[]I[]P[][][][]Problem[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/
+bc/n/10 pmip, [][]ppl[][][]dimension[][][]type[][] d, [][]ppl[][][]const[][][][
+]Constraint[]
+
+Overfull \hbox (20.14798pt too wide) in paragraph at lines 53--55
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]M[]I[]P[][][][]Problem[][][]f
+rom[][][][]M[]I[]P[][][][]Problem[][] ([][]ppl[][][][]M[]I[]P[][][][]Problem[][
+][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pmip, [][]ppl[][][]const[][][][
+]M[]I[]P[][][][]Problem[]
+
+Overfull \hbox (14.84767pt too wide) in paragraph at lines 56--58
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]M[]I[]P[][][][]Problem[][]
+[]from[][][][]M[]I[]P[][][][]Problem[][] ([][]ppl[][][][]M[]I[]P[][][][]Problem
+[][][]t[][] dst, [][]ppl[][][]const[][][][]M[]I[]P[][][][]Problem[]
+
+Overfull \hbox (1.62802pt too wide) in paragraph at lines 69--71
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]M[]I[]P[][][][]Problem[][][]number[][]
+[]of[][][]integer[][][]space[][][]dimensions[][] ([][]ppl[][][]const[][][][]M[]
+I[]P[][][][]Problem[][][]t[][] mip, [][]ppl[]
+
+Overfull \hbox (0.81778pt too wide) in paragraph at lines 72--74
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]M[]I[]P[][][][]Problem[][][]integer[][
+][]space[][][]dimensions[][] ([][]ppl[][][]const[][][][]M[]I[]P[][][][]Problem[
+][][]t[][] mip, [][]ppl[][][]dimension[]
+
+Overfull \hbox (28.59772pt too wide) in paragraph at lines 81--83
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]M[]I[]P[][][][]Problem[][][]objective[
+][][]function[][] ([][]ppl[][][]const[][][][]M[]I[]P[][][][]Problem[][][]t[][] 
+mip, [][]ppl[][][]const[][][][]Linear[][][][]Expression[]
+[172]
 Overfull \hbox (36.19531pt too wide) in paragraph at lines 4555--4557
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]minimize[][][]w
 ith[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[]
@@ -20749,16 +20825,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]refine[][][]wit
 h[][][]constraints( +[]Handle, +[]Constraint[][][][]System) 
 [127]
-Overfull \hbox (22.89804pt too wide) in paragraph at lines 72--74
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]Linear[][][][]Expression[][][]add[][][
-]to[][][]inhomogeneous[][] ([][]ppl[][][][]Linear[][][][]Expression[][][]t[][] 
-le, [][]ppl[][][]const[][][][]Coefficient[]
-
-Overfull \hbox (25.43753pt too wide) in paragraph at lines 81--83
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]multiply[][][][]Linear[][][][]Expression
-[][][]by[][][][]Coefficient[][] ([][]ppl[][][][]Linear[][][][]Expression[][][]t
-[][] le, [][]ppl[][][]const[][][][]Coefficient[]
-) (./interfaceppl__MIP__Problem__tag.tex [171
 Overfull \hbox (11.6138pt too wide) in paragraph at lines 4600--4602
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]refine[][][]wit
 h[][][]congruences( +[]Handle, +[]Congruence[][][][]System) 
@@ -20794,7 +20860,27 @@
 Overfull \hbox (21.79532pt too wide) in paragraph at lines 4637--4639
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]generalized[][]
 []affine[][][]preimage[][][]lhs[][][]rhs(+[]Handle, +[]Lin[][][][]Expr[]
-[128]]
+[128]
+Overfull \hbox (11.228pt too wide) in paragraph at lines 97--99
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]M[]I[]P[][][][]Problem[][][]add[][][]s
+pace[][][]dimensions[][][]and[][][]embed[][] ([][]ppl[][][][]M[]I[]P[][][][]Pro
+blem[][][]t[][] mip, [][]ppl[][][]dimension[]
+
+Overfull \hbox (5.5279pt too wide) in paragraph at lines 100--102
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]M[]I[]P[][][][]Problem[][][]add[][][]t
+o[][][]integer[][][]space[][][]dimensions[][] ([][]ppl[][][][]M[]I[]P[][][][]Pr
+oblem[][][]t[][] mip, [][]ppl[][][]dimension[]
+
+Overfull \hbox (18.59772pt too wide) in paragraph at lines 109--111
+[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]M[]I[]P[][][][]Problem[][][]set[][][]o
+bjective[][][]function[][] ([][]ppl[][][][]M[]I[]P[][][][]Problem[][][]t[][] mi
+p, [][]ppl[][][]const[][][][]Linear[][][][]Expression[]
+
+Overfull \hbox (28.95757pt too wide) in paragraph at lines 124--125
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]M[]I[]P[][][][]Problem[][][]evaluate[][][
+]objective[][][]function[][] ([][]ppl[][][]const[][][][]M[]I[]P[][][][]Problem[
+][][]t[][] mip, [][]ppl[][][]const[][][][]Generator[]
+[173]
 Overfull \hbox (69.2138pt too wide) in paragraph at lines 4640--4642
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]wrap[][][]assig
 n(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[][][][]Var, +[]Width, +[]Representa
@@ -20812,6 +20898,19 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][][]B[]H[]M[]Z05[
 ][][]widening[][][]assign[][][]with[][][]tokens(+[]Handle[][][]1, +[]Handle[]
 [129]
+Underfull \hbox (badness 10000) detected at line 188
+[][][]
+
+Overfull \hbox (2.87207pt too wide) in paragraph at lines 195--196
+ []\OT1/ptm/b/n/10 ppl[][][][]M[]I[]P[][][][]Problem[][][]evaluate[][][]objecti
+ve[][][]function()[] \OT1/pcr/m/n/8 int ppl[][][][]M[]I[]P[][][][]Problem[][][]
+evaluate[][][]objective[][][]function
+
+Package longtable Warning: Column widths have changed
+(longtable)                in table 11 on input line 211.
+
+
+Underfull \vbox (badness 10000) has occurred while \output is active [174]
 Overfull \hbox (1.39532pt too wide) in paragraph at lines 4675--4677
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][][]H79[][][]wide
 ning[][][]assign[][][]with[][][]tokens(+[]Handle[][][]1, +[]Handle[][][]
@@ -20844,38 +20943,11 @@
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]limited[][][][]
 C[]C76[][][]extrapolation[][][]assign(+[]Handle[][][]1, +[]Handle[]
 [130
-Overfull \hbox (14.92802pt too wide) in paragraph at lines 50--52
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]M[]I[]P[][][][]Problem[][] ([
-][]ppl[][][][]M[]I[]P[][][][]Problem[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/
-bc/n/10 pmip, [][]ppl[][][]dimension[][][]type[][] d, [][]ppl[][][]const[][][][
-]Constraint[]
-
-Overfull \hbox (20.14798pt too wide) in paragraph at lines 53--55
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]M[]I[]P[][][][]Problem[][][]f
-rom[][][][]M[]I[]P[][][][]Problem[][] ([][]ppl[][][][]M[]I[]P[][][][]Problem[][
-][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pmip, [][]ppl[][][]const[][][][
-]M[]I[]P[][][][]Problem[]
-
-Overfull \hbox (14.84767pt too wide) in paragraph at lines 56--58
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][]assign[][][][]M[]I[]P[][][][]Problem[][]
-[]from[][][][]M[]I[]P[][][][]Problem[][] ([][]ppl[][][][]M[]I[]P[][][][]Problem
-[][][]t[][] dst, [][]ppl[][][]const[][][][]M[]I[]P[][][][]Problem[]
-
-Overfull \hbox (1.62802pt too wide) in paragraph at lines 69--71
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]M[]I[]P[][][][]Problem[][][]number[][]
-[]of[][][]integer[][][]space[][][]dimensions[][] ([][]ppl[][][]const[][][][]M[]
-I[]P[][][][]Problem[][][]t[][] mip, [][]ppl[]
 
-Overfull \hbox (0.81778pt too wide) in paragraph at lines 72--74
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]M[]I[]P[][][][]Problem[][][]integer[][
-][]space[][][]dimensions[][] ([][]ppl[][][]const[][][][]M[]I[]P[][][][]Problem[
-][][]t[][] mip, [][]ppl[][][]dimension[]
+Package longtable Warning: Column widths have changed
+(longtable)                in table 12 on input line 230.
 
-Overfull \hbox (28.59772pt too wide) in paragraph at lines 81--83
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]M[]I[]P[][][][]Problem[][][]objective[
-][][]function[][] ([][]ppl[][][]const[][][][]M[]I[]P[][][][]Problem[][][]t[][] 
-mip, [][]ppl[][][]const[][][][]Linear[][][][]Expression[]
-[172]]
+) (./interfaceppl__Octagonal__Shape__double__tag.tex]
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 4724--4726
 []\OT1/pcr/m/n/10 ppl[][][][]B[]D[][][][]Shape[][][]double[][][]add[][][]space[
 ][][]dimensions[][][]and[][][]embed(+[]Handle, +[]Dimension[]
@@ -20937,26 +21009,54 @@
 /ptm/m/it/10 from the bd[][][]shape[][][]mpq[][][]class ref-er-enced by han-dle
  \OT1/pcr/m/sl/10 Handle[][][]1\OT1/ptm/m/it/10 . \OT1/pcr/m/sl/10 Handle[]
 [132]
-Overfull \hbox (11.228pt too wide) in paragraph at lines 97--99
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]M[]I[]P[][][][]Problem[][][]add[][][]s
-pace[][][]dimensions[][][]and[][][]embed[][] ([][]ppl[][][][]M[]I[]P[][][][]Pro
-blem[][][]t[][] mip, [][]ppl[][][]dimension[]
+Overfull \hbox (8.3726pt too wide) in paragraph at lines 19--21
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
+le[][][]from[][][][]C[][][][]Polyhedron[][] ([][]ppl[][][][]Octagonal[][][][]Sh
+ape[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[
+]
 
-Overfull \hbox (5.5279pt too wide) in paragraph at lines 100--102
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]M[]I[]P[][][][]Problem[][][]add[][][]t
-o[][][]integer[][][]space[][][]dimensions[][] ([][]ppl[][][][]M[]I[]P[][][][]Pr
-oblem[][][]t[][] mip, [][]ppl[][][]dimension[]
+Overfull \hbox (6.15236pt too wide) in paragraph at lines 25--27
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
+le[][][]from[][][][]Rational[][][][]Box[][] ([][]ppl[][][][]Octagonal[][][][]Sh
+ape[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[
+]
 
-Overfull \hbox (18.59772pt too wide) in paragraph at lines 109--111
-[][] \OT1/ptm/bc/n/10 int [][]ppl[][][][]M[]I[]P[][][][]Problem[][][]set[][][]o
-bjective[][][]function[][] ([][]ppl[][][][]M[]I[]P[][][][]Problem[][][]t[][] mi
-p, [][]ppl[][][]const[][][][]Linear[][][][]Expression[]
+Overfull \hbox (19.41191pt too wide) in paragraph at lines 31--33
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
+le[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][]
+[][]Octagonal[][][][]Shape[][][]double[]
 
-Overfull \hbox (28.95757pt too wide) in paragraph at lines 124--125
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]M[]I[]P[][][][]Problem[][][]evaluate[][][
-]objective[][][]function[][] ([][]ppl[][][]const[][][][]M[]I[]P[][][][]Problem[
-][][]t[][] mip, [][]ppl[][][]const[][][][]Generator[]
-[173]
+Overfull \hbox (19.97197pt too wide) in paragraph at lines 33--35
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
+le[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][]
+[][]Octagonal[][][][]Shape[][][]double[]
+
+Overfull \hbox (1.70268pt too wide) in paragraph at lines 35--37
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
+le[][][]from[][][][]Double[][][][]Box[][] ([][]ppl[][][][]Octagonal[][][][]Shap
+e[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[]
+
+Overfull \hbox (0.96109pt too wide) in paragraph at lines 37--39
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
+le[][][]from[][][][]B[]D[][][][]Shape[][][]double[][] ([][]ppl[][][][]Octagonal
+[][][][]Shape[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph
+,
+
+Overfull \hbox (6.37234pt too wide) in paragraph at lines 39--41
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
+le[][][]from[][][][]Octagonal[][][][]Shape[][][]double[][] ([][]ppl[][][][]Octa
+gonal[][][][]Shape[][][]double[]
+
+Overfull \hbox (1.80223pt too wide) in paragraph at lines 41--43
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
+le[][][]from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity[][] ([][]ppl[
+][][][]Octagonal[][][][]Shape[]
+
+Overfull \hbox (16.24217pt too wide) in paragraph at lines 43--45
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
+le[][][]from[][][][]N[]N[]C[][][][]Polyhedron[][][]with[][][]complexity[][] ([]
+[]ppl[][][][]Octagonal[][][][]Shape[]
+[175]
 Overfull \hbox (19.39532pt too wide) in paragraph at lines 4806--4808
 []\OT1/pcr/m/n/10 ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]double[][][]f
 rom[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class(+[]Handle[][][]1, -[]
@@ -21031,19 +21131,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]is[][][]di
 sjoint[][][]from[][][][]Octagonal[][][][]Shape[][][]double(+[]Handle[]
 [134]
-Underfull \hbox (badness 10000) detected at line 188
-[][][]
-
-Overfull \hbox (2.87207pt too wide) in paragraph at lines 195--196
- []\OT1/ptm/b/n/10 ppl[][][][]M[]I[]P[][][][]Problem[][][]evaluate[][][]objecti
-ve[][][]function()[] \OT1/pcr/m/n/8 int ppl[][][][]M[]I[]P[][][][]Problem[][][]
-evaluate[][][]objective[][][]function
-
-Package longtable Warning: Column widths have changed
-(longtable)                in table 11 on input line 211.
-
-
-Underfull \vbox (badness 10000) has occurred while \output is active [174]
 Overfull \hbox (30.19531pt too wide) in paragraph at lines 4900--4902
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]equals[][]
 [][]Octagonal[][][][]Shape[][][]double(+[]Handle[][][]1, +[]Handle[]
@@ -21084,11 +21171,66 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]minimize(+
 []Handle, +[]Lin[][][][]Expr, ?Coeff[][][]1, ?Coeff[]
 [135]
+Overfull \hbox (3.17188pt too wide) in paragraph at lines 49--51
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
+le[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]with[][][]comple
+xity[][] ([][]ppl[][][][]Octagonal[]
 
-Package longtable Warning: Column widths have changed
-(longtable)                in table 12 on input line 230.
+Overfull \hbox (3.73193pt too wide) in paragraph at lines 51--53
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
+le[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]with[][][]comple
+xity[][] ([][]ppl[][][][]Octagonal[]
+
+Overfull \hbox (30.38156pt too wide) in paragraph at lines 53--55
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
+le[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]with[][][]c
+omplexity[][] ([][]ppl[][][][]Octagonal[]
+
+Overfull \hbox (30.94162pt too wide) in paragraph at lines 55--57
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
+le[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]c
+omplexity[][] ([][]ppl[][][][]Octagonal[]
+
+Overfull \hbox (18.17213pt too wide) in paragraph at lines 59--61
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
+le[][][]from[][][][]B[]D[][][][]Shape[][][]double[][][]with[][][]complexity[][]
+ ([][]ppl[][][][]Octagonal[][][][]Shape[]
+
+Overfull \hbox (17.342pt too wide) in paragraph at lines 61--63
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
+le[][][]from[][][][]Octagonal[][][][]Shape[][][]double[][][]with[][][]complexit
+y[][] ([][]ppl[][][][]Octagonal[]
+
+Overfull \hbox (2.93048pt too wide) in paragraph at lines 63--65
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
+le[][][]from[][][][]Constraint[][][][]System[][] ([][]ppl[][][][]Octagonal[][][
+][]Shape[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph,
+
+Overfull \hbox (9.5808pt too wide) in paragraph at lines 65--67
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
+le[][][]from[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]Octagonal[][][
+][]Shape[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph,
 
-) (./interfaceppl__Octagonal__Shape__double__tag.tex
+Overfull \hbox (1.24069pt too wide) in paragraph at lines 67--69
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
+le[][][]from[][][][]Generator[][][][]System[][] ([][]ppl[][][][]Octagonal[][][]
+[]Shape[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph,
+
+Overfull \hbox (7.51181pt too wide) in paragraph at lines 79--81
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]g
+et[][][]constraints[][] ([][]ppl[][][]const[][][][]Octagonal[][][][]Shape[][][]
+double[][][]t[][] ph, [][]ppl[][][]const[]
+
+Overfull \hbox (0.2519pt too wide) in paragraph at lines 85--87
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]g
+et[][][]minimized[][][]congruences[][] ([][]ppl[][][]const[][][][]Octagonal[][]
+[][]Shape[][][]double[]
+
+Overfull \hbox (2.76273pt too wide) in paragraph at lines 101--103
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]b
+ounds[][][]from[][][]above[][] ([][]ppl[][][]const[][][][]Octagonal[][][][]Shap
+e[][][]double[][][]t[][] ph, [][]ppl[]
+[176
 Overfull \hbox (20.5953pt too wide) in paragraph at lines 4950--4952
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]maximize[]
 [][]with[][][]point(+[]Handle, +[]Lin[][][][]Expr, ?Coeff[]
@@ -21104,7 +21246,7 @@
 Overfull \hbox (8.0138pt too wide) in paragraph at lines 4988--4990
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]add[][][]c
 ongruences( +[]Handle, +[]Congruence[][][][]System) 
-[136]
+[136]]
 Overfull \hbox (8.0138pt too wide) in paragraph at lines 4991--4993
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]refine[][]
 []with[][][]constraint( +[]Handle, +[]Constraint) 
@@ -21154,54 +21296,6 @@
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]generalize
 d[][][]affine[][][]image(+[]Handle, +[]P[]P[]L[][][][]Var, +[]
 [137]
-Overfull \hbox (8.3726pt too wide) in paragraph at lines 19--21
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
-le[][][]from[][][][]C[][][][]Polyhedron[][] ([][]ppl[][][][]Octagonal[][][][]Sh
-ape[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[
-]
-
-Overfull \hbox (6.15236pt too wide) in paragraph at lines 25--27
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
-le[][][]from[][][][]Rational[][][][]Box[][] ([][]ppl[][][][]Octagonal[][][][]Sh
-ape[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[
-]
-
-Overfull \hbox (19.41191pt too wide) in paragraph at lines 31--33
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
-le[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][] ([][]ppl[][]
-[][]Octagonal[][][][]Shape[][][]double[]
-
-Overfull \hbox (19.97197pt too wide) in paragraph at lines 33--35
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
-le[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][] ([][]ppl[][]
-[][]Octagonal[][][][]Shape[][][]double[]
-
-Overfull \hbox (1.70268pt too wide) in paragraph at lines 35--37
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
-le[][][]from[][][][]Double[][][][]Box[][] ([][]ppl[][][][]Octagonal[][][][]Shap
-e[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph, [][]ppl[]
-
-Overfull \hbox (0.96109pt too wide) in paragraph at lines 37--39
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
-le[][][]from[][][][]B[]D[][][][]Shape[][][]double[][] ([][]ppl[][][][]Octagonal
-[][][][]Shape[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph
-,
-
-Overfull \hbox (6.37234pt too wide) in paragraph at lines 39--41
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
-le[][][]from[][][][]Octagonal[][][][]Shape[][][]double[][] ([][]ppl[][][][]Octa
-gonal[][][][]Shape[][][]double[]
-
-Overfull \hbox (1.80223pt too wide) in paragraph at lines 41--43
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
-le[][][]from[][][][]C[][][][]Polyhedron[][][]with[][][]complexity[][] ([][]ppl[
-][][][]Octagonal[][][][]Shape[]
-
-Overfull \hbox (16.24217pt too wide) in paragraph at lines 43--45
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
-le[][][]from[][][][]N[]N[]C[][][][]Polyhedron[][][]with[][][]complexity[][] ([]
-[]ppl[][][][]Octagonal[][][][]Shape[]
-[175
 Overfull \hbox (11.6138pt too wide) in paragraph at lines 5031--5033
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]generalize
 d[][][]affine[][][]preimage(+[]Handle, +[]P[]P[]L[][][][]Var,
@@ -21225,7 +21319,42 @@
 Overfull \hbox (30.19531pt too wide) in paragraph at lines 5062--5064
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]simplify[]
 [][]using[][][]context[][][]assign(+[]Handle[][][]1, +[]Handle[]
-[138]]
+[138]
+Overfull \hbox (3.37245pt too wide) in paragraph at lines 103--105
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]b
+ounds[][][]from[][][]below[][] ([][]ppl[][][]const[][][][]Octagonal[][][][]Shap
+e[][][]double[][][]t[][] ph, [][]ppl[]
+
+Overfull \hbox (8.63188pt too wide) in paragraph at lines 109--111
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]m
+aximize[][][]with[][][]point[][] ([][]ppl[][][]const[][][][]Octagonal[][][][]Sh
+ape[][][]double[][][]t[][] ph, [][]ppl[]
+
+Overfull \hbox (6.97183pt too wide) in paragraph at lines 111--113
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]m
+inimize[][][]with[][][]point[][] ([][]ppl[][][]const[][][][]Octagonal[][][][]Sh
+ape[][][]double[][][]t[][] ph, [][]ppl[]
+
+Overfull \hbox (17.18202pt too wide) in paragraph at lines 121--123
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]e
+quals[][][][]Octagonal[][][][]Shape[][][]double[][] ([][]ppl[][][]const[][][][]
+Octagonal[][][][]Shape[][][]double[]
+
+Overfull \hbox (26.40169pt too wide) in paragraph at lines 125--127
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]a
+dd[][][]constraint[][] ([][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]
+t[][] ph, [][]ppl[][][]const[][][][]Constraint[]
+
+Overfull \hbox (30.29158pt too wide) in paragraph at lines 129--131
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]a
+dd[][][]constraints[][] ([][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][
+]t[][] ph, [][]ppl[][][]const[][][][]Constraint[]
+
+Overfull \hbox (8.17241pt too wide) in paragraph at lines 151--153
+[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]u
+pper[][][]bound[][][]assign[][][]if[][][]exact[][] ([][]ppl[][][][]Octagonal[][
+][][]Shape[][][]double[][][]t[][] x, [][]ppl[]
+[177]
 Overfull \hbox (20.5953pt too wide) in paragraph at lines 5065--5067
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]linear[][]
 []partition(+[]Handle[][][]1, +[]Handle[][][]2, -[]Handle[]
@@ -21277,134 +21406,7 @@
 Overfull \hbox (0.19531pt too wide) in paragraph at lines 5127--5129
 []\OT1/pcr/m/n/10 ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]fold[][][]
 space[][][]dimensions(+[]Handle, +[]List[][][]of[][][][]P[]P[]L[]
-) (./PI_Compilation.tex [140]) (./PI_SD_Features.tex [141] [142
-Overfull \hbox (3.17188pt too wide) in paragraph at lines 49--51
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
-le[][][]from[][][][]B[]D[][][][]Shape[][][]mpz[][][]class[][][]with[][][]comple
-xity[][] ([][]ppl[][][][]Octagonal[]
-
-Overfull \hbox (3.73193pt too wide) in paragraph at lines 51--53
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
-le[][][]from[][][][]B[]D[][][][]Shape[][][]mpq[][][]class[][][]with[][][]comple
-xity[][] ([][]ppl[][][][]Octagonal[]
-
-Overfull \hbox (30.38156pt too wide) in paragraph at lines 53--55
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
-le[][][]from[][][][]Octagonal[][][][]Shape[][][]mpz[][][]class[][][]with[][][]c
-omplexity[][] ([][]ppl[][][][]Octagonal[]
-
-Overfull \hbox (30.94162pt too wide) in paragraph at lines 55--57
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
-le[][][]from[][][][]Octagonal[][][][]Shape[][][]mpq[][][]class[][][]with[][][]c
-omplexity[][] ([][]ppl[][][][]Octagonal[]
-
-Overfull \hbox (18.17213pt too wide) in paragraph at lines 59--61
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
-le[][][]from[][][][]B[]D[][][][]Shape[][][]double[][][]with[][][]complexity[][]
- ([][]ppl[][][][]Octagonal[][][][]Shape[]
-
-Overfull \hbox (17.342pt too wide) in paragraph at lines 61--63
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
-le[][][]from[][][][]Octagonal[][][][]Shape[][][]double[][][]with[][][]complexit
-y[][] ([][]ppl[][][][]Octagonal[]
-
-Overfull \hbox (2.93048pt too wide) in paragraph at lines 63--65
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
-le[][][]from[][][][]Constraint[][][][]System[][] ([][]ppl[][][][]Octagonal[][][
-][]Shape[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph,
-
-Overfull \hbox (9.5808pt too wide) in paragraph at lines 65--67
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
-le[][][]from[][][][]Congruence[][][][]System[][] ([][]ppl[][][][]Octagonal[][][
-][]Shape[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph,
-
-Overfull \hbox (1.24069pt too wide) in paragraph at lines 67--69
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][]new[][][][]Octagonal[][][][]Shape[][][]doub
-le[][][]from[][][][]Generator[][][][]System[][] ([][]ppl[][][][]Octagonal[][][]
-[]Shape[][][]double[][][]t[][] $\OMS/cmsy/m/n/10 ^^C$\OT1/ptm/bc/n/10 pph,
-
-Overfull \hbox (7.51181pt too wide) in paragraph at lines 79--81
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]g
-et[][][]constraints[][] ([][]ppl[][][]const[][][][]Octagonal[][][][]Shape[][][]
-double[][][]t[][] ph, [][]ppl[][][]const[]
-
-Overfull \hbox (0.2519pt too wide) in paragraph at lines 85--87
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]g
-et[][][]minimized[][][]congruences[][] ([][]ppl[][][]const[][][][]Octagonal[][]
-[][]Shape[][][]double[]
-
-Overfull \hbox (2.76273pt too wide) in paragraph at lines 101--103
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]b
-ounds[][][]from[][][]above[][] ([][]ppl[][][]const[][][][]Octagonal[][][][]Shap
-e[][][]double[][][]t[][] ph, [][]ppl[]
-[176]
-Overfull \hbox (30.3312pt too wide) in paragraph at lines 86--87
-[]\OT1/ptm/m/n/10 Notice that, for dy-namic link-ing to work, you should have c
-on-fig-ured the li-brary with the \OT1/pcr/m/n/10 --enable-shared
-
-Overfull \hbox (2.20367pt too wide) in paragraph at lines 100--101
-\OT1/ptm/m/n/10 e.[]g., [][]\OT1/pcr/m/n/10 http[]://www.[]cs.[]unipr.[]it/pipe
-rmail/ppl-devel/2006-[]January/007780.[]html[][]\OT1/ptm/m/n/10 ). 
-)
-Overfull \hbox (0.40225pt too wide) in paragraph at lines 102--207
-[]\OT1/ptm/m/n/10 In or-der to dy-nam-i-cally load the li-brary from Y[]AP you 
-should sim-ply load \OT1/pcr/m/n/10 prefix/lib/ppl/ppl[]
-(./modules.tex) (./group__PPL__Prolog__interface.tex) [143]] [144] (./refman.ind
- [145]) (./refman.aux) )
-(see the transcript file for additional information){/usr/share/texlive/texmf-d
-ist/fonts/enc/dvips/base/8r.enc}</usr/share/texlive/texmf-dist/fonts/type1/publ
-ic/amsfonts/cm/cmmi10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/ams
-fonts/cm/cmmi7.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/c
-m/cmr10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr7.
-pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb></
-usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy7.pfb></usr/sha
-re/texlive/texmf-dist/fonts/type1/public/amsfonts/symbols/msbm10.pfb></usr/shar
-e/texlive/texmf-dist/fonts/type1/urw/courier/ucrb8a.pfb></usr/share/texlive/tex
-mf-dist/fonts/type1/urw/courier/ucrr8a.pfb></usr/share/texlive/texmf-dist/fonts
-/type1/urw/courier/ucrro8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/h
-elvetic/uhvr8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmb8a.
-pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmr8a.pfb></usr/share
-/texlive/texmf-dist/fonts/type1/urw/times/utmri8a.pfb>
-Output written on refman.pdf (151 pages, 759360 bytes).
-Transcript written on refman.log.
-make[3]: Leaving directory '/build/ppl-1.2/doc/user-configured-prolog-interface.latex-dir'
-
-Overfull \hbox (3.37245pt too wide) in paragraph at lines 103--105
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]b
-ounds[][][]from[][][]below[][] ([][]ppl[][][]const[][][][]Octagonal[][][][]Shap
-e[][][]double[][][]t[][] ph, [][]ppl[]
-
-Overfull \hbox (8.63188pt too wide) in paragraph at lines 109--111
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]m
-aximize[][][]with[][][]point[][] ([][]ppl[][][]const[][][][]Octagonal[][][][]Sh
-ape[][][]double[][][]t[][] ph, [][]ppl[]
-
-Overfull \hbox (6.97183pt too wide) in paragraph at lines 111--113
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]m
-inimize[][][]with[][][]point[][] ([][]ppl[][][]const[][][][]Octagonal[][][][]Sh
-ape[][][]double[][][]t[][] ph, [][]ppl[]
-
-Overfull \hbox (17.18202pt too wide) in paragraph at lines 121--123
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]e
-quals[][][][]Octagonal[][][][]Shape[][][]double[][] ([][]ppl[][][]const[][][][]
-Octagonal[][][][]Shape[][][]double[]
-
-Overfull \hbox (26.40169pt too wide) in paragraph at lines 125--127
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]a
-dd[][][]constraint[][] ([][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]
-t[][] ph, [][]ppl[][][]const[][][][]Constraint[]
-
-Overfull \hbox (30.29158pt too wide) in paragraph at lines 129--131
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]a
-dd[][][]constraints[][] ([][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][
-]t[][] ph, [][]ppl[][][]const[][][][]Constraint[]
-
-Overfull \hbox (8.17241pt too wide) in paragraph at lines 151--153
-[]\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]u
-pper[][][]bound[][][]assign[][][]if[][][]exact[][] ([][]ppl[][][][]Octagonal[][
-][][]Shape[][][]double[][][]t[][] x, [][]ppl[]
-[177pdftops ppl-user-configured-prolog-interface-1.2.pdf ppl-user-configured-prolog-interface-1.2.ps
-]
+) (./PI_Compilation.tex [140]) (./PI_SD_Features.tex [141]
 Overfull \hbox (14.04181pt too wide) in paragraph at lines 153--155
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]s
 implify[][][]using[][][]context[][][]assign[][] ([][]ppl[][][][]Octagonal[][][]
@@ -21479,7 +21481,34 @@
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][]t
 otal[][][]memory[][][]in[][][]bytes[][] ([][]ppl[][][]const[][][][]Octagonal[][
 ][][]Shape[][][]double[][][]t[][] ps, size[]
-[178]
+[178 [142]
+Overfull \hbox (30.3312pt too wide) in paragraph at lines 86--87
+[]\OT1/ptm/m/n/10 Notice that, for dy-namic link-ing to work, you should have c
+on-fig-ured the li-brary with the \OT1/pcr/m/n/10 --enable-shared
+
+Overfull \hbox (2.20367pt too wide) in paragraph at lines 100--101
+\OT1/ptm/m/n/10 e.[]g., [][]\OT1/pcr/m/n/10 http[]://www.[]cs.[]unipr.[]it/pipe
+rmail/ppl-devel/2006-[]January/007780.[]html[][]\OT1/ptm/m/n/10 ). 
+)
+Overfull \hbox (0.40225pt too wide) in paragraph at lines 102--207
+[]\OT1/ptm/m/n/10 In or-der to dy-nam-i-cally load the li-brary from Y[]AP you 
+should sim-ply load \OT1/pcr/m/n/10 prefix/lib/ppl/ppl[]
+(./modules.tex]) (./group__PPL__Prolog__interface.tex) [143] [144] (./refman.ind
+ [145]) (./refman.aux) )
+(see the transcript file for additional information){/usr/share/texlive/texmf-d
+ist/fonts/enc/dvips/base/8r.enc}</usr/share/texlive/texmf-dist/fonts/type1/publ
+ic/amsfonts/cm/cmmi10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/ams
+fonts/cm/cmmi7.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/c
+m/cmr10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr7.
+pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb></
+usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy7.pfb></usr/sha
+re/texlive/texmf-dist/fonts/type1/public/amsfonts/symbols/msbm10.pfb></usr/shar
+e/texlive/texmf-dist/fonts/type1/urw/courier/ucrb8a.pfb></usr/share/texlive/tex
+mf-dist/fonts/type1/urw/courier/ucrr8a.pfb></usr/share/texlive/texmf-dist/fonts
+/type1/urw/courier/ucrro8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/h
+elvetic/uhvr8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmb8a.
+pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/times/utmr8a.pfb></usr/share
+/texlive/texmf-dist/fonts/type1/urw/times/utmri8a.pfb>
 Overfull \hbox (2.2523pt too wide) in paragraph at lines 201--203
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Octagonal[][][][]Shape[][][]double[][][][
 ]B[]H[]M[]Z05[][][]widening[][][]assign[][] ([][]ppl[][][][]Octagonal[][][][]Sh
@@ -21554,7 +21583,12 @@
 []\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions
 [][][][]M[]S[][][][]Octagonal[][][][]Shape[][][]double[][] ([][]ppl[][][]const[
 ][][][]Octagonal[][][][]Shape[][][]double[]
-[179]
+[179
+Output written on refman.pdf (151 pages, 758930 bytes).
+Transcript written on refman.log.
+make[3]: Leaving directory '/build/ppl-1.2/doc/user-configured-prolog-interface.latex-dir'
+pdftops ppl-user-configured-prolog-interface-1.2.pdf ppl-user-configured-prolog-interface-1.2.ps
+]
 Overfull \hbox (14.99185pt too wide) in paragraph at lines 247--249
 []\OT1/ptm/bc/n/10 int [][]ppl[][][]all[][][]affine[][][]ranking[][][]functions
 [][][][]P[]R[][][][]Octagonal[][][][]Shape[][][]double[][] ([][]ppl[][][]const[
@@ -26465,8 +26499,7 @@
  []\OT1/ptm/b/n/10 ppl[][][][]Polyhedron[][][]limited[][][][]B[]H[]R[]Z03[][][]
 extrapolation[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][
 ][]Polyhedron[][][]limited[]
-[311]gzip -n --best --force ppl-user-configured-prolog-interface-1.2.ps
-
+[311]
 Overfull \hbox (3.15262pt too wide) in paragraph at lines 1676--1677
  []\OT1/ptm/b/n/10 ppl[][][][]Polyhedron[][][]limited[][][][]H79[][][]extrapola
 tion[][][]assign[][][]with[][][]tokens()[] \OT1/pcr/m/n/8 int ppl[][][][]Polyhe
@@ -26933,7 +26966,8 @@
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Rational[][][][]Box[][][]generalized[][][
 ]affine[][][]image[][] ([][]ppl[][][][]Rational[][][][]Box[][][]t[][] ph, [][]p
 pl[][][]dimension[][][]type[][] var, enum
-[324]
+[324]gzip -n --best --force ppl-user-configured-prolog-interface-1.2.ps
+
 Overfull \hbox (5.86143pt too wide) in paragraph at lines 179--181
 []\OT1/ptm/bc/n/10 int [][]ppl[][][][]Rational[][][][]Box[][][]generalized[][][
 ]affine[][][]preimage[][][]lhs[][][]rhs[][] ([][]ppl[][][][]Rational[][][][]Box
@@ -27315,7 +27349,7 @@
 ist/fonts/type1/urw/times/utmbi8a.pfb></usr/share/texlive/texmf-dist/fonts/type
 1/urw/times/utmr8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/times/utm
 ri8a.pfb>
-Output written on refman.pdf (348 pages, 2086869 bytes).
+Output written on refman.pdf (348 pages, 2086422 bytes).
 Transcript written on refman.log.
 makeindex refman.idx
 This is makeindex, version 2.15 [TeX Live 2019/dev] (kpathsea + Thai support).
@@ -47404,7 +47438,7 @@
 ist/fonts/type1/urw/times/utmbi8a.pfb></usr/share/texlive/texmf-dist/fonts/type
 1/urw/times/utmr8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/times/utm
 ri8a.pfb>
-Output written on refman.pdf (414 pages, 2580119 bytes).
+Output written on refman.pdf (414 pages, 2579698 bytes).
 Transcript written on refman.log.
 latex_count=8 ; \
 while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $latex_count -gt 0 ] ;\
@@ -67480,7 +67514,7 @@
 ist/fonts/type1/urw/times/utmbi8a.pfb></usr/share/texlive/texmf-dist/fonts/type
 1/urw/times/utmr8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/times/utm
 ri8a.pfb>
-Output written on refman.pdf (414 pages, 2579908 bytes).
+Output written on refman.pdf (414 pages, 2579480 bytes).
 Transcript written on refman.log.
 makeindex refman.idx
 This is makeindex, version 2.15 [TeX Live 2019/dev] (kpathsea + Thai support).
@@ -87555,29 +87589,29 @@
 ist/fonts/type1/urw/times/utmbi8a.pfb></usr/share/texlive/texmf-dist/fonts/type
 1/urw/times/utmr8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/times/utm
 ri8a.pfb>
-Output written on refman.pdf (414 pages, 2579908 bytes).
+Output written on refman.pdf (414 pages, 2579480 bytes).
 Transcript written on refman.log.
 make[3]: Leaving directory '/build/ppl-1.2/doc/user-configured-c-interface.latex-dir'
 pdftops ppl-user-configured-c-interface-1.2.pdf ppl-user-configured-c-interface-1.2.ps
 gzip -n --best --force ppl-user-configured-c-interface-1.2.ps
 rm -rf ppl-user-configured-c-interface-1.2-html
 rm -rf ppl-user-configured-prolog-interface-1.2-html
-/bin/sed -e 's/<PPL_SED_CONFIGURED_MANUAL>/PPL_DOXYGEN_CONFIGURED_MANUAL/' -e 's/<PPL_SED_LANGUAGE_NAME>/Configured Prolog/' -e 's/<PPL_SED_INTERFACE_NAME>/configured-prolog-interface/' -e 's/<PPL_SED_USEPACKAGE_OCAMLDOC>//' \
-    ./user-language-interface.tex \
-    > user-configured-prolog-interface.tex
 /bin/sed -e 's/<PPL_SED_CONFIGURED_MANUAL>/PPL_DOXYGEN_CONFIGURED_MANUAL/' -e 's/<PPL_SED_LANGUAGE_NAME>/Configured C/' -e 's/<PPL_SED_INTERFACE_NAME>/configured-c-interface/' -e 's/<PPL_SED_USEPACKAGE_OCAMLDOC>//' \
     ./user-language-interface.tex \
     > user-configured-c-interface.tex
-/bin/sed -e 's/<PPL_SED_CONFIGURED_MANUAL>/PPL_DOXYGEN_CONFIGURED_MANUAL/' -e 's/<PPL_SED_LANGUAGE_NAME>/Configured Prolog/' -e 's/<PPL_SED_INTERFACE_NAME>/configured-prolog-interface/' -e 's/<PPL_SED_USEPACKAGE_OCAMLDOC>//' -f ./interfaces-html.sed -e 's|<PPL_SED_TAGFILES>|ppl-user-1.2-html.tag=../ppl-user-1.2-html|' \
-    -e 's|<PPL_SED_INPUT>|'"./gpl.dox ./fdl.dox ./../interfaces/Prolog/Prolog_configured_interface.dox ./../interfaces/Prolog/Prolog_interface_sysindep.dox ../interfaces/Prolog/Prolog_configured_domains.dox ./../interfaces/Prolog/Prolog_interface_compilation.dox ./../interfaces/Prolog/Prolog_interface_sysdep.dox"'|' \
-    user-language-interface.doxyconf \
-    > Doxyfile.user-configured-prolog-interface-html
+/bin/sed -e 's/<PPL_SED_CONFIGURED_MANUAL>/PPL_DOXYGEN_CONFIGURED_MANUAL/' -e 's/<PPL_SED_LANGUAGE_NAME>/Configured Prolog/' -e 's/<PPL_SED_INTERFACE_NAME>/configured-prolog-interface/' -e 's/<PPL_SED_USEPACKAGE_OCAMLDOC>//' \
+    ./user-language-interface.tex \
+    > user-configured-prolog-interface.tex
 /bin/sed -e 's/<PPL_SED_CONFIGURED_MANUAL>/PPL_DOXYGEN_CONFIGURED_MANUAL/' -e 's/<PPL_SED_LANGUAGE_NAME>/Configured C/' -e 's/<PPL_SED_INTERFACE_NAME>/configured-c-interface/' -e 's/<PPL_SED_USEPACKAGE_OCAMLDOC>//' -f ./interfaces-html.sed -e 's|<PPL_SED_TAGFILES>|ppl-user-1.2-html.tag=../ppl-user-1.2-html|' \
     -e 's|<PPL_SED_INPUT>|'"./gpl.dox ./fdl.dox ./../interfaces/C/C_interface.dox ../interfaces/C/ppl_c.h"'|' \
     user-language-interface.doxyconf \
     > Doxyfile.user-configured-c-interface-html
-TEXINPUTS=/build/ppl-1.2/doc: texmf_casefold_search=0 doxygen Doxyfile.user-configured-prolog-interface-html
+/bin/sed -e 's/<PPL_SED_CONFIGURED_MANUAL>/PPL_DOXYGEN_CONFIGURED_MANUAL/' -e 's/<PPL_SED_LANGUAGE_NAME>/Configured Prolog/' -e 's/<PPL_SED_INTERFACE_NAME>/configured-prolog-interface/' -e 's/<PPL_SED_USEPACKAGE_OCAMLDOC>//' -f ./interfaces-html.sed -e 's|<PPL_SED_TAGFILES>|ppl-user-1.2-html.tag=../ppl-user-1.2-html|' \
+    -e 's|<PPL_SED_INPUT>|'"./gpl.dox ./fdl.dox ./../interfaces/Prolog/Prolog_configured_interface.dox ./../interfaces/Prolog/Prolog_interface_sysindep.dox ../interfaces/Prolog/Prolog_configured_domains.dox ./../interfaces/Prolog/Prolog_interface_compilation.dox ./../interfaces/Prolog/Prolog_interface_sysdep.dox"'|' \
+    user-language-interface.doxyconf \
+    > Doxyfile.user-configured-prolog-interface-html
 TEXINPUTS=/build/ppl-1.2/doc: texmf_casefold_search=0 doxygen Doxyfile.user-configured-c-interface-html
+TEXINPUTS=/build/ppl-1.2/doc: texmf_casefold_search=0 doxygen Doxyfile.user-configured-prolog-interface-html
 warning: doxygen no longer ships with the FreeSans font.
 You may want to clear or change DOT_FONTNAME.
 Otherwise you run the risk that the wrong font is being used for dot generated graphs.
@@ -87611,7 +87645,7 @@
 make[2]: Leaving directory '/build/ppl-1.2/doc'
 make[1]: Leaving directory '/build/ppl-1.2'
    dh_auto_build -Nlibppl-doc
-	make -j16
+	make -j15
 make[1]: Entering directory '/build/ppl-1.2'
 make  all-recursive
 make[2]: Entering directory '/build/ppl-1.2'
@@ -87757,7 +87791,7 @@
 # FIXME: there are test failures with swi-prolog 7.2
 # for now just ignore these.
 dh_auto_test  || true
-	make -j16 check VERBOSE=1
+	make -j15 check VERBOSE=1
 make[2]: Entering directory '/build/ppl-1.2'
 Making check in .
 make[3]: Entering directory '/build/ppl-1.2'
@@ -87855,6 +87889,52 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
+                 from bdshape1.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from bdshape1.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/Linear_System_templates.hh:30,
+                 from ../../src/Linear_System_defs.hh:580,
+                 from ../../src/Constraint_System_defs.hh:29,
+                 from ../../src/Box_inlines.hh:28,
+                 from ../../src/Box_defs.hh:2285,
+                 from ../../src/Linear_Form_templates.hh:29,
+                 from ../../src/ppl_include_files.hh:9,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from bdshape1.cc:24:
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
+../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
                  from octagonalshape2.cc:25:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
@@ -87877,7 +87957,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from C_Expr.cc:25:
+                 from octagonalshape1.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -87889,7 +87969,29 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from C_Expr.cc:25:
+                 from octagonalshape1.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from linearform1.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from linearform1.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -87921,7 +88023,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from polyhedron1.cc:24:
+                 from C_Expr.cc:25:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -87933,7 +88035,51 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from polyhedron1.cc:24:
+                 from C_Expr.cc:25:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from linearize.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from linearize.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from digitalfilters1.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from digitalfilters1.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -87965,7 +88111,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from linearform1.cc:24:
+                 from polyhedron1.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -87977,7 +88123,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from linearform1.cc:24:
+                 from polyhedron1.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -88014,7 +88160,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from C_Expr.cc:25:
+                 from octagonalshape1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -88029,28 +88175,6 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from digitalfilters1.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from digitalfilters1.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -88065,16 +88189,6 @@
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
                                                           ^
-../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -88084,7 +88198,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from polyhedron1.cc:24:
+                 from C_Expr.cc:25:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -88092,6 +88206,13 @@
 ../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
 ../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -88099,28 +88220,9 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from bdshape1.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from bdshape1.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
+../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -88130,7 +88232,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from polyhedron2.cc:26:
+                 from linearform1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -88154,7 +88256,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from linearform1.cc:24:
+                 from linearize.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -88169,50 +88271,6 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from octagonalshape1.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from linearize.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from linearize.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from octagonalshape1.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -88246,7 +88304,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from bdshape1.cc:24:
+                 from polyhedron2.cc:26:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -88270,21 +88328,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from linearize.cc:24:
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
-../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-In file included from ../../src/Linear_System_templates.hh:30,
-                 from ../../src/Linear_System_defs.hh:580,
-                 from ../../src/Constraint_System_defs.hh:29,
-                 from ../../src/Box_inlines.hh:28,
-                 from ../../src/Box_defs.hh:2285,
-                 from ../../src/Linear_Form_templates.hh:29,
-                 from ../../src/ppl_include_files.hh:9,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from octagonalshape1.cc:24:
+                 from polyhedron1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -88292,13 +88336,6 @@
 ../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
 ../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -88306,9 +88343,20 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
+bdshape1.cc: In function 'bool {anonymous}::test01()':
+bdshape1.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch(std::invalid_argument e) {
+                               ^
+bdshape1.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch(std::invalid_argument e) {
+                               ^
+octagonalshape1.cc: In function 'bool {anonymous}::test01()':
+octagonalshape1.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch(std::invalid_argument e) {
+                               ^
+octagonalshape1.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch(std::invalid_argument e) {
+                               ^
 octagonalshape2.cc: In function 'bool {anonymous}::test01()':
 octagonalshape2.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
    catch(std::invalid_argument e) {
@@ -88349,39 +88397,25 @@
 linearform1.cc:287:27: warning: catching polymorphic type 'class std::length_error' by value [-Wcatch-value=]
    catch(std::length_error e) {
                            ^
-bdshape1.cc: In function 'bool {anonymous}::test01()':
-bdshape1.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch(std::invalid_argument e) {
-                               ^
-bdshape1.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch(std::invalid_argument e) {
-                               ^
-octagonalshape1.cc: In function 'bool {anonymous}::test01()':
-octagonalshape1.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch(std::invalid_argument e) {
-                               ^
-octagonalshape1.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch(std::invalid_argument e) {
-                               ^
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o C_Expr C_Expr.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o C_Expr C_Expr.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/C_Expr C_Expr.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearform1 linearform1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/linearform1 linearform1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape1 bdshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron1 polyhedron1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape1 bdshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/bdshape1 bdshape1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearize linearize.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearform1 linearform1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/linearize linearize.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/linearform1 linearform1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron1 polyhedron1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/polyhedron1 polyhedron1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape2 octagonalshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape1 octagonalshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/octagonalshape1 octagonalshape1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape2 octagonalshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/octagonalshape2 octagonalshape2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearize linearize.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/linearize linearize.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron2 polyhedron2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape2 bdshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape1 octagonalshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron2 polyhedron2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/polyhedron2 polyhedron2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape2 bdshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/bdshape2 bdshape2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/octagonalshape1 octagonalshape1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o digitalfilters1 digitalfilters1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o digitalfilters1 digitalfilters1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/digitalfilters1 digitalfilters1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
 make[5]: Leaving directory '/build/ppl-1.2/tests/Concrete_Expression'
 make  check-TESTS
@@ -88422,11 +88456,11 @@
 make[7]: Leaving directory '/build/ppl-1.2/tests/Concrete_Expression'
 make[6]: Leaving directory '/build/ppl-1.2/tests/Concrete_Expression'
 make[6]: Entering directory '/build/ppl-1.2/tests/Concrete_Expression'
+ rm -f C_Expr linearform1 linearize digitalfilters1 bdshape1 bdshape2 octagonalshape1 octagonalshape2 polyhedron1 polyhedron2
 test -z "run_tests.stamp" || rm -f run_tests.stamp
 rm -rf .libs _libs
 rm -f *.o
 rm -f *.lo
- rm -f C_Expr linearform1 linearize digitalfilters1 bdshape1 bdshape2 octagonalshape1 octagonalshape2 polyhedron1 polyhedron2
 make[6]: Leaving directory '/build/ppl-1.2/tests/Concrete_Expression'
 ****************************  float/IEEE754_DOUBLE  ****************************
 make[6]: Entering directory '/build/ppl-1.2/tests/Concrete_Expression'
@@ -88450,7 +88484,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from C_Expr.cc:25:
+                 from octagonalshape2.cc:25:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -88462,7 +88496,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from C_Expr.cc:25:
+                 from octagonalshape2.cc:25:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -88472,7 +88506,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from polyhedron1.cc:24:
+                 from C_Expr.cc:25:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -88484,7 +88518,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from polyhedron1.cc:24:
+                 from C_Expr.cc:25:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -88494,7 +88528,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from bdshape1.cc:24:
+                 from bdshape2.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -88506,7 +88540,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from bdshape1.cc:24:
+                 from bdshape2.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -88516,7 +88550,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from digitalfilters1.cc:24:
+                 from octagonalshape1.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -88528,7 +88562,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from digitalfilters1.cc:24:
+                 from octagonalshape1.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -88538,7 +88572,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from polyhedron2.cc:26:
+                 from digitalfilters1.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -88550,7 +88584,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from polyhedron2.cc:26:
+                 from digitalfilters1.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -88578,6 +88612,50 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from linearform1.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from linearform1.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from polyhedron1.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from polyhedron1.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -88587,7 +88665,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from polyhedron1.cc:24:
+                 from octagonalshape2.cc:25:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -88630,7 +88708,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from linearform1.cc:24:
+                 from bdshape1.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -88642,7 +88720,29 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from linearform1.cc:24:
+                 from bdshape1.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from polyhedron2.cc:26:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from polyhedron2.cc:26:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -88655,7 +88755,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from digitalfilters1.cc:24:
+                 from linearform1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -88679,7 +88779,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from bdshape1.cc:24:
+                 from octagonalshape1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -88703,7 +88803,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from polyhedron2.cc:26:
+                 from bdshape2.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -88718,72 +88818,6 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from bdshape2.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from bdshape2.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from octagonalshape2.cc:25:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from octagonalshape1.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from octagonalshape1.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from octagonalshape2.cc:25:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -88793,7 +88827,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from linearform1.cc:24:
+                 from digitalfilters1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -88817,7 +88851,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from linearize.cc:24:
+                 from polyhedron1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -88841,7 +88875,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from bdshape2.cc:24:
+                 from linearize.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -88865,11 +88899,21 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from octagonalshape2.cc:25:
+                 from bdshape1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
                                                           ^
+../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -88879,7 +88923,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from octagonalshape1.cc:24:
+                 from polyhedron2.cc:26:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -88887,13 +88931,6 @@
 ../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
 ../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -88901,23 +88938,6 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-polyhedron2.cc: In function 'bool {anonymous}::test01()':
-polyhedron2.cc:41:15: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch (std::invalid_argument) {
-               ^~~~~~~~~~~~~~~~
-polyhedron2.cc:47:17: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-     catch (std::invalid_argument) {
-                 ^~~~~~~~~~~~~~~~
-bdshape1.cc: In function 'bool {anonymous}::test01()':
-bdshape1.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch(std::invalid_argument e) {
-                               ^
-bdshape1.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch(std::invalid_argument e) {
-                               ^
 linearform1.cc: In function 'bool {anonymous}::test08()':
 linearform1.cc:233:27: warning: catching polymorphic type 'class std::length_error' by value [-Wcatch-value=]
    catch(std::length_error e) {
@@ -88937,6 +88957,13 @@
 linearform1.cc:287:27: warning: catching polymorphic type 'class std::length_error' by value [-Wcatch-value=]
    catch(std::length_error e) {
                            ^
+octagonalshape2.cc: In function 'bool {anonymous}::test01()':
+octagonalshape2.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch(std::invalid_argument e) {
+                               ^
+octagonalshape2.cc:49:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch(std::invalid_argument e) {
+                               ^
 bdshape2.cc: In function 'bool {anonymous}::test01()':
 bdshape2.cc:41:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
    catch(std::invalid_argument e) {
@@ -88944,39 +88971,46 @@
 bdshape2.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
    catch(std::invalid_argument e){
                                ^
-octagonalshape1.cc: In function 'bool {anonymous}::test01()':
-octagonalshape1.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+bdshape1.cc: In function 'bool {anonymous}::test01()':
+bdshape1.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
    catch(std::invalid_argument e) {
                                ^
-octagonalshape2.cc: In function 'bool {anonymous}::test01()':
-octagonalshape2.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+bdshape1.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
    catch(std::invalid_argument e) {
                                ^
-octagonalshape2.cc:49:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+octagonalshape1.cc: In function 'bool {anonymous}::test01()':
+octagonalshape1.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
    catch(std::invalid_argument e) {
                                ^
 octagonalshape1.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
    catch(std::invalid_argument e) {
                                ^
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o C_Expr C_Expr.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+polyhedron2.cc: In function 'bool {anonymous}::test01()':
+polyhedron2.cc:41:15: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch (std::invalid_argument) {
+               ^~~~~~~~~~~~~~~~
+polyhedron2.cc:47:17: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+     catch (std::invalid_argument) {
+                 ^~~~~~~~~~~~~~~~
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o C_Expr C_Expr.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/C_Expr C_Expr.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron1 polyhedron1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearform1 linearform1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/polyhedron1 polyhedron1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearform1 linearform1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/linearform1 linearform1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape1 bdshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape1 bdshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/bdshape1 bdshape1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearize linearize.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearize linearize.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/linearize linearize.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron2 polyhedron2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/polyhedron2 polyhedron2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape1 octagonalshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape1 octagonalshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/octagonalshape1 octagonalshape1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape2 octagonalshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape2 bdshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/octagonalshape2 octagonalshape2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron1 polyhedron1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/polyhedron1 polyhedron1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape2 bdshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/bdshape2 bdshape2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o digitalfilters1 digitalfilters1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape2 octagonalshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/octagonalshape2 octagonalshape2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron2 polyhedron2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/polyhedron2 polyhedron2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o digitalfilters1 digitalfilters1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/digitalfilters1 digitalfilters1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
 make[7]: Leaving directory '/build/ppl-1.2/tests/Concrete_Expression'
 make  check-TESTS
@@ -88998,10 +89032,10 @@
 make[6]: Leaving directory '/build/ppl-1.2/tests/Concrete_Expression'
 make[6]: Entering directory '/build/ppl-1.2/tests/Concrete_Expression'
 test -z "run_tests.stamp" || rm -f run_tests.stamp
+ rm -f C_Expr linearform1 linearize digitalfilters1 bdshape1 bdshape2 octagonalshape1 octagonalshape2 polyhedron1 polyhedron2
 rm -rf .libs _libs
 rm -f *.o
 rm -f *.lo
- rm -f C_Expr linearform1 linearize digitalfilters1 bdshape1 bdshape2 octagonalshape1 octagonalshape2 polyhedron1 polyhedron2
 make[6]: Leaving directory '/build/ppl-1.2/tests/Concrete_Expression'
 ****************************  float/IEEE754_QUAD  ****************************
 make[6]: Entering directory '/build/ppl-1.2/tests/Concrete_Expression'
@@ -89025,7 +89059,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from octagonalshape2.cc:25:
+                 from bdshape2.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -89037,10 +89071,34 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from octagonalshape2.cc:25:
+                 from bdshape2.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/Linear_System_templates.hh:30,
+                 from ../../src/Linear_System_defs.hh:580,
+                 from ../../src/Constraint_System_defs.hh:29,
+                 from ../../src/Box_inlines.hh:28,
+                 from ../../src/Box_defs.hh:2285,
+                 from ../../src/Linear_Form_templates.hh:29,
+                 from ../../src/ppl_include_files.hh:9,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from bdshape2.cc:24:
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
+../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
 In file included from ../../src/CO_Tree_defs.hh:1557,
                  from ../../src/Sparse_Row_defs.hh:29,
                  from ../../src/Linear_Expression_Impl_defs.hh:33,
@@ -89063,6 +89121,30 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/Linear_System_templates.hh:30,
+                 from ../../src/Linear_System_defs.hh:580,
+                 from ../../src/Constraint_System_defs.hh:29,
+                 from ../../src/Box_inlines.hh:28,
+                 from ../../src/Box_defs.hh:2285,
+                 from ../../src/Linear_Form_templates.hh:29,
+                 from ../../src/ppl_include_files.hh:9,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from linearize.cc:24:
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
+../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
 In file included from ../../src/CO_Tree_defs.hh:1557,
                  from ../../src/Sparse_Row_defs.hh:29,
                  from ../../src/Linear_Expression_Impl_defs.hh:33,
@@ -89091,7 +89173,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from octagonalshape1.cc:24:
+                 from C_Expr.cc:25:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -89103,7 +89185,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from octagonalshape1.cc:24:
+                 from C_Expr.cc:25:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -89135,6 +89217,52 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
+                 from polyhedron2.cc:26:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from polyhedron2.cc:26:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/Linear_System_templates.hh:30,
+                 from ../../src/Linear_System_defs.hh:580,
+                 from ../../src/Constraint_System_defs.hh:29,
+                 from ../../src/Box_inlines.hh:28,
+                 from ../../src/Box_defs.hh:2285,
+                 from ../../src/Linear_Form_templates.hh:29,
+                 from ../../src/ppl_include_files.hh:9,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from linearform1.cc:24:
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
+../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
                  from polyhedron1.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
@@ -89157,7 +89285,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from C_Expr.cc:25:
+                 from octagonalshape2.cc:25:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -89169,58 +89297,61 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from C_Expr.cc:25:
+                 from octagonalshape2.cc:25:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../../src/Linear_System_templates.hh:30,
-                 from ../../src/Linear_System_defs.hh:580,
-                 from ../../src/Constraint_System_defs.hh:29,
-                 from ../../src/Box_inlines.hh:28,
-                 from ../../src/Box_defs.hh:2285,
-                 from ../../src/Linear_Form_templates.hh:29,
-                 from ../../src/ppl_include_files.hh:9,
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from octagonalshape2.cc:25:
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
-../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-In file included from ../../src/Linear_System_templates.hh:30,
-                 from ../../src/Linear_System_defs.hh:580,
-                 from ../../src/Constraint_System_defs.hh:29,
-                 from ../../src/Box_inlines.hh:28,
-                 from ../../src/Box_defs.hh:2285,
-                 from ../../src/Linear_Form_templates.hh:29,
-                 from ../../src/ppl_include_files.hh:9,
+                 from digitalfilters1.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from linearize.cc:24:
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
-../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
+                 from digitalfilters1.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from octagonalshape1.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from octagonalshape1.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+bdshape2.cc: In function 'bool {anonymous}::test01()':
+bdshape2.cc:41:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch(std::invalid_argument e) {
+                               ^
+bdshape2.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch(std::invalid_argument e){
+                               ^
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -89230,7 +89361,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from linearform1.cc:24:
+                 from bdshape1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -89254,7 +89385,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from octagonalshape1.cc:24:
+                 from C_Expr.cc:25:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -89278,7 +89409,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from bdshape1.cc:24:
+                 from polyhedron2.cc:26:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -89293,28 +89424,6 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from digitalfilters1.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from digitalfilters1.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -89348,7 +89457,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from C_Expr.cc:25:
+                 from octagonalshape2.cc:25:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -89363,50 +89472,6 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from polyhedron2.cc:26:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from bdshape2.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from polyhedron2.cc:26:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from bdshape2.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -89440,21 +89505,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from polyhedron2.cc:26:
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
-../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-In file included from ../../src/Linear_System_templates.hh:30,
-                 from ../../src/Linear_System_defs.hh:580,
-                 from ../../src/Constraint_System_defs.hh:29,
-                 from ../../src/Box_inlines.hh:28,
-                 from ../../src/Box_defs.hh:2285,
-                 from ../../src/Linear_Form_templates.hh:29,
-                 from ../../src/ppl_include_files.hh:9,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from bdshape2.cc:24:
+                 from octagonalshape1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -89462,13 +89513,6 @@
 ../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
 ../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -89476,23 +89520,6 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-octagonalshape2.cc: In function 'bool {anonymous}::test01()':
-octagonalshape2.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch(std::invalid_argument e) {
-                               ^
-octagonalshape2.cc:49:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch(std::invalid_argument e) {
-                               ^
-octagonalshape1.cc: In function 'bool {anonymous}::test01()':
-octagonalshape1.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch(std::invalid_argument e) {
-                               ^
-octagonalshape1.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch(std::invalid_argument e) {
-                               ^
 linearform1.cc: In function 'bool {anonymous}::test08()':
 linearform1.cc:233:27: warning: catching polymorphic type 'class std::length_error' by value [-Wcatch-value=]
    catch(std::length_error e) {
@@ -89512,6 +89539,20 @@
 linearform1.cc:287:27: warning: catching polymorphic type 'class std::length_error' by value [-Wcatch-value=]
    catch(std::length_error e) {
                            ^
+polyhedron2.cc: In function 'bool {anonymous}::test01()':
+polyhedron2.cc:41:15: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch (std::invalid_argument) {
+               ^~~~~~~~~~~~~~~~
+polyhedron2.cc:47:17: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+     catch (std::invalid_argument) {
+                 ^~~~~~~~~~~~~~~~
+octagonalshape2.cc: In function 'bool {anonymous}::test01()':
+octagonalshape2.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch(std::invalid_argument e) {
+                               ^
+octagonalshape2.cc:49:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch(std::invalid_argument e) {
+                               ^
 bdshape1.cc: In function 'bool {anonymous}::test01()':
 bdshape1.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
    catch(std::invalid_argument e) {
@@ -89519,39 +89560,32 @@
 bdshape1.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
    catch(std::invalid_argument e) {
                                ^
-bdshape2.cc: In function 'bool {anonymous}::test01()':
-bdshape2.cc:41:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+octagonalshape1.cc: In function 'bool {anonymous}::test01()':
+octagonalshape1.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
    catch(std::invalid_argument e) {
                                ^
-bdshape2.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch(std::invalid_argument e){
+octagonalshape1.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch(std::invalid_argument e) {
                                ^
-polyhedron2.cc: In function 'bool {anonymous}::test01()':
-polyhedron2.cc:41:15: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch (std::invalid_argument) {
-               ^~~~~~~~~~~~~~~~
-polyhedron2.cc:47:17: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-     catch (std::invalid_argument) {
-                 ^~~~~~~~~~~~~~~~
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o C_Expr C_Expr.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o C_Expr C_Expr.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/C_Expr C_Expr.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearform1 linearform1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearize linearize.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/linearform1 linearform1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearize linearize.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/linearize linearize.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron1 polyhedron1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape1 bdshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron1 polyhedron1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearform1 linearform1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/polyhedron1 polyhedron1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/linearform1 linearform1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron2 polyhedron2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape1 bdshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/polyhedron2 polyhedron2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape1 octagonalshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/bdshape1 bdshape1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape2 octagonalshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/octagonalshape2 octagonalshape2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape1 octagonalshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/octagonalshape1 octagonalshape1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron2 polyhedron2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/polyhedron2 polyhedron2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape2 bdshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape2 octagonalshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape2 bdshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/octagonalshape2 octagonalshape2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/bdshape2 bdshape2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o digitalfilters1 digitalfilters1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o digitalfilters1 digitalfilters1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/digitalfilters1 digitalfilters1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
 make[7]: Leaving directory '/build/ppl-1.2/tests/Concrete_Expression'
 make  check-TESTS
@@ -89572,11 +89606,11 @@
 make[7]: Leaving directory '/build/ppl-1.2/tests/Concrete_Expression'
 make[6]: Leaving directory '/build/ppl-1.2/tests/Concrete_Expression'
 make[6]: Entering directory '/build/ppl-1.2/tests/Concrete_Expression'
+ rm -f C_Expr linearform1 linearize digitalfilters1 bdshape1 bdshape2 octagonalshape1 octagonalshape2 polyhedron1 polyhedron2
 test -z "run_tests.stamp" || rm -f run_tests.stamp
 rm -rf .libs _libs
 rm -f *.o
 rm -f *.lo
- rm -f C_Expr linearform1 linearize digitalfilters1 bdshape1 bdshape2 octagonalshape1 octagonalshape2 polyhedron1 polyhedron2
 make[6]: Leaving directory '/build/ppl-1.2/tests/Concrete_Expression'
 ****************************  double/IEEE754_DOUBLE  ****************************
 make[6]: Entering directory '/build/ppl-1.2/tests/Concrete_Expression'
@@ -89600,29 +89634,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from octagonalshape1.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from octagonalshape1.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from octagonalshape2.cc:25:
+                 from digitalfilters1.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -89634,7 +89646,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from octagonalshape2.cc:25:
+                 from digitalfilters1.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -89644,7 +89656,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from bdshape1.cc:24:
+                 from bdshape2.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -89656,7 +89668,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from bdshape1.cc:24:
+                 from bdshape2.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -89666,7 +89678,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from polyhedron2.cc:26:
+                 from octagonalshape2.cc:25:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -89678,7 +89690,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from polyhedron2.cc:26:
+                 from octagonalshape2.cc:25:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -89713,7 +89725,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from octagonalshape1.cc:24:
+                 from digitalfilters1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -89737,7 +89749,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from octagonalshape2.cc:25:
+                 from bdshape2.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -89752,6 +89764,72 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from linearize.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from linearize.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from C_Expr.cc:25:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from C_Expr.cc:25:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from linearform1.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from linearform1.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -89761,7 +89839,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from bdshape1.cc:24:
+                 from linearize.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -89782,7 +89860,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from linearform1.cc:24:
+                 from bdshape1.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -89794,7 +89872,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from linearform1.cc:24:
+                 from bdshape1.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -89831,7 +89909,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from polyhedron2.cc:26:
+                 from octagonalshape2.cc:25:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -89852,73 +89930,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from linearize.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from linearize.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from C_Expr.cc:25:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from bdshape2.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from C_Expr.cc:25:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from bdshape2.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from digitalfilters1.cc:24:
+                 from polyhedron2.cc:26:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -89930,7 +89942,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from digitalfilters1.cc:24:
+                 from polyhedron2.cc:26:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -89943,7 +89955,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from linearform1.cc:24:
+                 from C_Expr.cc:25:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -89951,6 +89963,13 @@
 ../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -89960,7 +89979,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from linearize.cc:24:
+                 from linearform1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -89975,13 +89994,28 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from octagonalshape1.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from octagonalshape1.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -89991,11 +90025,21 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from bdshape2.cc:24:
+                 from bdshape1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
                                                           ^
+../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -90005,7 +90049,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from C_Expr.cc:25:
+                 from polyhedron2.cc:26:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -90013,13 +90057,6 @@
 ../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
 ../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -90027,9 +90064,6 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -90039,7 +90073,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from digitalfilters1.cc:24:
+                 from octagonalshape1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -90054,12 +90088,12 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-octagonalshape1.cc: In function 'bool {anonymous}::test01()':
-octagonalshape1.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+bdshape2.cc: In function 'bool {anonymous}::test01()':
+bdshape2.cc:41:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
    catch(std::invalid_argument e) {
                                ^
-octagonalshape1.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch(std::invalid_argument e) {
+bdshape2.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch(std::invalid_argument e){
                                ^
 octagonalshape2.cc: In function 'bool {anonymous}::test01()':
 octagonalshape2.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
@@ -90068,27 +90102,6 @@
 octagonalshape2.cc:49:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
    catch(std::invalid_argument e) {
                                ^
-bdshape1.cc: In function 'bool {anonymous}::test01()':
-bdshape1.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch(std::invalid_argument e) {
-                               ^
-bdshape1.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch(std::invalid_argument e) {
-                               ^
-polyhedron2.cc: In function 'bool {anonymous}::test01()':
-polyhedron2.cc:41:15: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch (std::invalid_argument) {
-               ^~~~~~~~~~~~~~~~
-polyhedron2.cc:47:17: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-     catch (std::invalid_argument) {
-                 ^~~~~~~~~~~~~~~~
-bdshape2.cc: In function 'bool {anonymous}::test01()':
-bdshape2.cc:41:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch(std::invalid_argument e) {
-                               ^
-bdshape2.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch(std::invalid_argument e){
-                               ^
 linearform1.cc: In function 'bool {anonymous}::test08()':
 linearform1.cc:233:27: warning: catching polymorphic type 'class std::length_error' by value [-Wcatch-value=]
    catch(std::length_error e) {
@@ -90108,25 +90121,46 @@
 linearform1.cc:287:27: warning: catching polymorphic type 'class std::length_error' by value [-Wcatch-value=]
    catch(std::length_error e) {
                            ^
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o C_Expr C_Expr.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+bdshape1.cc: In function 'bool {anonymous}::test01()':
+bdshape1.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch(std::invalid_argument e) {
+                               ^
+bdshape1.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch(std::invalid_argument e) {
+                               ^
+polyhedron2.cc: In function 'bool {anonymous}::test01()':
+polyhedron2.cc:41:15: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch (std::invalid_argument) {
+               ^~~~~~~~~~~~~~~~
+polyhedron2.cc:47:17: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+     catch (std::invalid_argument) {
+                 ^~~~~~~~~~~~~~~~
+octagonalshape1.cc: In function 'bool {anonymous}::test01()':
+octagonalshape1.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch(std::invalid_argument e) {
+                               ^
+octagonalshape1.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch(std::invalid_argument e) {
+                               ^
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o C_Expr C_Expr.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/C_Expr C_Expr.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape1 bdshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron1 polyhedron1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearize linearize.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/bdshape1 bdshape1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/polyhedron1 polyhedron1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearize linearize.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearform1 linearform1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/linearize linearize.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape1 octagonalshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/octagonalshape1 octagonalshape1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape2 octagonalshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/octagonalshape2 octagonalshape2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron2 polyhedron2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearform1 linearform1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/polyhedron2 polyhedron2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/linearform1 linearform1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape2 bdshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron2 polyhedron2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron1 polyhedron1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/polyhedron2 polyhedron2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape1 octagonalshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/polyhedron1 polyhedron1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/octagonalshape1 octagonalshape1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape1 bdshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/bdshape1 bdshape1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape2 bdshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape2 octagonalshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/bdshape2 bdshape2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o digitalfilters1 digitalfilters1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/octagonalshape2 octagonalshape2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o digitalfilters1 digitalfilters1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/digitalfilters1 digitalfilters1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
 make[7]: Leaving directory '/build/ppl-1.2/tests/Concrete_Expression'
 make  check-TESTS
@@ -90150,8 +90184,8 @@
 test -z "run_tests.stamp" || rm -f run_tests.stamp
 rm -rf .libs _libs
 rm -f *.o
-rm -f *.lo
  rm -f C_Expr linearform1 linearize digitalfilters1 bdshape1 bdshape2 octagonalshape1 octagonalshape2 polyhedron1 polyhedron2
+rm -f *.lo
 make[6]: Leaving directory '/build/ppl-1.2/tests/Concrete_Expression'
 ****************************  double/IEEE754_QUAD  ****************************
 make[6]: Entering directory '/build/ppl-1.2/tests/Concrete_Expression'
@@ -90175,7 +90209,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from C_Expr.cc:25:
+                 from octagonalshape2.cc:25:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -90187,7 +90221,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from C_Expr.cc:25:
+                 from octagonalshape2.cc:25:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -90197,7 +90231,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from octagonalshape1.cc:24:
+                 from digitalfilters1.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -90209,17 +90243,52 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from octagonalshape1.cc:24:
+                 from digitalfilters1.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/Linear_System_templates.hh:30,
+                 from ../../src/Linear_System_defs.hh:580,
+                 from ../../src/Constraint_System_defs.hh:29,
+                 from ../../src/Box_inlines.hh:28,
+                 from ../../src/Box_defs.hh:2285,
+                 from ../../src/Linear_Form_templates.hh:29,
+                 from ../../src/ppl_include_files.hh:9,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from octagonalshape2.cc:25:
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
+../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
 In file included from ../../src/CO_Tree_defs.hh:1557,
                  from ../../src/Sparse_Row_defs.hh:29,
                  from ../../src/Linear_Expression_Impl_defs.hh:33,
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from octagonalshape2.cc:25:
+                 from bdshape2.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from linearize.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -90231,7 +90300,18 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from octagonalshape2.cc:25:
+                 from bdshape2.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from linearize.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -90241,7 +90321,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from bdshape2.cc:24:
+                 from polyhedron1.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -90253,7 +90333,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from bdshape2.cc:24:
+                 from polyhedron1.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -90263,7 +90343,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from bdshape1.cc:24:
+                 from linearform1.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -90275,7 +90355,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from bdshape1.cc:24:
+                 from linearform1.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -90285,7 +90365,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from polyhedron1.cc:24:
+                 from octagonalshape1.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -90297,7 +90377,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from polyhedron1.cc:24:
+                 from octagonalshape1.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -90307,7 +90387,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from linearize.cc:24:
+                 from C_Expr.cc:25:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -90319,41 +90399,39 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from linearize.cc:24:
+                 from C_Expr.cc:25:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../../src/Linear_System_templates.hh:30,
-                 from ../../src/Linear_System_defs.hh:580,
-                 from ../../src/Constraint_System_defs.hh:29,
-                 from ../../src/Box_inlines.hh:28,
-                 from ../../src/Box_defs.hh:2285,
-                 from ../../src/Linear_Form_templates.hh:29,
-                 from ../../src/ppl_include_files.hh:9,
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from C_Expr.cc:25:
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
-../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
+                 from bdshape1.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from bdshape1.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../../src/CO_Tree_defs.hh:1557,
                  from ../../src/Sparse_Row_defs.hh:29,
                  from ../../src/Linear_Expression_Impl_defs.hh:33,
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from digitalfilters1.cc:24:
+                 from polyhedron2.cc:26:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -90365,7 +90443,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from digitalfilters1.cc:24:
+                 from polyhedron2.cc:26:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -90378,7 +90456,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from octagonalshape1.cc:24:
+                 from digitalfilters1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -90402,7 +90480,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from octagonalshape2.cc:25:
+                 from linearize.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -90450,7 +90528,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from bdshape1.cc:24:
+                 from polyhedron1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -90474,43 +90552,11 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from linearize.cc:24:
+                 from linearform1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
                                                           ^
-../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from linearform1.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from linearform1.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -90520,7 +90566,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from polyhedron1.cc:24:
+                 from octagonalshape1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -90528,6 +90574,13 @@
 ../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
 ../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -90535,6 +90588,9 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -90544,7 +90600,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from digitalfilters1.cc:24:
+                 from polyhedron2.cc:26:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -90559,28 +90615,6 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from polyhedron2.cc:26:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from polyhedron2.cc:26:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -90590,21 +90624,11 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from linearform1.cc:24:
+                 from C_Expr.cc:25:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
                                                           ^
-../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -90614,7 +90638,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from polyhedron2.cc:26:
+                 from bdshape1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -90622,6 +90646,13 @@
 ../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
 ../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -90629,6 +90660,9 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
 octagonalshape2.cc: In function 'bool {anonymous}::test01()':
 octagonalshape2.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
    catch(std::invalid_argument e) {
@@ -90636,6 +90670,32 @@
 octagonalshape2.cc:49:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
    catch(std::invalid_argument e) {
                                ^
+polyhedron2.cc: In function 'bool {anonymous}::test01()':
+polyhedron2.cc:41:15: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch (std::invalid_argument) {
+               ^~~~~~~~~~~~~~~~
+polyhedron2.cc:47:17: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+     catch (std::invalid_argument) {
+                 ^~~~~~~~~~~~~~~~
+linearform1.cc: In function 'bool {anonymous}::test08()':
+linearform1.cc:233:27: warning: catching polymorphic type 'class std::length_error' by value [-Wcatch-value=]
+   catch(std::length_error e) {
+                           ^
+linearform1.cc:242:27: warning: catching polymorphic type 'class std::length_error' by value [-Wcatch-value=]
+   catch(std::length_error e) {
+                           ^
+linearform1.cc:252:27: warning: catching polymorphic type 'class std::length_error' by value [-Wcatch-value=]
+   catch(std::length_error e) {
+                           ^
+linearform1.cc:267:27: warning: catching polymorphic type 'class std::length_error' by value [-Wcatch-value=]
+   catch(std::length_error e) {
+                           ^
+linearform1.cc:277:27: warning: catching polymorphic type 'class std::length_error' by value [-Wcatch-value=]
+   catch(std::length_error e) {
+                           ^
+linearform1.cc:287:27: warning: catching polymorphic type 'class std::length_error' by value [-Wcatch-value=]
+   catch(std::length_error e) {
+                           ^
 octagonalshape1.cc: In function 'bool {anonymous}::test01()':
 octagonalshape1.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
    catch(std::invalid_argument e) {
@@ -90657,51 +90717,25 @@
 bdshape1.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
    catch(std::invalid_argument e) {
                                ^
-linearform1.cc: In function 'bool {anonymous}::test08()':
-linearform1.cc:233:27: warning: catching polymorphic type 'class std::length_error' by value [-Wcatch-value=]
-   catch(std::length_error e) {
-                           ^
-linearform1.cc:242:27: warning: catching polymorphic type 'class std::length_error' by value [-Wcatch-value=]
-   catch(std::length_error e) {
-                           ^
-linearform1.cc:252:27: warning: catching polymorphic type 'class std::length_error' by value [-Wcatch-value=]
-   catch(std::length_error e) {
-                           ^
-linearform1.cc:267:27: warning: catching polymorphic type 'class std::length_error' by value [-Wcatch-value=]
-   catch(std::length_error e) {
-                           ^
-linearform1.cc:277:27: warning: catching polymorphic type 'class std::length_error' by value [-Wcatch-value=]
-   catch(std::length_error e) {
-                           ^
-linearform1.cc:287:27: warning: catching polymorphic type 'class std::length_error' by value [-Wcatch-value=]
-   catch(std::length_error e) {
-                           ^
-polyhedron2.cc: In function 'bool {anonymous}::test01()':
-polyhedron2.cc:41:15: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch (std::invalid_argument) {
-               ^~~~~~~~~~~~~~~~
-polyhedron2.cc:47:17: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-     catch (std::invalid_argument) {
-                 ^~~~~~~~~~~~~~~~
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o C_Expr C_Expr.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o C_Expr C_Expr.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/C_Expr C_Expr.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearize linearize.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/linearize linearize.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape1 bdshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron1 polyhedron1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/bdshape1 bdshape1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/polyhedron1 polyhedron1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearform1 linearform1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape1 octagonalshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearform1 linearform1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/linearform1 linearform1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/octagonalshape1 octagonalshape1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape2 octagonalshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape2 octagonalshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron1 polyhedron1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/octagonalshape2 octagonalshape2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron2 polyhedron2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearize linearize.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/polyhedron1 polyhedron1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron2 polyhedron2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/linearize linearize.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape1 bdshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/polyhedron2 polyhedron2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape2 bdshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/bdshape1 bdshape1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape1 octagonalshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/octagonalshape1 octagonalshape1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape2 bdshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/bdshape2 bdshape2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o digitalfilters1 digitalfilters1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o digitalfilters1 digitalfilters1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/digitalfilters1 digitalfilters1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
 make[7]: Leaving directory '/build/ppl-1.2/tests/Concrete_Expression'
 make  check-TESTS
@@ -90750,28 +90784,6 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from octagonalshape2.cc:25:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from octagonalshape2.cc:25:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
                  from polyhedron2.cc:26:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
@@ -90810,6 +90822,30 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/Linear_System_templates.hh:30,
+                 from ../../src/Linear_System_defs.hh:580,
+                 from ../../src/Constraint_System_defs.hh:29,
+                 from ../../src/Box_inlines.hh:28,
+                 from ../../src/Box_defs.hh:2285,
+                 from ../../src/Linear_Form_templates.hh:29,
+                 from ../../src/ppl_include_files.hh:9,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from polyhedron2.cc:26:
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
+../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
 In file included from ../../src/CO_Tree_defs.hh:1557,
                  from ../../src/Sparse_Row_defs.hh:29,
                  from ../../src/Linear_Expression_Impl_defs.hh:33,
@@ -90838,7 +90874,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from linearform1.cc:24:
+                 from digitalfilters1.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -90850,7 +90886,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from linearform1.cc:24:
+                 from digitalfilters1.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -90863,7 +90899,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from octagonalshape2.cc:25:
+                 from C_Expr.cc:25:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -90878,30 +90914,61 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-In file included from ../../src/Linear_System_templates.hh:30,
-                 from ../../src/Linear_System_defs.hh:580,
-                 from ../../src/Constraint_System_defs.hh:29,
-                 from ../../src/Box_inlines.hh:28,
-                 from ../../src/Box_defs.hh:2285,
-                 from ../../src/Linear_Form_templates.hh:29,
-                 from ../../src/ppl_include_files.hh:9,
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from polyhedron2.cc:26:
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
-../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
+                 from octagonalshape1.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from polyhedron1.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from octagonalshape1.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from polyhedron1.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from bdshape2.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
 In file included from ../../src/CO_Tree_defs.hh:1557,
                  from ../../src/Sparse_Row_defs.hh:29,
                  from ../../src/Linear_Expression_Impl_defs.hh:33,
@@ -90920,10 +90987,65 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
+                 from bdshape2.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
                  from bdshape1.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from linearform1.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from linearform1.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from octagonalshape2.cc:25:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from octagonalshape2.cc:25:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -90933,7 +91055,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from C_Expr.cc:25:
+                 from linearize.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -90957,7 +91079,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from linearize.cc:24:
+                 from digitalfilters1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -90981,65 +91103,11 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from linearform1.cc:24:
+                 from polyhedron1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
                                                           ^
-../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from bdshape2.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from octagonalshape1.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from octagonalshape1.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from bdshape2.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -91049,7 +91117,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from bdshape1.cc:24:
+                 from octagonalshape1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -91057,6 +91125,13 @@
 ../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
 ../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -91064,28 +91139,9 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from digitalfilters1.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from digitalfilters1.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
+../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -91095,21 +91151,11 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from octagonalshape1.cc:24:
+                 from bdshape1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
                                                           ^
-../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -91127,6 +91173,13 @@
 ../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
 ../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -91134,28 +91187,9 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from polyhedron1.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from polyhedron1.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
+../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -91165,7 +91199,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from digitalfilters1.cc:24:
+                 from linearform1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -91189,7 +91223,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from polyhedron1.cc:24:
+                 from octagonalshape2.cc:25:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -91204,13 +91238,6 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-octagonalshape2.cc: In function 'bool {anonymous}::test01()':
-octagonalshape2.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch(std::invalid_argument e) {
-                               ^
-octagonalshape2.cc:49:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch(std::invalid_argument e) {
-                               ^
 polyhedron2.cc: In function 'bool {anonymous}::test01()':
 polyhedron2.cc:41:15: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
    catch (std::invalid_argument) {
@@ -91237,13 +91264,27 @@
 linearform1.cc:287:27: warning: catching polymorphic type 'class std::length_error' by value [-Wcatch-value=]
    catch(std::length_error e) {
                            ^
+octagonalshape2.cc: In function 'bool {anonymous}::test01()':
+octagonalshape2.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch(std::invalid_argument e) {
+                               ^
+octagonalshape2.cc:49:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch(std::invalid_argument e) {
+                               ^
 bdshape1.cc: In function 'bool {anonymous}::test01()':
 bdshape1.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
    catch(std::invalid_argument e) {
                                ^
+bdshape2.cc: In function 'bool {anonymous}::test01()':
+bdshape2.cc:41:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch(std::invalid_argument e) {
+                               ^
 bdshape1.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
    catch(std::invalid_argument e) {
                                ^
+bdshape2.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
+   catch(std::invalid_argument e){
+                               ^
 octagonalshape1.cc: In function 'bool {anonymous}::test01()':
 octagonalshape1.cc:40:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
    catch(std::invalid_argument e) {
@@ -91251,32 +91292,25 @@
 octagonalshape1.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
    catch(std::invalid_argument e) {
                                ^
-bdshape2.cc: In function 'bool {anonymous}::test01()':
-bdshape2.cc:41:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch(std::invalid_argument e) {
-                               ^
-bdshape2.cc:51:31: warning: catching polymorphic type 'class std::invalid_argument' by value [-Wcatch-value=]
-   catch(std::invalid_argument e){
-                               ^
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o C_Expr C_Expr.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o C_Expr C_Expr.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/C_Expr C_Expr.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearize linearize.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearform1 linearform1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/linearize linearize.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearform1 linearform1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/linearform1 linearform1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape1 bdshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o linearize linearize.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/linearize linearize.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape1 bdshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron1 polyhedron1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/bdshape1 bdshape1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron2 polyhedron2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape1 octagonalshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape2 octagonalshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron2 polyhedron2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/polyhedron1 polyhedron1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/polyhedron2 polyhedron2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape1 octagonalshape1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/octagonalshape1 octagonalshape1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o octagonalshape2 octagonalshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/octagonalshape2 octagonalshape2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o polyhedron1 polyhedron1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/polyhedron1 polyhedron1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape2 bdshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o bdshape2 bdshape2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/bdshape2 bdshape2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o digitalfilters1 digitalfilters1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o digitalfilters1 digitalfilters1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/digitalfilters1 digitalfilters1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
 make[7]: Leaving directory '/build/ppl-1.2/tests/Concrete_Expression'
 make  check-TESTS
@@ -91297,11 +91331,11 @@
 make[7]: Leaving directory '/build/ppl-1.2/tests/Concrete_Expression'
 make[6]: Leaving directory '/build/ppl-1.2/tests/Concrete_Expression'
 make[6]: Entering directory '/build/ppl-1.2/tests/Concrete_Expression'
+ rm -f C_Expr linearform1 linearize digitalfilters1 bdshape1 bdshape2 octagonalshape1 octagonalshape2 polyhedron1 polyhedron2
 test -z "run_tests.stamp" || rm -f run_tests.stamp
 rm -rf .libs _libs
 rm -f *.o
 rm -f *.lo
- rm -f C_Expr linearform1 linearize digitalfilters1 bdshape1 bdshape2 octagonalshape1 octagonalshape2 polyhedron1 polyhedron2
 make[6]: Leaving directory '/build/ppl-1.2/tests/Concrete_Expression'
 echo "true" >run_tests.stamp
 chmod +x run_tests.stamp
@@ -91362,7 +91396,7 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o cotree1 cotree1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o cotree1 cotree1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/cotree1 cotree1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
 make[5]: Leaving directory '/build/ppl-1.2/tests/CO_Tree'
 make  check-TESTS
@@ -91399,29 +91433,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from exceptions1.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from exceptions1.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from ascii_dump_load1.cc:24:
+                 from weightwatch1.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -91433,7 +91445,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from ascii_dump_load1.cc:24:
+                 from weightwatch1.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -91443,7 +91455,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from pipproblem2.cc:24:
+                 from exceptions1.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -91455,7 +91467,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from pipproblem2.cc:24:
+                 from exceptions1.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -91465,7 +91477,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from pipproblem1.cc:24:
+                 from ascii_dump_load1.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -91477,7 +91489,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from pipproblem1.cc:24:
+                 from ascii_dump_load1.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -91511,7 +91523,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from weightwatch1.cc:24:
+                 from pipproblem2.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -91523,7 +91535,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from weightwatch1.cc:24:
+                 from pipproblem2.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -91536,7 +91548,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from pipproblem2.cc:24:
+                 from weightwatch1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -91581,7 +91593,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from pipproblem3.cc:24:
+                 from pipproblem1.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -91593,7 +91605,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from pipproblem3.cc:24:
+                 from pipproblem1.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -91606,7 +91618,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from pipproblem1.cc:24:
+                 from pipproblem2.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -91621,6 +91633,28 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from pipproblem3.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from pipproblem3.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -91630,7 +91664,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from weightwatch1.cc:24:
+                 from pipproblem1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -91669,27 +91703,27 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o pipproblem3 pipproblem3.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o pipproblem3 pipproblem3.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o exceptions1 exceptions1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/pipproblem3 pipproblem3.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o ascii_dump_load1 ascii_dump_load1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/ascii_dump_load1 ascii_dump_load1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o exceptions1 exceptions1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o pipproblem2 pipproblem2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o ascii_dump_load1 ascii_dump_load1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/exceptions1 exceptions1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/ascii_dump_load1 ascii_dump_load1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o pipproblem2 pipproblem2.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/pipproblem2 pipproblem2.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o weightwatch1 weightwatch1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o weightwatch1 weightwatch1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/weightwatch1 weightwatch1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o pipproblem1 pipproblem1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o pipproblem1 pipproblem1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/pipproblem1 pipproblem1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
 make[5]: Leaving directory '/build/ppl-1.2/tests/PIP_Problem'
 make  check-TESTS
 make[5]: Entering directory '/build/ppl-1.2/tests/PIP_Problem'
 make[6]: Entering directory '/build/ppl-1.2/tests/PIP_Problem'
-PASS: pipproblem2
 PASS: ascii_dump_load1
-PASS: pipproblem3
 PASS: exceptions1
+PASS: pipproblem2
 PASS: pipproblem1
+PASS: pipproblem3
 PASS: weightwatch1
 ============================================================================
 Testsuite summary for the Parma Polyhedra Library 1.2
@@ -91724,14 +91758,13 @@
 g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o containsintegerpoint1.o containsintegerpoint1.cc
 g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o difference1.o difference1.cc
 g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o discrete1.o discrete1.cc
-g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o disjoint1.o disjoint1.cc
 In file included from ../../src/CO_Tree_defs.hh:1557,
                  from ../../src/Sparse_Row_defs.hh:29,
                  from ../../src/Linear_Expression_Impl_defs.hh:33,
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from collapse1.cc:24:
+                 from closure1.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -91743,7 +91776,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from collapse1.cc:24:
+                 from closure1.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -91753,7 +91786,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from bounds1.cc:25:
+                 from affineimage1.cc:26:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -91765,7 +91798,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from bounds1.cc:25:
+                 from affineimage1.cc:26:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -91775,7 +91808,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from contains1.cc:25:
+                 from difference1.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -91787,7 +91820,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from contains1.cc:25:
+                 from difference1.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -91819,7 +91852,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from closure1.cc:24:
+                 from addcongruences1.cc:25:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -91831,7 +91864,51 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from closure1.cc:24:
+                 from addcongruences1.cc:25:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from affinedimension1.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from affinedimension1.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from concatenate1.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from concatenate1.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -91863,7 +91940,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from affinedimension1.cc:24:
+                 from containsintegerpoint1.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -91875,7 +91952,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from affinedimension1.cc:24:
+                 from containsintegerpoint1.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -91885,7 +91962,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from addcongruences1.cc:25:
+                 from addconstraints1.cc:25:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -91897,7 +91974,117 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from addcongruences1.cc:25:
+                 from addconstraints1.cc:25:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from affinepreimage1.cc:26:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from affinepreimage1.cc:26:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from collapse1.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from collapse1.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from bounds1.cc:25:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from bounds1.cc:25:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from closed1.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from closed1.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from contains1.cc:25:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from contains1.cc:25:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -91910,7 +92097,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from collapse1.cc:24:
+                 from closure1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -91934,7 +92121,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from bounds1.cc:25:
+                 from affineimage1.cc:26:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -91958,24 +92145,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from bounded1.cc:24:
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
-../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-In file included from ../../src/Linear_System_templates.hh:30,
-                 from ../../src/Linear_System_defs.hh:580,
-                 from ../../src/Constraint_System_defs.hh:29,
-                 from ../../src/Box_inlines.hh:28,
-                 from ../../src/Box_defs.hh:2285,
-                 from ../../src/Linear_Form_templates.hh:29,
-                 from ../../src/ppl_include_files.hh:9,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from discrete1.cc:24:
+                 from addcongruences1.cc:25:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -91990,13 +92160,6 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -92006,7 +92169,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from closure1.cc:24:
+                 from difference1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -92030,7 +92193,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from contains1.cc:25:
+                 from bounded1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -92045,28 +92208,6 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from addconstraints1.cc:25:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from addconstraints1.cc:25:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -92091,94 +92232,6 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from concatenate1.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from concatenate1.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from closed1.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from closed1.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from affinepreimage1.cc:26:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from affineimage1.cc:26:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from affineimage1.cc:26:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from affinepreimage1.cc:26:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -92188,7 +92241,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from addcongruences1.cc:25:
+                 from discrete1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -92203,28 +92256,6 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from containsintegerpoint1.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from containsintegerpoint1.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -92234,7 +92265,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from addconstraints1.cc:25:
+                 from concatenate1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -92258,7 +92289,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from concatenate1.cc:24:
+                 from containsintegerpoint1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -92273,28 +92304,6 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from difference1.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from difference1.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -92304,7 +92313,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from containsintegerpoint1.cc:24:
+                 from collapse1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -92328,7 +92337,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from closed1.cc:24:
+                 from affinepreimage1.cc:26:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -92352,7 +92361,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from affineimage1.cc:26:
+                 from addconstraints1.cc:25:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -92367,28 +92376,6 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from disjoint1.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from disjoint1.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -92398,7 +92385,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from affinepreimage1.cc:26:
+                 from bounds1.cc:25:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -92422,7 +92409,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from difference1.cc:24:
+                 from contains1.cc:25:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -92446,7 +92433,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from disjoint1.cc:24:
+                 from closed1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -92461,18 +92448,23 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o disjoint1.o disjoint1.cc
 g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o disjunct1.o disjunct1.cc
 g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o empty1.o empty1.cc
 g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o entails1.o entails1.cc
 g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o equals1.o equals1.cc
 g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o frombdshape1.o frombdshape1.cc
+g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o frombox1.o frombox1.cc
+g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o fromcongruences1.o fromcongruences1.cc
+g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o fromconstraints1.o fromconstraints1.cc
+g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o fromgrid1.o fromgrid1.cc
 In file included from ../../src/CO_Tree_defs.hh:1557,
                  from ../../src/Sparse_Row_defs.hh:29,
                  from ../../src/Linear_Expression_Impl_defs.hh:33,
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from disjunct1.cc:25:
+                 from disjoint1.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -92484,37 +92476,33 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from disjunct1.cc:25:
+                 from disjoint1.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o frombox1.o frombox1.cc
-In file included from ../../src/Linear_System_templates.hh:30,
-                 from ../../src/Linear_System_defs.hh:580,
-                 from ../../src/Constraint_System_defs.hh:29,
-                 from ../../src/Box_inlines.hh:28,
-                 from ../../src/Box_defs.hh:2285,
-                 from ../../src/Linear_Form_templates.hh:29,
-                 from ../../src/ppl_include_files.hh:9,
+g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o fromoctagonalshape1.o fromoctagonalshape1.cc
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
                  from disjunct1.cc:25:
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
-../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o fromcongruences1.o fromcongruences1.cc
-g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o fromconstraints1.o fromconstraints1.cc
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from disjunct1.cc:25:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../../src/CO_Tree_defs.hh:1557,
                  from ../../src/Sparse_Row_defs.hh:29,
                  from ../../src/Linear_Expression_Impl_defs.hh:33,
@@ -92537,7 +92525,6 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o fromgrid1.o fromgrid1.cc
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -92547,7 +92534,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from empty1.cc:25:
+                 from disjoint1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -92562,31 +92549,31 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o fromoctagonalshape1.o fromoctagonalshape1.cc
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from entails1.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
+In file included from ../../src/Linear_System_templates.hh:30,
+                 from ../../src/Linear_System_defs.hh:580,
+                 from ../../src/Constraint_System_defs.hh:29,
+                 from ../../src/Box_inlines.hh:28,
+                 from ../../src/Box_defs.hh:2285,
+                 from ../../src/Linear_Form_templates.hh:29,
+                 from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from entails1.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
+                 from disjunct1.cc:25:
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
+../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
 g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o frompolyhedron1.o frompolyhedron1.cc
-g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o fromspacedimension1.o fromspacedimension1.cc
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -92596,7 +92583,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from entails1.cc:24:
+                 from empty1.cc:25:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -92617,29 +92604,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from frombdshape1.cc:25:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from frombdshape1.cc:25:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from frombox1.cc:25:
+                 from entails1.cc:24:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -92651,7 +92616,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from frombox1.cc:25:
+                 from entails1.cc:24:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -92683,29 +92648,7 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from fromcongruences1.cc:25:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from fromcongruences1.cc:25:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from fromconstraints1.cc:24:
+                 from frombdshape1.cc:25:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
    std::memcpy(&to, &from, sizeof(data_type));
@@ -92717,7 +92660,7 @@
                  from ../../src/ppl_include_files.hh:3,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from fromconstraints1.cc:24:
+                 from frombdshape1.cc:25:
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
@@ -92730,7 +92673,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from frombdshape1.cc:25:
+                 from entails1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -92745,30 +92688,28 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-In file included from ../../src/Linear_System_templates.hh:30,
-                 from ../../src/Linear_System_defs.hh:580,
-                 from ../../src/Constraint_System_defs.hh:29,
-                 from ../../src/Box_inlines.hh:28,
-                 from ../../src/Box_defs.hh:2285,
-                 from ../../src/Linear_Form_templates.hh:29,
-                 from ../../src/ppl_include_files.hh:9,
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
                  from frombox1.cc:25:
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
-../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from frombox1.cc:25:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -92778,7 +92719,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from fromcongruences1.cc:25:
+                 from equals1.cc:25:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -92793,7 +92734,6 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o intersection1.o intersection1.cc
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -92803,7 +92743,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from equals1.cc:25:
+                 from frombdshape1.cc:25:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -92818,6 +92758,28 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from fromcongruences1.cc:25:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from fromcongruences1.cc:25:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -92827,7 +92789,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from fromconstraints1.cc:24:
+                 from frombox1.cc:25:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -92848,6 +92810,28 @@
                  from ../../src/ppl_include_files.hh:8,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
+                 from fromconstraints1.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from fromconstraints1.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
                  from fromgrid1.cc:25:
 ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
 ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
@@ -92886,7 +92870,6 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o maxmin1.o maxmin1.cc
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -92896,7 +92879,31 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from fromoctagonalshape1.cc:25:
+                 from fromcongruences1.cc:25:
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
+../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+In file included from ../../src/Linear_System_templates.hh:30,
+                 from ../../src/Linear_System_defs.hh:580,
+                 from ../../src/Constraint_System_defs.hh:29,
+                 from ../../src/Box_inlines.hh:28,
+                 from ../../src/Box_defs.hh:2285,
+                 from ../../src/Linear_Form_templates.hh:29,
+                 from ../../src/ppl_include_files.hh:9,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from fromconstraints1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -92935,6 +92942,31 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+In file included from ../../src/Linear_System_templates.hh:30,
+                 from ../../src/Linear_System_defs.hh:580,
+                 from ../../src/Constraint_System_defs.hh:29,
+                 from ../../src/Box_inlines.hh:28,
+                 from ../../src/Box_defs.hh:2285,
+                 from ../../src/Linear_Form_templates.hh:29,
+                 from ../../src/ppl_include_files.hh:9,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from fromoctagonalshape1.cc:25:
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
+../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o fromspacedimension1.o fromspacedimension1.cc
 In file included from ../../src/CO_Tree_defs.hh:1557,
                  from ../../src/Sparse_Row_defs.hh:29,
                  from ../../src/Linear_Expression_Impl_defs.hh:33,
@@ -92981,6 +93013,23 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o intersection1.o intersection1.cc
+g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o maxmin1.o maxmin1.cc
+In file included from ../../src/Pointset_Powerset_defs.hh:1454,
+                 from ../../src/algorithms.hh:28,
+                 from ../../src/ppl_include_files.hh:18,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from equals1.cc:25:
+../../src/Pointset_Powerset_templates.hh: In instantiation of 'Parma_Polyhedra_Library::Pointset_Powerset<PSET>::Pointset_Powerset(const Parma_Polyhedra_Library::Pointset_Powerset<QH>&, Parma_Polyhedra_Library::Complexity_Class) [with QH = Parma_Polyhedra_Library::Box<Parma_Polyhedra_Library::Interval<__gmp_expr<__mpq_struct [1], __mpq_struct [1]>, Parma_Polyhedra_Library::Interval_Info_Bitset<unsigned int, Parma_Polyhedra_Library::Test::Rational_Real_Open_Interval_Info_Policy> > >; PSET = Parma_Polyhedra_Library::NNC_Polyhedron]':
+../../src/Pointset_Powerset_inlines.hh:262:43:   required from 'bool Parma_Polyhedra_Library::Pointset_Powerset<PSET>::geometrically_equals(const Parma_Polyhedra_Library::Pointset_Powerset<PSET>&) const [with PSET = Parma_Polyhedra_Library::Box<Parma_Polyhedra_Library::Interval<__gmp_expr<__mpq_struct [1], __mpq_struct [1]>, Parma_Polyhedra_Library::Interval_Info_Bitset<unsigned int, Parma_Polyhedra_Library::Test::Rational_Real_Open_Interval_Info_Policy> > >]'
+equals1.cc:44:50:   required from here
+../../src/Pointset_Powerset_templates.hh:66:29: internal compiler error: in type_dependent_expression_p, at cp/pt.c:25195
+          y_end = y.end(); i != y_end; ++i) {
+                           ~~^~~~~~~~
+Please submit a full bug report,
+with preprocessed source if appropriate.
+See <file:///usr/share/doc/gcc-8/README.Bugs> for instructions.
 In file included from ../../src/CO_Tree_defs.hh:1557,
                  from ../../src/Sparse_Row_defs.hh:29,
                  from ../../src/Linear_Expression_Impl_defs.hh:33,
@@ -93027,7 +93076,28 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o meet1.o meet1.cc
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from maxmin1.cc:25:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from maxmin1.cc:25:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
 In file included from ../../src/CO_Tree_defs.hh:1557,
                  from ../../src/Sparse_Row_defs.hh:29,
                  from ../../src/Linear_Expression_Impl_defs.hh:33,
@@ -93059,7 +93129,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from intersection1.cc:24:
+                 from maxmin1.cc:25:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -93074,44 +93144,7 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-In file included from ../../src/Pointset_Powerset_defs.hh:1454,
-                 from ../../src/algorithms.hh:28,
-                 from ../../src/ppl_include_files.hh:18,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from equals1.cc:25:
-../../src/Pointset_Powerset_templates.hh: In instantiation of 'Parma_Polyhedra_Library::Pointset_Powerset<PSET>::Pointset_Powerset(const Parma_Polyhedra_Library::Pointset_Powerset<QH>&, Parma_Polyhedra_Library::Complexity_Class) [with QH = Parma_Polyhedra_Library::Box<Parma_Polyhedra_Library::Interval<__gmp_expr<__mpq_struct [1], __mpq_struct [1]>, Parma_Polyhedra_Library::Interval_Info_Bitset<unsigned int, Parma_Polyhedra_Library::Test::Rational_Real_Open_Interval_Info_Policy> > >; PSET = Parma_Polyhedra_Library::NNC_Polyhedron]':
-../../src/Pointset_Powerset_inlines.hh:262:43:   required from 'bool Parma_Polyhedra_Library::Pointset_Powerset<PSET>::geometrically_equals(const Parma_Polyhedra_Library::Pointset_Powerset<PSET>&) const [with PSET = Parma_Polyhedra_Library::Box<Parma_Polyhedra_Library::Interval<__gmp_expr<__mpq_struct [1], __mpq_struct [1]>, Parma_Polyhedra_Library::Interval_Info_Bitset<unsigned int, Parma_Polyhedra_Library::Test::Rational_Real_Open_Interval_Info_Policy> > >]'
-equals1.cc:44:50:   required from here
-../../src/Pointset_Powerset_templates.hh:66:29: internal compiler error: in type_dependent_expression_p, at cp/pt.c:25195
-          y_end = y.end(); i != y_end; ++i) {
-                           ~~^~~~~~~~
-Please submit a full bug report,
-with preprocessed source if appropriate.
-See <file:///usr/share/doc/gcc-8/README.Bugs> for instructions.
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from maxmin1.cc:25:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from maxmin1.cc:25:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o membytes1.o membytes1.cc
+g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o meet1.o meet1.cc
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -93121,7 +93154,7 @@
                  from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from maxmin1.cc:25:
+                 from intersection1.cc:24:
 ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
 ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             ? static_cast<SPS_type>(&Scalar_Products::sign)
@@ -93136,6 +93169,7 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o membytes1.o membytes1.cc
 In file included from ../../src/CO_Tree_defs.hh:1557,
                  from ../../src/Sparse_Row_defs.hh:29,
                  from ../../src/Linear_Expression_Impl_defs.hh:33,
@@ -93158,6 +93192,7 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
+g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o powerset1.o powerset1.cc
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -93182,7 +93217,7 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o powerset1.o powerset1.cc
+g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o reduce1.o reduce1.cc
 In file included from ../../src/CO_Tree_defs.hh:1557,
                  from ../../src/Sparse_Row_defs.hh:29,
                  from ../../src/Linear_Expression_Impl_defs.hh:33,
@@ -93229,7 +93264,7 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o reduce1.o reduce1.cc
+g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o refinewith1.o refinewith1.cc
 In file included from ../../src/CO_Tree_defs.hh:1557,
                  from ../../src/Sparse_Row_defs.hh:29,
                  from ../../src/Linear_Expression_Impl_defs.hh:33,
@@ -93276,7 +93311,6 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o refinewith1.o refinewith1.cc
 In file included from ../../src/CO_Tree_defs.hh:1557,
                  from ../../src/Sparse_Row_defs.hh:29,
                  from ../../src/Linear_Expression_Impl_defs.hh:33,
@@ -93299,7 +93333,6 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o relationwith1.o relationwith1.cc
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -93324,7 +93357,7 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o simplifyusingcontext1.o simplifyusingcontext1.cc
+g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o relationwith1.o relationwith1.cc
 In file included from ../../src/CO_Tree_defs.hh:1557,
                  from ../../src/Sparse_Row_defs.hh:29,
                  from ../../src/Linear_Expression_Impl_defs.hh:33,
@@ -93371,6 +93404,7 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o simplifyusingcontext1.o simplifyusingcontext1.cc
 In file included from ../../src/CO_Tree_defs.hh:1557,
                  from ../../src/Sparse_Row_defs.hh:29,
                  from ../../src/Linear_Expression_Impl_defs.hh:33,
@@ -93417,6 +93451,7 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
+g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o size1.o size1.cc
 In file included from ../../src/CO_Tree_defs.hh:1557,
                  from ../../src/Sparse_Row_defs.hh:29,
                  from ../../src/Linear_Expression_Impl_defs.hh:33,
@@ -93439,6 +93474,8 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
+g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o spacedims1.o spacedims1.cc
+g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o universe1.o universe1.cc
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -93463,7 +93500,7 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o size1.o size1.cc
+g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o upperbound1.o upperbound1.cc
 In file included from ../../src/CO_Tree_defs.hh:1557,
                  from ../../src/Sparse_Row_defs.hh:29,
                  from ../../src/Linear_Expression_Impl_defs.hh:33,
@@ -93486,35 +93523,6 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-In file included from ../../src/Linear_System_templates.hh:30,
-                 from ../../src/Linear_System_defs.hh:580,
-                 from ../../src/Constraint_System_defs.hh:29,
-                 from ../../src/Box_inlines.hh:28,
-                 from ../../src/Box_defs.hh:2285,
-                 from ../../src/Linear_Form_templates.hh:29,
-                 from ../../src/ppl_include_files.hh:9,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from size1.cc:24:
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
-../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            ? static_cast<SPS_type>(&Scalar_Products::sign)
-                                                          ^
-../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-                                                                  ^
-g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o spacedims1.o spacedims1.cc
-g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o universe1.o universe1.cc
-g++ -DHAVE_CONFIG_H -I. -I../..  -I../../src -I../../src -I../../tests -I../../utils -DNDEBUG=1 -Wdate-time -D_FORTIFY_SOURCE=2  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -c -o upperbound1.o upperbound1.cc
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o addcongruences1 addcongruences1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o addconstraints1 addconstraints1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 In file included from ../../src/CO_Tree_defs.hh:1557,
                  from ../../src/Sparse_Row_defs.hh:29,
                  from ../../src/Linear_Expression_Impl_defs.hh:33,
@@ -93537,7 +93545,29 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/addconstraints1 addconstraints1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+In file included from ../../src/CO_Tree_defs.hh:1557,
+                 from ../../src/Sparse_Row_defs.hh:29,
+                 from ../../src/Linear_Expression_Impl_defs.hh:33,
+                 from ../../src/ppl_include_files.hh:8,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from universe1.cc:24:
+../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+   std::memcpy(&to, &from, sizeof(data_type));
+                                            ^
+In file included from ../../src/mp_std_bits_defs.hh:28,
+                 from ../../src/checked_defs.hh:27,
+                 from ../../src/Checked_Number_defs.hh:28,
+                 from ../../src/checked_numeric_limits.hh:27,
+                 from ../../src/ppl_include_files.hh:3,
+                 from ../../src/ppl_header.hh:38,
+                 from ../../tests/ppl_test.hh:27,
+                 from universe1.cc:24:
+/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+ class __gmp_expr<mpz_t, mpz_t>
+       ^~~~~~~~~~~~~~~~~~~~~~~~
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o addcongruences1 addcongruences1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -93562,30 +93592,30 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-In file included from ../../src/CO_Tree_defs.hh:1557,
-                 from ../../src/Sparse_Row_defs.hh:29,
-                 from ../../src/Linear_Expression_Impl_defs.hh:33,
-                 from ../../src/ppl_include_files.hh:8,
-                 from ../../src/ppl_header.hh:38,
-                 from ../../tests/ppl_test.hh:27,
-                 from universe1.cc:24:
-../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-   std::memcpy(&to, &from, sizeof(data_type));
-                                            ^
-In file included from ../../src/mp_std_bits_defs.hh:28,
-                 from ../../src/checked_defs.hh:27,
-                 from ../../src/Checked_Number_defs.hh:28,
-                 from ../../src/checked_numeric_limits.hh:27,
-                 from ../../src/ppl_include_files.hh:3,
+In file included from ../../src/Linear_System_templates.hh:30,
+                 from ../../src/Linear_System_defs.hh:580,
+                 from ../../src/Constraint_System_defs.hh:29,
+                 from ../../src/Box_inlines.hh:28,
+                 from ../../src/Box_defs.hh:2285,
+                 from ../../src/Linear_Form_templates.hh:29,
+                 from ../../src/ppl_include_files.hh:9,
                  from ../../src/ppl_header.hh:38,
                  from ../../tests/ppl_test.hh:27,
-                 from universe1.cc:24:
-/usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
- class __gmp_expr<mpz_t, mpz_t>
-       ^~~~~~~~~~~~~~~~~~~~~~~~
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o affinedimension1 affinedimension1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/addcongruences1 addcongruences1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
+                 from size1.cc:24:
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
+../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
+../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            ? static_cast<SPS_type>(&Scalar_Products::sign)
+                                                          ^
+../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+                                                                  ^
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -93610,8 +93640,8 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/affinedimension1 affinedimension1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o affineimage1 affineimage1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o addconstraints1 addconstraints1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/addcongruences1 addcongruences1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
 In file included from ../../src/CO_Tree_defs.hh:1557,
                  from ../../src/Sparse_Row_defs.hh:29,
                  from ../../src/Linear_Expression_Impl_defs.hh:33,
@@ -93634,7 +93664,8 @@
 /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
  class __gmp_expr<mpz_t, mpz_t>
        ^~~~~~~~~~~~~~~~~~~~~~~~
-/bin/bash ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o affinepreimage1 affinepreimage1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+/bin/sh ../../libtool  --tag=CXX   --mode=link g++  -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall  -Wl,-z,relro -o affinedimension1 affinedimension1.o ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/libppl.la -lgmpxx -lgmp 
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/addconstraints1 addconstraints1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
 In file included from ../../src/Linear_System_templates.hh:30,
                  from ../../src/Linear_System_defs.hh:580,
                  from ../../src/Constraint_System_defs.hh:29,
@@ -93659,160507 +93690,160506 @@
 ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
                                                                   ^
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/affineimage1 affineimage1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/affinepreimage1 affinepreimage1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
-Preprocessed source stored into /tmp/cctiZbd8.out file, please attach this to your bugreport.
+Preprocessed source stored into /tmp/ccIfhANM.out file, please attach this to your bugreport.
 === BEGIN GCC DUMP ===
-40039: // Target: x86_64-linux-gnu
-40039: // Configured with: ../src/configure -v --with-pkgversion='Debian 8.3.0-6' --with-bugurl=file:///usr/share/doc/gcc-8/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-8 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
-40039: // Thread model: posix
-40039: // gcc version 8.3.0 (Debian 8.3.0-6) 
-40039: // 
-40039: // In file included from ../../src/CO_Tree_defs.hh:1557,
-40039: //                  from ../../src/Sparse_Row_defs.hh:29,
-40039: //                  from ../../src/Linear_Expression_Impl_defs.hh:33,
-40039: //                  from ../../src/ppl_include_files.hh:8,
-40039: //                  from ../../src/ppl_header.hh:38,
-40039: //                  from ../../tests/ppl_test.hh:27,
-40039: //                  from equals1.cc:25:
-40039: // ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
-40039: // ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
-40039: //    std::memcpy(&to, &from, sizeof(data_type));
-40039: //                                             ^
-40039: // In file included from ../../src/mp_std_bits_defs.hh:28,
-40039: //                  from ../../src/checked_defs.hh:27,
-40039: //                  from ../../src/Checked_Number_defs.hh:28,
-40039: //                  from ../../src/checked_numeric_limits.hh:27,
-40039: //                  from ../../src/ppl_include_files.hh:3,
-40039: //                  from ../../src/ppl_header.hh:38,
-40039: //                  from ../../tests/ppl_test.hh:27,
-40039: //                  from equals1.cc:25:
-40039: // /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
-40039: //  class __gmp_expr<mpz_t, mpz_t>
-40039: //        ^~~~~~~~~~~~~~~~~~~~~~~~
-40039: // In file included from ../../src/Linear_System_templates.hh:30,
-40039: //                  from ../../src/Linear_System_defs.hh:580,
-40039: //                  from ../../src/Constraint_System_defs.hh:29,
-40039: //                  from ../../src/Box_inlines.hh:28,
-40039: //                  from ../../src/Box_defs.hh:2285,
-40039: //                  from ../../src/Linear_Form_templates.hh:29,
-40039: //                  from ../../src/ppl_include_files.hh:9,
-40039: //                  from ../../src/ppl_header.hh:38,
-40039: //                  from ../../tests/ppl_test.hh:27,
-40039: //                  from equals1.cc:25:
-40039: // ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
-40039: // ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-40039: //             ? static_cast<SPS_type>(&Scalar_Products::sign)
-40039: //                                                           ^
-40039: // ../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-40039: //             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-40039: //                                                                   ^
-40039: // ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
-40039: // ../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-40039: //             ? static_cast<SPS_type>(&Scalar_Products::sign)
-40039: //                                                           ^
-40039: // ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
-40039: //             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-40039: //                                                                   ^
-40039: // In file included from ../../src/Pointset_Powerset_defs.hh:1454,
-40039: //                  from ../../src/algorithms.hh:28,
-40039: //                  from ../../src/ppl_include_files.hh:18,
-40039: //                  from ../../src/ppl_header.hh:38,
-40039: //                  from ../../tests/ppl_test.hh:27,
-40039: //                  from equals1.cc:25:
-40039: // ../../src/Pointset_Powerset_templates.hh: In instantiation of 'Parma_Polyhedra_Library::Pointset_Powerset<PSET>::Pointset_Powerset(const Parma_Polyhedra_Library::Pointset_Powerset<QH>&, Parma_Polyhedra_Library::Complexity_Class) [with QH = Parma_Polyhedra_Library::Box<Parma_Polyhedra_Library::Interval<__gmp_expr<__mpq_struct [1], __mpq_struct [1]>, Parma_Polyhedra_Library::Interval_Info_Bitset<unsigned int, Parma_Polyhedra_Library::Test::Rational_Real_Open_Interval_Info_Policy> > >; PSET = Parma_Polyhedra_Library::NNC_Polyhedron]':
-40039: // ../../src/Pointset_Powerset_inlines.hh:262:43:   required from 'bool Parma_Polyhedra_Library::Pointset_Powerset<PSET>::geometrically_equals(const Parma_Polyhedra_Library::Pointset_Powerset<PSET>&) const [with PSET = Parma_Polyhedra_Library::Box<Parma_Polyhedra_Library::Interval<__gmp_expr<__mpq_struct [1], __mpq_struct [1]>, Parma_Polyhedra_Library::Interval_Info_Bitset<unsigned int, Parma_Polyhedra_Library::Test::Rational_Real_Open_Interval_Info_Policy> > >]'
-40039: // equals1.cc:44:50:   required from here
-40039: // ../../src/Pointset_Powerset_templates.hh:66:29: internal compiler error: in type_dependent_expression_p, at cp/pt.c:25195
-40039: //           y_end = y.end(); i != y_end; ++i) {
-40039: //                            ~~^~~~~~~~
-40039: // Please submit a full bug report,
-40039: // with preprocessed source if appropriate.
-40039: // See <file:///usr/share/doc/gcc-8/README.Bugs> for instructions.
-40039: 
-40039: // /usr/lib/gcc/x86_64-linux-gnu/8/cc1plus -quiet -I . -I ../.. -I ../../src -I ../../src -I ../../tests -I ../../utils -imultiarch x86_64-linux-gnu -D_GNU_SOURCE -D HAVE_CONFIG_H -D NDEBUG=1 -D _FORTIFY_SOURCE=2 equals1.cc -quiet -dumpbase equals1.cc -mtune=generic -march=x86-64 -auxbase-strip equals1.o -g -g -g -O2 -O2 -Wdate-time -Wformat=1 -Werror=format-security -Wextra -Wall -frounding-math -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -fpermissive -o - -frandom-seed=0 -fdump-noaddr
-40039: 
-40039: # 1 "equals1.cc"
-40039: # 1 "/build/ppl-1.2/tests/Powerset//"
-40039: # 1 "<built-in>"
-40039: # 1 "<command-line>"
-40039: # 1 "/usr/include/stdc-predef.h" 1 3 4
-40039: # 1 "<command-line>" 2
-40039: # 1 "equals1.cc"
-40039: # 25 "equals1.cc"
-40039: # 1 "../../tests/ppl_test.hh" 1
-40039: # 27 "../../tests/ppl_test.hh"
-40039: # 1 "../../src/ppl_header.hh" 1
-40039: # 36 "../../src/ppl_header.hh"
-40039: # 1 "../../ppl-config.h" 1
-40039: # 402 "../../ppl-config.h"
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stdint.h" 1 3 4
-40039: # 9 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stdint.h" 3 4
-40039: # 1 "/usr/include/stdint.h" 1 3 4
-40039: # 26 "/usr/include/stdint.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 1 3 4
-40039: # 33 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 3 4
-40039: # 1 "/usr/include/features.h" 1 3 4
-40039: # 424 "/usr/include/features.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 1 3 4
-40039: # 442 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
-40039: # 443 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/long-double.h" 1 3 4
-40039: # 444 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4
-40039: # 425 "/usr/include/features.h" 2 3 4
-40039: # 448 "/usr/include/features.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 1 3 4
-40039: # 10 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/gnu/stubs-64.h" 1 3 4
-40039: # 11 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 2 3 4
-40039: # 449 "/usr/include/features.h" 2 3 4
-40039: # 34 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 2 3 4
-40039: # 27 "/usr/include/stdint.h" 2 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types.h" 1 3 4
-40039: # 27 "/usr/include/x86_64-linux-gnu/bits/types.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
-40039: # 28 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: # 30 "/usr/include/x86_64-linux-gnu/bits/types.h" 3 4
-40039: typedef unsigned char __u_char;
-40039: typedef unsigned short int __u_short;
-40039: typedef unsigned int __u_int;
-40039: typedef unsigned long int __u_long;
-40039: 
-40039: 
-40039: typedef signed char __int8_t;
-40039: typedef unsigned char __uint8_t;
-40039: typedef signed short int __int16_t;
-40039: typedef unsigned short int __uint16_t;
-40039: typedef signed int __int32_t;
-40039: typedef unsigned int __uint32_t;
-40039: 
-40039: typedef signed long int __int64_t;
-40039: typedef unsigned long int __uint64_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __int8_t __int_least8_t;
-40039: typedef __uint8_t __uint_least8_t;
-40039: typedef __int16_t __int_least16_t;
-40039: typedef __uint16_t __uint_least16_t;
-40039: typedef __int32_t __int_least32_t;
-40039: typedef __uint32_t __uint_least32_t;
-40039: typedef __int64_t __int_least64_t;
-40039: typedef __uint64_t __uint_least64_t;
-40039: 
-40039: 
-40039: 
-40039: typedef long int __quad_t;
-40039: typedef unsigned long int __u_quad_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef long int __intmax_t;
-40039: typedef unsigned long int __uintmax_t;
-40039: # 140 "/usr/include/x86_64-linux-gnu/bits/types.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/typesizes.h" 1 3 4
-40039: # 141 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4
-40039: 
-40039: 
-40039: typedef unsigned long int __dev_t;
-40039: typedef unsigned int __uid_t;
-40039: typedef unsigned int __gid_t;
-40039: typedef unsigned long int __ino_t;
-40039: typedef unsigned long int __ino64_t;
-40039: typedef unsigned int __mode_t;
-40039: typedef unsigned long int __nlink_t;
-40039: typedef long int __off_t;
-40039: typedef long int __off64_t;
-40039: typedef int __pid_t;
-40039: typedef struct { int __val[2]; } __fsid_t;
-40039: typedef long int __clock_t;
-40039: typedef unsigned long int __rlim_t;
-40039: typedef unsigned long int __rlim64_t;
-40039: typedef unsigned int __id_t;
-40039: typedef long int __time_t;
-40039: typedef unsigned int __useconds_t;
-40039: typedef long int __suseconds_t;
-40039: 
-40039: typedef int __daddr_t;
-40039: typedef int __key_t;
-40039: 
-40039: 
-40039: typedef int __clockid_t;
-40039: 
-40039: 
-40039: typedef void * __timer_t;
-40039: 
-40039: 
-40039: typedef long int __blksize_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef long int __blkcnt_t;
-40039: typedef long int __blkcnt64_t;
-40039: 
-40039: 
-40039: typedef unsigned long int __fsblkcnt_t;
-40039: typedef unsigned long int __fsblkcnt64_t;
-40039: 
-40039: 
-40039: typedef unsigned long int __fsfilcnt_t;
-40039: typedef unsigned long int __fsfilcnt64_t;
-40039: 
-40039: 
-40039: typedef long int __fsword_t;
-40039: 
-40039: typedef long int __ssize_t;
-40039: 
-40039: 
-40039: typedef long int __syscall_slong_t;
-40039: 
-40039: typedef unsigned long int __syscall_ulong_t;
-40039: 
-40039: 
-40039: 
-40039: typedef __off64_t __loff_t;
-40039: typedef char *__caddr_t;
-40039: 
-40039: 
-40039: typedef long int __intptr_t;
-40039: 
-40039: 
-40039: typedef unsigned int __socklen_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef int __sig_atomic_t;
-40039: # 28 "/usr/include/stdint.h" 2 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/wchar.h" 1 3 4
-40039: # 29 "/usr/include/stdint.h" 2 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
-40039: # 30 "/usr/include/stdint.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/stdint-intn.h" 1 3 4
-40039: # 24 "/usr/include/x86_64-linux-gnu/bits/stdint-intn.h" 3 4
-40039: typedef __int8_t int8_t;
-40039: typedef __int16_t int16_t;
-40039: typedef __int32_t int32_t;
-40039: typedef __int64_t int64_t;
-40039: # 35 "/usr/include/stdint.h" 2 3 4
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h" 1 3 4
-40039: # 24 "/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h" 3 4
-40039: typedef __uint8_t uint8_t;
-40039: typedef __uint16_t uint16_t;
-40039: typedef __uint32_t uint32_t;
-40039: typedef __uint64_t uint64_t;
-40039: # 38 "/usr/include/stdint.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __int_least8_t int_least8_t;
-40039: typedef __int_least16_t int_least16_t;
-40039: typedef __int_least32_t int_least32_t;
-40039: typedef __int_least64_t int_least64_t;
-40039: 
-40039: 
-40039: typedef __uint_least8_t uint_least8_t;
-40039: typedef __uint_least16_t uint_least16_t;
-40039: typedef __uint_least32_t uint_least32_t;
-40039: typedef __uint_least64_t uint_least64_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef signed char int_fast8_t;
-40039: 
-40039: typedef long int int_fast16_t;
-40039: typedef long int int_fast32_t;
-40039: typedef long int int_fast64_t;
-40039: # 71 "/usr/include/stdint.h" 3 4
-40039: typedef unsigned char uint_fast8_t;
-40039: 
-40039: typedef unsigned long int uint_fast16_t;
-40039: typedef unsigned long int uint_fast32_t;
-40039: typedef unsigned long int uint_fast64_t;
-40039: # 87 "/usr/include/stdint.h" 3 4
-40039: typedef long int intptr_t;
-40039: 
-40039: 
-40039: typedef unsigned long int uintptr_t;
-40039: # 101 "/usr/include/stdint.h" 3 4
-40039: typedef __intmax_t intmax_t;
-40039: typedef __uintmax_t uintmax_t;
-40039: # 10 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stdint.h" 2 3 4
-40039: # 403 "../../ppl-config.h" 2
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/inttypes.h" 1 3 4
-40039: # 266 "/usr/include/inttypes.h" 3 4
-40039: extern "C" {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef struct
-40039:   {
-40039:     long int quot;
-40039:     long int rem;
-40039:   } imaxdiv_t;
-40039: # 290 "/usr/include/inttypes.h" 3 4
-40039: extern intmax_t imaxabs (intmax_t __n) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern imaxdiv_t imaxdiv (intmax_t __numer, intmax_t __denom)
-40039:       throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern intmax_t strtoimax (const char *__restrict __nptr,
-40039:       char **__restrict __endptr, int __base) throw ();
-40039: 
-40039: 
-40039: extern uintmax_t strtoumax (const char *__restrict __nptr,
-40039:        char ** __restrict __endptr, int __base) throw ();
-40039: 
-40039: 
-40039: extern intmax_t wcstoimax (const wchar_t *__restrict __nptr,
-40039:       wchar_t **__restrict __endptr, int __base)
-40039:      throw ();
-40039: 
-40039: 
-40039: extern uintmax_t wcstoumax (const wchar_t *__restrict __nptr,
-40039:        wchar_t ** __restrict __endptr, int __base)
-40039:      throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long int __strtol_internal (const char *__restrict __nptr,
-40039:        char **__restrict __endptr,
-40039:        int __base, int __group)
-40039:   throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: extern __inline __attribute__ ((__gnu_inline__)) intmax_t
-40039: __attribute__ ((__leaf__)) strtoimax (const char *__restrict nptr, char **__restrict endptr, int base) throw ()
-40039: 
-40039: {
-40039:   return __strtol_internal (nptr, endptr, base, 0);
-40039: }
-40039: 
-40039: extern unsigned long int __strtoul_internal (const char *__restrict __nptr,
-40039:           char ** __restrict __endptr,
-40039:           int __base, int __group)
-40039:   throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: extern __inline __attribute__ ((__gnu_inline__)) uintmax_t
-40039: __attribute__ ((__leaf__)) strtoumax (const char *__restrict nptr, char **__restrict endptr, int base) throw ()
-40039: 
-40039: {
-40039:   return __strtoul_internal (nptr, endptr, base, 0);
-40039: }
-40039: 
-40039: extern long int __wcstol_internal (const wchar_t * __restrict __nptr,
-40039:        wchar_t **__restrict __endptr,
-40039:        int __base, int __group)
-40039:   throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: extern __inline __attribute__ ((__gnu_inline__)) intmax_t
-40039: __attribute__ ((__leaf__)) wcstoimax (const wchar_t *__restrict nptr, wchar_t **__restrict endptr, int base) throw ()
-40039: 
-40039: {
-40039:   return __wcstol_internal (nptr, endptr, base, 0);
-40039: }
-40039: 
-40039: extern unsigned long int __wcstoul_internal (const wchar_t *
-40039:           __restrict __nptr,
-40039:           wchar_t **
-40039:           __restrict __endptr,
-40039:           int __base, int __group)
-40039:   throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: extern __inline __attribute__ ((__gnu_inline__)) uintmax_t
-40039: __attribute__ ((__leaf__)) wcstoumax (const wchar_t *__restrict nptr, wchar_t **__restrict endptr, int base) throw ()
-40039: 
-40039: {
-40039:   return __wcstoul_internal (nptr, endptr, base, 0);
-40039: }
-40039: # 432 "/usr/include/inttypes.h" 3 4
-40039: }
-40039: # 407 "../../ppl-config.h" 2
-40039: # 37 "../../src/ppl_header.hh" 2
-40039: # 1 "../../src/version.hh" 1
-40039: # 61 "../../src/version.hh"
-40039: 
-40039: # 61 "../../src/version.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: unsigned
-40039: version_major();
-40039: 
-40039: 
-40039: unsigned
-40039: version_minor();
-40039: 
-40039: 
-40039: unsigned
-40039: version_revision();
-40039: 
-40039: 
-40039: unsigned
-40039: version_beta();
-40039: 
-40039: 
-40039: const char* version();
-40039: # 92 "../../src/version.hh"
-40039: const char* banner();
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 38 "../../src/ppl_header.hh" 2
-40039: # 1 "../../src/ppl_include_files.hh" 1
-40039: # 1 "../../src/namespaces.hh" 1
-40039: # 28 "../../src/namespaces.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: # 58 "../../src/namespaces.hh"
-40039: namespace IO_Operators {
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace Checked {
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace Implementation {
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace Interfaces {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace C {
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace Java {
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace OCaml {
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace Prolog {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace Ciao {
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace GNU {
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace SICStus {
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace SWI {
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace XSB {
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace YAP {
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 180 "../../src/namespaces.hh"
-40039: namespace std {
-40039: }
-40039: # 2 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/Interval_Info_types.hh" 1
-40039: # 16 "../../src/Interval_Info_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Policy>
-40039: class Interval_Info_Null;
-40039: 
-40039: template <typename T, typename Policy>
-40039: class Interval_Info_Bitset;
-40039: 
-40039: }
-40039: # 3 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/checked_numeric_limits.hh" 1
-40039: # 27 "../../src/checked_numeric_limits.hh"
-40039: # 1 "../../src/Checked_Number_defs.hh" 1
-40039: # 27 "../../src/Checked_Number_defs.hh"
-40039: # 1 "../../src/Checked_Number_types.hh" 1
-40039: # 16 "../../src/Checked_Number_types.hh"
-40039: # 1 "../../src/Coefficient_traits_template.hh" 1
-40039: # 27 "../../src/Coefficient_traits_template.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Coefficient>
-40039: struct Coefficient_traits_template {
-40039: };
-40039: 
-40039: }
-40039: # 17 "../../src/Checked_Number_types.hh" 2
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: struct Extended_Number_Policy;
-40039: 
-40039: template <typename T, typename Policy>
-40039: class Checked_Number;
-40039: 
-40039: }
-40039: # 28 "../../src/Checked_Number_defs.hh" 2
-40039: # 1 "../../src/checked_defs.hh" 1
-40039: # 27 "../../src/checked_defs.hh"
-40039: # 1 "../../src/mp_std_bits_defs.hh" 1
-40039: # 28 "../../src/mp_std_bits_defs.hh"
-40039: # 1 "/usr/include/gmpxx.h" 1 3 4
-40039: # 34 "/usr/include/gmpxx.h" 3 4
-40039: # 1 "/usr/include/c++/8/iosfwd" 1 3 4
-40039: # 36 "/usr/include/c++/8/iosfwd" 3 4
-40039:        
-40039: # 37 "/usr/include/c++/8/iosfwd" 3
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h" 1 3
-40039: # 236 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h" 3
-40039: 
-40039: # 236 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h" 3
-40039: namespace std
-40039: {
-40039:   typedef long unsigned int size_t;
-40039:   typedef long int ptrdiff_t;
-40039: 
-40039: 
-40039:   typedef decltype(nullptr) nullptr_t;
-40039: 
-40039: }
-40039: # 258 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h" 3
-40039: namespace std
-40039: {
-40039:   inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
-40039: }
-40039: namespace __gnu_cxx
-40039: {
-40039:   inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
-40039: }
-40039: # 508 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h" 3
-40039: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/os_defines.h" 1 3
-40039: # 509 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h" 2 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/cpu_defines.h" 1 3
-40039: # 512 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h" 2 3
-40039: # 39 "/usr/include/c++/8/iosfwd" 2 3
-40039: # 1 "/usr/include/c++/8/bits/stringfwd.h" 1 3
-40039: # 37 "/usr/include/c++/8/bits/stringfwd.h" 3
-40039:        
-40039: # 38 "/usr/include/c++/8/bits/stringfwd.h" 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/memoryfwd.h" 1 3
-40039: # 46 "/usr/include/c++/8/bits/memoryfwd.h" 3
-40039:        
-40039: # 47 "/usr/include/c++/8/bits/memoryfwd.h" 3
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 63 "/usr/include/c++/8/bits/memoryfwd.h" 3
-40039:   template<typename>
-40039:     class allocator;
-40039: 
-40039:   template<>
-40039:     class allocator<void>;
-40039: 
-40039: 
-40039:   template<typename, typename>
-40039:     struct uses_allocator;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 41 "/usr/include/c++/8/bits/stringfwd.h" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<class _CharT>
-40039:     struct char_traits;
-40039: 
-40039:   template<> struct char_traits<char>;
-40039: 
-40039: 
-40039:   template<> struct char_traits<wchar_t>;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<> struct char_traits<char16_t>;
-40039:   template<> struct char_traits<char32_t>;
-40039: 
-40039: 
-40039: namespace __cxx11 {
-40039: 
-40039:   template<typename _CharT, typename _Traits = char_traits<_CharT>,
-40039:            typename _Alloc = allocator<_CharT> >
-40039:     class basic_string;
-40039: 
-40039: 
-40039:   typedef basic_string<char> string;
-40039: 
-40039: 
-40039: 
-40039:   typedef basic_string<wchar_t> wstring;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef basic_string<char16_t> u16string;
-40039: 
-40039: 
-40039:   typedef basic_string<char32_t> u32string;
-40039: 
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 40 "/usr/include/c++/8/iosfwd" 2 3
-40039: # 1 "/usr/include/c++/8/bits/postypes.h" 1 3
-40039: # 38 "/usr/include/c++/8/bits/postypes.h" 3
-40039:        
-40039: # 39 "/usr/include/c++/8/bits/postypes.h" 3
-40039: 
-40039: # 1 "/usr/include/c++/8/cwchar" 1 3
-40039: # 39 "/usr/include/c++/8/cwchar" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/cwchar" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/wchar.h" 1 3 4
-40039: # 27 "/usr/include/wchar.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 1 3 4
-40039: # 28 "/usr/include/wchar.h" 2 3 4
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/floatn.h" 1 3 4
-40039: # 75 "/usr/include/x86_64-linux-gnu/bits/floatn.h" 3 4
-40039: typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__TC__)));
-40039: # 87 "/usr/include/x86_64-linux-gnu/bits/floatn.h" 3 4
-40039: typedef __float128 _Float128;
-40039: # 120 "/usr/include/x86_64-linux-gnu/bits/floatn.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/floatn-common.h" 1 3 4
-40039: # 24 "/usr/include/x86_64-linux-gnu/bits/floatn-common.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/long-double.h" 1 3 4
-40039: # 25 "/usr/include/x86_64-linux-gnu/bits/floatn-common.h" 2 3 4
-40039: # 214 "/usr/include/x86_64-linux-gnu/bits/floatn-common.h" 3 4
-40039: typedef float _Float32;
-40039: # 251 "/usr/include/x86_64-linux-gnu/bits/floatn-common.h" 3 4
-40039: typedef double _Float64;
-40039: # 268 "/usr/include/x86_64-linux-gnu/bits/floatn-common.h" 3 4
-40039: typedef double _Float32x;
-40039: # 285 "/usr/include/x86_64-linux-gnu/bits/floatn-common.h" 3 4
-40039: typedef long double _Float64x;
-40039: # 121 "/usr/include/x86_64-linux-gnu/bits/floatn.h" 2 3 4
-40039: # 31 "/usr/include/wchar.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
-40039: # 216 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 3 4
-40039: typedef long unsigned int size_t;
-40039: # 36 "/usr/include/wchar.h" 2 3 4
-40039: 
-40039: 
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stdarg.h" 1 3 4
-40039: # 40 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stdarg.h" 3 4
-40039: typedef __builtin_va_list __gnuc_va_list;
-40039: # 39 "/usr/include/wchar.h" 2 3 4
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types/wint_t.h" 1 3 4
-40039: # 20 "/usr/include/x86_64-linux-gnu/bits/types/wint_t.h" 3 4
-40039: typedef unsigned int wint_t;
-40039: # 42 "/usr/include/wchar.h" 2 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h" 1 3 4
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h" 1 3 4
-40039: # 13 "/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h" 3 4
-40039: typedef struct
-40039: {
-40039:   int __count;
-40039:   union
-40039:   {
-40039:     unsigned int __wch;
-40039:     char __wchb[4];
-40039:   } __value;
-40039: } __mbstate_t;
-40039: # 5 "/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h" 2 3 4
-40039: 
-40039: typedef __mbstate_t mbstate_t;
-40039: # 43 "/usr/include/wchar.h" 2 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types/__FILE.h" 1 3 4
-40039: 
-40039: 
-40039: 
-40039: struct _IO_FILE;
-40039: typedef struct _IO_FILE __FILE;
-40039: # 44 "/usr/include/wchar.h" 2 3 4
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types/FILE.h" 1 3 4
-40039: 
-40039: 
-40039: 
-40039: struct _IO_FILE;
-40039: 
-40039: 
-40039: typedef struct _IO_FILE FILE;
-40039: # 47 "/usr/include/wchar.h" 2 3 4
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types/locale_t.h" 1 3 4
-40039: # 22 "/usr/include/x86_64-linux-gnu/bits/types/locale_t.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h" 1 3 4
-40039: # 28 "/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h" 3 4
-40039: struct __locale_struct
-40039: {
-40039: 
-40039:   struct __locale_data *__locales[13];
-40039: 
-40039: 
-40039:   const unsigned short int *__ctype_b;
-40039:   const int *__ctype_tolower;
-40039:   const int *__ctype_toupper;
-40039: 
-40039: 
-40039:   const char *__names[13];
-40039: };
-40039: 
-40039: typedef struct __locale_struct *__locale_t;
-40039: # 23 "/usr/include/x86_64-linux-gnu/bits/types/locale_t.h" 2 3 4
-40039: 
-40039: typedef __locale_t locale_t;
-40039: # 50 "/usr/include/wchar.h" 2 3 4
-40039: # 79 "/usr/include/wchar.h" 3 4
-40039: extern "C" {
-40039: 
-40039: 
-40039: 
-40039: struct tm;
-40039: 
-40039: 
-40039: 
-40039: extern wchar_t *wcscpy (wchar_t *__restrict __dest,
-40039:    const wchar_t *__restrict __src)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern wchar_t *wcsncpy (wchar_t *__restrict __dest,
-40039:     const wchar_t *__restrict __src, size_t __n)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern wchar_t *wcscat (wchar_t *__restrict __dest,
-40039:    const wchar_t *__restrict __src)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: extern wchar_t *wcsncat (wchar_t *__restrict __dest,
-40039:     const wchar_t *__restrict __src, size_t __n)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern int wcscmp (const wchar_t *__s1, const wchar_t *__s2)
-40039:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: extern int wcsncmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n)
-40039:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: 
-40039: extern int wcscasecmp (const wchar_t *__s1, const wchar_t *__s2) throw ();
-40039: 
-40039: 
-40039: extern int wcsncasecmp (const wchar_t *__s1, const wchar_t *__s2,
-40039:    size_t __n) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int wcscasecmp_l (const wchar_t *__s1, const wchar_t *__s2,
-40039:     locale_t __loc) throw ();
-40039: 
-40039: extern int wcsncasecmp_l (const wchar_t *__s1, const wchar_t *__s2,
-40039:      size_t __n, locale_t __loc) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int wcscoll (const wchar_t *__s1, const wchar_t *__s2) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern size_t wcsxfrm (wchar_t *__restrict __s1,
-40039:          const wchar_t *__restrict __s2, size_t __n) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int wcscoll_l (const wchar_t *__s1, const wchar_t *__s2,
-40039:         locale_t __loc) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern size_t wcsxfrm_l (wchar_t *__s1, const wchar_t *__s2,
-40039:     size_t __n, locale_t __loc) throw ();
-40039: 
-40039: 
-40039: extern wchar_t *wcsdup (const wchar_t *__s) throw () __attribute__ ((__malloc__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern "C++" wchar_t *wcschr (wchar_t *__wcs, wchar_t __wc)
-40039:      throw () __asm ("wcschr") __attribute__ ((__pure__));
-40039: extern "C++" const wchar_t *wcschr (const wchar_t *__wcs, wchar_t __wc)
-40039:      throw () __asm ("wcschr") __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern "C++" wchar_t *wcsrchr (wchar_t *__wcs, wchar_t __wc)
-40039:      throw () __asm ("wcsrchr") __attribute__ ((__pure__));
-40039: extern "C++" const wchar_t *wcsrchr (const wchar_t *__wcs, wchar_t __wc)
-40039:      throw () __asm ("wcsrchr") __attribute__ ((__pure__));
-40039: # 181 "/usr/include/wchar.h" 3 4
-40039: extern wchar_t *wcschrnul (const wchar_t *__s, wchar_t __wc)
-40039:      throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern size_t wcscspn (const wchar_t *__wcs, const wchar_t *__reject)
-40039:      throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: extern size_t wcsspn (const wchar_t *__wcs, const wchar_t *__accept)
-40039:      throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: extern "C++" wchar_t *wcspbrk (wchar_t *__wcs, const wchar_t *__accept)
-40039:      throw () __asm ("wcspbrk") __attribute__ ((__pure__));
-40039: extern "C++" const wchar_t *wcspbrk (const wchar_t *__wcs,
-40039:          const wchar_t *__accept)
-40039:      throw () __asm ("wcspbrk") __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern "C++" wchar_t *wcsstr (wchar_t *__haystack, const wchar_t *__needle)
-40039:      throw () __asm ("wcsstr") __attribute__ ((__pure__));
-40039: extern "C++" const wchar_t *wcsstr (const wchar_t *__haystack,
-40039:         const wchar_t *__needle)
-40039:      throw () __asm ("wcsstr") __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern wchar_t *wcstok (wchar_t *__restrict __s,
-40039:    const wchar_t *__restrict __delim,
-40039:    wchar_t **__restrict __ptr) throw ();
-40039: 
-40039: 
-40039: extern size_t wcslen (const wchar_t *__s) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern "C++" wchar_t *wcswcs (wchar_t *__haystack, const wchar_t *__needle)
-40039:      throw () __asm ("wcswcs") __attribute__ ((__pure__));
-40039: extern "C++" const wchar_t *wcswcs (const wchar_t *__haystack,
-40039:         const wchar_t *__needle)
-40039:      throw () __asm ("wcswcs") __attribute__ ((__pure__));
-40039: # 240 "/usr/include/wchar.h" 3 4
-40039: extern size_t wcsnlen (const wchar_t *__s, size_t __maxlen)
-40039:      throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern "C++" wchar_t *wmemchr (wchar_t *__s, wchar_t __c, size_t __n)
-40039:      throw () __asm ("wmemchr") __attribute__ ((__pure__));
-40039: extern "C++" const wchar_t *wmemchr (const wchar_t *__s, wchar_t __c,
-40039:          size_t __n)
-40039:      throw () __asm ("wmemchr") __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int wmemcmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n)
-40039:      throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: extern wchar_t *wmemcpy (wchar_t *__restrict __s1,
-40039:     const wchar_t *__restrict __s2, size_t __n) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern wchar_t *wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n)
-40039:      throw ();
-40039: 
-40039: 
-40039: extern wchar_t *wmemset (wchar_t *__s, wchar_t __c, size_t __n) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern wchar_t *wmempcpy (wchar_t *__restrict __s1,
-40039:      const wchar_t *__restrict __s2, size_t __n)
-40039:      throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern wint_t btowc (int __c) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int wctob (wint_t __c) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int mbsinit (const mbstate_t *__ps) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: 
-40039: extern size_t mbrtowc (wchar_t *__restrict __pwc,
-40039:          const char *__restrict __s, size_t __n,
-40039:          mbstate_t *__restrict __p) throw ();
-40039: 
-40039: 
-40039: extern size_t wcrtomb (char *__restrict __s, wchar_t __wc,
-40039:          mbstate_t *__restrict __ps) throw ();
-40039: 
-40039: 
-40039: extern size_t __mbrlen (const char *__restrict __s, size_t __n,
-40039:    mbstate_t *__restrict __ps) throw ();
-40039: extern size_t mbrlen (const char *__restrict __s, size_t __n,
-40039:         mbstate_t *__restrict __ps) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern wint_t __btowc_alias (int __c) __asm ("btowc");
-40039: extern __inline __attribute__ ((__gnu_inline__)) wint_t
-40039: __attribute__ ((__leaf__)) btowc (int __c) throw ()
-40039: { return (__builtin_constant_p (__c) && __c >= '\0' && __c <= '\x7f'
-40039:    ? (wint_t) __c : __btowc_alias (__c)); }
-40039: 
-40039: extern int __wctob_alias (wint_t __c) __asm ("wctob");
-40039: extern __inline __attribute__ ((__gnu_inline__)) int
-40039: __attribute__ ((__leaf__)) wctob (wint_t __wc) throw ()
-40039: { return (__builtin_constant_p (__wc) && __wc >= L'\0' && __wc <= L'\x7f'
-40039:    ? (int) __wc : __wctob_alias (__wc)); }
-40039: 
-40039: extern __inline __attribute__ ((__gnu_inline__)) size_t
-40039: __attribute__ ((__leaf__)) mbrlen (const char *__restrict __s, size_t __n, mbstate_t *__restrict __ps) throw ()
-40039: 
-40039: { return (__ps != __null
-40039:    ? mbrtowc (__null, __s, __n, __ps) : __mbrlen (__s, __n, __null)); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern size_t mbsrtowcs (wchar_t *__restrict __dst,
-40039:     const char **__restrict __src, size_t __len,
-40039:     mbstate_t *__restrict __ps) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern size_t wcsrtombs (char *__restrict __dst,
-40039:     const wchar_t **__restrict __src, size_t __len,
-40039:     mbstate_t *__restrict __ps) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern size_t mbsnrtowcs (wchar_t *__restrict __dst,
-40039:      const char **__restrict __src, size_t __nmc,
-40039:      size_t __len, mbstate_t *__restrict __ps) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern size_t wcsnrtombs (char *__restrict __dst,
-40039:      const wchar_t **__restrict __src,
-40039:      size_t __nwc, size_t __len,
-40039:      mbstate_t *__restrict __ps) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int wcwidth (wchar_t __c) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int wcswidth (const wchar_t *__s, size_t __n) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern double wcstod (const wchar_t *__restrict __nptr,
-40039:         wchar_t **__restrict __endptr) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern float wcstof (const wchar_t *__restrict __nptr,
-40039:        wchar_t **__restrict __endptr) throw ();
-40039: extern long double wcstold (const wchar_t *__restrict __nptr,
-40039:        wchar_t **__restrict __endptr) throw ();
-40039: # 396 "/usr/include/wchar.h" 3 4
-40039: extern _Float32 wcstof32 (const wchar_t *__restrict __nptr,
-40039:      wchar_t **__restrict __endptr) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 wcstof64 (const wchar_t *__restrict __nptr,
-40039:      wchar_t **__restrict __endptr) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 wcstof128 (const wchar_t *__restrict __nptr,
-40039:        wchar_t **__restrict __endptr) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x wcstof32x (const wchar_t *__restrict __nptr,
-40039:        wchar_t **__restrict __endptr) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x wcstof64x (const wchar_t *__restrict __nptr,
-40039:        wchar_t **__restrict __endptr) throw ();
-40039: # 428 "/usr/include/wchar.h" 3 4
-40039: extern long int wcstol (const wchar_t *__restrict __nptr,
-40039:    wchar_t **__restrict __endptr, int __base) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern unsigned long int wcstoul (const wchar_t *__restrict __nptr,
-40039:       wchar_t **__restrict __endptr, int __base)
-40039:      throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: __extension__
-40039: extern long long int wcstoll (const wchar_t *__restrict __nptr,
-40039:          wchar_t **__restrict __endptr, int __base)
-40039:      throw ();
-40039: 
-40039: 
-40039: 
-40039: __extension__
-40039: extern unsigned long long int wcstoull (const wchar_t *__restrict __nptr,
-40039:      wchar_t **__restrict __endptr,
-40039:      int __base) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: __extension__
-40039: extern long long int wcstoq (const wchar_t *__restrict __nptr,
-40039:         wchar_t **__restrict __endptr, int __base)
-40039:      throw ();
-40039: 
-40039: 
-40039: 
-40039: __extension__
-40039: extern unsigned long long int wcstouq (const wchar_t *__restrict __nptr,
-40039:            wchar_t **__restrict __endptr,
-40039:            int __base) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long int wcstol_l (const wchar_t *__restrict __nptr,
-40039:      wchar_t **__restrict __endptr, int __base,
-40039:      locale_t __loc) throw ();
-40039: 
-40039: extern unsigned long int wcstoul_l (const wchar_t *__restrict __nptr,
-40039:         wchar_t **__restrict __endptr,
-40039:         int __base, locale_t __loc) throw ();
-40039: 
-40039: __extension__
-40039: extern long long int wcstoll_l (const wchar_t *__restrict __nptr,
-40039:     wchar_t **__restrict __endptr,
-40039:     int __base, locale_t __loc) throw ();
-40039: 
-40039: __extension__
-40039: extern unsigned long long int wcstoull_l (const wchar_t *__restrict __nptr,
-40039:        wchar_t **__restrict __endptr,
-40039:        int __base, locale_t __loc)
-40039:      throw ();
-40039: 
-40039: extern double wcstod_l (const wchar_t *__restrict __nptr,
-40039:    wchar_t **__restrict __endptr, locale_t __loc)
-40039:      throw ();
-40039: 
-40039: extern float wcstof_l (const wchar_t *__restrict __nptr,
-40039:          wchar_t **__restrict __endptr, locale_t __loc)
-40039:      throw ();
-40039: 
-40039: extern long double wcstold_l (const wchar_t *__restrict __nptr,
-40039:          wchar_t **__restrict __endptr,
-40039:          locale_t __loc) throw ();
-40039: # 511 "/usr/include/wchar.h" 3 4
-40039: extern _Float32 wcstof32_l (const wchar_t *__restrict __nptr,
-40039:        wchar_t **__restrict __endptr,
-40039:        locale_t __loc) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 wcstof64_l (const wchar_t *__restrict __nptr,
-40039:        wchar_t **__restrict __endptr,
-40039:        locale_t __loc) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 wcstof128_l (const wchar_t *__restrict __nptr,
-40039:          wchar_t **__restrict __endptr,
-40039:          locale_t __loc) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x wcstof32x_l (const wchar_t *__restrict __nptr,
-40039:          wchar_t **__restrict __endptr,
-40039:          locale_t __loc) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x wcstof64x_l (const wchar_t *__restrict __nptr,
-40039:          wchar_t **__restrict __endptr,
-40039:          locale_t __loc) throw ();
-40039: # 551 "/usr/include/wchar.h" 3 4
-40039: extern wchar_t *wcpcpy (wchar_t *__restrict __dest,
-40039:    const wchar_t *__restrict __src) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern wchar_t *wcpncpy (wchar_t *__restrict __dest,
-40039:     const wchar_t *__restrict __src, size_t __n)
-40039:      throw ();
-40039: # 567 "/usr/include/wchar.h" 3 4
-40039: extern __FILE *open_wmemstream (wchar_t **__bufloc, size_t *__sizeloc) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int fwide (__FILE *__fp, int __mode) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int fwprintf (__FILE *__restrict __stream,
-40039:        const wchar_t *__restrict __format, ...)
-40039:                                                            ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int wprintf (const wchar_t *__restrict __format, ...)
-40039:                                                            ;
-40039: 
-40039: extern int swprintf (wchar_t *__restrict __s, size_t __n,
-40039:        const wchar_t *__restrict __format, ...)
-40039:      throw () ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int vfwprintf (__FILE *__restrict __s,
-40039:         const wchar_t *__restrict __format,
-40039:         __gnuc_va_list __arg)
-40039:                                                            ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int vwprintf (const wchar_t *__restrict __format,
-40039:        __gnuc_va_list __arg)
-40039:                                                            ;
-40039: 
-40039: 
-40039: extern int vswprintf (wchar_t *__restrict __s, size_t __n,
-40039:         const wchar_t *__restrict __format,
-40039:         __gnuc_va_list __arg)
-40039:      throw () ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int fwscanf (__FILE *__restrict __stream,
-40039:       const wchar_t *__restrict __format, ...)
-40039:                                                           ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int wscanf (const wchar_t *__restrict __format, ...)
-40039:                                                           ;
-40039: 
-40039: extern int swscanf (const wchar_t *__restrict __s,
-40039:       const wchar_t *__restrict __format, ...)
-40039:      throw () ;
-40039: # 673 "/usr/include/wchar.h" 3 4
-40039: extern int vfwscanf (__FILE *__restrict __s,
-40039:        const wchar_t *__restrict __format,
-40039:        __gnuc_va_list __arg)
-40039:                                                           ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int vwscanf (const wchar_t *__restrict __format,
-40039:       __gnuc_va_list __arg)
-40039:                                                           ;
-40039: 
-40039: extern int vswscanf (const wchar_t *__restrict __s,
-40039:        const wchar_t *__restrict __format,
-40039:        __gnuc_va_list __arg)
-40039:      throw () ;
-40039: # 727 "/usr/include/wchar.h" 3 4
-40039: extern wint_t fgetwc (__FILE *__stream);
-40039: extern wint_t getwc (__FILE *__stream);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern wint_t getwchar (void);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern wint_t fputwc (wchar_t __wc, __FILE *__stream);
-40039: extern wint_t putwc (wchar_t __wc, __FILE *__stream);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern wint_t putwchar (wchar_t __wc);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n,
-40039:    __FILE *__restrict __stream);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int fputws (const wchar_t *__restrict __ws,
-40039:      __FILE *__restrict __stream);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern wint_t ungetwc (wint_t __wc, __FILE *__stream);
-40039: # 782 "/usr/include/wchar.h" 3 4
-40039: extern wint_t getwc_unlocked (__FILE *__stream);
-40039: extern wint_t getwchar_unlocked (void);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern wint_t fgetwc_unlocked (__FILE *__stream);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern wint_t fputwc_unlocked (wchar_t __wc, __FILE *__stream);
-40039: # 808 "/usr/include/wchar.h" 3 4
-40039: extern wint_t putwc_unlocked (wchar_t __wc, __FILE *__stream);
-40039: extern wint_t putwchar_unlocked (wchar_t __wc);
-40039: # 818 "/usr/include/wchar.h" 3 4
-40039: extern wchar_t *fgetws_unlocked (wchar_t *__restrict __ws, int __n,
-40039:      __FILE *__restrict __stream);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int fputws_unlocked (const wchar_t *__restrict __ws,
-40039:        __FILE *__restrict __stream);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize,
-40039:    const wchar_t *__restrict __format,
-40039:    const struct tm *__restrict __tp) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize,
-40039:      const wchar_t *__restrict __format,
-40039:      const struct tm *__restrict __tp,
-40039:      locale_t __loc) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/wchar2.h" 1 3 4
-40039: # 24 "/usr/include/x86_64-linux-gnu/bits/wchar2.h" 3 4
-40039: extern wchar_t *__wmemcpy_chk (wchar_t *__restrict __s1,
-40039:           const wchar_t *__restrict __s2, size_t __n,
-40039:           size_t __ns1) throw ();
-40039: extern wchar_t *__wmemcpy_alias (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) throw () __asm__ ("" "wmemcpy")
-40039: 
-40039: 
-40039:             ;
-40039: extern wchar_t *__wmemcpy_chk_warn (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n, size_t __ns1) throw () __asm__ ("" "__wmemcpy_chk")
-40039: 
-40039: 
-40039: 
-40039:      __attribute__((__warning__ ("wmemcpy called with length bigger than size of destination " "buffer")))
-40039:             ;
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
-40039: __attribute__ ((__leaf__)) wmemcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) throw ()
-40039: 
-40039: {
-40039:   if (__builtin_object_size (__s1, 0) != (size_t) -1)
-40039:     {
-40039:       if (!__builtin_constant_p (__n))
-40039:  return __wmemcpy_chk (__s1, __s2, __n,
-40039:          __builtin_object_size (__s1, 0) / sizeof (wchar_t));
-40039: 
-40039:       if (__n > __builtin_object_size (__s1, 0) / sizeof (wchar_t))
-40039:  return __wmemcpy_chk_warn (__s1, __s2, __n,
-40039:        __builtin_object_size (__s1, 0) / sizeof (wchar_t));
-40039:     }
-40039:   return __wmemcpy_alias (__s1, __s2, __n);
-40039: }
-40039: 
-40039: 
-40039: extern wchar_t *__wmemmove_chk (wchar_t *__s1, const wchar_t *__s2,
-40039:     size_t __n, size_t __ns1) throw ();
-40039: extern wchar_t *__wmemmove_alias (wchar_t *__s1, const wchar_t *__s2, size_t __n) throw () __asm__ ("" "wmemmove")
-40039: 
-40039:                                ;
-40039: extern wchar_t *__wmemmove_chk_warn (wchar_t *__s1, const wchar_t *__s2, size_t __n, size_t __ns1) throw () __asm__ ("" "__wmemmove_chk")
-40039: 
-40039: 
-40039:      __attribute__((__warning__ ("wmemmove called with length bigger than size of destination " "buffer")))
-40039:             ;
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
-40039: __attribute__ ((__leaf__)) wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n) throw ()
-40039: {
-40039:   if (__builtin_object_size (__s1, 0) != (size_t) -1)
-40039:     {
-40039:       if (!__builtin_constant_p (__n))
-40039:  return __wmemmove_chk (__s1, __s2, __n,
-40039:           __builtin_object_size (__s1, 0) / sizeof (wchar_t));
-40039: 
-40039:       if (__n > __builtin_object_size (__s1, 0) / sizeof (wchar_t))
-40039:  return __wmemmove_chk_warn (__s1, __s2, __n,
-40039:         __builtin_object_size (__s1, 0) / sizeof (wchar_t));
-40039:     }
-40039:   return __wmemmove_alias (__s1, __s2, __n);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: extern wchar_t *__wmempcpy_chk (wchar_t *__restrict __s1,
-40039:     const wchar_t *__restrict __s2, size_t __n,
-40039:     size_t __ns1) throw ();
-40039: extern wchar_t *__wmempcpy_alias (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) throw () __asm__ ("" "wmempcpy")
-40039: 
-40039: 
-40039:                            ;
-40039: extern wchar_t *__wmempcpy_chk_warn (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n, size_t __ns1) throw () __asm__ ("" "__wmempcpy_chk")
-40039: 
-40039: 
-40039: 
-40039:      __attribute__((__warning__ ("wmempcpy called with length bigger than size of destination " "buffer")))
-40039:             ;
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
-40039: __attribute__ ((__leaf__)) wmempcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) throw ()
-40039: 
-40039: {
-40039:   if (__builtin_object_size (__s1, 0) != (size_t) -1)
-40039:     {
-40039:       if (!__builtin_constant_p (__n))
-40039:  return __wmempcpy_chk (__s1, __s2, __n,
-40039:           __builtin_object_size (__s1, 0) / sizeof (wchar_t));
-40039: 
-40039:       if (__n > __builtin_object_size (__s1, 0) / sizeof (wchar_t))
-40039:  return __wmempcpy_chk_warn (__s1, __s2, __n,
-40039:         __builtin_object_size (__s1, 0) / sizeof (wchar_t));
-40039:     }
-40039:   return __wmempcpy_alias (__s1, __s2, __n);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: extern wchar_t *__wmemset_chk (wchar_t *__s, wchar_t __c, size_t __n,
-40039:           size_t __ns) throw ();
-40039: extern wchar_t *__wmemset_alias (wchar_t *__s, wchar_t __c, size_t __n) throw () __asm__ ("" "wmemset")
-40039:                              ;
-40039: extern wchar_t *__wmemset_chk_warn (wchar_t *__s, wchar_t __c, size_t __n, size_t __ns) throw () __asm__ ("" "__wmemset_chk")
-40039: 
-40039: 
-40039:      __attribute__((__warning__ ("wmemset called with length bigger than size of destination " "buffer")))
-40039:             ;
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
-40039: __attribute__ ((__leaf__)) wmemset (wchar_t *__s, wchar_t __c, size_t __n) throw ()
-40039: {
-40039:   if (__builtin_object_size (__s, 0) != (size_t) -1)
-40039:     {
-40039:       if (!__builtin_constant_p (__n))
-40039:  return __wmemset_chk (__s, __c, __n, __builtin_object_size (__s, 0) / sizeof (wchar_t));
-40039: 
-40039:       if (__n > __builtin_object_size (__s, 0) / sizeof (wchar_t))
-40039:  return __wmemset_chk_warn (__s, __c, __n,
-40039:        __builtin_object_size (__s, 0) / sizeof (wchar_t));
-40039:     }
-40039:   return __wmemset_alias (__s, __c, __n);
-40039: }
-40039: 
-40039: 
-40039: extern wchar_t *__wcscpy_chk (wchar_t *__restrict __dest,
-40039:          const wchar_t *__restrict __src,
-40039:          size_t __n) throw ();
-40039: extern wchar_t *__wcscpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src) throw () __asm__ ("" "wcscpy")
-40039: 
-40039:                                               ;
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
-40039: __attribute__ ((__leaf__)) wcscpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src) throw ()
-40039: {
-40039:   if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1)
-40039:     return __wcscpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t));
-40039:   return __wcscpy_alias (__dest, __src);
-40039: }
-40039: 
-40039: 
-40039: extern wchar_t *__wcpcpy_chk (wchar_t *__restrict __dest,
-40039:          const wchar_t *__restrict __src,
-40039:          size_t __destlen) throw ();
-40039: extern wchar_t *__wcpcpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src) throw () __asm__ ("" "wcpcpy")
-40039: 
-40039:                                               ;
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
-40039: __attribute__ ((__leaf__)) wcpcpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src) throw ()
-40039: {
-40039:   if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1)
-40039:     return __wcpcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t));
-40039:   return __wcpcpy_alias (__dest, __src);
-40039: }
-40039: 
-40039: 
-40039: extern wchar_t *__wcsncpy_chk (wchar_t *__restrict __dest,
-40039:           const wchar_t *__restrict __src, size_t __n,
-40039:           size_t __destlen) throw ();
-40039: extern wchar_t *__wcsncpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) throw () __asm__ ("" "wcsncpy")
-40039: 
-40039: 
-40039:                           ;
-40039: extern wchar_t *__wcsncpy_chk_warn (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n, size_t __destlen) throw () __asm__ ("" "__wcsncpy_chk")
-40039: 
-40039: 
-40039: 
-40039:      __attribute__((__warning__ ("wcsncpy called with length bigger than size of destination " "buffer")))
-40039:             ;
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
-40039: __attribute__ ((__leaf__)) wcsncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) throw ()
-40039: 
-40039: {
-40039:   if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1)
-40039:     {
-40039:       if (!__builtin_constant_p (__n))
-40039:  return __wcsncpy_chk (__dest, __src, __n,
-40039:          __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t));
-40039:       if (__n > __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t))
-40039:  return __wcsncpy_chk_warn (__dest, __src, __n,
-40039:        __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t));
-40039:     }
-40039:   return __wcsncpy_alias (__dest, __src, __n);
-40039: }
-40039: 
-40039: 
-40039: extern wchar_t *__wcpncpy_chk (wchar_t *__restrict __dest,
-40039:           const wchar_t *__restrict __src, size_t __n,
-40039:           size_t __destlen) throw ();
-40039: extern wchar_t *__wcpncpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) throw () __asm__ ("" "wcpncpy")
-40039: 
-40039: 
-40039:                           ;
-40039: extern wchar_t *__wcpncpy_chk_warn (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n, size_t __destlen) throw () __asm__ ("" "__wcpncpy_chk")
-40039: 
-40039: 
-40039: 
-40039:      __attribute__((__warning__ ("wcpncpy called with length bigger than size of destination " "buffer")))
-40039:             ;
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
-40039: __attribute__ ((__leaf__)) wcpncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) throw ()
-40039: 
-40039: {
-40039:   if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1)
-40039:     {
-40039:       if (!__builtin_constant_p (__n))
-40039:  return __wcpncpy_chk (__dest, __src, __n,
-40039:          __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t));
-40039:       if (__n > __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t))
-40039:  return __wcpncpy_chk_warn (__dest, __src, __n,
-40039:        __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t));
-40039:     }
-40039:   return __wcpncpy_alias (__dest, __src, __n);
-40039: }
-40039: 
-40039: 
-40039: extern wchar_t *__wcscat_chk (wchar_t *__restrict __dest,
-40039:          const wchar_t *__restrict __src,
-40039:          size_t __destlen) throw ();
-40039: extern wchar_t *__wcscat_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src) throw () __asm__ ("" "wcscat")
-40039: 
-40039:                                               ;
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
-40039: __attribute__ ((__leaf__)) wcscat (wchar_t *__restrict __dest, const wchar_t *__restrict __src) throw ()
-40039: {
-40039:   if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1)
-40039:     return __wcscat_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t));
-40039:   return __wcscat_alias (__dest, __src);
-40039: }
-40039: 
-40039: 
-40039: extern wchar_t *__wcsncat_chk (wchar_t *__restrict __dest,
-40039:           const wchar_t *__restrict __src,
-40039:           size_t __n, size_t __destlen) throw ();
-40039: extern wchar_t *__wcsncat_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) throw () __asm__ ("" "wcsncat")
-40039: 
-40039: 
-40039:                           ;
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
-40039: __attribute__ ((__leaf__)) wcsncat (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) throw ()
-40039: 
-40039: {
-40039:   if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1)
-40039:     return __wcsncat_chk (__dest, __src, __n,
-40039:      __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t));
-40039:   return __wcsncat_alias (__dest, __src, __n);
-40039: }
-40039: 
-40039: 
-40039: extern int __swprintf_chk (wchar_t *__restrict __s, size_t __n,
-40039:       int __flag, size_t __s_len,
-40039:       const wchar_t *__restrict __format, ...)
-40039:      throw () ;
-40039: 
-40039: extern int __swprintf_alias (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, ...) throw () __asm__ ("" "swprintf")
-40039: 
-40039: 
-40039:              ;
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
-40039: __attribute__ ((__leaf__)) swprintf (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, ...) throw ()
-40039: 
-40039: {
-40039:   if (__builtin_object_size (__s, 2 > 1) != (size_t) -1 || 2 > 1)
-40039:     return __swprintf_chk (__s, __n, 2 - 1,
-40039:       __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t),
-40039:       __fmt, __builtin_va_arg_pack ());
-40039:   return __swprintf_alias (__s, __n, __fmt, __builtin_va_arg_pack ());
-40039: }
-40039: # 303 "/usr/include/x86_64-linux-gnu/bits/wchar2.h" 3 4
-40039: extern int __vswprintf_chk (wchar_t *__restrict __s, size_t __n,
-40039:        int __flag, size_t __s_len,
-40039:        const wchar_t *__restrict __format,
-40039:        __gnuc_va_list __arg)
-40039:      throw () ;
-40039: 
-40039: extern int __vswprintf_alias (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, __gnuc_va_list __ap) throw () __asm__ ("" "vswprintf")
-40039: 
-40039: 
-40039:                                      ;
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
-40039: __attribute__ ((__leaf__)) vswprintf (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, __gnuc_va_list __ap) throw ()
-40039: 
-40039: {
-40039:   if (__builtin_object_size (__s, 2 > 1) != (size_t) -1 || 2 > 1)
-40039:     return __vswprintf_chk (__s, __n, 2 - 1,
-40039:        __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t), __fmt, __ap);
-40039:   return __vswprintf_alias (__s, __n, __fmt, __ap);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int __fwprintf_chk (__FILE *__restrict __stream, int __flag,
-40039:       const wchar_t *__restrict __format, ...);
-40039: extern int __wprintf_chk (int __flag, const wchar_t *__restrict __format,
-40039:      ...);
-40039: extern int __vfwprintf_chk (__FILE *__restrict __stream, int __flag,
-40039:        const wchar_t *__restrict __format,
-40039:        __gnuc_va_list __ap);
-40039: extern int __vwprintf_chk (int __flag, const wchar_t *__restrict __format,
-40039:       __gnuc_va_list __ap);
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
-40039: wprintf (const wchar_t *__restrict __fmt, ...)
-40039: {
-40039:   return __wprintf_chk (2 - 1, __fmt, __builtin_va_arg_pack ());
-40039: }
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
-40039: fwprintf (__FILE *__restrict __stream, const wchar_t *__restrict __fmt, ...)
-40039: {
-40039:   return __fwprintf_chk (__stream, 2 - 1, __fmt,
-40039:     __builtin_va_arg_pack ());
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
-40039: vwprintf (const wchar_t *__restrict __fmt, __gnuc_va_list __ap)
-40039: {
-40039:   return __vwprintf_chk (2 - 1, __fmt, __ap);
-40039: }
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
-40039: vfwprintf (__FILE *__restrict __stream,
-40039:     const wchar_t *__restrict __fmt, __gnuc_va_list __ap)
-40039: {
-40039:   return __vfwprintf_chk (__stream, 2 - 1, __fmt, __ap);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: extern wchar_t *__fgetws_chk (wchar_t *__restrict __s, size_t __size, int __n,
-40039:          __FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
-40039: extern wchar_t *__fgetws_alias (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) __asm__ ("" "fgetws")
-40039: 
-40039:                                               __attribute__ ((__warn_unused_result__));
-40039: extern wchar_t *__fgetws_chk_warn (wchar_t *__restrict __s, size_t __size, int __n, __FILE *__restrict __stream) __asm__ ("" "__fgetws_chk")
-40039: 
-40039: 
-40039:      __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgetws called with bigger size than length " "of destination buffer")))
-40039:                                  ;
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) wchar_t *
-40039: fgetws (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream)
-40039: {
-40039:   if (__builtin_object_size (__s, 2 > 1) != (size_t) -1)
-40039:     {
-40039:       if (!__builtin_constant_p (__n) || __n <= 0)
-40039:  return __fgetws_chk (__s, __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t),
-40039:         __n, __stream);
-40039: 
-40039:       if ((size_t) __n > __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t))
-40039:  return __fgetws_chk_warn (__s, __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t),
-40039:       __n, __stream);
-40039:     }
-40039:   return __fgetws_alias (__s, __n, __stream);
-40039: }
-40039: 
-40039: 
-40039: extern wchar_t *__fgetws_unlocked_chk (wchar_t *__restrict __s, size_t __size,
-40039:            int __n, __FILE *__restrict __stream)
-40039:   __attribute__ ((__warn_unused_result__));
-40039: extern wchar_t *__fgetws_unlocked_alias (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) __asm__ ("" "fgetws_unlocked")
-40039: 
-40039: 
-40039:   __attribute__ ((__warn_unused_result__));
-40039: extern wchar_t *__fgetws_unlocked_chk_warn (wchar_t *__restrict __s, size_t __size, int __n, __FILE *__restrict __stream) __asm__ ("" "__fgetws_unlocked_chk")
-40039: 
-40039: 
-40039: 
-40039:      __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgetws_unlocked called with bigger size than length " "of destination buffer")))
-40039:                                  ;
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) wchar_t *
-40039: fgetws_unlocked (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream)
-40039: {
-40039:   if (__builtin_object_size (__s, 2 > 1) != (size_t) -1)
-40039:     {
-40039:       if (!__builtin_constant_p (__n) || __n <= 0)
-40039:  return __fgetws_unlocked_chk (__s, __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t),
-40039:           __n, __stream);
-40039: 
-40039:       if ((size_t) __n > __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t))
-40039:  return __fgetws_unlocked_chk_warn (__s, __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t),
-40039:         __n, __stream);
-40039:     }
-40039:   return __fgetws_unlocked_alias (__s, __n, __stream);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: extern size_t __wcrtomb_chk (char *__restrict __s, wchar_t __wchar,
-40039:         mbstate_t *__restrict __p,
-40039:         size_t __buflen) throw () __attribute__ ((__warn_unused_result__));
-40039: extern size_t __wcrtomb_alias (char *__restrict __s, wchar_t __wchar, mbstate_t *__restrict __ps) throw () __asm__ ("" "wcrtomb")
-40039: 
-40039:                                                 __attribute__ ((__warn_unused_result__));
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) size_t
-40039: __attribute__ ((__leaf__)) wcrtomb (char *__restrict __s, wchar_t __wchar, mbstate_t *__restrict __ps) throw ()
-40039: 
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (__builtin_object_size (__s, 2 > 1) != (size_t) -1 && 16 > __builtin_object_size (__s, 2 > 1))
-40039:     return __wcrtomb_chk (__s, __wchar, __ps, __builtin_object_size (__s, 2 > 1));
-40039:   return __wcrtomb_alias (__s, __wchar, __ps);
-40039: }
-40039: 
-40039: 
-40039: extern size_t __mbsrtowcs_chk (wchar_t *__restrict __dst,
-40039:           const char **__restrict __src,
-40039:           size_t __len, mbstate_t *__restrict __ps,
-40039:           size_t __dstlen) throw ();
-40039: extern size_t __mbsrtowcs_alias (wchar_t *__restrict __dst, const char **__restrict __src, size_t __len, mbstate_t *__restrict __ps) throw () __asm__ ("" "mbsrtowcs")
-40039: 
-40039: 
-40039: 
-40039:                    ;
-40039: extern size_t __mbsrtowcs_chk_warn (wchar_t *__restrict __dst, const char **__restrict __src, size_t __len, mbstate_t *__restrict __ps, size_t __dstlen) throw () __asm__ ("" "__mbsrtowcs_chk")
-40039: 
-40039: 
-40039: 
-40039: 
-40039:      __attribute__((__warning__ ("mbsrtowcs called with dst buffer smaller than len " "* sizeof (wchar_t)")))
-40039:                         ;
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t
-40039: __attribute__ ((__leaf__)) mbsrtowcs (wchar_t *__restrict __dst, const char **__restrict __src, size_t __len, mbstate_t *__restrict __ps) throw ()
-40039: 
-40039: {
-40039:   if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1)
-40039:     {
-40039:       if (!__builtin_constant_p (__len))
-40039:  return __mbsrtowcs_chk (__dst, __src, __len, __ps,
-40039:     __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t));
-40039: 
-40039:       if (__len > __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t))
-40039:  return __mbsrtowcs_chk_warn (__dst, __src, __len, __ps,
-40039:          __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t));
-40039:     }
-40039:   return __mbsrtowcs_alias (__dst, __src, __len, __ps);
-40039: }
-40039: 
-40039: 
-40039: extern size_t __wcsrtombs_chk (char *__restrict __dst,
-40039:           const wchar_t **__restrict __src,
-40039:           size_t __len, mbstate_t *__restrict __ps,
-40039:           size_t __dstlen) throw ();
-40039: extern size_t __wcsrtombs_alias (char *__restrict __dst, const wchar_t **__restrict __src, size_t __len, mbstate_t *__restrict __ps) throw () __asm__ ("" "wcsrtombs")
-40039: 
-40039: 
-40039: 
-40039:                    ;
-40039: extern size_t __wcsrtombs_chk_warn (char *__restrict __dst, const wchar_t **__restrict __src, size_t __len, mbstate_t *__restrict __ps, size_t __dstlen) throw () __asm__ ("" "__wcsrtombs_chk")
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     __attribute__((__warning__ ("wcsrtombs called with dst buffer smaller than len")));
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t
-40039: __attribute__ ((__leaf__)) wcsrtombs (char *__restrict __dst, const wchar_t **__restrict __src, size_t __len, mbstate_t *__restrict __ps) throw ()
-40039: 
-40039: {
-40039:   if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1)
-40039:     {
-40039:       if (!__builtin_constant_p (__len))
-40039:  return __wcsrtombs_chk (__dst, __src, __len, __ps, __builtin_object_size (__dst, 2 > 1));
-40039: 
-40039:       if (__len > __builtin_object_size (__dst, 2 > 1))
-40039:  return __wcsrtombs_chk_warn (__dst, __src, __len, __ps, __builtin_object_size (__dst, 2 > 1));
-40039:     }
-40039:   return __wcsrtombs_alias (__dst, __src, __len, __ps);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: extern size_t __mbsnrtowcs_chk (wchar_t *__restrict __dst,
-40039:     const char **__restrict __src, size_t __nmc,
-40039:     size_t __len, mbstate_t *__restrict __ps,
-40039:     size_t __dstlen) throw ();
-40039: extern size_t __mbsnrtowcs_alias (wchar_t *__restrict __dst, const char **__restrict __src, size_t __nmc, size_t __len, mbstate_t *__restrict __ps) throw () __asm__ ("" "mbsnrtowcs")
-40039: 
-40039: 
-40039: 
-40039:                     ;
-40039: extern size_t __mbsnrtowcs_chk_warn (wchar_t *__restrict __dst, const char **__restrict __src, size_t __nmc, size_t __len, mbstate_t *__restrict __ps, size_t __dstlen) throw () __asm__ ("" "__mbsnrtowcs_chk")
-40039: 
-40039: 
-40039: 
-40039: 
-40039:      __attribute__((__warning__ ("mbsnrtowcs called with dst buffer smaller than len " "* sizeof (wchar_t)")))
-40039:                         ;
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t
-40039: __attribute__ ((__leaf__)) mbsnrtowcs (wchar_t *__restrict __dst, const char **__restrict __src, size_t __nmc, size_t __len, mbstate_t *__restrict __ps) throw ()
-40039: 
-40039: {
-40039:   if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1)
-40039:     {
-40039:       if (!__builtin_constant_p (__len))
-40039:  return __mbsnrtowcs_chk (__dst, __src, __nmc, __len, __ps,
-40039:      __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t));
-40039: 
-40039:       if (__len > __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t))
-40039:  return __mbsnrtowcs_chk_warn (__dst, __src, __nmc, __len, __ps,
-40039:           __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t));
-40039:     }
-40039:   return __mbsnrtowcs_alias (__dst, __src, __nmc, __len, __ps);
-40039: }
-40039: 
-40039: 
-40039: extern size_t __wcsnrtombs_chk (char *__restrict __dst,
-40039:     const wchar_t **__restrict __src,
-40039:     size_t __nwc, size_t __len,
-40039:     mbstate_t *__restrict __ps, size_t __dstlen)
-40039:      throw ();
-40039: extern size_t __wcsnrtombs_alias (char *__restrict __dst, const wchar_t **__restrict __src, size_t __nwc, size_t __len, mbstate_t *__restrict __ps) throw () __asm__ ("" "wcsnrtombs")
-40039: 
-40039: 
-40039: 
-40039:                                                   ;
-40039: extern size_t __wcsnrtombs_chk_warn (char *__restrict __dst, const wchar_t **__restrict __src, size_t __nwc, size_t __len, mbstate_t *__restrict __ps, size_t __dstlen) throw () __asm__ ("" "__wcsnrtombs_chk")
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:      __attribute__((__warning__ ("wcsnrtombs called with dst buffer smaller than len")));
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t
-40039: __attribute__ ((__leaf__)) wcsnrtombs (char *__restrict __dst, const wchar_t **__restrict __src, size_t __nwc, size_t __len, mbstate_t *__restrict __ps) throw ()
-40039: 
-40039: {
-40039:   if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1)
-40039:     {
-40039:       if (!__builtin_constant_p (__len))
-40039:  return __wcsnrtombs_chk (__dst, __src, __nwc, __len, __ps,
-40039:      __builtin_object_size (__dst, 2 > 1));
-40039: 
-40039:       if (__len > __builtin_object_size (__dst, 2 > 1))
-40039:  return __wcsnrtombs_chk_warn (__dst, __src, __nwc, __len, __ps,
-40039:           __builtin_object_size (__dst, 2 > 1));
-40039:     }
-40039:   return __wcsnrtombs_alias (__dst, __src, __nwc, __len, __ps);
-40039: }
-40039: # 851 "/usr/include/wchar.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 45 "/usr/include/c++/8/cwchar" 2 3
-40039: # 62 "/usr/include/c++/8/cwchar" 3
-40039: namespace std
-40039: {
-40039:   using ::mbstate_t;
-40039: }
-40039: # 135 "/usr/include/c++/8/cwchar" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   using ::wint_t;
-40039: 
-40039:   using ::btowc;
-40039:   using ::fgetwc;
-40039:   using ::fgetws;
-40039:   using ::fputwc;
-40039:   using ::fputws;
-40039:   using ::fwide;
-40039:   using ::fwprintf;
-40039:   using ::fwscanf;
-40039:   using ::getwc;
-40039:   using ::getwchar;
-40039:   using ::mbrlen;
-40039:   using ::mbrtowc;
-40039:   using ::mbsinit;
-40039:   using ::mbsrtowcs;
-40039:   using ::putwc;
-40039:   using ::putwchar;
-40039: 
-40039:   using ::swprintf;
-40039: 
-40039:   using ::swscanf;
-40039:   using ::ungetwc;
-40039:   using ::vfwprintf;
-40039: 
-40039:   using ::vfwscanf;
-40039: 
-40039: 
-40039:   using ::vswprintf;
-40039: 
-40039: 
-40039:   using ::vswscanf;
-40039: 
-40039:   using ::vwprintf;
-40039: 
-40039:   using ::vwscanf;
-40039: 
-40039:   using ::wcrtomb;
-40039:   using ::wcscat;
-40039:   using ::wcscmp;
-40039:   using ::wcscoll;
-40039:   using ::wcscpy;
-40039:   using ::wcscspn;
-40039:   using ::wcsftime;
-40039:   using ::wcslen;
-40039:   using ::wcsncat;
-40039:   using ::wcsncmp;
-40039:   using ::wcsncpy;
-40039:   using ::wcsrtombs;
-40039:   using ::wcsspn;
-40039:   using ::wcstod;
-40039: 
-40039:   using ::wcstof;
-40039: 
-40039:   using ::wcstok;
-40039:   using ::wcstol;
-40039:   using ::wcstoul;
-40039:   using ::wcsxfrm;
-40039:   using ::wctob;
-40039:   using ::wmemcmp;
-40039:   using ::wmemcpy;
-40039:   using ::wmemmove;
-40039:   using ::wmemset;
-40039:   using ::wprintf;
-40039:   using ::wscanf;
-40039:   using ::wcschr;
-40039:   using ::wcspbrk;
-40039:   using ::wcsrchr;
-40039:   using ::wcsstr;
-40039:   using ::wmemchr;
-40039: # 232 "/usr/include/c++/8/cwchar" 3
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace __gnu_cxx
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   using ::wcstold;
-40039: # 257 "/usr/include/c++/8/cwchar" 3
-40039:   using ::wcstoll;
-40039:   using ::wcstoull;
-40039: 
-40039: }
-40039: 
-40039: namespace std
-40039: {
-40039:   using ::__gnu_cxx::wcstold;
-40039:   using ::__gnu_cxx::wcstoll;
-40039:   using ::__gnu_cxx::wcstoull;
-40039: }
-40039: # 277 "/usr/include/c++/8/cwchar" 3
-40039: namespace std
-40039: {
-40039: 
-40039:   using std::wcstof;
-40039: 
-40039: 
-40039:   using std::vfwscanf;
-40039: 
-40039: 
-40039:   using std::vswscanf;
-40039: 
-40039: 
-40039:   using std::vwscanf;
-40039: 
-40039: 
-40039: 
-40039:   using std::wcstold;
-40039:   using std::wcstoll;
-40039:   using std::wcstoull;
-40039: 
-40039: }
-40039: # 41 "/usr/include/c++/8/bits/postypes.h" 2 3
-40039: # 68 "/usr/include/c++/8/bits/postypes.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 88 "/usr/include/c++/8/bits/postypes.h" 3
-40039:   typedef long streamoff;
-40039: # 98 "/usr/include/c++/8/bits/postypes.h" 3
-40039:   typedef ptrdiff_t streamsize;
-40039: # 111 "/usr/include/c++/8/bits/postypes.h" 3
-40039:   template<typename _StateT>
-40039:     class fpos
-40039:     {
-40039:     private:
-40039:       streamoff _M_off;
-40039:       _StateT _M_state;
-40039: 
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       fpos()
-40039:       : _M_off(0), _M_state() { }
-40039: # 133 "/usr/include/c++/8/bits/postypes.h" 3
-40039:       fpos(streamoff __off)
-40039:       : _M_off(__off), _M_state() { }
-40039: 
-40039: 
-40039:       operator streamoff() const { return _M_off; }
-40039: 
-40039: 
-40039:       void
-40039:       state(_StateT __st)
-40039:       { _M_state = __st; }
-40039: 
-40039: 
-40039:       _StateT
-40039:       state() const
-40039:       { return _M_state; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       fpos&
-40039:       operator+=(streamoff __off)
-40039:       {
-40039:  _M_off += __off;
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       fpos&
-40039:       operator-=(streamoff __off)
-40039:       {
-40039:  _M_off -= __off;
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       fpos
-40039:       operator+(streamoff __off) const
-40039:       {
-40039:  fpos __pos(*this);
-40039:  __pos += __off;
-40039:  return __pos;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       fpos
-40039:       operator-(streamoff __off) const
-40039:       {
-40039:  fpos __pos(*this);
-40039:  __pos -= __off;
-40039:  return __pos;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       streamoff
-40039:       operator-(const fpos& __other) const
-40039:       { return _M_off - __other._M_off; }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _StateT>
-40039:     inline bool
-40039:     operator==(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs)
-40039:     { return streamoff(__lhs) == streamoff(__rhs); }
-40039: 
-40039:   template<typename _StateT>
-40039:     inline bool
-40039:     operator!=(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs)
-40039:     { return streamoff(__lhs) != streamoff(__rhs); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef fpos<mbstate_t> streampos;
-40039: 
-40039:   typedef fpos<mbstate_t> wstreampos;
-40039: 
-40039: 
-40039: 
-40039:   typedef fpos<mbstate_t> u16streampos;
-40039: 
-40039:   typedef fpos<mbstate_t> u32streampos;
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 41 "/usr/include/c++/8/iosfwd" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 74 "/usr/include/c++/8/iosfwd" 3
-40039:   class ios_base;
-40039: 
-40039:   template<typename _CharT, typename _Traits = char_traits<_CharT> >
-40039:     class basic_ios;
-40039: 
-40039:   template<typename _CharT, typename _Traits = char_traits<_CharT> >
-40039:     class basic_streambuf;
-40039: 
-40039:   template<typename _CharT, typename _Traits = char_traits<_CharT> >
-40039:     class basic_istream;
-40039: 
-40039:   template<typename _CharT, typename _Traits = char_traits<_CharT> >
-40039:     class basic_ostream;
-40039: 
-40039:   template<typename _CharT, typename _Traits = char_traits<_CharT> >
-40039:     class basic_iostream;
-40039: 
-40039: 
-40039: namespace __cxx11 {
-40039: 
-40039:   template<typename _CharT, typename _Traits = char_traits<_CharT>,
-40039:      typename _Alloc = allocator<_CharT> >
-40039:     class basic_stringbuf;
-40039: 
-40039:   template<typename _CharT, typename _Traits = char_traits<_CharT>,
-40039:     typename _Alloc = allocator<_CharT> >
-40039:     class basic_istringstream;
-40039: 
-40039:   template<typename _CharT, typename _Traits = char_traits<_CharT>,
-40039:     typename _Alloc = allocator<_CharT> >
-40039:     class basic_ostringstream;
-40039: 
-40039:   template<typename _CharT, typename _Traits = char_traits<_CharT>,
-40039:     typename _Alloc = allocator<_CharT> >
-40039:     class basic_stringstream;
-40039: 
-40039: }
-40039: 
-40039:   template<typename _CharT, typename _Traits = char_traits<_CharT> >
-40039:     class basic_filebuf;
-40039: 
-40039:   template<typename _CharT, typename _Traits = char_traits<_CharT> >
-40039:     class basic_ifstream;
-40039: 
-40039:   template<typename _CharT, typename _Traits = char_traits<_CharT> >
-40039:     class basic_ofstream;
-40039: 
-40039:   template<typename _CharT, typename _Traits = char_traits<_CharT> >
-40039:     class basic_fstream;
-40039: 
-40039:   template<typename _CharT, typename _Traits = char_traits<_CharT> >
-40039:     class istreambuf_iterator;
-40039: 
-40039:   template<typename _CharT, typename _Traits = char_traits<_CharT> >
-40039:     class ostreambuf_iterator;
-40039: 
-40039: 
-40039: 
-40039:   typedef basic_ios<char> ios;
-40039: 
-40039: 
-40039:   typedef basic_streambuf<char> streambuf;
-40039: 
-40039: 
-40039:   typedef basic_istream<char> istream;
-40039: 
-40039: 
-40039:   typedef basic_ostream<char> ostream;
-40039: 
-40039: 
-40039:   typedef basic_iostream<char> iostream;
-40039: 
-40039: 
-40039:   typedef basic_stringbuf<char> stringbuf;
-40039: 
-40039: 
-40039:   typedef basic_istringstream<char> istringstream;
-40039: 
-40039: 
-40039:   typedef basic_ostringstream<char> ostringstream;
-40039: 
-40039: 
-40039:   typedef basic_stringstream<char> stringstream;
-40039: 
-40039: 
-40039:   typedef basic_filebuf<char> filebuf;
-40039: 
-40039: 
-40039:   typedef basic_ifstream<char> ifstream;
-40039: 
-40039: 
-40039:   typedef basic_ofstream<char> ofstream;
-40039: 
-40039: 
-40039:   typedef basic_fstream<char> fstream;
-40039: 
-40039: 
-40039: 
-40039:   typedef basic_ios<wchar_t> wios;
-40039: 
-40039: 
-40039:   typedef basic_streambuf<wchar_t> wstreambuf;
-40039: 
-40039: 
-40039:   typedef basic_istream<wchar_t> wistream;
-40039: 
-40039: 
-40039:   typedef basic_ostream<wchar_t> wostream;
-40039: 
-40039: 
-40039:   typedef basic_iostream<wchar_t> wiostream;
-40039: 
-40039: 
-40039:   typedef basic_stringbuf<wchar_t> wstringbuf;
-40039: 
-40039: 
-40039:   typedef basic_istringstream<wchar_t> wistringstream;
-40039: 
-40039: 
-40039:   typedef basic_ostringstream<wchar_t> wostringstream;
-40039: 
-40039: 
-40039:   typedef basic_stringstream<wchar_t> wstringstream;
-40039: 
-40039: 
-40039:   typedef basic_filebuf<wchar_t> wfilebuf;
-40039: 
-40039: 
-40039:   typedef basic_ifstream<wchar_t> wifstream;
-40039: 
-40039: 
-40039:   typedef basic_ofstream<wchar_t> wofstream;
-40039: 
-40039: 
-40039:   typedef basic_fstream<wchar_t> wfstream;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 35 "/usr/include/gmpxx.h" 2 3 4
-40039: 
-40039: # 1 "/usr/include/c++/8/cstring" 1 3 4
-40039: # 39 "/usr/include/c++/8/cstring" 3 4
-40039:        
-40039: # 40 "/usr/include/c++/8/cstring" 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/string.h" 1 3 4
-40039: # 26 "/usr/include/string.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 1 3 4
-40039: # 27 "/usr/include/string.h" 2 3 4
-40039: 
-40039: extern "C" {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
-40039: # 34 "/usr/include/string.h" 2 3 4
-40039: # 42 "/usr/include/string.h" 3 4
-40039: extern void *memcpy (void *__restrict __dest, const void *__restrict __src,
-40039:        size_t __n) throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern void *memmove (void *__dest, const void *__src, size_t __n)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
-40039:         int __c, size_t __n)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern void *memset (void *__s, int __c, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int memcmp (const void *__s1, const void *__s2, size_t __n)
-40039:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: 
-40039: extern "C++"
-40039: {
-40039: extern void *memchr (void *__s, int __c, size_t __n)
-40039:       throw () __asm ("memchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
-40039: extern const void *memchr (const void *__s, int __c, size_t __n)
-40039:       throw () __asm ("memchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) void *
-40039: memchr (void *__s, int __c, size_t __n) throw ()
-40039: {
-40039:   return __builtin_memchr (__s, __c, __n);
-40039: }
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const void *
-40039: memchr (const void *__s, int __c, size_t __n) throw ()
-40039: {
-40039:   return __builtin_memchr (__s, __c, __n);
-40039: }
-40039: 
-40039: }
-40039: # 98 "/usr/include/string.h" 3 4
-40039: extern "C++" void *rawmemchr (void *__s, int __c)
-40039:      throw () __asm ("rawmemchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
-40039: extern "C++" const void *rawmemchr (const void *__s, int __c)
-40039:      throw () __asm ("rawmemchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern "C++" void *memrchr (void *__s, int __c, size_t __n)
-40039:       throw () __asm ("memrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
-40039: extern "C++" const void *memrchr (const void *__s, int __c, size_t __n)
-40039:       throw () __asm ("memrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
-40039: # 121 "/usr/include/string.h" 3 4
-40039: extern char *strcpy (char *__restrict __dest, const char *__restrict __src)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: extern char *strncpy (char *__restrict __dest,
-40039:         const char *__restrict __src, size_t __n)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern char *strcat (char *__restrict __dest, const char *__restrict __src)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: extern char *strncat (char *__restrict __dest, const char *__restrict __src,
-40039:         size_t __n) throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern int strcmp (const char *__s1, const char *__s2)
-40039:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: extern int strncmp (const char *__s1, const char *__s2, size_t __n)
-40039:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern int strcoll (const char *__s1, const char *__s2)
-40039:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: extern size_t strxfrm (char *__restrict __dest,
-40039:          const char *__restrict __src, size_t __n)
-40039:      throw () __attribute__ ((__nonnull__ (2)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int strcoll_l (const char *__s1, const char *__s2, locale_t __l)
-40039:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
-40039: 
-40039: 
-40039: extern size_t strxfrm_l (char *__dest, const char *__src, size_t __n,
-40039:     locale_t __l) throw () __attribute__ ((__nonnull__ (2, 4)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *strdup (const char *__s)
-40039:      throw () __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *strndup (const char *__string, size_t __n)
-40039:      throw () __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
-40039: # 203 "/usr/include/string.h" 3 4
-40039: extern "C++"
-40039: {
-40039: extern char *strchr (char *__s, int __c)
-40039:      throw () __asm ("strchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
-40039: extern const char *strchr (const char *__s, int __c)
-40039:      throw () __asm ("strchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
-40039: strchr (char *__s, int __c) throw ()
-40039: {
-40039:   return __builtin_strchr (__s, __c);
-40039: }
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
-40039: strchr (const char *__s, int __c) throw ()
-40039: {
-40039:   return __builtin_strchr (__s, __c);
-40039: }
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern "C++"
-40039: {
-40039: extern char *strrchr (char *__s, int __c)
-40039:      throw () __asm ("strrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
-40039: extern const char *strrchr (const char *__s, int __c)
-40039:      throw () __asm ("strrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
-40039: strrchr (char *__s, int __c) throw ()
-40039: {
-40039:   return __builtin_strrchr (__s, __c);
-40039: }
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
-40039: strrchr (const char *__s, int __c) throw ()
-40039: {
-40039:   return __builtin_strrchr (__s, __c);
-40039: }
-40039: 
-40039: }
-40039: # 260 "/usr/include/string.h" 3 4
-40039: extern "C++" char *strchrnul (char *__s, int __c)
-40039:      throw () __asm ("strchrnul") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
-40039: extern "C++" const char *strchrnul (const char *__s, int __c)
-40039:      throw () __asm ("strchrnul") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
-40039: # 272 "/usr/include/string.h" 3 4
-40039: extern size_t strcspn (const char *__s, const char *__reject)
-40039:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern size_t strspn (const char *__s, const char *__accept)
-40039:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern "C++"
-40039: {
-40039: extern char *strpbrk (char *__s, const char *__accept)
-40039:      throw () __asm ("strpbrk") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
-40039: extern const char *strpbrk (const char *__s, const char *__accept)
-40039:      throw () __asm ("strpbrk") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
-40039: strpbrk (char *__s, const char *__accept) throw ()
-40039: {
-40039:   return __builtin_strpbrk (__s, __accept);
-40039: }
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
-40039: strpbrk (const char *__s, const char *__accept) throw ()
-40039: {
-40039:   return __builtin_strpbrk (__s, __accept);
-40039: }
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern "C++"
-40039: {
-40039: extern char *strstr (char *__haystack, const char *__needle)
-40039:      throw () __asm ("strstr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
-40039: extern const char *strstr (const char *__haystack, const char *__needle)
-40039:      throw () __asm ("strstr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
-40039: strstr (char *__haystack, const char *__needle) throw ()
-40039: {
-40039:   return __builtin_strstr (__haystack, __needle);
-40039: }
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
-40039: strstr (const char *__haystack, const char *__needle) throw ()
-40039: {
-40039:   return __builtin_strstr (__haystack, __needle);
-40039: }
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *strtok (char *__restrict __s, const char *__restrict __delim)
-40039:      throw () __attribute__ ((__nonnull__ (2)));
-40039: 
-40039: 
-40039: 
-40039: extern char *__strtok_r (char *__restrict __s,
-40039:     const char *__restrict __delim,
-40039:     char **__restrict __save_ptr)
-40039:      throw () __attribute__ ((__nonnull__ (2, 3)));
-40039: 
-40039: extern char *strtok_r (char *__restrict __s, const char *__restrict __delim,
-40039:          char **__restrict __save_ptr)
-40039:      throw () __attribute__ ((__nonnull__ (2, 3)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern "C++" char *strcasestr (char *__haystack, const char *__needle)
-40039:      throw () __asm ("strcasestr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
-40039: extern "C++" const char *strcasestr (const char *__haystack,
-40039:          const char *__needle)
-40039:      throw () __asm ("strcasestr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
-40039: # 368 "/usr/include/string.h" 3 4
-40039: extern void *memmem (const void *__haystack, size_t __haystacklen,
-40039:        const void *__needle, size_t __needlelen)
-40039:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 3)));
-40039: 
-40039: 
-40039: 
-40039: extern void *__mempcpy (void *__restrict __dest,
-40039:    const void *__restrict __src, size_t __n)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: extern void *mempcpy (void *__restrict __dest,
-40039:         const void *__restrict __src, size_t __n)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern size_t strlen (const char *__s)
-40039:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern size_t strnlen (const char *__string, size_t __maxlen)
-40039:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *strerror (int __errnum) throw ();
-40039: # 420 "/usr/include/string.h" 3 4
-40039: extern char *strerror_r (int __errnum, char *__buf, size_t __buflen)
-40039:      throw () __attribute__ ((__nonnull__ (2))) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *strerror_l (int __errnum, locale_t __l) throw ();
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/strings.h" 1 3 4
-40039: # 23 "/usr/include/strings.h" 3 4
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
-40039: # 24 "/usr/include/strings.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern "C" {
-40039: 
-40039: 
-40039: 
-40039: extern int bcmp (const void *__s1, const void *__s2, size_t __n)
-40039:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern void bcopy (const void *__src, void *__dest, size_t __n)
-40039:   throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern void bzero (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: extern "C++"
-40039: {
-40039: extern char *index (char *__s, int __c)
-40039:      throw () __asm ("index") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
-40039: extern const char *index (const char *__s, int __c)
-40039:      throw () __asm ("index") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
-40039: index (char *__s, int __c) throw ()
-40039: {
-40039:   return __builtin_index (__s, __c);
-40039: }
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
-40039: index (const char *__s, int __c) throw ()
-40039: {
-40039:   return __builtin_index (__s, __c);
-40039: }
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern "C++"
-40039: {
-40039: extern char *rindex (char *__s, int __c)
-40039:      throw () __asm ("rindex") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
-40039: extern const char *rindex (const char *__s, int __c)
-40039:      throw () __asm ("rindex") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
-40039: rindex (char *__s, int __c) throw ()
-40039: {
-40039:   return __builtin_rindex (__s, __c);
-40039: }
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
-40039: rindex (const char *__s, int __c) throw ()
-40039: {
-40039:   return __builtin_rindex (__s, __c);
-40039: }
-40039: 
-40039: }
-40039: # 104 "/usr/include/strings.h" 3 4
-40039: extern int ffs (int __i) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int ffsl (long int __l) throw () __attribute__ ((__const__));
-40039: __extension__ extern int ffsll (long long int __ll)
-40039:      throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: extern int strcasecmp (const char *__s1, const char *__s2)
-40039:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern int strncasecmp (const char *__s1, const char *__s2, size_t __n)
-40039:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int strcasecmp_l (const char *__s1, const char *__s2, locale_t __loc)
-40039:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
-40039: 
-40039: 
-40039: 
-40039: extern int strncasecmp_l (const char *__s1, const char *__s2,
-40039:      size_t __n, locale_t __loc)
-40039:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 4)));
-40039: 
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/strings_fortified.h" 1 3 4
-40039: # 22 "/usr/include/x86_64-linux-gnu/bits/strings_fortified.h" 3 4
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void
-40039: __attribute__ ((__leaf__)) bcopy (const void *__src, void *__dest, size_t __len) throw ()
-40039: {
-40039:   (void) __builtin___memmove_chk (__dest, __src, __len, __builtin_object_size (__dest, 0));
-40039: }
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void
-40039: __attribute__ ((__leaf__)) bzero (void *__dest, size_t __len) throw ()
-40039: {
-40039:   (void) __builtin___memset_chk (__dest, '\0', __len, __builtin_object_size (__dest, 0));
-40039: }
-40039: # 145 "/usr/include/strings.h" 2 3 4
-40039: # 432 "/usr/include/string.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: extern void explicit_bzero (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: extern char *strsep (char **__restrict __stringp,
-40039:        const char *__restrict __delim)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *strsignal (int __sig) throw ();
-40039: 
-40039: 
-40039: extern char *__stpcpy (char *__restrict __dest, const char *__restrict __src)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: extern char *stpcpy (char *__restrict __dest, const char *__restrict __src)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: 
-40039: extern char *__stpncpy (char *__restrict __dest,
-40039:    const char *__restrict __src, size_t __n)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: extern char *stpncpy (char *__restrict __dest,
-40039:         const char *__restrict __src, size_t __n)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int strverscmp (const char *__s1, const char *__s2)
-40039:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern char *strfry (char *__string) throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern void *memfrob (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern "C++" char *basename (char *__filename)
-40039:      throw () __asm ("basename") __attribute__ ((__nonnull__ (1)));
-40039: extern "C++" const char *basename (const char *__filename)
-40039:      throw () __asm ("basename") __attribute__ ((__nonnull__ (1)));
-40039: # 494 "/usr/include/string.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/string_fortified.h" 1 3 4
-40039: # 30 "/usr/include/x86_64-linux-gnu/bits/string_fortified.h" 3 4
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void *
-40039: __attribute__ ((__leaf__)) memcpy (void *__restrict __dest, const void *__restrict __src, size_t __len) throw ()
-40039: 
-40039: {
-40039:   return __builtin___memcpy_chk (__dest, __src, __len, __builtin_object_size (__dest, 0));
-40039: }
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void *
-40039: __attribute__ ((__leaf__)) memmove (void *__dest, const void *__src, size_t __len) throw ()
-40039: {
-40039:   return __builtin___memmove_chk (__dest, __src, __len, __builtin_object_size (__dest, 0));
-40039: }
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void *
-40039: __attribute__ ((__leaf__)) mempcpy (void *__restrict __dest, const void *__restrict __src, size_t __len) throw ()
-40039: 
-40039: {
-40039:   return __builtin___mempcpy_chk (__dest, __src, __len, __builtin_object_size (__dest, 0));
-40039: }
-40039: # 58 "/usr/include/x86_64-linux-gnu/bits/string_fortified.h" 3 4
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void *
-40039: __attribute__ ((__leaf__)) memset (void *__dest, int __ch, size_t __len) throw ()
-40039: {
-40039: # 71 "/usr/include/x86_64-linux-gnu/bits/string_fortified.h" 3 4
-40039:   return __builtin___memset_chk (__dest, __ch, __len, __builtin_object_size (__dest, 0));
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: void __explicit_bzero_chk (void *__dest, size_t __len, size_t __destlen)
-40039:   throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void
-40039: __attribute__ ((__leaf__)) explicit_bzero (void *__dest, size_t __len) throw ()
-40039: {
-40039:   __explicit_bzero_chk (__dest, __len, __builtin_object_size (__dest, 0));
-40039: }
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
-40039: __attribute__ ((__leaf__)) strcpy (char *__restrict __dest, const char *__restrict __src) throw ()
-40039: {
-40039:   return __builtin___strcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
-40039: }
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
-40039: __attribute__ ((__leaf__)) stpcpy (char *__restrict __dest, const char *__restrict __src) throw ()
-40039: {
-40039:   return __builtin___stpcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
-40039: }
-40039: 
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
-40039: __attribute__ ((__leaf__)) strncpy (char *__restrict __dest, const char *__restrict __src, size_t __len) throw ()
-40039: 
-40039: {
-40039:   return __builtin___strncpy_chk (__dest, __src, __len, __builtin_object_size (__dest, 2 > 1));
-40039: }
-40039: 
-40039: 
-40039: extern char *__stpncpy_chk (char *__dest, const char *__src, size_t __n,
-40039:        size_t __destlen) throw ();
-40039: extern char *__stpncpy_alias (char *__dest, const char *__src, size_t __n) throw () __asm__ ("" "stpncpy")
-40039:                                  ;
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
-40039: __attribute__ ((__leaf__)) stpncpy (char *__dest, const char *__src, size_t __n) throw ()
-40039: {
-40039:   if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1
-40039:       && (!__builtin_constant_p (__n) || __n > __builtin_object_size (__dest, 2 > 1)))
-40039:     return __stpncpy_chk (__dest, __src, __n, __builtin_object_size (__dest, 2 > 1));
-40039:   return __stpncpy_alias (__dest, __src, __n);
-40039: }
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
-40039: __attribute__ ((__leaf__)) strcat (char *__restrict __dest, const char *__restrict __src) throw ()
-40039: {
-40039:   return __builtin___strcat_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
-40039: }
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
-40039: __attribute__ ((__leaf__)) strncat (char *__restrict __dest, const char *__restrict __src, size_t __len) throw ()
-40039: 
-40039: {
-40039:   return __builtin___strncat_chk (__dest, __src, __len, __builtin_object_size (__dest, 2 > 1));
-40039: }
-40039: # 495 "/usr/include/string.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 43 "/usr/include/c++/8/cstring" 2 3
-40039: # 71 "/usr/include/c++/8/cstring" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   using ::memchr;
-40039:   using ::memcmp;
-40039:   using ::memcpy;
-40039:   using ::memmove;
-40039:   using ::memset;
-40039:   using ::strcat;
-40039:   using ::strcmp;
-40039:   using ::strcoll;
-40039:   using ::strcpy;
-40039:   using ::strcspn;
-40039:   using ::strerror;
-40039:   using ::strlen;
-40039:   using ::strncat;
-40039:   using ::strncmp;
-40039:   using ::strncpy;
-40039:   using ::strspn;
-40039:   using ::strtok;
-40039:   using ::strxfrm;
-40039:   using ::strchr;
-40039:   using ::strpbrk;
-40039:   using ::strrchr;
-40039:   using ::strstr;
-40039: # 120 "/usr/include/c++/8/cstring" 3
-40039: 
-40039: }
-40039: # 37 "/usr/include/gmpxx.h" 2 3 4
-40039: # 1 "/usr/include/c++/8/limits" 1 3 4
-40039: # 40 "/usr/include/c++/8/limits" 3 4
-40039:        
-40039: # 41 "/usr/include/c++/8/limits" 3
-40039: # 158 "/usr/include/c++/8/limits" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   enum float_round_style
-40039:   {
-40039:     round_indeterminate = -1,
-40039:     round_toward_zero = 0,
-40039:     round_to_nearest = 1,
-40039:     round_toward_infinity = 2,
-40039:     round_toward_neg_infinity = 3
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   enum float_denorm_style
-40039:   {
-40039: 
-40039:     denorm_indeterminate = -1,
-40039: 
-40039:     denorm_absent = 0,
-40039: 
-40039:     denorm_present = 1
-40039:   };
-40039: # 202 "/usr/include/c++/8/limits" 3
-40039:   struct __numeric_limits_base
-40039:   {
-40039: 
-40039: 
-40039:     static constexpr bool is_specialized = false;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     static constexpr int digits = 0;
-40039: 
-40039: 
-40039:     static constexpr int digits10 = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     static constexpr int max_digits10 = 0;
-40039: 
-40039: 
-40039: 
-40039:     static constexpr bool is_signed = false;
-40039: 
-40039: 
-40039:     static constexpr bool is_integer = false;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     static constexpr bool is_exact = false;
-40039: 
-40039: 
-40039: 
-40039:     static constexpr int radix = 0;
-40039: 
-40039: 
-40039: 
-40039:     static constexpr int min_exponent = 0;
-40039: 
-40039: 
-40039: 
-40039:     static constexpr int min_exponent10 = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     static constexpr int max_exponent = 0;
-40039: 
-40039: 
-40039: 
-40039:     static constexpr int max_exponent10 = 0;
-40039: 
-40039: 
-40039:     static constexpr bool has_infinity = false;
-40039: 
-40039: 
-40039: 
-40039:     static constexpr bool has_quiet_NaN = false;
-40039: 
-40039: 
-40039: 
-40039:     static constexpr bool has_signaling_NaN = false;
-40039: 
-40039: 
-40039:     static constexpr float_denorm_style has_denorm = denorm_absent;
-40039: 
-40039: 
-40039: 
-40039:     static constexpr bool has_denorm_loss = false;
-40039: 
-40039: 
-40039: 
-40039:     static constexpr bool is_iec559 = false;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     static constexpr bool is_bounded = false;
-40039: # 288 "/usr/include/c++/8/limits" 3
-40039:     static constexpr bool is_modulo = false;
-40039: 
-40039: 
-40039:     static constexpr bool traps = false;
-40039: 
-40039: 
-40039:     static constexpr bool tinyness_before = false;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     static constexpr float_round_style round_style =
-40039:           round_toward_zero;
-40039:   };
-40039: # 311 "/usr/include/c++/8/limits" 3
-40039:   template<typename _Tp>
-40039:     struct numeric_limits : public __numeric_limits_base
-40039:     {
-40039: 
-40039: 
-40039:       static constexpr _Tp
-40039:       min() noexcept { return _Tp(); }
-40039: 
-40039: 
-40039:       static constexpr _Tp
-40039:       max() noexcept { return _Tp(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       static constexpr _Tp
-40039:       lowest() noexcept { return _Tp(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       static constexpr _Tp
-40039:       epsilon() noexcept { return _Tp(); }
-40039: 
-40039: 
-40039:       static constexpr _Tp
-40039:       round_error() noexcept { return _Tp(); }
-40039: 
-40039: 
-40039:       static constexpr _Tp
-40039:       infinity() noexcept { return _Tp(); }
-40039: 
-40039: 
-40039: 
-40039:       static constexpr _Tp
-40039:       quiet_NaN() noexcept { return _Tp(); }
-40039: 
-40039: 
-40039: 
-40039:       static constexpr _Tp
-40039:       signaling_NaN() noexcept { return _Tp(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       static constexpr _Tp
-40039:       denorm_min() noexcept { return _Tp(); }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct numeric_limits<const _Tp>
-40039:     : public numeric_limits<_Tp> { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct numeric_limits<volatile _Tp>
-40039:     : public numeric_limits<_Tp> { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct numeric_limits<const volatile _Tp>
-40039:     : public numeric_limits<_Tp> { };
-40039: # 382 "/usr/include/c++/8/limits" 3
-40039:   template<>
-40039:     struct numeric_limits<bool>
-40039:     {
-40039:       static constexpr bool is_specialized = true;
-40039: 
-40039:       static constexpr bool
-40039:       min() noexcept { return false; }
-40039: 
-40039:       static constexpr bool
-40039:       max() noexcept { return true; }
-40039: 
-40039: 
-40039:       static constexpr bool
-40039:       lowest() noexcept { return min(); }
-40039: 
-40039:       static constexpr int digits = 1;
-40039:       static constexpr int digits10 = 0;
-40039: 
-40039:       static constexpr int max_digits10 = 0;
-40039: 
-40039:       static constexpr bool is_signed = false;
-40039:       static constexpr bool is_integer = true;
-40039:       static constexpr bool is_exact = true;
-40039:       static constexpr int radix = 2;
-40039: 
-40039:       static constexpr bool
-40039:       epsilon() noexcept { return false; }
-40039: 
-40039:       static constexpr bool
-40039:       round_error() noexcept { return false; }
-40039: 
-40039:       static constexpr int min_exponent = 0;
-40039:       static constexpr int min_exponent10 = 0;
-40039:       static constexpr int max_exponent = 0;
-40039:       static constexpr int max_exponent10 = 0;
-40039: 
-40039:       static constexpr bool has_infinity = false;
-40039:       static constexpr bool has_quiet_NaN = false;
-40039:       static constexpr bool has_signaling_NaN = false;
-40039:       static constexpr float_denorm_style has_denorm
-40039:        = denorm_absent;
-40039:       static constexpr bool has_denorm_loss = false;
-40039: 
-40039:       static constexpr bool
-40039:       infinity() noexcept { return false; }
-40039: 
-40039:       static constexpr bool
-40039:       quiet_NaN() noexcept { return false; }
-40039: 
-40039:       static constexpr bool
-40039:       signaling_NaN() noexcept { return false; }
-40039: 
-40039:       static constexpr bool
-40039:       denorm_min() noexcept { return false; }
-40039: 
-40039:       static constexpr bool is_iec559 = false;
-40039:       static constexpr bool is_bounded = true;
-40039:       static constexpr bool is_modulo = false;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       static constexpr bool traps = true;
-40039:       static constexpr bool tinyness_before = false;
-40039:       static constexpr float_round_style round_style
-40039:        = round_toward_zero;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct numeric_limits<char>
-40039:     {
-40039:       static constexpr bool is_specialized = true;
-40039: 
-40039:       static constexpr char
-40039:       min() noexcept { return (((char)(-1) < 0) ? -(((char)(-1) < 0) ? (((((char)1 << ((sizeof(char) * 8 - ((char)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char)0) - 1 : (char)0); }
-40039: 
-40039:       static constexpr char
-40039:       max() noexcept { return (((char)(-1) < 0) ? (((((char)1 << ((sizeof(char) * 8 - ((char)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char)0); }
-40039: 
-40039: 
-40039:       static constexpr char
-40039:       lowest() noexcept { return min(); }
-40039: 
-40039: 
-40039:       static constexpr int digits = (sizeof(char) * 8 - ((char)(-1) < 0));
-40039:       static constexpr int digits10 = ((sizeof(char) * 8 - ((char)(-1) < 0)) * 643L / 2136);
-40039: 
-40039:       static constexpr int max_digits10 = 0;
-40039: 
-40039:       static constexpr bool is_signed = ((char)(-1) < 0);
-40039:       static constexpr bool is_integer = true;
-40039:       static constexpr bool is_exact = true;
-40039:       static constexpr int radix = 2;
-40039: 
-40039:       static constexpr char
-40039:       epsilon() noexcept { return 0; }
-40039: 
-40039:       static constexpr char
-40039:       round_error() noexcept { return 0; }
-40039: 
-40039:       static constexpr int min_exponent = 0;
-40039:       static constexpr int min_exponent10 = 0;
-40039:       static constexpr int max_exponent = 0;
-40039:       static constexpr int max_exponent10 = 0;
-40039: 
-40039:       static constexpr bool has_infinity = false;
-40039:       static constexpr bool has_quiet_NaN = false;
-40039:       static constexpr bool has_signaling_NaN = false;
-40039:       static constexpr float_denorm_style has_denorm
-40039:        = denorm_absent;
-40039:       static constexpr bool has_denorm_loss = false;
-40039: 
-40039:       static constexpr
-40039:       char infinity() noexcept { return char(); }
-40039: 
-40039:       static constexpr char
-40039:       quiet_NaN() noexcept { return char(); }
-40039: 
-40039:       static constexpr char
-40039:       signaling_NaN() noexcept { return char(); }
-40039: 
-40039:       static constexpr char
-40039:       denorm_min() noexcept { return static_cast<char>(0); }
-40039: 
-40039:       static constexpr bool is_iec559 = false;
-40039:       static constexpr bool is_bounded = true;
-40039:       static constexpr bool is_modulo = !is_signed;
-40039: 
-40039:       static constexpr bool traps = true;
-40039:       static constexpr bool tinyness_before = false;
-40039:       static constexpr float_round_style round_style
-40039:        = round_toward_zero;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct numeric_limits<signed char>
-40039:     {
-40039:       static constexpr bool is_specialized = true;
-40039: 
-40039:       static constexpr signed char
-40039:       min() noexcept { return -0x7f - 1; }
-40039: 
-40039:       static constexpr signed char
-40039:       max() noexcept { return 0x7f; }
-40039: 
-40039: 
-40039:       static constexpr signed char
-40039:       lowest() noexcept { return min(); }
-40039: 
-40039: 
-40039:       static constexpr int digits = (sizeof(signed char) * 8 - ((signed char)(-1) < 0));
-40039:       static constexpr int digits10
-40039:        = ((sizeof(signed char) * 8 - ((signed char)(-1) < 0)) * 643L / 2136);
-40039: 
-40039:       static constexpr int max_digits10 = 0;
-40039: 
-40039:       static constexpr bool is_signed = true;
-40039:       static constexpr bool is_integer = true;
-40039:       static constexpr bool is_exact = true;
-40039:       static constexpr int radix = 2;
-40039: 
-40039:       static constexpr signed char
-40039:       epsilon() noexcept { return 0; }
-40039: 
-40039:       static constexpr signed char
-40039:       round_error() noexcept { return 0; }
-40039: 
-40039:       static constexpr int min_exponent = 0;
-40039:       static constexpr int min_exponent10 = 0;
-40039:       static constexpr int max_exponent = 0;
-40039:       static constexpr int max_exponent10 = 0;
-40039: 
-40039:       static constexpr bool has_infinity = false;
-40039:       static constexpr bool has_quiet_NaN = false;
-40039:       static constexpr bool has_signaling_NaN = false;
-40039:       static constexpr float_denorm_style has_denorm
-40039:        = denorm_absent;
-40039:       static constexpr bool has_denorm_loss = false;
-40039: 
-40039:       static constexpr signed char
-40039:       infinity() noexcept { return static_cast<signed char>(0); }
-40039: 
-40039:       static constexpr signed char
-40039:       quiet_NaN() noexcept { return static_cast<signed char>(0); }
-40039: 
-40039:       static constexpr signed char
-40039:       signaling_NaN() noexcept
-40039:       { return static_cast<signed char>(0); }
-40039: 
-40039:       static constexpr signed char
-40039:       denorm_min() noexcept
-40039:       { return static_cast<signed char>(0); }
-40039: 
-40039:       static constexpr bool is_iec559 = false;
-40039:       static constexpr bool is_bounded = true;
-40039:       static constexpr bool is_modulo = false;
-40039: 
-40039:       static constexpr bool traps = true;
-40039:       static constexpr bool tinyness_before = false;
-40039:       static constexpr float_round_style round_style
-40039:        = round_toward_zero;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct numeric_limits<unsigned char>
-40039:     {
-40039:       static constexpr bool is_specialized = true;
-40039: 
-40039:       static constexpr unsigned char
-40039:       min() noexcept { return 0; }
-40039: 
-40039:       static constexpr unsigned char
-40039:       max() noexcept { return 0x7f * 2U + 1; }
-40039: 
-40039: 
-40039:       static constexpr unsigned char
-40039:       lowest() noexcept { return min(); }
-40039: 
-40039: 
-40039:       static constexpr int digits
-40039:        = (sizeof(unsigned char) * 8 - ((unsigned char)(-1) < 0));
-40039:       static constexpr int digits10
-40039:        = ((sizeof(unsigned char) * 8 - ((unsigned char)(-1) < 0)) * 643L / 2136);
-40039: 
-40039:       static constexpr int max_digits10 = 0;
-40039: 
-40039:       static constexpr bool is_signed = false;
-40039:       static constexpr bool is_integer = true;
-40039:       static constexpr bool is_exact = true;
-40039:       static constexpr int radix = 2;
-40039: 
-40039:       static constexpr unsigned char
-40039:       epsilon() noexcept { return 0; }
-40039: 
-40039:       static constexpr unsigned char
-40039:       round_error() noexcept { return 0; }
-40039: 
-40039:       static constexpr int min_exponent = 0;
-40039:       static constexpr int min_exponent10 = 0;
-40039:       static constexpr int max_exponent = 0;
-40039:       static constexpr int max_exponent10 = 0;
-40039: 
-40039:       static constexpr bool has_infinity = false;
-40039:       static constexpr bool has_quiet_NaN = false;
-40039:       static constexpr bool has_signaling_NaN = false;
-40039:       static constexpr float_denorm_style has_denorm
-40039:        = denorm_absent;
-40039:       static constexpr bool has_denorm_loss = false;
-40039: 
-40039:       static constexpr unsigned char
-40039:       infinity() noexcept
-40039:       { return static_cast<unsigned char>(0); }
-40039: 
-40039:       static constexpr unsigned char
-40039:       quiet_NaN() noexcept
-40039:       { return static_cast<unsigned char>(0); }
-40039: 
-40039:       static constexpr unsigned char
-40039:       signaling_NaN() noexcept
-40039:       { return static_cast<unsigned char>(0); }
-40039: 
-40039:       static constexpr unsigned char
-40039:       denorm_min() noexcept
-40039:       { return static_cast<unsigned char>(0); }
-40039: 
-40039:       static constexpr bool is_iec559 = false;
-40039:       static constexpr bool is_bounded = true;
-40039:       static constexpr bool is_modulo = true;
-40039: 
-40039:       static constexpr bool traps = true;
-40039:       static constexpr bool tinyness_before = false;
-40039:       static constexpr float_round_style round_style
-40039:        = round_toward_zero;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct numeric_limits<wchar_t>
-40039:     {
-40039:       static constexpr bool is_specialized = true;
-40039: 
-40039:       static constexpr wchar_t
-40039:       min() noexcept { return (((wchar_t)(-1) < 0) ? -(((wchar_t)(-1) < 0) ? (((((wchar_t)1 << ((sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(wchar_t)0) - 1 : (wchar_t)0); }
-40039: 
-40039:       static constexpr wchar_t
-40039:       max() noexcept { return (((wchar_t)(-1) < 0) ? (((((wchar_t)1 << ((sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(wchar_t)0); }
-40039: 
-40039: 
-40039:       static constexpr wchar_t
-40039:       lowest() noexcept { return min(); }
-40039: 
-40039: 
-40039:       static constexpr int digits = (sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0));
-40039:       static constexpr int digits10
-40039:        = ((sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)) * 643L / 2136);
-40039: 
-40039:       static constexpr int max_digits10 = 0;
-40039: 
-40039:       static constexpr bool is_signed = ((wchar_t)(-1) < 0);
-40039:       static constexpr bool is_integer = true;
-40039:       static constexpr bool is_exact = true;
-40039:       static constexpr int radix = 2;
-40039: 
-40039:       static constexpr wchar_t
-40039:       epsilon() noexcept { return 0; }
-40039: 
-40039:       static constexpr wchar_t
-40039:       round_error() noexcept { return 0; }
-40039: 
-40039:       static constexpr int min_exponent = 0;
-40039:       static constexpr int min_exponent10 = 0;
-40039:       static constexpr int max_exponent = 0;
-40039:       static constexpr int max_exponent10 = 0;
-40039: 
-40039:       static constexpr bool has_infinity = false;
-40039:       static constexpr bool has_quiet_NaN = false;
-40039:       static constexpr bool has_signaling_NaN = false;
-40039:       static constexpr float_denorm_style has_denorm
-40039:        = denorm_absent;
-40039:       static constexpr bool has_denorm_loss = false;
-40039: 
-40039:       static constexpr wchar_t
-40039:       infinity() noexcept { return wchar_t(); }
-40039: 
-40039:       static constexpr wchar_t
-40039:       quiet_NaN() noexcept { return wchar_t(); }
-40039: 
-40039:       static constexpr wchar_t
-40039:       signaling_NaN() noexcept { return wchar_t(); }
-40039: 
-40039:       static constexpr wchar_t
-40039:       denorm_min() noexcept { return wchar_t(); }
-40039: 
-40039:       static constexpr bool is_iec559 = false;
-40039:       static constexpr bool is_bounded = true;
-40039:       static constexpr bool is_modulo = !is_signed;
-40039: 
-40039:       static constexpr bool traps = true;
-40039:       static constexpr bool tinyness_before = false;
-40039:       static constexpr float_round_style round_style
-40039:        = round_toward_zero;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<>
-40039:     struct numeric_limits<char16_t>
-40039:     {
-40039:       static constexpr bool is_specialized = true;
-40039: 
-40039:       static constexpr char16_t
-40039:       min() noexcept { return (((char16_t)(-1) < 0) ? -(((char16_t)(-1) < 0) ? (((((char16_t)1 << ((sizeof(char16_t) * 8 - ((char16_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char16_t)0) - 1 : (char16_t)0); }
-40039: 
-40039:       static constexpr char16_t
-40039:       max() noexcept { return (((char16_t)(-1) < 0) ? (((((char16_t)1 << ((sizeof(char16_t) * 8 - ((char16_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char16_t)0); }
-40039: 
-40039:       static constexpr char16_t
-40039:       lowest() noexcept { return min(); }
-40039: 
-40039:       static constexpr int digits = (sizeof(char16_t) * 8 - ((char16_t)(-1) < 0));
-40039:       static constexpr int digits10 = ((sizeof(char16_t) * 8 - ((char16_t)(-1) < 0)) * 643L / 2136);
-40039:       static constexpr int max_digits10 = 0;
-40039:       static constexpr bool is_signed = ((char16_t)(-1) < 0);
-40039:       static constexpr bool is_integer = true;
-40039:       static constexpr bool is_exact = true;
-40039:       static constexpr int radix = 2;
-40039: 
-40039:       static constexpr char16_t
-40039:       epsilon() noexcept { return 0; }
-40039: 
-40039:       static constexpr char16_t
-40039:       round_error() noexcept { return 0; }
-40039: 
-40039:       static constexpr int min_exponent = 0;
-40039:       static constexpr int min_exponent10 = 0;
-40039:       static constexpr int max_exponent = 0;
-40039:       static constexpr int max_exponent10 = 0;
-40039: 
-40039:       static constexpr bool has_infinity = false;
-40039:       static constexpr bool has_quiet_NaN = false;
-40039:       static constexpr bool has_signaling_NaN = false;
-40039:       static constexpr float_denorm_style has_denorm = denorm_absent;
-40039:       static constexpr bool has_denorm_loss = false;
-40039: 
-40039:       static constexpr char16_t
-40039:       infinity() noexcept { return char16_t(); }
-40039: 
-40039:       static constexpr char16_t
-40039:       quiet_NaN() noexcept { return char16_t(); }
-40039: 
-40039:       static constexpr char16_t
-40039:       signaling_NaN() noexcept { return char16_t(); }
-40039: 
-40039:       static constexpr char16_t
-40039:       denorm_min() noexcept { return char16_t(); }
-40039: 
-40039:       static constexpr bool is_iec559 = false;
-40039:       static constexpr bool is_bounded = true;
-40039:       static constexpr bool is_modulo = !is_signed;
-40039: 
-40039:       static constexpr bool traps = true;
-40039:       static constexpr bool tinyness_before = false;
-40039:       static constexpr float_round_style round_style = round_toward_zero;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct numeric_limits<char32_t>
-40039:     {
-40039:       static constexpr bool is_specialized = true;
-40039: 
-40039:       static constexpr char32_t
-40039:       min() noexcept { return (((char32_t)(-1) < 0) ? -(((char32_t)(-1) < 0) ? (((((char32_t)1 << ((sizeof(char32_t) * 8 - ((char32_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char32_t)0) - 1 : (char32_t)0); }
-40039: 
-40039:       static constexpr char32_t
-40039:       max() noexcept { return (((char32_t)(-1) < 0) ? (((((char32_t)1 << ((sizeof(char32_t) * 8 - ((char32_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char32_t)0); }
-40039: 
-40039:       static constexpr char32_t
-40039:       lowest() noexcept { return min(); }
-40039: 
-40039:       static constexpr int digits = (sizeof(char32_t) * 8 - ((char32_t)(-1) < 0));
-40039:       static constexpr int digits10 = ((sizeof(char32_t) * 8 - ((char32_t)(-1) < 0)) * 643L / 2136);
-40039:       static constexpr int max_digits10 = 0;
-40039:       static constexpr bool is_signed = ((char32_t)(-1) < 0);
-40039:       static constexpr bool is_integer = true;
-40039:       static constexpr bool is_exact = true;
-40039:       static constexpr int radix = 2;
-40039: 
-40039:       static constexpr char32_t
-40039:       epsilon() noexcept { return 0; }
-40039: 
-40039:       static constexpr char32_t
-40039:       round_error() noexcept { return 0; }
-40039: 
-40039:       static constexpr int min_exponent = 0;
-40039:       static constexpr int min_exponent10 = 0;
-40039:       static constexpr int max_exponent = 0;
-40039:       static constexpr int max_exponent10 = 0;
-40039: 
-40039:       static constexpr bool has_infinity = false;
-40039:       static constexpr bool has_quiet_NaN = false;
-40039:       static constexpr bool has_signaling_NaN = false;
-40039:       static constexpr float_denorm_style has_denorm = denorm_absent;
-40039:       static constexpr bool has_denorm_loss = false;
-40039: 
-40039:       static constexpr char32_t
-40039:       infinity() noexcept { return char32_t(); }
-40039: 
-40039:       static constexpr char32_t
-40039:       quiet_NaN() noexcept { return char32_t(); }
-40039: 
-40039:       static constexpr char32_t
-40039:       signaling_NaN() noexcept { return char32_t(); }
-40039: 
-40039:       static constexpr char32_t
-40039:       denorm_min() noexcept { return char32_t(); }
-40039: 
-40039:       static constexpr bool is_iec559 = false;
-40039:       static constexpr bool is_bounded = true;
-40039:       static constexpr bool is_modulo = !is_signed;
-40039: 
-40039:       static constexpr bool traps = true;
-40039:       static constexpr bool tinyness_before = false;
-40039:       static constexpr float_round_style round_style = round_toward_zero;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<>
-40039:     struct numeric_limits<short>
-40039:     {
-40039:       static constexpr bool is_specialized = true;
-40039: 
-40039:       static constexpr short
-40039:       min() noexcept { return -0x7fff - 1; }
-40039: 
-40039:       static constexpr short
-40039:       max() noexcept { return 0x7fff; }
-40039: 
-40039: 
-40039:       static constexpr short
-40039:       lowest() noexcept { return min(); }
-40039: 
-40039: 
-40039:       static constexpr int digits = (sizeof(short) * 8 - ((short)(-1) < 0));
-40039:       static constexpr int digits10 = ((sizeof(short) * 8 - ((short)(-1) < 0)) * 643L / 2136);
-40039: 
-40039:       static constexpr int max_digits10 = 0;
-40039: 
-40039:       static constexpr bool is_signed = true;
-40039:       static constexpr bool is_integer = true;
-40039:       static constexpr bool is_exact = true;
-40039:       static constexpr int radix = 2;
-40039: 
-40039:       static constexpr short
-40039:       epsilon() noexcept { return 0; }
-40039: 
-40039:       static constexpr short
-40039:       round_error() noexcept { return 0; }
-40039: 
-40039:       static constexpr int min_exponent = 0;
-40039:       static constexpr int min_exponent10 = 0;
-40039:       static constexpr int max_exponent = 0;
-40039:       static constexpr int max_exponent10 = 0;
-40039: 
-40039:       static constexpr bool has_infinity = false;
-40039:       static constexpr bool has_quiet_NaN = false;
-40039:       static constexpr bool has_signaling_NaN = false;
-40039:       static constexpr float_denorm_style has_denorm
-40039:        = denorm_absent;
-40039:       static constexpr bool has_denorm_loss = false;
-40039: 
-40039:       static constexpr short
-40039:       infinity() noexcept { return short(); }
-40039: 
-40039:       static constexpr short
-40039:       quiet_NaN() noexcept { return short(); }
-40039: 
-40039:       static constexpr short
-40039:       signaling_NaN() noexcept { return short(); }
-40039: 
-40039:       static constexpr short
-40039:       denorm_min() noexcept { return short(); }
-40039: 
-40039:       static constexpr bool is_iec559 = false;
-40039:       static constexpr bool is_bounded = true;
-40039:       static constexpr bool is_modulo = false;
-40039: 
-40039:       static constexpr bool traps = true;
-40039:       static constexpr bool tinyness_before = false;
-40039:       static constexpr float_round_style round_style
-40039:        = round_toward_zero;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct numeric_limits<unsigned short>
-40039:     {
-40039:       static constexpr bool is_specialized = true;
-40039: 
-40039:       static constexpr unsigned short
-40039:       min() noexcept { return 0; }
-40039: 
-40039:       static constexpr unsigned short
-40039:       max() noexcept { return 0x7fff * 2U + 1; }
-40039: 
-40039: 
-40039:       static constexpr unsigned short
-40039:       lowest() noexcept { return min(); }
-40039: 
-40039: 
-40039:       static constexpr int digits
-40039:        = (sizeof(unsigned short) * 8 - ((unsigned short)(-1) < 0));
-40039:       static constexpr int digits10
-40039:        = ((sizeof(unsigned short) * 8 - ((unsigned short)(-1) < 0)) * 643L / 2136);
-40039: 
-40039:       static constexpr int max_digits10 = 0;
-40039: 
-40039:       static constexpr bool is_signed = false;
-40039:       static constexpr bool is_integer = true;
-40039:       static constexpr bool is_exact = true;
-40039:       static constexpr int radix = 2;
-40039: 
-40039:       static constexpr unsigned short
-40039:       epsilon() noexcept { return 0; }
-40039: 
-40039:       static constexpr unsigned short
-40039:       round_error() noexcept { return 0; }
-40039: 
-40039:       static constexpr int min_exponent = 0;
-40039:       static constexpr int min_exponent10 = 0;
-40039:       static constexpr int max_exponent = 0;
-40039:       static constexpr int max_exponent10 = 0;
-40039: 
-40039:       static constexpr bool has_infinity = false;
-40039:       static constexpr bool has_quiet_NaN = false;
-40039:       static constexpr bool has_signaling_NaN = false;
-40039:       static constexpr float_denorm_style has_denorm
-40039:        = denorm_absent;
-40039:       static constexpr bool has_denorm_loss = false;
-40039: 
-40039:       static constexpr unsigned short
-40039:       infinity() noexcept
-40039:       { return static_cast<unsigned short>(0); }
-40039: 
-40039:       static constexpr unsigned short
-40039:       quiet_NaN() noexcept
-40039:       { return static_cast<unsigned short>(0); }
-40039: 
-40039:       static constexpr unsigned short
-40039:       signaling_NaN() noexcept
-40039:       { return static_cast<unsigned short>(0); }
-40039: 
-40039:       static constexpr unsigned short
-40039:       denorm_min() noexcept
-40039:       { return static_cast<unsigned short>(0); }
-40039: 
-40039:       static constexpr bool is_iec559 = false;
-40039:       static constexpr bool is_bounded = true;
-40039:       static constexpr bool is_modulo = true;
-40039: 
-40039:       static constexpr bool traps = true;
-40039:       static constexpr bool tinyness_before = false;
-40039:       static constexpr float_round_style round_style
-40039:        = round_toward_zero;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct numeric_limits<int>
-40039:     {
-40039:       static constexpr bool is_specialized = true;
-40039: 
-40039:       static constexpr int
-40039:       min() noexcept { return -0x7fffffff - 1; }
-40039: 
-40039:       static constexpr int
-40039:       max() noexcept { return 0x7fffffff; }
-40039: 
-40039: 
-40039:       static constexpr int
-40039:       lowest() noexcept { return min(); }
-40039: 
-40039: 
-40039:       static constexpr int digits = (sizeof(int) * 8 - ((int)(-1) < 0));
-40039:       static constexpr int digits10 = ((sizeof(int) * 8 - ((int)(-1) < 0)) * 643L / 2136);
-40039: 
-40039:       static constexpr int max_digits10 = 0;
-40039: 
-40039:       static constexpr bool is_signed = true;
-40039:       static constexpr bool is_integer = true;
-40039:       static constexpr bool is_exact = true;
-40039:       static constexpr int radix = 2;
-40039: 
-40039:       static constexpr int
-40039:       epsilon() noexcept { return 0; }
-40039: 
-40039:       static constexpr int
-40039:       round_error() noexcept { return 0; }
-40039: 
-40039:       static constexpr int min_exponent = 0;
-40039:       static constexpr int min_exponent10 = 0;
-40039:       static constexpr int max_exponent = 0;
-40039:       static constexpr int max_exponent10 = 0;
-40039: 
-40039:       static constexpr bool has_infinity = false;
-40039:       static constexpr bool has_quiet_NaN = false;
-40039:       static constexpr bool has_signaling_NaN = false;
-40039:       static constexpr float_denorm_style has_denorm
-40039:        = denorm_absent;
-40039:       static constexpr bool has_denorm_loss = false;
-40039: 
-40039:       static constexpr int
-40039:       infinity() noexcept { return static_cast<int>(0); }
-40039: 
-40039:       static constexpr int
-40039:       quiet_NaN() noexcept { return static_cast<int>(0); }
-40039: 
-40039:       static constexpr int
-40039:       signaling_NaN() noexcept { return static_cast<int>(0); }
-40039: 
-40039:       static constexpr int
-40039:       denorm_min() noexcept { return static_cast<int>(0); }
-40039: 
-40039:       static constexpr bool is_iec559 = false;
-40039:       static constexpr bool is_bounded = true;
-40039:       static constexpr bool is_modulo = false;
-40039: 
-40039:       static constexpr bool traps = true;
-40039:       static constexpr bool tinyness_before = false;
-40039:       static constexpr float_round_style round_style
-40039:        = round_toward_zero;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct numeric_limits<unsigned int>
-40039:     {
-40039:       static constexpr bool is_specialized = true;
-40039: 
-40039:       static constexpr unsigned int
-40039:       min() noexcept { return 0; }
-40039: 
-40039:       static constexpr unsigned int
-40039:       max() noexcept { return 0x7fffffff * 2U + 1; }
-40039: 
-40039: 
-40039:       static constexpr unsigned int
-40039:       lowest() noexcept { return min(); }
-40039: 
-40039: 
-40039:       static constexpr int digits
-40039:        = (sizeof(unsigned int) * 8 - ((unsigned int)(-1) < 0));
-40039:       static constexpr int digits10
-40039:        = ((sizeof(unsigned int) * 8 - ((unsigned int)(-1) < 0)) * 643L / 2136);
-40039: 
-40039:       static constexpr int max_digits10 = 0;
-40039: 
-40039:       static constexpr bool is_signed = false;
-40039:       static constexpr bool is_integer = true;
-40039:       static constexpr bool is_exact = true;
-40039:       static constexpr int radix = 2;
-40039: 
-40039:       static constexpr unsigned int
-40039:       epsilon() noexcept { return 0; }
-40039: 
-40039:       static constexpr unsigned int
-40039:       round_error() noexcept { return 0; }
-40039: 
-40039:       static constexpr int min_exponent = 0;
-40039:       static constexpr int min_exponent10 = 0;
-40039:       static constexpr int max_exponent = 0;
-40039:       static constexpr int max_exponent10 = 0;
-40039: 
-40039:       static constexpr bool has_infinity = false;
-40039:       static constexpr bool has_quiet_NaN = false;
-40039:       static constexpr bool has_signaling_NaN = false;
-40039:       static constexpr float_denorm_style has_denorm
-40039:        = denorm_absent;
-40039:       static constexpr bool has_denorm_loss = false;
-40039: 
-40039:       static constexpr unsigned int
-40039:       infinity() noexcept { return static_cast<unsigned int>(0); }
-40039: 
-40039:       static constexpr unsigned int
-40039:       quiet_NaN() noexcept
-40039:       { return static_cast<unsigned int>(0); }
-40039: 
-40039:       static constexpr unsigned int
-40039:       signaling_NaN() noexcept
-40039:       { return static_cast<unsigned int>(0); }
-40039: 
-40039:       static constexpr unsigned int
-40039:       denorm_min() noexcept
-40039:       { return static_cast<unsigned int>(0); }
-40039: 
-40039:       static constexpr bool is_iec559 = false;
-40039:       static constexpr bool is_bounded = true;
-40039:       static constexpr bool is_modulo = true;
-40039: 
-40039:       static constexpr bool traps = true;
-40039:       static constexpr bool tinyness_before = false;
-40039:       static constexpr float_round_style round_style
-40039:        = round_toward_zero;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct numeric_limits<long>
-40039:     {
-40039:       static constexpr bool is_specialized = true;
-40039: 
-40039:       static constexpr long
-40039:       min() noexcept { return -0x7fffffffffffffffL - 1; }
-40039: 
-40039:       static constexpr long
-40039:       max() noexcept { return 0x7fffffffffffffffL; }
-40039: 
-40039: 
-40039:       static constexpr long
-40039:       lowest() noexcept { return min(); }
-40039: 
-40039: 
-40039:       static constexpr int digits = (sizeof(long) * 8 - ((long)(-1) < 0));
-40039:       static constexpr int digits10 = ((sizeof(long) * 8 - ((long)(-1) < 0)) * 643L / 2136);
-40039: 
-40039:       static constexpr int max_digits10 = 0;
-40039: 
-40039:       static constexpr bool is_signed = true;
-40039:       static constexpr bool is_integer = true;
-40039:       static constexpr bool is_exact = true;
-40039:       static constexpr int radix = 2;
-40039: 
-40039:       static constexpr long
-40039:       epsilon() noexcept { return 0; }
-40039: 
-40039:       static constexpr long
-40039:       round_error() noexcept { return 0; }
-40039: 
-40039:       static constexpr int min_exponent = 0;
-40039:       static constexpr int min_exponent10 = 0;
-40039:       static constexpr int max_exponent = 0;
-40039:       static constexpr int max_exponent10 = 0;
-40039: 
-40039:       static constexpr bool has_infinity = false;
-40039:       static constexpr bool has_quiet_NaN = false;
-40039:       static constexpr bool has_signaling_NaN = false;
-40039:       static constexpr float_denorm_style has_denorm
-40039:        = denorm_absent;
-40039:       static constexpr bool has_denorm_loss = false;
-40039: 
-40039:       static constexpr long
-40039:       infinity() noexcept { return static_cast<long>(0); }
-40039: 
-40039:       static constexpr long
-40039:       quiet_NaN() noexcept { return static_cast<long>(0); }
-40039: 
-40039:       static constexpr long
-40039:       signaling_NaN() noexcept { return static_cast<long>(0); }
-40039: 
-40039:       static constexpr long
-40039:       denorm_min() noexcept { return static_cast<long>(0); }
-40039: 
-40039:       static constexpr bool is_iec559 = false;
-40039:       static constexpr bool is_bounded = true;
-40039:       static constexpr bool is_modulo = false;
-40039: 
-40039:       static constexpr bool traps = true;
-40039:       static constexpr bool tinyness_before = false;
-40039:       static constexpr float_round_style round_style
-40039:        = round_toward_zero;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct numeric_limits<unsigned long>
-40039:     {
-40039:       static constexpr bool is_specialized = true;
-40039: 
-40039:       static constexpr unsigned long
-40039:       min() noexcept { return 0; }
-40039: 
-40039:       static constexpr unsigned long
-40039:       max() noexcept { return 0x7fffffffffffffffL * 2UL + 1; }
-40039: 
-40039: 
-40039:       static constexpr unsigned long
-40039:       lowest() noexcept { return min(); }
-40039: 
-40039: 
-40039:       static constexpr int digits
-40039:        = (sizeof(unsigned long) * 8 - ((unsigned long)(-1) < 0));
-40039:       static constexpr int digits10
-40039:        = ((sizeof(unsigned long) * 8 - ((unsigned long)(-1) < 0)) * 643L / 2136);
-40039: 
-40039:       static constexpr int max_digits10 = 0;
-40039: 
-40039:       static constexpr bool is_signed = false;
-40039:       static constexpr bool is_integer = true;
-40039:       static constexpr bool is_exact = true;
-40039:       static constexpr int radix = 2;
-40039: 
-40039:       static constexpr unsigned long
-40039:       epsilon() noexcept { return 0; }
-40039: 
-40039:       static constexpr unsigned long
-40039:       round_error() noexcept { return 0; }
-40039: 
-40039:       static constexpr int min_exponent = 0;
-40039:       static constexpr int min_exponent10 = 0;
-40039:       static constexpr int max_exponent = 0;
-40039:       static constexpr int max_exponent10 = 0;
-40039: 
-40039:       static constexpr bool has_infinity = false;
-40039:       static constexpr bool has_quiet_NaN = false;
-40039:       static constexpr bool has_signaling_NaN = false;
-40039:       static constexpr float_denorm_style has_denorm
-40039:        = denorm_absent;
-40039:       static constexpr bool has_denorm_loss = false;
-40039: 
-40039:       static constexpr unsigned long
-40039:       infinity() noexcept
-40039:       { return static_cast<unsigned long>(0); }
-40039: 
-40039:       static constexpr unsigned long
-40039:       quiet_NaN() noexcept
-40039:       { return static_cast<unsigned long>(0); }
-40039: 
-40039:       static constexpr unsigned long
-40039:       signaling_NaN() noexcept
-40039:       { return static_cast<unsigned long>(0); }
-40039: 
-40039:       static constexpr unsigned long
-40039:       denorm_min() noexcept
-40039:       { return static_cast<unsigned long>(0); }
-40039: 
-40039:       static constexpr bool is_iec559 = false;
-40039:       static constexpr bool is_bounded = true;
-40039:       static constexpr bool is_modulo = true;
-40039: 
-40039:       static constexpr bool traps = true;
-40039:       static constexpr bool tinyness_before = false;
-40039:       static constexpr float_round_style round_style
-40039:        = round_toward_zero;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct numeric_limits<long long>
-40039:     {
-40039:       static constexpr bool is_specialized = true;
-40039: 
-40039:       static constexpr long long
-40039:       min() noexcept { return -0x7fffffffffffffffLL - 1; }
-40039: 
-40039:       static constexpr long long
-40039:       max() noexcept { return 0x7fffffffffffffffLL; }
-40039: 
-40039: 
-40039:       static constexpr long long
-40039:       lowest() noexcept { return min(); }
-40039: 
-40039: 
-40039:       static constexpr int digits
-40039:        = (sizeof(long long) * 8 - ((long long)(-1) < 0));
-40039:       static constexpr int digits10
-40039:        = ((sizeof(long long) * 8 - ((long long)(-1) < 0)) * 643L / 2136);
-40039: 
-40039:       static constexpr int max_digits10 = 0;
-40039: 
-40039:       static constexpr bool is_signed = true;
-40039:       static constexpr bool is_integer = true;
-40039:       static constexpr bool is_exact = true;
-40039:       static constexpr int radix = 2;
-40039: 
-40039:       static constexpr long long
-40039:       epsilon() noexcept { return 0; }
-40039: 
-40039:       static constexpr long long
-40039:       round_error() noexcept { return 0; }
-40039: 
-40039:       static constexpr int min_exponent = 0;
-40039:       static constexpr int min_exponent10 = 0;
-40039:       static constexpr int max_exponent = 0;
-40039:       static constexpr int max_exponent10 = 0;
-40039: 
-40039:       static constexpr bool has_infinity = false;
-40039:       static constexpr bool has_quiet_NaN = false;
-40039:       static constexpr bool has_signaling_NaN = false;
-40039:       static constexpr float_denorm_style has_denorm
-40039:        = denorm_absent;
-40039:       static constexpr bool has_denorm_loss = false;
-40039: 
-40039:       static constexpr long long
-40039:       infinity() noexcept { return static_cast<long long>(0); }
-40039: 
-40039:       static constexpr long long
-40039:       quiet_NaN() noexcept { return static_cast<long long>(0); }
-40039: 
-40039:       static constexpr long long
-40039:       signaling_NaN() noexcept
-40039:       { return static_cast<long long>(0); }
-40039: 
-40039:       static constexpr long long
-40039:       denorm_min() noexcept { return static_cast<long long>(0); }
-40039: 
-40039:       static constexpr bool is_iec559 = false;
-40039:       static constexpr bool is_bounded = true;
-40039:       static constexpr bool is_modulo = false;
-40039: 
-40039:       static constexpr bool traps = true;
-40039:       static constexpr bool tinyness_before = false;
-40039:       static constexpr float_round_style round_style
-40039:        = round_toward_zero;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct numeric_limits<unsigned long long>
-40039:     {
-40039:       static constexpr bool is_specialized = true;
-40039: 
-40039:       static constexpr unsigned long long
-40039:       min() noexcept { return 0; }
-40039: 
-40039:       static constexpr unsigned long long
-40039:       max() noexcept { return 0x7fffffffffffffffLL * 2ULL + 1; }
-40039: 
-40039: 
-40039:       static constexpr unsigned long long
-40039:       lowest() noexcept { return min(); }
-40039: 
-40039: 
-40039:       static constexpr int digits
-40039:        = (sizeof(unsigned long long) * 8 - ((unsigned long long)(-1) < 0));
-40039:       static constexpr int digits10
-40039:        = ((sizeof(unsigned long long) * 8 - ((unsigned long long)(-1) < 0)) * 643L / 2136);
-40039: 
-40039:       static constexpr int max_digits10 = 0;
-40039: 
-40039:       static constexpr bool is_signed = false;
-40039:       static constexpr bool is_integer = true;
-40039:       static constexpr bool is_exact = true;
-40039:       static constexpr int radix = 2;
-40039: 
-40039:       static constexpr unsigned long long
-40039:       epsilon() noexcept { return 0; }
-40039: 
-40039:       static constexpr unsigned long long
-40039:       round_error() noexcept { return 0; }
-40039: 
-40039:       static constexpr int min_exponent = 0;
-40039:       static constexpr int min_exponent10 = 0;
-40039:       static constexpr int max_exponent = 0;
-40039:       static constexpr int max_exponent10 = 0;
-40039: 
-40039:       static constexpr bool has_infinity = false;
-40039:       static constexpr bool has_quiet_NaN = false;
-40039:       static constexpr bool has_signaling_NaN = false;
-40039:       static constexpr float_denorm_style has_denorm
-40039:        = denorm_absent;
-40039:       static constexpr bool has_denorm_loss = false;
-40039: 
-40039:       static constexpr unsigned long long
-40039:       infinity() noexcept
-40039:       { return static_cast<unsigned long long>(0); }
-40039: 
-40039:       static constexpr unsigned long long
-40039:       quiet_NaN() noexcept
-40039:       { return static_cast<unsigned long long>(0); }
-40039: 
-40039:       static constexpr unsigned long long
-40039:       signaling_NaN() noexcept
-40039:       { return static_cast<unsigned long long>(0); }
-40039: 
-40039:       static constexpr unsigned long long
-40039:       denorm_min() noexcept
-40039:       { return static_cast<unsigned long long>(0); }
-40039: 
-40039:       static constexpr bool is_iec559 = false;
-40039:       static constexpr bool is_bounded = true;
-40039:       static constexpr bool is_modulo = true;
-40039: 
-40039:       static constexpr bool traps = true;
-40039:       static constexpr bool tinyness_before = false;
-40039:       static constexpr float_round_style round_style
-40039:        = round_toward_zero;
-40039:     };
-40039: # 1570 "/usr/include/c++/8/limits" 3
-40039:   template<> struct numeric_limits<__int128> { static constexpr bool is_specialized = true; static constexpr __int128 min() noexcept { return (((__int128)(-1) < 0) ? -(((__int128)(-1) < 0) ? (((((__int128)1 << ((128 - ((__int128)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(__int128)0) - 1 : (__int128)0); } static constexpr __int128 max() noexcept { return (((__int128)(-1) < 0) ? (((((__int128)1 << ((128 - ((__int128)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(__int128)0); } static constexpr int digits = 128 - 1; static constexpr int digits10 = (128 - 1) * 643L / 2136; static constexpr bool is_signed = true; static constexpr bool is_integer = true; static constexpr bool is_exact = true; static constexpr int radix = 2; static constexpr __int128 epsilon() noexcept { return 0; } static constexpr __int128 round_error() noexcept { return 0; } static constexpr __int128 lowest() noexcept { return min(); } static constexpr int max_digits10 = 0; static constexpr int min_exponent = 0; static constexpr int min_exponent10 = 0; static constexpr int max_exponent = 0; static constexpr int max_exponent10 = 0; static constexpr bool has_infinity = false; static constexpr bool has_quiet_NaN = false; static constexpr bool has_signaling_NaN = false; static constexpr float_denorm_style has_denorm = denorm_absent; static constexpr bool has_denorm_loss = false; static constexpr __int128 infinity() noexcept { return static_cast<__int128>(0); } static constexpr __int128 quiet_NaN() noexcept { return static_cast<__int128>(0); } static constexpr __int128 signaling_NaN() noexcept { return static_cast<__int128>(0); } static constexpr __int128 denorm_min() noexcept { return static_cast<__int128>(0); } static constexpr bool is_iec559 = false; static constexpr bool is_bounded = true; static constexpr bool is_modulo = false; static constexpr bool traps = true; static constexpr bool tinyness_before = false; static constexpr float_round_style round_style = round_toward_zero; }; template<> struct numeric_limits<unsigned __int128> { static constexpr bool is_specialized = true; static constexpr unsigned __int128 min() noexcept { return 0; } static constexpr unsigned __int128 max() noexcept { return (((unsigned __int128)(-1) < 0) ? (((((unsigned __int128)1 << ((128 - ((unsigned __int128)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(unsigned __int128)0); } static constexpr unsigned __int128 lowest() noexcept { return min(); } static constexpr int max_digits10 = 0; static constexpr int digits = 128; static constexpr int digits10 = 128 * 643L / 2136; static constexpr bool is_signed = false; static constexpr bool is_integer = true; static constexpr bool is_exact = true; static constexpr int radix = 2; static constexpr unsigned __int128 epsilon() noexcept { return 0; } static constexpr unsigned __int128 round_error() noexcept { return 0; } static constexpr int min_exponent = 0; static constexpr int min_exponent10 = 0; static constexpr int max_exponent = 0; static constexpr int max_exponent10 = 0; static constexpr bool has_infinity = false; static constexpr bool has_quiet_NaN = false; static constexpr bool has_signaling_NaN = false; static constexpr float_denorm_style has_denorm = denorm_absent; static constexpr bool has_denorm_loss = false; static constexpr unsigned __int128 infinity() noexcept { return static_cast<unsigned __int128>(0); } static constexpr unsigned __int128 quiet_NaN() noexcept { return static_cast<unsigned __int128>(0); } static constexpr unsigned __int128 signaling_NaN() noexcept { return static_cast<unsigned __int128>(0); } static constexpr unsigned __int128 denorm_min() noexcept { return static_cast<unsigned __int128>(0); } static constexpr bool is_iec559 = false; static constexpr bool is_bounded = true; static constexpr bool is_modulo = true; static constexpr bool traps = true; static constexpr bool tinyness_before = false; static constexpr float_round_style round_style = round_toward_zero; };
-40039: # 1593 "/usr/include/c++/8/limits" 3
-40039:   template<>
-40039:     struct numeric_limits<float>
-40039:     {
-40039:       static constexpr bool is_specialized = true;
-40039: 
-40039:       static constexpr float
-40039:       min() noexcept { return 1.17549435082228750796873653722224568e-38F; }
-40039: 
-40039:       static constexpr float
-40039:       max() noexcept { return 3.40282346638528859811704183484516925e+38F; }
-40039: 
-40039: 
-40039:       static constexpr float
-40039:       lowest() noexcept { return -3.40282346638528859811704183484516925e+38F; }
-40039: 
-40039: 
-40039:       static constexpr int digits = 24;
-40039:       static constexpr int digits10 = 6;
-40039: 
-40039:       static constexpr int max_digits10
-40039:   = (2 + (24) * 643L / 2136);
-40039: 
-40039:       static constexpr bool is_signed = true;
-40039:       static constexpr bool is_integer = false;
-40039:       static constexpr bool is_exact = false;
-40039:       static constexpr int radix = 2;
-40039: 
-40039:       static constexpr float
-40039:       epsilon() noexcept { return 1.19209289550781250000000000000000000e-7F; }
-40039: 
-40039:       static constexpr float
-40039:       round_error() noexcept { return 0.5F; }
-40039: 
-40039:       static constexpr int min_exponent = (-125);
-40039:       static constexpr int min_exponent10 = (-37);
-40039:       static constexpr int max_exponent = 128;
-40039:       static constexpr int max_exponent10 = 38;
-40039: 
-40039:       static constexpr bool has_infinity = 1;
-40039:       static constexpr bool has_quiet_NaN = 1;
-40039:       static constexpr bool has_signaling_NaN = has_quiet_NaN;
-40039:       static constexpr float_denorm_style has_denorm
-40039:  = bool(1) ? denorm_present : denorm_absent;
-40039:       static constexpr bool has_denorm_loss
-40039:        = false;
-40039: 
-40039:       static constexpr float
-40039:       infinity() noexcept { return __builtin_huge_valf(); }
-40039: 
-40039:       static constexpr float
-40039:       quiet_NaN() noexcept { return __builtin_nanf(""); }
-40039: 
-40039:       static constexpr float
-40039:       signaling_NaN() noexcept { return __builtin_nansf(""); }
-40039: 
-40039:       static constexpr float
-40039:       denorm_min() noexcept { return 1.40129846432481707092372958328991613e-45F; }
-40039: 
-40039:       static constexpr bool is_iec559
-40039:  = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
-40039:       static constexpr bool is_bounded = true;
-40039:       static constexpr bool is_modulo = false;
-40039: 
-40039:       static constexpr bool traps = false;
-40039:       static constexpr bool tinyness_before
-40039:        = false;
-40039:       static constexpr float_round_style round_style
-40039:        = round_to_nearest;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<>
-40039:     struct numeric_limits<double>
-40039:     {
-40039:       static constexpr bool is_specialized = true;
-40039: 
-40039:       static constexpr double
-40039:       min() noexcept { return double(2.22507385850720138309023271733240406e-308L); }
-40039: 
-40039:       static constexpr double
-40039:       max() noexcept { return double(1.79769313486231570814527423731704357e+308L); }
-40039: 
-40039: 
-40039:       static constexpr double
-40039:       lowest() noexcept { return -double(1.79769313486231570814527423731704357e+308L); }
-40039: 
-40039: 
-40039:       static constexpr int digits = 53;
-40039:       static constexpr int digits10 = 15;
-40039: 
-40039:       static constexpr int max_digits10
-40039:   = (2 + (53) * 643L / 2136);
-40039: 
-40039:       static constexpr bool is_signed = true;
-40039:       static constexpr bool is_integer = false;
-40039:       static constexpr bool is_exact = false;
-40039:       static constexpr int radix = 2;
-40039: 
-40039:       static constexpr double
-40039:       epsilon() noexcept { return double(2.22044604925031308084726333618164062e-16L); }
-40039: 
-40039:       static constexpr double
-40039:       round_error() noexcept { return 0.5; }
-40039: 
-40039:       static constexpr int min_exponent = (-1021);
-40039:       static constexpr int min_exponent10 = (-307);
-40039:       static constexpr int max_exponent = 1024;
-40039:       static constexpr int max_exponent10 = 308;
-40039: 
-40039:       static constexpr bool has_infinity = 1;
-40039:       static constexpr bool has_quiet_NaN = 1;
-40039:       static constexpr bool has_signaling_NaN = has_quiet_NaN;
-40039:       static constexpr float_denorm_style has_denorm
-40039:  = bool(1) ? denorm_present : denorm_absent;
-40039:       static constexpr bool has_denorm_loss
-40039:         = false;
-40039: 
-40039:       static constexpr double
-40039:       infinity() noexcept { return __builtin_huge_val(); }
-40039: 
-40039:       static constexpr double
-40039:       quiet_NaN() noexcept { return __builtin_nan(""); }
-40039: 
-40039:       static constexpr double
-40039:       signaling_NaN() noexcept { return __builtin_nans(""); }
-40039: 
-40039:       static constexpr double
-40039:       denorm_min() noexcept { return double(4.94065645841246544176568792868221372e-324L); }
-40039: 
-40039:       static constexpr bool is_iec559
-40039:  = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
-40039:       static constexpr bool is_bounded = true;
-40039:       static constexpr bool is_modulo = false;
-40039: 
-40039:       static constexpr bool traps = false;
-40039:       static constexpr bool tinyness_before
-40039:        = false;
-40039:       static constexpr float_round_style round_style
-40039:        = round_to_nearest;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<>
-40039:     struct numeric_limits<long double>
-40039:     {
-40039:       static constexpr bool is_specialized = true;
-40039: 
-40039:       static constexpr long double
-40039:       min() noexcept { return 3.36210314311209350626267781732175260e-4932L; }
-40039: 
-40039:       static constexpr long double
-40039:       max() noexcept { return 1.18973149535723176502126385303097021e+4932L; }
-40039: 
-40039: 
-40039:       static constexpr long double
-40039:       lowest() noexcept { return -1.18973149535723176502126385303097021e+4932L; }
-40039: 
-40039: 
-40039:       static constexpr int digits = 64;
-40039:       static constexpr int digits10 = 18;
-40039: 
-40039:       static constexpr int max_digits10
-40039:   = (2 + (64) * 643L / 2136);
-40039: 
-40039:       static constexpr bool is_signed = true;
-40039:       static constexpr bool is_integer = false;
-40039:       static constexpr bool is_exact = false;
-40039:       static constexpr int radix = 2;
-40039: 
-40039:       static constexpr long double
-40039:       epsilon() noexcept { return 1.08420217248550443400745280086994171e-19L; }
-40039: 
-40039:       static constexpr long double
-40039:       round_error() noexcept { return 0.5L; }
-40039: 
-40039:       static constexpr int min_exponent = (-16381);
-40039:       static constexpr int min_exponent10 = (-4931);
-40039:       static constexpr int max_exponent = 16384;
-40039:       static constexpr int max_exponent10 = 4932;
-40039: 
-40039:       static constexpr bool has_infinity = 1;
-40039:       static constexpr bool has_quiet_NaN = 1;
-40039:       static constexpr bool has_signaling_NaN = has_quiet_NaN;
-40039:       static constexpr float_denorm_style has_denorm
-40039:  = bool(1) ? denorm_present : denorm_absent;
-40039:       static constexpr bool has_denorm_loss
-40039:  = false;
-40039: 
-40039:       static constexpr long double
-40039:       infinity() noexcept { return __builtin_huge_vall(); }
-40039: 
-40039:       static constexpr long double
-40039:       quiet_NaN() noexcept { return __builtin_nanl(""); }
-40039: 
-40039:       static constexpr long double
-40039:       signaling_NaN() noexcept { return __builtin_nansl(""); }
-40039: 
-40039:       static constexpr long double
-40039:       denorm_min() noexcept { return 3.64519953188247460252840593361941982e-4951L; }
-40039: 
-40039:       static constexpr bool is_iec559
-40039:  = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
-40039:       static constexpr bool is_bounded = true;
-40039:       static constexpr bool is_modulo = false;
-40039: 
-40039:       static constexpr bool traps = false;
-40039:       static constexpr bool tinyness_before =
-40039:       false;
-40039:       static constexpr float_round_style round_style =
-40039:             round_to_nearest;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 38 "/usr/include/gmpxx.h" 2 3 4
-40039: # 1 "/usr/include/c++/8/utility" 1 3 4
-40039: # 58 "/usr/include/c++/8/utility" 3 4
-40039:        
-40039: # 59 "/usr/include/c++/8/utility" 3
-40039: # 69 "/usr/include/c++/8/utility" 3
-40039: # 1 "/usr/include/c++/8/bits/stl_relops.h" 1 3
-40039: # 67 "/usr/include/c++/8/bits/stl_relops.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   namespace rel_ops
-40039:   {
-40039: # 85 "/usr/include/c++/8/bits/stl_relops.h" 3
-40039:     template <class _Tp>
-40039:       inline bool
-40039:       operator!=(const _Tp& __x, const _Tp& __y)
-40039:       { return !(__x == __y); }
-40039: # 98 "/usr/include/c++/8/bits/stl_relops.h" 3
-40039:     template <class _Tp>
-40039:       inline bool
-40039:       operator>(const _Tp& __x, const _Tp& __y)
-40039:       { return __y < __x; }
-40039: # 111 "/usr/include/c++/8/bits/stl_relops.h" 3
-40039:     template <class _Tp>
-40039:       inline bool
-40039:       operator<=(const _Tp& __x, const _Tp& __y)
-40039:       { return !(__y < __x); }
-40039: # 124 "/usr/include/c++/8/bits/stl_relops.h" 3
-40039:     template <class _Tp>
-40039:       inline bool
-40039:       operator>=(const _Tp& __x, const _Tp& __y)
-40039:       { return !(__x < __y); }
-40039:   }
-40039: 
-40039: 
-40039: }
-40039: # 70 "/usr/include/c++/8/utility" 2 3
-40039: # 1 "/usr/include/c++/8/bits/stl_pair.h" 1 3
-40039: # 59 "/usr/include/c++/8/bits/stl_pair.h" 3
-40039: # 1 "/usr/include/c++/8/bits/move.h" 1 3
-40039: # 34 "/usr/include/c++/8/bits/move.h" 3
-40039: # 1 "/usr/include/c++/8/bits/concept_check.h" 1 3
-40039: # 33 "/usr/include/c++/8/bits/concept_check.h" 3
-40039:        
-40039: # 34 "/usr/include/c++/8/bits/concept_check.h" 3
-40039: # 35 "/usr/include/c++/8/bits/move.h" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline constexpr _Tp*
-40039:     __addressof(_Tp& __r) noexcept
-40039:     { return __builtin_addressof(__r); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: # 1 "/usr/include/c++/8/type_traits" 1 3
-40039: # 32 "/usr/include/c++/8/type_traits" 3
-40039:        
-40039: # 33 "/usr/include/c++/8/type_traits" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 56 "/usr/include/c++/8/type_traits" 3
-40039:   template<typename _Tp, _Tp __v>
-40039:     struct integral_constant
-40039:     {
-40039:       static constexpr _Tp value = __v;
-40039:       typedef _Tp value_type;
-40039:       typedef integral_constant<_Tp, __v> type;
-40039:       constexpr operator value_type() const noexcept { return value; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       constexpr value_type operator()() const noexcept { return value; }
-40039: 
-40039:     };
-40039: 
-40039:   template<typename _Tp, _Tp __v>
-40039:     constexpr _Tp integral_constant<_Tp, __v>::value;
-40039: 
-40039: 
-40039:   typedef integral_constant<bool, true> true_type;
-40039: 
-40039: 
-40039:   typedef integral_constant<bool, false> false_type;
-40039: 
-40039:   template<bool __v>
-40039:     using __bool_constant = integral_constant<bool, __v>;
-40039: # 91 "/usr/include/c++/8/type_traits" 3
-40039:   template<bool, typename, typename>
-40039:     struct conditional;
-40039: 
-40039:   template<typename...>
-40039:     struct __or_;
-40039: 
-40039:   template<>
-40039:     struct __or_<>
-40039:     : public false_type
-40039:     { };
-40039: 
-40039:   template<typename _B1>
-40039:     struct __or_<_B1>
-40039:     : public _B1
-40039:     { };
-40039: 
-40039:   template<typename _B1, typename _B2>
-40039:     struct __or_<_B1, _B2>
-40039:     : public conditional<_B1::value, _B1, _B2>::type
-40039:     { };
-40039: 
-40039:   template<typename _B1, typename _B2, typename _B3, typename... _Bn>
-40039:     struct __or_<_B1, _B2, _B3, _Bn...>
-40039:     : public conditional<_B1::value, _B1, __or_<_B2, _B3, _Bn...>>::type
-40039:     { };
-40039: 
-40039:   template<typename...>
-40039:     struct __and_;
-40039: 
-40039:   template<>
-40039:     struct __and_<>
-40039:     : public true_type
-40039:     { };
-40039: 
-40039:   template<typename _B1>
-40039:     struct __and_<_B1>
-40039:     : public _B1
-40039:     { };
-40039: 
-40039:   template<typename _B1, typename _B2>
-40039:     struct __and_<_B1, _B2>
-40039:     : public conditional<_B1::value, _B2, _B1>::type
-40039:     { };
-40039: 
-40039:   template<typename _B1, typename _B2, typename _B3, typename... _Bn>
-40039:     struct __and_<_B1, _B2, _B3, _Bn...>
-40039:     : public conditional<_B1::value, __and_<_B2, _B3, _Bn...>, _B1>::type
-40039:     { };
-40039: 
-40039:   template<typename _Pp>
-40039:     struct __not_
-40039:     : public __bool_constant<!bool(_Pp::value)>
-40039:     { };
-40039: # 180 "/usr/include/c++/8/type_traits" 3
-40039:   template<typename _Tp>
-40039:     struct __success_type
-40039:     { typedef _Tp type; };
-40039: 
-40039:   struct __failure_type
-40039:   { };
-40039: 
-40039: 
-40039: 
-40039:   template<typename>
-40039:     struct remove_cv;
-40039: 
-40039:   template<typename>
-40039:     struct __is_void_helper
-40039:     : public false_type { };
-40039: 
-40039:   template<>
-40039:     struct __is_void_helper<void>
-40039:     : public true_type { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_void
-40039:     : public __is_void_helper<typename remove_cv<_Tp>::type>::type
-40039:     { };
-40039: 
-40039:   template<typename>
-40039:     struct __is_integral_helper
-40039:     : public false_type { };
-40039: 
-40039:   template<>
-40039:     struct __is_integral_helper<bool>
-40039:     : public true_type { };
-40039: 
-40039:   template<>
-40039:     struct __is_integral_helper<char>
-40039:     : public true_type { };
-40039: 
-40039:   template<>
-40039:     struct __is_integral_helper<signed char>
-40039:     : public true_type { };
-40039: 
-40039:   template<>
-40039:     struct __is_integral_helper<unsigned char>
-40039:     : public true_type { };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct __is_integral_helper<wchar_t>
-40039:     : public true_type { };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct __is_integral_helper<char16_t>
-40039:     : public true_type { };
-40039: 
-40039:   template<>
-40039:     struct __is_integral_helper<char32_t>
-40039:     : public true_type { };
-40039: 
-40039:   template<>
-40039:     struct __is_integral_helper<short>
-40039:     : public true_type { };
-40039: 
-40039:   template<>
-40039:     struct __is_integral_helper<unsigned short>
-40039:     : public true_type { };
-40039: 
-40039:   template<>
-40039:     struct __is_integral_helper<int>
-40039:     : public true_type { };
-40039: 
-40039:   template<>
-40039:     struct __is_integral_helper<unsigned int>
-40039:     : public true_type { };
-40039: 
-40039:   template<>
-40039:     struct __is_integral_helper<long>
-40039:     : public true_type { };
-40039: 
-40039:   template<>
-40039:     struct __is_integral_helper<unsigned long>
-40039:     : public true_type { };
-40039: 
-40039:   template<>
-40039:     struct __is_integral_helper<long long>
-40039:     : public true_type { };
-40039: 
-40039:   template<>
-40039:     struct __is_integral_helper<unsigned long long>
-40039:     : public true_type { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<>
-40039:     struct __is_integral_helper<__int128>
-40039:     : public true_type { };
-40039: 
-40039:   template<>
-40039:     struct __is_integral_helper<unsigned __int128>
-40039:     : public true_type { };
-40039: # 312 "/usr/include/c++/8/type_traits" 3
-40039:   template<typename _Tp>
-40039:     struct is_integral
-40039:     : public __is_integral_helper<typename remove_cv<_Tp>::type>::type
-40039:     { };
-40039: 
-40039:   template<typename>
-40039:     struct __is_floating_point_helper
-40039:     : public false_type { };
-40039: 
-40039:   template<>
-40039:     struct __is_floating_point_helper<float>
-40039:     : public true_type { };
-40039: 
-40039:   template<>
-40039:     struct __is_floating_point_helper<double>
-40039:     : public true_type { };
-40039: 
-40039:   template<>
-40039:     struct __is_floating_point_helper<long double>
-40039:     : public true_type { };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct __is_floating_point_helper<__float128>
-40039:     : public true_type { };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_floating_point
-40039:     : public __is_floating_point_helper<typename remove_cv<_Tp>::type>::type
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename>
-40039:     struct is_array
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp, std::size_t _Size>
-40039:     struct is_array<_Tp[_Size]>
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_array<_Tp[]>
-40039:     : public true_type { };
-40039: 
-40039:   template<typename>
-40039:     struct __is_pointer_helper
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_pointer_helper<_Tp*>
-40039:     : public true_type { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_pointer
-40039:     : public __is_pointer_helper<typename remove_cv<_Tp>::type>::type
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename>
-40039:     struct is_lvalue_reference
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_lvalue_reference<_Tp&>
-40039:     : public true_type { };
-40039: 
-40039: 
-40039:   template<typename>
-40039:     struct is_rvalue_reference
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_rvalue_reference<_Tp&&>
-40039:     : public true_type { };
-40039: 
-40039:   template<typename>
-40039:     struct is_function;
-40039: 
-40039:   template<typename>
-40039:     struct __is_member_object_pointer_helper
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp, typename _Cp>
-40039:     struct __is_member_object_pointer_helper<_Tp _Cp::*>
-40039:     : public integral_constant<bool, !is_function<_Tp>::value> { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_member_object_pointer
-40039:     : public __is_member_object_pointer_helper<
-40039:     typename remove_cv<_Tp>::type>::type
-40039:     { };
-40039: 
-40039:   template<typename>
-40039:     struct __is_member_function_pointer_helper
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp, typename _Cp>
-40039:     struct __is_member_function_pointer_helper<_Tp _Cp::*>
-40039:     : public integral_constant<bool, is_function<_Tp>::value> { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_member_function_pointer
-40039:     : public __is_member_function_pointer_helper<
-40039:     typename remove_cv<_Tp>::type>::type
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_enum
-40039:     : public integral_constant<bool, __is_enum(_Tp)>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_union
-40039:     : public integral_constant<bool, __is_union(_Tp)>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_class
-40039:     : public integral_constant<bool, __is_class(_Tp)>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename>
-40039:     struct is_function
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes...) >
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes...) & >
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes...) && >
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes......) >
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes......) & >
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes......) && >
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes...) const >
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes...) const & >
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes...) const && >
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes......) const >
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes......) const & >
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes......) const && >
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes...) volatile >
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes...) volatile & >
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes...) volatile && >
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes......) volatile >
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes......) volatile & >
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes......) volatile && >
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes...) const volatile >
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes...) const volatile & >
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes...) const volatile && >
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes......) const volatile >
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes......) const volatile & >
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct is_function<_Res(_ArgTypes......) const volatile && >
-40039:     : public true_type { };
-40039: 
-40039: 
-40039: 
-40039:   template<typename>
-40039:     struct __is_null_pointer_helper
-40039:     : public false_type { };
-40039: 
-40039:   template<>
-40039:     struct __is_null_pointer_helper<std::nullptr_t>
-40039:     : public true_type { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_null_pointer
-40039:     : public __is_null_pointer_helper<typename remove_cv<_Tp>::type>::type
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_nullptr_t
-40039:     : public is_null_pointer<_Tp>
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_reference
-40039:     : public __or_<is_lvalue_reference<_Tp>,
-40039:                    is_rvalue_reference<_Tp>>::type
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_arithmetic
-40039:     : public __or_<is_integral<_Tp>, is_floating_point<_Tp>>::type
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_fundamental
-40039:     : public __or_<is_arithmetic<_Tp>, is_void<_Tp>,
-40039:      is_null_pointer<_Tp>>::type
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_object
-40039:     : public __not_<__or_<is_function<_Tp>, is_reference<_Tp>,
-40039:                           is_void<_Tp>>>::type
-40039:     { };
-40039: 
-40039:   template<typename>
-40039:     struct is_member_pointer;
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_scalar
-40039:     : public __or_<is_arithmetic<_Tp>, is_enum<_Tp>, is_pointer<_Tp>,
-40039:                    is_member_pointer<_Tp>, is_null_pointer<_Tp>>::type
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_compound
-40039:     : public integral_constant<bool, !is_fundamental<_Tp>::value> { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_member_pointer_helper
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp, typename _Cp>
-40039:     struct __is_member_pointer_helper<_Tp _Cp::*>
-40039:     : public true_type { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_member_pointer
-40039:     : public __is_member_pointer_helper<typename remove_cv<_Tp>::type>::type
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_referenceable
-40039:     : public __or_<is_object<_Tp>, is_reference<_Tp>>::type
-40039:     { };
-40039: 
-40039:   template<typename _Res, typename... _Args >
-40039:     struct __is_referenceable<_Res(_Args...) >
-40039:     : public true_type
-40039:     { };
-40039: 
-40039:   template<typename _Res, typename... _Args >
-40039:     struct __is_referenceable<_Res(_Args......) >
-40039:     : public true_type
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename>
-40039:     struct is_const
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_const<_Tp const>
-40039:     : public true_type { };
-40039: 
-40039: 
-40039:   template<typename>
-40039:     struct is_volatile
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_volatile<_Tp volatile>
-40039:     : public true_type { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_trivial
-40039:     : public integral_constant<bool, __is_trivial(_Tp)>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_trivially_copyable
-40039:     : public integral_constant<bool, __is_trivially_copyable(_Tp)>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_standard_layout
-40039:     : public integral_constant<bool, __is_standard_layout(_Tp)>
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_pod
-40039:     : public integral_constant<bool, __is_pod(_Tp)>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_literal_type
-40039:     : public integral_constant<bool, __is_literal_type(_Tp)>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_empty
-40039:     : public integral_constant<bool, __is_empty(_Tp)>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_polymorphic
-40039:     : public integral_constant<bool, __is_polymorphic(_Tp)>
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_final
-40039:     : public integral_constant<bool, __is_final(_Tp)>
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_abstract
-40039:     : public integral_constant<bool, __is_abstract(_Tp)>
-40039:     { };
-40039: 
-40039:   template<typename _Tp,
-40039:     bool = is_arithmetic<_Tp>::value>
-40039:     struct __is_signed_helper
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_signed_helper<_Tp, true>
-40039:     : public integral_constant<bool, _Tp(-1) < _Tp(0)>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_signed
-40039:     : public __is_signed_helper<_Tp>::type
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_unsigned
-40039:     : public __and_<is_arithmetic<_Tp>, __not_<is_signed<_Tp>>>
-40039:     { };
-40039: # 747 "/usr/include/c++/8/type_traits" 3
-40039:   template<typename _Tp, typename _Up = _Tp&&>
-40039:     _Up
-40039:     __declval(int);
-40039: 
-40039:   template<typename _Tp>
-40039:     _Tp
-40039:     __declval(long);
-40039: 
-40039:   template<typename _Tp>
-40039:     auto declval() noexcept -> decltype(__declval<_Tp>(0));
-40039: 
-40039:   template<typename, unsigned = 0>
-40039:     struct extent;
-40039: 
-40039:   template<typename>
-40039:     struct remove_all_extents;
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_array_known_bounds
-40039:     : public integral_constant<bool, (extent<_Tp>::value > 0)>
-40039:     { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_array_unknown_bounds
-40039:     : public __and_<is_array<_Tp>, __not_<extent<_Tp>>>
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   struct __do_is_destructible_impl
-40039:   {
-40039:     template<typename _Tp, typename = decltype(declval<_Tp&>().~_Tp())>
-40039:       static true_type __test(int);
-40039: 
-40039:     template<typename>
-40039:       static false_type __test(...);
-40039:   };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_destructible_impl
-40039:     : public __do_is_destructible_impl
-40039:     {
-40039:       typedef decltype(__test<_Tp>(0)) type;
-40039:     };
-40039: 
-40039:   template<typename _Tp,
-40039:            bool = __or_<is_void<_Tp>,
-40039:                         __is_array_unknown_bounds<_Tp>,
-40039:                         is_function<_Tp>>::value,
-40039:            bool = __or_<is_reference<_Tp>, is_scalar<_Tp>>::value>
-40039:     struct __is_destructible_safe;
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_destructible_safe<_Tp, false, false>
-40039:     : public __is_destructible_impl<typename
-40039:                remove_all_extents<_Tp>::type>::type
-40039:     { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_destructible_safe<_Tp, true, false>
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_destructible_safe<_Tp, false, true>
-40039:     : public true_type { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_destructible
-40039:     : public __is_destructible_safe<_Tp>::type
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   struct __do_is_nt_destructible_impl
-40039:   {
-40039:     template<typename _Tp>
-40039:       static integral_constant<bool, noexcept(declval<_Tp&>().~_Tp())>
-40039:         __test(int);
-40039: 
-40039:     template<typename>
-40039:       static false_type __test(...);
-40039:   };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_nt_destructible_impl
-40039:     : public __do_is_nt_destructible_impl
-40039:     {
-40039:       typedef decltype(__test<_Tp>(0)) type;
-40039:     };
-40039: 
-40039:   template<typename _Tp,
-40039:            bool = __or_<is_void<_Tp>,
-40039:                         __is_array_unknown_bounds<_Tp>,
-40039:                         is_function<_Tp>>::value,
-40039:            bool = __or_<is_reference<_Tp>, is_scalar<_Tp>>::value>
-40039:     struct __is_nt_destructible_safe;
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_nt_destructible_safe<_Tp, false, false>
-40039:     : public __is_nt_destructible_impl<typename
-40039:                remove_all_extents<_Tp>::type>::type
-40039:     { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_nt_destructible_safe<_Tp, true, false>
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_nt_destructible_safe<_Tp, false, true>
-40039:     : public true_type { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_nothrow_destructible
-40039:     : public __is_nt_destructible_safe<_Tp>::type
-40039:     { };
-40039: 
-40039:   struct __do_is_default_constructible_impl
-40039:   {
-40039:     template<typename _Tp, typename = decltype(_Tp())>
-40039:       static true_type __test(int);
-40039: 
-40039:     template<typename>
-40039:       static false_type __test(...);
-40039:   };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_default_constructible_impl
-40039:     : public __do_is_default_constructible_impl
-40039:     {
-40039:       typedef decltype(__test<_Tp>(0)) type;
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_default_constructible_atom
-40039:     : public __and_<__not_<is_void<_Tp>>,
-40039:                     __is_default_constructible_impl<_Tp>>
-40039:     { };
-40039: 
-40039:   template<typename _Tp, bool = is_array<_Tp>::value>
-40039:     struct __is_default_constructible_safe;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_default_constructible_safe<_Tp, true>
-40039:     : public __and_<__is_array_known_bounds<_Tp>,
-40039:       __is_default_constructible_atom<typename
-40039:                       remove_all_extents<_Tp>::type>>
-40039:     { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_default_constructible_safe<_Tp, false>
-40039:     : public __is_default_constructible_atom<_Tp>::type
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_default_constructible
-40039:     : public __is_default_constructible_safe<_Tp>::type
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp, typename... _Args>
-40039:     struct is_constructible
-40039:       : public __bool_constant<__is_constructible(_Tp, _Args...)>
-40039:     { };
-40039: 
-40039:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
-40039:     struct __is_copy_constructible_impl;
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_copy_constructible_impl<_Tp, false>
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_copy_constructible_impl<_Tp, true>
-40039:     : public is_constructible<_Tp, const _Tp&>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_copy_constructible
-40039:     : public __is_copy_constructible_impl<_Tp>
-40039:     { };
-40039: 
-40039:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
-40039:     struct __is_move_constructible_impl;
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_move_constructible_impl<_Tp, false>
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_move_constructible_impl<_Tp, true>
-40039:     : public is_constructible<_Tp, _Tp&&>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_move_constructible
-40039:     : public __is_move_constructible_impl<_Tp>
-40039:     { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_nt_default_constructible_atom
-40039:     : public integral_constant<bool, noexcept(_Tp())>
-40039:     { };
-40039: 
-40039:   template<typename _Tp, bool = is_array<_Tp>::value>
-40039:     struct __is_nt_default_constructible_impl;
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_nt_default_constructible_impl<_Tp, true>
-40039:     : public __and_<__is_array_known_bounds<_Tp>,
-40039:       __is_nt_default_constructible_atom<typename
-40039:                       remove_all_extents<_Tp>::type>>
-40039:     { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_nt_default_constructible_impl<_Tp, false>
-40039:     : public __is_nt_default_constructible_atom<_Tp>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_nothrow_default_constructible
-40039:     : public __and_<is_default_constructible<_Tp>,
-40039:                     __is_nt_default_constructible_impl<_Tp>>
-40039:     { };
-40039: 
-40039:   template<typename _Tp, typename... _Args>
-40039:     struct __is_nt_constructible_impl
-40039:     : public integral_constant<bool, noexcept(_Tp(declval<_Args>()...))>
-40039:     { };
-40039: 
-40039:   template<typename _Tp, typename _Arg>
-40039:     struct __is_nt_constructible_impl<_Tp, _Arg>
-40039:     : public integral_constant<bool,
-40039:                                noexcept(static_cast<_Tp>(declval<_Arg>()))>
-40039:     { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_nt_constructible_impl<_Tp>
-40039:     : public is_nothrow_default_constructible<_Tp>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp, typename... _Args>
-40039:     struct is_nothrow_constructible
-40039:     : public __and_<is_constructible<_Tp, _Args...>,
-40039:       __is_nt_constructible_impl<_Tp, _Args...>>
-40039:     { };
-40039: 
-40039:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
-40039:     struct __is_nothrow_copy_constructible_impl;
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_nothrow_copy_constructible_impl<_Tp, false>
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_nothrow_copy_constructible_impl<_Tp, true>
-40039:     : public is_nothrow_constructible<_Tp, const _Tp&>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_nothrow_copy_constructible
-40039:     : public __is_nothrow_copy_constructible_impl<_Tp>
-40039:     { };
-40039: 
-40039:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
-40039:     struct __is_nothrow_move_constructible_impl;
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_nothrow_move_constructible_impl<_Tp, false>
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_nothrow_move_constructible_impl<_Tp, true>
-40039:     : public is_nothrow_constructible<_Tp, _Tp&&>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_nothrow_move_constructible
-40039:     : public __is_nothrow_move_constructible_impl<_Tp>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     struct is_assignable
-40039:       : public __bool_constant<__is_assignable(_Tp, _Up)>
-40039:     { };
-40039: 
-40039:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
-40039:     struct __is_copy_assignable_impl;
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_copy_assignable_impl<_Tp, false>
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_copy_assignable_impl<_Tp, true>
-40039:     : public is_assignable<_Tp&, const _Tp&>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_copy_assignable
-40039:     : public __is_copy_assignable_impl<_Tp>
-40039:     { };
-40039: 
-40039:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
-40039:     struct __is_move_assignable_impl;
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_move_assignable_impl<_Tp, false>
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_move_assignable_impl<_Tp, true>
-40039:     : public is_assignable<_Tp&, _Tp&&>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_move_assignable
-40039:     : public __is_move_assignable_impl<_Tp>
-40039:     { };
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     struct __is_nt_assignable_impl
-40039:     : public integral_constant<bool, noexcept(declval<_Tp>() = declval<_Up>())>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     struct is_nothrow_assignable
-40039:     : public __and_<is_assignable<_Tp, _Up>,
-40039:       __is_nt_assignable_impl<_Tp, _Up>>
-40039:     { };
-40039: 
-40039:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
-40039:     struct __is_nt_copy_assignable_impl;
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_nt_copy_assignable_impl<_Tp, false>
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_nt_copy_assignable_impl<_Tp, true>
-40039:     : public is_nothrow_assignable<_Tp&, const _Tp&>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_nothrow_copy_assignable
-40039:     : public __is_nt_copy_assignable_impl<_Tp>
-40039:     { };
-40039: 
-40039:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
-40039:     struct __is_nt_move_assignable_impl;
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_nt_move_assignable_impl<_Tp, false>
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_nt_move_assignable_impl<_Tp, true>
-40039:     : public is_nothrow_assignable<_Tp&, _Tp&&>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_nothrow_move_assignable
-40039:     : public __is_nt_move_assignable_impl<_Tp>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp, typename... _Args>
-40039:     struct is_trivially_constructible
-40039:     : public __and_<is_constructible<_Tp, _Args...>, __bool_constant<
-40039:         __is_trivially_constructible(_Tp, _Args...)>>::type
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_trivially_default_constructible
-40039:     : public is_trivially_constructible<_Tp>::type
-40039:     { };
-40039: 
-40039:   struct __do_is_implicitly_default_constructible_impl
-40039:   {
-40039:     template <typename _Tp>
-40039:     static void __helper(const _Tp&);
-40039: 
-40039:     template <typename _Tp>
-40039:     static true_type __test(const _Tp&,
-40039:                             decltype(__helper<const _Tp&>({}))* = 0);
-40039: 
-40039:     static false_type __test(...);
-40039:   };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_implicitly_default_constructible_impl
-40039:     : public __do_is_implicitly_default_constructible_impl
-40039:     {
-40039:       typedef decltype(__test(declval<_Tp>())) type;
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_implicitly_default_constructible_safe
-40039:     : public __is_implicitly_default_constructible_impl<_Tp>::type
-40039:     { };
-40039: 
-40039:   template <typename _Tp>
-40039:     struct __is_implicitly_default_constructible
-40039:     : public __and_<is_default_constructible<_Tp>,
-40039:       __is_implicitly_default_constructible_safe<_Tp>>
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
-40039:     struct __is_trivially_copy_constructible_impl;
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_trivially_copy_constructible_impl<_Tp, false>
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_trivially_copy_constructible_impl<_Tp, true>
-40039:     : public __and_<is_copy_constructible<_Tp>,
-40039:       integral_constant<bool,
-40039:    __is_trivially_constructible(_Tp, const _Tp&)>>
-40039:     { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_trivially_copy_constructible
-40039:     : public __is_trivially_copy_constructible_impl<_Tp>
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
-40039:     struct __is_trivially_move_constructible_impl;
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_trivially_move_constructible_impl<_Tp, false>
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_trivially_move_constructible_impl<_Tp, true>
-40039:     : public __and_<is_move_constructible<_Tp>,
-40039:       integral_constant<bool,
-40039:    __is_trivially_constructible(_Tp, _Tp&&)>>
-40039:     { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_trivially_move_constructible
-40039:     : public __is_trivially_move_constructible_impl<_Tp>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     struct is_trivially_assignable
-40039:     : public __bool_constant<__is_trivially_assignable(_Tp, _Up)>
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
-40039:     struct __is_trivially_copy_assignable_impl;
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_trivially_copy_assignable_impl<_Tp, false>
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_trivially_copy_assignable_impl<_Tp, true>
-40039:     : public __and_<is_copy_assignable<_Tp>,
-40039:       integral_constant<bool,
-40039:    __is_trivially_assignable(_Tp&, const _Tp&)>>
-40039:     { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_trivially_copy_assignable
-40039:     : public __is_trivially_copy_assignable_impl<_Tp>
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
-40039:     struct __is_trivially_move_assignable_impl;
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_trivially_move_assignable_impl<_Tp, false>
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_trivially_move_assignable_impl<_Tp, true>
-40039:     : public __and_<is_move_assignable<_Tp>,
-40039:       integral_constant<bool,
-40039:    __is_trivially_assignable(_Tp&, _Tp&&)>>
-40039:     { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_trivially_move_assignable
-40039:     : public __is_trivially_move_assignable_impl<_Tp>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_trivially_destructible
-40039:     : public __and_<is_destructible<_Tp>, integral_constant<bool,
-40039:          __has_trivial_destructor(_Tp)>>
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct has_virtual_destructor
-40039:     : public integral_constant<bool, __has_virtual_destructor(_Tp)>
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct alignment_of
-40039:     : public integral_constant<std::size_t, alignof(_Tp)> { };
-40039: 
-40039: 
-40039:   template<typename>
-40039:     struct rank
-40039:     : public integral_constant<std::size_t, 0> { };
-40039: 
-40039:   template<typename _Tp, std::size_t _Size>
-40039:     struct rank<_Tp[_Size]>
-40039:     : public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct rank<_Tp[]>
-40039:     : public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };
-40039: 
-40039: 
-40039:   template<typename, unsigned _Uint>
-40039:     struct extent
-40039:     : public integral_constant<std::size_t, 0> { };
-40039: 
-40039:   template<typename _Tp, unsigned _Uint, std::size_t _Size>
-40039:     struct extent<_Tp[_Size], _Uint>
-40039:     : public integral_constant<std::size_t,
-40039:           _Uint == 0 ? _Size : extent<_Tp,
-40039:           _Uint - 1>::value>
-40039:     { };
-40039: 
-40039:   template<typename _Tp, unsigned _Uint>
-40039:     struct extent<_Tp[], _Uint>
-40039:     : public integral_constant<std::size_t,
-40039:           _Uint == 0 ? 0 : extent<_Tp,
-40039:              _Uint - 1>::value>
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename, typename>
-40039:     struct is_same
-40039:     : public false_type { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_same<_Tp, _Tp>
-40039:     : public true_type { };
-40039: 
-40039: 
-40039:   template<typename _Base, typename _Derived>
-40039:     struct is_base_of
-40039:     : public integral_constant<bool, __is_base_of(_Base, _Derived)>
-40039:     { };
-40039: 
-40039:   template<typename _From, typename _To,
-40039:            bool = __or_<is_void<_From>, is_function<_To>,
-40039:                         is_array<_To>>::value>
-40039:     struct __is_convertible_helper
-40039:     { typedef typename is_void<_To>::type type; };
-40039: 
-40039:   template<typename _From, typename _To>
-40039:     class __is_convertible_helper<_From, _To, false>
-40039:     {
-40039:        template<typename _To1>
-40039:  static void __test_aux(_To1);
-40039: 
-40039:       template<typename _From1, typename _To1,
-40039:         typename = decltype(__test_aux<_To1>(std::declval<_From1>()))>
-40039:  static true_type
-40039:  __test(int);
-40039: 
-40039:       template<typename, typename>
-40039:  static false_type
-40039:  __test(...);
-40039: 
-40039:     public:
-40039:       typedef decltype(__test<_From, _To>(0)) type;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _From, typename _To>
-40039:     struct is_convertible
-40039:     : public __is_convertible_helper<_From, _To>::type
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct remove_const
-40039:     { typedef _Tp type; };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct remove_const<_Tp const>
-40039:     { typedef _Tp type; };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct remove_volatile
-40039:     { typedef _Tp type; };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct remove_volatile<_Tp volatile>
-40039:     { typedef _Tp type; };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct remove_cv
-40039:     {
-40039:       typedef typename
-40039:       remove_const<typename remove_volatile<_Tp>::type>::type type;
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct add_const
-40039:     { typedef _Tp const type; };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct add_volatile
-40039:     { typedef _Tp volatile type; };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct add_cv
-40039:     {
-40039:       typedef typename
-40039:       add_const<typename add_volatile<_Tp>::type>::type type;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     using remove_const_t = typename remove_const<_Tp>::type;
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     using remove_volatile_t = typename remove_volatile<_Tp>::type;
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     using remove_cv_t = typename remove_cv<_Tp>::type;
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     using add_const_t = typename add_const<_Tp>::type;
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     using add_volatile_t = typename add_volatile<_Tp>::type;
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     using add_cv_t = typename add_cv<_Tp>::type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct remove_reference
-40039:     { typedef _Tp type; };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct remove_reference<_Tp&>
-40039:     { typedef _Tp type; };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct remove_reference<_Tp&&>
-40039:     { typedef _Tp type; };
-40039: 
-40039:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
-40039:     struct __add_lvalue_reference_helper
-40039:     { typedef _Tp type; };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __add_lvalue_reference_helper<_Tp, true>
-40039:     { typedef _Tp& type; };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct add_lvalue_reference
-40039:     : public __add_lvalue_reference_helper<_Tp>
-40039:     { };
-40039: 
-40039:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
-40039:     struct __add_rvalue_reference_helper
-40039:     { typedef _Tp type; };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __add_rvalue_reference_helper<_Tp, true>
-40039:     { typedef _Tp&& type; };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct add_rvalue_reference
-40039:     : public __add_rvalue_reference_helper<_Tp>
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     using remove_reference_t = typename remove_reference<_Tp>::type;
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     using add_lvalue_reference_t = typename add_lvalue_reference<_Tp>::type;
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     using add_rvalue_reference_t = typename add_rvalue_reference<_Tp>::type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Unqualified, bool _IsConst, bool _IsVol>
-40039:     struct __cv_selector;
-40039: 
-40039:   template<typename _Unqualified>
-40039:     struct __cv_selector<_Unqualified, false, false>
-40039:     { typedef _Unqualified __type; };
-40039: 
-40039:   template<typename _Unqualified>
-40039:     struct __cv_selector<_Unqualified, false, true>
-40039:     { typedef volatile _Unqualified __type; };
-40039: 
-40039:   template<typename _Unqualified>
-40039:     struct __cv_selector<_Unqualified, true, false>
-40039:     { typedef const _Unqualified __type; };
-40039: 
-40039:   template<typename _Unqualified>
-40039:     struct __cv_selector<_Unqualified, true, true>
-40039:     { typedef const volatile _Unqualified __type; };
-40039: 
-40039:   template<typename _Qualified, typename _Unqualified,
-40039:     bool _IsConst = is_const<_Qualified>::value,
-40039:     bool _IsVol = is_volatile<_Qualified>::value>
-40039:     class __match_cv_qualifiers
-40039:     {
-40039:       typedef __cv_selector<_Unqualified, _IsConst, _IsVol> __match;
-40039: 
-40039:     public:
-40039:       typedef typename __match::__type __type;
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __make_unsigned
-40039:     { typedef _Tp __type; };
-40039: 
-40039:   template<>
-40039:     struct __make_unsigned<char>
-40039:     { typedef unsigned char __type; };
-40039: 
-40039:   template<>
-40039:     struct __make_unsigned<signed char>
-40039:     { typedef unsigned char __type; };
-40039: 
-40039:   template<>
-40039:     struct __make_unsigned<short>
-40039:     { typedef unsigned short __type; };
-40039: 
-40039:   template<>
-40039:     struct __make_unsigned<int>
-40039:     { typedef unsigned int __type; };
-40039: 
-40039:   template<>
-40039:     struct __make_unsigned<long>
-40039:     { typedef unsigned long __type; };
-40039: 
-40039:   template<>
-40039:     struct __make_unsigned<long long>
-40039:     { typedef unsigned long long __type; };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct __make_unsigned<__int128>
-40039:     { typedef unsigned __int128 __type; };
-40039: # 1590 "/usr/include/c++/8/type_traits" 3
-40039:   template<typename _Tp,
-40039:     bool _IsInt = is_integral<_Tp>::value,
-40039:     bool _IsEnum = is_enum<_Tp>::value>
-40039:     class __make_unsigned_selector;
-40039: 
-40039:   template<typename _Tp>
-40039:     class __make_unsigned_selector<_Tp, true, false>
-40039:     {
-40039:       typedef __make_unsigned<typename remove_cv<_Tp>::type> __unsignedt;
-40039:       typedef typename __unsignedt::__type __unsigned_type;
-40039:       typedef __match_cv_qualifiers<_Tp, __unsigned_type> __cv_unsigned;
-40039: 
-40039:     public:
-40039:       typedef typename __cv_unsigned::__type __type;
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     class __make_unsigned_selector<_Tp, false, true>
-40039:     {
-40039: 
-40039:       typedef unsigned char __smallest;
-40039:       static const bool __b0 = sizeof(_Tp) <= sizeof(__smallest);
-40039:       static const bool __b1 = sizeof(_Tp) <= sizeof(unsigned short);
-40039:       static const bool __b2 = sizeof(_Tp) <= sizeof(unsigned int);
-40039:       static const bool __b3 = sizeof(_Tp) <= sizeof(unsigned long);
-40039:       typedef conditional<__b3, unsigned long, unsigned long long> __cond3;
-40039:       typedef typename __cond3::type __cond3_type;
-40039:       typedef conditional<__b2, unsigned int, __cond3_type> __cond2;
-40039:       typedef typename __cond2::type __cond2_type;
-40039:       typedef conditional<__b1, unsigned short, __cond2_type> __cond1;
-40039:       typedef typename __cond1::type __cond1_type;
-40039: 
-40039:       typedef typename conditional<__b0, __smallest, __cond1_type>::type
-40039:  __unsigned_type;
-40039:       typedef __match_cv_qualifiers<_Tp, __unsigned_type> __cv_unsigned;
-40039: 
-40039:     public:
-40039:       typedef typename __cv_unsigned::__type __type;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct make_unsigned
-40039:     { typedef typename __make_unsigned_selector<_Tp>::__type type; };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct make_unsigned<bool>;
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __make_signed
-40039:     { typedef _Tp __type; };
-40039: 
-40039:   template<>
-40039:     struct __make_signed<char>
-40039:     { typedef signed char __type; };
-40039: 
-40039:   template<>
-40039:     struct __make_signed<unsigned char>
-40039:     { typedef signed char __type; };
-40039: 
-40039:   template<>
-40039:     struct __make_signed<unsigned short>
-40039:     { typedef signed short __type; };
-40039: 
-40039:   template<>
-40039:     struct __make_signed<unsigned int>
-40039:     { typedef signed int __type; };
-40039: 
-40039:   template<>
-40039:     struct __make_signed<unsigned long>
-40039:     { typedef signed long __type; };
-40039: 
-40039:   template<>
-40039:     struct __make_signed<unsigned long long>
-40039:     { typedef signed long long __type; };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct __make_signed<unsigned __int128>
-40039:     { typedef __int128 __type; };
-40039: # 1694 "/usr/include/c++/8/type_traits" 3
-40039:   template<typename _Tp,
-40039:     bool _IsInt = is_integral<_Tp>::value,
-40039:     bool _IsEnum = is_enum<_Tp>::value>
-40039:     class __make_signed_selector;
-40039: 
-40039:   template<typename _Tp>
-40039:     class __make_signed_selector<_Tp, true, false>
-40039:     {
-40039:       typedef __make_signed<typename remove_cv<_Tp>::type> __signedt;
-40039:       typedef typename __signedt::__type __signed_type;
-40039:       typedef __match_cv_qualifiers<_Tp, __signed_type> __cv_signed;
-40039: 
-40039:     public:
-40039:       typedef typename __cv_signed::__type __type;
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     class __make_signed_selector<_Tp, false, true>
-40039:     {
-40039:       typedef typename __make_unsigned_selector<_Tp>::__type __unsigned_type;
-40039: 
-40039:     public:
-40039:       typedef typename __make_signed_selector<__unsigned_type>::__type __type;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct make_signed
-40039:     { typedef typename __make_signed_selector<_Tp>::__type type; };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct make_signed<bool>;
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     using make_signed_t = typename make_signed<_Tp>::type;
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     using make_unsigned_t = typename make_unsigned<_Tp>::type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct remove_extent
-40039:     { typedef _Tp type; };
-40039: 
-40039:   template<typename _Tp, std::size_t _Size>
-40039:     struct remove_extent<_Tp[_Size]>
-40039:     { typedef _Tp type; };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct remove_extent<_Tp[]>
-40039:     { typedef _Tp type; };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct remove_all_extents
-40039:     { typedef _Tp type; };
-40039: 
-40039:   template<typename _Tp, std::size_t _Size>
-40039:     struct remove_all_extents<_Tp[_Size]>
-40039:     { typedef typename remove_all_extents<_Tp>::type type; };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct remove_all_extents<_Tp[]>
-40039:     { typedef typename remove_all_extents<_Tp>::type type; };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     using remove_extent_t = typename remove_extent<_Tp>::type;
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     using remove_all_extents_t = typename remove_all_extents<_Tp>::type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename>
-40039:     struct __remove_pointer_helper
-40039:     { typedef _Tp type; };
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     struct __remove_pointer_helper<_Tp, _Up*>
-40039:     { typedef _Up type; };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct remove_pointer
-40039:     : public __remove_pointer_helper<_Tp, typename remove_cv<_Tp>::type>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp, bool = __or_<__is_referenceable<_Tp>,
-40039:           is_void<_Tp>>::value>
-40039:     struct __add_pointer_helper
-40039:     { typedef _Tp type; };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __add_pointer_helper<_Tp, true>
-40039:     { typedef typename remove_reference<_Tp>::type* type; };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct add_pointer
-40039:     : public __add_pointer_helper<_Tp>
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     using remove_pointer_t = typename remove_pointer<_Tp>::type;
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     using add_pointer_t = typename add_pointer<_Tp>::type;
-40039: 
-40039: 
-40039:   template<std::size_t _Len>
-40039:     struct __aligned_storage_msa
-40039:     {
-40039:       union __type
-40039:       {
-40039:  unsigned char __data[_Len];
-40039:  struct __attribute__((__aligned__)) { } __align;
-40039:       };
-40039:     };
-40039: # 1840 "/usr/include/c++/8/type_traits" 3
-40039:   template<std::size_t _Len, std::size_t _Align =
-40039:     __alignof__(typename __aligned_storage_msa<_Len>::__type)>
-40039:     struct aligned_storage
-40039:     {
-40039:       union type
-40039:       {
-40039:  unsigned char __data[_Len];
-40039:  struct __attribute__((__aligned__((_Align)))) { } __align;
-40039:       };
-40039:     };
-40039: 
-40039:   template <typename... _Types>
-40039:     struct __strictest_alignment
-40039:     {
-40039:       static const size_t _S_alignment = 0;
-40039:       static const size_t _S_size = 0;
-40039:     };
-40039: 
-40039:   template <typename _Tp, typename... _Types>
-40039:     struct __strictest_alignment<_Tp, _Types...>
-40039:     {
-40039:       static const size_t _S_alignment =
-40039:         alignof(_Tp) > __strictest_alignment<_Types...>::_S_alignment
-40039:  ? alignof(_Tp) : __strictest_alignment<_Types...>::_S_alignment;
-40039:       static const size_t _S_size =
-40039:         sizeof(_Tp) > __strictest_alignment<_Types...>::_S_size
-40039:  ? sizeof(_Tp) : __strictest_alignment<_Types...>::_S_size;
-40039:     };
-40039: # 1879 "/usr/include/c++/8/type_traits" 3
-40039:   template <size_t _Len, typename... _Types>
-40039:     struct aligned_union
-40039:     {
-40039:     private:
-40039:       static_assert(sizeof...(_Types) != 0, "At least one type is required");
-40039: 
-40039:       using __strictest = __strictest_alignment<_Types...>;
-40039:       static const size_t _S_len = _Len > __strictest::_S_size
-40039:  ? _Len : __strictest::_S_size;
-40039:     public:
-40039: 
-40039:       static const size_t alignment_value = __strictest::_S_alignment;
-40039: 
-40039:       typedef typename aligned_storage<_S_len, alignment_value>::type type;
-40039:     };
-40039: 
-40039:   template <size_t _Len, typename... _Types>
-40039:     const size_t aligned_union<_Len, _Types...>::alignment_value;
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Up,
-40039:     bool _IsArray = is_array<_Up>::value,
-40039:     bool _IsFunction = is_function<_Up>::value>
-40039:     struct __decay_selector;
-40039: 
-40039: 
-40039:   template<typename _Up>
-40039:     struct __decay_selector<_Up, false, false>
-40039:     { typedef typename remove_cv<_Up>::type __type; };
-40039: 
-40039:   template<typename _Up>
-40039:     struct __decay_selector<_Up, true, false>
-40039:     { typedef typename remove_extent<_Up>::type* __type; };
-40039: 
-40039:   template<typename _Up>
-40039:     struct __decay_selector<_Up, false, true>
-40039:     { typedef typename add_pointer<_Up>::type __type; };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     class decay
-40039:     {
-40039:       typedef typename remove_reference<_Tp>::type __remove_type;
-40039: 
-40039:     public:
-40039:       typedef typename __decay_selector<__remove_type>::__type type;
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     class reference_wrapper;
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __strip_reference_wrapper
-40039:     {
-40039:       typedef _Tp __type;
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __strip_reference_wrapper<reference_wrapper<_Tp> >
-40039:     {
-40039:       typedef _Tp& __type;
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __decay_and_strip
-40039:     {
-40039:       typedef typename __strip_reference_wrapper<
-40039:  typename decay<_Tp>::type>::__type __type;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<bool, typename _Tp = void>
-40039:     struct enable_if
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct enable_if<true, _Tp>
-40039:     { typedef _Tp type; };
-40039: 
-40039:   template<typename... _Cond>
-40039:     using _Require = typename enable_if<__and_<_Cond...>::value>::type;
-40039: 
-40039: 
-40039: 
-40039:   template<bool _Cond, typename _Iftrue, typename _Iffalse>
-40039:     struct conditional
-40039:     { typedef _Iftrue type; };
-40039: 
-40039: 
-40039:   template<typename _Iftrue, typename _Iffalse>
-40039:     struct conditional<false, _Iftrue, _Iffalse>
-40039:     { typedef _Iffalse type; };
-40039: 
-40039: 
-40039:   template<typename... _Tp>
-40039:     struct common_type;
-40039: 
-40039: 
-40039: 
-40039:   struct __do_common_type_impl
-40039:   {
-40039:     template<typename _Tp, typename _Up>
-40039:       static __success_type<typename decay<decltype
-40039:        (true ? std::declval<_Tp>()
-40039:         : std::declval<_Up>())>::type> _S_test(int);
-40039: 
-40039:     template<typename, typename>
-40039:       static __failure_type _S_test(...);
-40039:   };
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     struct __common_type_impl
-40039:     : private __do_common_type_impl
-40039:     {
-40039:       typedef decltype(_S_test<_Tp, _Up>(0)) type;
-40039:     };
-40039: 
-40039:   struct __do_member_type_wrapper
-40039:   {
-40039:     template<typename _Tp>
-40039:       static __success_type<typename _Tp::type> _S_test(int);
-40039: 
-40039:     template<typename>
-40039:       static __failure_type _S_test(...);
-40039:   };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __member_type_wrapper
-40039:     : private __do_member_type_wrapper
-40039:     {
-40039:       typedef decltype(_S_test<_Tp>(0)) type;
-40039:     };
-40039: 
-40039:   template<typename _CTp, typename... _Args>
-40039:     struct __expanded_common_type_wrapper
-40039:     {
-40039:       typedef common_type<typename _CTp::type, _Args...> type;
-40039:     };
-40039: 
-40039:   template<typename... _Args>
-40039:     struct __expanded_common_type_wrapper<__failure_type, _Args...>
-40039:     { typedef __failure_type type; };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct common_type<_Tp>
-40039:     { typedef typename decay<_Tp>::type type; };
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     struct common_type<_Tp, _Up>
-40039:     : public __common_type_impl<_Tp, _Up>::type
-40039:     { };
-40039: 
-40039:   template<typename _Tp, typename _Up, typename... _Vp>
-40039:     struct common_type<_Tp, _Up, _Vp...>
-40039:     : public __expanded_common_type_wrapper<typename __member_type_wrapper<
-40039:                common_type<_Tp, _Up>>::type, _Vp...>::type
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct underlying_type
-40039:     {
-40039:       typedef __underlying_type(_Tp) type;
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __declval_protector
-40039:     {
-40039:       static const bool __stop = false;
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     auto declval() noexcept -> decltype(__declval<_Tp>(0))
-40039:     {
-40039:       static_assert(__declval_protector<_Tp>::__stop,
-40039:       "declval() must not be used!");
-40039:       return __declval<_Tp>(0);
-40039:     }
-40039: # 2072 "/usr/include/c++/8/type_traits" 3
-40039:   template<>
-40039:     struct __make_unsigned<wchar_t>
-40039:     {
-40039:       using __type
-40039:  = typename __make_unsigned_selector<wchar_t, false, true>::__type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __make_signed<wchar_t>
-40039:     {
-40039:       using __type
-40039:  = typename __make_signed_selector<wchar_t, false, true>::__type;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct __make_unsigned<char16_t>
-40039:     {
-40039:       using __type
-40039:  = typename __make_unsigned_selector<char16_t, false, true>::__type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __make_signed<char16_t>
-40039:     {
-40039:       using __type
-40039:  = typename __make_signed_selector<char16_t, false, true>::__type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __make_unsigned<char32_t>
-40039:     {
-40039:       using __type
-40039:  = typename __make_unsigned_selector<char32_t, false, true>::__type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __make_signed<char32_t>
-40039:     {
-40039:       using __type
-40039:  = typename __make_signed_selector<char32_t, false, true>::__type;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Signature>
-40039:     class result_of;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   struct __invoke_memfun_ref { };
-40039:   struct __invoke_memfun_deref { };
-40039:   struct __invoke_memobj_ref { };
-40039:   struct __invoke_memobj_deref { };
-40039:   struct __invoke_other { };
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Tag>
-40039:     struct __result_of_success : __success_type<_Tp>
-40039:     { using __invoke_type = _Tag; };
-40039: 
-40039: 
-40039:   struct __result_of_memfun_ref_impl
-40039:   {
-40039:     template<typename _Fp, typename _Tp1, typename... _Args>
-40039:       static __result_of_success<decltype(
-40039:       (std::declval<_Tp1>().*std::declval<_Fp>())(std::declval<_Args>()...)
-40039:       ), __invoke_memfun_ref> _S_test(int);
-40039: 
-40039:     template<typename...>
-40039:       static __failure_type _S_test(...);
-40039:   };
-40039: 
-40039:   template<typename _MemPtr, typename _Arg, typename... _Args>
-40039:     struct __result_of_memfun_ref
-40039:     : private __result_of_memfun_ref_impl
-40039:     {
-40039:       typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type;
-40039:     };
-40039: 
-40039: 
-40039:   struct __result_of_memfun_deref_impl
-40039:   {
-40039:     template<typename _Fp, typename _Tp1, typename... _Args>
-40039:       static __result_of_success<decltype(
-40039:       ((*std::declval<_Tp1>()).*std::declval<_Fp>())(std::declval<_Args>()...)
-40039:       ), __invoke_memfun_deref> _S_test(int);
-40039: 
-40039:     template<typename...>
-40039:       static __failure_type _S_test(...);
-40039:   };
-40039: 
-40039:   template<typename _MemPtr, typename _Arg, typename... _Args>
-40039:     struct __result_of_memfun_deref
-40039:     : private __result_of_memfun_deref_impl
-40039:     {
-40039:       typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type;
-40039:     };
-40039: 
-40039: 
-40039:   struct __result_of_memobj_ref_impl
-40039:   {
-40039:     template<typename _Fp, typename _Tp1>
-40039:       static __result_of_success<decltype(
-40039:       std::declval<_Tp1>().*std::declval<_Fp>()
-40039:       ), __invoke_memobj_ref> _S_test(int);
-40039: 
-40039:     template<typename, typename>
-40039:       static __failure_type _S_test(...);
-40039:   };
-40039: 
-40039:   template<typename _MemPtr, typename _Arg>
-40039:     struct __result_of_memobj_ref
-40039:     : private __result_of_memobj_ref_impl
-40039:     {
-40039:       typedef decltype(_S_test<_MemPtr, _Arg>(0)) type;
-40039:     };
-40039: 
-40039: 
-40039:   struct __result_of_memobj_deref_impl
-40039:   {
-40039:     template<typename _Fp, typename _Tp1>
-40039:       static __result_of_success<decltype(
-40039:       (*std::declval<_Tp1>()).*std::declval<_Fp>()
-40039:       ), __invoke_memobj_deref> _S_test(int);
-40039: 
-40039:     template<typename, typename>
-40039:       static __failure_type _S_test(...);
-40039:   };
-40039: 
-40039:   template<typename _MemPtr, typename _Arg>
-40039:     struct __result_of_memobj_deref
-40039:     : private __result_of_memobj_deref_impl
-40039:     {
-40039:       typedef decltype(_S_test<_MemPtr, _Arg>(0)) type;
-40039:     };
-40039: 
-40039:   template<typename _MemPtr, typename _Arg>
-40039:     struct __result_of_memobj;
-40039: 
-40039:   template<typename _Res, typename _Class, typename _Arg>
-40039:     struct __result_of_memobj<_Res _Class::*, _Arg>
-40039:     {
-40039:       typedef typename remove_cv<typename remove_reference<
-40039:         _Arg>::type>::type _Argval;
-40039:       typedef _Res _Class::* _MemPtr;
-40039:       typedef typename conditional<__or_<is_same<_Argval, _Class>,
-40039:         is_base_of<_Class, _Argval>>::value,
-40039:         __result_of_memobj_ref<_MemPtr, _Arg>,
-40039:         __result_of_memobj_deref<_MemPtr, _Arg>
-40039:       >::type::type type;
-40039:     };
-40039: 
-40039:   template<typename _MemPtr, typename _Arg, typename... _Args>
-40039:     struct __result_of_memfun;
-40039: 
-40039:   template<typename _Res, typename _Class, typename _Arg, typename... _Args>
-40039:     struct __result_of_memfun<_Res _Class::*, _Arg, _Args...>
-40039:     {
-40039:       typedef typename remove_cv<typename remove_reference<
-40039:         _Arg>::type>::type _Argval;
-40039:       typedef _Res _Class::* _MemPtr;
-40039:       typedef typename conditional<__or_<is_same<_Argval, _Class>,
-40039:         is_base_of<_Class, _Argval>>::value,
-40039:         __result_of_memfun_ref<_MemPtr, _Arg, _Args...>,
-40039:         __result_of_memfun_deref<_MemPtr, _Arg, _Args...>
-40039:       >::type::type type;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up = typename decay<_Tp>::type>
-40039:     struct __inv_unwrap
-40039:     {
-40039:       using type = _Tp;
-40039:     };
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     struct __inv_unwrap<_Tp, reference_wrapper<_Up>>
-40039:     {
-40039:       using type = _Up&;
-40039:     };
-40039: 
-40039:   template<bool, bool, typename _Functor, typename... _ArgTypes>
-40039:     struct __result_of_impl
-40039:     {
-40039:       typedef __failure_type type;
-40039:     };
-40039: 
-40039:   template<typename _MemPtr, typename _Arg>
-40039:     struct __result_of_impl<true, false, _MemPtr, _Arg>
-40039:     : public __result_of_memobj<typename decay<_MemPtr>::type,
-40039:     typename __inv_unwrap<_Arg>::type>
-40039:     { };
-40039: 
-40039:   template<typename _MemPtr, typename _Arg, typename... _Args>
-40039:     struct __result_of_impl<false, true, _MemPtr, _Arg, _Args...>
-40039:     : public __result_of_memfun<typename decay<_MemPtr>::type,
-40039:     typename __inv_unwrap<_Arg>::type, _Args...>
-40039:     { };
-40039: 
-40039: 
-40039:   struct __result_of_other_impl
-40039:   {
-40039:     template<typename _Fn, typename... _Args>
-40039:       static __result_of_success<decltype(
-40039:       std::declval<_Fn>()(std::declval<_Args>()...)
-40039:       ), __invoke_other> _S_test(int);
-40039: 
-40039:     template<typename...>
-40039:       static __failure_type _S_test(...);
-40039:   };
-40039: 
-40039:   template<typename _Functor, typename... _ArgTypes>
-40039:     struct __result_of_impl<false, false, _Functor, _ArgTypes...>
-40039:     : private __result_of_other_impl
-40039:     {
-40039:       typedef decltype(_S_test<_Functor, _ArgTypes...>(0)) type;
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Functor, typename... _ArgTypes>
-40039:     struct __invoke_result
-40039:     : public __result_of_impl<
-40039:         is_member_object_pointer<
-40039:           typename remove_reference<_Functor>::type
-40039:         >::value,
-40039:         is_member_function_pointer<
-40039:           typename remove_reference<_Functor>::type
-40039:         >::value,
-40039:  _Functor, _ArgTypes...
-40039:       >::type
-40039:     { };
-40039: 
-40039:   template<typename _Functor, typename... _ArgTypes>
-40039:     struct result_of<_Functor(_ArgTypes...)>
-40039:     : public __invoke_result<_Functor, _ArgTypes...>
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039:   template<size_t _Len, size_t _Align =
-40039:      __alignof__(typename __aligned_storage_msa<_Len>::__type)>
-40039:     using aligned_storage_t = typename aligned_storage<_Len, _Align>::type;
-40039: 
-40039:   template <size_t _Len, typename... _Types>
-40039:     using aligned_union_t = typename aligned_union<_Len, _Types...>::type;
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     using decay_t = typename decay<_Tp>::type;
-40039: 
-40039: 
-40039:   template<bool _Cond, typename _Tp = void>
-40039:     using enable_if_t = typename enable_if<_Cond, _Tp>::type;
-40039: 
-40039: 
-40039:   template<bool _Cond, typename _Iftrue, typename _Iffalse>
-40039:     using conditional_t = typename conditional<_Cond, _Iftrue, _Iffalse>::type;
-40039: 
-40039: 
-40039:   template<typename... _Tp>
-40039:     using common_type_t = typename common_type<_Tp...>::type;
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     using underlying_type_t = typename underlying_type<_Tp>::type;
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     using result_of_t = typename result_of<_Tp>::type;
-40039: 
-40039: 
-40039: 
-40039:   template<bool _Cond, typename _Tp = void>
-40039:     using __enable_if_t = typename enable_if<_Cond, _Tp>::type;
-40039: 
-40039: 
-40039:   template<typename...> using __void_t = void;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename...> using void_t = void;
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Default, typename _AlwaysVoid,
-40039:     template<typename...> class _Op, typename... _Args>
-40039:     struct __detector
-40039:     {
-40039:       using value_t = false_type;
-40039:       using type = _Default;
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Default, template<typename...> class _Op,
-40039:      typename... _Args>
-40039:     struct __detector<_Default, __void_t<_Op<_Args...>>, _Op, _Args...>
-40039:     {
-40039:       using value_t = true_type;
-40039:       using type = _Op<_Args...>;
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Default, template<typename...> class _Op,
-40039:     typename... _Args>
-40039:     using __detected_or = __detector<_Default, void, _Op, _Args...>;
-40039: 
-40039: 
-40039:   template<typename _Default, template<typename...> class _Op,
-40039:     typename... _Args>
-40039:     using __detected_or_t
-40039:       = typename __detected_or<_Default, _Op, _Args...>::type;
-40039: # 2408 "/usr/include/c++/8/type_traits" 3
-40039:   template <typename _Tp>
-40039:     struct __is_swappable;
-40039: 
-40039:   template <typename _Tp>
-40039:     struct __is_nothrow_swappable;
-40039: 
-40039:   template<typename... _Elements>
-40039:     class tuple;
-40039: 
-40039:   template<typename>
-40039:     struct __is_tuple_like_impl : false_type
-40039:     { };
-40039: 
-40039:   template<typename... _Tps>
-40039:     struct __is_tuple_like_impl<tuple<_Tps...>> : true_type
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_tuple_like
-40039:     : public __is_tuple_like_impl<typename remove_cv<
-40039:       typename remove_reference<_Tp>::type>::type>::type
-40039:     { };
-40039: 
-40039:   template<typename _Tp>
-40039:     inline
-40039:     typename enable_if<__and_<__not_<__is_tuple_like<_Tp>>,
-40039:          is_move_constructible<_Tp>,
-40039:          is_move_assignable<_Tp>>::value>::type
-40039:     swap(_Tp&, _Tp&)
-40039:     noexcept(__and_<is_nothrow_move_constructible<_Tp>,
-40039:              is_nothrow_move_assignable<_Tp>>::value);
-40039: 
-40039:   template<typename _Tp, size_t _Nm>
-40039:     inline
-40039:     typename enable_if<__is_swappable<_Tp>::value>::type
-40039:     swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
-40039:     noexcept(__is_nothrow_swappable<_Tp>::value);
-40039: 
-40039:   namespace __swappable_details {
-40039:     using std::swap;
-40039: 
-40039:     struct __do_is_swappable_impl
-40039:     {
-40039:       template<typename _Tp, typename
-40039:                = decltype(swap(std::declval<_Tp&>(), std::declval<_Tp&>()))>
-40039:         static true_type __test(int);
-40039: 
-40039:       template<typename>
-40039:         static false_type __test(...);
-40039:     };
-40039: 
-40039:     struct __do_is_nothrow_swappable_impl
-40039:     {
-40039:       template<typename _Tp>
-40039:         static __bool_constant<
-40039:           noexcept(swap(std::declval<_Tp&>(), std::declval<_Tp&>()))
-40039:         > __test(int);
-40039: 
-40039:       template<typename>
-40039:         static false_type __test(...);
-40039:     };
-40039: 
-40039:   }
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_swappable_impl
-40039:     : public __swappable_details::__do_is_swappable_impl
-40039:     {
-40039:       typedef decltype(__test<_Tp>(0)) type;
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_nothrow_swappable_impl
-40039:     : public __swappable_details::__do_is_nothrow_swappable_impl
-40039:     {
-40039:       typedef decltype(__test<_Tp>(0)) type;
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_swappable
-40039:     : public __is_swappable_impl<_Tp>::type
-40039:     { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_nothrow_swappable
-40039:     : public __is_nothrow_swappable_impl<_Tp>::type
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_swappable
-40039:     : public __is_swappable_impl<_Tp>::type
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_nothrow_swappable
-40039:     : public __is_nothrow_swappable_impl<_Tp>::type
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr bool is_swappable_v =
-40039:       is_swappable<_Tp>::value;
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr bool is_nothrow_swappable_v =
-40039:       is_nothrow_swappable<_Tp>::value;
-40039: 
-40039: 
-40039:   namespace __swappable_with_details {
-40039:     using std::swap;
-40039: 
-40039:     struct __do_is_swappable_with_impl
-40039:     {
-40039:       template<typename _Tp, typename _Up, typename
-40039:                = decltype(swap(std::declval<_Tp>(), std::declval<_Up>())),
-40039:                typename
-40039:                = decltype(swap(std::declval<_Up>(), std::declval<_Tp>()))>
-40039:         static true_type __test(int);
-40039: 
-40039:       template<typename, typename>
-40039:         static false_type __test(...);
-40039:     };
-40039: 
-40039:     struct __do_is_nothrow_swappable_with_impl
-40039:     {
-40039:       template<typename _Tp, typename _Up>
-40039:         static __bool_constant<
-40039:           noexcept(swap(std::declval<_Tp>(), std::declval<_Up>()))
-40039:           &&
-40039:           noexcept(swap(std::declval<_Up>(), std::declval<_Tp>()))
-40039:         > __test(int);
-40039: 
-40039:       template<typename, typename>
-40039:         static false_type __test(...);
-40039:     };
-40039: 
-40039:   }
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     struct __is_swappable_with_impl
-40039:     : public __swappable_with_details::__do_is_swappable_with_impl
-40039:     {
-40039:       typedef decltype(__test<_Tp, _Up>(0)) type;
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_swappable_with_impl<_Tp&, _Tp&>
-40039:     : public __swappable_details::__do_is_swappable_impl
-40039:     {
-40039:       typedef decltype(__test<_Tp&>(0)) type;
-40039:     };
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     struct __is_nothrow_swappable_with_impl
-40039:     : public __swappable_with_details::__do_is_nothrow_swappable_with_impl
-40039:     {
-40039:       typedef decltype(__test<_Tp, _Up>(0)) type;
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_nothrow_swappable_with_impl<_Tp&, _Tp&>
-40039:     : public __swappable_details::__do_is_nothrow_swappable_impl
-40039:     {
-40039:       typedef decltype(__test<_Tp&>(0)) type;
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     struct is_swappable_with
-40039:     : public __is_swappable_with_impl<_Tp, _Up>::type
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     struct is_nothrow_swappable_with
-40039:     : public __is_nothrow_swappable_with_impl<_Tp, _Up>::type
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     constexpr bool is_swappable_with_v =
-40039:       is_swappable_with<_Tp, _Up>::value;
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     constexpr bool is_nothrow_swappable_with_v =
-40039:       is_nothrow_swappable_with<_Tp, _Up>::value;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Result, typename _Ret, typename = void>
-40039:     struct __is_invocable_impl : false_type { };
-40039: 
-40039:   template<typename _Result, typename _Ret>
-40039:     struct __is_invocable_impl<_Result, _Ret, __void_t<typename _Result::type>>
-40039:     : __or_<is_void<_Ret>, is_convertible<typename _Result::type, _Ret>>::type
-40039:     { };
-40039: 
-40039:   template<typename _Fn, typename... _ArgTypes>
-40039:     struct __is_invocable
-40039:     : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>::type
-40039:     { };
-40039: 
-40039:   template<typename _Fn, typename _Tp, typename... _Args>
-40039:     constexpr bool __call_is_nt(__invoke_memfun_ref)
-40039:     {
-40039:       using _Up = typename __inv_unwrap<_Tp>::type;
-40039:       return noexcept((std::declval<_Up>().*std::declval<_Fn>())(
-40039:      std::declval<_Args>()...));
-40039:     }
-40039: 
-40039:   template<typename _Fn, typename _Tp, typename... _Args>
-40039:     constexpr bool __call_is_nt(__invoke_memfun_deref)
-40039:     {
-40039:       return noexcept(((*std::declval<_Tp>()).*std::declval<_Fn>())(
-40039:      std::declval<_Args>()...));
-40039:     }
-40039: 
-40039:   template<typename _Fn, typename _Tp>
-40039:     constexpr bool __call_is_nt(__invoke_memobj_ref)
-40039:     {
-40039:       using _Up = typename __inv_unwrap<_Tp>::type;
-40039:       return noexcept(std::declval<_Up>().*std::declval<_Fn>());
-40039:     }
-40039: 
-40039:   template<typename _Fn, typename _Tp>
-40039:     constexpr bool __call_is_nt(__invoke_memobj_deref)
-40039:     {
-40039:       return noexcept((*std::declval<_Tp>()).*std::declval<_Fn>());
-40039:     }
-40039: 
-40039:   template<typename _Fn, typename... _Args>
-40039:     constexpr bool __call_is_nt(__invoke_other)
-40039:     {
-40039:       return noexcept(std::declval<_Fn>()(std::declval<_Args>()...));
-40039:     }
-40039: 
-40039:   template<typename _Result, typename _Fn, typename... _Args>
-40039:     struct __call_is_nothrow
-40039:     : __bool_constant<
-40039:  std::__call_is_nt<_Fn, _Args...>(typename _Result::__invoke_type{})
-40039:       >
-40039:     { };
-40039: 
-40039:   template<typename _Fn, typename... _Args>
-40039:     using __call_is_nothrow_
-40039:       = __call_is_nothrow<__invoke_result<_Fn, _Args...>, _Fn, _Args...>;
-40039: 
-40039: 
-40039:   template<typename _Fn, typename... _Args>
-40039:     struct __is_nothrow_invocable
-40039:     : __and_<__is_invocable<_Fn, _Args...>,
-40039:              __call_is_nothrow_<_Fn, _Args...>>::type
-40039:     { };
-40039: 
-40039:   struct __nonesuch {
-40039:     __nonesuch() = delete;
-40039:     ~__nonesuch() = delete;
-40039:     __nonesuch(__nonesuch const&) = delete;
-40039:     void operator=(__nonesuch const&) = delete;
-40039:   };
-40039: # 2973 "/usr/include/c++/8/type_traits" 3
-40039: 
-40039: }
-40039: # 56 "/usr/include/c++/8/bits/move.h" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 72 "/usr/include/c++/8/bits/move.h" 3
-40039:   template<typename _Tp>
-40039:     constexpr _Tp&&
-40039:     forward(typename std::remove_reference<_Tp>::type& __t) noexcept
-40039:     { return static_cast<_Tp&&>(__t); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr _Tp&&
-40039:     forward(typename std::remove_reference<_Tp>::type&& __t) noexcept
-40039:     {
-40039:       static_assert(!std::is_lvalue_reference<_Tp>::value, "template argument"
-40039:       " substituting _Tp is an lvalue reference type");
-40039:       return static_cast<_Tp&&>(__t);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename std::remove_reference<_Tp>::type&&
-40039:     move(_Tp&& __t) noexcept
-40039:     { return static_cast<typename std::remove_reference<_Tp>::type&&>(__t); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __move_if_noexcept_cond
-40039:     : public __and_<__not_<is_nothrow_move_constructible<_Tp>>,
-40039:                     is_copy_constructible<_Tp>>::type { };
-40039: # 116 "/usr/include/c++/8/bits/move.h" 3
-40039:   template<typename _Tp>
-40039:     constexpr typename
-40039:     conditional<__move_if_noexcept_cond<_Tp>::value, const _Tp&, _Tp&&>::type
-40039:     move_if_noexcept(_Tp& __x) noexcept
-40039:     { return std::move(__x); }
-40039: # 136 "/usr/include/c++/8/bits/move.h" 3
-40039:   template<typename _Tp>
-40039:     inline _Tp*
-40039:     addressof(_Tp& __r) noexcept
-40039:     { return std::__addressof(__r); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     const _Tp* addressof(const _Tp&&) = delete;
-40039: 
-40039: 
-40039:   template <typename _Tp, typename _Up = _Tp>
-40039:     inline _Tp
-40039:     __exchange(_Tp& __obj, _Up&& __new_val)
-40039:     {
-40039:       _Tp __old_val = std::move(__obj);
-40039:       __obj = std::forward<_Up>(__new_val);
-40039:       return __old_val;
-40039:     }
-40039: # 176 "/usr/include/c++/8/bits/move.h" 3
-40039:   template<typename _Tp>
-40039:     inline
-40039: 
-40039:     typename enable_if<__and_<__not_<__is_tuple_like<_Tp>>,
-40039:          is_move_constructible<_Tp>,
-40039:          is_move_assignable<_Tp>>::value>::type
-40039:     swap(_Tp& __a, _Tp& __b)
-40039:     noexcept(__and_<is_nothrow_move_constructible<_Tp>,
-40039:              is_nothrow_move_assignable<_Tp>>::value)
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:       _Tp __tmp = std::move(__a);
-40039:       __a = std::move(__b);
-40039:       __b = std::move(__tmp);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, size_t _Nm>
-40039:     inline
-40039: 
-40039:     typename enable_if<__is_swappable<_Tp>::value>::type
-40039:     swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
-40039:     noexcept(__is_nothrow_swappable<_Tp>::value)
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     {
-40039:       for (size_t __n = 0; __n < _Nm; ++__n)
-40039:  swap(__a[__n], __b[__n]);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 60 "/usr/include/c++/8/bits/stl_pair.h" 2 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 76 "/usr/include/c++/8/bits/stl_pair.h" 3
-40039:   struct piecewise_construct_t { explicit piecewise_construct_t() = default; };
-40039: 
-40039: 
-40039:   constexpr piecewise_construct_t piecewise_construct =
-40039:     piecewise_construct_t();
-40039: 
-40039: 
-40039:   template<typename...>
-40039:     class tuple;
-40039: 
-40039:   template<std::size_t...>
-40039:     struct _Index_tuple;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <bool, typename _T1, typename _T2>
-40039:     struct _PCC
-40039:     {
-40039:       template <typename _U1, typename _U2>
-40039:       static constexpr bool _ConstructiblePair()
-40039:       {
-40039:  return __and_<is_constructible<_T1, const _U1&>,
-40039:         is_constructible<_T2, const _U2&>>::value;
-40039:       }
-40039: 
-40039:       template <typename _U1, typename _U2>
-40039:       static constexpr bool _ImplicitlyConvertiblePair()
-40039:       {
-40039:  return __and_<is_convertible<const _U1&, _T1>,
-40039:         is_convertible<const _U2&, _T2>>::value;
-40039:       }
-40039: 
-40039:       template <typename _U1, typename _U2>
-40039:       static constexpr bool _MoveConstructiblePair()
-40039:       {
-40039:  return __and_<is_constructible<_T1, _U1&&>,
-40039:         is_constructible<_T2, _U2&&>>::value;
-40039:       }
-40039: 
-40039:       template <typename _U1, typename _U2>
-40039:       static constexpr bool _ImplicitlyMoveConvertiblePair()
-40039:       {
-40039:  return __and_<is_convertible<_U1&&, _T1>,
-40039:         is_convertible<_U2&&, _T2>>::value;
-40039:       }
-40039: 
-40039:       template <bool __implicit, typename _U1, typename _U2>
-40039:       static constexpr bool _CopyMovePair()
-40039:       {
-40039:  using __do_converts = __and_<is_convertible<const _U1&, _T1>,
-40039:       is_convertible<_U2&&, _T2>>;
-40039:  using __converts = typename conditional<__implicit,
-40039:            __do_converts,
-40039:            __not_<__do_converts>>::type;
-40039:  return __and_<is_constructible<_T1, const _U1&>,
-40039:         is_constructible<_T2, _U2&&>,
-40039:         __converts
-40039:         >::value;
-40039:       }
-40039: 
-40039:       template <bool __implicit, typename _U1, typename _U2>
-40039:       static constexpr bool _MoveCopyPair()
-40039:       {
-40039:  using __do_converts = __and_<is_convertible<_U1&&, _T1>,
-40039:       is_convertible<const _U2&, _T2>>;
-40039:  using __converts = typename conditional<__implicit,
-40039:            __do_converts,
-40039:            __not_<__do_converts>>::type;
-40039:  return __and_<is_constructible<_T1, _U1&&>,
-40039:         is_constructible<_T2, const _U2&&>,
-40039:         __converts
-40039:         >::value;
-40039:       }
-40039:   };
-40039: 
-40039:   template <typename _T1, typename _T2>
-40039:     struct _PCC<false, _T1, _T2>
-40039:     {
-40039:       template <typename _U1, typename _U2>
-40039:       static constexpr bool _ConstructiblePair()
-40039:       {
-40039:  return false;
-40039:       }
-40039: 
-40039:       template <typename _U1, typename _U2>
-40039:       static constexpr bool _ImplicitlyConvertiblePair()
-40039:       {
-40039:  return false;
-40039:       }
-40039: 
-40039:       template <typename _U1, typename _U2>
-40039:       static constexpr bool _MoveConstructiblePair()
-40039:       {
-40039:  return false;
-40039:       }
-40039: 
-40039:       template <typename _U1, typename _U2>
-40039:       static constexpr bool _ImplicitlyMoveConvertiblePair()
-40039:       {
-40039:  return false;
-40039:       }
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   struct __nonesuch_no_braces : std::__nonesuch {
-40039:     explicit __nonesuch_no_braces(const __nonesuch&) = delete;
-40039:   };
-40039: 
-40039: 
-40039:   template<typename _U1, typename _U2> class __pair_base
-40039:   {
-40039: 
-40039:     template<typename _T1, typename _T2> friend struct pair;
-40039:     __pair_base() = default;
-40039:     ~__pair_base() = default;
-40039:     __pair_base(const __pair_base&) = default;
-40039:     __pair_base& operator=(const __pair_base&) = delete;
-40039: 
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _T1, typename _T2>
-40039:     struct pair
-40039:     : private __pair_base<_T1, _T2>
-40039:     {
-40039:       typedef _T1 first_type;
-40039:       typedef _T2 second_type;
-40039: 
-40039:       _T1 first;
-40039:       _T2 second;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       template <typename _U1 = _T1,
-40039:                 typename _U2 = _T2,
-40039:                 typename enable_if<__and_<
-40039:                                      __is_implicitly_default_constructible<_U1>,
-40039:                                      __is_implicitly_default_constructible<_U2>>
-40039:                                    ::value, bool>::type = true>
-40039: 
-40039:       constexpr pair()
-40039:       : first(), second() { }
-40039: 
-40039: 
-40039:       template <typename _U1 = _T1,
-40039:                 typename _U2 = _T2,
-40039:                 typename enable_if<__and_<
-40039:                        is_default_constructible<_U1>,
-40039:                        is_default_constructible<_U2>,
-40039:                        __not_<
-40039:                          __and_<__is_implicitly_default_constructible<_U1>,
-40039:                                 __is_implicitly_default_constructible<_U2>>>>
-40039:                                    ::value, bool>::type = false>
-40039:       explicit constexpr pair()
-40039:       : first(), second() { }
-40039: # 252 "/usr/include/c++/8/bits/stl_pair.h" 3
-40039:       using _PCCP = _PCC<true, _T1, _T2>;
-40039: 
-40039:       template<typename _U1 = _T1, typename _U2=_T2, typename
-40039:         enable_if<_PCCP::template
-40039:       _ConstructiblePair<_U1, _U2>()
-40039:                   && _PCCP::template
-40039:       _ImplicitlyConvertiblePair<_U1, _U2>(),
-40039:                          bool>::type=true>
-40039:       constexpr pair(const _T1& __a, const _T2& __b)
-40039:       : first(__a), second(__b) { }
-40039: 
-40039:        template<typename _U1 = _T1, typename _U2=_T2, typename
-40039:   enable_if<_PCCP::template
-40039:        _ConstructiblePair<_U1, _U2>()
-40039:                    && !_PCCP::template
-40039:        _ImplicitlyConvertiblePair<_U1, _U2>(),
-40039:                          bool>::type=false>
-40039:       explicit constexpr pair(const _T1& __a, const _T2& __b)
-40039:       : first(__a), second(__b) { }
-40039: # 280 "/usr/include/c++/8/bits/stl_pair.h" 3
-40039:       template <typename _U1, typename _U2>
-40039:         using _PCCFP = _PCC<!is_same<_T1, _U1>::value
-40039:        || !is_same<_T2, _U2>::value,
-40039:        _T1, _T2>;
-40039: 
-40039:       template<typename _U1, typename _U2, typename
-40039:         enable_if<_PCCFP<_U1, _U2>::template
-40039:       _ConstructiblePair<_U1, _U2>()
-40039:                   && _PCCFP<_U1, _U2>::template
-40039:       _ImplicitlyConvertiblePair<_U1, _U2>(),
-40039:      bool>::type=true>
-40039:         constexpr pair(const pair<_U1, _U2>& __p)
-40039:         : first(__p.first), second(__p.second) { }
-40039: 
-40039:       template<typename _U1, typename _U2, typename
-40039:         enable_if<_PCCFP<_U1, _U2>::template
-40039:       _ConstructiblePair<_U1, _U2>()
-40039:     && !_PCCFP<_U1, _U2>::template
-40039:       _ImplicitlyConvertiblePair<_U1, _U2>(),
-40039:                          bool>::type=false>
-40039:  explicit constexpr pair(const pair<_U1, _U2>& __p)
-40039:  : first(__p.first), second(__p.second) { }
-40039: 
-40039:       constexpr pair(const pair&) = default;
-40039:       constexpr pair(pair&&) = default;
-40039: 
-40039: 
-40039:       template<typename _U1, typename
-40039:         enable_if<_PCCP::template
-40039:       _MoveCopyPair<true, _U1, _T2>(),
-40039:                          bool>::type=true>
-40039:        constexpr pair(_U1&& __x, const _T2& __y)
-40039:        : first(std::forward<_U1>(__x)), second(__y) { }
-40039: 
-40039:       template<typename _U1, typename
-40039:         enable_if<_PCCP::template
-40039:       _MoveCopyPair<false, _U1, _T2>(),
-40039:                          bool>::type=false>
-40039:        explicit constexpr pair(_U1&& __x, const _T2& __y)
-40039:        : first(std::forward<_U1>(__x)), second(__y) { }
-40039: 
-40039:       template<typename _U2, typename
-40039:         enable_if<_PCCP::template
-40039:       _CopyMovePair<true, _T1, _U2>(),
-40039:                          bool>::type=true>
-40039:        constexpr pair(const _T1& __x, _U2&& __y)
-40039:        : first(__x), second(std::forward<_U2>(__y)) { }
-40039: 
-40039:       template<typename _U2, typename
-40039:         enable_if<_PCCP::template
-40039:       _CopyMovePair<false, _T1, _U2>(),
-40039:                          bool>::type=false>
-40039:        explicit pair(const _T1& __x, _U2&& __y)
-40039:        : first(__x), second(std::forward<_U2>(__y)) { }
-40039: 
-40039:       template<typename _U1, typename _U2, typename
-40039:         enable_if<_PCCP::template
-40039:       _MoveConstructiblePair<_U1, _U2>()
-40039:      && _PCCP::template
-40039:       _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
-40039:                          bool>::type=true>
-40039:  constexpr pair(_U1&& __x, _U2&& __y)
-40039:  : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) { }
-40039: 
-40039:       template<typename _U1, typename _U2, typename
-40039:         enable_if<_PCCP::template
-40039:       _MoveConstructiblePair<_U1, _U2>()
-40039:      && !_PCCP::template
-40039:       _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
-40039:                          bool>::type=false>
-40039:  explicit constexpr pair(_U1&& __x, _U2&& __y)
-40039:  : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) { }
-40039: 
-40039: 
-40039:       template<typename _U1, typename _U2, typename
-40039:         enable_if<_PCCFP<_U1, _U2>::template
-40039:       _MoveConstructiblePair<_U1, _U2>()
-40039:      && _PCCFP<_U1, _U2>::template
-40039:       _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
-40039:                          bool>::type=true>
-40039:  constexpr pair(pair<_U1, _U2>&& __p)
-40039:  : first(std::forward<_U1>(__p.first)),
-40039:    second(std::forward<_U2>(__p.second)) { }
-40039: 
-40039:       template<typename _U1, typename _U2, typename
-40039:         enable_if<_PCCFP<_U1, _U2>::template
-40039:       _MoveConstructiblePair<_U1, _U2>()
-40039:      && !_PCCFP<_U1, _U2>::template
-40039:       _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
-40039:                          bool>::type=false>
-40039:  explicit constexpr pair(pair<_U1, _U2>&& __p)
-40039:  : first(std::forward<_U1>(__p.first)),
-40039:    second(std::forward<_U2>(__p.second)) { }
-40039: 
-40039:       template<typename... _Args1, typename... _Args2>
-40039:         pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>);
-40039: 
-40039:       pair&
-40039:       operator=(typename conditional<
-40039:   __and_<is_copy_assignable<_T1>,
-40039:          is_copy_assignable<_T2>>::value,
-40039:   const pair&, const __nonesuch_no_braces&>::type __p)
-40039:       {
-40039:  first = __p.first;
-40039:  second = __p.second;
-40039:  return *this;
-40039:       }
-40039: 
-40039:       pair&
-40039:       operator=(typename conditional<
-40039:   __and_<is_move_assignable<_T1>,
-40039:          is_move_assignable<_T2>>::value,
-40039:   pair&&, __nonesuch_no_braces&&>::type __p)
-40039:       noexcept(__and_<is_nothrow_move_assignable<_T1>,
-40039:         is_nothrow_move_assignable<_T2>>::value)
-40039:       {
-40039:  first = std::forward<first_type>(__p.first);
-40039:  second = std::forward<second_type>(__p.second);
-40039:  return *this;
-40039:       }
-40039: 
-40039:       template<typename _U1, typename _U2>
-40039:       typename enable_if<__and_<is_assignable<_T1&, const _U1&>,
-40039:     is_assignable<_T2&, const _U2&>>::value,
-40039:     pair&>::type
-40039:  operator=(const pair<_U1, _U2>& __p)
-40039:  {
-40039:    first = __p.first;
-40039:    second = __p.second;
-40039:    return *this;
-40039:  }
-40039: 
-40039:       template<typename _U1, typename _U2>
-40039:       typename enable_if<__and_<is_assignable<_T1&, _U1&&>,
-40039:     is_assignable<_T2&, _U2&&>>::value,
-40039:     pair&>::type
-40039:  operator=(pair<_U1, _U2>&& __p)
-40039:  {
-40039:    first = std::forward<_U1>(__p.first);
-40039:    second = std::forward<_U2>(__p.second);
-40039:    return *this;
-40039:  }
-40039: 
-40039:       void
-40039:       swap(pair& __p)
-40039:       noexcept(__and_<__is_nothrow_swappable<_T1>,
-40039:                       __is_nothrow_swappable<_T2>>::value)
-40039:       {
-40039:  using std::swap;
-40039:  swap(first, __p.first);
-40039:  swap(second, __p.second);
-40039:       }
-40039: 
-40039:     private:
-40039:       template<typename... _Args1, std::size_t... _Indexes1,
-40039:                typename... _Args2, std::size_t... _Indexes2>
-40039:         pair(tuple<_Args1...>&, tuple<_Args2...>&,
-40039:              _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>);
-40039: 
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _T1, typename _T2>
-40039:     inline constexpr bool
-40039:     operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
-40039:     { return __x.first == __y.first && __x.second == __y.second; }
-40039: 
-40039: 
-40039:   template<typename _T1, typename _T2>
-40039:     inline constexpr bool
-40039:     operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
-40039:     { return __x.first < __y.first
-40039:       || (!(__y.first < __x.first) && __x.second < __y.second); }
-40039: 
-40039: 
-40039:   template<typename _T1, typename _T2>
-40039:     inline constexpr bool
-40039:     operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
-40039:     { return !(__x == __y); }
-40039: 
-40039: 
-40039:   template<typename _T1, typename _T2>
-40039:     inline constexpr bool
-40039:     operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
-40039:     { return __y < __x; }
-40039: 
-40039: 
-40039:   template<typename _T1, typename _T2>
-40039:     inline constexpr bool
-40039:     operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
-40039:     { return !(__y < __x); }
-40039: 
-40039: 
-40039:   template<typename _T1, typename _T2>
-40039:     inline constexpr bool
-40039:     operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
-40039:     { return !(__x < __y); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _T1, typename _T2>
-40039:     inline
-40039: 
-40039: 
-40039:     typename enable_if<__and_<__is_swappable<_T1>,
-40039:                               __is_swappable<_T2>>::value>::type
-40039: 
-40039: 
-40039: 
-40039:     swap(pair<_T1, _T2>& __x, pair<_T1, _T2>& __y)
-40039:     noexcept(noexcept(__x.swap(__y)))
-40039:     { __x.swap(__y); }
-40039: 
-40039: 
-40039:   template<typename _T1, typename _T2>
-40039:     typename enable_if<!__and_<__is_swappable<_T1>,
-40039:           __is_swappable<_T2>>::value>::type
-40039:     swap(pair<_T1, _T2>&, pair<_T1, _T2>&) = delete;
-40039: # 521 "/usr/include/c++/8/bits/stl_pair.h" 3
-40039:   template<typename _T1, typename _T2>
-40039:     constexpr pair<typename __decay_and_strip<_T1>::__type,
-40039:                    typename __decay_and_strip<_T2>::__type>
-40039:     make_pair(_T1&& __x, _T2&& __y)
-40039:     {
-40039:       typedef typename __decay_and_strip<_T1>::__type __ds_type1;
-40039:       typedef typename __decay_and_strip<_T2>::__type __ds_type2;
-40039:       typedef pair<__ds_type1, __ds_type2> __pair_type;
-40039:       return __pair_type(std::forward<_T1>(__x), std::forward<_T2>(__y));
-40039:     }
-40039: # 540 "/usr/include/c++/8/bits/stl_pair.h" 3
-40039: 
-40039: }
-40039: # 71 "/usr/include/c++/8/utility" 2 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/initializer_list" 1 3
-40039: # 33 "/usr/include/c++/8/initializer_list" 3
-40039:        
-40039: # 34 "/usr/include/c++/8/initializer_list" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: #pragma GCC visibility push(default)
-40039: 
-40039: 
-40039: 
-40039: namespace std
-40039: {
-40039: 
-40039:   template<class _E>
-40039:     class initializer_list
-40039:     {
-40039:     public:
-40039:       typedef _E value_type;
-40039:       typedef const _E& reference;
-40039:       typedef const _E& const_reference;
-40039:       typedef size_t size_type;
-40039:       typedef const _E* iterator;
-40039:       typedef const _E* const_iterator;
-40039: 
-40039:     private:
-40039:       iterator _M_array;
-40039:       size_type _M_len;
-40039: 
-40039: 
-40039:       constexpr initializer_list(const_iterator __a, size_type __l)
-40039:       : _M_array(__a), _M_len(__l) { }
-40039: 
-40039:     public:
-40039:       constexpr initializer_list() noexcept
-40039:       : _M_array(0), _M_len(0) { }
-40039: 
-40039: 
-40039:       constexpr size_type
-40039:       size() const noexcept { return _M_len; }
-40039: 
-40039: 
-40039:       constexpr const_iterator
-40039:       begin() const noexcept { return _M_array; }
-40039: 
-40039: 
-40039:       constexpr const_iterator
-40039:       end() const noexcept { return begin() + size(); }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<class _Tp>
-40039:     constexpr const _Tp*
-40039:     begin(initializer_list<_Tp> __ils) noexcept
-40039:     { return __ils.begin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<class _Tp>
-40039:     constexpr const _Tp*
-40039:     end(initializer_list<_Tp> __ils) noexcept
-40039:     { return __ils.end(); }
-40039: }
-40039: 
-40039: #pragma GCC visibility pop
-40039: # 77 "/usr/include/c++/8/utility" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct tuple_size;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp,
-40039:     typename _Up = typename remove_cv<_Tp>::type,
-40039:     typename = typename enable_if<is_same<_Tp, _Up>::value>::type,
-40039:     size_t = tuple_size<_Tp>::value>
-40039:     using __enable_if_has_tuple_size = _Tp;
-40039: 
-40039:   template<typename _Tp>
-40039:     struct tuple_size<const __enable_if_has_tuple_size<_Tp>>
-40039:     : public tuple_size<_Tp> { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct tuple_size<volatile __enable_if_has_tuple_size<_Tp>>
-40039:     : public tuple_size<_Tp> { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct tuple_size<const volatile __enable_if_has_tuple_size<_Tp>>
-40039:     : public tuple_size<_Tp> { };
-40039: 
-40039: 
-40039:   template<std::size_t __i, typename _Tp>
-40039:     struct tuple_element;
-40039: 
-40039: 
-40039:   template<std::size_t __i, typename _Tp>
-40039:     using __tuple_element_t = typename tuple_element<__i, _Tp>::type;
-40039: 
-40039:   template<std::size_t __i, typename _Tp>
-40039:     struct tuple_element<__i, const _Tp>
-40039:     {
-40039:       typedef typename add_const<__tuple_element_t<__i, _Tp>>::type type;
-40039:     };
-40039: 
-40039:   template<std::size_t __i, typename _Tp>
-40039:     struct tuple_element<__i, volatile _Tp>
-40039:     {
-40039:       typedef typename add_volatile<__tuple_element_t<__i, _Tp>>::type type;
-40039:     };
-40039: 
-40039:   template<std::size_t __i, typename _Tp>
-40039:     struct tuple_element<__i, const volatile _Tp>
-40039:     {
-40039:       typedef typename add_cv<__tuple_element_t<__i, _Tp>>::type type;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<std::size_t __i, typename _Tp>
-40039:     using tuple_element_t = typename tuple_element<__i, _Tp>::type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _T1, typename _T2>
-40039:     struct __is_tuple_like_impl<std::pair<_T1, _T2>> : true_type
-40039:     { };
-40039: 
-40039: 
-40039:   template<class _Tp1, class _Tp2>
-40039:     struct tuple_size<std::pair<_Tp1, _Tp2>>
-40039:     : public integral_constant<std::size_t, 2> { };
-40039: 
-40039: 
-40039:   template<class _Tp1, class _Tp2>
-40039:     struct tuple_element<0, std::pair<_Tp1, _Tp2>>
-40039:     { typedef _Tp1 type; };
-40039: 
-40039: 
-40039:   template<class _Tp1, class _Tp2>
-40039:     struct tuple_element<1, std::pair<_Tp1, _Tp2>>
-40039:     { typedef _Tp2 type; };
-40039: 
-40039:   template<std::size_t _Int>
-40039:     struct __pair_get;
-40039: 
-40039:   template<>
-40039:     struct __pair_get<0>
-40039:     {
-40039:       template<typename _Tp1, typename _Tp2>
-40039:         static constexpr _Tp1&
-40039:         __get(std::pair<_Tp1, _Tp2>& __pair) noexcept
-40039:         { return __pair.first; }
-40039: 
-40039:       template<typename _Tp1, typename _Tp2>
-40039:         static constexpr _Tp1&&
-40039:         __move_get(std::pair<_Tp1, _Tp2>&& __pair) noexcept
-40039:         { return std::forward<_Tp1>(__pair.first); }
-40039: 
-40039:       template<typename _Tp1, typename _Tp2>
-40039:         static constexpr const _Tp1&
-40039:         __const_get(const std::pair<_Tp1, _Tp2>& __pair) noexcept
-40039:         { return __pair.first; }
-40039: 
-40039:       template<typename _Tp1, typename _Tp2>
-40039:         static constexpr const _Tp1&&
-40039:         __const_move_get(const std::pair<_Tp1, _Tp2>&& __pair) noexcept
-40039:         { return std::forward<const _Tp1>(__pair.first); }
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __pair_get<1>
-40039:     {
-40039:       template<typename _Tp1, typename _Tp2>
-40039:         static constexpr _Tp2&
-40039:         __get(std::pair<_Tp1, _Tp2>& __pair) noexcept
-40039:         { return __pair.second; }
-40039: 
-40039:       template<typename _Tp1, typename _Tp2>
-40039:         static constexpr _Tp2&&
-40039:         __move_get(std::pair<_Tp1, _Tp2>&& __pair) noexcept
-40039:         { return std::forward<_Tp2>(__pair.second); }
-40039: 
-40039:       template<typename _Tp1, typename _Tp2>
-40039:         static constexpr const _Tp2&
-40039:         __const_get(const std::pair<_Tp1, _Tp2>& __pair) noexcept
-40039:         { return __pair.second; }
-40039: 
-40039:       template<typename _Tp1, typename _Tp2>
-40039:         static constexpr const _Tp2&&
-40039:         __const_move_get(const std::pair<_Tp1, _Tp2>&& __pair) noexcept
-40039:         { return std::forward<const _Tp2>(__pair.second); }
-40039:     };
-40039: 
-40039:   template<std::size_t _Int, class _Tp1, class _Tp2>
-40039:     constexpr typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&
-40039:     get(std::pair<_Tp1, _Tp2>& __in) noexcept
-40039:     { return __pair_get<_Int>::__get(__in); }
-40039: 
-40039:   template<std::size_t _Int, class _Tp1, class _Tp2>
-40039:     constexpr typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&&
-40039:     get(std::pair<_Tp1, _Tp2>&& __in) noexcept
-40039:     { return __pair_get<_Int>::__move_get(std::move(__in)); }
-40039: 
-40039:   template<std::size_t _Int, class _Tp1, class _Tp2>
-40039:     constexpr const typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&
-40039:     get(const std::pair<_Tp1, _Tp2>& __in) noexcept
-40039:     { return __pair_get<_Int>::__const_get(__in); }
-40039: 
-40039:   template<std::size_t _Int, class _Tp1, class _Tp2>
-40039:     constexpr const typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&&
-40039:     get(const std::pair<_Tp1, _Tp2>&& __in) noexcept
-40039:     { return __pair_get<_Int>::__const_move_get(std::move(__in)); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename _Tp, typename _Up>
-40039:     constexpr _Tp&
-40039:     get(pair<_Tp, _Up>& __p) noexcept
-40039:     { return __p.first; }
-40039: 
-40039:   template <typename _Tp, typename _Up>
-40039:     constexpr const _Tp&
-40039:     get(const pair<_Tp, _Up>& __p) noexcept
-40039:     { return __p.first; }
-40039: 
-40039:   template <typename _Tp, typename _Up>
-40039:     constexpr _Tp&&
-40039:     get(pair<_Tp, _Up>&& __p) noexcept
-40039:     { return std::move(__p.first); }
-40039: 
-40039:   template <typename _Tp, typename _Up>
-40039:     constexpr const _Tp&&
-40039:     get(const pair<_Tp, _Up>&& __p) noexcept
-40039:     { return std::move(__p.first); }
-40039: 
-40039:   template <typename _Tp, typename _Up>
-40039:     constexpr _Tp&
-40039:     get(pair<_Up, _Tp>& __p) noexcept
-40039:     { return __p.second; }
-40039: 
-40039:   template <typename _Tp, typename _Up>
-40039:     constexpr const _Tp&
-40039:     get(const pair<_Up, _Tp>& __p) noexcept
-40039:     { return __p.second; }
-40039: 
-40039:   template <typename _Tp, typename _Up>
-40039:     constexpr _Tp&&
-40039:     get(pair<_Up, _Tp>&& __p) noexcept
-40039:     { return std::move(__p.second); }
-40039: 
-40039:   template <typename _Tp, typename _Up>
-40039:     constexpr const _Tp&&
-40039:     get(const pair<_Up, _Tp>&& __p) noexcept
-40039:     { return std::move(__p.second); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename _Tp, typename _Up = _Tp>
-40039:     inline _Tp
-40039:     exchange(_Tp& __obj, _Up&& __new_val)
-40039:     { return std::__exchange(__obj, std::forward<_Up>(__new_val)); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<size_t... _Indexes> struct _Index_tuple { };
-40039: # 298 "/usr/include/c++/8/utility" 3
-40039:   template<size_t _Num>
-40039:     struct _Build_index_tuple
-40039:     {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       using __type = _Index_tuple<__integer_pack(_Num)...>;
-40039: 
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, _Tp... _Idx>
-40039:     struct integer_sequence
-40039:     {
-40039:       typedef _Tp value_type;
-40039:       static constexpr size_t size() noexcept { return sizeof...(_Idx); }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp, _Tp _Num>
-40039:     using make_integer_sequence
-40039: 
-40039: 
-40039: 
-40039:       = integer_sequence<_Tp, __integer_pack(_Num)...>;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<size_t... _Idx>
-40039:     using index_sequence = integer_sequence<size_t, _Idx...>;
-40039: 
-40039: 
-40039:   template<size_t _Num>
-40039:     using make_index_sequence = make_integer_sequence<size_t, _Num>;
-40039: 
-40039: 
-40039:   template<typename... _Types>
-40039:     using index_sequence_for = make_index_sequence<sizeof...(_Types)>;
-40039: # 393 "/usr/include/c++/8/utility" 3
-40039: 
-40039: }
-40039: # 39 "/usr/include/gmpxx.h" 2 3 4
-40039: # 1 "/usr/include/c++/8/algorithm" 1 3 4
-40039: # 58 "/usr/include/c++/8/algorithm" 3 4
-40039:        
-40039: # 59 "/usr/include/c++/8/algorithm" 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/stl_algobase.h" 1 3
-40039: # 60 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039: # 1 "/usr/include/c++/8/bits/functexcept.h" 1 3
-40039: # 40 "/usr/include/c++/8/bits/functexcept.h" 3
-40039: # 1 "/usr/include/c++/8/bits/exception_defines.h" 1 3
-40039: # 41 "/usr/include/c++/8/bits/functexcept.h" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039:   void
-40039:   __throw_bad_exception(void) __attribute__((__noreturn__));
-40039: 
-40039: 
-40039:   void
-40039:   __throw_bad_alloc(void) __attribute__((__noreturn__));
-40039: 
-40039: 
-40039:   void
-40039:   __throw_bad_cast(void) __attribute__((__noreturn__));
-40039: 
-40039:   void
-40039:   __throw_bad_typeid(void) __attribute__((__noreturn__));
-40039: 
-40039: 
-40039:   void
-40039:   __throw_logic_error(const char*) __attribute__((__noreturn__));
-40039: 
-40039:   void
-40039:   __throw_domain_error(const char*) __attribute__((__noreturn__));
-40039: 
-40039:   void
-40039:   __throw_invalid_argument(const char*) __attribute__((__noreturn__));
-40039: 
-40039:   void
-40039:   __throw_length_error(const char*) __attribute__((__noreturn__));
-40039: 
-40039:   void
-40039:   __throw_out_of_range(const char*) __attribute__((__noreturn__));
-40039: 
-40039:   void
-40039:   __throw_out_of_range_fmt(const char*, ...) __attribute__((__noreturn__))
-40039:     __attribute__((__format__(__gnu_printf__, 1, 2)));
-40039: 
-40039:   void
-40039:   __throw_runtime_error(const char*) __attribute__((__noreturn__));
-40039: 
-40039:   void
-40039:   __throw_range_error(const char*) __attribute__((__noreturn__));
-40039: 
-40039:   void
-40039:   __throw_overflow_error(const char*) __attribute__((__noreturn__));
-40039: 
-40039:   void
-40039:   __throw_underflow_error(const char*) __attribute__((__noreturn__));
-40039: 
-40039: 
-40039:   void
-40039:   __throw_ios_failure(const char*) __attribute__((__noreturn__));
-40039: 
-40039:   void
-40039:   __throw_system_error(int) __attribute__((__noreturn__));
-40039: 
-40039:   void
-40039:   __throw_future_error(int) __attribute__((__noreturn__));
-40039: 
-40039: 
-40039:   void
-40039:   __throw_bad_function_call() __attribute__((__noreturn__));
-40039: 
-40039: 
-40039: }
-40039: # 61 "/usr/include/c++/8/bits/stl_algobase.h" 2 3
-40039: # 1 "/usr/include/c++/8/bits/cpp_type_traits.h" 1 3
-40039: # 35 "/usr/include/c++/8/bits/cpp_type_traits.h" 3
-40039:        
-40039: # 36 "/usr/include/c++/8/bits/cpp_type_traits.h" 3
-40039: # 67 "/usr/include/c++/8/bits/cpp_type_traits.h" 3
-40039: extern "C++" {
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   struct __true_type { };
-40039:   struct __false_type { };
-40039: 
-40039:   template<bool>
-40039:     struct __truth_type
-40039:     { typedef __false_type __type; };
-40039: 
-40039:   template<>
-40039:     struct __truth_type<true>
-40039:     { typedef __true_type __type; };
-40039: 
-40039: 
-40039: 
-40039:   template<class _Sp, class _Tp>
-40039:     struct __traitor
-40039:     {
-40039:       enum { __value = bool(_Sp::__value) || bool(_Tp::__value) };
-40039:       typedef typename __truth_type<__value>::__type __type;
-40039:     };
-40039: 
-40039: 
-40039:   template<typename, typename>
-40039:     struct __are_same
-40039:     {
-40039:       enum { __value = 0 };
-40039:       typedef __false_type __type;
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __are_same<_Tp, _Tp>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_void
-40039:     {
-40039:       enum { __value = 0 };
-40039:       typedef __false_type __type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __is_void<void>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_integer
-40039:     {
-40039:       enum { __value = 0 };
-40039:       typedef __false_type __type;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<>
-40039:     struct __is_integer<bool>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __is_integer<char>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __is_integer<signed char>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __is_integer<unsigned char>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct __is_integer<wchar_t>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<>
-40039:     struct __is_integer<char16_t>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __is_integer<char32_t>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct __is_integer<short>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __is_integer<unsigned short>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __is_integer<int>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __is_integer<unsigned int>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __is_integer<long>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __is_integer<unsigned long>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __is_integer<long long>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __is_integer<unsigned long long>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: # 261 "/usr/include/c++/8/bits/cpp_type_traits.h" 3
-40039: template<> struct __is_integer<__int128> { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_integer<unsigned __int128> { enum { __value = 1 }; typedef __true_type __type; };
-40039: # 278 "/usr/include/c++/8/bits/cpp_type_traits.h" 3
-40039:   template<typename _Tp>
-40039:     struct __is_floating
-40039:     {
-40039:       enum { __value = 0 };
-40039:       typedef __false_type __type;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct __is_floating<float>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __is_floating<double>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __is_floating<long double>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_pointer
-40039:     {
-40039:       enum { __value = 0 };
-40039:       typedef __false_type __type;
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_pointer<_Tp*>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_arithmetic
-40039:     : public __traitor<__is_integer<_Tp>, __is_floating<_Tp> >
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_scalar
-40039:     : public __traitor<__is_arithmetic<_Tp>, __is_pointer<_Tp> >
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_char
-40039:     {
-40039:       enum { __value = 0 };
-40039:       typedef __false_type __type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __is_char<char>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct __is_char<wchar_t>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_byte
-40039:     {
-40039:       enum { __value = 0 };
-40039:       typedef __false_type __type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __is_byte<char>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __is_byte<signed char>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __is_byte<unsigned char>
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: # 408 "/usr/include/c++/8/bits/cpp_type_traits.h" 3
-40039:   template<typename _Tp>
-40039:     struct __is_move_iterator
-40039:     {
-40039:       enum { __value = 0 };
-40039:       typedef __false_type __type;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Iterator>
-40039:     inline _Iterator
-40039:     __miter_base(_Iterator __it)
-40039:     { return __it; }
-40039: 
-40039: 
-40039: }
-40039: }
-40039: # 62 "/usr/include/c++/8/bits/stl_algobase.h" 2 3
-40039: # 1 "/usr/include/c++/8/ext/type_traits.h" 1 3
-40039: # 32 "/usr/include/c++/8/ext/type_traits.h" 3
-40039:        
-40039: # 33 "/usr/include/c++/8/ext/type_traits.h" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern "C++" {
-40039: 
-40039: namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039:   template<bool, typename>
-40039:     struct __enable_if
-40039:     { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __enable_if<true, _Tp>
-40039:     { typedef _Tp __type; };
-40039: 
-40039: 
-40039: 
-40039:   template<bool _Cond, typename _Iftrue, typename _Iffalse>
-40039:     struct __conditional_type
-40039:     { typedef _Iftrue __type; };
-40039: 
-40039:   template<typename _Iftrue, typename _Iffalse>
-40039:     struct __conditional_type<false, _Iftrue, _Iffalse>
-40039:     { typedef _Iffalse __type; };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __add_unsigned
-40039:     {
-40039:     private:
-40039:       typedef __enable_if<std::__is_integer<_Tp>::__value, _Tp> __if_type;
-40039: 
-40039:     public:
-40039:       typedef typename __if_type::__type __type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __add_unsigned<char>
-40039:     { typedef unsigned char __type; };
-40039: 
-40039:   template<>
-40039:     struct __add_unsigned<signed char>
-40039:     { typedef unsigned char __type; };
-40039: 
-40039:   template<>
-40039:     struct __add_unsigned<short>
-40039:     { typedef unsigned short __type; };
-40039: 
-40039:   template<>
-40039:     struct __add_unsigned<int>
-40039:     { typedef unsigned int __type; };
-40039: 
-40039:   template<>
-40039:     struct __add_unsigned<long>
-40039:     { typedef unsigned long __type; };
-40039: 
-40039:   template<>
-40039:     struct __add_unsigned<long long>
-40039:     { typedef unsigned long long __type; };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct __add_unsigned<bool>;
-40039: 
-40039:   template<>
-40039:     struct __add_unsigned<wchar_t>;
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __remove_unsigned
-40039:     {
-40039:     private:
-40039:       typedef __enable_if<std::__is_integer<_Tp>::__value, _Tp> __if_type;
-40039: 
-40039:     public:
-40039:       typedef typename __if_type::__type __type;
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __remove_unsigned<char>
-40039:     { typedef signed char __type; };
-40039: 
-40039:   template<>
-40039:     struct __remove_unsigned<unsigned char>
-40039:     { typedef signed char __type; };
-40039: 
-40039:   template<>
-40039:     struct __remove_unsigned<unsigned short>
-40039:     { typedef short __type; };
-40039: 
-40039:   template<>
-40039:     struct __remove_unsigned<unsigned int>
-40039:     { typedef int __type; };
-40039: 
-40039:   template<>
-40039:     struct __remove_unsigned<unsigned long>
-40039:     { typedef long __type; };
-40039: 
-40039:   template<>
-40039:     struct __remove_unsigned<unsigned long long>
-40039:     { typedef long long __type; };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct __remove_unsigned<bool>;
-40039: 
-40039:   template<>
-40039:     struct __remove_unsigned<wchar_t>;
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Type>
-40039:     inline bool
-40039:     __is_null_pointer(_Type* __ptr)
-40039:     { return __ptr == 0; }
-40039: 
-40039:   template<typename _Type>
-40039:     inline bool
-40039:     __is_null_pointer(_Type)
-40039:     { return false; }
-40039: 
-40039: 
-40039:   inline bool
-40039:   __is_null_pointer(std::nullptr_t)
-40039:   { return true; }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, bool = std::__is_integer<_Tp>::__value>
-40039:     struct __promote
-40039:     { typedef double __type; };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __promote<_Tp, false>
-40039:     { };
-40039: 
-40039:   template<>
-40039:     struct __promote<long double>
-40039:     { typedef long double __type; };
-40039: 
-40039:   template<>
-40039:     struct __promote<double>
-40039:     { typedef double __type; };
-40039: 
-40039:   template<>
-40039:     struct __promote<float>
-40039:     { typedef float __type; };
-40039: 
-40039:   template<typename _Tp, typename _Up,
-40039:            typename _Tp2 = typename __promote<_Tp>::__type,
-40039:            typename _Up2 = typename __promote<_Up>::__type>
-40039:     struct __promote_2
-40039:     {
-40039:       typedef __typeof__(_Tp2() + _Up2()) __type;
-40039:     };
-40039: 
-40039:   template<typename _Tp, typename _Up, typename _Vp,
-40039:            typename _Tp2 = typename __promote<_Tp>::__type,
-40039:            typename _Up2 = typename __promote<_Up>::__type,
-40039:            typename _Vp2 = typename __promote<_Vp>::__type>
-40039:     struct __promote_3
-40039:     {
-40039:       typedef __typeof__(_Tp2() + _Up2() + _Vp2()) __type;
-40039:     };
-40039: 
-40039:   template<typename _Tp, typename _Up, typename _Vp, typename _Wp,
-40039:            typename _Tp2 = typename __promote<_Tp>::__type,
-40039:            typename _Up2 = typename __promote<_Up>::__type,
-40039:            typename _Vp2 = typename __promote<_Vp>::__type,
-40039:            typename _Wp2 = typename __promote<_Wp>::__type>
-40039:     struct __promote_4
-40039:     {
-40039:       typedef __typeof__(_Tp2() + _Up2() + _Vp2() + _Wp2()) __type;
-40039:     };
-40039: 
-40039: 
-40039: }
-40039: }
-40039: # 63 "/usr/include/c++/8/bits/stl_algobase.h" 2 3
-40039: # 1 "/usr/include/c++/8/ext/numeric_traits.h" 1 3
-40039: # 32 "/usr/include/c++/8/ext/numeric_traits.h" 3
-40039:        
-40039: # 33 "/usr/include/c++/8/ext/numeric_traits.h" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 54 "/usr/include/c++/8/ext/numeric_traits.h" 3
-40039:   template<typename _Value>
-40039:     struct __numeric_traits_integer
-40039:     {
-40039: 
-40039:       static const _Value __min = (((_Value)(-1) < 0) ? (_Value)1 << (sizeof(_Value) * 8 - ((_Value)(-1) < 0)) : (_Value)0);
-40039:       static const _Value __max = (((_Value)(-1) < 0) ? (((((_Value)1 << ((sizeof(_Value) * 8 - ((_Value)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(_Value)0);
-40039: 
-40039: 
-40039: 
-40039:       static const bool __is_signed = ((_Value)(-1) < 0);
-40039:       static const int __digits = (sizeof(_Value) * 8 - ((_Value)(-1) < 0));
-40039:     };
-40039: 
-40039:   template<typename _Value>
-40039:     const _Value __numeric_traits_integer<_Value>::__min;
-40039: 
-40039:   template<typename _Value>
-40039:     const _Value __numeric_traits_integer<_Value>::__max;
-40039: 
-40039:   template<typename _Value>
-40039:     const bool __numeric_traits_integer<_Value>::__is_signed;
-40039: 
-40039:   template<typename _Value>
-40039:     const int __numeric_traits_integer<_Value>::__digits;
-40039: # 99 "/usr/include/c++/8/ext/numeric_traits.h" 3
-40039:   template<typename _Value>
-40039:     struct __numeric_traits_floating
-40039:     {
-40039: 
-40039:       static const int __max_digits10 = (2 + (std::__are_same<_Value, float>::__value ? 24 : std::__are_same<_Value, double>::__value ? 53 : 64) * 643L / 2136);
-40039: 
-40039: 
-40039:       static const bool __is_signed = true;
-40039:       static const int __digits10 = (std::__are_same<_Value, float>::__value ? 6 : std::__are_same<_Value, double>::__value ? 15 : 18);
-40039:       static const int __max_exponent10 = (std::__are_same<_Value, float>::__value ? 38 : std::__are_same<_Value, double>::__value ? 308 : 4932);
-40039:     };
-40039: 
-40039:   template<typename _Value>
-40039:     const int __numeric_traits_floating<_Value>::__max_digits10;
-40039: 
-40039:   template<typename _Value>
-40039:     const bool __numeric_traits_floating<_Value>::__is_signed;
-40039: 
-40039:   template<typename _Value>
-40039:     const int __numeric_traits_floating<_Value>::__digits10;
-40039: 
-40039:   template<typename _Value>
-40039:     const int __numeric_traits_floating<_Value>::__max_exponent10;
-40039: 
-40039:   template<typename _Value>
-40039:     struct __numeric_traits
-40039:     : public __conditional_type<std::__is_integer<_Value>::__value,
-40039:     __numeric_traits_integer<_Value>,
-40039:     __numeric_traits_floating<_Value> >::__type
-40039:     { };
-40039: 
-40039: 
-40039: }
-40039: # 64 "/usr/include/c++/8/bits/stl_algobase.h" 2 3
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 1 3
-40039: # 62 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 3
-40039:        
-40039: # 63 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 89 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 3
-40039:   struct input_iterator_tag { };
-40039: 
-40039: 
-40039:   struct output_iterator_tag { };
-40039: 
-40039: 
-40039:   struct forward_iterator_tag : public input_iterator_tag { };
-40039: 
-40039: 
-40039: 
-40039:   struct bidirectional_iterator_tag : public forward_iterator_tag { };
-40039: 
-40039: 
-40039: 
-40039:   struct random_access_iterator_tag : public bidirectional_iterator_tag { };
-40039: # 116 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 3
-40039:   template<typename _Category, typename _Tp, typename _Distance = ptrdiff_t,
-40039:            typename _Pointer = _Tp*, typename _Reference = _Tp&>
-40039:     struct iterator
-40039:     {
-40039: 
-40039:       typedef _Category iterator_category;
-40039: 
-40039:       typedef _Tp value_type;
-40039: 
-40039:       typedef _Distance difference_type;
-40039: 
-40039:       typedef _Pointer pointer;
-40039: 
-40039:       typedef _Reference reference;
-40039:     };
-40039: # 143 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 3
-40039:   template<typename _Iterator, typename = __void_t<>>
-40039:     struct __iterator_traits { };
-40039: 
-40039:   template<typename _Iterator>
-40039:     struct __iterator_traits<_Iterator,
-40039:         __void_t<typename _Iterator::iterator_category,
-40039:           typename _Iterator::value_type,
-40039:           typename _Iterator::difference_type,
-40039:           typename _Iterator::pointer,
-40039:           typename _Iterator::reference>>
-40039:     {
-40039:       typedef typename _Iterator::iterator_category iterator_category;
-40039:       typedef typename _Iterator::value_type value_type;
-40039:       typedef typename _Iterator::difference_type difference_type;
-40039:       typedef typename _Iterator::pointer pointer;
-40039:       typedef typename _Iterator::reference reference;
-40039:     };
-40039: 
-40039:   template<typename _Iterator>
-40039:     struct iterator_traits
-40039:     : public __iterator_traits<_Iterator> { };
-40039: # 177 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 3
-40039:   template<typename _Tp>
-40039:     struct iterator_traits<_Tp*>
-40039:     {
-40039:       typedef random_access_iterator_tag iterator_category;
-40039:       typedef _Tp value_type;
-40039:       typedef ptrdiff_t difference_type;
-40039:       typedef _Tp* pointer;
-40039:       typedef _Tp& reference;
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct iterator_traits<const _Tp*>
-40039:     {
-40039:       typedef random_access_iterator_tag iterator_category;
-40039:       typedef _Tp value_type;
-40039:       typedef ptrdiff_t difference_type;
-40039:       typedef const _Tp* pointer;
-40039:       typedef const _Tp& reference;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Iter>
-40039:     inline constexpr
-40039:     typename iterator_traits<_Iter>::iterator_category
-40039:     __iterator_category(const _Iter&)
-40039:     { return typename iterator_traits<_Iter>::iterator_category(); }
-40039: # 231 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 3
-40039:   template<typename _InIter>
-40039:     using _RequireInputIter = typename
-40039:       enable_if<is_convertible<typename
-40039:   iterator_traits<_InIter>::iterator_category,
-40039:           input_iterator_tag>::value>::type;
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 66 "/usr/include/c++/8/bits/stl_algobase.h" 2 3
-40039: # 1 "/usr/include/c++/8/bits/stl_iterator_base_funcs.h" 1 3
-40039: # 62 "/usr/include/c++/8/bits/stl_iterator_base_funcs.h" 3
-40039:        
-40039: # 63 "/usr/include/c++/8/bits/stl_iterator_base_funcs.h" 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/debug/assertions.h" 1 3
-40039: # 66 "/usr/include/c++/8/bits/stl_iterator_base_funcs.h" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename> struct _List_iterator;
-40039:   template <typename> struct _List_const_iterator;
-40039: 
-40039: 
-40039:   template<typename _InputIterator>
-40039:     inline constexpr
-40039:     typename iterator_traits<_InputIterator>::difference_type
-40039:     __distance(_InputIterator __first, _InputIterator __last,
-40039:                input_iterator_tag)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:       typename iterator_traits<_InputIterator>::difference_type __n = 0;
-40039:       while (__first != __last)
-40039:  {
-40039:    ++__first;
-40039:    ++__n;
-40039:  }
-40039:       return __n;
-40039:     }
-40039: 
-40039:   template<typename _RandomAccessIterator>
-40039:     inline constexpr
-40039:     typename iterator_traits<_RandomAccessIterator>::difference_type
-40039:     __distance(_RandomAccessIterator __first, _RandomAccessIterator __last,
-40039:                random_access_iterator_tag)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:       return __last - __first;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     ptrdiff_t
-40039:     __distance(std::_List_iterator<_Tp>,
-40039:         std::_List_iterator<_Tp>,
-40039:         input_iterator_tag);
-40039: 
-40039:   template<typename _Tp>
-40039:     ptrdiff_t
-40039:     __distance(std::_List_const_iterator<_Tp>,
-40039:         std::_List_const_iterator<_Tp>,
-40039:         input_iterator_tag);
-40039: # 135 "/usr/include/c++/8/bits/stl_iterator_base_funcs.h" 3
-40039:   template<typename _InputIterator>
-40039:     inline
-40039:     typename iterator_traits<_InputIterator>::difference_type
-40039:     distance(_InputIterator __first, _InputIterator __last)
-40039:     {
-40039: 
-40039:       return std::__distance(__first, __last,
-40039:         std::__iterator_category(__first));
-40039:     }
-40039: 
-40039:   template<typename _InputIterator, typename _Distance>
-40039:     inline constexpr void
-40039:     __advance(_InputIterator& __i, _Distance __n, input_iterator_tag)
-40039:     {
-40039: 
-40039:      
-40039:       ;
-40039:       while (__n--)
-40039:  ++__i;
-40039:     }
-40039: 
-40039:   template<typename _BidirectionalIterator, typename _Distance>
-40039:     inline constexpr void
-40039:     __advance(_BidirectionalIterator& __i, _Distance __n,
-40039:        bidirectional_iterator_tag)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:       if (__n > 0)
-40039:         while (__n--)
-40039:    ++__i;
-40039:       else
-40039:         while (__n++)
-40039:    --__i;
-40039:     }
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Distance>
-40039:     inline constexpr void
-40039:     __advance(_RandomAccessIterator& __i, _Distance __n,
-40039:               random_access_iterator_tag)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:       if (__builtin_constant_p(__n) && __n == 1)
-40039:  ++__i;
-40039:       else if (__builtin_constant_p(__n) && __n == -1)
-40039:  --__i;
-40039:       else
-40039:  __i += __n;
-40039:     }
-40039: # 200 "/usr/include/c++/8/bits/stl_iterator_base_funcs.h" 3
-40039:   template<typename _InputIterator, typename _Distance>
-40039:     inline void
-40039:     advance(_InputIterator& __i, _Distance __n)
-40039:     {
-40039: 
-40039:       typename iterator_traits<_InputIterator>::difference_type __d = __n;
-40039:       std::__advance(__i, __d, std::__iterator_category(__i));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _InputIterator>
-40039:     inline _InputIterator
-40039:     next(_InputIterator __x, typename
-40039:   iterator_traits<_InputIterator>::difference_type __n = 1)
-40039:     {
-40039: 
-40039:      
-40039:       std::advance(__x, __n);
-40039:       return __x;
-40039:     }
-40039: 
-40039:   template<typename _BidirectionalIterator>
-40039:     inline _BidirectionalIterator
-40039:     prev(_BidirectionalIterator __x, typename
-40039:   iterator_traits<_BidirectionalIterator>::difference_type __n = 1)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:       std::advance(__x, -__n);
-40039:       return __x;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 67 "/usr/include/c++/8/bits/stl_algobase.h" 2 3
-40039: # 1 "/usr/include/c++/8/bits/stl_iterator.h" 1 3
-40039: # 66 "/usr/include/c++/8/bits/stl_iterator.h" 3
-40039: # 1 "/usr/include/c++/8/bits/ptr_traits.h" 1 3
-40039: # 37 "/usr/include/c++/8/bits/ptr_traits.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   class __undefined;
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __get_first_arg
-40039:     { using type = __undefined; };
-40039: 
-40039:   template<template<typename, typename...> class _Template, typename _Tp,
-40039:            typename... _Types>
-40039:     struct __get_first_arg<_Template<_Tp, _Types...>>
-40039:     { using type = _Tp; };
-40039: 
-40039:   template<typename _Tp>
-40039:     using __get_first_arg_t = typename __get_first_arg<_Tp>::type;
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     struct __replace_first_arg
-40039:     { };
-40039: 
-40039:   template<template<typename, typename...> class _Template, typename _Up,
-40039:            typename _Tp, typename... _Types>
-40039:     struct __replace_first_arg<_Template<_Tp, _Types...>, _Up>
-40039:     { using type = _Template<_Up, _Types...>; };
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     using __replace_first_arg_t = typename __replace_first_arg<_Tp, _Up>::type;
-40039: 
-40039:   template<typename _Tp>
-40039:     using __make_not_void
-40039:       = typename conditional<is_void<_Tp>::value, __undefined, _Tp>::type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Ptr>
-40039:     struct pointer_traits
-40039:     {
-40039:     private:
-40039:       template<typename _Tp>
-40039:  using __element_type = typename _Tp::element_type;
-40039: 
-40039:       template<typename _Tp>
-40039:  using __difference_type = typename _Tp::difference_type;
-40039: 
-40039:       template<typename _Tp, typename _Up, typename = void>
-40039:  struct __rebind : __replace_first_arg<_Tp, _Up> { };
-40039: 
-40039:       template<typename _Tp, typename _Up>
-40039:  struct __rebind<_Tp, _Up, __void_t<typename _Tp::template rebind<_Up>>>
-40039:  { using type = typename _Tp::template rebind<_Up>; };
-40039: 
-40039:     public:
-40039: 
-40039:       using pointer = _Ptr;
-40039: 
-40039: 
-40039:       using element_type
-40039:  = __detected_or_t<__get_first_arg_t<_Ptr>, __element_type, _Ptr>;
-40039: 
-40039: 
-40039:       using difference_type
-40039:  = __detected_or_t<ptrdiff_t, __difference_type, _Ptr>;
-40039: 
-40039: 
-40039:       template<typename _Up>
-40039:         using rebind = typename __rebind<_Ptr, _Up>::type;
-40039: 
-40039:       static _Ptr
-40039:       pointer_to(__make_not_void<element_type>& __e)
-40039:       { return _Ptr::pointer_to(__e); }
-40039: 
-40039:       static_assert(!is_same<element_type, __undefined>::value,
-40039:    "pointer type defines element_type or is like SomePointer<T, Args>");
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct pointer_traits<_Tp*>
-40039:     {
-40039: 
-40039:       typedef _Tp* pointer;
-40039: 
-40039:       typedef _Tp element_type;
-40039: 
-40039:       typedef ptrdiff_t difference_type;
-40039: 
-40039:       template<typename _Up>
-40039:         using rebind = _Up*;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       static pointer
-40039:       pointer_to(__make_not_void<element_type>& __r) noexcept
-40039:       { return std::addressof(__r); }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Ptr, typename _Tp>
-40039:     using __ptr_rebind = typename pointer_traits<_Ptr>::template rebind<_Tp>;
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr _Tp*
-40039:     __to_address(_Tp* __ptr) noexcept
-40039:     {
-40039:       static_assert(!std::is_function<_Tp>::value, "not a function pointer");
-40039:       return __ptr;
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _Ptr>
-40039:     constexpr typename std::pointer_traits<_Ptr>::element_type*
-40039:     __to_address(const _Ptr& __ptr)
-40039:     { return std::__to_address(__ptr.operator->()); }
-40039: # 198 "/usr/include/c++/8/bits/ptr_traits.h" 3
-40039: 
-40039: }
-40039: # 67 "/usr/include/c++/8/bits/stl_iterator.h" 2 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 100 "/usr/include/c++/8/bits/stl_iterator.h" 3
-40039:   template<typename _Iterator>
-40039:     class reverse_iterator
-40039:     : public iterator<typename iterator_traits<_Iterator>::iterator_category,
-40039:         typename iterator_traits<_Iterator>::value_type,
-40039:         typename iterator_traits<_Iterator>::difference_type,
-40039:         typename iterator_traits<_Iterator>::pointer,
-40039:                       typename iterator_traits<_Iterator>::reference>
-40039:     {
-40039:     protected:
-40039:       _Iterator current;
-40039: 
-40039:       typedef iterator_traits<_Iterator> __traits_type;
-40039: 
-40039:     public:
-40039:       typedef _Iterator iterator_type;
-40039:       typedef typename __traits_type::difference_type difference_type;
-40039:       typedef typename __traits_type::pointer pointer;
-40039:       typedef typename __traits_type::reference reference;
-40039: # 126 "/usr/include/c++/8/bits/stl_iterator.h" 3
-40039:      
-40039:       reverse_iterator() : current() { }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       explicit
-40039:       reverse_iterator(iterator_type __x) : current(__x) { }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:      
-40039:       reverse_iterator(const reverse_iterator& __x)
-40039:       : current(__x.current) { }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Iter>
-40039: 
-40039:         reverse_iterator(const reverse_iterator<_Iter>& __x)
-40039:  : current(__x.base()) { }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator_type
-40039:       base() const
-40039:       { return current; }
-40039: # 168 "/usr/include/c++/8/bits/stl_iterator.h" 3
-40039:       reference
-40039:       operator*() const
-40039:       {
-40039:  _Iterator __tmp = current;
-40039:  return *--__tmp;
-40039:       }
-40039: # 182 "/usr/include/c++/8/bits/stl_iterator.h" 3
-40039:       pointer
-40039:       operator->() const
-40039:       { return std::__addressof(operator*()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator&
-40039:       operator++()
-40039:       {
-40039:  --current;
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       operator++(int)
-40039:       {
-40039:  reverse_iterator __tmp = *this;
-40039:  --current;
-40039:  return __tmp;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator&
-40039:       operator--()
-40039:       {
-40039:  ++current;
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       operator--(int)
-40039:       {
-40039:  reverse_iterator __tmp = *this;
-40039:  ++current;
-40039:  return __tmp;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       operator+(difference_type __n) const
-40039:       { return reverse_iterator(current - __n); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator&
-40039:       operator+=(difference_type __n)
-40039:       {
-40039:  current -= __n;
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       operator-(difference_type __n) const
-40039:       { return reverse_iterator(current + __n); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator&
-40039:       operator-=(difference_type __n)
-40039:       {
-40039:  current += __n;
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reference
-40039:       operator[](difference_type __n) const
-40039:       { return *(*this + __n); }
-40039:     };
-40039: # 300 "/usr/include/c++/8/bits/stl_iterator.h" 3
-40039:   template<typename _Iterator>
-40039:     inline bool
-40039:     operator==(const reverse_iterator<_Iterator>& __x,
-40039:         const reverse_iterator<_Iterator>& __y)
-40039:     { return __x.base() == __y.base(); }
-40039: 
-40039:   template<typename _Iterator>
-40039:     inline bool
-40039:     operator<(const reverse_iterator<_Iterator>& __x,
-40039:        const reverse_iterator<_Iterator>& __y)
-40039:     { return __y.base() < __x.base(); }
-40039: 
-40039:   template<typename _Iterator>
-40039:     inline bool
-40039:     operator!=(const reverse_iterator<_Iterator>& __x,
-40039:         const reverse_iterator<_Iterator>& __y)
-40039:     { return !(__x == __y); }
-40039: 
-40039:   template<typename _Iterator>
-40039:     inline bool
-40039:     operator>(const reverse_iterator<_Iterator>& __x,
-40039:        const reverse_iterator<_Iterator>& __y)
-40039:     { return __y < __x; }
-40039: 
-40039:   template<typename _Iterator>
-40039:     inline bool
-40039:     operator<=(const reverse_iterator<_Iterator>& __x,
-40039:         const reverse_iterator<_Iterator>& __y)
-40039:     { return !(__y < __x); }
-40039: 
-40039:   template<typename _Iterator>
-40039:     inline bool
-40039:     operator>=(const reverse_iterator<_Iterator>& __x,
-40039:         const reverse_iterator<_Iterator>& __y)
-40039:     { return !(__x < __y); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _IteratorL, typename _IteratorR>
-40039:     inline bool
-40039:     operator==(const reverse_iterator<_IteratorL>& __x,
-40039:         const reverse_iterator<_IteratorR>& __y)
-40039:     { return __x.base() == __y.base(); }
-40039: 
-40039:   template<typename _IteratorL, typename _IteratorR>
-40039:     inline bool
-40039:     operator<(const reverse_iterator<_IteratorL>& __x,
-40039:        const reverse_iterator<_IteratorR>& __y)
-40039:     { return __y.base() < __x.base(); }
-40039: 
-40039:   template<typename _IteratorL, typename _IteratorR>
-40039:     inline bool
-40039:     operator!=(const reverse_iterator<_IteratorL>& __x,
-40039:         const reverse_iterator<_IteratorR>& __y)
-40039:     { return !(__x == __y); }
-40039: 
-40039:   template<typename _IteratorL, typename _IteratorR>
-40039:     inline bool
-40039:     operator>(const reverse_iterator<_IteratorL>& __x,
-40039:        const reverse_iterator<_IteratorR>& __y)
-40039:     { return __y < __x; }
-40039: 
-40039:   template<typename _IteratorL, typename _IteratorR>
-40039:     inline bool
-40039:     operator<=(const reverse_iterator<_IteratorL>& __x,
-40039:         const reverse_iterator<_IteratorR>& __y)
-40039:     { return !(__y < __x); }
-40039: 
-40039:   template<typename _IteratorL, typename _IteratorR>
-40039:     inline bool
-40039:     operator>=(const reverse_iterator<_IteratorL>& __x,
-40039:         const reverse_iterator<_IteratorR>& __y)
-40039:     { return !(__x < __y); }
-40039: # 390 "/usr/include/c++/8/bits/stl_iterator.h" 3
-40039:   template<typename _IteratorL, typename _IteratorR>
-40039:     inline auto
-40039:     operator-(const reverse_iterator<_IteratorL>& __x,
-40039:        const reverse_iterator<_IteratorR>& __y)
-40039:     -> decltype(__y.base() - __x.base())
-40039:     { return __y.base() - __x.base(); }
-40039: 
-40039: 
-40039:   template<typename _Iterator>
-40039:     inline reverse_iterator<_Iterator>
-40039:     operator+(typename reverse_iterator<_Iterator>::difference_type __n,
-40039:        const reverse_iterator<_Iterator>& __x)
-40039:     { return reverse_iterator<_Iterator>(__x.base() - __n); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Iterator>
-40039:     inline reverse_iterator<_Iterator>
-40039:     __make_reverse_iterator(_Iterator __i)
-40039:     { return reverse_iterator<_Iterator>(__i); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Iterator>
-40039:     inline reverse_iterator<_Iterator>
-40039:     make_reverse_iterator(_Iterator __i)
-40039:     { return reverse_iterator<_Iterator>(__i); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Iterator>
-40039:     auto
-40039:     __niter_base(reverse_iterator<_Iterator> __it)
-40039:     -> decltype(__make_reverse_iterator(__niter_base(__it.base())))
-40039:     { return __make_reverse_iterator(__niter_base(__it.base())); }
-40039: 
-40039:   template<typename _Iterator>
-40039:     struct __is_move_iterator<reverse_iterator<_Iterator> >
-40039:       : __is_move_iterator<_Iterator>
-40039:     { };
-40039: 
-40039:   template<typename _Iterator>
-40039:     auto
-40039:     __miter_base(reverse_iterator<_Iterator> __it)
-40039:     -> decltype(__make_reverse_iterator(__miter_base(__it.base())))
-40039:     { return __make_reverse_iterator(__miter_base(__it.base())); }
-40039: # 454 "/usr/include/c++/8/bits/stl_iterator.h" 3
-40039:   template<typename _Container>
-40039:     class back_insert_iterator
-40039:     : public iterator<output_iterator_tag, void, void, void, void>
-40039:     {
-40039:     protected:
-40039:       _Container* container;
-40039: 
-40039:     public:
-40039: 
-40039:       typedef _Container container_type;
-40039: 
-40039: 
-40039:       explicit
-40039:       back_insert_iterator(_Container& __x)
-40039:       : container(std::__addressof(__x)) { }
-40039: # 489 "/usr/include/c++/8/bits/stl_iterator.h" 3
-40039:       back_insert_iterator&
-40039:       operator=(const typename _Container::value_type& __value)
-40039:       {
-40039:  container->push_back(__value);
-40039:  return *this;
-40039:       }
-40039: 
-40039:       back_insert_iterator&
-40039:       operator=(typename _Container::value_type&& __value)
-40039:       {
-40039:  container->push_back(std::move(__value));
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       back_insert_iterator&
-40039:       operator*()
-40039:       { return *this; }
-40039: 
-40039: 
-40039:       back_insert_iterator&
-40039:       operator++()
-40039:       { return *this; }
-40039: 
-40039: 
-40039:       back_insert_iterator
-40039:       operator++(int)
-40039:       { return *this; }
-40039:     };
-40039: # 531 "/usr/include/c++/8/bits/stl_iterator.h" 3
-40039:   template<typename _Container>
-40039:     inline back_insert_iterator<_Container>
-40039:     back_inserter(_Container& __x)
-40039:     { return back_insert_iterator<_Container>(__x); }
-40039: # 546 "/usr/include/c++/8/bits/stl_iterator.h" 3
-40039:   template<typename _Container>
-40039:     class front_insert_iterator
-40039:     : public iterator<output_iterator_tag, void, void, void, void>
-40039:     {
-40039:     protected:
-40039:       _Container* container;
-40039: 
-40039:     public:
-40039: 
-40039:       typedef _Container container_type;
-40039: 
-40039: 
-40039:       explicit front_insert_iterator(_Container& __x)
-40039:       : container(std::__addressof(__x)) { }
-40039: # 580 "/usr/include/c++/8/bits/stl_iterator.h" 3
-40039:       front_insert_iterator&
-40039:       operator=(const typename _Container::value_type& __value)
-40039:       {
-40039:  container->push_front(__value);
-40039:  return *this;
-40039:       }
-40039: 
-40039:       front_insert_iterator&
-40039:       operator=(typename _Container::value_type&& __value)
-40039:       {
-40039:  container->push_front(std::move(__value));
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       front_insert_iterator&
-40039:       operator*()
-40039:       { return *this; }
-40039: 
-40039: 
-40039:       front_insert_iterator&
-40039:       operator++()
-40039:       { return *this; }
-40039: 
-40039: 
-40039:       front_insert_iterator
-40039:       operator++(int)
-40039:       { return *this; }
-40039:     };
-40039: # 622 "/usr/include/c++/8/bits/stl_iterator.h" 3
-40039:   template<typename _Container>
-40039:     inline front_insert_iterator<_Container>
-40039:     front_inserter(_Container& __x)
-40039:     { return front_insert_iterator<_Container>(__x); }
-40039: # 641 "/usr/include/c++/8/bits/stl_iterator.h" 3
-40039:   template<typename _Container>
-40039:     class insert_iterator
-40039:     : public iterator<output_iterator_tag, void, void, void, void>
-40039:     {
-40039:     protected:
-40039:       _Container* container;
-40039:       typename _Container::iterator iter;
-40039: 
-40039:     public:
-40039: 
-40039:       typedef _Container container_type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       insert_iterator(_Container& __x, typename _Container::iterator __i)
-40039:       : container(std::__addressof(__x)), iter(__i) {}
-40039: # 692 "/usr/include/c++/8/bits/stl_iterator.h" 3
-40039:       insert_iterator&
-40039:       operator=(const typename _Container::value_type& __value)
-40039:       {
-40039:  iter = container->insert(iter, __value);
-40039:  ++iter;
-40039:  return *this;
-40039:       }
-40039: 
-40039:       insert_iterator&
-40039:       operator=(typename _Container::value_type&& __value)
-40039:       {
-40039:  iter = container->insert(iter, std::move(__value));
-40039:  ++iter;
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       insert_iterator&
-40039:       operator*()
-40039:       { return *this; }
-40039: 
-40039: 
-40039:       insert_iterator&
-40039:       operator++()
-40039:       { return *this; }
-40039: 
-40039: 
-40039:       insert_iterator&
-40039:       operator++(int)
-40039:       { return *this; }
-40039:     };
-40039: # 737 "/usr/include/c++/8/bits/stl_iterator.h" 3
-40039:   template<typename _Container, typename _Iterator>
-40039:     inline insert_iterator<_Container>
-40039:     inserter(_Container& __x, _Iterator __i)
-40039:     {
-40039:       return insert_iterator<_Container>(__x,
-40039:       typename _Container::iterator(__i));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 761 "/usr/include/c++/8/bits/stl_iterator.h" 3
-40039:   using std::iterator_traits;
-40039:   using std::iterator;
-40039:   template<typename _Iterator, typename _Container>
-40039:     class __normal_iterator
-40039:     {
-40039:     protected:
-40039:       _Iterator _M_current;
-40039: 
-40039:       typedef iterator_traits<_Iterator> __traits_type;
-40039: 
-40039:     public:
-40039:       typedef _Iterator iterator_type;
-40039:       typedef typename __traits_type::iterator_category iterator_category;
-40039:       typedef typename __traits_type::value_type value_type;
-40039:       typedef typename __traits_type::difference_type difference_type;
-40039:       typedef typename __traits_type::reference reference;
-40039:       typedef typename __traits_type::pointer pointer;
-40039: 
-40039:       constexpr __normal_iterator() noexcept
-40039:       : _M_current(_Iterator()) { }
-40039: 
-40039:       explicit
-40039:       __normal_iterator(const _Iterator& __i) noexcept
-40039:       : _M_current(__i) { }
-40039: 
-40039: 
-40039:       template<typename _Iter>
-40039:         __normal_iterator(const __normal_iterator<_Iter,
-40039:      typename __enable_if<
-40039:               (std::__are_same<_Iter, typename _Container::pointer>::__value),
-40039:         _Container>::__type>& __i) noexcept
-40039:         : _M_current(__i.base()) { }
-40039: 
-40039: 
-40039:       reference
-40039:       operator*() const noexcept
-40039:       { return *_M_current; }
-40039: 
-40039:       pointer
-40039:       operator->() const noexcept
-40039:       { return _M_current; }
-40039: 
-40039:       __normal_iterator&
-40039:       operator++() noexcept
-40039:       {
-40039:  ++_M_current;
-40039:  return *this;
-40039:       }
-40039: 
-40039:       __normal_iterator
-40039:       operator++(int) noexcept
-40039:       { return __normal_iterator(_M_current++); }
-40039: 
-40039: 
-40039:       __normal_iterator&
-40039:       operator--() noexcept
-40039:       {
-40039:  --_M_current;
-40039:  return *this;
-40039:       }
-40039: 
-40039:       __normal_iterator
-40039:       operator--(int) noexcept
-40039:       { return __normal_iterator(_M_current--); }
-40039: 
-40039: 
-40039:       reference
-40039:       operator[](difference_type __n) const noexcept
-40039:       { return _M_current[__n]; }
-40039: 
-40039:       __normal_iterator&
-40039:       operator+=(difference_type __n) noexcept
-40039:       { _M_current += __n; return *this; }
-40039: 
-40039:       __normal_iterator
-40039:       operator+(difference_type __n) const noexcept
-40039:       { return __normal_iterator(_M_current + __n); }
-40039: 
-40039:       __normal_iterator&
-40039:       operator-=(difference_type __n) noexcept
-40039:       { _M_current -= __n; return *this; }
-40039: 
-40039:       __normal_iterator
-40039:       operator-(difference_type __n) const noexcept
-40039:       { return __normal_iterator(_M_current - __n); }
-40039: 
-40039:       const _Iterator&
-40039:       base() const noexcept
-40039:       { return _M_current; }
-40039:     };
-40039: # 861 "/usr/include/c++/8/bits/stl_iterator.h" 3
-40039:   template<typename _IteratorL, typename _IteratorR, typename _Container>
-40039:     inline bool
-40039:     operator==(const __normal_iterator<_IteratorL, _Container>& __lhs,
-40039:         const __normal_iterator<_IteratorR, _Container>& __rhs)
-40039:     noexcept
-40039:     { return __lhs.base() == __rhs.base(); }
-40039: 
-40039:   template<typename _Iterator, typename _Container>
-40039:     inline bool
-40039:     operator==(const __normal_iterator<_Iterator, _Container>& __lhs,
-40039:         const __normal_iterator<_Iterator, _Container>& __rhs)
-40039:     noexcept
-40039:     { return __lhs.base() == __rhs.base(); }
-40039: 
-40039:   template<typename _IteratorL, typename _IteratorR, typename _Container>
-40039:     inline bool
-40039:     operator!=(const __normal_iterator<_IteratorL, _Container>& __lhs,
-40039:         const __normal_iterator<_IteratorR, _Container>& __rhs)
-40039:     noexcept
-40039:     { return __lhs.base() != __rhs.base(); }
-40039: 
-40039:   template<typename _Iterator, typename _Container>
-40039:     inline bool
-40039:     operator!=(const __normal_iterator<_Iterator, _Container>& __lhs,
-40039:         const __normal_iterator<_Iterator, _Container>& __rhs)
-40039:     noexcept
-40039:     { return __lhs.base() != __rhs.base(); }
-40039: 
-40039: 
-40039:   template<typename _IteratorL, typename _IteratorR, typename _Container>
-40039:     inline bool
-40039:     operator<(const __normal_iterator<_IteratorL, _Container>& __lhs,
-40039:        const __normal_iterator<_IteratorR, _Container>& __rhs)
-40039:     noexcept
-40039:     { return __lhs.base() < __rhs.base(); }
-40039: 
-40039:   template<typename _Iterator, typename _Container>
-40039:     inline bool
-40039:     operator<(const __normal_iterator<_Iterator, _Container>& __lhs,
-40039:        const __normal_iterator<_Iterator, _Container>& __rhs)
-40039:     noexcept
-40039:     { return __lhs.base() < __rhs.base(); }
-40039: 
-40039:   template<typename _IteratorL, typename _IteratorR, typename _Container>
-40039:     inline bool
-40039:     operator>(const __normal_iterator<_IteratorL, _Container>& __lhs,
-40039:        const __normal_iterator<_IteratorR, _Container>& __rhs)
-40039:     noexcept
-40039:     { return __lhs.base() > __rhs.base(); }
-40039: 
-40039:   template<typename _Iterator, typename _Container>
-40039:     inline bool
-40039:     operator>(const __normal_iterator<_Iterator, _Container>& __lhs,
-40039:        const __normal_iterator<_Iterator, _Container>& __rhs)
-40039:     noexcept
-40039:     { return __lhs.base() > __rhs.base(); }
-40039: 
-40039:   template<typename _IteratorL, typename _IteratorR, typename _Container>
-40039:     inline bool
-40039:     operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs,
-40039:         const __normal_iterator<_IteratorR, _Container>& __rhs)
-40039:     noexcept
-40039:     { return __lhs.base() <= __rhs.base(); }
-40039: 
-40039:   template<typename _Iterator, typename _Container>
-40039:     inline bool
-40039:     operator<=(const __normal_iterator<_Iterator, _Container>& __lhs,
-40039:         const __normal_iterator<_Iterator, _Container>& __rhs)
-40039:     noexcept
-40039:     { return __lhs.base() <= __rhs.base(); }
-40039: 
-40039:   template<typename _IteratorL, typename _IteratorR, typename _Container>
-40039:     inline bool
-40039:     operator>=(const __normal_iterator<_IteratorL, _Container>& __lhs,
-40039:         const __normal_iterator<_IteratorR, _Container>& __rhs)
-40039:     noexcept
-40039:     { return __lhs.base() >= __rhs.base(); }
-40039: 
-40039:   template<typename _Iterator, typename _Container>
-40039:     inline bool
-40039:     operator>=(const __normal_iterator<_Iterator, _Container>& __lhs,
-40039:         const __normal_iterator<_Iterator, _Container>& __rhs)
-40039:     noexcept
-40039:     { return __lhs.base() >= __rhs.base(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _IteratorL, typename _IteratorR, typename _Container>
-40039: 
-40039: 
-40039:     inline auto
-40039:     operator-(const __normal_iterator<_IteratorL, _Container>& __lhs,
-40039:        const __normal_iterator<_IteratorR, _Container>& __rhs) noexcept
-40039:     -> decltype(__lhs.base() - __rhs.base())
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     { return __lhs.base() - __rhs.base(); }
-40039: 
-40039:   template<typename _Iterator, typename _Container>
-40039:     inline typename __normal_iterator<_Iterator, _Container>::difference_type
-40039:     operator-(const __normal_iterator<_Iterator, _Container>& __lhs,
-40039:        const __normal_iterator<_Iterator, _Container>& __rhs)
-40039:     noexcept
-40039:     { return __lhs.base() - __rhs.base(); }
-40039: 
-40039:   template<typename _Iterator, typename _Container>
-40039:     inline __normal_iterator<_Iterator, _Container>
-40039:     operator+(typename __normal_iterator<_Iterator, _Container>::difference_type
-40039:        __n, const __normal_iterator<_Iterator, _Container>& __i)
-40039:     noexcept
-40039:     { return __normal_iterator<_Iterator, _Container>(__i.base() + __n); }
-40039: 
-40039: 
-40039: }
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   template<typename _Iterator, typename _Container>
-40039:     _Iterator
-40039:     __niter_base(__gnu_cxx::__normal_iterator<_Iterator, _Container> __it)
-40039:     { return __it.base(); }
-40039: # 1006 "/usr/include/c++/8/bits/stl_iterator.h" 3
-40039:   template<typename _Iterator>
-40039:     class move_iterator
-40039:     {
-40039:     protected:
-40039:       _Iterator _M_current;
-40039: 
-40039:       typedef iterator_traits<_Iterator> __traits_type;
-40039:       typedef typename __traits_type::reference __base_ref;
-40039: 
-40039:     public:
-40039:       typedef _Iterator iterator_type;
-40039:       typedef typename __traits_type::iterator_category iterator_category;
-40039:       typedef typename __traits_type::value_type value_type;
-40039:       typedef typename __traits_type::difference_type difference_type;
-40039: 
-40039:       typedef _Iterator pointer;
-40039: 
-40039: 
-40039:       typedef typename conditional<is_reference<__base_ref>::value,
-40039:     typename remove_reference<__base_ref>::type&&,
-40039:     __base_ref>::type reference;
-40039: 
-40039:      
-40039:       move_iterator()
-40039:       : _M_current() { }
-40039: 
-40039:       explicit
-40039:       move_iterator(iterator_type __i)
-40039:       : _M_current(__i) { }
-40039: 
-40039:       template<typename _Iter>
-40039: 
-40039:  move_iterator(const move_iterator<_Iter>& __i)
-40039:  : _M_current(__i.base()) { }
-40039: 
-40039:       iterator_type
-40039:       base() const
-40039:       { return _M_current; }
-40039: 
-40039:       reference
-40039:       operator*() const
-40039:       { return static_cast<reference>(*_M_current); }
-40039: 
-40039:       pointer
-40039:       operator->() const
-40039:       { return _M_current; }
-40039: 
-40039:       move_iterator&
-40039:       operator++()
-40039:       {
-40039:  ++_M_current;
-40039:  return *this;
-40039:       }
-40039: 
-40039:       move_iterator
-40039:       operator++(int)
-40039:       {
-40039:  move_iterator __tmp = *this;
-40039:  ++_M_current;
-40039:  return __tmp;
-40039:       }
-40039: 
-40039:       move_iterator&
-40039:       operator--()
-40039:       {
-40039:  --_M_current;
-40039:  return *this;
-40039:       }
-40039: 
-40039:       move_iterator
-40039:       operator--(int)
-40039:       {
-40039:  move_iterator __tmp = *this;
-40039:  --_M_current;
-40039:  return __tmp;
-40039:       }
-40039: 
-40039:       move_iterator
-40039:       operator+(difference_type __n) const
-40039:       { return move_iterator(_M_current + __n); }
-40039: 
-40039:       move_iterator&
-40039:       operator+=(difference_type __n)
-40039:       {
-40039:  _M_current += __n;
-40039:  return *this;
-40039:       }
-40039: 
-40039:       move_iterator
-40039:       operator-(difference_type __n) const
-40039:       { return move_iterator(_M_current - __n); }
-40039: 
-40039:       move_iterator&
-40039:       operator-=(difference_type __n)
-40039:       {
-40039:  _M_current -= __n;
-40039:  return *this;
-40039:       }
-40039: 
-40039:       reference
-40039:       operator[](difference_type __n) const
-40039:       { return std::move(_M_current[__n]); }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _IteratorL, typename _IteratorR>
-40039:     inline bool
-40039:     operator==(const move_iterator<_IteratorL>& __x,
-40039:         const move_iterator<_IteratorR>& __y)
-40039:     { return __x.base() == __y.base(); }
-40039: 
-40039:   template<typename _Iterator>
-40039:     inline bool
-40039:     operator==(const move_iterator<_Iterator>& __x,
-40039:         const move_iterator<_Iterator>& __y)
-40039:     { return __x.base() == __y.base(); }
-40039: 
-40039:   template<typename _IteratorL, typename _IteratorR>
-40039:     inline bool
-40039:     operator!=(const move_iterator<_IteratorL>& __x,
-40039:         const move_iterator<_IteratorR>& __y)
-40039:     { return !(__x == __y); }
-40039: 
-40039:   template<typename _Iterator>
-40039:     inline bool
-40039:     operator!=(const move_iterator<_Iterator>& __x,
-40039:         const move_iterator<_Iterator>& __y)
-40039:     { return !(__x == __y); }
-40039: 
-40039:   template<typename _IteratorL, typename _IteratorR>
-40039:     inline bool
-40039:     operator<(const move_iterator<_IteratorL>& __x,
-40039:        const move_iterator<_IteratorR>& __y)
-40039:     { return __x.base() < __y.base(); }
-40039: 
-40039:   template<typename _Iterator>
-40039:     inline bool
-40039:     operator<(const move_iterator<_Iterator>& __x,
-40039:        const move_iterator<_Iterator>& __y)
-40039:     { return __x.base() < __y.base(); }
-40039: 
-40039:   template<typename _IteratorL, typename _IteratorR>
-40039:     inline bool
-40039:     operator<=(const move_iterator<_IteratorL>& __x,
-40039:         const move_iterator<_IteratorR>& __y)
-40039:     { return !(__y < __x); }
-40039: 
-40039:   template<typename _Iterator>
-40039:     inline bool
-40039:     operator<=(const move_iterator<_Iterator>& __x,
-40039:         const move_iterator<_Iterator>& __y)
-40039:     { return !(__y < __x); }
-40039: 
-40039:   template<typename _IteratorL, typename _IteratorR>
-40039:     inline bool
-40039:     operator>(const move_iterator<_IteratorL>& __x,
-40039:        const move_iterator<_IteratorR>& __y)
-40039:     { return __y < __x; }
-40039: 
-40039:   template<typename _Iterator>
-40039:     inline bool
-40039:     operator>(const move_iterator<_Iterator>& __x,
-40039:        const move_iterator<_Iterator>& __y)
-40039:     { return __y < __x; }
-40039: 
-40039:   template<typename _IteratorL, typename _IteratorR>
-40039:     inline bool
-40039:     operator>=(const move_iterator<_IteratorL>& __x,
-40039:         const move_iterator<_IteratorR>& __y)
-40039:     { return !(__x < __y); }
-40039: 
-40039:   template<typename _Iterator>
-40039:     inline bool
-40039:     operator>=(const move_iterator<_Iterator>& __x,
-40039:         const move_iterator<_Iterator>& __y)
-40039:     { return !(__x < __y); }
-40039: 
-40039: 
-40039:   template<typename _IteratorL, typename _IteratorR>
-40039:     inline auto
-40039:     operator-(const move_iterator<_IteratorL>& __x,
-40039:        const move_iterator<_IteratorR>& __y)
-40039:     -> decltype(__x.base() - __y.base())
-40039:     { return __x.base() - __y.base(); }
-40039: 
-40039:   template<typename _Iterator>
-40039:     inline move_iterator<_Iterator>
-40039:     operator+(typename move_iterator<_Iterator>::difference_type __n,
-40039:        const move_iterator<_Iterator>& __x)
-40039:     { return __x + __n; }
-40039: 
-40039:   template<typename _Iterator>
-40039:     inline move_iterator<_Iterator>
-40039:     make_move_iterator(_Iterator __i)
-40039:     { return move_iterator<_Iterator>(__i); }
-40039: 
-40039:   template<typename _Iterator, typename _ReturnType
-40039:     = typename conditional<__move_if_noexcept_cond
-40039:       <typename iterator_traits<_Iterator>::value_type>::value,
-40039:                 _Iterator, move_iterator<_Iterator>>::type>
-40039:     inline _ReturnType
-40039:     __make_move_if_noexcept_iterator(_Iterator __i)
-40039:     { return _ReturnType(__i); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _ReturnType
-40039:     = typename conditional<__move_if_noexcept_cond<_Tp>::value,
-40039:       const _Tp*, move_iterator<_Tp*>>::type>
-40039:     inline _ReturnType
-40039:     __make_move_if_noexcept_iterator(_Tp* __i)
-40039:     { return _ReturnType(__i); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Iterator>
-40039:     auto
-40039:     __niter_base(move_iterator<_Iterator> __it)
-40039:     -> decltype(make_move_iterator(__niter_base(__it.base())))
-40039:     { return make_move_iterator(__niter_base(__it.base())); }
-40039: 
-40039:   template<typename _Iterator>
-40039:     struct __is_move_iterator<move_iterator<_Iterator> >
-40039:     {
-40039:       enum { __value = 1 };
-40039:       typedef __true_type __type;
-40039:     };
-40039: 
-40039:   template<typename _Iterator>
-40039:     auto
-40039:     __miter_base(move_iterator<_Iterator> __it)
-40039:     -> decltype(__miter_base(__it.base()))
-40039:     { return __miter_base(__it.base()); }
-40039: # 1271 "/usr/include/c++/8/bits/stl_iterator.h" 3
-40039: 
-40039: }
-40039: # 68 "/usr/include/c++/8/bits/stl_algobase.h" 2 3
-40039: 
-40039: # 1 "/usr/include/c++/8/debug/debug.h" 1 3
-40039: # 48 "/usr/include/c++/8/debug/debug.h" 3
-40039: namespace std
-40039: {
-40039:   namespace __debug { }
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace __gnu_debug
-40039: {
-40039:   using namespace std::__debug;
-40039: }
-40039: # 70 "/usr/include/c++/8/bits/stl_algobase.h" 2 3
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/predefined_ops.h" 1 3
-40039: # 33 "/usr/include/c++/8/bits/predefined_ops.h" 3
-40039: namespace __gnu_cxx
-40039: {
-40039: namespace __ops
-40039: {
-40039:   struct _Iter_less_iter
-40039:   {
-40039:     template<typename _Iterator1, typename _Iterator2>
-40039:       constexpr
-40039:       bool
-40039:       operator()(_Iterator1 __it1, _Iterator2 __it2) const
-40039:       { return *__it1 < *__it2; }
-40039:   };
-40039: 
-40039:   constexpr
-40039:   inline _Iter_less_iter
-40039:   __iter_less_iter()
-40039:   { return _Iter_less_iter(); }
-40039: 
-40039:   struct _Iter_less_val
-40039:   {
-40039: 
-40039:     constexpr _Iter_less_val() = default;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     explicit
-40039:     _Iter_less_val(_Iter_less_iter) { }
-40039: 
-40039:     template<typename _Iterator, typename _Value>
-40039:       bool
-40039:       operator()(_Iterator __it, _Value& __val) const
-40039:       { return *__it < __val; }
-40039:   };
-40039: 
-40039:   inline _Iter_less_val
-40039:   __iter_less_val()
-40039:   { return _Iter_less_val(); }
-40039: 
-40039:   inline _Iter_less_val
-40039:   __iter_comp_val(_Iter_less_iter)
-40039:   { return _Iter_less_val(); }
-40039: 
-40039:   struct _Val_less_iter
-40039:   {
-40039: 
-40039:     constexpr _Val_less_iter() = default;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     explicit
-40039:     _Val_less_iter(_Iter_less_iter) { }
-40039: 
-40039:     template<typename _Value, typename _Iterator>
-40039:       bool
-40039:       operator()(_Value& __val, _Iterator __it) const
-40039:       { return __val < *__it; }
-40039:   };
-40039: 
-40039:   inline _Val_less_iter
-40039:   __val_less_iter()
-40039:   { return _Val_less_iter(); }
-40039: 
-40039:   inline _Val_less_iter
-40039:   __val_comp_iter(_Iter_less_iter)
-40039:   { return _Val_less_iter(); }
-40039: 
-40039:   struct _Iter_equal_to_iter
-40039:   {
-40039:     template<typename _Iterator1, typename _Iterator2>
-40039:       bool
-40039:       operator()(_Iterator1 __it1, _Iterator2 __it2) const
-40039:       { return *__it1 == *__it2; }
-40039:   };
-40039: 
-40039:   inline _Iter_equal_to_iter
-40039:   __iter_equal_to_iter()
-40039:   { return _Iter_equal_to_iter(); }
-40039: 
-40039:   struct _Iter_equal_to_val
-40039:   {
-40039:     template<typename _Iterator, typename _Value>
-40039:       bool
-40039:       operator()(_Iterator __it, _Value& __val) const
-40039:       { return *__it == __val; }
-40039:   };
-40039: 
-40039:   inline _Iter_equal_to_val
-40039:   __iter_equal_to_val()
-40039:   { return _Iter_equal_to_val(); }
-40039: 
-40039:   inline _Iter_equal_to_val
-40039:   __iter_comp_val(_Iter_equal_to_iter)
-40039:   { return _Iter_equal_to_val(); }
-40039: 
-40039:   template<typename _Compare>
-40039:     struct _Iter_comp_iter
-40039:     {
-40039:       _Compare _M_comp;
-40039: 
-40039:       explicit constexpr
-40039:       _Iter_comp_iter(_Compare __comp)
-40039:  : _M_comp(std::move(__comp))
-40039:       { }
-40039: 
-40039:       template<typename _Iterator1, typename _Iterator2>
-40039:         constexpr
-40039:         bool
-40039:         operator()(_Iterator1 __it1, _Iterator2 __it2)
-40039:         { return bool(_M_comp(*__it1, *__it2)); }
-40039:     };
-40039: 
-40039:   template<typename _Compare>
-40039:     constexpr
-40039:     inline _Iter_comp_iter<_Compare>
-40039:     __iter_comp_iter(_Compare __comp)
-40039:     { return _Iter_comp_iter<_Compare>(std::move(__comp)); }
-40039: 
-40039:   template<typename _Compare>
-40039:     struct _Iter_comp_val
-40039:     {
-40039:       _Compare _M_comp;
-40039: 
-40039:       explicit
-40039:       _Iter_comp_val(_Compare __comp)
-40039:  : _M_comp(std::move(__comp))
-40039:       { }
-40039: 
-40039:       explicit
-40039:       _Iter_comp_val(const _Iter_comp_iter<_Compare>& __comp)
-40039:  : _M_comp(__comp._M_comp)
-40039:       { }
-40039: 
-40039: 
-40039:       explicit
-40039:       _Iter_comp_val(_Iter_comp_iter<_Compare>&& __comp)
-40039:  : _M_comp(std::move(__comp._M_comp))
-40039:       { }
-40039: 
-40039: 
-40039:       template<typename _Iterator, typename _Value>
-40039:  bool
-40039:  operator()(_Iterator __it, _Value& __val)
-40039:  { return bool(_M_comp(*__it, __val)); }
-40039:     };
-40039: 
-40039:   template<typename _Compare>
-40039:    inline _Iter_comp_val<_Compare>
-40039:     __iter_comp_val(_Compare __comp)
-40039:     { return _Iter_comp_val<_Compare>(std::move(__comp)); }
-40039: 
-40039:   template<typename _Compare>
-40039:     inline _Iter_comp_val<_Compare>
-40039:     __iter_comp_val(_Iter_comp_iter<_Compare> __comp)
-40039:     { return _Iter_comp_val<_Compare>(std::move(__comp)); }
-40039: 
-40039:   template<typename _Compare>
-40039:     struct _Val_comp_iter
-40039:     {
-40039:       _Compare _M_comp;
-40039: 
-40039:       explicit
-40039:       _Val_comp_iter(_Compare __comp)
-40039:  : _M_comp(std::move(__comp))
-40039:       { }
-40039: 
-40039:       explicit
-40039:       _Val_comp_iter(const _Iter_comp_iter<_Compare>& __comp)
-40039:  : _M_comp(__comp._M_comp)
-40039:       { }
-40039: 
-40039: 
-40039:       explicit
-40039:       _Val_comp_iter(_Iter_comp_iter<_Compare>&& __comp)
-40039:  : _M_comp(std::move(__comp._M_comp))
-40039:       { }
-40039: 
-40039: 
-40039:       template<typename _Value, typename _Iterator>
-40039:  bool
-40039:  operator()(_Value& __val, _Iterator __it)
-40039:  { return bool(_M_comp(__val, *__it)); }
-40039:     };
-40039: 
-40039:   template<typename _Compare>
-40039:     inline _Val_comp_iter<_Compare>
-40039:     __val_comp_iter(_Compare __comp)
-40039:     { return _Val_comp_iter<_Compare>(std::move(__comp)); }
-40039: 
-40039:   template<typename _Compare>
-40039:     inline _Val_comp_iter<_Compare>
-40039:     __val_comp_iter(_Iter_comp_iter<_Compare> __comp)
-40039:     { return _Val_comp_iter<_Compare>(std::move(__comp)); }
-40039: 
-40039:   template<typename _Value>
-40039:     struct _Iter_equals_val
-40039:     {
-40039:       _Value& _M_value;
-40039: 
-40039:       explicit
-40039:       _Iter_equals_val(_Value& __value)
-40039:  : _M_value(__value)
-40039:       { }
-40039: 
-40039:       template<typename _Iterator>
-40039:  bool
-40039:  operator()(_Iterator __it)
-40039:  { return *__it == _M_value; }
-40039:     };
-40039: 
-40039:   template<typename _Value>
-40039:     inline _Iter_equals_val<_Value>
-40039:     __iter_equals_val(_Value& __val)
-40039:     { return _Iter_equals_val<_Value>(__val); }
-40039: 
-40039:   template<typename _Iterator1>
-40039:     struct _Iter_equals_iter
-40039:     {
-40039:       _Iterator1 _M_it1;
-40039: 
-40039:       explicit
-40039:       _Iter_equals_iter(_Iterator1 __it1)
-40039:  : _M_it1(__it1)
-40039:       { }
-40039: 
-40039:       template<typename _Iterator2>
-40039:  bool
-40039:  operator()(_Iterator2 __it2)
-40039:  { return *__it2 == *_M_it1; }
-40039:     };
-40039: 
-40039:   template<typename _Iterator>
-40039:     inline _Iter_equals_iter<_Iterator>
-40039:     __iter_comp_iter(_Iter_equal_to_iter, _Iterator __it)
-40039:     { return _Iter_equals_iter<_Iterator>(__it); }
-40039: 
-40039:   template<typename _Predicate>
-40039:     struct _Iter_pred
-40039:     {
-40039:       _Predicate _M_pred;
-40039: 
-40039:       explicit
-40039:       _Iter_pred(_Predicate __pred)
-40039:  : _M_pred(std::move(__pred))
-40039:       { }
-40039: 
-40039:       template<typename _Iterator>
-40039:  bool
-40039:  operator()(_Iterator __it)
-40039:  { return bool(_M_pred(*__it)); }
-40039:     };
-40039: 
-40039:   template<typename _Predicate>
-40039:     inline _Iter_pred<_Predicate>
-40039:     __pred_iter(_Predicate __pred)
-40039:     { return _Iter_pred<_Predicate>(std::move(__pred)); }
-40039: 
-40039:   template<typename _Compare, typename _Value>
-40039:     struct _Iter_comp_to_val
-40039:     {
-40039:       _Compare _M_comp;
-40039:       _Value& _M_value;
-40039: 
-40039:       _Iter_comp_to_val(_Compare __comp, _Value& __value)
-40039:  : _M_comp(std::move(__comp)), _M_value(__value)
-40039:       { }
-40039: 
-40039:       template<typename _Iterator>
-40039:  bool
-40039:  operator()(_Iterator __it)
-40039:  { return bool(_M_comp(*__it, _M_value)); }
-40039:     };
-40039: 
-40039:   template<typename _Compare, typename _Value>
-40039:     _Iter_comp_to_val<_Compare, _Value>
-40039:     __iter_comp_val(_Compare __comp, _Value &__val)
-40039:     {
-40039:       return _Iter_comp_to_val<_Compare, _Value>(std::move(__comp), __val);
-40039:     }
-40039: 
-40039:   template<typename _Compare, typename _Iterator1>
-40039:     struct _Iter_comp_to_iter
-40039:     {
-40039:       _Compare _M_comp;
-40039:       _Iterator1 _M_it1;
-40039: 
-40039:       _Iter_comp_to_iter(_Compare __comp, _Iterator1 __it1)
-40039:  : _M_comp(std::move(__comp)), _M_it1(__it1)
-40039:       { }
-40039: 
-40039:       template<typename _Iterator2>
-40039:  bool
-40039:  operator()(_Iterator2 __it2)
-40039:  { return bool(_M_comp(*__it2, *_M_it1)); }
-40039:     };
-40039: 
-40039:   template<typename _Compare, typename _Iterator>
-40039:     inline _Iter_comp_to_iter<_Compare, _Iterator>
-40039:     __iter_comp_iter(_Iter_comp_iter<_Compare> __comp, _Iterator __it)
-40039:     {
-40039:       return _Iter_comp_to_iter<_Compare, _Iterator>(
-40039:    std::move(__comp._M_comp), __it);
-40039:     }
-40039: 
-40039:   template<typename _Predicate>
-40039:     struct _Iter_negate
-40039:     {
-40039:       _Predicate _M_pred;
-40039: 
-40039:       explicit
-40039:       _Iter_negate(_Predicate __pred)
-40039:  : _M_pred(std::move(__pred))
-40039:       { }
-40039: 
-40039:       template<typename _Iterator>
-40039:  bool
-40039:  operator()(_Iterator __it)
-40039:  { return !bool(_M_pred(*__it)); }
-40039:     };
-40039: 
-40039:   template<typename _Predicate>
-40039:     inline _Iter_negate<_Predicate>
-40039:     __negate(_Iter_pred<_Predicate> __pred)
-40039:     { return _Iter_negate<_Predicate>(std::move(__pred._M_pred)); }
-40039: 
-40039: }
-40039: }
-40039: # 72 "/usr/include/c++/8/bits/stl_algobase.h" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 118 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:   template<typename _ForwardIterator1, typename _ForwardIterator2>
-40039:     inline void
-40039:     iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: # 148 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:       swap(*__a, *__b);
-40039: 
-40039:     }
-40039: # 164 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:   template<typename _ForwardIterator1, typename _ForwardIterator2>
-40039:     _ForwardIterator2
-40039:     swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
-40039:   _ForwardIterator2 __first2)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       for (; __first1 != __last1; ++__first1, (void)++__first2)
-40039:  std::iter_swap(__first1, __first2);
-40039:       return __first2;
-40039:     }
-40039: # 192 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:   template<typename _Tp>
-40039:     constexpr
-40039:     inline const _Tp&
-40039:     min(const _Tp& __a, const _Tp& __b)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:       if (__b < __a)
-40039:  return __b;
-40039:       return __a;
-40039:     }
-40039: # 216 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:   template<typename _Tp>
-40039:     constexpr
-40039:     inline const _Tp&
-40039:     max(const _Tp& __a, const _Tp& __b)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:       if (__a < __b)
-40039:  return __b;
-40039:       return __a;
-40039:     }
-40039: # 240 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:   template<typename _Tp, typename _Compare>
-40039:     constexpr
-40039:     inline const _Tp&
-40039:     min(const _Tp& __a, const _Tp& __b, _Compare __comp)
-40039:     {
-40039: 
-40039:       if (__comp(__b, __a))
-40039:  return __b;
-40039:       return __a;
-40039:     }
-40039: # 262 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:   template<typename _Tp, typename _Compare>
-40039:     constexpr
-40039:     inline const _Tp&
-40039:     max(const _Tp& __a, const _Tp& __b, _Compare __comp)
-40039:     {
-40039: 
-40039:       if (__comp(__a, __b))
-40039:  return __b;
-40039:       return __a;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Iterator>
-40039:     inline _Iterator
-40039:     __niter_base(_Iterator __it)
-40039:     { return __it; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<bool, bool, typename>
-40039:     struct __copy_move
-40039:     {
-40039:       template<typename _II, typename _OI>
-40039:  static _OI
-40039:  __copy_m(_II __first, _II __last, _OI __result)
-40039:  {
-40039:    for (; __first != __last; ++__result, (void)++__first)
-40039:      *__result = *__first;
-40039:    return __result;
-40039:  }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Category>
-40039:     struct __copy_move<true, false, _Category>
-40039:     {
-40039:       template<typename _II, typename _OI>
-40039:  static _OI
-40039:  __copy_m(_II __first, _II __last, _OI __result)
-40039:  {
-40039:    for (; __first != __last; ++__result, (void)++__first)
-40039:      *__result = std::move(*__first);
-40039:    return __result;
-40039:  }
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct __copy_move<false, false, random_access_iterator_tag>
-40039:     {
-40039:       template<typename _II, typename _OI>
-40039:  static _OI
-40039:  __copy_m(_II __first, _II __last, _OI __result)
-40039:  {
-40039:    typedef typename iterator_traits<_II>::difference_type _Distance;
-40039:    for(_Distance __n = __last - __first; __n > 0; --__n)
-40039:      {
-40039:        *__result = *__first;
-40039:        ++__first;
-40039:        ++__result;
-40039:      }
-40039:    return __result;
-40039:  }
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct __copy_move<true, false, random_access_iterator_tag>
-40039:     {
-40039:       template<typename _II, typename _OI>
-40039:  static _OI
-40039:  __copy_m(_II __first, _II __last, _OI __result)
-40039:  {
-40039:    typedef typename iterator_traits<_II>::difference_type _Distance;
-40039:    for(_Distance __n = __last - __first; __n > 0; --__n)
-40039:      {
-40039:        *__result = std::move(*__first);
-40039:        ++__first;
-40039:        ++__result;
-40039:      }
-40039:    return __result;
-40039:  }
-40039:     };
-40039: 
-40039: 
-40039:   template<bool _IsMove>
-40039:     struct __copy_move<_IsMove, true, random_access_iterator_tag>
-40039:     {
-40039:       template<typename _Tp>
-40039:  static _Tp*
-40039:  __copy_m(const _Tp* __first, const _Tp* __last, _Tp* __result)
-40039:  {
-40039: 
-40039:    using __assignable = conditional<_IsMove,
-40039:         is_move_assignable<_Tp>,
-40039:         is_copy_assignable<_Tp>>;
-40039: 
-40039:    static_assert( __assignable::type::value, "type is not assignable" );
-40039: 
-40039:    const ptrdiff_t _Num = __last - __first;
-40039:    if (_Num)
-40039:      __builtin_memmove(__result, __first, sizeof(_Tp) * _Num);
-40039:    return __result + _Num;
-40039:  }
-40039:     };
-40039: 
-40039:   template<bool _IsMove, typename _II, typename _OI>
-40039:     inline _OI
-40039:     __copy_move_a(_II __first, _II __last, _OI __result)
-40039:     {
-40039:       typedef typename iterator_traits<_II>::value_type _ValueTypeI;
-40039:       typedef typename iterator_traits<_OI>::value_type _ValueTypeO;
-40039:       typedef typename iterator_traits<_II>::iterator_category _Category;
-40039:       const bool __simple = (__is_trivial(_ValueTypeI)
-40039:         && __is_pointer<_II>::__value
-40039:         && __is_pointer<_OI>::__value
-40039:         && __are_same<_ValueTypeI, _ValueTypeO>::__value);
-40039: 
-40039:       return std::__copy_move<_IsMove, __simple,
-40039:          _Category>::__copy_m(__first, __last, __result);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     struct char_traits;
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     class istreambuf_iterator;
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     class ostreambuf_iterator;
-40039: 
-40039:   template<bool _IsMove, typename _CharT>
-40039:     typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
-40039:       ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type
-40039:     __copy_move_a2(_CharT*, _CharT*,
-40039:      ostreambuf_iterator<_CharT, char_traits<_CharT> >);
-40039: 
-40039:   template<bool _IsMove, typename _CharT>
-40039:     typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
-40039:       ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type
-40039:     __copy_move_a2(const _CharT*, const _CharT*,
-40039:      ostreambuf_iterator<_CharT, char_traits<_CharT> >);
-40039: 
-40039:   template<bool _IsMove, typename _CharT>
-40039:     typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
-40039:         _CharT*>::__type
-40039:     __copy_move_a2(istreambuf_iterator<_CharT, char_traits<_CharT> >,
-40039:      istreambuf_iterator<_CharT, char_traits<_CharT> >, _CharT*);
-40039: 
-40039:   template<bool _IsMove, typename _II, typename _OI>
-40039:     inline _OI
-40039:     __copy_move_a2(_II __first, _II __last, _OI __result)
-40039:     {
-40039:       return _OI(std::__copy_move_a<_IsMove>(std::__niter_base(__first),
-40039:           std::__niter_base(__last),
-40039:           std::__niter_base(__result)));
-40039:     }
-40039: # 444 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:   template<typename _II, typename _OI>
-40039:     inline _OI
-40039:     copy(_II __first, _II __last, _OI __result)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       return (std::__copy_move_a2<__is_move_iterator<_II>::__value>
-40039:        (std::__miter_base(__first), std::__miter_base(__last),
-40039:         __result));
-40039:     }
-40039: # 477 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:   template<typename _II, typename _OI>
-40039:     inline _OI
-40039:     move(_II __first, _II __last, _OI __result)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__copy_move_a2<true>(std::__miter_base(__first),
-40039:            std::__miter_base(__last), __result);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<bool, bool, typename>
-40039:     struct __copy_move_backward
-40039:     {
-40039:       template<typename _BI1, typename _BI2>
-40039:  static _BI2
-40039:  __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result)
-40039:  {
-40039:    while (__first != __last)
-40039:      *--__result = *--__last;
-40039:    return __result;
-40039:  }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Category>
-40039:     struct __copy_move_backward<true, false, _Category>
-40039:     {
-40039:       template<typename _BI1, typename _BI2>
-40039:  static _BI2
-40039:  __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result)
-40039:  {
-40039:    while (__first != __last)
-40039:      *--__result = std::move(*--__last);
-40039:    return __result;
-40039:  }
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct __copy_move_backward<false, false, random_access_iterator_tag>
-40039:     {
-40039:       template<typename _BI1, typename _BI2>
-40039:  static _BI2
-40039:  __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result)
-40039:  {
-40039:    typename iterator_traits<_BI1>::difference_type __n;
-40039:    for (__n = __last - __first; __n > 0; --__n)
-40039:      *--__result = *--__last;
-40039:    return __result;
-40039:  }
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct __copy_move_backward<true, false, random_access_iterator_tag>
-40039:     {
-40039:       template<typename _BI1, typename _BI2>
-40039:  static _BI2
-40039:  __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result)
-40039:  {
-40039:    typename iterator_traits<_BI1>::difference_type __n;
-40039:    for (__n = __last - __first; __n > 0; --__n)
-40039:      *--__result = std::move(*--__last);
-40039:    return __result;
-40039:  }
-40039:     };
-40039: 
-40039: 
-40039:   template<bool _IsMove>
-40039:     struct __copy_move_backward<_IsMove, true, random_access_iterator_tag>
-40039:     {
-40039:       template<typename _Tp>
-40039:  static _Tp*
-40039:  __copy_move_b(const _Tp* __first, const _Tp* __last, _Tp* __result)
-40039:  {
-40039: 
-40039:    using __assignable = conditional<_IsMove,
-40039:         is_move_assignable<_Tp>,
-40039:         is_copy_assignable<_Tp>>;
-40039: 
-40039:    static_assert( __assignable::type::value, "type is not assignable" );
-40039: 
-40039:    const ptrdiff_t _Num = __last - __first;
-40039:    if (_Num)
-40039:      __builtin_memmove(__result - _Num, __first, sizeof(_Tp) * _Num);
-40039:    return __result - _Num;
-40039:  }
-40039:     };
-40039: 
-40039:   template<bool _IsMove, typename _BI1, typename _BI2>
-40039:     inline _BI2
-40039:     __copy_move_backward_a(_BI1 __first, _BI1 __last, _BI2 __result)
-40039:     {
-40039:       typedef typename iterator_traits<_BI1>::value_type _ValueType1;
-40039:       typedef typename iterator_traits<_BI2>::value_type _ValueType2;
-40039:       typedef typename iterator_traits<_BI1>::iterator_category _Category;
-40039:       const bool __simple = (__is_trivial(_ValueType1)
-40039:         && __is_pointer<_BI1>::__value
-40039:         && __is_pointer<_BI2>::__value
-40039:         && __are_same<_ValueType1, _ValueType2>::__value);
-40039: 
-40039:       return std::__copy_move_backward<_IsMove, __simple,
-40039:            _Category>::__copy_move_b(__first,
-40039:          __last,
-40039:          __result);
-40039:     }
-40039: 
-40039:   template<bool _IsMove, typename _BI1, typename _BI2>
-40039:     inline _BI2
-40039:     __copy_move_backward_a2(_BI1 __first, _BI1 __last, _BI2 __result)
-40039:     {
-40039:       return _BI2(std::__copy_move_backward_a<_IsMove>
-40039:     (std::__niter_base(__first), std::__niter_base(__last),
-40039:      std::__niter_base(__result)));
-40039:     }
-40039: # 620 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:   template<typename _BI1, typename _BI2>
-40039:     inline _BI2
-40039:     copy_backward(_BI1 __first, _BI1 __last, _BI2 __result)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039: 
-40039:       return (std::__copy_move_backward_a2<__is_move_iterator<_BI1>::__value>
-40039:        (std::__miter_base(__first), std::__miter_base(__last),
-40039:         __result));
-40039:     }
-40039: # 656 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:   template<typename _BI1, typename _BI2>
-40039:     inline _BI2
-40039:     move_backward(_BI1 __first, _BI1 __last, _BI2 __result)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__copy_move_backward_a2<true>(std::__miter_base(__first),
-40039:       std::__miter_base(__last),
-40039:       __result);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _ForwardIterator, typename _Tp>
-40039:     inline typename
-40039:     __gnu_cxx::__enable_if<!__is_scalar<_Tp>::__value, void>::__type
-40039:     __fill_a(_ForwardIterator __first, _ForwardIterator __last,
-40039:        const _Tp& __value)
-40039:     {
-40039:       for (; __first != __last; ++__first)
-40039:  *__first = __value;
-40039:     }
-40039: 
-40039:   template<typename _ForwardIterator, typename _Tp>
-40039:     inline typename
-40039:     __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, void>::__type
-40039:     __fill_a(_ForwardIterator __first, _ForwardIterator __last,
-40039:       const _Tp& __value)
-40039:     {
-40039:       const _Tp __tmp = __value;
-40039:       for (; __first != __last; ++__first)
-40039:  *__first = __tmp;
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline typename
-40039:     __gnu_cxx::__enable_if<__is_byte<_Tp>::__value, void>::__type
-40039:     __fill_a(_Tp* __first, _Tp* __last, const _Tp& __c)
-40039:     {
-40039:       const _Tp __tmp = __c;
-40039:       if (const size_t __len = __last - __first)
-40039:  __builtin_memset(__first, static_cast<unsigned char>(__tmp), __len);
-40039:     }
-40039: # 722 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:   template<typename _ForwardIterator, typename _Tp>
-40039:     inline void
-40039:     fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       std::__fill_a(std::__niter_base(__first), std::__niter_base(__last),
-40039:       __value);
-40039:     }
-40039: 
-40039:   template<typename _OutputIterator, typename _Size, typename _Tp>
-40039:     inline typename
-40039:     __gnu_cxx::__enable_if<!__is_scalar<_Tp>::__value, _OutputIterator>::__type
-40039:     __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value)
-40039:     {
-40039:       for (__decltype(__n + 0) __niter = __n;
-40039:     __niter > 0; --__niter, (void) ++__first)
-40039:  *__first = __value;
-40039:       return __first;
-40039:     }
-40039: 
-40039:   template<typename _OutputIterator, typename _Size, typename _Tp>
-40039:     inline typename
-40039:     __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, _OutputIterator>::__type
-40039:     __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value)
-40039:     {
-40039:       const _Tp __tmp = __value;
-40039:       for (__decltype(__n + 0) __niter = __n;
-40039:     __niter > 0; --__niter, (void) ++__first)
-40039:  *__first = __tmp;
-40039:       return __first;
-40039:     }
-40039: 
-40039:   template<typename _Size, typename _Tp>
-40039:     inline typename
-40039:     __gnu_cxx::__enable_if<__is_byte<_Tp>::__value, _Tp*>::__type
-40039:     __fill_n_a(_Tp* __first, _Size __n, const _Tp& __c)
-40039:     {
-40039:       std::__fill_a(__first, __first + __n, __c);
-40039:       return __first + __n;
-40039:     }
-40039: # 782 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:   template<typename _OI, typename _Size, typename _Tp>
-40039:     inline _OI
-40039:     fill_n(_OI __first, _Size __n, const _Tp& __value)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:       return _OI(std::__fill_n_a(std::__niter_base(__first), __n, __value));
-40039:     }
-40039: 
-40039:   template<bool _BoolType>
-40039:     struct __equal
-40039:     {
-40039:       template<typename _II1, typename _II2>
-40039:  static bool
-40039:  equal(_II1 __first1, _II1 __last1, _II2 __first2)
-40039:  {
-40039:    for (; __first1 != __last1; ++__first1, (void) ++__first2)
-40039:      if (!(*__first1 == *__first2))
-40039:        return false;
-40039:    return true;
-40039:  }
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __equal<true>
-40039:     {
-40039:       template<typename _Tp>
-40039:  static bool
-40039:  equal(const _Tp* __first1, const _Tp* __last1, const _Tp* __first2)
-40039:  {
-40039:    if (const size_t __len = (__last1 - __first1))
-40039:      return !__builtin_memcmp(__first1, __first2, sizeof(_Tp) * __len);
-40039:    return true;
-40039:  }
-40039:     };
-40039: 
-40039:   template<typename _II1, typename _II2>
-40039:     inline bool
-40039:     __equal_aux(_II1 __first1, _II1 __last1, _II2 __first2)
-40039:     {
-40039:       typedef typename iterator_traits<_II1>::value_type _ValueType1;
-40039:       typedef typename iterator_traits<_II2>::value_type _ValueType2;
-40039:       const bool __simple = ((__is_integer<_ValueType1>::__value
-40039:          || __is_pointer<_ValueType1>::__value)
-40039:         && __is_pointer<_II1>::__value
-40039:         && __is_pointer<_II2>::__value
-40039:         && __are_same<_ValueType1, _ValueType2>::__value);
-40039: 
-40039:       return std::__equal<__simple>::equal(__first1, __last1, __first2);
-40039:     }
-40039: 
-40039:   template<typename, typename>
-40039:     struct __lc_rai
-40039:     {
-40039:       template<typename _II1, typename _II2>
-40039:  static _II1
-40039:  __newlast1(_II1, _II1 __last1, _II2, _II2)
-40039:  { return __last1; }
-40039: 
-40039:       template<typename _II>
-40039:  static bool
-40039:  __cnd2(_II __first, _II __last)
-40039:  { return __first != __last; }
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __lc_rai<random_access_iterator_tag, random_access_iterator_tag>
-40039:     {
-40039:       template<typename _RAI1, typename _RAI2>
-40039:  static _RAI1
-40039:  __newlast1(_RAI1 __first1, _RAI1 __last1,
-40039:      _RAI2 __first2, _RAI2 __last2)
-40039:  {
-40039:    const typename iterator_traits<_RAI1>::difference_type
-40039:      __diff1 = __last1 - __first1;
-40039:    const typename iterator_traits<_RAI2>::difference_type
-40039:      __diff2 = __last2 - __first2;
-40039:    return __diff2 < __diff1 ? __first1 + __diff2 : __last1;
-40039:  }
-40039: 
-40039:       template<typename _RAI>
-40039:  static bool
-40039:  __cnd2(_RAI, _RAI)
-40039:  { return true; }
-40039:     };
-40039: 
-40039:   template<typename _II1, typename _II2, typename _Compare>
-40039:     bool
-40039:     __lexicographical_compare_impl(_II1 __first1, _II1 __last1,
-40039:        _II2 __first2, _II2 __last2,
-40039:        _Compare __comp)
-40039:     {
-40039:       typedef typename iterator_traits<_II1>::iterator_category _Category1;
-40039:       typedef typename iterator_traits<_II2>::iterator_category _Category2;
-40039:       typedef std::__lc_rai<_Category1, _Category2> __rai_type;
-40039: 
-40039:       __last1 = __rai_type::__newlast1(__first1, __last1, __first2, __last2);
-40039:       for (; __first1 != __last1 && __rai_type::__cnd2(__first2, __last2);
-40039:     ++__first1, (void)++__first2)
-40039:  {
-40039:    if (__comp(__first1, __first2))
-40039:      return true;
-40039:    if (__comp(__first2, __first1))
-40039:      return false;
-40039:  }
-40039:       return __first1 == __last1 && __first2 != __last2;
-40039:     }
-40039: 
-40039:   template<bool _BoolType>
-40039:     struct __lexicographical_compare
-40039:     {
-40039:       template<typename _II1, typename _II2>
-40039:  static bool __lc(_II1, _II1, _II2, _II2);
-40039:     };
-40039: 
-40039:   template<bool _BoolType>
-40039:     template<typename _II1, typename _II2>
-40039:       bool
-40039:       __lexicographical_compare<_BoolType>::
-40039:       __lc(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2)
-40039:       {
-40039:  return std::__lexicographical_compare_impl(__first1, __last1,
-40039:          __first2, __last2,
-40039:      __gnu_cxx::__ops::__iter_less_iter());
-40039:       }
-40039: 
-40039:   template<>
-40039:     struct __lexicographical_compare<true>
-40039:     {
-40039:       template<typename _Tp, typename _Up>
-40039:  static bool
-40039:  __lc(const _Tp* __first1, const _Tp* __last1,
-40039:       const _Up* __first2, const _Up* __last2)
-40039:  {
-40039:    const size_t __len1 = __last1 - __first1;
-40039:    const size_t __len2 = __last2 - __first2;
-40039:    if (const size_t __len = std::min(__len1, __len2))
-40039:      if (int __result = __builtin_memcmp(__first1, __first2, __len))
-40039:        return __result < 0;
-40039:    return __len1 < __len2;
-40039:  }
-40039:     };
-40039: 
-40039:   template<typename _II1, typename _II2>
-40039:     inline bool
-40039:     __lexicographical_compare_aux(_II1 __first1, _II1 __last1,
-40039:       _II2 __first2, _II2 __last2)
-40039:     {
-40039:       typedef typename iterator_traits<_II1>::value_type _ValueType1;
-40039:       typedef typename iterator_traits<_II2>::value_type _ValueType2;
-40039:       const bool __simple =
-40039:  (__is_byte<_ValueType1>::__value && __is_byte<_ValueType2>::__value
-40039:   && !__gnu_cxx::__numeric_traits<_ValueType1>::__is_signed
-40039:   && !__gnu_cxx::__numeric_traits<_ValueType2>::__is_signed
-40039:   && __is_pointer<_II1>::__value
-40039:   && __is_pointer<_II2>::__value);
-40039: 
-40039:       return std::__lexicographical_compare<__simple>::__lc(__first1, __last1,
-40039:            __first2, __last2);
-40039:     }
-40039: 
-40039:   template<typename _ForwardIterator, typename _Tp, typename _Compare>
-40039:     _ForwardIterator
-40039:     __lower_bound(_ForwardIterator __first, _ForwardIterator __last,
-40039:     const _Tp& __val, _Compare __comp)
-40039:     {
-40039:       typedef typename iterator_traits<_ForwardIterator>::difference_type
-40039:  _DistanceType;
-40039: 
-40039:       _DistanceType __len = std::distance(__first, __last);
-40039: 
-40039:       while (__len > 0)
-40039:  {
-40039:    _DistanceType __half = __len >> 1;
-40039:    _ForwardIterator __middle = __first;
-40039:    std::advance(__middle, __half);
-40039:    if (__comp(__middle, __val))
-40039:      {
-40039:        __first = __middle;
-40039:        ++__first;
-40039:        __len = __len - __half - 1;
-40039:      }
-40039:    else
-40039:      __len = __half;
-40039:  }
-40039:       return __first;
-40039:     }
-40039: # 982 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:   template<typename _ForwardIterator, typename _Tp>
-40039:     inline _ForwardIterator
-40039:     lower_bound(_ForwardIterator __first, _ForwardIterator __last,
-40039:   const _Tp& __val)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__lower_bound(__first, __last, __val,
-40039:     __gnu_cxx::__ops::__iter_less_val());
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   inline constexpr int
-40039:   __lg(int __n)
-40039:   { return sizeof(int) * 8 - 1 - __builtin_clz(__n); }
-40039: 
-40039:   inline constexpr unsigned
-40039:   __lg(unsigned __n)
-40039:   { return sizeof(int) * 8 - 1 - __builtin_clz(__n); }
-40039: 
-40039:   inline constexpr long
-40039:   __lg(long __n)
-40039:   { return sizeof(long) * 8 - 1 - __builtin_clzl(__n); }
-40039: 
-40039:   inline constexpr unsigned long
-40039:   __lg(unsigned long __n)
-40039:   { return sizeof(long) * 8 - 1 - __builtin_clzl(__n); }
-40039: 
-40039:   inline constexpr long long
-40039:   __lg(long long __n)
-40039:   { return sizeof(long long) * 8 - 1 - __builtin_clzll(__n); }
-40039: 
-40039:   inline constexpr unsigned long long
-40039:   __lg(unsigned long long __n)
-40039:   { return sizeof(long long) * 8 - 1 - __builtin_clzll(__n); }
-40039: 
-40039: 
-40039: # 1037 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:   template<typename _II1, typename _II2>
-40039:     inline bool
-40039:     equal(_II1 __first1, _II1 __last1, _II2 __first2)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__equal_aux(std::__niter_base(__first1),
-40039:          std::__niter_base(__last1),
-40039:          std::__niter_base(__first2));
-40039:     }
-40039: # 1069 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:   template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
-40039:     inline bool
-40039:     equal(_IIter1 __first1, _IIter1 __last1,
-40039:    _IIter2 __first2, _BinaryPredicate __binary_pred)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:       ;
-40039: 
-40039:       for (; __first1 != __last1; ++__first1, (void)++__first2)
-40039:  if (!bool(__binary_pred(*__first1, *__first2)))
-40039:    return false;
-40039:       return true;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _II1, typename _II2>
-40039:     inline bool
-40039:     __equal4(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2)
-40039:     {
-40039:       using _RATag = random_access_iterator_tag;
-40039:       using _Cat1 = typename iterator_traits<_II1>::iterator_category;
-40039:       using _Cat2 = typename iterator_traits<_II2>::iterator_category;
-40039:       using _RAIters = __and_<is_same<_Cat1, _RATag>, is_same<_Cat2, _RATag>>;
-40039:       if (_RAIters())
-40039:  {
-40039:    auto __d1 = std::distance(__first1, __last1);
-40039:    auto __d2 = std::distance(__first2, __last2);
-40039:    if (__d1 != __d2)
-40039:      return false;
-40039:    return std::equal(__first1, __last1, __first2);
-40039:  }
-40039: 
-40039:       for (; __first1 != __last1 && __first2 != __last2;
-40039:    ++__first1, (void)++__first2)
-40039:  if (!(*__first1 == *__first2))
-40039:    return false;
-40039:       return __first1 == __last1 && __first2 == __last2;
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _II1, typename _II2, typename _BinaryPredicate>
-40039:     inline bool
-40039:     __equal4(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2,
-40039:       _BinaryPredicate __binary_pred)
-40039:     {
-40039:       using _RATag = random_access_iterator_tag;
-40039:       using _Cat1 = typename iterator_traits<_II1>::iterator_category;
-40039:       using _Cat2 = typename iterator_traits<_II2>::iterator_category;
-40039:       using _RAIters = __and_<is_same<_Cat1, _RATag>, is_same<_Cat2, _RATag>>;
-40039:       if (_RAIters())
-40039:  {
-40039:    auto __d1 = std::distance(__first1, __last1);
-40039:    auto __d2 = std::distance(__first2, __last2);
-40039:    if (__d1 != __d2)
-40039:      return false;
-40039:    return std::equal(__first1, __last1, __first2,
-40039:            __binary_pred);
-40039:  }
-40039: 
-40039:       for (; __first1 != __last1 && __first2 != __last2;
-40039:    ++__first1, (void)++__first2)
-40039:  if (!bool(__binary_pred(*__first1, *__first2)))
-40039:    return false;
-40039:       return __first1 == __last1 && __first2 == __last2;
-40039:     }
-40039: # 1156 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:   template<typename _II1, typename _II2>
-40039:     inline bool
-40039:     equal(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__equal4(__first1, __last1, __first2, __last2);
-40039:     }
-40039: # 1188 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:   template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
-40039:     inline bool
-40039:     equal(_IIter1 __first1, _IIter1 __last1,
-40039:    _IIter2 __first2, _IIter2 __last2, _BinaryPredicate __binary_pred)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__equal4(__first1, __last1, __first2, __last2,
-40039:           __binary_pred);
-40039:     }
-40039: # 1219 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:   template<typename _II1, typename _II2>
-40039:     inline bool
-40039:     lexicographical_compare(_II1 __first1, _II1 __last1,
-40039:        _II2 __first2, _II2 __last2)
-40039:     {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:      
-40039:      
-40039:      
-40039:      
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__lexicographical_compare_aux(std::__niter_base(__first1),
-40039:       std::__niter_base(__last1),
-40039:       std::__niter_base(__first2),
-40039:       std::__niter_base(__last2));
-40039:     }
-40039: # 1255 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:   template<typename _II1, typename _II2, typename _Compare>
-40039:     inline bool
-40039:     lexicographical_compare(_II1 __first1, _II1 __last1,
-40039:        _II2 __first2, _II2 __last2, _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__lexicographical_compare_impl
-40039:  (__first1, __last1, __first2, __last2,
-40039:   __gnu_cxx::__ops::__iter_comp_iter(__comp));
-40039:     }
-40039: 
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _BinaryPredicate>
-40039:     pair<_InputIterator1, _InputIterator2>
-40039:     __mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:         _InputIterator2 __first2, _BinaryPredicate __binary_pred)
-40039:     {
-40039:       while (__first1 != __last1 && __binary_pred(__first1, __first2))
-40039:  {
-40039:    ++__first1;
-40039:    ++__first2;
-40039:  }
-40039:       return pair<_InputIterator1, _InputIterator2>(__first1, __first2);
-40039:     }
-40039: # 1298 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:   template<typename _InputIterator1, typename _InputIterator2>
-40039:     inline pair<_InputIterator1, _InputIterator2>
-40039:     mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:       _InputIterator2 __first2)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__mismatch(__first1, __last1, __first2,
-40039:         __gnu_cxx::__ops::__iter_equal_to_iter());
-40039:     }
-40039: # 1331 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _BinaryPredicate>
-40039:     inline pair<_InputIterator1, _InputIterator2>
-40039:     mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:       _InputIterator2 __first2, _BinaryPredicate __binary_pred)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:       ;
-40039: 
-40039:       return std::__mismatch(__first1, __last1, __first2,
-40039:  __gnu_cxx::__ops::__iter_comp_iter(__binary_pred));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _BinaryPredicate>
-40039:     pair<_InputIterator1, _InputIterator2>
-40039:     __mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:         _InputIterator2 __first2, _InputIterator2 __last2,
-40039:         _BinaryPredicate __binary_pred)
-40039:     {
-40039:       while (__first1 != __last1 && __first2 != __last2
-40039:       && __binary_pred(__first1, __first2))
-40039:  {
-40039:    ++__first1;
-40039:    ++__first2;
-40039:  }
-40039:       return pair<_InputIterator1, _InputIterator2>(__first1, __first2);
-40039:     }
-40039: # 1378 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:   template<typename _InputIterator1, typename _InputIterator2>
-40039:     inline pair<_InputIterator1, _InputIterator2>
-40039:     mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:       _InputIterator2 __first2, _InputIterator2 __last2)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__mismatch(__first1, __last1, __first2, __last2,
-40039:         __gnu_cxx::__ops::__iter_equal_to_iter());
-40039:     }
-40039: # 1413 "/usr/include/c++/8/bits/stl_algobase.h" 3
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _BinaryPredicate>
-40039:     inline pair<_InputIterator1, _InputIterator2>
-40039:     mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:       _InputIterator2 __first2, _InputIterator2 __last2,
-40039:       _BinaryPredicate __binary_pred)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__mismatch(__first1, __last1, __first2, __last2,
-40039:         __gnu_cxx::__ops::__iter_comp_iter(__binary_pred));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 62 "/usr/include/c++/8/algorithm" 2 3
-40039: # 1 "/usr/include/c++/8/bits/stl_algo.h" 1 3
-40039: # 59 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039: # 1 "/usr/include/c++/8/cstdlib" 1 3
-40039: # 39 "/usr/include/c++/8/cstdlib" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/cstdlib" 3
-40039: # 75 "/usr/include/c++/8/cstdlib" 3
-40039: # 1 "/usr/include/stdlib.h" 1 3 4
-40039: # 25 "/usr/include/stdlib.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 1 3 4
-40039: # 26 "/usr/include/stdlib.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
-40039: # 32 "/usr/include/stdlib.h" 2 3 4
-40039: 
-40039: extern "C" {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/waitflags.h" 1 3 4
-40039: # 52 "/usr/include/x86_64-linux-gnu/bits/waitflags.h" 3 4
-40039: typedef enum
-40039: {
-40039:   P_ALL,
-40039:   P_PID,
-40039:   P_PGID
-40039: } idtype_t;
-40039: # 40 "/usr/include/stdlib.h" 2 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/waitstatus.h" 1 3 4
-40039: # 41 "/usr/include/stdlib.h" 2 3 4
-40039: # 58 "/usr/include/stdlib.h" 3 4
-40039: typedef struct
-40039:   {
-40039:     int quot;
-40039:     int rem;
-40039:   } div_t;
-40039: 
-40039: 
-40039: 
-40039: typedef struct
-40039:   {
-40039:     long int quot;
-40039:     long int rem;
-40039:   } ldiv_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: __extension__ typedef struct
-40039:   {
-40039:     long long int quot;
-40039:     long long int rem;
-40039:   } lldiv_t;
-40039: # 97 "/usr/include/stdlib.h" 3 4
-40039: extern size_t __ctype_get_mb_cur_max (void) throw () __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: extern double atof (const char *__nptr)
-40039:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: extern int atoi (const char *__nptr)
-40039:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: extern long int atol (const char *__nptr)
-40039:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: __extension__ extern long long int atoll (const char *__nptr)
-40039:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: extern double strtod (const char *__restrict __nptr,
-40039:         char **__restrict __endptr)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: extern float strtof (const char *__restrict __nptr,
-40039:        char **__restrict __endptr) throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: extern long double strtold (const char *__restrict __nptr,
-40039:        char **__restrict __endptr)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: # 140 "/usr/include/stdlib.h" 3 4
-40039: extern _Float32 strtof32 (const char *__restrict __nptr,
-40039:      char **__restrict __endptr)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 strtof64 (const char *__restrict __nptr,
-40039:      char **__restrict __endptr)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 strtof128 (const char *__restrict __nptr,
-40039:        char **__restrict __endptr)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x strtof32x (const char *__restrict __nptr,
-40039:        char **__restrict __endptr)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x strtof64x (const char *__restrict __nptr,
-40039:        char **__restrict __endptr)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: # 176 "/usr/include/stdlib.h" 3 4
-40039: extern long int strtol (const char *__restrict __nptr,
-40039:    char **__restrict __endptr, int __base)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: extern unsigned long int strtoul (const char *__restrict __nptr,
-40039:       char **__restrict __endptr, int __base)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: __extension__
-40039: extern long long int strtoq (const char *__restrict __nptr,
-40039:         char **__restrict __endptr, int __base)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: __extension__
-40039: extern unsigned long long int strtouq (const char *__restrict __nptr,
-40039:            char **__restrict __endptr, int __base)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: __extension__
-40039: extern long long int strtoll (const char *__restrict __nptr,
-40039:          char **__restrict __endptr, int __base)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: __extension__
-40039: extern unsigned long long int strtoull (const char *__restrict __nptr,
-40039:      char **__restrict __endptr, int __base)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int strfromd (char *__dest, size_t __size, const char *__format,
-40039:        double __f)
-40039:      throw () __attribute__ ((__nonnull__ (3)));
-40039: 
-40039: extern int strfromf (char *__dest, size_t __size, const char *__format,
-40039:        float __f)
-40039:      throw () __attribute__ ((__nonnull__ (3)));
-40039: 
-40039: extern int strfroml (char *__dest, size_t __size, const char *__format,
-40039:        long double __f)
-40039:      throw () __attribute__ ((__nonnull__ (3)));
-40039: # 232 "/usr/include/stdlib.h" 3 4
-40039: extern int strfromf32 (char *__dest, size_t __size, const char * __format,
-40039:          _Float32 __f)
-40039:      throw () __attribute__ ((__nonnull__ (3)));
-40039: 
-40039: 
-40039: 
-40039: extern int strfromf64 (char *__dest, size_t __size, const char * __format,
-40039:          _Float64 __f)
-40039:      throw () __attribute__ ((__nonnull__ (3)));
-40039: 
-40039: 
-40039: 
-40039: extern int strfromf128 (char *__dest, size_t __size, const char * __format,
-40039:    _Float128 __f)
-40039:      throw () __attribute__ ((__nonnull__ (3)));
-40039: 
-40039: 
-40039: 
-40039: extern int strfromf32x (char *__dest, size_t __size, const char * __format,
-40039:    _Float32x __f)
-40039:      throw () __attribute__ ((__nonnull__ (3)));
-40039: 
-40039: 
-40039: 
-40039: extern int strfromf64x (char *__dest, size_t __size, const char * __format,
-40039:    _Float64x __f)
-40039:      throw () __attribute__ ((__nonnull__ (3)));
-40039: # 274 "/usr/include/stdlib.h" 3 4
-40039: extern long int strtol_l (const char *__restrict __nptr,
-40039:      char **__restrict __endptr, int __base,
-40039:      locale_t __loc) throw () __attribute__ ((__nonnull__ (1, 4)));
-40039: 
-40039: extern unsigned long int strtoul_l (const char *__restrict __nptr,
-40039:         char **__restrict __endptr,
-40039:         int __base, locale_t __loc)
-40039:      throw () __attribute__ ((__nonnull__ (1, 4)));
-40039: 
-40039: __extension__
-40039: extern long long int strtoll_l (const char *__restrict __nptr,
-40039:     char **__restrict __endptr, int __base,
-40039:     locale_t __loc)
-40039:      throw () __attribute__ ((__nonnull__ (1, 4)));
-40039: 
-40039: __extension__
-40039: extern unsigned long long int strtoull_l (const char *__restrict __nptr,
-40039:        char **__restrict __endptr,
-40039:        int __base, locale_t __loc)
-40039:      throw () __attribute__ ((__nonnull__ (1, 4)));
-40039: 
-40039: extern double strtod_l (const char *__restrict __nptr,
-40039:    char **__restrict __endptr, locale_t __loc)
-40039:      throw () __attribute__ ((__nonnull__ (1, 3)));
-40039: 
-40039: extern float strtof_l (const char *__restrict __nptr,
-40039:          char **__restrict __endptr, locale_t __loc)
-40039:      throw () __attribute__ ((__nonnull__ (1, 3)));
-40039: 
-40039: extern long double strtold_l (const char *__restrict __nptr,
-40039:          char **__restrict __endptr,
-40039:          locale_t __loc)
-40039:      throw () __attribute__ ((__nonnull__ (1, 3)));
-40039: # 316 "/usr/include/stdlib.h" 3 4
-40039: extern _Float32 strtof32_l (const char *__restrict __nptr,
-40039:        char **__restrict __endptr,
-40039:        locale_t __loc)
-40039:      throw () __attribute__ ((__nonnull__ (1, 3)));
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 strtof64_l (const char *__restrict __nptr,
-40039:        char **__restrict __endptr,
-40039:        locale_t __loc)
-40039:      throw () __attribute__ ((__nonnull__ (1, 3)));
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 strtof128_l (const char *__restrict __nptr,
-40039:          char **__restrict __endptr,
-40039:          locale_t __loc)
-40039:      throw () __attribute__ ((__nonnull__ (1, 3)));
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x strtof32x_l (const char *__restrict __nptr,
-40039:          char **__restrict __endptr,
-40039:          locale_t __loc)
-40039:      throw () __attribute__ ((__nonnull__ (1, 3)));
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x strtof64x_l (const char *__restrict __nptr,
-40039:          char **__restrict __endptr,
-40039:          locale_t __loc)
-40039:      throw () __attribute__ ((__nonnull__ (1, 3)));
-40039: # 360 "/usr/include/stdlib.h" 3 4
-40039: extern __inline __attribute__ ((__gnu_inline__)) int
-40039: __attribute__ ((__leaf__)) atoi (const char *__nptr) throw ()
-40039: {
-40039:   return (int) strtol (__nptr, (char **) __null, 10);
-40039: }
-40039: extern __inline __attribute__ ((__gnu_inline__)) long int
-40039: __attribute__ ((__leaf__)) atol (const char *__nptr) throw ()
-40039: {
-40039:   return strtol (__nptr, (char **) __null, 10);
-40039: }
-40039: 
-40039: 
-40039: __extension__ extern __inline __attribute__ ((__gnu_inline__)) long long int
-40039: __attribute__ ((__leaf__)) atoll (const char *__nptr) throw ()
-40039: {
-40039:   return strtoll (__nptr, (char **) __null, 10);
-40039: }
-40039: # 385 "/usr/include/stdlib.h" 3 4
-40039: extern char *l64a (long int __n) throw () __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: extern long int a64l (const char *__s)
-40039:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/sys/types.h" 1 3 4
-40039: # 27 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
-40039: extern "C" {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __u_char u_char;
-40039: typedef __u_short u_short;
-40039: typedef __u_int u_int;
-40039: typedef __u_long u_long;
-40039: typedef __quad_t quad_t;
-40039: typedef __u_quad_t u_quad_t;
-40039: typedef __fsid_t fsid_t;
-40039: 
-40039: 
-40039: typedef __loff_t loff_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __ino_t ino_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __ino64_t ino64_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __dev_t dev_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __gid_t gid_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __mode_t mode_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __nlink_t nlink_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __uid_t uid_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __off_t off_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __off64_t off64_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __pid_t pid_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __id_t id_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __ssize_t ssize_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __daddr_t daddr_t;
-40039: typedef __caddr_t caddr_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __key_t key_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types/clock_t.h" 1 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __clock_t clock_t;
-40039: # 127 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h" 1 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __clockid_t clockid_t;
-40039: # 129 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types/time_t.h" 1 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __time_t time_t;
-40039: # 130 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types/timer_t.h" 1 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __timer_t timer_t;
-40039: # 131 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: typedef __useconds_t useconds_t;
-40039: 
-40039: 
-40039: 
-40039: typedef __suseconds_t suseconds_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
-40039: # 145 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: typedef unsigned long int ulong;
-40039: typedef unsigned short int ushort;
-40039: typedef unsigned int uint;
-40039: # 177 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
-40039: typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
-40039: typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
-40039: typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
-40039: typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));
-40039: 
-40039: typedef int register_t __attribute__ ((__mode__ (__word__)));
-40039: # 193 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
-40039: # 1 "/usr/include/endian.h" 1 3 4
-40039: # 36 "/usr/include/endian.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/endian.h" 1 3 4
-40039: # 37 "/usr/include/endian.h" 2 3 4
-40039: # 60 "/usr/include/endian.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 1 3 4
-40039: # 33 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 3 4
-40039: static __inline __uint16_t
-40039: __bswap_16 (__uint16_t __bsx)
-40039: {
-40039: 
-40039:   return __builtin_bswap16 (__bsx);
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: static __inline __uint32_t
-40039: __bswap_32 (__uint32_t __bsx)
-40039: {
-40039: 
-40039:   return __builtin_bswap32 (__bsx);
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 69 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 3 4
-40039: __extension__ static __inline __uint64_t
-40039: __bswap_64 (__uint64_t __bsx)
-40039: {
-40039: 
-40039:   return __builtin_bswap64 (__bsx);
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 61 "/usr/include/endian.h" 2 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/uintn-identity.h" 1 3 4
-40039: # 32 "/usr/include/x86_64-linux-gnu/bits/uintn-identity.h" 3 4
-40039: static __inline __uint16_t
-40039: __uint16_identity (__uint16_t __x)
-40039: {
-40039:   return __x;
-40039: }
-40039: 
-40039: static __inline __uint32_t
-40039: __uint32_identity (__uint32_t __x)
-40039: {
-40039:   return __x;
-40039: }
-40039: 
-40039: static __inline __uint64_t
-40039: __uint64_identity (__uint64_t __x)
-40039: {
-40039:   return __x;
-40039: }
-40039: # 62 "/usr/include/endian.h" 2 3 4
-40039: # 194 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/sys/select.h" 1 3 4
-40039: # 30 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/select.h" 1 3 4
-40039: # 22 "/usr/include/x86_64-linux-gnu/bits/select.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
-40039: # 23 "/usr/include/x86_64-linux-gnu/bits/select.h" 2 3 4
-40039: # 31 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h" 1 3 4
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h" 1 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef struct
-40039: {
-40039:   unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
-40039: } __sigset_t;
-40039: # 5 "/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h" 2 3 4
-40039: 
-40039: 
-40039: typedef __sigset_t sigset_t;
-40039: # 34 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h" 1 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: struct timeval
-40039: {
-40039:   __time_t tv_sec;
-40039:   __suseconds_t tv_usec;
-40039: };
-40039: # 38 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h" 1 3 4
-40039: # 9 "/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h" 3 4
-40039: struct timespec
-40039: {
-40039:   __time_t tv_sec;
-40039:   __syscall_slong_t tv_nsec;
-40039: };
-40039: # 40 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4
-40039: # 49 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
-40039: typedef long int __fd_mask;
-40039: # 59 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
-40039: typedef struct
-40039:   {
-40039: 
-40039: 
-40039: 
-40039:     __fd_mask fds_bits[1024 / (8 * (int) sizeof (__fd_mask))];
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   } fd_set;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __fd_mask fd_mask;
-40039: # 91 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
-40039: extern "C" {
-40039: # 101 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
-40039: extern int select (int __nfds, fd_set *__restrict __readfds,
-40039:      fd_set *__restrict __writefds,
-40039:      fd_set *__restrict __exceptfds,
-40039:      struct timeval *__restrict __timeout);
-40039: # 113 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
-40039: extern int pselect (int __nfds, fd_set *__restrict __readfds,
-40039:       fd_set *__restrict __writefds,
-40039:       fd_set *__restrict __exceptfds,
-40039:       const struct timespec *__restrict __timeout,
-40039:       const __sigset_t *__restrict __sigmask);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/select2.h" 1 3 4
-40039: # 24 "/usr/include/x86_64-linux-gnu/bits/select2.h" 3 4
-40039: extern long int __fdelt_chk (long int __d);
-40039: extern long int __fdelt_warn (long int __d)
-40039:   __attribute__((__warning__ ("bit outside of fd_set selected")));
-40039: # 124 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4
-40039: 
-40039: 
-40039: }
-40039: # 197 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __blksize_t blksize_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __blkcnt_t blkcnt_t;
-40039: 
-40039: 
-40039: 
-40039: typedef __fsblkcnt_t fsblkcnt_t;
-40039: 
-40039: 
-40039: 
-40039: typedef __fsfilcnt_t fsfilcnt_t;
-40039: # 236 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
-40039: typedef __blkcnt64_t blkcnt64_t;
-40039: typedef __fsblkcnt64_t fsblkcnt64_t;
-40039: typedef __fsfilcnt64_t fsfilcnt64_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 1 3 4
-40039: # 23 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h" 1 3 4
-40039: # 77 "/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h" 1 3 4
-40039: # 21 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
-40039: # 22 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h" 2 3 4
-40039: # 65 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h" 3 4
-40039: struct __pthread_rwlock_arch_t
-40039: {
-40039:   unsigned int __readers;
-40039:   unsigned int __writers;
-40039:   unsigned int __wrphase_futex;
-40039:   unsigned int __writers_futex;
-40039:   unsigned int __pad3;
-40039:   unsigned int __pad4;
-40039: 
-40039:   int __cur_writer;
-40039:   int __shared;
-40039:   signed char __rwelision;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   unsigned char __pad1[7];
-40039: 
-40039: 
-40039:   unsigned long int __pad2;
-40039: 
-40039: 
-40039:   unsigned int __flags;
-40039: # 99 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h" 3 4
-40039: };
-40039: # 78 "/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef struct __pthread_internal_list
-40039: {
-40039:   struct __pthread_internal_list *__prev;
-40039:   struct __pthread_internal_list *__next;
-40039: } __pthread_list_t;
-40039: # 118 "/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h" 3 4
-40039: struct __pthread_mutex_s
-40039: {
-40039:   int __lock ;
-40039:   unsigned int __count;
-40039:   int __owner;
-40039: 
-40039:   unsigned int __nusers;
-40039: # 148 "/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h" 3 4
-40039:   int __kind;
-40039:  
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   short __spins; short __elision;
-40039:   __pthread_list_t __list;
-40039: # 165 "/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h" 3 4
-40039:  
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: struct __pthread_cond_s
-40039: {
-40039:   __extension__ union
-40039:   {
-40039:     __extension__ unsigned long long int __wseq;
-40039:     struct
-40039:     {
-40039:       unsigned int __low;
-40039:       unsigned int __high;
-40039:     } __wseq32;
-40039:   };
-40039:   __extension__ union
-40039:   {
-40039:     __extension__ unsigned long long int __g1_start;
-40039:     struct
-40039:     {
-40039:       unsigned int __low;
-40039:       unsigned int __high;
-40039:     } __g1_start32;
-40039:   };
-40039:   unsigned int __g_refs[2] ;
-40039:   unsigned int __g_size[2];
-40039:   unsigned int __g1_orig_size;
-40039:   unsigned int __wrefs;
-40039:   unsigned int __g_signals[2];
-40039: };
-40039: # 24 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: typedef unsigned long int pthread_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef union
-40039: {
-40039:   char __size[4];
-40039:   int __align;
-40039: } pthread_mutexattr_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef union
-40039: {
-40039:   char __size[4];
-40039:   int __align;
-40039: } pthread_condattr_t;
-40039: 
-40039: 
-40039: 
-40039: typedef unsigned int pthread_key_t;
-40039: 
-40039: 
-40039: 
-40039: typedef int pthread_once_t;
-40039: 
-40039: 
-40039: union pthread_attr_t
-40039: {
-40039:   char __size[56];
-40039:   long int __align;
-40039: };
-40039: 
-40039: typedef union pthread_attr_t pthread_attr_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef union
-40039: {
-40039:   struct __pthread_mutex_s __data;
-40039:   char __size[40];
-40039:   long int __align;
-40039: } pthread_mutex_t;
-40039: 
-40039: 
-40039: typedef union
-40039: {
-40039:   struct __pthread_cond_s __data;
-40039:   char __size[48];
-40039:   __extension__ long long int __align;
-40039: } pthread_cond_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef union
-40039: {
-40039:   struct __pthread_rwlock_arch_t __data;
-40039:   char __size[56];
-40039:   long int __align;
-40039: } pthread_rwlock_t;
-40039: 
-40039: typedef union
-40039: {
-40039:   char __size[8];
-40039:   long int __align;
-40039: } pthread_rwlockattr_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef volatile int pthread_spinlock_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef union
-40039: {
-40039:   char __size[32];
-40039:   long int __align;
-40039: } pthread_barrier_t;
-40039: 
-40039: typedef union
-40039: {
-40039:   char __size[4];
-40039:   int __align;
-40039: } pthread_barrierattr_t;
-40039: # 245 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
-40039: 
-40039: 
-40039: }
-40039: # 395 "/usr/include/stdlib.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long int random (void) throw ();
-40039: 
-40039: 
-40039: extern void srandom (unsigned int __seed) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *initstate (unsigned int __seed, char *__statebuf,
-40039:    size_t __statelen) throw () __attribute__ ((__nonnull__ (2)));
-40039: 
-40039: 
-40039: 
-40039: extern char *setstate (char *__statebuf) throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: struct random_data
-40039:   {
-40039:     int32_t *fptr;
-40039:     int32_t *rptr;
-40039:     int32_t *state;
-40039:     int rand_type;
-40039:     int rand_deg;
-40039:     int rand_sep;
-40039:     int32_t *end_ptr;
-40039:   };
-40039: 
-40039: extern int random_r (struct random_data *__restrict __buf,
-40039:        int32_t *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: extern int srandom_r (unsigned int __seed, struct random_data *__buf)
-40039:      throw () __attribute__ ((__nonnull__ (2)));
-40039: 
-40039: extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
-40039:    size_t __statelen,
-40039:    struct random_data *__restrict __buf)
-40039:      throw () __attribute__ ((__nonnull__ (2, 4)));
-40039: 
-40039: extern int setstate_r (char *__restrict __statebuf,
-40039:          struct random_data *__restrict __buf)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int rand (void) throw ();
-40039: 
-40039: extern void srand (unsigned int __seed) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int rand_r (unsigned int *__seed) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern double drand48 (void) throw ();
-40039: extern double erand48 (unsigned short int __xsubi[3]) throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern long int lrand48 (void) throw ();
-40039: extern long int nrand48 (unsigned short int __xsubi[3])
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern long int mrand48 (void) throw ();
-40039: extern long int jrand48 (unsigned short int __xsubi[3])
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern void srand48 (long int __seedval) throw ();
-40039: extern unsigned short int *seed48 (unsigned short int __seed16v[3])
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: extern void lcong48 (unsigned short int __param[7]) throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: struct drand48_data
-40039:   {
-40039:     unsigned short int __x[3];
-40039:     unsigned short int __old_x[3];
-40039:     unsigned short int __c;
-40039:     unsigned short int __init;
-40039:     __extension__ unsigned long long int __a;
-40039: 
-40039:   };
-40039: 
-40039: 
-40039: extern int drand48_r (struct drand48_data *__restrict __buffer,
-40039:         double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: extern int erand48_r (unsigned short int __xsubi[3],
-40039:         struct drand48_data *__restrict __buffer,
-40039:         double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern int lrand48_r (struct drand48_data *__restrict __buffer,
-40039:         long int *__restrict __result)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: extern int nrand48_r (unsigned short int __xsubi[3],
-40039:         struct drand48_data *__restrict __buffer,
-40039:         long int *__restrict __result)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern int mrand48_r (struct drand48_data *__restrict __buffer,
-40039:         long int *__restrict __result)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: extern int jrand48_r (unsigned short int __xsubi[3],
-40039:         struct drand48_data *__restrict __buffer,
-40039:         long int *__restrict __result)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
-40039:      throw () __attribute__ ((__nonnull__ (2)));
-40039: 
-40039: extern int seed48_r (unsigned short int __seed16v[3],
-40039:        struct drand48_data *__buffer) throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: extern int lcong48_r (unsigned short int __param[7],
-40039:         struct drand48_data *__buffer)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern void *malloc (size_t __size) throw () __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: extern void *calloc (size_t __nmemb, size_t __size)
-40039:      throw () __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern void *realloc (void *__ptr, size_t __size)
-40039:      throw () __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size)
-40039:      throw () __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: extern void free (void *__ptr) throw ();
-40039: 
-40039: 
-40039: # 1 "/usr/include/alloca.h" 1 3 4
-40039: # 24 "/usr/include/alloca.h" 3 4
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
-40039: # 25 "/usr/include/alloca.h" 2 3 4
-40039: 
-40039: extern "C" {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern void *alloca (size_t __size) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 567 "/usr/include/stdlib.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern void *valloc (size_t __size) throw () __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
-40039:      throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern void *aligned_alloc (size_t __alignment, size_t __size)
-40039:      throw () __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (2))) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: extern void abort (void) throw () __attribute__ ((__noreturn__));
-40039: 
-40039: 
-40039: 
-40039: extern int atexit (void (*__func) (void)) throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern "C++" int at_quick_exit (void (*__func) (void))
-40039:      throw () __asm ("at_quick_exit") __attribute__ ((__nonnull__ (1)));
-40039: # 607 "/usr/include/stdlib.h" 3 4
-40039: extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern void exit (int __status) throw () __attribute__ ((__noreturn__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern void quick_exit (int __status) throw () __attribute__ ((__noreturn__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern void _Exit (int __status) throw () __attribute__ ((__noreturn__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *getenv (const char *__name) throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *secure_getenv (const char *__name)
-40039:      throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int putenv (char *__string) throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int setenv (const char *__name, const char *__value, int __replace)
-40039:      throw () __attribute__ ((__nonnull__ (2)));
-40039: 
-40039: 
-40039: extern int unsetenv (const char *__name) throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int clearenv (void) throw ();
-40039: # 672 "/usr/include/stdlib.h" 3 4
-40039: extern char *mktemp (char *__template) throw () __attribute__ ((__nonnull__ (1)));
-40039: # 685 "/usr/include/stdlib.h" 3 4
-40039: extern int mkstemp (char *__template) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
-40039: # 695 "/usr/include/stdlib.h" 3 4
-40039: extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
-40039: # 707 "/usr/include/stdlib.h" 3 4
-40039: extern int mkstemps (char *__template, int __suffixlen) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
-40039: # 717 "/usr/include/stdlib.h" 3 4
-40039: extern int mkstemps64 (char *__template, int __suffixlen)
-40039:      __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
-40039: # 728 "/usr/include/stdlib.h" 3 4
-40039: extern char *mkdtemp (char *__template) throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
-40039: # 739 "/usr/include/stdlib.h" 3 4
-40039: extern int mkostemp (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
-40039: # 749 "/usr/include/stdlib.h" 3 4
-40039: extern int mkostemp64 (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
-40039: # 759 "/usr/include/stdlib.h" 3 4
-40039: extern int mkostemps (char *__template, int __suffixlen, int __flags)
-40039:      __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
-40039: # 771 "/usr/include/stdlib.h" 3 4
-40039: extern int mkostemps64 (char *__template, int __suffixlen, int __flags)
-40039:      __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
-40039: # 781 "/usr/include/stdlib.h" 3 4
-40039: extern int system (const char *__command) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *canonicalize_file_name (const char *__name)
-40039:      throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
-40039: # 797 "/usr/include/stdlib.h" 3 4
-40039: extern char *realpath (const char *__restrict __name,
-40039:          char *__restrict __resolved) throw () __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef int (*__compar_fn_t) (const void *, const void *);
-40039: 
-40039: 
-40039: typedef __compar_fn_t comparison_fn_t;
-40039: 
-40039: 
-40039: 
-40039: typedef int (*__compar_d_fn_t) (const void *, const void *, void *);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern void *bsearch (const void *__key, const void *__base,
-40039:         size_t __nmemb, size_t __size, __compar_fn_t __compar)
-40039:      __attribute__ ((__nonnull__ (1, 2, 5))) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h" 1 3 4
-40039: # 19 "/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h" 3 4
-40039: extern __inline __attribute__ ((__gnu_inline__)) void *
-40039: bsearch (const void *__key, const void *__base, size_t __nmemb, size_t __size,
-40039:   __compar_fn_t __compar)
-40039: {
-40039:   size_t __l, __u, __idx;
-40039:   const void *__p;
-40039:   int __comparison;
-40039: 
-40039:   __l = 0;
-40039:   __u = __nmemb;
-40039:   while (__l < __u)
-40039:     {
-40039:       __idx = (__l + __u) / 2;
-40039:       __p = (void *) (((const char *) __base) + (__idx * __size));
-40039:       __comparison = (*__compar) (__key, __p);
-40039:       if (__comparison < 0)
-40039:  __u = __idx;
-40039:       else if (__comparison > 0)
-40039:  __l = __idx + 1;
-40039:       else
-40039:  return (void *) __p;
-40039:     }
-40039: 
-40039:   return __null;
-40039: }
-40039: # 823 "/usr/include/stdlib.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern void qsort (void *__base, size_t __nmemb, size_t __size,
-40039:      __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4)));
-40039: 
-40039: extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
-40039:        __compar_d_fn_t __compar, void *__arg)
-40039:   __attribute__ ((__nonnull__ (1, 4)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int abs (int __x) throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
-40039: extern long int labs (long int __x) throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: __extension__ extern long long int llabs (long long int __x)
-40039:      throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern div_t div (int __numer, int __denom)
-40039:      throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
-40039: extern ldiv_t ldiv (long int __numer, long int __denom)
-40039:      throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: __extension__ extern lldiv_t lldiv (long long int __numer,
-40039:         long long int __denom)
-40039:      throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
-40039: # 869 "/usr/include/stdlib.h" 3 4
-40039: extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
-40039:      int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
-40039:      int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *gcvt (double __value, int __ndigit, char *__buf)
-40039:      throw () __attribute__ ((__nonnull__ (3))) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *qecvt (long double __value, int __ndigit,
-40039:       int *__restrict __decpt, int *__restrict __sign)
-40039:      throw () __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
-40039: extern char *qfcvt (long double __value, int __ndigit,
-40039:       int *__restrict __decpt, int *__restrict __sign)
-40039:      throw () __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
-40039: extern char *qgcvt (long double __value, int __ndigit, char *__buf)
-40039:      throw () __attribute__ ((__nonnull__ (3))) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
-40039:      int *__restrict __sign, char *__restrict __buf,
-40039:      size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5)));
-40039: extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
-40039:      int *__restrict __sign, char *__restrict __buf,
-40039:      size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5)));
-40039: 
-40039: extern int qecvt_r (long double __value, int __ndigit,
-40039:       int *__restrict __decpt, int *__restrict __sign,
-40039:       char *__restrict __buf, size_t __len)
-40039:      throw () __attribute__ ((__nonnull__ (3, 4, 5)));
-40039: extern int qfcvt_r (long double __value, int __ndigit,
-40039:       int *__restrict __decpt, int *__restrict __sign,
-40039:       char *__restrict __buf, size_t __len)
-40039:      throw () __attribute__ ((__nonnull__ (3, 4, 5)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int mblen (const char *__s, size_t __n) throw ();
-40039: 
-40039: 
-40039: extern int mbtowc (wchar_t *__restrict __pwc,
-40039:      const char *__restrict __s, size_t __n) throw ();
-40039: 
-40039: 
-40039: extern int wctomb (char *__s, wchar_t __wchar) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern size_t mbstowcs (wchar_t *__restrict __pwcs,
-40039:    const char *__restrict __s, size_t __n) throw ();
-40039: 
-40039: extern size_t wcstombs (char *__restrict __s,
-40039:    const wchar_t *__restrict __pwcs, size_t __n)
-40039:      throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int rpmatch (const char *__response) throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
-40039: # 954 "/usr/include/stdlib.h" 3 4
-40039: extern int getsubopt (char **__restrict __optionp,
-40039:         char *const *__restrict __tokens,
-40039:         char **__restrict __valuep)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2, 3))) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int posix_openpt (int __oflag) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int grantpt (int __fd) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int unlockpt (int __fd) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *ptsname (int __fd) throw () __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
-40039:      throw () __attribute__ ((__nonnull__ (2)));
-40039: 
-40039: 
-40039: extern int getpt (void);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int getloadavg (double __loadavg[], int __nelem)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: # 1010 "/usr/include/stdlib.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/stdlib-float.h" 1 3 4
-40039: # 24 "/usr/include/x86_64-linux-gnu/bits/stdlib-float.h" 3 4
-40039: extern __inline __attribute__ ((__gnu_inline__)) double
-40039: __attribute__ ((__leaf__)) atof (const char *__nptr) throw ()
-40039: {
-40039:   return strtod (__nptr, (char **) __null);
-40039: }
-40039: # 1011 "/usr/include/stdlib.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/stdlib.h" 1 3 4
-40039: # 23 "/usr/include/x86_64-linux-gnu/bits/stdlib.h" 3 4
-40039: extern char *__realpath_chk (const char *__restrict __name,
-40039:         char *__restrict __resolved,
-40039:         size_t __resolvedlen) throw () __attribute__ ((__warn_unused_result__));
-40039: extern char *__realpath_alias (const char *__restrict __name, char *__restrict __resolved) throw () __asm__ ("" "realpath")
-40039: 
-40039:                                                  __attribute__ ((__warn_unused_result__));
-40039: extern char *__realpath_chk_warn (const char *__restrict __name, char *__restrict __resolved, size_t __resolvedlen) throw () __asm__ ("" "__realpath_chk")
-40039: 
-40039: 
-40039:                                                 __attribute__ ((__warn_unused_result__))
-40039:      __attribute__((__warning__ ("second argument of realpath must be either NULL or at " "least PATH_MAX bytes long buffer")))
-40039:                                       ;
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char *
-40039: __attribute__ ((__leaf__)) realpath (const char *__restrict __name, char *__restrict __resolved) throw ()
-40039: {
-40039:   if (__builtin_object_size (__resolved, 2 > 1) != (size_t) -1)
-40039:     {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       return __realpath_chk (__name, __resolved, __builtin_object_size (__resolved, 2 > 1));
-40039:     }
-40039: 
-40039:   return __realpath_alias (__name, __resolved);
-40039: }
-40039: 
-40039: 
-40039: extern int __ptsname_r_chk (int __fd, char *__buf, size_t __buflen,
-40039:        size_t __nreal) throw () __attribute__ ((__nonnull__ (2)));
-40039: extern int __ptsname_r_alias (int __fd, char *__buf, size_t __buflen) throw () __asm__ ("" "ptsname_r")
-40039: 
-40039:      __attribute__ ((__nonnull__ (2)));
-40039: extern int __ptsname_r_chk_warn (int __fd, char *__buf, size_t __buflen, size_t __nreal) throw () __asm__ ("" "__ptsname_r_chk")
-40039: 
-40039: 
-40039:      __attribute__ ((__nonnull__ (2))) __attribute__((__warning__ ("ptsname_r called with buflen bigger than " "size of buf")))
-40039:                    ;
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
-40039: __attribute__ ((__leaf__)) ptsname_r (int __fd, char *__buf, size_t __buflen) throw ()
-40039: {
-40039:   if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
-40039:     {
-40039:       if (!__builtin_constant_p (__buflen))
-40039:  return __ptsname_r_chk (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1));
-40039:       if (__buflen > __builtin_object_size (__buf, 2 > 1))
-40039:  return __ptsname_r_chk_warn (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1));
-40039:     }
-40039:   return __ptsname_r_alias (__fd, __buf, __buflen);
-40039: }
-40039: 
-40039: 
-40039: extern int __wctomb_chk (char *__s, wchar_t __wchar, size_t __buflen)
-40039:   throw () __attribute__ ((__warn_unused_result__));
-40039: extern int __wctomb_alias (char *__s, wchar_t __wchar) throw () __asm__ ("" "wctomb")
-40039:               __attribute__ ((__warn_unused_result__));
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) int
-40039: __attribute__ ((__leaf__)) wctomb (char *__s, wchar_t __wchar) throw ()
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (__builtin_object_size (__s, 2 > 1) != (size_t) -1 && 16 > __builtin_object_size (__s, 2 > 1))
-40039:     return __wctomb_chk (__s, __wchar, __builtin_object_size (__s, 2 > 1));
-40039:   return __wctomb_alias (__s, __wchar);
-40039: }
-40039: 
-40039: 
-40039: extern size_t __mbstowcs_chk (wchar_t *__restrict __dst,
-40039:          const char *__restrict __src,
-40039:          size_t __len, size_t __dstlen) throw ();
-40039: extern size_t __mbstowcs_alias (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len) throw () __asm__ ("" "mbstowcs")
-40039: 
-40039: 
-40039:                                   ;
-40039: extern size_t __mbstowcs_chk_warn (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len, size_t __dstlen) throw () __asm__ ("" "__mbstowcs_chk")
-40039: 
-40039: 
-40039: 
-40039:      __attribute__((__warning__ ("mbstowcs called with dst buffer smaller than len " "* sizeof (wchar_t)")))
-40039:                         ;
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t
-40039: __attribute__ ((__leaf__)) mbstowcs (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len) throw ()
-40039: 
-40039: {
-40039:   if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1)
-40039:     {
-40039:       if (!__builtin_constant_p (__len))
-40039:  return __mbstowcs_chk (__dst, __src, __len,
-40039:           __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t));
-40039: 
-40039:       if (__len > __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t))
-40039:  return __mbstowcs_chk_warn (__dst, __src, __len,
-40039:          __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t));
-40039:     }
-40039:   return __mbstowcs_alias (__dst, __src, __len);
-40039: }
-40039: 
-40039: 
-40039: extern size_t __wcstombs_chk (char *__restrict __dst,
-40039:          const wchar_t *__restrict __src,
-40039:          size_t __len, size_t __dstlen) throw ();
-40039: extern size_t __wcstombs_alias (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len) throw () __asm__ ("" "wcstombs")
-40039: 
-40039: 
-40039:                                   ;
-40039: extern size_t __wcstombs_chk_warn (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len, size_t __dstlen) throw () __asm__ ("" "__wcstombs_chk")
-40039: 
-40039: 
-40039: 
-40039:      __attribute__((__warning__ ("wcstombs called with dst buffer smaller than len")));
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t
-40039: __attribute__ ((__leaf__)) wcstombs (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len) throw ()
-40039: 
-40039: {
-40039:   if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1)
-40039:     {
-40039:       if (!__builtin_constant_p (__len))
-40039:  return __wcstombs_chk (__dst, __src, __len, __builtin_object_size (__dst, 2 > 1));
-40039:       if (__len > __builtin_object_size (__dst, 2 > 1))
-40039:  return __wcstombs_chk_warn (__dst, __src, __len, __builtin_object_size (__dst, 2 > 1));
-40039:     }
-40039:   return __wcstombs_alias (__dst, __src, __len);
-40039: }
-40039: # 1015 "/usr/include/stdlib.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 76 "/usr/include/c++/8/cstdlib" 2 3
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/std_abs.h" 1 3
-40039: # 33 "/usr/include/c++/8/bits/std_abs.h" 3
-40039:        
-40039: # 34 "/usr/include/c++/8/bits/std_abs.h" 3
-40039: # 46 "/usr/include/c++/8/bits/std_abs.h" 3
-40039: extern "C++"
-40039: {
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   using ::abs;
-40039: 
-40039: 
-40039:   inline long
-40039:   abs(long __i) { return __builtin_labs(__i); }
-40039: 
-40039: 
-40039: 
-40039:   inline long long
-40039:   abs(long long __x) { return __builtin_llabs (__x); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   inline constexpr double
-40039:   abs(double __x)
-40039:   { return __builtin_fabs(__x); }
-40039: 
-40039:   inline constexpr float
-40039:   abs(float __x)
-40039:   { return __builtin_fabsf(__x); }
-40039: 
-40039:   inline constexpr long double
-40039:   abs(long double __x)
-40039:   { return __builtin_fabsl(__x); }
-40039: 
-40039: 
-40039: 
-40039:   inline constexpr __int128
-40039:   abs(__int128 __x) { return __x >= 0 ? __x : -__x; }
-40039: # 100 "/usr/include/c++/8/bits/std_abs.h" 3
-40039:   inline constexpr
-40039:   __float128
-40039:   abs(__float128 __x)
-40039:   { return __x < 0 ? -__x : __x; }
-40039: 
-40039: 
-40039: 
-40039: }
-40039: }
-40039: # 78 "/usr/include/c++/8/cstdlib" 2 3
-40039: # 121 "/usr/include/c++/8/cstdlib" 3
-40039: extern "C++"
-40039: {
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   using ::div_t;
-40039:   using ::ldiv_t;
-40039: 
-40039:   using ::abort;
-40039: 
-40039: 
-40039: 
-40039:   using ::atexit;
-40039: 
-40039: 
-40039:   using ::at_quick_exit;
-40039: 
-40039: 
-40039:   using ::atof;
-40039:   using ::atoi;
-40039:   using ::atol;
-40039:   using ::bsearch;
-40039:   using ::calloc;
-40039:   using ::div;
-40039:   using ::exit;
-40039:   using ::free;
-40039:   using ::getenv;
-40039:   using ::labs;
-40039:   using ::ldiv;
-40039:   using ::malloc;
-40039: 
-40039:   using ::mblen;
-40039:   using ::mbstowcs;
-40039:   using ::mbtowc;
-40039: 
-40039:   using ::qsort;
-40039: 
-40039: 
-40039:   using ::quick_exit;
-40039: 
-40039: 
-40039:   using ::rand;
-40039:   using ::realloc;
-40039:   using ::srand;
-40039:   using ::strtod;
-40039:   using ::strtol;
-40039:   using ::strtoul;
-40039:   using ::system;
-40039: 
-40039:   using ::wcstombs;
-40039:   using ::wctomb;
-40039: 
-40039: 
-40039: 
-40039:   inline ldiv_t
-40039:   div(long __i, long __j) { return ldiv(__i, __j); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 195 "/usr/include/c++/8/cstdlib" 3
-40039: namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039:   using ::lldiv_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   using ::_Exit;
-40039: 
-40039: 
-40039: 
-40039:   using ::llabs;
-40039: 
-40039:   inline lldiv_t
-40039:   div(long long __n, long long __d)
-40039:   { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; }
-40039: 
-40039:   using ::lldiv;
-40039: # 227 "/usr/include/c++/8/cstdlib" 3
-40039:   using ::atoll;
-40039:   using ::strtoll;
-40039:   using ::strtoull;
-40039: 
-40039:   using ::strtof;
-40039:   using ::strtold;
-40039: 
-40039: 
-40039: }
-40039: 
-40039: namespace std
-40039: {
-40039: 
-40039:   using ::__gnu_cxx::lldiv_t;
-40039: 
-40039:   using ::__gnu_cxx::_Exit;
-40039: 
-40039:   using ::__gnu_cxx::llabs;
-40039:   using ::__gnu_cxx::div;
-40039:   using ::__gnu_cxx::lldiv;
-40039: 
-40039:   using ::__gnu_cxx::atoll;
-40039:   using ::__gnu_cxx::strtof;
-40039:   using ::__gnu_cxx::strtoll;
-40039:   using ::__gnu_cxx::strtoull;
-40039:   using ::__gnu_cxx::strtold;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 60 "/usr/include/c++/8/bits/stl_algo.h" 2 3
-40039: # 1 "/usr/include/c++/8/bits/algorithmfwd.h" 1 3
-40039: # 33 "/usr/include/c++/8/bits/algorithmfwd.h" 3
-40039:        
-40039: # 34 "/usr/include/c++/8/bits/algorithmfwd.h" 3
-40039: # 42 "/usr/include/c++/8/bits/algorithmfwd.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 195 "/usr/include/c++/8/bits/algorithmfwd.h" 3
-40039:   template<typename _IIter, typename _Predicate>
-40039:     bool
-40039:     all_of(_IIter, _IIter, _Predicate);
-40039: 
-40039:   template<typename _IIter, typename _Predicate>
-40039:     bool
-40039:     any_of(_IIter, _IIter, _Predicate);
-40039: 
-40039: 
-40039:   template<typename _FIter, typename _Tp>
-40039:     bool
-40039:     binary_search(_FIter, _FIter, const _Tp&);
-40039: 
-40039:   template<typename _FIter, typename _Tp, typename _Compare>
-40039:     bool
-40039:     binary_search(_FIter, _FIter, const _Tp&, _Compare);
-40039: # 224 "/usr/include/c++/8/bits/algorithmfwd.h" 3
-40039:   template<typename _IIter, typename _OIter>
-40039:     _OIter
-40039:     copy(_IIter, _IIter, _OIter);
-40039: 
-40039:   template<typename _BIter1, typename _BIter2>
-40039:     _BIter2
-40039:     copy_backward(_BIter1, _BIter1, _BIter2);
-40039: 
-40039: 
-40039:   template<typename _IIter, typename _OIter, typename _Predicate>
-40039:     _OIter
-40039:     copy_if(_IIter, _IIter, _OIter, _Predicate);
-40039: 
-40039:   template<typename _IIter, typename _Size, typename _OIter>
-40039:     _OIter
-40039:     copy_n(_IIter, _Size, _OIter);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _FIter, typename _Tp>
-40039:     pair<_FIter, _FIter>
-40039:     equal_range(_FIter, _FIter, const _Tp&);
-40039: 
-40039:   template<typename _FIter, typename _Tp, typename _Compare>
-40039:     pair<_FIter, _FIter>
-40039:     equal_range(_FIter, _FIter, const _Tp&, _Compare);
-40039: 
-40039:   template<typename _FIter, typename _Tp>
-40039:     void
-40039:     fill(_FIter, _FIter, const _Tp&);
-40039: 
-40039:   template<typename _OIter, typename _Size, typename _Tp>
-40039:     _OIter
-40039:     fill_n(_OIter, _Size, const _Tp&);
-40039: 
-40039: 
-40039: 
-40039:   template<typename _FIter1, typename _FIter2>
-40039:     _FIter1
-40039:     find_end(_FIter1, _FIter1, _FIter2, _FIter2);
-40039: 
-40039:   template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
-40039:     _FIter1
-40039:     find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _IIter, typename _Predicate>
-40039:     _IIter
-40039:     find_if_not(_IIter, _IIter, _Predicate);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _IIter1, typename _IIter2>
-40039:     bool
-40039:     includes(_IIter1, _IIter1, _IIter2, _IIter2);
-40039: 
-40039:   template<typename _IIter1, typename _IIter2, typename _Compare>
-40039:     bool
-40039:     includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
-40039: 
-40039:   template<typename _BIter>
-40039:     void
-40039:     inplace_merge(_BIter, _BIter, _BIter);
-40039: 
-40039:   template<typename _BIter, typename _Compare>
-40039:     void
-40039:     inplace_merge(_BIter, _BIter, _BIter, _Compare);
-40039: 
-40039: 
-40039:   template<typename _RAIter>
-40039:     bool
-40039:     is_heap(_RAIter, _RAIter);
-40039: 
-40039:   template<typename _RAIter, typename _Compare>
-40039:     bool
-40039:     is_heap(_RAIter, _RAIter, _Compare);
-40039: 
-40039:   template<typename _RAIter>
-40039:     _RAIter
-40039:     is_heap_until(_RAIter, _RAIter);
-40039: 
-40039:   template<typename _RAIter, typename _Compare>
-40039:     _RAIter
-40039:     is_heap_until(_RAIter, _RAIter, _Compare);
-40039: 
-40039:   template<typename _IIter, typename _Predicate>
-40039:     bool
-40039:     is_partitioned(_IIter, _IIter, _Predicate);
-40039: 
-40039:   template<typename _FIter1, typename _FIter2>
-40039:     bool
-40039:     is_permutation(_FIter1, _FIter1, _FIter2);
-40039: 
-40039:   template<typename _FIter1, typename _FIter2,
-40039:     typename _BinaryPredicate>
-40039:     bool
-40039:     is_permutation(_FIter1, _FIter1, _FIter2, _BinaryPredicate);
-40039: 
-40039:   template<typename _FIter>
-40039:     bool
-40039:     is_sorted(_FIter, _FIter);
-40039: 
-40039:   template<typename _FIter, typename _Compare>
-40039:     bool
-40039:     is_sorted(_FIter, _FIter, _Compare);
-40039: 
-40039:   template<typename _FIter>
-40039:     _FIter
-40039:     is_sorted_until(_FIter, _FIter);
-40039: 
-40039:   template<typename _FIter, typename _Compare>
-40039:     _FIter
-40039:     is_sorted_until(_FIter, _FIter, _Compare);
-40039: 
-40039: 
-40039:   template<typename _FIter1, typename _FIter2>
-40039:     void
-40039:     iter_swap(_FIter1, _FIter2);
-40039: 
-40039:   template<typename _FIter, typename _Tp>
-40039:     _FIter
-40039:     lower_bound(_FIter, _FIter, const _Tp&);
-40039: 
-40039:   template<typename _FIter, typename _Tp, typename _Compare>
-40039:     _FIter
-40039:     lower_bound(_FIter, _FIter, const _Tp&, _Compare);
-40039: 
-40039:   template<typename _RAIter>
-40039:     void
-40039:     make_heap(_RAIter, _RAIter);
-40039: 
-40039:   template<typename _RAIter, typename _Compare>
-40039:     void
-40039:     make_heap(_RAIter, _RAIter, _Compare);
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr
-40039:     const _Tp&
-40039:     max(const _Tp&, const _Tp&);
-40039: 
-40039:   template<typename _Tp, typename _Compare>
-40039:     constexpr
-40039:     const _Tp&
-40039:     max(const _Tp&, const _Tp&, _Compare);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr
-40039:     const _Tp&
-40039:     min(const _Tp&, const _Tp&);
-40039: 
-40039:   template<typename _Tp, typename _Compare>
-40039:     constexpr
-40039:     const _Tp&
-40039:     min(const _Tp&, const _Tp&, _Compare);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr
-40039:     pair<const _Tp&, const _Tp&>
-40039:     minmax(const _Tp&, const _Tp&);
-40039: 
-40039:   template<typename _Tp, typename _Compare>
-40039:     constexpr
-40039:     pair<const _Tp&, const _Tp&>
-40039:     minmax(const _Tp&, const _Tp&, _Compare);
-40039: 
-40039:   template<typename _FIter>
-40039:     constexpr
-40039:     pair<_FIter, _FIter>
-40039:     minmax_element(_FIter, _FIter);
-40039: 
-40039:   template<typename _FIter, typename _Compare>
-40039:     constexpr
-40039:     pair<_FIter, _FIter>
-40039:     minmax_element(_FIter, _FIter, _Compare);
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr
-40039:     _Tp
-40039:     min(initializer_list<_Tp>);
-40039: 
-40039:   template<typename _Tp, typename _Compare>
-40039:     constexpr
-40039:     _Tp
-40039:     min(initializer_list<_Tp>, _Compare);
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr
-40039:     _Tp
-40039:     max(initializer_list<_Tp>);
-40039: 
-40039:   template<typename _Tp, typename _Compare>
-40039:     constexpr
-40039:     _Tp
-40039:     max(initializer_list<_Tp>, _Compare);
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr
-40039:     pair<_Tp, _Tp>
-40039:     minmax(initializer_list<_Tp>);
-40039: 
-40039:   template<typename _Tp, typename _Compare>
-40039:     constexpr
-40039:     pair<_Tp, _Tp>
-40039:     minmax(initializer_list<_Tp>, _Compare);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _BIter>
-40039:     bool
-40039:     next_permutation(_BIter, _BIter);
-40039: 
-40039:   template<typename _BIter, typename _Compare>
-40039:     bool
-40039:     next_permutation(_BIter, _BIter, _Compare);
-40039: 
-40039: 
-40039:   template<typename _IIter, typename _Predicate>
-40039:     bool
-40039:     none_of(_IIter, _IIter, _Predicate);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _IIter, typename _RAIter>
-40039:     _RAIter
-40039:     partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter);
-40039: 
-40039:   template<typename _IIter, typename _RAIter, typename _Compare>
-40039:     _RAIter
-40039:     partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _IIter, typename _OIter1,
-40039:     typename _OIter2, typename _Predicate>
-40039:     pair<_OIter1, _OIter2>
-40039:     partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate);
-40039: 
-40039:   template<typename _FIter, typename _Predicate>
-40039:     _FIter
-40039:     partition_point(_FIter, _FIter, _Predicate);
-40039: 
-40039: 
-40039:   template<typename _RAIter>
-40039:     void
-40039:     pop_heap(_RAIter, _RAIter);
-40039: 
-40039:   template<typename _RAIter, typename _Compare>
-40039:     void
-40039:     pop_heap(_RAIter, _RAIter, _Compare);
-40039: 
-40039:   template<typename _BIter>
-40039:     bool
-40039:     prev_permutation(_BIter, _BIter);
-40039: 
-40039:   template<typename _BIter, typename _Compare>
-40039:     bool
-40039:     prev_permutation(_BIter, _BIter, _Compare);
-40039: 
-40039:   template<typename _RAIter>
-40039:     void
-40039:     push_heap(_RAIter, _RAIter);
-40039: 
-40039:   template<typename _RAIter, typename _Compare>
-40039:     void
-40039:     push_heap(_RAIter, _RAIter, _Compare);
-40039: 
-40039: 
-40039: 
-40039:   template<typename _FIter, typename _Tp>
-40039:     _FIter
-40039:     remove(_FIter, _FIter, const _Tp&);
-40039: 
-40039:   template<typename _FIter, typename _Predicate>
-40039:     _FIter
-40039:     remove_if(_FIter, _FIter, _Predicate);
-40039: 
-40039:   template<typename _IIter, typename _OIter, typename _Tp>
-40039:     _OIter
-40039:     remove_copy(_IIter, _IIter, _OIter, const _Tp&);
-40039: 
-40039:   template<typename _IIter, typename _OIter, typename _Predicate>
-40039:     _OIter
-40039:     remove_copy_if(_IIter, _IIter, _OIter, _Predicate);
-40039: 
-40039: 
-40039: 
-40039:   template<typename _IIter, typename _OIter, typename _Tp>
-40039:     _OIter
-40039:     replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&);
-40039: 
-40039:   template<typename _Iter, typename _OIter, typename _Predicate, typename _Tp>
-40039:     _OIter
-40039:     replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&);
-40039: 
-40039: 
-40039: 
-40039:   template<typename _BIter>
-40039:     void
-40039:     reverse(_BIter, _BIter);
-40039: 
-40039:   template<typename _BIter, typename _OIter>
-40039:     _OIter
-40039:     reverse_copy(_BIter, _BIter, _OIter);
-40039: 
-40039:   inline namespace _V2
-40039:   {
-40039:     template<typename _FIter>
-40039:       _FIter
-40039:       rotate(_FIter, _FIter, _FIter);
-40039:   }
-40039: 
-40039:   template<typename _FIter, typename _OIter>
-40039:     _OIter
-40039:     rotate_copy(_FIter, _FIter, _FIter, _OIter);
-40039: # 565 "/usr/include/c++/8/bits/algorithmfwd.h" 3
-40039:   template<typename _RAIter, typename _UGenerator>
-40039:     void
-40039:     shuffle(_RAIter, _RAIter, _UGenerator&&);
-40039: 
-40039: 
-40039:   template<typename _RAIter>
-40039:     void
-40039:     sort_heap(_RAIter, _RAIter);
-40039: 
-40039:   template<typename _RAIter, typename _Compare>
-40039:     void
-40039:     sort_heap(_RAIter, _RAIter, _Compare);
-40039: 
-40039:   template<typename _BIter, typename _Predicate>
-40039:     _BIter
-40039:     stable_partition(_BIter, _BIter, _Predicate);
-40039: # 594 "/usr/include/c++/8/bits/algorithmfwd.h" 3
-40039:   template<typename _FIter1, typename _FIter2>
-40039:     _FIter2
-40039:     swap_ranges(_FIter1, _FIter1, _FIter2);
-40039: 
-40039: 
-40039: 
-40039:   template<typename _FIter>
-40039:     _FIter
-40039:     unique(_FIter, _FIter);
-40039: 
-40039:   template<typename _FIter, typename _BinaryPredicate>
-40039:     _FIter
-40039:     unique(_FIter, _FIter, _BinaryPredicate);
-40039: 
-40039: 
-40039: 
-40039:   template<typename _FIter, typename _Tp>
-40039:     _FIter
-40039:     upper_bound(_FIter, _FIter, const _Tp&);
-40039: 
-40039:   template<typename _FIter, typename _Tp, typename _Compare>
-40039:     _FIter
-40039:     upper_bound(_FIter, _FIter, const _Tp&, _Compare);
-40039: 
-40039: 
-40039: 
-40039:   template<typename _FIter>
-40039:     _FIter
-40039:     adjacent_find(_FIter, _FIter);
-40039: 
-40039:   template<typename _FIter, typename _BinaryPredicate>
-40039:     _FIter
-40039:     adjacent_find(_FIter, _FIter, _BinaryPredicate);
-40039: 
-40039:   template<typename _IIter, typename _Tp>
-40039:     typename iterator_traits<_IIter>::difference_type
-40039:     count(_IIter, _IIter, const _Tp&);
-40039: 
-40039:   template<typename _IIter, typename _Predicate>
-40039:     typename iterator_traits<_IIter>::difference_type
-40039:     count_if(_IIter, _IIter, _Predicate);
-40039: 
-40039:   template<typename _IIter1, typename _IIter2>
-40039:     bool
-40039:     equal(_IIter1, _IIter1, _IIter2);
-40039: 
-40039:   template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
-40039:     bool
-40039:     equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
-40039: 
-40039:   template<typename _IIter, typename _Tp>
-40039:     _IIter
-40039:     find(_IIter, _IIter, const _Tp&);
-40039: 
-40039:   template<typename _FIter1, typename _FIter2>
-40039:     _FIter1
-40039:     find_first_of(_FIter1, _FIter1, _FIter2, _FIter2);
-40039: 
-40039:   template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
-40039:     _FIter1
-40039:     find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
-40039: 
-40039:   template<typename _IIter, typename _Predicate>
-40039:     _IIter
-40039:     find_if(_IIter, _IIter, _Predicate);
-40039: 
-40039:   template<typename _IIter, typename _Funct>
-40039:     _Funct
-40039:     for_each(_IIter, _IIter, _Funct);
-40039: 
-40039:   template<typename _FIter, typename _Generator>
-40039:     void
-40039:     generate(_FIter, _FIter, _Generator);
-40039: 
-40039:   template<typename _OIter, typename _Size, typename _Generator>
-40039:     _OIter
-40039:     generate_n(_OIter, _Size, _Generator);
-40039: 
-40039:   template<typename _IIter1, typename _IIter2>
-40039:     bool
-40039:     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
-40039: 
-40039:   template<typename _IIter1, typename _IIter2, typename _Compare>
-40039:     bool
-40039:     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
-40039: 
-40039:   template<typename _FIter>
-40039:     constexpr
-40039:     _FIter
-40039:     max_element(_FIter, _FIter);
-40039: 
-40039:   template<typename _FIter, typename _Compare>
-40039:     constexpr
-40039:     _FIter
-40039:     max_element(_FIter, _FIter, _Compare);
-40039: 
-40039:   template<typename _IIter1, typename _IIter2, typename _OIter>
-40039:     _OIter
-40039:     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
-40039: 
-40039:   template<typename _IIter1, typename _IIter2, typename _OIter,
-40039:     typename _Compare>
-40039:     _OIter
-40039:     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
-40039: 
-40039:   template<typename _FIter>
-40039:     constexpr
-40039:     _FIter
-40039:     min_element(_FIter, _FIter);
-40039: 
-40039:   template<typename _FIter, typename _Compare>
-40039:     constexpr
-40039:     _FIter
-40039:     min_element(_FIter, _FIter, _Compare);
-40039: 
-40039:   template<typename _IIter1, typename _IIter2>
-40039:     pair<_IIter1, _IIter2>
-40039:     mismatch(_IIter1, _IIter1, _IIter2);
-40039: 
-40039:   template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
-40039:     pair<_IIter1, _IIter2>
-40039:     mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
-40039: 
-40039:   template<typename _RAIter>
-40039:     void
-40039:     nth_element(_RAIter, _RAIter, _RAIter);
-40039: 
-40039:   template<typename _RAIter, typename _Compare>
-40039:     void
-40039:     nth_element(_RAIter, _RAIter, _RAIter, _Compare);
-40039: 
-40039:   template<typename _RAIter>
-40039:     void
-40039:     partial_sort(_RAIter, _RAIter, _RAIter);
-40039: 
-40039:   template<typename _RAIter, typename _Compare>
-40039:     void
-40039:     partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
-40039: 
-40039:   template<typename _BIter, typename _Predicate>
-40039:     _BIter
-40039:     partition(_BIter, _BIter, _Predicate);
-40039: 
-40039:   template<typename _RAIter>
-40039:     void
-40039:     random_shuffle(_RAIter, _RAIter);
-40039: 
-40039:   template<typename _RAIter, typename _Generator>
-40039:     void
-40039:     random_shuffle(_RAIter, _RAIter,
-40039: 
-40039:      _Generator&&);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _FIter, typename _Tp>
-40039:     void
-40039:     replace(_FIter, _FIter, const _Tp&, const _Tp&);
-40039: 
-40039:   template<typename _FIter, typename _Predicate, typename _Tp>
-40039:     void
-40039:     replace_if(_FIter, _FIter, _Predicate, const _Tp&);
-40039: 
-40039:   template<typename _FIter1, typename _FIter2>
-40039:     _FIter1
-40039:     search(_FIter1, _FIter1, _FIter2, _FIter2);
-40039: 
-40039:   template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
-40039:     _FIter1
-40039:     search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
-40039: 
-40039:   template<typename _FIter, typename _Size, typename _Tp>
-40039:     _FIter
-40039:     search_n(_FIter, _FIter, _Size, const _Tp&);
-40039: 
-40039:   template<typename _FIter, typename _Size, typename _Tp,
-40039:     typename _BinaryPredicate>
-40039:     _FIter
-40039:     search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate);
-40039: 
-40039:   template<typename _IIter1, typename _IIter2, typename _OIter>
-40039:     _OIter
-40039:     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
-40039: 
-40039:   template<typename _IIter1, typename _IIter2, typename _OIter,
-40039:     typename _Compare>
-40039:     _OIter
-40039:     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
-40039: 
-40039:   template<typename _IIter1, typename _IIter2, typename _OIter>
-40039:     _OIter
-40039:     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
-40039: 
-40039:   template<typename _IIter1, typename _IIter2, typename _OIter,
-40039:     typename _Compare>
-40039:     _OIter
-40039:     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
-40039: 
-40039:   template<typename _IIter1, typename _IIter2, typename _OIter>
-40039:     _OIter
-40039:     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
-40039: 
-40039:   template<typename _IIter1, typename _IIter2, typename _OIter,
-40039:     typename _Compare>
-40039:     _OIter
-40039:     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2,
-40039:         _OIter, _Compare);
-40039: 
-40039:   template<typename _IIter1, typename _IIter2, typename _OIter>
-40039:     _OIter
-40039:     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
-40039: 
-40039:   template<typename _IIter1, typename _IIter2, typename _OIter,
-40039:     typename _Compare>
-40039:     _OIter
-40039:     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
-40039: 
-40039:   template<typename _RAIter>
-40039:     void
-40039:     sort(_RAIter, _RAIter);
-40039: 
-40039:   template<typename _RAIter, typename _Compare>
-40039:     void
-40039:     sort(_RAIter, _RAIter, _Compare);
-40039: 
-40039:   template<typename _RAIter>
-40039:     void
-40039:     stable_sort(_RAIter, _RAIter);
-40039: 
-40039:   template<typename _RAIter, typename _Compare>
-40039:     void
-40039:     stable_sort(_RAIter, _RAIter, _Compare);
-40039: 
-40039:   template<typename _IIter, typename _OIter, typename _UnaryOperation>
-40039:     _OIter
-40039:     transform(_IIter, _IIter, _OIter, _UnaryOperation);
-40039: 
-40039:   template<typename _IIter1, typename _IIter2, typename _OIter,
-40039:     typename _BinaryOperation>
-40039:     _OIter
-40039:     transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation);
-40039: 
-40039:   template<typename _IIter, typename _OIter>
-40039:     _OIter
-40039:     unique_copy(_IIter, _IIter, _OIter);
-40039: 
-40039:   template<typename _IIter, typename _OIter, typename _BinaryPredicate>
-40039:     _OIter
-40039:     unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 61 "/usr/include/c++/8/bits/stl_algo.h" 2 3
-40039: # 1 "/usr/include/c++/8/bits/stl_heap.h" 1 3
-40039: # 62 "/usr/include/c++/8/bits/stl_heap.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Distance,
-40039:     typename _Compare>
-40039:     _Distance
-40039:     __is_heap_until(_RandomAccessIterator __first, _Distance __n,
-40039:       _Compare& __comp)
-40039:     {
-40039:       _Distance __parent = 0;
-40039:       for (_Distance __child = 1; __child < __n; ++__child)
-40039:  {
-40039:    if (__comp(__first + __parent, __first + __child))
-40039:      return __child;
-40039:    if ((__child & 1) == 0)
-40039:      ++__parent;
-40039:  }
-40039:       return __n;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Distance>
-40039:     inline bool
-40039:     __is_heap(_RandomAccessIterator __first, _Distance __n)
-40039:     {
-40039:       __gnu_cxx::__ops::_Iter_less_iter __comp;
-40039:       return std::__is_heap_until(__first, __n, __comp) == __n;
-40039:     }
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Compare,
-40039:     typename _Distance>
-40039:     inline bool
-40039:     __is_heap(_RandomAccessIterator __first, _Compare __comp, _Distance __n)
-40039:     {
-40039:       typedef __decltype(__comp) _Cmp;
-40039:       __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp));
-40039:       return std::__is_heap_until(__first, __n, __cmp) == __n;
-40039:     }
-40039: 
-40039:   template<typename _RandomAccessIterator>
-40039:     inline bool
-40039:     __is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
-40039:     { return std::__is_heap(__first, std::distance(__first, __last)); }
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     inline bool
-40039:     __is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
-40039:        _Compare __comp)
-40039:     {
-40039:       return std::__is_heap(__first, std::move(__comp),
-40039:        std::distance(__first, __last));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Distance, typename _Tp,
-40039:     typename _Compare>
-40039:     void
-40039:     __push_heap(_RandomAccessIterator __first,
-40039:   _Distance __holeIndex, _Distance __topIndex, _Tp __value,
-40039:   _Compare& __comp)
-40039:     {
-40039:       _Distance __parent = (__holeIndex - 1) / 2;
-40039:       while (__holeIndex > __topIndex && __comp(__first + __parent, __value))
-40039:  {
-40039:    *(__first + __holeIndex) = std::move(*(__first + __parent));
-40039:    __holeIndex = __parent;
-40039:    __parent = (__holeIndex - 1) / 2;
-40039:  }
-40039:       *(__first + __holeIndex) = std::move(__value);
-40039:     }
-40039: # 152 "/usr/include/c++/8/bits/stl_heap.h" 3
-40039:   template<typename _RandomAccessIterator>
-40039:     inline void
-40039:     push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
-40039:     {
-40039:       typedef typename iterator_traits<_RandomAccessIterator>::value_type
-40039:    _ValueType;
-40039:       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
-40039:    _DistanceType;
-40039: 
-40039: 
-40039:      
-40039: 
-40039:      
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       __gnu_cxx::__ops::_Iter_less_val __comp;
-40039:       _ValueType __value = std::move(*(__last - 1));
-40039:       std::__push_heap(__first, _DistanceType((__last - __first) - 1),
-40039:          _DistanceType(0), std::move(__value), __comp);
-40039:     }
-40039: # 187 "/usr/include/c++/8/bits/stl_heap.h" 3
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     inline void
-40039:     push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
-40039:        _Compare __comp)
-40039:     {
-40039:       typedef typename iterator_traits<_RandomAccessIterator>::value_type
-40039:    _ValueType;
-40039:       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
-40039:    _DistanceType;
-40039: 
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       __decltype(__gnu_cxx::__ops::__iter_comp_val(std::move(__comp)))
-40039:  __cmp(std::move(__comp));
-40039:       _ValueType __value = std::move(*(__last - 1));
-40039:       std::__push_heap(__first, _DistanceType((__last - __first) - 1),
-40039:          _DistanceType(0), std::move(__value), __cmp);
-40039:     }
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Distance,
-40039:     typename _Tp, typename _Compare>
-40039:     void
-40039:     __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
-40039:     _Distance __len, _Tp __value, _Compare __comp)
-40039:     {
-40039:       const _Distance __topIndex = __holeIndex;
-40039:       _Distance __secondChild = __holeIndex;
-40039:       while (__secondChild < (__len - 1) / 2)
-40039:  {
-40039:    __secondChild = 2 * (__secondChild + 1);
-40039:    if (__comp(__first + __secondChild,
-40039:        __first + (__secondChild - 1)))
-40039:      __secondChild--;
-40039:    *(__first + __holeIndex) = std::move(*(__first + __secondChild));
-40039:    __holeIndex = __secondChild;
-40039:  }
-40039:       if ((__len & 1) == 0 && __secondChild == (__len - 2) / 2)
-40039:  {
-40039:    __secondChild = 2 * (__secondChild + 1);
-40039:    *(__first + __holeIndex) = std::move(*(__first + (__secondChild - 1)))
-40039:                                   ;
-40039:    __holeIndex = __secondChild - 1;
-40039:  }
-40039:       __decltype(__gnu_cxx::__ops::__iter_comp_val(std::move(__comp)))
-40039:  __cmp(std::move(__comp));
-40039:       std::__push_heap(__first, __holeIndex, __topIndex,
-40039:          std::move(__value), __cmp);
-40039:     }
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     inline void
-40039:     __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
-40039:         _RandomAccessIterator __result, _Compare& __comp)
-40039:     {
-40039:       typedef typename iterator_traits<_RandomAccessIterator>::value_type
-40039:  _ValueType;
-40039:       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
-40039:  _DistanceType;
-40039: 
-40039:       _ValueType __value = std::move(*__result);
-40039:       *__result = std::move(*__first);
-40039:       std::__adjust_heap(__first, _DistanceType(0),
-40039:     _DistanceType(__last - __first),
-40039:     std::move(__value), __comp);
-40039:     }
-40039: # 269 "/usr/include/c++/8/bits/stl_heap.h" 3
-40039:   template<typename _RandomAccessIterator>
-40039:     inline void
-40039:     pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       if (__last - __first > 1)
-40039:  {
-40039:    --__last;
-40039:    __gnu_cxx::__ops::_Iter_less_iter __comp;
-40039:    std::__pop_heap(__first, __last, __last, __comp);
-40039:  }
-40039:     }
-40039: # 302 "/usr/include/c++/8/bits/stl_heap.h" 3
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     inline void
-40039:     pop_heap(_RandomAccessIterator __first,
-40039:       _RandomAccessIterator __last, _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       if (__last - __first > 1)
-40039:  {
-40039:    typedef __decltype(__comp) _Cmp;
-40039:    __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp));
-40039:    --__last;
-40039:    std::__pop_heap(__first, __last, __last, __cmp);
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     void
-40039:     __make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
-40039:   _Compare& __comp)
-40039:     {
-40039:       typedef typename iterator_traits<_RandomAccessIterator>::value_type
-40039:    _ValueType;
-40039:       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
-40039:    _DistanceType;
-40039: 
-40039:       if (__last - __first < 2)
-40039:  return;
-40039: 
-40039:       const _DistanceType __len = __last - __first;
-40039:       _DistanceType __parent = (__len - 2) / 2;
-40039:       while (true)
-40039:  {
-40039:    _ValueType __value = std::move(*(__first + __parent));
-40039:    std::__adjust_heap(__first, __parent, __len, std::move(__value),
-40039:         __comp);
-40039:    if (__parent == 0)
-40039:      return;
-40039:    __parent--;
-40039:  }
-40039:     }
-40039: # 358 "/usr/include/c++/8/bits/stl_heap.h" 3
-40039:   template<typename _RandomAccessIterator>
-40039:     inline void
-40039:     make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       __gnu_cxx::__ops::_Iter_less_iter __comp;
-40039:       std::__make_heap(__first, __last, __comp);
-40039:     }
-40039: # 384 "/usr/include/c++/8/bits/stl_heap.h" 3
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     inline void
-40039:     make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
-40039:        _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       typedef __decltype(__comp) _Cmp;
-40039:       __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp));
-40039:       std::__make_heap(__first, __last, __cmp);
-40039:     }
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     void
-40039:     __sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
-40039:   _Compare& __comp)
-40039:     {
-40039:       while (__last - __first > 1)
-40039:  {
-40039:    --__last;
-40039:    std::__pop_heap(__first, __last, __last, __comp);
-40039:  }
-40039:     }
-40039: # 420 "/usr/include/c++/8/bits/stl_heap.h" 3
-40039:   template<typename _RandomAccessIterator>
-40039:     inline void
-40039:     sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       __gnu_cxx::__ops::_Iter_less_iter __comp;
-40039:       std::__sort_heap(__first, __last, __comp);
-40039:     }
-40039: # 447 "/usr/include/c++/8/bits/stl_heap.h" 3
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     inline void
-40039:     sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
-40039:        _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       typedef __decltype(__comp) _Cmp;
-40039:       __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp));
-40039:       std::__sort_heap(__first, __last, __cmp);
-40039:     }
-40039: # 475 "/usr/include/c++/8/bits/stl_heap.h" 3
-40039:   template<typename _RandomAccessIterator>
-40039:     inline _RandomAccessIterator
-40039:     is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       __gnu_cxx::__ops::_Iter_less_iter __comp;
-40039:       return __first +
-40039:  std::__is_heap_until(__first, std::distance(__first, __last), __comp);
-40039:     }
-40039: # 503 "/usr/include/c++/8/bits/stl_heap.h" 3
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     inline _RandomAccessIterator
-40039:     is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last,
-40039:     _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       typedef __decltype(__comp) _Cmp;
-40039:       __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp));
-40039:       return __first
-40039:  + std::__is_heap_until(__first, std::distance(__first, __last), __cmp);
-40039:     }
-40039: # 527 "/usr/include/c++/8/bits/stl_heap.h" 3
-40039:   template<typename _RandomAccessIterator>
-40039:     inline bool
-40039:     is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
-40039:     { return std::is_heap_until(__first, __last) == __last; }
-40039: # 540 "/usr/include/c++/8/bits/stl_heap.h" 3
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     inline bool
-40039:     is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
-40039:      _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       const auto __dist = std::distance(__first, __last);
-40039:       typedef __decltype(__comp) _Cmp;
-40039:       __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp));
-40039:       return std::__is_heap_until(__first, __dist, __cmp) == __dist;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 62 "/usr/include/c++/8/bits/stl_algo.h" 2 3
-40039: # 1 "/usr/include/c++/8/bits/stl_tempbuf.h" 1 3
-40039: # 60 "/usr/include/c++/8/bits/stl_tempbuf.h" 3
-40039: # 1 "/usr/include/c++/8/bits/stl_construct.h" 1 3
-40039: # 59 "/usr/include/c++/8/bits/stl_construct.h" 3
-40039: # 1 "/usr/include/c++/8/new" 1 3
-40039: # 37 "/usr/include/c++/8/new" 3
-40039:        
-40039: # 38 "/usr/include/c++/8/new" 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/exception" 1 3
-40039: # 33 "/usr/include/c++/8/exception" 3
-40039:        
-40039: # 34 "/usr/include/c++/8/exception" 3
-40039: 
-40039: #pragma GCC visibility push(default)
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/exception.h" 1 3
-40039: # 34 "/usr/include/c++/8/bits/exception.h" 3
-40039:        
-40039: # 35 "/usr/include/c++/8/bits/exception.h" 3
-40039: 
-40039: #pragma GCC visibility push(default)
-40039: 
-40039: 
-40039: 
-40039: extern "C++" {
-40039: 
-40039: namespace std
-40039: {
-40039: # 60 "/usr/include/c++/8/bits/exception.h" 3
-40039:   class exception
-40039:   {
-40039:   public:
-40039:     exception() noexcept { }
-40039:     virtual ~exception() noexcept;
-40039: 
-40039: 
-40039: 
-40039:     virtual const char*
-40039:     what() const noexcept;
-40039:   };
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: #pragma GCC visibility pop
-40039: # 39 "/usr/include/c++/8/exception" 2 3
-40039: 
-40039: extern "C++" {
-40039: 
-40039: namespace std
-40039: {
-40039: 
-40039: 
-40039:   class bad_exception : public exception
-40039:   {
-40039:   public:
-40039:     bad_exception() noexcept { }
-40039: 
-40039: 
-40039: 
-40039:     virtual ~bad_exception() noexcept;
-40039: 
-40039: 
-40039:     virtual const char*
-40039:     what() const noexcept;
-40039:   };
-40039: 
-40039: 
-40039:   typedef void (*terminate_handler) ();
-40039: 
-40039: 
-40039:   typedef void (*unexpected_handler) ();
-40039: 
-40039: 
-40039:   terminate_handler set_terminate(terminate_handler) noexcept;
-40039: 
-40039: 
-40039: 
-40039:   terminate_handler get_terminate() noexcept;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void terminate() noexcept __attribute__ ((__noreturn__));
-40039: 
-40039: 
-40039:   unexpected_handler set_unexpected(unexpected_handler) noexcept;
-40039: 
-40039: 
-40039: 
-40039:   unexpected_handler get_unexpected() noexcept;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void unexpected() __attribute__ ((__noreturn__));
-40039: # 101 "/usr/include/c++/8/exception" 3
-40039:  
-40039:   bool uncaught_exception() noexcept __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   int uncaught_exceptions() noexcept __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: namespace __gnu_cxx
-40039: {
-40039: 
-40039: # 133 "/usr/include/c++/8/exception" 3
-40039:   void __verbose_terminate_handler();
-40039: 
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: #pragma GCC visibility pop
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/exception_ptr.h" 1 3
-40039: # 34 "/usr/include/c++/8/bits/exception_ptr.h" 3
-40039: #pragma GCC visibility push(default)
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/cxxabi_init_exception.h" 1 3
-40039: # 34 "/usr/include/c++/8/bits/cxxabi_init_exception.h" 3
-40039:        
-40039: # 35 "/usr/include/c++/8/bits/cxxabi_init_exception.h" 3
-40039: 
-40039: #pragma GCC visibility push(default)
-40039: 
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
-40039: # 149 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 3 4
-40039: typedef long int ptrdiff_t;
-40039: # 426 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 3 4
-40039: typedef struct {
-40039:   long long __max_align_ll __attribute__((__aligned__(__alignof__(long long))));
-40039:   long double __max_align_ld __attribute__((__aligned__(__alignof__(long double))));
-40039: # 437 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 3 4
-40039: } max_align_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef decltype(nullptr) nullptr_t;
-40039: # 39 "/usr/include/c++/8/bits/cxxabi_init_exception.h" 2 3
-40039: # 50 "/usr/include/c++/8/bits/cxxabi_init_exception.h" 3
-40039: namespace std
-40039: {
-40039:   class type_info;
-40039: }
-40039: 
-40039: namespace __cxxabiv1
-40039: {
-40039:   struct __cxa_refcounted_exception;
-40039: 
-40039:   extern "C"
-40039:     {
-40039: 
-40039:       void*
-40039:       __cxa_allocate_exception(size_t) noexcept;
-40039: 
-40039:       void
-40039:       __cxa_free_exception(void*) noexcept;
-40039: 
-40039: 
-40039:       __cxa_refcounted_exception*
-40039:       __cxa_init_primary_exception(void *object, std::type_info *tinfo,
-40039:                 void ( *dest) (void *)) noexcept;
-40039: 
-40039:     }
-40039: }
-40039: 
-40039: 
-40039: 
-40039: #pragma GCC visibility pop
-40039: # 39 "/usr/include/c++/8/bits/exception_ptr.h" 2 3
-40039: # 1 "/usr/include/c++/8/typeinfo" 1 3
-40039: # 32 "/usr/include/c++/8/typeinfo" 3
-40039:        
-40039: # 33 "/usr/include/c++/8/typeinfo" 3
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/hash_bytes.h" 1 3
-40039: # 33 "/usr/include/c++/8/bits/hash_bytes.h" 3
-40039:        
-40039: # 34 "/usr/include/c++/8/bits/hash_bytes.h" 3
-40039: 
-40039: 
-40039: 
-40039: namespace std
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   size_t
-40039:   _Hash_bytes(const void* __ptr, size_t __len, size_t __seed);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   size_t
-40039:   _Fnv_hash_bytes(const void* __ptr, size_t __len, size_t __seed);
-40039: 
-40039: 
-40039: }
-40039: # 37 "/usr/include/c++/8/typeinfo" 2 3
-40039: 
-40039: 
-40039: #pragma GCC visibility push(default)
-40039: 
-40039: extern "C++" {
-40039: 
-40039: namespace __cxxabiv1
-40039: {
-40039:   class __class_type_info;
-40039: }
-40039: # 80 "/usr/include/c++/8/typeinfo" 3
-40039: namespace std
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   class type_info
-40039:   {
-40039:   public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     virtual ~type_info();
-40039: 
-40039: 
-40039: 
-40039:     const char* name() const noexcept
-40039:     { return __name[0] == '*' ? __name + 1 : __name; }
-40039: # 115 "/usr/include/c++/8/typeinfo" 3
-40039:     bool before(const type_info& __arg) const noexcept
-40039:     { return (__name[0] == '*' && __arg.__name[0] == '*')
-40039:  ? __name < __arg.__name
-40039:  : __builtin_strcmp (__name, __arg.__name) < 0; }
-40039: 
-40039:     bool operator==(const type_info& __arg) const noexcept
-40039:     {
-40039:       return ((__name == __arg.__name)
-40039:        || (__name[0] != '*' &&
-40039:     __builtin_strcmp (__name, __arg.__name) == 0));
-40039:     }
-40039: # 136 "/usr/include/c++/8/typeinfo" 3
-40039:     bool operator!=(const type_info& __arg) const noexcept
-40039:     { return !operator==(__arg); }
-40039: 
-40039: 
-40039:     size_t hash_code() const noexcept
-40039:     {
-40039: 
-40039:       return _Hash_bytes(name(), __builtin_strlen(name()),
-40039:     static_cast<size_t>(0xc70f6907UL));
-40039: 
-40039: 
-40039: 
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:     virtual bool __is_pointer_p() const;
-40039: 
-40039: 
-40039:     virtual bool __is_function_p() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     virtual bool __do_catch(const type_info *__thr_type, void **__thr_obj,
-40039:        unsigned __outer) const;
-40039: 
-40039: 
-40039:     virtual bool __do_upcast(const __cxxabiv1::__class_type_info *__target,
-40039:         void **__obj_ptr) const;
-40039: 
-40039:   protected:
-40039:     const char *__name;
-40039: 
-40039:     explicit type_info(const char *__n): __name(__n) { }
-40039: 
-40039:   private:
-40039: 
-40039:     type_info& operator=(const type_info&);
-40039:     type_info(const type_info&);
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   class bad_cast : public exception
-40039:   {
-40039:   public:
-40039:     bad_cast() noexcept { }
-40039: 
-40039: 
-40039: 
-40039:     virtual ~bad_cast() noexcept;
-40039: 
-40039: 
-40039:     virtual const char* what() const noexcept;
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   class bad_typeid : public exception
-40039:   {
-40039:   public:
-40039:     bad_typeid () noexcept { }
-40039: 
-40039: 
-40039: 
-40039:     virtual ~bad_typeid() noexcept;
-40039: 
-40039: 
-40039:     virtual const char* what() const noexcept;
-40039:   };
-40039: }
-40039: 
-40039: }
-40039: 
-40039: #pragma GCC visibility pop
-40039: # 40 "/usr/include/c++/8/bits/exception_ptr.h" 2 3
-40039: # 1 "/usr/include/c++/8/new" 1 3
-40039: # 41 "/usr/include/c++/8/bits/exception_ptr.h" 2 3
-40039: 
-40039: extern "C++" {
-40039: 
-40039: namespace std
-40039: {
-40039:   class type_info;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   namespace __exception_ptr
-40039:   {
-40039:     class exception_ptr;
-40039:   }
-40039: 
-40039:   using __exception_ptr::exception_ptr;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   exception_ptr current_exception() noexcept;
-40039: 
-40039:   template<typename _Ex>
-40039:   exception_ptr make_exception_ptr(_Ex) noexcept;
-40039: 
-40039: 
-40039:   void rethrow_exception(exception_ptr) __attribute__ ((__noreturn__));
-40039: 
-40039:   namespace __exception_ptr
-40039:   {
-40039:     using std::rethrow_exception;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     class exception_ptr
-40039:     {
-40039:       void* _M_exception_object;
-40039: 
-40039:       explicit exception_ptr(void* __e) noexcept;
-40039: 
-40039:       void _M_addref() noexcept;
-40039:       void _M_release() noexcept;
-40039: 
-40039:       void *_M_get() const noexcept __attribute__ ((__pure__));
-40039: 
-40039:       friend exception_ptr std::current_exception() noexcept;
-40039:       friend void std::rethrow_exception(exception_ptr);
-40039:       template<typename _Ex>
-40039:       friend exception_ptr std::make_exception_ptr(_Ex) noexcept;
-40039: 
-40039:     public:
-40039:       exception_ptr() noexcept;
-40039: 
-40039:       exception_ptr(const exception_ptr&) noexcept;
-40039: 
-40039: 
-40039:       exception_ptr(nullptr_t) noexcept
-40039:       : _M_exception_object(0)
-40039:       { }
-40039: 
-40039:       exception_ptr(exception_ptr&& __o) noexcept
-40039:       : _M_exception_object(__o._M_exception_object)
-40039:       { __o._M_exception_object = 0; }
-40039: # 117 "/usr/include/c++/8/bits/exception_ptr.h" 3
-40039:       exception_ptr&
-40039:       operator=(const exception_ptr&) noexcept;
-40039: 
-40039: 
-40039:       exception_ptr&
-40039:       operator=(exception_ptr&& __o) noexcept
-40039:       {
-40039:         exception_ptr(static_cast<exception_ptr&&>(__o)).swap(*this);
-40039:         return *this;
-40039:       }
-40039: 
-40039: 
-40039:       ~exception_ptr() noexcept;
-40039: 
-40039:       void
-40039:       swap(exception_ptr&) noexcept;
-40039: # 144 "/usr/include/c++/8/bits/exception_ptr.h" 3
-40039:       explicit operator bool() const
-40039:       { return _M_exception_object; }
-40039: 
-40039: 
-40039:       friend bool
-40039:       operator==(const exception_ptr&, const exception_ptr&)
-40039:  noexcept __attribute__ ((__pure__));
-40039: 
-40039:       const class std::type_info*
-40039:       __cxa_exception_type() const noexcept
-40039:  __attribute__ ((__pure__));
-40039:     };
-40039: 
-40039:     bool
-40039:     operator==(const exception_ptr&, const exception_ptr&)
-40039:       noexcept __attribute__ ((__pure__));
-40039: 
-40039:     bool
-40039:     operator!=(const exception_ptr&, const exception_ptr&)
-40039:       noexcept __attribute__ ((__pure__));
-40039: 
-40039:     inline void
-40039:     swap(exception_ptr& __lhs, exception_ptr& __rhs)
-40039:     { __lhs.swap(__rhs); }
-40039: 
-40039:     template<typename _Ex>
-40039:       inline void
-40039:       __dest_thunk(void* __x)
-40039:       { static_cast<_Ex*>(__x)->~_Ex(); }
-40039: 
-40039:   }
-40039: 
-40039: 
-40039:   template<typename _Ex>
-40039:     exception_ptr
-40039:     make_exception_ptr(_Ex __ex) noexcept
-40039:     {
-40039: 
-40039:       void* __e = __cxxabiv1::__cxa_allocate_exception(sizeof(_Ex));
-40039:       (void) __cxxabiv1::__cxa_init_primary_exception(
-40039:    __e, const_cast<std::type_info*>(&typeid(__ex)),
-40039:    __exception_ptr::__dest_thunk<_Ex>);
-40039:       try
-40039:  {
-40039:           ::new (__e) _Ex(__ex);
-40039:           return exception_ptr(__e);
-40039:  }
-40039:       catch(...)
-40039:  {
-40039:    __cxxabiv1::__cxa_free_exception(__e);
-40039:    return current_exception();
-40039:  }
-40039: # 208 "/usr/include/c++/8/bits/exception_ptr.h" 3
-40039:     }
-40039: 
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: #pragma GCC visibility pop
-40039: # 144 "/usr/include/c++/8/exception" 2 3
-40039: # 1 "/usr/include/c++/8/bits/nested_exception.h" 1 3
-40039: # 33 "/usr/include/c++/8/bits/nested_exception.h" 3
-40039: #pragma GCC visibility push(default)
-40039: # 42 "/usr/include/c++/8/bits/nested_exception.h" 3
-40039: extern "C++" {
-40039: 
-40039: namespace std
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   class nested_exception
-40039:   {
-40039:     exception_ptr _M_ptr;
-40039: 
-40039:   public:
-40039:     nested_exception() noexcept : _M_ptr(current_exception()) { }
-40039: 
-40039:     nested_exception(const nested_exception&) noexcept = default;
-40039: 
-40039:     nested_exception& operator=(const nested_exception&) noexcept = default;
-40039: 
-40039:     virtual ~nested_exception() noexcept;
-40039: 
-40039:     [[noreturn]]
-40039:     void
-40039:     rethrow_nested() const
-40039:     {
-40039:       if (_M_ptr)
-40039:  rethrow_exception(_M_ptr);
-40039:       std::terminate();
-40039:     }
-40039: 
-40039:     exception_ptr
-40039:     nested_ptr() const noexcept
-40039:     { return _M_ptr; }
-40039:   };
-40039: 
-40039:   template<typename _Except>
-40039:     struct _Nested_exception : public _Except, public nested_exception
-40039:     {
-40039:       explicit _Nested_exception(const _Except& __ex)
-40039:       : _Except(__ex)
-40039:       { }
-40039: 
-40039:       explicit _Nested_exception(_Except&& __ex)
-40039:       : _Except(static_cast<_Except&&>(__ex))
-40039:       { }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     [[noreturn]]
-40039:     inline void
-40039:     __throw_with_nested_impl(_Tp&& __t, true_type)
-40039:     {
-40039:       using _Up = typename remove_reference<_Tp>::type;
-40039:       throw _Nested_exception<_Up>{std::forward<_Tp>(__t)};
-40039:     }
-40039: 
-40039:   template<typename _Tp>
-40039:     [[noreturn]]
-40039:     inline void
-40039:     __throw_with_nested_impl(_Tp&& __t, false_type)
-40039:     { throw std::forward<_Tp>(__t); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     [[noreturn]]
-40039:     inline void
-40039:     throw_with_nested(_Tp&& __t)
-40039:     {
-40039:       using _Up = typename decay<_Tp>::type;
-40039:       using _CopyConstructible
-40039:  = __and_<is_copy_constructible<_Up>, is_move_constructible<_Up>>;
-40039:       static_assert(_CopyConstructible::value,
-40039:    "throw_with_nested argument must be CopyConstructible");
-40039:       using __nest = __and_<is_class<_Up>, __bool_constant<!__is_final(_Up)>,
-40039:        __not_<is_base_of<nested_exception, _Up>>>;
-40039:       std::__throw_with_nested_impl(std::forward<_Tp>(__t), __nest{});
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     using __rethrow_if_nested_cond = typename enable_if<
-40039:       __and_<is_polymorphic<_Tp>,
-40039:       __or_<__not_<is_base_of<nested_exception, _Tp>>,
-40039:      is_convertible<_Tp*, nested_exception*>>>::value
-40039:     >::type;
-40039: 
-40039: 
-40039:   template<typename _Ex>
-40039:     inline __rethrow_if_nested_cond<_Ex>
-40039:     __rethrow_if_nested_impl(const _Ex* __ptr)
-40039:     {
-40039:       if (auto __ne_ptr = dynamic_cast<const nested_exception*>(__ptr))
-40039:  __ne_ptr->rethrow_nested();
-40039:     }
-40039: 
-40039: 
-40039:   inline void
-40039:   __rethrow_if_nested_impl(const void*)
-40039:   { }
-40039: 
-40039: 
-40039:   template<typename _Ex>
-40039:     inline void
-40039:     rethrow_if_nested(const _Ex& __ex)
-40039:     { std::__rethrow_if_nested_impl(std::__addressof(__ex)); }
-40039: 
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: #pragma GCC visibility pop
-40039: # 145 "/usr/include/c++/8/exception" 2 3
-40039: # 41 "/usr/include/c++/8/new" 2 3
-40039: 
-40039: #pragma GCC visibility push(default)
-40039: 
-40039: extern "C++" {
-40039: 
-40039: namespace std
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   class bad_alloc : public exception
-40039:   {
-40039:   public:
-40039:     bad_alloc() throw() { }
-40039: 
-40039: 
-40039: 
-40039:     virtual ~bad_alloc() throw();
-40039: 
-40039: 
-40039:     virtual const char* what() const throw();
-40039:   };
-40039: 
-40039: 
-40039:   class bad_array_new_length : public bad_alloc
-40039:   {
-40039:   public:
-40039:     bad_array_new_length() throw() { }
-40039: 
-40039: 
-40039: 
-40039:     virtual ~bad_array_new_length() throw();
-40039: 
-40039: 
-40039:     virtual const char* what() const throw();
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   struct nothrow_t
-40039:   {
-40039: 
-40039:     explicit nothrow_t() = default;
-40039: 
-40039:   };
-40039: 
-40039:   extern const nothrow_t nothrow;
-40039: 
-40039: 
-40039: 
-40039:   typedef void (*new_handler)();
-40039: 
-40039: 
-40039: 
-40039:   new_handler set_new_handler(new_handler) throw();
-40039: 
-40039: 
-40039: 
-40039:   new_handler get_new_handler() noexcept;
-40039: 
-40039: }
-40039: # 120 "/usr/include/c++/8/new" 3
-40039: void* operator new(std::size_t)
-40039:   __attribute__((__externally_visible__));
-40039: void* operator new[](std::size_t)
-40039:   __attribute__((__externally_visible__));
-40039: void operator delete(void*) noexcept
-40039:   __attribute__((__externally_visible__));
-40039: void operator delete[](void*) noexcept
-40039:   __attribute__((__externally_visible__));
-40039: 
-40039: void operator delete(void*, std::size_t) noexcept
-40039:   __attribute__((__externally_visible__));
-40039: void operator delete[](void*, std::size_t) noexcept
-40039:   __attribute__((__externally_visible__));
-40039: 
-40039: void* operator new(std::size_t, const std::nothrow_t&) noexcept
-40039:   __attribute__((__externally_visible__));
-40039: void* operator new[](std::size_t, const std::nothrow_t&) noexcept
-40039:   __attribute__((__externally_visible__));
-40039: void operator delete(void*, const std::nothrow_t&) noexcept
-40039:   __attribute__((__externally_visible__));
-40039: void operator delete[](void*, const std::nothrow_t&) noexcept
-40039:   __attribute__((__externally_visible__));
-40039: # 168 "/usr/include/c++/8/new" 3
-40039: inline void* operator new(std::size_t, void* __p) noexcept
-40039: { return __p; }
-40039: inline void* operator new[](std::size_t, void* __p) noexcept
-40039: { return __p; }
-40039: 
-40039: 
-40039: inline void operator delete (void*, void*) noexcept { }
-40039: inline void operator delete[](void*, void*) noexcept { }
-40039: 
-40039: }
-40039: # 216 "/usr/include/c++/8/new" 3
-40039: #pragma GCC visibility pop
-40039: # 60 "/usr/include/c++/8/bits/stl_construct.h" 2 3
-40039: 
-40039: # 1 "/usr/include/c++/8/ext/alloc_traits.h" 1 3
-40039: # 32 "/usr/include/c++/8/ext/alloc_traits.h" 3
-40039:        
-40039: # 33 "/usr/include/c++/8/ext/alloc_traits.h" 3
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/alloc_traits.h" 1 3
-40039: # 41 "/usr/include/c++/8/bits/alloc_traits.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   struct __allocator_traits_base
-40039:   {
-40039:     template<typename _Tp, typename _Up, typename = void>
-40039:       struct __rebind : __replace_first_arg<_Tp, _Up> { };
-40039: 
-40039:     template<typename _Tp, typename _Up>
-40039:       struct __rebind<_Tp, _Up,
-40039:         __void_t<typename _Tp::template rebind<_Up>::other>>
-40039:       { using type = typename _Tp::template rebind<_Up>::other; };
-40039: 
-40039:   protected:
-40039:     template<typename _Tp>
-40039:       using __pointer = typename _Tp::pointer;
-40039:     template<typename _Tp>
-40039:       using __c_pointer = typename _Tp::const_pointer;
-40039:     template<typename _Tp>
-40039:       using __v_pointer = typename _Tp::void_pointer;
-40039:     template<typename _Tp>
-40039:       using __cv_pointer = typename _Tp::const_void_pointer;
-40039:     template<typename _Tp>
-40039:       using __pocca = typename _Tp::propagate_on_container_copy_assignment;
-40039:     template<typename _Tp>
-40039:       using __pocma = typename _Tp::propagate_on_container_move_assignment;
-40039:     template<typename _Tp>
-40039:       using __pocs = typename _Tp::propagate_on_container_swap;
-40039:     template<typename _Tp>
-40039:       using __equal = typename _Tp::is_always_equal;
-40039:   };
-40039: 
-40039:   template<typename _Alloc, typename _Up>
-40039:     using __alloc_rebind
-40039:       = typename __allocator_traits_base::template __rebind<_Alloc, _Up>::type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Alloc>
-40039:     struct allocator_traits : __allocator_traits_base
-40039:     {
-40039: 
-40039:       typedef _Alloc allocator_type;
-40039: 
-40039:       typedef typename _Alloc::value_type value_type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       using pointer = __detected_or_t<value_type*, __pointer, _Alloc>;
-40039: 
-40039:     private:
-40039: 
-40039:       template<template<typename> class _Func, typename _Tp, typename = void>
-40039:  struct _Ptr
-40039:  {
-40039:    using type = typename pointer_traits<pointer>::template rebind<_Tp>;
-40039:  };
-40039: 
-40039:       template<template<typename> class _Func, typename _Tp>
-40039:  struct _Ptr<_Func, _Tp, __void_t<_Func<_Alloc>>>
-40039:  {
-40039:    using type = _Func<_Alloc>;
-40039:  };
-40039: 
-40039: 
-40039:       template<typename _A2, typename _PtrT, typename = void>
-40039:  struct _Diff
-40039:  { using type = typename pointer_traits<_PtrT>::difference_type; };
-40039: 
-40039:       template<typename _A2, typename _PtrT>
-40039:  struct _Diff<_A2, _PtrT, __void_t<typename _A2::difference_type>>
-40039:  { using type = typename _A2::difference_type; };
-40039: 
-40039: 
-40039:       template<typename _A2, typename _DiffT, typename = void>
-40039:  struct _Size : make_unsigned<_DiffT> { };
-40039: 
-40039:       template<typename _A2, typename _DiffT>
-40039:  struct _Size<_A2, _DiffT, __void_t<typename _A2::size_type>>
-40039:  { using type = typename _A2::size_type; };
-40039: 
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       using const_pointer = typename _Ptr<__c_pointer, const value_type>::type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       using void_pointer = typename _Ptr<__v_pointer, void>::type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       using const_void_pointer = typename _Ptr<__cv_pointer, const void>::type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       using difference_type = typename _Diff<_Alloc, pointer>::type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       using size_type = typename _Size<_Alloc, difference_type>::type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       using propagate_on_container_copy_assignment
-40039:  = __detected_or_t<false_type, __pocca, _Alloc>;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       using propagate_on_container_move_assignment
-40039:  = __detected_or_t<false_type, __pocma, _Alloc>;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       using propagate_on_container_swap
-40039:  = __detected_or_t<false_type, __pocs, _Alloc>;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       using is_always_equal
-40039:  = __detected_or_t<typename is_empty<_Alloc>::type, __equal, _Alloc>;
-40039: 
-40039:       template<typename _Tp>
-40039:  using rebind_alloc = __alloc_rebind<_Alloc, _Tp>;
-40039:       template<typename _Tp>
-40039:  using rebind_traits = allocator_traits<rebind_alloc<_Tp>>;
-40039: 
-40039:     private:
-40039:       template<typename _Alloc2>
-40039:  static auto
-40039:  _S_allocate(_Alloc2& __a, size_type __n, const_void_pointer __hint, int)
-40039:  -> decltype(__a.allocate(__n, __hint))
-40039:  { return __a.allocate(__n, __hint); }
-40039: 
-40039:       template<typename _Alloc2>
-40039:  static pointer
-40039:  _S_allocate(_Alloc2& __a, size_type __n, const_void_pointer, ...)
-40039:  { return __a.allocate(__n); }
-40039: 
-40039:       template<typename _Tp, typename... _Args>
-40039:  struct __construct_helper
-40039:  {
-40039:    template<typename _Alloc2,
-40039:      typename = decltype(std::declval<_Alloc2*>()->construct(
-40039:     std::declval<_Tp*>(), std::declval<_Args>()...))>
-40039:      static true_type __test(int);
-40039: 
-40039:    template<typename>
-40039:      static false_type __test(...);
-40039: 
-40039:    using type = decltype(__test<_Alloc>(0));
-40039:  };
-40039: 
-40039:       template<typename _Tp, typename... _Args>
-40039:  using __has_construct
-40039:    = typename __construct_helper<_Tp, _Args...>::type;
-40039: 
-40039:       template<typename _Tp, typename... _Args>
-40039:  static _Require<__has_construct<_Tp, _Args...>>
-40039:  _S_construct(_Alloc& __a, _Tp* __p, _Args&&... __args)
-40039:  { __a.construct(__p, std::forward<_Args>(__args)...); }
-40039: 
-40039:       template<typename _Tp, typename... _Args>
-40039:  static
-40039:  _Require<__and_<__not_<__has_construct<_Tp, _Args...>>,
-40039:           is_constructible<_Tp, _Args...>>>
-40039:  _S_construct(_Alloc&, _Tp* __p, _Args&&... __args)
-40039:  { ::new((void*)__p) _Tp(std::forward<_Args>(__args)...); }
-40039: 
-40039:       template<typename _Alloc2, typename _Tp>
-40039:  static auto
-40039:  _S_destroy(_Alloc2& __a, _Tp* __p, int)
-40039:  -> decltype(__a.destroy(__p))
-40039:  { __a.destroy(__p); }
-40039: 
-40039:       template<typename _Alloc2, typename _Tp>
-40039:  static void
-40039:  _S_destroy(_Alloc2&, _Tp* __p, ...)
-40039:  { __p->~_Tp(); }
-40039: 
-40039:       template<typename _Alloc2>
-40039:  static auto
-40039:  _S_max_size(_Alloc2& __a, int)
-40039:  -> decltype(__a.max_size())
-40039:  { return __a.max_size(); }
-40039: 
-40039:       template<typename _Alloc2>
-40039:  static size_type
-40039:  _S_max_size(_Alloc2&, ...)
-40039:  {
-40039: 
-40039: 
-40039:    return __gnu_cxx::__numeric_traits<size_type>::__max
-40039:      / sizeof(value_type);
-40039:  }
-40039: 
-40039:       template<typename _Alloc2>
-40039:  static auto
-40039:  _S_select(_Alloc2& __a, int)
-40039:  -> decltype(__a.select_on_container_copy_construction())
-40039:  { return __a.select_on_container_copy_construction(); }
-40039: 
-40039:       template<typename _Alloc2>
-40039:  static _Alloc2
-40039:  _S_select(_Alloc2& __a, ...)
-40039:  { return __a; }
-40039: 
-40039:     public:
-40039: # 299 "/usr/include/c++/8/bits/alloc_traits.h" 3
-40039:       static pointer
-40039:       allocate(_Alloc& __a, size_type __n)
-40039:       { return __a.allocate(__n); }
-40039: # 314 "/usr/include/c++/8/bits/alloc_traits.h" 3
-40039:       static pointer
-40039:       allocate(_Alloc& __a, size_type __n, const_void_pointer __hint)
-40039:       { return _S_allocate(__a, __n, __hint, 0); }
-40039: # 326 "/usr/include/c++/8/bits/alloc_traits.h" 3
-40039:       static void
-40039:       deallocate(_Alloc& __a, pointer __p, size_type __n)
-40039:       { __a.deallocate(__p, __n); }
-40039: # 341 "/usr/include/c++/8/bits/alloc_traits.h" 3
-40039:       template<typename _Tp, typename... _Args>
-40039:  static auto construct(_Alloc& __a, _Tp* __p, _Args&&... __args)
-40039:  -> decltype(_S_construct(__a, __p, std::forward<_Args>(__args)...))
-40039:  { _S_construct(__a, __p, std::forward<_Args>(__args)...); }
-40039: # 354 "/usr/include/c++/8/bits/alloc_traits.h" 3
-40039:       template<typename _Tp>
-40039:  static void destroy(_Alloc& __a, _Tp* __p)
-40039:  { _S_destroy(__a, __p, 0); }
-40039: # 366 "/usr/include/c++/8/bits/alloc_traits.h" 3
-40039:       static size_type max_size(const _Alloc& __a) noexcept
-40039:       { return _S_max_size(__a, 0); }
-40039: # 377 "/usr/include/c++/8/bits/alloc_traits.h" 3
-40039:       static _Alloc
-40039:       select_on_container_copy_construction(const _Alloc& __rhs)
-40039:       { return _S_select(__rhs, 0); }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct allocator_traits<allocator<_Tp>>
-40039:     {
-40039: 
-40039:       using allocator_type = allocator<_Tp>;
-40039: 
-40039:       using value_type = _Tp;
-40039: 
-40039: 
-40039:       using pointer = _Tp*;
-40039: 
-40039: 
-40039:       using const_pointer = const _Tp*;
-40039: 
-40039: 
-40039:       using void_pointer = void*;
-40039: 
-40039: 
-40039:       using const_void_pointer = const void*;
-40039: 
-40039: 
-40039:       using difference_type = std::ptrdiff_t;
-40039: 
-40039: 
-40039:       using size_type = std::size_t;
-40039: 
-40039: 
-40039:       using propagate_on_container_copy_assignment = false_type;
-40039: 
-40039: 
-40039:       using propagate_on_container_move_assignment = true_type;
-40039: 
-40039: 
-40039:       using propagate_on_container_swap = false_type;
-40039: 
-40039: 
-40039:       using is_always_equal = true_type;
-40039: 
-40039:       template<typename _Up>
-40039:  using rebind_alloc = allocator<_Up>;
-40039: 
-40039:       template<typename _Up>
-40039:  using rebind_traits = allocator_traits<allocator<_Up>>;
-40039: # 434 "/usr/include/c++/8/bits/alloc_traits.h" 3
-40039:       static pointer
-40039:       allocate(allocator_type& __a, size_type __n)
-40039:       { return __a.allocate(__n); }
-40039: # 448 "/usr/include/c++/8/bits/alloc_traits.h" 3
-40039:       static pointer
-40039:       allocate(allocator_type& __a, size_type __n, const_void_pointer __hint)
-40039:       { return __a.allocate(__n, __hint); }
-40039: # 460 "/usr/include/c++/8/bits/alloc_traits.h" 3
-40039:       static void
-40039:       deallocate(allocator_type& __a, pointer __p, size_type __n)
-40039:       { __a.deallocate(__p, __n); }
-40039: # 472 "/usr/include/c++/8/bits/alloc_traits.h" 3
-40039:       template<typename _Up, typename... _Args>
-40039:  static void
-40039:  construct(allocator_type& __a, _Up* __p, _Args&&... __args)
-40039:  { __a.construct(__p, std::forward<_Args>(__args)...); }
-40039: # 484 "/usr/include/c++/8/bits/alloc_traits.h" 3
-40039:       template<typename _Up>
-40039:  static void
-40039:  destroy(allocator_type& __a, _Up* __p)
-40039:  { __a.destroy(__p); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       static size_type
-40039:       max_size(const allocator_type& __a) noexcept
-40039:       { return __a.max_size(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       static allocator_type
-40039:       select_on_container_copy_construction(const allocator_type& __rhs)
-40039:       { return __rhs; }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Alloc>
-40039:     inline void
-40039:     __do_alloc_on_copy(_Alloc& __one, const _Alloc& __two, true_type)
-40039:     { __one = __two; }
-40039: 
-40039:   template<typename _Alloc>
-40039:     inline void
-40039:     __do_alloc_on_copy(_Alloc&, const _Alloc&, false_type)
-40039:     { }
-40039: 
-40039:   template<typename _Alloc>
-40039:     inline void __alloc_on_copy(_Alloc& __one, const _Alloc& __two)
-40039:     {
-40039:       typedef allocator_traits<_Alloc> __traits;
-40039:       typedef typename __traits::propagate_on_container_copy_assignment __pocca;
-40039:       __do_alloc_on_copy(__one, __two, __pocca());
-40039:     }
-40039: 
-40039:   template<typename _Alloc>
-40039:     inline _Alloc __alloc_on_copy(const _Alloc& __a)
-40039:     {
-40039:       typedef allocator_traits<_Alloc> __traits;
-40039:       return __traits::select_on_container_copy_construction(__a);
-40039:     }
-40039: 
-40039:   template<typename _Alloc>
-40039:     inline void __do_alloc_on_move(_Alloc& __one, _Alloc& __two, true_type)
-40039:     { __one = std::move(__two); }
-40039: 
-40039:   template<typename _Alloc>
-40039:     inline void __do_alloc_on_move(_Alloc&, _Alloc&, false_type)
-40039:     { }
-40039: 
-40039:   template<typename _Alloc>
-40039:     inline void __alloc_on_move(_Alloc& __one, _Alloc& __two)
-40039:     {
-40039:       typedef allocator_traits<_Alloc> __traits;
-40039:       typedef typename __traits::propagate_on_container_move_assignment __pocma;
-40039:       __do_alloc_on_move(__one, __two, __pocma());
-40039:     }
-40039: 
-40039:   template<typename _Alloc>
-40039:     inline void __do_alloc_on_swap(_Alloc& __one, _Alloc& __two, true_type)
-40039:     {
-40039:       using std::swap;
-40039:       swap(__one, __two);
-40039:     }
-40039: 
-40039:   template<typename _Alloc>
-40039:     inline void __do_alloc_on_swap(_Alloc&, _Alloc&, false_type)
-40039:     { }
-40039: 
-40039:   template<typename _Alloc>
-40039:     inline void __alloc_on_swap(_Alloc& __one, _Alloc& __two)
-40039:     {
-40039:       typedef allocator_traits<_Alloc> __traits;
-40039:       typedef typename __traits::propagate_on_container_swap __pocs;
-40039:       __do_alloc_on_swap(__one, __two, __pocs());
-40039:     }
-40039: 
-40039:   template<typename _Alloc>
-40039:     class __is_copy_insertable_impl
-40039:     {
-40039:       typedef allocator_traits<_Alloc> _Traits;
-40039: 
-40039:       template<typename _Up, typename
-40039:         = decltype(_Traits::construct(std::declval<_Alloc&>(),
-40039:           std::declval<_Up*>(),
-40039:           std::declval<const _Up&>()))>
-40039:  static true_type
-40039:  _M_select(int);
-40039: 
-40039:       template<typename _Up>
-40039:  static false_type
-40039:  _M_select(...);
-40039: 
-40039:     public:
-40039:       typedef decltype(_M_select<typename _Alloc::value_type>(0)) type;
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Alloc>
-40039:     struct __is_copy_insertable
-40039:     : __is_copy_insertable_impl<_Alloc>::type
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_copy_insertable<allocator<_Tp>>
-40039:     : is_copy_constructible<_Tp>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Alloc, typename = void>
-40039:     struct __is_allocator : false_type { };
-40039: 
-40039:   template<typename _Alloc>
-40039:     struct __is_allocator<_Alloc,
-40039:       __void_t<typename _Alloc::value_type,
-40039:         decltype(std::declval<_Alloc&>().allocate(size_t{}))>>
-40039:     : true_type { };
-40039: 
-40039:   template<typename _Alloc>
-40039:     using _RequireAllocator
-40039:       = typename enable_if<__is_allocator<_Alloc>::value, _Alloc>::type;
-40039: 
-40039: 
-40039: }
-40039: # 37 "/usr/include/c++/8/ext/alloc_traits.h" 2 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template<typename _Alloc, typename = typename _Alloc::value_type>
-40039:   struct __alloc_traits
-40039: 
-40039:   : std::allocator_traits<_Alloc>
-40039: 
-40039:   {
-40039:     typedef _Alloc allocator_type;
-40039: 
-40039:     typedef std::allocator_traits<_Alloc> _Base_type;
-40039:     typedef typename _Base_type::value_type value_type;
-40039:     typedef typename _Base_type::pointer pointer;
-40039:     typedef typename _Base_type::const_pointer const_pointer;
-40039:     typedef typename _Base_type::size_type size_type;
-40039:     typedef typename _Base_type::difference_type difference_type;
-40039: 
-40039:     typedef value_type& reference;
-40039:     typedef const value_type& const_reference;
-40039:     using _Base_type::allocate;
-40039:     using _Base_type::deallocate;
-40039:     using _Base_type::construct;
-40039:     using _Base_type::destroy;
-40039:     using _Base_type::max_size;
-40039: 
-40039:   private:
-40039:     template<typename _Ptr>
-40039:       using __is_custom_pointer
-40039:  = std::__and_<std::is_same<pointer, _Ptr>,
-40039:         std::__not_<std::is_pointer<_Ptr>>>;
-40039: 
-40039:   public:
-40039: 
-40039:     template<typename _Ptr, typename... _Args>
-40039:       static typename std::enable_if<__is_custom_pointer<_Ptr>::value>::type
-40039:       construct(_Alloc& __a, _Ptr __p, _Args&&... __args)
-40039:       {
-40039:  _Base_type::construct(__a, std::__to_address(__p),
-40039:          std::forward<_Args>(__args)...);
-40039:       }
-40039: 
-40039: 
-40039:     template<typename _Ptr>
-40039:       static typename std::enable_if<__is_custom_pointer<_Ptr>::value>::type
-40039:       destroy(_Alloc& __a, _Ptr __p)
-40039:       { _Base_type::destroy(__a, std::__to_address(__p)); }
-40039: 
-40039:     static _Alloc _S_select_on_copy(const _Alloc& __a)
-40039:     { return _Base_type::select_on_container_copy_construction(__a); }
-40039: 
-40039:     static void _S_on_swap(_Alloc& __a, _Alloc& __b)
-40039:     { std::__alloc_on_swap(__a, __b); }
-40039: 
-40039:     static constexpr bool _S_propagate_on_copy_assign()
-40039:     { return _Base_type::propagate_on_container_copy_assignment::value; }
-40039: 
-40039:     static constexpr bool _S_propagate_on_move_assign()
-40039:     { return _Base_type::propagate_on_container_move_assignment::value; }
-40039: 
-40039:     static constexpr bool _S_propagate_on_swap()
-40039:     { return _Base_type::propagate_on_container_swap::value; }
-40039: 
-40039:     static constexpr bool _S_always_equal()
-40039:     { return _Base_type::is_always_equal::value; }
-40039: 
-40039:     static constexpr bool _S_nothrow_move()
-40039:     { return _S_propagate_on_move_assign() || _S_always_equal(); }
-40039: 
-40039:     template<typename _Tp>
-40039:       struct rebind
-40039:       { typedef typename _Base_type::template rebind_alloc<_Tp> other; };
-40039: # 158 "/usr/include/c++/8/ext/alloc_traits.h" 3
-40039:   };
-40039: 
-40039: 
-40039: }
-40039: # 62 "/usr/include/c++/8/bits/stl_construct.h" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _T1, typename... _Args>
-40039:     inline void
-40039:     _Construct(_T1* __p, _Args&&... __args)
-40039:     { ::new(static_cast<void*>(__p)) _T1(std::forward<_Args>(__args)...); }
-40039: # 87 "/usr/include/c++/8/bits/stl_construct.h" 3
-40039:   template<typename _T1>
-40039:     inline void
-40039:     _Construct_novalue(_T1* __p)
-40039:     { ::new(static_cast<void*>(__p)) _T1; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline void
-40039:     _Destroy(_Tp* __pointer)
-40039:     { __pointer->~_Tp(); }
-40039: 
-40039:   template<bool>
-40039:     struct _Destroy_aux
-40039:     {
-40039:       template<typename _ForwardIterator>
-40039:         static void
-40039:         __destroy(_ForwardIterator __first, _ForwardIterator __last)
-40039:  {
-40039:    for (; __first != __last; ++__first)
-40039:      std::_Destroy(std::__addressof(*__first));
-40039:  }
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct _Destroy_aux<true>
-40039:     {
-40039:       template<typename _ForwardIterator>
-40039:         static void
-40039:         __destroy(_ForwardIterator, _ForwardIterator) { }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _ForwardIterator>
-40039:     inline void
-40039:     _Destroy(_ForwardIterator __first, _ForwardIterator __last)
-40039:     {
-40039:       typedef typename iterator_traits<_ForwardIterator>::value_type
-40039:                        _Value_type;
-40039: 
-40039: 
-40039:       static_assert(is_destructible<_Value_type>::value,
-40039:       "value type is destructible");
-40039: 
-40039:       std::_Destroy_aux<__has_trivial_destructor(_Value_type)>::
-40039:  __destroy(__first, __last);
-40039:     }
-40039: 
-40039:   template<bool>
-40039:     struct _Destroy_n_aux
-40039:     {
-40039:       template<typename _ForwardIterator, typename _Size>
-40039:         static _ForwardIterator
-40039:         __destroy_n(_ForwardIterator __first, _Size __count)
-40039:  {
-40039:    for (; __count > 0; (void)++__first, --__count)
-40039:      std::_Destroy(std::__addressof(*__first));
-40039:    return __first;
-40039:  }
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct _Destroy_n_aux<true>
-40039:     {
-40039:       template<typename _ForwardIterator, typename _Size>
-40039:         static _ForwardIterator
-40039:         __destroy_n(_ForwardIterator __first, _Size __count)
-40039:  {
-40039:    std::advance(__first, __count);
-40039:    return __first;
-40039:  }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _ForwardIterator, typename _Size>
-40039:     inline _ForwardIterator
-40039:     _Destroy_n(_ForwardIterator __first, _Size __count)
-40039:     {
-40039:       typedef typename iterator_traits<_ForwardIterator>::value_type
-40039:                        _Value_type;
-40039: 
-40039: 
-40039:       static_assert(is_destructible<_Value_type>::value,
-40039:       "value type is destructible");
-40039: 
-40039:       return std::_Destroy_n_aux<__has_trivial_destructor(_Value_type)>::
-40039:  __destroy_n(__first, __count);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _ForwardIterator, typename _Allocator>
-40039:     void
-40039:     _Destroy(_ForwardIterator __first, _ForwardIterator __last,
-40039:       _Allocator& __alloc)
-40039:     {
-40039:       typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
-40039:       for (; __first != __last; ++__first)
-40039:  __traits::destroy(__alloc, std::__addressof(*__first));
-40039:     }
-40039: 
-40039:   template<typename _ForwardIterator, typename _Tp>
-40039:     inline void
-40039:     _Destroy(_ForwardIterator __first, _ForwardIterator __last,
-40039:       allocator<_Tp>&)
-40039:     {
-40039:       _Destroy(__first, __last);
-40039:     }
-40039: # 232 "/usr/include/c++/8/bits/stl_construct.h" 3
-40039: 
-40039: }
-40039: # 61 "/usr/include/c++/8/bits/stl_tempbuf.h" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 83 "/usr/include/c++/8/bits/stl_tempbuf.h" 3
-40039:   template<typename _Tp>
-40039:     pair<_Tp*, ptrdiff_t>
-40039:     get_temporary_buffer(ptrdiff_t __len) noexcept
-40039:     {
-40039:       const ptrdiff_t __max =
-40039:  __gnu_cxx::__numeric_traits<ptrdiff_t>::__max / sizeof(_Tp);
-40039:       if (__len > __max)
-40039:  __len = __max;
-40039: 
-40039:       while (__len > 0)
-40039:  {
-40039:    _Tp* __tmp = static_cast<_Tp*>(::operator new(__len * sizeof(_Tp),
-40039:        std::nothrow));
-40039:    if (__tmp != 0)
-40039:      return std::pair<_Tp*, ptrdiff_t>(__tmp, __len);
-40039:    __len /= 2;
-40039:  }
-40039:       return std::pair<_Tp*, ptrdiff_t>(static_cast<_Tp*>(0), 0);
-40039:     }
-40039: # 110 "/usr/include/c++/8/bits/stl_tempbuf.h" 3
-40039:   template<typename _Tp>
-40039:     inline void
-40039:     return_temporary_buffer(_Tp* __p)
-40039:     { ::operator delete(__p, std::nothrow); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _ForwardIterator, typename _Tp>
-40039:     class _Temporary_buffer
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:     public:
-40039:       typedef _Tp value_type;
-40039:       typedef value_type* pointer;
-40039:       typedef pointer iterator;
-40039:       typedef ptrdiff_t size_type;
-40039: 
-40039:     protected:
-40039:       size_type _M_original_len;
-40039:       size_type _M_len;
-40039:       pointer _M_buffer;
-40039: 
-40039:     public:
-40039: 
-40039:       size_type
-40039:       size() const
-40039:       { return _M_len; }
-40039: 
-40039: 
-40039:       size_type
-40039:       requested_size() const
-40039:       { return _M_original_len; }
-40039: 
-40039: 
-40039:       iterator
-40039:       begin()
-40039:       { return _M_buffer; }
-40039: 
-40039: 
-40039:       iterator
-40039:       end()
-40039:       { return _M_buffer + _M_len; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       _Temporary_buffer(_ForwardIterator __first, _ForwardIterator __last);
-40039: 
-40039:       ~_Temporary_buffer()
-40039:       {
-40039:  std::_Destroy(_M_buffer, _M_buffer + _M_len);
-40039:  std::return_temporary_buffer(_M_buffer);
-40039:       }
-40039: 
-40039:     private:
-40039: 
-40039:       _Temporary_buffer(const _Temporary_buffer&);
-40039: 
-40039:       void
-40039:       operator=(const _Temporary_buffer&);
-40039:     };
-40039: 
-40039: 
-40039:   template<bool>
-40039:     struct __uninitialized_construct_buf_dispatch
-40039:     {
-40039:       template<typename _Pointer, typename _ForwardIterator>
-40039:         static void
-40039:         __ucr(_Pointer __first, _Pointer __last,
-40039:        _ForwardIterator __seed)
-40039:         {
-40039:    if(__first == __last)
-40039:      return;
-40039: 
-40039:    _Pointer __cur = __first;
-40039:    try
-40039:      {
-40039:        std::_Construct(std::__addressof(*__first),
-40039:          std::move(*__seed));
-40039:        _Pointer __prev = __cur;
-40039:        ++__cur;
-40039:        for(; __cur != __last; ++__cur, ++__prev)
-40039:   std::_Construct(std::__addressof(*__cur),
-40039:     std::move(*__prev));
-40039:        *__seed = std::move(*__prev);
-40039:      }
-40039:    catch(...)
-40039:      {
-40039:        std::_Destroy(__first, __cur);
-40039:        throw;
-40039:      }
-40039:  }
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __uninitialized_construct_buf_dispatch<true>
-40039:     {
-40039:       template<typename _Pointer, typename _ForwardIterator>
-40039:         static void
-40039:         __ucr(_Pointer, _Pointer, _ForwardIterator) { }
-40039:     };
-40039: # 229 "/usr/include/c++/8/bits/stl_tempbuf.h" 3
-40039:   template<typename _Pointer, typename _ForwardIterator>
-40039:     inline void
-40039:     __uninitialized_construct_buf(_Pointer __first, _Pointer __last,
-40039:       _ForwardIterator __seed)
-40039:     {
-40039:       typedef typename std::iterator_traits<_Pointer>::value_type
-40039:  _ValueType;
-40039: 
-40039:       std::__uninitialized_construct_buf_dispatch<
-40039:         __has_trivial_constructor(_ValueType)>::
-40039:    __ucr(__first, __last, __seed);
-40039:     }
-40039: 
-40039:   template<typename _ForwardIterator, typename _Tp>
-40039:     _Temporary_buffer<_ForwardIterator, _Tp>::
-40039:     _Temporary_buffer(_ForwardIterator __first, _ForwardIterator __last)
-40039:     : _M_original_len(std::distance(__first, __last)),
-40039:       _M_len(0), _M_buffer(0)
-40039:     {
-40039:       try
-40039:  {
-40039:    std::pair<pointer, size_type> __p(std::get_temporary_buffer<
-40039:          value_type>(_M_original_len));
-40039:    _M_buffer = __p.first;
-40039:    _M_len = __p.second;
-40039:    if (_M_buffer)
-40039:      std::__uninitialized_construct_buf(_M_buffer, _M_buffer + _M_len,
-40039:             __first);
-40039:  }
-40039:       catch(...)
-40039:  {
-40039:    std::return_temporary_buffer(_M_buffer);
-40039:    _M_buffer = 0;
-40039:    _M_len = 0;
-40039:    throw;
-40039:  }
-40039:     }
-40039: 
-40039: 
-40039: }
-40039: # 63 "/usr/include/c++/8/bits/stl_algo.h" 2 3
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/uniform_int_dist.h" 1 3
-40039: # 37 "/usr/include/c++/8/bits/uniform_int_dist.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   namespace __detail
-40039:   {
-40039: 
-40039:     template<typename _Tp>
-40039:       inline bool
-40039:       _Power_of_2(_Tp __x)
-40039:       {
-40039:  return ((__x - 1) & __x) == 0;
-40039:       }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _IntType = int>
-40039:     class uniform_int_distribution
-40039:     {
-40039:       static_assert(std::is_integral<_IntType>::value,
-40039:       "template argument must be an integral type");
-40039: 
-40039:     public:
-40039: 
-40039:       typedef _IntType result_type;
-40039: 
-40039:       struct param_type
-40039:       {
-40039:  typedef uniform_int_distribution<_IntType> distribution_type;
-40039: 
-40039:  explicit
-40039:  param_type(_IntType __a = 0,
-40039:      _IntType __b = std::numeric_limits<_IntType>::max())
-40039:  : _M_a(__a), _M_b(__b)
-40039:  {
-40039:    ;
-40039:  }
-40039: 
-40039:  result_type
-40039:  a() const
-40039:  { return _M_a; }
-40039: 
-40039:  result_type
-40039:  b() const
-40039:  { return _M_b; }
-40039: 
-40039:  friend bool
-40039:  operator==(const param_type& __p1, const param_type& __p2)
-40039:  { return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; }
-40039: 
-40039:  friend bool
-40039:  operator!=(const param_type& __p1, const param_type& __p2)
-40039:  { return !(__p1 == __p2); }
-40039: 
-40039:       private:
-40039:  _IntType _M_a;
-40039:  _IntType _M_b;
-40039:       };
-40039: 
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039:       explicit
-40039:       uniform_int_distribution(_IntType __a = 0,
-40039:       _IntType __b = std::numeric_limits<_IntType>::max())
-40039:       : _M_param(__a, __b)
-40039:       { }
-40039: 
-40039:       explicit
-40039:       uniform_int_distribution(const param_type& __p)
-40039:       : _M_param(__p)
-40039:       { }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       reset() { }
-40039: 
-40039:       result_type
-40039:       a() const
-40039:       { return _M_param.a(); }
-40039: 
-40039:       result_type
-40039:       b() const
-40039:       { return _M_param.b(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       param_type
-40039:       param() const
-40039:       { return _M_param; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       param(const param_type& __param)
-40039:       { _M_param = __param; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       result_type
-40039:       min() const
-40039:       { return this->a(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       result_type
-40039:       max() const
-40039:       { return this->b(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       template<typename _UniformRandomNumberGenerator>
-40039:  result_type
-40039:  operator()(_UniformRandomNumberGenerator& __urng)
-40039:         { return this->operator()(__urng, _M_param); }
-40039: 
-40039:       template<typename _UniformRandomNumberGenerator>
-40039:  result_type
-40039:  operator()(_UniformRandomNumberGenerator& __urng,
-40039:      const param_type& __p);
-40039: 
-40039:       template<typename _ForwardIterator,
-40039:         typename _UniformRandomNumberGenerator>
-40039:  void
-40039:  __generate(_ForwardIterator __f, _ForwardIterator __t,
-40039:      _UniformRandomNumberGenerator& __urng)
-40039:  { this->__generate(__f, __t, __urng, _M_param); }
-40039: 
-40039:       template<typename _ForwardIterator,
-40039:         typename _UniformRandomNumberGenerator>
-40039:  void
-40039:  __generate(_ForwardIterator __f, _ForwardIterator __t,
-40039:      _UniformRandomNumberGenerator& __urng,
-40039:      const param_type& __p)
-40039:  { this->__generate_impl(__f, __t, __urng, __p); }
-40039: 
-40039:       template<typename _UniformRandomNumberGenerator>
-40039:  void
-40039:  __generate(result_type* __f, result_type* __t,
-40039:      _UniformRandomNumberGenerator& __urng,
-40039:      const param_type& __p)
-40039:  { this->__generate_impl(__f, __t, __urng, __p); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       friend bool
-40039:       operator==(const uniform_int_distribution& __d1,
-40039:    const uniform_int_distribution& __d2)
-40039:       { return __d1._M_param == __d2._M_param; }
-40039: 
-40039:     private:
-40039:       template<typename _ForwardIterator,
-40039:         typename _UniformRandomNumberGenerator>
-40039:  void
-40039:  __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
-40039:    _UniformRandomNumberGenerator& __urng,
-40039:    const param_type& __p);
-40039: 
-40039:       param_type _M_param;
-40039:     };
-40039: 
-40039:   template<typename _IntType>
-40039:     template<typename _UniformRandomNumberGenerator>
-40039:       typename uniform_int_distribution<_IntType>::result_type
-40039:       uniform_int_distribution<_IntType>::
-40039:       operator()(_UniformRandomNumberGenerator& __urng,
-40039:    const param_type& __param)
-40039:       {
-40039:  typedef typename _UniformRandomNumberGenerator::result_type
-40039:    _Gresult_type;
-40039:  typedef typename std::make_unsigned<result_type>::type __utype;
-40039:  typedef typename std::common_type<_Gresult_type, __utype>::type
-40039:    __uctype;
-40039: 
-40039:  const __uctype __urngmin = __urng.min();
-40039:  const __uctype __urngmax = __urng.max();
-40039:  const __uctype __urngrange = __urngmax - __urngmin;
-40039:  const __uctype __urange
-40039:    = __uctype(__param.b()) - __uctype(__param.a());
-40039: 
-40039:  __uctype __ret;
-40039: 
-40039:  if (__urngrange > __urange)
-40039:    {
-40039: 
-40039:      const __uctype __uerange = __urange + 1;
-40039:      const __uctype __scaling = __urngrange / __uerange;
-40039:      const __uctype __past = __uerange * __scaling;
-40039:      do
-40039:        __ret = __uctype(__urng()) - __urngmin;
-40039:      while (__ret >= __past);
-40039:      __ret /= __scaling;
-40039:    }
-40039:  else if (__urngrange < __urange)
-40039:    {
-40039: # 264 "/usr/include/c++/8/bits/uniform_int_dist.h" 3
-40039:      __uctype __tmp;
-40039:      do
-40039:        {
-40039:   const __uctype __uerngrange = __urngrange + 1;
-40039:   __tmp = (__uerngrange * operator()
-40039:     (__urng, param_type(0, __urange / __uerngrange)));
-40039:   __ret = __tmp + (__uctype(__urng()) - __urngmin);
-40039:        }
-40039:      while (__ret > __urange || __ret < __tmp);
-40039:    }
-40039:  else
-40039:    __ret = __uctype(__urng()) - __urngmin;
-40039: 
-40039:  return __ret + __param.a();
-40039:       }
-40039: 
-40039: 
-40039:   template<typename _IntType>
-40039:     template<typename _ForwardIterator,
-40039:       typename _UniformRandomNumberGenerator>
-40039:       void
-40039:       uniform_int_distribution<_IntType>::
-40039:       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
-40039:         _UniformRandomNumberGenerator& __urng,
-40039:         const param_type& __param)
-40039:       {
-40039: 
-40039:  typedef typename _UniformRandomNumberGenerator::result_type
-40039:    _Gresult_type;
-40039:  typedef typename std::make_unsigned<result_type>::type __utype;
-40039:  typedef typename std::common_type<_Gresult_type, __utype>::type
-40039:    __uctype;
-40039: 
-40039:  const __uctype __urngmin = __urng.min();
-40039:  const __uctype __urngmax = __urng.max();
-40039:  const __uctype __urngrange = __urngmax - __urngmin;
-40039:  const __uctype __urange
-40039:    = __uctype(__param.b()) - __uctype(__param.a());
-40039: 
-40039:  __uctype __ret;
-40039: 
-40039:  if (__urngrange > __urange)
-40039:    {
-40039:      if (__detail::_Power_of_2(__urngrange + 1)
-40039:   && __detail::_Power_of_2(__urange + 1))
-40039:        {
-40039:   while (__f != __t)
-40039:     {
-40039:       __ret = __uctype(__urng()) - __urngmin;
-40039:       *__f++ = (__ret & __urange) + __param.a();
-40039:     }
-40039:        }
-40039:      else
-40039:        {
-40039: 
-40039:   const __uctype __uerange = __urange + 1;
-40039:   const __uctype __scaling = __urngrange / __uerange;
-40039:   const __uctype __past = __uerange * __scaling;
-40039:   while (__f != __t)
-40039:     {
-40039:       do
-40039:         __ret = __uctype(__urng()) - __urngmin;
-40039:       while (__ret >= __past);
-40039:       *__f++ = __ret / __scaling + __param.a();
-40039:     }
-40039:        }
-40039:    }
-40039:  else if (__urngrange < __urange)
-40039:    {
-40039: # 348 "/usr/include/c++/8/bits/uniform_int_dist.h" 3
-40039:      __uctype __tmp;
-40039:      while (__f != __t)
-40039:        {
-40039:   do
-40039:     {
-40039:       const __uctype __uerngrange = __urngrange + 1;
-40039:       __tmp = (__uerngrange * operator()
-40039:         (__urng, param_type(0, __urange / __uerngrange)));
-40039:       __ret = __tmp + (__uctype(__urng()) - __urngmin);
-40039:     }
-40039:   while (__ret > __urange || __ret < __tmp);
-40039:   *__f++ = __ret;
-40039:        }
-40039:    }
-40039:  else
-40039:    while (__f != __t)
-40039:      *__f++ = __uctype(__urng()) - __urngmin + __param.a();
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 67 "/usr/include/c++/8/bits/stl_algo.h" 2 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Iterator, typename _Compare>
-40039:     void
-40039:     __move_median_to_first(_Iterator __result,_Iterator __a, _Iterator __b,
-40039:       _Iterator __c, _Compare __comp)
-40039:     {
-40039:       if (__comp(__a, __b))
-40039:  {
-40039:    if (__comp(__b, __c))
-40039:      std::iter_swap(__result, __b);
-40039:    else if (__comp(__a, __c))
-40039:      std::iter_swap(__result, __c);
-40039:    else
-40039:      std::iter_swap(__result, __a);
-40039:  }
-40039:       else if (__comp(__a, __c))
-40039:  std::iter_swap(__result, __a);
-40039:       else if (__comp(__b, __c))
-40039:  std::iter_swap(__result, __c);
-40039:       else
-40039:  std::iter_swap(__result, __b);
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _InputIterator, typename _Predicate>
-40039:     inline _InputIterator
-40039:     __find_if(_InputIterator __first, _InputIterator __last,
-40039:        _Predicate __pred, input_iterator_tag)
-40039:     {
-40039:       while (__first != __last && !__pred(__first))
-40039:  ++__first;
-40039:       return __first;
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Predicate>
-40039:     _RandomAccessIterator
-40039:     __find_if(_RandomAccessIterator __first, _RandomAccessIterator __last,
-40039:        _Predicate __pred, random_access_iterator_tag)
-40039:     {
-40039:       typename iterator_traits<_RandomAccessIterator>::difference_type
-40039:  __trip_count = (__last - __first) >> 2;
-40039: 
-40039:       for (; __trip_count > 0; --__trip_count)
-40039:  {
-40039:    if (__pred(__first))
-40039:      return __first;
-40039:    ++__first;
-40039: 
-40039:    if (__pred(__first))
-40039:      return __first;
-40039:    ++__first;
-40039: 
-40039:    if (__pred(__first))
-40039:      return __first;
-40039:    ++__first;
-40039: 
-40039:    if (__pred(__first))
-40039:      return __first;
-40039:    ++__first;
-40039:  }
-40039: 
-40039:       switch (__last - __first)
-40039:  {
-40039:  case 3:
-40039:    if (__pred(__first))
-40039:      return __first;
-40039:    ++__first;
-40039:  case 2:
-40039:    if (__pred(__first))
-40039:      return __first;
-40039:    ++__first;
-40039:  case 1:
-40039:    if (__pred(__first))
-40039:      return __first;
-40039:    ++__first;
-40039:  case 0:
-40039:  default:
-40039:    return __last;
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _Iterator, typename _Predicate>
-40039:     inline _Iterator
-40039:     __find_if(_Iterator __first, _Iterator __last, _Predicate __pred)
-40039:     {
-40039:       return __find_if(__first, __last, __pred,
-40039:          std::__iterator_category(__first));
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _InputIterator, typename _Predicate>
-40039:     inline _InputIterator
-40039:     __find_if_not(_InputIterator __first, _InputIterator __last,
-40039:     _Predicate __pred)
-40039:     {
-40039:       return std::__find_if(__first, __last,
-40039:        __gnu_cxx::__ops::__negate(__pred),
-40039:        std::__iterator_category(__first));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _InputIterator, typename _Predicate, typename _Distance>
-40039:     _InputIterator
-40039:     __find_if_not_n(_InputIterator __first, _Distance& __len, _Predicate __pred)
-40039:     {
-40039:       for (; __len; --__len, (void) ++__first)
-40039:  if (!__pred(__first))
-40039:    break;
-40039:       return __first;
-40039:     }
-40039: # 202 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator1, typename _ForwardIterator2,
-40039:     typename _BinaryPredicate>
-40039:     _ForwardIterator1
-40039:     __search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
-40039:       _ForwardIterator2 __first2, _ForwardIterator2 __last2,
-40039:       _BinaryPredicate __predicate)
-40039:     {
-40039: 
-40039:       if (__first1 == __last1 || __first2 == __last2)
-40039:  return __first1;
-40039: 
-40039: 
-40039:       _ForwardIterator2 __p1(__first2);
-40039:       if (++__p1 == __last2)
-40039:  return std::__find_if(__first1, __last1,
-40039:   __gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2));
-40039: 
-40039: 
-40039:       _ForwardIterator2 __p;
-40039:       _ForwardIterator1 __current = __first1;
-40039: 
-40039:       for (;;)
-40039:  {
-40039:    __first1 =
-40039:      std::__find_if(__first1, __last1,
-40039:   __gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2));
-40039: 
-40039:    if (__first1 == __last1)
-40039:      return __last1;
-40039: 
-40039:    __p = __p1;
-40039:    __current = __first1;
-40039:    if (++__current == __last1)
-40039:      return __last1;
-40039: 
-40039:    while (__predicate(__current, __p))
-40039:      {
-40039:        if (++__p == __last2)
-40039:   return __first1;
-40039:        if (++__current == __last1)
-40039:   return __last1;
-40039:      }
-40039:    ++__first1;
-40039:  }
-40039:       return __first1;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _ForwardIterator, typename _Integer,
-40039:     typename _UnaryPredicate>
-40039:     _ForwardIterator
-40039:     __search_n_aux(_ForwardIterator __first, _ForwardIterator __last,
-40039:      _Integer __count, _UnaryPredicate __unary_pred,
-40039:      std::forward_iterator_tag)
-40039:     {
-40039:       __first = std::__find_if(__first, __last, __unary_pred);
-40039:       while (__first != __last)
-40039:  {
-40039:    typename iterator_traits<_ForwardIterator>::difference_type
-40039:      __n = __count;
-40039:    _ForwardIterator __i = __first;
-40039:    ++__i;
-40039:    while (__i != __last && __n != 1 && __unary_pred(__i))
-40039:      {
-40039:        ++__i;
-40039:        --__n;
-40039:      }
-40039:    if (__n == 1)
-40039:      return __first;
-40039:    if (__i == __last)
-40039:      return __last;
-40039:    __first = std::__find_if(++__i, __last, __unary_pred);
-40039:  }
-40039:       return __last;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _RandomAccessIter, typename _Integer,
-40039:     typename _UnaryPredicate>
-40039:     _RandomAccessIter
-40039:     __search_n_aux(_RandomAccessIter __first, _RandomAccessIter __last,
-40039:      _Integer __count, _UnaryPredicate __unary_pred,
-40039:      std::random_access_iterator_tag)
-40039:     {
-40039:       typedef typename std::iterator_traits<_RandomAccessIter>::difference_type
-40039:  _DistanceType;
-40039: 
-40039:       _DistanceType __tailSize = __last - __first;
-40039:       _DistanceType __remainder = __count;
-40039: 
-40039:       while (__remainder <= __tailSize)
-40039:  {
-40039:    __first += __remainder;
-40039:    __tailSize -= __remainder;
-40039: 
-40039: 
-40039:    _RandomAccessIter __backTrack = __first;
-40039:    while (__unary_pred(--__backTrack))
-40039:      {
-40039:        if (--__remainder == 0)
-40039:   return (__first - __count);
-40039:      }
-40039:    __remainder = __count + 1 - (__first - __backTrack);
-40039:  }
-40039:       return __last;
-40039:     }
-40039: 
-40039:   template<typename _ForwardIterator, typename _Integer,
-40039:     typename _UnaryPredicate>
-40039:     _ForwardIterator
-40039:     __search_n(_ForwardIterator __first, _ForwardIterator __last,
-40039:         _Integer __count,
-40039:         _UnaryPredicate __unary_pred)
-40039:     {
-40039:       if (__count <= 0)
-40039:  return __first;
-40039: 
-40039:       if (__count == 1)
-40039:  return std::__find_if(__first, __last, __unary_pred);
-40039: 
-40039:       return std::__search_n_aux(__first, __last, __count, __unary_pred,
-40039:      std::__iterator_category(__first));
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _ForwardIterator1, typename _ForwardIterator2,
-40039:     typename _BinaryPredicate>
-40039:     _ForwardIterator1
-40039:     __find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
-40039:         _ForwardIterator2 __first2, _ForwardIterator2 __last2,
-40039:         forward_iterator_tag, forward_iterator_tag,
-40039:         _BinaryPredicate __comp)
-40039:     {
-40039:       if (__first2 == __last2)
-40039:  return __last1;
-40039: 
-40039:       _ForwardIterator1 __result = __last1;
-40039:       while (1)
-40039:  {
-40039:    _ForwardIterator1 __new_result
-40039:      = std::__search(__first1, __last1, __first2, __last2, __comp);
-40039:    if (__new_result == __last1)
-40039:      return __result;
-40039:    else
-40039:      {
-40039:        __result = __new_result;
-40039:        __first1 = __new_result;
-40039:        ++__first1;
-40039:      }
-40039:  }
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
-40039:     typename _BinaryPredicate>
-40039:     _BidirectionalIterator1
-40039:     __find_end(_BidirectionalIterator1 __first1,
-40039:         _BidirectionalIterator1 __last1,
-40039:         _BidirectionalIterator2 __first2,
-40039:         _BidirectionalIterator2 __last2,
-40039:         bidirectional_iterator_tag, bidirectional_iterator_tag,
-40039:         _BinaryPredicate __comp)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       typedef reverse_iterator<_BidirectionalIterator1> _RevIterator1;
-40039:       typedef reverse_iterator<_BidirectionalIterator2> _RevIterator2;
-40039: 
-40039:       _RevIterator1 __rlast1(__first1);
-40039:       _RevIterator2 __rlast2(__first2);
-40039:       _RevIterator1 __rresult = std::__search(_RevIterator1(__last1), __rlast1,
-40039:            _RevIterator2(__last2), __rlast2,
-40039:            __comp);
-40039: 
-40039:       if (__rresult == __rlast1)
-40039:  return __last1;
-40039:       else
-40039:  {
-40039:    _BidirectionalIterator1 __result = __rresult.base();
-40039:    std::advance(__result, -std::distance(__first2, __last2));
-40039:    return __result;
-40039:  }
-40039:     }
-40039: # 423 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator1, typename _ForwardIterator2>
-40039:     inline _ForwardIterator1
-40039:     find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
-40039:       _ForwardIterator2 __first2, _ForwardIterator2 __last2)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__find_end(__first1, __last1, __first2, __last2,
-40039:         std::__iterator_category(__first1),
-40039:         std::__iterator_category(__first2),
-40039:         __gnu_cxx::__ops::__iter_equal_to_iter());
-40039:     }
-40039: # 471 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator1, typename _ForwardIterator2,
-40039:     typename _BinaryPredicate>
-40039:     inline _ForwardIterator1
-40039:     find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
-40039:       _ForwardIterator2 __first2, _ForwardIterator2 __last2,
-40039:       _BinaryPredicate __comp)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__find_end(__first1, __last1, __first2, __last2,
-40039:         std::__iterator_category(__first1),
-40039:         std::__iterator_category(__first2),
-40039:         __gnu_cxx::__ops::__iter_comp_iter(__comp));
-40039:     }
-40039: # 506 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _Predicate>
-40039:     inline bool
-40039:     all_of(_InputIterator __first, _InputIterator __last, _Predicate __pred)
-40039:     { return __last == std::find_if_not(__first, __last, __pred); }
-40039: # 523 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _Predicate>
-40039:     inline bool
-40039:     none_of(_InputIterator __first, _InputIterator __last, _Predicate __pred)
-40039:     { return __last == std::find_if(__first, __last, __pred); }
-40039: # 541 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _Predicate>
-40039:     inline bool
-40039:     any_of(_InputIterator __first, _InputIterator __last, _Predicate __pred)
-40039:     { return !std::none_of(__first, __last, __pred); }
-40039: # 556 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _Predicate>
-40039:     inline _InputIterator
-40039:     find_if_not(_InputIterator __first, _InputIterator __last,
-40039:   _Predicate __pred)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:       ;
-40039:       return std::__find_if_not(__first, __last,
-40039:     __gnu_cxx::__ops::__pred_iter(__pred));
-40039:     }
-40039: # 580 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _Predicate>
-40039:     inline bool
-40039:     is_partitioned(_InputIterator __first, _InputIterator __last,
-40039:      _Predicate __pred)
-40039:     {
-40039:       __first = std::find_if_not(__first, __last, __pred);
-40039:       if (__first == __last)
-40039:  return true;
-40039:       ++__first;
-40039:       return std::none_of(__first, __last, __pred);
-40039:     }
-40039: # 601 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _Predicate>
-40039:     _ForwardIterator
-40039:     partition_point(_ForwardIterator __first, _ForwardIterator __last,
-40039:       _Predicate __pred)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039: 
-40039: 
-40039:       ;
-40039: 
-40039:       typedef typename iterator_traits<_ForwardIterator>::difference_type
-40039:  _DistanceType;
-40039: 
-40039:       _DistanceType __len = std::distance(__first, __last);
-40039:       _DistanceType __half;
-40039:       _ForwardIterator __middle;
-40039: 
-40039:       while (__len > 0)
-40039:  {
-40039:    __half = __len >> 1;
-40039:    __middle = __first;
-40039:    std::advance(__middle, __half);
-40039:    if (__pred(*__middle))
-40039:      {
-40039:        __first = __middle;
-40039:        ++__first;
-40039:        __len = __len - __half - 1;
-40039:      }
-40039:    else
-40039:      __len = __half;
-40039:  }
-40039:       return __first;
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _InputIterator, typename _OutputIterator,
-40039:     typename _Predicate>
-40039:     _OutputIterator
-40039:     __remove_copy_if(_InputIterator __first, _InputIterator __last,
-40039:        _OutputIterator __result, _Predicate __pred)
-40039:     {
-40039:       for (; __first != __last; ++__first)
-40039:  if (!__pred(__first))
-40039:    {
-40039:      *__result = *__first;
-40039:      ++__result;
-40039:    }
-40039:       return __result;
-40039:     }
-40039: # 668 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _OutputIterator, typename _Tp>
-40039:     inline _OutputIterator
-40039:     remove_copy(_InputIterator __first, _InputIterator __last,
-40039:   _OutputIterator __result, const _Tp& __value)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__remove_copy_if(__first, __last, __result,
-40039:  __gnu_cxx::__ops::__iter_equals_val(__value));
-40039:     }
-40039: # 700 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _OutputIterator,
-40039:     typename _Predicate>
-40039:     inline _OutputIterator
-40039:     remove_copy_if(_InputIterator __first, _InputIterator __last,
-40039:      _OutputIterator __result, _Predicate __pred)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__remove_copy_if(__first, __last, __result,
-40039:        __gnu_cxx::__ops::__pred_iter(__pred));
-40039:     }
-40039: # 734 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _OutputIterator,
-40039:     typename _Predicate>
-40039:     _OutputIterator
-40039:     copy_if(_InputIterator __first, _InputIterator __last,
-40039:      _OutputIterator __result, _Predicate __pred)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       for (; __first != __last; ++__first)
-40039:  if (__pred(*__first))
-40039:    {
-40039:      *__result = *__first;
-40039:      ++__result;
-40039:    }
-40039:       return __result;
-40039:     }
-40039: 
-40039:   template<typename _InputIterator, typename _Size, typename _OutputIterator>
-40039:     _OutputIterator
-40039:     __copy_n(_InputIterator __first, _Size __n,
-40039:       _OutputIterator __result, input_iterator_tag)
-40039:     {
-40039:       if (__n > 0)
-40039:  {
-40039:    while (true)
-40039:      {
-40039:        *__result = *__first;
-40039:        ++__result;
-40039:        if (--__n > 0)
-40039:   ++__first;
-40039:        else
-40039:   break;
-40039:      }
-40039:  }
-40039:       return __result;
-40039:     }
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Size,
-40039:     typename _OutputIterator>
-40039:     inline _OutputIterator
-40039:     __copy_n(_RandomAccessIterator __first, _Size __n,
-40039:       _OutputIterator __result, random_access_iterator_tag)
-40039:     { return std::copy(__first, __first + __n, __result); }
-40039: # 797 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _Size, typename _OutputIterator>
-40039:     inline _OutputIterator
-40039:     copy_n(_InputIterator __first, _Size __n, _OutputIterator __result)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039: 
-40039:       return std::__copy_n(__first, __n, __result,
-40039:       std::__iterator_category(__first));
-40039:     }
-40039: # 825 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _OutputIterator1,
-40039:     typename _OutputIterator2, typename _Predicate>
-40039:     pair<_OutputIterator1, _OutputIterator2>
-40039:     partition_copy(_InputIterator __first, _InputIterator __last,
-40039:      _OutputIterator1 __out_true, _OutputIterator2 __out_false,
-40039:      _Predicate __pred)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       for (; __first != __last; ++__first)
-40039:  if (__pred(*__first))
-40039:    {
-40039:      *__out_true = *__first;
-40039:      ++__out_true;
-40039:    }
-40039:  else
-40039:    {
-40039:      *__out_false = *__first;
-40039:      ++__out_false;
-40039:    }
-40039: 
-40039:       return pair<_OutputIterator1, _OutputIterator2>(__out_true, __out_false);
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _ForwardIterator, typename _Predicate>
-40039:     _ForwardIterator
-40039:     __remove_if(_ForwardIterator __first, _ForwardIterator __last,
-40039:   _Predicate __pred)
-40039:     {
-40039:       __first = std::__find_if(__first, __last, __pred);
-40039:       if (__first == __last)
-40039:  return __first;
-40039:       _ForwardIterator __result = __first;
-40039:       ++__first;
-40039:       for (; __first != __last; ++__first)
-40039:  if (!__pred(__first))
-40039:    {
-40039:      *__result = std::move(*__first);
-40039:      ++__result;
-40039:    }
-40039:       return __result;
-40039:     }
-40039: # 894 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _Tp>
-40039:     inline _ForwardIterator
-40039:     remove(_ForwardIterator __first, _ForwardIterator __last,
-40039:     const _Tp& __value)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__remove_if(__first, __last,
-40039:   __gnu_cxx::__ops::__iter_equals_val(__value));
-40039:     }
-40039: # 927 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _Predicate>
-40039:     inline _ForwardIterator
-40039:     remove_if(_ForwardIterator __first, _ForwardIterator __last,
-40039:        _Predicate __pred)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__remove_if(__first, __last,
-40039:          __gnu_cxx::__ops::__pred_iter(__pred));
-40039:     }
-40039: 
-40039:   template<typename _ForwardIterator, typename _BinaryPredicate>
-40039:     _ForwardIterator
-40039:     __adjacent_find(_ForwardIterator __first, _ForwardIterator __last,
-40039:       _BinaryPredicate __binary_pred)
-40039:     {
-40039:       if (__first == __last)
-40039:  return __last;
-40039:       _ForwardIterator __next = __first;
-40039:       while (++__next != __last)
-40039:  {
-40039:    if (__binary_pred(__first, __next))
-40039:      return __first;
-40039:    __first = __next;
-40039:  }
-40039:       return __last;
-40039:     }
-40039: 
-40039:   template<typename _ForwardIterator, typename _BinaryPredicate>
-40039:     _ForwardIterator
-40039:     __unique(_ForwardIterator __first, _ForwardIterator __last,
-40039:       _BinaryPredicate __binary_pred)
-40039:     {
-40039: 
-40039:       __first = std::__adjacent_find(__first, __last, __binary_pred);
-40039:       if (__first == __last)
-40039:  return __last;
-40039: 
-40039: 
-40039:       _ForwardIterator __dest = __first;
-40039:       ++__first;
-40039:       while (++__first != __last)
-40039:  if (!__binary_pred(__dest, __first))
-40039:    *++__dest = std::move(*__first);
-40039:       return ++__dest;
-40039:     }
-40039: # 993 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator>
-40039:     inline _ForwardIterator
-40039:     unique(_ForwardIterator __first, _ForwardIterator __last)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__unique(__first, __last,
-40039:       __gnu_cxx::__ops::__iter_equal_to_iter());
-40039:     }
-40039: # 1023 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _BinaryPredicate>
-40039:     inline _ForwardIterator
-40039:     unique(_ForwardIterator __first, _ForwardIterator __last,
-40039:     _BinaryPredicate __binary_pred)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__unique(__first, __last,
-40039:       __gnu_cxx::__ops::__iter_comp_iter(__binary_pred));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _ForwardIterator, typename _OutputIterator,
-40039:     typename _BinaryPredicate>
-40039:     _OutputIterator
-40039:     __unique_copy(_ForwardIterator __first, _ForwardIterator __last,
-40039:     _OutputIterator __result, _BinaryPredicate __binary_pred,
-40039:     forward_iterator_tag, output_iterator_tag)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039: 
-40039: 
-40039:       _ForwardIterator __next = __first;
-40039:       *__result = *__first;
-40039:       while (++__next != __last)
-40039:  if (!__binary_pred(__first, __next))
-40039:    {
-40039:      __first = __next;
-40039:      *++__result = *__first;
-40039:    }
-40039:       return ++__result;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _InputIterator, typename _OutputIterator,
-40039:     typename _BinaryPredicate>
-40039:     _OutputIterator
-40039:     __unique_copy(_InputIterator __first, _InputIterator __last,
-40039:     _OutputIterator __result, _BinaryPredicate __binary_pred,
-40039:     input_iterator_tag, output_iterator_tag)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039: 
-40039: 
-40039:       typename iterator_traits<_InputIterator>::value_type __value = *__first;
-40039:       __decltype(__gnu_cxx::__ops::__iter_comp_val(__binary_pred))
-40039:  __rebound_pred
-40039:  = __gnu_cxx::__ops::__iter_comp_val(__binary_pred);
-40039:       *__result = __value;
-40039:       while (++__first != __last)
-40039:  if (!__rebound_pred(__first, __value))
-40039:    {
-40039:      __value = *__first;
-40039:      *++__result = __value;
-40039:    }
-40039:       return ++__result;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _InputIterator, typename _ForwardIterator,
-40039:     typename _BinaryPredicate>
-40039:     _ForwardIterator
-40039:     __unique_copy(_InputIterator __first, _InputIterator __last,
-40039:     _ForwardIterator __result, _BinaryPredicate __binary_pred,
-40039:     input_iterator_tag, forward_iterator_tag)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       *__result = *__first;
-40039:       while (++__first != __last)
-40039:  if (!__binary_pred(__result, __first))
-40039:    *++__result = *__first;
-40039:       return ++__result;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _BidirectionalIterator>
-40039:     void
-40039:     __reverse(_BidirectionalIterator __first, _BidirectionalIterator __last,
-40039:        bidirectional_iterator_tag)
-40039:     {
-40039:       while (true)
-40039:  if (__first == __last || __first == --__last)
-40039:    return;
-40039:  else
-40039:    {
-40039:      std::iter_swap(__first, __last);
-40039:      ++__first;
-40039:    }
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _RandomAccessIterator>
-40039:     void
-40039:     __reverse(_RandomAccessIterator __first, _RandomAccessIterator __last,
-40039:        random_access_iterator_tag)
-40039:     {
-40039:       if (__first == __last)
-40039:  return;
-40039:       --__last;
-40039:       while (__first < __last)
-40039:  {
-40039:    std::iter_swap(__first, __last);
-40039:    ++__first;
-40039:    --__last;
-40039:  }
-40039:     }
-40039: # 1178 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _BidirectionalIterator>
-40039:     inline void
-40039:     reverse(_BidirectionalIterator __first, _BidirectionalIterator __last)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039:       std::__reverse(__first, __last, std::__iterator_category(__first));
-40039:     }
-40039: # 1205 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _BidirectionalIterator, typename _OutputIterator>
-40039:     _OutputIterator
-40039:     reverse_copy(_BidirectionalIterator __first, _BidirectionalIterator __last,
-40039:    _OutputIterator __result)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       while (__first != __last)
-40039:  {
-40039:    --__last;
-40039:    *__result = *__last;
-40039:    ++__result;
-40039:  }
-40039:       return __result;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _EuclideanRingElement>
-40039:     _EuclideanRingElement
-40039:     __gcd(_EuclideanRingElement __m, _EuclideanRingElement __n)
-40039:     {
-40039:       while (__n != 0)
-40039:  {
-40039:    _EuclideanRingElement __t = __m % __n;
-40039:    __m = __n;
-40039:    __n = __t;
-40039:  }
-40039:       return __m;
-40039:     }
-40039: 
-40039:   inline namespace _V2
-40039:   {
-40039: 
-40039: 
-40039:   template<typename _ForwardIterator>
-40039:     _ForwardIterator
-40039:     __rotate(_ForwardIterator __first,
-40039:       _ForwardIterator __middle,
-40039:       _ForwardIterator __last,
-40039:       forward_iterator_tag)
-40039:     {
-40039:       if (__first == __middle)
-40039:  return __last;
-40039:       else if (__last == __middle)
-40039:  return __first;
-40039: 
-40039:       _ForwardIterator __first2 = __middle;
-40039:       do
-40039:  {
-40039:    std::iter_swap(__first, __first2);
-40039:    ++__first;
-40039:    ++__first2;
-40039:    if (__first == __middle)
-40039:      __middle = __first2;
-40039:  }
-40039:       while (__first2 != __last);
-40039: 
-40039:       _ForwardIterator __ret = __first;
-40039: 
-40039:       __first2 = __middle;
-40039: 
-40039:       while (__first2 != __last)
-40039:  {
-40039:    std::iter_swap(__first, __first2);
-40039:    ++__first;
-40039:    ++__first2;
-40039:    if (__first == __middle)
-40039:      __middle = __first2;
-40039:    else if (__first2 == __last)
-40039:      __first2 = __middle;
-40039:  }
-40039:       return __ret;
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _BidirectionalIterator>
-40039:     _BidirectionalIterator
-40039:     __rotate(_BidirectionalIterator __first,
-40039:       _BidirectionalIterator __middle,
-40039:       _BidirectionalIterator __last,
-40039:        bidirectional_iterator_tag)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       if (__first == __middle)
-40039:  return __last;
-40039:       else if (__last == __middle)
-40039:  return __first;
-40039: 
-40039:       std::__reverse(__first, __middle, bidirectional_iterator_tag());
-40039:       std::__reverse(__middle, __last, bidirectional_iterator_tag());
-40039: 
-40039:       while (__first != __middle && __middle != __last)
-40039:  {
-40039:    std::iter_swap(__first, --__last);
-40039:    ++__first;
-40039:  }
-40039: 
-40039:       if (__first == __middle)
-40039:  {
-40039:    std::__reverse(__middle, __last, bidirectional_iterator_tag());
-40039:    return __last;
-40039:  }
-40039:       else
-40039:  {
-40039:    std::__reverse(__first, __middle, bidirectional_iterator_tag());
-40039:    return __first;
-40039:  }
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _RandomAccessIterator>
-40039:     _RandomAccessIterator
-40039:     __rotate(_RandomAccessIterator __first,
-40039:       _RandomAccessIterator __middle,
-40039:       _RandomAccessIterator __last,
-40039:       random_access_iterator_tag)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       if (__first == __middle)
-40039:  return __last;
-40039:       else if (__last == __middle)
-40039:  return __first;
-40039: 
-40039:       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
-40039:  _Distance;
-40039:       typedef typename iterator_traits<_RandomAccessIterator>::value_type
-40039:  _ValueType;
-40039: 
-40039:       _Distance __n = __last - __first;
-40039:       _Distance __k = __middle - __first;
-40039: 
-40039:       if (__k == __n - __k)
-40039:  {
-40039:    std::swap_ranges(__first, __middle, __middle);
-40039:    return __middle;
-40039:  }
-40039: 
-40039:       _RandomAccessIterator __p = __first;
-40039:       _RandomAccessIterator __ret = __first + (__last - __middle);
-40039: 
-40039:       for (;;)
-40039:  {
-40039:    if (__k < __n - __k)
-40039:      {
-40039:        if (__is_pod(_ValueType) && __k == 1)
-40039:   {
-40039:     _ValueType __t = std::move(*__p);
-40039:     std::move(__p + 1, __p + __n, __p);
-40039:     *(__p + __n - 1) = std::move(__t);
-40039:     return __ret;
-40039:   }
-40039:        _RandomAccessIterator __q = __p + __k;
-40039:        for (_Distance __i = 0; __i < __n - __k; ++ __i)
-40039:   {
-40039:     std::iter_swap(__p, __q);
-40039:     ++__p;
-40039:     ++__q;
-40039:   }
-40039:        __n %= __k;
-40039:        if (__n == 0)
-40039:   return __ret;
-40039:        std::swap(__n, __k);
-40039:        __k = __n - __k;
-40039:      }
-40039:    else
-40039:      {
-40039:        __k = __n - __k;
-40039:        if (__is_pod(_ValueType) && __k == 1)
-40039:   {
-40039:     _ValueType __t = std::move(*(__p + __n - 1));
-40039:     std::move_backward(__p, __p + __n - 1, __p + __n);
-40039:     *__p = std::move(__t);
-40039:     return __ret;
-40039:   }
-40039:        _RandomAccessIterator __q = __p + __n;
-40039:        __p = __q - __k;
-40039:        for (_Distance __i = 0; __i < __n - __k; ++ __i)
-40039:   {
-40039:     --__p;
-40039:     --__q;
-40039:     std::iter_swap(__p, __q);
-40039:   }
-40039:        __n %= __k;
-40039:        if (__n == 0)
-40039:   return __ret;
-40039:        std::swap(__n, __k);
-40039:      }
-40039:  }
-40039:     }
-40039: # 1432 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator>
-40039:     inline _ForwardIterator
-40039:     rotate(_ForwardIterator __first, _ForwardIterator __middle,
-40039:     _ForwardIterator __last)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__rotate(__first, __middle, __last,
-40039:       std::__iterator_category(__first));
-40039:     }
-40039: 
-40039:   }
-40039: # 1469 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _OutputIterator>
-40039:     inline _OutputIterator
-40039:     rotate_copy(_ForwardIterator __first, _ForwardIterator __middle,
-40039:   _ForwardIterator __last, _OutputIterator __result)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::copy(__first, __middle,
-40039:          std::copy(__middle, __last, __result));
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _ForwardIterator, typename _Predicate>
-40039:     _ForwardIterator
-40039:     __partition(_ForwardIterator __first, _ForwardIterator __last,
-40039:   _Predicate __pred, forward_iterator_tag)
-40039:     {
-40039:       if (__first == __last)
-40039:  return __first;
-40039: 
-40039:       while (__pred(*__first))
-40039:  if (++__first == __last)
-40039:    return __first;
-40039: 
-40039:       _ForwardIterator __next = __first;
-40039: 
-40039:       while (++__next != __last)
-40039:  if (__pred(*__next))
-40039:    {
-40039:      std::iter_swap(__first, __next);
-40039:      ++__first;
-40039:    }
-40039: 
-40039:       return __first;
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _BidirectionalIterator, typename _Predicate>
-40039:     _BidirectionalIterator
-40039:     __partition(_BidirectionalIterator __first, _BidirectionalIterator __last,
-40039:   _Predicate __pred, bidirectional_iterator_tag)
-40039:     {
-40039:       while (true)
-40039:  {
-40039:    while (true)
-40039:      if (__first == __last)
-40039:        return __first;
-40039:      else if (__pred(*__first))
-40039:        ++__first;
-40039:      else
-40039:        break;
-40039:    --__last;
-40039:    while (true)
-40039:      if (__first == __last)
-40039:        return __first;
-40039:      else if (!bool(__pred(*__last)))
-40039:        --__last;
-40039:      else
-40039:        break;
-40039:    std::iter_swap(__first, __last);
-40039:    ++__first;
-40039:  }
-40039:     }
-40039: # 1546 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _Pointer, typename _Predicate,
-40039:     typename _Distance>
-40039:     _ForwardIterator
-40039:     __stable_partition_adaptive(_ForwardIterator __first,
-40039:     _ForwardIterator __last,
-40039:     _Predicate __pred, _Distance __len,
-40039:     _Pointer __buffer,
-40039:     _Distance __buffer_size)
-40039:     {
-40039:       if (__len == 1)
-40039:  return __first;
-40039: 
-40039:       if (__len <= __buffer_size)
-40039:  {
-40039:    _ForwardIterator __result1 = __first;
-40039:    _Pointer __result2 = __buffer;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:    *__result2 = std::move(*__first);
-40039:    ++__result2;
-40039:    ++__first;
-40039:    for (; __first != __last; ++__first)
-40039:      if (__pred(__first))
-40039:        {
-40039:   *__result1 = std::move(*__first);
-40039:   ++__result1;
-40039:        }
-40039:      else
-40039:        {
-40039:   *__result2 = std::move(*__first);
-40039:   ++__result2;
-40039:        }
-40039: 
-40039:    std::move(__buffer, __result2, __result1);
-40039:    return __result1;
-40039:  }
-40039: 
-40039:       _ForwardIterator __middle = __first;
-40039:       std::advance(__middle, __len / 2);
-40039:       _ForwardIterator __left_split =
-40039:  std::__stable_partition_adaptive(__first, __middle, __pred,
-40039:       __len / 2, __buffer,
-40039:       __buffer_size);
-40039: 
-40039: 
-40039: 
-40039:       _Distance __right_len = __len - __len / 2;
-40039:       _ForwardIterator __right_split =
-40039:  std::__find_if_not_n(__middle, __right_len, __pred);
-40039: 
-40039:       if (__right_len)
-40039:  __right_split =
-40039:    std::__stable_partition_adaptive(__right_split, __last, __pred,
-40039:         __right_len,
-40039:         __buffer, __buffer_size);
-40039: 
-40039:       std::rotate(__left_split, __middle, __right_split);
-40039:       std::advance(__left_split, std::distance(__middle, __right_split));
-40039:       return __left_split;
-40039:     }
-40039: 
-40039:   template<typename _ForwardIterator, typename _Predicate>
-40039:     _ForwardIterator
-40039:     __stable_partition(_ForwardIterator __first, _ForwardIterator __last,
-40039:          _Predicate __pred)
-40039:     {
-40039:       __first = std::__find_if_not(__first, __last, __pred);
-40039: 
-40039:       if (__first == __last)
-40039:  return __first;
-40039: 
-40039:       typedef typename iterator_traits<_ForwardIterator>::value_type
-40039:  _ValueType;
-40039:       typedef typename iterator_traits<_ForwardIterator>::difference_type
-40039:  _DistanceType;
-40039: 
-40039:       _Temporary_buffer<_ForwardIterator, _ValueType> __buf(__first, __last);
-40039:       return
-40039:  std::__stable_partition_adaptive(__first, __last, __pred,
-40039:       _DistanceType(__buf.requested_size()),
-40039:       __buf.begin(),
-40039:       _DistanceType(__buf.size()));
-40039:     }
-40039: # 1649 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _Predicate>
-40039:     inline _ForwardIterator
-40039:     stable_partition(_ForwardIterator __first, _ForwardIterator __last,
-40039:        _Predicate __pred)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__stable_partition(__first, __last,
-40039:          __gnu_cxx::__ops::__pred_iter(__pred));
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     void
-40039:     __heap_select(_RandomAccessIterator __first,
-40039:     _RandomAccessIterator __middle,
-40039:     _RandomAccessIterator __last, _Compare __comp)
-40039:     {
-40039:       std::__make_heap(__first, __middle, __comp);
-40039:       for (_RandomAccessIterator __i = __middle; __i < __last; ++__i)
-40039:  if (__comp(__i, __first))
-40039:    std::__pop_heap(__first, __middle, __i, __comp);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _InputIterator, typename _RandomAccessIterator,
-40039:     typename _Compare>
-40039:     _RandomAccessIterator
-40039:     __partial_sort_copy(_InputIterator __first, _InputIterator __last,
-40039:    _RandomAccessIterator __result_first,
-40039:    _RandomAccessIterator __result_last,
-40039:    _Compare __comp)
-40039:     {
-40039:       typedef typename iterator_traits<_InputIterator>::value_type
-40039:  _InputValueType;
-40039:       typedef iterator_traits<_RandomAccessIterator> _RItTraits;
-40039:       typedef typename _RItTraits::difference_type _DistanceType;
-40039: 
-40039:       if (__result_first == __result_last)
-40039:  return __result_last;
-40039:       _RandomAccessIterator __result_real_last = __result_first;
-40039:       while (__first != __last && __result_real_last != __result_last)
-40039:  {
-40039:    *__result_real_last = *__first;
-40039:    ++__result_real_last;
-40039:    ++__first;
-40039:  }
-40039: 
-40039:       std::__make_heap(__result_first, __result_real_last, __comp);
-40039:       while (__first != __last)
-40039:  {
-40039:    if (__comp(__first, __result_first))
-40039:      std::__adjust_heap(__result_first, _DistanceType(0),
-40039:           _DistanceType(__result_real_last
-40039:           - __result_first),
-40039:           _InputValueType(*__first), __comp);
-40039:    ++__first;
-40039:  }
-40039:       std::__sort_heap(__result_first, __result_real_last, __comp);
-40039:       return __result_real_last;
-40039:     }
-40039: # 1735 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _RandomAccessIterator>
-40039:     inline _RandomAccessIterator
-40039:     partial_sort_copy(_InputIterator __first, _InputIterator __last,
-40039:         _RandomAccessIterator __result_first,
-40039:         _RandomAccessIterator __result_last)
-40039:     {
-40039: # 1749 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:      
-40039:      
-40039: 
-40039:      
-40039: 
-40039:      
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__partial_sort_copy(__first, __last,
-40039:           __result_first, __result_last,
-40039:           __gnu_cxx::__ops::__iter_less_iter());
-40039:     }
-40039: # 1784 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _RandomAccessIterator,
-40039:     typename _Compare>
-40039:     inline _RandomAccessIterator
-40039:     partial_sort_copy(_InputIterator __first, _InputIterator __last,
-40039:         _RandomAccessIterator __result_first,
-40039:         _RandomAccessIterator __result_last,
-40039:         _Compare __comp)
-40039:     {
-40039: # 1800 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:      
-40039:      
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__partial_sort_copy(__first, __last,
-40039:           __result_first, __result_last,
-40039:     __gnu_cxx::__ops::__iter_comp_iter(__comp));
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     void
-40039:     __unguarded_linear_insert(_RandomAccessIterator __last,
-40039:          _Compare __comp)
-40039:     {
-40039:       typename iterator_traits<_RandomAccessIterator>::value_type
-40039:  __val = std::move(*__last);
-40039:       _RandomAccessIterator __next = __last;
-40039:       --__next;
-40039:       while (__comp(__val, __next))
-40039:  {
-40039:    *__last = std::move(*__next);
-40039:    __last = __next;
-40039:    --__next;
-40039:  }
-40039:       *__last = std::move(__val);
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     void
-40039:     __insertion_sort(_RandomAccessIterator __first,
-40039:        _RandomAccessIterator __last, _Compare __comp)
-40039:     {
-40039:       if (__first == __last) return;
-40039: 
-40039:       for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
-40039:  {
-40039:    if (__comp(__i, __first))
-40039:      {
-40039:        typename iterator_traits<_RandomAccessIterator>::value_type
-40039:   __val = std::move(*__i);
-40039:        std::move_backward(__first, __i, __i + 1);
-40039:        *__first = std::move(__val);
-40039:      }
-40039:    else
-40039:      std::__unguarded_linear_insert(__i,
-40039:     __gnu_cxx::__ops::__val_comp_iter(__comp));
-40039:  }
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     inline void
-40039:     __unguarded_insertion_sort(_RandomAccessIterator __first,
-40039:           _RandomAccessIterator __last, _Compare __comp)
-40039:     {
-40039:       for (_RandomAccessIterator __i = __first; __i != __last; ++__i)
-40039:  std::__unguarded_linear_insert(__i,
-40039:     __gnu_cxx::__ops::__val_comp_iter(__comp));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   enum { _S_threshold = 16 };
-40039: 
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     void
-40039:     __final_insertion_sort(_RandomAccessIterator __first,
-40039:       _RandomAccessIterator __last, _Compare __comp)
-40039:     {
-40039:       if (__last - __first > int(_S_threshold))
-40039:  {
-40039:    std::__insertion_sort(__first, __first + int(_S_threshold), __comp);
-40039:    std::__unguarded_insertion_sort(__first + int(_S_threshold), __last,
-40039:        __comp);
-40039:  }
-40039:       else
-40039:  std::__insertion_sort(__first, __last, __comp);
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     _RandomAccessIterator
-40039:     __unguarded_partition(_RandomAccessIterator __first,
-40039:      _RandomAccessIterator __last,
-40039:      _RandomAccessIterator __pivot, _Compare __comp)
-40039:     {
-40039:       while (true)
-40039:  {
-40039:    while (__comp(__first, __pivot))
-40039:      ++__first;
-40039:    --__last;
-40039:    while (__comp(__pivot, __last))
-40039:      --__last;
-40039:    if (!(__first < __last))
-40039:      return __first;
-40039:    std::iter_swap(__first, __last);
-40039:    ++__first;
-40039:  }
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     inline _RandomAccessIterator
-40039:     __unguarded_partition_pivot(_RandomAccessIterator __first,
-40039:     _RandomAccessIterator __last, _Compare __comp)
-40039:     {
-40039:       _RandomAccessIterator __mid = __first + (__last - __first) / 2;
-40039:       std::__move_median_to_first(__first, __first + 1, __mid, __last - 1,
-40039:       __comp);
-40039:       return std::__unguarded_partition(__first + 1, __last, __first, __comp);
-40039:     }
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     inline void
-40039:     __partial_sort(_RandomAccessIterator __first,
-40039:      _RandomAccessIterator __middle,
-40039:      _RandomAccessIterator __last,
-40039:      _Compare __comp)
-40039:     {
-40039:       std::__heap_select(__first, __middle, __last, __comp);
-40039:       std::__sort_heap(__first, __middle, __comp);
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Size, typename _Compare>
-40039:     void
-40039:     __introsort_loop(_RandomAccessIterator __first,
-40039:        _RandomAccessIterator __last,
-40039:        _Size __depth_limit, _Compare __comp)
-40039:     {
-40039:       while (__last - __first > int(_S_threshold))
-40039:  {
-40039:    if (__depth_limit == 0)
-40039:      {
-40039:        std::__partial_sort(__first, __last, __last, __comp);
-40039:        return;
-40039:      }
-40039:    --__depth_limit;
-40039:    _RandomAccessIterator __cut =
-40039:      std::__unguarded_partition_pivot(__first, __last, __comp);
-40039:    std::__introsort_loop(__cut, __last, __depth_limit, __comp);
-40039:    __last = __cut;
-40039:  }
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     inline void
-40039:     __sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
-40039:     _Compare __comp)
-40039:     {
-40039:       if (__first != __last)
-40039:  {
-40039:    std::__introsort_loop(__first, __last,
-40039:     std::__lg(__last - __first) * 2,
-40039:     __comp);
-40039:    std::__final_insertion_sort(__first, __last, __comp);
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Size, typename _Compare>
-40039:     void
-40039:     __introselect(_RandomAccessIterator __first, _RandomAccessIterator __nth,
-40039:     _RandomAccessIterator __last, _Size __depth_limit,
-40039:     _Compare __comp)
-40039:     {
-40039:       while (__last - __first > 3)
-40039:  {
-40039:    if (__depth_limit == 0)
-40039:      {
-40039:        std::__heap_select(__first, __nth + 1, __last, __comp);
-40039: 
-40039:        std::iter_swap(__first, __nth);
-40039:        return;
-40039:      }
-40039:    --__depth_limit;
-40039:    _RandomAccessIterator __cut =
-40039:      std::__unguarded_partition_pivot(__first, __last, __comp);
-40039:    if (__cut <= __nth)
-40039:      __first = __cut;
-40039:    else
-40039:      __last = __cut;
-40039:  }
-40039:       std::__insertion_sort(__first, __last, __comp);
-40039:     }
-40039: # 2021 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _Tp, typename _Compare>
-40039:     inline _ForwardIterator
-40039:     lower_bound(_ForwardIterator __first, _ForwardIterator __last,
-40039:   const _Tp& __val, _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:      
-40039:                     ;
-40039: 
-40039:       return std::__lower_bound(__first, __last, __val,
-40039:     __gnu_cxx::__ops::__iter_comp_val(__comp));
-40039:     }
-40039: 
-40039:   template<typename _ForwardIterator, typename _Tp, typename _Compare>
-40039:     _ForwardIterator
-40039:     __upper_bound(_ForwardIterator __first, _ForwardIterator __last,
-40039:     const _Tp& __val, _Compare __comp)
-40039:     {
-40039:       typedef typename iterator_traits<_ForwardIterator>::difference_type
-40039:  _DistanceType;
-40039: 
-40039:       _DistanceType __len = std::distance(__first, __last);
-40039: 
-40039:       while (__len > 0)
-40039:  {
-40039:    _DistanceType __half = __len >> 1;
-40039:    _ForwardIterator __middle = __first;
-40039:    std::advance(__middle, __half);
-40039:    if (__comp(__val, __middle))
-40039:      __len = __half;
-40039:    else
-40039:      {
-40039:        __first = __middle;
-40039:        ++__first;
-40039:        __len = __len - __half - 1;
-40039:      }
-40039:  }
-40039:       return __first;
-40039:     }
-40039: # 2075 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _Tp>
-40039:     inline _ForwardIterator
-40039:     upper_bound(_ForwardIterator __first, _ForwardIterator __last,
-40039:   const _Tp& __val)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__upper_bound(__first, __last, __val,
-40039:     __gnu_cxx::__ops::__val_less_iter());
-40039:     }
-40039: # 2105 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _Tp, typename _Compare>
-40039:     inline _ForwardIterator
-40039:     upper_bound(_ForwardIterator __first, _ForwardIterator __last,
-40039:   const _Tp& __val, _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:      
-40039:                     ;
-40039: 
-40039:       return std::__upper_bound(__first, __last, __val,
-40039:     __gnu_cxx::__ops::__val_comp_iter(__comp));
-40039:     }
-40039: 
-40039:   template<typename _ForwardIterator, typename _Tp,
-40039:     typename _CompareItTp, typename _CompareTpIt>
-40039:     pair<_ForwardIterator, _ForwardIterator>
-40039:     __equal_range(_ForwardIterator __first, _ForwardIterator __last,
-40039:     const _Tp& __val,
-40039:     _CompareItTp __comp_it_val, _CompareTpIt __comp_val_it)
-40039:     {
-40039:       typedef typename iterator_traits<_ForwardIterator>::difference_type
-40039:  _DistanceType;
-40039: 
-40039:       _DistanceType __len = std::distance(__first, __last);
-40039: 
-40039:       while (__len > 0)
-40039:  {
-40039:    _DistanceType __half = __len >> 1;
-40039:    _ForwardIterator __middle = __first;
-40039:    std::advance(__middle, __half);
-40039:    if (__comp_it_val(__middle, __val))
-40039:      {
-40039:        __first = __middle;
-40039:        ++__first;
-40039:        __len = __len - __half - 1;
-40039:      }
-40039:    else if (__comp_val_it(__val, __middle))
-40039:      __len = __half;
-40039:    else
-40039:      {
-40039:        _ForwardIterator __left
-40039:   = std::__lower_bound(__first, __middle, __val, __comp_it_val);
-40039:        std::advance(__first, __len);
-40039:        _ForwardIterator __right
-40039:   = std::__upper_bound(++__middle, __first, __val, __comp_val_it);
-40039:        return pair<_ForwardIterator, _ForwardIterator>(__left, __right);
-40039:      }
-40039:  }
-40039:       return pair<_ForwardIterator, _ForwardIterator>(__first, __first);
-40039:     }
-40039: # 2176 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _Tp>
-40039:     inline pair<_ForwardIterator, _ForwardIterator>
-40039:     equal_range(_ForwardIterator __first, _ForwardIterator __last,
-40039:   const _Tp& __val)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__equal_range(__first, __last, __val,
-40039:     __gnu_cxx::__ops::__iter_less_val(),
-40039:     __gnu_cxx::__ops::__val_less_iter());
-40039:     }
-40039: # 2212 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _Tp, typename _Compare>
-40039:     inline pair<_ForwardIterator, _ForwardIterator>
-40039:     equal_range(_ForwardIterator __first, _ForwardIterator __last,
-40039:   const _Tp& __val, _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:      
-40039: 
-40039:      
-40039:                     ;
-40039:      
-40039:                     ;
-40039: 
-40039:       return std::__equal_range(__first, __last, __val,
-40039:     __gnu_cxx::__ops::__iter_comp_val(__comp),
-40039:     __gnu_cxx::__ops::__val_comp_iter(__comp));
-40039:     }
-40039: # 2245 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _Tp>
-40039:     bool
-40039:     binary_search(_ForwardIterator __first, _ForwardIterator __last,
-40039:     const _Tp& __val)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       _ForwardIterator __i
-40039:  = std::__lower_bound(__first, __last, __val,
-40039:         __gnu_cxx::__ops::__iter_less_val());
-40039:       return __i != __last && !(__val < *__i);
-40039:     }
-40039: # 2278 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _Tp, typename _Compare>
-40039:     bool
-40039:     binary_search(_ForwardIterator __first, _ForwardIterator __last,
-40039:     const _Tp& __val, _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:      
-40039:                     ;
-40039:      
-40039:                     ;
-40039: 
-40039:       _ForwardIterator __i
-40039:  = std::__lower_bound(__first, __last, __val,
-40039:         __gnu_cxx::__ops::__iter_comp_val(__comp));
-40039:       return __i != __last && !bool(__comp(__val, *__i));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _OutputIterator, typename _Compare>
-40039:     void
-40039:     __move_merge_adaptive(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:      _InputIterator2 __first2, _InputIterator2 __last2,
-40039:      _OutputIterator __result, _Compare __comp)
-40039:     {
-40039:       while (__first1 != __last1 && __first2 != __last2)
-40039:  {
-40039:    if (__comp(__first2, __first1))
-40039:      {
-40039:        *__result = std::move(*__first2);
-40039:        ++__first2;
-40039:      }
-40039:    else
-40039:      {
-40039:        *__result = std::move(*__first1);
-40039:        ++__first1;
-40039:      }
-40039:    ++__result;
-40039:  }
-40039:       if (__first1 != __last1)
-40039:  std::move(__first1, __last1, __result);
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
-40039:     typename _BidirectionalIterator3, typename _Compare>
-40039:     void
-40039:     __move_merge_adaptive_backward(_BidirectionalIterator1 __first1,
-40039:        _BidirectionalIterator1 __last1,
-40039:        _BidirectionalIterator2 __first2,
-40039:        _BidirectionalIterator2 __last2,
-40039:        _BidirectionalIterator3 __result,
-40039:        _Compare __comp)
-40039:     {
-40039:       if (__first1 == __last1)
-40039:  {
-40039:    std::move_backward(__first2, __last2, __result);
-40039:    return;
-40039:  }
-40039:       else if (__first2 == __last2)
-40039:  return;
-40039: 
-40039:       --__last1;
-40039:       --__last2;
-40039:       while (true)
-40039:  {
-40039:    if (__comp(__last2, __last1))
-40039:      {
-40039:        *--__result = std::move(*__last1);
-40039:        if (__first1 == __last1)
-40039:   {
-40039:     std::move_backward(__first2, ++__last2, __result);
-40039:     return;
-40039:   }
-40039:        --__last1;
-40039:      }
-40039:    else
-40039:      {
-40039:        *--__result = std::move(*__last2);
-40039:        if (__first2 == __last2)
-40039:   return;
-40039:        --__last2;
-40039:      }
-40039:  }
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
-40039:     typename _Distance>
-40039:     _BidirectionalIterator1
-40039:     __rotate_adaptive(_BidirectionalIterator1 __first,
-40039:         _BidirectionalIterator1 __middle,
-40039:         _BidirectionalIterator1 __last,
-40039:         _Distance __len1, _Distance __len2,
-40039:         _BidirectionalIterator2 __buffer,
-40039:         _Distance __buffer_size)
-40039:     {
-40039:       _BidirectionalIterator2 __buffer_end;
-40039:       if (__len1 > __len2 && __len2 <= __buffer_size)
-40039:  {
-40039:    if (__len2)
-40039:      {
-40039:        __buffer_end = std::move(__middle, __last, __buffer);
-40039:        std::move_backward(__first, __middle, __last);
-40039:        return std::move(__buffer, __buffer_end, __first);
-40039:      }
-40039:    else
-40039:      return __first;
-40039:  }
-40039:       else if (__len1 <= __buffer_size)
-40039:  {
-40039:    if (__len1)
-40039:      {
-40039:        __buffer_end = std::move(__first, __middle, __buffer);
-40039:        std::move(__middle, __last, __first);
-40039:        return std::move_backward(__buffer, __buffer_end, __last);
-40039:      }
-40039:    else
-40039:      return __last;
-40039:  }
-40039:       else
-40039:  {
-40039:    std::rotate(__first, __middle, __last);
-40039:    std::advance(__first, std::distance(__middle, __last));
-40039:    return __first;
-40039:  }
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _BidirectionalIterator, typename _Distance,
-40039:     typename _Pointer, typename _Compare>
-40039:     void
-40039:     __merge_adaptive(_BidirectionalIterator __first,
-40039:        _BidirectionalIterator __middle,
-40039:        _BidirectionalIterator __last,
-40039:        _Distance __len1, _Distance __len2,
-40039:        _Pointer __buffer, _Distance __buffer_size,
-40039:        _Compare __comp)
-40039:     {
-40039:       if (__len1 <= __len2 && __len1 <= __buffer_size)
-40039:  {
-40039:    _Pointer __buffer_end = std::move(__first, __middle, __buffer);
-40039:    std::__move_merge_adaptive(__buffer, __buffer_end, __middle, __last,
-40039:          __first, __comp);
-40039:  }
-40039:       else if (__len2 <= __buffer_size)
-40039:  {
-40039:    _Pointer __buffer_end = std::move(__middle, __last, __buffer);
-40039:    std::__move_merge_adaptive_backward(__first, __middle, __buffer,
-40039:            __buffer_end, __last, __comp);
-40039:  }
-40039:       else
-40039:  {
-40039:    _BidirectionalIterator __first_cut = __first;
-40039:    _BidirectionalIterator __second_cut = __middle;
-40039:    _Distance __len11 = 0;
-40039:    _Distance __len22 = 0;
-40039:    if (__len1 > __len2)
-40039:      {
-40039:        __len11 = __len1 / 2;
-40039:        std::advance(__first_cut, __len11);
-40039:        __second_cut
-40039:   = std::__lower_bound(__middle, __last, *__first_cut,
-40039:          __gnu_cxx::__ops::__iter_comp_val(__comp));
-40039:        __len22 = std::distance(__middle, __second_cut);
-40039:      }
-40039:    else
-40039:      {
-40039:        __len22 = __len2 / 2;
-40039:        std::advance(__second_cut, __len22);
-40039:        __first_cut
-40039:   = std::__upper_bound(__first, __middle, *__second_cut,
-40039:          __gnu_cxx::__ops::__val_comp_iter(__comp));
-40039:        __len11 = std::distance(__first, __first_cut);
-40039:      }
-40039: 
-40039:    _BidirectionalIterator __new_middle
-40039:      = std::__rotate_adaptive(__first_cut, __middle, __second_cut,
-40039:          __len1 - __len11, __len22, __buffer,
-40039:          __buffer_size);
-40039:    std::__merge_adaptive(__first, __first_cut, __new_middle, __len11,
-40039:     __len22, __buffer, __buffer_size, __comp);
-40039:    std::__merge_adaptive(__new_middle, __second_cut, __last,
-40039:     __len1 - __len11,
-40039:     __len2 - __len22, __buffer,
-40039:     __buffer_size, __comp);
-40039:  }
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _BidirectionalIterator, typename _Distance,
-40039:     typename _Compare>
-40039:     void
-40039:     __merge_without_buffer(_BidirectionalIterator __first,
-40039:       _BidirectionalIterator __middle,
-40039:       _BidirectionalIterator __last,
-40039:       _Distance __len1, _Distance __len2,
-40039:       _Compare __comp)
-40039:     {
-40039:       if (__len1 == 0 || __len2 == 0)
-40039:  return;
-40039: 
-40039:       if (__len1 + __len2 == 2)
-40039:  {
-40039:    if (__comp(__middle, __first))
-40039:      std::iter_swap(__first, __middle);
-40039:    return;
-40039:  }
-40039: 
-40039:       _BidirectionalIterator __first_cut = __first;
-40039:       _BidirectionalIterator __second_cut = __middle;
-40039:       _Distance __len11 = 0;
-40039:       _Distance __len22 = 0;
-40039:       if (__len1 > __len2)
-40039:  {
-40039:    __len11 = __len1 / 2;
-40039:    std::advance(__first_cut, __len11);
-40039:    __second_cut
-40039:      = std::__lower_bound(__middle, __last, *__first_cut,
-40039:      __gnu_cxx::__ops::__iter_comp_val(__comp));
-40039:    __len22 = std::distance(__middle, __second_cut);
-40039:  }
-40039:       else
-40039:  {
-40039:    __len22 = __len2 / 2;
-40039:    std::advance(__second_cut, __len22);
-40039:    __first_cut
-40039:      = std::__upper_bound(__first, __middle, *__second_cut,
-40039:      __gnu_cxx::__ops::__val_comp_iter(__comp));
-40039:    __len11 = std::distance(__first, __first_cut);
-40039:  }
-40039: 
-40039:       std::rotate(__first_cut, __middle, __second_cut);
-40039:       _BidirectionalIterator __new_middle = __first_cut;
-40039:       std::advance(__new_middle, std::distance(__middle, __second_cut));
-40039:       std::__merge_without_buffer(__first, __first_cut, __new_middle,
-40039:       __len11, __len22, __comp);
-40039:       std::__merge_without_buffer(__new_middle, __second_cut, __last,
-40039:       __len1 - __len11, __len2 - __len22, __comp);
-40039:     }
-40039: 
-40039:   template<typename _BidirectionalIterator, typename _Compare>
-40039:     void
-40039:     __inplace_merge(_BidirectionalIterator __first,
-40039:       _BidirectionalIterator __middle,
-40039:       _BidirectionalIterator __last,
-40039:       _Compare __comp)
-40039:     {
-40039:       typedef typename iterator_traits<_BidirectionalIterator>::value_type
-40039:    _ValueType;
-40039:       typedef typename iterator_traits<_BidirectionalIterator>::difference_type
-40039:    _DistanceType;
-40039: 
-40039:       if (__first == __middle || __middle == __last)
-40039:  return;
-40039: 
-40039:       const _DistanceType __len1 = std::distance(__first, __middle);
-40039:       const _DistanceType __len2 = std::distance(__middle, __last);
-40039: 
-40039:       typedef _Temporary_buffer<_BidirectionalIterator, _ValueType> _TmpBuf;
-40039:       _TmpBuf __buf(__first, __last);
-40039: 
-40039:       if (__buf.begin() == 0)
-40039:  std::__merge_without_buffer
-40039:    (__first, __middle, __last, __len1, __len2, __comp);
-40039:       else
-40039:  std::__merge_adaptive
-40039:    (__first, __middle, __last, __len1, __len2, __buf.begin(),
-40039:     _DistanceType(__buf.size()), __comp);
-40039:     }
-40039: # 2572 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _BidirectionalIterator>
-40039:     inline void
-40039:     inplace_merge(_BidirectionalIterator __first,
-40039:     _BidirectionalIterator __middle,
-40039:     _BidirectionalIterator __last)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       std::__inplace_merge(__first, __middle, __last,
-40039:       __gnu_cxx::__ops::__iter_less_iter());
-40039:     }
-40039: # 2613 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _BidirectionalIterator, typename _Compare>
-40039:     inline void
-40039:     inplace_merge(_BidirectionalIterator __first,
-40039:     _BidirectionalIterator __middle,
-40039:     _BidirectionalIterator __last,
-40039:     _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       std::__inplace_merge(__first, __middle, __last,
-40039:       __gnu_cxx::__ops::__iter_comp_iter(__comp));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _InputIterator, typename _OutputIterator,
-40039:     typename _Compare>
-40039:     _OutputIterator
-40039:     __move_merge(_InputIterator __first1, _InputIterator __last1,
-40039:    _InputIterator __first2, _InputIterator __last2,
-40039:    _OutputIterator __result, _Compare __comp)
-40039:     {
-40039:       while (__first1 != __last1 && __first2 != __last2)
-40039:  {
-40039:    if (__comp(__first2, __first1))
-40039:      {
-40039:        *__result = std::move(*__first2);
-40039:        ++__first2;
-40039:      }
-40039:    else
-40039:      {
-40039:        *__result = std::move(*__first1);
-40039:        ++__first1;
-40039:      }
-40039:    ++__result;
-40039:  }
-40039:       return std::move(__first2, __last2, std::move(__first1, __last1, __result))
-40039: 
-40039:                   ;
-40039:     }
-40039: 
-40039:   template<typename _RandomAccessIterator1, typename _RandomAccessIterator2,
-40039:     typename _Distance, typename _Compare>
-40039:     void
-40039:     __merge_sort_loop(_RandomAccessIterator1 __first,
-40039:         _RandomAccessIterator1 __last,
-40039:         _RandomAccessIterator2 __result, _Distance __step_size,
-40039:         _Compare __comp)
-40039:     {
-40039:       const _Distance __two_step = 2 * __step_size;
-40039: 
-40039:       while (__last - __first >= __two_step)
-40039:  {
-40039:    __result = std::__move_merge(__first, __first + __step_size,
-40039:            __first + __step_size,
-40039:            __first + __two_step,
-40039:            __result, __comp);
-40039:    __first += __two_step;
-40039:  }
-40039:       __step_size = std::min(_Distance(__last - __first), __step_size);
-40039: 
-40039:       std::__move_merge(__first, __first + __step_size,
-40039:    __first + __step_size, __last, __result, __comp);
-40039:     }
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Distance,
-40039:     typename _Compare>
-40039:     void
-40039:     __chunk_insertion_sort(_RandomAccessIterator __first,
-40039:       _RandomAccessIterator __last,
-40039:       _Distance __chunk_size, _Compare __comp)
-40039:     {
-40039:       while (__last - __first >= __chunk_size)
-40039:  {
-40039:    std::__insertion_sort(__first, __first + __chunk_size, __comp);
-40039:    __first += __chunk_size;
-40039:  }
-40039:       std::__insertion_sort(__first, __last, __comp);
-40039:     }
-40039: 
-40039:   enum { _S_chunk_size = 7 };
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Pointer, typename _Compare>
-40039:     void
-40039:     __merge_sort_with_buffer(_RandomAccessIterator __first,
-40039:         _RandomAccessIterator __last,
-40039:         _Pointer __buffer, _Compare __comp)
-40039:     {
-40039:       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
-40039:  _Distance;
-40039: 
-40039:       const _Distance __len = __last - __first;
-40039:       const _Pointer __buffer_last = __buffer + __len;
-40039: 
-40039:       _Distance __step_size = _S_chunk_size;
-40039:       std::__chunk_insertion_sort(__first, __last, __step_size, __comp);
-40039: 
-40039:       while (__step_size < __len)
-40039:  {
-40039:    std::__merge_sort_loop(__first, __last, __buffer,
-40039:      __step_size, __comp);
-40039:    __step_size *= 2;
-40039:    std::__merge_sort_loop(__buffer, __buffer_last, __first,
-40039:      __step_size, __comp);
-40039:    __step_size *= 2;
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Pointer,
-40039:     typename _Distance, typename _Compare>
-40039:     void
-40039:     __stable_sort_adaptive(_RandomAccessIterator __first,
-40039:       _RandomAccessIterator __last,
-40039:       _Pointer __buffer, _Distance __buffer_size,
-40039:       _Compare __comp)
-40039:     {
-40039:       const _Distance __len = (__last - __first + 1) / 2;
-40039:       const _RandomAccessIterator __middle = __first + __len;
-40039:       if (__len > __buffer_size)
-40039:  {
-40039:    std::__stable_sort_adaptive(__first, __middle, __buffer,
-40039:           __buffer_size, __comp);
-40039:    std::__stable_sort_adaptive(__middle, __last, __buffer,
-40039:           __buffer_size, __comp);
-40039:  }
-40039:       else
-40039:  {
-40039:    std::__merge_sort_with_buffer(__first, __middle, __buffer, __comp);
-40039:    std::__merge_sort_with_buffer(__middle, __last, __buffer, __comp);
-40039:  }
-40039:       std::__merge_adaptive(__first, __middle, __last,
-40039:        _Distance(__middle - __first),
-40039:        _Distance(__last - __middle),
-40039:        __buffer, __buffer_size,
-40039:        __comp);
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     void
-40039:     __inplace_stable_sort(_RandomAccessIterator __first,
-40039:      _RandomAccessIterator __last, _Compare __comp)
-40039:     {
-40039:       if (__last - __first < 15)
-40039:  {
-40039:    std::__insertion_sort(__first, __last, __comp);
-40039:    return;
-40039:  }
-40039:       _RandomAccessIterator __middle = __first + (__last - __first) / 2;
-40039:       std::__inplace_stable_sort(__first, __middle, __comp);
-40039:       std::__inplace_stable_sort(__middle, __last, __comp);
-40039:       std::__merge_without_buffer(__first, __middle, __last,
-40039:       __middle - __first,
-40039:       __last - __middle,
-40039:       __comp);
-40039:     }
-40039: # 2785 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _Compare>
-40039:     bool
-40039:     __includes(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:         _InputIterator2 __first2, _InputIterator2 __last2,
-40039:         _Compare __comp)
-40039:     {
-40039:       while (__first1 != __last1 && __first2 != __last2)
-40039:  if (__comp(__first2, __first1))
-40039:    return false;
-40039:  else if (__comp(__first1, __first2))
-40039:    ++__first1;
-40039:  else
-40039:    {
-40039:      ++__first1;
-40039:      ++__first2;
-40039:    }
-40039: 
-40039:       return __first2 == __last2;
-40039:     }
-40039: # 2824 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator1, typename _InputIterator2>
-40039:     inline bool
-40039:     includes(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:       _InputIterator2 __first2, _InputIterator2 __last2)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__includes(__first1, __last1, __first2, __last2,
-40039:         __gnu_cxx::__ops::__iter_less_iter());
-40039:     }
-40039: # 2868 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _Compare>
-40039:     inline bool
-40039:     includes(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:       _InputIterator2 __first2, _InputIterator2 __last2,
-40039:       _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__includes(__first1, __last1, __first2, __last2,
-40039:         __gnu_cxx::__ops::__iter_comp_iter(__comp));
-40039:     }
-40039: # 2903 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _BidirectionalIterator, typename _Compare>
-40039:     bool
-40039:     __next_permutation(_BidirectionalIterator __first,
-40039:          _BidirectionalIterator __last, _Compare __comp)
-40039:     {
-40039:       if (__first == __last)
-40039:  return false;
-40039:       _BidirectionalIterator __i = __first;
-40039:       ++__i;
-40039:       if (__i == __last)
-40039:  return false;
-40039:       __i = __last;
-40039:       --__i;
-40039: 
-40039:       for(;;)
-40039:  {
-40039:    _BidirectionalIterator __ii = __i;
-40039:    --__i;
-40039:    if (__comp(__i, __ii))
-40039:      {
-40039:        _BidirectionalIterator __j = __last;
-40039:        while (!__comp(__i, --__j))
-40039:   {}
-40039:        std::iter_swap(__i, __j);
-40039:        std::__reverse(__ii, __last,
-40039:         std::__iterator_category(__first));
-40039:        return true;
-40039:      }
-40039:    if (__i == __first)
-40039:      {
-40039:        std::__reverse(__first, __last,
-40039:         std::__iterator_category(__first));
-40039:        return false;
-40039:      }
-40039:  }
-40039:     }
-40039: # 2952 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _BidirectionalIterator>
-40039:     inline bool
-40039:     next_permutation(_BidirectionalIterator __first,
-40039:        _BidirectionalIterator __last)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__next_permutation
-40039:  (__first, __last, __gnu_cxx::__ops::__iter_less_iter());
-40039:     }
-40039: # 2984 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _BidirectionalIterator, typename _Compare>
-40039:     inline bool
-40039:     next_permutation(_BidirectionalIterator __first,
-40039:        _BidirectionalIterator __last, _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__next_permutation
-40039:  (__first, __last, __gnu_cxx::__ops::__iter_comp_iter(__comp));
-40039:     }
-40039: 
-40039:   template<typename _BidirectionalIterator, typename _Compare>
-40039:     bool
-40039:     __prev_permutation(_BidirectionalIterator __first,
-40039:          _BidirectionalIterator __last, _Compare __comp)
-40039:     {
-40039:       if (__first == __last)
-40039:  return false;
-40039:       _BidirectionalIterator __i = __first;
-40039:       ++__i;
-40039:       if (__i == __last)
-40039:  return false;
-40039:       __i = __last;
-40039:       --__i;
-40039: 
-40039:       for(;;)
-40039:  {
-40039:    _BidirectionalIterator __ii = __i;
-40039:    --__i;
-40039:    if (__comp(__ii, __i))
-40039:      {
-40039:        _BidirectionalIterator __j = __last;
-40039:        while (!__comp(--__j, __i))
-40039:   {}
-40039:        std::iter_swap(__i, __j);
-40039:        std::__reverse(__ii, __last,
-40039:         std::__iterator_category(__first));
-40039:        return true;
-40039:      }
-40039:    if (__i == __first)
-40039:      {
-40039:        std::__reverse(__first, __last,
-40039:         std::__iterator_category(__first));
-40039:        return false;
-40039:      }
-40039:  }
-40039:     }
-40039: # 3052 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _BidirectionalIterator>
-40039:     inline bool
-40039:     prev_permutation(_BidirectionalIterator __first,
-40039:        _BidirectionalIterator __last)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__prev_permutation(__first, __last,
-40039:          __gnu_cxx::__ops::__iter_less_iter());
-40039:     }
-40039: # 3084 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _BidirectionalIterator, typename _Compare>
-40039:     inline bool
-40039:     prev_permutation(_BidirectionalIterator __first,
-40039:        _BidirectionalIterator __last, _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__prev_permutation(__first, __last,
-40039:     __gnu_cxx::__ops::__iter_comp_iter(__comp));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _InputIterator, typename _OutputIterator,
-40039:     typename _Predicate, typename _Tp>
-40039:     _OutputIterator
-40039:     __replace_copy_if(_InputIterator __first, _InputIterator __last,
-40039:         _OutputIterator __result,
-40039:         _Predicate __pred, const _Tp& __new_value)
-40039:     {
-40039:       for (; __first != __last; ++__first, (void)++__result)
-40039:  if (__pred(__first))
-40039:    *__result = __new_value;
-40039:  else
-40039:    *__result = *__first;
-40039:       return __result;
-40039:     }
-40039: # 3134 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _OutputIterator, typename _Tp>
-40039:     inline _OutputIterator
-40039:     replace_copy(_InputIterator __first, _InputIterator __last,
-40039:    _OutputIterator __result,
-40039:    const _Tp& __old_value, const _Tp& __new_value)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__replace_copy_if(__first, __last, __result,
-40039:    __gnu_cxx::__ops::__iter_equals_val(__old_value),
-40039:            __new_value);
-40039:     }
-40039: # 3168 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _OutputIterator,
-40039:     typename _Predicate, typename _Tp>
-40039:     inline _OutputIterator
-40039:     replace_copy_if(_InputIterator __first, _InputIterator __last,
-40039:       _OutputIterator __result,
-40039:       _Predicate __pred, const _Tp& __new_value)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__replace_copy_if(__first, __last, __result,
-40039:     __gnu_cxx::__ops::__pred_iter(__pred),
-40039:            __new_value);
-40039:     }
-40039: 
-40039:   template<typename _InputIterator, typename _Predicate>
-40039:     typename iterator_traits<_InputIterator>::difference_type
-40039:     __count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred)
-40039:     {
-40039:       typename iterator_traits<_InputIterator>::difference_type __n = 0;
-40039:       for (; __first != __last; ++__first)
-40039:  if (__pred(__first))
-40039:    ++__n;
-40039:       return __n;
-40039:     }
-40039: # 3207 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator>
-40039:     inline bool
-40039:     is_sorted(_ForwardIterator __first, _ForwardIterator __last)
-40039:     { return std::is_sorted_until(__first, __last) == __last; }
-40039: # 3221 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _Compare>
-40039:     inline bool
-40039:     is_sorted(_ForwardIterator __first, _ForwardIterator __last,
-40039:        _Compare __comp)
-40039:     { return std::is_sorted_until(__first, __last, __comp) == __last; }
-40039: 
-40039:   template<typename _ForwardIterator, typename _Compare>
-40039:     _ForwardIterator
-40039:     __is_sorted_until(_ForwardIterator __first, _ForwardIterator __last,
-40039:         _Compare __comp)
-40039:     {
-40039:       if (__first == __last)
-40039:  return __last;
-40039: 
-40039:       _ForwardIterator __next = __first;
-40039:       for (++__next; __next != __last; __first = __next, (void)++__next)
-40039:  if (__comp(__next, __first))
-40039:    return __next;
-40039:       return __next;
-40039:     }
-40039: # 3250 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator>
-40039:     inline _ForwardIterator
-40039:     is_sorted_until(_ForwardIterator __first, _ForwardIterator __last)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__is_sorted_until(__first, __last,
-40039:         __gnu_cxx::__ops::__iter_less_iter());
-40039:     }
-40039: # 3274 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _Compare>
-40039:     inline _ForwardIterator
-40039:     is_sorted_until(_ForwardIterator __first, _ForwardIterator __last,
-40039:       _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__is_sorted_until(__first, __last,
-40039:         __gnu_cxx::__ops::__iter_comp_iter(__comp));
-40039:     }
-40039: # 3299 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _Tp>
-40039:     constexpr
-40039:     inline pair<const _Tp&, const _Tp&>
-40039:     minmax(const _Tp& __a, const _Tp& __b)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:       return __b < __a ? pair<const _Tp&, const _Tp&>(__b, __a)
-40039:          : pair<const _Tp&, const _Tp&>(__a, __b);
-40039:     }
-40039: # 3320 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _Tp, typename _Compare>
-40039:     constexpr
-40039:     inline pair<const _Tp&, const _Tp&>
-40039:     minmax(const _Tp& __a, const _Tp& __b, _Compare __comp)
-40039:     {
-40039:       return __comp(__b, __a) ? pair<const _Tp&, const _Tp&>(__b, __a)
-40039:          : pair<const _Tp&, const _Tp&>(__a, __b);
-40039:     }
-40039: 
-40039:   template<typename _ForwardIterator, typename _Compare>
-40039:     constexpr
-40039:     pair<_ForwardIterator, _ForwardIterator>
-40039:     __minmax_element(_ForwardIterator __first, _ForwardIterator __last,
-40039:        _Compare __comp)
-40039:     {
-40039:       _ForwardIterator __next = __first;
-40039:       if (__first == __last
-40039:    || ++__next == __last)
-40039:  return std::make_pair(__first, __first);
-40039: 
-40039:       _ForwardIterator __min{}, __max{};
-40039:       if (__comp(__next, __first))
-40039:  {
-40039:    __min = __next;
-40039:    __max = __first;
-40039:  }
-40039:       else
-40039:  {
-40039:    __min = __first;
-40039:    __max = __next;
-40039:  }
-40039: 
-40039:       __first = __next;
-40039:       ++__first;
-40039: 
-40039:       while (__first != __last)
-40039:  {
-40039:    __next = __first;
-40039:    if (++__next == __last)
-40039:      {
-40039:        if (__comp(__first, __min))
-40039:   __min = __first;
-40039:        else if (!__comp(__first, __max))
-40039:   __max = __first;
-40039:        break;
-40039:      }
-40039: 
-40039:    if (__comp(__next, __first))
-40039:      {
-40039:        if (__comp(__next, __min))
-40039:   __min = __next;
-40039:        if (!__comp(__first, __max))
-40039:   __max = __first;
-40039:      }
-40039:    else
-40039:      {
-40039:        if (__comp(__first, __min))
-40039:   __min = __first;
-40039:        if (!__comp(__next, __max))
-40039:   __max = __next;
-40039:      }
-40039: 
-40039:    __first = __next;
-40039:    ++__first;
-40039:  }
-40039: 
-40039:       return std::make_pair(__min, __max);
-40039:     }
-40039: # 3400 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator>
-40039:     constexpr
-40039:     inline pair<_ForwardIterator, _ForwardIterator>
-40039:     minmax_element(_ForwardIterator __first, _ForwardIterator __last)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__minmax_element(__first, __last,
-40039:        __gnu_cxx::__ops::__iter_less_iter());
-40039:     }
-40039: # 3428 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _Compare>
-40039:     constexpr
-40039:     inline pair<_ForwardIterator, _ForwardIterator>
-40039:     minmax_element(_ForwardIterator __first, _ForwardIterator __last,
-40039:      _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__minmax_element(__first, __last,
-40039:        __gnu_cxx::__ops::__iter_comp_iter(__comp));
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr
-40039:     inline _Tp
-40039:     min(initializer_list<_Tp> __l)
-40039:     { return *std::min_element(__l.begin(), __l.end()); }
-40039: 
-40039:   template<typename _Tp, typename _Compare>
-40039:     constexpr
-40039:     inline _Tp
-40039:     min(initializer_list<_Tp> __l, _Compare __comp)
-40039:     { return *std::min_element(__l.begin(), __l.end(), __comp); }
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr
-40039:     inline _Tp
-40039:     max(initializer_list<_Tp> __l)
-40039:     { return *std::max_element(__l.begin(), __l.end()); }
-40039: 
-40039:   template<typename _Tp, typename _Compare>
-40039:     constexpr
-40039:     inline _Tp
-40039:     max(initializer_list<_Tp> __l, _Compare __comp)
-40039:     { return *std::max_element(__l.begin(), __l.end(), __comp); }
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr
-40039:     inline pair<_Tp, _Tp>
-40039:     minmax(initializer_list<_Tp> __l)
-40039:     {
-40039:       pair<const _Tp*, const _Tp*> __p =
-40039:  std::minmax_element(__l.begin(), __l.end());
-40039:       return std::make_pair(*__p.first, *__p.second);
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Compare>
-40039:     constexpr
-40039:     inline pair<_Tp, _Tp>
-40039:     minmax(initializer_list<_Tp> __l, _Compare __comp)
-40039:     {
-40039:       pair<const _Tp*, const _Tp*> __p =
-40039:  std::minmax_element(__l.begin(), __l.end(), __comp);
-40039:       return std::make_pair(*__p.first, *__p.second);
-40039:     }
-40039: 
-40039:   template<typename _ForwardIterator1, typename _ForwardIterator2,
-40039:     typename _BinaryPredicate>
-40039:     bool
-40039:     __is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
-40039:        _ForwardIterator2 __first2, _BinaryPredicate __pred)
-40039:     {
-40039: 
-40039: 
-40039:       for (; __first1 != __last1; ++__first1, (void)++__first2)
-40039:  if (!__pred(__first1, __first2))
-40039:    break;
-40039: 
-40039:       if (__first1 == __last1)
-40039:  return true;
-40039: 
-40039: 
-40039: 
-40039:       _ForwardIterator2 __last2 = __first2;
-40039:       std::advance(__last2, std::distance(__first1, __last1));
-40039:       for (_ForwardIterator1 __scan = __first1; __scan != __last1; ++__scan)
-40039:  {
-40039:    if (__scan != std::__find_if(__first1, __scan,
-40039:      __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)))
-40039:      continue;
-40039: 
-40039:    auto __matches
-40039:      = std::__count_if(__first2, __last2,
-40039:    __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan));
-40039:    if (0 == __matches ||
-40039:        std::__count_if(__scan, __last1,
-40039:    __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan))
-40039:        != __matches)
-40039:      return false;
-40039:  }
-40039:       return true;
-40039:     }
-40039: # 3540 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator1, typename _ForwardIterator2>
-40039:     inline bool
-40039:     is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
-40039:      _ForwardIterator2 __first2)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__is_permutation(__first1, __last1, __first2,
-40039:        __gnu_cxx::__ops::__iter_equal_to_iter());
-40039:     }
-40039: # 3571 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator1, typename _ForwardIterator2,
-40039:     typename _BinaryPredicate>
-40039:     inline bool
-40039:     is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
-40039:      _ForwardIterator2 __first2, _BinaryPredicate __pred)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__is_permutation(__first1, __last1, __first2,
-40039:        __gnu_cxx::__ops::__iter_comp_iter(__pred));
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _ForwardIterator1, typename _ForwardIterator2,
-40039:     typename _BinaryPredicate>
-40039:     bool
-40039:     __is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
-40039:        _ForwardIterator2 __first2, _ForwardIterator2 __last2,
-40039:        _BinaryPredicate __pred)
-40039:     {
-40039:       using _Cat1
-40039:  = typename iterator_traits<_ForwardIterator1>::iterator_category;
-40039:       using _Cat2
-40039:  = typename iterator_traits<_ForwardIterator2>::iterator_category;
-40039:       using _It1_is_RA = is_same<_Cat1, random_access_iterator_tag>;
-40039:       using _It2_is_RA = is_same<_Cat2, random_access_iterator_tag>;
-40039:       constexpr bool __ra_iters = _It1_is_RA() && _It2_is_RA();
-40039:       if (__ra_iters)
-40039:  {
-40039:    auto __d1 = std::distance(__first1, __last1);
-40039:    auto __d2 = std::distance(__first2, __last2);
-40039:    if (__d1 != __d2)
-40039:      return false;
-40039:  }
-40039: 
-40039: 
-40039: 
-40039:       for (; __first1 != __last1 && __first2 != __last2;
-40039:    ++__first1, (void)++__first2)
-40039:  if (!__pred(__first1, __first2))
-40039:    break;
-40039: 
-40039:       if (__ra_iters)
-40039:  {
-40039:    if (__first1 == __last1)
-40039:      return true;
-40039:  }
-40039:       else
-40039:  {
-40039:    auto __d1 = std::distance(__first1, __last1);
-40039:    auto __d2 = std::distance(__first2, __last2);
-40039:    if (__d1 == 0 && __d2 == 0)
-40039:      return true;
-40039:    if (__d1 != __d2)
-40039:      return false;
-40039:  }
-40039: 
-40039:       for (_ForwardIterator1 __scan = __first1; __scan != __last1; ++__scan)
-40039:  {
-40039:    if (__scan != std::__find_if(__first1, __scan,
-40039:    __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)))
-40039:      continue;
-40039: 
-40039:    auto __matches = std::__count_if(__first2, __last2,
-40039:   __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan));
-40039:    if (0 == __matches
-40039:        || std::__count_if(__scan, __last1,
-40039:    __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan))
-40039:        != __matches)
-40039:      return false;
-40039:  }
-40039:       return true;
-40039:     }
-40039: # 3664 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator1, typename _ForwardIterator2>
-40039:     inline bool
-40039:     is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
-40039:      _ForwardIterator2 __first2, _ForwardIterator2 __last2)
-40039:     {
-40039:       ;
-40039:       ;
-40039: 
-40039:       return
-40039:  std::__is_permutation(__first1, __last1, __first2, __last2,
-40039:          __gnu_cxx::__ops::__iter_equal_to_iter());
-40039:     }
-40039: # 3691 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator1, typename _ForwardIterator2,
-40039:     typename _BinaryPredicate>
-40039:     inline bool
-40039:     is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
-40039:      _ForwardIterator2 __first2, _ForwardIterator2 __last2,
-40039:      _BinaryPredicate __pred)
-40039:     {
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__is_permutation(__first1, __last1, __first2, __last2,
-40039:        __gnu_cxx::__ops::__iter_comp_iter(__pred));
-40039:     }
-40039: # 3767 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _IntType, typename _UniformRandomBitGenerator>
-40039:     pair<_IntType, _IntType>
-40039:     __gen_two_uniform_ints(_IntType __b0, _IntType __b1,
-40039:       _UniformRandomBitGenerator&& __g)
-40039:     {
-40039:       _IntType __x
-40039:  = uniform_int_distribution<_IntType>{0, (__b0 * __b1) - 1}(__g);
-40039:       return std::make_pair(__x / __b1, __x % __b1);
-40039:     }
-40039: # 3789 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _RandomAccessIterator,
-40039:     typename _UniformRandomNumberGenerator>
-40039:     void
-40039:     shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last,
-40039:      _UniformRandomNumberGenerator&& __g)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       if (__first == __last)
-40039:  return;
-40039: 
-40039:       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
-40039:  _DistanceType;
-40039: 
-40039:       typedef typename std::make_unsigned<_DistanceType>::type __ud_type;
-40039:       typedef typename std::uniform_int_distribution<__ud_type> __distr_type;
-40039:       typedef typename __distr_type::param_type __p_type;
-40039: 
-40039:       typedef typename remove_reference<_UniformRandomNumberGenerator>::type
-40039:  _Gen;
-40039:       typedef typename common_type<typename _Gen::result_type, __ud_type>::type
-40039:  __uc_type;
-40039: 
-40039:       const __uc_type __urngrange = __g.max() - __g.min();
-40039:       const __uc_type __urange = __uc_type(__last - __first);
-40039: 
-40039:       if (__urngrange / __urange >= __urange)
-40039: 
-40039:       {
-40039:  _RandomAccessIterator __i = __first + 1;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  if ((__urange % 2) == 0)
-40039:  {
-40039:    __distr_type __d{0, 1};
-40039:    std::iter_swap(__i++, __first + __d(__g));
-40039:  }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  while (__i != __last)
-40039:  {
-40039:    const __uc_type __swap_range = __uc_type(__i - __first) + 1;
-40039: 
-40039:    const pair<__uc_type, __uc_type> __pospos =
-40039:      __gen_two_uniform_ints(__swap_range, __swap_range + 1, __g);
-40039: 
-40039:    std::iter_swap(__i++, __first + __pospos.first);
-40039:    std::iter_swap(__i++, __first + __pospos.second);
-40039:  }
-40039: 
-40039:  return;
-40039:       }
-40039: 
-40039:       __distr_type __d;
-40039: 
-40039:       for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
-40039:  std::iter_swap(__i, __first + __d(__g, __p_type(0, __i - __first)));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 3874 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _Function>
-40039:     _Function
-40039:     for_each(_InputIterator __first, _InputIterator __last, _Function __f)
-40039:     {
-40039: 
-40039:      
-40039:       ;
-40039:       for (; __first != __last; ++__first)
-40039:  __f(*__first);
-40039:       return __f;
-40039:     }
-40039: # 3895 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _Tp>
-40039:     inline _InputIterator
-40039:     find(_InputIterator __first, _InputIterator __last,
-40039:   const _Tp& __val)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:       ;
-40039:       return std::__find_if(__first, __last,
-40039:        __gnu_cxx::__ops::__iter_equals_val(__val));
-40039:     }
-40039: # 3919 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _Predicate>
-40039:     inline _InputIterator
-40039:     find_if(_InputIterator __first, _InputIterator __last,
-40039:      _Predicate __pred)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__find_if(__first, __last,
-40039:        __gnu_cxx::__ops::__pred_iter(__pred));
-40039:     }
-40039: # 3950 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _ForwardIterator>
-40039:     _InputIterator
-40039:     find_first_of(_InputIterator __first1, _InputIterator __last1,
-40039:     _ForwardIterator __first2, _ForwardIterator __last2)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       for (; __first1 != __last1; ++__first1)
-40039:  for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter)
-40039:    if (*__first1 == *__iter)
-40039:      return __first1;
-40039:       return __last1;
-40039:     }
-40039: # 3990 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _ForwardIterator,
-40039:     typename _BinaryPredicate>
-40039:     _InputIterator
-40039:     find_first_of(_InputIterator __first1, _InputIterator __last1,
-40039:     _ForwardIterator __first2, _ForwardIterator __last2,
-40039:     _BinaryPredicate __comp)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       for (; __first1 != __last1; ++__first1)
-40039:  for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter)
-40039:    if (__comp(*__first1, *__iter))
-40039:      return __first1;
-40039:       return __last1;
-40039:     }
-40039: # 4022 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator>
-40039:     inline _ForwardIterator
-40039:     adjacent_find(_ForwardIterator __first, _ForwardIterator __last)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__adjacent_find(__first, __last,
-40039:       __gnu_cxx::__ops::__iter_equal_to_iter());
-40039:     }
-40039: # 4047 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _BinaryPredicate>
-40039:     inline _ForwardIterator
-40039:     adjacent_find(_ForwardIterator __first, _ForwardIterator __last,
-40039:     _BinaryPredicate __binary_pred)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__adjacent_find(__first, __last,
-40039:    __gnu_cxx::__ops::__iter_comp_iter(__binary_pred));
-40039:     }
-40039: # 4072 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _Tp>
-40039:     inline typename iterator_traits<_InputIterator>::difference_type
-40039:     count(_InputIterator __first, _InputIterator __last, const _Tp& __value)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__count_if(__first, __last,
-40039:         __gnu_cxx::__ops::__iter_equals_val(__value));
-40039:     }
-40039: # 4095 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _Predicate>
-40039:     inline typename iterator_traits<_InputIterator>::difference_type
-40039:     count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__count_if(__first, __last,
-40039:         __gnu_cxx::__ops::__pred_iter(__pred));
-40039:     }
-40039: # 4135 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator1, typename _ForwardIterator2>
-40039:     inline _ForwardIterator1
-40039:     search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
-40039:     _ForwardIterator2 __first2, _ForwardIterator2 __last2)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__search(__first1, __last1, __first2, __last2,
-40039:       __gnu_cxx::__ops::__iter_equal_to_iter());
-40039:     }
-40039: # 4174 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator1, typename _ForwardIterator2,
-40039:     typename _BinaryPredicate>
-40039:     inline _ForwardIterator1
-40039:     search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
-40039:     _ForwardIterator2 __first2, _ForwardIterator2 __last2,
-40039:     _BinaryPredicate __predicate)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__search(__first1, __last1, __first2, __last2,
-40039:       __gnu_cxx::__ops::__iter_comp_iter(__predicate));
-40039:     }
-40039: # 4209 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _Integer, typename _Tp>
-40039:     inline _ForwardIterator
-40039:     search_n(_ForwardIterator __first, _ForwardIterator __last,
-40039:       _Integer __count, const _Tp& __val)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__search_n(__first, __last, __count,
-40039:         __gnu_cxx::__ops::__iter_equals_val(__val));
-40039:     }
-40039: # 4242 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _Integer, typename _Tp,
-40039:     typename _BinaryPredicate>
-40039:     inline _ForwardIterator
-40039:     search_n(_ForwardIterator __first, _ForwardIterator __last,
-40039:       _Integer __count, const _Tp& __val,
-40039:       _BinaryPredicate __binary_pred)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__search_n(__first, __last, __count,
-40039:   __gnu_cxx::__ops::__iter_comp_val(__binary_pred, __val));
-40039:     }
-40039: # 4290 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _OutputIterator,
-40039:     typename _UnaryOperation>
-40039:     _OutputIterator
-40039:     transform(_InputIterator __first, _InputIterator __last,
-40039:        _OutputIterator __result, _UnaryOperation __unary_op)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039: 
-40039:       for (; __first != __last; ++__first, (void)++__result)
-40039:  *__result = __unary_op(*__first);
-40039:       return __result;
-40039:     }
-40039: # 4327 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _OutputIterator, typename _BinaryOperation>
-40039:     _OutputIterator
-40039:     transform(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:        _InputIterator2 __first2, _OutputIterator __result,
-40039:        _BinaryOperation __binary_op)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039: 
-40039:       for (; __first1 != __last1; ++__first1, (void)++__first2, ++__result)
-40039:  *__result = __binary_op(*__first1, *__first2);
-40039:       return __result;
-40039:     }
-40039: # 4360 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _Tp>
-40039:     void
-40039:     replace(_ForwardIterator __first, _ForwardIterator __last,
-40039:      const _Tp& __old_value, const _Tp& __new_value)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       for (; __first != __last; ++__first)
-40039:  if (*__first == __old_value)
-40039:    *__first = __new_value;
-40039:     }
-40039: # 4392 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _Predicate, typename _Tp>
-40039:     void
-40039:     replace_if(_ForwardIterator __first, _ForwardIterator __last,
-40039:         _Predicate __pred, const _Tp& __new_value)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       for (; __first != __last; ++__first)
-40039:  if (__pred(*__first))
-40039:    *__first = __new_value;
-40039:     }
-40039: # 4424 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _Generator>
-40039:     void
-40039:     generate(_ForwardIterator __first, _ForwardIterator __last,
-40039:       _Generator __gen)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       for (; __first != __last; ++__first)
-40039:  *__first = __gen();
-40039:     }
-40039: # 4455 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _OutputIterator, typename _Size, typename _Generator>
-40039:     _OutputIterator
-40039:     generate_n(_OutputIterator __first, _Size __n, _Generator __gen)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039: 
-40039: 
-40039:       for (__decltype(__n + 0) __niter = __n;
-40039:     __niter > 0; --__niter, (void) ++__first)
-40039:  *__first = __gen();
-40039:       return __first;
-40039:     }
-40039: # 4491 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _OutputIterator>
-40039:     inline _OutputIterator
-40039:     unique_copy(_InputIterator __first, _InputIterator __last,
-40039:   _OutputIterator __result)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       if (__first == __last)
-40039:  return __result;
-40039:       return std::__unique_copy(__first, __last, __result,
-40039:     __gnu_cxx::__ops::__iter_equal_to_iter(),
-40039:     std::__iterator_category(__first),
-40039:     std::__iterator_category(__result));
-40039:     }
-40039: # 4531 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator, typename _OutputIterator,
-40039:     typename _BinaryPredicate>
-40039:     inline _OutputIterator
-40039:     unique_copy(_InputIterator __first, _InputIterator __last,
-40039:   _OutputIterator __result,
-40039:   _BinaryPredicate __binary_pred)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       if (__first == __last)
-40039:  return __result;
-40039:       return std::__unique_copy(__first, __last, __result,
-40039:    __gnu_cxx::__ops::__iter_comp_iter(__binary_pred),
-40039:     std::__iterator_category(__first),
-40039:     std::__iterator_category(__result));
-40039:     }
-40039: # 4564 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _RandomAccessIterator>
-40039:     inline void
-40039:     random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       if (__first != __last)
-40039:  for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
-40039:    {
-40039: 
-40039:      _RandomAccessIterator __j = __first
-40039:      + std::rand() % ((__i - __first) + 1);
-40039:      if (__i != __j)
-40039:        std::iter_swap(__i, __j);
-40039:    }
-40039:     }
-40039: # 4599 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _RandomAccessIterator, typename _RandomNumberGenerator>
-40039:     void
-40039:     random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last,
-40039: 
-40039:      _RandomNumberGenerator&& __rand)
-40039: 
-40039: 
-40039: 
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       if (__first == __last)
-40039:  return;
-40039:       for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
-40039:  {
-40039:    _RandomAccessIterator __j = __first + __rand((__i - __first) + 1);
-40039:    if (__i != __j)
-40039:      std::iter_swap(__i, __j);
-40039:  }
-40039:     }
-40039: # 4639 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _Predicate>
-40039:     inline _ForwardIterator
-40039:     partition(_ForwardIterator __first, _ForwardIterator __last,
-40039:        _Predicate __pred)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039: 
-40039:       return std::__partition(__first, __last, __pred,
-40039:          std::__iterator_category(__first));
-40039:     }
-40039: # 4672 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _RandomAccessIterator>
-40039:     inline void
-40039:     partial_sort(_RandomAccessIterator __first,
-40039:    _RandomAccessIterator __middle,
-40039:    _RandomAccessIterator __last)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       std::__partial_sort(__first, __middle, __last,
-40039:      __gnu_cxx::__ops::__iter_less_iter());
-40039:     }
-40039: # 4710 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     inline void
-40039:     partial_sort(_RandomAccessIterator __first,
-40039:    _RandomAccessIterator __middle,
-40039:    _RandomAccessIterator __last,
-40039:    _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       std::__partial_sort(__first, __middle, __last,
-40039:      __gnu_cxx::__ops::__iter_comp_iter(__comp));
-40039:     }
-40039: # 4746 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _RandomAccessIterator>
-40039:     inline void
-40039:     nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth,
-40039:   _RandomAccessIterator __last)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       if (__first == __last || __nth == __last)
-40039:  return;
-40039: 
-40039:       std::__introselect(__first, __nth, __last,
-40039:     std::__lg(__last - __first) * 2,
-40039:     __gnu_cxx::__ops::__iter_less_iter());
-40039:     }
-40039: # 4785 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     inline void
-40039:     nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth,
-40039:   _RandomAccessIterator __last, _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       if (__first == __last || __nth == __last)
-40039:  return;
-40039: 
-40039:       std::__introselect(__first, __nth, __last,
-40039:     std::__lg(__last - __first) * 2,
-40039:     __gnu_cxx::__ops::__iter_comp_iter(__comp));
-40039:     }
-40039: # 4822 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _RandomAccessIterator>
-40039:     inline void
-40039:     sort(_RandomAccessIterator __first, _RandomAccessIterator __last)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
-40039:     }
-40039: # 4852 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     inline void
-40039:     sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
-40039:   _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       std::__sort(__first, __last, __gnu_cxx::__ops::__iter_comp_iter(__comp));
-40039:     }
-40039: 
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _OutputIterator, typename _Compare>
-40039:     _OutputIterator
-40039:     __merge(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:      _InputIterator2 __first2, _InputIterator2 __last2,
-40039:      _OutputIterator __result, _Compare __comp)
-40039:     {
-40039:       while (__first1 != __last1 && __first2 != __last2)
-40039:  {
-40039:    if (__comp(__first2, __first1))
-40039:      {
-40039:        *__result = *__first2;
-40039:        ++__first2;
-40039:      }
-40039:    else
-40039:      {
-40039:        *__result = *__first1;
-40039:        ++__first1;
-40039:      }
-40039:    ++__result;
-40039:  }
-40039:       return std::copy(__first2, __last2,
-40039:          std::copy(__first1, __last1, __result));
-40039:     }
-40039: # 4913 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _OutputIterator>
-40039:     inline _OutputIterator
-40039:     merge(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:    _InputIterator2 __first2, _InputIterator2 __last2,
-40039:    _OutputIterator __result)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__merge(__first1, __last1,
-40039:          __first2, __last2, __result,
-40039:          __gnu_cxx::__ops::__iter_less_iter());
-40039:     }
-40039: # 4963 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _OutputIterator, typename _Compare>
-40039:     inline _OutputIterator
-40039:     merge(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:    _InputIterator2 __first2, _InputIterator2 __last2,
-40039:    _OutputIterator __result, _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__merge(__first1, __last1,
-40039:     __first2, __last2, __result,
-40039:     __gnu_cxx::__ops::__iter_comp_iter(__comp));
-40039:     }
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     inline void
-40039:     __stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
-40039:     _Compare __comp)
-40039:     {
-40039:       typedef typename iterator_traits<_RandomAccessIterator>::value_type
-40039:  _ValueType;
-40039:       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
-40039:  _DistanceType;
-40039: 
-40039:       typedef _Temporary_buffer<_RandomAccessIterator, _ValueType> _TmpBuf;
-40039:       _TmpBuf __buf(__first, __last);
-40039: 
-40039:       if (__buf.begin() == 0)
-40039:  std::__inplace_stable_sort(__first, __last, __comp);
-40039:       else
-40039:  std::__stable_sort_adaptive(__first, __last, __buf.begin(),
-40039:         _DistanceType(__buf.size()), __comp);
-40039:     }
-40039: # 5027 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _RandomAccessIterator>
-40039:     inline void
-40039:     stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       std::__stable_sort(__first, __last,
-40039:         __gnu_cxx::__ops::__iter_less_iter());
-40039:     }
-40039: # 5061 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _RandomAccessIterator, typename _Compare>
-40039:     inline void
-40039:     stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
-40039:   _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       std::__stable_sort(__first, __last,
-40039:         __gnu_cxx::__ops::__iter_comp_iter(__comp));
-40039:     }
-40039: 
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _OutputIterator,
-40039:     typename _Compare>
-40039:     _OutputIterator
-40039:     __set_union(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:   _InputIterator2 __first2, _InputIterator2 __last2,
-40039:   _OutputIterator __result, _Compare __comp)
-40039:     {
-40039:       while (__first1 != __last1 && __first2 != __last2)
-40039:  {
-40039:    if (__comp(__first1, __first2))
-40039:      {
-40039:        *__result = *__first1;
-40039:        ++__first1;
-40039:      }
-40039:    else if (__comp(__first2, __first1))
-40039:      {
-40039:        *__result = *__first2;
-40039:        ++__first2;
-40039:      }
-40039:    else
-40039:      {
-40039:        *__result = *__first1;
-40039:        ++__first1;
-40039:        ++__first2;
-40039:      }
-40039:    ++__result;
-40039:  }
-40039:       return std::copy(__first2, __last2,
-40039:          std::copy(__first1, __last1, __result));
-40039:     }
-40039: # 5130 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _OutputIterator>
-40039:     inline _OutputIterator
-40039:     set_union(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:        _InputIterator2 __first2, _InputIterator2 __last2,
-40039:        _OutputIterator __result)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__set_union(__first1, __last1,
-40039:     __first2, __last2, __result,
-40039:     __gnu_cxx::__ops::__iter_less_iter());
-40039:     }
-40039: # 5180 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _OutputIterator, typename _Compare>
-40039:     inline _OutputIterator
-40039:     set_union(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:        _InputIterator2 __first2, _InputIterator2 __last2,
-40039:        _OutputIterator __result, _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__set_union(__first1, __last1,
-40039:     __first2, __last2, __result,
-40039:     __gnu_cxx::__ops::__iter_comp_iter(__comp));
-40039:     }
-40039: 
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _OutputIterator,
-40039:     typename _Compare>
-40039:     _OutputIterator
-40039:     __set_intersection(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:          _InputIterator2 __first2, _InputIterator2 __last2,
-40039:          _OutputIterator __result, _Compare __comp)
-40039:     {
-40039:       while (__first1 != __last1 && __first2 != __last2)
-40039:  if (__comp(__first1, __first2))
-40039:    ++__first1;
-40039:  else if (__comp(__first2, __first1))
-40039:    ++__first2;
-40039:  else
-40039:    {
-40039:      *__result = *__first1;
-40039:      ++__first1;
-40039:      ++__first2;
-40039:      ++__result;
-40039:    }
-40039:       return __result;
-40039:     }
-40039: # 5251 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _OutputIterator>
-40039:     inline _OutputIterator
-40039:     set_intersection(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:        _InputIterator2 __first2, _InputIterator2 __last2,
-40039:        _OutputIterator __result)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039:      
-40039: 
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__set_intersection(__first1, __last1,
-40039:          __first2, __last2, __result,
-40039:          __gnu_cxx::__ops::__iter_less_iter());
-40039:     }
-40039: # 5300 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _OutputIterator, typename _Compare>
-40039:     inline _OutputIterator
-40039:     set_intersection(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:        _InputIterator2 __first2, _InputIterator2 __last2,
-40039:        _OutputIterator __result, _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039:      
-40039: 
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__set_intersection(__first1, __last1,
-40039:     __first2, __last2, __result,
-40039:     __gnu_cxx::__ops::__iter_comp_iter(__comp));
-40039:     }
-40039: 
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _OutputIterator,
-40039:     typename _Compare>
-40039:     _OutputIterator
-40039:     __set_difference(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:        _InputIterator2 __first2, _InputIterator2 __last2,
-40039:        _OutputIterator __result, _Compare __comp)
-40039:     {
-40039:       while (__first1 != __last1 && __first2 != __last2)
-40039:  if (__comp(__first1, __first2))
-40039:    {
-40039:      *__result = *__first1;
-40039:      ++__first1;
-40039:      ++__result;
-40039:    }
-40039:  else if (__comp(__first2, __first1))
-40039:    ++__first2;
-40039:  else
-40039:    {
-40039:      ++__first1;
-40039:      ++__first2;
-40039:    }
-40039:       return std::copy(__first1, __last1, __result);
-40039:     }
-40039: # 5373 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _OutputIterator>
-40039:     inline _OutputIterator
-40039:     set_difference(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:      _InputIterator2 __first2, _InputIterator2 __last2,
-40039:      _OutputIterator __result)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039:      
-40039: 
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__set_difference(__first1, __last1,
-40039:        __first2, __last2, __result,
-40039:        __gnu_cxx::__ops::__iter_less_iter());
-40039:     }
-40039: # 5424 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _OutputIterator, typename _Compare>
-40039:     inline _OutputIterator
-40039:     set_difference(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:      _InputIterator2 __first2, _InputIterator2 __last2,
-40039:      _OutputIterator __result, _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039:      
-40039: 
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__set_difference(__first1, __last1,
-40039:        __first2, __last2, __result,
-40039:        __gnu_cxx::__ops::__iter_comp_iter(__comp));
-40039:     }
-40039: 
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _OutputIterator,
-40039:     typename _Compare>
-40039:     _OutputIterator
-40039:     __set_symmetric_difference(_InputIterator1 __first1,
-40039:           _InputIterator1 __last1,
-40039:           _InputIterator2 __first2,
-40039:           _InputIterator2 __last2,
-40039:           _OutputIterator __result,
-40039:           _Compare __comp)
-40039:     {
-40039:       while (__first1 != __last1 && __first2 != __last2)
-40039:  if (__comp(__first1, __first2))
-40039:    {
-40039:      *__result = *__first1;
-40039:      ++__first1;
-40039:      ++__result;
-40039:    }
-40039:  else if (__comp(__first2, __first1))
-40039:    {
-40039:      *__result = *__first2;
-40039:      ++__first2;
-40039:      ++__result;
-40039:    }
-40039:  else
-40039:    {
-40039:      ++__first1;
-40039:      ++__first2;
-40039:    }
-40039:       return std::copy(__first2, __last2,
-40039:          std::copy(__first1, __last1, __result));
-40039:     }
-40039: # 5503 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _OutputIterator>
-40039:     inline _OutputIterator
-40039:     set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:         _InputIterator2 __first2, _InputIterator2 __last2,
-40039:         _OutputIterator __result)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__set_symmetric_difference(__first1, __last1,
-40039:      __first2, __last2, __result,
-40039:      __gnu_cxx::__ops::__iter_less_iter());
-40039:     }
-40039: # 5554 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _OutputIterator, typename _Compare>
-40039:     inline _OutputIterator
-40039:     set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1,
-40039:         _InputIterator2 __first2, _InputIterator2 __last2,
-40039:         _OutputIterator __result,
-40039:         _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039:      
-40039: 
-40039:      
-40039: 
-40039:      
-40039: 
-40039: 
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__set_symmetric_difference(__first1, __last1,
-40039:     __first2, __last2, __result,
-40039:     __gnu_cxx::__ops::__iter_comp_iter(__comp));
-40039:     }
-40039: 
-40039:   template<typename _ForwardIterator, typename _Compare>
-40039:     constexpr
-40039:     _ForwardIterator
-40039:     __min_element(_ForwardIterator __first, _ForwardIterator __last,
-40039:     _Compare __comp)
-40039:     {
-40039:       if (__first == __last)
-40039:  return __first;
-40039:       _ForwardIterator __result = __first;
-40039:       while (++__first != __last)
-40039:  if (__comp(__first, __result))
-40039:    __result = __first;
-40039:       return __result;
-40039:     }
-40039: # 5607 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator>
-40039:     constexpr
-40039:     _ForwardIterator
-40039:     inline min_element(_ForwardIterator __first, _ForwardIterator __last)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__min_element(__first, __last,
-40039:     __gnu_cxx::__ops::__iter_less_iter());
-40039:     }
-40039: # 5632 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _Compare>
-40039:     constexpr
-40039:     inline _ForwardIterator
-40039:     min_element(_ForwardIterator __first, _ForwardIterator __last,
-40039:   _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__min_element(__first, __last,
-40039:     __gnu_cxx::__ops::__iter_comp_iter(__comp));
-40039:     }
-40039: 
-40039:   template<typename _ForwardIterator, typename _Compare>
-40039:     constexpr
-40039:     _ForwardIterator
-40039:     __max_element(_ForwardIterator __first, _ForwardIterator __last,
-40039:     _Compare __comp)
-40039:     {
-40039:       if (__first == __last) return __first;
-40039:       _ForwardIterator __result = __first;
-40039:       while (++__first != __last)
-40039:  if (__comp(__result, __first))
-40039:    __result = __first;
-40039:       return __result;
-40039:     }
-40039: # 5671 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator>
-40039:     constexpr
-40039:     inline _ForwardIterator
-40039:     max_element(_ForwardIterator __first, _ForwardIterator __last)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__max_element(__first, __last,
-40039:     __gnu_cxx::__ops::__iter_less_iter());
-40039:     }
-40039: # 5696 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039:   template<typename _ForwardIterator, typename _Compare>
-40039:     constexpr
-40039:     inline _ForwardIterator
-40039:     max_element(_ForwardIterator __first, _ForwardIterator __last,
-40039:   _Compare __comp)
-40039:     {
-40039: 
-40039:      
-40039:      
-40039: 
-40039: 
-40039:       ;
-40039:       ;
-40039: 
-40039:       return std::__max_element(__first, __last,
-40039:     __gnu_cxx::__ops::__iter_comp_iter(__comp));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _InputIterator, typename _RandomAccessIterator,
-40039:            typename _Size, typename _UniformRandomBitGenerator>
-40039:     _RandomAccessIterator
-40039:     __sample(_InputIterator __first, _InputIterator __last, input_iterator_tag,
-40039:       _RandomAccessIterator __out, random_access_iterator_tag,
-40039:       _Size __n, _UniformRandomBitGenerator&& __g)
-40039:     {
-40039:       using __distrib_type = uniform_int_distribution<_Size>;
-40039:       using __param_type = typename __distrib_type::param_type;
-40039:       __distrib_type __d{};
-40039:       _Size __sample_sz = 0;
-40039:       while (__first != __last && __sample_sz != __n)
-40039:  {
-40039:    __out[__sample_sz++] = *__first;
-40039:    ++__first;
-40039:  }
-40039:       for (auto __pop_sz = __sample_sz; __first != __last;
-40039:    ++__first, (void) ++__pop_sz)
-40039:  {
-40039:    const auto __k = __d(__g, __param_type{0, __pop_sz});
-40039:    if (__k < __n)
-40039:      __out[__k] = *__first;
-40039:  }
-40039:       return __out + __sample_sz;
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _ForwardIterator, typename _OutputIterator, typename _Cat,
-40039:            typename _Size, typename _UniformRandomBitGenerator>
-40039:     _OutputIterator
-40039:     __sample(_ForwardIterator __first, _ForwardIterator __last,
-40039:       forward_iterator_tag,
-40039:       _OutputIterator __out, _Cat,
-40039:       _Size __n, _UniformRandomBitGenerator&& __g)
-40039:     {
-40039:       using __distrib_type = uniform_int_distribution<_Size>;
-40039:       using __param_type = typename __distrib_type::param_type;
-40039:       using _USize = make_unsigned_t<_Size>;
-40039:       using _Gen = remove_reference_t<_UniformRandomBitGenerator>;
-40039:       using __uc_type = common_type_t<typename _Gen::result_type, _USize>;
-40039: 
-40039:       __distrib_type __d{};
-40039:       _Size __unsampled_sz = std::distance(__first, __last);
-40039:       __n = std::min(__n, __unsampled_sz);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const __uc_type __urngrange = __g.max() - __g.min();
-40039:       if (__urngrange / __uc_type(__unsampled_sz) >= __uc_type(__unsampled_sz))
-40039: 
-40039: 
-40039:         {
-40039:    while (__n != 0 && __unsampled_sz >= 2)
-40039:      {
-40039:        const pair<_Size, _Size> __p =
-40039:   __gen_two_uniform_ints(__unsampled_sz, __unsampled_sz - 1, __g);
-40039: 
-40039:        --__unsampled_sz;
-40039:        if (__p.first < __n)
-40039:   {
-40039:     *__out++ = *__first;
-40039:     --__n;
-40039:   }
-40039: 
-40039:        ++__first;
-40039: 
-40039:        if (__n == 0) break;
-40039: 
-40039:        --__unsampled_sz;
-40039:        if (__p.second < __n)
-40039:   {
-40039:     *__out++ = *__first;
-40039:     --__n;
-40039:   }
-40039: 
-40039:        ++__first;
-40039:      }
-40039:         }
-40039: 
-40039: 
-40039: 
-40039:       for (; __n != 0; ++__first)
-40039:  if (__d(__g, __param_type{0, --__unsampled_sz}) < __n)
-40039:    {
-40039:      *__out++ = *__first;
-40039:      --__n;
-40039:    }
-40039:       return __out;
-40039:     }
-40039: # 5839 "/usr/include/c++/8/bits/stl_algo.h" 3
-40039: 
-40039: 
-40039: }
-40039: # 63 "/usr/include/c++/8/algorithm" 2 3
-40039: # 40 "/usr/include/gmpxx.h" 2 3 4
-40039: # 1 "/usr/include/c++/8/string" 1 3 4
-40039: # 36 "/usr/include/c++/8/string" 3 4
-40039:        
-40039: # 37 "/usr/include/c++/8/string" 3
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/char_traits.h" 1 3
-40039: # 37 "/usr/include/c++/8/bits/char_traits.h" 3
-40039:        
-40039: # 38 "/usr/include/c++/8/bits/char_traits.h" 3
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/cwchar" 1 3
-40039: # 39 "/usr/include/c++/8/cwchar" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/cwchar" 3
-40039: # 42 "/usr/include/c++/8/bits/char_traits.h" 2 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 61 "/usr/include/c++/8/bits/char_traits.h" 3
-40039:   template<typename _CharT>
-40039:     struct _Char_types
-40039:     {
-40039:       typedef unsigned long int_type;
-40039:       typedef std::streampos pos_type;
-40039:       typedef std::streamoff off_type;
-40039:       typedef std::mbstate_t state_type;
-40039:     };
-40039: # 86 "/usr/include/c++/8/bits/char_traits.h" 3
-40039:   template<typename _CharT>
-40039:     struct char_traits
-40039:     {
-40039:       typedef _CharT char_type;
-40039:       typedef typename _Char_types<_CharT>::int_type int_type;
-40039:       typedef typename _Char_types<_CharT>::pos_type pos_type;
-40039:       typedef typename _Char_types<_CharT>::off_type off_type;
-40039:       typedef typename _Char_types<_CharT>::state_type state_type;
-40039: 
-40039:       static constexpr void
-40039:       assign(char_type& __c1, const char_type& __c2)
-40039:       { __c1 = __c2; }
-40039: 
-40039:       static constexpr bool
-40039:       eq(const char_type& __c1, const char_type& __c2)
-40039:       { return __c1 == __c2; }
-40039: 
-40039:       static constexpr bool
-40039:       lt(const char_type& __c1, const char_type& __c2)
-40039:       { return __c1 < __c2; }
-40039: 
-40039:       static constexpr int
-40039:       compare(const char_type* __s1, const char_type* __s2, std::size_t __n);
-40039: 
-40039:       static constexpr std::size_t
-40039:       length(const char_type* __s);
-40039: 
-40039:       static constexpr const char_type*
-40039:       find(const char_type* __s, std::size_t __n, const char_type& __a);
-40039: 
-40039:       static char_type*
-40039:       move(char_type* __s1, const char_type* __s2, std::size_t __n);
-40039: 
-40039:       static char_type*
-40039:       copy(char_type* __s1, const char_type* __s2, std::size_t __n);
-40039: 
-40039:       static char_type*
-40039:       assign(char_type* __s, std::size_t __n, char_type __a);
-40039: 
-40039:       static constexpr char_type
-40039:       to_char_type(const int_type& __c)
-40039:       { return static_cast<char_type>(__c); }
-40039: 
-40039:       static constexpr int_type
-40039:       to_int_type(const char_type& __c)
-40039:       { return static_cast<int_type>(__c); }
-40039: 
-40039:       static constexpr bool
-40039:       eq_int_type(const int_type& __c1, const int_type& __c2)
-40039:       { return __c1 == __c2; }
-40039: 
-40039:       static constexpr int_type
-40039:       eof()
-40039:       { return static_cast<int_type>(-1); }
-40039: 
-40039:       static constexpr int_type
-40039:       not_eof(const int_type& __c)
-40039:       { return !eq_int_type(__c, eof()) ? __c : to_int_type(char_type()); }
-40039:     };
-40039: 
-40039:   template<typename _CharT>
-40039:     constexpr int
-40039:     char_traits<_CharT>::
-40039:     compare(const char_type* __s1, const char_type* __s2, std::size_t __n)
-40039:     {
-40039:       for (std::size_t __i = 0; __i < __n; ++__i)
-40039:  if (lt(__s1[__i], __s2[__i]))
-40039:    return -1;
-40039:  else if (lt(__s2[__i], __s1[__i]))
-40039:    return 1;
-40039:       return 0;
-40039:     }
-40039: 
-40039:   template<typename _CharT>
-40039:     constexpr std::size_t
-40039:     char_traits<_CharT>::
-40039:     length(const char_type* __p)
-40039:     {
-40039:       std::size_t __i = 0;
-40039:       while (!eq(__p[__i], char_type()))
-40039:         ++__i;
-40039:       return __i;
-40039:     }
-40039: 
-40039:   template<typename _CharT>
-40039:     constexpr const typename char_traits<_CharT>::char_type*
-40039:     char_traits<_CharT>::
-40039:     find(const char_type* __s, std::size_t __n, const char_type& __a)
-40039:     {
-40039:       for (std::size_t __i = 0; __i < __n; ++__i)
-40039:         if (eq(__s[__i], __a))
-40039:           return __s + __i;
-40039:       return 0;
-40039:     }
-40039: 
-40039:   template<typename _CharT>
-40039:     typename char_traits<_CharT>::char_type*
-40039:     char_traits<_CharT>::
-40039:     move(char_type* __s1, const char_type* __s2, std::size_t __n)
-40039:     {
-40039:       if (__n == 0)
-40039:  return __s1;
-40039:       return static_cast<_CharT*>(__builtin_memmove(__s1, __s2,
-40039:           __n * sizeof(char_type)));
-40039:     }
-40039: 
-40039:   template<typename _CharT>
-40039:     typename char_traits<_CharT>::char_type*
-40039:     char_traits<_CharT>::
-40039:     copy(char_type* __s1, const char_type* __s2, std::size_t __n)
-40039:     {
-40039: 
-40039:       std::copy(__s2, __s2 + __n, __s1);
-40039:       return __s1;
-40039:     }
-40039: 
-40039:   template<typename _CharT>
-40039:     typename char_traits<_CharT>::char_type*
-40039:     char_traits<_CharT>::
-40039:     assign(char_type* __s, std::size_t __n, char_type __a)
-40039:     {
-40039: 
-40039:       std::fill_n(__s, __n, __a);
-40039:       return __s;
-40039:     }
-40039: 
-40039: 
-40039: }
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 270 "/usr/include/c++/8/bits/char_traits.h" 3
-40039:   template<class _CharT>
-40039:     struct char_traits : public __gnu_cxx::char_traits<_CharT>
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039:   template<>
-40039:     struct char_traits<char>
-40039:     {
-40039:       typedef char char_type;
-40039:       typedef int int_type;
-40039:       typedef streampos pos_type;
-40039:       typedef streamoff off_type;
-40039:       typedef mbstate_t state_type;
-40039: 
-40039:       static void
-40039:       assign(char_type& __c1, const char_type& __c2) noexcept
-40039:       { __c1 = __c2; }
-40039: 
-40039:       static constexpr bool
-40039:       eq(const char_type& __c1, const char_type& __c2) noexcept
-40039:       { return __c1 == __c2; }
-40039: 
-40039:       static constexpr bool
-40039:       lt(const char_type& __c1, const char_type& __c2) noexcept
-40039:       {
-40039: 
-40039:  return (static_cast<unsigned char>(__c1)
-40039:   < static_cast<unsigned char>(__c2));
-40039:       }
-40039: 
-40039:       static int
-40039:       compare(const char_type* __s1, const char_type* __s2, size_t __n)
-40039:       {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  if (__n == 0)
-40039:    return 0;
-40039:  return __builtin_memcmp(__s1, __s2, __n);
-40039:       }
-40039: 
-40039:       static size_t
-40039:       length(const char_type* __s)
-40039:       {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  return __builtin_strlen(__s);
-40039:       }
-40039: 
-40039:       static const char_type*
-40039:       find(const char_type* __s, size_t __n, const char_type& __a)
-40039:       {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  if (__n == 0)
-40039:    return 0;
-40039:  return static_cast<const char_type*>(__builtin_memchr(__s, __a, __n));
-40039:       }
-40039: 
-40039:       static char_type*
-40039:       move(char_type* __s1, const char_type* __s2, size_t __n)
-40039:       {
-40039:  if (__n == 0)
-40039:    return __s1;
-40039:  return static_cast<char_type*>(__builtin_memmove(__s1, __s2, __n));
-40039:       }
-40039: 
-40039:       static char_type*
-40039:       copy(char_type* __s1, const char_type* __s2, size_t __n)
-40039:       {
-40039:  if (__n == 0)
-40039:    return __s1;
-40039:  return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n));
-40039:       }
-40039: 
-40039:       static char_type*
-40039:       assign(char_type* __s, size_t __n, char_type __a)
-40039:       {
-40039:  if (__n == 0)
-40039:    return __s;
-40039:  return static_cast<char_type*>(__builtin_memset(__s, __a, __n));
-40039:       }
-40039: 
-40039:       static constexpr char_type
-40039:       to_char_type(const int_type& __c) noexcept
-40039:       { return static_cast<char_type>(__c); }
-40039: 
-40039: 
-40039: 
-40039:       static constexpr int_type
-40039:       to_int_type(const char_type& __c) noexcept
-40039:       { return static_cast<int_type>(static_cast<unsigned char>(__c)); }
-40039: 
-40039:       static constexpr bool
-40039:       eq_int_type(const int_type& __c1, const int_type& __c2) noexcept
-40039:       { return __c1 == __c2; }
-40039: 
-40039:       static constexpr int_type
-40039:       eof() noexcept
-40039:       { return static_cast<int_type>(-1); }
-40039: 
-40039:       static constexpr int_type
-40039:       not_eof(const int_type& __c) noexcept
-40039:       { return (__c == eof()) ? 0 : __c; }
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<>
-40039:     struct char_traits<wchar_t>
-40039:     {
-40039:       typedef wchar_t char_type;
-40039:       typedef wint_t int_type;
-40039:       typedef streamoff off_type;
-40039:       typedef wstreampos pos_type;
-40039:       typedef mbstate_t state_type;
-40039: 
-40039:       static void
-40039:       assign(char_type& __c1, const char_type& __c2) noexcept
-40039:       { __c1 = __c2; }
-40039: 
-40039:       static constexpr bool
-40039:       eq(const char_type& __c1, const char_type& __c2) noexcept
-40039:       { return __c1 == __c2; }
-40039: 
-40039:       static constexpr bool
-40039:       lt(const char_type& __c1, const char_type& __c2) noexcept
-40039:       { return __c1 < __c2; }
-40039: 
-40039:       static int
-40039:       compare(const char_type* __s1, const char_type* __s2, size_t __n)
-40039:       {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  if (__n == 0)
-40039:    return 0;
-40039:  else
-40039:    return wmemcmp(__s1, __s2, __n);
-40039:       }
-40039: 
-40039:       static size_t
-40039:       length(const char_type* __s)
-40039:       {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:    return wcslen(__s);
-40039:       }
-40039: 
-40039:       static const char_type*
-40039:       find(const char_type* __s, size_t __n, const char_type& __a)
-40039:       {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  if (__n == 0)
-40039:    return 0;
-40039:  else
-40039:    return wmemchr(__s, __a, __n);
-40039:       }
-40039: 
-40039:       static char_type*
-40039:       move(char_type* __s1, const char_type* __s2, size_t __n)
-40039:       {
-40039:  if (__n == 0)
-40039:    return __s1;
-40039:  return wmemmove(__s1, __s2, __n);
-40039:       }
-40039: 
-40039:       static char_type*
-40039:       copy(char_type* __s1, const char_type* __s2, size_t __n)
-40039:       {
-40039:  if (__n == 0)
-40039:    return __s1;
-40039:  return wmemcpy(__s1, __s2, __n);
-40039:       }
-40039: 
-40039:       static char_type*
-40039:       assign(char_type* __s, size_t __n, char_type __a)
-40039:       {
-40039:  if (__n == 0)
-40039:    return __s;
-40039:  return wmemset(__s, __a, __n);
-40039:       }
-40039: 
-40039:       static constexpr char_type
-40039:       to_char_type(const int_type& __c) noexcept
-40039:       { return char_type(__c); }
-40039: 
-40039:       static constexpr int_type
-40039:       to_int_type(const char_type& __c) noexcept
-40039:       { return int_type(__c); }
-40039: 
-40039:       static constexpr bool
-40039:       eq_int_type(const int_type& __c1, const int_type& __c2) noexcept
-40039:       { return __c1 == __c2; }
-40039: 
-40039:       static constexpr int_type
-40039:       eof() noexcept
-40039:       { return static_cast<int_type>((0xffffffffu)); }
-40039: 
-40039:       static constexpr int_type
-40039:       not_eof(const int_type& __c) noexcept
-40039:       { return eq_int_type(__c, eof()) ? 0 : __c; }
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/cstdint" 1 3
-40039: # 32 "/usr/include/c++/8/cstdint" 3
-40039:        
-40039: # 33 "/usr/include/c++/8/cstdint" 3
-40039: # 46 "/usr/include/c++/8/cstdint" 3
-40039: namespace std
-40039: {
-40039:   using ::int8_t;
-40039:   using ::int16_t;
-40039:   using ::int32_t;
-40039:   using ::int64_t;
-40039: 
-40039:   using ::int_fast8_t;
-40039:   using ::int_fast16_t;
-40039:   using ::int_fast32_t;
-40039:   using ::int_fast64_t;
-40039: 
-40039:   using ::int_least8_t;
-40039:   using ::int_least16_t;
-40039:   using ::int_least32_t;
-40039:   using ::int_least64_t;
-40039: 
-40039:   using ::intmax_t;
-40039:   using ::intptr_t;
-40039: 
-40039:   using ::uint8_t;
-40039:   using ::uint16_t;
-40039:   using ::uint32_t;
-40039:   using ::uint64_t;
-40039: 
-40039:   using ::uint_fast8_t;
-40039:   using ::uint_fast16_t;
-40039:   using ::uint_fast32_t;
-40039:   using ::uint_fast64_t;
-40039: 
-40039:   using ::uint_least8_t;
-40039:   using ::uint_least16_t;
-40039:   using ::uint_least32_t;
-40039:   using ::uint_least64_t;
-40039: 
-40039:   using ::uintmax_t;
-40039:   using ::uintptr_t;
-40039: }
-40039: # 504 "/usr/include/c++/8/bits/char_traits.h" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   template<>
-40039:     struct char_traits<char16_t>
-40039:     {
-40039:       typedef char16_t char_type;
-40039:       typedef uint_least16_t int_type;
-40039:       typedef streamoff off_type;
-40039:       typedef u16streampos pos_type;
-40039:       typedef mbstate_t state_type;
-40039: 
-40039:       static void
-40039:       assign(char_type& __c1, const char_type& __c2) noexcept
-40039:       { __c1 = __c2; }
-40039: 
-40039:       static constexpr bool
-40039:       eq(const char_type& __c1, const char_type& __c2) noexcept
-40039:       { return __c1 == __c2; }
-40039: 
-40039:       static constexpr bool
-40039:       lt(const char_type& __c1, const char_type& __c2) noexcept
-40039:       { return __c1 < __c2; }
-40039: 
-40039:       static int
-40039:       compare(const char_type* __s1, const char_type* __s2, size_t __n)
-40039:       {
-40039:  for (size_t __i = 0; __i < __n; ++__i)
-40039:    if (lt(__s1[__i], __s2[__i]))
-40039:      return -1;
-40039:    else if (lt(__s2[__i], __s1[__i]))
-40039:      return 1;
-40039:  return 0;
-40039:       }
-40039: 
-40039:       static size_t
-40039:       length(const char_type* __s)
-40039:       {
-40039:  size_t __i = 0;
-40039:  while (!eq(__s[__i], char_type()))
-40039:    ++__i;
-40039:  return __i;
-40039:       }
-40039: 
-40039:       static const char_type*
-40039:       find(const char_type* __s, size_t __n, const char_type& __a)
-40039:       {
-40039:  for (size_t __i = 0; __i < __n; ++__i)
-40039:    if (eq(__s[__i], __a))
-40039:      return __s + __i;
-40039:  return 0;
-40039:       }
-40039: 
-40039:       static char_type*
-40039:       move(char_type* __s1, const char_type* __s2, size_t __n)
-40039:       {
-40039:  if (__n == 0)
-40039:    return __s1;
-40039:  return (static_cast<char_type*>
-40039:   (__builtin_memmove(__s1, __s2, __n * sizeof(char_type))));
-40039:       }
-40039: 
-40039:       static char_type*
-40039:       copy(char_type* __s1, const char_type* __s2, size_t __n)
-40039:       {
-40039:  if (__n == 0)
-40039:    return __s1;
-40039:  return (static_cast<char_type*>
-40039:   (__builtin_memcpy(__s1, __s2, __n * sizeof(char_type))));
-40039:       }
-40039: 
-40039:       static char_type*
-40039:       assign(char_type* __s, size_t __n, char_type __a)
-40039:       {
-40039:  for (size_t __i = 0; __i < __n; ++__i)
-40039:    assign(__s[__i], __a);
-40039:  return __s;
-40039:       }
-40039: 
-40039:       static constexpr char_type
-40039:       to_char_type(const int_type& __c) noexcept
-40039:       { return char_type(__c); }
-40039: 
-40039:       static constexpr int_type
-40039:       to_int_type(const char_type& __c) noexcept
-40039:       { return __c == eof() ? int_type(0xfffd) : int_type(__c); }
-40039: 
-40039:       static constexpr bool
-40039:       eq_int_type(const int_type& __c1, const int_type& __c2) noexcept
-40039:       { return __c1 == __c2; }
-40039: 
-40039:       static constexpr int_type
-40039:       eof() noexcept
-40039:       { return static_cast<int_type>(-1); }
-40039: 
-40039:       static constexpr int_type
-40039:       not_eof(const int_type& __c) noexcept
-40039:       { return eq_int_type(__c, eof()) ? 0 : __c; }
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct char_traits<char32_t>
-40039:     {
-40039:       typedef char32_t char_type;
-40039:       typedef uint_least32_t int_type;
-40039:       typedef streamoff off_type;
-40039:       typedef u32streampos pos_type;
-40039:       typedef mbstate_t state_type;
-40039: 
-40039:       static void
-40039:       assign(char_type& __c1, const char_type& __c2) noexcept
-40039:       { __c1 = __c2; }
-40039: 
-40039:       static constexpr bool
-40039:       eq(const char_type& __c1, const char_type& __c2) noexcept
-40039:       { return __c1 == __c2; }
-40039: 
-40039:       static constexpr bool
-40039:       lt(const char_type& __c1, const char_type& __c2) noexcept
-40039:       { return __c1 < __c2; }
-40039: 
-40039:       static int
-40039:       compare(const char_type* __s1, const char_type* __s2, size_t __n)
-40039:       {
-40039:  for (size_t __i = 0; __i < __n; ++__i)
-40039:    if (lt(__s1[__i], __s2[__i]))
-40039:      return -1;
-40039:    else if (lt(__s2[__i], __s1[__i]))
-40039:      return 1;
-40039:  return 0;
-40039:       }
-40039: 
-40039:       static size_t
-40039:       length(const char_type* __s)
-40039:       {
-40039:  size_t __i = 0;
-40039:  while (!eq(__s[__i], char_type()))
-40039:    ++__i;
-40039:  return __i;
-40039:       }
-40039: 
-40039:       static const char_type*
-40039:       find(const char_type* __s, size_t __n, const char_type& __a)
-40039:       {
-40039:  for (size_t __i = 0; __i < __n; ++__i)
-40039:    if (eq(__s[__i], __a))
-40039:      return __s + __i;
-40039:  return 0;
-40039:       }
-40039: 
-40039:       static char_type*
-40039:       move(char_type* __s1, const char_type* __s2, size_t __n)
-40039:       {
-40039:  if (__n == 0)
-40039:    return __s1;
-40039:  return (static_cast<char_type*>
-40039:   (__builtin_memmove(__s1, __s2, __n * sizeof(char_type))));
-40039:       }
-40039: 
-40039:       static char_type*
-40039:       copy(char_type* __s1, const char_type* __s2, size_t __n)
-40039:       {
-40039:  if (__n == 0)
-40039:    return __s1;
-40039:  return (static_cast<char_type*>
-40039:   (__builtin_memcpy(__s1, __s2, __n * sizeof(char_type))));
-40039:       }
-40039: 
-40039:       static char_type*
-40039:       assign(char_type* __s, size_t __n, char_type __a)
-40039:       {
-40039:  for (size_t __i = 0; __i < __n; ++__i)
-40039:    assign(__s[__i], __a);
-40039:  return __s;
-40039:       }
-40039: 
-40039:       static constexpr char_type
-40039:       to_char_type(const int_type& __c) noexcept
-40039:       { return char_type(__c); }
-40039: 
-40039:       static constexpr int_type
-40039:       to_int_type(const char_type& __c) noexcept
-40039:       { return int_type(__c); }
-40039: 
-40039:       static constexpr bool
-40039:       eq_int_type(const int_type& __c1, const int_type& __c2) noexcept
-40039:       { return __c1 == __c2; }
-40039: 
-40039:       static constexpr int_type
-40039:       eof() noexcept
-40039:       { return static_cast<int_type>(-1); }
-40039: 
-40039:       static constexpr int_type
-40039:       not_eof(const int_type& __c) noexcept
-40039:       { return eq_int_type(__c, eof()) ? 0 : __c; }
-40039:     };
-40039: 
-40039: 
-40039: }
-40039: # 41 "/usr/include/c++/8/string" 2 3
-40039: # 1 "/usr/include/c++/8/bits/allocator.h" 1 3
-40039: # 46 "/usr/include/c++/8/bits/allocator.h" 3
-40039: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++allocator.h" 1 3
-40039: # 33 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++allocator.h" 3
-40039: # 1 "/usr/include/c++/8/ext/new_allocator.h" 1 3
-40039: # 40 "/usr/include/c++/8/ext/new_allocator.h" 3
-40039: namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   using std::size_t;
-40039:   using std::ptrdiff_t;
-40039: # 57 "/usr/include/c++/8/ext/new_allocator.h" 3
-40039:   template<typename _Tp>
-40039:     class new_allocator
-40039:     {
-40039:     public:
-40039:       typedef size_t size_type;
-40039:       typedef ptrdiff_t difference_type;
-40039:       typedef _Tp* pointer;
-40039:       typedef const _Tp* const_pointer;
-40039:       typedef _Tp& reference;
-40039:       typedef const _Tp& const_reference;
-40039:       typedef _Tp value_type;
-40039: 
-40039:       template<typename _Tp1>
-40039:  struct rebind
-40039:  { typedef new_allocator<_Tp1> other; };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       typedef std::true_type propagate_on_container_move_assignment;
-40039: 
-40039: 
-40039:       new_allocator() noexcept { }
-40039: 
-40039:       new_allocator(const new_allocator&) noexcept { }
-40039: 
-40039:       template<typename _Tp1>
-40039:  new_allocator(const new_allocator<_Tp1>&) noexcept { }
-40039: 
-40039:       ~new_allocator() noexcept { }
-40039: 
-40039:       pointer
-40039:       address(reference __x) const noexcept
-40039:       { return std::__addressof(__x); }
-40039: 
-40039:       const_pointer
-40039:       address(const_reference __x) const noexcept
-40039:       { return std::__addressof(__x); }
-40039: 
-40039: 
-40039: 
-40039:       pointer
-40039:       allocate(size_type __n, const void* = static_cast<const void*>(0))
-40039:       {
-40039:  if (__n > this->max_size())
-40039:    std::__throw_bad_alloc();
-40039: # 111 "/usr/include/c++/8/ext/new_allocator.h" 3
-40039:  return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp)));
-40039:       }
-40039: 
-40039: 
-40039:       void
-40039:       deallocate(pointer __p, size_type)
-40039:       {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  ::operator delete(__p);
-40039:       }
-40039: 
-40039:       size_type
-40039:       max_size() const noexcept
-40039:       { return size_t(-1) / sizeof(_Tp); }
-40039: 
-40039: 
-40039:       template<typename _Up, typename... _Args>
-40039:  void
-40039:  construct(_Up* __p, _Args&&... __args)
-40039:  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
-40039: 
-40039:       template<typename _Up>
-40039:  void
-40039:  destroy(_Up* __p) { __p->~_Up(); }
-40039: # 151 "/usr/include/c++/8/ext/new_allocator.h" 3
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     inline bool
-40039:     operator==(const new_allocator<_Tp>&, const new_allocator<_Tp>&)
-40039:     { return true; }
-40039: 
-40039:   template<typename _Tp>
-40039:     inline bool
-40039:     operator!=(const new_allocator<_Tp>&, const new_allocator<_Tp>&)
-40039:     { return false; }
-40039: 
-40039: 
-40039: }
-40039: # 34 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++allocator.h" 2 3
-40039: 
-40039: 
-40039: namespace std
-40039: {
-40039: # 47 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++allocator.h" 3
-40039:   template<typename _Tp>
-40039:     using __allocator_base = __gnu_cxx::new_allocator<_Tp>;
-40039: }
-40039: # 47 "/usr/include/c++/8/bits/allocator.h" 2 3
-40039: # 57 "/usr/include/c++/8/bits/allocator.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<>
-40039:     class allocator<void>
-40039:     {
-40039:     public:
-40039:       typedef size_t size_type;
-40039:       typedef ptrdiff_t difference_type;
-40039:       typedef void* pointer;
-40039:       typedef const void* const_pointer;
-40039:       typedef void value_type;
-40039: 
-40039:       template<typename _Tp1>
-40039:  struct rebind
-40039:  { typedef allocator<_Tp1> other; };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       typedef true_type propagate_on_container_move_assignment;
-40039: 
-40039:       typedef true_type is_always_equal;
-40039: 
-40039:       template<typename _Up, typename... _Args>
-40039:  void
-40039:  construct(_Up* __p, _Args&&... __args)
-40039:  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
-40039: 
-40039:       template<typename _Up>
-40039:  void
-40039:  destroy(_Up* __p) { __p->~_Up(); }
-40039: 
-40039:     };
-40039: # 107 "/usr/include/c++/8/bits/allocator.h" 3
-40039:   template<typename _Tp>
-40039:     class allocator : public __allocator_base<_Tp>
-40039:     {
-40039:    public:
-40039:       typedef size_t size_type;
-40039:       typedef ptrdiff_t difference_type;
-40039:       typedef _Tp* pointer;
-40039:       typedef const _Tp* const_pointer;
-40039:       typedef _Tp& reference;
-40039:       typedef const _Tp& const_reference;
-40039:       typedef _Tp value_type;
-40039: 
-40039:       template<typename _Tp1>
-40039:  struct rebind
-40039:  { typedef allocator<_Tp1> other; };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       typedef true_type propagate_on_container_move_assignment;
-40039: 
-40039:       typedef true_type is_always_equal;
-40039: 
-40039: 
-40039:       allocator() throw() { }
-40039: 
-40039:       allocator(const allocator& __a) throw()
-40039:       : __allocator_base<_Tp>(__a) { }
-40039: 
-40039:       template<typename _Tp1>
-40039:  allocator(const allocator<_Tp1>&) throw() { }
-40039: 
-40039:       ~allocator() throw() { }
-40039: 
-40039: 
-40039:     };
-40039: 
-40039:   template<typename _T1, typename _T2>
-40039:     inline bool
-40039:     operator==(const allocator<_T1>&, const allocator<_T2>&)
-40039:     noexcept
-40039:     { return true; }
-40039: 
-40039:   template<typename _Tp>
-40039:     inline bool
-40039:     operator==(const allocator<_Tp>&, const allocator<_Tp>&)
-40039:     noexcept
-40039:     { return true; }
-40039: 
-40039:   template<typename _T1, typename _T2>
-40039:     inline bool
-40039:     operator!=(const allocator<_T1>&, const allocator<_T2>&)
-40039:     noexcept
-40039:     { return false; }
-40039: 
-40039:   template<typename _Tp>
-40039:     inline bool
-40039:     operator!=(const allocator<_Tp>&, const allocator<_Tp>&)
-40039:     noexcept
-40039:     { return false; }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     class allocator<const _Tp>
-40039:     {
-40039:     public:
-40039:       typedef _Tp value_type;
-40039:       template<typename _Up> allocator(const allocator<_Up>&) { }
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     class allocator<volatile _Tp>
-40039:     {
-40039:     public:
-40039:       typedef _Tp value_type;
-40039:       template<typename _Up> allocator(const allocator<_Up>&) { }
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     class allocator<const volatile _Tp>
-40039:     {
-40039:     public:
-40039:       typedef _Tp value_type;
-40039:       template<typename _Up> allocator(const allocator<_Up>&) { }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   extern template class allocator<char>;
-40039:   extern template class allocator<wchar_t>;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Alloc, bool = __is_empty(_Alloc)>
-40039:     struct __alloc_swap
-40039:     { static void _S_do_it(_Alloc&, _Alloc&) noexcept { } };
-40039: 
-40039:   template<typename _Alloc>
-40039:     struct __alloc_swap<_Alloc, false>
-40039:     {
-40039:       static void
-40039:       _S_do_it(_Alloc& __one, _Alloc& __two) noexcept
-40039:       {
-40039: 
-40039:  if (__one != __two)
-40039:    swap(__one, __two);
-40039:       }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Alloc, bool = __is_empty(_Alloc)>
-40039:     struct __alloc_neq
-40039:     {
-40039:       static bool
-40039:       _S_do_it(const _Alloc&, const _Alloc&)
-40039:       { return false; }
-40039:     };
-40039: 
-40039:   template<typename _Alloc>
-40039:     struct __alloc_neq<_Alloc, false>
-40039:     {
-40039:       static bool
-40039:       _S_do_it(const _Alloc& __one, const _Alloc& __two)
-40039:       { return __one != __two; }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp, bool
-40039:     = __or_<is_copy_constructible<typename _Tp::value_type>,
-40039:             is_nothrow_move_constructible<typename _Tp::value_type>>::value>
-40039:     struct __shrink_to_fit_aux
-40039:     { static bool _S_do_it(_Tp&) noexcept { return false; } };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __shrink_to_fit_aux<_Tp, true>
-40039:     {
-40039:       static bool
-40039:       _S_do_it(_Tp& __c) noexcept
-40039:       {
-40039: 
-40039:  try
-40039:    {
-40039:      _Tp(__make_move_if_noexcept_iterator(__c.begin()),
-40039:   __make_move_if_noexcept_iterator(__c.end()),
-40039:   __c.get_allocator()).swap(__c);
-40039:      return true;
-40039:    }
-40039:  catch(...)
-40039:    { return false; }
-40039: 
-40039: 
-40039: 
-40039:       }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 42 "/usr/include/c++/8/string" 2 3
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/localefwd.h" 1 3
-40039: # 37 "/usr/include/c++/8/bits/localefwd.h" 3
-40039:        
-40039: # 38 "/usr/include/c++/8/bits/localefwd.h" 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++locale.h" 1 3
-40039: # 39 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++locale.h" 3
-40039:        
-40039: # 40 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++locale.h" 3
-40039: 
-40039: # 1 "/usr/include/c++/8/clocale" 1 3
-40039: # 39 "/usr/include/c++/8/clocale" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/clocale" 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/locale.h" 1 3 4
-40039: # 28 "/usr/include/locale.h" 3 4
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
-40039: # 29 "/usr/include/locale.h" 2 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/locale.h" 1 3 4
-40039: # 30 "/usr/include/locale.h" 2 3 4
-40039: 
-40039: extern "C" {
-40039: # 51 "/usr/include/locale.h" 3 4
-40039: struct lconv
-40039: {
-40039: 
-40039: 
-40039:   char *decimal_point;
-40039:   char *thousands_sep;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   char *grouping;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   char *int_curr_symbol;
-40039:   char *currency_symbol;
-40039:   char *mon_decimal_point;
-40039:   char *mon_thousands_sep;
-40039:   char *mon_grouping;
-40039:   char *positive_sign;
-40039:   char *negative_sign;
-40039:   char int_frac_digits;
-40039:   char frac_digits;
-40039: 
-40039:   char p_cs_precedes;
-40039: 
-40039:   char p_sep_by_space;
-40039: 
-40039:   char n_cs_precedes;
-40039: 
-40039:   char n_sep_by_space;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   char p_sign_posn;
-40039:   char n_sign_posn;
-40039: 
-40039: 
-40039:   char int_p_cs_precedes;
-40039: 
-40039:   char int_p_sep_by_space;
-40039: 
-40039:   char int_n_cs_precedes;
-40039: 
-40039:   char int_n_sep_by_space;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   char int_p_sign_posn;
-40039:   char int_n_sign_posn;
-40039: # 118 "/usr/include/locale.h" 3 4
-40039: };
-40039: 
-40039: 
-40039: 
-40039: extern char *setlocale (int __category, const char *__locale) throw ();
-40039: 
-40039: 
-40039: extern struct lconv *localeconv (void) throw ();
-40039: # 141 "/usr/include/locale.h" 3 4
-40039: extern locale_t newlocale (int __category_mask, const char *__locale,
-40039:       locale_t __base) throw ();
-40039: # 176 "/usr/include/locale.h" 3 4
-40039: extern locale_t duplocale (locale_t __dataset) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern void freelocale (locale_t __dataset) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern locale_t uselocale (locale_t __dataset) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 43 "/usr/include/c++/8/clocale" 2 3
-40039: # 51 "/usr/include/c++/8/clocale" 3
-40039: namespace std
-40039: {
-40039:   using ::lconv;
-40039:   using ::setlocale;
-40039:   using ::localeconv;
-40039: }
-40039: # 42 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++locale.h" 2 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   extern "C" __typeof(uselocale) __uselocale;
-40039: 
-40039: 
-40039: }
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   typedef __locale_t __c_locale;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   inline int
-40039:   __convert_from_v(const __c_locale& __cloc __attribute__ ((__unused__)),
-40039:      char* __out,
-40039:      const int __size __attribute__ ((__unused__)),
-40039:      const char* __fmt, ...)
-40039:   {
-40039: 
-40039:     __c_locale __old = __gnu_cxx::__uselocale(__cloc);
-40039: # 88 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++locale.h" 3
-40039:     __builtin_va_list __args;
-40039:     __builtin_va_start(__args, __fmt);
-40039: 
-40039: 
-40039:     const int __ret = __builtin_vsnprintf(__out, __size, __fmt, __args);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     __builtin_va_end(__args);
-40039: 
-40039: 
-40039:     __gnu_cxx::__uselocale(__old);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     return __ret;
-40039:   }
-40039: 
-40039: 
-40039: }
-40039: # 41 "/usr/include/c++/8/bits/localefwd.h" 2 3
-40039: 
-40039: # 1 "/usr/include/c++/8/cctype" 1 3
-40039: # 39 "/usr/include/c++/8/cctype" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/cctype" 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/ctype.h" 1 3 4
-40039: # 28 "/usr/include/ctype.h" 3 4
-40039: extern "C" {
-40039: # 46 "/usr/include/ctype.h" 3 4
-40039: enum
-40039: {
-40039:   _ISupper = ((0) < 8 ? ((1 << (0)) << 8) : ((1 << (0)) >> 8)),
-40039:   _ISlower = ((1) < 8 ? ((1 << (1)) << 8) : ((1 << (1)) >> 8)),
-40039:   _ISalpha = ((2) < 8 ? ((1 << (2)) << 8) : ((1 << (2)) >> 8)),
-40039:   _ISdigit = ((3) < 8 ? ((1 << (3)) << 8) : ((1 << (3)) >> 8)),
-40039:   _ISxdigit = ((4) < 8 ? ((1 << (4)) << 8) : ((1 << (4)) >> 8)),
-40039:   _ISspace = ((5) < 8 ? ((1 << (5)) << 8) : ((1 << (5)) >> 8)),
-40039:   _ISprint = ((6) < 8 ? ((1 << (6)) << 8) : ((1 << (6)) >> 8)),
-40039:   _ISgraph = ((7) < 8 ? ((1 << (7)) << 8) : ((1 << (7)) >> 8)),
-40039:   _ISblank = ((8) < 8 ? ((1 << (8)) << 8) : ((1 << (8)) >> 8)),
-40039:   _IScntrl = ((9) < 8 ? ((1 << (9)) << 8) : ((1 << (9)) >> 8)),
-40039:   _ISpunct = ((10) < 8 ? ((1 << (10)) << 8) : ((1 << (10)) >> 8)),
-40039:   _ISalnum = ((11) < 8 ? ((1 << (11)) << 8) : ((1 << (11)) >> 8))
-40039: };
-40039: # 79 "/usr/include/ctype.h" 3 4
-40039: extern const unsigned short int **__ctype_b_loc (void)
-40039:      throw () __attribute__ ((__const__));
-40039: extern const __int32_t **__ctype_tolower_loc (void)
-40039:      throw () __attribute__ ((__const__));
-40039: extern const __int32_t **__ctype_toupper_loc (void)
-40039:      throw () __attribute__ ((__const__));
-40039: # 108 "/usr/include/ctype.h" 3 4
-40039: extern int isalnum (int) throw ();
-40039: extern int isalpha (int) throw ();
-40039: extern int iscntrl (int) throw ();
-40039: extern int isdigit (int) throw ();
-40039: extern int islower (int) throw ();
-40039: extern int isgraph (int) throw ();
-40039: extern int isprint (int) throw ();
-40039: extern int ispunct (int) throw ();
-40039: extern int isspace (int) throw ();
-40039: extern int isupper (int) throw ();
-40039: extern int isxdigit (int) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int tolower (int __c) throw ();
-40039: 
-40039: 
-40039: extern int toupper (int __c) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int isblank (int) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int isctype (int __c, int __mask) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int isascii (int __c) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int toascii (int __c) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int _toupper (int) throw ();
-40039: extern int _tolower (int) throw ();
-40039: # 251 "/usr/include/ctype.h" 3 4
-40039: extern int isalnum_l (int, locale_t) throw ();
-40039: extern int isalpha_l (int, locale_t) throw ();
-40039: extern int iscntrl_l (int, locale_t) throw ();
-40039: extern int isdigit_l (int, locale_t) throw ();
-40039: extern int islower_l (int, locale_t) throw ();
-40039: extern int isgraph_l (int, locale_t) throw ();
-40039: extern int isprint_l (int, locale_t) throw ();
-40039: extern int ispunct_l (int, locale_t) throw ();
-40039: extern int isspace_l (int, locale_t) throw ();
-40039: extern int isupper_l (int, locale_t) throw ();
-40039: extern int isxdigit_l (int, locale_t) throw ();
-40039: 
-40039: extern int isblank_l (int, locale_t) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int __tolower_l (int __c, locale_t __l) throw ();
-40039: extern int tolower_l (int __c, locale_t __l) throw ();
-40039: 
-40039: 
-40039: extern int __toupper_l (int __c, locale_t __l) throw ();
-40039: extern int toupper_l (int __c, locale_t __l) throw ();
-40039: # 327 "/usr/include/ctype.h" 3 4
-40039: }
-40039: # 43 "/usr/include/c++/8/cctype" 2 3
-40039: # 62 "/usr/include/c++/8/cctype" 3
-40039: namespace std
-40039: {
-40039:   using ::isalnum;
-40039:   using ::isalpha;
-40039:   using ::iscntrl;
-40039:   using ::isdigit;
-40039:   using ::isgraph;
-40039:   using ::islower;
-40039:   using ::isprint;
-40039:   using ::ispunct;
-40039:   using ::isspace;
-40039:   using ::isupper;
-40039:   using ::isxdigit;
-40039:   using ::tolower;
-40039:   using ::toupper;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace std
-40039: {
-40039:   using ::isblank;
-40039: }
-40039: # 43 "/usr/include/c++/8/bits/localefwd.h" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 55 "/usr/include/c++/8/bits/localefwd.h" 3
-40039:   class locale;
-40039: 
-40039:   template<typename _Facet>
-40039:     bool
-40039:     has_facet(const locale&) throw();
-40039: 
-40039:   template<typename _Facet>
-40039:     const _Facet&
-40039:     use_facet(const locale&);
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     bool
-40039:     isspace(_CharT, const locale&);
-40039: 
-40039:   template<typename _CharT>
-40039:     bool
-40039:     isprint(_CharT, const locale&);
-40039: 
-40039:   template<typename _CharT>
-40039:     bool
-40039:     iscntrl(_CharT, const locale&);
-40039: 
-40039:   template<typename _CharT>
-40039:     bool
-40039:     isupper(_CharT, const locale&);
-40039: 
-40039:   template<typename _CharT>
-40039:     bool
-40039:     islower(_CharT, const locale&);
-40039: 
-40039:   template<typename _CharT>
-40039:     bool
-40039:     isalpha(_CharT, const locale&);
-40039: 
-40039:   template<typename _CharT>
-40039:     bool
-40039:     isdigit(_CharT, const locale&);
-40039: 
-40039:   template<typename _CharT>
-40039:     bool
-40039:     ispunct(_CharT, const locale&);
-40039: 
-40039:   template<typename _CharT>
-40039:     bool
-40039:     isxdigit(_CharT, const locale&);
-40039: 
-40039:   template<typename _CharT>
-40039:     bool
-40039:     isalnum(_CharT, const locale&);
-40039: 
-40039:   template<typename _CharT>
-40039:     bool
-40039:     isgraph(_CharT, const locale&);
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     bool
-40039:     isblank(_CharT, const locale&);
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     _CharT
-40039:     toupper(_CharT, const locale&);
-40039: 
-40039:   template<typename _CharT>
-40039:     _CharT
-40039:     tolower(_CharT, const locale&);
-40039: 
-40039: 
-40039:   class ctype_base;
-40039:   template<typename _CharT>
-40039:     class ctype;
-40039:   template<> class ctype<char>;
-40039: 
-40039:   template<> class ctype<wchar_t>;
-40039: 
-40039:   template<typename _CharT>
-40039:     class ctype_byname;
-40039: 
-40039: 
-40039:   class codecvt_base;
-40039:   template<typename _InternT, typename _ExternT, typename _StateT>
-40039:     class codecvt;
-40039:   template<> class codecvt<char, char, mbstate_t>;
-40039: 
-40039:   template<> class codecvt<wchar_t, char, mbstate_t>;
-40039: 
-40039:   template<typename _InternT, typename _ExternT, typename _StateT>
-40039:     class codecvt_byname;
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
-40039:     class num_get;
-40039:   template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
-40039:     class num_put;
-40039: 
-40039: namespace __cxx11 {
-40039:   template<typename _CharT> class numpunct;
-40039:   template<typename _CharT> class numpunct_byname;
-40039: }
-40039: 
-40039: namespace __cxx11 {
-40039: 
-40039:   template<typename _CharT>
-40039:     class collate;
-40039:   template<typename _CharT>
-40039:     class collate_byname;
-40039: }
-40039: 
-40039: 
-40039:   class time_base;
-40039: namespace __cxx11 {
-40039:   template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
-40039:     class time_get;
-40039:   template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
-40039:     class time_get_byname;
-40039: }
-40039:   template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
-40039:     class time_put;
-40039:   template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
-40039:     class time_put_byname;
-40039: 
-40039: 
-40039:   class money_base;
-40039: namespace __cxx11 {
-40039:   template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
-40039:     class money_get;
-40039:   template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
-40039:     class money_put;
-40039: }
-40039: namespace __cxx11 {
-40039:   template<typename _CharT, bool _Intl = false>
-40039:     class moneypunct;
-40039:   template<typename _CharT, bool _Intl = false>
-40039:     class moneypunct_byname;
-40039: }
-40039: 
-40039: 
-40039:   class messages_base;
-40039: namespace __cxx11 {
-40039:   template<typename _CharT>
-40039:     class messages;
-40039:   template<typename _CharT>
-40039:     class messages_byname;
-40039: }
-40039: 
-40039: 
-40039: }
-40039: # 44 "/usr/include/c++/8/string" 2 3
-40039: # 1 "/usr/include/c++/8/bits/ostream_insert.h" 1 3
-40039: # 33 "/usr/include/c++/8/bits/ostream_insert.h" 3
-40039:        
-40039: # 34 "/usr/include/c++/8/bits/ostream_insert.h" 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/cxxabi_forced.h" 1 3
-40039: # 34 "/usr/include/c++/8/bits/cxxabi_forced.h" 3
-40039:        
-40039: # 35 "/usr/include/c++/8/bits/cxxabi_forced.h" 3
-40039: 
-40039: #pragma GCC visibility push(default)
-40039: 
-40039: 
-40039: namespace __cxxabiv1
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   class __forced_unwind
-40039:   {
-40039:     virtual ~__forced_unwind() throw();
-40039: 
-40039: 
-40039:     virtual void __pure_dummy() = 0;
-40039:   };
-40039: }
-40039: 
-40039: 
-40039: #pragma GCC visibility pop
-40039: # 37 "/usr/include/c++/8/bits/ostream_insert.h" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     inline void
-40039:     __ostream_write(basic_ostream<_CharT, _Traits>& __out,
-40039:       const _CharT* __s, streamsize __n)
-40039:     {
-40039:       typedef basic_ostream<_CharT, _Traits> __ostream_type;
-40039:       typedef typename __ostream_type::ios_base __ios_base;
-40039: 
-40039:       const streamsize __put = __out.rdbuf()->sputn(__s, __n);
-40039:       if (__put != __n)
-40039:  __out.setstate(__ios_base::badbit);
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     inline void
-40039:     __ostream_fill(basic_ostream<_CharT, _Traits>& __out, streamsize __n)
-40039:     {
-40039:       typedef basic_ostream<_CharT, _Traits> __ostream_type;
-40039:       typedef typename __ostream_type::ios_base __ios_base;
-40039: 
-40039:       const _CharT __c = __out.fill();
-40039:       for (; __n > 0; --__n)
-40039:  {
-40039:    const typename _Traits::int_type __put = __out.rdbuf()->sputc(__c);
-40039:    if (_Traits::eq_int_type(__put, _Traits::eof()))
-40039:      {
-40039:        __out.setstate(__ios_base::badbit);
-40039:        break;
-40039:      }
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_ostream<_CharT, _Traits>&
-40039:     __ostream_insert(basic_ostream<_CharT, _Traits>& __out,
-40039:        const _CharT* __s, streamsize __n)
-40039:     {
-40039:       typedef basic_ostream<_CharT, _Traits> __ostream_type;
-40039:       typedef typename __ostream_type::ios_base __ios_base;
-40039: 
-40039:       typename __ostream_type::sentry __cerb(__out);
-40039:       if (__cerb)
-40039:  {
-40039:    try
-40039:      {
-40039:        const streamsize __w = __out.width();
-40039:        if (__w > __n)
-40039:   {
-40039:     const bool __left = ((__out.flags()
-40039:      & __ios_base::adjustfield)
-40039:            == __ios_base::left);
-40039:     if (!__left)
-40039:       __ostream_fill(__out, __w - __n);
-40039:     if (__out.good())
-40039:       __ostream_write(__out, __s, __n);
-40039:     if (__left && __out.good())
-40039:       __ostream_fill(__out, __w - __n);
-40039:   }
-40039:        else
-40039:   __ostream_write(__out, __s, __n);
-40039:        __out.width(0);
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        __out._M_setstate(__ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { __out._M_setstate(__ios_base::badbit); }
-40039:  }
-40039:       return __out;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   extern template ostream& __ostream_insert(ostream&, const char*, streamsize);
-40039: 
-40039: 
-40039:   extern template wostream& __ostream_insert(wostream&, const wchar_t*,
-40039:           streamsize);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 45 "/usr/include/c++/8/string" 2 3
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/stl_function.h" 1 3
-40039: # 63 "/usr/include/c++/8/bits/stl_function.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 104 "/usr/include/c++/8/bits/stl_function.h" 3
-40039:   template<typename _Arg, typename _Result>
-40039:     struct unary_function
-40039:     {
-40039: 
-40039:       typedef _Arg argument_type;
-40039: 
-40039: 
-40039:       typedef _Result result_type;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Arg1, typename _Arg2, typename _Result>
-40039:     struct binary_function
-40039:     {
-40039: 
-40039:       typedef _Arg1 first_argument_type;
-40039: 
-40039: 
-40039:       typedef _Arg2 second_argument_type;
-40039: 
-40039: 
-40039:       typedef _Result result_type;
-40039:     };
-40039: # 144 "/usr/include/c++/8/bits/stl_function.h" 3
-40039:   struct __is_transparent;
-40039: 
-40039:   template<typename _Tp = void>
-40039:     struct plus;
-40039: 
-40039:   template<typename _Tp = void>
-40039:     struct minus;
-40039: 
-40039:   template<typename _Tp = void>
-40039:     struct multiplies;
-40039: 
-40039:   template<typename _Tp = void>
-40039:     struct divides;
-40039: 
-40039:   template<typename _Tp = void>
-40039:     struct modulus;
-40039: 
-40039:   template<typename _Tp = void>
-40039:     struct negate;
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct plus : public binary_function<_Tp, _Tp, _Tp>
-40039:     {
-40039:       constexpr
-40039:       _Tp
-40039:       operator()(const _Tp& __x, const _Tp& __y) const
-40039:       { return __x + __y; }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct minus : public binary_function<_Tp, _Tp, _Tp>
-40039:     {
-40039:       constexpr
-40039:       _Tp
-40039:       operator()(const _Tp& __x, const _Tp& __y) const
-40039:       { return __x - __y; }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct multiplies : public binary_function<_Tp, _Tp, _Tp>
-40039:     {
-40039:       constexpr
-40039:       _Tp
-40039:       operator()(const _Tp& __x, const _Tp& __y) const
-40039:       { return __x * __y; }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct divides : public binary_function<_Tp, _Tp, _Tp>
-40039:     {
-40039:       constexpr
-40039:       _Tp
-40039:       operator()(const _Tp& __x, const _Tp& __y) const
-40039:       { return __x / __y; }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct modulus : public binary_function<_Tp, _Tp, _Tp>
-40039:     {
-40039:       constexpr
-40039:       _Tp
-40039:       operator()(const _Tp& __x, const _Tp& __y) const
-40039:       { return __x % __y; }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct negate : public unary_function<_Tp, _Tp>
-40039:     {
-40039:       constexpr
-40039:       _Tp
-40039:       operator()(const _Tp& __x) const
-40039:       { return -__x; }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<>
-40039:     struct plus<void>
-40039:     {
-40039:       template <typename _Tp, typename _Up>
-40039:  constexpr
-40039:  auto
-40039:  operator()(_Tp&& __t, _Up&& __u) const
-40039:  noexcept(noexcept(std::forward<_Tp>(__t) + std::forward<_Up>(__u)))
-40039:  -> decltype(std::forward<_Tp>(__t) + std::forward<_Up>(__u))
-40039:  { return std::forward<_Tp>(__t) + std::forward<_Up>(__u); }
-40039: 
-40039:       typedef __is_transparent is_transparent;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct minus<void>
-40039:     {
-40039:       template <typename _Tp, typename _Up>
-40039:  constexpr
-40039:  auto
-40039:  operator()(_Tp&& __t, _Up&& __u) const
-40039:  noexcept(noexcept(std::forward<_Tp>(__t) - std::forward<_Up>(__u)))
-40039:  -> decltype(std::forward<_Tp>(__t) - std::forward<_Up>(__u))
-40039:  { return std::forward<_Tp>(__t) - std::forward<_Up>(__u); }
-40039: 
-40039:       typedef __is_transparent is_transparent;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct multiplies<void>
-40039:     {
-40039:       template <typename _Tp, typename _Up>
-40039:  constexpr
-40039:  auto
-40039:  operator()(_Tp&& __t, _Up&& __u) const
-40039:  noexcept(noexcept(std::forward<_Tp>(__t) * std::forward<_Up>(__u)))
-40039:  -> decltype(std::forward<_Tp>(__t) * std::forward<_Up>(__u))
-40039:  { return std::forward<_Tp>(__t) * std::forward<_Up>(__u); }
-40039: 
-40039:       typedef __is_transparent is_transparent;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct divides<void>
-40039:     {
-40039:       template <typename _Tp, typename _Up>
-40039:  constexpr
-40039:  auto
-40039:  operator()(_Tp&& __t, _Up&& __u) const
-40039:  noexcept(noexcept(std::forward<_Tp>(__t) / std::forward<_Up>(__u)))
-40039:  -> decltype(std::forward<_Tp>(__t) / std::forward<_Up>(__u))
-40039:  { return std::forward<_Tp>(__t) / std::forward<_Up>(__u); }
-40039: 
-40039:       typedef __is_transparent is_transparent;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct modulus<void>
-40039:     {
-40039:       template <typename _Tp, typename _Up>
-40039:  constexpr
-40039:  auto
-40039:  operator()(_Tp&& __t, _Up&& __u) const
-40039:  noexcept(noexcept(std::forward<_Tp>(__t) % std::forward<_Up>(__u)))
-40039:  -> decltype(std::forward<_Tp>(__t) % std::forward<_Up>(__u))
-40039:  { return std::forward<_Tp>(__t) % std::forward<_Up>(__u); }
-40039: 
-40039:       typedef __is_transparent is_transparent;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct negate<void>
-40039:     {
-40039:       template <typename _Tp>
-40039:  constexpr
-40039:  auto
-40039:  operator()(_Tp&& __t) const
-40039:  noexcept(noexcept(-std::forward<_Tp>(__t)))
-40039:  -> decltype(-std::forward<_Tp>(__t))
-40039:  { return -std::forward<_Tp>(__t); }
-40039: 
-40039:       typedef __is_transparent is_transparent;
-40039:     };
-40039: # 330 "/usr/include/c++/8/bits/stl_function.h" 3
-40039:   template<typename _Tp = void>
-40039:     struct equal_to;
-40039: 
-40039:   template<typename _Tp = void>
-40039:     struct not_equal_to;
-40039: 
-40039:   template<typename _Tp = void>
-40039:     struct greater;
-40039: 
-40039:   template<typename _Tp = void>
-40039:     struct less;
-40039: 
-40039:   template<typename _Tp = void>
-40039:     struct greater_equal;
-40039: 
-40039:   template<typename _Tp = void>
-40039:     struct less_equal;
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct equal_to : public binary_function<_Tp, _Tp, bool>
-40039:     {
-40039:       constexpr
-40039:       bool
-40039:       operator()(const _Tp& __x, const _Tp& __y) const
-40039:       { return __x == __y; }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct not_equal_to : public binary_function<_Tp, _Tp, bool>
-40039:     {
-40039:       constexpr
-40039:       bool
-40039:       operator()(const _Tp& __x, const _Tp& __y) const
-40039:       { return __x != __y; }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct greater : public binary_function<_Tp, _Tp, bool>
-40039:     {
-40039:       constexpr
-40039:       bool
-40039:       operator()(const _Tp& __x, const _Tp& __y) const
-40039:       { return __x > __y; }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct less : public binary_function<_Tp, _Tp, bool>
-40039:     {
-40039:       constexpr
-40039:       bool
-40039:       operator()(const _Tp& __x, const _Tp& __y) const
-40039:       { return __x < __y; }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct greater_equal : public binary_function<_Tp, _Tp, bool>
-40039:     {
-40039:       constexpr
-40039:       bool
-40039:       operator()(const _Tp& __x, const _Tp& __y) const
-40039:       { return __x >= __y; }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct less_equal : public binary_function<_Tp, _Tp, bool>
-40039:     {
-40039:       constexpr
-40039:       bool
-40039:       operator()(const _Tp& __x, const _Tp& __y) const
-40039:       { return __x <= __y; }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct greater<_Tp*> : public binary_function<_Tp*, _Tp*, bool>
-40039:     {
-40039:       constexpr bool
-40039:       operator()(_Tp* __x, _Tp* __y) const noexcept
-40039:       {
-40039:  if (__builtin_constant_p (__x > __y))
-40039:    return __x > __y;
-40039:  return (long unsigned int)__x > (long unsigned int)__y;
-40039:       }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct less<_Tp*> : public binary_function<_Tp*, _Tp*, bool>
-40039:     {
-40039:       constexpr bool
-40039:       operator()(_Tp* __x, _Tp* __y) const noexcept
-40039:       {
-40039:  if (__builtin_constant_p (__x < __y))
-40039:    return __x < __y;
-40039:  return (long unsigned int)__x < (long unsigned int)__y;
-40039:       }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct greater_equal<_Tp*> : public binary_function<_Tp*, _Tp*, bool>
-40039:     {
-40039:       constexpr bool
-40039:       operator()(_Tp* __x, _Tp* __y) const noexcept
-40039:       {
-40039:  if (__builtin_constant_p (__x >= __y))
-40039:    return __x >= __y;
-40039:  return (long unsigned int)__x >= (long unsigned int)__y;
-40039:       }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct less_equal<_Tp*> : public binary_function<_Tp*, _Tp*, bool>
-40039:     {
-40039:       constexpr bool
-40039:       operator()(_Tp* __x, _Tp* __y) const noexcept
-40039:       {
-40039:  if (__builtin_constant_p (__x <= __y))
-40039:    return __x <= __y;
-40039:  return (long unsigned int)__x <= (long unsigned int)__y;
-40039:       }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<>
-40039:     struct equal_to<void>
-40039:     {
-40039:       template <typename _Tp, typename _Up>
-40039:  constexpr auto
-40039:  operator()(_Tp&& __t, _Up&& __u) const
-40039:  noexcept(noexcept(std::forward<_Tp>(__t) == std::forward<_Up>(__u)))
-40039:  -> decltype(std::forward<_Tp>(__t) == std::forward<_Up>(__u))
-40039:  { return std::forward<_Tp>(__t) == std::forward<_Up>(__u); }
-40039: 
-40039:       typedef __is_transparent is_transparent;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct not_equal_to<void>
-40039:     {
-40039:       template <typename _Tp, typename _Up>
-40039:  constexpr auto
-40039:  operator()(_Tp&& __t, _Up&& __u) const
-40039:  noexcept(noexcept(std::forward<_Tp>(__t) != std::forward<_Up>(__u)))
-40039:  -> decltype(std::forward<_Tp>(__t) != std::forward<_Up>(__u))
-40039:  { return std::forward<_Tp>(__t) != std::forward<_Up>(__u); }
-40039: 
-40039:       typedef __is_transparent is_transparent;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct greater<void>
-40039:     {
-40039:       template <typename _Tp, typename _Up>
-40039:  constexpr auto
-40039:  operator()(_Tp&& __t, _Up&& __u) const
-40039:  noexcept(noexcept(std::forward<_Tp>(__t) > std::forward<_Up>(__u)))
-40039:  -> decltype(std::forward<_Tp>(__t) > std::forward<_Up>(__u))
-40039:  {
-40039:    return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u),
-40039:    __ptr_cmp<_Tp, _Up>{});
-40039:  }
-40039: 
-40039:       template<typename _Tp, typename _Up>
-40039:  constexpr bool
-40039:  operator()(_Tp* __t, _Up* __u) const noexcept
-40039:  { return greater<common_type_t<_Tp*, _Up*>>{}(__t, __u); }
-40039: 
-40039:       typedef __is_transparent is_transparent;
-40039: 
-40039:     private:
-40039:       template <typename _Tp, typename _Up>
-40039:  static constexpr decltype(auto)
-40039:  _S_cmp(_Tp&& __t, _Up&& __u, false_type)
-40039:  { return std::forward<_Tp>(__t) > std::forward<_Up>(__u); }
-40039: 
-40039:       template <typename _Tp, typename _Up>
-40039:  static constexpr bool
-40039:  _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept
-40039:  {
-40039:    return greater<const volatile void*>{}(
-40039:        static_cast<const volatile void*>(std::forward<_Tp>(__t)),
-40039:        static_cast<const volatile void*>(std::forward<_Up>(__u)));
-40039:  }
-40039: 
-40039: 
-40039:       template<typename _Tp, typename _Up, typename = void>
-40039:  struct __not_overloaded2 : true_type { };
-40039: 
-40039: 
-40039:       template<typename _Tp, typename _Up>
-40039:  struct __not_overloaded2<_Tp, _Up, __void_t<
-40039:    decltype(std::declval<_Tp>().operator>(std::declval<_Up>()))>>
-40039:  : false_type { };
-40039: 
-40039: 
-40039:       template<typename _Tp, typename _Up, typename = void>
-40039:  struct __not_overloaded : __not_overloaded2<_Tp, _Up> { };
-40039: 
-40039: 
-40039:       template<typename _Tp, typename _Up>
-40039:  struct __not_overloaded<_Tp, _Up, __void_t<
-40039:    decltype(operator>(std::declval<_Tp>(), std::declval<_Up>()))>>
-40039:  : false_type { };
-40039: 
-40039:       template<typename _Tp, typename _Up>
-40039:  using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>,
-40039:        is_convertible<_Tp, const volatile void*>,
-40039:        is_convertible<_Up, const volatile void*>>;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct less<void>
-40039:     {
-40039:       template <typename _Tp, typename _Up>
-40039:  constexpr auto
-40039:  operator()(_Tp&& __t, _Up&& __u) const
-40039:  noexcept(noexcept(std::forward<_Tp>(__t) < std::forward<_Up>(__u)))
-40039:  -> decltype(std::forward<_Tp>(__t) < std::forward<_Up>(__u))
-40039:  {
-40039:    return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u),
-40039:    __ptr_cmp<_Tp, _Up>{});
-40039:  }
-40039: 
-40039:       template<typename _Tp, typename _Up>
-40039:  constexpr bool
-40039:  operator()(_Tp* __t, _Up* __u) const noexcept
-40039:  { return less<common_type_t<_Tp*, _Up*>>{}(__t, __u); }
-40039: 
-40039:       typedef __is_transparent is_transparent;
-40039: 
-40039:     private:
-40039:       template <typename _Tp, typename _Up>
-40039:  static constexpr decltype(auto)
-40039:  _S_cmp(_Tp&& __t, _Up&& __u, false_type)
-40039:  { return std::forward<_Tp>(__t) < std::forward<_Up>(__u); }
-40039: 
-40039:       template <typename _Tp, typename _Up>
-40039:  static constexpr bool
-40039:  _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept
-40039:  {
-40039:    return less<const volatile void*>{}(
-40039:        static_cast<const volatile void*>(std::forward<_Tp>(__t)),
-40039:        static_cast<const volatile void*>(std::forward<_Up>(__u)));
-40039:  }
-40039: 
-40039: 
-40039:       template<typename _Tp, typename _Up, typename = void>
-40039:  struct __not_overloaded2 : true_type { };
-40039: 
-40039: 
-40039:       template<typename _Tp, typename _Up>
-40039:  struct __not_overloaded2<_Tp, _Up, __void_t<
-40039:    decltype(std::declval<_Tp>().operator<(std::declval<_Up>()))>>
-40039:  : false_type { };
-40039: 
-40039: 
-40039:       template<typename _Tp, typename _Up, typename = void>
-40039:  struct __not_overloaded : __not_overloaded2<_Tp, _Up> { };
-40039: 
-40039: 
-40039:       template<typename _Tp, typename _Up>
-40039:  struct __not_overloaded<_Tp, _Up, __void_t<
-40039:    decltype(operator<(std::declval<_Tp>(), std::declval<_Up>()))>>
-40039:  : false_type { };
-40039: 
-40039:       template<typename _Tp, typename _Up>
-40039:  using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>,
-40039:        is_convertible<_Tp, const volatile void*>,
-40039:        is_convertible<_Up, const volatile void*>>;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct greater_equal<void>
-40039:     {
-40039:       template <typename _Tp, typename _Up>
-40039:  constexpr auto
-40039:  operator()(_Tp&& __t, _Up&& __u) const
-40039:  noexcept(noexcept(std::forward<_Tp>(__t) >= std::forward<_Up>(__u)))
-40039:  -> decltype(std::forward<_Tp>(__t) >= std::forward<_Up>(__u))
-40039:  {
-40039:    return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u),
-40039:    __ptr_cmp<_Tp, _Up>{});
-40039:  }
-40039: 
-40039:       template<typename _Tp, typename _Up>
-40039:  constexpr bool
-40039:  operator()(_Tp* __t, _Up* __u) const noexcept
-40039:  { return greater_equal<common_type_t<_Tp*, _Up*>>{}(__t, __u); }
-40039: 
-40039:       typedef __is_transparent is_transparent;
-40039: 
-40039:     private:
-40039:       template <typename _Tp, typename _Up>
-40039:  static constexpr decltype(auto)
-40039:  _S_cmp(_Tp&& __t, _Up&& __u, false_type)
-40039:  { return std::forward<_Tp>(__t) >= std::forward<_Up>(__u); }
-40039: 
-40039:       template <typename _Tp, typename _Up>
-40039:  static constexpr bool
-40039:  _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept
-40039:  {
-40039:    return greater_equal<const volatile void*>{}(
-40039:        static_cast<const volatile void*>(std::forward<_Tp>(__t)),
-40039:        static_cast<const volatile void*>(std::forward<_Up>(__u)));
-40039:  }
-40039: 
-40039: 
-40039:       template<typename _Tp, typename _Up, typename = void>
-40039:  struct __not_overloaded2 : true_type { };
-40039: 
-40039: 
-40039:       template<typename _Tp, typename _Up>
-40039:  struct __not_overloaded2<_Tp, _Up, __void_t<
-40039:    decltype(std::declval<_Tp>().operator>=(std::declval<_Up>()))>>
-40039:  : false_type { };
-40039: 
-40039: 
-40039:       template<typename _Tp, typename _Up, typename = void>
-40039:  struct __not_overloaded : __not_overloaded2<_Tp, _Up> { };
-40039: 
-40039: 
-40039:       template<typename _Tp, typename _Up>
-40039:  struct __not_overloaded<_Tp, _Up, __void_t<
-40039:    decltype(operator>=(std::declval<_Tp>(), std::declval<_Up>()))>>
-40039:  : false_type { };
-40039: 
-40039:       template<typename _Tp, typename _Up>
-40039:  using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>,
-40039:        is_convertible<_Tp, const volatile void*>,
-40039:        is_convertible<_Up, const volatile void*>>;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct less_equal<void>
-40039:     {
-40039:       template <typename _Tp, typename _Up>
-40039:  constexpr auto
-40039:  operator()(_Tp&& __t, _Up&& __u) const
-40039:  noexcept(noexcept(std::forward<_Tp>(__t) <= std::forward<_Up>(__u)))
-40039:  -> decltype(std::forward<_Tp>(__t) <= std::forward<_Up>(__u))
-40039:  {
-40039:    return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u),
-40039:    __ptr_cmp<_Tp, _Up>{});
-40039:  }
-40039: 
-40039:       template<typename _Tp, typename _Up>
-40039:  constexpr bool
-40039:  operator()(_Tp* __t, _Up* __u) const noexcept
-40039:  { return less_equal<common_type_t<_Tp*, _Up*>>{}(__t, __u); }
-40039: 
-40039:       typedef __is_transparent is_transparent;
-40039: 
-40039:     private:
-40039:       template <typename _Tp, typename _Up>
-40039:  static constexpr decltype(auto)
-40039:  _S_cmp(_Tp&& __t, _Up&& __u, false_type)
-40039:  { return std::forward<_Tp>(__t) <= std::forward<_Up>(__u); }
-40039: 
-40039:       template <typename _Tp, typename _Up>
-40039:  static constexpr bool
-40039:  _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept
-40039:  {
-40039:    return less_equal<const volatile void*>{}(
-40039:        static_cast<const volatile void*>(std::forward<_Tp>(__t)),
-40039:        static_cast<const volatile void*>(std::forward<_Up>(__u)));
-40039:  }
-40039: 
-40039: 
-40039:       template<typename _Tp, typename _Up, typename = void>
-40039:  struct __not_overloaded2 : true_type { };
-40039: 
-40039: 
-40039:       template<typename _Tp, typename _Up>
-40039:  struct __not_overloaded2<_Tp, _Up, __void_t<
-40039:    decltype(std::declval<_Tp>().operator<=(std::declval<_Up>()))>>
-40039:  : false_type { };
-40039: 
-40039: 
-40039:       template<typename _Tp, typename _Up, typename = void>
-40039:  struct __not_overloaded : __not_overloaded2<_Tp, _Up> { };
-40039: 
-40039: 
-40039:       template<typename _Tp, typename _Up>
-40039:  struct __not_overloaded<_Tp, _Up, __void_t<
-40039:    decltype(operator<=(std::declval<_Tp>(), std::declval<_Up>()))>>
-40039:  : false_type { };
-40039: 
-40039:       template<typename _Tp, typename _Up>
-40039:  using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>,
-40039:        is_convertible<_Tp, const volatile void*>,
-40039:        is_convertible<_Up, const volatile void*>>;
-40039:     };
-40039: # 750 "/usr/include/c++/8/bits/stl_function.h" 3
-40039:   template<typename _Tp = void>
-40039:     struct logical_and;
-40039: 
-40039:   template<typename _Tp = void>
-40039:     struct logical_or;
-40039: 
-40039:   template<typename _Tp = void>
-40039:     struct logical_not;
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct logical_and : public binary_function<_Tp, _Tp, bool>
-40039:     {
-40039:       constexpr
-40039:       bool
-40039:       operator()(const _Tp& __x, const _Tp& __y) const
-40039:       { return __x && __y; }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct logical_or : public binary_function<_Tp, _Tp, bool>
-40039:     {
-40039:       constexpr
-40039:       bool
-40039:       operator()(const _Tp& __x, const _Tp& __y) const
-40039:       { return __x || __y; }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct logical_not : public unary_function<_Tp, bool>
-40039:     {
-40039:       constexpr
-40039:       bool
-40039:       operator()(const _Tp& __x) const
-40039:       { return !__x; }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<>
-40039:     struct logical_and<void>
-40039:     {
-40039:       template <typename _Tp, typename _Up>
-40039:  constexpr
-40039:  auto
-40039:  operator()(_Tp&& __t, _Up&& __u) const
-40039:  noexcept(noexcept(std::forward<_Tp>(__t) && std::forward<_Up>(__u)))
-40039:  -> decltype(std::forward<_Tp>(__t) && std::forward<_Up>(__u))
-40039:  { return std::forward<_Tp>(__t) && std::forward<_Up>(__u); }
-40039: 
-40039:       typedef __is_transparent is_transparent;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct logical_or<void>
-40039:     {
-40039:       template <typename _Tp, typename _Up>
-40039:  constexpr
-40039:  auto
-40039:  operator()(_Tp&& __t, _Up&& __u) const
-40039:  noexcept(noexcept(std::forward<_Tp>(__t) || std::forward<_Up>(__u)))
-40039:  -> decltype(std::forward<_Tp>(__t) || std::forward<_Up>(__u))
-40039:  { return std::forward<_Tp>(__t) || std::forward<_Up>(__u); }
-40039: 
-40039:       typedef __is_transparent is_transparent;
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct logical_not<void>
-40039:     {
-40039:       template <typename _Tp>
-40039:  constexpr
-40039:  auto
-40039:  operator()(_Tp&& __t) const
-40039:  noexcept(noexcept(!std::forward<_Tp>(__t)))
-40039:  -> decltype(!std::forward<_Tp>(__t))
-40039:  { return !std::forward<_Tp>(__t); }
-40039: 
-40039:       typedef __is_transparent is_transparent;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp = void>
-40039:     struct bit_and;
-40039: 
-40039:   template<typename _Tp = void>
-40039:     struct bit_or;
-40039: 
-40039:   template<typename _Tp = void>
-40039:     struct bit_xor;
-40039: 
-40039:   template<typename _Tp = void>
-40039:     struct bit_not;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct bit_and : public binary_function<_Tp, _Tp, _Tp>
-40039:     {
-40039:       constexpr
-40039:       _Tp
-40039:       operator()(const _Tp& __x, const _Tp& __y) const
-40039:       { return __x & __y; }
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct bit_or : public binary_function<_Tp, _Tp, _Tp>
-40039:     {
-40039:       constexpr
-40039:       _Tp
-40039:       operator()(const _Tp& __x, const _Tp& __y) const
-40039:       { return __x | __y; }
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct bit_xor : public binary_function<_Tp, _Tp, _Tp>
-40039:     {
-40039:       constexpr
-40039:       _Tp
-40039:       operator()(const _Tp& __x, const _Tp& __y) const
-40039:       { return __x ^ __y; }
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct bit_not : public unary_function<_Tp, _Tp>
-40039:     {
-40039:     constexpr
-40039:       _Tp
-40039:       operator()(const _Tp& __x) const
-40039:       { return ~__x; }
-40039:     };
-40039: 
-40039: 
-40039:   template <>
-40039:     struct bit_and<void>
-40039:     {
-40039:       template <typename _Tp, typename _Up>
-40039:  constexpr
-40039:  auto
-40039:  operator()(_Tp&& __t, _Up&& __u) const
-40039:  noexcept(noexcept(std::forward<_Tp>(__t) & std::forward<_Up>(__u)))
-40039:  -> decltype(std::forward<_Tp>(__t) & std::forward<_Up>(__u))
-40039:  { return std::forward<_Tp>(__t) & std::forward<_Up>(__u); }
-40039: 
-40039:       typedef __is_transparent is_transparent;
-40039:     };
-40039: 
-40039:   template <>
-40039:     struct bit_or<void>
-40039:     {
-40039:       template <typename _Tp, typename _Up>
-40039:  constexpr
-40039:  auto
-40039:  operator()(_Tp&& __t, _Up&& __u) const
-40039:  noexcept(noexcept(std::forward<_Tp>(__t) | std::forward<_Up>(__u)))
-40039:  -> decltype(std::forward<_Tp>(__t) | std::forward<_Up>(__u))
-40039:  { return std::forward<_Tp>(__t) | std::forward<_Up>(__u); }
-40039: 
-40039:       typedef __is_transparent is_transparent;
-40039:     };
-40039: 
-40039:   template <>
-40039:     struct bit_xor<void>
-40039:     {
-40039:       template <typename _Tp, typename _Up>
-40039:  constexpr
-40039:  auto
-40039:  operator()(_Tp&& __t, _Up&& __u) const
-40039:  noexcept(noexcept(std::forward<_Tp>(__t) ^ std::forward<_Up>(__u)))
-40039:  -> decltype(std::forward<_Tp>(__t) ^ std::forward<_Up>(__u))
-40039:  { return std::forward<_Tp>(__t) ^ std::forward<_Up>(__u); }
-40039: 
-40039:       typedef __is_transparent is_transparent;
-40039:     };
-40039: 
-40039:   template <>
-40039:     struct bit_not<void>
-40039:     {
-40039:       template <typename _Tp>
-40039:  constexpr
-40039:  auto
-40039:  operator()(_Tp&& __t) const
-40039:  noexcept(noexcept(~std::forward<_Tp>(__t)))
-40039:  -> decltype(~std::forward<_Tp>(__t))
-40039:  { return ~std::forward<_Tp>(__t); }
-40039: 
-40039:       typedef __is_transparent is_transparent;
-40039:     };
-40039: # 978 "/usr/include/c++/8/bits/stl_function.h" 3
-40039:   template<typename _Predicate>
-40039:     class unary_negate
-40039:     : public unary_function<typename _Predicate::argument_type, bool>
-40039:     {
-40039:     protected:
-40039:       _Predicate _M_pred;
-40039: 
-40039:     public:
-40039:       constexpr
-40039:       explicit
-40039:       unary_negate(const _Predicate& __x) : _M_pred(__x) { }
-40039: 
-40039:       constexpr
-40039:       bool
-40039:       operator()(const typename _Predicate::argument_type& __x) const
-40039:       { return !_M_pred(__x); }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Predicate>
-40039:     constexpr
-40039:     inline unary_negate<_Predicate>
-40039:     not1(const _Predicate& __pred)
-40039:     { return unary_negate<_Predicate>(__pred); }
-40039: 
-40039: 
-40039:   template<typename _Predicate>
-40039:     class binary_negate
-40039:     : public binary_function<typename _Predicate::first_argument_type,
-40039:         typename _Predicate::second_argument_type, bool>
-40039:     {
-40039:     protected:
-40039:       _Predicate _M_pred;
-40039: 
-40039:     public:
-40039:       constexpr
-40039:       explicit
-40039:       binary_negate(const _Predicate& __x) : _M_pred(__x) { }
-40039: 
-40039:       constexpr
-40039:       bool
-40039:       operator()(const typename _Predicate::first_argument_type& __x,
-40039:    const typename _Predicate::second_argument_type& __y) const
-40039:       { return !_M_pred(__x, __y); }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Predicate>
-40039:     constexpr
-40039:     inline binary_negate<_Predicate>
-40039:     not2(const _Predicate& __pred)
-40039:     { return binary_negate<_Predicate>(__pred); }
-40039: # 1055 "/usr/include/c++/8/bits/stl_function.h" 3
-40039:   template<typename _Arg, typename _Result>
-40039:     class pointer_to_unary_function : public unary_function<_Arg, _Result>
-40039:     {
-40039:     protected:
-40039:       _Result (*_M_ptr)(_Arg);
-40039: 
-40039:     public:
-40039:       pointer_to_unary_function() { }
-40039: 
-40039:       explicit
-40039:       pointer_to_unary_function(_Result (*__x)(_Arg))
-40039:       : _M_ptr(__x) { }
-40039: 
-40039:       _Result
-40039:       operator()(_Arg __x) const
-40039:       { return _M_ptr(__x); }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Arg, typename _Result>
-40039:     inline pointer_to_unary_function<_Arg, _Result>
-40039:     ptr_fun(_Result (*__x)(_Arg))
-40039:     { return pointer_to_unary_function<_Arg, _Result>(__x); }
-40039: 
-40039: 
-40039:   template<typename _Arg1, typename _Arg2, typename _Result>
-40039:     class pointer_to_binary_function
-40039:     : public binary_function<_Arg1, _Arg2, _Result>
-40039:     {
-40039:     protected:
-40039:       _Result (*_M_ptr)(_Arg1, _Arg2);
-40039: 
-40039:     public:
-40039:       pointer_to_binary_function() { }
-40039: 
-40039:       explicit
-40039:       pointer_to_binary_function(_Result (*__x)(_Arg1, _Arg2))
-40039:       : _M_ptr(__x) { }
-40039: 
-40039:       _Result
-40039:       operator()(_Arg1 __x, _Arg2 __y) const
-40039:       { return _M_ptr(__x, __y); }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Arg1, typename _Arg2, typename _Result>
-40039:     inline pointer_to_binary_function<_Arg1, _Arg2, _Result>
-40039:     ptr_fun(_Result (*__x)(_Arg1, _Arg2))
-40039:     { return pointer_to_binary_function<_Arg1, _Arg2, _Result>(__x); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct _Identity
-40039:     : public unary_function<_Tp, _Tp>
-40039:     {
-40039:       _Tp&
-40039:       operator()(_Tp& __x) const
-40039:       { return __x; }
-40039: 
-40039:       const _Tp&
-40039:       operator()(const _Tp& __x) const
-40039:       { return __x; }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp> struct _Identity<const _Tp> : _Identity<_Tp> { };
-40039: 
-40039:   template<typename _Pair>
-40039:     struct _Select1st
-40039:     : public unary_function<_Pair, typename _Pair::first_type>
-40039:     {
-40039:       typename _Pair::first_type&
-40039:       operator()(_Pair& __x) const
-40039:       { return __x.first; }
-40039: 
-40039:       const typename _Pair::first_type&
-40039:       operator()(const _Pair& __x) const
-40039:       { return __x.first; }
-40039: 
-40039: 
-40039:       template<typename _Pair2>
-40039:         typename _Pair2::first_type&
-40039:         operator()(_Pair2& __x) const
-40039:         { return __x.first; }
-40039: 
-40039:       template<typename _Pair2>
-40039:         const typename _Pair2::first_type&
-40039:         operator()(const _Pair2& __x) const
-40039:         { return __x.first; }
-40039: 
-40039:     };
-40039: 
-40039:   template<typename _Pair>
-40039:     struct _Select2nd
-40039:     : public unary_function<_Pair, typename _Pair::second_type>
-40039:     {
-40039:       typename _Pair::second_type&
-40039:       operator()(_Pair& __x) const
-40039:       { return __x.second; }
-40039: 
-40039:       const typename _Pair::second_type&
-40039:       operator()(const _Pair& __x) const
-40039:       { return __x.second; }
-40039:     };
-40039: # 1178 "/usr/include/c++/8/bits/stl_function.h" 3
-40039:   template<typename _Ret, typename _Tp>
-40039:     class mem_fun_t : public unary_function<_Tp*, _Ret>
-40039:     {
-40039:     public:
-40039:       explicit
-40039:       mem_fun_t(_Ret (_Tp::*__pf)())
-40039:       : _M_f(__pf) { }
-40039: 
-40039:       _Ret
-40039:       operator()(_Tp* __p) const
-40039:       { return (__p->*_M_f)(); }
-40039: 
-40039:     private:
-40039:       _Ret (_Tp::*_M_f)();
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Ret, typename _Tp>
-40039:     class const_mem_fun_t : public unary_function<const _Tp*, _Ret>
-40039:     {
-40039:     public:
-40039:       explicit
-40039:       const_mem_fun_t(_Ret (_Tp::*__pf)() const)
-40039:       : _M_f(__pf) { }
-40039: 
-40039:       _Ret
-40039:       operator()(const _Tp* __p) const
-40039:       { return (__p->*_M_f)(); }
-40039: 
-40039:     private:
-40039:       _Ret (_Tp::*_M_f)() const;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Ret, typename _Tp>
-40039:     class mem_fun_ref_t : public unary_function<_Tp, _Ret>
-40039:     {
-40039:     public:
-40039:       explicit
-40039:       mem_fun_ref_t(_Ret (_Tp::*__pf)())
-40039:       : _M_f(__pf) { }
-40039: 
-40039:       _Ret
-40039:       operator()(_Tp& __r) const
-40039:       { return (__r.*_M_f)(); }
-40039: 
-40039:     private:
-40039:       _Ret (_Tp::*_M_f)();
-40039:   };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Ret, typename _Tp>
-40039:     class const_mem_fun_ref_t : public unary_function<_Tp, _Ret>
-40039:     {
-40039:     public:
-40039:       explicit
-40039:       const_mem_fun_ref_t(_Ret (_Tp::*__pf)() const)
-40039:       : _M_f(__pf) { }
-40039: 
-40039:       _Ret
-40039:       operator()(const _Tp& __r) const
-40039:       { return (__r.*_M_f)(); }
-40039: 
-40039:     private:
-40039:       _Ret (_Tp::*_M_f)() const;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Ret, typename _Tp, typename _Arg>
-40039:     class mem_fun1_t : public binary_function<_Tp*, _Arg, _Ret>
-40039:     {
-40039:     public:
-40039:       explicit
-40039:       mem_fun1_t(_Ret (_Tp::*__pf)(_Arg))
-40039:       : _M_f(__pf) { }
-40039: 
-40039:       _Ret
-40039:       operator()(_Tp* __p, _Arg __x) const
-40039:       { return (__p->*_M_f)(__x); }
-40039: 
-40039:     private:
-40039:       _Ret (_Tp::*_M_f)(_Arg);
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Ret, typename _Tp, typename _Arg>
-40039:     class const_mem_fun1_t : public binary_function<const _Tp*, _Arg, _Ret>
-40039:     {
-40039:     public:
-40039:       explicit
-40039:       const_mem_fun1_t(_Ret (_Tp::*__pf)(_Arg) const)
-40039:       : _M_f(__pf) { }
-40039: 
-40039:       _Ret
-40039:       operator()(const _Tp* __p, _Arg __x) const
-40039:       { return (__p->*_M_f)(__x); }
-40039: 
-40039:     private:
-40039:       _Ret (_Tp::*_M_f)(_Arg) const;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Ret, typename _Tp, typename _Arg>
-40039:     class mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret>
-40039:     {
-40039:     public:
-40039:       explicit
-40039:       mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg))
-40039:       : _M_f(__pf) { }
-40039: 
-40039:       _Ret
-40039:       operator()(_Tp& __r, _Arg __x) const
-40039:       { return (__r.*_M_f)(__x); }
-40039: 
-40039:     private:
-40039:       _Ret (_Tp::*_M_f)(_Arg);
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Ret, typename _Tp, typename _Arg>
-40039:     class const_mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret>
-40039:     {
-40039:     public:
-40039:       explicit
-40039:       const_mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg) const)
-40039:       : _M_f(__pf) { }
-40039: 
-40039:       _Ret
-40039:       operator()(const _Tp& __r, _Arg __x) const
-40039:       { return (__r.*_M_f)(__x); }
-40039: 
-40039:     private:
-40039:       _Ret (_Tp::*_M_f)(_Arg) const;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Ret, typename _Tp>
-40039:     inline mem_fun_t<_Ret, _Tp>
-40039:     mem_fun(_Ret (_Tp::*__f)())
-40039:     { return mem_fun_t<_Ret, _Tp>(__f); }
-40039: 
-40039:   template<typename _Ret, typename _Tp>
-40039:     inline const_mem_fun_t<_Ret, _Tp>
-40039:     mem_fun(_Ret (_Tp::*__f)() const)
-40039:     { return const_mem_fun_t<_Ret, _Tp>(__f); }
-40039: 
-40039:   template<typename _Ret, typename _Tp>
-40039:     inline mem_fun_ref_t<_Ret, _Tp>
-40039:     mem_fun_ref(_Ret (_Tp::*__f)())
-40039:     { return mem_fun_ref_t<_Ret, _Tp>(__f); }
-40039: 
-40039:   template<typename _Ret, typename _Tp>
-40039:     inline const_mem_fun_ref_t<_Ret, _Tp>
-40039:     mem_fun_ref(_Ret (_Tp::*__f)() const)
-40039:     { return const_mem_fun_ref_t<_Ret, _Tp>(__f); }
-40039: 
-40039:   template<typename _Ret, typename _Tp, typename _Arg>
-40039:     inline mem_fun1_t<_Ret, _Tp, _Arg>
-40039:     mem_fun(_Ret (_Tp::*__f)(_Arg))
-40039:     { return mem_fun1_t<_Ret, _Tp, _Arg>(__f); }
-40039: 
-40039:   template<typename _Ret, typename _Tp, typename _Arg>
-40039:     inline const_mem_fun1_t<_Ret, _Tp, _Arg>
-40039:     mem_fun(_Ret (_Tp::*__f)(_Arg) const)
-40039:     { return const_mem_fun1_t<_Ret, _Tp, _Arg>(__f); }
-40039: 
-40039:   template<typename _Ret, typename _Tp, typename _Arg>
-40039:     inline mem_fun1_ref_t<_Ret, _Tp, _Arg>
-40039:     mem_fun_ref(_Ret (_Tp::*__f)(_Arg))
-40039:     { return mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); }
-40039: 
-40039:   template<typename _Ret, typename _Tp, typename _Arg>
-40039:     inline const_mem_fun1_ref_t<_Ret, _Tp, _Arg>
-40039:     mem_fun_ref(_Ret (_Tp::*__f)(_Arg) const)
-40039:     { return const_mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/backward/binders.h" 1 3
-40039: # 60 "/usr/include/c++/8/backward/binders.h" 3
-40039: #pragma GCC diagnostic push
-40039: #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 107 "/usr/include/c++/8/backward/binders.h" 3
-40039:   template<typename _Operation>
-40039:     class binder1st
-40039:     : public unary_function<typename _Operation::second_argument_type,
-40039:        typename _Operation::result_type>
-40039:     {
-40039:     protected:
-40039:       _Operation op;
-40039:       typename _Operation::first_argument_type value;
-40039: 
-40039:     public:
-40039:       binder1st(const _Operation& __x,
-40039:   const typename _Operation::first_argument_type& __y)
-40039:       : op(__x), value(__y) { }
-40039: 
-40039:       typename _Operation::result_type
-40039:       operator()(const typename _Operation::second_argument_type& __x) const
-40039:       { return op(value, __x); }
-40039: 
-40039: 
-40039: 
-40039:       typename _Operation::result_type
-40039:       operator()(typename _Operation::second_argument_type& __x) const
-40039:       { return op(value, __x); }
-40039:     } __attribute__ ((__deprecated__));
-40039: 
-40039: 
-40039:   template<typename _Operation, typename _Tp>
-40039:     inline binder1st<_Operation>
-40039:     bind1st(const _Operation& __fn, const _Tp& __x)
-40039:     {
-40039:       typedef typename _Operation::first_argument_type _Arg1_type;
-40039:       return binder1st<_Operation>(__fn, _Arg1_type(__x));
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _Operation>
-40039:     class binder2nd
-40039:     : public unary_function<typename _Operation::first_argument_type,
-40039:        typename _Operation::result_type>
-40039:     {
-40039:     protected:
-40039:       _Operation op;
-40039:       typename _Operation::second_argument_type value;
-40039: 
-40039:     public:
-40039:       binder2nd(const _Operation& __x,
-40039:   const typename _Operation::second_argument_type& __y)
-40039:       : op(__x), value(__y) { }
-40039: 
-40039:       typename _Operation::result_type
-40039:       operator()(const typename _Operation::first_argument_type& __x) const
-40039:       { return op(__x, value); }
-40039: 
-40039: 
-40039: 
-40039:       typename _Operation::result_type
-40039:       operator()(typename _Operation::first_argument_type& __x) const
-40039:       { return op(__x, value); }
-40039:     } __attribute__ ((__deprecated__));
-40039: 
-40039: 
-40039:   template<typename _Operation, typename _Tp>
-40039:     inline binder2nd<_Operation>
-40039:     bind2nd(const _Operation& __fn, const _Tp& __x)
-40039:     {
-40039:       typedef typename _Operation::second_argument_type _Arg2_type;
-40039:       return binder2nd<_Operation>(__fn, _Arg2_type(__x));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: #pragma GCC diagnostic pop
-40039: # 1369 "/usr/include/c++/8/bits/stl_function.h" 2 3
-40039: # 49 "/usr/include/c++/8/string" 2 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/range_access.h" 1 3
-40039: # 33 "/usr/include/c++/8/bits/range_access.h" 3
-40039:        
-40039: # 34 "/usr/include/c++/8/bits/range_access.h" 3
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Container>
-40039:     inline auto
-40039:     begin(_Container& __cont) -> decltype(__cont.begin())
-40039:     { return __cont.begin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Container>
-40039:     inline auto
-40039:     begin(const _Container& __cont) -> decltype(__cont.begin())
-40039:     { return __cont.begin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Container>
-40039:     inline auto
-40039:     end(_Container& __cont) -> decltype(__cont.end())
-40039:     { return __cont.end(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Container>
-40039:     inline auto
-40039:     end(const _Container& __cont) -> decltype(__cont.end())
-40039:     { return __cont.end(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, size_t _Nm>
-40039:     inline constexpr _Tp*
-40039:     begin(_Tp (&__arr)[_Nm])
-40039:     { return __arr; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, size_t _Nm>
-40039:     inline constexpr _Tp*
-40039:     end(_Tp (&__arr)[_Nm])
-40039:     { return __arr + _Nm; }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp> class valarray;
-40039: 
-40039:   template<typename _Tp> _Tp* begin(valarray<_Tp>&);
-40039:   template<typename _Tp> const _Tp* begin(const valarray<_Tp>&);
-40039:   template<typename _Tp> _Tp* end(valarray<_Tp>&);
-40039:   template<typename _Tp> const _Tp* end(const valarray<_Tp>&);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Container>
-40039:     inline constexpr auto
-40039:     cbegin(const _Container& __cont) noexcept(noexcept(std::begin(__cont)))
-40039:       -> decltype(std::begin(__cont))
-40039:     { return std::begin(__cont); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Container>
-40039:     inline constexpr auto
-40039:     cend(const _Container& __cont) noexcept(noexcept(std::end(__cont)))
-40039:       -> decltype(std::end(__cont))
-40039:     { return std::end(__cont); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Container>
-40039:     inline auto
-40039:     rbegin(_Container& __cont) -> decltype(__cont.rbegin())
-40039:     { return __cont.rbegin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Container>
-40039:     inline auto
-40039:     rbegin(const _Container& __cont) -> decltype(__cont.rbegin())
-40039:     { return __cont.rbegin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Container>
-40039:     inline auto
-40039:     rend(_Container& __cont) -> decltype(__cont.rend())
-40039:     { return __cont.rend(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Container>
-40039:     inline auto
-40039:     rend(const _Container& __cont) -> decltype(__cont.rend())
-40039:     { return __cont.rend(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, size_t _Nm>
-40039:     inline reverse_iterator<_Tp*>
-40039:     rbegin(_Tp (&__arr)[_Nm])
-40039:     { return reverse_iterator<_Tp*>(__arr + _Nm); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, size_t _Nm>
-40039:     inline reverse_iterator<_Tp*>
-40039:     rend(_Tp (&__arr)[_Nm])
-40039:     { return reverse_iterator<_Tp*>(__arr); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline reverse_iterator<const _Tp*>
-40039:     rbegin(initializer_list<_Tp> __il)
-40039:     { return reverse_iterator<const _Tp*>(__il.end()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline reverse_iterator<const _Tp*>
-40039:     rend(initializer_list<_Tp> __il)
-40039:     { return reverse_iterator<const _Tp*>(__il.begin()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Container>
-40039:     inline auto
-40039:     crbegin(const _Container& __cont) -> decltype(std::rbegin(__cont))
-40039:     { return std::rbegin(__cont); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Container>
-40039:     inline auto
-40039:     crend(const _Container& __cont) -> decltype(std::rend(__cont))
-40039:     { return std::rend(__cont); }
-40039: # 323 "/usr/include/c++/8/bits/range_access.h" 3
-40039: 
-40039: }
-40039: # 52 "/usr/include/c++/8/string" 2 3
-40039: # 1 "/usr/include/c++/8/bits/basic_string.h" 1 3
-40039: # 37 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:        
-40039: # 38 "/usr/include/c++/8/bits/basic_string.h" 3
-40039: 
-40039: # 1 "/usr/include/c++/8/ext/atomicity.h" 1 3
-40039: # 32 "/usr/include/c++/8/ext/atomicity.h" 3
-40039:        
-40039: # 33 "/usr/include/c++/8/ext/atomicity.h" 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr.h" 1 3
-40039: # 30 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr.h" 3
-40039: #pragma GCC visibility push(default)
-40039: # 148 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr.h" 3
-40039: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h" 1 3
-40039: # 35 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h" 3
-40039: # 1 "/usr/include/pthread.h" 1 3 4
-40039: # 23 "/usr/include/pthread.h" 3 4
-40039: # 1 "/usr/include/sched.h" 1 3 4
-40039: # 29 "/usr/include/sched.h" 3 4
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
-40039: # 30 "/usr/include/sched.h" 2 3 4
-40039: # 43 "/usr/include/sched.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/sched.h" 1 3 4
-40039: # 74 "/usr/include/x86_64-linux-gnu/bits/sched.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h" 1 3 4
-40039: # 23 "/usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h" 3 4
-40039: struct sched_param
-40039: {
-40039:   int sched_priority;
-40039: };
-40039: # 75 "/usr/include/x86_64-linux-gnu/bits/sched.h" 2 3 4
-40039: 
-40039: extern "C" {
-40039: 
-40039: 
-40039: 
-40039: extern int clone (int (*__fn) (void *__arg), void *__child_stack,
-40039:     int __flags, void *__arg, ...) throw ();
-40039: 
-40039: 
-40039: extern int unshare (int __flags) throw ();
-40039: 
-40039: 
-40039: extern int sched_getcpu (void) throw ();
-40039: 
-40039: 
-40039: extern int setns (int __fd, int __nstype) throw ();
-40039: 
-40039: 
-40039: }
-40039: # 44 "/usr/include/sched.h" 2 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/cpu-set.h" 1 3 4
-40039: # 32 "/usr/include/x86_64-linux-gnu/bits/cpu-set.h" 3 4
-40039: typedef unsigned long int __cpu_mask;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef struct
-40039: {
-40039:   __cpu_mask __bits[1024 / (8 * sizeof (__cpu_mask))];
-40039: } cpu_set_t;
-40039: # 115 "/usr/include/x86_64-linux-gnu/bits/cpu-set.h" 3 4
-40039: extern "C" {
-40039: 
-40039: extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp)
-40039:      throw ();
-40039: extern cpu_set_t *__sched_cpualloc (size_t __count) throw () __attribute__ ((__warn_unused_result__));
-40039: extern void __sched_cpufree (cpu_set_t *__set) throw ();
-40039: 
-40039: }
-40039: # 45 "/usr/include/sched.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern "C" {
-40039: 
-40039: 
-40039: extern int sched_setparam (__pid_t __pid, const struct sched_param *__param)
-40039:      throw ();
-40039: 
-40039: 
-40039: extern int sched_getparam (__pid_t __pid, struct sched_param *__param) throw ();
-40039: 
-40039: 
-40039: extern int sched_setscheduler (__pid_t __pid, int __policy,
-40039:           const struct sched_param *__param) throw ();
-40039: 
-40039: 
-40039: extern int sched_getscheduler (__pid_t __pid) throw ();
-40039: 
-40039: 
-40039: extern int sched_yield (void) throw ();
-40039: 
-40039: 
-40039: extern int sched_get_priority_max (int __algorithm) throw ();
-40039: 
-40039: 
-40039: extern int sched_get_priority_min (int __algorithm) throw ();
-40039: 
-40039: 
-40039: extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) throw ();
-40039: # 121 "/usr/include/sched.h" 3 4
-40039: extern int sched_setaffinity (__pid_t __pid, size_t __cpusetsize,
-40039:          const cpu_set_t *__cpuset) throw ();
-40039: 
-40039: 
-40039: extern int sched_getaffinity (__pid_t __pid, size_t __cpusetsize,
-40039:          cpu_set_t *__cpuset) throw ();
-40039: 
-40039: 
-40039: }
-40039: # 24 "/usr/include/pthread.h" 2 3 4
-40039: # 1 "/usr/include/time.h" 1 3 4
-40039: # 29 "/usr/include/time.h" 3 4
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
-40039: # 30 "/usr/include/time.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/time.h" 1 3 4
-40039: # 73 "/usr/include/x86_64-linux-gnu/bits/time.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/timex.h" 1 3 4
-40039: # 26 "/usr/include/x86_64-linux-gnu/bits/timex.h" 3 4
-40039: struct timex
-40039: {
-40039:   unsigned int modes;
-40039:   __syscall_slong_t offset;
-40039:   __syscall_slong_t freq;
-40039:   __syscall_slong_t maxerror;
-40039:   __syscall_slong_t esterror;
-40039:   int status;
-40039:   __syscall_slong_t constant;
-40039:   __syscall_slong_t precision;
-40039:   __syscall_slong_t tolerance;
-40039:   struct timeval time;
-40039:   __syscall_slong_t tick;
-40039:   __syscall_slong_t ppsfreq;
-40039:   __syscall_slong_t jitter;
-40039:   int shift;
-40039:   __syscall_slong_t stabil;
-40039:   __syscall_slong_t jitcnt;
-40039:   __syscall_slong_t calcnt;
-40039:   __syscall_slong_t errcnt;
-40039:   __syscall_slong_t stbcnt;
-40039: 
-40039:   int tai;
-40039: 
-40039: 
-40039:   int :32; int :32; int :32; int :32;
-40039:   int :32; int :32; int :32; int :32;
-40039:   int :32; int :32; int :32;
-40039: };
-40039: # 74 "/usr/include/x86_64-linux-gnu/bits/time.h" 2 3 4
-40039: 
-40039: extern "C" {
-40039: 
-40039: 
-40039: extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) throw ();
-40039: 
-40039: }
-40039: # 34 "/usr/include/time.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h" 1 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: struct tm
-40039: {
-40039:   int tm_sec;
-40039:   int tm_min;
-40039:   int tm_hour;
-40039:   int tm_mday;
-40039:   int tm_mon;
-40039:   int tm_year;
-40039:   int tm_wday;
-40039:   int tm_yday;
-40039:   int tm_isdst;
-40039: 
-40039: 
-40039:   long int tm_gmtoff;
-40039:   const char *tm_zone;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: };
-40039: # 40 "/usr/include/time.h" 2 3 4
-40039: # 48 "/usr/include/time.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h" 1 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: struct itimerspec
-40039:   {
-40039:     struct timespec it_interval;
-40039:     struct timespec it_value;
-40039:   };
-40039: # 49 "/usr/include/time.h" 2 3 4
-40039: struct sigevent;
-40039: # 68 "/usr/include/time.h" 3 4
-40039: extern "C" {
-40039: 
-40039: 
-40039: 
-40039: extern clock_t clock (void) throw ();
-40039: 
-40039: 
-40039: extern time_t time (time_t *__timer) throw ();
-40039: 
-40039: 
-40039: extern double difftime (time_t __time1, time_t __time0)
-40039:      throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern time_t mktime (struct tm *__tp) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern size_t strftime (char *__restrict __s, size_t __maxsize,
-40039:    const char *__restrict __format,
-40039:    const struct tm *__restrict __tp) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *strptime (const char *__restrict __s,
-40039:          const char *__restrict __fmt, struct tm *__tp)
-40039:      throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern size_t strftime_l (char *__restrict __s, size_t __maxsize,
-40039:      const char *__restrict __format,
-40039:      const struct tm *__restrict __tp,
-40039:      locale_t __loc) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern char *strptime_l (const char *__restrict __s,
-40039:     const char *__restrict __fmt, struct tm *__tp,
-40039:     locale_t __loc) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern struct tm *gmtime (const time_t *__timer) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern struct tm *localtime (const time_t *__timer) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern struct tm *gmtime_r (const time_t *__restrict __timer,
-40039:        struct tm *__restrict __tp) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern struct tm *localtime_r (const time_t *__restrict __timer,
-40039:           struct tm *__restrict __tp) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *asctime (const struct tm *__tp) throw ();
-40039: 
-40039: 
-40039: extern char *ctime (const time_t *__timer) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *asctime_r (const struct tm *__restrict __tp,
-40039:    char *__restrict __buf) throw ();
-40039: 
-40039: 
-40039: extern char *ctime_r (const time_t *__restrict __timer,
-40039:         char *__restrict __buf) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *__tzname[2];
-40039: extern int __daylight;
-40039: extern long int __timezone;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *tzname[2];
-40039: 
-40039: 
-40039: 
-40039: extern void tzset (void) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int daylight;
-40039: extern long int timezone;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int stime (const time_t *__when) throw ();
-40039: # 196 "/usr/include/time.h" 3 4
-40039: extern time_t timegm (struct tm *__tp) throw ();
-40039: 
-40039: 
-40039: extern time_t timelocal (struct tm *__tp) throw ();
-40039: 
-40039: 
-40039: extern int dysize (int __year) throw () __attribute__ ((__const__));
-40039: # 211 "/usr/include/time.h" 3 4
-40039: extern int nanosleep (const struct timespec *__requested_time,
-40039:         struct timespec *__remaining);
-40039: 
-40039: 
-40039: 
-40039: extern int clock_getres (clockid_t __clock_id, struct timespec *__res) throw ();
-40039: 
-40039: 
-40039: extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) throw ();
-40039: 
-40039: 
-40039: extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp)
-40039:      throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int clock_nanosleep (clockid_t __clock_id, int __flags,
-40039:        const struct timespec *__req,
-40039:        struct timespec *__rem);
-40039: 
-40039: 
-40039: extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int timer_create (clockid_t __clock_id,
-40039:     struct sigevent *__restrict __evp,
-40039:     timer_t *__restrict __timerid) throw ();
-40039: 
-40039: 
-40039: extern int timer_delete (timer_t __timerid) throw ();
-40039: 
-40039: 
-40039: extern int timer_settime (timer_t __timerid, int __flags,
-40039:      const struct itimerspec *__restrict __value,
-40039:      struct itimerspec *__restrict __ovalue) throw ();
-40039: 
-40039: 
-40039: extern int timer_gettime (timer_t __timerid, struct itimerspec *__value)
-40039:      throw ();
-40039: 
-40039: 
-40039: extern int timer_getoverrun (timer_t __timerid) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int timespec_get (struct timespec *__ts, int __base)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: # 280 "/usr/include/time.h" 3 4
-40039: extern int getdate_err;
-40039: # 289 "/usr/include/time.h" 3 4
-40039: extern struct tm *getdate (const char *__string);
-40039: # 303 "/usr/include/time.h" 3 4
-40039: extern int getdate_r (const char *__restrict __string,
-40039:         struct tm *__restrict __resbufp);
-40039: 
-40039: 
-40039: }
-40039: # 25 "/usr/include/pthread.h" 2 3 4
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/setjmp.h" 1 3 4
-40039: # 26 "/usr/include/x86_64-linux-gnu/bits/setjmp.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
-40039: # 27 "/usr/include/x86_64-linux-gnu/bits/setjmp.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef long int __jmp_buf[8];
-40039: # 28 "/usr/include/pthread.h" 2 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
-40039: # 29 "/usr/include/pthread.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: enum
-40039: {
-40039:   PTHREAD_CREATE_JOINABLE,
-40039: 
-40039:   PTHREAD_CREATE_DETACHED
-40039: 
-40039: };
-40039: 
-40039: 
-40039: 
-40039: enum
-40039: {
-40039:   PTHREAD_MUTEX_TIMED_NP,
-40039:   PTHREAD_MUTEX_RECURSIVE_NP,
-40039:   PTHREAD_MUTEX_ERRORCHECK_NP,
-40039:   PTHREAD_MUTEX_ADAPTIVE_NP
-40039: 
-40039:   ,
-40039:   PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP,
-40039:   PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP,
-40039:   PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP,
-40039:   PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL
-40039: 
-40039: 
-40039: 
-40039:   , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP
-40039: 
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: enum
-40039: {
-40039:   PTHREAD_MUTEX_STALLED,
-40039:   PTHREAD_MUTEX_STALLED_NP = PTHREAD_MUTEX_STALLED,
-40039:   PTHREAD_MUTEX_ROBUST,
-40039:   PTHREAD_MUTEX_ROBUST_NP = PTHREAD_MUTEX_ROBUST
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: enum
-40039: {
-40039:   PTHREAD_PRIO_NONE,
-40039:   PTHREAD_PRIO_INHERIT,
-40039:   PTHREAD_PRIO_PROTECT
-40039: };
-40039: # 115 "/usr/include/pthread.h" 3 4
-40039: enum
-40039: {
-40039:   PTHREAD_RWLOCK_PREFER_READER_NP,
-40039:   PTHREAD_RWLOCK_PREFER_WRITER_NP,
-40039:   PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,
-40039:   PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_READER_NP
-40039: };
-40039: # 156 "/usr/include/pthread.h" 3 4
-40039: enum
-40039: {
-40039:   PTHREAD_INHERIT_SCHED,
-40039: 
-40039:   PTHREAD_EXPLICIT_SCHED
-40039: 
-40039: };
-40039: 
-40039: 
-40039: 
-40039: enum
-40039: {
-40039:   PTHREAD_SCOPE_SYSTEM,
-40039: 
-40039:   PTHREAD_SCOPE_PROCESS
-40039: 
-40039: };
-40039: 
-40039: 
-40039: 
-40039: enum
-40039: {
-40039:   PTHREAD_PROCESS_PRIVATE,
-40039: 
-40039:   PTHREAD_PROCESS_SHARED
-40039: 
-40039: };
-40039: # 191 "/usr/include/pthread.h" 3 4
-40039: struct _pthread_cleanup_buffer
-40039: {
-40039:   void (*__routine) (void *);
-40039:   void *__arg;
-40039:   int __canceltype;
-40039:   struct _pthread_cleanup_buffer *__prev;
-40039: };
-40039: 
-40039: 
-40039: enum
-40039: {
-40039:   PTHREAD_CANCEL_ENABLE,
-40039: 
-40039:   PTHREAD_CANCEL_DISABLE
-40039: 
-40039: };
-40039: enum
-40039: {
-40039:   PTHREAD_CANCEL_DEFERRED,
-40039: 
-40039:   PTHREAD_CANCEL_ASYNCHRONOUS
-40039: 
-40039: };
-40039: # 229 "/usr/include/pthread.h" 3 4
-40039: extern "C" {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_create (pthread_t *__restrict __newthread,
-40039:       const pthread_attr_t *__restrict __attr,
-40039:       void *(*__start_routine) (void *),
-40039:       void *__restrict __arg) throw () __attribute__ ((__nonnull__ (1, 3)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern void pthread_exit (void *__retval) __attribute__ ((__noreturn__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_join (pthread_t __th, void **__thread_return);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_timedjoin_np (pthread_t __th, void **__thread_return,
-40039:      const struct timespec *__abstime);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_detach (pthread_t __th) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern pthread_t pthread_self (void) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int pthread_equal (pthread_t __thread1, pthread_t __thread2)
-40039:   throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_attr_init (pthread_attr_t *__attr) throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_attr_destroy (pthread_attr_t *__attr)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr,
-40039:      int *__detachstate)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern int pthread_attr_setdetachstate (pthread_attr_t *__attr,
-40039:      int __detachstate)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_attr_getguardsize (const pthread_attr_t *__attr,
-40039:           size_t *__guardsize)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern int pthread_attr_setguardsize (pthread_attr_t *__attr,
-40039:           size_t __guardsize)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict __attr,
-40039:            struct sched_param *__restrict __param)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr,
-40039:            const struct sched_param *__restrict
-40039:            __param) throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict
-40039:      __attr, int *__restrict __policy)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict
-40039:       __attr, int *__restrict __inherit)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern int pthread_attr_setinheritsched (pthread_attr_t *__attr,
-40039:       int __inherit)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr,
-40039:       int *__restrict __scope)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict
-40039:           __attr, void **__restrict __stackaddr)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__deprecated__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_attr_setstackaddr (pthread_attr_t *__attr,
-40039:           void *__stackaddr)
-40039:      throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__));
-40039: 
-40039: 
-40039: extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict
-40039:           __attr, size_t *__restrict __stacksize)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_attr_setstacksize (pthread_attr_t *__attr,
-40039:           size_t __stacksize)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr,
-40039:       void **__restrict __stackaddr,
-40039:       size_t *__restrict __stacksize)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2, 3)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr,
-40039:       size_t __stacksize) throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr,
-40039:      size_t __cpusetsize,
-40039:      const cpu_set_t *__cpuset)
-40039:      throw () __attribute__ ((__nonnull__ (1, 3)));
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_attr_getaffinity_np (const pthread_attr_t *__attr,
-40039:      size_t __cpusetsize,
-40039:      cpu_set_t *__cpuset)
-40039:      throw () __attribute__ ((__nonnull__ (1, 3)));
-40039: 
-40039: 
-40039: extern int pthread_getattr_default_np (pthread_attr_t *__attr)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_setattr_default_np (const pthread_attr_t *__attr)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr)
-40039:      throw () __attribute__ ((__nonnull__ (2)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_setschedparam (pthread_t __target_thread, int __policy,
-40039:       const struct sched_param *__param)
-40039:      throw () __attribute__ ((__nonnull__ (3)));
-40039: 
-40039: 
-40039: extern int pthread_getschedparam (pthread_t __target_thread,
-40039:       int *__restrict __policy,
-40039:       struct sched_param *__restrict __param)
-40039:      throw () __attribute__ ((__nonnull__ (2, 3)));
-40039: 
-40039: 
-40039: extern int pthread_setschedprio (pthread_t __target_thread, int __prio)
-40039:      throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_getname_np (pthread_t __target_thread, char *__buf,
-40039:           size_t __buflen)
-40039:      throw () __attribute__ ((__nonnull__ (2)));
-40039: 
-40039: 
-40039: extern int pthread_setname_np (pthread_t __target_thread, const char *__name)
-40039:      throw () __attribute__ ((__nonnull__ (2)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_getconcurrency (void) throw ();
-40039: 
-40039: 
-40039: extern int pthread_setconcurrency (int __level) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_yield (void) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_setaffinity_np (pthread_t __th, size_t __cpusetsize,
-40039:        const cpu_set_t *__cpuset)
-40039:      throw () __attribute__ ((__nonnull__ (3)));
-40039: 
-40039: 
-40039: extern int pthread_getaffinity_np (pthread_t __th, size_t __cpusetsize,
-40039:        cpu_set_t *__cpuset)
-40039:      throw () __attribute__ ((__nonnull__ (3)));
-40039: # 495 "/usr/include/pthread.h" 3 4
-40039: extern int pthread_once (pthread_once_t *__once_control,
-40039:     void (*__init_routine) (void)) __attribute__ ((__nonnull__ (1, 2)));
-40039: # 507 "/usr/include/pthread.h" 3 4
-40039: extern int pthread_setcancelstate (int __state, int *__oldstate);
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_setcanceltype (int __type, int *__oldtype);
-40039: 
-40039: 
-40039: extern int pthread_cancel (pthread_t __th);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern void pthread_testcancel (void);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef struct
-40039: {
-40039:   struct
-40039:   {
-40039:     __jmp_buf __cancel_jmp_buf;
-40039:     int __mask_was_saved;
-40039:   } __cancel_jmp_buf[1];
-40039:   void *__pad[4];
-40039: } __pthread_unwind_buf_t __attribute__ ((__aligned__));
-40039: # 541 "/usr/include/pthread.h" 3 4
-40039: struct __pthread_cleanup_frame
-40039: {
-40039:   void (*__cancel_routine) (void *);
-40039:   void *__cancel_arg;
-40039:   int __do_it;
-40039:   int __cancel_type;
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: class __pthread_cleanup_class
-40039: {
-40039:   void (*__cancel_routine) (void *);
-40039:   void *__cancel_arg;
-40039:   int __do_it;
-40039:   int __cancel_type;
-40039: 
-40039:  public:
-40039:   __pthread_cleanup_class (void (*__fct) (void *), void *__arg)
-40039:     : __cancel_routine (__fct), __cancel_arg (__arg), __do_it (1) { }
-40039:   ~__pthread_cleanup_class () { if (__do_it) __cancel_routine (__cancel_arg); }
-40039:   void __setdoit (int __newval) { __do_it = __newval; }
-40039:   void __defer () { pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED,
-40039:         &__cancel_type); }
-40039:   void __restore () const { pthread_setcanceltype (__cancel_type, 0); }
-40039: };
-40039: # 743 "/usr/include/pthread.h" 3 4
-40039: struct __jmp_buf_tag;
-40039: extern int __sigsetjmp (struct __jmp_buf_tag *__env, int __savemask) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_mutex_init (pthread_mutex_t *__mutex,
-40039:           const pthread_mutexattr_t *__mutexattr)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_mutex_destroy (pthread_mutex_t *__mutex)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_mutex_trylock (pthread_mutex_t *__mutex)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_mutex_lock (pthread_mutex_t *__mutex)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex,
-40039:         const struct timespec *__restrict
-40039:         __abstime) throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_mutex_unlock (pthread_mutex_t *__mutex)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_mutex_getprioceiling (const pthread_mutex_t *
-40039:       __restrict __mutex,
-40039:       int *__restrict __prioceiling)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex,
-40039:       int __prioceiling,
-40039:       int *__restrict __old_ceiling)
-40039:      throw () __attribute__ ((__nonnull__ (1, 3)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_mutex_consistent (pthread_mutex_t *__mutex)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: extern int pthread_mutex_consistent_np (pthread_mutex_t *__mutex)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: # 807 "/usr/include/pthread.h" 3 4
-40039: extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_mutexattr_getpshared (const pthread_mutexattr_t *
-40039:       __restrict __attr,
-40039:       int *__restrict __pshared)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr,
-40039:       int __pshared)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_mutexattr_gettype (const pthread_mutexattr_t *__restrict
-40039:           __attr, int *__restrict __kind)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_mutexattr_getprotocol (const pthread_mutexattr_t *
-40039:        __restrict __attr,
-40039:        int *__restrict __protocol)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_mutexattr_setprotocol (pthread_mutexattr_t *__attr,
-40039:        int __protocol)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *
-40039:           __restrict __attr,
-40039:           int *__restrict __prioceiling)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *__attr,
-40039:           int __prioceiling)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_mutexattr_getrobust (const pthread_mutexattr_t *__attr,
-40039:      int *__robustness)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: extern int pthread_mutexattr_getrobust_np (const pthread_mutexattr_t *__attr,
-40039:         int *__robustness)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_mutexattr_setrobust (pthread_mutexattr_t *__attr,
-40039:      int __robustness)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: extern int pthread_mutexattr_setrobust_np (pthread_mutexattr_t *__attr,
-40039:         int __robustness)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: # 889 "/usr/include/pthread.h" 3 4
-40039: extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock,
-40039:     const pthread_rwlockattr_t *__restrict
-40039:     __attr) throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock)
-40039:   throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock,
-40039:            const struct timespec *__restrict
-40039:            __abstime) throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock,
-40039:            const struct timespec *__restrict
-40039:            __abstime) throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *
-40039:        __restrict __attr,
-40039:        int *__restrict __pshared)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr,
-40039:        int __pshared)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_rwlockattr_getkind_np (const pthread_rwlockattr_t *
-40039:        __restrict __attr,
-40039:        int *__restrict __pref)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern int pthread_rwlockattr_setkind_np (pthread_rwlockattr_t *__attr,
-40039:        int __pref) throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_cond_init (pthread_cond_t *__restrict __cond,
-40039:          const pthread_condattr_t *__restrict __cond_attr)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_cond_destroy (pthread_cond_t *__cond)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_cond_signal (pthread_cond_t *__cond)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_cond_broadcast (pthread_cond_t *__cond)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
-40039:          pthread_mutex_t *__restrict __mutex)
-40039:      __attribute__ ((__nonnull__ (1, 2)));
-40039: # 1001 "/usr/include/pthread.h" 3 4
-40039: extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
-40039:        pthread_mutex_t *__restrict __mutex,
-40039:        const struct timespec *__restrict __abstime)
-40039:      __attribute__ ((__nonnull__ (1, 2, 3)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_condattr_init (pthread_condattr_t *__attr)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_condattr_destroy (pthread_condattr_t *__attr)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_condattr_getpshared (const pthread_condattr_t *
-40039:      __restrict __attr,
-40039:      int *__restrict __pshared)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern int pthread_condattr_setpshared (pthread_condattr_t *__attr,
-40039:      int __pshared) throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_condattr_getclock (const pthread_condattr_t *
-40039:           __restrict __attr,
-40039:           __clockid_t *__restrict __clock_id)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern int pthread_condattr_setclock (pthread_condattr_t *__attr,
-40039:           __clockid_t __clock_id)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: # 1045 "/usr/include/pthread.h" 3 4
-40039: extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_spin_destroy (pthread_spinlock_t *__lock)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_spin_lock (pthread_spinlock_t *__lock)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_spin_trylock (pthread_spinlock_t *__lock)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_spin_unlock (pthread_spinlock_t *__lock)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier,
-40039:      const pthread_barrierattr_t *__restrict
-40039:      __attr, unsigned int __count)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_barrier_destroy (pthread_barrier_t *__barrier)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_barrier_wait (pthread_barrier_t *__barrier)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t *
-40039:         __restrict __attr,
-40039:         int *__restrict __pshared)
-40039:      throw () __attribute__ ((__nonnull__ (1, 2)));
-40039: 
-40039: 
-40039: extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr,
-40039:         int __pshared)
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: # 1112 "/usr/include/pthread.h" 3 4
-40039: extern int pthread_key_create (pthread_key_t *__key,
-40039:           void (*__destr_function) (void *))
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int pthread_key_delete (pthread_key_t __key) throw ();
-40039: 
-40039: 
-40039: extern void *pthread_getspecific (pthread_key_t __key) throw ();
-40039: 
-40039: 
-40039: extern int pthread_setspecific (pthread_key_t __key,
-40039:     const void *__pointer) throw () ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pthread_getcpuclockid (pthread_t __thread_id,
-40039:       __clockid_t *__clock_id)
-40039:      throw () __attribute__ ((__nonnull__ (2)));
-40039: # 1146 "/usr/include/pthread.h" 3 4
-40039: extern int pthread_atfork (void (*__prepare) (void),
-40039:       void (*__parent) (void),
-40039:       void (*__child) (void)) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__gnu_inline__)) int
-40039: __attribute__ ((__leaf__)) pthread_equal (pthread_t __thread1, pthread_t __thread2) throw ()
-40039: {
-40039:   return __thread1 == __thread2;
-40039: }
-40039: 
-40039: 
-40039: }
-40039: # 36 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h" 2 3
-40039: # 47 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h" 3
-40039: typedef pthread_t __gthread_t;
-40039: typedef pthread_key_t __gthread_key_t;
-40039: typedef pthread_once_t __gthread_once_t;
-40039: typedef pthread_mutex_t __gthread_mutex_t;
-40039: typedef pthread_mutex_t __gthread_recursive_mutex_t;
-40039: typedef pthread_cond_t __gthread_cond_t;
-40039: typedef struct timespec __gthread_time_t;
-40039: # 101 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h" 3
-40039: static __typeof(pthread_once) __gthrw_pthread_once __attribute__ ((__weakref__("pthread_once")));
-40039: static __typeof(pthread_getspecific) __gthrw_pthread_getspecific __attribute__ ((__weakref__("pthread_getspecific")));
-40039: static __typeof(pthread_setspecific) __gthrw_pthread_setspecific __attribute__ ((__weakref__("pthread_setspecific")));
-40039: 
-40039: static __typeof(pthread_create) __gthrw_pthread_create __attribute__ ((__weakref__("pthread_create")));
-40039: static __typeof(pthread_join) __gthrw_pthread_join __attribute__ ((__weakref__("pthread_join")));
-40039: static __typeof(pthread_equal) __gthrw_pthread_equal __attribute__ ((__weakref__("pthread_equal")));
-40039: static __typeof(pthread_self) __gthrw_pthread_self __attribute__ ((__weakref__("pthread_self")));
-40039: static __typeof(pthread_detach) __gthrw_pthread_detach __attribute__ ((__weakref__("pthread_detach")));
-40039: 
-40039: static __typeof(pthread_cancel) __gthrw_pthread_cancel __attribute__ ((__weakref__("pthread_cancel")));
-40039: 
-40039: static __typeof(sched_yield) __gthrw_sched_yield __attribute__ ((__weakref__("sched_yield")));
-40039: 
-40039: static __typeof(pthread_mutex_lock) __gthrw_pthread_mutex_lock __attribute__ ((__weakref__("pthread_mutex_lock")));
-40039: static __typeof(pthread_mutex_trylock) __gthrw_pthread_mutex_trylock __attribute__ ((__weakref__("pthread_mutex_trylock")));
-40039: 
-40039: static __typeof(pthread_mutex_timedlock) __gthrw_pthread_mutex_timedlock __attribute__ ((__weakref__("pthread_mutex_timedlock")));
-40039: 
-40039: static __typeof(pthread_mutex_unlock) __gthrw_pthread_mutex_unlock __attribute__ ((__weakref__("pthread_mutex_unlock")));
-40039: static __typeof(pthread_mutex_init) __gthrw_pthread_mutex_init __attribute__ ((__weakref__("pthread_mutex_init")));
-40039: static __typeof(pthread_mutex_destroy) __gthrw_pthread_mutex_destroy __attribute__ ((__weakref__("pthread_mutex_destroy")));
-40039: 
-40039: static __typeof(pthread_cond_init) __gthrw_pthread_cond_init __attribute__ ((__weakref__("pthread_cond_init")));
-40039: static __typeof(pthread_cond_broadcast) __gthrw_pthread_cond_broadcast __attribute__ ((__weakref__("pthread_cond_broadcast")));
-40039: static __typeof(pthread_cond_signal) __gthrw_pthread_cond_signal __attribute__ ((__weakref__("pthread_cond_signal")));
-40039: static __typeof(pthread_cond_wait) __gthrw_pthread_cond_wait __attribute__ ((__weakref__("pthread_cond_wait")));
-40039: static __typeof(pthread_cond_timedwait) __gthrw_pthread_cond_timedwait __attribute__ ((__weakref__("pthread_cond_timedwait")));
-40039: static __typeof(pthread_cond_destroy) __gthrw_pthread_cond_destroy __attribute__ ((__weakref__("pthread_cond_destroy")));
-40039: 
-40039: static __typeof(pthread_key_create) __gthrw_pthread_key_create __attribute__ ((__weakref__("pthread_key_create")));
-40039: static __typeof(pthread_key_delete) __gthrw_pthread_key_delete __attribute__ ((__weakref__("pthread_key_delete")));
-40039: static __typeof(pthread_mutexattr_init) __gthrw_pthread_mutexattr_init __attribute__ ((__weakref__("pthread_mutexattr_init")));
-40039: static __typeof(pthread_mutexattr_settype) __gthrw_pthread_mutexattr_settype __attribute__ ((__weakref__("pthread_mutexattr_settype")));
-40039: static __typeof(pthread_mutexattr_destroy) __gthrw_pthread_mutexattr_destroy __attribute__ ((__weakref__("pthread_mutexattr_destroy")));
-40039: # 236 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h" 3
-40039: static __typeof(pthread_key_create) __gthrw___pthread_key_create __attribute__ ((__weakref__("__pthread_key_create")));
-40039: # 246 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h" 3
-40039: static inline int
-40039: __gthread_active_p (void)
-40039: {
-40039:   static void *const __gthread_active_ptr
-40039:     = __extension__ (void *) &__gthrw___pthread_key_create;
-40039:   return __gthread_active_ptr != 0;
-40039: }
-40039: # 658 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h" 3
-40039: static inline int
-40039: __gthread_create (__gthread_t *__threadid, void *(*__func) (void*),
-40039:     void *__args)
-40039: {
-40039:   return __gthrw_pthread_create (__threadid, __null, __func, __args);
-40039: }
-40039: 
-40039: static inline int
-40039: __gthread_join (__gthread_t __threadid, void **__value_ptr)
-40039: {
-40039:   return __gthrw_pthread_join (__threadid, __value_ptr);
-40039: }
-40039: 
-40039: static inline int
-40039: __gthread_detach (__gthread_t __threadid)
-40039: {
-40039:   return __gthrw_pthread_detach (__threadid);
-40039: }
-40039: 
-40039: static inline int
-40039: __gthread_equal (__gthread_t __t1, __gthread_t __t2)
-40039: {
-40039:   return __gthrw_pthread_equal (__t1, __t2);
-40039: }
-40039: 
-40039: static inline __gthread_t
-40039: __gthread_self (void)
-40039: {
-40039:   return __gthrw_pthread_self ();
-40039: }
-40039: 
-40039: static inline int
-40039: __gthread_yield (void)
-40039: {
-40039:   return __gthrw_sched_yield ();
-40039: }
-40039: 
-40039: static inline int
-40039: __gthread_once (__gthread_once_t *__once, void (*__func) (void))
-40039: {
-40039:   if (__gthread_active_p ())
-40039:     return __gthrw_pthread_once (__once, __func);
-40039:   else
-40039:     return -1;
-40039: }
-40039: 
-40039: static inline int
-40039: __gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *))
-40039: {
-40039:   return __gthrw_pthread_key_create (__key, __dtor);
-40039: }
-40039: 
-40039: static inline int
-40039: __gthread_key_delete (__gthread_key_t __key)
-40039: {
-40039:   return __gthrw_pthread_key_delete (__key);
-40039: }
-40039: 
-40039: static inline void *
-40039: __gthread_getspecific (__gthread_key_t __key)
-40039: {
-40039:   return __gthrw_pthread_getspecific (__key);
-40039: }
-40039: 
-40039: static inline int
-40039: __gthread_setspecific (__gthread_key_t __key, const void *__ptr)
-40039: {
-40039:   return __gthrw_pthread_setspecific (__key, __ptr);
-40039: }
-40039: 
-40039: static inline void
-40039: __gthread_mutex_init_function (__gthread_mutex_t *__mutex)
-40039: {
-40039:   if (__gthread_active_p ())
-40039:     __gthrw_pthread_mutex_init (__mutex, __null);
-40039: }
-40039: 
-40039: static inline int
-40039: __gthread_mutex_destroy (__gthread_mutex_t *__mutex)
-40039: {
-40039:   if (__gthread_active_p ())
-40039:     return __gthrw_pthread_mutex_destroy (__mutex);
-40039:   else
-40039:     return 0;
-40039: }
-40039: 
-40039: static inline int
-40039: __gthread_mutex_lock (__gthread_mutex_t *__mutex)
-40039: {
-40039:   if (__gthread_active_p ())
-40039:     return __gthrw_pthread_mutex_lock (__mutex);
-40039:   else
-40039:     return 0;
-40039: }
-40039: 
-40039: static inline int
-40039: __gthread_mutex_trylock (__gthread_mutex_t *__mutex)
-40039: {
-40039:   if (__gthread_active_p ())
-40039:     return __gthrw_pthread_mutex_trylock (__mutex);
-40039:   else
-40039:     return 0;
-40039: }
-40039: 
-40039: 
-40039: static inline int
-40039: __gthread_mutex_timedlock (__gthread_mutex_t *__mutex,
-40039:       const __gthread_time_t *__abs_timeout)
-40039: {
-40039:   if (__gthread_active_p ())
-40039:     return __gthrw_pthread_mutex_timedlock (__mutex, __abs_timeout);
-40039:   else
-40039:     return 0;
-40039: }
-40039: 
-40039: 
-40039: static inline int
-40039: __gthread_mutex_unlock (__gthread_mutex_t *__mutex)
-40039: {
-40039:   if (__gthread_active_p ())
-40039:     return __gthrw_pthread_mutex_unlock (__mutex);
-40039:   else
-40039:     return 0;
-40039: }
-40039: # 807 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h" 3
-40039: static inline int
-40039: __gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex)
-40039: {
-40039:   return __gthread_mutex_lock (__mutex);
-40039: }
-40039: 
-40039: static inline int
-40039: __gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex)
-40039: {
-40039:   return __gthread_mutex_trylock (__mutex);
-40039: }
-40039: 
-40039: 
-40039: static inline int
-40039: __gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *__mutex,
-40039:          const __gthread_time_t *__abs_timeout)
-40039: {
-40039:   return __gthread_mutex_timedlock (__mutex, __abs_timeout);
-40039: }
-40039: 
-40039: 
-40039: static inline int
-40039: __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
-40039: {
-40039:   return __gthread_mutex_unlock (__mutex);
-40039: }
-40039: 
-40039: static inline int
-40039: __gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
-40039: {
-40039:   return __gthread_mutex_destroy (__mutex);
-40039: }
-40039: # 849 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h" 3
-40039: static inline int
-40039: __gthread_cond_broadcast (__gthread_cond_t *__cond)
-40039: {
-40039:   return __gthrw_pthread_cond_broadcast (__cond);
-40039: }
-40039: 
-40039: static inline int
-40039: __gthread_cond_signal (__gthread_cond_t *__cond)
-40039: {
-40039:   return __gthrw_pthread_cond_signal (__cond);
-40039: }
-40039: 
-40039: static inline int
-40039: __gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex)
-40039: {
-40039:   return __gthrw_pthread_cond_wait (__cond, __mutex);
-40039: }
-40039: 
-40039: static inline int
-40039: __gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex,
-40039:      const __gthread_time_t *__abs_timeout)
-40039: {
-40039:   return __gthrw_pthread_cond_timedwait (__cond, __mutex, __abs_timeout);
-40039: }
-40039: 
-40039: static inline int
-40039: __gthread_cond_wait_recursive (__gthread_cond_t *__cond,
-40039:           __gthread_recursive_mutex_t *__mutex)
-40039: {
-40039:   return __gthread_cond_wait (__cond, __mutex);
-40039: }
-40039: 
-40039: static inline int
-40039: __gthread_cond_destroy (__gthread_cond_t* __cond)
-40039: {
-40039:   return __gthrw_pthread_cond_destroy (__cond);
-40039: }
-40039: # 149 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr.h" 2 3
-40039: 
-40039: 
-40039: #pragma GCC visibility pop
-40039: # 36 "/usr/include/c++/8/ext/atomicity.h" 2 3
-40039: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/atomic_word.h" 1 3
-40039: # 32 "/usr/include/x86_64-linux-gnu/c++/8/bits/atomic_word.h" 3
-40039: typedef int _Atomic_word;
-40039: # 37 "/usr/include/c++/8/ext/atomicity.h" 2 3
-40039: 
-40039: namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static inline _Atomic_word
-40039:   __exchange_and_add(volatile _Atomic_word* __mem, int __val)
-40039:   { return __atomic_fetch_add(__mem, __val, 4); }
-40039: 
-40039:   static inline void
-40039:   __atomic_add(volatile _Atomic_word* __mem, int __val)
-40039:   { __atomic_fetch_add(__mem, __val, 4); }
-40039: # 64 "/usr/include/c++/8/ext/atomicity.h" 3
-40039:   static inline _Atomic_word
-40039:   __exchange_and_add_single(_Atomic_word* __mem, int __val)
-40039:   {
-40039:     _Atomic_word __result = *__mem;
-40039:     *__mem += __val;
-40039:     return __result;
-40039:   }
-40039: 
-40039:   static inline void
-40039:   __atomic_add_single(_Atomic_word* __mem, int __val)
-40039:   { *__mem += __val; }
-40039: 
-40039:   static inline _Atomic_word
-40039:   __attribute__ ((__unused__))
-40039:   __exchange_and_add_dispatch(_Atomic_word* __mem, int __val)
-40039:   {
-40039: 
-40039:     if (__gthread_active_p())
-40039:       return __exchange_and_add(__mem, __val);
-40039:     else
-40039:       return __exchange_and_add_single(__mem, __val);
-40039: 
-40039: 
-40039: 
-40039:   }
-40039: 
-40039:   static inline void
-40039:   __attribute__ ((__unused__))
-40039:   __atomic_add_dispatch(_Atomic_word* __mem, int __val)
-40039:   {
-40039: 
-40039:     if (__gthread_active_p())
-40039:       __atomic_add(__mem, __val);
-40039:     else
-40039:       __atomic_add_single(__mem, __val);
-40039: 
-40039: 
-40039: 
-40039:   }
-40039: 
-40039: 
-40039: }
-40039: # 40 "/usr/include/c++/8/bits/basic_string.h" 2 3
-40039: # 52 "/usr/include/c++/8/bits/basic_string.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: namespace __cxx11 {
-40039: # 76 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     class basic_string
-40039:     {
-40039:       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
-40039:  rebind<_CharT>::other _Char_alloc_type;
-40039:       typedef __gnu_cxx::__alloc_traits<_Char_alloc_type> _Alloc_traits;
-40039: 
-40039: 
-40039:     public:
-40039:       typedef _Traits traits_type;
-40039:       typedef typename _Traits::char_type value_type;
-40039:       typedef _Char_alloc_type allocator_type;
-40039:       typedef typename _Alloc_traits::size_type size_type;
-40039:       typedef typename _Alloc_traits::difference_type difference_type;
-40039:       typedef typename _Alloc_traits::reference reference;
-40039:       typedef typename _Alloc_traits::const_reference const_reference;
-40039:       typedef typename _Alloc_traits::pointer pointer;
-40039:       typedef typename _Alloc_traits::const_pointer const_pointer;
-40039:       typedef __gnu_cxx::__normal_iterator<pointer, basic_string> iterator;
-40039:       typedef __gnu_cxx::__normal_iterator<const_pointer, basic_string>
-40039:        const_iterator;
-40039:       typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
-40039:       typedef std::reverse_iterator<iterator> reverse_iterator;
-40039: 
-40039: 
-40039:       static const size_type npos = static_cast<size_type>(-1);
-40039: 
-40039:     private:
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       typedef const_iterator __const_iterator;
-40039: # 139 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       struct _Alloc_hider : allocator_type
-40039:       {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  _Alloc_hider(pointer __dat, const _Alloc& __a)
-40039:  : allocator_type(__a), _M_p(__dat) { }
-40039: 
-40039:  _Alloc_hider(pointer __dat, _Alloc&& __a = _Alloc())
-40039:  : allocator_type(std::move(__a)), _M_p(__dat) { }
-40039: 
-40039: 
-40039:  pointer _M_p;
-40039:       };
-40039: 
-40039:       _Alloc_hider _M_dataplus;
-40039:       size_type _M_string_length;
-40039: 
-40039:       enum { _S_local_capacity = 15 / sizeof(_CharT) };
-40039: 
-40039:       union
-40039:       {
-40039:  _CharT _M_local_buf[_S_local_capacity + 1];
-40039:  size_type _M_allocated_capacity;
-40039:       };
-40039: 
-40039:       void
-40039:       _M_data(pointer __p)
-40039:       { _M_dataplus._M_p = __p; }
-40039: 
-40039:       void
-40039:       _M_length(size_type __length)
-40039:       { _M_string_length = __length; }
-40039: 
-40039:       pointer
-40039:       _M_data() const
-40039:       { return _M_dataplus._M_p; }
-40039: 
-40039:       pointer
-40039:       _M_local_data()
-40039:       {
-40039: 
-40039:  return std::pointer_traits<pointer>::pointer_to(*_M_local_buf);
-40039: 
-40039: 
-40039: 
-40039:       }
-40039: 
-40039:       const_pointer
-40039:       _M_local_data() const
-40039:       {
-40039: 
-40039:  return std::pointer_traits<const_pointer>::pointer_to(*_M_local_buf);
-40039: 
-40039: 
-40039: 
-40039:       }
-40039: 
-40039:       void
-40039:       _M_capacity(size_type __capacity)
-40039:       { _M_allocated_capacity = __capacity; }
-40039: 
-40039:       void
-40039:       _M_set_length(size_type __n)
-40039:       {
-40039:  _M_length(__n);
-40039:  traits_type::assign(_M_data()[__n], _CharT());
-40039:       }
-40039: 
-40039:       bool
-40039:       _M_is_local() const
-40039:       { return _M_data() == _M_local_data(); }
-40039: 
-40039: 
-40039:       pointer
-40039:       _M_create(size_type&, size_type);
-40039: 
-40039:       void
-40039:       _M_dispose()
-40039:       {
-40039:  if (!_M_is_local())
-40039:    _M_destroy(_M_allocated_capacity);
-40039:       }
-40039: 
-40039:       void
-40039:       _M_destroy(size_type __size) throw()
-40039:       { _Alloc_traits::deallocate(_M_get_allocator(), _M_data(), __size + 1); }
-40039: 
-40039: 
-40039: 
-40039:       template<typename _InIterator>
-40039:         void
-40039:         _M_construct_aux(_InIterator __beg, _InIterator __end,
-40039:     std::__false_type)
-40039:  {
-40039:           typedef typename iterator_traits<_InIterator>::iterator_category _Tag;
-40039:           _M_construct(__beg, __end, _Tag());
-40039:  }
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Integer>
-40039:         void
-40039:         _M_construct_aux(_Integer __beg, _Integer __end, std::__true_type)
-40039:  { _M_construct_aux_2(static_cast<size_type>(__beg), __end); }
-40039: 
-40039:       void
-40039:       _M_construct_aux_2(size_type __req, _CharT __c)
-40039:       { _M_construct(__req, __c); }
-40039: 
-40039:       template<typename _InIterator>
-40039:         void
-40039:         _M_construct(_InIterator __beg, _InIterator __end)
-40039:  {
-40039:    typedef typename std::__is_integer<_InIterator>::__type _Integral;
-40039:    _M_construct_aux(__beg, __end, _Integral());
-40039:         }
-40039: 
-40039: 
-40039:       template<typename _InIterator>
-40039:         void
-40039:         _M_construct(_InIterator __beg, _InIterator __end,
-40039:        std::input_iterator_tag);
-40039: 
-40039: 
-40039: 
-40039:       template<typename _FwdIterator>
-40039:         void
-40039:         _M_construct(_FwdIterator __beg, _FwdIterator __end,
-40039:        std::forward_iterator_tag);
-40039: 
-40039:       void
-40039:       _M_construct(size_type __req, _CharT __c);
-40039: 
-40039:       allocator_type&
-40039:       _M_get_allocator()
-40039:       { return _M_dataplus; }
-40039: 
-40039:       const allocator_type&
-40039:       _M_get_allocator() const
-40039:       { return _M_dataplus; }
-40039: 
-40039:     private:
-40039: # 298 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       _M_check(size_type __pos, const char* __s) const
-40039:       {
-40039:  if (__pos > this->size())
-40039:    __throw_out_of_range_fmt(("%s: __pos (which is %zu) > " "this->size() (which is %zu)")
-40039:                                          ,
-40039:        __s, __pos, this->size());
-40039:  return __pos;
-40039:       }
-40039: 
-40039:       void
-40039:       _M_check_length(size_type __n1, size_type __n2, const char* __s) const
-40039:       {
-40039:  if (this->max_size() - (this->size() - __n1) < __n2)
-40039:    __throw_length_error((__s));
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       size_type
-40039:       _M_limit(size_type __pos, size_type __off) const noexcept
-40039:       {
-40039:  const bool __testoff = __off < this->size() - __pos;
-40039:  return __testoff ? __off : this->size() - __pos;
-40039:       }
-40039: 
-40039: 
-40039:       bool
-40039:       _M_disjunct(const _CharT* __s) const noexcept
-40039:       {
-40039:  return (less<const _CharT*>()(__s, _M_data())
-40039:   || less<const _CharT*>()(_M_data() + this->size(), __s));
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       static void
-40039:       _S_copy(_CharT* __d, const _CharT* __s, size_type __n)
-40039:       {
-40039:  if (__n == 1)
-40039:    traits_type::assign(*__d, *__s);
-40039:  else
-40039:    traits_type::copy(__d, __s, __n);
-40039:       }
-40039: 
-40039:       static void
-40039:       _S_move(_CharT* __d, const _CharT* __s, size_type __n)
-40039:       {
-40039:  if (__n == 1)
-40039:    traits_type::assign(*__d, *__s);
-40039:  else
-40039:    traits_type::move(__d, __s, __n);
-40039:       }
-40039: 
-40039:       static void
-40039:       _S_assign(_CharT* __d, size_type __n, _CharT __c)
-40039:       {
-40039:  if (__n == 1)
-40039:    traits_type::assign(*__d, __c);
-40039:  else
-40039:    traits_type::assign(__d, __n, __c);
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       template<class _Iterator>
-40039:         static void
-40039:         _S_copy_chars(_CharT* __p, _Iterator __k1, _Iterator __k2)
-40039:         {
-40039:    for (; __k1 != __k2; ++__k1, (void)++__p)
-40039:      traits_type::assign(*__p, *__k1);
-40039:  }
-40039: 
-40039:       static void
-40039:       _S_copy_chars(_CharT* __p, iterator __k1, iterator __k2) noexcept
-40039:       { _S_copy_chars(__p, __k1.base(), __k2.base()); }
-40039: 
-40039:       static void
-40039:       _S_copy_chars(_CharT* __p, const_iterator __k1, const_iterator __k2)
-40039:       noexcept
-40039:       { _S_copy_chars(__p, __k1.base(), __k2.base()); }
-40039: 
-40039:       static void
-40039:       _S_copy_chars(_CharT* __p, _CharT* __k1, _CharT* __k2) noexcept
-40039:       { _S_copy(__p, __k1, __k2 - __k1); }
-40039: 
-40039:       static void
-40039:       _S_copy_chars(_CharT* __p, const _CharT* __k1, const _CharT* __k2)
-40039:       noexcept
-40039:       { _S_copy(__p, __k1, __k2 - __k1); }
-40039: 
-40039:       static int
-40039:       _S_compare(size_type __n1, size_type __n2) noexcept
-40039:       {
-40039:  const difference_type __d = difference_type(__n1 - __n2);
-40039: 
-40039:  if (__d > __gnu_cxx::__numeric_traits<int>::__max)
-40039:    return __gnu_cxx::__numeric_traits<int>::__max;
-40039:  else if (__d < __gnu_cxx::__numeric_traits<int>::__min)
-40039:    return __gnu_cxx::__numeric_traits<int>::__min;
-40039:  else
-40039:    return int(__d);
-40039:       }
-40039: 
-40039:       void
-40039:       _M_assign(const basic_string&);
-40039: 
-40039:       void
-40039:       _M_mutate(size_type __pos, size_type __len1, const _CharT* __s,
-40039:   size_type __len2);
-40039: 
-40039:       void
-40039:       _M_erase(size_type __pos, size_type __n);
-40039: 
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       basic_string()
-40039:       noexcept(is_nothrow_default_constructible<_Alloc>::value)
-40039:       : _M_dataplus(_M_local_data())
-40039:       { _M_set_length(0); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       explicit
-40039:       basic_string(const _Alloc& __a) noexcept
-40039:       : _M_dataplus(_M_local_data(), __a)
-40039:       { _M_set_length(0); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       basic_string(const basic_string& __str)
-40039:       : _M_dataplus(_M_local_data(),
-40039:       _Alloc_traits::_S_select_on_copy(__str._M_get_allocator()))
-40039:       { _M_construct(__str._M_data(), __str._M_data() + __str.length()); }
-40039: # 450 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string(const basic_string& __str, size_type __pos,
-40039:      const _Alloc& __a = _Alloc())
-40039:       : _M_dataplus(_M_local_data(), __a)
-40039:       {
-40039:  const _CharT* __start = __str._M_data()
-40039:    + __str._M_check(__pos, "basic_string::basic_string");
-40039:  _M_construct(__start, __start + __str._M_limit(__pos, npos));
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       basic_string(const basic_string& __str, size_type __pos,
-40039:      size_type __n)
-40039:       : _M_dataplus(_M_local_data())
-40039:       {
-40039:  const _CharT* __start = __str._M_data()
-40039:    + __str._M_check(__pos, "basic_string::basic_string");
-40039:  _M_construct(__start, __start + __str._M_limit(__pos, __n));
-40039:       }
-40039: # 481 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string(const basic_string& __str, size_type __pos,
-40039:      size_type __n, const _Alloc& __a)
-40039:       : _M_dataplus(_M_local_data(), __a)
-40039:       {
-40039:  const _CharT* __start
-40039:    = __str._M_data() + __str._M_check(__pos, "string::string");
-40039:  _M_construct(__start, __start + __str._M_limit(__pos, __n));
-40039:       }
-40039: # 499 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string(const _CharT* __s, size_type __n,
-40039:      const _Alloc& __a = _Alloc())
-40039:       : _M_dataplus(_M_local_data(), __a)
-40039:       { _M_construct(__s, __s + __n); }
-40039: # 514 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
-40039:       : _M_dataplus(_M_local_data(), __a)
-40039:       { _M_construct(__s, __s ? __s + traits_type::length(__s) : __s+npos); }
-40039: # 529 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
-40039:       : _M_dataplus(_M_local_data(), __a)
-40039:       { _M_construct(__n, __c); }
-40039: # 541 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string(basic_string&& __str) noexcept
-40039:       : _M_dataplus(_M_local_data(), std::move(__str._M_get_allocator()))
-40039:       {
-40039:  if (__str._M_is_local())
-40039:    {
-40039:      traits_type::copy(_M_local_buf, __str._M_local_buf,
-40039:          _S_local_capacity + 1);
-40039:    }
-40039:  else
-40039:    {
-40039:      _M_data(__str._M_data());
-40039:      _M_capacity(__str._M_allocated_capacity);
-40039:    }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  _M_length(__str.length());
-40039:  __str._M_data(__str._M_local_data());
-40039:  __str._M_set_length(0);
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
-40039:       : _M_dataplus(_M_local_data(), __a)
-40039:       { _M_construct(__l.begin(), __l.end()); }
-40039: 
-40039:       basic_string(const basic_string& __str, const _Alloc& __a)
-40039:       : _M_dataplus(_M_local_data(), __a)
-40039:       { _M_construct(__str.begin(), __str.end()); }
-40039: 
-40039:       basic_string(basic_string&& __str, const _Alloc& __a)
-40039:       noexcept(_Alloc_traits::_S_always_equal())
-40039:       : _M_dataplus(_M_local_data(), __a)
-40039:       {
-40039:  if (__str._M_is_local())
-40039:    {
-40039:      traits_type::copy(_M_local_buf, __str._M_local_buf,
-40039:          _S_local_capacity + 1);
-40039:      _M_length(__str.length());
-40039:      __str._M_set_length(0);
-40039:    }
-40039:  else if (_Alloc_traits::_S_always_equal()
-40039:      || __str.get_allocator() == __a)
-40039:    {
-40039:      _M_data(__str._M_data());
-40039:      _M_length(__str.length());
-40039:      _M_capacity(__str._M_allocated_capacity);
-40039:      __str._M_data(__str._M_local_buf);
-40039:      __str._M_set_length(0);
-40039:    }
-40039:  else
-40039:    _M_construct(__str.begin(), __str.end());
-40039:       }
-40039: # 609 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       template<typename _InputIterator,
-40039:         typename = std::_RequireInputIter<_InputIterator>>
-40039: 
-40039: 
-40039: 
-40039:         basic_string(_InputIterator __beg, _InputIterator __end,
-40039:        const _Alloc& __a = _Alloc())
-40039:  : _M_dataplus(_M_local_data(), __a)
-40039:  { _M_construct(__beg, __end); }
-40039: # 656 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       ~basic_string()
-40039:       { _M_dispose(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       basic_string&
-40039:       operator=(const basic_string& __str)
-40039:       {
-40039: 
-40039:  if (_Alloc_traits::_S_propagate_on_copy_assign())
-40039:    {
-40039:      if (!_Alloc_traits::_S_always_equal() && !_M_is_local()
-40039:   && _M_get_allocator() != __str._M_get_allocator())
-40039:        {
-40039: 
-40039: 
-40039:   if (__str.size() <= _S_local_capacity)
-40039:     {
-40039:       _M_destroy(_M_allocated_capacity);
-40039:       _M_data(_M_local_data());
-40039:       _M_set_length(0);
-40039:     }
-40039:   else
-40039:     {
-40039:       const auto __len = __str.size();
-40039:       auto __alloc = __str._M_get_allocator();
-40039: 
-40039:       auto __ptr = _Alloc_traits::allocate(__alloc, __len + 1);
-40039:       _M_destroy(_M_allocated_capacity);
-40039:       _M_data(__ptr);
-40039:       _M_capacity(__len);
-40039:       _M_set_length(__len);
-40039:     }
-40039:        }
-40039:      std::__alloc_on_copy(_M_get_allocator(), __str._M_get_allocator());
-40039:    }
-40039: 
-40039:  return this->assign(__str);
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       basic_string&
-40039:       operator=(const _CharT* __s)
-40039:       { return this->assign(__s); }
-40039: # 713 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       operator=(_CharT __c)
-40039:       {
-40039:  this->assign(1, __c);
-40039:  return *this;
-40039:       }
-40039: # 731 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       operator=(basic_string&& __str)
-40039:       noexcept(_Alloc_traits::_S_nothrow_move())
-40039:       {
-40039:  if (!_M_is_local() && _Alloc_traits::_S_propagate_on_move_assign()
-40039:      && !_Alloc_traits::_S_always_equal()
-40039:      && _M_get_allocator() != __str._M_get_allocator())
-40039:    {
-40039: 
-40039:      _M_destroy(_M_allocated_capacity);
-40039:      _M_data(_M_local_data());
-40039:      _M_set_length(0);
-40039:    }
-40039: 
-40039:  std::__alloc_on_move(_M_get_allocator(), __str._M_get_allocator());
-40039: 
-40039:  if (__str._M_is_local())
-40039:    {
-40039: 
-40039:      if (__str.size())
-40039:        this->_S_copy(_M_data(), __str._M_data(), __str.size());
-40039:      _M_set_length(__str.size());
-40039:    }
-40039:  else if (_Alloc_traits::_S_propagate_on_move_assign()
-40039:      || _Alloc_traits::_S_always_equal()
-40039:      || _M_get_allocator() == __str._M_get_allocator())
-40039:    {
-40039: 
-40039:      pointer __data = nullptr;
-40039:      size_type __capacity;
-40039:      if (!_M_is_local())
-40039:        {
-40039:   if (_Alloc_traits::_S_always_equal())
-40039:     {
-40039: 
-40039:       __data = _M_data();
-40039:       __capacity = _M_allocated_capacity;
-40039:     }
-40039:   else
-40039:     _M_destroy(_M_allocated_capacity);
-40039:        }
-40039: 
-40039:      _M_data(__str._M_data());
-40039:      _M_length(__str.length());
-40039:      _M_capacity(__str._M_allocated_capacity);
-40039:      if (__data)
-40039:        {
-40039:   __str._M_data(__data);
-40039:   __str._M_capacity(__capacity);
-40039:        }
-40039:      else
-40039:        __str._M_data(__str._M_local_buf);
-40039:    }
-40039:  else
-40039:    assign(__str);
-40039:  __str.clear();
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       basic_string&
-40039:       operator=(initializer_list<_CharT> __l)
-40039:       {
-40039:  this->assign(__l.begin(), __l.size());
-40039:  return *this;
-40039:       }
-40039: # 825 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       iterator
-40039:       begin() noexcept
-40039:       { return iterator(_M_data()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       begin() const noexcept
-40039:       { return const_iterator(_M_data()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       end() noexcept
-40039:       { return iterator(_M_data() + this->size()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       end() const noexcept
-40039:       { return const_iterator(_M_data() + this->size()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       rbegin() noexcept
-40039:       { return reverse_iterator(this->end()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       rbegin() const noexcept
-40039:       { return const_reverse_iterator(this->end()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       rend() noexcept
-40039:       { return reverse_iterator(this->begin()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       rend() const noexcept
-40039:       { return const_reverse_iterator(this->begin()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       cbegin() const noexcept
-40039:       { return const_iterator(this->_M_data()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       cend() const noexcept
-40039:       { return const_iterator(this->_M_data() + this->size()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       crbegin() const noexcept
-40039:       { return const_reverse_iterator(this->end()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       crend() const noexcept
-40039:       { return const_reverse_iterator(this->begin()); }
-40039: 
-40039: 
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039:       size_type
-40039:       size() const noexcept
-40039:       { return _M_string_length; }
-40039: 
-40039: 
-40039: 
-40039:       size_type
-40039:       length() const noexcept
-40039:       { return _M_string_length; }
-40039: 
-40039: 
-40039:       size_type
-40039:       max_size() const noexcept
-40039:       { return (_Alloc_traits::max_size(_M_get_allocator()) - 1) / 2; }
-40039: # 954 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       void
-40039:       resize(size_type __n, _CharT __c);
-40039: # 967 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       void
-40039:       resize(size_type __n)
-40039:       { this->resize(__n, _CharT()); }
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       shrink_to_fit() noexcept
-40039:       {
-40039: 
-40039:  if (capacity() > size())
-40039:    {
-40039:      try
-40039:        { reserve(0); }
-40039:      catch(...)
-40039:        { }
-40039:    }
-40039: 
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       size_type
-40039:       capacity() const noexcept
-40039:       {
-40039:  return _M_is_local() ? size_type(_S_local_capacity)
-40039:                       : _M_allocated_capacity;
-40039:       }
-40039: # 1016 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       void
-40039:       reserve(size_type __res_arg = 0);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       clear() noexcept
-40039:       { _M_set_length(0); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       bool
-40039:       empty() const noexcept
-40039:       { return this->size() == 0; }
-40039: # 1045 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       const_reference
-40039:       operator[] (size_type __pos) const noexcept
-40039:       {
-40039:  ;
-40039:  return _M_data()[__pos];
-40039:       }
-40039: # 1062 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       reference
-40039:       operator[](size_type __pos)
-40039:       {
-40039: 
-40039: 
-40039:  ;
-40039: 
-40039:  ;
-40039:  return _M_data()[__pos];
-40039:       }
-40039: # 1083 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       const_reference
-40039:       at(size_type __n) const
-40039:       {
-40039:  if (__n >= this->size())
-40039:    __throw_out_of_range_fmt(("basic_string::at: __n " "(which is %zu) >= this->size() " "(which is %zu)")
-40039: 
-40039:                             ,
-40039:        __n, this->size());
-40039:  return _M_data()[__n];
-40039:       }
-40039: # 1104 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       reference
-40039:       at(size_type __n)
-40039:       {
-40039:  if (__n >= size())
-40039:    __throw_out_of_range_fmt(("basic_string::at: __n " "(which is %zu) >= this->size() " "(which is %zu)")
-40039: 
-40039:                             ,
-40039:        __n, this->size());
-40039:  return _M_data()[__n];
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reference
-40039:       front() noexcept
-40039:       {
-40039:  ;
-40039:  return operator[](0);
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reference
-40039:       front() const noexcept
-40039:       {
-40039:  ;
-40039:  return operator[](0);
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reference
-40039:       back() noexcept
-40039:       {
-40039:  ;
-40039:  return operator[](this->size() - 1);
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reference
-40039:       back() const noexcept
-40039:       {
-40039:  ;
-40039:  return operator[](this->size() - 1);
-40039:       }
-40039: # 1167 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       operator+=(const basic_string& __str)
-40039:       { return this->append(__str); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       basic_string&
-40039:       operator+=(const _CharT* __s)
-40039:       { return this->append(__s); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       basic_string&
-40039:       operator+=(_CharT __c)
-40039:       {
-40039:  this->push_back(__c);
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       basic_string&
-40039:       operator+=(initializer_list<_CharT> __l)
-40039:       { return this->append(__l.begin(), __l.size()); }
-40039: # 1220 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       append(const basic_string& __str)
-40039:       { return _M_append(__str._M_data(), __str.size()); }
-40039: # 1237 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       append(const basic_string& __str, size_type __pos, size_type __n = npos)
-40039:       { return _M_append(__str._M_data()
-40039:     + __str._M_check(__pos, "basic_string::append"),
-40039:     __str._M_limit(__pos, __n)); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       basic_string&
-40039:       append(const _CharT* __s, size_type __n)
-40039:       {
-40039:  ;
-40039:  _M_check_length(size_type(0), __n, "basic_string::append");
-40039:  return _M_append(__s, __n);
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       basic_string&
-40039:       append(const _CharT* __s)
-40039:       {
-40039:  ;
-40039:  const size_type __n = traits_type::length(__s);
-40039:  _M_check_length(size_type(0), __n, "basic_string::append");
-40039:  return _M_append(__s, __n);
-40039:       }
-40039: # 1279 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       append(size_type __n, _CharT __c)
-40039:       { return _M_replace_aux(this->size(), size_type(0), __n, __c); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       basic_string&
-40039:       append(initializer_list<_CharT> __l)
-40039:       { return this->append(__l.begin(), __l.size()); }
-40039: # 1303 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       template<class _InputIterator,
-40039:         typename = std::_RequireInputIter<_InputIterator>>
-40039: 
-40039: 
-40039: 
-40039:         basic_string&
-40039:         append(_InputIterator __first, _InputIterator __last)
-40039:         { return this->replace(end(), end(), __first, __last); }
-40039: # 1348 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       void
-40039:       push_back(_CharT __c)
-40039:       {
-40039:  const size_type __size = this->size();
-40039:  if (__size + 1 > this->capacity())
-40039:    this->_M_mutate(__size, size_type(0), 0, size_type(1));
-40039:  traits_type::assign(this->_M_data()[__size], __c);
-40039:  this->_M_set_length(__size + 1);
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       basic_string&
-40039:       assign(const basic_string& __str)
-40039:       {
-40039:  this->_M_assign(__str);
-40039:  return *this;
-40039:       }
-40039: # 1379 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       assign(basic_string&& __str)
-40039:       noexcept(_Alloc_traits::_S_nothrow_move())
-40039:       {
-40039: 
-40039: 
-40039:  return *this = std::move(__str);
-40039:       }
-40039: # 1402 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       assign(const basic_string& __str, size_type __pos, size_type __n = npos)
-40039:       { return _M_replace(size_type(0), this->size(), __str._M_data()
-40039:      + __str._M_check(__pos, "basic_string::assign"),
-40039:      __str._M_limit(__pos, __n)); }
-40039: # 1418 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       assign(const _CharT* __s, size_type __n)
-40039:       {
-40039:  ;
-40039:  return _M_replace(size_type(0), this->size(), __s, __n);
-40039:       }
-40039: # 1434 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       assign(const _CharT* __s)
-40039:       {
-40039:  ;
-40039:  return _M_replace(size_type(0), this->size(), __s,
-40039:      traits_type::length(__s));
-40039:       }
-40039: # 1451 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       assign(size_type __n, _CharT __c)
-40039:       { return _M_replace_aux(size_type(0), this->size(), __n, __c); }
-40039: # 1464 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       template<class _InputIterator,
-40039:         typename = std::_RequireInputIter<_InputIterator>>
-40039: 
-40039: 
-40039: 
-40039:         basic_string&
-40039:         assign(_InputIterator __first, _InputIterator __last)
-40039:         { return this->replace(begin(), end(), __first, __last); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       basic_string&
-40039:       assign(initializer_list<_CharT> __l)
-40039:       { return this->assign(__l.begin(), __l.size()); }
-40039: # 1532 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       iterator
-40039:       insert(const_iterator __p, size_type __n, _CharT __c)
-40039:       {
-40039:  ;
-40039:  const size_type __pos = __p - begin();
-40039:  this->replace(__p, __p, __n, __c);
-40039:  return iterator(this->_M_data() + __pos);
-40039:       }
-40039: # 1574 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       template<class _InputIterator,
-40039:         typename = std::_RequireInputIter<_InputIterator>>
-40039:  iterator
-40039:         insert(const_iterator __p, _InputIterator __beg, _InputIterator __end)
-40039:         {
-40039:    ;
-40039:    const size_type __pos = __p - begin();
-40039:    this->replace(__p, __p, __beg, __end);
-40039:    return iterator(this->_M_data() + __pos);
-40039:  }
-40039: # 1610 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       void
-40039:       insert(iterator __p, initializer_list<_CharT> __l)
-40039:       {
-40039:  ;
-40039:  this->insert(__p - begin(), __l.begin(), __l.size());
-40039:       }
-40039: # 1630 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       insert(size_type __pos1, const basic_string& __str)
-40039:       { return this->replace(__pos1, size_type(0),
-40039:         __str._M_data(), __str.size()); }
-40039: # 1653 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       insert(size_type __pos1, const basic_string& __str,
-40039:       size_type __pos2, size_type __n = npos)
-40039:       { return this->replace(__pos1, size_type(0), __str._M_data()
-40039:         + __str._M_check(__pos2, "basic_string::insert"),
-40039:         __str._M_limit(__pos2, __n)); }
-40039: # 1676 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       insert(size_type __pos, const _CharT* __s, size_type __n)
-40039:       { return this->replace(__pos, size_type(0), __s, __n); }
-40039: # 1695 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       insert(size_type __pos, const _CharT* __s)
-40039:       {
-40039:  ;
-40039:  return this->replace(__pos, size_type(0), __s,
-40039:         traits_type::length(__s));
-40039:       }
-40039: # 1719 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       insert(size_type __pos, size_type __n, _CharT __c)
-40039:       { return _M_replace_aux(_M_check(__pos, "basic_string::insert"),
-40039:          size_type(0), __n, __c); }
-40039: # 1737 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       iterator
-40039:       insert(__const_iterator __p, _CharT __c)
-40039:       {
-40039:  ;
-40039:  const size_type __pos = __p - begin();
-40039:  _M_replace_aux(__pos, size_type(0), size_type(1), __c);
-40039:  return iterator(_M_data() + __pos);
-40039:       }
-40039: # 1797 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       erase(size_type __pos = 0, size_type __n = npos)
-40039:       {
-40039:  _M_check(__pos, "basic_string::erase");
-40039:  if (__n == npos)
-40039:    this->_M_set_length(__pos);
-40039:  else if (__n != 0)
-40039:    this->_M_erase(__pos, _M_limit(__pos, __n));
-40039:  return *this;
-40039:       }
-40039: # 1816 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       iterator
-40039:       erase(__const_iterator __position)
-40039:       {
-40039: 
-40039:                            ;
-40039:  const size_type __pos = __position - begin();
-40039:  this->_M_erase(__pos, size_type(1));
-40039:  return iterator(_M_data() + __pos);
-40039:       }
-40039: # 1835 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       iterator
-40039:       erase(__const_iterator __first, __const_iterator __last)
-40039:       {
-40039: 
-40039:                         ;
-40039:         const size_type __pos = __first - begin();
-40039:  if (__last == end())
-40039:    this->_M_set_length(__pos);
-40039:  else
-40039:    this->_M_erase(__pos, __last - __first);
-40039:  return iterator(this->_M_data() + __pos);
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       pop_back() noexcept
-40039:       {
-40039:  ;
-40039:  _M_erase(size() - 1, 1);
-40039:       }
-40039: # 1879 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       replace(size_type __pos, size_type __n, const basic_string& __str)
-40039:       { return this->replace(__pos, __n, __str._M_data(), __str.size()); }
-40039: # 1901 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       replace(size_type __pos1, size_type __n1, const basic_string& __str,
-40039:        size_type __pos2, size_type __n2 = npos)
-40039:       { return this->replace(__pos1, __n1, __str._M_data()
-40039:         + __str._M_check(__pos2, "basic_string::replace"),
-40039:         __str._M_limit(__pos2, __n2)); }
-40039: # 1926 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       replace(size_type __pos, size_type __n1, const _CharT* __s,
-40039:        size_type __n2)
-40039:       {
-40039:  ;
-40039:  return _M_replace(_M_check(__pos, "basic_string::replace"),
-40039:      _M_limit(__pos, __n1), __s, __n2);
-40039:       }
-40039: # 1951 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       replace(size_type __pos, size_type __n1, const _CharT* __s)
-40039:       {
-40039:  ;
-40039:  return this->replace(__pos, __n1, __s, traits_type::length(__s));
-40039:       }
-40039: # 1975 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c)
-40039:       { return _M_replace_aux(_M_check(__pos, "basic_string::replace"),
-40039:          _M_limit(__pos, __n1), __n2, __c); }
-40039: # 1993 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       replace(__const_iterator __i1, __const_iterator __i2,
-40039:        const basic_string& __str)
-40039:       { return this->replace(__i1, __i2, __str._M_data(), __str.size()); }
-40039: # 2013 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       replace(__const_iterator __i1, __const_iterator __i2,
-40039:        const _CharT* __s, size_type __n)
-40039:       {
-40039: 
-40039:                       ;
-40039:  return this->replace(__i1 - begin(), __i2 - __i1, __s, __n);
-40039:       }
-40039: # 2035 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       replace(__const_iterator __i1, __const_iterator __i2, const _CharT* __s)
-40039:       {
-40039:  ;
-40039:  return this->replace(__i1, __i2, __s, traits_type::length(__s));
-40039:       }
-40039: # 2056 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       replace(__const_iterator __i1, __const_iterator __i2, size_type __n,
-40039:        _CharT __c)
-40039:       {
-40039: 
-40039:                       ;
-40039:  return _M_replace_aux(__i1 - begin(), __i2 - __i1, __n, __c);
-40039:       }
-40039: # 2081 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       template<class _InputIterator,
-40039:         typename = std::_RequireInputIter<_InputIterator>>
-40039:         basic_string&
-40039:         replace(const_iterator __i1, const_iterator __i2,
-40039:   _InputIterator __k1, _InputIterator __k2)
-40039:         {
-40039:   
-40039:                         ;
-40039:    ;
-40039:    return this->_M_replace_dispatch(__i1, __i2, __k1, __k2,
-40039:         std::__false_type());
-40039:  }
-40039: # 2113 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string&
-40039:       replace(__const_iterator __i1, __const_iterator __i2,
-40039:        _CharT* __k1, _CharT* __k2)
-40039:       {
-40039: 
-40039:                       ;
-40039:  ;
-40039:  return this->replace(__i1 - begin(), __i2 - __i1,
-40039:         __k1, __k2 - __k1);
-40039:       }
-40039: 
-40039:       basic_string&
-40039:       replace(__const_iterator __i1, __const_iterator __i2,
-40039:        const _CharT* __k1, const _CharT* __k2)
-40039:       {
-40039: 
-40039:                       ;
-40039:  ;
-40039:  return this->replace(__i1 - begin(), __i2 - __i1,
-40039:         __k1, __k2 - __k1);
-40039:       }
-40039: 
-40039:       basic_string&
-40039:       replace(__const_iterator __i1, __const_iterator __i2,
-40039:        iterator __k1, iterator __k2)
-40039:       {
-40039: 
-40039:                       ;
-40039:  ;
-40039:  return this->replace(__i1 - begin(), __i2 - __i1,
-40039:         __k1.base(), __k2 - __k1);
-40039:       }
-40039: 
-40039:       basic_string&
-40039:       replace(__const_iterator __i1, __const_iterator __i2,
-40039:        const_iterator __k1, const_iterator __k2)
-40039:       {
-40039: 
-40039:                       ;
-40039:  ;
-40039:  return this->replace(__i1 - begin(), __i2 - __i1,
-40039:         __k1.base(), __k2 - __k1);
-40039:       }
-40039: # 2172 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string& replace(const_iterator __i1, const_iterator __i2,
-40039:        initializer_list<_CharT> __l)
-40039:       { return this->replace(__i1, __i2, __l.begin(), __l.size()); }
-40039: # 2231 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:     private:
-40039:       template<class _Integer>
-40039:  basic_string&
-40039:  _M_replace_dispatch(const_iterator __i1, const_iterator __i2,
-40039:        _Integer __n, _Integer __val, __true_type)
-40039:         { return _M_replace_aux(__i1 - begin(), __i2 - __i1, __n, __val); }
-40039: 
-40039:       template<class _InputIterator>
-40039:  basic_string&
-40039:  _M_replace_dispatch(const_iterator __i1, const_iterator __i2,
-40039:        _InputIterator __k1, _InputIterator __k2,
-40039:        __false_type);
-40039: 
-40039:       basic_string&
-40039:       _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2,
-40039:        _CharT __c);
-40039: 
-40039:       basic_string&
-40039:       _M_replace(size_type __pos, size_type __len1, const _CharT* __s,
-40039:    const size_type __len2);
-40039: 
-40039:       basic_string&
-40039:       _M_append(const _CharT* __s, size_type __n);
-40039: 
-40039:     public:
-40039: # 2269 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       copy(_CharT* __s, size_type __n, size_type __pos = 0) const;
-40039: # 2279 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       void
-40039:       swap(basic_string& __s) noexcept;
-40039: # 2289 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       const _CharT*
-40039:       c_str() const noexcept
-40039:       { return _M_data(); }
-40039: # 2301 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       const _CharT*
-40039:       data() const noexcept
-40039:       { return _M_data(); }
-40039: # 2320 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       allocator_type
-40039:       get_allocator() const noexcept
-40039:       { return _M_get_allocator(); }
-40039: # 2336 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       find(const _CharT* __s, size_type __pos, size_type __n) const
-40039:       noexcept;
-40039: # 2350 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       find(const basic_string& __str, size_type __pos = 0) const
-40039:       noexcept
-40039:       { return this->find(__str.data(), __pos, __str.size()); }
-40039: # 2382 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       find(const _CharT* __s, size_type __pos = 0) const noexcept
-40039:       {
-40039:  ;
-40039:  return this->find(__s, __pos, traits_type::length(__s));
-40039:       }
-40039: # 2399 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       find(_CharT __c, size_type __pos = 0) const noexcept;
-40039: # 2412 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       rfind(const basic_string& __str, size_type __pos = npos) const
-40039:       noexcept
-40039:       { return this->rfind(__str.data(), __pos, __str.size()); }
-40039: # 2446 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       rfind(const _CharT* __s, size_type __pos, size_type __n) const
-40039:       noexcept;
-40039: # 2460 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       rfind(const _CharT* __s, size_type __pos = npos) const
-40039:       {
-40039:  ;
-40039:  return this->rfind(__s, __pos, traits_type::length(__s));
-40039:       }
-40039: # 2477 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       rfind(_CharT __c, size_type __pos = npos) const noexcept;
-40039: # 2491 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       find_first_of(const basic_string& __str, size_type __pos = 0) const
-40039:       noexcept
-40039:       { return this->find_first_of(__str.data(), __pos, __str.size()); }
-40039: # 2526 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       find_first_of(const _CharT* __s, size_type __pos, size_type __n) const
-40039:       noexcept;
-40039: # 2540 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       find_first_of(const _CharT* __s, size_type __pos = 0) const
-40039:       noexcept
-40039:       {
-40039:  ;
-40039:  return this->find_first_of(__s, __pos, traits_type::length(__s));
-40039:       }
-40039: # 2560 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       find_first_of(_CharT __c, size_type __pos = 0) const noexcept
-40039:       { return this->find(__c, __pos); }
-40039: # 2575 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       find_last_of(const basic_string& __str, size_type __pos = npos) const
-40039:       noexcept
-40039:       { return this->find_last_of(__str.data(), __pos, __str.size()); }
-40039: # 2610 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       find_last_of(const _CharT* __s, size_type __pos, size_type __n) const
-40039:       noexcept;
-40039: # 2624 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       find_last_of(const _CharT* __s, size_type __pos = npos) const
-40039:       noexcept
-40039:       {
-40039:  ;
-40039:  return this->find_last_of(__s, __pos, traits_type::length(__s));
-40039:       }
-40039: # 2644 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       find_last_of(_CharT __c, size_type __pos = npos) const noexcept
-40039:       { return this->rfind(__c, __pos); }
-40039: # 2658 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       find_first_not_of(const basic_string& __str, size_type __pos = 0) const
-40039:       noexcept
-40039:       { return this->find_first_not_of(__str.data(), __pos, __str.size()); }
-40039: # 2693 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       find_first_not_of(const _CharT* __s, size_type __pos,
-40039:    size_type __n) const noexcept;
-40039: # 2707 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       find_first_not_of(const _CharT* __s, size_type __pos = 0) const
-40039:       noexcept
-40039:       {
-40039:  ;
-40039:  return this->find_first_not_of(__s, __pos, traits_type::length(__s));
-40039:       }
-40039: # 2725 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       find_first_not_of(_CharT __c, size_type __pos = 0) const
-40039:       noexcept;
-40039: # 2740 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       find_last_not_of(const basic_string& __str, size_type __pos = npos) const
-40039:       noexcept
-40039:       { return this->find_last_not_of(__str.data(), __pos, __str.size()); }
-40039: # 2775 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       find_last_not_of(const _CharT* __s, size_type __pos,
-40039:          size_type __n) const noexcept;
-40039: # 2789 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       find_last_not_of(const _CharT* __s, size_type __pos = npos) const
-40039:       noexcept
-40039:       {
-40039:  ;
-40039:  return this->find_last_not_of(__s, __pos, traits_type::length(__s));
-40039:       }
-40039: # 2807 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       size_type
-40039:       find_last_not_of(_CharT __c, size_type __pos = npos) const
-40039:       noexcept;
-40039: # 2823 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       basic_string
-40039:       substr(size_type __pos = 0, size_type __n = npos) const
-40039:       { return basic_string(*this,
-40039:        _M_check(__pos, "basic_string::substr"), __n); }
-40039: # 2842 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       int
-40039:       compare(const basic_string& __str) const
-40039:       {
-40039:  const size_type __size = this->size();
-40039:  const size_type __osize = __str.size();
-40039:  const size_type __len = std::min(__size, __osize);
-40039: 
-40039:  int __r = traits_type::compare(_M_data(), __str.data(), __len);
-40039:  if (!__r)
-40039:    __r = _S_compare(__size, __osize);
-40039:  return __r;
-40039:       }
-40039: # 2935 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       int
-40039:       compare(size_type __pos, size_type __n, const basic_string& __str) const;
-40039: # 2961 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       int
-40039:       compare(size_type __pos1, size_type __n1, const basic_string& __str,
-40039:        size_type __pos2, size_type __n2 = npos) const;
-40039: # 2979 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       int
-40039:       compare(const _CharT* __s) const noexcept;
-40039: # 3003 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       int
-40039:       compare(size_type __pos, size_type __n1, const _CharT* __s) const;
-40039: # 3030 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:       int
-40039:       compare(size_type __pos, size_type __n1, const _CharT* __s,
-40039:        size_type __n2) const;
-40039: 
-40039: 
-40039:       template<typename, typename, typename> friend class basic_stringbuf;
-40039:     };
-40039: }
-40039: # 5925 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     basic_string<_CharT, _Traits, _Alloc>
-40039:     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
-40039:        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
-40039:     {
-40039:       basic_string<_CharT, _Traits, _Alloc> __str(__lhs);
-40039:       __str.append(__rhs);
-40039:       return __str;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     basic_string<_CharT,_Traits,_Alloc>
-40039:     operator+(const _CharT* __lhs,
-40039:        const basic_string<_CharT,_Traits,_Alloc>& __rhs);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     basic_string<_CharT,_Traits,_Alloc>
-40039:     operator+(_CharT __lhs, const basic_string<_CharT,_Traits,_Alloc>& __rhs);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline basic_string<_CharT, _Traits, _Alloc>
-40039:     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
-40039:        const _CharT* __rhs)
-40039:     {
-40039:       basic_string<_CharT, _Traits, _Alloc> __str(__lhs);
-40039:       __str.append(__rhs);
-40039:       return __str;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline basic_string<_CharT, _Traits, _Alloc>
-40039:     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, _CharT __rhs)
-40039:     {
-40039:       typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
-40039:       typedef typename __string_type::size_type __size_type;
-40039:       __string_type __str(__lhs);
-40039:       __str.append(__size_type(1), __rhs);
-40039:       return __str;
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline basic_string<_CharT, _Traits, _Alloc>
-40039:     operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
-40039:        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
-40039:     { return std::move(__lhs.append(__rhs)); }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline basic_string<_CharT, _Traits, _Alloc>
-40039:     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
-40039:        basic_string<_CharT, _Traits, _Alloc>&& __rhs)
-40039:     { return std::move(__rhs.insert(0, __lhs)); }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline basic_string<_CharT, _Traits, _Alloc>
-40039:     operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
-40039:        basic_string<_CharT, _Traits, _Alloc>&& __rhs)
-40039:     {
-40039:       const auto __size = __lhs.size() + __rhs.size();
-40039:       const bool __cond = (__size > __lhs.capacity()
-40039:       && __size <= __rhs.capacity());
-40039:       return __cond ? std::move(__rhs.insert(0, __lhs))
-40039:              : std::move(__lhs.append(__rhs));
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline basic_string<_CharT, _Traits, _Alloc>
-40039:     operator+(const _CharT* __lhs,
-40039:        basic_string<_CharT, _Traits, _Alloc>&& __rhs)
-40039:     { return std::move(__rhs.insert(0, __lhs)); }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline basic_string<_CharT, _Traits, _Alloc>
-40039:     operator+(_CharT __lhs,
-40039:        basic_string<_CharT, _Traits, _Alloc>&& __rhs)
-40039:     { return std::move(__rhs.insert(0, 1, __lhs)); }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline basic_string<_CharT, _Traits, _Alloc>
-40039:     operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
-40039:        const _CharT* __rhs)
-40039:     { return std::move(__lhs.append(__rhs)); }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline basic_string<_CharT, _Traits, _Alloc>
-40039:     operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
-40039:        _CharT __rhs)
-40039:     { return std::move(__lhs.append(1, __rhs)); }
-40039: # 6046 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline bool
-40039:     operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
-40039:         const basic_string<_CharT, _Traits, _Alloc>& __rhs)
-40039:     noexcept
-40039:     { return __lhs.compare(__rhs) == 0; }
-40039: 
-40039:   template<typename _CharT>
-40039:     inline
-40039:     typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, bool>::__type
-40039:     operator==(const basic_string<_CharT>& __lhs,
-40039:         const basic_string<_CharT>& __rhs) noexcept
-40039:     { return (__lhs.size() == __rhs.size()
-40039:        && !std::char_traits<_CharT>::compare(__lhs.data(), __rhs.data(),
-40039:           __lhs.size())); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline bool
-40039:     operator==(const _CharT* __lhs,
-40039:         const basic_string<_CharT, _Traits, _Alloc>& __rhs)
-40039:     { return __rhs.compare(__lhs) == 0; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline bool
-40039:     operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
-40039:         const _CharT* __rhs)
-40039:     { return __lhs.compare(__rhs) == 0; }
-40039: # 6093 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline bool
-40039:     operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
-40039:         const basic_string<_CharT, _Traits, _Alloc>& __rhs)
-40039:     noexcept
-40039:     { return !(__lhs == __rhs); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline bool
-40039:     operator!=(const _CharT* __lhs,
-40039:         const basic_string<_CharT, _Traits, _Alloc>& __rhs)
-40039:     { return !(__lhs == __rhs); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline bool
-40039:     operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
-40039:         const _CharT* __rhs)
-40039:     { return !(__lhs == __rhs); }
-40039: # 6131 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline bool
-40039:     operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
-40039:        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
-40039:     noexcept
-40039:     { return __lhs.compare(__rhs) < 0; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline bool
-40039:     operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
-40039:        const _CharT* __rhs)
-40039:     { return __lhs.compare(__rhs) < 0; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline bool
-40039:     operator<(const _CharT* __lhs,
-40039:        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
-40039:     { return __rhs.compare(__lhs) > 0; }
-40039: # 6169 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline bool
-40039:     operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
-40039:        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
-40039:     noexcept
-40039:     { return __lhs.compare(__rhs) > 0; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline bool
-40039:     operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
-40039:        const _CharT* __rhs)
-40039:     { return __lhs.compare(__rhs) > 0; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline bool
-40039:     operator>(const _CharT* __lhs,
-40039:        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
-40039:     { return __rhs.compare(__lhs) < 0; }
-40039: # 6207 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline bool
-40039:     operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
-40039:         const basic_string<_CharT, _Traits, _Alloc>& __rhs)
-40039:     noexcept
-40039:     { return __lhs.compare(__rhs) <= 0; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline bool
-40039:     operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
-40039:         const _CharT* __rhs)
-40039:     { return __lhs.compare(__rhs) <= 0; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline bool
-40039:     operator<=(const _CharT* __lhs,
-40039:         const basic_string<_CharT, _Traits, _Alloc>& __rhs)
-40039:     { return __rhs.compare(__lhs) >= 0; }
-40039: # 6245 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline bool
-40039:     operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
-40039:         const basic_string<_CharT, _Traits, _Alloc>& __rhs)
-40039:     noexcept
-40039:     { return __lhs.compare(__rhs) >= 0; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline bool
-40039:     operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
-40039:         const _CharT* __rhs)
-40039:     { return __lhs.compare(__rhs) >= 0; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline bool
-40039:     operator>=(const _CharT* __lhs,
-40039:       const basic_string<_CharT, _Traits, _Alloc>& __rhs)
-40039:     { return __rhs.compare(__lhs) <= 0; }
-40039: # 6283 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline void
-40039:     swap(basic_string<_CharT, _Traits, _Alloc>& __lhs,
-40039:   basic_string<_CharT, _Traits, _Alloc>& __rhs)
-40039:     noexcept(noexcept(__lhs.swap(__rhs)))
-40039:     { __lhs.swap(__rhs); }
-40039: # 6303 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     operator>>(basic_istream<_CharT, _Traits>& __is,
-40039:         basic_string<_CharT, _Traits, _Alloc>& __str);
-40039: 
-40039:   template<>
-40039:     basic_istream<char>&
-40039:     operator>>(basic_istream<char>& __is, basic_string<char>& __str);
-40039: # 6321 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline basic_ostream<_CharT, _Traits>&
-40039:     operator<<(basic_ostream<_CharT, _Traits>& __os,
-40039:         const basic_string<_CharT, _Traits, _Alloc>& __str)
-40039:     {
-40039: 
-40039: 
-40039:       return __ostream_insert(__os, __str.data(), __str.size());
-40039:     }
-40039: # 6344 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     getline(basic_istream<_CharT, _Traits>& __is,
-40039:      basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim);
-40039: # 6361 "/usr/include/c++/8/bits/basic_string.h" 3
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline basic_istream<_CharT, _Traits>&
-40039:     getline(basic_istream<_CharT, _Traits>& __is,
-40039:      basic_string<_CharT, _Traits, _Alloc>& __str)
-40039:     { return std::getline(__is, __str, __is.widen('\n')); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline basic_istream<_CharT, _Traits>&
-40039:     getline(basic_istream<_CharT, _Traits>&& __is,
-40039:      basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim)
-40039:     { return std::getline(__is, __str, __delim); }
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline basic_istream<_CharT, _Traits>&
-40039:     getline(basic_istream<_CharT, _Traits>&& __is,
-40039:      basic_string<_CharT, _Traits, _Alloc>& __str)
-40039:     { return std::getline(__is, __str); }
-40039: 
-40039: 
-40039:   template<>
-40039:     basic_istream<char>&
-40039:     getline(basic_istream<char>& __in, basic_string<char>& __str,
-40039:      char __delim);
-40039: 
-40039: 
-40039:   template<>
-40039:     basic_istream<wchar_t>&
-40039:     getline(basic_istream<wchar_t>& __in, basic_string<wchar_t>& __str,
-40039:      wchar_t __delim);
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/ext/string_conversions.h" 1 3
-40039: # 32 "/usr/include/c++/8/ext/string_conversions.h" 3
-40039:        
-40039: # 33 "/usr/include/c++/8/ext/string_conversions.h" 3
-40039: # 41 "/usr/include/c++/8/ext/string_conversions.h" 3
-40039: # 1 "/usr/include/c++/8/cstdlib" 1 3
-40039: # 39 "/usr/include/c++/8/cstdlib" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/cstdlib" 3
-40039: # 42 "/usr/include/c++/8/ext/string_conversions.h" 2 3
-40039: # 1 "/usr/include/c++/8/cwchar" 1 3
-40039: # 39 "/usr/include/c++/8/cwchar" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/cwchar" 3
-40039: # 43 "/usr/include/c++/8/ext/string_conversions.h" 2 3
-40039: # 1 "/usr/include/c++/8/cstdio" 1 3
-40039: # 39 "/usr/include/c++/8/cstdio" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/cstdio" 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/stdio.h" 1 3 4
-40039: # 27 "/usr/include/stdio.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 1 3 4
-40039: # 28 "/usr/include/stdio.h" 2 3 4
-40039: 
-40039: extern "C" {
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
-40039: # 34 "/usr/include/stdio.h" 2 3 4
-40039: 
-40039: 
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stdarg.h" 1 3 4
-40039: # 37 "/usr/include/stdio.h" 2 3 4
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h" 1 3 4
-40039: # 10 "/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h" 3 4
-40039: typedef struct _G_fpos_t
-40039: {
-40039:   __off_t __pos;
-40039:   __mbstate_t __state;
-40039: } __fpos_t;
-40039: # 40 "/usr/include/stdio.h" 2 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h" 1 3 4
-40039: # 10 "/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h" 3 4
-40039: typedef struct _G_fpos64_t
-40039: {
-40039:   __off64_t __pos;
-40039:   __mbstate_t __state;
-40039: } __fpos64_t;
-40039: # 41 "/usr/include/stdio.h" 2 3 4
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h" 1 3 4
-40039: # 35 "/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h" 3 4
-40039: struct _IO_FILE;
-40039: struct _IO_marker;
-40039: struct _IO_codecvt;
-40039: struct _IO_wide_data;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef void _IO_lock_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: struct _IO_FILE
-40039: {
-40039:   int _flags;
-40039: 
-40039: 
-40039:   char *_IO_read_ptr;
-40039:   char *_IO_read_end;
-40039:   char *_IO_read_base;
-40039:   char *_IO_write_base;
-40039:   char *_IO_write_ptr;
-40039:   char *_IO_write_end;
-40039:   char *_IO_buf_base;
-40039:   char *_IO_buf_end;
-40039: 
-40039: 
-40039:   char *_IO_save_base;
-40039:   char *_IO_backup_base;
-40039:   char *_IO_save_end;
-40039: 
-40039:   struct _IO_marker *_markers;
-40039: 
-40039:   struct _IO_FILE *_chain;
-40039: 
-40039:   int _fileno;
-40039:   int _flags2;
-40039:   __off_t _old_offset;
-40039: 
-40039: 
-40039:   unsigned short _cur_column;
-40039:   signed char _vtable_offset;
-40039:   char _shortbuf[1];
-40039: 
-40039:   _IO_lock_t *_lock;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   __off64_t _offset;
-40039: 
-40039:   struct _IO_codecvt *_codecvt;
-40039:   struct _IO_wide_data *_wide_data;
-40039:   struct _IO_FILE *_freeres_list;
-40039:   void *_freeres_buf;
-40039:   size_t __pad5;
-40039:   int _mode;
-40039: 
-40039:   char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
-40039: };
-40039: # 44 "/usr/include/stdio.h" 2 3 4
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h" 1 3 4
-40039: # 27 "/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h" 3 4
-40039: typedef __ssize_t cookie_read_function_t (void *__cookie, char *__buf,
-40039:                                           size_t __nbytes);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __ssize_t cookie_write_function_t (void *__cookie, const char *__buf,
-40039:                                            size_t __nbytes);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef int cookie_seek_function_t (void *__cookie, __off64_t *__pos, int __w);
-40039: 
-40039: 
-40039: typedef int cookie_close_function_t (void *__cookie);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef struct _IO_cookie_io_functions_t
-40039: {
-40039:   cookie_read_function_t *read;
-40039:   cookie_write_function_t *write;
-40039:   cookie_seek_function_t *seek;
-40039:   cookie_close_function_t *close;
-40039: } cookie_io_functions_t;
-40039: # 47 "/usr/include/stdio.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __gnuc_va_list va_list;
-40039: # 84 "/usr/include/stdio.h" 3 4
-40039: typedef __fpos_t fpos_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __fpos64_t fpos64_t;
-40039: # 133 "/usr/include/stdio.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/stdio_lim.h" 1 3 4
-40039: # 134 "/usr/include/stdio.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: extern FILE *stdin;
-40039: extern FILE *stdout;
-40039: extern FILE *stderr;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int remove (const char *__filename) throw ();
-40039: 
-40039: extern int rename (const char *__old, const char *__new) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int renameat (int __oldfd, const char *__old, int __newfd,
-40039:        const char *__new) throw ();
-40039: # 164 "/usr/include/stdio.h" 3 4
-40039: extern int renameat2 (int __oldfd, const char *__old, int __newfd,
-40039:         const char *__new, unsigned int __flags) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern FILE *tmpfile (void) __attribute__ ((__warn_unused_result__));
-40039: # 183 "/usr/include/stdio.h" 3 4
-40039: extern FILE *tmpfile64 (void) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: extern char *tmpnam (char *__s) throw () __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *tmpnam_r (char *__s) throw () __attribute__ ((__warn_unused_result__));
-40039: # 204 "/usr/include/stdio.h" 3 4
-40039: extern char *tempnam (const char *__dir, const char *__pfx)
-40039:      throw () __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int fclose (FILE *__stream);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int fflush (FILE *__stream);
-40039: # 227 "/usr/include/stdio.h" 3 4
-40039: extern int fflush_unlocked (FILE *__stream);
-40039: # 237 "/usr/include/stdio.h" 3 4
-40039: extern int fcloseall (void);
-40039: # 246 "/usr/include/stdio.h" 3 4
-40039: extern FILE *fopen (const char *__restrict __filename,
-40039:       const char *__restrict __modes) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern FILE *freopen (const char *__restrict __filename,
-40039:         const char *__restrict __modes,
-40039:         FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
-40039: # 270 "/usr/include/stdio.h" 3 4
-40039: extern FILE *fopen64 (const char *__restrict __filename,
-40039:         const char *__restrict __modes) __attribute__ ((__warn_unused_result__));
-40039: extern FILE *freopen64 (const char *__restrict __filename,
-40039:    const char *__restrict __modes,
-40039:    FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern FILE *fdopen (int __fd, const char *__modes) throw () __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern FILE *fopencookie (void *__restrict __magic_cookie,
-40039:      const char *__restrict __modes,
-40039:      cookie_io_functions_t __io_funcs) throw () __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern FILE *fmemopen (void *__s, size_t __len, const char *__modes)
-40039:   throw () __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) throw () __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
-40039:       int __modes, size_t __n) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
-40039:          size_t __size) throw ();
-40039: 
-40039: 
-40039: extern void setlinebuf (FILE *__stream) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int fprintf (FILE *__restrict __stream,
-40039:       const char *__restrict __format, ...);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int printf (const char *__restrict __format, ...);
-40039: 
-40039: extern int sprintf (char *__restrict __s,
-40039:       const char *__restrict __format, ...) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int vfprintf (FILE *__restrict __s, const char *__restrict __format,
-40039:        __gnuc_va_list __arg);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg);
-40039: 
-40039: extern int vsprintf (char *__restrict __s, const char *__restrict __format,
-40039:        __gnuc_va_list __arg) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int snprintf (char *__restrict __s, size_t __maxlen,
-40039:        const char *__restrict __format, ...)
-40039:      throw () __attribute__ ((__format__ (__printf__, 3, 4)));
-40039: 
-40039: extern int vsnprintf (char *__restrict __s, size_t __maxlen,
-40039:         const char *__restrict __format, __gnuc_va_list __arg)
-40039:      throw () __attribute__ ((__format__ (__printf__, 3, 0)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int vasprintf (char **__restrict __ptr, const char *__restrict __f,
-40039:         __gnuc_va_list __arg)
-40039:      throw () __attribute__ ((__format__ (__printf__, 2, 0))) __attribute__ ((__warn_unused_result__));
-40039: extern int __asprintf (char **__restrict __ptr,
-40039:          const char *__restrict __fmt, ...)
-40039:      throw () __attribute__ ((__format__ (__printf__, 2, 3))) __attribute__ ((__warn_unused_result__));
-40039: extern int asprintf (char **__restrict __ptr,
-40039:        const char *__restrict __fmt, ...)
-40039:      throw () __attribute__ ((__format__ (__printf__, 2, 3))) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int vdprintf (int __fd, const char *__restrict __fmt,
-40039:        __gnuc_va_list __arg)
-40039:      __attribute__ ((__format__ (__printf__, 2, 0)));
-40039: extern int dprintf (int __fd, const char *__restrict __fmt, ...)
-40039:      __attribute__ ((__format__ (__printf__, 2, 3)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int fscanf (FILE *__restrict __stream,
-40039:      const char *__restrict __format, ...) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int scanf (const char *__restrict __format, ...) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: extern int sscanf (const char *__restrict __s,
-40039:      const char *__restrict __format, ...) throw ();
-40039: # 434 "/usr/include/stdio.h" 3 4
-40039: extern int vfscanf (FILE *__restrict __s, const char *__restrict __format,
-40039:       __gnuc_va_list __arg)
-40039:      __attribute__ ((__format__ (__scanf__, 2, 0))) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg)
-40039:      __attribute__ ((__format__ (__scanf__, 1, 0))) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: extern int vsscanf (const char *__restrict __s,
-40039:       const char *__restrict __format, __gnuc_va_list __arg)
-40039:      throw () __attribute__ ((__format__ (__scanf__, 2, 0)));
-40039: # 491 "/usr/include/stdio.h" 3 4
-40039: extern int fgetc (FILE *__stream);
-40039: extern int getc (FILE *__stream);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int getchar (void);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int getc_unlocked (FILE *__stream);
-40039: extern int getchar_unlocked (void);
-40039: # 516 "/usr/include/stdio.h" 3 4
-40039: extern int fgetc_unlocked (FILE *__stream);
-40039: # 527 "/usr/include/stdio.h" 3 4
-40039: extern int fputc (int __c, FILE *__stream);
-40039: extern int putc (int __c, FILE *__stream);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int putchar (int __c);
-40039: # 543 "/usr/include/stdio.h" 3 4
-40039: extern int fputc_unlocked (int __c, FILE *__stream);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int putc_unlocked (int __c, FILE *__stream);
-40039: extern int putchar_unlocked (int __c);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int getw (FILE *__stream);
-40039: 
-40039: 
-40039: extern int putw (int __w, FILE *__stream);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
-40039:      __attribute__ ((__warn_unused_result__));
-40039: # 593 "/usr/include/stdio.h" 3 4
-40039: extern char *fgets_unlocked (char *__restrict __s, int __n,
-40039:         FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
-40039: # 609 "/usr/include/stdio.h" 3 4
-40039: extern __ssize_t __getdelim (char **__restrict __lineptr,
-40039:                              size_t *__restrict __n, int __delimiter,
-40039:                              FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
-40039: extern __ssize_t getdelim (char **__restrict __lineptr,
-40039:                            size_t *__restrict __n, int __delimiter,
-40039:                            FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __ssize_t getline (char **__restrict __lineptr,
-40039:                           size_t *__restrict __n,
-40039:                           FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int fputs (const char *__restrict __s, FILE *__restrict __stream);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int puts (const char *__s);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int ungetc (int __c, FILE *__stream);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern size_t fread (void *__restrict __ptr, size_t __size,
-40039:        size_t __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern size_t fwrite (const void *__restrict __ptr, size_t __size,
-40039:         size_t __n, FILE *__restrict __s);
-40039: # 668 "/usr/include/stdio.h" 3 4
-40039: extern int fputs_unlocked (const char *__restrict __s,
-40039:       FILE *__restrict __stream);
-40039: # 679 "/usr/include/stdio.h" 3 4
-40039: extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
-40039:          size_t __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
-40039: extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size,
-40039:           size_t __n, FILE *__restrict __stream);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int fseek (FILE *__stream, long int __off, int __whence);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long int ftell (FILE *__stream) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern void rewind (FILE *__stream);
-40039: # 713 "/usr/include/stdio.h" 3 4
-40039: extern int fseeko (FILE *__stream, __off_t __off, int __whence);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __off_t ftello (FILE *__stream) __attribute__ ((__warn_unused_result__));
-40039: # 737 "/usr/include/stdio.h" 3 4
-40039: extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int fsetpos (FILE *__stream, const fpos_t *__pos);
-40039: # 756 "/usr/include/stdio.h" 3 4
-40039: extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);
-40039: extern __off64_t ftello64 (FILE *__stream) __attribute__ ((__warn_unused_result__));
-40039: extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);
-40039: extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos);
-40039: 
-40039: 
-40039: 
-40039: extern void clearerr (FILE *__stream) throw ();
-40039: 
-40039: extern int feof (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
-40039: 
-40039: extern int ferror (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: extern void clearerr_unlocked (FILE *__stream) throw ();
-40039: extern int feof_unlocked (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
-40039: extern int ferror_unlocked (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern void perror (const char *__s);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/sys_errlist.h" 1 3 4
-40039: # 26 "/usr/include/x86_64-linux-gnu/bits/sys_errlist.h" 3 4
-40039: extern int sys_nerr;
-40039: extern const char *const sys_errlist[];
-40039: 
-40039: 
-40039: extern int _sys_nerr;
-40039: extern const char *const _sys_errlist[];
-40039: # 788 "/usr/include/stdio.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int fileno (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int fileno_unlocked (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
-40039: # 806 "/usr/include/stdio.h" 3 4
-40039: extern FILE *popen (const char *__command, const char *__modes) __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int pclose (FILE *__stream);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *ctermid (char *__s) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *cuserid (char *__s);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: struct obstack;
-40039: 
-40039: 
-40039: extern int obstack_printf (struct obstack *__restrict __obstack,
-40039:       const char *__restrict __format, ...)
-40039:      throw () __attribute__ ((__format__ (__printf__, 2, 3)));
-40039: extern int obstack_vprintf (struct obstack *__restrict __obstack,
-40039:        const char *__restrict __format,
-40039:        __gnuc_va_list __args)
-40039:      throw () __attribute__ ((__format__ (__printf__, 2, 0)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern void flockfile (FILE *__stream) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int ftrylockfile (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
-40039: 
-40039: 
-40039: extern void funlockfile (FILE *__stream) throw ();
-40039: # 864 "/usr/include/stdio.h" 3 4
-40039: extern int __uflow (FILE *);
-40039: extern int __overflow (FILE *, int);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/stdio.h" 1 3 4
-40039: # 46 "/usr/include/x86_64-linux-gnu/bits/stdio.h" 3 4
-40039: extern __inline __attribute__ ((__gnu_inline__)) int
-40039: getchar (void)
-40039: {
-40039:   return getc (stdin);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__gnu_inline__)) int
-40039: fgetc_unlocked (FILE *__fp)
-40039: {
-40039:   return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__gnu_inline__)) int
-40039: getc_unlocked (FILE *__fp)
-40039: {
-40039:   return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
-40039: }
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__gnu_inline__)) int
-40039: getchar_unlocked (void)
-40039: {
-40039:   return (__builtin_expect (((stdin)->_IO_read_ptr >= (stdin)->_IO_read_end), 0) ? __uflow (stdin) : *(unsigned char *) (stdin)->_IO_read_ptr++);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__gnu_inline__)) int
-40039: putchar (int __c)
-40039: {
-40039:   return putc (__c, stdout);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__gnu_inline__)) int
-40039: fputc_unlocked (int __c, FILE *__stream)
-40039: {
-40039:   return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__gnu_inline__)) int
-40039: putc_unlocked (int __c, FILE *__stream)
-40039: {
-40039:   return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
-40039: }
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__gnu_inline__)) int
-40039: putchar_unlocked (int __c)
-40039: {
-40039:   return (__builtin_expect (((stdout)->_IO_write_ptr >= (stdout)->_IO_write_end), 0) ? __overflow (stdout, (unsigned char) (__c)) : (unsigned char) (*(stdout)->_IO_write_ptr++ = (__c)));
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__gnu_inline__)) __ssize_t
-40039: getline (char **__lineptr, size_t *__n, FILE *__stream)
-40039: {
-40039:   return __getdelim (__lineptr, __n, '\n', __stream);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__gnu_inline__)) int
-40039: __attribute__ ((__leaf__)) feof_unlocked (FILE *__stream) throw ()
-40039: {
-40039:   return (((__stream)->_flags & 0x0010) != 0);
-40039: }
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__gnu_inline__)) int
-40039: __attribute__ ((__leaf__)) ferror_unlocked (FILE *__stream) throw ()
-40039: {
-40039:   return (((__stream)->_flags & 0x0020) != 0);
-40039: }
-40039: # 871 "/usr/include/stdio.h" 2 3 4
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/stdio2.h" 1 3 4
-40039: # 26 "/usr/include/x86_64-linux-gnu/bits/stdio2.h" 3 4
-40039: extern int __sprintf_chk (char *__restrict __s, int __flag, size_t __slen,
-40039:      const char *__restrict __format, ...) throw ();
-40039: extern int __vsprintf_chk (char *__restrict __s, int __flag, size_t __slen,
-40039:       const char *__restrict __format,
-40039:       __gnuc_va_list __ap) throw ();
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
-40039: __attribute__ ((__leaf__)) sprintf (char *__restrict __s, const char *__restrict __fmt, ...) throw ()
-40039: {
-40039:   return __builtin___sprintf_chk (__s, 2 - 1,
-40039:       __builtin_object_size (__s, 2 > 1), __fmt, __builtin_va_arg_pack ());
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
-40039: __attribute__ ((__leaf__)) vsprintf (char *__restrict __s, const char *__restrict __fmt, __gnuc_va_list __ap) throw ()
-40039: 
-40039: {
-40039:   return __builtin___vsprintf_chk (__s, 2 - 1,
-40039:        __builtin_object_size (__s, 2 > 1), __fmt, __ap);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: extern int __snprintf_chk (char *__restrict __s, size_t __n, int __flag,
-40039:       size_t __slen, const char *__restrict __format,
-40039:       ...) throw ();
-40039: extern int __vsnprintf_chk (char *__restrict __s, size_t __n, int __flag,
-40039:        size_t __slen, const char *__restrict __format,
-40039:        __gnuc_va_list __ap) throw ();
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
-40039: __attribute__ ((__leaf__)) snprintf (char *__restrict __s, size_t __n, const char *__restrict __fmt, ...) throw ()
-40039: 
-40039: {
-40039:   return __builtin___snprintf_chk (__s, __n, 2 - 1,
-40039:        __builtin_object_size (__s, 2 > 1), __fmt, __builtin_va_arg_pack ());
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
-40039: __attribute__ ((__leaf__)) vsnprintf (char *__restrict __s, size_t __n, const char *__restrict __fmt, __gnuc_va_list __ap) throw ()
-40039: 
-40039: {
-40039:   return __builtin___vsnprintf_chk (__s, __n, 2 - 1,
-40039:         __builtin_object_size (__s, 2 > 1), __fmt, __ap);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int __fprintf_chk (FILE *__restrict __stream, int __flag,
-40039:      const char *__restrict __format, ...);
-40039: extern int __printf_chk (int __flag, const char *__restrict __format, ...);
-40039: extern int __vfprintf_chk (FILE *__restrict __stream, int __flag,
-40039:       const char *__restrict __format, __gnuc_va_list __ap);
-40039: extern int __vprintf_chk (int __flag, const char *__restrict __format,
-40039:      __gnuc_va_list __ap);
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
-40039: fprintf (FILE *__restrict __stream, const char *__restrict __fmt, ...)
-40039: {
-40039:   return __fprintf_chk (__stream, 2 - 1, __fmt,
-40039:    __builtin_va_arg_pack ());
-40039: }
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
-40039: printf (const char *__restrict __fmt, ...)
-40039: {
-40039:   return __printf_chk (2 - 1, __fmt, __builtin_va_arg_pack ());
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
-40039: vprintf (const char *__restrict __fmt, __gnuc_va_list __ap)
-40039: {
-40039: 
-40039:   return __vfprintf_chk (stdout, 2 - 1, __fmt, __ap);
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
-40039: vfprintf (FILE *__restrict __stream,
-40039:    const char *__restrict __fmt, __gnuc_va_list __ap)
-40039: {
-40039:   return __vfprintf_chk (__stream, 2 - 1, __fmt, __ap);
-40039: }
-40039: 
-40039: 
-40039: extern int __dprintf_chk (int __fd, int __flag, const char *__restrict __fmt,
-40039:      ...) __attribute__ ((__format__ (__printf__, 3, 4)));
-40039: extern int __vdprintf_chk (int __fd, int __flag,
-40039:       const char *__restrict __fmt, __gnuc_va_list __arg)
-40039:      __attribute__ ((__format__ (__printf__, 3, 0)));
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
-40039: dprintf (int __fd, const char *__restrict __fmt, ...)
-40039: {
-40039:   return __dprintf_chk (__fd, 2 - 1, __fmt,
-40039:    __builtin_va_arg_pack ());
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
-40039: vdprintf (int __fd, const char *__restrict __fmt, __gnuc_va_list __ap)
-40039: {
-40039:   return __vdprintf_chk (__fd, 2 - 1, __fmt, __ap);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int __asprintf_chk (char **__restrict __ptr, int __flag,
-40039:       const char *__restrict __fmt, ...)
-40039:      throw () __attribute__ ((__format__ (__printf__, 3, 4))) __attribute__ ((__warn_unused_result__));
-40039: extern int __vasprintf_chk (char **__restrict __ptr, int __flag,
-40039:        const char *__restrict __fmt, __gnuc_va_list __arg)
-40039:      throw () __attribute__ ((__format__ (__printf__, 3, 0))) __attribute__ ((__warn_unused_result__));
-40039: extern int __obstack_printf_chk (struct obstack *__restrict __obstack,
-40039:      int __flag, const char *__restrict __format,
-40039:      ...)
-40039:      throw () __attribute__ ((__format__ (__printf__, 3, 4)));
-40039: extern int __obstack_vprintf_chk (struct obstack *__restrict __obstack,
-40039:       int __flag,
-40039:       const char *__restrict __format,
-40039:       __gnuc_va_list __args)
-40039:      throw () __attribute__ ((__format__ (__printf__, 3, 0)));
-40039: 
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
-40039: __attribute__ ((__leaf__)) asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...) throw ()
-40039: {
-40039:   return __asprintf_chk (__ptr, 2 - 1, __fmt,
-40039:     __builtin_va_arg_pack ());
-40039: }
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
-40039: __attribute__ ((__leaf__)) __asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...) throw ()
-40039: 
-40039: {
-40039:   return __asprintf_chk (__ptr, 2 - 1, __fmt,
-40039:     __builtin_va_arg_pack ());
-40039: }
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
-40039: __attribute__ ((__leaf__)) obstack_printf (struct obstack *__restrict __obstack, const char *__restrict __fmt, ...) throw ()
-40039: 
-40039: {
-40039:   return __obstack_printf_chk (__obstack, 2 - 1, __fmt,
-40039:           __builtin_va_arg_pack ());
-40039: }
-40039: # 209 "/usr/include/x86_64-linux-gnu/bits/stdio2.h" 3 4
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
-40039: __attribute__ ((__leaf__)) vasprintf (char **__restrict __ptr, const char *__restrict __fmt, __gnuc_va_list __ap) throw ()
-40039: 
-40039: {
-40039:   return __vasprintf_chk (__ptr, 2 - 1, __fmt, __ap);
-40039: }
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
-40039: __attribute__ ((__leaf__)) obstack_vprintf (struct obstack *__restrict __obstack, const char *__restrict __fmt, __gnuc_va_list __ap) throw ()
-40039: 
-40039: {
-40039:   return __obstack_vprintf_chk (__obstack, 2 - 1, __fmt,
-40039:     __ap);
-40039: }
-40039: # 243 "/usr/include/x86_64-linux-gnu/bits/stdio2.h" 3 4
-40039: extern char *__fgets_chk (char *__restrict __s, size_t __size, int __n,
-40039:      FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
-40039: extern char *__fgets_alias (char *__restrict __s, int __n, FILE *__restrict __stream) __asm__ ("" "fgets")
-40039: 
-40039:                                         __attribute__ ((__warn_unused_result__));
-40039: extern char *__fgets_chk_warn (char *__restrict __s, size_t __size, int __n, FILE *__restrict __stream) __asm__ ("" "__fgets_chk")
-40039: 
-40039: 
-40039:      __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgets called with bigger size than length " "of destination buffer")))
-40039:                                  ;
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char *
-40039: fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
-40039: {
-40039:   if (__builtin_object_size (__s, 2 > 1) != (size_t) -1)
-40039:     {
-40039:       if (!__builtin_constant_p (__n) || __n <= 0)
-40039:  return __fgets_chk (__s, __builtin_object_size (__s, 2 > 1), __n, __stream);
-40039: 
-40039:       if ((size_t) __n > __builtin_object_size (__s, 2 > 1))
-40039:  return __fgets_chk_warn (__s, __builtin_object_size (__s, 2 > 1), __n, __stream);
-40039:     }
-40039:   return __fgets_alias (__s, __n, __stream);
-40039: }
-40039: 
-40039: extern size_t __fread_chk (void *__restrict __ptr, size_t __ptrlen,
-40039:       size_t __size, size_t __n,
-40039:       FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
-40039: extern size_t __fread_alias (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "fread")
-40039: 
-40039: 
-40039:             __attribute__ ((__warn_unused_result__));
-40039: extern size_t __fread_chk_warn (void *__restrict __ptr, size_t __ptrlen, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "__fread_chk")
-40039: 
-40039: 
-40039: 
-40039: 
-40039:      __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fread called with bigger size * nmemb than length " "of destination buffer")))
-40039:                                  ;
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) size_t
-40039: fread (void *__restrict __ptr, size_t __size, size_t __n,
-40039:        FILE *__restrict __stream)
-40039: {
-40039:   if (__builtin_object_size (__ptr, 0) != (size_t) -1)
-40039:     {
-40039:       if (!__builtin_constant_p (__size)
-40039:    || !__builtin_constant_p (__n)
-40039:    || (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2)))
-40039:  return __fread_chk (__ptr, __builtin_object_size (__ptr, 0), __size, __n, __stream);
-40039: 
-40039:       if (__size * __n > __builtin_object_size (__ptr, 0))
-40039:  return __fread_chk_warn (__ptr, __builtin_object_size (__ptr, 0), __size, __n, __stream);
-40039:     }
-40039:   return __fread_alias (__ptr, __size, __n, __stream);
-40039: }
-40039: 
-40039: 
-40039: extern char *__fgets_unlocked_chk (char *__restrict __s, size_t __size,
-40039:        int __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
-40039: extern char *__fgets_unlocked_alias (char *__restrict __s, int __n, FILE *__restrict __stream) __asm__ ("" "fgets_unlocked")
-40039: 
-40039:                                                  __attribute__ ((__warn_unused_result__));
-40039: extern char *__fgets_unlocked_chk_warn (char *__restrict __s, size_t __size, int __n, FILE *__restrict __stream) __asm__ ("" "__fgets_unlocked_chk")
-40039: 
-40039: 
-40039:      __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgets_unlocked called with bigger size than length " "of destination buffer")))
-40039:                                  ;
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char *
-40039: fgets_unlocked (char *__restrict __s, int __n, FILE *__restrict __stream)
-40039: {
-40039:   if (__builtin_object_size (__s, 2 > 1) != (size_t) -1)
-40039:     {
-40039:       if (!__builtin_constant_p (__n) || __n <= 0)
-40039:  return __fgets_unlocked_chk (__s, __builtin_object_size (__s, 2 > 1), __n, __stream);
-40039: 
-40039:       if ((size_t) __n > __builtin_object_size (__s, 2 > 1))
-40039:  return __fgets_unlocked_chk_warn (__s, __builtin_object_size (__s, 2 > 1), __n, __stream);
-40039:     }
-40039:   return __fgets_unlocked_alias (__s, __n, __stream);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern size_t __fread_unlocked_chk (void *__restrict __ptr, size_t __ptrlen,
-40039:         size_t __size, size_t __n,
-40039:         FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
-40039: extern size_t __fread_unlocked_alias (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "fread_unlocked")
-40039: 
-40039: 
-40039:                      __attribute__ ((__warn_unused_result__));
-40039: extern size_t __fread_unlocked_chk_warn (void *__restrict __ptr, size_t __ptrlen, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "__fread_unlocked_chk")
-40039: 
-40039: 
-40039: 
-40039: 
-40039:      __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fread_unlocked called with bigger size * nmemb than " "length of destination buffer")))
-40039:                                         ;
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) size_t
-40039: fread_unlocked (void *__restrict __ptr, size_t __size, size_t __n,
-40039:   FILE *__restrict __stream)
-40039: {
-40039:   if (__builtin_object_size (__ptr, 0) != (size_t) -1)
-40039:     {
-40039:       if (!__builtin_constant_p (__size)
-40039:    || !__builtin_constant_p (__n)
-40039:    || (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2)))
-40039:  return __fread_unlocked_chk (__ptr, __builtin_object_size (__ptr, 0), __size, __n,
-40039:          __stream);
-40039: 
-40039:       if (__size * __n > __builtin_object_size (__ptr, 0))
-40039:  return __fread_unlocked_chk_warn (__ptr, __builtin_object_size (__ptr, 0), __size, __n,
-40039:        __stream);
-40039:     }
-40039: 
-40039: 
-40039:   if (__builtin_constant_p (__size)
-40039:       && __builtin_constant_p (__n)
-40039:       && (__size | __n) < (((size_t) 1) << (8 * sizeof (size_t) / 2))
-40039:       && __size * __n <= 8)
-40039:     {
-40039:       size_t __cnt = __size * __n;
-40039:       char *__cptr = (char *) __ptr;
-40039:       if (__cnt == 0)
-40039:  return 0;
-40039: 
-40039:       for (; __cnt > 0; --__cnt)
-40039:  {
-40039:    int __c = getc_unlocked (__stream);
-40039:    if (__c == (-1))
-40039:      break;
-40039:    *__cptr++ = __c;
-40039:  }
-40039:       return (__cptr - (char *) __ptr) / __size;
-40039:     }
-40039: 
-40039:   return __fread_unlocked_alias (__ptr, __size, __n, __stream);
-40039: }
-40039: # 874 "/usr/include/stdio.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 43 "/usr/include/c++/8/cstdio" 2 3
-40039: # 96 "/usr/include/c++/8/cstdio" 3
-40039: namespace std
-40039: {
-40039:   using ::FILE;
-40039:   using ::fpos_t;
-40039: 
-40039:   using ::clearerr;
-40039:   using ::fclose;
-40039:   using ::feof;
-40039:   using ::ferror;
-40039:   using ::fflush;
-40039:   using ::fgetc;
-40039:   using ::fgetpos;
-40039:   using ::fgets;
-40039:   using ::fopen;
-40039:   using ::fprintf;
-40039:   using ::fputc;
-40039:   using ::fputs;
-40039:   using ::fread;
-40039:   using ::freopen;
-40039:   using ::fscanf;
-40039:   using ::fseek;
-40039:   using ::fsetpos;
-40039:   using ::ftell;
-40039:   using ::fwrite;
-40039:   using ::getc;
-40039:   using ::getchar;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   using ::perror;
-40039:   using ::printf;
-40039:   using ::putc;
-40039:   using ::putchar;
-40039:   using ::puts;
-40039:   using ::remove;
-40039:   using ::rename;
-40039:   using ::rewind;
-40039:   using ::scanf;
-40039:   using ::setbuf;
-40039:   using ::setvbuf;
-40039:   using ::sprintf;
-40039:   using ::sscanf;
-40039:   using ::tmpfile;
-40039: 
-40039:   using ::tmpnam;
-40039: 
-40039:   using ::ungetc;
-40039:   using ::vfprintf;
-40039:   using ::vprintf;
-40039:   using ::vsprintf;
-40039: }
-40039: # 157 "/usr/include/c++/8/cstdio" 3
-40039: namespace __gnu_cxx
-40039: {
-40039: # 175 "/usr/include/c++/8/cstdio" 3
-40039:   using ::snprintf;
-40039:   using ::vfscanf;
-40039:   using ::vscanf;
-40039:   using ::vsnprintf;
-40039:   using ::vsscanf;
-40039: 
-40039: }
-40039: 
-40039: namespace std
-40039: {
-40039:   using ::__gnu_cxx::snprintf;
-40039:   using ::__gnu_cxx::vfscanf;
-40039:   using ::__gnu_cxx::vscanf;
-40039:   using ::__gnu_cxx::vsnprintf;
-40039:   using ::__gnu_cxx::vsscanf;
-40039: }
-40039: # 44 "/usr/include/c++/8/ext/string_conversions.h" 2 3
-40039: # 1 "/usr/include/c++/8/cerrno" 1 3
-40039: # 39 "/usr/include/c++/8/cerrno" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/cerrno" 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/errno.h" 1 3 4
-40039: # 28 "/usr/include/errno.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/errno.h" 1 3 4
-40039: # 26 "/usr/include/x86_64-linux-gnu/bits/errno.h" 3 4
-40039: # 1 "/usr/include/linux/errno.h" 1 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/asm/errno.h" 1 3 4
-40039: # 1 "/usr/include/asm-generic/errno.h" 1 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/asm-generic/errno-base.h" 1 3 4
-40039: # 6 "/usr/include/asm-generic/errno.h" 2 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/asm/errno.h" 2 3 4
-40039: # 1 "/usr/include/linux/errno.h" 2 3 4
-40039: # 27 "/usr/include/x86_64-linux-gnu/bits/errno.h" 2 3 4
-40039: # 29 "/usr/include/errno.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern "C" {
-40039: 
-40039: 
-40039: extern int *__errno_location (void) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *program_invocation_name;
-40039: extern char *program_invocation_short_name;
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/types/error_t.h" 1 3 4
-40039: # 22 "/usr/include/x86_64-linux-gnu/bits/types/error_t.h" 3 4
-40039: typedef int error_t;
-40039: # 49 "/usr/include/errno.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 43 "/usr/include/c++/8/cerrno" 2 3
-40039: # 45 "/usr/include/c++/8/ext/string_conversions.h" 2 3
-40039: 
-40039: namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039:   template<typename _TRet, typename _Ret = _TRet, typename _CharT,
-40039:     typename... _Base>
-40039:     _Ret
-40039:     __stoa(_TRet (*__convf) (const _CharT*, _CharT**, _Base...),
-40039:     const char* __name, const _CharT* __str, std::size_t* __idx,
-40039:     _Base... __base)
-40039:     {
-40039:       _Ret __ret;
-40039: 
-40039:       _CharT* __endptr;
-40039: 
-40039:       struct _Save_errno {
-40039:  _Save_errno() : _M_errno((*__errno_location ())) { (*__errno_location ()) = 0; }
-40039:  ~_Save_errno() { if ((*__errno_location ()) == 0) (*__errno_location ()) = _M_errno; }
-40039:  int _M_errno;
-40039:       } const __save_errno;
-40039: 
-40039:       struct _Range_chk {
-40039:    static bool
-40039:    _S_chk(_TRet, std::false_type) { return false; }
-40039: 
-40039:    static bool
-40039:    _S_chk(_TRet __val, std::true_type)
-40039:    {
-40039:      return __val < _TRet(__numeric_traits<int>::__min)
-40039:        || __val > _TRet(__numeric_traits<int>::__max);
-40039:    }
-40039:       };
-40039: 
-40039:       const _TRet __tmp = __convf(__str, &__endptr, __base...);
-40039: 
-40039:       if (__endptr == __str)
-40039:  std::__throw_invalid_argument(__name);
-40039:       else if ((*__errno_location ()) == 34
-40039:    || _Range_chk::_S_chk(__tmp, std::is_same<_Ret, int>{}))
-40039:  std::__throw_out_of_range(__name);
-40039:       else
-40039:  __ret = __tmp;
-40039: 
-40039:       if (__idx)
-40039:  *__idx = __endptr - __str;
-40039: 
-40039:       return __ret;
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _String, typename _CharT = typename _String::value_type>
-40039:     _String
-40039:     __to_xstring(int (*__convf) (_CharT*, std::size_t, const _CharT*,
-40039:      __builtin_va_list), std::size_t __n,
-40039:    const _CharT* __fmt, ...)
-40039:     {
-40039: 
-40039: 
-40039:       _CharT* __s = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
-40039:          * __n));
-40039: 
-40039:       __builtin_va_list __args;
-40039:       __builtin_va_start(__args, __fmt);
-40039: 
-40039:       const int __len = __convf(__s, __n, __fmt, __args);
-40039: 
-40039:       __builtin_va_end(__args);
-40039: 
-40039:       return _String(__s, __s + __len);
-40039:     }
-40039: 
-40039: 
-40039: }
-40039: # 6401 "/usr/include/c++/8/bits/basic_string.h" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: namespace __cxx11 {
-40039: 
-40039: 
-40039: 
-40039:   inline int
-40039:   stoi(const string& __str, size_t* __idx = 0, int __base = 10)
-40039:   { return __gnu_cxx::__stoa<long, int>(&std::strtol, "stoi", __str.c_str(),
-40039:      __idx, __base); }
-40039: 
-40039:   inline long
-40039:   stol(const string& __str, size_t* __idx = 0, int __base = 10)
-40039:   { return __gnu_cxx::__stoa(&std::strtol, "stol", __str.c_str(),
-40039:         __idx, __base); }
-40039: 
-40039:   inline unsigned long
-40039:   stoul(const string& __str, size_t* __idx = 0, int __base = 10)
-40039:   { return __gnu_cxx::__stoa(&std::strtoul, "stoul", __str.c_str(),
-40039:         __idx, __base); }
-40039: 
-40039:   inline long long
-40039:   stoll(const string& __str, size_t* __idx = 0, int __base = 10)
-40039:   { return __gnu_cxx::__stoa(&std::strtoll, "stoll", __str.c_str(),
-40039:         __idx, __base); }
-40039: 
-40039:   inline unsigned long long
-40039:   stoull(const string& __str, size_t* __idx = 0, int __base = 10)
-40039:   { return __gnu_cxx::__stoa(&std::strtoull, "stoull", __str.c_str(),
-40039:         __idx, __base); }
-40039: 
-40039: 
-40039:   inline float
-40039:   stof(const string& __str, size_t* __idx = 0)
-40039:   { return __gnu_cxx::__stoa(&std::strtof, "stof", __str.c_str(), __idx); }
-40039: 
-40039:   inline double
-40039:   stod(const string& __str, size_t* __idx = 0)
-40039:   { return __gnu_cxx::__stoa(&std::strtod, "stod", __str.c_str(), __idx); }
-40039: 
-40039:   inline long double
-40039:   stold(const string& __str, size_t* __idx = 0)
-40039:   { return __gnu_cxx::__stoa(&std::strtold, "stold", __str.c_str(), __idx); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   inline string
-40039:   to_string(int __val)
-40039:   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, 4 * sizeof(int),
-40039:         "%d", __val); }
-40039: 
-40039:   inline string
-40039:   to_string(unsigned __val)
-40039:   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf,
-40039:         4 * sizeof(unsigned),
-40039:         "%u", __val); }
-40039: 
-40039:   inline string
-40039:   to_string(long __val)
-40039:   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, 4 * sizeof(long),
-40039:         "%ld", __val); }
-40039: 
-40039:   inline string
-40039:   to_string(unsigned long __val)
-40039:   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf,
-40039:         4 * sizeof(unsigned long),
-40039:         "%lu", __val); }
-40039: 
-40039:   inline string
-40039:   to_string(long long __val)
-40039:   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf,
-40039:         4 * sizeof(long long),
-40039:         "%lld", __val); }
-40039: 
-40039:   inline string
-40039:   to_string(unsigned long long __val)
-40039:   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf,
-40039:         4 * sizeof(unsigned long long),
-40039:         "%llu", __val); }
-40039: 
-40039:   inline string
-40039:   to_string(float __val)
-40039:   {
-40039:     const int __n =
-40039:       __gnu_cxx::__numeric_traits<float>::__max_exponent10 + 20;
-40039:     return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, __n,
-40039:         "%f", __val);
-40039:   }
-40039: 
-40039:   inline string
-40039:   to_string(double __val)
-40039:   {
-40039:     const int __n =
-40039:       __gnu_cxx::__numeric_traits<double>::__max_exponent10 + 20;
-40039:     return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, __n,
-40039:         "%f", __val);
-40039:   }
-40039: 
-40039:   inline string
-40039:   to_string(long double __val)
-40039:   {
-40039:     const int __n =
-40039:       __gnu_cxx::__numeric_traits<long double>::__max_exponent10 + 20;
-40039:     return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, __n,
-40039:         "%Lf", __val);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   inline int
-40039:   stoi(const wstring& __str, size_t* __idx = 0, int __base = 10)
-40039:   { return __gnu_cxx::__stoa<long, int>(&std::wcstol, "stoi", __str.c_str(),
-40039:      __idx, __base); }
-40039: 
-40039:   inline long
-40039:   stol(const wstring& __str, size_t* __idx = 0, int __base = 10)
-40039:   { return __gnu_cxx::__stoa(&std::wcstol, "stol", __str.c_str(),
-40039:         __idx, __base); }
-40039: 
-40039:   inline unsigned long
-40039:   stoul(const wstring& __str, size_t* __idx = 0, int __base = 10)
-40039:   { return __gnu_cxx::__stoa(&std::wcstoul, "stoul", __str.c_str(),
-40039:         __idx, __base); }
-40039: 
-40039:   inline long long
-40039:   stoll(const wstring& __str, size_t* __idx = 0, int __base = 10)
-40039:   { return __gnu_cxx::__stoa(&std::wcstoll, "stoll", __str.c_str(),
-40039:         __idx, __base); }
-40039: 
-40039:   inline unsigned long long
-40039:   stoull(const wstring& __str, size_t* __idx = 0, int __base = 10)
-40039:   { return __gnu_cxx::__stoa(&std::wcstoull, "stoull", __str.c_str(),
-40039:         __idx, __base); }
-40039: 
-40039: 
-40039:   inline float
-40039:   stof(const wstring& __str, size_t* __idx = 0)
-40039:   { return __gnu_cxx::__stoa(&std::wcstof, "stof", __str.c_str(), __idx); }
-40039: 
-40039:   inline double
-40039:   stod(const wstring& __str, size_t* __idx = 0)
-40039:   { return __gnu_cxx::__stoa(&std::wcstod, "stod", __str.c_str(), __idx); }
-40039: 
-40039:   inline long double
-40039:   stold(const wstring& __str, size_t* __idx = 0)
-40039:   { return __gnu_cxx::__stoa(&std::wcstold, "stold", __str.c_str(), __idx); }
-40039: 
-40039: 
-40039: 
-40039:   inline wstring
-40039:   to_wstring(int __val)
-40039:   { return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf, 4 * sizeof(int),
-40039:          L"%d", __val); }
-40039: 
-40039:   inline wstring
-40039:   to_wstring(unsigned __val)
-40039:   { return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf,
-40039:          4 * sizeof(unsigned),
-40039:          L"%u", __val); }
-40039: 
-40039:   inline wstring
-40039:   to_wstring(long __val)
-40039:   { return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf, 4 * sizeof(long),
-40039:          L"%ld", __val); }
-40039: 
-40039:   inline wstring
-40039:   to_wstring(unsigned long __val)
-40039:   { return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf,
-40039:          4 * sizeof(unsigned long),
-40039:          L"%lu", __val); }
-40039: 
-40039:   inline wstring
-40039:   to_wstring(long long __val)
-40039:   { return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf,
-40039:          4 * sizeof(long long),
-40039:          L"%lld", __val); }
-40039: 
-40039:   inline wstring
-40039:   to_wstring(unsigned long long __val)
-40039:   { return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf,
-40039:          4 * sizeof(unsigned long long),
-40039:          L"%llu", __val); }
-40039: 
-40039:   inline wstring
-40039:   to_wstring(float __val)
-40039:   {
-40039:     const int __n =
-40039:       __gnu_cxx::__numeric_traits<float>::__max_exponent10 + 20;
-40039:     return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf, __n,
-40039:          L"%f", __val);
-40039:   }
-40039: 
-40039:   inline wstring
-40039:   to_wstring(double __val)
-40039:   {
-40039:     const int __n =
-40039:       __gnu_cxx::__numeric_traits<double>::__max_exponent10 + 20;
-40039:     return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf, __n,
-40039:          L"%f", __val);
-40039:   }
-40039: 
-40039:   inline wstring
-40039:   to_wstring(long double __val)
-40039:   {
-40039:     const int __n =
-40039:       __gnu_cxx::__numeric_traits<long double>::__max_exponent10 + 20;
-40039:     return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf, __n,
-40039:          L"%Lf", __val);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/functional_hash.h" 1 3
-40039: # 33 "/usr/include/c++/8/bits/functional_hash.h" 3
-40039:        
-40039: # 34 "/usr/include/c++/8/bits/functional_hash.h" 3
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 49 "/usr/include/c++/8/bits/functional_hash.h" 3
-40039:   template<typename _Result, typename _Arg>
-40039:     struct __hash_base
-40039:     {
-40039:       typedef _Result result_type ;
-40039:       typedef _Arg argument_type ;
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct hash;
-40039: 
-40039:   template<typename _Tp, typename = void>
-40039:     struct __poison_hash
-40039:     {
-40039:       static constexpr bool __enable_hash_call = false;
-40039:     private:
-40039: 
-40039:       __poison_hash(__poison_hash&&);
-40039:       ~__poison_hash();
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __poison_hash<_Tp, __void_t<decltype(hash<_Tp>()(declval<_Tp>()))>>
-40039:     {
-40039:       static constexpr bool __enable_hash_call = true;
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp, bool = is_enum<_Tp>::value>
-40039:     struct __hash_enum
-40039:     {
-40039:     private:
-40039: 
-40039:       __hash_enum(__hash_enum&&);
-40039:       ~__hash_enum();
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __hash_enum<_Tp, true> : public __hash_base<size_t, _Tp>
-40039:     {
-40039:       size_t
-40039:       operator()(_Tp __val) const noexcept
-40039:       {
-40039:        using __type = typename underlying_type<_Tp>::type;
-40039:        return hash<__type>{}(static_cast<__type>(__val));
-40039:       }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct hash : __hash_enum<_Tp>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct hash<_Tp*> : public __hash_base<size_t, _Tp*>
-40039:     {
-40039:       size_t
-40039:       operator()(_Tp* __p) const noexcept
-40039:       { return reinterpret_cast<size_t>(__p); }
-40039:     };
-40039: # 124 "/usr/include/c++/8/bits/functional_hash.h" 3
-40039:   template<> struct hash<bool> : public __hash_base<size_t, bool> { size_t operator()(bool __val) const noexcept { return static_cast<size_t>(__val); } };
-40039: 
-40039: 
-40039:   template<> struct hash<char> : public __hash_base<size_t, char> { size_t operator()(char __val) const noexcept { return static_cast<size_t>(__val); } };
-40039: 
-40039: 
-40039:   template<> struct hash<signed char> : public __hash_base<size_t, signed char> { size_t operator()(signed char __val) const noexcept { return static_cast<size_t>(__val); } };
-40039: 
-40039: 
-40039:   template<> struct hash<unsigned char> : public __hash_base<size_t, unsigned char> { size_t operator()(unsigned char __val) const noexcept { return static_cast<size_t>(__val); } };
-40039: 
-40039: 
-40039:   template<> struct hash<wchar_t> : public __hash_base<size_t, wchar_t> { size_t operator()(wchar_t __val) const noexcept { return static_cast<size_t>(__val); } };
-40039: 
-40039: 
-40039:   template<> struct hash<char16_t> : public __hash_base<size_t, char16_t> { size_t operator()(char16_t __val) const noexcept { return static_cast<size_t>(__val); } };
-40039: 
-40039: 
-40039:   template<> struct hash<char32_t> : public __hash_base<size_t, char32_t> { size_t operator()(char32_t __val) const noexcept { return static_cast<size_t>(__val); } };
-40039: 
-40039: 
-40039:   template<> struct hash<short> : public __hash_base<size_t, short> { size_t operator()(short __val) const noexcept { return static_cast<size_t>(__val); } };
-40039: 
-40039: 
-40039:   template<> struct hash<int> : public __hash_base<size_t, int> { size_t operator()(int __val) const noexcept { return static_cast<size_t>(__val); } };
-40039: 
-40039: 
-40039:   template<> struct hash<long> : public __hash_base<size_t, long> { size_t operator()(long __val) const noexcept { return static_cast<size_t>(__val); } };
-40039: 
-40039: 
-40039:   template<> struct hash<long long> : public __hash_base<size_t, long long> { size_t operator()(long long __val) const noexcept { return static_cast<size_t>(__val); } };
-40039: 
-40039: 
-40039:   template<> struct hash<unsigned short> : public __hash_base<size_t, unsigned short> { size_t operator()(unsigned short __val) const noexcept { return static_cast<size_t>(__val); } };
-40039: 
-40039: 
-40039:   template<> struct hash<unsigned int> : public __hash_base<size_t, unsigned int> { size_t operator()(unsigned int __val) const noexcept { return static_cast<size_t>(__val); } };
-40039: 
-40039: 
-40039:   template<> struct hash<unsigned long> : public __hash_base<size_t, unsigned long> { size_t operator()(unsigned long __val) const noexcept { return static_cast<size_t>(__val); } };
-40039: 
-40039: 
-40039:   template<> struct hash<unsigned long long> : public __hash_base<size_t, unsigned long long> { size_t operator()(unsigned long long __val) const noexcept { return static_cast<size_t>(__val); } };
-40039: 
-40039: 
-40039:   template<> struct hash<__int128> : public __hash_base<size_t, __int128> { size_t operator()(__int128 __val) const noexcept { return static_cast<size_t>(__val); } };
-40039:   template<> struct hash<__int128 unsigned> : public __hash_base<size_t, __int128 unsigned> { size_t operator()(__int128 unsigned __val) const noexcept { return static_cast<size_t>(__val); } };
-40039: # 187 "/usr/include/c++/8/bits/functional_hash.h" 3
-40039:   struct _Hash_impl
-40039:   {
-40039:     static size_t
-40039:     hash(const void* __ptr, size_t __clength,
-40039:   size_t __seed = static_cast<size_t>(0xc70f6907UL))
-40039:     { return _Hash_bytes(__ptr, __clength, __seed); }
-40039: 
-40039:     template<typename _Tp>
-40039:       static size_t
-40039:       hash(const _Tp& __val)
-40039:       { return hash(&__val, sizeof(__val)); }
-40039: 
-40039:     template<typename _Tp>
-40039:       static size_t
-40039:       __hash_combine(const _Tp& __val, size_t __hash)
-40039:       { return hash(&__val, sizeof(__val), __hash); }
-40039:   };
-40039: 
-40039: 
-40039:   struct _Fnv_hash_impl
-40039:   {
-40039:     static size_t
-40039:     hash(const void* __ptr, size_t __clength,
-40039:   size_t __seed = static_cast<size_t>(2166136261UL))
-40039:     { return _Fnv_hash_bytes(__ptr, __clength, __seed); }
-40039: 
-40039:     template<typename _Tp>
-40039:       static size_t
-40039:       hash(const _Tp& __val)
-40039:       { return hash(&__val, sizeof(__val)); }
-40039: 
-40039:     template<typename _Tp>
-40039:       static size_t
-40039:       __hash_combine(const _Tp& __val, size_t __hash)
-40039:       { return hash(&__val, sizeof(__val), __hash); }
-40039:   };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct hash<float> : public __hash_base<size_t, float>
-40039:     {
-40039:       size_t
-40039:       operator()(float __val) const noexcept
-40039:       {
-40039: 
-40039:  return __val != 0.0f ? std::_Hash_impl::hash(__val) : 0;
-40039:       }
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct hash<double> : public __hash_base<size_t, double>
-40039:     {
-40039:       size_t
-40039:       operator()(double __val) const noexcept
-40039:       {
-40039: 
-40039:  return __val != 0.0 ? std::_Hash_impl::hash(__val) : 0;
-40039:       }
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct hash<long double>
-40039:     : public __hash_base<size_t, long double>
-40039:     {
-40039:       __attribute__ ((__pure__)) size_t
-40039:       operator()(long double __val) const noexcept;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Hash>
-40039:     struct __is_fast_hash : public std::true_type
-40039:     { };
-40039: 
-40039:   template<>
-40039:     struct __is_fast_hash<hash<long double>> : public std::false_type
-40039:     { };
-40039: 
-40039: 
-40039: }
-40039: # 6627 "/usr/include/c++/8/bits/basic_string.h" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<>
-40039:     struct hash<string>
-40039:     : public __hash_base<size_t, string>
-40039:     {
-40039:       size_t
-40039:       operator()(const string& __s) const noexcept
-40039:       { return std::_Hash_impl::hash(__s.data(), __s.length()); }
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __is_fast_hash<hash<string>> : std::false_type
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039:   template<>
-40039:     struct hash<wstring>
-40039:     : public __hash_base<size_t, wstring>
-40039:     {
-40039:       size_t
-40039:       operator()(const wstring& __s) const noexcept
-40039:       { return std::_Hash_impl::hash(__s.data(),
-40039:                                      __s.length() * sizeof(wchar_t)); }
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __is_fast_hash<hash<wstring>> : std::false_type
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<>
-40039:     struct hash<u16string>
-40039:     : public __hash_base<size_t, u16string>
-40039:     {
-40039:       size_t
-40039:       operator()(const u16string& __s) const noexcept
-40039:       { return std::_Hash_impl::hash(__s.data(),
-40039:                                      __s.length() * sizeof(char16_t)); }
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __is_fast_hash<hash<u16string>> : std::false_type
-40039:     { };
-40039: 
-40039: 
-40039:   template<>
-40039:     struct hash<u32string>
-40039:     : public __hash_base<size_t, u32string>
-40039:     {
-40039:       size_t
-40039:       operator()(const u32string& __s) const noexcept
-40039:       { return std::_Hash_impl::hash(__s.data(),
-40039:                                      __s.length() * sizeof(char32_t)); }
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __is_fast_hash<hash<u32string>> : std::false_type
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   inline namespace literals
-40039:   {
-40039:   inline namespace string_literals
-40039:   {
-40039: #pragma GCC diagnostic push
-40039: #pragma GCC diagnostic ignored "-Wliteral-suffix"
-40039:     __attribute ((__abi_tag__ ("cxx11")))
-40039:     inline basic_string<char>
-40039:     operator""s(const char* __str, size_t __len)
-40039:     { return basic_string<char>{__str, __len}; }
-40039: 
-40039: 
-40039:     __attribute ((__abi_tag__ ("cxx11")))
-40039:     inline basic_string<wchar_t>
-40039:     operator""s(const wchar_t* __str, size_t __len)
-40039:     { return basic_string<wchar_t>{__str, __len}; }
-40039: 
-40039: 
-40039: 
-40039:     __attribute ((__abi_tag__ ("cxx11")))
-40039:     inline basic_string<char16_t>
-40039:     operator""s(const char16_t* __str, size_t __len)
-40039:     { return basic_string<char16_t>{__str, __len}; }
-40039: 
-40039:     __attribute ((__abi_tag__ ("cxx11")))
-40039:     inline basic_string<char32_t>
-40039:     operator""s(const char32_t* __str, size_t __len)
-40039:     { return basic_string<char32_t>{__str, __len}; }
-40039: 
-40039: 
-40039: #pragma GCC diagnostic pop
-40039:   }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 53 "/usr/include/c++/8/string" 2 3
-40039: # 1 "/usr/include/c++/8/bits/basic_string.tcc" 1 3
-40039: # 42 "/usr/include/c++/8/bits/basic_string.tcc" 3
-40039:        
-40039: # 43 "/usr/include/c++/8/bits/basic_string.tcc" 3
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     const typename basic_string<_CharT, _Traits, _Alloc>::size_type
-40039:     basic_string<_CharT, _Traits, _Alloc>::npos;
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     void
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     swap(basic_string& __s) noexcept
-40039:     {
-40039:       if (this == &__s)
-40039:  return;
-40039: 
-40039:       _Alloc_traits::_S_on_swap(_M_get_allocator(), __s._M_get_allocator());
-40039: 
-40039:       if (_M_is_local())
-40039:  if (__s._M_is_local())
-40039:    {
-40039:      if (length() && __s.length())
-40039:        {
-40039:   _CharT __tmp_data[_S_local_capacity + 1];
-40039:   traits_type::copy(__tmp_data, __s._M_local_buf,
-40039:       _S_local_capacity + 1);
-40039:   traits_type::copy(__s._M_local_buf, _M_local_buf,
-40039:       _S_local_capacity + 1);
-40039:   traits_type::copy(_M_local_buf, __tmp_data,
-40039:       _S_local_capacity + 1);
-40039:        }
-40039:      else if (__s.length())
-40039:        {
-40039:   traits_type::copy(_M_local_buf, __s._M_local_buf,
-40039:       _S_local_capacity + 1);
-40039:   _M_length(__s.length());
-40039:   __s._M_set_length(0);
-40039:   return;
-40039:        }
-40039:      else if (length())
-40039:        {
-40039:   traits_type::copy(__s._M_local_buf, _M_local_buf,
-40039:       _S_local_capacity + 1);
-40039:   __s._M_length(length());
-40039:   _M_set_length(0);
-40039:   return;
-40039:        }
-40039:    }
-40039:  else
-40039:    {
-40039:      const size_type __tmp_capacity = __s._M_allocated_capacity;
-40039:      traits_type::copy(__s._M_local_buf, _M_local_buf,
-40039:          _S_local_capacity + 1);
-40039:      _M_data(__s._M_data());
-40039:      __s._M_data(__s._M_local_buf);
-40039:      _M_capacity(__tmp_capacity);
-40039:    }
-40039:       else
-40039:  {
-40039:    const size_type __tmp_capacity = _M_allocated_capacity;
-40039:    if (__s._M_is_local())
-40039:      {
-40039:        traits_type::copy(_M_local_buf, __s._M_local_buf,
-40039:     _S_local_capacity + 1);
-40039:        __s._M_data(_M_data());
-40039:        _M_data(_M_local_buf);
-40039:      }
-40039:    else
-40039:      {
-40039:        pointer __tmp_ptr = _M_data();
-40039:        _M_data(__s._M_data());
-40039:        __s._M_data(__tmp_ptr);
-40039:        _M_capacity(__s._M_allocated_capacity);
-40039:      }
-40039:    __s._M_capacity(__tmp_capacity);
-40039:  }
-40039: 
-40039:       const size_type __tmp_length = length();
-40039:       _M_length(__s.length());
-40039:       __s._M_length(__tmp_length);
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     typename basic_string<_CharT, _Traits, _Alloc>::pointer
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     _M_create(size_type& __capacity, size_type __old_capacity)
-40039:     {
-40039: 
-40039: 
-40039:       if (__capacity > max_size())
-40039:  std::__throw_length_error(("basic_string::_M_create"));
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       if (__capacity > __old_capacity && __capacity < 2 * __old_capacity)
-40039:  {
-40039:    __capacity = 2 * __old_capacity;
-40039: 
-40039:    if (__capacity > max_size())
-40039:      __capacity = max_size();
-40039:  }
-40039: 
-40039: 
-40039: 
-40039:       return _Alloc_traits::allocate(_M_get_allocator(), __capacity + 1);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     template<typename _InIterator>
-40039:       void
-40039:       basic_string<_CharT, _Traits, _Alloc>::
-40039:       _M_construct(_InIterator __beg, _InIterator __end,
-40039:      std::input_iterator_tag)
-40039:       {
-40039:  size_type __len = 0;
-40039:  size_type __capacity = size_type(_S_local_capacity);
-40039: 
-40039:  while (__beg != __end && __len < __capacity)
-40039:    {
-40039:      _M_data()[__len++] = *__beg;
-40039:      ++__beg;
-40039:    }
-40039: 
-40039:  try
-40039:    {
-40039:      while (__beg != __end)
-40039:        {
-40039:   if (__len == __capacity)
-40039:     {
-40039: 
-40039:       __capacity = __len + 1;
-40039:       pointer __another = _M_create(__capacity, __len);
-40039:       this->_S_copy(__another, _M_data(), __len);
-40039:       _M_dispose();
-40039:       _M_data(__another);
-40039:       _M_capacity(__capacity);
-40039:     }
-40039:   _M_data()[__len++] = *__beg;
-40039:   ++__beg;
-40039:        }
-40039:    }
-40039:  catch(...)
-40039:    {
-40039:      _M_dispose();
-40039:      throw;
-40039:    }
-40039: 
-40039:  _M_set_length(__len);
-40039:       }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     template<typename _InIterator>
-40039:       void
-40039:       basic_string<_CharT, _Traits, _Alloc>::
-40039:       _M_construct(_InIterator __beg, _InIterator __end,
-40039:      std::forward_iterator_tag)
-40039:       {
-40039: 
-40039:  if (__gnu_cxx::__is_null_pointer(__beg) && __beg != __end)
-40039:    std::__throw_logic_error(("basic_string::" "_M_construct null not valid")
-40039:                                          );
-40039: 
-40039:  size_type __dnew = static_cast<size_type>(std::distance(__beg, __end));
-40039: 
-40039:  if (__dnew > size_type(_S_local_capacity))
-40039:    {
-40039:      _M_data(_M_create(__dnew, size_type(0)));
-40039:      _M_capacity(__dnew);
-40039:    }
-40039: 
-40039: 
-40039:  try
-40039:    { this->_S_copy_chars(_M_data(), __beg, __end); }
-40039:  catch(...)
-40039:    {
-40039:      _M_dispose();
-40039:      throw;
-40039:    }
-40039: 
-40039:  _M_set_length(__dnew);
-40039:       }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     void
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     _M_construct(size_type __n, _CharT __c)
-40039:     {
-40039:       if (__n > size_type(_S_local_capacity))
-40039:  {
-40039:    _M_data(_M_create(__n, size_type(0)));
-40039:    _M_capacity(__n);
-40039:  }
-40039: 
-40039:       if (__n)
-40039:  this->_S_assign(_M_data(), __n, __c);
-40039: 
-40039:       _M_set_length(__n);
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     void
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     _M_assign(const basic_string& __str)
-40039:     {
-40039:       if (this != &__str)
-40039:  {
-40039:    const size_type __rsize = __str.length();
-40039:    const size_type __capacity = capacity();
-40039: 
-40039:    if (__rsize > __capacity)
-40039:      {
-40039:        size_type __new_capacity = __rsize;
-40039:        pointer __tmp = _M_create(__new_capacity, __capacity);
-40039:        _M_dispose();
-40039:        _M_data(__tmp);
-40039:        _M_capacity(__new_capacity);
-40039:      }
-40039: 
-40039:    if (__rsize)
-40039:      this->_S_copy(_M_data(), __str._M_data(), __rsize);
-40039: 
-40039:    _M_set_length(__rsize);
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     void
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     reserve(size_type __res)
-40039:     {
-40039: 
-40039:       if (__res < length())
-40039:  __res = length();
-40039: 
-40039:       const size_type __capacity = capacity();
-40039:       if (__res != __capacity)
-40039:  {
-40039:    if (__res > __capacity
-40039:        || __res > size_type(_S_local_capacity))
-40039:      {
-40039:        pointer __tmp = _M_create(__res, __capacity);
-40039:        this->_S_copy(__tmp, _M_data(), length() + 1);
-40039:        _M_dispose();
-40039:        _M_data(__tmp);
-40039:        _M_capacity(__res);
-40039:      }
-40039:    else if (!_M_is_local())
-40039:      {
-40039:        this->_S_copy(_M_local_data(), _M_data(), length() + 1);
-40039:        _M_destroy(__capacity);
-40039:        _M_data(_M_local_data());
-40039:      }
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     void
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     _M_mutate(size_type __pos, size_type __len1, const _CharT* __s,
-40039:        size_type __len2)
-40039:     {
-40039:       const size_type __how_much = length() - __pos - __len1;
-40039: 
-40039:       size_type __new_capacity = length() + __len2 - __len1;
-40039:       pointer __r = _M_create(__new_capacity, capacity());
-40039: 
-40039:       if (__pos)
-40039:  this->_S_copy(__r, _M_data(), __pos);
-40039:       if (__s && __len2)
-40039:  this->_S_copy(__r + __pos, __s, __len2);
-40039:       if (__how_much)
-40039:  this->_S_copy(__r + __pos + __len2,
-40039:         _M_data() + __pos + __len1, __how_much);
-40039: 
-40039:       _M_dispose();
-40039:       _M_data(__r);
-40039:       _M_capacity(__new_capacity);
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     void
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     _M_erase(size_type __pos, size_type __n)
-40039:     {
-40039:       const size_type __how_much = length() - __pos - __n;
-40039: 
-40039:       if (__how_much && __n)
-40039:  this->_S_move(_M_data() + __pos, _M_data() + __pos + __n, __how_much);
-40039: 
-40039:       _M_set_length(length() - __n);
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     void
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     resize(size_type __n, _CharT __c)
-40039:     {
-40039:       const size_type __size = this->size();
-40039:       if (__size < __n)
-40039:  this->append(__n - __size, __c);
-40039:       else if (__n < __size)
-40039:  this->_M_set_length(__n);
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     basic_string<_CharT, _Traits, _Alloc>&
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     _M_append(const _CharT* __s, size_type __n)
-40039:     {
-40039:       const size_type __len = __n + this->size();
-40039: 
-40039:       if (__len <= this->capacity())
-40039:  {
-40039:    if (__n)
-40039:      this->_S_copy(this->_M_data() + this->size(), __s, __n);
-40039:  }
-40039:       else
-40039:  this->_M_mutate(this->size(), size_type(0), __s, __n);
-40039: 
-40039:       this->_M_set_length(__len);
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     template<typename _InputIterator>
-40039:       basic_string<_CharT, _Traits, _Alloc>&
-40039:       basic_string<_CharT, _Traits, _Alloc>::
-40039:       _M_replace_dispatch(const_iterator __i1, const_iterator __i2,
-40039:      _InputIterator __k1, _InputIterator __k2,
-40039:      std::__false_type)
-40039:       {
-40039:  const basic_string __s(__k1, __k2);
-40039:  const size_type __n1 = __i2 - __i1;
-40039:  return _M_replace(__i1 - begin(), __n1, __s._M_data(),
-40039:      __s.size());
-40039:       }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     basic_string<_CharT, _Traits, _Alloc>&
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2,
-40039:      _CharT __c)
-40039:     {
-40039:       _M_check_length(__n1, __n2, "basic_string::_M_replace_aux");
-40039: 
-40039:       const size_type __old_size = this->size();
-40039:       const size_type __new_size = __old_size + __n2 - __n1;
-40039: 
-40039:       if (__new_size <= this->capacity())
-40039:  {
-40039:    pointer __p = this->_M_data() + __pos1;
-40039: 
-40039:    const size_type __how_much = __old_size - __pos1 - __n1;
-40039:    if (__how_much && __n1 != __n2)
-40039:      this->_S_move(__p + __n2, __p + __n1, __how_much);
-40039:  }
-40039:       else
-40039:  this->_M_mutate(__pos1, __n1, 0, __n2);
-40039: 
-40039:       if (__n2)
-40039:  this->_S_assign(this->_M_data() + __pos1, __n2, __c);
-40039: 
-40039:       this->_M_set_length(__new_size);
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     basic_string<_CharT, _Traits, _Alloc>&
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     _M_replace(size_type __pos, size_type __len1, const _CharT* __s,
-40039:         const size_type __len2)
-40039:     {
-40039:       _M_check_length(__len1, __len2, "basic_string::_M_replace");
-40039: 
-40039:       const size_type __old_size = this->size();
-40039:       const size_type __new_size = __old_size + __len2 - __len1;
-40039: 
-40039:       if (__new_size <= this->capacity())
-40039:  {
-40039:    pointer __p = this->_M_data() + __pos;
-40039: 
-40039:    const size_type __how_much = __old_size - __pos - __len1;
-40039:    if (_M_disjunct(__s))
-40039:      {
-40039:        if (__how_much && __len1 != __len2)
-40039:   this->_S_move(__p + __len2, __p + __len1, __how_much);
-40039:        if (__len2)
-40039:   this->_S_copy(__p, __s, __len2);
-40039:      }
-40039:    else
-40039:      {
-40039: 
-40039:        if (__len2 && __len2 <= __len1)
-40039:   this->_S_move(__p, __s, __len2);
-40039:        if (__how_much && __len1 != __len2)
-40039:   this->_S_move(__p + __len2, __p + __len1, __how_much);
-40039:        if (__len2 > __len1)
-40039:   {
-40039:     if (__s + __len2 <= __p + __len1)
-40039:       this->_S_move(__p, __s, __len2);
-40039:     else if (__s >= __p + __len1)
-40039:       this->_S_copy(__p, __s + __len2 - __len1, __len2);
-40039:     else
-40039:       {
-40039:         const size_type __nleft = (__p + __len1) - __s;
-40039:         this->_S_move(__p, __s, __nleft);
-40039:         this->_S_copy(__p + __nleft, __p + __len2,
-40039:         __len2 - __nleft);
-40039:       }
-40039:   }
-40039:      }
-40039:  }
-40039:       else
-40039:  this->_M_mutate(__pos, __len1, __s, __len2);
-40039: 
-40039:       this->_M_set_length(__new_size);
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     typename basic_string<_CharT, _Traits, _Alloc>::size_type
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     copy(_CharT* __s, size_type __n, size_type __pos) const
-40039:     {
-40039:       _M_check(__pos, "basic_string::copy");
-40039:       __n = _M_limit(__pos, __n);
-40039:       ;
-40039:       if (__n)
-40039:  _S_copy(__s, _M_data() + __pos, __n);
-40039: 
-40039:       return __n;
-40039:     }
-40039: # 1155 "/usr/include/c++/8/bits/basic_string.tcc" 3
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     basic_string<_CharT, _Traits, _Alloc>
-40039:     operator+(const _CharT* __lhs,
-40039:        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
-40039:     {
-40039:       ;
-40039:       typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
-40039:       typedef typename __string_type::size_type __size_type;
-40039:       const __size_type __len = _Traits::length(__lhs);
-40039:       __string_type __str;
-40039:       __str.reserve(__len + __rhs.size());
-40039:       __str.append(__lhs, __len);
-40039:       __str.append(__rhs);
-40039:       return __str;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     basic_string<_CharT, _Traits, _Alloc>
-40039:     operator+(_CharT __lhs, const basic_string<_CharT, _Traits, _Alloc>& __rhs)
-40039:     {
-40039:       typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
-40039:       typedef typename __string_type::size_type __size_type;
-40039:       __string_type __str;
-40039:       const __size_type __len = __rhs.size();
-40039:       __str.reserve(__len + 1);
-40039:       __str.append(__size_type(1), __lhs);
-40039:       __str.append(__rhs);
-40039:       return __str;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     typename basic_string<_CharT, _Traits, _Alloc>::size_type
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     find(const _CharT* __s, size_type __pos, size_type __n) const
-40039:     noexcept
-40039:     {
-40039:       ;
-40039:       const size_type __size = this->size();
-40039: 
-40039:       if (__n == 0)
-40039:  return __pos <= __size ? __pos : npos;
-40039:       if (__pos >= __size)
-40039:  return npos;
-40039: 
-40039:       const _CharT __elem0 = __s[0];
-40039:       const _CharT* const __data = data();
-40039:       const _CharT* __first = __data + __pos;
-40039:       const _CharT* const __last = __data + __size;
-40039:       size_type __len = __size - __pos;
-40039: 
-40039:       while (__len >= __n)
-40039:  {
-40039: 
-40039:    __first = traits_type::find(__first, __len - __n + 1, __elem0);
-40039:    if (!__first)
-40039:      return npos;
-40039: 
-40039: 
-40039: 
-40039:    if (traits_type::compare(__first, __s, __n) == 0)
-40039:      return __first - __data;
-40039:    __len = __last - ++__first;
-40039:  }
-40039:       return npos;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     typename basic_string<_CharT, _Traits, _Alloc>::size_type
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     find(_CharT __c, size_type __pos) const noexcept
-40039:     {
-40039:       size_type __ret = npos;
-40039:       const size_type __size = this->size();
-40039:       if (__pos < __size)
-40039:  {
-40039:    const _CharT* __data = _M_data();
-40039:    const size_type __n = __size - __pos;
-40039:    const _CharT* __p = traits_type::find(__data + __pos, __n, __c);
-40039:    if (__p)
-40039:      __ret = __p - __data;
-40039:  }
-40039:       return __ret;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     typename basic_string<_CharT, _Traits, _Alloc>::size_type
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     rfind(const _CharT* __s, size_type __pos, size_type __n) const
-40039:     noexcept
-40039:     {
-40039:       ;
-40039:       const size_type __size = this->size();
-40039:       if (__n <= __size)
-40039:  {
-40039:    __pos = std::min(size_type(__size - __n), __pos);
-40039:    const _CharT* __data = _M_data();
-40039:    do
-40039:      {
-40039:        if (traits_type::compare(__data + __pos, __s, __n) == 0)
-40039:   return __pos;
-40039:      }
-40039:    while (__pos-- > 0);
-40039:  }
-40039:       return npos;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     typename basic_string<_CharT, _Traits, _Alloc>::size_type
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     rfind(_CharT __c, size_type __pos) const noexcept
-40039:     {
-40039:       size_type __size = this->size();
-40039:       if (__size)
-40039:  {
-40039:    if (--__size > __pos)
-40039:      __size = __pos;
-40039:    for (++__size; __size-- > 0; )
-40039:      if (traits_type::eq(_M_data()[__size], __c))
-40039:        return __size;
-40039:  }
-40039:       return npos;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     typename basic_string<_CharT, _Traits, _Alloc>::size_type
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     find_first_of(const _CharT* __s, size_type __pos, size_type __n) const
-40039:     noexcept
-40039:     {
-40039:       ;
-40039:       for (; __n && __pos < this->size(); ++__pos)
-40039:  {
-40039:    const _CharT* __p = traits_type::find(__s, __n, _M_data()[__pos]);
-40039:    if (__p)
-40039:      return __pos;
-40039:  }
-40039:       return npos;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     typename basic_string<_CharT, _Traits, _Alloc>::size_type
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     find_last_of(const _CharT* __s, size_type __pos, size_type __n) const
-40039:     noexcept
-40039:     {
-40039:       ;
-40039:       size_type __size = this->size();
-40039:       if (__size && __n)
-40039:  {
-40039:    if (--__size > __pos)
-40039:      __size = __pos;
-40039:    do
-40039:      {
-40039:        if (traits_type::find(__s, __n, _M_data()[__size]))
-40039:   return __size;
-40039:      }
-40039:    while (__size-- != 0);
-40039:  }
-40039:       return npos;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     typename basic_string<_CharT, _Traits, _Alloc>::size_type
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     find_first_not_of(const _CharT* __s, size_type __pos, size_type __n) const
-40039:     noexcept
-40039:     {
-40039:       ;
-40039:       for (; __pos < this->size(); ++__pos)
-40039:  if (!traits_type::find(__s, __n, _M_data()[__pos]))
-40039:    return __pos;
-40039:       return npos;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     typename basic_string<_CharT, _Traits, _Alloc>::size_type
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     find_first_not_of(_CharT __c, size_type __pos) const noexcept
-40039:     {
-40039:       for (; __pos < this->size(); ++__pos)
-40039:  if (!traits_type::eq(_M_data()[__pos], __c))
-40039:    return __pos;
-40039:       return npos;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     typename basic_string<_CharT, _Traits, _Alloc>::size_type
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     find_last_not_of(const _CharT* __s, size_type __pos, size_type __n) const
-40039:     noexcept
-40039:     {
-40039:       ;
-40039:       size_type __size = this->size();
-40039:       if (__size)
-40039:  {
-40039:    if (--__size > __pos)
-40039:      __size = __pos;
-40039:    do
-40039:      {
-40039:        if (!traits_type::find(__s, __n, _M_data()[__size]))
-40039:   return __size;
-40039:      }
-40039:    while (__size--);
-40039:  }
-40039:       return npos;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     typename basic_string<_CharT, _Traits, _Alloc>::size_type
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     find_last_not_of(_CharT __c, size_type __pos) const noexcept
-40039:     {
-40039:       size_type __size = this->size();
-40039:       if (__size)
-40039:  {
-40039:    if (--__size > __pos)
-40039:      __size = __pos;
-40039:    do
-40039:      {
-40039:        if (!traits_type::eq(_M_data()[__size], __c))
-40039:   return __size;
-40039:      }
-40039:    while (__size--);
-40039:  }
-40039:       return npos;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     int
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     compare(size_type __pos, size_type __n, const basic_string& __str) const
-40039:     {
-40039:       _M_check(__pos, "basic_string::compare");
-40039:       __n = _M_limit(__pos, __n);
-40039:       const size_type __osize = __str.size();
-40039:       const size_type __len = std::min(__n, __osize);
-40039:       int __r = traits_type::compare(_M_data() + __pos, __str.data(), __len);
-40039:       if (!__r)
-40039:  __r = _S_compare(__n, __osize);
-40039:       return __r;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     int
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     compare(size_type __pos1, size_type __n1, const basic_string& __str,
-40039:      size_type __pos2, size_type __n2) const
-40039:     {
-40039:       _M_check(__pos1, "basic_string::compare");
-40039:       __str._M_check(__pos2, "basic_string::compare");
-40039:       __n1 = _M_limit(__pos1, __n1);
-40039:       __n2 = __str._M_limit(__pos2, __n2);
-40039:       const size_type __len = std::min(__n1, __n2);
-40039:       int __r = traits_type::compare(_M_data() + __pos1,
-40039:          __str.data() + __pos2, __len);
-40039:       if (!__r)
-40039:  __r = _S_compare(__n1, __n2);
-40039:       return __r;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     int
-40039:     basic_string<_CharT, _Traits, _Alloc>::
-40039:     compare(const _CharT* __s) const noexcept
-40039:     {
-40039:       ;
-40039:       const size_type __size = this->size();
-40039:       const size_type __osize = traits_type::length(__s);
-40039:       const size_type __len = std::min(__size, __osize);
-40039:       int __r = traits_type::compare(_M_data(), __s, __len);
-40039:       if (!__r)
-40039:  __r = _S_compare(__size, __osize);
-40039:       return __r;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     int
-40039:     basic_string <_CharT, _Traits, _Alloc>::
-40039:     compare(size_type __pos, size_type __n1, const _CharT* __s) const
-40039:     {
-40039:       ;
-40039:       _M_check(__pos, "basic_string::compare");
-40039:       __n1 = _M_limit(__pos, __n1);
-40039:       const size_type __osize = traits_type::length(__s);
-40039:       const size_type __len = std::min(__n1, __osize);
-40039:       int __r = traits_type::compare(_M_data() + __pos, __s, __len);
-40039:       if (!__r)
-40039:  __r = _S_compare(__n1, __osize);
-40039:       return __r;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     int
-40039:     basic_string <_CharT, _Traits, _Alloc>::
-40039:     compare(size_type __pos, size_type __n1, const _CharT* __s,
-40039:      size_type __n2) const
-40039:     {
-40039:       ;
-40039:       _M_check(__pos, "basic_string::compare");
-40039:       __n1 = _M_limit(__pos, __n1);
-40039:       const size_type __len = std::min(__n1, __n2);
-40039:       int __r = traits_type::compare(_M_data() + __pos, __s, __len);
-40039:       if (!__r)
-40039:  __r = _S_compare(__n1, __n2);
-40039:       return __r;
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     operator>>(basic_istream<_CharT, _Traits>& __in,
-40039:         basic_string<_CharT, _Traits, _Alloc>& __str)
-40039:     {
-40039:       typedef basic_istream<_CharT, _Traits> __istream_type;
-40039:       typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
-40039:       typedef typename __istream_type::ios_base __ios_base;
-40039:       typedef typename __istream_type::int_type __int_type;
-40039:       typedef typename __string_type::size_type __size_type;
-40039:       typedef ctype<_CharT> __ctype_type;
-40039:       typedef typename __ctype_type::ctype_base __ctype_base;
-40039: 
-40039:       __size_type __extracted = 0;
-40039:       typename __ios_base::iostate __err = __ios_base::goodbit;
-40039:       typename __istream_type::sentry __cerb(__in, false);
-40039:       if (__cerb)
-40039:  {
-40039:    try
-40039:      {
-40039: 
-40039:        __str.erase();
-40039:        _CharT __buf[128];
-40039:        __size_type __len = 0;
-40039:        const streamsize __w = __in.width();
-40039:        const __size_type __n = __w > 0 ? static_cast<__size_type>(__w)
-40039:                                 : __str.max_size();
-40039:        const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc());
-40039:        const __int_type __eof = _Traits::eof();
-40039:        __int_type __c = __in.rdbuf()->sgetc();
-40039: 
-40039:        while (__extracted < __n
-40039:        && !_Traits::eq_int_type(__c, __eof)
-40039:        && !__ct.is(__ctype_base::space,
-40039:      _Traits::to_char_type(__c)))
-40039:   {
-40039:     if (__len == sizeof(__buf) / sizeof(_CharT))
-40039:       {
-40039:         __str.append(__buf, sizeof(__buf) / sizeof(_CharT));
-40039:         __len = 0;
-40039:       }
-40039:     __buf[__len++] = _Traits::to_char_type(__c);
-40039:     ++__extracted;
-40039:     __c = __in.rdbuf()->snextc();
-40039:   }
-40039:        __str.append(__buf, __len);
-40039: 
-40039:        if (_Traits::eq_int_type(__c, __eof))
-40039:   __err |= __ios_base::eofbit;
-40039:        __in.width(0);
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        __in._M_setstate(__ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      {
-40039: 
-40039: 
-40039: 
-40039:        __in._M_setstate(__ios_base::badbit);
-40039:      }
-40039:  }
-40039: 
-40039:       if (!__extracted)
-40039:  __err |= __ios_base::failbit;
-40039:       if (__err)
-40039:  __in.setstate(__err);
-40039:       return __in;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     getline(basic_istream<_CharT, _Traits>& __in,
-40039:      basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim)
-40039:     {
-40039:       typedef basic_istream<_CharT, _Traits> __istream_type;
-40039:       typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
-40039:       typedef typename __istream_type::ios_base __ios_base;
-40039:       typedef typename __istream_type::int_type __int_type;
-40039:       typedef typename __string_type::size_type __size_type;
-40039: 
-40039:       __size_type __extracted = 0;
-40039:       const __size_type __n = __str.max_size();
-40039:       typename __ios_base::iostate __err = __ios_base::goodbit;
-40039:       typename __istream_type::sentry __cerb(__in, true);
-40039:       if (__cerb)
-40039:  {
-40039:    try
-40039:      {
-40039:        __str.erase();
-40039:        const __int_type __idelim = _Traits::to_int_type(__delim);
-40039:        const __int_type __eof = _Traits::eof();
-40039:        __int_type __c = __in.rdbuf()->sgetc();
-40039: 
-40039:        while (__extracted < __n
-40039:        && !_Traits::eq_int_type(__c, __eof)
-40039:        && !_Traits::eq_int_type(__c, __idelim))
-40039:   {
-40039:     __str += _Traits::to_char_type(__c);
-40039:     ++__extracted;
-40039:     __c = __in.rdbuf()->snextc();
-40039:   }
-40039: 
-40039:        if (_Traits::eq_int_type(__c, __eof))
-40039:   __err |= __ios_base::eofbit;
-40039:        else if (_Traits::eq_int_type(__c, __idelim))
-40039:   {
-40039:     ++__extracted;
-40039:     __in.rdbuf()->sbumpc();
-40039:   }
-40039:        else
-40039:   __err |= __ios_base::failbit;
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        __in._M_setstate(__ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      {
-40039: 
-40039: 
-40039: 
-40039:        __in._M_setstate(__ios_base::badbit);
-40039:      }
-40039:  }
-40039:       if (!__extracted)
-40039:  __err |= __ios_base::failbit;
-40039:       if (__err)
-40039:  __in.setstate(__err);
-40039:       return __in;
-40039:     }
-40039: # 1607 "/usr/include/c++/8/bits/basic_string.tcc" 3
-40039:   extern template class basic_string<char>;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   extern template
-40039:     basic_istream<char>&
-40039:     operator>>(basic_istream<char>&, string&);
-40039:   extern template
-40039:     basic_ostream<char>&
-40039:     operator<<(basic_ostream<char>&, const string&);
-40039:   extern template
-40039:     basic_istream<char>&
-40039:     getline(basic_istream<char>&, string&, char);
-40039:   extern template
-40039:     basic_istream<char>&
-40039:     getline(basic_istream<char>&, string&);
-40039: 
-40039: 
-40039: 
-40039:   extern template class basic_string<wchar_t>;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   extern template
-40039:     basic_istream<wchar_t>&
-40039:     operator>>(basic_istream<wchar_t>&, wstring&);
-40039:   extern template
-40039:     basic_ostream<wchar_t>&
-40039:     operator<<(basic_ostream<wchar_t>&, const wstring&);
-40039:   extern template
-40039:     basic_istream<wchar_t>&
-40039:     getline(basic_istream<wchar_t>&, wstring&, wchar_t);
-40039:   extern template
-40039:     basic_istream<wchar_t>&
-40039:     getline(basic_istream<wchar_t>&, wstring&);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 54 "/usr/include/c++/8/string" 2 3
-40039: # 41 "/usr/include/gmpxx.h" 2 3 4
-40039: # 1 "/usr/include/c++/8/stdexcept" 1 3 4
-40039: # 36 "/usr/include/c++/8/stdexcept" 3 4
-40039:        
-40039: # 37 "/usr/include/c++/8/stdexcept" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   struct __cow_string
-40039:   {
-40039:     union {
-40039:       const char* _M_p;
-40039:       char _M_bytes[sizeof(const char*)];
-40039:     };
-40039: 
-40039:     __cow_string();
-40039:     __cow_string(const std::string&);
-40039:     __cow_string(const char*, size_t);
-40039:     __cow_string(const __cow_string&) noexcept;
-40039:     __cow_string& operator=(const __cow_string&) noexcept;
-40039:     ~__cow_string();
-40039: 
-40039:     __cow_string(__cow_string&&) noexcept;
-40039:     __cow_string& operator=(__cow_string&&) noexcept;
-40039: 
-40039:   };
-40039: 
-40039:   typedef basic_string<char> __sso_string;
-40039: # 113 "/usr/include/c++/8/stdexcept" 3
-40039:   class logic_error : public exception
-40039:   {
-40039:     __cow_string _M_msg;
-40039: 
-40039:   public:
-40039: 
-40039:     explicit
-40039:     logic_error(const string& __arg) ;
-40039: 
-40039: 
-40039:     explicit
-40039:     logic_error(const char*) ;
-40039: 
-40039: 
-40039: 
-40039:     logic_error(const logic_error&) noexcept;
-40039:     logic_error& operator=(const logic_error&) noexcept;
-40039: 
-40039: 
-40039:     virtual ~logic_error() noexcept;
-40039: 
-40039: 
-40039: 
-40039:     virtual const char*
-40039:     what() const noexcept;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   };
-40039: 
-40039: 
-40039: 
-40039:   class domain_error : public logic_error
-40039:   {
-40039:   public:
-40039:     explicit domain_error(const string& __arg) ;
-40039: 
-40039:     explicit domain_error(const char*) ;
-40039: 
-40039:     virtual ~domain_error() noexcept;
-40039:   };
-40039: 
-40039: 
-40039:   class invalid_argument : public logic_error
-40039:   {
-40039:   public:
-40039:     explicit invalid_argument(const string& __arg) ;
-40039: 
-40039:     explicit invalid_argument(const char*) ;
-40039: 
-40039:     virtual ~invalid_argument() noexcept;
-40039:   };
-40039: 
-40039: 
-40039: 
-40039:   class length_error : public logic_error
-40039:   {
-40039:   public:
-40039:     explicit length_error(const string& __arg) ;
-40039: 
-40039:     explicit length_error(const char*) ;
-40039: 
-40039:     virtual ~length_error() noexcept;
-40039:   };
-40039: 
-40039: 
-40039: 
-40039:   class out_of_range : public logic_error
-40039:   {
-40039:   public:
-40039:     explicit out_of_range(const string& __arg) ;
-40039: 
-40039:     explicit out_of_range(const char*) ;
-40039: 
-40039:     virtual ~out_of_range() noexcept;
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   class runtime_error : public exception
-40039:   {
-40039:     __cow_string _M_msg;
-40039: 
-40039:   public:
-40039: 
-40039:     explicit
-40039:     runtime_error(const string& __arg) ;
-40039: 
-40039: 
-40039:     explicit
-40039:     runtime_error(const char*) ;
-40039: 
-40039: 
-40039: 
-40039:     runtime_error(const runtime_error&) noexcept;
-40039:     runtime_error& operator=(const runtime_error&) noexcept;
-40039: 
-40039: 
-40039:     virtual ~runtime_error() noexcept;
-40039: 
-40039: 
-40039: 
-40039:     virtual const char*
-40039:     what() const noexcept;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   };
-40039: 
-40039: 
-40039:   class range_error : public runtime_error
-40039:   {
-40039:   public:
-40039:     explicit range_error(const string& __arg) ;
-40039: 
-40039:     explicit range_error(const char*) ;
-40039: 
-40039:     virtual ~range_error() noexcept;
-40039:   };
-40039: 
-40039: 
-40039:   class overflow_error : public runtime_error
-40039:   {
-40039:   public:
-40039:     explicit overflow_error(const string& __arg) ;
-40039: 
-40039:     explicit overflow_error(const char*) ;
-40039: 
-40039:     virtual ~overflow_error() noexcept;
-40039:   };
-40039: 
-40039: 
-40039:   class underflow_error : public runtime_error
-40039:   {
-40039:   public:
-40039:     explicit underflow_error(const string& __arg) ;
-40039: 
-40039:     explicit underflow_error(const char*) ;
-40039: 
-40039:     virtual ~underflow_error() noexcept;
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 42 "/usr/include/gmpxx.h" 2 3 4
-40039: # 1 "/usr/include/c++/8/cfloat" 1 3 4
-40039: # 39 "/usr/include/c++/8/cfloat" 3 4
-40039:        
-40039: # 40 "/usr/include/c++/8/cfloat" 3
-40039: 
-40039: 
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/float.h" 1 3 4
-40039: # 43 "/usr/include/c++/8/cfloat" 2 3
-40039: # 43 "/usr/include/gmpxx.h" 2 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/gmp.h" 1 3 4
-40039: # 35 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
-40039: # 1 "/usr/include/c++/8/cstdio" 1 3 4
-40039: # 39 "/usr/include/c++/8/cstdio" 3 4
-40039:        
-40039: # 40 "/usr/include/c++/8/cstdio" 3
-40039: # 36 "/usr/include/x86_64-linux-gnu/gmp.h" 2 3 4
-40039: # 55 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
-40039: # 56 "/usr/include/x86_64-linux-gnu/gmp.h" 2 3 4
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 1 3 4
-40039: # 34 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 3 4
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/syslimits.h" 1 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 1 3 4
-40039: # 194 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 3 4
-40039: # 1 "/usr/include/limits.h" 1 3 4
-40039: # 26 "/usr/include/limits.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 1 3 4
-40039: # 27 "/usr/include/limits.h" 2 3 4
-40039: # 183 "/usr/include/limits.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/posix1_lim.h" 1 3 4
-40039: # 27 "/usr/include/x86_64-linux-gnu/bits/posix1_lim.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
-40039: # 28 "/usr/include/x86_64-linux-gnu/bits/posix1_lim.h" 2 3 4
-40039: # 161 "/usr/include/x86_64-linux-gnu/bits/posix1_lim.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/local_lim.h" 1 3 4
-40039: # 38 "/usr/include/x86_64-linux-gnu/bits/local_lim.h" 3 4
-40039: # 1 "/usr/include/linux/limits.h" 1 3 4
-40039: # 39 "/usr/include/x86_64-linux-gnu/bits/local_lim.h" 2 3 4
-40039: # 162 "/usr/include/x86_64-linux-gnu/bits/posix1_lim.h" 2 3 4
-40039: # 184 "/usr/include/limits.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/posix2_lim.h" 1 3 4
-40039: # 188 "/usr/include/limits.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/xopen_lim.h" 1 3 4
-40039: # 64 "/usr/include/x86_64-linux-gnu/bits/xopen_lim.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/uio_lim.h" 1 3 4
-40039: # 65 "/usr/include/x86_64-linux-gnu/bits/xopen_lim.h" 2 3 4
-40039: # 192 "/usr/include/limits.h" 2 3 4
-40039: # 195 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 2 3 4
-40039: # 8 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/syslimits.h" 2 3 4
-40039: # 35 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 2 3 4
-40039: # 57 "/usr/include/x86_64-linux-gnu/gmp.h" 2 3 4
-40039: # 141 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
-40039: typedef unsigned long int mp_limb_t;
-40039: typedef long int mp_limb_signed_t;
-40039: 
-40039: 
-40039: typedef unsigned long int mp_bitcnt_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef struct
-40039: {
-40039:   int _mp_alloc;
-40039: 
-40039:   int _mp_size;
-40039: 
-40039: 
-40039:   mp_limb_t *_mp_d;
-40039: } __mpz_struct;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef __mpz_struct MP_INT;
-40039: typedef __mpz_struct mpz_t[1];
-40039: 
-40039: typedef mp_limb_t * mp_ptr;
-40039: typedef const mp_limb_t * mp_srcptr;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef long int mp_size_t;
-40039: typedef long int mp_exp_t;
-40039: 
-40039: 
-40039: typedef struct
-40039: {
-40039:   __mpz_struct _mp_num;
-40039:   __mpz_struct _mp_den;
-40039: } __mpq_struct;
-40039: 
-40039: typedef __mpq_struct MP_RAT;
-40039: typedef __mpq_struct mpq_t[1];
-40039: 
-40039: typedef struct
-40039: {
-40039:   int _mp_prec;
-40039: 
-40039: 
-40039: 
-40039:   int _mp_size;
-40039: 
-40039: 
-40039:   mp_exp_t _mp_exp;
-40039:   mp_limb_t *_mp_d;
-40039: } __mpf_struct;
-40039: 
-40039: 
-40039: typedef __mpf_struct mpf_t[1];
-40039: 
-40039: 
-40039: typedef enum
-40039: {
-40039:   GMP_RAND_ALG_DEFAULT = 0,
-40039:   GMP_RAND_ALG_LC = GMP_RAND_ALG_DEFAULT
-40039: } gmp_randalg_t;
-40039: 
-40039: 
-40039: typedef struct
-40039: {
-40039:   mpz_t _mp_seed;
-40039:   gmp_randalg_t _mp_alg;
-40039:   union {
-40039:     void *_mp_lc;
-40039:   } _mp_algdata;
-40039: } __gmp_randstate_struct;
-40039: typedef __gmp_randstate_struct gmp_randstate_t[1];
-40039: 
-40039: 
-40039: 
-40039: typedef const __mpz_struct *mpz_srcptr;
-40039: typedef __mpz_struct *mpz_ptr;
-40039: typedef const __mpf_struct *mpf_srcptr;
-40039: typedef __mpf_struct *mpf_ptr;
-40039: typedef const __mpq_struct *mpq_srcptr;
-40039: typedef __mpq_struct *mpq_ptr;
-40039: # 468 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
-40039: extern "C" {
-40039: using std::FILE;
-40039: 
-40039: 
-40039: 
-40039:  void __gmp_set_memory_functions (void *(*) (size_t),
-40039:           void *(*) (void *, size_t, size_t),
-40039:           void (*) (void *, size_t)) throw ();
-40039: 
-40039: 
-40039:  void __gmp_get_memory_functions (void *(**) (size_t),
-40039:           void *(**) (void *, size_t, size_t),
-40039:           void (**) (void *, size_t)) throw ();
-40039: 
-40039: 
-40039:  extern const int __gmp_bits_per_limb;
-40039: 
-40039: 
-40039:  extern int __gmp_errno;
-40039: 
-40039: 
-40039:  extern const char * const __gmp_version;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  void __gmp_randinit (gmp_randstate_t, gmp_randalg_t, ...);
-40039: 
-40039: 
-40039:  void __gmp_randinit_default (gmp_randstate_t);
-40039: 
-40039: 
-40039:  void __gmp_randinit_lc_2exp (gmp_randstate_t, mpz_srcptr, unsigned long int, mp_bitcnt_t);
-40039: 
-40039: 
-40039:  int __gmp_randinit_lc_2exp_size (gmp_randstate_t, mp_bitcnt_t);
-40039: 
-40039: 
-40039:  void __gmp_randinit_mt (gmp_randstate_t);
-40039: 
-40039: 
-40039:  void __gmp_randinit_set (gmp_randstate_t, const __gmp_randstate_struct *);
-40039: 
-40039: 
-40039:  void __gmp_randseed (gmp_randstate_t, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmp_randseed_ui (gmp_randstate_t, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmp_randclear (gmp_randstate_t);
-40039: 
-40039: 
-40039:  unsigned long __gmp_urandomb_ui (gmp_randstate_t, unsigned long);
-40039: 
-40039: 
-40039:  unsigned long __gmp_urandomm_ui (gmp_randstate_t, unsigned long);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  int __gmp_asprintf (char **, const char *, ...);
-40039: 
-40039: 
-40039: 
-40039:  int __gmp_fprintf (FILE *, const char *, ...);
-40039: # 550 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
-40039:  int __gmp_printf (const char *, ...);
-40039: 
-40039: 
-40039:  int __gmp_snprintf (char *, size_t, const char *, ...);
-40039: 
-40039: 
-40039:  int __gmp_sprintf (char *, const char *, ...);
-40039: # 588 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
-40039:  int __gmp_fscanf (FILE *, const char *, ...);
-40039: 
-40039: 
-40039: 
-40039:  int __gmp_scanf (const char *, ...);
-40039: 
-40039: 
-40039:  int __gmp_sscanf (const char *, const char *, ...);
-40039: # 617 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
-40039:  void *__gmpz_realloc (mpz_ptr, mp_size_t);
-40039: 
-40039: 
-40039: 
-40039:  void __gmpz_abs (mpz_ptr, mpz_srcptr);
-40039: 
-40039: 
-40039: 
-40039:  void __gmpz_add (mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_add_ui (mpz_ptr, mpz_srcptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_addmul (mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_addmul_ui (mpz_ptr, mpz_srcptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_and (mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_array_init (mpz_ptr, mp_size_t, mp_size_t);
-40039: 
-40039: 
-40039:  void __gmpz_bin_ui (mpz_ptr, mpz_srcptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_bin_uiui (mpz_ptr, unsigned long int, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_cdiv_q (mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_cdiv_q_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t);
-40039: 
-40039: 
-40039:  unsigned long int __gmpz_cdiv_q_ui (mpz_ptr, mpz_srcptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_cdiv_qr (mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  unsigned long int __gmpz_cdiv_qr_ui (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_cdiv_r (mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_cdiv_r_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t);
-40039: 
-40039: 
-40039:  unsigned long int __gmpz_cdiv_r_ui (mpz_ptr, mpz_srcptr, unsigned long int);
-40039: 
-40039: 
-40039:  unsigned long int __gmpz_cdiv_ui (mpz_srcptr, unsigned long int) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpz_clear (mpz_ptr);
-40039: 
-40039: 
-40039:  void __gmpz_clears (mpz_ptr, ...);
-40039: 
-40039: 
-40039:  void __gmpz_clrbit (mpz_ptr, mp_bitcnt_t);
-40039: 
-40039: 
-40039:  int __gmpz_cmp (mpz_srcptr, mpz_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpz_cmp_d (mpz_srcptr, double) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpz_cmp_si (mpz_srcptr, signed long int) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpz_cmp_ui (mpz_srcptr, unsigned long int) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpz_cmpabs (mpz_srcptr, mpz_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpz_cmpabs_d (mpz_srcptr, double) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpz_cmpabs_ui (mpz_srcptr, unsigned long int) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpz_com (mpz_ptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_combit (mpz_ptr, mp_bitcnt_t);
-40039: 
-40039: 
-40039:  int __gmpz_congruent_p (mpz_srcptr, mpz_srcptr, mpz_srcptr) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpz_congruent_2exp_p (mpz_srcptr, mpz_srcptr, mp_bitcnt_t) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpz_congruent_ui_p (mpz_srcptr, unsigned long, unsigned long) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpz_divexact (mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_divexact_ui (mpz_ptr, mpz_srcptr, unsigned long);
-40039: 
-40039: 
-40039:  int __gmpz_divisible_p (mpz_srcptr, mpz_srcptr) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpz_divisible_ui_p (mpz_srcptr, unsigned long) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpz_divisible_2exp_p (mpz_srcptr, mp_bitcnt_t) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpz_dump (mpz_srcptr);
-40039: 
-40039: 
-40039:  void *__gmpz_export (void *, size_t *, int, size_t, int, size_t, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_fac_ui (mpz_ptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_2fac_ui (mpz_ptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_mfac_uiui (mpz_ptr, unsigned long int, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_primorial_ui (mpz_ptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_fdiv_q (mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_fdiv_q_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t);
-40039: 
-40039: 
-40039:  unsigned long int __gmpz_fdiv_q_ui (mpz_ptr, mpz_srcptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_fdiv_qr (mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  unsigned long int __gmpz_fdiv_qr_ui (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_fdiv_r (mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_fdiv_r_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t);
-40039: 
-40039: 
-40039:  unsigned long int __gmpz_fdiv_r_ui (mpz_ptr, mpz_srcptr, unsigned long int);
-40039: 
-40039: 
-40039:  unsigned long int __gmpz_fdiv_ui (mpz_srcptr, unsigned long int) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpz_fib_ui (mpz_ptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_fib2_ui (mpz_ptr, mpz_ptr, unsigned long int);
-40039: 
-40039: 
-40039:  int __gmpz_fits_sint_p (mpz_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpz_fits_slong_p (mpz_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpz_fits_sshort_p (mpz_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: 
-40039:  int __gmpz_fits_uint_p (mpz_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  int __gmpz_fits_ulong_p (mpz_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  int __gmpz_fits_ushort_p (mpz_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: 
-40039:  void __gmpz_gcd (mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  unsigned long int __gmpz_gcd_ui (mpz_ptr, mpz_srcptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_gcdext (mpz_ptr, mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  double __gmpz_get_d (mpz_srcptr) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  double __gmpz_get_d_2exp (signed long int *, mpz_srcptr);
-40039: 
-40039: 
-40039:  long int __gmpz_get_si (mpz_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  char *__gmpz_get_str (char *, int, mpz_srcptr);
-40039: 
-40039: 
-40039: 
-40039:  unsigned long int __gmpz_get_ui (mpz_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  mp_limb_t __gmpz_getlimbn (mpz_srcptr, mp_size_t) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: 
-40039:  mp_bitcnt_t __gmpz_hamdist (mpz_srcptr, mpz_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpz_import (mpz_ptr, size_t, int, size_t, int, size_t, const void *);
-40039: 
-40039: 
-40039:  void __gmpz_init (mpz_ptr);
-40039: 
-40039: 
-40039:  void __gmpz_init2 (mpz_ptr, mp_bitcnt_t);
-40039: 
-40039: 
-40039:  void __gmpz_inits (mpz_ptr, ...);
-40039: 
-40039: 
-40039:  void __gmpz_init_set (mpz_ptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_init_set_d (mpz_ptr, double);
-40039: 
-40039: 
-40039:  void __gmpz_init_set_si (mpz_ptr, signed long int);
-40039: 
-40039: 
-40039:  int __gmpz_init_set_str (mpz_ptr, const char *, int);
-40039: 
-40039: 
-40039:  void __gmpz_init_set_ui (mpz_ptr, unsigned long int);
-40039: 
-40039: 
-40039: 
-40039:  size_t __gmpz_inp_raw (mpz_ptr, FILE *);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  size_t __gmpz_inp_str (mpz_ptr, FILE *, int);
-40039: 
-40039: 
-40039: 
-40039:  int __gmpz_invert (mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_ior (mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  int __gmpz_jacobi (mpz_srcptr, mpz_srcptr) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  int __gmpz_kronecker_si (mpz_srcptr, long) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpz_kronecker_ui (mpz_srcptr, unsigned long) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpz_si_kronecker (long, mpz_srcptr) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpz_ui_kronecker (unsigned long, mpz_srcptr) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpz_lcm (mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_lcm_ui (mpz_ptr, mpz_srcptr, unsigned long);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  void __gmpz_lucnum_ui (mpz_ptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_lucnum2_ui (mpz_ptr, mpz_ptr, unsigned long int);
-40039: 
-40039: 
-40039:  int __gmpz_millerrabin (mpz_srcptr, int) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpz_mod (mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  void __gmpz_mul (mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_mul_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t);
-40039: 
-40039: 
-40039:  void __gmpz_mul_si (mpz_ptr, mpz_srcptr, long int);
-40039: 
-40039: 
-40039:  void __gmpz_mul_ui (mpz_ptr, mpz_srcptr, unsigned long int);
-40039: 
-40039: 
-40039: 
-40039:  void __gmpz_neg (mpz_ptr, mpz_srcptr);
-40039: 
-40039: 
-40039: 
-40039:  void __gmpz_nextprime (mpz_ptr, mpz_srcptr);
-40039: 
-40039: 
-40039: 
-40039:  size_t __gmpz_out_raw (FILE *, mpz_srcptr);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  size_t __gmpz_out_str (FILE *, int, mpz_srcptr);
-40039: 
-40039: 
-40039: 
-40039:  int __gmpz_perfect_power_p (mpz_srcptr) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: 
-40039:  int __gmpz_perfect_square_p (mpz_srcptr) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  mp_bitcnt_t __gmpz_popcount (mpz_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: 
-40039:  void __gmpz_pow_ui (mpz_ptr, mpz_srcptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_powm (mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_powm_sec (mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_powm_ui (mpz_ptr, mpz_srcptr, unsigned long int, mpz_srcptr);
-40039: 
-40039: 
-40039:  int __gmpz_probab_prime_p (mpz_srcptr, int) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpz_random (mpz_ptr, mp_size_t);
-40039: 
-40039: 
-40039:  void __gmpz_random2 (mpz_ptr, mp_size_t);
-40039: 
-40039: 
-40039:  void __gmpz_realloc2 (mpz_ptr, mp_bitcnt_t);
-40039: 
-40039: 
-40039:  mp_bitcnt_t __gmpz_remove (mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  int __gmpz_root (mpz_ptr, mpz_srcptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_rootrem (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_rrandomb (mpz_ptr, gmp_randstate_t, mp_bitcnt_t);
-40039: 
-40039: 
-40039:  mp_bitcnt_t __gmpz_scan0 (mpz_srcptr, mp_bitcnt_t) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  mp_bitcnt_t __gmpz_scan1 (mpz_srcptr, mp_bitcnt_t) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpz_set (mpz_ptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_set_d (mpz_ptr, double);
-40039: 
-40039: 
-40039:  void __gmpz_set_f (mpz_ptr, mpf_srcptr);
-40039: 
-40039: 
-40039: 
-40039:  void __gmpz_set_q (mpz_ptr, mpq_srcptr);
-40039: 
-40039: 
-40039: 
-40039:  void __gmpz_set_si (mpz_ptr, signed long int);
-40039: 
-40039: 
-40039:  int __gmpz_set_str (mpz_ptr, const char *, int);
-40039: 
-40039: 
-40039:  void __gmpz_set_ui (mpz_ptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_setbit (mpz_ptr, mp_bitcnt_t);
-40039: 
-40039: 
-40039: 
-40039:  size_t __gmpz_size (mpz_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: 
-40039:  size_t __gmpz_sizeinbase (mpz_srcptr, int) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpz_sqrt (mpz_ptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_sqrtrem (mpz_ptr, mpz_ptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_sub (mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_sub_ui (mpz_ptr, mpz_srcptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_ui_sub (mpz_ptr, unsigned long int, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_submul (mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_submul_ui (mpz_ptr, mpz_srcptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_swap (mpz_ptr, mpz_ptr) throw ();
-40039: 
-40039: 
-40039:  unsigned long int __gmpz_tdiv_ui (mpz_srcptr, unsigned long int) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpz_tdiv_q (mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_tdiv_q_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t);
-40039: 
-40039: 
-40039:  unsigned long int __gmpz_tdiv_q_ui (mpz_ptr, mpz_srcptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_tdiv_qr (mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  unsigned long int __gmpz_tdiv_qr_ui (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_tdiv_r (mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpz_tdiv_r_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t);
-40039: 
-40039: 
-40039:  unsigned long int __gmpz_tdiv_r_ui (mpz_ptr, mpz_srcptr, unsigned long int);
-40039: 
-40039: 
-40039:  int __gmpz_tstbit (mpz_srcptr, mp_bitcnt_t) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpz_ui_pow_ui (mpz_ptr, unsigned long int, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpz_urandomb (mpz_ptr, gmp_randstate_t, mp_bitcnt_t);
-40039: 
-40039: 
-40039:  void __gmpz_urandomm (mpz_ptr, gmp_randstate_t, mpz_srcptr);
-40039: 
-40039: 
-40039: 
-40039:  void __gmpz_xor (mpz_ptr, mpz_srcptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  mp_srcptr __gmpz_limbs_read (mpz_srcptr);
-40039: 
-40039: 
-40039:  mp_ptr __gmpz_limbs_write (mpz_ptr, mp_size_t);
-40039: 
-40039: 
-40039:  mp_ptr __gmpz_limbs_modify (mpz_ptr, mp_size_t);
-40039: 
-40039: 
-40039:  void __gmpz_limbs_finish (mpz_ptr, mp_size_t);
-40039: 
-40039: 
-40039:  mpz_srcptr __gmpz_roinit_n (mpz_ptr, mp_srcptr, mp_size_t);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  void __gmpq_abs (mpq_ptr, mpq_srcptr);
-40039: 
-40039: 
-40039: 
-40039:  void __gmpq_add (mpq_ptr, mpq_srcptr, mpq_srcptr);
-40039: 
-40039: 
-40039:  void __gmpq_canonicalize (mpq_ptr);
-40039: 
-40039: 
-40039:  void __gmpq_clear (mpq_ptr);
-40039: 
-40039: 
-40039:  void __gmpq_clears (mpq_ptr, ...);
-40039: 
-40039: 
-40039:  int __gmpq_cmp (mpq_srcptr, mpq_srcptr) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpq_cmp_si (mpq_srcptr, long, unsigned long) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpq_cmp_ui (mpq_srcptr, unsigned long int, unsigned long int) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpq_cmp_z (mpq_srcptr, mpz_srcptr) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpq_div (mpq_ptr, mpq_srcptr, mpq_srcptr);
-40039: 
-40039: 
-40039:  void __gmpq_div_2exp (mpq_ptr, mpq_srcptr, mp_bitcnt_t);
-40039: 
-40039: 
-40039:  int __gmpq_equal (mpq_srcptr, mpq_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpq_get_num (mpz_ptr, mpq_srcptr);
-40039: 
-40039: 
-40039:  void __gmpq_get_den (mpz_ptr, mpq_srcptr);
-40039: 
-40039: 
-40039:  double __gmpq_get_d (mpq_srcptr) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  char *__gmpq_get_str (char *, int, mpq_srcptr);
-40039: 
-40039: 
-40039:  void __gmpq_init (mpq_ptr);
-40039: 
-40039: 
-40039:  void __gmpq_inits (mpq_ptr, ...);
-40039: 
-40039: 
-40039: 
-40039:  size_t __gmpq_inp_str (mpq_ptr, FILE *, int);
-40039: 
-40039: 
-40039: 
-40039:  void __gmpq_inv (mpq_ptr, mpq_srcptr);
-40039: 
-40039: 
-40039:  void __gmpq_mul (mpq_ptr, mpq_srcptr, mpq_srcptr);
-40039: 
-40039: 
-40039:  void __gmpq_mul_2exp (mpq_ptr, mpq_srcptr, mp_bitcnt_t);
-40039: 
-40039: 
-40039: 
-40039:  void __gmpq_neg (mpq_ptr, mpq_srcptr);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  size_t __gmpq_out_str (FILE *, int, mpq_srcptr);
-40039: 
-40039: 
-40039: 
-40039:  void __gmpq_set (mpq_ptr, mpq_srcptr);
-40039: 
-40039: 
-40039:  void __gmpq_set_d (mpq_ptr, double);
-40039: 
-40039: 
-40039:  void __gmpq_set_den (mpq_ptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpq_set_f (mpq_ptr, mpf_srcptr);
-40039: 
-40039: 
-40039:  void __gmpq_set_num (mpq_ptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpq_set_si (mpq_ptr, signed long int, unsigned long int);
-40039: 
-40039: 
-40039:  int __gmpq_set_str (mpq_ptr, const char *, int);
-40039: 
-40039: 
-40039:  void __gmpq_set_ui (mpq_ptr, unsigned long int, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpq_set_z (mpq_ptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  void __gmpq_sub (mpq_ptr, mpq_srcptr, mpq_srcptr);
-40039: 
-40039: 
-40039:  void __gmpq_swap (mpq_ptr, mpq_ptr) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  void __gmpf_abs (mpf_ptr, mpf_srcptr);
-40039: 
-40039: 
-40039:  void __gmpf_add (mpf_ptr, mpf_srcptr, mpf_srcptr);
-40039: 
-40039: 
-40039:  void __gmpf_add_ui (mpf_ptr, mpf_srcptr, unsigned long int);
-40039: 
-40039:  void __gmpf_ceil (mpf_ptr, mpf_srcptr);
-40039: 
-40039: 
-40039:  void __gmpf_clear (mpf_ptr);
-40039: 
-40039: 
-40039:  void __gmpf_clears (mpf_ptr, ...);
-40039: 
-40039: 
-40039:  int __gmpf_cmp (mpf_srcptr, mpf_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpf_cmp_z (mpf_srcptr, mpz_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpf_cmp_d (mpf_srcptr, double) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpf_cmp_si (mpf_srcptr, signed long int) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpf_cmp_ui (mpf_srcptr, unsigned long int) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpf_div (mpf_ptr, mpf_srcptr, mpf_srcptr);
-40039: 
-40039: 
-40039:  void __gmpf_div_2exp (mpf_ptr, mpf_srcptr, mp_bitcnt_t);
-40039: 
-40039: 
-40039:  void __gmpf_div_ui (mpf_ptr, mpf_srcptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpf_dump (mpf_srcptr);
-40039: 
-40039: 
-40039:  int __gmpf_eq (mpf_srcptr, mpf_srcptr, mp_bitcnt_t) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpf_fits_sint_p (mpf_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpf_fits_slong_p (mpf_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpf_fits_sshort_p (mpf_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpf_fits_uint_p (mpf_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpf_fits_ulong_p (mpf_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpf_fits_ushort_p (mpf_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpf_floor (mpf_ptr, mpf_srcptr);
-40039: 
-40039: 
-40039:  double __gmpf_get_d (mpf_srcptr) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  double __gmpf_get_d_2exp (signed long int *, mpf_srcptr);
-40039: 
-40039: 
-40039:  mp_bitcnt_t __gmpf_get_default_prec (void) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  mp_bitcnt_t __gmpf_get_prec (mpf_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  long __gmpf_get_si (mpf_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  char *__gmpf_get_str (char *, mp_exp_t *, int, size_t, mpf_srcptr);
-40039: 
-40039: 
-40039:  unsigned long __gmpf_get_ui (mpf_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpf_init (mpf_ptr);
-40039: 
-40039: 
-40039:  void __gmpf_init2 (mpf_ptr, mp_bitcnt_t);
-40039: 
-40039: 
-40039:  void __gmpf_inits (mpf_ptr, ...);
-40039: 
-40039: 
-40039:  void __gmpf_init_set (mpf_ptr, mpf_srcptr);
-40039: 
-40039: 
-40039:  void __gmpf_init_set_d (mpf_ptr, double);
-40039: 
-40039: 
-40039:  void __gmpf_init_set_si (mpf_ptr, signed long int);
-40039: 
-40039: 
-40039:  int __gmpf_init_set_str (mpf_ptr, const char *, int);
-40039: 
-40039: 
-40039:  void __gmpf_init_set_ui (mpf_ptr, unsigned long int);
-40039: 
-40039: 
-40039: 
-40039:  size_t __gmpf_inp_str (mpf_ptr, FILE *, int);
-40039: 
-40039: 
-40039: 
-40039:  int __gmpf_integer_p (mpf_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpf_mul (mpf_ptr, mpf_srcptr, mpf_srcptr);
-40039: 
-40039: 
-40039:  void __gmpf_mul_2exp (mpf_ptr, mpf_srcptr, mp_bitcnt_t);
-40039: 
-40039: 
-40039:  void __gmpf_mul_ui (mpf_ptr, mpf_srcptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpf_neg (mpf_ptr, mpf_srcptr);
-40039: 
-40039: 
-40039: 
-40039:  size_t __gmpf_out_str (FILE *, int, size_t, mpf_srcptr);
-40039: 
-40039: 
-40039: 
-40039:  void __gmpf_pow_ui (mpf_ptr, mpf_srcptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpf_random2 (mpf_ptr, mp_size_t, mp_exp_t);
-40039: 
-40039: 
-40039:  void __gmpf_reldiff (mpf_ptr, mpf_srcptr, mpf_srcptr);
-40039: 
-40039: 
-40039:  void __gmpf_set (mpf_ptr, mpf_srcptr);
-40039: 
-40039: 
-40039:  void __gmpf_set_d (mpf_ptr, double);
-40039: 
-40039: 
-40039:  void __gmpf_set_default_prec (mp_bitcnt_t) throw ();
-40039: 
-40039: 
-40039:  void __gmpf_set_prec (mpf_ptr, mp_bitcnt_t);
-40039: 
-40039: 
-40039:  void __gmpf_set_prec_raw (mpf_ptr, mp_bitcnt_t) throw ();
-40039: 
-40039: 
-40039:  void __gmpf_set_q (mpf_ptr, mpq_srcptr);
-40039: 
-40039: 
-40039:  void __gmpf_set_si (mpf_ptr, signed long int);
-40039: 
-40039: 
-40039:  int __gmpf_set_str (mpf_ptr, const char *, int);
-40039: 
-40039: 
-40039:  void __gmpf_set_ui (mpf_ptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpf_set_z (mpf_ptr, mpz_srcptr);
-40039: 
-40039: 
-40039:  size_t __gmpf_size (mpf_srcptr) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpf_sqrt (mpf_ptr, mpf_srcptr);
-40039: 
-40039: 
-40039:  void __gmpf_sqrt_ui (mpf_ptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpf_sub (mpf_ptr, mpf_srcptr, mpf_srcptr);
-40039: 
-40039: 
-40039:  void __gmpf_sub_ui (mpf_ptr, mpf_srcptr, unsigned long int);
-40039: 
-40039: 
-40039:  void __gmpf_swap (mpf_ptr, mpf_ptr) throw ();
-40039: 
-40039: 
-40039:  void __gmpf_trunc (mpf_ptr, mpf_srcptr);
-40039: 
-40039: 
-40039:  void __gmpf_ui_div (mpf_ptr, unsigned long int, mpf_srcptr);
-40039: 
-40039: 
-40039:  void __gmpf_ui_sub (mpf_ptr, unsigned long int, mpf_srcptr);
-40039: 
-40039: 
-40039:  void __gmpf_urandomb (mpf_t, gmp_randstate_t, mp_bitcnt_t);
-40039: # 1461 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
-40039:  mp_limb_t __gmpn_add (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_add_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t) throw ();
-40039: 
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_add_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_addmul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
-40039: 
-40039: 
-40039: 
-40039:  int __gmpn_cmp (mp_srcptr, mp_srcptr, mp_size_t) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  int __gmpn_zero_p (mp_srcptr, mp_size_t) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: 
-40039:  void __gmpn_divexact_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_divexact_by3c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_divrem (mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr, mp_size_t);
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_divrem_1 (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t);
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_divrem_2 (mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr);
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_div_qr_1 (mp_ptr, mp_limb_t *, mp_srcptr, mp_size_t, mp_limb_t);
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_div_qr_2 (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_srcptr);
-40039: 
-40039: 
-40039:  mp_size_t __gmpn_gcd (mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t);
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_gcd_1 (mp_srcptr, mp_size_t, mp_limb_t) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_gcdext_1 (mp_limb_signed_t *, mp_limb_signed_t *, mp_limb_t, mp_limb_t);
-40039: 
-40039: 
-40039:  mp_size_t __gmpn_gcdext (mp_ptr, mp_ptr, mp_size_t *, mp_ptr, mp_size_t, mp_ptr, mp_size_t);
-40039: 
-40039: 
-40039:  size_t __gmpn_get_str (unsigned char *, int, mp_ptr, mp_size_t);
-40039: 
-40039: 
-40039:  mp_bitcnt_t __gmpn_hamdist (mp_srcptr, mp_srcptr, mp_size_t) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_lshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int);
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_mod_1 (mp_srcptr, mp_size_t, mp_limb_t) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_mul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
-40039: 
-40039: 
-40039:  void __gmpn_mul_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
-40039: 
-40039: 
-40039:  void __gmpn_sqr (mp_ptr, mp_srcptr, mp_size_t);
-40039: 
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_neg (mp_ptr, mp_srcptr, mp_size_t);
-40039: 
-40039: 
-40039: 
-40039:  void __gmpn_com (mp_ptr, mp_srcptr, mp_size_t);
-40039: 
-40039: 
-40039:  int __gmpn_perfect_square_p (mp_srcptr, mp_size_t) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpn_perfect_power_p (mp_srcptr, mp_size_t) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  mp_bitcnt_t __gmpn_popcount (mp_srcptr, mp_size_t) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  mp_size_t __gmpn_pow_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr);
-40039: 
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_preinv_mod_1 (mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpn_random (mp_ptr, mp_size_t);
-40039: 
-40039: 
-40039:  void __gmpn_random2 (mp_ptr, mp_size_t);
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_rshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int);
-40039: 
-40039: 
-40039:  mp_bitcnt_t __gmpn_scan0 (mp_srcptr, mp_bitcnt_t) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  mp_bitcnt_t __gmpn_scan1 (mp_srcptr, mp_bitcnt_t) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  mp_size_t __gmpn_set_str (mp_ptr, const unsigned char *, size_t, int);
-40039: 
-40039: 
-40039:  size_t __gmpn_sizeinbase (mp_srcptr, mp_size_t, int);
-40039: 
-40039: 
-40039:  mp_size_t __gmpn_sqrtrem (mp_ptr, mp_ptr, mp_srcptr, mp_size_t);
-40039: 
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_sub (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_sub_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t) throw ();
-40039: 
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_sub_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_submul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
-40039: 
-40039: 
-40039:  void __gmpn_tdiv_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
-40039: 
-40039: 
-40039:  void __gmpn_and_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
-40039: 
-40039:  void __gmpn_andn_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
-40039: 
-40039:  void __gmpn_nand_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
-40039: 
-40039:  void __gmpn_ior_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
-40039: 
-40039:  void __gmpn_iorn_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
-40039: 
-40039:  void __gmpn_nior_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
-40039: 
-40039:  void __gmpn_xor_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
-40039: 
-40039:  void __gmpn_xnor_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
-40039: 
-40039: 
-40039:  void __gmpn_copyi (mp_ptr, mp_srcptr, mp_size_t);
-40039: 
-40039:  void __gmpn_copyd (mp_ptr, mp_srcptr, mp_size_t);
-40039: 
-40039:  void __gmpn_zero (mp_ptr, mp_size_t);
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_cnd_add_n (mp_limb_t, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
-40039: 
-40039:  mp_limb_t __gmpn_cnd_sub_n (mp_limb_t, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_sec_add_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr);
-40039: 
-40039:  mp_size_t __gmpn_sec_add_1_itch (mp_size_t) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_sec_sub_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr);
-40039: 
-40039:  mp_size_t __gmpn_sec_sub_1_itch (mp_size_t) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpn_cnd_swap (mp_limb_t, volatile mp_limb_t *, volatile mp_limb_t *, mp_size_t);
-40039: 
-40039: 
-40039:  void __gmpn_sec_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr);
-40039: 
-40039:  mp_size_t __gmpn_sec_mul_itch (mp_size_t, mp_size_t) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpn_sec_sqr (mp_ptr, mp_srcptr, mp_size_t, mp_ptr);
-40039: 
-40039:  mp_size_t __gmpn_sec_sqr_itch (mp_size_t) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpn_sec_powm (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_bitcnt_t, mp_srcptr, mp_size_t, mp_ptr);
-40039: 
-40039:  mp_size_t __gmpn_sec_powm_itch (mp_size_t, mp_bitcnt_t, mp_size_t) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  void __gmpn_sec_tabselect (volatile mp_limb_t *, volatile const mp_limb_t *, mp_size_t, mp_size_t, mp_size_t);
-40039: 
-40039: 
-40039:  mp_limb_t __gmpn_sec_div_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr);
-40039: 
-40039:  mp_size_t __gmpn_sec_div_qr_itch (mp_size_t, mp_size_t) __attribute__ ((__pure__));
-40039: 
-40039:  void __gmpn_sec_div_r (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr);
-40039: 
-40039:  mp_size_t __gmpn_sec_div_r_itch (mp_size_t, mp_size_t) __attribute__ ((__pure__));
-40039: 
-40039: 
-40039:  int __gmpn_sec_invert (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_bitcnt_t, mp_ptr);
-40039: 
-40039:  mp_size_t __gmpn_sec_invert_itch (mp_size_t) __attribute__ ((__pure__));
-40039: # 1707 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
-40039: extern __inline__ __attribute__ ((__gnu_inline__)) void
-40039: __gmpz_abs (mpz_ptr __gmp_w, mpz_srcptr __gmp_u)
-40039: {
-40039:   if (__gmp_w != __gmp_u)
-40039:     __gmpz_set (__gmp_w, __gmp_u);
-40039:   __gmp_w->_mp_size = ((__gmp_w->_mp_size) >= 0 ? (__gmp_w->_mp_size) : -(__gmp_w->_mp_size));
-40039: }
-40039: # 1731 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
-40039: extern __inline__ __attribute__ ((__gnu_inline__))
-40039: 
-40039: int
-40039: __gmpz_fits_uint_p (mpz_srcptr __gmp_z) throw ()
-40039: {
-40039:   mp_size_t __gmp_n = __gmp_z->_mp_size; mp_ptr __gmp_p = __gmp_z->_mp_d; return (__gmp_n == 0 || (__gmp_n == 1 && __gmp_p[0] <= (0x7fffffff * 2U + 1U)));;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline__ __attribute__ ((__gnu_inline__))
-40039: 
-40039: int
-40039: __gmpz_fits_ulong_p (mpz_srcptr __gmp_z) throw ()
-40039: {
-40039:   mp_size_t __gmp_n = __gmp_z->_mp_size; mp_ptr __gmp_p = __gmp_z->_mp_d; return (__gmp_n == 0 || (__gmp_n == 1 && __gmp_p[0] <= (0x7fffffffffffffffL * 2UL + 1UL)));;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline__ __attribute__ ((__gnu_inline__))
-40039: 
-40039: int
-40039: __gmpz_fits_ushort_p (mpz_srcptr __gmp_z) throw ()
-40039: {
-40039:   mp_size_t __gmp_n = __gmp_z->_mp_size; mp_ptr __gmp_p = __gmp_z->_mp_d; return (__gmp_n == 0 || (__gmp_n == 1 && __gmp_p[0] <= (0x7fff * 2 + 1)));;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline__ __attribute__ ((__gnu_inline__))
-40039: 
-40039: unsigned long
-40039: __gmpz_get_ui (mpz_srcptr __gmp_z) throw ()
-40039: {
-40039:   mp_ptr __gmp_p = __gmp_z->_mp_d;
-40039:   mp_size_t __gmp_n = __gmp_z->_mp_size;
-40039:   mp_limb_t __gmp_l = __gmp_p[0];
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   return (__gmp_n != 0 ? __gmp_l : 0);
-40039: # 1787 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline__ __attribute__ ((__gnu_inline__))
-40039: 
-40039: mp_limb_t
-40039: __gmpz_getlimbn (mpz_srcptr __gmp_z, mp_size_t __gmp_n) throw ()
-40039: {
-40039:   mp_limb_t __gmp_result = 0;
-40039:   if (__builtin_expect ((__gmp_n >= 0 && __gmp_n < ((__gmp_z->_mp_size) >= 0 ? (__gmp_z->_mp_size) : -(__gmp_z->_mp_size))) != 0, 1))
-40039:     __gmp_result = __gmp_z->_mp_d[__gmp_n];
-40039:   return __gmp_result;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: extern __inline__ __attribute__ ((__gnu_inline__)) void
-40039: __gmpz_neg (mpz_ptr __gmp_w, mpz_srcptr __gmp_u)
-40039: {
-40039:   if (__gmp_w != __gmp_u)
-40039:     __gmpz_set (__gmp_w, __gmp_u);
-40039:   __gmp_w->_mp_size = - __gmp_w->_mp_size;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline__ __attribute__ ((__gnu_inline__))
-40039: 
-40039: int
-40039: __gmpz_perfect_square_p (mpz_srcptr __gmp_a)
-40039: {
-40039:   mp_size_t __gmp_asize;
-40039:   int __gmp_result;
-40039: 
-40039:   __gmp_asize = __gmp_a->_mp_size;
-40039:   __gmp_result = (__gmp_asize >= 0);
-40039:   if (__builtin_expect ((__gmp_asize > 0) != 0, 1))
-40039:     __gmp_result = __gmpn_perfect_square_p (__gmp_a->_mp_d, __gmp_asize);
-40039:   return __gmp_result;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline__ __attribute__ ((__gnu_inline__))
-40039: 
-40039: mp_bitcnt_t
-40039: __gmpz_popcount (mpz_srcptr __gmp_u) throw ()
-40039: {
-40039:   mp_size_t __gmp_usize;
-40039:   mp_bitcnt_t __gmp_result;
-40039: 
-40039:   __gmp_usize = __gmp_u->_mp_size;
-40039:   __gmp_result = (__gmp_usize < 0 ? (0x7fffffffffffffffL * 2UL + 1UL) : 0);
-40039:   if (__builtin_expect ((__gmp_usize > 0) != 0, 1))
-40039:     __gmp_result = __gmpn_popcount (__gmp_u->_mp_d, __gmp_usize);
-40039:   return __gmp_result;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline__ __attribute__ ((__gnu_inline__))
-40039: 
-40039: void
-40039: __gmpz_set_q (mpz_ptr __gmp_w, mpq_srcptr __gmp_u)
-40039: {
-40039:   __gmpz_tdiv_q (__gmp_w, (&((__gmp_u)->_mp_num)), (&((__gmp_u)->_mp_den)));
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline__ __attribute__ ((__gnu_inline__))
-40039: 
-40039: size_t
-40039: __gmpz_size (mpz_srcptr __gmp_z) throw ()
-40039: {
-40039:   return ((__gmp_z->_mp_size) >= 0 ? (__gmp_z->_mp_size) : -(__gmp_z->_mp_size));
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline__ __attribute__ ((__gnu_inline__)) void
-40039: __gmpq_abs (mpq_ptr __gmp_w, mpq_srcptr __gmp_u)
-40039: {
-40039:   if (__gmp_w != __gmp_u)
-40039:     __gmpq_set (__gmp_w, __gmp_u);
-40039:   __gmp_w->_mp_num._mp_size = ((__gmp_w->_mp_num._mp_size) >= 0 ? (__gmp_w->_mp_num._mp_size) : -(__gmp_w->_mp_num._mp_size));
-40039: }
-40039: 
-40039: 
-40039: 
-40039: extern __inline__ __attribute__ ((__gnu_inline__)) void
-40039: __gmpq_neg (mpq_ptr __gmp_w, mpq_srcptr __gmp_u)
-40039: {
-40039:   if (__gmp_w != __gmp_u)
-40039:     __gmpq_set (__gmp_w, __gmp_u);
-40039:   __gmp_w->_mp_num._mp_size = - __gmp_w->_mp_num._mp_size;
-40039: }
-40039: # 2129 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
-40039: extern __inline__ __attribute__ ((__gnu_inline__))
-40039: 
-40039: mp_limb_t
-40039: __gmpn_add (mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize)
-40039: {
-40039:   mp_limb_t __gmp_c;
-40039:   do { mp_size_t __gmp_i; mp_limb_t __gmp_x; __gmp_i = (__gmp_ysize); if (__gmp_i != 0) { if (__gmpn_add_n (__gmp_wp, __gmp_xp, __gmp_yp, __gmp_i)) { do { if (__gmp_i >= (__gmp_xsize)) { (__gmp_c) = 1; goto __gmp_done; } __gmp_x = (__gmp_xp)[__gmp_i]; } while ((((__gmp_wp)[__gmp_i++] = (__gmp_x + 1) & ((~ (static_cast<mp_limb_t> (0))) >> 0)) == 0)); } } if ((__gmp_wp) != (__gmp_xp)) do { mp_size_t __gmp_j; ; for (__gmp_j = (__gmp_i); __gmp_j < (__gmp_xsize); __gmp_j++) (__gmp_wp)[__gmp_j] = (__gmp_xp)[__gmp_j]; } while (0); (__gmp_c) = 0; __gmp_done: ; } while (0);
-40039:   return __gmp_c;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline__ __attribute__ ((__gnu_inline__))
-40039: 
-40039: mp_limb_t
-40039: __gmpn_add_1 (mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) throw ()
-40039: {
-40039:   mp_limb_t __gmp_c;
-40039:   do { mp_size_t __gmp_i; mp_limb_t __gmp_x, __gmp_r; __gmp_x = (__gmp_src)[0]; __gmp_r = __gmp_x + (__gmp_n); (__gmp_dst)[0] = __gmp_r; if (((__gmp_r) < ((__gmp_n)))) { (__gmp_c) = 1; for (__gmp_i = 1; __gmp_i < (__gmp_size);) { __gmp_x = (__gmp_src)[__gmp_i]; __gmp_r = __gmp_x + 1; (__gmp_dst)[__gmp_i] = __gmp_r; ++__gmp_i; if (!((__gmp_r) < (1))) { if ((__gmp_src) != (__gmp_dst)) do { mp_size_t __gmp_j; ; for (__gmp_j = (__gmp_i); __gmp_j < (__gmp_size); __gmp_j++) (__gmp_dst)[__gmp_j] = (__gmp_src)[__gmp_j]; } while (0); (__gmp_c) = 0; break; } } } else { if ((__gmp_src) != (__gmp_dst)) do { mp_size_t __gmp_j; ; for (__gmp_j = (1); __gmp_j < (__gmp_size); __gmp_j++) (__gmp_dst)[__gmp_j] = (__gmp_src)[__gmp_j]; } while (0); (__gmp_c) = 0; } } while (0);
-40039:   return __gmp_c;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline__ __attribute__ ((__gnu_inline__))
-40039: 
-40039: int
-40039: __gmpn_cmp (mp_srcptr __gmp_xp, mp_srcptr __gmp_yp, mp_size_t __gmp_size) throw ()
-40039: {
-40039:   int __gmp_result;
-40039:   do { mp_size_t __gmp_i; mp_limb_t __gmp_x, __gmp_y; (__gmp_result) = 0; __gmp_i = (__gmp_size); while (--__gmp_i >= 0) { __gmp_x = (__gmp_xp)[__gmp_i]; __gmp_y = (__gmp_yp)[__gmp_i]; if (__gmp_x != __gmp_y) { (__gmp_result) = (__gmp_x > __gmp_y ? 1 : -1); break; } } } while (0);
-40039:   return __gmp_result;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline__ __attribute__ ((__gnu_inline__))
-40039: 
-40039: int
-40039: __gmpn_zero_p (mp_srcptr __gmp_p, mp_size_t __gmp_n) throw ()
-40039: {
-40039: 
-40039:     do {
-40039:       if (__gmp_p[--__gmp_n] != 0)
-40039:  return 0;
-40039:     } while (__gmp_n != 0);
-40039:   return 1;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline__ __attribute__ ((__gnu_inline__))
-40039: 
-40039: mp_limb_t
-40039: __gmpn_sub (mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize)
-40039: {
-40039:   mp_limb_t __gmp_c;
-40039:   do { mp_size_t __gmp_i; mp_limb_t __gmp_x; __gmp_i = (__gmp_ysize); if (__gmp_i != 0) { if (__gmpn_sub_n (__gmp_wp, __gmp_xp, __gmp_yp, __gmp_i)) { do { if (__gmp_i >= (__gmp_xsize)) { (__gmp_c) = 1; goto __gmp_done; } __gmp_x = (__gmp_xp)[__gmp_i]; } while ((((__gmp_wp)[__gmp_i++] = (__gmp_x - 1) & ((~ (static_cast<mp_limb_t> (0))) >> 0)), __gmp_x == 0)); } } if ((__gmp_wp) != (__gmp_xp)) do { mp_size_t __gmp_j; ; for (__gmp_j = (__gmp_i); __gmp_j < (__gmp_xsize); __gmp_j++) (__gmp_wp)[__gmp_j] = (__gmp_xp)[__gmp_j]; } while (0); (__gmp_c) = 0; __gmp_done: ; } while (0);
-40039:   return __gmp_c;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline__ __attribute__ ((__gnu_inline__))
-40039: 
-40039: mp_limb_t
-40039: __gmpn_sub_1 (mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) throw ()
-40039: {
-40039:   mp_limb_t __gmp_c;
-40039:   do { mp_size_t __gmp_i; mp_limb_t __gmp_x, __gmp_r; __gmp_x = (__gmp_src)[0]; __gmp_r = __gmp_x - (__gmp_n); (__gmp_dst)[0] = __gmp_r; if (((__gmp_x) < ((__gmp_n)))) { (__gmp_c) = 1; for (__gmp_i = 1; __gmp_i < (__gmp_size);) { __gmp_x = (__gmp_src)[__gmp_i]; __gmp_r = __gmp_x - 1; (__gmp_dst)[__gmp_i] = __gmp_r; ++__gmp_i; if (!((__gmp_x) < (1))) { if ((__gmp_src) != (__gmp_dst)) do { mp_size_t __gmp_j; ; for (__gmp_j = (__gmp_i); __gmp_j < (__gmp_size); __gmp_j++) (__gmp_dst)[__gmp_j] = (__gmp_src)[__gmp_j]; } while (0); (__gmp_c) = 0; break; } } } else { if ((__gmp_src) != (__gmp_dst)) do { mp_size_t __gmp_j; ; for (__gmp_j = (1); __gmp_j < (__gmp_size); __gmp_j++) (__gmp_dst)[__gmp_j] = (__gmp_src)[__gmp_j]; } while (0); (__gmp_c) = 0; } } while (0);
-40039:   return __gmp_c;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __inline__ __attribute__ ((__gnu_inline__))
-40039: 
-40039: mp_limb_t
-40039: __gmpn_neg (mp_ptr __gmp_rp, mp_srcptr __gmp_up, mp_size_t __gmp_n)
-40039: {
-40039:   while (*__gmp_up == 0)
-40039:     {
-40039:       *__gmp_rp = 0;
-40039:       if (!--__gmp_n)
-40039:  return 0;
-40039:       ++__gmp_up; ++__gmp_rp;
-40039:     }
-40039: 
-40039:   *__gmp_rp = (- *__gmp_up) & ((~ (static_cast<mp_limb_t> (0))) >> 0);
-40039: 
-40039:   if (--__gmp_n)
-40039:     __gmpn_com (++__gmp_rp, ++__gmp_up, __gmp_n);
-40039: 
-40039:   return 1;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 2278 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
-40039:  std::ostream& operator<< (std::ostream &, mpz_srcptr);
-40039:  std::ostream& operator<< (std::ostream &, mpq_srcptr);
-40039:  std::ostream& operator<< (std::ostream &, mpf_srcptr);
-40039:  std::istream& operator>> (std::istream &, mpz_ptr);
-40039:  std::istream& operator>> (std::istream &, mpq_ptr);
-40039:  std::istream& operator>> (std::istream &, mpf_ptr);
-40039: # 2309 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
-40039: enum
-40039: {
-40039:   GMP_ERROR_NONE = 0,
-40039:   GMP_ERROR_UNSUPPORTED_ARGUMENT = 1,
-40039:   GMP_ERROR_DIVISION_BY_ZERO = 2,
-40039:   GMP_ERROR_SQRT_OF_NEGATIVE = 4,
-40039:   GMP_ERROR_INVALID_ARGUMENT = 8
-40039: };
-40039: # 44 "/usr/include/gmpxx.h" 2 3 4
-40039: # 85 "/usr/include/gmpxx.h" 3 4
-40039: inline void __mpz_set_ui_safe(mpz_ptr p, unsigned long l)
-40039: {
-40039:   p->_mp_size = (l != 0);
-40039:   p->_mp_d[0] = l & ((~ (static_cast<mp_limb_t> (0))) >> 0);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: inline void __mpz_set_si_safe(mpz_ptr p, long l)
-40039: {
-40039:   if(l < 0)
-40039:   {
-40039:     __mpz_set_ui_safe(p, -static_cast<unsigned long>(l));
-40039:     __gmpz_neg(p, p);
-40039:   }
-40039:   else
-40039:     __mpz_set_ui_safe(p, l);
-40039: 
-40039: }
-40039: # 151 "/usr/include/gmpxx.h" 3 4
-40039: inline unsigned long __gmpxx_abs_ui (signed long l)
-40039: {
-40039:   return l >= 0 ? static_cast<unsigned long>(l)
-40039:    : -static_cast<unsigned long>(l);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: struct __gmp_unary_plus
-40039: {
-40039:   static void eval(mpz_ptr z, mpz_srcptr w) { __gmpz_set(z, w); }
-40039:   static void eval(mpq_ptr q, mpq_srcptr r) { __gmpq_set(q, r); }
-40039:   static void eval(mpf_ptr f, mpf_srcptr g) { __gmpf_set(f, g); }
-40039: };
-40039: 
-40039: struct __gmp_unary_minus
-40039: {
-40039:   static void eval(mpz_ptr z, mpz_srcptr w) { __gmpz_neg(z, w); }
-40039:   static void eval(mpq_ptr q, mpq_srcptr r) { __gmpq_neg(q, r); }
-40039:   static void eval(mpf_ptr f, mpf_srcptr g) { __gmpf_neg(f, g); }
-40039: };
-40039: 
-40039: struct __gmp_unary_com
-40039: {
-40039:   static void eval(mpz_ptr z, mpz_srcptr w) { __gmpz_com(z, w); }
-40039: };
-40039: 
-40039: struct __gmp_binary_plus
-40039: {
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v)
-40039:   { __gmpz_add(z, w, v); }
-40039: 
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l)
-40039:   {
-40039: 
-40039: 
-40039:     if (__builtin_constant_p(l) && l == 0)
-40039:     {
-40039:       if (z != w) __gmpz_set(z, w);
-40039:     }
-40039:     else
-40039:       __gmpz_add_ui(z, w, l);
-40039:   }
-40039:   static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w)
-40039:   { eval(z, w, l); }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, signed long int l)
-40039:   {
-40039:     if (l >= 0)
-40039:       eval(z, w, static_cast<unsigned long>(l));
-40039:     else
-40039:       __gmpz_sub_ui(z, w, -static_cast<unsigned long>(l));
-40039:   }
-40039:   static void eval(mpz_ptr z, signed long int l, mpz_srcptr w)
-40039:   { eval(z, w, l); }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, double d)
-40039:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_add (z, w, temp); }
-40039:   static void eval(mpz_ptr z, double d, mpz_srcptr w)
-40039:   { eval(z, w, d); }
-40039: 
-40039:   static void eval(mpq_ptr q, mpq_srcptr r, mpq_srcptr s)
-40039:   { __gmpq_add(q, r, s); }
-40039: 
-40039:   static void eval(mpq_ptr q, mpq_srcptr r, unsigned long int l)
-40039:   {
-40039:     if (__builtin_constant_p(l) && l == 0)
-40039:     {
-40039:       if (q != r) __gmpq_set(q, r);
-40039:     }
-40039:     else
-40039:     {
-40039:       if (q == r)
-40039:         __gmpz_addmul_ui((&((q)->_mp_num)), (&((q)->_mp_den)), l);
-40039:       else
-40039:       {
-40039:         __gmpz_mul_ui((&((q)->_mp_num)), (&((r)->_mp_den)), l);
-40039:         __gmpz_add((&((q)->_mp_num)), (&((q)->_mp_num)), (&((r)->_mp_num)));
-40039:         __gmpz_set((&((q)->_mp_den)), (&((r)->_mp_den)));
-40039:       }
-40039:     }
-40039:   }
-40039:   static void eval(mpq_ptr q, unsigned long int l, mpq_srcptr r)
-40039:   { eval(q, r, l); }
-40039:   static inline void eval(mpq_ptr q, mpq_srcptr r, signed long int l);
-40039: 
-40039:   static void eval(mpq_ptr q, signed long int l, mpq_srcptr r)
-40039:   { eval(q, r, l); }
-40039:   static void eval(mpq_ptr q, mpq_srcptr r, double d)
-40039:   { mpq_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1 + (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpq_set_d (temp, d); __gmpq_add (q, r, temp); }
-40039:   static void eval(mpq_ptr q, double d, mpq_srcptr r)
-40039:   { eval(q, r, d); }
-40039: 
-40039:   static void eval(mpq_ptr q, mpq_srcptr r, mpz_srcptr z)
-40039:   {
-40039:     if (q == r)
-40039:       __gmpz_addmul((&((q)->_mp_num)), (&((q)->_mp_den)), z);
-40039:     else
-40039:     {
-40039:       __gmpz_mul((&((q)->_mp_num)), (&((r)->_mp_den)), z);
-40039:       __gmpz_add((&((q)->_mp_num)), (&((q)->_mp_num)), (&((r)->_mp_num)));
-40039:       __gmpz_set((&((q)->_mp_den)), (&((r)->_mp_den)));
-40039:     }
-40039:   }
-40039:   static void eval(mpq_ptr q, mpz_srcptr z, mpq_srcptr r)
-40039:   { eval(q, r, z); }
-40039: 
-40039:   static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h)
-40039:   { __gmpf_add(f, g, h); }
-40039: 
-40039:   static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l)
-40039:   { __gmpf_add_ui(f, g, l); }
-40039:   static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g)
-40039:   { __gmpf_add_ui(f, g, l); }
-40039:   static void eval(mpf_ptr f, mpf_srcptr g, signed long int l)
-40039:   {
-40039:     if (l >= 0)
-40039:       __gmpf_add_ui(f, g, l);
-40039:     else
-40039:       __gmpf_sub_ui(f, g, -static_cast<unsigned long>(l));
-40039:   }
-40039:   static void eval(mpf_ptr f, signed long int l, mpf_srcptr g)
-40039:   { eval(f, g, l); }
-40039:   static void eval(mpf_ptr f, mpf_srcptr g, double d)
-40039:   {
-40039:     mpf_t temp;
-40039:     __gmpf_init2(temp, 8*sizeof(double));
-40039:     __gmpf_set_d(temp, d);
-40039:     __gmpf_add(f, g, temp);
-40039:     __gmpf_clear(temp);
-40039:   }
-40039:   static void eval(mpf_ptr f, double d, mpf_srcptr g)
-40039:   { eval(f, g, d); }
-40039: };
-40039: 
-40039: struct __gmp_binary_minus
-40039: {
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v)
-40039:   { __gmpz_sub(z, w, v); }
-40039: 
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l)
-40039:   {
-40039:     if (__builtin_constant_p(l) && l == 0)
-40039:     {
-40039:       if (z != w) __gmpz_set(z, w);
-40039:     }
-40039:     else
-40039:       __gmpz_sub_ui(z, w, l);
-40039:   }
-40039:   static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w)
-40039:   {
-40039:     if (__builtin_constant_p(l) && l == 0)
-40039:     {
-40039:       __gmpz_neg(z, w);
-40039:     }
-40039:     else
-40039:       __gmpz_ui_sub(z, l, w);
-40039:   }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, signed long int l)
-40039:   {
-40039:     if (l >= 0)
-40039:       eval(z, w, static_cast<unsigned long>(l));
-40039:     else
-40039:       __gmpz_add_ui(z, w, -static_cast<unsigned long>(l));
-40039:   }
-40039:   static void eval(mpz_ptr z, signed long int l, mpz_srcptr w)
-40039:   {
-40039:     if (l >= 0)
-40039:       eval(z, static_cast<unsigned long>(l), w);
-40039:     else
-40039:       {
-40039:         __gmpz_add_ui(z, w, -static_cast<unsigned long>(l));
-40039:         __gmpz_neg(z, z);
-40039:       }
-40039:   }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, double d)
-40039:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_sub (z, w, temp); }
-40039:   static void eval(mpz_ptr z, double d, mpz_srcptr w)
-40039:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_sub (z, temp, w); }
-40039: 
-40039:   static void eval(mpq_ptr q, mpq_srcptr r, mpq_srcptr s)
-40039:   { __gmpq_sub(q, r, s); }
-40039: 
-40039:   static void eval(mpq_ptr q, mpq_srcptr r, unsigned long int l)
-40039:   {
-40039:     if (__builtin_constant_p(l) && l == 0)
-40039:     {
-40039:       if (q != r) __gmpq_set(q, r);
-40039:     }
-40039:     else
-40039:     {
-40039:       if (q == r)
-40039:         __gmpz_submul_ui((&((q)->_mp_num)), (&((q)->_mp_den)), l);
-40039:       else
-40039:       {
-40039:         __gmpz_mul_ui((&((q)->_mp_num)), (&((r)->_mp_den)), l);
-40039:         __gmpz_sub((&((q)->_mp_num)), (&((r)->_mp_num)), (&((q)->_mp_num)));
-40039:         __gmpz_set((&((q)->_mp_den)), (&((r)->_mp_den)));
-40039:       }
-40039:     }
-40039:   }
-40039:   static void eval(mpq_ptr q, unsigned long int l, mpq_srcptr r)
-40039:   { eval(q, r, l); __gmpq_neg(q, q); }
-40039:   static void eval(mpq_ptr q, mpq_srcptr r, signed long int l)
-40039:   {
-40039:     if (l >= 0)
-40039:       eval(q, r, static_cast<unsigned long>(l));
-40039:     else
-40039:       __gmp_binary_plus::eval(q, r, -static_cast<unsigned long>(l));
-40039:   }
-40039:   static void eval(mpq_ptr q, signed long int l, mpq_srcptr r)
-40039:   { eval(q, r, l); __gmpq_neg(q, q); }
-40039:   static void eval(mpq_ptr q, mpq_srcptr r, double d)
-40039:   { mpq_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1 + (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpq_set_d (temp, d); __gmpq_sub (q, r, temp); }
-40039:   static void eval(mpq_ptr q, double d, mpq_srcptr r)
-40039:   { mpq_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1 + (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpq_set_d (temp, d); __gmpq_sub (q, temp, r); }
-40039: 
-40039:   static void eval(mpq_ptr q, mpq_srcptr r, mpz_srcptr z)
-40039:   {
-40039:     if (q == r)
-40039:       __gmpz_submul((&((q)->_mp_num)), (&((q)->_mp_den)), z);
-40039:     else
-40039:     {
-40039:       __gmpz_mul((&((q)->_mp_num)), (&((r)->_mp_den)), z);
-40039:       __gmpz_sub((&((q)->_mp_num)), (&((r)->_mp_num)), (&((q)->_mp_num)));
-40039:       __gmpz_set((&((q)->_mp_den)), (&((r)->_mp_den)));
-40039:     }
-40039:   }
-40039:   static void eval(mpq_ptr q, mpz_srcptr z, mpq_srcptr r)
-40039:   { eval(q, r, z); __gmpq_neg(q, q); }
-40039: 
-40039:   static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h)
-40039:   { __gmpf_sub(f, g, h); }
-40039: 
-40039:   static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l)
-40039:   { __gmpf_sub_ui(f, g, l); }
-40039:   static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g)
-40039:   { __gmpf_ui_sub(f, l, g); }
-40039:   static void eval(mpf_ptr f, mpf_srcptr g, signed long int l)
-40039:   {
-40039:     if (l >= 0)
-40039:       __gmpf_sub_ui(f, g, l);
-40039:     else
-40039:       __gmpf_add_ui(f, g, -static_cast<unsigned long>(l));
-40039:   }
-40039:   static void eval(mpf_ptr f, signed long int l, mpf_srcptr g)
-40039:   {
-40039:     if (l >= 0)
-40039:       __gmpf_sub_ui(f, g, l);
-40039:     else
-40039:       __gmpf_add_ui(f, g, -static_cast<unsigned long>(l));
-40039:     __gmpf_neg(f, f);
-40039:   }
-40039:   static void eval(mpf_ptr f, mpf_srcptr g, double d)
-40039:   {
-40039:     mpf_t temp;
-40039:     __gmpf_init2(temp, 8*sizeof(double));
-40039:     __gmpf_set_d(temp, d);
-40039:     __gmpf_sub(f, g, temp);
-40039:     __gmpf_clear(temp);
-40039:   }
-40039:   static void eval(mpf_ptr f, double d, mpf_srcptr g)
-40039:   {
-40039:     mpf_t temp;
-40039:     __gmpf_init2(temp, 8*sizeof(double));
-40039:     __gmpf_set_d(temp, d);
-40039:     __gmpf_sub(f, temp, g);
-40039:     __gmpf_clear(temp);
-40039:   }
-40039: };
-40039: 
-40039: 
-40039: inline void
-40039: __gmp_binary_plus::eval(mpq_ptr q, mpq_srcptr r, signed long int l)
-40039: {
-40039:   if (l >= 0)
-40039:     eval(q, r, static_cast<unsigned long>(l));
-40039:   else
-40039:     __gmp_binary_minus::eval(q, r, -static_cast<unsigned long>(l));
-40039: }
-40039: 
-40039: struct __gmp_binary_lshift
-40039: {
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, mp_bitcnt_t l)
-40039:   {
-40039:     if (__builtin_constant_p(l) && (l == 0))
-40039:     {
-40039:       if (z != w) __gmpz_set(z, w);
-40039:     }
-40039:     else
-40039:       __gmpz_mul_2exp(z, w, l);
-40039:   }
-40039:   static void eval(mpq_ptr q, mpq_srcptr r, mp_bitcnt_t l)
-40039:   {
-40039:     if (__builtin_constant_p(l) && (l == 0))
-40039:     {
-40039:       if (q != r) __gmpq_set(q, r);
-40039:     }
-40039:     else
-40039:       __gmpq_mul_2exp(q, r, l);
-40039:   }
-40039:   static void eval(mpf_ptr f, mpf_srcptr g, mp_bitcnt_t l)
-40039:   { __gmpf_mul_2exp(f, g, l); }
-40039: };
-40039: 
-40039: struct __gmp_binary_rshift
-40039: {
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, mp_bitcnt_t l)
-40039:   {
-40039:     if (__builtin_constant_p(l) && (l == 0))
-40039:     {
-40039:       if (z != w) __gmpz_set(z, w);
-40039:     }
-40039:     else
-40039:       __gmpz_fdiv_q_2exp(z, w, l);
-40039:   }
-40039:   static void eval(mpq_ptr q, mpq_srcptr r, mp_bitcnt_t l)
-40039:   {
-40039:     if (__builtin_constant_p(l) && (l == 0))
-40039:     {
-40039:       if (q != r) __gmpq_set(q, r);
-40039:     }
-40039:     else
-40039:       __gmpq_div_2exp(q, r, l);
-40039:   }
-40039:   static void eval(mpf_ptr f, mpf_srcptr g, mp_bitcnt_t l)
-40039:   { __gmpf_div_2exp(f, g, l); }
-40039: };
-40039: 
-40039: struct __gmp_binary_multiplies
-40039: {
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v)
-40039:   { __gmpz_mul(z, w, v); }
-40039: 
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l)
-40039:   {
-40039: 
-40039: 
-40039:     if (__builtin_constant_p(l) && (l & (l-1)) == 0)
-40039:     {
-40039:       if (l == 0)
-40039:       {
-40039:         z->_mp_size = 0;
-40039:       }
-40039:       else
-40039:       {
-40039:         __gmp_binary_lshift::eval(z, w, __builtin_ctzl(l));
-40039:       }
-40039:     }
-40039:     else
-40039: 
-40039:       __gmpz_mul_ui(z, w, l);
-40039:   }
-40039:   static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w)
-40039:   { eval(z, w, l); }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, signed long int l)
-40039:   {
-40039:     if ((__builtin_constant_p(l >= 0) && (l >= 0)))
-40039:       eval(z, w, static_cast<unsigned long>(l));
-40039:     else if ((__builtin_constant_p(l <= 0) && (l <= 0)))
-40039:       {
-40039:         eval(z, w, -static_cast<unsigned long>(l));
-40039:  __gmpz_neg(z, z);
-40039:       }
-40039:     else
-40039:       __gmpz_mul_si (z, w, l);
-40039:   }
-40039:   static void eval(mpz_ptr z, signed long int l, mpz_srcptr w)
-40039:   { eval(z, w, l); }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, double d)
-40039:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_mul (z, w, temp); }
-40039:   static void eval(mpz_ptr z, double d, mpz_srcptr w)
-40039:   { eval(z, w, d); }
-40039: 
-40039:   static void eval(mpq_ptr q, mpq_srcptr r, mpq_srcptr s)
-40039:   { __gmpq_mul(q, r, s); }
-40039: 
-40039:   static void eval(mpq_ptr q, mpq_srcptr r, unsigned long int l)
-40039:   {
-40039: 
-40039:     if (__builtin_constant_p(l) && (l & (l-1)) == 0)
-40039:     {
-40039:       if (l == 0)
-40039:       {
-40039:  __gmpq_set_ui(q, 0, 1);
-40039:       }
-40039:       else
-40039:       {
-40039:         __gmp_binary_lshift::eval(q, r, __builtin_ctzl(l));
-40039:       }
-40039:     }
-40039:     else
-40039: 
-40039:     {
-40039:       mpq_t temp; mp_limb_t limbs[1 +1]; (&((temp)->_mp_num))->_mp_d = limbs; __mpz_set_ui_safe ((&((temp)->_mp_num)), l); (&((temp)->_mp_den))->_mp_d = limbs + 1; (&((temp)->_mp_den))->_mp_size = 1; (&((temp)->_mp_den))->_mp_d[0] = 1;
-40039:       __gmpq_mul (q, r, temp);
-40039:     }
-40039:   }
-40039:   static void eval(mpq_ptr q, unsigned long int l, mpq_srcptr r)
-40039:   { eval(q, r, l); }
-40039:   static void eval(mpq_ptr q, mpq_srcptr r, signed long int l)
-40039:   {
-40039:     if ((__builtin_constant_p(l >= 0) && (l >= 0)))
-40039:       eval(q, r, static_cast<unsigned long>(l));
-40039:     else if ((__builtin_constant_p(l <= 0) && (l <= 0)))
-40039:       {
-40039:         eval(q, r, -static_cast<unsigned long>(l));
-40039:  __gmpq_neg(q, q);
-40039:       }
-40039:     else
-40039:       {
-40039:  mpq_t temp; mp_limb_t limbs[1 +1]; (&((temp)->_mp_num))->_mp_d = limbs; __mpz_set_si_safe ((&((temp)->_mp_num)), l); (&((temp)->_mp_den))->_mp_d = limbs + 1; (&((temp)->_mp_den))->_mp_size = 1; (&((temp)->_mp_den))->_mp_d[0] = 1;
-40039:  __gmpq_mul (q, r, temp);
-40039:       }
-40039:   }
-40039:   static void eval(mpq_ptr q, signed long int l, mpq_srcptr r)
-40039:   { eval(q, r, l); }
-40039:   static void eval(mpq_ptr q, mpq_srcptr r, double d)
-40039:   { mpq_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1 + (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpq_set_d (temp, d); __gmpq_mul (q, r, temp); }
-40039:   static void eval(mpq_ptr q, double d, mpq_srcptr r)
-40039:   { eval(q, r, d); }
-40039: 
-40039:   static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h)
-40039:   { __gmpf_mul(f, g, h); }
-40039: 
-40039:   static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l)
-40039:   { __gmpf_mul_ui(f, g, l); }
-40039:   static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g)
-40039:   { __gmpf_mul_ui(f, g, l); }
-40039:   static void eval(mpf_ptr f, mpf_srcptr g, signed long int l)
-40039:   {
-40039:     if (l >= 0)
-40039:       __gmpf_mul_ui(f, g, l);
-40039:     else
-40039:       {
-40039:  __gmpf_mul_ui(f, g, -static_cast<unsigned long>(l));
-40039:  __gmpf_neg(f, f);
-40039:       }
-40039:   }
-40039:   static void eval(mpf_ptr f, signed long int l, mpf_srcptr g)
-40039:   { eval(f, g, l); }
-40039:   static void eval(mpf_ptr f, mpf_srcptr g, double d)
-40039:   {
-40039:     mpf_t temp;
-40039:     __gmpf_init2(temp, 8*sizeof(double));
-40039:     __gmpf_set_d(temp, d);
-40039:     __gmpf_mul(f, g, temp);
-40039:     __gmpf_clear(temp);
-40039:   }
-40039:   static void eval(mpf_ptr f, double d, mpf_srcptr g)
-40039:   { eval(f, g, d); }
-40039: };
-40039: 
-40039: struct __gmp_binary_divides
-40039: {
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v)
-40039:   { __gmpz_tdiv_q(z, w, v); }
-40039: 
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l)
-40039:   {
-40039: 
-40039: 
-40039:     if (__builtin_constant_p(l) && (l & (l-1)) == 0 && l != 0)
-40039:     {
-40039:       if (l == 1)
-40039:       {
-40039:         if (z != w) __gmpz_set(z, w);
-40039:       }
-40039:       else
-40039:         __gmpz_tdiv_q_2exp(z, w, __builtin_ctzl(l));
-40039: 
-40039:     }
-40039:     else
-40039: 
-40039:       __gmpz_tdiv_q_ui(z, w, l);
-40039:   }
-40039:   static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w)
-40039:   {
-40039:     if (((w)->_mp_size < 0 ? -1 : (w)->_mp_size > 0) >= 0)
-40039:       {
-40039:  if (__gmpz_fits_ulong_p(w))
-40039:    __gmpz_set_ui(z, l / __gmpz_get_ui(w));
-40039:  else
-40039:    __gmpz_set_ui(z, 0);
-40039:       }
-40039:     else
-40039:       {
-40039:  __gmpz_neg(z, w);
-40039:  if (__gmpz_fits_ulong_p(z))
-40039:    {
-40039:      __gmpz_set_ui(z, l / __gmpz_get_ui(z));
-40039:      __gmpz_neg(z, z);
-40039:    }
-40039:  else
-40039:    __gmpz_set_ui(z, 0);
-40039:       }
-40039:   }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, signed long int l)
-40039:   {
-40039:     if (l >= 0)
-40039:       eval(z, w, static_cast<unsigned long>(l));
-40039:     else
-40039:       {
-40039:  eval(z, w, -static_cast<unsigned long>(l));
-40039:  __gmpz_neg(z, z);
-40039:       }
-40039:   }
-40039:   static void eval(mpz_ptr z, signed long int l, mpz_srcptr w)
-40039:   {
-40039:     if (__gmpz_fits_slong_p(w))
-40039:       __gmpz_set_si(z, l / __gmpz_get_si(w));
-40039:     else
-40039:       {
-40039: 
-40039: 
-40039:         __gmpz_set_si (z, (__gmpz_cmpabs_ui (w, __gmpxx_abs_ui(l)) == 0 ? -1 : 0));
-40039:       }
-40039:   }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, double d)
-40039:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_tdiv_q (z, w, temp); }
-40039:   static void eval(mpz_ptr z, double d, mpz_srcptr w)
-40039:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_tdiv_q (z, temp, w); }
-40039: 
-40039:   static void eval(mpq_ptr q, mpq_srcptr r, mpq_srcptr s)
-40039:   { __gmpq_div(q, r, s); }
-40039: 
-40039:   static void eval(mpq_ptr q, mpq_srcptr r, unsigned long int l)
-40039:   {
-40039: 
-40039:     if (__builtin_constant_p(l) && (l & (l-1)) == 0 && l != 0)
-40039:       __gmp_binary_rshift::eval(q, r, __builtin_ctzl(l));
-40039:     else
-40039: 
-40039:     {
-40039:       mpq_t temp; mp_limb_t limbs[1 +1]; (&((temp)->_mp_num))->_mp_d = limbs; __mpz_set_ui_safe ((&((temp)->_mp_num)), l); (&((temp)->_mp_den))->_mp_d = limbs + 1; (&((temp)->_mp_den))->_mp_size = 1; (&((temp)->_mp_den))->_mp_d[0] = 1;
-40039:       __gmpq_div (q, r, temp);
-40039:     }
-40039:   }
-40039:   static void eval(mpq_ptr q, unsigned long int l, mpq_srcptr r)
-40039:   { mpq_t temp; mp_limb_t limbs[1 +1]; (&((temp)->_mp_num))->_mp_d = limbs; __mpz_set_ui_safe ((&((temp)->_mp_num)), l); (&((temp)->_mp_den))->_mp_d = limbs + 1; (&((temp)->_mp_den))->_mp_size = 1; (&((temp)->_mp_den))->_mp_d[0] = 1; __gmpq_div (q, temp, r); }
-40039:   static void eval(mpq_ptr q, mpq_srcptr r, signed long int l)
-40039:   {
-40039:     if ((__builtin_constant_p(l >= 0) && (l >= 0)))
-40039:       eval(q, r, static_cast<unsigned long>(l));
-40039:     else if ((__builtin_constant_p(l <= 0) && (l <= 0)))
-40039:       {
-40039:         eval(q, r, -static_cast<unsigned long>(l));
-40039:  __gmpq_neg(q, q);
-40039:       }
-40039:     else
-40039:       {
-40039:  mpq_t temp; mp_limb_t limbs[1 +1]; (&((temp)->_mp_num))->_mp_d = limbs; __mpz_set_si_safe ((&((temp)->_mp_num)), l); (&((temp)->_mp_den))->_mp_d = limbs + 1; (&((temp)->_mp_den))->_mp_size = 1; (&((temp)->_mp_den))->_mp_d[0] = 1;
-40039:  __gmpq_div (q, r, temp);
-40039:       }
-40039:   }
-40039:   static void eval(mpq_ptr q, signed long int l, mpq_srcptr r)
-40039:   { mpq_t temp; mp_limb_t limbs[1 +1]; (&((temp)->_mp_num))->_mp_d = limbs; __mpz_set_si_safe ((&((temp)->_mp_num)), l); (&((temp)->_mp_den))->_mp_d = limbs + 1; (&((temp)->_mp_den))->_mp_size = 1; (&((temp)->_mp_den))->_mp_d[0] = 1; __gmpq_div (q, temp, r); }
-40039:   static void eval(mpq_ptr q, mpq_srcptr r, double d)
-40039:   { mpq_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1 + (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpq_set_d (temp, d); __gmpq_div (q, r, temp); }
-40039:   static void eval(mpq_ptr q, double d, mpq_srcptr r)
-40039:   { mpq_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1 + (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpq_set_d (temp, d); __gmpq_div (q, temp, r); }
-40039: 
-40039:   static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h)
-40039:   { __gmpf_div(f, g, h); }
-40039: 
-40039:   static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l)
-40039:   { __gmpf_div_ui(f, g, l); }
-40039:   static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g)
-40039:   { __gmpf_ui_div(f, l, g); }
-40039:   static void eval(mpf_ptr f, mpf_srcptr g, signed long int l)
-40039:   {
-40039:     if (l >= 0)
-40039:       __gmpf_div_ui(f, g, l);
-40039:     else
-40039:       {
-40039:  __gmpf_div_ui(f, g, -static_cast<unsigned long>(l));
-40039:  __gmpf_neg(f, f);
-40039:       }
-40039:   }
-40039:   static void eval(mpf_ptr f, signed long int l, mpf_srcptr g)
-40039:   {
-40039:     if (l >= 0)
-40039:       __gmpf_ui_div(f, l, g);
-40039:     else
-40039:       {
-40039:  __gmpf_ui_div(f, -static_cast<unsigned long>(l), g);
-40039:  __gmpf_neg(f, f);
-40039:       }
-40039:   }
-40039:   static void eval(mpf_ptr f, mpf_srcptr g, double d)
-40039:   {
-40039:     mpf_t temp;
-40039:     __gmpf_init2(temp, 8*sizeof(double));
-40039:     __gmpf_set_d(temp, d);
-40039:     __gmpf_div(f, g, temp);
-40039:     __gmpf_clear(temp);
-40039:   }
-40039:   static void eval(mpf_ptr f, double d, mpf_srcptr g)
-40039:   {
-40039:     mpf_t temp;
-40039:     __gmpf_init2(temp, 8*sizeof(double));
-40039:     __gmpf_set_d(temp, d);
-40039:     __gmpf_div(f, temp, g);
-40039:     __gmpf_clear(temp);
-40039:   }
-40039: };
-40039: 
-40039: struct __gmp_binary_modulus
-40039: {
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v)
-40039:   { __gmpz_tdiv_r(z, w, v); }
-40039: 
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l)
-40039:   { __gmpz_tdiv_r_ui(z, w, l); }
-40039:   static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w)
-40039:   {
-40039:     if (((w)->_mp_size < 0 ? -1 : (w)->_mp_size > 0) >= 0)
-40039:       {
-40039:  if (__gmpz_fits_ulong_p(w))
-40039:    __gmpz_set_ui(z, l % __gmpz_get_ui(w));
-40039:  else
-40039:    __gmpz_set_ui(z, l);
-40039:       }
-40039:     else
-40039:       {
-40039:  __gmpz_neg(z, w);
-40039:  if (__gmpz_fits_ulong_p(z))
-40039:    __gmpz_set_ui(z, l % __gmpz_get_ui(z));
-40039:  else
-40039:    __gmpz_set_ui(z, l);
-40039:       }
-40039:   }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, signed long int l)
-40039:   {
-40039:     __gmpz_tdiv_r_ui (z, w, __gmpxx_abs_ui(l));
-40039:   }
-40039:   static void eval(mpz_ptr z, signed long int l, mpz_srcptr w)
-40039:   {
-40039:     if (__gmpz_fits_slong_p(w))
-40039:       __gmpz_set_si(z, l % __gmpz_get_si(w));
-40039:     else
-40039:       {
-40039: 
-40039: 
-40039:         __gmpz_set_si (z, __gmpz_cmpabs_ui (w, __gmpxx_abs_ui(l)) == 0 ? 0 : l);
-40039:       }
-40039:   }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, double d)
-40039:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_tdiv_r (z, w, temp); }
-40039:   static void eval(mpz_ptr z, double d, mpz_srcptr w)
-40039:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_tdiv_r (z, temp, w); }
-40039: };
-40039: 
-40039: struct __gmp_binary_and
-40039: {
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v)
-40039:   { __gmpz_and(z, w, v); }
-40039: 
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l)
-40039:   { mpz_t temp; mp_limb_t limbs[1]; temp->_mp_d = limbs; __mpz_set_ui_safe (temp, l); __gmpz_and (z, w, temp); }
-40039:   static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w)
-40039:   { eval(z, w, l); }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, signed long int l)
-40039:   { mpz_t temp; mp_limb_t limbs[1]; temp->_mp_d = limbs; __mpz_set_si_safe (temp, l); __gmpz_and (z, w, temp); }
-40039:   static void eval(mpz_ptr z, signed long int l, mpz_srcptr w)
-40039:   { eval(z, w, l); }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, double d)
-40039:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_and (z, w, temp); }
-40039:   static void eval(mpz_ptr z, double d, mpz_srcptr w)
-40039:   { eval(z, w, d); }
-40039: };
-40039: 
-40039: struct __gmp_binary_ior
-40039: {
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v)
-40039:   { __gmpz_ior(z, w, v); }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l)
-40039:   { mpz_t temp; mp_limb_t limbs[1]; temp->_mp_d = limbs; __mpz_set_ui_safe (temp, l); __gmpz_ior (z, w, temp); }
-40039:   static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w)
-40039:   { eval(z, w, l); }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, signed long int l)
-40039:   { mpz_t temp; mp_limb_t limbs[1]; temp->_mp_d = limbs; __mpz_set_si_safe (temp, l); __gmpz_ior (z, w, temp); }
-40039:   static void eval(mpz_ptr z, signed long int l, mpz_srcptr w)
-40039:   { eval(z, w, l); }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, double d)
-40039:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_ior (z, w, temp); }
-40039:   static void eval(mpz_ptr z, double d, mpz_srcptr w)
-40039:   { eval(z, w, d); }
-40039: };
-40039: 
-40039: struct __gmp_binary_xor
-40039: {
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v)
-40039:   { __gmpz_xor(z, w, v); }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l)
-40039:   { mpz_t temp; mp_limb_t limbs[1]; temp->_mp_d = limbs; __mpz_set_ui_safe (temp, l); __gmpz_xor (z, w, temp); }
-40039:   static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w)
-40039:   { eval(z, w, l); }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, signed long int l)
-40039:   { mpz_t temp; mp_limb_t limbs[1]; temp->_mp_d = limbs; __mpz_set_si_safe (temp, l); __gmpz_xor (z, w, temp); }
-40039:   static void eval(mpz_ptr z, signed long int l, mpz_srcptr w)
-40039:   { eval(z, w, l); }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, double d)
-40039:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_xor (z, w, temp); }
-40039:   static void eval(mpz_ptr z, double d, mpz_srcptr w)
-40039:   { eval(z, w, d); }
-40039: };
-40039: 
-40039: struct __gmp_cmp_function
-40039: {
-40039:   static int eval(mpz_srcptr z, mpz_srcptr w) { return __gmpz_cmp(z, w); }
-40039: 
-40039:   static int eval(mpz_srcptr z, unsigned long int l)
-40039:   { return (__builtin_constant_p (l) && (l) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,l)); }
-40039:   static int eval(unsigned long int l, mpz_srcptr z)
-40039:   { return -(__builtin_constant_p (l) && (l) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,l)); }
-40039:   static int eval(mpz_srcptr z, signed long int l)
-40039:   { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast<unsigned long> (l))) && ((static_cast<unsigned long> (l))) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,(static_cast<unsigned long> (l)))) : __gmpz_cmp_si (z,l)); }
-40039:   static int eval(signed long int l, mpz_srcptr z)
-40039:   { return -(__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast<unsigned long> (l))) && ((static_cast<unsigned long> (l))) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,(static_cast<unsigned long> (l)))) : __gmpz_cmp_si (z,l)); }
-40039:   static int eval(mpz_srcptr z, double d)
-40039:   { return __gmpz_cmp_d(z, d); }
-40039:   static int eval(double d, mpz_srcptr z)
-40039:   { return -__gmpz_cmp_d(z, d); }
-40039: 
-40039:   static int eval(mpq_srcptr q, mpq_srcptr r) { return __gmpq_cmp(q, r); }
-40039: 
-40039:   static int eval(mpq_srcptr q, unsigned long int l)
-40039:   { return (__builtin_constant_p (l) && (l) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p ((l) == (1)) && (l) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,l,1)); }
-40039:   static int eval(unsigned long int l, mpq_srcptr q)
-40039:   { return -(__builtin_constant_p (l) && (l) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p ((l) == (1)) && (l) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,l,1)); }
-40039:   static int eval(mpq_srcptr q, signed long int l)
-40039:   { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast<unsigned long> (l))) && ((static_cast<unsigned long> (l))) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p (((static_cast<unsigned long> (l))) == (1)) && ((static_cast<unsigned long> (l))) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,(static_cast<unsigned long> (l)),1)) : __gmpq_cmp_si (q, l, 1)); }
-40039:   static int eval(signed long int l, mpq_srcptr q)
-40039:   { return -(__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast<unsigned long> (l))) && ((static_cast<unsigned long> (l))) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p (((static_cast<unsigned long> (l))) == (1)) && ((static_cast<unsigned long> (l))) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,(static_cast<unsigned long> (l)),1)) : __gmpq_cmp_si (q, l, 1)); }
-40039:   static int eval(mpq_srcptr q, double d)
-40039:   { mpq_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1 + (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpq_set_d (temp, d); return __gmpq_cmp (q, temp); }
-40039:   static int eval(double d, mpq_srcptr q)
-40039:   { mpq_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1 + (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpq_set_d (temp, d); return __gmpq_cmp (temp, q); }
-40039:   static int eval(mpq_srcptr q, mpz_srcptr z)
-40039:   { return __gmpq_cmp_z(q, z); }
-40039:   static int eval(mpz_srcptr z, mpq_srcptr q)
-40039:   { return -__gmpq_cmp_z(q, z); }
-40039: 
-40039:   static int eval(mpf_srcptr f, mpf_srcptr g) { return __gmpf_cmp(f, g); }
-40039: 
-40039:   static int eval(mpf_srcptr f, unsigned long int l)
-40039:   { return __gmpf_cmp_ui(f, l); }
-40039:   static int eval(unsigned long int l, mpf_srcptr f)
-40039:   { return -__gmpf_cmp_ui(f, l); }
-40039:   static int eval(mpf_srcptr f, signed long int l)
-40039:   { return __gmpf_cmp_si(f, l); }
-40039:   static int eval(signed long int l, mpf_srcptr f)
-40039:   { return -__gmpf_cmp_si(f, l); }
-40039:   static int eval(mpf_srcptr f, double d)
-40039:   { return __gmpf_cmp_d(f, d); }
-40039:   static int eval(double d, mpf_srcptr f)
-40039:   { return -__gmpf_cmp_d(f, d); }
-40039:   static int eval(mpf_srcptr f, mpz_srcptr z)
-40039:   { return __gmpf_cmp_z(f, z); }
-40039:   static int eval(mpz_srcptr z, mpf_srcptr f)
-40039:   { return -__gmpf_cmp_z(f, z); }
-40039:   static int eval(mpf_srcptr f, mpq_srcptr q)
-40039:   {
-40039:     mpf_t qf;
-40039:     __gmpf_init(qf);
-40039:     __gmpf_set_q(qf, q);
-40039:     int ret = eval(f, qf);
-40039:     __gmpf_clear(qf);
-40039:     return ret;
-40039:   }
-40039:   static int eval(mpq_srcptr q, mpf_srcptr f)
-40039:   { return -eval(f, q); }
-40039: };
-40039: 
-40039: struct __gmp_binary_equal
-40039: {
-40039:   static bool eval(mpz_srcptr z, mpz_srcptr w) { return __gmpz_cmp(z, w) == 0; }
-40039: 
-40039:   static bool eval(mpz_srcptr z, unsigned long int l)
-40039:   { return (__builtin_constant_p (l) && (l) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,l)) == 0; }
-40039:   static bool eval(unsigned long int l, mpz_srcptr z)
-40039:   { return eval(z, l); }
-40039:   static bool eval(mpz_srcptr z, signed long int l)
-40039:   { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast<unsigned long> (l))) && ((static_cast<unsigned long> (l))) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,(static_cast<unsigned long> (l)))) : __gmpz_cmp_si (z,l)) == 0; }
-40039:   static bool eval(signed long int l, mpz_srcptr z)
-40039:   { return eval(z, l); }
-40039:   static bool eval(mpz_srcptr z, double d)
-40039:   { return __gmpz_cmp_d(z, d) == 0; }
-40039:   static bool eval(double d, mpz_srcptr z)
-40039:   { return eval(z, d); }
-40039: 
-40039:   static bool eval(mpq_srcptr q, mpq_srcptr r)
-40039:   { return __gmpq_equal(q, r) != 0; }
-40039: 
-40039:   static bool eval(mpq_srcptr q, unsigned long int l)
-40039:   { return (__builtin_constant_p (l) && (l) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p ((l) == (1)) && (l) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,l,1)) == 0; }
-40039:   static bool eval(unsigned long int l, mpq_srcptr q)
-40039:   { return eval(q, l); }
-40039:   static bool eval(mpq_srcptr q, signed long int l)
-40039:   { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast<unsigned long> (l))) && ((static_cast<unsigned long> (l))) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p (((static_cast<unsigned long> (l))) == (1)) && ((static_cast<unsigned long> (l))) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,(static_cast<unsigned long> (l)),1)) : __gmpq_cmp_si (q, l, 1)) == 0; }
-40039:   static bool eval(signed long int l, mpq_srcptr q)
-40039:   { return eval(q, l); }
-40039:   static bool eval(mpq_srcptr q, double d)
-40039:   { mpq_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1 + (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpq_set_d (temp, d); return __gmpq_equal (q, temp) != 0; }
-40039:   static bool eval(double d, mpq_srcptr q)
-40039:   { return eval(q, d); }
-40039:   static bool eval(mpq_srcptr q, mpz_srcptr z)
-40039:   { return __gmpq_cmp_z(q, z) == 0; }
-40039:   static bool eval(mpz_srcptr z, mpq_srcptr q)
-40039:   { return eval(q, z); }
-40039: 
-40039:   static bool eval(mpf_srcptr f, mpf_srcptr g) { return __gmpf_cmp(f, g) == 0; }
-40039: 
-40039:   static bool eval(mpf_srcptr f, unsigned long int l)
-40039:   { return __gmpf_cmp_ui(f, l) == 0; }
-40039:   static bool eval(unsigned long int l, mpf_srcptr f)
-40039:   { return eval(f, l); }
-40039:   static bool eval(mpf_srcptr f, signed long int l)
-40039:   { return __gmpf_cmp_si(f, l) == 0; }
-40039:   static bool eval(signed long int l, mpf_srcptr f)
-40039:   { return eval(f, l); }
-40039:   static bool eval(mpf_srcptr f, double d)
-40039:   { return __gmpf_cmp_d(f, d) == 0; }
-40039:   static bool eval(double d, mpf_srcptr f)
-40039:   { return eval(f, d); }
-40039:   static bool eval(mpf_srcptr f, mpz_srcptr z)
-40039:   { return __gmpf_cmp_z(f, z) == 0; }
-40039:   static bool eval(mpz_srcptr z, mpf_srcptr f)
-40039:   { return eval(f, z); }
-40039:   static bool eval(mpf_srcptr f, mpq_srcptr q)
-40039:   { return __gmp_cmp_function::eval(f, q) == 0; }
-40039:   static bool eval(mpq_srcptr q, mpf_srcptr f)
-40039:   { return eval(f, q); }
-40039: };
-40039: 
-40039: struct __gmp_binary_less
-40039: {
-40039:   static bool eval(mpz_srcptr z, mpz_srcptr w) { return __gmpz_cmp(z, w) < 0; }
-40039: 
-40039:   static bool eval(mpz_srcptr z, unsigned long int l)
-40039:   { return (__builtin_constant_p (l) && (l) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,l)) < 0; }
-40039:   static bool eval(unsigned long int l, mpz_srcptr z)
-40039:   { return (__builtin_constant_p (l) && (l) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,l)) > 0; }
-40039:   static bool eval(mpz_srcptr z, signed long int l)
-40039:   { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast<unsigned long> (l))) && ((static_cast<unsigned long> (l))) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,(static_cast<unsigned long> (l)))) : __gmpz_cmp_si (z,l)) < 0; }
-40039:   static bool eval(signed long int l, mpz_srcptr z)
-40039:   { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast<unsigned long> (l))) && ((static_cast<unsigned long> (l))) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,(static_cast<unsigned long> (l)))) : __gmpz_cmp_si (z,l)) > 0; }
-40039:   static bool eval(mpz_srcptr z, double d)
-40039:   { return __gmpz_cmp_d(z, d) < 0; }
-40039:   static bool eval(double d, mpz_srcptr z)
-40039:   { return __gmpz_cmp_d(z, d) > 0; }
-40039: 
-40039:   static bool eval(mpq_srcptr q, mpq_srcptr r) { return __gmpq_cmp(q, r) < 0; }
-40039: 
-40039:   static bool eval(mpq_srcptr q, unsigned long int l)
-40039:   { return (__builtin_constant_p (l) && (l) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p ((l) == (1)) && (l) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,l,1)) < 0; }
-40039:   static bool eval(unsigned long int l, mpq_srcptr q)
-40039:   { return (__builtin_constant_p (l) && (l) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p ((l) == (1)) && (l) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,l,1)) > 0; }
-40039:   static bool eval(mpq_srcptr q, signed long int l)
-40039:   { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast<unsigned long> (l))) && ((static_cast<unsigned long> (l))) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p (((static_cast<unsigned long> (l))) == (1)) && ((static_cast<unsigned long> (l))) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,(static_cast<unsigned long> (l)),1)) : __gmpq_cmp_si (q, l, 1)) < 0; }
-40039:   static bool eval(signed long int l, mpq_srcptr q)
-40039:   { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast<unsigned long> (l))) && ((static_cast<unsigned long> (l))) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p (((static_cast<unsigned long> (l))) == (1)) && ((static_cast<unsigned long> (l))) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,(static_cast<unsigned long> (l)),1)) : __gmpq_cmp_si (q, l, 1)) > 0; }
-40039:   static bool eval(mpq_srcptr q, double d)
-40039:   { mpq_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1 + (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpq_set_d (temp, d); return __gmpq_cmp (q, temp) < 0; }
-40039:   static bool eval(double d, mpq_srcptr q)
-40039:   { mpq_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1 + (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpq_set_d (temp, d); return __gmpq_cmp (temp, q) < 0; }
-40039:   static bool eval(mpq_srcptr q, mpz_srcptr z)
-40039:   { return __gmpq_cmp_z(q, z) < 0; }
-40039:   static bool eval(mpz_srcptr z, mpq_srcptr q)
-40039:   { return __gmpq_cmp_z(q, z) > 0; }
-40039: 
-40039:   static bool eval(mpf_srcptr f, mpf_srcptr g) { return __gmpf_cmp(f, g) < 0; }
-40039: 
-40039:   static bool eval(mpf_srcptr f, unsigned long int l)
-40039:   { return __gmpf_cmp_ui(f, l) < 0; }
-40039:   static bool eval(unsigned long int l, mpf_srcptr f)
-40039:   { return __gmpf_cmp_ui(f, l) > 0; }
-40039:   static bool eval(mpf_srcptr f, signed long int l)
-40039:   { return __gmpf_cmp_si(f, l) < 0; }
-40039:   static bool eval(signed long int l, mpf_srcptr f)
-40039:   { return __gmpf_cmp_si(f, l) > 0; }
-40039:   static bool eval(mpf_srcptr f, double d)
-40039:   { return __gmpf_cmp_d(f, d) < 0; }
-40039:   static bool eval(double d, mpf_srcptr f)
-40039:   { return __gmpf_cmp_d(f, d) > 0; }
-40039:   static bool eval(mpf_srcptr f, mpz_srcptr z)
-40039:   { return __gmpf_cmp_z(f, z) < 0; }
-40039:   static bool eval(mpz_srcptr z, mpf_srcptr f)
-40039:   { return __gmpf_cmp_z(f, z) > 0; }
-40039:   static bool eval(mpf_srcptr f, mpq_srcptr q)
-40039:   { return __gmp_cmp_function::eval(f, q) < 0; }
-40039:   static bool eval(mpq_srcptr q, mpf_srcptr f)
-40039:   { return __gmp_cmp_function::eval(q, f) < 0; }
-40039: };
-40039: 
-40039: struct __gmp_binary_greater
-40039: {
-40039:   template <class T, class U>
-40039:   static inline bool eval(T t, U u) { return __gmp_binary_less::eval(u, t); }
-40039: };
-40039: 
-40039: struct __gmp_unary_increment
-40039: {
-40039:   static void eval(mpz_ptr z) { __gmpz_add_ui(z, z, 1); }
-40039:   static void eval(mpq_ptr q)
-40039:   { __gmpz_add((&((q)->_mp_num)), (&((q)->_mp_num)), (&((q)->_mp_den))); }
-40039:   static void eval(mpf_ptr f) { __gmpf_add_ui(f, f, 1); }
-40039: };
-40039: 
-40039: struct __gmp_unary_decrement
-40039: {
-40039:   static void eval(mpz_ptr z) { __gmpz_sub_ui(z, z, 1); }
-40039:   static void eval(mpq_ptr q)
-40039:   { __gmpz_sub((&((q)->_mp_num)), (&((q)->_mp_num)), (&((q)->_mp_den))); }
-40039:   static void eval(mpf_ptr f) { __gmpf_sub_ui(f, f, 1); }
-40039: };
-40039: 
-40039: struct __gmp_abs_function
-40039: {
-40039:   static void eval(mpz_ptr z, mpz_srcptr w) { __gmpz_abs(z, w); }
-40039:   static void eval(mpq_ptr q, mpq_srcptr r) { __gmpq_abs(q, r); }
-40039:   static void eval(mpf_ptr f, mpf_srcptr g) { __gmpf_abs(f, g); }
-40039: };
-40039: 
-40039: struct __gmp_trunc_function
-40039: {
-40039:   static void eval(mpf_ptr f, mpf_srcptr g) { __gmpf_trunc(f, g); }
-40039: };
-40039: 
-40039: struct __gmp_floor_function
-40039: {
-40039:   static void eval(mpf_ptr f, mpf_srcptr g) { __gmpf_floor(f, g); }
-40039: };
-40039: 
-40039: struct __gmp_ceil_function
-40039: {
-40039:   static void eval(mpf_ptr f, mpf_srcptr g) { __gmpf_ceil(f, g); }
-40039: };
-40039: 
-40039: struct __gmp_sqrt_function
-40039: {
-40039:   static void eval(mpz_ptr z, mpz_srcptr w) { __gmpz_sqrt(z, w); }
-40039:   static void eval(mpf_ptr f, mpf_srcptr g) { __gmpf_sqrt(f, g); }
-40039: };
-40039: 
-40039: struct __gmp_hypot_function
-40039: {
-40039:   static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h)
-40039:   {
-40039:     mpf_t temp;
-40039:     __gmpf_init2(temp, __gmpf_get_prec(f));
-40039:     __gmpf_mul(temp, g, g);
-40039:     __gmpf_mul(f, h, h);
-40039:     __gmpf_add(f, f, temp);
-40039:     __gmpf_sqrt(f, f);
-40039:     __gmpf_clear(temp);
-40039:   }
-40039: 
-40039:   static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l)
-40039:   {
-40039:     mpf_t temp;
-40039:     __gmpf_init2(temp, __gmpf_get_prec(f));
-40039:     __gmpf_mul(temp, g, g);
-40039:     __gmpf_set_ui(f, l);
-40039:     __gmpf_mul_ui(f, f, l);
-40039:     __gmpf_add(f, f, temp);
-40039:     __gmpf_clear(temp);
-40039:     __gmpf_sqrt(f, f);
-40039:   }
-40039:   static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g)
-40039:   { eval(f, g, l); }
-40039:   static void eval(mpf_ptr f, mpf_srcptr g, signed long int l)
-40039:   { eval(f, g, __gmpxx_abs_ui(l)); }
-40039:   static void eval(mpf_ptr f, signed long int l, mpf_srcptr g)
-40039:   { eval(f, g, l); }
-40039:   static void eval(mpf_ptr f, mpf_srcptr g, double d)
-40039:   {
-40039:     mpf_t temp;
-40039:     __gmpf_init2(temp, __gmpf_get_prec(f));
-40039:     __gmpf_mul(temp, g, g);
-40039:     __gmpf_set_d(f, d);
-40039:     __gmpf_mul(f, f, f);
-40039:     __gmpf_add(f, f, temp);
-40039:     __gmpf_sqrt(f, f);
-40039:     __gmpf_clear(temp);
-40039:   }
-40039:   static void eval(mpf_ptr f, double d, mpf_srcptr g)
-40039:   { eval(f, g, d); }
-40039: };
-40039: 
-40039: struct __gmp_sgn_function
-40039: {
-40039:   static int eval(mpz_srcptr z) { return ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0); }
-40039:   static int eval(mpq_srcptr q) { return ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0); }
-40039:   static int eval(mpf_srcptr f) { return ((f)->_mp_size < 0 ? -1 : (f)->_mp_size > 0); }
-40039: };
-40039: 
-40039: struct __gmp_gcd_function
-40039: {
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v)
-40039:   { __gmpz_gcd(z, w, v); }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l)
-40039:   { __gmpz_gcd_ui(z, w, l); }
-40039:   static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w)
-40039:   { eval(z, w, l); }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, signed long int l)
-40039:   { eval(z, w, __gmpxx_abs_ui(l)); }
-40039:   static void eval(mpz_ptr z, signed long int l, mpz_srcptr w)
-40039:   { eval(z, w, l); }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, double d)
-40039:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_gcd (z, w, temp); }
-40039:   static void eval(mpz_ptr z, double d, mpz_srcptr w)
-40039:   { eval(z, w, d); }
-40039: };
-40039: 
-40039: struct __gmp_lcm_function
-40039: {
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v)
-40039:   { __gmpz_lcm(z, w, v); }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l)
-40039:   { __gmpz_lcm_ui(z, w, l); }
-40039:   static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w)
-40039:   { eval(z, w, l); }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, signed long int l)
-40039:   { eval(z, w, __gmpxx_abs_ui(l)); }
-40039:   static void eval(mpz_ptr z, signed long int l, mpz_srcptr w)
-40039:   { eval(z, w, l); }
-40039:   static void eval(mpz_ptr z, mpz_srcptr w, double d)
-40039:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_lcm (z, w, temp); }
-40039:   static void eval(mpz_ptr z, double d, mpz_srcptr w)
-40039:   { eval(z, w, d); }
-40039: };
-40039: 
-40039: struct __gmp_rand_function
-40039: {
-40039:   static void eval(mpz_ptr z, gmp_randstate_t s, mp_bitcnt_t l)
-40039:   { __gmpz_urandomb(z, s, l); }
-40039:   static void eval(mpz_ptr z, gmp_randstate_t s, mpz_srcptr w)
-40039:   { __gmpz_urandomm(z, s, w); }
-40039:   static void eval(mpf_ptr f, gmp_randstate_t s, mp_bitcnt_t prec)
-40039:   { __gmpf_urandomb(f, s, prec); }
-40039: };
-40039: # 1204 "/usr/include/gmpxx.h" 3 4
-40039: extern "C" {
-40039:   typedef void (*__gmp_freefunc_t) (void *, size_t);
-40039: }
-40039: struct __gmp_alloc_cstring
-40039: {
-40039:   char *str;
-40039:   __gmp_alloc_cstring(char *s) { str = s; }
-40039:   ~__gmp_alloc_cstring()
-40039:   {
-40039:     __gmp_freefunc_t freefunc;
-40039:     __gmp_get_memory_functions (__null, __null, &freefunc);
-40039:     (*freefunc) (str, std::strlen(str)+1);
-40039:   }
-40039: };
-40039: 
-40039: 
-40039: 
-40039: template <class T, class U>
-40039: class __gmp_expr;
-40039: 
-40039: 
-40039: 
-40039: template <class T>
-40039: struct __gmp_resolve_ref
-40039: {
-40039:   typedef T ref_type;
-40039: };
-40039: 
-40039: template <class T, class U>
-40039: struct __gmp_resolve_ref<__gmp_expr<T, U> >
-40039: {
-40039:   typedef const __gmp_expr<T, U> & ref_type;
-40039: };
-40039: 
-40039: 
-40039: template <class T, class U = T>
-40039: struct __gmp_resolve_expr;
-40039: 
-40039: template <>
-40039: struct __gmp_resolve_expr<mpz_t>
-40039: {
-40039:   typedef mpz_t value_type;
-40039:   typedef mpz_ptr ptr_type;
-40039:   typedef mpz_srcptr srcptr_type;
-40039: };
-40039: 
-40039: template <>
-40039: struct __gmp_resolve_expr<mpq_t>
-40039: {
-40039:   typedef mpq_t value_type;
-40039:   typedef mpq_ptr ptr_type;
-40039:   typedef mpq_srcptr srcptr_type;
-40039: };
-40039: 
-40039: template <>
-40039: struct __gmp_resolve_expr<mpf_t>
-40039: {
-40039:   typedef mpf_t value_type;
-40039:   typedef mpf_ptr ptr_type;
-40039:   typedef mpf_srcptr srcptr_type;
-40039: };
-40039: 
-40039: template <>
-40039: struct __gmp_resolve_expr<mpz_t, mpq_t>
-40039: {
-40039:   typedef mpq_t value_type;
-40039: };
-40039: 
-40039: template <>
-40039: struct __gmp_resolve_expr<mpq_t, mpz_t>
-40039: {
-40039:   typedef mpq_t value_type;
-40039: };
-40039: 
-40039: template <>
-40039: struct __gmp_resolve_expr<mpz_t, mpf_t>
-40039: {
-40039:   typedef mpf_t value_type;
-40039: };
-40039: 
-40039: template <>
-40039: struct __gmp_resolve_expr<mpf_t, mpz_t>
-40039: {
-40039:   typedef mpf_t value_type;
-40039: };
-40039: 
-40039: template <>
-40039: struct __gmp_resolve_expr<mpq_t, mpf_t>
-40039: {
-40039:   typedef mpf_t value_type;
-40039: };
-40039: 
-40039: template <>
-40039: struct __gmp_resolve_expr<mpf_t, mpq_t>
-40039: {
-40039:   typedef mpf_t value_type;
-40039: };
-40039: 
-40039: 
-40039: namespace std {
-40039:   template <class T, class U, class V, class W>
-40039:   struct common_type <__gmp_expr<T, U>, __gmp_expr<V, W> >
-40039:   {
-40039:   private:
-40039:     typedef typename __gmp_resolve_expr<T, V>::value_type X;
-40039:   public:
-40039:     typedef __gmp_expr<X, X> type;
-40039:   };
-40039: 
-40039:   template <class T, class U>
-40039:   struct common_type <__gmp_expr<T, U> >
-40039:   {
-40039:     typedef __gmp_expr<T, T> type;
-40039:   };
-40039: # 1332 "/usr/include/gmpxx.h" 3 4
-40039:   template <class T, class U> struct common_type <__gmp_expr<T, U>, signed char > { typedef __gmp_expr<T, T> type; }; template <class T, class U> struct common_type <signed char, __gmp_expr<T, U> > { typedef __gmp_expr<T, T> type; };
-40039:   template <class T, class U> struct common_type <__gmp_expr<T, U>, unsigned char > { typedef __gmp_expr<T, T> type; }; template <class T, class U> struct common_type <unsigned char, __gmp_expr<T, U> > { typedef __gmp_expr<T, T> type; };
-40039:   template <class T, class U> struct common_type <__gmp_expr<T, U>, signed int > { typedef __gmp_expr<T, T> type; }; template <class T, class U> struct common_type <signed int, __gmp_expr<T, U> > { typedef __gmp_expr<T, T> type; };
-40039:   template <class T, class U> struct common_type <__gmp_expr<T, U>, unsigned int > { typedef __gmp_expr<T, T> type; }; template <class T, class U> struct common_type <unsigned int, __gmp_expr<T, U> > { typedef __gmp_expr<T, T> type; };
-40039:   template <class T, class U> struct common_type <__gmp_expr<T, U>, signed short int > { typedef __gmp_expr<T, T> type; }; template <class T, class U> struct common_type <signed short int, __gmp_expr<T, U> > { typedef __gmp_expr<T, T> type; };
-40039:   template <class T, class U> struct common_type <__gmp_expr<T, U>, unsigned short int > { typedef __gmp_expr<T, T> type; }; template <class T, class U> struct common_type <unsigned short int, __gmp_expr<T, U> > { typedef __gmp_expr<T, T> type; };
-40039:   template <class T, class U> struct common_type <__gmp_expr<T, U>, signed long int > { typedef __gmp_expr<T, T> type; }; template <class T, class U> struct common_type <signed long int, __gmp_expr<T, U> > { typedef __gmp_expr<T, T> type; };
-40039:   template <class T, class U> struct common_type <__gmp_expr<T, U>, unsigned long int > { typedef __gmp_expr<T, T> type; }; template <class T, class U> struct common_type <unsigned long int, __gmp_expr<T, U> > { typedef __gmp_expr<T, T> type; };
-40039:   template <class T, class U> struct common_type <__gmp_expr<T, U>, float > { typedef __gmp_expr<T, T> type; }; template <class T, class U> struct common_type <float, __gmp_expr<T, U> > { typedef __gmp_expr<T, T> type; };
-40039:   template <class T, class U> struct common_type <__gmp_expr<T, U>, double > { typedef __gmp_expr<T, T> type; }; template <class T, class U> struct common_type <double, __gmp_expr<T, U> > { typedef __gmp_expr<T, T> type; };
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: template <class T, class Op>
-40039: struct __gmp_unary_expr
-40039: {
-40039:   typename __gmp_resolve_ref<T>::ref_type val;
-40039: 
-40039:   __gmp_unary_expr(const T &v) : val(v) { }
-40039: private:
-40039:   __gmp_unary_expr();
-40039: };
-40039: 
-40039: template <class T, class U, class Op>
-40039: struct __gmp_binary_expr
-40039: {
-40039:   typename __gmp_resolve_ref<T>::ref_type val1;
-40039:   typename __gmp_resolve_ref<U>::ref_type val2;
-40039: 
-40039:   __gmp_binary_expr(const T &v1, const U &v2) : val1(v1), val2(v2) { }
-40039: private:
-40039:   __gmp_binary_expr();
-40039: };
-40039: # 1428 "/usr/include/gmpxx.h" 3 4
-40039: template <>
-40039: class __gmp_expr<mpz_t, mpz_t>
-40039: {
-40039: private:
-40039:   typedef mpz_t value_type;
-40039:   value_type mp;
-40039: 
-40039: 
-40039:   void assign_ui(unsigned long l)
-40039:   {
-40039:     if ((__builtin_constant_p(l == 0) && (l == 0)))
-40039:       mp->_mp_size = 0;
-40039:     else
-40039:       __gmpz_set_ui(mp, l);
-40039:   }
-40039:   void assign_si(signed long l)
-40039:   {
-40039:     if ((__builtin_constant_p(l >= 0) && (l >= 0)))
-40039:       assign_ui(l);
-40039:     else if ((__builtin_constant_p(l <= 0) && (l <= 0)))
-40039:       {
-40039:  assign_ui(-static_cast<unsigned long>(l));
-40039:  __gmpz_neg(mp, mp);
-40039:       }
-40039:     else
-40039:       __gmpz_set_si(mp, l);
-40039:   }
-40039:   void assign_d (double d)
-40039:   {
-40039:     __gmpz_set_d (mp, d);
-40039:   }
-40039: 
-40039:   void init_ui(unsigned long l)
-40039:   {
-40039:     if ((__builtin_constant_p(l == 0) && (l == 0)))
-40039:       __gmpz_init(mp);
-40039:     else
-40039:       __gmpz_init_set_ui(mp, l);
-40039:   }
-40039:   void init_si(signed long l)
-40039:   {
-40039:     if ((__builtin_constant_p(l >= 0) && (l >= 0)))
-40039:       init_ui(l);
-40039:     else if ((__builtin_constant_p(l <= 0) && (l <= 0)))
-40039:       {
-40039:  init_ui(-static_cast<unsigned long>(l));
-40039:  __gmpz_neg(mp, mp);
-40039:       }
-40039:     else
-40039:       __gmpz_init_set_si(mp, l);
-40039:   }
-40039:   void init_d (double d)
-40039:   {
-40039:     __gmpz_init_set_d (mp, d);
-40039:   }
-40039: 
-40039: public:
-40039:   mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); }
-40039: 
-40039: 
-40039:   __gmp_expr() { __gmpz_init(mp); }
-40039: 
-40039:   __gmp_expr(const __gmp_expr &z) { __gmpz_init_set(mp, z.mp); }
-40039: 
-40039:   __gmp_expr(__gmp_expr &&z)
-40039:   { *mp = *z.mp; __gmpz_init(z.mp); }
-40039: 
-40039:   template <class T>
-40039:   __gmp_expr(const __gmp_expr<mpz_t, T> &expr)
-40039:   { __gmpz_init(mp); __gmp_set_expr(mp, expr); }
-40039:   template <class T, class U>
-40039:   explicit __gmp_expr(const __gmp_expr<T, U> &expr)
-40039:   { __gmpz_init(mp); __gmp_set_expr(mp, expr); }
-40039: 
-40039:   __gmp_expr(signed char c) { init_si(c); } __gmp_expr(unsigned char c) { init_ui(c); } __gmp_expr(signed int i) { init_si(i); } __gmp_expr(unsigned int i) { init_ui(i); } __gmp_expr(signed short int s) { init_si(s); } __gmp_expr(unsigned short int s) { init_ui(s); } __gmp_expr(signed long int l) { init_si(l); } __gmp_expr(unsigned long int l) { init_ui(l); } __gmp_expr(float f) { init_d(f); } __gmp_expr(double d) { init_d(d); }
-40039: 
-40039:   explicit __gmp_expr(const char *s, int base = 0)
-40039:   {
-40039:     if (__gmpz_init_set_str (mp, s, base) != 0)
-40039:       {
-40039:         __gmpz_clear (mp);
-40039:         throw std::invalid_argument ("mpz_set_str");
-40039:       }
-40039:   }
-40039:   explicit __gmp_expr(const std::string &s, int base = 0)
-40039:   {
-40039:     if (__gmpz_init_set_str(mp, s.c_str(), base) != 0)
-40039:       {
-40039:         __gmpz_clear (mp);
-40039:         throw std::invalid_argument ("mpz_set_str");
-40039:       }
-40039:   }
-40039: 
-40039:   explicit __gmp_expr(mpz_srcptr z) { __gmpz_init_set(mp, z); }
-40039: 
-40039:   ~__gmp_expr() { __gmpz_clear(mp); }
-40039: 
-40039:   void swap(__gmp_expr& z) noexcept { std::swap(*mp, *z.mp); }
-40039: 
-40039: 
-40039:   __gmp_expr & operator=(const __gmp_expr &z)
-40039:   { __gmpz_set(mp, z.mp); return *this; }
-40039: 
-40039:   __gmp_expr & operator=(__gmp_expr &&z) noexcept
-40039:   { swap(z); return *this; }
-40039: 
-40039:   template <class T, class U>
-40039:   __gmp_expr<value_type, value_type> & operator=(const __gmp_expr<T, U> &expr)
-40039:   { __gmp_set_expr(mp, expr); return *this; }
-40039: 
-40039:   __gmp_expr & operator=(signed char c) { assign_si(c); return *this; } __gmp_expr & operator=(unsigned char c) { assign_ui(c); return *this; } __gmp_expr & operator=(signed int i) { assign_si(i); return *this; } __gmp_expr & operator=(unsigned int i) { assign_ui(i); return *this; } __gmp_expr & operator=(signed short int s) { assign_si(s); return *this; } __gmp_expr & operator=(unsigned short int s) { assign_ui(s); return *this; } __gmp_expr & operator=(signed long int l) { assign_si(l); return *this; } __gmp_expr & operator=(unsigned long int l) { assign_ui(l); return *this; } __gmp_expr & operator=(float f) { assign_d(f); return *this; } __gmp_expr & operator=(double d) { assign_d(d); return *this; }
-40039: 
-40039:   __gmp_expr & operator=(const char *s)
-40039:   {
-40039:     if (__gmpz_set_str (mp, s, 0) != 0)
-40039:       throw std::invalid_argument ("mpz_set_str");
-40039:     return *this;
-40039:   }
-40039:   __gmp_expr & operator=(const std::string &s)
-40039:   {
-40039:     if (__gmpz_set_str(mp, s.c_str(), 0) != 0)
-40039:       throw std::invalid_argument ("mpz_set_str");
-40039:     return *this;
-40039:   }
-40039: 
-40039: 
-40039:   int set_str(const char *s, int base)
-40039:   { return __gmpz_set_str(mp, s, base); }
-40039:   int set_str(const std::string &s, int base)
-40039:   { return __gmpz_set_str(mp, s.c_str(), base); }
-40039:   std::string get_str(int base = 10) const
-40039:   {
-40039:     __gmp_alloc_cstring temp(__gmpz_get_str(0, base, mp));
-40039:     return std::string(temp.str);
-40039:   }
-40039: 
-40039: 
-40039:   mpz_srcptr __get_mp() const { return mp; }
-40039:   mpz_ptr __get_mp() { return mp; }
-40039:   mpz_srcptr get_mpz_t() const { return mp; }
-40039:   mpz_ptr get_mpz_t() { return mp; }
-40039: 
-40039:   signed long int get_si() const { return __gmpz_get_si(mp); }
-40039:   unsigned long int get_ui() const { return __gmpz_get_ui(mp); }
-40039:   double get_d() const { return __gmpz_get_d(mp); }
-40039: 
-40039: 
-40039: 
-40039:   bool fits_sint_p() const { return __gmpz_fits_sint_p(mp); }
-40039:   bool fits_uint_p() const { return __gmpz_fits_uint_p(mp); }
-40039:   bool fits_sshort_p() const { return __gmpz_fits_sshort_p(mp); }
-40039:   bool fits_ushort_p() const { return __gmpz_fits_ushort_p(mp); }
-40039:   bool fits_slong_p() const { return __gmpz_fits_slong_p(mp); }
-40039:   bool fits_ulong_p() const { return __gmpz_fits_ulong_p(mp); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   explicit operator bool() const { return mp->_mp_size != 0; }
-40039: 
-40039: 
-40039: 
-40039:   template <class T, class U> __gmp_expr<value_type, value_type> & operator+=(const __gmp_expr<T, U> &); __gmp_expr & operator+=(signed char); __gmp_expr & operator+=(unsigned char); __gmp_expr & operator+=(signed int); __gmp_expr & operator+=(unsigned int); __gmp_expr & operator+=(signed short int); __gmp_expr & operator+=(unsigned short int); __gmp_expr & operator+=(signed long int); __gmp_expr & operator+=(unsigned long int); __gmp_expr & operator+=(float); __gmp_expr & operator+=(double);
-40039:   template <class T, class U> __gmp_expr<value_type, value_type> & operator-=(const __gmp_expr<T, U> &); __gmp_expr & operator-=(signed char); __gmp_expr & operator-=(unsigned char); __gmp_expr & operator-=(signed int); __gmp_expr & operator-=(unsigned int); __gmp_expr & operator-=(signed short int); __gmp_expr & operator-=(unsigned short int); __gmp_expr & operator-=(signed long int); __gmp_expr & operator-=(unsigned long int); __gmp_expr & operator-=(float); __gmp_expr & operator-=(double);
-40039:   template <class T, class U> __gmp_expr<value_type, value_type> & operator*=(const __gmp_expr<T, U> &); __gmp_expr & operator*=(signed char); __gmp_expr & operator*=(unsigned char); __gmp_expr & operator*=(signed int); __gmp_expr & operator*=(unsigned int); __gmp_expr & operator*=(signed short int); __gmp_expr & operator*=(unsigned short int); __gmp_expr & operator*=(signed long int); __gmp_expr & operator*=(unsigned long int); __gmp_expr & operator*=(float); __gmp_expr & operator*=(double);
-40039:   template <class T, class U> __gmp_expr<value_type, value_type> & operator/=(const __gmp_expr<T, U> &); __gmp_expr & operator/=(signed char); __gmp_expr & operator/=(unsigned char); __gmp_expr & operator/=(signed int); __gmp_expr & operator/=(unsigned int); __gmp_expr & operator/=(signed short int); __gmp_expr & operator/=(unsigned short int); __gmp_expr & operator/=(signed long int); __gmp_expr & operator/=(unsigned long int); __gmp_expr & operator/=(float); __gmp_expr & operator/=(double);
-40039:   template <class T, class U> __gmp_expr<value_type, value_type> & operator%=(const __gmp_expr<T, U> &); __gmp_expr & operator%=(signed char); __gmp_expr & operator%=(unsigned char); __gmp_expr & operator%=(signed int); __gmp_expr & operator%=(unsigned int); __gmp_expr & operator%=(signed short int); __gmp_expr & operator%=(unsigned short int); __gmp_expr & operator%=(signed long int); __gmp_expr & operator%=(unsigned long int); __gmp_expr & operator%=(float); __gmp_expr & operator%=(double);
-40039: 
-40039:   template <class T, class U> __gmp_expr<value_type, value_type> & operator&=(const __gmp_expr<T, U> &); __gmp_expr & operator&=(signed char); __gmp_expr & operator&=(unsigned char); __gmp_expr & operator&=(signed int); __gmp_expr & operator&=(unsigned int); __gmp_expr & operator&=(signed short int); __gmp_expr & operator&=(unsigned short int); __gmp_expr & operator&=(signed long int); __gmp_expr & operator&=(unsigned long int); __gmp_expr & operator&=(float); __gmp_expr & operator&=(double);
-40039:   template <class T, class U> __gmp_expr<value_type, value_type> & operator|=(const __gmp_expr<T, U> &); __gmp_expr & operator|=(signed char); __gmp_expr & operator|=(unsigned char); __gmp_expr & operator|=(signed int); __gmp_expr & operator|=(unsigned int); __gmp_expr & operator|=(signed short int); __gmp_expr & operator|=(unsigned short int); __gmp_expr & operator|=(signed long int); __gmp_expr & operator|=(unsigned long int); __gmp_expr & operator|=(float); __gmp_expr & operator|=(double);
-40039:   template <class T, class U> __gmp_expr<value_type, value_type> & operator^=(const __gmp_expr<T, U> &); __gmp_expr & operator^=(signed char); __gmp_expr & operator^=(unsigned char); __gmp_expr & operator^=(signed int); __gmp_expr & operator^=(unsigned int); __gmp_expr & operator^=(signed short int); __gmp_expr & operator^=(unsigned short int); __gmp_expr & operator^=(signed long int); __gmp_expr & operator^=(unsigned long int); __gmp_expr & operator^=(float); __gmp_expr & operator^=(double);
-40039: 
-40039:   __gmp_expr & operator<<=(mp_bitcnt_t);
-40039:   __gmp_expr & operator>>=(mp_bitcnt_t);
-40039: 
-40039:   inline __gmp_expr & operator++(); inline __gmp_expr operator++(int);
-40039:   inline __gmp_expr & operator--(); inline __gmp_expr operator--(int);
-40039: };
-40039: 
-40039: typedef __gmp_expr<mpz_t, mpz_t> mpz_class;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <>
-40039: class __gmp_expr<mpq_t, mpq_t>
-40039: {
-40039: private:
-40039:   typedef mpq_t value_type;
-40039:   value_type mp;
-40039: 
-40039: 
-40039:   void assign_ui(unsigned long l) { __gmpq_set_ui(mp, l, 1); }
-40039:   void assign_si(signed long l)
-40039:   {
-40039:     if ((__builtin_constant_p(l >= 0) && (l >= 0)))
-40039:       assign_ui(l);
-40039:     else
-40039:       __gmpq_set_si(mp, l, 1);
-40039:   }
-40039:   void assign_d (double d) { __gmpq_set_d (mp, d); }
-40039: 
-40039:   void init_ui(unsigned long l) { __gmpq_init(mp); get_num() = l; }
-40039:   void init_si(signed long l) { __gmpq_init(mp); get_num() = l; }
-40039:   void init_d (double d) { __gmpq_init(mp); assign_d (d); }
-40039: 
-40039: public:
-40039:   mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); }
-40039:   void canonicalize() { __gmpq_canonicalize(mp); }
-40039: 
-40039: 
-40039:   __gmp_expr() { __gmpq_init(mp); }
-40039: 
-40039:   __gmp_expr(const __gmp_expr &q)
-40039:   {
-40039:     __gmpz_init_set((&((mp)->_mp_num)), (&((q.mp)->_mp_num)));
-40039:     __gmpz_init_set((&((mp)->_mp_den)), (&((q.mp)->_mp_den)));
-40039:   }
-40039: 
-40039:   __gmp_expr(__gmp_expr &&q)
-40039:   { *mp = *q.mp; __gmpq_init(q.mp); }
-40039: 
-40039:   template <class T>
-40039:   __gmp_expr(const __gmp_expr<mpz_t, T> &expr)
-40039:   { __gmpq_init(mp); __gmp_set_expr(mp, expr); }
-40039:   template <class T>
-40039:   __gmp_expr(const __gmp_expr<mpq_t, T> &expr)
-40039:   { __gmpq_init(mp); __gmp_set_expr(mp, expr); }
-40039:   template <class T, class U>
-40039:   explicit __gmp_expr(const __gmp_expr<T, U> &expr)
-40039:   { __gmpq_init(mp); __gmp_set_expr(mp, expr); }
-40039: 
-40039:   __gmp_expr(signed char c) { init_si(c); } __gmp_expr(unsigned char c) { init_ui(c); } __gmp_expr(signed int i) { init_si(i); } __gmp_expr(unsigned int i) { init_ui(i); } __gmp_expr(signed short int s) { init_si(s); } __gmp_expr(unsigned short int s) { init_ui(s); } __gmp_expr(signed long int l) { init_si(l); } __gmp_expr(unsigned long int l) { init_ui(l); } __gmp_expr(float f) { init_d(f); } __gmp_expr(double d) { init_d(d); }
-40039: 
-40039:   explicit __gmp_expr(const char *s, int base = 0)
-40039:   {
-40039:     __gmpq_init (mp);
-40039: 
-40039: 
-40039:     if (s == 0)
-40039:       {
-40039: 
-40039:  __gmpz_set_si((&((mp)->_mp_den)), base);
-40039:       }
-40039:     else if (__gmpq_set_str(mp, s, base) != 0)
-40039:       {
-40039:         __gmpq_clear (mp);
-40039:         throw std::invalid_argument ("mpq_set_str");
-40039:       }
-40039:   }
-40039:   explicit __gmp_expr(const std::string &s, int base = 0)
-40039:   {
-40039:     __gmpq_init(mp);
-40039:     if (__gmpq_set_str (mp, s.c_str(), base) != 0)
-40039:       {
-40039:         __gmpq_clear (mp);
-40039:         throw std::invalid_argument ("mpq_set_str");
-40039:       }
-40039:   }
-40039:   explicit __gmp_expr(mpq_srcptr q)
-40039:   {
-40039:     __gmpz_init_set((&((mp)->_mp_num)), (&((q)->_mp_num)));
-40039:     __gmpz_init_set((&((mp)->_mp_den)), (&((q)->_mp_den)));
-40039:   }
-40039: 
-40039:   __gmp_expr(const mpz_class &num, const mpz_class &den)
-40039:   {
-40039:     __gmpz_init_set((&((mp)->_mp_num)), num.get_mpz_t());
-40039:     __gmpz_init_set((&((mp)->_mp_den)), den.get_mpz_t());
-40039:   }
-40039: 
-40039:   ~__gmp_expr() { __gmpq_clear(mp); }
-40039: 
-40039:   void swap(__gmp_expr& q) noexcept { std::swap(*mp, *q.mp); }
-40039: 
-40039: 
-40039:   __gmp_expr & operator=(const __gmp_expr &q)
-40039:   { __gmpq_set(mp, q.mp); return *this; }
-40039: 
-40039:   __gmp_expr & operator=(__gmp_expr &&q) noexcept
-40039:   { swap(q); return *this; }
-40039:   __gmp_expr & operator=(mpz_class &&z) noexcept
-40039:   { get_num() = std::move(z); get_den() = 1u; return *this; }
-40039: 
-40039:   template <class T, class U>
-40039:   __gmp_expr<value_type, value_type> & operator=(const __gmp_expr<T, U> &expr)
-40039:   { __gmp_set_expr(mp, expr); return *this; }
-40039: 
-40039:   __gmp_expr & operator=(signed char c) { assign_si(c); return *this; } __gmp_expr & operator=(unsigned char c) { assign_ui(c); return *this; } __gmp_expr & operator=(signed int i) { assign_si(i); return *this; } __gmp_expr & operator=(unsigned int i) { assign_ui(i); return *this; } __gmp_expr & operator=(signed short int s) { assign_si(s); return *this; } __gmp_expr & operator=(unsigned short int s) { assign_ui(s); return *this; } __gmp_expr & operator=(signed long int l) { assign_si(l); return *this; } __gmp_expr & operator=(unsigned long int l) { assign_ui(l); return *this; } __gmp_expr & operator=(float f) { assign_d(f); return *this; } __gmp_expr & operator=(double d) { assign_d(d); return *this; }
-40039: 
-40039:   __gmp_expr & operator=(const char *s)
-40039:   {
-40039:     if (__gmpq_set_str (mp, s, 0) != 0)
-40039:       throw std::invalid_argument ("mpq_set_str");
-40039:     return *this;
-40039:   }
-40039:   __gmp_expr & operator=(const std::string &s)
-40039:   {
-40039:     if (__gmpq_set_str(mp, s.c_str(), 0) != 0)
-40039:       throw std::invalid_argument ("mpq_set_str");
-40039:     return *this;
-40039:   }
-40039: 
-40039: 
-40039:   int set_str(const char *s, int base)
-40039:   { return __gmpq_set_str(mp, s, base); }
-40039:   int set_str(const std::string &s, int base)
-40039:   { return __gmpq_set_str(mp, s.c_str(), base); }
-40039:   std::string get_str(int base = 10) const
-40039:   {
-40039:     __gmp_alloc_cstring temp(__gmpq_get_str(0, base, mp));
-40039:     return std::string(temp.str);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const mpz_class & get_num() const
-40039:   { return reinterpret_cast<const mpz_class &>(*(&((mp)->_mp_num))); }
-40039:   mpz_class & get_num()
-40039:   { return reinterpret_cast<mpz_class &>(*(&((mp)->_mp_num))); }
-40039:   const mpz_class & get_den() const
-40039:   { return reinterpret_cast<const mpz_class &>(*(&((mp)->_mp_den))); }
-40039:   mpz_class & get_den()
-40039:   { return reinterpret_cast<mpz_class &>(*(&((mp)->_mp_den))); }
-40039: 
-40039:   mpq_srcptr __get_mp() const { return mp; }
-40039:   mpq_ptr __get_mp() { return mp; }
-40039:   mpq_srcptr get_mpq_t() const { return mp; }
-40039:   mpq_ptr get_mpq_t() { return mp; }
-40039: 
-40039:   mpz_srcptr get_num_mpz_t() const { return (&((mp)->_mp_num)); }
-40039:   mpz_ptr get_num_mpz_t() { return (&((mp)->_mp_num)); }
-40039:   mpz_srcptr get_den_mpz_t() const { return (&((mp)->_mp_den)); }
-40039:   mpz_ptr get_den_mpz_t() { return (&((mp)->_mp_den)); }
-40039: 
-40039:   double get_d() const { return __gmpq_get_d(mp); }
-40039: 
-40039: 
-40039:   explicit operator bool() const { return (&((mp)->_mp_num))->_mp_size != 0; }
-40039: 
-40039: 
-40039: 
-40039:   template <class T, class U> __gmp_expr<value_type, value_type> & operator+=(const __gmp_expr<T, U> &); __gmp_expr & operator+=(signed char); __gmp_expr & operator+=(unsigned char); __gmp_expr & operator+=(signed int); __gmp_expr & operator+=(unsigned int); __gmp_expr & operator+=(signed short int); __gmp_expr & operator+=(unsigned short int); __gmp_expr & operator+=(signed long int); __gmp_expr & operator+=(unsigned long int); __gmp_expr & operator+=(float); __gmp_expr & operator+=(double);
-40039:   template <class T, class U> __gmp_expr<value_type, value_type> & operator-=(const __gmp_expr<T, U> &); __gmp_expr & operator-=(signed char); __gmp_expr & operator-=(unsigned char); __gmp_expr & operator-=(signed int); __gmp_expr & operator-=(unsigned int); __gmp_expr & operator-=(signed short int); __gmp_expr & operator-=(unsigned short int); __gmp_expr & operator-=(signed long int); __gmp_expr & operator-=(unsigned long int); __gmp_expr & operator-=(float); __gmp_expr & operator-=(double);
-40039:   template <class T, class U> __gmp_expr<value_type, value_type> & operator*=(const __gmp_expr<T, U> &); __gmp_expr & operator*=(signed char); __gmp_expr & operator*=(unsigned char); __gmp_expr & operator*=(signed int); __gmp_expr & operator*=(unsigned int); __gmp_expr & operator*=(signed short int); __gmp_expr & operator*=(unsigned short int); __gmp_expr & operator*=(signed long int); __gmp_expr & operator*=(unsigned long int); __gmp_expr & operator*=(float); __gmp_expr & operator*=(double);
-40039:   template <class T, class U> __gmp_expr<value_type, value_type> & operator/=(const __gmp_expr<T, U> &); __gmp_expr & operator/=(signed char); __gmp_expr & operator/=(unsigned char); __gmp_expr & operator/=(signed int); __gmp_expr & operator/=(unsigned int); __gmp_expr & operator/=(signed short int); __gmp_expr & operator/=(unsigned short int); __gmp_expr & operator/=(signed long int); __gmp_expr & operator/=(unsigned long int); __gmp_expr & operator/=(float); __gmp_expr & operator/=(double);
-40039: 
-40039:   __gmp_expr & operator<<=(mp_bitcnt_t);
-40039:   __gmp_expr & operator>>=(mp_bitcnt_t);
-40039: 
-40039:   inline __gmp_expr & operator++(); inline __gmp_expr operator++(int);
-40039:   inline __gmp_expr & operator--(); inline __gmp_expr operator--(int);
-40039: };
-40039: 
-40039: typedef __gmp_expr<mpq_t, mpq_t> mpq_class;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <>
-40039: class __gmp_expr<mpf_t, mpf_t>
-40039: {
-40039: private:
-40039:   typedef mpf_t value_type;
-40039:   value_type mp;
-40039: 
-40039: 
-40039:   void assign_ui(unsigned long l) { __gmpf_set_ui(mp, l); }
-40039:   void assign_si(signed long l)
-40039:   {
-40039:     if ((__builtin_constant_p(l >= 0) && (l >= 0)))
-40039:       assign_ui(l);
-40039:     else
-40039:       __gmpf_set_si(mp, l);
-40039:   }
-40039:   void assign_d (double d) { __gmpf_set_d (mp, d); }
-40039: 
-40039:   void init_ui(unsigned long l)
-40039:   {
-40039:     if ((__builtin_constant_p(l == 0) && (l == 0)))
-40039:       __gmpf_init(mp);
-40039:     else
-40039:       __gmpf_init_set_ui(mp, l);
-40039:   }
-40039:   void init_si(signed long l)
-40039:   {
-40039:     if ((__builtin_constant_p(l >= 0) && (l >= 0)))
-40039:       init_ui(l);
-40039:     else
-40039:       __gmpf_init_set_si(mp, l);
-40039:   }
-40039:   void init_d (double d) { __gmpf_init_set_d (mp, d); }
-40039: 
-40039: public:
-40039:   mp_bitcnt_t get_prec() const { return __gmpf_get_prec(mp); }
-40039: 
-40039:   void set_prec(mp_bitcnt_t prec) { __gmpf_set_prec(mp, prec); }
-40039:   void set_prec_raw(mp_bitcnt_t prec) { __gmpf_set_prec_raw(mp, prec); }
-40039: 
-40039: 
-40039:   __gmp_expr() { __gmpf_init(mp); }
-40039: 
-40039:   __gmp_expr(const __gmp_expr &f)
-40039:   { __gmpf_init2(mp, f.get_prec()); __gmpf_set(mp, f.mp); }
-40039: 
-40039:   __gmp_expr(__gmp_expr &&f)
-40039:   { *mp = *f.mp; __gmpf_init2(f.mp, get_prec()); }
-40039: 
-40039:   __gmp_expr(const __gmp_expr &f, mp_bitcnt_t prec)
-40039:   { __gmpf_init2(mp, prec); __gmpf_set(mp, f.mp); }
-40039:   template <class T, class U>
-40039:   __gmp_expr(const __gmp_expr<T, U> &expr)
-40039:   { __gmpf_init2(mp, expr.get_prec()); __gmp_set_expr(mp, expr); }
-40039:   template <class T, class U>
-40039:   __gmp_expr(const __gmp_expr<T, U> &expr, mp_bitcnt_t prec)
-40039:   { __gmpf_init2(mp, prec); __gmp_set_expr(mp, expr); }
-40039: 
-40039:   __gmp_expr(signed char c) { init_si(c); } __gmp_expr(unsigned char c) { init_ui(c); } __gmp_expr(signed int i) { init_si(i); } __gmp_expr(unsigned int i) { init_ui(i); } __gmp_expr(signed short int s) { init_si(s); } __gmp_expr(unsigned short int s) { init_ui(s); } __gmp_expr(signed long int l) { init_si(l); } __gmp_expr(unsigned long int l) { init_ui(l); } __gmp_expr(float f) { init_d(f); } __gmp_expr(double d) { init_d(d); }
-40039: 
-40039:   __gmp_expr(signed char c, mp_bitcnt_t prec)
-40039:   { __gmpf_init2(mp, prec); __gmpf_set_si(mp, c); }
-40039:   __gmp_expr(unsigned char c, mp_bitcnt_t prec)
-40039:   { __gmpf_init2(mp, prec); __gmpf_set_ui(mp, c); }
-40039: 
-40039:   __gmp_expr(signed int i, mp_bitcnt_t prec)
-40039:   { __gmpf_init2(mp, prec); __gmpf_set_si(mp, i); }
-40039:   __gmp_expr(unsigned int i, mp_bitcnt_t prec)
-40039:   { __gmpf_init2(mp, prec); __gmpf_set_ui(mp, i); }
-40039: 
-40039:   __gmp_expr(signed short int s, mp_bitcnt_t prec)
-40039:   { __gmpf_init2(mp, prec); __gmpf_set_si(mp, s); }
-40039:   __gmp_expr(unsigned short int s, mp_bitcnt_t prec)
-40039:   { __gmpf_init2(mp, prec); __gmpf_set_ui(mp, s); }
-40039: 
-40039:   __gmp_expr(signed long int l, mp_bitcnt_t prec)
-40039:   { __gmpf_init2(mp, prec); __gmpf_set_si(mp, l); }
-40039:   __gmp_expr(unsigned long int l, mp_bitcnt_t prec)
-40039:   { __gmpf_init2(mp, prec); __gmpf_set_ui(mp, l); }
-40039: 
-40039:   __gmp_expr(float f, mp_bitcnt_t prec)
-40039:   { __gmpf_init2(mp, prec); __gmpf_set_d(mp, f); }
-40039:   __gmp_expr(double d, mp_bitcnt_t prec)
-40039:   { __gmpf_init2(mp, prec); __gmpf_set_d(mp, d); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   explicit __gmp_expr(const char *s)
-40039:   {
-40039:     if (__gmpf_init_set_str (mp, s, 0) != 0)
-40039:       {
-40039:         __gmpf_clear (mp);
-40039:         throw std::invalid_argument ("mpf_set_str");
-40039:       }
-40039:   }
-40039:   __gmp_expr(const char *s, mp_bitcnt_t prec, int base = 0)
-40039:   {
-40039:     __gmpf_init2(mp, prec);
-40039:     if (__gmpf_set_str(mp, s, base) != 0)
-40039:       {
-40039:         __gmpf_clear (mp);
-40039:         throw std::invalid_argument ("mpf_set_str");
-40039:       }
-40039:   }
-40039:   explicit __gmp_expr(const std::string &s)
-40039:   {
-40039:     if (__gmpf_init_set_str(mp, s.c_str(), 0) != 0)
-40039:       {
-40039:         __gmpf_clear (mp);
-40039:         throw std::invalid_argument ("mpf_set_str");
-40039:       }
-40039:   }
-40039:   __gmp_expr(const std::string &s, mp_bitcnt_t prec, int base = 0)
-40039:   {
-40039:     __gmpf_init2(mp, prec);
-40039:     if (__gmpf_set_str(mp, s.c_str(), base) != 0)
-40039:       {
-40039:         __gmpf_clear (mp);
-40039:         throw std::invalid_argument ("mpf_set_str");
-40039:       }
-40039:   }
-40039: 
-40039:   explicit __gmp_expr(mpf_srcptr f)
-40039:   { __gmpf_init2(mp, __gmpf_get_prec(f)); __gmpf_set(mp, f); }
-40039:   __gmp_expr(mpf_srcptr f, mp_bitcnt_t prec)
-40039:   { __gmpf_init2(mp, prec); __gmpf_set(mp, f); }
-40039: 
-40039:   ~__gmp_expr() { __gmpf_clear(mp); }
-40039: 
-40039:   void swap(__gmp_expr& f) noexcept { std::swap(*mp, *f.mp); }
-40039: 
-40039: 
-40039:   __gmp_expr & operator=(const __gmp_expr &f)
-40039:   { __gmpf_set(mp, f.mp); return *this; }
-40039: 
-40039:   __gmp_expr & operator=(__gmp_expr &&f) noexcept
-40039:   { swap(f); return *this; }
-40039: 
-40039:   template <class T, class U>
-40039:   __gmp_expr<value_type, value_type> & operator=(const __gmp_expr<T, U> &expr)
-40039:   { __gmp_set_expr(mp, expr); return *this; }
-40039: 
-40039:   __gmp_expr & operator=(signed char c) { assign_si(c); return *this; } __gmp_expr & operator=(unsigned char c) { assign_ui(c); return *this; } __gmp_expr & operator=(signed int i) { assign_si(i); return *this; } __gmp_expr & operator=(unsigned int i) { assign_ui(i); return *this; } __gmp_expr & operator=(signed short int s) { assign_si(s); return *this; } __gmp_expr & operator=(unsigned short int s) { assign_ui(s); return *this; } __gmp_expr & operator=(signed long int l) { assign_si(l); return *this; } __gmp_expr & operator=(unsigned long int l) { assign_ui(l); return *this; } __gmp_expr & operator=(float f) { assign_d(f); return *this; } __gmp_expr & operator=(double d) { assign_d(d); return *this; }
-40039: 
-40039:   __gmp_expr & operator=(const char *s)
-40039:   {
-40039:     if (__gmpf_set_str (mp, s, 0) != 0)
-40039:       throw std::invalid_argument ("mpf_set_str");
-40039:     return *this;
-40039:   }
-40039:   __gmp_expr & operator=(const std::string &s)
-40039:   {
-40039:     if (__gmpf_set_str(mp, s.c_str(), 0) != 0)
-40039:       throw std::invalid_argument ("mpf_set_str");
-40039:     return *this;
-40039:   }
-40039: 
-40039: 
-40039:   int set_str(const char *s, int base)
-40039:   { return __gmpf_set_str(mp, s, base); }
-40039:   int set_str(const std::string &s, int base)
-40039:   { return __gmpf_set_str(mp, s.c_str(), base); }
-40039:   std::string get_str(mp_exp_t &expo, int base = 10, size_t size = 0) const
-40039:   {
-40039:     __gmp_alloc_cstring temp(__gmpf_get_str(0, &expo, base, size, mp));
-40039:     return std::string(temp.str);
-40039:   }
-40039: 
-40039: 
-40039:   mpf_srcptr __get_mp() const { return mp; }
-40039:   mpf_ptr __get_mp() { return mp; }
-40039:   mpf_srcptr get_mpf_t() const { return mp; }
-40039:   mpf_ptr get_mpf_t() { return mp; }
-40039: 
-40039:   signed long int get_si() const { return __gmpf_get_si(mp); }
-40039:   unsigned long int get_ui() const { return __gmpf_get_ui(mp); }
-40039:   double get_d() const { return __gmpf_get_d(mp); }
-40039: 
-40039: 
-40039: 
-40039:   bool fits_sint_p() const { return __gmpf_fits_sint_p(mp); }
-40039:   bool fits_uint_p() const { return __gmpf_fits_uint_p(mp); }
-40039:   bool fits_sshort_p() const { return __gmpf_fits_sshort_p(mp); }
-40039:   bool fits_ushort_p() const { return __gmpf_fits_ushort_p(mp); }
-40039:   bool fits_slong_p() const { return __gmpf_fits_slong_p(mp); }
-40039:   bool fits_ulong_p() const { return __gmpf_fits_ulong_p(mp); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   explicit operator bool() const { return mp->_mp_size != 0; }
-40039: 
-40039: 
-40039: 
-40039:   template <class T, class U> __gmp_expr<value_type, value_type> & operator+=(const __gmp_expr<T, U> &); __gmp_expr & operator+=(signed char); __gmp_expr & operator+=(unsigned char); __gmp_expr & operator+=(signed int); __gmp_expr & operator+=(unsigned int); __gmp_expr & operator+=(signed short int); __gmp_expr & operator+=(unsigned short int); __gmp_expr & operator+=(signed long int); __gmp_expr & operator+=(unsigned long int); __gmp_expr & operator+=(float); __gmp_expr & operator+=(double);
-40039:   template <class T, class U> __gmp_expr<value_type, value_type> & operator-=(const __gmp_expr<T, U> &); __gmp_expr & operator-=(signed char); __gmp_expr & operator-=(unsigned char); __gmp_expr & operator-=(signed int); __gmp_expr & operator-=(unsigned int); __gmp_expr & operator-=(signed short int); __gmp_expr & operator-=(unsigned short int); __gmp_expr & operator-=(signed long int); __gmp_expr & operator-=(unsigned long int); __gmp_expr & operator-=(float); __gmp_expr & operator-=(double);
-40039:   template <class T, class U> __gmp_expr<value_type, value_type> & operator*=(const __gmp_expr<T, U> &); __gmp_expr & operator*=(signed char); __gmp_expr & operator*=(unsigned char); __gmp_expr & operator*=(signed int); __gmp_expr & operator*=(unsigned int); __gmp_expr & operator*=(signed short int); __gmp_expr & operator*=(unsigned short int); __gmp_expr & operator*=(signed long int); __gmp_expr & operator*=(unsigned long int); __gmp_expr & operator*=(float); __gmp_expr & operator*=(double);
-40039:   template <class T, class U> __gmp_expr<value_type, value_type> & operator/=(const __gmp_expr<T, U> &); __gmp_expr & operator/=(signed char); __gmp_expr & operator/=(unsigned char); __gmp_expr & operator/=(signed int); __gmp_expr & operator/=(unsigned int); __gmp_expr & operator/=(signed short int); __gmp_expr & operator/=(unsigned short int); __gmp_expr & operator/=(signed long int); __gmp_expr & operator/=(unsigned long int); __gmp_expr & operator/=(float); __gmp_expr & operator/=(double);
-40039: 
-40039:   __gmp_expr & operator<<=(mp_bitcnt_t);
-40039:   __gmp_expr & operator>>=(mp_bitcnt_t);
-40039: 
-40039:   inline __gmp_expr & operator++(); inline __gmp_expr operator++(int);
-40039:   inline __gmp_expr & operator--(); inline __gmp_expr operator--(int);
-40039: };
-40039: 
-40039: typedef __gmp_expr<mpf_t, mpf_t> mpf_class;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: inline mpz_class operator"" _mpz(const char* s)
-40039: {
-40039:   return mpz_class(s);
-40039: }
-40039: 
-40039: inline mpq_class operator"" _mpq(const char* s)
-40039: {
-40039:   mpq_class q;
-40039:   q.get_num() = s;
-40039:   return q;
-40039: }
-40039: 
-40039: inline mpf_class operator"" _mpf(const char* s)
-40039: {
-40039:   return mpf_class(s);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <class T, class U>
-40039: inline std::ostream & operator<<
-40039: (std::ostream &o, const __gmp_expr<T, U> &expr)
-40039: {
-40039:   __gmp_expr<T, T> const& temp(expr);
-40039:   return o << temp.__get_mp();
-40039: }
-40039: 
-40039: template <class T>
-40039: inline std::istream & operator>>(std::istream &i, __gmp_expr<T, T> &expr)
-40039: {
-40039:   return i >> expr.__get_mp();
-40039: }
-40039: # 2055 "/usr/include/gmpxx.h" 3 4
-40039: inline void __gmp_set_expr(mpz_ptr z, const mpz_class &w)
-40039: {
-40039:   __gmpz_set(z, w.get_mpz_t());
-40039: }
-40039: 
-40039: template <class T>
-40039: inline void __gmp_set_expr(mpz_ptr z, const __gmp_expr<mpz_t, T> &expr)
-40039: {
-40039:   expr.eval(z);
-40039: }
-40039: 
-40039: template <class T>
-40039: inline void __gmp_set_expr(mpz_ptr z, const __gmp_expr<mpq_t, T> &expr)
-40039: {
-40039:   mpq_class const& temp(expr);
-40039:   __gmpz_set_q(z, temp.get_mpq_t());
-40039: }
-40039: 
-40039: template <class T>
-40039: inline void __gmp_set_expr(mpz_ptr z, const __gmp_expr<mpf_t, T> &expr)
-40039: {
-40039:   mpf_class const& temp(expr);
-40039:   __gmpz_set_f(z, temp.get_mpf_t());
-40039: }
-40039: 
-40039: inline void __gmp_set_expr(mpq_ptr q, const mpz_class &z)
-40039: {
-40039:   __gmpq_set_z(q, z.get_mpz_t());
-40039: }
-40039: 
-40039: template <class T>
-40039: inline void __gmp_set_expr(mpq_ptr q, const __gmp_expr<mpz_t, T> &expr)
-40039: {
-40039:   __gmp_set_expr((&((q)->_mp_num)), expr);
-40039:   __gmpz_set_ui((&((q)->_mp_den)), 1);
-40039: }
-40039: 
-40039: inline void __gmp_set_expr(mpq_ptr q, const mpq_class &r)
-40039: {
-40039:   __gmpq_set(q, r.get_mpq_t());
-40039: }
-40039: 
-40039: template <class T>
-40039: inline void __gmp_set_expr(mpq_ptr q, const __gmp_expr<mpq_t, T> &expr)
-40039: {
-40039:   expr.eval(q);
-40039: }
-40039: 
-40039: template <class T>
-40039: inline void __gmp_set_expr(mpq_ptr q, const __gmp_expr<mpf_t, T> &expr)
-40039: {
-40039:   mpf_class const& temp(expr);
-40039:   __gmpq_set_f(q, temp.get_mpf_t());
-40039: }
-40039: 
-40039: template <class T>
-40039: inline void __gmp_set_expr(mpf_ptr f, const __gmp_expr<mpz_t, T> &expr)
-40039: {
-40039:   mpz_class const& temp(expr);
-40039:   __gmpf_set_z(f, temp.get_mpz_t());
-40039: }
-40039: 
-40039: template <class T>
-40039: inline void __gmp_set_expr(mpf_ptr f, const __gmp_expr<mpq_t, T> &expr)
-40039: {
-40039:   mpq_class const& temp(expr);
-40039:   __gmpf_set_q(f, temp.get_mpq_t());
-40039: }
-40039: 
-40039: inline void __gmp_set_expr(mpf_ptr f, const mpf_class &g)
-40039: {
-40039:   __gmpf_set(f, g.get_mpf_t());
-40039: }
-40039: 
-40039: template <class T>
-40039: inline void __gmp_set_expr(mpf_ptr f, const __gmp_expr<mpf_t, T> &expr)
-40039: {
-40039:   expr.eval(f);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <class T>
-40039: class __gmp_temp
-40039: {
-40039:   __gmp_expr<T, T> val;
-40039:   public:
-40039:   template<class U, class V>
-40039:   __gmp_temp(U const& u, V) : val (u) {}
-40039:   typename __gmp_resolve_expr<T>::srcptr_type
-40039:   __get_mp() const { return val.__get_mp(); }
-40039: };
-40039: 
-40039: template <>
-40039: class __gmp_temp <mpf_t>
-40039: {
-40039:   mpf_class val;
-40039:   public:
-40039:   template<class U>
-40039:   __gmp_temp(U const& u, mpf_ptr res) : val (u, __gmpf_get_prec(res)) {}
-40039:   mpf_srcptr __get_mp() const { return val.__get_mp(); }
-40039: };
-40039: # 2178 "/usr/include/gmpxx.h" 3 4
-40039: template <class T, class Op>
-40039: class __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, T>, Op> >
-40039: {
-40039: private:
-40039:   typedef __gmp_expr<T, T> val_type;
-40039: 
-40039:   __gmp_unary_expr<val_type, Op> expr;
-40039: public:
-40039:   explicit __gmp_expr(const val_type &val) : expr(val) { }
-40039:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
-40039:   { Op::eval(p, expr.val.__get_mp()); }
-40039:   const val_type & get_val() const { return expr.val; }
-40039:   mp_bitcnt_t get_prec() const { return expr.val.get_prec(); }
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <class T, class U, class Op>
-40039: class __gmp_expr<T, __gmp_unary_expr<U, Op> >
-40039: {
-40039: private:
-40039:   typedef U val_type;
-40039: 
-40039:   __gmp_unary_expr<val_type, Op> expr;
-40039: public:
-40039:   explicit __gmp_expr(const val_type &val) : expr(val) { }
-40039:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
-40039:   { Op::eval(p, expr.val); }
-40039:   const val_type & get_val() const { return expr.val; }
-40039:   mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); }
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <class T, class U, class Op>
-40039: class __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, Op> >
-40039: {
-40039: private:
-40039:   typedef __gmp_expr<T, U> val_type;
-40039: 
-40039:   __gmp_unary_expr<val_type, Op> expr;
-40039: public:
-40039:   explicit __gmp_expr(const val_type &val) : expr(val) { }
-40039:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
-40039:   { expr.val.eval(p); Op::eval(p, p); }
-40039:   const val_type & get_val() const { return expr.val; }
-40039:   mp_bitcnt_t get_prec() const { return expr.val.get_prec(); }
-40039: };
-40039: # 2242 "/usr/include/gmpxx.h" 3 4
-40039: template <class T, class Op>
-40039: class __gmp_expr
-40039: <T, __gmp_binary_expr<__gmp_expr<T, T>, __gmp_expr<T, T>, Op> >
-40039: {
-40039: private:
-40039:   typedef __gmp_expr<T, T> val1_type;
-40039:   typedef __gmp_expr<T, T> val2_type;
-40039: 
-40039:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
-40039: public:
-40039:   __gmp_expr(const val1_type &val1, const val2_type &val2)
-40039:     : expr(val1, val2) { }
-40039:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
-40039:   { Op::eval(p, expr.val1.__get_mp(), expr.val2.__get_mp()); }
-40039:   const val1_type & get_val1() const { return expr.val1; }
-40039:   const val2_type & get_val2() const { return expr.val2; }
-40039:   mp_bitcnt_t get_prec() const
-40039:   {
-40039:     mp_bitcnt_t prec1 = expr.val1.get_prec(),
-40039:       prec2 = expr.val2.get_prec();
-40039:     return (prec1 > prec2) ? prec1 : prec2;
-40039:   }
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <class T, class U, class Op>
-40039: class __gmp_expr<T, __gmp_binary_expr<__gmp_expr<T, T>, U, Op> >
-40039: {
-40039: private:
-40039:   typedef __gmp_expr<T, T> val1_type;
-40039:   typedef U val2_type;
-40039: 
-40039:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
-40039: public:
-40039:   __gmp_expr(const val1_type &val1, const val2_type &val2)
-40039:     : expr(val1, val2) { }
-40039:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
-40039:   { Op::eval(p, expr.val1.__get_mp(), expr.val2); }
-40039:   const val1_type & get_val1() const { return expr.val1; }
-40039:   const val2_type & get_val2() const { return expr.val2; }
-40039:   mp_bitcnt_t get_prec() const { return expr.val1.get_prec(); }
-40039: };
-40039: 
-40039: template <class T, class U, class Op>
-40039: class __gmp_expr<T, __gmp_binary_expr<U, __gmp_expr<T, T>, Op> >
-40039: {
-40039: private:
-40039:   typedef U val1_type;
-40039:   typedef __gmp_expr<T, T> val2_type;
-40039: 
-40039:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
-40039: public:
-40039:   __gmp_expr(const val1_type &val1, const val2_type &val2)
-40039:     : expr(val1, val2) { }
-40039:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
-40039:   { Op::eval(p, expr.val1, expr.val2.__get_mp()); }
-40039:   const val1_type & get_val1() const { return expr.val1; }
-40039:   const val2_type & get_val2() const { return expr.val2; }
-40039:   mp_bitcnt_t get_prec() const { return expr.val2.get_prec(); }
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <class T, class U, class V, class Op>
-40039: class __gmp_expr
-40039: <T, __gmp_binary_expr<__gmp_expr<T, T>, __gmp_expr<U, V>, Op> >
-40039: {
-40039: private:
-40039:   typedef __gmp_expr<T, T> val1_type;
-40039:   typedef __gmp_expr<U, V> val2_type;
-40039: 
-40039:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
-40039: public:
-40039:   __gmp_expr(const val1_type &val1, const val2_type &val2)
-40039:     : expr(val1, val2) { }
-40039:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
-40039:   {
-40039:     if(p != expr.val1.__get_mp())
-40039:     {
-40039:       __gmp_set_expr(p, expr.val2);
-40039:       Op::eval(p, expr.val1.__get_mp(), p);
-40039:     }
-40039:     else
-40039:     {
-40039:       __gmp_temp<T> temp(expr.val2, p);
-40039:       Op::eval(p, expr.val1.__get_mp(), temp.__get_mp());
-40039:     }
-40039:   }
-40039:   const val1_type & get_val1() const { return expr.val1; }
-40039:   const val2_type & get_val2() const { return expr.val2; }
-40039:   mp_bitcnt_t get_prec() const
-40039:   {
-40039:     mp_bitcnt_t prec1 = expr.val1.get_prec(),
-40039:       prec2 = expr.val2.get_prec();
-40039:     return (prec1 > prec2) ? prec1 : prec2;
-40039:   }
-40039: };
-40039: 
-40039: template <class T, class U, class V, class Op>
-40039: class __gmp_expr
-40039: <T, __gmp_binary_expr<__gmp_expr<U, V>, __gmp_expr<T, T>, Op> >
-40039: {
-40039: private:
-40039:   typedef __gmp_expr<U, V> val1_type;
-40039:   typedef __gmp_expr<T, T> val2_type;
-40039: 
-40039:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
-40039: public:
-40039:   __gmp_expr(const val1_type &val1, const val2_type &val2)
-40039:     : expr(val1, val2) { }
-40039:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
-40039:   {
-40039:     if(p != expr.val2.__get_mp())
-40039:     {
-40039:       __gmp_set_expr(p, expr.val1);
-40039:       Op::eval(p, p, expr.val2.__get_mp());
-40039:     }
-40039:     else
-40039:     {
-40039:       __gmp_temp<T> temp(expr.val1, p);
-40039:       Op::eval(p, temp.__get_mp(), expr.val2.__get_mp());
-40039:     }
-40039:   }
-40039:   const val1_type & get_val1() const { return expr.val1; }
-40039:   const val2_type & get_val2() const { return expr.val2; }
-40039:   mp_bitcnt_t get_prec() const
-40039:   {
-40039:     mp_bitcnt_t prec1 = expr.val1.get_prec(),
-40039:       prec2 = expr.val2.get_prec();
-40039:     return (prec1 > prec2) ? prec1 : prec2;
-40039:   }
-40039: };
-40039: 
-40039: template <class T, class U, class Op>
-40039: class __gmp_expr
-40039: <T, __gmp_binary_expr<__gmp_expr<T, T>, __gmp_expr<T, U>, Op> >
-40039: {
-40039: private:
-40039:   typedef __gmp_expr<T, T> val1_type;
-40039:   typedef __gmp_expr<T, U> val2_type;
-40039: 
-40039:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
-40039: public:
-40039:   __gmp_expr(const val1_type &val1, const val2_type &val2)
-40039:     : expr(val1, val2) { }
-40039:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
-40039:   {
-40039:     if(p != expr.val1.__get_mp())
-40039:     {
-40039:       __gmp_set_expr(p, expr.val2);
-40039:       Op::eval(p, expr.val1.__get_mp(), p);
-40039:     }
-40039:     else
-40039:     {
-40039:       __gmp_temp<T> temp(expr.val2, p);
-40039:       Op::eval(p, expr.val1.__get_mp(), temp.__get_mp());
-40039:     }
-40039:   }
-40039:   const val1_type & get_val1() const { return expr.val1; }
-40039:   const val2_type & get_val2() const { return expr.val2; }
-40039:   mp_bitcnt_t get_prec() const
-40039:   {
-40039:     mp_bitcnt_t prec1 = expr.val1.get_prec(),
-40039:       prec2 = expr.val2.get_prec();
-40039:     return (prec1 > prec2) ? prec1 : prec2;
-40039:   }
-40039: };
-40039: 
-40039: template <class T, class U, class Op>
-40039: class __gmp_expr
-40039: <T, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<T, T>, Op> >
-40039: {
-40039: private:
-40039:   typedef __gmp_expr<T, U> val1_type;
-40039:   typedef __gmp_expr<T, T> val2_type;
-40039: 
-40039:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
-40039: public:
-40039:   __gmp_expr(const val1_type &val1, const val2_type &val2)
-40039:     : expr(val1, val2) { }
-40039:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
-40039:   {
-40039:     if(p != expr.val2.__get_mp())
-40039:     {
-40039:       __gmp_set_expr(p, expr.val1);
-40039:       Op::eval(p, p, expr.val2.__get_mp());
-40039:     }
-40039:     else
-40039:     {
-40039:       __gmp_temp<T> temp(expr.val1, p);
-40039:       Op::eval(p, temp.__get_mp(), expr.val2.__get_mp());
-40039:     }
-40039:   }
-40039:   const val1_type & get_val1() const { return expr.val1; }
-40039:   const val2_type & get_val2() const { return expr.val2; }
-40039:   mp_bitcnt_t get_prec() const
-40039:   {
-40039:     mp_bitcnt_t prec1 = expr.val1.get_prec(),
-40039:       prec2 = expr.val2.get_prec();
-40039:     return (prec1 > prec2) ? prec1 : prec2;
-40039:   }
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <class T, class U, class V, class Op>
-40039: class __gmp_expr<T, __gmp_binary_expr<__gmp_expr<T, U>, V, Op> >
-40039: {
-40039: private:
-40039:   typedef __gmp_expr<T, U> val1_type;
-40039:   typedef V val2_type;
-40039: 
-40039:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
-40039: public:
-40039:   __gmp_expr(const val1_type &val1, const val2_type &val2)
-40039:     : expr(val1, val2) { }
-40039:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
-40039:   {
-40039:     expr.val1.eval(p);
-40039:     Op::eval(p, p, expr.val2);
-40039:   }
-40039:   const val1_type & get_val1() const { return expr.val1; }
-40039:   const val2_type & get_val2() const { return expr.val2; }
-40039:   mp_bitcnt_t get_prec() const { return expr.val1.get_prec(); }
-40039: };
-40039: 
-40039: template <class T, class U, class V, class Op>
-40039: class __gmp_expr<T, __gmp_binary_expr<U, __gmp_expr<T, V>, Op> >
-40039: {
-40039: private:
-40039:   typedef U val1_type;
-40039:   typedef __gmp_expr<T, V> val2_type;
-40039: 
-40039:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
-40039: public:
-40039:   __gmp_expr(const val1_type &val1, const val2_type &val2)
-40039:     : expr(val1, val2) { }
-40039:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
-40039:   {
-40039:     expr.val2.eval(p);
-40039:     Op::eval(p, expr.val1, p);
-40039:   }
-40039:   const val1_type & get_val1() const { return expr.val1; }
-40039:   const val2_type & get_val2() const { return expr.val2; }
-40039:   mp_bitcnt_t get_prec() const { return expr.val2.get_prec(); }
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <class T, class U, class V, class W, class Op>
-40039: class __gmp_expr
-40039: <T, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, Op> >
-40039: {
-40039: private:
-40039:   typedef __gmp_expr<T, U> val1_type;
-40039:   typedef __gmp_expr<V, W> val2_type;
-40039: 
-40039:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
-40039: public:
-40039:   __gmp_expr(const val1_type &val1, const val2_type &val2)
-40039:     : expr(val1, val2) { }
-40039:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
-40039:   {
-40039:     __gmp_temp<T> temp2(expr.val2, p);
-40039:     expr.val1.eval(p);
-40039:     Op::eval(p, p, temp2.__get_mp());
-40039:   }
-40039:   const val1_type & get_val1() const { return expr.val1; }
-40039:   const val2_type & get_val2() const { return expr.val2; }
-40039:   mp_bitcnt_t get_prec() const
-40039:   {
-40039:     mp_bitcnt_t prec1 = expr.val1.get_prec(),
-40039:       prec2 = expr.val2.get_prec();
-40039:     return (prec1 > prec2) ? prec1 : prec2;
-40039:   }
-40039: };
-40039: 
-40039: template <class T, class U, class V, class W, class Op>
-40039: class __gmp_expr
-40039: <T, __gmp_binary_expr<__gmp_expr<U, V>, __gmp_expr<T, W>, Op> >
-40039: {
-40039: private:
-40039:   typedef __gmp_expr<U, V> val1_type;
-40039:   typedef __gmp_expr<T, W> val2_type;
-40039: 
-40039:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
-40039: public:
-40039:   __gmp_expr(const val1_type &val1, const val2_type &val2)
-40039:     : expr(val1, val2) { }
-40039:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
-40039:   {
-40039:     __gmp_temp<T> temp1(expr.val1, p);
-40039:     expr.val2.eval(p);
-40039:     Op::eval(p, temp1.__get_mp(), p);
-40039:   }
-40039:   const val1_type & get_val1() const { return expr.val1; }
-40039:   const val2_type & get_val2() const { return expr.val2; }
-40039:   mp_bitcnt_t get_prec() const
-40039:   {
-40039:     mp_bitcnt_t prec1 = expr.val1.get_prec(),
-40039:       prec2 = expr.val2.get_prec();
-40039:     return (prec1 > prec2) ? prec1 : prec2;
-40039:   }
-40039: };
-40039: 
-40039: template <class T, class U, class V, class Op>
-40039: class __gmp_expr
-40039: <T, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<T, V>, Op> >
-40039: {
-40039: private:
-40039:   typedef __gmp_expr<T, U> val1_type;
-40039:   typedef __gmp_expr<T, V> val2_type;
-40039: 
-40039:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
-40039: public:
-40039:   __gmp_expr(const val1_type &val1, const val2_type &val2)
-40039:     : expr(val1, val2) { }
-40039:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
-40039:   {
-40039:     __gmp_temp<T> temp2(expr.val2, p);
-40039:     expr.val1.eval(p);
-40039:     Op::eval(p, p, temp2.__get_mp());
-40039:   }
-40039:   const val1_type & get_val1() const { return expr.val1; }
-40039:   const val2_type & get_val2() const { return expr.val2; }
-40039:   mp_bitcnt_t get_prec() const
-40039:   {
-40039:     mp_bitcnt_t prec1 = expr.val1.get_prec(),
-40039:       prec2 = expr.val2.get_prec();
-40039:     return (prec1 > prec2) ? prec1 : prec2;
-40039:   }
-40039: };
-40039: # 2761 "/usr/include/gmpxx.h" 3 4
-40039: template <> class __gmp_expr<mpq_t, __gmp_binary_expr<mpz_class, mpq_class, __gmp_binary_plus> > { private: typedef mpz_class val1_type; typedef mpq_class val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_plus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { __gmp_binary_plus::eval(q, expr.val1.get_mpz_t(), expr.val2.get_mpq_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <> class __gmp_expr<mpq_t, __gmp_binary_expr<mpq_class, mpz_class, __gmp_binary_plus> > { private: typedef mpq_class val1_type; typedef mpz_class val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_plus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { __gmp_binary_plus::eval(q, expr.val1.get_mpq_t(), expr.val2.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T> class __gmp_expr <mpq_t, __gmp_binary_expr<mpz_class, __gmp_expr<mpq_t, T>, __gmp_binary_plus> > { private: typedef mpz_class val1_type; typedef __gmp_expr<mpq_t, T> val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_plus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpq_class temp(expr.val2); __gmp_binary_plus::eval(q, expr.val1.get_mpz_t(), temp.get_mpq_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T> class __gmp_expr <mpq_t, __gmp_binary_expr<mpq_class, __gmp_expr<mpz_t, T>, __gmp_binary_plus> > { private: typedef mpq_class val1_type; typedef __gmp_expr<mpz_t, T> val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_plus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp(expr.val2); __gmp_binary_plus::eval(q, expr.val1.get_mpq_t(), temp.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T> class __gmp_expr <mpq_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, mpq_class, __gmp_binary_plus> > { private: typedef __gmp_expr<mpz_t, T> val1_type; typedef mpq_class val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_plus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp(expr.val1); __gmp_binary_plus::eval(q, temp.get_mpz_t(), expr.val2.get_mpq_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T> class __gmp_expr <mpq_t, __gmp_binary_expr<__gmp_expr<mpq_t, T>, mpz_class, __gmp_binary_plus> > { private: typedef __gmp_expr<mpq_t, T> val1_type; typedef mpz_class val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_plus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpq_class temp(expr.val1); __gmp_binary_plus::eval(q, temp.get_mpq_t(), expr.val2.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T, class U> class __gmp_expr<mpq_t, __gmp_binary_expr <__gmp_expr<mpz_t, T>, __gmp_expr<mpq_t, U>, __gmp_binary_plus> > { private: typedef __gmp_expr<mpz_t, T> val1_type; typedef __gmp_expr<mpq_t, U> val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_plus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp1(expr.val1); expr.val2.eval(q); __gmp_binary_plus::eval(q, temp1.get_mpz_t(), q); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T, class U> class __gmp_expr<mpq_t, __gmp_binary_expr <__gmp_expr<mpq_t, T>, __gmp_expr<mpz_t, U>, __gmp_binary_plus> > { private: typedef __gmp_expr<mpq_t, T> val1_type; typedef __gmp_expr<mpz_t, U> val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_plus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp2(expr.val2); expr.val1.eval(q); __gmp_binary_plus::eval(q, q, temp2.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } };
-40039: template <> class __gmp_expr<mpq_t, __gmp_binary_expr<mpz_class, mpq_class, __gmp_binary_minus> > { private: typedef mpz_class val1_type; typedef mpq_class val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_minus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { __gmp_binary_minus::eval(q, expr.val1.get_mpz_t(), expr.val2.get_mpq_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <> class __gmp_expr<mpq_t, __gmp_binary_expr<mpq_class, mpz_class, __gmp_binary_minus> > { private: typedef mpq_class val1_type; typedef mpz_class val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_minus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { __gmp_binary_minus::eval(q, expr.val1.get_mpq_t(), expr.val2.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T> class __gmp_expr <mpq_t, __gmp_binary_expr<mpz_class, __gmp_expr<mpq_t, T>, __gmp_binary_minus> > { private: typedef mpz_class val1_type; typedef __gmp_expr<mpq_t, T> val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_minus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpq_class temp(expr.val2); __gmp_binary_minus::eval(q, expr.val1.get_mpz_t(), temp.get_mpq_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T> class __gmp_expr <mpq_t, __gmp_binary_expr<mpq_class, __gmp_expr<mpz_t, T>, __gmp_binary_minus> > { private: typedef mpq_class val1_type; typedef __gmp_expr<mpz_t, T> val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_minus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp(expr.val2); __gmp_binary_minus::eval(q, expr.val1.get_mpq_t(), temp.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T> class __gmp_expr <mpq_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, mpq_class, __gmp_binary_minus> > { private: typedef __gmp_expr<mpz_t, T> val1_type; typedef mpq_class val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_minus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp(expr.val1); __gmp_binary_minus::eval(q, temp.get_mpz_t(), expr.val2.get_mpq_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T> class __gmp_expr <mpq_t, __gmp_binary_expr<__gmp_expr<mpq_t, T>, mpz_class, __gmp_binary_minus> > { private: typedef __gmp_expr<mpq_t, T> val1_type; typedef mpz_class val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_minus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpq_class temp(expr.val1); __gmp_binary_minus::eval(q, temp.get_mpq_t(), expr.val2.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T, class U> class __gmp_expr<mpq_t, __gmp_binary_expr <__gmp_expr<mpz_t, T>, __gmp_expr<mpq_t, U>, __gmp_binary_minus> > { private: typedef __gmp_expr<mpz_t, T> val1_type; typedef __gmp_expr<mpq_t, U> val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_minus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp1(expr.val1); expr.val2.eval(q); __gmp_binary_minus::eval(q, temp1.get_mpz_t(), q); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T, class U> class __gmp_expr<mpq_t, __gmp_binary_expr <__gmp_expr<mpq_t, T>, __gmp_expr<mpz_t, U>, __gmp_binary_minus> > { private: typedef __gmp_expr<mpq_t, T> val1_type; typedef __gmp_expr<mpz_t, U> val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_minus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp2(expr.val2); expr.val1.eval(q); __gmp_binary_minus::eval(q, q, temp2.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } };
-40039: # 3054 "/usr/include/gmpxx.h" 3 4
-40039: template <class T, class U> inline __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_unary_plus> > operator+(const __gmp_expr<T, U> &expr) { return __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_unary_plus> >(expr); }
-40039: template <class T, class U> inline __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_unary_minus> > operator-(const __gmp_expr<T, U> &expr) { return __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_unary_minus> >(expr); }
-40039: template <class T, class U> inline __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_unary_com> > operator~(const __gmp_expr<T, U> &expr) { return __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_unary_com> >(expr); }
-40039: 
-40039: template <class T, class U, class V, class W> inline __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_plus> > operator+(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { return __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_plus> > (expr1, expr2); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_plus> > operator+(const __gmp_expr<T, U> &expr, signed char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_plus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_plus> > operator+(signed char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_plus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_plus> > operator+(const __gmp_expr<T, U> &expr, unsigned char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_plus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_plus> > operator+(unsigned char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_plus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_plus> > operator+(const __gmp_expr<T, U> &expr, signed int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_plus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_plus> > operator+(signed int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_plus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_plus> > operator+(const __gmp_expr<T, U> &expr, unsigned int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_plus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_plus> > operator+(unsigned int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_plus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_plus> > operator+(const __gmp_expr<T, U> &expr, signed short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_plus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_plus> > operator+(signed short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_plus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_plus> > operator+(const __gmp_expr<T, U> &expr, unsigned short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_plus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_plus> > operator+(unsigned short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_plus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_plus> > operator+(const __gmp_expr<T, U> &expr, signed long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_plus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_plus> > operator+(signed long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_plus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_plus> > operator+(const __gmp_expr<T, U> &expr, unsigned long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_plus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_plus> > operator+(unsigned long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_plus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_plus> > operator+(const __gmp_expr<T, U> &expr, float t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_plus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_plus> > operator+(float t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_plus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_plus> > operator+(const __gmp_expr<T, U> &expr, double t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_plus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_plus> > operator+(double t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_plus> >(t, expr); }
-40039: template <class T, class U, class V, class W> inline __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_minus> > operator-(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { return __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_minus> > (expr1, expr2); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_minus> > operator-(const __gmp_expr<T, U> &expr, signed char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_minus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_minus> > operator-(signed char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_minus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_minus> > operator-(const __gmp_expr<T, U> &expr, unsigned char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_minus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_minus> > operator-(unsigned char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_minus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_minus> > operator-(const __gmp_expr<T, U> &expr, signed int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_minus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_minus> > operator-(signed int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_minus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_minus> > operator-(const __gmp_expr<T, U> &expr, unsigned int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_minus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_minus> > operator-(unsigned int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_minus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_minus> > operator-(const __gmp_expr<T, U> &expr, signed short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_minus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_minus> > operator-(signed short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_minus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_minus> > operator-(const __gmp_expr<T, U> &expr, unsigned short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_minus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_minus> > operator-(unsigned short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_minus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_minus> > operator-(const __gmp_expr<T, U> &expr, signed long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_minus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_minus> > operator-(signed long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_minus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_minus> > operator-(const __gmp_expr<T, U> &expr, unsigned long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_minus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_minus> > operator-(unsigned long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_minus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_minus> > operator-(const __gmp_expr<T, U> &expr, float t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_minus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_minus> > operator-(float t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_minus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_minus> > operator-(const __gmp_expr<T, U> &expr, double t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_minus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_minus> > operator-(double t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_minus> >(t, expr); }
-40039: template <class T, class U, class V, class W> inline __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_multiplies> > operator*(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { return __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_multiplies> > (expr1, expr2); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_multiplies> > operator*(const __gmp_expr<T, U> &expr, signed char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_multiplies> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_multiplies> > operator*(signed char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_multiplies> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_multiplies> > operator*(const __gmp_expr<T, U> &expr, unsigned char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_multiplies> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_multiplies> > operator*(unsigned char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_multiplies> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_multiplies> > operator*(const __gmp_expr<T, U> &expr, signed int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_multiplies> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_multiplies> > operator*(signed int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_multiplies> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_multiplies> > operator*(const __gmp_expr<T, U> &expr, unsigned int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_multiplies> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_multiplies> > operator*(unsigned int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_multiplies> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_multiplies> > operator*(const __gmp_expr<T, U> &expr, signed short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_multiplies> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_multiplies> > operator*(signed short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_multiplies> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_multiplies> > operator*(const __gmp_expr<T, U> &expr, unsigned short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_multiplies> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_multiplies> > operator*(unsigned short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_multiplies> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_multiplies> > operator*(const __gmp_expr<T, U> &expr, signed long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_multiplies> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_multiplies> > operator*(signed long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_multiplies> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_multiplies> > operator*(const __gmp_expr<T, U> &expr, unsigned long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_multiplies> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_multiplies> > operator*(unsigned long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_multiplies> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_multiplies> > operator*(const __gmp_expr<T, U> &expr, float t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_multiplies> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_multiplies> > operator*(float t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_multiplies> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_multiplies> > operator*(const __gmp_expr<T, U> &expr, double t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_multiplies> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_multiplies> > operator*(double t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_multiplies> >(t, expr); }
-40039: template <class T, class U, class V, class W> inline __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_divides> > operator/(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { return __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_divides> > (expr1, expr2); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_divides> > operator/(const __gmp_expr<T, U> &expr, signed char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_divides> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_divides> > operator/(signed char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_divides> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_divides> > operator/(const __gmp_expr<T, U> &expr, unsigned char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_divides> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_divides> > operator/(unsigned char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_divides> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_divides> > operator/(const __gmp_expr<T, U> &expr, signed int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_divides> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_divides> > operator/(signed int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_divides> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_divides> > operator/(const __gmp_expr<T, U> &expr, unsigned int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_divides> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_divides> > operator/(unsigned int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_divides> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_divides> > operator/(const __gmp_expr<T, U> &expr, signed short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_divides> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_divides> > operator/(signed short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_divides> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_divides> > operator/(const __gmp_expr<T, U> &expr, unsigned short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_divides> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_divides> > operator/(unsigned short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_divides> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_divides> > operator/(const __gmp_expr<T, U> &expr, signed long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_divides> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_divides> > operator/(signed long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_divides> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_divides> > operator/(const __gmp_expr<T, U> &expr, unsigned long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_divides> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_divides> > operator/(unsigned long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_divides> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_divides> > operator/(const __gmp_expr<T, U> &expr, float t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_divides> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_divides> > operator/(float t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_divides> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_divides> > operator/(const __gmp_expr<T, U> &expr, double t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_divides> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_divides> > operator/(double t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_divides> >(t, expr); }
-40039: template <class T, class U, class V, class W> inline __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_modulus> > operator%(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { return __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_modulus> > (expr1, expr2); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_modulus> > operator%(const __gmp_expr<T, U> &expr, signed char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_modulus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_modulus> > operator%(signed char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_modulus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_modulus> > operator%(const __gmp_expr<T, U> &expr, unsigned char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_modulus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_modulus> > operator%(unsigned char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_modulus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_modulus> > operator%(const __gmp_expr<T, U> &expr, signed int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_modulus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_modulus> > operator%(signed int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_modulus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_modulus> > operator%(const __gmp_expr<T, U> &expr, unsigned int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_modulus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_modulus> > operator%(unsigned int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_modulus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_modulus> > operator%(const __gmp_expr<T, U> &expr, signed short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_modulus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_modulus> > operator%(signed short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_modulus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_modulus> > operator%(const __gmp_expr<T, U> &expr, unsigned short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_modulus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_modulus> > operator%(unsigned short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_modulus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_modulus> > operator%(const __gmp_expr<T, U> &expr, signed long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_modulus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_modulus> > operator%(signed long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_modulus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_modulus> > operator%(const __gmp_expr<T, U> &expr, unsigned long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_modulus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_modulus> > operator%(unsigned long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_modulus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_modulus> > operator%(const __gmp_expr<T, U> &expr, float t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_modulus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_modulus> > operator%(float t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_modulus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_modulus> > operator%(const __gmp_expr<T, U> &expr, double t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_modulus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_modulus> > operator%(double t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_modulus> >(t, expr); }
-40039: template <class T, class U, class V, class W> inline __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_and> > operator&(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { return __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_and> > (expr1, expr2); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_and> > operator&(const __gmp_expr<T, U> &expr, signed char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_and> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_and> > operator&(signed char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_and> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_and> > operator&(const __gmp_expr<T, U> &expr, unsigned char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_and> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_and> > operator&(unsigned char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_and> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_and> > operator&(const __gmp_expr<T, U> &expr, signed int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_and> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_and> > operator&(signed int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_and> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_and> > operator&(const __gmp_expr<T, U> &expr, unsigned int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_and> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_and> > operator&(unsigned int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_and> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_and> > operator&(const __gmp_expr<T, U> &expr, signed short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_and> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_and> > operator&(signed short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_and> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_and> > operator&(const __gmp_expr<T, U> &expr, unsigned short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_and> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_and> > operator&(unsigned short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_and> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_and> > operator&(const __gmp_expr<T, U> &expr, signed long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_and> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_and> > operator&(signed long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_and> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_and> > operator&(const __gmp_expr<T, U> &expr, unsigned long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_and> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_and> > operator&(unsigned long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_and> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_and> > operator&(const __gmp_expr<T, U> &expr, float t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_and> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_and> > operator&(float t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_and> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_and> > operator&(const __gmp_expr<T, U> &expr, double t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_and> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_and> > operator&(double t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_and> >(t, expr); }
-40039: template <class T, class U, class V, class W> inline __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_ior> > operator|(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { return __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_ior> > (expr1, expr2); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_ior> > operator|(const __gmp_expr<T, U> &expr, signed char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_ior> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_ior> > operator|(signed char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_ior> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_ior> > operator|(const __gmp_expr<T, U> &expr, unsigned char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_ior> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_ior> > operator|(unsigned char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_ior> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_ior> > operator|(const __gmp_expr<T, U> &expr, signed int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_ior> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_ior> > operator|(signed int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_ior> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_ior> > operator|(const __gmp_expr<T, U> &expr, unsigned int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_ior> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_ior> > operator|(unsigned int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_ior> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_ior> > operator|(const __gmp_expr<T, U> &expr, signed short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_ior> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_ior> > operator|(signed short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_ior> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_ior> > operator|(const __gmp_expr<T, U> &expr, unsigned short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_ior> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_ior> > operator|(unsigned short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_ior> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_ior> > operator|(const __gmp_expr<T, U> &expr, signed long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_ior> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_ior> > operator|(signed long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_ior> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_ior> > operator|(const __gmp_expr<T, U> &expr, unsigned long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_ior> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_ior> > operator|(unsigned long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_ior> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_ior> > operator|(const __gmp_expr<T, U> &expr, float t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_ior> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_ior> > operator|(float t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_ior> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_ior> > operator|(const __gmp_expr<T, U> &expr, double t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_ior> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_ior> > operator|(double t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_ior> >(t, expr); }
-40039: template <class T, class U, class V, class W> inline __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_xor> > operator^(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { return __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_xor> > (expr1, expr2); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_xor> > operator^(const __gmp_expr<T, U> &expr, signed char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_xor> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_xor> > operator^(signed char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_xor> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_xor> > operator^(const __gmp_expr<T, U> &expr, unsigned char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_xor> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_xor> > operator^(unsigned char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_xor> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_xor> > operator^(const __gmp_expr<T, U> &expr, signed int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_xor> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_xor> > operator^(signed int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_xor> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_xor> > operator^(const __gmp_expr<T, U> &expr, unsigned int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_xor> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_xor> > operator^(unsigned int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_xor> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_xor> > operator^(const __gmp_expr<T, U> &expr, signed short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_xor> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_xor> > operator^(signed short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_xor> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_xor> > operator^(const __gmp_expr<T, U> &expr, unsigned short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_xor> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_xor> > operator^(unsigned short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_xor> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_xor> > operator^(const __gmp_expr<T, U> &expr, signed long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_xor> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_xor> > operator^(signed long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_xor> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_xor> > operator^(const __gmp_expr<T, U> &expr, unsigned long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_xor> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_xor> > operator^(unsigned long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_xor> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_xor> > operator^(const __gmp_expr<T, U> &expr, float t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_xor> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_xor> > operator^(float t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_xor> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_xor> > operator^(const __gmp_expr<T, U> &expr, double t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_xor> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_xor> > operator^(double t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_xor> >(t, expr); }
-40039: 
-40039: template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, mp_bitcnt_t, __gmp_binary_lshift> > operator<<(const __gmp_expr<T, U> &expr, mp_bitcnt_t l) { return __gmp_expr<T, __gmp_binary_expr <__gmp_expr<T, U>, mp_bitcnt_t, __gmp_binary_lshift> >(expr, l); }
-40039: template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, mp_bitcnt_t, __gmp_binary_rshift> > operator>>(const __gmp_expr<T, U> &expr, mp_bitcnt_t l) { return __gmp_expr<T, __gmp_binary_expr <__gmp_expr<T, U>, mp_bitcnt_t, __gmp_binary_rshift> >(expr, l); }
-40039: 
-40039: template <class T, class U, class V, class W> inline bool operator==(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { __gmp_expr<T, T> const& temp1(expr1); __gmp_expr<V, V> const& temp2(expr2); return __gmp_binary_equal::eval(temp1.__get_mp(), temp2.__get_mp()); } template <class T, class U> inline bool operator==(const __gmp_expr<T, U> &expr, signed char t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator==(signed char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator==(const __gmp_expr<T, U> &expr, unsigned char t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator==(unsigned char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator==(const __gmp_expr<T, U> &expr, signed int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator==(signed int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator==(const __gmp_expr<T, U> &expr, unsigned int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator==(unsigned int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator==(const __gmp_expr<T, U> &expr, signed short int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator==(signed short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator==(const __gmp_expr<T, U> &expr, unsigned short int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator==(unsigned short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator==(const __gmp_expr<T, U> &expr, signed long int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator==(signed long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator==(const __gmp_expr<T, U> &expr, unsigned long int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator==(unsigned long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator==(const __gmp_expr<T, U> &expr, float t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator==(float t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(static_cast<double>(t), temp.__get_mp()); } template <class T, class U> inline bool operator==(const __gmp_expr<T, U> &expr, double t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator==(double t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(static_cast<double>(t), temp.__get_mp()); }
-40039: template <class T, class U, class V, class W> inline bool operator!=(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { __gmp_expr<T, T> const& temp1(expr1); __gmp_expr<V, V> const& temp2(expr2); return ! __gmp_binary_equal::eval(temp1.__get_mp(), temp2.__get_mp()); } template <class T, class U> inline bool operator!=(const __gmp_expr<T, U> &expr, signed char t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator!=(signed char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator!=(const __gmp_expr<T, U> &expr, unsigned char t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator!=(unsigned char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator!=(const __gmp_expr<T, U> &expr, signed int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator!=(signed int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator!=(const __gmp_expr<T, U> &expr, unsigned int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator!=(unsigned int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator!=(const __gmp_expr<T, U> &expr, signed short int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator!=(signed short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator!=(const __gmp_expr<T, U> &expr, unsigned short int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator!=(unsigned short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator!=(const __gmp_expr<T, U> &expr, signed long int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator!=(signed long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator!=(const __gmp_expr<T, U> &expr, unsigned long int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator!=(unsigned long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator!=(const __gmp_expr<T, U> &expr, float t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator!=(float t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(static_cast<double>(t), temp.__get_mp()); } template <class T, class U> inline bool operator!=(const __gmp_expr<T, U> &expr, double t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator!=(double t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(static_cast<double>(t), temp.__get_mp()); }
-40039: template <class T, class U, class V, class W> inline bool operator<(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { __gmp_expr<T, T> const& temp1(expr1); __gmp_expr<V, V> const& temp2(expr2); return __gmp_binary_less::eval(temp1.__get_mp(), temp2.__get_mp()); } template <class T, class U> inline bool operator<(const __gmp_expr<T, U> &expr, signed char t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator<(signed char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<(const __gmp_expr<T, U> &expr, unsigned char t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator<(unsigned char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<(const __gmp_expr<T, U> &expr, signed int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator<(signed int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<(const __gmp_expr<T, U> &expr, unsigned int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator<(unsigned int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<(const __gmp_expr<T, U> &expr, signed short int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator<(signed short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<(const __gmp_expr<T, U> &expr, unsigned short int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator<(unsigned short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<(const __gmp_expr<T, U> &expr, signed long int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator<(signed long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<(const __gmp_expr<T, U> &expr, unsigned long int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator<(unsigned long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<(const __gmp_expr<T, U> &expr, float t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator<(float t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(static_cast<double>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<(const __gmp_expr<T, U> &expr, double t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator<(double t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(static_cast<double>(t), temp.__get_mp()); }
-40039: template <class T, class U, class V, class W> inline bool operator<=(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { __gmp_expr<T, T> const& temp1(expr1); __gmp_expr<V, V> const& temp2(expr2); return ! __gmp_binary_greater::eval(temp1.__get_mp(), temp2.__get_mp()); } template <class T, class U> inline bool operator<=(const __gmp_expr<T, U> &expr, signed char t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator<=(signed char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<=(const __gmp_expr<T, U> &expr, unsigned char t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator<=(unsigned char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<=(const __gmp_expr<T, U> &expr, signed int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator<=(signed int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<=(const __gmp_expr<T, U> &expr, unsigned int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator<=(unsigned int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<=(const __gmp_expr<T, U> &expr, signed short int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator<=(signed short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<=(const __gmp_expr<T, U> &expr, unsigned short int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator<=(unsigned short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<=(const __gmp_expr<T, U> &expr, signed long int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator<=(signed long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<=(const __gmp_expr<T, U> &expr, unsigned long int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator<=(unsigned long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<=(const __gmp_expr<T, U> &expr, float t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator<=(float t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(static_cast<double>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<=(const __gmp_expr<T, U> &expr, double t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator<=(double t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(static_cast<double>(t), temp.__get_mp()); }
-40039: template <class T, class U, class V, class W> inline bool operator>(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { __gmp_expr<T, T> const& temp1(expr1); __gmp_expr<V, V> const& temp2(expr2); return __gmp_binary_greater::eval(temp1.__get_mp(), temp2.__get_mp()); } template <class T, class U> inline bool operator>(const __gmp_expr<T, U> &expr, signed char t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator>(signed char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>(const __gmp_expr<T, U> &expr, unsigned char t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator>(unsigned char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>(const __gmp_expr<T, U> &expr, signed int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator>(signed int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>(const __gmp_expr<T, U> &expr, unsigned int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator>(unsigned int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>(const __gmp_expr<T, U> &expr, signed short int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator>(signed short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>(const __gmp_expr<T, U> &expr, unsigned short int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator>(unsigned short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>(const __gmp_expr<T, U> &expr, signed long int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator>(signed long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>(const __gmp_expr<T, U> &expr, unsigned long int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator>(unsigned long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>(const __gmp_expr<T, U> &expr, float t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator>(float t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(static_cast<double>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>(const __gmp_expr<T, U> &expr, double t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator>(double t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(static_cast<double>(t), temp.__get_mp()); }
-40039: template <class T, class U, class V, class W> inline bool operator>=(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { __gmp_expr<T, T> const& temp1(expr1); __gmp_expr<V, V> const& temp2(expr2); return ! __gmp_binary_less::eval(temp1.__get_mp(), temp2.__get_mp()); } template <class T, class U> inline bool operator>=(const __gmp_expr<T, U> &expr, signed char t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator>=(signed char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>=(const __gmp_expr<T, U> &expr, unsigned char t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator>=(unsigned char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>=(const __gmp_expr<T, U> &expr, signed int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator>=(signed int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>=(const __gmp_expr<T, U> &expr, unsigned int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator>=(unsigned int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>=(const __gmp_expr<T, U> &expr, signed short int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator>=(signed short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>=(const __gmp_expr<T, U> &expr, unsigned short int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator>=(unsigned short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>=(const __gmp_expr<T, U> &expr, signed long int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator>=(signed long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>=(const __gmp_expr<T, U> &expr, unsigned long int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator>=(unsigned long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>=(const __gmp_expr<T, U> &expr, float t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator>=(float t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(static_cast<double>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>=(const __gmp_expr<T, U> &expr, double t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator>=(double t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(static_cast<double>(t), temp.__get_mp()); }
-40039: 
-40039: template <class T, class U> inline __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_abs_function> > abs(const __gmp_expr<T, U> &expr) { return __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_abs_function> >(expr); }
-40039: template <class T, class U> inline __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_trunc_function> > trunc(const __gmp_expr<T, U> &expr) { return __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_trunc_function> >(expr); }
-40039: template <class T, class U> inline __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_floor_function> > floor(const __gmp_expr<T, U> &expr) { return __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_floor_function> >(expr); }
-40039: template <class T, class U> inline __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_ceil_function> > ceil(const __gmp_expr<T, U> &expr) { return __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_ceil_function> >(expr); }
-40039: template <class T, class U> inline __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_sqrt_function> > sqrt(const __gmp_expr<T, U> &expr) { return __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_sqrt_function> >(expr); }
-40039: template <class T, class U, class V, class W> inline __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_hypot_function> > hypot(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { return __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_hypot_function> > (expr1, expr2); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_hypot_function> > hypot(const __gmp_expr<T, U> &expr, signed char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_hypot_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_hypot_function> > hypot(signed char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_hypot_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_hypot_function> > hypot(const __gmp_expr<T, U> &expr, unsigned char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_hypot_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_hypot_function> > hypot(unsigned char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_hypot_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_hypot_function> > hypot(const __gmp_expr<T, U> &expr, signed int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_hypot_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_hypot_function> > hypot(signed int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_hypot_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_hypot_function> > hypot(const __gmp_expr<T, U> &expr, unsigned int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_hypot_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_hypot_function> > hypot(unsigned int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_hypot_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_hypot_function> > hypot(const __gmp_expr<T, U> &expr, signed short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_hypot_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_hypot_function> > hypot(signed short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_hypot_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_hypot_function> > hypot(const __gmp_expr<T, U> &expr, unsigned short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_hypot_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_hypot_function> > hypot(unsigned short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_hypot_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_hypot_function> > hypot(const __gmp_expr<T, U> &expr, signed long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_hypot_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_hypot_function> > hypot(signed long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_hypot_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_hypot_function> > hypot(const __gmp_expr<T, U> &expr, unsigned long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_hypot_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_hypot_function> > hypot(unsigned long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_hypot_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_hypot_function> > hypot(const __gmp_expr<T, U> &expr, float t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_hypot_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_hypot_function> > hypot(float t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_hypot_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_hypot_function> > hypot(const __gmp_expr<T, U> &expr, double t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_hypot_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_hypot_function> > hypot(double t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_hypot_function> >(t, expr); }
-40039: template <class T, class U, class V, class W> inline __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_gcd_function> > gcd(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { return __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_gcd_function> > (expr1, expr2); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_gcd_function> > gcd(const __gmp_expr<T, U> &expr, signed char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_gcd_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_gcd_function> > gcd(signed char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_gcd_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_gcd_function> > gcd(const __gmp_expr<T, U> &expr, unsigned char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_gcd_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_gcd_function> > gcd(unsigned char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_gcd_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_gcd_function> > gcd(const __gmp_expr<T, U> &expr, signed int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_gcd_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_gcd_function> > gcd(signed int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_gcd_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_gcd_function> > gcd(const __gmp_expr<T, U> &expr, unsigned int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_gcd_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_gcd_function> > gcd(unsigned int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_gcd_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_gcd_function> > gcd(const __gmp_expr<T, U> &expr, signed short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_gcd_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_gcd_function> > gcd(signed short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_gcd_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_gcd_function> > gcd(const __gmp_expr<T, U> &expr, unsigned short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_gcd_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_gcd_function> > gcd(unsigned short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_gcd_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_gcd_function> > gcd(const __gmp_expr<T, U> &expr, signed long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_gcd_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_gcd_function> > gcd(signed long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_gcd_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_gcd_function> > gcd(const __gmp_expr<T, U> &expr, unsigned long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_gcd_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_gcd_function> > gcd(unsigned long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_gcd_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_gcd_function> > gcd(const __gmp_expr<T, U> &expr, float t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_gcd_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_gcd_function> > gcd(float t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_gcd_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_gcd_function> > gcd(const __gmp_expr<T, U> &expr, double t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_gcd_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_gcd_function> > gcd(double t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_gcd_function> >(t, expr); }
-40039: template <class T, class U, class V, class W> inline __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_lcm_function> > lcm(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { return __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_lcm_function> > (expr1, expr2); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_lcm_function> > lcm(const __gmp_expr<T, U> &expr, signed char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_lcm_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_lcm_function> > lcm(signed char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_lcm_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_lcm_function> > lcm(const __gmp_expr<T, U> &expr, unsigned char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_lcm_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_lcm_function> > lcm(unsigned char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_lcm_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_lcm_function> > lcm(const __gmp_expr<T, U> &expr, signed int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_lcm_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_lcm_function> > lcm(signed int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_lcm_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_lcm_function> > lcm(const __gmp_expr<T, U> &expr, unsigned int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_lcm_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_lcm_function> > lcm(unsigned int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_lcm_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_lcm_function> > lcm(const __gmp_expr<T, U> &expr, signed short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_lcm_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_lcm_function> > lcm(signed short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_lcm_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_lcm_function> > lcm(const __gmp_expr<T, U> &expr, unsigned short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_lcm_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_lcm_function> > lcm(unsigned short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_lcm_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_lcm_function> > lcm(const __gmp_expr<T, U> &expr, signed long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_lcm_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_lcm_function> > lcm(signed long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_lcm_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_lcm_function> > lcm(const __gmp_expr<T, U> &expr, unsigned long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_lcm_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_lcm_function> > lcm(unsigned long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_lcm_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_lcm_function> > lcm(const __gmp_expr<T, U> &expr, float t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_lcm_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_lcm_function> > lcm(float t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_lcm_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_lcm_function> > lcm(const __gmp_expr<T, U> &expr, double t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_lcm_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_lcm_function> > lcm(double t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_lcm_function> >(t, expr); }
-40039: 
-40039: template <class T, class U> inline int sgn(const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_sgn_function::eval(temp.__get_mp()); }
-40039: template <class T, class U, class V, class W> inline int cmp(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { __gmp_expr<T, T> const& temp1(expr1); __gmp_expr<V, V> const& temp2(expr2); return __gmp_cmp_function::eval(temp1.__get_mp(), temp2.__get_mp()); } template <class T, class U> inline int cmp(const __gmp_expr<T, U> &expr, signed char t) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline int cmp(signed char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline int cmp(const __gmp_expr<T, U> &expr, unsigned char t) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline int cmp(unsigned char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline int cmp(const __gmp_expr<T, U> &expr, signed int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline int cmp(signed int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline int cmp(const __gmp_expr<T, U> &expr, unsigned int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline int cmp(unsigned int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline int cmp(const __gmp_expr<T, U> &expr, signed short int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline int cmp(signed short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline int cmp(const __gmp_expr<T, U> &expr, unsigned short int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline int cmp(unsigned short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline int cmp(const __gmp_expr<T, U> &expr, signed long int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline int cmp(signed long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline int cmp(const __gmp_expr<T, U> &expr, unsigned long int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline int cmp(unsigned long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline int cmp(const __gmp_expr<T, U> &expr, float t) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline int cmp(float t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(static_cast<double>(t), temp.__get_mp()); } template <class T, class U> inline int cmp(const __gmp_expr<T, U> &expr, double t) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline int cmp(double t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(static_cast<double>(t), temp.__get_mp()); }
-40039: 
-40039: template <class T>
-40039: void swap(__gmp_expr<T, T>& x, __gmp_expr<T, T>& y) noexcept
-40039: { x.swap(y); }
-40039: 
-40039: 
-40039: 
-40039: template <class T, class U> inline mpz_class & mpz_class::operator+=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, __gmp_expr<T, U>, __gmp_binary_plus> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator+=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(float t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_plus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(double t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_plus> >(*this, t)); return *this; }
-40039: template <class T, class U> inline mpz_class & mpz_class::operator-=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, __gmp_expr<T, U>, __gmp_binary_minus> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator-=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(float t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_minus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(double t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_minus> >(*this, t)); return *this; }
-40039: template <class T, class U> inline mpz_class & mpz_class::operator*=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, __gmp_expr<T, U>, __gmp_binary_multiplies> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator*=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(float t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(double t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_multiplies> >(*this, t)); return *this; }
-40039: template <class T, class U> inline mpz_class & mpz_class::operator/=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, __gmp_expr<T, U>, __gmp_binary_divides> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator/=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(float t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_divides> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(double t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_divides> >(*this, t)); return *this; }
-40039: template <class T, class U> inline mpz_class & mpz_class::operator%=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, __gmp_expr<T, U>, __gmp_binary_modulus> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator%=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_modulus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_modulus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_modulus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_modulus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_modulus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_modulus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_modulus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_modulus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(float t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_modulus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(double t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_modulus> >(*this, t)); return *this; }
-40039: 
-40039: template <class T, class U> inline mpz_class & mpz_class::operator&=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, __gmp_expr<T, U>, __gmp_binary_and> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator&=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_and> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_and> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_and> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_and> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_and> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_and> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_and> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_and> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(float t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_and> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(double t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_and> >(*this, t)); return *this; }
-40039: template <class T, class U> inline mpz_class & mpz_class::operator|=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, __gmp_expr<T, U>, __gmp_binary_ior> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator|=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_ior> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_ior> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_ior> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_ior> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_ior> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_ior> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_ior> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_ior> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(float t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_ior> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(double t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_ior> >(*this, t)); return *this; }
-40039: template <class T, class U> inline mpz_class & mpz_class::operator^=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, __gmp_expr<T, U>, __gmp_binary_xor> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator^=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_xor> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_xor> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_xor> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_xor> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_xor> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_xor> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_xor> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_xor> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(float t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_xor> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(double t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_xor> >(*this, t)); return *this; }
-40039: 
-40039: inline mpz_class & mpz_class::operator<<=(mp_bitcnt_t l) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, mp_bitcnt_t, __gmp_binary_lshift> >(*this, l)); return *this; }
-40039: inline mpz_class & mpz_class::operator>>=(mp_bitcnt_t l) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, mp_bitcnt_t, __gmp_binary_rshift> >(*this, l)); return *this; }
-40039: 
-40039: inline mpz_class & mpz_class::operator++() { __gmp_unary_increment::eval(mp); return *this; } inline mpz_class mpz_class::operator++(int) { mpz_class temp(*this); __gmp_unary_increment::eval(mp); return temp; }
-40039: inline mpz_class & mpz_class::operator--() { __gmp_unary_decrement::eval(mp); return *this; } inline mpz_class mpz_class::operator--(int) { mpz_class temp(*this); __gmp_unary_decrement::eval(mp); return temp; }
-40039: 
-40039: 
-40039: 
-40039: template <class T, class U> inline mpq_class & mpq_class::operator+=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, __gmp_expr<T, U>, __gmp_binary_plus> >(*this, expr)); return *this; } inline mpq_class & mpq_class::operator+=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(float t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, double, __gmp_binary_plus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(double t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, double, __gmp_binary_plus> >(*this, t)); return *this; }
-40039: template <class T, class U> inline mpq_class & mpq_class::operator-=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, __gmp_expr<T, U>, __gmp_binary_minus> >(*this, expr)); return *this; } inline mpq_class & mpq_class::operator-=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(float t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, double, __gmp_binary_minus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(double t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, double, __gmp_binary_minus> >(*this, t)); return *this; }
-40039: template <class T, class U> inline mpq_class & mpq_class::operator*=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, __gmp_expr<T, U>, __gmp_binary_multiplies> >(*this, expr)); return *this; } inline mpq_class & mpq_class::operator*=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(float t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, double, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(double t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, double, __gmp_binary_multiplies> >(*this, t)); return *this; }
-40039: template <class T, class U> inline mpq_class & mpq_class::operator/=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, __gmp_expr<T, U>, __gmp_binary_divides> >(*this, expr)); return *this; } inline mpq_class & mpq_class::operator/=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(float t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, double, __gmp_binary_divides> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(double t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, double, __gmp_binary_divides> >(*this, t)); return *this; }
-40039: 
-40039: inline mpq_class & mpq_class::operator<<=(mp_bitcnt_t l) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, mp_bitcnt_t, __gmp_binary_lshift> >(*this, l)); return *this; }
-40039: inline mpq_class & mpq_class::operator>>=(mp_bitcnt_t l) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, mp_bitcnt_t, __gmp_binary_rshift> >(*this, l)); return *this; }
-40039: 
-40039: inline mpq_class & mpq_class::operator++() { __gmp_unary_increment::eval(mp); return *this; } inline mpq_class mpq_class::operator++(int) { mpq_class temp(*this); __gmp_unary_increment::eval(mp); return temp; }
-40039: inline mpq_class & mpq_class::operator--() { __gmp_unary_decrement::eval(mp); return *this; } inline mpq_class mpq_class::operator--(int) { mpq_class temp(*this); __gmp_unary_decrement::eval(mp); return temp; }
-40039: 
-40039: 
-40039: 
-40039: template <class T, class U> inline mpf_class & mpf_class::operator+=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, __gmp_expr<T, U>, __gmp_binary_plus> >(*this, expr)); return *this; } inline mpf_class & mpf_class::operator+=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(float t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, double, __gmp_binary_plus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(double t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, double, __gmp_binary_plus> >(*this, t)); return *this; }
-40039: template <class T, class U> inline mpf_class & mpf_class::operator-=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, __gmp_expr<T, U>, __gmp_binary_minus> >(*this, expr)); return *this; } inline mpf_class & mpf_class::operator-=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(float t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, double, __gmp_binary_minus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(double t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, double, __gmp_binary_minus> >(*this, t)); return *this; }
-40039: template <class T, class U> inline mpf_class & mpf_class::operator*=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, __gmp_expr<T, U>, __gmp_binary_multiplies> >(*this, expr)); return *this; } inline mpf_class & mpf_class::operator*=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(float t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, double, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(double t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, double, __gmp_binary_multiplies> >(*this, t)); return *this; }
-40039: template <class T, class U> inline mpf_class & mpf_class::operator/=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, __gmp_expr<T, U>, __gmp_binary_divides> >(*this, expr)); return *this; } inline mpf_class & mpf_class::operator/=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(float t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, double, __gmp_binary_divides> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(double t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, double, __gmp_binary_divides> >(*this, t)); return *this; }
-40039: 
-40039: inline mpf_class & mpf_class::operator<<=(mp_bitcnt_t l) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, mp_bitcnt_t, __gmp_binary_lshift> >(*this, l)); return *this; }
-40039: inline mpf_class & mpf_class::operator>>=(mp_bitcnt_t l) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, mp_bitcnt_t, __gmp_binary_rshift> >(*this, l)); return *this; }
-40039: 
-40039: inline mpf_class & mpf_class::operator++() { __gmp_unary_increment::eval(mp); return *this; } inline mpf_class mpf_class::operator++(int) { mpf_class temp(*this); __gmp_unary_increment::eval(mp); return temp; }
-40039: inline mpf_class & mpf_class::operator--() { __gmp_unary_decrement::eval(mp); return *this; } inline mpf_class mpf_class::operator--(int) { mpf_class temp(*this); __gmp_unary_decrement::eval(mp); return temp; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: class __gmp_urandomb_value { };
-40039: class __gmp_urandomm_value { };
-40039: 
-40039: template <>
-40039: class __gmp_expr<mpz_t, __gmp_urandomb_value>
-40039: {
-40039: private:
-40039:   __gmp_randstate_struct *state;
-40039:   mp_bitcnt_t bits;
-40039: public:
-40039:   __gmp_expr(gmp_randstate_t s, mp_bitcnt_t l) : state(s), bits(l) { }
-40039:   void eval(mpz_ptr z) const { __gmp_rand_function::eval(z, state, bits); }
-40039:   mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); }
-40039: };
-40039: 
-40039: template <>
-40039: class __gmp_expr<mpz_t, __gmp_urandomm_value>
-40039: {
-40039: private:
-40039:   __gmp_randstate_struct *state;
-40039:   mpz_class range;
-40039: public:
-40039:   __gmp_expr(gmp_randstate_t s, const mpz_class &z) : state(s), range(z) { }
-40039:   void eval(mpz_ptr z) const
-40039:   { __gmp_rand_function::eval(z, state, range.get_mpz_t()); }
-40039:   mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); }
-40039: };
-40039: 
-40039: template <>
-40039: class __gmp_expr<mpf_t, __gmp_urandomb_value>
-40039: {
-40039: private:
-40039:   __gmp_randstate_struct *state;
-40039:   mp_bitcnt_t bits;
-40039: public:
-40039:   __gmp_expr(gmp_randstate_t s, mp_bitcnt_t l) : state(s), bits(l) { }
-40039:   void eval(mpf_ptr f) const
-40039:   {
-40039:     __gmp_rand_function::eval(f, state,
-40039:  (bits>0) ? bits : __gmpf_get_prec(f));
-40039:   }
-40039:   mp_bitcnt_t get_prec() const
-40039:   {
-40039:     if (bits == 0)
-40039:       return __gmpf_get_default_prec();
-40039:     else
-40039:       return bits;
-40039:   }
-40039: };
-40039: 
-40039: extern "C" {
-40039:   typedef void __gmp_randinit_default_t (gmp_randstate_t);
-40039:   typedef void __gmp_randinit_lc_2exp_t (gmp_randstate_t, mpz_srcptr, unsigned long int, mp_bitcnt_t);
-40039:   typedef int __gmp_randinit_lc_2exp_size_t (gmp_randstate_t, mp_bitcnt_t);
-40039: }
-40039: 
-40039: class gmp_randclass
-40039: {
-40039: private:
-40039:   gmp_randstate_t state;
-40039: 
-40039: 
-40039:   gmp_randclass(const gmp_randclass &);
-40039:   void operator=(const gmp_randclass &);
-40039: public:
-40039: 
-40039:   gmp_randclass(gmp_randalg_t alg, unsigned long int size)
-40039:   {
-40039:     switch (alg)
-40039:       {
-40039:       case GMP_RAND_ALG_LC:
-40039:       default:
-40039:  __gmp_randinit(state, alg, size);
-40039:  break;
-40039:       }
-40039:   }
-40039: 
-40039: 
-40039:   gmp_randclass(__gmp_randinit_default_t* f) { f(state); }
-40039: 
-40039: 
-40039:   gmp_randclass(__gmp_randinit_lc_2exp_t* f,
-40039:   mpz_class z, unsigned long int l1, mp_bitcnt_t l2)
-40039:   { f(state, z.get_mpz_t(), l1, l2); }
-40039: 
-40039: 
-40039:   gmp_randclass(__gmp_randinit_lc_2exp_size_t* f,
-40039:   mp_bitcnt_t size)
-40039:   {
-40039:     if (f (state, size) == 0)
-40039:       throw std::length_error ("gmp_randinit_lc_2exp_size");
-40039:   }
-40039: 
-40039:   ~gmp_randclass() { __gmp_randclear(state); }
-40039: 
-40039: 
-40039:   void seed();
-40039:   void seed(unsigned long int s) { __gmp_randseed_ui(state, s); }
-40039:   void seed(const mpz_class &z) { __gmp_randseed(state, z.get_mpz_t()); }
-40039: 
-40039: 
-40039:   __gmp_expr<mpz_t, __gmp_urandomb_value> get_z_bits(mp_bitcnt_t l)
-40039:   { return __gmp_expr<mpz_t, __gmp_urandomb_value>(state, l); }
-40039:   __gmp_expr<mpz_t, __gmp_urandomb_value> get_z_bits(const mpz_class &z)
-40039:   { return get_z_bits(z.get_ui()); }
-40039: 
-40039: 
-40039:   __gmp_expr<mpz_t, __gmp_urandomm_value> get_z_range(const mpz_class &z)
-40039:   { return __gmp_expr<mpz_t, __gmp_urandomm_value>(state, z); }
-40039: 
-40039:   __gmp_expr<mpf_t, __gmp_urandomb_value> get_f(mp_bitcnt_t prec = 0)
-40039:   { return __gmp_expr<mpf_t, __gmp_urandomb_value>(state, prec); }
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace std {
-40039:   template <> class numeric_limits<mpz_class>
-40039:   {
-40039:   public:
-40039:     static const bool is_specialized = true;
-40039:     static mpz_class min() { return mpz_class(); }
-40039:     static mpz_class max() { return mpz_class(); }
-40039:     static mpz_class lowest() { return mpz_class(); }
-40039:     static const int digits = 0;
-40039:     static const int digits10 = 0;
-40039:     static const int max_digits10 = 0;
-40039:     static const bool is_signed = true;
-40039:     static const bool is_integer = true;
-40039:     static const bool is_exact = true;
-40039:     static const int radix = 2;
-40039:     static mpz_class epsilon() { return mpz_class(); }
-40039:     static mpz_class round_error() { return mpz_class(); }
-40039:     static const int min_exponent = 0;
-40039:     static const int min_exponent10 = 0;
-40039:     static const int max_exponent = 0;
-40039:     static const int max_exponent10 = 0;
-40039:     static const bool has_infinity = false;
-40039:     static const bool has_quiet_NaN = false;
-40039:     static const bool has_signaling_NaN = false;
-40039:     static const float_denorm_style has_denorm = denorm_absent;
-40039:     static const bool has_denorm_loss = false;
-40039:     static mpz_class infinity() { return mpz_class(); }
-40039:     static mpz_class quiet_NaN() { return mpz_class(); }
-40039:     static mpz_class signaling_NaN() { return mpz_class(); }
-40039:     static mpz_class denorm_min() { return mpz_class(); }
-40039:     static const bool is_iec559 = false;
-40039:     static const bool is_bounded = false;
-40039:     static const bool is_modulo = false;
-40039:     static const bool traps = false;
-40039:     static const bool tinyness_before = false;
-40039:     static const float_round_style round_style = round_toward_zero;
-40039:   };
-40039: 
-40039:   template <> class numeric_limits<mpq_class>
-40039:   {
-40039:   public:
-40039:     static const bool is_specialized = true;
-40039:     static mpq_class min() { return mpq_class(); }
-40039:     static mpq_class max() { return mpq_class(); }
-40039:     static mpq_class lowest() { return mpq_class(); }
-40039:     static const int digits = 0;
-40039:     static const int digits10 = 0;
-40039:     static const int max_digits10 = 0;
-40039:     static const bool is_signed = true;
-40039:     static const bool is_integer = false;
-40039:     static const bool is_exact = true;
-40039:     static const int radix = 2;
-40039:     static mpq_class epsilon() { return mpq_class(); }
-40039:     static mpq_class round_error() { return mpq_class(); }
-40039:     static const int min_exponent = 0;
-40039:     static const int min_exponent10 = 0;
-40039:     static const int max_exponent = 0;
-40039:     static const int max_exponent10 = 0;
-40039:     static const bool has_infinity = false;
-40039:     static const bool has_quiet_NaN = false;
-40039:     static const bool has_signaling_NaN = false;
-40039:     static const float_denorm_style has_denorm = denorm_absent;
-40039:     static const bool has_denorm_loss = false;
-40039:     static mpq_class infinity() { return mpq_class(); }
-40039:     static mpq_class quiet_NaN() { return mpq_class(); }
-40039:     static mpq_class signaling_NaN() { return mpq_class(); }
-40039:     static mpq_class denorm_min() { return mpq_class(); }
-40039:     static const bool is_iec559 = false;
-40039:     static const bool is_bounded = false;
-40039:     static const bool is_modulo = false;
-40039:     static const bool traps = false;
-40039:     static const bool tinyness_before = false;
-40039:     static const float_round_style round_style = round_toward_zero;
-40039:   };
-40039: 
-40039:   template <> class numeric_limits<mpf_class>
-40039:   {
-40039:   public:
-40039:     static const bool is_specialized = true;
-40039:     static mpf_class min() { return mpf_class(); }
-40039:     static mpf_class max() { return mpf_class(); }
-40039:     static mpf_class lowest() { return mpf_class(); }
-40039:     static const int digits = 0;
-40039:     static const int digits10 = 0;
-40039:     static const int max_digits10 = 0;
-40039:     static const bool is_signed = true;
-40039:     static const bool is_integer = false;
-40039:     static const bool is_exact = false;
-40039:     static const int radix = 2;
-40039:     static mpf_class epsilon() { return mpf_class(); }
-40039:     static mpf_class round_error() { return mpf_class(); }
-40039:     static const int min_exponent = 0;
-40039:     static const int min_exponent10 = 0;
-40039:     static const int max_exponent = 0;
-40039:     static const int max_exponent10 = 0;
-40039:     static const bool has_infinity = false;
-40039:     static const bool has_quiet_NaN = false;
-40039:     static const bool has_signaling_NaN = false;
-40039:     static const float_denorm_style has_denorm = denorm_absent;
-40039:     static const bool has_denorm_loss = false;
-40039:     static mpf_class infinity() { return mpf_class(); }
-40039:     static mpf_class quiet_NaN() { return mpf_class(); }
-40039:     static mpf_class signaling_NaN() { return mpf_class(); }
-40039:     static mpf_class denorm_min() { return mpf_class(); }
-40039:     static const bool is_iec559 = false;
-40039:     static const bool is_bounded = false;
-40039:     static const bool is_modulo = false;
-40039:     static const bool traps = false;
-40039:     static const bool tinyness_before = false;
-40039:     static const float_round_style round_style = round_indeterminate;
-40039:   };
-40039: }
-40039: # 29 "../../src/mp_std_bits_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 34 "../../src/mp_std_bits_defs.hh"
-40039: void swap(mpz_class& x, mpz_class& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: void swap(mpq_class& x, mpq_class& y);
-40039: # 173 "../../src/mp_std_bits_defs.hh"
-40039: # 1 "../../src/mp_std_bits_inlines.hh" 1
-40039: # 28 "../../src/mp_std_bits_inlines.hh"
-40039: inline void
-40039: swap(mpz_class& x, mpz_class& y) {
-40039:   
-40039: # 30 "../../src/mp_std_bits_inlines.hh" 3 4
-40039:  __gmpz_swap
-40039: # 30 "../../src/mp_std_bits_inlines.hh"
-40039:          (x.get_mpz_t(), y.get_mpz_t());
-40039: }
-40039: 
-40039: inline void
-40039: swap(mpq_class& x, mpq_class& y) {
-40039:   
-40039: # 35 "../../src/mp_std_bits_inlines.hh" 3 4
-40039:  __gmpq_swap
-40039: # 35 "../../src/mp_std_bits_inlines.hh"
-40039:          (x.get_mpq_t(), y.get_mpq_t());
-40039: }
-40039: # 174 "../../src/mp_std_bits_defs.hh" 2
-40039: # 28 "../../src/checked_defs.hh" 2
-40039: # 1 "../../src/Temp_defs.hh" 1
-40039: # 27 "../../src/Temp_defs.hh"
-40039: # 1 "../../src/meta_programming.hh" 1
-40039: # 29 "../../src/meta_programming.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: # 102 "../../src/meta_programming.hh"
-40039: template <bool b>
-40039: struct Compile_Time_Check;
-40039: # 114 "../../src/meta_programming.hh"
-40039: template <>
-40039: struct Compile_Time_Check<true> {
-40039: };
-40039: # 142 "../../src/meta_programming.hh"
-40039: template <bool b>
-40039: struct Bool {
-40039:   enum const_bool_value {
-40039:     value = b
-40039:   };
-40039: };
-40039: # 156 "../../src/meta_programming.hh"
-40039: struct True : public Bool<true> {
-40039: };
-40039: # 166 "../../src/meta_programming.hh"
-40039: struct False : public Bool<false> {
-40039: };
-40039: # 178 "../../src/meta_programming.hh"
-40039: template <typename T1, typename T2>
-40039: struct Is_Same : public False {
-40039: };
-40039: # 191 "../../src/meta_programming.hh"
-40039: template <typename T>
-40039: struct Is_Same<T, T> : public True {
-40039: };
-40039: # 222 "../../src/meta_programming.hh"
-40039: template <typename Base, typename Derived>
-40039: struct Is_Same_Or_Derived {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   struct Any {
-40039: 
-40039:     template <typename T>
-40039:     Any(const T&);
-40039:   };
-40039: 
-40039: 
-40039:   static char func(const Base&);
-40039: 
-40039: 
-40039:   static double func(Any);
-40039: 
-40039: 
-40039:   static const Derived& derived_object();
-40039: 
-40039:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_245 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(sizeof(char) != sizeof(double))>) }
-40039: 
-40039:                                  ;
-40039: 
-40039:   enum const_bool_value {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     value = (sizeof(func(derived_object())) == sizeof(char))
-40039:   };
-40039: };
-40039: # 269 "../../src/meta_programming.hh"
-40039: template <bool b, typename T = void>
-40039: struct Enable_If {
-40039: };
-40039: 
-40039: template <typename Type, Type, typename T = void>
-40039: struct Enable_If_Is {
-40039:   typedef T type;
-40039: };
-40039: # 304 "../../src/meta_programming.hh"
-40039: template <typename T>
-40039: struct Enable_If<true, T> {
-40039:   typedef T type;
-40039: };
-40039: 
-40039: template <typename T>
-40039: struct Is_Native : public False {
-40039: };
-40039: 
-40039: template <> struct Is_Native<char> : public True { };
-40039: template <> struct Is_Native<signed char> : public True { };
-40039: template <> struct Is_Native<signed short> : public True { };
-40039: template <> struct Is_Native<signed int> : public True { };
-40039: template <> struct Is_Native<signed long> : public True { };
-40039: template <> struct Is_Native<signed long long> : public True { };
-40039: template <> struct Is_Native<unsigned char> : public True { };
-40039: template <> struct Is_Native<unsigned short> : public True { };
-40039: template <> struct Is_Native<unsigned int> : public True { };
-40039: template <> struct Is_Native<unsigned long> : public True { };
-40039: template <> struct Is_Native<unsigned long long> : public True { };
-40039: 
-40039: 
-40039: template <> struct Is_Native<float> : public True { };
-40039: 
-40039: 
-40039: template <> struct Is_Native<double> : public True { };
-40039: 
-40039: 
-40039: template <> struct Is_Native<long double> : public True { };
-40039: 
-40039: 
-40039: template <> struct Is_Native<mpz_class> : public True { };
-40039: 
-40039: template <> struct Is_Native<mpq_class> : public True { };
-40039: 
-40039: }
-40039: # 28 "../../src/Temp_defs.hh" 2
-40039: # 1 "../../src/Slow_Copy.hh" 1
-40039: # 30 "../../src/Slow_Copy.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: struct Slow_Copy : public False {
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <>
-40039: struct Slow_Copy<mpz_class> : public True {
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <>
-40039: struct Slow_Copy<mpq_class> : public True {
-40039: };
-40039: 
-40039: }
-40039: # 29 "../../src/Temp_defs.hh" 2
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: class Temp_Item {
-40039: public:
-40039: 
-40039:   static Temp_Item& obtain();
-40039: 
-40039: 
-40039:   static void release(Temp_Item& p);
-40039: 
-40039: 
-40039:   T& item();
-40039: 
-40039: private:
-40039: 
-40039:   T item_;
-40039: 
-40039: 
-40039:   Temp_Item* next;
-40039: 
-40039:   class Free_List {
-40039:   public:
-40039:     Free_List();
-40039:     ~Free_List();
-40039:     Temp_Item* head_ptr;
-40039:   private:
-40039:     Free_List(const Free_List&);
-40039:     Free_List& operator=(const Free_List&);
-40039:   };
-40039: 
-40039:   friend class Free_List;
-40039: 
-40039: 
-40039:   static Temp_Item*& free_list_ref();
-40039: 
-40039: 
-40039:   Temp_Item();
-40039: 
-40039: 
-40039:   Temp_Item(const Temp_Item&);
-40039: 
-40039: 
-40039:   Temp_Item& operator=(const Temp_Item&);
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: class Temp_Reference_Holder {
-40039: public:
-40039: 
-40039:   Temp_Reference_Holder();
-40039: 
-40039: 
-40039:   ~Temp_Reference_Holder();
-40039: 
-40039: 
-40039:   T& item();
-40039: 
-40039: private:
-40039: 
-40039:   Temp_Reference_Holder(const Temp_Reference_Holder&);
-40039: 
-40039: 
-40039:   Temp_Reference_Holder& operator=(const Temp_Reference_Holder&);
-40039: 
-40039: 
-40039:   Temp_Item<T>& held;
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: class Temp_Value_Holder {
-40039: public:
-40039: 
-40039:   Temp_Value_Holder();
-40039: 
-40039: 
-40039:   T& item();
-40039: 
-40039: private:
-40039: 
-40039:   Temp_Value_Holder(const Temp_Value_Holder&);
-40039: 
-40039: 
-40039:   Temp_Value_Holder& operator=(const Temp_Value_Holder&);
-40039: 
-40039: 
-40039:   T item_;
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Enable = void>
-40039: class Dirty_Temp;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: class Dirty_Temp<T, typename Enable_If<Slow_Copy<T>::value>::type>
-40039:   : public Temp_Reference_Holder<T> {
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: class Dirty_Temp<T, typename Enable_If<!Slow_Copy<T>::value>::type>
-40039:   : public Temp_Value_Holder<T> {
-40039: };
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Temp_inlines.hh" 1
-40039: # 29 "../../src/Temp_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: inline
-40039: Temp_Item<T>::Temp_Item()
-40039:   : item_() {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline T&
-40039: Temp_Item<T>::item() {
-40039:     return item_;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: Temp_Item<T>::Free_List::Free_List()
-40039:   : head_ptr(0) {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline Temp_Item<T>*&
-40039: Temp_Item<T>::free_list_ref() {
-40039:   static Free_List free_list;
-40039:   return free_list.head_ptr;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline Temp_Item<T>&
-40039: Temp_Item<T>::obtain() {
-40039:   Temp_Item* const p = free_list_ref();
-40039:   if (p != 0) {
-40039:     free_list_ref() = p->next;
-40039:     return *p;
-40039:   }
-40039:   else {
-40039:     return *new Temp_Item();
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Temp_Item<T>::release(Temp_Item& p) {
-40039:   p.next = free_list_ref();
-40039:   free_list_ref() = &p;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: Temp_Reference_Holder<T>::Temp_Reference_Holder()
-40039:   : held(Temp_Item<T>::obtain()) {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: Temp_Reference_Holder<T>::~Temp_Reference_Holder() {
-40039:   Temp_Item<T>::release(held);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline T&
-40039: Temp_Reference_Holder<T>::item() {
-40039:   return held.item();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: Temp_Value_Holder<T>::Temp_Value_Holder() {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline T&
-40039: Temp_Value_Holder<T>::item() {
-40039:   return item_;
-40039: }
-40039: 
-40039: }
-40039: # 153 "../../src/Temp_defs.hh" 2
-40039: # 1 "../../src/Temp_templates.hh" 1
-40039: # 27 "../../src/Temp_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: Temp_Item<T>::Free_List::~Free_List() {
-40039:   while (head_ptr != 0) {
-40039:     Temp_Item* const p = head_ptr;
-40039:     head_ptr = head_ptr->next;
-40039:     delete p;
-40039:   }
-40039: }
-40039: 
-40039: }
-40039: # 154 "../../src/Temp_defs.hh" 2
-40039: # 29 "../../src/checked_defs.hh" 2
-40039: # 1 "../../src/Rounding_Dir_defs.hh" 1
-40039: # 27 "../../src/Rounding_Dir_defs.hh"
-40039: # 1 "../../src/Result_defs.hh" 1
-40039: # 27 "../../src/Result_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: enum Result_Class {
-40039: 
-40039:   VC_NORMAL = 0U << 4,
-40039: 
-40039: 
-40039:   VC_MINUS_INFINITY = 1U << 4,
-40039: 
-40039: 
-40039:   VC_PLUS_INFINITY = 2U << 4,
-40039: 
-40039: 
-40039:   VC_NAN = 3U << 4,
-40039: 
-40039:   VC_MASK = VC_NAN
-40039: };
-40039: 
-40039: 
-40039: enum Result_Relation {
-40039: 
-40039:   VR_EMPTY = 0U,
-40039: 
-40039: 
-40039:   VR_EQ = 1U,
-40039: 
-40039: 
-40039:   VR_LT = 2U,
-40039: 
-40039: 
-40039:   VR_GT = 4U,
-40039: 
-40039: 
-40039:   VR_NE = VR_LT | VR_GT,
-40039: 
-40039: 
-40039:   VR_LE = VR_EQ | VR_LT,
-40039: 
-40039: 
-40039:   VR_GE = VR_EQ | VR_GT,
-40039: 
-40039: 
-40039:   VR_LGE = VR_LT | VR_EQ | VR_GT,
-40039: 
-40039:   VR_MASK = VR_LGE
-40039: };
-40039: 
-40039: 
-40039: 
-40039: enum Result {
-40039: 
-40039:   V_EMPTY = VR_EMPTY,
-40039: 
-40039: 
-40039:   V_EQ = static_cast<unsigned>(VR_EQ),
-40039: 
-40039: 
-40039:   V_LT = static_cast<unsigned>(VR_LT),
-40039: 
-40039: 
-40039:   V_GT = static_cast<unsigned>(VR_GT),
-40039: 
-40039: 
-40039:   V_NE = VR_NE,
-40039: 
-40039: 
-40039:   V_LE = VR_LE,
-40039: 
-40039: 
-40039:   V_GE = VR_GE,
-40039: 
-40039: 
-40039:   V_LGE = VR_LGE,
-40039: 
-40039: 
-40039:   V_OVERFLOW = 1U << 6,
-40039: 
-40039: 
-40039:   V_LT_INF = V_LT | V_OVERFLOW,
-40039: 
-40039: 
-40039:   V_GT_SUP = V_GT | V_OVERFLOW,
-40039: 
-40039: 
-40039:   V_LT_PLUS_INFINITY = V_LT | static_cast<unsigned>(VC_PLUS_INFINITY),
-40039: 
-40039: 
-40039:   V_GT_MINUS_INFINITY = V_GT | static_cast<unsigned>(VC_MINUS_INFINITY),
-40039: 
-40039: 
-40039:   V_EQ_MINUS_INFINITY = V_EQ | static_cast<unsigned>(VC_MINUS_INFINITY),
-40039: 
-40039: 
-40039:   V_EQ_PLUS_INFINITY = V_EQ | static_cast<unsigned>(VC_PLUS_INFINITY),
-40039: 
-40039: 
-40039:   V_NAN = static_cast<unsigned>(VC_NAN),
-40039: 
-40039: 
-40039:   V_CVT_STR_UNK = V_NAN | (1U << 8),
-40039: 
-40039: 
-40039:   V_DIV_ZERO = V_NAN | (2U << 8),
-40039: 
-40039: 
-40039:   V_INF_ADD_INF = V_NAN | (3U << 8),
-40039: 
-40039: 
-40039:   V_INF_DIV_INF = V_NAN | (4U << 8),
-40039: 
-40039: 
-40039:   V_INF_MOD = V_NAN | (5U << 8),
-40039: 
-40039: 
-40039:   V_INF_MUL_ZERO = V_NAN | (6U << 8),
-40039: 
-40039: 
-40039:   V_INF_SUB_INF = V_NAN | (7U << 8),
-40039: 
-40039: 
-40039:   V_MOD_ZERO = V_NAN | (8U << 8),
-40039: 
-40039: 
-40039:   V_SQRT_NEG = V_NAN | (9U << 8),
-40039: 
-40039: 
-40039:   V_UNKNOWN_NEG_OVERFLOW = V_NAN | (10U << 8),
-40039: 
-40039: 
-40039:   V_UNKNOWN_POS_OVERFLOW = V_NAN | (11U << 8),
-40039: 
-40039: 
-40039:   V_UNREPRESENTABLE = 1U << 7
-40039: 
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: Result operator&(Result x, Result y);
-40039: 
-40039: 
-40039: Result operator|(Result x, Result y);
-40039: 
-40039: 
-40039: Result operator-(Result x, Result y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: Result_Class result_class(Result r);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: Result_Relation result_relation(Result r);
-40039: 
-40039: 
-40039: Result result_relation_class(Result r);
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Result_inlines.hh" 1
-40039: # 27 "../../src/Result_inlines.hh"
-40039: # 1 "../../src/assertions.hh" 1
-40039: # 99 "../../src/assertions.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: # 110 "../../src/assertions.hh"
-40039: void ppl_unreachable() __attribute__((weak, noreturn));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: void ppl_unreachable_msg(const char* msg,
-40039:                          const char* file, unsigned int line,
-40039:                          const char* function) __attribute__((weak, noreturn));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: void ppl_assertion_failed(const char* assertion_text,
-40039:                           const char* file, unsigned int line,
-40039:                           const char* function) __attribute__((weak, noreturn));
-40039: # 143 "../../src/assertions.hh"
-40039: template <typename T>
-40039: bool copy_contains(T x_copy, T y_copy) {
-40039:   return x_copy.contains(y_copy);
-40039: }
-40039: 
-40039: }
-40039: # 28 "../../src/Result_inlines.hh" 2
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: inline Result
-40039: operator&(Result x, Result y) {
-40039:   const unsigned res = static_cast<unsigned>(x) & static_cast<unsigned>(y);
-40039:   return static_cast<Result>(res);
-40039: }
-40039: 
-40039: 
-40039: inline Result
-40039: operator|(Result x, Result y) {
-40039:   const unsigned res = static_cast<unsigned>(x) | static_cast<unsigned>(y);
-40039:   return static_cast<Result>(res);
-40039: }
-40039: 
-40039: 
-40039: inline Result
-40039: operator-(Result x, Result y) {
-40039:   const Result y_neg = static_cast<Result>(~static_cast<unsigned>(y));
-40039:   return x & y_neg;
-40039: }
-40039: 
-40039: 
-40039: inline Result_Class
-40039: result_class(Result r) {
-40039:   const Result rc = r & static_cast<Result>(VC_MASK);
-40039:   return static_cast<Result_Class>(rc);
-40039: }
-40039: 
-40039: 
-40039: inline Result_Relation
-40039: result_relation(Result r) {
-40039:   const Result rc = r & static_cast<Result>(VR_MASK);
-40039:   return static_cast<Result_Relation>(rc);
-40039: }
-40039: 
-40039: 
-40039: inline Result
-40039: result_relation_class(Result r) {
-40039:   return r & (static_cast<Result>(VR_MASK) | static_cast<Result>(VC_MASK));
-40039: }
-40039: 
-40039: inline int
-40039: result_overflow(Result r) {
-40039:   switch (result_class(r)) {
-40039:   case VC_NORMAL:
-40039:     switch (r) {
-40039:     case V_LT_INF:
-40039:       return -1;
-40039:     case V_GT_SUP:
-40039:       return 1;
-40039:     default:
-40039:       break;
-40039:     }
-40039:     break;
-40039:   case VC_MINUS_INFINITY:
-40039:     return -1;
-40039:   case VC_PLUS_INFINITY:
-40039:     return 1;
-40039:   default:
-40039:     break;
-40039:   }
-40039:   return 0;
-40039: }
-40039: 
-40039: inline bool
-40039: result_representable(Result r) {
-40039:   return (r & V_UNREPRESENTABLE) != V_UNREPRESENTABLE;
-40039: }
-40039: 
-40039: }
-40039: # 194 "../../src/Result_defs.hh" 2
-40039: # 28 "../../src/Rounding_Dir_defs.hh" 2
-40039: # 1 "../../src/fpu_defs.hh" 1
-40039: # 27 "../../src/fpu_defs.hh"
-40039: # 1 "../../src/fpu_types.hh" 1
-40039: # 20 "../../src/fpu_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: enum fpu_rounding_direction_type {};
-40039: enum fpu_rounding_control_word_type {};
-40039: 
-40039: }
-40039: # 28 "../../src/fpu_defs.hh" 2
-40039: # 1 "../../src/compiler.hh" 1
-40039: # 27 "../../src/compiler.hh"
-40039: # 1 "/usr/include/c++/8/cstddef" 1 3
-40039: # 42 "/usr/include/c++/8/cstddef" 3
-40039:        
-40039: # 43 "/usr/include/c++/8/cstddef" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
-40039: # 51 "/usr/include/c++/8/cstddef" 2 3
-40039: 
-40039: 
-40039: 
-40039: # 53 "/usr/include/c++/8/cstddef" 3
-40039: namespace std
-40039: {
-40039: 
-40039:   using ::max_align_t;
-40039: }
-40039: # 28 "../../src/compiler.hh" 2
-40039: # 1 "/usr/include/c++/8/climits" 1 3
-40039: # 39 "/usr/include/c++/8/climits" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/climits" 3
-40039: 
-40039: 
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 1 3 4
-40039: # 43 "/usr/include/c++/8/climits" 2 3
-40039: # 29 "../../src/compiler.hh" 2
-40039: # 1 "/usr/include/c++/8/cassert" 1 3
-40039: # 41 "/usr/include/c++/8/cassert" 3
-40039:        
-40039: # 42 "/usr/include/c++/8/cassert" 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/assert.h" 1 3 4
-40039: # 44 "/usr/include/c++/8/cassert" 2 3
-40039: # 30 "../../src/compiler.hh" 2
-40039: 
-40039: 
-40039: # 31 "../../src/compiler.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: # 47 "../../src/compiler.hh"
-40039: template <typename T>
-40039: inline void
-40039: PPL_CC_FLUSH(const T& x) {
-40039: 
-40039:   __asm__ __volatile__ ("" : "+m" (const_cast<T&>(x)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 67 "../../src/compiler.hh"
-40039: template <typename T>
-40039: struct Suppress_Uninitialized_Warnings_Type {
-40039:   typedef T synonym;
-40039: };
-40039: # 142 "../../src/compiler.hh"
-40039: inline unsigned int
-40039: clz(unsigned int u) {
-40039:   
-40039: # 144 "../../src/compiler.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 144 "../../src/compiler.hh"
-40039:                ;
-40039: 
-40039:   return static_cast<unsigned int>(__builtin_clz(u));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: inline unsigned int
-40039: clz(unsigned long ul) {
-40039:   
-40039: # 158 "../../src/compiler.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 158 "../../src/compiler.hh"
-40039:                 ;
-40039: 
-40039:   return static_cast<unsigned int>(__builtin_clzl(ul));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: inline unsigned int
-40039: clz(unsigned long long ull) {
-40039:   
-40039: # 172 "../../src/compiler.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 172 "../../src/compiler.hh"
-40039:                  ;
-40039: 
-40039:   return static_cast<unsigned int>(__builtin_clzll(ull));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: 
-40039: inline unsigned int
-40039: ctz(unsigned int u) {
-40039:   
-40039: # 187 "../../src/compiler.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 187 "../../src/compiler.hh"
-40039:                ;
-40039: 
-40039:   return static_cast<unsigned int>(__builtin_ctz(u));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: inline unsigned int
-40039: ctz(unsigned long ul) {
-40039:   
-40039: # 201 "../../src/compiler.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 201 "../../src/compiler.hh"
-40039:                 ;
-40039: 
-40039:   return static_cast<unsigned int>(__builtin_ctzl(ul));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: inline unsigned int
-40039: ctz(unsigned long long ull) {
-40039:   
-40039: # 215 "../../src/compiler.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 215 "../../src/compiler.hh"
-40039:                  ;
-40039: 
-40039:   return static_cast<unsigned int>(__builtin_ctzll(ull));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 29 "../../src/fpu_defs.hh" 2
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: void
-40039: fpu_initialize_control_functions();
-40039: 
-40039: 
-40039: fpu_rounding_direction_type
-40039: fpu_get_rounding_direction();
-40039: 
-40039: 
-40039: void
-40039: fpu_set_rounding_direction(fpu_rounding_direction_type dir);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: fpu_rounding_control_word_type
-40039: fpu_save_rounding_direction(fpu_rounding_direction_type dir);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: fpu_rounding_control_word_type
-40039: fpu_save_rounding_direction_reset_inexact(fpu_rounding_direction_type dir);
-40039: 
-40039: 
-40039: void
-40039: fpu_restore_rounding_direction(fpu_rounding_control_word_type w);
-40039: 
-40039: 
-40039: void
-40039: fpu_reset_inexact();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: int
-40039: fpu_check_inexact();
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 93 "../../src/fpu_defs.hh"
-40039: # 1 "../../src/fpu-c99_inlines.hh" 1
-40039: # 28 "../../src/fpu-c99_inlines.hh"
-40039: # 1 "/usr/include/c++/8/fenv.h" 1 3
-40039: # 32 "/usr/include/c++/8/fenv.h" 3
-40039:        
-40039: # 33 "/usr/include/c++/8/fenv.h" 3
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/fenv.h" 1 3 4
-40039: # 26 "/usr/include/fenv.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 1 3 4
-40039: # 27 "/usr/include/fenv.h" 2 3 4
-40039: # 64 "/usr/include/fenv.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/fenv.h" 1 3 4
-40039: # 24 "/usr/include/x86_64-linux-gnu/bits/fenv.h" 3 4
-40039: 
-40039: # 24 "/usr/include/x86_64-linux-gnu/bits/fenv.h" 3 4
-40039: enum
-40039:   {
-40039:     FE_INVALID =
-40039: 
-40039:       0x01,
-40039:     __FE_DENORM = 0x02,
-40039:     FE_DIVBYZERO =
-40039: 
-40039:       0x04,
-40039:     FE_OVERFLOW =
-40039: 
-40039:       0x08,
-40039:     FE_UNDERFLOW =
-40039: 
-40039:       0x10,
-40039:     FE_INEXACT =
-40039: 
-40039:       0x20
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: enum
-40039:   {
-40039:     FE_TONEAREST =
-40039: 
-40039:       0,
-40039:     FE_DOWNWARD =
-40039: 
-40039:       0x400,
-40039:     FE_UPWARD =
-40039: 
-40039:       0x800,
-40039:     FE_TOWARDZERO =
-40039: 
-40039:       0xc00
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: typedef unsigned short int fexcept_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef struct
-40039:   {
-40039:     unsigned short int __control_word;
-40039:     unsigned short int __glibc_reserved1;
-40039:     unsigned short int __status_word;
-40039:     unsigned short int __glibc_reserved2;
-40039:     unsigned short int __tags;
-40039:     unsigned short int __glibc_reserved3;
-40039:     unsigned int __eip;
-40039:     unsigned short int __cs_selector;
-40039:     unsigned int __opcode:11;
-40039:     unsigned int __glibc_reserved4:5;
-40039:     unsigned int __data_offset;
-40039:     unsigned short int __data_selector;
-40039:     unsigned short int __glibc_reserved5;
-40039: 
-40039:     unsigned int __mxcsr;
-40039: 
-40039:   }
-40039: fenv_t;
-40039: # 106 "/usr/include/x86_64-linux-gnu/bits/fenv.h" 3 4
-40039: typedef struct
-40039:   {
-40039:     unsigned short int __control_word;
-40039:     unsigned short int __glibc_reserved;
-40039:     unsigned int __mxcsr;
-40039:   }
-40039: femode_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern "C" {
-40039: 
-40039: 
-40039: 
-40039: extern int __feraiseexcept_renamed (int) throw () __asm__ ("" "feraiseexcept");
-40039: 
-40039: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) void
-40039: __attribute__ ((__leaf__)) __feraiseexcept_invalid_divbyzero (int __excepts) throw ()
-40039: {
-40039:   if ((0x01 & __excepts) != 0)
-40039:     {
-40039: 
-40039:       float __f = 0.0;
-40039: 
-40039: 
-40039:       __asm__ __volatile__ ("divss %0, %0 " : : "x" (__f));
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       (void) &__f;
-40039:     }
-40039:   if ((0x04 & __excepts) != 0)
-40039:     {
-40039:       float __f = 1.0;
-40039:       float __g = 0.0;
-40039: 
-40039: 
-40039:       __asm__ __volatile__ ("divss %1, %0" : : "x" (__f), "x" (__g));
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       (void) &__f;
-40039:     }
-40039: }
-40039: extern __inline __attribute__ ((__gnu_inline__)) int
-40039: __attribute__ ((__leaf__)) feraiseexcept (int __excepts) throw ()
-40039: {
-40039:   if (__builtin_constant_p (__excepts)
-40039:       && (__excepts & ~(0x01 | 0x04)) == 0)
-40039:     {
-40039:       __feraiseexcept_invalid_divbyzero (__excepts);
-40039:       return 0;
-40039:     }
-40039: 
-40039:   return __feraiseexcept_renamed (__excepts);
-40039: }
-40039: 
-40039: }
-40039: # 65 "/usr/include/fenv.h" 2 3 4
-40039: 
-40039: extern "C" {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int feclearexcept (int __excepts) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int fegetexceptflag (fexcept_t *__flagp, int __excepts) throw ();
-40039: 
-40039: 
-40039: extern int feraiseexcept (int __excepts) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int fesetexcept (int __excepts) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int fesetexceptflag (const fexcept_t *__flagp, int __excepts) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int fetestexcept (int __excepts) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int fetestexceptflag (const fexcept_t *__flagp, int __excepts) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int fegetround (void) throw () __attribute__ ((__pure__));
-40039: 
-40039: 
-40039: extern int fesetround (int __rounding_direction) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int fegetenv (fenv_t *__envp) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int feholdexcept (fenv_t *__envp) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int fesetenv (const fenv_t *__envp) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int feupdateenv (const fenv_t *__envp) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int fegetmode (femode_t *__modep) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int fesetmode (const femode_t *__modep) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/fenvinline.h" 1 3 4
-40039: # 146 "/usr/include/fenv.h" 2 3 4
-40039: # 161 "/usr/include/fenv.h" 3 4
-40039: extern int feenableexcept (int __excepts) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int fedisableexcept (int __excepts) throw ();
-40039: 
-40039: 
-40039: extern int fegetexcept (void) throw ();
-40039: 
-40039: 
-40039: }
-40039: # 37 "/usr/include/c++/8/fenv.h" 2 3
-40039: # 55 "/usr/include/c++/8/fenv.h" 3
-40039: namespace std
-40039: {
-40039: 
-40039:   using ::fenv_t;
-40039:   using ::fexcept_t;
-40039: 
-40039: 
-40039:   using ::feclearexcept;
-40039:   using ::fegetexceptflag;
-40039:   using ::feraiseexcept;
-40039:   using ::fesetexceptflag;
-40039:   using ::fetestexcept;
-40039: 
-40039:   using ::fegetround;
-40039:   using ::fesetround;
-40039: 
-40039:   using ::fegetenv;
-40039:   using ::feholdexcept;
-40039:   using ::fesetenv;
-40039:   using ::feupdateenv;
-40039: }
-40039: # 29 "../../src/fpu-c99_inlines.hh" 2
-40039: # 44 "../../src/fpu-c99_inlines.hh"
-40039: 
-40039: # 44 "../../src/fpu-c99_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline void
-40039: fpu_initialize_control_functions() {
-40039:   const int old = fegetround();
-40039:   if (fesetround(
-40039: # 49 "../../src/fpu-c99_inlines.hh" 3 4
-40039:                 0x400
-40039: # 49 "../../src/fpu-c99_inlines.hh"
-40039:                                 ) != 0
-40039:       || fesetround(
-40039: # 50 "../../src/fpu-c99_inlines.hh" 3 4
-40039:                    0x800
-40039: # 50 "../../src/fpu-c99_inlines.hh"
-40039:                                  ) != 0
-40039:       || fesetround(old) != 0) {
-40039:     throw std::logic_error("PPL configuration error:"
-40039:                            " PPL_CAN_CONTROL_FPU evaluates to true,"
-40039:                            " but fesetround() returns nonzero.");
-40039:   }
-40039: }
-40039: 
-40039: inline fpu_rounding_direction_type
-40039: fpu_get_rounding_direction() {
-40039:   return static_cast<fpu_rounding_direction_type>(fegetround());
-40039: }
-40039: 
-40039: inline void
-40039: fpu_set_rounding_direction(fpu_rounding_direction_type dir) {
-40039:   fesetround(dir);
-40039: }
-40039: 
-40039: inline fpu_rounding_control_word_type
-40039: fpu_save_rounding_direction(fpu_rounding_direction_type dir) {
-40039:   const fpu_rounding_control_word_type old
-40039:     = static_cast<fpu_rounding_control_word_type>(fegetround());
-40039:   fesetround(dir);
-40039:   return old;
-40039: }
-40039: 
-40039: inline void
-40039: fpu_reset_inexact() {
-40039: 
-40039:   feclearexcept(
-40039: # 79 "../../src/fpu-c99_inlines.hh" 3 4
-40039:                0x20
-40039: # 79 "../../src/fpu-c99_inlines.hh"
-40039:                          );
-40039: 
-40039: }
-40039: 
-40039: inline void
-40039: fpu_restore_rounding_direction(fpu_rounding_control_word_type w) {
-40039:   fesetround(w);
-40039: }
-40039: 
-40039: inline int
-40039: fpu_check_inexact() {
-40039: 
-40039:   return fetestexcept(
-40039: # 91 "../../src/fpu-c99_inlines.hh" 3 4
-40039:                      0x20
-40039: # 91 "../../src/fpu-c99_inlines.hh"
-40039:                                ) != 0 ? 1 : 0;
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 94 "../../src/fpu_defs.hh" 2
-40039: # 29 "../../src/Rounding_Dir_defs.hh" 2
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: enum Rounding_Dir {
-40039: 
-40039: 
-40039: 
-40039:   ROUND_DOWN = 0U,
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   ROUND_UP = 1U,
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   ROUND_IGNORE = 6U,
-40039:   ROUND_NATIVE = ROUND_IGNORE,
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   ROUND_NOT_NEEDED = 7U,
-40039: 
-40039:   ROUND_DIRECT = ROUND_UP,
-40039:   ROUND_INVERSE = ROUND_DOWN,
-40039: 
-40039:   ROUND_DIR_MASK = 7U,
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   ROUND_STRICT_RELATION = 8U,
-40039: 
-40039:   ROUND_CHECK = ROUND_DIRECT | ROUND_STRICT_RELATION
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: Rounding_Dir operator&(Rounding_Dir x, Rounding_Dir y);
-40039: 
-40039: 
-40039: Rounding_Dir operator|(Rounding_Dir x, Rounding_Dir y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: Rounding_Dir inverse(Rounding_Dir dir);
-40039: 
-40039: 
-40039: Rounding_Dir round_dir(Rounding_Dir dir);
-40039: 
-40039: 
-40039: bool round_down(Rounding_Dir dir);
-40039: 
-40039: 
-40039: bool round_up(Rounding_Dir dir);
-40039: 
-40039: 
-40039: bool round_ignore(Rounding_Dir dir);
-40039: 
-40039: 
-40039: bool round_not_needed(Rounding_Dir dir);
-40039: 
-40039: 
-40039: bool round_not_requested(Rounding_Dir dir);
-40039: 
-40039: 
-40039: bool round_direct(Rounding_Dir dir);
-40039: 
-40039: 
-40039: bool round_inverse(Rounding_Dir dir);
-40039: 
-40039: 
-40039: bool round_strict_relation(Rounding_Dir dir);
-40039: 
-40039: 
-40039: fpu_rounding_direction_type round_fpu_dir(Rounding_Dir dir);
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Rounding_Dir_inlines.hh" 1
-40039: # 29 "../../src/Rounding_Dir_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: inline Rounding_Dir
-40039: operator&(Rounding_Dir x, Rounding_Dir y) {
-40039:   const unsigned res = static_cast<unsigned>(x) & static_cast<unsigned>(y);
-40039:   return static_cast<Rounding_Dir>(res);
-40039: }
-40039: 
-40039: 
-40039: inline Rounding_Dir
-40039: operator|(Rounding_Dir x, Rounding_Dir y) {
-40039:   const unsigned res = static_cast<unsigned>(x) | static_cast<unsigned>(y);
-40039:   return static_cast<Rounding_Dir>(res);
-40039: }
-40039: 
-40039: 
-40039: inline Rounding_Dir
-40039: round_dir(Rounding_Dir dir) {
-40039:   return dir & ROUND_DIR_MASK;
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: round_down(Rounding_Dir dir) {
-40039:   return round_dir(dir) == ROUND_DOWN;
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: round_up(Rounding_Dir dir) {
-40039:   return round_dir(dir) == ROUND_UP;
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: round_ignore(Rounding_Dir dir) {
-40039:   return round_dir(dir) == ROUND_IGNORE;
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: round_not_needed(Rounding_Dir dir) {
-40039:   return round_dir(dir) == ROUND_NOT_NEEDED;
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: round_not_requested(Rounding_Dir dir) {
-40039:   return round_dir(dir) == ROUND_IGNORE || round_dir(dir) == ROUND_NOT_NEEDED;
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: round_direct(Rounding_Dir dir) {
-40039:   return round_dir(dir) == ROUND_DIRECT;
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: round_inverse(Rounding_Dir dir) {
-40039:   return round_dir(dir) == ROUND_INVERSE;
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: round_strict_relation(Rounding_Dir dir) {
-40039:   return (dir & ROUND_STRICT_RELATION) == ROUND_STRICT_RELATION;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: inline fpu_rounding_direction_type
-40039: round_fpu_dir(Rounding_Dir dir) {
-40039:   switch (round_dir(dir)) {
-40039:   case ROUND_UP:
-40039:     return static_cast<fpu_rounding_direction_type>(
-40039: # 106 "../../src/Rounding_Dir_inlines.hh" 3 4
-40039:                                                    0x800
-40039: # 106 "../../src/Rounding_Dir_inlines.hh"
-40039:                                                                  );
-40039:   case ROUND_DOWN:
-40039:     return static_cast<fpu_rounding_direction_type>(
-40039: # 108 "../../src/Rounding_Dir_inlines.hh" 3 4
-40039:                                                    0x400
-40039: # 108 "../../src/Rounding_Dir_inlines.hh"
-40039:                                                                    );
-40039:   case ROUND_IGNORE:
-40039:   default:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return static_cast<fpu_rounding_direction_type>(
-40039: # 112 "../../src/Rounding_Dir_inlines.hh" 3 4
-40039:                                                    0x800
-40039: # 112 "../../src/Rounding_Dir_inlines.hh"
-40039:                                                                  );
-40039:   }
-40039: }
-40039: # 124 "../../src/Rounding_Dir_inlines.hh"
-40039: inline Rounding_Dir
-40039: inverse(Rounding_Dir dir) {
-40039:   switch (round_dir(dir)) {
-40039:   case ROUND_UP:
-40039:     return ROUND_DOWN | (dir & ROUND_STRICT_RELATION);
-40039:   case ROUND_DOWN:
-40039:     return ROUND_UP | (dir & ROUND_STRICT_RELATION);
-40039:   case ROUND_IGNORE:
-40039:     return dir;
-40039:   default:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return dir;
-40039:   }
-40039: }
-40039: 
-40039: }
-40039: # 122 "../../src/Rounding_Dir_defs.hh" 2
-40039: # 30 "../../src/checked_defs.hh" 2
-40039: # 1 "../../src/Numeric_Format_defs.hh" 1
-40039: # 30 "../../src/Numeric_Format_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Numeric_Format {
-40039: };
-40039: 
-40039: }
-40039: # 31 "../../src/checked_defs.hh" 2
-40039: # 1 "../../src/Float_defs.hh" 1
-40039: # 27 "../../src/Float_defs.hh"
-40039: # 1 "../../src/globals_types.hh" 1
-40039: # 18 "../../src/globals_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: typedef size_t dimension_type;
-40039: 
-40039: 
-40039: 
-40039: typedef size_t memory_size_type;
-40039: 
-40039: 
-40039: 
-40039: enum Degenerate_Element {
-40039: 
-40039:   UNIVERSE,
-40039: 
-40039:   EMPTY
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: enum Relation_Symbol {
-40039: 
-40039:   EQUAL = 1U,
-40039: 
-40039:   LESS_THAN = 2U,
-40039: 
-40039:   LESS_OR_EQUAL = LESS_THAN | EQUAL,
-40039: 
-40039:   GREATER_THAN = 4U,
-40039: 
-40039:   GREATER_OR_EQUAL = GREATER_THAN | EQUAL,
-40039: 
-40039:   NOT_EQUAL = LESS_THAN | GREATER_THAN
-40039: };
-40039: 
-40039: 
-40039: 
-40039: enum Complexity_Class {
-40039: 
-40039:   POLYNOMIAL_COMPLEXITY,
-40039: 
-40039:   SIMPLEX_COMPLEXITY,
-40039: 
-40039:   ANY_COMPLEXITY
-40039: };
-40039: 
-40039: 
-40039: 
-40039: enum Optimization_Mode {
-40039: 
-40039:   MINIMIZATION,
-40039: 
-40039:   MAXIMIZATION
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: enum Bounded_Integer_Type_Width {
-40039: 
-40039:   BITS_8 = 8,
-40039: 
-40039: 
-40039:   BITS_16 = 16,
-40039: 
-40039: 
-40039:   BITS_32 = 32,
-40039: 
-40039: 
-40039:   BITS_64 = 64,
-40039: 
-40039: 
-40039:   BITS_128 = 128
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: enum Bounded_Integer_Type_Representation {
-40039: 
-40039:   UNSIGNED,
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   SIGNED_2_COMPLEMENT
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: enum Bounded_Integer_Type_Overflow {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   OVERFLOW_WRAPS,
-40039: # 143 "../../src/globals_types.hh"
-40039:   OVERFLOW_UNDEFINED,
-40039: # 153 "../../src/globals_types.hh"
-40039:   OVERFLOW_IMPOSSIBLE
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: enum Representation {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   DENSE,
-40039: # 177 "../../src/globals_types.hh"
-40039:   SPARSE
-40039: };
-40039: # 187 "../../src/globals_types.hh"
-40039: enum Floating_Point_Format {
-40039: 
-40039:   IEEE754_HALF,
-40039: 
-40039: 
-40039:   IEEE754_SINGLE,
-40039: 
-40039: 
-40039:   IEEE754_DOUBLE,
-40039: 
-40039: 
-40039:   IEEE754_QUAD,
-40039: 
-40039: 
-40039:   INTEL_DOUBLE_EXTENDED,
-40039: 
-40039: 
-40039:   IBM_SINGLE,
-40039: 
-40039: 
-40039:   IBM_DOUBLE
-40039: };
-40039: 
-40039: struct Weightwatch_Traits;
-40039: 
-40039: }
-40039: # 28 "../../src/Float_defs.hh" 2
-40039: 
-40039: 
-40039: # 1 "../../src/Concrete_Expression_types.hh" 1
-40039: # 16 "../../src/Concrete_Expression_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: # 27 "../../src/Concrete_Expression_types.hh"
-40039: template <typename Target>
-40039: class Concrete_Expression;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Target>
-40039: class Binary_Operator;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Target>
-40039: class Unary_Operator;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Target>
-40039: class Cast_Operator;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Target>
-40039: class Integer_Constant;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Target>
-40039: class Floating_Point_Constant;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Target>
-40039: class Approximable_Reference;
-40039: 
-40039: class Concrete_Expression_Type;
-40039: # 78 "../../src/Concrete_Expression_types.hh"
-40039: typedef int Concrete_Expression_Kind;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef int Concrete_Expression_BOP;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef int Concrete_Expression_UOP;
-40039: 
-40039: }
-40039: # 31 "../../src/Float_defs.hh" 2
-40039: # 1 "../../src/Variable_types.hh" 1
-40039: # 16 "../../src/Variable_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Variable;
-40039: 
-40039: }
-40039: # 32 "../../src/Float_defs.hh" 2
-40039: # 1 "../../src/Linear_Form_types.hh" 1
-40039: # 16 "../../src/Linear_Form_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename C>
-40039: class Linear_Form;
-40039: 
-40039: }
-40039: # 33 "../../src/Float_defs.hh" 2
-40039: # 1 "/usr/include/c++/8/set" 1 3
-40039: # 58 "/usr/include/c++/8/set" 3
-40039:        
-40039: # 59 "/usr/include/c++/8/set" 3
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/stl_tree.h" 1 3
-40039: # 61 "/usr/include/c++/8/bits/stl_tree.h" 3
-40039:        
-40039: # 62 "/usr/include/c++/8/bits/stl_tree.h" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/ext/aligned_buffer.h" 1 3
-40039: # 32 "/usr/include/c++/8/ext/aligned_buffer.h" 3
-40039:        
-40039: # 33 "/usr/include/c++/8/ext/aligned_buffer.h" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 40 "/usr/include/c++/8/ext/aligned_buffer.h" 3
-40039: namespace __gnu_cxx
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __aligned_membuf
-40039:     {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       struct _Tp2 { _Tp _M_t; };
-40039: 
-40039:       alignas(__alignof__(_Tp2::_M_t)) unsigned char _M_storage[sizeof(_Tp)];
-40039: 
-40039:       __aligned_membuf() = default;
-40039: 
-40039: 
-40039:       __aligned_membuf(std::nullptr_t) { }
-40039: 
-40039:       void*
-40039:       _M_addr() noexcept
-40039:       { return static_cast<void*>(&_M_storage); }
-40039: 
-40039:       const void*
-40039:       _M_addr() const noexcept
-40039:       { return static_cast<const void*>(&_M_storage); }
-40039: 
-40039:       _Tp*
-40039:       _M_ptr() noexcept
-40039:       { return static_cast<_Tp*>(_M_addr()); }
-40039: 
-40039:       const _Tp*
-40039:       _M_ptr() const noexcept
-40039:       { return static_cast<const _Tp*>(_M_addr()); }
-40039:     };
-40039: # 89 "/usr/include/c++/8/ext/aligned_buffer.h" 3
-40039:   template<typename _Tp>
-40039:     struct __aligned_buffer
-40039:     : std::aligned_storage<sizeof(_Tp), __alignof__(_Tp)>
-40039:     {
-40039:       typename
-40039:  std::aligned_storage<sizeof(_Tp), __alignof__(_Tp)>::type _M_storage;
-40039: 
-40039:       __aligned_buffer() = default;
-40039: 
-40039: 
-40039:       __aligned_buffer(std::nullptr_t) { }
-40039: 
-40039:       void*
-40039:       _M_addr() noexcept
-40039:       {
-40039:         return static_cast<void*>(&_M_storage);
-40039:       }
-40039: 
-40039:       const void*
-40039:       _M_addr() const noexcept
-40039:       {
-40039:         return static_cast<const void*>(&_M_storage);
-40039:       }
-40039: 
-40039:       _Tp*
-40039:       _M_ptr() noexcept
-40039:       { return static_cast<_Tp*>(_M_addr()); }
-40039: 
-40039:       const _Tp*
-40039:       _M_ptr() const noexcept
-40039:       { return static_cast<const _Tp*>(_M_addr()); }
-40039:     };
-40039: 
-40039: 
-40039: }
-40039: # 70 "/usr/include/c++/8/bits/stl_tree.h" 2 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 99 "/usr/include/c++/8/bits/stl_tree.h" 3
-40039:   enum _Rb_tree_color { _S_red = false, _S_black = true };
-40039: 
-40039:   struct _Rb_tree_node_base
-40039:   {
-40039:     typedef _Rb_tree_node_base* _Base_ptr;
-40039:     typedef const _Rb_tree_node_base* _Const_Base_ptr;
-40039: 
-40039:     _Rb_tree_color _M_color;
-40039:     _Base_ptr _M_parent;
-40039:     _Base_ptr _M_left;
-40039:     _Base_ptr _M_right;
-40039: 
-40039:     static _Base_ptr
-40039:     _S_minimum(_Base_ptr __x) noexcept
-40039:     {
-40039:       while (__x->_M_left != 0) __x = __x->_M_left;
-40039:       return __x;
-40039:     }
-40039: 
-40039:     static _Const_Base_ptr
-40039:     _S_minimum(_Const_Base_ptr __x) noexcept
-40039:     {
-40039:       while (__x->_M_left != 0) __x = __x->_M_left;
-40039:       return __x;
-40039:     }
-40039: 
-40039:     static _Base_ptr
-40039:     _S_maximum(_Base_ptr __x) noexcept
-40039:     {
-40039:       while (__x->_M_right != 0) __x = __x->_M_right;
-40039:       return __x;
-40039:     }
-40039: 
-40039:     static _Const_Base_ptr
-40039:     _S_maximum(_Const_Base_ptr __x) noexcept
-40039:     {
-40039:       while (__x->_M_right != 0) __x = __x->_M_right;
-40039:       return __x;
-40039:     }
-40039:   };
-40039: 
-40039: 
-40039:   template<typename _Key_compare>
-40039:     struct _Rb_tree_key_compare
-40039:     {
-40039:       _Key_compare _M_key_compare;
-40039: 
-40039:       _Rb_tree_key_compare()
-40039:       noexcept(is_nothrow_default_constructible<_Key_compare>::value)
-40039: 
-40039:       : _M_key_compare()
-40039:       { }
-40039: 
-40039:       _Rb_tree_key_compare(const _Key_compare& __comp)
-40039:       : _M_key_compare(__comp)
-40039:       { }
-40039: 
-40039: 
-40039: 
-40039:       _Rb_tree_key_compare(const _Rb_tree_key_compare&) = default;
-40039: 
-40039:       _Rb_tree_key_compare(_Rb_tree_key_compare&& __x)
-40039:  noexcept(is_nothrow_copy_constructible<_Key_compare>::value)
-40039:       : _M_key_compare(__x._M_key_compare)
-40039:       { }
-40039: 
-40039:     };
-40039: 
-40039: 
-40039:   struct _Rb_tree_header
-40039:   {
-40039:     _Rb_tree_node_base _M_header;
-40039:     size_t _M_node_count;
-40039: 
-40039:     _Rb_tree_header() noexcept
-40039:     {
-40039:       _M_header._M_color = _S_red;
-40039:       _M_reset();
-40039:     }
-40039: 
-40039: 
-40039:     _Rb_tree_header(_Rb_tree_header&& __x) noexcept
-40039:     {
-40039:       if (__x._M_header._M_parent != nullptr)
-40039:  _M_move_data(__x);
-40039:       else
-40039:  {
-40039:    _M_header._M_color = _S_red;
-40039:    _M_reset();
-40039:  }
-40039:     }
-40039: 
-40039: 
-40039:     void
-40039:     _M_move_data(_Rb_tree_header& __from)
-40039:     {
-40039:       _M_header._M_color = __from._M_header._M_color;
-40039:       _M_header._M_parent = __from._M_header._M_parent;
-40039:       _M_header._M_left = __from._M_header._M_left;
-40039:       _M_header._M_right = __from._M_header._M_right;
-40039:       _M_header._M_parent->_M_parent = &_M_header;
-40039:       _M_node_count = __from._M_node_count;
-40039: 
-40039:       __from._M_reset();
-40039:     }
-40039: 
-40039:     void
-40039:     _M_reset()
-40039:     {
-40039:       _M_header._M_parent = 0;
-40039:       _M_header._M_left = &_M_header;
-40039:       _M_header._M_right = &_M_header;
-40039:       _M_node_count = 0;
-40039:     }
-40039:   };
-40039: 
-40039:   template<typename _Val>
-40039:     struct _Rb_tree_node : public _Rb_tree_node_base
-40039:     {
-40039:       typedef _Rb_tree_node<_Val>* _Link_type;
-40039: # 231 "/usr/include/c++/8/bits/stl_tree.h" 3
-40039:       __gnu_cxx::__aligned_membuf<_Val> _M_storage;
-40039: 
-40039:       _Val*
-40039:       _M_valptr()
-40039:       { return _M_storage._M_ptr(); }
-40039: 
-40039:       const _Val*
-40039:       _M_valptr() const
-40039:       { return _M_storage._M_ptr(); }
-40039: 
-40039:     };
-40039: 
-40039:   __attribute__ ((__pure__)) _Rb_tree_node_base*
-40039:   _Rb_tree_increment(_Rb_tree_node_base* __x) throw ();
-40039: 
-40039:   __attribute__ ((__pure__)) const _Rb_tree_node_base*
-40039:   _Rb_tree_increment(const _Rb_tree_node_base* __x) throw ();
-40039: 
-40039:   __attribute__ ((__pure__)) _Rb_tree_node_base*
-40039:   _Rb_tree_decrement(_Rb_tree_node_base* __x) throw ();
-40039: 
-40039:   __attribute__ ((__pure__)) const _Rb_tree_node_base*
-40039:   _Rb_tree_decrement(const _Rb_tree_node_base* __x) throw ();
-40039: 
-40039:   template<typename _Tp>
-40039:     struct _Rb_tree_iterator
-40039:     {
-40039:       typedef _Tp value_type;
-40039:       typedef _Tp& reference;
-40039:       typedef _Tp* pointer;
-40039: 
-40039:       typedef bidirectional_iterator_tag iterator_category;
-40039:       typedef ptrdiff_t difference_type;
-40039: 
-40039:       typedef _Rb_tree_iterator<_Tp> _Self;
-40039:       typedef _Rb_tree_node_base::_Base_ptr _Base_ptr;
-40039:       typedef _Rb_tree_node<_Tp>* _Link_type;
-40039: 
-40039:       _Rb_tree_iterator() noexcept
-40039:       : _M_node() { }
-40039: 
-40039:       explicit
-40039:       _Rb_tree_iterator(_Base_ptr __x) noexcept
-40039:       : _M_node(__x) { }
-40039: 
-40039:       reference
-40039:       operator*() const noexcept
-40039:       { return *static_cast<_Link_type>(_M_node)->_M_valptr(); }
-40039: 
-40039:       pointer
-40039:       operator->() const noexcept
-40039:       { return static_cast<_Link_type> (_M_node)->_M_valptr(); }
-40039: 
-40039:       _Self&
-40039:       operator++() noexcept
-40039:       {
-40039:  _M_node = _Rb_tree_increment(_M_node);
-40039:  return *this;
-40039:       }
-40039: 
-40039:       _Self
-40039:       operator++(int) noexcept
-40039:       {
-40039:  _Self __tmp = *this;
-40039:  _M_node = _Rb_tree_increment(_M_node);
-40039:  return __tmp;
-40039:       }
-40039: 
-40039:       _Self&
-40039:       operator--() noexcept
-40039:       {
-40039:  _M_node = _Rb_tree_decrement(_M_node);
-40039:  return *this;
-40039:       }
-40039: 
-40039:       _Self
-40039:       operator--(int) noexcept
-40039:       {
-40039:  _Self __tmp = *this;
-40039:  _M_node = _Rb_tree_decrement(_M_node);
-40039:  return __tmp;
-40039:       }
-40039: 
-40039:       bool
-40039:       operator==(const _Self& __x) const noexcept
-40039:       { return _M_node == __x._M_node; }
-40039: 
-40039:       bool
-40039:       operator!=(const _Self& __x) const noexcept
-40039:       { return _M_node != __x._M_node; }
-40039: 
-40039:       _Base_ptr _M_node;
-40039:   };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct _Rb_tree_const_iterator
-40039:     {
-40039:       typedef _Tp value_type;
-40039:       typedef const _Tp& reference;
-40039:       typedef const _Tp* pointer;
-40039: 
-40039:       typedef _Rb_tree_iterator<_Tp> iterator;
-40039: 
-40039:       typedef bidirectional_iterator_tag iterator_category;
-40039:       typedef ptrdiff_t difference_type;
-40039: 
-40039:       typedef _Rb_tree_const_iterator<_Tp> _Self;
-40039:       typedef _Rb_tree_node_base::_Const_Base_ptr _Base_ptr;
-40039:       typedef const _Rb_tree_node<_Tp>* _Link_type;
-40039: 
-40039:       _Rb_tree_const_iterator() noexcept
-40039:       : _M_node() { }
-40039: 
-40039:       explicit
-40039:       _Rb_tree_const_iterator(_Base_ptr __x) noexcept
-40039:       : _M_node(__x) { }
-40039: 
-40039:       _Rb_tree_const_iterator(const iterator& __it) noexcept
-40039:       : _M_node(__it._M_node) { }
-40039: 
-40039:       iterator
-40039:       _M_const_cast() const noexcept
-40039:       { return iterator(const_cast<typename iterator::_Base_ptr>(_M_node)); }
-40039: 
-40039:       reference
-40039:       operator*() const noexcept
-40039:       { return *static_cast<_Link_type>(_M_node)->_M_valptr(); }
-40039: 
-40039:       pointer
-40039:       operator->() const noexcept
-40039:       { return static_cast<_Link_type>(_M_node)->_M_valptr(); }
-40039: 
-40039:       _Self&
-40039:       operator++() noexcept
-40039:       {
-40039:  _M_node = _Rb_tree_increment(_M_node);
-40039:  return *this;
-40039:       }
-40039: 
-40039:       _Self
-40039:       operator++(int) noexcept
-40039:       {
-40039:  _Self __tmp = *this;
-40039:  _M_node = _Rb_tree_increment(_M_node);
-40039:  return __tmp;
-40039:       }
-40039: 
-40039:       _Self&
-40039:       operator--() noexcept
-40039:       {
-40039:  _M_node = _Rb_tree_decrement(_M_node);
-40039:  return *this;
-40039:       }
-40039: 
-40039:       _Self
-40039:       operator--(int) noexcept
-40039:       {
-40039:  _Self __tmp = *this;
-40039:  _M_node = _Rb_tree_decrement(_M_node);
-40039:  return __tmp;
-40039:       }
-40039: 
-40039:       bool
-40039:       operator==(const _Self& __x) const noexcept
-40039:       { return _M_node == __x._M_node; }
-40039: 
-40039:       bool
-40039:       operator!=(const _Self& __x) const noexcept
-40039:       { return _M_node != __x._M_node; }
-40039: 
-40039:       _Base_ptr _M_node;
-40039:     };
-40039: 
-40039:   template<typename _Val>
-40039:     inline bool
-40039:     operator==(const _Rb_tree_iterator<_Val>& __x,
-40039:         const _Rb_tree_const_iterator<_Val>& __y) noexcept
-40039:     { return __x._M_node == __y._M_node; }
-40039: 
-40039:   template<typename _Val>
-40039:     inline bool
-40039:     operator!=(const _Rb_tree_iterator<_Val>& __x,
-40039:         const _Rb_tree_const_iterator<_Val>& __y) noexcept
-40039:     { return __x._M_node != __y._M_node; }
-40039: 
-40039:   void
-40039:   _Rb_tree_insert_and_rebalance(const bool __insert_left,
-40039:     _Rb_tree_node_base* __x,
-40039:     _Rb_tree_node_base* __p,
-40039:     _Rb_tree_node_base& __header) throw ();
-40039: 
-40039:   _Rb_tree_node_base*
-40039:   _Rb_tree_rebalance_for_erase(_Rb_tree_node_base* const __z,
-40039:           _Rb_tree_node_base& __header) throw ();
-40039: 
-40039: 
-40039:   template<typename _Cmp, typename _SfinaeType, typename = __void_t<>>
-40039:     struct __has_is_transparent
-40039:     { };
-40039: 
-40039:   template<typename _Cmp, typename _SfinaeType>
-40039:     struct __has_is_transparent<_Cmp, _SfinaeType,
-40039:     __void_t<typename _Cmp::is_transparent>>
-40039:     { typedef void type; };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc = allocator<_Val> >
-40039:     class _Rb_tree
-40039:     {
-40039:       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
-40039:  rebind<_Rb_tree_node<_Val> >::other _Node_allocator;
-40039: 
-40039:       typedef __gnu_cxx::__alloc_traits<_Node_allocator> _Alloc_traits;
-40039: 
-40039: 
-40039:       static_assert(__is_invocable<_Compare&, const _Key&, const _Key&>{},
-40039:    "comparison object must be invocable with two arguments of key type");
-40039: # 462 "/usr/include/c++/8/bits/stl_tree.h" 3
-40039:     protected:
-40039:       typedef _Rb_tree_node_base* _Base_ptr;
-40039:       typedef const _Rb_tree_node_base* _Const_Base_ptr;
-40039:       typedef _Rb_tree_node<_Val>* _Link_type;
-40039:       typedef const _Rb_tree_node<_Val>* _Const_Link_type;
-40039: 
-40039:     private:
-40039: 
-40039: 
-40039:       struct _Reuse_or_alloc_node
-40039:       {
-40039:  _Reuse_or_alloc_node(_Rb_tree& __t)
-40039:    : _M_root(__t._M_root()), _M_nodes(__t._M_rightmost()), _M_t(__t)
-40039:  {
-40039:    if (_M_root)
-40039:      {
-40039:        _M_root->_M_parent = 0;
-40039: 
-40039:        if (_M_nodes->_M_left)
-40039:   _M_nodes = _M_nodes->_M_left;
-40039:      }
-40039:    else
-40039:      _M_nodes = 0;
-40039:  }
-40039: 
-40039: 
-40039:  _Reuse_or_alloc_node(const _Reuse_or_alloc_node&) = delete;
-40039: 
-40039: 
-40039:  ~_Reuse_or_alloc_node()
-40039:  { _M_t._M_erase(static_cast<_Link_type>(_M_root)); }
-40039: 
-40039:  template<typename _Arg>
-40039:    _Link_type
-40039: 
-40039: 
-40039: 
-40039:    operator()(_Arg&& __arg)
-40039: 
-40039:    {
-40039:      _Link_type __node = static_cast<_Link_type>(_M_extract());
-40039:      if (__node)
-40039:        {
-40039:   _M_t._M_destroy_node(__node);
-40039:   _M_t._M_construct_node(__node, std::forward<_Arg>(__arg));
-40039:   return __node;
-40039:        }
-40039: 
-40039:      return _M_t._M_create_node(std::forward<_Arg>(__arg));
-40039:    }
-40039: 
-40039:       private:
-40039:  _Base_ptr
-40039:  _M_extract()
-40039:  {
-40039:    if (!_M_nodes)
-40039:      return _M_nodes;
-40039: 
-40039:    _Base_ptr __node = _M_nodes;
-40039:    _M_nodes = _M_nodes->_M_parent;
-40039:    if (_M_nodes)
-40039:      {
-40039:        if (_M_nodes->_M_right == __node)
-40039:   {
-40039:     _M_nodes->_M_right = 0;
-40039: 
-40039:     if (_M_nodes->_M_left)
-40039:       {
-40039:         _M_nodes = _M_nodes->_M_left;
-40039: 
-40039:         while (_M_nodes->_M_right)
-40039:    _M_nodes = _M_nodes->_M_right;
-40039: 
-40039:         if (_M_nodes->_M_left)
-40039:    _M_nodes = _M_nodes->_M_left;
-40039:       }
-40039:   }
-40039:        else
-40039:   _M_nodes->_M_left = 0;
-40039:      }
-40039:    else
-40039:      _M_root = 0;
-40039: 
-40039:    return __node;
-40039:  }
-40039: 
-40039:  _Base_ptr _M_root;
-40039:  _Base_ptr _M_nodes;
-40039:  _Rb_tree& _M_t;
-40039:       };
-40039: 
-40039: 
-40039: 
-40039:       struct _Alloc_node
-40039:       {
-40039:  _Alloc_node(_Rb_tree& __t)
-40039:    : _M_t(__t) { }
-40039: 
-40039:  template<typename _Arg>
-40039:    _Link_type
-40039: 
-40039: 
-40039: 
-40039:    operator()(_Arg&& __arg) const
-40039: 
-40039:    { return _M_t._M_create_node(std::forward<_Arg>(__arg)); }
-40039: 
-40039:       private:
-40039:  _Rb_tree& _M_t;
-40039:       };
-40039: 
-40039:     public:
-40039:       typedef _Key key_type;
-40039:       typedef _Val value_type;
-40039:       typedef value_type* pointer;
-40039:       typedef const value_type* const_pointer;
-40039:       typedef value_type& reference;
-40039:       typedef const value_type& const_reference;
-40039:       typedef size_t size_type;
-40039:       typedef ptrdiff_t difference_type;
-40039:       typedef _Alloc allocator_type;
-40039: 
-40039:       _Node_allocator&
-40039:       _M_get_Node_allocator() noexcept
-40039:       { return this->_M_impl; }
-40039: 
-40039:       const _Node_allocator&
-40039:       _M_get_Node_allocator() const noexcept
-40039:       { return this->_M_impl; }
-40039: 
-40039:       allocator_type
-40039:       get_allocator() const noexcept
-40039:       { return allocator_type(_M_get_Node_allocator()); }
-40039: 
-40039:     protected:
-40039:       _Link_type
-40039:       _M_get_node()
-40039:       { return _Alloc_traits::allocate(_M_get_Node_allocator(), 1); }
-40039: 
-40039:       void
-40039:       _M_put_node(_Link_type __p) noexcept
-40039:       { _Alloc_traits::deallocate(_M_get_Node_allocator(), __p, 1); }
-40039: # 630 "/usr/include/c++/8/bits/stl_tree.h" 3
-40039:       template<typename... _Args>
-40039:  void
-40039:  _M_construct_node(_Link_type __node, _Args&&... __args)
-40039:  {
-40039:    try
-40039:      {
-40039:        ::new(__node) _Rb_tree_node<_Val>;
-40039:        _Alloc_traits::construct(_M_get_Node_allocator(),
-40039:            __node->_M_valptr(),
-40039:            std::forward<_Args>(__args)...);
-40039:      }
-40039:    catch(...)
-40039:      {
-40039:        __node->~_Rb_tree_node<_Val>();
-40039:        _M_put_node(__node);
-40039:        throw;
-40039:      }
-40039:  }
-40039: 
-40039:       template<typename... _Args>
-40039:  _Link_type
-40039:  _M_create_node(_Args&&... __args)
-40039:  {
-40039:    _Link_type __tmp = _M_get_node();
-40039:    _M_construct_node(__tmp, std::forward<_Args>(__args)...);
-40039:    return __tmp;
-40039:  }
-40039: 
-40039:       void
-40039:       _M_destroy_node(_Link_type __p) noexcept
-40039:       {
-40039:  _Alloc_traits::destroy(_M_get_Node_allocator(), __p->_M_valptr());
-40039:  __p->~_Rb_tree_node<_Val>();
-40039:       }
-40039: 
-40039: 
-40039:       void
-40039:       _M_drop_node(_Link_type __p) noexcept
-40039:       {
-40039:  _M_destroy_node(__p);
-40039:  _M_put_node(__p);
-40039:       }
-40039: 
-40039:       template<typename _NodeGen>
-40039:  _Link_type
-40039:  _M_clone_node(_Const_Link_type __x, _NodeGen& __node_gen)
-40039:  {
-40039:    _Link_type __tmp = __node_gen(*__x->_M_valptr());
-40039:    __tmp->_M_color = __x->_M_color;
-40039:    __tmp->_M_left = 0;
-40039:    __tmp->_M_right = 0;
-40039:    return __tmp;
-40039:  }
-40039: 
-40039:     protected:
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Key_compare,
-40039:         bool = __is_pod(_Key_compare)>
-40039: 
-40039:  struct _Rb_tree_impl
-40039:  : public _Node_allocator
-40039:  , public _Rb_tree_key_compare<_Key_compare>
-40039:  , public _Rb_tree_header
-40039:  {
-40039:    typedef _Rb_tree_key_compare<_Key_compare> _Base_key_compare;
-40039: 
-40039:    _Rb_tree_impl()
-40039:      noexcept(is_nothrow_default_constructible<_Node_allocator>::value && is_nothrow_default_constructible<_Base_key_compare>::value)
-40039: 
-40039: 
-40039:    : _Node_allocator()
-40039:    { }
-40039: 
-40039:    _Rb_tree_impl(const _Rb_tree_impl& __x)
-40039:    : _Node_allocator(_Alloc_traits::_S_select_on_copy(__x))
-40039:    , _Base_key_compare(__x._M_key_compare)
-40039:    { }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:    _Rb_tree_impl(_Rb_tree_impl&&) = default;
-40039: 
-40039:    _Rb_tree_impl(const _Key_compare& __comp, _Node_allocator&& __a)
-40039:    : _Node_allocator(std::move(__a)), _Base_key_compare(__comp)
-40039:    { }
-40039: 
-40039:  };
-40039: 
-40039:       _Rb_tree_impl<_Compare> _M_impl;
-40039: 
-40039:     protected:
-40039:       _Base_ptr&
-40039:       _M_root() noexcept
-40039:       { return this->_M_impl._M_header._M_parent; }
-40039: 
-40039:       _Const_Base_ptr
-40039:       _M_root() const noexcept
-40039:       { return this->_M_impl._M_header._M_parent; }
-40039: 
-40039:       _Base_ptr&
-40039:       _M_leftmost() noexcept
-40039:       { return this->_M_impl._M_header._M_left; }
-40039: 
-40039:       _Const_Base_ptr
-40039:       _M_leftmost() const noexcept
-40039:       { return this->_M_impl._M_header._M_left; }
-40039: 
-40039:       _Base_ptr&
-40039:       _M_rightmost() noexcept
-40039:       { return this->_M_impl._M_header._M_right; }
-40039: 
-40039:       _Const_Base_ptr
-40039:       _M_rightmost() const noexcept
-40039:       { return this->_M_impl._M_header._M_right; }
-40039: 
-40039:       _Link_type
-40039:       _M_begin() noexcept
-40039:       { return static_cast<_Link_type>(this->_M_impl._M_header._M_parent); }
-40039: 
-40039:       _Const_Link_type
-40039:       _M_begin() const noexcept
-40039:       {
-40039:  return static_cast<_Const_Link_type>
-40039:    (this->_M_impl._M_header._M_parent);
-40039:       }
-40039: 
-40039:       _Base_ptr
-40039:       _M_end() noexcept
-40039:       { return &this->_M_impl._M_header; }
-40039: 
-40039:       _Const_Base_ptr
-40039:       _M_end() const noexcept
-40039:       { return &this->_M_impl._M_header; }
-40039: 
-40039:       static const_reference
-40039:       _S_value(_Const_Link_type __x)
-40039:       { return *__x->_M_valptr(); }
-40039: 
-40039:       static const _Key&
-40039:       _S_key(_Const_Link_type __x)
-40039:       { return _KeyOfValue()(_S_value(__x)); }
-40039: 
-40039:       static _Link_type
-40039:       _S_left(_Base_ptr __x) noexcept
-40039:       { return static_cast<_Link_type>(__x->_M_left); }
-40039: 
-40039:       static _Const_Link_type
-40039:       _S_left(_Const_Base_ptr __x) noexcept
-40039:       { return static_cast<_Const_Link_type>(__x->_M_left); }
-40039: 
-40039:       static _Link_type
-40039:       _S_right(_Base_ptr __x) noexcept
-40039:       { return static_cast<_Link_type>(__x->_M_right); }
-40039: 
-40039:       static _Const_Link_type
-40039:       _S_right(_Const_Base_ptr __x) noexcept
-40039:       { return static_cast<_Const_Link_type>(__x->_M_right); }
-40039: 
-40039:       static const_reference
-40039:       _S_value(_Const_Base_ptr __x)
-40039:       { return *static_cast<_Const_Link_type>(__x)->_M_valptr(); }
-40039: 
-40039:       static const _Key&
-40039:       _S_key(_Const_Base_ptr __x)
-40039:       { return _KeyOfValue()(_S_value(__x)); }
-40039: 
-40039:       static _Base_ptr
-40039:       _S_minimum(_Base_ptr __x) noexcept
-40039:       { return _Rb_tree_node_base::_S_minimum(__x); }
-40039: 
-40039:       static _Const_Base_ptr
-40039:       _S_minimum(_Const_Base_ptr __x) noexcept
-40039:       { return _Rb_tree_node_base::_S_minimum(__x); }
-40039: 
-40039:       static _Base_ptr
-40039:       _S_maximum(_Base_ptr __x) noexcept
-40039:       { return _Rb_tree_node_base::_S_maximum(__x); }
-40039: 
-40039:       static _Const_Base_ptr
-40039:       _S_maximum(_Const_Base_ptr __x) noexcept
-40039:       { return _Rb_tree_node_base::_S_maximum(__x); }
-40039: 
-40039:     public:
-40039:       typedef _Rb_tree_iterator<value_type> iterator;
-40039:       typedef _Rb_tree_const_iterator<value_type> const_iterator;
-40039: 
-40039:       typedef std::reverse_iterator<iterator> reverse_iterator;
-40039:       typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
-40039: # 832 "/usr/include/c++/8/bits/stl_tree.h" 3
-40039:       pair<_Base_ptr, _Base_ptr>
-40039:       _M_get_insert_unique_pos(const key_type& __k);
-40039: 
-40039:       pair<_Base_ptr, _Base_ptr>
-40039:       _M_get_insert_equal_pos(const key_type& __k);
-40039: 
-40039:       pair<_Base_ptr, _Base_ptr>
-40039:       _M_get_insert_hint_unique_pos(const_iterator __pos,
-40039:         const key_type& __k);
-40039: 
-40039:       pair<_Base_ptr, _Base_ptr>
-40039:       _M_get_insert_hint_equal_pos(const_iterator __pos,
-40039:        const key_type& __k);
-40039: 
-40039:     private:
-40039: 
-40039:       template<typename _Arg, typename _NodeGen>
-40039:  iterator
-40039:  _M_insert_(_Base_ptr __x, _Base_ptr __y, _Arg&& __v, _NodeGen&);
-40039: 
-40039:       iterator
-40039:       _M_insert_node(_Base_ptr __x, _Base_ptr __y, _Link_type __z);
-40039: 
-40039:       template<typename _Arg>
-40039:  iterator
-40039:  _M_insert_lower(_Base_ptr __y, _Arg&& __v);
-40039: 
-40039:       template<typename _Arg>
-40039:  iterator
-40039:  _M_insert_equal_lower(_Arg&& __x);
-40039: 
-40039:       iterator
-40039:       _M_insert_lower_node(_Base_ptr __p, _Link_type __z);
-40039: 
-40039:       iterator
-40039:       _M_insert_equal_lower_node(_Link_type __z);
-40039: # 883 "/usr/include/c++/8/bits/stl_tree.h" 3
-40039:       template<typename _NodeGen>
-40039:  _Link_type
-40039:  _M_copy(_Const_Link_type __x, _Base_ptr __p, _NodeGen&);
-40039: 
-40039:       template<typename _NodeGen>
-40039:  _Link_type
-40039:  _M_copy(const _Rb_tree& __x, _NodeGen& __gen)
-40039:  {
-40039:    _Link_type __root = _M_copy(__x._M_begin(), _M_end(), __gen);
-40039:    _M_leftmost() = _S_minimum(__root);
-40039:    _M_rightmost() = _S_maximum(__root);
-40039:    _M_impl._M_node_count = __x._M_impl._M_node_count;
-40039:    return __root;
-40039:  }
-40039: 
-40039:       _Link_type
-40039:       _M_copy(const _Rb_tree& __x)
-40039:       {
-40039:  _Alloc_node __an(*this);
-40039:  return _M_copy(__x, __an);
-40039:       }
-40039: 
-40039:       void
-40039:       _M_erase(_Link_type __x);
-40039: 
-40039:       iterator
-40039:       _M_lower_bound(_Link_type __x, _Base_ptr __y,
-40039:        const _Key& __k);
-40039: 
-40039:       const_iterator
-40039:       _M_lower_bound(_Const_Link_type __x, _Const_Base_ptr __y,
-40039:        const _Key& __k) const;
-40039: 
-40039:       iterator
-40039:       _M_upper_bound(_Link_type __x, _Base_ptr __y,
-40039:        const _Key& __k);
-40039: 
-40039:       const_iterator
-40039:       _M_upper_bound(_Const_Link_type __x, _Const_Base_ptr __y,
-40039:        const _Key& __k) const;
-40039: 
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       _Rb_tree() = default;
-40039: 
-40039: 
-40039:       _Rb_tree(const _Compare& __comp,
-40039:         const allocator_type& __a = allocator_type())
-40039:       : _M_impl(__comp, _Node_allocator(__a)) { }
-40039: 
-40039:       _Rb_tree(const _Rb_tree& __x)
-40039:       : _M_impl(__x._M_impl)
-40039:       {
-40039:  if (__x._M_root() != 0)
-40039:    _M_root() = _M_copy(__x);
-40039:       }
-40039: 
-40039: 
-40039:       _Rb_tree(const allocator_type& __a)
-40039:       : _M_impl(_Compare(), _Node_allocator(__a))
-40039:       { }
-40039: 
-40039:       _Rb_tree(const _Rb_tree& __x, const allocator_type& __a)
-40039:       : _M_impl(__x._M_impl._M_key_compare, _Node_allocator(__a))
-40039:       {
-40039:  if (__x._M_root() != nullptr)
-40039:    _M_root() = _M_copy(__x);
-40039:       }
-40039: 
-40039:       _Rb_tree(_Rb_tree&&) = default;
-40039: 
-40039:       _Rb_tree(_Rb_tree&& __x, const allocator_type& __a)
-40039:       : _Rb_tree(std::move(__x), _Node_allocator(__a))
-40039:       { }
-40039: 
-40039:       _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a);
-40039: 
-40039: 
-40039:       ~_Rb_tree() noexcept
-40039:       { _M_erase(_M_begin()); }
-40039: 
-40039:       _Rb_tree&
-40039:       operator=(const _Rb_tree& __x);
-40039: 
-40039: 
-40039:       _Compare
-40039:       key_comp() const
-40039:       { return _M_impl._M_key_compare; }
-40039: 
-40039:       iterator
-40039:       begin() noexcept
-40039:       { return iterator(this->_M_impl._M_header._M_left); }
-40039: 
-40039:       const_iterator
-40039:       begin() const noexcept
-40039:       { return const_iterator(this->_M_impl._M_header._M_left); }
-40039: 
-40039:       iterator
-40039:       end() noexcept
-40039:       { return iterator(&this->_M_impl._M_header); }
-40039: 
-40039:       const_iterator
-40039:       end() const noexcept
-40039:       { return const_iterator(&this->_M_impl._M_header); }
-40039: 
-40039:       reverse_iterator
-40039:       rbegin() noexcept
-40039:       { return reverse_iterator(end()); }
-40039: 
-40039:       const_reverse_iterator
-40039:       rbegin() const noexcept
-40039:       { return const_reverse_iterator(end()); }
-40039: 
-40039:       reverse_iterator
-40039:       rend() noexcept
-40039:       { return reverse_iterator(begin()); }
-40039: 
-40039:       const_reverse_iterator
-40039:       rend() const noexcept
-40039:       { return const_reverse_iterator(begin()); }
-40039: 
-40039:       bool
-40039:       empty() const noexcept
-40039:       { return _M_impl._M_node_count == 0; }
-40039: 
-40039:       size_type
-40039:       size() const noexcept
-40039:       { return _M_impl._M_node_count; }
-40039: 
-40039:       size_type
-40039:       max_size() const noexcept
-40039:       { return _Alloc_traits::max_size(_M_get_Node_allocator()); }
-40039: 
-40039:       void
-40039:       swap(_Rb_tree& __t)
-40039:       noexcept(__is_nothrow_swappable<_Compare>::value);
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Arg>
-40039:  pair<iterator, bool>
-40039:  _M_insert_unique(_Arg&& __x);
-40039: 
-40039:       template<typename _Arg>
-40039:  iterator
-40039:  _M_insert_equal(_Arg&& __x);
-40039: 
-40039:       template<typename _Arg, typename _NodeGen>
-40039:  iterator
-40039:  _M_insert_unique_(const_iterator __pos, _Arg&& __x, _NodeGen&);
-40039: 
-40039:       template<typename _Arg>
-40039:  iterator
-40039:  _M_insert_unique_(const_iterator __pos, _Arg&& __x)
-40039:  {
-40039:    _Alloc_node __an(*this);
-40039:    return _M_insert_unique_(__pos, std::forward<_Arg>(__x), __an);
-40039:  }
-40039: 
-40039:       template<typename _Arg, typename _NodeGen>
-40039:  iterator
-40039:  _M_insert_equal_(const_iterator __pos, _Arg&& __x, _NodeGen&);
-40039: 
-40039:       template<typename _Arg>
-40039:  iterator
-40039:  _M_insert_equal_(const_iterator __pos, _Arg&& __x)
-40039:  {
-40039:    _Alloc_node __an(*this);
-40039:    return _M_insert_equal_(__pos, std::forward<_Arg>(__x), __an);
-40039:  }
-40039: 
-40039:       template<typename... _Args>
-40039:  pair<iterator, bool>
-40039:  _M_emplace_unique(_Args&&... __args);
-40039: 
-40039:       template<typename... _Args>
-40039:  iterator
-40039:  _M_emplace_equal(_Args&&... __args);
-40039: 
-40039:       template<typename... _Args>
-40039:  iterator
-40039:  _M_emplace_hint_unique(const_iterator __pos, _Args&&... __args);
-40039: 
-40039:       template<typename... _Args>
-40039:  iterator
-40039:  _M_emplace_hint_equal(const_iterator __pos, _Args&&... __args);
-40039: # 1103 "/usr/include/c++/8/bits/stl_tree.h" 3
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  _M_insert_unique(_InputIterator __first, _InputIterator __last);
-40039: 
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  _M_insert_equal(_InputIterator __first, _InputIterator __last);
-40039: 
-40039:     private:
-40039:       void
-40039:       _M_erase_aux(const_iterator __position);
-40039: 
-40039:       void
-40039:       _M_erase_aux(const_iterator __first, const_iterator __last);
-40039: 
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039:       __attribute ((__abi_tag__ ("cxx11")))
-40039:       iterator
-40039:       erase(const_iterator __position)
-40039:       {
-40039:  ;
-40039:  const_iterator __result = __position;
-40039:  ++__result;
-40039:  _M_erase_aux(__position);
-40039:  return __result._M_const_cast();
-40039:       }
-40039: 
-40039: 
-40039:       __attribute ((__abi_tag__ ("cxx11")))
-40039:       iterator
-40039:       erase(iterator __position)
-40039:       {
-40039:  ;
-40039:  iterator __result = __position;
-40039:  ++__result;
-40039:  _M_erase_aux(__position);
-40039:  return __result;
-40039:       }
-40039: # 1159 "/usr/include/c++/8/bits/stl_tree.h" 3
-40039:       size_type
-40039:       erase(const key_type& __x);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       __attribute ((__abi_tag__ ("cxx11")))
-40039:       iterator
-40039:       erase(const_iterator __first, const_iterator __last)
-40039:       {
-40039:  _M_erase_aux(__first, __last);
-40039:  return __last._M_const_cast();
-40039:       }
-40039: # 1181 "/usr/include/c++/8/bits/stl_tree.h" 3
-40039:       void
-40039:       erase(const key_type* __first, const key_type* __last);
-40039: 
-40039:       void
-40039:       clear() noexcept
-40039:       {
-40039:  _M_erase(_M_begin());
-40039:  _M_impl._M_reset();
-40039:       }
-40039: 
-40039: 
-40039:       iterator
-40039:       find(const key_type& __k);
-40039: 
-40039:       const_iterator
-40039:       find(const key_type& __k) const;
-40039: 
-40039:       size_type
-40039:       count(const key_type& __k) const;
-40039: 
-40039:       iterator
-40039:       lower_bound(const key_type& __k)
-40039:       { return _M_lower_bound(_M_begin(), _M_end(), __k); }
-40039: 
-40039:       const_iterator
-40039:       lower_bound(const key_type& __k) const
-40039:       { return _M_lower_bound(_M_begin(), _M_end(), __k); }
-40039: 
-40039:       iterator
-40039:       upper_bound(const key_type& __k)
-40039:       { return _M_upper_bound(_M_begin(), _M_end(), __k); }
-40039: 
-40039:       const_iterator
-40039:       upper_bound(const key_type& __k) const
-40039:       { return _M_upper_bound(_M_begin(), _M_end(), __k); }
-40039: 
-40039:       pair<iterator, iterator>
-40039:       equal_range(const key_type& __k);
-40039: 
-40039:       pair<const_iterator, const_iterator>
-40039:       equal_range(const key_type& __k) const;
-40039: 
-40039: 
-40039:       template<typename _Kt,
-40039:         typename _Req =
-40039:    typename __has_is_transparent<_Compare, _Kt>::type>
-40039:  iterator
-40039:  _M_find_tr(const _Kt& __k)
-40039:  {
-40039:    const _Rb_tree* __const_this = this;
-40039:    return __const_this->_M_find_tr(__k)._M_const_cast();
-40039:  }
-40039: 
-40039:       template<typename _Kt,
-40039:         typename _Req =
-40039:    typename __has_is_transparent<_Compare, _Kt>::type>
-40039:  const_iterator
-40039:  _M_find_tr(const _Kt& __k) const
-40039:  {
-40039:    auto __j = _M_lower_bound_tr(__k);
-40039:    if (__j != end() && _M_impl._M_key_compare(__k, _S_key(__j._M_node)))
-40039:      __j = end();
-40039:    return __j;
-40039:  }
-40039: 
-40039:       template<typename _Kt,
-40039:         typename _Req =
-40039:    typename __has_is_transparent<_Compare, _Kt>::type>
-40039:  size_type
-40039:  _M_count_tr(const _Kt& __k) const
-40039:  {
-40039:    auto __p = _M_equal_range_tr(__k);
-40039:    return std::distance(__p.first, __p.second);
-40039:  }
-40039: 
-40039:       template<typename _Kt,
-40039:         typename _Req =
-40039:    typename __has_is_transparent<_Compare, _Kt>::type>
-40039:  iterator
-40039:  _M_lower_bound_tr(const _Kt& __k)
-40039:  {
-40039:    const _Rb_tree* __const_this = this;
-40039:    return __const_this->_M_lower_bound_tr(__k)._M_const_cast();
-40039:  }
-40039: 
-40039:       template<typename _Kt,
-40039:         typename _Req =
-40039:    typename __has_is_transparent<_Compare, _Kt>::type>
-40039:  const_iterator
-40039:  _M_lower_bound_tr(const _Kt& __k) const
-40039:  {
-40039:    auto __x = _M_begin();
-40039:    auto __y = _M_end();
-40039:    while (__x != 0)
-40039:      if (!_M_impl._M_key_compare(_S_key(__x), __k))
-40039:        {
-40039:   __y = __x;
-40039:   __x = _S_left(__x);
-40039:        }
-40039:      else
-40039:        __x = _S_right(__x);
-40039:    return const_iterator(__y);
-40039:  }
-40039: 
-40039:       template<typename _Kt,
-40039:         typename _Req =
-40039:    typename __has_is_transparent<_Compare, _Kt>::type>
-40039:  iterator
-40039:  _M_upper_bound_tr(const _Kt& __k)
-40039:  {
-40039:    const _Rb_tree* __const_this = this;
-40039:    return __const_this->_M_upper_bound_tr(__k)._M_const_cast();
-40039:  }
-40039: 
-40039:       template<typename _Kt,
-40039:         typename _Req =
-40039:    typename __has_is_transparent<_Compare, _Kt>::type>
-40039:  const_iterator
-40039:  _M_upper_bound_tr(const _Kt& __k) const
-40039:  {
-40039:    auto __x = _M_begin();
-40039:    auto __y = _M_end();
-40039:    while (__x != 0)
-40039:      if (_M_impl._M_key_compare(__k, _S_key(__x)))
-40039:        {
-40039:   __y = __x;
-40039:   __x = _S_left(__x);
-40039:        }
-40039:      else
-40039:        __x = _S_right(__x);
-40039:    return const_iterator(__y);
-40039:  }
-40039: 
-40039:       template<typename _Kt,
-40039:         typename _Req =
-40039:    typename __has_is_transparent<_Compare, _Kt>::type>
-40039:  pair<iterator, iterator>
-40039:  _M_equal_range_tr(const _Kt& __k)
-40039:  {
-40039:    const _Rb_tree* __const_this = this;
-40039:    auto __ret = __const_this->_M_equal_range_tr(__k);
-40039:    return { __ret.first._M_const_cast(), __ret.second._M_const_cast() };
-40039:  }
-40039: 
-40039:       template<typename _Kt,
-40039:         typename _Req =
-40039:    typename __has_is_transparent<_Compare, _Kt>::type>
-40039:  pair<const_iterator, const_iterator>
-40039:  _M_equal_range_tr(const _Kt& __k) const
-40039:  {
-40039:    auto __low = _M_lower_bound_tr(__k);
-40039:    auto __high = __low;
-40039:    auto& __cmp = _M_impl._M_key_compare;
-40039:    while (__high != end() && !__cmp(__k, _S_key(__high._M_node)))
-40039:      ++__high;
-40039:    return { __low, __high };
-40039:  }
-40039: 
-40039: 
-40039: 
-40039:       bool
-40039:       __rb_verify() const;
-40039: 
-40039: 
-40039:       _Rb_tree&
-40039:       operator=(_Rb_tree&&)
-40039:       noexcept(_Alloc_traits::_S_nothrow_move()
-40039:         && is_nothrow_move_assignable<_Compare>::value);
-40039: 
-40039:       template<typename _Iterator>
-40039:  void
-40039:  _M_assign_unique(_Iterator, _Iterator);
-40039: 
-40039:       template<typename _Iterator>
-40039:  void
-40039:  _M_assign_equal(_Iterator, _Iterator);
-40039: 
-40039:     private:
-40039: 
-40039:       void
-40039:       _M_move_data(_Rb_tree& __x, std::true_type)
-40039:       { _M_impl._M_move_data(__x._M_impl); }
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_move_data(_Rb_tree&, std::false_type);
-40039: 
-40039: 
-40039:       void
-40039:       _M_move_assign(_Rb_tree&, std::true_type);
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_move_assign(_Rb_tree&, std::false_type);
-40039: # 1544 "/usr/include/c++/8/bits/stl_tree.h" 3
-40039:     };
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator==(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
-40039:         const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y)
-40039:     {
-40039:       return __x.size() == __y.size()
-40039:       && std::equal(__x.begin(), __x.end(), __y.begin());
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator<(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
-40039:        const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y)
-40039:     {
-40039:       return std::lexicographical_compare(__x.begin(), __x.end(),
-40039:        __y.begin(), __y.end());
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator!=(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
-40039:         const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y)
-40039:     { return !(__x == __y); }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator>(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
-40039:        const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y)
-40039:     { return __y < __x; }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator<=(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
-40039:         const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y)
-40039:     { return !(__y < __x); }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator>=(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
-40039:         const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y)
-40039:     { return !(__x < __y); }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     inline void
-40039:     swap(_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
-40039:   _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y)
-40039:     { __x.swap(__y); }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a)
-40039:     : _M_impl(__x._M_impl._M_key_compare, std::move(__a))
-40039:     {
-40039:       using __eq = typename _Alloc_traits::is_always_equal;
-40039:       if (__x._M_root() != nullptr)
-40039:  _M_move_data(__x, __eq());
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     void
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     _M_move_data(_Rb_tree& __x, std::false_type)
-40039:     {
-40039:       if (_M_get_Node_allocator() == __x._M_get_Node_allocator())
-40039:  _M_move_data(__x, std::true_type());
-40039:       else
-40039:  {
-40039:    _Alloc_node __an(*this);
-40039:    auto __lbd =
-40039:      [&__an](const value_type& __cval)
-40039:      {
-40039:        auto& __val = const_cast<value_type&>(__cval);
-40039:        return __an(std::move_if_noexcept(__val));
-40039:      };
-40039:    _M_root() = _M_copy(__x, __lbd);
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     inline void
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     _M_move_assign(_Rb_tree& __x, true_type)
-40039:     {
-40039:       clear();
-40039:       if (__x._M_root() != nullptr)
-40039:  _M_move_data(__x, std::true_type());
-40039:       std::__alloc_on_move(_M_get_Node_allocator(),
-40039:       __x._M_get_Node_allocator());
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     void
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     _M_move_assign(_Rb_tree& __x, false_type)
-40039:     {
-40039:       if (_M_get_Node_allocator() == __x._M_get_Node_allocator())
-40039:  return _M_move_assign(__x, true_type{});
-40039: 
-40039: 
-40039: 
-40039:       _Reuse_or_alloc_node __roan(*this);
-40039:       _M_impl._M_reset();
-40039:       if (__x._M_root() != nullptr)
-40039:  {
-40039:    auto __lbd =
-40039:      [&__roan](const value_type& __cval)
-40039:      {
-40039:        auto& __val = const_cast<value_type&>(__cval);
-40039:        return __roan(std::move_if_noexcept(__val));
-40039:      };
-40039:    _M_root() = _M_copy(__x, __lbd);
-40039:    __x.clear();
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     inline _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>&
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     operator=(_Rb_tree&& __x)
-40039:     noexcept(_Alloc_traits::_S_nothrow_move()
-40039:       && is_nothrow_move_assignable<_Compare>::value)
-40039:     {
-40039:       _M_impl._M_key_compare = std::move(__x._M_impl._M_key_compare);
-40039:       _M_move_assign(__x, __bool_constant<_Alloc_traits::_S_nothrow_move()>());
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     template<typename _Iterator>
-40039:       void
-40039:       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:       _M_assign_unique(_Iterator __first, _Iterator __last)
-40039:       {
-40039:  _Reuse_or_alloc_node __roan(*this);
-40039:  _M_impl._M_reset();
-40039:  for (; __first != __last; ++__first)
-40039:    _M_insert_unique_(end(), *__first, __roan);
-40039:       }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     template<typename _Iterator>
-40039:       void
-40039:       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:       _M_assign_equal(_Iterator __first, _Iterator __last)
-40039:       {
-40039:  _Reuse_or_alloc_node __roan(*this);
-40039:  _M_impl._M_reset();
-40039:  for (; __first != __last; ++__first)
-40039:    _M_insert_equal_(end(), *__first, __roan);
-40039:       }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>&
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     operator=(const _Rb_tree& __x)
-40039:     {
-40039:       if (this != &__x)
-40039:  {
-40039: 
-40039: 
-40039:    if (_Alloc_traits::_S_propagate_on_copy_assign())
-40039:      {
-40039:        auto& __this_alloc = this->_M_get_Node_allocator();
-40039:        auto& __that_alloc = __x._M_get_Node_allocator();
-40039:        if (!_Alloc_traits::_S_always_equal()
-40039:     && __this_alloc != __that_alloc)
-40039:   {
-40039: 
-40039: 
-40039:     clear();
-40039:     std::__alloc_on_copy(__this_alloc, __that_alloc);
-40039:   }
-40039:      }
-40039: 
-40039: 
-40039:    _Reuse_or_alloc_node __roan(*this);
-40039:    _M_impl._M_reset();
-40039:    _M_impl._M_key_compare = __x._M_impl._M_key_compare;
-40039:    if (__x._M_root() != 0)
-40039:      _M_root() = _M_copy(__x, __roan);
-40039:  }
-40039: 
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039: 
-40039:     template<typename _Arg, typename _NodeGen>
-40039: 
-40039: 
-40039: 
-40039:       typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
-40039:       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:       _M_insert_(_Base_ptr __x, _Base_ptr __p,
-40039: 
-40039:    _Arg&& __v,
-40039: 
-40039: 
-40039: 
-40039:    _NodeGen& __node_gen)
-40039:       {
-40039:  bool __insert_left = (__x != 0 || __p == _M_end()
-40039:          || _M_impl._M_key_compare(_KeyOfValue()(__v),
-40039:        _S_key(__p)));
-40039: 
-40039:  _Link_type __z = __node_gen(std::forward<_Arg>(__v));
-40039: 
-40039:  _Rb_tree_insert_and_rebalance(__insert_left, __z, __p,
-40039:           this->_M_impl._M_header);
-40039:  ++_M_impl._M_node_count;
-40039:  return iterator(__z);
-40039:       }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039: 
-40039:     template<typename _Arg>
-40039: 
-40039:     typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039: 
-40039:     _M_insert_lower(_Base_ptr __p, _Arg&& __v)
-40039: 
-40039: 
-40039: 
-40039:     {
-40039:       bool __insert_left = (__p == _M_end()
-40039:        || !_M_impl._M_key_compare(_S_key(__p),
-40039:              _KeyOfValue()(__v)));
-40039: 
-40039:       _Link_type __z = _M_create_node(std::forward<_Arg>(__v));
-40039: 
-40039:       _Rb_tree_insert_and_rebalance(__insert_left, __z, __p,
-40039:         this->_M_impl._M_header);
-40039:       ++_M_impl._M_node_count;
-40039:       return iterator(__z);
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039: 
-40039:     template<typename _Arg>
-40039: 
-40039:     typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039: 
-40039:     _M_insert_equal_lower(_Arg&& __v)
-40039: 
-40039: 
-40039: 
-40039:     {
-40039:       _Link_type __x = _M_begin();
-40039:       _Base_ptr __y = _M_end();
-40039:       while (__x != 0)
-40039:  {
-40039:    __y = __x;
-40039:    __x = !_M_impl._M_key_compare(_S_key(__x), _KeyOfValue()(__v)) ?
-40039:   _S_left(__x) : _S_right(__x);
-40039:  }
-40039:       return _M_insert_lower(__y, std::forward<_Arg>(__v));
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KoV,
-40039:     typename _Compare, typename _Alloc>
-40039:     template<typename _NodeGen>
-40039:       typename _Rb_tree<_Key, _Val, _KoV, _Compare, _Alloc>::_Link_type
-40039:       _Rb_tree<_Key, _Val, _KoV, _Compare, _Alloc>::
-40039:       _M_copy(_Const_Link_type __x, _Base_ptr __p, _NodeGen& __node_gen)
-40039:       {
-40039: 
-40039:  _Link_type __top = _M_clone_node(__x, __node_gen);
-40039:  __top->_M_parent = __p;
-40039: 
-40039:  try
-40039:    {
-40039:      if (__x->_M_right)
-40039:        __top->_M_right = _M_copy(_S_right(__x), __top, __node_gen);
-40039:      __p = __top;
-40039:      __x = _S_left(__x);
-40039: 
-40039:      while (__x != 0)
-40039:        {
-40039:   _Link_type __y = _M_clone_node(__x, __node_gen);
-40039:   __p->_M_left = __y;
-40039:   __y->_M_parent = __p;
-40039:   if (__x->_M_right)
-40039:     __y->_M_right = _M_copy(_S_right(__x), __y, __node_gen);
-40039:   __p = __y;
-40039:   __x = _S_left(__x);
-40039:        }
-40039:    }
-40039:  catch(...)
-40039:    {
-40039:      _M_erase(__top);
-40039:      throw;
-40039:    }
-40039:  return __top;
-40039:       }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     void
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     _M_erase(_Link_type __x)
-40039:     {
-40039: 
-40039:       while (__x != 0)
-40039:  {
-40039:    _M_erase(_S_right(__x));
-40039:    _Link_type __y = _S_left(__x);
-40039:    _M_drop_node(__x);
-40039:    __x = __y;
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     typename _Rb_tree<_Key, _Val, _KeyOfValue,
-40039:         _Compare, _Alloc>::iterator
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     _M_lower_bound(_Link_type __x, _Base_ptr __y,
-40039:      const _Key& __k)
-40039:     {
-40039:       while (__x != 0)
-40039:  if (!_M_impl._M_key_compare(_S_key(__x), __k))
-40039:    __y = __x, __x = _S_left(__x);
-40039:  else
-40039:    __x = _S_right(__x);
-40039:       return iterator(__y);
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     typename _Rb_tree<_Key, _Val, _KeyOfValue,
-40039:         _Compare, _Alloc>::const_iterator
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     _M_lower_bound(_Const_Link_type __x, _Const_Base_ptr __y,
-40039:      const _Key& __k) const
-40039:     {
-40039:       while (__x != 0)
-40039:  if (!_M_impl._M_key_compare(_S_key(__x), __k))
-40039:    __y = __x, __x = _S_left(__x);
-40039:  else
-40039:    __x = _S_right(__x);
-40039:       return const_iterator(__y);
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     typename _Rb_tree<_Key, _Val, _KeyOfValue,
-40039:         _Compare, _Alloc>::iterator
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     _M_upper_bound(_Link_type __x, _Base_ptr __y,
-40039:      const _Key& __k)
-40039:     {
-40039:       while (__x != 0)
-40039:  if (_M_impl._M_key_compare(__k, _S_key(__x)))
-40039:    __y = __x, __x = _S_left(__x);
-40039:  else
-40039:    __x = _S_right(__x);
-40039:       return iterator(__y);
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     typename _Rb_tree<_Key, _Val, _KeyOfValue,
-40039:         _Compare, _Alloc>::const_iterator
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     _M_upper_bound(_Const_Link_type __x, _Const_Base_ptr __y,
-40039:      const _Key& __k) const
-40039:     {
-40039:       while (__x != 0)
-40039:  if (_M_impl._M_key_compare(__k, _S_key(__x)))
-40039:    __y = __x, __x = _S_left(__x);
-40039:  else
-40039:    __x = _S_right(__x);
-40039:       return const_iterator(__y);
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
-40039:       _Compare, _Alloc>::iterator,
-40039:   typename _Rb_tree<_Key, _Val, _KeyOfValue,
-40039:       _Compare, _Alloc>::iterator>
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     equal_range(const _Key& __k)
-40039:     {
-40039:       _Link_type __x = _M_begin();
-40039:       _Base_ptr __y = _M_end();
-40039:       while (__x != 0)
-40039:  {
-40039:    if (_M_impl._M_key_compare(_S_key(__x), __k))
-40039:      __x = _S_right(__x);
-40039:    else if (_M_impl._M_key_compare(__k, _S_key(__x)))
-40039:      __y = __x, __x = _S_left(__x);
-40039:    else
-40039:      {
-40039:        _Link_type __xu(__x);
-40039:        _Base_ptr __yu(__y);
-40039:        __y = __x, __x = _S_left(__x);
-40039:        __xu = _S_right(__xu);
-40039:        return pair<iterator,
-40039:      iterator>(_M_lower_bound(__x, __y, __k),
-40039:         _M_upper_bound(__xu, __yu, __k));
-40039:      }
-40039:  }
-40039:       return pair<iterator, iterator>(iterator(__y),
-40039:           iterator(__y));
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
-40039:       _Compare, _Alloc>::const_iterator,
-40039:   typename _Rb_tree<_Key, _Val, _KeyOfValue,
-40039:       _Compare, _Alloc>::const_iterator>
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     equal_range(const _Key& __k) const
-40039:     {
-40039:       _Const_Link_type __x = _M_begin();
-40039:       _Const_Base_ptr __y = _M_end();
-40039:       while (__x != 0)
-40039:  {
-40039:    if (_M_impl._M_key_compare(_S_key(__x), __k))
-40039:      __x = _S_right(__x);
-40039:    else if (_M_impl._M_key_compare(__k, _S_key(__x)))
-40039:      __y = __x, __x = _S_left(__x);
-40039:    else
-40039:      {
-40039:        _Const_Link_type __xu(__x);
-40039:        _Const_Base_ptr __yu(__y);
-40039:        __y = __x, __x = _S_left(__x);
-40039:        __xu = _S_right(__xu);
-40039:        return pair<const_iterator,
-40039:      const_iterator>(_M_lower_bound(__x, __y, __k),
-40039:        _M_upper_bound(__xu, __yu, __k));
-40039:      }
-40039:  }
-40039:       return pair<const_iterator, const_iterator>(const_iterator(__y),
-40039:         const_iterator(__y));
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     void
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     swap(_Rb_tree& __t)
-40039:     noexcept(__is_nothrow_swappable<_Compare>::value)
-40039:     {
-40039:       if (_M_root() == 0)
-40039:  {
-40039:    if (__t._M_root() != 0)
-40039:      _M_impl._M_move_data(__t._M_impl);
-40039:  }
-40039:       else if (__t._M_root() == 0)
-40039:  __t._M_impl._M_move_data(_M_impl);
-40039:       else
-40039:  {
-40039:    std::swap(_M_root(),__t._M_root());
-40039:    std::swap(_M_leftmost(),__t._M_leftmost());
-40039:    std::swap(_M_rightmost(),__t._M_rightmost());
-40039: 
-40039:    _M_root()->_M_parent = _M_end();
-40039:    __t._M_root()->_M_parent = __t._M_end();
-40039:    std::swap(this->_M_impl._M_node_count, __t._M_impl._M_node_count);
-40039:  }
-40039: 
-40039:       std::swap(this->_M_impl._M_key_compare, __t._M_impl._M_key_compare);
-40039: 
-40039:       _Alloc_traits::_S_on_swap(_M_get_Node_allocator(),
-40039:     __t._M_get_Node_allocator());
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
-40039:       _Compare, _Alloc>::_Base_ptr,
-40039:   typename _Rb_tree<_Key, _Val, _KeyOfValue,
-40039:       _Compare, _Alloc>::_Base_ptr>
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     _M_get_insert_unique_pos(const key_type& __k)
-40039:     {
-40039:       typedef pair<_Base_ptr, _Base_ptr> _Res;
-40039:       _Link_type __x = _M_begin();
-40039:       _Base_ptr __y = _M_end();
-40039:       bool __comp = true;
-40039:       while (__x != 0)
-40039:  {
-40039:    __y = __x;
-40039:    __comp = _M_impl._M_key_compare(__k, _S_key(__x));
-40039:    __x = __comp ? _S_left(__x) : _S_right(__x);
-40039:  }
-40039:       iterator __j = iterator(__y);
-40039:       if (__comp)
-40039:  {
-40039:    if (__j == begin())
-40039:      return _Res(__x, __y);
-40039:    else
-40039:      --__j;
-40039:  }
-40039:       if (_M_impl._M_key_compare(_S_key(__j._M_node), __k))
-40039:  return _Res(__x, __y);
-40039:       return _Res(__j._M_node, 0);
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
-40039:       _Compare, _Alloc>::_Base_ptr,
-40039:   typename _Rb_tree<_Key, _Val, _KeyOfValue,
-40039:       _Compare, _Alloc>::_Base_ptr>
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     _M_get_insert_equal_pos(const key_type& __k)
-40039:     {
-40039:       typedef pair<_Base_ptr, _Base_ptr> _Res;
-40039:       _Link_type __x = _M_begin();
-40039:       _Base_ptr __y = _M_end();
-40039:       while (__x != 0)
-40039:  {
-40039:    __y = __x;
-40039:    __x = _M_impl._M_key_compare(__k, _S_key(__x)) ?
-40039:   _S_left(__x) : _S_right(__x);
-40039:  }
-40039:       return _Res(__x, __y);
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039: 
-40039:     template<typename _Arg>
-40039: 
-40039:     pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
-40039:       _Compare, _Alloc>::iterator, bool>
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039: 
-40039:     _M_insert_unique(_Arg&& __v)
-40039: 
-40039: 
-40039: 
-40039:     {
-40039:       typedef pair<iterator, bool> _Res;
-40039:       pair<_Base_ptr, _Base_ptr> __res
-40039:  = _M_get_insert_unique_pos(_KeyOfValue()(__v));
-40039: 
-40039:       if (__res.second)
-40039:  {
-40039:    _Alloc_node __an(*this);
-40039:    return _Res(_M_insert_(__res.first, __res.second,
-40039:      std::forward<_Arg>(__v), __an),
-40039:         true);
-40039:  }
-40039: 
-40039:       return _Res(iterator(__res.first), false);
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039: 
-40039:     template<typename _Arg>
-40039: 
-40039:     typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039: 
-40039:     _M_insert_equal(_Arg&& __v)
-40039: 
-40039: 
-40039: 
-40039:     {
-40039:       pair<_Base_ptr, _Base_ptr> __res
-40039:  = _M_get_insert_equal_pos(_KeyOfValue()(__v));
-40039:       _Alloc_node __an(*this);
-40039:       return _M_insert_(__res.first, __res.second,
-40039:    std::forward<_Arg>(__v), __an);
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
-40039:       _Compare, _Alloc>::_Base_ptr,
-40039:   typename _Rb_tree<_Key, _Val, _KeyOfValue,
-40039:       _Compare, _Alloc>::_Base_ptr>
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     _M_get_insert_hint_unique_pos(const_iterator __position,
-40039:       const key_type& __k)
-40039:     {
-40039:       iterator __pos = __position._M_const_cast();
-40039:       typedef pair<_Base_ptr, _Base_ptr> _Res;
-40039: 
-40039: 
-40039:       if (__pos._M_node == _M_end())
-40039:  {
-40039:    if (size() > 0
-40039:        && _M_impl._M_key_compare(_S_key(_M_rightmost()), __k))
-40039:      return _Res(0, _M_rightmost());
-40039:    else
-40039:      return _M_get_insert_unique_pos(__k);
-40039:  }
-40039:       else if (_M_impl._M_key_compare(__k, _S_key(__pos._M_node)))
-40039:  {
-40039: 
-40039:    iterator __before = __pos;
-40039:    if (__pos._M_node == _M_leftmost())
-40039:      return _Res(_M_leftmost(), _M_leftmost());
-40039:    else if (_M_impl._M_key_compare(_S_key((--__before)._M_node), __k))
-40039:      {
-40039:        if (_S_right(__before._M_node) == 0)
-40039:   return _Res(0, __before._M_node);
-40039:        else
-40039:   return _Res(__pos._M_node, __pos._M_node);
-40039:      }
-40039:    else
-40039:      return _M_get_insert_unique_pos(__k);
-40039:  }
-40039:       else if (_M_impl._M_key_compare(_S_key(__pos._M_node), __k))
-40039:  {
-40039: 
-40039:    iterator __after = __pos;
-40039:    if (__pos._M_node == _M_rightmost())
-40039:      return _Res(0, _M_rightmost());
-40039:    else if (_M_impl._M_key_compare(__k, _S_key((++__after)._M_node)))
-40039:      {
-40039:        if (_S_right(__pos._M_node) == 0)
-40039:   return _Res(0, __pos._M_node);
-40039:        else
-40039:   return _Res(__after._M_node, __after._M_node);
-40039:      }
-40039:    else
-40039:      return _M_get_insert_unique_pos(__k);
-40039:  }
-40039:       else
-40039: 
-40039:  return _Res(__pos._M_node, 0);
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039: 
-40039:     template<typename _Arg, typename _NodeGen>
-40039: 
-40039: 
-40039: 
-40039:       typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
-40039:       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:       _M_insert_unique_(const_iterator __position,
-40039: 
-40039:    _Arg&& __v,
-40039: 
-40039: 
-40039: 
-40039:    _NodeGen& __node_gen)
-40039:     {
-40039:       pair<_Base_ptr, _Base_ptr> __res
-40039:  = _M_get_insert_hint_unique_pos(__position, _KeyOfValue()(__v));
-40039: 
-40039:       if (__res.second)
-40039:  return _M_insert_(__res.first, __res.second,
-40039:      std::forward<_Arg>(__v),
-40039:      __node_gen);
-40039:       return iterator(__res.first);
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
-40039:       _Compare, _Alloc>::_Base_ptr,
-40039:   typename _Rb_tree<_Key, _Val, _KeyOfValue,
-40039:       _Compare, _Alloc>::_Base_ptr>
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     _M_get_insert_hint_equal_pos(const_iterator __position, const key_type& __k)
-40039:     {
-40039:       iterator __pos = __position._M_const_cast();
-40039:       typedef pair<_Base_ptr, _Base_ptr> _Res;
-40039: 
-40039: 
-40039:       if (__pos._M_node == _M_end())
-40039:  {
-40039:    if (size() > 0
-40039:        && !_M_impl._M_key_compare(__k, _S_key(_M_rightmost())))
-40039:      return _Res(0, _M_rightmost());
-40039:    else
-40039:      return _M_get_insert_equal_pos(__k);
-40039:  }
-40039:       else if (!_M_impl._M_key_compare(_S_key(__pos._M_node), __k))
-40039:  {
-40039: 
-40039:    iterator __before = __pos;
-40039:    if (__pos._M_node == _M_leftmost())
-40039:      return _Res(_M_leftmost(), _M_leftmost());
-40039:    else if (!_M_impl._M_key_compare(__k, _S_key((--__before)._M_node)))
-40039:      {
-40039:        if (_S_right(__before._M_node) == 0)
-40039:   return _Res(0, __before._M_node);
-40039:        else
-40039:   return _Res(__pos._M_node, __pos._M_node);
-40039:      }
-40039:    else
-40039:      return _M_get_insert_equal_pos(__k);
-40039:  }
-40039:       else
-40039:  {
-40039: 
-40039:    iterator __after = __pos;
-40039:    if (__pos._M_node == _M_rightmost())
-40039:      return _Res(0, _M_rightmost());
-40039:    else if (!_M_impl._M_key_compare(_S_key((++__after)._M_node), __k))
-40039:      {
-40039:        if (_S_right(__pos._M_node) == 0)
-40039:   return _Res(0, __pos._M_node);
-40039:        else
-40039:   return _Res(__after._M_node, __after._M_node);
-40039:      }
-40039:    else
-40039:      return _Res(0, 0);
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039: 
-40039:     template<typename _Arg, typename _NodeGen>
-40039: 
-40039: 
-40039: 
-40039:       typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
-40039:       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:       _M_insert_equal_(const_iterator __position,
-40039: 
-40039:          _Arg&& __v,
-40039: 
-40039: 
-40039: 
-40039:          _NodeGen& __node_gen)
-40039:       {
-40039:  pair<_Base_ptr, _Base_ptr> __res
-40039:    = _M_get_insert_hint_equal_pos(__position, _KeyOfValue()(__v));
-40039: 
-40039:  if (__res.second)
-40039:    return _M_insert_(__res.first, __res.second,
-40039:        std::forward<_Arg>(__v),
-40039:        __node_gen);
-40039: 
-40039:  return _M_insert_equal_lower(std::forward<_Arg>(__v));
-40039:       }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     _M_insert_node(_Base_ptr __x, _Base_ptr __p, _Link_type __z)
-40039:     {
-40039:       bool __insert_left = (__x != 0 || __p == _M_end()
-40039:        || _M_impl._M_key_compare(_S_key(__z),
-40039:             _S_key(__p)));
-40039: 
-40039:       _Rb_tree_insert_and_rebalance(__insert_left, __z, __p,
-40039:         this->_M_impl._M_header);
-40039:       ++_M_impl._M_node_count;
-40039:       return iterator(__z);
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     _M_insert_lower_node(_Base_ptr __p, _Link_type __z)
-40039:     {
-40039:       bool __insert_left = (__p == _M_end()
-40039:        || !_M_impl._M_key_compare(_S_key(__p),
-40039:              _S_key(__z)));
-40039: 
-40039:       _Rb_tree_insert_and_rebalance(__insert_left, __z, __p,
-40039:         this->_M_impl._M_header);
-40039:       ++_M_impl._M_node_count;
-40039:       return iterator(__z);
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     _M_insert_equal_lower_node(_Link_type __z)
-40039:     {
-40039:       _Link_type __x = _M_begin();
-40039:       _Base_ptr __y = _M_end();
-40039:       while (__x != 0)
-40039:  {
-40039:    __y = __x;
-40039:    __x = !_M_impl._M_key_compare(_S_key(__x), _S_key(__z)) ?
-40039:   _S_left(__x) : _S_right(__x);
-40039:  }
-40039:       return _M_insert_lower_node(__y, __z);
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     template<typename... _Args>
-40039:       pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
-40039:         _Compare, _Alloc>::iterator, bool>
-40039:       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:       _M_emplace_unique(_Args&&... __args)
-40039:       {
-40039:  _Link_type __z = _M_create_node(std::forward<_Args>(__args)...);
-40039: 
-40039:  try
-40039:    {
-40039:      typedef pair<iterator, bool> _Res;
-40039:      auto __res = _M_get_insert_unique_pos(_S_key(__z));
-40039:      if (__res.second)
-40039:        return _Res(_M_insert_node(__res.first, __res.second, __z), true);
-40039: 
-40039:      _M_drop_node(__z);
-40039:      return _Res(iterator(__res.first), false);
-40039:    }
-40039:  catch(...)
-40039:    {
-40039:      _M_drop_node(__z);
-40039:      throw;
-40039:    }
-40039:       }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     template<typename... _Args>
-40039:       typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
-40039:       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:       _M_emplace_equal(_Args&&... __args)
-40039:       {
-40039:  _Link_type __z = _M_create_node(std::forward<_Args>(__args)...);
-40039: 
-40039:  try
-40039:    {
-40039:      auto __res = _M_get_insert_equal_pos(_S_key(__z));
-40039:      return _M_insert_node(__res.first, __res.second, __z);
-40039:    }
-40039:  catch(...)
-40039:    {
-40039:      _M_drop_node(__z);
-40039:      throw;
-40039:    }
-40039:       }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     template<typename... _Args>
-40039:       typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
-40039:       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:       _M_emplace_hint_unique(const_iterator __pos, _Args&&... __args)
-40039:       {
-40039:  _Link_type __z = _M_create_node(std::forward<_Args>(__args)...);
-40039: 
-40039:  try
-40039:    {
-40039:      auto __res = _M_get_insert_hint_unique_pos(__pos, _S_key(__z));
-40039: 
-40039:      if (__res.second)
-40039:        return _M_insert_node(__res.first, __res.second, __z);
-40039: 
-40039:      _M_drop_node(__z);
-40039:      return iterator(__res.first);
-40039:    }
-40039:  catch(...)
-40039:    {
-40039:      _M_drop_node(__z);
-40039:      throw;
-40039:    }
-40039:       }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     template<typename... _Args>
-40039:       typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
-40039:       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:       _M_emplace_hint_equal(const_iterator __pos, _Args&&... __args)
-40039:       {
-40039:  _Link_type __z = _M_create_node(std::forward<_Args>(__args)...);
-40039: 
-40039:  try
-40039:    {
-40039:      auto __res = _M_get_insert_hint_equal_pos(__pos, _S_key(__z));
-40039: 
-40039:      if (__res.second)
-40039:        return _M_insert_node(__res.first, __res.second, __z);
-40039: 
-40039:      return _M_insert_equal_lower_node(__z);
-40039:    }
-40039:  catch(...)
-40039:    {
-40039:      _M_drop_node(__z);
-40039:      throw;
-40039:    }
-40039:       }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KoV,
-40039:     typename _Cmp, typename _Alloc>
-40039:     template<class _II>
-40039:       void
-40039:       _Rb_tree<_Key, _Val, _KoV, _Cmp, _Alloc>::
-40039:       _M_insert_unique(_II __first, _II __last)
-40039:       {
-40039:  _Alloc_node __an(*this);
-40039:  for (; __first != __last; ++__first)
-40039:    _M_insert_unique_(end(), *__first, __an);
-40039:       }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KoV,
-40039:     typename _Cmp, typename _Alloc>
-40039:     template<class _II>
-40039:       void
-40039:       _Rb_tree<_Key, _Val, _KoV, _Cmp, _Alloc>::
-40039:       _M_insert_equal(_II __first, _II __last)
-40039:       {
-40039:  _Alloc_node __an(*this);
-40039:  for (; __first != __last; ++__first)
-40039:    _M_insert_equal_(end(), *__first, __an);
-40039:       }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     void
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     _M_erase_aux(const_iterator __position)
-40039:     {
-40039:       _Link_type __y =
-40039:  static_cast<_Link_type>(_Rb_tree_rebalance_for_erase
-40039:     (const_cast<_Base_ptr>(__position._M_node),
-40039:      this->_M_impl._M_header));
-40039:       _M_drop_node(__y);
-40039:       --_M_impl._M_node_count;
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     void
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     _M_erase_aux(const_iterator __first, const_iterator __last)
-40039:     {
-40039:       if (__first == begin() && __last == end())
-40039:  clear();
-40039:       else
-40039:  while (__first != __last)
-40039:    _M_erase_aux(__first++);
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     erase(const _Key& __x)
-40039:     {
-40039:       pair<iterator, iterator> __p = equal_range(__x);
-40039:       const size_type __old_size = size();
-40039:       _M_erase_aux(__p.first, __p.second);
-40039:       return __old_size - size();
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     void
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     erase(const _Key* __first, const _Key* __last)
-40039:     {
-40039:       while (__first != __last)
-40039:  erase(*__first++);
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     typename _Rb_tree<_Key, _Val, _KeyOfValue,
-40039:         _Compare, _Alloc>::iterator
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     find(const _Key& __k)
-40039:     {
-40039:       iterator __j = _M_lower_bound(_M_begin(), _M_end(), __k);
-40039:       return (__j == end()
-40039:        || _M_impl._M_key_compare(__k,
-40039:      _S_key(__j._M_node))) ? end() : __j;
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     typename _Rb_tree<_Key, _Val, _KeyOfValue,
-40039:         _Compare, _Alloc>::const_iterator
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     find(const _Key& __k) const
-40039:     {
-40039:       const_iterator __j = _M_lower_bound(_M_begin(), _M_end(), __k);
-40039:       return (__j == end()
-40039:        || _M_impl._M_key_compare(__k,
-40039:      _S_key(__j._M_node))) ? end() : __j;
-40039:     }
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type
-40039:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
-40039:     count(const _Key& __k) const
-40039:     {
-40039:       pair<const_iterator, const_iterator> __p = equal_range(__k);
-40039:       const size_type __n = std::distance(__p.first, __p.second);
-40039:       return __n;
-40039:     }
-40039: 
-40039:   __attribute__ ((__pure__)) unsigned int
-40039:   _Rb_tree_black_count(const _Rb_tree_node_base* __node,
-40039:          const _Rb_tree_node_base* __root) throw ();
-40039: 
-40039:   template<typename _Key, typename _Val, typename _KeyOfValue,
-40039:     typename _Compare, typename _Alloc>
-40039:     bool
-40039:     _Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>::__rb_verify() const
-40039:     {
-40039:       if (_M_impl._M_node_count == 0 || begin() == end())
-40039:  return _M_impl._M_node_count == 0 && begin() == end()
-40039:         && this->_M_impl._M_header._M_left == _M_end()
-40039:         && this->_M_impl._M_header._M_right == _M_end();
-40039: 
-40039:       unsigned int __len = _Rb_tree_black_count(_M_leftmost(), _M_root());
-40039:       for (const_iterator __it = begin(); __it != end(); ++__it)
-40039:  {
-40039:    _Const_Link_type __x = static_cast<_Const_Link_type>(__it._M_node);
-40039:    _Const_Link_type __L = _S_left(__x);
-40039:    _Const_Link_type __R = _S_right(__x);
-40039: 
-40039:    if (__x->_M_color == _S_red)
-40039:      if ((__L && __L->_M_color == _S_red)
-40039:   || (__R && __R->_M_color == _S_red))
-40039:        return false;
-40039: 
-40039:    if (__L && _M_impl._M_key_compare(_S_key(__x), _S_key(__L)))
-40039:      return false;
-40039:    if (__R && _M_impl._M_key_compare(_S_key(__R), _S_key(__x)))
-40039:      return false;
-40039: 
-40039:    if (!__L && !__R && _Rb_tree_black_count(__x, _M_root()) != __len)
-40039:      return false;
-40039:  }
-40039: 
-40039:       if (_M_leftmost() != _Rb_tree_node_base::_S_minimum(_M_root()))
-40039:  return false;
-40039:       if (_M_rightmost() != _Rb_tree_node_base::_S_maximum(_M_root()))
-40039:  return false;
-40039:       return true;
-40039:     }
-40039: # 2627 "/usr/include/c++/8/bits/stl_tree.h" 3
-40039: 
-40039: }
-40039: # 61 "/usr/include/c++/8/set" 2 3
-40039: # 1 "/usr/include/c++/8/bits/stl_set.h" 1 3
-40039: # 64 "/usr/include/c++/8/bits/stl_set.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Compare, typename _Alloc>
-40039:     class multiset;
-40039: # 92 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:   template<typename _Key, typename _Compare = std::less<_Key>,
-40039:     typename _Alloc = std::allocator<_Key> >
-40039:     class set
-40039:     {
-40039: # 108 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       static_assert(is_same<typename remove_cv<_Key>::type, _Key>::value,
-40039:    "std::set must have a non-const, non-volatile value_type");
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039:       typedef _Key key_type;
-40039:       typedef _Key value_type;
-40039:       typedef _Compare key_compare;
-40039:       typedef _Compare value_compare;
-40039:       typedef _Alloc allocator_type;
-40039: 
-40039: 
-40039:     private:
-40039:       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
-40039:  rebind<_Key>::other _Key_alloc_type;
-40039: 
-40039:       typedef _Rb_tree<key_type, value_type, _Identity<value_type>,
-40039:          key_compare, _Key_alloc_type> _Rep_type;
-40039:       _Rep_type _M_t;
-40039: 
-40039:       typedef __gnu_cxx::__alloc_traits<_Key_alloc_type> _Alloc_traits;
-40039: 
-40039:     public:
-40039: 
-40039: 
-40039:       typedef typename _Alloc_traits::pointer pointer;
-40039:       typedef typename _Alloc_traits::const_pointer const_pointer;
-40039:       typedef typename _Alloc_traits::reference reference;
-40039:       typedef typename _Alloc_traits::const_reference const_reference;
-40039: 
-40039: 
-40039: 
-40039:       typedef typename _Rep_type::const_iterator iterator;
-40039:       typedef typename _Rep_type::const_iterator const_iterator;
-40039:       typedef typename _Rep_type::const_reverse_iterator reverse_iterator;
-40039:       typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
-40039:       typedef typename _Rep_type::size_type size_type;
-40039:       typedef typename _Rep_type::difference_type difference_type;
-40039: # 167 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       set() = default;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       explicit
-40039:       set(const _Compare& __comp,
-40039:    const allocator_type& __a = allocator_type())
-40039:       : _M_t(__comp, _Key_alloc_type(__a)) { }
-40039: # 190 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       template<typename _InputIterator>
-40039:  set(_InputIterator __first, _InputIterator __last)
-40039:  : _M_t()
-40039:  { _M_t._M_insert_unique(__first, __last); }
-40039: # 207 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       template<typename _InputIterator>
-40039:  set(_InputIterator __first, _InputIterator __last,
-40039:      const _Compare& __comp,
-40039:      const allocator_type& __a = allocator_type())
-40039:  : _M_t(__comp, _Key_alloc_type(__a))
-40039:  { _M_t._M_insert_unique(__first, __last); }
-40039: # 223 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       set(const set&) = default;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       set(set&&) = default;
-40039: # 243 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       set(initializer_list<value_type> __l,
-40039:    const _Compare& __comp = _Compare(),
-40039:    const allocator_type& __a = allocator_type())
-40039:       : _M_t(__comp, _Key_alloc_type(__a))
-40039:       { _M_t._M_insert_unique(__l.begin(), __l.end()); }
-40039: 
-40039: 
-40039:       explicit
-40039:       set(const allocator_type& __a)
-40039:       : _M_t(_Compare(), _Key_alloc_type(__a)) { }
-40039: 
-40039: 
-40039:       set(const set& __x, const allocator_type& __a)
-40039:       : _M_t(__x._M_t, _Key_alloc_type(__a)) { }
-40039: 
-40039: 
-40039:       set(set&& __x, const allocator_type& __a)
-40039:       noexcept(is_nothrow_copy_constructible<_Compare>::value
-40039:         && _Alloc_traits::_S_always_equal())
-40039:       : _M_t(std::move(__x._M_t), _Key_alloc_type(__a)) { }
-40039: 
-40039: 
-40039:       set(initializer_list<value_type> __l, const allocator_type& __a)
-40039:       : _M_t(_Compare(), _Key_alloc_type(__a))
-40039:       { _M_t._M_insert_unique(__l.begin(), __l.end()); }
-40039: 
-40039: 
-40039:       template<typename _InputIterator>
-40039:  set(_InputIterator __first, _InputIterator __last,
-40039:      const allocator_type& __a)
-40039:  : _M_t(_Compare(), _Key_alloc_type(__a))
-40039:  { _M_t._M_insert_unique(__first, __last); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       ~set() = default;
-40039: # 297 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       set&
-40039:       operator=(const set&) = default;
-40039: 
-40039: 
-40039:       set&
-40039:       operator=(set&&) = default;
-40039: # 315 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       set&
-40039:       operator=(initializer_list<value_type> __l)
-40039:       {
-40039:  _M_t._M_assign_unique(__l.begin(), __l.end());
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       key_compare
-40039:       key_comp() const
-40039:       { return _M_t.key_comp(); }
-40039: 
-40039:       value_compare
-40039:       value_comp() const
-40039:       { return _M_t.key_comp(); }
-40039: 
-40039:       allocator_type
-40039:       get_allocator() const noexcept
-40039:       { return allocator_type(_M_t.get_allocator()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       begin() const noexcept
-40039:       { return _M_t.begin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       end() const noexcept
-40039:       { return _M_t.end(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       rbegin() const noexcept
-40039:       { return _M_t.rbegin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       rend() const noexcept
-40039:       { return _M_t.rend(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       cbegin() const noexcept
-40039:       { return _M_t.begin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       cend() const noexcept
-40039:       { return _M_t.end(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       crbegin() const noexcept
-40039:       { return _M_t.rbegin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       crend() const noexcept
-40039:       { return _M_t.rend(); }
-40039: 
-40039: 
-40039: 
-40039:       bool
-40039:       empty() const noexcept
-40039:       { return _M_t.empty(); }
-40039: 
-40039: 
-40039:       size_type
-40039:       size() const noexcept
-40039:       { return _M_t.size(); }
-40039: 
-40039: 
-40039:       size_type
-40039:       max_size() const noexcept
-40039:       { return _M_t.max_size(); }
-40039: # 440 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       void
-40039:       swap(set& __x)
-40039:       noexcept(__is_nothrow_swappable<_Compare>::value)
-40039:       { _M_t.swap(__x._M_t); }
-40039: # 460 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       template<typename... _Args>
-40039:  std::pair<iterator, bool>
-40039:  emplace(_Args&&... __args)
-40039:  { return _M_t._M_emplace_unique(std::forward<_Args>(__args)...); }
-40039: # 486 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       template<typename... _Args>
-40039:  iterator
-40039:  emplace_hint(const_iterator __pos, _Args&&... __args)
-40039:  {
-40039:    return _M_t._M_emplace_hint_unique(__pos,
-40039:           std::forward<_Args>(__args)...);
-40039:  }
-40039: # 508 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       std::pair<iterator, bool>
-40039:       insert(const value_type& __x)
-40039:       {
-40039:  std::pair<typename _Rep_type::iterator, bool> __p =
-40039:    _M_t._M_insert_unique(__x);
-40039:  return std::pair<iterator, bool>(__p.first, __p.second);
-40039:       }
-40039: 
-40039: 
-40039:       std::pair<iterator, bool>
-40039:       insert(value_type&& __x)
-40039:       {
-40039:  std::pair<typename _Rep_type::iterator, bool> __p =
-40039:    _M_t._M_insert_unique(std::move(__x));
-40039:  return std::pair<iterator, bool>(__p.first, __p.second);
-40039:       }
-40039: # 545 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       iterator
-40039:       insert(const_iterator __position, const value_type& __x)
-40039:       { return _M_t._M_insert_unique_(__position, __x); }
-40039: 
-40039: 
-40039:       iterator
-40039:       insert(const_iterator __position, value_type&& __x)
-40039:       { return _M_t._M_insert_unique_(__position, std::move(__x)); }
-40039: # 564 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  insert(_InputIterator __first, _InputIterator __last)
-40039:  { _M_t._M_insert_unique(__first, __last); }
-40039: # 577 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       void
-40039:       insert(initializer_list<value_type> __l)
-40039:       { this->insert(__l.begin(), __l.end()); }
-40039: # 652 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       __attribute ((__abi_tag__ ("cxx11")))
-40039:       iterator
-40039:       erase(const_iterator __position)
-40039:       { return _M_t.erase(__position); }
-40039: # 683 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       size_type
-40039:       erase(const key_type& __x)
-40039:       { return _M_t.erase(__x); }
-40039: # 704 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       __attribute ((__abi_tag__ ("cxx11")))
-40039:       iterator
-40039:       erase(const_iterator __first, const_iterator __last)
-40039:       { return _M_t.erase(__first, __last); }
-40039: # 732 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       void
-40039:       clear() noexcept
-40039:       { _M_t.clear(); }
-40039: # 747 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       size_type
-40039:       count(const key_type& __x) const
-40039:       { return _M_t.find(__x) == _M_t.end() ? 0 : 1; }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  count(const _Kt& __x) const
-40039:  -> decltype(_M_t._M_count_tr(__x))
-40039:  { return _M_t._M_count_tr(__x); }
-40039: # 774 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       iterator
-40039:       find(const key_type& __x)
-40039:       { return _M_t.find(__x); }
-40039: 
-40039:       const_iterator
-40039:       find(const key_type& __x) const
-40039:       { return _M_t.find(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  find(const _Kt& __x)
-40039:  -> decltype(iterator{_M_t._M_find_tr(__x)})
-40039:  { return iterator{_M_t._M_find_tr(__x)}; }
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  find(const _Kt& __x) const
-40039:  -> decltype(const_iterator{_M_t._M_find_tr(__x)})
-40039:  { return const_iterator{_M_t._M_find_tr(__x)}; }
-40039: # 809 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       iterator
-40039:       lower_bound(const key_type& __x)
-40039:       { return _M_t.lower_bound(__x); }
-40039: 
-40039:       const_iterator
-40039:       lower_bound(const key_type& __x) const
-40039:       { return _M_t.lower_bound(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  lower_bound(const _Kt& __x)
-40039:  -> decltype(iterator(_M_t._M_lower_bound_tr(__x)))
-40039:  { return iterator(_M_t._M_lower_bound_tr(__x)); }
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  lower_bound(const _Kt& __x) const
-40039:  -> decltype(const_iterator(_M_t._M_lower_bound_tr(__x)))
-40039:  { return const_iterator(_M_t._M_lower_bound_tr(__x)); }
-40039: # 839 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       iterator
-40039:       upper_bound(const key_type& __x)
-40039:       { return _M_t.upper_bound(__x); }
-40039: 
-40039:       const_iterator
-40039:       upper_bound(const key_type& __x) const
-40039:       { return _M_t.upper_bound(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  upper_bound(const _Kt& __x)
-40039:  -> decltype(iterator(_M_t._M_upper_bound_tr(__x)))
-40039:  { return iterator(_M_t._M_upper_bound_tr(__x)); }
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  upper_bound(const _Kt& __x) const
-40039:  -> decltype(iterator(_M_t._M_upper_bound_tr(__x)))
-40039:  { return const_iterator(_M_t._M_upper_bound_tr(__x)); }
-40039: # 878 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:       std::pair<iterator, iterator>
-40039:       equal_range(const key_type& __x)
-40039:       { return _M_t.equal_range(__x); }
-40039: 
-40039:       std::pair<const_iterator, const_iterator>
-40039:       equal_range(const key_type& __x) const
-40039:       { return _M_t.equal_range(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  equal_range(const _Kt& __x)
-40039:  -> decltype(pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)))
-40039:  { return pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)); }
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  equal_range(const _Kt& __x) const
-40039:  -> decltype(pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)))
-40039:  { return pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)); }
-40039: 
-40039: 
-40039: 
-40039:       template<typename _K1, typename _C1, typename _A1>
-40039:  friend bool
-40039:  operator==(const set<_K1, _C1, _A1>&, const set<_K1, _C1, _A1>&);
-40039: 
-40039:       template<typename _K1, typename _C1, typename _A1>
-40039:  friend bool
-40039:  operator<(const set<_K1, _C1, _A1>&, const set<_K1, _C1, _A1>&);
-40039:     };
-40039: # 956 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:   template<typename _Key, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator==(const set<_Key, _Compare, _Alloc>& __x,
-40039:         const set<_Key, _Compare, _Alloc>& __y)
-40039:     { return __x._M_t == __y._M_t; }
-40039: # 973 "/usr/include/c++/8/bits/stl_set.h" 3
-40039:   template<typename _Key, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator<(const set<_Key, _Compare, _Alloc>& __x,
-40039:        const set<_Key, _Compare, _Alloc>& __y)
-40039:     { return __x._M_t < __y._M_t; }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator!=(const set<_Key, _Compare, _Alloc>& __x,
-40039:         const set<_Key, _Compare, _Alloc>& __y)
-40039:     { return !(__x == __y); }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator>(const set<_Key, _Compare, _Alloc>& __x,
-40039:        const set<_Key, _Compare, _Alloc>& __y)
-40039:     { return __y < __x; }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator<=(const set<_Key, _Compare, _Alloc>& __x,
-40039:         const set<_Key, _Compare, _Alloc>& __y)
-40039:     { return !(__y < __x); }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator>=(const set<_Key, _Compare, _Alloc>& __x,
-40039:         const set<_Key, _Compare, _Alloc>& __y)
-40039:     { return !(__x < __y); }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Compare, typename _Alloc>
-40039:     inline void
-40039:     swap(set<_Key, _Compare, _Alloc>& __x, set<_Key, _Compare, _Alloc>& __y)
-40039:     noexcept(noexcept(__x.swap(__y)))
-40039:     { __x.swap(__y); }
-40039: 
-40039: 
-40039: # 1035 "/usr/include/c++/8/bits/stl_set.h" 3
-40039: 
-40039: }
-40039: # 62 "/usr/include/c++/8/set" 2 3
-40039: # 1 "/usr/include/c++/8/bits/stl_multiset.h" 1 3
-40039: # 64 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Compare, typename _Alloc>
-40039:     class set;
-40039: # 94 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:   template <typename _Key, typename _Compare = std::less<_Key>,
-40039:      typename _Alloc = std::allocator<_Key> >
-40039:     class multiset
-40039:     {
-40039: # 110 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       static_assert(is_same<typename remove_cv<_Key>::type, _Key>::value,
-40039:    "std::multiset must have a non-const, non-volatile value_type");
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     public:
-40039: 
-40039:       typedef _Key key_type;
-40039:       typedef _Key value_type;
-40039:       typedef _Compare key_compare;
-40039:       typedef _Compare value_compare;
-40039:       typedef _Alloc allocator_type;
-40039: 
-40039:     private:
-40039: 
-40039:       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
-40039:  rebind<_Key>::other _Key_alloc_type;
-40039: 
-40039:       typedef _Rb_tree<key_type, value_type, _Identity<value_type>,
-40039:          key_compare, _Key_alloc_type> _Rep_type;
-40039: 
-40039:       _Rep_type _M_t;
-40039: 
-40039:       typedef __gnu_cxx::__alloc_traits<_Key_alloc_type> _Alloc_traits;
-40039: 
-40039:     public:
-40039:       typedef typename _Alloc_traits::pointer pointer;
-40039:       typedef typename _Alloc_traits::const_pointer const_pointer;
-40039:       typedef typename _Alloc_traits::reference reference;
-40039:       typedef typename _Alloc_traits::const_reference const_reference;
-40039: 
-40039: 
-40039: 
-40039:       typedef typename _Rep_type::const_iterator iterator;
-40039:       typedef typename _Rep_type::const_iterator const_iterator;
-40039:       typedef typename _Rep_type::const_reverse_iterator reverse_iterator;
-40039:       typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
-40039:       typedef typename _Rep_type::size_type size_type;
-40039:       typedef typename _Rep_type::difference_type difference_type;
-40039: # 164 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       multiset() = default;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       explicit
-40039:       multiset(const _Compare& __comp,
-40039:         const allocator_type& __a = allocator_type())
-40039:       : _M_t(__comp, _Key_alloc_type(__a)) { }
-40039: # 186 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       template<typename _InputIterator>
-40039:  multiset(_InputIterator __first, _InputIterator __last)
-40039:  : _M_t()
-40039:  { _M_t._M_insert_equal(__first, __last); }
-40039: # 202 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       template<typename _InputIterator>
-40039:  multiset(_InputIterator __first, _InputIterator __last,
-40039:    const _Compare& __comp,
-40039:    const allocator_type& __a = allocator_type())
-40039:  : _M_t(__comp, _Key_alloc_type(__a))
-40039:  { _M_t._M_insert_equal(__first, __last); }
-40039: # 218 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       multiset(const multiset&) = default;
-40039: # 227 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       multiset(multiset&&) = default;
-40039: # 239 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       multiset(initializer_list<value_type> __l,
-40039:         const _Compare& __comp = _Compare(),
-40039:         const allocator_type& __a = allocator_type())
-40039:       : _M_t(__comp, _Key_alloc_type(__a))
-40039:       { _M_t._M_insert_equal(__l.begin(), __l.end()); }
-40039: 
-40039: 
-40039:       explicit
-40039:       multiset(const allocator_type& __a)
-40039:       : _M_t(_Compare(), _Key_alloc_type(__a)) { }
-40039: 
-40039: 
-40039:       multiset(const multiset& __m, const allocator_type& __a)
-40039:       : _M_t(__m._M_t, _Key_alloc_type(__a)) { }
-40039: 
-40039: 
-40039:       multiset(multiset&& __m, const allocator_type& __a)
-40039:       noexcept(is_nothrow_copy_constructible<_Compare>::value
-40039:         && _Alloc_traits::_S_always_equal())
-40039:       : _M_t(std::move(__m._M_t), _Key_alloc_type(__a)) { }
-40039: 
-40039: 
-40039:       multiset(initializer_list<value_type> __l, const allocator_type& __a)
-40039:       : _M_t(_Compare(), _Key_alloc_type(__a))
-40039:       { _M_t._M_insert_equal(__l.begin(), __l.end()); }
-40039: 
-40039: 
-40039:       template<typename _InputIterator>
-40039:  multiset(_InputIterator __first, _InputIterator __last,
-40039:    const allocator_type& __a)
-40039:  : _M_t(_Compare(), _Key_alloc_type(__a))
-40039:  { _M_t._M_insert_equal(__first, __last); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       ~multiset() = default;
-40039: # 293 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       multiset&
-40039:       operator=(const multiset&) = default;
-40039: 
-40039: 
-40039:       multiset&
-40039:       operator=(multiset&&) = default;
-40039: # 311 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       multiset&
-40039:       operator=(initializer_list<value_type> __l)
-40039:       {
-40039:  _M_t._M_assign_equal(__l.begin(), __l.end());
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       key_compare
-40039:       key_comp() const
-40039:       { return _M_t.key_comp(); }
-40039: 
-40039:       value_compare
-40039:       value_comp() const
-40039:       { return _M_t.key_comp(); }
-40039: 
-40039:       allocator_type
-40039:       get_allocator() const noexcept
-40039:       { return allocator_type(_M_t.get_allocator()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       begin() const noexcept
-40039:       { return _M_t.begin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       end() const noexcept
-40039:       { return _M_t.end(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       rbegin() const noexcept
-40039:       { return _M_t.rbegin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       rend() const noexcept
-40039:       { return _M_t.rend(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       cbegin() const noexcept
-40039:       { return _M_t.begin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       cend() const noexcept
-40039:       { return _M_t.end(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       crbegin() const noexcept
-40039:       { return _M_t.rbegin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       crend() const noexcept
-40039:       { return _M_t.rend(); }
-40039: 
-40039: 
-40039: 
-40039:       bool
-40039:       empty() const noexcept
-40039:       { return _M_t.empty(); }
-40039: 
-40039: 
-40039:       size_type
-40039:       size() const noexcept
-40039:       { return _M_t.size(); }
-40039: 
-40039: 
-40039:       size_type
-40039:       max_size() const noexcept
-40039:       { return _M_t.max_size(); }
-40039: # 436 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       void
-40039:       swap(multiset& __x)
-40039:       noexcept(__is_nothrow_swappable<_Compare>::value)
-40039:       { _M_t.swap(__x._M_t); }
-40039: # 455 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       template<typename... _Args>
-40039:  iterator
-40039:  emplace(_Args&&... __args)
-40039:  { return _M_t._M_emplace_equal(std::forward<_Args>(__args)...); }
-40039: # 481 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       template<typename... _Args>
-40039:  iterator
-40039:  emplace_hint(const_iterator __pos, _Args&&... __args)
-40039:  {
-40039:    return _M_t._M_emplace_hint_equal(__pos,
-40039:          std::forward<_Args>(__args)...);
-40039:  }
-40039: # 501 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       iterator
-40039:       insert(const value_type& __x)
-40039:       { return _M_t._M_insert_equal(__x); }
-40039: 
-40039: 
-40039:       iterator
-40039:       insert(value_type&& __x)
-40039:       { return _M_t._M_insert_equal(std::move(__x)); }
-40039: # 531 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       iterator
-40039:       insert(const_iterator __position, const value_type& __x)
-40039:       { return _M_t._M_insert_equal_(__position, __x); }
-40039: 
-40039: 
-40039:       iterator
-40039:       insert(const_iterator __position, value_type&& __x)
-40039:       { return _M_t._M_insert_equal_(__position, std::move(__x)); }
-40039: # 549 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  insert(_InputIterator __first, _InputIterator __last)
-40039:  { _M_t._M_insert_equal(__first, __last); }
-40039: # 562 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       void
-40039:       insert(initializer_list<value_type> __l)
-40039:       { this->insert(__l.begin(), __l.end()); }
-40039: # 637 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       __attribute ((__abi_tag__ ("cxx11")))
-40039:       iterator
-40039:       erase(const_iterator __position)
-40039:       { return _M_t.erase(__position); }
-40039: # 668 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       size_type
-40039:       erase(const key_type& __x)
-40039:       { return _M_t.erase(__x); }
-40039: # 689 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       __attribute ((__abi_tag__ ("cxx11")))
-40039:       iterator
-40039:       erase(const_iterator __first, const_iterator __last)
-40039:       { return _M_t.erase(__first, __last); }
-40039: # 717 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       void
-40039:       clear() noexcept
-40039:       { _M_t.clear(); }
-40039: # 729 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       size_type
-40039:       count(const key_type& __x) const
-40039:       { return _M_t.count(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  count(const _Kt& __x) const -> decltype(_M_t._M_count_tr(__x))
-40039:  { return _M_t._M_count_tr(__x); }
-40039: # 755 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       iterator
-40039:       find(const key_type& __x)
-40039:       { return _M_t.find(__x); }
-40039: 
-40039:       const_iterator
-40039:       find(const key_type& __x) const
-40039:       { return _M_t.find(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  find(const _Kt& __x)
-40039:  -> decltype(iterator{_M_t._M_find_tr(__x)})
-40039:  { return iterator{_M_t._M_find_tr(__x)}; }
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  find(const _Kt& __x) const
-40039:  -> decltype(const_iterator{_M_t._M_find_tr(__x)})
-40039:  { return const_iterator{_M_t._M_find_tr(__x)}; }
-40039: # 790 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       iterator
-40039:       lower_bound(const key_type& __x)
-40039:       { return _M_t.lower_bound(__x); }
-40039: 
-40039:       const_iterator
-40039:       lower_bound(const key_type& __x) const
-40039:       { return _M_t.lower_bound(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  lower_bound(const _Kt& __x)
-40039:  -> decltype(iterator(_M_t._M_lower_bound_tr(__x)))
-40039:  { return iterator(_M_t._M_lower_bound_tr(__x)); }
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  lower_bound(const _Kt& __x) const
-40039:  -> decltype(iterator(_M_t._M_lower_bound_tr(__x)))
-40039:  { return iterator(_M_t._M_lower_bound_tr(__x)); }
-40039: # 820 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       iterator
-40039:       upper_bound(const key_type& __x)
-40039:       { return _M_t.upper_bound(__x); }
-40039: 
-40039:       const_iterator
-40039:       upper_bound(const key_type& __x) const
-40039:       { return _M_t.upper_bound(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  upper_bound(const _Kt& __x)
-40039:  -> decltype(iterator(_M_t._M_upper_bound_tr(__x)))
-40039:  { return iterator(_M_t._M_upper_bound_tr(__x)); }
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  upper_bound(const _Kt& __x) const
-40039:  -> decltype(iterator(_M_t._M_upper_bound_tr(__x)))
-40039:  { return iterator(_M_t._M_upper_bound_tr(__x)); }
-40039: # 859 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:       std::pair<iterator, iterator>
-40039:       equal_range(const key_type& __x)
-40039:       { return _M_t.equal_range(__x); }
-40039: 
-40039:       std::pair<const_iterator, const_iterator>
-40039:       equal_range(const key_type& __x) const
-40039:       { return _M_t.equal_range(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  equal_range(const _Kt& __x)
-40039:  -> decltype(pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)))
-40039:  { return pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)); }
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  equal_range(const _Kt& __x) const
-40039:  -> decltype(pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)))
-40039:  { return pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)); }
-40039: 
-40039: 
-40039: 
-40039:       template<typename _K1, typename _C1, typename _A1>
-40039:  friend bool
-40039:  operator==(const multiset<_K1, _C1, _A1>&,
-40039:      const multiset<_K1, _C1, _A1>&);
-40039: 
-40039:       template<typename _K1, typename _C1, typename _A1>
-40039:  friend bool
-40039:  operator< (const multiset<_K1, _C1, _A1>&,
-40039:      const multiset<_K1, _C1, _A1>&);
-40039:     };
-40039: # 941 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:   template<typename _Key, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator==(const multiset<_Key, _Compare, _Alloc>& __x,
-40039:         const multiset<_Key, _Compare, _Alloc>& __y)
-40039:     { return __x._M_t == __y._M_t; }
-40039: # 958 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039:   template<typename _Key, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator<(const multiset<_Key, _Compare, _Alloc>& __x,
-40039:        const multiset<_Key, _Compare, _Alloc>& __y)
-40039:     { return __x._M_t < __y._M_t; }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator!=(const multiset<_Key, _Compare, _Alloc>& __x,
-40039:         const multiset<_Key, _Compare, _Alloc>& __y)
-40039:     { return !(__x == __y); }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator>(const multiset<_Key,_Compare,_Alloc>& __x,
-40039:        const multiset<_Key,_Compare,_Alloc>& __y)
-40039:     { return __y < __x; }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator<=(const multiset<_Key, _Compare, _Alloc>& __x,
-40039:         const multiset<_Key, _Compare, _Alloc>& __y)
-40039:     { return !(__y < __x); }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator>=(const multiset<_Key, _Compare, _Alloc>& __x,
-40039:         const multiset<_Key, _Compare, _Alloc>& __y)
-40039:     { return !(__x < __y); }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Compare, typename _Alloc>
-40039:     inline void
-40039:     swap(multiset<_Key, _Compare, _Alloc>& __x,
-40039:   multiset<_Key, _Compare, _Alloc>& __y)
-40039:     noexcept(noexcept(__x.swap(__y)))
-40039:     { __x.swap(__y); }
-40039: 
-40039: 
-40039: # 1023 "/usr/include/c++/8/bits/stl_multiset.h" 3
-40039: 
-40039: }
-40039: # 63 "/usr/include/c++/8/set" 2 3
-40039: # 34 "../../src/Float_defs.hh" 2
-40039: # 1 "/usr/include/c++/8/cmath" 1 3
-40039: # 39 "/usr/include/c++/8/cmath" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/cmath" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/math.h" 1 3 4
-40039: # 27 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 1 3 4
-40039: # 28 "/usr/include/math.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern "C" {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/math-vector.h" 1 3 4
-40039: # 25 "/usr/include/x86_64-linux-gnu/bits/math-vector.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h" 1 3 4
-40039: # 26 "/usr/include/x86_64-linux-gnu/bits/math-vector.h" 2 3 4
-40039: # 41 "/usr/include/math.h" 2 3 4
-40039: # 138 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/flt-eval-method.h" 1 3 4
-40039: # 139 "/usr/include/math.h" 2 3 4
-40039: # 149 "/usr/include/math.h" 3 4
-40039: typedef float float_t;
-40039: typedef double double_t;
-40039: # 190 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/fp-logb.h" 1 3 4
-40039: # 191 "/usr/include/math.h" 2 3 4
-40039: # 233 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/fp-fast.h" 1 3 4
-40039: # 234 "/usr/include/math.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: enum
-40039:   {
-40039:     FP_INT_UPWARD =
-40039: 
-40039:       0,
-40039:     FP_INT_DOWNWARD =
-40039: 
-40039:       1,
-40039:     FP_INT_TOWARDZERO =
-40039: 
-40039:       2,
-40039:     FP_INT_TONEARESTFROMZERO =
-40039: 
-40039:       3,
-40039:     FP_INT_TONEAREST =
-40039: 
-40039:       4,
-40039:   };
-40039: # 289 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h" 1 3 4
-40039: # 21 "/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h" 3 4
-40039: extern int __fpclassify (double __value) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int __signbit (double __value) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: extern int __isinf (double __value) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int __finite (double __value) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int __isnan (double __value) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int __iseqsig (double __x, double __y) throw ();
-40039: 
-40039: 
-40039: extern int __issignaling (double __value) throw ()
-40039:      __attribute__ ((__const__));
-40039: # 290 "/usr/include/math.h" 2 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 1 3 4
-40039: # 53 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern double acos (double __x) throw (); extern double __acos (double __x) throw ();
-40039: 
-40039: extern double asin (double __x) throw (); extern double __asin (double __x) throw ();
-40039: 
-40039: extern double atan (double __x) throw (); extern double __atan (double __x) throw ();
-40039: 
-40039: extern double atan2 (double __y, double __x) throw (); extern double __atan2 (double __y, double __x) throw ();
-40039: 
-40039: 
-40039:  extern double cos (double __x) throw (); extern double __cos (double __x) throw ();
-40039: 
-40039:  extern double sin (double __x) throw (); extern double __sin (double __x) throw ();
-40039: 
-40039: extern double tan (double __x) throw (); extern double __tan (double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern double cosh (double __x) throw (); extern double __cosh (double __x) throw ();
-40039: 
-40039: extern double sinh (double __x) throw (); extern double __sinh (double __x) throw ();
-40039: 
-40039: extern double tanh (double __x) throw (); extern double __tanh (double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039:  extern void sincos (double __x, double *__sinx, double *__cosx) throw (); extern void __sincos (double __x, double *__sinx, double *__cosx) throw ()
-40039:                                                         ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern double acosh (double __x) throw (); extern double __acosh (double __x) throw ();
-40039: 
-40039: extern double asinh (double __x) throw (); extern double __asinh (double __x) throw ();
-40039: 
-40039: extern double atanh (double __x) throw (); extern double __atanh (double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  extern double exp (double __x) throw (); extern double __exp (double __x) throw ();
-40039: 
-40039: 
-40039: extern double frexp (double __x, int *__exponent) throw (); extern double __frexp (double __x, int *__exponent) throw ();
-40039: 
-40039: 
-40039: extern double ldexp (double __x, int __exponent) throw (); extern double __ldexp (double __x, int __exponent) throw ();
-40039: 
-40039: 
-40039:  extern double log (double __x) throw (); extern double __log (double __x) throw ();
-40039: 
-40039: 
-40039: extern double log10 (double __x) throw (); extern double __log10 (double __x) throw ();
-40039: 
-40039: 
-40039: extern double modf (double __x, double *__iptr) throw (); extern double __modf (double __x, double *__iptr) throw () __attribute__ ((__nonnull__ (2)));
-40039: 
-40039: 
-40039: 
-40039: extern double exp10 (double __x) throw (); extern double __exp10 (double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern double expm1 (double __x) throw (); extern double __expm1 (double __x) throw ();
-40039: 
-40039: 
-40039: extern double log1p (double __x) throw (); extern double __log1p (double __x) throw ();
-40039: 
-40039: 
-40039: extern double logb (double __x) throw (); extern double __logb (double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern double exp2 (double __x) throw (); extern double __exp2 (double __x) throw ();
-40039: 
-40039: 
-40039: extern double log2 (double __x) throw (); extern double __log2 (double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  extern double pow (double __x, double __y) throw (); extern double __pow (double __x, double __y) throw ();
-40039: 
-40039: 
-40039: extern double sqrt (double __x) throw (); extern double __sqrt (double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern double hypot (double __x, double __y) throw (); extern double __hypot (double __x, double __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern double cbrt (double __x) throw (); extern double __cbrt (double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern double ceil (double __x) throw () __attribute__ ((__const__)); extern double __ceil (double __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern double fabs (double __x) throw () __attribute__ ((__const__)); extern double __fabs (double __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern double floor (double __x) throw () __attribute__ ((__const__)); extern double __floor (double __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern double fmod (double __x, double __y) throw (); extern double __fmod (double __x, double __y) throw ();
-40039: # 182 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern int finite (double __value) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern double drem (double __x, double __y) throw (); extern double __drem (double __x, double __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern double significand (double __x) throw (); extern double __significand (double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern double copysign (double __x, double __y) throw () __attribute__ ((__const__)); extern double __copysign (double __x, double __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern double nan (const char *__tagb) throw (); extern double __nan (const char *__tagb) throw ();
-40039: # 217 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern double j0 (double) throw (); extern double __j0 (double) throw ();
-40039: extern double j1 (double) throw (); extern double __j1 (double) throw ();
-40039: extern double jn (int, double) throw (); extern double __jn (int, double) throw ();
-40039: extern double y0 (double) throw (); extern double __y0 (double) throw ();
-40039: extern double y1 (double) throw (); extern double __y1 (double) throw ();
-40039: extern double yn (int, double) throw (); extern double __yn (int, double) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern double erf (double) throw (); extern double __erf (double) throw ();
-40039: extern double erfc (double) throw (); extern double __erfc (double) throw ();
-40039: extern double lgamma (double) throw (); extern double __lgamma (double) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern double tgamma (double) throw (); extern double __tgamma (double) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern double gamma (double) throw (); extern double __gamma (double) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern double lgamma_r (double, int *__signgamp) throw (); extern double __lgamma_r (double, int *__signgamp) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern double rint (double __x) throw (); extern double __rint (double __x) throw ();
-40039: 
-40039: 
-40039: extern double nextafter (double __x, double __y) throw (); extern double __nextafter (double __x, double __y) throw ();
-40039: 
-40039: extern double nexttoward (double __x, long double __y) throw (); extern double __nexttoward (double __x, long double __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern double nextdown (double __x) throw (); extern double __nextdown (double __x) throw ();
-40039: 
-40039: extern double nextup (double __x) throw (); extern double __nextup (double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern double remainder (double __x, double __y) throw (); extern double __remainder (double __x, double __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern double scalbn (double __x, int __n) throw (); extern double __scalbn (double __x, int __n) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int ilogb (double __x) throw (); extern int __ilogb (double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long int llogb (double __x) throw (); extern long int __llogb (double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern double scalbln (double __x, long int __n) throw (); extern double __scalbln (double __x, long int __n) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern double nearbyint (double __x) throw (); extern double __nearbyint (double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern double round (double __x) throw () __attribute__ ((__const__)); extern double __round (double __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: extern double trunc (double __x) throw () __attribute__ ((__const__)); extern double __trunc (double __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern double remquo (double __x, double __y, int *__quo) throw (); extern double __remquo (double __x, double __y, int *__quo) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long int lrint (double __x) throw (); extern long int __lrint (double __x) throw ();
-40039: __extension__
-40039: extern long long int llrint (double __x) throw (); extern long long int __llrint (double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern long int lround (double __x) throw (); extern long int __lround (double __x) throw ();
-40039: __extension__
-40039: extern long long int llround (double __x) throw (); extern long long int __llround (double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern double fdim (double __x, double __y) throw (); extern double __fdim (double __x, double __y) throw ();
-40039: 
-40039: 
-40039: extern double fmax (double __x, double __y) throw () __attribute__ ((__const__)); extern double __fmax (double __x, double __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern double fmin (double __x, double __y) throw () __attribute__ ((__const__)); extern double __fmin (double __x, double __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern double fma (double __x, double __y, double __z) throw (); extern double __fma (double __x, double __y, double __z) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern double roundeven (double __x) throw () __attribute__ ((__const__)); extern double __roundeven (double __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: extern __intmax_t fromfp (double __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfp (double __x, int __round, unsigned int __width) throw ()
-40039:                             ;
-40039: 
-40039: 
-40039: 
-40039: extern __uintmax_t ufromfp (double __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfp (double __x, int __round, unsigned int __width) throw ()
-40039:                               ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __intmax_t fromfpx (double __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpx (double __x, int __round, unsigned int __width) throw ()
-40039:                              ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __uintmax_t ufromfpx (double __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpx (double __x, int __round, unsigned int __width) throw ()
-40039:                                ;
-40039: 
-40039: 
-40039: extern double fmaxmag (double __x, double __y) throw () __attribute__ ((__const__)); extern double __fmaxmag (double __x, double __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern double fminmag (double __x, double __y) throw () __attribute__ ((__const__)); extern double __fminmag (double __x, double __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int totalorder (double __x, double __y) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int totalordermag (double __x, double __y) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int canonicalize (double *__cx, const double *__x) throw ();
-40039: 
-40039: 
-40039: extern double getpayload (const double *__x) throw (); extern double __getpayload (const double *__x) throw ();
-40039: 
-40039: 
-40039: extern int setpayload (double *__x, double __payload) throw ();
-40039: 
-40039: 
-40039: extern int setpayloadsig (double *__x, double __payload) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern double scalb (double __x, double __n) throw (); extern double __scalb (double __x, double __n) throw ();
-40039: # 291 "/usr/include/math.h" 2 3 4
-40039: # 306 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h" 1 3 4
-40039: # 21 "/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h" 3 4
-40039: extern int __fpclassifyf (float __value) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int __signbitf (float __value) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: extern int __isinff (float __value) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int __finitef (float __value) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int __isnanf (float __value) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int __iseqsigf (float __x, float __y) throw ();
-40039: 
-40039: 
-40039: extern int __issignalingf (float __value) throw ()
-40039:      __attribute__ ((__const__));
-40039: # 307 "/usr/include/math.h" 2 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 1 3 4
-40039: # 53 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern float acosf (float __x) throw (); extern float __acosf (float __x) throw ();
-40039: 
-40039: extern float asinf (float __x) throw (); extern float __asinf (float __x) throw ();
-40039: 
-40039: extern float atanf (float __x) throw (); extern float __atanf (float __x) throw ();
-40039: 
-40039: extern float atan2f (float __y, float __x) throw (); extern float __atan2f (float __y, float __x) throw ();
-40039: 
-40039: 
-40039:  extern float cosf (float __x) throw (); extern float __cosf (float __x) throw ();
-40039: 
-40039:  extern float sinf (float __x) throw (); extern float __sinf (float __x) throw ();
-40039: 
-40039: extern float tanf (float __x) throw (); extern float __tanf (float __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern float coshf (float __x) throw (); extern float __coshf (float __x) throw ();
-40039: 
-40039: extern float sinhf (float __x) throw (); extern float __sinhf (float __x) throw ();
-40039: 
-40039: extern float tanhf (float __x) throw (); extern float __tanhf (float __x) throw ();
-40039: 
-40039: 
-40039: 
-40039:  extern void sincosf (float __x, float *__sinx, float *__cosx) throw (); extern void __sincosf (float __x, float *__sinx, float *__cosx) throw ()
-40039:                                                         ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern float acoshf (float __x) throw (); extern float __acoshf (float __x) throw ();
-40039: 
-40039: extern float asinhf (float __x) throw (); extern float __asinhf (float __x) throw ();
-40039: 
-40039: extern float atanhf (float __x) throw (); extern float __atanhf (float __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  extern float expf (float __x) throw (); extern float __expf (float __x) throw ();
-40039: 
-40039: 
-40039: extern float frexpf (float __x, int *__exponent) throw (); extern float __frexpf (float __x, int *__exponent) throw ();
-40039: 
-40039: 
-40039: extern float ldexpf (float __x, int __exponent) throw (); extern float __ldexpf (float __x, int __exponent) throw ();
-40039: 
-40039: 
-40039:  extern float logf (float __x) throw (); extern float __logf (float __x) throw ();
-40039: 
-40039: 
-40039: extern float log10f (float __x) throw (); extern float __log10f (float __x) throw ();
-40039: 
-40039: 
-40039: extern float modff (float __x, float *__iptr) throw (); extern float __modff (float __x, float *__iptr) throw () __attribute__ ((__nonnull__ (2)));
-40039: 
-40039: 
-40039: 
-40039: extern float exp10f (float __x) throw (); extern float __exp10f (float __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern float expm1f (float __x) throw (); extern float __expm1f (float __x) throw ();
-40039: 
-40039: 
-40039: extern float log1pf (float __x) throw (); extern float __log1pf (float __x) throw ();
-40039: 
-40039: 
-40039: extern float logbf (float __x) throw (); extern float __logbf (float __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern float exp2f (float __x) throw (); extern float __exp2f (float __x) throw ();
-40039: 
-40039: 
-40039: extern float log2f (float __x) throw (); extern float __log2f (float __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  extern float powf (float __x, float __y) throw (); extern float __powf (float __x, float __y) throw ();
-40039: 
-40039: 
-40039: extern float sqrtf (float __x) throw (); extern float __sqrtf (float __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern float hypotf (float __x, float __y) throw (); extern float __hypotf (float __x, float __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern float cbrtf (float __x) throw (); extern float __cbrtf (float __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern float ceilf (float __x) throw () __attribute__ ((__const__)); extern float __ceilf (float __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern float fabsf (float __x) throw () __attribute__ ((__const__)); extern float __fabsf (float __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern float floorf (float __x) throw () __attribute__ ((__const__)); extern float __floorf (float __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern float fmodf (float __x, float __y) throw (); extern float __fmodf (float __x, float __y) throw ();
-40039: # 177 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern int isinff (float __value) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int finitef (float __value) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern float dremf (float __x, float __y) throw (); extern float __dremf (float __x, float __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern float significandf (float __x) throw (); extern float __significandf (float __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern float copysignf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __copysignf (float __x, float __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern float nanf (const char *__tagb) throw (); extern float __nanf (const char *__tagb) throw ();
-40039: # 211 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern int isnanf (float __value) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern float j0f (float) throw (); extern float __j0f (float) throw ();
-40039: extern float j1f (float) throw (); extern float __j1f (float) throw ();
-40039: extern float jnf (int, float) throw (); extern float __jnf (int, float) throw ();
-40039: extern float y0f (float) throw (); extern float __y0f (float) throw ();
-40039: extern float y1f (float) throw (); extern float __y1f (float) throw ();
-40039: extern float ynf (int, float) throw (); extern float __ynf (int, float) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern float erff (float) throw (); extern float __erff (float) throw ();
-40039: extern float erfcf (float) throw (); extern float __erfcf (float) throw ();
-40039: extern float lgammaf (float) throw (); extern float __lgammaf (float) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern float tgammaf (float) throw (); extern float __tgammaf (float) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern float gammaf (float) throw (); extern float __gammaf (float) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern float lgammaf_r (float, int *__signgamp) throw (); extern float __lgammaf_r (float, int *__signgamp) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern float rintf (float __x) throw (); extern float __rintf (float __x) throw ();
-40039: 
-40039: 
-40039: extern float nextafterf (float __x, float __y) throw (); extern float __nextafterf (float __x, float __y) throw ();
-40039: 
-40039: extern float nexttowardf (float __x, long double __y) throw (); extern float __nexttowardf (float __x, long double __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern float nextdownf (float __x) throw (); extern float __nextdownf (float __x) throw ();
-40039: 
-40039: extern float nextupf (float __x) throw (); extern float __nextupf (float __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern float remainderf (float __x, float __y) throw (); extern float __remainderf (float __x, float __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern float scalbnf (float __x, int __n) throw (); extern float __scalbnf (float __x, int __n) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int ilogbf (float __x) throw (); extern int __ilogbf (float __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long int llogbf (float __x) throw (); extern long int __llogbf (float __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern float scalblnf (float __x, long int __n) throw (); extern float __scalblnf (float __x, long int __n) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern float nearbyintf (float __x) throw (); extern float __nearbyintf (float __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern float roundf (float __x) throw () __attribute__ ((__const__)); extern float __roundf (float __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: extern float truncf (float __x) throw () __attribute__ ((__const__)); extern float __truncf (float __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern float remquof (float __x, float __y, int *__quo) throw (); extern float __remquof (float __x, float __y, int *__quo) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long int lrintf (float __x) throw (); extern long int __lrintf (float __x) throw ();
-40039: __extension__
-40039: extern long long int llrintf (float __x) throw (); extern long long int __llrintf (float __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern long int lroundf (float __x) throw (); extern long int __lroundf (float __x) throw ();
-40039: __extension__
-40039: extern long long int llroundf (float __x) throw (); extern long long int __llroundf (float __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern float fdimf (float __x, float __y) throw (); extern float __fdimf (float __x, float __y) throw ();
-40039: 
-40039: 
-40039: extern float fmaxf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __fmaxf (float __x, float __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern float fminf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __fminf (float __x, float __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern float fmaf (float __x, float __y, float __z) throw (); extern float __fmaf (float __x, float __y, float __z) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern float roundevenf (float __x) throw () __attribute__ ((__const__)); extern float __roundevenf (float __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: extern __intmax_t fromfpf (float __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpf (float __x, int __round, unsigned int __width) throw ()
-40039:                             ;
-40039: 
-40039: 
-40039: 
-40039: extern __uintmax_t ufromfpf (float __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpf (float __x, int __round, unsigned int __width) throw ()
-40039:                               ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __intmax_t fromfpxf (float __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpxf (float __x, int __round, unsigned int __width) throw ()
-40039:                              ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __uintmax_t ufromfpxf (float __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpxf (float __x, int __round, unsigned int __width) throw ()
-40039:                                ;
-40039: 
-40039: 
-40039: extern float fmaxmagf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __fmaxmagf (float __x, float __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern float fminmagf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __fminmagf (float __x, float __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int totalorderf (float __x, float __y) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int totalordermagf (float __x, float __y) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int canonicalizef (float *__cx, const float *__x) throw ();
-40039: 
-40039: 
-40039: extern float getpayloadf (const float *__x) throw (); extern float __getpayloadf (const float *__x) throw ();
-40039: 
-40039: 
-40039: extern int setpayloadf (float *__x, float __payload) throw ();
-40039: 
-40039: 
-40039: extern int setpayloadsigf (float *__x, float __payload) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern float scalbf (float __x, float __n) throw (); extern float __scalbf (float __x, float __n) throw ();
-40039: # 308 "/usr/include/math.h" 2 3 4
-40039: # 349 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h" 1 3 4
-40039: # 21 "/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h" 3 4
-40039: extern int __fpclassifyl (long double __value) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int __signbitl (long double __value) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: extern int __isinfl (long double __value) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int __finitel (long double __value) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int __isnanl (long double __value) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int __iseqsigl (long double __x, long double __y) throw ();
-40039: 
-40039: 
-40039: extern int __issignalingl (long double __value) throw ()
-40039:      __attribute__ ((__const__));
-40039: # 350 "/usr/include/math.h" 2 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 1 3 4
-40039: # 53 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern long double acosl (long double __x) throw (); extern long double __acosl (long double __x) throw ();
-40039: 
-40039: extern long double asinl (long double __x) throw (); extern long double __asinl (long double __x) throw ();
-40039: 
-40039: extern long double atanl (long double __x) throw (); extern long double __atanl (long double __x) throw ();
-40039: 
-40039: extern long double atan2l (long double __y, long double __x) throw (); extern long double __atan2l (long double __y, long double __x) throw ();
-40039: 
-40039: 
-40039:  extern long double cosl (long double __x) throw (); extern long double __cosl (long double __x) throw ();
-40039: 
-40039:  extern long double sinl (long double __x) throw (); extern long double __sinl (long double __x) throw ();
-40039: 
-40039: extern long double tanl (long double __x) throw (); extern long double __tanl (long double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long double coshl (long double __x) throw (); extern long double __coshl (long double __x) throw ();
-40039: 
-40039: extern long double sinhl (long double __x) throw (); extern long double __sinhl (long double __x) throw ();
-40039: 
-40039: extern long double tanhl (long double __x) throw (); extern long double __tanhl (long double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039:  extern void sincosl (long double __x, long double *__sinx, long double *__cosx) throw (); extern void __sincosl (long double __x, long double *__sinx, long double *__cosx) throw ()
-40039:                                                         ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long double acoshl (long double __x) throw (); extern long double __acoshl (long double __x) throw ();
-40039: 
-40039: extern long double asinhl (long double __x) throw (); extern long double __asinhl (long double __x) throw ();
-40039: 
-40039: extern long double atanhl (long double __x) throw (); extern long double __atanhl (long double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  extern long double expl (long double __x) throw (); extern long double __expl (long double __x) throw ();
-40039: 
-40039: 
-40039: extern long double frexpl (long double __x, int *__exponent) throw (); extern long double __frexpl (long double __x, int *__exponent) throw ();
-40039: 
-40039: 
-40039: extern long double ldexpl (long double __x, int __exponent) throw (); extern long double __ldexpl (long double __x, int __exponent) throw ();
-40039: 
-40039: 
-40039:  extern long double logl (long double __x) throw (); extern long double __logl (long double __x) throw ();
-40039: 
-40039: 
-40039: extern long double log10l (long double __x) throw (); extern long double __log10l (long double __x) throw ();
-40039: 
-40039: 
-40039: extern long double modfl (long double __x, long double *__iptr) throw (); extern long double __modfl (long double __x, long double *__iptr) throw () __attribute__ ((__nonnull__ (2)));
-40039: 
-40039: 
-40039: 
-40039: extern long double exp10l (long double __x) throw (); extern long double __exp10l (long double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long double expm1l (long double __x) throw (); extern long double __expm1l (long double __x) throw ();
-40039: 
-40039: 
-40039: extern long double log1pl (long double __x) throw (); extern long double __log1pl (long double __x) throw ();
-40039: 
-40039: 
-40039: extern long double logbl (long double __x) throw (); extern long double __logbl (long double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long double exp2l (long double __x) throw (); extern long double __exp2l (long double __x) throw ();
-40039: 
-40039: 
-40039: extern long double log2l (long double __x) throw (); extern long double __log2l (long double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  extern long double powl (long double __x, long double __y) throw (); extern long double __powl (long double __x, long double __y) throw ();
-40039: 
-40039: 
-40039: extern long double sqrtl (long double __x) throw (); extern long double __sqrtl (long double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern long double hypotl (long double __x, long double __y) throw (); extern long double __hypotl (long double __x, long double __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long double cbrtl (long double __x) throw (); extern long double __cbrtl (long double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long double ceill (long double __x) throw () __attribute__ ((__const__)); extern long double __ceill (long double __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern long double fabsl (long double __x) throw () __attribute__ ((__const__)); extern long double __fabsl (long double __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern long double floorl (long double __x) throw () __attribute__ ((__const__)); extern long double __floorl (long double __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern long double fmodl (long double __x, long double __y) throw (); extern long double __fmodl (long double __x, long double __y) throw ();
-40039: # 177 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern int isinfl (long double __value) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int finitel (long double __value) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern long double dreml (long double __x, long double __y) throw (); extern long double __dreml (long double __x, long double __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern long double significandl (long double __x) throw (); extern long double __significandl (long double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long double copysignl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __copysignl (long double __x, long double __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long double nanl (const char *__tagb) throw (); extern long double __nanl (const char *__tagb) throw ();
-40039: # 211 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern int isnanl (long double __value) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long double j0l (long double) throw (); extern long double __j0l (long double) throw ();
-40039: extern long double j1l (long double) throw (); extern long double __j1l (long double) throw ();
-40039: extern long double jnl (int, long double) throw (); extern long double __jnl (int, long double) throw ();
-40039: extern long double y0l (long double) throw (); extern long double __y0l (long double) throw ();
-40039: extern long double y1l (long double) throw (); extern long double __y1l (long double) throw ();
-40039: extern long double ynl (int, long double) throw (); extern long double __ynl (int, long double) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long double erfl (long double) throw (); extern long double __erfl (long double) throw ();
-40039: extern long double erfcl (long double) throw (); extern long double __erfcl (long double) throw ();
-40039: extern long double lgammal (long double) throw (); extern long double __lgammal (long double) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long double tgammal (long double) throw (); extern long double __tgammal (long double) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long double gammal (long double) throw (); extern long double __gammal (long double) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long double lgammal_r (long double, int *__signgamp) throw (); extern long double __lgammal_r (long double, int *__signgamp) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long double rintl (long double __x) throw (); extern long double __rintl (long double __x) throw ();
-40039: 
-40039: 
-40039: extern long double nextafterl (long double __x, long double __y) throw (); extern long double __nextafterl (long double __x, long double __y) throw ();
-40039: 
-40039: extern long double nexttowardl (long double __x, long double __y) throw (); extern long double __nexttowardl (long double __x, long double __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long double nextdownl (long double __x) throw (); extern long double __nextdownl (long double __x) throw ();
-40039: 
-40039: extern long double nextupl (long double __x) throw (); extern long double __nextupl (long double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern long double remainderl (long double __x, long double __y) throw (); extern long double __remainderl (long double __x, long double __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern long double scalbnl (long double __x, int __n) throw (); extern long double __scalbnl (long double __x, int __n) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int ilogbl (long double __x) throw (); extern int __ilogbl (long double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long int llogbl (long double __x) throw (); extern long int __llogbl (long double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long double scalblnl (long double __x, long int __n) throw (); extern long double __scalblnl (long double __x, long int __n) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern long double nearbyintl (long double __x) throw (); extern long double __nearbyintl (long double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern long double roundl (long double __x) throw () __attribute__ ((__const__)); extern long double __roundl (long double __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: extern long double truncl (long double __x) throw () __attribute__ ((__const__)); extern long double __truncl (long double __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long double remquol (long double __x, long double __y, int *__quo) throw (); extern long double __remquol (long double __x, long double __y, int *__quo) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long int lrintl (long double __x) throw (); extern long int __lrintl (long double __x) throw ();
-40039: __extension__
-40039: extern long long int llrintl (long double __x) throw (); extern long long int __llrintl (long double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern long int lroundl (long double __x) throw (); extern long int __lroundl (long double __x) throw ();
-40039: __extension__
-40039: extern long long int llroundl (long double __x) throw (); extern long long int __llroundl (long double __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern long double fdiml (long double __x, long double __y) throw (); extern long double __fdiml (long double __x, long double __y) throw ();
-40039: 
-40039: 
-40039: extern long double fmaxl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __fmaxl (long double __x, long double __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern long double fminl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __fminl (long double __x, long double __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern long double fmal (long double __x, long double __y, long double __z) throw (); extern long double __fmal (long double __x, long double __y, long double __z) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long double roundevenl (long double __x) throw () __attribute__ ((__const__)); extern long double __roundevenl (long double __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: extern __intmax_t fromfpl (long double __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpl (long double __x, int __round, unsigned int __width) throw ()
-40039:                             ;
-40039: 
-40039: 
-40039: 
-40039: extern __uintmax_t ufromfpl (long double __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpl (long double __x, int __round, unsigned int __width) throw ()
-40039:                               ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __intmax_t fromfpxl (long double __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpxl (long double __x, int __round, unsigned int __width) throw ()
-40039:                              ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __uintmax_t ufromfpxl (long double __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpxl (long double __x, int __round, unsigned int __width) throw ()
-40039:                                ;
-40039: 
-40039: 
-40039: extern long double fmaxmagl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __fmaxmagl (long double __x, long double __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern long double fminmagl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __fminmagl (long double __x, long double __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int totalorderl (long double __x, long double __y) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int totalordermagl (long double __x, long double __y) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int canonicalizel (long double *__cx, const long double *__x) throw ();
-40039: 
-40039: 
-40039: extern long double getpayloadl (const long double *__x) throw (); extern long double __getpayloadl (const long double *__x) throw ();
-40039: 
-40039: 
-40039: extern int setpayloadl (long double *__x, long double __payload) throw ();
-40039: 
-40039: 
-40039: extern int setpayloadsigl (long double *__x, long double __payload) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long double scalbl (long double __x, long double __n) throw (); extern long double __scalbl (long double __x, long double __n) throw ();
-40039: # 351 "/usr/include/math.h" 2 3 4
-40039: # 389 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 1 3 4
-40039: # 53 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern _Float32 acosf32 (_Float32 __x) throw (); extern _Float32 __acosf32 (_Float32 __x) throw ();
-40039: 
-40039: extern _Float32 asinf32 (_Float32 __x) throw (); extern _Float32 __asinf32 (_Float32 __x) throw ();
-40039: 
-40039: extern _Float32 atanf32 (_Float32 __x) throw (); extern _Float32 __atanf32 (_Float32 __x) throw ();
-40039: 
-40039: extern _Float32 atan2f32 (_Float32 __y, _Float32 __x) throw (); extern _Float32 __atan2f32 (_Float32 __y, _Float32 __x) throw ();
-40039: 
-40039: 
-40039:  extern _Float32 cosf32 (_Float32 __x) throw (); extern _Float32 __cosf32 (_Float32 __x) throw ();
-40039: 
-40039:  extern _Float32 sinf32 (_Float32 __x) throw (); extern _Float32 __sinf32 (_Float32 __x) throw ();
-40039: 
-40039: extern _Float32 tanf32 (_Float32 __x) throw (); extern _Float32 __tanf32 (_Float32 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32 coshf32 (_Float32 __x) throw (); extern _Float32 __coshf32 (_Float32 __x) throw ();
-40039: 
-40039: extern _Float32 sinhf32 (_Float32 __x) throw (); extern _Float32 __sinhf32 (_Float32 __x) throw ();
-40039: 
-40039: extern _Float32 tanhf32 (_Float32 __x) throw (); extern _Float32 __tanhf32 (_Float32 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039:  extern void sincosf32 (_Float32 __x, _Float32 *__sinx, _Float32 *__cosx) throw (); extern void __sincosf32 (_Float32 __x, _Float32 *__sinx, _Float32 *__cosx) throw ()
-40039:                                                         ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32 acoshf32 (_Float32 __x) throw (); extern _Float32 __acoshf32 (_Float32 __x) throw ();
-40039: 
-40039: extern _Float32 asinhf32 (_Float32 __x) throw (); extern _Float32 __asinhf32 (_Float32 __x) throw ();
-40039: 
-40039: extern _Float32 atanhf32 (_Float32 __x) throw (); extern _Float32 __atanhf32 (_Float32 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  extern _Float32 expf32 (_Float32 __x) throw (); extern _Float32 __expf32 (_Float32 __x) throw ();
-40039: 
-40039: 
-40039: extern _Float32 frexpf32 (_Float32 __x, int *__exponent) throw (); extern _Float32 __frexpf32 (_Float32 __x, int *__exponent) throw ();
-40039: 
-40039: 
-40039: extern _Float32 ldexpf32 (_Float32 __x, int __exponent) throw (); extern _Float32 __ldexpf32 (_Float32 __x, int __exponent) throw ();
-40039: 
-40039: 
-40039:  extern _Float32 logf32 (_Float32 __x) throw (); extern _Float32 __logf32 (_Float32 __x) throw ();
-40039: 
-40039: 
-40039: extern _Float32 log10f32 (_Float32 __x) throw (); extern _Float32 __log10f32 (_Float32 __x) throw ();
-40039: 
-40039: 
-40039: extern _Float32 modff32 (_Float32 __x, _Float32 *__iptr) throw (); extern _Float32 __modff32 (_Float32 __x, _Float32 *__iptr) throw () __attribute__ ((__nonnull__ (2)));
-40039: 
-40039: 
-40039: 
-40039: extern _Float32 exp10f32 (_Float32 __x) throw (); extern _Float32 __exp10f32 (_Float32 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32 expm1f32 (_Float32 __x) throw (); extern _Float32 __expm1f32 (_Float32 __x) throw ();
-40039: 
-40039: 
-40039: extern _Float32 log1pf32 (_Float32 __x) throw (); extern _Float32 __log1pf32 (_Float32 __x) throw ();
-40039: 
-40039: 
-40039: extern _Float32 logbf32 (_Float32 __x) throw (); extern _Float32 __logbf32 (_Float32 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32 exp2f32 (_Float32 __x) throw (); extern _Float32 __exp2f32 (_Float32 __x) throw ();
-40039: 
-40039: 
-40039: extern _Float32 log2f32 (_Float32 __x) throw (); extern _Float32 __log2f32 (_Float32 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  extern _Float32 powf32 (_Float32 __x, _Float32 __y) throw (); extern _Float32 __powf32 (_Float32 __x, _Float32 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32 sqrtf32 (_Float32 __x) throw (); extern _Float32 __sqrtf32 (_Float32 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float32 hypotf32 (_Float32 __x, _Float32 __y) throw (); extern _Float32 __hypotf32 (_Float32 __x, _Float32 __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32 cbrtf32 (_Float32 __x) throw (); extern _Float32 __cbrtf32 (_Float32 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32 ceilf32 (_Float32 __x) throw () __attribute__ ((__const__)); extern _Float32 __ceilf32 (_Float32 __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float32 fabsf32 (_Float32 __x) throw () __attribute__ ((__const__)); extern _Float32 __fabsf32 (_Float32 __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float32 floorf32 (_Float32 __x) throw () __attribute__ ((__const__)); extern _Float32 __floorf32 (_Float32 __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float32 fmodf32 (_Float32 __x, _Float32 __y) throw (); extern _Float32 __fmodf32 (_Float32 __x, _Float32 __y) throw ();
-40039: # 196 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern _Float32 copysignf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__)); extern _Float32 __copysignf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32 nanf32 (const char *__tagb) throw (); extern _Float32 __nanf32 (const char *__tagb) throw ();
-40039: # 217 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern _Float32 j0f32 (_Float32) throw (); extern _Float32 __j0f32 (_Float32) throw ();
-40039: extern _Float32 j1f32 (_Float32) throw (); extern _Float32 __j1f32 (_Float32) throw ();
-40039: extern _Float32 jnf32 (int, _Float32) throw (); extern _Float32 __jnf32 (int, _Float32) throw ();
-40039: extern _Float32 y0f32 (_Float32) throw (); extern _Float32 __y0f32 (_Float32) throw ();
-40039: extern _Float32 y1f32 (_Float32) throw (); extern _Float32 __y1f32 (_Float32) throw ();
-40039: extern _Float32 ynf32 (int, _Float32) throw (); extern _Float32 __ynf32 (int, _Float32) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32 erff32 (_Float32) throw (); extern _Float32 __erff32 (_Float32) throw ();
-40039: extern _Float32 erfcf32 (_Float32) throw (); extern _Float32 __erfcf32 (_Float32) throw ();
-40039: extern _Float32 lgammaf32 (_Float32) throw (); extern _Float32 __lgammaf32 (_Float32) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32 tgammaf32 (_Float32) throw (); extern _Float32 __tgammaf32 (_Float32) throw ();
-40039: # 249 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern _Float32 lgammaf32_r (_Float32, int *__signgamp) throw (); extern _Float32 __lgammaf32_r (_Float32, int *__signgamp) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32 rintf32 (_Float32 __x) throw (); extern _Float32 __rintf32 (_Float32 __x) throw ();
-40039: 
-40039: 
-40039: extern _Float32 nextafterf32 (_Float32 __x, _Float32 __y) throw (); extern _Float32 __nextafterf32 (_Float32 __x, _Float32 __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32 nextdownf32 (_Float32 __x) throw (); extern _Float32 __nextdownf32 (_Float32 __x) throw ();
-40039: 
-40039: extern _Float32 nextupf32 (_Float32 __x) throw (); extern _Float32 __nextupf32 (_Float32 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float32 remainderf32 (_Float32 __x, _Float32 __y) throw (); extern _Float32 __remainderf32 (_Float32 __x, _Float32 __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float32 scalbnf32 (_Float32 __x, int __n) throw (); extern _Float32 __scalbnf32 (_Float32 __x, int __n) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int ilogbf32 (_Float32 __x) throw (); extern int __ilogbf32 (_Float32 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long int llogbf32 (_Float32 __x) throw (); extern long int __llogbf32 (_Float32 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32 scalblnf32 (_Float32 __x, long int __n) throw (); extern _Float32 __scalblnf32 (_Float32 __x, long int __n) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float32 nearbyintf32 (_Float32 __x) throw (); extern _Float32 __nearbyintf32 (_Float32 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float32 roundf32 (_Float32 __x) throw () __attribute__ ((__const__)); extern _Float32 __roundf32 (_Float32 __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: extern _Float32 truncf32 (_Float32 __x) throw () __attribute__ ((__const__)); extern _Float32 __truncf32 (_Float32 __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32 remquof32 (_Float32 __x, _Float32 __y, int *__quo) throw (); extern _Float32 __remquof32 (_Float32 __x, _Float32 __y, int *__quo) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long int lrintf32 (_Float32 __x) throw (); extern long int __lrintf32 (_Float32 __x) throw ();
-40039: __extension__
-40039: extern long long int llrintf32 (_Float32 __x) throw (); extern long long int __llrintf32 (_Float32 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern long int lroundf32 (_Float32 __x) throw (); extern long int __lroundf32 (_Float32 __x) throw ();
-40039: __extension__
-40039: extern long long int llroundf32 (_Float32 __x) throw (); extern long long int __llroundf32 (_Float32 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float32 fdimf32 (_Float32 __x, _Float32 __y) throw (); extern _Float32 __fdimf32 (_Float32 __x, _Float32 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32 fmaxf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__)); extern _Float32 __fmaxf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float32 fminf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__)); extern _Float32 __fminf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float32 fmaf32 (_Float32 __x, _Float32 __y, _Float32 __z) throw (); extern _Float32 __fmaf32 (_Float32 __x, _Float32 __y, _Float32 __z) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32 roundevenf32 (_Float32 __x) throw () __attribute__ ((__const__)); extern _Float32 __roundevenf32 (_Float32 __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: extern __intmax_t fromfpf32 (_Float32 __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpf32 (_Float32 __x, int __round, unsigned int __width) throw ()
-40039:                             ;
-40039: 
-40039: 
-40039: 
-40039: extern __uintmax_t ufromfpf32 (_Float32 __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpf32 (_Float32 __x, int __round, unsigned int __width) throw ()
-40039:                               ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __intmax_t fromfpxf32 (_Float32 __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpxf32 (_Float32 __x, int __round, unsigned int __width) throw ()
-40039:                              ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __uintmax_t ufromfpxf32 (_Float32 __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpxf32 (_Float32 __x, int __round, unsigned int __width) throw ()
-40039:                                ;
-40039: 
-40039: 
-40039: extern _Float32 fmaxmagf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__)); extern _Float32 __fmaxmagf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float32 fminmagf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__)); extern _Float32 __fminmagf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int totalorderf32 (_Float32 __x, _Float32 __y) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int totalordermagf32 (_Float32 __x, _Float32 __y) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int canonicalizef32 (_Float32 *__cx, const _Float32 *__x) throw ();
-40039: 
-40039: 
-40039: extern _Float32 getpayloadf32 (const _Float32 *__x) throw (); extern _Float32 __getpayloadf32 (const _Float32 *__x) throw ();
-40039: 
-40039: 
-40039: extern int setpayloadf32 (_Float32 *__x, _Float32 __payload) throw ();
-40039: 
-40039: 
-40039: extern int setpayloadsigf32 (_Float32 *__x, _Float32 __payload) throw ();
-40039: # 390 "/usr/include/math.h" 2 3 4
-40039: # 406 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 1 3 4
-40039: # 53 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern _Float64 acosf64 (_Float64 __x) throw (); extern _Float64 __acosf64 (_Float64 __x) throw ();
-40039: 
-40039: extern _Float64 asinf64 (_Float64 __x) throw (); extern _Float64 __asinf64 (_Float64 __x) throw ();
-40039: 
-40039: extern _Float64 atanf64 (_Float64 __x) throw (); extern _Float64 __atanf64 (_Float64 __x) throw ();
-40039: 
-40039: extern _Float64 atan2f64 (_Float64 __y, _Float64 __x) throw (); extern _Float64 __atan2f64 (_Float64 __y, _Float64 __x) throw ();
-40039: 
-40039: 
-40039:  extern _Float64 cosf64 (_Float64 __x) throw (); extern _Float64 __cosf64 (_Float64 __x) throw ();
-40039: 
-40039:  extern _Float64 sinf64 (_Float64 __x) throw (); extern _Float64 __sinf64 (_Float64 __x) throw ();
-40039: 
-40039: extern _Float64 tanf64 (_Float64 __x) throw (); extern _Float64 __tanf64 (_Float64 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 coshf64 (_Float64 __x) throw (); extern _Float64 __coshf64 (_Float64 __x) throw ();
-40039: 
-40039: extern _Float64 sinhf64 (_Float64 __x) throw (); extern _Float64 __sinhf64 (_Float64 __x) throw ();
-40039: 
-40039: extern _Float64 tanhf64 (_Float64 __x) throw (); extern _Float64 __tanhf64 (_Float64 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039:  extern void sincosf64 (_Float64 __x, _Float64 *__sinx, _Float64 *__cosx) throw (); extern void __sincosf64 (_Float64 __x, _Float64 *__sinx, _Float64 *__cosx) throw ()
-40039:                                                         ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 acoshf64 (_Float64 __x) throw (); extern _Float64 __acoshf64 (_Float64 __x) throw ();
-40039: 
-40039: extern _Float64 asinhf64 (_Float64 __x) throw (); extern _Float64 __asinhf64 (_Float64 __x) throw ();
-40039: 
-40039: extern _Float64 atanhf64 (_Float64 __x) throw (); extern _Float64 __atanhf64 (_Float64 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  extern _Float64 expf64 (_Float64 __x) throw (); extern _Float64 __expf64 (_Float64 __x) throw ();
-40039: 
-40039: 
-40039: extern _Float64 frexpf64 (_Float64 __x, int *__exponent) throw (); extern _Float64 __frexpf64 (_Float64 __x, int *__exponent) throw ();
-40039: 
-40039: 
-40039: extern _Float64 ldexpf64 (_Float64 __x, int __exponent) throw (); extern _Float64 __ldexpf64 (_Float64 __x, int __exponent) throw ();
-40039: 
-40039: 
-40039:  extern _Float64 logf64 (_Float64 __x) throw (); extern _Float64 __logf64 (_Float64 __x) throw ();
-40039: 
-40039: 
-40039: extern _Float64 log10f64 (_Float64 __x) throw (); extern _Float64 __log10f64 (_Float64 __x) throw ();
-40039: 
-40039: 
-40039: extern _Float64 modff64 (_Float64 __x, _Float64 *__iptr) throw (); extern _Float64 __modff64 (_Float64 __x, _Float64 *__iptr) throw () __attribute__ ((__nonnull__ (2)));
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 exp10f64 (_Float64 __x) throw (); extern _Float64 __exp10f64 (_Float64 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 expm1f64 (_Float64 __x) throw (); extern _Float64 __expm1f64 (_Float64 __x) throw ();
-40039: 
-40039: 
-40039: extern _Float64 log1pf64 (_Float64 __x) throw (); extern _Float64 __log1pf64 (_Float64 __x) throw ();
-40039: 
-40039: 
-40039: extern _Float64 logbf64 (_Float64 __x) throw (); extern _Float64 __logbf64 (_Float64 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 exp2f64 (_Float64 __x) throw (); extern _Float64 __exp2f64 (_Float64 __x) throw ();
-40039: 
-40039: 
-40039: extern _Float64 log2f64 (_Float64 __x) throw (); extern _Float64 __log2f64 (_Float64 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  extern _Float64 powf64 (_Float64 __x, _Float64 __y) throw (); extern _Float64 __powf64 (_Float64 __x, _Float64 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float64 sqrtf64 (_Float64 __x) throw (); extern _Float64 __sqrtf64 (_Float64 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 hypotf64 (_Float64 __x, _Float64 __y) throw (); extern _Float64 __hypotf64 (_Float64 __x, _Float64 __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 cbrtf64 (_Float64 __x) throw (); extern _Float64 __cbrtf64 (_Float64 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 ceilf64 (_Float64 __x) throw () __attribute__ ((__const__)); extern _Float64 __ceilf64 (_Float64 __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float64 fabsf64 (_Float64 __x) throw () __attribute__ ((__const__)); extern _Float64 __fabsf64 (_Float64 __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float64 floorf64 (_Float64 __x) throw () __attribute__ ((__const__)); extern _Float64 __floorf64 (_Float64 __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float64 fmodf64 (_Float64 __x, _Float64 __y) throw (); extern _Float64 __fmodf64 (_Float64 __x, _Float64 __y) throw ();
-40039: # 196 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern _Float64 copysignf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__)); extern _Float64 __copysignf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 nanf64 (const char *__tagb) throw (); extern _Float64 __nanf64 (const char *__tagb) throw ();
-40039: # 217 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern _Float64 j0f64 (_Float64) throw (); extern _Float64 __j0f64 (_Float64) throw ();
-40039: extern _Float64 j1f64 (_Float64) throw (); extern _Float64 __j1f64 (_Float64) throw ();
-40039: extern _Float64 jnf64 (int, _Float64) throw (); extern _Float64 __jnf64 (int, _Float64) throw ();
-40039: extern _Float64 y0f64 (_Float64) throw (); extern _Float64 __y0f64 (_Float64) throw ();
-40039: extern _Float64 y1f64 (_Float64) throw (); extern _Float64 __y1f64 (_Float64) throw ();
-40039: extern _Float64 ynf64 (int, _Float64) throw (); extern _Float64 __ynf64 (int, _Float64) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 erff64 (_Float64) throw (); extern _Float64 __erff64 (_Float64) throw ();
-40039: extern _Float64 erfcf64 (_Float64) throw (); extern _Float64 __erfcf64 (_Float64) throw ();
-40039: extern _Float64 lgammaf64 (_Float64) throw (); extern _Float64 __lgammaf64 (_Float64) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 tgammaf64 (_Float64) throw (); extern _Float64 __tgammaf64 (_Float64) throw ();
-40039: # 249 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern _Float64 lgammaf64_r (_Float64, int *__signgamp) throw (); extern _Float64 __lgammaf64_r (_Float64, int *__signgamp) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 rintf64 (_Float64 __x) throw (); extern _Float64 __rintf64 (_Float64 __x) throw ();
-40039: 
-40039: 
-40039: extern _Float64 nextafterf64 (_Float64 __x, _Float64 __y) throw (); extern _Float64 __nextafterf64 (_Float64 __x, _Float64 __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 nextdownf64 (_Float64 __x) throw (); extern _Float64 __nextdownf64 (_Float64 __x) throw ();
-40039: 
-40039: extern _Float64 nextupf64 (_Float64 __x) throw (); extern _Float64 __nextupf64 (_Float64 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 remainderf64 (_Float64 __x, _Float64 __y) throw (); extern _Float64 __remainderf64 (_Float64 __x, _Float64 __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 scalbnf64 (_Float64 __x, int __n) throw (); extern _Float64 __scalbnf64 (_Float64 __x, int __n) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int ilogbf64 (_Float64 __x) throw (); extern int __ilogbf64 (_Float64 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long int llogbf64 (_Float64 __x) throw (); extern long int __llogbf64 (_Float64 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 scalblnf64 (_Float64 __x, long int __n) throw (); extern _Float64 __scalblnf64 (_Float64 __x, long int __n) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 nearbyintf64 (_Float64 __x) throw (); extern _Float64 __nearbyintf64 (_Float64 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 roundf64 (_Float64 __x) throw () __attribute__ ((__const__)); extern _Float64 __roundf64 (_Float64 __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 truncf64 (_Float64 __x) throw () __attribute__ ((__const__)); extern _Float64 __truncf64 (_Float64 __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 remquof64 (_Float64 __x, _Float64 __y, int *__quo) throw (); extern _Float64 __remquof64 (_Float64 __x, _Float64 __y, int *__quo) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long int lrintf64 (_Float64 __x) throw (); extern long int __lrintf64 (_Float64 __x) throw ();
-40039: __extension__
-40039: extern long long int llrintf64 (_Float64 __x) throw (); extern long long int __llrintf64 (_Float64 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern long int lroundf64 (_Float64 __x) throw (); extern long int __lroundf64 (_Float64 __x) throw ();
-40039: __extension__
-40039: extern long long int llroundf64 (_Float64 __x) throw (); extern long long int __llroundf64 (_Float64 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 fdimf64 (_Float64 __x, _Float64 __y) throw (); extern _Float64 __fdimf64 (_Float64 __x, _Float64 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float64 fmaxf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__)); extern _Float64 __fmaxf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float64 fminf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__)); extern _Float64 __fminf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float64 fmaf64 (_Float64 __x, _Float64 __y, _Float64 __z) throw (); extern _Float64 __fmaf64 (_Float64 __x, _Float64 __y, _Float64 __z) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64 roundevenf64 (_Float64 __x) throw () __attribute__ ((__const__)); extern _Float64 __roundevenf64 (_Float64 __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: extern __intmax_t fromfpf64 (_Float64 __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpf64 (_Float64 __x, int __round, unsigned int __width) throw ()
-40039:                             ;
-40039: 
-40039: 
-40039: 
-40039: extern __uintmax_t ufromfpf64 (_Float64 __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpf64 (_Float64 __x, int __round, unsigned int __width) throw ()
-40039:                               ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __intmax_t fromfpxf64 (_Float64 __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpxf64 (_Float64 __x, int __round, unsigned int __width) throw ()
-40039:                              ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __uintmax_t ufromfpxf64 (_Float64 __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpxf64 (_Float64 __x, int __round, unsigned int __width) throw ()
-40039:                                ;
-40039: 
-40039: 
-40039: extern _Float64 fmaxmagf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__)); extern _Float64 __fmaxmagf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float64 fminmagf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__)); extern _Float64 __fminmagf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int totalorderf64 (_Float64 __x, _Float64 __y) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int totalordermagf64 (_Float64 __x, _Float64 __y) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int canonicalizef64 (_Float64 *__cx, const _Float64 *__x) throw ();
-40039: 
-40039: 
-40039: extern _Float64 getpayloadf64 (const _Float64 *__x) throw (); extern _Float64 __getpayloadf64 (const _Float64 *__x) throw ();
-40039: 
-40039: 
-40039: extern int setpayloadf64 (_Float64 *__x, _Float64 __payload) throw ();
-40039: 
-40039: 
-40039: extern int setpayloadsigf64 (_Float64 *__x, _Float64 __payload) throw ();
-40039: # 407 "/usr/include/math.h" 2 3 4
-40039: # 420 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h" 1 3 4
-40039: # 21 "/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h" 3 4
-40039: extern int __fpclassifyf128 (_Float128 __value) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int __signbitf128 (_Float128 __value) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: extern int __isinff128 (_Float128 __value) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int __finitef128 (_Float128 __value) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int __isnanf128 (_Float128 __value) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int __iseqsigf128 (_Float128 __x, _Float128 __y) throw ();
-40039: 
-40039: 
-40039: extern int __issignalingf128 (_Float128 __value) throw ()
-40039:      __attribute__ ((__const__));
-40039: # 421 "/usr/include/math.h" 2 3 4
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 1 3 4
-40039: # 53 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern _Float128 acosf128 (_Float128 __x) throw (); extern _Float128 __acosf128 (_Float128 __x) throw ();
-40039: 
-40039: extern _Float128 asinf128 (_Float128 __x) throw (); extern _Float128 __asinf128 (_Float128 __x) throw ();
-40039: 
-40039: extern _Float128 atanf128 (_Float128 __x) throw (); extern _Float128 __atanf128 (_Float128 __x) throw ();
-40039: 
-40039: extern _Float128 atan2f128 (_Float128 __y, _Float128 __x) throw (); extern _Float128 __atan2f128 (_Float128 __y, _Float128 __x) throw ();
-40039: 
-40039: 
-40039:  extern _Float128 cosf128 (_Float128 __x) throw (); extern _Float128 __cosf128 (_Float128 __x) throw ();
-40039: 
-40039:  extern _Float128 sinf128 (_Float128 __x) throw (); extern _Float128 __sinf128 (_Float128 __x) throw ();
-40039: 
-40039: extern _Float128 tanf128 (_Float128 __x) throw (); extern _Float128 __tanf128 (_Float128 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 coshf128 (_Float128 __x) throw (); extern _Float128 __coshf128 (_Float128 __x) throw ();
-40039: 
-40039: extern _Float128 sinhf128 (_Float128 __x) throw (); extern _Float128 __sinhf128 (_Float128 __x) throw ();
-40039: 
-40039: extern _Float128 tanhf128 (_Float128 __x) throw (); extern _Float128 __tanhf128 (_Float128 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039:  extern void sincosf128 (_Float128 __x, _Float128 *__sinx, _Float128 *__cosx) throw (); extern void __sincosf128 (_Float128 __x, _Float128 *__sinx, _Float128 *__cosx) throw ()
-40039:                                                         ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 acoshf128 (_Float128 __x) throw (); extern _Float128 __acoshf128 (_Float128 __x) throw ();
-40039: 
-40039: extern _Float128 asinhf128 (_Float128 __x) throw (); extern _Float128 __asinhf128 (_Float128 __x) throw ();
-40039: 
-40039: extern _Float128 atanhf128 (_Float128 __x) throw (); extern _Float128 __atanhf128 (_Float128 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  extern _Float128 expf128 (_Float128 __x) throw (); extern _Float128 __expf128 (_Float128 __x) throw ();
-40039: 
-40039: 
-40039: extern _Float128 frexpf128 (_Float128 __x, int *__exponent) throw (); extern _Float128 __frexpf128 (_Float128 __x, int *__exponent) throw ();
-40039: 
-40039: 
-40039: extern _Float128 ldexpf128 (_Float128 __x, int __exponent) throw (); extern _Float128 __ldexpf128 (_Float128 __x, int __exponent) throw ();
-40039: 
-40039: 
-40039:  extern _Float128 logf128 (_Float128 __x) throw (); extern _Float128 __logf128 (_Float128 __x) throw ();
-40039: 
-40039: 
-40039: extern _Float128 log10f128 (_Float128 __x) throw (); extern _Float128 __log10f128 (_Float128 __x) throw ();
-40039: 
-40039: 
-40039: extern _Float128 modff128 (_Float128 __x, _Float128 *__iptr) throw (); extern _Float128 __modff128 (_Float128 __x, _Float128 *__iptr) throw () __attribute__ ((__nonnull__ (2)));
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 exp10f128 (_Float128 __x) throw (); extern _Float128 __exp10f128 (_Float128 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 expm1f128 (_Float128 __x) throw (); extern _Float128 __expm1f128 (_Float128 __x) throw ();
-40039: 
-40039: 
-40039: extern _Float128 log1pf128 (_Float128 __x) throw (); extern _Float128 __log1pf128 (_Float128 __x) throw ();
-40039: 
-40039: 
-40039: extern _Float128 logbf128 (_Float128 __x) throw (); extern _Float128 __logbf128 (_Float128 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 exp2f128 (_Float128 __x) throw (); extern _Float128 __exp2f128 (_Float128 __x) throw ();
-40039: 
-40039: 
-40039: extern _Float128 log2f128 (_Float128 __x) throw (); extern _Float128 __log2f128 (_Float128 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  extern _Float128 powf128 (_Float128 __x, _Float128 __y) throw (); extern _Float128 __powf128 (_Float128 __x, _Float128 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float128 sqrtf128 (_Float128 __x) throw (); extern _Float128 __sqrtf128 (_Float128 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 hypotf128 (_Float128 __x, _Float128 __y) throw (); extern _Float128 __hypotf128 (_Float128 __x, _Float128 __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 cbrtf128 (_Float128 __x) throw (); extern _Float128 __cbrtf128 (_Float128 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 ceilf128 (_Float128 __x) throw () __attribute__ ((__const__)); extern _Float128 __ceilf128 (_Float128 __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float128 fabsf128 (_Float128 __x) throw () __attribute__ ((__const__)); extern _Float128 __fabsf128 (_Float128 __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float128 floorf128 (_Float128 __x) throw () __attribute__ ((__const__)); extern _Float128 __floorf128 (_Float128 __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float128 fmodf128 (_Float128 __x, _Float128 __y) throw (); extern _Float128 __fmodf128 (_Float128 __x, _Float128 __y) throw ();
-40039: # 196 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern _Float128 copysignf128 (_Float128 __x, _Float128 __y) throw () __attribute__ ((__const__)); extern _Float128 __copysignf128 (_Float128 __x, _Float128 __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 nanf128 (const char *__tagb) throw (); extern _Float128 __nanf128 (const char *__tagb) throw ();
-40039: # 217 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern _Float128 j0f128 (_Float128) throw (); extern _Float128 __j0f128 (_Float128) throw ();
-40039: extern _Float128 j1f128 (_Float128) throw (); extern _Float128 __j1f128 (_Float128) throw ();
-40039: extern _Float128 jnf128 (int, _Float128) throw (); extern _Float128 __jnf128 (int, _Float128) throw ();
-40039: extern _Float128 y0f128 (_Float128) throw (); extern _Float128 __y0f128 (_Float128) throw ();
-40039: extern _Float128 y1f128 (_Float128) throw (); extern _Float128 __y1f128 (_Float128) throw ();
-40039: extern _Float128 ynf128 (int, _Float128) throw (); extern _Float128 __ynf128 (int, _Float128) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 erff128 (_Float128) throw (); extern _Float128 __erff128 (_Float128) throw ();
-40039: extern _Float128 erfcf128 (_Float128) throw (); extern _Float128 __erfcf128 (_Float128) throw ();
-40039: extern _Float128 lgammaf128 (_Float128) throw (); extern _Float128 __lgammaf128 (_Float128) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 tgammaf128 (_Float128) throw (); extern _Float128 __tgammaf128 (_Float128) throw ();
-40039: # 249 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern _Float128 lgammaf128_r (_Float128, int *__signgamp) throw (); extern _Float128 __lgammaf128_r (_Float128, int *__signgamp) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 rintf128 (_Float128 __x) throw (); extern _Float128 __rintf128 (_Float128 __x) throw ();
-40039: 
-40039: 
-40039: extern _Float128 nextafterf128 (_Float128 __x, _Float128 __y) throw (); extern _Float128 __nextafterf128 (_Float128 __x, _Float128 __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 nextdownf128 (_Float128 __x) throw (); extern _Float128 __nextdownf128 (_Float128 __x) throw ();
-40039: 
-40039: extern _Float128 nextupf128 (_Float128 __x) throw (); extern _Float128 __nextupf128 (_Float128 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 remainderf128 (_Float128 __x, _Float128 __y) throw (); extern _Float128 __remainderf128 (_Float128 __x, _Float128 __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 scalbnf128 (_Float128 __x, int __n) throw (); extern _Float128 __scalbnf128 (_Float128 __x, int __n) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int ilogbf128 (_Float128 __x) throw (); extern int __ilogbf128 (_Float128 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long int llogbf128 (_Float128 __x) throw (); extern long int __llogbf128 (_Float128 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 scalblnf128 (_Float128 __x, long int __n) throw (); extern _Float128 __scalblnf128 (_Float128 __x, long int __n) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 nearbyintf128 (_Float128 __x) throw (); extern _Float128 __nearbyintf128 (_Float128 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 roundf128 (_Float128 __x) throw () __attribute__ ((__const__)); extern _Float128 __roundf128 (_Float128 __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 truncf128 (_Float128 __x) throw () __attribute__ ((__const__)); extern _Float128 __truncf128 (_Float128 __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 remquof128 (_Float128 __x, _Float128 __y, int *__quo) throw (); extern _Float128 __remquof128 (_Float128 __x, _Float128 __y, int *__quo) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long int lrintf128 (_Float128 __x) throw (); extern long int __lrintf128 (_Float128 __x) throw ();
-40039: __extension__
-40039: extern long long int llrintf128 (_Float128 __x) throw (); extern long long int __llrintf128 (_Float128 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern long int lroundf128 (_Float128 __x) throw (); extern long int __lroundf128 (_Float128 __x) throw ();
-40039: __extension__
-40039: extern long long int llroundf128 (_Float128 __x) throw (); extern long long int __llroundf128 (_Float128 __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 fdimf128 (_Float128 __x, _Float128 __y) throw (); extern _Float128 __fdimf128 (_Float128 __x, _Float128 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float128 fmaxf128 (_Float128 __x, _Float128 __y) throw () __attribute__ ((__const__)); extern _Float128 __fmaxf128 (_Float128 __x, _Float128 __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float128 fminf128 (_Float128 __x, _Float128 __y) throw () __attribute__ ((__const__)); extern _Float128 __fminf128 (_Float128 __x, _Float128 __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float128 fmaf128 (_Float128 __x, _Float128 __y, _Float128 __z) throw (); extern _Float128 __fmaf128 (_Float128 __x, _Float128 __y, _Float128 __z) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float128 roundevenf128 (_Float128 __x) throw () __attribute__ ((__const__)); extern _Float128 __roundevenf128 (_Float128 __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: extern __intmax_t fromfpf128 (_Float128 __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpf128 (_Float128 __x, int __round, unsigned int __width) throw ()
-40039:                             ;
-40039: 
-40039: 
-40039: 
-40039: extern __uintmax_t ufromfpf128 (_Float128 __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpf128 (_Float128 __x, int __round, unsigned int __width) throw ()
-40039:                               ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __intmax_t fromfpxf128 (_Float128 __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpxf128 (_Float128 __x, int __round, unsigned int __width) throw ()
-40039:                              ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __uintmax_t ufromfpxf128 (_Float128 __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpxf128 (_Float128 __x, int __round, unsigned int __width) throw ()
-40039:                                ;
-40039: 
-40039: 
-40039: extern _Float128 fmaxmagf128 (_Float128 __x, _Float128 __y) throw () __attribute__ ((__const__)); extern _Float128 __fmaxmagf128 (_Float128 __x, _Float128 __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float128 fminmagf128 (_Float128 __x, _Float128 __y) throw () __attribute__ ((__const__)); extern _Float128 __fminmagf128 (_Float128 __x, _Float128 __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int totalorderf128 (_Float128 __x, _Float128 __y) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int totalordermagf128 (_Float128 __x, _Float128 __y) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int canonicalizef128 (_Float128 *__cx, const _Float128 *__x) throw ();
-40039: 
-40039: 
-40039: extern _Float128 getpayloadf128 (const _Float128 *__x) throw (); extern _Float128 __getpayloadf128 (const _Float128 *__x) throw ();
-40039: 
-40039: 
-40039: extern int setpayloadf128 (_Float128 *__x, _Float128 __payload) throw ();
-40039: 
-40039: 
-40039: extern int setpayloadsigf128 (_Float128 *__x, _Float128 __payload) throw ();
-40039: # 424 "/usr/include/math.h" 2 3 4
-40039: # 440 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 1 3 4
-40039: # 53 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern _Float32x acosf32x (_Float32x __x) throw (); extern _Float32x __acosf32x (_Float32x __x) throw ();
-40039: 
-40039: extern _Float32x asinf32x (_Float32x __x) throw (); extern _Float32x __asinf32x (_Float32x __x) throw ();
-40039: 
-40039: extern _Float32x atanf32x (_Float32x __x) throw (); extern _Float32x __atanf32x (_Float32x __x) throw ();
-40039: 
-40039: extern _Float32x atan2f32x (_Float32x __y, _Float32x __x) throw (); extern _Float32x __atan2f32x (_Float32x __y, _Float32x __x) throw ();
-40039: 
-40039: 
-40039:  extern _Float32x cosf32x (_Float32x __x) throw (); extern _Float32x __cosf32x (_Float32x __x) throw ();
-40039: 
-40039:  extern _Float32x sinf32x (_Float32x __x) throw (); extern _Float32x __sinf32x (_Float32x __x) throw ();
-40039: 
-40039: extern _Float32x tanf32x (_Float32x __x) throw (); extern _Float32x __tanf32x (_Float32x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x coshf32x (_Float32x __x) throw (); extern _Float32x __coshf32x (_Float32x __x) throw ();
-40039: 
-40039: extern _Float32x sinhf32x (_Float32x __x) throw (); extern _Float32x __sinhf32x (_Float32x __x) throw ();
-40039: 
-40039: extern _Float32x tanhf32x (_Float32x __x) throw (); extern _Float32x __tanhf32x (_Float32x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039:  extern void sincosf32x (_Float32x __x, _Float32x *__sinx, _Float32x *__cosx) throw (); extern void __sincosf32x (_Float32x __x, _Float32x *__sinx, _Float32x *__cosx) throw ()
-40039:                                                         ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x acoshf32x (_Float32x __x) throw (); extern _Float32x __acoshf32x (_Float32x __x) throw ();
-40039: 
-40039: extern _Float32x asinhf32x (_Float32x __x) throw (); extern _Float32x __asinhf32x (_Float32x __x) throw ();
-40039: 
-40039: extern _Float32x atanhf32x (_Float32x __x) throw (); extern _Float32x __atanhf32x (_Float32x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  extern _Float32x expf32x (_Float32x __x) throw (); extern _Float32x __expf32x (_Float32x __x) throw ();
-40039: 
-40039: 
-40039: extern _Float32x frexpf32x (_Float32x __x, int *__exponent) throw (); extern _Float32x __frexpf32x (_Float32x __x, int *__exponent) throw ();
-40039: 
-40039: 
-40039: extern _Float32x ldexpf32x (_Float32x __x, int __exponent) throw (); extern _Float32x __ldexpf32x (_Float32x __x, int __exponent) throw ();
-40039: 
-40039: 
-40039:  extern _Float32x logf32x (_Float32x __x) throw (); extern _Float32x __logf32x (_Float32x __x) throw ();
-40039: 
-40039: 
-40039: extern _Float32x log10f32x (_Float32x __x) throw (); extern _Float32x __log10f32x (_Float32x __x) throw ();
-40039: 
-40039: 
-40039: extern _Float32x modff32x (_Float32x __x, _Float32x *__iptr) throw (); extern _Float32x __modff32x (_Float32x __x, _Float32x *__iptr) throw () __attribute__ ((__nonnull__ (2)));
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x exp10f32x (_Float32x __x) throw (); extern _Float32x __exp10f32x (_Float32x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x expm1f32x (_Float32x __x) throw (); extern _Float32x __expm1f32x (_Float32x __x) throw ();
-40039: 
-40039: 
-40039: extern _Float32x log1pf32x (_Float32x __x) throw (); extern _Float32x __log1pf32x (_Float32x __x) throw ();
-40039: 
-40039: 
-40039: extern _Float32x logbf32x (_Float32x __x) throw (); extern _Float32x __logbf32x (_Float32x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x exp2f32x (_Float32x __x) throw (); extern _Float32x __exp2f32x (_Float32x __x) throw ();
-40039: 
-40039: 
-40039: extern _Float32x log2f32x (_Float32x __x) throw (); extern _Float32x __log2f32x (_Float32x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  extern _Float32x powf32x (_Float32x __x, _Float32x __y) throw (); extern _Float32x __powf32x (_Float32x __x, _Float32x __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32x sqrtf32x (_Float32x __x) throw (); extern _Float32x __sqrtf32x (_Float32x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x hypotf32x (_Float32x __x, _Float32x __y) throw (); extern _Float32x __hypotf32x (_Float32x __x, _Float32x __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x cbrtf32x (_Float32x __x) throw (); extern _Float32x __cbrtf32x (_Float32x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x ceilf32x (_Float32x __x) throw () __attribute__ ((__const__)); extern _Float32x __ceilf32x (_Float32x __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float32x fabsf32x (_Float32x __x) throw () __attribute__ ((__const__)); extern _Float32x __fabsf32x (_Float32x __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float32x floorf32x (_Float32x __x) throw () __attribute__ ((__const__)); extern _Float32x __floorf32x (_Float32x __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float32x fmodf32x (_Float32x __x, _Float32x __y) throw (); extern _Float32x __fmodf32x (_Float32x __x, _Float32x __y) throw ();
-40039: # 196 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern _Float32x copysignf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__)); extern _Float32x __copysignf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x nanf32x (const char *__tagb) throw (); extern _Float32x __nanf32x (const char *__tagb) throw ();
-40039: # 217 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern _Float32x j0f32x (_Float32x) throw (); extern _Float32x __j0f32x (_Float32x) throw ();
-40039: extern _Float32x j1f32x (_Float32x) throw (); extern _Float32x __j1f32x (_Float32x) throw ();
-40039: extern _Float32x jnf32x (int, _Float32x) throw (); extern _Float32x __jnf32x (int, _Float32x) throw ();
-40039: extern _Float32x y0f32x (_Float32x) throw (); extern _Float32x __y0f32x (_Float32x) throw ();
-40039: extern _Float32x y1f32x (_Float32x) throw (); extern _Float32x __y1f32x (_Float32x) throw ();
-40039: extern _Float32x ynf32x (int, _Float32x) throw (); extern _Float32x __ynf32x (int, _Float32x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x erff32x (_Float32x) throw (); extern _Float32x __erff32x (_Float32x) throw ();
-40039: extern _Float32x erfcf32x (_Float32x) throw (); extern _Float32x __erfcf32x (_Float32x) throw ();
-40039: extern _Float32x lgammaf32x (_Float32x) throw (); extern _Float32x __lgammaf32x (_Float32x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x tgammaf32x (_Float32x) throw (); extern _Float32x __tgammaf32x (_Float32x) throw ();
-40039: # 249 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern _Float32x lgammaf32x_r (_Float32x, int *__signgamp) throw (); extern _Float32x __lgammaf32x_r (_Float32x, int *__signgamp) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x rintf32x (_Float32x __x) throw (); extern _Float32x __rintf32x (_Float32x __x) throw ();
-40039: 
-40039: 
-40039: extern _Float32x nextafterf32x (_Float32x __x, _Float32x __y) throw (); extern _Float32x __nextafterf32x (_Float32x __x, _Float32x __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x nextdownf32x (_Float32x __x) throw (); extern _Float32x __nextdownf32x (_Float32x __x) throw ();
-40039: 
-40039: extern _Float32x nextupf32x (_Float32x __x) throw (); extern _Float32x __nextupf32x (_Float32x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x remainderf32x (_Float32x __x, _Float32x __y) throw (); extern _Float32x __remainderf32x (_Float32x __x, _Float32x __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x scalbnf32x (_Float32x __x, int __n) throw (); extern _Float32x __scalbnf32x (_Float32x __x, int __n) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int ilogbf32x (_Float32x __x) throw (); extern int __ilogbf32x (_Float32x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long int llogbf32x (_Float32x __x) throw (); extern long int __llogbf32x (_Float32x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x scalblnf32x (_Float32x __x, long int __n) throw (); extern _Float32x __scalblnf32x (_Float32x __x, long int __n) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x nearbyintf32x (_Float32x __x) throw (); extern _Float32x __nearbyintf32x (_Float32x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x roundf32x (_Float32x __x) throw () __attribute__ ((__const__)); extern _Float32x __roundf32x (_Float32x __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x truncf32x (_Float32x __x) throw () __attribute__ ((__const__)); extern _Float32x __truncf32x (_Float32x __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x remquof32x (_Float32x __x, _Float32x __y, int *__quo) throw (); extern _Float32x __remquof32x (_Float32x __x, _Float32x __y, int *__quo) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long int lrintf32x (_Float32x __x) throw (); extern long int __lrintf32x (_Float32x __x) throw ();
-40039: __extension__
-40039: extern long long int llrintf32x (_Float32x __x) throw (); extern long long int __llrintf32x (_Float32x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern long int lroundf32x (_Float32x __x) throw (); extern long int __lroundf32x (_Float32x __x) throw ();
-40039: __extension__
-40039: extern long long int llroundf32x (_Float32x __x) throw (); extern long long int __llroundf32x (_Float32x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x fdimf32x (_Float32x __x, _Float32x __y) throw (); extern _Float32x __fdimf32x (_Float32x __x, _Float32x __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32x fmaxf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__)); extern _Float32x __fmaxf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float32x fminf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__)); extern _Float32x __fminf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float32x fmaf32x (_Float32x __x, _Float32x __y, _Float32x __z) throw (); extern _Float32x __fmaf32x (_Float32x __x, _Float32x __y, _Float32x __z) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float32x roundevenf32x (_Float32x __x) throw () __attribute__ ((__const__)); extern _Float32x __roundevenf32x (_Float32x __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: extern __intmax_t fromfpf32x (_Float32x __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpf32x (_Float32x __x, int __round, unsigned int __width) throw ()
-40039:                             ;
-40039: 
-40039: 
-40039: 
-40039: extern __uintmax_t ufromfpf32x (_Float32x __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpf32x (_Float32x __x, int __round, unsigned int __width) throw ()
-40039:                               ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __intmax_t fromfpxf32x (_Float32x __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpxf32x (_Float32x __x, int __round, unsigned int __width) throw ()
-40039:                              ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __uintmax_t ufromfpxf32x (_Float32x __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpxf32x (_Float32x __x, int __round, unsigned int __width) throw ()
-40039:                                ;
-40039: 
-40039: 
-40039: extern _Float32x fmaxmagf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__)); extern _Float32x __fmaxmagf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float32x fminmagf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__)); extern _Float32x __fminmagf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int totalorderf32x (_Float32x __x, _Float32x __y) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int totalordermagf32x (_Float32x __x, _Float32x __y) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int canonicalizef32x (_Float32x *__cx, const _Float32x *__x) throw ();
-40039: 
-40039: 
-40039: extern _Float32x getpayloadf32x (const _Float32x *__x) throw (); extern _Float32x __getpayloadf32x (const _Float32x *__x) throw ();
-40039: 
-40039: 
-40039: extern int setpayloadf32x (_Float32x *__x, _Float32x __payload) throw ();
-40039: 
-40039: 
-40039: extern int setpayloadsigf32x (_Float32x *__x, _Float32x __payload) throw ();
-40039: # 441 "/usr/include/math.h" 2 3 4
-40039: # 457 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 1 3 4
-40039: # 53 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern _Float64x acosf64x (_Float64x __x) throw (); extern _Float64x __acosf64x (_Float64x __x) throw ();
-40039: 
-40039: extern _Float64x asinf64x (_Float64x __x) throw (); extern _Float64x __asinf64x (_Float64x __x) throw ();
-40039: 
-40039: extern _Float64x atanf64x (_Float64x __x) throw (); extern _Float64x __atanf64x (_Float64x __x) throw ();
-40039: 
-40039: extern _Float64x atan2f64x (_Float64x __y, _Float64x __x) throw (); extern _Float64x __atan2f64x (_Float64x __y, _Float64x __x) throw ();
-40039: 
-40039: 
-40039:  extern _Float64x cosf64x (_Float64x __x) throw (); extern _Float64x __cosf64x (_Float64x __x) throw ();
-40039: 
-40039:  extern _Float64x sinf64x (_Float64x __x) throw (); extern _Float64x __sinf64x (_Float64x __x) throw ();
-40039: 
-40039: extern _Float64x tanf64x (_Float64x __x) throw (); extern _Float64x __tanf64x (_Float64x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x coshf64x (_Float64x __x) throw (); extern _Float64x __coshf64x (_Float64x __x) throw ();
-40039: 
-40039: extern _Float64x sinhf64x (_Float64x __x) throw (); extern _Float64x __sinhf64x (_Float64x __x) throw ();
-40039: 
-40039: extern _Float64x tanhf64x (_Float64x __x) throw (); extern _Float64x __tanhf64x (_Float64x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039:  extern void sincosf64x (_Float64x __x, _Float64x *__sinx, _Float64x *__cosx) throw (); extern void __sincosf64x (_Float64x __x, _Float64x *__sinx, _Float64x *__cosx) throw ()
-40039:                                                         ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x acoshf64x (_Float64x __x) throw (); extern _Float64x __acoshf64x (_Float64x __x) throw ();
-40039: 
-40039: extern _Float64x asinhf64x (_Float64x __x) throw (); extern _Float64x __asinhf64x (_Float64x __x) throw ();
-40039: 
-40039: extern _Float64x atanhf64x (_Float64x __x) throw (); extern _Float64x __atanhf64x (_Float64x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  extern _Float64x expf64x (_Float64x __x) throw (); extern _Float64x __expf64x (_Float64x __x) throw ();
-40039: 
-40039: 
-40039: extern _Float64x frexpf64x (_Float64x __x, int *__exponent) throw (); extern _Float64x __frexpf64x (_Float64x __x, int *__exponent) throw ();
-40039: 
-40039: 
-40039: extern _Float64x ldexpf64x (_Float64x __x, int __exponent) throw (); extern _Float64x __ldexpf64x (_Float64x __x, int __exponent) throw ();
-40039: 
-40039: 
-40039:  extern _Float64x logf64x (_Float64x __x) throw (); extern _Float64x __logf64x (_Float64x __x) throw ();
-40039: 
-40039: 
-40039: extern _Float64x log10f64x (_Float64x __x) throw (); extern _Float64x __log10f64x (_Float64x __x) throw ();
-40039: 
-40039: 
-40039: extern _Float64x modff64x (_Float64x __x, _Float64x *__iptr) throw (); extern _Float64x __modff64x (_Float64x __x, _Float64x *__iptr) throw () __attribute__ ((__nonnull__ (2)));
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x exp10f64x (_Float64x __x) throw (); extern _Float64x __exp10f64x (_Float64x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x expm1f64x (_Float64x __x) throw (); extern _Float64x __expm1f64x (_Float64x __x) throw ();
-40039: 
-40039: 
-40039: extern _Float64x log1pf64x (_Float64x __x) throw (); extern _Float64x __log1pf64x (_Float64x __x) throw ();
-40039: 
-40039: 
-40039: extern _Float64x logbf64x (_Float64x __x) throw (); extern _Float64x __logbf64x (_Float64x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x exp2f64x (_Float64x __x) throw (); extern _Float64x __exp2f64x (_Float64x __x) throw ();
-40039: 
-40039: 
-40039: extern _Float64x log2f64x (_Float64x __x) throw (); extern _Float64x __log2f64x (_Float64x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  extern _Float64x powf64x (_Float64x __x, _Float64x __y) throw (); extern _Float64x __powf64x (_Float64x __x, _Float64x __y) throw ();
-40039: 
-40039: 
-40039: extern _Float64x sqrtf64x (_Float64x __x) throw (); extern _Float64x __sqrtf64x (_Float64x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x hypotf64x (_Float64x __x, _Float64x __y) throw (); extern _Float64x __hypotf64x (_Float64x __x, _Float64x __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x cbrtf64x (_Float64x __x) throw (); extern _Float64x __cbrtf64x (_Float64x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x ceilf64x (_Float64x __x) throw () __attribute__ ((__const__)); extern _Float64x __ceilf64x (_Float64x __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float64x fabsf64x (_Float64x __x) throw () __attribute__ ((__const__)); extern _Float64x __fabsf64x (_Float64x __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float64x floorf64x (_Float64x __x) throw () __attribute__ ((__const__)); extern _Float64x __floorf64x (_Float64x __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float64x fmodf64x (_Float64x __x, _Float64x __y) throw (); extern _Float64x __fmodf64x (_Float64x __x, _Float64x __y) throw ();
-40039: # 196 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern _Float64x copysignf64x (_Float64x __x, _Float64x __y) throw () __attribute__ ((__const__)); extern _Float64x __copysignf64x (_Float64x __x, _Float64x __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x nanf64x (const char *__tagb) throw (); extern _Float64x __nanf64x (const char *__tagb) throw ();
-40039: # 217 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern _Float64x j0f64x (_Float64x) throw (); extern _Float64x __j0f64x (_Float64x) throw ();
-40039: extern _Float64x j1f64x (_Float64x) throw (); extern _Float64x __j1f64x (_Float64x) throw ();
-40039: extern _Float64x jnf64x (int, _Float64x) throw (); extern _Float64x __jnf64x (int, _Float64x) throw ();
-40039: extern _Float64x y0f64x (_Float64x) throw (); extern _Float64x __y0f64x (_Float64x) throw ();
-40039: extern _Float64x y1f64x (_Float64x) throw (); extern _Float64x __y1f64x (_Float64x) throw ();
-40039: extern _Float64x ynf64x (int, _Float64x) throw (); extern _Float64x __ynf64x (int, _Float64x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x erff64x (_Float64x) throw (); extern _Float64x __erff64x (_Float64x) throw ();
-40039: extern _Float64x erfcf64x (_Float64x) throw (); extern _Float64x __erfcf64x (_Float64x) throw ();
-40039: extern _Float64x lgammaf64x (_Float64x) throw (); extern _Float64x __lgammaf64x (_Float64x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x tgammaf64x (_Float64x) throw (); extern _Float64x __tgammaf64x (_Float64x) throw ();
-40039: # 249 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
-40039: extern _Float64x lgammaf64x_r (_Float64x, int *__signgamp) throw (); extern _Float64x __lgammaf64x_r (_Float64x, int *__signgamp) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x rintf64x (_Float64x __x) throw (); extern _Float64x __rintf64x (_Float64x __x) throw ();
-40039: 
-40039: 
-40039: extern _Float64x nextafterf64x (_Float64x __x, _Float64x __y) throw (); extern _Float64x __nextafterf64x (_Float64x __x, _Float64x __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x nextdownf64x (_Float64x __x) throw (); extern _Float64x __nextdownf64x (_Float64x __x) throw ();
-40039: 
-40039: extern _Float64x nextupf64x (_Float64x __x) throw (); extern _Float64x __nextupf64x (_Float64x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x remainderf64x (_Float64x __x, _Float64x __y) throw (); extern _Float64x __remainderf64x (_Float64x __x, _Float64x __y) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x scalbnf64x (_Float64x __x, int __n) throw (); extern _Float64x __scalbnf64x (_Float64x __x, int __n) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int ilogbf64x (_Float64x __x) throw (); extern int __ilogbf64x (_Float64x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long int llogbf64x (_Float64x __x) throw (); extern long int __llogbf64x (_Float64x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x scalblnf64x (_Float64x __x, long int __n) throw (); extern _Float64x __scalblnf64x (_Float64x __x, long int __n) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x nearbyintf64x (_Float64x __x) throw (); extern _Float64x __nearbyintf64x (_Float64x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x roundf64x (_Float64x __x) throw () __attribute__ ((__const__)); extern _Float64x __roundf64x (_Float64x __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x truncf64x (_Float64x __x) throw () __attribute__ ((__const__)); extern _Float64x __truncf64x (_Float64x __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x remquof64x (_Float64x __x, _Float64x __y, int *__quo) throw (); extern _Float64x __remquof64x (_Float64x __x, _Float64x __y, int *__quo) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern long int lrintf64x (_Float64x __x) throw (); extern long int __lrintf64x (_Float64x __x) throw ();
-40039: __extension__
-40039: extern long long int llrintf64x (_Float64x __x) throw (); extern long long int __llrintf64x (_Float64x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern long int lroundf64x (_Float64x __x) throw (); extern long int __lroundf64x (_Float64x __x) throw ();
-40039: __extension__
-40039: extern long long int llroundf64x (_Float64x __x) throw (); extern long long int __llroundf64x (_Float64x __x) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x fdimf64x (_Float64x __x, _Float64x __y) throw (); extern _Float64x __fdimf64x (_Float64x __x, _Float64x __y) throw ();
-40039: 
-40039: 
-40039: extern _Float64x fmaxf64x (_Float64x __x, _Float64x __y) throw () __attribute__ ((__const__)); extern _Float64x __fmaxf64x (_Float64x __x, _Float64x __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float64x fminf64x (_Float64x __x, _Float64x __y) throw () __attribute__ ((__const__)); extern _Float64x __fminf64x (_Float64x __x, _Float64x __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float64x fmaf64x (_Float64x __x, _Float64x __y, _Float64x __z) throw (); extern _Float64x __fmaf64x (_Float64x __x, _Float64x __y, _Float64x __z) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern _Float64x roundevenf64x (_Float64x __x) throw () __attribute__ ((__const__)); extern _Float64x __roundevenf64x (_Float64x __x) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: 
-40039: extern __intmax_t fromfpf64x (_Float64x __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpf64x (_Float64x __x, int __round, unsigned int __width) throw ()
-40039:                             ;
-40039: 
-40039: 
-40039: 
-40039: extern __uintmax_t ufromfpf64x (_Float64x __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpf64x (_Float64x __x, int __round, unsigned int __width) throw ()
-40039:                               ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __intmax_t fromfpxf64x (_Float64x __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpxf64x (_Float64x __x, int __round, unsigned int __width) throw ()
-40039:                              ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern __uintmax_t ufromfpxf64x (_Float64x __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpxf64x (_Float64x __x, int __round, unsigned int __width) throw ()
-40039:                                ;
-40039: 
-40039: 
-40039: extern _Float64x fmaxmagf64x (_Float64x __x, _Float64x __y) throw () __attribute__ ((__const__)); extern _Float64x __fmaxmagf64x (_Float64x __x, _Float64x __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern _Float64x fminmagf64x (_Float64x __x, _Float64x __y) throw () __attribute__ ((__const__)); extern _Float64x __fminmagf64x (_Float64x __x, _Float64x __y) throw () __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int totalorderf64x (_Float64x __x, _Float64x __y) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int totalordermagf64x (_Float64x __x, _Float64x __y) throw ()
-40039:      __attribute__ ((__const__));
-40039: 
-40039: 
-40039: extern int canonicalizef64x (_Float64x *__cx, const _Float64x *__x) throw ();
-40039: 
-40039: 
-40039: extern _Float64x getpayloadf64x (const _Float64x *__x) throw (); extern _Float64x __getpayloadf64x (const _Float64x *__x) throw ();
-40039: 
-40039: 
-40039: extern int setpayloadf64x (_Float64x *__x, _Float64x __payload) throw ();
-40039: 
-40039: 
-40039: extern int setpayloadsigf64x (_Float64x *__x, _Float64x __payload) throw ();
-40039: # 458 "/usr/include/math.h" 2 3 4
-40039: # 503 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
-40039: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
-40039: extern float fadd (double __x, double __y) throw ();
-40039: 
-40039: 
-40039: extern float fdiv (double __x, double __y) throw ();
-40039: 
-40039: 
-40039: extern float fmul (double __x, double __y) throw ();
-40039: 
-40039: 
-40039: extern float fsub (double __x, double __y) throw ();
-40039: # 504 "/usr/include/math.h" 2 3 4
-40039: # 517 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
-40039: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
-40039: extern float faddl (long double __x, long double __y) throw ();
-40039: 
-40039: 
-40039: extern float fdivl (long double __x, long double __y) throw ();
-40039: 
-40039: 
-40039: extern float fmull (long double __x, long double __y) throw ();
-40039: 
-40039: 
-40039: extern float fsubl (long double __x, long double __y) throw ();
-40039: # 518 "/usr/include/math.h" 2 3 4
-40039: # 537 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
-40039: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
-40039: extern double daddl (long double __x, long double __y) throw ();
-40039: 
-40039: 
-40039: extern double ddivl (long double __x, long double __y) throw ();
-40039: 
-40039: 
-40039: extern double dmull (long double __x, long double __y) throw ();
-40039: 
-40039: 
-40039: extern double dsubl (long double __x, long double __y) throw ();
-40039: # 538 "/usr/include/math.h" 2 3 4
-40039: # 616 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
-40039: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
-40039: extern _Float32 f32addf32x (_Float32x __x, _Float32x __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32 f32divf32x (_Float32x __x, _Float32x __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32 f32mulf32x (_Float32x __x, _Float32x __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32 f32subf32x (_Float32x __x, _Float32x __y) throw ();
-40039: # 617 "/usr/include/math.h" 2 3 4
-40039: # 626 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
-40039: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
-40039: extern _Float32 f32addf64 (_Float64 __x, _Float64 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32 f32divf64 (_Float64 __x, _Float64 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32 f32mulf64 (_Float64 __x, _Float64 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32 f32subf64 (_Float64 __x, _Float64 __y) throw ();
-40039: # 627 "/usr/include/math.h" 2 3 4
-40039: # 636 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
-40039: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
-40039: extern _Float32 f32addf64x (_Float64x __x, _Float64x __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32 f32divf64x (_Float64x __x, _Float64x __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32 f32mulf64x (_Float64x __x, _Float64x __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32 f32subf64x (_Float64x __x, _Float64x __y) throw ();
-40039: # 637 "/usr/include/math.h" 2 3 4
-40039: # 646 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
-40039: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
-40039: extern _Float32 f32addf128 (_Float128 __x, _Float128 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32 f32divf128 (_Float128 __x, _Float128 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32 f32mulf128 (_Float128 __x, _Float128 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32 f32subf128 (_Float128 __x, _Float128 __y) throw ();
-40039: # 647 "/usr/include/math.h" 2 3 4
-40039: # 666 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
-40039: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
-40039: extern _Float32x f32xaddf64 (_Float64 __x, _Float64 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32x f32xdivf64 (_Float64 __x, _Float64 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32x f32xmulf64 (_Float64 __x, _Float64 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32x f32xsubf64 (_Float64 __x, _Float64 __y) throw ();
-40039: # 667 "/usr/include/math.h" 2 3 4
-40039: # 676 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
-40039: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
-40039: extern _Float32x f32xaddf64x (_Float64x __x, _Float64x __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32x f32xdivf64x (_Float64x __x, _Float64x __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32x f32xmulf64x (_Float64x __x, _Float64x __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32x f32xsubf64x (_Float64x __x, _Float64x __y) throw ();
-40039: # 677 "/usr/include/math.h" 2 3 4
-40039: # 686 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
-40039: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
-40039: extern _Float32x f32xaddf128 (_Float128 __x, _Float128 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32x f32xdivf128 (_Float128 __x, _Float128 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32x f32xmulf128 (_Float128 __x, _Float128 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float32x f32xsubf128 (_Float128 __x, _Float128 __y) throw ();
-40039: # 687 "/usr/include/math.h" 2 3 4
-40039: # 706 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
-40039: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
-40039: extern _Float64 f64addf64x (_Float64x __x, _Float64x __y) throw ();
-40039: 
-40039: 
-40039: extern _Float64 f64divf64x (_Float64x __x, _Float64x __y) throw ();
-40039: 
-40039: 
-40039: extern _Float64 f64mulf64x (_Float64x __x, _Float64x __y) throw ();
-40039: 
-40039: 
-40039: extern _Float64 f64subf64x (_Float64x __x, _Float64x __y) throw ();
-40039: # 707 "/usr/include/math.h" 2 3 4
-40039: # 716 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
-40039: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
-40039: extern _Float64 f64addf128 (_Float128 __x, _Float128 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float64 f64divf128 (_Float128 __x, _Float128 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float64 f64mulf128 (_Float128 __x, _Float128 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float64 f64subf128 (_Float128 __x, _Float128 __y) throw ();
-40039: # 717 "/usr/include/math.h" 2 3 4
-40039: # 736 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
-40039: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
-40039: extern _Float64x f64xaddf128 (_Float128 __x, _Float128 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float64x f64xdivf128 (_Float128 __x, _Float128 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float64x f64xmulf128 (_Float128 __x, _Float128 __y) throw ();
-40039: 
-40039: 
-40039: extern _Float64x f64xsubf128 (_Float128 __x, _Float128 __y) throw ();
-40039: # 737 "/usr/include/math.h" 2 3 4
-40039: # 773 "/usr/include/math.h" 3 4
-40039: extern int signgam;
-40039: # 853 "/usr/include/math.h" 3 4
-40039: enum
-40039:   {
-40039:     FP_NAN =
-40039: 
-40039:       0,
-40039:     FP_INFINITE =
-40039: 
-40039:       1,
-40039:     FP_ZERO =
-40039: 
-40039:       2,
-40039:     FP_SUBNORMAL =
-40039: 
-40039:       3,
-40039:     FP_NORMAL =
-40039: 
-40039:       4
-40039:   };
-40039: # 968 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/iscanonical.h" 1 3 4
-40039: # 23 "/usr/include/x86_64-linux-gnu/bits/iscanonical.h" 3 4
-40039: extern int __iscanonicall (long double __x)
-40039:      throw () __attribute__ ((__const__));
-40039: # 46 "/usr/include/x86_64-linux-gnu/bits/iscanonical.h" 3 4
-40039: extern "C++" {
-40039: inline int iscanonical (float __val) { return ((void) (__typeof (__val)) (__val), 1); }
-40039: inline int iscanonical (double __val) { return ((void) (__typeof (__val)) (__val), 1); }
-40039: inline int iscanonical (long double __val) { return __iscanonicall (__val); }
-40039: 
-40039: inline int iscanonical (_Float128 __val) { return ((void) (__typeof (__val)) (__val), 1); }
-40039: 
-40039: }
-40039: # 969 "/usr/include/math.h" 2 3 4
-40039: # 980 "/usr/include/math.h" 3 4
-40039: extern "C++" {
-40039: inline int issignaling (float __val) { return __issignalingf (__val); }
-40039: inline int issignaling (double __val) { return __issignaling (__val); }
-40039: inline int
-40039: issignaling (long double __val)
-40039: {
-40039: 
-40039: 
-40039: 
-40039:   return __issignalingl (__val);
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: inline int issignaling (_Float128 __val) { return __issignalingf128 (__val); }
-40039: 
-40039: }
-40039: # 1011 "/usr/include/math.h" 3 4
-40039: extern "C++" {
-40039: # 1042 "/usr/include/math.h" 3 4
-40039: template <class __T> inline bool
-40039: iszero (__T __val)
-40039: {
-40039:   return __val == 0;
-40039: }
-40039: 
-40039: }
-40039: # 1240 "/usr/include/math.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/mathinline.h" 1 3 4
-40039: # 1241 "/usr/include/math.h" 2 3 4
-40039: # 1493 "/usr/include/math.h" 3 4
-40039: extern "C++" {
-40039: template<typename> struct __iseqsig_type;
-40039: 
-40039: template<> struct __iseqsig_type<float>
-40039: {
-40039:   static int __call (float __x, float __y) throw ()
-40039:   {
-40039:     return __iseqsigf (__x, __y);
-40039:   }
-40039: };
-40039: 
-40039: template<> struct __iseqsig_type<double>
-40039: {
-40039:   static int __call (double __x, double __y) throw ()
-40039:   {
-40039:     return __iseqsig (__x, __y);
-40039:   }
-40039: };
-40039: 
-40039: template<> struct __iseqsig_type<long double>
-40039: {
-40039:   static int __call (long double __x, long double __y) throw ()
-40039:   {
-40039: 
-40039:     return __iseqsigl (__x, __y);
-40039: 
-40039: 
-40039: 
-40039:   }
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template<> struct __iseqsig_type<_Float128>
-40039: {
-40039:   static int __call (_Float128 __x, _Float128 __y) throw ()
-40039:   {
-40039:     return __iseqsigf128 (__x, __y);
-40039:   }
-40039: };
-40039: 
-40039: 
-40039: template<typename _T1, typename _T2>
-40039: inline int
-40039: iseqsig (_T1 __x, _T2 __y) throw ()
-40039: {
-40039: 
-40039:   typedef decltype (((__x) + (__y) + 0.0f)) _T3;
-40039: 
-40039: 
-40039: 
-40039:   return __iseqsig_type<_T3>::__call (__x, __y);
-40039: }
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 46 "/usr/include/c++/8/cmath" 2 3
-40039: # 77 "/usr/include/c++/8/cmath" 3
-40039: extern "C++"
-40039: {
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   using ::acos;
-40039: 
-40039: 
-40039:   inline constexpr float
-40039:   acos(float __x)
-40039:   { return __builtin_acosf(__x); }
-40039: 
-40039:   inline constexpr long double
-40039:   acos(long double __x)
-40039:   { return __builtin_acosl(__x); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline constexpr
-40039:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                     double>::__type
-40039:     acos(_Tp __x)
-40039:     { return __builtin_acos(__x); }
-40039: 
-40039:   using ::asin;
-40039: 
-40039: 
-40039:   inline constexpr float
-40039:   asin(float __x)
-40039:   { return __builtin_asinf(__x); }
-40039: 
-40039:   inline constexpr long double
-40039:   asin(long double __x)
-40039:   { return __builtin_asinl(__x); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline constexpr
-40039:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                     double>::__type
-40039:     asin(_Tp __x)
-40039:     { return __builtin_asin(__x); }
-40039: 
-40039:   using ::atan;
-40039: 
-40039: 
-40039:   inline constexpr float
-40039:   atan(float __x)
-40039:   { return __builtin_atanf(__x); }
-40039: 
-40039:   inline constexpr long double
-40039:   atan(long double __x)
-40039:   { return __builtin_atanl(__x); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline constexpr
-40039:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                     double>::__type
-40039:     atan(_Tp __x)
-40039:     { return __builtin_atan(__x); }
-40039: 
-40039:   using ::atan2;
-40039: 
-40039: 
-40039:   inline constexpr float
-40039:   atan2(float __y, float __x)
-40039:   { return __builtin_atan2f(__y, __x); }
-40039: 
-40039:   inline constexpr long double
-40039:   atan2(long double __y, long double __x)
-40039:   { return __builtin_atan2l(__y, __x); }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     inline constexpr
-40039:     typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
-40039:     atan2(_Tp __y, _Up __x)
-40039:     {
-40039:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-40039:       return atan2(__type(__y), __type(__x));
-40039:     }
-40039: 
-40039:   using ::ceil;
-40039: 
-40039: 
-40039:   inline constexpr float
-40039:   ceil(float __x)
-40039:   { return __builtin_ceilf(__x); }
-40039: 
-40039:   inline constexpr long double
-40039:   ceil(long double __x)
-40039:   { return __builtin_ceill(__x); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline constexpr
-40039:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                     double>::__type
-40039:     ceil(_Tp __x)
-40039:     { return __builtin_ceil(__x); }
-40039: 
-40039:   using ::cos;
-40039: 
-40039: 
-40039:   inline constexpr float
-40039:   cos(float __x)
-40039:   { return __builtin_cosf(__x); }
-40039: 
-40039:   inline constexpr long double
-40039:   cos(long double __x)
-40039:   { return __builtin_cosl(__x); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline constexpr
-40039:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                     double>::__type
-40039:     cos(_Tp __x)
-40039:     { return __builtin_cos(__x); }
-40039: 
-40039:   using ::cosh;
-40039: 
-40039: 
-40039:   inline constexpr float
-40039:   cosh(float __x)
-40039:   { return __builtin_coshf(__x); }
-40039: 
-40039:   inline constexpr long double
-40039:   cosh(long double __x)
-40039:   { return __builtin_coshl(__x); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline constexpr
-40039:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                     double>::__type
-40039:     cosh(_Tp __x)
-40039:     { return __builtin_cosh(__x); }
-40039: 
-40039:   using ::exp;
-40039: 
-40039: 
-40039:   inline constexpr float
-40039:   exp(float __x)
-40039:   { return __builtin_expf(__x); }
-40039: 
-40039:   inline constexpr long double
-40039:   exp(long double __x)
-40039:   { return __builtin_expl(__x); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline constexpr
-40039:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                     double>::__type
-40039:     exp(_Tp __x)
-40039:     { return __builtin_exp(__x); }
-40039: 
-40039:   using ::fabs;
-40039: 
-40039: 
-40039:   inline constexpr float
-40039:   fabs(float __x)
-40039:   { return __builtin_fabsf(__x); }
-40039: 
-40039:   inline constexpr long double
-40039:   fabs(long double __x)
-40039:   { return __builtin_fabsl(__x); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline constexpr
-40039:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                     double>::__type
-40039:     fabs(_Tp __x)
-40039:     { return __builtin_fabs(__x); }
-40039: 
-40039:   using ::floor;
-40039: 
-40039: 
-40039:   inline constexpr float
-40039:   floor(float __x)
-40039:   { return __builtin_floorf(__x); }
-40039: 
-40039:   inline constexpr long double
-40039:   floor(long double __x)
-40039:   { return __builtin_floorl(__x); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline constexpr
-40039:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                     double>::__type
-40039:     floor(_Tp __x)
-40039:     { return __builtin_floor(__x); }
-40039: 
-40039:   using ::fmod;
-40039: 
-40039: 
-40039:   inline constexpr float
-40039:   fmod(float __x, float __y)
-40039:   { return __builtin_fmodf(__x, __y); }
-40039: 
-40039:   inline constexpr long double
-40039:   fmod(long double __x, long double __y)
-40039:   { return __builtin_fmodl(__x, __y); }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     inline constexpr
-40039:     typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
-40039:     fmod(_Tp __x, _Up __y)
-40039:     {
-40039:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-40039:       return fmod(__type(__x), __type(__y));
-40039:     }
-40039: 
-40039:   using ::frexp;
-40039: 
-40039: 
-40039:   inline float
-40039:   frexp(float __x, int* __exp)
-40039:   { return __builtin_frexpf(__x, __exp); }
-40039: 
-40039:   inline long double
-40039:   frexp(long double __x, int* __exp)
-40039:   { return __builtin_frexpl(__x, __exp); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline constexpr
-40039:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                     double>::__type
-40039:     frexp(_Tp __x, int* __exp)
-40039:     { return __builtin_frexp(__x, __exp); }
-40039: 
-40039:   using ::ldexp;
-40039: 
-40039: 
-40039:   inline constexpr float
-40039:   ldexp(float __x, int __exp)
-40039:   { return __builtin_ldexpf(__x, __exp); }
-40039: 
-40039:   inline constexpr long double
-40039:   ldexp(long double __x, int __exp)
-40039:   { return __builtin_ldexpl(__x, __exp); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline constexpr
-40039:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                     double>::__type
-40039:     ldexp(_Tp __x, int __exp)
-40039:     { return __builtin_ldexp(__x, __exp); }
-40039: 
-40039:   using ::log;
-40039: 
-40039: 
-40039:   inline constexpr float
-40039:   log(float __x)
-40039:   { return __builtin_logf(__x); }
-40039: 
-40039:   inline constexpr long double
-40039:   log(long double __x)
-40039:   { return __builtin_logl(__x); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline constexpr
-40039:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                     double>::__type
-40039:     log(_Tp __x)
-40039:     { return __builtin_log(__x); }
-40039: 
-40039:   using ::log10;
-40039: 
-40039: 
-40039:   inline constexpr float
-40039:   log10(float __x)
-40039:   { return __builtin_log10f(__x); }
-40039: 
-40039:   inline constexpr long double
-40039:   log10(long double __x)
-40039:   { return __builtin_log10l(__x); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline constexpr
-40039:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                     double>::__type
-40039:     log10(_Tp __x)
-40039:     { return __builtin_log10(__x); }
-40039: 
-40039:   using ::modf;
-40039: 
-40039: 
-40039:   inline float
-40039:   modf(float __x, float* __iptr)
-40039:   { return __builtin_modff(__x, __iptr); }
-40039: 
-40039:   inline long double
-40039:   modf(long double __x, long double* __iptr)
-40039:   { return __builtin_modfl(__x, __iptr); }
-40039: 
-40039: 
-40039:   using ::pow;
-40039: 
-40039: 
-40039:   inline constexpr float
-40039:   pow(float __x, float __y)
-40039:   { return __builtin_powf(__x, __y); }
-40039: 
-40039:   inline constexpr long double
-40039:   pow(long double __x, long double __y)
-40039:   { return __builtin_powl(__x, __y); }
-40039: # 412 "/usr/include/c++/8/cmath" 3
-40039:   template<typename _Tp, typename _Up>
-40039:     inline constexpr
-40039:     typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
-40039:     pow(_Tp __x, _Up __y)
-40039:     {
-40039:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-40039:       return pow(__type(__x), __type(__y));
-40039:     }
-40039: 
-40039:   using ::sin;
-40039: 
-40039: 
-40039:   inline constexpr float
-40039:   sin(float __x)
-40039:   { return __builtin_sinf(__x); }
-40039: 
-40039:   inline constexpr long double
-40039:   sin(long double __x)
-40039:   { return __builtin_sinl(__x); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline constexpr
-40039:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                     double>::__type
-40039:     sin(_Tp __x)
-40039:     { return __builtin_sin(__x); }
-40039: 
-40039:   using ::sinh;
-40039: 
-40039: 
-40039:   inline constexpr float
-40039:   sinh(float __x)
-40039:   { return __builtin_sinhf(__x); }
-40039: 
-40039:   inline constexpr long double
-40039:   sinh(long double __x)
-40039:   { return __builtin_sinhl(__x); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline constexpr
-40039:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                     double>::__type
-40039:     sinh(_Tp __x)
-40039:     { return __builtin_sinh(__x); }
-40039: 
-40039:   using ::sqrt;
-40039: 
-40039: 
-40039:   inline constexpr float
-40039:   sqrt(float __x)
-40039:   { return __builtin_sqrtf(__x); }
-40039: 
-40039:   inline constexpr long double
-40039:   sqrt(long double __x)
-40039:   { return __builtin_sqrtl(__x); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline constexpr
-40039:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                     double>::__type
-40039:     sqrt(_Tp __x)
-40039:     { return __builtin_sqrt(__x); }
-40039: 
-40039:   using ::tan;
-40039: 
-40039: 
-40039:   inline constexpr float
-40039:   tan(float __x)
-40039:   { return __builtin_tanf(__x); }
-40039: 
-40039:   inline constexpr long double
-40039:   tan(long double __x)
-40039:   { return __builtin_tanl(__x); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline constexpr
-40039:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                     double>::__type
-40039:     tan(_Tp __x)
-40039:     { return __builtin_tan(__x); }
-40039: 
-40039:   using ::tanh;
-40039: 
-40039: 
-40039:   inline constexpr float
-40039:   tanh(float __x)
-40039:   { return __builtin_tanhf(__x); }
-40039: 
-40039:   inline constexpr long double
-40039:   tanh(long double __x)
-40039:   { return __builtin_tanhl(__x); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline constexpr
-40039:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                     double>::__type
-40039:     tanh(_Tp __x)
-40039:     { return __builtin_tanh(__x); }
-40039: # 536 "/usr/include/c++/8/cmath" 3
-40039:   constexpr int
-40039:   fpclassify(float __x)
-40039:   { return __builtin_fpclassify(0, 1, 4,
-40039:     3, 2, __x); }
-40039: 
-40039:   constexpr int
-40039:   fpclassify(double __x)
-40039:   { return __builtin_fpclassify(0, 1, 4,
-40039:     3, 2, __x); }
-40039: 
-40039:   constexpr int
-40039:   fpclassify(long double __x)
-40039:   { return __builtin_fpclassify(0, 1, 4,
-40039:     3, 2, __x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               int>::__type
-40039:     fpclassify(_Tp __x)
-40039:     { return __x != 0 ? 4 : 2; }
-40039: 
-40039: 
-40039: 
-40039:   constexpr bool
-40039:   isfinite(float __x)
-40039:   { return __builtin_isfinite(__x); }
-40039: 
-40039:   constexpr bool
-40039:   isfinite(double __x)
-40039:   { return __builtin_isfinite(__x); }
-40039: 
-40039:   constexpr bool
-40039:   isfinite(long double __x)
-40039:   { return __builtin_isfinite(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               bool>::__type
-40039:     isfinite(_Tp __x)
-40039:     { return true; }
-40039: 
-40039: 
-40039: 
-40039:   constexpr bool
-40039:   isinf(float __x)
-40039:   { return __builtin_isinf(__x); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   constexpr bool
-40039:   isinf(double __x)
-40039:   { return __builtin_isinf(__x); }
-40039: 
-40039: 
-40039:   constexpr bool
-40039:   isinf(long double __x)
-40039:   { return __builtin_isinf(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               bool>::__type
-40039:     isinf(_Tp __x)
-40039:     { return false; }
-40039: 
-40039: 
-40039: 
-40039:   constexpr bool
-40039:   isnan(float __x)
-40039:   { return __builtin_isnan(__x); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   constexpr bool
-40039:   isnan(double __x)
-40039:   { return __builtin_isnan(__x); }
-40039: 
-40039: 
-40039:   constexpr bool
-40039:   isnan(long double __x)
-40039:   { return __builtin_isnan(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               bool>::__type
-40039:     isnan(_Tp __x)
-40039:     { return false; }
-40039: 
-40039: 
-40039: 
-40039:   constexpr bool
-40039:   isnormal(float __x)
-40039:   { return __builtin_isnormal(__x); }
-40039: 
-40039:   constexpr bool
-40039:   isnormal(double __x)
-40039:   { return __builtin_isnormal(__x); }
-40039: 
-40039:   constexpr bool
-40039:   isnormal(long double __x)
-40039:   { return __builtin_isnormal(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               bool>::__type
-40039:     isnormal(_Tp __x)
-40039:     { return __x != 0 ? true : false; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   constexpr bool
-40039:   signbit(float __x)
-40039:   { return __builtin_signbit(__x); }
-40039: 
-40039:   constexpr bool
-40039:   signbit(double __x)
-40039:   { return __builtin_signbit(__x); }
-40039: 
-40039:   constexpr bool
-40039:   signbit(long double __x)
-40039:   { return __builtin_signbit(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               bool>::__type
-40039:     signbit(_Tp __x)
-40039:     { return __x < 0 ? true : false; }
-40039: 
-40039: 
-40039: 
-40039:   constexpr bool
-40039:   isgreater(float __x, float __y)
-40039:   { return __builtin_isgreater(__x, __y); }
-40039: 
-40039:   constexpr bool
-40039:   isgreater(double __x, double __y)
-40039:   { return __builtin_isgreater(__x, __y); }
-40039: 
-40039:   constexpr bool
-40039:   isgreater(long double __x, long double __y)
-40039:   { return __builtin_isgreater(__x, __y); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     constexpr typename
-40039:     __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
-40039:        && __is_arithmetic<_Up>::__value), bool>::__type
-40039:     isgreater(_Tp __x, _Up __y)
-40039:     {
-40039:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-40039:       return __builtin_isgreater(__type(__x), __type(__y));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   constexpr bool
-40039:   isgreaterequal(float __x, float __y)
-40039:   { return __builtin_isgreaterequal(__x, __y); }
-40039: 
-40039:   constexpr bool
-40039:   isgreaterequal(double __x, double __y)
-40039:   { return __builtin_isgreaterequal(__x, __y); }
-40039: 
-40039:   constexpr bool
-40039:   isgreaterequal(long double __x, long double __y)
-40039:   { return __builtin_isgreaterequal(__x, __y); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     constexpr typename
-40039:     __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
-40039:        && __is_arithmetic<_Up>::__value), bool>::__type
-40039:     isgreaterequal(_Tp __x, _Up __y)
-40039:     {
-40039:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-40039:       return __builtin_isgreaterequal(__type(__x), __type(__y));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   constexpr bool
-40039:   isless(float __x, float __y)
-40039:   { return __builtin_isless(__x, __y); }
-40039: 
-40039:   constexpr bool
-40039:   isless(double __x, double __y)
-40039:   { return __builtin_isless(__x, __y); }
-40039: 
-40039:   constexpr bool
-40039:   isless(long double __x, long double __y)
-40039:   { return __builtin_isless(__x, __y); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     constexpr typename
-40039:     __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
-40039:        && __is_arithmetic<_Up>::__value), bool>::__type
-40039:     isless(_Tp __x, _Up __y)
-40039:     {
-40039:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-40039:       return __builtin_isless(__type(__x), __type(__y));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   constexpr bool
-40039:   islessequal(float __x, float __y)
-40039:   { return __builtin_islessequal(__x, __y); }
-40039: 
-40039:   constexpr bool
-40039:   islessequal(double __x, double __y)
-40039:   { return __builtin_islessequal(__x, __y); }
-40039: 
-40039:   constexpr bool
-40039:   islessequal(long double __x, long double __y)
-40039:   { return __builtin_islessequal(__x, __y); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     constexpr typename
-40039:     __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
-40039:        && __is_arithmetic<_Up>::__value), bool>::__type
-40039:     islessequal(_Tp __x, _Up __y)
-40039:     {
-40039:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-40039:       return __builtin_islessequal(__type(__x), __type(__y));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   constexpr bool
-40039:   islessgreater(float __x, float __y)
-40039:   { return __builtin_islessgreater(__x, __y); }
-40039: 
-40039:   constexpr bool
-40039:   islessgreater(double __x, double __y)
-40039:   { return __builtin_islessgreater(__x, __y); }
-40039: 
-40039:   constexpr bool
-40039:   islessgreater(long double __x, long double __y)
-40039:   { return __builtin_islessgreater(__x, __y); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     constexpr typename
-40039:     __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
-40039:        && __is_arithmetic<_Up>::__value), bool>::__type
-40039:     islessgreater(_Tp __x, _Up __y)
-40039:     {
-40039:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-40039:       return __builtin_islessgreater(__type(__x), __type(__y));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   constexpr bool
-40039:   isunordered(float __x, float __y)
-40039:   { return __builtin_isunordered(__x, __y); }
-40039: 
-40039:   constexpr bool
-40039:   isunordered(double __x, double __y)
-40039:   { return __builtin_isunordered(__x, __y); }
-40039: 
-40039:   constexpr bool
-40039:   isunordered(long double __x, long double __y)
-40039:   { return __builtin_isunordered(__x, __y); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     constexpr typename
-40039:     __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
-40039:        && __is_arithmetic<_Up>::__value), bool>::__type
-40039:     isunordered(_Tp __x, _Up __y)
-40039:     {
-40039:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-40039:       return __builtin_isunordered(__type(__x), __type(__y));
-40039:     }
-40039: # 1065 "/usr/include/c++/8/cmath" 3
-40039:   using ::double_t;
-40039:   using ::float_t;
-40039: 
-40039: 
-40039:   using ::acosh;
-40039:   using ::acoshf;
-40039:   using ::acoshl;
-40039: 
-40039:   using ::asinh;
-40039:   using ::asinhf;
-40039:   using ::asinhl;
-40039: 
-40039:   using ::atanh;
-40039:   using ::atanhf;
-40039:   using ::atanhl;
-40039: 
-40039:   using ::cbrt;
-40039:   using ::cbrtf;
-40039:   using ::cbrtl;
-40039: 
-40039:   using ::copysign;
-40039:   using ::copysignf;
-40039:   using ::copysignl;
-40039: 
-40039:   using ::erf;
-40039:   using ::erff;
-40039:   using ::erfl;
-40039: 
-40039:   using ::erfc;
-40039:   using ::erfcf;
-40039:   using ::erfcl;
-40039: 
-40039:   using ::exp2;
-40039:   using ::exp2f;
-40039:   using ::exp2l;
-40039: 
-40039:   using ::expm1;
-40039:   using ::expm1f;
-40039:   using ::expm1l;
-40039: 
-40039:   using ::fdim;
-40039:   using ::fdimf;
-40039:   using ::fdiml;
-40039: 
-40039:   using ::fma;
-40039:   using ::fmaf;
-40039:   using ::fmal;
-40039: 
-40039:   using ::fmax;
-40039:   using ::fmaxf;
-40039:   using ::fmaxl;
-40039: 
-40039:   using ::fmin;
-40039:   using ::fminf;
-40039:   using ::fminl;
-40039: 
-40039:   using ::hypot;
-40039:   using ::hypotf;
-40039:   using ::hypotl;
-40039: 
-40039:   using ::ilogb;
-40039:   using ::ilogbf;
-40039:   using ::ilogbl;
-40039: 
-40039:   using ::lgamma;
-40039:   using ::lgammaf;
-40039:   using ::lgammal;
-40039: 
-40039: 
-40039:   using ::llrint;
-40039:   using ::llrintf;
-40039:   using ::llrintl;
-40039: 
-40039:   using ::llround;
-40039:   using ::llroundf;
-40039:   using ::llroundl;
-40039: 
-40039: 
-40039:   using ::log1p;
-40039:   using ::log1pf;
-40039:   using ::log1pl;
-40039: 
-40039:   using ::log2;
-40039:   using ::log2f;
-40039:   using ::log2l;
-40039: 
-40039:   using ::logb;
-40039:   using ::logbf;
-40039:   using ::logbl;
-40039: 
-40039:   using ::lrint;
-40039:   using ::lrintf;
-40039:   using ::lrintl;
-40039: 
-40039:   using ::lround;
-40039:   using ::lroundf;
-40039:   using ::lroundl;
-40039: 
-40039:   using ::nan;
-40039:   using ::nanf;
-40039:   using ::nanl;
-40039: 
-40039:   using ::nearbyint;
-40039:   using ::nearbyintf;
-40039:   using ::nearbyintl;
-40039: 
-40039:   using ::nextafter;
-40039:   using ::nextafterf;
-40039:   using ::nextafterl;
-40039: 
-40039:   using ::nexttoward;
-40039:   using ::nexttowardf;
-40039:   using ::nexttowardl;
-40039: 
-40039:   using ::remainder;
-40039:   using ::remainderf;
-40039:   using ::remainderl;
-40039: 
-40039:   using ::remquo;
-40039:   using ::remquof;
-40039:   using ::remquol;
-40039: 
-40039:   using ::rint;
-40039:   using ::rintf;
-40039:   using ::rintl;
-40039: 
-40039:   using ::round;
-40039:   using ::roundf;
-40039:   using ::roundl;
-40039: 
-40039:   using ::scalbln;
-40039:   using ::scalblnf;
-40039:   using ::scalblnl;
-40039: 
-40039:   using ::scalbn;
-40039:   using ::scalbnf;
-40039:   using ::scalbnl;
-40039: 
-40039:   using ::tgamma;
-40039:   using ::tgammaf;
-40039:   using ::tgammal;
-40039: 
-40039:   using ::trunc;
-40039:   using ::truncf;
-40039:   using ::truncl;
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   acosh(float __x)
-40039:   { return __builtin_acoshf(__x); }
-40039: 
-40039:   constexpr long double
-40039:   acosh(long double __x)
-40039:   { return __builtin_acoshl(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               double>::__type
-40039:     acosh(_Tp __x)
-40039:     { return __builtin_acosh(__x); }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   asinh(float __x)
-40039:   { return __builtin_asinhf(__x); }
-40039: 
-40039:   constexpr long double
-40039:   asinh(long double __x)
-40039:   { return __builtin_asinhl(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               double>::__type
-40039:     asinh(_Tp __x)
-40039:     { return __builtin_asinh(__x); }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   atanh(float __x)
-40039:   { return __builtin_atanhf(__x); }
-40039: 
-40039:   constexpr long double
-40039:   atanh(long double __x)
-40039:   { return __builtin_atanhl(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               double>::__type
-40039:     atanh(_Tp __x)
-40039:     { return __builtin_atanh(__x); }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   cbrt(float __x)
-40039:   { return __builtin_cbrtf(__x); }
-40039: 
-40039:   constexpr long double
-40039:   cbrt(long double __x)
-40039:   { return __builtin_cbrtl(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               double>::__type
-40039:     cbrt(_Tp __x)
-40039:     { return __builtin_cbrt(__x); }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   copysign(float __x, float __y)
-40039:   { return __builtin_copysignf(__x, __y); }
-40039: 
-40039:   constexpr long double
-40039:   copysign(long double __x, long double __y)
-40039:   { return __builtin_copysignl(__x, __y); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
-40039:     copysign(_Tp __x, _Up __y)
-40039:     {
-40039:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-40039:       return copysign(__type(__x), __type(__y));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   erf(float __x)
-40039:   { return __builtin_erff(__x); }
-40039: 
-40039:   constexpr long double
-40039:   erf(long double __x)
-40039:   { return __builtin_erfl(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               double>::__type
-40039:     erf(_Tp __x)
-40039:     { return __builtin_erf(__x); }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   erfc(float __x)
-40039:   { return __builtin_erfcf(__x); }
-40039: 
-40039:   constexpr long double
-40039:   erfc(long double __x)
-40039:   { return __builtin_erfcl(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               double>::__type
-40039:     erfc(_Tp __x)
-40039:     { return __builtin_erfc(__x); }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   exp2(float __x)
-40039:   { return __builtin_exp2f(__x); }
-40039: 
-40039:   constexpr long double
-40039:   exp2(long double __x)
-40039:   { return __builtin_exp2l(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               double>::__type
-40039:     exp2(_Tp __x)
-40039:     { return __builtin_exp2(__x); }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   expm1(float __x)
-40039:   { return __builtin_expm1f(__x); }
-40039: 
-40039:   constexpr long double
-40039:   expm1(long double __x)
-40039:   { return __builtin_expm1l(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               double>::__type
-40039:     expm1(_Tp __x)
-40039:     { return __builtin_expm1(__x); }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   fdim(float __x, float __y)
-40039:   { return __builtin_fdimf(__x, __y); }
-40039: 
-40039:   constexpr long double
-40039:   fdim(long double __x, long double __y)
-40039:   { return __builtin_fdiml(__x, __y); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
-40039:     fdim(_Tp __x, _Up __y)
-40039:     {
-40039:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-40039:       return fdim(__type(__x), __type(__y));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   fma(float __x, float __y, float __z)
-40039:   { return __builtin_fmaf(__x, __y, __z); }
-40039: 
-40039:   constexpr long double
-40039:   fma(long double __x, long double __y, long double __z)
-40039:   { return __builtin_fmal(__x, __y, __z); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up, typename _Vp>
-40039:     constexpr typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type
-40039:     fma(_Tp __x, _Up __y, _Vp __z)
-40039:     {
-40039:       typedef typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type __type;
-40039:       return fma(__type(__x), __type(__y), __type(__z));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   fmax(float __x, float __y)
-40039:   { return __builtin_fmaxf(__x, __y); }
-40039: 
-40039:   constexpr long double
-40039:   fmax(long double __x, long double __y)
-40039:   { return __builtin_fmaxl(__x, __y); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
-40039:     fmax(_Tp __x, _Up __y)
-40039:     {
-40039:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-40039:       return fmax(__type(__x), __type(__y));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   fmin(float __x, float __y)
-40039:   { return __builtin_fminf(__x, __y); }
-40039: 
-40039:   constexpr long double
-40039:   fmin(long double __x, long double __y)
-40039:   { return __builtin_fminl(__x, __y); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
-40039:     fmin(_Tp __x, _Up __y)
-40039:     {
-40039:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-40039:       return fmin(__type(__x), __type(__y));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   hypot(float __x, float __y)
-40039:   { return __builtin_hypotf(__x, __y); }
-40039: 
-40039:   constexpr long double
-40039:   hypot(long double __x, long double __y)
-40039:   { return __builtin_hypotl(__x, __y); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
-40039:     hypot(_Tp __x, _Up __y)
-40039:     {
-40039:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-40039:       return hypot(__type(__x), __type(__y));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   constexpr int
-40039:   ilogb(float __x)
-40039:   { return __builtin_ilogbf(__x); }
-40039: 
-40039:   constexpr int
-40039:   ilogb(long double __x)
-40039:   { return __builtin_ilogbl(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr
-40039:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                     int>::__type
-40039:     ilogb(_Tp __x)
-40039:     { return __builtin_ilogb(__x); }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   lgamma(float __x)
-40039:   { return __builtin_lgammaf(__x); }
-40039: 
-40039:   constexpr long double
-40039:   lgamma(long double __x)
-40039:   { return __builtin_lgammal(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               double>::__type
-40039:     lgamma(_Tp __x)
-40039:     { return __builtin_lgamma(__x); }
-40039: 
-40039: 
-40039: 
-40039:   constexpr long long
-40039:   llrint(float __x)
-40039:   { return __builtin_llrintf(__x); }
-40039: 
-40039:   constexpr long long
-40039:   llrint(long double __x)
-40039:   { return __builtin_llrintl(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               long long>::__type
-40039:     llrint(_Tp __x)
-40039:     { return __builtin_llrint(__x); }
-40039: 
-40039: 
-40039: 
-40039:   constexpr long long
-40039:   llround(float __x)
-40039:   { return __builtin_llroundf(__x); }
-40039: 
-40039:   constexpr long long
-40039:   llround(long double __x)
-40039:   { return __builtin_llroundl(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               long long>::__type
-40039:     llround(_Tp __x)
-40039:     { return __builtin_llround(__x); }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   log1p(float __x)
-40039:   { return __builtin_log1pf(__x); }
-40039: 
-40039:   constexpr long double
-40039:   log1p(long double __x)
-40039:   { return __builtin_log1pl(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               double>::__type
-40039:     log1p(_Tp __x)
-40039:     { return __builtin_log1p(__x); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   log2(float __x)
-40039:   { return __builtin_log2f(__x); }
-40039: 
-40039:   constexpr long double
-40039:   log2(long double __x)
-40039:   { return __builtin_log2l(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               double>::__type
-40039:     log2(_Tp __x)
-40039:     { return __builtin_log2(__x); }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   logb(float __x)
-40039:   { return __builtin_logbf(__x); }
-40039: 
-40039:   constexpr long double
-40039:   logb(long double __x)
-40039:   { return __builtin_logbl(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               double>::__type
-40039:     logb(_Tp __x)
-40039:     { return __builtin_logb(__x); }
-40039: 
-40039: 
-40039: 
-40039:   constexpr long
-40039:   lrint(float __x)
-40039:   { return __builtin_lrintf(__x); }
-40039: 
-40039:   constexpr long
-40039:   lrint(long double __x)
-40039:   { return __builtin_lrintl(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               long>::__type
-40039:     lrint(_Tp __x)
-40039:     { return __builtin_lrint(__x); }
-40039: 
-40039: 
-40039: 
-40039:   constexpr long
-40039:   lround(float __x)
-40039:   { return __builtin_lroundf(__x); }
-40039: 
-40039:   constexpr long
-40039:   lround(long double __x)
-40039:   { return __builtin_lroundl(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               long>::__type
-40039:     lround(_Tp __x)
-40039:     { return __builtin_lround(__x); }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   nearbyint(float __x)
-40039:   { return __builtin_nearbyintf(__x); }
-40039: 
-40039:   constexpr long double
-40039:   nearbyint(long double __x)
-40039:   { return __builtin_nearbyintl(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               double>::__type
-40039:     nearbyint(_Tp __x)
-40039:     { return __builtin_nearbyint(__x); }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   nextafter(float __x, float __y)
-40039:   { return __builtin_nextafterf(__x, __y); }
-40039: 
-40039:   constexpr long double
-40039:   nextafter(long double __x, long double __y)
-40039:   { return __builtin_nextafterl(__x, __y); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
-40039:     nextafter(_Tp __x, _Up __y)
-40039:     {
-40039:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-40039:       return nextafter(__type(__x), __type(__y));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   nexttoward(float __x, long double __y)
-40039:   { return __builtin_nexttowardf(__x, __y); }
-40039: 
-40039:   constexpr long double
-40039:   nexttoward(long double __x, long double __y)
-40039:   { return __builtin_nexttowardl(__x, __y); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               double>::__type
-40039:     nexttoward(_Tp __x, long double __y)
-40039:     { return __builtin_nexttoward(__x, __y); }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   remainder(float __x, float __y)
-40039:   { return __builtin_remainderf(__x, __y); }
-40039: 
-40039:   constexpr long double
-40039:   remainder(long double __x, long double __y)
-40039:   { return __builtin_remainderl(__x, __y); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
-40039:     remainder(_Tp __x, _Up __y)
-40039:     {
-40039:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-40039:       return remainder(__type(__x), __type(__y));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   inline float
-40039:   remquo(float __x, float __y, int* __pquo)
-40039:   { return __builtin_remquof(__x, __y, __pquo); }
-40039: 
-40039:   inline long double
-40039:   remquo(long double __x, long double __y, int* __pquo)
-40039:   { return __builtin_remquol(__x, __y, __pquo); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
-40039:     remquo(_Tp __x, _Up __y, int* __pquo)
-40039:     {
-40039:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
-40039:       return remquo(__type(__x), __type(__y), __pquo);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   rint(float __x)
-40039:   { return __builtin_rintf(__x); }
-40039: 
-40039:   constexpr long double
-40039:   rint(long double __x)
-40039:   { return __builtin_rintl(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               double>::__type
-40039:     rint(_Tp __x)
-40039:     { return __builtin_rint(__x); }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   round(float __x)
-40039:   { return __builtin_roundf(__x); }
-40039: 
-40039:   constexpr long double
-40039:   round(long double __x)
-40039:   { return __builtin_roundl(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               double>::__type
-40039:     round(_Tp __x)
-40039:     { return __builtin_round(__x); }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   scalbln(float __x, long __ex)
-40039:   { return __builtin_scalblnf(__x, __ex); }
-40039: 
-40039:   constexpr long double
-40039:   scalbln(long double __x, long __ex)
-40039:   { return __builtin_scalblnl(__x, __ex); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               double>::__type
-40039:     scalbln(_Tp __x, long __ex)
-40039:     { return __builtin_scalbln(__x, __ex); }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   scalbn(float __x, int __ex)
-40039:   { return __builtin_scalbnf(__x, __ex); }
-40039: 
-40039:   constexpr long double
-40039:   scalbn(long double __x, int __ex)
-40039:   { return __builtin_scalbnl(__x, __ex); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               double>::__type
-40039:     scalbn(_Tp __x, int __ex)
-40039:     { return __builtin_scalbn(__x, __ex); }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   tgamma(float __x)
-40039:   { return __builtin_tgammaf(__x); }
-40039: 
-40039:   constexpr long double
-40039:   tgamma(long double __x)
-40039:   { return __builtin_tgammal(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               double>::__type
-40039:     tgamma(_Tp __x)
-40039:     { return __builtin_tgamma(__x); }
-40039: 
-40039: 
-40039: 
-40039:   constexpr float
-40039:   trunc(float __x)
-40039:   { return __builtin_truncf(__x); }
-40039: 
-40039:   constexpr long double
-40039:   trunc(long double __x)
-40039:   { return __builtin_truncl(__x); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
-40039:                                               double>::__type
-40039:     trunc(_Tp __x)
-40039:     { return __builtin_trunc(__x); }
-40039: # 1888 "/usr/include/c++/8/cmath" 3
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 35 "../../src/Float_defs.hh" 2
-40039: # 1 "/usr/include/c++/8/map" 1 3
-40039: # 58 "/usr/include/c++/8/map" 3
-40039:        
-40039: # 59 "/usr/include/c++/8/map" 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/stl_map.h" 1 3
-40039: # 63 "/usr/include/c++/8/bits/stl_map.h" 3
-40039: # 1 "/usr/include/c++/8/tuple" 1 3
-40039: # 32 "/usr/include/c++/8/tuple" 3
-40039:        
-40039: # 33 "/usr/include/c++/8/tuple" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/array" 1 3
-40039: # 32 "/usr/include/c++/8/array" 3
-40039:        
-40039: # 33 "/usr/include/c++/8/array" 3
-40039: # 43 "/usr/include/c++/8/array" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   template<typename _Tp, std::size_t _Nm>
-40039:     struct __array_traits
-40039:     {
-40039:       typedef _Tp _Type[_Nm];
-40039:       typedef __is_swappable<_Tp> _Is_swappable;
-40039:       typedef __is_nothrow_swappable<_Tp> _Is_nothrow_swappable;
-40039: 
-40039:       static constexpr _Tp&
-40039:       _S_ref(const _Type& __t, std::size_t __n) noexcept
-40039:       { return const_cast<_Tp&>(__t[__n]); }
-40039: 
-40039:       static constexpr _Tp*
-40039:       _S_ptr(const _Type& __t) noexcept
-40039:       { return const_cast<_Tp*>(__t); }
-40039:     };
-40039: 
-40039:  template<typename _Tp>
-40039:    struct __array_traits<_Tp, 0>
-40039:    {
-40039:      struct _Type { };
-40039:      typedef true_type _Is_swappable;
-40039:      typedef true_type _Is_nothrow_swappable;
-40039: 
-40039:      static constexpr _Tp&
-40039:      _S_ref(const _Type&, std::size_t) noexcept
-40039:      { return *static_cast<_Tp*>(nullptr); }
-40039: 
-40039:      static constexpr _Tp*
-40039:      _S_ptr(const _Type&) noexcept
-40039:      { return nullptr; }
-40039:    };
-40039: # 93 "/usr/include/c++/8/array" 3
-40039:   template<typename _Tp, std::size_t _Nm>
-40039:     struct array
-40039:     {
-40039:       typedef _Tp value_type;
-40039:       typedef value_type* pointer;
-40039:       typedef const value_type* const_pointer;
-40039:       typedef value_type& reference;
-40039:       typedef const value_type& const_reference;
-40039:       typedef value_type* iterator;
-40039:       typedef const value_type* const_iterator;
-40039:       typedef std::size_t size_type;
-40039:       typedef std::ptrdiff_t difference_type;
-40039:       typedef std::reverse_iterator<iterator> reverse_iterator;
-40039:       typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
-40039: 
-40039: 
-40039:       typedef std::__array_traits<_Tp, _Nm> _AT_Type;
-40039:       typename _AT_Type::_Type _M_elems;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       fill(const value_type& __u)
-40039:       { std::fill_n(begin(), size(), __u); }
-40039: 
-40039:       void
-40039:       swap(array& __other)
-40039:       noexcept(_AT_Type::_Is_nothrow_swappable::value)
-40039:       { std::swap_ranges(begin(), end(), __other.begin()); }
-40039: 
-40039: 
-40039:       iterator
-40039:       begin() noexcept
-40039:       { return iterator(data()); }
-40039: 
-40039:       const_iterator
-40039:       begin() const noexcept
-40039:       { return const_iterator(data()); }
-40039: 
-40039:       iterator
-40039:       end() noexcept
-40039:       { return iterator(data() + _Nm); }
-40039: 
-40039:       const_iterator
-40039:       end() const noexcept
-40039:       { return const_iterator(data() + _Nm); }
-40039: 
-40039:       reverse_iterator
-40039:       rbegin() noexcept
-40039:       { return reverse_iterator(end()); }
-40039: 
-40039:       const_reverse_iterator
-40039:       rbegin() const noexcept
-40039:       { return const_reverse_iterator(end()); }
-40039: 
-40039:       reverse_iterator
-40039:       rend() noexcept
-40039:       { return reverse_iterator(begin()); }
-40039: 
-40039:       const_reverse_iterator
-40039:       rend() const noexcept
-40039:       { return const_reverse_iterator(begin()); }
-40039: 
-40039:       const_iterator
-40039:       cbegin() const noexcept
-40039:       { return const_iterator(data()); }
-40039: 
-40039:       const_iterator
-40039:       cend() const noexcept
-40039:       { return const_iterator(data() + _Nm); }
-40039: 
-40039:       const_reverse_iterator
-40039:       crbegin() const noexcept
-40039:       { return const_reverse_iterator(end()); }
-40039: 
-40039:       const_reverse_iterator
-40039:       crend() const noexcept
-40039:       { return const_reverse_iterator(begin()); }
-40039: 
-40039: 
-40039:       constexpr size_type
-40039:       size() const noexcept { return _Nm; }
-40039: 
-40039:       constexpr size_type
-40039:       max_size() const noexcept { return _Nm; }
-40039: 
-40039:       constexpr bool
-40039:       empty() const noexcept { return size() == 0; }
-40039: 
-40039: 
-40039:       reference
-40039:       operator[](size_type __n) noexcept
-40039:       { return _AT_Type::_S_ref(_M_elems, __n); }
-40039: 
-40039:       constexpr const_reference
-40039:       operator[](size_type __n) const noexcept
-40039:       { return _AT_Type::_S_ref(_M_elems, __n); }
-40039: 
-40039:       reference
-40039:       at(size_type __n)
-40039:       {
-40039:  if (__n >= _Nm)
-40039:    std::__throw_out_of_range_fmt(("array::at: __n (which is %zu) " ">= _Nm (which is %zu)")
-40039:                                  ,
-40039:      __n, _Nm);
-40039:  return _AT_Type::_S_ref(_M_elems, __n);
-40039:       }
-40039: 
-40039:       constexpr const_reference
-40039:       at(size_type __n) const
-40039:       {
-40039: 
-40039: 
-40039:  return __n < _Nm ? _AT_Type::_S_ref(_M_elems, __n)
-40039:    : (std::__throw_out_of_range_fmt(("array::at: __n (which is %zu) " ">= _Nm (which is %zu)")
-40039:                                     ,
-40039:         __n, _Nm),
-40039:       _AT_Type::_S_ref(_M_elems, 0));
-40039:       }
-40039: 
-40039:       reference
-40039:       front() noexcept
-40039:       { return *begin(); }
-40039: 
-40039:       constexpr const_reference
-40039:       front() const noexcept
-40039:       { return _AT_Type::_S_ref(_M_elems, 0); }
-40039: 
-40039:       reference
-40039:       back() noexcept
-40039:       { return _Nm ? *(end() - 1) : *end(); }
-40039: 
-40039:       constexpr const_reference
-40039:       back() const noexcept
-40039:       {
-40039:  return _Nm ? _AT_Type::_S_ref(_M_elems, _Nm - 1)
-40039:              : _AT_Type::_S_ref(_M_elems, 0);
-40039:       }
-40039: 
-40039:       pointer
-40039:       data() noexcept
-40039:       { return _AT_Type::_S_ptr(_M_elems); }
-40039: 
-40039:       const_pointer
-40039:       data() const noexcept
-40039:       { return _AT_Type::_S_ptr(_M_elems); }
-40039:     };
-40039: # 250 "/usr/include/c++/8/array" 3
-40039:   template<typename _Tp, std::size_t _Nm>
-40039:     inline bool
-40039:     operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
-40039:     { return std::equal(__one.begin(), __one.end(), __two.begin()); }
-40039: 
-40039:   template<typename _Tp, std::size_t _Nm>
-40039:     inline bool
-40039:     operator!=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
-40039:     { return !(__one == __two); }
-40039: 
-40039:   template<typename _Tp, std::size_t _Nm>
-40039:     inline bool
-40039:     operator<(const array<_Tp, _Nm>& __a, const array<_Tp, _Nm>& __b)
-40039:     {
-40039:       return std::lexicographical_compare(__a.begin(), __a.end(),
-40039:        __b.begin(), __b.end());
-40039:     }
-40039: 
-40039:   template<typename _Tp, std::size_t _Nm>
-40039:     inline bool
-40039:     operator>(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
-40039:     { return __two < __one; }
-40039: 
-40039:   template<typename _Tp, std::size_t _Nm>
-40039:     inline bool
-40039:     operator<=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
-40039:     { return !(__one > __two); }
-40039: 
-40039:   template<typename _Tp, std::size_t _Nm>
-40039:     inline bool
-40039:     operator>=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
-40039:     { return !(__one < __two); }
-40039: 
-40039: 
-40039:   template<typename _Tp, std::size_t _Nm>
-40039:     inline
-40039: 
-40039: 
-40039:     typename enable_if<
-40039:       std::__array_traits<_Tp, _Nm>::_Is_swappable::value
-40039:     >::type
-40039: 
-40039: 
-40039: 
-40039:     swap(array<_Tp, _Nm>& __one, array<_Tp, _Nm>& __two)
-40039:     noexcept(noexcept(__one.swap(__two)))
-40039:     { __one.swap(__two); }
-40039: 
-40039: 
-40039:   template<typename _Tp, std::size_t _Nm>
-40039:     typename enable_if<
-40039:       !std::__array_traits<_Tp, _Nm>::_Is_swappable::value>::type
-40039:     swap(array<_Tp, _Nm>&, array<_Tp, _Nm>&) = delete;
-40039: 
-40039: 
-40039:   template<std::size_t _Int, typename _Tp, std::size_t _Nm>
-40039:     constexpr _Tp&
-40039:     get(array<_Tp, _Nm>& __arr) noexcept
-40039:     {
-40039:       static_assert(_Int < _Nm, "array index is within bounds");
-40039:       return std::__array_traits<_Tp, _Nm>::
-40039:  _S_ref(__arr._M_elems, _Int);
-40039:     }
-40039: 
-40039:   template<std::size_t _Int, typename _Tp, std::size_t _Nm>
-40039:     constexpr _Tp&&
-40039:     get(array<_Tp, _Nm>&& __arr) noexcept
-40039:     {
-40039:       static_assert(_Int < _Nm, "array index is within bounds");
-40039:       return std::move(std::get<_Int>(__arr));
-40039:     }
-40039: 
-40039:   template<std::size_t _Int, typename _Tp, std::size_t _Nm>
-40039:     constexpr const _Tp&
-40039:     get(const array<_Tp, _Nm>& __arr) noexcept
-40039:     {
-40039:       static_assert(_Int < _Nm, "array index is within bounds");
-40039:       return std::__array_traits<_Tp, _Nm>::
-40039:  _S_ref(__arr._M_elems, _Int);
-40039:     }
-40039: 
-40039:   template<std::size_t _Int, typename _Tp, std::size_t _Nm>
-40039:     constexpr const _Tp&&
-40039:     get(const array<_Tp, _Nm>&& __arr) noexcept
-40039:     {
-40039:       static_assert(_Int < _Nm, "array index is within bounds");
-40039:       return std::move(std::get<_Int>(__arr));
-40039:     }
-40039: 
-40039: 
-40039: }
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct tuple_size;
-40039: 
-40039: 
-40039:   template<typename _Tp, std::size_t _Nm>
-40039:     struct tuple_size<std::array<_Tp, _Nm>>
-40039:     : public integral_constant<std::size_t, _Nm> { };
-40039: 
-40039: 
-40039:   template<std::size_t _Int, typename _Tp>
-40039:     struct tuple_element;
-40039: 
-40039: 
-40039:   template<std::size_t _Int, typename _Tp, std::size_t _Nm>
-40039:     struct tuple_element<_Int, std::array<_Tp, _Nm>>
-40039:     {
-40039:       static_assert(_Int < _Nm, "index is out of bounds");
-40039:       typedef _Tp type;
-40039:     };
-40039: 
-40039:   template<typename _Tp, std::size_t _Nm>
-40039:     struct __is_tuple_like_impl<std::array<_Tp, _Nm>> : true_type
-40039:     { };
-40039: 
-40039: 
-40039: }
-40039: # 40 "/usr/include/c++/8/tuple" 2 3
-40039: # 1 "/usr/include/c++/8/bits/uses_allocator.h" 1 3
-40039: # 35 "/usr/include/c++/8/bits/uses_allocator.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   struct __erased_type { };
-40039: 
-40039:   template<typename _Alloc, typename _Tp>
-40039:     using __is_erased_or_convertible
-40039:       = __or_<is_same<_Tp, __erased_type>, is_convertible<_Alloc, _Tp>>;
-40039: 
-40039: 
-40039:   struct allocator_arg_t { explicit allocator_arg_t() = default; };
-40039: 
-40039:   constexpr allocator_arg_t allocator_arg =
-40039:     allocator_arg_t();
-40039: 
-40039:   template<typename _Tp, typename _Alloc, typename = __void_t<>>
-40039:     struct __uses_allocator_helper
-40039:     : false_type { };
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     struct __uses_allocator_helper<_Tp, _Alloc,
-40039:        __void_t<typename _Tp::allocator_type>>
-40039:     : __is_erased_or_convertible<_Alloc, typename _Tp::allocator_type>::type
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     struct uses_allocator
-40039:     : __uses_allocator_helper<_Tp, _Alloc>::type
-40039:     { };
-40039: 
-40039:   struct __uses_alloc_base { };
-40039: 
-40039:   struct __uses_alloc0 : __uses_alloc_base
-40039:   {
-40039:     struct _Sink { void operator=(const void*) { } } _M_a;
-40039:   };
-40039: 
-40039:   template<typename _Alloc>
-40039:     struct __uses_alloc1 : __uses_alloc_base { const _Alloc* _M_a; };
-40039: 
-40039:   template<typename _Alloc>
-40039:     struct __uses_alloc2 : __uses_alloc_base { const _Alloc* _M_a; };
-40039: 
-40039:   template<bool, typename _Tp, typename _Alloc, typename... _Args>
-40039:     struct __uses_alloc;
-40039: 
-40039:   template<typename _Tp, typename _Alloc, typename... _Args>
-40039:     struct __uses_alloc<true, _Tp, _Alloc, _Args...>
-40039:     : conditional<
-40039:         is_constructible<_Tp, allocator_arg_t, _Alloc, _Args...>::value,
-40039:         __uses_alloc1<_Alloc>,
-40039:         __uses_alloc2<_Alloc>>::type
-40039:     {
-40039:       static_assert(__or_<
-40039:    is_constructible<_Tp, allocator_arg_t, _Alloc, _Args...>,
-40039:    is_constructible<_Tp, _Args..., _Alloc>>::value, "construction with"
-40039:    " an allocator must be possible if uses_allocator is true");
-40039:     };
-40039: 
-40039:   template<typename _Tp, typename _Alloc, typename... _Args>
-40039:     struct __uses_alloc<false, _Tp, _Alloc, _Args...>
-40039:     : __uses_alloc0 { };
-40039: 
-40039:   template<typename _Tp, typename _Alloc, typename... _Args>
-40039:     using __uses_alloc_t =
-40039:       __uses_alloc<uses_allocator<_Tp, _Alloc>::value, _Tp, _Alloc, _Args...>;
-40039: 
-40039:   template<typename _Tp, typename _Alloc, typename... _Args>
-40039:     inline __uses_alloc_t<_Tp, _Alloc, _Args...>
-40039:     __use_alloc(const _Alloc& __a)
-40039:     {
-40039:       __uses_alloc_t<_Tp, _Alloc, _Args...> __ret;
-40039:       __ret._M_a = std::__addressof(__a);
-40039:       return __ret;
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Alloc, typename... _Args>
-40039:     void
-40039:     __use_alloc(const _Alloc&&) = delete;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<template<typename...> class _Predicate,
-40039:     typename _Tp, typename _Alloc, typename... _Args>
-40039:     struct __is_uses_allocator_predicate
-40039:     : conditional<uses_allocator<_Tp, _Alloc>::value,
-40039:       __or_<_Predicate<_Tp, allocator_arg_t, _Alloc, _Args...>,
-40039:      _Predicate<_Tp, _Args..., _Alloc>>,
-40039:       _Predicate<_Tp, _Args...>>::type { };
-40039: 
-40039:   template<typename _Tp, typename _Alloc, typename... _Args>
-40039:     struct __is_uses_allocator_constructible
-40039:     : __is_uses_allocator_predicate<is_constructible, _Tp, _Alloc, _Args...>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc, typename... _Args>
-40039:     constexpr bool __is_uses_allocator_constructible_v =
-40039:       __is_uses_allocator_constructible<_Tp, _Alloc, _Args...>::value;
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc, typename... _Args>
-40039:     struct __is_nothrow_uses_allocator_constructible
-40039:     : __is_uses_allocator_predicate<is_nothrow_constructible,
-40039:         _Tp, _Alloc, _Args...>
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc, typename... _Args>
-40039:     constexpr bool
-40039:     __is_nothrow_uses_allocator_constructible_v =
-40039:       __is_nothrow_uses_allocator_constructible<_Tp, _Alloc, _Args...>::value;
-40039: 
-40039: 
-40039:   template<typename _Tp, typename... _Args>
-40039:     void __uses_allocator_construct_impl(__uses_alloc0 __a, _Tp* __ptr,
-40039:       _Args&&... __args)
-40039:     { ::new ((void*)__ptr) _Tp(std::forward<_Args>(__args)...); }
-40039: 
-40039:   template<typename _Tp, typename _Alloc, typename... _Args>
-40039:     void __uses_allocator_construct_impl(__uses_alloc1<_Alloc> __a, _Tp* __ptr,
-40039:       _Args&&... __args)
-40039:     {
-40039:       ::new ((void*)__ptr) _Tp(allocator_arg, *__a._M_a,
-40039:           std::forward<_Args>(__args)...);
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Alloc, typename... _Args>
-40039:     void __uses_allocator_construct_impl(__uses_alloc2<_Alloc> __a, _Tp* __ptr,
-40039:       _Args&&... __args)
-40039:     { ::new ((void*)__ptr) _Tp(std::forward<_Args>(__args)..., *__a._M_a); }
-40039: 
-40039:   template<typename _Tp, typename _Alloc, typename... _Args>
-40039:     void __uses_allocator_construct(const _Alloc& __a, _Tp* __ptr,
-40039:         _Args&&... __args)
-40039:     {
-40039:       __uses_allocator_construct_impl(__use_alloc<_Tp, _Alloc, _Args...>(__a),
-40039:           __ptr, std::forward<_Args>(__args)...);
-40039:     }
-40039: 
-40039: 
-40039: }
-40039: # 41 "/usr/include/c++/8/tuple" 2 3
-40039: # 1 "/usr/include/c++/8/bits/invoke.h" 1 3
-40039: # 33 "/usr/include/c++/8/bits/invoke.h" 3
-40039:        
-40039: # 34 "/usr/include/c++/8/bits/invoke.h" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 52 "/usr/include/c++/8/bits/invoke.h" 3
-40039:   template<typename _Tp, typename _Up = typename __inv_unwrap<_Tp>::type>
-40039:     constexpr _Up&&
-40039:     __invfwd(typename remove_reference<_Tp>::type& __t) noexcept
-40039:     { return static_cast<_Up&&>(__t); }
-40039: 
-40039:   template<typename _Res, typename _Fn, typename... _Args>
-40039:     constexpr _Res
-40039:     __invoke_impl(__invoke_other, _Fn&& __f, _Args&&... __args)
-40039:     { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); }
-40039: 
-40039:   template<typename _Res, typename _MemFun, typename _Tp, typename... _Args>
-40039:     constexpr _Res
-40039:     __invoke_impl(__invoke_memfun_ref, _MemFun&& __f, _Tp&& __t,
-40039:     _Args&&... __args)
-40039:     { return (__invfwd<_Tp>(__t).*__f)(std::forward<_Args>(__args)...); }
-40039: 
-40039:   template<typename _Res, typename _MemFun, typename _Tp, typename... _Args>
-40039:     constexpr _Res
-40039:     __invoke_impl(__invoke_memfun_deref, _MemFun&& __f, _Tp&& __t,
-40039:     _Args&&... __args)
-40039:     {
-40039:       return ((*std::forward<_Tp>(__t)).*__f)(std::forward<_Args>(__args)...);
-40039:     }
-40039: 
-40039:   template<typename _Res, typename _MemPtr, typename _Tp>
-40039:     constexpr _Res
-40039:     __invoke_impl(__invoke_memobj_ref, _MemPtr&& __f, _Tp&& __t)
-40039:     { return __invfwd<_Tp>(__t).*__f; }
-40039: 
-40039:   template<typename _Res, typename _MemPtr, typename _Tp>
-40039:     constexpr _Res
-40039:     __invoke_impl(__invoke_memobj_deref, _MemPtr&& __f, _Tp&& __t)
-40039:     { return (*std::forward<_Tp>(__t)).*__f; }
-40039: 
-40039: 
-40039:   template<typename _Callable, typename... _Args>
-40039:     constexpr typename __invoke_result<_Callable, _Args...>::type
-40039:     __invoke(_Callable&& __fn, _Args&&... __args)
-40039:     noexcept(__is_nothrow_invocable<_Callable, _Args...>::value)
-40039:     {
-40039:       using __result = __invoke_result<_Callable, _Args...>;
-40039:       using __type = typename __result::type;
-40039:       using __tag = typename __result::__invoke_type;
-40039:       return std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn),
-40039:      std::forward<_Args>(__args)...);
-40039:     }
-40039: 
-40039: 
-40039: }
-40039: # 42 "/usr/include/c++/8/tuple" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename... _Elements>
-40039:     class tuple;
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_empty_non_tuple : is_empty<_Tp> { };
-40039: 
-40039: 
-40039:   template<typename _El0, typename... _El>
-40039:     struct __is_empty_non_tuple<tuple<_El0, _El...>> : false_type { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     using __empty_not_final
-40039:     = typename conditional<__is_final(_Tp), false_type,
-40039:       __is_empty_non_tuple<_Tp>>::type;
-40039: 
-40039:   template<std::size_t _Idx, typename _Head,
-40039:     bool = __empty_not_final<_Head>::value>
-40039:     struct _Head_base;
-40039: 
-40039:   template<std::size_t _Idx, typename _Head>
-40039:     struct _Head_base<_Idx, _Head, true>
-40039:     : public _Head
-40039:     {
-40039:       constexpr _Head_base()
-40039:       : _Head() { }
-40039: 
-40039:       constexpr _Head_base(const _Head& __h)
-40039:       : _Head(__h) { }
-40039: 
-40039:       constexpr _Head_base(const _Head_base&) = default;
-40039:       constexpr _Head_base(_Head_base&&) = default;
-40039: 
-40039:       template<typename _UHead>
-40039:         constexpr _Head_base(_UHead&& __h)
-40039:  : _Head(std::forward<_UHead>(__h)) { }
-40039: 
-40039:       _Head_base(allocator_arg_t, __uses_alloc0)
-40039:       : _Head() { }
-40039: 
-40039:       template<typename _Alloc>
-40039:  _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a)
-40039:  : _Head(allocator_arg, *__a._M_a) { }
-40039: 
-40039:       template<typename _Alloc>
-40039:  _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a)
-40039:  : _Head(*__a._M_a) { }
-40039: 
-40039:       template<typename _UHead>
-40039:  _Head_base(__uses_alloc0, _UHead&& __uhead)
-40039:  : _Head(std::forward<_UHead>(__uhead)) { }
-40039: 
-40039:       template<typename _Alloc, typename _UHead>
-40039:  _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead)
-40039:  : _Head(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead)) { }
-40039: 
-40039:       template<typename _Alloc, typename _UHead>
-40039:  _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead)
-40039:  : _Head(std::forward<_UHead>(__uhead), *__a._M_a) { }
-40039: 
-40039:       static constexpr _Head&
-40039:       _M_head(_Head_base& __b) noexcept { return __b; }
-40039: 
-40039:       static constexpr const _Head&
-40039:       _M_head(const _Head_base& __b) noexcept { return __b; }
-40039:     };
-40039: 
-40039:   template<std::size_t _Idx, typename _Head>
-40039:     struct _Head_base<_Idx, _Head, false>
-40039:     {
-40039:       constexpr _Head_base()
-40039:       : _M_head_impl() { }
-40039: 
-40039:       constexpr _Head_base(const _Head& __h)
-40039:       : _M_head_impl(__h) { }
-40039: 
-40039:       constexpr _Head_base(const _Head_base&) = default;
-40039:       constexpr _Head_base(_Head_base&&) = default;
-40039: 
-40039:       template<typename _UHead>
-40039:         constexpr _Head_base(_UHead&& __h)
-40039:  : _M_head_impl(std::forward<_UHead>(__h)) { }
-40039: 
-40039:       _Head_base(allocator_arg_t, __uses_alloc0)
-40039:       : _M_head_impl() { }
-40039: 
-40039:       template<typename _Alloc>
-40039:  _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a)
-40039:  : _M_head_impl(allocator_arg, *__a._M_a) { }
-40039: 
-40039:       template<typename _Alloc>
-40039:  _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a)
-40039:  : _M_head_impl(*__a._M_a) { }
-40039: 
-40039:       template<typename _UHead>
-40039:  _Head_base(__uses_alloc0, _UHead&& __uhead)
-40039:  : _M_head_impl(std::forward<_UHead>(__uhead)) { }
-40039: 
-40039:       template<typename _Alloc, typename _UHead>
-40039:  _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead)
-40039:  : _M_head_impl(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead))
-40039:  { }
-40039: 
-40039:       template<typename _Alloc, typename _UHead>
-40039:  _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead)
-40039:  : _M_head_impl(std::forward<_UHead>(__uhead), *__a._M_a) { }
-40039: 
-40039:       static constexpr _Head&
-40039:       _M_head(_Head_base& __b) noexcept { return __b._M_head_impl; }
-40039: 
-40039:       static constexpr const _Head&
-40039:       _M_head(const _Head_base& __b) noexcept { return __b._M_head_impl; }
-40039: 
-40039:       _Head _M_head_impl;
-40039:     };
-40039: # 176 "/usr/include/c++/8/tuple" 3
-40039:   template<std::size_t _Idx, typename... _Elements>
-40039:     struct _Tuple_impl;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<std::size_t _Idx, typename _Head, typename... _Tail>
-40039:     struct _Tuple_impl<_Idx, _Head, _Tail...>
-40039:     : public _Tuple_impl<_Idx + 1, _Tail...>,
-40039:       private _Head_base<_Idx, _Head>
-40039:     {
-40039:       template<std::size_t, typename...> friend class _Tuple_impl;
-40039: 
-40039:       typedef _Tuple_impl<_Idx + 1, _Tail...> _Inherited;
-40039:       typedef _Head_base<_Idx, _Head> _Base;
-40039: 
-40039:       static constexpr _Head&
-40039:       _M_head(_Tuple_impl& __t) noexcept { return _Base::_M_head(__t); }
-40039: 
-40039:       static constexpr const _Head&
-40039:       _M_head(const _Tuple_impl& __t) noexcept { return _Base::_M_head(__t); }
-40039: 
-40039:       static constexpr _Inherited&
-40039:       _M_tail(_Tuple_impl& __t) noexcept { return __t; }
-40039: 
-40039:       static constexpr const _Inherited&
-40039:       _M_tail(const _Tuple_impl& __t) noexcept { return __t; }
-40039: 
-40039:       constexpr _Tuple_impl()
-40039:       : _Inherited(), _Base() { }
-40039: 
-40039:       explicit
-40039:       constexpr _Tuple_impl(const _Head& __head, const _Tail&... __tail)
-40039:       : _Inherited(__tail...), _Base(__head) { }
-40039: 
-40039:       template<typename _UHead, typename... _UTail, typename = typename
-40039:                enable_if<sizeof...(_Tail) == sizeof...(_UTail)>::type>
-40039:         explicit
-40039:         constexpr _Tuple_impl(_UHead&& __head, _UTail&&... __tail)
-40039:  : _Inherited(std::forward<_UTail>(__tail)...),
-40039:    _Base(std::forward<_UHead>(__head)) { }
-40039: 
-40039:       constexpr _Tuple_impl(const _Tuple_impl&) = default;
-40039: 
-40039:       constexpr
-40039:       _Tuple_impl(_Tuple_impl&& __in)
-40039:       noexcept(__and_<is_nothrow_move_constructible<_Head>,
-40039:                is_nothrow_move_constructible<_Inherited>>::value)
-40039:       : _Inherited(std::move(_M_tail(__in))),
-40039:  _Base(std::forward<_Head>(_M_head(__in))) { }
-40039: 
-40039:       template<typename... _UElements>
-40039:         constexpr _Tuple_impl(const _Tuple_impl<_Idx, _UElements...>& __in)
-40039:  : _Inherited(_Tuple_impl<_Idx, _UElements...>::_M_tail(__in)),
-40039:    _Base(_Tuple_impl<_Idx, _UElements...>::_M_head(__in)) { }
-40039: 
-40039:       template<typename _UHead, typename... _UTails>
-40039:         constexpr _Tuple_impl(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in)
-40039:  : _Inherited(std::move
-40039:        (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))),
-40039:    _Base(std::forward<_UHead>
-40039:   (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))) { }
-40039: 
-40039:       template<typename _Alloc>
-40039:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a)
-40039:  : _Inherited(__tag, __a),
-40039:           _Base(__tag, __use_alloc<_Head>(__a)) { }
-40039: 
-40039:       template<typename _Alloc>
-40039:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
-40039:       const _Head& __head, const _Tail&... __tail)
-40039:  : _Inherited(__tag, __a, __tail...),
-40039:           _Base(__use_alloc<_Head, _Alloc, _Head>(__a), __head) { }
-40039: 
-40039:       template<typename _Alloc, typename _UHead, typename... _UTail,
-40039:                typename = typename enable_if<sizeof...(_Tail)
-40039:           == sizeof...(_UTail)>::type>
-40039:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
-40039:              _UHead&& __head, _UTail&&... __tail)
-40039:  : _Inherited(__tag, __a, std::forward<_UTail>(__tail)...),
-40039:           _Base(__use_alloc<_Head, _Alloc, _UHead>(__a),
-40039:          std::forward<_UHead>(__head)) { }
-40039: 
-40039:       template<typename _Alloc>
-40039:         _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
-40039:              const _Tuple_impl& __in)
-40039:  : _Inherited(__tag, __a, _M_tail(__in)),
-40039:           _Base(__use_alloc<_Head, _Alloc, _Head>(__a), _M_head(__in)) { }
-40039: 
-40039:       template<typename _Alloc>
-40039:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
-40039:              _Tuple_impl&& __in)
-40039:  : _Inherited(__tag, __a, std::move(_M_tail(__in))),
-40039:    _Base(__use_alloc<_Head, _Alloc, _Head>(__a),
-40039:          std::forward<_Head>(_M_head(__in))) { }
-40039: 
-40039:       template<typename _Alloc, typename... _UElements>
-40039:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
-40039:              const _Tuple_impl<_Idx, _UElements...>& __in)
-40039:  : _Inherited(__tag, __a,
-40039:        _Tuple_impl<_Idx, _UElements...>::_M_tail(__in)),
-40039:    _Base(__use_alloc<_Head, _Alloc, _Head>(__a),
-40039:   _Tuple_impl<_Idx, _UElements...>::_M_head(__in)) { }
-40039: 
-40039:       template<typename _Alloc, typename _UHead, typename... _UTails>
-40039:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
-40039:              _Tuple_impl<_Idx, _UHead, _UTails...>&& __in)
-40039:  : _Inherited(__tag, __a, std::move
-40039:        (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))),
-40039:    _Base(__use_alloc<_Head, _Alloc, _UHead>(__a),
-40039:                 std::forward<_UHead>
-40039:   (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))) { }
-40039: 
-40039:       _Tuple_impl&
-40039:       operator=(const _Tuple_impl& __in)
-40039:       {
-40039:  _M_head(*this) = _M_head(__in);
-40039:  _M_tail(*this) = _M_tail(__in);
-40039:  return *this;
-40039:       }
-40039: 
-40039:       _Tuple_impl&
-40039:       operator=(_Tuple_impl&& __in)
-40039:       noexcept(__and_<is_nothrow_move_assignable<_Head>,
-40039:                is_nothrow_move_assignable<_Inherited>>::value)
-40039:       {
-40039:  _M_head(*this) = std::forward<_Head>(_M_head(__in));
-40039:  _M_tail(*this) = std::move(_M_tail(__in));
-40039:  return *this;
-40039:       }
-40039: 
-40039:       template<typename... _UElements>
-40039:         _Tuple_impl&
-40039:         operator=(const _Tuple_impl<_Idx, _UElements...>& __in)
-40039:         {
-40039:    _M_head(*this) = _Tuple_impl<_Idx, _UElements...>::_M_head(__in);
-40039:    _M_tail(*this) = _Tuple_impl<_Idx, _UElements...>::_M_tail(__in);
-40039:    return *this;
-40039:  }
-40039: 
-40039:       template<typename _UHead, typename... _UTails>
-40039:         _Tuple_impl&
-40039:         operator=(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in)
-40039:         {
-40039:    _M_head(*this) = std::forward<_UHead>
-40039:      (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in));
-40039:    _M_tail(*this) = std::move
-40039:      (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in));
-40039:    return *this;
-40039:  }
-40039: 
-40039:     protected:
-40039:       void
-40039:       _M_swap(_Tuple_impl& __in)
-40039:       noexcept(__is_nothrow_swappable<_Head>::value
-40039:                && noexcept(_M_tail(__in)._M_swap(_M_tail(__in))))
-40039:       {
-40039:  using std::swap;
-40039:  swap(_M_head(*this), _M_head(__in));
-40039:  _Inherited::_M_swap(_M_tail(__in));
-40039:       }
-40039:     };
-40039: 
-40039: 
-40039:   template<std::size_t _Idx, typename _Head>
-40039:     struct _Tuple_impl<_Idx, _Head>
-40039:     : private _Head_base<_Idx, _Head>
-40039:     {
-40039:       template<std::size_t, typename...> friend class _Tuple_impl;
-40039: 
-40039:       typedef _Head_base<_Idx, _Head> _Base;
-40039: 
-40039:       static constexpr _Head&
-40039:       _M_head(_Tuple_impl& __t) noexcept { return _Base::_M_head(__t); }
-40039: 
-40039:       static constexpr const _Head&
-40039:       _M_head(const _Tuple_impl& __t) noexcept { return _Base::_M_head(__t); }
-40039: 
-40039:       constexpr _Tuple_impl()
-40039:       : _Base() { }
-40039: 
-40039:       explicit
-40039:       constexpr _Tuple_impl(const _Head& __head)
-40039:       : _Base(__head) { }
-40039: 
-40039:       template<typename _UHead>
-40039:         explicit
-40039:         constexpr _Tuple_impl(_UHead&& __head)
-40039:  : _Base(std::forward<_UHead>(__head)) { }
-40039: 
-40039:       constexpr _Tuple_impl(const _Tuple_impl&) = default;
-40039: 
-40039:       constexpr
-40039:       _Tuple_impl(_Tuple_impl&& __in)
-40039:       noexcept(is_nothrow_move_constructible<_Head>::value)
-40039:       : _Base(std::forward<_Head>(_M_head(__in))) { }
-40039: 
-40039:       template<typename _UHead>
-40039:         constexpr _Tuple_impl(const _Tuple_impl<_Idx, _UHead>& __in)
-40039:  : _Base(_Tuple_impl<_Idx, _UHead>::_M_head(__in)) { }
-40039: 
-40039:       template<typename _UHead>
-40039:         constexpr _Tuple_impl(_Tuple_impl<_Idx, _UHead>&& __in)
-40039:  : _Base(std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in)))
-40039:  { }
-40039: 
-40039:       template<typename _Alloc>
-40039:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a)
-40039:  : _Base(__tag, __use_alloc<_Head>(__a)) { }
-40039: 
-40039:       template<typename _Alloc>
-40039:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
-40039:       const _Head& __head)
-40039:  : _Base(__use_alloc<_Head, _Alloc, _Head>(__a), __head) { }
-40039: 
-40039:       template<typename _Alloc, typename _UHead>
-40039:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
-40039:              _UHead&& __head)
-40039:  : _Base(__use_alloc<_Head, _Alloc, _UHead>(__a),
-40039:          std::forward<_UHead>(__head)) { }
-40039: 
-40039:       template<typename _Alloc>
-40039:         _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
-40039:              const _Tuple_impl& __in)
-40039:  : _Base(__use_alloc<_Head, _Alloc, _Head>(__a), _M_head(__in)) { }
-40039: 
-40039:       template<typename _Alloc>
-40039:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
-40039:              _Tuple_impl&& __in)
-40039:  : _Base(__use_alloc<_Head, _Alloc, _Head>(__a),
-40039:          std::forward<_Head>(_M_head(__in))) { }
-40039: 
-40039:       template<typename _Alloc, typename _UHead>
-40039:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
-40039:              const _Tuple_impl<_Idx, _UHead>& __in)
-40039:  : _Base(__use_alloc<_Head, _Alloc, _Head>(__a),
-40039:   _Tuple_impl<_Idx, _UHead>::_M_head(__in)) { }
-40039: 
-40039:       template<typename _Alloc, typename _UHead>
-40039:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
-40039:              _Tuple_impl<_Idx, _UHead>&& __in)
-40039:  : _Base(__use_alloc<_Head, _Alloc, _UHead>(__a),
-40039:                 std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in)))
-40039:  { }
-40039: 
-40039:       _Tuple_impl&
-40039:       operator=(const _Tuple_impl& __in)
-40039:       {
-40039:  _M_head(*this) = _M_head(__in);
-40039:  return *this;
-40039:       }
-40039: 
-40039:       _Tuple_impl&
-40039:       operator=(_Tuple_impl&& __in)
-40039:       noexcept(is_nothrow_move_assignable<_Head>::value)
-40039:       {
-40039:  _M_head(*this) = std::forward<_Head>(_M_head(__in));
-40039:  return *this;
-40039:       }
-40039: 
-40039:       template<typename _UHead>
-40039:         _Tuple_impl&
-40039:         operator=(const _Tuple_impl<_Idx, _UHead>& __in)
-40039:         {
-40039:    _M_head(*this) = _Tuple_impl<_Idx, _UHead>::_M_head(__in);
-40039:    return *this;
-40039:  }
-40039: 
-40039:       template<typename _UHead>
-40039:         _Tuple_impl&
-40039:         operator=(_Tuple_impl<_Idx, _UHead>&& __in)
-40039:         {
-40039:    _M_head(*this)
-40039:      = std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in));
-40039:    return *this;
-40039:  }
-40039: 
-40039:     protected:
-40039:       void
-40039:       _M_swap(_Tuple_impl& __in)
-40039:       noexcept(__is_nothrow_swappable<_Head>::value)
-40039:       {
-40039:  using std::swap;
-40039:  swap(_M_head(*this), _M_head(__in));
-40039:       }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<bool, typename... _Elements>
-40039:   struct _TC
-40039:   {
-40039:     template<typename... _UElements>
-40039:     static constexpr bool _ConstructibleTuple()
-40039:     {
-40039:       return __and_<is_constructible<_Elements, const _UElements&>...>::value;
-40039:     }
-40039: 
-40039:     template<typename... _UElements>
-40039:     static constexpr bool _ImplicitlyConvertibleTuple()
-40039:     {
-40039:       return __and_<is_convertible<const _UElements&, _Elements>...>::value;
-40039:     }
-40039: 
-40039:     template<typename... _UElements>
-40039:     static constexpr bool _MoveConstructibleTuple()
-40039:     {
-40039:       return __and_<is_constructible<_Elements, _UElements&&>...>::value;
-40039:     }
-40039: 
-40039:     template<typename... _UElements>
-40039:     static constexpr bool _ImplicitlyMoveConvertibleTuple()
-40039:     {
-40039:       return __and_<is_convertible<_UElements&&, _Elements>...>::value;
-40039:     }
-40039: 
-40039:     template<typename _SrcTuple>
-40039:     static constexpr bool _NonNestedTuple()
-40039:     {
-40039:       return __and_<__not_<is_same<tuple<_Elements...>,
-40039:                                    typename remove_cv<
-40039:                                      typename remove_reference<_SrcTuple>::type
-40039:                                    >::type>>,
-40039:                      __not_<is_convertible<_SrcTuple, _Elements...>>,
-40039:                      __not_<is_constructible<_Elements..., _SrcTuple>>
-40039:               >::value;
-40039:     }
-40039:     template<typename... _UElements>
-40039:     static constexpr bool _NotSameTuple()
-40039:     {
-40039:       return __not_<is_same<tuple<_Elements...>,
-40039:         typename remove_const<
-40039:           typename remove_reference<_UElements...>::type
-40039:           >::type>>::value;
-40039:     }
-40039:   };
-40039: 
-40039:   template<typename... _Elements>
-40039:   struct _TC<false, _Elements...>
-40039:   {
-40039:     template<typename... _UElements>
-40039:     static constexpr bool _ConstructibleTuple()
-40039:     {
-40039:       return false;
-40039:     }
-40039: 
-40039:     template<typename... _UElements>
-40039:     static constexpr bool _ImplicitlyConvertibleTuple()
-40039:     {
-40039:       return false;
-40039:     }
-40039: 
-40039:     template<typename... _UElements>
-40039:     static constexpr bool _MoveConstructibleTuple()
-40039:     {
-40039:       return false;
-40039:     }
-40039: 
-40039:     template<typename... _UElements>
-40039:     static constexpr bool _ImplicitlyMoveConvertibleTuple()
-40039:     {
-40039:       return false;
-40039:     }
-40039: 
-40039:     template<typename... _UElements>
-40039:     static constexpr bool _NonNestedTuple()
-40039:     {
-40039:       return true;
-40039:     }
-40039:     template<typename... _UElements>
-40039:     static constexpr bool _NotSameTuple()
-40039:     {
-40039:       return true;
-40039:     }
-40039:   };
-40039: 
-40039: 
-40039:   template<typename... _Elements>
-40039:     class tuple : public _Tuple_impl<0, _Elements...>
-40039:     {
-40039:       typedef _Tuple_impl<0, _Elements...> _Inherited;
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Dummy>
-40039:       struct _TC2
-40039:       {
-40039:         static constexpr bool _DefaultConstructibleTuple()
-40039:         {
-40039:           return __and_<is_default_constructible<_Elements>...>::value;
-40039:         }
-40039:         static constexpr bool _ImplicitlyDefaultConstructibleTuple()
-40039:         {
-40039:           return __and_<__is_implicitly_default_constructible<_Elements>...>
-40039:             ::value;
-40039:         }
-40039:       };
-40039: 
-40039:     public:
-40039:       template<typename _Dummy = void,
-40039:                typename enable_if<_TC2<_Dummy>::
-40039:                                     _ImplicitlyDefaultConstructibleTuple(),
-40039:                                   bool>::type = true>
-40039:       constexpr tuple()
-40039:       : _Inherited() { }
-40039: 
-40039:       template<typename _Dummy = void,
-40039:                typename enable_if<_TC2<_Dummy>::
-40039:                                     _DefaultConstructibleTuple()
-40039:                                   &&
-40039:                                   !_TC2<_Dummy>::
-40039:                                     _ImplicitlyDefaultConstructibleTuple(),
-40039:                                   bool>::type = false>
-40039:       explicit constexpr tuple()
-40039:       : _Inherited() { }
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Dummy> using _TCC =
-40039:         _TC<is_same<_Dummy, void>::value,
-40039:             _Elements...>;
-40039: 
-40039:       template<typename _Dummy = void,
-40039:                typename enable_if<
-40039:                  _TCC<_Dummy>::template
-40039:                    _ConstructibleTuple<_Elements...>()
-40039:                  && _TCC<_Dummy>::template
-40039:                    _ImplicitlyConvertibleTuple<_Elements...>()
-40039:                  && (sizeof...(_Elements) >= 1),
-40039:                bool>::type=true>
-40039:         constexpr tuple(const _Elements&... __elements)
-40039:       : _Inherited(__elements...) { }
-40039: 
-40039:       template<typename _Dummy = void,
-40039:                typename enable_if<
-40039:                  _TCC<_Dummy>::template
-40039:                    _ConstructibleTuple<_Elements...>()
-40039:                  && !_TCC<_Dummy>::template
-40039:                    _ImplicitlyConvertibleTuple<_Elements...>()
-40039:                  && (sizeof...(_Elements) >= 1),
-40039:                bool>::type=false>
-40039:       explicit constexpr tuple(const _Elements&... __elements)
-40039:       : _Inherited(__elements...) { }
-40039: 
-40039: 
-40039: 
-40039:       template<typename... _UElements> using _TMC =
-40039:                   _TC<(sizeof...(_Elements) == sizeof...(_UElements))
-40039:         && (_TC<(sizeof...(_UElements)==1), _Elements...>::
-40039:      template _NotSameTuple<_UElements...>()),
-40039:                       _Elements...>;
-40039: 
-40039: 
-40039: 
-40039:       template<typename... _UElements> using _TMCT =
-40039:                   _TC<(sizeof...(_Elements) == sizeof...(_UElements))
-40039:         && !is_same<tuple<_Elements...>,
-40039:       tuple<_UElements...>>::value,
-40039:                       _Elements...>;
-40039: 
-40039:       template<typename... _UElements, typename
-40039:         enable_if<
-40039:     _TMC<_UElements...>::template
-40039:                     _MoveConstructibleTuple<_UElements...>()
-40039:                   && _TMC<_UElements...>::template
-40039:                     _ImplicitlyMoveConvertibleTuple<_UElements...>()
-40039:                   && (sizeof...(_Elements) >= 1),
-40039:         bool>::type=true>
-40039:         constexpr tuple(_UElements&&... __elements)
-40039:         : _Inherited(std::forward<_UElements>(__elements)...) { }
-40039: 
-40039:       template<typename... _UElements, typename
-40039:         enable_if<
-40039:     _TMC<_UElements...>::template
-40039:                     _MoveConstructibleTuple<_UElements...>()
-40039:                   && !_TMC<_UElements...>::template
-40039:                     _ImplicitlyMoveConvertibleTuple<_UElements...>()
-40039:                   && (sizeof...(_Elements) >= 1),
-40039:         bool>::type=false>
-40039:         explicit constexpr tuple(_UElements&&... __elements)
-40039:  : _Inherited(std::forward<_UElements>(__elements)...) { }
-40039: 
-40039:       constexpr tuple(const tuple&) = default;
-40039: 
-40039:       constexpr tuple(tuple&&) = default;
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Dummy> using _TNTC =
-40039:         _TC<is_same<_Dummy, void>::value && sizeof...(_Elements) == 1,
-40039:             _Elements...>;
-40039: 
-40039:       template<typename... _UElements, typename _Dummy = void, typename
-40039:         enable_if<_TMCT<_UElements...>::template
-40039:                     _ConstructibleTuple<_UElements...>()
-40039:                   && _TMCT<_UElements...>::template
-40039:                     _ImplicitlyConvertibleTuple<_UElements...>()
-40039:                   && _TNTC<_Dummy>::template
-40039:                     _NonNestedTuple<const tuple<_UElements...>&>(),
-40039:         bool>::type=true>
-40039:         constexpr tuple(const tuple<_UElements...>& __in)
-40039:         : _Inherited(static_cast<const _Tuple_impl<0, _UElements...>&>(__in))
-40039:         { }
-40039: 
-40039:       template<typename... _UElements, typename _Dummy = void, typename
-40039:         enable_if<_TMCT<_UElements...>::template
-40039:                     _ConstructibleTuple<_UElements...>()
-40039:                   && !_TMCT<_UElements...>::template
-40039:                     _ImplicitlyConvertibleTuple<_UElements...>()
-40039:                   && _TNTC<_Dummy>::template
-40039:                     _NonNestedTuple<const tuple<_UElements...>&>(),
-40039:         bool>::type=false>
-40039:         explicit constexpr tuple(const tuple<_UElements...>& __in)
-40039:         : _Inherited(static_cast<const _Tuple_impl<0, _UElements...>&>(__in))
-40039:         { }
-40039: 
-40039:       template<typename... _UElements, typename _Dummy = void, typename
-40039:         enable_if<_TMCT<_UElements...>::template
-40039:                     _MoveConstructibleTuple<_UElements...>()
-40039:                   && _TMCT<_UElements...>::template
-40039:                     _ImplicitlyMoveConvertibleTuple<_UElements...>()
-40039:                   && _TNTC<_Dummy>::template
-40039:                     _NonNestedTuple<tuple<_UElements...>&&>(),
-40039:         bool>::type=true>
-40039:         constexpr tuple(tuple<_UElements...>&& __in)
-40039:         : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) { }
-40039: 
-40039:       template<typename... _UElements, typename _Dummy = void, typename
-40039:         enable_if<_TMCT<_UElements...>::template
-40039:                     _MoveConstructibleTuple<_UElements...>()
-40039:                   && !_TMCT<_UElements...>::template
-40039:                     _ImplicitlyMoveConvertibleTuple<_UElements...>()
-40039:                   && _TNTC<_Dummy>::template
-40039:                     _NonNestedTuple<tuple<_UElements...>&&>(),
-40039:         bool>::type=false>
-40039:         explicit constexpr tuple(tuple<_UElements...>&& __in)
-40039:         : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) { }
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Alloc>
-40039:  tuple(allocator_arg_t __tag, const _Alloc& __a)
-40039:  : _Inherited(__tag, __a) { }
-40039: 
-40039:       template<typename _Alloc, typename _Dummy = void,
-40039:                typename enable_if<
-40039:                  _TCC<_Dummy>::template
-40039:                    _ConstructibleTuple<_Elements...>()
-40039:                  && _TCC<_Dummy>::template
-40039:                    _ImplicitlyConvertibleTuple<_Elements...>(),
-40039:                bool>::type=true>
-40039:  tuple(allocator_arg_t __tag, const _Alloc& __a,
-40039:        const _Elements&... __elements)
-40039:  : _Inherited(__tag, __a, __elements...) { }
-40039: 
-40039:       template<typename _Alloc, typename _Dummy = void,
-40039:                typename enable_if<
-40039:                  _TCC<_Dummy>::template
-40039:                    _ConstructibleTuple<_Elements...>()
-40039:                  && !_TCC<_Dummy>::template
-40039:                    _ImplicitlyConvertibleTuple<_Elements...>(),
-40039:                bool>::type=false>
-40039:  explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
-40039:                        const _Elements&... __elements)
-40039:  : _Inherited(__tag, __a, __elements...) { }
-40039: 
-40039:       template<typename _Alloc, typename... _UElements, typename
-40039:         enable_if<_TMC<_UElements...>::template
-40039:                     _MoveConstructibleTuple<_UElements...>()
-40039:                   && _TMC<_UElements...>::template
-40039:                     _ImplicitlyMoveConvertibleTuple<_UElements...>(),
-40039:         bool>::type=true>
-40039:  tuple(allocator_arg_t __tag, const _Alloc& __a,
-40039:        _UElements&&... __elements)
-40039:  : _Inherited(__tag, __a, std::forward<_UElements>(__elements)...)
-40039:         { }
-40039: 
-40039:       template<typename _Alloc, typename... _UElements, typename
-40039:         enable_if<_TMC<_UElements...>::template
-40039:                     _MoveConstructibleTuple<_UElements...>()
-40039:                   && !_TMC<_UElements...>::template
-40039:                     _ImplicitlyMoveConvertibleTuple<_UElements...>(),
-40039:         bool>::type=false>
-40039:  explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
-40039:        _UElements&&... __elements)
-40039:  : _Inherited(__tag, __a, std::forward<_UElements>(__elements)...)
-40039:         { }
-40039: 
-40039:       template<typename _Alloc>
-40039:  tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __in)
-40039:  : _Inherited(__tag, __a, static_cast<const _Inherited&>(__in)) { }
-40039: 
-40039:       template<typename _Alloc>
-40039:  tuple(allocator_arg_t __tag, const _Alloc& __a, tuple&& __in)
-40039:  : _Inherited(__tag, __a, static_cast<_Inherited&&>(__in)) { }
-40039: 
-40039:       template<typename _Alloc, typename _Dummy = void,
-40039:         typename... _UElements, typename
-40039:         enable_if<_TMCT<_UElements...>::template
-40039:                     _ConstructibleTuple<_UElements...>()
-40039:                   && _TMCT<_UElements...>::template
-40039:                     _ImplicitlyConvertibleTuple<_UElements...>()
-40039:                   && _TNTC<_Dummy>::template
-40039:                     _NonNestedTuple<tuple<_UElements...>&&>(),
-40039:         bool>::type=true>
-40039:  tuple(allocator_arg_t __tag, const _Alloc& __a,
-40039:        const tuple<_UElements...>& __in)
-40039:  : _Inherited(__tag, __a,
-40039:               static_cast<const _Tuple_impl<0, _UElements...>&>(__in))
-40039:  { }
-40039: 
-40039:       template<typename _Alloc, typename _Dummy = void,
-40039:         typename... _UElements, typename
-40039:         enable_if<_TMCT<_UElements...>::template
-40039:                     _ConstructibleTuple<_UElements...>()
-40039:                   && !_TMCT<_UElements...>::template
-40039:                     _ImplicitlyConvertibleTuple<_UElements...>()
-40039:                   && _TNTC<_Dummy>::template
-40039:                     _NonNestedTuple<tuple<_UElements...>&&>(),
-40039:         bool>::type=false>
-40039:  explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
-40039:        const tuple<_UElements...>& __in)
-40039:  : _Inherited(__tag, __a,
-40039:               static_cast<const _Tuple_impl<0, _UElements...>&>(__in))
-40039:  { }
-40039: 
-40039:       template<typename _Alloc, typename _Dummy = void,
-40039:         typename... _UElements, typename
-40039:         enable_if<_TMCT<_UElements...>::template
-40039:                     _MoveConstructibleTuple<_UElements...>()
-40039:                   && _TMCT<_UElements...>::template
-40039:                     _ImplicitlyMoveConvertibleTuple<_UElements...>()
-40039:                   && _TNTC<_Dummy>::template
-40039:                     _NonNestedTuple<tuple<_UElements...>&&>(),
-40039:         bool>::type=true>
-40039:  tuple(allocator_arg_t __tag, const _Alloc& __a,
-40039:        tuple<_UElements...>&& __in)
-40039:  : _Inherited(__tag, __a,
-40039:               static_cast<_Tuple_impl<0, _UElements...>&&>(__in))
-40039:  { }
-40039: 
-40039:       template<typename _Alloc, typename _Dummy = void,
-40039:         typename... _UElements, typename
-40039:         enable_if<_TMCT<_UElements...>::template
-40039:                     _MoveConstructibleTuple<_UElements...>()
-40039:                   && !_TMCT<_UElements...>::template
-40039:                     _ImplicitlyMoveConvertibleTuple<_UElements...>()
-40039:                   && _TNTC<_Dummy>::template
-40039:                     _NonNestedTuple<tuple<_UElements...>&&>(),
-40039:         bool>::type=false>
-40039:  explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
-40039:        tuple<_UElements...>&& __in)
-40039:  : _Inherited(__tag, __a,
-40039:               static_cast<_Tuple_impl<0, _UElements...>&&>(__in))
-40039:  { }
-40039: 
-40039:       tuple&
-40039:       operator=(const tuple& __in)
-40039:       {
-40039:  static_cast<_Inherited&>(*this) = __in;
-40039:  return *this;
-40039:       }
-40039: 
-40039:       tuple&
-40039:       operator=(tuple&& __in)
-40039:       noexcept(is_nothrow_move_assignable<_Inherited>::value)
-40039:       {
-40039:  static_cast<_Inherited&>(*this) = std::move(__in);
-40039:  return *this;
-40039:       }
-40039: 
-40039:       template<typename... _UElements>
-40039:  typename
-40039:         enable_if<sizeof...(_UElements)
-40039:     == sizeof...(_Elements), tuple&>::type
-40039:         operator=(const tuple<_UElements...>& __in)
-40039:         {
-40039:    static_cast<_Inherited&>(*this) = __in;
-40039:    return *this;
-40039:  }
-40039: 
-40039:       template<typename... _UElements>
-40039:  typename
-40039:         enable_if<sizeof...(_UElements)
-40039:     == sizeof...(_Elements), tuple&>::type
-40039:         operator=(tuple<_UElements...>&& __in)
-40039:         {
-40039:    static_cast<_Inherited&>(*this) = std::move(__in);
-40039:    return *this;
-40039:  }
-40039: 
-40039:       void
-40039:       swap(tuple& __in)
-40039:       noexcept(noexcept(__in._M_swap(__in)))
-40039:       { _Inherited::_M_swap(__in); }
-40039:     };
-40039: # 889 "/usr/include/c++/8/tuple" 3
-40039:   template<>
-40039:     class tuple<>
-40039:     {
-40039:     public:
-40039:       void swap(tuple&) noexcept { }
-40039: 
-40039: 
-40039:       tuple() = default;
-40039: 
-40039:       template<typename _Alloc>
-40039:  tuple(allocator_arg_t, const _Alloc&) { }
-40039:       template<typename _Alloc>
-40039:  tuple(allocator_arg_t, const _Alloc&, const tuple&) { }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _T1, typename _T2>
-40039:     class tuple<_T1, _T2> : public _Tuple_impl<0, _T1, _T2>
-40039:     {
-40039:       typedef _Tuple_impl<0, _T1, _T2> _Inherited;
-40039: 
-40039:     public:
-40039:       template <typename _U1 = _T1,
-40039:                 typename _U2 = _T2,
-40039:                 typename enable_if<__and_<
-40039:                                      __is_implicitly_default_constructible<_U1>,
-40039:                                      __is_implicitly_default_constructible<_U2>>
-40039:                                    ::value, bool>::type = true>
-40039: 
-40039:       constexpr tuple()
-40039:       : _Inherited() { }
-40039: 
-40039:       template <typename _U1 = _T1,
-40039:                 typename _U2 = _T2,
-40039:                 typename enable_if<
-40039:                   __and_<
-40039:                     is_default_constructible<_U1>,
-40039:                     is_default_constructible<_U2>,
-40039:                     __not_<
-40039:                       __and_<__is_implicitly_default_constructible<_U1>,
-40039:                              __is_implicitly_default_constructible<_U2>>>>
-40039:                   ::value, bool>::type = false>
-40039: 
-40039:       explicit constexpr tuple()
-40039:       : _Inherited() { }
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Dummy> using _TCC =
-40039:         _TC<is_same<_Dummy, void>::value, _T1, _T2>;
-40039: 
-40039:       template<typename _Dummy = void, typename
-40039:                enable_if<_TCC<_Dummy>::template
-40039:                            _ConstructibleTuple<_T1, _T2>()
-40039:                          && _TCC<_Dummy>::template
-40039:                            _ImplicitlyConvertibleTuple<_T1, _T2>(),
-40039:  bool>::type = true>
-40039:         constexpr tuple(const _T1& __a1, const _T2& __a2)
-40039:         : _Inherited(__a1, __a2) { }
-40039: 
-40039:       template<typename _Dummy = void, typename
-40039:                enable_if<_TCC<_Dummy>::template
-40039:                            _ConstructibleTuple<_T1, _T2>()
-40039:                          && !_TCC<_Dummy>::template
-40039:                            _ImplicitlyConvertibleTuple<_T1, _T2>(),
-40039:  bool>::type = false>
-40039:         explicit constexpr tuple(const _T1& __a1, const _T2& __a2)
-40039:         : _Inherited(__a1, __a2) { }
-40039: 
-40039: 
-40039: 
-40039:       using _TMC = _TC<true, _T1, _T2>;
-40039: 
-40039:       template<typename _U1, typename _U2, typename
-40039:         enable_if<_TMC::template
-40039:                     _MoveConstructibleTuple<_U1, _U2>()
-40039:                   && _TMC::template
-40039:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>()
-40039:            && !is_same<typename decay<_U1>::type,
-40039:          allocator_arg_t>::value,
-40039:  bool>::type = true>
-40039:         constexpr tuple(_U1&& __a1, _U2&& __a2)
-40039:  : _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { }
-40039: 
-40039:       template<typename _U1, typename _U2, typename
-40039:         enable_if<_TMC::template
-40039:                     _MoveConstructibleTuple<_U1, _U2>()
-40039:                   && !_TMC::template
-40039:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>()
-40039:            && !is_same<typename decay<_U1>::type,
-40039:          allocator_arg_t>::value,
-40039:  bool>::type = false>
-40039:         explicit constexpr tuple(_U1&& __a1, _U2&& __a2)
-40039:  : _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { }
-40039: 
-40039:       constexpr tuple(const tuple&) = default;
-40039: 
-40039:       constexpr tuple(tuple&&) = default;
-40039: 
-40039:       template<typename _U1, typename _U2, typename
-40039:         enable_if<_TMC::template
-40039:                     _ConstructibleTuple<_U1, _U2>()
-40039:                   && _TMC::template
-40039:                     _ImplicitlyConvertibleTuple<_U1, _U2>(),
-40039:  bool>::type = true>
-40039:         constexpr tuple(const tuple<_U1, _U2>& __in)
-40039:  : _Inherited(static_cast<const _Tuple_impl<0, _U1, _U2>&>(__in)) { }
-40039: 
-40039:       template<typename _U1, typename _U2, typename
-40039:         enable_if<_TMC::template
-40039:                     _ConstructibleTuple<_U1, _U2>()
-40039:                   && !_TMC::template
-40039:                     _ImplicitlyConvertibleTuple<_U1, _U2>(),
-40039:  bool>::type = false>
-40039:         explicit constexpr tuple(const tuple<_U1, _U2>& __in)
-40039:  : _Inherited(static_cast<const _Tuple_impl<0, _U1, _U2>&>(__in)) { }
-40039: 
-40039:       template<typename _U1, typename _U2, typename
-40039:         enable_if<_TMC::template
-40039:                     _MoveConstructibleTuple<_U1, _U2>()
-40039:                   && _TMC::template
-40039:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>(),
-40039:  bool>::type = true>
-40039:         constexpr tuple(tuple<_U1, _U2>&& __in)
-40039:  : _Inherited(static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) { }
-40039: 
-40039:       template<typename _U1, typename _U2, typename
-40039:         enable_if<_TMC::template
-40039:                     _MoveConstructibleTuple<_U1, _U2>()
-40039:                   && !_TMC::template
-40039:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>(),
-40039:  bool>::type = false>
-40039:         explicit constexpr tuple(tuple<_U1, _U2>&& __in)
-40039:  : _Inherited(static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) { }
-40039: 
-40039:       template<typename _U1, typename _U2, typename
-40039:         enable_if<_TMC::template
-40039:                     _ConstructibleTuple<_U1, _U2>()
-40039:                   && _TMC::template
-40039:                     _ImplicitlyConvertibleTuple<_U1, _U2>(),
-40039:  bool>::type = true>
-40039:         constexpr tuple(const pair<_U1, _U2>& __in)
-40039:  : _Inherited(__in.first, __in.second) { }
-40039: 
-40039:       template<typename _U1, typename _U2, typename
-40039:         enable_if<_TMC::template
-40039:                     _ConstructibleTuple<_U1, _U2>()
-40039:                   && !_TMC::template
-40039:                     _ImplicitlyConvertibleTuple<_U1, _U2>(),
-40039:  bool>::type = false>
-40039:         explicit constexpr tuple(const pair<_U1, _U2>& __in)
-40039:  : _Inherited(__in.first, __in.second) { }
-40039: 
-40039:       template<typename _U1, typename _U2, typename
-40039:         enable_if<_TMC::template
-40039:                     _MoveConstructibleTuple<_U1, _U2>()
-40039:                   && _TMC::template
-40039:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>(),
-40039:  bool>::type = true>
-40039:         constexpr tuple(pair<_U1, _U2>&& __in)
-40039:  : _Inherited(std::forward<_U1>(__in.first),
-40039:        std::forward<_U2>(__in.second)) { }
-40039: 
-40039:       template<typename _U1, typename _U2, typename
-40039:         enable_if<_TMC::template
-40039:                     _MoveConstructibleTuple<_U1, _U2>()
-40039:                   && !_TMC::template
-40039:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>(),
-40039:  bool>::type = false>
-40039:         explicit constexpr tuple(pair<_U1, _U2>&& __in)
-40039:  : _Inherited(std::forward<_U1>(__in.first),
-40039:        std::forward<_U2>(__in.second)) { }
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Alloc>
-40039:  tuple(allocator_arg_t __tag, const _Alloc& __a)
-40039:  : _Inherited(__tag, __a) { }
-40039: 
-40039:       template<typename _Alloc, typename _Dummy = void,
-40039:                typename enable_if<
-40039:                  _TCC<_Dummy>::template
-40039:                    _ConstructibleTuple<_T1, _T2>()
-40039:                  && _TCC<_Dummy>::template
-40039:                    _ImplicitlyConvertibleTuple<_T1, _T2>(),
-40039:                bool>::type=true>
-40039: 
-40039:  tuple(allocator_arg_t __tag, const _Alloc& __a,
-40039:        const _T1& __a1, const _T2& __a2)
-40039:  : _Inherited(__tag, __a, __a1, __a2) { }
-40039: 
-40039:       template<typename _Alloc, typename _Dummy = void,
-40039:                typename enable_if<
-40039:                  _TCC<_Dummy>::template
-40039:                    _ConstructibleTuple<_T1, _T2>()
-40039:                  && !_TCC<_Dummy>::template
-40039:                    _ImplicitlyConvertibleTuple<_T1, _T2>(),
-40039:                bool>::type=false>
-40039: 
-40039:  explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
-40039:        const _T1& __a1, const _T2& __a2)
-40039:  : _Inherited(__tag, __a, __a1, __a2) { }
-40039: 
-40039:       template<typename _Alloc, typename _U1, typename _U2, typename
-40039:         enable_if<_TMC::template
-40039:                     _MoveConstructibleTuple<_U1, _U2>()
-40039:                   && _TMC::template
-40039:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>(),
-40039:  bool>::type = true>
-40039:  tuple(allocator_arg_t __tag, const _Alloc& __a, _U1&& __a1, _U2&& __a2)
-40039:  : _Inherited(__tag, __a, std::forward<_U1>(__a1),
-40039:               std::forward<_U2>(__a2)) { }
-40039: 
-40039:       template<typename _Alloc, typename _U1, typename _U2, typename
-40039:         enable_if<_TMC::template
-40039:                     _MoveConstructibleTuple<_U1, _U2>()
-40039:                   && !_TMC::template
-40039:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>(),
-40039:  bool>::type = false>
-40039:  explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
-40039:                        _U1&& __a1, _U2&& __a2)
-40039:  : _Inherited(__tag, __a, std::forward<_U1>(__a1),
-40039:               std::forward<_U2>(__a2)) { }
-40039: 
-40039:       template<typename _Alloc>
-40039:  tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __in)
-40039:  : _Inherited(__tag, __a, static_cast<const _Inherited&>(__in)) { }
-40039: 
-40039:       template<typename _Alloc>
-40039:  tuple(allocator_arg_t __tag, const _Alloc& __a, tuple&& __in)
-40039:  : _Inherited(__tag, __a, static_cast<_Inherited&&>(__in)) { }
-40039: 
-40039:       template<typename _Alloc, typename _U1, typename _U2, typename
-40039:         enable_if<_TMC::template
-40039:                     _ConstructibleTuple<_U1, _U2>()
-40039:                   && _TMC::template
-40039:                     _ImplicitlyConvertibleTuple<_U1, _U2>(),
-40039:  bool>::type = true>
-40039:  tuple(allocator_arg_t __tag, const _Alloc& __a,
-40039:        const tuple<_U1, _U2>& __in)
-40039:  : _Inherited(__tag, __a,
-40039:               static_cast<const _Tuple_impl<0, _U1, _U2>&>(__in))
-40039:  { }
-40039: 
-40039:       template<typename _Alloc, typename _U1, typename _U2, typename
-40039:         enable_if<_TMC::template
-40039:                     _ConstructibleTuple<_U1, _U2>()
-40039:                   && !_TMC::template
-40039:                     _ImplicitlyConvertibleTuple<_U1, _U2>(),
-40039:  bool>::type = false>
-40039:  explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
-40039:        const tuple<_U1, _U2>& __in)
-40039:  : _Inherited(__tag, __a,
-40039:               static_cast<const _Tuple_impl<0, _U1, _U2>&>(__in))
-40039:  { }
-40039: 
-40039:       template<typename _Alloc, typename _U1, typename _U2, typename
-40039:         enable_if<_TMC::template
-40039:                     _MoveConstructibleTuple<_U1, _U2>()
-40039:                   && _TMC::template
-40039:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>(),
-40039:  bool>::type = true>
-40039:  tuple(allocator_arg_t __tag, const _Alloc& __a, tuple<_U1, _U2>&& __in)
-40039:  : _Inherited(__tag, __a, static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in))
-40039:  { }
-40039: 
-40039:       template<typename _Alloc, typename _U1, typename _U2, typename
-40039:         enable_if<_TMC::template
-40039:                     _MoveConstructibleTuple<_U1, _U2>()
-40039:                   && !_TMC::template
-40039:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>(),
-40039:  bool>::type = false>
-40039:  explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
-40039:                        tuple<_U1, _U2>&& __in)
-40039:  : _Inherited(__tag, __a, static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in))
-40039:  { }
-40039: 
-40039:       template<typename _Alloc, typename _U1, typename _U2, typename
-40039:         enable_if<_TMC::template
-40039:                     _ConstructibleTuple<_U1, _U2>()
-40039:                   && _TMC::template
-40039:                     _ImplicitlyConvertibleTuple<_U1, _U2>(),
-40039:  bool>::type = true>
-40039:         tuple(allocator_arg_t __tag, const _Alloc& __a,
-40039:        const pair<_U1, _U2>& __in)
-40039:  : _Inherited(__tag, __a, __in.first, __in.second) { }
-40039: 
-40039:       template<typename _Alloc, typename _U1, typename _U2, typename
-40039:         enable_if<_TMC::template
-40039:                     _ConstructibleTuple<_U1, _U2>()
-40039:                   && !_TMC::template
-40039:                     _ImplicitlyConvertibleTuple<_U1, _U2>(),
-40039:  bool>::type = false>
-40039:         explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
-40039:        const pair<_U1, _U2>& __in)
-40039:  : _Inherited(__tag, __a, __in.first, __in.second) { }
-40039: 
-40039:       template<typename _Alloc, typename _U1, typename _U2, typename
-40039:         enable_if<_TMC::template
-40039:                     _MoveConstructibleTuple<_U1, _U2>()
-40039:                   && _TMC::template
-40039:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>(),
-40039:  bool>::type = true>
-40039:         tuple(allocator_arg_t __tag, const _Alloc& __a, pair<_U1, _U2>&& __in)
-40039:  : _Inherited(__tag, __a, std::forward<_U1>(__in.first),
-40039:        std::forward<_U2>(__in.second)) { }
-40039: 
-40039:       template<typename _Alloc, typename _U1, typename _U2, typename
-40039:         enable_if<_TMC::template
-40039:                     _MoveConstructibleTuple<_U1, _U2>()
-40039:                   && !_TMC::template
-40039:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>(),
-40039:  bool>::type = false>
-40039:         explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
-40039:                        pair<_U1, _U2>&& __in)
-40039:  : _Inherited(__tag, __a, std::forward<_U1>(__in.first),
-40039:        std::forward<_U2>(__in.second)) { }
-40039: 
-40039:       tuple&
-40039:       operator=(const tuple& __in)
-40039:       {
-40039:  static_cast<_Inherited&>(*this) = __in;
-40039:  return *this;
-40039:       }
-40039: 
-40039:       tuple&
-40039:       operator=(tuple&& __in)
-40039:       noexcept(is_nothrow_move_assignable<_Inherited>::value)
-40039:       {
-40039:  static_cast<_Inherited&>(*this) = std::move(__in);
-40039:  return *this;
-40039:       }
-40039: 
-40039:       template<typename _U1, typename _U2>
-40039:         tuple&
-40039:         operator=(const tuple<_U1, _U2>& __in)
-40039:         {
-40039:    static_cast<_Inherited&>(*this) = __in;
-40039:    return *this;
-40039:  }
-40039: 
-40039:       template<typename _U1, typename _U2>
-40039:         tuple&
-40039:         operator=(tuple<_U1, _U2>&& __in)
-40039:         {
-40039:    static_cast<_Inherited&>(*this) = std::move(__in);
-40039:    return *this;
-40039:  }
-40039: 
-40039:       template<typename _U1, typename _U2>
-40039:         tuple&
-40039:         operator=(const pair<_U1, _U2>& __in)
-40039:         {
-40039:    this->_M_head(*this) = __in.first;
-40039:    this->_M_tail(*this)._M_head(*this) = __in.second;
-40039:    return *this;
-40039:  }
-40039: 
-40039:       template<typename _U1, typename _U2>
-40039:         tuple&
-40039:         operator=(pair<_U1, _U2>&& __in)
-40039:         {
-40039:    this->_M_head(*this) = std::forward<_U1>(__in.first);
-40039:    this->_M_tail(*this)._M_head(*this) = std::forward<_U2>(__in.second);
-40039:    return *this;
-40039:  }
-40039: 
-40039:       void
-40039:       swap(tuple& __in)
-40039:       noexcept(noexcept(__in._M_swap(__in)))
-40039:       { _Inherited::_M_swap(__in); }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<typename... _Elements>
-40039:     struct tuple_size<tuple<_Elements...>>
-40039:     : public integral_constant<std::size_t, sizeof...(_Elements)> { };
-40039: # 1278 "/usr/include/c++/8/tuple" 3
-40039:   template<std::size_t __i, typename _Head, typename... _Tail>
-40039:     struct tuple_element<__i, tuple<_Head, _Tail...> >
-40039:     : tuple_element<__i - 1, tuple<_Tail...> > { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Head, typename... _Tail>
-40039:     struct tuple_element<0, tuple<_Head, _Tail...> >
-40039:     {
-40039:       typedef _Head type;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<size_t __i>
-40039:     struct tuple_element<__i, tuple<>>
-40039:     {
-40039:       static_assert(__i < tuple_size<tuple<>>::value,
-40039:    "tuple index is in range");
-40039:     };
-40039: 
-40039:   template<std::size_t __i, typename _Head, typename... _Tail>
-40039:     constexpr _Head&
-40039:     __get_helper(_Tuple_impl<__i, _Head, _Tail...>& __t) noexcept
-40039:     { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); }
-40039: 
-40039:   template<std::size_t __i, typename _Head, typename... _Tail>
-40039:     constexpr const _Head&
-40039:     __get_helper(const _Tuple_impl<__i, _Head, _Tail...>& __t) noexcept
-40039:     { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); }
-40039: 
-40039: 
-40039:   template<std::size_t __i, typename... _Elements>
-40039:     constexpr __tuple_element_t<__i, tuple<_Elements...>>&
-40039:     get(tuple<_Elements...>& __t) noexcept
-40039:     { return std::__get_helper<__i>(__t); }
-40039: 
-40039: 
-40039:   template<std::size_t __i, typename... _Elements>
-40039:     constexpr const __tuple_element_t<__i, tuple<_Elements...>>&
-40039:     get(const tuple<_Elements...>& __t) noexcept
-40039:     { return std::__get_helper<__i>(__t); }
-40039: 
-40039: 
-40039:   template<std::size_t __i, typename... _Elements>
-40039:     constexpr __tuple_element_t<__i, tuple<_Elements...>>&&
-40039:     get(tuple<_Elements...>&& __t) noexcept
-40039:     {
-40039:       typedef __tuple_element_t<__i, tuple<_Elements...>> __element_type;
-40039:       return std::forward<__element_type&&>(std::get<__i>(__t));
-40039:     }
-40039: 
-40039: 
-40039:   template<std::size_t __i, typename... _Elements>
-40039:     constexpr const __tuple_element_t<__i, tuple<_Elements...>>&&
-40039:     get(const tuple<_Elements...>&& __t) noexcept
-40039:     {
-40039:       typedef __tuple_element_t<__i, tuple<_Elements...>> __element_type;
-40039:       return std::forward<const __element_type&&>(std::get<__i>(__t));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Head, size_t __i, typename... _Tail>
-40039:     constexpr _Head&
-40039:     __get_helper2(_Tuple_impl<__i, _Head, _Tail...>& __t) noexcept
-40039:     { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); }
-40039: 
-40039:   template<typename _Head, size_t __i, typename... _Tail>
-40039:     constexpr const _Head&
-40039:     __get_helper2(const _Tuple_impl<__i, _Head, _Tail...>& __t) noexcept
-40039:     { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); }
-40039: 
-40039: 
-40039:   template <typename _Tp, typename... _Types>
-40039:     constexpr _Tp&
-40039:     get(tuple<_Types...>& __t) noexcept
-40039:     { return std::__get_helper2<_Tp>(__t); }
-40039: 
-40039: 
-40039:   template <typename _Tp, typename... _Types>
-40039:     constexpr _Tp&&
-40039:     get(tuple<_Types...>&& __t) noexcept
-40039:     { return std::forward<_Tp&&>(std::__get_helper2<_Tp>(__t)); }
-40039: 
-40039: 
-40039:   template <typename _Tp, typename... _Types>
-40039:     constexpr const _Tp&
-40039:     get(const tuple<_Types...>& __t) noexcept
-40039:     { return std::__get_helper2<_Tp>(__t); }
-40039: 
-40039: 
-40039: 
-40039:   template <typename _Tp, typename... _Types>
-40039:     constexpr const _Tp&&
-40039:     get(const tuple<_Types...>&& __t) noexcept
-40039:     { return std::forward<const _Tp&&>(std::__get_helper2<_Tp>(__t)); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up, size_t __i, size_t __size>
-40039:     struct __tuple_compare
-40039:     {
-40039:       static constexpr bool
-40039:       __eq(const _Tp& __t, const _Up& __u)
-40039:       {
-40039:  return bool(std::get<__i>(__t) == std::get<__i>(__u))
-40039:    && __tuple_compare<_Tp, _Up, __i + 1, __size>::__eq(__t, __u);
-40039:       }
-40039: 
-40039:       static constexpr bool
-40039:       __less(const _Tp& __t, const _Up& __u)
-40039:       {
-40039:  return bool(std::get<__i>(__t) < std::get<__i>(__u))
-40039:    || (!bool(std::get<__i>(__u) < std::get<__i>(__t))
-40039:        && __tuple_compare<_Tp, _Up, __i + 1, __size>::__less(__t, __u));
-40039:       }
-40039:     };
-40039: 
-40039:   template<typename _Tp, typename _Up, size_t __size>
-40039:     struct __tuple_compare<_Tp, _Up, __size, __size>
-40039:     {
-40039:       static constexpr bool
-40039:       __eq(const _Tp&, const _Up&) { return true; }
-40039: 
-40039:       static constexpr bool
-40039:       __less(const _Tp&, const _Up&) { return false; }
-40039:     };
-40039: 
-40039:   template<typename... _TElements, typename... _UElements>
-40039:     constexpr bool
-40039:     operator==(const tuple<_TElements...>& __t,
-40039:         const tuple<_UElements...>& __u)
-40039:     {
-40039:       static_assert(sizeof...(_TElements) == sizeof...(_UElements),
-40039:    "tuple objects can only be compared if they have equal sizes.");
-40039:       using __compare = __tuple_compare<tuple<_TElements...>,
-40039:      tuple<_UElements...>,
-40039:      0, sizeof...(_TElements)>;
-40039:       return __compare::__eq(__t, __u);
-40039:     }
-40039: 
-40039:   template<typename... _TElements, typename... _UElements>
-40039:     constexpr bool
-40039:     operator<(const tuple<_TElements...>& __t,
-40039:        const tuple<_UElements...>& __u)
-40039:     {
-40039:       static_assert(sizeof...(_TElements) == sizeof...(_UElements),
-40039:    "tuple objects can only be compared if they have equal sizes.");
-40039:       using __compare = __tuple_compare<tuple<_TElements...>,
-40039:      tuple<_UElements...>,
-40039:      0, sizeof...(_TElements)>;
-40039:       return __compare::__less(__t, __u);
-40039:     }
-40039: 
-40039:   template<typename... _TElements, typename... _UElements>
-40039:     constexpr bool
-40039:     operator!=(const tuple<_TElements...>& __t,
-40039:         const tuple<_UElements...>& __u)
-40039:     { return !(__t == __u); }
-40039: 
-40039:   template<typename... _TElements, typename... _UElements>
-40039:     constexpr bool
-40039:     operator>(const tuple<_TElements...>& __t,
-40039:        const tuple<_UElements...>& __u)
-40039:     { return __u < __t; }
-40039: 
-40039:   template<typename... _TElements, typename... _UElements>
-40039:     constexpr bool
-40039:     operator<=(const tuple<_TElements...>& __t,
-40039:         const tuple<_UElements...>& __u)
-40039:     { return !(__u < __t); }
-40039: 
-40039:   template<typename... _TElements, typename... _UElements>
-40039:     constexpr bool
-40039:     operator>=(const tuple<_TElements...>& __t,
-40039:         const tuple<_UElements...>& __u)
-40039:     { return !(__t < __u); }
-40039: 
-40039: 
-40039:   template<typename... _Elements>
-40039:     constexpr tuple<typename __decay_and_strip<_Elements>::__type...>
-40039:     make_tuple(_Elements&&... __args)
-40039:     {
-40039:       typedef tuple<typename __decay_and_strip<_Elements>::__type...>
-40039:  __result_type;
-40039:       return __result_type(std::forward<_Elements>(__args)...);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename... _Elements>
-40039:     constexpr tuple<_Elements&&...>
-40039:     forward_as_tuple(_Elements&&... __args) noexcept
-40039:     { return tuple<_Elements&&...>(std::forward<_Elements>(__args)...); }
-40039: 
-40039:   template<size_t, typename, typename, size_t>
-40039:     struct __make_tuple_impl;
-40039: 
-40039:   template<size_t _Idx, typename _Tuple, typename... _Tp, size_t _Nm>
-40039:     struct __make_tuple_impl<_Idx, tuple<_Tp...>, _Tuple, _Nm>
-40039:     : __make_tuple_impl<_Idx + 1,
-40039:    tuple<_Tp..., __tuple_element_t<_Idx, _Tuple>>,
-40039:    _Tuple, _Nm>
-40039:     { };
-40039: 
-40039:   template<std::size_t _Nm, typename _Tuple, typename... _Tp>
-40039:     struct __make_tuple_impl<_Nm, tuple<_Tp...>, _Tuple, _Nm>
-40039:     {
-40039:       typedef tuple<_Tp...> __type;
-40039:     };
-40039: 
-40039:   template<typename _Tuple>
-40039:     struct __do_make_tuple
-40039:     : __make_tuple_impl<0, tuple<>, _Tuple, std::tuple_size<_Tuple>::value>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tuple>
-40039:     struct __make_tuple
-40039:     : public __do_make_tuple<typename std::remove_cv
-40039:             <typename std::remove_reference<_Tuple>::type>::type>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename...>
-40039:     struct __combine_tuples;
-40039: 
-40039:   template<>
-40039:     struct __combine_tuples<>
-40039:     {
-40039:       typedef tuple<> __type;
-40039:     };
-40039: 
-40039:   template<typename... _Ts>
-40039:     struct __combine_tuples<tuple<_Ts...>>
-40039:     {
-40039:       typedef tuple<_Ts...> __type;
-40039:     };
-40039: 
-40039:   template<typename... _T1s, typename... _T2s, typename... _Rem>
-40039:     struct __combine_tuples<tuple<_T1s...>, tuple<_T2s...>, _Rem...>
-40039:     {
-40039:       typedef typename __combine_tuples<tuple<_T1s..., _T2s...>,
-40039:      _Rem...>::__type __type;
-40039:     };
-40039: 
-40039: 
-40039:   template<typename... _Tpls>
-40039:     struct __tuple_cat_result
-40039:     {
-40039:       typedef typename __combine_tuples
-40039:         <typename __make_tuple<_Tpls>::__type...>::__type __type;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<typename...>
-40039:     struct __make_1st_indices;
-40039: 
-40039:   template<>
-40039:     struct __make_1st_indices<>
-40039:     {
-40039:       typedef std::_Index_tuple<> __type;
-40039:     };
-40039: 
-40039:   template<typename _Tp, typename... _Tpls>
-40039:     struct __make_1st_indices<_Tp, _Tpls...>
-40039:     {
-40039:       typedef typename std::_Build_index_tuple<std::tuple_size<
-40039:  typename std::remove_reference<_Tp>::type>::value>::__type __type;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Ret, typename _Indices, typename... _Tpls>
-40039:     struct __tuple_concater;
-40039: 
-40039:   template<typename _Ret, std::size_t... _Is, typename _Tp, typename... _Tpls>
-40039:     struct __tuple_concater<_Ret, std::_Index_tuple<_Is...>, _Tp, _Tpls...>
-40039:     {
-40039:       template<typename... _Us>
-40039:         static constexpr _Ret
-40039:         _S_do(_Tp&& __tp, _Tpls&&... __tps, _Us&&... __us)
-40039:         {
-40039:    typedef typename __make_1st_indices<_Tpls...>::__type __idx;
-40039:    typedef __tuple_concater<_Ret, __idx, _Tpls...> __next;
-40039:    return __next::_S_do(std::forward<_Tpls>(__tps)...,
-40039:           std::forward<_Us>(__us)...,
-40039:           std::get<_Is>(std::forward<_Tp>(__tp))...);
-40039:  }
-40039:     };
-40039: 
-40039:   template<typename _Ret>
-40039:     struct __tuple_concater<_Ret, std::_Index_tuple<>>
-40039:     {
-40039:       template<typename... _Us>
-40039:  static constexpr _Ret
-40039:  _S_do(_Us&&... __us)
-40039:         {
-40039:    return _Ret(std::forward<_Us>(__us)...);
-40039:  }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename... _Tpls, typename = typename
-40039:            enable_if<__and_<__is_tuple_like<_Tpls>...>::value>::type>
-40039:     constexpr auto
-40039:     tuple_cat(_Tpls&&... __tpls)
-40039:     -> typename __tuple_cat_result<_Tpls...>::__type
-40039:     {
-40039:       typedef typename __tuple_cat_result<_Tpls...>::__type __ret;
-40039:       typedef typename __make_1st_indices<_Tpls...>::__type __idx;
-40039:       typedef __tuple_concater<__ret, __idx, _Tpls...> __concater;
-40039:       return __concater::_S_do(std::forward<_Tpls>(__tpls)...);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename... _Elements>
-40039:     constexpr tuple<_Elements&...>
-40039:     tie(_Elements&... __args) noexcept
-40039:     { return tuple<_Elements&...>(__args...); }
-40039: 
-40039: 
-40039:   template<typename... _Elements>
-40039:     inline
-40039: 
-40039: 
-40039:     typename enable_if<__and_<__is_swappable<_Elements>...>::value
-40039:       >::type
-40039: 
-40039: 
-40039: 
-40039:     swap(tuple<_Elements...>& __x, tuple<_Elements...>& __y)
-40039:     noexcept(noexcept(__x.swap(__y)))
-40039:     { __x.swap(__y); }
-40039: 
-40039: 
-40039:   template<typename... _Elements>
-40039:     typename enable_if<!__and_<__is_swappable<_Elements>...>::value>::type
-40039:     swap(tuple<_Elements...>&, tuple<_Elements...>&) = delete;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   struct _Swallow_assign
-40039:   {
-40039:     template<class _Tp>
-40039:       constexpr const _Swallow_assign&
-40039:       operator=(const _Tp&) const
-40039:       { return *this; }
-40039:   };
-40039: 
-40039: 
-40039: 
-40039:   constexpr _Swallow_assign ignore{};
-40039: 
-40039: 
-40039:   template<typename... _Types, typename _Alloc>
-40039:     struct uses_allocator<tuple<_Types...>, _Alloc> : true_type { };
-40039: 
-40039: 
-40039:   template<class _T1, class _T2>
-40039:     template<typename... _Args1, typename... _Args2>
-40039:       inline
-40039:       pair<_T1, _T2>::
-40039:       pair(piecewise_construct_t,
-40039:     tuple<_Args1...> __first, tuple<_Args2...> __second)
-40039:       : pair(__first, __second,
-40039:       typename _Build_index_tuple<sizeof...(_Args1)>::__type(),
-40039:       typename _Build_index_tuple<sizeof...(_Args2)>::__type())
-40039:       { }
-40039: 
-40039:   template<class _T1, class _T2>
-40039:     template<typename... _Args1, std::size_t... _Indexes1,
-40039:              typename... _Args2, std::size_t... _Indexes2>
-40039:       inline
-40039:       pair<_T1, _T2>::
-40039:       pair(tuple<_Args1...>& __tuple1, tuple<_Args2...>& __tuple2,
-40039:     _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>)
-40039:       : first(std::forward<_Args1>(std::get<_Indexes1>(__tuple1))...),
-40039:         second(std::forward<_Args2>(std::get<_Indexes2>(__tuple2))...)
-40039:       { }
-40039: # 1711 "/usr/include/c++/8/tuple" 3
-40039: 
-40039: }
-40039: # 64 "/usr/include/c++/8/bits/stl_map.h" 2 3
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039:   template <typename _Key, typename _Tp, typename _Compare, typename _Alloc>
-40039:     class multimap;
-40039: # 98 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:   template <typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
-40039:      typename _Alloc = std::allocator<std::pair<const _Key, _Tp> > >
-40039:     class map
-40039:     {
-40039:     public:
-40039:       typedef _Key key_type;
-40039:       typedef _Tp mapped_type;
-40039:       typedef std::pair<const _Key, _Tp> value_type;
-40039:       typedef _Compare key_compare;
-40039:       typedef _Alloc allocator_type;
-40039: 
-40039:     private:
-40039: # 126 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:     public:
-40039:       class value_compare
-40039:       : public std::binary_function<value_type, value_type, bool>
-40039:       {
-40039:  friend class map<_Key, _Tp, _Compare, _Alloc>;
-40039:       protected:
-40039:  _Compare comp;
-40039: 
-40039:  value_compare(_Compare __c)
-40039:  : comp(__c) { }
-40039: 
-40039:       public:
-40039:  bool operator()(const value_type& __x, const value_type& __y) const
-40039:  { return comp(__x.first, __y.first); }
-40039:       };
-40039: 
-40039:     private:
-40039: 
-40039:       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
-40039:  rebind<value_type>::other _Pair_alloc_type;
-40039: 
-40039:       typedef _Rb_tree<key_type, value_type, _Select1st<value_type>,
-40039:          key_compare, _Pair_alloc_type> _Rep_type;
-40039: 
-40039: 
-40039:       _Rep_type _M_t;
-40039: 
-40039:       typedef __gnu_cxx::__alloc_traits<_Pair_alloc_type> _Alloc_traits;
-40039: 
-40039:     public:
-40039: 
-40039: 
-40039:       typedef typename _Alloc_traits::pointer pointer;
-40039:       typedef typename _Alloc_traits::const_pointer const_pointer;
-40039:       typedef typename _Alloc_traits::reference reference;
-40039:       typedef typename _Alloc_traits::const_reference const_reference;
-40039:       typedef typename _Rep_type::iterator iterator;
-40039:       typedef typename _Rep_type::const_iterator const_iterator;
-40039:       typedef typename _Rep_type::size_type size_type;
-40039:       typedef typename _Rep_type::difference_type difference_type;
-40039:       typedef typename _Rep_type::reverse_iterator reverse_iterator;
-40039:       typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
-40039: # 183 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       map() = default;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       explicit
-40039:       map(const _Compare& __comp,
-40039:    const allocator_type& __a = allocator_type())
-40039:       : _M_t(__comp, _Pair_alloc_type(__a)) { }
-40039: # 205 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       map(const map&) = default;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       map(map&&) = default;
-40039: # 226 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       map(initializer_list<value_type> __l,
-40039:    const _Compare& __comp = _Compare(),
-40039:    const allocator_type& __a = allocator_type())
-40039:       : _M_t(__comp, _Pair_alloc_type(__a))
-40039:       { _M_t._M_insert_unique(__l.begin(), __l.end()); }
-40039: 
-40039: 
-40039:       explicit
-40039:       map(const allocator_type& __a)
-40039:       : _M_t(_Compare(), _Pair_alloc_type(__a)) { }
-40039: 
-40039: 
-40039:       map(const map& __m, const allocator_type& __a)
-40039:       : _M_t(__m._M_t, _Pair_alloc_type(__a)) { }
-40039: 
-40039: 
-40039:       map(map&& __m, const allocator_type& __a)
-40039:       noexcept(is_nothrow_copy_constructible<_Compare>::value
-40039:         && _Alloc_traits::_S_always_equal())
-40039:       : _M_t(std::move(__m._M_t), _Pair_alloc_type(__a)) { }
-40039: 
-40039: 
-40039:       map(initializer_list<value_type> __l, const allocator_type& __a)
-40039:       : _M_t(_Compare(), _Pair_alloc_type(__a))
-40039:       { _M_t._M_insert_unique(__l.begin(), __l.end()); }
-40039: 
-40039: 
-40039:       template<typename _InputIterator>
-40039:  map(_InputIterator __first, _InputIterator __last,
-40039:      const allocator_type& __a)
-40039:  : _M_t(_Compare(), _Pair_alloc_type(__a))
-40039:  { _M_t._M_insert_unique(__first, __last); }
-40039: # 270 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       template<typename _InputIterator>
-40039:  map(_InputIterator __first, _InputIterator __last)
-40039:  : _M_t()
-40039:  { _M_t._M_insert_unique(__first, __last); }
-40039: # 287 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       template<typename _InputIterator>
-40039:  map(_InputIterator __first, _InputIterator __last,
-40039:      const _Compare& __comp,
-40039:      const allocator_type& __a = allocator_type())
-40039:  : _M_t(__comp, _Pair_alloc_type(__a))
-40039:  { _M_t._M_insert_unique(__first, __last); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       ~map() = default;
-40039: # 316 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       map&
-40039:       operator=(const map&) = default;
-40039: 
-40039: 
-40039:       map&
-40039:       operator=(map&&) = default;
-40039: # 334 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       map&
-40039:       operator=(initializer_list<value_type> __l)
-40039:       {
-40039:  _M_t._M_assign_unique(__l.begin(), __l.end());
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       allocator_type
-40039:       get_allocator() const noexcept
-40039:       { return allocator_type(_M_t.get_allocator()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       begin() noexcept
-40039:       { return _M_t.begin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       begin() const noexcept
-40039:       { return _M_t.begin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       end() noexcept
-40039:       { return _M_t.end(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       end() const noexcept
-40039:       { return _M_t.end(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       rbegin() noexcept
-40039:       { return _M_t.rbegin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       rbegin() const noexcept
-40039:       { return _M_t.rbegin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       rend() noexcept
-40039:       { return _M_t.rend(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       rend() const noexcept
-40039:       { return _M_t.rend(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       cbegin() const noexcept
-40039:       { return _M_t.begin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       cend() const noexcept
-40039:       { return _M_t.end(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       crbegin() const noexcept
-40039:       { return _M_t.rbegin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       crend() const noexcept
-40039:       { return _M_t.rend(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       bool
-40039:       empty() const noexcept
-40039:       { return _M_t.empty(); }
-40039: 
-40039: 
-40039:       size_type
-40039:       size() const noexcept
-40039:       { return _M_t.size(); }
-40039: 
-40039: 
-40039:       size_type
-40039:       max_size() const noexcept
-40039:       { return _M_t.max_size(); }
-40039: # 489 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       mapped_type&
-40039:       operator[](const key_type& __k)
-40039:       {
-40039: 
-40039: 
-40039: 
-40039:  iterator __i = lower_bound(__k);
-40039: 
-40039:  if (__i == end() || key_comp()(__k, (*__i).first))
-40039: 
-40039:    __i = _M_t._M_emplace_hint_unique(__i, std::piecewise_construct,
-40039:          std::tuple<const key_type&>(__k),
-40039:          std::tuple<>());
-40039: 
-40039: 
-40039: 
-40039:  return (*__i).second;
-40039:       }
-40039: 
-40039: 
-40039:       mapped_type&
-40039:       operator[](key_type&& __k)
-40039:       {
-40039: 
-40039: 
-40039: 
-40039:  iterator __i = lower_bound(__k);
-40039: 
-40039:  if (__i == end() || key_comp()(__k, (*__i).first))
-40039:    __i = _M_t._M_emplace_hint_unique(__i, std::piecewise_construct,
-40039:      std::forward_as_tuple(std::move(__k)),
-40039:      std::tuple<>());
-40039:  return (*__i).second;
-40039:       }
-40039: # 534 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       mapped_type&
-40039:       at(const key_type& __k)
-40039:       {
-40039:  iterator __i = lower_bound(__k);
-40039:  if (__i == end() || key_comp()(__k, (*__i).first))
-40039:    __throw_out_of_range(("map::at"));
-40039:  return (*__i).second;
-40039:       }
-40039: 
-40039:       const mapped_type&
-40039:       at(const key_type& __k) const
-40039:       {
-40039:  const_iterator __i = lower_bound(__k);
-40039:  if (__i == end() || key_comp()(__k, (*__i).first))
-40039:    __throw_out_of_range(("map::at"));
-40039:  return (*__i).second;
-40039:       }
-40039: # 572 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       template<typename... _Args>
-40039:  std::pair<iterator, bool>
-40039:  emplace(_Args&&... __args)
-40039:  { return _M_t._M_emplace_unique(std::forward<_Args>(__args)...); }
-40039: # 602 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       template<typename... _Args>
-40039:  iterator
-40039:  emplace_hint(const_iterator __pos, _Args&&... __args)
-40039:  {
-40039:    return _M_t._M_emplace_hint_unique(__pos,
-40039:           std::forward<_Args>(__args)...);
-40039:  }
-40039: # 800 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       std::pair<iterator, bool>
-40039:       insert(const value_type& __x)
-40039:       { return _M_t._M_insert_unique(__x); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       std::pair<iterator, bool>
-40039:       insert(value_type&& __x)
-40039:       { return _M_t._M_insert_unique(std::move(__x)); }
-40039: 
-40039:       template<typename _Pair>
-40039:  __enable_if_t<is_constructible<value_type, _Pair>::value,
-40039:         pair<iterator, bool>>
-40039:  insert(_Pair&& __x)
-40039:  { return _M_t._M_emplace_unique(std::forward<_Pair>(__x)); }
-40039: # 827 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       void
-40039:       insert(std::initializer_list<value_type> __list)
-40039:       { insert(__list.begin(), __list.end()); }
-40039: # 856 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       iterator
-40039: 
-40039:       insert(const_iterator __position, const value_type& __x)
-40039: 
-40039: 
-40039: 
-40039:       { return _M_t._M_insert_unique_(__position, __x); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       insert(const_iterator __position, value_type&& __x)
-40039:       { return _M_t._M_insert_unique_(__position, std::move(__x)); }
-40039: 
-40039:       template<typename _Pair>
-40039:  __enable_if_t<is_constructible<value_type, _Pair>::value, iterator>
-40039:  insert(const_iterator __position, _Pair&& __x)
-40039:  {
-40039:    return _M_t._M_emplace_hint_unique(__position,
-40039:           std::forward<_Pair>(__x));
-40039:  }
-40039: # 889 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  insert(_InputIterator __first, _InputIterator __last)
-40039:  { _M_t._M_insert_unique(__first, __last); }
-40039: # 1029 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       iterator
-40039:       erase(const_iterator __position)
-40039:       { return _M_t.erase(__position); }
-40039: 
-40039: 
-40039:       __attribute ((__abi_tag__ ("cxx11")))
-40039:       iterator
-40039:       erase(iterator __position)
-40039:       { return _M_t.erase(__position); }
-40039: # 1066 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       size_type
-40039:       erase(const key_type& __x)
-40039:       { return _M_t.erase(__x); }
-40039: # 1086 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       iterator
-40039:       erase(const_iterator __first, const_iterator __last)
-40039:       { return _M_t.erase(__first, __last); }
-40039: # 1120 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       void
-40039:       swap(map& __x)
-40039:       noexcept(__is_nothrow_swappable<_Compare>::value)
-40039:       { _M_t.swap(__x._M_t); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       clear() noexcept
-40039:       { _M_t.clear(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       key_compare
-40039:       key_comp() const
-40039:       { return _M_t.key_comp(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       value_compare
-40039:       value_comp() const
-40039:       { return value_compare(_M_t.key_comp()); }
-40039: # 1167 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       iterator
-40039:       find(const key_type& __x)
-40039:       { return _M_t.find(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  find(const _Kt& __x) -> decltype(_M_t._M_find_tr(__x))
-40039:  { return _M_t._M_find_tr(__x); }
-40039: # 1192 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       const_iterator
-40039:       find(const key_type& __x) const
-40039:       { return _M_t.find(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  find(const _Kt& __x) const -> decltype(_M_t._M_find_tr(__x))
-40039:  { return _M_t._M_find_tr(__x); }
-40039: # 1213 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       size_type
-40039:       count(const key_type& __x) const
-40039:       { return _M_t.find(__x) == _M_t.end() ? 0 : 1; }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  count(const _Kt& __x) const -> decltype(_M_t._M_count_tr(__x))
-40039:  { return _M_t._M_count_tr(__x); }
-40039: # 1237 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       iterator
-40039:       lower_bound(const key_type& __x)
-40039:       { return _M_t.lower_bound(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  lower_bound(const _Kt& __x)
-40039:  -> decltype(iterator(_M_t._M_lower_bound_tr(__x)))
-40039:  { return iterator(_M_t._M_lower_bound_tr(__x)); }
-40039: # 1262 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       const_iterator
-40039:       lower_bound(const key_type& __x) const
-40039:       { return _M_t.lower_bound(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  lower_bound(const _Kt& __x) const
-40039:  -> decltype(const_iterator(_M_t._M_lower_bound_tr(__x)))
-40039:  { return const_iterator(_M_t._M_lower_bound_tr(__x)); }
-40039: # 1282 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       iterator
-40039:       upper_bound(const key_type& __x)
-40039:       { return _M_t.upper_bound(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  upper_bound(const _Kt& __x)
-40039:  -> decltype(iterator(_M_t._M_upper_bound_tr(__x)))
-40039:  { return iterator(_M_t._M_upper_bound_tr(__x)); }
-40039: # 1302 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       const_iterator
-40039:       upper_bound(const key_type& __x) const
-40039:       { return _M_t.upper_bound(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  upper_bound(const _Kt& __x) const
-40039:  -> decltype(const_iterator(_M_t._M_upper_bound_tr(__x)))
-40039:  { return const_iterator(_M_t._M_upper_bound_tr(__x)); }
-40039: # 1331 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       std::pair<iterator, iterator>
-40039:       equal_range(const key_type& __x)
-40039:       { return _M_t.equal_range(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  equal_range(const _Kt& __x)
-40039:  -> decltype(pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)))
-40039:  { return pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)); }
-40039: # 1360 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:       std::pair<const_iterator, const_iterator>
-40039:       equal_range(const key_type& __x) const
-40039:       { return _M_t.equal_range(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  equal_range(const _Kt& __x) const
-40039:  -> decltype(pair<const_iterator, const_iterator>(
-40039:        _M_t._M_equal_range_tr(__x)))
-40039:  {
-40039:    return pair<const_iterator, const_iterator>(
-40039:        _M_t._M_equal_range_tr(__x));
-40039:  }
-40039: 
-40039: 
-40039: 
-40039:       template<typename _K1, typename _T1, typename _C1, typename _A1>
-40039:  friend bool
-40039:  operator==(const map<_K1, _T1, _C1, _A1>&,
-40039:      const map<_K1, _T1, _C1, _A1>&);
-40039: 
-40039:       template<typename _K1, typename _T1, typename _C1, typename _A1>
-40039:  friend bool
-40039:  operator<(const map<_K1, _T1, _C1, _A1>&,
-40039:     const map<_K1, _T1, _C1, _A1>&);
-40039:     };
-40039: # 1432 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator==(const map<_Key, _Tp, _Compare, _Alloc>& __x,
-40039:         const map<_Key, _Tp, _Compare, _Alloc>& __y)
-40039:     { return __x._M_t == __y._M_t; }
-40039: # 1449 "/usr/include/c++/8/bits/stl_map.h" 3
-40039:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator<(const map<_Key, _Tp, _Compare, _Alloc>& __x,
-40039:        const map<_Key, _Tp, _Compare, _Alloc>& __y)
-40039:     { return __x._M_t < __y._M_t; }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator!=(const map<_Key, _Tp, _Compare, _Alloc>& __x,
-40039:         const map<_Key, _Tp, _Compare, _Alloc>& __y)
-40039:     { return !(__x == __y); }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator>(const map<_Key, _Tp, _Compare, _Alloc>& __x,
-40039:        const map<_Key, _Tp, _Compare, _Alloc>& __y)
-40039:     { return __y < __x; }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator<=(const map<_Key, _Tp, _Compare, _Alloc>& __x,
-40039:         const map<_Key, _Tp, _Compare, _Alloc>& __y)
-40039:     { return !(__y < __x); }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator>=(const map<_Key, _Tp, _Compare, _Alloc>& __x,
-40039:         const map<_Key, _Tp, _Compare, _Alloc>& __y)
-40039:     { return !(__x < __y); }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
-40039:     inline void
-40039:     swap(map<_Key, _Tp, _Compare, _Alloc>& __x,
-40039:   map<_Key, _Tp, _Compare, _Alloc>& __y)
-40039:     noexcept(noexcept(__x.swap(__y)))
-40039:     { __x.swap(__y); }
-40039: 
-40039: 
-40039: # 1514 "/usr/include/c++/8/bits/stl_map.h" 3
-40039: 
-40039: }
-40039: # 62 "/usr/include/c++/8/map" 2 3
-40039: # 1 "/usr/include/c++/8/bits/stl_multimap.h" 1 3
-40039: # 64 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039:   template <typename _Key, typename _Tp, typename _Compare, typename _Alloc>
-40039:     class map;
-40039: # 96 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:   template <typename _Key, typename _Tp,
-40039:      typename _Compare = std::less<_Key>,
-40039:      typename _Alloc = std::allocator<std::pair<const _Key, _Tp> > >
-40039:     class multimap
-40039:     {
-40039:     public:
-40039:       typedef _Key key_type;
-40039:       typedef _Tp mapped_type;
-40039:       typedef std::pair<const _Key, _Tp> value_type;
-40039:       typedef _Compare key_compare;
-40039:       typedef _Alloc allocator_type;
-40039: 
-40039:     private:
-40039: # 125 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:     public:
-40039:       class value_compare
-40039:       : public std::binary_function<value_type, value_type, bool>
-40039:       {
-40039:  friend class multimap<_Key, _Tp, _Compare, _Alloc>;
-40039:       protected:
-40039:  _Compare comp;
-40039: 
-40039:  value_compare(_Compare __c)
-40039:  : comp(__c) { }
-40039: 
-40039:       public:
-40039:  bool operator()(const value_type& __x, const value_type& __y) const
-40039:  { return comp(__x.first, __y.first); }
-40039:       };
-40039: 
-40039:     private:
-40039: 
-40039:       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
-40039:  rebind<value_type>::other _Pair_alloc_type;
-40039: 
-40039:       typedef _Rb_tree<key_type, value_type, _Select1st<value_type>,
-40039:          key_compare, _Pair_alloc_type> _Rep_type;
-40039: 
-40039:       _Rep_type _M_t;
-40039: 
-40039:       typedef __gnu_cxx::__alloc_traits<_Pair_alloc_type> _Alloc_traits;
-40039: 
-40039:     public:
-40039: 
-40039: 
-40039:       typedef typename _Alloc_traits::pointer pointer;
-40039:       typedef typename _Alloc_traits::const_pointer const_pointer;
-40039:       typedef typename _Alloc_traits::reference reference;
-40039:       typedef typename _Alloc_traits::const_reference const_reference;
-40039:       typedef typename _Rep_type::iterator iterator;
-40039:       typedef typename _Rep_type::const_iterator const_iterator;
-40039:       typedef typename _Rep_type::size_type size_type;
-40039:       typedef typename _Rep_type::difference_type difference_type;
-40039:       typedef typename _Rep_type::reverse_iterator reverse_iterator;
-40039:       typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
-40039: # 180 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       multimap() = default;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       explicit
-40039:       multimap(const _Compare& __comp,
-40039:         const allocator_type& __a = allocator_type())
-40039:       : _M_t(__comp, _Pair_alloc_type(__a)) { }
-40039: # 202 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       multimap(const multimap&) = default;
-40039: # 211 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       multimap(multimap&&) = default;
-40039: # 223 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       multimap(initializer_list<value_type> __l,
-40039:         const _Compare& __comp = _Compare(),
-40039:         const allocator_type& __a = allocator_type())
-40039:       : _M_t(__comp, _Pair_alloc_type(__a))
-40039:       { _M_t._M_insert_equal(__l.begin(), __l.end()); }
-40039: 
-40039: 
-40039:       explicit
-40039:       multimap(const allocator_type& __a)
-40039:       : _M_t(_Compare(), _Pair_alloc_type(__a)) { }
-40039: 
-40039: 
-40039:       multimap(const multimap& __m, const allocator_type& __a)
-40039:       : _M_t(__m._M_t, _Pair_alloc_type(__a)) { }
-40039: 
-40039: 
-40039:       multimap(multimap&& __m, const allocator_type& __a)
-40039:       noexcept(is_nothrow_copy_constructible<_Compare>::value
-40039:         && _Alloc_traits::_S_always_equal())
-40039:       : _M_t(std::move(__m._M_t), _Pair_alloc_type(__a)) { }
-40039: 
-40039: 
-40039:       multimap(initializer_list<value_type> __l, const allocator_type& __a)
-40039:       : _M_t(_Compare(), _Pair_alloc_type(__a))
-40039:       { _M_t._M_insert_equal(__l.begin(), __l.end()); }
-40039: 
-40039: 
-40039:       template<typename _InputIterator>
-40039:  multimap(_InputIterator __first, _InputIterator __last,
-40039:    const allocator_type& __a)
-40039:  : _M_t(_Compare(), _Pair_alloc_type(__a))
-40039:  { _M_t._M_insert_equal(__first, __last); }
-40039: # 266 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       template<typename _InputIterator>
-40039:  multimap(_InputIterator __first, _InputIterator __last)
-40039:  : _M_t()
-40039:  { _M_t._M_insert_equal(__first, __last); }
-40039: # 282 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       template<typename _InputIterator>
-40039:  multimap(_InputIterator __first, _InputIterator __last,
-40039:    const _Compare& __comp,
-40039:    const allocator_type& __a = allocator_type())
-40039:  : _M_t(__comp, _Pair_alloc_type(__a))
-40039:  { _M_t._M_insert_equal(__first, __last); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       ~multimap() = default;
-40039: # 311 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       multimap&
-40039:       operator=(const multimap&) = default;
-40039: 
-40039: 
-40039:       multimap&
-40039:       operator=(multimap&&) = default;
-40039: # 329 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       multimap&
-40039:       operator=(initializer_list<value_type> __l)
-40039:       {
-40039:  _M_t._M_assign_equal(__l.begin(), __l.end());
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       allocator_type
-40039:       get_allocator() const noexcept
-40039:       { return allocator_type(_M_t.get_allocator()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       begin() noexcept
-40039:       { return _M_t.begin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       begin() const noexcept
-40039:       { return _M_t.begin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       end() noexcept
-40039:       { return _M_t.end(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       end() const noexcept
-40039:       { return _M_t.end(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       rbegin() noexcept
-40039:       { return _M_t.rbegin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       rbegin() const noexcept
-40039:       { return _M_t.rbegin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       rend() noexcept
-40039:       { return _M_t.rend(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       rend() const noexcept
-40039:       { return _M_t.rend(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       cbegin() const noexcept
-40039:       { return _M_t.begin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       cend() const noexcept
-40039:       { return _M_t.end(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       crbegin() const noexcept
-40039:       { return _M_t.rbegin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       crend() const noexcept
-40039:       { return _M_t.rend(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       bool
-40039:       empty() const noexcept
-40039:       { return _M_t.empty(); }
-40039: 
-40039: 
-40039:       size_type
-40039:       size() const noexcept
-40039:       { return _M_t.size(); }
-40039: 
-40039: 
-40039:       size_type
-40039:       max_size() const noexcept
-40039:       { return _M_t.max_size(); }
-40039: # 487 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       template<typename... _Args>
-40039:  iterator
-40039:  emplace(_Args&&... __args)
-40039:  { return _M_t._M_emplace_equal(std::forward<_Args>(__args)...); }
-40039: # 514 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       template<typename... _Args>
-40039:  iterator
-40039:  emplace_hint(const_iterator __pos, _Args&&... __args)
-40039:  {
-40039:    return _M_t._M_emplace_hint_equal(__pos,
-40039:          std::forward<_Args>(__args)...);
-40039:  }
-40039: # 536 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       iterator
-40039:       insert(const value_type& __x)
-40039:       { return _M_t._M_insert_equal(__x); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       insert(value_type&& __x)
-40039:       { return _M_t._M_insert_equal(std::move(__x)); }
-40039: 
-40039:       template<typename _Pair>
-40039:  __enable_if_t<is_constructible<value_type, _Pair>::value, iterator>
-40039:  insert(_Pair&& __x)
-40039:  { return _M_t._M_emplace_equal(std::forward<_Pair>(__x)); }
-40039: # 575 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       iterator
-40039: 
-40039:       insert(const_iterator __position, const value_type& __x)
-40039: 
-40039: 
-40039: 
-40039:       { return _M_t._M_insert_equal_(__position, __x); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       insert(const_iterator __position, value_type&& __x)
-40039:       { return _M_t._M_insert_equal_(__position, std::move(__x)); }
-40039: 
-40039:       template<typename _Pair>
-40039:  __enable_if_t<is_constructible<value_type, _Pair&&>::value, iterator>
-40039:  insert(const_iterator __position, _Pair&& __x)
-40039:  {
-40039:    return _M_t._M_emplace_hint_equal(__position,
-40039:          std::forward<_Pair>(__x));
-40039:  }
-40039: # 609 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  insert(_InputIterator __first, _InputIterator __last)
-40039:  { _M_t._M_insert_equal(__first, __last); }
-40039: # 622 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       void
-40039:       insert(initializer_list<value_type> __l)
-40039:       { this->insert(__l.begin(), __l.end()); }
-40039: # 699 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       iterator
-40039:       erase(const_iterator __position)
-40039:       { return _M_t.erase(__position); }
-40039: 
-40039: 
-40039:       __attribute ((__abi_tag__ ("cxx11")))
-40039:       iterator
-40039:       erase(iterator __position)
-40039:       { return _M_t.erase(__position); }
-40039: # 736 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       size_type
-40039:       erase(const key_type& __x)
-40039:       { return _M_t.erase(__x); }
-40039: # 757 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       iterator
-40039:       erase(const_iterator __first, const_iterator __last)
-40039:       { return _M_t.erase(__first, __last); }
-40039: # 794 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       void
-40039:       swap(multimap& __x)
-40039:       noexcept(__is_nothrow_swappable<_Compare>::value)
-40039:       { _M_t.swap(__x._M_t); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       clear() noexcept
-40039:       { _M_t.clear(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       key_compare
-40039:       key_comp() const
-40039:       { return _M_t.key_comp(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       value_compare
-40039:       value_comp() const
-40039:       { return value_compare(_M_t.key_comp()); }
-40039: # 840 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       iterator
-40039:       find(const key_type& __x)
-40039:       { return _M_t.find(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  find(const _Kt& __x) -> decltype(_M_t._M_find_tr(__x))
-40039:  { return _M_t._M_find_tr(__x); }
-40039: # 864 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       const_iterator
-40039:       find(const key_type& __x) const
-40039:       { return _M_t.find(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  find(const _Kt& __x) const -> decltype(_M_t._M_find_tr(__x))
-40039:  { return _M_t._M_find_tr(__x); }
-40039: # 882 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       size_type
-40039:       count(const key_type& __x) const
-40039:       { return _M_t.count(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  count(const _Kt& __x) const -> decltype(_M_t._M_count_tr(__x))
-40039:  { return _M_t._M_count_tr(__x); }
-40039: # 906 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       iterator
-40039:       lower_bound(const key_type& __x)
-40039:       { return _M_t.lower_bound(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  lower_bound(const _Kt& __x)
-40039:  -> decltype(iterator(_M_t._M_lower_bound_tr(__x)))
-40039:  { return iterator(_M_t._M_lower_bound_tr(__x)); }
-40039: # 931 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       const_iterator
-40039:       lower_bound(const key_type& __x) const
-40039:       { return _M_t.lower_bound(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  lower_bound(const _Kt& __x) const
-40039:  -> decltype(const_iterator(_M_t._M_lower_bound_tr(__x)))
-40039:  { return const_iterator(_M_t._M_lower_bound_tr(__x)); }
-40039: # 951 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       iterator
-40039:       upper_bound(const key_type& __x)
-40039:       { return _M_t.upper_bound(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  upper_bound(const _Kt& __x)
-40039:  -> decltype(iterator(_M_t._M_upper_bound_tr(__x)))
-40039:  { return iterator(_M_t._M_upper_bound_tr(__x)); }
-40039: # 971 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       const_iterator
-40039:       upper_bound(const key_type& __x) const
-40039:       { return _M_t.upper_bound(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  upper_bound(const _Kt& __x) const
-40039:  -> decltype(const_iterator(_M_t._M_upper_bound_tr(__x)))
-40039:  { return const_iterator(_M_t._M_upper_bound_tr(__x)); }
-40039: # 998 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       std::pair<iterator, iterator>
-40039:       equal_range(const key_type& __x)
-40039:       { return _M_t.equal_range(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  equal_range(const _Kt& __x)
-40039:  -> decltype(pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)))
-40039:  { return pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)); }
-40039: # 1025 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:       std::pair<const_iterator, const_iterator>
-40039:       equal_range(const key_type& __x) const
-40039:       { return _M_t.equal_range(__x); }
-40039: 
-40039: 
-40039:       template<typename _Kt>
-40039:  auto
-40039:  equal_range(const _Kt& __x) const
-40039:  -> decltype(pair<const_iterator, const_iterator>(
-40039:        _M_t._M_equal_range_tr(__x)))
-40039:  {
-40039:    return pair<const_iterator, const_iterator>(
-40039:        _M_t._M_equal_range_tr(__x));
-40039:  }
-40039: 
-40039: 
-40039: 
-40039:       template<typename _K1, typename _T1, typename _C1, typename _A1>
-40039:  friend bool
-40039:  operator==(const multimap<_K1, _T1, _C1, _A1>&,
-40039:      const multimap<_K1, _T1, _C1, _A1>&);
-40039: 
-40039:       template<typename _K1, typename _T1, typename _C1, typename _A1>
-40039:  friend bool
-40039:  operator<(const multimap<_K1, _T1, _C1, _A1>&,
-40039:     const multimap<_K1, _T1, _C1, _A1>&);
-40039:   };
-40039: # 1096 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator==(const multimap<_Key, _Tp, _Compare, _Alloc>& __x,
-40039:         const multimap<_Key, _Tp, _Compare, _Alloc>& __y)
-40039:     { return __x._M_t == __y._M_t; }
-40039: # 1113 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator<(const multimap<_Key, _Tp, _Compare, _Alloc>& __x,
-40039:        const multimap<_Key, _Tp, _Compare, _Alloc>& __y)
-40039:     { return __x._M_t < __y._M_t; }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator!=(const multimap<_Key, _Tp, _Compare, _Alloc>& __x,
-40039:         const multimap<_Key, _Tp, _Compare, _Alloc>& __y)
-40039:     { return !(__x == __y); }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator>(const multimap<_Key, _Tp, _Compare, _Alloc>& __x,
-40039:        const multimap<_Key, _Tp, _Compare, _Alloc>& __y)
-40039:     { return __y < __x; }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator<=(const multimap<_Key, _Tp, _Compare, _Alloc>& __x,
-40039:         const multimap<_Key, _Tp, _Compare, _Alloc>& __y)
-40039:     { return !(__y < __x); }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
-40039:     inline bool
-40039:     operator>=(const multimap<_Key, _Tp, _Compare, _Alloc>& __x,
-40039:         const multimap<_Key, _Tp, _Compare, _Alloc>& __y)
-40039:     { return !(__x < __y); }
-40039: 
-40039: 
-40039:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
-40039:     inline void
-40039:     swap(multimap<_Key, _Tp, _Compare, _Alloc>& __x,
-40039:   multimap<_Key, _Tp, _Compare, _Alloc>& __y)
-40039:     noexcept(noexcept(__x.swap(__y)))
-40039:     { __x.swap(__y); }
-40039: 
-40039: 
-40039: # 1178 "/usr/include/c++/8/bits/stl_multimap.h" 3
-40039: 
-40039: }
-40039: # 63 "/usr/include/c++/8/map" 2 3
-40039: # 36 "../../src/Float_defs.hh" 2
-40039: # 44 "../../src/Float_defs.hh"
-40039: 
-40039: # 44 "../../src/Float_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: struct float_ieee754_half {
-40039:   uint16_t word;
-40039:   static const uint16_t SGN_MASK = 0x8000U;
-40039:   static const uint16_t EXP_MASK = 0xfc00U;
-40039:   static const uint16_t WRD_MAX = 0x7bffU;
-40039:   static const uint16_t POS_INF = 0x7c00U;
-40039:   static const uint16_t NEG_INF = 0xfc00U;
-40039:   static const uint16_t POS_ZERO = 0x0000U;
-40039:   static const uint16_t NEG_ZERO = 0x8000U;
-40039:   static const unsigned int BASE = 2;
-40039:   static const unsigned int EXPONENT_BITS = 5;
-40039:   static const unsigned int MANTISSA_BITS = 10;
-40039:   static const int EXPONENT_MAX = (1 << (EXPONENT_BITS - 1)) - 1;
-40039:   static const int EXPONENT_BIAS = EXPONENT_MAX;
-40039:   static const int EXPONENT_MIN = -EXPONENT_MAX + 1;
-40039:   static const int EXPONENT_MIN_DENORM = EXPONENT_MIN
-40039:                                         - static_cast<int>(MANTISSA_BITS);
-40039:   static const Floating_Point_Format floating_point_format = IEEE754_HALF;
-40039:   int inf_sign() const;
-40039:   bool is_nan() const;
-40039:   int zero_sign() const;
-40039:   bool sign_bit() const;
-40039:   void negate();
-40039:   void dec();
-40039:   void inc();
-40039:   void set_max(bool negative);
-40039:   void build(bool negative, mpz_t mantissa, int exponent);
-40039: 
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: struct float_ieee754_single {
-40039:   uint32_t word;
-40039:   static const uint32_t SGN_MASK = 0x80000000U;
-40039:   static const uint32_t EXP_MASK = 0x7f800000U;
-40039:   static const uint32_t WRD_MAX = 0x7f7fffffU;
-40039:   static const uint32_t POS_INF = 0x7f800000U;
-40039:   static const uint32_t NEG_INF = 0xff800000U;
-40039:   static const uint32_t POS_ZERO = 0x00000000U;
-40039:   static const uint32_t NEG_ZERO = 0x80000000U;
-40039:   static const unsigned int BASE = 2;
-40039:   static const unsigned int EXPONENT_BITS = 8;
-40039:   static const unsigned int MANTISSA_BITS = 23;
-40039:   static const int EXPONENT_MAX = (1 << (EXPONENT_BITS - 1)) - 1;
-40039:   static const int EXPONENT_BIAS = EXPONENT_MAX;
-40039:   static const int EXPONENT_MIN = -EXPONENT_MAX + 1;
-40039:   static const int EXPONENT_MIN_DENORM = EXPONENT_MIN
-40039:                                         - static_cast<int>(MANTISSA_BITS);
-40039:   static const Floating_Point_Format floating_point_format = IEEE754_SINGLE;
-40039:   int inf_sign() const;
-40039:   bool is_nan() const;
-40039:   int zero_sign() const;
-40039:   bool sign_bit() const;
-40039:   void negate();
-40039:   void dec();
-40039:   void inc();
-40039:   void set_max(bool negative);
-40039:   void build(bool negative, mpz_t mantissa, int exponent);
-40039: };
-40039: # 120 "../../src/Float_defs.hh"
-40039: struct float_ieee754_double {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   uint32_t lsp;
-40039:   uint32_t msp;
-40039: 
-40039:   static const uint32_t MSP_SGN_MASK = 0x80000000U;
-40039:   static const uint32_t MSP_POS_INF = 0x7ff00000U;
-40039:   static const uint32_t MSP_NEG_INF = 0xfff00000U;
-40039:   static const uint32_t MSP_POS_ZERO = 0x00000000U;
-40039:   static const uint32_t MSP_NEG_ZERO = 0x80000000U;
-40039:   static const uint32_t LSP_INF = 0;
-40039:   static const uint32_t LSP_ZERO = 0;
-40039:   static const uint32_t MSP_MAX = 0x7fefffffU;
-40039:   static const uint32_t LSP_MAX = 0xffffffffU;
-40039:   static const unsigned int BASE = 2;
-40039:   static const unsigned int EXPONENT_BITS = 11;
-40039:   static const unsigned int MANTISSA_BITS = 52;
-40039:   static const int EXPONENT_MAX = (1 << (EXPONENT_BITS - 1)) - 1;
-40039:   static const int EXPONENT_BIAS = EXPONENT_MAX;
-40039:   static const int EXPONENT_MIN = -EXPONENT_MAX + 1;
-40039:   static const int EXPONENT_MIN_DENORM = EXPONENT_MIN
-40039:                                         - static_cast<int>(MANTISSA_BITS);
-40039:   static const Floating_Point_Format floating_point_format = IEEE754_DOUBLE;
-40039:   int inf_sign() const;
-40039:   bool is_nan() const;
-40039:   int zero_sign() const;
-40039:   bool sign_bit() const;
-40039:   void negate();
-40039:   void dec();
-40039:   void inc();
-40039:   void set_max(bool negative);
-40039:   void build(bool negative, mpz_t mantissa, int exponent);
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: struct float_ibm_single {
-40039:   uint32_t word;
-40039:   static const uint32_t SGN_MASK = 0x80000000U;
-40039:   static const uint32_t EXP_MASK = 0x7f000000U;
-40039:   static const uint32_t WRD_MAX = 0x7fffffffU;
-40039:   static const uint32_t POS_INF = 0x7f000000U;
-40039:   static const uint32_t NEG_INF = 0xff000000U;
-40039:   static const uint32_t POS_ZERO = 0x00000000U;
-40039:   static const uint32_t NEG_ZERO = 0x80000000U;
-40039:   static const unsigned int BASE = 16;
-40039:   static const unsigned int EXPONENT_BITS = 7;
-40039:   static const unsigned int MANTISSA_BITS = 24;
-40039:   static const int EXPONENT_BIAS = 64;
-40039:   static const int EXPONENT_MAX = (1 << (EXPONENT_BITS - 1)) - 1;
-40039:   static const int EXPONENT_MIN = -EXPONENT_MAX + 1;
-40039:   static const int EXPONENT_MIN_DENORM = EXPONENT_MIN
-40039:                                         - static_cast<int>(MANTISSA_BITS);
-40039:   static const Floating_Point_Format floating_point_format = IBM_SINGLE;
-40039:   int inf_sign() const;
-40039:   bool is_nan() const;
-40039:   int zero_sign() const;
-40039:   bool sign_bit() const;
-40039:   void negate();
-40039:   void dec();
-40039:   void inc();
-40039:   void set_max(bool negative);
-40039:   void build(bool negative, mpz_t mantissa, int exponent);
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: struct float_ibm_double {
-40039:   static const unsigned int BASE = 16;
-40039:   static const unsigned int EXPONENT_BITS = 7;
-40039:   static const unsigned int MANTISSA_BITS = 56;
-40039:   static const int EXPONENT_BIAS = 64;
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: struct float_intel_double_extended {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   uint64_t lsp;
-40039:   uint32_t msp;
-40039: 
-40039:   static const uint32_t MSP_SGN_MASK = 0x00008000U;
-40039:   static const uint32_t MSP_POS_INF = 0x00007fffU;
-40039:   static const uint32_t MSP_NEG_INF = 0x0000ffffU;
-40039:   static const uint32_t MSP_POS_ZERO = 0x00000000U;
-40039:   static const uint32_t MSP_NEG_ZERO = 0x00008000U;
-40039:   static const uint64_t LSP_INF = static_cast<uint64_t>(0x8000000000000000ULL);
-40039:   static const uint64_t LSP_ZERO = 0;
-40039:   static const uint32_t MSP_MAX = 0x00007ffeU;
-40039:   static const uint64_t LSP_DMAX = static_cast<uint64_t>(0x7fffffffffffffffULL);
-40039:   static const uint64_t LSP_NMAX = static_cast<uint64_t>(0xffffffffffffffffULL);
-40039:   static const unsigned int BASE = 2;
-40039:   static const unsigned int EXPONENT_BITS = 15;
-40039:   static const unsigned int MANTISSA_BITS = 63;
-40039:   static const int EXPONENT_MAX = (1 << (EXPONENT_BITS - 1)) - 1;
-40039:   static const int EXPONENT_BIAS = EXPONENT_MAX;
-40039:   static const int EXPONENT_MIN = -EXPONENT_MAX + 1;
-40039:   static const int EXPONENT_MIN_DENORM = EXPONENT_MIN
-40039:                                         - static_cast<int>(MANTISSA_BITS);
-40039:   static const Floating_Point_Format floating_point_format =
-40039:                                      INTEL_DOUBLE_EXTENDED;
-40039:   int inf_sign() const;
-40039:   bool is_nan() const;
-40039:   int zero_sign() const;
-40039:   bool sign_bit() const;
-40039:   void negate();
-40039:   void dec();
-40039:   void inc();
-40039:   void set_max(bool negative);
-40039:   void build(bool negative, mpz_t mantissa, int exponent);
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: struct float_ieee754_quad {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   uint64_t lsp;
-40039:   uint64_t msp;
-40039: 
-40039:   static const uint64_t MSP_SGN_MASK = static_cast<uint64_t>(0x8000000000000000ULL);
-40039:   static const uint64_t MSP_POS_INF = static_cast<uint64_t>(0x7fff000000000000ULL);
-40039:   static const uint64_t MSP_NEG_INF = static_cast<uint64_t>(0xffff000000000000ULL);
-40039:   static const uint64_t MSP_POS_ZERO = static_cast<uint64_t>(0x0000000000000000ULL);
-40039:   static const uint64_t MSP_NEG_ZERO = static_cast<uint64_t>(0x8000000000000000ULL);
-40039:   static const uint64_t LSP_INF = 0;
-40039:   static const uint64_t LSP_ZERO = 0;
-40039:   static const uint64_t MSP_MAX = static_cast<uint64_t>(0x7ffeffffffffffffULL);
-40039:   static const uint64_t LSP_MAX = static_cast<uint64_t>(0xffffffffffffffffULL);
-40039:   static const unsigned int BASE = 2;
-40039:   static const unsigned int EXPONENT_BITS = 15;
-40039:   static const unsigned int MANTISSA_BITS = 112;
-40039:   static const int EXPONENT_MAX = (1 << (EXPONENT_BITS - 1)) - 1;
-40039:   static const int EXPONENT_BIAS = EXPONENT_MAX;
-40039:   static const int EXPONENT_MIN = -EXPONENT_MAX + 1;
-40039:   static const int EXPONENT_MIN_DENORM = EXPONENT_MIN
-40039:                                         - static_cast<int>(MANTISSA_BITS);
-40039:   static const Floating_Point_Format floating_point_format = IEEE754_QUAD;
-40039:   int inf_sign() const;
-40039:   bool is_nan() const;
-40039:   int zero_sign() const;
-40039:   bool sign_bit() const;
-40039:   void negate();
-40039:   void dec();
-40039:   void inc();
-40039:   void set_max(bool negative);
-40039:   void build(bool negative, mpz_t mantissa, int exponent);
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: class Float : public False { };
-40039: 
-40039: 
-40039: template <>
-40039: class Float<float> : public True {
-40039: public:
-40039: 
-40039: 
-40039: 
-40039:   typedef float_ieee754_single Binary;
-40039: # 306 "../../src/Float_defs.hh"
-40039:   union {
-40039:     float number;
-40039:     Binary binary;
-40039:   } u;
-40039:   Float();
-40039:   Float(float v);
-40039:   float value();
-40039: };
-40039: 
-40039: 
-40039: 
-40039: template <>
-40039: class Float<double> : public True {
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef float_ieee754_double Binary;
-40039: # 335 "../../src/Float_defs.hh"
-40039:   union {
-40039:     double number;
-40039:     Binary binary;
-40039:   } u;
-40039:   Float();
-40039:   Float(double v);
-40039:   double value();
-40039: };
-40039: 
-40039: 
-40039: 
-40039: template <>
-40039: class Float<long double> : public True {
-40039: public:
-40039: # 360 "../../src/Float_defs.hh"
-40039:   typedef float_intel_double_extended Binary;
-40039: 
-40039: 
-40039: 
-40039:   union {
-40039:     long double number;
-40039:     Binary binary;
-40039:   } u;
-40039:   Float();
-40039:   Float(long double v);
-40039:   long double value();
-40039: };
-40039: # 383 "../../src/Float_defs.hh"
-40039: unsigned int msb_position(unsigned long long v);
-40039: # 398 "../../src/Float_defs.hh"
-40039: template <typename Target, typename FP_Interval_Type>
-40039: class FP_Oracle {
-40039: public:
-40039: # 414 "../../src/Float_defs.hh"
-40039:   virtual bool get_interval(dimension_type dim, FP_Interval_Type& result) const
-40039:     = 0;
-40039: # 425 "../../src/Float_defs.hh"
-40039:   virtual bool get_fp_constant_value(
-40039:                const Floating_Point_Constant<Target>& expr,
-40039:                      FP_Interval_Type& result) const = 0;
-40039: # 437 "../../src/Float_defs.hh"
-40039:   virtual bool get_integer_expr_value(const Concrete_Expression<Target>& expr,
-40039:                                       FP_Interval_Type& result) const = 0;
-40039: # 450 "../../src/Float_defs.hh"
-40039:   virtual bool get_associated_dimensions(
-40039:           const Approximable_Reference<Target>& expr,
-40039:           std::set<dimension_type>& result) const = 0;
-40039: 
-40039: };
-40039: # 463 "../../src/Float_defs.hh"
-40039: bool is_less_precise_than(Floating_Point_Format f1, Floating_Point_Format f2);
-40039: # 481 "../../src/Float_defs.hh"
-40039: template <typename FP_Interval_Type>
-40039: const FP_Interval_Type&
-40039: compute_absolute_error(Floating_Point_Format analyzed_format);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename FP_Interval_Type>
-40039: void
-40039: discard_occurrences(std::map<dimension_type,
-40039:                              Linear_Form<FP_Interval_Type> >& lf_store,
-40039:                     Variable var);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename FP_Interval_Type>
-40039: void
-40039: affine_form_image(std::map<dimension_type,
-40039:                            Linear_Form<FP_Interval_Type> >& lf_store,
-40039:                   Variable var,
-40039:                   const Linear_Form<FP_Interval_Type>& lf);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename FP_Interval_Type>
-40039: void
-40039: upper_bound_assign(std::map<dimension_type,
-40039:                             Linear_Form<FP_Interval_Type> >& ls1,
-40039:                    const std::map<dimension_type,
-40039:                                   Linear_Form<FP_Interval_Type> >& ls2);
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Float_inlines.hh" 1
-40039: # 27 "../../src/Float_inlines.hh"
-40039: # 1 "../../src/Variable_defs.hh" 1
-40039: # 28 "../../src/Variable_defs.hh"
-40039: # 1 "../../src/Init_types.hh" 1
-40039: # 16 "../../src/Init_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Init;
-40039: 
-40039: }
-40039: # 29 "../../src/Variable_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: std::ostream&
-40039: operator<<(std::ostream& s, const Variable v);
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: bool less(Variable v, Variable w);
-40039: 
-40039: 
-40039: void
-40039: swap(Variable& x, Variable& y);
-40039: 
-40039: }
-40039: # 85 "../../src/Variable_defs.hh"
-40039: class Parma_Polyhedra_Library::Variable {
-40039: 
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   explicit Variable(dimension_type i);
-40039: 
-40039: 
-40039:   dimension_type id() const;
-40039: 
-40039: 
-40039:   static dimension_type max_space_dimension();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039: 
-40039:   typedef void output_function_type(std::ostream& s, const Variable v);
-40039: 
-40039: 
-40039:   static void default_output_function(std::ostream& s, const Variable v);
-40039: 
-40039: 
-40039:   static void set_output_function(output_function_type* p);
-40039: 
-40039: 
-40039:   static output_function_type* get_output_function();
-40039: 
-40039: 
-40039: 
-40039:   struct Compare {
-40039: 
-40039:     bool operator()(Variable x, Variable y) const;
-40039:   };
-40039: 
-40039: 
-40039:   void m_swap(Variable& v);
-40039: 
-40039: private:
-40039: 
-40039:   dimension_type varid;
-40039: 
-40039: 
-40039:   friend class Init;
-40039: 
-40039:   friend std::ostream&
-40039:   Parma_Polyhedra_Library::IO_Operators::operator<<(std::ostream& s,
-40039:                                                     const Variable v);
-40039: 
-40039: 
-40039:   static output_function_type* current_output_function;
-40039: 
-40039: };
-40039: 
-40039: # 1 "../../src/Variable_inlines.hh" 1
-40039: # 27 "../../src/Variable_inlines.hh"
-40039: # 1 "../../src/globals_defs.hh" 1
-40039: # 28 "../../src/globals_defs.hh"
-40039: # 1 "../../src/C_Integer.hh" 1
-40039: # 28 "../../src/C_Integer.hh"
-40039: # 1 "/usr/include/c++/8/climits" 1 3
-40039: # 39 "/usr/include/c++/8/climits" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/climits" 3
-40039: 
-40039: 
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 1 3 4
-40039: # 43 "/usr/include/c++/8/climits" 2 3
-40039: # 29 "../../src/C_Integer.hh" 2
-40039: # 59 "../../src/C_Integer.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: struct C_Integer : public False { };
-40039: 
-40039: template <>
-40039: struct C_Integer<char> : public True {
-40039:   enum const_bool_value {
-40039: 
-40039:     is_signed = true
-40039: 
-40039: 
-40039: 
-40039:   };
-40039:   typedef void smaller_type;
-40039:   typedef void smaller_signed_type;
-40039:   typedef void smaller_unsigned_type;
-40039: 
-40039:   typedef unsigned char other_type;
-40039: 
-40039: 
-40039: 
-40039:   static const char min = static_cast<char>(
-40039: # 81 "../../src/C_Integer.hh" 3 4
-40039:                                            (-0x7f - 1)
-40039: # 81 "../../src/C_Integer.hh"
-40039:                                                    );
-40039:   static const char max = static_cast<char>(0x7f);
-40039: };
-40039: 
-40039: template <>
-40039: struct C_Integer<signed char> : public True {
-40039:   enum const_bool_value {
-40039:     is_signed = true
-40039:   };
-40039:   typedef void smaller_type;
-40039:   typedef void smaller_signed_type;
-40039:   typedef void smaller_unsigned_type;
-40039:   typedef unsigned char other_type;
-40039:   static const signed char min = static_cast<signed char>(
-40039: # 94 "../../src/C_Integer.hh" 3 4
-40039:                                                          (-0x7f - 1)
-40039: # 94 "../../src/C_Integer.hh"
-40039:                                                                   );
-40039:   static const signed char max = static_cast<signed char>(0x7f);
-40039: };
-40039: 
-40039: template <>
-40039: struct C_Integer<signed short> : public True {
-40039:   enum const_bool_value {
-40039:     is_signed = true
-40039:   };
-40039:   typedef signed char smaller_type;
-40039:   typedef signed char smaller_signed_type;
-40039:   typedef unsigned char smaller_unsigned_type;
-40039:   typedef unsigned short other_type;
-40039:   static const signed short min = static_cast<signed short>(
-40039: # 107 "../../src/C_Integer.hh" 3 4
-40039:                                                            (-0x7fff - 1)
-40039: # 107 "../../src/C_Integer.hh"
-40039:                                                                    );
-40039:   static const signed short max = static_cast<signed short>(0x7fff);
-40039: };
-40039: 
-40039: template <>
-40039: struct C_Integer<signed int> : public True {
-40039:   enum const_bool_value {
-40039:     is_signed = true
-40039:   };
-40039:   typedef signed short smaller_type;
-40039:   typedef signed short smaller_signed_type;
-40039:   typedef unsigned short smaller_unsigned_type;
-40039:   typedef unsigned int other_type;
-40039:   static const signed int min = 
-40039: # 120 "../../src/C_Integer.hh" 3 4
-40039:                                (-0x7fffffff - 1)
-40039: # 120 "../../src/C_Integer.hh"
-40039:                                       ;
-40039:   static const signed int max = 0x7fffffff;
-40039: };
-40039: 
-40039: template <>
-40039: struct C_Integer<signed long> : public True {
-40039:   enum const_bool_value {
-40039:     is_signed = true
-40039:   };
-40039:   typedef signed int smaller_type;
-40039:   typedef signed int smaller_signed_type;
-40039:   typedef unsigned int smaller_unsigned_type;
-40039:   typedef unsigned long other_type;
-40039:   static const signed long min = 
-40039: # 133 "../../src/C_Integer.hh" 3 4
-40039:                                 (-0x7fffffffffffffffL - 1L)
-40039: # 133 "../../src/C_Integer.hh"
-40039:                                         ;
-40039:   static const signed long max = 0x7fffffffffffffffL;
-40039: };
-40039: 
-40039: template <>
-40039: struct C_Integer<signed long long> : public True {
-40039:   enum const_bool_value {
-40039:     is_signed = true
-40039:   };
-40039:   typedef signed long smaller_type;
-40039:   typedef signed long smaller_signed_type;
-40039:   typedef unsigned long smaller_unsigned_type;
-40039:   typedef unsigned long long other_type;
-40039:   static const signed long long min = 
-40039: # 146 "../../src/C_Integer.hh" 3 4
-40039:                                      (-0x7fffffffffffffffLL -1)
-40039: # 146 "../../src/C_Integer.hh"
-40039:                                               ;
-40039:   static const signed long long max = 0x7fffffffffffffffLL;
-40039: };
-40039: 
-40039: template <>
-40039: struct C_Integer<unsigned char> : public True {
-40039:   enum const_bool_value {
-40039:     is_signed = false
-40039:   };
-40039:   typedef void smaller_type;
-40039:   typedef void smaller_signed_type;
-40039:   typedef void smaller_unsigned_type;
-40039:   typedef signed char other_type;
-40039:   static const unsigned char min = static_cast<unsigned char>(0U);
-40039:   static const unsigned char max = static_cast<unsigned char>(
-40039: # 160 "../../src/C_Integer.hh" 3 4
-40039:                                                              (0x7f * 2 + 1)
-40039: # 160 "../../src/C_Integer.hh"
-40039:                                                                       );
-40039: };
-40039: 
-40039: template <>
-40039: struct C_Integer<unsigned short> : public True {
-40039:   enum const_bool_value {
-40039:     is_signed = false
-40039:   };
-40039:   typedef unsigned char smaller_type;
-40039:   typedef signed char smaller_signed_type;
-40039:   typedef unsigned char smaller_unsigned_type;
-40039:   typedef signed short other_type;
-40039:   static const unsigned short min = static_cast<unsigned short>(0U);
-40039:   static const unsigned short max = static_cast<unsigned short>(
-40039: # 173 "../../src/C_Integer.hh" 3 4
-40039:                                                                (0x7fff * 2 + 1)
-40039: # 173 "../../src/C_Integer.hh"
-40039:                                                                         );
-40039: };
-40039: 
-40039: template <>
-40039: struct C_Integer<unsigned int> : public True {
-40039:   enum const_bool_value {
-40039:     is_signed = false
-40039:   };
-40039:   typedef unsigned short smaller_type;
-40039:   typedef signed short smaller_signed_type;
-40039:   typedef unsigned short smaller_unsigned_type;
-40039:   typedef signed int other_type;
-40039:   static const unsigned int min = 0U;
-40039:   static const unsigned int max = 
-40039: # 186 "../../src/C_Integer.hh" 3 4
-40039:                                  (0x7fffffff * 2U + 1U)
-40039: # 186 "../../src/C_Integer.hh"
-40039:                                          ;
-40039: };
-40039: 
-40039: template <>
-40039: struct C_Integer<unsigned long> : public True {
-40039:   enum const_bool_value {
-40039:     is_signed = false
-40039:   };
-40039:   typedef unsigned int smaller_type;
-40039:   typedef signed int smaller_signed_type;
-40039:   typedef unsigned int smaller_unsigned_type;
-40039:   typedef signed long other_type;
-40039:   static const unsigned long min = 0UL;
-40039:   static const unsigned long max = 
-40039: # 199 "../../src/C_Integer.hh" 3 4
-40039:                                   (0x7fffffffffffffffL * 2UL + 1UL)
-40039: # 199 "../../src/C_Integer.hh"
-40039:                                            ;
-40039: };
-40039: 
-40039: template <>
-40039: struct C_Integer<unsigned long long> : public True {
-40039:   enum const_bool_value {
-40039:     is_signed = false
-40039:   };
-40039:   typedef unsigned long smaller_type;
-40039:   typedef signed long smaller_signed_type;
-40039:   typedef unsigned long smaller_unsigned_type;
-40039:   typedef signed long long other_type;
-40039:   static const unsigned long long min = 0ULL;
-40039:   static const unsigned long long max = 
-40039: # 212 "../../src/C_Integer.hh" 3 4
-40039:                                        (0x7fffffffffffffffLL * 2ULL + 1)
-40039: # 212 "../../src/C_Integer.hh"
-40039:                                                  ;
-40039: };
-40039: 
-40039: }
-40039: # 29 "../../src/globals_defs.hh" 2
-40039: # 100 "../../src/globals_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: dimension_type
-40039: not_a_dimension();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: int32_t
-40039: hash_code_from_dimension(dimension_type dim);
-40039: # 120 "../../src/globals_defs.hh"
-40039: template <typename T>
-40039: inline typename Enable_If<Slow_Copy<T>::value, void>::type
-40039: swap(T&, T&) {
-40039:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_123 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!Slow_Copy<T>::value)>) };
-40039: }
-40039: # 156 "../../src/globals_defs.hh"
-40039: dimension_type
-40039: compute_capacity(dimension_type requested_size,
-40039:                  dimension_type maximum_size);
-40039: # 169 "../../src/globals_defs.hh"
-40039: struct Weightwatch_Traits {
-40039: 
-40039:   typedef unsigned long long Threshold;
-40039: 
-40039: 
-40039:   typedef unsigned long long Delta;
-40039: 
-40039: 
-40039:   static const Threshold& get();
-40039: 
-40039: 
-40039:   static bool less_than(const Threshold& a, const Threshold& b);
-40039: # 194 "../../src/globals_defs.hh"
-40039:   static Delta compute_delta(unsigned long unscaled, unsigned scale);
-40039: 
-40039: 
-40039:   static void from_delta(Threshold& threshold, const Delta& delta);
-40039: 
-40039: 
-40039:   static Threshold weight;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static void (*check_function)(void);
-40039: };
-40039: # 239 "../../src/globals_defs.hh"
-40039: class Throwable {
-40039: public:
-40039: 
-40039:   virtual void throw_me() const = 0;
-40039: 
-40039: 
-40039:   virtual ~Throwable();
-40039: };
-40039: # 271 "../../src/globals_defs.hh"
-40039: extern const Throwable* volatile abandon_expensive_computations;
-40039: # 281 "../../src/globals_defs.hh"
-40039: void
-40039: maybe_abandon();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: struct Recycle_Input {
-40039: };
-40039: # 401 "../../src/globals_defs.hh"
-40039: bool is_space(char c);
-40039: 
-40039: template <typename T, long long v, typename Enable = void>
-40039: struct Fit : public False {
-40039: };
-40039: 
-40039: template <typename T, long long v>
-40039: struct Fit<T, v, typename Enable_If<C_Integer<T>::value>::type> {
-40039:   enum {
-40039:     value = (v >= static_cast<long long>(C_Integer<T>::min)
-40039:              && v <= static_cast<long long>(C_Integer<T>::max))
-40039:   };
-40039: };
-40039: 
-40039: template <typename T, T v>
-40039: struct TConstant {
-40039:   static const T value = v;
-40039: };
-40039: 
-40039: 
-40039: template <typename T, T v>
-40039: const T TConstant<T, v>::value;
-40039: 
-40039: template <typename T, long long v, bool prefer_signed = true,
-40039:           typename Enable = void>
-40039: struct Constant_ : public TConstant<T, v> {
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T, long long v, bool prefer_signed>
-40039: struct Constant_<T, v, prefer_signed,
-40039:                  typename Enable_If<(Fit<typename C_Integer<T>::smaller_signed_type, v>::value
-40039:                                      && (prefer_signed
-40039:                                          || !Fit<typename C_Integer<T>::smaller_unsigned_type, v>::value))>::type>
-40039:   : public Constant_<typename C_Integer<T>::smaller_signed_type, v, prefer_signed> {
-40039: };
-40039: 
-40039: template <typename T, long long v, bool prefer_signed>
-40039: struct Constant_<T, v, prefer_signed,
-40039:                  typename Enable_If<(Fit<typename C_Integer<T>::smaller_unsigned_type, v>::value
-40039:                                      && (!prefer_signed
-40039:                                          || !Fit<typename C_Integer<T>::smaller_signed_type, v>::value))>::type>
-40039:   : public Constant_<typename C_Integer<T>::smaller_unsigned_type, v, prefer_signed> {
-40039: };
-40039: 
-40039: 
-40039: 
-40039: template <long long v, bool prefer_signed = true>
-40039: struct Constant : public Constant_<long long, v, prefer_signed> {
-40039: };
-40039: # 465 "../../src/globals_defs.hh"
-40039: template <typename T>
-40039: typename Enable_If<Is_Native<T>::value, memory_size_type>::type
-40039: total_memory_in_bytes(const T&);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: typename Enable_If<Is_Native<T>::value, memory_size_type>::type
-40039: external_memory_in_bytes(const T&);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: memory_size_type
-40039: total_memory_in_bytes(const mpz_class& x);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: memory_size_type
-40039: external_memory_in_bytes(const mpz_class& x);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: memory_size_type
-40039: total_memory_in_bytes(const mpq_class& x);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: memory_size_type
-40039: external_memory_in_bytes(const mpq_class& x);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Enable = void>
-40039: struct Has_OK : public False { };
-40039: 
-40039: template <typename T>
-40039: struct Has_OK<T, typename Enable_If_Is<bool (T::*)() const, &T::OK>::type>
-40039:   : public True {
-40039: };
-40039: 
-40039: template <typename T>
-40039: inline typename Enable_If<Has_OK<T>::value, bool>::type
-40039: f_OK(const T& to) {
-40039:   return to.OK();
-40039: }
-40039: 
-40039: 
-40039: 
-40039: inline bool f_OK(const char&) { return true; }
-40039: inline bool f_OK(const signed char&) { return true; }
-40039: inline bool f_OK(const unsigned char&) { return true; }
-40039: inline bool f_OK(const signed short&) { return true; }
-40039: inline bool f_OK(const unsigned short&) { return true; }
-40039: inline bool f_OK(const signed int&) { return true; }
-40039: inline bool f_OK(const unsigned int&) { return true; }
-40039: inline bool f_OK(const signed long&) { return true; }
-40039: inline bool f_OK(const unsigned long&) { return true; }
-40039: inline bool f_OK(const signed long long&) { return true; }
-40039: inline bool f_OK(const unsigned long long&) { return true; }
-40039: inline bool f_OK(const float&) { return true; }
-40039: inline bool f_OK(const double&) { return true; }
-40039: inline bool f_OK(const long double&) { return true; }
-40039: inline bool f_OK(const mpz_class&) { return true; }
-40039: inline bool f_OK(const mpq_class&) { return true; }
-40039: 
-40039: void ascii_dump(std::ostream& s, Representation r);
-40039: bool ascii_load(std::istream& s, Representation& r);
-40039: 
-40039: dimension_type
-40039: check_space_dimension_overflow(dimension_type dim,
-40039:                                dimension_type max,
-40039:                                const char* domain,
-40039:                                const char* method,
-40039:                                const char* reason);
-40039: 
-40039: template <typename RA_Container>
-40039: typename RA_Container::iterator
-40039: nth_iter(RA_Container& cont, dimension_type n);
-40039: 
-40039: template <typename RA_Container>
-40039: typename RA_Container::const_iterator
-40039: nth_iter(const RA_Container& cont, dimension_type n);
-40039: 
-40039: dimension_type
-40039: least_significant_one_mask(dimension_type i);
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "../../src/globals_inlines.hh" 1
-40039: # 29 "../../src/globals_inlines.hh"
-40039: # 1 "/usr/include/c++/8/cassert" 1 3
-40039: # 41 "/usr/include/c++/8/cassert" 3
-40039:        
-40039: # 42 "/usr/include/c++/8/cassert" 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/assert.h" 1 3 4
-40039: # 44 "/usr/include/c++/8/cassert" 2 3
-40039: # 30 "../../src/globals_inlines.hh" 2
-40039: # 1 "/usr/include/c++/8/istream" 1 3
-40039: # 36 "/usr/include/c++/8/istream" 3
-40039:        
-40039: # 37 "/usr/include/c++/8/istream" 3
-40039: 
-40039: # 1 "/usr/include/c++/8/ios" 1 3
-40039: # 36 "/usr/include/c++/8/ios" 3
-40039:        
-40039: # 37 "/usr/include/c++/8/ios" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/ios_base.h" 1 3
-40039: # 37 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:        
-40039: # 38 "/usr/include/c++/8/bits/ios_base.h" 3
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/locale_classes.h" 1 3
-40039: # 37 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:        
-40039: # 38 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 43 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 62 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:   class locale
-40039:   {
-40039:   public:
-40039: 
-40039: 
-40039:     typedef int category;
-40039: 
-40039: 
-40039:     class facet;
-40039:     class id;
-40039:     class _Impl;
-40039: 
-40039:     friend class facet;
-40039:     friend class _Impl;
-40039: 
-40039:     template<typename _Facet>
-40039:       friend bool
-40039:       has_facet(const locale&) throw();
-40039: 
-40039:     template<typename _Facet>
-40039:       friend const _Facet&
-40039:       use_facet(const locale&);
-40039: 
-40039:     template<typename _Cache>
-40039:       friend struct __use_cache;
-40039: # 98 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:     static const category none = 0;
-40039:     static const category ctype = 1L << 0;
-40039:     static const category numeric = 1L << 1;
-40039:     static const category collate = 1L << 2;
-40039:     static const category time = 1L << 3;
-40039:     static const category monetary = 1L << 4;
-40039:     static const category messages = 1L << 5;
-40039:     static const category all = (ctype | numeric | collate |
-40039:         time | monetary | messages);
-40039: # 117 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:     locale() throw();
-40039: # 126 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:     locale(const locale& __other) throw();
-40039: # 136 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:     explicit
-40039:     locale(const char* __s);
-40039: # 151 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:     locale(const locale& __base, const char* __s, category __cat);
-40039: # 162 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:     explicit
-40039:     locale(const std::string& __s) : locale(__s.c_str()) { }
-40039: # 177 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:     locale(const locale& __base, const std::string& __s, category __cat)
-40039:     : locale(__base, __s.c_str(), __cat) { }
-40039: # 192 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:     locale(const locale& __base, const locale& __add, category __cat);
-40039: # 205 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:     template<typename _Facet>
-40039:       locale(const locale& __other, _Facet* __f);
-40039: 
-40039: 
-40039:     ~locale() throw();
-40039: # 219 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:     const locale&
-40039:     operator=(const locale& __other) throw();
-40039: # 234 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:     template<typename _Facet>
-40039:       locale
-40039:       combine(const locale& __other) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     __attribute ((__abi_tag__ ("cxx11")))
-40039:     string
-40039:     name() const;
-40039: # 254 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:     bool
-40039:     operator==(const locale& __other) const throw();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     bool
-40039:     operator!=(const locale& __other) const throw()
-40039:     { return !(this->operator==(__other)); }
-40039: # 282 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:     template<typename _Char, typename _Traits, typename _Alloc>
-40039:       bool
-40039:       operator()(const basic_string<_Char, _Traits, _Alloc>& __s1,
-40039:    const basic_string<_Char, _Traits, _Alloc>& __s2) const;
-40039: # 298 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:     static locale
-40039:     global(const locale& __loc);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     static const locale&
-40039:     classic();
-40039: 
-40039:   private:
-40039: 
-40039:     _Impl* _M_impl;
-40039: 
-40039: 
-40039:     static _Impl* _S_classic;
-40039: 
-40039: 
-40039:     static _Impl* _S_global;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     static const char* const* const _S_categories;
-40039: # 333 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:     enum { _S_categories_size = 6 + 6 };
-40039: 
-40039: 
-40039:     static __gthread_once_t _S_once;
-40039: 
-40039: 
-40039:     explicit
-40039:     locale(_Impl*) throw();
-40039: 
-40039:     static void
-40039:     _S_initialize();
-40039: 
-40039:     static void
-40039:     _S_initialize_once() throw();
-40039: 
-40039:     static category
-40039:     _S_normalize_category(category);
-40039: 
-40039:     void
-40039:     _M_coalesce(const locale& __base, const locale& __add, category __cat);
-40039: 
-40039: 
-40039:     static const id* const _S_twinned_facets[];
-40039: 
-40039:   };
-40039: # 371 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:   class locale::facet
-40039:   {
-40039:   private:
-40039:     friend class locale;
-40039:     friend class locale::_Impl;
-40039: 
-40039:     mutable _Atomic_word _M_refcount;
-40039: 
-40039: 
-40039:     static __c_locale _S_c_locale;
-40039: 
-40039: 
-40039:     static const char _S_c_name[2];
-40039: 
-40039: 
-40039:     static __gthread_once_t _S_once;
-40039: 
-40039: 
-40039:     static void
-40039:     _S_initialize_once();
-40039: 
-40039:   protected:
-40039: # 402 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:     explicit
-40039:     facet(size_t __refs = 0) throw() : _M_refcount(__refs ? 1 : 0)
-40039:     { }
-40039: 
-40039: 
-40039:     virtual
-40039:     ~facet();
-40039: 
-40039:     static void
-40039:     _S_create_c_locale(__c_locale& __cloc, const char* __s,
-40039:          __c_locale __old = 0);
-40039: 
-40039:     static __c_locale
-40039:     _S_clone_c_locale(__c_locale& __cloc) throw();
-40039: 
-40039:     static void
-40039:     _S_destroy_c_locale(__c_locale& __cloc);
-40039: 
-40039:     static __c_locale
-40039:     _S_lc_ctype_c_locale(__c_locale __cloc, const char* __s);
-40039: 
-40039: 
-40039: 
-40039:     static __c_locale
-40039:     _S_get_c_locale();
-40039: 
-40039:     __attribute__ ((__const__)) static const char*
-40039:     _S_get_c_name() throw();
-40039: # 438 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:     facet(const facet&) = delete;
-40039: 
-40039:     facet&
-40039:     operator=(const facet&) = delete;
-40039: 
-40039: 
-40039:   private:
-40039:     void
-40039:     _M_add_reference() const throw()
-40039:     { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); }
-40039: 
-40039:     void
-40039:     _M_remove_reference() const throw()
-40039:     {
-40039: 
-40039:       ;
-40039:       if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1)
-40039:  {
-40039:           ;
-40039:    try
-40039:      { delete this; }
-40039:    catch(...)
-40039:      { }
-40039:  }
-40039:     }
-40039: 
-40039:     const facet* _M_sso_shim(const id*) const;
-40039:     const facet* _M_cow_shim(const id*) const;
-40039: 
-40039:   protected:
-40039:     class __shim;
-40039:   };
-40039: # 483 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:   class locale::id
-40039:   {
-40039:   private:
-40039:     friend class locale;
-40039:     friend class locale::_Impl;
-40039: 
-40039:     template<typename _Facet>
-40039:       friend const _Facet&
-40039:       use_facet(const locale&);
-40039: 
-40039:     template<typename _Facet>
-40039:       friend bool
-40039:       has_facet(const locale&) throw();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     mutable size_t _M_index;
-40039: 
-40039: 
-40039:     static _Atomic_word _S_refcount;
-40039: 
-40039:     void
-40039:     operator=(const id&);
-40039: 
-40039:     id(const id&);
-40039: 
-40039:   public:
-40039: 
-40039: 
-40039: 
-40039:     id() { }
-40039: 
-40039:     size_t
-40039:     _M_id() const throw();
-40039:   };
-40039: 
-40039: 
-40039: 
-40039:   class locale::_Impl
-40039:   {
-40039:   public:
-40039: 
-40039:     friend class locale;
-40039:     friend class locale::facet;
-40039: 
-40039:     template<typename _Facet>
-40039:       friend bool
-40039:       has_facet(const locale&) throw();
-40039: 
-40039:     template<typename _Facet>
-40039:       friend const _Facet&
-40039:       use_facet(const locale&);
-40039: 
-40039:     template<typename _Cache>
-40039:       friend struct __use_cache;
-40039: 
-40039:   private:
-40039: 
-40039:     _Atomic_word _M_refcount;
-40039:     const facet** _M_facets;
-40039:     size_t _M_facets_size;
-40039:     const facet** _M_caches;
-40039:     char** _M_names;
-40039:     static const locale::id* const _S_id_ctype[];
-40039:     static const locale::id* const _S_id_numeric[];
-40039:     static const locale::id* const _S_id_collate[];
-40039:     static const locale::id* const _S_id_time[];
-40039:     static const locale::id* const _S_id_monetary[];
-40039:     static const locale::id* const _S_id_messages[];
-40039:     static const locale::id* const* const _S_facet_categories[];
-40039: 
-40039:     void
-40039:     _M_add_reference() throw()
-40039:     { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); }
-40039: 
-40039:     void
-40039:     _M_remove_reference() throw()
-40039:     {
-40039: 
-40039:       ;
-40039:       if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1)
-40039:  {
-40039:           ;
-40039:    try
-40039:      { delete this; }
-40039:    catch(...)
-40039:      { }
-40039:  }
-40039:     }
-40039: 
-40039:     _Impl(const _Impl&, size_t);
-40039:     _Impl(const char*, size_t);
-40039:     _Impl(size_t) throw();
-40039: 
-40039:    ~_Impl() throw();
-40039: 
-40039:     _Impl(const _Impl&);
-40039: 
-40039:     void
-40039:     operator=(const _Impl&);
-40039: 
-40039:     bool
-40039:     _M_check_same_name()
-40039:     {
-40039:       bool __ret = true;
-40039:       if (_M_names[1])
-40039: 
-40039:  for (size_t __i = 0; __ret && __i < _S_categories_size - 1; ++__i)
-40039:    __ret = __builtin_strcmp(_M_names[__i], _M_names[__i + 1]) == 0;
-40039:       return __ret;
-40039:     }
-40039: 
-40039:     void
-40039:     _M_replace_categories(const _Impl*, category);
-40039: 
-40039:     void
-40039:     _M_replace_category(const _Impl*, const locale::id* const*);
-40039: 
-40039:     void
-40039:     _M_replace_facet(const _Impl*, const locale::id*);
-40039: 
-40039:     void
-40039:     _M_install_facet(const locale::id*, const facet*);
-40039: 
-40039:     template<typename _Facet>
-40039:       void
-40039:       _M_init_facet(_Facet* __facet)
-40039:       { _M_install_facet(&_Facet::id, __facet); }
-40039: 
-40039:     template<typename _Facet>
-40039:       void
-40039:       _M_init_facet_unchecked(_Facet* __facet)
-40039:       {
-40039:  __facet->_M_add_reference();
-40039:  _M_facets[_Facet::id._M_id()] = __facet;
-40039:       }
-40039: 
-40039:     void
-40039:     _M_install_cache(const facet*, size_t);
-40039: 
-40039:     void _M_init_extra(facet**);
-40039:     void _M_init_extra(void*, void*, const char*, const char*);
-40039:   };
-40039: # 641 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:   template<typename _CharT>
-40039:     class __cxx11:: collate : public locale::facet
-40039:     {
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef basic_string<_CharT> string_type;
-40039: 
-40039: 
-40039:     protected:
-40039: 
-40039: 
-40039:       __c_locale _M_c_locale_collate;
-40039: 
-40039:     public:
-40039: 
-40039:       static locale::id id;
-40039: # 668 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:       explicit
-40039:       collate(size_t __refs = 0)
-40039:       : facet(__refs), _M_c_locale_collate(_S_get_c_locale())
-40039:       { }
-40039: # 682 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:       explicit
-40039:       collate(__c_locale __cloc, size_t __refs = 0)
-40039:       : facet(__refs), _M_c_locale_collate(_S_clone_c_locale(__cloc))
-40039:       { }
-40039: # 699 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:       int
-40039:       compare(const _CharT* __lo1, const _CharT* __hi1,
-40039:        const _CharT* __lo2, const _CharT* __hi2) const
-40039:       { return this->do_compare(__lo1, __hi1, __lo2, __hi2); }
-40039: # 718 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:       string_type
-40039:       transform(const _CharT* __lo, const _CharT* __hi) const
-40039:       { return this->do_transform(__lo, __hi); }
-40039: # 732 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:       long
-40039:       hash(const _CharT* __lo, const _CharT* __hi) const
-40039:       { return this->do_hash(__lo, __hi); }
-40039: 
-40039: 
-40039:       int
-40039:       _M_compare(const _CharT*, const _CharT*) const throw();
-40039: 
-40039:       size_t
-40039:       _M_transform(_CharT*, const _CharT*, size_t) const throw();
-40039: 
-40039:   protected:
-40039: 
-40039:       virtual
-40039:       ~collate()
-40039:       { _S_destroy_c_locale(_M_c_locale_collate); }
-40039: # 761 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:       virtual int
-40039:       do_compare(const _CharT* __lo1, const _CharT* __hi1,
-40039:    const _CharT* __lo2, const _CharT* __hi2) const;
-40039: # 775 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:       virtual string_type
-40039:       do_transform(const _CharT* __lo, const _CharT* __hi) const;
-40039: # 788 "/usr/include/c++/8/bits/locale_classes.h" 3
-40039:       virtual long
-40039:       do_hash(const _CharT* __lo, const _CharT* __hi) const;
-40039:     };
-40039: 
-40039:   template<typename _CharT>
-40039:     locale::id collate<_CharT>::id;
-40039: 
-40039: 
-40039:   template<>
-40039:     int
-40039:     collate<char>::_M_compare(const char*, const char*) const throw();
-40039: 
-40039:   template<>
-40039:     size_t
-40039:     collate<char>::_M_transform(char*, const char*, size_t) const throw();
-40039: 
-40039: 
-40039:   template<>
-40039:     int
-40039:     collate<wchar_t>::_M_compare(const wchar_t*, const wchar_t*) const throw();
-40039: 
-40039:   template<>
-40039:     size_t
-40039:     collate<wchar_t>::_M_transform(wchar_t*, const wchar_t*, size_t) const throw();
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     class __cxx11:: collate_byname : public collate<_CharT>
-40039:     {
-40039:     public:
-40039: 
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef basic_string<_CharT> string_type;
-40039: 
-40039: 
-40039:       explicit
-40039:       collate_byname(const char* __s, size_t __refs = 0)
-40039:       : collate<_CharT>(__refs)
-40039:       {
-40039:  if (__builtin_strcmp(__s, "C") != 0
-40039:      && __builtin_strcmp(__s, "POSIX") != 0)
-40039:    {
-40039:      this->_S_destroy_c_locale(this->_M_c_locale_collate);
-40039:      this->_S_create_c_locale(this->_M_c_locale_collate, __s);
-40039:    }
-40039:       }
-40039: 
-40039: 
-40039:       explicit
-40039:       collate_byname(const string& __s, size_t __refs = 0)
-40039:       : collate_byname(__s.c_str(), __refs) { }
-40039: 
-40039: 
-40039:     protected:
-40039:       virtual
-40039:       ~collate_byname() { }
-40039:     };
-40039: 
-40039: 
-40039: }
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/locale_classes.tcc" 1 3
-40039: # 37 "/usr/include/c++/8/bits/locale_classes.tcc" 3
-40039:        
-40039: # 38 "/usr/include/c++/8/bits/locale_classes.tcc" 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   template<typename _Facet>
-40039:     locale::
-40039:     locale(const locale& __other, _Facet* __f)
-40039:     {
-40039:       _M_impl = new _Impl(*__other._M_impl, 1);
-40039: 
-40039:       try
-40039:  { _M_impl->_M_install_facet(&_Facet::id, __f); }
-40039:       catch(...)
-40039:  {
-40039:    _M_impl->_M_remove_reference();
-40039:    throw;
-40039:  }
-40039:       delete [] _M_impl->_M_names[0];
-40039:       _M_impl->_M_names[0] = 0;
-40039:     }
-40039: 
-40039:   template<typename _Facet>
-40039:     locale
-40039:     locale::
-40039:     combine(const locale& __other) const
-40039:     {
-40039:       _Impl* __tmp = new _Impl(*_M_impl, 1);
-40039:       try
-40039:  {
-40039:    __tmp->_M_replace_facet(__other._M_impl, &_Facet::id);
-40039:  }
-40039:       catch(...)
-40039:  {
-40039:    __tmp->_M_remove_reference();
-40039:    throw;
-40039:  }
-40039:       return locale(__tmp);
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     bool
-40039:     locale::
-40039:     operator()(const basic_string<_CharT, _Traits, _Alloc>& __s1,
-40039:         const basic_string<_CharT, _Traits, _Alloc>& __s2) const
-40039:     {
-40039:       typedef std::collate<_CharT> __collate_type;
-40039:       const __collate_type& __collate = use_facet<__collate_type>(*this);
-40039:       return (__collate.compare(__s1.data(), __s1.data() + __s1.length(),
-40039:     __s2.data(), __s2.data() + __s2.length()) < 0);
-40039:     }
-40039: # 102 "/usr/include/c++/8/bits/locale_classes.tcc" 3
-40039:   template<typename _Facet>
-40039:     bool
-40039:     has_facet(const locale& __loc) throw()
-40039:     {
-40039:       const size_t __i = _Facet::id._M_id();
-40039:       const locale::facet** __facets = __loc._M_impl->_M_facets;
-40039:       return (__i < __loc._M_impl->_M_facets_size
-40039: 
-40039:        && dynamic_cast<const _Facet*>(__facets[__i]));
-40039: 
-40039: 
-40039: 
-40039:     }
-40039: # 130 "/usr/include/c++/8/bits/locale_classes.tcc" 3
-40039:   template<typename _Facet>
-40039:     const _Facet&
-40039:     use_facet(const locale& __loc)
-40039:     {
-40039:       const size_t __i = _Facet::id._M_id();
-40039:       const locale::facet** __facets = __loc._M_impl->_M_facets;
-40039:       if (__i >= __loc._M_impl->_M_facets_size || !__facets[__i])
-40039:         __throw_bad_cast();
-40039: 
-40039:       return dynamic_cast<const _Facet&>(*__facets[__i]);
-40039: 
-40039: 
-40039: 
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     int
-40039:     collate<_CharT>::_M_compare(const _CharT*, const _CharT*) const throw ()
-40039:     { return 0; }
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     size_t
-40039:     collate<_CharT>::_M_transform(_CharT*, const _CharT*, size_t) const throw ()
-40039:     { return 0; }
-40039: 
-40039:   template<typename _CharT>
-40039:     int
-40039:     collate<_CharT>::
-40039:     do_compare(const _CharT* __lo1, const _CharT* __hi1,
-40039:         const _CharT* __lo2, const _CharT* __hi2) const
-40039:     {
-40039: 
-40039: 
-40039:       const string_type __one(__lo1, __hi1);
-40039:       const string_type __two(__lo2, __hi2);
-40039: 
-40039:       const _CharT* __p = __one.c_str();
-40039:       const _CharT* __pend = __one.data() + __one.length();
-40039:       const _CharT* __q = __two.c_str();
-40039:       const _CharT* __qend = __two.data() + __two.length();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       for (;;)
-40039:  {
-40039:    const int __res = _M_compare(__p, __q);
-40039:    if (__res)
-40039:      return __res;
-40039: 
-40039:    __p += char_traits<_CharT>::length(__p);
-40039:    __q += char_traits<_CharT>::length(__q);
-40039:    if (__p == __pend && __q == __qend)
-40039:      return 0;
-40039:    else if (__p == __pend)
-40039:      return -1;
-40039:    else if (__q == __qend)
-40039:      return 1;
-40039: 
-40039:    __p++;
-40039:    __q++;
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _CharT>
-40039:     typename collate<_CharT>::string_type
-40039:     collate<_CharT>::
-40039:     do_transform(const _CharT* __lo, const _CharT* __hi) const
-40039:     {
-40039:       string_type __ret;
-40039: 
-40039: 
-40039:       const string_type __str(__lo, __hi);
-40039: 
-40039:       const _CharT* __p = __str.c_str();
-40039:       const _CharT* __pend = __str.data() + __str.length();
-40039: 
-40039:       size_t __len = (__hi - __lo) * 2;
-40039: 
-40039:       _CharT* __c = new _CharT[__len];
-40039: 
-40039:       try
-40039:  {
-40039: 
-40039: 
-40039: 
-40039:    for (;;)
-40039:      {
-40039: 
-40039:        size_t __res = _M_transform(__c, __p, __len);
-40039: 
-40039: 
-40039:        if (__res >= __len)
-40039:   {
-40039:     __len = __res + 1;
-40039:     delete [] __c, __c = 0;
-40039:     __c = new _CharT[__len];
-40039:     __res = _M_transform(__c, __p, __len);
-40039:   }
-40039: 
-40039:        __ret.append(__c, __res);
-40039:        __p += char_traits<_CharT>::length(__p);
-40039:        if (__p == __pend)
-40039:   break;
-40039: 
-40039:        __p++;
-40039:        __ret.push_back(_CharT());
-40039:      }
-40039:  }
-40039:       catch(...)
-40039:  {
-40039:    delete [] __c;
-40039:    throw;
-40039:  }
-40039: 
-40039:       delete [] __c;
-40039: 
-40039:       return __ret;
-40039:     }
-40039: 
-40039:   template<typename _CharT>
-40039:     long
-40039:     collate<_CharT>::
-40039:     do_hash(const _CharT* __lo, const _CharT* __hi) const
-40039:     {
-40039:       unsigned long __val = 0;
-40039:       for (; __lo < __hi; ++__lo)
-40039:  __val =
-40039:    *__lo + ((__val << 7)
-40039:      | (__val >> (__gnu_cxx::__numeric_traits<unsigned long>::
-40039:     __digits - 7)));
-40039:       return static_cast<long>(__val);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   extern template class collate<char>;
-40039:   extern template class collate_byname<char>;
-40039: 
-40039:   extern template
-40039:     const collate<char>&
-40039:     use_facet<collate<char> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<collate<char> >(const locale&);
-40039: 
-40039: 
-40039:   extern template class collate<wchar_t>;
-40039:   extern template class collate_byname<wchar_t>;
-40039: 
-40039:   extern template
-40039:     const collate<wchar_t>&
-40039:     use_facet<collate<wchar_t> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<collate<wchar_t> >(const locale&);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 852 "/usr/include/c++/8/bits/locale_classes.h" 2 3
-40039: # 42 "/usr/include/c++/8/bits/ios_base.h" 2 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/system_error" 1 3
-40039: # 32 "/usr/include/c++/8/system_error" 3
-40039:        
-40039: # 33 "/usr/include/c++/8/system_error" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/error_constants.h" 1 3
-40039: # 34 "/usr/include/x86_64-linux-gnu/c++/8/bits/error_constants.h" 3
-40039: # 1 "/usr/include/c++/8/cerrno" 1 3
-40039: # 39 "/usr/include/c++/8/cerrno" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/cerrno" 3
-40039: # 35 "/usr/include/x86_64-linux-gnu/c++/8/bits/error_constants.h" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   enum class errc
-40039:     {
-40039:       address_family_not_supported = 97,
-40039:       address_in_use = 98,
-40039:       address_not_available = 99,
-40039:       already_connected = 106,
-40039:       argument_list_too_long = 7,
-40039:       argument_out_of_domain = 33,
-40039:       bad_address = 14,
-40039:       bad_file_descriptor = 9,
-40039: 
-40039: 
-40039:       bad_message = 74,
-40039: 
-40039: 
-40039:       broken_pipe = 32,
-40039:       connection_aborted = 103,
-40039:       connection_already_in_progress = 114,
-40039:       connection_refused = 111,
-40039:       connection_reset = 104,
-40039:       cross_device_link = 18,
-40039:       destination_address_required = 89,
-40039:       device_or_resource_busy = 16,
-40039:       directory_not_empty = 39,
-40039:       executable_format_error = 8,
-40039:       file_exists = 17,
-40039:       file_too_large = 27,
-40039:       filename_too_long = 36,
-40039:       function_not_supported = 38,
-40039:       host_unreachable = 113,
-40039: 
-40039: 
-40039:       identifier_removed = 43,
-40039: 
-40039: 
-40039:       illegal_byte_sequence = 84,
-40039:       inappropriate_io_control_operation = 25,
-40039:       interrupted = 4,
-40039:       invalid_argument = 22,
-40039:       invalid_seek = 29,
-40039:       io_error = 5,
-40039:       is_a_directory = 21,
-40039:       message_size = 90,
-40039:       network_down = 100,
-40039:       network_reset = 102,
-40039:       network_unreachable = 101,
-40039:       no_buffer_space = 105,
-40039:       no_child_process = 10,
-40039: 
-40039: 
-40039:       no_link = 67,
-40039: 
-40039: 
-40039:       no_lock_available = 37,
-40039: 
-40039: 
-40039:       no_message_available = 61,
-40039: 
-40039: 
-40039:       no_message = 42,
-40039:       no_protocol_option = 92,
-40039:       no_space_on_device = 28,
-40039: 
-40039: 
-40039:       no_stream_resources = 63,
-40039: 
-40039: 
-40039:       no_such_device_or_address = 6,
-40039:       no_such_device = 19,
-40039:       no_such_file_or_directory = 2,
-40039:       no_such_process = 3,
-40039:       not_a_directory = 20,
-40039:       not_a_socket = 88,
-40039: 
-40039: 
-40039:       not_a_stream = 60,
-40039: 
-40039: 
-40039:       not_connected = 107,
-40039:       not_enough_memory = 12,
-40039: 
-40039: 
-40039:       not_supported = 95,
-40039: 
-40039: 
-40039: 
-40039:       operation_canceled = 125,
-40039: 
-40039: 
-40039:       operation_in_progress = 115,
-40039:       operation_not_permitted = 1,
-40039:       operation_not_supported = 95,
-40039:       operation_would_block = 11,
-40039: 
-40039: 
-40039:       owner_dead = 130,
-40039: 
-40039: 
-40039:       permission_denied = 13,
-40039: 
-40039: 
-40039:       protocol_error = 71,
-40039: 
-40039: 
-40039:       protocol_not_supported = 93,
-40039:       read_only_file_system = 30,
-40039:       resource_deadlock_would_occur = 35,
-40039:       resource_unavailable_try_again = 11,
-40039:       result_out_of_range = 34,
-40039: 
-40039: 
-40039:       state_not_recoverable = 131,
-40039: 
-40039: 
-40039: 
-40039:       stream_timeout = 62,
-40039: 
-40039: 
-40039: 
-40039:       text_file_busy = 26,
-40039: 
-40039: 
-40039:       timed_out = 110,
-40039:       too_many_files_open_in_system = 23,
-40039:       too_many_files_open = 24,
-40039:       too_many_links = 31,
-40039:       too_many_symbolic_link_levels = 40,
-40039: 
-40039: 
-40039:       value_too_large = 75,
-40039: 
-40039: 
-40039:       wrong_protocol_type = 91
-40039:     };
-40039: 
-40039: 
-40039: }
-40039: # 40 "/usr/include/c++/8/system_error" 2 3
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   class error_code;
-40039:   class error_condition;
-40039:   class system_error;
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_error_code_enum : public false_type { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct is_error_condition_enum : public false_type { };
-40039: 
-40039:   template<>
-40039:     struct is_error_condition_enum<errc>
-40039:     : public true_type { };
-40039: # 71 "/usr/include/c++/8/system_error" 3
-40039:   inline namespace _V2 {
-40039: 
-40039: 
-40039:   class error_category
-40039:   {
-40039:   public:
-40039:     constexpr error_category() noexcept = default;
-40039: 
-40039:     virtual ~error_category();
-40039: 
-40039:     error_category(const error_category&) = delete;
-40039:     error_category& operator=(const error_category&) = delete;
-40039: 
-40039:     virtual const char*
-40039:     name() const noexcept = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   private:
-40039:     __attribute ((__abi_tag__ ("cxx11")))
-40039:     virtual __cow_string
-40039:     _M_message(int) const;
-40039: 
-40039:   public:
-40039:     __attribute ((__abi_tag__ ("cxx11")))
-40039:     virtual string
-40039:     message(int) const = 0;
-40039: # 110 "/usr/include/c++/8/system_error" 3
-40039:   public:
-40039:     virtual error_condition
-40039:     default_error_condition(int __i) const noexcept;
-40039: 
-40039:     virtual bool
-40039:     equivalent(int __i, const error_condition& __cond) const noexcept;
-40039: 
-40039:     virtual bool
-40039:     equivalent(const error_code& __code, int __i) const noexcept;
-40039: 
-40039:     bool
-40039:     operator<(const error_category& __other) const noexcept
-40039:     { return less<const error_category*>()(this, &__other); }
-40039: 
-40039:     bool
-40039:     operator==(const error_category& __other) const noexcept
-40039:     { return this == &__other; }
-40039: 
-40039:     bool
-40039:     operator!=(const error_category& __other) const noexcept
-40039:     { return this != &__other; }
-40039:   };
-40039: 
-40039: 
-40039:   __attribute__ ((__const__)) const error_category& system_category() noexcept;
-40039:   __attribute__ ((__const__)) const error_category& generic_category() noexcept;
-40039: 
-40039:   }
-40039: 
-40039:   error_code make_error_code(errc) noexcept;
-40039: 
-40039:   template<typename _Tp>
-40039:     struct hash;
-40039: 
-40039: 
-40039: 
-40039:   struct error_code
-40039:   {
-40039:     error_code() noexcept
-40039:     : _M_value(0), _M_cat(&system_category()) { }
-40039: 
-40039:     error_code(int __v, const error_category& __cat) noexcept
-40039:     : _M_value(__v), _M_cat(&__cat) { }
-40039: 
-40039:     template<typename _ErrorCodeEnum, typename = typename
-40039:       enable_if<is_error_code_enum<_ErrorCodeEnum>::value>::type>
-40039:       error_code(_ErrorCodeEnum __e) noexcept
-40039:       { *this = make_error_code(__e); }
-40039: 
-40039:     void
-40039:     assign(int __v, const error_category& __cat) noexcept
-40039:     {
-40039:       _M_value = __v;
-40039:       _M_cat = &__cat;
-40039:     }
-40039: 
-40039:     void
-40039:     clear() noexcept
-40039:     { assign(0, system_category()); }
-40039: 
-40039: 
-40039:     template<typename _ErrorCodeEnum>
-40039:       typename enable_if<is_error_code_enum<_ErrorCodeEnum>::value,
-40039:     error_code&>::type
-40039:       operator=(_ErrorCodeEnum __e) noexcept
-40039:       { return *this = make_error_code(__e); }
-40039: 
-40039:     int
-40039:     value() const noexcept { return _M_value; }
-40039: 
-40039:     const error_category&
-40039:     category() const noexcept { return *_M_cat; }
-40039: 
-40039:     error_condition
-40039:     default_error_condition() const noexcept;
-40039: 
-40039:     __attribute ((__abi_tag__ ("cxx11")))
-40039:     string
-40039:     message() const
-40039:     { return category().message(value()); }
-40039: 
-40039:     explicit operator bool() const noexcept
-40039:     { return _M_value != 0; }
-40039: 
-40039: 
-40039:   private:
-40039:     friend class hash<error_code>;
-40039: 
-40039:     int _M_value;
-40039:     const error_category* _M_cat;
-40039:   };
-40039: 
-40039: 
-40039:   inline error_code
-40039:   make_error_code(errc __e) noexcept
-40039:   { return error_code(static_cast<int>(__e), generic_category()); }
-40039: 
-40039:   inline bool
-40039:   operator<(const error_code& __lhs, const error_code& __rhs) noexcept
-40039:   {
-40039:     return (__lhs.category() < __rhs.category()
-40039:      || (__lhs.category() == __rhs.category()
-40039:   && __lhs.value() < __rhs.value()));
-40039:   }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_ostream<_CharT, _Traits>&
-40039:     operator<<(basic_ostream<_CharT, _Traits>& __os, const error_code& __e)
-40039:     { return (__os << __e.category().name() << ':' << __e.value()); }
-40039: 
-40039:   error_condition make_error_condition(errc) noexcept;
-40039: 
-40039: 
-40039: 
-40039:   struct error_condition
-40039:   {
-40039:     error_condition() noexcept
-40039:     : _M_value(0), _M_cat(&generic_category()) { }
-40039: 
-40039:     error_condition(int __v, const error_category& __cat) noexcept
-40039:     : _M_value(__v), _M_cat(&__cat) { }
-40039: 
-40039:     template<typename _ErrorConditionEnum, typename = typename
-40039:   enable_if<is_error_condition_enum<_ErrorConditionEnum>::value>::type>
-40039:       error_condition(_ErrorConditionEnum __e) noexcept
-40039:       { *this = make_error_condition(__e); }
-40039: 
-40039:     void
-40039:     assign(int __v, const error_category& __cat) noexcept
-40039:     {
-40039:       _M_value = __v;
-40039:       _M_cat = &__cat;
-40039:     }
-40039: 
-40039: 
-40039:     template<typename _ErrorConditionEnum>
-40039:       typename enable_if<is_error_condition_enum
-40039:     <_ErrorConditionEnum>::value, error_condition&>::type
-40039:       operator=(_ErrorConditionEnum __e) noexcept
-40039:       { return *this = make_error_condition(__e); }
-40039: 
-40039:     void
-40039:     clear() noexcept
-40039:     { assign(0, generic_category()); }
-40039: 
-40039: 
-40039:     int
-40039:     value() const noexcept { return _M_value; }
-40039: 
-40039:     const error_category&
-40039:     category() const noexcept { return *_M_cat; }
-40039: 
-40039:     __attribute ((__abi_tag__ ("cxx11")))
-40039:     string
-40039:     message() const
-40039:     { return category().message(value()); }
-40039: 
-40039:     explicit operator bool() const noexcept
-40039:     { return _M_value != 0; }
-40039: 
-40039: 
-40039:   private:
-40039:     int _M_value;
-40039:     const error_category* _M_cat;
-40039:   };
-40039: 
-40039: 
-40039:   inline error_condition
-40039:   make_error_condition(errc __e) noexcept
-40039:   { return error_condition(static_cast<int>(__e), generic_category()); }
-40039: 
-40039:   inline bool
-40039:   operator<(const error_condition& __lhs,
-40039:      const error_condition& __rhs) noexcept
-40039:   {
-40039:     return (__lhs.category() < __rhs.category()
-40039:      || (__lhs.category() == __rhs.category()
-40039:   && __lhs.value() < __rhs.value()));
-40039:   }
-40039: 
-40039: 
-40039:   inline bool
-40039:   operator==(const error_code& __lhs, const error_code& __rhs) noexcept
-40039:   { return (__lhs.category() == __rhs.category()
-40039:      && __lhs.value() == __rhs.value()); }
-40039: 
-40039:   inline bool
-40039:   operator==(const error_code& __lhs, const error_condition& __rhs) noexcept
-40039:   {
-40039:     return (__lhs.category().equivalent(__lhs.value(), __rhs)
-40039:      || __rhs.category().equivalent(__lhs, __rhs.value()));
-40039:   }
-40039: 
-40039:   inline bool
-40039:   operator==(const error_condition& __lhs, const error_code& __rhs) noexcept
-40039:   {
-40039:     return (__rhs.category().equivalent(__rhs.value(), __lhs)
-40039:      || __lhs.category().equivalent(__rhs, __lhs.value()));
-40039:   }
-40039: 
-40039:   inline bool
-40039:   operator==(const error_condition& __lhs,
-40039:       const error_condition& __rhs) noexcept
-40039:   {
-40039:     return (__lhs.category() == __rhs.category()
-40039:      && __lhs.value() == __rhs.value());
-40039:   }
-40039: 
-40039:   inline bool
-40039:   operator!=(const error_code& __lhs, const error_code& __rhs) noexcept
-40039:   { return !(__lhs == __rhs); }
-40039: 
-40039:   inline bool
-40039:   operator!=(const error_code& __lhs, const error_condition& __rhs) noexcept
-40039:   { return !(__lhs == __rhs); }
-40039: 
-40039:   inline bool
-40039:   operator!=(const error_condition& __lhs, const error_code& __rhs) noexcept
-40039:   { return !(__lhs == __rhs); }
-40039: 
-40039:   inline bool
-40039:   operator!=(const error_condition& __lhs,
-40039:       const error_condition& __rhs) noexcept
-40039:   { return !(__lhs == __rhs); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   class system_error : public std::runtime_error
-40039:   {
-40039:   private:
-40039:     error_code _M_code;
-40039: 
-40039:   public:
-40039:     system_error(error_code __ec = error_code())
-40039:     : runtime_error(__ec.message()), _M_code(__ec) { }
-40039: 
-40039:     system_error(error_code __ec, const string& __what)
-40039:     : runtime_error(__what + ": " + __ec.message()), _M_code(__ec) { }
-40039: 
-40039:     system_error(error_code __ec, const char* __what)
-40039:     : runtime_error(__what + (": " + __ec.message())), _M_code(__ec) { }
-40039: 
-40039:     system_error(int __v, const error_category& __ecat, const char* __what)
-40039:     : system_error(error_code(__v, __ecat), __what) { }
-40039: 
-40039:     system_error(int __v, const error_category& __ecat)
-40039:     : runtime_error(error_code(__v, __ecat).message()),
-40039:       _M_code(__v, __ecat) { }
-40039: 
-40039:     system_error(int __v, const error_category& __ecat, const string& __what)
-40039:     : runtime_error(__what + ": " + error_code(__v, __ecat).message()),
-40039:       _M_code(__v, __ecat) { }
-40039: 
-40039:     virtual ~system_error() noexcept;
-40039: 
-40039:     const error_code&
-40039:     code() const noexcept { return _M_code; }
-40039:   };
-40039: 
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<>
-40039:     struct hash<error_code>
-40039:     : public __hash_base<size_t, error_code>
-40039:     {
-40039:       size_t
-40039:       operator()(const error_code& __e) const noexcept
-40039:       {
-40039:  const size_t __tmp = std::_Hash_impl::hash(__e._M_value);
-40039:  return std::_Hash_impl::__hash_combine(__e._M_cat, __tmp);
-40039:       }
-40039:     };
-40039: # 414 "/usr/include/c++/8/system_error" 3
-40039: 
-40039: }
-40039: # 47 "/usr/include/c++/8/bits/ios_base.h" 2 3
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   enum _Ios_Fmtflags
-40039:     {
-40039:       _S_boolalpha = 1L << 0,
-40039:       _S_dec = 1L << 1,
-40039:       _S_fixed = 1L << 2,
-40039:       _S_hex = 1L << 3,
-40039:       _S_internal = 1L << 4,
-40039:       _S_left = 1L << 5,
-40039:       _S_oct = 1L << 6,
-40039:       _S_right = 1L << 7,
-40039:       _S_scientific = 1L << 8,
-40039:       _S_showbase = 1L << 9,
-40039:       _S_showpoint = 1L << 10,
-40039:       _S_showpos = 1L << 11,
-40039:       _S_skipws = 1L << 12,
-40039:       _S_unitbuf = 1L << 13,
-40039:       _S_uppercase = 1L << 14,
-40039:       _S_adjustfield = _S_left | _S_right | _S_internal,
-40039:       _S_basefield = _S_dec | _S_oct | _S_hex,
-40039:       _S_floatfield = _S_scientific | _S_fixed,
-40039:       _S_ios_fmtflags_end = 1L << 16,
-40039:       _S_ios_fmtflags_max = 0x7fffffff,
-40039:       _S_ios_fmtflags_min = ~0x7fffffff
-40039:     };
-40039: 
-40039:   inline constexpr _Ios_Fmtflags
-40039:   operator&(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
-40039:   { return _Ios_Fmtflags(static_cast<int>(__a) & static_cast<int>(__b)); }
-40039: 
-40039:   inline constexpr _Ios_Fmtflags
-40039:   operator|(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
-40039:   { return _Ios_Fmtflags(static_cast<int>(__a) | static_cast<int>(__b)); }
-40039: 
-40039:   inline constexpr _Ios_Fmtflags
-40039:   operator^(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
-40039:   { return _Ios_Fmtflags(static_cast<int>(__a) ^ static_cast<int>(__b)); }
-40039: 
-40039:   inline constexpr _Ios_Fmtflags
-40039:   operator~(_Ios_Fmtflags __a)
-40039:   { return _Ios_Fmtflags(~static_cast<int>(__a)); }
-40039: 
-40039:   inline const _Ios_Fmtflags&
-40039:   operator|=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
-40039:   { return __a = __a | __b; }
-40039: 
-40039:   inline const _Ios_Fmtflags&
-40039:   operator&=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
-40039:   { return __a = __a & __b; }
-40039: 
-40039:   inline const _Ios_Fmtflags&
-40039:   operator^=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
-40039:   { return __a = __a ^ __b; }
-40039: 
-40039: 
-40039:   enum _Ios_Openmode
-40039:     {
-40039:       _S_app = 1L << 0,
-40039:       _S_ate = 1L << 1,
-40039:       _S_bin = 1L << 2,
-40039:       _S_in = 1L << 3,
-40039:       _S_out = 1L << 4,
-40039:       _S_trunc = 1L << 5,
-40039:       _S_ios_openmode_end = 1L << 16,
-40039:       _S_ios_openmode_max = 0x7fffffff,
-40039:       _S_ios_openmode_min = ~0x7fffffff
-40039:     };
-40039: 
-40039:   inline constexpr _Ios_Openmode
-40039:   operator&(_Ios_Openmode __a, _Ios_Openmode __b)
-40039:   { return _Ios_Openmode(static_cast<int>(__a) & static_cast<int>(__b)); }
-40039: 
-40039:   inline constexpr _Ios_Openmode
-40039:   operator|(_Ios_Openmode __a, _Ios_Openmode __b)
-40039:   { return _Ios_Openmode(static_cast<int>(__a) | static_cast<int>(__b)); }
-40039: 
-40039:   inline constexpr _Ios_Openmode
-40039:   operator^(_Ios_Openmode __a, _Ios_Openmode __b)
-40039:   { return _Ios_Openmode(static_cast<int>(__a) ^ static_cast<int>(__b)); }
-40039: 
-40039:   inline constexpr _Ios_Openmode
-40039:   operator~(_Ios_Openmode __a)
-40039:   { return _Ios_Openmode(~static_cast<int>(__a)); }
-40039: 
-40039:   inline const _Ios_Openmode&
-40039:   operator|=(_Ios_Openmode& __a, _Ios_Openmode __b)
-40039:   { return __a = __a | __b; }
-40039: 
-40039:   inline const _Ios_Openmode&
-40039:   operator&=(_Ios_Openmode& __a, _Ios_Openmode __b)
-40039:   { return __a = __a & __b; }
-40039: 
-40039:   inline const _Ios_Openmode&
-40039:   operator^=(_Ios_Openmode& __a, _Ios_Openmode __b)
-40039:   { return __a = __a ^ __b; }
-40039: 
-40039: 
-40039:   enum _Ios_Iostate
-40039:     {
-40039:       _S_goodbit = 0,
-40039:       _S_badbit = 1L << 0,
-40039:       _S_eofbit = 1L << 1,
-40039:       _S_failbit = 1L << 2,
-40039:       _S_ios_iostate_end = 1L << 16,
-40039:       _S_ios_iostate_max = 0x7fffffff,
-40039:       _S_ios_iostate_min = ~0x7fffffff
-40039:     };
-40039: 
-40039:   inline constexpr _Ios_Iostate
-40039:   operator&(_Ios_Iostate __a, _Ios_Iostate __b)
-40039:   { return _Ios_Iostate(static_cast<int>(__a) & static_cast<int>(__b)); }
-40039: 
-40039:   inline constexpr _Ios_Iostate
-40039:   operator|(_Ios_Iostate __a, _Ios_Iostate __b)
-40039:   { return _Ios_Iostate(static_cast<int>(__a) | static_cast<int>(__b)); }
-40039: 
-40039:   inline constexpr _Ios_Iostate
-40039:   operator^(_Ios_Iostate __a, _Ios_Iostate __b)
-40039:   { return _Ios_Iostate(static_cast<int>(__a) ^ static_cast<int>(__b)); }
-40039: 
-40039:   inline constexpr _Ios_Iostate
-40039:   operator~(_Ios_Iostate __a)
-40039:   { return _Ios_Iostate(~static_cast<int>(__a)); }
-40039: 
-40039:   inline const _Ios_Iostate&
-40039:   operator|=(_Ios_Iostate& __a, _Ios_Iostate __b)
-40039:   { return __a = __a | __b; }
-40039: 
-40039:   inline const _Ios_Iostate&
-40039:   operator&=(_Ios_Iostate& __a, _Ios_Iostate __b)
-40039:   { return __a = __a & __b; }
-40039: 
-40039:   inline const _Ios_Iostate&
-40039:   operator^=(_Ios_Iostate& __a, _Ios_Iostate __b)
-40039:   { return __a = __a ^ __b; }
-40039: 
-40039: 
-40039:   enum _Ios_Seekdir
-40039:     {
-40039:       _S_beg = 0,
-40039:       _S_cur = 1,
-40039:       _S_end = 2,
-40039:       _S_ios_seekdir_end = 1L << 16
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   enum class io_errc { stream = 1 };
-40039: 
-40039:   template <> struct is_error_code_enum<io_errc> : public true_type { };
-40039: 
-40039:   const error_category& iostream_category() noexcept;
-40039: 
-40039:   inline error_code
-40039:   make_error_code(io_errc __e) noexcept
-40039:   { return error_code(static_cast<int>(__e), iostream_category()); }
-40039: 
-40039:   inline error_condition
-40039:   make_error_condition(io_errc __e) noexcept
-40039:   { return error_condition(static_cast<int>(__e), iostream_category()); }
-40039: # 228 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:   class ios_base
-40039:   {
-40039: # 246 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:   public:
-40039: # 255 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:     class __attribute ((__abi_tag__ ("cxx11"))) failure : public system_error
-40039:     {
-40039:     public:
-40039:       explicit
-40039:       failure(const string& __str);
-40039: 
-40039: 
-40039:       explicit
-40039:       failure(const string&, const error_code&);
-40039: 
-40039:       explicit
-40039:       failure(const char*, const error_code& = io_errc::stream);
-40039: 
-40039: 
-40039:       virtual
-40039:       ~failure() throw();
-40039: 
-40039:       virtual const char*
-40039:       what() const throw();
-40039:     };
-40039: # 323 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:     typedef _Ios_Fmtflags fmtflags;
-40039: 
-40039: 
-40039:     static const fmtflags boolalpha = _S_boolalpha;
-40039: 
-40039: 
-40039:     static const fmtflags dec = _S_dec;
-40039: 
-40039: 
-40039:     static const fmtflags fixed = _S_fixed;
-40039: 
-40039: 
-40039:     static const fmtflags hex = _S_hex;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     static const fmtflags internal = _S_internal;
-40039: 
-40039: 
-40039: 
-40039:     static const fmtflags left = _S_left;
-40039: 
-40039: 
-40039:     static const fmtflags oct = _S_oct;
-40039: 
-40039: 
-40039: 
-40039:     static const fmtflags right = _S_right;
-40039: 
-40039: 
-40039:     static const fmtflags scientific = _S_scientific;
-40039: 
-40039: 
-40039: 
-40039:     static const fmtflags showbase = _S_showbase;
-40039: 
-40039: 
-40039: 
-40039:     static const fmtflags showpoint = _S_showpoint;
-40039: 
-40039: 
-40039:     static const fmtflags showpos = _S_showpos;
-40039: 
-40039: 
-40039:     static const fmtflags skipws = _S_skipws;
-40039: 
-40039: 
-40039:     static const fmtflags unitbuf = _S_unitbuf;
-40039: 
-40039: 
-40039: 
-40039:     static const fmtflags uppercase = _S_uppercase;
-40039: 
-40039: 
-40039:     static const fmtflags adjustfield = _S_adjustfield;
-40039: 
-40039: 
-40039:     static const fmtflags basefield = _S_basefield;
-40039: 
-40039: 
-40039:     static const fmtflags floatfield = _S_floatfield;
-40039: # 398 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:     typedef _Ios_Iostate iostate;
-40039: 
-40039: 
-40039: 
-40039:     static const iostate badbit = _S_badbit;
-40039: 
-40039: 
-40039:     static const iostate eofbit = _S_eofbit;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     static const iostate failbit = _S_failbit;
-40039: 
-40039: 
-40039:     static const iostate goodbit = _S_goodbit;
-40039: # 429 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:     typedef _Ios_Openmode openmode;
-40039: 
-40039: 
-40039:     static const openmode app = _S_app;
-40039: 
-40039: 
-40039:     static const openmode ate = _S_ate;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     static const openmode binary = _S_bin;
-40039: 
-40039: 
-40039:     static const openmode in = _S_in;
-40039: 
-40039: 
-40039:     static const openmode out = _S_out;
-40039: 
-40039: 
-40039:     static const openmode trunc = _S_trunc;
-40039: # 461 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:     typedef _Ios_Seekdir seekdir;
-40039: 
-40039: 
-40039:     static const seekdir beg = _S_beg;
-40039: 
-40039: 
-40039:     static const seekdir cur = _S_cur;
-40039: 
-40039: 
-40039:     static const seekdir end = _S_end;
-40039: 
-40039: 
-40039: 
-40039:     typedef int io_state;
-40039:     typedef int open_mode;
-40039:     typedef int seek_dir;
-40039: 
-40039:     typedef std::streampos streampos;
-40039:     typedef std::streamoff streamoff;
-40039: # 489 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:     enum event
-40039:     {
-40039:       erase_event,
-40039:       imbue_event,
-40039:       copyfmt_event
-40039:     };
-40039: # 506 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:     typedef void (*event_callback) (event __e, ios_base& __b, int __i);
-40039: # 518 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:     void
-40039:     register_callback(event_callback __fn, int __index);
-40039: 
-40039:   protected:
-40039:     streamsize _M_precision;
-40039:     streamsize _M_width;
-40039:     fmtflags _M_flags;
-40039:     iostate _M_exception;
-40039:     iostate _M_streambuf_state;
-40039: 
-40039: 
-40039: 
-40039:     struct _Callback_list
-40039:     {
-40039: 
-40039:       _Callback_list* _M_next;
-40039:       ios_base::event_callback _M_fn;
-40039:       int _M_index;
-40039:       _Atomic_word _M_refcount;
-40039: 
-40039:       _Callback_list(ios_base::event_callback __fn, int __index,
-40039:        _Callback_list* __cb)
-40039:       : _M_next(__cb), _M_fn(__fn), _M_index(__index), _M_refcount(0) { }
-40039: 
-40039:       void
-40039:       _M_add_reference() { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); }
-40039: 
-40039: 
-40039:       int
-40039:       _M_remove_reference()
-40039:       {
-40039: 
-40039:         ;
-40039:         int __res = __gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1);
-40039:         if (__res == 0)
-40039:           {
-40039:             ;
-40039:           }
-40039:         return __res;
-40039:       }
-40039:     };
-40039: 
-40039:      _Callback_list* _M_callbacks;
-40039: 
-40039:     void
-40039:     _M_call_callbacks(event __ev) throw();
-40039: 
-40039:     void
-40039:     _M_dispose_callbacks(void) throw();
-40039: 
-40039: 
-40039:     struct _Words
-40039:     {
-40039:       void* _M_pword;
-40039:       long _M_iword;
-40039:       _Words() : _M_pword(0), _M_iword(0) { }
-40039:     };
-40039: 
-40039: 
-40039:     _Words _M_word_zero;
-40039: 
-40039: 
-40039: 
-40039:     enum { _S_local_word_size = 8 };
-40039:     _Words _M_local_word[_S_local_word_size];
-40039: 
-40039: 
-40039:     int _M_word_size;
-40039:     _Words* _M_word;
-40039: 
-40039:     _Words&
-40039:     _M_grow_words(int __index, bool __iword);
-40039: 
-40039: 
-40039:     locale _M_ios_locale;
-40039: 
-40039:     void
-40039:     _M_init() throw();
-40039: 
-40039:   public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     class Init
-40039:     {
-40039:       friend class ios_base;
-40039:     public:
-40039:       Init();
-40039:       ~Init();
-40039: 
-40039:     private:
-40039:       static _Atomic_word _S_refcount;
-40039:       static bool _S_synced_with_stdio;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     fmtflags
-40039:     flags() const
-40039:     { return _M_flags; }
-40039: # 631 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:     fmtflags
-40039:     flags(fmtflags __fmtfl)
-40039:     {
-40039:       fmtflags __old = _M_flags;
-40039:       _M_flags = __fmtfl;
-40039:       return __old;
-40039:     }
-40039: # 647 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:     fmtflags
-40039:     setf(fmtflags __fmtfl)
-40039:     {
-40039:       fmtflags __old = _M_flags;
-40039:       _M_flags |= __fmtfl;
-40039:       return __old;
-40039:     }
-40039: # 664 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:     fmtflags
-40039:     setf(fmtflags __fmtfl, fmtflags __mask)
-40039:     {
-40039:       fmtflags __old = _M_flags;
-40039:       _M_flags &= ~__mask;
-40039:       _M_flags |= (__fmtfl & __mask);
-40039:       return __old;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     void
-40039:     unsetf(fmtflags __mask)
-40039:     { _M_flags &= ~__mask; }
-40039: # 690 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:     streamsize
-40039:     precision() const
-40039:     { return _M_precision; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     streamsize
-40039:     precision(streamsize __prec)
-40039:     {
-40039:       streamsize __old = _M_precision;
-40039:       _M_precision = __prec;
-40039:       return __old;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     streamsize
-40039:     width() const
-40039:     { return _M_width; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     streamsize
-40039:     width(streamsize __wide)
-40039:     {
-40039:       streamsize __old = _M_width;
-40039:       _M_width = __wide;
-40039:       return __old;
-40039:     }
-40039: # 741 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:     static bool
-40039:     sync_with_stdio(bool __sync = true);
-40039: # 753 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:     locale
-40039:     imbue(const locale& __loc) throw();
-40039: # 764 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:     locale
-40039:     getloc() const
-40039:     { return _M_ios_locale; }
-40039: # 775 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:     const locale&
-40039:     _M_getloc() const
-40039:     { return _M_ios_locale; }
-40039: # 794 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:     static int
-40039:     xalloc() throw();
-40039: # 810 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:     long&
-40039:     iword(int __ix)
-40039:     {
-40039:       _Words& __word = (__ix < _M_word_size)
-40039:    ? _M_word[__ix] : _M_grow_words(__ix, true);
-40039:       return __word._M_iword;
-40039:     }
-40039: # 831 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:     void*&
-40039:     pword(int __ix)
-40039:     {
-40039:       _Words& __word = (__ix < _M_word_size)
-40039:    ? _M_word[__ix] : _M_grow_words(__ix, false);
-40039:       return __word._M_pword;
-40039:     }
-40039: # 848 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:     virtual ~ios_base();
-40039: 
-40039:   protected:
-40039:     ios_base() throw ();
-40039: # 862 "/usr/include/c++/8/bits/ios_base.h" 3
-40039:   public:
-40039:     ios_base(const ios_base&) = delete;
-40039: 
-40039:     ios_base&
-40039:     operator=(const ios_base&) = delete;
-40039: 
-40039:   protected:
-40039:     void
-40039:     _M_move(ios_base&) noexcept;
-40039: 
-40039:     void
-40039:     _M_swap(ios_base& __rhs) noexcept;
-40039: 
-40039:   };
-40039: 
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   boolalpha(ios_base& __base)
-40039:   {
-40039:     __base.setf(ios_base::boolalpha);
-40039:     return __base;
-40039:   }
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   noboolalpha(ios_base& __base)
-40039:   {
-40039:     __base.unsetf(ios_base::boolalpha);
-40039:     return __base;
-40039:   }
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   showbase(ios_base& __base)
-40039:   {
-40039:     __base.setf(ios_base::showbase);
-40039:     return __base;
-40039:   }
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   noshowbase(ios_base& __base)
-40039:   {
-40039:     __base.unsetf(ios_base::showbase);
-40039:     return __base;
-40039:   }
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   showpoint(ios_base& __base)
-40039:   {
-40039:     __base.setf(ios_base::showpoint);
-40039:     return __base;
-40039:   }
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   noshowpoint(ios_base& __base)
-40039:   {
-40039:     __base.unsetf(ios_base::showpoint);
-40039:     return __base;
-40039:   }
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   showpos(ios_base& __base)
-40039:   {
-40039:     __base.setf(ios_base::showpos);
-40039:     return __base;
-40039:   }
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   noshowpos(ios_base& __base)
-40039:   {
-40039:     __base.unsetf(ios_base::showpos);
-40039:     return __base;
-40039:   }
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   skipws(ios_base& __base)
-40039:   {
-40039:     __base.setf(ios_base::skipws);
-40039:     return __base;
-40039:   }
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   noskipws(ios_base& __base)
-40039:   {
-40039:     __base.unsetf(ios_base::skipws);
-40039:     return __base;
-40039:   }
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   uppercase(ios_base& __base)
-40039:   {
-40039:     __base.setf(ios_base::uppercase);
-40039:     return __base;
-40039:   }
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   nouppercase(ios_base& __base)
-40039:   {
-40039:     __base.unsetf(ios_base::uppercase);
-40039:     return __base;
-40039:   }
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   unitbuf(ios_base& __base)
-40039:   {
-40039:      __base.setf(ios_base::unitbuf);
-40039:      return __base;
-40039:   }
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   nounitbuf(ios_base& __base)
-40039:   {
-40039:      __base.unsetf(ios_base::unitbuf);
-40039:      return __base;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   internal(ios_base& __base)
-40039:   {
-40039:      __base.setf(ios_base::internal, ios_base::adjustfield);
-40039:      return __base;
-40039:   }
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   left(ios_base& __base)
-40039:   {
-40039:     __base.setf(ios_base::left, ios_base::adjustfield);
-40039:     return __base;
-40039:   }
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   right(ios_base& __base)
-40039:   {
-40039:     __base.setf(ios_base::right, ios_base::adjustfield);
-40039:     return __base;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   dec(ios_base& __base)
-40039:   {
-40039:     __base.setf(ios_base::dec, ios_base::basefield);
-40039:     return __base;
-40039:   }
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   hex(ios_base& __base)
-40039:   {
-40039:     __base.setf(ios_base::hex, ios_base::basefield);
-40039:     return __base;
-40039:   }
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   oct(ios_base& __base)
-40039:   {
-40039:     __base.setf(ios_base::oct, ios_base::basefield);
-40039:     return __base;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   fixed(ios_base& __base)
-40039:   {
-40039:     __base.setf(ios_base::fixed, ios_base::floatfield);
-40039:     return __base;
-40039:   }
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   scientific(ios_base& __base)
-40039:   {
-40039:     __base.setf(ios_base::scientific, ios_base::floatfield);
-40039:     return __base;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   hexfloat(ios_base& __base)
-40039:   {
-40039:     __base.setf(ios_base::fixed | ios_base::scientific, ios_base::floatfield);
-40039:     return __base;
-40039:   }
-40039: 
-40039: 
-40039:   inline ios_base&
-40039:   defaultfloat(ios_base& __base)
-40039:   {
-40039:     __base.unsetf(ios_base::floatfield);
-40039:     return __base;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 43 "/usr/include/c++/8/ios" 2 3
-40039: # 1 "/usr/include/c++/8/streambuf" 1 3
-40039: # 36 "/usr/include/c++/8/streambuf" 3
-40039:        
-40039: # 37 "/usr/include/c++/8/streambuf" 3
-40039: # 45 "/usr/include/c++/8/streambuf" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     streamsize
-40039:     __copy_streambufs_eof(basic_streambuf<_CharT, _Traits>*,
-40039:      basic_streambuf<_CharT, _Traits>*, bool&);
-40039: # 121 "/usr/include/c++/8/streambuf" 3
-40039:   template<typename _CharT, typename _Traits>
-40039:     class basic_streambuf
-40039:     {
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef _Traits traits_type;
-40039:       typedef typename traits_type::int_type int_type;
-40039:       typedef typename traits_type::pos_type pos_type;
-40039:       typedef typename traits_type::off_type off_type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       typedef basic_streambuf<char_type, traits_type> __streambuf_type;
-40039: 
-40039: 
-40039:       friend class basic_ios<char_type, traits_type>;
-40039:       friend class basic_istream<char_type, traits_type>;
-40039:       friend class basic_ostream<char_type, traits_type>;
-40039:       friend class istreambuf_iterator<char_type, traits_type>;
-40039:       friend class ostreambuf_iterator<char_type, traits_type>;
-40039: 
-40039:       friend streamsize
-40039:       __copy_streambufs_eof<>(basic_streambuf*, basic_streambuf*, bool&);
-40039: 
-40039:       template<bool _IsMove, typename _CharT2>
-40039:         friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
-40039:             _CharT2*>::__type
-40039:         __copy_move_a2(istreambuf_iterator<_CharT2>,
-40039:          istreambuf_iterator<_CharT2>, _CharT2*);
-40039: 
-40039:       template<typename _CharT2>
-40039:         friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
-40039:       istreambuf_iterator<_CharT2> >::__type
-40039:         find(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>,
-40039:       const _CharT2&);
-40039: 
-40039:       template<typename _CharT2, typename _Distance>
-40039:         friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
-40039:             void>::__type
-40039:         advance(istreambuf_iterator<_CharT2>&, _Distance);
-40039: 
-40039:       template<typename _CharT2, typename _Traits2>
-40039:         friend basic_istream<_CharT2, _Traits2>&
-40039:         operator>>(basic_istream<_CharT2, _Traits2>&, _CharT2*);
-40039: 
-40039:       template<typename _CharT2, typename _Traits2, typename _Alloc>
-40039:         friend basic_istream<_CharT2, _Traits2>&
-40039:         operator>>(basic_istream<_CharT2, _Traits2>&,
-40039:      basic_string<_CharT2, _Traits2, _Alloc>&);
-40039: 
-40039:       template<typename _CharT2, typename _Traits2, typename _Alloc>
-40039:         friend basic_istream<_CharT2, _Traits2>&
-40039:         getline(basic_istream<_CharT2, _Traits2>&,
-40039:   basic_string<_CharT2, _Traits2, _Alloc>&, _CharT2);
-40039: 
-40039:     protected:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       char_type* _M_in_beg;
-40039:       char_type* _M_in_cur;
-40039:       char_type* _M_in_end;
-40039:       char_type* _M_out_beg;
-40039:       char_type* _M_out_cur;
-40039:       char_type* _M_out_end;
-40039: 
-40039: 
-40039:       locale _M_buf_locale;
-40039: 
-40039:   public:
-40039: 
-40039:       virtual
-40039:       ~basic_streambuf()
-40039:       { }
-40039: # 215 "/usr/include/c++/8/streambuf" 3
-40039:       locale
-40039:       pubimbue(const locale& __loc)
-40039:       {
-40039:  locale __tmp(this->getloc());
-40039:  this->imbue(__loc);
-40039:  _M_buf_locale = __loc;
-40039:  return __tmp;
-40039:       }
-40039: # 232 "/usr/include/c++/8/streambuf" 3
-40039:       locale
-40039:       getloc() const
-40039:       { return _M_buf_locale; }
-40039: # 245 "/usr/include/c++/8/streambuf" 3
-40039:       basic_streambuf*
-40039:       pubsetbuf(char_type* __s, streamsize __n)
-40039:       { return this->setbuf(__s, __n); }
-40039: # 257 "/usr/include/c++/8/streambuf" 3
-40039:       pos_type
-40039:       pubseekoff(off_type __off, ios_base::seekdir __way,
-40039:    ios_base::openmode __mode = ios_base::in | ios_base::out)
-40039:       { return this->seekoff(__off, __way, __mode); }
-40039: # 269 "/usr/include/c++/8/streambuf" 3
-40039:       pos_type
-40039:       pubseekpos(pos_type __sp,
-40039:    ios_base::openmode __mode = ios_base::in | ios_base::out)
-40039:       { return this->seekpos(__sp, __mode); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       int
-40039:       pubsync() { return this->sync(); }
-40039: # 290 "/usr/include/c++/8/streambuf" 3
-40039:       streamsize
-40039:       in_avail()
-40039:       {
-40039:  const streamsize __ret = this->egptr() - this->gptr();
-40039:  return __ret ? __ret : this->showmanyc();
-40039:       }
-40039: # 304 "/usr/include/c++/8/streambuf" 3
-40039:       int_type
-40039:       snextc()
-40039:       {
-40039:  int_type __ret = traits_type::eof();
-40039:  if (__builtin_expect(!traits_type::eq_int_type(this->sbumpc(),
-40039:              __ret), true))
-40039:    __ret = this->sgetc();
-40039:  return __ret;
-40039:       }
-40039: # 322 "/usr/include/c++/8/streambuf" 3
-40039:       int_type
-40039:       sbumpc()
-40039:       {
-40039:  int_type __ret;
-40039:  if (__builtin_expect(this->gptr() < this->egptr(), true))
-40039:    {
-40039:      __ret = traits_type::to_int_type(*this->gptr());
-40039:      this->gbump(1);
-40039:    }
-40039:  else
-40039:    __ret = this->uflow();
-40039:  return __ret;
-40039:       }
-40039: # 344 "/usr/include/c++/8/streambuf" 3
-40039:       int_type
-40039:       sgetc()
-40039:       {
-40039:  int_type __ret;
-40039:  if (__builtin_expect(this->gptr() < this->egptr(), true))
-40039:    __ret = traits_type::to_int_type(*this->gptr());
-40039:  else
-40039:    __ret = this->underflow();
-40039:  return __ret;
-40039:       }
-40039: # 363 "/usr/include/c++/8/streambuf" 3
-40039:       streamsize
-40039:       sgetn(char_type* __s, streamsize __n)
-40039:       { return this->xsgetn(__s, __n); }
-40039: # 378 "/usr/include/c++/8/streambuf" 3
-40039:       int_type
-40039:       sputbackc(char_type __c)
-40039:       {
-40039:  int_type __ret;
-40039:  const bool __testpos = this->eback() < this->gptr();
-40039:  if (__builtin_expect(!__testpos ||
-40039:         !traits_type::eq(__c, this->gptr()[-1]), false))
-40039:    __ret = this->pbackfail(traits_type::to_int_type(__c));
-40039:  else
-40039:    {
-40039:      this->gbump(-1);
-40039:      __ret = traits_type::to_int_type(*this->gptr());
-40039:    }
-40039:  return __ret;
-40039:       }
-40039: # 403 "/usr/include/c++/8/streambuf" 3
-40039:       int_type
-40039:       sungetc()
-40039:       {
-40039:  int_type __ret;
-40039:  if (__builtin_expect(this->eback() < this->gptr(), true))
-40039:    {
-40039:      this->gbump(-1);
-40039:      __ret = traits_type::to_int_type(*this->gptr());
-40039:    }
-40039:  else
-40039:    __ret = this->pbackfail();
-40039:  return __ret;
-40039:       }
-40039: # 430 "/usr/include/c++/8/streambuf" 3
-40039:       int_type
-40039:       sputc(char_type __c)
-40039:       {
-40039:  int_type __ret;
-40039:  if (__builtin_expect(this->pptr() < this->epptr(), true))
-40039:    {
-40039:      *this->pptr() = __c;
-40039:      this->pbump(1);
-40039:      __ret = traits_type::to_int_type(__c);
-40039:    }
-40039:  else
-40039:    __ret = this->overflow(traits_type::to_int_type(__c));
-40039:  return __ret;
-40039:       }
-40039: # 456 "/usr/include/c++/8/streambuf" 3
-40039:       streamsize
-40039:       sputn(const char_type* __s, streamsize __n)
-40039:       { return this->xsputn(__s, __n); }
-40039: 
-40039:     protected:
-40039: # 470 "/usr/include/c++/8/streambuf" 3
-40039:       basic_streambuf()
-40039:       : _M_in_beg(0), _M_in_cur(0), _M_in_end(0),
-40039:       _M_out_beg(0), _M_out_cur(0), _M_out_end(0),
-40039:       _M_buf_locale(locale())
-40039:       { }
-40039: # 488 "/usr/include/c++/8/streambuf" 3
-40039:       char_type*
-40039:       eback() const { return _M_in_beg; }
-40039: 
-40039:       char_type*
-40039:       gptr() const { return _M_in_cur; }
-40039: 
-40039:       char_type*
-40039:       egptr() const { return _M_in_end; }
-40039: # 504 "/usr/include/c++/8/streambuf" 3
-40039:       void
-40039:       gbump(int __n) { _M_in_cur += __n; }
-40039: # 515 "/usr/include/c++/8/streambuf" 3
-40039:       void
-40039:       setg(char_type* __gbeg, char_type* __gnext, char_type* __gend)
-40039:       {
-40039:  _M_in_beg = __gbeg;
-40039:  _M_in_cur = __gnext;
-40039:  _M_in_end = __gend;
-40039:       }
-40039: # 535 "/usr/include/c++/8/streambuf" 3
-40039:       char_type*
-40039:       pbase() const { return _M_out_beg; }
-40039: 
-40039:       char_type*
-40039:       pptr() const { return _M_out_cur; }
-40039: 
-40039:       char_type*
-40039:       epptr() const { return _M_out_end; }
-40039: # 551 "/usr/include/c++/8/streambuf" 3
-40039:       void
-40039:       pbump(int __n) { _M_out_cur += __n; }
-40039: # 561 "/usr/include/c++/8/streambuf" 3
-40039:       void
-40039:       setp(char_type* __pbeg, char_type* __pend)
-40039:       {
-40039:  _M_out_beg = _M_out_cur = __pbeg;
-40039:  _M_out_end = __pend;
-40039:       }
-40039: # 582 "/usr/include/c++/8/streambuf" 3
-40039:       virtual void
-40039:       imbue(const locale& __loc __attribute__ ((__unused__)))
-40039:       { }
-40039: # 597 "/usr/include/c++/8/streambuf" 3
-40039:       virtual basic_streambuf<char_type,_Traits>*
-40039:       setbuf(char_type*, streamsize)
-40039:       { return this; }
-40039: # 608 "/usr/include/c++/8/streambuf" 3
-40039:       virtual pos_type
-40039:       seekoff(off_type, ios_base::seekdir,
-40039:        ios_base::openmode = ios_base::in | ios_base::out)
-40039:       { return pos_type(off_type(-1)); }
-40039: # 620 "/usr/include/c++/8/streambuf" 3
-40039:       virtual pos_type
-40039:       seekpos(pos_type,
-40039:        ios_base::openmode = ios_base::in | ios_base::out)
-40039:       { return pos_type(off_type(-1)); }
-40039: # 633 "/usr/include/c++/8/streambuf" 3
-40039:       virtual int
-40039:       sync() { return 0; }
-40039: # 655 "/usr/include/c++/8/streambuf" 3
-40039:       virtual streamsize
-40039:       showmanyc() { return 0; }
-40039: # 671 "/usr/include/c++/8/streambuf" 3
-40039:       virtual streamsize
-40039:       xsgetn(char_type* __s, streamsize __n);
-40039: # 693 "/usr/include/c++/8/streambuf" 3
-40039:       virtual int_type
-40039:       underflow()
-40039:       { return traits_type::eof(); }
-40039: # 706 "/usr/include/c++/8/streambuf" 3
-40039:       virtual int_type
-40039:       uflow()
-40039:       {
-40039:  int_type __ret = traits_type::eof();
-40039:  const bool __testeof = traits_type::eq_int_type(this->underflow(),
-40039:        __ret);
-40039:  if (!__testeof)
-40039:    {
-40039:      __ret = traits_type::to_int_type(*this->gptr());
-40039:      this->gbump(1);
-40039:    }
-40039:  return __ret;
-40039:       }
-40039: # 730 "/usr/include/c++/8/streambuf" 3
-40039:       virtual int_type
-40039:       pbackfail(int_type __c __attribute__ ((__unused__)) = traits_type::eof())
-40039:       { return traits_type::eof(); }
-40039: # 748 "/usr/include/c++/8/streambuf" 3
-40039:       virtual streamsize
-40039:       xsputn(const char_type* __s, streamsize __n);
-40039: # 774 "/usr/include/c++/8/streambuf" 3
-40039:       virtual int_type
-40039:       overflow(int_type __c __attribute__ ((__unused__)) = traits_type::eof())
-40039:       { return traits_type::eof(); }
-40039: 
-40039: 
-40039: 
-40039:     public:
-40039: # 790 "/usr/include/c++/8/streambuf" 3
-40039:       [[__deprecated__("stossc is deprecated, use sbumpc instead")]]
-40039: 
-40039:       void
-40039:       stossc()
-40039:       {
-40039:  if (this->gptr() < this->egptr())
-40039:    this->gbump(1);
-40039:  else
-40039:    this->uflow();
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       __safe_gbump(streamsize __n) { _M_in_cur += __n; }
-40039: 
-40039:       void
-40039:       __safe_pbump(streamsize __n) { _M_out_cur += __n; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     protected:
-40039: 
-40039:       basic_streambuf(const basic_streambuf&);
-40039: 
-40039:       basic_streambuf&
-40039:       operator=(const basic_streambuf&);
-40039: 
-40039: 
-40039:       void
-40039:       swap(basic_streambuf& __sb)
-40039:       {
-40039:  std::swap(_M_in_beg, __sb._M_in_beg);
-40039:  std::swap(_M_in_cur, __sb._M_in_cur);
-40039:  std::swap(_M_in_end, __sb._M_in_end);
-40039:  std::swap(_M_out_beg, __sb._M_out_beg);
-40039:  std::swap(_M_out_cur, __sb._M_out_cur);
-40039:  std::swap(_M_out_end, __sb._M_out_end);
-40039:  std::swap(_M_buf_locale, __sb._M_buf_locale);
-40039:       }
-40039: 
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     std::basic_streambuf<_CharT, _Traits>::
-40039:     basic_streambuf(const basic_streambuf&) = default;
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     std::basic_streambuf<_CharT, _Traits>&
-40039:     std::basic_streambuf<_CharT, _Traits>::
-40039:     operator=(const basic_streambuf&) = default;
-40039: 
-40039: 
-40039: 
-40039:   template<>
-40039:     streamsize
-40039:     __copy_streambufs_eof(basic_streambuf<char>* __sbin,
-40039:      basic_streambuf<char>* __sbout, bool& __ineof);
-40039: 
-40039:   template<>
-40039:     streamsize
-40039:     __copy_streambufs_eof(basic_streambuf<wchar_t>* __sbin,
-40039:      basic_streambuf<wchar_t>* __sbout, bool& __ineof);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/streambuf.tcc" 1 3
-40039: # 37 "/usr/include/c++/8/bits/streambuf.tcc" 3
-40039:        
-40039: # 38 "/usr/include/c++/8/bits/streambuf.tcc" 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     streamsize
-40039:     basic_streambuf<_CharT, _Traits>::
-40039:     xsgetn(char_type* __s, streamsize __n)
-40039:     {
-40039:       streamsize __ret = 0;
-40039:       while (__ret < __n)
-40039:  {
-40039:    const streamsize __buf_len = this->egptr() - this->gptr();
-40039:    if (__buf_len)
-40039:      {
-40039:        const streamsize __remaining = __n - __ret;
-40039:        const streamsize __len = std::min(__buf_len, __remaining);
-40039:        traits_type::copy(__s, this->gptr(), __len);
-40039:        __ret += __len;
-40039:        __s += __len;
-40039:        this->__safe_gbump(__len);
-40039:      }
-40039: 
-40039:    if (__ret < __n)
-40039:      {
-40039:        const int_type __c = this->uflow();
-40039:        if (!traits_type::eq_int_type(__c, traits_type::eof()))
-40039:   {
-40039:     traits_type::assign(*__s++, traits_type::to_char_type(__c));
-40039:     ++__ret;
-40039:   }
-40039:        else
-40039:   break;
-40039:      }
-40039:  }
-40039:       return __ret;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     streamsize
-40039:     basic_streambuf<_CharT, _Traits>::
-40039:     xsputn(const char_type* __s, streamsize __n)
-40039:     {
-40039:       streamsize __ret = 0;
-40039:       while (__ret < __n)
-40039:  {
-40039:    const streamsize __buf_len = this->epptr() - this->pptr();
-40039:    if (__buf_len)
-40039:      {
-40039:        const streamsize __remaining = __n - __ret;
-40039:        const streamsize __len = std::min(__buf_len, __remaining);
-40039:        traits_type::copy(this->pptr(), __s, __len);
-40039:        __ret += __len;
-40039:        __s += __len;
-40039:        this->__safe_pbump(__len);
-40039:      }
-40039: 
-40039:    if (__ret < __n)
-40039:      {
-40039:        int_type __c = this->overflow(traits_type::to_int_type(*__s));
-40039:        if (!traits_type::eq_int_type(__c, traits_type::eof()))
-40039:   {
-40039:     ++__ret;
-40039:     ++__s;
-40039:   }
-40039:        else
-40039:   break;
-40039:      }
-40039:  }
-40039:       return __ret;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     streamsize
-40039:     __copy_streambufs_eof(basic_streambuf<_CharT, _Traits>* __sbin,
-40039:      basic_streambuf<_CharT, _Traits>* __sbout,
-40039:      bool& __ineof)
-40039:     {
-40039:       streamsize __ret = 0;
-40039:       __ineof = true;
-40039:       typename _Traits::int_type __c = __sbin->sgetc();
-40039:       while (!_Traits::eq_int_type(__c, _Traits::eof()))
-40039:  {
-40039:    __c = __sbout->sputc(_Traits::to_char_type(__c));
-40039:    if (_Traits::eq_int_type(__c, _Traits::eof()))
-40039:      {
-40039:        __ineof = false;
-40039:        break;
-40039:      }
-40039:    ++__ret;
-40039:    __c = __sbin->snextc();
-40039:  }
-40039:       return __ret;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     inline streamsize
-40039:     __copy_streambufs(basic_streambuf<_CharT, _Traits>* __sbin,
-40039:         basic_streambuf<_CharT, _Traits>* __sbout)
-40039:     {
-40039:       bool __ineof;
-40039:       return __copy_streambufs_eof(__sbin, __sbout, __ineof);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   extern template class basic_streambuf<char>;
-40039:   extern template
-40039:     streamsize
-40039:     __copy_streambufs(basic_streambuf<char>*,
-40039:         basic_streambuf<char>*);
-40039:   extern template
-40039:     streamsize
-40039:     __copy_streambufs_eof(basic_streambuf<char>*,
-40039:      basic_streambuf<char>*, bool&);
-40039: 
-40039: 
-40039:   extern template class basic_streambuf<wchar_t>;
-40039:   extern template
-40039:     streamsize
-40039:     __copy_streambufs(basic_streambuf<wchar_t>*,
-40039:         basic_streambuf<wchar_t>*);
-40039:   extern template
-40039:     streamsize
-40039:     __copy_streambufs_eof(basic_streambuf<wchar_t>*,
-40039:      basic_streambuf<wchar_t>*, bool&);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 863 "/usr/include/c++/8/streambuf" 2 3
-40039: # 44 "/usr/include/c++/8/ios" 2 3
-40039: # 1 "/usr/include/c++/8/bits/basic_ios.h" 1 3
-40039: # 33 "/usr/include/c++/8/bits/basic_ios.h" 3
-40039:        
-40039: # 34 "/usr/include/c++/8/bits/basic_ios.h" 3
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/locale_facets.h" 1 3
-40039: # 37 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:        
-40039: # 38 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039: 
-40039: # 1 "/usr/include/c++/8/cwctype" 1 3
-40039: # 39 "/usr/include/c++/8/cwctype" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/cwctype" 3
-40039: # 50 "/usr/include/c++/8/cwctype" 3
-40039: # 1 "/usr/include/wctype.h" 1 3 4
-40039: # 38 "/usr/include/wctype.h" 3 4
-40039: # 1 "/usr/include/x86_64-linux-gnu/bits/wctype-wchar.h" 1 3 4
-40039: # 38 "/usr/include/x86_64-linux-gnu/bits/wctype-wchar.h" 3 4
-40039: typedef unsigned long int wctype_t;
-40039: # 56 "/usr/include/x86_64-linux-gnu/bits/wctype-wchar.h" 3 4
-40039: enum
-40039: {
-40039:   __ISwupper = 0,
-40039:   __ISwlower = 1,
-40039:   __ISwalpha = 2,
-40039:   __ISwdigit = 3,
-40039:   __ISwxdigit = 4,
-40039:   __ISwspace = 5,
-40039:   __ISwprint = 6,
-40039:   __ISwgraph = 7,
-40039:   __ISwblank = 8,
-40039:   __ISwcntrl = 9,
-40039:   __ISwpunct = 10,
-40039:   __ISwalnum = 11,
-40039: 
-40039:   _ISwupper = ((__ISwupper) < 8 ? (int) ((1UL << (__ISwupper)) << 24) : ((__ISwupper) < 16 ? (int) ((1UL << (__ISwupper)) << 8) : ((__ISwupper) < 24 ? (int) ((1UL << (__ISwupper)) >> 8) : (int) ((1UL << (__ISwupper)) >> 24)))),
-40039:   _ISwlower = ((__ISwlower) < 8 ? (int) ((1UL << (__ISwlower)) << 24) : ((__ISwlower) < 16 ? (int) ((1UL << (__ISwlower)) << 8) : ((__ISwlower) < 24 ? (int) ((1UL << (__ISwlower)) >> 8) : (int) ((1UL << (__ISwlower)) >> 24)))),
-40039:   _ISwalpha = ((__ISwalpha) < 8 ? (int) ((1UL << (__ISwalpha)) << 24) : ((__ISwalpha) < 16 ? (int) ((1UL << (__ISwalpha)) << 8) : ((__ISwalpha) < 24 ? (int) ((1UL << (__ISwalpha)) >> 8) : (int) ((1UL << (__ISwalpha)) >> 24)))),
-40039:   _ISwdigit = ((__ISwdigit) < 8 ? (int) ((1UL << (__ISwdigit)) << 24) : ((__ISwdigit) < 16 ? (int) ((1UL << (__ISwdigit)) << 8) : ((__ISwdigit) < 24 ? (int) ((1UL << (__ISwdigit)) >> 8) : (int) ((1UL << (__ISwdigit)) >> 24)))),
-40039:   _ISwxdigit = ((__ISwxdigit) < 8 ? (int) ((1UL << (__ISwxdigit)) << 24) : ((__ISwxdigit) < 16 ? (int) ((1UL << (__ISwxdigit)) << 8) : ((__ISwxdigit) < 24 ? (int) ((1UL << (__ISwxdigit)) >> 8) : (int) ((1UL << (__ISwxdigit)) >> 24)))),
-40039:   _ISwspace = ((__ISwspace) < 8 ? (int) ((1UL << (__ISwspace)) << 24) : ((__ISwspace) < 16 ? (int) ((1UL << (__ISwspace)) << 8) : ((__ISwspace) < 24 ? (int) ((1UL << (__ISwspace)) >> 8) : (int) ((1UL << (__ISwspace)) >> 24)))),
-40039:   _ISwprint = ((__ISwprint) < 8 ? (int) ((1UL << (__ISwprint)) << 24) : ((__ISwprint) < 16 ? (int) ((1UL << (__ISwprint)) << 8) : ((__ISwprint) < 24 ? (int) ((1UL << (__ISwprint)) >> 8) : (int) ((1UL << (__ISwprint)) >> 24)))),
-40039:   _ISwgraph = ((__ISwgraph) < 8 ? (int) ((1UL << (__ISwgraph)) << 24) : ((__ISwgraph) < 16 ? (int) ((1UL << (__ISwgraph)) << 8) : ((__ISwgraph) < 24 ? (int) ((1UL << (__ISwgraph)) >> 8) : (int) ((1UL << (__ISwgraph)) >> 24)))),
-40039:   _ISwblank = ((__ISwblank) < 8 ? (int) ((1UL << (__ISwblank)) << 24) : ((__ISwblank) < 16 ? (int) ((1UL << (__ISwblank)) << 8) : ((__ISwblank) < 24 ? (int) ((1UL << (__ISwblank)) >> 8) : (int) ((1UL << (__ISwblank)) >> 24)))),
-40039:   _ISwcntrl = ((__ISwcntrl) < 8 ? (int) ((1UL << (__ISwcntrl)) << 24) : ((__ISwcntrl) < 16 ? (int) ((1UL << (__ISwcntrl)) << 8) : ((__ISwcntrl) < 24 ? (int) ((1UL << (__ISwcntrl)) >> 8) : (int) ((1UL << (__ISwcntrl)) >> 24)))),
-40039:   _ISwpunct = ((__ISwpunct) < 8 ? (int) ((1UL << (__ISwpunct)) << 24) : ((__ISwpunct) < 16 ? (int) ((1UL << (__ISwpunct)) << 8) : ((__ISwpunct) < 24 ? (int) ((1UL << (__ISwpunct)) >> 8) : (int) ((1UL << (__ISwpunct)) >> 24)))),
-40039:   _ISwalnum = ((__ISwalnum) < 8 ? (int) ((1UL << (__ISwalnum)) << 24) : ((__ISwalnum) < 16 ? (int) ((1UL << (__ISwalnum)) << 8) : ((__ISwalnum) < 24 ? (int) ((1UL << (__ISwalnum)) >> 8) : (int) ((1UL << (__ISwalnum)) >> 24))))
-40039: };
-40039: 
-40039: 
-40039: 
-40039: extern "C" {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int iswalnum (wint_t __wc) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int iswalpha (wint_t __wc) throw ();
-40039: 
-40039: 
-40039: extern int iswcntrl (wint_t __wc) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int iswdigit (wint_t __wc) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int iswgraph (wint_t __wc) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int iswlower (wint_t __wc) throw ();
-40039: 
-40039: 
-40039: extern int iswprint (wint_t __wc) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int iswpunct (wint_t __wc) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int iswspace (wint_t __wc) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int iswupper (wint_t __wc) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int iswxdigit (wint_t __wc) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int iswblank (wint_t __wc) throw ();
-40039: # 155 "/usr/include/x86_64-linux-gnu/bits/wctype-wchar.h" 3 4
-40039: extern wctype_t wctype (const char *__property) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int iswctype (wint_t __wc, wctype_t __desc) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern wint_t towlower (wint_t __wc) throw ();
-40039: 
-40039: 
-40039: extern wint_t towupper (wint_t __wc) throw ();
-40039: 
-40039: }
-40039: # 39 "/usr/include/wctype.h" 2 3 4
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern "C" {
-40039: 
-40039: 
-40039: 
-40039: typedef const __int32_t *wctrans_t;
-40039: 
-40039: 
-40039: 
-40039: extern wctrans_t wctrans (const char *__property) throw ();
-40039: 
-40039: 
-40039: extern wint_t towctrans (wint_t __wc, wctrans_t __desc) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int iswalnum_l (wint_t __wc, locale_t __locale) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int iswalpha_l (wint_t __wc, locale_t __locale) throw ();
-40039: 
-40039: 
-40039: extern int iswcntrl_l (wint_t __wc, locale_t __locale) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int iswdigit_l (wint_t __wc, locale_t __locale) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int iswgraph_l (wint_t __wc, locale_t __locale) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int iswlower_l (wint_t __wc, locale_t __locale) throw ();
-40039: 
-40039: 
-40039: extern int iswprint_l (wint_t __wc, locale_t __locale) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int iswpunct_l (wint_t __wc, locale_t __locale) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int iswspace_l (wint_t __wc, locale_t __locale) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int iswupper_l (wint_t __wc, locale_t __locale) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int iswxdigit_l (wint_t __wc, locale_t __locale) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int iswblank_l (wint_t __wc, locale_t __locale) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern wctype_t wctype_l (const char *__property, locale_t __locale)
-40039:      throw ();
-40039: 
-40039: 
-40039: 
-40039: extern int iswctype_l (wint_t __wc, wctype_t __desc, locale_t __locale)
-40039:      throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern wint_t towlower_l (wint_t __wc, locale_t __locale) throw ();
-40039: 
-40039: 
-40039: extern wint_t towupper_l (wint_t __wc, locale_t __locale) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern wctrans_t wctrans_l (const char *__property, locale_t __locale)
-40039:      throw ();
-40039: 
-40039: 
-40039: extern wint_t towctrans_l (wint_t __wc, wctrans_t __desc,
-40039:       locale_t __locale) throw ();
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 51 "/usr/include/c++/8/cwctype" 2 3
-40039: # 80 "/usr/include/c++/8/cwctype" 3
-40039: namespace std
-40039: {
-40039:   using ::wctrans_t;
-40039:   using ::wctype_t;
-40039:   using ::wint_t;
-40039: 
-40039:   using ::iswalnum;
-40039:   using ::iswalpha;
-40039: 
-40039:   using ::iswblank;
-40039: 
-40039:   using ::iswcntrl;
-40039:   using ::iswctype;
-40039:   using ::iswdigit;
-40039:   using ::iswgraph;
-40039:   using ::iswlower;
-40039:   using ::iswprint;
-40039:   using ::iswpunct;
-40039:   using ::iswspace;
-40039:   using ::iswupper;
-40039:   using ::iswxdigit;
-40039:   using ::towctrans;
-40039:   using ::towlower;
-40039:   using ::towupper;
-40039:   using ::wctrans;
-40039:   using ::wctype;
-40039: }
-40039: # 40 "/usr/include/c++/8/bits/locale_facets.h" 2 3
-40039: # 1 "/usr/include/c++/8/cctype" 1 3
-40039: # 39 "/usr/include/c++/8/cctype" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/cctype" 3
-40039: # 41 "/usr/include/c++/8/bits/locale_facets.h" 2 3
-40039: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/ctype_base.h" 1 3
-40039: # 36 "/usr/include/x86_64-linux-gnu/c++/8/bits/ctype_base.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039:   struct ctype_base
-40039:   {
-40039: 
-40039:     typedef const int* __to_type;
-40039: 
-40039: 
-40039: 
-40039:     typedef unsigned short mask;
-40039:     static const mask upper = _ISupper;
-40039:     static const mask lower = _ISlower;
-40039:     static const mask alpha = _ISalpha;
-40039:     static const mask digit = _ISdigit;
-40039:     static const mask xdigit = _ISxdigit;
-40039:     static const mask space = _ISspace;
-40039:     static const mask print = _ISprint;
-40039:     static const mask graph = _ISalpha | _ISdigit | _ISpunct;
-40039:     static const mask cntrl = _IScntrl;
-40039:     static const mask punct = _ISpunct;
-40039:     static const mask alnum = _ISalpha | _ISdigit;
-40039: 
-40039:     static const mask blank = _ISblank;
-40039: 
-40039:   };
-40039: 
-40039: 
-40039: }
-40039: # 42 "/usr/include/c++/8/bits/locale_facets.h" 2 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/streambuf_iterator.h" 1 3
-40039: # 33 "/usr/include/c++/8/bits/streambuf_iterator.h" 3
-40039:        
-40039: # 34 "/usr/include/c++/8/bits/streambuf_iterator.h" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 49 "/usr/include/c++/8/bits/streambuf_iterator.h" 3
-40039:   template<typename _CharT, typename _Traits>
-40039:     class istreambuf_iterator
-40039:     : public iterator<input_iterator_tag, _CharT, typename _Traits::off_type,
-40039:         _CharT*,
-40039: 
-40039: 
-40039:         _CharT>
-40039: 
-40039: 
-40039: 
-40039:     {
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef _Traits traits_type;
-40039:       typedef typename _Traits::int_type int_type;
-40039:       typedef basic_streambuf<_CharT, _Traits> streambuf_type;
-40039:       typedef basic_istream<_CharT, _Traits> istream_type;
-40039: 
-40039: 
-40039:       template<typename _CharT2>
-40039:  friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
-40039:         ostreambuf_iterator<_CharT2> >::__type
-40039:  copy(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>,
-40039:       ostreambuf_iterator<_CharT2>);
-40039: 
-40039:       template<bool _IsMove, typename _CharT2>
-40039:  friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
-40039:             _CharT2*>::__type
-40039:  __copy_move_a2(istreambuf_iterator<_CharT2>,
-40039:          istreambuf_iterator<_CharT2>, _CharT2*);
-40039: 
-40039:       template<typename _CharT2>
-40039:  friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
-40039:         istreambuf_iterator<_CharT2> >::__type
-40039:  find(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>,
-40039:       const _CharT2&);
-40039: 
-40039:       template<typename _CharT2, typename _Distance>
-40039:  friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
-40039:             void>::__type
-40039:  advance(istreambuf_iterator<_CharT2>&, _Distance);
-40039: 
-40039:     private:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       mutable streambuf_type* _M_sbuf;
-40039:       int_type _M_c;
-40039: 
-40039:     public:
-40039: 
-40039:       constexpr istreambuf_iterator() noexcept
-40039:       : _M_sbuf(0), _M_c(traits_type::eof()) { }
-40039: 
-40039: 
-40039:       istreambuf_iterator(const istreambuf_iterator&) noexcept = default;
-40039: 
-40039:       ~istreambuf_iterator() = default;
-40039: 
-40039: 
-40039: 
-40039:       istreambuf_iterator(istream_type& __s) noexcept
-40039:       : _M_sbuf(__s.rdbuf()), _M_c(traits_type::eof()) { }
-40039: 
-40039: 
-40039:       istreambuf_iterator(streambuf_type* __s) noexcept
-40039:       : _M_sbuf(__s), _M_c(traits_type::eof()) { }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       char_type
-40039:       operator*() const
-40039:       {
-40039:  int_type __c = _M_get();
-40039: # 139 "/usr/include/c++/8/bits/streambuf_iterator.h" 3
-40039:  return traits_type::to_char_type(__c);
-40039:       }
-40039: 
-40039: 
-40039:       istreambuf_iterator&
-40039:       operator++()
-40039:       {
-40039: 
-40039: 
-40039: 
-40039:                         ;
-40039: 
-40039:  _M_sbuf->sbumpc();
-40039:  _M_c = traits_type::eof();
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039:       istreambuf_iterator
-40039:       operator++(int)
-40039:       {
-40039: 
-40039: 
-40039: 
-40039:                         ;
-40039: 
-40039:  istreambuf_iterator __old = *this;
-40039:  __old._M_c = _M_sbuf->sbumpc();
-40039:  _M_c = traits_type::eof();
-40039:  return __old;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       bool
-40039:       equal(const istreambuf_iterator& __b) const
-40039:       { return _M_at_eof() == __b._M_at_eof(); }
-40039: 
-40039:     private:
-40039:       int_type
-40039:       _M_get() const
-40039:       {
-40039:  int_type __ret = _M_c;
-40039:  if (_M_sbuf && _S_is_eof(__ret) && _S_is_eof(__ret = _M_sbuf->sgetc()))
-40039:    _M_sbuf = 0;
-40039:  return __ret;
-40039:       }
-40039: 
-40039:       bool
-40039:       _M_at_eof() const
-40039:       { return _S_is_eof(_M_get()); }
-40039: 
-40039:       static bool
-40039:       _S_is_eof(int_type __c)
-40039:       {
-40039:  const int_type __eof = traits_type::eof();
-40039:  return traits_type::eq_int_type(__c, __eof);
-40039:       }
-40039:     };
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     inline bool
-40039:     operator==(const istreambuf_iterator<_CharT, _Traits>& __a,
-40039:         const istreambuf_iterator<_CharT, _Traits>& __b)
-40039:     { return __a.equal(__b); }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     inline bool
-40039:     operator!=(const istreambuf_iterator<_CharT, _Traits>& __a,
-40039:         const istreambuf_iterator<_CharT, _Traits>& __b)
-40039:     { return !__a.equal(__b); }
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     class ostreambuf_iterator
-40039:     : public iterator<output_iterator_tag, void, void, void, void>
-40039:     {
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef _Traits traits_type;
-40039:       typedef basic_streambuf<_CharT, _Traits> streambuf_type;
-40039:       typedef basic_ostream<_CharT, _Traits> ostream_type;
-40039: 
-40039: 
-40039:       template<typename _CharT2>
-40039:  friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
-40039:         ostreambuf_iterator<_CharT2> >::__type
-40039:  copy(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>,
-40039:       ostreambuf_iterator<_CharT2>);
-40039: 
-40039:     private:
-40039:       streambuf_type* _M_sbuf;
-40039:       bool _M_failed;
-40039: 
-40039:     public:
-40039: 
-40039:       ostreambuf_iterator(ostream_type& __s) noexcept
-40039:       : _M_sbuf(__s.rdbuf()), _M_failed(!_M_sbuf) { }
-40039: 
-40039: 
-40039:       ostreambuf_iterator(streambuf_type* __s) noexcept
-40039:       : _M_sbuf(__s), _M_failed(!_M_sbuf) { }
-40039: 
-40039: 
-40039:       ostreambuf_iterator&
-40039:       operator=(_CharT __c)
-40039:       {
-40039:  if (!_M_failed &&
-40039:      _Traits::eq_int_type(_M_sbuf->sputc(__c), _Traits::eof()))
-40039:    _M_failed = true;
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039:       ostreambuf_iterator&
-40039:       operator*()
-40039:       { return *this; }
-40039: 
-40039: 
-40039:       ostreambuf_iterator&
-40039:       operator++(int)
-40039:       { return *this; }
-40039: 
-40039: 
-40039:       ostreambuf_iterator&
-40039:       operator++()
-40039:       { return *this; }
-40039: 
-40039: 
-40039:       bool
-40039:       failed() const noexcept
-40039:       { return _M_failed; }
-40039: 
-40039:       ostreambuf_iterator&
-40039:       _M_put(const _CharT* __ws, streamsize __len)
-40039:       {
-40039:  if (__builtin_expect(!_M_failed, true)
-40039:      && __builtin_expect(this->_M_sbuf->sputn(__ws, __len) != __len,
-40039:     false))
-40039:    _M_failed = true;
-40039:  return *this;
-40039:       }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
-40039:         ostreambuf_iterator<_CharT> >::__type
-40039:     copy(istreambuf_iterator<_CharT> __first,
-40039:   istreambuf_iterator<_CharT> __last,
-40039:   ostreambuf_iterator<_CharT> __result)
-40039:     {
-40039:       if (__first._M_sbuf && !__last._M_sbuf && !__result._M_failed)
-40039:  {
-40039:    bool __ineof;
-40039:    __copy_streambufs_eof(__first._M_sbuf, __result._M_sbuf, __ineof);
-40039:    if (!__ineof)
-40039:      __result._M_failed = true;
-40039:  }
-40039:       return __result;
-40039:     }
-40039: 
-40039:   template<bool _IsMove, typename _CharT>
-40039:     typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
-40039:         ostreambuf_iterator<_CharT> >::__type
-40039:     __copy_move_a2(_CharT* __first, _CharT* __last,
-40039:      ostreambuf_iterator<_CharT> __result)
-40039:     {
-40039:       const streamsize __num = __last - __first;
-40039:       if (__num > 0)
-40039:  __result._M_put(__first, __num);
-40039:       return __result;
-40039:     }
-40039: 
-40039:   template<bool _IsMove, typename _CharT>
-40039:     typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
-40039:         ostreambuf_iterator<_CharT> >::__type
-40039:     __copy_move_a2(const _CharT* __first, const _CharT* __last,
-40039:      ostreambuf_iterator<_CharT> __result)
-40039:     {
-40039:       const streamsize __num = __last - __first;
-40039:       if (__num > 0)
-40039:  __result._M_put(__first, __num);
-40039:       return __result;
-40039:     }
-40039: 
-40039:   template<bool _IsMove, typename _CharT>
-40039:     typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
-40039:         _CharT*>::__type
-40039:     __copy_move_a2(istreambuf_iterator<_CharT> __first,
-40039:      istreambuf_iterator<_CharT> __last, _CharT* __result)
-40039:     {
-40039:       typedef istreambuf_iterator<_CharT> __is_iterator_type;
-40039:       typedef typename __is_iterator_type::traits_type traits_type;
-40039:       typedef typename __is_iterator_type::streambuf_type streambuf_type;
-40039:       typedef typename traits_type::int_type int_type;
-40039: 
-40039:       if (__first._M_sbuf && !__last._M_sbuf)
-40039:  {
-40039:    streambuf_type* __sb = __first._M_sbuf;
-40039:    int_type __c = __sb->sgetc();
-40039:    while (!traits_type::eq_int_type(__c, traits_type::eof()))
-40039:      {
-40039:        const streamsize __n = __sb->egptr() - __sb->gptr();
-40039:        if (__n > 1)
-40039:   {
-40039:     traits_type::copy(__result, __sb->gptr(), __n);
-40039:     __sb->__safe_gbump(__n);
-40039:     __result += __n;
-40039:     __c = __sb->underflow();
-40039:   }
-40039:        else
-40039:   {
-40039:     *__result++ = traits_type::to_char_type(__c);
-40039:     __c = __sb->snextc();
-40039:   }
-40039:      }
-40039:  }
-40039:       return __result;
-40039:     }
-40039: 
-40039:   template<typename _CharT>
-40039:     typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
-40039:           istreambuf_iterator<_CharT> >::__type
-40039:     find(istreambuf_iterator<_CharT> __first,
-40039:   istreambuf_iterator<_CharT> __last, const _CharT& __val)
-40039:     {
-40039:       typedef istreambuf_iterator<_CharT> __is_iterator_type;
-40039:       typedef typename __is_iterator_type::traits_type traits_type;
-40039:       typedef typename __is_iterator_type::streambuf_type streambuf_type;
-40039:       typedef typename traits_type::int_type int_type;
-40039:       const int_type __eof = traits_type::eof();
-40039: 
-40039:       if (__first._M_sbuf && !__last._M_sbuf)
-40039:  {
-40039:    const int_type __ival = traits_type::to_int_type(__val);
-40039:    streambuf_type* __sb = __first._M_sbuf;
-40039:    int_type __c = __sb->sgetc();
-40039:    while (!traits_type::eq_int_type(__c, __eof)
-40039:    && !traits_type::eq_int_type(__c, __ival))
-40039:      {
-40039:        streamsize __n = __sb->egptr() - __sb->gptr();
-40039:        if (__n > 1)
-40039:   {
-40039:     const _CharT* __p = traits_type::find(__sb->gptr(),
-40039:        __n, __val);
-40039:     if (__p)
-40039:       __n = __p - __sb->gptr();
-40039:     __sb->__safe_gbump(__n);
-40039:     __c = __sb->sgetc();
-40039:   }
-40039:        else
-40039:   __c = __sb->snextc();
-40039:      }
-40039: 
-40039:    __first._M_c = __eof;
-40039:  }
-40039: 
-40039:       return __first;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Distance>
-40039:     typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
-40039:         void>::__type
-40039:     advance(istreambuf_iterator<_CharT>& __i, _Distance __n)
-40039:     {
-40039:       if (__n == 0)
-40039:  return;
-40039: 
-40039:       ;
-40039:      
-40039: 
-40039:                            ;
-40039: 
-40039:       typedef istreambuf_iterator<_CharT> __is_iterator_type;
-40039:       typedef typename __is_iterator_type::traits_type traits_type;
-40039:       typedef typename __is_iterator_type::streambuf_type streambuf_type;
-40039:       typedef typename traits_type::int_type int_type;
-40039:       const int_type __eof = traits_type::eof();
-40039: 
-40039:       streambuf_type* __sb = __i._M_sbuf;
-40039:       while (__n > 0)
-40039:  {
-40039:    streamsize __size = __sb->egptr() - __sb->gptr();
-40039:    if (__size > __n)
-40039:      {
-40039:        __sb->__safe_gbump(__n);
-40039:        break;
-40039:      }
-40039: 
-40039:    __sb->__safe_gbump(__size);
-40039:    __n -= __size;
-40039:    if (traits_type::eq_int_type(__sb->underflow(), __eof))
-40039:      {
-40039:       
-40039: 
-40039:                       ;
-40039:        break;
-40039:      }
-40039:  }
-40039: 
-40039:       __i._M_c = __eof;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 49 "/usr/include/c++/8/bits/locale_facets.h" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 71 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:   template<typename _Tp>
-40039:     void
-40039:     __convert_to_v(const char*, _Tp&, ios_base::iostate&,
-40039:      const __c_locale&) throw();
-40039: 
-40039: 
-40039:   template<>
-40039:     void
-40039:     __convert_to_v(const char*, float&, ios_base::iostate&,
-40039:      const __c_locale&) throw();
-40039: 
-40039:   template<>
-40039:     void
-40039:     __convert_to_v(const char*, double&, ios_base::iostate&,
-40039:      const __c_locale&) throw();
-40039: 
-40039:   template<>
-40039:     void
-40039:     __convert_to_v(const char*, long double&, ios_base::iostate&,
-40039:      const __c_locale&) throw();
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     struct __pad
-40039:     {
-40039:       static void
-40039:       _S_pad(ios_base& __io, _CharT __fill, _CharT* __news,
-40039:       const _CharT* __olds, streamsize __newlen, streamsize __oldlen);
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     _CharT*
-40039:     __add_grouping(_CharT* __s, _CharT __sep,
-40039:      const char* __gbeg, size_t __gsize,
-40039:      const _CharT* __first, const _CharT* __last);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     inline
-40039:     ostreambuf_iterator<_CharT>
-40039:     __write(ostreambuf_iterator<_CharT> __s, const _CharT* __ws, int __len)
-40039:     {
-40039:       __s._M_put(__ws, __len);
-40039:       return __s;
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _OutIter>
-40039:     inline
-40039:     _OutIter
-40039:     __write(_OutIter __s, const _CharT* __ws, int __len)
-40039:     {
-40039:       for (int __j = 0; __j < __len; __j++, ++__s)
-40039:  *__s = __ws[__j];
-40039:       return __s;
-40039:     }
-40039: # 149 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:   template<typename _CharT>
-40039:     class __ctype_abstract_base : public locale::facet, public ctype_base
-40039:     {
-40039:     public:
-40039: 
-40039: 
-40039:       typedef _CharT char_type;
-40039: # 168 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       bool
-40039:       is(mask __m, char_type __c) const
-40039:       { return this->do_is(__m, __c); }
-40039: # 185 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       const char_type*
-40039:       is(const char_type *__lo, const char_type *__hi, mask *__vec) const
-40039:       { return this->do_is(__lo, __hi, __vec); }
-40039: # 201 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       const char_type*
-40039:       scan_is(mask __m, const char_type* __lo, const char_type* __hi) const
-40039:       { return this->do_scan_is(__m, __lo, __hi); }
-40039: # 217 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       const char_type*
-40039:       scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
-40039:       { return this->do_scan_not(__m, __lo, __hi); }
-40039: # 231 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       char_type
-40039:       toupper(char_type __c) const
-40039:       { return this->do_toupper(__c); }
-40039: # 246 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       const char_type*
-40039:       toupper(char_type *__lo, const char_type* __hi) const
-40039:       { return this->do_toupper(__lo, __hi); }
-40039: # 260 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       char_type
-40039:       tolower(char_type __c) const
-40039:       { return this->do_tolower(__c); }
-40039: # 275 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       const char_type*
-40039:       tolower(char_type* __lo, const char_type* __hi) const
-40039:       { return this->do_tolower(__lo, __hi); }
-40039: # 292 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       char_type
-40039:       widen(char __c) const
-40039:       { return this->do_widen(__c); }
-40039: # 311 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       const char*
-40039:       widen(const char* __lo, const char* __hi, char_type* __to) const
-40039:       { return this->do_widen(__lo, __hi, __to); }
-40039: # 330 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       char
-40039:       narrow(char_type __c, char __dfault) const
-40039:       { return this->do_narrow(__c, __dfault); }
-40039: # 352 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       const char_type*
-40039:       narrow(const char_type* __lo, const char_type* __hi,
-40039:        char __dfault, char* __to) const
-40039:       { return this->do_narrow(__lo, __hi, __dfault, __to); }
-40039: 
-40039:     protected:
-40039:       explicit
-40039:       __ctype_abstract_base(size_t __refs = 0): facet(__refs) { }
-40039: 
-40039:       virtual
-40039:       ~__ctype_abstract_base() { }
-40039: # 377 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual bool
-40039:       do_is(mask __m, char_type __c) const = 0;
-40039: # 396 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual const char_type*
-40039:       do_is(const char_type* __lo, const char_type* __hi,
-40039:      mask* __vec) const = 0;
-40039: # 415 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual const char_type*
-40039:       do_scan_is(mask __m, const char_type* __lo,
-40039:    const char_type* __hi) const = 0;
-40039: # 434 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual const char_type*
-40039:       do_scan_not(mask __m, const char_type* __lo,
-40039:     const char_type* __hi) const = 0;
-40039: # 452 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual char_type
-40039:       do_toupper(char_type __c) const = 0;
-40039: # 469 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual const char_type*
-40039:       do_toupper(char_type* __lo, const char_type* __hi) const = 0;
-40039: # 485 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual char_type
-40039:       do_tolower(char_type __c) const = 0;
-40039: # 502 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual const char_type*
-40039:       do_tolower(char_type* __lo, const char_type* __hi) const = 0;
-40039: # 521 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual char_type
-40039:       do_widen(char __c) const = 0;
-40039: # 542 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual const char*
-40039:       do_widen(const char* __lo, const char* __hi, char_type* __to) const = 0;
-40039: # 563 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual char
-40039:       do_narrow(char_type __c, char __dfault) const = 0;
-40039: # 588 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual const char_type*
-40039:       do_narrow(const char_type* __lo, const char_type* __hi,
-40039:   char __dfault, char* __to) const = 0;
-40039:     };
-40039: # 611 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:   template<typename _CharT>
-40039:     class ctype : public __ctype_abstract_base<_CharT>
-40039:     {
-40039:     public:
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef typename __ctype_abstract_base<_CharT>::mask mask;
-40039: 
-40039: 
-40039:       static locale::id id;
-40039: 
-40039:       explicit
-40039:       ctype(size_t __refs = 0) : __ctype_abstract_base<_CharT>(__refs) { }
-40039: 
-40039:    protected:
-40039:       virtual
-40039:       ~ctype();
-40039: 
-40039:       virtual bool
-40039:       do_is(mask __m, char_type __c) const;
-40039: 
-40039:       virtual const char_type*
-40039:       do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const;
-40039: 
-40039:       virtual const char_type*
-40039:       do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const;
-40039: 
-40039:       virtual const char_type*
-40039:       do_scan_not(mask __m, const char_type* __lo,
-40039:     const char_type* __hi) const;
-40039: 
-40039:       virtual char_type
-40039:       do_toupper(char_type __c) const;
-40039: 
-40039:       virtual const char_type*
-40039:       do_toupper(char_type* __lo, const char_type* __hi) const;
-40039: 
-40039:       virtual char_type
-40039:       do_tolower(char_type __c) const;
-40039: 
-40039:       virtual const char_type*
-40039:       do_tolower(char_type* __lo, const char_type* __hi) const;
-40039: 
-40039:       virtual char_type
-40039:       do_widen(char __c) const;
-40039: 
-40039:       virtual const char*
-40039:       do_widen(const char* __lo, const char* __hi, char_type* __dest) const;
-40039: 
-40039:       virtual char
-40039:       do_narrow(char_type, char __dfault) const;
-40039: 
-40039:       virtual const char_type*
-40039:       do_narrow(const char_type* __lo, const char_type* __hi,
-40039:   char __dfault, char* __to) const;
-40039:     };
-40039: 
-40039:   template<typename _CharT>
-40039:     locale::id ctype<_CharT>::id;
-40039: # 680 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:   template<>
-40039:     class ctype<char> : public locale::facet, public ctype_base
-40039:     {
-40039:     public:
-40039: 
-40039: 
-40039:       typedef char char_type;
-40039: 
-40039:     protected:
-40039: 
-40039:       __c_locale _M_c_locale_ctype;
-40039:       bool _M_del;
-40039:       __to_type _M_toupper;
-40039:       __to_type _M_tolower;
-40039:       const mask* _M_table;
-40039:       mutable char _M_widen_ok;
-40039:       mutable char _M_widen[1 + static_cast<unsigned char>(-1)];
-40039:       mutable char _M_narrow[1 + static_cast<unsigned char>(-1)];
-40039:       mutable char _M_narrow_ok;
-40039: 
-40039: 
-40039:     public:
-40039: 
-40039:       static locale::id id;
-40039: 
-40039:       static const size_t table_size = 1 + static_cast<unsigned char>(-1);
-40039: # 717 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       explicit
-40039:       ctype(const mask* __table = 0, bool __del = false, size_t __refs = 0);
-40039: # 730 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       explicit
-40039:       ctype(__c_locale __cloc, const mask* __table = 0, bool __del = false,
-40039:      size_t __refs = 0);
-40039: # 743 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       inline bool
-40039:       is(mask __m, char __c) const;
-40039: # 758 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       inline const char*
-40039:       is(const char* __lo, const char* __hi, mask* __vec) const;
-40039: # 772 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       inline const char*
-40039:       scan_is(mask __m, const char* __lo, const char* __hi) const;
-40039: # 786 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       inline const char*
-40039:       scan_not(mask __m, const char* __lo, const char* __hi) const;
-40039: # 801 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       char_type
-40039:       toupper(char_type __c) const
-40039:       { return this->do_toupper(__c); }
-40039: # 818 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       const char_type*
-40039:       toupper(char_type *__lo, const char_type* __hi) const
-40039:       { return this->do_toupper(__lo, __hi); }
-40039: # 834 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       char_type
-40039:       tolower(char_type __c) const
-40039:       { return this->do_tolower(__c); }
-40039: # 851 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       const char_type*
-40039:       tolower(char_type* __lo, const char_type* __hi) const
-40039:       { return this->do_tolower(__lo, __hi); }
-40039: # 871 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       char_type
-40039:       widen(char __c) const
-40039:       {
-40039:  if (_M_widen_ok)
-40039:    return _M_widen[static_cast<unsigned char>(__c)];
-40039:  this->_M_widen_init();
-40039:  return this->do_widen(__c);
-40039:       }
-40039: # 898 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       const char*
-40039:       widen(const char* __lo, const char* __hi, char_type* __to) const
-40039:       {
-40039:  if (_M_widen_ok == 1)
-40039:    {
-40039:      if (__builtin_expect(__hi != __lo, true))
-40039:        __builtin_memcpy(__to, __lo, __hi - __lo);
-40039:      return __hi;
-40039:    }
-40039:  if (!_M_widen_ok)
-40039:    _M_widen_init();
-40039:  return this->do_widen(__lo, __hi, __to);
-40039:       }
-40039: # 930 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       char
-40039:       narrow(char_type __c, char __dfault) const
-40039:       {
-40039:  if (_M_narrow[static_cast<unsigned char>(__c)])
-40039:    return _M_narrow[static_cast<unsigned char>(__c)];
-40039:  const char __t = do_narrow(__c, __dfault);
-40039:  if (__t != __dfault)
-40039:    _M_narrow[static_cast<unsigned char>(__c)] = __t;
-40039:  return __t;
-40039:       }
-40039: # 963 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       const char_type*
-40039:       narrow(const char_type* __lo, const char_type* __hi,
-40039:       char __dfault, char* __to) const
-40039:       {
-40039:  if (__builtin_expect(_M_narrow_ok == 1, true))
-40039:    {
-40039:      if (__builtin_expect(__hi != __lo, true))
-40039:        __builtin_memcpy(__to, __lo, __hi - __lo);
-40039:      return __hi;
-40039:    }
-40039:  if (!_M_narrow_ok)
-40039:    _M_narrow_init();
-40039:  return this->do_narrow(__lo, __hi, __dfault, __to);
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const mask*
-40039:       table() const throw()
-40039:       { return _M_table; }
-40039: 
-40039: 
-40039:       static const mask*
-40039:       classic_table() throw();
-40039:     protected:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       virtual
-40039:       ~ctype();
-40039: # 1013 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual char_type
-40039:       do_toupper(char_type __c) const;
-40039: # 1030 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual const char_type*
-40039:       do_toupper(char_type* __lo, const char_type* __hi) const;
-40039: # 1046 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual char_type
-40039:       do_tolower(char_type __c) const;
-40039: # 1063 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual const char_type*
-40039:       do_tolower(char_type* __lo, const char_type* __hi) const;
-40039: # 1083 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual char_type
-40039:       do_widen(char __c) const
-40039:       { return __c; }
-40039: # 1106 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual const char*
-40039:       do_widen(const char* __lo, const char* __hi, char_type* __to) const
-40039:       {
-40039:  if (__builtin_expect(__hi != __lo, true))
-40039:    __builtin_memcpy(__to, __lo, __hi - __lo);
-40039:  return __hi;
-40039:       }
-40039: # 1133 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual char
-40039:       do_narrow(char_type __c, char __dfault __attribute__((__unused__))) const
-40039:       { return __c; }
-40039: # 1159 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual const char_type*
-40039:       do_narrow(const char_type* __lo, const char_type* __hi,
-40039:   char __dfault __attribute__((__unused__)), char* __to) const
-40039:       {
-40039:  if (__builtin_expect(__hi != __lo, true))
-40039:    __builtin_memcpy(__to, __lo, __hi - __lo);
-40039:  return __hi;
-40039:       }
-40039: 
-40039:     private:
-40039:       void _M_narrow_init() const;
-40039:       void _M_widen_init() const;
-40039:     };
-40039: # 1185 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:   template<>
-40039:     class ctype<wchar_t> : public __ctype_abstract_base<wchar_t>
-40039:     {
-40039:     public:
-40039: 
-40039: 
-40039:       typedef wchar_t char_type;
-40039:       typedef wctype_t __wmask_type;
-40039: 
-40039:     protected:
-40039:       __c_locale _M_c_locale_ctype;
-40039: 
-40039: 
-40039:       bool _M_narrow_ok;
-40039:       char _M_narrow[128];
-40039:       wint_t _M_widen[1 + static_cast<unsigned char>(-1)];
-40039: 
-40039: 
-40039:       mask _M_bit[16];
-40039:       __wmask_type _M_wmask[16];
-40039: 
-40039:     public:
-40039: 
-40039: 
-40039:       static locale::id id;
-40039: # 1218 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       explicit
-40039:       ctype(size_t __refs = 0);
-40039: # 1229 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       explicit
-40039:       ctype(__c_locale __cloc, size_t __refs = 0);
-40039: 
-40039:     protected:
-40039:       __wmask_type
-40039:       _M_convert_to_wmask(const mask __m) const throw();
-40039: 
-40039: 
-40039:       virtual
-40039:       ~ctype();
-40039: # 1253 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual bool
-40039:       do_is(mask __m, char_type __c) const;
-40039: # 1272 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual const char_type*
-40039:       do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const;
-40039: # 1290 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual const char_type*
-40039:       do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const;
-40039: # 1308 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual const char_type*
-40039:       do_scan_not(mask __m, const char_type* __lo,
-40039:     const char_type* __hi) const;
-40039: # 1325 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual char_type
-40039:       do_toupper(char_type __c) const;
-40039: # 1342 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual const char_type*
-40039:       do_toupper(char_type* __lo, const char_type* __hi) const;
-40039: # 1358 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual char_type
-40039:       do_tolower(char_type __c) const;
-40039: # 1375 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual const char_type*
-40039:       do_tolower(char_type* __lo, const char_type* __hi) const;
-40039: # 1395 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual char_type
-40039:       do_widen(char __c) const;
-40039: # 1417 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual const char*
-40039:       do_widen(const char* __lo, const char* __hi, char_type* __to) const;
-40039: # 1440 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual char
-40039:       do_narrow(char_type __c, char __dfault) const;
-40039: # 1466 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual const char_type*
-40039:       do_narrow(const char_type* __lo, const char_type* __hi,
-40039:   char __dfault, char* __to) const;
-40039: 
-40039: 
-40039:       void
-40039:       _M_initialize_ctype() throw();
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     class ctype_byname : public ctype<_CharT>
-40039:     {
-40039:     public:
-40039:       typedef typename ctype<_CharT>::mask mask;
-40039: 
-40039:       explicit
-40039:       ctype_byname(const char* __s, size_t __refs = 0);
-40039: 
-40039: 
-40039:       explicit
-40039:       ctype_byname(const string& __s, size_t __refs = 0)
-40039:       : ctype_byname(__s.c_str(), __refs) { }
-40039: 
-40039: 
-40039:     protected:
-40039:       virtual
-40039:       ~ctype_byname() { }
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     class ctype_byname<char> : public ctype<char>
-40039:     {
-40039:     public:
-40039:       explicit
-40039:       ctype_byname(const char* __s, size_t __refs = 0);
-40039: 
-40039: 
-40039:       explicit
-40039:       ctype_byname(const string& __s, size_t __refs = 0);
-40039: 
-40039: 
-40039:     protected:
-40039:       virtual
-40039:       ~ctype_byname();
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     class ctype_byname<wchar_t> : public ctype<wchar_t>
-40039:     {
-40039:     public:
-40039:       explicit
-40039:       ctype_byname(const char* __s, size_t __refs = 0);
-40039: 
-40039: 
-40039:       explicit
-40039:       ctype_byname(const string& __s, size_t __refs = 0);
-40039: 
-40039: 
-40039:     protected:
-40039:       virtual
-40039:       ~ctype_byname();
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/ctype_inline.h" 1 3
-40039: # 37 "/usr/include/x86_64-linux-gnu/c++/8/bits/ctype_inline.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   bool
-40039:   ctype<char>::
-40039:   is(mask __m, char __c) const
-40039:   { return _M_table[static_cast<unsigned char>(__c)] & __m; }
-40039: 
-40039:   const char*
-40039:   ctype<char>::
-40039:   is(const char* __low, const char* __high, mask* __vec) const
-40039:   {
-40039:     while (__low < __high)
-40039:       *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
-40039:     return __high;
-40039:   }
-40039: 
-40039:   const char*
-40039:   ctype<char>::
-40039:   scan_is(mask __m, const char* __low, const char* __high) const
-40039:   {
-40039:     while (__low < __high
-40039:     && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
-40039:       ++__low;
-40039:     return __low;
-40039:   }
-40039: 
-40039:   const char*
-40039:   ctype<char>::
-40039:   scan_not(mask __m, const char* __low, const char* __high) const
-40039:   {
-40039:     while (__low < __high
-40039:     && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
-40039:       ++__low;
-40039:     return __low;
-40039:   }
-40039: 
-40039: 
-40039: }
-40039: # 1539 "/usr/include/c++/8/bits/locale_facets.h" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039:   class __num_base
-40039:   {
-40039:   public:
-40039: 
-40039: 
-40039:     enum
-40039:       {
-40039:  _S_ominus,
-40039:  _S_oplus,
-40039:  _S_ox,
-40039:  _S_oX,
-40039:  _S_odigits,
-40039:  _S_odigits_end = _S_odigits + 16,
-40039:  _S_oudigits = _S_odigits_end,
-40039:  _S_oudigits_end = _S_oudigits + 16,
-40039:  _S_oe = _S_odigits + 14,
-40039:  _S_oE = _S_oudigits + 14,
-40039:  _S_oend = _S_oudigits_end
-40039:       };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     static const char* _S_atoms_out;
-40039: 
-40039: 
-40039: 
-40039:     static const char* _S_atoms_in;
-40039: 
-40039:     enum
-40039:     {
-40039:       _S_iminus,
-40039:       _S_iplus,
-40039:       _S_ix,
-40039:       _S_iX,
-40039:       _S_izero,
-40039:       _S_ie = _S_izero + 14,
-40039:       _S_iE = _S_izero + 20,
-40039:       _S_iend = 26
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:     static void
-40039:     _S_format_float(const ios_base& __io, char* __fptr, char __mod) throw();
-40039:   };
-40039: 
-40039:   template<typename _CharT>
-40039:     struct __numpunct_cache : public locale::facet
-40039:     {
-40039:       const char* _M_grouping;
-40039:       size_t _M_grouping_size;
-40039:       bool _M_use_grouping;
-40039:       const _CharT* _M_truename;
-40039:       size_t _M_truename_size;
-40039:       const _CharT* _M_falsename;
-40039:       size_t _M_falsename_size;
-40039:       _CharT _M_decimal_point;
-40039:       _CharT _M_thousands_sep;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       _CharT _M_atoms_out[__num_base::_S_oend];
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       _CharT _M_atoms_in[__num_base::_S_iend];
-40039: 
-40039:       bool _M_allocated;
-40039: 
-40039:       __numpunct_cache(size_t __refs = 0)
-40039:       : facet(__refs), _M_grouping(0), _M_grouping_size(0),
-40039:  _M_use_grouping(false),
-40039:  _M_truename(0), _M_truename_size(0), _M_falsename(0),
-40039:  _M_falsename_size(0), _M_decimal_point(_CharT()),
-40039:  _M_thousands_sep(_CharT()), _M_allocated(false)
-40039:  { }
-40039: 
-40039:       ~__numpunct_cache();
-40039: 
-40039:       void
-40039:       _M_cache(const locale& __loc);
-40039: 
-40039:     private:
-40039:       __numpunct_cache&
-40039:       operator=(const __numpunct_cache&);
-40039: 
-40039:       explicit
-40039:       __numpunct_cache(const __numpunct_cache&);
-40039:     };
-40039: 
-40039:   template<typename _CharT>
-40039:     __numpunct_cache<_CharT>::~__numpunct_cache()
-40039:     {
-40039:       if (_M_allocated)
-40039:  {
-40039:    delete [] _M_grouping;
-40039:    delete [] _M_truename;
-40039:    delete [] _M_falsename;
-40039:  }
-40039:     }
-40039: 
-40039: namespace __cxx11 {
-40039: # 1669 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:   template<typename _CharT>
-40039:     class numpunct : public locale::facet
-40039:     {
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef basic_string<_CharT> string_type;
-40039: 
-40039:       typedef __numpunct_cache<_CharT> __cache_type;
-40039: 
-40039:     protected:
-40039:       __cache_type* _M_data;
-40039: 
-40039:     public:
-40039: 
-40039:       static locale::id id;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       explicit
-40039:       numpunct(size_t __refs = 0)
-40039:       : facet(__refs), _M_data(0)
-40039:       { _M_initialize_numpunct(); }
-40039: # 1707 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       explicit
-40039:       numpunct(__cache_type* __cache, size_t __refs = 0)
-40039:       : facet(__refs), _M_data(__cache)
-40039:       { _M_initialize_numpunct(); }
-40039: # 1721 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       explicit
-40039:       numpunct(__c_locale __cloc, size_t __refs = 0)
-40039:       : facet(__refs), _M_data(0)
-40039:       { _M_initialize_numpunct(__cloc); }
-40039: # 1735 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       char_type
-40039:       decimal_point() const
-40039:       { return this->do_decimal_point(); }
-40039: # 1748 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       char_type
-40039:       thousands_sep() const
-40039:       { return this->do_thousands_sep(); }
-40039: # 1779 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       string
-40039:       grouping() const
-40039:       { return this->do_grouping(); }
-40039: # 1792 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       string_type
-40039:       truename() const
-40039:       { return this->do_truename(); }
-40039: # 1805 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       string_type
-40039:       falsename() const
-40039:       { return this->do_falsename(); }
-40039: 
-40039:     protected:
-40039: 
-40039:       virtual
-40039:       ~numpunct();
-40039: # 1822 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual char_type
-40039:       do_decimal_point() const
-40039:       { return _M_data->_M_decimal_point; }
-40039: # 1834 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual char_type
-40039:       do_thousands_sep() const
-40039:       { return _M_data->_M_thousands_sep; }
-40039: # 1847 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual string
-40039:       do_grouping() const
-40039:       { return _M_data->_M_grouping; }
-40039: # 1860 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual string_type
-40039:       do_truename() const
-40039:       { return _M_data->_M_truename; }
-40039: # 1873 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual string_type
-40039:       do_falsename() const
-40039:       { return _M_data->_M_falsename; }
-40039: 
-40039: 
-40039:       void
-40039:       _M_initialize_numpunct(__c_locale __cloc = 0);
-40039:     };
-40039: 
-40039:   template<typename _CharT>
-40039:     locale::id numpunct<_CharT>::id;
-40039: 
-40039:   template<>
-40039:     numpunct<char>::~numpunct();
-40039: 
-40039:   template<>
-40039:     void
-40039:     numpunct<char>::_M_initialize_numpunct(__c_locale __cloc);
-40039: 
-40039: 
-40039:   template<>
-40039:     numpunct<wchar_t>::~numpunct();
-40039: 
-40039:   template<>
-40039:     void
-40039:     numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc);
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     class numpunct_byname : public numpunct<_CharT>
-40039:     {
-40039:     public:
-40039:       typedef _CharT char_type;
-40039:       typedef basic_string<_CharT> string_type;
-40039: 
-40039:       explicit
-40039:       numpunct_byname(const char* __s, size_t __refs = 0)
-40039:       : numpunct<_CharT>(__refs)
-40039:       {
-40039:  if (__builtin_strcmp(__s, "C") != 0
-40039:      && __builtin_strcmp(__s, "POSIX") != 0)
-40039:    {
-40039:      __c_locale __tmp;
-40039:      this->_S_create_c_locale(__tmp, __s);
-40039:      this->_M_initialize_numpunct(__tmp);
-40039:      this->_S_destroy_c_locale(__tmp);
-40039:    }
-40039:       }
-40039: 
-40039: 
-40039:       explicit
-40039:       numpunct_byname(const string& __s, size_t __refs = 0)
-40039:       : numpunct_byname(__s.c_str(), __refs) { }
-40039: 
-40039: 
-40039:     protected:
-40039:       virtual
-40039:       ~numpunct_byname() { }
-40039:     };
-40039: 
-40039: }
-40039: 
-40039: 
-40039: # 1951 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:   template<typename _CharT, typename _InIter>
-40039:     class num_get : public locale::facet
-40039:     {
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef _InIter iter_type;
-40039: 
-40039: 
-40039: 
-40039:       static locale::id id;
-40039: # 1972 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       explicit
-40039:       num_get(size_t __refs = 0) : facet(__refs) { }
-40039: # 1998 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       iter_type
-40039:       get(iter_type __in, iter_type __end, ios_base& __io,
-40039:    ios_base::iostate& __err, bool& __v) const
-40039:       { return this->do_get(__in, __end, __io, __err, __v); }
-40039: # 2035 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       iter_type
-40039:       get(iter_type __in, iter_type __end, ios_base& __io,
-40039:    ios_base::iostate& __err, long& __v) const
-40039:       { return this->do_get(__in, __end, __io, __err, __v); }
-40039: 
-40039:       iter_type
-40039:       get(iter_type __in, iter_type __end, ios_base& __io,
-40039:    ios_base::iostate& __err, unsigned short& __v) const
-40039:       { return this->do_get(__in, __end, __io, __err, __v); }
-40039: 
-40039:       iter_type
-40039:       get(iter_type __in, iter_type __end, ios_base& __io,
-40039:    ios_base::iostate& __err, unsigned int& __v) const
-40039:       { return this->do_get(__in, __end, __io, __err, __v); }
-40039: 
-40039:       iter_type
-40039:       get(iter_type __in, iter_type __end, ios_base& __io,
-40039:    ios_base::iostate& __err, unsigned long& __v) const
-40039:       { return this->do_get(__in, __end, __io, __err, __v); }
-40039: 
-40039: 
-40039:       iter_type
-40039:       get(iter_type __in, iter_type __end, ios_base& __io,
-40039:    ios_base::iostate& __err, long long& __v) const
-40039:       { return this->do_get(__in, __end, __io, __err, __v); }
-40039: 
-40039:       iter_type
-40039:       get(iter_type __in, iter_type __end, ios_base& __io,
-40039:    ios_base::iostate& __err, unsigned long long& __v) const
-40039:       { return this->do_get(__in, __end, __io, __err, __v); }
-40039: # 2095 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       iter_type
-40039:       get(iter_type __in, iter_type __end, ios_base& __io,
-40039:    ios_base::iostate& __err, float& __v) const
-40039:       { return this->do_get(__in, __end, __io, __err, __v); }
-40039: 
-40039:       iter_type
-40039:       get(iter_type __in, iter_type __end, ios_base& __io,
-40039:    ios_base::iostate& __err, double& __v) const
-40039:       { return this->do_get(__in, __end, __io, __err, __v); }
-40039: 
-40039:       iter_type
-40039:       get(iter_type __in, iter_type __end, ios_base& __io,
-40039:    ios_base::iostate& __err, long double& __v) const
-40039:       { return this->do_get(__in, __end, __io, __err, __v); }
-40039: # 2138 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       iter_type
-40039:       get(iter_type __in, iter_type __end, ios_base& __io,
-40039:    ios_base::iostate& __err, void*& __v) const
-40039:       { return this->do_get(__in, __end, __io, __err, __v); }
-40039: 
-40039:     protected:
-40039: 
-40039:       virtual ~num_get() { }
-40039: 
-40039:       __attribute ((__abi_tag__ ("cxx11")))
-40039:       iter_type
-40039:       _M_extract_float(iter_type, iter_type, ios_base&, ios_base::iostate&,
-40039:          string&) const;
-40039: 
-40039:       template<typename _ValueT>
-40039:  __attribute ((__abi_tag__ ("cxx11")))
-40039:  iter_type
-40039:  _M_extract_int(iter_type, iter_type, ios_base&, ios_base::iostate&,
-40039:          _ValueT&) const;
-40039: 
-40039:       template<typename _CharT2>
-40039:       typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, int>::__type
-40039:  _M_find(const _CharT2*, size_t __len, _CharT2 __c) const
-40039:  {
-40039:    int __ret = -1;
-40039:    if (__len <= 10)
-40039:      {
-40039:        if (__c >= _CharT2('0') && __c < _CharT2(_CharT2('0') + __len))
-40039:   __ret = __c - _CharT2('0');
-40039:      }
-40039:    else
-40039:      {
-40039:        if (__c >= _CharT2('0') && __c <= _CharT2('9'))
-40039:   __ret = __c - _CharT2('0');
-40039:        else if (__c >= _CharT2('a') && __c <= _CharT2('f'))
-40039:   __ret = 10 + (__c - _CharT2('a'));
-40039:        else if (__c >= _CharT2('A') && __c <= _CharT2('F'))
-40039:   __ret = 10 + (__c - _CharT2('A'));
-40039:      }
-40039:    return __ret;
-40039:  }
-40039: 
-40039:       template<typename _CharT2>
-40039:       typename __gnu_cxx::__enable_if<!__is_char<_CharT2>::__value,
-40039:           int>::__type
-40039:  _M_find(const _CharT2* __zero, size_t __len, _CharT2 __c) const
-40039:  {
-40039:    int __ret = -1;
-40039:    const char_type* __q = char_traits<_CharT2>::find(__zero, __len, __c);
-40039:    if (__q)
-40039:      {
-40039:        __ret = __q - __zero;
-40039:        if (__ret > 15)
-40039:   __ret -= 6;
-40039:      }
-40039:    return __ret;
-40039:  }
-40039: # 2211 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual iter_type
-40039:       do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, bool&) const;
-40039: 
-40039:       virtual iter_type
-40039:       do_get(iter_type __beg, iter_type __end, ios_base& __io,
-40039:       ios_base::iostate& __err, long& __v) const
-40039:       { return _M_extract_int(__beg, __end, __io, __err, __v); }
-40039: 
-40039:       virtual iter_type
-40039:       do_get(iter_type __beg, iter_type __end, ios_base& __io,
-40039:       ios_base::iostate& __err, unsigned short& __v) const
-40039:       { return _M_extract_int(__beg, __end, __io, __err, __v); }
-40039: 
-40039:       virtual iter_type
-40039:       do_get(iter_type __beg, iter_type __end, ios_base& __io,
-40039:       ios_base::iostate& __err, unsigned int& __v) const
-40039:       { return _M_extract_int(__beg, __end, __io, __err, __v); }
-40039: 
-40039:       virtual iter_type
-40039:       do_get(iter_type __beg, iter_type __end, ios_base& __io,
-40039:       ios_base::iostate& __err, unsigned long& __v) const
-40039:       { return _M_extract_int(__beg, __end, __io, __err, __v); }
-40039: 
-40039: 
-40039:       virtual iter_type
-40039:       do_get(iter_type __beg, iter_type __end, ios_base& __io,
-40039:       ios_base::iostate& __err, long long& __v) const
-40039:       { return _M_extract_int(__beg, __end, __io, __err, __v); }
-40039: 
-40039:       virtual iter_type
-40039:       do_get(iter_type __beg, iter_type __end, ios_base& __io,
-40039:       ios_base::iostate& __err, unsigned long long& __v) const
-40039:       { return _M_extract_int(__beg, __end, __io, __err, __v); }
-40039: 
-40039: 
-40039:       virtual iter_type
-40039:       do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, float&) const;
-40039: 
-40039:       virtual iter_type
-40039:       do_get(iter_type, iter_type, ios_base&, ios_base::iostate&,
-40039:       double&) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       virtual iter_type
-40039:       do_get(iter_type, iter_type, ios_base&, ios_base::iostate&,
-40039:       long double&) const;
-40039: 
-40039: 
-40039:       virtual iter_type
-40039:       do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, void*&) const;
-40039: # 2274 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:     };
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     locale::id num_get<_CharT, _InIter>::id;
-40039: # 2292 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:   template<typename _CharT, typename _OutIter>
-40039:     class num_put : public locale::facet
-40039:     {
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef _OutIter iter_type;
-40039: 
-40039: 
-40039: 
-40039:       static locale::id id;
-40039: # 2313 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       explicit
-40039:       num_put(size_t __refs = 0) : facet(__refs) { }
-40039: # 2331 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       iter_type
-40039:       put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const
-40039:       { return this->do_put(__s, __io, __fill, __v); }
-40039: # 2373 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       iter_type
-40039:       put(iter_type __s, ios_base& __io, char_type __fill, long __v) const
-40039:       { return this->do_put(__s, __io, __fill, __v); }
-40039: 
-40039:       iter_type
-40039:       put(iter_type __s, ios_base& __io, char_type __fill,
-40039:    unsigned long __v) const
-40039:       { return this->do_put(__s, __io, __fill, __v); }
-40039: 
-40039: 
-40039:       iter_type
-40039:       put(iter_type __s, ios_base& __io, char_type __fill, long long __v) const
-40039:       { return this->do_put(__s, __io, __fill, __v); }
-40039: 
-40039:       iter_type
-40039:       put(iter_type __s, ios_base& __io, char_type __fill,
-40039:    unsigned long long __v) const
-40039:       { return this->do_put(__s, __io, __fill, __v); }
-40039: # 2436 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       iter_type
-40039:       put(iter_type __s, ios_base& __io, char_type __fill, double __v) const
-40039:       { return this->do_put(__s, __io, __fill, __v); }
-40039: 
-40039:       iter_type
-40039:       put(iter_type __s, ios_base& __io, char_type __fill,
-40039:    long double __v) const
-40039:       { return this->do_put(__s, __io, __fill, __v); }
-40039: # 2461 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       iter_type
-40039:       put(iter_type __s, ios_base& __io, char_type __fill,
-40039:    const void* __v) const
-40039:       { return this->do_put(__s, __io, __fill, __v); }
-40039: 
-40039:     protected:
-40039:       template<typename _ValueT>
-40039:  iter_type
-40039:  _M_insert_float(iter_type, ios_base& __io, char_type __fill,
-40039:    char __mod, _ValueT __v) const;
-40039: 
-40039:       void
-40039:       _M_group_float(const char* __grouping, size_t __grouping_size,
-40039:        char_type __sep, const char_type* __p, char_type* __new,
-40039:        char_type* __cs, int& __len) const;
-40039: 
-40039:       template<typename _ValueT>
-40039:  iter_type
-40039:  _M_insert_int(iter_type, ios_base& __io, char_type __fill,
-40039:         _ValueT __v) const;
-40039: 
-40039:       void
-40039:       _M_group_int(const char* __grouping, size_t __grouping_size,
-40039:      char_type __sep, ios_base& __io, char_type* __new,
-40039:      char_type* __cs, int& __len) const;
-40039: 
-40039:       void
-40039:       _M_pad(char_type __fill, streamsize __w, ios_base& __io,
-40039:       char_type* __new, const char_type* __cs, int& __len) const;
-40039: 
-40039: 
-40039:       virtual
-40039:       ~num_put() { }
-40039: # 2509 "/usr/include/c++/8/bits/locale_facets.h" 3
-40039:       virtual iter_type
-40039:       do_put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const;
-40039: 
-40039:       virtual iter_type
-40039:       do_put(iter_type __s, ios_base& __io, char_type __fill, long __v) const
-40039:       { return _M_insert_int(__s, __io, __fill, __v); }
-40039: 
-40039:       virtual iter_type
-40039:       do_put(iter_type __s, ios_base& __io, char_type __fill,
-40039:       unsigned long __v) const
-40039:       { return _M_insert_int(__s, __io, __fill, __v); }
-40039: 
-40039: 
-40039:       virtual iter_type
-40039:       do_put(iter_type __s, ios_base& __io, char_type __fill,
-40039:       long long __v) const
-40039:       { return _M_insert_int(__s, __io, __fill, __v); }
-40039: 
-40039:       virtual iter_type
-40039:       do_put(iter_type __s, ios_base& __io, char_type __fill,
-40039:       unsigned long long __v) const
-40039:       { return _M_insert_int(__s, __io, __fill, __v); }
-40039: 
-40039: 
-40039:       virtual iter_type
-40039:       do_put(iter_type, ios_base&, char_type, double) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       virtual iter_type
-40039:       do_put(iter_type, ios_base&, char_type, long double) const;
-40039: 
-40039: 
-40039:       virtual iter_type
-40039:       do_put(iter_type, ios_base&, char_type, const void*) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     };
-40039: 
-40039:   template <typename _CharT, typename _OutIter>
-40039:     locale::id num_put<_CharT, _OutIter>::id;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     inline bool
-40039:     isspace(_CharT __c, const locale& __loc)
-40039:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::space, __c); }
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     inline bool
-40039:     isprint(_CharT __c, const locale& __loc)
-40039:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::print, __c); }
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     inline bool
-40039:     iscntrl(_CharT __c, const locale& __loc)
-40039:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::cntrl, __c); }
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     inline bool
-40039:     isupper(_CharT __c, const locale& __loc)
-40039:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::upper, __c); }
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     inline bool
-40039:     islower(_CharT __c, const locale& __loc)
-40039:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::lower, __c); }
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     inline bool
-40039:     isalpha(_CharT __c, const locale& __loc)
-40039:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::alpha, __c); }
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     inline bool
-40039:     isdigit(_CharT __c, const locale& __loc)
-40039:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::digit, __c); }
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     inline bool
-40039:     ispunct(_CharT __c, const locale& __loc)
-40039:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::punct, __c); }
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     inline bool
-40039:     isxdigit(_CharT __c, const locale& __loc)
-40039:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::xdigit, __c); }
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     inline bool
-40039:     isalnum(_CharT __c, const locale& __loc)
-40039:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::alnum, __c); }
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     inline bool
-40039:     isgraph(_CharT __c, const locale& __loc)
-40039:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::graph, __c); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     inline bool
-40039:     isblank(_CharT __c, const locale& __loc)
-40039:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::blank, __c); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     inline _CharT
-40039:     toupper(_CharT __c, const locale& __loc)
-40039:     { return use_facet<ctype<_CharT> >(__loc).toupper(__c); }
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     inline _CharT
-40039:     tolower(_CharT __c, const locale& __loc)
-40039:     { return use_facet<ctype<_CharT> >(__loc).tolower(__c); }
-40039: 
-40039: 
-40039: }
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/locale_facets.tcc" 1 3
-40039: # 33 "/usr/include/c++/8/bits/locale_facets.tcc" 3
-40039:        
-40039: # 34 "/usr/include/c++/8/bits/locale_facets.tcc" 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Facet>
-40039:     struct __use_cache
-40039:     {
-40039:       const _Facet*
-40039:       operator() (const locale& __loc) const;
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     struct __use_cache<__numpunct_cache<_CharT> >
-40039:     {
-40039:       const __numpunct_cache<_CharT>*
-40039:       operator() (const locale& __loc) const
-40039:       {
-40039:  const size_t __i = numpunct<_CharT>::id._M_id();
-40039:  const locale::facet** __caches = __loc._M_impl->_M_caches;
-40039:  if (!__caches[__i])
-40039:    {
-40039:      __numpunct_cache<_CharT>* __tmp = 0;
-40039:      try
-40039:        {
-40039:   __tmp = new __numpunct_cache<_CharT>;
-40039:   __tmp->_M_cache(__loc);
-40039:        }
-40039:      catch(...)
-40039:        {
-40039:   delete __tmp;
-40039:   throw;
-40039:        }
-40039:      __loc._M_impl->_M_install_cache(__tmp, __i);
-40039:    }
-40039:  return static_cast<const __numpunct_cache<_CharT>*>(__caches[__i]);
-40039:       }
-40039:     };
-40039: 
-40039:   template<typename _CharT>
-40039:     void
-40039:     __numpunct_cache<_CharT>::_M_cache(const locale& __loc)
-40039:     {
-40039:       const numpunct<_CharT>& __np = use_facet<numpunct<_CharT> >(__loc);
-40039: 
-40039:       char* __grouping = 0;
-40039:       _CharT* __truename = 0;
-40039:       _CharT* __falsename = 0;
-40039:       try
-40039:  {
-40039:    const string& __g = __np.grouping();
-40039:    _M_grouping_size = __g.size();
-40039:    __grouping = new char[_M_grouping_size];
-40039:    __g.copy(__grouping, _M_grouping_size);
-40039:    _M_use_grouping = (_M_grouping_size
-40039:         && static_cast<signed char>(__grouping[0]) > 0
-40039:         && (__grouping[0]
-40039:      != __gnu_cxx::__numeric_traits<char>::__max));
-40039: 
-40039:    const basic_string<_CharT>& __tn = __np.truename();
-40039:    _M_truename_size = __tn.size();
-40039:    __truename = new _CharT[_M_truename_size];
-40039:    __tn.copy(__truename, _M_truename_size);
-40039: 
-40039:    const basic_string<_CharT>& __fn = __np.falsename();
-40039:    _M_falsename_size = __fn.size();
-40039:    __falsename = new _CharT[_M_falsename_size];
-40039:    __fn.copy(__falsename, _M_falsename_size);
-40039: 
-40039:    _M_decimal_point = __np.decimal_point();
-40039:    _M_thousands_sep = __np.thousands_sep();
-40039: 
-40039:    const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__loc);
-40039:    __ct.widen(__num_base::_S_atoms_out,
-40039:        __num_base::_S_atoms_out
-40039:        + __num_base::_S_oend, _M_atoms_out);
-40039:    __ct.widen(__num_base::_S_atoms_in,
-40039:        __num_base::_S_atoms_in
-40039:        + __num_base::_S_iend, _M_atoms_in);
-40039: 
-40039:    _M_grouping = __grouping;
-40039:    _M_truename = __truename;
-40039:    _M_falsename = __falsename;
-40039:    _M_allocated = true;
-40039:  }
-40039:       catch(...)
-40039:  {
-40039:    delete [] __grouping;
-40039:    delete [] __truename;
-40039:    delete [] __falsename;
-40039:    throw;
-40039:  }
-40039:     }
-40039: # 139 "/usr/include/c++/8/bits/locale_facets.tcc" 3
-40039:   __attribute__ ((__pure__)) bool
-40039:   __verify_grouping(const char* __grouping, size_t __grouping_size,
-40039:       const string& __grouping_tmp) throw ();
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     __attribute ((__abi_tag__ ("cxx11")))
-40039:     _InIter
-40039:     num_get<_CharT, _InIter>::
-40039:     _M_extract_float(_InIter __beg, _InIter __end, ios_base& __io,
-40039:        ios_base::iostate& __err, string& __xtrc) const
-40039:     {
-40039:       typedef char_traits<_CharT> __traits_type;
-40039:       typedef __numpunct_cache<_CharT> __cache_type;
-40039:       __use_cache<__cache_type> __uc;
-40039:       const locale& __loc = __io._M_getloc();
-40039:       const __cache_type* __lc = __uc(__loc);
-40039:       const _CharT* __lit = __lc->_M_atoms_in;
-40039:       char_type __c = char_type();
-40039: 
-40039: 
-40039:       bool __testeof = __beg == __end;
-40039: 
-40039: 
-40039:       if (!__testeof)
-40039:  {
-40039:    __c = *__beg;
-40039:    const bool __plus = __c == __lit[__num_base::_S_iplus];
-40039:    if ((__plus || __c == __lit[__num_base::_S_iminus])
-40039:        && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
-40039:        && !(__c == __lc->_M_decimal_point))
-40039:      {
-40039:        __xtrc += __plus ? '+' : '-';
-40039:        if (++__beg != __end)
-40039:   __c = *__beg;
-40039:        else
-40039:   __testeof = true;
-40039:      }
-40039:  }
-40039: 
-40039: 
-40039:       bool __found_mantissa = false;
-40039:       int __sep_pos = 0;
-40039:       while (!__testeof)
-40039:  {
-40039:    if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
-40039:        || __c == __lc->_M_decimal_point)
-40039:      break;
-40039:    else if (__c == __lit[__num_base::_S_izero])
-40039:      {
-40039:        if (!__found_mantissa)
-40039:   {
-40039:     __xtrc += '0';
-40039:     __found_mantissa = true;
-40039:   }
-40039:        ++__sep_pos;
-40039: 
-40039:        if (++__beg != __end)
-40039:   __c = *__beg;
-40039:        else
-40039:   __testeof = true;
-40039:      }
-40039:    else
-40039:      break;
-40039:  }
-40039: 
-40039: 
-40039:       bool __found_dec = false;
-40039:       bool __found_sci = false;
-40039:       string __found_grouping;
-40039:       if (__lc->_M_use_grouping)
-40039:  __found_grouping.reserve(32);
-40039:       const char_type* __lit_zero = __lit + __num_base::_S_izero;
-40039: 
-40039:       if (!__lc->_M_allocated)
-40039: 
-40039:  while (!__testeof)
-40039:    {
-40039:      const int __digit = _M_find(__lit_zero, 10, __c);
-40039:      if (__digit != -1)
-40039:        {
-40039:   __xtrc += '0' + __digit;
-40039:   __found_mantissa = true;
-40039:        }
-40039:      else if (__c == __lc->_M_decimal_point
-40039:        && !__found_dec && !__found_sci)
-40039:        {
-40039:   __xtrc += '.';
-40039:   __found_dec = true;
-40039:        }
-40039:      else if ((__c == __lit[__num_base::_S_ie]
-40039:         || __c == __lit[__num_base::_S_iE])
-40039:        && !__found_sci && __found_mantissa)
-40039:        {
-40039: 
-40039:   __xtrc += 'e';
-40039:   __found_sci = true;
-40039: 
-40039: 
-40039:   if (++__beg != __end)
-40039:     {
-40039:       __c = *__beg;
-40039:       const bool __plus = __c == __lit[__num_base::_S_iplus];
-40039:       if (__plus || __c == __lit[__num_base::_S_iminus])
-40039:         __xtrc += __plus ? '+' : '-';
-40039:       else
-40039:         continue;
-40039:     }
-40039:   else
-40039:     {
-40039:       __testeof = true;
-40039:       break;
-40039:     }
-40039:        }
-40039:      else
-40039:        break;
-40039: 
-40039:      if (++__beg != __end)
-40039:        __c = *__beg;
-40039:      else
-40039:        __testeof = true;
-40039:    }
-40039:       else
-40039:  while (!__testeof)
-40039:    {
-40039: 
-40039: 
-40039:      if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
-40039:        {
-40039:   if (!__found_dec && !__found_sci)
-40039:     {
-40039: 
-40039: 
-40039:       if (__sep_pos)
-40039:         {
-40039:    __found_grouping += static_cast<char>(__sep_pos);
-40039:    __sep_pos = 0;
-40039:         }
-40039:       else
-40039:         {
-40039: 
-40039: 
-40039:    __xtrc.clear();
-40039:    break;
-40039:         }
-40039:     }
-40039:   else
-40039:     break;
-40039:        }
-40039:      else if (__c == __lc->_M_decimal_point)
-40039:        {
-40039:   if (!__found_dec && !__found_sci)
-40039:     {
-40039: 
-40039: 
-40039: 
-40039:       if (__found_grouping.size())
-40039:         __found_grouping += static_cast<char>(__sep_pos);
-40039:       __xtrc += '.';
-40039:       __found_dec = true;
-40039:     }
-40039:   else
-40039:     break;
-40039:        }
-40039:      else
-40039:        {
-40039:   const char_type* __q =
-40039:     __traits_type::find(__lit_zero, 10, __c);
-40039:   if (__q)
-40039:     {
-40039:       __xtrc += '0' + (__q - __lit_zero);
-40039:       __found_mantissa = true;
-40039:       ++__sep_pos;
-40039:     }
-40039:   else if ((__c == __lit[__num_base::_S_ie]
-40039:      || __c == __lit[__num_base::_S_iE])
-40039:     && !__found_sci && __found_mantissa)
-40039:     {
-40039: 
-40039:       if (__found_grouping.size() && !__found_dec)
-40039:         __found_grouping += static_cast<char>(__sep_pos);
-40039:       __xtrc += 'e';
-40039:       __found_sci = true;
-40039: 
-40039: 
-40039:       if (++__beg != __end)
-40039:         {
-40039:    __c = *__beg;
-40039:    const bool __plus = __c == __lit[__num_base::_S_iplus];
-40039:    if ((__plus || __c == __lit[__num_base::_S_iminus])
-40039:        && !(__lc->_M_use_grouping
-40039:      && __c == __lc->_M_thousands_sep)
-40039:        && !(__c == __lc->_M_decimal_point))
-40039:         __xtrc += __plus ? '+' : '-';
-40039:    else
-40039:      continue;
-40039:         }
-40039:       else
-40039:         {
-40039:    __testeof = true;
-40039:    break;
-40039:         }
-40039:     }
-40039:   else
-40039:     break;
-40039:        }
-40039: 
-40039:      if (++__beg != __end)
-40039:        __c = *__beg;
-40039:      else
-40039:        __testeof = true;
-40039:    }
-40039: 
-40039: 
-40039: 
-40039:       if (__found_grouping.size())
-40039:         {
-40039: 
-40039:    if (!__found_dec && !__found_sci)
-40039:      __found_grouping += static_cast<char>(__sep_pos);
-40039: 
-40039:           if (!std::__verify_grouping(__lc->_M_grouping,
-40039:           __lc->_M_grouping_size,
-40039:           __found_grouping))
-40039:      __err = ios_base::failbit;
-40039:         }
-40039: 
-40039:       return __beg;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     template<typename _ValueT>
-40039:       __attribute ((__abi_tag__ ("cxx11")))
-40039:       _InIter
-40039:       num_get<_CharT, _InIter>::
-40039:       _M_extract_int(_InIter __beg, _InIter __end, ios_base& __io,
-40039:        ios_base::iostate& __err, _ValueT& __v) const
-40039:       {
-40039:         typedef char_traits<_CharT> __traits_type;
-40039:  using __gnu_cxx::__add_unsigned;
-40039:  typedef typename __add_unsigned<_ValueT>::__type __unsigned_type;
-40039:  typedef __numpunct_cache<_CharT> __cache_type;
-40039:  __use_cache<__cache_type> __uc;
-40039:  const locale& __loc = __io._M_getloc();
-40039:  const __cache_type* __lc = __uc(__loc);
-40039:  const _CharT* __lit = __lc->_M_atoms_in;
-40039:  char_type __c = char_type();
-40039: 
-40039: 
-40039:  const ios_base::fmtflags __basefield = __io.flags()
-40039:                                         & ios_base::basefield;
-40039:  const bool __oct = __basefield == ios_base::oct;
-40039:  int __base = __oct ? 8 : (__basefield == ios_base::hex ? 16 : 10);
-40039: 
-40039: 
-40039:  bool __testeof = __beg == __end;
-40039: 
-40039: 
-40039:  bool __negative = false;
-40039:  if (!__testeof)
-40039:    {
-40039:      __c = *__beg;
-40039:      __negative = __c == __lit[__num_base::_S_iminus];
-40039:      if ((__negative || __c == __lit[__num_base::_S_iplus])
-40039:   && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
-40039:   && !(__c == __lc->_M_decimal_point))
-40039:        {
-40039:   if (++__beg != __end)
-40039:     __c = *__beg;
-40039:   else
-40039:     __testeof = true;
-40039:        }
-40039:    }
-40039: 
-40039: 
-40039: 
-40039:  bool __found_zero = false;
-40039:  int __sep_pos = 0;
-40039:  while (!__testeof)
-40039:    {
-40039:      if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
-40039:   || __c == __lc->_M_decimal_point)
-40039:        break;
-40039:      else if (__c == __lit[__num_base::_S_izero]
-40039:        && (!__found_zero || __base == 10))
-40039:        {
-40039:   __found_zero = true;
-40039:   ++__sep_pos;
-40039:   if (__basefield == 0)
-40039:     __base = 8;
-40039:   if (__base == 8)
-40039:     __sep_pos = 0;
-40039:        }
-40039:      else if (__found_zero
-40039:        && (__c == __lit[__num_base::_S_ix]
-40039:     || __c == __lit[__num_base::_S_iX]))
-40039:        {
-40039:   if (__basefield == 0)
-40039:     __base = 16;
-40039:   if (__base == 16)
-40039:     {
-40039:       __found_zero = false;
-40039:       __sep_pos = 0;
-40039:     }
-40039:   else
-40039:     break;
-40039:        }
-40039:      else
-40039:        break;
-40039: 
-40039:      if (++__beg != __end)
-40039:        {
-40039:   __c = *__beg;
-40039:   if (!__found_zero)
-40039:     break;
-40039:        }
-40039:      else
-40039:        __testeof = true;
-40039:    }
-40039: 
-40039: 
-40039: 
-40039:  const size_t __len = (__base == 16 ? __num_base::_S_iend
-40039:          - __num_base::_S_izero : __base);
-40039: 
-40039: 
-40039:  typedef __gnu_cxx::__numeric_traits<_ValueT> __num_traits;
-40039:  string __found_grouping;
-40039:  if (__lc->_M_use_grouping)
-40039:    __found_grouping.reserve(32);
-40039:  bool __testfail = false;
-40039:  bool __testoverflow = false;
-40039:  const __unsigned_type __max =
-40039:    (__negative && __num_traits::__is_signed)
-40039:    ? -static_cast<__unsigned_type>(__num_traits::__min)
-40039:    : __num_traits::__max;
-40039:  const __unsigned_type __smax = __max / __base;
-40039:  __unsigned_type __result = 0;
-40039:  int __digit = 0;
-40039:  const char_type* __lit_zero = __lit + __num_base::_S_izero;
-40039: 
-40039:  if (!__lc->_M_allocated)
-40039: 
-40039:    while (!__testeof)
-40039:      {
-40039:        __digit = _M_find(__lit_zero, __len, __c);
-40039:        if (__digit == -1)
-40039:   break;
-40039: 
-40039:        if (__result > __smax)
-40039:   __testoverflow = true;
-40039:        else
-40039:   {
-40039:     __result *= __base;
-40039:     __testoverflow |= __result > __max - __digit;
-40039:     __result += __digit;
-40039:     ++__sep_pos;
-40039:   }
-40039: 
-40039:        if (++__beg != __end)
-40039:   __c = *__beg;
-40039:        else
-40039:   __testeof = true;
-40039:      }
-40039:  else
-40039:    while (!__testeof)
-40039:      {
-40039: 
-40039: 
-40039:        if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
-40039:   {
-40039: 
-40039: 
-40039:     if (__sep_pos)
-40039:       {
-40039:         __found_grouping += static_cast<char>(__sep_pos);
-40039:         __sep_pos = 0;
-40039:       }
-40039:     else
-40039:       {
-40039:         __testfail = true;
-40039:         break;
-40039:       }
-40039:   }
-40039:        else if (__c == __lc->_M_decimal_point)
-40039:   break;
-40039:        else
-40039:   {
-40039:     const char_type* __q =
-40039:       __traits_type::find(__lit_zero, __len, __c);
-40039:     if (!__q)
-40039:       break;
-40039: 
-40039:     __digit = __q - __lit_zero;
-40039:     if (__digit > 15)
-40039:       __digit -= 6;
-40039:     if (__result > __smax)
-40039:       __testoverflow = true;
-40039:     else
-40039:       {
-40039:         __result *= __base;
-40039:         __testoverflow |= __result > __max - __digit;
-40039:         __result += __digit;
-40039:         ++__sep_pos;
-40039:       }
-40039:   }
-40039: 
-40039:        if (++__beg != __end)
-40039:   __c = *__beg;
-40039:        else
-40039:   __testeof = true;
-40039:      }
-40039: 
-40039: 
-40039: 
-40039:  if (__found_grouping.size())
-40039:    {
-40039: 
-40039:      __found_grouping += static_cast<char>(__sep_pos);
-40039: 
-40039:      if (!std::__verify_grouping(__lc->_M_grouping,
-40039:      __lc->_M_grouping_size,
-40039:      __found_grouping))
-40039:        __err = ios_base::failbit;
-40039:    }
-40039: 
-40039: 
-40039: 
-40039:  if ((!__sep_pos && !__found_zero && !__found_grouping.size())
-40039:      || __testfail)
-40039:    {
-40039:      __v = 0;
-40039:      __err = ios_base::failbit;
-40039:    }
-40039:  else if (__testoverflow)
-40039:    {
-40039:      if (__negative && __num_traits::__is_signed)
-40039:        __v = __num_traits::__min;
-40039:      else
-40039:        __v = __num_traits::__max;
-40039:      __err = ios_base::failbit;
-40039:    }
-40039:  else
-40039:    __v = __negative ? -__result : __result;
-40039: 
-40039:  if (__testeof)
-40039:    __err |= ios_base::eofbit;
-40039:  return __beg;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     _InIter
-40039:     num_get<_CharT, _InIter>::
-40039:     do_get(iter_type __beg, iter_type __end, ios_base& __io,
-40039:            ios_base::iostate& __err, bool& __v) const
-40039:     {
-40039:       if (!(__io.flags() & ios_base::boolalpha))
-40039:         {
-40039: 
-40039: 
-40039: 
-40039:    long __l = -1;
-40039:           __beg = _M_extract_int(__beg, __end, __io, __err, __l);
-40039:    if (__l == 0 || __l == 1)
-40039:      __v = bool(__l);
-40039:    else
-40039:      {
-40039: 
-40039: 
-40039:        __v = true;
-40039:        __err = ios_base::failbit;
-40039:        if (__beg == __end)
-40039:   __err |= ios_base::eofbit;
-40039:      }
-40039:         }
-40039:       else
-40039:         {
-40039: 
-40039:    typedef __numpunct_cache<_CharT> __cache_type;
-40039:    __use_cache<__cache_type> __uc;
-40039:    const locale& __loc = __io._M_getloc();
-40039:    const __cache_type* __lc = __uc(__loc);
-40039: 
-40039:    bool __testf = true;
-40039:    bool __testt = true;
-40039:    bool __donef = __lc->_M_falsename_size == 0;
-40039:    bool __donet = __lc->_M_truename_size == 0;
-40039:    bool __testeof = false;
-40039:    size_t __n = 0;
-40039:    while (!__donef || !__donet)
-40039:      {
-40039:        if (__beg == __end)
-40039:   {
-40039:     __testeof = true;
-40039:     break;
-40039:   }
-40039: 
-40039:        const char_type __c = *__beg;
-40039: 
-40039:        if (!__donef)
-40039:   __testf = __c == __lc->_M_falsename[__n];
-40039: 
-40039:        if (!__testf && __donet)
-40039:   break;
-40039: 
-40039:        if (!__donet)
-40039:   __testt = __c == __lc->_M_truename[__n];
-40039: 
-40039:        if (!__testt && __donef)
-40039:   break;
-40039: 
-40039:        if (!__testt && !__testf)
-40039:   break;
-40039: 
-40039:        ++__n;
-40039:        ++__beg;
-40039: 
-40039:        __donef = !__testf || __n >= __lc->_M_falsename_size;
-40039:        __donet = !__testt || __n >= __lc->_M_truename_size;
-40039:      }
-40039:    if (__testf && __n == __lc->_M_falsename_size && __n)
-40039:      {
-40039:        __v = false;
-40039:        if (__testt && __n == __lc->_M_truename_size)
-40039:   __err = ios_base::failbit;
-40039:        else
-40039:   __err = __testeof ? ios_base::eofbit : ios_base::goodbit;
-40039:      }
-40039:    else if (__testt && __n == __lc->_M_truename_size && __n)
-40039:      {
-40039:        __v = true;
-40039:        __err = __testeof ? ios_base::eofbit : ios_base::goodbit;
-40039:      }
-40039:    else
-40039:      {
-40039: 
-40039: 
-40039:        __v = false;
-40039:        __err = ios_base::failbit;
-40039:        if (__testeof)
-40039:   __err |= ios_base::eofbit;
-40039:      }
-40039:  }
-40039:       return __beg;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     _InIter
-40039:     num_get<_CharT, _InIter>::
-40039:     do_get(iter_type __beg, iter_type __end, ios_base& __io,
-40039:     ios_base::iostate& __err, float& __v) const
-40039:     {
-40039:       string __xtrc;
-40039:       __xtrc.reserve(32);
-40039:       __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
-40039:       std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale());
-40039:       if (__beg == __end)
-40039:  __err |= ios_base::eofbit;
-40039:       return __beg;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     _InIter
-40039:     num_get<_CharT, _InIter>::
-40039:     do_get(iter_type __beg, iter_type __end, ios_base& __io,
-40039:            ios_base::iostate& __err, double& __v) const
-40039:     {
-40039:       string __xtrc;
-40039:       __xtrc.reserve(32);
-40039:       __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
-40039:       std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale());
-40039:       if (__beg == __end)
-40039:  __err |= ios_base::eofbit;
-40039:       return __beg;
-40039:     }
-40039: # 735 "/usr/include/c++/8/bits/locale_facets.tcc" 3
-40039:   template<typename _CharT, typename _InIter>
-40039:     _InIter
-40039:     num_get<_CharT, _InIter>::
-40039:     do_get(iter_type __beg, iter_type __end, ios_base& __io,
-40039:            ios_base::iostate& __err, long double& __v) const
-40039:     {
-40039:       string __xtrc;
-40039:       __xtrc.reserve(32);
-40039:       __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
-40039:       std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale());
-40039:       if (__beg == __end)
-40039:  __err |= ios_base::eofbit;
-40039:       return __beg;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     _InIter
-40039:     num_get<_CharT, _InIter>::
-40039:     do_get(iter_type __beg, iter_type __end, ios_base& __io,
-40039:            ios_base::iostate& __err, void*& __v) const
-40039:     {
-40039: 
-40039:       typedef ios_base::fmtflags fmtflags;
-40039:       const fmtflags __fmt = __io.flags();
-40039:       __io.flags((__fmt & ~ios_base::basefield) | ios_base::hex);
-40039: 
-40039:       typedef __gnu_cxx::__conditional_type<(sizeof(void*)
-40039:           <= sizeof(unsigned long)),
-40039:  unsigned long, unsigned long long>::__type _UIntPtrType;
-40039: 
-40039:       _UIntPtrType __ul;
-40039:       __beg = _M_extract_int(__beg, __end, __io, __err, __ul);
-40039: 
-40039: 
-40039:       __io.flags(__fmt);
-40039: 
-40039:       __v = reinterpret_cast<void*>(__ul);
-40039:       return __beg;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _OutIter>
-40039:     void
-40039:     num_put<_CharT, _OutIter>::
-40039:     _M_pad(_CharT __fill, streamsize __w, ios_base& __io,
-40039:     _CharT* __new, const _CharT* __cs, int& __len) const
-40039:     {
-40039: 
-40039: 
-40039:       __pad<_CharT, char_traits<_CharT> >::_S_pad(__io, __fill, __new,
-40039:         __cs, __w, __len);
-40039:       __len = static_cast<int>(__w);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _ValueT>
-40039:     int
-40039:     __int_to_char(_CharT* __bufend, _ValueT __v, const _CharT* __lit,
-40039:     ios_base::fmtflags __flags, bool __dec)
-40039:     {
-40039:       _CharT* __buf = __bufend;
-40039:       if (__builtin_expect(__dec, true))
-40039:  {
-40039: 
-40039:    do
-40039:      {
-40039:        *--__buf = __lit[(__v % 10) + __num_base::_S_odigits];
-40039:        __v /= 10;
-40039:      }
-40039:    while (__v != 0);
-40039:  }
-40039:       else if ((__flags & ios_base::basefield) == ios_base::oct)
-40039:  {
-40039: 
-40039:    do
-40039:      {
-40039:        *--__buf = __lit[(__v & 0x7) + __num_base::_S_odigits];
-40039:        __v >>= 3;
-40039:      }
-40039:    while (__v != 0);
-40039:  }
-40039:       else
-40039:  {
-40039: 
-40039:    const bool __uppercase = __flags & ios_base::uppercase;
-40039:    const int __case_offset = __uppercase ? __num_base::_S_oudigits
-40039:                                          : __num_base::_S_odigits;
-40039:    do
-40039:      {
-40039:        *--__buf = __lit[(__v & 0xf) + __case_offset];
-40039:        __v >>= 4;
-40039:      }
-40039:    while (__v != 0);
-40039:  }
-40039:       return __bufend - __buf;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _OutIter>
-40039:     void
-40039:     num_put<_CharT, _OutIter>::
-40039:     _M_group_int(const char* __grouping, size_t __grouping_size, _CharT __sep,
-40039:    ios_base&, _CharT* __new, _CharT* __cs, int& __len) const
-40039:     {
-40039:       _CharT* __p = std::__add_grouping(__new, __sep, __grouping,
-40039:      __grouping_size, __cs, __cs + __len);
-40039:       __len = __p - __new;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _OutIter>
-40039:     template<typename _ValueT>
-40039:       _OutIter
-40039:       num_put<_CharT, _OutIter>::
-40039:       _M_insert_int(_OutIter __s, ios_base& __io, _CharT __fill,
-40039:       _ValueT __v) const
-40039:       {
-40039:  using __gnu_cxx::__add_unsigned;
-40039:  typedef typename __add_unsigned<_ValueT>::__type __unsigned_type;
-40039:  typedef __numpunct_cache<_CharT> __cache_type;
-40039:  __use_cache<__cache_type> __uc;
-40039:  const locale& __loc = __io._M_getloc();
-40039:  const __cache_type* __lc = __uc(__loc);
-40039:  const _CharT* __lit = __lc->_M_atoms_out;
-40039:  const ios_base::fmtflags __flags = __io.flags();
-40039: 
-40039: 
-40039:  const int __ilen = 5 * sizeof(_ValueT);
-40039:  _CharT* __cs = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
-40039:             * __ilen));
-40039: 
-40039: 
-40039: 
-40039:  const ios_base::fmtflags __basefield = __flags & ios_base::basefield;
-40039:  const bool __dec = (__basefield != ios_base::oct
-40039:        && __basefield != ios_base::hex);
-40039:  const __unsigned_type __u = ((__v > 0 || !__dec)
-40039:          ? __unsigned_type(__v)
-40039:          : -__unsigned_type(__v));
-40039:   int __len = __int_to_char(__cs + __ilen, __u, __lit, __flags, __dec);
-40039:  __cs += __ilen - __len;
-40039: 
-40039: 
-40039:  if (__lc->_M_use_grouping)
-40039:    {
-40039: 
-40039: 
-40039:      _CharT* __cs2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
-40039:           * (__len + 1)
-40039:           * 2));
-40039:      _M_group_int(__lc->_M_grouping, __lc->_M_grouping_size,
-40039:     __lc->_M_thousands_sep, __io, __cs2 + 2, __cs, __len);
-40039:      __cs = __cs2 + 2;
-40039:    }
-40039: 
-40039: 
-40039:  if (__builtin_expect(__dec, true))
-40039:    {
-40039: 
-40039:      if (__v >= 0)
-40039:        {
-40039:   if (bool(__flags & ios_base::showpos)
-40039:       && __gnu_cxx::__numeric_traits<_ValueT>::__is_signed)
-40039:     *--__cs = __lit[__num_base::_S_oplus], ++__len;
-40039:        }
-40039:      else
-40039:        *--__cs = __lit[__num_base::_S_ominus], ++__len;
-40039:    }
-40039:  else if (bool(__flags & ios_base::showbase) && __v)
-40039:    {
-40039:      if (__basefield == ios_base::oct)
-40039:        *--__cs = __lit[__num_base::_S_odigits], ++__len;
-40039:      else
-40039:        {
-40039: 
-40039:   const bool __uppercase = __flags & ios_base::uppercase;
-40039:   *--__cs = __lit[__num_base::_S_ox + __uppercase];
-40039: 
-40039:   *--__cs = __lit[__num_base::_S_odigits];
-40039:   __len += 2;
-40039:        }
-40039:    }
-40039: 
-40039: 
-40039:  const streamsize __w = __io.width();
-40039:  if (__w > static_cast<streamsize>(__len))
-40039:    {
-40039:      _CharT* __cs3 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
-40039:           * __w));
-40039:      _M_pad(__fill, __w, __io, __cs3, __cs, __len);
-40039:      __cs = __cs3;
-40039:    }
-40039:  __io.width(0);
-40039: 
-40039: 
-40039: 
-40039:  return std::__write(__s, __cs, __len);
-40039:       }
-40039: 
-40039:   template<typename _CharT, typename _OutIter>
-40039:     void
-40039:     num_put<_CharT, _OutIter>::
-40039:     _M_group_float(const char* __grouping, size_t __grouping_size,
-40039:      _CharT __sep, const _CharT* __p, _CharT* __new,
-40039:      _CharT* __cs, int& __len) const
-40039:     {
-40039: 
-40039: 
-40039: 
-40039:       const int __declen = __p ? __p - __cs : __len;
-40039:       _CharT* __p2 = std::__add_grouping(__new, __sep, __grouping,
-40039:       __grouping_size,
-40039:       __cs, __cs + __declen);
-40039: 
-40039: 
-40039:       int __newlen = __p2 - __new;
-40039:       if (__p)
-40039:  {
-40039:    char_traits<_CharT>::copy(__p2, __p, __len - __declen);
-40039:    __newlen += __len - __declen;
-40039:  }
-40039:       __len = __newlen;
-40039:     }
-40039: # 971 "/usr/include/c++/8/bits/locale_facets.tcc" 3
-40039:   template<typename _CharT, typename _OutIter>
-40039:     template<typename _ValueT>
-40039:       _OutIter
-40039:       num_put<_CharT, _OutIter>::
-40039:       _M_insert_float(_OutIter __s, ios_base& __io, _CharT __fill, char __mod,
-40039:          _ValueT __v) const
-40039:       {
-40039:  typedef __numpunct_cache<_CharT> __cache_type;
-40039:  __use_cache<__cache_type> __uc;
-40039:  const locale& __loc = __io._M_getloc();
-40039:  const __cache_type* __lc = __uc(__loc);
-40039: 
-40039: 
-40039:  const streamsize __prec = __io.precision() < 0 ? 6 : __io.precision();
-40039: 
-40039:  const int __max_digits =
-40039:    __gnu_cxx::__numeric_traits<_ValueT>::__digits10;
-40039: 
-40039: 
-40039:  int __len;
-40039: 
-40039:  char __fbuf[16];
-40039:  __num_base::_S_format_float(__io, __fbuf, __mod);
-40039: 
-40039: 
-40039: 
-40039:  const bool __use_prec =
-40039:    (__io.flags() & ios_base::floatfield) != ios_base::floatfield;
-40039: 
-40039: 
-40039: 
-40039:  int __cs_size = __max_digits * 3;
-40039:  char* __cs = static_cast<char*>(__builtin_alloca(__cs_size));
-40039:  if (__use_prec)
-40039:    __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
-40039:      __fbuf, __prec, __v);
-40039:  else
-40039:    __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
-40039:      __fbuf, __v);
-40039: 
-40039: 
-40039:  if (__len >= __cs_size)
-40039:    {
-40039:      __cs_size = __len + 1;
-40039:      __cs = static_cast<char*>(__builtin_alloca(__cs_size));
-40039:      if (__use_prec)
-40039:        __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
-40039:          __fbuf, __prec, __v);
-40039:      else
-40039:        __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
-40039:          __fbuf, __v);
-40039:    }
-40039: # 1044 "/usr/include/c++/8/bits/locale_facets.tcc" 3
-40039:  const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
-40039: 
-40039:  _CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
-40039:             * __len));
-40039:  __ctype.widen(__cs, __cs + __len, __ws);
-40039: 
-40039: 
-40039:  _CharT* __wp = 0;
-40039:  const char* __p = char_traits<char>::find(__cs, __len, '.');
-40039:  if (__p)
-40039:    {
-40039:      __wp = __ws + (__p - __cs);
-40039:      *__wp = __lc->_M_decimal_point;
-40039:    }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  if (__lc->_M_use_grouping
-40039:      && (__wp || __len < 3 || (__cs[1] <= '9' && __cs[2] <= '9'
-40039:           && __cs[1] >= '0' && __cs[2] >= '0')))
-40039:    {
-40039: 
-40039: 
-40039:      _CharT* __ws2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
-40039:           * __len * 2));
-40039: 
-40039:      streamsize __off = 0;
-40039:      if (__cs[0] == '-' || __cs[0] == '+')
-40039:        {
-40039:   __off = 1;
-40039:   __ws2[0] = __ws[0];
-40039:   __len -= 1;
-40039:        }
-40039: 
-40039:      _M_group_float(__lc->_M_grouping, __lc->_M_grouping_size,
-40039:       __lc->_M_thousands_sep, __wp, __ws2 + __off,
-40039:       __ws + __off, __len);
-40039:      __len += __off;
-40039: 
-40039:      __ws = __ws2;
-40039:    }
-40039: 
-40039: 
-40039:  const streamsize __w = __io.width();
-40039:  if (__w > static_cast<streamsize>(__len))
-40039:    {
-40039:      _CharT* __ws3 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
-40039:           * __w));
-40039:      _M_pad(__fill, __w, __io, __ws3, __ws, __len);
-40039:      __ws = __ws3;
-40039:    }
-40039:  __io.width(0);
-40039: 
-40039: 
-40039: 
-40039:  return std::__write(__s, __ws, __len);
-40039:       }
-40039: 
-40039:   template<typename _CharT, typename _OutIter>
-40039:     _OutIter
-40039:     num_put<_CharT, _OutIter>::
-40039:     do_put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const
-40039:     {
-40039:       const ios_base::fmtflags __flags = __io.flags();
-40039:       if ((__flags & ios_base::boolalpha) == 0)
-40039:         {
-40039:           const long __l = __v;
-40039:           __s = _M_insert_int(__s, __io, __fill, __l);
-40039:         }
-40039:       else
-40039:         {
-40039:    typedef __numpunct_cache<_CharT> __cache_type;
-40039:    __use_cache<__cache_type> __uc;
-40039:    const locale& __loc = __io._M_getloc();
-40039:    const __cache_type* __lc = __uc(__loc);
-40039: 
-40039:    const _CharT* __name = __v ? __lc->_M_truename
-40039:                               : __lc->_M_falsename;
-40039:    int __len = __v ? __lc->_M_truename_size
-40039:                    : __lc->_M_falsename_size;
-40039: 
-40039:    const streamsize __w = __io.width();
-40039:    if (__w > static_cast<streamsize>(__len))
-40039:      {
-40039:        const streamsize __plen = __w - __len;
-40039:        _CharT* __ps
-40039:   = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
-40039:        * __plen));
-40039: 
-40039:        char_traits<_CharT>::assign(__ps, __plen, __fill);
-40039:        __io.width(0);
-40039: 
-40039:        if ((__flags & ios_base::adjustfield) == ios_base::left)
-40039:   {
-40039:     __s = std::__write(__s, __name, __len);
-40039:     __s = std::__write(__s, __ps, __plen);
-40039:   }
-40039:        else
-40039:   {
-40039:     __s = std::__write(__s, __ps, __plen);
-40039:     __s = std::__write(__s, __name, __len);
-40039:   }
-40039:        return __s;
-40039:      }
-40039:    __io.width(0);
-40039:    __s = std::__write(__s, __name, __len);
-40039:  }
-40039:       return __s;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _OutIter>
-40039:     _OutIter
-40039:     num_put<_CharT, _OutIter>::
-40039:     do_put(iter_type __s, ios_base& __io, char_type __fill, double __v) const
-40039:     { return _M_insert_float(__s, __io, __fill, char(), __v); }
-40039: # 1169 "/usr/include/c++/8/bits/locale_facets.tcc" 3
-40039:   template<typename _CharT, typename _OutIter>
-40039:     _OutIter
-40039:     num_put<_CharT, _OutIter>::
-40039:     do_put(iter_type __s, ios_base& __io, char_type __fill,
-40039:     long double __v) const
-40039:     { return _M_insert_float(__s, __io, __fill, 'L', __v); }
-40039: 
-40039:   template<typename _CharT, typename _OutIter>
-40039:     _OutIter
-40039:     num_put<_CharT, _OutIter>::
-40039:     do_put(iter_type __s, ios_base& __io, char_type __fill,
-40039:            const void* __v) const
-40039:     {
-40039:       const ios_base::fmtflags __flags = __io.flags();
-40039:       const ios_base::fmtflags __fmt = ~(ios_base::basefield
-40039:       | ios_base::uppercase);
-40039:       __io.flags((__flags & __fmt) | (ios_base::hex | ios_base::showbase));
-40039: 
-40039:       typedef __gnu_cxx::__conditional_type<(sizeof(const void*)
-40039:           <= sizeof(unsigned long)),
-40039:  unsigned long, unsigned long long>::__type _UIntPtrType;
-40039: 
-40039:       __s = _M_insert_int(__s, __io, __fill,
-40039:      reinterpret_cast<_UIntPtrType>(__v));
-40039:       __io.flags(__flags);
-40039:       return __s;
-40039:     }
-40039: 
-40039: 
-40039: # 1206 "/usr/include/c++/8/bits/locale_facets.tcc" 3
-40039:   template<typename _CharT, typename _Traits>
-40039:     void
-40039:     __pad<_CharT, _Traits>::_S_pad(ios_base& __io, _CharT __fill,
-40039:        _CharT* __news, const _CharT* __olds,
-40039:        streamsize __newlen, streamsize __oldlen)
-40039:     {
-40039:       const size_t __plen = static_cast<size_t>(__newlen - __oldlen);
-40039:       const ios_base::fmtflags __adjust = __io.flags() & ios_base::adjustfield;
-40039: 
-40039: 
-40039:       if (__adjust == ios_base::left)
-40039:  {
-40039:    _Traits::copy(__news, __olds, __oldlen);
-40039:    _Traits::assign(__news + __oldlen, __plen, __fill);
-40039:    return;
-40039:  }
-40039: 
-40039:       size_t __mod = 0;
-40039:       if (__adjust == ios_base::internal)
-40039:  {
-40039: 
-40039: 
-40039: 
-40039:           const locale& __loc = __io._M_getloc();
-40039:    const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
-40039: 
-40039:    if (__ctype.widen('-') == __olds[0]
-40039:        || __ctype.widen('+') == __olds[0])
-40039:      {
-40039:        __news[0] = __olds[0];
-40039:        __mod = 1;
-40039:        ++__news;
-40039:      }
-40039:    else if (__ctype.widen('0') == __olds[0]
-40039:      && __oldlen > 1
-40039:      && (__ctype.widen('x') == __olds[1]
-40039:          || __ctype.widen('X') == __olds[1]))
-40039:      {
-40039:        __news[0] = __olds[0];
-40039:        __news[1] = __olds[1];
-40039:        __mod = 2;
-40039:        __news += 2;
-40039:      }
-40039: 
-40039:  }
-40039:       _Traits::assign(__news, __plen, __fill);
-40039:       _Traits::copy(__news + __plen, __olds + __mod, __oldlen - __mod);
-40039:     }
-40039: 
-40039:   template<typename _CharT>
-40039:     _CharT*
-40039:     __add_grouping(_CharT* __s, _CharT __sep,
-40039:      const char* __gbeg, size_t __gsize,
-40039:      const _CharT* __first, const _CharT* __last)
-40039:     {
-40039:       size_t __idx = 0;
-40039:       size_t __ctr = 0;
-40039: 
-40039:       while (__last - __first > __gbeg[__idx]
-40039:       && static_cast<signed char>(__gbeg[__idx]) > 0
-40039:       && __gbeg[__idx] != __gnu_cxx::__numeric_traits<char>::__max)
-40039:  {
-40039:    __last -= __gbeg[__idx];
-40039:    __idx < __gsize - 1 ? ++__idx : ++__ctr;
-40039:  }
-40039: 
-40039:       while (__first != __last)
-40039:  *__s++ = *__first++;
-40039: 
-40039:       while (__ctr--)
-40039:  {
-40039:    *__s++ = __sep;
-40039:    for (char __i = __gbeg[__idx]; __i > 0; --__i)
-40039:      *__s++ = *__first++;
-40039:  }
-40039: 
-40039:       while (__idx--)
-40039:  {
-40039:    *__s++ = __sep;
-40039:    for (char __i = __gbeg[__idx]; __i > 0; --__i)
-40039:      *__s++ = *__first++;
-40039:  }
-40039: 
-40039:       return __s;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   extern template class __cxx11:: numpunct<char>;
-40039:   extern template class __cxx11:: numpunct_byname<char>;
-40039:   extern template class num_get<char>;
-40039:   extern template class num_put<char>;
-40039:   extern template class ctype_byname<char>;
-40039: 
-40039:   extern template
-40039:     const ctype<char>&
-40039:     use_facet<ctype<char> >(const locale&);
-40039: 
-40039:   extern template
-40039:     const numpunct<char>&
-40039:     use_facet<numpunct<char> >(const locale&);
-40039: 
-40039:   extern template
-40039:     const num_put<char>&
-40039:     use_facet<num_put<char> >(const locale&);
-40039: 
-40039:   extern template
-40039:     const num_get<char>&
-40039:     use_facet<num_get<char> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<ctype<char> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<numpunct<char> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<num_put<char> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<num_get<char> >(const locale&);
-40039: 
-40039: 
-40039:   extern template class __cxx11:: numpunct<wchar_t>;
-40039:   extern template class __cxx11:: numpunct_byname<wchar_t>;
-40039:   extern template class num_get<wchar_t>;
-40039:   extern template class num_put<wchar_t>;
-40039:   extern template class ctype_byname<wchar_t>;
-40039: 
-40039:   extern template
-40039:     const ctype<wchar_t>&
-40039:     use_facet<ctype<wchar_t> >(const locale&);
-40039: 
-40039:   extern template
-40039:     const numpunct<wchar_t>&
-40039:     use_facet<numpunct<wchar_t> >(const locale&);
-40039: 
-40039:   extern template
-40039:     const num_put<wchar_t>&
-40039:     use_facet<num_put<wchar_t> >(const locale&);
-40039: 
-40039:   extern template
-40039:     const num_get<wchar_t>&
-40039:     use_facet<num_get<wchar_t> >(const locale&);
-40039: 
-40039:  extern template
-40039:     bool
-40039:     has_facet<ctype<wchar_t> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<numpunct<wchar_t> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<num_put<wchar_t> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<num_get<wchar_t> >(const locale&);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 2656 "/usr/include/c++/8/bits/locale_facets.h" 2 3
-40039: # 38 "/usr/include/c++/8/bits/basic_ios.h" 2 3
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   template<typename _Facet>
-40039:     inline const _Facet&
-40039:     __check_facet(const _Facet* __f)
-40039:     {
-40039:       if (!__f)
-40039:  __throw_bad_cast();
-40039:       return *__f;
-40039:     }
-40039: # 66 "/usr/include/c++/8/bits/basic_ios.h" 3
-40039:   template<typename _CharT, typename _Traits>
-40039:     class basic_ios : public ios_base
-40039:     {
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef typename _Traits::int_type int_type;
-40039:       typedef typename _Traits::pos_type pos_type;
-40039:       typedef typename _Traits::off_type off_type;
-40039:       typedef _Traits traits_type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       typedef ctype<_CharT> __ctype_type;
-40039:       typedef num_put<_CharT, ostreambuf_iterator<_CharT, _Traits> >
-40039:            __num_put_type;
-40039:       typedef num_get<_CharT, istreambuf_iterator<_CharT, _Traits> >
-40039:            __num_get_type;
-40039: 
-40039: 
-40039: 
-40039:     protected:
-40039:       basic_ostream<_CharT, _Traits>* _M_tie;
-40039:       mutable char_type _M_fill;
-40039:       mutable bool _M_fill_init;
-40039:       basic_streambuf<_CharT, _Traits>* _M_streambuf;
-40039: 
-40039: 
-40039:       const __ctype_type* _M_ctype;
-40039: 
-40039:       const __num_put_type* _M_num_put;
-40039: 
-40039:       const __num_get_type* _M_num_get;
-40039: 
-40039:     public:
-40039: # 117 "/usr/include/c++/8/bits/basic_ios.h" 3
-40039:       explicit operator bool() const
-40039:       { return !this->fail(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       bool
-40039:       operator!() const
-40039:       { return this->fail(); }
-40039: # 136 "/usr/include/c++/8/bits/basic_ios.h" 3
-40039:       iostate
-40039:       rdstate() const
-40039:       { return _M_streambuf_state; }
-40039: # 147 "/usr/include/c++/8/bits/basic_ios.h" 3
-40039:       void
-40039:       clear(iostate __state = goodbit);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       setstate(iostate __state)
-40039:       { this->clear(this->rdstate() | __state); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_setstate(iostate __state)
-40039:       {
-40039: 
-40039: 
-40039:  _M_streambuf_state |= __state;
-40039:  if (this->exceptions() & __state)
-40039:    throw;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       bool
-40039:       good() const
-40039:       { return this->rdstate() == 0; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       bool
-40039:       eof() const
-40039:       { return (this->rdstate() & eofbit) != 0; }
-40039: # 200 "/usr/include/c++/8/bits/basic_ios.h" 3
-40039:       bool
-40039:       fail() const
-40039:       { return (this->rdstate() & (badbit | failbit)) != 0; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       bool
-40039:       bad() const
-40039:       { return (this->rdstate() & badbit) != 0; }
-40039: # 221 "/usr/include/c++/8/bits/basic_ios.h" 3
-40039:       iostate
-40039:       exceptions() const
-40039:       { return _M_exception; }
-40039: # 256 "/usr/include/c++/8/bits/basic_ios.h" 3
-40039:       void
-40039:       exceptions(iostate __except)
-40039:       {
-40039:         _M_exception = __except;
-40039:         this->clear(_M_streambuf_state);
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       explicit
-40039:       basic_ios(basic_streambuf<_CharT, _Traits>* __sb)
-40039:       : ios_base(), _M_tie(0), _M_fill(), _M_fill_init(false), _M_streambuf(0),
-40039:  _M_ctype(0), _M_num_put(0), _M_num_get(0)
-40039:       { this->init(__sb); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       virtual
-40039:       ~basic_ios() { }
-40039: # 294 "/usr/include/c++/8/bits/basic_ios.h" 3
-40039:       basic_ostream<_CharT, _Traits>*
-40039:       tie() const
-40039:       { return _M_tie; }
-40039: # 306 "/usr/include/c++/8/bits/basic_ios.h" 3
-40039:       basic_ostream<_CharT, _Traits>*
-40039:       tie(basic_ostream<_CharT, _Traits>* __tiestr)
-40039:       {
-40039:         basic_ostream<_CharT, _Traits>* __old = _M_tie;
-40039:         _M_tie = __tiestr;
-40039:         return __old;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       basic_streambuf<_CharT, _Traits>*
-40039:       rdbuf() const
-40039:       { return _M_streambuf; }
-40039: # 346 "/usr/include/c++/8/bits/basic_ios.h" 3
-40039:       basic_streambuf<_CharT, _Traits>*
-40039:       rdbuf(basic_streambuf<_CharT, _Traits>* __sb);
-40039: # 360 "/usr/include/c++/8/bits/basic_ios.h" 3
-40039:       basic_ios&
-40039:       copyfmt(const basic_ios& __rhs);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       char_type
-40039:       fill() const
-40039:       {
-40039:  if (!_M_fill_init)
-40039:    {
-40039:      _M_fill = this->widen(' ');
-40039:      _M_fill_init = true;
-40039:    }
-40039:  return _M_fill;
-40039:       }
-40039: # 389 "/usr/include/c++/8/bits/basic_ios.h" 3
-40039:       char_type
-40039:       fill(char_type __ch)
-40039:       {
-40039:  char_type __old = this->fill();
-40039:  _M_fill = __ch;
-40039:  return __old;
-40039:       }
-40039: # 409 "/usr/include/c++/8/bits/basic_ios.h" 3
-40039:       locale
-40039:       imbue(const locale& __loc);
-40039: # 429 "/usr/include/c++/8/bits/basic_ios.h" 3
-40039:       char
-40039:       narrow(char_type __c, char __dfault) const
-40039:       { return __check_facet(_M_ctype).narrow(__c, __dfault); }
-40039: # 448 "/usr/include/c++/8/bits/basic_ios.h" 3
-40039:       char_type
-40039:       widen(char __c) const
-40039:       { return __check_facet(_M_ctype).widen(__c); }
-40039: 
-40039:     protected:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       basic_ios()
-40039:       : ios_base(), _M_tie(0), _M_fill(char_type()), _M_fill_init(false),
-40039:  _M_streambuf(0), _M_ctype(0), _M_num_put(0), _M_num_get(0)
-40039:       { }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       init(basic_streambuf<_CharT, _Traits>* __sb);
-40039: 
-40039: 
-40039:       basic_ios(const basic_ios&) = delete;
-40039:       basic_ios& operator=(const basic_ios&) = delete;
-40039: 
-40039:       void
-40039:       move(basic_ios& __rhs)
-40039:       {
-40039:  ios_base::_M_move(__rhs);
-40039:  _M_cache_locale(_M_ios_locale);
-40039:  this->tie(__rhs.tie(nullptr));
-40039:  _M_fill = __rhs._M_fill;
-40039:  _M_fill_init = __rhs._M_fill_init;
-40039:  _M_streambuf = nullptr;
-40039:       }
-40039: 
-40039:       void
-40039:       move(basic_ios&& __rhs)
-40039:       { this->move(__rhs); }
-40039: 
-40039:       void
-40039:       swap(basic_ios& __rhs) noexcept
-40039:       {
-40039:  ios_base::_M_swap(__rhs);
-40039:  _M_cache_locale(_M_ios_locale);
-40039:  __rhs._M_cache_locale(__rhs._M_ios_locale);
-40039:  std::swap(_M_tie, __rhs._M_tie);
-40039:  std::swap(_M_fill, __rhs._M_fill);
-40039:  std::swap(_M_fill_init, __rhs._M_fill_init);
-40039:       }
-40039: 
-40039:       void
-40039:       set_rdbuf(basic_streambuf<_CharT, _Traits>* __sb)
-40039:       { _M_streambuf = __sb; }
-40039: 
-40039: 
-40039:       void
-40039:       _M_cache_locale(const locale& __loc);
-40039:     };
-40039: 
-40039: 
-40039: }
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/basic_ios.tcc" 1 3
-40039: # 33 "/usr/include/c++/8/bits/basic_ios.tcc" 3
-40039:        
-40039: # 34 "/usr/include/c++/8/bits/basic_ios.tcc" 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     void
-40039:     basic_ios<_CharT, _Traits>::clear(iostate __state)
-40039:     {
-40039:       if (this->rdbuf())
-40039:  _M_streambuf_state = __state;
-40039:       else
-40039:    _M_streambuf_state = __state | badbit;
-40039:       if (this->exceptions() & this->rdstate())
-40039:  __throw_ios_failure(("basic_ios::clear"));
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_streambuf<_CharT, _Traits>*
-40039:     basic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<_CharT, _Traits>* __sb)
-40039:     {
-40039:       basic_streambuf<_CharT, _Traits>* __old = _M_streambuf;
-40039:       _M_streambuf = __sb;
-40039:       this->clear();
-40039:       return __old;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_ios<_CharT, _Traits>&
-40039:     basic_ios<_CharT, _Traits>::copyfmt(const basic_ios& __rhs)
-40039:     {
-40039: 
-40039: 
-40039:       if (this != &__rhs)
-40039:  {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:    _Words* __words = (__rhs._M_word_size <= _S_local_word_size) ?
-40039:                       _M_local_word : new _Words[__rhs._M_word_size];
-40039: 
-40039: 
-40039:    _Callback_list* __cb = __rhs._M_callbacks;
-40039:    if (__cb)
-40039:      __cb->_M_add_reference();
-40039:    _M_call_callbacks(erase_event);
-40039:    if (_M_word != _M_local_word)
-40039:      {
-40039:        delete [] _M_word;
-40039:        _M_word = 0;
-40039:      }
-40039:    _M_dispose_callbacks();
-40039: 
-40039: 
-40039:    _M_callbacks = __cb;
-40039:    for (int __i = 0; __i < __rhs._M_word_size; ++__i)
-40039:      __words[__i] = __rhs._M_word[__i];
-40039:    _M_word = __words;
-40039:    _M_word_size = __rhs._M_word_size;
-40039: 
-40039:    this->flags(__rhs.flags());
-40039:    this->width(__rhs.width());
-40039:    this->precision(__rhs.precision());
-40039:    this->tie(__rhs.tie());
-40039:    this->fill(__rhs.fill());
-40039:    _M_ios_locale = __rhs.getloc();
-40039:    _M_cache_locale(_M_ios_locale);
-40039: 
-40039:    _M_call_callbacks(copyfmt_event);
-40039: 
-40039: 
-40039:    this->exceptions(__rhs.exceptions());
-40039:  }
-40039:       return *this;
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     locale
-40039:     basic_ios<_CharT, _Traits>::imbue(const locale& __loc)
-40039:     {
-40039:       locale __old(this->getloc());
-40039:       ios_base::imbue(__loc);
-40039:       _M_cache_locale(__loc);
-40039:       if (this->rdbuf() != 0)
-40039:  this->rdbuf()->pubimbue(__loc);
-40039:       return __old;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     void
-40039:     basic_ios<_CharT, _Traits>::init(basic_streambuf<_CharT, _Traits>* __sb)
-40039:     {
-40039: 
-40039:       ios_base::_M_init();
-40039: 
-40039: 
-40039:       _M_cache_locale(_M_ios_locale);
-40039: # 146 "/usr/include/c++/8/bits/basic_ios.tcc" 3
-40039:       _M_fill = _CharT();
-40039:       _M_fill_init = false;
-40039: 
-40039:       _M_tie = 0;
-40039:       _M_exception = goodbit;
-40039:       _M_streambuf = __sb;
-40039:       _M_streambuf_state = __sb ? goodbit : badbit;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     void
-40039:     basic_ios<_CharT, _Traits>::_M_cache_locale(const locale& __loc)
-40039:     {
-40039:       if (__builtin_expect(has_facet<__ctype_type>(__loc), true))
-40039:  _M_ctype = std::__addressof(use_facet<__ctype_type>(__loc));
-40039:       else
-40039:  _M_ctype = 0;
-40039: 
-40039:       if (__builtin_expect(has_facet<__num_put_type>(__loc), true))
-40039:  _M_num_put = std::__addressof(use_facet<__num_put_type>(__loc));
-40039:       else
-40039:  _M_num_put = 0;
-40039: 
-40039:       if (__builtin_expect(has_facet<__num_get_type>(__loc), true))
-40039:  _M_num_get = std::__addressof(use_facet<__num_get_type>(__loc));
-40039:       else
-40039:  _M_num_get = 0;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   extern template class basic_ios<char>;
-40039: 
-40039: 
-40039:   extern template class basic_ios<wchar_t>;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 517 "/usr/include/c++/8/bits/basic_ios.h" 2 3
-40039: # 45 "/usr/include/c++/8/ios" 2 3
-40039: # 39 "/usr/include/c++/8/istream" 2 3
-40039: # 1 "/usr/include/c++/8/ostream" 1 3
-40039: # 36 "/usr/include/c++/8/ostream" 3
-40039:        
-40039: # 37 "/usr/include/c++/8/ostream" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 57 "/usr/include/c++/8/ostream" 3
-40039:   template<typename _CharT, typename _Traits>
-40039:     class basic_ostream : virtual public basic_ios<_CharT, _Traits>
-40039:     {
-40039:     public:
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef typename _Traits::int_type int_type;
-40039:       typedef typename _Traits::pos_type pos_type;
-40039:       typedef typename _Traits::off_type off_type;
-40039:       typedef _Traits traits_type;
-40039: 
-40039: 
-40039:       typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
-40039:       typedef basic_ios<_CharT, _Traits> __ios_type;
-40039:       typedef basic_ostream<_CharT, _Traits> __ostream_type;
-40039:       typedef num_put<_CharT, ostreambuf_iterator<_CharT, _Traits> >
-40039:              __num_put_type;
-40039:       typedef ctype<_CharT> __ctype_type;
-40039: # 83 "/usr/include/c++/8/ostream" 3
-40039:       explicit
-40039:       basic_ostream(__streambuf_type* __sb)
-40039:       { this->init(__sb); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       virtual
-40039:       ~basic_ostream() { }
-40039: 
-40039: 
-40039:       class sentry;
-40039:       friend class sentry;
-40039: # 107 "/usr/include/c++/8/ostream" 3
-40039:       __ostream_type&
-40039:       operator<<(__ostream_type& (*__pf)(__ostream_type&))
-40039:       {
-40039: 
-40039: 
-40039: 
-40039:  return __pf(*this);
-40039:       }
-40039: 
-40039:       __ostream_type&
-40039:       operator<<(__ios_type& (*__pf)(__ios_type&))
-40039:       {
-40039: 
-40039: 
-40039: 
-40039:  __pf(*this);
-40039:  return *this;
-40039:       }
-40039: 
-40039:       __ostream_type&
-40039:       operator<<(ios_base& (*__pf) (ios_base&))
-40039:       {
-40039: 
-40039: 
-40039: 
-40039:  __pf(*this);
-40039:  return *this;
-40039:       }
-40039: # 165 "/usr/include/c++/8/ostream" 3
-40039:       __ostream_type&
-40039:       operator<<(long __n)
-40039:       { return _M_insert(__n); }
-40039: 
-40039:       __ostream_type&
-40039:       operator<<(unsigned long __n)
-40039:       { return _M_insert(__n); }
-40039: 
-40039:       __ostream_type&
-40039:       operator<<(bool __n)
-40039:       { return _M_insert(__n); }
-40039: 
-40039:       __ostream_type&
-40039:       operator<<(short __n);
-40039: 
-40039:       __ostream_type&
-40039:       operator<<(unsigned short __n)
-40039:       {
-40039: 
-40039: 
-40039:  return _M_insert(static_cast<unsigned long>(__n));
-40039:       }
-40039: 
-40039:       __ostream_type&
-40039:       operator<<(int __n);
-40039: 
-40039:       __ostream_type&
-40039:       operator<<(unsigned int __n)
-40039:       {
-40039: 
-40039: 
-40039:  return _M_insert(static_cast<unsigned long>(__n));
-40039:       }
-40039: 
-40039: 
-40039:       __ostream_type&
-40039:       operator<<(long long __n)
-40039:       { return _M_insert(__n); }
-40039: 
-40039:       __ostream_type&
-40039:       operator<<(unsigned long long __n)
-40039:       { return _M_insert(__n); }
-40039: # 219 "/usr/include/c++/8/ostream" 3
-40039:       __ostream_type&
-40039:       operator<<(double __f)
-40039:       { return _M_insert(__f); }
-40039: 
-40039:       __ostream_type&
-40039:       operator<<(float __f)
-40039:       {
-40039: 
-40039: 
-40039:  return _M_insert(static_cast<double>(__f));
-40039:       }
-40039: 
-40039:       __ostream_type&
-40039:       operator<<(long double __f)
-40039:       { return _M_insert(__f); }
-40039: # 244 "/usr/include/c++/8/ostream" 3
-40039:       __ostream_type&
-40039:       operator<<(const void* __p)
-40039:       { return _M_insert(__p); }
-40039: # 269 "/usr/include/c++/8/ostream" 3
-40039:       __ostream_type&
-40039:       operator<<(__streambuf_type* __sb);
-40039: # 302 "/usr/include/c++/8/ostream" 3
-40039:       __ostream_type&
-40039:       put(char_type __c);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_write(const char_type* __s, streamsize __n)
-40039:       {
-40039:  const streamsize __put = this->rdbuf()->sputn(__s, __n);
-40039:  if (__put != __n)
-40039:    this->setstate(ios_base::badbit);
-40039:       }
-40039: # 334 "/usr/include/c++/8/ostream" 3
-40039:       __ostream_type&
-40039:       write(const char_type* __s, streamsize __n);
-40039: # 347 "/usr/include/c++/8/ostream" 3
-40039:       __ostream_type&
-40039:       flush();
-40039: # 357 "/usr/include/c++/8/ostream" 3
-40039:       pos_type
-40039:       tellp();
-40039: # 368 "/usr/include/c++/8/ostream" 3
-40039:       __ostream_type&
-40039:       seekp(pos_type);
-40039: # 380 "/usr/include/c++/8/ostream" 3
-40039:        __ostream_type&
-40039:       seekp(off_type, ios_base::seekdir);
-40039: 
-40039:     protected:
-40039:       basic_ostream()
-40039:       { this->init(0); }
-40039: 
-40039: 
-40039: 
-40039:       basic_ostream(basic_iostream<_CharT, _Traits>&) { }
-40039: 
-40039:       basic_ostream(const basic_ostream&) = delete;
-40039: 
-40039:       basic_ostream(basic_ostream&& __rhs)
-40039:       : __ios_type()
-40039:       { __ios_type::move(__rhs); }
-40039: 
-40039: 
-40039: 
-40039:       basic_ostream& operator=(const basic_ostream&) = delete;
-40039: 
-40039:       basic_ostream&
-40039:       operator=(basic_ostream&& __rhs)
-40039:       {
-40039:  swap(__rhs);
-40039:  return *this;
-40039:       }
-40039: 
-40039:       void
-40039:       swap(basic_ostream& __rhs)
-40039:       { __ios_type::swap(__rhs); }
-40039: 
-40039: 
-40039:       template<typename _ValueT>
-40039:  __ostream_type&
-40039:  _M_insert(_ValueT __v);
-40039:     };
-40039: # 425 "/usr/include/c++/8/ostream" 3
-40039:   template <typename _CharT, typename _Traits>
-40039:     class basic_ostream<_CharT, _Traits>::sentry
-40039:     {
-40039: 
-40039:       bool _M_ok;
-40039:       basic_ostream<_CharT, _Traits>& _M_os;
-40039: 
-40039:     public:
-40039: # 444 "/usr/include/c++/8/ostream" 3
-40039:       explicit
-40039:       sentry(basic_ostream<_CharT, _Traits>& __os);
-40039: # 454 "/usr/include/c++/8/ostream" 3
-40039:       ~sentry()
-40039:       {
-40039: 
-40039:  if (bool(_M_os.flags() & ios_base::unitbuf) && !uncaught_exception())
-40039:    {
-40039: 
-40039:      if (_M_os.rdbuf() && _M_os.rdbuf()->pubsync() == -1)
-40039:        _M_os.setstate(ios_base::badbit);
-40039:    }
-40039:       }
-40039: # 473 "/usr/include/c++/8/ostream" 3
-40039:       explicit
-40039: 
-40039:       operator bool() const
-40039:       { return _M_ok; }
-40039:     };
-40039: # 495 "/usr/include/c++/8/ostream" 3
-40039:   template<typename _CharT, typename _Traits>
-40039:     inline basic_ostream<_CharT, _Traits>&
-40039:     operator<<(basic_ostream<_CharT, _Traits>& __out, _CharT __c)
-40039:     { return __ostream_insert(__out, &__c, 1); }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     inline basic_ostream<_CharT, _Traits>&
-40039:     operator<<(basic_ostream<_CharT, _Traits>& __out, char __c)
-40039:     { return (__out << __out.widen(__c)); }
-40039: 
-40039: 
-40039:   template <class _Traits>
-40039:     inline basic_ostream<char, _Traits>&
-40039:     operator<<(basic_ostream<char, _Traits>& __out, char __c)
-40039:     { return __ostream_insert(__out, &__c, 1); }
-40039: 
-40039: 
-40039:   template<class _Traits>
-40039:     inline basic_ostream<char, _Traits>&
-40039:     operator<<(basic_ostream<char, _Traits>& __out, signed char __c)
-40039:     { return (__out << static_cast<char>(__c)); }
-40039: 
-40039:   template<class _Traits>
-40039:     inline basic_ostream<char, _Traits>&
-40039:     operator<<(basic_ostream<char, _Traits>& __out, unsigned char __c)
-40039:     { return (__out << static_cast<char>(__c)); }
-40039: # 537 "/usr/include/c++/8/ostream" 3
-40039:   template<typename _CharT, typename _Traits>
-40039:     inline basic_ostream<_CharT, _Traits>&
-40039:     operator<<(basic_ostream<_CharT, _Traits>& __out, const _CharT* __s)
-40039:     {
-40039:       if (!__s)
-40039:  __out.setstate(ios_base::badbit);
-40039:       else
-40039:  __ostream_insert(__out, __s,
-40039:     static_cast<streamsize>(_Traits::length(__s)));
-40039:       return __out;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_ostream<_CharT, _Traits> &
-40039:     operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s);
-40039: 
-40039: 
-40039:   template<class _Traits>
-40039:     inline basic_ostream<char, _Traits>&
-40039:     operator<<(basic_ostream<char, _Traits>& __out, const char* __s)
-40039:     {
-40039:       if (!__s)
-40039:  __out.setstate(ios_base::badbit);
-40039:       else
-40039:  __ostream_insert(__out, __s,
-40039:     static_cast<streamsize>(_Traits::length(__s)));
-40039:       return __out;
-40039:     }
-40039: 
-40039: 
-40039:   template<class _Traits>
-40039:     inline basic_ostream<char, _Traits>&
-40039:     operator<<(basic_ostream<char, _Traits>& __out, const signed char* __s)
-40039:     { return (__out << reinterpret_cast<const char*>(__s)); }
-40039: 
-40039:   template<class _Traits>
-40039:     inline basic_ostream<char, _Traits> &
-40039:     operator<<(basic_ostream<char, _Traits>& __out, const unsigned char* __s)
-40039:     { return (__out << reinterpret_cast<const char*>(__s)); }
-40039: # 588 "/usr/include/c++/8/ostream" 3
-40039:   template<typename _CharT, typename _Traits>
-40039:     inline basic_ostream<_CharT, _Traits>&
-40039:     endl(basic_ostream<_CharT, _Traits>& __os)
-40039:     { return flush(__os.put(__os.widen('\n'))); }
-40039: # 600 "/usr/include/c++/8/ostream" 3
-40039:   template<typename _CharT, typename _Traits>
-40039:     inline basic_ostream<_CharT, _Traits>&
-40039:     ends(basic_ostream<_CharT, _Traits>& __os)
-40039:     { return __os.put(_CharT()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     inline basic_ostream<_CharT, _Traits>&
-40039:     flush(basic_ostream<_CharT, _Traits>& __os)
-40039:     { return __os.flush(); }
-40039: 
-40039: 
-40039:   template<typename _Ch, typename _Up>
-40039:     basic_ostream<_Ch, _Up>&
-40039:     __is_convertible_to_basic_ostream_test(basic_ostream<_Ch, _Up>*);
-40039: 
-40039:   template<typename _Tp, typename = void>
-40039:     struct __is_convertible_to_basic_ostream_impl
-40039:     {
-40039:       using __ostream_type = void;
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     using __do_is_convertible_to_basic_ostream_impl =
-40039:     decltype(__is_convertible_to_basic_ostream_test
-40039:       (declval<typename remove_reference<_Tp>::type*>()));
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_convertible_to_basic_ostream_impl
-40039:     <_Tp,
-40039:      __void_t<__do_is_convertible_to_basic_ostream_impl<_Tp>>>
-40039:     {
-40039:       using __ostream_type =
-40039:  __do_is_convertible_to_basic_ostream_impl<_Tp>;
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_convertible_to_basic_ostream
-40039:     : __is_convertible_to_basic_ostream_impl<_Tp>
-40039:     {
-40039:     public:
-40039:       using type = __not_<is_void<
-40039:         typename __is_convertible_to_basic_ostream_impl<_Tp>::__ostream_type>>;
-40039:       constexpr static bool value = type::value;
-40039:     };
-40039: 
-40039:   template<typename _Ostream, typename _Tp, typename = void>
-40039:     struct __is_insertable : false_type {};
-40039: 
-40039:   template<typename _Ostream, typename _Tp>
-40039:     struct __is_insertable<_Ostream, _Tp,
-40039:       __void_t<decltype(declval<_Ostream&>()
-40039:           << declval<const _Tp&>())>>
-40039:         : true_type {};
-40039: 
-40039:   template<typename _Ostream>
-40039:     using __rvalue_ostream_type =
-40039:       typename __is_convertible_to_basic_ostream<
-40039:  _Ostream>::__ostream_type;
-40039: # 674 "/usr/include/c++/8/ostream" 3
-40039:   template<typename _Ostream, typename _Tp>
-40039:     inline
-40039:     typename enable_if<__and_<__not_<is_lvalue_reference<_Ostream>>,
-40039:          __is_convertible_to_basic_ostream<_Ostream>,
-40039:          __is_insertable<
-40039:     __rvalue_ostream_type<_Ostream>,
-40039:     const _Tp&>>::value,
-40039:          __rvalue_ostream_type<_Ostream>>::type
-40039:     operator<<(_Ostream&& __os, const _Tp& __x)
-40039:     {
-40039:       __rvalue_ostream_type<_Ostream> __ret_os = __os;
-40039:       __ret_os << __x;
-40039:       return __ret_os;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/ostream.tcc" 1 3
-40039: # 37 "/usr/include/c++/8/bits/ostream.tcc" 3
-40039:        
-40039: # 38 "/usr/include/c++/8/bits/ostream.tcc" 3
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_ostream<_CharT, _Traits>::sentry::
-40039:     sentry(basic_ostream<_CharT, _Traits>& __os)
-40039:     : _M_ok(false), _M_os(__os)
-40039:     {
-40039: 
-40039:       if (__os.tie() && __os.good())
-40039:  __os.tie()->flush();
-40039: 
-40039:       if (__os.good())
-40039:  _M_ok = true;
-40039:       else
-40039:  __os.setstate(ios_base::failbit);
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     template<typename _ValueT>
-40039:       basic_ostream<_CharT, _Traits>&
-40039:       basic_ostream<_CharT, _Traits>::
-40039:       _M_insert(_ValueT __v)
-40039:       {
-40039:  sentry __cerb(*this);
-40039:  if (__cerb)
-40039:    {
-40039:      ios_base::iostate __err = ios_base::goodbit;
-40039:      try
-40039:        {
-40039:   const __num_put_type& __np = __check_facet(this->_M_num_put);
-40039:   if (__np.put(*this, *this, this->fill(), __v).failed())
-40039:     __err |= ios_base::badbit;
-40039:        }
-40039:      catch(__cxxabiv1::__forced_unwind&)
-40039:        {
-40039:   this->_M_setstate(ios_base::badbit);
-40039:   throw;
-40039:        }
-40039:      catch(...)
-40039:        { this->_M_setstate(ios_base::badbit); }
-40039:      if (__err)
-40039:        this->setstate(__err);
-40039:    }
-40039:  return *this;
-40039:       }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_ostream<_CharT, _Traits>&
-40039:     basic_ostream<_CharT, _Traits>::
-40039:     operator<<(short __n)
-40039:     {
-40039: 
-40039: 
-40039:       const ios_base::fmtflags __fmt = this->flags() & ios_base::basefield;
-40039:       if (__fmt == ios_base::oct || __fmt == ios_base::hex)
-40039:  return _M_insert(static_cast<long>(static_cast<unsigned short>(__n)));
-40039:       else
-40039:  return _M_insert(static_cast<long>(__n));
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_ostream<_CharT, _Traits>&
-40039:     basic_ostream<_CharT, _Traits>::
-40039:     operator<<(int __n)
-40039:     {
-40039: 
-40039: 
-40039:       const ios_base::fmtflags __fmt = this->flags() & ios_base::basefield;
-40039:       if (__fmt == ios_base::oct || __fmt == ios_base::hex)
-40039:  return _M_insert(static_cast<long>(static_cast<unsigned int>(__n)));
-40039:       else
-40039:  return _M_insert(static_cast<long>(__n));
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_ostream<_CharT, _Traits>&
-40039:     basic_ostream<_CharT, _Traits>::
-40039:     operator<<(__streambuf_type* __sbin)
-40039:     {
-40039:       ios_base::iostate __err = ios_base::goodbit;
-40039:       sentry __cerb(*this);
-40039:       if (__cerb && __sbin)
-40039:  {
-40039:    try
-40039:      {
-40039:        if (!__copy_streambufs(__sbin, this->rdbuf()))
-40039:   __err |= ios_base::failbit;
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        this->_M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { this->_M_setstate(ios_base::failbit); }
-40039:  }
-40039:       else if (!__sbin)
-40039:  __err |= ios_base::badbit;
-40039:       if (__err)
-40039:  this->setstate(__err);
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_ostream<_CharT, _Traits>&
-40039:     basic_ostream<_CharT, _Traits>::
-40039:     put(char_type __c)
-40039:     {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       sentry __cerb(*this);
-40039:       if (__cerb)
-40039:  {
-40039:    ios_base::iostate __err = ios_base::goodbit;
-40039:    try
-40039:      {
-40039:        const int_type __put = this->rdbuf()->sputc(__c);
-40039:        if (traits_type::eq_int_type(__put, traits_type::eof()))
-40039:   __err |= ios_base::badbit;
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        this->_M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { this->_M_setstate(ios_base::badbit); }
-40039:    if (__err)
-40039:      this->setstate(__err);
-40039:  }
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_ostream<_CharT, _Traits>&
-40039:     basic_ostream<_CharT, _Traits>::
-40039:     write(const _CharT* __s, streamsize __n)
-40039:     {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       sentry __cerb(*this);
-40039:       if (__cerb)
-40039:  {
-40039:    try
-40039:      { _M_write(__s, __n); }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        this->_M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { this->_M_setstate(ios_base::badbit); }
-40039:  }
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_ostream<_CharT, _Traits>&
-40039:     basic_ostream<_CharT, _Traits>::
-40039:     flush()
-40039:     {
-40039: 
-40039: 
-40039: 
-40039:       ios_base::iostate __err = ios_base::goodbit;
-40039:       try
-40039:  {
-40039:    if (this->rdbuf() && this->rdbuf()->pubsync() == -1)
-40039:      __err |= ios_base::badbit;
-40039:  }
-40039:       catch(__cxxabiv1::__forced_unwind&)
-40039:  {
-40039:    this->_M_setstate(ios_base::badbit);
-40039:    throw;
-40039:  }
-40039:       catch(...)
-40039:  { this->_M_setstate(ios_base::badbit); }
-40039:       if (__err)
-40039:  this->setstate(__err);
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     typename basic_ostream<_CharT, _Traits>::pos_type
-40039:     basic_ostream<_CharT, _Traits>::
-40039:     tellp()
-40039:     {
-40039:       pos_type __ret = pos_type(-1);
-40039:       try
-40039:  {
-40039:    if (!this->fail())
-40039:      __ret = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out);
-40039:  }
-40039:       catch(__cxxabiv1::__forced_unwind&)
-40039:  {
-40039:    this->_M_setstate(ios_base::badbit);
-40039:    throw;
-40039:  }
-40039:       catch(...)
-40039:  { this->_M_setstate(ios_base::badbit); }
-40039:       return __ret;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_ostream<_CharT, _Traits>&
-40039:     basic_ostream<_CharT, _Traits>::
-40039:     seekp(pos_type __pos)
-40039:     {
-40039:       ios_base::iostate __err = ios_base::goodbit;
-40039:       try
-40039:  {
-40039:    if (!this->fail())
-40039:      {
-40039: 
-40039: 
-40039:        const pos_type __p = this->rdbuf()->pubseekpos(__pos,
-40039:             ios_base::out);
-40039: 
-40039: 
-40039:        if (__p == pos_type(off_type(-1)))
-40039:   __err |= ios_base::failbit;
-40039:      }
-40039:  }
-40039:       catch(__cxxabiv1::__forced_unwind&)
-40039:  {
-40039:    this->_M_setstate(ios_base::badbit);
-40039:    throw;
-40039:  }
-40039:       catch(...)
-40039:  { this->_M_setstate(ios_base::badbit); }
-40039:       if (__err)
-40039:  this->setstate(__err);
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_ostream<_CharT, _Traits>&
-40039:     basic_ostream<_CharT, _Traits>::
-40039:     seekp(off_type __off, ios_base::seekdir __dir)
-40039:     {
-40039:       ios_base::iostate __err = ios_base::goodbit;
-40039:       try
-40039:  {
-40039:    if (!this->fail())
-40039:      {
-40039: 
-40039: 
-40039:        const pos_type __p = this->rdbuf()->pubseekoff(__off, __dir,
-40039:             ios_base::out);
-40039: 
-40039: 
-40039:        if (__p == pos_type(off_type(-1)))
-40039:   __err |= ios_base::failbit;
-40039:      }
-40039:  }
-40039:       catch(__cxxabiv1::__forced_unwind&)
-40039:  {
-40039:    this->_M_setstate(ios_base::badbit);
-40039:    throw;
-40039:  }
-40039:       catch(...)
-40039:  { this->_M_setstate(ios_base::badbit); }
-40039:       if (__err)
-40039:  this->setstate(__err);
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_ostream<_CharT, _Traits>&
-40039:     operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s)
-40039:     {
-40039:       if (!__s)
-40039:  __out.setstate(ios_base::badbit);
-40039:       else
-40039:  {
-40039: 
-40039: 
-40039:    const size_t __clen = char_traits<char>::length(__s);
-40039:    try
-40039:      {
-40039:        struct __ptr_guard
-40039:        {
-40039:   _CharT *__p;
-40039:   __ptr_guard (_CharT *__ip): __p(__ip) { }
-40039:   ~__ptr_guard() { delete[] __p; }
-40039:   _CharT* __get() { return __p; }
-40039:        } __pg (new _CharT[__clen]);
-40039: 
-40039:        _CharT *__ws = __pg.__get();
-40039:        for (size_t __i = 0; __i < __clen; ++__i)
-40039:   __ws[__i] = __out.widen(__s[__i]);
-40039:        __ostream_insert(__out, __ws, __clen);
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        __out._M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { __out._M_setstate(ios_base::badbit); }
-40039:  }
-40039:       return __out;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   extern template class basic_ostream<char>;
-40039:   extern template ostream& endl(ostream&);
-40039:   extern template ostream& ends(ostream&);
-40039:   extern template ostream& flush(ostream&);
-40039:   extern template ostream& operator<<(ostream&, char);
-40039:   extern template ostream& operator<<(ostream&, unsigned char);
-40039:   extern template ostream& operator<<(ostream&, signed char);
-40039:   extern template ostream& operator<<(ostream&, const char*);
-40039:   extern template ostream& operator<<(ostream&, const unsigned char*);
-40039:   extern template ostream& operator<<(ostream&, const signed char*);
-40039: 
-40039:   extern template ostream& ostream::_M_insert(long);
-40039:   extern template ostream& ostream::_M_insert(unsigned long);
-40039:   extern template ostream& ostream::_M_insert(bool);
-40039: 
-40039:   extern template ostream& ostream::_M_insert(long long);
-40039:   extern template ostream& ostream::_M_insert(unsigned long long);
-40039: 
-40039:   extern template ostream& ostream::_M_insert(double);
-40039:   extern template ostream& ostream::_M_insert(long double);
-40039:   extern template ostream& ostream::_M_insert(const void*);
-40039: 
-40039: 
-40039:   extern template class basic_ostream<wchar_t>;
-40039:   extern template wostream& endl(wostream&);
-40039:   extern template wostream& ends(wostream&);
-40039:   extern template wostream& flush(wostream&);
-40039:   extern template wostream& operator<<(wostream&, wchar_t);
-40039:   extern template wostream& operator<<(wostream&, char);
-40039:   extern template wostream& operator<<(wostream&, const wchar_t*);
-40039:   extern template wostream& operator<<(wostream&, const char*);
-40039: 
-40039:   extern template wostream& wostream::_M_insert(long);
-40039:   extern template wostream& wostream::_M_insert(unsigned long);
-40039:   extern template wostream& wostream::_M_insert(bool);
-40039: 
-40039:   extern template wostream& wostream::_M_insert(long long);
-40039:   extern template wostream& wostream::_M_insert(unsigned long long);
-40039: 
-40039:   extern template wostream& wostream::_M_insert(double);
-40039:   extern template wostream& wostream::_M_insert(long double);
-40039:   extern template wostream& wostream::_M_insert(const void*);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 694 "/usr/include/c++/8/ostream" 2 3
-40039: # 40 "/usr/include/c++/8/istream" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 57 "/usr/include/c++/8/istream" 3
-40039:   template<typename _CharT, typename _Traits>
-40039:     class basic_istream : virtual public basic_ios<_CharT, _Traits>
-40039:     {
-40039:     public:
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef typename _Traits::int_type int_type;
-40039:       typedef typename _Traits::pos_type pos_type;
-40039:       typedef typename _Traits::off_type off_type;
-40039:       typedef _Traits traits_type;
-40039: 
-40039: 
-40039:       typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
-40039:       typedef basic_ios<_CharT, _Traits> __ios_type;
-40039:       typedef basic_istream<_CharT, _Traits> __istream_type;
-40039:       typedef num_get<_CharT, istreambuf_iterator<_CharT, _Traits> >
-40039:         __num_get_type;
-40039:       typedef ctype<_CharT> __ctype_type;
-40039: 
-40039:     protected:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       streamsize _M_gcount;
-40039: 
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       explicit
-40039:       basic_istream(__streambuf_type* __sb)
-40039:       : _M_gcount(streamsize(0))
-40039:       { this->init(__sb); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       virtual
-40039:       ~basic_istream()
-40039:       { _M_gcount = streamsize(0); }
-40039: 
-40039: 
-40039:       class sentry;
-40039:       friend class sentry;
-40039: # 119 "/usr/include/c++/8/istream" 3
-40039:       __istream_type&
-40039:       operator>>(__istream_type& (*__pf)(__istream_type&))
-40039:       { return __pf(*this); }
-40039: 
-40039:       __istream_type&
-40039:       operator>>(__ios_type& (*__pf)(__ios_type&))
-40039:       {
-40039:  __pf(*this);
-40039:  return *this;
-40039:       }
-40039: 
-40039:       __istream_type&
-40039:       operator>>(ios_base& (*__pf)(ios_base&))
-40039:       {
-40039:  __pf(*this);
-40039:  return *this;
-40039:       }
-40039: # 167 "/usr/include/c++/8/istream" 3
-40039:       __istream_type&
-40039:       operator>>(bool& __n)
-40039:       { return _M_extract(__n); }
-40039: 
-40039:       __istream_type&
-40039:       operator>>(short& __n);
-40039: 
-40039:       __istream_type&
-40039:       operator>>(unsigned short& __n)
-40039:       { return _M_extract(__n); }
-40039: 
-40039:       __istream_type&
-40039:       operator>>(int& __n);
-40039: 
-40039:       __istream_type&
-40039:       operator>>(unsigned int& __n)
-40039:       { return _M_extract(__n); }
-40039: 
-40039:       __istream_type&
-40039:       operator>>(long& __n)
-40039:       { return _M_extract(__n); }
-40039: 
-40039:       __istream_type&
-40039:       operator>>(unsigned long& __n)
-40039:       { return _M_extract(__n); }
-40039: 
-40039: 
-40039:       __istream_type&
-40039:       operator>>(long long& __n)
-40039:       { return _M_extract(__n); }
-40039: 
-40039:       __istream_type&
-40039:       operator>>(unsigned long long& __n)
-40039:       { return _M_extract(__n); }
-40039: # 213 "/usr/include/c++/8/istream" 3
-40039:       __istream_type&
-40039:       operator>>(float& __f)
-40039:       { return _M_extract(__f); }
-40039: 
-40039:       __istream_type&
-40039:       operator>>(double& __f)
-40039:       { return _M_extract(__f); }
-40039: 
-40039:       __istream_type&
-40039:       operator>>(long double& __f)
-40039:       { return _M_extract(__f); }
-40039: # 234 "/usr/include/c++/8/istream" 3
-40039:       __istream_type&
-40039:       operator>>(void*& __p)
-40039:       { return _M_extract(__p); }
-40039: # 258 "/usr/include/c++/8/istream" 3
-40039:       __istream_type&
-40039:       operator>>(__streambuf_type* __sb);
-40039: # 268 "/usr/include/c++/8/istream" 3
-40039:       streamsize
-40039:       gcount() const
-40039:       { return _M_gcount; }
-40039: # 301 "/usr/include/c++/8/istream" 3
-40039:       int_type
-40039:       get();
-40039: # 315 "/usr/include/c++/8/istream" 3
-40039:       __istream_type&
-40039:       get(char_type& __c);
-40039: # 342 "/usr/include/c++/8/istream" 3
-40039:       __istream_type&
-40039:       get(char_type* __s, streamsize __n, char_type __delim);
-40039: # 353 "/usr/include/c++/8/istream" 3
-40039:       __istream_type&
-40039:       get(char_type* __s, streamsize __n)
-40039:       { return this->get(__s, __n, this->widen('\n')); }
-40039: # 376 "/usr/include/c++/8/istream" 3
-40039:       __istream_type&
-40039:       get(__streambuf_type& __sb, char_type __delim);
-40039: # 386 "/usr/include/c++/8/istream" 3
-40039:       __istream_type&
-40039:       get(__streambuf_type& __sb)
-40039:       { return this->get(__sb, this->widen('\n')); }
-40039: # 415 "/usr/include/c++/8/istream" 3
-40039:       __istream_type&
-40039:       getline(char_type* __s, streamsize __n, char_type __delim);
-40039: # 426 "/usr/include/c++/8/istream" 3
-40039:       __istream_type&
-40039:       getline(char_type* __s, streamsize __n)
-40039:       { return this->getline(__s, __n, this->widen('\n')); }
-40039: # 450 "/usr/include/c++/8/istream" 3
-40039:       __istream_type&
-40039:       ignore(streamsize __n, int_type __delim);
-40039: 
-40039:       __istream_type&
-40039:       ignore(streamsize __n);
-40039: 
-40039:       __istream_type&
-40039:       ignore();
-40039: # 467 "/usr/include/c++/8/istream" 3
-40039:       int_type
-40039:       peek();
-40039: # 485 "/usr/include/c++/8/istream" 3
-40039:       __istream_type&
-40039:       read(char_type* __s, streamsize __n);
-40039: # 504 "/usr/include/c++/8/istream" 3
-40039:       streamsize
-40039:       readsome(char_type* __s, streamsize __n);
-40039: # 521 "/usr/include/c++/8/istream" 3
-40039:       __istream_type&
-40039:       putback(char_type __c);
-40039: # 537 "/usr/include/c++/8/istream" 3
-40039:       __istream_type&
-40039:       unget();
-40039: # 555 "/usr/include/c++/8/istream" 3
-40039:       int
-40039:       sync();
-40039: # 570 "/usr/include/c++/8/istream" 3
-40039:       pos_type
-40039:       tellg();
-40039: # 585 "/usr/include/c++/8/istream" 3
-40039:       __istream_type&
-40039:       seekg(pos_type);
-40039: # 601 "/usr/include/c++/8/istream" 3
-40039:       __istream_type&
-40039:       seekg(off_type, ios_base::seekdir);
-40039: 
-40039: 
-40039:     protected:
-40039:       basic_istream()
-40039:       : _M_gcount(streamsize(0))
-40039:       { this->init(0); }
-40039: 
-40039: 
-40039:       basic_istream(const basic_istream&) = delete;
-40039: 
-40039:       basic_istream(basic_istream&& __rhs)
-40039:       : __ios_type(), _M_gcount(__rhs._M_gcount)
-40039:       {
-40039:  __ios_type::move(__rhs);
-40039:  __rhs._M_gcount = 0;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       basic_istream& operator=(const basic_istream&) = delete;
-40039: 
-40039:       basic_istream&
-40039:       operator=(basic_istream&& __rhs)
-40039:       {
-40039:  swap(__rhs);
-40039:  return *this;
-40039:       }
-40039: 
-40039:       void
-40039:       swap(basic_istream& __rhs)
-40039:       {
-40039:  __ios_type::swap(__rhs);
-40039:  std::swap(_M_gcount, __rhs._M_gcount);
-40039:       }
-40039: 
-40039: 
-40039:       template<typename _ValueT>
-40039:  __istream_type&
-40039:  _M_extract(_ValueT& __v);
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     basic_istream<char>&
-40039:     basic_istream<char>::
-40039:     getline(char_type* __s, streamsize __n, char_type __delim);
-40039: 
-40039:   template<>
-40039:     basic_istream<char>&
-40039:     basic_istream<char>::
-40039:     ignore(streamsize __n);
-40039: 
-40039:   template<>
-40039:     basic_istream<char>&
-40039:     basic_istream<char>::
-40039:     ignore(streamsize __n, int_type __delim);
-40039: 
-40039: 
-40039:   template<>
-40039:     basic_istream<wchar_t>&
-40039:     basic_istream<wchar_t>::
-40039:     getline(char_type* __s, streamsize __n, char_type __delim);
-40039: 
-40039:   template<>
-40039:     basic_istream<wchar_t>&
-40039:     basic_istream<wchar_t>::
-40039:     ignore(streamsize __n);
-40039: 
-40039:   template<>
-40039:     basic_istream<wchar_t>&
-40039:     basic_istream<wchar_t>::
-40039:     ignore(streamsize __n, int_type __delim);
-40039: # 685 "/usr/include/c++/8/istream" 3
-40039:   template<typename _CharT, typename _Traits>
-40039:     class basic_istream<_CharT, _Traits>::sentry
-40039:     {
-40039: 
-40039:       bool _M_ok;
-40039: 
-40039:     public:
-40039: 
-40039:       typedef _Traits traits_type;
-40039:       typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
-40039:       typedef basic_istream<_CharT, _Traits> __istream_type;
-40039:       typedef typename __istream_type::__ctype_type __ctype_type;
-40039:       typedef typename _Traits::int_type __int_type;
-40039: # 721 "/usr/include/c++/8/istream" 3
-40039:       explicit
-40039:       sentry(basic_istream<_CharT, _Traits>& __is, bool __noskipws = false);
-40039: # 732 "/usr/include/c++/8/istream" 3
-40039:       explicit
-40039: 
-40039:       operator bool() const
-40039:       { return _M_ok; }
-40039:     };
-40039: # 750 "/usr/include/c++/8/istream" 3
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c);
-40039: 
-40039:   template<class _Traits>
-40039:     inline basic_istream<char, _Traits>&
-40039:     operator>>(basic_istream<char, _Traits>& __in, unsigned char& __c)
-40039:     { return (__in >> reinterpret_cast<char&>(__c)); }
-40039: 
-40039:   template<class _Traits>
-40039:     inline basic_istream<char, _Traits>&
-40039:     operator>>(basic_istream<char, _Traits>& __in, signed char& __c)
-40039:     { return (__in >> reinterpret_cast<char&>(__c)); }
-40039: # 792 "/usr/include/c++/8/istream" 3
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s);
-40039: 
-40039: 
-40039:   template<>
-40039:     basic_istream<char>&
-40039:     operator>>(basic_istream<char>& __in, char* __s);
-40039: 
-40039:   template<class _Traits>
-40039:     inline basic_istream<char, _Traits>&
-40039:     operator>>(basic_istream<char, _Traits>& __in, unsigned char* __s)
-40039:     { return (__in >> reinterpret_cast<char*>(__s)); }
-40039: 
-40039:   template<class _Traits>
-40039:     inline basic_istream<char, _Traits>&
-40039:     operator>>(basic_istream<char, _Traits>& __in, signed char* __s)
-40039:     { return (__in >> reinterpret_cast<char*>(__s)); }
-40039: # 823 "/usr/include/c++/8/istream" 3
-40039:   template<typename _CharT, typename _Traits>
-40039:     class basic_iostream
-40039:     : public basic_istream<_CharT, _Traits>,
-40039:       public basic_ostream<_CharT, _Traits>
-40039:     {
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef typename _Traits::int_type int_type;
-40039:       typedef typename _Traits::pos_type pos_type;
-40039:       typedef typename _Traits::off_type off_type;
-40039:       typedef _Traits traits_type;
-40039: 
-40039: 
-40039:       typedef basic_istream<_CharT, _Traits> __istream_type;
-40039:       typedef basic_ostream<_CharT, _Traits> __ostream_type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       explicit
-40039:       basic_iostream(basic_streambuf<_CharT, _Traits>* __sb)
-40039:       : __istream_type(__sb), __ostream_type(__sb) { }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       virtual
-40039:       ~basic_iostream() { }
-40039: 
-40039:     protected:
-40039:       basic_iostream()
-40039:       : __istream_type(), __ostream_type() { }
-40039: 
-40039: 
-40039:       basic_iostream(const basic_iostream&) = delete;
-40039: 
-40039:       basic_iostream(basic_iostream&& __rhs)
-40039:       : __istream_type(std::move(__rhs)), __ostream_type(*this)
-40039:       { }
-40039: 
-40039: 
-40039: 
-40039:       basic_iostream& operator=(const basic_iostream&) = delete;
-40039: 
-40039:       basic_iostream&
-40039:       operator=(basic_iostream&& __rhs)
-40039:       {
-40039:  swap(__rhs);
-40039:  return *this;
-40039:       }
-40039: 
-40039:       void
-40039:       swap(basic_iostream& __rhs)
-40039:       { __istream_type::swap(__rhs); }
-40039: 
-40039:     };
-40039: # 906 "/usr/include/c++/8/istream" 3
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     ws(basic_istream<_CharT, _Traits>& __is);
-40039: 
-40039: 
-40039:   template<typename _Ch, typename _Up>
-40039:     basic_istream<_Ch, _Up>&
-40039:     __is_convertible_to_basic_istream_test(basic_istream<_Ch, _Up>*);
-40039: 
-40039:   template<typename _Tp, typename = void>
-40039:     struct __is_convertible_to_basic_istream_impl
-40039:     {
-40039:       using __istream_type = void;
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     using __do_is_convertible_to_basic_istream_impl =
-40039:     decltype(__is_convertible_to_basic_istream_test
-40039:       (declval<typename remove_reference<_Tp>::type*>()));
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_convertible_to_basic_istream_impl
-40039:     <_Tp,
-40039:      __void_t<__do_is_convertible_to_basic_istream_impl<_Tp>>>
-40039:     {
-40039:       using __istream_type =
-40039:  __do_is_convertible_to_basic_istream_impl<_Tp>;
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_convertible_to_basic_istream
-40039:     : __is_convertible_to_basic_istream_impl<_Tp>
-40039:     {
-40039:     public:
-40039:       using type = __not_<is_void<
-40039:         typename __is_convertible_to_basic_istream_impl<_Tp>::__istream_type>>;
-40039:       constexpr static bool value = type::value;
-40039:     };
-40039: 
-40039:   template<typename _Istream, typename _Tp, typename = void>
-40039:     struct __is_extractable : false_type {};
-40039: 
-40039:   template<typename _Istream, typename _Tp>
-40039:     struct __is_extractable<_Istream, _Tp,
-40039:        __void_t<decltype(declval<_Istream&>()
-40039:            >> declval<_Tp>())>>
-40039:     : true_type {};
-40039: 
-40039:   template<typename _Istream>
-40039:     using __rvalue_istream_type =
-40039:       typename __is_convertible_to_basic_istream<
-40039:  _Istream>::__istream_type;
-40039: # 972 "/usr/include/c++/8/istream" 3
-40039:   template<typename _Istream, typename _Tp>
-40039:     inline
-40039:     typename enable_if<__and_<__not_<is_lvalue_reference<_Istream>>,
-40039:          __is_convertible_to_basic_istream<_Istream>,
-40039:          __is_extractable<
-40039:     __rvalue_istream_type<_Istream>,
-40039:     _Tp&&>>::value,
-40039:          __rvalue_istream_type<_Istream>>::type
-40039:     operator>>(_Istream&& __is, _Tp&& __x)
-40039:     {
-40039:       __rvalue_istream_type<_Istream> __ret_is = __is;
-40039:       __ret_is >> std::forward<_Tp>(__x);
-40039:       return __ret_is;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/istream.tcc" 1 3
-40039: # 37 "/usr/include/c++/8/bits/istream.tcc" 3
-40039:        
-40039: # 38 "/usr/include/c++/8/bits/istream.tcc" 3
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_istream<_CharT, _Traits>::sentry::
-40039:     sentry(basic_istream<_CharT, _Traits>& __in, bool __noskip) : _M_ok(false)
-40039:     {
-40039:       ios_base::iostate __err = ios_base::goodbit;
-40039:       if (__in.good())
-40039:  try
-40039:    {
-40039:      if (__in.tie())
-40039:        __in.tie()->flush();
-40039:      if (!__noskip && bool(__in.flags() & ios_base::skipws))
-40039:        {
-40039:   const __int_type __eof = traits_type::eof();
-40039:   __streambuf_type* __sb = __in.rdbuf();
-40039:   __int_type __c = __sb->sgetc();
-40039: 
-40039:   const __ctype_type& __ct = __check_facet(__in._M_ctype);
-40039:   while (!traits_type::eq_int_type(__c, __eof)
-40039:          && __ct.is(ctype_base::space,
-40039:       traits_type::to_char_type(__c)))
-40039:     __c = __sb->snextc();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (traits_type::eq_int_type(__c, __eof))
-40039:     __err |= ios_base::eofbit;
-40039:        }
-40039:    }
-40039:  catch(__cxxabiv1::__forced_unwind&)
-40039:    {
-40039:      __in._M_setstate(ios_base::badbit);
-40039:      throw;
-40039:    }
-40039:  catch(...)
-40039:    { __in._M_setstate(ios_base::badbit); }
-40039: 
-40039:       if (__in.good() && __err == ios_base::goodbit)
-40039:  _M_ok = true;
-40039:       else
-40039:  {
-40039:    __err |= ios_base::failbit;
-40039:    __in.setstate(__err);
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     template<typename _ValueT>
-40039:       basic_istream<_CharT, _Traits>&
-40039:       basic_istream<_CharT, _Traits>::
-40039:       _M_extract(_ValueT& __v)
-40039:       {
-40039:  sentry __cerb(*this, false);
-40039:  if (__cerb)
-40039:    {
-40039:      ios_base::iostate __err = ios_base::goodbit;
-40039:      try
-40039:        {
-40039:   const __num_get_type& __ng = __check_facet(this->_M_num_get);
-40039:   __ng.get(*this, 0, *this, __err, __v);
-40039:        }
-40039:      catch(__cxxabiv1::__forced_unwind&)
-40039:        {
-40039:   this->_M_setstate(ios_base::badbit);
-40039:   throw;
-40039:        }
-40039:      catch(...)
-40039:        { this->_M_setstate(ios_base::badbit); }
-40039:      if (__err)
-40039:        this->setstate(__err);
-40039:    }
-40039:  return *this;
-40039:       }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     basic_istream<_CharT, _Traits>::
-40039:     operator>>(short& __n)
-40039:     {
-40039: 
-40039: 
-40039:       sentry __cerb(*this, false);
-40039:       if (__cerb)
-40039:  {
-40039:    ios_base::iostate __err = ios_base::goodbit;
-40039:    try
-40039:      {
-40039:        long __l;
-40039:        const __num_get_type& __ng = __check_facet(this->_M_num_get);
-40039:        __ng.get(*this, 0, *this, __err, __l);
-40039: 
-40039: 
-40039: 
-40039:        if (__l < __gnu_cxx::__numeric_traits<short>::__min)
-40039:   {
-40039:     __err |= ios_base::failbit;
-40039:     __n = __gnu_cxx::__numeric_traits<short>::__min;
-40039:   }
-40039:        else if (__l > __gnu_cxx::__numeric_traits<short>::__max)
-40039:   {
-40039:     __err |= ios_base::failbit;
-40039:     __n = __gnu_cxx::__numeric_traits<short>::__max;
-40039:   }
-40039:        else
-40039:   __n = short(__l);
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        this->_M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { this->_M_setstate(ios_base::badbit); }
-40039:    if (__err)
-40039:      this->setstate(__err);
-40039:  }
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     basic_istream<_CharT, _Traits>::
-40039:     operator>>(int& __n)
-40039:     {
-40039: 
-40039: 
-40039:       sentry __cerb(*this, false);
-40039:       if (__cerb)
-40039:  {
-40039:    ios_base::iostate __err = ios_base::goodbit;
-40039:    try
-40039:      {
-40039:        long __l;
-40039:        const __num_get_type& __ng = __check_facet(this->_M_num_get);
-40039:        __ng.get(*this, 0, *this, __err, __l);
-40039: 
-40039: 
-40039: 
-40039:        if (__l < __gnu_cxx::__numeric_traits<int>::__min)
-40039:   {
-40039:     __err |= ios_base::failbit;
-40039:     __n = __gnu_cxx::__numeric_traits<int>::__min;
-40039:   }
-40039:        else if (__l > __gnu_cxx::__numeric_traits<int>::__max)
-40039:   {
-40039:     __err |= ios_base::failbit;
-40039:     __n = __gnu_cxx::__numeric_traits<int>::__max;
-40039:   }
-40039:        else
-40039:   __n = int(__l);
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        this->_M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { this->_M_setstate(ios_base::badbit); }
-40039:    if (__err)
-40039:      this->setstate(__err);
-40039:  }
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     basic_istream<_CharT, _Traits>::
-40039:     operator>>(__streambuf_type* __sbout)
-40039:     {
-40039:       ios_base::iostate __err = ios_base::goodbit;
-40039:       sentry __cerb(*this, false);
-40039:       if (__cerb && __sbout)
-40039:  {
-40039:    try
-40039:      {
-40039:        bool __ineof;
-40039:        if (!__copy_streambufs_eof(this->rdbuf(), __sbout, __ineof))
-40039:   __err |= ios_base::failbit;
-40039:        if (__ineof)
-40039:   __err |= ios_base::eofbit;
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        this->_M_setstate(ios_base::failbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { this->_M_setstate(ios_base::failbit); }
-40039:  }
-40039:       else if (!__sbout)
-40039:  __err |= ios_base::failbit;
-40039:       if (__err)
-40039:  this->setstate(__err);
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     typename basic_istream<_CharT, _Traits>::int_type
-40039:     basic_istream<_CharT, _Traits>::
-40039:     get(void)
-40039:     {
-40039:       const int_type __eof = traits_type::eof();
-40039:       int_type __c = __eof;
-40039:       _M_gcount = 0;
-40039:       ios_base::iostate __err = ios_base::goodbit;
-40039:       sentry __cerb(*this, true);
-40039:       if (__cerb)
-40039:  {
-40039:    try
-40039:      {
-40039:        __c = this->rdbuf()->sbumpc();
-40039: 
-40039:        if (!traits_type::eq_int_type(__c, __eof))
-40039:   _M_gcount = 1;
-40039:        else
-40039:   __err |= ios_base::eofbit;
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        this->_M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { this->_M_setstate(ios_base::badbit); }
-40039:  }
-40039:       if (!_M_gcount)
-40039:  __err |= ios_base::failbit;
-40039:       if (__err)
-40039:  this->setstate(__err);
-40039:       return __c;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     basic_istream<_CharT, _Traits>::
-40039:     get(char_type& __c)
-40039:     {
-40039:       _M_gcount = 0;
-40039:       ios_base::iostate __err = ios_base::goodbit;
-40039:       sentry __cerb(*this, true);
-40039:       if (__cerb)
-40039:  {
-40039:    try
-40039:      {
-40039:        const int_type __cb = this->rdbuf()->sbumpc();
-40039: 
-40039:        if (!traits_type::eq_int_type(__cb, traits_type::eof()))
-40039:   {
-40039:     _M_gcount = 1;
-40039:     __c = traits_type::to_char_type(__cb);
-40039:   }
-40039:        else
-40039:   __err |= ios_base::eofbit;
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        this->_M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { this->_M_setstate(ios_base::badbit); }
-40039:  }
-40039:       if (!_M_gcount)
-40039:  __err |= ios_base::failbit;
-40039:       if (__err)
-40039:  this->setstate(__err);
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     basic_istream<_CharT, _Traits>::
-40039:     get(char_type* __s, streamsize __n, char_type __delim)
-40039:     {
-40039:       _M_gcount = 0;
-40039:       ios_base::iostate __err = ios_base::goodbit;
-40039:       sentry __cerb(*this, true);
-40039:       if (__cerb)
-40039:  {
-40039:    try
-40039:      {
-40039:        const int_type __idelim = traits_type::to_int_type(__delim);
-40039:        const int_type __eof = traits_type::eof();
-40039:        __streambuf_type* __sb = this->rdbuf();
-40039:        int_type __c = __sb->sgetc();
-40039: 
-40039:        while (_M_gcount + 1 < __n
-40039:        && !traits_type::eq_int_type(__c, __eof)
-40039:        && !traits_type::eq_int_type(__c, __idelim))
-40039:   {
-40039:     *__s++ = traits_type::to_char_type(__c);
-40039:     ++_M_gcount;
-40039:     __c = __sb->snextc();
-40039:   }
-40039:        if (traits_type::eq_int_type(__c, __eof))
-40039:   __err |= ios_base::eofbit;
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        this->_M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { this->_M_setstate(ios_base::badbit); }
-40039:  }
-40039: 
-40039: 
-40039:       if (__n > 0)
-40039:  *__s = char_type();
-40039:       if (!_M_gcount)
-40039:  __err |= ios_base::failbit;
-40039:       if (__err)
-40039:  this->setstate(__err);
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     basic_istream<_CharT, _Traits>::
-40039:     get(__streambuf_type& __sb, char_type __delim)
-40039:     {
-40039:       _M_gcount = 0;
-40039:       ios_base::iostate __err = ios_base::goodbit;
-40039:       sentry __cerb(*this, true);
-40039:       if (__cerb)
-40039:  {
-40039:    try
-40039:      {
-40039:        const int_type __idelim = traits_type::to_int_type(__delim);
-40039:        const int_type __eof = traits_type::eof();
-40039:        __streambuf_type* __this_sb = this->rdbuf();
-40039:        int_type __c = __this_sb->sgetc();
-40039:        char_type __c2 = traits_type::to_char_type(__c);
-40039: 
-40039:        while (!traits_type::eq_int_type(__c, __eof)
-40039:        && !traits_type::eq_int_type(__c, __idelim)
-40039:        && !traits_type::eq_int_type(__sb.sputc(__c2), __eof))
-40039:   {
-40039:     ++_M_gcount;
-40039:     __c = __this_sb->snextc();
-40039:     __c2 = traits_type::to_char_type(__c);
-40039:   }
-40039:        if (traits_type::eq_int_type(__c, __eof))
-40039:   __err |= ios_base::eofbit;
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        this->_M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { this->_M_setstate(ios_base::badbit); }
-40039:  }
-40039:       if (!_M_gcount)
-40039:  __err |= ios_base::failbit;
-40039:       if (__err)
-40039:  this->setstate(__err);
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     basic_istream<_CharT, _Traits>::
-40039:     getline(char_type* __s, streamsize __n, char_type __delim)
-40039:     {
-40039:       _M_gcount = 0;
-40039:       ios_base::iostate __err = ios_base::goodbit;
-40039:       sentry __cerb(*this, true);
-40039:       if (__cerb)
-40039:         {
-40039:           try
-40039:             {
-40039:               const int_type __idelim = traits_type::to_int_type(__delim);
-40039:               const int_type __eof = traits_type::eof();
-40039:               __streambuf_type* __sb = this->rdbuf();
-40039:               int_type __c = __sb->sgetc();
-40039: 
-40039:               while (_M_gcount + 1 < __n
-40039:                      && !traits_type::eq_int_type(__c, __eof)
-40039:                      && !traits_type::eq_int_type(__c, __idelim))
-40039:                 {
-40039:                   *__s++ = traits_type::to_char_type(__c);
-40039:                   __c = __sb->snextc();
-40039:                   ++_M_gcount;
-40039:                 }
-40039:               if (traits_type::eq_int_type(__c, __eof))
-40039:                 __err |= ios_base::eofbit;
-40039:               else
-40039:                 {
-40039:                   if (traits_type::eq_int_type(__c, __idelim))
-40039:                     {
-40039:                       __sb->sbumpc();
-40039:                       ++_M_gcount;
-40039:                     }
-40039:                   else
-40039:                     __err |= ios_base::failbit;
-40039:                 }
-40039:             }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        this->_M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:           catch(...)
-40039:             { this->_M_setstate(ios_base::badbit); }
-40039:         }
-40039: 
-40039: 
-40039:       if (__n > 0)
-40039:  *__s = char_type();
-40039:       if (!_M_gcount)
-40039:         __err |= ios_base::failbit;
-40039:       if (__err)
-40039:         this->setstate(__err);
-40039:       return *this;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     basic_istream<_CharT, _Traits>::
-40039:     ignore(void)
-40039:     {
-40039:       _M_gcount = 0;
-40039:       sentry __cerb(*this, true);
-40039:       if (__cerb)
-40039:  {
-40039:    ios_base::iostate __err = ios_base::goodbit;
-40039:    try
-40039:      {
-40039:        const int_type __eof = traits_type::eof();
-40039:        __streambuf_type* __sb = this->rdbuf();
-40039: 
-40039:        if (traits_type::eq_int_type(__sb->sbumpc(), __eof))
-40039:   __err |= ios_base::eofbit;
-40039:        else
-40039:   _M_gcount = 1;
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        this->_M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { this->_M_setstate(ios_base::badbit); }
-40039:    if (__err)
-40039:      this->setstate(__err);
-40039:  }
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     basic_istream<_CharT, _Traits>::
-40039:     ignore(streamsize __n)
-40039:     {
-40039:       _M_gcount = 0;
-40039:       sentry __cerb(*this, true);
-40039:       if (__cerb && __n > 0)
-40039:         {
-40039:           ios_base::iostate __err = ios_base::goodbit;
-40039:           try
-40039:             {
-40039:               const int_type __eof = traits_type::eof();
-40039:               __streambuf_type* __sb = this->rdbuf();
-40039:               int_type __c = __sb->sgetc();
-40039: # 521 "/usr/include/c++/8/bits/istream.tcc" 3
-40039:        bool __large_ignore = false;
-40039:        while (true)
-40039:   {
-40039:     while (_M_gcount < __n
-40039:     && !traits_type::eq_int_type(__c, __eof))
-40039:       {
-40039:         ++_M_gcount;
-40039:         __c = __sb->snextc();
-40039:       }
-40039:     if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max
-40039:         && !traits_type::eq_int_type(__c, __eof))
-40039:       {
-40039:         _M_gcount =
-40039:    __gnu_cxx::__numeric_traits<streamsize>::__min;
-40039:         __large_ignore = true;
-40039:       }
-40039:     else
-40039:       break;
-40039:   }
-40039: 
-40039:        if (__large_ignore)
-40039:   _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max;
-40039: 
-40039:        if (traits_type::eq_int_type(__c, __eof))
-40039:                 __err |= ios_base::eofbit;
-40039:             }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        this->_M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:           catch(...)
-40039:             { this->_M_setstate(ios_base::badbit); }
-40039:           if (__err)
-40039:             this->setstate(__err);
-40039:         }
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     basic_istream<_CharT, _Traits>::
-40039:     ignore(streamsize __n, int_type __delim)
-40039:     {
-40039:       _M_gcount = 0;
-40039:       sentry __cerb(*this, true);
-40039:       if (__cerb && __n > 0)
-40039:         {
-40039:           ios_base::iostate __err = ios_base::goodbit;
-40039:           try
-40039:             {
-40039:               const int_type __eof = traits_type::eof();
-40039:               __streambuf_type* __sb = this->rdbuf();
-40039:               int_type __c = __sb->sgetc();
-40039: 
-40039: 
-40039:        bool __large_ignore = false;
-40039:        while (true)
-40039:   {
-40039:     while (_M_gcount < __n
-40039:     && !traits_type::eq_int_type(__c, __eof)
-40039:     && !traits_type::eq_int_type(__c, __delim))
-40039:       {
-40039:         ++_M_gcount;
-40039:         __c = __sb->snextc();
-40039:       }
-40039:     if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max
-40039:         && !traits_type::eq_int_type(__c, __eof)
-40039:         && !traits_type::eq_int_type(__c, __delim))
-40039:       {
-40039:         _M_gcount =
-40039:    __gnu_cxx::__numeric_traits<streamsize>::__min;
-40039:         __large_ignore = true;
-40039:       }
-40039:     else
-40039:       break;
-40039:   }
-40039: 
-40039:        if (__large_ignore)
-40039:   _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max;
-40039: 
-40039:               if (traits_type::eq_int_type(__c, __eof))
-40039:                 __err |= ios_base::eofbit;
-40039:        else if (traits_type::eq_int_type(__c, __delim))
-40039:   {
-40039:     if (_M_gcount
-40039:         < __gnu_cxx::__numeric_traits<streamsize>::__max)
-40039:       ++_M_gcount;
-40039:     __sb->sbumpc();
-40039:   }
-40039:             }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        this->_M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:           catch(...)
-40039:             { this->_M_setstate(ios_base::badbit); }
-40039:           if (__err)
-40039:             this->setstate(__err);
-40039:         }
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     typename basic_istream<_CharT, _Traits>::int_type
-40039:     basic_istream<_CharT, _Traits>::
-40039:     peek(void)
-40039:     {
-40039:       int_type __c = traits_type::eof();
-40039:       _M_gcount = 0;
-40039:       sentry __cerb(*this, true);
-40039:       if (__cerb)
-40039:  {
-40039:    ios_base::iostate __err = ios_base::goodbit;
-40039:    try
-40039:      {
-40039:        __c = this->rdbuf()->sgetc();
-40039:        if (traits_type::eq_int_type(__c, traits_type::eof()))
-40039:   __err |= ios_base::eofbit;
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        this->_M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { this->_M_setstate(ios_base::badbit); }
-40039:    if (__err)
-40039:      this->setstate(__err);
-40039:  }
-40039:       return __c;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     basic_istream<_CharT, _Traits>::
-40039:     read(char_type* __s, streamsize __n)
-40039:     {
-40039:       _M_gcount = 0;
-40039:       sentry __cerb(*this, true);
-40039:       if (__cerb)
-40039:  {
-40039:    ios_base::iostate __err = ios_base::goodbit;
-40039:    try
-40039:      {
-40039:        _M_gcount = this->rdbuf()->sgetn(__s, __n);
-40039:        if (_M_gcount != __n)
-40039:   __err |= (ios_base::eofbit | ios_base::failbit);
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        this->_M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { this->_M_setstate(ios_base::badbit); }
-40039:    if (__err)
-40039:      this->setstate(__err);
-40039:  }
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     streamsize
-40039:     basic_istream<_CharT, _Traits>::
-40039:     readsome(char_type* __s, streamsize __n)
-40039:     {
-40039:       _M_gcount = 0;
-40039:       sentry __cerb(*this, true);
-40039:       if (__cerb)
-40039:  {
-40039:    ios_base::iostate __err = ios_base::goodbit;
-40039:    try
-40039:      {
-40039: 
-40039:        const streamsize __num = this->rdbuf()->in_avail();
-40039:        if (__num > 0)
-40039:   _M_gcount = this->rdbuf()->sgetn(__s, std::min(__num, __n));
-40039:        else if (__num == -1)
-40039:   __err |= ios_base::eofbit;
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        this->_M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { this->_M_setstate(ios_base::badbit); }
-40039:    if (__err)
-40039:      this->setstate(__err);
-40039:  }
-40039:       return _M_gcount;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     basic_istream<_CharT, _Traits>::
-40039:     putback(char_type __c)
-40039:     {
-40039: 
-40039: 
-40039:       _M_gcount = 0;
-40039: 
-40039:       this->clear(this->rdstate() & ~ios_base::eofbit);
-40039:       sentry __cerb(*this, true);
-40039:       if (__cerb)
-40039:  {
-40039:    ios_base::iostate __err = ios_base::goodbit;
-40039:    try
-40039:      {
-40039:        const int_type __eof = traits_type::eof();
-40039:        __streambuf_type* __sb = this->rdbuf();
-40039:        if (!__sb
-40039:     || traits_type::eq_int_type(__sb->sputbackc(__c), __eof))
-40039:   __err |= ios_base::badbit;
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        this->_M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { this->_M_setstate(ios_base::badbit); }
-40039:    if (__err)
-40039:      this->setstate(__err);
-40039:  }
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     basic_istream<_CharT, _Traits>::
-40039:     unget(void)
-40039:     {
-40039: 
-40039: 
-40039:       _M_gcount = 0;
-40039: 
-40039:       this->clear(this->rdstate() & ~ios_base::eofbit);
-40039:       sentry __cerb(*this, true);
-40039:       if (__cerb)
-40039:  {
-40039:    ios_base::iostate __err = ios_base::goodbit;
-40039:    try
-40039:      {
-40039:        const int_type __eof = traits_type::eof();
-40039:        __streambuf_type* __sb = this->rdbuf();
-40039:        if (!__sb
-40039:     || traits_type::eq_int_type(__sb->sungetc(), __eof))
-40039:   __err |= ios_base::badbit;
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        this->_M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { this->_M_setstate(ios_base::badbit); }
-40039:    if (__err)
-40039:      this->setstate(__err);
-40039:  }
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     int
-40039:     basic_istream<_CharT, _Traits>::
-40039:     sync(void)
-40039:     {
-40039: 
-40039: 
-40039:       int __ret = -1;
-40039:       sentry __cerb(*this, true);
-40039:       if (__cerb)
-40039:  {
-40039:    ios_base::iostate __err = ios_base::goodbit;
-40039:    try
-40039:      {
-40039:        __streambuf_type* __sb = this->rdbuf();
-40039:        if (__sb)
-40039:   {
-40039:     if (__sb->pubsync() == -1)
-40039:       __err |= ios_base::badbit;
-40039:     else
-40039:       __ret = 0;
-40039:   }
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        this->_M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { this->_M_setstate(ios_base::badbit); }
-40039:    if (__err)
-40039:      this->setstate(__err);
-40039:  }
-40039:       return __ret;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     typename basic_istream<_CharT, _Traits>::pos_type
-40039:     basic_istream<_CharT, _Traits>::
-40039:     tellg(void)
-40039:     {
-40039: 
-40039: 
-40039:       pos_type __ret = pos_type(-1);
-40039:       sentry __cerb(*this, true);
-40039:       if (__cerb)
-40039:  {
-40039:    try
-40039:      {
-40039:        if (!this->fail())
-40039:   __ret = this->rdbuf()->pubseekoff(0, ios_base::cur,
-40039:         ios_base::in);
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        this->_M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { this->_M_setstate(ios_base::badbit); }
-40039:  }
-40039:       return __ret;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     basic_istream<_CharT, _Traits>::
-40039:     seekg(pos_type __pos)
-40039:     {
-40039: 
-40039: 
-40039: 
-40039:       this->clear(this->rdstate() & ~ios_base::eofbit);
-40039:       sentry __cerb(*this, true);
-40039:       if (__cerb)
-40039:  {
-40039:    ios_base::iostate __err = ios_base::goodbit;
-40039:    try
-40039:      {
-40039:        if (!this->fail())
-40039:   {
-40039: 
-40039:     const pos_type __p = this->rdbuf()->pubseekpos(__pos,
-40039:          ios_base::in);
-40039: 
-40039: 
-40039:     if (__p == pos_type(off_type(-1)))
-40039:       __err |= ios_base::failbit;
-40039:   }
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        this->_M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { this->_M_setstate(ios_base::badbit); }
-40039:    if (__err)
-40039:      this->setstate(__err);
-40039:  }
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     basic_istream<_CharT, _Traits>::
-40039:     seekg(off_type __off, ios_base::seekdir __dir)
-40039:     {
-40039: 
-40039: 
-40039: 
-40039:       this->clear(this->rdstate() & ~ios_base::eofbit);
-40039:       sentry __cerb(*this, true);
-40039:       if (__cerb)
-40039:  {
-40039:    ios_base::iostate __err = ios_base::goodbit;
-40039:    try
-40039:      {
-40039:        if (!this->fail())
-40039:   {
-40039: 
-40039:     const pos_type __p = this->rdbuf()->pubseekoff(__off, __dir,
-40039:          ios_base::in);
-40039: 
-40039: 
-40039:     if (__p == pos_type(off_type(-1)))
-40039:       __err |= ios_base::failbit;
-40039:   }
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        this->_M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { this->_M_setstate(ios_base::badbit); }
-40039:    if (__err)
-40039:      this->setstate(__err);
-40039:  }
-40039:       return *this;
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c)
-40039:     {
-40039:       typedef basic_istream<_CharT, _Traits> __istream_type;
-40039:       typedef typename __istream_type::int_type __int_type;
-40039: 
-40039:       typename __istream_type::sentry __cerb(__in, false);
-40039:       if (__cerb)
-40039:  {
-40039:    ios_base::iostate __err = ios_base::goodbit;
-40039:    try
-40039:      {
-40039:        const __int_type __cb = __in.rdbuf()->sbumpc();
-40039:        if (!_Traits::eq_int_type(__cb, _Traits::eof()))
-40039:   __c = _Traits::to_char_type(__cb);
-40039:        else
-40039:   __err |= (ios_base::eofbit | ios_base::failbit);
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        __in._M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { __in._M_setstate(ios_base::badbit); }
-40039:    if (__err)
-40039:      __in.setstate(__err);
-40039:  }
-40039:       return __in;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s)
-40039:     {
-40039:       typedef basic_istream<_CharT, _Traits> __istream_type;
-40039:       typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
-40039:       typedef typename _Traits::int_type int_type;
-40039:       typedef _CharT char_type;
-40039:       typedef ctype<_CharT> __ctype_type;
-40039: 
-40039:       streamsize __extracted = 0;
-40039:       ios_base::iostate __err = ios_base::goodbit;
-40039:       typename __istream_type::sentry __cerb(__in, false);
-40039:       if (__cerb)
-40039:  {
-40039:    try
-40039:      {
-40039: 
-40039:        streamsize __num = __in.width();
-40039:        if (__num <= 0)
-40039:   __num = __gnu_cxx::__numeric_traits<streamsize>::__max;
-40039: 
-40039:        const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc());
-40039: 
-40039:        const int_type __eof = _Traits::eof();
-40039:        __streambuf_type* __sb = __in.rdbuf();
-40039:        int_type __c = __sb->sgetc();
-40039: 
-40039:        while (__extracted < __num - 1
-40039:        && !_Traits::eq_int_type(__c, __eof)
-40039:        && !__ct.is(ctype_base::space,
-40039:      _Traits::to_char_type(__c)))
-40039:   {
-40039:     *__s++ = _Traits::to_char_type(__c);
-40039:     ++__extracted;
-40039:     __c = __sb->snextc();
-40039:   }
-40039:        if (_Traits::eq_int_type(__c, __eof))
-40039:   __err |= ios_base::eofbit;
-40039: 
-40039: 
-40039: 
-40039:        *__s = char_type();
-40039:        __in.width(0);
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        __in._M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { __in._M_setstate(ios_base::badbit); }
-40039:  }
-40039:       if (!__extracted)
-40039:  __err |= ios_base::failbit;
-40039:       if (__err)
-40039:  __in.setstate(__err);
-40039:       return __in;
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     ws(basic_istream<_CharT, _Traits>& __in)
-40039:     {
-40039:       typedef basic_istream<_CharT, _Traits> __istream_type;
-40039:       typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
-40039:       typedef typename __istream_type::int_type __int_type;
-40039:       typedef ctype<_CharT> __ctype_type;
-40039: 
-40039:       const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc());
-40039:       const __int_type __eof = _Traits::eof();
-40039:       __streambuf_type* __sb = __in.rdbuf();
-40039:       __int_type __c = __sb->sgetc();
-40039: 
-40039:       while (!_Traits::eq_int_type(__c, __eof)
-40039:       && __ct.is(ctype_base::space, _Traits::to_char_type(__c)))
-40039:  __c = __sb->snextc();
-40039: 
-40039:        if (_Traits::eq_int_type(__c, __eof))
-40039:   __in.setstate(ios_base::eofbit);
-40039:       return __in;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   extern template class basic_istream<char>;
-40039:   extern template istream& ws(istream&);
-40039:   extern template istream& operator>>(istream&, char&);
-40039:   extern template istream& operator>>(istream&, char*);
-40039:   extern template istream& operator>>(istream&, unsigned char&);
-40039:   extern template istream& operator>>(istream&, signed char&);
-40039:   extern template istream& operator>>(istream&, unsigned char*);
-40039:   extern template istream& operator>>(istream&, signed char*);
-40039: 
-40039:   extern template istream& istream::_M_extract(unsigned short&);
-40039:   extern template istream& istream::_M_extract(unsigned int&);
-40039:   extern template istream& istream::_M_extract(long&);
-40039:   extern template istream& istream::_M_extract(unsigned long&);
-40039:   extern template istream& istream::_M_extract(bool&);
-40039: 
-40039:   extern template istream& istream::_M_extract(long long&);
-40039:   extern template istream& istream::_M_extract(unsigned long long&);
-40039: 
-40039:   extern template istream& istream::_M_extract(float&);
-40039:   extern template istream& istream::_M_extract(double&);
-40039:   extern template istream& istream::_M_extract(long double&);
-40039:   extern template istream& istream::_M_extract(void*&);
-40039: 
-40039:   extern template class basic_iostream<char>;
-40039: 
-40039: 
-40039:   extern template class basic_istream<wchar_t>;
-40039:   extern template wistream& ws(wistream&);
-40039:   extern template wistream& operator>>(wistream&, wchar_t&);
-40039:   extern template wistream& operator>>(wistream&, wchar_t*);
-40039: 
-40039:   extern template wistream& wistream::_M_extract(unsigned short&);
-40039:   extern template wistream& wistream::_M_extract(unsigned int&);
-40039:   extern template wistream& wistream::_M_extract(long&);
-40039:   extern template wistream& wistream::_M_extract(unsigned long&);
-40039:   extern template wistream& wistream::_M_extract(bool&);
-40039: 
-40039:   extern template wistream& wistream::_M_extract(long long&);
-40039:   extern template wistream& wistream::_M_extract(unsigned long long&);
-40039: 
-40039:   extern template wistream& wistream::_M_extract(float&);
-40039:   extern template wistream& wistream::_M_extract(double&);
-40039:   extern template wistream& wistream::_M_extract(long double&);
-40039:   extern template wistream& wistream::_M_extract(void*&);
-40039: 
-40039:   extern template class basic_iostream<wchar_t>;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 992 "/usr/include/c++/8/istream" 2 3
-40039: # 31 "../../src/globals_inlines.hh" 2
-40039: 
-40039: # 1 "/usr/include/c++/8/cctype" 1 3
-40039: # 39 "/usr/include/c++/8/cctype" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/cctype" 3
-40039: # 33 "../../src/globals_inlines.hh" 2
-40039: 
-40039: 
-40039: 
-40039: # 35 "../../src/globals_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline dimension_type
-40039: not_a_dimension() {
-40039:   return std::numeric_limits<dimension_type>::max();
-40039: }
-40039: 
-40039: inline int32_t
-40039: hash_code_from_dimension(dimension_type dim) {
-40039:   const dimension_type divisor = 1U << (32 - 1);
-40039:   dim = dim % divisor;
-40039:   return static_cast<int32_t>(dim);
-40039: }
-40039: 
-40039: inline const Weightwatch_Traits::Threshold&
-40039: Weightwatch_Traits::get() {
-40039:   return weight;
-40039: }
-40039: 
-40039: inline bool
-40039: Weightwatch_Traits::less_than(const Threshold& a, const Threshold& b) {
-40039:   return b - a < (1ULL << (((sizeof(Threshold)) * static_cast<std::size_t>(8)) - 1));
-40039: }
-40039: 
-40039: inline Weightwatch_Traits::Delta
-40039: Weightwatch_Traits::compute_delta(unsigned long unscaled, unsigned scale) {
-40039:   if ((std::numeric_limits<Delta>::max() >> scale) < unscaled) {
-40039:     throw std::invalid_argument("PPL::Weightwatch_Traits::"
-40039:                                 "compute_delta(u, s):\n"
-40039:                                 "values of u and s cause wrap around.");
-40039:   }
-40039:   return static_cast<Delta>(unscaled) << scale;
-40039: }
-40039: 
-40039: inline void
-40039: Weightwatch_Traits::from_delta(Threshold& threshold, const Delta& delta) {
-40039:   threshold = weight + delta;
-40039: }
-40039: 
-40039: inline void
-40039: maybe_abandon() {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (Weightwatch_Traits::check_function != 0) {
-40039:     Weightwatch_Traits::check_function();
-40039:   }
-40039:   if (const Throwable* const p = abandon_expensive_computations) {
-40039:     p->throw_me();
-40039:   }
-40039: }
-40039: 
-40039: inline dimension_type
-40039: compute_capacity(const dimension_type requested_size,
-40039:                  const dimension_type maximum_size) {
-40039:   
-40039: # 92 "../../src/globals_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 92 "../../src/globals_inlines.hh"
-40039:                                        ;
-40039: 
-40039:   return (requested_size < maximum_size/2)
-40039:     ? (2*(requested_size + 1))
-40039:     : maximum_size;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename
-40039: Enable_If<Is_Native<T>::value, memory_size_type>::type
-40039: external_memory_in_bytes(const T&) {
-40039:   return 0;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename
-40039: Enable_If<Is_Native<T>::value, memory_size_type>::type
-40039: total_memory_in_bytes(const T&) {
-40039:   return sizeof(T);
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: external_memory_in_bytes(const mpz_class& x) {
-40039:   return static_cast<memory_size_type>(x.get_mpz_t()[0]._mp_alloc)
-40039:     * 8;
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: total_memory_in_bytes(const mpz_class& x) {
-40039:   return sizeof(x) + external_memory_in_bytes(x);
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: external_memory_in_bytes(const mpq_class& x) {
-40039:   return external_memory_in_bytes(x.get_num())
-40039:     + external_memory_in_bytes(x.get_den());
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: total_memory_in_bytes(const mpq_class& x) {
-40039:   return sizeof(x) + external_memory_in_bytes(x);
-40039: }
-40039: 
-40039: inline void
-40039: ascii_dump(std::ostream& s, Representation r) {
-40039:   if (r == DENSE) {
-40039:     s << "DENSE";
-40039:   }
-40039:   else {
-40039:     s << "SPARSE";
-40039:   }
-40039: }
-40039: 
-40039: inline bool
-40039: ascii_load(std::istream& is, Representation& r) {
-40039:   std::string s;
-40039:   if (!(is >> s)) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (s == "DENSE") {
-40039:     r = DENSE;
-40039:     return true;
-40039:   }
-40039:   if (s == "SPARSE") {
-40039:     r = SPARSE;
-40039:     return true;
-40039:   }
-40039:   return false;
-40039: }
-40039: 
-40039: inline bool
-40039: is_space(char c) {
-40039:   return isspace(c) != 0;
-40039: }
-40039: 
-40039: template <typename RA_Container>
-40039: inline typename RA_Container::iterator
-40039: nth_iter(RA_Container& cont, dimension_type n) {
-40039:   typedef typename RA_Container::difference_type diff_t;
-40039:   return cont.begin() + static_cast<diff_t>(n);
-40039: }
-40039: 
-40039: template <typename RA_Container>
-40039: inline typename RA_Container::const_iterator
-40039: nth_iter(const RA_Container& cont, dimension_type n) {
-40039:   typedef typename RA_Container::difference_type diff_t;
-40039:   return cont.begin() + static_cast<diff_t>(n);
-40039: }
-40039: 
-40039: inline dimension_type
-40039: least_significant_one_mask(const dimension_type i) {
-40039:   return i & (~i + 1U);
-40039: }
-40039: 
-40039: }
-40039: # 570 "../../src/globals_defs.hh" 2
-40039: # 28 "../../src/Variable_inlines.hh" 2
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline dimension_type
-40039: Variable::max_space_dimension() {
-40039:   return not_a_dimension() - 1;
-40039: }
-40039: 
-40039: inline
-40039: Variable::Variable(dimension_type i)
-40039:   : varid((i < max_space_dimension())
-40039:           ? i
-40039:           : (throw std::length_error("PPL::Variable::Variable(i):\n"
-40039:                                      "i exceeds the maximum allowed "
-40039:                                      "variable identifier."), i)) {
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Variable::id() const {
-40039:   return varid;
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Variable::space_dimension() const {
-40039:   return varid + 1;
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Variable::external_memory_in_bytes() const {
-40039:   return 0;
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Variable::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: inline void
-40039: Variable::set_output_function(output_function_type* p) {
-40039:   current_output_function = p;
-40039: }
-40039: 
-40039: inline Variable::output_function_type*
-40039: Variable::get_output_function() {
-40039:   return current_output_function;
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: less(const Variable v, const Variable w) {
-40039:   return v.id() < w.id();
-40039: }
-40039: 
-40039: inline bool
-40039: Variable::Compare::operator()(const Variable x, const Variable y) const {
-40039:   return less(x, y);
-40039: }
-40039: 
-40039: inline void
-40039: Variable::m_swap(Variable& v) {
-40039:   using std::swap;
-40039:   swap(varid, v.varid);
-40039: }
-40039: 
-40039: inline void
-40039: swap(Variable& x, Variable& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 156 "../../src/Variable_defs.hh" 2
-40039: # 28 "../../src/Float_inlines.hh" 2
-40039: # 1 "../../src/Linear_Form_defs.hh" 1
-40039: # 28 "../../src/Linear_Form_defs.hh"
-40039: # 1 "../../src/Linear_Expression_types.hh" 1
-40039: # 16 "../../src/Linear_Expression_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Linear_Expression;
-40039: 
-40039: }
-40039: # 29 "../../src/Linear_Form_defs.hh" 2
-40039: 
-40039: # 1 "../../src/Box_types.hh" 1
-40039: # 16 "../../src/Box_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Interval>
-40039: class Box;
-40039: 
-40039: class Box_Helpers;
-40039: 
-40039: }
-40039: # 31 "../../src/Linear_Form_defs.hh" 2
-40039: # 1 "../../src/Float_defs.hh" 1
-40039: # 32 "../../src/Linear_Form_defs.hh" 2
-40039: # 1 "/usr/include/c++/8/vector" 1 3
-40039: # 58 "/usr/include/c++/8/vector" 3
-40039:        
-40039: # 59 "/usr/include/c++/8/vector" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/stl_uninitialized.h" 1 3
-40039: # 67 "/usr/include/c++/8/bits/stl_uninitialized.h" 3
-40039: 
-40039: # 67 "/usr/include/c++/8/bits/stl_uninitialized.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   template<bool _TrivialValueTypes>
-40039:     struct __uninitialized_copy
-40039:     {
-40039:       template<typename _InputIterator, typename _ForwardIterator>
-40039:         static _ForwardIterator
-40039:         __uninit_copy(_InputIterator __first, _InputIterator __last,
-40039:         _ForwardIterator __result)
-40039:         {
-40039:    _ForwardIterator __cur = __result;
-40039:    try
-40039:      {
-40039:        for (; __first != __last; ++__first, (void)++__cur)
-40039:   std::_Construct(std::__addressof(*__cur), *__first);
-40039:        return __cur;
-40039:      }
-40039:    catch(...)
-40039:      {
-40039:        std::_Destroy(__result, __cur);
-40039:        throw;
-40039:      }
-40039:  }
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __uninitialized_copy<true>
-40039:     {
-40039:       template<typename _InputIterator, typename _ForwardIterator>
-40039:         static _ForwardIterator
-40039:         __uninit_copy(_InputIterator __first, _InputIterator __last,
-40039:         _ForwardIterator __result)
-40039:         { return std::copy(__first, __last, __result); }
-40039:     };
-40039: # 113 "/usr/include/c++/8/bits/stl_uninitialized.h" 3
-40039:   template<typename _InputIterator, typename _ForwardIterator>
-40039:     inline _ForwardIterator
-40039:     uninitialized_copy(_InputIterator __first, _InputIterator __last,
-40039:          _ForwardIterator __result)
-40039:     {
-40039:       typedef typename iterator_traits<_InputIterator>::value_type
-40039:  _ValueType1;
-40039:       typedef typename iterator_traits<_ForwardIterator>::value_type
-40039:  _ValueType2;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       typedef typename iterator_traits<_InputIterator>::reference _RefType1;
-40039:       typedef typename iterator_traits<_ForwardIterator>::reference _RefType2;
-40039:       const bool __assignable = is_assignable<_RefType2, _RefType1>::value;
-40039: 
-40039: 
-40039:       return std::__uninitialized_copy<__is_trivial(_ValueType1)
-40039:            && __is_trivial(_ValueType2)
-40039:            && __assignable>::
-40039:  __uninit_copy(__first, __last, __result);
-40039:     }
-40039: 
-40039: 
-40039:   template<bool _TrivialValueType>
-40039:     struct __uninitialized_fill
-40039:     {
-40039:       template<typename _ForwardIterator, typename _Tp>
-40039:         static void
-40039:         __uninit_fill(_ForwardIterator __first, _ForwardIterator __last,
-40039:         const _Tp& __x)
-40039:         {
-40039:    _ForwardIterator __cur = __first;
-40039:    try
-40039:      {
-40039:        for (; __cur != __last; ++__cur)
-40039:   std::_Construct(std::__addressof(*__cur), __x);
-40039:      }
-40039:    catch(...)
-40039:      {
-40039:        std::_Destroy(__first, __cur);
-40039:        throw;
-40039:      }
-40039:  }
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __uninitialized_fill<true>
-40039:     {
-40039:       template<typename _ForwardIterator, typename _Tp>
-40039:         static void
-40039:         __uninit_fill(_ForwardIterator __first, _ForwardIterator __last,
-40039:         const _Tp& __x)
-40039:         { std::fill(__first, __last, __x); }
-40039:     };
-40039: # 179 "/usr/include/c++/8/bits/stl_uninitialized.h" 3
-40039:   template<typename _ForwardIterator, typename _Tp>
-40039:     inline void
-40039:     uninitialized_fill(_ForwardIterator __first, _ForwardIterator __last,
-40039:          const _Tp& __x)
-40039:     {
-40039:       typedef typename iterator_traits<_ForwardIterator>::value_type
-40039:  _ValueType;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const bool __assignable = is_copy_assignable<_ValueType>::value;
-40039: 
-40039: 
-40039:       std::__uninitialized_fill<__is_trivial(_ValueType) && __assignable>::
-40039:  __uninit_fill(__first, __last, __x);
-40039:     }
-40039: 
-40039: 
-40039:   template<bool _TrivialValueType>
-40039:     struct __uninitialized_fill_n
-40039:     {
-40039:       template<typename _ForwardIterator, typename _Size, typename _Tp>
-40039:         static _ForwardIterator
-40039:         __uninit_fill_n(_ForwardIterator __first, _Size __n,
-40039:    const _Tp& __x)
-40039:         {
-40039:    _ForwardIterator __cur = __first;
-40039:    try
-40039:      {
-40039:        for (; __n > 0; --__n, (void) ++__cur)
-40039:   std::_Construct(std::__addressof(*__cur), __x);
-40039:        return __cur;
-40039:      }
-40039:    catch(...)
-40039:      {
-40039:        std::_Destroy(__first, __cur);
-40039:        throw;
-40039:      }
-40039:  }
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __uninitialized_fill_n<true>
-40039:     {
-40039:       template<typename _ForwardIterator, typename _Size, typename _Tp>
-40039:         static _ForwardIterator
-40039:         __uninit_fill_n(_ForwardIterator __first, _Size __n,
-40039:    const _Tp& __x)
-40039:         { return std::fill_n(__first, __n, __x); }
-40039:     };
-40039: # 242 "/usr/include/c++/8/bits/stl_uninitialized.h" 3
-40039:   template<typename _ForwardIterator, typename _Size, typename _Tp>
-40039:     inline _ForwardIterator
-40039:     uninitialized_fill_n(_ForwardIterator __first, _Size __n, const _Tp& __x)
-40039:     {
-40039:       typedef typename iterator_traits<_ForwardIterator>::value_type
-40039:  _ValueType;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const bool __assignable = is_copy_assignable<_ValueType>::value;
-40039: 
-40039:       return __uninitialized_fill_n<__is_trivial(_ValueType) && __assignable>::
-40039:  __uninit_fill_n(__first, __n, __x);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _InputIterator, typename _ForwardIterator,
-40039:     typename _Allocator>
-40039:     _ForwardIterator
-40039:     __uninitialized_copy_a(_InputIterator __first, _InputIterator __last,
-40039:       _ForwardIterator __result, _Allocator& __alloc)
-40039:     {
-40039:       _ForwardIterator __cur = __result;
-40039:       try
-40039:  {
-40039:    typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
-40039:    for (; __first != __last; ++__first, (void)++__cur)
-40039:      __traits::construct(__alloc, std::__addressof(*__cur), *__first);
-40039:    return __cur;
-40039:  }
-40039:       catch(...)
-40039:  {
-40039:    std::_Destroy(__result, __cur, __alloc);
-40039:    throw;
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _InputIterator, typename _ForwardIterator, typename _Tp>
-40039:     inline _ForwardIterator
-40039:     __uninitialized_copy_a(_InputIterator __first, _InputIterator __last,
-40039:       _ForwardIterator __result, allocator<_Tp>&)
-40039:     { return std::uninitialized_copy(__first, __last, __result); }
-40039: 
-40039:   template<typename _InputIterator, typename _ForwardIterator,
-40039:     typename _Allocator>
-40039:     inline _ForwardIterator
-40039:     __uninitialized_move_a(_InputIterator __first, _InputIterator __last,
-40039:       _ForwardIterator __result, _Allocator& __alloc)
-40039:     {
-40039:       return std::__uninitialized_copy_a(std::make_move_iterator(__first),
-40039:       std::make_move_iterator(__last),
-40039:       __result, __alloc);
-40039:     }
-40039: 
-40039:   template<typename _InputIterator, typename _ForwardIterator,
-40039:     typename _Allocator>
-40039:     inline _ForwardIterator
-40039:     __uninitialized_move_if_noexcept_a(_InputIterator __first,
-40039:            _InputIterator __last,
-40039:            _ForwardIterator __result,
-40039:            _Allocator& __alloc)
-40039:     {
-40039:       return std::__uninitialized_copy_a
-40039:  (std::__make_move_if_noexcept_iterator(__first),
-40039:   std::__make_move_if_noexcept_iterator(__last), __result, __alloc);
-40039:     }
-40039: 
-40039:   template<typename _ForwardIterator, typename _Tp, typename _Allocator>
-40039:     void
-40039:     __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last,
-40039:       const _Tp& __x, _Allocator& __alloc)
-40039:     {
-40039:       _ForwardIterator __cur = __first;
-40039:       try
-40039:  {
-40039:    typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
-40039:    for (; __cur != __last; ++__cur)
-40039:      __traits::construct(__alloc, std::__addressof(*__cur), __x);
-40039:  }
-40039:       catch(...)
-40039:  {
-40039:    std::_Destroy(__first, __cur, __alloc);
-40039:    throw;
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _ForwardIterator, typename _Tp, typename _Tp2>
-40039:     inline void
-40039:     __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last,
-40039:       const _Tp& __x, allocator<_Tp2>&)
-40039:     { std::uninitialized_fill(__first, __last, __x); }
-40039: 
-40039:   template<typename _ForwardIterator, typename _Size, typename _Tp,
-40039:     typename _Allocator>
-40039:     _ForwardIterator
-40039:     __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n,
-40039:         const _Tp& __x, _Allocator& __alloc)
-40039:     {
-40039:       _ForwardIterator __cur = __first;
-40039:       try
-40039:  {
-40039:    typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
-40039:    for (; __n > 0; --__n, (void) ++__cur)
-40039:      __traits::construct(__alloc, std::__addressof(*__cur), __x);
-40039:    return __cur;
-40039:  }
-40039:       catch(...)
-40039:  {
-40039:    std::_Destroy(__first, __cur, __alloc);
-40039:    throw;
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _ForwardIterator, typename _Size, typename _Tp,
-40039:     typename _Tp2>
-40039:     inline _ForwardIterator
-40039:     __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n,
-40039:         const _Tp& __x, allocator<_Tp2>&)
-40039:     { return std::uninitialized_fill_n(__first, __n, __x); }
-40039: # 378 "/usr/include/c++/8/bits/stl_uninitialized.h" 3
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _ForwardIterator, typename _Allocator>
-40039:     inline _ForwardIterator
-40039:     __uninitialized_copy_move(_InputIterator1 __first1,
-40039:          _InputIterator1 __last1,
-40039:          _InputIterator2 __first2,
-40039:          _InputIterator2 __last2,
-40039:          _ForwardIterator __result,
-40039:          _Allocator& __alloc)
-40039:     {
-40039:       _ForwardIterator __mid = std::__uninitialized_copy_a(__first1, __last1,
-40039:           __result,
-40039:           __alloc);
-40039:       try
-40039:  {
-40039:    return std::__uninitialized_move_a(__first2, __last2, __mid, __alloc);
-40039:  }
-40039:       catch(...)
-40039:  {
-40039:    std::_Destroy(__result, __mid, __alloc);
-40039:    throw;
-40039:  }
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _InputIterator1, typename _InputIterator2,
-40039:     typename _ForwardIterator, typename _Allocator>
-40039:     inline _ForwardIterator
-40039:     __uninitialized_move_copy(_InputIterator1 __first1,
-40039:          _InputIterator1 __last1,
-40039:          _InputIterator2 __first2,
-40039:          _InputIterator2 __last2,
-40039:          _ForwardIterator __result,
-40039:          _Allocator& __alloc)
-40039:     {
-40039:       _ForwardIterator __mid = std::__uninitialized_move_a(__first1, __last1,
-40039:           __result,
-40039:           __alloc);
-40039:       try
-40039:  {
-40039:    return std::__uninitialized_copy_a(__first2, __last2, __mid, __alloc);
-40039:  }
-40039:       catch(...)
-40039:  {
-40039:    std::_Destroy(__result, __mid, __alloc);
-40039:    throw;
-40039:  }
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _ForwardIterator, typename _Tp, typename _InputIterator,
-40039:     typename _Allocator>
-40039:     inline _ForwardIterator
-40039:     __uninitialized_fill_move(_ForwardIterator __result, _ForwardIterator __mid,
-40039:          const _Tp& __x, _InputIterator __first,
-40039:          _InputIterator __last, _Allocator& __alloc)
-40039:     {
-40039:       std::__uninitialized_fill_a(__result, __mid, __x, __alloc);
-40039:       try
-40039:  {
-40039:    return std::__uninitialized_move_a(__first, __last, __mid, __alloc);
-40039:  }
-40039:       catch(...)
-40039:  {
-40039:    std::_Destroy(__result, __mid, __alloc);
-40039:    throw;
-40039:  }
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _InputIterator, typename _ForwardIterator, typename _Tp,
-40039:     typename _Allocator>
-40039:     inline void
-40039:     __uninitialized_move_fill(_InputIterator __first1, _InputIterator __last1,
-40039:          _ForwardIterator __first2,
-40039:          _ForwardIterator __last2, const _Tp& __x,
-40039:          _Allocator& __alloc)
-40039:     {
-40039:       _ForwardIterator __mid2 = std::__uninitialized_move_a(__first1, __last1,
-40039:            __first2,
-40039:            __alloc);
-40039:       try
-40039:  {
-40039:    std::__uninitialized_fill_a(__mid2, __last2, __x, __alloc);
-40039:  }
-40039:       catch(...)
-40039:  {
-40039:    std::_Destroy(__first2, __mid2, __alloc);
-40039:    throw;
-40039:  }
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<bool _TrivialValueType>
-40039:     struct __uninitialized_default_1
-40039:     {
-40039:       template<typename _ForwardIterator>
-40039:         static void
-40039:         __uninit_default(_ForwardIterator __first, _ForwardIterator __last)
-40039:         {
-40039:    _ForwardIterator __cur = __first;
-40039:    try
-40039:      {
-40039:        for (; __cur != __last; ++__cur)
-40039:   std::_Construct(std::__addressof(*__cur));
-40039:      }
-40039:    catch(...)
-40039:      {
-40039:        std::_Destroy(__first, __cur);
-40039:        throw;
-40039:      }
-40039:  }
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __uninitialized_default_1<true>
-40039:     {
-40039:       template<typename _ForwardIterator>
-40039:         static void
-40039:         __uninit_default(_ForwardIterator __first, _ForwardIterator __last)
-40039:         {
-40039:    typedef typename iterator_traits<_ForwardIterator>::value_type
-40039:      _ValueType;
-40039: 
-40039:    std::fill(__first, __last, _ValueType());
-40039:  }
-40039:     };
-40039: 
-40039:   template<bool _TrivialValueType>
-40039:     struct __uninitialized_default_n_1
-40039:     {
-40039:       template<typename _ForwardIterator, typename _Size>
-40039:         static _ForwardIterator
-40039:         __uninit_default_n(_ForwardIterator __first, _Size __n)
-40039:         {
-40039:    _ForwardIterator __cur = __first;
-40039:    try
-40039:      {
-40039:        for (; __n > 0; --__n, (void) ++__cur)
-40039:   std::_Construct(std::__addressof(*__cur));
-40039:        return __cur;
-40039:      }
-40039:    catch(...)
-40039:      {
-40039:        std::_Destroy(__first, __cur);
-40039:        throw;
-40039:      }
-40039:  }
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __uninitialized_default_n_1<true>
-40039:     {
-40039:       template<typename _ForwardIterator, typename _Size>
-40039:         static _ForwardIterator
-40039:         __uninit_default_n(_ForwardIterator __first, _Size __n)
-40039:         {
-40039:    typedef typename iterator_traits<_ForwardIterator>::value_type
-40039:      _ValueType;
-40039: 
-40039:    return std::fill_n(__first, __n, _ValueType());
-40039:  }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _ForwardIterator>
-40039:     inline void
-40039:     __uninitialized_default(_ForwardIterator __first,
-40039:        _ForwardIterator __last)
-40039:     {
-40039:       typedef typename iterator_traits<_ForwardIterator>::value_type
-40039:  _ValueType;
-40039: 
-40039:       const bool __assignable = is_copy_assignable<_ValueType>::value;
-40039: 
-40039:       std::__uninitialized_default_1<__is_trivial(_ValueType)
-40039:          && __assignable>::
-40039:  __uninit_default(__first, __last);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _ForwardIterator, typename _Size>
-40039:     inline _ForwardIterator
-40039:     __uninitialized_default_n(_ForwardIterator __first, _Size __n)
-40039:     {
-40039:       typedef typename iterator_traits<_ForwardIterator>::value_type
-40039:  _ValueType;
-40039: 
-40039:       const bool __assignable = is_copy_assignable<_ValueType>::value;
-40039: 
-40039:       return __uninitialized_default_n_1<__is_trivial(_ValueType)
-40039:            && __assignable>::
-40039:  __uninit_default_n(__first, __n);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _ForwardIterator, typename _Allocator>
-40039:     void
-40039:     __uninitialized_default_a(_ForwardIterator __first,
-40039:          _ForwardIterator __last,
-40039:          _Allocator& __alloc)
-40039:     {
-40039:       _ForwardIterator __cur = __first;
-40039:       try
-40039:  {
-40039:    typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
-40039:    for (; __cur != __last; ++__cur)
-40039:      __traits::construct(__alloc, std::__addressof(*__cur));
-40039:  }
-40039:       catch(...)
-40039:  {
-40039:    std::_Destroy(__first, __cur, __alloc);
-40039:    throw;
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _ForwardIterator, typename _Tp>
-40039:     inline void
-40039:     __uninitialized_default_a(_ForwardIterator __first,
-40039:          _ForwardIterator __last,
-40039:          allocator<_Tp>&)
-40039:     { std::__uninitialized_default(__first, __last); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _ForwardIterator, typename _Size, typename _Allocator>
-40039:     _ForwardIterator
-40039:     __uninitialized_default_n_a(_ForwardIterator __first, _Size __n,
-40039:     _Allocator& __alloc)
-40039:     {
-40039:       _ForwardIterator __cur = __first;
-40039:       try
-40039:  {
-40039:    typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
-40039:    for (; __n > 0; --__n, (void) ++__cur)
-40039:      __traits::construct(__alloc, std::__addressof(*__cur));
-40039:    return __cur;
-40039:  }
-40039:       catch(...)
-40039:  {
-40039:    std::_Destroy(__first, __cur, __alloc);
-40039:    throw;
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _ForwardIterator, typename _Size, typename _Tp>
-40039:     inline _ForwardIterator
-40039:     __uninitialized_default_n_a(_ForwardIterator __first, _Size __n,
-40039:     allocator<_Tp>&)
-40039:     { return std::__uninitialized_default_n(__first, __n); }
-40039: 
-40039:   template<bool _TrivialValueType>
-40039:     struct __uninitialized_default_novalue_1
-40039:     {
-40039:       template<typename _ForwardIterator>
-40039:  static void
-40039:  __uninit_default_novalue(_ForwardIterator __first,
-40039:      _ForwardIterator __last)
-40039:  {
-40039:    _ForwardIterator __cur = __first;
-40039:    try
-40039:      {
-40039:        for (; __cur != __last; ++__cur)
-40039:   std::_Construct_novalue(std::__addressof(*__cur));
-40039:      }
-40039:    catch(...)
-40039:      {
-40039:        std::_Destroy(__first, __cur);
-40039:        throw;
-40039:      }
-40039:  }
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __uninitialized_default_novalue_1<true>
-40039:     {
-40039:       template<typename _ForwardIterator>
-40039:         static void
-40039:         __uninit_default_novalue(_ForwardIterator __first,
-40039:      _ForwardIterator __last)
-40039:  {
-40039:  }
-40039:     };
-40039: 
-40039:   template<bool _TrivialValueType>
-40039:     struct __uninitialized_default_novalue_n_1
-40039:     {
-40039:       template<typename _ForwardIterator, typename _Size>
-40039:  static _ForwardIterator
-40039:  __uninit_default_novalue_n(_ForwardIterator __first, _Size __n)
-40039:  {
-40039:    _ForwardIterator __cur = __first;
-40039:    try
-40039:      {
-40039:        for (; __n > 0; --__n, (void) ++__cur)
-40039:   std::_Construct_novalue(std::__addressof(*__cur));
-40039:        return __cur;
-40039:      }
-40039:    catch(...)
-40039:      {
-40039:        std::_Destroy(__first, __cur);
-40039:        throw;
-40039:      }
-40039:  }
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct __uninitialized_default_novalue_n_1<true>
-40039:     {
-40039:       template<typename _ForwardIterator, typename _Size>
-40039:  static _ForwardIterator
-40039:  __uninit_default_novalue_n(_ForwardIterator __first, _Size __n)
-40039:  { return std::next(__first, __n); }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _ForwardIterator>
-40039:     inline void
-40039:     __uninitialized_default_novalue(_ForwardIterator __first,
-40039:         _ForwardIterator __last)
-40039:     {
-40039:       typedef typename iterator_traits<_ForwardIterator>::value_type
-40039:  _ValueType;
-40039: 
-40039:       std::__uninitialized_default_novalue_1<
-40039:  is_trivially_default_constructible<_ValueType>::value>::
-40039:  __uninit_default_novalue(__first, __last);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _ForwardIterator, typename _Size>
-40039:     inline _ForwardIterator
-40039:     __uninitialized_default_novalue_n(_ForwardIterator __first, _Size __n)
-40039:     {
-40039:       typedef typename iterator_traits<_ForwardIterator>::value_type
-40039:  _ValueType;
-40039: 
-40039:       return __uninitialized_default_novalue_n_1<
-40039:  is_trivially_default_constructible<_ValueType>::value>::
-40039:  __uninit_default_novalue_n(__first, __n);
-40039:     }
-40039: 
-40039:   template<typename _InputIterator, typename _Size,
-40039:     typename _ForwardIterator>
-40039:     _ForwardIterator
-40039:     __uninitialized_copy_n(_InputIterator __first, _Size __n,
-40039:       _ForwardIterator __result, input_iterator_tag)
-40039:     {
-40039:       _ForwardIterator __cur = __result;
-40039:       try
-40039:  {
-40039:    for (; __n > 0; --__n, (void) ++__first, ++__cur)
-40039:      std::_Construct(std::__addressof(*__cur), *__first);
-40039:    return __cur;
-40039:  }
-40039:       catch(...)
-40039:  {
-40039:    std::_Destroy(__result, __cur);
-40039:    throw;
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Size,
-40039:     typename _ForwardIterator>
-40039:     inline _ForwardIterator
-40039:     __uninitialized_copy_n(_RandomAccessIterator __first, _Size __n,
-40039:       _ForwardIterator __result,
-40039:       random_access_iterator_tag)
-40039:     { return std::uninitialized_copy(__first, __first + __n, __result); }
-40039: 
-40039:   template<typename _InputIterator, typename _Size,
-40039:     typename _ForwardIterator>
-40039:     pair<_InputIterator, _ForwardIterator>
-40039:     __uninitialized_copy_n_pair(_InputIterator __first, _Size __n,
-40039:       _ForwardIterator __result, input_iterator_tag)
-40039:     {
-40039:       _ForwardIterator __cur = __result;
-40039:       try
-40039:  {
-40039:    for (; __n > 0; --__n, (void) ++__first, ++__cur)
-40039:      std::_Construct(std::__addressof(*__cur), *__first);
-40039:    return {__first, __cur};
-40039:  }
-40039:       catch(...)
-40039:  {
-40039:    std::_Destroy(__result, __cur);
-40039:    throw;
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _RandomAccessIterator, typename _Size,
-40039:     typename _ForwardIterator>
-40039:     inline pair<_RandomAccessIterator, _ForwardIterator>
-40039:     __uninitialized_copy_n_pair(_RandomAccessIterator __first, _Size __n,
-40039:       _ForwardIterator __result,
-40039:       random_access_iterator_tag)
-40039:     {
-40039:       auto __second_res = uninitialized_copy(__first, __first + __n, __result);
-40039:       auto __first_res = std::next(__first, __n);
-40039:       return {__first_res, __second_res};
-40039:     }
-40039: # 810 "/usr/include/c++/8/bits/stl_uninitialized.h" 3
-40039:   template<typename _InputIterator, typename _Size, typename _ForwardIterator>
-40039:     inline _ForwardIterator
-40039:     uninitialized_copy_n(_InputIterator __first, _Size __n,
-40039:     _ForwardIterator __result)
-40039:     { return std::__uninitialized_copy_n(__first, __n, __result,
-40039:       std::__iterator_category(__first)); }
-40039: 
-40039:   template<typename _InputIterator, typename _Size, typename _ForwardIterator>
-40039:     inline pair<_InputIterator, _ForwardIterator>
-40039:     __uninitialized_copy_n_pair(_InputIterator __first, _Size __n,
-40039:          _ForwardIterator __result)
-40039:     {
-40039:       return
-40039:  std::__uninitialized_copy_n_pair(__first, __n, __result,
-40039:       std::__iterator_category(__first));
-40039:     }
-40039: # 882 "/usr/include/c++/8/bits/stl_uninitialized.h" 3
-40039: 
-40039: }
-40039: # 64 "/usr/include/c++/8/vector" 2 3
-40039: # 1 "/usr/include/c++/8/bits/stl_vector.h" 1 3
-40039: # 74 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     struct _Vector_base
-40039:     {
-40039:       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
-40039:  rebind<_Tp>::other _Tp_alloc_type;
-40039:       typedef typename __gnu_cxx::__alloc_traits<_Tp_alloc_type>::pointer
-40039:         pointer;
-40039: 
-40039:       struct _Vector_impl
-40039:       : public _Tp_alloc_type
-40039:       {
-40039:  pointer _M_start;
-40039:  pointer _M_finish;
-40039:  pointer _M_end_of_storage;
-40039: 
-40039:  _Vector_impl()
-40039:  : _Tp_alloc_type(), _M_start(), _M_finish(), _M_end_of_storage()
-40039:  { }
-40039: 
-40039:  _Vector_impl(_Tp_alloc_type const& __a) noexcept
-40039:  : _Tp_alloc_type(__a), _M_start(), _M_finish(), _M_end_of_storage()
-40039:  { }
-40039: 
-40039: 
-40039:  _Vector_impl(_Tp_alloc_type&& __a) noexcept
-40039:  : _Tp_alloc_type(std::move(__a)),
-40039:    _M_start(), _M_finish(), _M_end_of_storage()
-40039:  { }
-40039: 
-40039: 
-40039:  void _M_swap_data(_Vector_impl& __x) noexcept
-40039:  {
-40039:    std::swap(_M_start, __x._M_start);
-40039:    std::swap(_M_finish, __x._M_finish);
-40039:    std::swap(_M_end_of_storage, __x._M_end_of_storage);
-40039:  }
-40039: # 231 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       };
-40039: 
-40039:     public:
-40039:       typedef _Alloc allocator_type;
-40039: 
-40039:       _Tp_alloc_type&
-40039:       _M_get_Tp_allocator() noexcept
-40039:       { return *static_cast<_Tp_alloc_type*>(&this->_M_impl); }
-40039: 
-40039:       const _Tp_alloc_type&
-40039:       _M_get_Tp_allocator() const noexcept
-40039:       { return *static_cast<const _Tp_alloc_type*>(&this->_M_impl); }
-40039: 
-40039:       allocator_type
-40039:       get_allocator() const noexcept
-40039:       { return allocator_type(_M_get_Tp_allocator()); }
-40039: 
-40039:       _Vector_base()
-40039:       : _M_impl() { }
-40039: 
-40039:       _Vector_base(const allocator_type& __a) noexcept
-40039:       : _M_impl(__a) { }
-40039: 
-40039:       _Vector_base(size_t __n)
-40039:       : _M_impl()
-40039:       { _M_create_storage(__n); }
-40039: 
-40039:       _Vector_base(size_t __n, const allocator_type& __a)
-40039:       : _M_impl(__a)
-40039:       { _M_create_storage(__n); }
-40039: 
-40039: 
-40039:       _Vector_base(_Tp_alloc_type&& __a) noexcept
-40039:       : _M_impl(std::move(__a)) { }
-40039: 
-40039:       _Vector_base(_Vector_base&& __x) noexcept
-40039:       : _M_impl(std::move(__x._M_get_Tp_allocator()))
-40039:       { this->_M_impl._M_swap_data(__x._M_impl); }
-40039: 
-40039:       _Vector_base(_Vector_base&& __x, const allocator_type& __a)
-40039:       : _M_impl(__a)
-40039:       {
-40039:  if (__x.get_allocator() == __a)
-40039:    this->_M_impl._M_swap_data(__x._M_impl);
-40039:  else
-40039:    {
-40039:      size_t __n = __x._M_impl._M_finish - __x._M_impl._M_start;
-40039:      _M_create_storage(__n);
-40039:    }
-40039:       }
-40039: 
-40039: 
-40039:       ~_Vector_base() noexcept
-40039:       {
-40039:  _M_deallocate(_M_impl._M_start,
-40039:         _M_impl._M_end_of_storage - _M_impl._M_start);
-40039:       }
-40039: 
-40039:     public:
-40039:       _Vector_impl _M_impl;
-40039: 
-40039:       pointer
-40039:       _M_allocate(size_t __n)
-40039:       {
-40039:  typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tr;
-40039:  return __n != 0 ? _Tr::allocate(_M_impl, __n) : pointer();
-40039:       }
-40039: 
-40039:       void
-40039:       _M_deallocate(pointer __p, size_t __n)
-40039:       {
-40039:  typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tr;
-40039:  if (__p)
-40039:    _Tr::deallocate(_M_impl, __p, __n);
-40039:       }
-40039: 
-40039:     private:
-40039:       void
-40039:       _M_create_storage(size_t __n)
-40039:       {
-40039:  this->_M_impl._M_start = this->_M_allocate(__n);
-40039:  this->_M_impl._M_finish = this->_M_impl._M_start;
-40039:  this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
-40039:       }
-40039:     };
-40039: # 338 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:   template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
-40039:     class vector : protected _Vector_base<_Tp, _Alloc>
-40039:     {
-40039: # 351 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       static_assert(is_same<typename remove_cv<_Tp>::type, _Tp>::value,
-40039:    "std::vector must have a non-const, non-volatile value_type");
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       typedef _Vector_base<_Tp, _Alloc> _Base;
-40039:       typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
-40039:       typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Alloc_traits;
-40039: 
-40039:     public:
-40039:       typedef _Tp value_type;
-40039:       typedef typename _Base::pointer pointer;
-40039:       typedef typename _Alloc_traits::const_pointer const_pointer;
-40039:       typedef typename _Alloc_traits::reference reference;
-40039:       typedef typename _Alloc_traits::const_reference const_reference;
-40039:       typedef __gnu_cxx::__normal_iterator<pointer, vector> iterator;
-40039:       typedef __gnu_cxx::__normal_iterator<const_pointer, vector>
-40039:       const_iterator;
-40039:       typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
-40039:       typedef std::reverse_iterator<iterator> reverse_iterator;
-40039:       typedef size_t size_type;
-40039:       typedef ptrdiff_t difference_type;
-40039:       typedef _Alloc allocator_type;
-40039: 
-40039:     protected:
-40039:       using _Base::_M_allocate;
-40039:       using _Base::_M_deallocate;
-40039:       using _Base::_M_impl;
-40039:       using _Base::_M_get_Tp_allocator;
-40039: 
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       vector()
-40039: 
-40039:       noexcept(is_nothrow_default_constructible<_Alloc>::value)
-40039: 
-40039:       : _Base() { }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       explicit
-40039:       vector(const allocator_type& __a) noexcept
-40039:       : _Base(__a) { }
-40039: # 414 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       explicit
-40039:       vector(size_type __n, const allocator_type& __a = allocator_type())
-40039:       : _Base(__n, __a)
-40039:       { _M_default_initialize(__n); }
-40039: # 427 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       vector(size_type __n, const value_type& __value,
-40039:       const allocator_type& __a = allocator_type())
-40039:       : _Base(__n, __a)
-40039:       { _M_fill_initialize(__n, __value); }
-40039: # 458 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       vector(const vector& __x)
-40039:       : _Base(__x.size(),
-40039:  _Alloc_traits::_S_select_on_copy(__x._M_get_Tp_allocator()))
-40039:       {
-40039:  this->_M_impl._M_finish =
-40039:    std::__uninitialized_copy_a(__x.begin(), __x.end(),
-40039:           this->_M_impl._M_start,
-40039:           _M_get_Tp_allocator());
-40039:       }
-40039: # 476 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       vector(vector&& __x) noexcept
-40039:       : _Base(std::move(__x)) { }
-40039: 
-40039: 
-40039:       vector(const vector& __x, const allocator_type& __a)
-40039:       : _Base(__x.size(), __a)
-40039:       {
-40039:  this->_M_impl._M_finish =
-40039:    std::__uninitialized_copy_a(__x.begin(), __x.end(),
-40039:           this->_M_impl._M_start,
-40039:           _M_get_Tp_allocator());
-40039:       }
-40039: 
-40039: 
-40039:       vector(vector&& __rv, const allocator_type& __m)
-40039:       noexcept(_Alloc_traits::_S_always_equal())
-40039:       : _Base(std::move(__rv), __m)
-40039:       {
-40039:  if (__rv.get_allocator() != __m)
-40039:    {
-40039:      this->_M_impl._M_finish =
-40039:        std::__uninitialized_move_a(__rv.begin(), __rv.end(),
-40039:        this->_M_impl._M_start,
-40039:        _M_get_Tp_allocator());
-40039:      __rv.clear();
-40039:    }
-40039:       }
-40039: # 515 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       vector(initializer_list<value_type> __l,
-40039:       const allocator_type& __a = allocator_type())
-40039:       : _Base(__a)
-40039:       {
-40039:  _M_range_initialize(__l.begin(), __l.end(),
-40039:        random_access_iterator_tag());
-40039:       }
-40039: # 541 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       template<typename _InputIterator,
-40039:         typename = std::_RequireInputIter<_InputIterator>>
-40039:  vector(_InputIterator __first, _InputIterator __last,
-40039:         const allocator_type& __a = allocator_type())
-40039:  : _Base(__a)
-40039:  { _M_initialize_dispatch(__first, __last, __false_type()); }
-40039: # 565 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       ~vector() noexcept
-40039:       {
-40039:  std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
-40039:         _M_get_Tp_allocator());
-40039:  ;
-40039:       }
-40039: # 581 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       vector&
-40039:       operator=(const vector& __x);
-40039: # 595 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       vector&
-40039:       operator=(vector&& __x) noexcept(_Alloc_traits::_S_nothrow_move())
-40039:       {
-40039:  constexpr bool __move_storage =
-40039:    _Alloc_traits::_S_propagate_on_move_assign()
-40039:    || _Alloc_traits::_S_always_equal();
-40039:  _M_move_assign(std::move(__x), __bool_constant<__move_storage>());
-40039:  return *this;
-40039:       }
-40039: # 616 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       vector&
-40039:       operator=(initializer_list<value_type> __l)
-40039:       {
-40039:  this->_M_assign_aux(__l.begin(), __l.end(),
-40039:        random_access_iterator_tag());
-40039:  return *this;
-40039:       }
-40039: # 635 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       void
-40039:       assign(size_type __n, const value_type& __val)
-40039:       { _M_fill_assign(__n, __val); }
-40039: # 652 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       template<typename _InputIterator,
-40039:         typename = std::_RequireInputIter<_InputIterator>>
-40039:  void
-40039:  assign(_InputIterator __first, _InputIterator __last)
-40039:  { _M_assign_dispatch(__first, __last, __false_type()); }
-40039: # 680 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       void
-40039:       assign(initializer_list<value_type> __l)
-40039:       {
-40039:  this->_M_assign_aux(__l.begin(), __l.end(),
-40039:        random_access_iterator_tag());
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       using _Base::get_allocator;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       begin() noexcept
-40039:       { return iterator(this->_M_impl._M_start); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       begin() const noexcept
-40039:       { return const_iterator(this->_M_impl._M_start); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       end() noexcept
-40039:       { return iterator(this->_M_impl._M_finish); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       end() const noexcept
-40039:       { return const_iterator(this->_M_impl._M_finish); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       rbegin() noexcept
-40039:       { return reverse_iterator(end()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       rbegin() const noexcept
-40039:       { return const_reverse_iterator(end()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       rend() noexcept
-40039:       { return reverse_iterator(begin()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       rend() const noexcept
-40039:       { return const_reverse_iterator(begin()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       cbegin() const noexcept
-40039:       { return const_iterator(this->_M_impl._M_start); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       cend() const noexcept
-40039:       { return const_iterator(this->_M_impl._M_finish); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       crbegin() const noexcept
-40039:       { return const_reverse_iterator(end()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       crend() const noexcept
-40039:       { return const_reverse_iterator(begin()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       size_type
-40039:       size() const noexcept
-40039:       { return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); }
-40039: 
-40039: 
-40039:       size_type
-40039:       max_size() const noexcept
-40039:       { return _Alloc_traits::max_size(_M_get_Tp_allocator()); }
-40039: # 823 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       void
-40039:       resize(size_type __new_size)
-40039:       {
-40039:  if (__new_size > size())
-40039:    _M_default_append(__new_size - size());
-40039:  else if (__new_size < size())
-40039:    _M_erase_at_end(this->_M_impl._M_start + __new_size);
-40039:       }
-40039: # 843 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       void
-40039:       resize(size_type __new_size, const value_type& __x)
-40039:       {
-40039:  if (__new_size > size())
-40039:    _M_fill_insert(end(), __new_size - size(), __x);
-40039:  else if (__new_size < size())
-40039:    _M_erase_at_end(this->_M_impl._M_start + __new_size);
-40039:       }
-40039: # 875 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       void
-40039:       shrink_to_fit()
-40039:       { _M_shrink_to_fit(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       size_type
-40039:       capacity() const noexcept
-40039:       { return size_type(this->_M_impl._M_end_of_storage
-40039:     - this->_M_impl._M_start); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       bool
-40039:       empty() const noexcept
-40039:       { return begin() == end(); }
-40039: # 914 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       void
-40039:       reserve(size_type __n);
-40039: # 929 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       reference
-40039:       operator[](size_type __n) noexcept
-40039:       {
-40039:  ;
-40039:  return *(this->_M_impl._M_start + __n);
-40039:       }
-40039: # 947 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       const_reference
-40039:       operator[](size_type __n) const noexcept
-40039:       {
-40039:  ;
-40039:  return *(this->_M_impl._M_start + __n);
-40039:       }
-40039: 
-40039:     protected:
-40039: 
-40039:       void
-40039:       _M_range_check(size_type __n) const
-40039:       {
-40039:  if (__n >= this->size())
-40039:    __throw_out_of_range_fmt(("vector::_M_range_check: __n " "(which is %zu) >= this->size() " "(which is %zu)")
-40039: 
-40039:                             ,
-40039:        __n, this->size());
-40039:       }
-40039: 
-40039:     public:
-40039: # 978 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       reference
-40039:       at(size_type __n)
-40039:       {
-40039:  _M_range_check(__n);
-40039:  return (*this)[__n];
-40039:       }
-40039: # 996 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       const_reference
-40039:       at(size_type __n) const
-40039:       {
-40039:  _M_range_check(__n);
-40039:  return (*this)[__n];
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reference
-40039:       front() noexcept
-40039:       {
-40039:  ;
-40039:  return *begin();
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reference
-40039:       front() const noexcept
-40039:       {
-40039:  ;
-40039:  return *begin();
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reference
-40039:       back() noexcept
-40039:       {
-40039:  ;
-40039:  return *(end() - 1);
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reference
-40039:       back() const noexcept
-40039:       {
-40039:  ;
-40039:  return *(end() - 1);
-40039:       }
-40039: # 1054 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       _Tp*
-40039:       data() noexcept
-40039:       { return _M_data_ptr(this->_M_impl._M_start); }
-40039: 
-40039:       const _Tp*
-40039:       data() const noexcept
-40039:       { return _M_data_ptr(this->_M_impl._M_start); }
-40039: # 1073 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       void
-40039:       push_back(const value_type& __x)
-40039:       {
-40039:  if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
-40039:    {
-40039:      ;
-40039:      _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
-40039:          __x);
-40039:      ++this->_M_impl._M_finish;
-40039:      ;
-40039:    }
-40039:  else
-40039:    _M_realloc_insert(end(), __x);
-40039:       }
-40039: 
-40039: 
-40039:       void
-40039:       push_back(value_type&& __x)
-40039:       { emplace_back(std::move(__x)); }
-40039: 
-40039:       template<typename... _Args>
-40039: 
-40039: 
-40039: 
-40039:  void
-40039: 
-40039:  emplace_back(_Args&&... __args);
-40039: # 1111 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       void
-40039:       pop_back() noexcept
-40039:       {
-40039:  ;
-40039:  --this->_M_impl._M_finish;
-40039:  _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish);
-40039:  ;
-40039:       }
-40039: # 1133 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       template<typename... _Args>
-40039:  iterator
-40039:  emplace(const_iterator __position, _Args&&... __args)
-40039:  { return _M_emplace_aux(__position, std::forward<_Args>(__args)...); }
-40039: # 1149 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       iterator
-40039:       insert(const_iterator __position, const value_type& __x);
-40039: # 1179 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       iterator
-40039:       insert(const_iterator __position, value_type&& __x)
-40039:       { return _M_insert_rval(__position, std::move(__x)); }
-40039: # 1196 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       iterator
-40039:       insert(const_iterator __position, initializer_list<value_type> __l)
-40039:       {
-40039:  auto __offset = __position - cbegin();
-40039:  _M_range_insert(begin() + __offset, __l.begin(), __l.end(),
-40039:    std::random_access_iterator_tag());
-40039:  return begin() + __offset;
-40039:       }
-40039: # 1221 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       iterator
-40039:       insert(const_iterator __position, size_type __n, const value_type& __x)
-40039:       {
-40039:  difference_type __offset = __position - cbegin();
-40039:  _M_fill_insert(begin() + __offset, __n, __x);
-40039:  return begin() + __offset;
-40039:       }
-40039: # 1263 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       template<typename _InputIterator,
-40039:         typename = std::_RequireInputIter<_InputIterator>>
-40039:  iterator
-40039:  insert(const_iterator __position, _InputIterator __first,
-40039:         _InputIterator __last)
-40039:  {
-40039:    difference_type __offset = __position - cbegin();
-40039:    _M_insert_dispatch(begin() + __offset,
-40039:         __first, __last, __false_type());
-40039:    return begin() + __offset;
-40039:  }
-40039: # 1315 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       iterator
-40039: 
-40039:       erase(const_iterator __position)
-40039:       { return _M_erase(begin() + (__position - cbegin())); }
-40039: # 1342 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       iterator
-40039: 
-40039:       erase(const_iterator __first, const_iterator __last)
-40039:       {
-40039:  const auto __beg = begin();
-40039:  const auto __cbeg = cbegin();
-40039:  return _M_erase(__beg + (__first - __cbeg), __beg + (__last - __cbeg));
-40039:       }
-40039: # 1366 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       void
-40039:       swap(vector& __x) noexcept
-40039:       {
-40039: 
-40039: 
-40039:                                                           ;
-40039: 
-40039:  this->_M_impl._M_swap_data(__x._M_impl);
-40039:  _Alloc_traits::_S_on_swap(_M_get_Tp_allocator(),
-40039:       __x._M_get_Tp_allocator());
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       clear() noexcept
-40039:       { _M_erase_at_end(this->_M_impl._M_start); }
-40039: 
-40039:     protected:
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       template<typename _ForwardIterator>
-40039:  pointer
-40039:  _M_allocate_and_copy(size_type __n,
-40039:         _ForwardIterator __first, _ForwardIterator __last)
-40039:  {
-40039:    pointer __result = this->_M_allocate(__n);
-40039:    try
-40039:      {
-40039:        std::__uninitialized_copy_a(__first, __last, __result,
-40039:        _M_get_Tp_allocator());
-40039:        return __result;
-40039:      }
-40039:    catch(...)
-40039:      {
-40039:        _M_deallocate(__result, __n);
-40039:        throw;
-40039:      }
-40039:  }
-40039: # 1419 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       template<typename _Integer>
-40039:  void
-40039:  _M_initialize_dispatch(_Integer __n, _Integer __value, __true_type)
-40039:  {
-40039:    this->_M_impl._M_start = _M_allocate(static_cast<size_type>(__n));
-40039:    this->_M_impl._M_end_of_storage =
-40039:      this->_M_impl._M_start + static_cast<size_type>(__n);
-40039:    _M_fill_initialize(static_cast<size_type>(__n), __value);
-40039:  }
-40039: 
-40039: 
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
-40039:           __false_type)
-40039:  {
-40039:    typedef typename std::iterator_traits<_InputIterator>::
-40039:      iterator_category _IterCategory;
-40039:    _M_range_initialize(__first, __last, _IterCategory());
-40039:  }
-40039: 
-40039: 
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  _M_range_initialize(_InputIterator __first, _InputIterator __last,
-40039:        std::input_iterator_tag)
-40039:  {
-40039:    try {
-40039:      for (; __first != __last; ++__first)
-40039: 
-40039:        emplace_back(*__first);
-40039: 
-40039: 
-40039: 
-40039:    } catch(...) {
-40039:      clear();
-40039:      throw;
-40039:    }
-40039:  }
-40039: 
-40039: 
-40039:       template<typename _ForwardIterator>
-40039:  void
-40039:  _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last,
-40039:        std::forward_iterator_tag)
-40039:  {
-40039:    const size_type __n = std::distance(__first, __last);
-40039:    this->_M_impl._M_start = this->_M_allocate(__n);
-40039:    this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
-40039:    this->_M_impl._M_finish =
-40039:      std::__uninitialized_copy_a(__first, __last,
-40039:      this->_M_impl._M_start,
-40039:      _M_get_Tp_allocator());
-40039:  }
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_fill_initialize(size_type __n, const value_type& __value)
-40039:       {
-40039:  this->_M_impl._M_finish =
-40039:    std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, __value,
-40039:      _M_get_Tp_allocator());
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_default_initialize(size_type __n)
-40039:       {
-40039:  this->_M_impl._M_finish =
-40039:    std::__uninitialized_default_n_a(this->_M_impl._M_start, __n,
-40039:         _M_get_Tp_allocator());
-40039:       }
-40039: # 1502 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       template<typename _Integer>
-40039:  void
-40039:  _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
-40039:  { _M_fill_assign(__n, __val); }
-40039: 
-40039: 
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  _M_assign_dispatch(_InputIterator __first, _InputIterator __last,
-40039:       __false_type)
-40039:  { _M_assign_aux(__first, __last, std::__iterator_category(__first)); }
-40039: 
-40039: 
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  _M_assign_aux(_InputIterator __first, _InputIterator __last,
-40039:         std::input_iterator_tag);
-40039: 
-40039: 
-40039:       template<typename _ForwardIterator>
-40039:  void
-40039:  _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
-40039:         std::forward_iterator_tag);
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_fill_assign(size_type __n, const value_type& __val);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Integer>
-40039:  void
-40039:  _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __val,
-40039:       __true_type)
-40039:  { _M_fill_insert(__pos, __n, __val); }
-40039: 
-40039: 
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  _M_insert_dispatch(iterator __pos, _InputIterator __first,
-40039:       _InputIterator __last, __false_type)
-40039:  {
-40039:    _M_range_insert(__pos, __first, __last,
-40039:      std::__iterator_category(__first));
-40039:  }
-40039: 
-40039: 
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  _M_range_insert(iterator __pos, _InputIterator __first,
-40039:    _InputIterator __last, std::input_iterator_tag);
-40039: 
-40039: 
-40039:       template<typename _ForwardIterator>
-40039:  void
-40039:  _M_range_insert(iterator __pos, _ForwardIterator __first,
-40039:    _ForwardIterator __last, std::forward_iterator_tag);
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_fill_insert(iterator __pos, size_type __n, const value_type& __x);
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_default_append(size_type __n);
-40039: 
-40039:       bool
-40039:       _M_shrink_to_fit();
-40039: # 1589 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:       struct _Temporary_value
-40039:       {
-40039:  template<typename... _Args>
-40039:    explicit
-40039:    _Temporary_value(vector* __vec, _Args&&... __args) : _M_this(__vec)
-40039:    {
-40039:      _Alloc_traits::construct(_M_this->_M_impl, _M_ptr(),
-40039:          std::forward<_Args>(__args)...);
-40039:    }
-40039: 
-40039:  ~_Temporary_value()
-40039:  { _Alloc_traits::destroy(_M_this->_M_impl, _M_ptr()); }
-40039: 
-40039:  value_type&
-40039:  _M_val() { return *reinterpret_cast<_Tp*>(&__buf); }
-40039: 
-40039:       private:
-40039:  pointer
-40039:  _M_ptr() { return pointer_traits<pointer>::pointer_to(_M_val()); }
-40039: 
-40039:  vector* _M_this;
-40039:  typename aligned_storage<sizeof(_Tp), alignof(_Tp)>::type __buf;
-40039:       };
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Arg>
-40039:  void
-40039:  _M_insert_aux(iterator __position, _Arg&& __arg);
-40039: 
-40039:       template<typename... _Args>
-40039:  void
-40039:  _M_realloc_insert(iterator __position, _Args&&... __args);
-40039: 
-40039: 
-40039:       iterator
-40039:       _M_insert_rval(const_iterator __position, value_type&& __v);
-40039: 
-40039: 
-40039:       template<typename... _Args>
-40039:  iterator
-40039:  _M_emplace_aux(const_iterator __position, _Args&&... __args);
-40039: 
-40039: 
-40039:       iterator
-40039:       _M_emplace_aux(const_iterator __position, value_type&& __v)
-40039:       { return _M_insert_rval(__position, std::move(__v)); }
-40039: 
-40039: 
-40039: 
-40039:       size_type
-40039:       _M_check_len(size_type __n, const char* __s) const
-40039:       {
-40039:  if (max_size() - size() < __n)
-40039:    __throw_length_error((__s));
-40039: 
-40039:  const size_type __len = size() + std::max(size(), __n);
-40039:  return (__len < size() || __len > max_size()) ? max_size() : __len;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_erase_at_end(pointer __pos) noexcept
-40039:       {
-40039:  if (size_type __n = this->_M_impl._M_finish - __pos)
-40039:    {
-40039:      std::_Destroy(__pos, this->_M_impl._M_finish,
-40039:      _M_get_Tp_allocator());
-40039:      this->_M_impl._M_finish = __pos;
-40039:      ;
-40039:    }
-40039:       }
-40039: 
-40039:       iterator
-40039:       _M_erase(iterator __position);
-40039: 
-40039:       iterator
-40039:       _M_erase(iterator __first, iterator __last);
-40039: 
-40039: 
-40039:     private:
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_move_assign(vector&& __x, std::true_type) noexcept
-40039:       {
-40039:  vector __tmp(get_allocator());
-40039:  this->_M_impl._M_swap_data(__tmp._M_impl);
-40039:  this->_M_impl._M_swap_data(__x._M_impl);
-40039:  std::__alloc_on_move(_M_get_Tp_allocator(), __x._M_get_Tp_allocator());
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_move_assign(vector&& __x, std::false_type)
-40039:       {
-40039:  if (__x._M_get_Tp_allocator() == this->_M_get_Tp_allocator())
-40039:    _M_move_assign(std::move(__x), std::true_type());
-40039:  else
-40039:    {
-40039: 
-40039: 
-40039:      this->assign(std::__make_move_if_noexcept_iterator(__x.begin()),
-40039:     std::__make_move_if_noexcept_iterator(__x.end()));
-40039:      __x.clear();
-40039:    }
-40039:       }
-40039: 
-40039: 
-40039:       template<typename _Up>
-40039:  _Up*
-40039:  _M_data_ptr(_Up* __ptr) const noexcept
-40039:  { return __ptr; }
-40039: 
-40039: 
-40039:       template<typename _Ptr>
-40039:  typename std::pointer_traits<_Ptr>::element_type*
-40039:  _M_data_ptr(_Ptr __ptr) const
-40039:  { return empty() ? nullptr : std::__to_address(__ptr); }
-40039: # 1729 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:     };
-40039: # 1751 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:   template<typename _Tp, typename _Alloc>
-40039:     inline bool
-40039:     operator==(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
-40039:     { return (__x.size() == __y.size()
-40039:        && std::equal(__x.begin(), __x.end(), __y.begin())); }
-40039: # 1768 "/usr/include/c++/8/bits/stl_vector.h" 3
-40039:   template<typename _Tp, typename _Alloc>
-40039:     inline bool
-40039:     operator<(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
-40039:     { return std::lexicographical_compare(__x.begin(), __x.end(),
-40039:        __y.begin(), __y.end()); }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     inline bool
-40039:     operator!=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
-40039:     { return !(__x == __y); }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     inline bool
-40039:     operator>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
-40039:     { return __y < __x; }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     inline bool
-40039:     operator<=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
-40039:     { return !(__y < __x); }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     inline bool
-40039:     operator>=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
-40039:     { return !(__x < __y); }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     inline void
-40039:     swap(vector<_Tp, _Alloc>& __x, vector<_Tp, _Alloc>& __y)
-40039:     noexcept(noexcept(__x.swap(__y)))
-40039:     { __x.swap(__y); }
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 65 "/usr/include/c++/8/vector" 2 3
-40039: # 1 "/usr/include/c++/8/bits/stl_bvector.h" 1 3
-40039: # 64 "/usr/include/c++/8/bits/stl_bvector.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039:   typedef unsigned long _Bit_type;
-40039:   enum { _S_word_bit = int(8 * sizeof(_Bit_type)) };
-40039: 
-40039:   struct _Bit_reference
-40039:   {
-40039:     _Bit_type * _M_p;
-40039:     _Bit_type _M_mask;
-40039: 
-40039:     _Bit_reference(_Bit_type * __x, _Bit_type __y)
-40039:     : _M_p(__x), _M_mask(__y) { }
-40039: 
-40039:     _Bit_reference() noexcept : _M_p(0), _M_mask(0) { }
-40039: 
-40039:     operator bool() const noexcept
-40039:     { return !!(*_M_p & _M_mask); }
-40039: 
-40039:     _Bit_reference&
-40039:     operator=(bool __x) noexcept
-40039:     {
-40039:       if (__x)
-40039:  *_M_p |= _M_mask;
-40039:       else
-40039:  *_M_p &= ~_M_mask;
-40039:       return *this;
-40039:     }
-40039: 
-40039:     _Bit_reference&
-40039:     operator=(const _Bit_reference& __x) noexcept
-40039:     { return *this = bool(__x); }
-40039: 
-40039:     bool
-40039:     operator==(const _Bit_reference& __x) const
-40039:     { return bool(*this) == bool(__x); }
-40039: 
-40039:     bool
-40039:     operator<(const _Bit_reference& __x) const
-40039:     { return !bool(*this) && bool(__x); }
-40039: 
-40039:     void
-40039:     flip() noexcept
-40039:     { *_M_p ^= _M_mask; }
-40039:   };
-40039: 
-40039: 
-40039:   inline void
-40039:   swap(_Bit_reference __x, _Bit_reference __y) noexcept
-40039:   {
-40039:     bool __tmp = __x;
-40039:     __x = __y;
-40039:     __y = __tmp;
-40039:   }
-40039: 
-40039:   inline void
-40039:   swap(_Bit_reference __x, bool& __y) noexcept
-40039:   {
-40039:     bool __tmp = __x;
-40039:     __x = __y;
-40039:     __y = __tmp;
-40039:   }
-40039: 
-40039:   inline void
-40039:   swap(bool& __x, _Bit_reference __y) noexcept
-40039:   {
-40039:     bool __tmp = __x;
-40039:     __x = __y;
-40039:     __y = __tmp;
-40039:   }
-40039: 
-40039: 
-40039:   struct _Bit_iterator_base
-40039:   : public std::iterator<std::random_access_iterator_tag, bool>
-40039:   {
-40039:     _Bit_type * _M_p;
-40039:     unsigned int _M_offset;
-40039: 
-40039:     _Bit_iterator_base(_Bit_type * __x, unsigned int __y)
-40039:     : _M_p(__x), _M_offset(__y) { }
-40039: 
-40039:     void
-40039:     _M_bump_up()
-40039:     {
-40039:       if (_M_offset++ == int(_S_word_bit) - 1)
-40039:  {
-40039:    _M_offset = 0;
-40039:    ++_M_p;
-40039:  }
-40039:     }
-40039: 
-40039:     void
-40039:     _M_bump_down()
-40039:     {
-40039:       if (_M_offset-- == 0)
-40039:  {
-40039:    _M_offset = int(_S_word_bit) - 1;
-40039:    --_M_p;
-40039:  }
-40039:     }
-40039: 
-40039:     void
-40039:     _M_incr(ptrdiff_t __i)
-40039:     {
-40039:       difference_type __n = __i + _M_offset;
-40039:       _M_p += __n / int(_S_word_bit);
-40039:       __n = __n % int(_S_word_bit);
-40039:       if (__n < 0)
-40039:  {
-40039:    __n += int(_S_word_bit);
-40039:    --_M_p;
-40039:  }
-40039:       _M_offset = static_cast<unsigned int>(__n);
-40039:     }
-40039: 
-40039:     bool
-40039:     operator==(const _Bit_iterator_base& __i) const
-40039:     { return _M_p == __i._M_p && _M_offset == __i._M_offset; }
-40039: 
-40039:     bool
-40039:     operator<(const _Bit_iterator_base& __i) const
-40039:     {
-40039:       return _M_p < __i._M_p
-40039:      || (_M_p == __i._M_p && _M_offset < __i._M_offset);
-40039:     }
-40039: 
-40039:     bool
-40039:     operator!=(const _Bit_iterator_base& __i) const
-40039:     { return !(*this == __i); }
-40039: 
-40039:     bool
-40039:     operator>(const _Bit_iterator_base& __i) const
-40039:     { return __i < *this; }
-40039: 
-40039:     bool
-40039:     operator<=(const _Bit_iterator_base& __i) const
-40039:     { return !(__i < *this); }
-40039: 
-40039:     bool
-40039:     operator>=(const _Bit_iterator_base& __i) const
-40039:     { return !(*this < __i); }
-40039:   };
-40039: 
-40039:   inline ptrdiff_t
-40039:   operator-(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y)
-40039:   {
-40039:     return (int(_S_word_bit) * (__x._M_p - __y._M_p)
-40039:      + __x._M_offset - __y._M_offset);
-40039:   }
-40039: 
-40039:   struct _Bit_iterator : public _Bit_iterator_base
-40039:   {
-40039:     typedef _Bit_reference reference;
-40039:     typedef _Bit_reference* pointer;
-40039:     typedef _Bit_iterator iterator;
-40039: 
-40039:     _Bit_iterator() : _Bit_iterator_base(0, 0) { }
-40039: 
-40039:     _Bit_iterator(_Bit_type * __x, unsigned int __y)
-40039:     : _Bit_iterator_base(__x, __y) { }
-40039: 
-40039:     iterator
-40039:     _M_const_cast() const
-40039:     { return *this; }
-40039: 
-40039:     reference
-40039:     operator*() const
-40039:     { return reference(_M_p, 1UL << _M_offset); }
-40039: 
-40039:     iterator&
-40039:     operator++()
-40039:     {
-40039:       _M_bump_up();
-40039:       return *this;
-40039:     }
-40039: 
-40039:     iterator
-40039:     operator++(int)
-40039:     {
-40039:       iterator __tmp = *this;
-40039:       _M_bump_up();
-40039:       return __tmp;
-40039:     }
-40039: 
-40039:     iterator&
-40039:     operator--()
-40039:     {
-40039:       _M_bump_down();
-40039:       return *this;
-40039:     }
-40039: 
-40039:     iterator
-40039:     operator--(int)
-40039:     {
-40039:       iterator __tmp = *this;
-40039:       _M_bump_down();
-40039:       return __tmp;
-40039:     }
-40039: 
-40039:     iterator&
-40039:     operator+=(difference_type __i)
-40039:     {
-40039:       _M_incr(__i);
-40039:       return *this;
-40039:     }
-40039: 
-40039:     iterator&
-40039:     operator-=(difference_type __i)
-40039:     {
-40039:       *this += -__i;
-40039:       return *this;
-40039:     }
-40039: 
-40039:     iterator
-40039:     operator+(difference_type __i) const
-40039:     {
-40039:       iterator __tmp = *this;
-40039:       return __tmp += __i;
-40039:     }
-40039: 
-40039:     iterator
-40039:     operator-(difference_type __i) const
-40039:     {
-40039:       iterator __tmp = *this;
-40039:       return __tmp -= __i;
-40039:     }
-40039: 
-40039:     reference
-40039:     operator[](difference_type __i) const
-40039:     { return *(*this + __i); }
-40039:   };
-40039: 
-40039:   inline _Bit_iterator
-40039:   operator+(ptrdiff_t __n, const _Bit_iterator& __x)
-40039:   { return __x + __n; }
-40039: 
-40039:   struct _Bit_const_iterator : public _Bit_iterator_base
-40039:   {
-40039:     typedef bool reference;
-40039:     typedef bool const_reference;
-40039:     typedef const bool* pointer;
-40039:     typedef _Bit_const_iterator const_iterator;
-40039: 
-40039:     _Bit_const_iterator() : _Bit_iterator_base(0, 0) { }
-40039: 
-40039:     _Bit_const_iterator(_Bit_type * __x, unsigned int __y)
-40039:     : _Bit_iterator_base(__x, __y) { }
-40039: 
-40039:     _Bit_const_iterator(const _Bit_iterator& __x)
-40039:     : _Bit_iterator_base(__x._M_p, __x._M_offset) { }
-40039: 
-40039:     _Bit_iterator
-40039:     _M_const_cast() const
-40039:     { return _Bit_iterator(_M_p, _M_offset); }
-40039: 
-40039:     const_reference
-40039:     operator*() const
-40039:     { return _Bit_reference(_M_p, 1UL << _M_offset); }
-40039: 
-40039:     const_iterator&
-40039:     operator++()
-40039:     {
-40039:       _M_bump_up();
-40039:       return *this;
-40039:     }
-40039: 
-40039:     const_iterator
-40039:     operator++(int)
-40039:     {
-40039:       const_iterator __tmp = *this;
-40039:       _M_bump_up();
-40039:       return __tmp;
-40039:     }
-40039: 
-40039:     const_iterator&
-40039:     operator--()
-40039:     {
-40039:       _M_bump_down();
-40039:       return *this;
-40039:     }
-40039: 
-40039:     const_iterator
-40039:     operator--(int)
-40039:     {
-40039:       const_iterator __tmp = *this;
-40039:       _M_bump_down();
-40039:       return __tmp;
-40039:     }
-40039: 
-40039:     const_iterator&
-40039:     operator+=(difference_type __i)
-40039:     {
-40039:       _M_incr(__i);
-40039:       return *this;
-40039:     }
-40039: 
-40039:     const_iterator&
-40039:     operator-=(difference_type __i)
-40039:     {
-40039:       *this += -__i;
-40039:       return *this;
-40039:     }
-40039: 
-40039:     const_iterator
-40039:     operator+(difference_type __i) const
-40039:     {
-40039:       const_iterator __tmp = *this;
-40039:       return __tmp += __i;
-40039:     }
-40039: 
-40039:     const_iterator
-40039:     operator-(difference_type __i) const
-40039:     {
-40039:       const_iterator __tmp = *this;
-40039:       return __tmp -= __i;
-40039:     }
-40039: 
-40039:     const_reference
-40039:     operator[](difference_type __i) const
-40039:     { return *(*this + __i); }
-40039:   };
-40039: 
-40039:   inline _Bit_const_iterator
-40039:   operator+(ptrdiff_t __n, const _Bit_const_iterator& __x)
-40039:   { return __x + __n; }
-40039: 
-40039:   inline void
-40039:   __fill_bvector(_Bit_type * __v,
-40039:    unsigned int __first, unsigned int __last, bool __x)
-40039:   {
-40039:     const _Bit_type __fmask = ~0ul << __first;
-40039:     const _Bit_type __lmask = ~0ul >> (_S_word_bit - __last);
-40039:     const _Bit_type __mask = __fmask & __lmask;
-40039: 
-40039:     if (__x)
-40039:       *__v |= __mask;
-40039:     else
-40039:       *__v &= ~__mask;
-40039:   }
-40039: 
-40039:   inline void
-40039:   fill(_Bit_iterator __first, _Bit_iterator __last, const bool& __x)
-40039:   {
-40039:     if (__first._M_p != __last._M_p)
-40039:       {
-40039:  _Bit_type* __first_p = __first._M_p;
-40039:  if (__first._M_offset != 0)
-40039:    __fill_bvector(__first_p++, __first._M_offset, _S_word_bit, __x);
-40039: 
-40039:  __builtin_memset(__first_p, __x ? ~0 : 0,
-40039:     (__last._M_p - __first_p) * sizeof(_Bit_type));
-40039: 
-40039:  if (__last._M_offset != 0)
-40039:    __fill_bvector(__last._M_p, 0, __last._M_offset, __x);
-40039:       }
-40039:     else if (__first._M_offset != __last._M_offset)
-40039:       __fill_bvector(__first._M_p, __first._M_offset, __last._M_offset, __x);
-40039:   }
-40039: 
-40039:   template<typename _Alloc>
-40039:     struct _Bvector_base
-40039:     {
-40039:       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
-40039:         rebind<_Bit_type>::other _Bit_alloc_type;
-40039:       typedef typename __gnu_cxx::__alloc_traits<_Bit_alloc_type>
-40039:  _Bit_alloc_traits;
-40039:       typedef typename _Bit_alloc_traits::pointer _Bit_pointer;
-40039: 
-40039:       struct _Bvector_impl_data
-40039:       {
-40039:  _Bit_iterator _M_start;
-40039:  _Bit_iterator _M_finish;
-40039:  _Bit_pointer _M_end_of_storage;
-40039: 
-40039:  _Bvector_impl_data() noexcept
-40039:  : _M_start(), _M_finish(), _M_end_of_storage()
-40039:  { }
-40039: 
-40039: 
-40039:  _Bvector_impl_data(_Bvector_impl_data&& __x) noexcept
-40039:  : _M_start(__x._M_start), _M_finish(__x._M_finish)
-40039:  , _M_end_of_storage(__x._M_end_of_storage)
-40039:  { __x._M_reset(); }
-40039: 
-40039:  void
-40039:  _M_move_data(_Bvector_impl_data&& __x) noexcept
-40039:  {
-40039:    this->_M_start = __x._M_start;
-40039:    this->_M_finish = __x._M_finish;
-40039:    this->_M_end_of_storage = __x._M_end_of_storage;
-40039:    __x._M_reset();
-40039:  }
-40039: 
-40039: 
-40039:  void
-40039:  _M_reset() noexcept
-40039:  {
-40039:    _M_start = _M_finish = _Bit_iterator();
-40039:    _M_end_of_storage = _Bit_pointer();
-40039:  }
-40039:       };
-40039: 
-40039:       struct _Bvector_impl
-40039:  : public _Bit_alloc_type, public _Bvector_impl_data
-40039:  {
-40039:  public:
-40039:    _Bvector_impl() noexcept(is_nothrow_default_constructible<_Bit_alloc_type>::value)
-40039: 
-40039:    : _Bit_alloc_type()
-40039:    { }
-40039: 
-40039:    _Bvector_impl(const _Bit_alloc_type& __a) noexcept
-40039:    : _Bit_alloc_type(__a)
-40039:    { }
-40039: 
-40039: 
-40039:  _Bvector_impl(_Bvector_impl&&) = default;
-40039: 
-40039: 
-40039:  _Bit_type*
-40039:  _M_end_addr() const noexcept
-40039:  {
-40039:    if (this->_M_end_of_storage)
-40039:      return std::__addressof(this->_M_end_of_storage[-1]) + 1;
-40039:    return 0;
-40039:  }
-40039:       };
-40039: 
-40039:     public:
-40039:       typedef _Alloc allocator_type;
-40039: 
-40039:       _Bit_alloc_type&
-40039:       _M_get_Bit_allocator() noexcept
-40039:       { return this->_M_impl; }
-40039: 
-40039:       const _Bit_alloc_type&
-40039:       _M_get_Bit_allocator() const noexcept
-40039:       { return this->_M_impl; }
-40039: 
-40039:       allocator_type
-40039:       get_allocator() const noexcept
-40039:       { return allocator_type(_M_get_Bit_allocator()); }
-40039: 
-40039: 
-40039:       _Bvector_base() = default;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       _Bvector_base(const allocator_type& __a)
-40039:       : _M_impl(__a) { }
-40039: 
-40039: 
-40039:       _Bvector_base(_Bvector_base&&) = default;
-40039: 
-40039: 
-40039:       ~_Bvector_base()
-40039:       { this->_M_deallocate(); }
-40039: 
-40039:     protected:
-40039:       _Bvector_impl _M_impl;
-40039: 
-40039:       _Bit_pointer
-40039:       _M_allocate(size_t __n)
-40039:       { return _Bit_alloc_traits::allocate(_M_impl, _S_nword(__n)); }
-40039: 
-40039:       void
-40039:       _M_deallocate()
-40039:       {
-40039:  if (_M_impl._M_start._M_p)
-40039:    {
-40039:      const size_t __n = _M_impl._M_end_addr() - _M_impl._M_start._M_p;
-40039:      _Bit_alloc_traits::deallocate(_M_impl,
-40039:        _M_impl._M_end_of_storage - __n,
-40039:        __n);
-40039:      _M_impl._M_reset();
-40039:    }
-40039:       }
-40039: 
-40039: 
-40039:       void
-40039:       _M_move_data(_Bvector_base&& __x) noexcept
-40039:       { _M_impl._M_move_data(std::move(__x._M_impl)); }
-40039: 
-40039: 
-40039:       static size_t
-40039:       _S_nword(size_t __n)
-40039:       { return (__n + int(_S_word_bit) - 1) / int(_S_word_bit); }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: # 587 "/usr/include/c++/8/bits/stl_bvector.h" 3
-40039:   template<typename _Alloc>
-40039:     class vector<bool, _Alloc> : protected _Bvector_base<_Alloc>
-40039:     {
-40039:       typedef _Bvector_base<_Alloc> _Base;
-40039:       typedef typename _Base::_Bit_pointer _Bit_pointer;
-40039:       typedef typename _Base::_Bit_alloc_traits _Bit_alloc_traits;
-40039: 
-40039: 
-40039:       friend struct std::hash<vector>;
-40039: 
-40039: 
-40039:     public:
-40039:       typedef bool value_type;
-40039:       typedef size_t size_type;
-40039:       typedef ptrdiff_t difference_type;
-40039:       typedef _Bit_reference reference;
-40039:       typedef bool const_reference;
-40039:       typedef _Bit_reference* pointer;
-40039:       typedef const bool* const_pointer;
-40039:       typedef _Bit_iterator iterator;
-40039:       typedef _Bit_const_iterator const_iterator;
-40039:       typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
-40039:       typedef std::reverse_iterator<iterator> reverse_iterator;
-40039:       typedef _Alloc allocator_type;
-40039: 
-40039:       allocator_type
-40039:       get_allocator() const
-40039:       { return _Base::get_allocator(); }
-40039: 
-40039:     protected:
-40039:       using _Base::_M_allocate;
-40039:       using _Base::_M_deallocate;
-40039:       using _Base::_S_nword;
-40039:       using _Base::_M_get_Bit_allocator;
-40039: 
-40039:     public:
-40039: 
-40039:       vector() = default;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       explicit
-40039:       vector(const allocator_type& __a)
-40039:       : _Base(__a) { }
-40039: 
-40039: 
-40039:       explicit
-40039:       vector(size_type __n, const allocator_type& __a = allocator_type())
-40039:       : vector(__n, false, __a)
-40039:       { }
-40039: 
-40039:       vector(size_type __n, const bool& __value,
-40039:       const allocator_type& __a = allocator_type())
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       : _Base(__a)
-40039:       {
-40039:  _M_initialize(__n);
-40039:  _M_initialize_value(__value);
-40039:       }
-40039: 
-40039:       vector(const vector& __x)
-40039:       : _Base(_Bit_alloc_traits::_S_select_on_copy(__x._M_get_Bit_allocator()))
-40039:       {
-40039:  _M_initialize(__x.size());
-40039:  _M_copy_aligned(__x.begin(), __x.end(), this->_M_impl._M_start);
-40039:       }
-40039: 
-40039: 
-40039:       vector(vector&&) = default;
-40039: 
-40039:       vector(vector&& __x, const allocator_type& __a)
-40039:       noexcept(_Bit_alloc_traits::_S_always_equal())
-40039:       : _Base(__a)
-40039:       {
-40039:  if (__x.get_allocator() == __a)
-40039:    this->_M_move_data(std::move(__x));
-40039:  else
-40039:    {
-40039:      _M_initialize(__x.size());
-40039:      _M_copy_aligned(__x.begin(), __x.end(), begin());
-40039:      __x.clear();
-40039:    }
-40039:       }
-40039: 
-40039:       vector(const vector& __x, const allocator_type& __a)
-40039:       : _Base(__a)
-40039:       {
-40039:  _M_initialize(__x.size());
-40039:  _M_copy_aligned(__x.begin(), __x.end(), this->_M_impl._M_start);
-40039:       }
-40039: 
-40039:       vector(initializer_list<bool> __l,
-40039:       const allocator_type& __a = allocator_type())
-40039:       : _Base(__a)
-40039:       {
-40039:  _M_initialize_range(__l.begin(), __l.end(),
-40039:        random_access_iterator_tag());
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       template<typename _InputIterator,
-40039:         typename = std::_RequireInputIter<_InputIterator>>
-40039:  vector(_InputIterator __first, _InputIterator __last,
-40039:         const allocator_type& __a = allocator_type())
-40039:  : _Base(__a)
-40039:  { _M_initialize_dispatch(__first, __last, __false_type()); }
-40039: # 710 "/usr/include/c++/8/bits/stl_bvector.h" 3
-40039:       ~vector() noexcept { }
-40039: 
-40039:       vector&
-40039:       operator=(const vector& __x)
-40039:       {
-40039:  if (&__x == this)
-40039:    return *this;
-40039: 
-40039:  if (_Bit_alloc_traits::_S_propagate_on_copy_assign())
-40039:    {
-40039:      if (this->_M_get_Bit_allocator() != __x._M_get_Bit_allocator())
-40039:        {
-40039:   this->_M_deallocate();
-40039:   std::__alloc_on_copy(_M_get_Bit_allocator(),
-40039:          __x._M_get_Bit_allocator());
-40039:   _M_initialize(__x.size());
-40039:        }
-40039:      else
-40039:        std::__alloc_on_copy(_M_get_Bit_allocator(),
-40039:        __x._M_get_Bit_allocator());
-40039:    }
-40039: 
-40039:  if (__x.size() > capacity())
-40039:    {
-40039:      this->_M_deallocate();
-40039:      _M_initialize(__x.size());
-40039:    }
-40039:  this->_M_impl._M_finish = _M_copy_aligned(__x.begin(), __x.end(),
-40039:         begin());
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039:       vector&
-40039:       operator=(vector&& __x) noexcept(_Bit_alloc_traits::_S_nothrow_move())
-40039:       {
-40039:  if (_Bit_alloc_traits::_S_propagate_on_move_assign()
-40039:      || this->_M_get_Bit_allocator() == __x._M_get_Bit_allocator())
-40039:    {
-40039:      this->_M_deallocate();
-40039:      this->_M_move_data(std::move(__x));
-40039:      std::__alloc_on_move(_M_get_Bit_allocator(),
-40039:      __x._M_get_Bit_allocator());
-40039:    }
-40039:  else
-40039:    {
-40039:      if (__x.size() > capacity())
-40039:        {
-40039:   this->_M_deallocate();
-40039:   _M_initialize(__x.size());
-40039:        }
-40039:      this->_M_impl._M_finish = _M_copy_aligned(__x.begin(), __x.end(),
-40039:             begin());
-40039:      __x.clear();
-40039:    }
-40039:  return *this;
-40039:       }
-40039: 
-40039:       vector&
-40039:       operator=(initializer_list<bool> __l)
-40039:       {
-40039:  this->assign (__l.begin(), __l.end());
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       assign(size_type __n, const bool& __x)
-40039:       { _M_fill_assign(__n, __x); }
-40039: 
-40039: 
-40039:       template<typename _InputIterator,
-40039:         typename = std::_RequireInputIter<_InputIterator>>
-40039:  void
-40039:  assign(_InputIterator __first, _InputIterator __last)
-40039:  { _M_assign_aux(__first, __last, std::__iterator_category(__first)); }
-40039: # 801 "/usr/include/c++/8/bits/stl_bvector.h" 3
-40039:       void
-40039:       assign(initializer_list<bool> __l)
-40039:       { _M_assign_aux(__l.begin(), __l.end(), random_access_iterator_tag()); }
-40039: 
-40039: 
-40039:       iterator
-40039:       begin() noexcept
-40039:       { return this->_M_impl._M_start; }
-40039: 
-40039:       const_iterator
-40039:       begin() const noexcept
-40039:       { return this->_M_impl._M_start; }
-40039: 
-40039:       iterator
-40039:       end() noexcept
-40039:       { return this->_M_impl._M_finish; }
-40039: 
-40039:       const_iterator
-40039:       end() const noexcept
-40039:       { return this->_M_impl._M_finish; }
-40039: 
-40039:       reverse_iterator
-40039:       rbegin() noexcept
-40039:       { return reverse_iterator(end()); }
-40039: 
-40039:       const_reverse_iterator
-40039:       rbegin() const noexcept
-40039:       { return const_reverse_iterator(end()); }
-40039: 
-40039:       reverse_iterator
-40039:       rend() noexcept
-40039:       { return reverse_iterator(begin()); }
-40039: 
-40039:       const_reverse_iterator
-40039:       rend() const noexcept
-40039:       { return const_reverse_iterator(begin()); }
-40039: 
-40039: 
-40039:       const_iterator
-40039:       cbegin() const noexcept
-40039:       { return this->_M_impl._M_start; }
-40039: 
-40039:       const_iterator
-40039:       cend() const noexcept
-40039:       { return this->_M_impl._M_finish; }
-40039: 
-40039:       const_reverse_iterator
-40039:       crbegin() const noexcept
-40039:       { return const_reverse_iterator(end()); }
-40039: 
-40039:       const_reverse_iterator
-40039:       crend() const noexcept
-40039:       { return const_reverse_iterator(begin()); }
-40039: 
-40039: 
-40039:       size_type
-40039:       size() const noexcept
-40039:       { return size_type(end() - begin()); }
-40039: 
-40039:       size_type
-40039:       max_size() const noexcept
-40039:       {
-40039:  const size_type __isize =
-40039:    __gnu_cxx::__numeric_traits<difference_type>::__max
-40039:    - int(_S_word_bit) + 1;
-40039:  const size_type __asize
-40039:    = _Bit_alloc_traits::max_size(_M_get_Bit_allocator());
-40039:  return (__asize <= __isize / int(_S_word_bit)
-40039:   ? __asize * int(_S_word_bit) : __isize);
-40039:       }
-40039: 
-40039:       size_type
-40039:       capacity() const noexcept
-40039:       { return size_type(const_iterator(this->_M_impl._M_end_addr(), 0)
-40039:     - begin()); }
-40039: 
-40039:       bool
-40039:       empty() const noexcept
-40039:       { return begin() == end(); }
-40039: 
-40039:       reference
-40039:       operator[](size_type __n)
-40039:       {
-40039:  return *iterator(this->_M_impl._M_start._M_p
-40039:     + __n / int(_S_word_bit), __n % int(_S_word_bit));
-40039:       }
-40039: 
-40039:       const_reference
-40039:       operator[](size_type __n) const
-40039:       {
-40039:  return *const_iterator(this->_M_impl._M_start._M_p
-40039:         + __n / int(_S_word_bit), __n % int(_S_word_bit));
-40039:       }
-40039: 
-40039:     protected:
-40039:       void
-40039:       _M_range_check(size_type __n) const
-40039:       {
-40039:  if (__n >= this->size())
-40039:    __throw_out_of_range_fmt(("vector<bool>::_M_range_check: __n " "(which is %zu) >= this->size() " "(which is %zu)")
-40039: 
-40039:                             ,
-40039:        __n, this->size());
-40039:       }
-40039: 
-40039:     public:
-40039:       reference
-40039:       at(size_type __n)
-40039:       { _M_range_check(__n); return (*this)[__n]; }
-40039: 
-40039:       const_reference
-40039:       at(size_type __n) const
-40039:       { _M_range_check(__n); return (*this)[__n]; }
-40039: 
-40039:       void
-40039:       reserve(size_type __n)
-40039:       {
-40039:  if (__n > max_size())
-40039:    __throw_length_error(("vector::reserve"));
-40039:  if (capacity() < __n)
-40039:    _M_reallocate(__n);
-40039:       }
-40039: 
-40039:       reference
-40039:       front()
-40039:       { return *begin(); }
-40039: 
-40039:       const_reference
-40039:       front() const
-40039:       { return *begin(); }
-40039: 
-40039:       reference
-40039:       back()
-40039:       { return *(end() - 1); }
-40039: 
-40039:       const_reference
-40039:       back() const
-40039:       { return *(end() - 1); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       data() noexcept { }
-40039: 
-40039:       void
-40039:       push_back(bool __x)
-40039:       {
-40039:  if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr())
-40039:    *this->_M_impl._M_finish++ = __x;
-40039:  else
-40039:    _M_insert_aux(end(), __x);
-40039:       }
-40039: 
-40039:       void
-40039:       swap(vector& __x) noexcept
-40039:       {
-40039:  std::swap(this->_M_impl._M_start, __x._M_impl._M_start);
-40039:  std::swap(this->_M_impl._M_finish, __x._M_impl._M_finish);
-40039:  std::swap(this->_M_impl._M_end_of_storage,
-40039:     __x._M_impl._M_end_of_storage);
-40039:  _Bit_alloc_traits::_S_on_swap(_M_get_Bit_allocator(),
-40039:           __x._M_get_Bit_allocator());
-40039:       }
-40039: 
-40039: 
-40039:       static void
-40039:       swap(reference __x, reference __y) noexcept
-40039:       {
-40039:  bool __tmp = __x;
-40039:  __x = __y;
-40039:  __y = __tmp;
-40039:       }
-40039: 
-40039:       iterator
-40039: 
-40039:       insert(const_iterator __position, const bool& __x = bool())
-40039: 
-40039: 
-40039: 
-40039:       {
-40039:  const difference_type __n = __position - begin();
-40039:  if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr()
-40039:      && __position == end())
-40039:    *this->_M_impl._M_finish++ = __x;
-40039:  else
-40039:    _M_insert_aux(__position._M_const_cast(), __x);
-40039:  return begin() + __n;
-40039:       }
-40039: 
-40039: 
-40039:       template<typename _InputIterator,
-40039:         typename = std::_RequireInputIter<_InputIterator>>
-40039:  iterator
-40039:  insert(const_iterator __position,
-40039:         _InputIterator __first, _InputIterator __last)
-40039:  {
-40039:    difference_type __offset = __position - cbegin();
-40039:    _M_insert_dispatch(__position._M_const_cast(),
-40039:         __first, __last, __false_type());
-40039:    return begin() + __offset;
-40039:  }
-40039: # 1017 "/usr/include/c++/8/bits/stl_bvector.h" 3
-40039:       iterator
-40039:       insert(const_iterator __position, size_type __n, const bool& __x)
-40039:       {
-40039:  difference_type __offset = __position - cbegin();
-40039:  _M_fill_insert(__position._M_const_cast(), __n, __x);
-40039:  return begin() + __offset;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       insert(const_iterator __p, initializer_list<bool> __l)
-40039:       { return this->insert(__p, __l.begin(), __l.end()); }
-40039: 
-40039: 
-40039:       void
-40039:       pop_back()
-40039:       { --this->_M_impl._M_finish; }
-40039: 
-40039:       iterator
-40039: 
-40039:       erase(const_iterator __position)
-40039: 
-40039: 
-40039: 
-40039:       { return _M_erase(__position._M_const_cast()); }
-40039: 
-40039:       iterator
-40039: 
-40039:       erase(const_iterator __first, const_iterator __last)
-40039: 
-40039: 
-40039: 
-40039:       { return _M_erase(__first._M_const_cast(), __last._M_const_cast()); }
-40039: 
-40039:       void
-40039:       resize(size_type __new_size, bool __x = bool())
-40039:       {
-40039:  if (__new_size < size())
-40039:    _M_erase_at_end(begin() + difference_type(__new_size));
-40039:  else
-40039:    insert(end(), __new_size - size(), __x);
-40039:       }
-40039: 
-40039: 
-40039:       void
-40039:       shrink_to_fit()
-40039:       { _M_shrink_to_fit(); }
-40039: 
-40039: 
-40039:       void
-40039:       flip() noexcept
-40039:       {
-40039:  _Bit_type * const __end = this->_M_impl._M_end_addr();
-40039:  for (_Bit_type * __p = this->_M_impl._M_start._M_p; __p != __end; ++__p)
-40039:    *__p = ~*__p;
-40039:       }
-40039: 
-40039:       void
-40039:       clear() noexcept
-40039:       { _M_erase_at_end(begin()); }
-40039: 
-40039: 
-40039:       template<typename... _Args>
-40039: 
-40039: 
-40039: 
-40039:  void
-40039: 
-40039:  emplace_back(_Args&&... __args)
-40039:  {
-40039:    push_back(bool(__args...));
-40039: 
-40039: 
-40039: 
-40039:  }
-40039: 
-40039:       template<typename... _Args>
-40039:  iterator
-40039:  emplace(const_iterator __pos, _Args&&... __args)
-40039:  { return insert(__pos, bool(__args...)); }
-40039: 
-40039: 
-40039:     protected:
-40039: 
-40039:       iterator
-40039:       _M_copy_aligned(const_iterator __first, const_iterator __last,
-40039:         iterator __result)
-40039:       {
-40039:  _Bit_type* __q = std::copy(__first._M_p, __last._M_p, __result._M_p);
-40039:  return std::copy(const_iterator(__last._M_p, 0), __last,
-40039:     iterator(__q, 0));
-40039:       }
-40039: 
-40039:       void
-40039:       _M_initialize(size_type __n)
-40039:       {
-40039:  if (__n)
-40039:    {
-40039:      _Bit_pointer __q = this->_M_allocate(__n);
-40039:      this->_M_impl._M_end_of_storage = __q + _S_nword(__n);
-40039:      this->_M_impl._M_start = iterator(std::__addressof(*__q), 0);
-40039:    }
-40039:  else
-40039:    {
-40039:      this->_M_impl._M_end_of_storage = _Bit_pointer();
-40039:      this->_M_impl._M_start = iterator(0, 0);
-40039:    }
-40039:  this->_M_impl._M_finish = this->_M_impl._M_start + difference_type(__n);
-40039: 
-40039:       }
-40039: 
-40039:       void
-40039:       _M_initialize_value(bool __x)
-40039:       {
-40039:  if (_Bit_type* __p = this->_M_impl._M_start._M_p)
-40039:    __builtin_memset(__p, __x ? ~0 : 0,
-40039:       (this->_M_impl._M_end_addr() - __p)
-40039:       * sizeof(_Bit_type));
-40039:       }
-40039: 
-40039:       void
-40039:       _M_reallocate(size_type __n);
-40039: 
-40039: 
-40039:       bool
-40039:       _M_shrink_to_fit();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Integer>
-40039:  void
-40039:  _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type)
-40039:  {
-40039:    _M_initialize(static_cast<size_type>(__n));
-40039:    _M_initialize_value(__x);
-40039:  }
-40039: 
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
-40039:           __false_type)
-40039:  { _M_initialize_range(__first, __last,
-40039:          std::__iterator_category(__first)); }
-40039: 
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  _M_initialize_range(_InputIterator __first, _InputIterator __last,
-40039:        std::input_iterator_tag)
-40039:  {
-40039:    for (; __first != __last; ++__first)
-40039:      push_back(*__first);
-40039:  }
-40039: 
-40039:       template<typename _ForwardIterator>
-40039:  void
-40039:  _M_initialize_range(_ForwardIterator __first, _ForwardIterator __last,
-40039:        std::forward_iterator_tag)
-40039:  {
-40039:    const size_type __n = std::distance(__first, __last);
-40039:    _M_initialize(__n);
-40039:    std::copy(__first, __last, this->_M_impl._M_start);
-40039:  }
-40039: # 1203 "/usr/include/c++/8/bits/stl_bvector.h" 3
-40039:       void
-40039:       _M_fill_assign(size_t __n, bool __x)
-40039:       {
-40039:  if (__n > size())
-40039:    {
-40039:      _M_initialize_value(__x);
-40039:      insert(end(), __n - size(), __x);
-40039:    }
-40039:  else
-40039:    {
-40039:      _M_erase_at_end(begin() + __n);
-40039:      _M_initialize_value(__x);
-40039:    }
-40039:       }
-40039: 
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  _M_assign_aux(_InputIterator __first, _InputIterator __last,
-40039:         std::input_iterator_tag)
-40039:  {
-40039:    iterator __cur = begin();
-40039:    for (; __first != __last && __cur != end(); ++__cur, ++__first)
-40039:      *__cur = *__first;
-40039:    if (__first == __last)
-40039:      _M_erase_at_end(__cur);
-40039:    else
-40039:      insert(end(), __first, __last);
-40039:  }
-40039: 
-40039:       template<typename _ForwardIterator>
-40039:  void
-40039:  _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
-40039:         std::forward_iterator_tag)
-40039:  {
-40039:    const size_type __len = std::distance(__first, __last);
-40039:    if (__len < size())
-40039:      _M_erase_at_end(std::copy(__first, __last, begin()));
-40039:    else
-40039:      {
-40039:        _ForwardIterator __mid = __first;
-40039:        std::advance(__mid, size());
-40039:        std::copy(__first, __mid, begin());
-40039:        insert(end(), __mid, __last);
-40039:      }
-40039:  }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Integer>
-40039:  void
-40039:  _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __x,
-40039:       __true_type)
-40039:  { _M_fill_insert(__pos, __n, __x); }
-40039: 
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  _M_insert_dispatch(iterator __pos,
-40039:       _InputIterator __first, _InputIterator __last,
-40039:       __false_type)
-40039:  { _M_insert_range(__pos, __first, __last,
-40039:      std::__iterator_category(__first)); }
-40039: 
-40039:       void
-40039:       _M_fill_insert(iterator __position, size_type __n, bool __x);
-40039: 
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  _M_insert_range(iterator __pos, _InputIterator __first,
-40039:    _InputIterator __last, std::input_iterator_tag)
-40039:  {
-40039:    for (; __first != __last; ++__first)
-40039:      {
-40039:        __pos = insert(__pos, *__first);
-40039:        ++__pos;
-40039:      }
-40039:  }
-40039: 
-40039:       template<typename _ForwardIterator>
-40039:  void
-40039:  _M_insert_range(iterator __position, _ForwardIterator __first,
-40039:    _ForwardIterator __last, std::forward_iterator_tag);
-40039: 
-40039:       void
-40039:       _M_insert_aux(iterator __position, bool __x);
-40039: 
-40039:       size_type
-40039:       _M_check_len(size_type __n, const char* __s) const
-40039:       {
-40039:  if (max_size() - size() < __n)
-40039:    __throw_length_error((__s));
-40039: 
-40039:  const size_type __len = size() + std::max(size(), __n);
-40039:  return (__len < size() || __len > max_size()) ? max_size() : __len;
-40039:       }
-40039: 
-40039:       void
-40039:       _M_erase_at_end(iterator __pos)
-40039:       { this->_M_impl._M_finish = __pos; }
-40039: 
-40039:       iterator
-40039:       _M_erase(iterator __pos);
-40039: 
-40039:       iterator
-40039:       _M_erase(iterator __first, iterator __last);
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Alloc>
-40039:     struct hash<std::vector<bool, _Alloc>>
-40039:     : public __hash_base<size_t, std::vector<bool, _Alloc>>
-40039:     {
-40039:       size_t
-40039:       operator()(const std::vector<bool, _Alloc>&) const noexcept;
-40039:     };
-40039: 
-40039: 
-40039: }
-40039: # 66 "/usr/include/c++/8/vector" 2 3
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/vector.tcc" 1 3
-40039: # 59 "/usr/include/c++/8/bits/vector.tcc" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     void
-40039:     vector<_Tp, _Alloc>::
-40039:     reserve(size_type __n)
-40039:     {
-40039:       if (__n > this->max_size())
-40039:  __throw_length_error(("vector::reserve"));
-40039:       if (this->capacity() < __n)
-40039:  {
-40039:    const size_type __old_size = size();
-40039:    pointer __tmp = _M_allocate_and_copy(__n,
-40039:      std::__make_move_if_noexcept_iterator(this->_M_impl._M_start),
-40039:      std::__make_move_if_noexcept_iterator(this->_M_impl._M_finish));
-40039:    ;
-40039:    std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
-40039:    _M_get_Tp_allocator());
-40039:    _M_deallocate(this->_M_impl._M_start,
-40039:    this->_M_impl._M_end_of_storage
-40039:    - this->_M_impl._M_start);
-40039:    this->_M_impl._M_start = __tmp;
-40039:    this->_M_impl._M_finish = __tmp + __old_size;
-40039:    this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
-40039:  }
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     template<typename... _Args>
-40039: 
-40039: 
-40039: 
-40039:       void
-40039: 
-40039:       vector<_Tp, _Alloc>::
-40039:       emplace_back(_Args&&... __args)
-40039:       {
-40039:  if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
-40039:    {
-40039:      ;
-40039:      _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
-40039:          std::forward<_Args>(__args)...);
-40039:      ++this->_M_impl._M_finish;
-40039:      ;
-40039:    }
-40039:  else
-40039:    _M_realloc_insert(end(), std::forward<_Args>(__args)...);
-40039: 
-40039: 
-40039: 
-40039:       }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     typename vector<_Tp, _Alloc>::iterator
-40039:     vector<_Tp, _Alloc>::
-40039: 
-40039:     insert(const_iterator __position, const value_type& __x)
-40039: 
-40039: 
-40039: 
-40039:     {
-40039:       const size_type __n = __position - begin();
-40039:       if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
-40039:  if (__position == end())
-40039:    {
-40039:      ;
-40039:      _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
-40039:          __x);
-40039:      ++this->_M_impl._M_finish;
-40039:      ;
-40039:    }
-40039:  else
-40039:    {
-40039: 
-40039:      const auto __pos = begin() + (__position - cbegin());
-40039: 
-40039: 
-40039:      _Temporary_value __x_copy(this, __x);
-40039:      _M_insert_aux(__pos, std::move(__x_copy._M_val()));
-40039: 
-40039: 
-40039: 
-40039:    }
-40039:       else
-40039: 
-40039:  _M_realloc_insert(begin() + (__position - cbegin()), __x);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       return iterator(this->_M_impl._M_start + __n);
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     typename vector<_Tp, _Alloc>::iterator
-40039:     vector<_Tp, _Alloc>::
-40039:     _M_erase(iterator __position)
-40039:     {
-40039:       if (__position + 1 != end())
-40039:  std::move(__position + 1, end(), __position);
-40039:       --this->_M_impl._M_finish;
-40039:       _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish);
-40039:       ;
-40039:       return __position;
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     typename vector<_Tp, _Alloc>::iterator
-40039:     vector<_Tp, _Alloc>::
-40039:     _M_erase(iterator __first, iterator __last)
-40039:     {
-40039:       if (__first != __last)
-40039:  {
-40039:    if (__last != end())
-40039:      std::move(__last, end(), __first);
-40039:    _M_erase_at_end(__first.base() + (end() - __last));
-40039:  }
-40039:       return __first;
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     vector<_Tp, _Alloc>&
-40039:     vector<_Tp, _Alloc>::
-40039:     operator=(const vector<_Tp, _Alloc>& __x)
-40039:     {
-40039:       if (&__x != this)
-40039:  {
-40039:    ;
-40039: 
-40039:    if (_Alloc_traits::_S_propagate_on_copy_assign())
-40039:      {
-40039:        if (!_Alloc_traits::_S_always_equal()
-40039:            && _M_get_Tp_allocator() != __x._M_get_Tp_allocator())
-40039:          {
-40039: 
-40039:     this->clear();
-40039:     _M_deallocate(this->_M_impl._M_start,
-40039:     this->_M_impl._M_end_of_storage
-40039:     - this->_M_impl._M_start);
-40039:     this->_M_impl._M_start = nullptr;
-40039:     this->_M_impl._M_finish = nullptr;
-40039:     this->_M_impl._M_end_of_storage = nullptr;
-40039:   }
-40039:        std::__alloc_on_copy(_M_get_Tp_allocator(),
-40039:        __x._M_get_Tp_allocator());
-40039:      }
-40039: 
-40039:    const size_type __xlen = __x.size();
-40039:    if (__xlen > capacity())
-40039:      {
-40039:        pointer __tmp = _M_allocate_and_copy(__xlen, __x.begin(),
-40039:          __x.end());
-40039:        std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
-40039:        _M_get_Tp_allocator());
-40039:        _M_deallocate(this->_M_impl._M_start,
-40039:        this->_M_impl._M_end_of_storage
-40039:        - this->_M_impl._M_start);
-40039:        this->_M_impl._M_start = __tmp;
-40039:        this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __xlen;
-40039:      }
-40039:    else if (size() >= __xlen)
-40039:      {
-40039:        std::_Destroy(std::copy(__x.begin(), __x.end(), begin()),
-40039:        end(), _M_get_Tp_allocator());
-40039:      }
-40039:    else
-40039:      {
-40039:        std::copy(__x._M_impl._M_start, __x._M_impl._M_start + size(),
-40039:    this->_M_impl._M_start);
-40039:        std::__uninitialized_copy_a(__x._M_impl._M_start + size(),
-40039:        __x._M_impl._M_finish,
-40039:        this->_M_impl._M_finish,
-40039:        _M_get_Tp_allocator());
-40039:      }
-40039:    this->_M_impl._M_finish = this->_M_impl._M_start + __xlen;
-40039:  }
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     void
-40039:     vector<_Tp, _Alloc>::
-40039:     _M_fill_assign(size_t __n, const value_type& __val)
-40039:     {
-40039:       if (__n > capacity())
-40039:  {
-40039:    vector __tmp(__n, __val, _M_get_Tp_allocator());
-40039:    __tmp._M_impl._M_swap_data(this->_M_impl);
-40039:  }
-40039:       else if (__n > size())
-40039:  {
-40039:    std::fill(begin(), end(), __val);
-40039:    const size_type __add = __n - size();
-40039:    ;
-40039:    this->_M_impl._M_finish =
-40039:      std::__uninitialized_fill_n_a(this->_M_impl._M_finish,
-40039:        __add, __val, _M_get_Tp_allocator());
-40039:    ;
-40039:  }
-40039:       else
-40039:         _M_erase_at_end(std::fill_n(this->_M_impl._M_start, __n, __val));
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     template<typename _InputIterator>
-40039:       void
-40039:       vector<_Tp, _Alloc>::
-40039:       _M_assign_aux(_InputIterator __first, _InputIterator __last,
-40039:       std::input_iterator_tag)
-40039:       {
-40039:  pointer __cur(this->_M_impl._M_start);
-40039:  for (; __first != __last && __cur != this->_M_impl._M_finish;
-40039:       ++__cur, ++__first)
-40039:    *__cur = *__first;
-40039:  if (__first == __last)
-40039:    _M_erase_at_end(__cur);
-40039:  else
-40039:    _M_range_insert(end(), __first, __last,
-40039:      std::__iterator_category(__first));
-40039:       }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     template<typename _ForwardIterator>
-40039:       void
-40039:       vector<_Tp, _Alloc>::
-40039:       _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
-40039:       std::forward_iterator_tag)
-40039:       {
-40039:  const size_type __len = std::distance(__first, __last);
-40039: 
-40039:  if (__len > capacity())
-40039:    {
-40039:      pointer __tmp(_M_allocate_and_copy(__len, __first, __last));
-40039:      ;
-40039:      std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
-40039:      _M_get_Tp_allocator());
-40039:      _M_deallocate(this->_M_impl._M_start,
-40039:      this->_M_impl._M_end_of_storage
-40039:      - this->_M_impl._M_start);
-40039:      this->_M_impl._M_start = __tmp;
-40039:      this->_M_impl._M_finish = this->_M_impl._M_start + __len;
-40039:      this->_M_impl._M_end_of_storage = this->_M_impl._M_finish;
-40039:    }
-40039:  else if (size() >= __len)
-40039:    _M_erase_at_end(std::copy(__first, __last, this->_M_impl._M_start));
-40039:  else
-40039:    {
-40039:      _ForwardIterator __mid = __first;
-40039:      std::advance(__mid, size());
-40039:      std::copy(__first, __mid, this->_M_impl._M_start);
-40039:      const size_type __attribute__((__unused__)) __n = __len - size();
-40039:      ;
-40039:      this->_M_impl._M_finish =
-40039:        std::__uninitialized_copy_a(__mid, __last,
-40039:        this->_M_impl._M_finish,
-40039:        _M_get_Tp_allocator());
-40039:      ;
-40039:    }
-40039:       }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     auto
-40039:     vector<_Tp, _Alloc>::
-40039:     _M_insert_rval(const_iterator __position, value_type&& __v) -> iterator
-40039:     {
-40039:       const auto __n = __position - cbegin();
-40039:       if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
-40039:  if (__position == cend())
-40039:    {
-40039:      ;
-40039:      _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
-40039:          std::move(__v));
-40039:      ++this->_M_impl._M_finish;
-40039:      ;
-40039:    }
-40039:  else
-40039:    _M_insert_aux(begin() + __n, std::move(__v));
-40039:       else
-40039:  _M_realloc_insert(begin() + __n, std::move(__v));
-40039: 
-40039:       return iterator(this->_M_impl._M_start + __n);
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     template<typename... _Args>
-40039:       auto
-40039:       vector<_Tp, _Alloc>::
-40039:       _M_emplace_aux(const_iterator __position, _Args&&... __args)
-40039:       -> iterator
-40039:       {
-40039:  const auto __n = __position - cbegin();
-40039:  if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
-40039:    if (__position == cend())
-40039:      {
-40039:        ;
-40039:        _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
-40039:            std::forward<_Args>(__args)...);
-40039:        ++this->_M_impl._M_finish;
-40039:        ;
-40039:      }
-40039:    else
-40039:      {
-40039: 
-40039: 
-40039: 
-40039:        _Temporary_value __tmp(this, std::forward<_Args>(__args)...);
-40039:        _M_insert_aux(begin() + __n, std::move(__tmp._M_val()));
-40039:      }
-40039:  else
-40039:    _M_realloc_insert(begin() + __n, std::forward<_Args>(__args)...);
-40039: 
-40039:  return iterator(this->_M_impl._M_start + __n);
-40039:       }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     template<typename _Arg>
-40039:       void
-40039:       vector<_Tp, _Alloc>::
-40039:       _M_insert_aux(iterator __position, _Arg&& __arg)
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     {
-40039:       ;
-40039:       _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
-40039:           std::move(*(this->_M_impl._M_finish - 1)));
-40039:       ++this->_M_impl._M_finish;
-40039:       ;
-40039: 
-40039: 
-40039: 
-40039:       std::move_backward(__position.base(), this->_M_impl._M_finish - 2, this->_M_impl._M_finish - 1)
-40039: 
-40039:                                      ;
-40039: 
-40039: 
-40039: 
-40039:       *__position = std::forward<_Arg>(__arg);
-40039: 
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     template<typename... _Args>
-40039:       void
-40039:       vector<_Tp, _Alloc>::
-40039:       _M_realloc_insert(iterator __position, _Args&&... __args)
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     {
-40039:       const size_type __len =
-40039:  _M_check_len(size_type(1), "vector::_M_realloc_insert");
-40039:       pointer __old_start = this->_M_impl._M_start;
-40039:       pointer __old_finish = this->_M_impl._M_finish;
-40039:       const size_type __elems_before = __position - begin();
-40039:       pointer __new_start(this->_M_allocate(__len));
-40039:       pointer __new_finish(__new_start);
-40039:       try
-40039:  {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:    _Alloc_traits::construct(this->_M_impl,
-40039:        __new_start + __elems_before,
-40039: 
-40039:        std::forward<_Args>(__args)...);
-40039: 
-40039: 
-40039: 
-40039:    __new_finish = pointer();
-40039: 
-40039:    __new_finish
-40039:      = std::__uninitialized_move_if_noexcept_a
-40039:      (__old_start, __position.base(),
-40039:       __new_start, _M_get_Tp_allocator());
-40039: 
-40039:    ++__new_finish;
-40039: 
-40039:    __new_finish
-40039:      = std::__uninitialized_move_if_noexcept_a
-40039:      (__position.base(), __old_finish,
-40039:       __new_finish, _M_get_Tp_allocator());
-40039:  }
-40039:       catch(...)
-40039:  {
-40039:    if (!__new_finish)
-40039:      _Alloc_traits::destroy(this->_M_impl,
-40039:        __new_start + __elems_before);
-40039:    else
-40039:      std::_Destroy(__new_start, __new_finish, _M_get_Tp_allocator());
-40039:    _M_deallocate(__new_start, __len);
-40039:    throw;
-40039:  }
-40039:       ;
-40039:       std::_Destroy(__old_start, __old_finish, _M_get_Tp_allocator());
-40039:       _M_deallocate(__old_start,
-40039:       this->_M_impl._M_end_of_storage - __old_start);
-40039:       this->_M_impl._M_start = __new_start;
-40039:       this->_M_impl._M_finish = __new_finish;
-40039:       this->_M_impl._M_end_of_storage = __new_start + __len;
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     void
-40039:     vector<_Tp, _Alloc>::
-40039:     _M_fill_insert(iterator __position, size_type __n, const value_type& __x)
-40039:     {
-40039:       if (__n != 0)
-40039:  {
-40039:    if (size_type(this->_M_impl._M_end_of_storage
-40039:    - this->_M_impl._M_finish) >= __n)
-40039:      {
-40039: 
-40039: 
-40039: 
-40039:        _Temporary_value __tmp(this, __x);
-40039:        value_type& __x_copy = __tmp._M_val();
-40039: 
-40039:        const size_type __elems_after = end() - __position;
-40039:        pointer __old_finish(this->_M_impl._M_finish);
-40039:        if (__elems_after > __n)
-40039:   {
-40039:     ;
-40039:     std::__uninitialized_move_a(this->_M_impl._M_finish - __n,
-40039:            this->_M_impl._M_finish,
-40039:            this->_M_impl._M_finish,
-40039:            _M_get_Tp_allocator());
-40039:     this->_M_impl._M_finish += __n;
-40039:     ;
-40039:     std::move_backward(__position.base(), __old_finish - __n, __old_finish)
-40039:                                         ;
-40039:     std::fill(__position.base(), __position.base() + __n,
-40039:        __x_copy);
-40039:   }
-40039:        else
-40039:   {
-40039:     ;
-40039:     this->_M_impl._M_finish =
-40039:       std::__uninitialized_fill_n_a(this->_M_impl._M_finish,
-40039:         __n - __elems_after,
-40039:         __x_copy,
-40039:         _M_get_Tp_allocator());
-40039:     ;
-40039:     std::__uninitialized_move_a(__position.base(), __old_finish,
-40039:            this->_M_impl._M_finish,
-40039:            _M_get_Tp_allocator());
-40039:     this->_M_impl._M_finish += __elems_after;
-40039:     ;
-40039:     std::fill(__position.base(), __old_finish, __x_copy);
-40039:   }
-40039:      }
-40039:    else
-40039:      {
-40039:        const size_type __len =
-40039:   _M_check_len(__n, "vector::_M_fill_insert");
-40039:        const size_type __elems_before = __position - begin();
-40039:        pointer __new_start(this->_M_allocate(__len));
-40039:        pointer __new_finish(__new_start);
-40039:        try
-40039:   {
-40039: 
-40039:     std::__uninitialized_fill_n_a(__new_start + __elems_before,
-40039:       __n, __x,
-40039:       _M_get_Tp_allocator());
-40039:     __new_finish = pointer();
-40039: 
-40039:     __new_finish
-40039:       = std::__uninitialized_move_if_noexcept_a
-40039:       (this->_M_impl._M_start, __position.base(),
-40039:        __new_start, _M_get_Tp_allocator());
-40039: 
-40039:     __new_finish += __n;
-40039: 
-40039:     __new_finish
-40039:       = std::__uninitialized_move_if_noexcept_a
-40039:       (__position.base(), this->_M_impl._M_finish,
-40039:        __new_finish, _M_get_Tp_allocator());
-40039:   }
-40039:        catch(...)
-40039:   {
-40039:     if (!__new_finish)
-40039:       std::_Destroy(__new_start + __elems_before,
-40039:       __new_start + __elems_before + __n,
-40039:       _M_get_Tp_allocator());
-40039:     else
-40039:       std::_Destroy(__new_start, __new_finish,
-40039:       _M_get_Tp_allocator());
-40039:     _M_deallocate(__new_start, __len);
-40039:     throw;
-40039:   }
-40039:        ;
-40039:        std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
-40039:        _M_get_Tp_allocator());
-40039:        _M_deallocate(this->_M_impl._M_start,
-40039:        this->_M_impl._M_end_of_storage
-40039:        - this->_M_impl._M_start);
-40039:        this->_M_impl._M_start = __new_start;
-40039:        this->_M_impl._M_finish = __new_finish;
-40039:        this->_M_impl._M_end_of_storage = __new_start + __len;
-40039:      }
-40039:  }
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     void
-40039:     vector<_Tp, _Alloc>::
-40039:     _M_default_append(size_type __n)
-40039:     {
-40039:       if (__n != 0)
-40039:  {
-40039:    const size_type __size = size();
-40039:    size_type __navail = size_type(this->_M_impl._M_end_of_storage
-40039:       - this->_M_impl._M_finish);
-40039: 
-40039:    if (__size > max_size() || __navail > max_size() - __size)
-40039:      __builtin_unreachable();
-40039: 
-40039:    if (__navail >= __n)
-40039:      {
-40039:        ;
-40039:        this->_M_impl._M_finish =
-40039:   std::__uninitialized_default_n_a(this->_M_impl._M_finish,
-40039:        __n, _M_get_Tp_allocator());
-40039:        ;
-40039:      }
-40039:    else
-40039:      {
-40039:        const size_type __len =
-40039:   _M_check_len(__n, "vector::_M_default_append");
-40039:        pointer __new_start(this->_M_allocate(__len));
-40039:        pointer __destroy_from = pointer();
-40039:        try
-40039:   {
-40039:     std::__uninitialized_default_n_a(__new_start + __size,
-40039:          __n, _M_get_Tp_allocator());
-40039:     __destroy_from = __new_start + __size;
-40039:     std::__uninitialized_move_if_noexcept_a(
-40039:         this->_M_impl._M_start, this->_M_impl._M_finish,
-40039:         __new_start, _M_get_Tp_allocator());
-40039:   }
-40039:        catch(...)
-40039:   {
-40039:     if (__destroy_from)
-40039:       std::_Destroy(__destroy_from, __destroy_from + __n,
-40039:       _M_get_Tp_allocator());
-40039:     _M_deallocate(__new_start, __len);
-40039:     throw;
-40039:   }
-40039:        ;
-40039:        std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
-40039:        _M_get_Tp_allocator());
-40039:        _M_deallocate(this->_M_impl._M_start,
-40039:        this->_M_impl._M_end_of_storage
-40039:        - this->_M_impl._M_start);
-40039:        this->_M_impl._M_start = __new_start;
-40039:        this->_M_impl._M_finish = __new_start + __size + __n;
-40039:        this->_M_impl._M_end_of_storage = __new_start + __len;
-40039:      }
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     bool
-40039:     vector<_Tp, _Alloc>::
-40039:     _M_shrink_to_fit()
-40039:     {
-40039:       if (capacity() == size())
-40039:  return false;
-40039:       ;
-40039:       return std::__shrink_to_fit_aux<vector>::_S_do_it(*this);
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     template<typename _InputIterator>
-40039:       void
-40039:       vector<_Tp, _Alloc>::
-40039:       _M_range_insert(iterator __pos, _InputIterator __first,
-40039:         _InputIterator __last, std::input_iterator_tag)
-40039:       {
-40039:  if (__pos == end())
-40039:    {
-40039:      for (; __first != __last; ++__first)
-40039:        insert(end(), *__first);
-40039:    }
-40039:  else if (__first != __last)
-40039:    {
-40039:      vector __tmp(__first, __last, _M_get_Tp_allocator());
-40039:      insert(__pos,
-40039:      std::make_move_iterator(__tmp.begin()),
-40039:      std::make_move_iterator(__tmp.end()));
-40039:    }
-40039:       }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     template<typename _ForwardIterator>
-40039:       void
-40039:       vector<_Tp, _Alloc>::
-40039:       _M_range_insert(iterator __position, _ForwardIterator __first,
-40039:         _ForwardIterator __last, std::forward_iterator_tag)
-40039:       {
-40039:  if (__first != __last)
-40039:    {
-40039:      const size_type __n = std::distance(__first, __last);
-40039:      if (size_type(this->_M_impl._M_end_of_storage
-40039:      - this->_M_impl._M_finish) >= __n)
-40039:        {
-40039:   const size_type __elems_after = end() - __position;
-40039:   pointer __old_finish(this->_M_impl._M_finish);
-40039:   if (__elems_after > __n)
-40039:     {
-40039:       ;
-40039:       std::__uninitialized_move_a(this->_M_impl._M_finish - __n,
-40039:       this->_M_impl._M_finish,
-40039:       this->_M_impl._M_finish,
-40039:       _M_get_Tp_allocator());
-40039:       this->_M_impl._M_finish += __n;
-40039:       ;
-40039:       std::move_backward(__position.base(), __old_finish - __n, __old_finish)
-40039:                                           ;
-40039:       std::copy(__first, __last, __position);
-40039:     }
-40039:   else
-40039:     {
-40039:       _ForwardIterator __mid = __first;
-40039:       std::advance(__mid, __elems_after);
-40039:       ;
-40039:       std::__uninitialized_copy_a(__mid, __last,
-40039:       this->_M_impl._M_finish,
-40039:       _M_get_Tp_allocator());
-40039:       this->_M_impl._M_finish += __n - __elems_after;
-40039:       ;
-40039:       std::__uninitialized_move_a(__position.base(),
-40039:       __old_finish,
-40039:       this->_M_impl._M_finish,
-40039:       _M_get_Tp_allocator());
-40039:       this->_M_impl._M_finish += __elems_after;
-40039:       ;
-40039:       std::copy(__first, __mid, __position);
-40039:     }
-40039:        }
-40039:      else
-40039:        {
-40039:   const size_type __len =
-40039:     _M_check_len(__n, "vector::_M_range_insert");
-40039:   pointer __new_start(this->_M_allocate(__len));
-40039:   pointer __new_finish(__new_start);
-40039:   try
-40039:     {
-40039:       __new_finish
-40039:         = std::__uninitialized_move_if_noexcept_a
-40039:         (this->_M_impl._M_start, __position.base(),
-40039:          __new_start, _M_get_Tp_allocator());
-40039:       __new_finish
-40039:         = std::__uninitialized_copy_a(__first, __last,
-40039:           __new_finish,
-40039:           _M_get_Tp_allocator());
-40039:       __new_finish
-40039:         = std::__uninitialized_move_if_noexcept_a
-40039:         (__position.base(), this->_M_impl._M_finish,
-40039:          __new_finish, _M_get_Tp_allocator());
-40039:     }
-40039:   catch(...)
-40039:     {
-40039:       std::_Destroy(__new_start, __new_finish,
-40039:       _M_get_Tp_allocator());
-40039:       _M_deallocate(__new_start, __len);
-40039:       throw;
-40039:     }
-40039:   ;
-40039:   std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
-40039:          _M_get_Tp_allocator());
-40039:   _M_deallocate(this->_M_impl._M_start,
-40039:          this->_M_impl._M_end_of_storage
-40039:          - this->_M_impl._M_start);
-40039:   this->_M_impl._M_start = __new_start;
-40039:   this->_M_impl._M_finish = __new_finish;
-40039:   this->_M_impl._M_end_of_storage = __new_start + __len;
-40039:        }
-40039:    }
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Alloc>
-40039:     void
-40039:     vector<bool, _Alloc>::
-40039:     _M_reallocate(size_type __n)
-40039:     {
-40039:       _Bit_pointer __q = this->_M_allocate(__n);
-40039:       iterator __start(std::__addressof(*__q), 0);
-40039:       iterator __finish(_M_copy_aligned(begin(), end(), __start));
-40039:       this->_M_deallocate();
-40039:       this->_M_impl._M_start = __start;
-40039:       this->_M_impl._M_finish = __finish;
-40039:       this->_M_impl._M_end_of_storage = __q + _S_nword(__n);
-40039:     }
-40039: 
-40039:   template<typename _Alloc>
-40039:     void
-40039:     vector<bool, _Alloc>::
-40039:     _M_fill_insert(iterator __position, size_type __n, bool __x)
-40039:     {
-40039:       if (__n == 0)
-40039:  return;
-40039:       if (capacity() - size() >= __n)
-40039:  {
-40039:    std::copy_backward(__position, end(),
-40039:         this->_M_impl._M_finish + difference_type(__n));
-40039:    std::fill(__position, __position + difference_type(__n), __x);
-40039:    this->_M_impl._M_finish += difference_type(__n);
-40039:  }
-40039:       else
-40039:  {
-40039:    const size_type __len =
-40039:      _M_check_len(__n, "vector<bool>::_M_fill_insert");
-40039:    _Bit_pointer __q = this->_M_allocate(__len);
-40039:    iterator __start(std::__addressof(*__q), 0);
-40039:    iterator __i = _M_copy_aligned(begin(), __position, __start);
-40039:    std::fill(__i, __i + difference_type(__n), __x);
-40039:    iterator __finish = std::copy(__position, end(),
-40039:      __i + difference_type(__n));
-40039:    this->_M_deallocate();
-40039:    this->_M_impl._M_end_of_storage = __q + _S_nword(__len);
-40039:    this->_M_impl._M_start = __start;
-40039:    this->_M_impl._M_finish = __finish;
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _Alloc>
-40039:     template<typename _ForwardIterator>
-40039:       void
-40039:       vector<bool, _Alloc>::
-40039:       _M_insert_range(iterator __position, _ForwardIterator __first,
-40039:         _ForwardIterator __last, std::forward_iterator_tag)
-40039:       {
-40039:  if (__first != __last)
-40039:    {
-40039:      size_type __n = std::distance(__first, __last);
-40039:      if (capacity() - size() >= __n)
-40039:        {
-40039:   std::copy_backward(__position, end(),
-40039:        this->_M_impl._M_finish
-40039:        + difference_type(__n));
-40039:   std::copy(__first, __last, __position);
-40039:   this->_M_impl._M_finish += difference_type(__n);
-40039:        }
-40039:      else
-40039:        {
-40039:   const size_type __len =
-40039:     _M_check_len(__n, "vector<bool>::_M_insert_range");
-40039:   _Bit_pointer __q = this->_M_allocate(__len);
-40039:   iterator __start(std::__addressof(*__q), 0);
-40039:   iterator __i = _M_copy_aligned(begin(), __position, __start);
-40039:   __i = std::copy(__first, __last, __i);
-40039:   iterator __finish = std::copy(__position, end(), __i);
-40039:   this->_M_deallocate();
-40039:   this->_M_impl._M_end_of_storage = __q + _S_nword(__len);
-40039:   this->_M_impl._M_start = __start;
-40039:   this->_M_impl._M_finish = __finish;
-40039:        }
-40039:    }
-40039:       }
-40039: 
-40039:   template<typename _Alloc>
-40039:     void
-40039:     vector<bool, _Alloc>::
-40039:     _M_insert_aux(iterator __position, bool __x)
-40039:     {
-40039:       if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr())
-40039:  {
-40039:    std::copy_backward(__position, this->_M_impl._M_finish,
-40039:         this->_M_impl._M_finish + 1);
-40039:    *__position = __x;
-40039:    ++this->_M_impl._M_finish;
-40039:  }
-40039:       else
-40039:  {
-40039:    const size_type __len =
-40039:      _M_check_len(size_type(1), "vector<bool>::_M_insert_aux");
-40039:    _Bit_pointer __q = this->_M_allocate(__len);
-40039:    iterator __start(std::__addressof(*__q), 0);
-40039:    iterator __i = _M_copy_aligned(begin(), __position, __start);
-40039:    *__i++ = __x;
-40039:    iterator __finish = std::copy(__position, end(), __i);
-40039:    this->_M_deallocate();
-40039:    this->_M_impl._M_end_of_storage = __q + _S_nword(__len);
-40039:    this->_M_impl._M_start = __start;
-40039:    this->_M_impl._M_finish = __finish;
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _Alloc>
-40039:     typename vector<bool, _Alloc>::iterator
-40039:     vector<bool, _Alloc>::
-40039:     _M_erase(iterator __position)
-40039:     {
-40039:       if (__position + 1 != end())
-40039:         std::copy(__position + 1, end(), __position);
-40039:       --this->_M_impl._M_finish;
-40039:       return __position;
-40039:     }
-40039: 
-40039:   template<typename _Alloc>
-40039:     typename vector<bool, _Alloc>::iterator
-40039:     vector<bool, _Alloc>::
-40039:     _M_erase(iterator __first, iterator __last)
-40039:     {
-40039:       if (__first != __last)
-40039:  _M_erase_at_end(std::copy(__last, end(), __first));
-40039:       return __first;
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _Alloc>
-40039:     bool
-40039:     vector<bool, _Alloc>::
-40039:     _M_shrink_to_fit()
-40039:     {
-40039:       if (capacity() - size() < int(_S_word_bit))
-40039:  return false;
-40039:       try
-40039:  {
-40039:    _M_reallocate(size());
-40039:    return true;
-40039:  }
-40039:       catch(...)
-40039:  { return false; }
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   template<typename _Alloc>
-40039:     size_t
-40039:     hash<std::vector<bool, _Alloc>>::
-40039:     operator()(const std::vector<bool, _Alloc>& __b) const noexcept
-40039:     {
-40039:       size_t __hash = 0;
-40039:       using std::_S_word_bit;
-40039:       using std::_Bit_type;
-40039: 
-40039:       const size_t __words = __b.size() / _S_word_bit;
-40039:       if (__words)
-40039:  {
-40039:    const size_t __clength = __words * sizeof(_Bit_type);
-40039:    __hash = std::_Hash_impl::hash(__b._M_impl._M_start._M_p, __clength);
-40039:  }
-40039: 
-40039:       const size_t __extrabits = __b.size() % _S_word_bit;
-40039:       if (__extrabits)
-40039:  {
-40039:    _Bit_type __hiword = *__b._M_impl._M_finish._M_p;
-40039:    __hiword &= ~((~static_cast<_Bit_type>(0)) << __extrabits);
-40039: 
-40039:    const size_t __clength
-40039:      = (__extrabits + 8 - 1) / 8;
-40039:    if (__words)
-40039:      __hash = std::_Hash_impl::hash(&__hiword, __clength, __hash);
-40039:    else
-40039:      __hash = std::_Hash_impl::hash(&__hiword, __clength);
-40039:  }
-40039: 
-40039:       return __hash;
-40039:     }
-40039: 
-40039: 
-40039: }
-40039: # 70 "/usr/include/c++/8/vector" 2 3
-40039: # 33 "../../src/Linear_Form_defs.hh" 2
-40039: 
-40039: 
-40039: # 34 "../../src/Linear_Form_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: void swap(Linear_Form<C>& x, Linear_Form<C>& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>
-40039: operator+(const Linear_Form<C>& f1, const Linear_Form<C>& f2);
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>
-40039: operator+(Variable v, const Linear_Form<C>& f);
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>
-40039: operator+(const Linear_Form<C>& f, Variable v);
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>
-40039: operator+(const C& n, const Linear_Form<C>& f);
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>
-40039: operator+(const Linear_Form<C>& f, const C& n);
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>
-40039: operator+(const Linear_Form<C>& f);
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>
-40039: operator-(const Linear_Form<C>& f);
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>
-40039: operator-(const Linear_Form<C>& f1, const Linear_Form<C>& f2);
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>
-40039: operator-(Variable v, const Linear_Form<C>& f);
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>
-40039: operator-(const Linear_Form<C>& f, Variable v);
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>
-40039: operator-(const C& n, const Linear_Form<C>& f);
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>
-40039: operator-(const Linear_Form<C>& f, const C& n);
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>
-40039: operator*(const C& n, const Linear_Form<C>& f);
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>
-40039: operator*(const Linear_Form<C>& f, const C& n);
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>&
-40039: operator+=(Linear_Form<C>& f1, const Linear_Form<C>& f2);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>&
-40039: operator+=(Linear_Form<C>& f, Variable v);
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>&
-40039: operator+=(Linear_Form<C>& f, const C& n);
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>&
-40039: operator-=(Linear_Form<C>& f1, const Linear_Form<C>& f2);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>&
-40039: operator-=(Linear_Form<C>& f, Variable v);
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>&
-40039: operator-=(Linear_Form<C>& f, const C& n);
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>&
-40039: operator*=(Linear_Form<C>& f, const C& n);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>&
-40039: operator/=(Linear_Form<C>& f, const C& n);
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: bool
-40039: operator==(const Linear_Form<C>& x, const Linear_Form<C>& y);
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: bool
-40039: operator!=(const Linear_Form<C>& x, const Linear_Form<C>& y);
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: template <typename C>
-40039: std::ostream& operator<<(std::ostream& s, const Linear_Form<C>& f);
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 260 "../../src/Linear_Form_defs.hh"
-40039: template <typename C>
-40039: class Parma_Polyhedra_Library::Linear_Form {
-40039: public:
-40039: 
-40039:   Linear_Form();
-40039: 
-40039: 
-40039:   Linear_Form(const Linear_Form& f);
-40039: 
-40039: 
-40039:   ~Linear_Form();
-40039: 
-40039: 
-40039:   explicit Linear_Form(const C& n);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Linear_Form(Variable v);
-40039: 
-40039: 
-40039:   Linear_Form(const Linear_Expression& e);
-40039: 
-40039: 
-40039:   static dimension_type max_space_dimension();
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039:   const C& coefficient(Variable v) const;
-40039: 
-40039: 
-40039:   const C& inhomogeneous_term() const;
-40039: 
-40039: 
-40039:   void negate();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039: 
-40039:   void m_swap(Linear_Form& y);
-40039: # 336 "../../src/Linear_Form_defs.hh"
-40039:   bool overflows() const;
-40039: # 365 "../../src/Linear_Form_defs.hh"
-40039:   void relative_error(Floating_Point_Format analyzed_format,
-40039:                       Linear_Form& result) const;
-40039: # 398 "../../src/Linear_Form_defs.hh"
-40039:   template <typename Target>
-40039:   bool intervalize(const FP_Oracle<Target,C>& oracle, C& result) const;
-40039: 
-40039: private:
-40039: 
-40039:   static C zero;
-40039: 
-40039: 
-40039:   typedef std::vector<C> vec_type;
-40039: 
-40039: 
-40039:   vec_type vec;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Linear_Form(dimension_type sz, bool);
-40039: # 426 "../../src/Linear_Form_defs.hh"
-40039:   Linear_Form(Variable v, Variable w);
-40039: 
-40039: 
-40039:   dimension_type size() const;
-40039: 
-40039: 
-40039:   void extend(dimension_type sz);
-40039: 
-40039: 
-40039:   C& operator[](dimension_type i);
-40039: 
-40039: 
-40039:   const C& operator[](dimension_type i) const;
-40039: 
-40039:   friend Linear_Form<C>
-40039:   operator+<C>(const Linear_Form<C>& f1, const Linear_Form<C>& f2);
-40039:   friend Linear_Form<C>
-40039:   operator+<C>(const C& n, const Linear_Form<C>& f);
-40039:   friend Linear_Form<C>
-40039:   operator+<C>(const Linear_Form<C>& f, const C& n);
-40039:   friend Linear_Form<C>
-40039:   operator+<C>(Variable v, const Linear_Form<C>& f);
-40039: 
-40039:   friend Linear_Form<C>
-40039:   operator-<C>(const Linear_Form<C>& f);
-40039: 
-40039:   friend Linear_Form<C>
-40039:   operator-<C>(const Linear_Form<C>& f1, const Linear_Form<C>& f2);
-40039:   friend Linear_Form<C>
-40039:   operator-<C>(const C& n, const Linear_Form<C>& f);
-40039:   friend Linear_Form<C>
-40039:   operator-<C>(const Linear_Form<C>& f, const C& n);
-40039:   friend Linear_Form<C>
-40039:   operator-<C>(Variable v, const Linear_Form<C>& f);
-40039:   friend Linear_Form<C>
-40039:   operator-<C>(const Linear_Form<C>& f, Variable v);
-40039: 
-40039:   friend Linear_Form<C>
-40039:   operator*<C>(const C& n, const Linear_Form<C>& f);
-40039:   friend Linear_Form<C>
-40039:   operator*<C>(const Linear_Form<C>& f, const C& n);
-40039: 
-40039:   friend Linear_Form<C>&
-40039:   operator+=<C>(Linear_Form<C>& f1, const Linear_Form<C>& f2);
-40039:   friend Linear_Form<C>&
-40039:   operator+=<C>(Linear_Form<C>& f, Variable v);
-40039:   friend Linear_Form<C>&
-40039:   operator+=<C>(Linear_Form<C>& f, const C& n);
-40039: 
-40039:   friend Linear_Form<C>&
-40039:   operator-=<C>(Linear_Form<C>& f1, const Linear_Form<C>& f2);
-40039:   friend Linear_Form<C>&
-40039:   operator-=<C>(Linear_Form<C>& f, Variable v);
-40039:   friend Linear_Form<C>&
-40039:   operator-=<C>(Linear_Form<C>& f, const C& n);
-40039: 
-40039:   friend Linear_Form<C>&
-40039:   operator*=<C>(Linear_Form<C>& f, const C& n);
-40039: 
-40039:   friend Linear_Form<C>&
-40039:   operator/=<C>(Linear_Form<C>& f, const C& n);
-40039: 
-40039:   friend bool
-40039:   operator==<C>(const Linear_Form<C>& x, const Linear_Form<C>& y);
-40039: 
-40039:   friend std::ostream&
-40039:   Parma_Polyhedra_Library::IO_Operators
-40039:   ::operator<<<C>(std::ostream& s, const Linear_Form<C>& f);
-40039: };
-40039: 
-40039: # 1 "../../src/Linear_Form_inlines.hh" 1
-40039: # 28 "../../src/Linear_Form_inlines.hh"
-40039: # 1 "/usr/include/c++/8/iostream" 1 3
-40039: # 36 "/usr/include/c++/8/iostream" 3
-40039:        
-40039: # 37 "/usr/include/c++/8/iostream" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 42 "/usr/include/c++/8/iostream" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 60 "/usr/include/c++/8/iostream" 3
-40039:   extern istream cin;
-40039:   extern ostream cout;
-40039:   extern ostream cerr;
-40039:   extern ostream clog;
-40039: 
-40039: 
-40039:   extern wistream wcin;
-40039:   extern wostream wcout;
-40039:   extern wostream wcerr;
-40039:   extern wostream wclog;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static ios_base::Init __ioinit;
-40039: 
-40039: 
-40039: }
-40039: # 29 "../../src/Linear_Form_inlines.hh" 2
-40039: 
-40039: 
-40039: 
-40039: # 31 "../../src/Linear_Form_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename C>
-40039: inline dimension_type
-40039: Linear_Form<C>::max_space_dimension() {
-40039:   return vec_type().max_size() - 1;
-40039: }
-40039: 
-40039: template <typename C>
-40039: inline
-40039: Linear_Form<C>::Linear_Form()
-40039:   : vec(1, zero) {
-40039:   vec.reserve(compute_capacity(1, vec_type().max_size()));
-40039: }
-40039: 
-40039: template <typename C>
-40039: inline
-40039: Linear_Form<C>::Linear_Form(dimension_type sz, bool)
-40039:   : vec(sz, zero) {
-40039:   vec.reserve(compute_capacity(sz, vec_type().max_size()));
-40039: }
-40039: 
-40039: template <typename C>
-40039: inline
-40039: Linear_Form<C>::Linear_Form(const Linear_Form& f)
-40039:   : vec(f.vec) {
-40039: }
-40039: 
-40039: template <typename C>
-40039: inline
-40039: Linear_Form<C>::~Linear_Form() {
-40039: }
-40039: 
-40039: template <typename C>
-40039: inline dimension_type
-40039: Linear_Form<C>::size() const {
-40039:   return vec.size();
-40039: }
-40039: 
-40039: template <typename C>
-40039: inline void
-40039: Linear_Form<C>::extend(dimension_type sz) {
-40039:   
-40039: # 73 "../../src/Linear_Form_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 73 "../../src/Linear_Form_inlines.hh"
-40039:                     ;
-40039:   vec.reserve(compute_capacity(sz, vec_type().max_size()));
-40039:   vec.resize(sz, zero);
-40039: }
-40039: 
-40039: template <typename C>
-40039: inline
-40039: Linear_Form<C>::Linear_Form(const C& n)
-40039:   : vec(1, n) {
-40039:   vec.reserve(compute_capacity(1, vec_type().max_size()));
-40039: }
-40039: 
-40039: template <typename C>
-40039: inline dimension_type
-40039: Linear_Form<C>::space_dimension() const {
-40039:   return size() - 1;
-40039: }
-40039: 
-40039: template <typename C>
-40039: inline const C&
-40039: Linear_Form<C>::coefficient(Variable v) const {
-40039:   if (v.space_dimension() > space_dimension()) {
-40039:     return zero;
-40039:   }
-40039:   return vec[v.id()+1];
-40039: }
-40039: 
-40039: template <typename C>
-40039: inline C&
-40039: Linear_Form<C>::operator[](dimension_type i) {
-40039:   
-40039: # 103 "../../src/Linear_Form_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 103 "../../src/Linear_Form_inlines.hh"
-40039:                    ;
-40039:   return vec[i];
-40039: }
-40039: 
-40039: template <typename C>
-40039: inline const C&
-40039: Linear_Form<C>::operator[](dimension_type i) const {
-40039:   
-40039: # 110 "../../src/Linear_Form_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 110 "../../src/Linear_Form_inlines.hh"
-40039:                    ;
-40039:   return vec[i];
-40039: }
-40039: 
-40039: template <typename C>
-40039: inline const C&
-40039: Linear_Form<C>::inhomogeneous_term() const {
-40039:   return vec[0];
-40039: }
-40039: 
-40039: template <typename C>
-40039: inline memory_size_type
-40039: Linear_Form<C>::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: inline Linear_Form<C>
-40039: operator+(const Linear_Form<C>& f) {
-40039:   return f;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: inline Linear_Form<C>
-40039: operator+(const Linear_Form<C>& f, const C& n) {
-40039:   return n + f;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: inline Linear_Form<C>
-40039: operator+(const Linear_Form<C>& f, const Variable v) {
-40039:   return v + f;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: inline Linear_Form<C>
-40039: operator-(const Linear_Form<C>& f, const C& n) {
-40039:   return -n + f;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: inline Linear_Form<C>
-40039: operator-(const Variable v, const Variable w) {
-40039:   return Linear_Form<C>(v, w);
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: inline Linear_Form<C>
-40039: operator*(const Linear_Form<C>& f, const C& n) {
-40039:   return n * f;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: inline Linear_Form<C>&
-40039: operator+=(Linear_Form<C>& f, const C& n) {
-40039:   f[0] += n;
-40039:   return f;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: inline Linear_Form<C>&
-40039: operator-=(Linear_Form<C>& f, const C& n) {
-40039:   f[0] -= n;
-40039:   return f;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: inline bool
-40039: operator!=(const Linear_Form<C>& x, const Linear_Form<C>& y) {
-40039:   return !(x == y);
-40039: }
-40039: 
-40039: template <typename C>
-40039: inline void
-40039: Linear_Form<C>::m_swap(Linear_Form& y) {
-40039:   using std::swap;
-40039:   swap(vec, y.vec);
-40039: }
-40039: 
-40039: template <typename C>
-40039: inline void
-40039: Linear_Form<C>::ascii_dump(std::ostream& s) const {
-40039:   using namespace IO_Operators;
-40039:   dimension_type space_dim = space_dimension();
-40039:   s << space_dim << "\n";
-40039:   for (dimension_type i = 0; i <= space_dim; ++i) {
-40039:     const char separator = ' ';
-40039:     s << vec[i] << separator;
-40039:   }
-40039:   s << "\n";
-40039: }
-40039: 
-40039: template <typename C>
-40039: inline bool
-40039: Linear_Form<C>::ascii_load(std::istream& s) {
-40039:   using namespace IO_Operators;
-40039:   dimension_type new_dim;
-40039:   if (!(s >> new_dim)) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   vec.resize(new_dim + 1, zero);
-40039:   for (dimension_type i = 0; i <= new_dim; ++i) {
-40039:     if (!(s >> vec[i])) {
-40039:       return false;
-40039:     }
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   return true;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: inline bool
-40039: Linear_Form<C>::overflows() const {
-40039:   if (!inhomogeneous_term().is_bounded()) {
-40039:     return true;
-40039:   }
-40039:   for (dimension_type i = space_dimension(); i-- > 0; ) {
-40039:     if (!coefficient(Variable(i)).is_bounded()) {
-40039:       return true;
-40039:     }
-40039:   }
-40039: 
-40039:   return false;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: inline void
-40039: swap(Linear_Form<C>& x, Linear_Form<C>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 497 "../../src/Linear_Form_defs.hh" 2
-40039: # 29 "../../src/Float_inlines.hh" 2
-40039: 
-40039: # 1 "/usr/include/c++/8/climits" 1 3
-40039: # 39 "/usr/include/c++/8/climits" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/climits" 3
-40039: 
-40039: 
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 1 3 4
-40039: # 43 "/usr/include/c++/8/climits" 2 3
-40039: # 31 "../../src/Float_inlines.hh" 2
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline int
-40039: float_ieee754_half::inf_sign() const {
-40039:   if (word == NEG_INF) {
-40039:     return -1;
-40039:   }
-40039:   if (word == POS_INF) {
-40039:     return 1;
-40039:   }
-40039:   return 0;
-40039: }
-40039: 
-40039: inline bool
-40039: float_ieee754_half::is_nan() const {
-40039:   return (word & ~SGN_MASK) > POS_INF;
-40039: }
-40039: 
-40039: inline int
-40039: float_ieee754_half::zero_sign() const {
-40039:   if (word == NEG_ZERO) {
-40039:     return -1;
-40039:   }
-40039:   if (word == POS_ZERO) {
-40039:     return 1;
-40039:   }
-40039:   return 0;
-40039: }
-40039: 
-40039: inline void
-40039: float_ieee754_half::negate() {
-40039:   word ^= SGN_MASK;
-40039: }
-40039: 
-40039: inline bool
-40039: float_ieee754_half::sign_bit() const {
-40039:   return (word & SGN_MASK) != 0;
-40039: }
-40039: 
-40039: inline void
-40039: float_ieee754_half::dec() {
-40039:   --word;
-40039: }
-40039: 
-40039: inline void
-40039: float_ieee754_half::inc() {
-40039:   ++word;
-40039: }
-40039: 
-40039: inline void
-40039: float_ieee754_half::set_max(bool negative) {
-40039:   word = WRD_MAX;
-40039:   if (negative) {
-40039:     word |= SGN_MASK;
-40039:   }
-40039: }
-40039: 
-40039: inline void
-40039: float_ieee754_half::build(bool negative, mpz_t mantissa, int exponent) {
-40039:   word = static_cast<uint16_t>(
-40039: # 91 "../../src/Float_inlines.hh" 3 4
-40039:                               __gmpz_get_ui
-40039: # 91 "../../src/Float_inlines.hh"
-40039:                                         (mantissa)
-40039:                                & ((1UL << MANTISSA_BITS) - 1));
-40039:   if (negative) {
-40039:     word |= SGN_MASK;
-40039:   }
-40039:   const int exponent_repr = exponent + EXPONENT_BIAS;
-40039:   ((void) 0);
-40039:   word |= static_cast<uint16_t>(exponent_repr) << MANTISSA_BITS;
-40039: }
-40039: 
-40039: inline int
-40039: float_ieee754_single::inf_sign() const {
-40039:   if (word == NEG_INF) {
-40039:     return -1;
-40039:   }
-40039:   if (word == POS_INF) {
-40039:     return 1;
-40039:   }
-40039:   return 0;
-40039: }
-40039: 
-40039: inline bool
-40039: float_ieee754_single::is_nan() const {
-40039:   return (word & ~SGN_MASK) > POS_INF;
-40039: }
-40039: 
-40039: inline int
-40039: float_ieee754_single::zero_sign() const {
-40039:   if (word == NEG_ZERO) {
-40039:     return -1;
-40039:   }
-40039:   if (word == POS_ZERO) {
-40039:     return 1;
-40039:   }
-40039:   return 0;
-40039: }
-40039: 
-40039: inline void
-40039: float_ieee754_single::negate() {
-40039:   word ^= SGN_MASK;
-40039: }
-40039: 
-40039: inline bool
-40039: float_ieee754_single::sign_bit() const {
-40039:   return (word & SGN_MASK) != 0;
-40039: }
-40039: 
-40039: inline void
-40039: float_ieee754_single::dec() {
-40039:   --word;
-40039: }
-40039: 
-40039: inline void
-40039: float_ieee754_single::inc() {
-40039:   ++word;
-40039: }
-40039: 
-40039: inline void
-40039: float_ieee754_single::set_max(bool negative) {
-40039:   word = WRD_MAX;
-40039:   if (negative) {
-40039:     word |= SGN_MASK;
-40039:   }
-40039: }
-40039: 
-40039: inline void
-40039: float_ieee754_single::build(bool negative, mpz_t mantissa, int exponent) {
-40039:   word = static_cast<uint32_t>(
-40039: # 158 "../../src/Float_inlines.hh" 3 4
-40039:                               __gmpz_get_ui
-40039: # 158 "../../src/Float_inlines.hh"
-40039:                                         (mantissa)
-40039:                                & ((1UL << MANTISSA_BITS) - 1));
-40039:   if (negative) {
-40039:     word |= SGN_MASK;
-40039:   }
-40039:   const int exponent_repr = exponent + EXPONENT_BIAS;
-40039:   ((void) 0);
-40039:   word |= static_cast<uint32_t>(exponent_repr) << MANTISSA_BITS;
-40039: }
-40039: 
-40039: inline int
-40039: float_ieee754_double::inf_sign() const {
-40039:   if (lsp != LSP_INF) {
-40039:     return 0;
-40039:   }
-40039:   if (msp == MSP_NEG_INF) {
-40039:     return -1;
-40039:   }
-40039:   if (msp == MSP_POS_INF) {
-40039:     return 1;
-40039:   }
-40039:   return 0;
-40039: }
-40039: 
-40039: inline bool
-40039: float_ieee754_double::is_nan() const {
-40039:   const uint32_t a = msp & ~MSP_SGN_MASK;
-40039:   return a > MSP_POS_INF || (a == MSP_POS_INF && lsp != LSP_INF);
-40039: }
-40039: 
-40039: inline int
-40039: float_ieee754_double::zero_sign() const {
-40039:   if (lsp != LSP_ZERO) {
-40039:     return 0;
-40039:   }
-40039:   if (msp == MSP_NEG_ZERO) {
-40039:     return -1;
-40039:   }
-40039:   if (msp == MSP_POS_ZERO) {
-40039:     return 1;
-40039:   }
-40039:   return 0;
-40039: }
-40039: 
-40039: inline void
-40039: float_ieee754_double::negate() {
-40039:   msp ^= MSP_SGN_MASK;
-40039: }
-40039: 
-40039: inline bool
-40039: float_ieee754_double::sign_bit() const {
-40039:   return (msp & MSP_SGN_MASK) != 0;
-40039: }
-40039: 
-40039: inline void
-40039: float_ieee754_double::dec() {
-40039:   if (lsp == 0) {
-40039:     --msp;
-40039:     lsp = LSP_MAX;
-40039:   }
-40039:   else {
-40039:     --lsp;
-40039:   }
-40039: }
-40039: 
-40039: inline void
-40039: float_ieee754_double::inc() {
-40039:   if (lsp == LSP_MAX) {
-40039:     ++msp;
-40039:     lsp = 0;
-40039:   }
-40039:   else {
-40039:     ++lsp;
-40039:   }
-40039: }
-40039: 
-40039: inline void
-40039: float_ieee754_double::set_max(bool negative) {
-40039:   msp = MSP_MAX;
-40039:   lsp = LSP_MAX;
-40039:   if (negative) {
-40039:     msp |= MSP_SGN_MASK;
-40039:   }
-40039: }
-40039: 
-40039: inline void
-40039: float_ieee754_double::build(bool negative, mpz_t mantissa, int exponent) {
-40039:   unsigned long m;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   m = 
-40039: # 251 "../../src/Float_inlines.hh" 3 4
-40039:      __gmpz_get_ui
-40039: # 251 "../../src/Float_inlines.hh"
-40039:                (mantissa);
-40039:   lsp = static_cast<uint32_t>(m & LSP_MAX);
-40039:   m >>= 32;
-40039: 
-40039:   msp = static_cast<uint32_t>(m & ((1UL << (MANTISSA_BITS - 32)) - 1));
-40039:   if (negative) {
-40039:     msp |= MSP_SGN_MASK;
-40039:   }
-40039:   const int exponent_repr = exponent + EXPONENT_BIAS;
-40039:   ((void) 0);
-40039:   msp |= static_cast<uint32_t>(exponent_repr) << (MANTISSA_BITS - 32);
-40039: }
-40039: 
-40039: inline int
-40039: float_ibm_single::inf_sign() const {
-40039:   if (word == NEG_INF) {
-40039:     return -1;
-40039:   }
-40039:   if (word == POS_INF) {
-40039:     return 1;
-40039:   }
-40039:   return 0;
-40039: }
-40039: 
-40039: inline bool
-40039: float_ibm_single::is_nan() const {
-40039:   return (word & ~SGN_MASK) > POS_INF;
-40039: }
-40039: 
-40039: inline int
-40039: float_ibm_single::zero_sign() const {
-40039:   if (word == NEG_ZERO) {
-40039:     return -1;
-40039:   }
-40039:   if (word == POS_ZERO) {
-40039:     return 1;
-40039:   }
-40039:   return 0;
-40039: }
-40039: 
-40039: inline void
-40039: float_ibm_single::negate() {
-40039:   word ^= SGN_MASK;
-40039: }
-40039: 
-40039: inline bool
-40039: float_ibm_single::sign_bit() const {
-40039:   return (word & SGN_MASK) != 0;
-40039: }
-40039: 
-40039: inline void
-40039: float_ibm_single::dec() {
-40039:   --word;
-40039: }
-40039: 
-40039: inline void
-40039: float_ibm_single::inc() {
-40039:   ++word;
-40039: }
-40039: 
-40039: inline void
-40039: float_ibm_single::set_max(bool negative) {
-40039:   word = WRD_MAX;
-40039:   if (negative) {
-40039:     word |= SGN_MASK;
-40039:   }
-40039: }
-40039: 
-40039: inline void
-40039: float_ibm_single::build(bool negative, mpz_t mantissa, int exponent) {
-40039:   word = static_cast<uint32_t>(
-40039: # 321 "../../src/Float_inlines.hh" 3 4
-40039:                               __gmpz_get_ui
-40039: # 321 "../../src/Float_inlines.hh"
-40039:                                         (mantissa)
-40039:                                & ((1UL << MANTISSA_BITS) - 1));
-40039:   if (negative) {
-40039:     word |= SGN_MASK;
-40039:   }
-40039:   const int exponent_repr = exponent + EXPONENT_BIAS;
-40039:   ((void) 0);
-40039:   word |= static_cast<uint32_t>(exponent_repr) << MANTISSA_BITS;
-40039: }
-40039: 
-40039: inline int
-40039: float_intel_double_extended::inf_sign() const {
-40039:   if (lsp != LSP_INF) {
-40039:     return 0;
-40039:   }
-40039:   const uint32_t a = msp & MSP_NEG_INF;
-40039:   if (a == MSP_NEG_INF) {
-40039:     return -1;
-40039:   }
-40039:   if (a == MSP_POS_INF) {
-40039:     return 1;
-40039:   }
-40039:   return 0;
-40039: }
-40039: 
-40039: inline bool
-40039: float_intel_double_extended::is_nan() const {
-40039:   return (msp & MSP_POS_INF) == MSP_POS_INF
-40039:     && lsp != LSP_INF;
-40039: }
-40039: 
-40039: inline int
-40039: float_intel_double_extended::zero_sign() const {
-40039:   if (lsp != LSP_ZERO) {
-40039:     return 0;
-40039:   }
-40039:   const uint32_t a = msp & MSP_NEG_INF;
-40039:   if (a == MSP_NEG_ZERO) {
-40039:     return -1;
-40039:   }
-40039:   if (a == MSP_POS_ZERO) {
-40039:     return 1;
-40039:   }
-40039:   return 0;
-40039: }
-40039: 
-40039: inline void
-40039: float_intel_double_extended::negate() {
-40039:   msp ^= MSP_SGN_MASK;
-40039: }
-40039: 
-40039: inline bool
-40039: float_intel_double_extended::sign_bit() const {
-40039:   return (msp & MSP_SGN_MASK) != 0;
-40039: }
-40039: 
-40039: inline void
-40039: float_intel_double_extended::dec() {
-40039:   if ((lsp & LSP_DMAX) == 0) {
-40039:     --msp;
-40039:     lsp = ((msp & MSP_NEG_INF) == 0) ? LSP_DMAX : LSP_NMAX;
-40039:   }
-40039:   else {
-40039:     --lsp;
-40039:   }
-40039: }
-40039: 
-40039: inline void
-40039: float_intel_double_extended::inc() {
-40039:   if ((lsp & LSP_DMAX) == LSP_DMAX) {
-40039:     ++msp;
-40039:     lsp = LSP_DMAX + 1;
-40039:   }
-40039:   else {
-40039:     ++lsp;
-40039:   }
-40039: }
-40039: 
-40039: inline void
-40039: float_intel_double_extended::set_max(bool negative) {
-40039:   msp = MSP_MAX;
-40039:   lsp = LSP_NMAX;
-40039:   if (negative) {
-40039:     msp |= MSP_SGN_MASK;
-40039:   }
-40039: }
-40039: 
-40039: inline void
-40039: float_intel_double_extended::build(bool negative,
-40039:                                    mpz_t mantissa, int exponent) {
-40039: 
-40039: 
-40039: 
-40039:   lsp = 
-40039: # 414 "../../src/Float_inlines.hh" 3 4
-40039:        __gmpz_get_ui
-40039: # 414 "../../src/Float_inlines.hh"
-40039:                  (mantissa);
-40039: 
-40039:   msp = (negative ? MSP_SGN_MASK : 0);
-40039:   const int exponent_repr = exponent + EXPONENT_BIAS;
-40039:   ((void) 0);
-40039:   msp |= static_cast<uint32_t>(exponent_repr);
-40039: }
-40039: 
-40039: inline int
-40039: float_ieee754_quad::inf_sign() const {
-40039:   if (lsp != LSP_INF) {
-40039:     return 0;
-40039:   }
-40039:   if (msp == MSP_NEG_INF) {
-40039:     return -1;
-40039:   }
-40039:   if (msp == MSP_POS_INF) {
-40039:     return 1;
-40039:   }
-40039:   return 0;
-40039: }
-40039: 
-40039: inline bool
-40039: float_ieee754_quad::is_nan() const {
-40039:   return (msp & ~MSP_SGN_MASK) == MSP_POS_INF
-40039:     && lsp != LSP_INF;
-40039: }
-40039: 
-40039: inline int
-40039: float_ieee754_quad::zero_sign() const {
-40039:   if (lsp != LSP_ZERO) {
-40039:     return 0;
-40039:   }
-40039:   if (msp == MSP_NEG_ZERO) {
-40039:     return -1;
-40039:   }
-40039:   if (msp == MSP_POS_ZERO) {
-40039:     return 1;
-40039:   }
-40039:   return 0;
-40039: }
-40039: 
-40039: inline void
-40039: float_ieee754_quad::negate() {
-40039:   msp ^= MSP_SGN_MASK;
-40039: }
-40039: 
-40039: inline bool
-40039: float_ieee754_quad::sign_bit() const {
-40039:   return (msp & MSP_SGN_MASK) != 0;
-40039: }
-40039: 
-40039: inline void
-40039: float_ieee754_quad::dec() {
-40039:   if (lsp == 0) {
-40039:     --msp;
-40039:     lsp = LSP_MAX;
-40039:   }
-40039:   else {
-40039:     --lsp;
-40039:   }
-40039: }
-40039: 
-40039: inline void
-40039: float_ieee754_quad::inc() {
-40039:   if (lsp == LSP_MAX) {
-40039:     ++msp;
-40039:     lsp = 0;
-40039:   }
-40039:   else {
-40039:     ++lsp;
-40039:   }
-40039: }
-40039: 
-40039: inline void
-40039: float_ieee754_quad::set_max(bool negative) {
-40039:   msp = MSP_MAX;
-40039:   lsp = LSP_MAX;
-40039:   if (negative) {
-40039:     msp |= MSP_SGN_MASK;
-40039:   }
-40039: }
-40039: 
-40039: inline void
-40039: float_ieee754_quad::build(bool negative, mpz_t mantissa, int exponent) {
-40039:   uint64_t parts[2];
-40039:   
-40039: # 500 "../../src/Float_inlines.hh" 3 4
-40039:  __gmpz_export
-40039: # 500 "../../src/Float_inlines.hh"
-40039:            (parts, 0, -1, sizeof(parts[0]), 0, 0, mantissa);
-40039:   lsp = parts[0];
-40039:   msp = parts[1];
-40039:   msp &= ((static_cast<uint64_t>(1) << (MANTISSA_BITS - 64)) - 1);
-40039:   if (negative) {
-40039:     msp |= MSP_SGN_MASK;
-40039:   }
-40039:   const int exponent_repr = exponent + EXPONENT_BIAS;
-40039:   ((void) 0);
-40039:   msp |= static_cast<uint64_t>(exponent_repr) << (MANTISSA_BITS - 64);
-40039: }
-40039: 
-40039: inline bool
-40039: is_less_precise_than(Floating_Point_Format f1, Floating_Point_Format f2) {
-40039:   return f1 < f2;
-40039: }
-40039: 
-40039: inline unsigned int
-40039: msb_position(unsigned long long v) {
-40039:   return static_cast<unsigned int>(((sizeof(v)) * static_cast<std::size_t>(8))) - 1U - clz(v);
-40039: }
-40039: 
-40039: template <typename FP_Interval_Type>
-40039: inline void
-40039: affine_form_image(std::map<dimension_type,
-40039:                            Linear_Form<FP_Interval_Type> >& lf_store,
-40039:                   const Variable var,
-40039:                   const Linear_Form<FP_Interval_Type>& lf) {
-40039: 
-40039:   lf_store[var.id()] = lf;
-40039: 
-40039:   discard_occurrences(lf_store, var);
-40039: }
-40039: 
-40039: 
-40039: inline
-40039: Float<float>::Float() {
-40039: }
-40039: 
-40039: inline
-40039: Float<float>::Float(float v) {
-40039:   u.number = v;
-40039: }
-40039: 
-40039: inline float
-40039: Float<float>::value() {
-40039:   return u.number;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: inline
-40039: Float<double>::Float() {
-40039: }
-40039: 
-40039: inline
-40039: Float<double>::Float(double v) {
-40039:   u.number = v;
-40039: }
-40039: 
-40039: inline double
-40039: Float<double>::value() {
-40039:   return u.number;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: inline
-40039: Float<long double>::Float() {
-40039: }
-40039: 
-40039: inline
-40039: Float<long double>::Float(long double v) {
-40039:   u.number = v;
-40039: }
-40039: 
-40039: inline long double
-40039: Float<long double>::value() {
-40039:   return u.number;
-40039: }
-40039: 
-40039: 
-40039: }
-40039: # 520 "../../src/Float_defs.hh" 2
-40039: # 1 "../../src/Float_templates.hh" 1
-40039: # 30 "../../src/Float_templates.hh"
-40039: # 1 "/usr/include/c++/8/cmath" 1 3
-40039: # 39 "/usr/include/c++/8/cmath" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/cmath" 3
-40039: # 31 "../../src/Float_templates.hh" 2
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type>
-40039: const FP_Interval_Type& compute_absolute_error(
-40039:                         const Floating_Point_Format analyzed_format) {
-40039:   typedef typename FP_Interval_Type::boundary_type analyzer_format;
-40039: 
-40039: 
-40039:   static const FP_Interval_Type ZERO_INTERVAL = FP_Interval_Type(0);
-40039: 
-40039:   static FP_Interval_Type ieee754_half_result = ZERO_INTERVAL;
-40039:   static FP_Interval_Type ieee754_single_result = ZERO_INTERVAL;
-40039:   static FP_Interval_Type ieee754_double_result = ZERO_INTERVAL;
-40039:   static FP_Interval_Type ibm_single_result = ZERO_INTERVAL;
-40039:   static FP_Interval_Type ieee754_quad_result = ZERO_INTERVAL;
-40039:   static FP_Interval_Type intel_double_extended_result = ZERO_INTERVAL;
-40039: 
-40039:   FP_Interval_Type* to_compute = 
-40039: # 49 "../../src/Float_templates.hh" 3 4
-40039:                                 __null
-40039: # 49 "../../src/Float_templates.hh"
-40039:                                     ;
-40039: 
-40039:   unsigned int f_base;
-40039:   int f_exponent_bias;
-40039:   unsigned int f_mantissa_bits;
-40039:   switch (analyzed_format) {
-40039:     case IEEE754_HALF:
-40039:       if (ieee754_half_result != ZERO_INTERVAL) {
-40039:         return ieee754_half_result;
-40039:       }
-40039:       to_compute = &ieee754_half_result;
-40039:       f_base = float_ieee754_half::BASE;
-40039:       f_exponent_bias = float_ieee754_half::EXPONENT_BIAS;
-40039:       f_mantissa_bits = float_ieee754_half::MANTISSA_BITS;
-40039:       break;
-40039:     case IEEE754_SINGLE:
-40039:       if (ieee754_single_result != ZERO_INTERVAL) {
-40039:         return ieee754_single_result;
-40039:       }
-40039: 
-40039:       to_compute = &ieee754_single_result;
-40039:       f_base = float_ieee754_single::BASE;
-40039:       f_exponent_bias = float_ieee754_single::EXPONENT_BIAS;
-40039:       f_mantissa_bits = float_ieee754_single::MANTISSA_BITS;
-40039:       break;
-40039:     case IEEE754_DOUBLE:
-40039:       if (ieee754_double_result != ZERO_INTERVAL) {
-40039:         return ieee754_double_result;
-40039:       }
-40039: 
-40039:       to_compute = &ieee754_double_result;
-40039:       f_base = float_ieee754_double::BASE;
-40039:       f_exponent_bias = float_ieee754_double::EXPONENT_BIAS;
-40039:       f_mantissa_bits = float_ieee754_double::MANTISSA_BITS;
-40039:       break;
-40039:     case IBM_SINGLE:
-40039:       if (ibm_single_result != ZERO_INTERVAL) {
-40039:         return ibm_single_result;
-40039:       }
-40039: 
-40039:       to_compute = &ibm_single_result;
-40039:       f_base = float_ibm_single::BASE;
-40039:       f_exponent_bias = float_ibm_single::EXPONENT_BIAS;
-40039:       f_mantissa_bits = float_ibm_single::MANTISSA_BITS;
-40039:       break;
-40039:     case IEEE754_QUAD:
-40039:       if (ieee754_quad_result != ZERO_INTERVAL) {
-40039:         return ieee754_quad_result;
-40039:       }
-40039: 
-40039:       to_compute = &ieee754_quad_result;
-40039:       f_base = float_ieee754_quad::BASE;
-40039:       f_exponent_bias = float_ieee754_quad::EXPONENT_BIAS;
-40039:       f_mantissa_bits = float_ieee754_quad::MANTISSA_BITS;
-40039:       break;
-40039:     case INTEL_DOUBLE_EXTENDED:
-40039:       if (intel_double_extended_result != ZERO_INTERVAL) {
-40039:         return intel_double_extended_result;
-40039:       }
-40039: 
-40039:       to_compute = &intel_double_extended_result;
-40039:       f_base = float_intel_double_extended::BASE;
-40039:       f_exponent_bias = float_intel_double_extended::EXPONENT_BIAS;
-40039:       f_mantissa_bits = float_intel_double_extended::MANTISSA_BITS;
-40039:       break;
-40039:     default:
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       break;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039:   analyzer_format omega;
-40039:   int power = static_cast<int>(msb_position(f_base))
-40039:     * ((1 - f_exponent_bias) - static_cast<int>(f_mantissa_bits));
-40039:   omega = std::max(static_cast<analyzer_format>(ldexp(1.0, power)),
-40039:                    std::numeric_limits<analyzer_format>::denorm_min());
-40039: 
-40039:   to_compute->build(i_constraint(GREATER_OR_EQUAL, -omega),
-40039:                     i_constraint(LESS_OR_EQUAL, omega));
-40039:   return *to_compute;
-40039: }
-40039: 
-40039: template <typename FP_Interval_Type>
-40039: void
-40039: discard_occurrences(std::map<dimension_type,
-40039:                              Linear_Form<FP_Interval_Type> >& lf_store,
-40039:                     Variable var) {
-40039:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
-40039:   typedef typename std::map<dimension_type, FP_Linear_Form>::iterator Iter;
-40039:   for (Iter i = lf_store.begin(); i != lf_store.end(); ) {
-40039:     if ((i->second).coefficient(var) != 0) {
-40039:       i = lf_store.erase(i);
-40039:     }
-40039:     else {
-40039:       ++i;
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: 
-40039: 
-40039: template <typename FP_Interval_Type>
-40039: void upper_bound_assign(std::map<dimension_type,
-40039:                                  Linear_Form<FP_Interval_Type> >& ls1,
-40039:                         const std::map<dimension_type,
-40039:                                        Linear_Form<FP_Interval_Type> >& ls2) {
-40039:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
-40039:   typedef typename std::map<dimension_type, FP_Linear_Form>::iterator Iter;
-40039:   typedef typename std::map<dimension_type,
-40039:                             FP_Linear_Form>::const_iterator Const_Iter;
-40039: 
-40039:   Const_Iter i2_end = ls2.end();
-40039:   for (Iter i1 = ls1.begin(), i1_end = ls1.end(); i1 != i1_end; ) {
-40039:     Const_Iter i2 = ls2.find(i1->first);
-40039:     if ((i2 == i2_end) || (i1->second != i2->second)) {
-40039:       i1 = ls1.erase(i1);
-40039:     }
-40039:     else {
-40039:       ++i1;
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: }
-40039: # 521 "../../src/Float_defs.hh" 2
-40039: # 32 "../../src/checked_defs.hh" 2
-40039: # 1 "/usr/include/c++/8/cassert" 1 3
-40039: # 41 "/usr/include/c++/8/cassert" 3
-40039:        
-40039: # 42 "/usr/include/c++/8/cassert" 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/assert.h" 1 3 4
-40039: # 44 "/usr/include/c++/8/cassert" 2 3
-40039: # 33 "../../src/checked_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Checked {
-40039: # 471 "../../src/checked_defs.hh"
-40039: template <typename Policy1, typename Policy2, typename Type1, typename Type2> struct copy_function_struct; template <typename Policy1, typename Policy2, typename Type1, typename Type2> inline void copy( Type1& arg1, const Type2& arg2) { return copy_function_struct<Policy1, Policy2, Type1, Type2>::function(arg1, arg2); }
-40039: 
-40039: template <typename Policy, typename From> struct sgn_function_struct; template <typename Policy, typename From> inline Result_Relation sgn(const From& arg) { return sgn_function_struct<Policy, From>::function(arg); }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Type1, typename Type2> struct cmp_function_struct; template <typename Policy1, typename Policy2, typename Type1, typename Type2> inline Result_Relation cmp(const Type1& arg1, const Type2& arg2) { return cmp_function_struct<Policy1, Policy2, Type1, Type2>::function(arg1, arg2); }
-40039: 
-40039: template <typename Policy, typename Type> struct classify_function_struct; template <typename Policy, typename Type> inline Result classify(const Type& arg, bool a1, bool a2, bool a3) { return classify_function_struct<Policy, Type>::function(arg, a1, a2, a3); }
-40039: 
-40039: template <typename Policy, typename Type> struct is_nan_function_struct; template <typename Policy, typename Type> inline bool is_nan(const Type& arg) { return is_nan_function_struct<Policy, Type>::function(arg); }
-40039: 
-40039: template <typename Policy, typename Type> struct is_minf_function_struct; template <typename Policy, typename Type> inline bool is_minf(const Type& arg) { return is_minf_function_struct<Policy, Type>::function(arg); }
-40039: 
-40039: template <typename Policy, typename Type> struct is_pinf_function_struct; template <typename Policy, typename Type> inline bool is_pinf(const Type& arg) { return is_pinf_function_struct<Policy, Type>::function(arg); }
-40039: 
-40039: template <typename Policy, typename Type> struct is_int_function_struct; template <typename Policy, typename Type> inline bool is_int(const Type& arg) { return is_int_function_struct<Policy, Type>::function(arg); }
-40039: 
-40039: template <typename Policy, typename Type> struct assign_special_function_struct; template <typename Policy, typename Type> inline Result assign_special( Type& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_function_struct<Policy, Type>::function(arg, a1, a2); }
-40039: 
-40039: template <typename Policy, typename Type> struct construct_special_function_struct; template <typename Policy, typename Type> inline Result construct_special( Type& arg, Result_Class a1, Rounding_Dir a2) { return construct_special_function_struct<Policy, Type>::function(arg, a1, a2); }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename To, typename From> struct construct_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result construct( To& arg1, const From& arg2, Rounding_Dir a1) { return construct_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1); }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename To, typename From> struct assign_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result assign( To& arg1, const From& arg2, Rounding_Dir a1) { return assign_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1); }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename To, typename From> struct floor_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result floor( To& arg1, const From& arg2, Rounding_Dir a1) { return floor_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1); }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename To, typename From> struct ceil_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result ceil( To& arg1, const From& arg2, Rounding_Dir a1) { return ceil_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1); }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename To, typename From> struct trunc_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result trunc( To& arg1, const From& arg2, Rounding_Dir a1) { return trunc_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1); }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename To, typename From> struct neg_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result neg( To& arg1, const From& arg2, Rounding_Dir a1) { return neg_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1); }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename To, typename From> struct abs_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result abs( To& arg1, const From& arg2, Rounding_Dir a1) { return abs_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1); }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename To, typename From> struct sqrt_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result sqrt( To& arg1, const From& arg2, Rounding_Dir a1) { return sqrt_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1); }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> struct add_function_struct; template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> inline Result add( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return add_function_struct<Policy1, Policy2, Policy3, To, From1, From2> ::function(arg1, arg2, arg3, a1); }
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> struct sub_function_struct; template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> inline Result sub( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return sub_function_struct<Policy1, Policy2, Policy3, To, From1, From2> ::function(arg1, arg2, arg3, a1); }
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> struct mul_function_struct; template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> inline Result mul( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return mul_function_struct<Policy1, Policy2, Policy3, To, From1, From2> ::function(arg1, arg2, arg3, a1); }
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> struct div_function_struct; template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> inline Result div( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return div_function_struct<Policy1, Policy2, Policy3, To, From1, From2> ::function(arg1, arg2, arg3, a1); }
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> struct rem_function_struct; template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> inline Result rem( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return rem_function_struct<Policy1, Policy2, Policy3, To, From1, From2> ::function(arg1, arg2, arg3, a1); }
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> struct idiv_function_struct; template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> inline Result idiv( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return idiv_function_struct<Policy1, Policy2, Policy3, To, From1, From2> ::function(arg1, arg2, arg3, a1); }
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename To, typename From> struct add_2exp_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result add_2exp( To& arg1, const From& arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1, a2); }
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename To, typename From> struct sub_2exp_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result sub_2exp( To& arg1, const From& arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1, a2); }
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename To, typename From> struct mul_2exp_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result mul_2exp( To& arg1, const From& arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1, a2); }
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename To, typename From> struct div_2exp_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result div_2exp( To& arg1, const From& arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1, a2); }
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename To, typename From> struct smod_2exp_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result smod_2exp( To& arg1, const From& arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1, a2); }
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename To, typename From> struct umod_2exp_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result umod_2exp( To& arg1, const From& arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1, a2); }
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> struct add_mul_function_struct; template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> inline Result add_mul( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return add_mul_function_struct<Policy1, Policy2, Policy3, To, From1, From2> ::function(arg1, arg2, arg3, a1); }
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> struct sub_mul_function_struct; template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> inline Result sub_mul( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return sub_mul_function_struct<Policy1, Policy2, Policy3, To, From1, From2> ::function(arg1, arg2, arg3, a1); }
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> struct gcd_function_struct; template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> inline Result gcd( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return gcd_function_struct<Policy1, Policy2, Policy3, To, From1, From2> ::function(arg1, arg2, arg3, a1); }
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4,typename Policy5, typename To1, typename To2, typename To3, typename From1, typename From2> struct gcdext_function_struct; template <typename Policy1, typename Policy2, typename Policy3, typename Policy4,typename Policy5, typename To1, typename To2, typename To3, typename From1, typename From2> inline Result gcdext( To1& arg1, To2& arg2, To3& arg3, const From1& arg4, const From2& arg5, Rounding_Dir a1) { return gcdext_function_struct<Policy1, Policy2, Policy3, Policy4, Policy5, To1, To2, To3, From1, From2> ::function(arg1, arg2, arg3, arg4, arg5, a1); }
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> struct lcm_function_struct; template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> inline Result lcm( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return lcm_function_struct<Policy1, Policy2, Policy3, To, From1, From2> ::function(arg1, arg2, arg3, a1); }
-40039: 
-40039: 
-40039: template <typename Policy, typename Type> struct input_function_struct; template <typename Policy, typename Type> inline Result input( Type& arg, std::istream& a1, Rounding_Dir a2) { return input_function_struct<Policy, Type>::function(arg, a1, a2); }
-40039: 
-40039: template <typename Policy, typename Type> struct output_function_struct; template <typename Policy, typename Type> inline Result output(std::ostream& b1, const Type& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_function_struct<Policy, Type>::function(b1, arg, a1, a2); }
-40039: # 577 "../../src/checked_defs.hh"
-40039: template <typename Policy, typename To>
-40039: Result round(To& to, Result r, Rounding_Dir dir);
-40039: 
-40039: Result input_mpq(mpq_class& to, std::istream& is);
-40039: 
-40039: std::string float_mpq_to_string(mpq_class& q);
-40039: 
-40039: }
-40039: 
-40039: struct Minus_Infinity {
-40039:   static const Result_Class vclass = VC_MINUS_INFINITY;
-40039: };
-40039: struct Plus_Infinity {
-40039:   static const Result_Class vclass = VC_PLUS_INFINITY;
-40039: };
-40039: struct Not_A_Number {
-40039:   static const Result_Class vclass = VC_NAN;
-40039: };
-40039: 
-40039: template <typename T>
-40039: struct Is_Special : public False { };
-40039: 
-40039: template <>
-40039: struct Is_Special<Minus_Infinity> : public True {};
-40039: 
-40039: template <>
-40039: struct Is_Special<Plus_Infinity> : public True {};
-40039: 
-40039: template <>
-40039: struct Is_Special<Not_A_Number> : public True {};
-40039: 
-40039: extern Minus_Infinity MINUS_INFINITY;
-40039: extern Plus_Infinity PLUS_INFINITY;
-40039: extern Not_A_Number NOT_A_NUMBER;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: struct Checked_Number_Transparent_Policy {
-40039: 
-40039:   enum const_bool_value_check_overflow { check_overflow = (false) };
-40039: 
-40039: 
-40039:   enum const_bool_value_check_inf_add_inf { check_inf_add_inf = (false) };
-40039: 
-40039: 
-40039:   enum const_bool_value_check_inf_sub_inf { check_inf_sub_inf = (false) };
-40039: 
-40039: 
-40039:   enum const_bool_value_check_inf_mul_zero { check_inf_mul_zero = (false) };
-40039: 
-40039: 
-40039:   enum const_bool_value_check_div_zero { check_div_zero = (false) };
-40039: 
-40039: 
-40039:   enum const_bool_value_check_inf_div_inf { check_inf_div_inf = (false) };
-40039: 
-40039: 
-40039:   enum const_bool_value_check_inf_mod { check_inf_mod = (false) };
-40039: 
-40039: 
-40039:   enum const_bool_value_check_sqrt_neg { check_sqrt_neg = (false) };
-40039: 
-40039: 
-40039:   enum const_bool_value_has_nan { has_nan = (std::numeric_limits<T>::has_quiet_NaN) };
-40039: 
-40039: 
-40039:   enum const_bool_value_has_infinity { has_infinity = (std::numeric_limits<T>::has_infinity) };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   enum const_bool_value_convertible { convertible = (true) };
-40039: 
-40039: 
-40039:   enum const_bool_value_fpu_check_inexact { fpu_check_inexact = (false) };
-40039: 
-40039: 
-40039:   enum const_bool_value_fpu_check_nan_result { fpu_check_nan_result = (false) };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Rounding_Dir ROUND_DEFAULT_CONSTRUCTOR = ROUND_NATIVE;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Rounding_Dir ROUND_DEFAULT_OPERATOR = ROUND_NATIVE;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Rounding_Dir ROUND_DEFAULT_INPUT = ROUND_NATIVE;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Rounding_Dir ROUND_DEFAULT_OUTPUT = ROUND_NATIVE;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Rounding_Dir ROUND_DEFAULT_FUNCTION = ROUND_NATIVE;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static void handle_result(Result r);
-40039: };
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: # 1 "../../src/checked_inlines.hh" 1
-40039: # 41 "../../src/checked_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Checked {
-40039: 
-40039: template <typename T1, typename T2>
-40039: struct Safe_Conversion : public False {
-40039: };
-40039: template <typename T>
-40039: struct Safe_Conversion<T, T> : public True {
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<signed short, char> : public True { };
-40039: 
-40039: template <> struct Safe_Conversion<signed short, signed char> : public True { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<signed short, unsigned char> : public True { };
-40039: 
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<signed int, char> : public True { };
-40039: 
-40039: template <> struct Safe_Conversion<signed int, signed char> : public True { };
-40039: template <> struct Safe_Conversion<signed int, signed short> : public True { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<signed int, unsigned char> : public True { };
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<signed int, unsigned short> : public True { };
-40039: 
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<signed long, char> : public True { };
-40039: 
-40039: template <> struct Safe_Conversion<signed long, signed char> : public True { };
-40039: template <> struct Safe_Conversion<signed long, signed short> : public True { };
-40039: template <> struct Safe_Conversion<signed long, signed int> : public True { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<signed long, unsigned char> : public True { };
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<signed long, unsigned short> : public True { };
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<signed long, unsigned int> : public True { };
-40039: 
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<signed long long, char> : public True { };
-40039: 
-40039: template <> struct Safe_Conversion<signed long long, signed char> : public True { };
-40039: template <> struct Safe_Conversion<signed long long, signed short> : public True { };
-40039: template <> struct Safe_Conversion<signed long long, signed int> : public True { };
-40039: template <> struct Safe_Conversion<signed long long, signed long> : public True { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<signed long long, unsigned char> : public True { };
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<signed long long, unsigned short> : public True { };
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<signed long long, unsigned int> : public True { };
-40039: # 127 "../../src/checked_inlines.hh"
-40039: template <> struct Safe_Conversion<unsigned short, unsigned char> : public True { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<unsigned int, unsigned char> : public True { };
-40039: template <> struct Safe_Conversion<unsigned int, unsigned short> : public True { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<unsigned long, unsigned char> : public True { };
-40039: template <> struct Safe_Conversion<unsigned long, unsigned short> : public True { };
-40039: template <> struct Safe_Conversion<unsigned long, unsigned int> : public True { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<unsigned long long, unsigned char> : public True { };
-40039: template <> struct Safe_Conversion<unsigned long long, unsigned short> : public True { };
-40039: template <> struct Safe_Conversion<unsigned long long, unsigned int> : public True { };
-40039: template <> struct Safe_Conversion<unsigned long long, unsigned long> : public True { };
-40039: 
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<float, char> : public True { };
-40039: template <> struct Safe_Conversion<float, signed char> : public True { };
-40039: template <> struct Safe_Conversion<float, unsigned char> : public True { };
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<float, signed short> : public True { };
-40039: template <> struct Safe_Conversion<float, unsigned short> : public True { };
-40039: # 174 "../../src/checked_inlines.hh"
-40039: template <> struct Safe_Conversion<double, char> : public True { };
-40039: template <> struct Safe_Conversion<double, signed char> : public True { };
-40039: template <> struct Safe_Conversion<double, unsigned char> : public True { };
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<double, signed short> : public True { };
-40039: template <> struct Safe_Conversion<double, unsigned short> : public True { };
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<double, signed int> : public True { };
-40039: template <> struct Safe_Conversion<double, unsigned int> : public True { };
-40039: # 194 "../../src/checked_inlines.hh"
-40039: template <> struct Safe_Conversion<double, float> : public True { };
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<long double, char> : public True { };
-40039: template <> struct Safe_Conversion<long double, signed char> : public True { };
-40039: template <> struct Safe_Conversion<long double, unsigned char> : public True { };
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<long double, signed short> : public True { };
-40039: template <> struct Safe_Conversion<long double, unsigned short> : public True { };
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<long double, signed int> : public True { };
-40039: template <> struct Safe_Conversion<long double, unsigned int> : public True { };
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<long double, signed long> : public True { };
-40039: template <> struct Safe_Conversion<long double, unsigned long> : public True { };
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<long double, signed long long> : public True { };
-40039: template <> struct Safe_Conversion<long double, unsigned long long> : public True { };
-40039: 
-40039: template <> struct Safe_Conversion<long double, float> : public True { };
-40039: template <> struct Safe_Conversion<long double, double> : public True { };
-40039: 
-40039: template <> struct Safe_Conversion<mpz_class, char> : public True { };
-40039: template <> struct Safe_Conversion<mpz_class, signed char> : public True { };
-40039: template <> struct Safe_Conversion<mpz_class, signed short> : public True { };
-40039: template <> struct Safe_Conversion<mpz_class, signed int> : public True { };
-40039: template <> struct Safe_Conversion<mpz_class, signed long> : public True { };
-40039: 
-40039: template <> struct Safe_Conversion<mpz_class, unsigned char> : public True { };
-40039: template <> struct Safe_Conversion<mpz_class, unsigned short> : public True { };
-40039: template <> struct Safe_Conversion<mpz_class, unsigned int> : public True { };
-40039: template <> struct Safe_Conversion<mpz_class, unsigned long> : public True { };
-40039: 
-40039: 
-40039: template <> struct Safe_Conversion<mpq_class, char> : public True { };
-40039: template <> struct Safe_Conversion<mpq_class, signed char> : public True { };
-40039: template <> struct Safe_Conversion<mpq_class, signed short> : public True { };
-40039: template <> struct Safe_Conversion<mpq_class, signed int> : public True { };
-40039: template <> struct Safe_Conversion<mpq_class, signed long> : public True { };
-40039: 
-40039: template <> struct Safe_Conversion<mpq_class, unsigned char> : public True { };
-40039: template <> struct Safe_Conversion<mpq_class, unsigned short> : public True { };
-40039: template <> struct Safe_Conversion<mpq_class, unsigned int> : public True { };
-40039: template <> struct Safe_Conversion<mpq_class, unsigned long> : public True { };
-40039: 
-40039: template <> struct Safe_Conversion<mpq_class, float> : public True { };
-40039: template <> struct Safe_Conversion<mpq_class, double> : public True { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy, typename Type>
-40039: struct construct_function_struct<Policy, Policy, Type, Type> {
-40039:   static inline Result function(Type& to, const Type& from, Rounding_Dir) {
-40039:     new(&to) Type(from);
-40039:     return V_EQ;
-40039:   }
-40039: };
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename To, typename From>
-40039: struct construct_function_struct {
-40039:   static inline Result function(To& to, const From& from, Rounding_Dir dir) {
-40039:     new(&to) To();
-40039:     return assign<To_Policy, From_Policy>(to, from, dir);
-40039:   }
-40039: };
-40039: 
-40039: template <typename To_Policy, typename To>
-40039: struct construct_special_function_struct {
-40039:   static inline Result function(To& to, Result_Class r, Rounding_Dir dir) {
-40039:     new(&to) To();
-40039:     return assign_special<To_Policy>(to, r, dir);
-40039:   }
-40039: };
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename To, typename From>
-40039: inline Result
-40039: assign_exact(To& to, const From& from, Rounding_Dir) {
-40039:   to = from;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline typename Enable_If<Is_Same<To_Policy, From_Policy>::value, void>::type
-40039: copy_generic(Type& to, const Type& from) {
-40039:   to = from;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename To, typename From>
-40039: inline Result
-40039: abs_generic(To& to, const From& from, Rounding_Dir dir) {
-40039:   if (from < 0) {
-40039:     return neg<To_Policy, From_Policy>(to, from, dir);
-40039:   }
-40039:   else {
-40039:     return assign<To_Policy, From_Policy>(to, from, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename To, typename From>
-40039: inline void
-40039: gcd_exact_no_abs(To& to, const From& x, const From& y) {
-40039:   To w_x = x;
-40039:   To w_y = y;
-40039:   To remainder;
-40039:   while (w_y != 0) {
-40039: 
-40039: 
-40039: 
-40039:     rem<To_Policy, From1_Policy, From2_Policy>(remainder, w_x, w_y,
-40039:                                                ROUND_NOT_NEEDED);
-40039:     w_x = w_y;
-40039:     w_y = remainder;
-40039:   }
-40039:   to = w_x;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename To, typename From1, typename From2>
-40039: inline Result
-40039: gcd_exact(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
-40039:   gcd_exact_no_abs<To_Policy, From1_Policy, From2_Policy>(to, x, y);
-40039:   return abs<To_Policy, To_Policy>(to, to, dir);
-40039: }
-40039: 
-40039: template <typename To1_Policy, typename To2_Policy, typename To3_Policy,
-40039:           typename From1_Policy, typename From2_Policy,
-40039:           typename To1, typename To2, typename To3,
-40039:           typename From1, typename From2>
-40039: inline Result
-40039: gcdext_exact(To1& to, To2& s, To3& t, const From1& x, const From2& y,
-40039:              Rounding_Dir dir) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (y == 0) {
-40039:     if (x == 0) {
-40039:       s = 0;
-40039:       t = 1;
-40039:       return V_EQ;
-40039:     }
-40039:     else {
-40039:       if (x < 0) {
-40039:         s = -1;
-40039:       }
-40039:       else {
-40039:         s = 1;
-40039:       }
-40039:       t = 0;
-40039:       return abs<To1_Policy, From1_Policy>(to, x, dir);
-40039:     }
-40039:   }
-40039: 
-40039:   s = 1;
-40039:   t = 0;
-40039:   bool negative_x = x < 0;
-40039:   bool negative_y = y < 0;
-40039: 
-40039:   Result r;
-40039:   r = abs<To1_Policy, From1_Policy>(to, x, dir);
-40039:   if (r != V_EQ) {
-40039:     return r;
-40039:   }
-40039: 
-40039:   From2 a_y;
-40039:   r = abs<To1_Policy, From2_Policy>(a_y, y, dir);
-40039:   if (r != V_EQ) {
-40039:     return r;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (to == a_y) {
-40039:     goto sign_check;
-40039:   }
-40039: 
-40039: 
-40039:   {
-40039:     To2 v1 = 0;
-40039:     To3 v2 = 1;
-40039:     To1 v3 = static_cast<To1>(a_y);
-40039:     while (true) {
-40039:       To1 q = to / v3;
-40039: 
-40039:       To1 t3 = to - q*v3;
-40039:       To2 t1 = s - static_cast<To2>(q)*v1;
-40039:       To3 t2 = t - static_cast<To3>(q)*v2;
-40039:       s = v1;
-40039:       t = v2;
-40039:       to = v3;
-40039:       if (t3 == 0) {
-40039:         break;
-40039:       }
-40039:       v1 = t1;
-40039:       v2 = t2;
-40039:       v3 = t3;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:  sign_check:
-40039: 
-40039:   if (negative_x) {
-40039:     r = neg<To2_Policy, To2_Policy>(s, s, dir);
-40039:     if (r != V_EQ) {
-40039:       return r;
-40039:     }
-40039:   }
-40039:   if (negative_y) {
-40039:     return neg<To3_Policy, To3_Policy>(t, t, dir);
-40039:   }
-40039:   return V_EQ;
-40039: 
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename To, typename From1, typename From2>
-40039: inline Result
-40039: lcm_gcd_exact(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
-40039:   if (x == 0 || y == 0) {
-40039:     to = 0;
-40039:     return V_EQ;
-40039:   }
-40039:   To a_x;
-40039:   To a_y;
-40039:   Result r;
-40039:   r = abs<From1_Policy, From1_Policy>(a_x, x, dir);
-40039:   if (r != V_EQ) {
-40039:     return r;
-40039:   }
-40039:   r = abs<From2_Policy, From2_Policy>(a_y, y, dir);
-40039:   if (r != V_EQ) {
-40039:     return r;
-40039:   }
-40039:   To gcd;
-40039:   gcd_exact_no_abs<To_Policy, From1_Policy, From2_Policy>(gcd, a_x, a_y);
-40039: 
-40039: 
-40039: 
-40039:   div<To_Policy, From1_Policy, To_Policy>(to, a_x, gcd, ROUND_NOT_NEEDED);
-40039:   return mul<To_Policy, To_Policy, From2_Policy>(to, to, a_y, dir);
-40039: }
-40039: 
-40039: template <typename Policy, typename Type>
-40039: inline Result_Relation
-40039: sgn_generic(const Type& x) {
-40039:   if (x > 0) {
-40039:     return VR_GT;
-40039:   }
-40039:   if (x == 0) {
-40039:     return VR_EQ;
-40039:   }
-40039:   return VR_LT;
-40039: }
-40039: 
-40039: template <typename T1, typename T2, typename Enable = void>
-40039: struct Safe_Int_Comparison : public False {
-40039: };
-40039: 
-40039: template <typename T1, typename T2>
-40039: struct Safe_Int_Comparison<T1, T2, typename Enable_If<(C_Integer<T1>::value && C_Integer<T2>::value)>::type>
-40039:   : public Bool<(C_Integer<T1>::is_signed
-40039:                  ? (C_Integer<T2>::is_signed
-40039:                     || sizeof(T2) < sizeof(T1)
-40039:                     || sizeof(T2) < sizeof(int))
-40039:                  : (!C_Integer<T2>::is_signed
-40039:                     || sizeof(T1) < sizeof(T2)
-40039:                     || sizeof(T1) < sizeof(int)))> {
-40039: };
-40039: 
-40039: 
-40039: template <typename T1, typename T2>
-40039: inline typename Enable_If<(Safe_Int_Comparison<T1, T2>::value
-40039:                            || Safe_Conversion<T1, T2>::value
-40039:                            || Safe_Conversion<T2, T1>::value), bool>::type
-40039: lt(const T1& x, const T2& y) {
-40039:   return x < y;
-40039: }
-40039: template <typename T1, typename T2>
-40039: inline typename Enable_If<(Safe_Int_Comparison<T1, T2>::value
-40039:                            || Safe_Conversion<T1, T2>::value
-40039:                            || Safe_Conversion<T2, T1>::value), bool>::type
-40039: le(const T1& x, const T2& y) {
-40039:   return x <= y;
-40039: }
-40039: template <typename T1, typename T2>
-40039: inline typename Enable_If<(Safe_Int_Comparison<T1, T2>::value
-40039:                            || Safe_Conversion<T1, T2>::value
-40039:                            || Safe_Conversion<T2, T1>::value), bool>::type
-40039: eq(const T1& x, const T2& y) {
-40039:   return x == y;
-40039: }
-40039: 
-40039: template <typename S, typename U>
-40039: inline typename Enable_If<(!Safe_Int_Comparison<S, U>::value
-40039:                            && C_Integer<U>::value
-40039:                            && C_Integer<S>::is_signed), bool>::type
-40039: lt(const S& x, const U& y) {
-40039:   return x < 0 || static_cast<typename C_Integer<S>::other_type>(x) < y;
-40039: }
-40039: 
-40039: template <typename U, typename S>
-40039: inline typename Enable_If<(!Safe_Int_Comparison<S, U>::value
-40039:                            && C_Integer<U>::value
-40039:                            && C_Integer<S>::is_signed), bool>::type
-40039: lt(const U& x, const S& y) {
-40039:   return y >= 0 && x < static_cast<typename C_Integer<S>::other_type>(y);
-40039: }
-40039: 
-40039: template <typename S, typename U>
-40039: inline typename Enable_If<(!Safe_Int_Comparison<S, U>::value
-40039:                            && C_Integer<U>::value
-40039:                            && C_Integer<S>::is_signed), bool>::type
-40039: le(const S& x, const U& y) {
-40039:   return x < 0 || static_cast<typename C_Integer<S>::other_type>(x) <= y;
-40039: }
-40039: 
-40039: template <typename U, typename S>
-40039: inline typename Enable_If<(!Safe_Int_Comparison<S, U>::value
-40039:                            && C_Integer<U>::value
-40039:                            && C_Integer<S>::is_signed), bool>::type
-40039: le(const U& x, const S& y) {
-40039:   return y >= 0 && x <= static_cast<typename C_Integer<S>::other_type>(y);
-40039: }
-40039: 
-40039: template <typename S, typename U>
-40039: inline typename Enable_If<(!Safe_Int_Comparison<S, U>::value
-40039:                            && C_Integer<U>::value
-40039:                            && C_Integer<S>::is_signed), bool>::type
-40039: eq(const S& x, const U& y) {
-40039:   return x >= 0 && static_cast<typename C_Integer<S>::other_type>(x) == y;
-40039: }
-40039: 
-40039: template <typename U, typename S>
-40039: inline typename Enable_If<(!Safe_Int_Comparison<S, U>::value
-40039:                            && C_Integer<U>::value
-40039:                            && C_Integer<S>::is_signed), bool>::type
-40039: eq(const U& x, const S& y) {
-40039:   return y >= 0 && x == static_cast<typename C_Integer<S>::other_type>(y);
-40039: }
-40039: 
-40039: template <typename T1, typename T2>
-40039: inline typename Enable_If<(!Safe_Conversion<T1, T2>::value
-40039:                            && !Safe_Conversion<T2, T1>::value
-40039:                            && (!C_Integer<T1>::value || !C_Integer<T2>::value)), bool>::type
-40039: eq(const T1& x, const T2& y) {
-40039:   Parma_Polyhedra_Library::Dirty_Temp<T1> holder_tmp; T1& tmp = holder_tmp.item();
-40039:   Result r = assign_r(tmp, y, ROUND_CHECK);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   return r == V_EQ && x == tmp;
-40039: }
-40039: 
-40039: template <typename T1, typename T2>
-40039: inline typename Enable_If<(!Safe_Conversion<T1, T2>::value
-40039:                            && !Safe_Conversion<T2, T1>::value
-40039:                            && (!C_Integer<T1>::value || !C_Integer<T2>::value)), bool>::type
-40039: lt(const T1& x, const T2& y) {
-40039:   Parma_Polyhedra_Library::Dirty_Temp<T1> holder_tmp; T1& tmp = holder_tmp.item();
-40039:   Result r = assign_r(tmp, y, ROUND_UP);
-40039:   if (!result_representable(r)) {
-40039:     return true;
-40039:   }
-40039:   switch (result_relation(r)) {
-40039:   case VR_EQ:
-40039:   case VR_LT:
-40039:   case VR_LE:
-40039:     return x < tmp;
-40039:   default:
-40039:     return false;
-40039:   }
-40039: }
-40039: 
-40039: template <typename T1, typename T2>
-40039: inline typename
-40039: Enable_If<(!Safe_Conversion<T1, T2>::value
-40039:            && !Safe_Conversion<T2, T1>::value
-40039:            && (!C_Integer<T1>::value || !C_Integer<T2>::value)), bool>::type
-40039: le(const T1& x, const T2& y) {
-40039:   Parma_Polyhedra_Library::Dirty_Temp<T1> holder_tmp; T1& tmp = holder_tmp.item();
-40039:   Result r = assign_r(tmp, y, (ROUND_UP | ROUND_STRICT_RELATION));
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   if (!result_representable(r)) {
-40039:     return true;
-40039:   }
-40039:   switch (result_relation(r)) {
-40039:   case VR_EQ:
-40039:     return x <= tmp;
-40039:   case VR_LT:
-40039:     return x < tmp;
-40039:   case VR_LE:
-40039:   case VR_GE:
-40039:   case VR_LGE:
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return false;
-40039:   default:
-40039:     return false;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2,
-40039:           typename Type1, typename Type2>
-40039: inline bool
-40039: lt_p(const Type1& x, const Type2& y) {
-40039:   return lt(x, y);
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2,
-40039:           typename Type1, typename Type2>
-40039: inline bool
-40039: le_p(const Type1& x, const Type2& y) {
-40039:   return le(x, y);
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2,
-40039:           typename Type1, typename Type2>
-40039: inline bool
-40039: eq_p(const Type1& x, const Type2& y) {
-40039:   return eq(x, y);
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2,
-40039:           typename Type1, typename Type2>
-40039: inline Result_Relation
-40039: cmp_generic(const Type1& x, const Type2& y) {
-40039:   if (lt(y, x)) {
-40039:     return VR_GT;
-40039:   }
-40039:   if (lt(x, y)) {
-40039:     return VR_LT;
-40039:   }
-40039:   return VR_EQ;
-40039: }
-40039: 
-40039: template <typename Policy, typename Type>
-40039: inline Result
-40039: assign_nan(Type& to, Result r) {
-40039:   assign_special<Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   return r;
-40039: }
-40039: 
-40039: template <typename Policy, typename Type>
-40039: inline Result
-40039: input_generic(Type& to, std::istream& is, Rounding_Dir dir) {
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
-40039:   Result r = input_mpq(q, is);
-40039:   Result_Class c = result_class(r);
-40039:   switch (c) {
-40039:   case VC_MINUS_INFINITY:
-40039:   case VC_PLUS_INFINITY:
-40039:     return assign_special<Policy>(to, c, dir);
-40039:   case VC_NAN:
-40039:     return assign_nan<Policy>(to, r);
-40039:   default:
-40039:     break;
-40039:   }
-40039:   ((void) 0);
-40039:   return assign<Policy, void>(to, q, dir);
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 701 "../../src/checked_defs.hh" 2
-40039: # 1 "../../src/checked_int_inlines.hh" 1
-40039: # 28 "../../src/checked_int_inlines.hh"
-40039: # 1 "/usr/include/c++/8/cerrno" 1 3
-40039: # 39 "/usr/include/c++/8/cerrno" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/cerrno" 3
-40039: # 29 "../../src/checked_int_inlines.hh" 2
-40039: # 1 "/usr/include/c++/8/cstdlib" 1 3
-40039: # 39 "/usr/include/c++/8/cstdlib" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/cstdlib" 3
-40039: # 30 "../../src/checked_int_inlines.hh" 2
-40039: # 1 "/usr/include/c++/8/climits" 1 3
-40039: # 39 "/usr/include/c++/8/climits" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/climits" 3
-40039: 
-40039: 
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 1 3 4
-40039: # 43 "/usr/include/c++/8/climits" 2 3
-40039: # 31 "../../src/checked_int_inlines.hh" 2
-40039: # 43 "../../src/checked_int_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Checked {
-40039: # 71 "../../src/checked_int_inlines.hh"
-40039: template <typename Policy, typename Type>
-40039: struct Extended_Int {
-40039:   static const Type plus_infinity = C_Integer<Type>::max;
-40039:   static const Type minus_infinity = ((C_Integer<Type>::min >= 0)
-40039:                                       ? (C_Integer<Type>::max - 1)
-40039:                                       : C_Integer<Type>::min);
-40039:   static const Type not_a_number
-40039:   = ((C_Integer<Type>::min >= 0)
-40039:      ? (C_Integer<Type>::max - 2 * (Policy::has_infinity ? 1 : 0))
-40039:      : (C_Integer<Type>::min + (Policy::has_infinity ? 1 : 0)));
-40039:   static const Type min
-40039:   = (C_Integer<Type>::min
-40039:      + ((C_Integer<Type>::min >= 0)
-40039:         ? 0
-40039:         : ((Policy::has_infinity ? 1 : 0) + (Policy::has_nan ? 1 : 0))));
-40039:   static const Type max
-40039:   = (C_Integer<Type>::max
-40039:      - ((C_Integer<Type>::min >= 0)
-40039:         ? (2 * (Policy::has_infinity ? 1 : 0) + (Policy::has_nan ? 1 : 0))
-40039:         : (Policy::has_infinity ? 1 : 0)));
-40039: };
-40039: 
-40039: template <typename Policy, typename To>
-40039: inline Result
-40039: set_neg_overflow_int(To& to, Rounding_Dir dir) {
-40039:   if (round_up(dir)) {
-40039:     to = Extended_Int<Policy, To>::min;
-40039:     return V_LT_INF;
-40039:   }
-40039:   else {
-40039:     if (Policy::has_infinity) {
-40039:       to = Extended_Int<Policy, To>::minus_infinity;
-40039:       return V_GT_MINUS_INFINITY;
-40039:     }
-40039:     return V_GT_MINUS_INFINITY | V_UNREPRESENTABLE;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Policy, typename To>
-40039: inline Result
-40039: set_pos_overflow_int(To& to, Rounding_Dir dir) {
-40039:   if (round_down(dir)) {
-40039:     to = Extended_Int<Policy, To>::max;
-40039:     return V_GT_SUP;
-40039:   }
-40039:   else {
-40039:     if (Policy::has_infinity) {
-40039:       to = Extended_Int<Policy, To>::plus_infinity;
-40039:       return V_LT_PLUS_INFINITY;
-40039:     }
-40039:     return V_LT_PLUS_INFINITY | V_UNREPRESENTABLE;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Policy, typename To>
-40039: inline Result
-40039: round_lt_int_no_overflow(To& to, Rounding_Dir dir) {
-40039:   if (round_down(dir)) {
-40039:     --to;
-40039:     return V_GT;
-40039:   }
-40039:   return V_LT;
-40039: }
-40039: 
-40039: template <typename Policy, typename To>
-40039: inline Result
-40039: round_gt_int_no_overflow(To& to, Rounding_Dir dir) {
-40039:   if (round_up(dir)) {
-40039:     ++to;
-40039:     return V_LT;
-40039:   }
-40039:   return V_GT;
-40039: }
-40039: 
-40039: template <typename Policy, typename To>
-40039: inline Result
-40039: round_lt_int(To& to, Rounding_Dir dir) {
-40039:   if (round_down(dir)) {
-40039:     if (to == Extended_Int<Policy, To>::min) {
-40039:       if (Policy::has_infinity) {
-40039:         to = Extended_Int<Policy, To>::minus_infinity;
-40039:         return V_GT_MINUS_INFINITY;
-40039:       }
-40039:       return V_GT_MINUS_INFINITY | V_UNREPRESENTABLE;
-40039:     }
-40039:     else {
-40039:       --to;
-40039:       return V_GT;
-40039:     }
-40039:   }
-40039:   return V_LT;
-40039: }
-40039: 
-40039: template <typename Policy, typename To>
-40039: inline Result
-40039: round_gt_int(To& to, Rounding_Dir dir) {
-40039:   if (round_up(dir)) {
-40039:     if (to == Extended_Int<Policy, To>::max) {
-40039:       if (Policy::has_infinity) {
-40039:         to = Extended_Int<Policy, To>::plus_infinity;
-40039:         return V_LT_PLUS_INFINITY;
-40039:       }
-40039:       return V_LT_PLUS_INFINITY | V_UNREPRESENTABLE;
-40039:     }
-40039:     else {
-40039:       ++to;
-40039:       return V_LT;
-40039:     }
-40039:   }
-40039:   return V_GT;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, char, char> { static inline void function( char& arg1, const char &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, signed char, signed char> { static inline void function( signed char& arg1, const signed char &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, signed short, signed short> { static inline void function( signed short& arg1, const signed short &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, signed int, signed int> { static inline void function( signed int& arg1, const signed int &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, signed long, signed long> { static inline void function( signed long& arg1, const signed long &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline void function( signed long long& arg1, const signed long long &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline void function( unsigned char& arg1, const unsigned char &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline void function( unsigned short& arg1, const unsigned short &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline void function( unsigned int& arg1, const unsigned int &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline void function( unsigned long& arg1, const unsigned long &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline void function( unsigned long long& arg1, const unsigned long long &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: 
-40039: template <typename Policy, typename Type>
-40039: inline Result
-40039: classify_int(const Type v, bool nan, bool inf, bool sign) {
-40039:   if (Policy::has_nan
-40039:       && (nan || sign)
-40039:       && v == Extended_Int<Policy, Type>::not_a_number) {
-40039:     return V_NAN;
-40039:   }
-40039:   if (!inf && !sign) {
-40039:     return V_LGE;
-40039:   }
-40039:   if (Policy::has_infinity) {
-40039:     if (v == Extended_Int<Policy, Type>::minus_infinity) {
-40039:       return inf ? V_EQ_MINUS_INFINITY : V_LT;
-40039:     }
-40039:     if (v == Extended_Int<Policy, Type>::plus_infinity) {
-40039:       return inf ? V_EQ_PLUS_INFINITY : V_GT;
-40039:     }
-40039:   }
-40039:   if (sign) {
-40039:     if (v < 0) {
-40039:       return V_LT;
-40039:     }
-40039:     if (v > 0) {
-40039:       return V_GT;
-40039:     }
-40039:     return V_EQ;
-40039:   }
-40039:   return V_LGE;
-40039: }
-40039: 
-40039: template <typename Policy> struct classify_function_struct<Policy, char> { static inline Result function(const char& arg, bool a1, bool a2, bool a3) { return classify_int<Policy>(arg, a1, a2, a3); } };
-40039: template <typename Policy> struct classify_function_struct<Policy, signed char> { static inline Result function(const signed char& arg, bool a1, bool a2, bool a3) { return classify_int<Policy>(arg, a1, a2, a3); } };
-40039: template <typename Policy> struct classify_function_struct<Policy, signed short> { static inline Result function(const signed short& arg, bool a1, bool a2, bool a3) { return classify_int<Policy>(arg, a1, a2, a3); } };
-40039: template <typename Policy> struct classify_function_struct<Policy, signed int> { static inline Result function(const signed int& arg, bool a1, bool a2, bool a3) { return classify_int<Policy>(arg, a1, a2, a3); } };
-40039: template <typename Policy> struct classify_function_struct<Policy, signed long> { static inline Result function(const signed long& arg, bool a1, bool a2, bool a3) { return classify_int<Policy>(arg, a1, a2, a3); } };
-40039: template <typename Policy> struct classify_function_struct<Policy, signed long long> { static inline Result function(const signed long long& arg, bool a1, bool a2, bool a3) { return classify_int<Policy>(arg, a1, a2, a3); } };
-40039: template <typename Policy> struct classify_function_struct<Policy, unsigned char> { static inline Result function(const unsigned char& arg, bool a1, bool a2, bool a3) { return classify_int<Policy>(arg, a1, a2, a3); } };
-40039: template <typename Policy> struct classify_function_struct<Policy, unsigned short> { static inline Result function(const unsigned short& arg, bool a1, bool a2, bool a3) { return classify_int<Policy>(arg, a1, a2, a3); } };
-40039: template <typename Policy> struct classify_function_struct<Policy, unsigned int> { static inline Result function(const unsigned int& arg, bool a1, bool a2, bool a3) { return classify_int<Policy>(arg, a1, a2, a3); } };
-40039: template <typename Policy> struct classify_function_struct<Policy, unsigned long> { static inline Result function(const unsigned long& arg, bool a1, bool a2, bool a3) { return classify_int<Policy>(arg, a1, a2, a3); } };
-40039: template <typename Policy> struct classify_function_struct<Policy, unsigned long long> { static inline Result function(const unsigned long long& arg, bool a1, bool a2, bool a3) { return classify_int<Policy>(arg, a1, a2, a3); } };
-40039: 
-40039: template <typename Policy, typename Type>
-40039: inline bool
-40039: is_nan_int(const Type v) {
-40039:   return Policy::has_nan && v == Extended_Int<Policy, Type>::not_a_number;
-40039: }
-40039: 
-40039: template <typename Policy> struct is_nan_function_struct<Policy, char> { static inline bool function(const char& arg) { return is_nan_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_nan_function_struct<Policy, signed char> { static inline bool function(const signed char& arg) { return is_nan_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_nan_function_struct<Policy, signed short> { static inline bool function(const signed short& arg) { return is_nan_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_nan_function_struct<Policy, signed int> { static inline bool function(const signed int& arg) { return is_nan_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_nan_function_struct<Policy, signed long> { static inline bool function(const signed long& arg) { return is_nan_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_nan_function_struct<Policy, signed long long> { static inline bool function(const signed long long& arg) { return is_nan_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_nan_function_struct<Policy, unsigned char> { static inline bool function(const unsigned char& arg) { return is_nan_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_nan_function_struct<Policy, unsigned short> { static inline bool function(const unsigned short& arg) { return is_nan_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_nan_function_struct<Policy, unsigned int> { static inline bool function(const unsigned int& arg) { return is_nan_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_nan_function_struct<Policy, unsigned long> { static inline bool function(const unsigned long& arg) { return is_nan_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_nan_function_struct<Policy, unsigned long long> { static inline bool function(const unsigned long long& arg) { return is_nan_int<Policy>(arg); } };
-40039: 
-40039: template <typename Policy, typename Type>
-40039: inline bool
-40039: is_minf_int(const Type v) {
-40039:   return Policy::has_infinity
-40039:     && v == Extended_Int<Policy, Type>::minus_infinity;
-40039: }
-40039: 
-40039: template <typename Policy> struct is_minf_function_struct<Policy, char> { static inline bool function(const char& arg) { return is_minf_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_minf_function_struct<Policy, signed char> { static inline bool function(const signed char& arg) { return is_minf_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_minf_function_struct<Policy, signed short> { static inline bool function(const signed short& arg) { return is_minf_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_minf_function_struct<Policy, signed int> { static inline bool function(const signed int& arg) { return is_minf_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_minf_function_struct<Policy, signed long> { static inline bool function(const signed long& arg) { return is_minf_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_minf_function_struct<Policy, signed long long> { static inline bool function(const signed long long& arg) { return is_minf_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_minf_function_struct<Policy, unsigned char> { static inline bool function(const unsigned char& arg) { return is_minf_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_minf_function_struct<Policy, unsigned short> { static inline bool function(const unsigned short& arg) { return is_minf_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_minf_function_struct<Policy, unsigned int> { static inline bool function(const unsigned int& arg) { return is_minf_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_minf_function_struct<Policy, unsigned long> { static inline bool function(const unsigned long& arg) { return is_minf_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_minf_function_struct<Policy, unsigned long long> { static inline bool function(const unsigned long long& arg) { return is_minf_int<Policy>(arg); } };
-40039: 
-40039: template <typename Policy, typename Type>
-40039: inline bool
-40039: is_pinf_int(const Type v) {
-40039:   return Policy::has_infinity
-40039:     && v == Extended_Int<Policy, Type>::plus_infinity;
-40039: }
-40039: 
-40039: template <typename Policy> struct is_pinf_function_struct<Policy, char> { static inline bool function(const char& arg) { return is_pinf_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_pinf_function_struct<Policy, signed char> { static inline bool function(const signed char& arg) { return is_pinf_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_pinf_function_struct<Policy, signed short> { static inline bool function(const signed short& arg) { return is_pinf_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_pinf_function_struct<Policy, signed int> { static inline bool function(const signed int& arg) { return is_pinf_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_pinf_function_struct<Policy, signed long> { static inline bool function(const signed long& arg) { return is_pinf_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_pinf_function_struct<Policy, signed long long> { static inline bool function(const signed long long& arg) { return is_pinf_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_pinf_function_struct<Policy, unsigned char> { static inline bool function(const unsigned char& arg) { return is_pinf_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_pinf_function_struct<Policy, unsigned short> { static inline bool function(const unsigned short& arg) { return is_pinf_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_pinf_function_struct<Policy, unsigned int> { static inline bool function(const unsigned int& arg) { return is_pinf_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_pinf_function_struct<Policy, unsigned long> { static inline bool function(const unsigned long& arg) { return is_pinf_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_pinf_function_struct<Policy, unsigned long long> { static inline bool function(const unsigned long long& arg) { return is_pinf_int<Policy>(arg); } };
-40039: 
-40039: template <typename Policy, typename Type>
-40039: inline bool
-40039: is_int_int(const Type v) {
-40039:   return !is_nan<Policy>(v);
-40039: }
-40039: 
-40039: template <typename Policy> struct is_int_function_struct<Policy, char> { static inline bool function(const char& arg) { return is_int_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_int_function_struct<Policy, signed char> { static inline bool function(const signed char& arg) { return is_int_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_int_function_struct<Policy, signed short> { static inline bool function(const signed short& arg) { return is_int_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_int_function_struct<Policy, signed int> { static inline bool function(const signed int& arg) { return is_int_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_int_function_struct<Policy, signed long> { static inline bool function(const signed long& arg) { return is_int_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_int_function_struct<Policy, signed long long> { static inline bool function(const signed long long& arg) { return is_int_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_int_function_struct<Policy, unsigned char> { static inline bool function(const unsigned char& arg) { return is_int_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_int_function_struct<Policy, unsigned short> { static inline bool function(const unsigned short& arg) { return is_int_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_int_function_struct<Policy, unsigned int> { static inline bool function(const unsigned int& arg) { return is_int_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_int_function_struct<Policy, unsigned long> { static inline bool function(const unsigned long& arg) { return is_int_int<Policy>(arg); } };
-40039: template <typename Policy> struct is_int_function_struct<Policy, unsigned long long> { static inline bool function(const unsigned long long& arg) { return is_int_int<Policy>(arg); } };
-40039: 
-40039: template <typename Policy, typename Type>
-40039: inline Result
-40039: assign_special_int(Type& v, Result_Class c, Rounding_Dir dir) {
-40039:   ((void) 0);
-40039:   switch (c) {
-40039:   case VC_NAN:
-40039:     if (Policy::has_nan) {
-40039:       v = Extended_Int<Policy, Type>::not_a_number;
-40039:       return V_NAN;
-40039:     }
-40039:     return V_NAN | V_UNREPRESENTABLE;
-40039:   case VC_MINUS_INFINITY:
-40039:     if (Policy::has_infinity) {
-40039:       v = Extended_Int<Policy, Type>::minus_infinity;
-40039:       return V_EQ_MINUS_INFINITY;
-40039:     }
-40039:     if (round_up(dir)) {
-40039:       v = Extended_Int<Policy, Type>::min;
-40039:       return V_LT_INF;
-40039:     }
-40039:     return V_EQ_MINUS_INFINITY | V_UNREPRESENTABLE;
-40039:   case VC_PLUS_INFINITY:
-40039:     if (Policy::has_infinity) {
-40039:       v = Extended_Int<Policy, Type>::plus_infinity;
-40039:       return V_EQ_PLUS_INFINITY;
-40039:     }
-40039:     if (round_down(dir)) {
-40039:       v = Extended_Int<Policy, Type>::max;
-40039:       return V_GT_SUP;
-40039:     }
-40039:     return V_EQ_PLUS_INFINITY | V_UNREPRESENTABLE;
-40039:   default:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return V_NAN | V_UNREPRESENTABLE;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Policy> struct assign_special_function_struct<Policy, char> { static inline Result function( char& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct assign_special_function_struct<Policy, signed char> { static inline Result function( signed char& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct assign_special_function_struct<Policy, signed short> { static inline Result function( signed short& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct assign_special_function_struct<Policy, signed int> { static inline Result function( signed int& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct assign_special_function_struct<Policy, signed long> { static inline Result function( signed long& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct assign_special_function_struct<Policy, signed long long> { static inline Result function( signed long long& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct assign_special_function_struct<Policy, unsigned char> { static inline Result function( unsigned char& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct assign_special_function_struct<Policy, unsigned short> { static inline Result function( unsigned short& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct assign_special_function_struct<Policy, unsigned int> { static inline Result function( unsigned int& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct assign_special_function_struct<Policy, unsigned long> { static inline Result function( unsigned long& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct assign_special_function_struct<Policy, unsigned long long> { static inline Result function( unsigned long long& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int<Policy>(arg, a1, a2); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename To, typename From>
-40039: inline Result
-40039: assign_signed_int_signed_int(To& to, const From from, Rounding_Dir dir) {
-40039:   if (sizeof(To) < sizeof(From)
-40039:       || (sizeof(To) == sizeof(From)
-40039:       && (Extended_Int<To_Policy, To>::min > Extended_Int<From_Policy, From>::min
-40039:       || Extended_Int<To_Policy, To>::max < Extended_Int<From_Policy, From>::max))) {
-40039:     if (((To_Policy::check_overflow) ? (((from) < (static_cast<From>(Extended_Int<To_Policy, To>::min)))) : (
-40039: # 368 "../../src/checked_int_inlines.hh" 3 4
-40039:        (static_cast<void> (0))
-40039: # 368 "../../src/checked_int_inlines.hh"
-40039:        , false))
-40039: 
-40039:                                                                                    ) {
-40039:       return set_neg_overflow_int<To_Policy>(to, dir);
-40039:     }
-40039:     if (((To_Policy::check_overflow) ? (((from) > (static_cast<From>(Extended_Int<To_Policy, To>::max)))) : (
-40039: # 373 "../../src/checked_int_inlines.hh" 3 4
-40039:        (static_cast<void> (0))
-40039: # 373 "../../src/checked_int_inlines.hh"
-40039:        , false))
-40039: 
-40039:                                                                                    ) {
-40039:       return set_pos_overflow_int<To_Policy>(to, dir);
-40039:     }
-40039:   }
-40039:   to = static_cast<To>(from);
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename To, typename From>
-40039: inline Result
-40039: assign_signed_int_unsigned_int(To& to, const From from, Rounding_Dir dir) {
-40039:   if (sizeof(To) <= sizeof(From)) {
-40039:     if (((To_Policy::check_overflow) ? (from > static_cast<From>(Extended_Int<To_Policy, To>::max)) : (
-40039: # 387 "../../src/checked_int_inlines.hh" 3 4
-40039:        (static_cast<void> (0))
-40039: # 387 "../../src/checked_int_inlines.hh"
-40039:        , false))
-40039:                                                                            ) {
-40039:       return set_pos_overflow_int<To_Policy>(to, dir);
-40039:     }
-40039:   }
-40039:   to = static_cast<To>(from);
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename To, typename From>
-40039: inline Result
-40039: assign_unsigned_int_signed_int(To& to, const From from, Rounding_Dir dir) {
-40039:   if (((To_Policy::check_overflow) ? (from < 0) : (
-40039: # 399 "../../src/checked_int_inlines.hh" 3 4
-40039:      (static_cast<void> (0))
-40039: # 399 "../../src/checked_int_inlines.hh"
-40039:      , false))) {
-40039:     return set_neg_overflow_int<To_Policy>(to, dir);
-40039:   }
-40039:   if (sizeof(To) < sizeof(From)) {
-40039:     if (((To_Policy::check_overflow) ? (from > static_cast<From>(Extended_Int<To_Policy, To>::max)) : (
-40039: # 403 "../../src/checked_int_inlines.hh" 3 4
-40039:        (static_cast<void> (0))
-40039: # 403 "../../src/checked_int_inlines.hh"
-40039:        , false))
-40039:                                                                            ) {
-40039:       return set_pos_overflow_int<To_Policy>(to, dir);
-40039:     }
-40039:   }
-40039:   to = static_cast<To>(from);
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename To, typename From>
-40039: inline Result
-40039: assign_unsigned_int_unsigned_int(To& to, const From from, Rounding_Dir dir) {
-40039:   if (sizeof(To) < sizeof(From)
-40039:       || (sizeof(To) == sizeof(From)
-40039:       && Extended_Int<To_Policy, To>::max < Extended_Int<From_Policy, From>::max)) {
-40039:     if (((To_Policy::check_overflow) ? (((from) > (static_cast<From>(Extended_Int<To_Policy, To>::max)))) : (
-40039: # 418 "../../src/checked_int_inlines.hh" 3 4
-40039:        (static_cast<void> (0))
-40039: # 418 "../../src/checked_int_inlines.hh"
-40039:        , false))
-40039: 
-40039:                                                                                    ) {
-40039:       return set_pos_overflow_int<To_Policy>(to, dir);
-40039:     }
-40039:   }
-40039:   to = static_cast<To>(from);
-40039:   return V_EQ;
-40039: }
-40039: # 451 "../../src/checked_int_inlines.hh"
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, signed short> { static inline Result function( char& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, char> { static inline Result function( signed short& arg1, const char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, signed int> { static inline Result function( char& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, char> { static inline Result function( signed int& arg1, const char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, signed long> { static inline Result function( char& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, char> { static inline Result function( signed long& arg1, const char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, signed long long> { static inline Result function( char& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, char> { static inline Result function( signed long long& arg1, const char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, signed short> { static inline Result function( signed char& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, signed char> { static inline Result function( signed short& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, signed int> { static inline Result function( signed char& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, signed char> { static inline Result function( signed int& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, signed long> { static inline Result function( signed char& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, signed char> { static inline Result function( signed long& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, signed long long> { static inline Result function( signed char& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, signed char> { static inline Result function( signed long long& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, signed int> { static inline Result function( signed short& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, signed short> { static inline Result function( signed int& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, signed long> { static inline Result function( signed short& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, signed short> { static inline Result function( signed long& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, signed long long> { static inline Result function( signed short& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, signed short> { static inline Result function( signed long long& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, signed long> { static inline Result function( signed int& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, signed int> { static inline Result function( signed long& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, signed long long> { static inline Result function( signed int& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, signed int> { static inline Result function( signed long long& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, signed long long> { static inline Result function( signed long& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, signed long> { static inline Result function( signed long long& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, unsigned short> { static inline Result function( unsigned char& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, unsigned char> { static inline Result function( unsigned short& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, unsigned int> { static inline Result function( unsigned char& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, unsigned char> { static inline Result function( unsigned int& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, unsigned long> { static inline Result function( unsigned char& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, unsigned char> { static inline Result function( unsigned long& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, unsigned long long> { static inline Result function( unsigned char& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, unsigned char> { static inline Result function( unsigned long long& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, unsigned int> { static inline Result function( unsigned short& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, unsigned short> { static inline Result function( unsigned int& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, unsigned long> { static inline Result function( unsigned short& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, unsigned short> { static inline Result function( unsigned long& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, unsigned long long> { static inline Result function( unsigned short& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, unsigned short> { static inline Result function( unsigned long long& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, unsigned long> { static inline Result function( unsigned int& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, unsigned int> { static inline Result function( unsigned long& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, unsigned long long> { static inline Result function( unsigned int& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, unsigned int> { static inline Result function( unsigned long long& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, unsigned long long> { static inline Result function( unsigned long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, unsigned long> { static inline Result function( unsigned long long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, signed short> { static inline Result function( unsigned char& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, unsigned char> { static inline Result function( signed short& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, signed int> { static inline Result function( unsigned char& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, unsigned char> { static inline Result function( signed int& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, signed long> { static inline Result function( unsigned char& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, unsigned char> { static inline Result function( signed long& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, signed long long> { static inline Result function( unsigned char& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, unsigned char> { static inline Result function( signed long long& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, signed int> { static inline Result function( unsigned short& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, unsigned short> { static inline Result function( signed int& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, signed long> { static inline Result function( unsigned short& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, unsigned short> { static inline Result function( signed long& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, signed long long> { static inline Result function( unsigned short& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, unsigned short> { static inline Result function( signed long long& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, signed long> { static inline Result function( unsigned int& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, unsigned int> { static inline Result function( signed long& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, signed long long> { static inline Result function( unsigned int& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, unsigned int> { static inline Result function( signed long long& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, signed long long> { static inline Result function( unsigned long& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, unsigned long> { static inline Result function( signed long long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, unsigned char> { static inline Result function( char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, char> { static inline Result function( unsigned char& arg1, const char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, unsigned short> { static inline Result function( char& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, char> { static inline Result function( unsigned short& arg1, const char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, unsigned int> { static inline Result function( char& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, char> { static inline Result function( unsigned int& arg1, const char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, unsigned long> { static inline Result function( char& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, char> { static inline Result function( unsigned long& arg1, const char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, unsigned long long> { static inline Result function( char& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, char> { static inline Result function( unsigned long long& arg1, const char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, unsigned char> { static inline Result function( signed char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, signed char> { static inline Result function( unsigned char& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, unsigned short> { static inline Result function( signed char& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, signed char> { static inline Result function( unsigned short& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, unsigned int> { static inline Result function( signed char& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, signed char> { static inline Result function( unsigned int& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, unsigned long> { static inline Result function( signed char& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, signed char> { static inline Result function( unsigned long& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, unsigned long long> { static inline Result function( signed char& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, signed char> { static inline Result function( unsigned long long& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, unsigned short> { static inline Result function( signed short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, signed short> { static inline Result function( unsigned short& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, unsigned int> { static inline Result function( signed short& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, signed short> { static inline Result function( unsigned int& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, unsigned long> { static inline Result function( signed short& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, signed short> { static inline Result function( unsigned long& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, unsigned long long> { static inline Result function( signed short& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, signed short> { static inline Result function( unsigned long long& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, unsigned int> { static inline Result function( signed int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, signed int> { static inline Result function( unsigned int& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, unsigned long> { static inline Result function( signed int& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, signed int> { static inline Result function( unsigned long& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, unsigned long long> { static inline Result function( signed int& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, signed int> { static inline Result function( unsigned long long& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, unsigned long> { static inline Result function( signed long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, signed long> { static inline Result function( unsigned long& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, unsigned long long> { static inline Result function( signed long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, signed long> { static inline Result function( unsigned long long& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, unsigned long long> { static inline Result function( signed long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, signed long long> { static inline Result function( unsigned long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename To, typename From>
-40039: inline Result
-40039: assign_int_float(To& to, const From from, Rounding_Dir dir) {
-40039:   if (is_nan<From_Policy>(from)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (is_minf<From_Policy>(from)) {
-40039:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
-40039:   }
-40039:   else if (is_pinf<From_Policy>(from)) {
-40039:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:   }
-40039: # 565 "../../src/checked_int_inlines.hh"
-40039:   if (((To_Policy::check_overflow) ? ((from < Extended_Int<To_Policy, To>::min)) : (
-40039: # 565 "../../src/checked_int_inlines.hh" 3 4
-40039:      (static_cast<void> (0))
-40039: # 565 "../../src/checked_int_inlines.hh"
-40039:      , false))
-40039:                                                        ) {
-40039:     return set_neg_overflow_int<To_Policy>(to, dir);
-40039:   }
-40039:   if (((To_Policy::check_overflow) ? ((from > Extended_Int<To_Policy, To>::max)) : (
-40039: # 569 "../../src/checked_int_inlines.hh" 3 4
-40039:      (static_cast<void> (0))
-40039: # 569 "../../src/checked_int_inlines.hh"
-40039:      , false))
-40039:                                                        ) {
-40039:     return set_pos_overflow_int<To_Policy>(to, dir);
-40039:   }
-40039: 
-40039:   if (round_not_requested(dir)) {
-40039:     to = from;
-40039:     return V_LGE;
-40039:   }
-40039:   From i_from = rint(from);
-40039:   to = i_from;
-40039:   if (from == i_from) {
-40039:     return V_EQ;
-40039:   }
-40039:   if (round_direct(ROUND_UP)) {
-40039:     return round_lt_int<To_Policy>(to, dir);
-40039:   }
-40039:   if (round_direct(ROUND_DOWN)) {
-40039:     return round_gt_int<To_Policy>(to, dir);
-40039:   }
-40039:   if (from < i_from) {
-40039:     return round_lt_int<To_Policy>(to, dir);
-40039:   }
-40039:   ((void) 0);
-40039:   return round_gt_int<To_Policy>(to, dir);
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, float> { static inline Result function( char& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, float> { static inline Result function( signed char& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, float> { static inline Result function( signed short& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, float> { static inline Result function( signed int& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, float> { static inline Result function( signed long& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, float> { static inline Result function( signed long long& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, float> { static inline Result function( unsigned char& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, float> { static inline Result function( unsigned short& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, float> { static inline Result function( unsigned int& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, float> { static inline Result function( unsigned long& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, float> { static inline Result function( unsigned long long& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, double> { static inline Result function( char& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, double> { static inline Result function( signed char& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, double> { static inline Result function( signed short& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, double> { static inline Result function( signed int& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, double> { static inline Result function( signed long& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, double> { static inline Result function( signed long long& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, double> { static inline Result function( unsigned char& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, double> { static inline Result function( unsigned short& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, double> { static inline Result function( unsigned int& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, double> { static inline Result function( unsigned long& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, double> { static inline Result function( unsigned long long& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, long double> { static inline Result function( char& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, long double> { static inline Result function( signed char& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, long double> { static inline Result function( signed short& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, long double> { static inline Result function( signed int& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, long double> { static inline Result function( signed long& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, long double> { static inline Result function( signed long long& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, long double> { static inline Result function( unsigned char& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, long double> { static inline Result function( unsigned short& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, long double> { static inline Result function( unsigned int& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, long double> { static inline Result function( unsigned long& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, long double> { static inline Result function( unsigned long long& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: # 639 "../../src/checked_int_inlines.hh"
-40039: template <typename To_Policy, typename From_Policy, typename To>
-40039: inline Result
-40039: assign_signed_int_mpz(To& to, const mpz_class& from, Rounding_Dir dir) {
-40039:   if (sizeof(To) <= sizeof(signed long)) {
-40039:     if (!To_Policy::check_overflow) {
-40039:       to = from.get_si();
-40039:       return V_EQ;
-40039:     }
-40039:     if (from.fits_slong_p()) {
-40039:       signed long v = from.get_si();
-40039:       if (((v) < ((Extended_Int<To_Policy, To>::min)))) {
-40039:         return set_neg_overflow_int<To_Policy>(to, dir);
-40039:       }
-40039:       if (((v) > ((Extended_Int<To_Policy, To>::max)))) {
-40039:         return set_pos_overflow_int<To_Policy>(to, dir);
-40039:       }
-40039:       to = v;
-40039:       return V_EQ;
-40039:     }
-40039:   }
-40039:   else {
-40039:     mpz_srcptr m = from.get_mpz_t();
-40039:     size_t sz = 
-40039: # 661 "../../src/checked_int_inlines.hh" 3 4
-40039:                __gmpz_size
-40039: # 661 "../../src/checked_int_inlines.hh"
-40039:                        (m);
-40039:     if (sz <= sizeof(To) / sizeof(mp_limb_t)) {
-40039:       if (sz == 0) {
-40039:         to = 0;
-40039:         return V_EQ;
-40039:       }
-40039:       To v;
-40039:       
-40039: # 668 "../../src/checked_int_inlines.hh" 3 4
-40039:      __gmpz_export
-40039: # 668 "../../src/checked_int_inlines.hh"
-40039:                (&v, 0, -1, sizeof(To), 0, 0, m);
-40039:       if (v >= 0) {
-40039:         if (::sgn(from) < 0) {
-40039:           return neg<To_Policy, To_Policy>(to, v, dir);
-40039:         }
-40039:         to = v;
-40039:         return V_EQ;
-40039:       }
-40039:     }
-40039:   }
-40039:   return (::sgn(from) < 0)
-40039:     ? set_neg_overflow_int<To_Policy>(to, dir)
-40039:     : set_pos_overflow_int<To_Policy>(to, dir);
-40039: }
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, mpz_class> { static inline Result function( char& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_signed_int_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, mpz_class> { static inline Result function( signed char& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_signed_int_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, mpz_class> { static inline Result function( signed short& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_signed_int_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, mpz_class> { static inline Result function( signed int& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_signed_int_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, mpz_class> { static inline Result function( signed long& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_signed_int_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, mpz_class> { static inline Result function( signed long long& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_signed_int_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename To>
-40039: inline Result
-40039: assign_unsigned_int_mpz(To& to, const mpz_class& from, Rounding_Dir dir) {
-40039:   if (((To_Policy::check_overflow) ? (::sgn(from) < 0) : (
-40039: # 695 "../../src/checked_int_inlines.hh" 3 4
-40039:      (static_cast<void> (0))
-40039: # 695 "../../src/checked_int_inlines.hh"
-40039:      , false))) {
-40039:     return set_neg_overflow_int<To_Policy>(to, dir);
-40039:   }
-40039:   if (sizeof(To) <= sizeof(unsigned long)) {
-40039:     if (!To_Policy::check_overflow) {
-40039:       to = static_cast<To>(from.get_ui());
-40039:       return V_EQ;
-40039:     }
-40039:     if (from.fits_ulong_p()) {
-40039:       const unsigned long v = from.get_ui();
-40039:       if (((v) > ((Extended_Int<To_Policy, To>::max)))) {
-40039:         return set_pos_overflow_int<To_Policy>(to, dir);
-40039:       }
-40039:       to = static_cast<To>(v);
-40039:       return V_EQ;
-40039:     }
-40039:   }
-40039:   else {
-40039:     const mpz_srcptr m = from.get_mpz_t();
-40039:     const size_t sz = 
-40039: # 714 "../../src/checked_int_inlines.hh" 3 4
-40039:                      __gmpz_size
-40039: # 714 "../../src/checked_int_inlines.hh"
-40039:                              (m);
-40039:     if (sz <= sizeof(To) / sizeof(mp_limb_t)) {
-40039:       if (sz == 0) {
-40039:         to = 0;
-40039:       }
-40039:       else {
-40039:         
-40039: # 720 "../../src/checked_int_inlines.hh" 3 4
-40039:        __gmpz_export
-40039: # 720 "../../src/checked_int_inlines.hh"
-40039:                  (&to, 0, -1, sizeof(To), 0, 0, m);
-40039:       }
-40039:       return V_EQ;
-40039:     }
-40039:   }
-40039:   return set_pos_overflow_int<To_Policy>(to, dir);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, mpz_class> { static inline Result function( unsigned char& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_unsigned_int_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, mpz_class> { static inline Result function( unsigned short& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_unsigned_int_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, mpz_class> { static inline Result function( unsigned int& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_unsigned_int_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, mpz_class> { static inline Result function( unsigned long& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_unsigned_int_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, mpz_class> { static inline Result function( unsigned long long& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_unsigned_int_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename To>
-40039: inline Result
-40039: assign_int_mpq(To& to, const mpq_class& from, Rounding_Dir dir) {
-40039:   mpz_srcptr n = from.get_num().get_mpz_t();
-40039:   mpz_srcptr d = from.get_den().get_mpz_t();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpz_class> holder_q; mpz_class& q = holder_q.item();
-40039:   mpz_ptr q_z = q.get_mpz_t();
-40039:   if (round_not_requested(dir)) {
-40039:     
-40039: # 745 "../../src/checked_int_inlines.hh" 3 4
-40039:    __gmpz_tdiv_q
-40039: # 745 "../../src/checked_int_inlines.hh"
-40039:              (q_z, n, d);
-40039:     Result r = assign<To_Policy, void>(to, q, dir);
-40039:     if (r != V_EQ) {
-40039:       return r;
-40039:     }
-40039:     return V_LGE;
-40039:   }
-40039:   mpz_t rem;
-40039:   int sign;
-40039:   
-40039: # 754 "../../src/checked_int_inlines.hh" 3 4
-40039:  __gmpz_init
-40039: # 754 "../../src/checked_int_inlines.hh"
-40039:          (rem);
-40039:   
-40039: # 755 "../../src/checked_int_inlines.hh" 3 4
-40039:  __gmpz_tdiv_qr
-40039: # 755 "../../src/checked_int_inlines.hh"
-40039:             (q_z, rem, n, d);
-40039:   sign = 
-40039: # 756 "../../src/checked_int_inlines.hh" 3 4
-40039:         ((
-40039: # 756 "../../src/checked_int_inlines.hh"
-40039:         rem
-40039: # 756 "../../src/checked_int_inlines.hh" 3 4
-40039:         )->_mp_size < 0 ? -1 : (
-40039: # 756 "../../src/checked_int_inlines.hh"
-40039:         rem
-40039: # 756 "../../src/checked_int_inlines.hh" 3 4
-40039:         )->_mp_size > 0)
-40039: # 756 "../../src/checked_int_inlines.hh"
-40039:                     ;
-40039:   
-40039: # 757 "../../src/checked_int_inlines.hh" 3 4
-40039:  __gmpz_clear
-40039: # 757 "../../src/checked_int_inlines.hh"
-40039:           (rem);
-40039:   Result r = assign<To_Policy, void>(to, q, dir);
-40039:   if (r != V_EQ) {
-40039:     return r;
-40039:   }
-40039:   switch (sign) {
-40039:   case -1:
-40039:     return round_lt_int<To_Policy>(to, dir);
-40039:   case 1:
-40039:     return round_gt_int<To_Policy>(to, dir);
-40039:   default:
-40039:     return V_EQ;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, mpq_class> { static inline Result function( char& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, mpq_class> { static inline Result function( signed char& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, mpq_class> { static inline Result function( signed short& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, mpq_class> { static inline Result function( signed int& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, mpq_class> { static inline Result function( signed long& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, mpq_class> { static inline Result function( signed long long& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, mpq_class> { static inline Result function( unsigned char& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, mpq_class> { static inline Result function( unsigned short& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, mpq_class> { static inline Result function( unsigned int& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, mpq_class> { static inline Result function( unsigned long& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, mpq_class> { static inline Result function( unsigned long long& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: # 821 "../../src/checked_int_inlines.hh"
-40039: template <typename T>
-40039: struct Larger;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <>
-40039: struct Larger<char> {
-40039:   enum const_bool_value_use_for_neg { use_for_neg = (true) };
-40039:   enum const_bool_value_use_for_add { use_for_add = (true) };
-40039:   enum const_bool_value_use_for_sub { use_for_sub = (true) };
-40039:   enum const_bool_value_use_for_mul { use_for_mul = (true) };
-40039:   typedef int_fast16_t type_for_neg;
-40039:   typedef int_fast16_t type_for_add;
-40039:   typedef int_fast16_t type_for_sub;
-40039:   typedef int_fast16_t type_for_mul;
-40039: };
-40039: 
-40039: template <>
-40039: struct Larger<signed char> {
-40039:   enum const_bool_value_use_for_neg { use_for_neg = (true) };
-40039:   enum const_bool_value_use_for_add { use_for_add = (true) };
-40039:   enum const_bool_value_use_for_sub { use_for_sub = (true) };
-40039:   enum const_bool_value_use_for_mul { use_for_mul = (true) };
-40039:   typedef int_fast16_t type_for_neg;
-40039:   typedef int_fast16_t type_for_add;
-40039:   typedef int_fast16_t type_for_sub;
-40039:   typedef int_fast16_t type_for_mul;
-40039: };
-40039: 
-40039: template <>
-40039: struct Larger<unsigned char> {
-40039:   enum const_bool_value_use_for_neg { use_for_neg = (true) };
-40039:   enum const_bool_value_use_for_add { use_for_add = (true) };
-40039:   enum const_bool_value_use_for_sub { use_for_sub = (true) };
-40039:   enum const_bool_value_use_for_mul { use_for_mul = (true) };
-40039:   typedef int_fast16_t type_for_neg;
-40039:   typedef uint_fast16_t type_for_add;
-40039:   typedef int_fast16_t type_for_sub;
-40039:   typedef uint_fast16_t type_for_mul;
-40039: };
-40039: 
-40039: template <>
-40039: struct Larger<signed short> {
-40039:   enum const_bool_value_use_for_neg { use_for_neg = (true) };
-40039:   enum const_bool_value_use_for_add { use_for_add = (true) };
-40039:   enum const_bool_value_use_for_sub { use_for_sub = (true) };
-40039:   enum const_bool_value_use_for_mul { use_for_mul = (true) };
-40039:   typedef int_fast32_t type_for_neg;
-40039:   typedef int_fast32_t type_for_add;
-40039:   typedef int_fast32_t type_for_sub;
-40039:   typedef int_fast32_t type_for_mul;
-40039: };
-40039: 
-40039: template <>
-40039: struct Larger<unsigned short> {
-40039:   enum const_bool_value_use_for_neg { use_for_neg = (true) };
-40039:   enum const_bool_value_use_for_add { use_for_add = (true) };
-40039:   enum const_bool_value_use_for_sub { use_for_sub = (true) };
-40039:   enum const_bool_value_use_for_mul { use_for_mul = (true) };
-40039:   typedef int_fast32_t type_for_neg;
-40039:   typedef uint_fast32_t type_for_add;
-40039:   typedef int_fast32_t type_for_sub;
-40039:   typedef uint_fast32_t type_for_mul;
-40039: };
-40039: 
-40039: template <>
-40039: struct Larger<signed int> {
-40039:   enum const_bool_value_use_for_neg { use_for_neg = ((64 == 64)) };
-40039:   enum const_bool_value_use_for_add { use_for_add = ((64 == 64)) };
-40039:   enum const_bool_value_use_for_sub { use_for_sub = ((64 == 64)) };
-40039:   enum const_bool_value_use_for_mul { use_for_mul = (true) };
-40039:   typedef int_fast64_t type_for_neg;
-40039:   typedef int_fast64_t type_for_add;
-40039:   typedef int_fast64_t type_for_sub;
-40039:   typedef int_fast64_t type_for_mul;
-40039: };
-40039: 
-40039: template <>
-40039: struct Larger<unsigned int> {
-40039:   enum const_bool_value_use_for_neg { use_for_neg = ((64 == 64)) };
-40039:   enum const_bool_value_use_for_add { use_for_add = ((64 == 64)) };
-40039:   enum const_bool_value_use_for_sub { use_for_sub = ((64 == 64)) };
-40039:   enum const_bool_value_use_for_mul { use_for_mul = (true) };
-40039:   typedef int_fast64_t type_for_neg;
-40039:   typedef uint_fast64_t type_for_add;
-40039:   typedef int_fast64_t type_for_sub;
-40039:   typedef uint_fast64_t type_for_mul;
-40039: };
-40039: 
-40039: template <>
-40039: struct Larger<signed long> {
-40039:   enum const_bool_value_use_for_neg { use_for_neg = (false) };
-40039:   enum const_bool_value_use_for_add { use_for_add = (false) };
-40039:   enum const_bool_value_use_for_sub { use_for_sub = (false) };
-40039:   enum const_bool_value_use_for_mul { use_for_mul = ((64 == 32)) };
-40039:   typedef int_fast64_t type_for_neg;
-40039:   typedef int_fast64_t type_for_add;
-40039:   typedef int_fast64_t type_for_sub;
-40039:   typedef int_fast64_t type_for_mul;
-40039: };
-40039: 
-40039: template <>
-40039: struct Larger<unsigned long> {
-40039:   enum const_bool_value_use_for_neg { use_for_neg = (false) };
-40039:   enum const_bool_value_use_for_add { use_for_add = (false) };
-40039:   enum const_bool_value_use_for_sub { use_for_sub = (false) };
-40039:   enum const_bool_value_use_for_mul { use_for_mul = ((64 == 32)) };
-40039:   typedef int_fast64_t type_for_neg;
-40039:   typedef uint_fast64_t type_for_add;
-40039:   typedef int_fast64_t type_for_sub;
-40039:   typedef uint_fast64_t type_for_mul;
-40039: };
-40039: 
-40039: template <>
-40039: struct Larger<signed long long> {
-40039:   enum const_bool_value_use_for_neg { use_for_neg = (false) };
-40039:   enum const_bool_value_use_for_add { use_for_add = (false) };
-40039:   enum const_bool_value_use_for_sub { use_for_sub = (false) };
-40039:   enum const_bool_value_use_for_mul { use_for_mul = (false) };
-40039:   typedef int_fast64_t type_for_neg;
-40039:   typedef int_fast64_t type_for_add;
-40039:   typedef int_fast64_t type_for_sub;
-40039:   typedef int_fast64_t type_for_mul;
-40039: };
-40039: 
-40039: template <>
-40039: struct Larger<unsigned long long> {
-40039:   enum const_bool_value_use_for_neg { use_for_neg = (false) };
-40039:   enum const_bool_value_use_for_add { use_for_add = (false) };
-40039:   enum const_bool_value_use_for_sub { use_for_sub = (false) };
-40039:   enum const_bool_value_use_for_mul { use_for_mul = (false) };
-40039:   typedef int_fast64_t type_for_neg;
-40039:   typedef uint_fast64_t type_for_add;
-40039:   typedef int_fast64_t type_for_sub;
-40039:   typedef uint_fast64_t type_for_mul;
-40039: };
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: neg_int_larger(Type& to, const Type x, Rounding_Dir dir) {
-40039:   typename Larger<Type>::type_for_neg l = x;
-40039:   l = -l;
-40039:   return assign<To_Policy, To_Policy>(to, l, dir);
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: add_int_larger(Type& to, const Type x, const Type y, Rounding_Dir dir) {
-40039:   typename Larger<Type>::type_for_add l = x;
-40039:   l += y;
-40039:   return assign<To_Policy, To_Policy>(to, l, dir);
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: sub_int_larger(Type& to, const Type x, const Type y, Rounding_Dir dir) {
-40039:   typename Larger<Type>::type_for_sub l = x;
-40039:   l -= y;
-40039:   return assign<To_Policy, To_Policy>(to, l, dir);
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: mul_int_larger(Type& to, const Type x, const Type y, Rounding_Dir dir) {
-40039:   typename Larger<Type>::type_for_mul l = x;
-40039:   l *= y;
-40039:   return assign<To_Policy, To_Policy>(to, l, dir);
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: neg_signed_int(Type& to, const Type from, Rounding_Dir dir) {
-40039:   if (To_Policy::check_overflow && Larger<Type>::use_for_neg) {
-40039:     return neg_int_larger<To_Policy, From_Policy>(to, from, dir);
-40039:   }
-40039:   if (((To_Policy::check_overflow) ? ((from < -Extended_Int<To_Policy, Type>::max)) : (
-40039: # 1003 "../../src/checked_int_inlines.hh" 3 4
-40039:      (static_cast<void> (0))
-40039: # 1003 "../../src/checked_int_inlines.hh"
-40039:      , false))
-40039:                                                            ) {
-40039:     return set_pos_overflow_int<To_Policy>(to, dir);
-40039:   }
-40039:   to = -from;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: neg_unsigned_int(Type& to, const Type from, Rounding_Dir dir) {
-40039:   if (To_Policy::check_overflow && Larger<Type>::use_for_neg) {
-40039:     return neg_int_larger<To_Policy, From_Policy>(to, from, dir);
-40039:   }
-40039:   if (((To_Policy::check_overflow) ? (from != 0) : (
-40039: # 1017 "../../src/checked_int_inlines.hh" 3 4
-40039:      (static_cast<void> (0))
-40039: # 1017 "../../src/checked_int_inlines.hh"
-40039:      , false))) {
-40039:     return set_neg_overflow_int<To_Policy>(to, dir);
-40039:   }
-40039:   to = from;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: add_signed_int(Type& to, const Type x, const Type y, Rounding_Dir dir) {
-40039:   if (To_Policy::check_overflow && Larger<Type>::use_for_add) {
-40039:     return add_int_larger<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
-40039:   }
-40039:   if (To_Policy::check_overflow) {
-40039:     if (y >= 0) {
-40039:       if (x > Extended_Int<To_Policy, Type>::max - y) {
-40039:         return set_pos_overflow_int<To_Policy>(to, dir);
-40039:       }
-40039:     }
-40039:     else if (x < Extended_Int<To_Policy, Type>::min - y) {
-40039:       return set_neg_overflow_int<To_Policy>(to, dir);
-40039:     }
-40039:   }
-40039:   to = x + y;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: add_unsigned_int(Type& to, const Type x, const Type y, Rounding_Dir dir) {
-40039:   if (To_Policy::check_overflow && Larger<Type>::use_for_add) {
-40039:     return add_int_larger<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
-40039:   }
-40039:   if (((To_Policy::check_overflow) ? ((x > Extended_Int<To_Policy, Type>::max - y)) : (
-40039: # 1052 "../../src/checked_int_inlines.hh" 3 4
-40039:      (static_cast<void> (0))
-40039: # 1052 "../../src/checked_int_inlines.hh"
-40039:      , false))
-40039:                                                            ) {
-40039:     return set_pos_overflow_int<To_Policy>(to, dir);
-40039:   }
-40039:   to = x + y;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: sub_signed_int(Type& to, const Type x, const Type y, Rounding_Dir dir) {
-40039:   if (To_Policy::check_overflow && Larger<Type>::use_for_sub) {
-40039:     return sub_int_larger<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
-40039:   }
-40039:   if (To_Policy::check_overflow) {
-40039:     if (y >= 0) {
-40039:       if (x < Extended_Int<To_Policy, Type>::min + y) {
-40039:         return set_neg_overflow_int<To_Policy>(to, dir);
-40039:       }
-40039:     }
-40039:     else if (x > Extended_Int<To_Policy, Type>::max + y) {
-40039:       return set_pos_overflow_int<To_Policy>(to, dir);
-40039:     }
-40039:   }
-40039:   to = x - y;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: sub_unsigned_int(Type& to, const Type x, const Type y, Rounding_Dir dir) {
-40039:   if (To_Policy::check_overflow && Larger<Type>::use_for_sub) {
-40039:     return sub_int_larger<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
-40039:   }
-40039:   if (((To_Policy::check_overflow) ? ((x < Extended_Int<To_Policy, Type>::min + y)) : (
-40039: # 1088 "../../src/checked_int_inlines.hh" 3 4
-40039:      (static_cast<void> (0))
-40039: # 1088 "../../src/checked_int_inlines.hh"
-40039:      , false))
-40039:                                                            ) {
-40039:     return set_neg_overflow_int<To_Policy>(to, dir);
-40039:   }
-40039:   to = x - y;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: mul_signed_int(Type& to, const Type x, const Type y, Rounding_Dir dir) {
-40039:   if (To_Policy::check_overflow && Larger<Type>::use_for_mul) {
-40039:     return mul_int_larger<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
-40039:   }
-40039:   if (!To_Policy::check_overflow) {
-40039:     to = x * y;
-40039:     return V_EQ;
-40039:   }
-40039:   if (y == 0) {
-40039:     to = 0;
-40039:     return V_EQ;
-40039:   }
-40039:   if (y == -1) {
-40039:     return neg_signed_int<To_Policy, From1_Policy>(to, x, dir);
-40039:   }
-40039:   if (x >= 0) {
-40039:     if (y > 0) {
-40039:       if (x > Extended_Int<To_Policy, Type>::max / y) {
-40039:         return set_pos_overflow_int<To_Policy>(to, dir);
-40039:       }
-40039:     }
-40039:     else {
-40039:       if (x > Extended_Int<To_Policy, Type>::min / y) {
-40039:         return set_neg_overflow_int<To_Policy>(to, dir);
-40039:       }
-40039:     }
-40039:   }
-40039:   else {
-40039:     if (y < 0) {
-40039:       if (x < Extended_Int<To_Policy, Type>::max / y) {
-40039:         return set_pos_overflow_int<To_Policy>(to, dir);
-40039:       }
-40039:     }
-40039:     else {
-40039:       if (x < Extended_Int<To_Policy, Type>::min / y) {
-40039:         return set_neg_overflow_int<To_Policy>(to, dir);
-40039:       }
-40039:     }
-40039:   }
-40039:   to = x * y;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: mul_unsigned_int(Type& to, const Type x, const Type y, Rounding_Dir dir) {
-40039:   if (To_Policy::check_overflow && Larger<Type>::use_for_mul) {
-40039:     return mul_int_larger<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
-40039:   }
-40039:   if (!To_Policy::check_overflow) {
-40039:     to = x * y;
-40039:     return V_EQ;
-40039:   }
-40039:   if (y == 0) {
-40039:     to = 0;
-40039:     return V_EQ;
-40039:   }
-40039:   if (x > Extended_Int<To_Policy, Type>::max / y) {
-40039:     return set_pos_overflow_int<To_Policy>(to, dir);
-40039:   }
-40039:   to = x * y;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: div_signed_int(Type& to, const Type x, const Type y, Rounding_Dir dir) {
-40039:   if (((To_Policy::check_div_zero) ? (y == 0) : (
-40039: # 1168 "../../src/checked_int_inlines.hh" 3 4
-40039:      (static_cast<void> (0))
-40039: # 1168 "../../src/checked_int_inlines.hh"
-40039:      , false))) {
-40039:     return assign_nan<To_Policy>(to, V_DIV_ZERO);
-40039:   }
-40039:   if (To_Policy::check_overflow && y == -1) {
-40039:     return neg_signed_int<To_Policy, From1_Policy>(to, x, dir);
-40039:   }
-40039:   to = x / y;
-40039:   if (round_not_requested(dir)) {
-40039:     return V_LGE;
-40039:   }
-40039:   if (y == -1) {
-40039:     return V_EQ;
-40039:   }
-40039:   Type m = x % y;
-40039:   if (m < 0) {
-40039:     return round_lt_int_no_overflow<To_Policy>(to, dir);
-40039:   }
-40039:   else if (m > 0) {
-40039:     return round_gt_int_no_overflow<To_Policy>(to, dir);
-40039:   }
-40039:   else {
-40039:     return V_EQ;
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: div_unsigned_int(Type& to, const Type x, const Type y, Rounding_Dir dir) {
-40039:   if (((To_Policy::check_div_zero) ? (y == 0) : (
-40039: # 1197 "../../src/checked_int_inlines.hh" 3 4
-40039:      (static_cast<void> (0))
-40039: # 1197 "../../src/checked_int_inlines.hh"
-40039:      , false))) {
-40039:     return assign_nan<To_Policy>(to, V_DIV_ZERO);
-40039:   }
-40039:   to = x / y;
-40039:   if (round_not_requested(dir)) {
-40039:     return V_GE;
-40039:   }
-40039:   Type m = x % y;
-40039:   if (m == 0) {
-40039:     return V_EQ;
-40039:   }
-40039:   return round_gt_int<To_Policy>(to, dir);
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: idiv_signed_int(Type& to, const Type x, const Type y, Rounding_Dir dir) {
-40039:   if (((To_Policy::check_div_zero) ? (y == 0) : (
-40039: # 1215 "../../src/checked_int_inlines.hh" 3 4
-40039:      (static_cast<void> (0))
-40039: # 1215 "../../src/checked_int_inlines.hh"
-40039:      , false))) {
-40039:     return assign_nan<To_Policy>(to, V_DIV_ZERO);
-40039:   }
-40039:   if (To_Policy::check_overflow && y == -1) {
-40039:     return neg_signed_int<To_Policy, From1_Policy>(to, x, dir);
-40039:   }
-40039:   to = x / y;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: idiv_unsigned_int(Type& to, const Type x, const Type y, Rounding_Dir) {
-40039:   if (((To_Policy::check_div_zero) ? (y == 0) : (
-40039: # 1229 "../../src/checked_int_inlines.hh" 3 4
-40039:      (static_cast<void> (0))
-40039: # 1229 "../../src/checked_int_inlines.hh"
-40039:      , false))) {
-40039:     return assign_nan<To_Policy>(to, V_DIV_ZERO);
-40039:   }
-40039:   to = x / y;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: rem_signed_int(Type& to, const Type x, const Type y, Rounding_Dir) {
-40039:   if (((To_Policy::check_div_zero) ? (y == 0) : (
-40039: # 1240 "../../src/checked_int_inlines.hh" 3 4
-40039:      (static_cast<void> (0))
-40039: # 1240 "../../src/checked_int_inlines.hh"
-40039:      , false))) {
-40039:     return assign_nan<To_Policy>(to, V_MOD_ZERO);
-40039:   }
-40039:   to = (y == -1) ? 0 : (x % y);
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: rem_unsigned_int(Type& to, const Type x, const Type y, Rounding_Dir) {
-40039:   if (((To_Policy::check_div_zero) ? (y == 0) : (
-40039: # 1251 "../../src/checked_int_inlines.hh" 3 4
-40039:      (static_cast<void> (0))
-40039: # 1251 "../../src/checked_int_inlines.hh"
-40039:      , false))) {
-40039:     return assign_nan<To_Policy>(to, V_MOD_ZERO);
-40039:   }
-40039:   to = x % y;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: div_2exp_unsigned_int(Type& to, const Type x, unsigned int exp,
-40039:                       Rounding_Dir dir) {
-40039:   if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8))) {
-40039:     to = 0;
-40039:     if (round_not_requested(dir)) {
-40039:       return V_GE;
-40039:     }
-40039:     if (x == 0) {
-40039:       return V_EQ;
-40039:     }
-40039:     return round_gt_int_no_overflow<To_Policy>(to, dir);
-40039:   }
-40039:   to = x >> exp;
-40039:   if (round_not_requested(dir)) {
-40039:     return V_GE;
-40039:   }
-40039:   if (x & ((Type(1) << exp) - 1)) {
-40039:     return round_gt_int_no_overflow<To_Policy>(to, dir);
-40039:   }
-40039:   else {
-40039:     return V_EQ;
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: div_2exp_signed_int(Type& to, const Type x, unsigned int exp,
-40039:                     Rounding_Dir dir) {
-40039:   if (x < 0) {
-40039:     if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8))) {
-40039:       to = 0;
-40039:       if (round_not_requested(dir)) {
-40039:         return V_LE;
-40039:       }
-40039:       return round_lt_int_no_overflow<To_Policy>(to, dir);
-40039:     }
-40039:     typedef typename C_Integer<Type>::other_type UType;
-40039:     UType ux = x;
-40039:     ux = -ux;
-40039:     to = ~Type(~-(ux >> exp));
-40039:     if (round_not_requested(dir)) {
-40039:       return V_LE;
-40039:     }
-40039:     if (ux & ((UType(1) << exp) -1)) {
-40039:       return round_lt_int_no_overflow<To_Policy>(to, dir);
-40039:     }
-40039:     return V_EQ;
-40039:   }
-40039:   else {
-40039:     if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8)) - 1) {
-40039:       to = 0;
-40039:       if (round_not_requested(dir)) {
-40039:         return V_GE;
-40039:       }
-40039:       if (x == 0) {
-40039:         return V_EQ;
-40039:       }
-40039:       return round_gt_int_no_overflow<To_Policy>(to, dir);
-40039:     }
-40039:     to = x >> exp;
-40039:     if (round_not_requested(dir)) {
-40039:       return V_GE;
-40039:     }
-40039:     if (x & ((Type(1) << exp) - 1)) {
-40039:       return round_gt_int_no_overflow<To_Policy>(to, dir);
-40039:     }
-40039:     else {
-40039:       return V_EQ;
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: add_2exp_unsigned_int(Type& to, const Type x, unsigned int exp,
-40039:                       Rounding_Dir dir) {
-40039:   if (!To_Policy::check_overflow) {
-40039:     to = x + (Type(1) << exp);
-40039:     return V_EQ;
-40039:   }
-40039:   if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8))) {
-40039:     return set_pos_overflow_int<To_Policy>(to, dir);
-40039:   }
-40039:   Type n = Type(1) << exp;
-40039:   return add_unsigned_int<To_Policy, From_Policy, void>(to, x, n, dir);
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: add_2exp_signed_int(Type& to, const Type x, unsigned int exp,
-40039:                     Rounding_Dir dir) {
-40039:   if (!To_Policy::check_overflow) {
-40039:     to = x + (Type(1) << exp);
-40039:     return V_EQ;
-40039:   }
-40039:   if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8))) {
-40039:     return set_pos_overflow_int<To_Policy>(to, dir);
-40039:   }
-40039:   if (exp == ((sizeof(Type)) * static_cast<std::size_t>(8)) - 1) {
-40039:     Type n = -2 * (Type(1) << (exp - 1));
-40039:     return sub_signed_int<To_Policy, From_Policy, void>(to, x, n, dir);
-40039:   }
-40039:   else {
-40039:     Type n = Type(1) << exp;
-40039:     return add_signed_int<To_Policy, From_Policy, void>(to, x, n, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: sub_2exp_unsigned_int(Type& to, const Type x, unsigned int exp,
-40039:                       Rounding_Dir dir) {
-40039:   if (!To_Policy::check_overflow) {
-40039:     to = x - (Type(1) << exp);
-40039:     return V_EQ;
-40039:   }
-40039:   if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8))) {
-40039:     return set_neg_overflow_int<To_Policy>(to, dir);
-40039:   }
-40039:   Type n = Type(1) << exp;
-40039:   return sub_unsigned_int<To_Policy, From_Policy, void>(to, x, n, dir);
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: sub_2exp_signed_int(Type& to, const Type x, unsigned int exp,
-40039:                     Rounding_Dir dir) {
-40039:   if (!To_Policy::check_overflow) {
-40039:     to = x - (Type(1) << exp);
-40039:     return V_EQ;
-40039:   }
-40039:   if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8))) {
-40039:     return set_neg_overflow_int<To_Policy>(to, dir);
-40039:   }
-40039:   if (exp == ((sizeof(Type)) * static_cast<std::size_t>(8)) - 1) {
-40039:     Type n = -2 * (Type(1) << (exp - 1));
-40039:     return add_signed_int<To_Policy, From_Policy, void>(to, x, n, dir);
-40039:   }
-40039:   else {
-40039:     Type n = Type(1) << exp;
-40039:     return sub_signed_int<To_Policy, From_Policy, void>(to, x, n, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: mul_2exp_unsigned_int(Type& to, const Type x, unsigned int exp,
-40039:                       Rounding_Dir dir) {
-40039:   if (!To_Policy::check_overflow) {
-40039:     to = x << exp;
-40039:     return V_EQ;
-40039:   }
-40039:   if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8))) {
-40039:     if (x == 0) {
-40039:       to = 0;
-40039:       return V_EQ;
-40039:     }
-40039:     return set_pos_overflow_int<To_Policy>(to, dir);
-40039:   }
-40039:   if (x > Extended_Int<To_Policy, Type>::max >> exp) {
-40039:     return set_pos_overflow_int<To_Policy>(to, dir);
-40039:   }
-40039:   to = x << exp;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: mul_2exp_signed_int(Type& to, const Type x, unsigned int exp,
-40039:                     Rounding_Dir dir) {
-40039:   if (x < 0) {
-40039:     if (!To_Policy::check_overflow) {
-40039:       to = x * (Type(1) << exp);
-40039:       return V_EQ;
-40039:     }
-40039:     if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8))) {
-40039:       return set_neg_overflow_int<To_Policy>(to, dir);
-40039:     }
-40039:     typedef typename C_Integer<Type>::other_type UType;
-40039:     UType mask = UType(-1) << (((sizeof(Type)) * static_cast<std::size_t>(8)) - exp - 1);
-40039:     UType ux = x;
-40039:     if ((ux & mask) != mask) {
-40039:       return set_neg_overflow_int<To_Policy>(to, dir);
-40039:     }
-40039:     ux <<= exp;
-40039:     Type n = ~(Type(~ux));
-40039:     if (((n) < ((Extended_Int<To_Policy, Type>::min)))) {
-40039:       return set_neg_overflow_int<To_Policy>(to, dir);
-40039:     }
-40039:     to = n;
-40039:   }
-40039:   else {
-40039:     if (!To_Policy::check_overflow) {
-40039:       to = x << exp;
-40039:       return V_EQ;
-40039:     }
-40039:     if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8)) - 1) {
-40039:       if (x == 0) {
-40039:         to = 0;
-40039:         return V_EQ;
-40039:       }
-40039:       return set_pos_overflow_int<To_Policy>(to, dir);
-40039:     }
-40039:     if (x > Extended_Int<To_Policy, Type>::max >> exp) {
-40039:       return set_pos_overflow_int<To_Policy>(to, dir);
-40039:     }
-40039:     to = x << exp;
-40039:   }
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: smod_2exp_unsigned_int(Type& to, const Type x, unsigned int exp,
-40039:                        Rounding_Dir dir) {
-40039:   if (exp > ((sizeof(Type)) * static_cast<std::size_t>(8))) {
-40039:     to = x;
-40039:   }
-40039:   else {
-40039:     Type v = (exp == ((sizeof(Type)) * static_cast<std::size_t>(8)) ? x : (x & ((Type(1) << exp) - 1)));
-40039:     if (v >= (Type(1) << (exp - 1))) {
-40039:       return set_neg_overflow_int<To_Policy>(to, dir);
-40039:     }
-40039:     else {
-40039:       to = v;
-40039:     }
-40039:   }
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: smod_2exp_signed_int(Type& to, const Type x, unsigned int exp,
-40039:                      Rounding_Dir) {
-40039:   if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8))) {
-40039:     to = x;
-40039:   }
-40039:   else {
-40039:     Type m = Type(1) << (exp - 1);
-40039:     to = (x & (m - 1)) - (x & m);
-40039:   }
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: umod_2exp_unsigned_int(Type& to, const Type x, unsigned int exp,
-40039:                        Rounding_Dir) {
-40039:   if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8))) {
-40039:     to = x;
-40039:   }
-40039:   else {
-40039:     to = x & ((Type(1) << exp) - 1);
-40039:   }
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: umod_2exp_signed_int(Type& to, const Type x, unsigned int exp,
-40039:                      Rounding_Dir dir) {
-40039:   if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8))) {
-40039:     if (x < 0) {
-40039:       return set_pos_overflow_int<To_Policy>(to, dir);
-40039:     }
-40039:     to = x;
-40039:   }
-40039:   else {
-40039:     to = x & ((Type(1) << exp) - 1);
-40039:   }
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Type>
-40039: inline void
-40039: isqrt_rem(Type& q, Type& r, const Type from) {
-40039:   q = 0;
-40039:   r = from;
-40039:   Type t(1);
-40039:   for (t <<= ((sizeof(Type)) * static_cast<std::size_t>(8)) - 2; t != 0; t >>= 2) {
-40039:     Type s = q + t;
-40039:     if (s <= r) {
-40039:       r -= s;
-40039:       q = s + t;
-40039:     }
-40039:     q >>= 1;
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: sqrt_unsigned_int(Type& to, const Type from, Rounding_Dir dir) {
-40039:   Type rem;
-40039:   isqrt_rem(to, rem, from);
-40039:   if (round_not_requested(dir)) {
-40039:     return V_GE;
-40039:   }
-40039:   if (rem == 0) {
-40039:     return V_EQ;
-40039:   }
-40039:   return round_gt_int<To_Policy>(to, dir);
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: sqrt_signed_int(Type& to, const Type from, Rounding_Dir dir) {
-40039:   if (((To_Policy::check_sqrt_neg) ? (from < 0) : (
-40039: # 1566 "../../src/checked_int_inlines.hh" 3 4
-40039:      (static_cast<void> (0))
-40039: # 1566 "../../src/checked_int_inlines.hh"
-40039:      , false))) {
-40039:     return assign_nan<To_Policy>(to, V_SQRT_NEG);
-40039:   }
-40039:   return sqrt_unsigned_int<To_Policy, From_Policy>(to, from, dir);
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: add_mul_int(Type& to, const Type x, const Type y, Rounding_Dir dir) {
-40039:   Type z;
-40039:   Result r = mul<To_Policy, From1_Policy, From2_Policy>(z, x, y, dir);
-40039:   switch (result_overflow(r)) {
-40039:   case 0:
-40039:     return add<To_Policy, To_Policy, To_Policy>(to, to, z, dir);
-40039:   case -1:
-40039:     if (to <= 0) {
-40039:       return set_neg_overflow_int<To_Policy>(to, dir);
-40039:     }
-40039:     return assign_nan<To_Policy>(to, V_UNKNOWN_NEG_OVERFLOW);
-40039:   case 1:
-40039:     if (to >= 0) {
-40039:       return set_pos_overflow_int<To_Policy>(to, dir);
-40039:     }
-40039:     return assign_nan<To_Policy>(to, V_UNKNOWN_POS_OVERFLOW);
-40039:   default:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return V_NAN;
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: sub_mul_int(Type& to, const Type x, const Type y, Rounding_Dir dir) {
-40039:   Type z;
-40039:   Result r = mul<To_Policy, From1_Policy, From2_Policy>(z, x, y, dir);
-40039:   switch (result_overflow(r)) {
-40039:   case 0:
-40039:     return sub<To_Policy, To_Policy, To_Policy>(to, to, z, dir);
-40039:   case -1:
-40039:     if (to >= 0) {
-40039:       return set_pos_overflow_int<To_Policy>(to, dir);
-40039:     }
-40039:     return assign_nan<To_Policy>(to, V_UNKNOWN_NEG_OVERFLOW);
-40039:   case 1:
-40039:     if (to <= 0) {
-40039:       return set_neg_overflow_int<To_Policy>(to, dir);
-40039:     }
-40039:     return assign_nan<To_Policy>(to, V_UNKNOWN_POS_OVERFLOW);
-40039:   default:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return V_NAN;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Policy, typename Type>
-40039: inline Result
-40039: output_char(std::ostream& os, Type& from,
-40039:             const Numeric_Format&, Rounding_Dir) {
-40039:   os << int(from);
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy, typename Type>
-40039: inline Result
-40039: output_int(std::ostream& os, Type& from, const Numeric_Format&, Rounding_Dir) {
-40039:   os << from;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, Rounding_Dir a1) { return neg_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, Rounding_Dir a1) { return neg_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, Rounding_Dir a1) { return neg_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, Rounding_Dir a1) { return neg_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, Rounding_Dir a1) { return neg_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return neg_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return neg_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return neg_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return neg_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return neg_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return neg_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, char, char, char> { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return add_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, signed char, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return add_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, signed short, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return add_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, signed int, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return add_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, signed long, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return add_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, signed long long, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return add_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, unsigned char, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return add_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, unsigned short, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return add_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, unsigned int, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return add_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, unsigned long, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return add_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, unsigned long long, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return add_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, char, char, char> { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return sub_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, signed char, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return sub_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, signed short, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return sub_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, signed int, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return sub_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, signed long, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return sub_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, signed long long, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return sub_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, unsigned char, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return sub_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, unsigned short, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return sub_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, unsigned int, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return sub_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, unsigned long, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return sub_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, unsigned long long, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return sub_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, char, char, char> { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return mul_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, signed char, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return mul_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, signed short, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return mul_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, signed int, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return mul_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, signed long, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return mul_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, signed long long, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return mul_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, unsigned char, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return mul_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, unsigned short, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return mul_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, unsigned int, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return mul_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, unsigned long, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return mul_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, unsigned long long, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return mul_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, char, char, char> { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return div_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, signed char, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return div_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, signed short, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return div_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, signed int, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return div_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, signed long, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return div_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, signed long long, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return div_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, unsigned char, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return div_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, unsigned short, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return div_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, unsigned int, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return div_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, unsigned long, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return div_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, unsigned long long, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return div_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, char, char, char> { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return idiv_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, signed char, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return idiv_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, signed short, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return idiv_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, signed int, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return idiv_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, signed long, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return idiv_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, signed long long, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return idiv_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, unsigned char, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return idiv_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, unsigned short, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return idiv_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, unsigned int, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return idiv_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, unsigned long, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return idiv_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, unsigned long long, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return idiv_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, char, char, char> { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return rem_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, signed char, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return rem_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, signed short, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return rem_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, signed int, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return rem_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, signed long, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return rem_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, signed long long, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return rem_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, unsigned char, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return rem_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, unsigned short, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return rem_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, unsigned int, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return rem_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, unsigned long, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return rem_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, unsigned long long, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return rem_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, Rounding_Dir a1) { return sqrt_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, Rounding_Dir a1) { return sqrt_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, Rounding_Dir a1) { return sqrt_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, Rounding_Dir a1) { return sqrt_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, Rounding_Dir a1) { return sqrt_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return sqrt_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return sqrt_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return sqrt_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return sqrt_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return sqrt_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return sqrt_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, Rounding_Dir a1) { return abs_generic<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, Rounding_Dir a1) { return abs_generic<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, Rounding_Dir a1) { return abs_generic<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, Rounding_Dir a1) { return abs_generic<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, Rounding_Dir a1) { return abs_generic<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return abs_generic<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, char, char, char> { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, signed char, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, signed short, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, signed int, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, signed long, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, signed long long, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, unsigned char, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, unsigned short, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, unsigned int, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, unsigned long, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, unsigned long long, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, char, char, char, char, char> { static inline Result function( char& arg1, char &arg2, char &arg3, const char &arg4, const char &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, signed char, signed char, signed char, signed char, signed char> { static inline Result function( signed char& arg1, signed char &arg2, signed char &arg3, const signed char &arg4, const signed char &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, signed short, signed short, signed short, signed short, signed short> { static inline Result function( signed short& arg1, signed short &arg2, signed short &arg3, const signed short &arg4, const signed short &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, signed int, signed int, signed int, signed int, signed int> { static inline Result function( signed int& arg1, signed int &arg2, signed int &arg3, const signed int &arg4, const signed int &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, signed long, signed long, signed long, signed long, signed long> { static inline Result function( signed long& arg1, signed long &arg2, signed long &arg3, const signed long &arg4, const signed long &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, signed long long, signed long long, signed long long, signed long long, signed long long> { static inline Result function( signed long long& arg1, signed long long &arg2, signed long long &arg3, const signed long long &arg4, const signed long long &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, unsigned char &arg2, unsigned char &arg3, const unsigned char &arg4, const unsigned char &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, unsigned short, unsigned short, unsigned short, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, unsigned short &arg2, unsigned short &arg3, const unsigned short &arg4, const unsigned short &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, unsigned int &arg2, unsigned int &arg3, const unsigned int &arg4, const unsigned int &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, unsigned long &arg2, unsigned long &arg3, const unsigned long &arg4, const unsigned long &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, unsigned long long &arg2, unsigned long long &arg3, const unsigned long long &arg4, const unsigned long long &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, char, char, char> { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, signed char, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, signed short, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, signed int, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, signed long, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, signed long long, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, unsigned char, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, unsigned short, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, unsigned int, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, unsigned long, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, unsigned long long, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename Policy> struct sgn_function_struct<Policy, char> { static inline Result_Relation function(const char& arg) { return sgn_generic<Policy>(arg); } };
-40039: template <typename Policy> struct sgn_function_struct<Policy, signed char> { static inline Result_Relation function(const signed char& arg) { return sgn_generic<Policy>(arg); } };
-40039: template <typename Policy> struct sgn_function_struct<Policy, signed short> { static inline Result_Relation function(const signed short& arg) { return sgn_generic<Policy>(arg); } };
-40039: template <typename Policy> struct sgn_function_struct<Policy, signed int> { static inline Result_Relation function(const signed int& arg) { return sgn_generic<Policy>(arg); } };
-40039: template <typename Policy> struct sgn_function_struct<Policy, signed long> { static inline Result_Relation function(const signed long& arg) { return sgn_generic<Policy>(arg); } };
-40039: template <typename Policy> struct sgn_function_struct<Policy, signed long long> { static inline Result_Relation function(const signed long long& arg) { return sgn_generic<Policy>(arg); } };
-40039: template <typename Policy> struct sgn_function_struct<Policy, unsigned char> { static inline Result_Relation function(const unsigned char& arg) { return sgn_generic<Policy>(arg); } };
-40039: template <typename Policy> struct sgn_function_struct<Policy, unsigned short> { static inline Result_Relation function(const unsigned short& arg) { return sgn_generic<Policy>(arg); } };
-40039: template <typename Policy> struct sgn_function_struct<Policy, unsigned int> { static inline Result_Relation function(const unsigned int& arg) { return sgn_generic<Policy>(arg); } };
-40039: template <typename Policy> struct sgn_function_struct<Policy, unsigned long> { static inline Result_Relation function(const unsigned long& arg) { return sgn_generic<Policy>(arg); } };
-40039: template <typename Policy> struct sgn_function_struct<Policy, unsigned long long> { static inline Result_Relation function(const unsigned long long& arg) { return sgn_generic<Policy>(arg); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, char, char> { static inline Result_Relation function(const char& arg1, const char &arg2) { return cmp_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result_Relation function(const signed char& arg1, const signed char &arg2) { return cmp_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result_Relation function(const signed short& arg1, const signed short &arg2) { return cmp_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result_Relation function(const signed int& arg1, const signed int &arg2) { return cmp_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result_Relation function(const signed long& arg1, const signed long &arg2) { return cmp_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result_Relation function(const signed long long& arg1, const signed long long &arg2) { return cmp_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result_Relation function(const unsigned char& arg1, const unsigned char &arg2) { return cmp_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result_Relation function(const unsigned short& arg1, const unsigned short &arg2) { return cmp_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result_Relation function(const unsigned int& arg1, const unsigned int &arg2) { return cmp_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result_Relation function(const unsigned long& arg1, const unsigned long &arg2) { return cmp_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result_Relation function(const unsigned long long& arg1, const unsigned long long &arg2) { return cmp_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, char, char, char> { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return add_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, signed char, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return add_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, signed short, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return add_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, signed int, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return add_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, signed long, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return add_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, signed long long, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return add_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, unsigned char, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return add_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, unsigned short, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return add_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, unsigned int, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return add_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, unsigned long, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return add_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, unsigned long long, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return add_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, char, char, char> { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return sub_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, signed char, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return sub_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, signed short, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return sub_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, signed int, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return sub_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, signed long, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return sub_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, signed long long, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return sub_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, unsigned char, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return sub_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, unsigned short, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return sub_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, unsigned int, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return sub_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, unsigned long, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return sub_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, unsigned long long, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return sub_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename Policy> struct input_function_struct<Policy, char> { static inline Result function( char& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct input_function_struct<Policy, signed char> { static inline Result function( signed char& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct input_function_struct<Policy, signed short> { static inline Result function( signed short& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct input_function_struct<Policy, signed int> { static inline Result function( signed int& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct input_function_struct<Policy, signed long> { static inline Result function( signed long& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct input_function_struct<Policy, signed long long> { static inline Result function( signed long long& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct input_function_struct<Policy, unsigned char> { static inline Result function( unsigned char& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct input_function_struct<Policy, unsigned short> { static inline Result function( unsigned short& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct input_function_struct<Policy, unsigned int> { static inline Result function( unsigned int& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct input_function_struct<Policy, unsigned long> { static inline Result function( unsigned long& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct input_function_struct<Policy, unsigned long long> { static inline Result function( unsigned long long& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
-40039: 
-40039: template <typename Policy> struct output_function_struct<Policy, char> { static inline Result function(std::ostream& b1, const char& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_char<Policy>(b1, arg, a1, a2); } };
-40039: template <typename Policy> struct output_function_struct<Policy, signed char> { static inline Result function(std::ostream& b1, const signed char& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_char<Policy>(b1, arg, a1, a2); } };
-40039: template <typename Policy> struct output_function_struct<Policy, signed short> { static inline Result function(std::ostream& b1, const signed short& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int<Policy>(b1, arg, a1, a2); } };
-40039: template <typename Policy> struct output_function_struct<Policy, signed int> { static inline Result function(std::ostream& b1, const signed int& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int<Policy>(b1, arg, a1, a2); } };
-40039: template <typename Policy> struct output_function_struct<Policy, signed long> { static inline Result function(std::ostream& b1, const signed long& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int<Policy>(b1, arg, a1, a2); } };
-40039: template <typename Policy> struct output_function_struct<Policy, signed long long> { static inline Result function(std::ostream& b1, const signed long long& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int<Policy>(b1, arg, a1, a2); } };
-40039: template <typename Policy> struct output_function_struct<Policy, unsigned char> { static inline Result function(std::ostream& b1, const unsigned char& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_char<Policy>(b1, arg, a1, a2); } };
-40039: template <typename Policy> struct output_function_struct<Policy, unsigned short> { static inline Result function(std::ostream& b1, const unsigned short& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int<Policy>(b1, arg, a1, a2); } };
-40039: template <typename Policy> struct output_function_struct<Policy, unsigned int> { static inline Result function(std::ostream& b1, const unsigned int& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int<Policy>(b1, arg, a1, a2); } };
-40039: template <typename Policy> struct output_function_struct<Policy, unsigned long> { static inline Result function(std::ostream& b1, const unsigned long& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int<Policy>(b1, arg, a1, a2); } };
-40039: template <typename Policy> struct output_function_struct<Policy, unsigned long long> { static inline Result function(std::ostream& b1, const unsigned long long& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int<Policy>(b1, arg, a1, a2); } };
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 702 "../../src/checked_defs.hh" 2
-40039: # 1 "../../src/checked_float_inlines.hh" 1
-40039: # 28 "../../src/checked_float_inlines.hh"
-40039: # 1 "/usr/include/c++/8/cmath" 1 3
-40039: # 39 "/usr/include/c++/8/cmath" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/cmath" 3
-40039: # 29 "../../src/checked_float_inlines.hh" 2
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Checked {
-40039: 
-40039: inline float
-40039: multiply_add(float x, float y, float z) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   return x*y + z;
-40039: 
-40039: }
-40039: 
-40039: inline double
-40039: multiply_add(double x, double y, double z) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   return x*y + z;
-40039: 
-40039: }
-40039: 
-40039: inline long double
-40039: multiply_add(long double x, long double y, long double z) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   return x*y + z;
-40039: 
-40039: }
-40039: 
-40039: 
-40039: inline float
-40039: round_to_integer(float x) {
-40039:   return rintf(x);
-40039: }
-40039: 
-40039: 
-40039: inline double
-40039: round_to_integer(double x) {
-40039:   return rint(x);
-40039: }
-40039: 
-40039: 
-40039: inline long double
-40039: round_to_integer(long double x) {
-40039:   return rintl(x);
-40039: }
-40039: # 99 "../../src/checked_float_inlines.hh"
-40039: inline bool
-40039: fpu_direct_rounding(Rounding_Dir dir) {
-40039:   return round_direct(dir) || round_not_requested(dir);
-40039: }
-40039: 
-40039: inline bool
-40039: fpu_inverse_rounding(Rounding_Dir dir) {
-40039:   return round_inverse(dir);
-40039: }
-40039: # 133 "../../src/checked_float_inlines.hh"
-40039: inline void
-40039: limit_precision(const float& v) {
-40039:   PPL_CC_FLUSH(v);
-40039: }
-40039: 
-40039: inline void
-40039: limit_precision(const double& v) {
-40039:   PPL_CC_FLUSH(v);
-40039: }
-40039: 
-40039: inline void
-40039: limit_precision(const long double&) {
-40039: }
-40039: 
-40039: template <typename Policy, typename T>
-40039: inline Result
-40039: classify_float(const T v, bool nan, bool inf, bool sign) {
-40039:   Float<T> f(v);
-40039:   if ((nan || sign) && ((Policy::has_nan) ? (f.u.binary.is_nan()) : (
-40039: # 151 "../../src/checked_float_inlines.hh" 3 4
-40039:                       (static_cast<void> (0))
-40039: # 151 "../../src/checked_float_inlines.hh"
-40039:                       , false))) {
-40039:     return V_NAN;
-40039:   }
-40039:   if (inf) {
-40039:     if (Policy::has_infinity) {
-40039:       int sign_inf = f.u.binary.inf_sign();
-40039:       if (sign_inf < 0) {
-40039:         return V_EQ_MINUS_INFINITY;
-40039:       }
-40039:       if (sign_inf > 0) {
-40039:         return V_EQ_PLUS_INFINITY;
-40039:       }
-40039:     }
-40039:     else {
-40039:       ((void) 0);
-40039:     }
-40039:   }
-40039:   if (sign) {
-40039:     if (v < 0) {
-40039:       return V_LT;
-40039:     }
-40039:     if (v > 0) {
-40039:       return V_GT;
-40039:     }
-40039:     return V_EQ;
-40039:   }
-40039:   return V_LGE;
-40039: }
-40039: 
-40039: template <typename Policy, typename T>
-40039: inline bool
-40039: is_nan_float(const T v) {
-40039:   Float<T> f(v);
-40039:   return ((Policy::has_nan) ? (f.u.binary.is_nan()) : (
-40039: # 184 "../../src/checked_float_inlines.hh" 3 4
-40039:         (static_cast<void> (0))
-40039: # 184 "../../src/checked_float_inlines.hh"
-40039:         , false));
-40039: }
-40039: 
-40039: template <typename Policy, typename T>
-40039: inline bool
-40039: is_inf_float(const T v) {
-40039:   Float<T> f(v);
-40039:   return ((Policy::has_infinity) ? ((f.u.binary.inf_sign() != 0)) : (
-40039: # 191 "../../src/checked_float_inlines.hh" 3 4
-40039:         (static_cast<void> (0))
-40039: # 191 "../../src/checked_float_inlines.hh"
-40039:         , false));
-40039: }
-40039: template <typename Policy, typename T>
-40039: inline bool
-40039: is_minf_float(const T v) {
-40039:   Float<T> f(v);
-40039:   return ((Policy::has_infinity) ? ((f.u.binary.inf_sign() < 0)) : (
-40039: # 197 "../../src/checked_float_inlines.hh" 3 4
-40039:         (static_cast<void> (0))
-40039: # 197 "../../src/checked_float_inlines.hh"
-40039:         , false));
-40039: }
-40039: 
-40039: template <typename Policy, typename T>
-40039: inline bool
-40039: is_pinf_float(const T v) {
-40039:   Float<T> f(v);
-40039:   return ((Policy::has_infinity) ? ((f.u.binary.inf_sign() > 0)) : (
-40039: # 204 "../../src/checked_float_inlines.hh" 3 4
-40039:         (static_cast<void> (0))
-40039: # 204 "../../src/checked_float_inlines.hh"
-40039:         , false));
-40039: }
-40039: 
-40039: 
-40039: template <typename Policy, typename T>
-40039: inline bool
-40039: is_int_float(const T v) {
-40039:   return round_to_integer(v) == v;
-40039: }
-40039: 
-40039: template <typename Policy, typename T>
-40039: inline Result
-40039: assign_special_float(T& v, Result_Class c, Rounding_Dir) {
-40039:   ((void) 0);
-40039:   switch (c) {
-40039:   case VC_MINUS_INFINITY:
-40039:     v = -
-40039: # 220 "../../src/checked_float_inlines.hh" 3 4
-40039:         (__builtin_huge_val ())
-40039: # 220 "../../src/checked_float_inlines.hh"
-40039:                 ;
-40039:     return V_EQ_MINUS_INFINITY;
-40039:   case VC_PLUS_INFINITY:
-40039:     v = 
-40039: # 223 "../../src/checked_float_inlines.hh" 3 4
-40039:        (__builtin_huge_val ())
-40039: # 223 "../../src/checked_float_inlines.hh"
-40039:                ;
-40039:     return V_EQ_PLUS_INFINITY;
-40039:   case VC_NAN:
-40039:     v = 
-40039: # 226 "../../src/checked_float_inlines.hh" 3 4
-40039:        (__builtin_nanf (""))
-40039: # 226 "../../src/checked_float_inlines.hh"
-40039:               ;
-40039:     return V_NAN;
-40039:   default:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return V_NAN | V_UNREPRESENTABLE;
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: pred_float(T& v) {
-40039:   Float<T> f(v);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   if (f.u.binary.zero_sign() > 0) {
-40039:     f.u.binary.negate();
-40039:     f.u.binary.inc();
-40039:   }
-40039:   else if (f.u.binary.sign_bit()) {
-40039:     f.u.binary.inc();
-40039:   }
-40039:   else {
-40039:     f.u.binary.dec();
-40039:   }
-40039:   v = f.value();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: succ_float(T& v) {
-40039:   Float<T> f(v);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   if (f.u.binary.zero_sign() < 0) {
-40039:     f.u.binary.negate();
-40039:     f.u.binary.inc();
-40039:   }
-40039:   else if (!f.u.binary.sign_bit()) {
-40039:     f.u.binary.inc();
-40039:   }
-40039:   else {
-40039:     f.u.binary.dec();
-40039:   }
-40039:   v = f.value();
-40039: }
-40039: 
-40039: template <typename Policy, typename To>
-40039: inline Result
-40039: round_lt_float(To& to, Rounding_Dir dir) {
-40039:   if (round_down(dir)) {
-40039:     pred_float(to);
-40039:     return V_GT;
-40039:   }
-40039:   return V_LT;
-40039: }
-40039: 
-40039: template <typename Policy, typename To>
-40039: inline Result
-40039: round_gt_float(To& to, Rounding_Dir dir) {
-40039:   if (round_up(dir)) {
-40039:     succ_float(to);
-40039:     return V_LT;
-40039:   }
-40039:   return V_GT;
-40039: }
-40039: 
-40039: 
-40039: template <typename Policy>
-40039: inline void
-40039: prepare_inexact(Rounding_Dir dir) {
-40039:   if (Policy::fpu_check_inexact
-40039:       && !round_not_needed(dir) && round_strict_relation(dir)) {
-40039:     fpu_reset_inexact();
-40039:   }
-40039: }
-40039: 
-40039: template <typename Policy>
-40039: inline Result
-40039: result_relation(Rounding_Dir dir) {
-40039:   if (Policy::fpu_check_inexact
-40039:       && !round_not_needed(dir) && round_strict_relation(dir)) {
-40039:     switch (fpu_check_inexact()) {
-40039:     case 0:
-40039:       return V_EQ;
-40039:     case -1:
-40039:       goto unknown;
-40039:     case 1:
-40039:       break;
-40039:     }
-40039:     switch (round_dir(dir)) {
-40039:     case ROUND_DOWN:
-40039:       return V_GT;
-40039:     case ROUND_UP:
-40039:       return V_LT;
-40039:     default:
-40039:       return V_NE;
-40039:     }
-40039:   }
-40039:   else {
-40039:   unknown:
-40039:     switch (round_dir(dir)) {
-40039:     case ROUND_DOWN:
-40039:       return V_GE;
-40039:     case ROUND_UP:
-40039:       return V_LE;
-40039:     default:
-40039:       return V_LGE;
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename To, typename From>
-40039: inline Result
-40039: assign_float_float_exact(To& to, const From from, Rounding_Dir) {
-40039:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(from)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   to = from;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename To, typename From>
-40039: inline Result
-40039: assign_float_float_inexact(To& to, const From from, Rounding_Dir dir) {
-40039:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(from)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   prepare_inexact<To_Policy>(dir);
-40039:   if (fpu_direct_rounding(dir)) {
-40039:     to = from;
-40039:   }
-40039:   else if (fpu_inverse_rounding(dir)) {
-40039:     From tmp = -from;
-40039:     to = tmp;
-40039:     limit_precision(to);
-40039:     to = -to;
-40039:   }
-40039:   else {
-40039:     fpu_rounding_control_word_type old
-40039:       = fpu_save_rounding_direction(round_fpu_dir(dir));
-40039:     limit_precision(from);
-40039:     to = from;
-40039:     limit_precision(to);
-40039:     fpu_restore_rounding_direction(old);
-40039:   }
-40039:   return result_relation<To_Policy>(dir);
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename To, typename From>
-40039: inline Result
-40039: assign_float_float(To& to, const From from, Rounding_Dir dir) {
-40039:   if (sizeof(From) > sizeof(To)) {
-40039:     return assign_float_float_inexact<To_Policy, From_Policy>(to, from, dir);
-40039:   }
-40039:   else {
-40039:     return assign_float_float_exact<To_Policy, From_Policy>(to, from, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: floor_float(Type& to, const Type from, Rounding_Dir) {
-40039:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(from)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   if (fpu_direct_rounding(ROUND_DOWN)) {
-40039:     to = round_to_integer(from);
-40039:   }
-40039:   else if (fpu_inverse_rounding(ROUND_DOWN)) {
-40039:     to = round_to_integer(-from);
-40039:     limit_precision(to);
-40039:     to = -to;
-40039:   }
-40039:   else {
-40039:     fpu_rounding_control_word_type old
-40039:       = fpu_save_rounding_direction(round_fpu_dir(ROUND_DOWN));
-40039:     limit_precision(from);
-40039:     to = round_to_integer(from);
-40039:     limit_precision(to);
-40039:     fpu_restore_rounding_direction(old);
-40039:   }
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: ceil_float(Type& to, const Type from, Rounding_Dir) {
-40039:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(from)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   if (fpu_direct_rounding(ROUND_UP)) {
-40039:     to = round_to_integer(from);
-40039:   }
-40039:   else if (fpu_inverse_rounding(ROUND_UP)) {
-40039:     to = round_to_integer(-from);
-40039:     limit_precision(to);
-40039:     to = -to;
-40039:   }
-40039:   else {
-40039:     fpu_rounding_control_word_type old
-40039:       = fpu_save_rounding_direction(round_fpu_dir(ROUND_UP));
-40039:     limit_precision(from);
-40039:     to = round_to_integer(from);
-40039:     limit_precision(to);
-40039:     fpu_restore_rounding_direction(old);
-40039:   }
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: trunc_float(Type& to, const Type from, Rounding_Dir dir) {
-40039:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(from)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   if (from >= 0) {
-40039:     return floor<To_Policy, From_Policy>(to, from, dir);
-40039:   }
-40039:   else {
-40039:     return ceil<To_Policy, From_Policy>(to, from, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: neg_float(Type& to, const Type from, Rounding_Dir) {
-40039:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(from)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   to = -from;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: add_float(Type& to, const Type x, const Type y, Rounding_Dir dir) {
-40039:   if (To_Policy::check_inf_add_inf
-40039:       && is_inf_float<From1_Policy>(x) && x == -y) {
-40039:     return assign_nan<To_Policy>(to, V_INF_ADD_INF);
-40039:   }
-40039:   prepare_inexact<To_Policy>(dir);
-40039:   if (fpu_direct_rounding(dir)) {
-40039:     to = x + y;
-40039:   }
-40039:   else if (fpu_inverse_rounding(dir)) {
-40039:     to = -x - y;
-40039:     limit_precision(to);
-40039:     to = -to;
-40039:   }
-40039:   else {
-40039:     fpu_rounding_control_word_type old
-40039:       = fpu_save_rounding_direction(round_fpu_dir(dir));
-40039:     limit_precision(x);
-40039:     limit_precision(y);
-40039:     to = x + y;
-40039:     limit_precision(to);
-40039:     fpu_restore_rounding_direction(old);
-40039:   }
-40039:   if (To_Policy::fpu_check_nan_result && is_nan<To_Policy>(to)) {
-40039:     return V_NAN;
-40039:   }
-40039:   return result_relation<To_Policy>(dir);
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: sub_float(Type& to, const Type x, const Type y, Rounding_Dir dir) {
-40039:   if (To_Policy::check_inf_sub_inf
-40039:       && is_inf_float<From1_Policy>(x) && x == y) {
-40039:     return assign_nan<To_Policy>(to, V_INF_SUB_INF);
-40039:   }
-40039:   prepare_inexact<To_Policy>(dir);
-40039:   if (fpu_direct_rounding(dir)) {
-40039:     to = x - y;
-40039:   }
-40039:   else if (fpu_inverse_rounding(dir)) {
-40039:     to = y - x;
-40039:     limit_precision(to);
-40039:     to = -to;
-40039:   }
-40039:   else {
-40039:     fpu_rounding_control_word_type old
-40039:       = fpu_save_rounding_direction(round_fpu_dir(dir));
-40039:     limit_precision(x);
-40039:     limit_precision(y);
-40039:     to = x - y;
-40039:     limit_precision(to);
-40039:     fpu_restore_rounding_direction(old);
-40039:   }
-40039:   if (To_Policy::fpu_check_nan_result && is_nan<To_Policy>(to)) {
-40039:     return V_NAN;
-40039:   }
-40039:   return result_relation<To_Policy>(dir);
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: mul_float(Type& to, const Type x, const Type y, Rounding_Dir dir) {
-40039:   if (To_Policy::check_inf_mul_zero
-40039:       && ((x == 0 && is_inf_float<From2_Policy>(y))
-40039:           ||
-40039:           (y == 0 && is_inf_float<From1_Policy>(x)))) {
-40039:     return assign_nan<To_Policy>(to, V_INF_MUL_ZERO);
-40039:   }
-40039:   prepare_inexact<To_Policy>(dir);
-40039:   if (fpu_direct_rounding(dir)) {
-40039:     to = x * y;
-40039:   }
-40039:   else if (fpu_inverse_rounding(dir)) {
-40039:     to = x * -y;
-40039:     limit_precision(to);
-40039:     to = -to;
-40039:   }
-40039:   else {
-40039:     fpu_rounding_control_word_type old
-40039:       = fpu_save_rounding_direction(round_fpu_dir(dir));
-40039:     limit_precision(x);
-40039:     limit_precision(y);
-40039:     to = x * y;
-40039:     limit_precision(to);
-40039:     fpu_restore_rounding_direction(old);
-40039:   }
-40039:   if (To_Policy::fpu_check_nan_result && is_nan<To_Policy>(to)) {
-40039:     return V_NAN;
-40039:   }
-40039:   return result_relation<To_Policy>(dir);
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: div_float(Type& to, const Type x, const Type y, Rounding_Dir dir) {
-40039:   if (To_Policy::check_inf_div_inf
-40039:       && is_inf_float<From1_Policy>(x) && is_inf_float<From2_Policy>(y)) {
-40039:     return assign_nan<To_Policy>(to, V_INF_DIV_INF);
-40039:   }
-40039:   if (To_Policy::check_div_zero && y == 0) {
-40039:     return assign_nan<To_Policy>(to, V_DIV_ZERO);
-40039:   }
-40039:   prepare_inexact<To_Policy>(dir);
-40039:   if (fpu_direct_rounding(dir)) {
-40039:     to = x / y;
-40039:   }
-40039:   else if (fpu_inverse_rounding(dir)) {
-40039:     to = x / -y;
-40039:     limit_precision(to);
-40039:     to = -to;
-40039:   }
-40039:   else {
-40039:     fpu_rounding_control_word_type old
-40039:       = fpu_save_rounding_direction(round_fpu_dir(dir));
-40039:     limit_precision(x);
-40039:     limit_precision(y);
-40039:     to = x / y;
-40039:     limit_precision(to);
-40039:     fpu_restore_rounding_direction(old);
-40039:   }
-40039:   if (To_Policy::fpu_check_nan_result && is_nan<To_Policy>(to)) {
-40039:     return V_NAN;
-40039:   }
-40039:   return result_relation<To_Policy>(dir);
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: idiv_float(Type& to, const Type x, const Type y, Rounding_Dir dir) {
-40039:   Type temp;
-40039: 
-40039:   dir = round_dir(dir);
-40039:   Result r = div<To_Policy, From1_Policy, From2_Policy>(temp, x, y, dir);
-40039:   if (result_class(r) != VC_NORMAL) {
-40039:     to = temp;
-40039:     return r;
-40039:   }
-40039:   Result r1 = trunc<To_Policy, To_Policy>(to, temp, ROUND_NOT_NEEDED);
-40039:   ((void) 0);
-40039:   if (r == V_EQ || to != temp) {
-40039:     return r1;
-40039:   }
-40039: 
-40039:   return (dir == ROUND_UP) ? V_LE : V_GE;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: rem_float(Type& to, const Type x, const Type y, Rounding_Dir) {
-40039:   if (To_Policy::check_inf_mod && is_inf_float<From1_Policy>(x)) {
-40039:     return assign_nan<To_Policy>(to, V_INF_MOD);
-40039:   }
-40039:   if (To_Policy::check_div_zero && y == 0) {
-40039:     return assign_nan<To_Policy>(to, V_MOD_ZERO);
-40039:   }
-40039:   to = std::fmod(x, y);
-40039:   if (To_Policy::fpu_check_nan_result && is_nan<To_Policy>(to)) {
-40039:     return V_NAN;
-40039:   }
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: struct Float_2exp {
-40039:   enum const_bool_value_has_nan { has_nan = (false) };
-40039:   enum const_bool_value_has_infinity { has_infinity = (false) };
-40039: };
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: add_2exp_float(Type& to, const Type x, unsigned int exp, Rounding_Dir dir) {
-40039:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   ((void) 0);
-40039:   return
-40039:     add<To_Policy, From_Policy, Float_2exp>(to,
-40039:                                             x,
-40039:                                             Type(1ULL << exp),
-40039:                                             dir);
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: sub_2exp_float(Type& to, const Type x, unsigned int exp, Rounding_Dir dir) {
-40039:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   ((void) 0);
-40039:   return
-40039:     sub<To_Policy, From_Policy, Float_2exp>(to,
-40039:                                             x,
-40039:                                             Type(1ULL << exp),
-40039:                                             dir);
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: mul_2exp_float(Type& to, const Type x, unsigned int exp, Rounding_Dir dir) {
-40039:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   ((void) 0);
-40039:   return
-40039:     mul<To_Policy, From_Policy, Float_2exp>(to,
-40039:                                             x,
-40039:                                             Type(1ULL << exp),
-40039:                                             dir);
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: div_2exp_float(Type& to, const Type x, unsigned int exp, Rounding_Dir dir) {
-40039:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   ((void) 0);
-40039:   return
-40039:     div<To_Policy, From_Policy, Float_2exp>(to,
-40039:                                             x,
-40039:                                             Type(1ULL << exp),
-40039:                                             dir);
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: smod_2exp_float(Type& to, const Type x, unsigned int exp, Rounding_Dir dir) {
-40039:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   if (To_Policy::check_inf_mod && is_inf_float<From_Policy>(x)) {
-40039:     return assign_nan<To_Policy>(to, V_INF_MOD);
-40039:   }
-40039:   ((void) 0);
-40039:   Type m = 1ULL << exp;
-40039:   rem_float<To_Policy, From_Policy, Float_2exp>(to, x, m, ROUND_IGNORE);
-40039:   Type m2 = m / 2;
-40039:   if (to < -m2) {
-40039:     return add_float<To_Policy, From_Policy, Float_2exp>(to, to, m, dir);
-40039:   }
-40039:   else if (to >= m2) {
-40039:     return sub_float<To_Policy, From_Policy, Float_2exp>(to, to, m, dir);
-40039:   }
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: umod_2exp_float(Type& to, const Type x, unsigned int exp, Rounding_Dir dir) {
-40039:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   if (To_Policy::check_inf_mod && is_inf_float<From_Policy>(x)) {
-40039:     return assign_nan<To_Policy>(to, V_INF_MOD);
-40039:   }
-40039:   ((void) 0);
-40039:   Type m = 1ULL << exp;
-40039:   rem_float<To_Policy, From_Policy, Float_2exp>(to, x, m, ROUND_IGNORE);
-40039:   if (to < 0) {
-40039:     return add_float<To_Policy, From_Policy, Float_2exp>(to, to, m, dir);
-40039:   }
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: abs_float(Type& to, const Type from, Rounding_Dir) {
-40039:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(from)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   to = std::abs(from);
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename Type>
-40039: inline Result
-40039: sqrt_float(Type& to, const Type from, Rounding_Dir dir) {
-40039:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(from)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   if (To_Policy::check_sqrt_neg && from < 0) {
-40039:     return assign_nan<To_Policy>(to, V_SQRT_NEG);
-40039:   }
-40039:   prepare_inexact<To_Policy>(dir);
-40039:   if (fpu_direct_rounding(dir)) {
-40039:     to = std::sqrt(from);
-40039:   }
-40039:   else {
-40039:     fpu_rounding_control_word_type old
-40039:       = fpu_save_rounding_direction(round_fpu_dir(dir));
-40039:     limit_precision(from);
-40039:     to = std::sqrt(from);
-40039:     limit_precision(to);
-40039:     fpu_restore_rounding_direction(old);
-40039:   }
-40039:   return result_relation<To_Policy>(dir);
-40039: }
-40039: 
-40039: template <typename Policy, typename Type>
-40039: inline Result_Relation
-40039: sgn_float(const Type x) {
-40039:   if (x > 0) {
-40039:     return VR_GT;
-40039:   }
-40039:   if (x < 0) {
-40039:     return VR_LT;
-40039:   }
-40039:   if (x == 0) {
-40039:     return VR_EQ;
-40039:   }
-40039:   return VR_EMPTY;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Type>
-40039: inline Result_Relation
-40039: cmp_float(const Type x, const Type y) {
-40039:   if (x > y) {
-40039:     return VR_GT;
-40039:   }
-40039:   if (x < y) {
-40039:     return VR_LT;
-40039:   }
-40039:   if (x == y) {
-40039:     return VR_EQ;
-40039:   }
-40039:   return VR_EMPTY;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename To, typename From>
-40039: inline Result
-40039: assign_float_int_inexact(To& to, const From from, Rounding_Dir dir) {
-40039:   prepare_inexact<To_Policy>(dir);
-40039:   if (fpu_direct_rounding(dir)) {
-40039:     to = from;
-40039:   }
-40039:   else {
-40039:     fpu_rounding_control_word_type old
-40039:       = fpu_save_rounding_direction(round_fpu_dir(dir));
-40039:     to = from;
-40039:     limit_precision(to);
-40039:     fpu_restore_rounding_direction(old);
-40039:   }
-40039:   return result_relation<To_Policy>(dir);
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename To, typename From>
-40039: inline Result
-40039: assign_float_int(To& to, const From from, Rounding_Dir dir) {
-40039:   if (((sizeof(From)) * static_cast<std::size_t>(8)) > Float<To>::Binary::MANTISSA_BITS) {
-40039:     return assign_float_int_inexact<To_Policy, From_Policy>(to, from, dir);
-40039:   }
-40039:   else {
-40039:     return assign_exact<To_Policy, From_Policy>(to, from, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename Policy, typename T>
-40039: inline Result
-40039: set_neg_overflow_float(T& to, Rounding_Dir dir) {
-40039:   switch (round_dir(dir)) {
-40039:   case ROUND_UP:
-40039:     {
-40039:       Float<T> f;
-40039:       f.u.binary.set_max(true);
-40039:       to = f.value();
-40039:       return V_LT_INF;
-40039:     }
-40039:   case ROUND_DOWN:
-40039:   case ROUND_IGNORE:
-40039:     to = -
-40039: # 836 "../../src/checked_float_inlines.hh" 3 4
-40039:          (__builtin_huge_val ())
-40039: # 836 "../../src/checked_float_inlines.hh"
-40039:                  ;
-40039:     return V_GT_MINUS_INFINITY;
-40039:   default:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return V_GT_MINUS_INFINITY;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Policy, typename T>
-40039: inline Result
-40039: set_pos_overflow_float(T& to, Rounding_Dir dir) {
-40039:   switch (round_dir(dir)) {
-40039:   case ROUND_DOWN:
-40039:     {
-40039:       Float<T> f;
-40039:       f.u.binary.set_max(false);
-40039:       to = f.value();
-40039:       return V_GT_SUP;
-40039:     }
-40039:   case ROUND_UP:
-40039:   case ROUND_IGNORE:
-40039:     to = 
-40039: # 857 "../../src/checked_float_inlines.hh" 3 4
-40039:         (__builtin_huge_val ())
-40039: # 857 "../../src/checked_float_inlines.hh"
-40039:                 ;
-40039:     return V_LT_PLUS_INFINITY;
-40039:   default:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return V_LT_PLUS_INFINITY;
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename T>
-40039: inline Result
-40039: assign_float_mpz(T& to, const mpz_class& from, Rounding_Dir dir) {
-40039:   int sign = sgn(from);
-40039:   if (sign == 0) {
-40039:     to = 0;
-40039:     return V_EQ;
-40039:   }
-40039:   mpz_srcptr from_z = from.get_mpz_t();
-40039:   size_t exponent = 
-40039: # 874 "../../src/checked_float_inlines.hh" 3 4
-40039:                    __gmpz_sizeinbase
-40039: # 874 "../../src/checked_float_inlines.hh"
-40039:                                  (from_z, 2) - 1;
-40039:   if (exponent > size_t(Float<T>::Binary::EXPONENT_MAX)) {
-40039:     if (sign < 0) {
-40039:       return set_neg_overflow_float<To_Policy>(to, dir);
-40039:     }
-40039:     else {
-40039:       return set_pos_overflow_float<To_Policy>(to, dir);
-40039:     }
-40039:   }
-40039:   unsigned long zeroes = 
-40039: # 883 "../../src/checked_float_inlines.hh" 3 4
-40039:                         __gmpn_scan1
-40039: # 883 "../../src/checked_float_inlines.hh"
-40039:                                  (from_z->_mp_d, 0);
-40039:   size_t meaningful_bits = exponent - zeroes;
-40039:   mpz_t mantissa;
-40039:   
-40039: # 886 "../../src/checked_float_inlines.hh" 3 4
-40039:  __gmpz_init
-40039: # 886 "../../src/checked_float_inlines.hh"
-40039:          (mantissa);
-40039:   if (exponent > Float<T>::Binary::MANTISSA_BITS) {
-40039:     
-40039: # 888 "../../src/checked_float_inlines.hh" 3 4
-40039:    __gmpz_tdiv_q_2exp
-40039: # 888 "../../src/checked_float_inlines.hh"
-40039:                   (mantissa,
-40039:                     from_z,
-40039:                     exponent - Float<T>::Binary::MANTISSA_BITS);
-40039:   }
-40039:   else {
-40039:     
-40039: # 893 "../../src/checked_float_inlines.hh" 3 4
-40039:    __gmpz_mul_2exp
-40039: # 893 "../../src/checked_float_inlines.hh"
-40039:                (mantissa, from_z, Float<T>::Binary::MANTISSA_BITS - exponent);
-40039:   }
-40039:   Float<T> f;
-40039:   f.u.binary.build(sign < 0, mantissa, static_cast<long>(exponent));
-40039:   
-40039: # 897 "../../src/checked_float_inlines.hh" 3 4
-40039:  __gmpz_clear
-40039: # 897 "../../src/checked_float_inlines.hh"
-40039:           (mantissa);
-40039:   to = f.value();
-40039:   if (meaningful_bits > Float<T>::Binary::MANTISSA_BITS) {
-40039:     if (sign < 0) {
-40039:       return round_lt_float<To_Policy>(to, dir);
-40039:     }
-40039:     else {
-40039:       return round_gt_float<To_Policy>(to, dir);
-40039:     }
-40039:   }
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename T>
-40039: inline Result
-40039: assign_float_mpq(T& to, const mpq_class& from, Rounding_Dir dir) {
-40039:   const mpz_class& numer = from.get_num();
-40039:   const mpz_class& denom = from.get_den();
-40039:   if (denom == 1) {
-40039:     return assign_float_mpz<To_Policy, From_Policy>(to, numer, dir);
-40039:   }
-40039:   mpz_srcptr numer_z = numer.get_mpz_t();
-40039:   mpz_srcptr denom_z = denom.get_mpz_t();
-40039:   int sign = sgn(numer);
-40039:   long exponent = static_cast<long>(
-40039: # 921 "../../src/checked_float_inlines.hh" 3 4
-40039:                                    __gmpz_sizeinbase
-40039: # 921 "../../src/checked_float_inlines.hh"
-40039:                                                  (numer_z, 2))
-40039:     - static_cast<long>(
-40039: # 922 "../../src/checked_float_inlines.hh" 3 4
-40039:                        __gmpz_sizeinbase
-40039: # 922 "../../src/checked_float_inlines.hh"
-40039:                                      (denom_z, 2));
-40039:   if (exponent < Float<T>::Binary::EXPONENT_MIN_DENORM) {
-40039:     to = 0;
-40039:   inexact:
-40039:     if (sign < 0) {
-40039:       return round_lt_float<To_Policy>(to, dir);
-40039:     }
-40039:     else {
-40039:       return round_gt_float<To_Policy>(to, dir);
-40039:     }
-40039:   }
-40039:   if (exponent > Float<T>::Binary::EXPONENT_MAX + 1) {
-40039:   overflow:
-40039:     if (sign < 0) {
-40039:       return set_neg_overflow_float<To_Policy>(to, dir);
-40039:     }
-40039:     else {
-40039:       return set_pos_overflow_float<To_Policy>(to, dir);
-40039:     }
-40039:   }
-40039:   unsigned int needed_bits = Float<T>::Binary::MANTISSA_BITS + 1;
-40039:   if (exponent < Float<T>::Binary::EXPONENT_MIN) {
-40039:     long diff = Float<T>::Binary::EXPONENT_MIN - exponent;
-40039:     needed_bits -= static_cast<unsigned int>(diff);
-40039:   }
-40039:   mpz_t mantissa;
-40039:   
-40039: # 948 "../../src/checked_float_inlines.hh" 3 4
-40039:  __gmpz_init
-40039: # 948 "../../src/checked_float_inlines.hh"
-40039:          (mantissa);
-40039:   {
-40039:     long shift = static_cast<long>(needed_bits) - exponent;
-40039:     if (shift > 0) {
-40039:       
-40039: # 952 "../../src/checked_float_inlines.hh" 3 4
-40039:      __gmpz_mul_2exp
-40039: # 952 "../../src/checked_float_inlines.hh"
-40039:                  (mantissa, numer_z, static_cast<unsigned long>(shift));
-40039:       numer_z = mantissa;
-40039:     }
-40039:     else if (shift < 0) {
-40039:       shift = -shift;
-40039:       
-40039: # 957 "../../src/checked_float_inlines.hh" 3 4
-40039:      __gmpz_mul_2exp
-40039: # 957 "../../src/checked_float_inlines.hh"
-40039:                  (mantissa, denom_z, static_cast<unsigned long>(shift));
-40039:       denom_z = mantissa;
-40039:     }
-40039:   }
-40039:   mpz_t r;
-40039:   
-40039: # 962 "../../src/checked_float_inlines.hh" 3 4
-40039:  __gmpz_init
-40039: # 962 "../../src/checked_float_inlines.hh"
-40039:          (r);
-40039:   
-40039: # 963 "../../src/checked_float_inlines.hh" 3 4
-40039:  __gmpz_tdiv_qr
-40039: # 963 "../../src/checked_float_inlines.hh"
-40039:             (mantissa, r, numer_z, denom_z);
-40039:   size_t bits = 
-40039: # 964 "../../src/checked_float_inlines.hh" 3 4
-40039:                __gmpz_sizeinbase
-40039: # 964 "../../src/checked_float_inlines.hh"
-40039:                              (mantissa, 2);
-40039:   bool inexact = (
-40039: # 965 "../../src/checked_float_inlines.hh" 3 4
-40039:                  ((
-40039: # 965 "../../src/checked_float_inlines.hh"
-40039:                  r
-40039: # 965 "../../src/checked_float_inlines.hh" 3 4
-40039:                  )->_mp_size < 0 ? -1 : (
-40039: # 965 "../../src/checked_float_inlines.hh"
-40039:                  r
-40039: # 965 "../../src/checked_float_inlines.hh" 3 4
-40039:                  )->_mp_size > 0) 
-40039: # 965 "../../src/checked_float_inlines.hh"
-40039:                             != 0);
-40039:   
-40039: # 966 "../../src/checked_float_inlines.hh" 3 4
-40039:  __gmpz_clear
-40039: # 966 "../../src/checked_float_inlines.hh"
-40039:           (r);
-40039:   if (bits == needed_bits + 1) {
-40039:     inexact = (inexact || 
-40039: # 968 "../../src/checked_float_inlines.hh" 3 4
-40039:                          (((
-40039: # 968 "../../src/checked_float_inlines.hh"
-40039:                          mantissa
-40039: # 968 "../../src/checked_float_inlines.hh" 3 4
-40039:                          )->_mp_size != 0) & (static_cast<int> ((
-40039: # 968 "../../src/checked_float_inlines.hh"
-40039:                          mantissa
-40039: # 968 "../../src/checked_float_inlines.hh" 3 4
-40039:                          )->_mp_d[0])))
-40039: # 968 "../../src/checked_float_inlines.hh"
-40039:                                             );
-40039:     
-40039: # 969 "../../src/checked_float_inlines.hh" 3 4
-40039:    __gmpz_tdiv_q_2exp
-40039: # 969 "../../src/checked_float_inlines.hh"
-40039:                   (mantissa, mantissa, 1);
-40039:   }
-40039:   else {
-40039:     --exponent;
-40039:   }
-40039:   if (exponent > Float<T>::Binary::EXPONENT_MAX) {
-40039:     
-40039: # 975 "../../src/checked_float_inlines.hh" 3 4
-40039:    __gmpz_clear
-40039: # 975 "../../src/checked_float_inlines.hh"
-40039:             (mantissa);
-40039:     goto overflow;
-40039:   }
-40039:   else if (exponent < Float<T>::Binary::EXPONENT_MIN - 1) {
-40039: 
-40039:     exponent = Float<T>::Binary::EXPONENT_MIN - 1;
-40039:   }
-40039:   Float<T> f;
-40039:   f.u.binary.build(sign < 0, mantissa, exponent);
-40039:   
-40039: # 984 "../../src/checked_float_inlines.hh" 3 4
-40039:  __gmpz_clear
-40039: # 984 "../../src/checked_float_inlines.hh"
-40039:           (mantissa);
-40039:   to = f.value();
-40039:   if (inexact) {
-40039:     goto inexact;
-40039:   }
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename Type>
-40039: inline Result
-40039: add_mul_float(Type& to, const Type x, const Type y, Rounding_Dir dir) {
-40039:   if (To_Policy::check_inf_mul_zero
-40039:       && ((x == 0 && is_inf_float<From2_Policy>(y))
-40039:           ||
-40039:           (y == 0 && is_inf_float<From1_Policy>(x)))) {
-40039:     return assign_nan<To_Policy>(to, V_INF_MUL_ZERO);
-40039:   }
-40039: 
-40039:   prepare_inexact<To_Policy>(dir);
-40039:   if (fpu_direct_rounding(dir)) {
-40039:     to = multiply_add(x, y, to);
-40039:   }
-40039:   else if (fpu_inverse_rounding(dir)) {
-40039:     to = multiply_add(-x, y, -to);
-40039:     limit_precision(to);
-40039:     to = -to;
-40039:   }
-40039:   else {
-40039:     fpu_rounding_control_word_type old
-40039:       = fpu_save_rounding_direction(round_fpu_dir(dir));
-40039:     limit_precision(x);
-40039:     limit_precision(y);
-40039:     limit_precision(to);
-40039:     to = multiply_add(x, y, to);
-40039:     limit_precision(to);
-40039:     fpu_restore_rounding_direction(old);
-40039:   }
-40039:   if (To_Policy::fpu_check_nan_result && is_nan<To_Policy>(to)) {
-40039:     return V_NAN;
-40039:   }
-40039:   return result_relation<To_Policy>(dir);
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy, typename Type>
-40039: inline Result
-40039: sub_mul_float(Type& to, const Type x, const Type y, Rounding_Dir dir) {
-40039:   if (To_Policy::check_inf_mul_zero
-40039:       && ((x == 0 && is_inf_float<From2_Policy>(y))
-40039:           ||
-40039:           (y == 0 && is_inf_float<From1_Policy>(x)))) {
-40039:     return assign_nan<To_Policy>(to, V_INF_MUL_ZERO);
-40039:   }
-40039: 
-40039:   prepare_inexact<To_Policy>(dir);
-40039:   if (fpu_direct_rounding(dir)) {
-40039:     to = multiply_add(x, -y, to);
-40039:   }
-40039:   else if (fpu_inverse_rounding(dir)) {
-40039:     to = multiply_add(x, y, -to);
-40039:     limit_precision(to);
-40039:     to = -to;
-40039:   }
-40039:   else {
-40039:     fpu_rounding_control_word_type old
-40039:       = fpu_save_rounding_direction(round_fpu_dir(dir));
-40039:     limit_precision(x);
-40039:     limit_precision(y);
-40039:     limit_precision(to);
-40039:     to = multiply_add(x, -y, to);
-40039:     limit_precision(to);
-40039:     fpu_restore_rounding_direction(old);
-40039:   }
-40039:   if (To_Policy::fpu_check_nan_result && is_nan<To_Policy>(to)) {
-40039:     return V_NAN;
-40039:   }
-40039:   return result_relation<To_Policy>(dir);
-40039: }
-40039: 
-40039: template <typename From>
-40039: inline void
-40039: assign_mpq_numeric_float(mpq_class& to, const From from) {
-40039:   to = from;
-40039: }
-40039: 
-40039: template <>
-40039: inline void
-40039: assign_mpq_numeric_float(mpq_class& to, const long double from) {
-40039:   to = 0;
-40039:   if (from == 0.0L) {
-40039:     return;
-40039:   }
-40039:   mpz_class& num = to.get_num();
-40039:   mpz_class& den = to.get_den();
-40039:   int exp;
-40039:   long double n = std::frexp(from, &exp);
-40039:   bool neg = false;
-40039:   if (n < 0.0L) {
-40039:     neg = true;
-40039:     n = -n;
-40039:   }
-40039:   const long double mult = static_cast<long double>(
-40039: # 1085 "../../src/checked_float_inlines.hh" 3 4
-40039:                                                    (0x7fffffffffffffffL * 2UL + 1UL)
-40039: # 1085 "../../src/checked_float_inlines.hh"
-40039:                                                             ) + 1.0L;
-40039:   const unsigned int bits = sizeof(unsigned long) * 8;
-40039:   while (true) {
-40039:     n *= mult;
-40039:     exp -= bits;
-40039:     const long double intpart = std::floor(n);
-40039:     num += static_cast<unsigned long>(intpart);
-40039:     n -= intpart;
-40039:     if (n == 0.0L) {
-40039:       break;
-40039:     }
-40039:     num <<= bits;
-40039:   }
-40039:   if (exp < 0) {
-40039:     den <<= -exp;
-40039:   }
-40039:   else {
-40039:     num <<= exp;
-40039:   }
-40039:   if (neg) {
-40039:     to = -to;
-40039:   }
-40039:   to.canonicalize();
-40039: }
-40039: 
-40039: template <typename Policy, typename Type>
-40039: inline Result
-40039: output_float(std::ostream& os, const Type from, const Numeric_Format&,
-40039:              Rounding_Dir) {
-40039:   if (from == 0) {
-40039:     os << "0";
-40039:   }
-40039:   else if (is_minf<Policy>(from)) {
-40039:     os << "-inf";
-40039:   }
-40039:   else if (is_pinf<Policy>(from)) {
-40039:     os << "+inf";
-40039:   }
-40039:   else if (is_nan<Policy>(from)) {
-40039:     os << "nan";
-40039:   }
-40039:   else {
-40039:     mpq_class q;
-40039:     assign_mpq_numeric_float(q, from);
-40039:     std::string s = float_mpq_to_string(q);
-40039:     os << s;
-40039:   }
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, Rounding_Dir a1) { return assign_float_float_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, double> { static inline Result function( float& arg1, const double &arg2, Rounding_Dir a1) { return assign_float_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, float> { static inline Result function( double& arg1, const float &arg2, Rounding_Dir a1) { return assign_float_float_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, long double> { static inline Result function( float& arg1, const long double &arg2, Rounding_Dir a1) { return assign_float_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, float> { static inline Result function( long double& arg1, const float &arg2, Rounding_Dir a1) { return assign_float_float_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, Rounding_Dir a1) { return assign_float_float_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, long double> { static inline Result function( double& arg1, const long double &arg2, Rounding_Dir a1) { return assign_float_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, double> { static inline Result function( long double& arg1, const double &arg2, Rounding_Dir a1) { return assign_float_float_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, Rounding_Dir a1) { return assign_float_float_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy> struct classify_function_struct<Policy, float> { static inline Result function(const float& arg, bool a1, bool a2, bool a3) { return classify_float<Policy>(arg, a1, a2, a3); } };
-40039: template <typename Policy> struct is_nan_function_struct<Policy, float> { static inline bool function(const float& arg) { return is_nan_float<Policy>(arg); } };
-40039: template <typename Policy> struct is_minf_function_struct<Policy, float> { static inline bool function(const float& arg) { return is_minf_float<Policy>(arg); } };
-40039: template <typename Policy> struct is_pinf_function_struct<Policy, float> { static inline bool function(const float& arg) { return is_pinf_float<Policy>(arg); } };
-40039: template <typename Policy> struct assign_special_function_struct<Policy, float> { static inline Result function( float& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_float<Policy>(arg, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, char> { static inline Result function( float& arg1, const char &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, signed char> { static inline Result function( float& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, signed short> { static inline Result function( float& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, signed int> { static inline Result function( float& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, signed long> { static inline Result function( float& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, signed long long> { static inline Result function( float& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, unsigned char> { static inline Result function( float& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, unsigned short> { static inline Result function( float& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, unsigned int> { static inline Result function( float& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, unsigned long> { static inline Result function( float& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, unsigned long long> { static inline Result function( float& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, mpz_class> { static inline Result function( float& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_float_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, mpq_class> { static inline Result function( float& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_float_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, float, float> { static inline void function( float& arg1, const float &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy> struct is_int_function_struct<Policy, float> { static inline bool function(const float& arg) { return is_int_float<Policy>(arg); } };
-40039: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, Rounding_Dir a1) { return floor_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, Rounding_Dir a1) { return ceil_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, Rounding_Dir a1) { return trunc_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, Rounding_Dir a1) { return neg_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, Rounding_Dir a1) { return abs_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, float, float, float> { static inline Result function( float& arg1, const float &arg2, const float &arg3, Rounding_Dir a1) { return add_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, float, float, float> { static inline Result function( float& arg1, const float &arg2, const float &arg3, Rounding_Dir a1) { return sub_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, float, float, float> { static inline Result function( float& arg1, const float &arg2, const float &arg3, Rounding_Dir a1) { return mul_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, float, float, float> { static inline Result function( float& arg1, const float &arg2, const float &arg3, Rounding_Dir a1) { return div_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, float, float, float> { static inline Result function( float& arg1, const float &arg2, const float &arg3, Rounding_Dir a1) { return rem_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, Rounding_Dir a1) { return sqrt_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, float, float, float> { static inline Result function( float& arg1, const float &arg2, const float &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, float, float, float, float, float> { static inline Result function( float& arg1, float &arg2, float &arg3, const float &arg4, const float &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, float, float, float> { static inline Result function( float& arg1, const float &arg2, const float &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy> struct sgn_function_struct<Policy, float> { static inline Result_Relation function(const float& arg) { return sgn_float<Policy>(arg); } };
-40039: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, float, float> { static inline Result_Relation function(const float& arg1, const float &arg2) { return cmp_float<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, float, float, float> { static inline Result function( float& arg1, const float &arg2, const float &arg3, Rounding_Dir a1) { return add_mul_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, float, float, float> { static inline Result function( float& arg1, const float &arg2, const float &arg3, Rounding_Dir a1) { return sub_mul_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy> struct input_function_struct<Policy, float> { static inline Result function( float& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct output_function_struct<Policy, float> { static inline Result function(std::ostream& b1, const float& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_float<Policy>(b1, arg, a1, a2); } };
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy> struct classify_function_struct<Policy, double> { static inline Result function(const double& arg, bool a1, bool a2, bool a3) { return classify_float<Policy>(arg, a1, a2, a3); } };
-40039: template <typename Policy> struct is_nan_function_struct<Policy, double> { static inline bool function(const double& arg) { return is_nan_float<Policy>(arg); } };
-40039: template <typename Policy> struct is_minf_function_struct<Policy, double> { static inline bool function(const double& arg) { return is_minf_float<Policy>(arg); } };
-40039: template <typename Policy> struct is_pinf_function_struct<Policy, double> { static inline bool function(const double& arg) { return is_pinf_float<Policy>(arg); } };
-40039: template <typename Policy> struct assign_special_function_struct<Policy, double> { static inline Result function( double& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_float<Policy>(arg, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, char> { static inline Result function( double& arg1, const char &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, signed char> { static inline Result function( double& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, signed short> { static inline Result function( double& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, signed int> { static inline Result function( double& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, signed long> { static inline Result function( double& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, signed long long> { static inline Result function( double& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, unsigned char> { static inline Result function( double& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, unsigned short> { static inline Result function( double& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, unsigned int> { static inline Result function( double& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, unsigned long> { static inline Result function( double& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, unsigned long long> { static inline Result function( double& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, mpz_class> { static inline Result function( double& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_float_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, mpq_class> { static inline Result function( double& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_float_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, double, double> { static inline void function( double& arg1, const double &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy> struct is_int_function_struct<Policy, double> { static inline bool function(const double& arg) { return is_int_float<Policy>(arg); } };
-40039: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, Rounding_Dir a1) { return floor_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, Rounding_Dir a1) { return ceil_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, Rounding_Dir a1) { return trunc_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, Rounding_Dir a1) { return neg_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, Rounding_Dir a1) { return abs_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, double, double, double> { static inline Result function( double& arg1, const double &arg2, const double &arg3, Rounding_Dir a1) { return add_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, double, double, double> { static inline Result function( double& arg1, const double &arg2, const double &arg3, Rounding_Dir a1) { return sub_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, double, double, double> { static inline Result function( double& arg1, const double &arg2, const double &arg3, Rounding_Dir a1) { return mul_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, double, double, double> { static inline Result function( double& arg1, const double &arg2, const double &arg3, Rounding_Dir a1) { return div_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, double, double, double> { static inline Result function( double& arg1, const double &arg2, const double &arg3, Rounding_Dir a1) { return rem_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, Rounding_Dir a1) { return sqrt_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, double, double, double> { static inline Result function( double& arg1, const double &arg2, const double &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, double, double, double, double, double> { static inline Result function( double& arg1, double &arg2, double &arg3, const double &arg4, const double &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, double, double, double> { static inline Result function( double& arg1, const double &arg2, const double &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy> struct sgn_function_struct<Policy, double> { static inline Result_Relation function(const double& arg) { return sgn_float<Policy>(arg); } };
-40039: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, double, double> { static inline Result_Relation function(const double& arg1, const double &arg2) { return cmp_float<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, double, double, double> { static inline Result function( double& arg1, const double &arg2, const double &arg3, Rounding_Dir a1) { return add_mul_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, double, double, double> { static inline Result function( double& arg1, const double &arg2, const double &arg3, Rounding_Dir a1) { return sub_mul_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy> struct input_function_struct<Policy, double> { static inline Result function( double& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct output_function_struct<Policy, double> { static inline Result function(std::ostream& b1, const double& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_float<Policy>(b1, arg, a1, a2); } };
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy> struct classify_function_struct<Policy, long double> { static inline Result function(const long double& arg, bool a1, bool a2, bool a3) { return classify_float<Policy>(arg, a1, a2, a3); } };
-40039: template <typename Policy> struct is_nan_function_struct<Policy, long double> { static inline bool function(const long double& arg) { return is_nan_float<Policy>(arg); } };
-40039: template <typename Policy> struct is_minf_function_struct<Policy, long double> { static inline bool function(const long double& arg) { return is_minf_float<Policy>(arg); } };
-40039: template <typename Policy> struct is_pinf_function_struct<Policy, long double> { static inline bool function(const long double& arg) { return is_pinf_float<Policy>(arg); } };
-40039: template <typename Policy> struct assign_special_function_struct<Policy, long double> { static inline Result function( long double& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_float<Policy>(arg, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, char> { static inline Result function( long double& arg1, const char &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, signed char> { static inline Result function( long double& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, signed short> { static inline Result function( long double& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, signed int> { static inline Result function( long double& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, signed long> { static inline Result function( long double& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, signed long long> { static inline Result function( long double& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, unsigned char> { static inline Result function( long double& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, unsigned short> { static inline Result function( long double& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, unsigned int> { static inline Result function( long double& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, unsigned long> { static inline Result function( long double& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, unsigned long long> { static inline Result function( long double& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, mpz_class> { static inline Result function( long double& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_float_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, mpq_class> { static inline Result function( long double& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_float_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, long double, long double> { static inline void function( long double& arg1, const long double &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy> struct is_int_function_struct<Policy, long double> { static inline bool function(const long double& arg) { return is_int_float<Policy>(arg); } };
-40039: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, Rounding_Dir a1) { return floor_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, Rounding_Dir a1) { return ceil_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, Rounding_Dir a1) { return trunc_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, Rounding_Dir a1) { return neg_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, Rounding_Dir a1) { return abs_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, long double, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, const long double &arg3, Rounding_Dir a1) { return add_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, long double, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, const long double &arg3, Rounding_Dir a1) { return sub_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, long double, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, const long double &arg3, Rounding_Dir a1) { return mul_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, long double, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, const long double &arg3, Rounding_Dir a1) { return div_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, long double, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, const long double &arg3, Rounding_Dir a1) { return rem_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, Rounding_Dir a1) { return sqrt_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, long double, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, const long double &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, long double, long double, long double, long double, long double> { static inline Result function( long double& arg1, long double &arg2, long double &arg3, const long double &arg4, const long double &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, long double, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, const long double &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy> struct sgn_function_struct<Policy, long double> { static inline Result_Relation function(const long double& arg) { return sgn_float<Policy>(arg); } };
-40039: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, long double, long double> { static inline Result_Relation function(const long double& arg1, const long double &arg2) { return cmp_float<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, long double, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, const long double &arg3, Rounding_Dir a1) { return add_mul_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, long double, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, const long double &arg3, Rounding_Dir a1) { return sub_mul_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: template <typename Policy> struct input_function_struct<Policy, long double> { static inline Result function( long double& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct output_function_struct<Policy, long double> { static inline Result function(std::ostream& b1, const long double& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_float<Policy>(b1, arg, a1, a2); } };
-40039: 
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 703 "../../src/checked_defs.hh" 2
-40039: # 1 "../../src/checked_mpz_inlines.hh" 1
-40039: # 27 "../../src/checked_mpz_inlines.hh"
-40039: # 1 "/usr/include/c++/8/sstream" 1 3
-40039: # 36 "/usr/include/c++/8/sstream" 3
-40039:        
-40039: # 37 "/usr/include/c++/8/sstream" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 41 "/usr/include/c++/8/sstream" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: namespace __cxx11 {
-40039: # 64 "/usr/include/c++/8/sstream" 3
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     class basic_stringbuf : public basic_streambuf<_CharT, _Traits>
-40039:     {
-40039:       struct __xfer_bufptrs;
-40039:     public:
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef _Traits traits_type;
-40039: 
-40039: 
-40039:       typedef _Alloc allocator_type;
-40039:       typedef typename traits_type::int_type int_type;
-40039:       typedef typename traits_type::pos_type pos_type;
-40039:       typedef typename traits_type::off_type off_type;
-40039: 
-40039:       typedef basic_streambuf<char_type, traits_type> __streambuf_type;
-40039:       typedef basic_string<char_type, _Traits, _Alloc> __string_type;
-40039:       typedef typename __string_type::size_type __size_type;
-40039: 
-40039:     protected:
-40039: 
-40039:       ios_base::openmode _M_mode;
-40039: 
-40039: 
-40039:       __string_type _M_string;
-40039: 
-40039:     public:
-40039: # 99 "/usr/include/c++/8/sstream" 3
-40039:       explicit
-40039:       basic_stringbuf(ios_base::openmode __mode = ios_base::in | ios_base::out)
-40039:       : __streambuf_type(), _M_mode(__mode), _M_string()
-40039:       { }
-40039: # 112 "/usr/include/c++/8/sstream" 3
-40039:       explicit
-40039:       basic_stringbuf(const __string_type& __str,
-40039:         ios_base::openmode __mode = ios_base::in | ios_base::out)
-40039:       : __streambuf_type(), _M_mode(),
-40039:  _M_string(__str.data(), __str.size(), __str.get_allocator())
-40039:       { _M_stringbuf_init(__mode); }
-40039: 
-40039: 
-40039:       basic_stringbuf(const basic_stringbuf&) = delete;
-40039: 
-40039:       basic_stringbuf(basic_stringbuf&& __rhs)
-40039:       : basic_stringbuf(std::move(__rhs), __xfer_bufptrs(__rhs, this))
-40039:       { __rhs._M_sync(const_cast<char_type*>(__rhs._M_string.data()), 0, 0); }
-40039: 
-40039: 
-40039: 
-40039:       basic_stringbuf&
-40039:       operator=(const basic_stringbuf&) = delete;
-40039: 
-40039:       basic_stringbuf&
-40039:       operator=(basic_stringbuf&& __rhs)
-40039:       {
-40039:  __xfer_bufptrs __st{__rhs, this};
-40039:  const __streambuf_type& __base = __rhs;
-40039:  __streambuf_type::operator=(__base);
-40039:  this->pubimbue(__rhs.getloc());
-40039:  _M_mode = __rhs._M_mode;
-40039:  _M_string = std::move(__rhs._M_string);
-40039:  __rhs._M_sync(const_cast<char_type*>(__rhs._M_string.data()), 0, 0);
-40039:  return *this;
-40039:       }
-40039: 
-40039:       void
-40039:       swap(basic_stringbuf& __rhs)
-40039:       {
-40039:  __xfer_bufptrs __l_st{*this, std::__addressof(__rhs)};
-40039:  __xfer_bufptrs __r_st{__rhs, this};
-40039:  __streambuf_type& __base = __rhs;
-40039:  __streambuf_type::swap(__base);
-40039:  __rhs.pubimbue(this->pubimbue(__rhs.getloc()));
-40039:  std::swap(_M_mode, __rhs._M_mode);
-40039:  std::swap(_M_string, __rhs._M_string);
-40039:       }
-40039: # 166 "/usr/include/c++/8/sstream" 3
-40039:       __string_type
-40039:       str() const
-40039:       {
-40039:  __string_type __ret(_M_string.get_allocator());
-40039:  if (this->pptr())
-40039:    {
-40039: 
-40039:      if (this->pptr() > this->egptr())
-40039:        __ret.assign(this->pbase(), this->pptr());
-40039:      else
-40039:        __ret.assign(this->pbase(), this->egptr());
-40039:    }
-40039:  else
-40039:    __ret = _M_string;
-40039:  return __ret;
-40039:       }
-40039: # 190 "/usr/include/c++/8/sstream" 3
-40039:       void
-40039:       str(const __string_type& __s)
-40039:       {
-40039: 
-40039: 
-40039:  _M_string.assign(__s.data(), __s.size());
-40039:  _M_stringbuf_init(_M_mode);
-40039:       }
-40039: 
-40039:     protected:
-40039: 
-40039:       void
-40039:       _M_stringbuf_init(ios_base::openmode __mode)
-40039:       {
-40039:  _M_mode = __mode;
-40039:  __size_type __len = 0;
-40039:  if (_M_mode & (ios_base::ate | ios_base::app))
-40039:    __len = _M_string.size();
-40039:  _M_sync(const_cast<char_type*>(_M_string.data()), 0, __len);
-40039:       }
-40039: 
-40039:       virtual streamsize
-40039:       showmanyc()
-40039:       {
-40039:  streamsize __ret = -1;
-40039:  if (_M_mode & ios_base::in)
-40039:    {
-40039:      _M_update_egptr();
-40039:      __ret = this->egptr() - this->gptr();
-40039:    }
-40039:  return __ret;
-40039:       }
-40039: 
-40039:       virtual int_type
-40039:       underflow();
-40039: 
-40039:       virtual int_type
-40039:       pbackfail(int_type __c = traits_type::eof());
-40039: 
-40039:       virtual int_type
-40039:       overflow(int_type __c = traits_type::eof());
-40039: # 243 "/usr/include/c++/8/sstream" 3
-40039:       virtual __streambuf_type*
-40039:       setbuf(char_type* __s, streamsize __n)
-40039:       {
-40039:  if (__s && __n >= 0)
-40039:    {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:      _M_string.clear();
-40039: 
-40039: 
-40039:      _M_sync(__s, __n, 0);
-40039:    }
-40039:  return this;
-40039:       }
-40039: 
-40039:       virtual pos_type
-40039:       seekoff(off_type __off, ios_base::seekdir __way,
-40039:        ios_base::openmode __mode = ios_base::in | ios_base::out);
-40039: 
-40039:       virtual pos_type
-40039:       seekpos(pos_type __sp,
-40039:        ios_base::openmode __mode = ios_base::in | ios_base::out);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_sync(char_type* __base, __size_type __i, __size_type __o);
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_update_egptr()
-40039:       {
-40039:  const bool __testin = _M_mode & ios_base::in;
-40039:  if (this->pptr() && this->pptr() > this->egptr())
-40039:    {
-40039:      if (__testin)
-40039:        this->setg(this->eback(), this->gptr(), this->pptr());
-40039:      else
-40039:        this->setg(this->pptr(), this->pptr(), this->pptr());
-40039:    }
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_pbump(char_type* __pbeg, char_type* __pend, off_type __off);
-40039: 
-40039:     private:
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       struct __xfer_bufptrs
-40039:       {
-40039:  __xfer_bufptrs(const basic_stringbuf& __from, basic_stringbuf* __to)
-40039:  : _M_to{__to}, _M_goff{-1, -1, -1}, _M_poff{-1, -1, -1}
-40039:  {
-40039:    const _CharT* const __str = __from._M_string.data();
-40039:    const _CharT* __end = nullptr;
-40039:    if (__from.eback())
-40039:      {
-40039:        _M_goff[0] = __from.eback() - __str;
-40039:        _M_goff[1] = __from.gptr() - __str;
-40039:        _M_goff[2] = __from.egptr() - __str;
-40039:        __end = __from.egptr();
-40039:      }
-40039:    if (__from.pbase())
-40039:      {
-40039:        _M_poff[0] = __from.pbase() - __str;
-40039:        _M_poff[1] = __from.pptr() - __from.pbase();
-40039:        _M_poff[2] = __from.epptr() - __str;
-40039:        if (__from.pptr() > __end)
-40039:   __end = __from.pptr();
-40039:      }
-40039: 
-40039: 
-40039:    if (__end)
-40039:      {
-40039: 
-40039: 
-40039:        auto& __mut_from = const_cast<basic_stringbuf&>(__from);
-40039:        __mut_from._M_string._M_length(__end - __str);
-40039:      }
-40039:  }
-40039: 
-40039:  ~__xfer_bufptrs()
-40039:  {
-40039:    char_type* __str = const_cast<char_type*>(_M_to->_M_string.data());
-40039:    if (_M_goff[0] != -1)
-40039:      _M_to->setg(__str+_M_goff[0], __str+_M_goff[1], __str+_M_goff[2]);
-40039:    if (_M_poff[0] != -1)
-40039:      _M_to->_M_pbump(__str+_M_poff[0], __str+_M_poff[2], _M_poff[1]);
-40039:  }
-40039: 
-40039:  basic_stringbuf* _M_to;
-40039:  off_type _M_goff[3];
-40039:  off_type _M_poff[3];
-40039:       };
-40039: # 357 "/usr/include/c++/8/sstream" 3
-40039:       basic_stringbuf(basic_stringbuf&& __rhs, __xfer_bufptrs&&)
-40039:       : __streambuf_type(static_cast<const __streambuf_type&>(__rhs)),
-40039:       _M_mode(__rhs._M_mode), _M_string(std::move(__rhs._M_string))
-40039:       { }
-40039: 
-40039:     };
-40039: # 380 "/usr/include/c++/8/sstream" 3
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     class basic_istringstream : public basic_istream<_CharT, _Traits>
-40039:     {
-40039:     public:
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef _Traits traits_type;
-40039: 
-40039: 
-40039:       typedef _Alloc allocator_type;
-40039:       typedef typename traits_type::int_type int_type;
-40039:       typedef typename traits_type::pos_type pos_type;
-40039:       typedef typename traits_type::off_type off_type;
-40039: 
-40039: 
-40039:       typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
-40039:       typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type;
-40039:       typedef basic_istream<char_type, traits_type> __istream_type;
-40039: 
-40039:     private:
-40039:       __stringbuf_type _M_stringbuf;
-40039: 
-40039:     public:
-40039: # 416 "/usr/include/c++/8/sstream" 3
-40039:       explicit
-40039:       basic_istringstream(ios_base::openmode __mode = ios_base::in)
-40039:       : __istream_type(), _M_stringbuf(__mode | ios_base::in)
-40039:       { this->init(&_M_stringbuf); }
-40039: # 434 "/usr/include/c++/8/sstream" 3
-40039:       explicit
-40039:       basic_istringstream(const __string_type& __str,
-40039:      ios_base::openmode __mode = ios_base::in)
-40039:       : __istream_type(), _M_stringbuf(__str, __mode | ios_base::in)
-40039:       { this->init(&_M_stringbuf); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       ~basic_istringstream()
-40039:       { }
-40039: 
-40039: 
-40039:       basic_istringstream(const basic_istringstream&) = delete;
-40039: 
-40039:       basic_istringstream(basic_istringstream&& __rhs)
-40039:       : __istream_type(std::move(__rhs)),
-40039:       _M_stringbuf(std::move(__rhs._M_stringbuf))
-40039:       { __istream_type::set_rdbuf(&_M_stringbuf); }
-40039: 
-40039: 
-40039: 
-40039:       basic_istringstream&
-40039:       operator=(const basic_istringstream&) = delete;
-40039: 
-40039:       basic_istringstream&
-40039:       operator=(basic_istringstream&& __rhs)
-40039:       {
-40039:  __istream_type::operator=(std::move(__rhs));
-40039:  _M_stringbuf = std::move(__rhs._M_stringbuf);
-40039:  return *this;
-40039:       }
-40039: 
-40039:       void
-40039:       swap(basic_istringstream& __rhs)
-40039:       {
-40039:  __istream_type::swap(__rhs);
-40039:  _M_stringbuf.swap(__rhs._M_stringbuf);
-40039:       }
-40039: # 485 "/usr/include/c++/8/sstream" 3
-40039:       __stringbuf_type*
-40039:       rdbuf() const
-40039:       { return const_cast<__stringbuf_type*>(&_M_stringbuf); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       __string_type
-40039:       str() const
-40039:       { return _M_stringbuf.str(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       str(const __string_type& __s)
-40039:       { _M_stringbuf.str(__s); }
-40039:     };
-40039: # 524 "/usr/include/c++/8/sstream" 3
-40039:   template <typename _CharT, typename _Traits, typename _Alloc>
-40039:     class basic_ostringstream : public basic_ostream<_CharT, _Traits>
-40039:     {
-40039:     public:
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef _Traits traits_type;
-40039: 
-40039: 
-40039:       typedef _Alloc allocator_type;
-40039:       typedef typename traits_type::int_type int_type;
-40039:       typedef typename traits_type::pos_type pos_type;
-40039:       typedef typename traits_type::off_type off_type;
-40039: 
-40039: 
-40039:       typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
-40039:       typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type;
-40039:       typedef basic_ostream<char_type, traits_type> __ostream_type;
-40039: 
-40039:     private:
-40039:       __stringbuf_type _M_stringbuf;
-40039: 
-40039:     public:
-40039: # 560 "/usr/include/c++/8/sstream" 3
-40039:       explicit
-40039:       basic_ostringstream(ios_base::openmode __mode = ios_base::out)
-40039:       : __ostream_type(), _M_stringbuf(__mode | ios_base::out)
-40039:       { this->init(&_M_stringbuf); }
-40039: # 578 "/usr/include/c++/8/sstream" 3
-40039:       explicit
-40039:       basic_ostringstream(const __string_type& __str,
-40039:      ios_base::openmode __mode = ios_base::out)
-40039:       : __ostream_type(), _M_stringbuf(__str, __mode | ios_base::out)
-40039:       { this->init(&_M_stringbuf); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       ~basic_ostringstream()
-40039:       { }
-40039: 
-40039: 
-40039:       basic_ostringstream(const basic_ostringstream&) = delete;
-40039: 
-40039:       basic_ostringstream(basic_ostringstream&& __rhs)
-40039:       : __ostream_type(std::move(__rhs)),
-40039:       _M_stringbuf(std::move(__rhs._M_stringbuf))
-40039:       { __ostream_type::set_rdbuf(&_M_stringbuf); }
-40039: 
-40039: 
-40039: 
-40039:       basic_ostringstream&
-40039:       operator=(const basic_ostringstream&) = delete;
-40039: 
-40039:       basic_ostringstream&
-40039:       operator=(basic_ostringstream&& __rhs)
-40039:       {
-40039:  __ostream_type::operator=(std::move(__rhs));
-40039:  _M_stringbuf = std::move(__rhs._M_stringbuf);
-40039:  return *this;
-40039:       }
-40039: 
-40039:       void
-40039:       swap(basic_ostringstream& __rhs)
-40039:       {
-40039:  __ostream_type::swap(__rhs);
-40039:  _M_stringbuf.swap(__rhs._M_stringbuf);
-40039:       }
-40039: # 629 "/usr/include/c++/8/sstream" 3
-40039:       __stringbuf_type*
-40039:       rdbuf() const
-40039:       { return const_cast<__stringbuf_type*>(&_M_stringbuf); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       __string_type
-40039:       str() const
-40039:       { return _M_stringbuf.str(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       str(const __string_type& __s)
-40039:       { _M_stringbuf.str(__s); }
-40039:     };
-40039: # 668 "/usr/include/c++/8/sstream" 3
-40039:   template <typename _CharT, typename _Traits, typename _Alloc>
-40039:     class basic_stringstream : public basic_iostream<_CharT, _Traits>
-40039:     {
-40039:     public:
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef _Traits traits_type;
-40039: 
-40039: 
-40039:       typedef _Alloc allocator_type;
-40039:       typedef typename traits_type::int_type int_type;
-40039:       typedef typename traits_type::pos_type pos_type;
-40039:       typedef typename traits_type::off_type off_type;
-40039: 
-40039: 
-40039:       typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
-40039:       typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type;
-40039:       typedef basic_iostream<char_type, traits_type> __iostream_type;
-40039: 
-40039:     private:
-40039:       __stringbuf_type _M_stringbuf;
-40039: 
-40039:     public:
-40039: # 703 "/usr/include/c++/8/sstream" 3
-40039:       explicit
-40039:       basic_stringstream(ios_base::openmode __m = ios_base::out | ios_base::in)
-40039:       : __iostream_type(), _M_stringbuf(__m)
-40039:       { this->init(&_M_stringbuf); }
-40039: # 719 "/usr/include/c++/8/sstream" 3
-40039:       explicit
-40039:       basic_stringstream(const __string_type& __str,
-40039:     ios_base::openmode __m = ios_base::out | ios_base::in)
-40039:       : __iostream_type(), _M_stringbuf(__str, __m)
-40039:       { this->init(&_M_stringbuf); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       ~basic_stringstream()
-40039:       { }
-40039: 
-40039: 
-40039:       basic_stringstream(const basic_stringstream&) = delete;
-40039: 
-40039:       basic_stringstream(basic_stringstream&& __rhs)
-40039:       : __iostream_type(std::move(__rhs)),
-40039:       _M_stringbuf(std::move(__rhs._M_stringbuf))
-40039:       { __iostream_type::set_rdbuf(&_M_stringbuf); }
-40039: 
-40039: 
-40039: 
-40039:       basic_stringstream&
-40039:       operator=(const basic_stringstream&) = delete;
-40039: 
-40039:       basic_stringstream&
-40039:       operator=(basic_stringstream&& __rhs)
-40039:       {
-40039:  __iostream_type::operator=(std::move(__rhs));
-40039:  _M_stringbuf = std::move(__rhs._M_stringbuf);
-40039:  return *this;
-40039:       }
-40039: 
-40039:       void
-40039:       swap(basic_stringstream& __rhs)
-40039:       {
-40039:  __iostream_type::swap(__rhs);
-40039:  _M_stringbuf.swap(__rhs._M_stringbuf);
-40039:       }
-40039: # 770 "/usr/include/c++/8/sstream" 3
-40039:       __stringbuf_type*
-40039:       rdbuf() const
-40039:       { return const_cast<__stringbuf_type*>(&_M_stringbuf); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       __string_type
-40039:       str() const
-40039:       { return _M_stringbuf.str(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       str(const __string_type& __s)
-40039:       { _M_stringbuf.str(__s); }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template <class _CharT, class _Traits, class _Allocator>
-40039:     inline void
-40039:     swap(basic_stringbuf<_CharT, _Traits, _Allocator>& __x,
-40039:   basic_stringbuf<_CharT, _Traits, _Allocator>& __y)
-40039:     { __x.swap(__y); }
-40039: 
-40039: 
-40039:   template <class _CharT, class _Traits, class _Allocator>
-40039:     inline void
-40039:     swap(basic_istringstream<_CharT, _Traits, _Allocator>& __x,
-40039:   basic_istringstream<_CharT, _Traits, _Allocator>& __y)
-40039:     { __x.swap(__y); }
-40039: 
-40039: 
-40039:   template <class _CharT, class _Traits, class _Allocator>
-40039:     inline void
-40039:     swap(basic_ostringstream<_CharT, _Traits, _Allocator>& __x,
-40039:   basic_ostringstream<_CharT, _Traits, _Allocator>& __y)
-40039:     { __x.swap(__y); }
-40039: 
-40039: 
-40039:   template <class _CharT, class _Traits, class _Allocator>
-40039:     inline void
-40039:     swap(basic_stringstream<_CharT, _Traits, _Allocator>& __x,
-40039:   basic_stringstream<_CharT, _Traits, _Allocator>& __y)
-40039:     { __x.swap(__y); }
-40039: 
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/sstream.tcc" 1 3
-40039: # 37 "/usr/include/c++/8/bits/sstream.tcc" 3
-40039:        
-40039: # 38 "/usr/include/c++/8/bits/sstream.tcc" 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   template <class _CharT, class _Traits, class _Alloc>
-40039:     typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type
-40039:     basic_stringbuf<_CharT, _Traits, _Alloc>::
-40039:     pbackfail(int_type __c)
-40039:     {
-40039:       int_type __ret = traits_type::eof();
-40039:       if (this->eback() < this->gptr())
-40039:  {
-40039: 
-40039: 
-40039:    const bool __testeof = traits_type::eq_int_type(__c, __ret);
-40039:    if (!__testeof)
-40039:      {
-40039:        const bool __testeq = traits_type::eq(traits_type::
-40039:           to_char_type(__c),
-40039:           this->gptr()[-1]);
-40039:        const bool __testout = this->_M_mode & ios_base::out;
-40039:        if (__testeq || __testout)
-40039:   {
-40039:     this->gbump(-1);
-40039:     if (!__testeq)
-40039:       *this->gptr() = traits_type::to_char_type(__c);
-40039:     __ret = __c;
-40039:   }
-40039:      }
-40039:    else
-40039:      {
-40039:        this->gbump(-1);
-40039:        __ret = traits_type::not_eof(__c);
-40039:      }
-40039:  }
-40039:       return __ret;
-40039:     }
-40039: 
-40039:   template <class _CharT, class _Traits, class _Alloc>
-40039:     typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type
-40039:     basic_stringbuf<_CharT, _Traits, _Alloc>::
-40039:     overflow(int_type __c)
-40039:     {
-40039:       const bool __testout = this->_M_mode & ios_base::out;
-40039:       if (__builtin_expect(!__testout, false))
-40039:  return traits_type::eof();
-40039: 
-40039:       const bool __testeof = traits_type::eq_int_type(__c, traits_type::eof());
-40039:       if (__builtin_expect(__testeof, false))
-40039:  return traits_type::not_eof(__c);
-40039: 
-40039:       const __size_type __capacity = _M_string.capacity();
-40039: 
-40039: 
-40039:       if ((this->epptr() - this->pbase()) < __capacity)
-40039:  {
-40039: 
-40039:    char_type* __base = const_cast<char_type*>(_M_string.data());
-40039:    _M_pbump(__base, __base + __capacity, this->pptr() - this->pbase());
-40039:    if (_M_mode & ios_base::in)
-40039:      {
-40039:        const __size_type __nget = this->gptr() - this->eback();
-40039:        const __size_type __eget = this->egptr() - this->eback();
-40039:        this->setg(__base, __base + __nget, __base + __eget + 1);
-40039:      }
-40039:    *this->pptr() = traits_type::to_char_type(__c);
-40039:    this->pbump(1);
-40039:    return __c;
-40039:  }
-40039: 
-40039: 
-40039:       const __size_type __max_size = _M_string.max_size();
-40039:       const bool __testput = this->pptr() < this->epptr();
-40039:       if (__builtin_expect(!__testput && __capacity == __max_size, false))
-40039:  return traits_type::eof();
-40039: 
-40039: 
-40039: 
-40039:       const char_type __conv = traits_type::to_char_type(__c);
-40039:       if (!__testput)
-40039:  {
-40039: # 129 "/usr/include/c++/8/bits/sstream.tcc" 3
-40039:    const __size_type __opt_len = std::max(__size_type(2 * __capacity),
-40039:        __size_type(512));
-40039:    const __size_type __len = std::min(__opt_len, __max_size);
-40039:    __string_type __tmp(_M_string.get_allocator());
-40039:    __tmp.reserve(__len);
-40039:    if (this->pbase())
-40039:      __tmp.assign(this->pbase(), this->epptr() - this->pbase());
-40039:    __tmp.push_back(__conv);
-40039:    _M_string.swap(__tmp);
-40039:    _M_sync(const_cast<char_type*>(_M_string.data()),
-40039:     this->gptr() - this->eback(), this->pptr() - this->pbase());
-40039:  }
-40039:       else
-40039:  *this->pptr() = __conv;
-40039:       this->pbump(1);
-40039:       return __c;
-40039:     }
-40039: 
-40039:   template <class _CharT, class _Traits, class _Alloc>
-40039:     typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type
-40039:     basic_stringbuf<_CharT, _Traits, _Alloc>::
-40039:     underflow()
-40039:     {
-40039:       int_type __ret = traits_type::eof();
-40039:       const bool __testin = this->_M_mode & ios_base::in;
-40039:       if (__testin)
-40039:  {
-40039: 
-40039:    _M_update_egptr();
-40039: 
-40039:    if (this->gptr() < this->egptr())
-40039:      __ret = traits_type::to_int_type(*this->gptr());
-40039:  }
-40039:       return __ret;
-40039:     }
-40039: 
-40039:   template <class _CharT, class _Traits, class _Alloc>
-40039:     typename basic_stringbuf<_CharT, _Traits, _Alloc>::pos_type
-40039:     basic_stringbuf<_CharT, _Traits, _Alloc>::
-40039:     seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode __mode)
-40039:     {
-40039:       pos_type __ret = pos_type(off_type(-1));
-40039:       bool __testin = (ios_base::in & this->_M_mode & __mode) != 0;
-40039:       bool __testout = (ios_base::out & this->_M_mode & __mode) != 0;
-40039:       const bool __testboth = __testin && __testout && __way != ios_base::cur;
-40039:       __testin &= !(__mode & ios_base::out);
-40039:       __testout &= !(__mode & ios_base::in);
-40039: 
-40039: 
-40039: 
-40039:       const char_type* __beg = __testin ? this->eback() : this->pbase();
-40039:       if ((__beg || !__off) && (__testin || __testout || __testboth))
-40039:  {
-40039:    _M_update_egptr();
-40039: 
-40039:    off_type __newoffi = __off;
-40039:    off_type __newoffo = __newoffi;
-40039:    if (__way == ios_base::cur)
-40039:      {
-40039:        __newoffi += this->gptr() - __beg;
-40039:        __newoffo += this->pptr() - __beg;
-40039:      }
-40039:    else if (__way == ios_base::end)
-40039:      __newoffo = __newoffi += this->egptr() - __beg;
-40039: 
-40039:    if ((__testin || __testboth)
-40039:        && __newoffi >= 0
-40039:        && this->egptr() - __beg >= __newoffi)
-40039:      {
-40039:        this->setg(this->eback(), this->eback() + __newoffi,
-40039:     this->egptr());
-40039:        __ret = pos_type(__newoffi);
-40039:      }
-40039:    if ((__testout || __testboth)
-40039:        && __newoffo >= 0
-40039:        && this->egptr() - __beg >= __newoffo)
-40039:      {
-40039:        _M_pbump(this->pbase(), this->epptr(), __newoffo);
-40039:        __ret = pos_type(__newoffo);
-40039:      }
-40039:  }
-40039:       return __ret;
-40039:     }
-40039: 
-40039:   template <class _CharT, class _Traits, class _Alloc>
-40039:     typename basic_stringbuf<_CharT, _Traits, _Alloc>::pos_type
-40039:     basic_stringbuf<_CharT, _Traits, _Alloc>::
-40039:     seekpos(pos_type __sp, ios_base::openmode __mode)
-40039:     {
-40039:       pos_type __ret = pos_type(off_type(-1));
-40039:       const bool __testin = (ios_base::in & this->_M_mode & __mode) != 0;
-40039:       const bool __testout = (ios_base::out & this->_M_mode & __mode) != 0;
-40039: 
-40039:       const char_type* __beg = __testin ? this->eback() : this->pbase();
-40039:       if ((__beg || !off_type(__sp)) && (__testin || __testout))
-40039:  {
-40039:    _M_update_egptr();
-40039: 
-40039:    const off_type __pos(__sp);
-40039:    const bool __testpos = (0 <= __pos
-40039:       && __pos <= this->egptr() - __beg);
-40039:    if (__testpos)
-40039:      {
-40039:        if (__testin)
-40039:   this->setg(this->eback(), this->eback() + __pos,
-40039:       this->egptr());
-40039:        if (__testout)
-40039:   _M_pbump(this->pbase(), this->epptr(), __pos);
-40039:        __ret = __sp;
-40039:      }
-40039:  }
-40039:       return __ret;
-40039:     }
-40039: 
-40039:   template <class _CharT, class _Traits, class _Alloc>
-40039:     void
-40039:     basic_stringbuf<_CharT, _Traits, _Alloc>::
-40039:     _M_sync(char_type* __base, __size_type __i, __size_type __o)
-40039:     {
-40039:       const bool __testin = _M_mode & ios_base::in;
-40039:       const bool __testout = _M_mode & ios_base::out;
-40039:       char_type* __endg = __base + _M_string.size();
-40039:       char_type* __endp = __base + _M_string.capacity();
-40039: 
-40039:       if (__base != _M_string.data())
-40039:  {
-40039: 
-40039:    __endg += __i;
-40039:    __i = 0;
-40039:    __endp = __endg;
-40039:  }
-40039: 
-40039:       if (__testin)
-40039:  this->setg(__base, __base + __i, __endg);
-40039:       if (__testout)
-40039:  {
-40039:    _M_pbump(__base, __endp, __o);
-40039: 
-40039: 
-40039: 
-40039:    if (!__testin)
-40039:      this->setg(__endg, __endg, __endg);
-40039:  }
-40039:     }
-40039: 
-40039:   template <class _CharT, class _Traits, class _Alloc>
-40039:     void
-40039:     basic_stringbuf<_CharT, _Traits, _Alloc>::
-40039:     _M_pbump(char_type* __pbeg, char_type* __pend, off_type __off)
-40039:     {
-40039:       this->setp(__pbeg, __pend);
-40039:       while (__off > __gnu_cxx::__numeric_traits<int>::__max)
-40039:  {
-40039:    this->pbump(__gnu_cxx::__numeric_traits<int>::__max);
-40039:    __off -= __gnu_cxx::__numeric_traits<int>::__max;
-40039:  }
-40039:       this->pbump(__off);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   extern template class basic_stringbuf<char>;
-40039:   extern template class basic_istringstream<char>;
-40039:   extern template class basic_ostringstream<char>;
-40039:   extern template class basic_stringstream<char>;
-40039: 
-40039: 
-40039:   extern template class basic_stringbuf<wchar_t>;
-40039:   extern template class basic_istringstream<wchar_t>;
-40039:   extern template class basic_ostringstream<wchar_t>;
-40039:   extern template class basic_stringstream<wchar_t>;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 828 "/usr/include/c++/8/sstream" 2 3
-40039: # 28 "../../src/checked_mpz_inlines.hh" 2
-40039: 
-40039: 
-40039: # 29 "../../src/checked_mpz_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Checked {
-40039: 
-40039: template <typename Policy>
-40039: inline Result
-40039: round_lt_mpz(mpz_class& to, Rounding_Dir dir) {
-40039:   if (round_down(dir)) {
-40039:     --to;
-40039:     return V_GT;
-40039:   }
-40039:   return V_LT;
-40039: }
-40039: 
-40039: template <typename Policy>
-40039: inline Result
-40039: round_gt_mpz(mpz_class& to, Rounding_Dir dir) {
-40039:   if (round_up(dir)) {
-40039:     ++to;
-40039:     return V_LT;
-40039:   }
-40039:   return V_GT;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: typedef decltype(__mpz_struct()._mp_size) mp_size_field_t;
-40039: # 64 "../../src/checked_mpz_inlines.hh"
-40039: inline mp_size_field_t
-40039: get_mp_size(const mpz_class &v) {
-40039:   return v.get_mpz_t()->_mp_size;
-40039: }
-40039: 
-40039: inline void
-40039: set_mp_size(mpz_class &v, mp_size_field_t size) {
-40039:   v.get_mpz_t()->_mp_size = size;
-40039: }
-40039: 
-40039: template <typename Policy>
-40039: inline Result
-40039: classify_mpz(const mpz_class& v, bool nan, bool inf, bool sign) {
-40039:   if (Policy::has_nan || Policy::has_infinity) {
-40039:     mp_size_field_t s = get_mp_size(v);
-40039:     if (Policy::has_nan
-40039:         && (nan || sign)
-40039:         && s == C_Integer<mp_size_field_t>::min + 1) {
-40039:       return V_NAN;
-40039:     }
-40039:     if (!inf && !sign) {
-40039:       return V_LGE;
-40039:     }
-40039:     if (Policy::has_infinity) {
-40039:       if (s == C_Integer<mp_size_field_t>::min) {
-40039:         return inf ? V_EQ_MINUS_INFINITY : V_LT;
-40039:       }
-40039:       if (s == C_Integer<mp_size_field_t>::max) {
-40039:         return inf ? V_EQ_PLUS_INFINITY : V_GT;
-40039:       }
-40039:     }
-40039:   }
-40039:   if (sign) {
-40039:     return static_cast<Result>(sgn<Policy>(v));
-40039:   }
-40039:   return V_LGE;
-40039: }
-40039: 
-40039: template <typename Policy> struct classify_function_struct<Policy, mpz_class> { static inline Result function(const mpz_class& arg, bool a1, bool a2, bool a3) { return classify_mpz<Policy>(arg, a1, a2, a3); } };
-40039: 
-40039: template <typename Policy>
-40039: inline bool
-40039: is_nan_mpz(const mpz_class& v) {
-40039:   return Policy::has_nan
-40039:     && get_mp_size(v) == C_Integer<mp_size_field_t>::min + 1;
-40039: }
-40039: 
-40039: template <typename Policy> struct is_nan_function_struct<Policy, mpz_class> { static inline bool function(const mpz_class& arg) { return is_nan_mpz<Policy>(arg); } };
-40039: 
-40039: template <typename Policy>
-40039: inline bool
-40039: is_minf_mpz(const mpz_class& v) {
-40039:   return Policy::has_infinity
-40039:     && get_mp_size(v) == C_Integer<mp_size_field_t>::min;
-40039: }
-40039: 
-40039: template <typename Policy> struct is_minf_function_struct<Policy, mpz_class> { static inline bool function(const mpz_class& arg) { return is_minf_mpz<Policy>(arg); } };
-40039: 
-40039: template <typename Policy>
-40039: inline bool
-40039: is_pinf_mpz(const mpz_class& v) {
-40039:   return Policy::has_infinity
-40039:     && get_mp_size(v) == C_Integer<mp_size_field_t>::max;
-40039: }
-40039: 
-40039: template <typename Policy> struct is_pinf_function_struct<Policy, mpz_class> { static inline bool function(const mpz_class& arg) { return is_pinf_mpz<Policy>(arg); } };
-40039: 
-40039: template <typename Policy>
-40039: inline bool
-40039: is_int_mpz(const mpz_class& v) {
-40039:   return !is_nan<Policy>(v);
-40039: }
-40039: 
-40039: template <typename Policy> struct is_int_function_struct<Policy, mpz_class> { static inline bool function(const mpz_class& arg) { return is_int_mpz<Policy>(arg); } };
-40039: 
-40039: template <typename Policy>
-40039: inline Result
-40039: assign_special_mpz(mpz_class& v, Result_Class c, Rounding_Dir) {
-40039:   switch (c) {
-40039:   case VC_NAN:
-40039:     if (Policy::has_nan) {
-40039:       set_mp_size(v, C_Integer<mp_size_field_t>::min + 1);
-40039:     }
-40039:     return V_NAN;
-40039:   case VC_MINUS_INFINITY:
-40039:     if (Policy::has_infinity) {
-40039:       set_mp_size(v, C_Integer<mp_size_field_t>::min);
-40039:       return V_EQ_MINUS_INFINITY;
-40039:     }
-40039:     return V_EQ_MINUS_INFINITY | V_UNREPRESENTABLE;
-40039:   case VC_PLUS_INFINITY:
-40039:     if (Policy::has_infinity) {
-40039:       set_mp_size(v, C_Integer<mp_size_field_t>::max);
-40039:       return V_EQ_PLUS_INFINITY;
-40039:     }
-40039:     return V_EQ_PLUS_INFINITY | V_UNREPRESENTABLE;
-40039:   default:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return V_NAN;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Policy> struct assign_special_function_struct<Policy, mpz_class> { static inline Result function( mpz_class& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_mpz<Policy>(arg, a1, a2); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy>
-40039: inline void
-40039: copy_mpz(mpz_class& to, const mpz_class& from) {
-40039:   if (is_nan_mpz<From_Policy>(from)) {
-40039:     ((void) 0);
-40039:   }
-40039:   else if (is_minf_mpz<From_Policy>(from) || is_pinf_mpz<From_Policy>(from)) {
-40039:     ((void) 0);
-40039:   }
-40039:   else {
-40039:     to = from;
-40039:     return;
-40039:   }
-40039:   set_mp_size(to, get_mp_size(from));
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline void function( mpz_class& arg1, const mpz_class &arg2) { return copy_mpz<Policy1, Policy2>(arg1, arg2); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename From>
-40039: inline Result
-40039: construct_mpz_base(mpz_class& to, const From from, Rounding_Dir) {
-40039:     new(&to) mpz_class(from);
-40039:     return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpz_class, char> { static inline Result function( mpz_class& arg1, const char &arg2, Rounding_Dir a1) { return construct_mpz_base<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpz_class, signed char> { static inline Result function( mpz_class& arg1, const signed char &arg2, Rounding_Dir a1) { return construct_mpz_base<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpz_class, signed short> { static inline Result function( mpz_class& arg1, const signed short &arg2, Rounding_Dir a1) { return construct_mpz_base<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpz_class, signed int> { static inline Result function( mpz_class& arg1, const signed int &arg2, Rounding_Dir a1) { return construct_mpz_base<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpz_class, signed long> { static inline Result function( mpz_class& arg1, const signed long &arg2, Rounding_Dir a1) { return construct_mpz_base<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpz_class, unsigned char> { static inline Result function( mpz_class& arg1, const unsigned char &arg2, Rounding_Dir a1) { return construct_mpz_base<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpz_class, unsigned short> { static inline Result function( mpz_class& arg1, const unsigned short &arg2, Rounding_Dir a1) { return construct_mpz_base<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpz_class, unsigned int> { static inline Result function( mpz_class& arg1, const unsigned int &arg2, Rounding_Dir a1) { return construct_mpz_base<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpz_class, unsigned long> { static inline Result function( mpz_class& arg1, const unsigned long &arg2, Rounding_Dir a1) { return construct_mpz_base<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename From>
-40039: inline Result
-40039: construct_mpz_float(mpz_class& to, const From& from, Rounding_Dir dir) {
-40039:   if (is_nan<From_Policy>(from)) {
-40039:     return construct_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (is_minf<From_Policy>(from)) {
-40039:     return construct_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
-40039:   }
-40039:   else if (is_pinf<From_Policy>(from)) {
-40039:     return construct_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:   }
-40039:   if (round_not_requested(dir)) {
-40039:     new(&to) mpz_class(from);
-40039:     return V_LGE;
-40039:   }
-40039:   From n = rint(from);
-40039:   new(&to) mpz_class(n);
-40039:   if (from == n) {
-40039:     return V_EQ;
-40039:   }
-40039:   if (from < 0) {
-40039:     return round_lt_mpz<To_Policy>(to, dir);
-40039:   }
-40039:   else {
-40039:     return round_gt_mpz<To_Policy>(to, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpz_class, float> { static inline Result function( mpz_class& arg1, const float &arg2, Rounding_Dir a1) { return construct_mpz_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpz_class, double> { static inline Result function( mpz_class& arg1, const double &arg2, Rounding_Dir a1) { return construct_mpz_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, char> { static inline Result function( mpz_class& arg1, const char &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, signed char> { static inline Result function( mpz_class& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, signed short> { static inline Result function( mpz_class& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, signed int> { static inline Result function( mpz_class& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, signed long> { static inline Result function( mpz_class& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, unsigned char> { static inline Result function( mpz_class& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, unsigned short> { static inline Result function( mpz_class& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, unsigned int> { static inline Result function( mpz_class& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, unsigned long> { static inline Result function( mpz_class& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename From>
-40039: inline Result
-40039: assign_mpz_signed_int(mpz_class& to, const From from, Rounding_Dir) {
-40039:   if (sizeof(From) <= sizeof(signed long)) {
-40039:     to = static_cast<signed long>(from);
-40039:   }
-40039:   else {
-40039:     mpz_ptr m = to.get_mpz_t();
-40039:     if (from >= 0) {
-40039:       
-40039: # 255 "../../src/checked_mpz_inlines.hh" 3 4
-40039:      __gmpz_import
-40039: # 255 "../../src/checked_mpz_inlines.hh"
-40039:                (m, 1, 1, sizeof(From), 0, 0, &from);
-40039:     }
-40039:     else {
-40039:       From n = -from;
-40039:       
-40039: # 259 "../../src/checked_mpz_inlines.hh" 3 4
-40039:      __gmpz_import
-40039: # 259 "../../src/checked_mpz_inlines.hh"
-40039:                (m, 1, 1, sizeof(From), 0, 0, &n);
-40039:       
-40039: # 260 "../../src/checked_mpz_inlines.hh" 3 4
-40039:      __gmpz_neg
-40039: # 260 "../../src/checked_mpz_inlines.hh"
-40039:             (m, m);
-40039:     }
-40039:   }
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, signed long long> { static inline Result function( mpz_class& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_mpz_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename From>
-40039: inline Result
-40039: assign_mpz_unsigned_int(mpz_class& to, const From from, Rounding_Dir) {
-40039:   if (sizeof(From) <= sizeof(unsigned long)) {
-40039:     to = static_cast<unsigned long>(from);
-40039:   }
-40039:   else {
-40039:     
-40039: # 275 "../../src/checked_mpz_inlines.hh" 3 4
-40039:    __gmpz_import
-40039: # 275 "../../src/checked_mpz_inlines.hh"
-40039:              (to.get_mpz_t(), 1, 1, sizeof(From), 0, 0, &from);
-40039:   }
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, unsigned long long> { static inline Result function( mpz_class& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_mpz_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename From>
-40039: inline Result
-40039: assign_mpz_float(mpz_class& to, const From from, Rounding_Dir dir) {
-40039:   if (is_nan<From_Policy>(from)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (is_minf<From_Policy>(from)) {
-40039:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
-40039:   }
-40039:   else if (is_pinf<From_Policy>(from)) {
-40039:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:   }
-40039:   if (round_not_requested(dir)) {
-40039:     to = from;
-40039:     return V_LGE;
-40039:   }
-40039:   From i_from = rint(from);
-40039:   to = i_from;
-40039:   if (from == i_from) {
-40039:     return V_EQ;
-40039:   }
-40039:   if (round_direct(ROUND_UP)) {
-40039:     return round_lt_mpz<To_Policy>(to, dir);
-40039:   }
-40039:   if (round_direct(ROUND_DOWN)) {
-40039:     return round_gt_mpz<To_Policy>(to, dir);
-40039:   }
-40039:   if (from < i_from) {
-40039:     return round_lt_mpz<To_Policy>(to, dir);
-40039:   }
-40039:   if (from > i_from) {
-40039:     return round_gt_mpz<To_Policy>(to, dir);
-40039:   }
-40039:   Parma_Polyhedra_Library::ppl_unreachable();
-40039:   return V_NAN;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, float> { static inline Result function( mpz_class& arg1, const float &arg2, Rounding_Dir a1) { return assign_mpz_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, double> { static inline Result function( mpz_class& arg1, const double &arg2, Rounding_Dir a1) { return assign_mpz_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename From>
-40039: inline Result
-40039: assign_mpz_long_double(mpz_class& to, const From& from, Rounding_Dir dir) {
-40039:   if (is_nan<From_Policy>(from)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (is_minf<From_Policy>(from)) {
-40039:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
-40039:   }
-40039:   else if (is_pinf<From_Policy>(from)) {
-40039:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:   }
-40039: 
-40039:   std::stringstream ss;
-40039:   output<From_Policy>(ss, from, Numeric_Format(), dir);
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_tmp; mpq_class& tmp = holder_tmp.item();
-40039: 
-40039: 
-40039: 
-40039:     input_mpq(tmp, ss);
-40039:   ((void) 0);
-40039:   return assign<To_Policy, From_Policy>(to, tmp, dir);
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, long double> { static inline Result function( mpz_class& arg1, const long double &arg2, Rounding_Dir a1) { return assign_mpz_long_double<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy>
-40039: inline Result
-40039: assign_mpz_mpq(mpz_class& to, const mpq_class& from, Rounding_Dir dir) {
-40039:   if (round_not_needed(dir)) {
-40039:     to = from.get_num();
-40039:     return V_LGE;
-40039:   }
-40039:   if (round_ignore(dir)) {
-40039:     to = from;
-40039:     return V_LGE;
-40039:   }
-40039:   const mpz_srcptr n = from.get_num().get_mpz_t();
-40039:   const mpz_srcptr d = from.get_den().get_mpz_t();
-40039:   if (round_down(dir)) {
-40039:     
-40039: # 362 "../../src/checked_mpz_inlines.hh" 3 4
-40039:    __gmpz_fdiv_q
-40039: # 362 "../../src/checked_mpz_inlines.hh"
-40039:              (to.get_mpz_t(), n, d);
-40039:     if (round_strict_relation(dir)) {
-40039:       return (
-40039: # 364 "../../src/checked_mpz_inlines.hh" 3 4
-40039:              __gmpz_divisible_p
-40039: # 364 "../../src/checked_mpz_inlines.hh"
-40039:                             (n, d) != 0) ? V_EQ : V_GT;
-40039:     }
-40039:     return V_GE;
-40039:   }
-40039:   else {
-40039:     ((void) 0);
-40039:     
-40039: # 370 "../../src/checked_mpz_inlines.hh" 3 4
-40039:    __gmpz_cdiv_q
-40039: # 370 "../../src/checked_mpz_inlines.hh"
-40039:              (to.get_mpz_t(), n, d);
-40039:     if (round_strict_relation(dir)) {
-40039:       return (
-40039: # 372 "../../src/checked_mpz_inlines.hh" 3 4
-40039:              __gmpz_divisible_p
-40039: # 372 "../../src/checked_mpz_inlines.hh"
-40039:                             (n, d) != 0) ? V_EQ : V_LT;
-40039:     }
-40039:     return V_LE;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, mpq_class> { static inline Result function( mpz_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_mpz_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy>
-40039: inline Result
-40039: neg_mpz(mpz_class& to, const mpz_class& from, Rounding_Dir) {
-40039:   
-40039: # 387 "../../src/checked_mpz_inlines.hh" 3 4
-40039:  __gmpz_neg
-40039: # 387 "../../src/checked_mpz_inlines.hh"
-40039:         (to.get_mpz_t(), from.get_mpz_t());
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return neg_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
-40039: inline Result
-40039: add_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y, Rounding_Dir) {
-40039:   to = x + y;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, mpz_class, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return add_mpz<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
-40039: inline Result
-40039: sub_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y, Rounding_Dir) {
-40039:   to = x - y;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, mpz_class, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return sub_mpz<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
-40039: inline Result
-40039: mul_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y, Rounding_Dir) {
-40039:   to = x * y;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, mpz_class, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return mul_mpz<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
-40039: inline Result
-40039: div_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y,
-40039:         Rounding_Dir dir) {
-40039:   if (((To_Policy::check_div_zero) ? (::sgn(y) == 0) : (
-40039: # 424 "../../src/checked_mpz_inlines.hh" 3 4
-40039:      (static_cast<void> (0))
-40039: # 424 "../../src/checked_mpz_inlines.hh"
-40039:      , false))) {
-40039:     return assign_nan<To_Policy>(to, V_DIV_ZERO);
-40039:   }
-40039:   const mpz_srcptr n = x.get_mpz_t();
-40039:   const mpz_srcptr d = y.get_mpz_t();
-40039:   if (round_not_needed(dir)) {
-40039:     
-40039: # 430 "../../src/checked_mpz_inlines.hh" 3 4
-40039:    __gmpz_divexact
-40039: # 430 "../../src/checked_mpz_inlines.hh"
-40039:                (to.get_mpz_t(), n, d);
-40039:     return V_LGE;
-40039:   }
-40039:   if (round_ignore(dir)) {
-40039:     
-40039: # 434 "../../src/checked_mpz_inlines.hh" 3 4
-40039:    __gmpz_cdiv_q
-40039: # 434 "../../src/checked_mpz_inlines.hh"
-40039:              (to.get_mpz_t(), n, d);
-40039:     return V_LE;
-40039:   }
-40039:   if (round_down(dir)) {
-40039:     
-40039: # 438 "../../src/checked_mpz_inlines.hh" 3 4
-40039:    __gmpz_fdiv_q
-40039: # 438 "../../src/checked_mpz_inlines.hh"
-40039:              (to.get_mpz_t(), n, d);
-40039:     if (round_strict_relation(dir)) {
-40039:       return (
-40039: # 440 "../../src/checked_mpz_inlines.hh" 3 4
-40039:              __gmpz_divisible_p
-40039: # 440 "../../src/checked_mpz_inlines.hh"
-40039:                             (n, d) != 0) ? V_EQ : V_GT;
-40039:     }
-40039:     return V_GE;
-40039:   }
-40039:   else {
-40039:     ((void) 0);
-40039:     
-40039: # 446 "../../src/checked_mpz_inlines.hh" 3 4
-40039:    __gmpz_cdiv_q
-40039: # 446 "../../src/checked_mpz_inlines.hh"
-40039:              (to.get_mpz_t(), n, d);
-40039:     if (round_strict_relation(dir)) {
-40039:       return (
-40039: # 448 "../../src/checked_mpz_inlines.hh" 3 4
-40039:              __gmpz_divisible_p
-40039: # 448 "../../src/checked_mpz_inlines.hh"
-40039:                             (n, d) != 0) ? V_EQ : V_LT;
-40039:     }
-40039:     return V_LE;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, mpz_class, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return div_mpz<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
-40039: inline Result
-40039: idiv_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y,
-40039:         Rounding_Dir) {
-40039:   if (((To_Policy::check_div_zero) ? (::sgn(y) == 0) : (
-40039: # 460 "../../src/checked_mpz_inlines.hh" 3 4
-40039:      (static_cast<void> (0))
-40039: # 460 "../../src/checked_mpz_inlines.hh"
-40039:      , false))) {
-40039:     return assign_nan<To_Policy>(to, V_DIV_ZERO);
-40039:   }
-40039:   mpz_srcptr n = x.get_mpz_t();
-40039:   mpz_srcptr d = y.get_mpz_t();
-40039:   
-40039: # 465 "../../src/checked_mpz_inlines.hh" 3 4
-40039:  __gmpz_tdiv_q
-40039: # 465 "../../src/checked_mpz_inlines.hh"
-40039:            (to.get_mpz_t(), n, d);
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, mpz_class, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return idiv_mpz<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
-40039: inline Result
-40039: rem_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y, Rounding_Dir) {
-40039:   if (((To_Policy::check_div_zero) ? (::sgn(y) == 0) : (
-40039: # 474 "../../src/checked_mpz_inlines.hh" 3 4
-40039:      (static_cast<void> (0))
-40039: # 474 "../../src/checked_mpz_inlines.hh"
-40039:      , false))) {
-40039:     return assign_nan<To_Policy>(to, V_MOD_ZERO);
-40039:   }
-40039:   to = x % y;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, mpz_class, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return rem_mpz<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy>
-40039: inline Result
-40039: add_2exp_mpz(mpz_class& to, const mpz_class& x, unsigned int exp,
-40039:              Rounding_Dir) {
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpz_class> holder_v; mpz_class& v = holder_v.item();
-40039:   v = 1;
-40039:   
-40039: # 489 "../../src/checked_mpz_inlines.hh" 3 4
-40039:  __gmpz_mul_2exp
-40039: # 489 "../../src/checked_mpz_inlines.hh"
-40039:              (v.get_mpz_t(), v.get_mpz_t(), exp);
-40039:   to = x + v;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_mpz<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy>
-40039: inline Result
-40039: sub_2exp_mpz(mpz_class& to, const mpz_class& x, unsigned int exp,
-40039:              Rounding_Dir) {
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpz_class> holder_v; mpz_class& v = holder_v.item();
-40039:   v = 1;
-40039:   
-40039: # 502 "../../src/checked_mpz_inlines.hh" 3 4
-40039:  __gmpz_mul_2exp
-40039: # 502 "../../src/checked_mpz_inlines.hh"
-40039:              (v.get_mpz_t(), v.get_mpz_t(), exp);
-40039:   to = x - v;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_mpz<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy>
-40039: inline Result
-40039: mul_2exp_mpz(mpz_class& to, const mpz_class& x, unsigned int exp,
-40039:              Rounding_Dir) {
-40039:   
-40039: # 513 "../../src/checked_mpz_inlines.hh" 3 4
-40039:  __gmpz_mul_2exp
-40039: # 513 "../../src/checked_mpz_inlines.hh"
-40039:              (to.get_mpz_t(), x.get_mpz_t(), exp);
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_mpz<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy>
-40039: inline Result
-40039: div_2exp_mpz(mpz_class& to, const mpz_class& x, unsigned int exp,
-40039:              Rounding_Dir dir) {
-40039:   const mpz_srcptr n = x.get_mpz_t();
-40039:   if (round_not_requested(dir)) {
-40039:     
-40039: # 525 "../../src/checked_mpz_inlines.hh" 3 4
-40039:    __gmpz_tdiv_q_2exp
-40039: # 525 "../../src/checked_mpz_inlines.hh"
-40039:                   (to.get_mpz_t(), x.get_mpz_t(), exp);
-40039:     return V_LGE;
-40039:   }
-40039:   if (round_down(dir)) {
-40039:     
-40039: # 529 "../../src/checked_mpz_inlines.hh" 3 4
-40039:    __gmpz_fdiv_q_2exp
-40039: # 529 "../../src/checked_mpz_inlines.hh"
-40039:                   (to.get_mpz_t(), n, exp);
-40039:     if (round_strict_relation(dir)) {
-40039:       return (
-40039: # 531 "../../src/checked_mpz_inlines.hh" 3 4
-40039:              __gmpz_divisible_2exp_p
-40039: # 531 "../../src/checked_mpz_inlines.hh"
-40039:                                  (n, exp) != 0) ? V_EQ : V_GT;
-40039:     }
-40039:     return V_GE;
-40039:   }
-40039:   else {
-40039:     ((void) 0);
-40039:     
-40039: # 537 "../../src/checked_mpz_inlines.hh" 3 4
-40039:    __gmpz_cdiv_q_2exp
-40039: # 537 "../../src/checked_mpz_inlines.hh"
-40039:                   (to.get_mpz_t(), n, exp);
-40039:     if (round_strict_relation(dir)) {
-40039:       return (
-40039: # 539 "../../src/checked_mpz_inlines.hh" 3 4
-40039:              __gmpz_divisible_2exp_p
-40039: # 539 "../../src/checked_mpz_inlines.hh"
-40039:                                  (n, exp) != 0) ? V_EQ : V_LT;
-40039:     }
-40039:     return V_LE;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_mpz<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy>
-40039: inline Result
-40039: smod_2exp_mpz(mpz_class& to, const mpz_class& x, unsigned int exp,
-40039:               Rounding_Dir) {
-40039:   if (
-40039: # 551 "../../src/checked_mpz_inlines.hh" 3 4
-40039:      __gmpz_tstbit
-40039: # 551 "../../src/checked_mpz_inlines.hh"
-40039:                (x.get_mpz_t(), exp - 1) != 0) {
-40039:     
-40039: # 552 "../../src/checked_mpz_inlines.hh" 3 4
-40039:    __gmpz_cdiv_r_2exp
-40039: # 552 "../../src/checked_mpz_inlines.hh"
-40039:                   (to.get_mpz_t(), x.get_mpz_t(), exp);
-40039:   }
-40039:   else {
-40039:     
-40039: # 555 "../../src/checked_mpz_inlines.hh" 3 4
-40039:    __gmpz_fdiv_r_2exp
-40039: # 555 "../../src/checked_mpz_inlines.hh"
-40039:                   (to.get_mpz_t(), x.get_mpz_t(), exp);
-40039:   }
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_mpz<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy>
-40039: inline Result
-40039: umod_2exp_mpz(mpz_class& to, const mpz_class& x, unsigned int exp,
-40039:               Rounding_Dir) {
-40039:   
-40039: # 566 "../../src/checked_mpz_inlines.hh" 3 4
-40039:  __gmpz_fdiv_r_2exp
-40039: # 566 "../../src/checked_mpz_inlines.hh"
-40039:                 (to.get_mpz_t(), x.get_mpz_t(), exp);
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_mpz<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy>
-40039: inline Result
-40039: abs_mpz(mpz_class& to, const mpz_class& from, Rounding_Dir) {
-40039:   to = abs(from);
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return abs_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
-40039: inline Result
-40039: add_mul_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y,
-40039:             Rounding_Dir) {
-40039:   
-40039: # 585 "../../src/checked_mpz_inlines.hh" 3 4
-40039:  __gmpz_addmul
-40039: # 585 "../../src/checked_mpz_inlines.hh"
-40039:            (to.get_mpz_t(), x.get_mpz_t(), y.get_mpz_t());
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, mpz_class, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return add_mul_mpz<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
-40039: inline Result
-40039: sub_mul_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y,
-40039:             Rounding_Dir) {
-40039:   
-40039: # 595 "../../src/checked_mpz_inlines.hh" 3 4
-40039:  __gmpz_submul
-40039: # 595 "../../src/checked_mpz_inlines.hh"
-40039:            (to.get_mpz_t(), x.get_mpz_t(), y.get_mpz_t());
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, mpz_class, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return sub_mul_mpz<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
-40039: inline Result
-40039: gcd_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y, Rounding_Dir) {
-40039:   
-40039: # 604 "../../src/checked_mpz_inlines.hh" 3 4
-40039:  __gmpz_gcd
-40039: # 604 "../../src/checked_mpz_inlines.hh"
-40039:         (to.get_mpz_t(), x.get_mpz_t(), y.get_mpz_t());
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, mpz_class, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return gcd_mpz<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
-40039: inline Result
-40039: gcdext_mpz(mpz_class& to, mpz_class& s, mpz_class& t,
-40039:            const mpz_class& x, const mpz_class& y,
-40039:            Rounding_Dir) {
-40039:   
-40039: # 615 "../../src/checked_mpz_inlines.hh" 3 4
-40039:  __gmpz_gcdext
-40039: # 615 "../../src/checked_mpz_inlines.hh"
-40039:            (to.get_mpz_t(), s.get_mpz_t(), t.get_mpz_t(),
-40039:              x.get_mpz_t(), y.get_mpz_t());
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, mpz_class, mpz_class, mpz_class, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, mpz_class &arg2, mpz_class &arg3, const mpz_class &arg4, const mpz_class &arg5, Rounding_Dir a1) { return gcdext_mpz<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
-40039: inline Result
-40039: lcm_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y, Rounding_Dir) {
-40039:   
-40039: # 625 "../../src/checked_mpz_inlines.hh" 3 4
-40039:  __gmpz_lcm
-40039: # 625 "../../src/checked_mpz_inlines.hh"
-40039:         (to.get_mpz_t(), x.get_mpz_t(), y.get_mpz_t());
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, mpz_class, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return lcm_mpz<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy>
-40039: inline Result
-40039: sqrt_mpz(mpz_class& to, const mpz_class& from, Rounding_Dir dir) {
-40039:   if (((To_Policy::check_sqrt_neg) ? (from < 0) : (
-40039: # 634 "../../src/checked_mpz_inlines.hh" 3 4
-40039:      (static_cast<void> (0))
-40039: # 634 "../../src/checked_mpz_inlines.hh"
-40039:      , false))) {
-40039:     return assign_nan<To_Policy>(to, V_SQRT_NEG);
-40039:   }
-40039:   if (round_not_requested(dir)) {
-40039:     to = sqrt(from);
-40039:     return V_GE;
-40039:   }
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpz_class> holder_r; mpz_class& r = holder_r.item();
-40039:   
-40039: # 642 "../../src/checked_mpz_inlines.hh" 3 4
-40039:  __gmpz_sqrtrem
-40039: # 642 "../../src/checked_mpz_inlines.hh"
-40039:             (to.get_mpz_t(), r.get_mpz_t(), from.get_mpz_t());
-40039:   if (r == 0) {
-40039:     return V_EQ;
-40039:   }
-40039:   return round_gt_mpz<To_Policy>(to, dir);
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return sqrt_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename Policy, typename Type>
-40039: inline Result_Relation
-40039: sgn_mp(const Type& x) {
-40039:   const int sign = ::sgn(x);
-40039:   return (sign > 0) ? VR_GT : ((sign < 0) ? VR_LT : VR_EQ);
-40039: }
-40039: 
-40039: template <typename Policy> struct sgn_function_struct<Policy, mpz_class> { static inline Result_Relation function(const mpz_class& arg) { return sgn_mp<Policy>(arg); } };
-40039: template <typename Policy> struct sgn_function_struct<Policy, mpq_class> { static inline Result_Relation function(const mpq_class& arg) { return sgn_mp<Policy>(arg); } };
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Type>
-40039: inline Result_Relation
-40039: cmp_mp(const Type& x, const Type& y) {
-40039:   int i = ::cmp(x, y);
-40039:   return (i > 0) ? VR_GT : ((i < 0) ? VR_LT : VR_EQ);
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result_Relation function(const mpz_class& arg1, const mpz_class &arg2) { return cmp_mp<Policy1, Policy2>(arg1, arg2); } };
-40039: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result_Relation function(const mpq_class& arg1, const mpq_class &arg2) { return cmp_mp<Policy1, Policy2>(arg1, arg2); } };
-40039: 
-40039: template <typename Policy>
-40039: inline Result
-40039: output_mpz(std::ostream& os, const mpz_class& from, const Numeric_Format&,
-40039:            Rounding_Dir) {
-40039:   os << from;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy> struct input_function_struct<Policy, mpz_class> { static inline Result function( mpz_class& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
-40039: template <typename Policy> struct output_function_struct<Policy, mpz_class> { static inline Result function(std::ostream& b1, const mpz_class& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_mpz<Policy>(b1, arg, a1, a2); } };
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 704 "../../src/checked_defs.hh" 2
-40039: # 1 "../../src/checked_mpq_inlines.hh" 1
-40039: # 28 "../../src/checked_mpq_inlines.hh"
-40039: # 1 "/usr/include/c++/8/climits" 1 3
-40039: # 39 "/usr/include/c++/8/climits" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/climits" 3
-40039: 
-40039: 
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 1 3 4
-40039: # 43 "/usr/include/c++/8/climits" 2 3
-40039: # 29 "../../src/checked_mpq_inlines.hh" 2
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Checked {
-40039: 
-40039: template <typename Policy>
-40039: inline Result
-40039: classify_mpq(const mpq_class& v, bool nan, bool inf, bool sign) {
-40039:   if ((Policy::has_nan || Policy::has_infinity)
-40039:       && ::sgn(v.get_den()) == 0) {
-40039:     int s = ::sgn(v.get_num());
-40039:     if (Policy::has_nan && (nan || sign) && s == 0) {
-40039:       return V_NAN;
-40039:     }
-40039:     if (!inf && !sign) {
-40039:       return V_LGE;
-40039:     }
-40039:     if (Policy::has_infinity) {
-40039:       if (s < 0) {
-40039:         return inf ? V_EQ_MINUS_INFINITY : V_LT;
-40039:       }
-40039:       if (s > 0) {
-40039:         return inf ? V_EQ_PLUS_INFINITY : V_GT;
-40039:       }
-40039:     }
-40039:   }
-40039:   if (sign) {
-40039:     return static_cast<Result>(sgn<Policy>(v));
-40039:   }
-40039:   return V_LGE;
-40039: }
-40039: 
-40039: template <typename Policy> struct classify_function_struct<Policy, mpq_class> { static inline Result function(const mpq_class& arg, bool a1, bool a2, bool a3) { return classify_mpq<Policy>(arg, a1, a2, a3); } };
-40039: 
-40039: template <typename Policy>
-40039: inline bool
-40039: is_nan_mpq(const mpq_class& v) {
-40039:   return Policy::has_nan
-40039:     && ::sgn(v.get_den()) == 0
-40039:     && ::sgn(v.get_num()) == 0;
-40039: }
-40039: 
-40039: template <typename Policy> struct is_nan_function_struct<Policy, mpq_class> { static inline bool function(const mpq_class& arg) { return is_nan_mpq<Policy>(arg); } };
-40039: 
-40039: template <typename Policy>
-40039: inline bool
-40039: is_minf_mpq(const mpq_class& v) {
-40039:   return Policy::has_infinity
-40039:     && ::sgn(v.get_den()) == 0
-40039:     && ::sgn(v.get_num()) < 0;
-40039: }
-40039: 
-40039: template <typename Policy> struct is_minf_function_struct<Policy, mpq_class> { static inline bool function(const mpq_class& arg) { return is_minf_mpq<Policy>(arg); } };
-40039: 
-40039: template <typename Policy>
-40039: inline bool
-40039: is_pinf_mpq(const mpq_class& v) {
-40039:   return Policy::has_infinity
-40039:     && ::sgn(v.get_den()) == 0
-40039:     && ::sgn(v.get_num()) > 0;
-40039: }
-40039: 
-40039: template <typename Policy> struct is_pinf_function_struct<Policy, mpq_class> { static inline bool function(const mpq_class& arg) { return is_pinf_mpq<Policy>(arg); } };
-40039: 
-40039: template <typename Policy>
-40039: inline bool
-40039: is_int_mpq(const mpq_class& v) {
-40039:   if ((Policy::has_infinity || Policy::has_nan)
-40039:       && ::sgn(v.get_den()) == 0) {
-40039:     return !(Policy::has_nan && ::sgn(v.get_num()) == 0);
-40039:   }
-40039:   else {
-40039:     return v.get_den() == 1;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Policy> struct is_int_function_struct<Policy, mpq_class> { static inline bool function(const mpq_class& arg) { return is_int_mpq<Policy>(arg); } };
-40039: 
-40039: template <typename Policy>
-40039: inline Result
-40039: assign_special_mpq(mpq_class& v, Result_Class c, Rounding_Dir) {
-40039:   switch (c) {
-40039:   case VC_NAN:
-40039:     if (Policy::has_nan) {
-40039:       v.get_num() = 0;
-40039:       v.get_den() = 0;
-40039:       return V_NAN | V_UNREPRESENTABLE;
-40039:     }
-40039:     return V_NAN;
-40039:   case VC_MINUS_INFINITY:
-40039:     if (Policy::has_infinity) {
-40039:       v.get_num() = -1;
-40039:       v.get_den() = 0;
-40039:       return V_EQ_MINUS_INFINITY;
-40039:     }
-40039:     return V_EQ_MINUS_INFINITY | V_UNREPRESENTABLE;
-40039:   case VC_PLUS_INFINITY:
-40039:     if (Policy::has_infinity) {
-40039:       v.get_num() = 1;
-40039:       v.get_den() = 0;
-40039:       return V_EQ_PLUS_INFINITY;
-40039:     }
-40039:     return V_EQ_PLUS_INFINITY | V_UNREPRESENTABLE;
-40039:   default:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return V_NAN | V_UNREPRESENTABLE;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Policy> struct assign_special_function_struct<Policy, mpq_class> { static inline Result function( mpq_class& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_mpq<Policy>(arg, a1, a2); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline void function( mpq_class& arg1, const mpq_class &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename From>
-40039: inline Result
-40039: construct_mpq_base(mpq_class& to, const From& from, Rounding_Dir) {
-40039:   new(&to) mpq_class(from);
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, mpz_class> { static inline Result function( mpq_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return construct_mpq_base<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, char> { static inline Result function( mpq_class& arg1, const char &arg2, Rounding_Dir a1) { return construct_mpq_base<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, signed char> { static inline Result function( mpq_class& arg1, const signed char &arg2, Rounding_Dir a1) { return construct_mpq_base<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, signed short> { static inline Result function( mpq_class& arg1, const signed short &arg2, Rounding_Dir a1) { return construct_mpq_base<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, signed int> { static inline Result function( mpq_class& arg1, const signed int &arg2, Rounding_Dir a1) { return construct_mpq_base<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, signed long> { static inline Result function( mpq_class& arg1, const signed long &arg2, Rounding_Dir a1) { return construct_mpq_base<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, unsigned char> { static inline Result function( mpq_class& arg1, const unsigned char &arg2, Rounding_Dir a1) { return construct_mpq_base<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, unsigned short> { static inline Result function( mpq_class& arg1, const unsigned short &arg2, Rounding_Dir a1) { return construct_mpq_base<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, unsigned int> { static inline Result function( mpq_class& arg1, const unsigned int &arg2, Rounding_Dir a1) { return construct_mpq_base<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, unsigned long> { static inline Result function( mpq_class& arg1, const unsigned long &arg2, Rounding_Dir a1) { return construct_mpq_base<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename From>
-40039: inline Result
-40039: construct_mpq_float(mpq_class& to, const From& from, Rounding_Dir dir) {
-40039:   if (is_nan<From_Policy>(from)) {
-40039:     return construct_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (is_minf<From_Policy>(from)) {
-40039:     return construct_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
-40039:   }
-40039:   else if (is_pinf<From_Policy>(from)) {
-40039:     return construct_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:   }
-40039:   new(&to) mpq_class(from);
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, float> { static inline Result function( mpq_class& arg1, const float &arg2, Rounding_Dir a1) { return construct_mpq_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, double> { static inline Result function( mpq_class& arg1, const double &arg2, Rounding_Dir a1) { return construct_mpq_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, mpz_class> { static inline Result function( mpq_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, char> { static inline Result function( mpq_class& arg1, const char &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, signed char> { static inline Result function( mpq_class& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, signed short> { static inline Result function( mpq_class& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, signed int> { static inline Result function( mpq_class& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, signed long> { static inline Result function( mpq_class& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, unsigned char> { static inline Result function( mpq_class& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, unsigned short> { static inline Result function( mpq_class& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, unsigned int> { static inline Result function( mpq_class& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, unsigned long> { static inline Result function( mpq_class& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename From>
-40039: inline Result
-40039: assign_mpq_float(mpq_class& to, const From& from, Rounding_Dir dir) {
-40039:   if (is_nan<From_Policy>(from)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (is_minf<From_Policy>(from)) {
-40039:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
-40039:   }
-40039:   else if (is_pinf<From_Policy>(from)) {
-40039:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:   }
-40039:   assign_mpq_numeric_float(to, from);
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, float> { static inline Result function( mpq_class& arg1, const float &arg2, Rounding_Dir a1) { return assign_mpq_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, double> { static inline Result function( mpq_class& arg1, const double &arg2, Rounding_Dir a1) { return assign_mpq_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, long double> { static inline Result function( mpq_class& arg1, const long double &arg2, Rounding_Dir a1) { return assign_mpq_float<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename From>
-40039: inline Result
-40039: assign_mpq_signed_int(mpq_class& to, const From from, Rounding_Dir) {
-40039:   if (sizeof(From) <= sizeof(signed long)) {
-40039:     to = static_cast<signed long>(from);
-40039:   }
-40039:   else {
-40039:     mpz_ptr m = to.get_num().get_mpz_t();
-40039:     if (from >= 0) {
-40039:       
-40039: # 221 "../../src/checked_mpq_inlines.hh" 3 4
-40039:      __gmpz_import
-40039: # 221 "../../src/checked_mpq_inlines.hh"
-40039:                (m, 1, 1, sizeof(From), 0, 0, &from);
-40039:     }
-40039:     else {
-40039:       From n = -from;
-40039:       
-40039: # 225 "../../src/checked_mpq_inlines.hh" 3 4
-40039:      __gmpz_import
-40039: # 225 "../../src/checked_mpq_inlines.hh"
-40039:                (m, 1, 1, sizeof(From), 0, 0, &n);
-40039:       
-40039: # 226 "../../src/checked_mpq_inlines.hh" 3 4
-40039:      __gmpz_neg
-40039: # 226 "../../src/checked_mpq_inlines.hh"
-40039:             (m, m);
-40039:     }
-40039:     to.get_den() = 1;
-40039:   }
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, signed long long> { static inline Result function( mpq_class& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_mpq_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy, typename From>
-40039: inline Result
-40039: assign_mpq_unsigned_int(mpq_class& to, const From from, Rounding_Dir) {
-40039:   if (sizeof(From) <= sizeof(unsigned long)) {
-40039:     to = static_cast<unsigned long>(from);
-40039:   }
-40039:   else {
-40039:     
-40039: # 242 "../../src/checked_mpq_inlines.hh" 3 4
-40039:    __gmpz_import
-40039: # 242 "../../src/checked_mpq_inlines.hh"
-40039:              (to.get_num().get_mpz_t(), 1, 1, sizeof(From), 0, 0, &from);
-40039:     to.get_den() = 1;
-40039:   }
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, unsigned long long> { static inline Result function( mpq_class& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_mpq_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy>
-40039: inline Result
-40039: floor_mpq(mpq_class& to, const mpq_class& from, Rounding_Dir) {
-40039:   
-40039: # 253 "../../src/checked_mpq_inlines.hh" 3 4
-40039:  __gmpz_fdiv_q
-40039: # 253 "../../src/checked_mpq_inlines.hh"
-40039:            (to.get_num().get_mpz_t(),
-40039:              from.get_num().get_mpz_t(), from.get_den().get_mpz_t());
-40039:   to.get_den() = 1;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return floor_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy>
-40039: inline Result
-40039: ceil_mpq(mpq_class& to, const mpq_class& from, Rounding_Dir) {
-40039:   
-40039: # 264 "../../src/checked_mpq_inlines.hh" 3 4
-40039:  __gmpz_cdiv_q
-40039: # 264 "../../src/checked_mpq_inlines.hh"
-40039:            (to.get_num().get_mpz_t(),
-40039:              from.get_num().get_mpz_t(), from.get_den().get_mpz_t());
-40039:   to.get_den() = 1;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return ceil_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy>
-40039: inline Result
-40039: trunc_mpq(mpq_class& to, const mpq_class& from, Rounding_Dir) {
-40039:   
-40039: # 275 "../../src/checked_mpq_inlines.hh" 3 4
-40039:  __gmpz_tdiv_q
-40039: # 275 "../../src/checked_mpq_inlines.hh"
-40039:            (to.get_num().get_mpz_t(),
-40039:              from.get_num().get_mpz_t(), from.get_den().get_mpz_t());
-40039:   to.get_den() = 1;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return trunc_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy>
-40039: inline Result
-40039: neg_mpq(mpq_class& to, const mpq_class& from, Rounding_Dir) {
-40039:   
-40039: # 286 "../../src/checked_mpq_inlines.hh" 3 4
-40039:  __gmpq_neg
-40039: # 286 "../../src/checked_mpq_inlines.hh"
-40039:         (to.get_mpq_t(), from.get_mpq_t());
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return neg_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
-40039: inline Result
-40039: add_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y, Rounding_Dir) {
-40039:   to = x + y;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, mpq_class, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return add_mpq<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
-40039: inline Result
-40039: sub_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y, Rounding_Dir) {
-40039:   to = x - y;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, mpq_class, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return sub_mpq<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
-40039: inline Result
-40039: mul_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y, Rounding_Dir) {
-40039:   to = x * y;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, mpq_class, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return mul_mpq<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
-40039: inline Result
-40039: div_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y, Rounding_Dir) {
-40039:   if (((To_Policy::check_div_zero) ? (sgn(y) == 0) : (
-40039: # 322 "../../src/checked_mpq_inlines.hh" 3 4
-40039:      (static_cast<void> (0))
-40039: # 322 "../../src/checked_mpq_inlines.hh"
-40039:      , false))) {
-40039:     return assign_nan<To_Policy>(to, V_DIV_ZERO);
-40039:   }
-40039:   to = x / y;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, mpq_class, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return div_mpq<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
-40039: inline Result
-40039: idiv_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y, Rounding_Dir dir) {
-40039:   if (((To_Policy::check_div_zero) ? (sgn(y) == 0) : (
-40039: # 334 "../../src/checked_mpq_inlines.hh" 3 4
-40039:      (static_cast<void> (0))
-40039: # 334 "../../src/checked_mpq_inlines.hh"
-40039:      , false))) {
-40039:     return assign_nan<To_Policy>(to, V_DIV_ZERO);
-40039:   }
-40039:   to = x / y;
-40039:   return trunc<To_Policy, To_Policy>(to, to, dir);
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, mpq_class, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return idiv_mpq<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
-40039: inline Result
-40039: rem_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y, Rounding_Dir) {
-40039:   if (((To_Policy::check_div_zero) ? (sgn(y) == 0) : (
-40039: # 346 "../../src/checked_mpq_inlines.hh" 3 4
-40039:      (static_cast<void> (0))
-40039: # 346 "../../src/checked_mpq_inlines.hh"
-40039:      , false))) {
-40039:     return assign_nan<To_Policy>(to, V_MOD_ZERO);
-40039:   }
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_tmp; mpq_class& tmp = holder_tmp.item();
-40039:   tmp = x / y;
-40039:   tmp.get_num() %= tmp.get_den();
-40039:   to = tmp * y;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, mpq_class, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return rem_mpq<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy>
-40039: inline Result
-40039: add_2exp_mpq(mpq_class& to, const mpq_class& x, unsigned int exp,
-40039:              Rounding_Dir) {
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpz_class> holder_v; mpz_class& v = holder_v.item();
-40039:   v = 1;
-40039:   
-40039: # 364 "../../src/checked_mpq_inlines.hh" 3 4
-40039:  __gmpz_mul_2exp
-40039: # 364 "../../src/checked_mpq_inlines.hh"
-40039:              (v.get_mpz_t(), v.get_mpz_t(), exp);
-40039:   to = x + v;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_mpq<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy>
-40039: inline Result
-40039: sub_2exp_mpq(mpq_class& to, const mpq_class& x, unsigned int exp,
-40039:              Rounding_Dir) {
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpz_class> holder_v; mpz_class& v = holder_v.item();
-40039:   v = 1;
-40039:   
-40039: # 377 "../../src/checked_mpq_inlines.hh" 3 4
-40039:  __gmpz_mul_2exp
-40039: # 377 "../../src/checked_mpq_inlines.hh"
-40039:              (v.get_mpz_t(), v.get_mpz_t(), exp);
-40039:   to = x - v;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_mpq<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy>
-40039: inline Result
-40039: mul_2exp_mpq(mpq_class& to, const mpq_class& x, unsigned int exp,
-40039:              Rounding_Dir) {
-40039:   
-40039: # 388 "../../src/checked_mpq_inlines.hh" 3 4
-40039:  __gmpz_mul_2exp
-40039: # 388 "../../src/checked_mpq_inlines.hh"
-40039:              (to.get_num().get_mpz_t(), x.get_num().get_mpz_t(), exp);
-40039:   to.get_den() = x.get_den();
-40039:   to.canonicalize();
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_mpq<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy>
-40039: inline Result
-40039: div_2exp_mpq(mpq_class& to, const mpq_class& x, unsigned int exp,
-40039:              Rounding_Dir) {
-40039:   to.get_num() = x.get_num();
-40039:   
-40039: # 401 "../../src/checked_mpq_inlines.hh" 3 4
-40039:  __gmpz_mul_2exp
-40039: # 401 "../../src/checked_mpq_inlines.hh"
-40039:              (to.get_den().get_mpz_t(), x.get_den().get_mpz_t(), exp);
-40039:   to.canonicalize();
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_mpq<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy>
-40039: inline Result
-40039: smod_2exp_mpq(mpq_class& to, const mpq_class& x, unsigned int exp,
-40039:               Rounding_Dir) {
-40039:   
-40039: # 412 "../../src/checked_mpq_inlines.hh" 3 4
-40039:  __gmpz_mul_2exp
-40039: # 412 "../../src/checked_mpq_inlines.hh"
-40039:              (to.get_den().get_mpz_t(), x.get_den().get_mpz_t(), exp);
-40039:   
-40039: # 413 "../../src/checked_mpq_inlines.hh" 3 4
-40039:  __gmpz_fdiv_r
-40039: # 413 "../../src/checked_mpq_inlines.hh"
-40039:            (to.get_num().get_mpz_t(), x.get_num().get_mpz_t(), to.get_den().get_mpz_t());
-40039:   
-40039: # 414 "../../src/checked_mpq_inlines.hh" 3 4
-40039:  __gmpz_fdiv_q_2exp
-40039: # 414 "../../src/checked_mpq_inlines.hh"
-40039:                 (to.get_den().get_mpz_t(), to.get_den().get_mpz_t(), 1);
-40039:   bool neg = to.get_num() >= to.get_den();
-40039:   
-40039: # 416 "../../src/checked_mpq_inlines.hh" 3 4
-40039:  __gmpz_mul_2exp
-40039: # 416 "../../src/checked_mpq_inlines.hh"
-40039:              (to.get_den().get_mpz_t(), to.get_den().get_mpz_t(), 1);
-40039:   if (neg) {
-40039:     to.get_num() -= to.get_den();
-40039:   }
-40039:   
-40039: # 420 "../../src/checked_mpq_inlines.hh" 3 4
-40039:  __gmpz_mul_2exp
-40039: # 420 "../../src/checked_mpq_inlines.hh"
-40039:              (to.get_num().get_mpz_t(), to.get_num().get_mpz_t(), exp);
-40039:   to.canonicalize();
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_mpq<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy>
-40039: inline Result
-40039: umod_2exp_mpq(mpq_class& to, const mpq_class& x, unsigned int exp,
-40039:               Rounding_Dir) {
-40039:   
-40039: # 431 "../../src/checked_mpq_inlines.hh" 3 4
-40039:  __gmpz_mul_2exp
-40039: # 431 "../../src/checked_mpq_inlines.hh"
-40039:              (to.get_den().get_mpz_t(), x.get_den().get_mpz_t(), exp);
-40039:   
-40039: # 432 "../../src/checked_mpq_inlines.hh" 3 4
-40039:  __gmpz_fdiv_r
-40039: # 432 "../../src/checked_mpq_inlines.hh"
-40039:            (to.get_num().get_mpz_t(), x.get_num().get_mpz_t(), to.get_den().get_mpz_t());
-40039:   
-40039: # 433 "../../src/checked_mpq_inlines.hh" 3 4
-40039:  __gmpz_mul_2exp
-40039: # 433 "../../src/checked_mpq_inlines.hh"
-40039:              (to.get_num().get_mpz_t(), to.get_num().get_mpz_t(), exp);
-40039:   to.canonicalize();
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_mpq<Policy1, Policy2>(arg1, arg2, a1, a2); } };
-40039: 
-40039: template <typename To_Policy, typename From_Policy>
-40039: inline Result
-40039: abs_mpq(mpq_class& to, const mpq_class& from, Rounding_Dir) {
-40039:   to = abs(from);
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return abs_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
-40039: inline Result
-40039: add_mul_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y,
-40039:             Rounding_Dir) {
-40039:   to += x * y;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, mpq_class, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return add_mul_mpq<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
-40039: inline Result
-40039: sub_mul_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y,
-40039:             Rounding_Dir) {
-40039:   to -= x * y;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, mpq_class, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return sub_mul_mpq<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
-40039: 
-40039: extern unsigned irrational_precision;
-40039: 
-40039: template <typename To_Policy, typename From_Policy>
-40039: inline Result
-40039: sqrt_mpq(mpq_class& to, const mpq_class& from, Rounding_Dir dir) {
-40039:   if (((To_Policy::check_sqrt_neg) ? (from < 0) : (
-40039: # 474 "../../src/checked_mpq_inlines.hh" 3 4
-40039:      (static_cast<void> (0))
-40039: # 474 "../../src/checked_mpq_inlines.hh"
-40039:      , false))) {
-40039:     return assign_nan<To_Policy>(to, V_SQRT_NEG);
-40039:   }
-40039:   if (from == 0) {
-40039:     to = 0;
-40039:     return V_EQ;
-40039:   }
-40039:   bool gt1 = from.get_num() > from.get_den();
-40039:   const mpz_class& from_a = gt1 ? from.get_num() : from.get_den();
-40039:   const mpz_class& from_b = gt1 ? from.get_den() : from.get_num();
-40039:   mpz_class& to_a = gt1 ? to.get_num() : to.get_den();
-40039:   mpz_class& to_b = gt1 ? to.get_den() : to.get_num();
-40039:   Rounding_Dir rdir = gt1 ? dir : inverse(dir);
-40039:   mul_2exp<To_Policy, From_Policy>(to_a, from_a,
-40039:                                    2*irrational_precision, ROUND_IGNORE);
-40039:   Result r_div
-40039:     = div<To_Policy, To_Policy, To_Policy>(to_a, to_a, from_b, rdir);
-40039:   Result r_sqrt = sqrt<To_Policy, To_Policy>(to_a, to_a, rdir);
-40039:   to_b = 1;
-40039:   mul_2exp<To_Policy, To_Policy>(to_b, to_b,
-40039:                                  irrational_precision, ROUND_IGNORE);
-40039:   to.canonicalize();
-40039:   return (r_div != V_EQ) ? r_div : r_sqrt;
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return sqrt_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
-40039: 
-40039: template <typename Policy>
-40039: inline Result
-40039: input_mpq(mpq_class& to, std::istream& is, Rounding_Dir dir) {
-40039:   Result r = input_mpq(to, is);
-40039:   Result_Class c = result_class(r);
-40039:   switch (c) {
-40039:   case VC_MINUS_INFINITY:
-40039:   case VC_PLUS_INFINITY:
-40039:     return assign_special<Policy>(to, c, dir);
-40039:   case VC_NAN:
-40039:     return assign_nan<Policy>(to, r);
-40039:   default:
-40039:     return r;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Policy> struct input_function_struct<Policy, mpq_class> { static inline Result function( mpq_class& arg, std::istream& a1, Rounding_Dir a2) { return input_mpq<Policy>(arg, a1, a2); } };
-40039: 
-40039: template <typename Policy>
-40039: inline Result
-40039: output_mpq(std::ostream& os,
-40039:            const mpq_class& from,
-40039:            const Numeric_Format&,
-40039:            Rounding_Dir) {
-40039:   os << from;
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename Policy> struct output_function_struct<Policy, mpq_class> { static inline Result function(std::ostream& b1, const mpq_class& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_mpq<Policy>(b1, arg, a1, a2); } };
-40039: 
-40039: }
-40039: 
-40039: 
-40039: inline unsigned
-40039: irrational_precision() {
-40039:   return Checked::irrational_precision;
-40039: }
-40039: # 548 "../../src/checked_mpq_inlines.hh"
-40039: inline void
-40039: set_irrational_precision(const unsigned p) {
-40039:   if (p <= 0x7fffffff) {
-40039:     Checked::irrational_precision = p;
-40039:   }
-40039:   else {
-40039:     throw std::invalid_argument("PPL::set_irrational_precision(p)"
-40039:                                 " with p > INT_MAX");
-40039:   }
-40039: }
-40039: 
-40039: }
-40039: # 705 "../../src/checked_defs.hh" 2
-40039: # 1 "../../src/checked_ext_inlines.hh" 1
-40039: # 27 "../../src/checked_ext_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T> struct FPU_Related : public False {};
-40039: template <> struct FPU_Related<float> : public True {};
-40039: template <> struct FPU_Related<double> : public True {};
-40039: template <> struct FPU_Related<long double> : public True {};
-40039: 
-40039: namespace Checked {
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: handle_ext_natively(const T&) {
-40039:   return FPU_Related<T>::value;
-40039: }
-40039: 
-40039: template <typename Policy, typename Type>
-40039: inline bool
-40039: ext_to_handle(const Type& x) {
-40039:   return !handle_ext_natively(x)
-40039:     && (Policy::has_infinity || Policy::has_nan);
-40039: }
-40039: 
-40039: template <typename Policy, typename Type>
-40039: inline Result_Relation
-40039: sgn_ext(const Type& x) {
-40039:   if (!ext_to_handle<Policy>(x)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<Policy>(x)) {
-40039:     return VR_EMPTY;
-40039:   }
-40039:   else if (is_minf<Policy>(x)) {
-40039:     return VR_LT;
-40039:   }
-40039:   else if (is_pinf<Policy>(x)) {
-40039:     return VR_GT;
-40039:   }
-40039:   else {
-40039:   native:
-40039:     return sgn<Policy>(x);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy,
-40039:           typename To, typename From>
-40039: inline Result
-40039: construct_ext(To& to, const From& x, Rounding_Dir dir) {
-40039:   if (!ext_to_handle<From_Policy>(x)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<From_Policy>(x)) {
-40039:     return construct_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (is_minf<From_Policy>(x)) {
-40039:     return construct_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
-40039:   }
-40039:   else if (is_pinf<From_Policy>(x)) {
-40039:     return construct_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:   }
-40039:   else {
-40039:   native:
-40039:     return construct<To_Policy, From_Policy>(to, x, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy,
-40039:           typename To, typename From>
-40039: inline Result
-40039: assign_ext(To& to, const From& x, Rounding_Dir dir) {
-40039:   if (!ext_to_handle<From_Policy>(x)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (is_minf<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
-40039:   }
-40039:   else if (is_pinf<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:   }
-40039:   else {
-40039:   native:
-40039:     return assign<To_Policy, From_Policy>(to, x, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy,
-40039:           typename To, typename From>
-40039: inline Result
-40039: neg_ext(To& to, const From& x, Rounding_Dir dir) {
-40039:   if (!ext_to_handle<From_Policy>(x)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (is_minf<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:   }
-40039:   else if (is_pinf<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
-40039:   }
-40039:   else {
-40039:   native:
-40039:     return neg<To_Policy, From_Policy>(to, x, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy,
-40039:           typename To, typename From>
-40039: inline Result
-40039: floor_ext(To& to, const From& x, Rounding_Dir dir) {
-40039:   if (!ext_to_handle<From_Policy>(x)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (is_minf<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
-40039:   }
-40039:   else if (is_pinf<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:   }
-40039:   else {
-40039:   native:
-40039:     return floor<To_Policy, From_Policy>(to, x, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy,
-40039:           typename To, typename From>
-40039: inline Result
-40039: ceil_ext(To& to, const From& x, Rounding_Dir dir) {
-40039:   if (!ext_to_handle<From_Policy>(x)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (is_minf<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
-40039:   }
-40039:   else if (is_pinf<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:   }
-40039:   else {
-40039:   native:
-40039:     return ceil<To_Policy, From_Policy>(to, x, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy,
-40039:           typename To, typename From>
-40039: inline Result
-40039: trunc_ext(To& to, const From& x, Rounding_Dir dir) {
-40039:   if (!ext_to_handle<From_Policy>(x)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (is_minf<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
-40039:   }
-40039:   else if (is_pinf<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:   }
-40039:   else {
-40039:   native:
-40039:     return trunc<To_Policy, From_Policy>(to, x, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy,
-40039:           typename To, typename From>
-40039: inline Result
-40039: abs_ext(To& to, const From& x, Rounding_Dir dir) {
-40039:   if (!ext_to_handle<From_Policy>(x)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (is_minf<From_Policy>(x) || is_pinf<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:   }
-40039:   else {
-40039:   native:
-40039:     return abs<To_Policy, From_Policy>(to, x, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename To, typename From1, typename From2>
-40039: inline Result
-40039: add_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
-40039:   if (!ext_to_handle<From1_Policy>(x) && !ext_to_handle<From2_Policy>(y)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<From1_Policy>(x) || is_nan<From2_Policy>(y)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (is_minf<From1_Policy>(x)) {
-40039:     if (((To_Policy::check_inf_add_inf) ? (is_pinf<From2_Policy>(y)) : (
-40039: # 232 "../../src/checked_ext_inlines.hh" 3 4
-40039:        (static_cast<void> (0))
-40039: # 232 "../../src/checked_ext_inlines.hh"
-40039:        , false))) {
-40039:       goto inf_add_inf;
-40039:     }
-40039:     else {
-40039:       goto minf;
-40039:     }
-40039:   }
-40039:   else if (is_pinf<From1_Policy>(x)) {
-40039:     if (((To_Policy::check_inf_add_inf) ? (is_minf<From2_Policy>(y)) : (
-40039: # 240 "../../src/checked_ext_inlines.hh" 3 4
-40039:        (static_cast<void> (0))
-40039: # 240 "../../src/checked_ext_inlines.hh"
-40039:        , false))) {
-40039:     inf_add_inf:
-40039:       return assign_nan<To_Policy>(to, V_INF_ADD_INF);
-40039:     }
-40039:     else {
-40039:       goto pinf;
-40039:     }
-40039:   }
-40039:   else {
-40039:     if (is_minf<From2_Policy>(y)) {
-40039:     minf:
-40039:       return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
-40039:     }
-40039:     else if (is_pinf<From2_Policy>(y)) {
-40039:     pinf:
-40039:       return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:     }
-40039:     else {
-40039:     native:
-40039:       return add<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename To, typename From1, typename From2>
-40039: inline Result
-40039: sub_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
-40039:   if (!ext_to_handle<From1_Policy>(x) && !ext_to_handle<From2_Policy>(y)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<From1_Policy>(x) || is_nan<From2_Policy>(y)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (is_minf<From1_Policy>(x)) {
-40039:     if (((To_Policy::check_inf_sub_inf) ? (is_minf<From2_Policy>(y)) : (
-40039: # 275 "../../src/checked_ext_inlines.hh" 3 4
-40039:        (static_cast<void> (0))
-40039: # 275 "../../src/checked_ext_inlines.hh"
-40039:        , false))) {
-40039:       goto inf_sub_inf;
-40039:     }
-40039:     else {
-40039:       goto minf;
-40039:     }
-40039:   }
-40039:   else if (is_pinf<From1_Policy>(x)) {
-40039:     if (((To_Policy::check_inf_sub_inf) ? (is_pinf<From2_Policy>(y)) : (
-40039: # 283 "../../src/checked_ext_inlines.hh" 3 4
-40039:        (static_cast<void> (0))
-40039: # 283 "../../src/checked_ext_inlines.hh"
-40039:        , false))) {
-40039:     inf_sub_inf:
-40039:       return assign_nan<To_Policy>(to, V_INF_SUB_INF);
-40039:     }
-40039:     else {
-40039:       goto pinf;
-40039:     }
-40039:   }
-40039:   else {
-40039:     if (is_pinf<From2_Policy>(y)) {
-40039:     minf:
-40039:       return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
-40039:     }
-40039:     else if (is_minf<From2_Policy>(y)) {
-40039:     pinf:
-40039:       return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:     }
-40039:     else {
-40039:     native:
-40039:       return sub<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename To, typename From1, typename From2>
-40039: inline Result
-40039: mul_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
-40039:   if (!ext_to_handle<From1_Policy>(x) && !ext_to_handle<From2_Policy>(y)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<From1_Policy>(x) || is_nan<From2_Policy>(y)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   if (is_minf<From1_Policy>(x)) {
-40039:     switch (sgn_ext<From2_Policy>(y)) {
-40039:     case VR_LT:
-40039:       goto pinf;
-40039:     case VR_GT:
-40039:       goto minf;
-40039:     default:
-40039:       goto inf_mul_zero;
-40039:     }
-40039:   }
-40039:   else if (is_pinf<From1_Policy>(x)) {
-40039:     switch (sgn_ext<From2_Policy>(y)) {
-40039:     case VR_LT:
-40039:       goto minf;
-40039:     case VR_GT:
-40039:       goto pinf;
-40039:     default:
-40039:       goto inf_mul_zero;
-40039:     }
-40039:   }
-40039:   else {
-40039:     if (is_minf<From2_Policy>(y)) {
-40039:       switch (sgn<From1_Policy>(x)) {
-40039:       case VR_LT:
-40039:         goto pinf;
-40039:       case VR_GT:
-40039:         goto minf;
-40039:       default:
-40039:         goto inf_mul_zero;
-40039:       }
-40039:     }
-40039:     else if (is_pinf<From2_Policy>(y)) {
-40039:       switch (sgn<From1_Policy>(x)) {
-40039:       case VR_LT:
-40039:       minf:
-40039:         return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
-40039:       case VR_GT:
-40039:       pinf:
-40039:         return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:       default:
-40039:       inf_mul_zero:
-40039:         ((void) 0);
-40039:         return assign_nan<To_Policy>(to, V_INF_MUL_ZERO);
-40039:       }
-40039:     }
-40039:     else {
-40039:     native:
-40039:       return mul<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename To, typename From1, typename From2>
-40039: inline Result
-40039: add_mul_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
-40039:   if (!ext_to_handle<To_Policy>(to)
-40039:       && !ext_to_handle<From1_Policy>(x) && !ext_to_handle<From2_Policy>(y)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<To_Policy>(to)
-40039:       || is_nan<From1_Policy>(x) || is_nan<From2_Policy>(y)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   if (is_minf<From1_Policy>(x)) {
-40039:     switch (sgn_ext<From2_Policy>(y)) {
-40039:     case VR_LT:
-40039:       goto a_pinf;
-40039:     case VR_GT:
-40039:       goto a_minf;
-40039:     default:
-40039:       goto inf_mul_zero;
-40039:     }
-40039:   }
-40039:   else if (is_pinf<From1_Policy>(x)) {
-40039:     switch (sgn_ext<From2_Policy>(y)) {
-40039:     case VR_LT:
-40039:       goto a_minf;
-40039:     case VR_GT:
-40039:       goto a_pinf;
-40039:     default:
-40039:       goto inf_mul_zero;
-40039:     }
-40039:   }
-40039:   else {
-40039:     if (is_minf<From2_Policy>(y)) {
-40039:       switch (sgn<From1_Policy>(x)) {
-40039:       case VR_LT:
-40039:         goto a_pinf;
-40039:       case VR_GT:
-40039:         goto a_minf;
-40039:       default:
-40039:         goto inf_mul_zero;
-40039:       }
-40039:     }
-40039:     else if (is_pinf<From2_Policy>(y)) {
-40039:       switch (sgn<From1_Policy>(x)) {
-40039:       case VR_LT:
-40039:       a_minf:
-40039:         if (((To_Policy::check_inf_add_inf) ? (is_pinf<To_Policy>(to)) : (
-40039: # 417 "../../src/checked_ext_inlines.hh" 3 4
-40039:            (static_cast<void> (0))
-40039: # 417 "../../src/checked_ext_inlines.hh"
-40039:            , false))) {
-40039:           goto inf_add_inf;
-40039:         }
-40039:         else {
-40039:           goto minf;
-40039:         }
-40039:       case VR_GT:
-40039:       a_pinf:
-40039:         if (((To_Policy::check_inf_add_inf) ? (is_minf<To_Policy>(to)) : (
-40039: # 425 "../../src/checked_ext_inlines.hh" 3 4
-40039:            (static_cast<void> (0))
-40039: # 425 "../../src/checked_ext_inlines.hh"
-40039:            , false))) {
-40039:         inf_add_inf:
-40039:           return assign_nan<To_Policy>(to, V_INF_ADD_INF);
-40039:         }
-40039:         else {
-40039:           goto pinf;
-40039:         }
-40039:       default:
-40039:       inf_mul_zero:
-40039:         ((void) 0);
-40039:         return assign_nan<To_Policy>(to, V_INF_MUL_ZERO);
-40039:       }
-40039:     }
-40039:     else {
-40039:       if (is_minf<To_Policy>(to)) {
-40039:       minf:
-40039:         return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
-40039:       }
-40039:       if (is_pinf<To_Policy>(to)) {
-40039:       pinf:
-40039:         return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:       }
-40039:     native:
-40039:       return add_mul<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename To, typename From1, typename From2>
-40039: inline Result
-40039: sub_mul_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
-40039:   if (!ext_to_handle<To_Policy>(to)
-40039:       && !ext_to_handle<From1_Policy>(x) && !ext_to_handle<From2_Policy>(y)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<To_Policy>(to)
-40039:       || is_nan<From1_Policy>(x) || is_nan<From2_Policy>(y)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   if (is_minf<From1_Policy>(x)) {
-40039:     switch (sgn_ext<From2_Policy>(y)) {
-40039:     case VR_LT:
-40039:       goto a_pinf;
-40039:     case VR_GT:
-40039:       goto a_minf;
-40039:     default:
-40039:       goto inf_mul_zero;
-40039:     }
-40039:   }
-40039:   else if (is_pinf<From1_Policy>(x)) {
-40039:     switch (sgn_ext<From2_Policy>(y)) {
-40039:     case VR_LT:
-40039:       goto a_minf;
-40039:     case VR_GT:
-40039:       goto a_pinf;
-40039:     default:
-40039:       goto inf_mul_zero;
-40039:     }
-40039:   }
-40039:   else {
-40039:     if (is_minf<From2_Policy>(y)) {
-40039:       switch (sgn<From1_Policy>(x)) {
-40039:       case VR_LT:
-40039:         goto a_pinf;
-40039:       case VR_GT:
-40039:         goto a_minf;
-40039:       default:
-40039:         goto inf_mul_zero;
-40039:       }
-40039:     }
-40039:     else if (is_pinf<From2_Policy>(y)) {
-40039:       switch (sgn<From1_Policy>(x)) {
-40039:       case VR_LT:
-40039:       a_minf:
-40039:         if (((To_Policy::check_inf_sub_inf) ? (is_minf<To_Policy>(to)) : (
-40039: # 500 "../../src/checked_ext_inlines.hh" 3 4
-40039:            (static_cast<void> (0))
-40039: # 500 "../../src/checked_ext_inlines.hh"
-40039:            , false))) {
-40039:           goto inf_sub_inf;
-40039:         }
-40039:         else {
-40039:           goto pinf;
-40039:         }
-40039:       case VR_GT:
-40039:       a_pinf:
-40039:         if (((To_Policy::check_inf_sub_inf) ? (is_pinf<To_Policy>(to)) : (
-40039: # 508 "../../src/checked_ext_inlines.hh" 3 4
-40039:            (static_cast<void> (0))
-40039: # 508 "../../src/checked_ext_inlines.hh"
-40039:            , false))) {
-40039:         inf_sub_inf:
-40039:           return assign_nan<To_Policy>(to, V_INF_SUB_INF);
-40039:         }
-40039:         else {
-40039:           goto minf;
-40039:         }
-40039:       default:
-40039:       inf_mul_zero:
-40039:         ((void) 0);
-40039:         return assign_nan<To_Policy>(to, V_INF_MUL_ZERO);
-40039:       }
-40039:     }
-40039:     else {
-40039:       if (is_minf<To_Policy>(to)) {
-40039:       minf:
-40039:         return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
-40039:       }
-40039:       if (is_pinf<To_Policy>(to)) {
-40039:       pinf:
-40039:         return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:       }
-40039:     native:
-40039:       return sub_mul<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename To, typename From1, typename From2>
-40039: inline Result
-40039: div_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
-40039:   if (!ext_to_handle<From1_Policy>(x) && !ext_to_handle<From2_Policy>(y)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<From1_Policy>(x) || is_nan<From2_Policy>(y)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   if (is_minf<From1_Policy>(x)) {
-40039:     if (((To_Policy::check_inf_div_inf) ? (is_minf<From2_Policy>(y) || is_pinf<From2_Policy>(y)) : (
-40039: # 547 "../../src/checked_ext_inlines.hh" 3 4
-40039:        (static_cast<void> (0))
-40039: # 547 "../../src/checked_ext_inlines.hh"
-40039:        , false))
-40039:                                             ) {
-40039:       goto inf_div_inf;
-40039:     }
-40039:     else {
-40039:       switch (sgn<From2_Policy>(y)) {
-40039:       case VR_LT:
-40039:         goto pinf;
-40039:       case VR_GT:
-40039:         goto minf;
-40039:       default:
-40039:         goto div_zero;
-40039:       }
-40039:     }
-40039:   }
-40039:   else if (is_pinf<From1_Policy>(x)) {
-40039:     if (((To_Policy::check_inf_div_inf) ? (is_minf<From2_Policy>(y) || is_pinf<From2_Policy>(y)) : (
-40039: # 563 "../../src/checked_ext_inlines.hh" 3 4
-40039:        (static_cast<void> (0))
-40039: # 563 "../../src/checked_ext_inlines.hh"
-40039:        , false))
-40039:                                             ) {
-40039:     inf_div_inf:
-40039:       return assign_nan<To_Policy>(to, V_INF_DIV_INF);
-40039:     }
-40039:     else {
-40039:       switch (sgn<From2_Policy>(y)) {
-40039:       case VR_LT:
-40039:       minf:
-40039:         return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
-40039:       case VR_GT:
-40039:       pinf:
-40039:         return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:       default:
-40039:       div_zero:
-40039:         ((void) 0);
-40039:         return assign_nan<To_Policy>(to, V_DIV_ZERO);
-40039:       }
-40039:     }
-40039:   }
-40039:   else {
-40039:     if (is_minf<From2_Policy>(y) || is_pinf<From2_Policy>(y)) {
-40039:       to = 0;
-40039:       return V_EQ;
-40039:     }
-40039:     else {
-40039:     native:
-40039:       return div<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename To, typename From1, typename From2>
-40039: inline Result
-40039: idiv_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
-40039:   if (!ext_to_handle<From1_Policy>(x) && !ext_to_handle<From2_Policy>(y)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<From1_Policy>(x) || is_nan<From2_Policy>(y)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   if (is_minf<From1_Policy>(x)) {
-40039:     if (((To_Policy::check_inf_div_inf) ? (is_minf<From2_Policy>(y) || is_pinf<From2_Policy>(y)) : (
-40039: # 607 "../../src/checked_ext_inlines.hh" 3 4
-40039:        (static_cast<void> (0))
-40039: # 607 "../../src/checked_ext_inlines.hh"
-40039:        , false))
-40039:                                             ) {
-40039:       goto inf_div_inf;
-40039:     }
-40039:     else {
-40039:       switch (sgn<From2_Policy>(y)) {
-40039:       case VR_LT:
-40039:         goto pinf;
-40039:       case VR_GT:
-40039:         goto minf;
-40039:       default:
-40039:         goto div_zero;
-40039:       }
-40039:     }
-40039:   }
-40039:   else if (is_pinf<From1_Policy>(x)) {
-40039:     if (((To_Policy::check_inf_div_inf) ? (is_minf<From2_Policy>(y) || is_pinf<From2_Policy>(y)) : (
-40039: # 623 "../../src/checked_ext_inlines.hh" 3 4
-40039:        (static_cast<void> (0))
-40039: # 623 "../../src/checked_ext_inlines.hh"
-40039:        , false))
-40039:                                             ) {
-40039:     inf_div_inf:
-40039:       return assign_nan<To_Policy>(to, V_INF_DIV_INF);
-40039:     }
-40039:     else {
-40039:       switch (sgn<From2_Policy>(y)) {
-40039:       case VR_LT:
-40039:       minf:
-40039:         return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
-40039:       case VR_GT:
-40039:       pinf:
-40039:         return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:       default:
-40039:       div_zero:
-40039:         ((void) 0);
-40039:         return assign_nan<To_Policy>(to, V_DIV_ZERO);
-40039:       }
-40039:     }
-40039:   }
-40039:   else {
-40039:     if (is_minf<From2_Policy>(y) || is_pinf<From2_Policy>(y)) {
-40039:       to = 0;
-40039:       return V_EQ;
-40039:     }
-40039:     else {
-40039:     native:
-40039:       return idiv<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename To, typename From1, typename From2>
-40039: inline Result
-40039: rem_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
-40039:   if (!ext_to_handle<From1_Policy>(x) && !ext_to_handle<From2_Policy>(y)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<From1_Policy>(x) || is_nan<From2_Policy>(y)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (((To_Policy::check_inf_mod) ? (is_minf<From1_Policy>(x) || is_pinf<From1_Policy>(x)) : (
-40039: # 666 "../../src/checked_ext_inlines.hh" 3 4
-40039:           (static_cast<void> (0))
-40039: # 666 "../../src/checked_ext_inlines.hh"
-40039:           , false))
-40039:                                                ) {
-40039:     return assign_nan<To_Policy>(to, V_INF_MOD);
-40039:   }
-40039:   else {
-40039:     if (is_minf<From1_Policy>(y) || is_pinf<From2_Policy>(y)) {
-40039:       to = x;
-40039:       return V_EQ;
-40039:     }
-40039:     else {
-40039:     native:
-40039:       return rem<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy,
-40039:           typename To, typename From>
-40039: inline Result
-40039: add_2exp_ext(To& to, const From& x, unsigned int exp, Rounding_Dir dir) {
-40039:   if (!ext_to_handle<From_Policy>(x)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (is_minf<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
-40039:   }
-40039:   else if (is_pinf<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:   }
-40039:   else {
-40039:   native:
-40039:     return add_2exp<To_Policy, From_Policy>(to, x, exp, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy,
-40039:           typename To, typename From>
-40039: inline Result
-40039: sub_2exp_ext(To& to, const From& x, unsigned int exp, Rounding_Dir dir) {
-40039:   if (!ext_to_handle<From_Policy>(x)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (is_minf<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
-40039:   }
-40039:   else if (is_pinf<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:   }
-40039:   else {
-40039:   native:
-40039:     return sub_2exp<To_Policy, From_Policy>(to, x, exp, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy,
-40039:           typename To, typename From>
-40039: inline Result
-40039: mul_2exp_ext(To& to, const From& x, unsigned int exp, Rounding_Dir dir) {
-40039:   if (!ext_to_handle<From_Policy>(x)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (is_minf<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
-40039:   }
-40039:   else if (is_pinf<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:   }
-40039:   else {
-40039:   native:
-40039:     return mul_2exp<To_Policy, From_Policy>(to, x, exp, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy,
-40039:           typename To, typename From>
-40039: inline Result
-40039: div_2exp_ext(To& to, const From& x, unsigned int exp, Rounding_Dir dir) {
-40039:   if (!ext_to_handle<From_Policy>(x)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (is_minf<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
-40039:   }
-40039:   else if (is_pinf<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:   }
-40039:   else {
-40039:   native:
-40039:     return div_2exp<To_Policy, From_Policy>(to, x, exp, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy,
-40039:           typename To, typename From>
-40039: inline Result
-40039: smod_2exp_ext(To& to, const From& x, unsigned int exp, Rounding_Dir dir) {
-40039:   if (!ext_to_handle<From_Policy>(x)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (((To_Policy::check_inf_mod) ? (is_minf<From_Policy>(x) || is_pinf<From_Policy>(x)) : (
-40039: # 780 "../../src/checked_ext_inlines.hh" 3 4
-40039:           (static_cast<void> (0))
-40039: # 780 "../../src/checked_ext_inlines.hh"
-40039:           , false))
-40039:                                               ) {
-40039:     return assign_nan<To_Policy>(to, V_INF_MOD);
-40039:   }
-40039:   else {
-40039:   native:
-40039:     return smod_2exp<To_Policy, From_Policy>(to, x, exp, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy,
-40039:           typename To, typename From>
-40039: inline Result
-40039: umod_2exp_ext(To& to, const From& x, unsigned int exp, Rounding_Dir dir) {
-40039:   if (!ext_to_handle<From_Policy>(x)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (((To_Policy::check_inf_mod) ? (is_minf<From_Policy>(x) || is_pinf<From_Policy>(x)) : (
-40039: # 800 "../../src/checked_ext_inlines.hh" 3 4
-40039:           (static_cast<void> (0))
-40039: # 800 "../../src/checked_ext_inlines.hh"
-40039:           , false))
-40039:                                               ) {
-40039:     return assign_nan<To_Policy>(to, V_INF_MOD);
-40039:   }
-40039:   else {
-40039:   native:
-40039:     return umod_2exp<To_Policy, From_Policy>(to, x, exp, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From_Policy,
-40039:           typename To, typename From>
-40039: inline Result
-40039: sqrt_ext(To& to, const From& x, Rounding_Dir dir) {
-40039:   if (!ext_to_handle<From_Policy>(x)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (is_minf<From_Policy>(x)) {
-40039:     return assign_nan<To_Policy>(to, V_SQRT_NEG);
-40039:   }
-40039:   else if (is_pinf<From_Policy>(x)) {
-40039:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:   }
-40039:   else {
-40039:   native:
-40039:     return sqrt<To_Policy, From_Policy>(to, x, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename To, typename From1, typename From2>
-40039: inline Result
-40039: gcd_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
-40039:   if (is_nan<From1_Policy>(x) || is_nan<From2_Policy>(y)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (is_minf<From1_Policy>(x) || is_pinf<From1_Policy>(x)) {
-40039:     return abs_ext<To_Policy, From2_Policy>(to, y, dir);
-40039:   }
-40039:   else if (is_minf<From2_Policy>(y) || is_pinf<From2_Policy>(y)) {
-40039:     return abs_ext<To_Policy, From1_Policy>(to, x, dir);
-40039:   }
-40039:   else {
-40039:     return gcd<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To1_Policy, typename To2_Policy, typename To3_Policy,
-40039:           typename From1_Policy, typename From2_Policy,
-40039:           typename To1, typename To2, typename To3,
-40039:           typename From1, typename From2>
-40039: inline Result
-40039: gcdext_ext(To1& to, To2& s, To3& t, const From1& x, const From2& y,
-40039:            Rounding_Dir dir) {
-40039:   if (is_nan<From1_Policy>(x) || is_nan<From2_Policy>(y)) {
-40039:     return assign_special<To1_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (is_minf<From1_Policy>(x) || is_pinf<From1_Policy>(x)) {
-40039:     s = 0;
-40039:     t = y > 0 ? -1 : 1;
-40039:     return abs_ext<To1_Policy, From2_Policy>(to, y, dir);
-40039:   }
-40039:   else if (is_minf<From2_Policy>(y) || is_pinf<From2_Policy>(y)) {
-40039:     s = x > 0 ? -1 : 1;
-40039:     t = 0;
-40039:     return abs_ext<To1_Policy, From1_Policy>(to, x, dir);
-40039:   }
-40039:   else {
-40039:     return gcdext<To1_Policy, To2_Policy, To3_Policy, From1_Policy, From2_Policy>(to, s, t, x, y, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
-40039:           typename To, typename From1, typename From2>
-40039: inline Result
-40039: lcm_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
-40039:   if (is_nan<From1_Policy>(x) || is_nan<From2_Policy>(y)) {
-40039:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
-40039:   }
-40039:   else if (is_minf<From1_Policy>(x) || is_pinf<From1_Policy>(x)
-40039:            || is_minf<From2_Policy>(y) || is_pinf<From2_Policy>(y)) {
-40039:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
-40039:   }
-40039:   else {
-40039:     return lcm<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
-40039:   }
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2,
-40039:           typename Type1, typename Type2>
-40039: inline Result_Relation
-40039: cmp_ext(const Type1& x, const Type2& y) {
-40039:   if (!ext_to_handle<Policy1>(x) && !ext_to_handle<Policy2>(y)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<Policy1>(x) || is_nan<Policy2>(y)) {
-40039:     return VR_EMPTY;
-40039:   }
-40039:   else if (is_minf<Policy1>(x)) {
-40039:     return is_minf<Policy2>(y) ? VR_EQ : VR_LT;
-40039:   }
-40039:   else if (is_pinf<Policy1>(x)) {
-40039:     return is_pinf<Policy2>(y) ? VR_EQ : VR_GT;
-40039:   }
-40039:   else {
-40039:     if (is_minf<Policy2>(y)) {
-40039:       return VR_GT;
-40039:     }
-40039:     if (is_pinf<Policy2>(y)) {
-40039:       return VR_LT;
-40039:     }
-40039:   native:
-40039:     return cmp<Policy1, Policy2>(x, y);
-40039:   }
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2,
-40039:           typename Type1, typename Type2>
-40039: inline bool
-40039: lt_ext(const Type1& x, const Type2& y) {
-40039:   if (!ext_to_handle<Policy1>(x) && !ext_to_handle<Policy2>(y)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<Policy1>(x) || is_nan<Policy2>(y)) {
-40039:     return false;
-40039:   }
-40039:   if (is_pinf<Policy1>(x) || is_minf<Policy2>(y)) {
-40039:     return false;
-40039:   }
-40039:   if (is_minf<Policy1>(x) || is_pinf<Policy2>(y)) {
-40039:     return true;
-40039:   }
-40039:  native:
-40039:   return lt_p<Policy1, Policy2>(x, y);
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2,
-40039:           typename Type1, typename Type2>
-40039: inline bool
-40039: gt_ext(const Type1& x, const Type2& y) {
-40039:   return lt_ext<Policy1, Policy2>(y, x);
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2,
-40039:           typename Type1, typename Type2>
-40039: inline bool
-40039: le_ext(const Type1& x, const Type2& y) {
-40039:   if (!ext_to_handle<Policy1>(x) && !ext_to_handle<Policy2>(y)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<Policy1>(x) || is_nan<Policy2>(y)) {
-40039:     return false;
-40039:   }
-40039:   if (is_minf<Policy1>(x) || is_pinf<Policy2>(y)) {
-40039:     return true;
-40039:   }
-40039:   if (is_pinf<Policy1>(x) || is_minf<Policy2>(y)) {
-40039:     return false;
-40039:   }
-40039:  native:
-40039:   return le_p<Policy1, Policy2>(x, y);
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2,
-40039:           typename Type1, typename Type2>
-40039: inline bool
-40039: ge_ext(const Type1& x, const Type2& y) {
-40039:   return le_ext<Policy1, Policy2>(y, x);
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2,
-40039:           typename Type1, typename Type2>
-40039: inline bool
-40039: eq_ext(const Type1& x, const Type2& y) {
-40039:   if (!ext_to_handle<Policy1>(x) && !ext_to_handle<Policy2>(y)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<Policy1>(x) || is_nan<Policy2>(y)) {
-40039:     return false;
-40039:   }
-40039:   if (is_minf<Policy1>(x)) {
-40039:     return is_minf<Policy2>(y);
-40039:   }
-40039:   if (is_pinf<Policy1>(x)) {
-40039:     return is_pinf<Policy2>(y);
-40039:   }
-40039:   else if (is_minf<Policy2>(y) || is_pinf<Policy2>(y)) {
-40039:     return false;
-40039:   }
-40039:  native:
-40039:   return eq_p<Policy1, Policy2>(x, y);
-40039: }
-40039: 
-40039: template <typename Policy1, typename Policy2,
-40039:           typename Type1, typename Type2>
-40039: inline bool
-40039: ne_ext(const Type1& x, const Type2& y) {
-40039:   return !eq_ext<Policy1, Policy2>(x, y);
-40039: }
-40039: 
-40039: template <typename Policy, typename Type>
-40039: inline Result
-40039: output_ext(std::ostream& os, const Type& x,
-40039:            const Numeric_Format& format, Rounding_Dir dir) {
-40039:   if (!ext_to_handle<Policy>(x)) {
-40039:     goto native;
-40039:   }
-40039:   if (is_nan<Policy>(x)) {
-40039:     os << "nan";
-40039:     return V_NAN;
-40039:   }
-40039:   if (is_minf<Policy>(x)) {
-40039:     os << "-inf";
-40039:     return V_EQ;
-40039:   }
-40039:   if (is_pinf<Policy>(x)) {
-40039:     os << "+inf";
-40039:     return V_EQ;
-40039:   }
-40039:  native:
-40039:   return output<Policy>(os, x, format, dir);
-40039: }
-40039: 
-40039: template <typename To_Policy, typename To>
-40039: inline Result
-40039: input_ext(To& to, std::istream& is, Rounding_Dir dir) {
-40039:   return input<To_Policy>(to, is, dir);
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 706 "../../src/checked_defs.hh" 2
-40039: # 29 "../../src/Checked_Number_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: struct Extended_Number_Policy {
-40039:   enum const_bool_value_check_overflow { check_overflow = (true) };
-40039:   enum const_bool_value_check_inf_add_inf { check_inf_add_inf = (false) };
-40039:   enum const_bool_value_check_inf_sub_inf { check_inf_sub_inf = (false) };
-40039:   enum const_bool_value_check_inf_mul_zero { check_inf_mul_zero = (false) };
-40039:   enum const_bool_value_check_div_zero { check_div_zero = (false) };
-40039:   enum const_bool_value_check_inf_div_inf { check_inf_div_inf = (false) };
-40039:   enum const_bool_value_check_inf_mod { check_inf_mod = (false) };
-40039:   enum const_bool_value_check_sqrt_neg { check_sqrt_neg = (false) };
-40039:   enum const_bool_value_has_nan { has_nan = (true) };
-40039:   enum const_bool_value_has_infinity { has_infinity = (true) };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   enum const_bool_value_fpu_check_inexact { fpu_check_inexact = (true) };
-40039:   enum const_bool_value_fpu_check_nan_result { fpu_check_nan_result = (true) };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static void handle_result(Result r);
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: struct Check_Overflow_Policy {
-40039:   enum const_bool_value_check_overflow { check_overflow = (true) };
-40039:   enum const_bool_value_check_inf_add_inf { check_inf_add_inf = (false) };
-40039:   enum const_bool_value_check_inf_sub_inf { check_inf_sub_inf = (false) };
-40039:   enum const_bool_value_check_inf_mul_zero { check_inf_mul_zero = (false) };
-40039:   enum const_bool_value_check_div_zero { check_div_zero = (false) };
-40039:   enum const_bool_value_check_inf_div_inf { check_inf_div_inf = (false) };
-40039:   enum const_bool_value_check_inf_mod { check_inf_mod = (false) };
-40039:   enum const_bool_value_check_sqrt_neg { check_sqrt_neg = (false) };
-40039:   enum const_bool_value_has_nan { has_nan = (std::numeric_limits<T>::has_quiet_NaN) };
-40039:   enum const_bool_value_has_infinity { has_infinity = (std::numeric_limits<T>::has_infinity) };
-40039:   enum const_bool_value_convertible { convertible = (true) };
-40039:   enum const_bool_value_fpu_check_inexact { fpu_check_inexact = (true) };
-40039:   enum const_bool_value_fpu_check_nan_result { fpu_check_nan_result = (true) };
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Enable = void>
-40039: struct Native_Checked_From_Wrapper;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: struct Native_Checked_From_Wrapper<T, typename Enable_If<Is_Native<T>::value>::type> {
-40039:   typedef Checked_Number_Transparent_Policy<T> Policy;
-40039:   static const T& raw_value(const T& v) {
-40039:     return v;
-40039:   }
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename P>
-40039: struct Native_Checked_From_Wrapper<Checked_Number<T, P> > {
-40039:   typedef P Policy;
-40039:   static const T& raw_value(const Checked_Number<T, P>& v) {
-40039:     return v.raw_value();
-40039:   }
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Enable = void>
-40039: struct Native_Checked_To_Wrapper;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: struct Native_Checked_To_Wrapper<T, typename Enable_If<Is_Native<T>::value>::type> {
-40039:   typedef Check_Overflow_Policy<T> Policy;
-40039:   static T& raw_value(T& v) {
-40039:     return v;
-40039:   }
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename P>
-40039: struct Native_Checked_To_Wrapper<Checked_Number<T, P> > {
-40039:   typedef P Policy;
-40039:   static T& raw_value(Checked_Number<T, P>& v) {
-40039:     return v.raw_value();
-40039:   }
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: struct Is_Checked : public False { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename P>
-40039: struct Is_Checked<Checked_Number<T, P> > : public True { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: struct Is_Native_Or_Checked
-40039:   : public Bool<Is_Native<T>::value || Is_Checked<T>::value> { };
-40039: # 169 "../../src/Checked_Number_defs.hh"
-40039: template <typename T, typename Policy>
-40039: class Checked_Number {
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Checked_Number();
-40039: 
-40039: 
-40039:   Checked_Number(const Checked_Number& y);
-40039: 
-40039: 
-40039:   template <typename From, typename From_Policy>
-40039:   Checked_Number(const Checked_Number<From, From_Policy>& y, Rounding_Dir dir);
-40039: 
-40039: 
-40039:   Checked_Number(char y, Rounding_Dir dir);
-40039: 
-40039: 
-40039:   Checked_Number(signed char y, Rounding_Dir dir);
-40039: 
-40039: 
-40039:   Checked_Number(signed short y, Rounding_Dir dir);
-40039: 
-40039: 
-40039:   Checked_Number(signed int y, Rounding_Dir dir);
-40039: 
-40039: 
-40039:   Checked_Number(signed long y, Rounding_Dir dir);
-40039: 
-40039: 
-40039:   Checked_Number(signed long long y, Rounding_Dir dir);
-40039: 
-40039: 
-40039:   Checked_Number(unsigned char y, Rounding_Dir dir);
-40039: 
-40039: 
-40039:   Checked_Number(unsigned short y, Rounding_Dir dir);
-40039: 
-40039: 
-40039:   Checked_Number(unsigned int y, Rounding_Dir dir);
-40039: 
-40039: 
-40039:   Checked_Number(unsigned long y, Rounding_Dir dir);
-40039: 
-40039: 
-40039:   Checked_Number(unsigned long long y, Rounding_Dir dir);
-40039: 
-40039: 
-40039: 
-40039:   Checked_Number(float y, Rounding_Dir dir);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Checked_Number(double y, Rounding_Dir dir);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Checked_Number(long double y, Rounding_Dir dir);
-40039: 
-40039: 
-40039: 
-40039:   Checked_Number(const mpq_class& y, Rounding_Dir dir);
-40039: 
-40039: 
-40039:   Checked_Number(const mpz_class& y, Rounding_Dir dir);
-40039: 
-40039: 
-40039:   Checked_Number(const char* y, Rounding_Dir dir);
-40039: 
-40039: 
-40039:   template <typename From>
-40039:   Checked_Number(const From&, Rounding_Dir dir,
-40039:                  typename Enable_If<Is_Special<From>::value, bool>::type
-40039:                  ignored = false);
-40039: 
-40039: 
-40039:   template <typename From, typename From_Policy>
-40039:   explicit Checked_Number(const Checked_Number<From, From_Policy>& y);
-40039: 
-40039: 
-40039:   Checked_Number(char y);
-40039: 
-40039: 
-40039:   Checked_Number(signed char y);
-40039: 
-40039: 
-40039:   Checked_Number(signed short y);
-40039: 
-40039: 
-40039:   Checked_Number(signed int y);
-40039: 
-40039: 
-40039:   Checked_Number(signed long y);
-40039: 
-40039: 
-40039:   Checked_Number(signed long long y);
-40039: 
-40039: 
-40039:   Checked_Number(unsigned char y);
-40039: 
-40039: 
-40039:   Checked_Number(unsigned short y);
-40039: 
-40039: 
-40039:   Checked_Number(unsigned int y);
-40039: 
-40039: 
-40039:   Checked_Number(unsigned long y);
-40039: 
-40039: 
-40039:   Checked_Number(unsigned long long y);
-40039: 
-40039: 
-40039:   Checked_Number(float y);
-40039: 
-40039: 
-40039:   Checked_Number(double y);
-40039: 
-40039: 
-40039:   Checked_Number(long double y);
-40039: 
-40039: 
-40039:   Checked_Number(const mpq_class& y);
-40039: 
-40039: 
-40039:   Checked_Number(const mpz_class& y);
-40039: 
-40039: 
-40039:   Checked_Number(const char* y);
-40039: 
-40039: 
-40039:   template <typename From>
-40039:   Checked_Number(const From&, typename Enable_If<Is_Special<From>::value, bool>::type ignored = false);
-40039: # 315 "../../src/Checked_Number_defs.hh"
-40039:   operator T() const;
-40039: 
-40039: 
-40039:   T& raw_value();
-40039: 
-40039: 
-40039:   const T& raw_value() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: # 338 "../../src/Checked_Number_defs.hh"
-40039:   Result classify(bool nan = true, bool inf = true, bool sign = true) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Checked_Number& operator=(const Checked_Number& y);
-40039: 
-40039: 
-40039:   template <typename From>
-40039:   Checked_Number& operator=(const From& y);
-40039: 
-40039: 
-40039:   template <typename From_Policy>
-40039:   Checked_Number& operator+=(const Checked_Number<T, From_Policy>& y);
-40039: 
-40039: 
-40039:   Checked_Number& operator+=(const T& y);
-40039: 
-40039: 
-40039:   template <typename From>
-40039:   typename Enable_If<Is_Native_Or_Checked<From>::value,
-40039:                      Checked_Number<T, Policy>&>::type
-40039:   operator+=(const From& y);
-40039: 
-40039: 
-40039:   template <typename From_Policy>
-40039:   Checked_Number& operator-=(const Checked_Number<T, From_Policy>& y);
-40039: 
-40039: 
-40039:   Checked_Number& operator-=(const T& y);
-40039: 
-40039: 
-40039:   template <typename From>
-40039:   typename Enable_If<Is_Native_Or_Checked<From>::value,
-40039:                      Checked_Number<T, Policy>&>::type
-40039:   operator-=(const From& y);
-40039: 
-40039: 
-40039:   template <typename From_Policy>
-40039:   Checked_Number& operator*=(const Checked_Number<T, From_Policy>& y);
-40039: 
-40039: 
-40039:   Checked_Number& operator*=(const T& y);
-40039: 
-40039: 
-40039:   template <typename From>
-40039:   typename Enable_If<Is_Native_Or_Checked<From>::value,
-40039:                      Checked_Number<T, Policy>&>::type
-40039:   operator*=(const From& y);
-40039: 
-40039: 
-40039:   template <typename From_Policy>
-40039:   Checked_Number& operator/=(const Checked_Number<T, From_Policy>& y);
-40039: 
-40039: 
-40039:   Checked_Number& operator/=(const T& y);
-40039: 
-40039: 
-40039:   template <typename From>
-40039:   typename Enable_If<Is_Native_Or_Checked<From>::value,
-40039:                      Checked_Number<T, Policy>&>::type
-40039:   operator/=(const From& y);
-40039: 
-40039: 
-40039:   template <typename From_Policy>
-40039:   Checked_Number& operator%=(const Checked_Number<T, From_Policy>& y);
-40039: 
-40039: 
-40039:   Checked_Number& operator%=(const T& y);
-40039: 
-40039: 
-40039:   template <typename From>
-40039:   typename Enable_If<Is_Native_Or_Checked<From>::value,
-40039:                      Checked_Number<T, Policy>& >::type
-40039:   operator%=(const From& y);
-40039: # 422 "../../src/Checked_Number_defs.hh"
-40039:   Checked_Number& operator++();
-40039: 
-40039: 
-40039:   Checked_Number operator++(int);
-40039: 
-40039: 
-40039:   Checked_Number& operator--();
-40039: 
-40039: 
-40039:   Checked_Number operator--(int);
-40039: 
-40039: 
-40039: 
-40039: private:
-40039: 
-40039:   T v;
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename P>
-40039: struct Slow_Copy<Checked_Number<T, P> > : public Bool<Slow_Copy<T>::value> {};
-40039: 
-40039: 
-40039: template <typename T>
-40039: typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
-40039: is_not_a_number(const T& x);
-40039: 
-40039: 
-40039: template <typename T>
-40039: typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
-40039: is_minus_infinity(const T& x);
-40039: 
-40039: 
-40039: template <typename T>
-40039: typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
-40039: is_plus_infinity(const T& x);
-40039: 
-40039: 
-40039: template <typename T>
-40039: typename Enable_If<Is_Native_Or_Checked<T>::value, int>::type
-40039: infinity_sign(const T& x);
-40039: 
-40039: 
-40039: template <typename T>
-40039: typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
-40039: is_integer(const T& x);
-40039: 
-40039: 
-40039: template <typename To, typename From>
-40039: typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Special<From>::value, Result>::type
-40039: construct(To& to, const From& x, Rounding_Dir dir);
-40039: 
-40039: 
-40039: template <typename To, typename From>
-40039: typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Special<From>::value, Result>::type
-40039: assign_r(To& to, const From& x, Rounding_Dir dir);
-40039: 
-40039: 
-40039: template <typename To>
-40039: typename Enable_If<Is_Native_Or_Checked<To>::value, Result>::type
-40039: assign_r(To& to, const char* x, Rounding_Dir dir);
-40039: 
-40039: 
-40039: template <typename To, typename To_Policy>
-40039: typename Enable_If<Is_Native_Or_Checked<To>::value, Result>::type
-40039: assign_r(To& to, char* x, Rounding_Dir dir);
-40039: # 498 "../../src/Checked_Number_defs.hh"
-40039: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type assign_r(To& to, const From& x, Rounding_Dir dir);
-40039: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type floor_assign_r(To& to, const From& x, Rounding_Dir dir);
-40039: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type ceil_assign_r(To& to, const From& x, Rounding_Dir dir);
-40039: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type trunc_assign_r(To& to, const From& x, Rounding_Dir dir);
-40039: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type neg_assign_r(To& to, const From& x, Rounding_Dir dir);
-40039: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type abs_assign_r(To& to, const From& x, Rounding_Dir dir);
-40039: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type sqrt_assign_r(To& to, const From& x, Rounding_Dir dir);
-40039: # 515 "../../src/Checked_Number_defs.hh"
-40039: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type add_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir);
-40039: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type sub_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir);
-40039: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type mul_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir);
-40039: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type div_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir);
-40039: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type smod_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir);
-40039: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type umod_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir);
-40039: # 532 "../../src/Checked_Number_defs.hh"
-40039: template <typename To, typename From1, typename From2> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type add_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir);
-40039: template <typename To, typename From1, typename From2> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type sub_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir);
-40039: template <typename To, typename From1, typename From2> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type mul_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir);
-40039: template <typename To, typename From1, typename From2> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type div_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir);
-40039: template <typename To, typename From1, typename From2> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type idiv_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir);
-40039: template <typename To, typename From1, typename From2> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type rem_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir);
-40039: template <typename To, typename From1, typename From2> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type gcd_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir);
-40039: template <typename To, typename From1, typename From2> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type lcm_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir);
-40039: template <typename To, typename From1, typename From2> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type add_mul_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir);
-40039: template <typename To, typename From1, typename From2> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type sub_mul_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir);
-40039: # 558 "../../src/Checked_Number_defs.hh"
-40039: template <typename To1, typename To2, typename To3, typename From1, typename From2> typename Enable_If<Is_Native_Or_Checked<To1>::value && Is_Native_Or_Checked<To2>::value && Is_Native_Or_Checked<To3>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type gcdext_assign_r(To1& to, To2& s, To3& t, const From1& x, const From2& y, Rounding_Dir dir);
-40039: # 572 "../../src/Checked_Number_defs.hh"
-40039: template <typename T, typename Policy>
-40039: memory_size_type
-40039: total_memory_in_bytes(const Checked_Number<T, Policy>& x);
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: memory_size_type
-40039: external_memory_in_bytes(const Checked_Number<T, Policy>& x);
-40039: # 589 "../../src/Checked_Number_defs.hh"
-40039: template <typename T, typename Policy>
-40039: Checked_Number<T, Policy>
-40039: operator+(const Checked_Number<T, Policy>& x);
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: Checked_Number<T, Policy>
-40039: operator-(const Checked_Number<T, Policy>& x);
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: void
-40039: floor_assign(Checked_Number<T, Policy>& x);
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: void
-40039: floor_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y);
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: void
-40039: ceil_assign(Checked_Number<T, Policy>& x);
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: void
-40039: ceil_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y);
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: void
-40039: trunc_assign(Checked_Number<T, Policy>& x);
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: void
-40039: trunc_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y);
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: void
-40039: neg_assign(Checked_Number<T, Policy>& x);
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: void
-40039: neg_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y);
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: void
-40039: abs_assign(Checked_Number<T, Policy>& x);
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: void
-40039: abs_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y);
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: void
-40039: add_mul_assign(Checked_Number<T, Policy>& x,
-40039:                const Checked_Number<T, Policy>& y,
-40039:                const Checked_Number<T, Policy>& z);
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: void
-40039: sub_mul_assign(Checked_Number<T, Policy>& x,
-40039:                const Checked_Number<T, Policy>& y,
-40039:                const Checked_Number<T, Policy>& z);
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: void
-40039: gcd_assign(Checked_Number<T, Policy>& x,
-40039:            const Checked_Number<T, Policy>& y,
-40039:            const Checked_Number<T, Policy>& z);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: void
-40039: gcdext_assign(Checked_Number<T, Policy>& x,
-40039:               Checked_Number<T, Policy>& s,
-40039:               Checked_Number<T, Policy>& t,
-40039:               const Checked_Number<T, Policy>& y,
-40039:               const Checked_Number<T, Policy>& z);
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: void
-40039: lcm_assign(Checked_Number<T, Policy>& x,
-40039:            const Checked_Number<T, Policy>& y,
-40039:            const Checked_Number<T, Policy>& z);
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: void
-40039: mul_2exp_assign(Checked_Number<T, Policy>& x,
-40039:                 const Checked_Number<T, Policy>& y,
-40039:                 unsigned int exp);
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: void
-40039: div_2exp_assign(Checked_Number<T, Policy>& x,
-40039:                 const Checked_Number<T, Policy>& y,
-40039:                 unsigned int exp);
-40039: # 727 "../../src/Checked_Number_defs.hh"
-40039: template <typename T, typename Policy>
-40039: void
-40039: exact_div_assign(Checked_Number<T, Policy>& x,
-40039:                  const Checked_Number<T, Policy>& y,
-40039:                  const Checked_Number<T, Policy>& z);
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: void sqrt_assign(Checked_Number<T, Policy>& x,
-40039:                  const Checked_Number<T, Policy>& y);
-40039: # 747 "../../src/Checked_Number_defs.hh"
-40039: template <typename T1, typename T2>
-40039: inline
-40039: typename Enable_If<Is_Native_Or_Checked<T1>::value
-40039:                    && Is_Native_Or_Checked<T2>::value
-40039:                    && (Is_Checked<T1>::value || Is_Checked<T2>::value),
-40039:                    bool>::type
-40039: operator==(const T1& x, const T2& y);
-40039: 
-40039: 
-40039: template <typename T1, typename T2>
-40039: inline typename Enable_If<Is_Native_Or_Checked<T1>::value
-40039:                           && Is_Native_Or_Checked<T2>::value,
-40039:                           bool>::type
-40039: equal(const T1& x, const T2& y);
-40039: 
-40039: 
-40039: 
-40039: template <typename T1, typename T2>
-40039: inline
-40039: typename Enable_If<Is_Native_Or_Checked<T1>::value
-40039:                    && Is_Native_Or_Checked<T2>::value
-40039:                    && (Is_Checked<T1>::value || Is_Checked<T2>::value),
-40039:                    bool>::type
-40039: operator!=(const T1& x, const T2& y);
-40039: 
-40039: 
-40039: template <typename T1, typename T2>
-40039: inline typename Enable_If<Is_Native_Or_Checked<T1>::value
-40039:                           && Is_Native_Or_Checked<T2>::value,
-40039:                           bool>::type
-40039: not_equal(const T1& x, const T2& y);
-40039: 
-40039: 
-40039: 
-40039: template <typename T1, typename T2>
-40039: inline
-40039: typename Enable_If<Is_Native_Or_Checked<T1>::value
-40039:                    && Is_Native_Or_Checked<T2>::value
-40039:                    && (Is_Checked<T1>::value || Is_Checked<T2>::value),
-40039:                    bool>::type
-40039: operator>=(const T1& x, const T2& y);
-40039: 
-40039: 
-40039: template <typename T1, typename T2>
-40039: inline typename Enable_If<Is_Native_Or_Checked<T1>::value
-40039:                           && Is_Native_Or_Checked<T2>::value,
-40039:                           bool>::type
-40039: greater_or_equal(const T1& x, const T2& y);
-40039: 
-40039: 
-40039: 
-40039: template <typename T1, typename T2>
-40039: inline
-40039: typename Enable_If<Is_Native_Or_Checked<T1>::value
-40039:                    && Is_Native_Or_Checked<T2>::value
-40039:                    && (Is_Checked<T1>::value || Is_Checked<T2>::value),
-40039:                    bool>::type
-40039: operator>(const T1& x, const T2& y);
-40039: 
-40039: 
-40039: template <typename T1, typename T2>
-40039: inline typename Enable_If<Is_Native_Or_Checked<T1>::value
-40039:                           && Is_Native_Or_Checked<T2>::value,
-40039:                           bool>::type
-40039: greater_than(const T1& x, const T2& y);
-40039: 
-40039: 
-40039: 
-40039: template <typename T1, typename T2>
-40039: inline
-40039: typename Enable_If<Is_Native_Or_Checked<T1>::value
-40039:                    && Is_Native_Or_Checked<T2>::value
-40039:                    && (Is_Checked<T1>::value || Is_Checked<T2>::value),
-40039:                    bool>::type
-40039: operator<=(const T1& x, const T2& y);
-40039: 
-40039: 
-40039: template <typename T1, typename T2>
-40039: inline typename Enable_If<Is_Native_Or_Checked<T1>::value
-40039:                           && Is_Native_Or_Checked<T2>::value,
-40039:                           bool>::type
-40039: less_or_equal(const T1& x, const T2& y);
-40039: 
-40039: 
-40039: 
-40039: template <typename T1, typename T2>
-40039: inline
-40039: typename Enable_If<Is_Native_Or_Checked<T1>::value
-40039:                    && Is_Native_Or_Checked<T2>::value
-40039:                    && (Is_Checked<T1>::value || Is_Checked<T2>::value),
-40039:                    bool>::type
-40039: operator<(const T1& x, const T2& y);
-40039: 
-40039: 
-40039: template <typename T1, typename T2>
-40039: inline typename Enable_If<Is_Native_Or_Checked<T1>::value
-40039:                           && Is_Native_Or_Checked<T2>::value,
-40039:                           bool>::type
-40039: less_than(const T1& x, const T2& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename From>
-40039: inline typename Enable_If<Is_Native_Or_Checked<From>::value, int>::type
-40039:  sgn(const From& x);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename From1, typename From2>
-40039: inline typename Enable_If<Is_Native_Or_Checked<From1>::value
-40039:                           && Is_Native_Or_Checked<From2>::value,
-40039:                           int>::type
-40039: cmp(const From1& x, const From2& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: typename Enable_If<Is_Native_Or_Checked<T>::value, Result>::type
-40039: output(std::ostream& os,
-40039:        const T& x,
-40039:        const Numeric_Format& format,
-40039:        Rounding_Dir dir);
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: std::ostream&
-40039: operator<<(std::ostream& os, const Checked_Number<T, Policy>& x);
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: typename Enable_If<Is_Native_Or_Checked<T>::value, void>::type
-40039: ascii_dump(std::ostream& s, const T& t);
-40039: # 1019 "../../src/Checked_Number_defs.hh"
-40039: template <typename T>
-40039: typename Enable_If<Is_Native_Or_Checked<T>::value, Result>::type
-40039: input(T& x, std::istream& is, Rounding_Dir dir);
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: std::istream&
-40039: operator>>(std::istream& is, Checked_Number<T, Policy>& x);
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
-40039: ascii_load(std::ostream& s, T& t);
-40039: 
-40039: 
-40039: 
-40039: void throw_result_exception(Result r);
-40039: 
-40039: template <typename T>
-40039: T
-40039: plus_infinity();
-40039: 
-40039: template <typename T>
-40039: T
-40039: minus_infinity();
-40039: 
-40039: template <typename T>
-40039: T
-40039: not_a_number();
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: void swap(Checked_Number<T, Policy>& x, Checked_Number<T, Policy>& y);
-40039: 
-40039: template <typename T, typename Policy>
-40039: struct FPU_Related<Checked_Number<T, Policy> > : public FPU_Related<T> {};
-40039: 
-40039: template <typename T>
-40039: void maybe_reset_fpu_inexact();
-40039: 
-40039: template <typename T>
-40039: int maybe_check_fpu_inexact();
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Checked_Number_inlines.hh" 1
-40039: # 31 "../../src/Checked_Number_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: inline Rounding_Dir
-40039: rounding_dir(Rounding_Dir dir) {
-40039:   if (dir == ROUND_NOT_NEEDED) {
-40039: 
-40039: 
-40039: 
-40039:   }
-40039:   return dir;
-40039: }
-40039: 
-40039: inline Result
-40039: check_result(Result r, Rounding_Dir dir) {
-40039:   if (dir == ROUND_NOT_NEEDED) {
-40039: 
-40039: 
-40039: 
-40039:     return r;
-40039:   }
-40039:   return r;
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Checked_Number_Transparent_Policy<T>::handle_result(Result) {
-40039: }
-40039: 
-40039: inline void
-40039: Extended_Number_Policy::handle_result(Result r) {
-40039:   if (result_class(r) == VC_NAN) {
-40039:     throw_result_exception(r);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline
-40039: Checked_Number<T, Policy>::Checked_Number()
-40039:  : v(0) {
-40039: }
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline
-40039: Checked_Number<T, Policy>::Checked_Number(const Checked_Number& y) {
-40039: 
-40039:   Checked::copy<Policy, Policy>(v, y.raw_value());
-40039: }
-40039: 
-40039: template <typename T, typename Policy>
-40039: template <typename From, typename From_Policy>
-40039: inline
-40039: Checked_Number<T, Policy>
-40039: ::Checked_Number(const Checked_Number<From, From_Policy>& y,
-40039:                  Rounding_Dir dir) {
-40039: 
-40039:   Policy::handle_result(check_result(Checked::assign_ext<Policy, From_Policy>
-40039:                                      (v,
-40039:                                       y.raw_value(),
-40039:                                       rounding_dir(dir)),
-40039:                                      dir)
-40039:                         );
-40039: }
-40039: 
-40039: template <typename T, typename Policy>
-40039: template <typename From, typename From_Policy>
-40039: inline
-40039: Checked_Number<T, Policy>
-40039: ::Checked_Number(const Checked_Number<From, From_Policy>& y) {
-40039: 
-40039:   Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR;
-40039:   Policy::handle_result(check_result(Checked::assign_ext<Policy, From_Policy>
-40039:                                      (v,
-40039:                                       y.raw_value(),
-40039:                                       rounding_dir(dir)),
-40039:                                      dir));
-40039: }
-40039: # 133 "../../src/Checked_Number_inlines.hh"
-40039: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const char y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<char> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const char y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<char> > (v, y, rounding_dir(dir)), dir)); }
-40039: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const signed char y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<signed char> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const signed char y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<signed char> > (v, y, rounding_dir(dir)), dir)); }
-40039: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const signed short y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<signed short> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const signed short y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<signed short> > (v, y, rounding_dir(dir)), dir)); }
-40039: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const signed int y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<signed int> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const signed int y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<signed int> > (v, y, rounding_dir(dir)), dir)); }
-40039: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const signed long y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<signed long> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const signed long y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<signed long> > (v, y, rounding_dir(dir)), dir)); }
-40039: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const signed long long y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<signed long long> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const signed long long y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<signed long long> > (v, y, rounding_dir(dir)), dir)); }
-40039: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const unsigned char y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<unsigned char> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const unsigned char y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<unsigned char> > (v, y, rounding_dir(dir)), dir)); }
-40039: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const unsigned short y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<unsigned short> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const unsigned short y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<unsigned short> > (v, y, rounding_dir(dir)), dir)); }
-40039: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const unsigned int y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<unsigned int> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const unsigned int y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<unsigned int> > (v, y, rounding_dir(dir)), dir)); }
-40039: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const unsigned long y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<unsigned long> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const unsigned long y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<unsigned long> > (v, y, rounding_dir(dir)), dir)); }
-40039: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const unsigned long long y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<unsigned long long> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const unsigned long long y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<unsigned long long> > (v, y, rounding_dir(dir)), dir)); }
-40039: 
-40039: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const float y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<float> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const float y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<float> > (v, y, rounding_dir(dir)), dir)); }
-40039: 
-40039: 
-40039: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const double y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<double> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const double y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<double> > (v, y, rounding_dir(dir)), dir)); }
-40039: 
-40039: 
-40039: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const long double y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<long double> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const long double y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<long double> > (v, y, rounding_dir(dir)), dir)); }
-40039: 
-40039: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const mpq_class& y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<mpq_class&> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const mpq_class& y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<mpq_class&> > (v, y, rounding_dir(dir)), dir)); }
-40039: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const mpz_class& y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<mpz_class&> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const mpz_class& y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<mpz_class&> > (v, y, rounding_dir(dir)), dir)); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline
-40039: Checked_Number<T, Policy>::Checked_Number(const char* y, Rounding_Dir dir) {
-40039:   std::istringstream s(y);
-40039:   Policy::handle_result(check_result(Checked::input<Policy>(v,
-40039:                                                             s,
-40039:                                                             rounding_dir(dir)),
-40039:                                      dir));
-40039: }
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline
-40039: Checked_Number<T, Policy>::Checked_Number(const char* y) {
-40039:   std::istringstream s(y);
-40039:   Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR;
-40039:   Policy::handle_result(check_result(Checked::input<Policy>(v,
-40039:                                                             s,
-40039:                                                             rounding_dir(dir)),
-40039:                                      dir));
-40039: }
-40039: 
-40039: template <typename T, typename Policy>
-40039: template <typename From>
-40039: inline
-40039: Checked_Number<T, Policy>
-40039: ::Checked_Number(const From&,
-40039:                  Rounding_Dir dir,
-40039:                  typename Enable_If<Is_Special<From>::value, bool>::type) {
-40039:   Policy::handle_result(check_result(Checked::assign_special<Policy>(v,
-40039:                                                                      From::vclass,
-40039:                                                                      rounding_dir(dir)),
-40039:                                      dir));
-40039: }
-40039: 
-40039: template <typename T, typename Policy>
-40039: template <typename From>
-40039: inline
-40039: Checked_Number<T, Policy>::Checked_Number(const From&, typename Enable_If<Is_Special<From>::value, bool>::type) {
-40039:   Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR;
-40039:   Policy::handle_result(check_result(Checked::assign_special<Policy>(v,
-40039:                                                             From::vclass,
-40039:                                                             rounding_dir(dir)),
-40039:                                      dir));
-40039: }
-40039: 
-40039: template <typename To, typename From>
-40039: inline typename Enable_If<Is_Native_Or_Checked<To>::value
-40039:                           && Is_Special<From>::value, Result>::type
-40039: assign_r(To& to, const From&, Rounding_Dir dir) {
-40039:   return check_result(Checked::assign_special<typename Native_Checked_To_Wrapper<To>
-40039:                       ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to),
-40039:                                 From::vclass,
-40039:                                 rounding_dir(dir)),
-40039:                       dir);
-40039: }
-40039: 
-40039: template <typename To, typename From>
-40039: inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Special<From>::value, Result>::type
-40039: construct(To& to, const From&, Rounding_Dir dir) {
-40039:   return check_result(Checked::construct_special<typename Native_Checked_To_Wrapper<To>
-40039:                       ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to),
-40039:                                 From::vclass,
-40039:                                 rounding_dir(dir)),
-40039:                       dir);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
-40039: is_minus_infinity(const T& x) {
-40039:   return Checked::is_minf<typename Native_Checked_From_Wrapper<T>
-40039:     ::Policy>(Native_Checked_From_Wrapper<T>::raw_value(x));
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
-40039: is_plus_infinity(const T& x) {
-40039:   return Checked::is_pinf<typename Native_Checked_From_Wrapper<T>
-40039:     ::Policy>(Native_Checked_From_Wrapper<T>::raw_value(x));
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Enable_If<Is_Native_Or_Checked<T>::value, int>::type
-40039: infinity_sign(const T& x) {
-40039:   return is_minus_infinity(x) ? -1 : (is_plus_infinity(x) ? 1 : 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
-40039: is_not_a_number(const T& x) {
-40039:   return Checked::is_nan<typename Native_Checked_From_Wrapper<T>
-40039:     ::Policy>(Native_Checked_From_Wrapper<T>::raw_value(x));
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
-40039: is_integer(const T& x) {
-40039:   return Checked::is_int<typename Native_Checked_From_Wrapper<T>
-40039:     ::Policy>(Native_Checked_From_Wrapper<T>::raw_value(x));
-40039: }
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline
-40039: Checked_Number<T, Policy>::operator T() const {
-40039:   if (Policy::convertible) {
-40039:     return v;
-40039:   }
-40039: }
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline T&
-40039: Checked_Number<T, Policy>::raw_value() {
-40039:   return v;
-40039: }
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline const T&
-40039: Checked_Number<T, Policy>::raw_value() const {
-40039:   return v;
-40039: }
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline const T&
-40039: raw_value(const Checked_Number<T, Policy>& x) {
-40039:   return x.raw_value();
-40039: }
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline T&
-40039: raw_value(Checked_Number<T, Policy>& x) {
-40039:   return x.raw_value();
-40039: }
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline bool
-40039: Checked_Number<T, Policy>::OK() const {
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline Result
-40039: Checked_Number<T, Policy>::classify(bool nan, bool inf, bool sign) const {
-40039:   return Checked::classify<Policy>(v, nan, inf, sign);
-40039: }
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline bool
-40039: is_not_a_number(const Checked_Number<T, Policy>& x) {
-40039:   return Checked::is_nan<Policy>(x.raw_value());
-40039: }
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline bool
-40039: is_minus_infinity(const Checked_Number<T, Policy>& x) {
-40039:   return Checked::is_minf<Policy>(x.raw_value());
-40039: }
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline bool
-40039: is_plus_infinity(const Checked_Number<T, Policy>& x) {
-40039:   return Checked::is_pinf<Policy>(x.raw_value());
-40039: }
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline memory_size_type
-40039: total_memory_in_bytes(const Checked_Number<T, Policy>& x) {
-40039:   return total_memory_in_bytes(x.raw_value());
-40039: }
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline memory_size_type
-40039: external_memory_in_bytes(const Checked_Number<T, Policy>& x) {
-40039:   return external_memory_in_bytes(x.raw_value());
-40039: }
-40039: 
-40039: 
-40039: 
-40039: template <typename To>
-40039: inline typename Enable_If<Is_Native_Or_Checked<To>::value, Result>::type
-40039: assign_r(To& to, const char* x, Rounding_Dir dir) {
-40039:   std::istringstream s(x);
-40039:   return check_result(Checked::input<typename Native_Checked_To_Wrapper<To>
-40039:                       ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to),
-40039:                                 s,
-40039:                                 rounding_dir(dir)),
-40039:                       dir);
-40039: }
-40039: # 365 "../../src/Checked_Number_inlines.hh"
-40039: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type construct(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::construct_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), rounding_dir(dir)), dir); }
-40039: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type assign_r(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::assign_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), rounding_dir(dir)), dir); }
-40039: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type floor_assign_r(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::floor_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), rounding_dir(dir)), dir); }
-40039: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type ceil_assign_r(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::ceil_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), rounding_dir(dir)), dir); }
-40039: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type trunc_assign_r(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::trunc_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), rounding_dir(dir)), dir); }
-40039: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type neg_assign_r(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::neg_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), rounding_dir(dir)), dir); }
-40039: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type abs_assign_r(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::abs_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), rounding_dir(dir)), dir); }
-40039: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type sqrt_assign_r(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::sqrt_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), rounding_dir(dir)), dir); }
-40039: # 393 "../../src/Checked_Number_inlines.hh"
-40039: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type add_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { return check_result(Checked::add_2exp_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), exp, rounding_dir(dir)), dir); }
-40039: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type sub_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { return check_result(Checked::sub_2exp_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), exp, rounding_dir(dir)), dir); }
-40039: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type mul_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { return check_result(Checked::mul_2exp_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), exp, rounding_dir(dir)), dir); }
-40039: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type div_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { return check_result(Checked::div_2exp_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), exp, rounding_dir(dir)), dir); }
-40039: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type smod_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { return check_result(Checked::smod_2exp_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), exp, rounding_dir(dir)), dir); }
-40039: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type umod_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { return check_result(Checked::umod_2exp_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), exp, rounding_dir(dir)), dir); }
-40039: # 422 "../../src/Checked_Number_inlines.hh"
-40039: template <typename To, typename From1, typename From2> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type add_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::add_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From1> ::Policy, typename Native_Checked_From_Wrapper<From2> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From1>::raw_value(x), Native_Checked_From_Wrapper<From2>::raw_value(y), rounding_dir(dir)), dir); }
-40039: template <typename To, typename From1, typename From2> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type sub_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::sub_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From1> ::Policy, typename Native_Checked_From_Wrapper<From2> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From1>::raw_value(x), Native_Checked_From_Wrapper<From2>::raw_value(y), rounding_dir(dir)), dir); }
-40039: template <typename To, typename From1, typename From2> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type mul_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::mul_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From1> ::Policy, typename Native_Checked_From_Wrapper<From2> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From1>::raw_value(x), Native_Checked_From_Wrapper<From2>::raw_value(y), rounding_dir(dir)), dir); }
-40039: template <typename To, typename From1, typename From2> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type div_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::div_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From1> ::Policy, typename Native_Checked_From_Wrapper<From2> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From1>::raw_value(x), Native_Checked_From_Wrapper<From2>::raw_value(y), rounding_dir(dir)), dir); }
-40039: template <typename To, typename From1, typename From2> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type idiv_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::idiv_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From1> ::Policy, typename Native_Checked_From_Wrapper<From2> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From1>::raw_value(x), Native_Checked_From_Wrapper<From2>::raw_value(y), rounding_dir(dir)), dir); }
-40039: template <typename To, typename From1, typename From2> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type rem_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::rem_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From1> ::Policy, typename Native_Checked_From_Wrapper<From2> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From1>::raw_value(x), Native_Checked_From_Wrapper<From2>::raw_value(y), rounding_dir(dir)), dir); }
-40039: template <typename To, typename From1, typename From2> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type gcd_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::gcd_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From1> ::Policy, typename Native_Checked_From_Wrapper<From2> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From1>::raw_value(x), Native_Checked_From_Wrapper<From2>::raw_value(y), rounding_dir(dir)), dir); }
-40039: template <typename To, typename From1, typename From2> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type lcm_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::lcm_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From1> ::Policy, typename Native_Checked_From_Wrapper<From2> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From1>::raw_value(x), Native_Checked_From_Wrapper<From2>::raw_value(y), rounding_dir(dir)), dir); }
-40039: template <typename To, typename From1, typename From2> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type add_mul_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::add_mul_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From1> ::Policy, typename Native_Checked_From_Wrapper<From2> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From1>::raw_value(x), Native_Checked_From_Wrapper<From2>::raw_value(y), rounding_dir(dir)), dir); }
-40039: template <typename To, typename From1, typename From2> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type sub_mul_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::sub_mul_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From1> ::Policy, typename Native_Checked_From_Wrapper<From2> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From1>::raw_value(x), Native_Checked_From_Wrapper<From2>::raw_value(y), rounding_dir(dir)), dir); }
-40039: # 464 "../../src/Checked_Number_inlines.hh"
-40039: template <typename To1, typename To2, typename To3, typename From1, typename From2> inline typename Enable_If<Is_Native_Or_Checked<To1>::value && Is_Native_Or_Checked<To2>::value && Is_Native_Or_Checked<To3>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type gcdext_assign_r(To1& to, To2& s, To3& t, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::gcdext_ext<typename Native_Checked_To_Wrapper<To1>::Policy, typename Native_Checked_To_Wrapper<To2>::Policy, typename Native_Checked_To_Wrapper<To3>::Policy, typename Native_Checked_From_Wrapper<From1>::Policy, typename Native_Checked_From_Wrapper<From2>::Policy> (Native_Checked_To_Wrapper<To1>::raw_value(to), Native_Checked_To_Wrapper<To2>::raw_value(s), Native_Checked_To_Wrapper<To3>::raw_value(t), Native_Checked_From_Wrapper<From1>::raw_value(x), Native_Checked_From_Wrapper<From2>::raw_value(y), rounding_dir(dir)), dir); }
-40039: # 485 "../../src/Checked_Number_inlines.hh"
-40039: template <typename T, typename Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator ++() { Policy::handle_result((add_assign_r)(*this, *this, T(1), Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> inline Checked_Number<T, Policy> Checked_Number<T, Policy>::operator ++(int) { T r = v; Policy::handle_result((add_assign_r)(*this, *this, T(1), Policy::ROUND_DEFAULT_OPERATOR)); return r;}
-40039: template <typename T, typename Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator --() { Policy::handle_result((sub_assign_r)(*this, *this, T(1), Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> inline Checked_Number<T, Policy> Checked_Number<T, Policy>::operator --(int) { T r = v; Policy::handle_result((sub_assign_r)(*this, *this, T(1), Policy::ROUND_DEFAULT_OPERATOR)); return r;}
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline Checked_Number<T, Policy>&
-40039: Checked_Number<T, Policy>::operator=(const Checked_Number<T, Policy>& y) {
-40039:   Checked::copy<Policy, Policy>(v, y.raw_value());
-40039:   return *this;
-40039: }
-40039: template <typename T, typename Policy>
-40039: template <typename From>
-40039: inline Checked_Number<T, Policy>&
-40039: Checked_Number<T, Policy>::operator=(const From& y) {
-40039:   Policy::handle_result(assign_r(*this, y, Policy::ROUND_DEFAULT_OPERATOR));
-40039:   return *this;
-40039: }
-40039: # 531 "../../src/Checked_Number_inlines.hh"
-40039: template <typename T, typename Policy> template <typename From_Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator +=(const Checked_Number<T, From_Policy>& y) { Policy::handle_result((add_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator +=(const T& y) { Policy::handle_result((add_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> template <typename From> inline typename Enable_If<Is_Native_Or_Checked<From>::value, Checked_Number<T, Policy>& >::type Checked_Number<T, Policy>::operator +=(const From& y) { Checked_Number<T, Policy> cy(y); Policy::handle_result((add_assign_r)(*this, *this, cy, Policy::ROUND_DEFAULT_OPERATOR)); return *this; }
-40039: template <typename T, typename Policy> template <typename From_Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator -=(const Checked_Number<T, From_Policy>& y) { Policy::handle_result((sub_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator -=(const T& y) { Policy::handle_result((sub_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> template <typename From> inline typename Enable_If<Is_Native_Or_Checked<From>::value, Checked_Number<T, Policy>& >::type Checked_Number<T, Policy>::operator -=(const From& y) { Checked_Number<T, Policy> cy(y); Policy::handle_result((sub_assign_r)(*this, *this, cy, Policy::ROUND_DEFAULT_OPERATOR)); return *this; }
-40039: template <typename T, typename Policy> template <typename From_Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator *=(const Checked_Number<T, From_Policy>& y) { Policy::handle_result((mul_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator *=(const T& y) { Policy::handle_result((mul_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> template <typename From> inline typename Enable_If<Is_Native_Or_Checked<From>::value, Checked_Number<T, Policy>& >::type Checked_Number<T, Policy>::operator *=(const From& y) { Checked_Number<T, Policy> cy(y); Policy::handle_result((mul_assign_r)(*this, *this, cy, Policy::ROUND_DEFAULT_OPERATOR)); return *this; }
-40039: template <typename T, typename Policy> template <typename From_Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator /=(const Checked_Number<T, From_Policy>& y) { Policy::handle_result((div_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator /=(const T& y) { Policy::handle_result((div_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> template <typename From> inline typename Enable_If<Is_Native_Or_Checked<From>::value, Checked_Number<T, Policy>& >::type Checked_Number<T, Policy>::operator /=(const From& y) { Checked_Number<T, Policy> cy(y); Policy::handle_result((div_assign_r)(*this, *this, cy, Policy::ROUND_DEFAULT_OPERATOR)); return *this; }
-40039: template <typename T, typename Policy> template <typename From_Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator %=(const Checked_Number<T, From_Policy>& y) { Policy::handle_result((rem_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator %=(const T& y) { Policy::handle_result((rem_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> template <typename From> inline typename Enable_If<Is_Native_Or_Checked<From>::value, Checked_Number<T, Policy>& >::type Checked_Number<T, Policy>::operator %=(const From& y) { Checked_Number<T, Policy> cy(y); Policy::handle_result((rem_assign_r)(*this, *this, cy, Policy::ROUND_DEFAULT_OPERATOR)); return *this; }
-40039: # 565 "../../src/Checked_Number_inlines.hh"
-40039: template <typename T, typename Policy> inline Checked_Number<T, Policy> operator +(const Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y) { Checked_Number<T, Policy> r; Policy::handle_result((add_assign_r)(r, x, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template <typename Type, typename T, typename Policy> inline typename Enable_If<Is_Native<Type>::value, Checked_Number<T, Policy> >::type operator +(const Type& x, const Checked_Number<T, Policy>& y) { Checked_Number<T, Policy> r(x); Policy::handle_result((add_assign_r)(r, r, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template <typename T, typename Policy, typename Type> inline typename Enable_If<Is_Native<Type>::value, Checked_Number<T, Policy> >::type operator +(const Checked_Number<T, Policy>& x, const Type& y) { Checked_Number<T, Policy> r(y); Policy::handle_result((add_assign_r)(r, x, r, Policy::ROUND_DEFAULT_OPERATOR)); return r; }
-40039: template <typename T, typename Policy> inline Checked_Number<T, Policy> operator -(const Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y) { Checked_Number<T, Policy> r; Policy::handle_result((sub_assign_r)(r, x, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template <typename Type, typename T, typename Policy> inline typename Enable_If<Is_Native<Type>::value, Checked_Number<T, Policy> >::type operator -(const Type& x, const Checked_Number<T, Policy>& y) { Checked_Number<T, Policy> r(x); Policy::handle_result((sub_assign_r)(r, r, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template <typename T, typename Policy, typename Type> inline typename Enable_If<Is_Native<Type>::value, Checked_Number<T, Policy> >::type operator -(const Checked_Number<T, Policy>& x, const Type& y) { Checked_Number<T, Policy> r(y); Policy::handle_result((sub_assign_r)(r, x, r, Policy::ROUND_DEFAULT_OPERATOR)); return r; }
-40039: template <typename T, typename Policy> inline Checked_Number<T, Policy> operator *(const Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y) { Checked_Number<T, Policy> r; Policy::handle_result((mul_assign_r)(r, x, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template <typename Type, typename T, typename Policy> inline typename Enable_If<Is_Native<Type>::value, Checked_Number<T, Policy> >::type operator *(const Type& x, const Checked_Number<T, Policy>& y) { Checked_Number<T, Policy> r(x); Policy::handle_result((mul_assign_r)(r, r, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template <typename T, typename Policy, typename Type> inline typename Enable_If<Is_Native<Type>::value, Checked_Number<T, Policy> >::type operator *(const Checked_Number<T, Policy>& x, const Type& y) { Checked_Number<T, Policy> r(y); Policy::handle_result((mul_assign_r)(r, x, r, Policy::ROUND_DEFAULT_OPERATOR)); return r; }
-40039: template <typename T, typename Policy> inline Checked_Number<T, Policy> operator /(const Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y) { Checked_Number<T, Policy> r; Policy::handle_result((div_assign_r)(r, x, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template <typename Type, typename T, typename Policy> inline typename Enable_If<Is_Native<Type>::value, Checked_Number<T, Policy> >::type operator /(const Type& x, const Checked_Number<T, Policy>& y) { Checked_Number<T, Policy> r(x); Policy::handle_result((div_assign_r)(r, r, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template <typename T, typename Policy, typename Type> inline typename Enable_If<Is_Native<Type>::value, Checked_Number<T, Policy> >::type operator /(const Checked_Number<T, Policy>& x, const Type& y) { Checked_Number<T, Policy> r(y); Policy::handle_result((div_assign_r)(r, x, r, Policy::ROUND_DEFAULT_OPERATOR)); return r; }
-40039: template <typename T, typename Policy> inline Checked_Number<T, Policy> operator %(const Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y) { Checked_Number<T, Policy> r; Policy::handle_result((rem_assign_r)(r, x, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template <typename Type, typename T, typename Policy> inline typename Enable_If<Is_Native<Type>::value, Checked_Number<T, Policy> >::type operator %(const Type& x, const Checked_Number<T, Policy>& y) { Checked_Number<T, Policy> r(x); Policy::handle_result((rem_assign_r)(r, r, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template <typename T, typename Policy, typename Type> inline typename Enable_If<Is_Native<Type>::value, Checked_Number<T, Policy> >::type operator %(const Checked_Number<T, Policy>& x, const Type& y) { Checked_Number<T, Policy> r(y); Policy::handle_result((rem_assign_r)(r, x, r, Policy::ROUND_DEFAULT_OPERATOR)); return r; }
-40039: # 587 "../../src/Checked_Number_inlines.hh"
-40039: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value && (Is_Checked<T1>::value || Is_Checked<T2>::value), bool>::type operator ==(const T1& x, const T2& y) { return Checked::eq_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
-40039: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value && (Is_Checked<T1>::value || Is_Checked<T2>::value), bool>::type operator !=(const T1& x, const T2& y) { return Checked::ne_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
-40039: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value && (Is_Checked<T1>::value || Is_Checked<T2>::value), bool>::type operator >=(const T1& x, const T2& y) { return Checked::ge_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
-40039: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value && (Is_Checked<T1>::value || Is_Checked<T2>::value), bool>::type operator >(const T1& x, const T2& y) { return Checked::gt_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
-40039: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value && (Is_Checked<T1>::value || Is_Checked<T2>::value), bool>::type operator <=(const T1& x, const T2& y) { return Checked::le_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
-40039: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value && (Is_Checked<T1>::value || Is_Checked<T2>::value), bool>::type operator <(const T1& x, const T2& y) { return Checked::lt_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
-40039: # 608 "../../src/Checked_Number_inlines.hh"
-40039: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value, bool>::type equal(const T1& x, const T2& y) { return Checked::eq_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
-40039: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value, bool>::type not_equal(const T1& x, const T2& y) { return Checked::ne_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
-40039: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value, bool>::type greater_or_equal(const T1& x, const T2& y) { return Checked::ge_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
-40039: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value, bool>::type greater_than(const T1& x, const T2& y) { return Checked::gt_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
-40039: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value, bool>::type less_or_equal(const T1& x, const T2& y) { return Checked::le_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
-40039: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value, bool>::type less_than(const T1& x, const T2& y) { return Checked::lt_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline Checked_Number<T, Policy>
-40039: operator+(const Checked_Number<T, Policy>& x) {
-40039:   return x;
-40039: }
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline Checked_Number<T, Policy>
-40039: operator-(const Checked_Number<T, Policy>& x) {
-40039:   Checked_Number<T, Policy> r;
-40039:   Policy::handle_result(neg_assign_r(r, x, Policy::ROUND_DEFAULT_OPERATOR));
-40039:   return r;
-40039: }
-40039: # 665 "../../src/Checked_Number_inlines.hh"
-40039: template <typename T, typename Policy> inline void sqrt_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y) { Policy::handle_result((sqrt_assign_r)(x, y, Policy::ROUND_DEFAULT_FUNCTION)); }
-40039: 
-40039: template <typename T, typename Policy> inline void floor_assign(Checked_Number<T, Policy>& x) { Policy::handle_result((floor_assign_r)(x, x, Policy::ROUND_DEFAULT_FUNCTION)); }
-40039: template <typename T, typename Policy> inline void floor_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y) { Policy::handle_result((floor_assign_r)(x, y, Policy::ROUND_DEFAULT_FUNCTION)); }
-40039: 
-40039: template <typename T, typename Policy> inline void ceil_assign(Checked_Number<T, Policy>& x) { Policy::handle_result((ceil_assign_r)(x, x, Policy::ROUND_DEFAULT_FUNCTION)); }
-40039: template <typename T, typename Policy> inline void ceil_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y) { Policy::handle_result((ceil_assign_r)(x, y, Policy::ROUND_DEFAULT_FUNCTION)); }
-40039: 
-40039: template <typename T, typename Policy> inline void trunc_assign(Checked_Number<T, Policy>& x) { Policy::handle_result((trunc_assign_r)(x, x, Policy::ROUND_DEFAULT_FUNCTION)); }
-40039: template <typename T, typename Policy> inline void trunc_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y) { Policy::handle_result((trunc_assign_r)(x, y, Policy::ROUND_DEFAULT_FUNCTION)); }
-40039: 
-40039: template <typename T, typename Policy> inline void neg_assign(Checked_Number<T, Policy>& x) { Policy::handle_result((neg_assign_r)(x, x, Policy::ROUND_DEFAULT_FUNCTION)); }
-40039: template <typename T, typename Policy> inline void neg_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y) { Policy::handle_result((neg_assign_r)(x, y, Policy::ROUND_DEFAULT_FUNCTION)); }
-40039: 
-40039: template <typename T, typename Policy> inline void abs_assign(Checked_Number<T, Policy>& x) { Policy::handle_result((abs_assign_r)(x, x, Policy::ROUND_DEFAULT_FUNCTION)); }
-40039: template <typename T, typename Policy> inline void abs_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y) { Policy::handle_result((abs_assign_r)(x, y, Policy::ROUND_DEFAULT_FUNCTION)); }
-40039: 
-40039: template <typename T, typename Policy> inline void add_mul_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y, const Checked_Number<T, Policy>& z) { Policy::handle_result((add_mul_assign_r)(x, y, z, Policy::ROUND_DEFAULT_FUNCTION)); }
-40039: 
-40039: template <typename T, typename Policy> inline void sub_mul_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y, const Checked_Number<T, Policy>& z) { Policy::handle_result((sub_mul_assign_r)(x, y, z, Policy::ROUND_DEFAULT_FUNCTION)); }
-40039: 
-40039: template <typename T, typename Policy> inline void rem_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y, const Checked_Number<T, Policy>& z) { Policy::handle_result((rem_assign_r)(x, y, z, Policy::ROUND_DEFAULT_FUNCTION)); }
-40039: 
-40039: template <typename T, typename Policy> inline void gcd_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y, const Checked_Number<T, Policy>& z) { Policy::handle_result((gcd_assign_r)(x, y, z, Policy::ROUND_DEFAULT_FUNCTION)); }
-40039: 
-40039: template <typename T, typename Policy> inline void gcdext_assign(Checked_Number<T, Policy>& x, Checked_Number<T, Policy>& s, Checked_Number<T, Policy>& t, const Checked_Number<T, Policy>& y, const Checked_Number<T, Policy>& z) { Policy::handle_result((gcdext_assign_r)(x, s, t, y, z, Policy::ROUND_DEFAULT_FUNCTION)); }
-40039: 
-40039: template <typename T, typename Policy> inline void lcm_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y, const Checked_Number<T, Policy>& z) { Policy::handle_result((lcm_assign_r)(x, y, z, Policy::ROUND_DEFAULT_FUNCTION)); }
-40039: # 708 "../../src/Checked_Number_inlines.hh"
-40039: template <typename T, typename Policy> inline void mul_2exp_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y, unsigned int exp) { Policy::handle_result((mul_2exp_assign_r)(x, y, exp, Policy::ROUND_DEFAULT_FUNCTION)); }
-40039: template <typename T, typename Policy> inline void div_2exp_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y, unsigned int exp) { Policy::handle_result((div_2exp_assign_r)(x, y, exp, Policy::ROUND_DEFAULT_FUNCTION)); }
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline void
-40039: exact_div_assign(Checked_Number<T, Policy>& x,
-40039:                  const Checked_Number<T, Policy>& y,
-40039:                  const Checked_Number<T, Policy>& z) {
-40039:   Policy::handle_result(div_assign_r(x, y, z, ROUND_NOT_NEEDED));
-40039: }
-40039: 
-40039: 
-40039: template <typename From>
-40039: inline typename Enable_If<Is_Native_Or_Checked<From>::value, int>::type
-40039: sgn(const From& x) {
-40039:   Result_Relation r
-40039:     = Checked::sgn_ext<typename Native_Checked_From_Wrapper<From>::Policy>
-40039:         (Native_Checked_From_Wrapper<From>::raw_value(x));
-40039:   switch (r) {
-40039:   case VR_LT:
-40039:     return -1;
-40039:   case VR_EQ:
-40039:     return 0;
-40039:   case VR_GT:
-40039:     return 1;
-40039:   default:
-40039:     throw(0);
-40039:   }
-40039: }
-40039: 
-40039: 
-40039: template <typename From1, typename From2>
-40039: inline typename Enable_If<Is_Native_Or_Checked<From1>::value
-40039:                           && Is_Native_Or_Checked<From2>::value,
-40039:                           int>::type
-40039: cmp(const From1& x, const From2& y) {
-40039:   Result_Relation r
-40039:     = Checked::cmp_ext<typename Native_Checked_From_Wrapper<From1>::Policy,
-40039:                        typename Native_Checked_From_Wrapper<From2>::Policy>
-40039:                  (Native_Checked_From_Wrapper<From1>::raw_value(x),
-40039:                   Native_Checked_From_Wrapper<From2>::raw_value(y));
-40039:   switch (r) {
-40039:   case VR_LT:
-40039:     return -1;
-40039:   case VR_EQ:
-40039:     return 0;
-40039:   case VR_GT:
-40039:     return 1;
-40039:   default:
-40039:     throw(0);
-40039:   }
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: typename Enable_If<Is_Native_Or_Checked<T>::value, Result>::type
-40039: output(std::ostream& os, const T& x,
-40039:        const Numeric_Format& format, Rounding_Dir dir) {
-40039:   return check_result(Checked::output_ext<typename Native_Checked_From_Wrapper<T>::Policy>
-40039:                       (os,
-40039:                        Native_Checked_From_Wrapper<T>::raw_value(x),
-40039:                        format,
-40039:                        rounding_dir(dir)),
-40039:                       dir);
-40039: }
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline std::ostream&
-40039: operator<<(std::ostream& os, const Checked_Number<T, Policy>& x) {
-40039:   Policy::handle_result(output(os, x, Numeric_Format(), ROUND_IGNORE));
-40039:   return os;
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: typename Enable_If<Is_Native_Or_Checked<T>::value, Result>::type
-40039: input(T& x, std::istream& is, Rounding_Dir dir) {
-40039:   return check_result(Checked::input_ext<typename Native_Checked_To_Wrapper<T>::Policy>
-40039:                       (Native_Checked_To_Wrapper<T>::raw_value(x),
-40039:                        is,
-40039:                        rounding_dir(dir)),
-40039:                       dir);
-40039: }
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline std::istream& operator>>(std::istream& is,
-40039:                                 Checked_Number<T, Policy>& x) {
-40039:   Result r = input(x, is, Policy::ROUND_DEFAULT_INPUT);
-40039:   if (r == V_CVT_STR_UNK) {
-40039:     is.setstate(std::ios::failbit);
-40039:   }
-40039:   else {
-40039:     Policy::handle_result(r);
-40039:   }
-40039:   return is;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline T
-40039: plus_infinity() {
-40039:   return PLUS_INFINITY;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline T
-40039: minus_infinity() {
-40039:   return MINUS_INFINITY;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline T
-40039: not_a_number() {
-40039:   return NOT_A_NUMBER;
-40039: }
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline void
-40039: swap(Checked_Number<T, Policy>& x, Checked_Number<T, Policy>& y) {
-40039:   using std::swap;
-40039:   swap(x.raw_value(), y.raw_value());
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: maybe_reset_fpu_inexact() {
-40039:   if (FPU_Related<T>::value) {
-40039:     return fpu_reset_inexact();
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline int
-40039: maybe_check_fpu_inexact() {
-40039:   if (FPU_Related<T>::value) {
-40039:     return fpu_check_inexact();
-40039:   }
-40039:   else {
-40039:     return 0;
-40039:   }
-40039: }
-40039: 
-40039: }
-40039: # 1068 "../../src/Checked_Number_defs.hh" 2
-40039: # 1 "../../src/Checked_Number_templates.hh" 1
-40039: # 28 "../../src/Checked_Number_templates.hh"
-40039: # 1 "/usr/include/c++/8/iomanip" 1 3
-40039: # 36 "/usr/include/c++/8/iomanip" 3
-40039:        
-40039: # 37 "/usr/include/c++/8/iomanip" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/locale" 1 3
-40039: # 36 "/usr/include/c++/8/locale" 3
-40039:        
-40039: # 37 "/usr/include/c++/8/locale" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/locale_facets_nonio.h" 1 3
-40039: # 37 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:        
-40039: # 38 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039: 
-40039: # 1 "/usr/include/c++/8/ctime" 1 3
-40039: # 39 "/usr/include/c++/8/ctime" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/ctime" 3
-40039: # 58 "/usr/include/c++/8/ctime" 3
-40039: 
-40039: # 58 "/usr/include/c++/8/ctime" 3
-40039: namespace std
-40039: {
-40039:   using ::clock_t;
-40039:   using ::time_t;
-40039:   using ::tm;
-40039: 
-40039:   using ::clock;
-40039:   using ::difftime;
-40039:   using ::mktime;
-40039:   using ::time;
-40039:   using ::asctime;
-40039:   using ::ctime;
-40039:   using ::gmtime;
-40039:   using ::localtime;
-40039:   using ::strftime;
-40039: }
-40039: # 40 "/usr/include/c++/8/bits/locale_facets_nonio.h" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 52 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:   class time_base
-40039:   {
-40039:   public:
-40039:     enum dateorder { no_order, dmy, mdy, ymd, ydm };
-40039:   };
-40039: 
-40039:   template<typename _CharT>
-40039:     struct __timepunct_cache : public locale::facet
-40039:     {
-40039: 
-40039:       static const _CharT* _S_timezones[14];
-40039: 
-40039:       const _CharT* _M_date_format;
-40039:       const _CharT* _M_date_era_format;
-40039:       const _CharT* _M_time_format;
-40039:       const _CharT* _M_time_era_format;
-40039:       const _CharT* _M_date_time_format;
-40039:       const _CharT* _M_date_time_era_format;
-40039:       const _CharT* _M_am;
-40039:       const _CharT* _M_pm;
-40039:       const _CharT* _M_am_pm_format;
-40039: 
-40039: 
-40039:       const _CharT* _M_day1;
-40039:       const _CharT* _M_day2;
-40039:       const _CharT* _M_day3;
-40039:       const _CharT* _M_day4;
-40039:       const _CharT* _M_day5;
-40039:       const _CharT* _M_day6;
-40039:       const _CharT* _M_day7;
-40039: 
-40039: 
-40039:       const _CharT* _M_aday1;
-40039:       const _CharT* _M_aday2;
-40039:       const _CharT* _M_aday3;
-40039:       const _CharT* _M_aday4;
-40039:       const _CharT* _M_aday5;
-40039:       const _CharT* _M_aday6;
-40039:       const _CharT* _M_aday7;
-40039: 
-40039: 
-40039:       const _CharT* _M_month01;
-40039:       const _CharT* _M_month02;
-40039:       const _CharT* _M_month03;
-40039:       const _CharT* _M_month04;
-40039:       const _CharT* _M_month05;
-40039:       const _CharT* _M_month06;
-40039:       const _CharT* _M_month07;
-40039:       const _CharT* _M_month08;
-40039:       const _CharT* _M_month09;
-40039:       const _CharT* _M_month10;
-40039:       const _CharT* _M_month11;
-40039:       const _CharT* _M_month12;
-40039: 
-40039: 
-40039:       const _CharT* _M_amonth01;
-40039:       const _CharT* _M_amonth02;
-40039:       const _CharT* _M_amonth03;
-40039:       const _CharT* _M_amonth04;
-40039:       const _CharT* _M_amonth05;
-40039:       const _CharT* _M_amonth06;
-40039:       const _CharT* _M_amonth07;
-40039:       const _CharT* _M_amonth08;
-40039:       const _CharT* _M_amonth09;
-40039:       const _CharT* _M_amonth10;
-40039:       const _CharT* _M_amonth11;
-40039:       const _CharT* _M_amonth12;
-40039: 
-40039:       bool _M_allocated;
-40039: 
-40039:       __timepunct_cache(size_t __refs = 0) : facet(__refs),
-40039:       _M_date_format(0), _M_date_era_format(0), _M_time_format(0),
-40039:       _M_time_era_format(0), _M_date_time_format(0),
-40039:       _M_date_time_era_format(0), _M_am(0), _M_pm(0),
-40039:       _M_am_pm_format(0), _M_day1(0), _M_day2(0), _M_day3(0),
-40039:       _M_day4(0), _M_day5(0), _M_day6(0), _M_day7(0),
-40039:       _M_aday1(0), _M_aday2(0), _M_aday3(0), _M_aday4(0),
-40039:       _M_aday5(0), _M_aday6(0), _M_aday7(0), _M_month01(0),
-40039:       _M_month02(0), _M_month03(0), _M_month04(0), _M_month05(0),
-40039:       _M_month06(0), _M_month07(0), _M_month08(0), _M_month09(0),
-40039:       _M_month10(0), _M_month11(0), _M_month12(0), _M_amonth01(0),
-40039:       _M_amonth02(0), _M_amonth03(0), _M_amonth04(0),
-40039:       _M_amonth05(0), _M_amonth06(0), _M_amonth07(0),
-40039:       _M_amonth08(0), _M_amonth09(0), _M_amonth10(0),
-40039:       _M_amonth11(0), _M_amonth12(0), _M_allocated(false)
-40039:       { }
-40039: 
-40039:       ~__timepunct_cache();
-40039: 
-40039:     private:
-40039:       __timepunct_cache&
-40039:       operator=(const __timepunct_cache&);
-40039: 
-40039:       explicit
-40039:       __timepunct_cache(const __timepunct_cache&);
-40039:     };
-40039: 
-40039:   template<typename _CharT>
-40039:     __timepunct_cache<_CharT>::~__timepunct_cache()
-40039:     {
-40039:       if (_M_allocated)
-40039:  {
-40039: 
-40039:  }
-40039:     }
-40039: 
-40039: 
-40039:   template<>
-40039:     const char*
-40039:     __timepunct_cache<char>::_S_timezones[14];
-40039: 
-40039: 
-40039:   template<>
-40039:     const wchar_t*
-40039:     __timepunct_cache<wchar_t>::_S_timezones[14];
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     const _CharT* __timepunct_cache<_CharT>::_S_timezones[14];
-40039: 
-40039:   template<typename _CharT>
-40039:     class __timepunct : public locale::facet
-40039:     {
-40039:     public:
-40039: 
-40039:       typedef _CharT __char_type;
-40039:       typedef __timepunct_cache<_CharT> __cache_type;
-40039: 
-40039:     protected:
-40039:       __cache_type* _M_data;
-40039:       __c_locale _M_c_locale_timepunct;
-40039:       const char* _M_name_timepunct;
-40039: 
-40039:     public:
-40039: 
-40039:       static locale::id id;
-40039: 
-40039:       explicit
-40039:       __timepunct(size_t __refs = 0);
-40039: 
-40039:       explicit
-40039:       __timepunct(__cache_type* __cache, size_t __refs = 0);
-40039: # 206 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       explicit
-40039:       __timepunct(__c_locale __cloc, const char* __s, size_t __refs = 0);
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_put(_CharT* __s, size_t __maxlen, const _CharT* __format,
-40039:       const tm* __tm) const throw ();
-40039: 
-40039:       void
-40039:       _M_date_formats(const _CharT** __date) const
-40039:       {
-40039: 
-40039:  __date[0] = _M_data->_M_date_format;
-40039:  __date[1] = _M_data->_M_date_era_format;
-40039:       }
-40039: 
-40039:       void
-40039:       _M_time_formats(const _CharT** __time) const
-40039:       {
-40039: 
-40039:  __time[0] = _M_data->_M_time_format;
-40039:  __time[1] = _M_data->_M_time_era_format;
-40039:       }
-40039: 
-40039:       void
-40039:       _M_date_time_formats(const _CharT** __dt) const
-40039:       {
-40039: 
-40039:  __dt[0] = _M_data->_M_date_time_format;
-40039:  __dt[1] = _M_data->_M_date_time_era_format;
-40039:       }
-40039: 
-40039: 
-40039:       void
-40039:       _M_am_pm_format(const _CharT*) const
-40039:       { }
-40039: 
-40039: 
-40039:       void
-40039:       _M_am_pm(const _CharT** __ampm) const
-40039:       {
-40039:  __ampm[0] = _M_data->_M_am;
-40039:  __ampm[1] = _M_data->_M_pm;
-40039:       }
-40039: 
-40039:       void
-40039:       _M_days(const _CharT** __days) const
-40039:       {
-40039:  __days[0] = _M_data->_M_day1;
-40039:  __days[1] = _M_data->_M_day2;
-40039:  __days[2] = _M_data->_M_day3;
-40039:  __days[3] = _M_data->_M_day4;
-40039:  __days[4] = _M_data->_M_day5;
-40039:  __days[5] = _M_data->_M_day6;
-40039:  __days[6] = _M_data->_M_day7;
-40039:       }
-40039: 
-40039:       void
-40039:       _M_days_abbreviated(const _CharT** __days) const
-40039:       {
-40039:  __days[0] = _M_data->_M_aday1;
-40039:  __days[1] = _M_data->_M_aday2;
-40039:  __days[2] = _M_data->_M_aday3;
-40039:  __days[3] = _M_data->_M_aday4;
-40039:  __days[4] = _M_data->_M_aday5;
-40039:  __days[5] = _M_data->_M_aday6;
-40039:  __days[6] = _M_data->_M_aday7;
-40039:       }
-40039: 
-40039:       void
-40039:       _M_months(const _CharT** __months) const
-40039:       {
-40039:  __months[0] = _M_data->_M_month01;
-40039:  __months[1] = _M_data->_M_month02;
-40039:  __months[2] = _M_data->_M_month03;
-40039:  __months[3] = _M_data->_M_month04;
-40039:  __months[4] = _M_data->_M_month05;
-40039:  __months[5] = _M_data->_M_month06;
-40039:  __months[6] = _M_data->_M_month07;
-40039:  __months[7] = _M_data->_M_month08;
-40039:  __months[8] = _M_data->_M_month09;
-40039:  __months[9] = _M_data->_M_month10;
-40039:  __months[10] = _M_data->_M_month11;
-40039:  __months[11] = _M_data->_M_month12;
-40039:       }
-40039: 
-40039:       void
-40039:       _M_months_abbreviated(const _CharT** __months) const
-40039:       {
-40039:  __months[0] = _M_data->_M_amonth01;
-40039:  __months[1] = _M_data->_M_amonth02;
-40039:  __months[2] = _M_data->_M_amonth03;
-40039:  __months[3] = _M_data->_M_amonth04;
-40039:  __months[4] = _M_data->_M_amonth05;
-40039:  __months[5] = _M_data->_M_amonth06;
-40039:  __months[6] = _M_data->_M_amonth07;
-40039:  __months[7] = _M_data->_M_amonth08;
-40039:  __months[8] = _M_data->_M_amonth09;
-40039:  __months[9] = _M_data->_M_amonth10;
-40039:  __months[10] = _M_data->_M_amonth11;
-40039:  __months[11] = _M_data->_M_amonth12;
-40039:       }
-40039: 
-40039:     protected:
-40039:       virtual
-40039:       ~__timepunct();
-40039: 
-40039: 
-40039:       void
-40039:       _M_initialize_timepunct(__c_locale __cloc = 0);
-40039:     };
-40039: 
-40039:   template<typename _CharT>
-40039:     locale::id __timepunct<_CharT>::id;
-40039: 
-40039: 
-40039:   template<>
-40039:     void
-40039:     __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc);
-40039: 
-40039:   template<>
-40039:     void
-40039:     __timepunct<char>::_M_put(char*, size_t, const char*, const tm*) const throw ();
-40039: 
-40039: 
-40039:   template<>
-40039:     void
-40039:     __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc);
-40039: 
-40039:   template<>
-40039:     void
-40039:     __timepunct<wchar_t>::_M_put(wchar_t*, size_t, const wchar_t*,
-40039:      const tm*) const throw ();
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/time_members.h" 1 3
-40039: # 37 "/usr/include/x86_64-linux-gnu/c++/8/bits/time_members.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     __timepunct<_CharT>::__timepunct(size_t __refs)
-40039:     : facet(__refs), _M_data(0), _M_c_locale_timepunct(0),
-40039:       _M_name_timepunct(_S_get_c_name())
-40039:     { _M_initialize_timepunct(); }
-40039: 
-40039:   template<typename _CharT>
-40039:     __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs)
-40039:     : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(0),
-40039:       _M_name_timepunct(_S_get_c_name())
-40039:     { _M_initialize_timepunct(); }
-40039: 
-40039:   template<typename _CharT>
-40039:     __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s,
-40039:          size_t __refs)
-40039:     : facet(__refs), _M_data(0), _M_c_locale_timepunct(0),
-40039:       _M_name_timepunct(0)
-40039:     {
-40039:       if (__builtin_strcmp(__s, _S_get_c_name()) != 0)
-40039:  {
-40039:    const size_t __len = __builtin_strlen(__s) + 1;
-40039:    char* __tmp = new char[__len];
-40039:    __builtin_memcpy(__tmp, __s, __len);
-40039:    _M_name_timepunct = __tmp;
-40039:  }
-40039:       else
-40039:  _M_name_timepunct = _S_get_c_name();
-40039: 
-40039:       try
-40039:  { _M_initialize_timepunct(__cloc); }
-40039:       catch(...)
-40039:  {
-40039:    if (_M_name_timepunct != _S_get_c_name())
-40039:      delete [] _M_name_timepunct;
-40039:    throw;
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _CharT>
-40039:     __timepunct<_CharT>::~__timepunct()
-40039:     {
-40039:       if (_M_name_timepunct != _S_get_c_name())
-40039:  delete [] _M_name_timepunct;
-40039:       delete _M_data;
-40039:       _S_destroy_c_locale(_M_c_locale_timepunct);
-40039:     }
-40039: 
-40039: 
-40039: }
-40039: # 347 "/usr/include/c++/8/bits/locale_facets_nonio.h" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: namespace __cxx11 {
-40039: # 367 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:   template<typename _CharT, typename _InIter>
-40039:     class time_get : public locale::facet, public time_base
-40039:     {
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef _InIter iter_type;
-40039: 
-40039: 
-40039: 
-40039:       static locale::id id;
-40039: # 388 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       explicit
-40039:       time_get(size_t __refs = 0)
-40039:       : facet (__refs) { }
-40039: # 405 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       dateorder
-40039:       date_order() const
-40039:       { return this->do_date_order(); }
-40039: # 429 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       iter_type
-40039:       get_time(iter_type __beg, iter_type __end, ios_base& __io,
-40039:         ios_base::iostate& __err, tm* __tm) const
-40039:       { return this->do_get_time(__beg, __end, __io, __err, __tm); }
-40039: # 454 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       iter_type
-40039:       get_date(iter_type __beg, iter_type __end, ios_base& __io,
-40039:         ios_base::iostate& __err, tm* __tm) const
-40039:       { return this->do_get_date(__beg, __end, __io, __err, __tm); }
-40039: # 482 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       iter_type
-40039:       get_weekday(iter_type __beg, iter_type __end, ios_base& __io,
-40039:     ios_base::iostate& __err, tm* __tm) const
-40039:       { return this->do_get_weekday(__beg, __end, __io, __err, __tm); }
-40039: # 511 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       iter_type
-40039:       get_monthname(iter_type __beg, iter_type __end, ios_base& __io,
-40039:       ios_base::iostate& __err, tm* __tm) const
-40039:       { return this->do_get_monthname(__beg, __end, __io, __err, __tm); }
-40039: # 537 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       iter_type
-40039:       get_year(iter_type __beg, iter_type __end, ios_base& __io,
-40039:         ios_base::iostate& __err, tm* __tm) const
-40039:       { return this->do_get_year(__beg, __end, __io, __err, __tm); }
-40039: # 558 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       inline
-40039:       iter_type get(iter_type __s, iter_type __end, ios_base& __io,
-40039:                     ios_base::iostate& __err, tm* __tm, char __format,
-40039:                     char __modifier = 0) const
-40039:       {
-40039:         return this->do_get(__s, __end, __io, __err, __tm, __format,
-40039:                             __modifier);
-40039:       }
-40039: # 585 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       iter_type get(iter_type __s, iter_type __end, ios_base& __io,
-40039:                     ios_base::iostate& __err, tm* __tm, const char_type* __fmt,
-40039:                     const char_type* __fmtend) const;
-40039: 
-40039: 
-40039:     protected:
-40039: 
-40039:       virtual
-40039:       ~time_get() { }
-40039: # 605 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       virtual dateorder
-40039:       do_date_order() const;
-40039: # 623 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       virtual iter_type
-40039:       do_get_time(iter_type __beg, iter_type __end, ios_base& __io,
-40039:     ios_base::iostate& __err, tm* __tm) const;
-40039: # 642 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       virtual iter_type
-40039:       do_get_date(iter_type __beg, iter_type __end, ios_base& __io,
-40039:     ios_base::iostate& __err, tm* __tm) const;
-40039: # 661 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       virtual iter_type
-40039:       do_get_weekday(iter_type __beg, iter_type __end, ios_base&,
-40039:        ios_base::iostate& __err, tm* __tm) const;
-40039: # 680 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       virtual iter_type
-40039:       do_get_monthname(iter_type __beg, iter_type __end, ios_base&,
-40039:          ios_base::iostate& __err, tm* __tm) const;
-40039: # 699 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       virtual iter_type
-40039:       do_get_year(iter_type __beg, iter_type __end, ios_base& __io,
-40039:     ios_base::iostate& __err, tm* __tm) const;
-40039: # 722 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       virtual
-40039: 
-40039:       iter_type
-40039:       do_get(iter_type __s, iter_type __end, ios_base& __f,
-40039:              ios_base::iostate& __err, tm* __tm,
-40039:              char __format, char __modifier) const;
-40039: 
-40039: 
-40039: 
-40039:       iter_type
-40039:       _M_extract_num(iter_type __beg, iter_type __end, int& __member,
-40039:        int __min, int __max, size_t __len,
-40039:        ios_base& __io, ios_base::iostate& __err) const;
-40039: 
-40039: 
-40039:       iter_type
-40039:       _M_extract_name(iter_type __beg, iter_type __end, int& __member,
-40039:         const _CharT** __names, size_t __indexlen,
-40039:         ios_base& __io, ios_base::iostate& __err) const;
-40039: 
-40039: 
-40039:       iter_type
-40039:       _M_extract_wday_or_month(iter_type __beg, iter_type __end, int& __member,
-40039:           const _CharT** __names, size_t __indexlen,
-40039:           ios_base& __io, ios_base::iostate& __err) const;
-40039: 
-40039: 
-40039:       iter_type
-40039:       _M_extract_via_format(iter_type __beg, iter_type __end, ios_base& __io,
-40039:        ios_base::iostate& __err, tm* __tm,
-40039:        const _CharT* __format) const;
-40039:     };
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     locale::id time_get<_CharT, _InIter>::id;
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     class time_get_byname : public time_get<_CharT, _InIter>
-40039:     {
-40039:     public:
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef _InIter iter_type;
-40039: 
-40039:       explicit
-40039:       time_get_byname(const char*, size_t __refs = 0)
-40039:       : time_get<_CharT, _InIter>(__refs) { }
-40039: 
-40039: 
-40039:       explicit
-40039:       time_get_byname(const string& __s, size_t __refs = 0)
-40039:       : time_get_byname(__s.c_str(), __refs) { }
-40039: 
-40039: 
-40039:     protected:
-40039:       virtual
-40039:       ~time_get_byname() { }
-40039:     };
-40039: 
-40039: }
-40039: # 796 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:   template<typename _CharT, typename _OutIter>
-40039:     class time_put : public locale::facet
-40039:     {
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef _OutIter iter_type;
-40039: 
-40039: 
-40039: 
-40039:       static locale::id id;
-40039: # 817 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       explicit
-40039:       time_put(size_t __refs = 0)
-40039:       : facet(__refs) { }
-40039: # 836 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       iter_type
-40039:       put(iter_type __s, ios_base& __io, char_type __fill, const tm* __tm,
-40039:    const _CharT* __beg, const _CharT* __end) const;
-40039: # 856 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       iter_type
-40039:       put(iter_type __s, ios_base& __io, char_type __fill,
-40039:    const tm* __tm, char __format, char __mod = 0) const
-40039:       { return this->do_put(__s, __io, __fill, __tm, __format, __mod); }
-40039: 
-40039:     protected:
-40039: 
-40039:       virtual
-40039:       ~time_put()
-40039:       { }
-40039: # 883 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       virtual iter_type
-40039:       do_put(iter_type __s, ios_base& __io, char_type __fill, const tm* __tm,
-40039:       char __format, char __mod) const;
-40039:     };
-40039: 
-40039:   template<typename _CharT, typename _OutIter>
-40039:     locale::id time_put<_CharT, _OutIter>::id;
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _OutIter>
-40039:     class time_put_byname : public time_put<_CharT, _OutIter>
-40039:     {
-40039:     public:
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef _OutIter iter_type;
-40039: 
-40039:       explicit
-40039:       time_put_byname(const char*, size_t __refs = 0)
-40039:       : time_put<_CharT, _OutIter>(__refs)
-40039:       { }
-40039: 
-40039: 
-40039:       explicit
-40039:       time_put_byname(const string& __s, size_t __refs = 0)
-40039:       : time_put_byname(__s.c_str(), __refs) { }
-40039: 
-40039: 
-40039:     protected:
-40039:       virtual
-40039:       ~time_put_byname() { }
-40039:     };
-40039: # 928 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:   class money_base
-40039:   {
-40039:   public:
-40039:     enum part { none, space, symbol, sign, value };
-40039:     struct pattern { char field[4]; };
-40039: 
-40039:     static const pattern _S_default_pattern;
-40039: 
-40039:     enum
-40039:     {
-40039:       _S_minus,
-40039:       _S_zero,
-40039:       _S_end = 11
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:     static const char* _S_atoms;
-40039: 
-40039: 
-40039: 
-40039:     __attribute__ ((__const__)) static pattern
-40039:     _S_construct_pattern(char __precedes, char __space, char __posn) throw ();
-40039:   };
-40039: 
-40039:   template<typename _CharT, bool _Intl>
-40039:     struct __moneypunct_cache : public locale::facet
-40039:     {
-40039:       const char* _M_grouping;
-40039:       size_t _M_grouping_size;
-40039:       bool _M_use_grouping;
-40039:       _CharT _M_decimal_point;
-40039:       _CharT _M_thousands_sep;
-40039:       const _CharT* _M_curr_symbol;
-40039:       size_t _M_curr_symbol_size;
-40039:       const _CharT* _M_positive_sign;
-40039:       size_t _M_positive_sign_size;
-40039:       const _CharT* _M_negative_sign;
-40039:       size_t _M_negative_sign_size;
-40039:       int _M_frac_digits;
-40039:       money_base::pattern _M_pos_format;
-40039:       money_base::pattern _M_neg_format;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       _CharT _M_atoms[money_base::_S_end];
-40039: 
-40039:       bool _M_allocated;
-40039: 
-40039:       __moneypunct_cache(size_t __refs = 0) : facet(__refs),
-40039:       _M_grouping(0), _M_grouping_size(0), _M_use_grouping(false),
-40039:       _M_decimal_point(_CharT()), _M_thousands_sep(_CharT()),
-40039:       _M_curr_symbol(0), _M_curr_symbol_size(0),
-40039:       _M_positive_sign(0), _M_positive_sign_size(0),
-40039:       _M_negative_sign(0), _M_negative_sign_size(0),
-40039:       _M_frac_digits(0),
-40039:       _M_pos_format(money_base::pattern()),
-40039:       _M_neg_format(money_base::pattern()), _M_allocated(false)
-40039:       { }
-40039: 
-40039:       ~__moneypunct_cache();
-40039: 
-40039:       void
-40039:       _M_cache(const locale& __loc);
-40039: 
-40039:     private:
-40039:       __moneypunct_cache&
-40039:       operator=(const __moneypunct_cache&);
-40039: 
-40039:       explicit
-40039:       __moneypunct_cache(const __moneypunct_cache&);
-40039:     };
-40039: 
-40039:   template<typename _CharT, bool _Intl>
-40039:     __moneypunct_cache<_CharT, _Intl>::~__moneypunct_cache()
-40039:     {
-40039:       if (_M_allocated)
-40039:  {
-40039:    delete [] _M_grouping;
-40039:    delete [] _M_curr_symbol;
-40039:    delete [] _M_positive_sign;
-40039:    delete [] _M_negative_sign;
-40039:  }
-40039:     }
-40039: 
-40039: namespace __cxx11 {
-40039: # 1023 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:   template<typename _CharT, bool _Intl>
-40039:     class moneypunct : public locale::facet, public money_base
-40039:     {
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef basic_string<_CharT> string_type;
-40039: 
-40039:       typedef __moneypunct_cache<_CharT, _Intl> __cache_type;
-40039: 
-40039:     private:
-40039:       __cache_type* _M_data;
-40039: 
-40039:     public:
-40039: 
-40039: 
-40039:       static const bool intl = _Intl;
-40039: 
-40039:       static locale::id id;
-40039: # 1052 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       explicit
-40039:       moneypunct(size_t __refs = 0)
-40039:       : facet(__refs), _M_data(0)
-40039:       { _M_initialize_moneypunct(); }
-40039: # 1065 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       explicit
-40039:       moneypunct(__cache_type* __cache, size_t __refs = 0)
-40039:       : facet(__refs), _M_data(__cache)
-40039:       { _M_initialize_moneypunct(); }
-40039: # 1080 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       explicit
-40039:       moneypunct(__c_locale __cloc, const char* __s, size_t __refs = 0)
-40039:       : facet(__refs), _M_data(0)
-40039:       { _M_initialize_moneypunct(__cloc, __s); }
-40039: # 1094 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       char_type
-40039:       decimal_point() const
-40039:       { return this->do_decimal_point(); }
-40039: # 1107 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       char_type
-40039:       thousands_sep() const
-40039:       { return this->do_thousands_sep(); }
-40039: # 1137 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       string
-40039:       grouping() const
-40039:       { return this->do_grouping(); }
-40039: # 1150 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       string_type
-40039:       curr_symbol() const
-40039:       { return this->do_curr_symbol(); }
-40039: # 1167 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       string_type
-40039:       positive_sign() const
-40039:       { return this->do_positive_sign(); }
-40039: # 1184 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       string_type
-40039:       negative_sign() const
-40039:       { return this->do_negative_sign(); }
-40039: # 1200 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       int
-40039:       frac_digits() const
-40039:       { return this->do_frac_digits(); }
-40039: # 1236 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       pattern
-40039:       pos_format() const
-40039:       { return this->do_pos_format(); }
-40039: 
-40039:       pattern
-40039:       neg_format() const
-40039:       { return this->do_neg_format(); }
-40039: 
-40039: 
-40039:     protected:
-40039: 
-40039:       virtual
-40039:       ~moneypunct();
-40039: # 1258 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       virtual char_type
-40039:       do_decimal_point() const
-40039:       { return _M_data->_M_decimal_point; }
-40039: # 1270 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       virtual char_type
-40039:       do_thousands_sep() const
-40039:       { return _M_data->_M_thousands_sep; }
-40039: # 1283 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       virtual string
-40039:       do_grouping() const
-40039:       { return _M_data->_M_grouping; }
-40039: # 1296 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       virtual string_type
-40039:       do_curr_symbol() const
-40039:       { return _M_data->_M_curr_symbol; }
-40039: # 1309 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       virtual string_type
-40039:       do_positive_sign() const
-40039:       { return _M_data->_M_positive_sign; }
-40039: # 1322 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       virtual string_type
-40039:       do_negative_sign() const
-40039:       { return _M_data->_M_negative_sign; }
-40039: # 1336 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       virtual int
-40039:       do_frac_digits() const
-40039:       { return _M_data->_M_frac_digits; }
-40039: # 1350 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       virtual pattern
-40039:       do_pos_format() const
-40039:       { return _M_data->_M_pos_format; }
-40039: # 1364 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       virtual pattern
-40039:       do_neg_format() const
-40039:       { return _M_data->_M_neg_format; }
-40039: 
-40039: 
-40039:        void
-40039:        _M_initialize_moneypunct(__c_locale __cloc = 0,
-40039:     const char* __name = 0);
-40039:     };
-40039: 
-40039:   template<typename _CharT, bool _Intl>
-40039:     locale::id moneypunct<_CharT, _Intl>::id;
-40039: 
-40039:   template<typename _CharT, bool _Intl>
-40039:     const bool moneypunct<_CharT, _Intl>::intl;
-40039: 
-40039:   template<>
-40039:     moneypunct<char, true>::~moneypunct();
-40039: 
-40039:   template<>
-40039:     moneypunct<char, false>::~moneypunct();
-40039: 
-40039:   template<>
-40039:     void
-40039:     moneypunct<char, true>::_M_initialize_moneypunct(__c_locale, const char*);
-40039: 
-40039:   template<>
-40039:     void
-40039:     moneypunct<char, false>::_M_initialize_moneypunct(__c_locale, const char*);
-40039: 
-40039: 
-40039:   template<>
-40039:     moneypunct<wchar_t, true>::~moneypunct();
-40039: 
-40039:   template<>
-40039:     moneypunct<wchar_t, false>::~moneypunct();
-40039: 
-40039:   template<>
-40039:     void
-40039:     moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale,
-40039:        const char*);
-40039: 
-40039:   template<>
-40039:     void
-40039:     moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale,
-40039:         const char*);
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, bool _Intl>
-40039:     class moneypunct_byname : public moneypunct<_CharT, _Intl>
-40039:     {
-40039:     public:
-40039:       typedef _CharT char_type;
-40039:       typedef basic_string<_CharT> string_type;
-40039: 
-40039:       static const bool intl = _Intl;
-40039: 
-40039:       explicit
-40039:       moneypunct_byname(const char* __s, size_t __refs = 0)
-40039:       : moneypunct<_CharT, _Intl>(__refs)
-40039:       {
-40039:  if (__builtin_strcmp(__s, "C") != 0
-40039:      && __builtin_strcmp(__s, "POSIX") != 0)
-40039:    {
-40039:      __c_locale __tmp;
-40039:      this->_S_create_c_locale(__tmp, __s);
-40039:      this->_M_initialize_moneypunct(__tmp);
-40039:      this->_S_destroy_c_locale(__tmp);
-40039:    }
-40039:       }
-40039: 
-40039: 
-40039:       explicit
-40039:       moneypunct_byname(const string& __s, size_t __refs = 0)
-40039:       : moneypunct_byname(__s.c_str(), __refs) { }
-40039: 
-40039: 
-40039:     protected:
-40039:       virtual
-40039:       ~moneypunct_byname() { }
-40039:     };
-40039: 
-40039:   template<typename _CharT, bool _Intl>
-40039:     const bool moneypunct_byname<_CharT, _Intl>::intl;
-40039: 
-40039: }
-40039: 
-40039: namespace __cxx11 {
-40039: # 1467 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:   template<typename _CharT, typename _InIter>
-40039:     class money_get : public locale::facet
-40039:     {
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef _InIter iter_type;
-40039:       typedef basic_string<_CharT> string_type;
-40039: 
-40039: 
-40039: 
-40039:       static locale::id id;
-40039: # 1489 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       explicit
-40039:       money_get(size_t __refs = 0) : facet(__refs) { }
-40039: # 1519 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       iter_type
-40039:       get(iter_type __s, iter_type __end, bool __intl, ios_base& __io,
-40039:    ios_base::iostate& __err, long double& __units) const
-40039:       { return this->do_get(__s, __end, __intl, __io, __err, __units); }
-40039: # 1550 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       iter_type
-40039:       get(iter_type __s, iter_type __end, bool __intl, ios_base& __io,
-40039:    ios_base::iostate& __err, string_type& __digits) const
-40039:       { return this->do_get(__s, __end, __intl, __io, __err, __digits); }
-40039: 
-40039:     protected:
-40039: 
-40039:       virtual
-40039:       ~money_get() { }
-40039: # 1574 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       virtual iter_type
-40039:       do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io,
-40039:       ios_base::iostate& __err, long double& __units) const;
-40039: # 1586 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       virtual iter_type
-40039:       do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io,
-40039:       ios_base::iostate& __err, string_type& __digits) const;
-40039: # 1598 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       template<bool _Intl>
-40039:         iter_type
-40039:         _M_extract(iter_type __s, iter_type __end, ios_base& __io,
-40039:      ios_base::iostate& __err, string& __digits) const;
-40039:     };
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     locale::id money_get<_CharT, _InIter>::id;
-40039: # 1620 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:   template<typename _CharT, typename _OutIter>
-40039:     class money_put : public locale::facet
-40039:     {
-40039:     public:
-40039: 
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef _OutIter iter_type;
-40039:       typedef basic_string<_CharT> string_type;
-40039: 
-40039: 
-40039: 
-40039:       static locale::id id;
-40039: # 1641 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       explicit
-40039:       money_put(size_t __refs = 0) : facet(__refs) { }
-40039: # 1661 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       iter_type
-40039:       put(iter_type __s, bool __intl, ios_base& __io,
-40039:    char_type __fill, long double __units) const
-40039:       { return this->do_put(__s, __intl, __io, __fill, __units); }
-40039: # 1684 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       iter_type
-40039:       put(iter_type __s, bool __intl, ios_base& __io,
-40039:    char_type __fill, const string_type& __digits) const
-40039:       { return this->do_put(__s, __intl, __io, __fill, __digits); }
-40039: 
-40039:     protected:
-40039: 
-40039:       virtual
-40039:       ~money_put() { }
-40039: # 1719 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       virtual iter_type
-40039:       do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
-40039:       long double __units) const;
-40039: # 1743 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       virtual iter_type
-40039:       do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
-40039:       const string_type& __digits) const;
-40039: # 1755 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       template<bool _Intl>
-40039:         iter_type
-40039:         _M_insert(iter_type __s, ios_base& __io, char_type __fill,
-40039:     const string_type& __digits) const;
-40039:     };
-40039: 
-40039:   template<typename _CharT, typename _OutIter>
-40039:     locale::id money_put<_CharT, _OutIter>::id;
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   struct messages_base
-40039:   {
-40039:     typedef int catalog;
-40039:   };
-40039: 
-40039: namespace __cxx11 {
-40039: # 1798 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:   template<typename _CharT>
-40039:     class messages : public locale::facet, public messages_base
-40039:     {
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef basic_string<_CharT> string_type;
-40039: 
-40039: 
-40039:     protected:
-40039: 
-40039: 
-40039:       __c_locale _M_c_locale_messages;
-40039:       const char* _M_name_messages;
-40039: 
-40039:     public:
-40039: 
-40039:       static locale::id id;
-40039: # 1826 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       explicit
-40039:       messages(size_t __refs = 0);
-40039: # 1840 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       explicit
-40039:       messages(__c_locale __cloc, const char* __s, size_t __refs = 0);
-40039: # 1853 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       catalog
-40039:       open(const basic_string<char>& __s, const locale& __loc) const
-40039:       { return this->do_open(__s, __loc); }
-40039: # 1871 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       catalog
-40039:       open(const basic_string<char>&, const locale&, const char*) const;
-40039: # 1889 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       string_type
-40039:       get(catalog __c, int __set, int __msgid, const string_type& __s) const
-40039:       { return this->do_get(__c, __set, __msgid, __s); }
-40039: # 1900 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       void
-40039:       close(catalog __c) const
-40039:       { return this->do_close(__c); }
-40039: 
-40039:     protected:
-40039: 
-40039:       virtual
-40039:       ~messages();
-40039: # 1920 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       virtual catalog
-40039:       do_open(const basic_string<char>&, const locale&) const;
-40039: # 1939 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
-40039:       virtual string_type
-40039:       do_get(catalog, int, int, const string_type& __dfault) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       virtual void
-40039:       do_close(catalog) const;
-40039: 
-40039: 
-40039:       char*
-40039:       _M_convert_to_char(const string_type& __msg) const
-40039:       {
-40039: 
-40039:  return reinterpret_cast<char*>(const_cast<_CharT*>(__msg.c_str()));
-40039:       }
-40039: 
-40039: 
-40039:       string_type
-40039:       _M_convert_from_char(char*) const
-40039:       {
-40039: 
-40039:  return string_type();
-40039:       }
-40039:      };
-40039: 
-40039:   template<typename _CharT>
-40039:     locale::id messages<_CharT>::id;
-40039: 
-40039: 
-40039:   template<>
-40039:     string
-40039:     messages<char>::do_get(catalog, int, int, const string&) const;
-40039: 
-40039: 
-40039:   template<>
-40039:     wstring
-40039:     messages<wchar_t>::do_get(catalog, int, int, const wstring&) const;
-40039: 
-40039: 
-40039: 
-40039:    template<typename _CharT>
-40039:     class messages_byname : public messages<_CharT>
-40039:     {
-40039:     public:
-40039:       typedef _CharT char_type;
-40039:       typedef basic_string<_CharT> string_type;
-40039: 
-40039:       explicit
-40039:       messages_byname(const char* __s, size_t __refs = 0);
-40039: 
-40039: 
-40039:       explicit
-40039:       messages_byname(const string& __s, size_t __refs = 0)
-40039:       : messages_byname(__s.c_str(), __refs) { }
-40039: 
-40039: 
-40039:     protected:
-40039:       virtual
-40039:       ~messages_byname()
-40039:       { }
-40039:     };
-40039: 
-40039: }
-40039: 
-40039: 
-40039: }
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/messages_members.h" 1 3
-40039: # 36 "/usr/include/x86_64-linux-gnu/c++/8/bits/messages_members.h" 3
-40039: # 1 "/usr/include/libintl.h" 1 3 4
-40039: # 34 "/usr/include/libintl.h" 3 4
-40039: extern "C" {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *gettext (const char *__msgid)
-40039:      throw () __attribute__ ((__format_arg__ (1)));
-40039: 
-40039: 
-40039: 
-40039: extern char *dgettext (const char *__domainname, const char *__msgid)
-40039:      throw () __attribute__ ((__format_arg__ (2)));
-40039: extern char *__dgettext (const char *__domainname, const char *__msgid)
-40039:      throw () __attribute__ ((__format_arg__ (2)));
-40039: 
-40039: 
-40039: 
-40039: extern char *dcgettext (const char *__domainname,
-40039:    const char *__msgid, int __category)
-40039:      throw () __attribute__ ((__format_arg__ (2)));
-40039: extern char *__dcgettext (const char *__domainname,
-40039:      const char *__msgid, int __category)
-40039:      throw () __attribute__ ((__format_arg__ (2)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *ngettext (const char *__msgid1, const char *__msgid2,
-40039:          unsigned long int __n)
-40039:      throw () __attribute__ ((__format_arg__ (1))) __attribute__ ((__format_arg__ (2)));
-40039: 
-40039: 
-40039: 
-40039: extern char *dngettext (const char *__domainname, const char *__msgid1,
-40039:    const char *__msgid2, unsigned long int __n)
-40039:      throw () __attribute__ ((__format_arg__ (2))) __attribute__ ((__format_arg__ (3)));
-40039: 
-40039: 
-40039: 
-40039: extern char *dcngettext (const char *__domainname, const char *__msgid1,
-40039:     const char *__msgid2, unsigned long int __n,
-40039:     int __category)
-40039:      throw () __attribute__ ((__format_arg__ (2))) __attribute__ ((__format_arg__ (3)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern char *textdomain (const char *__domainname) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern char *bindtextdomain (const char *__domainname,
-40039:         const char *__dirname) throw ();
-40039: 
-40039: 
-40039: 
-40039: extern char *bind_textdomain_codeset (const char *__domainname,
-40039:           const char *__codeset) throw ();
-40039: # 121 "/usr/include/libintl.h" 3 4
-40039: }
-40039: # 37 "/usr/include/x86_64-linux-gnu/c++/8/bits/messages_members.h" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     messages<_CharT>::messages(size_t __refs)
-40039:     : facet(__refs), _M_c_locale_messages(_S_get_c_locale()),
-40039:       _M_name_messages(_S_get_c_name())
-40039:     { }
-40039: 
-40039:   template<typename _CharT>
-40039:     messages<_CharT>::messages(__c_locale __cloc, const char* __s,
-40039:           size_t __refs)
-40039:     : facet(__refs), _M_c_locale_messages(0), _M_name_messages(0)
-40039:     {
-40039:       if (__builtin_strcmp(__s, _S_get_c_name()) != 0)
-40039:  {
-40039:    const size_t __len = __builtin_strlen(__s) + 1;
-40039:    char* __tmp = new char[__len];
-40039:    __builtin_memcpy(__tmp, __s, __len);
-40039:    _M_name_messages = __tmp;
-40039:  }
-40039:       else
-40039:  _M_name_messages = _S_get_c_name();
-40039: 
-40039: 
-40039:       _M_c_locale_messages = _S_clone_c_locale(__cloc);
-40039:     }
-40039: 
-40039:   template<typename _CharT>
-40039:     typename messages<_CharT>::catalog
-40039:     messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
-40039:       const char* __dir) const
-40039:     {
-40039:       bindtextdomain(__s.c_str(), __dir);
-40039:       return this->do_open(__s, __loc);
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     messages<_CharT>::~messages()
-40039:     {
-40039:       if (_M_name_messages != _S_get_c_name())
-40039:  delete [] _M_name_messages;
-40039:       _S_destroy_c_locale(_M_c_locale_messages);
-40039:     }
-40039: 
-40039:   template<typename _CharT>
-40039:     typename messages<_CharT>::catalog
-40039:     messages<_CharT>::do_open(const basic_string<char>& __s,
-40039:          const locale&) const
-40039:     {
-40039: 
-40039: 
-40039:       textdomain(__s.c_str());
-40039:       return 0;
-40039:     }
-40039: 
-40039:   template<typename _CharT>
-40039:     void
-40039:     messages<_CharT>::do_close(catalog) const
-40039:     { }
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
-40039:     : messages<_CharT>(__refs)
-40039:     {
-40039:       if (this->_M_name_messages != locale::facet::_S_get_c_name())
-40039:  {
-40039:    delete [] this->_M_name_messages;
-40039:    if (__builtin_strcmp(__s, locale::facet::_S_get_c_name()) != 0)
-40039:      {
-40039:        const size_t __len = __builtin_strlen(__s) + 1;
-40039:        char* __tmp = new char[__len];
-40039:        __builtin_memcpy(__tmp, __s, __len);
-40039:        this->_M_name_messages = __tmp;
-40039:      }
-40039:    else
-40039:      this->_M_name_messages = locale::facet::_S_get_c_name();
-40039:  }
-40039: 
-40039:       if (__builtin_strcmp(__s, "C") != 0
-40039:    && __builtin_strcmp(__s, "POSIX") != 0)
-40039:  {
-40039:    this->_S_destroy_c_locale(this->_M_c_locale_messages);
-40039:    this->_S_create_c_locale(this->_M_c_locale_messages, __s);
-40039:  }
-40039:     }
-40039: 
-40039: 
-40039:   template<>
-40039:     typename messages<char>::catalog
-40039:     messages<char>::do_open(const basic_string<char>&,
-40039:        const locale&) const;
-40039: 
-40039:   template<>
-40039:     void
-40039:     messages<char>::do_close(catalog) const;
-40039: 
-40039: 
-40039:   template<>
-40039:     typename messages<wchar_t>::catalog
-40039:     messages<wchar_t>::do_open(const basic_string<char>&,
-40039:           const locale&) const;
-40039: 
-40039:   template<>
-40039:     void
-40039:     messages<wchar_t>::do_close(catalog) const;
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 2011 "/usr/include/c++/8/bits/locale_facets_nonio.h" 2 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/codecvt.h" 1 3
-40039: # 39 "/usr/include/c++/8/bits/codecvt.h" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/bits/codecvt.h" 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039:   class codecvt_base
-40039:   {
-40039:   public:
-40039:     enum result
-40039:     {
-40039:       ok,
-40039:       partial,
-40039:       error,
-40039:       noconv
-40039:     };
-40039:   };
-40039: # 67 "/usr/include/c++/8/bits/codecvt.h" 3
-40039:   template<typename _InternT, typename _ExternT, typename _StateT>
-40039:     class __codecvt_abstract_base
-40039:     : public locale::facet, public codecvt_base
-40039:     {
-40039:     public:
-40039: 
-40039:       typedef codecvt_base::result result;
-40039:       typedef _InternT intern_type;
-40039:       typedef _ExternT extern_type;
-40039:       typedef _StateT state_type;
-40039: # 115 "/usr/include/c++/8/bits/codecvt.h" 3
-40039:       result
-40039:       out(state_type& __state, const intern_type* __from,
-40039:    const intern_type* __from_end, const intern_type*& __from_next,
-40039:    extern_type* __to, extern_type* __to_end,
-40039:    extern_type*& __to_next) const
-40039:       {
-40039:  return this->do_out(__state, __from, __from_end, __from_next,
-40039:        __to, __to_end, __to_next);
-40039:       }
-40039: # 154 "/usr/include/c++/8/bits/codecvt.h" 3
-40039:       result
-40039:       unshift(state_type& __state, extern_type* __to, extern_type* __to_end,
-40039:        extern_type*& __to_next) const
-40039:       { return this->do_unshift(__state, __to,__to_end,__to_next); }
-40039: # 195 "/usr/include/c++/8/bits/codecvt.h" 3
-40039:       result
-40039:       in(state_type& __state, const extern_type* __from,
-40039:   const extern_type* __from_end, const extern_type*& __from_next,
-40039:   intern_type* __to, intern_type* __to_end,
-40039:   intern_type*& __to_next) const
-40039:       {
-40039:  return this->do_in(__state, __from, __from_end, __from_next,
-40039:       __to, __to_end, __to_next);
-40039:       }
-40039: 
-40039:       int
-40039:       encoding() const throw()
-40039:       { return this->do_encoding(); }
-40039: 
-40039:       bool
-40039:       always_noconv() const throw()
-40039:       { return this->do_always_noconv(); }
-40039: 
-40039:       int
-40039:       length(state_type& __state, const extern_type* __from,
-40039:       const extern_type* __end, size_t __max) const
-40039:       { return this->do_length(__state, __from, __end, __max); }
-40039: 
-40039:       int
-40039:       max_length() const throw()
-40039:       { return this->do_max_length(); }
-40039: 
-40039:     protected:
-40039:       explicit
-40039:       __codecvt_abstract_base(size_t __refs = 0) : locale::facet(__refs) { }
-40039: 
-40039:       virtual
-40039:       ~__codecvt_abstract_base() { }
-40039: # 236 "/usr/include/c++/8/bits/codecvt.h" 3
-40039:       virtual result
-40039:       do_out(state_type& __state, const intern_type* __from,
-40039:       const intern_type* __from_end, const intern_type*& __from_next,
-40039:       extern_type* __to, extern_type* __to_end,
-40039:       extern_type*& __to_next) const = 0;
-40039: 
-40039:       virtual result
-40039:       do_unshift(state_type& __state, extern_type* __to,
-40039:    extern_type* __to_end, extern_type*& __to_next) const = 0;
-40039: 
-40039:       virtual result
-40039:       do_in(state_type& __state, const extern_type* __from,
-40039:      const extern_type* __from_end, const extern_type*& __from_next,
-40039:      intern_type* __to, intern_type* __to_end,
-40039:      intern_type*& __to_next) const = 0;
-40039: 
-40039:       virtual int
-40039:       do_encoding() const throw() = 0;
-40039: 
-40039:       virtual bool
-40039:       do_always_noconv() const throw() = 0;
-40039: 
-40039:       virtual int
-40039:       do_length(state_type&, const extern_type* __from,
-40039:   const extern_type* __end, size_t __max) const = 0;
-40039: 
-40039:       virtual int
-40039:       do_max_length() const throw() = 0;
-40039:     };
-40039: # 273 "/usr/include/c++/8/bits/codecvt.h" 3
-40039:    template<typename _InternT, typename _ExternT, typename _StateT>
-40039:     class codecvt
-40039:     : public __codecvt_abstract_base<_InternT, _ExternT, _StateT>
-40039:     {
-40039:     public:
-40039: 
-40039:       typedef codecvt_base::result result;
-40039:       typedef _InternT intern_type;
-40039:       typedef _ExternT extern_type;
-40039:       typedef _StateT state_type;
-40039: 
-40039:     protected:
-40039:       __c_locale _M_c_locale_codecvt;
-40039: 
-40039:     public:
-40039:       static locale::id id;
-40039: 
-40039:       explicit
-40039:       codecvt(size_t __refs = 0)
-40039:       : __codecvt_abstract_base<_InternT, _ExternT, _StateT> (__refs),
-40039:  _M_c_locale_codecvt(0)
-40039:       { }
-40039: 
-40039:       explicit
-40039:       codecvt(__c_locale __cloc, size_t __refs = 0);
-40039: 
-40039:     protected:
-40039:       virtual
-40039:       ~codecvt() { }
-40039: 
-40039:       virtual result
-40039:       do_out(state_type& __state, const intern_type* __from,
-40039:       const intern_type* __from_end, const intern_type*& __from_next,
-40039:       extern_type* __to, extern_type* __to_end,
-40039:       extern_type*& __to_next) const;
-40039: 
-40039:       virtual result
-40039:       do_unshift(state_type& __state, extern_type* __to,
-40039:    extern_type* __to_end, extern_type*& __to_next) const;
-40039: 
-40039:       virtual result
-40039:       do_in(state_type& __state, const extern_type* __from,
-40039:      const extern_type* __from_end, const extern_type*& __from_next,
-40039:      intern_type* __to, intern_type* __to_end,
-40039:      intern_type*& __to_next) const;
-40039: 
-40039:       virtual int
-40039:       do_encoding() const throw();
-40039: 
-40039:       virtual bool
-40039:       do_always_noconv() const throw();
-40039: 
-40039:       virtual int
-40039:       do_length(state_type&, const extern_type* __from,
-40039:   const extern_type* __end, size_t __max) const;
-40039: 
-40039:       virtual int
-40039:       do_max_length() const throw();
-40039:     };
-40039: 
-40039:   template<typename _InternT, typename _ExternT, typename _StateT>
-40039:     locale::id codecvt<_InternT, _ExternT, _StateT>::id;
-40039: 
-40039: 
-40039:   template<>
-40039:     class codecvt<char, char, mbstate_t>
-40039:     : public __codecvt_abstract_base<char, char, mbstate_t>
-40039:     {
-40039:       friend class messages<char>;
-40039: 
-40039:     public:
-40039: 
-40039:       typedef char intern_type;
-40039:       typedef char extern_type;
-40039:       typedef mbstate_t state_type;
-40039: 
-40039:     protected:
-40039:       __c_locale _M_c_locale_codecvt;
-40039: 
-40039:     public:
-40039:       static locale::id id;
-40039: 
-40039:       explicit
-40039:       codecvt(size_t __refs = 0);
-40039: 
-40039:       explicit
-40039:       codecvt(__c_locale __cloc, size_t __refs = 0);
-40039: 
-40039:     protected:
-40039:       virtual
-40039:       ~codecvt();
-40039: 
-40039:       virtual result
-40039:       do_out(state_type& __state, const intern_type* __from,
-40039:       const intern_type* __from_end, const intern_type*& __from_next,
-40039:       extern_type* __to, extern_type* __to_end,
-40039:       extern_type*& __to_next) const;
-40039: 
-40039:       virtual result
-40039:       do_unshift(state_type& __state, extern_type* __to,
-40039:    extern_type* __to_end, extern_type*& __to_next) const;
-40039: 
-40039:       virtual result
-40039:       do_in(state_type& __state, const extern_type* __from,
-40039:      const extern_type* __from_end, const extern_type*& __from_next,
-40039:      intern_type* __to, intern_type* __to_end,
-40039:      intern_type*& __to_next) const;
-40039: 
-40039:       virtual int
-40039:       do_encoding() const throw();
-40039: 
-40039:       virtual bool
-40039:       do_always_noconv() const throw();
-40039: 
-40039:       virtual int
-40039:       do_length(state_type&, const extern_type* __from,
-40039:   const extern_type* __end, size_t __max) const;
-40039: 
-40039:       virtual int
-40039:       do_max_length() const throw();
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<>
-40039:     class codecvt<wchar_t, char, mbstate_t>
-40039:     : public __codecvt_abstract_base<wchar_t, char, mbstate_t>
-40039:     {
-40039:       friend class messages<wchar_t>;
-40039: 
-40039:     public:
-40039: 
-40039:       typedef wchar_t intern_type;
-40039:       typedef char extern_type;
-40039:       typedef mbstate_t state_type;
-40039: 
-40039:     protected:
-40039:       __c_locale _M_c_locale_codecvt;
-40039: 
-40039:     public:
-40039:       static locale::id id;
-40039: 
-40039:       explicit
-40039:       codecvt(size_t __refs = 0);
-40039: 
-40039:       explicit
-40039:       codecvt(__c_locale __cloc, size_t __refs = 0);
-40039: 
-40039:     protected:
-40039:       virtual
-40039:       ~codecvt();
-40039: 
-40039:       virtual result
-40039:       do_out(state_type& __state, const intern_type* __from,
-40039:       const intern_type* __from_end, const intern_type*& __from_next,
-40039:       extern_type* __to, extern_type* __to_end,
-40039:       extern_type*& __to_next) const;
-40039: 
-40039:       virtual result
-40039:       do_unshift(state_type& __state,
-40039:    extern_type* __to, extern_type* __to_end,
-40039:    extern_type*& __to_next) const;
-40039: 
-40039:       virtual result
-40039:       do_in(state_type& __state,
-40039:       const extern_type* __from, const extern_type* __from_end,
-40039:       const extern_type*& __from_next,
-40039:       intern_type* __to, intern_type* __to_end,
-40039:       intern_type*& __to_next) const;
-40039: 
-40039:       virtual
-40039:       int do_encoding() const throw();
-40039: 
-40039:       virtual
-40039:       bool do_always_noconv() const throw();
-40039: 
-40039:       virtual
-40039:       int do_length(state_type&, const extern_type* __from,
-40039:       const extern_type* __end, size_t __max) const;
-40039: 
-40039:       virtual int
-40039:       do_max_length() const throw();
-40039:     };
-40039: # 467 "/usr/include/c++/8/bits/codecvt.h" 3
-40039:   template<>
-40039:     class codecvt<char16_t, char, mbstate_t>
-40039:     : public __codecvt_abstract_base<char16_t, char, mbstate_t>
-40039:     {
-40039:     public:
-40039: 
-40039:       typedef char16_t intern_type;
-40039:       typedef char extern_type;
-40039:       typedef mbstate_t state_type;
-40039: 
-40039:     public:
-40039:       static locale::id id;
-40039: 
-40039:       explicit
-40039:       codecvt(size_t __refs = 0)
-40039:       : __codecvt_abstract_base<char16_t, char, mbstate_t>(__refs) { }
-40039: 
-40039:     protected:
-40039:       virtual
-40039:       ~codecvt();
-40039: 
-40039:       virtual result
-40039:       do_out(state_type& __state, const intern_type* __from,
-40039:       const intern_type* __from_end, const intern_type*& __from_next,
-40039:       extern_type* __to, extern_type* __to_end,
-40039:       extern_type*& __to_next) const;
-40039: 
-40039:       virtual result
-40039:       do_unshift(state_type& __state,
-40039:    extern_type* __to, extern_type* __to_end,
-40039:    extern_type*& __to_next) const;
-40039: 
-40039:       virtual result
-40039:       do_in(state_type& __state,
-40039:       const extern_type* __from, const extern_type* __from_end,
-40039:       const extern_type*& __from_next,
-40039:       intern_type* __to, intern_type* __to_end,
-40039:       intern_type*& __to_next) const;
-40039: 
-40039:       virtual
-40039:       int do_encoding() const throw();
-40039: 
-40039:       virtual
-40039:       bool do_always_noconv() const throw();
-40039: 
-40039:       virtual
-40039:       int do_length(state_type&, const extern_type* __from,
-40039:       const extern_type* __end, size_t __max) const;
-40039: 
-40039:       virtual int
-40039:       do_max_length() const throw();
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<>
-40039:     class codecvt<char32_t, char, mbstate_t>
-40039:     : public __codecvt_abstract_base<char32_t, char, mbstate_t>
-40039:     {
-40039:     public:
-40039: 
-40039:       typedef char32_t intern_type;
-40039:       typedef char extern_type;
-40039:       typedef mbstate_t state_type;
-40039: 
-40039:     public:
-40039:       static locale::id id;
-40039: 
-40039:       explicit
-40039:       codecvt(size_t __refs = 0)
-40039:       : __codecvt_abstract_base<char32_t, char, mbstate_t>(__refs) { }
-40039: 
-40039:     protected:
-40039:       virtual
-40039:       ~codecvt();
-40039: 
-40039:       virtual result
-40039:       do_out(state_type& __state, const intern_type* __from,
-40039:       const intern_type* __from_end, const intern_type*& __from_next,
-40039:       extern_type* __to, extern_type* __to_end,
-40039:       extern_type*& __to_next) const;
-40039: 
-40039:       virtual result
-40039:       do_unshift(state_type& __state,
-40039:    extern_type* __to, extern_type* __to_end,
-40039:    extern_type*& __to_next) const;
-40039: 
-40039:       virtual result
-40039:       do_in(state_type& __state,
-40039:       const extern_type* __from, const extern_type* __from_end,
-40039:       const extern_type*& __from_next,
-40039:       intern_type* __to, intern_type* __to_end,
-40039:       intern_type*& __to_next) const;
-40039: 
-40039:       virtual
-40039:       int do_encoding() const throw();
-40039: 
-40039:       virtual
-40039:       bool do_always_noconv() const throw();
-40039: 
-40039:       virtual
-40039:       int do_length(state_type&, const extern_type* __from,
-40039:       const extern_type* __end, size_t __max) const;
-40039: 
-40039:       virtual int
-40039:       do_max_length() const throw();
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _InternT, typename _ExternT, typename _StateT>
-40039:     class codecvt_byname : public codecvt<_InternT, _ExternT, _StateT>
-40039:     {
-40039:     public:
-40039:       explicit
-40039:       codecvt_byname(const char* __s, size_t __refs = 0)
-40039:       : codecvt<_InternT, _ExternT, _StateT>(__refs)
-40039:       {
-40039:  if (__builtin_strcmp(__s, "C") != 0
-40039:      && __builtin_strcmp(__s, "POSIX") != 0)
-40039:    {
-40039:      this->_S_destroy_c_locale(this->_M_c_locale_codecvt);
-40039:      this->_S_create_c_locale(this->_M_c_locale_codecvt, __s);
-40039:    }
-40039:       }
-40039: 
-40039: 
-40039:       explicit
-40039:       codecvt_byname(const string& __s, size_t __refs = 0)
-40039:       : codecvt_byname(__s.c_str(), __refs) { }
-40039: 
-40039: 
-40039:     protected:
-40039:       virtual
-40039:       ~codecvt_byname() { }
-40039:     };
-40039: 
-40039: 
-40039:   template<>
-40039:     class codecvt_byname<char16_t, char, mbstate_t>
-40039:     : public codecvt<char16_t, char, mbstate_t>
-40039:     {
-40039:     public:
-40039:       explicit
-40039:       codecvt_byname(const char*, size_t __refs = 0)
-40039:       : codecvt<char16_t, char, mbstate_t>(__refs) { }
-40039: 
-40039:       explicit
-40039:       codecvt_byname(const string& __s, size_t __refs = 0)
-40039:       : codecvt_byname(__s.c_str(), __refs) { }
-40039: 
-40039:     protected:
-40039:       virtual
-40039:       ~codecvt_byname() { }
-40039:     };
-40039: 
-40039:   template<>
-40039:     class codecvt_byname<char32_t, char, mbstate_t>
-40039:     : public codecvt<char32_t, char, mbstate_t>
-40039:     {
-40039:     public:
-40039:       explicit
-40039:       codecvt_byname(const char*, size_t __refs = 0)
-40039:       : codecvt<char32_t, char, mbstate_t>(__refs) { }
-40039: 
-40039:       explicit
-40039:       codecvt_byname(const string& __s, size_t __refs = 0)
-40039:       : codecvt_byname(__s.c_str(), __refs) { }
-40039: 
-40039:     protected:
-40039:       virtual
-40039:       ~codecvt_byname() { }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   extern template class codecvt_byname<char, char, mbstate_t>;
-40039: 
-40039:   extern template
-40039:     const codecvt<char, char, mbstate_t>&
-40039:     use_facet<codecvt<char, char, mbstate_t> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<codecvt<char, char, mbstate_t> >(const locale&);
-40039: 
-40039: 
-40039:   extern template class codecvt_byname<wchar_t, char, mbstate_t>;
-40039: 
-40039:   extern template
-40039:     const codecvt<wchar_t, char, mbstate_t>&
-40039:     use_facet<codecvt<wchar_t, char, mbstate_t> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<codecvt<wchar_t, char, mbstate_t> >(const locale&);
-40039: 
-40039: 
-40039: 
-40039:   extern template class codecvt_byname<char16_t, char, mbstate_t>;
-40039:   extern template class codecvt_byname<char32_t, char, mbstate_t>;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 2014 "/usr/include/c++/8/bits/locale_facets_nonio.h" 2 3
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/locale_facets_nonio.tcc" 1 3
-40039: # 33 "/usr/include/c++/8/bits/locale_facets_nonio.tcc" 3
-40039:        
-40039: # 34 "/usr/include/c++/8/bits/locale_facets_nonio.tcc" 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   template<typename _CharT, bool _Intl>
-40039:     struct __use_cache<__moneypunct_cache<_CharT, _Intl> >
-40039:     {
-40039:       const __moneypunct_cache<_CharT, _Intl>*
-40039:       operator() (const locale& __loc) const
-40039:       {
-40039:  const size_t __i = moneypunct<_CharT, _Intl>::id._M_id();
-40039:  const locale::facet** __caches = __loc._M_impl->_M_caches;
-40039:  if (!__caches[__i])
-40039:    {
-40039:      __moneypunct_cache<_CharT, _Intl>* __tmp = 0;
-40039:      try
-40039:        {
-40039:   __tmp = new __moneypunct_cache<_CharT, _Intl>;
-40039:   __tmp->_M_cache(__loc);
-40039:        }
-40039:      catch(...)
-40039:        {
-40039:   delete __tmp;
-40039:   throw;
-40039:        }
-40039:      __loc._M_impl->_M_install_cache(__tmp, __i);
-40039:    }
-40039:  return static_cast<
-40039:    const __moneypunct_cache<_CharT, _Intl>*>(__caches[__i]);
-40039:       }
-40039:     };
-40039: 
-40039:   template<typename _CharT, bool _Intl>
-40039:     void
-40039:     __moneypunct_cache<_CharT, _Intl>::_M_cache(const locale& __loc)
-40039:     {
-40039:       const moneypunct<_CharT, _Intl>& __mp =
-40039:  use_facet<moneypunct<_CharT, _Intl> >(__loc);
-40039: 
-40039:       _M_decimal_point = __mp.decimal_point();
-40039:       _M_thousands_sep = __mp.thousands_sep();
-40039:       _M_frac_digits = __mp.frac_digits();
-40039: 
-40039:       char* __grouping = 0;
-40039:       _CharT* __curr_symbol = 0;
-40039:       _CharT* __positive_sign = 0;
-40039:       _CharT* __negative_sign = 0;
-40039:       try
-40039:  {
-40039:    const string& __g = __mp.grouping();
-40039:    _M_grouping_size = __g.size();
-40039:    __grouping = new char[_M_grouping_size];
-40039:    __g.copy(__grouping, _M_grouping_size);
-40039:    _M_use_grouping = (_M_grouping_size
-40039:         && static_cast<signed char>(__grouping[0]) > 0
-40039:         && (__grouping[0]
-40039:      != __gnu_cxx::__numeric_traits<char>::__max));
-40039: 
-40039:    const basic_string<_CharT>& __cs = __mp.curr_symbol();
-40039:    _M_curr_symbol_size = __cs.size();
-40039:    __curr_symbol = new _CharT[_M_curr_symbol_size];
-40039:    __cs.copy(__curr_symbol, _M_curr_symbol_size);
-40039: 
-40039:    const basic_string<_CharT>& __ps = __mp.positive_sign();
-40039:    _M_positive_sign_size = __ps.size();
-40039:    __positive_sign = new _CharT[_M_positive_sign_size];
-40039:    __ps.copy(__positive_sign, _M_positive_sign_size);
-40039: 
-40039:    const basic_string<_CharT>& __ns = __mp.negative_sign();
-40039:    _M_negative_sign_size = __ns.size();
-40039:    __negative_sign = new _CharT[_M_negative_sign_size];
-40039:    __ns.copy(__negative_sign, _M_negative_sign_size);
-40039: 
-40039:    _M_pos_format = __mp.pos_format();
-40039:    _M_neg_format = __mp.neg_format();
-40039: 
-40039:    const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__loc);
-40039:    __ct.widen(money_base::_S_atoms,
-40039:        money_base::_S_atoms + money_base::_S_end, _M_atoms);
-40039: 
-40039:    _M_grouping = __grouping;
-40039:    _M_curr_symbol = __curr_symbol;
-40039:    _M_positive_sign = __positive_sign;
-40039:    _M_negative_sign = __negative_sign;
-40039:    _M_allocated = true;
-40039:  }
-40039:       catch(...)
-40039:  {
-40039:    delete [] __grouping;
-40039:    delete [] __curr_symbol;
-40039:    delete [] __positive_sign;
-40039:    delete [] __negative_sign;
-40039:    throw;
-40039:  }
-40039:     }
-40039: 
-40039: namespace __cxx11 {
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     template<bool _Intl>
-40039:       _InIter
-40039:       money_get<_CharT, _InIter>::
-40039:       _M_extract(iter_type __beg, iter_type __end, ios_base& __io,
-40039:    ios_base::iostate& __err, string& __units) const
-40039:       {
-40039:  typedef char_traits<_CharT> __traits_type;
-40039:  typedef typename string_type::size_type size_type;
-40039:  typedef money_base::part part;
-40039:  typedef __moneypunct_cache<_CharT, _Intl> __cache_type;
-40039: 
-40039:  const locale& __loc = __io._M_getloc();
-40039:  const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
-40039: 
-40039:  __use_cache<__cache_type> __uc;
-40039:  const __cache_type* __lc = __uc(__loc);
-40039:  const char_type* __lit = __lc->_M_atoms;
-40039: 
-40039: 
-40039:  bool __negative = false;
-40039: 
-40039:  size_type __sign_size = 0;
-40039: 
-40039:  const bool __mandatory_sign = (__lc->_M_positive_sign_size
-40039:            && __lc->_M_negative_sign_size);
-40039: 
-40039:  string __grouping_tmp;
-40039:  if (__lc->_M_use_grouping)
-40039:    __grouping_tmp.reserve(32);
-40039: 
-40039:  int __last_pos = 0;
-40039: 
-40039:  int __n = 0;
-40039: 
-40039:  bool __testvalid = true;
-40039: 
-40039:  bool __testdecfound = false;
-40039: 
-40039: 
-40039:  string __res;
-40039:  __res.reserve(32);
-40039: 
-40039:  const char_type* __lit_zero = __lit + money_base::_S_zero;
-40039:  const money_base::pattern __p = __lc->_M_neg_format;
-40039:  for (int __i = 0; __i < 4 && __testvalid; ++__i)
-40039:    {
-40039:      const part __which = static_cast<part>(__p.field[__i]);
-40039:      switch (__which)
-40039:        {
-40039:        case money_base::symbol:
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (__io.flags() & ios_base::showbase || __sign_size > 1
-40039:       || __i == 0
-40039:       || (__i == 1 && (__mandatory_sign
-40039:          || (static_cast<part>(__p.field[0])
-40039:       == money_base::sign)
-40039:          || (static_cast<part>(__p.field[2])
-40039:       == money_base::space)))
-40039:       || (__i == 2 && ((static_cast<part>(__p.field[3])
-40039:           == money_base::value)
-40039:          || (__mandatory_sign
-40039:       && (static_cast<part>(__p.field[3])
-40039:           == money_base::sign)))))
-40039:     {
-40039:       const size_type __len = __lc->_M_curr_symbol_size;
-40039:       size_type __j = 0;
-40039:       for (; __beg != __end && __j < __len
-40039:       && *__beg == __lc->_M_curr_symbol[__j];
-40039:     ++__beg, (void)++__j);
-40039:       if (__j != __len
-40039:    && (__j || __io.flags() & ios_base::showbase))
-40039:         __testvalid = false;
-40039:     }
-40039:   break;
-40039:        case money_base::sign:
-40039: 
-40039:   if (__lc->_M_positive_sign_size && __beg != __end
-40039:       && *__beg == __lc->_M_positive_sign[0])
-40039:     {
-40039:       __sign_size = __lc->_M_positive_sign_size;
-40039:       ++__beg;
-40039:     }
-40039:   else if (__lc->_M_negative_sign_size && __beg != __end
-40039:     && *__beg == __lc->_M_negative_sign[0])
-40039:     {
-40039:       __negative = true;
-40039:       __sign_size = __lc->_M_negative_sign_size;
-40039:       ++__beg;
-40039:     }
-40039:   else if (__lc->_M_positive_sign_size
-40039:     && !__lc->_M_negative_sign_size)
-40039: 
-40039: 
-40039:     __negative = true;
-40039:   else if (__mandatory_sign)
-40039:     __testvalid = false;
-40039:   break;
-40039:        case money_base::value:
-40039: 
-40039: 
-40039:   for (; __beg != __end; ++__beg)
-40039:     {
-40039:       const char_type __c = *__beg;
-40039:       const char_type* __q = __traits_type::find(__lit_zero,
-40039:               10, __c);
-40039:       if (__q != 0)
-40039:         {
-40039:    __res += money_base::_S_atoms[__q - __lit];
-40039:    ++__n;
-40039:         }
-40039:       else if (__c == __lc->_M_decimal_point
-40039:         && !__testdecfound)
-40039:         {
-40039:    if (__lc->_M_frac_digits <= 0)
-40039:      break;
-40039: 
-40039:    __last_pos = __n;
-40039:    __n = 0;
-40039:    __testdecfound = true;
-40039:         }
-40039:       else if (__lc->_M_use_grouping
-40039:         && __c == __lc->_M_thousands_sep
-40039:         && !__testdecfound)
-40039:         {
-40039:    if (__n)
-40039:      {
-40039: 
-40039:        __grouping_tmp += static_cast<char>(__n);
-40039:        __n = 0;
-40039:      }
-40039:    else
-40039:      {
-40039:        __testvalid = false;
-40039:        break;
-40039:      }
-40039:         }
-40039:       else
-40039:         break;
-40039:     }
-40039:   if (__res.empty())
-40039:     __testvalid = false;
-40039:   break;
-40039:        case money_base::space:
-40039: 
-40039:   if (__beg != __end && __ctype.is(ctype_base::space, *__beg))
-40039:     ++__beg;
-40039:   else
-40039:     __testvalid = false;
-40039: 
-40039:        case money_base::none:
-40039: 
-40039:   if (__i != 3)
-40039:     for (; __beg != __end
-40039:     && __ctype.is(ctype_base::space, *__beg); ++__beg);
-40039:   break;
-40039:        }
-40039:    }
-40039: 
-40039: 
-40039:  if (__sign_size > 1 && __testvalid)
-40039:    {
-40039:      const char_type* __sign = __negative ? __lc->_M_negative_sign
-40039:                                           : __lc->_M_positive_sign;
-40039:      size_type __i = 1;
-40039:      for (; __beg != __end && __i < __sign_size
-40039:      && *__beg == __sign[__i]; ++__beg, (void)++__i);
-40039: 
-40039:      if (__i != __sign_size)
-40039:        __testvalid = false;
-40039:    }
-40039: 
-40039:  if (__testvalid)
-40039:    {
-40039: 
-40039:      if (__res.size() > 1)
-40039:        {
-40039:   const size_type __first = __res.find_first_not_of('0');
-40039:   const bool __only_zeros = __first == string::npos;
-40039:   if (__first)
-40039:     __res.erase(0, __only_zeros ? __res.size() - 1 : __first);
-40039:        }
-40039: 
-40039: 
-40039:      if (__negative && __res[0] != '0')
-40039:        __res.insert(__res.begin(), '-');
-40039: 
-40039: 
-40039:      if (__grouping_tmp.size())
-40039:        {
-40039: 
-40039:   __grouping_tmp += static_cast<char>(__testdecfound ? __last_pos
-40039:                          : __n);
-40039:   if (!std::__verify_grouping(__lc->_M_grouping,
-40039:          __lc->_M_grouping_size,
-40039:          __grouping_tmp))
-40039:     __err |= ios_base::failbit;
-40039:        }
-40039: 
-40039: 
-40039:      if (__testdecfound && __n != __lc->_M_frac_digits)
-40039:        __testvalid = false;
-40039:    }
-40039: 
-40039: 
-40039:  if (!__testvalid)
-40039:    __err |= ios_base::failbit;
-40039:  else
-40039:    __units.swap(__res);
-40039: 
-40039: 
-40039:  if (__beg == __end)
-40039:    __err |= ios_base::eofbit;
-40039:  return __beg;
-40039:       }
-40039: # 368 "/usr/include/c++/8/bits/locale_facets_nonio.tcc" 3
-40039:   template<typename _CharT, typename _InIter>
-40039:     _InIter
-40039:     money_get<_CharT, _InIter>::
-40039:     do_get(iter_type __beg, iter_type __end, bool __intl, ios_base& __io,
-40039:     ios_base::iostate& __err, long double& __units) const
-40039:     {
-40039:       string __str;
-40039:       __beg = __intl ? _M_extract<true>(__beg, __end, __io, __err, __str)
-40039:               : _M_extract<false>(__beg, __end, __io, __err, __str);
-40039:       std::__convert_to_v(__str.c_str(), __units, __err, _S_get_c_locale());
-40039:       return __beg;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     _InIter
-40039:     money_get<_CharT, _InIter>::
-40039:     do_get(iter_type __beg, iter_type __end, bool __intl, ios_base& __io,
-40039:     ios_base::iostate& __err, string_type& __digits) const
-40039:     {
-40039:       typedef typename string::size_type size_type;
-40039: 
-40039:       const locale& __loc = __io._M_getloc();
-40039:       const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
-40039: 
-40039:       string __str;
-40039:       __beg = __intl ? _M_extract<true>(__beg, __end, __io, __err, __str)
-40039:               : _M_extract<false>(__beg, __end, __io, __err, __str);
-40039:       const size_type __len = __str.size();
-40039:       if (__len)
-40039:  {
-40039:    __digits.resize(__len);
-40039:    __ctype.widen(__str.data(), __str.data() + __len, &__digits[0]);
-40039:  }
-40039:       return __beg;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _OutIter>
-40039:     template<bool _Intl>
-40039:       _OutIter
-40039:       money_put<_CharT, _OutIter>::
-40039:       _M_insert(iter_type __s, ios_base& __io, char_type __fill,
-40039:   const string_type& __digits) const
-40039:       {
-40039:  typedef typename string_type::size_type size_type;
-40039:  typedef money_base::part part;
-40039:  typedef __moneypunct_cache<_CharT, _Intl> __cache_type;
-40039: 
-40039:  const locale& __loc = __io._M_getloc();
-40039:  const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
-40039: 
-40039:  __use_cache<__cache_type> __uc;
-40039:  const __cache_type* __lc = __uc(__loc);
-40039:  const char_type* __lit = __lc->_M_atoms;
-40039: 
-40039: 
-40039: 
-40039:  const char_type* __beg = __digits.data();
-40039: 
-40039:  money_base::pattern __p;
-40039:  const char_type* __sign;
-40039:  size_type __sign_size;
-40039:  if (!(*__beg == __lit[money_base::_S_minus]))
-40039:    {
-40039:      __p = __lc->_M_pos_format;
-40039:      __sign = __lc->_M_positive_sign;
-40039:      __sign_size = __lc->_M_positive_sign_size;
-40039:    }
-40039:  else
-40039:    {
-40039:      __p = __lc->_M_neg_format;
-40039:      __sign = __lc->_M_negative_sign;
-40039:      __sign_size = __lc->_M_negative_sign_size;
-40039:      if (__digits.size())
-40039:        ++__beg;
-40039:    }
-40039: 
-40039: 
-40039:  size_type __len = __ctype.scan_not(ctype_base::digit, __beg,
-40039:         __beg + __digits.size()) - __beg;
-40039:  if (__len)
-40039:    {
-40039: 
-40039: 
-40039: 
-40039:      string_type __value;
-40039:      __value.reserve(2 * __len);
-40039: 
-40039: 
-40039: 
-40039:      long __paddec = __len - __lc->_M_frac_digits;
-40039:      if (__paddec > 0)
-40039:          {
-40039:   if (__lc->_M_frac_digits < 0)
-40039:     __paddec = __len;
-40039:     if (__lc->_M_grouping_size)
-40039:       {
-40039:       __value.assign(2 * __paddec, char_type());
-40039:        _CharT* __vend =
-40039:         std::__add_grouping(&__value[0], __lc->_M_thousands_sep,
-40039:        __lc->_M_grouping,
-40039:        __lc->_M_grouping_size,
-40039:        __beg, __beg + __paddec);
-40039:       __value.erase(__vend - &__value[0]);
-40039:       }
-40039:     else
-40039:     __value.assign(__beg, __paddec);
-40039:        }
-40039: 
-40039: 
-40039:      if (__lc->_M_frac_digits > 0)
-40039:        {
-40039:   __value += __lc->_M_decimal_point;
-40039:   if (__paddec >= 0)
-40039:     __value.append(__beg + __paddec, __lc->_M_frac_digits);
-40039:   else
-40039:     {
-40039: 
-40039:       __value.append(-__paddec, __lit[money_base::_S_zero]);
-40039:       __value.append(__beg, __len);
-40039:     }
-40039:          }
-40039: 
-40039: 
-40039:      const ios_base::fmtflags __f = __io.flags()
-40039:                                     & ios_base::adjustfield;
-40039:      __len = __value.size() + __sign_size;
-40039:      __len += ((__io.flags() & ios_base::showbase)
-40039:         ? __lc->_M_curr_symbol_size : 0);
-40039: 
-40039:      string_type __res;
-40039:      __res.reserve(2 * __len);
-40039: 
-40039:      const size_type __width = static_cast<size_type>(__io.width());
-40039:      const bool __testipad = (__f == ios_base::internal
-40039:          && __len < __width);
-40039: 
-40039:      for (int __i = 0; __i < 4; ++__i)
-40039:        {
-40039:   const part __which = static_cast<part>(__p.field[__i]);
-40039:   switch (__which)
-40039:     {
-40039:     case money_base::symbol:
-40039:       if (__io.flags() & ios_base::showbase)
-40039:         __res.append(__lc->_M_curr_symbol,
-40039:        __lc->_M_curr_symbol_size);
-40039:       break;
-40039:     case money_base::sign:
-40039: 
-40039: 
-40039: 
-40039:       if (__sign_size)
-40039:         __res += __sign[0];
-40039:       break;
-40039:     case money_base::value:
-40039:       __res += __value;
-40039:       break;
-40039:     case money_base::space:
-40039: 
-40039: 
-40039: 
-40039:       if (__testipad)
-40039:         __res.append(__width - __len, __fill);
-40039:       else
-40039:         __res += __fill;
-40039:       break;
-40039:     case money_base::none:
-40039:       if (__testipad)
-40039:         __res.append(__width - __len, __fill);
-40039:       break;
-40039:     }
-40039:        }
-40039: 
-40039: 
-40039:      if (__sign_size > 1)
-40039:        __res.append(__sign + 1, __sign_size - 1);
-40039: 
-40039: 
-40039:      __len = __res.size();
-40039:      if (__width > __len)
-40039:        {
-40039:   if (__f == ios_base::left)
-40039: 
-40039:     __res.append(__width - __len, __fill);
-40039:   else
-40039: 
-40039:     __res.insert(0, __width - __len, __fill);
-40039:   __len = __width;
-40039:        }
-40039: 
-40039: 
-40039:      __s = std::__write(__s, __res.data(), __len);
-40039:    }
-40039:  __io.width(0);
-40039:  return __s;
-40039:       }
-40039: # 574 "/usr/include/c++/8/bits/locale_facets_nonio.tcc" 3
-40039:   template<typename _CharT, typename _OutIter>
-40039:     _OutIter
-40039:     money_put<_CharT, _OutIter>::
-40039:     do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
-40039:     long double __units) const
-40039:     {
-40039:       const locale __loc = __io.getloc();
-40039:       const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
-40039: 
-40039: 
-40039:       int __cs_size = 64;
-40039:       char* __cs = static_cast<char*>(__builtin_alloca(__cs_size));
-40039: 
-40039: 
-40039:       int __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
-40039:      "%.*Lf", 0, __units);
-40039: 
-40039:       if (__len >= __cs_size)
-40039:  {
-40039:    __cs_size = __len + 1;
-40039:    __cs = static_cast<char*>(__builtin_alloca(__cs_size));
-40039:    __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
-40039:      "%.*Lf", 0, __units);
-40039:  }
-40039: # 606 "/usr/include/c++/8/bits/locale_facets_nonio.tcc" 3
-40039:       string_type __digits(__len, char_type());
-40039:       __ctype.widen(__cs, __cs + __len, &__digits[0]);
-40039:       return __intl ? _M_insert<true>(__s, __io, __fill, __digits)
-40039:              : _M_insert<false>(__s, __io, __fill, __digits);
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _OutIter>
-40039:     _OutIter
-40039:     money_put<_CharT, _OutIter>::
-40039:     do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
-40039:     const string_type& __digits) const
-40039:     { return __intl ? _M_insert<true>(__s, __io, __fill, __digits)
-40039:              : _M_insert<false>(__s, __io, __fill, __digits); }
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     time_base::dateorder
-40039:     time_get<_CharT, _InIter>::do_date_order() const
-40039:     { return time_base::no_order; }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     _InIter
-40039:     time_get<_CharT, _InIter>::
-40039:     _M_extract_via_format(iter_type __beg, iter_type __end, ios_base& __io,
-40039:      ios_base::iostate& __err, tm* __tm,
-40039:      const _CharT* __format) const
-40039:     {
-40039:       const locale& __loc = __io._M_getloc();
-40039:       const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc);
-40039:       const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
-40039:       const size_t __len = char_traits<_CharT>::length(__format);
-40039: 
-40039:       ios_base::iostate __tmperr = ios_base::goodbit;
-40039:       size_t __i = 0;
-40039:       for (; __beg != __end && __i < __len && !__tmperr; ++__i)
-40039:  {
-40039:    if (__ctype.narrow(__format[__i], 0) == '%')
-40039:      {
-40039: 
-40039:        char __c = __ctype.narrow(__format[++__i], 0);
-40039:        int __mem = 0;
-40039:        if (__c == 'E' || __c == 'O')
-40039:   __c = __ctype.narrow(__format[++__i], 0);
-40039:        switch (__c)
-40039:   {
-40039:     const char* __cs;
-40039:     _CharT __wcs[10];
-40039:   case 'a':
-40039: 
-40039:     const char_type* __days1[7];
-40039:     __tp._M_days_abbreviated(__days1);
-40039:     __beg = _M_extract_name(__beg, __end, __mem, __days1,
-40039:        7, __io, __tmperr);
-40039:     if (!__tmperr)
-40039:       __tm->tm_wday = __mem;
-40039:     break;
-40039:   case 'A':
-40039: 
-40039:     const char_type* __days2[7];
-40039:     __tp._M_days(__days2);
-40039:     __beg = _M_extract_name(__beg, __end, __mem, __days2,
-40039:        7, __io, __tmperr);
-40039:     if (!__tmperr)
-40039:       __tm->tm_wday = __mem;
-40039:     break;
-40039:   case 'h':
-40039:   case 'b':
-40039: 
-40039:     const char_type* __months1[12];
-40039:     __tp._M_months_abbreviated(__months1);
-40039:     __beg = _M_extract_name(__beg, __end, __mem,
-40039:        __months1, 12, __io, __tmperr);
-40039:     if (!__tmperr)
-40039:       __tm->tm_mon = __mem;
-40039:     break;
-40039:   case 'B':
-40039: 
-40039:     const char_type* __months2[12];
-40039:     __tp._M_months(__months2);
-40039:     __beg = _M_extract_name(__beg, __end, __mem,
-40039:        __months2, 12, __io, __tmperr);
-40039:     if (!__tmperr)
-40039:       __tm->tm_mon = __mem;
-40039:     break;
-40039:   case 'c':
-40039: 
-40039:     const char_type* __dt[2];
-40039:     __tp._M_date_time_formats(__dt);
-40039:     __beg = _M_extract_via_format(__beg, __end, __io, __tmperr,
-40039:       __tm, __dt[0]);
-40039:     break;
-40039:   case 'd':
-40039: 
-40039:     __beg = _M_extract_num(__beg, __end, __mem, 1, 31, 2,
-40039:       __io, __tmperr);
-40039:     if (!__tmperr)
-40039:       __tm->tm_mday = __mem;
-40039:     break;
-40039:   case 'e':
-40039: 
-40039: 
-40039:     if (__ctype.is(ctype_base::space, *__beg))
-40039:       __beg = _M_extract_num(++__beg, __end, __mem, 1, 9,
-40039:         1, __io, __tmperr);
-40039:     else
-40039:       __beg = _M_extract_num(__beg, __end, __mem, 10, 31,
-40039:         2, __io, __tmperr);
-40039:     if (!__tmperr)
-40039:       __tm->tm_mday = __mem;
-40039:     break;
-40039:   case 'D':
-40039: 
-40039:     __cs = "%m/%d/%y";
-40039:     __ctype.widen(__cs, __cs + 9, __wcs);
-40039:     __beg = _M_extract_via_format(__beg, __end, __io, __tmperr,
-40039:       __tm, __wcs);
-40039:     break;
-40039:   case 'H':
-40039: 
-40039:     __beg = _M_extract_num(__beg, __end, __mem, 0, 23, 2,
-40039:       __io, __tmperr);
-40039:     if (!__tmperr)
-40039:       __tm->tm_hour = __mem;
-40039:     break;
-40039:   case 'I':
-40039: 
-40039:     __beg = _M_extract_num(__beg, __end, __mem, 1, 12, 2,
-40039:       __io, __tmperr);
-40039:     if (!__tmperr)
-40039:       __tm->tm_hour = __mem;
-40039:     break;
-40039:   case 'm':
-40039: 
-40039:     __beg = _M_extract_num(__beg, __end, __mem, 1, 12, 2,
-40039:       __io, __tmperr);
-40039:     if (!__tmperr)
-40039:       __tm->tm_mon = __mem - 1;
-40039:     break;
-40039:   case 'M':
-40039: 
-40039:     __beg = _M_extract_num(__beg, __end, __mem, 0, 59, 2,
-40039:       __io, __tmperr);
-40039:     if (!__tmperr)
-40039:       __tm->tm_min = __mem;
-40039:     break;
-40039:   case 'n':
-40039:     if (__ctype.narrow(*__beg, 0) == '\n')
-40039:       ++__beg;
-40039:     else
-40039:       __tmperr |= ios_base::failbit;
-40039:     break;
-40039:   case 'R':
-40039: 
-40039:     __cs = "%H:%M";
-40039:     __ctype.widen(__cs, __cs + 6, __wcs);
-40039:     __beg = _M_extract_via_format(__beg, __end, __io, __tmperr,
-40039:       __tm, __wcs);
-40039:     break;
-40039:   case 'S':
-40039: 
-40039: 
-40039: 
-40039:     __beg = _M_extract_num(__beg, __end, __mem, 0, 60, 2,
-40039: 
-40039: 
-40039: 
-40039:       __io, __tmperr);
-40039:     if (!__tmperr)
-40039:     __tm->tm_sec = __mem;
-40039:     break;
-40039:   case 't':
-40039:     if (__ctype.narrow(*__beg, 0) == '\t')
-40039:       ++__beg;
-40039:     else
-40039:       __tmperr |= ios_base::failbit;
-40039:     break;
-40039:   case 'T':
-40039: 
-40039:     __cs = "%H:%M:%S";
-40039:     __ctype.widen(__cs, __cs + 9, __wcs);
-40039:     __beg = _M_extract_via_format(__beg, __end, __io, __tmperr,
-40039:       __tm, __wcs);
-40039:     break;
-40039:   case 'x':
-40039: 
-40039:     const char_type* __dates[2];
-40039:     __tp._M_date_formats(__dates);
-40039:     __beg = _M_extract_via_format(__beg, __end, __io, __tmperr,
-40039:       __tm, __dates[0]);
-40039:     break;
-40039:   case 'X':
-40039: 
-40039:     const char_type* __times[2];
-40039:     __tp._M_time_formats(__times);
-40039:     __beg = _M_extract_via_format(__beg, __end, __io, __tmperr,
-40039:       __tm, __times[0]);
-40039:     break;
-40039:   case 'y':
-40039:   case 'C':
-40039: 
-40039:   case 'Y':
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     __beg = _M_extract_num(__beg, __end, __mem, 0, 9999, 4,
-40039:       __io, __tmperr);
-40039:     if (!__tmperr)
-40039:       __tm->tm_year = __mem < 0 ? __mem + 100 : __mem - 1900;
-40039:     break;
-40039:   case 'Z':
-40039: 
-40039:     if (__ctype.is(ctype_base::upper, *__beg))
-40039:       {
-40039:         int __tmp;
-40039:         __beg = _M_extract_name(__beg, __end, __tmp,
-40039:            __timepunct_cache<_CharT>::_S_timezones,
-40039:            14, __io, __tmperr);
-40039: 
-40039: 
-40039:         if (__beg != __end && !__tmperr && __tmp == 0
-40039:      && (*__beg == __ctype.widen('-')
-40039:          || *__beg == __ctype.widen('+')))
-40039:    {
-40039:      __beg = _M_extract_num(__beg, __end, __tmp, 0, 23, 2,
-40039:        __io, __tmperr);
-40039:      __beg = _M_extract_num(__beg, __end, __tmp, 0, 59, 2,
-40039:        __io, __tmperr);
-40039:    }
-40039:       }
-40039:     else
-40039:       __tmperr |= ios_base::failbit;
-40039:     break;
-40039:   default:
-40039: 
-40039:     __tmperr |= ios_base::failbit;
-40039:   }
-40039:      }
-40039:    else
-40039:      {
-40039: 
-40039:        if (__format[__i] == *__beg)
-40039:   ++__beg;
-40039:        else
-40039:   __tmperr |= ios_base::failbit;
-40039:      }
-40039:  }
-40039: 
-40039:       if (__tmperr || __i != __len)
-40039:  __err |= ios_base::failbit;
-40039: 
-40039:       return __beg;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     _InIter
-40039:     time_get<_CharT, _InIter>::
-40039:     _M_extract_num(iter_type __beg, iter_type __end, int& __member,
-40039:      int __min, int __max, size_t __len,
-40039:      ios_base& __io, ios_base::iostate& __err) const
-40039:     {
-40039:       const locale& __loc = __io._M_getloc();
-40039:       const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
-40039: 
-40039: 
-40039:       int __mult = __len == 2 ? 10 : (__len == 4 ? 1000 : 1);
-40039: 
-40039:       ++__min;
-40039:       size_t __i = 0;
-40039:       int __value = 0;
-40039:       for (; __beg != __end && __i < __len; ++__beg, (void)++__i)
-40039:  {
-40039:    const char __c = __ctype.narrow(*__beg, '*');
-40039:    if (__c >= '0' && __c <= '9')
-40039:      {
-40039:        __value = __value * 10 + (__c - '0');
-40039:        const int __valuec = __value * __mult;
-40039:        if (__valuec > __max || __valuec + __mult < __min)
-40039:   break;
-40039:        __mult /= 10;
-40039:      }
-40039:    else
-40039:      break;
-40039:  }
-40039:       if (__i == __len)
-40039:  __member = __value;
-40039: 
-40039:       else if (__len == 4 && __i == 2)
-40039:  __member = __value - 100;
-40039:       else
-40039:  __err |= ios_base::failbit;
-40039: 
-40039:       return __beg;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     _InIter
-40039:     time_get<_CharT, _InIter>::
-40039:     _M_extract_name(iter_type __beg, iter_type __end, int& __member,
-40039:       const _CharT** __names, size_t __indexlen,
-40039:       ios_base& __io, ios_base::iostate& __err) const
-40039:     {
-40039:       typedef char_traits<_CharT> __traits_type;
-40039:       const locale& __loc = __io._M_getloc();
-40039:       const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
-40039: 
-40039:       int* __matches = static_cast<int*>(__builtin_alloca(sizeof(int)
-40039:          * __indexlen));
-40039:       size_t __nmatches = 0;
-40039:       size_t __pos = 0;
-40039:       bool __testvalid = true;
-40039:       const char_type* __name;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       if (__beg != __end)
-40039:  {
-40039:    const char_type __c = *__beg;
-40039:    for (size_t __i1 = 0; __i1 < __indexlen; ++__i1)
-40039:      if (__c == __names[__i1][0]
-40039:   || __c == __ctype.toupper(__names[__i1][0]))
-40039:        __matches[__nmatches++] = __i1;
-40039:  }
-40039: 
-40039:       while (__nmatches > 1)
-40039:  {
-40039: 
-40039:    size_t __minlen = __traits_type::length(__names[__matches[0]]);
-40039:    for (size_t __i2 = 1; __i2 < __nmatches; ++__i2)
-40039:      __minlen = std::min(__minlen,
-40039:          __traits_type::length(__names[__matches[__i2]]));
-40039:    ++__beg;
-40039:    ++__pos;
-40039:    if (__pos < __minlen && __beg != __end)
-40039:      for (size_t __i3 = 0; __i3 < __nmatches;)
-40039:        {
-40039:   __name = __names[__matches[__i3]];
-40039:   if (!(__name[__pos] == *__beg))
-40039:     __matches[__i3] = __matches[--__nmatches];
-40039:   else
-40039:     ++__i3;
-40039:        }
-40039:    else
-40039:      break;
-40039:  }
-40039: 
-40039:       if (__nmatches == 1)
-40039:  {
-40039: 
-40039:    ++__beg;
-40039:    ++__pos;
-40039:    __name = __names[__matches[0]];
-40039:    const size_t __len = __traits_type::length(__name);
-40039:    while (__pos < __len && __beg != __end && __name[__pos] == *__beg)
-40039:      ++__beg, (void)++__pos;
-40039: 
-40039:    if (__len == __pos)
-40039:      __member = __matches[0];
-40039:    else
-40039:      __testvalid = false;
-40039:  }
-40039:       else
-40039:  __testvalid = false;
-40039:       if (!__testvalid)
-40039:  __err |= ios_base::failbit;
-40039: 
-40039:       return __beg;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     _InIter
-40039:     time_get<_CharT, _InIter>::
-40039:     _M_extract_wday_or_month(iter_type __beg, iter_type __end, int& __member,
-40039:         const _CharT** __names, size_t __indexlen,
-40039:         ios_base& __io, ios_base::iostate& __err) const
-40039:     {
-40039:       typedef char_traits<_CharT> __traits_type;
-40039:       const locale& __loc = __io._M_getloc();
-40039:       const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
-40039: 
-40039:       int* __matches = static_cast<int*>(__builtin_alloca(2 * sizeof(int)
-40039:          * __indexlen));
-40039:       size_t __nmatches = 0;
-40039:       size_t* __matches_lengths = 0;
-40039:       size_t __pos = 0;
-40039: 
-40039:       if (__beg != __end)
-40039:  {
-40039:    const char_type __c = *__beg;
-40039:    for (size_t __i = 0; __i < 2 * __indexlen; ++__i)
-40039:      if (__c == __names[__i][0]
-40039:   || __c == __ctype.toupper(__names[__i][0]))
-40039:        __matches[__nmatches++] = __i;
-40039:  }
-40039: 
-40039:       if (__nmatches)
-40039:  {
-40039:    ++__beg;
-40039:    ++__pos;
-40039: 
-40039:    __matches_lengths
-40039:      = static_cast<size_t*>(__builtin_alloca(sizeof(size_t)
-40039:           * __nmatches));
-40039:    for (size_t __i = 0; __i < __nmatches; ++__i)
-40039:      __matches_lengths[__i]
-40039:        = __traits_type::length(__names[__matches[__i]]);
-40039:  }
-40039: 
-40039:       for (; __beg != __end; ++__beg, (void)++__pos)
-40039:  {
-40039:    size_t __nskipped = 0;
-40039:    const char_type __c = *__beg;
-40039:    for (size_t __i = 0; __i < __nmatches;)
-40039:      {
-40039:        const char_type* __name = __names[__matches[__i]];
-40039:        if (__pos >= __matches_lengths[__i])
-40039:   ++__nskipped, ++__i;
-40039:        else if (!(__name[__pos] == __c))
-40039:   {
-40039:     --__nmatches;
-40039:     __matches[__i] = __matches[__nmatches];
-40039:     __matches_lengths[__i] = __matches_lengths[__nmatches];
-40039:   }
-40039:        else
-40039:   ++__i;
-40039:      }
-40039:    if (__nskipped == __nmatches)
-40039:      break;
-40039:  }
-40039: 
-40039:       if ((__nmatches == 1 && __matches_lengths[0] == __pos)
-40039:    || (__nmatches == 2 && (__matches_lengths[0] == __pos
-40039:       || __matches_lengths[1] == __pos)))
-40039:  __member = (__matches[0] >= __indexlen
-40039:       ? __matches[0] - __indexlen : __matches[0]);
-40039:       else
-40039:  __err |= ios_base::failbit;
-40039: 
-40039:       return __beg;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     _InIter
-40039:     time_get<_CharT, _InIter>::
-40039:     do_get_time(iter_type __beg, iter_type __end, ios_base& __io,
-40039:   ios_base::iostate& __err, tm* __tm) const
-40039:     {
-40039:       const locale& __loc = __io._M_getloc();
-40039:       const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc);
-40039:       const char_type* __times[2];
-40039:       __tp._M_time_formats(__times);
-40039:       __beg = _M_extract_via_format(__beg, __end, __io, __err,
-40039:         __tm, __times[0]);
-40039:       if (__beg == __end)
-40039:  __err |= ios_base::eofbit;
-40039:       return __beg;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     _InIter
-40039:     time_get<_CharT, _InIter>::
-40039:     do_get_date(iter_type __beg, iter_type __end, ios_base& __io,
-40039:   ios_base::iostate& __err, tm* __tm) const
-40039:     {
-40039:       const locale& __loc = __io._M_getloc();
-40039:       const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc);
-40039:       const char_type* __dates[2];
-40039:       __tp._M_date_formats(__dates);
-40039:       __beg = _M_extract_via_format(__beg, __end, __io, __err,
-40039:         __tm, __dates[0]);
-40039:       if (__beg == __end)
-40039:  __err |= ios_base::eofbit;
-40039:       return __beg;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     _InIter
-40039:     time_get<_CharT, _InIter>::
-40039:     do_get_weekday(iter_type __beg, iter_type __end, ios_base& __io,
-40039:      ios_base::iostate& __err, tm* __tm) const
-40039:     {
-40039:       const locale& __loc = __io._M_getloc();
-40039:       const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc);
-40039:       const char_type* __days[14];
-40039:       __tp._M_days_abbreviated(__days);
-40039:       __tp._M_days(__days + 7);
-40039:       int __tmpwday;
-40039:       ios_base::iostate __tmperr = ios_base::goodbit;
-40039: 
-40039:       __beg = _M_extract_wday_or_month(__beg, __end, __tmpwday, __days, 7,
-40039:            __io, __tmperr);
-40039:       if (!__tmperr)
-40039:  __tm->tm_wday = __tmpwday;
-40039:       else
-40039:  __err |= ios_base::failbit;
-40039: 
-40039:       if (__beg == __end)
-40039:  __err |= ios_base::eofbit;
-40039:       return __beg;
-40039:      }
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     _InIter
-40039:     time_get<_CharT, _InIter>::
-40039:     do_get_monthname(iter_type __beg, iter_type __end,
-40039:                      ios_base& __io, ios_base::iostate& __err, tm* __tm) const
-40039:     {
-40039:       const locale& __loc = __io._M_getloc();
-40039:       const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc);
-40039:       const char_type* __months[24];
-40039:       __tp._M_months_abbreviated(__months);
-40039:       __tp._M_months(__months + 12);
-40039:       int __tmpmon;
-40039:       ios_base::iostate __tmperr = ios_base::goodbit;
-40039: 
-40039:       __beg = _M_extract_wday_or_month(__beg, __end, __tmpmon, __months, 12,
-40039:            __io, __tmperr);
-40039:       if (!__tmperr)
-40039:  __tm->tm_mon = __tmpmon;
-40039:       else
-40039:  __err |= ios_base::failbit;
-40039: 
-40039:       if (__beg == __end)
-40039:  __err |= ios_base::eofbit;
-40039:       return __beg;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     _InIter
-40039:     time_get<_CharT, _InIter>::
-40039:     do_get_year(iter_type __beg, iter_type __end, ios_base& __io,
-40039:   ios_base::iostate& __err, tm* __tm) const
-40039:     {
-40039:       int __tmpyear;
-40039:       ios_base::iostate __tmperr = ios_base::goodbit;
-40039: 
-40039:       __beg = _M_extract_num(__beg, __end, __tmpyear, 0, 9999, 4,
-40039:         __io, __tmperr);
-40039:       if (!__tmperr)
-40039:  __tm->tm_year = __tmpyear < 0 ? __tmpyear + 100 : __tmpyear - 1900;
-40039:       else
-40039:  __err |= ios_base::failbit;
-40039: 
-40039:       if (__beg == __end)
-40039:  __err |= ios_base::eofbit;
-40039:       return __beg;
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     inline
-40039:     _InIter
-40039:     time_get<_CharT, _InIter>::
-40039:     get(iter_type __s, iter_type __end, ios_base& __io,
-40039:         ios_base::iostate& __err, tm* __tm, const char_type* __fmt,
-40039:         const char_type* __fmtend) const
-40039:     {
-40039:       const locale& __loc = __io._M_getloc();
-40039:       ctype<_CharT> const& __ctype = use_facet<ctype<_CharT> >(__loc);
-40039:       __err = ios_base::goodbit;
-40039:       while (__fmt != __fmtend &&
-40039:              __err == ios_base::goodbit)
-40039:         {
-40039:           if (__s == __end)
-40039:             {
-40039:               __err = ios_base::eofbit | ios_base::failbit;
-40039:               break;
-40039:             }
-40039:           else if (__ctype.narrow(*__fmt, 0) == '%')
-40039:             {
-40039:               char __format;
-40039:               char __mod = 0;
-40039:               if (++__fmt == __fmtend)
-40039:                 {
-40039:                   __err = ios_base::failbit;
-40039:                   break;
-40039:                 }
-40039:               const char __c = __ctype.narrow(*__fmt, 0);
-40039:               if (__c != 'E' && __c != 'O')
-40039:                 __format = __c;
-40039:               else if (++__fmt != __fmtend)
-40039:                 {
-40039:                   __mod = __c;
-40039:                   __format = __ctype.narrow(*__fmt, 0);
-40039:                 }
-40039:               else
-40039:                 {
-40039:                   __err = ios_base::failbit;
-40039:                   break;
-40039:                 }
-40039:               __s = this->do_get(__s, __end, __io, __err, __tm, __format,
-40039:      __mod);
-40039:               ++__fmt;
-40039:             }
-40039:           else if (__ctype.is(ctype_base::space, *__fmt))
-40039:             {
-40039:               ++__fmt;
-40039:               while (__fmt != __fmtend &&
-40039:                      __ctype.is(ctype_base::space, *__fmt))
-40039:                 ++__fmt;
-40039: 
-40039:               while (__s != __end &&
-40039:                      __ctype.is(ctype_base::space, *__s))
-40039:                 ++__s;
-40039:             }
-40039: 
-40039:           else if (__ctype.tolower(*__s) == __ctype.tolower(*__fmt) ||
-40039:                    __ctype.toupper(*__s) == __ctype.toupper(*__fmt))
-40039:             {
-40039:               ++__s;
-40039:               ++__fmt;
-40039:             }
-40039:           else
-40039:             {
-40039:               __err = ios_base::failbit;
-40039:               break;
-40039:             }
-40039:         }
-40039:       return __s;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _InIter>
-40039:     inline
-40039:     _InIter
-40039:     time_get<_CharT, _InIter>::
-40039:     do_get(iter_type __beg, iter_type __end, ios_base& __io,
-40039:            ios_base::iostate& __err, tm* __tm,
-40039:            char __format, char __mod) const
-40039:     {
-40039:       const locale& __loc = __io._M_getloc();
-40039:       ctype<_CharT> const& __ctype = use_facet<ctype<_CharT> >(__loc);
-40039:       __err = ios_base::goodbit;
-40039: 
-40039:       char_type __fmt[4];
-40039:       __fmt[0] = __ctype.widen('%');
-40039:       if (!__mod)
-40039:         {
-40039:           __fmt[1] = __format;
-40039:           __fmt[2] = char_type();
-40039:         }
-40039:       else
-40039:         {
-40039:           __fmt[1] = __mod;
-40039:           __fmt[2] = __format;
-40039:           __fmt[3] = char_type();
-40039:         }
-40039: 
-40039:       __beg = _M_extract_via_format(__beg, __end, __io, __err, __tm, __fmt);
-40039:       if (__beg == __end)
-40039:  __err |= ios_base::eofbit;
-40039:       return __beg;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _OutIter>
-40039:     _OutIter
-40039:     time_put<_CharT, _OutIter>::
-40039:     put(iter_type __s, ios_base& __io, char_type __fill, const tm* __tm,
-40039:  const _CharT* __beg, const _CharT* __end) const
-40039:     {
-40039:       const locale& __loc = __io._M_getloc();
-40039:       ctype<_CharT> const& __ctype = use_facet<ctype<_CharT> >(__loc);
-40039:       for (; __beg != __end; ++__beg)
-40039:  if (__ctype.narrow(*__beg, 0) != '%')
-40039:    {
-40039:      *__s = *__beg;
-40039:      ++__s;
-40039:    }
-40039:  else if (++__beg != __end)
-40039:    {
-40039:      char __format;
-40039:      char __mod = 0;
-40039:      const char __c = __ctype.narrow(*__beg, 0);
-40039:      if (__c != 'E' && __c != 'O')
-40039:        __format = __c;
-40039:      else if (++__beg != __end)
-40039:        {
-40039:   __mod = __c;
-40039:   __format = __ctype.narrow(*__beg, 0);
-40039:        }
-40039:      else
-40039:        break;
-40039:      __s = this->do_put(__s, __io, __fill, __tm, __format, __mod);
-40039:    }
-40039:  else
-40039:    break;
-40039:       return __s;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _OutIter>
-40039:     _OutIter
-40039:     time_put<_CharT, _OutIter>::
-40039:     do_put(iter_type __s, ios_base& __io, char_type, const tm* __tm,
-40039:     char __format, char __mod) const
-40039:     {
-40039:       const locale& __loc = __io._M_getloc();
-40039:       ctype<_CharT> const& __ctype = use_facet<ctype<_CharT> >(__loc);
-40039:       __timepunct<_CharT> const& __tp = use_facet<__timepunct<_CharT> >(__loc);
-40039: 
-40039: 
-40039: 
-40039:       const size_t __maxlen = 128;
-40039:       char_type __res[__maxlen];
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       char_type __fmt[4];
-40039:       __fmt[0] = __ctype.widen('%');
-40039:       if (!__mod)
-40039:  {
-40039:    __fmt[1] = __format;
-40039:    __fmt[2] = char_type();
-40039:  }
-40039:       else
-40039:  {
-40039:    __fmt[1] = __mod;
-40039:    __fmt[2] = __format;
-40039:    __fmt[3] = char_type();
-40039:  }
-40039: 
-40039:       __tp._M_put(__res, __maxlen, __fmt, __tm);
-40039: 
-40039: 
-40039:       return std::__write(__s, __res, char_traits<char_type>::length(__res));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   extern template class moneypunct<char, false>;
-40039:   extern template class moneypunct<char, true>;
-40039:   extern template class moneypunct_byname<char, false>;
-40039:   extern template class moneypunct_byname<char, true>;
-40039:   extern template class __cxx11:: money_get<char>;
-40039:   extern template class __cxx11:: money_put<char>;
-40039:   extern template class __timepunct<char>;
-40039:   extern template class time_put<char>;
-40039:   extern template class time_put_byname<char>;
-40039:   extern template class time_get<char>;
-40039:   extern template class time_get_byname<char>;
-40039:   extern template class messages<char>;
-40039:   extern template class messages_byname<char>;
-40039: 
-40039:   extern template
-40039:     const moneypunct<char, true>&
-40039:     use_facet<moneypunct<char, true> >(const locale&);
-40039: 
-40039:   extern template
-40039:     const moneypunct<char, false>&
-40039:     use_facet<moneypunct<char, false> >(const locale&);
-40039: 
-40039:   extern template
-40039:     const money_put<char>&
-40039:     use_facet<money_put<char> >(const locale&);
-40039: 
-40039:   extern template
-40039:     const money_get<char>&
-40039:     use_facet<money_get<char> >(const locale&);
-40039: 
-40039:   extern template
-40039:     const __timepunct<char>&
-40039:     use_facet<__timepunct<char> >(const locale&);
-40039: 
-40039:   extern template
-40039:     const time_put<char>&
-40039:     use_facet<time_put<char> >(const locale&);
-40039: 
-40039:   extern template
-40039:     const time_get<char>&
-40039:     use_facet<time_get<char> >(const locale&);
-40039: 
-40039:   extern template
-40039:     const messages<char>&
-40039:     use_facet<messages<char> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<moneypunct<char> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<money_put<char> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<money_get<char> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<__timepunct<char> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<time_put<char> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<time_get<char> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<messages<char> >(const locale&);
-40039: 
-40039: 
-40039:   extern template class moneypunct<wchar_t, false>;
-40039:   extern template class moneypunct<wchar_t, true>;
-40039:   extern template class moneypunct_byname<wchar_t, false>;
-40039:   extern template class moneypunct_byname<wchar_t, true>;
-40039:   extern template class __cxx11:: money_get<wchar_t>;
-40039:   extern template class __cxx11:: money_put<wchar_t>;
-40039:   extern template class __timepunct<wchar_t>;
-40039:   extern template class time_put<wchar_t>;
-40039:   extern template class time_put_byname<wchar_t>;
-40039:   extern template class time_get<wchar_t>;
-40039:   extern template class time_get_byname<wchar_t>;
-40039:   extern template class messages<wchar_t>;
-40039:   extern template class messages_byname<wchar_t>;
-40039: 
-40039:   extern template
-40039:     const moneypunct<wchar_t, true>&
-40039:     use_facet<moneypunct<wchar_t, true> >(const locale&);
-40039: 
-40039:   extern template
-40039:     const moneypunct<wchar_t, false>&
-40039:     use_facet<moneypunct<wchar_t, false> >(const locale&);
-40039: 
-40039:   extern template
-40039:     const money_put<wchar_t>&
-40039:     use_facet<money_put<wchar_t> >(const locale&);
-40039: 
-40039:   extern template
-40039:     const money_get<wchar_t>&
-40039:     use_facet<money_get<wchar_t> >(const locale&);
-40039: 
-40039:   extern template
-40039:     const __timepunct<wchar_t>&
-40039:     use_facet<__timepunct<wchar_t> >(const locale&);
-40039: 
-40039:   extern template
-40039:     const time_put<wchar_t>&
-40039:     use_facet<time_put<wchar_t> >(const locale&);
-40039: 
-40039:   extern template
-40039:     const time_get<wchar_t>&
-40039:     use_facet<time_get<wchar_t> >(const locale&);
-40039: 
-40039:   extern template
-40039:     const messages<wchar_t>&
-40039:     use_facet<messages<wchar_t> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<moneypunct<wchar_t> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<money_put<wchar_t> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<money_get<wchar_t> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<__timepunct<wchar_t> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<time_put<wchar_t> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<time_get<wchar_t> >(const locale&);
-40039: 
-40039:   extern template
-40039:     bool
-40039:     has_facet<messages<wchar_t> >(const locale&);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 2016 "/usr/include/c++/8/bits/locale_facets_nonio.h" 2 3
-40039: # 42 "/usr/include/c++/8/locale" 2 3
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/locale_conv.h" 1 3
-40039: # 41 "/usr/include/c++/8/bits/locale_conv.h" 3
-40039: # 1 "/usr/include/c++/8/bits/unique_ptr.h" 1 3
-40039: # 41 "/usr/include/c++/8/bits/unique_ptr.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: #pragma GCC diagnostic push
-40039: #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-40039:   template<typename> class auto_ptr;
-40039: #pragma GCC diagnostic pop
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct default_delete
-40039:     {
-40039: 
-40039:       constexpr default_delete() noexcept = default;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Up, typename = typename
-40039:         enable_if<is_convertible<_Up*, _Tp*>::value>::type>
-40039:         default_delete(const default_delete<_Up>&) noexcept { }
-40039: 
-40039: 
-40039:       void
-40039:       operator()(_Tp* __ptr) const
-40039:       {
-40039:  static_assert(!is_void<_Tp>::value,
-40039:         "can't delete pointer to incomplete type");
-40039:  static_assert(sizeof(_Tp)>0,
-40039:         "can't delete pointer to incomplete type");
-40039:  delete __ptr;
-40039:       }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct default_delete<_Tp[]>
-40039:     {
-40039:     public:
-40039: 
-40039:       constexpr default_delete() noexcept = default;
-40039: # 104 "/usr/include/c++/8/bits/unique_ptr.h" 3
-40039:       template<typename _Up, typename = typename
-40039:         enable_if<is_convertible<_Up(*)[], _Tp(*)[]>::value>::type>
-40039:         default_delete(const default_delete<_Up[]>&) noexcept { }
-40039: 
-40039: 
-40039:       template<typename _Up>
-40039:       typename enable_if<is_convertible<_Up(*)[], _Tp(*)[]>::value>::type
-40039:  operator()(_Up* __ptr) const
-40039:       {
-40039:  static_assert(sizeof(_Tp)>0,
-40039:         "can't delete pointer to incomplete type");
-40039:  delete [] __ptr;
-40039:       }
-40039:     };
-40039: 
-40039:   template <typename _Tp, typename _Dp>
-40039:     class __uniq_ptr_impl
-40039:     {
-40039:       template <typename _Up, typename _Ep, typename = void>
-40039:  struct _Ptr
-40039:  {
-40039:    using type = _Up*;
-40039:  };
-40039: 
-40039:       template <typename _Up, typename _Ep>
-40039:  struct
-40039:  _Ptr<_Up, _Ep, __void_t<typename remove_reference<_Ep>::type::pointer>>
-40039:  {
-40039:    using type = typename remove_reference<_Ep>::type::pointer;
-40039:  };
-40039: 
-40039:     public:
-40039:       using _DeleterConstraint = enable_if<
-40039:         __and_<__not_<is_pointer<_Dp>>,
-40039:         is_default_constructible<_Dp>>::value>;
-40039: 
-40039:       using pointer = typename _Ptr<_Tp, _Dp>::type;
-40039: 
-40039:       __uniq_ptr_impl() = default;
-40039:       __uniq_ptr_impl(pointer __p) : _M_t() { _M_ptr() = __p; }
-40039: 
-40039:       template<typename _Del>
-40039:       __uniq_ptr_impl(pointer __p, _Del&& __d)
-40039:  : _M_t(__p, std::forward<_Del>(__d)) { }
-40039: 
-40039:       pointer& _M_ptr() { return std::get<0>(_M_t); }
-40039:       pointer _M_ptr() const { return std::get<0>(_M_t); }
-40039:       _Dp& _M_deleter() { return std::get<1>(_M_t); }
-40039:       const _Dp& _M_deleter() const { return std::get<1>(_M_t); }
-40039: 
-40039:     private:
-40039:       tuple<pointer, _Dp> _M_t;
-40039:     };
-40039: 
-40039: 
-40039:   template <typename _Tp, typename _Dp = default_delete<_Tp>>
-40039:     class unique_ptr
-40039:     {
-40039:       template <class _Up>
-40039:       using _DeleterConstraint =
-40039:  typename __uniq_ptr_impl<_Tp, _Up>::_DeleterConstraint::type;
-40039: 
-40039:       __uniq_ptr_impl<_Tp, _Dp> _M_t;
-40039: 
-40039:     public:
-40039:       using pointer = typename __uniq_ptr_impl<_Tp, _Dp>::pointer;
-40039:       using element_type = _Tp;
-40039:       using deleter_type = _Dp;
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Up, typename _Ep>
-40039:  using __safe_conversion_up = __and_<
-40039:          is_convertible<typename unique_ptr<_Up, _Ep>::pointer, pointer>,
-40039:                 __not_<is_array<_Up>>,
-40039:                 __or_<__and_<is_reference<deleter_type>,
-40039:                              is_same<deleter_type, _Ep>>,
-40039:                       __and_<__not_<is_reference<deleter_type>>,
-40039:                              is_convertible<_Ep, deleter_type>>
-40039:                 >
-40039:               >;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       template <typename _Up = _Dp,
-40039:   typename = _DeleterConstraint<_Up>>
-40039:  constexpr unique_ptr() noexcept
-40039:  : _M_t()
-40039:  { }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       template <typename _Up = _Dp,
-40039:   typename = _DeleterConstraint<_Up>>
-40039:  explicit
-40039:  unique_ptr(pointer __p) noexcept
-40039:  : _M_t(__p)
-40039:         { }
-40039: # 215 "/usr/include/c++/8/bits/unique_ptr.h" 3
-40039:       unique_ptr(pointer __p,
-40039:    typename conditional<is_reference<deleter_type>::value,
-40039:      deleter_type, const deleter_type&>::type __d) noexcept
-40039:       : _M_t(__p, __d) { }
-40039: # 227 "/usr/include/c++/8/bits/unique_ptr.h" 3
-40039:       unique_ptr(pointer __p,
-40039:    typename remove_reference<deleter_type>::type&& __d) noexcept
-40039:       : _M_t(std::move(__p), std::move(__d))
-40039:       { static_assert(!std::is_reference<deleter_type>::value,
-40039:         "rvalue deleter bound to reference"); }
-40039: 
-40039: 
-40039:       template <typename _Up = _Dp,
-40039:   typename = _DeleterConstraint<_Up>>
-40039:  constexpr unique_ptr(nullptr_t) noexcept : _M_t() { }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       unique_ptr(unique_ptr&& __u) noexcept
-40039:       : _M_t(__u.release(), std::forward<deleter_type>(__u.get_deleter())) { }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Up, typename _Ep, typename = _Require<
-40039:                __safe_conversion_up<_Up, _Ep>,
-40039:         typename conditional<is_reference<_Dp>::value,
-40039:         is_same<_Ep, _Dp>,
-40039:         is_convertible<_Ep, _Dp>>::type>>
-40039:  unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept
-40039:  : _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter()))
-40039:  { }
-40039: 
-40039: 
-40039: #pragma GCC diagnostic push
-40039: #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-40039: 
-40039:       template<typename _Up, typename = _Require<
-40039:         is_convertible<_Up*, _Tp*>, is_same<_Dp, default_delete<_Tp>>>>
-40039:  unique_ptr(auto_ptr<_Up>&& __u) noexcept;
-40039: #pragma GCC diagnostic pop
-40039: 
-40039: 
-40039: 
-40039:       ~unique_ptr() noexcept
-40039:       {
-40039:  auto& __ptr = _M_t._M_ptr();
-40039:  if (__ptr != nullptr)
-40039:    get_deleter()(__ptr);
-40039:  __ptr = pointer();
-40039:       }
-40039: # 286 "/usr/include/c++/8/bits/unique_ptr.h" 3
-40039:       unique_ptr&
-40039:       operator=(unique_ptr&& __u) noexcept
-40039:       {
-40039:  reset(__u.release());
-40039:  get_deleter() = std::forward<deleter_type>(__u.get_deleter());
-40039:  return *this;
-40039:       }
-40039: # 301 "/usr/include/c++/8/bits/unique_ptr.h" 3
-40039:       template<typename _Up, typename _Ep>
-40039:         typename enable_if< __and_<
-40039:           __safe_conversion_up<_Up, _Ep>,
-40039:           is_assignable<deleter_type&, _Ep&&>
-40039:           >::value,
-40039:           unique_ptr&>::type
-40039:  operator=(unique_ptr<_Up, _Ep>&& __u) noexcept
-40039:  {
-40039:    reset(__u.release());
-40039:    get_deleter() = std::forward<_Ep>(__u.get_deleter());
-40039:    return *this;
-40039:  }
-40039: 
-40039: 
-40039:       unique_ptr&
-40039:       operator=(nullptr_t) noexcept
-40039:       {
-40039:  reset();
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       typename add_lvalue_reference<element_type>::type
-40039:       operator*() const
-40039:       {
-40039:  ;
-40039:  return *get();
-40039:       }
-40039: 
-40039: 
-40039:       pointer
-40039:       operator->() const noexcept
-40039:       {
-40039:  ;
-40039:  return get();
-40039:       }
-40039: 
-40039: 
-40039:       pointer
-40039:       get() const noexcept
-40039:       { return _M_t._M_ptr(); }
-40039: 
-40039: 
-40039:       deleter_type&
-40039:       get_deleter() noexcept
-40039:       { return _M_t._M_deleter(); }
-40039: 
-40039: 
-40039:       const deleter_type&
-40039:       get_deleter() const noexcept
-40039:       { return _M_t._M_deleter(); }
-40039: 
-40039: 
-40039:       explicit operator bool() const noexcept
-40039:       { return get() == pointer() ? false : true; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       pointer
-40039:       release() noexcept
-40039:       {
-40039:  pointer __p = get();
-40039:  _M_t._M_ptr() = pointer();
-40039:  return __p;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       reset(pointer __p = pointer()) noexcept
-40039:       {
-40039:  using std::swap;
-40039:  swap(_M_t._M_ptr(), __p);
-40039:  if (__p != pointer())
-40039:    get_deleter()(__p);
-40039:       }
-40039: 
-40039: 
-40039:       void
-40039:       swap(unique_ptr& __u) noexcept
-40039:       {
-40039:  using std::swap;
-40039:  swap(_M_t, __u._M_t);
-40039:       }
-40039: 
-40039: 
-40039:       unique_ptr(const unique_ptr&) = delete;
-40039:       unique_ptr& operator=(const unique_ptr&) = delete;
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Dp>
-40039:     class unique_ptr<_Tp[], _Dp>
-40039:     {
-40039:       template <typename _Up>
-40039:       using _DeleterConstraint =
-40039:  typename __uniq_ptr_impl<_Tp, _Up>::_DeleterConstraint::type;
-40039: 
-40039:       __uniq_ptr_impl<_Tp, _Dp> _M_t;
-40039: 
-40039:       template<typename _Up>
-40039:  using __remove_cv = typename remove_cv<_Up>::type;
-40039: 
-40039: 
-40039:       template<typename _Up>
-40039:  using __is_derived_Tp
-40039:    = __and_< is_base_of<_Tp, _Up>,
-40039:       __not_<is_same<__remove_cv<_Tp>, __remove_cv<_Up>>> >;
-40039: 
-40039:     public:
-40039:       using pointer = typename __uniq_ptr_impl<_Tp, _Dp>::pointer;
-40039:       using element_type = _Tp;
-40039:       using deleter_type = _Dp;
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Up, typename _Ep,
-40039:                typename _Up_up = unique_ptr<_Up, _Ep>,
-40039:         typename _Up_element_type = typename _Up_up::element_type>
-40039:  using __safe_conversion_up = __and_<
-40039:           is_array<_Up>,
-40039:           is_same<pointer, element_type*>,
-40039:           is_same<typename _Up_up::pointer, _Up_element_type*>,
-40039:           is_convertible<_Up_element_type(*)[], element_type(*)[]>,
-40039:           __or_<__and_<is_reference<deleter_type>, is_same<deleter_type, _Ep>>,
-40039:                 __and_<__not_<is_reference<deleter_type>>,
-40039:                        is_convertible<_Ep, deleter_type>>>
-40039:         >;
-40039: 
-40039: 
-40039:       template<typename _Up>
-40039:         using __safe_conversion_raw = __and_<
-40039:           __or_<__or_<is_same<_Up, pointer>,
-40039:                       is_same<_Up, nullptr_t>>,
-40039:                 __and_<is_pointer<_Up>,
-40039:                        is_same<pointer, element_type*>,
-40039:                        is_convertible<
-40039:                          typename remove_pointer<_Up>::type(*)[],
-40039:                          element_type(*)[]>
-40039:                 >
-40039:           >
-40039:         >;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       template <typename _Up = _Dp,
-40039:   typename = _DeleterConstraint<_Up>>
-40039:  constexpr unique_ptr() noexcept
-40039:  : _M_t()
-40039:  { }
-40039: # 470 "/usr/include/c++/8/bits/unique_ptr.h" 3
-40039:       template<typename _Up,
-40039:         typename _Vp = _Dp,
-40039:         typename = _DeleterConstraint<_Vp>,
-40039:         typename = typename enable_if<
-40039:                  __safe_conversion_raw<_Up>::value, bool>::type>
-40039:  explicit
-40039:  unique_ptr(_Up __p) noexcept
-40039:  : _M_t(__p)
-40039:         { }
-40039: # 488 "/usr/include/c++/8/bits/unique_ptr.h" 3
-40039:       template<typename _Up,
-40039:                typename = typename enable_if<
-40039:                  __safe_conversion_raw<_Up>::value, bool>::type>
-40039:       unique_ptr(_Up __p,
-40039:                  typename conditional<is_reference<deleter_type>::value,
-40039:                  deleter_type, const deleter_type&>::type __d) noexcept
-40039:       : _M_t(__p, __d) { }
-40039: # 504 "/usr/include/c++/8/bits/unique_ptr.h" 3
-40039:       template<typename _Up,
-40039:                typename = typename enable_if<
-40039:                  __safe_conversion_raw<_Up>::value, bool>::type>
-40039:       unique_ptr(_Up __p, typename
-40039:    remove_reference<deleter_type>::type&& __d) noexcept
-40039:       : _M_t(std::move(__p), std::move(__d))
-40039:       { static_assert(!is_reference<deleter_type>::value,
-40039:         "rvalue deleter bound to reference"); }
-40039: 
-40039: 
-40039:       unique_ptr(unique_ptr&& __u) noexcept
-40039:       : _M_t(__u.release(), std::forward<deleter_type>(__u.get_deleter())) { }
-40039: 
-40039: 
-40039:       template <typename _Up = _Dp,
-40039:   typename = _DeleterConstraint<_Up>>
-40039:  constexpr unique_ptr(nullptr_t) noexcept : _M_t() { }
-40039: 
-40039:       template<typename _Up, typename _Ep,
-40039:         typename = _Require<__safe_conversion_up<_Up, _Ep>>>
-40039:  unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept
-40039:  : _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter()))
-40039:  { }
-40039: 
-40039: 
-40039:       ~unique_ptr()
-40039:       {
-40039:  auto& __ptr = _M_t._M_ptr();
-40039:  if (__ptr != nullptr)
-40039:    get_deleter()(__ptr);
-40039:  __ptr = pointer();
-40039:       }
-40039: # 545 "/usr/include/c++/8/bits/unique_ptr.h" 3
-40039:       unique_ptr&
-40039:       operator=(unique_ptr&& __u) noexcept
-40039:       {
-40039:  reset(__u.release());
-40039:  get_deleter() = std::forward<deleter_type>(__u.get_deleter());
-40039:  return *this;
-40039:       }
-40039: # 560 "/usr/include/c++/8/bits/unique_ptr.h" 3
-40039:       template<typename _Up, typename _Ep>
-40039:  typename
-40039:  enable_if<__and_<__safe_conversion_up<_Up, _Ep>,
-40039:                          is_assignable<deleter_type&, _Ep&&>
-40039:                   >::value,
-40039:                   unique_ptr&>::type
-40039:  operator=(unique_ptr<_Up, _Ep>&& __u) noexcept
-40039:  {
-40039:    reset(__u.release());
-40039:    get_deleter() = std::forward<_Ep>(__u.get_deleter());
-40039:    return *this;
-40039:  }
-40039: 
-40039: 
-40039:       unique_ptr&
-40039:       operator=(nullptr_t) noexcept
-40039:       {
-40039:  reset();
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       typename std::add_lvalue_reference<element_type>::type
-40039:       operator[](size_t __i) const
-40039:       {
-40039:  ;
-40039:  return get()[__i];
-40039:       }
-40039: 
-40039: 
-40039:       pointer
-40039:       get() const noexcept
-40039:       { return _M_t._M_ptr(); }
-40039: 
-40039: 
-40039:       deleter_type&
-40039:       get_deleter() noexcept
-40039:       { return _M_t._M_deleter(); }
-40039: 
-40039: 
-40039:       const deleter_type&
-40039:       get_deleter() const noexcept
-40039:       { return _M_t._M_deleter(); }
-40039: 
-40039: 
-40039:       explicit operator bool() const noexcept
-40039:       { return get() == pointer() ? false : true; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       pointer
-40039:       release() noexcept
-40039:       {
-40039:  pointer __p = get();
-40039:  _M_t._M_ptr() = pointer();
-40039:  return __p;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       template <typename _Up,
-40039:                 typename = _Require<
-40039:                   __or_<is_same<_Up, pointer>,
-40039:                         __and_<is_same<pointer, element_type*>,
-40039:                                is_pointer<_Up>,
-40039:                                is_convertible<
-40039:                                  typename remove_pointer<_Up>::type(*)[],
-40039:                                  element_type(*)[]
-40039:                                >
-40039:                         >
-40039:                   >
-40039:                >>
-40039:       void
-40039:       reset(_Up __p) noexcept
-40039:       {
-40039:  pointer __ptr = __p;
-40039:  using std::swap;
-40039:  swap(_M_t._M_ptr(), __ptr);
-40039:  if (__ptr != nullptr)
-40039:    get_deleter()(__ptr);
-40039:       }
-40039: 
-40039:       void reset(nullptr_t = nullptr) noexcept
-40039:       {
-40039:         reset(pointer());
-40039:       }
-40039: 
-40039: 
-40039:       void
-40039:       swap(unique_ptr& __u) noexcept
-40039:       {
-40039:  using std::swap;
-40039:  swap(_M_t, __u._M_t);
-40039:       }
-40039: 
-40039: 
-40039:       unique_ptr(const unique_ptr&) = delete;
-40039:       unique_ptr& operator=(const unique_ptr&) = delete;
-40039:     };
-40039: 
-40039:   template<typename _Tp, typename _Dp>
-40039:     inline
-40039: 
-40039: 
-40039:     typename enable_if<__is_swappable<_Dp>::value>::type
-40039: 
-40039: 
-40039: 
-40039:     swap(unique_ptr<_Tp, _Dp>& __x,
-40039:   unique_ptr<_Tp, _Dp>& __y) noexcept
-40039:     { __x.swap(__y); }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Dp>
-40039:     typename enable_if<!__is_swappable<_Dp>::value>::type
-40039:     swap(unique_ptr<_Tp, _Dp>&,
-40039:   unique_ptr<_Tp, _Dp>&) = delete;
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Dp,
-40039:     typename _Up, typename _Ep>
-40039:     inline bool
-40039:     operator==(const unique_ptr<_Tp, _Dp>& __x,
-40039:         const unique_ptr<_Up, _Ep>& __y)
-40039:     { return __x.get() == __y.get(); }
-40039: 
-40039:   template<typename _Tp, typename _Dp>
-40039:     inline bool
-40039:     operator==(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) noexcept
-40039:     { return !__x; }
-40039: 
-40039:   template<typename _Tp, typename _Dp>
-40039:     inline bool
-40039:     operator==(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) noexcept
-40039:     { return !__x; }
-40039: 
-40039:   template<typename _Tp, typename _Dp,
-40039:     typename _Up, typename _Ep>
-40039:     inline bool
-40039:     operator!=(const unique_ptr<_Tp, _Dp>& __x,
-40039:         const unique_ptr<_Up, _Ep>& __y)
-40039:     { return __x.get() != __y.get(); }
-40039: 
-40039:   template<typename _Tp, typename _Dp>
-40039:     inline bool
-40039:     operator!=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) noexcept
-40039:     { return (bool)__x; }
-40039: 
-40039:   template<typename _Tp, typename _Dp>
-40039:     inline bool
-40039:     operator!=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) noexcept
-40039:     { return (bool)__x; }
-40039: 
-40039:   template<typename _Tp, typename _Dp,
-40039:     typename _Up, typename _Ep>
-40039:     inline bool
-40039:     operator<(const unique_ptr<_Tp, _Dp>& __x,
-40039:        const unique_ptr<_Up, _Ep>& __y)
-40039:     {
-40039:       typedef typename
-40039:  std::common_type<typename unique_ptr<_Tp, _Dp>::pointer,
-40039:                   typename unique_ptr<_Up, _Ep>::pointer>::type _CT;
-40039:       return std::less<_CT>()(__x.get(), __y.get());
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Dp>
-40039:     inline bool
-40039:     operator<(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
-40039:     { return std::less<typename unique_ptr<_Tp, _Dp>::pointer>()(__x.get(),
-40039:          nullptr); }
-40039: 
-40039:   template<typename _Tp, typename _Dp>
-40039:     inline bool
-40039:     operator<(nullptr_t, const unique_ptr<_Tp, _Dp>& __x)
-40039:     { return std::less<typename unique_ptr<_Tp, _Dp>::pointer>()(nullptr,
-40039:          __x.get()); }
-40039: 
-40039:   template<typename _Tp, typename _Dp,
-40039:     typename _Up, typename _Ep>
-40039:     inline bool
-40039:     operator<=(const unique_ptr<_Tp, _Dp>& __x,
-40039:         const unique_ptr<_Up, _Ep>& __y)
-40039:     { return !(__y < __x); }
-40039: 
-40039:   template<typename _Tp, typename _Dp>
-40039:     inline bool
-40039:     operator<=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
-40039:     { return !(nullptr < __x); }
-40039: 
-40039:   template<typename _Tp, typename _Dp>
-40039:     inline bool
-40039:     operator<=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x)
-40039:     { return !(__x < nullptr); }
-40039: 
-40039:   template<typename _Tp, typename _Dp,
-40039:     typename _Up, typename _Ep>
-40039:     inline bool
-40039:     operator>(const unique_ptr<_Tp, _Dp>& __x,
-40039:        const unique_ptr<_Up, _Ep>& __y)
-40039:     { return (__y < __x); }
-40039: 
-40039:   template<typename _Tp, typename _Dp>
-40039:     inline bool
-40039:     operator>(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
-40039:     { return std::less<typename unique_ptr<_Tp, _Dp>::pointer>()(nullptr,
-40039:          __x.get()); }
-40039: 
-40039:   template<typename _Tp, typename _Dp>
-40039:     inline bool
-40039:     operator>(nullptr_t, const unique_ptr<_Tp, _Dp>& __x)
-40039:     { return std::less<typename unique_ptr<_Tp, _Dp>::pointer>()(__x.get(),
-40039:          nullptr); }
-40039: 
-40039:   template<typename _Tp, typename _Dp,
-40039:     typename _Up, typename _Ep>
-40039:     inline bool
-40039:     operator>=(const unique_ptr<_Tp, _Dp>& __x,
-40039:         const unique_ptr<_Up, _Ep>& __y)
-40039:     { return !(__x < __y); }
-40039: 
-40039:   template<typename _Tp, typename _Dp>
-40039:     inline bool
-40039:     operator>=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
-40039:     { return !(__x < nullptr); }
-40039: 
-40039:   template<typename _Tp, typename _Dp>
-40039:     inline bool
-40039:     operator>=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x)
-40039:     { return !(nullptr < __x); }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Dp>
-40039:     struct hash<unique_ptr<_Tp, _Dp>>
-40039:     : public __hash_base<size_t, unique_ptr<_Tp, _Dp>>,
-40039:     private __poison_hash<typename unique_ptr<_Tp, _Dp>::pointer>
-40039:     {
-40039:       size_t
-40039:       operator()(const unique_ptr<_Tp, _Dp>& __u) const noexcept
-40039:       {
-40039:  typedef unique_ptr<_Tp, _Dp> _UP;
-40039:  return std::hash<typename _UP::pointer>()(__u.get());
-40039:       }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct _MakeUniq
-40039:     { typedef unique_ptr<_Tp> __single_object; };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct _MakeUniq<_Tp[]>
-40039:     { typedef unique_ptr<_Tp[]> __array; };
-40039: 
-40039:   template<typename _Tp, size_t _Bound>
-40039:     struct _MakeUniq<_Tp[_Bound]>
-40039:     { struct __invalid_type { }; };
-40039: 
-40039: 
-40039:   template<typename _Tp, typename... _Args>
-40039:     inline typename _MakeUniq<_Tp>::__single_object
-40039:     make_unique(_Args&&... __args)
-40039:     { return unique_ptr<_Tp>(new _Tp(std::forward<_Args>(__args)...)); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline typename _MakeUniq<_Tp>::__array
-40039:     make_unique(size_t __num)
-40039:     { return unique_ptr<_Tp>(new remove_extent_t<_Tp>[__num]()); }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename... _Args>
-40039:     inline typename _MakeUniq<_Tp>::__invalid_type
-40039:     make_unique(_Args&&...) = delete;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 42 "/usr/include/c++/8/bits/locale_conv.h" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _OutStr, typename _InChar, typename _Codecvt,
-40039:     typename _State, typename _Fn>
-40039:     bool
-40039:     __do_str_codecvt(const _InChar* __first, const _InChar* __last,
-40039:        _OutStr& __outstr, const _Codecvt& __cvt, _State& __state,
-40039:        size_t& __count, _Fn __fn)
-40039:     {
-40039:       if (__first == __last)
-40039:  {
-40039:    __outstr.clear();
-40039:    __count = 0;
-40039:    return true;
-40039:  }
-40039: 
-40039:       size_t __outchars = 0;
-40039:       auto __next = __first;
-40039:       const auto __maxlen = __cvt.max_length() + 1;
-40039: 
-40039:       codecvt_base::result __result;
-40039:       do
-40039:  {
-40039:    __outstr.resize(__outstr.size() + (__last - __next) * __maxlen);
-40039:    auto __outnext = &__outstr.front() + __outchars;
-40039:    auto const __outlast = &__outstr.back() + 1;
-40039:    __result = (__cvt.*__fn)(__state, __next, __last, __next,
-40039:      __outnext, __outlast, __outnext);
-40039:    __outchars = __outnext - &__outstr.front();
-40039:  }
-40039:       while (__result == codecvt_base::partial && __next != __last
-40039:       && (__outstr.size() - __outchars) < __maxlen);
-40039: 
-40039:       if (__result == codecvt_base::error)
-40039:  {
-40039:    __count = __next - __first;
-40039:    return false;
-40039:  }
-40039: 
-40039:       if (__result == codecvt_base::noconv)
-40039:  {
-40039:    __outstr.assign(__first, __last);
-40039:    __count = __last - __first;
-40039:  }
-40039:       else
-40039:  {
-40039:    __outstr.resize(__outchars);
-40039:    __count = __next - __first;
-40039:  }
-40039: 
-40039:       return true;
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc, typename _State>
-40039:     inline bool
-40039:     __str_codecvt_in(const char* __first, const char* __last,
-40039:        basic_string<_CharT, _Traits, _Alloc>& __outstr,
-40039:        const codecvt<_CharT, char, _State>& __cvt,
-40039:        _State& __state, size_t& __count)
-40039:     {
-40039:       using _Codecvt = codecvt<_CharT, char, _State>;
-40039:       using _ConvFn
-40039:  = codecvt_base::result
-40039:    (_Codecvt::*)(_State&, const char*, const char*, const char*&,
-40039:    _CharT*, _CharT*, _CharT*&) const;
-40039:       _ConvFn __fn = &codecvt<_CharT, char, _State>::in;
-40039:       return __do_str_codecvt(__first, __last, __outstr, __cvt, __state,
-40039:          __count, __fn);
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc, typename _State>
-40039:     inline bool
-40039:     __str_codecvt_in(const char* __first, const char* __last,
-40039:        basic_string<_CharT, _Traits, _Alloc>& __outstr,
-40039:        const codecvt<_CharT, char, _State>& __cvt)
-40039:     {
-40039:       _State __state = {};
-40039:       size_t __n;
-40039:       return __str_codecvt_in(__first, __last, __outstr, __cvt, __state, __n);
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc, typename _State>
-40039:     inline bool
-40039:     __str_codecvt_out(const _CharT* __first, const _CharT* __last,
-40039:         basic_string<char, _Traits, _Alloc>& __outstr,
-40039:         const codecvt<_CharT, char, _State>& __cvt,
-40039:         _State& __state, size_t& __count)
-40039:     {
-40039:       using _Codecvt = codecvt<_CharT, char, _State>;
-40039:       using _ConvFn
-40039:  = codecvt_base::result
-40039:    (_Codecvt::*)(_State&, const _CharT*, const _CharT*, const _CharT*&,
-40039:    char*, char*, char*&) const;
-40039:       _ConvFn __fn = &codecvt<_CharT, char, _State>::out;
-40039:       return __do_str_codecvt(__first, __last, __outstr, __cvt, __state,
-40039:          __count, __fn);
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc, typename _State>
-40039:     inline bool
-40039:     __str_codecvt_out(const _CharT* __first, const _CharT* __last,
-40039:         basic_string<char, _Traits, _Alloc>& __outstr,
-40039:         const codecvt<_CharT, char, _State>& __cvt)
-40039:     {
-40039:       _State __state = {};
-40039:       size_t __n;
-40039:       return __str_codecvt_out(__first, __last, __outstr, __cvt, __state, __n);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: namespace __cxx11 {
-40039: 
-40039: 
-40039:   template<typename _Codecvt, typename _Elem = wchar_t,
-40039:     typename _Wide_alloc = allocator<_Elem>,
-40039:     typename _Byte_alloc = allocator<char>>
-40039:     class wstring_convert
-40039:     {
-40039:     public:
-40039:       typedef basic_string<char, char_traits<char>, _Byte_alloc> byte_string;
-40039:       typedef basic_string<_Elem, char_traits<_Elem>, _Wide_alloc> wide_string;
-40039:       typedef typename _Codecvt::state_type state_type;
-40039:       typedef typename wide_string::traits_type::int_type int_type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       explicit
-40039:       wstring_convert(_Codecvt* __pcvt = new _Codecvt()) : _M_cvt(__pcvt)
-40039:       {
-40039:  if (!_M_cvt)
-40039:    __throw_logic_error("wstring_convert");
-40039:       }
-40039: # 198 "/usr/include/c++/8/bits/locale_conv.h" 3
-40039:       wstring_convert(_Codecvt* __pcvt, state_type __state)
-40039:       : _M_cvt(__pcvt), _M_state(__state), _M_with_cvtstate(true)
-40039:       {
-40039:  if (!_M_cvt)
-40039:    __throw_logic_error("wstring_convert");
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       explicit
-40039:       wstring_convert(const byte_string& __byte_err,
-40039:         const wide_string& __wide_err = wide_string())
-40039:       : _M_cvt(new _Codecvt),
-40039:  _M_byte_err_string(__byte_err), _M_wide_err_string(__wide_err),
-40039:  _M_with_strings(true)
-40039:       {
-40039:  if (!_M_cvt)
-40039:    __throw_logic_error("wstring_convert");
-40039:       }
-40039: 
-40039:       ~wstring_convert() = default;
-40039: 
-40039: 
-40039: 
-40039:       wstring_convert(const wstring_convert&) = delete;
-40039:       wstring_convert& operator=(const wstring_convert&) = delete;
-40039: 
-40039: 
-40039:       wide_string
-40039:       from_bytes(char __byte)
-40039:       {
-40039:  char __bytes[2] = { __byte };
-40039:  return from_bytes(__bytes, __bytes+1);
-40039:       }
-40039: 
-40039:       wide_string
-40039:       from_bytes(const char* __ptr)
-40039:       { return from_bytes(__ptr, __ptr+char_traits<char>::length(__ptr)); }
-40039: 
-40039:       wide_string
-40039:       from_bytes(const byte_string& __str)
-40039:       {
-40039:  auto __ptr = __str.data();
-40039:  return from_bytes(__ptr, __ptr + __str.size());
-40039:       }
-40039: 
-40039:       wide_string
-40039:       from_bytes(const char* __first, const char* __last)
-40039:       {
-40039:  if (!_M_with_cvtstate)
-40039:    _M_state = state_type();
-40039:  wide_string __out{ _M_wide_err_string.get_allocator() };
-40039:  if (__str_codecvt_in(__first, __last, __out, *_M_cvt, _M_state,
-40039:         _M_count))
-40039:    return __out;
-40039:  if (_M_with_strings)
-40039:    return _M_wide_err_string;
-40039:  __throw_range_error("wstring_convert::from_bytes");
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       byte_string
-40039:       to_bytes(_Elem __wchar)
-40039:       {
-40039:  _Elem __wchars[2] = { __wchar };
-40039:  return to_bytes(__wchars, __wchars+1);
-40039:       }
-40039: 
-40039:       byte_string
-40039:       to_bytes(const _Elem* __ptr)
-40039:       {
-40039:  return to_bytes(__ptr, __ptr+wide_string::traits_type::length(__ptr));
-40039:       }
-40039: 
-40039:       byte_string
-40039:       to_bytes(const wide_string& __wstr)
-40039:       {
-40039:  auto __ptr = __wstr.data();
-40039:  return to_bytes(__ptr, __ptr + __wstr.size());
-40039:       }
-40039: 
-40039:       byte_string
-40039:       to_bytes(const _Elem* __first, const _Elem* __last)
-40039:       {
-40039:  if (!_M_with_cvtstate)
-40039:    _M_state = state_type();
-40039:  byte_string __out{ _M_byte_err_string.get_allocator() };
-40039:  if (__str_codecvt_out(__first, __last, __out, *_M_cvt, _M_state,
-40039:          _M_count))
-40039:    return __out;
-40039:  if (_M_with_strings)
-40039:    return _M_byte_err_string;
-40039:  __throw_range_error("wstring_convert::to_bytes");
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       size_t converted() const noexcept { return _M_count; }
-40039: 
-40039: 
-40039:       state_type state() const { return _M_state; }
-40039: 
-40039:     private:
-40039:       unique_ptr<_Codecvt> _M_cvt;
-40039:       byte_string _M_byte_err_string;
-40039:       wide_string _M_wide_err_string;
-40039:       state_type _M_state = state_type();
-40039:       size_t _M_count = 0;
-40039:       bool _M_with_cvtstate = false;
-40039:       bool _M_with_strings = false;
-40039:     };
-40039: 
-40039: }
-40039: 
-40039: 
-40039:   template<typename _Codecvt, typename _Elem = wchar_t,
-40039:     typename _Tr = char_traits<_Elem>>
-40039:     class wbuffer_convert : public basic_streambuf<_Elem, _Tr>
-40039:     {
-40039:       typedef basic_streambuf<_Elem, _Tr> _Wide_streambuf;
-40039: 
-40039:     public:
-40039:       typedef typename _Codecvt::state_type state_type;
-40039: # 336 "/usr/include/c++/8/bits/locale_conv.h" 3
-40039:       explicit
-40039:       wbuffer_convert(streambuf* __bytebuf = 0, _Codecvt* __pcvt = new _Codecvt,
-40039:         state_type __state = state_type())
-40039:       : _M_buf(__bytebuf), _M_cvt(__pcvt), _M_state(__state)
-40039:       {
-40039:  if (!_M_cvt)
-40039:    __throw_logic_error("wbuffer_convert");
-40039: 
-40039:  _M_always_noconv = _M_cvt->always_noconv();
-40039: 
-40039:  if (_M_buf)
-40039:    {
-40039:      this->setp(_M_put_area, _M_put_area + _S_buffer_length);
-40039:      this->setg(_M_get_area + _S_putback_length,
-40039:          _M_get_area + _S_putback_length,
-40039:          _M_get_area + _S_putback_length);
-40039:    }
-40039:       }
-40039: 
-40039:       ~wbuffer_convert() = default;
-40039: 
-40039: 
-40039: 
-40039:       wbuffer_convert(const wbuffer_convert&) = delete;
-40039:       wbuffer_convert& operator=(const wbuffer_convert&) = delete;
-40039: 
-40039:       streambuf* rdbuf() const noexcept { return _M_buf; }
-40039: 
-40039:       streambuf*
-40039:       rdbuf(streambuf *__bytebuf) noexcept
-40039:       {
-40039:  auto __prev = _M_buf;
-40039:  _M_buf = __bytebuf;
-40039:  return __prev;
-40039:       }
-40039: 
-40039: 
-40039:       state_type state() const noexcept { return _M_state; }
-40039: 
-40039:     protected:
-40039:       int
-40039:       sync()
-40039:       { return _M_buf && _M_conv_put() && !_M_buf->pubsync() ? 0 : -1; }
-40039: 
-40039:       typename _Wide_streambuf::int_type
-40039:       overflow(typename _Wide_streambuf::int_type __out)
-40039:       {
-40039:  if (!_M_buf || !_M_conv_put())
-40039:    return _Tr::eof();
-40039:  else if (!_Tr::eq_int_type(__out, _Tr::eof()))
-40039:    return this->sputc(__out);
-40039:  return _Tr::not_eof(__out);
-40039:       }
-40039: 
-40039:       typename _Wide_streambuf::int_type
-40039:       underflow()
-40039:       {
-40039:  if (!_M_buf)
-40039:    return _Tr::eof();
-40039: 
-40039:  if (this->gptr() < this->egptr() || (_M_buf && _M_conv_get()))
-40039:    return _Tr::to_int_type(*this->gptr());
-40039:  else
-40039:    return _Tr::eof();
-40039:       }
-40039: 
-40039:       streamsize
-40039:       xsputn(const typename _Wide_streambuf::char_type* __s, streamsize __n)
-40039:       {
-40039:  if (!_M_buf || __n == 0)
-40039:    return 0;
-40039:  streamsize __done = 0;
-40039:  do
-40039:  {
-40039:    auto __nn = std::min<streamsize>(this->epptr() - this->pptr(),
-40039:         __n - __done);
-40039:    _Tr::copy(this->pptr(), __s + __done, __nn);
-40039:    this->pbump(__nn);
-40039:    __done += __nn;
-40039:  } while (__done < __n && _M_conv_put());
-40039:  return __done;
-40039:       }
-40039: 
-40039:     private:
-40039: 
-40039:       bool
-40039:       _M_conv_get()
-40039:       {
-40039:  const streamsize __pb1 = this->gptr() - this->eback();
-40039:  const streamsize __pb2 = _S_putback_length;
-40039:  const streamsize __npb = std::min(__pb1, __pb2);
-40039: 
-40039:  _Tr::move(_M_get_area + _S_putback_length - __npb,
-40039:     this->gptr() - __npb, __npb);
-40039: 
-40039:  streamsize __nbytes = sizeof(_M_get_buf) - _M_unconv;
-40039:  __nbytes = std::min(__nbytes, _M_buf->in_avail());
-40039:  if (__nbytes < 1)
-40039:    __nbytes = 1;
-40039:  __nbytes = _M_buf->sgetn(_M_get_buf + _M_unconv, __nbytes);
-40039:  if (__nbytes < 1)
-40039:    return false;
-40039:  __nbytes += _M_unconv;
-40039: 
-40039: 
-40039: 
-40039:  _Elem* __outbuf = _M_get_area + _S_putback_length;
-40039:  _Elem* __outnext = __outbuf;
-40039:  const char* __bnext = _M_get_buf;
-40039: 
-40039:  codecvt_base::result __result;
-40039:  if (_M_always_noconv)
-40039:    __result = codecvt_base::noconv;
-40039:  else
-40039:    {
-40039:      _Elem* __outend = _M_get_area + _S_buffer_length;
-40039: 
-40039:      __result = _M_cvt->in(_M_state,
-40039:       __bnext, __bnext + __nbytes, __bnext,
-40039:       __outbuf, __outend, __outnext);
-40039:    }
-40039: 
-40039:  if (__result == codecvt_base::noconv)
-40039:    {
-40039: 
-40039:      auto __get_buf = reinterpret_cast<const _Elem*>(_M_get_buf);
-40039:      _Tr::copy(__outbuf, __get_buf, __nbytes);
-40039:      _M_unconv = 0;
-40039:      return true;
-40039:    }
-40039: 
-40039:  if ((_M_unconv = _M_get_buf + __nbytes - __bnext))
-40039:    char_traits<char>::move(_M_get_buf, __bnext, _M_unconv);
-40039: 
-40039:  this->setg(__outbuf, __outbuf, __outnext);
-40039: 
-40039:  return __result != codecvt_base::error;
-40039:       }
-40039: 
-40039: 
-40039:       bool
-40039:       _M_put(...)
-40039:       { return false; }
-40039: 
-40039:       bool
-40039:       _M_put(const char* __p, streamsize __n)
-40039:       {
-40039:  if (_M_buf->sputn(__p, __n) < __n)
-40039:    return false;
-40039:  return true;
-40039:       }
-40039: 
-40039: 
-40039:       bool
-40039:       _M_conv_put()
-40039:       {
-40039:  _Elem* const __first = this->pbase();
-40039:  const _Elem* const __last = this->pptr();
-40039:  const streamsize __pending = __last - __first;
-40039: 
-40039:  if (_M_always_noconv)
-40039:    return _M_put(__first, __pending);
-40039: 
-40039:  char __outbuf[2 * _S_buffer_length];
-40039: 
-40039:  const _Elem* __next = __first;
-40039:  const _Elem* __start;
-40039:  do
-40039:    {
-40039:      __start = __next;
-40039:      char* __outnext = __outbuf;
-40039:      char* const __outlast = __outbuf + sizeof(__outbuf);
-40039:      auto __result = _M_cvt->out(_M_state, __next, __last, __next,
-40039:      __outnext, __outlast, __outnext);
-40039:      if (__result == codecvt_base::error)
-40039:        return false;
-40039:      else if (__result == codecvt_base::noconv)
-40039:        return _M_put(__next, __pending);
-40039: 
-40039:      if (!_M_put(__outbuf, __outnext - __outbuf))
-40039:        return false;
-40039:    }
-40039:  while (__next != __last && __next != __start);
-40039: 
-40039:  if (__next != __last)
-40039:    _Tr::move(__first, __next, __last - __next);
-40039: 
-40039:  this->pbump(__first - __next);
-40039:  return __next != __first;
-40039:       }
-40039: 
-40039:       streambuf* _M_buf;
-40039:       unique_ptr<_Codecvt> _M_cvt;
-40039:       state_type _M_state;
-40039: 
-40039:       static const streamsize _S_buffer_length = 32;
-40039:       static const streamsize _S_putback_length = 3;
-40039:       _Elem _M_put_area[_S_buffer_length];
-40039:       _Elem _M_get_area[_S_buffer_length];
-40039:       streamsize _M_unconv = 0;
-40039:       char _M_get_buf[_S_buffer_length-_S_putback_length];
-40039:       bool _M_always_noconv;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 44 "/usr/include/c++/8/locale" 2 3
-40039: # 44 "/usr/include/c++/8/iomanip" 2 3
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/quoted_string.h" 1 3
-40039: # 33 "/usr/include/c++/8/bits/quoted_string.h" 3
-40039:        
-40039: # 34 "/usr/include/c++/8/bits/quoted_string.h" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   namespace __detail {
-40039: 
-40039: 
-40039: 
-40039:     template<typename _String, typename _CharT>
-40039:       struct _Quoted_string
-40039:       {
-40039:  static_assert(is_reference<_String>::value
-40039:      || is_pointer<_String>::value,
-40039:         "String type must be pointer or reference");
-40039: 
-40039:  _Quoted_string(_String __str, _CharT __del, _CharT __esc)
-40039:  : _M_string(__str), _M_delim{__del}, _M_escape{__esc}
-40039:  { }
-40039: 
-40039:  _Quoted_string&
-40039:  operator=(_Quoted_string&) = delete;
-40039: 
-40039:  _String _M_string;
-40039:  _CharT _M_delim;
-40039:  _CharT _M_escape;
-40039:       };
-40039: # 91 "/usr/include/c++/8/bits/quoted_string.h" 3
-40039:     template<typename _CharT, typename _Traits>
-40039:       std::basic_ostream<_CharT, _Traits>&
-40039:       operator<<(std::basic_ostream<_CharT, _Traits>& __os,
-40039:    const _Quoted_string<const _CharT*, _CharT>& __str)
-40039:       {
-40039:  std::basic_ostringstream<_CharT, _Traits> __ostr;
-40039:  __ostr << __str._M_delim;
-40039:  for (const _CharT* __c = __str._M_string; *__c; ++__c)
-40039:    {
-40039:      if (*__c == __str._M_delim || *__c == __str._M_escape)
-40039:        __ostr << __str._M_escape;
-40039:      __ostr << *__c;
-40039:    }
-40039:  __ostr << __str._M_delim;
-40039: 
-40039:  return __os << __ostr.str();
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     template<typename _CharT, typename _Traits, typename _String>
-40039:       std::basic_ostream<_CharT, _Traits>&
-40039:       operator<<(std::basic_ostream<_CharT, _Traits>& __os,
-40039:    const _Quoted_string<_String, _CharT>& __str)
-40039:       {
-40039:  std::basic_ostringstream<_CharT, _Traits> __ostr;
-40039:  __ostr << __str._M_delim;
-40039:  for (auto __c : __str._M_string)
-40039:    {
-40039:      if (__c == __str._M_delim || __c == __str._M_escape)
-40039:        __ostr << __str._M_escape;
-40039:      __ostr << __c;
-40039:    }
-40039:  __ostr << __str._M_delim;
-40039: 
-40039:  return __os << __ostr.str();
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     template<typename _CharT, typename _Traits, typename _Alloc>
-40039:       std::basic_istream<_CharT, _Traits>&
-40039:       operator>>(std::basic_istream<_CharT, _Traits>& __is,
-40039:    const _Quoted_string<basic_string<_CharT, _Traits, _Alloc>&,
-40039:           _CharT>& __str)
-40039:       {
-40039:  _CharT __c;
-40039:  __is >> __c;
-40039:  if (!__is.good())
-40039:    return __is;
-40039:  if (__c != __str._M_delim)
-40039:    {
-40039:      __is.unget();
-40039:      __is >> __str._M_string;
-40039:      return __is;
-40039:    }
-40039:  __str._M_string.clear();
-40039:  std::ios_base::fmtflags __flags
-40039:    = __is.flags(__is.flags() & ~std::ios_base::skipws);
-40039:  do
-40039:    {
-40039:      __is >> __c;
-40039:      if (!__is.good())
-40039:        break;
-40039:      if (__c == __str._M_escape)
-40039:        {
-40039:   __is >> __c;
-40039:   if (!__is.good())
-40039:     break;
-40039:        }
-40039:      else if (__c == __str._M_delim)
-40039:        break;
-40039:      __str._M_string += __c;
-40039:    }
-40039:  while (true);
-40039:  __is.setf(__flags);
-40039: 
-40039:  return __is;
-40039:       }
-40039:   }
-40039: 
-40039: 
-40039: }
-40039: # 46 "/usr/include/c++/8/iomanip" 2 3
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   struct _Resetiosflags { ios_base::fmtflags _M_mask; };
-40039: # 65 "/usr/include/c++/8/iomanip" 3
-40039:   inline _Resetiosflags
-40039:   resetiosflags(ios_base::fmtflags __mask)
-40039:   { return { __mask }; }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     inline basic_istream<_CharT, _Traits>&
-40039:     operator>>(basic_istream<_CharT, _Traits>& __is, _Resetiosflags __f)
-40039:     {
-40039:       __is.setf(ios_base::fmtflags(0), __f._M_mask);
-40039:       return __is;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     inline basic_ostream<_CharT, _Traits>&
-40039:     operator<<(basic_ostream<_CharT, _Traits>& __os, _Resetiosflags __f)
-40039:     {
-40039:       __os.setf(ios_base::fmtflags(0), __f._M_mask);
-40039:       return __os;
-40039:     }
-40039: 
-40039: 
-40039:   struct _Setiosflags { ios_base::fmtflags _M_mask; };
-40039: # 95 "/usr/include/c++/8/iomanip" 3
-40039:   inline _Setiosflags
-40039:   setiosflags(ios_base::fmtflags __mask)
-40039:   { return { __mask }; }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     inline basic_istream<_CharT, _Traits>&
-40039:     operator>>(basic_istream<_CharT, _Traits>& __is, _Setiosflags __f)
-40039:     {
-40039:       __is.setf(__f._M_mask);
-40039:       return __is;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     inline basic_ostream<_CharT, _Traits>&
-40039:     operator<<(basic_ostream<_CharT, _Traits>& __os, _Setiosflags __f)
-40039:     {
-40039:       __os.setf(__f._M_mask);
-40039:       return __os;
-40039:     }
-40039: 
-40039: 
-40039:   struct _Setbase { int _M_base; };
-40039: # 126 "/usr/include/c++/8/iomanip" 3
-40039:   inline _Setbase
-40039:   setbase(int __base)
-40039:   { return { __base }; }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     inline basic_istream<_CharT, _Traits>&
-40039:     operator>>(basic_istream<_CharT, _Traits>& __is, _Setbase __f)
-40039:     {
-40039:       __is.setf(__f._M_base == 8 ? ios_base::oct :
-40039:   __f._M_base == 10 ? ios_base::dec :
-40039:   __f._M_base == 16 ? ios_base::hex :
-40039:   ios_base::fmtflags(0), ios_base::basefield);
-40039:       return __is;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     inline basic_ostream<_CharT, _Traits>&
-40039:     operator<<(basic_ostream<_CharT, _Traits>& __os, _Setbase __f)
-40039:     {
-40039:       __os.setf(__f._M_base == 8 ? ios_base::oct :
-40039:   __f._M_base == 10 ? ios_base::dec :
-40039:   __f._M_base == 16 ? ios_base::hex :
-40039:   ios_base::fmtflags(0), ios_base::basefield);
-40039:       return __os;
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _CharT>
-40039:     struct _Setfill { _CharT _M_c; };
-40039: # 163 "/usr/include/c++/8/iomanip" 3
-40039:   template<typename _CharT>
-40039:     inline _Setfill<_CharT>
-40039:     setfill(_CharT __c)
-40039:     { return { __c }; }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     inline basic_istream<_CharT, _Traits>&
-40039:     operator>>(basic_istream<_CharT, _Traits>& __is, _Setfill<_CharT> __f)
-40039:     {
-40039:       __is.fill(__f._M_c);
-40039:       return __is;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     inline basic_ostream<_CharT, _Traits>&
-40039:     operator<<(basic_ostream<_CharT, _Traits>& __os, _Setfill<_CharT> __f)
-40039:     {
-40039:       __os.fill(__f._M_c);
-40039:       return __os;
-40039:     }
-40039: 
-40039: 
-40039:   struct _Setprecision { int _M_n; };
-40039: # 194 "/usr/include/c++/8/iomanip" 3
-40039:   inline _Setprecision
-40039:   setprecision(int __n)
-40039:   { return { __n }; }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     inline basic_istream<_CharT, _Traits>&
-40039:     operator>>(basic_istream<_CharT, _Traits>& __is, _Setprecision __f)
-40039:     {
-40039:       __is.precision(__f._M_n);
-40039:       return __is;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     inline basic_ostream<_CharT, _Traits>&
-40039:     operator<<(basic_ostream<_CharT, _Traits>& __os, _Setprecision __f)
-40039:     {
-40039:       __os.precision(__f._M_n);
-40039:       return __os;
-40039:     }
-40039: 
-40039: 
-40039:   struct _Setw { int _M_n; };
-40039: # 224 "/usr/include/c++/8/iomanip" 3
-40039:   inline _Setw
-40039:   setw(int __n)
-40039:   { return { __n }; }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     inline basic_istream<_CharT, _Traits>&
-40039:     operator>>(basic_istream<_CharT, _Traits>& __is, _Setw __f)
-40039:     {
-40039:       __is.width(__f._M_n);
-40039:       return __is;
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     inline basic_ostream<_CharT, _Traits>&
-40039:     operator<<(basic_ostream<_CharT, _Traits>& __os, _Setw __f)
-40039:     {
-40039:       __os.width(__f._M_n);
-40039:       return __os;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _MoneyT>
-40039:     struct _Get_money { _MoneyT& _M_mon; bool _M_intl; };
-40039: # 257 "/usr/include/c++/8/iomanip" 3
-40039:   template<typename _MoneyT>
-40039:     inline _Get_money<_MoneyT>
-40039:     get_money(_MoneyT& __mon, bool __intl = false)
-40039:     { return { __mon, __intl }; }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _MoneyT>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     operator>>(basic_istream<_CharT, _Traits>& __is, _Get_money<_MoneyT> __f)
-40039:     {
-40039:       typename basic_istream<_CharT, _Traits>::sentry __cerb(__is, false);
-40039:       if (__cerb)
-40039:  {
-40039:    ios_base::iostate __err = ios_base::goodbit;
-40039:    try
-40039:      {
-40039:        typedef istreambuf_iterator<_CharT, _Traits> _Iter;
-40039:        typedef money_get<_CharT, _Iter> _MoneyGet;
-40039: 
-40039:        const _MoneyGet& __mg = use_facet<_MoneyGet>(__is.getloc());
-40039:        __mg.get(_Iter(__is.rdbuf()), _Iter(), __f._M_intl,
-40039:          __is, __err, __f._M_mon);
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        __is._M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { __is._M_setstate(ios_base::badbit); }
-40039:    if (__err)
-40039:      __is.setstate(__err);
-40039:  }
-40039:       return __is;
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _MoneyT>
-40039:     struct _Put_money { const _MoneyT& _M_mon; bool _M_intl; };
-40039: # 304 "/usr/include/c++/8/iomanip" 3
-40039:   template<typename _MoneyT>
-40039:     inline _Put_money<_MoneyT>
-40039:     put_money(const _MoneyT& __mon, bool __intl = false)
-40039:     { return { __mon, __intl }; }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _MoneyT>
-40039:     basic_ostream<_CharT, _Traits>&
-40039:     operator<<(basic_ostream<_CharT, _Traits>& __os, _Put_money<_MoneyT> __f)
-40039:     {
-40039:       typename basic_ostream<_CharT, _Traits>::sentry __cerb(__os);
-40039:       if (__cerb)
-40039:  {
-40039:    ios_base::iostate __err = ios_base::goodbit;
-40039:    try
-40039:      {
-40039:        typedef ostreambuf_iterator<_CharT, _Traits> _Iter;
-40039:        typedef money_put<_CharT, _Iter> _MoneyPut;
-40039: 
-40039:        const _MoneyPut& __mp = use_facet<_MoneyPut>(__os.getloc());
-40039:        if (__mp.put(_Iter(__os.rdbuf()), __f._M_intl, __os,
-40039:       __os.fill(), __f._M_mon).failed())
-40039:   __err |= ios_base::badbit;
-40039:      }
-40039:    catch(__cxxabiv1::__forced_unwind&)
-40039:      {
-40039:        __os._M_setstate(ios_base::badbit);
-40039:        throw;
-40039:      }
-40039:    catch(...)
-40039:      { __os._M_setstate(ios_base::badbit); }
-40039:    if (__err)
-40039:      __os.setstate(__err);
-40039:  }
-40039:       return __os;
-40039:     }
-40039: 
-40039:   template<typename _CharT>
-40039:     struct _Put_time
-40039:     {
-40039:       const std::tm* _M_tmb;
-40039:       const _CharT* _M_fmt;
-40039:     };
-40039: # 356 "/usr/include/c++/8/iomanip" 3
-40039:   template<typename _CharT>
-40039:     inline _Put_time<_CharT>
-40039:     put_time(const std::tm* __tmb, const _CharT* __fmt)
-40039:     { return { __tmb, __fmt }; }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_ostream<_CharT, _Traits>&
-40039:     operator<<(basic_ostream<_CharT, _Traits>& __os, _Put_time<_CharT> __f)
-40039:     {
-40039:       typename basic_ostream<_CharT, _Traits>::sentry __cerb(__os);
-40039:       if (__cerb)
-40039:         {
-40039:           ios_base::iostate __err = ios_base::goodbit;
-40039:           try
-40039:             {
-40039:               typedef ostreambuf_iterator<_CharT, _Traits> _Iter;
-40039:               typedef time_put<_CharT, _Iter> _TimePut;
-40039: 
-40039:               const _CharT* const __fmt_end = __f._M_fmt +
-40039:                 _Traits::length(__f._M_fmt);
-40039: 
-40039:               const _TimePut& __mp = use_facet<_TimePut>(__os.getloc());
-40039:               if (__mp.put(_Iter(__os.rdbuf()), __os, __os.fill(),
-40039:                            __f._M_tmb, __f._M_fmt, __fmt_end).failed())
-40039:                 __err |= ios_base::badbit;
-40039:             }
-40039:           catch(__cxxabiv1::__forced_unwind&)
-40039:             {
-40039:               __os._M_setstate(ios_base::badbit);
-40039:               throw;
-40039:             }
-40039:           catch(...)
-40039:             { __os._M_setstate(ios_base::badbit); }
-40039:           if (__err)
-40039:             __os.setstate(__err);
-40039:         }
-40039:       return __os;
-40039:     }
-40039: 
-40039:   template<typename _CharT>
-40039:     struct _Get_time
-40039:     {
-40039:       std::tm* _M_tmb;
-40039:       const _CharT* _M_fmt;
-40039:     };
-40039: # 411 "/usr/include/c++/8/iomanip" 3
-40039:   template<typename _CharT>
-40039:     inline _Get_time<_CharT>
-40039:     get_time(std::tm* __tmb, const _CharT* __fmt)
-40039:     { return { __tmb, __fmt }; }
-40039: 
-40039:   template<typename _CharT, typename _Traits>
-40039:     basic_istream<_CharT, _Traits>&
-40039:     operator>>(basic_istream<_CharT, _Traits>& __is, _Get_time<_CharT> __f)
-40039:     {
-40039:       typename basic_istream<_CharT, _Traits>::sentry __cerb(__is, false);
-40039:       if (__cerb)
-40039:         {
-40039:           ios_base::iostate __err = ios_base::goodbit;
-40039:           try
-40039:             {
-40039:               typedef istreambuf_iterator<_CharT, _Traits> _Iter;
-40039:               typedef time_get<_CharT, _Iter> _TimeGet;
-40039: 
-40039:               const _CharT* const __fmt_end = __f._M_fmt +
-40039:                 _Traits::length(__f._M_fmt);
-40039: 
-40039:               const _TimeGet& __mg = use_facet<_TimeGet>(__is.getloc());
-40039:               __mg.get(_Iter(__is.rdbuf()), _Iter(), __is,
-40039:                        __err, __f._M_tmb, __f._M_fmt, __fmt_end);
-40039:             }
-40039:           catch(__cxxabiv1::__forced_unwind&)
-40039:             {
-40039:               __is._M_setstate(ios_base::badbit);
-40039:               throw;
-40039:             }
-40039:           catch(...)
-40039:             { __is._M_setstate(ios_base::badbit); }
-40039:           if (__err)
-40039:             __is.setstate(__err);
-40039:         }
-40039:       return __is;
-40039:     }
-40039: # 459 "/usr/include/c++/8/iomanip" 3
-40039:   template<typename _CharT>
-40039:     inline auto
-40039:     quoted(const _CharT* __string,
-40039:     _CharT __delim = _CharT('"'), _CharT __escape = _CharT('\\'))
-40039:     {
-40039:       return __detail::_Quoted_string<const _CharT*, _CharT>(__string, __delim,
-40039:             __escape);
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline auto
-40039:     quoted(const basic_string<_CharT, _Traits, _Alloc>& __string,
-40039:     _CharT __delim = _CharT('"'), _CharT __escape = _CharT('\\'))
-40039:     {
-40039:       return __detail::_Quoted_string<
-40039:  const basic_string<_CharT, _Traits, _Alloc>&, _CharT>(
-40039:      __string, __delim, __escape);
-40039:     }
-40039: 
-40039:   template<typename _CharT, typename _Traits, typename _Alloc>
-40039:     inline auto
-40039:     quoted(basic_string<_CharT, _Traits, _Alloc>& __string,
-40039:     _CharT __delim = _CharT('"'), _CharT __escape = _CharT('\\'))
-40039:     {
-40039:       return __detail::_Quoted_string<
-40039:  basic_string<_CharT, _Traits, _Alloc>&, _CharT>(
-40039:      __string, __delim, __escape);
-40039:     }
-40039: # 508 "/usr/include/c++/8/iomanip" 3
-40039:   extern template ostream& operator<<(ostream&, _Setfill<char>);
-40039:   extern template ostream& operator<<(ostream&, _Setiosflags);
-40039:   extern template ostream& operator<<(ostream&, _Resetiosflags);
-40039:   extern template ostream& operator<<(ostream&, _Setbase);
-40039:   extern template ostream& operator<<(ostream&, _Setprecision);
-40039:   extern template ostream& operator<<(ostream&, _Setw);
-40039:   extern template istream& operator>>(istream&, _Setfill<char>);
-40039:   extern template istream& operator>>(istream&, _Setiosflags);
-40039:   extern template istream& operator>>(istream&, _Resetiosflags);
-40039:   extern template istream& operator>>(istream&, _Setbase);
-40039:   extern template istream& operator>>(istream&, _Setprecision);
-40039:   extern template istream& operator>>(istream&, _Setw);
-40039: 
-40039: 
-40039:   extern template wostream& operator<<(wostream&, _Setfill<wchar_t>);
-40039:   extern template wostream& operator<<(wostream&, _Setiosflags);
-40039:   extern template wostream& operator<<(wostream&, _Resetiosflags);
-40039:   extern template wostream& operator<<(wostream&, _Setbase);
-40039:   extern template wostream& operator<<(wostream&, _Setprecision);
-40039:   extern template wostream& operator<<(wostream&, _Setw);
-40039:   extern template wistream& operator>>(wistream&, _Setfill<wchar_t>);
-40039:   extern template wistream& operator>>(wistream&, _Setiosflags);
-40039:   extern template wistream& operator>>(wistream&, _Resetiosflags);
-40039:   extern template wistream& operator>>(wistream&, _Setbase);
-40039:   extern template wistream& operator>>(wistream&, _Setprecision);
-40039:   extern template wistream& operator>>(wistream&, _Setw);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 29 "../../src/Checked_Number_templates.hh" 2
-40039: 
-40039: 
-40039: 
-40039: # 31 "../../src/Checked_Number_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: typename Enable_If<Is_Native_Or_Checked<T>::value, void>::type
-40039: ascii_dump(std::ostream& s, const T& t) {
-40039:   if (std::numeric_limits<T>::is_exact) {
-40039: 
-40039:     s << t;
-40039:   }
-40039:   else {
-40039: 
-40039: 
-40039:     const std::ios::fmtflags old_flags = s.setf(std::ios::hex,
-40039:                                                 std::ios::basefield);
-40039:     const unsigned char* p = reinterpret_cast<const unsigned char*>(&t);
-40039:     for (unsigned i = 0; i < sizeof(T); ++i) {
-40039:       s << std::setw(2) << std::setfill('0') << static_cast<unsigned>(p[i]);
-40039:     }
-40039:     s.flags(old_flags);
-40039: 
-40039:     s << " (" << t << ")";
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
-40039: ascii_load(std::istream& s, T& t) {
-40039:   if (std::numeric_limits<T>::is_exact) {
-40039: 
-40039:     s >> t;
-40039:     return !s.fail();
-40039:   }
-40039:   else {
-40039: 
-40039: 
-40039:     std::string str;
-40039:     if (!(s >> str) || str.size() != 2*sizeof(T)) {
-40039:       return false;
-40039:     }
-40039:     unsigned char* p = reinterpret_cast<unsigned char*>(&t);
-40039: 
-40039:     for (unsigned i = 0; i < sizeof(T); ++i) {
-40039:       unsigned byte_value = 0;
-40039:       for (unsigned j = 0; j < 2; ++j) {
-40039:         byte_value <<= 4;
-40039:         unsigned half_byte_value;
-40039: 
-40039:         switch (str[2*i + j]) {
-40039:         case '0':
-40039:           half_byte_value = 0;
-40039:           break;
-40039:         case '1':
-40039:           half_byte_value = 1;
-40039:           break;
-40039:         case '2':
-40039:           half_byte_value = 2;
-40039:           break;
-40039:         case '3':
-40039:           half_byte_value = 3;
-40039:           break;
-40039:         case '4':
-40039:           half_byte_value = 4;
-40039:           break;
-40039:         case '5':
-40039:           half_byte_value = 5;
-40039:           break;
-40039:         case '6':
-40039:           half_byte_value = 6;
-40039:           break;
-40039:         case '7':
-40039:           half_byte_value = 7;
-40039:           break;
-40039:         case '8':
-40039:           half_byte_value = 8;
-40039:           break;
-40039:         case '9':
-40039:           half_byte_value = 9;
-40039:           break;
-40039:         case 'A':
-40039:         case 'a':
-40039:           half_byte_value = 10;
-40039:           break;
-40039:         case 'B':
-40039:         case 'b':
-40039:           half_byte_value = 11;
-40039:           break;
-40039:         case 'C':
-40039:         case 'c':
-40039:           half_byte_value = 12;
-40039:           break;
-40039:         case 'D':
-40039:         case 'd':
-40039:           half_byte_value = 13;
-40039:           break;
-40039:         case 'E':
-40039:         case 'e':
-40039:           half_byte_value = 14;
-40039:           break;
-40039:         case 'F':
-40039:         case 'f':
-40039:           half_byte_value = 15;
-40039:           break;
-40039:         default:
-40039:           return false;
-40039:         }
-40039:         byte_value += half_byte_value;
-40039:       }
-40039:       ((void) 0);
-40039:       p[i] = static_cast<unsigned char>(byte_value);
-40039:     }
-40039: 
-40039:     if (!(s >> str)) {
-40039:       return false;
-40039:     }
-40039:     const std::string::size_type sz = str.size();
-40039:     return sz > 2 && str[0] == '(' && str[sz-1] == ')';
-40039:   }
-40039: }
-40039: 
-40039: }
-40039: # 1069 "../../src/Checked_Number_defs.hh" 2
-40039: # 28 "../../src/checked_numeric_limits.hh" 2
-40039: 
-40039: 
-40039: 
-40039: namespace std {
-40039: 
-40039: using namespace Parma_Polyhedra_Library;
-40039: # 74 "../../src/checked_numeric_limits.hh"
-40039: template <typename Policy> class numeric_limits<Checked_Number<char, Policy> > : public numeric_limits<char> { private: typedef Checked_Number<char, Policy> Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int<Policy, char>::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int<Policy, char>::max; return v; } static Type infinity() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } };
-40039: 
-40039: template <typename Policy> class numeric_limits<Checked_Number<signed char, Policy> > : public numeric_limits<signed char> { private: typedef Checked_Number<signed char, Policy> Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int<Policy, signed char>::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int<Policy, signed char>::max; return v; } static Type infinity() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } };
-40039: template <typename Policy> class numeric_limits<Checked_Number<signed short, Policy> > : public numeric_limits<signed short> { private: typedef Checked_Number<signed short, Policy> Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int<Policy, signed short>::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int<Policy, signed short>::max; return v; } static Type infinity() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } };
-40039: template <typename Policy> class numeric_limits<Checked_Number<signed int, Policy> > : public numeric_limits<signed int> { private: typedef Checked_Number<signed int, Policy> Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int<Policy, signed int>::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int<Policy, signed int>::max; return v; } static Type infinity() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } };
-40039: template <typename Policy> class numeric_limits<Checked_Number<signed long, Policy> > : public numeric_limits<signed long> { private: typedef Checked_Number<signed long, Policy> Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int<Policy, signed long>::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int<Policy, signed long>::max; return v; } static Type infinity() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } };
-40039: template <typename Policy> class numeric_limits<Checked_Number<signed long long, Policy> > : public numeric_limits<signed long long> { private: typedef Checked_Number<signed long long, Policy> Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int<Policy, signed long long>::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int<Policy, signed long long>::max; return v; } static Type infinity() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } };
-40039: 
-40039: template <typename Policy> class numeric_limits<Checked_Number<unsigned char, Policy> > : public numeric_limits<unsigned char> { private: typedef Checked_Number<unsigned char, Policy> Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int<Policy, unsigned char>::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int<Policy, unsigned char>::max; return v; } static Type infinity() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } };
-40039: template <typename Policy> class numeric_limits<Checked_Number<unsigned short, Policy> > : public numeric_limits<unsigned short> { private: typedef Checked_Number<unsigned short, Policy> Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int<Policy, unsigned short>::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int<Policy, unsigned short>::max; return v; } static Type infinity() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } };
-40039: template <typename Policy> class numeric_limits<Checked_Number<unsigned int, Policy> > : public numeric_limits<unsigned int> { private: typedef Checked_Number<unsigned int, Policy> Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int<Policy, unsigned int>::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int<Policy, unsigned int>::max; return v; } static Type infinity() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } };
-40039: template <typename Policy> class numeric_limits<Checked_Number<unsigned long, Policy> > : public numeric_limits<unsigned long> { private: typedef Checked_Number<unsigned long, Policy> Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int<Policy, unsigned long>::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int<Policy, unsigned long>::max; return v; } static Type infinity() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } };
-40039: template <typename Policy> class numeric_limits<Checked_Number<unsigned long long, Policy> > : public numeric_limits<unsigned long long> { private: typedef Checked_Number<unsigned long long, Policy> Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int<Policy, unsigned long long>::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int<Policy, unsigned long long>::max; return v; } static Type infinity() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } };
-40039: # 98 "../../src/checked_numeric_limits.hh"
-40039: template <typename Policy> struct numeric_limits<Checked_Number<float, Policy> > : public numeric_limits<float> { };
-40039: 
-40039: 
-40039: template <typename Policy> struct numeric_limits<Checked_Number<double, Policy> > : public numeric_limits<double> { };
-40039: 
-40039: 
-40039: template <typename Policy> struct numeric_limits<Checked_Number<long double, Policy> > : public numeric_limits<long double> { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy>
-40039: class
-40039: numeric_limits<Checked_Number<mpz_class, Policy> >
-40039:   : public numeric_limits<mpz_class> {
-40039: private:
-40039:   typedef Checked_Number<mpz_class, Policy> Type;
-40039: 
-40039: public:
-40039:   static const bool has_infinity = Policy::has_infinity;
-40039:   static const bool has_quiet_NaN = Policy::has_nan;
-40039: 
-40039:   static Type infinity() {
-40039:     Type v;
-40039:     Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY,
-40039:                                     ROUND_IGNORE);
-40039:     return v;
-40039:   }
-40039: 
-40039:   static Type quiet_NaN() {
-40039:     Type v;
-40039:     Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE);
-40039:     return v;
-40039:   }
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy>
-40039: class
-40039: numeric_limits<Checked_Number<mpq_class, Policy> >
-40039: : public numeric_limits<mpq_class> {
-40039: private:
-40039:   typedef Checked_Number<mpq_class, Policy> Type;
-40039: 
-40039: public:
-40039:   static const bool has_infinity = Policy::has_infinity;
-40039:   static const bool has_quiet_NaN = Policy::has_nan;
-40039: 
-40039:   static Type infinity() {
-40039:     Type v;
-40039:     Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY,
-40039:                                     ROUND_IGNORE);
-40039:     return v;
-40039:   }
-40039: 
-40039:   static Type quiet_NaN() {
-40039:     Type v;
-40039:     Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE);
-40039:     return v;
-40039:   }
-40039: };
-40039: 
-40039: }
-40039: # 4 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/stdiobuf_defs.hh" 1
-40039: # 27 "../../src/stdiobuf_defs.hh"
-40039: # 1 "../../src/stdiobuf_types.hh" 1
-40039: # 16 "../../src/stdiobuf_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class stdiobuf;
-40039: 
-40039: }
-40039: # 28 "../../src/stdiobuf_defs.hh" 2
-40039: # 1 "/usr/include/c++/8/cstdio" 1 3
-40039: # 39 "/usr/include/c++/8/cstdio" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/cstdio" 3
-40039: # 29 "../../src/stdiobuf_defs.hh" 2
-40039: 
-40039: 
-40039: class Parma_Polyhedra_Library::stdiobuf
-40039:   : public std::basic_streambuf<char, std::char_traits<char> > {
-40039: public:
-40039: 
-40039:   stdiobuf(FILE* file);
-40039: 
-40039: protected:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual int_type underflow();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual int_type uflow();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual std::streamsize xsgetn(char_type* s, std::streamsize n);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual int_type pbackfail(int_type c = traits_type::eof());
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual std::streamsize xsputn(const char_type* s, std::streamsize n);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual int_type overflow(int_type c);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual int sync();
-40039: 
-40039: private:
-40039: 
-40039:   typedef char char_type;
-40039: 
-40039: 
-40039:   typedef std::char_traits<char_type> traits_type;
-40039: 
-40039: 
-40039:   typedef traits_type::int_type int_type;
-40039: 
-40039: 
-40039:   FILE* fp;
-40039: 
-40039: 
-40039:   int_type unget_char_buf;
-40039: };
-40039: 
-40039: # 1 "../../src/stdiobuf_inlines.hh" 1
-40039: # 27 "../../src/stdiobuf_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline
-40039: stdiobuf::stdiobuf(FILE* file)
-40039:   : fp(file), unget_char_buf(traits_type::eof()) {
-40039: }
-40039: 
-40039: }
-40039: # 110 "../../src/stdiobuf_defs.hh" 2
-40039: # 5 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/c_streambuf_defs.hh" 1
-40039: # 27 "../../src/c_streambuf_defs.hh"
-40039: # 1 "../../src/c_streambuf_types.hh" 1
-40039: # 16 "../../src/c_streambuf_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class c_streambuf;
-40039: 
-40039: }
-40039: # 28 "../../src/c_streambuf_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: class Parma_Polyhedra_Library::c_streambuf
-40039:   : public std::basic_streambuf<char, std::char_traits<char> > {
-40039: public:
-40039: 
-40039:   c_streambuf();
-40039: 
-40039: 
-40039:   virtual ~c_streambuf();
-40039: 
-40039: protected:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual int_type underflow();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual int_type uflow();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual std::streamsize xsgetn(char_type* s, std::streamsize n);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual int_type pbackfail(int_type c = traits_type::eof());
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual std::streamsize xsputn(const char_type* s, std::streamsize n);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual int_type overflow(int_type c);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual int sync();
-40039: 
-40039: private:
-40039: 
-40039:   typedef char char_type;
-40039: 
-40039: 
-40039:   typedef std::char_traits<char_type> traits_type;
-40039: 
-40039: 
-40039:   typedef traits_type::int_type int_type;
-40039: 
-40039: 
-40039:   int_type unget_char_buf;
-40039: 
-40039: 
-40039:   int_type next_char_buf;
-40039: 
-40039:   virtual size_t cb_read(char *, size_t) {
-40039:     return 0;
-40039:   }
-40039:   virtual size_t cb_write(const char *, size_t) {
-40039:     return 0;
-40039:   }
-40039:   virtual int cb_sync() {
-40039:     return 0;
-40039:   }
-40039:   virtual int cb_flush() {
-40039:     return 0;
-40039:   }
-40039: };
-40039: 
-40039: # 1 "../../src/c_streambuf_inlines.hh" 1
-40039: # 27 "../../src/c_streambuf_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline
-40039: c_streambuf::c_streambuf()
-40039:   : unget_char_buf(traits_type::eof()), next_char_buf(traits_type::eof()) {
-40039: }
-40039: 
-40039: }
-40039: # 126 "../../src/c_streambuf_defs.hh" 2
-40039: # 6 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/Integer_Interval.hh" 1
-40039: # 27 "../../src/Integer_Interval.hh"
-40039: # 1 "../../src/Interval_defs.hh" 1
-40039: # 27 "../../src/Interval_defs.hh"
-40039: # 1 "../../src/Interval_types.hh" 1
-40039: # 16 "../../src/Interval_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Boundary, typename Info>
-40039: class Interval;
-40039: 
-40039: }
-40039: # 28 "../../src/Interval_defs.hh" 2
-40039: 
-40039: 
-40039: # 1 "../../src/assign_or_swap.hh" 1
-40039: # 28 "../../src/assign_or_swap.hh"
-40039: # 1 "../../src/Has_Assign_Or_Swap.hh" 1
-40039: # 29 "../../src/Has_Assign_Or_Swap.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Enable = void>
-40039: struct Has_Assign_Or_Swap : public False {
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: struct Has_Assign_Or_Swap<T,
-40039:                           typename Enable_If_Is<void (T::*)(T& x),
-40039:                                                 &T::assign_or_swap>::type>
-40039:   : public True {
-40039: };
-40039: 
-40039: }
-40039: # 29 "../../src/assign_or_swap.hh" 2
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: inline typename Enable_If<Has_Assign_Or_Swap<T>::value, void>::type
-40039: assign_or_swap(T& to, T& from) {
-40039:   to.assign_or_swap(from);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: inline typename Enable_If<!Has_Assign_Or_Swap<T>::value
-40039:                           && !Slow_Copy<T>::value, void>::type
-40039: assign_or_swap(T& to, T& from) {
-40039:   to = from;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: inline typename Enable_If<!Has_Assign_Or_Swap<T>::value
-40039:                           && Slow_Copy<T>::value, void>::type
-40039: assign_or_swap(T& to, T& from) {
-40039:   using std::swap;
-40039:   swap(to, from);
-40039: }
-40039: 
-40039: }
-40039: # 31 "../../src/Interval_defs.hh" 2
-40039: # 1 "../../src/intervals_defs.hh" 1
-40039: # 29 "../../src/intervals_defs.hh"
-40039: # 1 "/usr/include/c++/8/cstdlib" 1 3
-40039: # 39 "/usr/include/c++/8/cstdlib" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/cstdlib" 3
-40039: # 30 "../../src/intervals_defs.hh" 2
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: enum I_Result {
-40039: 
-40039: 
-40039: 
-40039:   I_EMPTY = 1U,
-40039: 
-40039: 
-40039: 
-40039:   I_SINGLETON = 2U,
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   I_SOME = 4U,
-40039: 
-40039: 
-40039: 
-40039:   I_UNIVERSE = 8U,
-40039: 
-40039: 
-40039: 
-40039:   I_NOT_EMPTY = I_SINGLETON | I_SOME | I_UNIVERSE,
-40039: 
-40039: 
-40039: 
-40039:   I_ANY = I_EMPTY | I_NOT_EMPTY,
-40039: 
-40039: 
-40039: 
-40039:   I_NOT_UNIVERSE = I_EMPTY | I_SINGLETON | I_SOME,
-40039: 
-40039: 
-40039: 
-40039:   I_NOT_DEGENERATE = I_SINGLETON | I_SOME,
-40039: 
-40039: 
-40039: 
-40039:   I_EXACT = 16,
-40039: 
-40039: 
-40039: 
-40039:   I_INEXACT = 32,
-40039: 
-40039: 
-40039: 
-40039:   I_CHANGED = 64,
-40039: 
-40039: 
-40039: 
-40039:   I_UNCHANGED = 128,
-40039: 
-40039: 
-40039: 
-40039:   I_SINGULARITIES = 256
-40039: };
-40039: 
-40039: inline I_Result
-40039: operator|(I_Result a, I_Result b) {
-40039:   return static_cast<I_Result>(static_cast<unsigned>(a)
-40039:                                | static_cast<unsigned>(b));
-40039: }
-40039: 
-40039: inline I_Result
-40039: operator&(I_Result a, I_Result b) {
-40039:   return static_cast<I_Result>(static_cast<unsigned>(a)
-40039:                                & static_cast<unsigned>(b));
-40039: }
-40039: 
-40039: inline I_Result
-40039: operator-(I_Result a, I_Result b) {
-40039:     return static_cast<I_Result>(static_cast<unsigned>(a)
-40039:                                  & ~static_cast<unsigned>(b));
-40039: }
-40039: 
-40039: template <typename Criteria, typename T>
-40039: struct Use_By_Ref;
-40039: 
-40039: struct Use_Slow_Copy;
-40039: template <typename T>
-40039: struct Use_By_Ref<Use_Slow_Copy, T>
-40039:   : public Bool<Slow_Copy<T>::value> {
-40039: };
-40039: 
-40039: struct By_Value;
-40039: template <typename T>
-40039: struct Use_By_Ref<By_Value, T>
-40039:   : public False {
-40039: };
-40039: 
-40039: struct By_Ref;
-40039: template <typename T>
-40039: struct Use_By_Ref<By_Ref, T>
-40039:   : public True {
-40039: };
-40039: 
-40039: template <typename T, typename Criteria = Use_Slow_Copy, typename Enable = void>
-40039: class Val_Or_Ref;
-40039: 
-40039: template <typename T, typename Criteria>
-40039: class Val_Or_Ref<T, Criteria,
-40039:                  typename Enable_If<!Use_By_Ref<Criteria, T>::value>::type> {
-40039:   T value;
-40039: public:
-40039:   typedef T Arg_Type;
-40039:   typedef T Return_Type;
-40039:   Val_Or_Ref()
-40039:     : value() {
-40039:   }
-40039:   explicit Val_Or_Ref(Arg_Type v, bool = false)
-40039:     : value(v) {
-40039:   }
-40039:   Val_Or_Ref& operator=(Arg_Type v) {
-40039:     value = v;
-40039:     return *this;
-40039:   }
-40039:   void set(Arg_Type v, bool = false) {
-40039:     value = v;
-40039:   }
-40039:   Return_Type get() const {
-40039:     return value;
-40039:   }
-40039:   operator Return_Type() const {
-40039:     return get();
-40039:   }
-40039: };
-40039: 
-40039: template <typename T, typename Criteria>
-40039: class Val_Or_Ref<T, Criteria,
-40039:                  typename Enable_If<Use_By_Ref<Criteria, T>::value>::type> {
-40039:   const T* ptr;
-40039: public:
-40039:   typedef T& Arg_Type;
-40039:   typedef const T& Return_Type;
-40039:   Val_Or_Ref()
-40039:     : ptr(0) {
-40039:   }
-40039:   explicit Val_Or_Ref(Arg_Type v)
-40039:     : ptr(&v) {
-40039:   }
-40039:   Val_Or_Ref(const T& v, bool)
-40039:     : ptr(&v) {
-40039:   }
-40039:   Val_Or_Ref& operator=(Arg_Type v) {
-40039:     ptr = &v;
-40039:     return *this;
-40039:   }
-40039:   void set(Arg_Type v) {
-40039:     ptr = &v;
-40039:   }
-40039:   void set(const T& v, bool) {
-40039:     ptr = &v;
-40039:   }
-40039:   Return_Type get() const {
-40039:     return *ptr;
-40039:   }
-40039:   operator Return_Type() const {
-40039:     return get();
-40039:   }
-40039: };
-40039: 
-40039: class I_Constraint_Base {
-40039: };
-40039: 
-40039: template <typename Derived>
-40039: class I_Constraint_Common : public I_Constraint_Base {
-40039: public:
-40039:   template <typename T>
-40039:   Result convert_real(T& to) const {
-40039:     const Derived& c = static_cast<const Derived&>(*this);
-40039:     Result r = c.rel();
-40039:     switch (r) {
-40039:     case V_EMPTY:
-40039:     case V_LGE:
-40039:       return r;
-40039:     case V_LE:
-40039:       r = assign_r(to, c.value(), (ROUND_UP | ROUND_STRICT_RELATION));
-40039:       r = result_relation_class(r);
-40039:       if (r == V_EQ) {
-40039:         return V_LE;
-40039:       }
-40039:       goto lt;
-40039:     case V_LT:
-40039:       r = assign_r(to, c.value(), ROUND_UP);
-40039:       r = result_relation_class(r);
-40039:     lt:
-40039:       switch (r) {
-40039:       case V_EMPTY:
-40039:       case V_LT_PLUS_INFINITY:
-40039:       case V_EQ_MINUS_INFINITY:
-40039:         return r;
-40039:       case V_LT:
-40039:       case V_LE:
-40039:       case V_EQ:
-40039:         return V_LT;
-40039:       default:
-40039:         break;
-40039:       }
-40039:       break;
-40039:     case V_GE:
-40039:       r = assign_r(to, c.value(), (ROUND_DOWN | ROUND_STRICT_RELATION));
-40039:       r = result_relation_class(r);
-40039:       if (r == V_EQ) {
-40039:         return V_GE;
-40039:       }
-40039:       goto gt;
-40039:     case V_GT:
-40039:       r = assign_r(to, c.value(), ROUND_DOWN);
-40039:       r = result_relation_class(r);
-40039:     gt:
-40039:       switch (r) {
-40039:       case V_EMPTY:
-40039:       case V_GT_MINUS_INFINITY:
-40039:       case V_EQ_PLUS_INFINITY:
-40039:         return r;
-40039:       case V_LT:
-40039:       case V_LE:
-40039:       case V_EQ:
-40039:         return V_GT;
-40039:       default:
-40039:         break;
-40039:       }
-40039:       break;
-40039:     case V_EQ:
-40039:       r = assign_r(to, c.value(), ROUND_CHECK);
-40039:       r = result_relation_class(r);
-40039:       ((void) 0);
-40039:       if (r == V_EQ) {
-40039:         return V_EQ;
-40039:       }
-40039:       else {
-40039:         return V_EMPTY;
-40039:       }
-40039:     case V_NE:
-40039:       r = assign_r(to, c.value(), ROUND_CHECK);
-40039:       r = result_relation_class(r);
-40039:       if (r == V_EQ) {
-40039:         return V_NE;
-40039:       }
-40039:       else {
-40039:         return V_LGE;
-40039:       }
-40039:     default:
-40039:       break;
-40039:     }
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return V_EMPTY;
-40039:   }
-40039:   template <typename T>
-40039:   Result convert_real(T& to1, Result& rel2, T& to2) const {
-40039:     const Derived& c = static_cast<const Derived&>(*this);
-40039:     Result rel1;
-40039:     if (c.rel() != V_EQ) {
-40039:       rel2 = convert(to2);
-40039:       return V_LGE;
-40039:     }
-40039:     rel2 = assign_r(to2, c.value(), ROUND_UP);
-40039:     rel2 = result_relation_class(rel2);
-40039:     switch (rel2) {
-40039:     case V_EMPTY:
-40039:     case V_EQ_MINUS_INFINITY:
-40039:     case V_EQ:
-40039:       return V_LGE;
-40039:     default:
-40039:       break;
-40039:     }
-40039:     rel1 = assign_r(to1, c.value(), ROUND_DOWN);
-40039:     rel1 = result_relation_class(rel1);
-40039:     switch (rel1) {
-40039:     case V_EQ:
-40039:       ((void) 0);
-40039:       goto eq;
-40039:     case V_EQ_PLUS_INFINITY:
-40039:     case V_EMPTY:
-40039:       rel2 = rel1;
-40039:       return V_LGE;
-40039:     case V_GE:
-40039:       if (rel2 == V_LE && to1 == to2) {
-40039:       eq:
-40039:         rel2 = V_EQ;
-40039:         return V_LGE;
-40039:       }
-40039: 
-40039:     case V_GT:
-40039:     case V_GT_MINUS_INFINITY:
-40039:       return rel1;
-40039:     default:
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       return V_EMPTY;
-40039:     }
-40039:     switch (rel2) {
-40039:     case V_LE:
-40039:     case V_LT:
-40039:     case V_LT_PLUS_INFINITY:
-40039:       return rel1;
-40039:     default:
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       return V_EMPTY;
-40039:     }
-40039:   }
-40039:   template <typename T>
-40039:   Result convert_integer(T& to) const {
-40039:     Result rel = convert_real(to);
-40039:     switch (rel) {
-40039:     case V_LT:
-40039:       if (is_integer(to)) {
-40039:         rel = sub_assign_r(to, to, T(1), (ROUND_UP | ROUND_STRICT_RELATION));
-40039:         rel = result_relation_class(rel);
-40039:         return (rel == V_EQ) ? V_LE : rel;
-40039:       }
-40039: 
-40039:     case V_LE:
-40039:       rel = floor_assign_r(to, to, ROUND_UP);
-40039:       rel = result_relation_class(rel);
-40039:       ((void) 0);
-40039:       return V_LE;
-40039:     case V_GT:
-40039:       if (is_integer(to)) {
-40039:         rel = add_assign_r(to, to, T(1), (ROUND_DOWN | ROUND_STRICT_RELATION));
-40039:         rel = result_relation_class(rel);
-40039:         return (rel == V_EQ) ? V_GE : rel;
-40039:       }
-40039: 
-40039:     case V_GE:
-40039:       rel = ceil_assign_r(to, to, ROUND_DOWN);
-40039:       rel = result_relation_class(rel);
-40039:       ((void) 0);
-40039:       return V_GE;
-40039:     case V_EQ:
-40039:       if (is_integer(to)) {
-40039:         return V_EQ;
-40039:       }
-40039:       return V_EMPTY;
-40039:     case V_NE:
-40039:       if (is_integer(to)) {
-40039:         return V_NE;
-40039:       }
-40039:       return V_LGE;
-40039:     default:
-40039:       return rel;
-40039:     }
-40039:   }
-40039: };
-40039: 
-40039: struct I_Constraint_Rel {
-40039:   Result rel;
-40039:   I_Constraint_Rel(Result r)
-40039:     : rel(r) {
-40039:     ((void) 0);
-40039:   }
-40039:   I_Constraint_Rel(Relation_Symbol r)
-40039:     : rel(static_cast<Result>(r)) {
-40039:   }
-40039:   operator Result() const {
-40039:     return rel;
-40039:   }
-40039: };
-40039: 
-40039: template <typename T, typename Val_Or_Ref_Criteria = Use_Slow_Copy,
-40039:           bool extended = false>
-40039: class I_Constraint
-40039:   : public I_Constraint_Common<I_Constraint<T, Val_Or_Ref_Criteria,
-40039:                                             extended> > {
-40039:   typedef Val_Or_Ref<T, Val_Or_Ref_Criteria> Val_Ref;
-40039:   typedef typename Val_Ref::Arg_Type Arg_Type;
-40039:   typedef typename Val_Ref::Return_Type Return_Type;
-40039:   Result rel_;
-40039:   Val_Ref value_;
-40039: public:
-40039:   typedef T value_type;
-40039:   explicit I_Constraint()
-40039:     : rel_(V_LGE) {
-40039:   }
-40039:   I_Constraint(I_Constraint_Rel r, Arg_Type v)
-40039:     : rel_(r), value_(v) {
-40039:   }
-40039:   I_Constraint(I_Constraint_Rel r, const T& v, bool force)
-40039:     : rel_(r), value_(v, force) {
-40039:   }
-40039:   template <typename U>
-40039:   I_Constraint(I_Constraint_Rel r, const U& v)
-40039:     : rel_(r), value_(v) {
-40039:   }
-40039:   void set(I_Constraint_Rel r, Arg_Type v) {
-40039:     rel_ = r;
-40039:     value_.set(v);
-40039:   }
-40039:   void set(I_Constraint_Rel r, const T& v, bool force) {
-40039:     rel_ = r;
-40039:     value_.set(v, force);
-40039:   }
-40039:   template <typename U>
-40039:   void set(I_Constraint_Rel r, const U& v) {
-40039:     rel_ = r;
-40039:     value_.set(v);
-40039:   }
-40039:   Return_Type value() const {
-40039:     return value_;
-40039:   }
-40039:   Result rel() const {
-40039:     return rel_;
-40039:   }
-40039: };
-40039: 
-40039: template <typename T>
-40039: inline I_Constraint<T>
-40039: i_constraint(I_Constraint_Rel rel, const T& v) {
-40039:   return I_Constraint<T>(rel, v);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline I_Constraint<T>
-40039: i_constraint(I_Constraint_Rel rel, const T& v, bool force) {
-40039:   return I_Constraint<T>(rel, v, force);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline I_Constraint<T>
-40039: i_constraint(I_Constraint_Rel rel, T& v) {
-40039:   return I_Constraint<T>(rel, v);
-40039: }
-40039: 
-40039: template <typename T, typename Val_Or_Ref_Criteria>
-40039: inline I_Constraint<T, Val_Or_Ref_Criteria>
-40039: i_constraint(I_Constraint_Rel rel, const T& v, const Val_Or_Ref_Criteria&) {
-40039:   return I_Constraint<T, Val_Or_Ref_Criteria>(rel, v);
-40039: }
-40039: 
-40039: template <typename T, typename Val_Or_Ref_Criteria>
-40039: inline I_Constraint<T, Val_Or_Ref_Criteria>
-40039: i_constraint(I_Constraint_Rel rel, const T& v, bool force,
-40039:              const Val_Or_Ref_Criteria&) {
-40039:   return I_Constraint<T, Val_Or_Ref_Criteria>(rel, v, force);
-40039: }
-40039: 
-40039: template <typename T, typename Val_Or_Ref_Criteria>
-40039: inline I_Constraint<T, Val_Or_Ref_Criteria>
-40039: i_constraint(I_Constraint_Rel rel, T& v, const Val_Or_Ref_Criteria&) {
-40039:   return I_Constraint<T, Val_Or_Ref_Criteria>(rel, v);
-40039: }
-40039: 
-40039: }
-40039: # 32 "../../src/Interval_defs.hh" 2
-40039: # 1 "../../src/Interval_Info_defs.hh" 1
-40039: # 27 "../../src/Interval_Info_defs.hh"
-40039: # 1 "../../src/Boundary_defs.hh" 1
-40039: # 29 "../../src/Boundary_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Boundary_NS {
-40039: 
-40039: struct Property {
-40039:   enum Type {
-40039:     SPECIAL_,
-40039:     OPEN_
-40039:   };
-40039:   typedef bool Value;
-40039:   static const Value default_value = true;
-40039:   static const Value unsupported_value = false;
-40039:   Property(Type t)
-40039:     : type(t) {
-40039:   }
-40039:   Type type;
-40039: };
-40039: 
-40039: static const Property SPECIAL(Property::SPECIAL_);
-40039: static const Property OPEN(Property::OPEN_);
-40039: 
-40039: enum Boundary_Type {
-40039:   LOWER = ROUND_DOWN,
-40039:   UPPER = ROUND_UP
-40039: };
-40039: 
-40039: inline Rounding_Dir
-40039: round_dir_check(Boundary_Type t, bool check = false) {
-40039:   if (check) {
-40039:     return static_cast<Rounding_Dir>(t) | ROUND_STRICT_RELATION;
-40039:   }
-40039:   else {
-40039:     return static_cast<Rounding_Dir>(t);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T, typename Info>
-40039: inline Result
-40039: special_set_boundary_infinity(Boundary_Type type, T&, Info& info) {
-40039:   ((void) 0);
-40039:   info.set_boundary_property(type, SPECIAL);
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename T, typename Info>
-40039: inline bool
-40039: special_is_open(Boundary_Type, const T&, const Info&) {
-40039:   return !Info::may_contain_infinity;
-40039: }
-40039: 
-40039: template <typename T, typename Info>
-40039: inline bool
-40039: normal_is_open(Boundary_Type type, const T& x, const Info& info) {
-40039:   if (Info::store_open) {
-40039:     return info.get_boundary_property(type, OPEN);
-40039:   }
-40039:   else {
-40039:     return !Info::store_special && !Info::may_contain_infinity
-40039:       && normal_is_boundary_infinity(type, x, info);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T, typename Info>
-40039: inline bool
-40039: is_open(Boundary_Type type, const T& x, const Info& info) {
-40039:   if (Info::store_open) {
-40039:     return info.get_boundary_property(type, OPEN);
-40039:   }
-40039:   else {
-40039:     return !Info::may_contain_infinity
-40039:       && is_boundary_infinity(type, x, info);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T, typename Info>
-40039: inline Result
-40039: set_unbounded(Boundary_Type type, T& x, Info& info) {
-40039:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_109 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(Info::store_special || std::numeric_limits<T>::is_bounded || std::numeric_limits<T>::has_infinity)>) }
-40039: 
-40039: 
-40039:                                                           ;
-40039:   Result r;
-40039:   if (Info::store_special) {
-40039:     r = special_set_boundary_infinity(type, x, info);
-40039:   }
-40039:   else if (type == LOWER) {
-40039:     r = assign_r(x, MINUS_INFINITY, ROUND_UP);
-40039:   }
-40039:   else {
-40039:     r = assign_r(x, PLUS_INFINITY, ROUND_DOWN);
-40039:   }
-40039:   if (result_relation(r) == VR_EQ && !Info::may_contain_infinity) {
-40039:     info.set_boundary_property(type, OPEN);
-40039:   }
-40039:   return r;
-40039: }
-40039: 
-40039: template <typename T, typename Info>
-40039: inline Result
-40039: set_minus_infinity(Boundary_Type type, T& x, Info& info, bool open = false) {
-40039:   if (open) {
-40039:     ((void) 0);
-40039:   }
-40039:   else {
-40039:     ((void) 0);
-40039:   }
-40039:   Result r;
-40039:   if (Info::store_special) {
-40039:     ((void) 0);
-40039:     r = special_set_boundary_infinity(type, x, info);
-40039:   }
-40039:   else {
-40039:     r = assign_r(x, MINUS_INFINITY, round_dir_check(type));
-40039:     ((void) 0);
-40039:   }
-40039:   if (open || result_relation(r) != VR_EQ) {
-40039:     info.set_boundary_property(type, OPEN);
-40039:   }
-40039:   return r;
-40039: }
-40039: 
-40039: template <typename T, typename Info>
-40039: inline Result
-40039: set_plus_infinity(Boundary_Type type, T& x, Info& info, bool open = false) {
-40039:   if (open) {
-40039:     ((void) 0);
-40039:   }
-40039:   else {
-40039:     ((void) 0);
-40039:   }
-40039:   Result r;
-40039:   if (Info::store_special) {
-40039:     ((void) 0);
-40039:     r = special_set_boundary_infinity(type, x, info);
-40039:   }
-40039:   else {
-40039:     r = assign_r(x, PLUS_INFINITY, round_dir_check(type));
-40039:     ((void) 0);
-40039:   }
-40039:   if (open || result_relation(r) != VR_EQ) {
-40039:     info.set_boundary_property(type, OPEN);
-40039:   }
-40039:   return r;
-40039: }
-40039: 
-40039: template <typename T, typename Info>
-40039: inline Result
-40039: set_boundary_infinity(Boundary_Type type, T& x, Info& info, bool open = false) {
-40039:   ((void) 0);
-40039:   Result r;
-40039:   if (Info::store_special) {
-40039:     r = special_set_boundary_infinity(type, x, info);
-40039:   }
-40039:   else if (type == LOWER) {
-40039:     r = assign_r(x, MINUS_INFINITY, round_dir_check(type));
-40039:   }
-40039:   else {
-40039:     r = assign_r(x, PLUS_INFINITY, round_dir_check(type));
-40039:   }
-40039:   ((void) 0);
-40039:   if (open) {
-40039:     info.set_boundary_property(type, OPEN);
-40039:   }
-40039:   return r;
-40039: }
-40039: 
-40039: template <typename T, typename Info>
-40039: inline bool
-40039: is_domain_inf(Boundary_Type type, const T& x, const Info& info) {
-40039:   if (Info::store_special && type == LOWER) {
-40039:     return info.get_boundary_property(type, SPECIAL);
-40039:   }
-40039:   else if (std::numeric_limits<T>::has_infinity) {
-40039:     return Parma_Polyhedra_Library::is_minus_infinity(x);
-40039:   }
-40039:   else if (std::numeric_limits<T>::is_bounded) {
-40039:     return x == std::numeric_limits<T>::min();
-40039:   }
-40039:   else {
-40039:     return false;
-40039:   }
-40039: }
-40039: 
-40039: template <typename T, typename Info>
-40039: inline bool
-40039: is_domain_sup(Boundary_Type type, const T& x, const Info& info) {
-40039:   if (Info::store_special && type == UPPER) {
-40039:     return info.get_boundary_property(type, SPECIAL);
-40039:   }
-40039:   else if (std::numeric_limits<T>::has_infinity) {
-40039:     return Parma_Polyhedra_Library::is_plus_infinity(x);
-40039:   }
-40039:   else if (std::numeric_limits<T>::is_bounded) {
-40039:       return x == std::numeric_limits<T>::max();
-40039:   }
-40039:   else {
-40039:     return false;
-40039:   }
-40039: }
-40039: 
-40039: template <typename T, typename Info>
-40039: inline bool
-40039: normal_is_boundary_infinity(Boundary_Type type, const T& x, const Info&) {
-40039:   if (!std::numeric_limits<T>::has_infinity) {
-40039:     return false;
-40039:   }
-40039:   if (type == LOWER) {
-40039:     return Parma_Polyhedra_Library::is_minus_infinity(x);
-40039:   }
-40039:   else {
-40039:     return Parma_Polyhedra_Library::is_plus_infinity(x);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T, typename Info>
-40039: inline bool
-40039: is_boundary_infinity(Boundary_Type type, const T& x, const Info& info) {
-40039:   if (Info::store_special) {
-40039:     return info.get_boundary_property(type, SPECIAL);
-40039:   }
-40039:   else {
-40039:     return normal_is_boundary_infinity(type, x, info);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T, typename Info>
-40039: inline bool
-40039: normal_is_reverse_infinity(Boundary_Type type, const T& x, const Info&) {
-40039:   if (!Info::may_contain_infinity) {
-40039:     return false;
-40039:   }
-40039:   else if (type == LOWER) {
-40039:     return Parma_Polyhedra_Library::is_plus_infinity(x);
-40039:   }
-40039:   else {
-40039:     return Parma_Polyhedra_Library::is_minus_infinity(x);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T, typename Info>
-40039: inline bool
-40039: is_minus_infinity(Boundary_Type type, const T& x, const Info& info) {
-40039:   if (type == LOWER) {
-40039:     if (Info::store_special) {
-40039:       return info.get_boundary_property(type, SPECIAL);
-40039:     }
-40039:     else {
-40039:       return normal_is_boundary_infinity(type, x, info);
-40039:     }
-40039:   }
-40039:   else {
-40039:     return !Info::store_special && normal_is_reverse_infinity(type, x, info);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T, typename Info>
-40039: inline bool
-40039: is_plus_infinity(Boundary_Type type, const T& x, const Info& info) {
-40039:   if (type == UPPER) {
-40039:     if (Info::store_special) {
-40039:       return info.get_boundary_property(type, SPECIAL);
-40039:     }
-40039:     else {
-40039:       return normal_is_boundary_infinity(type, x, info);
-40039:     }
-40039:   }
-40039:   else {
-40039:     return !Info::store_special && normal_is_reverse_infinity(type, x, info);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T, typename Info>
-40039: inline bool
-40039: is_reverse_infinity(Boundary_Type type, const T& x, const Info& info) {
-40039:   return normal_is_reverse_infinity(type, x, info);
-40039: }
-40039: 
-40039: template <typename T, typename Info>
-40039: inline int
-40039: infinity_sign(Boundary_Type type, const T& x, const Info& info) {
-40039:   if (is_boundary_infinity(type, x, info)) {
-40039:     return (type == LOWER) ? -1 : 1;
-40039:   }
-40039:   else if (is_reverse_infinity(type, x, info)) {
-40039:     return (type == UPPER) ? -1 : 1;
-40039:   }
-40039:   else {
-40039:     return 0;
-40039:   }
-40039: }
-40039: 
-40039: template <typename T, typename Info>
-40039: inline bool
-40039: is_boundary_infinity_closed(Boundary_Type type, const T& x, const Info& info) {
-40039:   return Info::may_contain_infinity
-40039:     && !info.get_boundary_property(type, OPEN)
-40039:     && is_boundary_infinity(type, x, info);
-40039: }
-40039: 
-40039: template <typename Info>
-40039: inline bool
-40039: boundary_infinity_is_open(Boundary_Type type, const Info& info) {
-40039:   return !Info::may_contain_infinity
-40039:     || info.get_boundary_property(type, OPEN);
-40039: }
-40039: 
-40039: template <typename T, typename Info>
-40039: inline int
-40039: sgn_b(Boundary_Type type, const T& x, const Info& info) {
-40039:   if (info.get_boundary_property(type, SPECIAL)) {
-40039:     return (type == LOWER) ? -1 : 1;
-40039:   }
-40039:   else {
-40039: 
-40039: 
-40039:     return Parma_Polyhedra_Library::sgn(x);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T, typename Info>
-40039: inline int
-40039: sgn(Boundary_Type type, const T& x, const Info& info) {
-40039:   int sign = sgn_b(type, x, info);
-40039:   if (x == 0 && info.get_boundary_property(type, OPEN)) {
-40039:     return (type == LOWER) ? -1 : 1;
-40039:   }
-40039:   else {
-40039:     return sign;
-40039:   }
-40039: }
-40039: 
-40039: template <typename T1, typename Info1, typename T2, typename Info2>
-40039: inline bool
-40039: eq(Boundary_Type type1, const T1& x1, const Info1& info1,
-40039:    Boundary_Type type2, const T2& x2, const Info2& info2) {
-40039:   if (type1 == type2) {
-40039:     if (is_open(type1, x1, info1)
-40039:         != is_open(type2, x2, info2)) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   else if (is_open(type1, x1, info1)
-40039:            || is_open(type2, x2, info2)) {
-40039:     return false;
-40039:   }
-40039:   if (is_minus_infinity(type1, x1, info1)) {
-40039:     return is_minus_infinity(type2, x2, info2);
-40039:   }
-40039:   else if (is_plus_infinity(type1, x1, info1)) {
-40039:     return is_plus_infinity(type2, x2, info2);
-40039:   }
-40039:   else if (is_minus_infinity(type2, x2, info2)
-40039:            || is_plus_infinity(type2, x2, info2)) {
-40039:     return false;
-40039:   }
-40039:   else {
-40039:     return equal(x1, x2);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T1, typename Info1, typename T2, typename Info2>
-40039: inline bool
-40039: lt(Boundary_Type type1, const T1& x1, const Info1& info1,
-40039:    Boundary_Type type2, const T2& x2, const Info2& info2) {
-40039:   if (is_open(type1, x1, info1)) {
-40039:     if (type1 == UPPER
-40039:         && (type2 == LOWER
-40039:             || !is_open(type2, x2, info2))) {
-40039:       goto le;
-40039:     }
-40039:   }
-40039:   else if (type2 == LOWER
-40039:            && is_open(type2, x2, info2)) {
-40039:   le:
-40039:     if (is_minus_infinity(type1, x1, info1)
-40039:         || is_plus_infinity(type2, x2, info2)) {
-40039:       return true;
-40039:     }
-40039:     if (is_plus_infinity(type1, x1, info1)
-40039:         || is_minus_infinity(type2, x2, info2)) {
-40039:       return false;
-40039:     }
-40039:     else {
-40039:       return less_or_equal(x1, x2);
-40039:     }
-40039:   }
-40039:   if (is_plus_infinity(type1, x1, info1)
-40039:       || is_minus_infinity(type2, x2, info2)) {
-40039:     return false;
-40039:   }
-40039:   if (is_minus_infinity(type1, x1, info1)
-40039:       || is_plus_infinity(type2, x2, info2)) {
-40039:     return true;
-40039:   }
-40039:   else {
-40039:     return less_than(x1, x2);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T1, typename Info1, typename T2, typename Info2>
-40039: inline bool
-40039: gt(Boundary_Type type1, const T1& x1, const Info1& info1,
-40039:    Boundary_Type type2, const T2& x2, const Info2& info2) {
-40039:   return lt(type2, x2, info2, type1, x1, info1);
-40039: }
-40039: 
-40039: template <typename T1, typename Info1, typename T2, typename Info2>
-40039: inline bool
-40039: le(Boundary_Type type1, const T1& x1, const Info1& info1,
-40039:    Boundary_Type type2, const T2& x2, const Info2& info2) {
-40039:   return !gt(type1, x1, info1, type2, x2, info2);
-40039: }
-40039: 
-40039: template <typename T1, typename Info1, typename T2, typename Info2>
-40039: inline bool
-40039: ge(Boundary_Type type1, const T1& x1, const Info1& info1,
-40039:    Boundary_Type type2, const T2& x2, const Info2& info2) {
-40039:   return !lt(type1, x1, info1, type2, x2, info2);
-40039: }
-40039: 
-40039: template <typename T, typename Info>
-40039: inline Result
-40039: adjust_boundary(Boundary_Type type, T& x, Info& info,
-40039:                 bool open, Result r) {
-40039:   r = result_relation_class(r);
-40039:   if (type == LOWER) {
-40039:     switch (r) {
-40039:     case V_GT_MINUS_INFINITY:
-40039:       open = true;
-40039: 
-40039:     case V_EQ_MINUS_INFINITY:
-40039:       if (!Info::store_special) {
-40039:         return r;
-40039:       }
-40039:       if (open) {
-40039:         info.set_boundary_property(type, OPEN);
-40039:       }
-40039:       return special_set_boundary_infinity(type, x, info);
-40039:     case V_GT:
-40039:       open = true;
-40039: 
-40039:     case V_GE:
-40039:     case V_EQ:
-40039:       if (open) {
-40039:         info.set_boundary_property(type, OPEN);
-40039:       }
-40039:       return r;
-40039:     default:
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       return V_NAN;
-40039:     }
-40039:   }
-40039:   else {
-40039:     switch (r) {
-40039:     case V_LT_PLUS_INFINITY:
-40039:       open = true;
-40039: 
-40039:     case V_EQ_PLUS_INFINITY:
-40039:       if (!Info::store_special) {
-40039:         return r;
-40039:       }
-40039:       if (open) {
-40039:         info.set_boundary_property(type, OPEN);
-40039:       }
-40039:       return special_set_boundary_infinity(type, x, info);
-40039:     case V_LT:
-40039:       open = true;
-40039: 
-40039:     case V_LE:
-40039:     case V_EQ:
-40039:       if (open) {
-40039:         info.set_boundary_property(type, OPEN);
-40039:       }
-40039:       return r;
-40039:     default:
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       return V_NAN;
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename To, typename To_Info, typename T, typename Info>
-40039: inline Result
-40039: complement(Boundary_Type to_type, To& to, To_Info& to_info,
-40039:            Boundary_Type type, const T& x, const Info& info) {
-40039:   ((void) 0);
-40039:   bool should_shrink;
-40039:   if (info.get_boundary_property(type, SPECIAL)) {
-40039:     should_shrink = !special_is_open(type, x, info);
-40039:     if (type == LOWER) {
-40039:       return set_minus_infinity(to_type, to, to_info, should_shrink);
-40039:     }
-40039:     else {
-40039:       return set_plus_infinity(to_type, to, to_info, should_shrink);
-40039:     }
-40039:   }
-40039:   should_shrink = !normal_is_open(type, x, info);
-40039:   bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open));
-40039:   Result r = assign_r(to, x, round_dir_check(to_type, check));
-40039:   return adjust_boundary(to_type, to, to_info, should_shrink, r);
-40039: }
-40039: 
-40039: template <typename To, typename To_Info, typename T, typename Info>
-40039: inline Result
-40039: assign(Boundary_Type to_type, To& to, To_Info& to_info,
-40039:        Boundary_Type type, const T& x, const Info& info,
-40039:        bool should_shrink = false) {
-40039:   ((void) 0);
-40039:   if (info.get_boundary_property(type, SPECIAL)) {
-40039:     should_shrink = (should_shrink || special_is_open(type, x, info));
-40039:     return set_boundary_infinity(to_type, to, to_info, should_shrink);
-40039:   }
-40039:   should_shrink = (should_shrink || normal_is_open(type, x, info));
-40039:   const bool check
-40039:     = (To_Info::check_inexact || (!should_shrink && To_Info::store_open));
-40039:   const Result r = assign_r(to, x, round_dir_check(to_type, check));
-40039:   return adjust_boundary(to_type, to, to_info, should_shrink, r);
-40039: }
-40039: 
-40039: template <typename To, typename To_Info, typename T, typename Info>
-40039: inline Result
-40039: min_assign(Boundary_Type to_type, To& to, To_Info& to_info,
-40039:            Boundary_Type type, const T& x, const Info& info) {
-40039:   if (lt(type, x, info, to_type, to, to_info)) {
-40039:     to_info.clear_boundary_properties(to_type);
-40039:     return assign(to_type, to, to_info, type, x, info);
-40039:   }
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To, typename To_Info, typename T1, typename Info1, typename T2, typename Info2>
-40039: inline Result
-40039: min_assign(Boundary_Type to_type, To& to, To_Info& to_info,
-40039:            Boundary_Type type1, const T1& x1, const Info1& info1,
-40039:            Boundary_Type type2, const T2& x2, const Info2& info2) {
-40039:   if (lt(type1, x1, info1, type2, x2, info2)) {
-40039:     return assign(to_type, to, to_info, type1, x1, info1);
-40039:   }
-40039:   else {
-40039:     return assign(to_type, to, to_info, type2, x2, info2);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To, typename To_Info, typename T, typename Info>
-40039: inline Result
-40039: max_assign(Boundary_Type to_type, To& to, To_Info& to_info,
-40039:            Boundary_Type type, const T& x, const Info& info) {
-40039:   if (gt(type, x, info, to_type, to, to_info)) {
-40039:     to_info.clear_boundary_properties(to_type);
-40039:     return assign(to_type, to, to_info, type, x, info);
-40039:   }
-40039:   return V_EQ;
-40039: }
-40039: 
-40039: template <typename To, typename To_Info, typename T1, typename Info1, typename T2, typename Info2>
-40039: inline Result
-40039: max_assign(Boundary_Type to_type, To& to, To_Info& to_info,
-40039:            Boundary_Type type1, const T1& x1, const Info1& info1,
-40039:            Boundary_Type type2, const T2& x2, const Info2& info2) {
-40039:   if (gt(type1, x1, info1, type2, x2, info2)) {
-40039:     return assign(to_type, to, to_info, type1, x1, info1);
-40039:   }
-40039:   else {
-40039:     return assign(to_type, to, to_info, type2, x2, info2);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To, typename To_Info, typename T, typename Info>
-40039: inline Result
-40039: neg_assign(Boundary_Type to_type, To& to, To_Info& to_info,
-40039:            Boundary_Type type, const T& x, const Info& info) {
-40039:   ((void) 0);
-40039:   bool should_shrink;
-40039:   if (info.get_boundary_property(type, SPECIAL)) {
-40039:     should_shrink = special_is_open(type, x, info);
-40039:     return set_boundary_infinity(to_type, to, to_info, should_shrink);
-40039:   }
-40039:   should_shrink = normal_is_open(type, x, info);
-40039:   bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open));
-40039:   Result r = neg_assign_r(to, x, round_dir_check(to_type, check));
-40039:   return adjust_boundary(to_type, to, to_info, should_shrink, r);
-40039: }
-40039: 
-40039: template <typename To, typename To_Info, typename T1, typename Info1, typename T2, typename Info2>
-40039: inline Result
-40039: add_assign(Boundary_Type to_type, To& to, To_Info& to_info,
-40039:            Boundary_Type type1, const T1& x1, const Info1& info1,
-40039:            Boundary_Type type2, const T2& x2, const Info2& info2) {
-40039:   ((void) 0);
-40039:   bool should_shrink;
-40039:   if (is_boundary_infinity(type1, x1, info1)) {
-40039:     should_shrink = (boundary_infinity_is_open(type1, info1)
-40039:                      && !is_boundary_infinity_closed(type2, x2, info2));
-40039:     return set_boundary_infinity(to_type, to, to_info, should_shrink);
-40039:   }
-40039:   else if (is_boundary_infinity(type2, x2, info2)) {
-40039:     should_shrink = (boundary_infinity_is_open(type2, info2)
-40039:                      && !is_boundary_infinity_closed(type1, x1, info1));
-40039:     return set_boundary_infinity(to_type, to, to_info, should_shrink);
-40039:   }
-40039:   should_shrink = (normal_is_open(type1, x1, info1)
-40039:                    || normal_is_open(type2, x2, info2));
-40039:   bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open));
-40039: 
-40039:   Result r = add_assign_r(to, x1, x2, round_dir_check(to_type, check));
-40039:   return adjust_boundary(to_type, to, to_info, should_shrink, r);
-40039: }
-40039: 
-40039: template <typename To, typename To_Info, typename T1, typename Info1, typename T2, typename Info2>
-40039: inline Result
-40039: sub_assign(Boundary_Type to_type, To& to, To_Info& to_info,
-40039:            Boundary_Type type1, const T1& x1, const Info1& info1,
-40039:            Boundary_Type type2, const T2& x2, const Info2& info2) {
-40039:   ((void) 0);
-40039:   bool should_shrink;
-40039:   if (is_boundary_infinity(type1, x1, info1)) {
-40039:     should_shrink = (boundary_infinity_is_open(type1, info1)
-40039:                      && !is_boundary_infinity_closed(type2, x2, info2));
-40039:     return set_boundary_infinity(to_type, to, to_info, should_shrink);
-40039:   }
-40039:   else if (is_boundary_infinity(type2, x2, info2)) {
-40039:     should_shrink = (boundary_infinity_is_open(type2, info2)
-40039:                      && !is_boundary_infinity_closed(type1, x1, info1));
-40039:     return set_boundary_infinity(to_type, to, to_info, should_shrink);
-40039:   }
-40039:   should_shrink = (normal_is_open(type1, x1, info1)
-40039:                    || normal_is_open(type2, x2, info2));
-40039:   bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open));
-40039: 
-40039:   Result r = sub_assign_r(to, x1, x2, round_dir_check(to_type, check));
-40039:   return adjust_boundary(to_type, to, to_info, should_shrink, r);
-40039: }
-40039: 
-40039: template <typename To, typename To_Info, typename T1, typename Info1, typename T2, typename Info2>
-40039: inline Result
-40039: mul_assign(Boundary_Type to_type, To& to, To_Info& to_info,
-40039:            Boundary_Type type1, const T1& x1, const Info1& info1,
-40039:            Boundary_Type type2, const T2& x2, const Info2& info2) {
-40039:   bool should_shrink;
-40039:   if (is_boundary_infinity(type1, x1, info1)) {
-40039:     should_shrink = (boundary_infinity_is_open(type1, info1)
-40039:                      && !is_boundary_infinity_closed(type2, x2, info2));
-40039:     return set_boundary_infinity(to_type, to, to_info, should_shrink);
-40039:   }
-40039:   else if (is_boundary_infinity(type2, x2, info2)) {
-40039:     should_shrink = (boundary_infinity_is_open(type2, info2)
-40039:                      && !is_boundary_infinity_closed(type1, x1, info1));
-40039:     return set_boundary_infinity(to_type, to, to_info, should_shrink);
-40039:   }
-40039:   should_shrink = (normal_is_open(type1, x1, info1)
-40039:                    || normal_is_open(type2, x2, info2));
-40039:   bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open));
-40039:   ((void) 0);
-40039: 
-40039:   Result r = mul_assign_r(to, x1, x2, round_dir_check(to_type, check));
-40039:   return adjust_boundary(to_type, to, to_info, should_shrink, r);
-40039: }
-40039: 
-40039: template <typename To, typename To_Info>
-40039: inline Result
-40039: set_zero(Boundary_Type to_type, To& to, To_Info& to_info, bool should_shrink) {
-40039:   bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open));
-40039:   Result r = assign_r(to, Constant<0>::value, round_dir_check(to_type, check));
-40039:   return adjust_boundary(to_type, to, to_info, should_shrink, r);
-40039: }
-40039: 
-40039: template <typename To, typename To_Info, typename T1, typename Info1, typename T2, typename Info2>
-40039: inline Result
-40039: mul_assign_z(Boundary_Type to_type, To& to, To_Info& to_info,
-40039:              Boundary_Type type1, const T1& x1, const Info1& info1, int x1s,
-40039:              Boundary_Type type2, const T2& x2, const Info2& info2, int x2s) {
-40039:   bool should_shrink;
-40039:   if (x1s != 0) {
-40039:     if (x2s != 0) {
-40039:       return mul_assign(to_type, to, to_info,
-40039:                         type1, x1, info1,
-40039:                         type2, x2, info2);
-40039:     }
-40039:     else {
-40039:       should_shrink = info2.get_boundary_property(type2, OPEN);
-40039:     }
-40039:   }
-40039:   else {
-40039:     should_shrink = (info1.get_boundary_property(type1, OPEN)
-40039:                      && (x2s != 0 || info2.get_boundary_property(type2, OPEN)));
-40039:   }
-40039:   return set_zero(to_type, to, to_info, should_shrink);
-40039: }
-40039: 
-40039: template <typename To, typename To_Info, typename T1, typename Info1, typename T2, typename Info2>
-40039: inline Result
-40039: div_assign(Boundary_Type to_type, To& to, To_Info& to_info,
-40039:            Boundary_Type type1, const T1& x1, const Info1& info1,
-40039:            Boundary_Type type2, const T2& x2, const Info2& info2) {
-40039:   bool should_shrink;
-40039:   if (is_boundary_infinity(type1, x1, info1)) {
-40039:     should_shrink = boundary_infinity_is_open(type1, info1);
-40039:     return set_boundary_infinity(to_type, to, to_info, should_shrink);
-40039:   }
-40039:   else if (is_boundary_infinity(type2, x2, info2)) {
-40039:     should_shrink = boundary_infinity_is_open(type2, info2);
-40039:     return set_zero(to_type, to, to_info, should_shrink);
-40039:   }
-40039:   should_shrink = (normal_is_open(type1, x1, info1)
-40039:                    || normal_is_open(type2, x2, info2));
-40039:   bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open));
-40039:   ((void) 0);
-40039: 
-40039:   Result r = div_assign_r(to, x1, x2, round_dir_check(to_type, check));
-40039:   return adjust_boundary(to_type, to, to_info, should_shrink, r);
-40039: }
-40039: 
-40039: 
-40039: template <typename To, typename To_Info, typename T1, typename Info1, typename T2, typename Info2>
-40039: inline Result
-40039: div_assign_z(Boundary_Type to_type, To& to, To_Info& to_info,
-40039:              Boundary_Type type1, const T1& x1, const Info1& info1, int x1s,
-40039:              Boundary_Type type2, const T2& x2, const Info2& info2, int x2s) {
-40039:   if (x1s != 0) {
-40039:     if (x2s != 0) {
-40039:       return div_assign(to_type, to, to_info,
-40039:                         type1, x1, info1,
-40039:                         type2, x2, info2);
-40039:     }
-40039:     else {
-40039:       return set_boundary_infinity(to_type, to, to_info, true);
-40039:     }
-40039:   }
-40039:   else {
-40039:     bool should_shrink = info1.get_boundary_property(type1, OPEN)
-40039:       && !is_boundary_infinity_closed(type2, x2, info2);
-40039:     return set_zero(to_type, to, to_info, should_shrink);
-40039:   }
-40039: }
-40039: 
-40039: template <typename To, typename To_Info, typename T, typename Info>
-40039: inline Result
-40039: umod_2exp_assign(Boundary_Type to_type, To& to, To_Info& to_info,
-40039:                  Boundary_Type type, const T& x, const Info& info,
-40039:                  unsigned int exp) {
-40039:   ((void) 0);
-40039:   bool should_shrink;
-40039:   if (is_boundary_infinity(type, x, info)) {
-40039:     should_shrink = boundary_infinity_is_open(type, info);
-40039:     return set_boundary_infinity(to_type, to, to_info, should_shrink);
-40039:   }
-40039:   should_shrink = normal_is_open(type, x, info);
-40039:   bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open));
-40039:   Result r = umod_2exp_assign_r(to, x, exp, round_dir_check(to_type, check));
-40039:   return adjust_boundary(to_type, to, to_info, should_shrink, r);
-40039: }
-40039: 
-40039: template <typename To, typename To_Info, typename T, typename Info>
-40039: inline Result
-40039: smod_2exp_assign(Boundary_Type to_type, To& to, To_Info& to_info,
-40039:                  Boundary_Type type, const T& x, const Info& info,
-40039:                  unsigned int exp) {
-40039:   ((void) 0);
-40039:   bool should_shrink;
-40039:   if (is_boundary_infinity(type, x, info)) {
-40039:     should_shrink = boundary_infinity_is_open(type, info);
-40039:     return set_boundary_infinity(to_type, to, to_info, should_shrink);
-40039:   }
-40039:   should_shrink = normal_is_open(type, x, info);
-40039:   bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open));
-40039:   Result r = smod_2exp_assign_r(to, x, exp, round_dir_check(to_type, check));
-40039:   return adjust_boundary(to_type, to, to_info, should_shrink, r);
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 28 "../../src/Interval_Info_defs.hh" 2
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Interval_NS {
-40039: 
-40039: struct Property {
-40039:   enum Type {
-40039:     CARDINALITY_0_,
-40039:     CARDINALITY_1_,
-40039:     CARDINALITY_IS_
-40039:   };
-40039:   typedef bool Value;
-40039:   static const Value default_value = true;
-40039:   static const Value unsupported_value = false;
-40039:   Property(Type t)
-40039:     : type(t) {
-40039:   }
-40039:   Type type;
-40039: };
-40039: 
-40039: const Property CARDINALITY_0(Property::CARDINALITY_0_);
-40039: const Property CARDINALITY_1(Property::CARDINALITY_1_);
-40039: const Property CARDINALITY_IS(Property::CARDINALITY_IS_);
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: reset_bits(T& bits) {
-40039:   bits = 0;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: reset_bit(T& bits, unsigned int bit) {
-40039:   bits &= ~(static_cast<T>(1) << bit);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: set_bit(T& bits, unsigned int bit, bool value) {
-40039:   if (value) {
-40039:     bits |= static_cast<T>(1) << bit;
-40039:   }
-40039:   else {
-40039:     reset_bit(bits, bit);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: get_bit(const T& bits, unsigned int bit) {
-40039:   return (bits & (static_cast<T>(1) << bit)) != 0;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: set_bits(T& bits, unsigned int start, unsigned int len, T value) {
-40039:   bits &= ~(((static_cast<T>(1) << len) - 1) << start);
-40039:   bits |= value << start;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline T
-40039: get_bits(T& bits, unsigned int start, unsigned int len) {
-40039:   return (bits >> start) & ((static_cast<T>(1) << len) - 1);
-40039: }
-40039: 
-40039: }
-40039: 
-40039: using namespace Interval_NS;
-40039: using namespace Boundary_NS;
-40039: 
-40039: 
-40039: template <typename Policy>
-40039: class Interval_Info_Null {
-40039: public:
-40039:   enum const_bool_value_may_be_empty { may_be_empty = (Policy::may_be_empty) };
-40039:   enum const_bool_value_may_contain_infinity { may_contain_infinity = (Policy::may_contain_infinity) };
-40039:   enum const_bool_value_check_inexact { check_inexact = (Policy::check_inexact) };
-40039:   enum const_bool_value_store_special { store_special = (false) };
-40039:   enum const_bool_value_store_open { store_open = (false) };
-40039:   enum const_bool_value_cache_empty { cache_empty = (false) };
-40039:   enum const_bool_value_cache_singleton { cache_singleton = (false) };
-40039:   Interval_Info_Null() {
-40039:   }
-40039:   void clear() {
-40039:   }
-40039:   void clear_boundary_properties(Boundary_Type) {
-40039:   }
-40039: 
-40039:   template <typename Property>
-40039:   void set_boundary_property(Boundary_Type, const Property&, typename Property::Value = Property::default_value) {
-40039:   }
-40039:   template <typename Property>
-40039:   typename Property::Value get_boundary_property(Boundary_Type, const Property&) const {
-40039:     return Property::unsupported_value;
-40039:   }
-40039:   template <typename Property>
-40039:   void set_interval_property(const Property&, typename Property::Value = Property::default_value) {
-40039:   }
-40039:   template <typename Property>
-40039:   typename Property::Value get_interval_property(const Property&) const {
-40039:     return Property::unsupported_value;
-40039:   }
-40039: 
-40039: 
-40039:   void m_swap(Interval_Info_Null& y);
-40039: 
-40039:   void ascii_dump(std::ostream& s) const;
-40039:   bool ascii_load(std::istream& s);
-40039: };
-40039: 
-40039: template <typename Policy>
-40039: class Interval_Info_Null_Open : public Interval_Info_Null<Policy> {
-40039: public:
-40039:   enum const_bool_value_store_open { store_open = (true) };
-40039:   Interval_Info_Null_Open(bool o)
-40039:     : open(o) {
-40039:   }
-40039:   bool get_boundary_property(Boundary_Type,
-40039:                              const Boundary_NS::Property& p) const {
-40039:     if (p.type == Boundary_NS::Property::OPEN_) {
-40039:       return open;
-40039:     }
-40039:     else {
-40039:       return Boundary_NS::Property::unsupported_value;
-40039:     }
-40039:   }
-40039: 
-40039:   void ascii_dump(std::ostream& s) const;
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: private:
-40039:   bool open;
-40039: };
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: class Interval_Info_Bitset {
-40039: public:
-40039:   enum const_bool_value_may_be_empty { may_be_empty = (Policy::may_be_empty) };
-40039:   enum const_bool_value_may_contain_infinity { may_contain_infinity = (Policy::may_contain_infinity) };
-40039:   enum const_bool_value_check_inexact { check_inexact = (Policy::check_inexact) };
-40039:   enum const_bool_value_store_special { store_special = (Policy::store_special) };
-40039:   enum const_bool_value_store_open { store_open = (Policy::store_open) };
-40039:   enum const_bool_value_cache_empty { cache_empty = (Policy::cache_empty) };
-40039:   enum const_bool_value_cache_singleton { cache_singleton = (Policy::cache_singleton) };
-40039:   enum anonymous_enum_lower_special_bit { lower_special_bit = (Policy::next_bit) };
-40039:   enum anonymous_enum_lower_open_bit { lower_open_bit = (lower_special_bit + (store_special ? 1 : 0)) };
-40039:   enum anonymous_enum_upper_special_bit { upper_special_bit = (lower_open_bit + (store_open ? 1 : 0)) };
-40039:   enum anonymous_enum_upper_open_bit { upper_open_bit = (upper_special_bit + (store_special ? 1 : 0)) };
-40039:   enum anonymous_enum_cardinality_is_bit { cardinality_is_bit = (upper_open_bit + (store_open ? 1 : 0)) };
-40039:   enum anonymous_enum_cardinality_0_bit { cardinality_0_bit = (cardinality_is_bit + ((cache_empty || cache_singleton) ? 1 : 0)) }
-40039:                                                                ;
-40039:   enum anonymous_enum_cardinality_1_bit { cardinality_1_bit = (cardinality_0_bit + (cache_empty ? 1 : 0)) };
-40039:   enum anonymous_enum_next_bit { next_bit = (cardinality_1_bit + (cache_singleton ? 1 : 0)) };
-40039: 
-40039:   Interval_Info_Bitset() {
-40039: 
-40039: 
-40039:     clear();
-40039:   }
-40039: 
-40039:   void clear() {
-40039:     reset_bits(bitset);
-40039:   }
-40039:   void clear_boundary_properties(Boundary_Type t) {
-40039:     set_boundary_property(t, SPECIAL, false);
-40039:     set_boundary_property(t, OPEN, false);
-40039:   }
-40039:   void set_boundary_property(Boundary_Type t,
-40039:                              const Boundary_NS::Property& p,
-40039:                              bool value = true) {
-40039:     switch (p.type) {
-40039:     case Boundary_NS::Property::SPECIAL_:
-40039:       if (store_special) {
-40039:         if (t == LOWER) {
-40039:           set_bit(bitset, lower_special_bit, value);
-40039:         }
-40039:         else {
-40039:           set_bit(bitset, upper_special_bit, value);
-40039:         }
-40039:       }
-40039:       break;
-40039:     case Boundary_NS::Property::OPEN_:
-40039:       if (store_open) {
-40039:         if (t == LOWER) {
-40039:           set_bit(bitset, lower_open_bit, value);
-40039:         }
-40039:         else {
-40039:           set_bit(bitset, upper_open_bit, value);
-40039:         }
-40039:       }
-40039:       break;
-40039:     default:
-40039:       break;
-40039:     }
-40039:   }
-40039:   bool get_boundary_property(Boundary_Type t, const Boundary_NS::Property& p) const {
-40039:     switch (p.type) {
-40039:     case Boundary_NS::Property::SPECIAL_:
-40039:       if (!store_special) {
-40039:         return false;
-40039:       }
-40039:       if (t == LOWER) {
-40039:         return get_bit(bitset, lower_special_bit);
-40039:       }
-40039:       else {
-40039:         return get_bit(bitset, upper_special_bit);
-40039:       }
-40039:     case Boundary_NS::Property::OPEN_:
-40039:       if (!store_open) {
-40039:         return false;
-40039:       }
-40039:       else if (t == LOWER) {
-40039:         return get_bit(bitset, lower_open_bit);
-40039:       }
-40039:       else {
-40039:         return get_bit(bitset, upper_open_bit);
-40039:       }
-40039:     default:
-40039:       return false;
-40039:     }
-40039:   }
-40039:   void set_interval_property(const Interval_NS::Property& p, bool value = true) {
-40039:     switch (p.type) {
-40039:     case Interval_NS::Property::CARDINALITY_0_:
-40039:       if (cache_empty) {
-40039:         set_bit(bitset, cardinality_0_bit, value);
-40039:       }
-40039:       break;
-40039:     case Interval_NS::Property::CARDINALITY_1_:
-40039:       if (cache_singleton) {
-40039:         set_bit(bitset, cardinality_1_bit, value);
-40039:       }
-40039:       break;
-40039:     case Interval_NS::Property::CARDINALITY_IS_:
-40039:       if (cache_empty || cache_singleton) {
-40039:         set_bit(bitset, cardinality_is_bit, value);
-40039:       }
-40039:       break;
-40039:     default:
-40039:       break;
-40039:     }
-40039:   }
-40039:   bool get_interval_property(Interval_NS::Property p) const {
-40039:     switch (p.type) {
-40039:     case Interval_NS::Property::CARDINALITY_0_:
-40039:       return cache_empty && get_bit(bitset, cardinality_0_bit);
-40039:     case Interval_NS::Property::CARDINALITY_1_:
-40039:       return cache_singleton && get_bit(bitset, cardinality_1_bit);
-40039:     case Interval_NS::Property::CARDINALITY_IS_:
-40039:       return (cache_empty || cache_singleton)
-40039:         && get_bit(bitset, cardinality_is_bit);
-40039:     default:
-40039:       return false;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   void m_swap(Interval_Info_Bitset& y);
-40039: 
-40039:   void ascii_dump(std::ostream& s) const;
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: protected:
-40039:   T bitset;
-40039: };
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Interval_Info_inlines.hh" 1
-40039: # 29 "../../src/Interval_Info_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Policy>
-40039: inline void
-40039: Interval_Info_Null<Policy>::m_swap(Interval_Info_Null<Policy>&) {
-40039: }
-40039: 
-40039: template <typename Policy>
-40039: inline void
-40039: Interval_Info_Null<Policy>::ascii_dump(std::ostream&) const {
-40039: }
-40039: 
-40039: template <typename Policy>
-40039: inline bool
-40039: Interval_Info_Null<Policy>::ascii_load(std::istream&) {
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename Policy>
-40039: inline void
-40039: Interval_Info_Null_Open<Policy>::ascii_dump(std::ostream& s) const {
-40039:   s << (open ? "open" : "closed");
-40039: }
-40039: 
-40039: template <typename Policy>
-40039: inline bool
-40039: Interval_Info_Null_Open<Policy>::ascii_load(std::istream& s) {
-40039:   std::string str;
-40039:   if (!(s >> str)) {
-40039:     return false;
-40039:   }
-40039:   if (str == "open") {
-40039:     open = true;
-40039:     return true;
-40039:   }
-40039:   if (str == "closed") {
-40039:     open = false;
-40039:     return true;
-40039:   }
-40039:   return false;
-40039: }
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline void
-40039: Interval_Info_Bitset<T, Policy>::m_swap(Interval_Info_Bitset<T, Policy>& y) {
-40039:   using std::swap;
-40039:   swap(bitset, y.bitset);
-40039: }
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline void
-40039: Interval_Info_Bitset<T, Policy>::ascii_dump(std::ostream& s) const {
-40039:   const std::ios::fmtflags old_flags = s.setf(std::ios::hex,
-40039:                                               std::ios::basefield);
-40039:   s << bitset;
-40039:   s.flags(old_flags);
-40039: }
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline bool
-40039: Interval_Info_Bitset<T, Policy>::ascii_load(std::istream& s) {
-40039:   const std::ios::fmtflags old_flags = s.setf(std::ios::hex,
-40039:                                               std::ios::basefield);
-40039:   s >> bitset;
-40039:   s.flags(old_flags);
-40039:   return !s.fail();
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Policy>
-40039: inline void
-40039: swap(Interval_Info_Null<Policy>& x, Interval_Info_Null<Policy>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T, typename Policy>
-40039: inline void
-40039: swap(Interval_Info_Bitset<T, Policy>& x, Interval_Info_Bitset<T, Policy>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 300 "../../src/Interval_Info_defs.hh" 2
-40039: # 33 "../../src/Interval_defs.hh" 2
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: enum Ternary { T_YES, T_NO, T_MAYBE };
-40039: 
-40039: inline I_Result
-40039: combine(Result l, Result u) {
-40039:   const unsigned res
-40039:     = static_cast<unsigned>(l) | (static_cast<unsigned>(u) << 6);
-40039:   return static_cast<I_Result>(res);
-40039: }
-40039: 
-40039: struct Interval_Base {
-40039: };
-40039: 
-40039: using namespace Boundary_NS;
-40039: using namespace Interval_NS;
-40039: 
-40039: template <typename T, typename Enable = void>
-40039: struct Is_Singleton : public Is_Native_Or_Checked<T> {};
-40039: 
-40039: template <typename T>
-40039: struct Is_Interval : public Is_Same_Or_Derived<Interval_Base, T> {};
-40039: # 80 "../../src/Interval_defs.hh"
-40039: template <typename Boundary, typename Info>
-40039: class Interval : public Interval_Base, private Info {
-40039: private:
-40039:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_86 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!Info::store_special || !std::numeric_limits<Boundary>::has_infinity)>) }
-40039: 
-40039: 
-40039:                                                                      ;
-40039:   Info& w_info() const {
-40039:     return const_cast<Interval&>(*this);
-40039:   }
-40039: 
-40039: public:
-40039:   typedef Boundary boundary_type;
-40039:   typedef Info info_type;
-40039: 
-40039:   typedef Interval_NS::Property Property;
-40039: 
-40039:   template <typename T>
-40039:   typename Enable_If<Is_Singleton<T>::value || Is_Interval<T>::value, Interval&>::type
-40039:   operator=(const T& x) {
-40039:     assign(x);
-40039:     return *this;
-40039:   }
-40039: 
-40039:   template <typename T>
-40039:   typename Enable_If<Is_Singleton<T>::value || Is_Interval<T>::value, Interval&>::type
-40039:   operator+=(const T& x) {
-40039:     add_assign(*this, x);
-40039:     return *this;
-40039:   }
-40039:   template <typename T>
-40039:   typename Enable_If<Is_Singleton<T>::value || Is_Interval<T>::value, Interval&>::type
-40039:   operator-=(const T& x) {
-40039:     sub_assign(*this, x);
-40039:     return *this;
-40039:   }
-40039:   template <typename T>
-40039:   typename Enable_If<Is_Singleton<T>::value || Is_Interval<T>::value, Interval&>::type
-40039:   operator*=(const T& x) {
-40039:     mul_assign(*this, x);
-40039:     return *this;
-40039:   }
-40039:   template <typename T>
-40039:   typename Enable_If<Is_Singleton<T>::value || Is_Interval<T>::value, Interval&>::type
-40039:   operator/=(const T& x) {
-40039:     div_assign(*this, x);
-40039:     return *this;
-40039:   }
-40039: 
-40039: 
-40039:   void m_swap(Interval& y);
-40039: 
-40039:   Info& info() {
-40039:     return *this;
-40039:   }
-40039: 
-40039:   const Info& info() const {
-40039:     return *this;
-40039:   }
-40039: 
-40039:   Boundary& lower() {
-40039:     return lower_;
-40039:   }
-40039: 
-40039:   const Boundary& lower() const {
-40039:     return lower_;
-40039:   }
-40039: 
-40039:   Boundary& upper() {
-40039:     return upper_;
-40039:   }
-40039: 
-40039:   const Boundary& upper() const {
-40039:     return upper_;
-40039:   }
-40039: 
-40039:   I_Constraint<boundary_type> lower_constraint() const {
-40039:     ((void) 0);
-40039:     if (info().get_boundary_property(LOWER, SPECIAL)) {
-40039:       return I_Constraint<boundary_type>();
-40039:     }
-40039:     return i_constraint(lower_is_open() ? GREATER_THAN : GREATER_OR_EQUAL,
-40039:                         lower(), true);
-40039:   }
-40039:   I_Constraint<boundary_type> upper_constraint() const {
-40039:     ((void) 0);
-40039:     if (info().get_boundary_property(UPPER, SPECIAL)) {
-40039:       return I_Constraint<boundary_type>();
-40039:     }
-40039:     return i_constraint(upper_is_open() ? LESS_THAN : LESS_OR_EQUAL,
-40039:                         upper(), true);
-40039:   }
-40039: 
-40039:   bool is_empty() const {
-40039:     return lt(UPPER, upper(), info(), LOWER, lower(), info());
-40039:   }
-40039: 
-40039:   bool check_empty(I_Result r) const {
-40039:     return (r & I_ANY) == I_EMPTY
-40039:       || ((r & I_ANY) != I_NOT_EMPTY && is_empty());
-40039:   }
-40039: 
-40039:   bool is_singleton() const {
-40039:     return eq(LOWER, lower(), info(), UPPER, upper(), info());
-40039:   }
-40039: 
-40039:   bool lower_is_open() const {
-40039:     ((void) 0);
-40039:     return is_open(LOWER, lower(), info());
-40039:   }
-40039: 
-40039:   bool upper_is_open() const {
-40039:     ((void) 0);
-40039:     return is_open(UPPER, upper(), info());
-40039:   }
-40039: 
-40039:   bool lower_is_boundary_infinity() const {
-40039:     ((void) 0);
-40039:     return Boundary_NS::is_boundary_infinity(LOWER, lower(), info());
-40039:   }
-40039: 
-40039:   bool upper_is_boundary_infinity() const {
-40039:     ((void) 0);
-40039:     return Boundary_NS::is_boundary_infinity(UPPER, upper(), info());
-40039:   }
-40039: 
-40039:   bool lower_is_domain_inf() const {
-40039:     ((void) 0);
-40039:     return Boundary_NS::is_domain_inf(LOWER, lower(), info());
-40039:   }
-40039: 
-40039:   bool upper_is_domain_sup() const {
-40039:     ((void) 0);
-40039:     return Boundary_NS::is_domain_sup(UPPER, upper(), info());
-40039:   }
-40039: 
-40039:   bool is_bounded() const {
-40039:     ((void) 0);
-40039:     return !lower_is_boundary_infinity() && !upper_is_boundary_infinity();
-40039:   }
-40039: 
-40039:   bool is_universe() const {
-40039:     ((void) 0);
-40039:     return lower_is_domain_inf() && upper_is_domain_sup();
-40039:   }
-40039: 
-40039:   I_Result lower_extend() {
-40039:     info().clear_boundary_properties(LOWER);
-40039:     set_unbounded(LOWER, lower(), info());
-40039:     return I_ANY;
-40039:   }
-40039: 
-40039:   template <typename C>
-40039:   typename Enable_If<Is_Same_Or_Derived<I_Constraint_Base, C>::value, I_Result>::type
-40039:   lower_extend(const C& c);
-40039: 
-40039:   I_Result upper_extend() {
-40039:     info().clear_boundary_properties(UPPER);
-40039:     set_unbounded(UPPER, upper(), info());
-40039:     return I_ANY;
-40039:   }
-40039: 
-40039:   template <typename C>
-40039:   typename Enable_If<Is_Same_Or_Derived<I_Constraint_Base, C>::value, I_Result>::type
-40039:   upper_extend(const C& c);
-40039: 
-40039:   I_Result build() {
-40039:     return assign(UNIVERSE);
-40039:   }
-40039: 
-40039:   template <typename C>
-40039:   typename Enable_If<Is_Same_Or_Derived<I_Constraint_Base, C>::value, I_Result>::type
-40039:   build(const C& c) {
-40039:     Relation_Symbol rs;
-40039:     switch (c.rel()) {
-40039:     case V_LGE:
-40039:     case V_GT_MINUS_INFINITY:
-40039:     case V_LT_PLUS_INFINITY:
-40039:       return assign(UNIVERSE);
-40039:     default:
-40039:       return assign(EMPTY);
-40039:     case V_LT:
-40039:     case V_LE:
-40039:     case V_GT:
-40039:     case V_GE:
-40039:     case V_EQ:
-40039:     case V_NE:
-40039:       assign(UNIVERSE);
-40039:       rs = static_cast<Relation_Symbol>(c.rel());
-40039:       return refine_existential(rs, c.value());
-40039:     }
-40039:   }
-40039: 
-40039:   template <typename C1, typename C2>
-40039:   typename Enable_If<Is_Same_Or_Derived<I_Constraint_Base, C1>::value
-40039:                      &&
-40039:                      Is_Same_Or_Derived<I_Constraint_Base, C2>::value,
-40039:                      I_Result>::type
-40039:   build(const C1& c1, const C2& c2) {
-40039:     switch (c1.rel()) {
-40039:     case V_LGE:
-40039:       return build(c2);
-40039:     case V_NAN:
-40039:       return assign(EMPTY);
-40039:     default:
-40039:       break;
-40039:     }
-40039:     switch (c2.rel()) {
-40039:     case V_LGE:
-40039:       return build(c1);
-40039:     case V_NAN:
-40039:       return assign(EMPTY);
-40039:     default:
-40039:       break;
-40039:     }
-40039:     build(c1);
-40039:     const I_Result r = add_constraint(c2);
-40039:     return r - (I_CHANGED | I_UNCHANGED);
-40039:   }
-40039: 
-40039:   template <typename C>
-40039:   typename Enable_If<Is_Same_Or_Derived<I_Constraint_Base, C>::value, I_Result>::type
-40039:   add_constraint(const C& c) {
-40039:     Interval x;
-40039:     x.build(c);
-40039:     return intersect_assign(x);
-40039:   }
-40039: 
-40039:   I_Result assign(Degenerate_Element e) {
-40039:     I_Result r;
-40039:     info().clear();
-40039:     switch (e) {
-40039:     case EMPTY:
-40039:       lower_ = 1;
-40039:       upper_ = 0;
-40039:       r = I_EMPTY | I_EXACT;
-40039:       break;
-40039:     case UNIVERSE:
-40039:       set_unbounded(LOWER, lower(), info());
-40039:       set_unbounded(UPPER, upper(), info());
-40039:       r = I_UNIVERSE | I_EXACT;
-40039:       break;
-40039:     default:
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       r = I_EMPTY;
-40039:       break;
-40039:     }
-40039:     ((void) 0);
-40039:     return r;
-40039:   }
-40039: 
-40039:   template <typename From>
-40039:   typename Enable_If<Is_Special<From>::value, I_Result>::type
-40039:   assign(const From&) {
-40039:     info().clear();
-40039:     Result rl;
-40039:     Result ru;
-40039:     switch (From::vclass) {
-40039:     case VC_MINUS_INFINITY:
-40039:       rl = Boundary_NS::set_minus_infinity(LOWER, lower(), info());
-40039:       ru = Boundary_NS::set_minus_infinity(UPPER, upper(), info());
-40039:       break;
-40039:     case VC_PLUS_INFINITY:
-40039:       rl = Boundary_NS::set_plus_infinity(LOWER, lower(), info());
-40039:       ru = Boundary_NS::set_plus_infinity(UPPER, upper(), info());
-40039:       break;
-40039:     default:
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       rl = V_NAN;
-40039:       ru = V_NAN;
-40039:       break;
-40039:     }
-40039:     ((void) 0);
-40039:     return combine(rl, ru);
-40039:   }
-40039: 
-40039:   I_Result set_infinities() {
-40039:     info().clear();
-40039:     Result rl = Boundary_NS::set_minus_infinity(LOWER, lower(), info());
-40039:     Result ru = Boundary_NS::set_plus_infinity(UPPER, upper(), info());
-40039:     ((void) 0);
-40039:     return combine(rl, ru);
-40039:   }
-40039: 
-40039:   static bool is_always_topologically_closed() {
-40039:     return !Info::store_open;
-40039:   }
-40039: 
-40039:   bool is_topologically_closed() const {
-40039:     ((void) 0);
-40039:     return is_always_topologically_closed()
-40039:       || is_empty()
-40039:       || ((lower_is_boundary_infinity() || !lower_is_open())
-40039:           && (upper_is_boundary_infinity() || !upper_is_open()));
-40039:   }
-40039: 
-40039: 
-40039:   void topological_closure_assign() {
-40039:     if (!Info::store_open || is_empty()) {
-40039:       return;
-40039:     }
-40039:     if (lower_is_open() && !lower_is_boundary_infinity()) {
-40039:       info().set_boundary_property(LOWER, OPEN, false);
-40039:     }
-40039:     if (upper_is_open() && !upper_is_boundary_infinity()) {
-40039:       info().set_boundary_property(UPPER, OPEN, false);
-40039:     }
-40039:   }
-40039: 
-40039:   void remove_inf() {
-40039:     ((void) 0);
-40039:     if (!Info::store_open) {
-40039:       return;
-40039:     }
-40039:     info().set_boundary_property(LOWER, OPEN, true);
-40039:   }
-40039: 
-40039:   void remove_sup() {
-40039:     ((void) 0);
-40039:     if (!Info::store_open) {
-40039:       return;
-40039:     }
-40039:     info().set_boundary_property(UPPER, OPEN, true);
-40039:   }
-40039: 
-40039:   int infinity_sign() const {
-40039:     ((void) 0);
-40039:     if (is_reverse_infinity(LOWER, lower(), info())) {
-40039:       return 1;
-40039:     }
-40039:     else if (is_reverse_infinity(UPPER, upper(), info())) {
-40039:       return -1;
-40039:     }
-40039:     else {
-40039:       return 0;
-40039:     }
-40039:   }
-40039: 
-40039:   bool contains_integer_point() const {
-40039:     ((void) 0);
-40039:     if (is_empty()) {
-40039:       return false;
-40039:     }
-40039:     if (!is_bounded()) {
-40039:       return true;
-40039:     }
-40039:     Boundary l;
-40039:     if (lower_is_open()) {
-40039:       add_assign_r(l, lower(), Boundary(1), ROUND_DOWN);
-40039:       floor_assign_r(l, l, ROUND_DOWN);
-40039:     }
-40039:     else {
-40039:       ceil_assign_r(l, lower(), ROUND_DOWN);
-40039:     }
-40039:     Boundary u;
-40039:     if (upper_is_open()) {
-40039:       sub_assign_r(u, upper(), Boundary(1), ROUND_UP);
-40039:       ceil_assign_r(u, u, ROUND_UP);
-40039:     }
-40039:     else {
-40039:       floor_assign_r(u, upper(), ROUND_UP);
-40039:     }
-40039:     return u >= l;
-40039:   }
-40039: 
-40039:   void drop_some_non_integer_points() {
-40039:     if (is_empty()) {
-40039:       return;
-40039:     }
-40039:     if (lower_is_open() && !lower_is_boundary_infinity()) {
-40039:       add_assign_r(lower(), lower(), Boundary(1), ROUND_DOWN);
-40039:       floor_assign_r(lower(), lower(), ROUND_DOWN);
-40039:       info().set_boundary_property(LOWER, OPEN, false);
-40039:     }
-40039:     else {
-40039:       ceil_assign_r(lower(), lower(), ROUND_DOWN);
-40039:     }
-40039:     if (upper_is_open() && !upper_is_boundary_infinity()) {
-40039:       sub_assign_r(upper(), upper(), Boundary(1), ROUND_UP);
-40039:       ceil_assign_r(upper(), upper(), ROUND_UP);
-40039:       info().set_boundary_property(UPPER, OPEN, false);
-40039:     }
-40039:     else {
-40039:       floor_assign_r(upper(), upper(), ROUND_UP);
-40039:     }
-40039:   }
-40039: 
-40039:   template <typename From>
-40039:   typename Enable_If<Is_Singleton<From>::value || Is_Interval<From>::value, I_Result>::type
-40039:   wrap_assign(Bounded_Integer_Type_Width w,
-40039:               Bounded_Integer_Type_Representation r,
-40039:               const From& refinement) {
-40039:     if (is_empty()) {
-40039:       return I_EMPTY;
-40039:     }
-40039:     if (lower_is_boundary_infinity() || upper_is_boundary_infinity()) {
-40039:       return assign(refinement);
-40039:     }
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Boundary> holder_u; Boundary& u = holder_u.item();
-40039:     Result result = sub_2exp_assign_r(u, upper(), w, ROUND_UP);
-40039:     if (result_overflow(result) == 0 && u > lower()) {
-40039:       return assign(refinement);
-40039:     }
-40039:     info().clear();
-40039:     switch (r) {
-40039:     case UNSIGNED:
-40039:       umod_2exp_assign(LOWER, lower(), info(),
-40039:                        LOWER, lower(), info(), w);
-40039:       umod_2exp_assign(UPPER, upper(), info(),
-40039:                        UPPER, upper(), info(), w);
-40039:       break;
-40039:     case SIGNED_2_COMPLEMENT:
-40039:       smod_2exp_assign(LOWER, lower(), info(),
-40039:                        LOWER, lower(), info(), w);
-40039:       smod_2exp_assign(UPPER, upper(), info(),
-40039:                        UPPER, upper(), info(), w);
-40039:       break;
-40039:     default:
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       break;
-40039:     }
-40039:     if (le(LOWER, lower(), info(), UPPER, upper(), info())) {
-40039:       return intersect_assign(refinement);
-40039:     }
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Interval> holder_tmp; Interval& tmp = holder_tmp.item();
-40039:     tmp.info().clear();
-40039:     Boundary_NS::assign(LOWER, tmp.lower(), tmp.info(),
-40039:                         LOWER, lower(), info());
-40039:     set_unbounded(UPPER, tmp.upper(), tmp.info());
-40039:     tmp.intersect_assign(refinement);
-40039:     lower_extend();
-40039:     intersect_assign(refinement);
-40039:     return join_assign(tmp);
-40039:   }
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039:   void ascii_dump(std::ostream& s) const;
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039:   bool OK() const {
-40039:     if (!Info::may_be_empty && is_empty()) {
-40039: 
-40039: 
-40039: 
-40039:       return false;
-40039:     }
-40039: 
-40039:     if (is_open(LOWER, lower(), info())) {
-40039:       if (is_plus_infinity(LOWER, lower(), info())) {
-40039: 
-40039: 
-40039: 
-40039:       }
-40039:     }
-40039:     else if (!Info::may_contain_infinity
-40039:              && (is_minus_infinity(LOWER, lower(), info())
-40039:                  || is_plus_infinity(LOWER, lower(), info()))) {
-40039: 
-40039: 
-40039: 
-40039:       return false;
-40039:     }
-40039:     if (!info().get_boundary_property(LOWER, SPECIAL)) {
-40039:       if (is_not_a_number(lower())) {
-40039: 
-40039: 
-40039: 
-40039:         return false;
-40039:       }
-40039:     }
-40039: 
-40039:     if (is_open(UPPER, upper(), info())) {
-40039:       if (is_minus_infinity(UPPER, upper(), info())) {
-40039: 
-40039: 
-40039: 
-40039:       }
-40039:     }
-40039:     else if (!Info::may_contain_infinity
-40039:              && (is_minus_infinity(UPPER, upper(), info())
-40039:                  || is_plus_infinity(UPPER, upper(), info()))) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       return false;
-40039:     }
-40039:     if (!info().get_boundary_property(UPPER, SPECIAL)) {
-40039:       if (is_not_a_number(upper())) {
-40039: 
-40039: 
-40039: 
-40039:         return false;
-40039:       }
-40039:     }
-40039: 
-40039: 
-40039:     return true;
-40039:   }
-40039: 
-40039:   Interval() {
-40039:   }
-40039: 
-40039:   template <typename T>
-40039:   explicit Interval(const T& x) {
-40039:     assign(x);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   explicit Interval(const char* s);
-40039: 
-40039:   template <typename T>
-40039:   typename Enable_If<Is_Singleton<T>::value
-40039:                      || Is_Interval<T>::value, bool>::type
-40039:   contains(const T& y) const;
-40039: 
-40039:   template <typename T>
-40039:   typename Enable_If<Is_Singleton<T>::value
-40039:                      || Is_Interval<T>::value, bool>::type
-40039:   strictly_contains(const T& y) const;
-40039: 
-40039:   template <typename T>
-40039:   typename Enable_If<Is_Singleton<T>::value
-40039:                      || Is_Interval<T>::value, bool>::type
-40039:   is_disjoint_from(const T& y) const;
-40039: 
-40039: 
-40039:   template <typename From>
-40039:   typename Enable_If<Is_Singleton<From>::value
-40039:                      || Is_Interval<From>::value, I_Result>::type
-40039:   assign(const From& x);
-40039: 
-40039:   template <typename Type>
-40039:   typename Enable_If<Is_Singleton<Type>::value
-40039:                      || Is_Interval<Type>::value, bool>::type
-40039:   can_be_exactly_joined_to(const Type& x) const;
-40039: 
-40039:   template <typename From>
-40039:   typename Enable_If<Is_Singleton<From>::value
-40039:                      || Is_Interval<From>::value, I_Result>::type
-40039:   join_assign(const From& x);
-40039: 
-40039:   template <typename From1, typename From2>
-40039:   typename Enable_If<((Is_Singleton<From1>::value
-40039:                        || Is_Interval<From1>::value)
-40039:                       && (Is_Singleton<From2>::value
-40039:                           || Is_Interval<From2>::value)), I_Result>::type
-40039:   join_assign(const From1& x, const From2& y);
-40039: 
-40039:   template <typename From>
-40039:   typename Enable_If<Is_Singleton<From>::value
-40039:                      || Is_Interval<From>::value, I_Result>::type
-40039:   intersect_assign(const From& x);
-40039: 
-40039:   template <typename From1, typename From2>
-40039:   typename Enable_If<((Is_Singleton<From1>::value
-40039:                        || Is_Interval<From1>::value)
-40039:                       && (Is_Singleton<From2>::value
-40039:                           || Is_Interval<From2>::value)), I_Result>::type
-40039:   intersect_assign(const From1& x, const From2& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename From>
-40039:   typename Enable_If<Is_Singleton<From>::value
-40039:                      || Is_Interval<From>::value, I_Result>::type
-40039:   difference_assign(const From& x);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename From1, typename From2>
-40039:   typename Enable_If<((Is_Singleton<From1>::value
-40039:                        || Is_Interval<From1>::value)
-40039:                       && (Is_Singleton<From2>::value
-40039:                           || Is_Interval<From2>::value)), I_Result>::type
-40039:   difference_assign(const From1& x, const From2& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename From>
-40039:   typename Enable_If<Is_Singleton<From>::value
-40039:                      || Is_Interval<From>::value, I_Result>::type
-40039:   lower_approximation_difference_assign(const From& x);
-40039: # 685 "../../src/Interval_defs.hh"
-40039:   template <typename From>
-40039:   typename Enable_If<Is_Interval<From>::value, bool>::type
-40039:   simplify_using_context_assign(const From& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename From>
-40039:   typename Enable_If<Is_Interval<From>::value, void>::type
-40039:   empty_intersection_assign(const From& y);
-40039: # 712 "../../src/Interval_defs.hh"
-40039:   template <typename From>
-40039:   typename Enable_If<Is_Singleton<From>::value
-40039:                      || Is_Interval<From>::value, I_Result>::type
-40039:   refine_existential(Relation_Symbol rel, const From& x);
-40039: # 732 "../../src/Interval_defs.hh"
-40039:   template <typename From>
-40039:   typename Enable_If<Is_Singleton<From>::value
-40039:                      || Is_Interval<From>::value, I_Result>::type
-40039:   refine_universal(Relation_Symbol rel, const From& x);
-40039: 
-40039:   template <typename From>
-40039:   typename Enable_If<Is_Singleton<From>::value
-40039:                      || Is_Interval<From>::value, I_Result>::type
-40039:   neg_assign(const From& x);
-40039: 
-40039:   template <typename From1, typename From2>
-40039:   typename Enable_If<((Is_Singleton<From1>::value || Is_Interval<From1>::value)
-40039:                       && (Is_Singleton<From2>::value || Is_Interval<From2>::value)), I_Result>::type
-40039:   add_assign(const From1& x, const From2& y);
-40039: 
-40039:   template <typename From1, typename From2>
-40039:   typename Enable_If<((Is_Singleton<From1>::value || Is_Interval<From1>::value)
-40039:                       && (Is_Singleton<From2>::value || Is_Interval<From2>::value)), I_Result>::type
-40039:   sub_assign(const From1& x, const From2& y);
-40039: 
-40039:   template <typename From1, typename From2>
-40039:   typename Enable_If<((Is_Singleton<From1>::value || Is_Interval<From1>::value)
-40039:                       && (Is_Singleton<From2>::value || Is_Interval<From2>::value)), I_Result>::type
-40039:   mul_assign(const From1& x, const From2& y);
-40039: 
-40039:   template <typename From1, typename From2>
-40039:   typename Enable_If<((Is_Singleton<From1>::value || Is_Interval<From1>::value)
-40039:                       && (Is_Singleton<From2>::value || Is_Interval<From2>::value)), I_Result>::type
-40039:   div_assign(const From1& x, const From2& y);
-40039: 
-40039:   template <typename From, typename Iterator>
-40039:   typename Enable_If<Is_Interval<From>::value, void>::type
-40039:   CC76_widening_assign(const From& y, Iterator first, Iterator last);
-40039: 
-40039: private:
-40039:   Boundary lower_;
-40039:   Boundary upper_;
-40039: };
-40039: 
-40039: 
-40039: 
-40039: template <typename Boundary, typename Info>
-40039: void swap(Interval<Boundary, Info>& x, Interval<Boundary, Info>& y);
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Interval_inlines.hh" 1
-40039: # 27 "../../src/Interval_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Boundary, typename Info>
-40039: inline memory_size_type
-40039: Interval<Boundary, Info>::external_memory_in_bytes() const {
-40039:   return Parma_Polyhedra_Library::external_memory_in_bytes(lower())
-40039:     + Parma_Polyhedra_Library::external_memory_in_bytes(upper());
-40039: }
-40039: 
-40039: template <typename Boundary, typename Info>
-40039: inline memory_size_type
-40039: Interval<Boundary, Info>::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: template <typename Boundary, typename Info>
-40039: inline void
-40039: Interval<Boundary, Info>::m_swap(Interval<Boundary, Info>& y) {
-40039:   using std::swap;
-40039:   swap(lower(), y.lower());
-40039:   swap(upper(), y.upper());
-40039:   swap(info(), y.info());
-40039: }
-40039: 
-40039: template <typename Boundary, typename Info>
-40039: inline bool
-40039: f_is_empty(const Interval<Boundary, Info>& x) {
-40039:   return x.is_empty();
-40039: }
-40039: template <typename Boundary, typename Info>
-40039: inline bool
-40039: f_is_singleton(const Interval<Boundary, Info>& x) {
-40039:   return x.is_singleton();
-40039: }
-40039: template <typename Boundary, typename Info>
-40039: inline int
-40039: infinity_sign(const Interval<Boundary, Info>& x) {
-40039:   return x.infinity_sign();
-40039: }
-40039: 
-40039: namespace Interval_NS {
-40039: 
-40039: template <typename Boundary, typename Info>
-40039: inline const Boundary&
-40039: f_lower(const Interval<Boundary, Info>& x) {
-40039:   return x.lower();
-40039: }
-40039: template <typename Boundary, typename Info>
-40039: inline const Boundary&
-40039: f_upper(const Interval<Boundary, Info>& x) {
-40039:   return x.upper();
-40039: }
-40039: template <typename Boundary, typename Info>
-40039: inline const Info&
-40039: f_info(const Interval<Boundary, Info>& x) {
-40039:   return x.info();
-40039: }
-40039: 
-40039: struct Scalar_As_Interval_Policy {
-40039:   enum const_bool_value_may_be_empty { may_be_empty = (true) };
-40039:   enum const_bool_value_may_contain_infinity { may_contain_infinity = (true) };
-40039:   enum const_bool_value_check_inexact { check_inexact = (false) };
-40039: };
-40039: 
-40039: typedef Interval_Info_Null<Scalar_As_Interval_Policy>
-40039: Scalar_As_Interval_Info;
-40039: 
-40039: const Scalar_As_Interval_Info SCALAR_INFO;
-40039: 
-40039: typedef Interval_Info_Null_Open<Scalar_As_Interval_Policy>
-40039: Scalar_As_Interval_Info_Open;
-40039: 
-40039: template <typename T>
-40039: inline typename Enable_If<Is_Singleton<T>::value, const T&>::type
-40039: f_lower(const T& x) {
-40039:   return x;
-40039: }
-40039: template <typename T>
-40039: inline typename Enable_If<Is_Singleton<T>::value, const T&>::type
-40039: f_upper(const T& x) {
-40039:   return x;
-40039: }
-40039: template <typename T>
-40039: inline typename Enable_If<Is_Singleton<T>::value,
-40039:                           const Scalar_As_Interval_Info&>::type
-40039: f_info(const T&) {
-40039:   return SCALAR_INFO;
-40039: }
-40039: template <typename T>
-40039: inline typename Enable_If<Is_Singleton<T>::value,
-40039:                           Scalar_As_Interval_Info_Open>::type
-40039: f_info(const T&, bool open) {
-40039:   return Scalar_As_Interval_Info_Open(open);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Enable_If<Is_Singleton<T>::value, bool>::type
-40039: f_is_empty(const T& x) {
-40039:   return is_not_a_number(x);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Enable_If<Is_Singleton<T>::value, bool>::type
-40039: f_is_singleton(const T& x) {
-40039:   return !f_is_empty(x);
-40039: }
-40039: 
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Enable_If<Is_Singleton<T>::value
-40039:                           || Is_Interval<T>::value, bool>::type
-40039: is_singleton_integer(const T& x) {
-40039:   return is_singleton(x) && is_integer(f_lower(x));
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Enable_If<Is_Singleton<T>::value
-40039:                           || Is_Interval<T>::value, bool>::type
-40039: check_empty_arg(const T& x) {
-40039:   if (f_info(x).may_be_empty) {
-40039:     return f_is_empty(x);
-40039:   }
-40039:   else {
-40039:     ((void) 0);
-40039:     return false;
-40039:   }
-40039: }
-40039: 
-40039: template <typename T1, typename T2>
-40039: inline typename Enable_If<((Is_Singleton<T1>::value
-40039:                             || Is_Interval<T1>::value)
-40039:                            && (Is_Singleton<T2>::value
-40039:                                || Is_Interval<T2>::value)
-40039:                            && (Is_Interval<T1>::value
-40039:                                || Is_Interval<T2>::value)),
-40039:                           bool>::type
-40039: operator==(const T1& x, const T2& y) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   if (check_empty_arg(x)) {
-40039:     return check_empty_arg(y);
-40039:   }
-40039:   else if (check_empty_arg(y)) {
-40039:     return false;
-40039:   }
-40039:   return eq(LOWER, f_lower(x), f_info(x), LOWER, f_lower(y), f_info(y))
-40039:     && eq(UPPER, f_upper(x), f_info(x), UPPER, f_upper(y), f_info(y));
-40039: }
-40039: 
-40039: template <typename T1, typename T2>
-40039: inline typename Enable_If<((Is_Singleton<T1>::value
-40039:                             || Is_Interval<T1>::value)
-40039:                            && (Is_Singleton<T2>::value
-40039:                                || Is_Interval<T2>::value)
-40039:                            && (Is_Interval<T1>::value
-40039:                                || Is_Interval<T2>::value)),
-40039:                           bool>::type
-40039: operator!=(const T1& x, const T2& y) {
-40039:   return !(x == y);
-40039: }
-40039: 
-40039: template <typename Boundary, typename Info>
-40039: template <typename T>
-40039: inline typename Enable_If<Is_Singleton<T>::value
-40039:                           || Is_Interval<T>::value, bool>::type
-40039: Interval<Boundary, Info>::contains(const T& y) const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   if (check_empty_arg(y)) {
-40039:     return true;
-40039:   }
-40039:   if (check_empty_arg(*this)) {
-40039:     return false;
-40039:   }
-40039:   return le(LOWER, lower(), info(), LOWER, f_lower(y), f_info(y))
-40039:     && ge(UPPER, upper(), info(), UPPER, f_upper(y), f_info(y));
-40039: }
-40039: 
-40039: template <typename Boundary, typename Info>
-40039: template <typename T>
-40039: inline typename Enable_If<Is_Singleton<T>::value
-40039:                           || Is_Interval<T>::value, bool>::type
-40039: Interval<Boundary, Info>::strictly_contains(const T& y) const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   if (check_empty_arg(y)) {
-40039:     return !check_empty_arg(*this);
-40039:   }
-40039:   if (check_empty_arg(*this)) {
-40039:     return false;
-40039:   }
-40039:   return (lt(LOWER, lower(), info(), LOWER, f_lower(y), f_info(y))
-40039:           && ge(UPPER, upper(), info(), UPPER, f_upper(y), f_info(y)))
-40039:     || (le(LOWER, lower(), info(), LOWER, f_lower(y), f_info(y))
-40039:         && gt(UPPER, upper(), info(), UPPER, f_upper(y), f_info(y)));
-40039: }
-40039: 
-40039: template <typename Boundary, typename Info>
-40039: template <typename T>
-40039: inline typename Enable_If<Is_Singleton<T>::value
-40039:                           || Is_Interval<T>::value, bool>::type
-40039: Interval<Boundary, Info>::is_disjoint_from(const T& y) const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   if (check_empty_arg(*this) || check_empty_arg(y)) {
-40039:     return true;
-40039:   }
-40039:   return gt(LOWER, lower(), info(), UPPER, f_upper(y), f_info(y))
-40039:     || lt(UPPER, upper(), info(), LOWER, f_lower(y), f_info(y));
-40039: }
-40039: 
-40039: template <typename To_Boundary, typename To_Info>
-40039: template <typename From>
-40039: inline typename Enable_If<Is_Singleton<From>::value
-40039:                           || Is_Interval<From>::value, I_Result>::type
-40039: Interval<To_Boundary, To_Info>::assign(const From& x) {
-40039:   ((void) 0);
-40039:   if (check_empty_arg(x)) {
-40039:     return assign(EMPTY);
-40039:   }
-40039:   Parma_Polyhedra_Library::Dirty_Temp<To_Info> holder_to_info; To_Info& to_info = holder_to_info.item();
-40039:   to_info.clear();
-40039:   const Result rl = Boundary_NS::assign(LOWER, lower(), to_info,
-40039:                                         LOWER, f_lower(x), f_info(x));
-40039:   const Result ru = Boundary_NS::assign(UPPER, upper(), to_info,
-40039:                                         UPPER, f_upper(x), f_info(x));
-40039:   assign_or_swap(info(), to_info);
-40039:   ((void) 0);
-40039:   return combine(rl, ru);
-40039: }
-40039: 
-40039: template <typename To_Boundary, typename To_Info>
-40039: template <typename From>
-40039: inline typename Enable_If<Is_Singleton<From>::value
-40039:                           || Is_Interval<From>::value, I_Result>::type
-40039: Interval<To_Boundary, To_Info>::join_assign(const From& x) {
-40039:   ((void) 0);
-40039:   if (check_empty_arg(*this)) {
-40039:     return assign(x);
-40039:   }
-40039:   if (check_empty_arg(x)) {
-40039:     return combine(V_EQ, V_EQ);
-40039:   }
-40039:   Result rl;
-40039:   Result ru;
-40039:   rl = min_assign(LOWER, lower(), info(), LOWER, f_lower(x), f_info(x));
-40039:   ru = max_assign(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x));
-40039:   ((void) 0);
-40039:   return combine(rl, ru);
-40039: }
-40039: 
-40039: template <typename To_Boundary, typename To_Info>
-40039: template <typename From1, typename From2>
-40039: inline typename Enable_If<((Is_Singleton<From1>::value
-40039:                             || Is_Interval<From1>::value)
-40039:                            && (Is_Singleton<From2>::value
-40039:                                || Is_Interval<From2>::value)), I_Result>::type
-40039: Interval<To_Boundary, To_Info>::join_assign(const From1& x, const From2& y) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   if (check_empty_arg(x)) {
-40039:     return assign(y);
-40039:   }
-40039:   if (check_empty_arg(y)) {
-40039:     return assign(x);
-40039:   }
-40039:   Parma_Polyhedra_Library::Dirty_Temp<To_Info> holder_to_info; To_Info& to_info = holder_to_info.item();
-40039:   to_info.clear();
-40039:   Result rl;
-40039:   Result ru;
-40039:   rl = min_assign(LOWER, lower(), to_info,
-40039:                   LOWER, f_lower(x), f_info(x),
-40039:                   LOWER, f_lower(y), f_info(y));
-40039:   ru = max_assign(UPPER, upper(), to_info,
-40039:                   UPPER, f_upper(x), f_info(x),
-40039:                   UPPER, f_upper(y), f_info(y));
-40039:   assign_or_swap(info(), to_info);
-40039:   ((void) 0);
-40039:   return combine(rl, ru);
-40039: }
-40039: 
-40039: template <typename Boundary, typename Info>
-40039: template <typename Type>
-40039: inline typename Enable_If<Is_Singleton<Type>::value
-40039:                           || Is_Interval<Type>::value, bool>::type
-40039: Interval<Boundary, Info>::can_be_exactly_joined_to(const Type& x) const {
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Boundary> holder_b; Boundary& b = holder_b.item();
-40039:   if (gt(LOWER, lower(), info(), UPPER, f_upper(x), f_info(x))) {
-40039:     b = lower();
-40039:     return eq(LOWER, b, info(), UPPER, f_upper(x), f_info(x));
-40039:   }
-40039:   else if (lt(UPPER, upper(), info(), LOWER, f_lower(x), f_info(x))) {
-40039:     b = upper();
-40039:     return eq(UPPER, b, info(), LOWER, f_lower(x), f_info(x));
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: 
-40039: template <typename To_Boundary, typename To_Info>
-40039: template <typename From>
-40039: inline typename Enable_If<Is_Singleton<From>::value
-40039:                           || Is_Interval<From>::value, I_Result>::type
-40039: Interval<To_Boundary, To_Info>::intersect_assign(const From& x) {
-40039:   ((void) 0);
-40039:   max_assign(LOWER, lower(), info(), LOWER, f_lower(x), f_info(x));
-40039:   min_assign(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x));
-40039:   ((void) 0);
-40039:   return I_ANY;
-40039: }
-40039: 
-40039: template <typename To_Boundary, typename To_Info>
-40039: template <typename From1, typename From2>
-40039: inline typename Enable_If<((Is_Singleton<From1>::value
-40039:                             || Is_Interval<From1>::value)
-40039:                            && (Is_Singleton<From2>::value
-40039:                                || Is_Interval<From2>::value)), I_Result>::type
-40039: Interval<To_Boundary, To_Info>::intersect_assign(const From1& x,
-40039:                                                  const From2& y) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   Parma_Polyhedra_Library::Dirty_Temp<To_Info> holder_to_info; To_Info& to_info = holder_to_info.item();
-40039:   to_info.clear();
-40039:   max_assign(LOWER, lower(), to_info,
-40039:              LOWER, f_lower(x), f_info(x),
-40039:              LOWER, f_lower(y), f_info(y));
-40039:   min_assign(UPPER, upper(), to_info,
-40039:              UPPER, f_upper(x), f_info(x),
-40039:              UPPER, f_upper(y), f_info(y));
-40039:   assign_or_swap(info(), to_info);
-40039:   ((void) 0);
-40039:   return I_NOT_EMPTY;
-40039: }
-40039: 
-40039: template <typename To_Boundary, typename To_Info>
-40039: template <typename From>
-40039: inline typename Enable_If<Is_Singleton<From>::value
-40039:                           || Is_Interval<From>::value, I_Result>::type
-40039: Interval<To_Boundary, To_Info>::difference_assign(const From& x) {
-40039:   ((void) 0);
-40039:   if (lt(UPPER, upper(), info(), LOWER, f_lower(x), f_info(x))
-40039:       || gt(LOWER, lower(), info(), UPPER, f_upper(x), f_info(x))) {
-40039:     return combine(V_EQ, V_EQ);
-40039:   }
-40039:   bool nl = ge(LOWER, lower(), info(), LOWER, f_lower(x), f_info(x));
-40039:   bool nu = le(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x));
-40039:   Result rl = V_EQ;
-40039:   Result ru = V_EQ;
-40039:   if (nl) {
-40039:     if (nu) {
-40039:       return assign(EMPTY);
-40039:     }
-40039:     else {
-40039:       info().clear_boundary_properties(LOWER);
-40039:       rl = complement(LOWER, lower(), info(), UPPER, f_upper(x), f_info(x));
-40039:     }
-40039:   }
-40039:   else if (nu) {
-40039:     info().clear_boundary_properties(UPPER);
-40039:     ru = complement(UPPER, upper(), info(), LOWER, f_lower(x), f_info(x));
-40039:   }
-40039:   ((void) 0);
-40039:   return combine(rl, ru);
-40039: }
-40039: 
-40039: template <typename To_Boundary, typename To_Info>
-40039: template <typename From1, typename From2>
-40039: inline typename Enable_If<((Is_Singleton<From1>::value
-40039:                             || Is_Interval<From1>::value)
-40039:                            && (Is_Singleton<From2>::value
-40039:                                || Is_Interval<From2>::value)), I_Result>::type
-40039: Interval<To_Boundary, To_Info>::difference_assign(const From1& x,
-40039:                                                   const From2& y) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   Parma_Polyhedra_Library::Dirty_Temp<To_Info> holder_to_info; To_Info& to_info = holder_to_info.item();
-40039:   to_info.clear();
-40039:   if (lt(UPPER, f_upper(x), f_info(x), LOWER, f_lower(y), f_info(y))
-40039:       || gt(LOWER, f_lower(x), f_info(x), UPPER, f_upper(y), f_info(y))) {
-40039:     return assign(x);
-40039:   }
-40039:   bool nl = ge(LOWER, f_lower(x), f_info(x), LOWER, f_lower(y), f_info(y));
-40039:   bool nu = le(UPPER, f_upper(x), f_info(x), UPPER, f_upper(y), f_info(y));
-40039:   Result rl = V_EQ;
-40039:   Result ru = V_EQ;
-40039:   if (nl) {
-40039:     if (nu) {
-40039:       return assign(EMPTY);
-40039:     }
-40039:     else {
-40039:       rl = complement(LOWER, lower(), info(), UPPER, f_upper(y), f_info(y));
-40039:       ru = Boundary_NS::assign(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x));
-40039:     }
-40039:   }
-40039:   else if (nu) {
-40039:     ru = complement(UPPER, upper(), info(), LOWER, f_lower(y), f_info(y));
-40039:     rl = Boundary_NS::assign(LOWER, lower(), info(),
-40039:                              LOWER, f_lower(x), f_info(x));
-40039:   }
-40039:   assign_or_swap(info(), to_info);
-40039:   ((void) 0);
-40039:   return combine(rl, ru);
-40039: }
-40039: 
-40039: template <typename To_Boundary, typename To_Info>
-40039: template <typename From>
-40039: inline typename Enable_If<Is_Singleton<From>::value
-40039:                           || Is_Interval<From>::value, I_Result>::type
-40039: Interval<To_Boundary, To_Info>
-40039: ::refine_existential(Relation_Symbol rel, const From& x) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   if (check_empty_arg(x)) {
-40039:     return assign(EMPTY);
-40039:   }
-40039:   switch (rel) {
-40039:   case LESS_THAN:
-40039:     {
-40039:       if (lt(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x))) {
-40039:         return combine(V_EQ, V_EQ);
-40039:       }
-40039:       info().clear_boundary_properties(UPPER);
-40039:       Boundary_NS::assign(UPPER, upper(), info(),
-40039:                           UPPER, f_upper(x), f_info(x), true);
-40039:       return I_ANY;
-40039:     }
-40039:   case LESS_OR_EQUAL:
-40039:     {
-40039:       if (le(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x))) {
-40039:         return combine(V_EQ, V_EQ);
-40039:       }
-40039:       info().clear_boundary_properties(UPPER);
-40039:       Boundary_NS::assign(UPPER, upper(), info(),
-40039:                           UPPER, f_upper(x), f_info(x));
-40039:       return I_ANY;
-40039:     }
-40039:   case GREATER_THAN:
-40039:     {
-40039:       if (gt(LOWER, lower(), info(), LOWER, f_lower(x), f_info(x))) {
-40039:         return combine(V_EQ, V_EQ);
-40039:       }
-40039:       info().clear_boundary_properties(LOWER);
-40039:       Boundary_NS::assign(LOWER, lower(), info(),
-40039:                           LOWER, f_lower(x), f_info(x), true);
-40039:       return I_ANY;
-40039:     }
-40039:   case GREATER_OR_EQUAL:
-40039:     {
-40039:       if (ge(LOWER, lower(), info(), LOWER, f_lower(x), f_info(x))) {
-40039:         return combine(V_EQ, V_EQ);
-40039:       }
-40039:       info().clear_boundary_properties(LOWER);
-40039:       Boundary_NS::assign(LOWER, lower(), info(),
-40039:                           LOWER, f_lower(x), f_info(x));
-40039:       return I_ANY;
-40039:     }
-40039:   case EQUAL:
-40039:     return intersect_assign(x);
-40039:   case NOT_EQUAL:
-40039:     {
-40039:       if (!f_is_singleton(x)) {
-40039:         return combine(V_EQ, V_EQ);
-40039:       }
-40039:       if (check_empty_arg(*this)) {
-40039:         return I_EMPTY;
-40039:       }
-40039:       if (eq(LOWER, lower(), info(), LOWER, f_lower(x), f_info(x))) {
-40039:         remove_inf();
-40039:       }
-40039:       if (eq(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x))) {
-40039:         remove_sup();
-40039:       }
-40039:       return I_ANY;
-40039:     }
-40039:   default:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return I_EMPTY;
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Boundary, typename To_Info>
-40039: template <typename From>
-40039: inline typename Enable_If<Is_Singleton<From>::value
-40039:                           || Is_Interval<From>::value, I_Result>::type
-40039: Interval<To_Boundary, To_Info>::refine_universal(Relation_Symbol rel,
-40039:                                                  const From& x) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   if (check_empty_arg(x)) {
-40039:     return combine(V_EQ, V_EQ);
-40039:   }
-40039:   switch (rel) {
-40039:   case LESS_THAN:
-40039:     {
-40039:       if (lt(UPPER, upper(), info(), LOWER, f_lower(x), f_info(x))) {
-40039:         return combine(V_EQ, V_EQ);
-40039:       }
-40039:       info().clear_boundary_properties(UPPER);
-40039:       Result ru = Boundary_NS::assign(UPPER, upper(), info(),
-40039:                                       LOWER, f_lower(x), SCALAR_INFO,
-40039:                                       !is_open(LOWER, f_lower(x), f_info(x)));
-40039:       (void)(ru);
-40039:       return I_ANY;
-40039:     }
-40039:   case LESS_OR_EQUAL:
-40039:     {
-40039:       if (le(UPPER, upper(), info(), LOWER, f_lower(x), f_info(x))) {
-40039:         return combine(V_EQ, V_EQ);
-40039:       }
-40039:       info().clear_boundary_properties(UPPER);
-40039:       Result ru = Boundary_NS::assign(UPPER, upper(), info(),
-40039:                                       LOWER, f_lower(x), SCALAR_INFO);
-40039:       (void)(ru);
-40039:       return I_ANY;
-40039:     }
-40039:   case GREATER_THAN:
-40039:     {
-40039:       if (gt(LOWER, lower(), info(), UPPER, f_upper(x), f_info(x))) {
-40039:         return combine(V_EQ, V_EQ);
-40039:       }
-40039:       info().clear_boundary_properties(LOWER);
-40039:       Result rl = Boundary_NS::assign(LOWER, lower(), info(),
-40039:                                       UPPER, f_upper(x), SCALAR_INFO,
-40039:                                       !is_open(UPPER, f_upper(x), f_info(x)));
-40039:       (void)(rl);
-40039:       return I_ANY;
-40039:     }
-40039:   case GREATER_OR_EQUAL:
-40039:     {
-40039:       if (ge(LOWER, lower(), info(), UPPER, f_upper(x), f_info(x))) {
-40039:         return combine(V_EQ, V_EQ);
-40039:       }
-40039:       info().clear_boundary_properties(LOWER);
-40039:       Result rl = Boundary_NS::assign(LOWER, lower(), info(),
-40039:                                       UPPER, f_upper(x), SCALAR_INFO);
-40039:       (void)(rl);
-40039:       return I_ANY;
-40039:     }
-40039:   case EQUAL:
-40039:     if (!f_is_singleton(x)) {
-40039:       return assign(EMPTY);
-40039:     }
-40039:     return intersect_assign(x);
-40039:   case NOT_EQUAL:
-40039:     {
-40039:       if (check_empty_arg(*this)) {
-40039:         return I_EMPTY;
-40039:       }
-40039:       if (eq(LOWER, lower(), info(), LOWER, f_lower(x), f_info(x))) {
-40039:         remove_inf();
-40039:       }
-40039:       if (eq(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x))) {
-40039:         remove_sup();
-40039:       }
-40039:       return I_ANY;
-40039:     }
-40039:   default:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return I_EMPTY;
-40039:   }
-40039: }
-40039: 
-40039: template <typename To_Boundary, typename To_Info>
-40039: template <typename From>
-40039: inline typename Enable_If<Is_Singleton<From>::value
-40039:                           || Is_Interval<From>::value, I_Result>::type
-40039: Interval<To_Boundary, To_Info>::neg_assign(const From& x) {
-40039:   ((void) 0);
-40039:   if (check_empty_arg(x)) {
-40039:     return assign(EMPTY);
-40039:   }
-40039:   Parma_Polyhedra_Library::Dirty_Temp<To_Info> holder_to_info; To_Info& to_info = holder_to_info.item();
-40039:   to_info.clear();
-40039:   Result rl;
-40039:   Result ru;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<To_Boundary> holder_to_lower; To_Boundary& to_lower = holder_to_lower.item();
-40039:   rl = Boundary_NS::neg_assign(LOWER, to_lower, to_info, UPPER, f_upper(x), f_info(x));
-40039:   ru = Boundary_NS::neg_assign(UPPER, upper(), to_info, LOWER, f_lower(x), f_info(x));
-40039:   assign_or_swap(lower(), to_lower);
-40039:   assign_or_swap(info(), to_info);
-40039:   ((void) 0);
-40039:   return combine(rl, ru);
-40039: }
-40039: 
-40039: template <typename To_Boundary, typename To_Info>
-40039: template <typename From1, typename From2>
-40039: inline typename Enable_If<((Is_Singleton<From1>::value
-40039:                             || Is_Interval<From1>::value)
-40039:                            && (Is_Singleton<From2>::value
-40039:                                || Is_Interval<From2>::value)), I_Result>::type
-40039: Interval<To_Boundary, To_Info>::add_assign(const From1& x, const From2& y) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   if (check_empty_arg(x) || check_empty_arg(y)) {
-40039:     return assign(EMPTY);
-40039:   }
-40039:   int inf_sign = Parma_Polyhedra_Library::infinity_sign(x);
-40039:   if (inf_sign != 0) {
-40039:     if (Parma_Polyhedra_Library::infinity_sign(y) == -inf_sign) {
-40039:       return assign(EMPTY);
-40039:     }
-40039:   }
-40039:   else {
-40039:     inf_sign = Parma_Polyhedra_Library::infinity_sign(y);
-40039:   }
-40039:   if (inf_sign < 0) {
-40039:     return assign(MINUS_INFINITY);
-40039:   }
-40039:   else if (inf_sign > 0) {
-40039:     return assign(PLUS_INFINITY);
-40039:   }
-40039:   Parma_Polyhedra_Library::Dirty_Temp<To_Info> holder_to_info; To_Info& to_info = holder_to_info.item();
-40039:   to_info.clear();
-40039:   Result rl = Boundary_NS::add_assign(LOWER, lower(), to_info,
-40039:                                       LOWER, f_lower(x), f_info(x),
-40039:                                       LOWER, f_lower(y), f_info(y));
-40039:   Result ru = Boundary_NS::add_assign(UPPER, upper(), to_info,
-40039:                                       UPPER, f_upper(x), f_info(x),
-40039:                                       UPPER, f_upper(y), f_info(y));
-40039:   assign_or_swap(info(), to_info);
-40039:   ((void) 0);
-40039:   return combine(rl, ru);
-40039: }
-40039: 
-40039: template <typename To_Boundary, typename To_Info>
-40039: template <typename From1, typename From2>
-40039: inline typename Enable_If<((Is_Singleton<From1>::value
-40039:                             || Is_Interval<From1>::value)
-40039:                            && (Is_Singleton<From2>::value
-40039:                                || Is_Interval<From2>::value)), I_Result>::type
-40039: Interval<To_Boundary, To_Info>::sub_assign(const From1& x, const From2& y) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   if (check_empty_arg(x) || check_empty_arg(y)) {
-40039:     return assign(EMPTY);
-40039:   }
-40039:   int inf_sign = Parma_Polyhedra_Library::infinity_sign(x);
-40039:   if (inf_sign != 0) {
-40039:     if (Parma_Polyhedra_Library::infinity_sign(y) == inf_sign) {
-40039:       return assign(EMPTY);
-40039:     }
-40039:   }
-40039:   else {
-40039:     inf_sign = -Parma_Polyhedra_Library::infinity_sign(y);
-40039:   }
-40039:   if (inf_sign < 0) {
-40039:     return assign(MINUS_INFINITY);
-40039:   }
-40039:   else if (inf_sign > 0) {
-40039:     return assign(PLUS_INFINITY);
-40039:   }
-40039:   Parma_Polyhedra_Library::Dirty_Temp<To_Info> holder_to_info; To_Info& to_info = holder_to_info.item();
-40039:   to_info.clear();
-40039:   Result rl;
-40039:   Result ru;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<To_Boundary> holder_to_lower; To_Boundary& to_lower = holder_to_lower.item();
-40039:   rl = Boundary_NS::sub_assign(LOWER, to_lower, to_info,
-40039:                                LOWER, f_lower(x), f_info(x),
-40039:                                UPPER, f_upper(y), f_info(y));
-40039:   ru = Boundary_NS::sub_assign(UPPER, upper(), to_info,
-40039:                                UPPER, f_upper(x), f_info(x),
-40039:                                LOWER, f_lower(y), f_info(y));
-40039:   assign_or_swap(lower(), to_lower);
-40039:   assign_or_swap(info(), to_info);
-40039:   ((void) 0);
-40039:   return combine(rl, ru);
-40039: }
-40039: # 708 "../../src/Interval_inlines.hh"
-40039: template <typename To_Boundary, typename To_Info>
-40039: template <typename From1, typename From2>
-40039: inline typename Enable_If<((Is_Singleton<From1>::value
-40039:                             || Is_Interval<From1>::value)
-40039:                            && (Is_Singleton<From2>::value
-40039:                                || Is_Interval<From2>::value)), I_Result>::type
-40039: Interval<To_Boundary, To_Info>::mul_assign(const From1& x, const From2& y) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   if (check_empty_arg(x) || check_empty_arg(y)) {
-40039:     return assign(EMPTY);
-40039:   }
-40039:   int xls = sgn_b(LOWER, f_lower(x), f_info(x));
-40039:   int xus = (xls > 0) ? 1 : sgn_b(UPPER, f_upper(x), f_info(x));
-40039:   int yls = sgn_b(LOWER, f_lower(y), f_info(y));
-40039:   int yus = (yls > 0) ? 1 : sgn_b(UPPER, f_upper(y), f_info(y));
-40039:   int inf_sign = Parma_Polyhedra_Library::infinity_sign(x);
-40039:   int ls;
-40039:   int us;
-40039:   if (inf_sign != 0) {
-40039:     ls = yls;
-40039:     us = yus;
-40039:     goto inf;
-40039:   }
-40039:   else {
-40039:     inf_sign = Parma_Polyhedra_Library::infinity_sign(y);
-40039:     if (inf_sign != 0) {
-40039:       ls = xls;
-40039:       us = xus;
-40039:     inf:
-40039:       if (ls == 0 && us == 0) {
-40039:         return assign(EMPTY);
-40039:       }
-40039:       if (ls == -us) {
-40039:         return set_infinities();
-40039:       }
-40039:       if (ls < 0 || us < 0) {
-40039:         inf_sign = -inf_sign;
-40039:       }
-40039:       if (inf_sign < 0) {
-40039:         return assign(MINUS_INFINITY);
-40039:       }
-40039:       else {
-40039:         return assign(PLUS_INFINITY);
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<To_Info> holder_to_info; To_Info& to_info = holder_to_info.item();
-40039:   to_info.clear();
-40039:   Result rl;
-40039:   Result ru;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<To_Boundary> holder_to_lower; To_Boundary& to_lower = holder_to_lower.item();
-40039: 
-40039:   if (xls >= 0) {
-40039:     if (yls >= 0) {
-40039: 
-40039:       rl = mul_assign_z(LOWER, to_lower, to_info,
-40039:                         LOWER, f_lower(x), f_info(x), xls,
-40039:                         LOWER, f_lower(y), f_info(y), yls);
-40039:       ru = mul_assign_z(UPPER, upper(), to_info,
-40039:                         UPPER, f_upper(x), f_info(x), xus,
-40039:                         UPPER, f_upper(y), f_info(y), yus);
-40039:     }
-40039:     else if (yus <= 0) {
-40039: 
-40039:       rl = mul_assign_z(LOWER, to_lower, to_info,
-40039:                         UPPER, f_upper(x), f_info(x), xus,
-40039:                         LOWER, f_lower(y), f_info(y), yls);
-40039:       ru = mul_assign_z(UPPER, upper(), to_info,
-40039:                         LOWER, f_lower(x), f_info(x), xls,
-40039:                         UPPER, f_upper(y), f_info(y), yus);
-40039:     }
-40039:     else {
-40039: 
-40039:       rl = mul_assign_z(LOWER, to_lower, to_info,
-40039:                         UPPER, f_upper(x), f_info(x), xus,
-40039:                         LOWER, f_lower(y), f_info(y), yls);
-40039:       ru = mul_assign_z(UPPER, upper(), to_info,
-40039:                         UPPER, f_upper(x), f_info(x), xus,
-40039:                         UPPER, f_upper(y), f_info(y), yus);
-40039:     }
-40039:   }
-40039:   else if (xus <= 0) {
-40039:     if (yls >= 0) {
-40039: 
-40039:       rl = mul_assign_z(LOWER, to_lower, to_info,
-40039:                         LOWER, f_lower(x), f_info(x), xls,
-40039:                         UPPER, f_upper(y), f_info(y), yus);
-40039:       ru = mul_assign_z(UPPER, upper(), to_info,
-40039:                         UPPER, f_upper(x), f_info(x), xus,
-40039:                         LOWER, f_lower(y), f_info(y), yls);
-40039:     }
-40039:     else if (yus <= 0) {
-40039: 
-40039:       rl = mul_assign_z(LOWER, to_lower, to_info,
-40039:                         UPPER, f_upper(x), f_info(x), xus,
-40039:                         UPPER, f_upper(y), f_info(y), yus);
-40039:       ru = mul_assign_z(UPPER, upper(), to_info,
-40039:                         LOWER, f_lower(x), f_info(x), xls,
-40039:                         LOWER, f_lower(y), f_info(y), yls);
-40039:     }
-40039:     else {
-40039: 
-40039:       rl = mul_assign_z(LOWER, to_lower, to_info,
-40039:                         LOWER, f_lower(x), f_info(x), xls,
-40039:                         UPPER, f_upper(y), f_info(y), yus);
-40039:       ru = mul_assign_z(UPPER, upper(), to_info,
-40039:                         LOWER, f_lower(x), f_info(x), xls,
-40039:                         LOWER, f_lower(y), f_info(y), yls);
-40039:     }
-40039:   }
-40039:   else if (yls >= 0) {
-40039: 
-40039:     rl = mul_assign_z(LOWER, to_lower, to_info,
-40039:                       LOWER, f_lower(x), f_info(x), xls,
-40039:                       UPPER, f_upper(y), f_info(y), yus);
-40039:     ru = mul_assign_z(UPPER, upper(), to_info,
-40039:                       UPPER, f_upper(x), f_info(x), xus,
-40039:                       UPPER, f_upper(y), f_info(y), yus);
-40039:   }
-40039:   else if (yus <= 0) {
-40039: 
-40039:     rl = mul_assign_z(LOWER, to_lower, to_info,
-40039:                       UPPER, f_upper(x), f_info(x), xus,
-40039:                       LOWER, f_lower(y), f_info(y), yls);
-40039:     ru = mul_assign_z(UPPER, upper(), to_info,
-40039:                       LOWER, f_lower(x), f_info(x), xls,
-40039:                       LOWER, f_lower(y), f_info(y), yls);
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::Dirty_Temp<To_Boundary> holder_tmp; To_Boundary& tmp = holder_tmp.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<To_Info> holder_tmp_info; To_Info& tmp_info = holder_tmp_info.item();
-40039:     tmp_info.clear();
-40039:     Result tmp_r;
-40039:     tmp_r = Boundary_NS::mul_assign(LOWER, tmp, tmp_info,
-40039:                                     UPPER, f_upper(x), f_info(x),
-40039:                                     LOWER, f_lower(y), f_info(y));
-40039:     rl = Boundary_NS::mul_assign(LOWER, to_lower, to_info,
-40039:                                  LOWER, f_lower(x), f_info(x),
-40039:                                  UPPER, f_upper(y), f_info(y));
-40039:     if (gt(LOWER, to_lower, to_info, LOWER, tmp, tmp_info)) {
-40039:       to_lower = tmp;
-40039:       rl = tmp_r;
-40039:     }
-40039:     tmp_info.clear();
-40039:     tmp_r = Boundary_NS::mul_assign(UPPER, tmp, tmp_info,
-40039:                                     UPPER, f_upper(x), f_info(x),
-40039:                                     UPPER, f_upper(y), f_info(y));
-40039:     ru = Boundary_NS::mul_assign(UPPER, upper(), to_info,
-40039:                                  LOWER, f_lower(x), f_info(x),
-40039:                                  LOWER, f_lower(y), f_info(y));
-40039:     if (lt(UPPER, upper(), to_info, UPPER, tmp, tmp_info)) {
-40039:       upper() = tmp;
-40039:       ru = tmp_r;
-40039:     }
-40039:   }
-40039:   assign_or_swap(lower(), to_lower);
-40039:   assign_or_swap(info(), to_info);
-40039:   ((void) 0);
-40039:   return combine(rl, ru);
-40039: }
-40039: # 883 "../../src/Interval_inlines.hh"
-40039: template <typename To_Boundary, typename To_Info>
-40039: template <typename From1, typename From2>
-40039: inline typename Enable_If<((Is_Singleton<From1>::value
-40039:                             || Is_Interval<From1>::value)
-40039:                            && (Is_Singleton<From2>::value
-40039:                                || Is_Interval<From2>::value)), I_Result>::type
-40039: Interval<To_Boundary, To_Info>::div_assign(const From1& x, const From2& y) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   if (check_empty_arg(x) || check_empty_arg(y)) {
-40039:     return assign(EMPTY);
-40039:   }
-40039:   int yls = sgn_b(LOWER, f_lower(y), f_info(y));
-40039:   int yus = (yls > 0) ? 1 : sgn_b(UPPER, f_upper(y), f_info(y));
-40039:   if (yls == 0 && yus == 0) {
-40039:     return assign(EMPTY);
-40039:   }
-40039:   int inf_sign = Parma_Polyhedra_Library::infinity_sign(x);
-40039:   if (inf_sign != 0) {
-40039:     if (Parma_Polyhedra_Library::infinity_sign(y) != 0) {
-40039:       return assign(EMPTY);
-40039:     }
-40039:     if (yls == -yus) {
-40039:       return set_infinities();
-40039:     }
-40039:     if (yls < 0 || yus < 0) {
-40039:       inf_sign = -inf_sign;
-40039:     }
-40039:     if (inf_sign < 0) {
-40039:       return assign(MINUS_INFINITY);
-40039:     }
-40039:     else {
-40039:       return assign(PLUS_INFINITY);
-40039:     }
-40039:   }
-40039:   int xls = sgn_b(LOWER, f_lower(x), f_info(x));
-40039:   int xus = (xls > 0) ? 1 : sgn_b(UPPER, f_upper(x), f_info(x));
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<To_Info> holder_to_info; To_Info& to_info = holder_to_info.item();
-40039:   to_info.clear();
-40039:   Result rl;
-40039:   Result ru;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<To_Boundary> holder_to_lower; To_Boundary& to_lower = holder_to_lower.item();
-40039:   if (yls >= 0) {
-40039:     if (xls >= 0) {
-40039:       rl = div_assign_z(LOWER, to_lower, to_info,
-40039:                         LOWER, f_lower(x), f_info(x), xls,
-40039:                         UPPER, f_upper(y), f_info(y), yus);
-40039:       ru = div_assign_z(UPPER, upper(), to_info,
-40039:                         UPPER, f_upper(x), f_info(x), xus,
-40039:                         LOWER, f_lower(y), f_info(y), yls);
-40039:     }
-40039:     else if (xus <= 0) {
-40039:       rl = div_assign_z(LOWER, to_lower, to_info,
-40039:                         LOWER, f_lower(x), f_info(x), xls,
-40039:                         LOWER, f_lower(y), f_info(y), yls);
-40039:       ru = div_assign_z(UPPER, upper(), to_info,
-40039:                         UPPER, f_upper(x), f_info(x), xus,
-40039:                         UPPER, f_upper(y), f_info(y), yus);
-40039:     }
-40039:     else {
-40039:       rl = div_assign_z(LOWER, to_lower, to_info,
-40039:                         LOWER, f_lower(x), f_info(x), xls,
-40039:                         LOWER, f_lower(y), f_info(y), yls);
-40039:       ru = div_assign_z(UPPER, upper(), to_info,
-40039:                         UPPER, f_upper(x), f_info(x), xus,
-40039:                         LOWER, f_lower(y), f_info(y), yls);
-40039:     }
-40039:   }
-40039:   else if (yus <= 0) {
-40039:     if (xls >= 0) {
-40039:       rl = div_assign_z(LOWER, to_lower, to_info,
-40039:                         UPPER, f_upper(x), f_info(x), xus,
-40039:                         UPPER, f_upper(y), f_info(y), yus);
-40039:       ru = div_assign_z(UPPER, upper(), to_info,
-40039:                         LOWER, f_lower(x), f_info(x), xls,
-40039:                         LOWER, f_lower(y), f_info(y), yls);
-40039:     }
-40039:     else if (xus <= 0) {
-40039:       rl = div_assign_z(LOWER, to_lower, to_info,
-40039:                         UPPER, f_upper(x), f_info(x), xus,
-40039:                         LOWER, f_lower(y), f_info(y), yls);
-40039:       ru = div_assign_z(UPPER, upper(), to_info,
-40039:                         LOWER, f_lower(x), f_info(x), xls,
-40039:                         UPPER, f_upper(y), f_info(y), yus);
-40039:     }
-40039:     else {
-40039:       rl = div_assign_z(LOWER, to_lower, to_info,
-40039:                         UPPER, f_upper(x), f_info(x), xus,
-40039:                         UPPER, f_upper(y), f_info(y), yus);
-40039:       ru = div_assign_z(UPPER, upper(), to_info,
-40039:                         LOWER, f_lower(x), f_info(x), xls,
-40039:                         UPPER, f_upper(y), f_info(y), yus);
-40039:     }
-40039:   }
-40039:   else {
-40039:     return static_cast<I_Result>(assign(UNIVERSE) | I_SINGULARITIES);
-40039:   }
-40039:   assign_or_swap(lower(), to_lower);
-40039:   assign_or_swap(info(), to_info);
-40039:   ((void) 0);
-40039:   return combine(rl, ru);
-40039: }
-40039: 
-40039: template <typename B, typename Info, typename T>
-40039: inline typename Enable_If<Is_Singleton<T>::value, Interval<B, Info> >::type
-40039: operator+(const Interval<B, Info>& x, const T& y) {
-40039:   Interval<B, Info> z;
-40039:   z.add_assign(x, y);
-40039:   return z;
-40039: }
-40039: 
-40039: template <typename B, typename Info, typename T>
-40039: inline typename Enable_If<Is_Singleton<T>::value, Interval<B, Info> >::type
-40039: operator+(const T& x, const Interval<B, Info>& y) {
-40039:   Interval<B, Info> z;
-40039:   z.add_assign(x, y);
-40039:   return z;
-40039: }
-40039: 
-40039: template <typename B, typename Info>
-40039: inline Interval<B, Info>
-40039: operator+(const Interval<B, Info>& x, const Interval<B, Info>& y) {
-40039:   Interval<B, Info> z;
-40039:   z.add_assign(x, y);
-40039:   return z;
-40039: }
-40039: 
-40039: template <typename B, typename Info, typename T>
-40039: inline typename Enable_If<Is_Singleton<T>::value, Interval<B, Info> >::type
-40039: operator-(const Interval<B, Info>& x, const T& y) {
-40039:   Interval<B, Info> z;
-40039:   z.sub_assign(x, y);
-40039:   return z;
-40039: }
-40039: 
-40039: template <typename B, typename Info, typename T>
-40039: inline typename Enable_If<Is_Singleton<T>::value, Interval<B, Info> >::type
-40039: operator-(const T& x, const Interval<B, Info>& y) {
-40039:   Interval<B, Info> z;
-40039:   z.sub_assign(x, y);
-40039:   return z;
-40039: }
-40039: 
-40039: template <typename B, typename Info>
-40039: inline Interval<B, Info>
-40039: operator-(const Interval<B, Info>& x, const Interval<B, Info>& y) {
-40039:   Interval<B, Info> z;
-40039:   z.sub_assign(x, y);
-40039:   return z;
-40039: }
-40039: 
-40039: template <typename B, typename Info, typename T>
-40039: inline typename Enable_If<Is_Singleton<T>::value, Interval<B, Info> >::type
-40039: operator*(const Interval<B, Info>& x, const T& y) {
-40039:   Interval<B, Info> z;
-40039:   z.mul_assign(x, y);
-40039:   return z;
-40039: }
-40039: 
-40039: template <typename B, typename Info, typename T>
-40039: inline typename Enable_If<Is_Singleton<T>::value, Interval<B, Info> >::type
-40039: operator*(const T& x, const Interval<B, Info>& y) {
-40039:   Interval<B, Info> z;
-40039:   z.mul_assign(x, y);
-40039:   return z;
-40039: }
-40039: 
-40039: template <typename B, typename Info>
-40039: inline Interval<B, Info>
-40039: operator*(const Interval<B, Info>& x, const Interval<B, Info>& y) {
-40039:   Interval<B, Info> z;
-40039:   z.mul_assign(x, y);
-40039:   return z;
-40039: }
-40039: 
-40039: template <typename B, typename Info, typename T>
-40039: inline typename Enable_If<Is_Singleton<T>::value, Interval<B, Info> >::type
-40039: operator/(const Interval<B, Info>& x, const T& y) {
-40039:   Interval<B, Info> z;
-40039:   z.div_assign(x, y);
-40039:   return z;
-40039: }
-40039: 
-40039: template <typename B, typename Info, typename T>
-40039: inline typename Enable_If<Is_Singleton<T>::value, Interval<B, Info> >::type
-40039: operator/(const T& x, const Interval<B, Info>& y) {
-40039:   Interval<B, Info> z;
-40039:   z.div_assign(x, y);
-40039:   return z;
-40039: }
-40039: 
-40039: template <typename B, typename Info>
-40039: inline Interval<B, Info>
-40039: operator/(const Interval<B, Info>& x, const Interval<B, Info>& y) {
-40039:   Interval<B, Info> z;
-40039:   z.div_assign(x, y);
-40039:   return z;
-40039: }
-40039: 
-40039: template <typename Boundary, typename Info>
-40039: inline std::ostream&
-40039: operator<<(std::ostream& os, const Interval<Boundary, Info>& x) {
-40039:   if (check_empty_arg(x)) {
-40039:     return os << "[]";
-40039:   }
-40039:   if (x.is_singleton()) {
-40039:     output(os, x.lower(), Numeric_Format(), ROUND_NOT_NEEDED);
-40039:     return os;
-40039:   }
-40039:   os << (x.lower_is_open() ? "(" : "[");
-40039:   if (x.info().get_boundary_property(LOWER, SPECIAL)) {
-40039:     os << "-inf";
-40039:   }
-40039:   else {
-40039:     output(os, x.lower(), Numeric_Format(), ROUND_NOT_NEEDED);
-40039:   }
-40039:   os << ", ";
-40039:   if (x.info().get_boundary_property(UPPER, SPECIAL)) {
-40039:     os << "+inf";
-40039:   }
-40039:   else {
-40039:     output(os, x.upper(), Numeric_Format(), ROUND_NOT_NEEDED);
-40039:   }
-40039:   os << (x.upper_is_open() ? ")" : "]");
-40039:   return os;
-40039: }
-40039: 
-40039: template <typename Boundary, typename Info>
-40039: inline void
-40039: Interval<Boundary, Info>::ascii_dump(std::ostream& s) const {
-40039:   using Parma_Polyhedra_Library::ascii_dump;
-40039:   s << "info ";
-40039:   info().ascii_dump(s);
-40039:   s << " lower ";
-40039:   ascii_dump(s, lower());
-40039:   s << " upper ";
-40039:   ascii_dump(s, upper());
-40039:   s << '\n';
-40039: }
-40039: 
-40039: template <typename Boundary, typename Info>
-40039: inline bool
-40039: Interval<Boundary, Info>::ascii_load(std::istream& s) {
-40039:   using Parma_Polyhedra_Library::ascii_load;
-40039:   std::string str;
-40039:   if (!(s >> str) || str != "info") {
-40039:     return false;
-40039:   }
-40039:   if (!info().ascii_load(s)) {
-40039:     return false;
-40039:   }
-40039:   if (!(s >> str) || str != "lower") {
-40039:     return false;
-40039:   }
-40039:   if (!ascii_load(s, lower())) {
-40039:     return false;
-40039:   }
-40039:   if (!(s >> str) || str != "upper") {
-40039:     return false;
-40039:   }
-40039:   if (!ascii_load(s, upper())) {
-40039:     return false;
-40039:   }
-40039:   ((void) 0);
-40039:   return true;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Interval_Boundary_Type> struct Select_Temp_Boundary_Type;
-40039: 
-40039: template <typename Interval_Boundary_Type>
-40039: struct Select_Temp_Boundary_Type {
-40039:   typedef Interval_Boundary_Type type;
-40039: };
-40039: 
-40039: 
-40039: template <>
-40039: struct Select_Temp_Boundary_Type<float> {
-40039:   typedef double type;
-40039: };
-40039: 
-40039: 
-40039: template <>
-40039: struct Select_Temp_Boundary_Type<char> {
-40039:   typedef signed long long type;
-40039: };
-40039: 
-40039: template <>
-40039: struct Select_Temp_Boundary_Type<signed char> {
-40039:   typedef signed long long type;
-40039: };
-40039: 
-40039: template <>
-40039: struct Select_Temp_Boundary_Type<unsigned char> {
-40039:   typedef signed long long type;
-40039: };
-40039: 
-40039: template <>
-40039: struct Select_Temp_Boundary_Type<signed short> {
-40039:   typedef signed long long type;
-40039: };
-40039: 
-40039: template <>
-40039: struct Select_Temp_Boundary_Type<unsigned short> {
-40039:   typedef signed long long type;
-40039: };
-40039: 
-40039: template <>
-40039: struct Select_Temp_Boundary_Type<signed int> {
-40039:   typedef signed long long type;
-40039: };
-40039: 
-40039: template <>
-40039: struct Select_Temp_Boundary_Type<unsigned int> {
-40039:   typedef signed long long type;
-40039: };
-40039: 
-40039: template <>
-40039: struct Select_Temp_Boundary_Type<signed long> {
-40039:   typedef signed long long type;
-40039: };
-40039: 
-40039: template <>
-40039: struct Select_Temp_Boundary_Type<unsigned long> {
-40039:   typedef signed long long type;
-40039: };
-40039: 
-40039: template <>
-40039: struct Select_Temp_Boundary_Type<unsigned long long> {
-40039:   typedef signed long long type;
-40039: };
-40039: 
-40039: 
-40039: template <typename Boundary, typename Info>
-40039: inline void
-40039: swap(Interval<Boundary, Info>& x, Interval<Boundary, Info>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 779 "../../src/Interval_defs.hh" 2
-40039: # 1 "../../src/Interval_templates.hh" 1
-40039: # 29 "../../src/Interval_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Boundary, typename Info>
-40039: template <typename C>
-40039: typename Enable_If<Is_Same_Or_Derived<I_Constraint_Base, C>::value, I_Result>::type
-40039: Interval<Boundary, Info>::lower_extend(const C& c) {
-40039:   ((void) 0);
-40039:   bool open;
-40039:   switch (c.rel()) {
-40039:   case V_LGE:
-40039:     return lower_extend();
-40039:   case V_NAN:
-40039:     return I_NOT_EMPTY | I_EXACT | I_UNCHANGED;
-40039:   case V_GT:
-40039:     open = true;
-40039:     break;
-40039:   case V_GE:
-40039:   case V_EQ:
-40039:     open = false;
-40039:     break;
-40039:   default:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return I_NOT_EMPTY | I_EXACT | I_UNCHANGED;
-40039:   }
-40039:   min_assign(LOWER, lower(), info(), LOWER, c.value(), f_info(c.value(), open));
-40039:   ((void) 0);
-40039:   return I_ANY;
-40039: }
-40039: 
-40039: template <typename Boundary, typename Info>
-40039: template <typename C>
-40039: typename Enable_If<Is_Same_Or_Derived<I_Constraint_Base, C>::value, I_Result>::type
-40039: Interval<Boundary, Info>::upper_extend(const C& c) {
-40039:   ((void) 0);
-40039:   bool open;
-40039:   switch (c.rel()) {
-40039:   case V_LGE:
-40039:     return lower_extend();
-40039:   case V_NAN:
-40039:     return I_NOT_EMPTY | I_EXACT | I_UNCHANGED;
-40039:   case V_LT:
-40039:     open = true;
-40039:     break;
-40039:   case V_LE:
-40039:   case V_EQ:
-40039:     open = false;
-40039:     break;
-40039:   default:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return I_NOT_EMPTY | I_EXACT | I_UNCHANGED;
-40039:   }
-40039:   max_assign(UPPER, upper(), info(), UPPER, c.value(), f_info(c.value(), open));
-40039:   ((void) 0);
-40039:   return I_ANY;
-40039: }
-40039: 
-40039: template <typename Boundary, typename Info>
-40039: template <typename From, typename Iterator>
-40039: typename Enable_If<Is_Interval<From>::value, void>::type
-40039: Interval<Boundary, Info>::CC76_widening_assign(const From& y,
-40039:                                                Iterator first,
-40039:                                                Iterator last) {
-40039: 
-40039:   ((void) 0);
-40039:   Interval<Boundary, Info>& x = *this;
-40039: 
-40039: 
-40039:   if (!x.upper_is_boundary_infinity()) {
-40039:     Boundary& x_ub = x.upper();
-40039:     const Boundary& y_ub = y.upper();
-40039:     ((void) 0);
-40039:     if (y_ub < x_ub) {
-40039:       Iterator k = std::lower_bound(first, last, x_ub);
-40039:       if (k != last) {
-40039:         if (x_ub < *k) {
-40039:           x_ub = *k;
-40039:         }
-40039:       }
-40039:       else {
-40039:         x.upper_extend();
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   if (!x.lower_is_boundary_infinity()) {
-40039:     Boundary& x_lb = x.lower();
-40039:     const Boundary& y_lb = y.lower();
-40039:     ((void) 0);
-40039:     if (y_lb > x_lb) {
-40039:       Iterator k = std::lower_bound(first, last, x_lb);
-40039:       if (k != last) {
-40039:         if (x_lb < *k) {
-40039:           if (k != first) {
-40039:             x_lb = *--k;
-40039:           }
-40039:           else {
-40039:             x.lower_extend();
-40039:           }
-40039:         }
-40039:       }
-40039:       else {
-40039:         if (k != first) {
-40039:           x_lb = *--k;
-40039:         }
-40039:         else {
-40039:           x.lower_extend();
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename Boundary, typename Info>
-40039: Interval<Boundary, Info>::Interval(const char* s) {
-40039: 
-40039:   Boundary lower_bound;
-40039:   Result lower_r = assign_r(lower_bound, s, ROUND_DOWN);
-40039:   if (lower_r == V_CVT_STR_UNK || lower_r == V_NAN) {
-40039:     throw std::invalid_argument("PPL::Interval(const char* s)"
-40039:                                 " with s invalid");
-40039:   }
-40039:   lower_r = result_relation_class(lower_r);
-40039: 
-40039: 
-40039:   Boundary upper_bound;
-40039:   Result upper_r = assign_r(upper_bound, s, ROUND_UP);
-40039:   ((void) 0);
-40039:   upper_r = result_relation_class(upper_r);
-40039: 
-40039: 
-40039:   bool lower_open = false;
-40039:   bool upper_open = false;
-40039:   bool lower_boundary_infinity = false;
-40039:   bool upper_boundary_infinity = false;
-40039:   switch (lower_r) {
-40039:   case V_EQ:
-40039:   case V_GE:
-40039:     break;
-40039:   case V_GT:
-40039:     lower_open = true;
-40039:     break;
-40039:   case V_GT_MINUS_INFINITY:
-40039:     lower_open = true;
-40039: 
-40039:   case V_EQ_MINUS_INFINITY:
-40039:     lower_boundary_infinity = true;
-40039:     break;
-40039:   case V_EQ_PLUS_INFINITY:
-40039:   case V_LT_PLUS_INFINITY:
-40039:     if (upper_r == V_EQ_PLUS_INFINITY || upper_r == V_LT_PLUS_INFINITY) {
-40039:       assign(UNIVERSE);
-40039:     }
-40039:     else {
-40039:       assign(EMPTY);
-40039:     }
-40039:     break;
-40039:   default:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     break;
-40039:   }
-40039:   switch (upper_r) {
-40039:   case V_EQ:
-40039:   case V_LE:
-40039:     break;
-40039:   case V_LT:
-40039:     upper_open = true;
-40039:     break;
-40039:   case V_EQ_MINUS_INFINITY:
-40039:   case V_GT_MINUS_INFINITY:
-40039:     if (lower_r == V_EQ_MINUS_INFINITY || lower_r == V_GT_MINUS_INFINITY) {
-40039:       assign(UNIVERSE);
-40039:     }
-40039:     else {
-40039:       assign(EMPTY);
-40039:     }
-40039:     break;
-40039:   case V_LT_PLUS_INFINITY:
-40039:     upper_open = true;
-40039: 
-40039:   case V_EQ_PLUS_INFINITY:
-40039:     upper_boundary_infinity = true;
-40039:     break;
-40039:   default:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     break;
-40039:   }
-40039: 
-40039:   if (!lower_boundary_infinity
-40039:       && !upper_boundary_infinity
-40039:       && (lower_bound > upper_bound
-40039:           || (lower_open && lower_bound == upper_bound))) {
-40039:     assign(EMPTY);
-40039:   }
-40039:   else {
-40039:     if (lower_boundary_infinity) {
-40039:       set_minus_infinity(LOWER, lower(), info(), lower_open);
-40039:     }
-40039:     else {
-40039:       Boundary_NS::assign(LOWER, lower(), info(),
-40039:                           LOWER, lower_bound, SCALAR_INFO, lower_open);
-40039:     }
-40039:     if (upper_boundary_infinity) {
-40039:       set_plus_infinity(UPPER, upper(), info(), upper_open);
-40039:     }
-40039:     else {
-40039:       Boundary_NS::assign(UPPER, upper(), info(),
-40039:                           UPPER, upper_bound, SCALAR_INFO, upper_open);
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: 
-40039: template <typename Boundary, typename Info>
-40039: inline std::istream&
-40039: operator>>(std::istream& is, Interval<Boundary, Info>& x) {
-40039:   Boundary lower_bound;
-40039:   Boundary upper_bound;
-40039:   bool lower_boundary_infinity = false;
-40039:   bool upper_boundary_infinity = false;
-40039:   bool lower_open = false;
-40039:   bool upper_open = false;
-40039:   Result lower_r;
-40039:   Result upper_r;
-40039: 
-40039: 
-40039:   char c;
-40039:   do {
-40039:     if (!is.get(c)) {
-40039:       goto fail;
-40039:     }
-40039:   } while (is_space(c));
-40039: 
-40039: 
-40039:   if (c == '(') {
-40039:     lower_open = true;
-40039:   }
-40039:   else if (c == '[') {
-40039:     if (!is.get(c)) {
-40039:       goto fail;
-40039:     }
-40039:     if (c == ']') {
-40039: 
-40039:       x.assign(EMPTY);
-40039:       return is;
-40039:     }
-40039:     else {
-40039:       is.unget();
-40039:     }
-40039:   }
-40039:   else {
-40039:     goto unexpected_char;
-40039:   }
-40039: 
-40039: 
-40039:   lower_r = input(lower_bound, is, ROUND_DOWN);
-40039:   if (lower_r == V_CVT_STR_UNK || lower_r == V_NAN) {
-40039:     goto fail;
-40039:   }
-40039:   lower_r = result_relation_class(lower_r);
-40039: 
-40039: 
-40039:   do {
-40039:     if (!is.get(c)) {
-40039:       goto fail;
-40039:     }
-40039:   } while (is_space(c));
-40039:   if (c != ',') {
-40039:     goto unexpected_char;
-40039:   }
-40039: 
-40039: 
-40039:   upper_r = input(upper_bound, is, ROUND_UP);
-40039:   if (upper_r == V_CVT_STR_UNK || upper_r == V_NAN) {
-40039:     goto fail;
-40039:   }
-40039:   upper_r = result_relation_class(upper_r);
-40039: 
-40039: 
-40039:   do {
-40039:     if (!is.get(c)) {
-40039:       goto fail;
-40039:     }
-40039:   } while (is_space(c));
-40039:   if (c == ')') {
-40039:     upper_open = true;
-40039:   }
-40039:   else if (c != ']') {
-40039:   unexpected_char:
-40039:     is.unget();
-40039:   fail:
-40039:     is.setstate(std::ios::failbit);
-40039:     return is;
-40039:   }
-40039: 
-40039: 
-40039:   switch (lower_r) {
-40039:   case V_EQ:
-40039:   case V_GE:
-40039:     break;
-40039:   case V_GT:
-40039:     lower_open = true;
-40039:     break;
-40039:   case V_GT_MINUS_INFINITY:
-40039:     lower_open = true;
-40039: 
-40039:   case V_EQ_MINUS_INFINITY:
-40039:     lower_boundary_infinity = true;
-40039:     break;
-40039:   case V_EQ_PLUS_INFINITY:
-40039:   case V_LT_PLUS_INFINITY:
-40039:     if (upper_r == V_EQ_PLUS_INFINITY || upper_r == V_LT_PLUS_INFINITY) {
-40039:       x.assign(UNIVERSE);
-40039:     }
-40039:     else {
-40039:       x.assign(EMPTY);
-40039:     }
-40039:     return is;
-40039:   default:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     break;
-40039:   }
-40039:   switch (upper_r) {
-40039:   case V_EQ:
-40039:   case V_LE:
-40039:     break;
-40039:   case V_LT:
-40039:     upper_open = true;
-40039:     break;
-40039:   case V_GT_MINUS_INFINITY:
-40039:     upper_open = true;
-40039: 
-40039:   case V_EQ_MINUS_INFINITY:
-40039:     if (lower_r == V_EQ_MINUS_INFINITY || lower_r == V_GT_MINUS_INFINITY) {
-40039:       x.assign(UNIVERSE);
-40039:     }
-40039:     else {
-40039:       x.assign(EMPTY);
-40039:     }
-40039:     return is;
-40039:   case V_EQ_PLUS_INFINITY:
-40039:   case V_LT_PLUS_INFINITY:
-40039:     upper_boundary_infinity = true;
-40039:     break;
-40039:   default:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     break;
-40039:   }
-40039: 
-40039:   if (!lower_boundary_infinity
-40039:       && !upper_boundary_infinity
-40039:       && (lower_bound > upper_bound
-40039:           || (lower_open && lower_bound == upper_bound))) {
-40039:     x.assign(EMPTY);
-40039:   }
-40039:   else {
-40039:     if (lower_boundary_infinity) {
-40039:       set_minus_infinity(LOWER, x.lower(), x.info(), lower_open);
-40039:     }
-40039:     else {
-40039:       assign(LOWER, x.lower(), x.info(),
-40039:              LOWER, lower_bound, SCALAR_INFO, lower_open);
-40039:     }
-40039:     if (upper_boundary_infinity) {
-40039:       set_plus_infinity(UPPER, x.upper(), x.info(), upper_open);
-40039:     }
-40039:     else {
-40039:       assign(UPPER, x.upper(), x.info(),
-40039:              UPPER, upper_bound, SCALAR_INFO, upper_open);
-40039:     }
-40039:   }
-40039:   return is;
-40039: }
-40039: 
-40039: template <typename Boundary, typename Info>
-40039: template <typename From>
-40039: typename Enable_If<Is_Interval<From>::value, bool>::type
-40039: Interval<Boundary, Info>::simplify_using_context_assign(const From& y) {
-40039: 
-40039:   if (lt(UPPER, upper(), info(), LOWER, f_lower(y), f_info(y))) {
-40039:     lower_extend();
-40039:     return false;
-40039:   }
-40039:   if (gt(LOWER, lower(), info(), UPPER, f_upper(y), f_info(y))) {
-40039:     upper_extend();
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (!upper_is_boundary_infinity() && !y.upper_is_boundary_infinity()
-40039:       && y.upper() <= upper()) {
-40039:     upper_extend();
-40039:   }
-40039: 
-40039:   if (!lower_is_boundary_infinity() && !y.lower_is_boundary_infinity()
-40039:       && y.lower() >= lower()) {
-40039:     lower_extend();
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename Boundary, typename Info>
-40039: template <typename From>
-40039: typename Enable_If<Is_Interval<From>::value, void>::type
-40039: Interval<Boundary, Info>::empty_intersection_assign(const From&) {
-40039: 
-40039:   assign(EMPTY);
-40039: }
-40039: 
-40039: }
-40039: # 780 "../../src/Interval_defs.hh" 2
-40039: # 28 "../../src/Integer_Interval.hh" 2
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: struct Integer_Interval_Info_Policy {
-40039:   enum const_bool_value_store_special { store_special = (true) };
-40039:   enum const_bool_value_store_open { store_open = (false) };
-40039:   enum const_bool_value_cache_empty { cache_empty = (true) };
-40039:   enum const_bool_value_cache_singleton { cache_singleton = (true) };
-40039:   enum anonymous_enum_next_bit { next_bit = (0) };
-40039:   enum const_bool_value_may_be_empty { may_be_empty = (true) };
-40039:   enum const_bool_value_may_contain_infinity { may_contain_infinity = (false) };
-40039:   enum const_bool_value_check_empty_result { check_empty_result = (false) };
-40039:   enum const_bool_value_check_inexact { check_inexact = (false) };
-40039: };
-40039: 
-40039: typedef Interval_Info_Bitset<unsigned int, Integer_Interval_Info_Policy> Integer_Interval_Info;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef Interval<mpz_class, Integer_Interval_Info> Integer_Interval;
-40039: 
-40039: }
-40039: # 7 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/initializer.hh" 1
-40039: # 27 "../../src/initializer.hh"
-40039: # 1 "../../src/Init_defs.hh" 1
-40039: # 30 "../../src/Init_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: # 40 "../../src/Init_defs.hh"
-40039: void set_rounding_for_PPL();
-40039: # 55 "../../src/Init_defs.hh"
-40039: void restore_pre_PPL_rounding();
-40039: 
-40039: }
-40039: # 72 "../../src/Init_defs.hh"
-40039: class Parma_Polyhedra_Library::Init {
-40039: public:
-40039: 
-40039:   Init();
-40039: 
-40039: 
-40039:   ~Init();
-40039: 
-40039: private:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const unsigned DEFAULT_IRRATIONAL_PRECISION = 128U;
-40039: 
-40039: 
-40039:   static unsigned int count;
-40039:   static fpu_rounding_direction_type old_rounding_direction;
-40039: 
-40039:   friend void set_rounding_for_PPL();
-40039:   friend void restore_pre_PPL_rounding();
-40039: };
-40039: 
-40039: # 1 "../../src/Init_inlines.hh" 1
-40039: # 30 "../../src/Init_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline void
-40039: set_rounding_for_PPL() {
-40039: 
-40039:     fpu_set_rounding_direction(round_fpu_dir(ROUND_DIRECT));
-40039: 
-40039: }
-40039: 
-40039: inline void
-40039: restore_pre_PPL_rounding() {
-40039: 
-40039:   fpu_set_rounding_direction(Init::old_rounding_direction);
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 98 "../../src/Init_defs.hh" 2
-40039: # 28 "../../src/initializer.hh" 2
-40039: 
-40039: 
-40039: 
-40039: static Parma_Polyhedra_Library::Init Parma_Polyhedra_Library_initializer;
-40039: # 48 "../../src/initializer.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: inline void
-40039: initialize() {
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: finalize() {
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 8 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/Linear_Expression_Impl_defs.hh" 1
-40039: # 27 "../../src/Linear_Expression_Impl_defs.hh"
-40039: # 1 "../../src/Linear_Expression_Impl_types.hh" 1
-40039: # 16 "../../src/Linear_Expression_Impl_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Row>
-40039: class Linear_Expression_Impl;
-40039: 
-40039: }
-40039: # 28 "../../src/Linear_Expression_Impl_defs.hh" 2
-40039: # 1 "../../src/Linear_Expression_Interface_defs.hh" 1
-40039: # 27 "../../src/Linear_Expression_Interface_defs.hh"
-40039: # 1 "../../src/Linear_Expression_Interface_types.hh" 1
-40039: # 16 "../../src/Linear_Expression_Interface_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Linear_Expression_Interface;
-40039: 
-40039: }
-40039: # 28 "../../src/Linear_Expression_Interface_defs.hh" 2
-40039: # 1 "../../src/Coefficient_defs.hh" 1
-40039: # 27 "../../src/Coefficient_defs.hh"
-40039: # 1 "../../src/Coefficient_types.hh" 1
-40039: # 19 "../../src/Coefficient_types.hh"
-40039: # 1 "../../src/GMP_Integer_types.hh" 1
-40039: # 20 "../../src/GMP_Integer_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: # 31 "../../src/GMP_Integer_types.hh"
-40039: typedef mpz_class GMP_Integer;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <>
-40039: struct Coefficient_traits_template<GMP_Integer> {
-40039: 
-40039:   typedef const GMP_Integer& const_reference;
-40039: };
-40039: 
-40039: }
-40039: # 20 "../../src/Coefficient_types.hh" 2
-40039: # 152 "../../src/Coefficient_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: # 172 "../../src/Coefficient_types.hh"
-40039: typedef mpz_class Coefficient;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef Coefficient_traits_template<Coefficient> Coefficient_traits;
-40039: 
-40039: }
-40039: # 28 "../../src/Coefficient_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "../../src/GMP_Integer_defs.hh" 1
-40039: # 31 "../../src/GMP_Integer_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: const mpz_class& raw_value(const GMP_Integer& x);
-40039: 
-40039: 
-40039: 
-40039: mpz_class& raw_value(GMP_Integer& x);
-40039: # 51 "../../src/GMP_Integer_defs.hh"
-40039: void neg_assign(GMP_Integer& x);
-40039: 
-40039: 
-40039: 
-40039: void neg_assign(GMP_Integer& x, const GMP_Integer& y);
-40039: 
-40039: 
-40039: 
-40039: void abs_assign(GMP_Integer& x);
-40039: 
-40039: 
-40039: 
-40039: void abs_assign(GMP_Integer& x, const GMP_Integer& y);
-40039: 
-40039: 
-40039: 
-40039: void rem_assign(GMP_Integer& x,
-40039:                 const GMP_Integer& y, const GMP_Integer& z);
-40039: 
-40039: 
-40039: 
-40039: void gcd_assign(GMP_Integer& x,
-40039:                 const GMP_Integer& y, const GMP_Integer& z);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: void gcdext_assign(GMP_Integer& x, GMP_Integer& s, GMP_Integer& t,
-40039:                    const GMP_Integer& y, const GMP_Integer& z);
-40039: 
-40039: 
-40039: 
-40039: void lcm_assign(GMP_Integer& x,
-40039:                 const GMP_Integer& y, const GMP_Integer& z);
-40039: 
-40039: 
-40039: 
-40039: void add_mul_assign(GMP_Integer& x,
-40039:                     const GMP_Integer& y, const GMP_Integer& z);
-40039: 
-40039: 
-40039: 
-40039: void sub_mul_assign(GMP_Integer& x,
-40039:                     const GMP_Integer& y, const GMP_Integer& z);
-40039: 
-40039: 
-40039: 
-40039: void mul_2exp_assign(GMP_Integer& x, const GMP_Integer& y, unsigned int exp);
-40039: 
-40039: 
-40039: 
-40039: void div_2exp_assign(GMP_Integer& x, const GMP_Integer& y, unsigned int exp);
-40039: # 113 "../../src/GMP_Integer_defs.hh"
-40039: void exact_div_assign(GMP_Integer& x,
-40039:                       const GMP_Integer& y, const GMP_Integer& z);
-40039: 
-40039: 
-40039: 
-40039: void sqrt_assign(GMP_Integer& x, const GMP_Integer& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: int cmp(const GMP_Integer& x, const GMP_Integer& y);
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/GMP_Integer_inlines.hh" 1
-40039: # 29 "../../src/GMP_Integer_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline void
-40039: neg_assign(GMP_Integer& x) {
-40039:   
-40039: # 33 "../../src/GMP_Integer_inlines.hh" 3 4
-40039:  __gmpz_neg
-40039: # 33 "../../src/GMP_Integer_inlines.hh"
-40039:         (x.get_mpz_t(), x.get_mpz_t());
-40039: }
-40039: 
-40039: inline void
-40039: neg_assign(GMP_Integer& x, const GMP_Integer& y) {
-40039:   
-40039: # 38 "../../src/GMP_Integer_inlines.hh" 3 4
-40039:  __gmpz_neg
-40039: # 38 "../../src/GMP_Integer_inlines.hh"
-40039:         (x.get_mpz_t(), y.get_mpz_t());
-40039: }
-40039: 
-40039: inline void
-40039: abs_assign(GMP_Integer& x) {
-40039:   
-40039: # 43 "../../src/GMP_Integer_inlines.hh" 3 4
-40039:  __gmpz_abs
-40039: # 43 "../../src/GMP_Integer_inlines.hh"
-40039:         (x.get_mpz_t(), x.get_mpz_t());
-40039: }
-40039: 
-40039: inline void
-40039: abs_assign(GMP_Integer& x, const GMP_Integer& y) {
-40039:   
-40039: # 48 "../../src/GMP_Integer_inlines.hh" 3 4
-40039:  __gmpz_abs
-40039: # 48 "../../src/GMP_Integer_inlines.hh"
-40039:         (x.get_mpz_t(), y.get_mpz_t());
-40039: }
-40039: 
-40039: inline void
-40039: gcd_assign(GMP_Integer& x, const GMP_Integer& y, const GMP_Integer& z) {
-40039:   
-40039: # 53 "../../src/GMP_Integer_inlines.hh" 3 4
-40039:  __gmpz_gcd
-40039: # 53 "../../src/GMP_Integer_inlines.hh"
-40039:         (x.get_mpz_t(), y.get_mpz_t(), z.get_mpz_t());
-40039: }
-40039: 
-40039: inline void
-40039: rem_assign(GMP_Integer& x, const GMP_Integer& y, const GMP_Integer& z) {
-40039:   
-40039: # 58 "../../src/GMP_Integer_inlines.hh" 3 4
-40039:  __gmpz_tdiv_r
-40039: # 58 "../../src/GMP_Integer_inlines.hh"
-40039:            (x.get_mpz_t(), y.get_mpz_t(), z.get_mpz_t());
-40039: }
-40039: 
-40039: inline void
-40039: gcdext_assign(GMP_Integer& x, GMP_Integer& s, GMP_Integer& t,
-40039:               const GMP_Integer& y, const GMP_Integer& z) {
-40039:   
-40039: # 64 "../../src/GMP_Integer_inlines.hh" 3 4
-40039:  __gmpz_gcdext
-40039: # 64 "../../src/GMP_Integer_inlines.hh"
-40039:            (x.get_mpz_t(),
-40039:              s.get_mpz_t(), t.get_mpz_t(),
-40039:              y.get_mpz_t(), z.get_mpz_t());
-40039: }
-40039: 
-40039: inline void
-40039: lcm_assign(GMP_Integer& x, const GMP_Integer& y, const GMP_Integer& z) {
-40039:   
-40039: # 71 "../../src/GMP_Integer_inlines.hh" 3 4
-40039:  __gmpz_lcm
-40039: # 71 "../../src/GMP_Integer_inlines.hh"
-40039:         (x.get_mpz_t(), y.get_mpz_t(), z.get_mpz_t());
-40039: }
-40039: 
-40039: inline void
-40039: add_mul_assign(GMP_Integer& x, const GMP_Integer& y, const GMP_Integer& z) {
-40039:   
-40039: # 76 "../../src/GMP_Integer_inlines.hh" 3 4
-40039:  __gmpz_addmul
-40039: # 76 "../../src/GMP_Integer_inlines.hh"
-40039:            (x.get_mpz_t(), y.get_mpz_t(), z.get_mpz_t());
-40039: }
-40039: 
-40039: inline void
-40039: sub_mul_assign(GMP_Integer& x, const GMP_Integer& y, const GMP_Integer& z) {
-40039:   
-40039: # 81 "../../src/GMP_Integer_inlines.hh" 3 4
-40039:  __gmpz_submul
-40039: # 81 "../../src/GMP_Integer_inlines.hh"
-40039:            (x.get_mpz_t(), y.get_mpz_t(), z.get_mpz_t());
-40039: }
-40039: 
-40039: inline void
-40039: mul_2exp_assign(GMP_Integer& x, const GMP_Integer& y, unsigned int exp) {
-40039:   
-40039: # 86 "../../src/GMP_Integer_inlines.hh" 3 4
-40039:  __gmpz_mul_2exp
-40039: # 86 "../../src/GMP_Integer_inlines.hh"
-40039:              (x.get_mpz_t(), y.get_mpz_t(), exp);
-40039: }
-40039: 
-40039: inline void
-40039: div_2exp_assign(GMP_Integer& x, const GMP_Integer& y, unsigned int exp) {
-40039:   
-40039: # 91 "../../src/GMP_Integer_inlines.hh" 3 4
-40039:  __gmpz_tdiv_q_2exp
-40039: # 91 "../../src/GMP_Integer_inlines.hh"
-40039:                 (x.get_mpz_t(), y.get_mpz_t(), exp);
-40039: }
-40039: 
-40039: inline void
-40039: exact_div_assign(GMP_Integer& x, const GMP_Integer& y, const GMP_Integer& z) {
-40039:   ((void) 0);
-40039:   
-40039: # 97 "../../src/GMP_Integer_inlines.hh" 3 4
-40039:  __gmpz_divexact
-40039: # 97 "../../src/GMP_Integer_inlines.hh"
-40039:              (x.get_mpz_t(), y.get_mpz_t(), z.get_mpz_t());
-40039: }
-40039: 
-40039: inline void
-40039: sqrt_assign(GMP_Integer& x, const GMP_Integer& y) {
-40039:   
-40039: # 102 "../../src/GMP_Integer_inlines.hh" 3 4
-40039:  __gmpz_sqrt
-40039: # 102 "../../src/GMP_Integer_inlines.hh"
-40039:          (x.get_mpz_t(), y.get_mpz_t());
-40039: }
-40039: 
-40039: inline int
-40039: cmp(const GMP_Integer& x, const GMP_Integer& y) {
-40039:   return 
-40039: # 107 "../../src/GMP_Integer_inlines.hh" 3 4
-40039:         __gmpz_cmp
-40039: # 107 "../../src/GMP_Integer_inlines.hh"
-40039:                (x.get_mpz_t(), y.get_mpz_t());
-40039: }
-40039: 
-40039: inline const mpz_class&
-40039: raw_value(const GMP_Integer& x) {
-40039:   return x;
-40039: }
-40039: 
-40039: inline mpz_class&
-40039: raw_value(GMP_Integer& x) {
-40039:   return x;
-40039: }
-40039: 
-40039: }
-40039: # 133 "../../src/GMP_Integer_defs.hh" 2
-40039: # 36 "../../src/Coefficient_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: void Coefficient_constants_initialize();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: void Coefficient_constants_finalize();
-40039: 
-40039: 
-40039: Coefficient_traits::const_reference Coefficient_zero();
-40039: 
-40039: 
-40039: Coefficient_traits::const_reference Coefficient_one();
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Coefficient_inlines.hh" 1
-40039: # 27 "../../src/Coefficient_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: # 57 "../../src/Coefficient_inlines.hh"
-40039: inline Coefficient_traits::const_reference
-40039: Coefficient_zero() {
-40039:   extern const Coefficient* Coefficient_zero_p;
-40039:   return *Coefficient_zero_p;
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: Coefficient_one() {
-40039:   extern const Coefficient* Coefficient_one_p;
-40039:   ((void) 0);
-40039:   return *Coefficient_one_p;
-40039: }
-40039: 
-40039: 
-40039: }
-40039: # 61 "../../src/Coefficient_defs.hh" 2
-40039: # 29 "../../src/Linear_Expression_Interface_defs.hh" 2
-40039: 
-40039: # 1 "../../src/Variables_Set_types.hh" 1
-40039: # 16 "../../src/Variables_Set_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Variables_Set;
-40039: 
-40039: }
-40039: # 31 "../../src/Linear_Expression_Interface_defs.hh" 2
-40039: # 1 "../../src/Dense_Row_types.hh" 1
-40039: # 16 "../../src/Dense_Row_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Dense_Row;
-40039: 
-40039: }
-40039: # 32 "../../src/Linear_Expression_Interface_defs.hh" 2
-40039: # 1 "../../src/Sparse_Row_types.hh" 1
-40039: # 16 "../../src/Sparse_Row_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Sparse_Row;
-40039: 
-40039: }
-40039: # 33 "../../src/Linear_Expression_Interface_defs.hh" 2
-40039: # 51 "../../src/Linear_Expression_Interface_defs.hh"
-40039: class Parma_Polyhedra_Library::Linear_Expression_Interface {
-40039: public:
-40039:   virtual ~Linear_Expression_Interface();
-40039: 
-40039:   virtual bool OK() const = 0;
-40039: 
-40039: 
-40039:   virtual Representation representation() const = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   class const_iterator_interface {
-40039:   public:
-40039:     typedef std::bidirectional_iterator_tag iterator_category;
-40039:     typedef const Coefficient value_type;
-40039:     typedef std::ptrdiff_t difference_type;
-40039:     typedef value_type* pointer;
-40039:     typedef Coefficient_traits::const_reference reference;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     virtual const_iterator_interface* clone() const = 0;
-40039: 
-40039:     virtual ~const_iterator_interface();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     virtual void operator++() = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     virtual void operator--() = 0;
-40039: 
-40039: 
-40039:     virtual reference operator*() const = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     virtual Variable variable() const = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     virtual bool operator==(const const_iterator_interface& x) const = 0;
-40039:   };
-40039: 
-40039: 
-40039: 
-40039:   virtual const_iterator_interface* begin() const = 0;
-40039: 
-40039: 
-40039: 
-40039:   virtual const_iterator_interface* end() const = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual const_iterator_interface* lower_bound(Variable v) const = 0;
-40039: 
-40039: 
-40039:   virtual dimension_type space_dimension() const = 0;
-40039: 
-40039: 
-40039:   virtual void set_space_dimension(dimension_type n) = 0;
-40039: 
-40039: 
-40039:   virtual Coefficient_traits::const_reference
-40039:   coefficient(Variable v) const = 0;
-40039: 
-40039: 
-40039:   virtual void
-40039:   set_coefficient(Variable v, Coefficient_traits::const_reference n) = 0;
-40039: 
-40039: 
-40039:   virtual Coefficient_traits::const_reference inhomogeneous_term() const = 0;
-40039: 
-40039: 
-40039:   virtual void
-40039:   set_inhomogeneous_term(Coefficient_traits::const_reference n) = 0;
-40039: # 158 "../../src/Linear_Expression_Interface_defs.hh"
-40039:   virtual void
-40039:   linear_combine(const Linear_Expression_Interface& y, Variable v) = 0;
-40039: 
-40039: 
-40039: 
-40039:   virtual void linear_combine(const Linear_Expression_Interface& y,
-40039:                               Coefficient_traits::const_reference c1,
-40039:                               Coefficient_traits::const_reference c2) = 0;
-40039: 
-40039: 
-40039: 
-40039:   virtual void linear_combine_lax(const Linear_Expression_Interface& y,
-40039:                                   Coefficient_traits::const_reference c1,
-40039:                                   Coefficient_traits::const_reference c2) = 0;
-40039: 
-40039: 
-40039:   virtual void swap_space_dimensions(Variable v1, Variable v2) = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void remove_space_dimensions(const Variables_Set& vars) = 0;
-40039: 
-40039: 
-40039: 
-40039:   virtual void shift_space_dimensions(Variable v, dimension_type n) = 0;
-40039: # 200 "../../src/Linear_Expression_Interface_defs.hh"
-40039:   virtual void
-40039:   permute_space_dimensions(const std::vector<Variable>& cycle) = 0;
-40039: 
-40039: 
-40039:   virtual bool is_zero() const = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual bool all_homogeneous_terms_are_zero() const = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual memory_size_type total_memory_in_bytes() const = 0;
-40039: 
-40039: 
-40039:   virtual memory_size_type external_memory_in_bytes() const = 0;
-40039: 
-40039: 
-40039:   virtual void ascii_dump(std::ostream& s) const = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual bool ascii_load(std::istream& s) = 0;
-40039: 
-40039: 
-40039: 
-40039:   virtual bool is_equal_to(const Linear_Expression_Interface& x) const = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void normalize() = 0;
-40039: 
-40039: 
-40039: 
-40039:   virtual void sign_normalize() = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void negate(dimension_type first, dimension_type last) = 0;
-40039: 
-40039:   virtual Linear_Expression_Interface&
-40039:   operator+=(Coefficient_traits::const_reference n) = 0;
-40039:   virtual Linear_Expression_Interface&
-40039:   operator-=(Coefficient_traits::const_reference n) = 0;
-40039: # 269 "../../src/Linear_Expression_Interface_defs.hh"
-40039:   virtual int compare(const Linear_Expression_Interface& y) const = 0;
-40039: 
-40039:   virtual Linear_Expression_Interface&
-40039:   operator+=(const Linear_Expression_Interface& e2) = 0;
-40039:   virtual Linear_Expression_Interface&
-40039:   operator+=(const Variable v) = 0;
-40039:   virtual Linear_Expression_Interface&
-40039:   operator-=(const Linear_Expression_Interface& e2) = 0;
-40039:   virtual Linear_Expression_Interface&
-40039:   operator-=(const Variable v) = 0;
-40039:   virtual Linear_Expression_Interface&
-40039:   operator*=(Coefficient_traits::const_reference n) = 0;
-40039:   virtual Linear_Expression_Interface&
-40039:   operator/=(Coefficient_traits::const_reference n) = 0;
-40039: 
-40039:   virtual void negate() = 0;
-40039: 
-40039:   virtual Linear_Expression_Interface&
-40039:   add_mul_assign(Coefficient_traits::const_reference n, const Variable v) = 0;
-40039: 
-40039:   virtual Linear_Expression_Interface&
-40039:   sub_mul_assign(Coefficient_traits::const_reference n, const Variable v) = 0;
-40039: 
-40039:   virtual void add_mul_assign(Coefficient_traits::const_reference factor,
-40039:                               const Linear_Expression_Interface& e2) = 0;
-40039: 
-40039:   virtual void sub_mul_assign(Coefficient_traits::const_reference factor,
-40039:                               const Linear_Expression_Interface& e2) = 0;
-40039: 
-40039:   virtual void print(std::ostream& s) const = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual bool all_zeroes(const Variables_Set& vars) const = 0;
-40039: 
-40039: 
-40039: 
-40039:   virtual bool have_a_common_variable(const Linear_Expression_Interface& x,
-40039:                                       Variable first, Variable last) const = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual Coefficient_traits::const_reference get(dimension_type i) const = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void set(dimension_type i, Coefficient_traits::const_reference n) = 0;
-40039: # 330 "../../src/Linear_Expression_Interface_defs.hh"
-40039:   virtual bool all_zeroes(dimension_type start, dimension_type end) const = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual dimension_type
-40039:   num_zeroes(dimension_type start, dimension_type end) const = 0;
-40039: # 348 "../../src/Linear_Expression_Interface_defs.hh"
-40039:   virtual Coefficient gcd(dimension_type start, dimension_type end) const = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void exact_div_assign(Coefficient_traits::const_reference c,
-40039:                                 dimension_type start, dimension_type end) = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void mul_assign(Coefficient_traits::const_reference n,
-40039:                           dimension_type start, dimension_type end) = 0;
-40039: # 381 "../../src/Linear_Expression_Interface_defs.hh"
-40039:   virtual void
-40039:   linear_combine(const Linear_Expression_Interface& y, dimension_type i) = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void linear_combine(const Linear_Expression_Interface& y,
-40039:                               Coefficient_traits::const_reference c1,
-40039:                               Coefficient_traits::const_reference c2,
-40039:                               dimension_type start, dimension_type end) = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void linear_combine_lax(const Linear_Expression_Interface& y,
-40039:                                   Coefficient_traits::const_reference c1,
-40039:                                   Coefficient_traits::const_reference c2,
-40039:                                   dimension_type start, dimension_type end) = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual dimension_type last_nonzero() const = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual dimension_type
-40039:   last_nonzero(dimension_type first, dimension_type last) const = 0;
-40039: 
-40039: 
-40039: 
-40039:   virtual dimension_type
-40039:   first_nonzero(dimension_type first, dimension_type last) const = 0;
-40039: # 431 "../../src/Linear_Expression_Interface_defs.hh"
-40039:   virtual bool
-40039:   all_zeroes_except(const Variables_Set& vars,
-40039:                     dimension_type start, dimension_type end) const = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void
-40039:   scalar_product_assign(Coefficient& result,
-40039:                         const Linear_Expression_Interface& y,
-40039:                         dimension_type start, dimension_type end) const = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual int
-40039:   scalar_product_sign(const Linear_Expression_Interface& y,
-40039:                       dimension_type start, dimension_type end) const = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void
-40039:   has_a_free_dimension_helper(std::set<dimension_type>& x) const = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual bool is_equal_to(const Linear_Expression_Interface& x,
-40039:                            dimension_type start, dimension_type end) const = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual bool is_equal_to(const Linear_Expression_Interface& x,
-40039:                            Coefficient_traits::const_reference c1,
-40039:                            Coefficient_traits::const_reference c2,
-40039:                            dimension_type start, dimension_type end) const = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void get_row(Dense_Row& r) const = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void get_row(Sparse_Row& r) const = 0;
-40039: };
-40039: # 29 "../../src/Linear_Expression_Impl_defs.hh" 2
-40039: 
-40039: 
-40039: # 1 "../../src/Variables_Set_defs.hh" 1
-40039: # 33 "../../src/Variables_Set_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: std::ostream&
-40039: operator<<(std::ostream& s, const Variables_Set& vs);
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: 
-40039: class Parma_Polyhedra_Library::Variables_Set
-40039:   : public std::set<dimension_type> {
-40039: private:
-40039:   typedef std::set<dimension_type> Base;
-40039: 
-40039: public:
-40039: 
-40039:   Variables_Set();
-40039: 
-40039: 
-40039:   explicit Variables_Set(const Variable v);
-40039: # 68 "../../src/Variables_Set_defs.hh"
-40039:   Variables_Set(const Variable v, const Variable w);
-40039: 
-40039: 
-40039:   static dimension_type max_space_dimension();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039:   void insert(Variable v);
-40039: 
-40039: 
-40039: 
-40039:   using Base::insert;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: };
-40039: 
-40039: # 1 "../../src/Variables_Set_inlines.hh" 1
-40039: # 30 "../../src/Variables_Set_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline
-40039: Variables_Set::Variables_Set()
-40039:   : Base() {
-40039: }
-40039: 
-40039: inline void
-40039: Variables_Set::insert(const Variable v) {
-40039:   insert(v.id());
-40039: }
-40039: 
-40039: inline
-40039: Variables_Set::Variables_Set(const Variable v)
-40039:   : Base() {
-40039:   insert(v);
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Variables_Set::max_space_dimension() {
-40039:   return Variable::max_space_dimension();
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Variables_Set::space_dimension() const {
-40039:   reverse_iterator i = rbegin();
-40039:   return (i == rend()) ? 0 : (*i + 1);
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Variables_Set::external_memory_in_bytes() const {
-40039: 
-40039: 
-40039: 
-40039:   enum color { red, black };
-40039:   return size() * (sizeof(color) + 3*sizeof(void*) + sizeof(dimension_type));
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Variables_Set::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: }
-40039: # 106 "../../src/Variables_Set_defs.hh" 2
-40039: # 32 "../../src/Linear_Expression_Impl_defs.hh" 2
-40039: # 1 "../../src/Dense_Row_defs.hh" 1
-40039: # 33 "../../src/Dense_Row_defs.hh"
-40039: # 1 "/usr/include/c++/8/memory" 1 3
-40039: # 46 "/usr/include/c++/8/memory" 3
-40039:        
-40039: # 47 "/usr/include/c++/8/memory" 3
-40039: # 67 "/usr/include/c++/8/memory" 3
-40039: # 1 "/usr/include/c++/8/bits/stl_raw_storage_iter.h" 1 3
-40039: # 59 "/usr/include/c++/8/bits/stl_raw_storage_iter.h" 3
-40039: 
-40039: # 59 "/usr/include/c++/8/bits/stl_raw_storage_iter.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <class _OutputIterator, class _Tp>
-40039:     class raw_storage_iterator
-40039:     : public iterator<output_iterator_tag, void, void, void, void>
-40039:     {
-40039:     protected:
-40039:       _OutputIterator _M_iter;
-40039: 
-40039:     public:
-40039:       explicit
-40039:       raw_storage_iterator(_OutputIterator __x)
-40039:       : _M_iter(__x) {}
-40039: 
-40039:       raw_storage_iterator&
-40039:       operator*() { return *this; }
-40039: 
-40039:       raw_storage_iterator&
-40039:       operator=(const _Tp& __element)
-40039:       {
-40039:  std::_Construct(std::__addressof(*_M_iter), __element);
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       raw_storage_iterator&
-40039:       operator=(_Tp&& __element)
-40039:       {
-40039:  std::_Construct(std::__addressof(*_M_iter), std::move(__element));
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039:       raw_storage_iterator&
-40039:       operator++()
-40039:       {
-40039:  ++_M_iter;
-40039:  return *this;
-40039:       }
-40039: 
-40039:       raw_storage_iterator
-40039:       operator++(int)
-40039:       {
-40039:  raw_storage_iterator __tmp = *this;
-40039:  ++_M_iter;
-40039:  return __tmp;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       _OutputIterator base() const { return _M_iter; }
-40039:     };
-40039: 
-40039: 
-40039: }
-40039: # 68 "/usr/include/c++/8/memory" 2 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/ext/concurrence.h" 1 3
-40039: # 32 "/usr/include/c++/8/ext/concurrence.h" 3
-40039:        
-40039: # 33 "/usr/include/c++/8/ext/concurrence.h" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   enum _Lock_policy { _S_single, _S_mutex, _S_atomic };
-40039: 
-40039: 
-40039: 
-40039:   static const _Lock_policy __default_lock_policy =
-40039: 
-40039: 
-40039: 
-40039:   _S_atomic;
-40039: # 67 "/usr/include/c++/8/ext/concurrence.h" 3
-40039:   class __concurrence_lock_error : public std::exception
-40039:   {
-40039:   public:
-40039:     virtual char const*
-40039:     what() const throw()
-40039:     { return "__gnu_cxx::__concurrence_lock_error"; }
-40039:   };
-40039: 
-40039:   class __concurrence_unlock_error : public std::exception
-40039:   {
-40039:   public:
-40039:     virtual char const*
-40039:     what() const throw()
-40039:     { return "__gnu_cxx::__concurrence_unlock_error"; }
-40039:   };
-40039: 
-40039:   class __concurrence_broadcast_error : public std::exception
-40039:   {
-40039:   public:
-40039:     virtual char const*
-40039:     what() const throw()
-40039:     { return "__gnu_cxx::__concurrence_broadcast_error"; }
-40039:   };
-40039: 
-40039:   class __concurrence_wait_error : public std::exception
-40039:   {
-40039:   public:
-40039:     virtual char const*
-40039:     what() const throw()
-40039:     { return "__gnu_cxx::__concurrence_wait_error"; }
-40039:   };
-40039: 
-40039: 
-40039:   inline void
-40039:   __throw_concurrence_lock_error()
-40039:   { (throw (__concurrence_lock_error())); }
-40039: 
-40039:   inline void
-40039:   __throw_concurrence_unlock_error()
-40039:   { (throw (__concurrence_unlock_error())); }
-40039: 
-40039: 
-40039:   inline void
-40039:   __throw_concurrence_broadcast_error()
-40039:   { (throw (__concurrence_broadcast_error())); }
-40039: 
-40039:   inline void
-40039:   __throw_concurrence_wait_error()
-40039:   { (throw (__concurrence_wait_error())); }
-40039: 
-40039: 
-40039:   class __mutex
-40039:   {
-40039:   private:
-40039: 
-40039:     __gthread_mutex_t _M_mutex = { { 0, 0, 0, 0, 0, 0, 0, { 0, 0 } } };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     __mutex(const __mutex&);
-40039:     __mutex& operator=(const __mutex&);
-40039: 
-40039:   public:
-40039:     __mutex()
-40039:     {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     }
-40039: # 147 "/usr/include/c++/8/ext/concurrence.h" 3
-40039:     void lock()
-40039:     {
-40039: 
-40039:       if (__gthread_active_p())
-40039:  {
-40039:    if (__gthread_mutex_lock(&_M_mutex) != 0)
-40039:      __throw_concurrence_lock_error();
-40039:  }
-40039: 
-40039:     }
-40039: 
-40039:     void unlock()
-40039:     {
-40039: 
-40039:       if (__gthread_active_p())
-40039:  {
-40039:    if (__gthread_mutex_unlock(&_M_mutex) != 0)
-40039:      __throw_concurrence_unlock_error();
-40039:  }
-40039: 
-40039:     }
-40039: 
-40039:     __gthread_mutex_t* gthread_mutex(void)
-40039:       { return &_M_mutex; }
-40039:   };
-40039: 
-40039:   class __recursive_mutex
-40039:   {
-40039:   private:
-40039: 
-40039:     __gthread_recursive_mutex_t _M_mutex = { { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, 0, { 0, 0 } } };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     __recursive_mutex(const __recursive_mutex&);
-40039:     __recursive_mutex& operator=(const __recursive_mutex&);
-40039: 
-40039:   public:
-40039:     __recursive_mutex()
-40039:     {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     }
-40039: # 202 "/usr/include/c++/8/ext/concurrence.h" 3
-40039:     void lock()
-40039:     {
-40039: 
-40039:       if (__gthread_active_p())
-40039:  {
-40039:    if (__gthread_recursive_mutex_lock(&_M_mutex) != 0)
-40039:      __throw_concurrence_lock_error();
-40039:  }
-40039: 
-40039:     }
-40039: 
-40039:     void unlock()
-40039:     {
-40039: 
-40039:       if (__gthread_active_p())
-40039:  {
-40039:    if (__gthread_recursive_mutex_unlock(&_M_mutex) != 0)
-40039:      __throw_concurrence_unlock_error();
-40039:  }
-40039: 
-40039:     }
-40039: 
-40039:     __gthread_recursive_mutex_t* gthread_recursive_mutex(void)
-40039:     { return &_M_mutex; }
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   class __scoped_lock
-40039:   {
-40039:   public:
-40039:     typedef __mutex __mutex_type;
-40039: 
-40039:   private:
-40039:     __mutex_type& _M_device;
-40039: 
-40039:     __scoped_lock(const __scoped_lock&);
-40039:     __scoped_lock& operator=(const __scoped_lock&);
-40039: 
-40039:   public:
-40039:     explicit __scoped_lock(__mutex_type& __name) : _M_device(__name)
-40039:     { _M_device.lock(); }
-40039: 
-40039:     ~__scoped_lock() throw()
-40039:     { _M_device.unlock(); }
-40039:   };
-40039: 
-40039: 
-40039:   class __cond
-40039:   {
-40039:   private:
-40039: 
-40039:     __gthread_cond_t _M_cond = { { {0}, {0}, {0, 0}, {0, 0}, 0, 0, {0, 0} } };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     __cond(const __cond&);
-40039:     __cond& operator=(const __cond&);
-40039: 
-40039:   public:
-40039:     __cond()
-40039:     {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     }
-40039: # 280 "/usr/include/c++/8/ext/concurrence.h" 3
-40039:     void broadcast()
-40039:     {
-40039: 
-40039:       if (__gthread_active_p())
-40039:  {
-40039:    if (__gthread_cond_broadcast(&_M_cond) != 0)
-40039:      __throw_concurrence_broadcast_error();
-40039:  }
-40039: 
-40039:     }
-40039: 
-40039:     void wait(__mutex *mutex)
-40039:     {
-40039: 
-40039:       {
-40039:    if (__gthread_cond_wait(&_M_cond, mutex->gthread_mutex()) != 0)
-40039:      __throw_concurrence_wait_error();
-40039:       }
-40039: 
-40039:     }
-40039: 
-40039:     void wait_recursive(__recursive_mutex *mutex)
-40039:     {
-40039: 
-40039:       {
-40039:    if (__gthread_cond_wait_recursive(&_M_cond,
-40039:          mutex->gthread_recursive_mutex())
-40039:        != 0)
-40039:      __throw_concurrence_wait_error();
-40039:       }
-40039: 
-40039:     }
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 75 "/usr/include/c++/8/memory" 2 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/shared_ptr.h" 1 3
-40039: # 52 "/usr/include/c++/8/bits/shared_ptr.h" 3
-40039: # 1 "/usr/include/c++/8/bits/shared_ptr_base.h" 1 3
-40039: # 53 "/usr/include/c++/8/bits/shared_ptr_base.h" 3
-40039: # 1 "/usr/include/c++/8/bits/allocated_ptr.h" 1 3
-40039: # 40 "/usr/include/c++/8/bits/allocated_ptr.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Alloc>
-40039:     struct __allocated_ptr
-40039:     {
-40039:       using pointer = typename allocator_traits<_Alloc>::pointer;
-40039:       using value_type = typename allocator_traits<_Alloc>::value_type;
-40039: 
-40039: 
-40039:       __allocated_ptr(_Alloc& __a, pointer __ptr) noexcept
-40039:       : _M_alloc(std::__addressof(__a)), _M_ptr(__ptr)
-40039:       { }
-40039: 
-40039: 
-40039:       template<typename _Ptr,
-40039:         typename _Req = _Require<is_same<_Ptr, value_type*>>>
-40039:       __allocated_ptr(_Alloc& __a, _Ptr __ptr)
-40039:       : _M_alloc(std::__addressof(__a)),
-40039:  _M_ptr(pointer_traits<pointer>::pointer_to(*__ptr))
-40039:       { }
-40039: 
-40039: 
-40039:       __allocated_ptr(__allocated_ptr&& __gd) noexcept
-40039:       : _M_alloc(__gd._M_alloc), _M_ptr(__gd._M_ptr)
-40039:       { __gd._M_ptr = nullptr; }
-40039: 
-40039: 
-40039:       ~__allocated_ptr()
-40039:       {
-40039:  if (_M_ptr != nullptr)
-40039:    std::allocator_traits<_Alloc>::deallocate(*_M_alloc, _M_ptr, 1);
-40039:       }
-40039: 
-40039: 
-40039:       __allocated_ptr&
-40039:       operator=(std::nullptr_t) noexcept
-40039:       {
-40039:  _M_ptr = nullptr;
-40039:  return *this;
-40039:       }
-40039: 
-40039: 
-40039:       value_type* get() { return std::__to_address(_M_ptr); }
-40039: 
-40039:     private:
-40039:       _Alloc* _M_alloc;
-40039:       pointer _M_ptr;
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Alloc>
-40039:     __allocated_ptr<_Alloc>
-40039:     __allocate_guarded(_Alloc& __a)
-40039:     {
-40039:       return { __a, std::allocator_traits<_Alloc>::allocate(__a, 1) };
-40039:     }
-40039: 
-40039: 
-40039: }
-40039: # 54 "/usr/include/c++/8/bits/shared_ptr_base.h" 2 3
-40039: # 1 "/usr/include/c++/8/bits/refwrap.h" 1 3
-40039: # 33 "/usr/include/c++/8/bits/refwrap.h" 3
-40039:        
-40039: # 34 "/usr/include/c++/8/bits/refwrap.h" 3
-40039: # 43 "/usr/include/c++/8/bits/refwrap.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes>
-40039:     struct _Maybe_unary_or_binary_function { };
-40039: 
-40039: 
-40039:   template<typename _Res, typename _T1>
-40039:     struct _Maybe_unary_or_binary_function<_Res, _T1>
-40039:     : std::unary_function<_T1, _Res> { };
-40039: 
-40039: 
-40039:   template<typename _Res, typename _T1, typename _T2>
-40039:     struct _Maybe_unary_or_binary_function<_Res, _T1, _T2>
-40039:     : std::binary_function<_T1, _T2, _Res> { };
-40039: 
-40039:   template<typename _Signature>
-40039:     struct _Mem_fn_traits;
-40039: 
-40039:   template<typename _Res, typename _Class, typename... _ArgTypes>
-40039:     struct _Mem_fn_traits_base
-40039:     {
-40039:       using __result_type = _Res;
-40039:       using __maybe_type
-40039:  = _Maybe_unary_or_binary_function<_Res, _Class*, _ArgTypes...>;
-40039:       using __arity = integral_constant<size_t, sizeof...(_ArgTypes)>;
-40039:     };
-40039: # 97 "/usr/include/c++/8/bits/refwrap.h" 3
-40039: template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) > : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) > : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const > : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const > : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile > : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile > : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile > : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile > : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; };
-40039: template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) &> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) &> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const &> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const &> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile &> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile &> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile &> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile &> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; };
-40039: template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) &&> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) &&> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const &&> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const &&> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile &&> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile &&> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile &&> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile &&> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; };
-40039: # 111 "/usr/include/c++/8/bits/refwrap.h" 3
-40039:   template<typename _Functor, typename = __void_t<>>
-40039:     struct _Maybe_get_result_type
-40039:     { };
-40039: 
-40039:   template<typename _Functor>
-40039:     struct _Maybe_get_result_type<_Functor,
-40039:       __void_t<typename _Functor::result_type>>
-40039:     { typedef typename _Functor::result_type result_type; };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Functor>
-40039:     struct _Weak_result_type_impl
-40039:     : _Maybe_get_result_type<_Functor>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct _Weak_result_type_impl<_Res(_ArgTypes...) >
-40039:     { typedef _Res result_type; };
-40039: 
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct _Weak_result_type_impl<_Res(_ArgTypes......) >
-40039:     { typedef _Res result_type; };
-40039: 
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct _Weak_result_type_impl<_Res(*)(_ArgTypes...) >
-40039:     { typedef _Res result_type; };
-40039: 
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes >
-40039:     struct
-40039:     _Weak_result_type_impl<_Res(*)(_ArgTypes......) >
-40039:     { typedef _Res result_type; };
-40039: 
-40039: 
-40039:   template<typename _Functor,
-40039:     bool = is_member_function_pointer<_Functor>::value>
-40039:     struct _Weak_result_type_memfun
-40039:     : _Weak_result_type_impl<_Functor>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _MemFunPtr>
-40039:     struct _Weak_result_type_memfun<_MemFunPtr, true>
-40039:     {
-40039:       using result_type = typename _Mem_fn_traits<_MemFunPtr>::__result_type;
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Func, typename _Class>
-40039:     struct _Weak_result_type_memfun<_Func _Class::*, false>
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Functor>
-40039:     struct _Weak_result_type
-40039:     : _Weak_result_type_memfun<typename remove_cv<_Functor>::type>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp, typename = __void_t<>>
-40039:     struct _Refwrap_base_arg1
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct _Refwrap_base_arg1<_Tp,
-40039:          __void_t<typename _Tp::argument_type>>
-40039:     {
-40039:       typedef typename _Tp::argument_type argument_type;
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp, typename = __void_t<>>
-40039:     struct _Refwrap_base_arg2
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct _Refwrap_base_arg2<_Tp,
-40039:          __void_t<typename _Tp::first_argument_type,
-40039:            typename _Tp::second_argument_type>>
-40039:     {
-40039:       typedef typename _Tp::first_argument_type first_argument_type;
-40039:       typedef typename _Tp::second_argument_type second_argument_type;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct _Reference_wrapper_base
-40039:     : _Weak_result_type<_Tp>, _Refwrap_base_arg1<_Tp>, _Refwrap_base_arg2<_Tp>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Res, typename _T1 >
-40039:     struct _Reference_wrapper_base<_Res(_T1) >
-40039:     : unary_function<_T1, _Res>
-40039:     { };
-40039: 
-40039:   template<typename _Res, typename _T1>
-40039:     struct _Reference_wrapper_base<_Res(_T1) const>
-40039:     : unary_function<_T1, _Res>
-40039:     { };
-40039: 
-40039:   template<typename _Res, typename _T1>
-40039:     struct _Reference_wrapper_base<_Res(_T1) volatile>
-40039:     : unary_function<_T1, _Res>
-40039:     { };
-40039: 
-40039:   template<typename _Res, typename _T1>
-40039:     struct _Reference_wrapper_base<_Res(_T1) const volatile>
-40039:     : unary_function<_T1, _Res>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Res, typename _T1, typename _T2 >
-40039:     struct _Reference_wrapper_base<_Res(_T1, _T2) >
-40039:     : binary_function<_T1, _T2, _Res>
-40039:     { };
-40039: 
-40039:   template<typename _Res, typename _T1, typename _T2>
-40039:     struct _Reference_wrapper_base<_Res(_T1, _T2) const>
-40039:     : binary_function<_T1, _T2, _Res>
-40039:     { };
-40039: 
-40039:   template<typename _Res, typename _T1, typename _T2>
-40039:     struct _Reference_wrapper_base<_Res(_T1, _T2) volatile>
-40039:     : binary_function<_T1, _T2, _Res>
-40039:     { };
-40039: 
-40039:   template<typename _Res, typename _T1, typename _T2>
-40039:     struct _Reference_wrapper_base<_Res(_T1, _T2) const volatile>
-40039:     : binary_function<_T1, _T2, _Res>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Res, typename _T1 >
-40039:     struct _Reference_wrapper_base<_Res(*)(_T1) >
-40039:     : unary_function<_T1, _Res>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Res, typename _T1, typename _T2 >
-40039:     struct _Reference_wrapper_base<_Res(*)(_T1, _T2) >
-40039:     : binary_function<_T1, _T2, _Res>
-40039:     { };
-40039: 
-40039:   template<typename _Tp, bool = is_member_function_pointer<_Tp>::value>
-40039:     struct _Reference_wrapper_base_memfun
-40039:     : _Reference_wrapper_base<_Tp>
-40039:     { };
-40039: 
-40039:   template<typename _MemFunPtr>
-40039:     struct _Reference_wrapper_base_memfun<_MemFunPtr, true>
-40039:     : _Mem_fn_traits<_MemFunPtr>::__maybe_type
-40039:     {
-40039:       using result_type = typename _Mem_fn_traits<_MemFunPtr>::__result_type;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     class reference_wrapper
-40039:     : public _Reference_wrapper_base_memfun<typename remove_cv<_Tp>::type>
-40039:     {
-40039:       _Tp* _M_data;
-40039: 
-40039:     public:
-40039:       typedef _Tp type;
-40039: 
-40039:       reference_wrapper(_Tp& __indata) noexcept
-40039:       : _M_data(std::__addressof(__indata))
-40039:       { }
-40039: 
-40039:       reference_wrapper(_Tp&&) = delete;
-40039: 
-40039:       reference_wrapper(const reference_wrapper&) = default;
-40039: 
-40039:       reference_wrapper&
-40039:       operator=(const reference_wrapper&) = default;
-40039: 
-40039:       operator _Tp&() const noexcept
-40039:       { return this->get(); }
-40039: 
-40039:       _Tp&
-40039:       get() const noexcept
-40039:       { return *_M_data; }
-40039: 
-40039:       template<typename... _Args>
-40039:  typename result_of<_Tp&(_Args&&...)>::type
-40039:  operator()(_Args&&... __args) const
-40039:  {
-40039:    return std::__invoke(get(), std::forward<_Args>(__args)...);
-40039:  }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline reference_wrapper<_Tp>
-40039:     ref(_Tp& __t) noexcept
-40039:     { return reference_wrapper<_Tp>(__t); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline reference_wrapper<const _Tp>
-40039:     cref(const _Tp& __t) noexcept
-40039:     { return reference_wrapper<const _Tp>(__t); }
-40039: 
-40039:   template<typename _Tp>
-40039:     void ref(const _Tp&&) = delete;
-40039: 
-40039:   template<typename _Tp>
-40039:     void cref(const _Tp&&) = delete;
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline reference_wrapper<_Tp>
-40039:     ref(reference_wrapper<_Tp> __t) noexcept
-40039:     { return __t; }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline reference_wrapper<const _Tp>
-40039:     cref(reference_wrapper<_Tp> __t) noexcept
-40039:     { return { __t.get() }; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 55 "/usr/include/c++/8/bits/shared_ptr_base.h" 2 3
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: #pragma GCC diagnostic push
-40039: #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-40039:   template<typename> class auto_ptr;
-40039: #pragma GCC diagnostic pop
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   class bad_weak_ptr : public std::exception
-40039:   {
-40039:   public:
-40039:     virtual char const* what() const noexcept;
-40039: 
-40039:     virtual ~bad_weak_ptr() noexcept;
-40039:   };
-40039: 
-40039: 
-40039:   inline void
-40039:   __throw_bad_weak_ptr()
-40039:   { (throw (bad_weak_ptr())); }
-40039: 
-40039:   using __gnu_cxx::_Lock_policy;
-40039:   using __gnu_cxx::__default_lock_policy;
-40039:   using __gnu_cxx::_S_single;
-40039:   using __gnu_cxx::_S_mutex;
-40039:   using __gnu_cxx::_S_atomic;
-40039: 
-40039: 
-40039:   template<_Lock_policy _Lp>
-40039:     class _Mutex_base
-40039:     {
-40039:     protected:
-40039: 
-40039:       enum { _S_need_barriers = 0 };
-40039:     };
-40039: 
-40039:   template<>
-40039:     class _Mutex_base<_S_mutex>
-40039:     : public __gnu_cxx::__mutex
-40039:     {
-40039:     protected:
-40039: 
-40039: 
-40039: 
-40039:       enum { _S_need_barriers = 1 };
-40039:     };
-40039: 
-40039:   template<_Lock_policy _Lp = __default_lock_policy>
-40039:     class _Sp_counted_base
-40039:     : public _Mutex_base<_Lp>
-40039:     {
-40039:     public:
-40039:       _Sp_counted_base() noexcept
-40039:       : _M_use_count(1), _M_weak_count(1) { }
-40039: 
-40039:       virtual
-40039:       ~_Sp_counted_base() noexcept
-40039:       { }
-40039: 
-40039: 
-40039: 
-40039:       virtual void
-40039:       _M_dispose() noexcept = 0;
-40039: 
-40039: 
-40039:       virtual void
-40039:       _M_destroy() noexcept
-40039:       { delete this; }
-40039: 
-40039:       virtual void*
-40039:       _M_get_deleter(const std::type_info&) noexcept = 0;
-40039: 
-40039:       void
-40039:       _M_add_ref_copy()
-40039:       { __gnu_cxx::__atomic_add_dispatch(&_M_use_count, 1); }
-40039: 
-40039:       void
-40039:       _M_add_ref_lock();
-40039: 
-40039:       bool
-40039:       _M_add_ref_lock_nothrow();
-40039: 
-40039:       void
-40039:       _M_release() noexcept
-40039:       {
-40039: 
-40039:         ;
-40039:  if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1)
-40039:    {
-40039:             ;
-40039:      _M_dispose();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:      if (_Mutex_base<_Lp>::_S_need_barriers)
-40039:        {
-40039:   __atomic_thread_fence (4);
-40039:        }
-40039: 
-40039: 
-40039:             ;
-40039:      if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count,
-40039:              -1) == 1)
-40039:               {
-40039:                 ;
-40039:          _M_destroy();
-40039:               }
-40039:    }
-40039:       }
-40039: 
-40039:       void
-40039:       _M_weak_add_ref() noexcept
-40039:       { __gnu_cxx::__atomic_add_dispatch(&_M_weak_count, 1); }
-40039: 
-40039:       void
-40039:       _M_weak_release() noexcept
-40039:       {
-40039: 
-40039:         ;
-40039:  if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count, -1) == 1)
-40039:    {
-40039:             ;
-40039:      if (_Mutex_base<_Lp>::_S_need_barriers)
-40039:        {
-40039: 
-40039: 
-40039:   __atomic_thread_fence (4);
-40039:        }
-40039:      _M_destroy();
-40039:    }
-40039:       }
-40039: 
-40039:       long
-40039:       _M_get_use_count() const noexcept
-40039:       {
-40039: 
-40039: 
-40039:         return __atomic_load_n(&_M_use_count, 0);
-40039:       }
-40039: 
-40039:     private:
-40039:       _Sp_counted_base(_Sp_counted_base const&) = delete;
-40039:       _Sp_counted_base& operator=(_Sp_counted_base const&) = delete;
-40039: 
-40039:       _Atomic_word _M_use_count;
-40039:       _Atomic_word _M_weak_count;
-40039:     };
-40039: 
-40039:   template<>
-40039:     inline void
-40039:     _Sp_counted_base<_S_single>::
-40039:     _M_add_ref_lock()
-40039:     {
-40039:       if (_M_use_count == 0)
-40039:  __throw_bad_weak_ptr();
-40039:       ++_M_use_count;
-40039:     }
-40039: 
-40039:   template<>
-40039:     inline void
-40039:     _Sp_counted_base<_S_mutex>::
-40039:     _M_add_ref_lock()
-40039:     {
-40039:       __gnu_cxx::__scoped_lock sentry(*this);
-40039:       if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, 1) == 0)
-40039:  {
-40039:    _M_use_count = 0;
-40039:    __throw_bad_weak_ptr();
-40039:  }
-40039:     }
-40039: 
-40039:   template<>
-40039:     inline void
-40039:     _Sp_counted_base<_S_atomic>::
-40039:     _M_add_ref_lock()
-40039:     {
-40039: 
-40039:       _Atomic_word __count = _M_get_use_count();
-40039:       do
-40039:  {
-40039:    if (__count == 0)
-40039:      __throw_bad_weak_ptr();
-40039: 
-40039: 
-40039:  }
-40039:       while (!__atomic_compare_exchange_n(&_M_use_count, &__count, __count + 1,
-40039:        true, 4,
-40039:        0));
-40039:     }
-40039: 
-40039:   template<>
-40039:     inline bool
-40039:     _Sp_counted_base<_S_single>::
-40039:     _M_add_ref_lock_nothrow()
-40039:     {
-40039:       if (_M_use_count == 0)
-40039:  return false;
-40039:       ++_M_use_count;
-40039:       return true;
-40039:     }
-40039: 
-40039:   template<>
-40039:     inline bool
-40039:     _Sp_counted_base<_S_mutex>::
-40039:     _M_add_ref_lock_nothrow()
-40039:     {
-40039:       __gnu_cxx::__scoped_lock sentry(*this);
-40039:       if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, 1) == 0)
-40039:  {
-40039:    _M_use_count = 0;
-40039:    return false;
-40039:  }
-40039:       return true;
-40039:     }
-40039: 
-40039:   template<>
-40039:     inline bool
-40039:     _Sp_counted_base<_S_atomic>::
-40039:     _M_add_ref_lock_nothrow()
-40039:     {
-40039: 
-40039:       _Atomic_word __count = _M_get_use_count();
-40039:       do
-40039:  {
-40039:    if (__count == 0)
-40039:      return false;
-40039: 
-40039: 
-40039:  }
-40039:       while (!__atomic_compare_exchange_n(&_M_use_count, &__count, __count + 1,
-40039:        true, 4,
-40039:        0));
-40039:       return true;
-40039:     }
-40039: 
-40039:   template<>
-40039:     inline void
-40039:     _Sp_counted_base<_S_single>::_M_add_ref_copy()
-40039:     { ++_M_use_count; }
-40039: 
-40039:   template<>
-40039:     inline void
-40039:     _Sp_counted_base<_S_single>::_M_release() noexcept
-40039:     {
-40039:       if (--_M_use_count == 0)
-40039:         {
-40039:           _M_dispose();
-40039:           if (--_M_weak_count == 0)
-40039:             _M_destroy();
-40039:         }
-40039:     }
-40039: 
-40039:   template<>
-40039:     inline void
-40039:     _Sp_counted_base<_S_single>::_M_weak_add_ref() noexcept
-40039:     { ++_M_weak_count; }
-40039: 
-40039:   template<>
-40039:     inline void
-40039:     _Sp_counted_base<_S_single>::_M_weak_release() noexcept
-40039:     {
-40039:       if (--_M_weak_count == 0)
-40039:         _M_destroy();
-40039:     }
-40039: 
-40039:   template<>
-40039:     inline long
-40039:     _Sp_counted_base<_S_single>::_M_get_use_count() const noexcept
-40039:     { return _M_use_count; }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp = __default_lock_policy>
-40039:     class __shared_ptr;
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp = __default_lock_policy>
-40039:     class __weak_ptr;
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp = __default_lock_policy>
-40039:     class __enable_shared_from_this;
-40039: 
-40039:   template<typename _Tp>
-40039:     class shared_ptr;
-40039: 
-40039:   template<typename _Tp>
-40039:     class weak_ptr;
-40039: 
-40039:   template<typename _Tp>
-40039:     struct owner_less;
-40039: 
-40039:   template<typename _Tp>
-40039:     class enable_shared_from_this;
-40039: 
-40039:   template<_Lock_policy _Lp = __default_lock_policy>
-40039:     class __weak_count;
-40039: 
-40039:   template<_Lock_policy _Lp = __default_lock_policy>
-40039:     class __shared_count;
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Ptr, _Lock_policy _Lp>
-40039:     class _Sp_counted_ptr final : public _Sp_counted_base<_Lp>
-40039:     {
-40039:     public:
-40039:       explicit
-40039:       _Sp_counted_ptr(_Ptr __p) noexcept
-40039:       : _M_ptr(__p) { }
-40039: 
-40039:       virtual void
-40039:       _M_dispose() noexcept
-40039:       { delete _M_ptr; }
-40039: 
-40039:       virtual void
-40039:       _M_destroy() noexcept
-40039:       { delete this; }
-40039: 
-40039:       virtual void*
-40039:       _M_get_deleter(const std::type_info&) noexcept
-40039:       { return nullptr; }
-40039: 
-40039:       _Sp_counted_ptr(const _Sp_counted_ptr&) = delete;
-40039:       _Sp_counted_ptr& operator=(const _Sp_counted_ptr&) = delete;
-40039: 
-40039:     private:
-40039:       _Ptr _M_ptr;
-40039:     };
-40039: 
-40039:   template<>
-40039:     inline void
-40039:     _Sp_counted_ptr<nullptr_t, _S_single>::_M_dispose() noexcept { }
-40039: 
-40039:   template<>
-40039:     inline void
-40039:     _Sp_counted_ptr<nullptr_t, _S_mutex>::_M_dispose() noexcept { }
-40039: 
-40039:   template<>
-40039:     inline void
-40039:     _Sp_counted_ptr<nullptr_t, _S_atomic>::_M_dispose() noexcept { }
-40039: 
-40039:   template<int _Nm, typename _Tp,
-40039:     bool __use_ebo = !__is_final(_Tp) && __is_empty(_Tp)>
-40039:     struct _Sp_ebo_helper;
-40039: 
-40039: 
-40039:   template<int _Nm, typename _Tp>
-40039:     struct _Sp_ebo_helper<_Nm, _Tp, true> : private _Tp
-40039:     {
-40039:       explicit _Sp_ebo_helper(const _Tp& __tp) : _Tp(__tp) { }
-40039:       explicit _Sp_ebo_helper(_Tp&& __tp) : _Tp(std::move(__tp)) { }
-40039: 
-40039:       static _Tp&
-40039:       _S_get(_Sp_ebo_helper& __eboh) { return static_cast<_Tp&>(__eboh); }
-40039:     };
-40039: 
-40039: 
-40039:   template<int _Nm, typename _Tp>
-40039:     struct _Sp_ebo_helper<_Nm, _Tp, false>
-40039:     {
-40039:       explicit _Sp_ebo_helper(const _Tp& __tp) : _M_tp(__tp) { }
-40039:       explicit _Sp_ebo_helper(_Tp&& __tp) : _M_tp(std::move(__tp)) { }
-40039: 
-40039:       static _Tp&
-40039:       _S_get(_Sp_ebo_helper& __eboh)
-40039:       { return __eboh._M_tp; }
-40039: 
-40039:     private:
-40039:       _Tp _M_tp;
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Ptr, typename _Deleter, typename _Alloc, _Lock_policy _Lp>
-40039:     class _Sp_counted_deleter final : public _Sp_counted_base<_Lp>
-40039:     {
-40039:       class _Impl : _Sp_ebo_helper<0, _Deleter>, _Sp_ebo_helper<1, _Alloc>
-40039:       {
-40039:  typedef _Sp_ebo_helper<0, _Deleter> _Del_base;
-40039:  typedef _Sp_ebo_helper<1, _Alloc> _Alloc_base;
-40039: 
-40039:       public:
-40039:  _Impl(_Ptr __p, _Deleter __d, const _Alloc& __a) noexcept
-40039:  : _M_ptr(__p), _Del_base(std::move(__d)), _Alloc_base(__a)
-40039:  { }
-40039: 
-40039:  _Deleter& _M_del() noexcept { return _Del_base::_S_get(*this); }
-40039:  _Alloc& _M_alloc() noexcept { return _Alloc_base::_S_get(*this); }
-40039: 
-40039:  _Ptr _M_ptr;
-40039:       };
-40039: 
-40039:     public:
-40039:       using __allocator_type = __alloc_rebind<_Alloc, _Sp_counted_deleter>;
-40039: 
-40039: 
-40039:       _Sp_counted_deleter(_Ptr __p, _Deleter __d) noexcept
-40039:       : _M_impl(__p, std::move(__d), _Alloc()) { }
-40039: 
-40039: 
-40039:       _Sp_counted_deleter(_Ptr __p, _Deleter __d, const _Alloc& __a) noexcept
-40039:       : _M_impl(__p, std::move(__d), __a) { }
-40039: 
-40039:       ~_Sp_counted_deleter() noexcept { }
-40039: 
-40039:       virtual void
-40039:       _M_dispose() noexcept
-40039:       { _M_impl._M_del()(_M_impl._M_ptr); }
-40039: 
-40039:       virtual void
-40039:       _M_destroy() noexcept
-40039:       {
-40039:  __allocator_type __a(_M_impl._M_alloc());
-40039:  __allocated_ptr<__allocator_type> __guard_ptr{ __a, this };
-40039:  this->~_Sp_counted_deleter();
-40039:       }
-40039: 
-40039:       virtual void*
-40039:       _M_get_deleter(const std::type_info& __ti) noexcept
-40039:       {
-40039: 
-40039: 
-40039: 
-40039:         return __ti == typeid(_Deleter)
-40039:    ? std::__addressof(_M_impl._M_del())
-40039:    : nullptr;
-40039: 
-40039: 
-40039: 
-40039:       }
-40039: 
-40039:     private:
-40039:       _Impl _M_impl;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   struct _Sp_make_shared_tag
-40039:   {
-40039:   private:
-40039:     template<typename _Tp, typename _Alloc, _Lock_policy _Lp>
-40039:       friend class _Sp_counted_ptr_inplace;
-40039: 
-40039:     static const type_info&
-40039:     _S_ti() noexcept __attribute__ ((__visibility__ ("default")))
-40039:     {
-40039:       alignas(type_info) static constexpr char __tag[sizeof(type_info)] = { };
-40039:       return reinterpret_cast<const type_info&>(__tag);
-40039:     }
-40039:   };
-40039: 
-40039:   template<typename _Alloc>
-40039:     struct _Sp_alloc_shared_tag
-40039:     {
-40039:       const _Alloc& _M_a;
-40039:     };
-40039: 
-40039:   template<typename _Tp, typename _Alloc, _Lock_policy _Lp>
-40039:     class _Sp_counted_ptr_inplace final : public _Sp_counted_base<_Lp>
-40039:     {
-40039:       class _Impl : _Sp_ebo_helper<0, _Alloc>
-40039:       {
-40039:  typedef _Sp_ebo_helper<0, _Alloc> _A_base;
-40039: 
-40039:       public:
-40039:  explicit _Impl(_Alloc __a) noexcept : _A_base(__a) { }
-40039: 
-40039:  _Alloc& _M_alloc() noexcept { return _A_base::_S_get(*this); }
-40039: 
-40039:  __gnu_cxx::__aligned_buffer<_Tp> _M_storage;
-40039:       };
-40039: 
-40039:     public:
-40039:       using __allocator_type = __alloc_rebind<_Alloc, _Sp_counted_ptr_inplace>;
-40039: 
-40039:       template<typename... _Args>
-40039:  _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
-40039:  : _M_impl(__a)
-40039:  {
-40039: 
-40039: 
-40039:    allocator_traits<_Alloc>::construct(__a, _M_ptr(),
-40039:        std::forward<_Args>(__args)...);
-40039:  }
-40039: 
-40039:       ~_Sp_counted_ptr_inplace() noexcept { }
-40039: 
-40039:       virtual void
-40039:       _M_dispose() noexcept
-40039:       {
-40039:  allocator_traits<_Alloc>::destroy(_M_impl._M_alloc(), _M_ptr());
-40039:       }
-40039: 
-40039: 
-40039:       virtual void
-40039:       _M_destroy() noexcept
-40039:       {
-40039:  __allocator_type __a(_M_impl._M_alloc());
-40039:  __allocated_ptr<__allocator_type> __guard_ptr{ __a, this };
-40039:  this->~_Sp_counted_ptr_inplace();
-40039:       }
-40039: 
-40039:     private:
-40039:       friend class __shared_count<_Lp>;
-40039: 
-40039: 
-40039: 
-40039:       virtual void*
-40039:       _M_get_deleter(const std::type_info& __ti) noexcept override
-40039:       {
-40039: 
-40039: 
-40039:  if (&__ti == &_Sp_make_shared_tag::_S_ti())
-40039:    return const_cast<typename remove_cv<_Tp>::type*>(_M_ptr());
-40039: 
-40039: 
-40039: 
-40039:  else if (__ti == typeid(_Sp_make_shared_tag))
-40039:    return const_cast<typename remove_cv<_Tp>::type*>(_M_ptr());
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  return nullptr;
-40039:       }
-40039: 
-40039:       _Tp* _M_ptr() noexcept { return _M_impl._M_storage._M_ptr(); }
-40039: 
-40039:       _Impl _M_impl;
-40039:     };
-40039: 
-40039: 
-40039:   struct __sp_array_delete
-40039:   {
-40039:     template<typename _Yp>
-40039:       void operator()(_Yp* __p) const { delete[] __p; }
-40039:   };
-40039: 
-40039:   template<_Lock_policy _Lp>
-40039:     class __shared_count
-40039:     {
-40039:       template<typename _Tp>
-40039:  struct __not_alloc_shared_tag { using type = void; };
-40039: 
-40039:       template<typename _Tp>
-40039:  struct __not_alloc_shared_tag<_Sp_alloc_shared_tag<_Tp>> { };
-40039: 
-40039:     public:
-40039:       constexpr __shared_count() noexcept : _M_pi(0)
-40039:       { }
-40039: 
-40039:       template<typename _Ptr>
-40039:         explicit
-40039:  __shared_count(_Ptr __p) : _M_pi(0)
-40039:  {
-40039:    try
-40039:      {
-40039:        _M_pi = new _Sp_counted_ptr<_Ptr, _Lp>(__p);
-40039:      }
-40039:    catch(...)
-40039:      {
-40039:        delete __p;
-40039:        throw;
-40039:      }
-40039:  }
-40039: 
-40039:       template<typename _Ptr>
-40039:  __shared_count(_Ptr __p, false_type)
-40039:  : __shared_count(__p)
-40039:  { }
-40039: 
-40039:       template<typename _Ptr>
-40039:  __shared_count(_Ptr __p, true_type)
-40039:  : __shared_count(__p, __sp_array_delete{}, allocator<void>())
-40039:  { }
-40039: 
-40039:       template<typename _Ptr, typename _Deleter,
-40039:         typename = typename __not_alloc_shared_tag<_Deleter>::type>
-40039:  __shared_count(_Ptr __p, _Deleter __d)
-40039:  : __shared_count(__p, std::move(__d), allocator<void>())
-40039:  { }
-40039: 
-40039:       template<typename _Ptr, typename _Deleter, typename _Alloc,
-40039:         typename = typename __not_alloc_shared_tag<_Deleter>::type>
-40039:  __shared_count(_Ptr __p, _Deleter __d, _Alloc __a) : _M_pi(0)
-40039:  {
-40039:    typedef _Sp_counted_deleter<_Ptr, _Deleter, _Alloc, _Lp> _Sp_cd_type;
-40039:    try
-40039:      {
-40039:        typename _Sp_cd_type::__allocator_type __a2(__a);
-40039:        auto __guard = std::__allocate_guarded(__a2);
-40039:        _Sp_cd_type* __mem = __guard.get();
-40039:        ::new (__mem) _Sp_cd_type(__p, std::move(__d), std::move(__a));
-40039:        _M_pi = __mem;
-40039:        __guard = nullptr;
-40039:      }
-40039:    catch(...)
-40039:      {
-40039:        __d(__p);
-40039:        throw;
-40039:      }
-40039:  }
-40039: 
-40039:       template<typename _Tp, typename _Alloc, typename... _Args>
-40039:  __shared_count(_Tp*& __p, _Sp_alloc_shared_tag<_Alloc> __a,
-40039:          _Args&&... __args)
-40039:  {
-40039:    typedef _Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp> _Sp_cp_type;
-40039:    typename _Sp_cp_type::__allocator_type __a2(__a._M_a);
-40039:    auto __guard = std::__allocate_guarded(__a2);
-40039:    _Sp_cp_type* __mem = __guard.get();
-40039:    auto __pi = ::new (__mem)
-40039:      _Sp_cp_type(__a._M_a, std::forward<_Args>(__args)...);
-40039:    __guard = nullptr;
-40039:    _M_pi = __pi;
-40039:    __p = __pi->_M_ptr();
-40039:  }
-40039: 
-40039: 
-40039: #pragma GCC diagnostic push
-40039: #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-40039: 
-40039:       template<typename _Tp>
-40039:         explicit
-40039:  __shared_count(std::auto_ptr<_Tp>&& __r);
-40039: #pragma GCC diagnostic pop
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Tp, typename _Del>
-40039:         explicit
-40039:  __shared_count(std::unique_ptr<_Tp, _Del>&& __r) : _M_pi(0)
-40039:  {
-40039: 
-40039: 
-40039:    if (__r.get() == nullptr)
-40039:      return;
-40039: 
-40039:    using _Ptr = typename unique_ptr<_Tp, _Del>::pointer;
-40039:    using _Del2 = typename conditional<is_reference<_Del>::value,
-40039:        reference_wrapper<typename remove_reference<_Del>::type>,
-40039:        _Del>::type;
-40039:    using _Sp_cd_type
-40039:      = _Sp_counted_deleter<_Ptr, _Del2, allocator<void>, _Lp>;
-40039:    using _Alloc = allocator<_Sp_cd_type>;
-40039:    using _Alloc_traits = allocator_traits<_Alloc>;
-40039:    _Alloc __a;
-40039:    _Sp_cd_type* __mem = _Alloc_traits::allocate(__a, 1);
-40039:    _Alloc_traits::construct(__a, __mem, __r.release(),
-40039:        __r.get_deleter());
-40039:    _M_pi = __mem;
-40039:  }
-40039: 
-40039: 
-40039:       explicit __shared_count(const __weak_count<_Lp>& __r);
-40039: 
-40039: 
-40039:       explicit __shared_count(const __weak_count<_Lp>& __r, std::nothrow_t);
-40039: 
-40039:       ~__shared_count() noexcept
-40039:       {
-40039:  if (_M_pi != nullptr)
-40039:    _M_pi->_M_release();
-40039:       }
-40039: 
-40039:       __shared_count(const __shared_count& __r) noexcept
-40039:       : _M_pi(__r._M_pi)
-40039:       {
-40039:  if (_M_pi != 0)
-40039:    _M_pi->_M_add_ref_copy();
-40039:       }
-40039: 
-40039:       __shared_count&
-40039:       operator=(const __shared_count& __r) noexcept
-40039:       {
-40039:  _Sp_counted_base<_Lp>* __tmp = __r._M_pi;
-40039:  if (__tmp != _M_pi)
-40039:    {
-40039:      if (__tmp != 0)
-40039:        __tmp->_M_add_ref_copy();
-40039:      if (_M_pi != 0)
-40039:        _M_pi->_M_release();
-40039:      _M_pi = __tmp;
-40039:    }
-40039:  return *this;
-40039:       }
-40039: 
-40039:       void
-40039:       _M_swap(__shared_count& __r) noexcept
-40039:       {
-40039:  _Sp_counted_base<_Lp>* __tmp = __r._M_pi;
-40039:  __r._M_pi = _M_pi;
-40039:  _M_pi = __tmp;
-40039:       }
-40039: 
-40039:       long
-40039:       _M_get_use_count() const noexcept
-40039:       { return _M_pi != 0 ? _M_pi->_M_get_use_count() : 0; }
-40039: 
-40039:       bool
-40039:       _M_unique() const noexcept
-40039:       { return this->_M_get_use_count() == 1; }
-40039: 
-40039:       void*
-40039:       _M_get_deleter(const std::type_info& __ti) const noexcept
-40039:       { return _M_pi ? _M_pi->_M_get_deleter(__ti) : nullptr; }
-40039: 
-40039:       bool
-40039:       _M_less(const __shared_count& __rhs) const noexcept
-40039:       { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); }
-40039: 
-40039:       bool
-40039:       _M_less(const __weak_count<_Lp>& __rhs) const noexcept
-40039:       { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); }
-40039: 
-40039: 
-40039:       friend inline bool
-40039:       operator==(const __shared_count& __a, const __shared_count& __b) noexcept
-40039:       { return __a._M_pi == __b._M_pi; }
-40039: 
-40039:     private:
-40039:       friend class __weak_count<_Lp>;
-40039: 
-40039:       _Sp_counted_base<_Lp>* _M_pi;
-40039:     };
-40039: 
-40039: 
-40039:   template<_Lock_policy _Lp>
-40039:     class __weak_count
-40039:     {
-40039:     public:
-40039:       constexpr __weak_count() noexcept : _M_pi(nullptr)
-40039:       { }
-40039: 
-40039:       __weak_count(const __shared_count<_Lp>& __r) noexcept
-40039:       : _M_pi(__r._M_pi)
-40039:       {
-40039:  if (_M_pi != nullptr)
-40039:    _M_pi->_M_weak_add_ref();
-40039:       }
-40039: 
-40039:       __weak_count(const __weak_count& __r) noexcept
-40039:       : _M_pi(__r._M_pi)
-40039:       {
-40039:  if (_M_pi != nullptr)
-40039:    _M_pi->_M_weak_add_ref();
-40039:       }
-40039: 
-40039:       __weak_count(__weak_count&& __r) noexcept
-40039:       : _M_pi(__r._M_pi)
-40039:       { __r._M_pi = nullptr; }
-40039: 
-40039:       ~__weak_count() noexcept
-40039:       {
-40039:  if (_M_pi != nullptr)
-40039:    _M_pi->_M_weak_release();
-40039:       }
-40039: 
-40039:       __weak_count&
-40039:       operator=(const __shared_count<_Lp>& __r) noexcept
-40039:       {
-40039:  _Sp_counted_base<_Lp>* __tmp = __r._M_pi;
-40039:  if (__tmp != nullptr)
-40039:    __tmp->_M_weak_add_ref();
-40039:  if (_M_pi != nullptr)
-40039:    _M_pi->_M_weak_release();
-40039:  _M_pi = __tmp;
-40039:  return *this;
-40039:       }
-40039: 
-40039:       __weak_count&
-40039:       operator=(const __weak_count& __r) noexcept
-40039:       {
-40039:  _Sp_counted_base<_Lp>* __tmp = __r._M_pi;
-40039:  if (__tmp != nullptr)
-40039:    __tmp->_M_weak_add_ref();
-40039:  if (_M_pi != nullptr)
-40039:    _M_pi->_M_weak_release();
-40039:  _M_pi = __tmp;
-40039:  return *this;
-40039:       }
-40039: 
-40039:       __weak_count&
-40039:       operator=(__weak_count&& __r) noexcept
-40039:       {
-40039:  if (_M_pi != nullptr)
-40039:    _M_pi->_M_weak_release();
-40039:  _M_pi = __r._M_pi;
-40039:         __r._M_pi = nullptr;
-40039:  return *this;
-40039:       }
-40039: 
-40039:       void
-40039:       _M_swap(__weak_count& __r) noexcept
-40039:       {
-40039:  _Sp_counted_base<_Lp>* __tmp = __r._M_pi;
-40039:  __r._M_pi = _M_pi;
-40039:  _M_pi = __tmp;
-40039:       }
-40039: 
-40039:       long
-40039:       _M_get_use_count() const noexcept
-40039:       { return _M_pi != nullptr ? _M_pi->_M_get_use_count() : 0; }
-40039: 
-40039:       bool
-40039:       _M_less(const __weak_count& __rhs) const noexcept
-40039:       { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); }
-40039: 
-40039:       bool
-40039:       _M_less(const __shared_count<_Lp>& __rhs) const noexcept
-40039:       { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); }
-40039: 
-40039: 
-40039:       friend inline bool
-40039:       operator==(const __weak_count& __a, const __weak_count& __b) noexcept
-40039:       { return __a._M_pi == __b._M_pi; }
-40039: 
-40039:     private:
-40039:       friend class __shared_count<_Lp>;
-40039: 
-40039:       _Sp_counted_base<_Lp>* _M_pi;
-40039:     };
-40039: 
-40039: 
-40039:   template<_Lock_policy _Lp>
-40039:     inline
-40039:     __shared_count<_Lp>::__shared_count(const __weak_count<_Lp>& __r)
-40039:     : _M_pi(__r._M_pi)
-40039:     {
-40039:       if (_M_pi != nullptr)
-40039:  _M_pi->_M_add_ref_lock();
-40039:       else
-40039:  __throw_bad_weak_ptr();
-40039:     }
-40039: 
-40039: 
-40039:   template<_Lock_policy _Lp>
-40039:     inline
-40039:     __shared_count<_Lp>::
-40039:     __shared_count(const __weak_count<_Lp>& __r, std::nothrow_t)
-40039:     : _M_pi(__r._M_pi)
-40039:     {
-40039:       if (_M_pi != nullptr)
-40039:  if (!_M_pi->_M_add_ref_lock_nothrow())
-40039:    _M_pi = nullptr;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Yp_ptr, typename _Tp_ptr>
-40039:     struct __sp_compatible_with
-40039:     : false_type
-40039:     { };
-40039: 
-40039:   template<typename _Yp, typename _Tp>
-40039:     struct __sp_compatible_with<_Yp*, _Tp*>
-40039:     : is_convertible<_Yp*, _Tp*>::type
-40039:     { };
-40039: 
-40039:   template<typename _Up, size_t _Nm>
-40039:     struct __sp_compatible_with<_Up(*)[_Nm], _Up(*)[]>
-40039:     : true_type
-40039:     { };
-40039: 
-40039:   template<typename _Up, size_t _Nm>
-40039:     struct __sp_compatible_with<_Up(*)[_Nm], const _Up(*)[]>
-40039:     : true_type
-40039:     { };
-40039: 
-40039:   template<typename _Up, size_t _Nm>
-40039:     struct __sp_compatible_with<_Up(*)[_Nm], volatile _Up(*)[]>
-40039:     : true_type
-40039:     { };
-40039: 
-40039:   template<typename _Up, size_t _Nm>
-40039:     struct __sp_compatible_with<_Up(*)[_Nm], const volatile _Up(*)[]>
-40039:     : true_type
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Up, size_t _Nm, typename _Yp, typename = void>
-40039:     struct __sp_is_constructible_arrN
-40039:     : false_type
-40039:     { };
-40039: 
-40039:   template<typename _Up, size_t _Nm, typename _Yp>
-40039:     struct __sp_is_constructible_arrN<_Up, _Nm, _Yp, __void_t<_Yp[_Nm]>>
-40039:     : is_convertible<_Yp(*)[_Nm], _Up(*)[_Nm]>::type
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Up, typename _Yp, typename = void>
-40039:     struct __sp_is_constructible_arr
-40039:     : false_type
-40039:     { };
-40039: 
-40039:   template<typename _Up, typename _Yp>
-40039:     struct __sp_is_constructible_arr<_Up, _Yp, __void_t<_Yp[]>>
-40039:     : is_convertible<_Yp(*)[], _Up(*)[]>::type
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Yp>
-40039:     struct __sp_is_constructible;
-40039: 
-40039: 
-40039:   template<typename _Up, size_t _Nm, typename _Yp>
-40039:     struct __sp_is_constructible<_Up[_Nm], _Yp>
-40039:     : __sp_is_constructible_arrN<_Up, _Nm, _Yp>::type
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Up, typename _Yp>
-40039:     struct __sp_is_constructible<_Up[], _Yp>
-40039:     : __sp_is_constructible_arr<_Up, _Yp>::type
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Yp>
-40039:     struct __sp_is_constructible
-40039:     : is_convertible<_Yp*, _Tp*>::type
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp,
-40039:     bool = is_array<_Tp>::value, bool = is_void<_Tp>::value>
-40039:     class __shared_ptr_access
-40039:     {
-40039:     public:
-40039:       using element_type = _Tp;
-40039: 
-40039:       element_type&
-40039:       operator*() const noexcept
-40039:       {
-40039:  ;
-40039:  return *_M_get();
-40039:       }
-40039: 
-40039:       element_type*
-40039:       operator->() const noexcept
-40039:       {
-40039:  ;
-40039:  return _M_get();
-40039:       }
-40039: 
-40039:     private:
-40039:       element_type*
-40039:       _M_get() const noexcept
-40039:       { return static_cast<const __shared_ptr<_Tp, _Lp>*>(this)->get(); }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     class __shared_ptr_access<_Tp, _Lp, false, true>
-40039:     {
-40039:     public:
-40039:       using element_type = _Tp;
-40039: 
-40039:       element_type*
-40039:       operator->() const noexcept
-40039:       {
-40039:  auto __ptr = static_cast<const __shared_ptr<_Tp, _Lp>*>(this)->get();
-40039:  ;
-40039:  return __ptr;
-40039:       }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     class __shared_ptr_access<_Tp, _Lp, true, false>
-40039:     {
-40039:     public:
-40039:       using element_type = typename remove_extent<_Tp>::type;
-40039: 
-40039: 
-40039:       [[__deprecated__("shared_ptr<T[]>::operator* is absent from C++17")]]
-40039:       element_type&
-40039:       operator*() const noexcept
-40039:       {
-40039:  ;
-40039:  return *_M_get();
-40039:       }
-40039: 
-40039:       [[__deprecated__("shared_ptr<T[]>::operator-> is absent from C++17")]]
-40039:       element_type*
-40039:       operator->() const noexcept
-40039:       {
-40039:  ;
-40039:  return _M_get();
-40039:       }
-40039: 
-40039: 
-40039:       element_type&
-40039:       operator[](ptrdiff_t __i) const
-40039:       {
-40039:  ;
-40039:  ;
-40039:  return _M_get()[__i];
-40039:       }
-40039: 
-40039:     private:
-40039:       element_type*
-40039:       _M_get() const noexcept
-40039:       { return static_cast<const __shared_ptr<_Tp, _Lp>*>(this)->get(); }
-40039:     };
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     class __shared_ptr
-40039:     : public __shared_ptr_access<_Tp, _Lp>
-40039:     {
-40039:     public:
-40039:       using element_type = typename remove_extent<_Tp>::type;
-40039: 
-40039:     private:
-40039: 
-40039:       template<typename _Yp>
-40039:  using _SafeConv
-40039:    = typename enable_if<__sp_is_constructible<_Tp, _Yp>::value>::type;
-40039: 
-40039: 
-40039:       template<typename _Yp, typename _Res = void>
-40039:  using _Compatible = typename
-40039:    enable_if<__sp_compatible_with<_Yp*, _Tp*>::value, _Res>::type;
-40039: 
-40039: 
-40039:       template<typename _Yp>
-40039:  using _Assignable = _Compatible<_Yp, __shared_ptr&>;
-40039: 
-40039: 
-40039:       template<typename _Yp, typename _Del, typename _Res = void,
-40039:         typename _Ptr = typename unique_ptr<_Yp, _Del>::pointer>
-40039:  using _UniqCompatible = typename enable_if<__and_<
-40039:    __sp_compatible_with<_Yp*, _Tp*>, is_convertible<_Ptr, element_type*>
-40039:    >::value, _Res>::type;
-40039: 
-40039: 
-40039:       template<typename _Yp, typename _Del>
-40039:  using _UniqAssignable = _UniqCompatible<_Yp, _Del, __shared_ptr&>;
-40039: 
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       constexpr __shared_ptr() noexcept
-40039:       : _M_ptr(0), _M_refcount()
-40039:       { }
-40039: 
-40039:       template<typename _Yp, typename = _SafeConv<_Yp>>
-40039:  explicit
-40039:  __shared_ptr(_Yp* __p)
-40039:  : _M_ptr(__p), _M_refcount(__p, typename is_array<_Tp>::type())
-40039:  {
-40039:    static_assert( !is_void<_Yp>::value, "incomplete type" );
-40039:    static_assert( sizeof(_Yp) > 0, "incomplete type" );
-40039:    _M_enable_shared_from_this_with(__p);
-40039:  }
-40039: 
-40039:       template<typename _Yp, typename _Deleter, typename = _SafeConv<_Yp>>
-40039:  __shared_ptr(_Yp* __p, _Deleter __d)
-40039:  : _M_ptr(__p), _M_refcount(__p, std::move(__d))
-40039:  {
-40039:    static_assert(__is_invocable<_Deleter&, _Yp*&>::value,
-40039:        "deleter expression d(p) is well-formed");
-40039:    _M_enable_shared_from_this_with(__p);
-40039:  }
-40039: 
-40039:       template<typename _Yp, typename _Deleter, typename _Alloc,
-40039:         typename = _SafeConv<_Yp>>
-40039:  __shared_ptr(_Yp* __p, _Deleter __d, _Alloc __a)
-40039:  : _M_ptr(__p), _M_refcount(__p, std::move(__d), std::move(__a))
-40039:  {
-40039:    static_assert(__is_invocable<_Deleter&, _Yp*&>::value,
-40039:        "deleter expression d(p) is well-formed");
-40039:    _M_enable_shared_from_this_with(__p);
-40039:  }
-40039: 
-40039:       template<typename _Deleter>
-40039:  __shared_ptr(nullptr_t __p, _Deleter __d)
-40039:  : _M_ptr(0), _M_refcount(__p, std::move(__d))
-40039:  { }
-40039: 
-40039:       template<typename _Deleter, typename _Alloc>
-40039:         __shared_ptr(nullptr_t __p, _Deleter __d, _Alloc __a)
-40039:  : _M_ptr(0), _M_refcount(__p, std::move(__d), std::move(__a))
-40039:  { }
-40039: 
-40039:       template<typename _Yp>
-40039:  __shared_ptr(const __shared_ptr<_Yp, _Lp>& __r,
-40039:        element_type* __p) noexcept
-40039:  : _M_ptr(__p), _M_refcount(__r._M_refcount)
-40039:  { }
-40039: 
-40039:       __shared_ptr(const __shared_ptr&) noexcept = default;
-40039:       __shared_ptr& operator=(const __shared_ptr&) noexcept = default;
-40039:       ~__shared_ptr() = default;
-40039: 
-40039:       template<typename _Yp, typename = _Compatible<_Yp>>
-40039:  __shared_ptr(const __shared_ptr<_Yp, _Lp>& __r) noexcept
-40039:  : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount)
-40039:  { }
-40039: 
-40039:       __shared_ptr(__shared_ptr&& __r) noexcept
-40039:       : _M_ptr(__r._M_ptr), _M_refcount()
-40039:       {
-40039:  _M_refcount._M_swap(__r._M_refcount);
-40039:  __r._M_ptr = 0;
-40039:       }
-40039: 
-40039:       template<typename _Yp, typename = _Compatible<_Yp>>
-40039:  __shared_ptr(__shared_ptr<_Yp, _Lp>&& __r) noexcept
-40039:  : _M_ptr(__r._M_ptr), _M_refcount()
-40039:  {
-40039:    _M_refcount._M_swap(__r._M_refcount);
-40039:    __r._M_ptr = 0;
-40039:  }
-40039: 
-40039:       template<typename _Yp, typename = _Compatible<_Yp>>
-40039:  explicit __shared_ptr(const __weak_ptr<_Yp, _Lp>& __r)
-40039:  : _M_refcount(__r._M_refcount)
-40039:  {
-40039: 
-40039: 
-40039:    _M_ptr = __r._M_ptr;
-40039:  }
-40039: 
-40039: 
-40039:       template<typename _Yp, typename _Del,
-40039:         typename = _UniqCompatible<_Yp, _Del>>
-40039:  __shared_ptr(unique_ptr<_Yp, _Del>&& __r)
-40039:  : _M_ptr(__r.get()), _M_refcount()
-40039:  {
-40039:    auto __raw = __to_address(__r.get());
-40039:    _M_refcount = __shared_count<_Lp>(std::move(__r));
-40039:    _M_enable_shared_from_this_with(__raw);
-40039:  }
-40039: 
-40039: 
-40039:     protected:
-40039: 
-40039:       template<typename _Tp1, typename _Del,
-40039:         typename enable_if<__and_<
-40039:    __not_<is_array<_Tp>>, is_array<_Tp1>,
-40039:           is_convertible<typename unique_ptr<_Tp1, _Del>::pointer, _Tp*>
-40039:         >::value, bool>::type = true>
-40039:  __shared_ptr(unique_ptr<_Tp1, _Del>&& __r, __sp_array_delete)
-40039:  : _M_ptr(__r.get()), _M_refcount()
-40039:  {
-40039:    auto __raw = __to_address(__r.get());
-40039:    _M_refcount = __shared_count<_Lp>(std::move(__r));
-40039:    _M_enable_shared_from_this_with(__raw);
-40039:  }
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039: #pragma GCC diagnostic push
-40039: #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-40039: 
-40039:       template<typename _Yp, typename = _Compatible<_Yp>>
-40039:  __shared_ptr(auto_ptr<_Yp>&& __r);
-40039: #pragma GCC diagnostic pop
-40039: 
-40039: 
-40039:       constexpr __shared_ptr(nullptr_t) noexcept : __shared_ptr() { }
-40039: 
-40039:       template<typename _Yp>
-40039:  _Assignable<_Yp>
-40039:  operator=(const __shared_ptr<_Yp, _Lp>& __r) noexcept
-40039:  {
-40039:    _M_ptr = __r._M_ptr;
-40039:    _M_refcount = __r._M_refcount;
-40039:    return *this;
-40039:  }
-40039: 
-40039: 
-40039: #pragma GCC diagnostic push
-40039: #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-40039:       template<typename _Yp>
-40039:  _Assignable<_Yp>
-40039:  operator=(auto_ptr<_Yp>&& __r)
-40039:  {
-40039:    __shared_ptr(std::move(__r)).swap(*this);
-40039:    return *this;
-40039:  }
-40039: #pragma GCC diagnostic pop
-40039: 
-40039: 
-40039:       __shared_ptr&
-40039:       operator=(__shared_ptr&& __r) noexcept
-40039:       {
-40039:  __shared_ptr(std::move(__r)).swap(*this);
-40039:  return *this;
-40039:       }
-40039: 
-40039:       template<class _Yp>
-40039:  _Assignable<_Yp>
-40039:  operator=(__shared_ptr<_Yp, _Lp>&& __r) noexcept
-40039:  {
-40039:    __shared_ptr(std::move(__r)).swap(*this);
-40039:    return *this;
-40039:  }
-40039: 
-40039:       template<typename _Yp, typename _Del>
-40039:  _UniqAssignable<_Yp, _Del>
-40039:  operator=(unique_ptr<_Yp, _Del>&& __r)
-40039:  {
-40039:    __shared_ptr(std::move(__r)).swap(*this);
-40039:    return *this;
-40039:  }
-40039: 
-40039:       void
-40039:       reset() noexcept
-40039:       { __shared_ptr().swap(*this); }
-40039: 
-40039:       template<typename _Yp>
-40039:  _SafeConv<_Yp>
-40039:  reset(_Yp* __p)
-40039:  {
-40039: 
-40039:    ;
-40039:    __shared_ptr(__p).swap(*this);
-40039:  }
-40039: 
-40039:       template<typename _Yp, typename _Deleter>
-40039:  _SafeConv<_Yp>
-40039:  reset(_Yp* __p, _Deleter __d)
-40039:  { __shared_ptr(__p, std::move(__d)).swap(*this); }
-40039: 
-40039:       template<typename _Yp, typename _Deleter, typename _Alloc>
-40039:  _SafeConv<_Yp>
-40039:  reset(_Yp* __p, _Deleter __d, _Alloc __a)
-40039:         { __shared_ptr(__p, std::move(__d), std::move(__a)).swap(*this); }
-40039: 
-40039:       element_type*
-40039:       get() const noexcept
-40039:       { return _M_ptr; }
-40039: 
-40039:       explicit operator bool() const
-40039:       { return _M_ptr == 0 ? false : true; }
-40039: 
-40039:       bool
-40039:       unique() const noexcept
-40039:       { return _M_refcount._M_unique(); }
-40039: 
-40039:       long
-40039:       use_count() const noexcept
-40039:       { return _M_refcount._M_get_use_count(); }
-40039: 
-40039:       void
-40039:       swap(__shared_ptr<_Tp, _Lp>& __other) noexcept
-40039:       {
-40039:  std::swap(_M_ptr, __other._M_ptr);
-40039:  _M_refcount._M_swap(__other._M_refcount);
-40039:       }
-40039: 
-40039:       template<typename _Tp1>
-40039:  bool
-40039:  owner_before(__shared_ptr<_Tp1, _Lp> const& __rhs) const noexcept
-40039:  { return _M_refcount._M_less(__rhs._M_refcount); }
-40039: 
-40039:       template<typename _Tp1>
-40039:  bool
-40039:  owner_before(__weak_ptr<_Tp1, _Lp> const& __rhs) const noexcept
-40039:  { return _M_refcount._M_less(__rhs._M_refcount); }
-40039: 
-40039:     protected:
-40039: 
-40039:       template<typename _Alloc, typename... _Args>
-40039:  __shared_ptr(_Sp_alloc_shared_tag<_Alloc> __tag, _Args&&... __args)
-40039:  : _M_ptr(), _M_refcount(_M_ptr, __tag, std::forward<_Args>(__args)...)
-40039:  { _M_enable_shared_from_this_with(_M_ptr); }
-40039: 
-40039:       template<typename _Tp1, _Lock_policy _Lp1, typename _Alloc,
-40039:         typename... _Args>
-40039:  friend __shared_ptr<_Tp1, _Lp1>
-40039:  __allocate_shared(const _Alloc& __a, _Args&&... __args);
-40039: 
-40039: 
-40039: 
-40039:       __shared_ptr(const __weak_ptr<_Tp, _Lp>& __r, std::nothrow_t)
-40039:       : _M_refcount(__r._M_refcount, std::nothrow)
-40039:       {
-40039:  _M_ptr = _M_refcount._M_get_use_count() ? __r._M_ptr : nullptr;
-40039:       }
-40039: 
-40039:       friend class __weak_ptr<_Tp, _Lp>;
-40039: 
-40039:     private:
-40039: 
-40039:       template<typename _Yp>
-40039:  using __esft_base_t = decltype(__enable_shared_from_this_base(
-40039:        std::declval<const __shared_count<_Lp>&>(),
-40039:        std::declval<_Yp*>()));
-40039: 
-40039: 
-40039:       template<typename _Yp, typename = void>
-40039:  struct __has_esft_base
-40039:  : false_type { };
-40039: 
-40039:       template<typename _Yp>
-40039:  struct __has_esft_base<_Yp, __void_t<__esft_base_t<_Yp>>>
-40039:  : __not_<is_array<_Tp>> { };
-40039: 
-40039:       template<typename _Yp, typename _Yp2 = typename remove_cv<_Yp>::type>
-40039:  typename enable_if<__has_esft_base<_Yp2>::value>::type
-40039:  _M_enable_shared_from_this_with(_Yp* __p) noexcept
-40039:  {
-40039:    if (auto __base = __enable_shared_from_this_base(_M_refcount, __p))
-40039:      __base->_M_weak_assign(const_cast<_Yp2*>(__p), _M_refcount);
-40039:  }
-40039: 
-40039:       template<typename _Yp, typename _Yp2 = typename remove_cv<_Yp>::type>
-40039:  typename enable_if<!__has_esft_base<_Yp2>::value>::type
-40039:  _M_enable_shared_from_this_with(_Yp*) noexcept
-40039:  { }
-40039: 
-40039:       void*
-40039:       _M_get_deleter(const std::type_info& __ti) const noexcept
-40039:       { return _M_refcount._M_get_deleter(__ti); }
-40039: 
-40039:       template<typename _Tp1, _Lock_policy _Lp1> friend class __shared_ptr;
-40039:       template<typename _Tp1, _Lock_policy _Lp1> friend class __weak_ptr;
-40039: 
-40039:       template<typename _Del, typename _Tp1, _Lock_policy _Lp1>
-40039:  friend _Del* get_deleter(const __shared_ptr<_Tp1, _Lp1>&) noexcept;
-40039: 
-40039:       template<typename _Del, typename _Tp1>
-40039:  friend _Del* get_deleter(const shared_ptr<_Tp1>&) noexcept;
-40039: 
-40039:       element_type* _M_ptr;
-40039:       __shared_count<_Lp> _M_refcount;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
-40039:     inline bool
-40039:     operator==(const __shared_ptr<_Tp1, _Lp>& __a,
-40039:         const __shared_ptr<_Tp2, _Lp>& __b) noexcept
-40039:     { return __a.get() == __b.get(); }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline bool
-40039:     operator==(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
-40039:     { return !__a; }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline bool
-40039:     operator==(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
-40039:     { return !__a; }
-40039: 
-40039:   template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
-40039:     inline bool
-40039:     operator!=(const __shared_ptr<_Tp1, _Lp>& __a,
-40039:         const __shared_ptr<_Tp2, _Lp>& __b) noexcept
-40039:     { return __a.get() != __b.get(); }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline bool
-40039:     operator!=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
-40039:     { return (bool)__a; }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline bool
-40039:     operator!=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
-40039:     { return (bool)__a; }
-40039: 
-40039:   template<typename _Tp, typename _Up, _Lock_policy _Lp>
-40039:     inline bool
-40039:     operator<(const __shared_ptr<_Tp, _Lp>& __a,
-40039:        const __shared_ptr<_Up, _Lp>& __b) noexcept
-40039:     {
-40039:       using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type;
-40039:       using _Up_elt = typename __shared_ptr<_Up, _Lp>::element_type;
-40039:       using _Vp = typename common_type<_Tp_elt*, _Up_elt*>::type;
-40039:       return less<_Vp>()(__a.get(), __b.get());
-40039:     }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline bool
-40039:     operator<(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
-40039:     {
-40039:       using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type;
-40039:       return less<_Tp_elt*>()(__a.get(), nullptr);
-40039:     }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline bool
-40039:     operator<(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
-40039:     {
-40039:       using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type;
-40039:       return less<_Tp_elt*>()(nullptr, __a.get());
-40039:     }
-40039: 
-40039:   template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
-40039:     inline bool
-40039:     operator<=(const __shared_ptr<_Tp1, _Lp>& __a,
-40039:         const __shared_ptr<_Tp2, _Lp>& __b) noexcept
-40039:     { return !(__b < __a); }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline bool
-40039:     operator<=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
-40039:     { return !(nullptr < __a); }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline bool
-40039:     operator<=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
-40039:     { return !(__a < nullptr); }
-40039: 
-40039:   template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
-40039:     inline bool
-40039:     operator>(const __shared_ptr<_Tp1, _Lp>& __a,
-40039:        const __shared_ptr<_Tp2, _Lp>& __b) noexcept
-40039:     { return (__b < __a); }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline bool
-40039:     operator>(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
-40039:     { return nullptr < __a; }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline bool
-40039:     operator>(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
-40039:     { return __a < nullptr; }
-40039: 
-40039:   template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
-40039:     inline bool
-40039:     operator>=(const __shared_ptr<_Tp1, _Lp>& __a,
-40039:         const __shared_ptr<_Tp2, _Lp>& __b) noexcept
-40039:     { return !(__a < __b); }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline bool
-40039:     operator>=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
-40039:     { return !(__a < nullptr); }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline bool
-40039:     operator>=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
-40039:     { return !(nullptr < __a); }
-40039: 
-40039:   template<typename _Sp>
-40039:     struct _Sp_less : public binary_function<_Sp, _Sp, bool>
-40039:     {
-40039:       bool
-40039:       operator()(const _Sp& __lhs, const _Sp& __rhs) const noexcept
-40039:       {
-40039:  typedef typename _Sp::element_type element_type;
-40039:  return std::less<element_type*>()(__lhs.get(), __rhs.get());
-40039:       }
-40039:     };
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     struct less<__shared_ptr<_Tp, _Lp>>
-40039:     : public _Sp_less<__shared_ptr<_Tp, _Lp>>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline void
-40039:     swap(__shared_ptr<_Tp, _Lp>& __a, __shared_ptr<_Tp, _Lp>& __b) noexcept
-40039:     { __a.swap(__b); }
-40039: # 1544 "/usr/include/c++/8/bits/shared_ptr_base.h" 3
-40039:   template<typename _Tp, typename _Tp1, _Lock_policy _Lp>
-40039:     inline __shared_ptr<_Tp, _Lp>
-40039:     static_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept
-40039:     {
-40039:       using _Sp = __shared_ptr<_Tp, _Lp>;
-40039:       return _Sp(__r, static_cast<typename _Sp::element_type*>(__r.get()));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Tp1, _Lock_policy _Lp>
-40039:     inline __shared_ptr<_Tp, _Lp>
-40039:     const_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept
-40039:     {
-40039:       using _Sp = __shared_ptr<_Tp, _Lp>;
-40039:       return _Sp(__r, const_cast<typename _Sp::element_type*>(__r.get()));
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Tp1, _Lock_policy _Lp>
-40039:     inline __shared_ptr<_Tp, _Lp>
-40039:     dynamic_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept
-40039:     {
-40039:       using _Sp = __shared_ptr<_Tp, _Lp>;
-40039:       if (auto* __p = dynamic_cast<typename _Sp::element_type*>(__r.get()))
-40039:  return _Sp(__r, __p);
-40039:       return _Sp();
-40039:     }
-40039: # 1590 "/usr/include/c++/8/bits/shared_ptr_base.h" 3
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     class __weak_ptr
-40039:     {
-40039:       template<typename _Yp, typename _Res = void>
-40039:  using _Compatible = typename
-40039:    enable_if<__sp_compatible_with<_Yp*, _Tp*>::value, _Res>::type;
-40039: 
-40039: 
-40039:       template<typename _Yp>
-40039:  using _Assignable = _Compatible<_Yp, __weak_ptr&>;
-40039: 
-40039:     public:
-40039:       using element_type = typename remove_extent<_Tp>::type;
-40039: 
-40039:       constexpr __weak_ptr() noexcept
-40039:       : _M_ptr(nullptr), _M_refcount()
-40039:       { }
-40039: 
-40039:       __weak_ptr(const __weak_ptr&) noexcept = default;
-40039: 
-40039:       ~__weak_ptr() = default;
-40039: # 1626 "/usr/include/c++/8/bits/shared_ptr_base.h" 3
-40039:       template<typename _Yp, typename = _Compatible<_Yp>>
-40039:  __weak_ptr(const __weak_ptr<_Yp, _Lp>& __r) noexcept
-40039:  : _M_refcount(__r._M_refcount)
-40039:         { _M_ptr = __r.lock().get(); }
-40039: 
-40039:       template<typename _Yp, typename = _Compatible<_Yp>>
-40039:  __weak_ptr(const __shared_ptr<_Yp, _Lp>& __r) noexcept
-40039:  : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount)
-40039:  { }
-40039: 
-40039:       __weak_ptr(__weak_ptr&& __r) noexcept
-40039:       : _M_ptr(__r._M_ptr), _M_refcount(std::move(__r._M_refcount))
-40039:       { __r._M_ptr = nullptr; }
-40039: 
-40039:       template<typename _Yp, typename = _Compatible<_Yp>>
-40039:  __weak_ptr(__weak_ptr<_Yp, _Lp>&& __r) noexcept
-40039:  : _M_ptr(__r.lock().get()), _M_refcount(std::move(__r._M_refcount))
-40039:         { __r._M_ptr = nullptr; }
-40039: 
-40039:       __weak_ptr&
-40039:       operator=(const __weak_ptr& __r) noexcept = default;
-40039: 
-40039:       template<typename _Yp>
-40039:  _Assignable<_Yp>
-40039:  operator=(const __weak_ptr<_Yp, _Lp>& __r) noexcept
-40039:  {
-40039:    _M_ptr = __r.lock().get();
-40039:    _M_refcount = __r._M_refcount;
-40039:    return *this;
-40039:  }
-40039: 
-40039:       template<typename _Yp>
-40039:  _Assignable<_Yp>
-40039:  operator=(const __shared_ptr<_Yp, _Lp>& __r) noexcept
-40039:  {
-40039:    _M_ptr = __r._M_ptr;
-40039:    _M_refcount = __r._M_refcount;
-40039:    return *this;
-40039:  }
-40039: 
-40039:       __weak_ptr&
-40039:       operator=(__weak_ptr&& __r) noexcept
-40039:       {
-40039:  _M_ptr = __r._M_ptr;
-40039:  _M_refcount = std::move(__r._M_refcount);
-40039:  __r._M_ptr = nullptr;
-40039:  return *this;
-40039:       }
-40039: 
-40039:       template<typename _Yp>
-40039:  _Assignable<_Yp>
-40039:  operator=(__weak_ptr<_Yp, _Lp>&& __r) noexcept
-40039:  {
-40039:    _M_ptr = __r.lock().get();
-40039:    _M_refcount = std::move(__r._M_refcount);
-40039:    __r._M_ptr = nullptr;
-40039:    return *this;
-40039:  }
-40039: 
-40039:       __shared_ptr<_Tp, _Lp>
-40039:       lock() const noexcept
-40039:       { return __shared_ptr<element_type, _Lp>(*this, std::nothrow); }
-40039: 
-40039:       long
-40039:       use_count() const noexcept
-40039:       { return _M_refcount._M_get_use_count(); }
-40039: 
-40039:       bool
-40039:       expired() const noexcept
-40039:       { return _M_refcount._M_get_use_count() == 0; }
-40039: 
-40039:       template<typename _Tp1>
-40039:  bool
-40039:  owner_before(const __shared_ptr<_Tp1, _Lp>& __rhs) const noexcept
-40039:  { return _M_refcount._M_less(__rhs._M_refcount); }
-40039: 
-40039:       template<typename _Tp1>
-40039:  bool
-40039:  owner_before(const __weak_ptr<_Tp1, _Lp>& __rhs) const noexcept
-40039:  { return _M_refcount._M_less(__rhs._M_refcount); }
-40039: 
-40039:       void
-40039:       reset() noexcept
-40039:       { __weak_ptr().swap(*this); }
-40039: 
-40039:       void
-40039:       swap(__weak_ptr& __s) noexcept
-40039:       {
-40039:  std::swap(_M_ptr, __s._M_ptr);
-40039:  _M_refcount._M_swap(__s._M_refcount);
-40039:       }
-40039: 
-40039:     private:
-40039: 
-40039:       void
-40039:       _M_assign(_Tp* __ptr, const __shared_count<_Lp>& __refcount) noexcept
-40039:       {
-40039:  if (use_count() == 0)
-40039:    {
-40039:      _M_ptr = __ptr;
-40039:      _M_refcount = __refcount;
-40039:    }
-40039:       }
-40039: 
-40039:       template<typename _Tp1, _Lock_policy _Lp1> friend class __shared_ptr;
-40039:       template<typename _Tp1, _Lock_policy _Lp1> friend class __weak_ptr;
-40039:       friend class __enable_shared_from_this<_Tp, _Lp>;
-40039:       friend class enable_shared_from_this<_Tp>;
-40039: 
-40039:       element_type* _M_ptr;
-40039:       __weak_count<_Lp> _M_refcount;
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline void
-40039:     swap(__weak_ptr<_Tp, _Lp>& __a, __weak_ptr<_Tp, _Lp>& __b) noexcept
-40039:     { __a.swap(__b); }
-40039: 
-40039:   template<typename _Tp, typename _Tp1>
-40039:     struct _Sp_owner_less : public binary_function<_Tp, _Tp, bool>
-40039:     {
-40039:       bool
-40039:       operator()(const _Tp& __lhs, const _Tp& __rhs) const noexcept
-40039:       { return __lhs.owner_before(__rhs); }
-40039: 
-40039:       bool
-40039:       operator()(const _Tp& __lhs, const _Tp1& __rhs) const noexcept
-40039:       { return __lhs.owner_before(__rhs); }
-40039: 
-40039:       bool
-40039:       operator()(const _Tp1& __lhs, const _Tp& __rhs) const noexcept
-40039:       { return __lhs.owner_before(__rhs); }
-40039:     };
-40039: 
-40039:   template<>
-40039:     struct _Sp_owner_less<void, void>
-40039:     {
-40039:       template<typename _Tp, typename _Up>
-40039:  auto
-40039:  operator()(const _Tp& __lhs, const _Up& __rhs) const noexcept
-40039:  -> decltype(__lhs.owner_before(__rhs))
-40039:  { return __lhs.owner_before(__rhs); }
-40039: 
-40039:       using is_transparent = void;
-40039:     };
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     struct owner_less<__shared_ptr<_Tp, _Lp>>
-40039:     : public _Sp_owner_less<__shared_ptr<_Tp, _Lp>, __weak_ptr<_Tp, _Lp>>
-40039:     { };
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     struct owner_less<__weak_ptr<_Tp, _Lp>>
-40039:     : public _Sp_owner_less<__weak_ptr<_Tp, _Lp>, __shared_ptr<_Tp, _Lp>>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     class __enable_shared_from_this
-40039:     {
-40039:     protected:
-40039:       constexpr __enable_shared_from_this() noexcept { }
-40039: 
-40039:       __enable_shared_from_this(const __enable_shared_from_this&) noexcept { }
-40039: 
-40039:       __enable_shared_from_this&
-40039:       operator=(const __enable_shared_from_this&) noexcept
-40039:       { return *this; }
-40039: 
-40039:       ~__enable_shared_from_this() { }
-40039: 
-40039:     public:
-40039:       __shared_ptr<_Tp, _Lp>
-40039:       shared_from_this()
-40039:       { return __shared_ptr<_Tp, _Lp>(this->_M_weak_this); }
-40039: 
-40039:       __shared_ptr<const _Tp, _Lp>
-40039:       shared_from_this() const
-40039:       { return __shared_ptr<const _Tp, _Lp>(this->_M_weak_this); }
-40039: 
-40039: 
-40039:       __weak_ptr<_Tp, _Lp>
-40039:       weak_from_this() noexcept
-40039:       { return this->_M_weak_this; }
-40039: 
-40039:       __weak_ptr<const _Tp, _Lp>
-40039:       weak_from_this() const noexcept
-40039:       { return this->_M_weak_this; }
-40039: 
-40039: 
-40039:     private:
-40039:       template<typename _Tp1>
-40039:  void
-40039:  _M_weak_assign(_Tp1* __p, const __shared_count<_Lp>& __n) const noexcept
-40039:  { _M_weak_this._M_assign(__p, __n); }
-40039: 
-40039:       friend const __enable_shared_from_this*
-40039:       __enable_shared_from_this_base(const __shared_count<_Lp>&,
-40039:          const __enable_shared_from_this* __p)
-40039:       { return __p; }
-40039: 
-40039:       template<typename, _Lock_policy>
-40039:  friend class __shared_ptr;
-40039: 
-40039:       mutable __weak_ptr<_Tp, _Lp> _M_weak_this;
-40039:     };
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp, typename _Alloc, typename... _Args>
-40039:     inline __shared_ptr<_Tp, _Lp>
-40039:     __allocate_shared(const _Alloc& __a, _Args&&... __args)
-40039:     {
-40039:       return __shared_ptr<_Tp, _Lp>(_Sp_alloc_shared_tag<_Alloc>{__a},
-40039:         std::forward<_Args>(__args)...);
-40039:     }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp, typename... _Args>
-40039:     inline __shared_ptr<_Tp, _Lp>
-40039:     __make_shared(_Args&&... __args)
-40039:     {
-40039:       typedef typename std::remove_const<_Tp>::type _Tp_nc;
-40039:       return std::__allocate_shared<_Tp, _Lp>(std::allocator<_Tp_nc>(),
-40039:            std::forward<_Args>(__args)...);
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     struct hash<__shared_ptr<_Tp, _Lp>>
-40039:     : public __hash_base<size_t, __shared_ptr<_Tp, _Lp>>
-40039:     {
-40039:       size_t
-40039:       operator()(const __shared_ptr<_Tp, _Lp>& __s) const noexcept
-40039:       {
-40039:  return hash<typename __shared_ptr<_Tp, _Lp>::element_type*>()(
-40039:      __s.get());
-40039:       }
-40039:     };
-40039: 
-40039: 
-40039: }
-40039: # 53 "/usr/include/c++/8/bits/shared_ptr.h" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Ch, typename _Tr, typename _Tp, _Lock_policy _Lp>
-40039:     inline std::basic_ostream<_Ch, _Tr>&
-40039:     operator<<(std::basic_ostream<_Ch, _Tr>& __os,
-40039:         const __shared_ptr<_Tp, _Lp>& __p)
-40039:     {
-40039:       __os << __p.get();
-40039:       return __os;
-40039:     }
-40039: 
-40039:   template<typename _Del, typename _Tp, _Lock_policy _Lp>
-40039:     inline _Del*
-40039:     get_deleter(const __shared_ptr<_Tp, _Lp>& __p) noexcept
-40039:     {
-40039: 
-40039:       return static_cast<_Del*>(__p._M_get_deleter(typeid(_Del)));
-40039: 
-40039: 
-40039: 
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _Del, typename _Tp>
-40039:     inline _Del*
-40039:     get_deleter(const shared_ptr<_Tp>& __p) noexcept
-40039:     {
-40039: 
-40039:       return static_cast<_Del*>(__p._M_get_deleter(typeid(_Del)));
-40039: 
-40039: 
-40039: 
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     class shared_ptr : public __shared_ptr<_Tp>
-40039:     {
-40039:       template<typename... _Args>
-40039:  using _Constructible = typename enable_if<
-40039:    is_constructible<__shared_ptr<_Tp>, _Args...>::value
-40039:  >::type;
-40039: 
-40039:       template<typename _Arg>
-40039:  using _Assignable = typename enable_if<
-40039:    is_assignable<__shared_ptr<_Tp>&, _Arg>::value, shared_ptr&
-40039:  >::type;
-40039: 
-40039:     public:
-40039: 
-40039:       using element_type = typename __shared_ptr<_Tp>::element_type;
-40039: # 127 "/usr/include/c++/8/bits/shared_ptr.h" 3
-40039:       constexpr shared_ptr() noexcept : __shared_ptr<_Tp>() { }
-40039: 
-40039:       shared_ptr(const shared_ptr&) noexcept = default;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Yp, typename = _Constructible<_Yp*>>
-40039:  explicit
-40039:  shared_ptr(_Yp* __p) : __shared_ptr<_Tp>(__p) { }
-40039: # 154 "/usr/include/c++/8/bits/shared_ptr.h" 3
-40039:       template<typename _Yp, typename _Deleter,
-40039:         typename = _Constructible<_Yp*, _Deleter>>
-40039:  shared_ptr(_Yp* __p, _Deleter __d)
-40039:         : __shared_ptr<_Tp>(__p, std::move(__d)) { }
-40039: # 172 "/usr/include/c++/8/bits/shared_ptr.h" 3
-40039:       template<typename _Deleter>
-40039:  shared_ptr(nullptr_t __p, _Deleter __d)
-40039:         : __shared_ptr<_Tp>(__p, std::move(__d)) { }
-40039: # 191 "/usr/include/c++/8/bits/shared_ptr.h" 3
-40039:       template<typename _Yp, typename _Deleter, typename _Alloc,
-40039:         typename = _Constructible<_Yp*, _Deleter, _Alloc>>
-40039:  shared_ptr(_Yp* __p, _Deleter __d, _Alloc __a)
-40039:  : __shared_ptr<_Tp>(__p, std::move(__d), std::move(__a)) { }
-40039: # 211 "/usr/include/c++/8/bits/shared_ptr.h" 3
-40039:       template<typename _Deleter, typename _Alloc>
-40039:  shared_ptr(nullptr_t __p, _Deleter __d, _Alloc __a)
-40039:  : __shared_ptr<_Tp>(__p, std::move(__d), std::move(__a)) { }
-40039: # 233 "/usr/include/c++/8/bits/shared_ptr.h" 3
-40039:       template<typename _Yp>
-40039:  shared_ptr(const shared_ptr<_Yp>& __r, element_type* __p) noexcept
-40039:  : __shared_ptr<_Tp>(__r, __p) { }
-40039: # 244 "/usr/include/c++/8/bits/shared_ptr.h" 3
-40039:       template<typename _Yp,
-40039:         typename = _Constructible<const shared_ptr<_Yp>&>>
-40039:  shared_ptr(const shared_ptr<_Yp>& __r) noexcept
-40039:         : __shared_ptr<_Tp>(__r) { }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       shared_ptr(shared_ptr&& __r) noexcept
-40039:       : __shared_ptr<_Tp>(std::move(__r)) { }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Yp, typename = _Constructible<shared_ptr<_Yp>>>
-40039:  shared_ptr(shared_ptr<_Yp>&& __r) noexcept
-40039:  : __shared_ptr<_Tp>(std::move(__r)) { }
-40039: # 274 "/usr/include/c++/8/bits/shared_ptr.h" 3
-40039:       template<typename _Yp, typename = _Constructible<const weak_ptr<_Yp>&>>
-40039:  explicit shared_ptr(const weak_ptr<_Yp>& __r)
-40039:  : __shared_ptr<_Tp>(__r) { }
-40039: 
-40039: 
-40039: #pragma GCC diagnostic push
-40039: #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-40039:       template<typename _Yp, typename = _Constructible<auto_ptr<_Yp>>>
-40039:  shared_ptr(auto_ptr<_Yp>&& __r);
-40039: #pragma GCC diagnostic pop
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Yp, typename _Del,
-40039:         typename = _Constructible<unique_ptr<_Yp, _Del>>>
-40039:  shared_ptr(unique_ptr<_Yp, _Del>&& __r)
-40039:  : __shared_ptr<_Tp>(std::move(__r)) { }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Yp, typename _Del,
-40039:   _Constructible<unique_ptr<_Yp, _Del>, __sp_array_delete>* = 0>
-40039:  shared_ptr(unique_ptr<_Yp, _Del>&& __r)
-40039:  : __shared_ptr<_Tp>(std::move(__r), __sp_array_delete()) { }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       constexpr shared_ptr(nullptr_t) noexcept : shared_ptr() { }
-40039: 
-40039:       shared_ptr& operator=(const shared_ptr&) noexcept = default;
-40039: 
-40039:       template<typename _Yp>
-40039:  _Assignable<const shared_ptr<_Yp>&>
-40039:  operator=(const shared_ptr<_Yp>& __r) noexcept
-40039:  {
-40039:    this->__shared_ptr<_Tp>::operator=(__r);
-40039:    return *this;
-40039:  }
-40039: 
-40039: 
-40039: #pragma GCC diagnostic push
-40039: #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-40039:       template<typename _Yp>
-40039:  _Assignable<auto_ptr<_Yp>>
-40039:  operator=(auto_ptr<_Yp>&& __r)
-40039:  {
-40039:    this->__shared_ptr<_Tp>::operator=(std::move(__r));
-40039:    return *this;
-40039:  }
-40039: #pragma GCC diagnostic pop
-40039: 
-40039: 
-40039:       shared_ptr&
-40039:       operator=(shared_ptr&& __r) noexcept
-40039:       {
-40039:  this->__shared_ptr<_Tp>::operator=(std::move(__r));
-40039:  return *this;
-40039:       }
-40039: 
-40039:       template<class _Yp>
-40039:  _Assignable<shared_ptr<_Yp>>
-40039:  operator=(shared_ptr<_Yp>&& __r) noexcept
-40039:  {
-40039:    this->__shared_ptr<_Tp>::operator=(std::move(__r));
-40039:    return *this;
-40039:  }
-40039: 
-40039:       template<typename _Yp, typename _Del>
-40039:  _Assignable<unique_ptr<_Yp, _Del>>
-40039:  operator=(unique_ptr<_Yp, _Del>&& __r)
-40039:  {
-40039:    this->__shared_ptr<_Tp>::operator=(std::move(__r));
-40039:    return *this;
-40039:  }
-40039: 
-40039:     private:
-40039: 
-40039:       template<typename _Alloc, typename... _Args>
-40039:  shared_ptr(_Sp_alloc_shared_tag<_Alloc> __tag, _Args&&... __args)
-40039:  : __shared_ptr<_Tp>(__tag, std::forward<_Args>(__args)...)
-40039:  { }
-40039: 
-40039:       template<typename _Yp, typename _Alloc, typename... _Args>
-40039:  friend shared_ptr<_Yp>
-40039:  allocate_shared(const _Alloc& __a, _Args&&... __args);
-40039: 
-40039: 
-40039:       shared_ptr(const weak_ptr<_Tp>& __r, std::nothrow_t)
-40039:       : __shared_ptr<_Tp>(__r, std::nothrow) { }
-40039: 
-40039:       friend class weak_ptr<_Tp>;
-40039:     };
-40039: # 381 "/usr/include/c++/8/bits/shared_ptr.h" 3
-40039:   template<typename _Tp, typename _Up>
-40039:     inline bool
-40039:     operator==(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
-40039:     { return __a.get() == __b.get(); }
-40039: 
-40039:   template<typename _Tp>
-40039:     inline bool
-40039:     operator==(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
-40039:     { return !__a; }
-40039: 
-40039:   template<typename _Tp>
-40039:     inline bool
-40039:     operator==(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
-40039:     { return !__a; }
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     inline bool
-40039:     operator!=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
-40039:     { return __a.get() != __b.get(); }
-40039: 
-40039:   template<typename _Tp>
-40039:     inline bool
-40039:     operator!=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
-40039:     { return (bool)__a; }
-40039: 
-40039:   template<typename _Tp>
-40039:     inline bool
-40039:     operator!=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
-40039:     { return (bool)__a; }
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     inline bool
-40039:     operator<(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
-40039:     {
-40039:       using _Tp_elt = typename shared_ptr<_Tp>::element_type;
-40039:       using _Up_elt = typename shared_ptr<_Up>::element_type;
-40039:       using _Vp = typename common_type<_Tp_elt*, _Up_elt*>::type;
-40039:       return less<_Vp>()(__a.get(), __b.get());
-40039:     }
-40039: 
-40039:   template<typename _Tp>
-40039:     inline bool
-40039:     operator<(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
-40039:     {
-40039:       using _Tp_elt = typename shared_ptr<_Tp>::element_type;
-40039:       return less<_Tp_elt*>()(__a.get(), nullptr);
-40039:     }
-40039: 
-40039:   template<typename _Tp>
-40039:     inline bool
-40039:     operator<(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
-40039:     {
-40039:       using _Tp_elt = typename shared_ptr<_Tp>::element_type;
-40039:       return less<_Tp_elt*>()(nullptr, __a.get());
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     inline bool
-40039:     operator<=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
-40039:     { return !(__b < __a); }
-40039: 
-40039:   template<typename _Tp>
-40039:     inline bool
-40039:     operator<=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
-40039:     { return !(nullptr < __a); }
-40039: 
-40039:   template<typename _Tp>
-40039:     inline bool
-40039:     operator<=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
-40039:     { return !(__a < nullptr); }
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     inline bool
-40039:     operator>(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
-40039:     { return (__b < __a); }
-40039: 
-40039:   template<typename _Tp>
-40039:     inline bool
-40039:     operator>(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
-40039:     { return nullptr < __a; }
-40039: 
-40039:   template<typename _Tp>
-40039:     inline bool
-40039:     operator>(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
-40039:     { return __a < nullptr; }
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     inline bool
-40039:     operator>=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
-40039:     { return !(__a < __b); }
-40039: 
-40039:   template<typename _Tp>
-40039:     inline bool
-40039:     operator>=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
-40039:     { return !(__a < nullptr); }
-40039: 
-40039:   template<typename _Tp>
-40039:     inline bool
-40039:     operator>=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
-40039:     { return !(nullptr < __a); }
-40039: 
-40039:   template<typename _Tp>
-40039:     struct less<shared_ptr<_Tp>> : public _Sp_less<shared_ptr<_Tp>>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline void
-40039:     swap(shared_ptr<_Tp>& __a, shared_ptr<_Tp>& __b) noexcept
-40039:     { __a.swap(__b); }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     inline shared_ptr<_Tp>
-40039:     static_pointer_cast(const shared_ptr<_Up>& __r) noexcept
-40039:     {
-40039:       using _Sp = shared_ptr<_Tp>;
-40039:       return _Sp(__r, static_cast<typename _Sp::element_type*>(__r.get()));
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     inline shared_ptr<_Tp>
-40039:     const_pointer_cast(const shared_ptr<_Up>& __r) noexcept
-40039:     {
-40039:       using _Sp = shared_ptr<_Tp>;
-40039:       return _Sp(__r, const_cast<typename _Sp::element_type*>(__r.get()));
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Up>
-40039:     inline shared_ptr<_Tp>
-40039:     dynamic_pointer_cast(const shared_ptr<_Up>& __r) noexcept
-40039:     {
-40039:       using _Sp = shared_ptr<_Tp>;
-40039:       if (auto* __p = dynamic_cast<typename _Sp::element_type*>(__r.get()))
-40039:  return _Sp(__r, __p);
-40039:       return _Sp();
-40039:     }
-40039: # 534 "/usr/include/c++/8/bits/shared_ptr.h" 3
-40039:   template<typename _Tp>
-40039:     class weak_ptr : public __weak_ptr<_Tp>
-40039:     {
-40039:       template<typename _Arg>
-40039:  using _Constructible = typename enable_if<
-40039:    is_constructible<__weak_ptr<_Tp>, _Arg>::value
-40039:  >::type;
-40039: 
-40039:       template<typename _Arg>
-40039:  using _Assignable = typename enable_if<
-40039:    is_assignable<__weak_ptr<_Tp>&, _Arg>::value, weak_ptr&
-40039:  >::type;
-40039: 
-40039:     public:
-40039:       constexpr weak_ptr() noexcept = default;
-40039: 
-40039:       template<typename _Yp,
-40039:         typename = _Constructible<const shared_ptr<_Yp>&>>
-40039:  weak_ptr(const shared_ptr<_Yp>& __r) noexcept
-40039:  : __weak_ptr<_Tp>(__r) { }
-40039: 
-40039:       weak_ptr(const weak_ptr&) noexcept = default;
-40039: 
-40039:       template<typename _Yp, typename = _Constructible<const weak_ptr<_Yp>&>>
-40039:  weak_ptr(const weak_ptr<_Yp>& __r) noexcept
-40039:  : __weak_ptr<_Tp>(__r) { }
-40039: 
-40039:       weak_ptr(weak_ptr&&) noexcept = default;
-40039: 
-40039:       template<typename _Yp, typename = _Constructible<weak_ptr<_Yp>>>
-40039:  weak_ptr(weak_ptr<_Yp>&& __r) noexcept
-40039:  : __weak_ptr<_Tp>(std::move(__r)) { }
-40039: 
-40039:       weak_ptr&
-40039:       operator=(const weak_ptr& __r) noexcept = default;
-40039: 
-40039:       template<typename _Yp>
-40039:  _Assignable<const weak_ptr<_Yp>&>
-40039:  operator=(const weak_ptr<_Yp>& __r) noexcept
-40039:  {
-40039:    this->__weak_ptr<_Tp>::operator=(__r);
-40039:    return *this;
-40039:  }
-40039: 
-40039:       template<typename _Yp>
-40039:  _Assignable<const shared_ptr<_Yp>&>
-40039:  operator=(const shared_ptr<_Yp>& __r) noexcept
-40039:  {
-40039:    this->__weak_ptr<_Tp>::operator=(__r);
-40039:    return *this;
-40039:  }
-40039: 
-40039:       weak_ptr&
-40039:       operator=(weak_ptr&& __r) noexcept = default;
-40039: 
-40039:       template<typename _Yp>
-40039:  _Assignable<weak_ptr<_Yp>>
-40039:  operator=(weak_ptr<_Yp>&& __r) noexcept
-40039:  {
-40039:    this->__weak_ptr<_Tp>::operator=(std::move(__r));
-40039:    return *this;
-40039:  }
-40039: 
-40039:       shared_ptr<_Tp>
-40039:       lock() const noexcept
-40039:       { return shared_ptr<_Tp>(*this, std::nothrow); }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline void
-40039:     swap(weak_ptr<_Tp>& __a, weak_ptr<_Tp>& __b) noexcept
-40039:     { __a.swap(__b); }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp = void>
-40039:     struct owner_less;
-40039: 
-40039: 
-40039:   template<>
-40039:     struct owner_less<void> : _Sp_owner_less<void, void>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct owner_less<shared_ptr<_Tp>>
-40039:     : public _Sp_owner_less<shared_ptr<_Tp>, weak_ptr<_Tp>>
-40039:     { };
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct owner_less<weak_ptr<_Tp>>
-40039:     : public _Sp_owner_less<weak_ptr<_Tp>, shared_ptr<_Tp>>
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     class enable_shared_from_this
-40039:     {
-40039:     protected:
-40039:       constexpr enable_shared_from_this() noexcept { }
-40039: 
-40039:       enable_shared_from_this(const enable_shared_from_this&) noexcept { }
-40039: 
-40039:       enable_shared_from_this&
-40039:       operator=(const enable_shared_from_this&) noexcept
-40039:       { return *this; }
-40039: 
-40039:       ~enable_shared_from_this() { }
-40039: 
-40039:     public:
-40039:       shared_ptr<_Tp>
-40039:       shared_from_this()
-40039:       { return shared_ptr<_Tp>(this->_M_weak_this); }
-40039: 
-40039:       shared_ptr<const _Tp>
-40039:       shared_from_this() const
-40039:       { return shared_ptr<const _Tp>(this->_M_weak_this); }
-40039: 
-40039: 
-40039: 
-40039:       weak_ptr<_Tp>
-40039:       weak_from_this() noexcept
-40039:       { return this->_M_weak_this; }
-40039: 
-40039:       weak_ptr<const _Tp>
-40039:       weak_from_this() const noexcept
-40039:       { return this->_M_weak_this; }
-40039: 
-40039: 
-40039:     private:
-40039:       template<typename _Tp1>
-40039:  void
-40039:  _M_weak_assign(_Tp1* __p, const __shared_count<>& __n) const noexcept
-40039:  { _M_weak_this._M_assign(__p, __n); }
-40039: 
-40039: 
-40039:       friend const enable_shared_from_this*
-40039:       __enable_shared_from_this_base(const __shared_count<>&,
-40039:          const enable_shared_from_this* __p)
-40039:       { return __p; }
-40039: 
-40039:       template<typename, _Lock_policy>
-40039:  friend class __shared_ptr;
-40039: 
-40039:       mutable weak_ptr<_Tp> _M_weak_this;
-40039:     };
-40039: # 701 "/usr/include/c++/8/bits/shared_ptr.h" 3
-40039:   template<typename _Tp, typename _Alloc, typename... _Args>
-40039:     inline shared_ptr<_Tp>
-40039:     allocate_shared(const _Alloc& __a, _Args&&... __args)
-40039:     {
-40039:       return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a},
-40039:         std::forward<_Args>(__args)...);
-40039:     }
-40039: # 716 "/usr/include/c++/8/bits/shared_ptr.h" 3
-40039:   template<typename _Tp, typename... _Args>
-40039:     inline shared_ptr<_Tp>
-40039:     make_shared(_Args&&... __args)
-40039:     {
-40039:       typedef typename std::remove_cv<_Tp>::type _Tp_nc;
-40039:       return std::allocate_shared<_Tp>(std::allocator<_Tp_nc>(),
-40039:            std::forward<_Args>(__args)...);
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct hash<shared_ptr<_Tp>>
-40039:     : public __hash_base<size_t, shared_ptr<_Tp>>
-40039:     {
-40039:       size_t
-40039:       operator()(const shared_ptr<_Tp>& __s) const noexcept
-40039:       {
-40039:  return std::hash<typename shared_ptr<_Tp>::element_type*>()(__s.get());
-40039:       }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 82 "/usr/include/c++/8/memory" 2 3
-40039: # 1 "/usr/include/c++/8/bits/shared_ptr_atomic.h" 1 3
-40039: # 33 "/usr/include/c++/8/bits/shared_ptr_atomic.h" 3
-40039: # 1 "/usr/include/c++/8/bits/atomic_base.h" 1 3
-40039: # 33 "/usr/include/c++/8/bits/atomic_base.h" 3
-40039:        
-40039: # 34 "/usr/include/c++/8/bits/atomic_base.h" 3
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/atomic_lockfree_defines.h" 1 3
-40039: # 33 "/usr/include/c++/8/bits/atomic_lockfree_defines.h" 3
-40039:        
-40039: # 34 "/usr/include/c++/8/bits/atomic_lockfree_defines.h" 3
-40039: # 38 "/usr/include/c++/8/bits/atomic_base.h" 2 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 55 "/usr/include/c++/8/bits/atomic_base.h" 3
-40039:   typedef enum memory_order
-40039:     {
-40039:       memory_order_relaxed,
-40039:       memory_order_consume,
-40039:       memory_order_acquire,
-40039:       memory_order_release,
-40039:       memory_order_acq_rel,
-40039:       memory_order_seq_cst
-40039:     } memory_order;
-40039: 
-40039:   enum __memory_order_modifier
-40039:     {
-40039:       __memory_order_mask = 0x0ffff,
-40039:       __memory_order_modifier_mask = 0xffff0000,
-40039:       __memory_order_hle_acquire = 0x10000,
-40039:       __memory_order_hle_release = 0x20000
-40039:     };
-40039: 
-40039:   constexpr memory_order
-40039:   operator|(memory_order __m, __memory_order_modifier __mod)
-40039:   {
-40039:     return memory_order(__m | int(__mod));
-40039:   }
-40039: 
-40039:   constexpr memory_order
-40039:   operator&(memory_order __m, __memory_order_modifier __mod)
-40039:   {
-40039:     return memory_order(__m & int(__mod));
-40039:   }
-40039: 
-40039: 
-40039:   constexpr memory_order
-40039:   __cmpexch_failure_order2(memory_order __m) noexcept
-40039:   {
-40039:     return __m == memory_order_acq_rel ? memory_order_acquire
-40039:       : __m == memory_order_release ? memory_order_relaxed : __m;
-40039:   }
-40039: 
-40039:   constexpr memory_order
-40039:   __cmpexch_failure_order(memory_order __m) noexcept
-40039:   {
-40039:     return memory_order(__cmpexch_failure_order2(__m & __memory_order_mask)
-40039:       | (__m & __memory_order_modifier_mask));
-40039:   }
-40039: 
-40039:   inline __attribute__((__always_inline__)) void
-40039:   atomic_thread_fence(memory_order __m) noexcept
-40039:   { __atomic_thread_fence(__m); }
-40039: 
-40039:   inline __attribute__((__always_inline__)) void
-40039:   atomic_signal_fence(memory_order __m) noexcept
-40039:   { __atomic_signal_fence(__m); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline _Tp
-40039:     kill_dependency(_Tp __y) noexcept
-40039:     {
-40039:       _Tp __ret(__y);
-40039:       return __ret;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _IntTp>
-40039:     struct __atomic_base;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct atomic;
-40039: 
-40039:   template<typename _Tp>
-40039:     struct atomic<_Tp*>;
-40039: 
-40039: 
-40039: 
-40039:     typedef bool __atomic_flag_data_type;
-40039: # 148 "/usr/include/c++/8/bits/atomic_base.h" 3
-40039:   extern "C" {
-40039: 
-40039:   struct __atomic_flag_base
-40039:   {
-40039:     __atomic_flag_data_type _M_i;
-40039:   };
-40039: 
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   struct atomic_flag : public __atomic_flag_base
-40039:   {
-40039:     atomic_flag() noexcept = default;
-40039:     ~atomic_flag() noexcept = default;
-40039:     atomic_flag(const atomic_flag&) = delete;
-40039:     atomic_flag& operator=(const atomic_flag&) = delete;
-40039:     atomic_flag& operator=(const atomic_flag&) volatile = delete;
-40039: 
-40039: 
-40039:     constexpr atomic_flag(bool __i) noexcept
-40039:       : __atomic_flag_base{ _S_init(__i) }
-40039:     { }
-40039: 
-40039:     inline __attribute__((__always_inline__)) bool
-40039:     test_and_set(memory_order __m = memory_order_seq_cst) noexcept
-40039:     {
-40039:       return __atomic_test_and_set (&_M_i, __m);
-40039:     }
-40039: 
-40039:     inline __attribute__((__always_inline__)) bool
-40039:     test_and_set(memory_order __m = memory_order_seq_cst) volatile noexcept
-40039:     {
-40039:       return __atomic_test_and_set (&_M_i, __m);
-40039:     }
-40039: 
-40039:     inline __attribute__((__always_inline__)) void
-40039:     clear(memory_order __m = memory_order_seq_cst) noexcept
-40039:     {
-40039:       memory_order __b = __m & __memory_order_mask;
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       __atomic_clear (&_M_i, __m);
-40039:     }
-40039: 
-40039:     inline __attribute__((__always_inline__)) void
-40039:     clear(memory_order __m = memory_order_seq_cst) volatile noexcept
-40039:     {
-40039:       memory_order __b = __m & __memory_order_mask;
-40039:       ;
-40039:       ;
-40039:       ;
-40039: 
-40039:       __atomic_clear (&_M_i, __m);
-40039:     }
-40039: 
-40039:   private:
-40039:     static constexpr __atomic_flag_data_type
-40039:     _S_init(bool __i)
-40039:     { return __i ? 1 : 0; }
-40039:   };
-40039: # 237 "/usr/include/c++/8/bits/atomic_base.h" 3
-40039:   template<typename _ITp>
-40039:     struct __atomic_base
-40039:     {
-40039:     private:
-40039:       typedef _ITp __int_type;
-40039: 
-40039:       static constexpr int _S_alignment =
-40039:  sizeof(_ITp) > alignof(_ITp) ? sizeof(_ITp) : alignof(_ITp);
-40039: 
-40039:       alignas(_S_alignment) __int_type _M_i;
-40039: 
-40039:     public:
-40039:       __atomic_base() noexcept = default;
-40039:       ~__atomic_base() noexcept = default;
-40039:       __atomic_base(const __atomic_base&) = delete;
-40039:       __atomic_base& operator=(const __atomic_base&) = delete;
-40039:       __atomic_base& operator=(const __atomic_base&) volatile = delete;
-40039: 
-40039: 
-40039:       constexpr __atomic_base(__int_type __i) noexcept : _M_i (__i) { }
-40039: 
-40039:       operator __int_type() const noexcept
-40039:       { return load(); }
-40039: 
-40039:       operator __int_type() const volatile noexcept
-40039:       { return load(); }
-40039: 
-40039:       __int_type
-40039:       operator=(__int_type __i) noexcept
-40039:       {
-40039:  store(__i);
-40039:  return __i;
-40039:       }
-40039: 
-40039:       __int_type
-40039:       operator=(__int_type __i) volatile noexcept
-40039:       {
-40039:  store(__i);
-40039:  return __i;
-40039:       }
-40039: 
-40039:       __int_type
-40039:       operator++(int) noexcept
-40039:       { return fetch_add(1); }
-40039: 
-40039:       __int_type
-40039:       operator++(int) volatile noexcept
-40039:       { return fetch_add(1); }
-40039: 
-40039:       __int_type
-40039:       operator--(int) noexcept
-40039:       { return fetch_sub(1); }
-40039: 
-40039:       __int_type
-40039:       operator--(int) volatile noexcept
-40039:       { return fetch_sub(1); }
-40039: 
-40039:       __int_type
-40039:       operator++() noexcept
-40039:       { return __atomic_add_fetch(&_M_i, 1, memory_order_seq_cst); }
-40039: 
-40039:       __int_type
-40039:       operator++() volatile noexcept
-40039:       { return __atomic_add_fetch(&_M_i, 1, memory_order_seq_cst); }
-40039: 
-40039:       __int_type
-40039:       operator--() noexcept
-40039:       { return __atomic_sub_fetch(&_M_i, 1, memory_order_seq_cst); }
-40039: 
-40039:       __int_type
-40039:       operator--() volatile noexcept
-40039:       { return __atomic_sub_fetch(&_M_i, 1, memory_order_seq_cst); }
-40039: 
-40039:       __int_type
-40039:       operator+=(__int_type __i) noexcept
-40039:       { return __atomic_add_fetch(&_M_i, __i, memory_order_seq_cst); }
-40039: 
-40039:       __int_type
-40039:       operator+=(__int_type __i) volatile noexcept
-40039:       { return __atomic_add_fetch(&_M_i, __i, memory_order_seq_cst); }
-40039: 
-40039:       __int_type
-40039:       operator-=(__int_type __i) noexcept
-40039:       { return __atomic_sub_fetch(&_M_i, __i, memory_order_seq_cst); }
-40039: 
-40039:       __int_type
-40039:       operator-=(__int_type __i) volatile noexcept
-40039:       { return __atomic_sub_fetch(&_M_i, __i, memory_order_seq_cst); }
-40039: 
-40039:       __int_type
-40039:       operator&=(__int_type __i) noexcept
-40039:       { return __atomic_and_fetch(&_M_i, __i, memory_order_seq_cst); }
-40039: 
-40039:       __int_type
-40039:       operator&=(__int_type __i) volatile noexcept
-40039:       { return __atomic_and_fetch(&_M_i, __i, memory_order_seq_cst); }
-40039: 
-40039:       __int_type
-40039:       operator|=(__int_type __i) noexcept
-40039:       { return __atomic_or_fetch(&_M_i, __i, memory_order_seq_cst); }
-40039: 
-40039:       __int_type
-40039:       operator|=(__int_type __i) volatile noexcept
-40039:       { return __atomic_or_fetch(&_M_i, __i, memory_order_seq_cst); }
-40039: 
-40039:       __int_type
-40039:       operator^=(__int_type __i) noexcept
-40039:       { return __atomic_xor_fetch(&_M_i, __i, memory_order_seq_cst); }
-40039: 
-40039:       __int_type
-40039:       operator^=(__int_type __i) volatile noexcept
-40039:       { return __atomic_xor_fetch(&_M_i, __i, memory_order_seq_cst); }
-40039: 
-40039:       bool
-40039:       is_lock_free() const noexcept
-40039:       {
-40039: 
-40039:  return __atomic_is_lock_free(sizeof(_M_i),
-40039:      reinterpret_cast<void *>(-__alignof(_M_i)));
-40039:       }
-40039: 
-40039:       bool
-40039:       is_lock_free() const volatile noexcept
-40039:       {
-40039: 
-40039:  return __atomic_is_lock_free(sizeof(_M_i),
-40039:      reinterpret_cast<void *>(-__alignof(_M_i)));
-40039:       }
-40039: 
-40039:       inline __attribute__((__always_inline__)) void
-40039:       store(__int_type __i, memory_order __m = memory_order_seq_cst) noexcept
-40039:       {
-40039:  memory_order __b = __m & __memory_order_mask;
-40039:  ;
-40039:  ;
-40039:  ;
-40039: 
-40039:  __atomic_store_n(&_M_i, __i, __m);
-40039:       }
-40039: 
-40039:       inline __attribute__((__always_inline__)) void
-40039:       store(__int_type __i,
-40039:      memory_order __m = memory_order_seq_cst) volatile noexcept
-40039:       {
-40039:  memory_order __b = __m & __memory_order_mask;
-40039:  ;
-40039:  ;
-40039:  ;
-40039: 
-40039:  __atomic_store_n(&_M_i, __i, __m);
-40039:       }
-40039: 
-40039:       inline __attribute__((__always_inline__)) __int_type
-40039:       load(memory_order __m = memory_order_seq_cst) const noexcept
-40039:       {
-40039:  memory_order __b = __m & __memory_order_mask;
-40039:  ;
-40039:  ;
-40039: 
-40039:  return __atomic_load_n(&_M_i, __m);
-40039:       }
-40039: 
-40039:       inline __attribute__((__always_inline__)) __int_type
-40039:       load(memory_order __m = memory_order_seq_cst) const volatile noexcept
-40039:       {
-40039:  memory_order __b = __m & __memory_order_mask;
-40039:  ;
-40039:  ;
-40039: 
-40039:  return __atomic_load_n(&_M_i, __m);
-40039:       }
-40039: 
-40039:       inline __attribute__((__always_inline__)) __int_type
-40039:       exchange(__int_type __i,
-40039:         memory_order __m = memory_order_seq_cst) noexcept
-40039:       {
-40039:  return __atomic_exchange_n(&_M_i, __i, __m);
-40039:       }
-40039: 
-40039: 
-40039:       inline __attribute__((__always_inline__)) __int_type
-40039:       exchange(__int_type __i,
-40039:         memory_order __m = memory_order_seq_cst) volatile noexcept
-40039:       {
-40039:  return __atomic_exchange_n(&_M_i, __i, __m);
-40039:       }
-40039: 
-40039:       inline __attribute__((__always_inline__)) bool
-40039:       compare_exchange_weak(__int_type& __i1, __int_type __i2,
-40039:        memory_order __m1, memory_order __m2) noexcept
-40039:       {
-40039:  memory_order __b2 = __m2 & __memory_order_mask;
-40039:  memory_order __b1 = __m1 & __memory_order_mask;
-40039:  ;
-40039:  ;
-40039:  ;
-40039: 
-40039:  return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, __m1, __m2);
-40039:       }
-40039: 
-40039:       inline __attribute__((__always_inline__)) bool
-40039:       compare_exchange_weak(__int_type& __i1, __int_type __i2,
-40039:        memory_order __m1,
-40039:        memory_order __m2) volatile noexcept
-40039:       {
-40039:  memory_order __b2 = __m2 & __memory_order_mask;
-40039:  memory_order __b1 = __m1 & __memory_order_mask;
-40039:  ;
-40039:  ;
-40039:  ;
-40039: 
-40039:  return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, __m1, __m2);
-40039:       }
-40039: 
-40039:       inline __attribute__((__always_inline__)) bool
-40039:       compare_exchange_weak(__int_type& __i1, __int_type __i2,
-40039:        memory_order __m = memory_order_seq_cst) noexcept
-40039:       {
-40039:  return compare_exchange_weak(__i1, __i2, __m,
-40039:          __cmpexch_failure_order(__m));
-40039:       }
-40039: 
-40039:       inline __attribute__((__always_inline__)) bool
-40039:       compare_exchange_weak(__int_type& __i1, __int_type __i2,
-40039:      memory_order __m = memory_order_seq_cst) volatile noexcept
-40039:       {
-40039:  return compare_exchange_weak(__i1, __i2, __m,
-40039:          __cmpexch_failure_order(__m));
-40039:       }
-40039: 
-40039:       inline __attribute__((__always_inline__)) bool
-40039:       compare_exchange_strong(__int_type& __i1, __int_type __i2,
-40039:          memory_order __m1, memory_order __m2) noexcept
-40039:       {
-40039:  memory_order __b2 = __m2 & __memory_order_mask;
-40039:  memory_order __b1 = __m1 & __memory_order_mask;
-40039:  ;
-40039:  ;
-40039:  ;
-40039: 
-40039:  return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, __m1, __m2);
-40039:       }
-40039: 
-40039:       inline __attribute__((__always_inline__)) bool
-40039:       compare_exchange_strong(__int_type& __i1, __int_type __i2,
-40039:          memory_order __m1,
-40039:          memory_order __m2) volatile noexcept
-40039:       {
-40039:  memory_order __b2 = __m2 & __memory_order_mask;
-40039:  memory_order __b1 = __m1 & __memory_order_mask;
-40039: 
-40039:  ;
-40039:  ;
-40039:  ;
-40039: 
-40039:  return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, __m1, __m2);
-40039:       }
-40039: 
-40039:       inline __attribute__((__always_inline__)) bool
-40039:       compare_exchange_strong(__int_type& __i1, __int_type __i2,
-40039:          memory_order __m = memory_order_seq_cst) noexcept
-40039:       {
-40039:  return compare_exchange_strong(__i1, __i2, __m,
-40039:            __cmpexch_failure_order(__m));
-40039:       }
-40039: 
-40039:       inline __attribute__((__always_inline__)) bool
-40039:       compare_exchange_strong(__int_type& __i1, __int_type __i2,
-40039:    memory_order __m = memory_order_seq_cst) volatile noexcept
-40039:       {
-40039:  return compare_exchange_strong(__i1, __i2, __m,
-40039:            __cmpexch_failure_order(__m));
-40039:       }
-40039: 
-40039:       inline __attribute__((__always_inline__)) __int_type
-40039:       fetch_add(__int_type __i,
-40039:   memory_order __m = memory_order_seq_cst) noexcept
-40039:       { return __atomic_fetch_add(&_M_i, __i, __m); }
-40039: 
-40039:       inline __attribute__((__always_inline__)) __int_type
-40039:       fetch_add(__int_type __i,
-40039:   memory_order __m = memory_order_seq_cst) volatile noexcept
-40039:       { return __atomic_fetch_add(&_M_i, __i, __m); }
-40039: 
-40039:       inline __attribute__((__always_inline__)) __int_type
-40039:       fetch_sub(__int_type __i,
-40039:   memory_order __m = memory_order_seq_cst) noexcept
-40039:       { return __atomic_fetch_sub(&_M_i, __i, __m); }
-40039: 
-40039:       inline __attribute__((__always_inline__)) __int_type
-40039:       fetch_sub(__int_type __i,
-40039:   memory_order __m = memory_order_seq_cst) volatile noexcept
-40039:       { return __atomic_fetch_sub(&_M_i, __i, __m); }
-40039: 
-40039:       inline __attribute__((__always_inline__)) __int_type
-40039:       fetch_and(__int_type __i,
-40039:   memory_order __m = memory_order_seq_cst) noexcept
-40039:       { return __atomic_fetch_and(&_M_i, __i, __m); }
-40039: 
-40039:       inline __attribute__((__always_inline__)) __int_type
-40039:       fetch_and(__int_type __i,
-40039:   memory_order __m = memory_order_seq_cst) volatile noexcept
-40039:       { return __atomic_fetch_and(&_M_i, __i, __m); }
-40039: 
-40039:       inline __attribute__((__always_inline__)) __int_type
-40039:       fetch_or(__int_type __i,
-40039:         memory_order __m = memory_order_seq_cst) noexcept
-40039:       { return __atomic_fetch_or(&_M_i, __i, __m); }
-40039: 
-40039:       inline __attribute__((__always_inline__)) __int_type
-40039:       fetch_or(__int_type __i,
-40039:         memory_order __m = memory_order_seq_cst) volatile noexcept
-40039:       { return __atomic_fetch_or(&_M_i, __i, __m); }
-40039: 
-40039:       inline __attribute__((__always_inline__)) __int_type
-40039:       fetch_xor(__int_type __i,
-40039:   memory_order __m = memory_order_seq_cst) noexcept
-40039:       { return __atomic_fetch_xor(&_M_i, __i, __m); }
-40039: 
-40039:       inline __attribute__((__always_inline__)) __int_type
-40039:       fetch_xor(__int_type __i,
-40039:   memory_order __m = memory_order_seq_cst) volatile noexcept
-40039:       { return __atomic_fetch_xor(&_M_i, __i, __m); }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _PTp>
-40039:     struct __atomic_base<_PTp*>
-40039:     {
-40039:     private:
-40039:       typedef _PTp* __pointer_type;
-40039: 
-40039:       __pointer_type _M_p;
-40039: 
-40039: 
-40039:       constexpr ptrdiff_t
-40039:       _M_type_size(ptrdiff_t __d) const { return __d * sizeof(_PTp); }
-40039: 
-40039:       constexpr ptrdiff_t
-40039:       _M_type_size(ptrdiff_t __d) const volatile { return __d * sizeof(_PTp); }
-40039: 
-40039:     public:
-40039:       __atomic_base() noexcept = default;
-40039:       ~__atomic_base() noexcept = default;
-40039:       __atomic_base(const __atomic_base&) = delete;
-40039:       __atomic_base& operator=(const __atomic_base&) = delete;
-40039:       __atomic_base& operator=(const __atomic_base&) volatile = delete;
-40039: 
-40039: 
-40039:       constexpr __atomic_base(__pointer_type __p) noexcept : _M_p (__p) { }
-40039: 
-40039:       operator __pointer_type() const noexcept
-40039:       { return load(); }
-40039: 
-40039:       operator __pointer_type() const volatile noexcept
-40039:       { return load(); }
-40039: 
-40039:       __pointer_type
-40039:       operator=(__pointer_type __p) noexcept
-40039:       {
-40039:  store(__p);
-40039:  return __p;
-40039:       }
-40039: 
-40039:       __pointer_type
-40039:       operator=(__pointer_type __p) volatile noexcept
-40039:       {
-40039:  store(__p);
-40039:  return __p;
-40039:       }
-40039: 
-40039:       __pointer_type
-40039:       operator++(int) noexcept
-40039:       { return fetch_add(1); }
-40039: 
-40039:       __pointer_type
-40039:       operator++(int) volatile noexcept
-40039:       { return fetch_add(1); }
-40039: 
-40039:       __pointer_type
-40039:       operator--(int) noexcept
-40039:       { return fetch_sub(1); }
-40039: 
-40039:       __pointer_type
-40039:       operator--(int) volatile noexcept
-40039:       { return fetch_sub(1); }
-40039: 
-40039:       __pointer_type
-40039:       operator++() noexcept
-40039:       { return __atomic_add_fetch(&_M_p, _M_type_size(1),
-40039:       memory_order_seq_cst); }
-40039: 
-40039:       __pointer_type
-40039:       operator++() volatile noexcept
-40039:       { return __atomic_add_fetch(&_M_p, _M_type_size(1),
-40039:       memory_order_seq_cst); }
-40039: 
-40039:       __pointer_type
-40039:       operator--() noexcept
-40039:       { return __atomic_sub_fetch(&_M_p, _M_type_size(1),
-40039:       memory_order_seq_cst); }
-40039: 
-40039:       __pointer_type
-40039:       operator--() volatile noexcept
-40039:       { return __atomic_sub_fetch(&_M_p, _M_type_size(1),
-40039:       memory_order_seq_cst); }
-40039: 
-40039:       __pointer_type
-40039:       operator+=(ptrdiff_t __d) noexcept
-40039:       { return __atomic_add_fetch(&_M_p, _M_type_size(__d),
-40039:       memory_order_seq_cst); }
-40039: 
-40039:       __pointer_type
-40039:       operator+=(ptrdiff_t __d) volatile noexcept
-40039:       { return __atomic_add_fetch(&_M_p, _M_type_size(__d),
-40039:       memory_order_seq_cst); }
-40039: 
-40039:       __pointer_type
-40039:       operator-=(ptrdiff_t __d) noexcept
-40039:       { return __atomic_sub_fetch(&_M_p, _M_type_size(__d),
-40039:       memory_order_seq_cst); }
-40039: 
-40039:       __pointer_type
-40039:       operator-=(ptrdiff_t __d) volatile noexcept
-40039:       { return __atomic_sub_fetch(&_M_p, _M_type_size(__d),
-40039:       memory_order_seq_cst); }
-40039: 
-40039:       bool
-40039:       is_lock_free() const noexcept
-40039:       {
-40039: 
-40039:  return __atomic_is_lock_free(sizeof(_M_p),
-40039:      reinterpret_cast<void *>(-__alignof(_M_p)));
-40039:       }
-40039: 
-40039:       bool
-40039:       is_lock_free() const volatile noexcept
-40039:       {
-40039: 
-40039:  return __atomic_is_lock_free(sizeof(_M_p),
-40039:      reinterpret_cast<void *>(-__alignof(_M_p)));
-40039:       }
-40039: 
-40039:       inline __attribute__((__always_inline__)) void
-40039:       store(__pointer_type __p,
-40039:      memory_order __m = memory_order_seq_cst) noexcept
-40039:       {
-40039:         memory_order __b = __m & __memory_order_mask;
-40039: 
-40039:  ;
-40039:  ;
-40039:  ;
-40039: 
-40039:  __atomic_store_n(&_M_p, __p, __m);
-40039:       }
-40039: 
-40039:       inline __attribute__((__always_inline__)) void
-40039:       store(__pointer_type __p,
-40039:      memory_order __m = memory_order_seq_cst) volatile noexcept
-40039:       {
-40039:  memory_order __b = __m & __memory_order_mask;
-40039:  ;
-40039:  ;
-40039:  ;
-40039: 
-40039:  __atomic_store_n(&_M_p, __p, __m);
-40039:       }
-40039: 
-40039:       inline __attribute__((__always_inline__)) __pointer_type
-40039:       load(memory_order __m = memory_order_seq_cst) const noexcept
-40039:       {
-40039:  memory_order __b = __m & __memory_order_mask;
-40039:  ;
-40039:  ;
-40039: 
-40039:  return __atomic_load_n(&_M_p, __m);
-40039:       }
-40039: 
-40039:       inline __attribute__((__always_inline__)) __pointer_type
-40039:       load(memory_order __m = memory_order_seq_cst) const volatile noexcept
-40039:       {
-40039:  memory_order __b = __m & __memory_order_mask;
-40039:  ;
-40039:  ;
-40039: 
-40039:  return __atomic_load_n(&_M_p, __m);
-40039:       }
-40039: 
-40039:       inline __attribute__((__always_inline__)) __pointer_type
-40039:       exchange(__pointer_type __p,
-40039:         memory_order __m = memory_order_seq_cst) noexcept
-40039:       {
-40039:  return __atomic_exchange_n(&_M_p, __p, __m);
-40039:       }
-40039: 
-40039: 
-40039:       inline __attribute__((__always_inline__)) __pointer_type
-40039:       exchange(__pointer_type __p,
-40039:         memory_order __m = memory_order_seq_cst) volatile noexcept
-40039:       {
-40039:  return __atomic_exchange_n(&_M_p, __p, __m);
-40039:       }
-40039: 
-40039:       inline __attribute__((__always_inline__)) bool
-40039:       compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
-40039:          memory_order __m1,
-40039:          memory_order __m2) noexcept
-40039:       {
-40039:  memory_order __b2 = __m2 & __memory_order_mask;
-40039:  memory_order __b1 = __m1 & __memory_order_mask;
-40039:  ;
-40039:  ;
-40039:  ;
-40039: 
-40039:  return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, __m1, __m2);
-40039:       }
-40039: 
-40039:       inline __attribute__((__always_inline__)) bool
-40039:       compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
-40039:          memory_order __m1,
-40039:          memory_order __m2) volatile noexcept
-40039:       {
-40039:  memory_order __b2 = __m2 & __memory_order_mask;
-40039:  memory_order __b1 = __m1 & __memory_order_mask;
-40039: 
-40039:  ;
-40039:  ;
-40039:  ;
-40039: 
-40039:  return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, __m1, __m2);
-40039:       }
-40039: 
-40039:       inline __attribute__((__always_inline__)) __pointer_type
-40039:       fetch_add(ptrdiff_t __d,
-40039:   memory_order __m = memory_order_seq_cst) noexcept
-40039:       { return __atomic_fetch_add(&_M_p, _M_type_size(__d), __m); }
-40039: 
-40039:       inline __attribute__((__always_inline__)) __pointer_type
-40039:       fetch_add(ptrdiff_t __d,
-40039:   memory_order __m = memory_order_seq_cst) volatile noexcept
-40039:       { return __atomic_fetch_add(&_M_p, _M_type_size(__d), __m); }
-40039: 
-40039:       inline __attribute__((__always_inline__)) __pointer_type
-40039:       fetch_sub(ptrdiff_t __d,
-40039:   memory_order __m = memory_order_seq_cst) noexcept
-40039:       { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), __m); }
-40039: 
-40039:       inline __attribute__((__always_inline__)) __pointer_type
-40039:       fetch_sub(ptrdiff_t __d,
-40039:   memory_order __m = memory_order_seq_cst) volatile noexcept
-40039:       { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), __m); }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 34 "/usr/include/c++/8/bits/shared_ptr_atomic.h" 2 3
-40039: 
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   struct _Sp_locker
-40039:   {
-40039:     _Sp_locker(const _Sp_locker&) = delete;
-40039:     _Sp_locker& operator=(const _Sp_locker&) = delete;
-40039: 
-40039: 
-40039:     explicit
-40039:     _Sp_locker(const void*) noexcept;
-40039:     _Sp_locker(const void*, const void*) noexcept;
-40039:     ~_Sp_locker();
-40039: 
-40039:   private:
-40039:     unsigned char _M_key1;
-40039:     unsigned char _M_key2;
-40039: 
-40039: 
-40039: 
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline bool
-40039:     atomic_is_lock_free(const __shared_ptr<_Tp, _Lp>* __p)
-40039:     {
-40039: 
-40039:       return __gthread_active_p() == 0;
-40039: 
-40039: 
-40039: 
-40039:     }
-40039: 
-40039:   template<typename _Tp>
-40039:     inline bool
-40039:     atomic_is_lock_free(const shared_ptr<_Tp>* __p)
-40039:     { return std::atomic_is_lock_free<_Tp, __default_lock_policy>(__p); }
-40039: # 96 "/usr/include/c++/8/bits/shared_ptr_atomic.h" 3
-40039:   template<typename _Tp>
-40039:     inline shared_ptr<_Tp>
-40039:     atomic_load_explicit(const shared_ptr<_Tp>* __p, memory_order)
-40039:     {
-40039:       _Sp_locker __lock{__p};
-40039:       return *__p;
-40039:     }
-40039: 
-40039:   template<typename _Tp>
-40039:     inline shared_ptr<_Tp>
-40039:     atomic_load(const shared_ptr<_Tp>* __p)
-40039:     { return std::atomic_load_explicit(__p, memory_order_seq_cst); }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline __shared_ptr<_Tp, _Lp>
-40039:     atomic_load_explicit(const __shared_ptr<_Tp, _Lp>* __p, memory_order)
-40039:     {
-40039:       _Sp_locker __lock{__p};
-40039:       return *__p;
-40039:     }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline __shared_ptr<_Tp, _Lp>
-40039:     atomic_load(const __shared_ptr<_Tp, _Lp>* __p)
-40039:     { return std::atomic_load_explicit(__p, memory_order_seq_cst); }
-40039: # 132 "/usr/include/c++/8/bits/shared_ptr_atomic.h" 3
-40039:   template<typename _Tp>
-40039:     inline void
-40039:     atomic_store_explicit(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r,
-40039:      memory_order)
-40039:     {
-40039:       _Sp_locker __lock{__p};
-40039:       __p->swap(__r);
-40039:     }
-40039: 
-40039:   template<typename _Tp>
-40039:     inline void
-40039:     atomic_store(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r)
-40039:     { std::atomic_store_explicit(__p, std::move(__r), memory_order_seq_cst); }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline void
-40039:     atomic_store_explicit(__shared_ptr<_Tp, _Lp>* __p,
-40039:      __shared_ptr<_Tp, _Lp> __r,
-40039:      memory_order)
-40039:     {
-40039:       _Sp_locker __lock{__p};
-40039:       __p->swap(__r);
-40039:     }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline void
-40039:     atomic_store(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp> __r)
-40039:     { std::atomic_store_explicit(__p, std::move(__r), memory_order_seq_cst); }
-40039: # 169 "/usr/include/c++/8/bits/shared_ptr_atomic.h" 3
-40039:   template<typename _Tp>
-40039:     inline shared_ptr<_Tp>
-40039:     atomic_exchange_explicit(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r,
-40039:         memory_order)
-40039:     {
-40039:       _Sp_locker __lock{__p};
-40039:       __p->swap(__r);
-40039:       return __r;
-40039:     }
-40039: 
-40039:   template<typename _Tp>
-40039:     inline shared_ptr<_Tp>
-40039:     atomic_exchange(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r)
-40039:     {
-40039:       return std::atomic_exchange_explicit(__p, std::move(__r),
-40039:         memory_order_seq_cst);
-40039:     }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline __shared_ptr<_Tp, _Lp>
-40039:     atomic_exchange_explicit(__shared_ptr<_Tp, _Lp>* __p,
-40039:         __shared_ptr<_Tp, _Lp> __r,
-40039:         memory_order)
-40039:     {
-40039:       _Sp_locker __lock{__p};
-40039:       __p->swap(__r);
-40039:       return __r;
-40039:     }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline __shared_ptr<_Tp, _Lp>
-40039:     atomic_exchange(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp> __r)
-40039:     {
-40039:       return std::atomic_exchange_explicit(__p, std::move(__r),
-40039:         memory_order_seq_cst);
-40039:     }
-40039: # 218 "/usr/include/c++/8/bits/shared_ptr_atomic.h" 3
-40039:   template<typename _Tp>
-40039:     bool
-40039:     atomic_compare_exchange_strong_explicit(shared_ptr<_Tp>* __p,
-40039:          shared_ptr<_Tp>* __v,
-40039:          shared_ptr<_Tp> __w,
-40039:          memory_order,
-40039:          memory_order)
-40039:     {
-40039:       shared_ptr<_Tp> __x;
-40039:       _Sp_locker __lock{__p, __v};
-40039:       owner_less<shared_ptr<_Tp>> __less;
-40039:       if (*__p == *__v && !__less(*__p, *__v) && !__less(*__v, *__p))
-40039:  {
-40039:    __x = std::move(*__p);
-40039:    *__p = std::move(__w);
-40039:    return true;
-40039:  }
-40039:       __x = std::move(*__v);
-40039:       *__v = *__p;
-40039:       return false;
-40039:     }
-40039: 
-40039:   template<typename _Tp>
-40039:     inline bool
-40039:     atomic_compare_exchange_strong(shared_ptr<_Tp>* __p, shared_ptr<_Tp>* __v,
-40039:      shared_ptr<_Tp> __w)
-40039:     {
-40039:       return std::atomic_compare_exchange_strong_explicit(__p, __v,
-40039:    std::move(__w), memory_order_seq_cst, memory_order_seq_cst);
-40039:     }
-40039: 
-40039:   template<typename _Tp>
-40039:     inline bool
-40039:     atomic_compare_exchange_weak_explicit(shared_ptr<_Tp>* __p,
-40039:        shared_ptr<_Tp>* __v,
-40039:        shared_ptr<_Tp> __w,
-40039:        memory_order __success,
-40039:        memory_order __failure)
-40039:     {
-40039:       return std::atomic_compare_exchange_strong_explicit(__p, __v,
-40039:    std::move(__w), __success, __failure);
-40039:     }
-40039: 
-40039:   template<typename _Tp>
-40039:     inline bool
-40039:     atomic_compare_exchange_weak(shared_ptr<_Tp>* __p, shared_ptr<_Tp>* __v,
-40039:      shared_ptr<_Tp> __w)
-40039:     {
-40039:       return std::atomic_compare_exchange_weak_explicit(__p, __v,
-40039:    std::move(__w), memory_order_seq_cst, memory_order_seq_cst);
-40039:     }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     bool
-40039:     atomic_compare_exchange_strong_explicit(__shared_ptr<_Tp, _Lp>* __p,
-40039:          __shared_ptr<_Tp, _Lp>* __v,
-40039:          __shared_ptr<_Tp, _Lp> __w,
-40039:          memory_order,
-40039:          memory_order)
-40039:     {
-40039:       __shared_ptr<_Tp, _Lp> __x;
-40039:       _Sp_locker __lock{__p, __v};
-40039:       owner_less<__shared_ptr<_Tp, _Lp>> __less;
-40039:       if (*__p == *__v && !__less(*__p, *__v) && !__less(*__v, *__p))
-40039:  {
-40039:    __x = std::move(*__p);
-40039:    *__p = std::move(__w);
-40039:    return true;
-40039:  }
-40039:       __x = std::move(*__v);
-40039:       *__v = *__p;
-40039:       return false;
-40039:     }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline bool
-40039:     atomic_compare_exchange_strong(__shared_ptr<_Tp, _Lp>* __p,
-40039:        __shared_ptr<_Tp, _Lp>* __v,
-40039:        __shared_ptr<_Tp, _Lp> __w)
-40039:     {
-40039:       return std::atomic_compare_exchange_strong_explicit(__p, __v,
-40039:    std::move(__w), memory_order_seq_cst, memory_order_seq_cst);
-40039:     }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline bool
-40039:     atomic_compare_exchange_weak_explicit(__shared_ptr<_Tp, _Lp>* __p,
-40039:        __shared_ptr<_Tp, _Lp>* __v,
-40039:        __shared_ptr<_Tp, _Lp> __w,
-40039:        memory_order __success,
-40039:        memory_order __failure)
-40039:     {
-40039:       return std::atomic_compare_exchange_strong_explicit(__p, __v,
-40039:    std::move(__w), __success, __failure);
-40039:     }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:     inline bool
-40039:     atomic_compare_exchange_weak(__shared_ptr<_Tp, _Lp>* __p,
-40039:      __shared_ptr<_Tp, _Lp>* __v,
-40039:      __shared_ptr<_Tp, _Lp> __w)
-40039:     {
-40039:       return std::atomic_compare_exchange_weak_explicit(__p, __v,
-40039:    std::move(__w), memory_order_seq_cst, memory_order_seq_cst);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 83 "/usr/include/c++/8/memory" 2 3
-40039: 
-40039: # 1 "/usr/include/c++/8/backward/auto_ptr.h" 1 3
-40039: # 36 "/usr/include/c++/8/backward/auto_ptr.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 47 "/usr/include/c++/8/backward/auto_ptr.h" 3
-40039:   template<typename _Tp1>
-40039:     struct auto_ptr_ref
-40039:     {
-40039:       _Tp1* _M_ptr;
-40039: 
-40039:       explicit
-40039:       auto_ptr_ref(_Tp1* __p): _M_ptr(__p) { }
-40039:     } __attribute__ ((__deprecated__));
-40039: 
-40039: #pragma GCC diagnostic push
-40039: #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-40039: # 88 "/usr/include/c++/8/backward/auto_ptr.h" 3
-40039:   template<typename _Tp>
-40039:     class auto_ptr
-40039:     {
-40039:     private:
-40039:       _Tp* _M_ptr;
-40039: 
-40039:     public:
-40039: 
-40039:       typedef _Tp element_type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       explicit
-40039:       auto_ptr(element_type* __p = 0) throw() : _M_ptr(__p) { }
-40039: # 114 "/usr/include/c++/8/backward/auto_ptr.h" 3
-40039:       auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) { }
-40039: # 126 "/usr/include/c++/8/backward/auto_ptr.h" 3
-40039:       template<typename _Tp1>
-40039:         auto_ptr(auto_ptr<_Tp1>& __a) throw() : _M_ptr(__a.release()) { }
-40039: # 137 "/usr/include/c++/8/backward/auto_ptr.h" 3
-40039:       auto_ptr&
-40039:       operator=(auto_ptr& __a) throw()
-40039:       {
-40039:  reset(__a.release());
-40039:  return *this;
-40039:       }
-40039: # 154 "/usr/include/c++/8/backward/auto_ptr.h" 3
-40039:       template<typename _Tp1>
-40039:         auto_ptr&
-40039:         operator=(auto_ptr<_Tp1>& __a) throw()
-40039:         {
-40039:    reset(__a.release());
-40039:    return *this;
-40039:  }
-40039: # 172 "/usr/include/c++/8/backward/auto_ptr.h" 3
-40039:       ~auto_ptr() { delete _M_ptr; }
-40039: # 182 "/usr/include/c++/8/backward/auto_ptr.h" 3
-40039:       element_type&
-40039:       operator*() const throw()
-40039:       {
-40039:  ;
-40039:  return *_M_ptr;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       element_type*
-40039:       operator->() const throw()
-40039:       {
-40039:  ;
-40039:  return _M_ptr;
-40039:       }
-40039: # 212 "/usr/include/c++/8/backward/auto_ptr.h" 3
-40039:       element_type*
-40039:       get() const throw() { return _M_ptr; }
-40039: # 226 "/usr/include/c++/8/backward/auto_ptr.h" 3
-40039:       element_type*
-40039:       release() throw()
-40039:       {
-40039:  element_type* __tmp = _M_ptr;
-40039:  _M_ptr = 0;
-40039:  return __tmp;
-40039:       }
-40039: # 241 "/usr/include/c++/8/backward/auto_ptr.h" 3
-40039:       void
-40039:       reset(element_type* __p = 0) throw()
-40039:       {
-40039:  if (__p != _M_ptr)
-40039:    {
-40039:      delete _M_ptr;
-40039:      _M_ptr = __p;
-40039:    }
-40039:       }
-40039: # 266 "/usr/include/c++/8/backward/auto_ptr.h" 3
-40039:       auto_ptr(auto_ptr_ref<element_type> __ref) throw()
-40039:       : _M_ptr(__ref._M_ptr) { }
-40039: 
-40039:       auto_ptr&
-40039:       operator=(auto_ptr_ref<element_type> __ref) throw()
-40039:       {
-40039:  if (__ref._M_ptr != this->get())
-40039:    {
-40039:      delete _M_ptr;
-40039:      _M_ptr = __ref._M_ptr;
-40039:    }
-40039:  return *this;
-40039:       }
-40039: 
-40039:       template<typename _Tp1>
-40039:         operator auto_ptr_ref<_Tp1>() throw()
-40039:         { return auto_ptr_ref<_Tp1>(this->release()); }
-40039: 
-40039:       template<typename _Tp1>
-40039:         operator auto_ptr<_Tp1>() throw()
-40039:         { return auto_ptr<_Tp1>(this->release()); }
-40039:     } __attribute__ ((__deprecated__));
-40039: 
-40039: 
-40039: 
-40039:   template<>
-40039:     class auto_ptr<void>
-40039:     {
-40039:     public:
-40039:       typedef void element_type;
-40039:     } __attribute__ ((__deprecated__));
-40039: 
-40039: 
-40039:   template<_Lock_policy _Lp>
-40039:   template<typename _Tp>
-40039:     inline
-40039:     __shared_count<_Lp>::__shared_count(std::auto_ptr<_Tp>&& __r)
-40039:     : _M_pi(new _Sp_counted_ptr<_Tp*, _Lp>(__r.get()))
-40039:     { __r.release(); }
-40039: 
-40039:   template<typename _Tp, _Lock_policy _Lp>
-40039:   template<typename _Tp1, typename>
-40039:     inline
-40039:     __shared_ptr<_Tp, _Lp>::__shared_ptr(std::auto_ptr<_Tp1>&& __r)
-40039:     : _M_ptr(__r.get()), _M_refcount()
-40039:     {
-40039:      
-40039:       static_assert( sizeof(_Tp1) > 0, "incomplete type" );
-40039:       _Tp1* __tmp = __r.get();
-40039:       _M_refcount = __shared_count<_Lp>(std::move(__r));
-40039:       _M_enable_shared_from_this_with(__tmp);
-40039:     }
-40039: 
-40039:   template<typename _Tp>
-40039:   template<typename _Tp1, typename>
-40039:     inline
-40039:     shared_ptr<_Tp>::shared_ptr(std::auto_ptr<_Tp1>&& __r)
-40039:     : __shared_ptr<_Tp>(std::move(__r)) { }
-40039: 
-40039:   template<typename _Tp, typename _Dp>
-40039:   template<typename _Up, typename>
-40039:     inline
-40039:     unique_ptr<_Tp, _Dp>::unique_ptr(auto_ptr<_Up>&& __u) noexcept
-40039:     : _M_t(__u.release(), deleter_type()) { }
-40039: 
-40039: 
-40039: #pragma GCC diagnostic pop
-40039: 
-40039: 
-40039: }
-40039: # 85 "/usr/include/c++/8/memory" 2 3
-40039: # 93 "/usr/include/c++/8/memory" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 113 "/usr/include/c++/8/memory" 3
-40039: inline void*
-40039: align(size_t __align, size_t __size, void*& __ptr, size_t& __space) noexcept
-40039: {
-40039:   const auto __intptr = reinterpret_cast<uintptr_t>(__ptr);
-40039:   const auto __aligned = (__intptr - 1u + __align) & -__align;
-40039:   const auto __diff = __aligned - __intptr;
-40039:   if ((__size + __diff) > __space)
-40039:     return nullptr;
-40039:   else
-40039:     {
-40039:       __space -= __diff;
-40039:       return __ptr = reinterpret_cast<void*>(__aligned);
-40039:     }
-40039: }
-40039: 
-40039: 
-40039: 
-40039: enum class pointer_safety { relaxed, preferred, strict };
-40039: 
-40039: inline void
-40039: declare_reachable(void*) { }
-40039: 
-40039: template <typename _Tp>
-40039:   inline _Tp*
-40039:   undeclare_reachable(_Tp* __p) { return __p; }
-40039: 
-40039: inline void
-40039: declare_no_pointers(char*, size_t) { }
-40039: 
-40039: inline void
-40039: undeclare_no_pointers(char*, size_t) { }
-40039: 
-40039: inline pointer_safety
-40039: get_pointer_safety() noexcept { return pointer_safety::relaxed; }
-40039: 
-40039: 
-40039: }
-40039: # 34 "../../src/Dense_Row_defs.hh" 2
-40039: # 42 "../../src/Dense_Row_defs.hh"
-40039: 
-40039: # 42 "../../src/Dense_Row_defs.hh"
-40039: class Parma_Polyhedra_Library::Dense_Row {
-40039: public:
-40039:   class iterator;
-40039:   class const_iterator;
-40039: 
-40039: 
-40039:   Dense_Row();
-40039: 
-40039:   explicit Dense_Row(const Sparse_Row& row);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Dense_Row(dimension_type sz);
-40039: # 69 "../../src/Dense_Row_defs.hh"
-40039:   Dense_Row(dimension_type sz, dimension_type capacity);
-40039: 
-40039: 
-40039:   Dense_Row(const Dense_Row& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Dense_Row(const Dense_Row& y, dimension_type capacity);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Dense_Row(const Dense_Row& y, dimension_type sz, dimension_type capacity);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Dense_Row(const Sparse_Row& y, dimension_type sz, dimension_type capacity);
-40039: 
-40039: 
-40039:   ~Dense_Row();
-40039: 
-40039: 
-40039:   Dense_Row& operator=(const Dense_Row& y);
-40039: 
-40039: 
-40039:   Dense_Row& operator=(const Sparse_Row& y);
-40039: 
-40039: 
-40039:   void m_swap(Dense_Row& y);
-40039: 
-40039: 
-40039:   void resize(dimension_type sz);
-40039: 
-40039: 
-40039:   void resize(dimension_type sz, dimension_type capacity);
-40039: 
-40039: 
-40039:   void clear();
-40039: # 127 "../../src/Dense_Row_defs.hh"
-40039:   void add_zeroes_and_shift(dimension_type n, dimension_type i);
-40039: # 136 "../../src/Dense_Row_defs.hh"
-40039:   void expand_within_capacity(dimension_type new_size);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void shrink(dimension_type new_size);
-40039: 
-40039: 
-40039:   static dimension_type max_size();
-40039: 
-40039: 
-40039:   dimension_type size() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Coefficient& operator[](dimension_type k);
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference operator[](dimension_type k) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void normalize();
-40039: 
-40039: 
-40039: 
-40039:   void swap_coefficients(dimension_type i, dimension_type j);
-40039: 
-40039: 
-40039: 
-40039:   void swap_coefficients(iterator i, iterator j);
-40039: 
-40039:   iterator begin();
-40039:   const_iterator begin() const;
-40039: 
-40039:   iterator end();
-40039:   const_iterator end() const;
-40039: 
-40039: 
-40039: 
-40039:   void reset(dimension_type i);
-40039: 
-40039: 
-40039: 
-40039:   void reset(dimension_type first, dimension_type last);
-40039: 
-40039: 
-40039: 
-40039:   iterator reset(iterator itr);
-40039: 
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference get(dimension_type i) const;
-40039: 
-40039: 
-40039:   iterator find(dimension_type i);
-40039: 
-40039: 
-40039:   const_iterator find(dimension_type i) const;
-40039: 
-40039: 
-40039:   iterator find(iterator itr, dimension_type i);
-40039: 
-40039: 
-40039:   const_iterator find(const_iterator itr, dimension_type i) const;
-40039: 
-40039: 
-40039:   iterator lower_bound(dimension_type i);
-40039: 
-40039: 
-40039:   const_iterator lower_bound(dimension_type i) const;
-40039: 
-40039: 
-40039:   iterator lower_bound(iterator itr, dimension_type i);
-40039: 
-40039: 
-40039:   const_iterator lower_bound(const_iterator itr, dimension_type i) const;
-40039: 
-40039: 
-40039:   iterator insert(dimension_type i, Coefficient_traits::const_reference x);
-40039: 
-40039: 
-40039:   iterator insert(dimension_type i);
-40039: 
-40039: 
-40039:   iterator insert(iterator itr, dimension_type i,
-40039:                        Coefficient_traits::const_reference x);
-40039: 
-40039: 
-40039:   iterator insert(iterator itr, dimension_type i);
-40039: # 258 "../../src/Dense_Row_defs.hh"
-40039:   template <typename Func1, typename Func2>
-40039:   void combine_needs_first(const Dense_Row& y,
-40039:                            const Func1& f, const Func2& g);
-40039: # 286 "../../src/Dense_Row_defs.hh"
-40039:   template <typename Func1, typename Func2>
-40039:   void combine_needs_second(const Dense_Row& y,
-40039:                             const Func1& g, const Func2& h);
-40039: # 318 "../../src/Dense_Row_defs.hh"
-40039:   template <typename Func1, typename Func2, typename Func3>
-40039:   void combine(const Dense_Row& y,
-40039:                const Func1& f, const Func2& g, const Func3& h);
-40039: # 342 "../../src/Dense_Row_defs.hh"
-40039:   void linear_combine(const Dense_Row& y,
-40039:                       Coefficient_traits::const_reference coeff1,
-40039:                       Coefficient_traits::const_reference coeff2);
-40039: # 354 "../../src/Dense_Row_defs.hh"
-40039:   void linear_combine(const Dense_Row& y,
-40039:                       Coefficient_traits::const_reference c1,
-40039:                       Coefficient_traits::const_reference c2,
-40039:                       dimension_type start, dimension_type end);
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes(dimension_type capacity) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes(dimension_type capacity) const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool OK(dimension_type row_size) const;
-40039: 
-40039: private:
-40039:   void init(const Sparse_Row& row);
-40039: 
-40039:   void destroy();
-40039: 
-40039:   struct Impl {
-40039: 
-40039:     Impl();
-40039: 
-40039:     ~Impl();
-40039: 
-40039: 
-40039:     dimension_type size;
-40039: 
-40039: 
-40039:     dimension_type capacity;
-40039: 
-40039: 
-40039:     std::allocator<Coefficient> coeff_allocator;
-40039: 
-40039: 
-40039: 
-40039:     Coefficient* vec;
-40039:   };
-40039: 
-40039:   Impl impl;
-40039: 
-40039: 
-40039:   dimension_type capacity() const;
-40039: };
-40039: 
-40039: class Parma_Polyhedra_Library::Dense_Row::iterator {
-40039: public:
-40039: 
-40039:   typedef std::bidirectional_iterator_tag iterator_category;
-40039:   typedef Coefficient value_type;
-40039:   typedef std::ptrdiff_t difference_type;
-40039:   typedef value_type* pointer;
-40039:   typedef value_type& reference;
-40039: 
-40039:   iterator();
-40039:   iterator(Dense_Row& r, dimension_type i);
-40039: 
-40039:   Coefficient& operator*();
-40039:   Coefficient_traits::const_reference operator*() const;
-40039: # 454 "../../src/Dense_Row_defs.hh"
-40039:   dimension_type index() const;
-40039: 
-40039:   iterator& operator++();
-40039:   iterator operator++(int);
-40039: 
-40039:   iterator& operator--();
-40039:   iterator operator--(int);
-40039: 
-40039:   bool operator==(const iterator& x) const;
-40039:   bool operator!=(const iterator& x) const;
-40039: 
-40039:   operator const_iterator() const;
-40039: 
-40039:   bool OK() const;
-40039: 
-40039: private:
-40039:   Dense_Row* row;
-40039:   dimension_type idx;
-40039: };
-40039: 
-40039: class Parma_Polyhedra_Library::Dense_Row::const_iterator {
-40039: public:
-40039: 
-40039:   typedef const Coefficient value_type;
-40039:   typedef std::ptrdiff_t difference_type;
-40039:   typedef value_type* pointer;
-40039:   typedef Coefficient_traits::const_reference reference;
-40039: 
-40039:   const_iterator();
-40039:   const_iterator(const Dense_Row& r, dimension_type i);
-40039: 
-40039:   Coefficient_traits::const_reference operator*() const;
-40039: # 494 "../../src/Dense_Row_defs.hh"
-40039:   dimension_type index() const;
-40039: 
-40039:   const_iterator& operator++();
-40039:   const_iterator operator++(int);
-40039: 
-40039:   const_iterator& operator--();
-40039:   const_iterator operator--(int);
-40039: 
-40039:   bool operator==(const const_iterator& x) const;
-40039:   bool operator!=(const const_iterator& x) const;
-40039: 
-40039:   bool OK() const;
-40039: 
-40039: private:
-40039:   const Dense_Row* row;
-40039:   dimension_type idx;
-40039: };
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: void swap(Dense_Row& x, Dense_Row& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: void iter_swap(std::vector<Dense_Row>::iterator x,
-40039:                std::vector<Dense_Row>::iterator y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: bool operator==(const Dense_Row& x, const Dense_Row& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: bool operator!=(const Dense_Row& x, const Dense_Row& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: void linear_combine(Dense_Row& x, const Dense_Row& y,
-40039:                     Coefficient_traits::const_reference coeff1,
-40039:                     Coefficient_traits::const_reference coeff2);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: void linear_combine(Dense_Row& x, const Dense_Row& y,
-40039:                     Coefficient_traits::const_reference c1,
-40039:                     Coefficient_traits::const_reference c2,
-40039:                     dimension_type start, dimension_type end);
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Dense_Row_inlines.hh" 1
-40039: # 32 "../../src/Dense_Row_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline
-40039: Dense_Row::Impl::Impl()
-40039:   : size(0), capacity(0), coeff_allocator(), vec(0) {
-40039: }
-40039: 
-40039: inline
-40039: Dense_Row::Impl::~Impl() {
-40039:   while (size != 0) {
-40039:     --size;
-40039:     vec[size].~Coefficient();
-40039:   }
-40039:   coeff_allocator.deallocate(vec, capacity);
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Dense_Row::max_size() {
-40039:   return std::numeric_limits<size_t>::max() / sizeof(Coefficient);
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Dense_Row::size() const {
-40039:   return impl.size;
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Dense_Row::capacity() const {
-40039:   return impl.capacity;
-40039: }
-40039: 
-40039: inline
-40039: Dense_Row::Dense_Row()
-40039:   : impl() {
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Dense_Row::Dense_Row(const dimension_type sz,
-40039:                      const dimension_type capacity)
-40039:   : impl() {
-40039: 
-40039:   resize(sz, capacity);
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Dense_Row::Dense_Row(const dimension_type sz)
-40039:   : impl() {
-40039: 
-40039:   resize(sz);
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Dense_Row::Dense_Row(const Dense_Row& y)
-40039:   : impl() {
-40039:   impl.coeff_allocator = y.impl.coeff_allocator;
-40039:   if (y.impl.vec != 0) {
-40039:     impl.capacity = y.capacity();
-40039:     impl.vec = impl.coeff_allocator.allocate(impl.capacity);
-40039:     while (impl.size != y.size()) {
-40039:       new(&impl.vec[impl.size]) Coefficient(y[impl.size]);
-40039:       ++impl.size;
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Dense_Row::Dense_Row(const Dense_Row& y,
-40039:                      const dimension_type capacity)
-40039:   : impl() {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039:   impl.capacity = capacity;
-40039:   impl.coeff_allocator = y.impl.coeff_allocator;
-40039:   impl.vec = impl.coeff_allocator.allocate(impl.capacity);
-40039: 
-40039:   if (y.impl.vec != 0) {
-40039:     while (impl.size != y.size()) {
-40039:       new(&impl.vec[impl.size]) Coefficient(y[impl.size]);
-40039:       ++impl.size;
-40039:     }
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Dense_Row::Dense_Row(const Dense_Row& y,
-40039:                      const dimension_type sz,
-40039:                      const dimension_type capacity)
-40039:   : impl() {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039:   impl.capacity = capacity;
-40039:   impl.coeff_allocator = y.impl.coeff_allocator;
-40039:   impl.vec = impl.coeff_allocator.allocate(impl.capacity);
-40039: 
-40039:   const dimension_type n = std::min(sz, y.size());
-40039:   while (impl.size != n) {
-40039:     new(&impl.vec[impl.size]) Coefficient(y[impl.size]);
-40039:     ++impl.size;
-40039:   }
-40039:   while (impl.size != sz) {
-40039:     new(&impl.vec[impl.size]) Coefficient();
-40039:     ++impl.size;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Dense_Row::~Dense_Row() {
-40039: 
-40039: }
-40039: 
-40039: inline void
-40039: Dense_Row::destroy() {
-40039:   resize(0);
-40039:   impl.coeff_allocator.deallocate(impl.vec, impl.capacity);
-40039: }
-40039: 
-40039: inline void
-40039: Dense_Row::m_swap(Dense_Row& y) {
-40039:   using std::swap;
-40039:   swap(impl.size, y.impl.size);
-40039:   swap(impl.capacity, y.impl.capacity);
-40039:   swap(impl.coeff_allocator, y.impl.coeff_allocator);
-40039:   swap(impl.vec, y.impl.vec);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline Dense_Row&
-40039: Dense_Row::operator=(const Dense_Row& y) {
-40039: 
-40039:   if (this != &y && size() == y.size()) {
-40039: 
-40039: 
-40039:     for (dimension_type i = size(); i-- > 0; ) {
-40039:       (*this)[i] = y[i];
-40039:     }
-40039: 
-40039:     return *this;
-40039:   }
-40039: 
-40039:   Dense_Row x(y);
-40039:   swap(*this, x);
-40039: 
-40039:   return *this;
-40039: }
-40039: 
-40039: inline Coefficient&
-40039: Dense_Row::operator[](const dimension_type k) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   return impl.vec[k];
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: Dense_Row::operator[](const dimension_type k) const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   return impl.vec[k];
-40039: }
-40039: 
-40039: inline void
-40039: Dense_Row::swap_coefficients(dimension_type i, dimension_type j) {
-40039:   std::swap((*this)[i], (*this)[j]);
-40039: }
-40039: 
-40039: inline void
-40039: Dense_Row::swap_coefficients(iterator i, iterator j) {
-40039:   std::swap(*i, *j);
-40039: }
-40039: 
-40039: inline void
-40039: Dense_Row::reset(dimension_type i) {
-40039:   (*this)[i] = 0;
-40039: }
-40039: 
-40039: inline Dense_Row::iterator
-40039: Dense_Row::reset(iterator itr) {
-40039:   *itr = 0;
-40039:   ++itr;
-40039:   return itr;
-40039: }
-40039: 
-40039: inline Dense_Row::iterator
-40039: Dense_Row::begin() {
-40039:   return iterator(*this, 0);
-40039: }
-40039: 
-40039: inline Dense_Row::const_iterator
-40039: Dense_Row::begin() const {
-40039:   return const_iterator(*this, 0);
-40039: }
-40039: 
-40039: inline Dense_Row::iterator
-40039: Dense_Row::end() {
-40039:   return iterator(*this, size());
-40039: }
-40039: 
-40039: inline Dense_Row::const_iterator
-40039: Dense_Row::end() const {
-40039:   return const_iterator(*this, size());
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: Dense_Row::get(dimension_type i) const {
-40039:   return (*this)[i];
-40039: }
-40039: 
-40039: inline Dense_Row::iterator
-40039: Dense_Row::find(dimension_type i) {
-40039:   return iterator(*this, i);
-40039: }
-40039: 
-40039: inline Dense_Row::const_iterator
-40039: Dense_Row::find(dimension_type i) const {
-40039:   return const_iterator(*this, i);
-40039: }
-40039: 
-40039: inline Dense_Row::iterator
-40039: Dense_Row::find(iterator itr, dimension_type i) {
-40039:   (void)itr;
-40039:   return iterator(*this, i);
-40039: }
-40039: 
-40039: inline Dense_Row::const_iterator
-40039: Dense_Row::find(const_iterator itr, dimension_type i) const {
-40039:   (void)itr;
-40039:   return const_iterator(*this, i);
-40039: }
-40039: 
-40039: inline Dense_Row::iterator
-40039: Dense_Row::lower_bound(dimension_type i) {
-40039:   return find(i);
-40039: }
-40039: 
-40039: inline Dense_Row::const_iterator
-40039: Dense_Row::lower_bound(dimension_type i) const {
-40039:   return find(i);
-40039: }
-40039: 
-40039: inline Dense_Row::iterator
-40039: Dense_Row::lower_bound(iterator itr, dimension_type i) {
-40039:   return find(itr, i);
-40039: }
-40039: 
-40039: inline Dense_Row::const_iterator
-40039: Dense_Row::lower_bound(const_iterator itr, dimension_type i) const {
-40039:   return find(itr, i);
-40039: }
-40039: 
-40039: inline Dense_Row::iterator
-40039: Dense_Row::insert(dimension_type i,
-40039:                   Coefficient_traits::const_reference x) {
-40039:   (*this)[i] = x;
-40039:   return find(i);
-40039: }
-40039: 
-40039: inline Dense_Row::iterator
-40039: Dense_Row::insert(dimension_type i) {
-40039:   return find(i);
-40039: }
-40039: 
-40039: inline Dense_Row::iterator
-40039: Dense_Row::insert(iterator itr, dimension_type i,
-40039:                   Coefficient_traits::const_reference x) {
-40039:   (void)itr;
-40039:   (*this)[i] = x;
-40039:   return find(i);
-40039: }
-40039: 
-40039: inline Dense_Row::iterator
-40039: Dense_Row::insert(iterator itr, dimension_type i) {
-40039:   (void)itr;
-40039:   return find(i);
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Dense_Row::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Dense_Row::total_memory_in_bytes(dimension_type capacity) const {
-40039:   return sizeof(*this) + external_memory_in_bytes(capacity);
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: operator!=(const Dense_Row& x, const Dense_Row& y) {
-40039:   return !(x == y);
-40039: }
-40039: 
-40039: 
-40039: inline
-40039: Dense_Row::iterator::iterator()
-40039:   : row(
-40039: # 349 "../../src/Dense_Row_inlines.hh" 3 4
-40039:        __null
-40039: # 349 "../../src/Dense_Row_inlines.hh"
-40039:            ), idx(0) {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Dense_Row::iterator::iterator(Dense_Row& r, dimension_type i)
-40039:   : row(&r), idx(i) {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline Coefficient&
-40039: Dense_Row::iterator::operator*() {
-40039:   ((void) 0);
-40039:   return (*row)[idx];
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: Dense_Row::iterator::operator*() const {
-40039:   ((void) 0);
-40039:   return (*row)[idx];
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Dense_Row::iterator::index() const {
-40039:   return idx;
-40039: }
-40039: 
-40039: inline Dense_Row::iterator&
-40039: Dense_Row::iterator::operator++() {
-40039:   ((void) 0);
-40039:   ++idx;
-40039:   ((void) 0);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline Dense_Row::iterator
-40039: Dense_Row::iterator::operator++(int) {
-40039:   iterator tmp(*this);
-40039:   ++(*this);
-40039:   return tmp;
-40039: }
-40039: 
-40039: inline Dense_Row::iterator&
-40039: Dense_Row::iterator::operator--() {
-40039:   ((void) 0);
-40039:   --idx;
-40039:   ((void) 0);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline Dense_Row::iterator
-40039: Dense_Row::iterator::operator--(int) {
-40039:   iterator tmp(*this);
-40039:   --(*this);
-40039:   return tmp;
-40039: }
-40039: 
-40039: inline bool
-40039: Dense_Row::iterator::operator==(const iterator& x) const {
-40039:   return (row == x.row) && (idx == x.idx);
-40039: }
-40039: 
-40039: inline bool
-40039: Dense_Row::iterator::operator!=(const iterator& x) const {
-40039:   return !(*this == x);
-40039: }
-40039: 
-40039: inline
-40039: Dense_Row::iterator::operator const_iterator() const {
-40039:   return const_iterator(*row, idx);
-40039: }
-40039: 
-40039: inline bool
-40039: Dense_Row::iterator::OK() const {
-40039:   if (row == 
-40039: # 423 "../../src/Dense_Row_inlines.hh" 3 4
-40039:             __null
-40039: # 423 "../../src/Dense_Row_inlines.hh"
-40039:                 ) {
-40039:     return true;
-40039:   }
-40039: 
-40039:   return (idx <= row->size());
-40039: }
-40039: 
-40039: 
-40039: inline
-40039: Dense_Row::const_iterator::const_iterator()
-40039:   : row(
-40039: # 433 "../../src/Dense_Row_inlines.hh" 3 4
-40039:        __null
-40039: # 433 "../../src/Dense_Row_inlines.hh"
-40039:            ), idx(0) {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Dense_Row::const_iterator::const_iterator(const Dense_Row& r,
-40039:                                           dimension_type i)
-40039:   : row(&r), idx(i) {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: Dense_Row::const_iterator::operator*() const {
-40039:   ((void) 0);
-40039:   return (*row)[idx];
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Dense_Row::const_iterator::index() const {
-40039:   return idx;
-40039: }
-40039: 
-40039: inline Dense_Row::const_iterator&
-40039: Dense_Row::const_iterator::operator++() {
-40039:   ((void) 0);
-40039:   ++idx;
-40039:   ((void) 0);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline Dense_Row::const_iterator
-40039: Dense_Row::const_iterator::operator++(int) {
-40039:   const_iterator tmp(*this);
-40039:   ++(*this);
-40039:   return tmp;
-40039: }
-40039: 
-40039: inline Dense_Row::const_iterator&
-40039: Dense_Row::const_iterator::operator--() {
-40039:   ((void) 0);
-40039:   --idx;
-40039:   ((void) 0);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline Dense_Row::const_iterator
-40039: Dense_Row::const_iterator::operator--(int) {
-40039:   const_iterator tmp(*this);
-40039:   --(*this);
-40039:   return tmp;
-40039: }
-40039: 
-40039: inline bool
-40039: Dense_Row::const_iterator::operator==(const const_iterator& x) const {
-40039:   return (row == x.row) && (idx == x.idx);
-40039: }
-40039: 
-40039: inline bool
-40039: Dense_Row::const_iterator::operator!=(const const_iterator& x) const {
-40039:   return !(*this == x);
-40039: }
-40039: 
-40039: inline bool
-40039: Dense_Row::const_iterator::OK() const {
-40039:   if (row == 
-40039: # 497 "../../src/Dense_Row_inlines.hh" 3 4
-40039:             __null
-40039: # 497 "../../src/Dense_Row_inlines.hh"
-40039:                 ) {
-40039:     return true;
-40039:   }
-40039: 
-40039:   return (idx <= row->size());
-40039: }
-40039: 
-40039: inline void
-40039: linear_combine(Dense_Row& x, const Dense_Row& y,
-40039:                Coefficient_traits::const_reference coeff1,
-40039:                Coefficient_traits::const_reference coeff2) {
-40039:   x.linear_combine(y, coeff1, coeff2);
-40039: }
-40039: 
-40039: inline void
-40039: linear_combine(Dense_Row& x, const Dense_Row& y,
-40039:                Coefficient_traits::const_reference c1,
-40039:                Coefficient_traits::const_reference c2,
-40039:                dimension_type start, dimension_type end) {
-40039:   x.linear_combine(y, c1, c2, start, end);
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: swap(Dense_Row& x, Dense_Row& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: iter_swap(std::vector<Dense_Row>::iterator x,
-40039:           std::vector<Dense_Row>::iterator y) {
-40039:   swap(*x, *y);
-40039: }
-40039: 
-40039: }
-40039: # 560 "../../src/Dense_Row_defs.hh" 2
-40039: # 1 "../../src/Dense_Row_templates.hh" 1
-40039: # 27 "../../src/Dense_Row_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: template <typename Func1, typename Func2>
-40039: void
-40039: Dense_Row::combine_needs_first(const Dense_Row& y, const Func1& ,
-40039:                                const Func2& g) {
-40039:   for (dimension_type i = size(); i-- > 0; ) {
-40039:     g((*this)[i], y[i]);
-40039:   }
-40039: }
-40039: 
-40039: template <typename Func1, typename Func2>
-40039: void
-40039: Dense_Row::combine_needs_second(const Dense_Row& y, const Func1& g,
-40039:                                 const Func2& ) {
-40039:   for (dimension_type i = size(); i-- > 0; ) {
-40039:     g((*this)[i], y[i]);
-40039:   }
-40039: }
-40039: 
-40039: template <typename Func1, typename Func2, typename Func3>
-40039: void
-40039: Dense_Row::combine(const Dense_Row& y, const Func1& , const Func2& g,
-40039:                    const Func3& ) {
-40039:   for (dimension_type i = size(); i-- > 0; ) {
-40039:     g((*this)[i], y[i]);
-40039:   }
-40039: }
-40039: 
-40039: }
-40039: # 561 "../../src/Dense_Row_defs.hh" 2
-40039: # 33 "../../src/Linear_Expression_Impl_defs.hh" 2
-40039: # 1 "../../src/Sparse_Row_defs.hh" 1
-40039: # 29 "../../src/Sparse_Row_defs.hh"
-40039: # 1 "../../src/CO_Tree_defs.hh" 1
-40039: # 27 "../../src/CO_Tree_defs.hh"
-40039: # 1 "../../src/CO_Tree_types.hh" 1
-40039: # 16 "../../src/CO_Tree_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class CO_Tree;
-40039: 
-40039: }
-40039: # 28 "../../src/CO_Tree_defs.hh" 2
-40039: # 53 "../../src/CO_Tree_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: # 103 "../../src/CO_Tree_defs.hh"
-40039: class CO_Tree {
-40039: 
-40039: public:
-40039:   class const_iterator;
-40039:   class iterator;
-40039: 
-40039: private:
-40039: 
-40039:   typedef unsigned height_t;
-40039: 
-40039:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_115 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(C_Integer<height_t>::max >= ((sizeof(dimension_type)) * static_cast<std::size_t>(8)))>) }
-40039: 
-40039:                                                                   ;
-40039: 
-40039:   class tree_iterator;
-40039: # 128 "../../src/CO_Tree_defs.hh"
-40039:   dimension_type dfs_index(const_iterator itr) const;
-40039: # 139 "../../src/CO_Tree_defs.hh"
-40039:   dimension_type dfs_index(iterator itr) const;
-40039: 
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef Coefficient data_type;
-40039:   typedef Coefficient_traits::const_reference data_type_const_reference;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   class const_iterator {
-40039:   private:
-40039:   public:
-40039: 
-40039:     typedef std::bidirectional_iterator_tag iterator_category;
-40039:     typedef const data_type value_type;
-40039:     typedef std::ptrdiff_t difference_type;
-40039:     typedef value_type* pointer;
-40039:     typedef data_type_const_reference reference;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     explicit const_iterator();
-40039: # 180 "../../src/CO_Tree_defs.hh"
-40039:     explicit const_iterator(const CO_Tree& tree);
-40039: # 195 "../../src/CO_Tree_defs.hh"
-40039:     const_iterator(const CO_Tree& tree, dimension_type i);
-40039: # 204 "../../src/CO_Tree_defs.hh"
-40039:     const_iterator(const const_iterator& itr);
-40039: # 213 "../../src/CO_Tree_defs.hh"
-40039:     const_iterator(const iterator& itr);
-40039: # 222 "../../src/CO_Tree_defs.hh"
-40039:     void m_swap(const_iterator& itr);
-40039: # 231 "../../src/CO_Tree_defs.hh"
-40039:     const_iterator& operator=(const const_iterator& itr);
-40039: # 240 "../../src/CO_Tree_defs.hh"
-40039:     const_iterator& operator=(const iterator& itr);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     const_iterator& operator++();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     const_iterator& operator--();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     const_iterator operator++(int);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     const_iterator operator--(int);
-40039: 
-40039: 
-40039:     data_type_const_reference operator*() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     dimension_type index() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     bool operator==(const const_iterator& x) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     bool operator!=(const const_iterator& x) const;
-40039: 
-40039:   private:
-40039: 
-40039:     bool OK() const;
-40039: 
-40039: 
-40039:     const dimension_type* current_index;
-40039: 
-40039: 
-40039:     const data_type* current_data;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     friend dimension_type CO_Tree::dfs_index(const_iterator itr) const;
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   class iterator {
-40039:   public:
-40039: 
-40039:     typedef std::bidirectional_iterator_tag iterator_category;
-40039:     typedef data_type value_type;
-40039:     typedef std::ptrdiff_t difference_type;
-40039:     typedef value_type* pointer;
-40039:     typedef value_type& reference;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     iterator();
-40039: # 335 "../../src/CO_Tree_defs.hh"
-40039:     explicit iterator(CO_Tree& tree);
-40039: # 350 "../../src/CO_Tree_defs.hh"
-40039:     iterator(CO_Tree& tree, dimension_type i);
-40039: # 362 "../../src/CO_Tree_defs.hh"
-40039:     explicit iterator(const tree_iterator& itr);
-40039: # 371 "../../src/CO_Tree_defs.hh"
-40039:     iterator(const iterator& itr);
-40039: # 380 "../../src/CO_Tree_defs.hh"
-40039:     void m_swap(iterator& itr);
-40039: # 389 "../../src/CO_Tree_defs.hh"
-40039:     iterator& operator=(const iterator& itr);
-40039: # 398 "../../src/CO_Tree_defs.hh"
-40039:     iterator& operator=(const tree_iterator& itr);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     iterator& operator++();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     iterator& operator--();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     iterator operator++(int);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     iterator operator--(int);
-40039: 
-40039: 
-40039:     data_type& operator*();
-40039: 
-40039: 
-40039:     data_type_const_reference operator*() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     dimension_type index() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     bool operator==(const iterator& x) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     bool operator!=(const iterator& x) const;
-40039: 
-40039:   private:
-40039: 
-40039:     bool OK() const;
-40039: 
-40039: 
-40039:     const dimension_type* current_index;
-40039: 
-40039: 
-40039:     data_type* current_data;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     friend const_iterator& const_iterator::operator=(const iterator&);
-40039:     friend dimension_type CO_Tree::dfs_index(iterator itr) const;
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   CO_Tree();
-40039: # 482 "../../src/CO_Tree_defs.hh"
-40039:   CO_Tree(const CO_Tree& y);
-40039: # 501 "../../src/CO_Tree_defs.hh"
-40039:   template <typename Iterator>
-40039:   CO_Tree(Iterator i, dimension_type n);
-40039: # 511 "../../src/CO_Tree_defs.hh"
-40039:   CO_Tree& operator=(const CO_Tree& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void clear();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   ~CO_Tree();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool empty() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type size() const;
-40039: 
-40039: 
-40039:   static dimension_type max_size();
-40039: 
-40039: 
-40039:   void dump_tree() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type external_memory_in_bytes() const;
-40039: # 566 "../../src/CO_Tree_defs.hh"
-40039:   iterator insert(dimension_type key);
-40039: # 587 "../../src/CO_Tree_defs.hh"
-40039:   iterator insert(dimension_type key, data_type_const_reference data);
-40039: # 615 "../../src/CO_Tree_defs.hh"
-40039:   iterator insert(iterator itr, dimension_type key);
-40039: # 645 "../../src/CO_Tree_defs.hh"
-40039:   iterator insert(iterator itr, dimension_type key,
-40039:                   data_type_const_reference data);
-40039: # 661 "../../src/CO_Tree_defs.hh"
-40039:   iterator erase(dimension_type key);
-40039: # 676 "../../src/CO_Tree_defs.hh"
-40039:   iterator erase(iterator itr);
-40039: # 690 "../../src/CO_Tree_defs.hh"
-40039:   void erase_element_and_shift_left(dimension_type key);
-40039: # 703 "../../src/CO_Tree_defs.hh"
-40039:   void increase_keys_from(dimension_type key, dimension_type n);
-40039: # 712 "../../src/CO_Tree_defs.hh"
-40039:   void fast_shift(dimension_type i, iterator itr);
-40039: # 723 "../../src/CO_Tree_defs.hh"
-40039:   void m_swap(CO_Tree& x);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   iterator begin();
-40039: # 740 "../../src/CO_Tree_defs.hh"
-40039:   const iterator& end();
-40039: 
-40039: 
-40039:   const_iterator begin() const;
-40039: 
-40039: 
-40039:   const const_iterator& end() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const_iterator cbegin() const;
-40039: # 763 "../../src/CO_Tree_defs.hh"
-40039:   const const_iterator& cend() const;
-40039: # 777 "../../src/CO_Tree_defs.hh"
-40039:   iterator bisect(dimension_type key);
-40039: # 791 "../../src/CO_Tree_defs.hh"
-40039:   const_iterator bisect(dimension_type key) const;
-40039: # 815 "../../src/CO_Tree_defs.hh"
-40039:   iterator bisect_in(iterator first, iterator last, dimension_type key);
-40039: # 839 "../../src/CO_Tree_defs.hh"
-40039:   const_iterator bisect_in(const_iterator first, const_iterator last,
-40039:                            dimension_type key) const;
-40039: # 860 "../../src/CO_Tree_defs.hh"
-40039:   iterator bisect_near(iterator hint, dimension_type key);
-40039: # 880 "../../src/CO_Tree_defs.hh"
-40039:   const_iterator bisect_near(const_iterator hint, dimension_type key) const;
-40039: 
-40039: private:
-40039: # 905 "../../src/CO_Tree_defs.hh"
-40039:   dimension_type bisect_in(dimension_type first, dimension_type last,
-40039:                            dimension_type key) const;
-40039: # 929 "../../src/CO_Tree_defs.hh"
-40039:   dimension_type bisect_near(dimension_type hint, dimension_type key) const;
-40039: # 954 "../../src/CO_Tree_defs.hh"
-40039:   tree_iterator insert_precise(dimension_type key,
-40039:                                data_type_const_reference data,
-40039:                                tree_iterator itr);
-40039: # 965 "../../src/CO_Tree_defs.hh"
-40039:   tree_iterator insert_precise_aux(dimension_type key,
-40039:                                    data_type_const_reference data,
-40039:                                    tree_iterator itr);
-40039: # 984 "../../src/CO_Tree_defs.hh"
-40039:   void insert_in_empty_tree(dimension_type key,
-40039:                             data_type_const_reference data);
-40039: # 1000 "../../src/CO_Tree_defs.hh"
-40039:   iterator erase(tree_iterator itr);
-40039: # 1009 "../../src/CO_Tree_defs.hh"
-40039:   void init(dimension_type n);
-40039: # 1018 "../../src/CO_Tree_defs.hh"
-40039:   void destroy();
-40039: 
-40039: 
-40039:   bool structure_OK() const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: # 1033 "../../src/CO_Tree_defs.hh"
-40039:   static unsigned integer_log2(dimension_type n);
-40039: # 1051 "../../src/CO_Tree_defs.hh"
-40039:   static bool is_less_than_ratio(dimension_type numer, dimension_type denom,
-40039:                                  dimension_type ratio);
-40039: # 1071 "../../src/CO_Tree_defs.hh"
-40039:   static bool is_greater_than_ratio(dimension_type numer, dimension_type denom,
-40039:                                     dimension_type ratio);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static void dump_subtree(tree_iterator itr);
-40039: # 1088 "../../src/CO_Tree_defs.hh"
-40039:   void rebuild_bigger_tree();
-40039: # 1100 "../../src/CO_Tree_defs.hh"
-40039:   void rebuild_smaller_tree();
-40039: # 1109 "../../src/CO_Tree_defs.hh"
-40039:   void refresh_cached_iterators();
-40039: # 1133 "../../src/CO_Tree_defs.hh"
-40039:   tree_iterator rebalance(tree_iterator itr, dimension_type key,
-40039:                           data_type_const_reference value);
-40039: # 1160 "../../src/CO_Tree_defs.hh"
-40039:   dimension_type compact_elements_in_the_rightmost_end(
-40039:     dimension_type last_in_subtree, dimension_type subtree_size,
-40039:     dimension_type key, data_type_const_reference value,
-40039:     bool add_element);
-40039: # 1191 "../../src/CO_Tree_defs.hh"
-40039:   void redistribute_elements_in_subtree(dimension_type root_index,
-40039:                                         dimension_type subtree_size,
-40039:                                         dimension_type last_used,
-40039:                                         dimension_type key,
-40039:                                         data_type_const_reference value,
-40039:                                         bool add_element);
-40039: # 1208 "../../src/CO_Tree_defs.hh"
-40039:   void move_data_from(CO_Tree& tree);
-40039: # 1221 "../../src/CO_Tree_defs.hh"
-40039:   void copy_data_from(const CO_Tree& tree);
-40039: # 1231 "../../src/CO_Tree_defs.hh"
-40039:   static dimension_type count_used_in_subtree(tree_iterator itr);
-40039: # 1249 "../../src/CO_Tree_defs.hh"
-40039:   static void move_data_element(data_type& to, data_type& from);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const dimension_type max_density_percent = 91;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const dimension_type min_density_percent = 38;
-40039: # 1271 "../../src/CO_Tree_defs.hh"
-40039:   static const dimension_type min_leaf_density_percent = 1;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const dimension_type unused_index = C_Integer<dimension_type>::max;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   iterator cached_end;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const_iterator cached_const_end;
-40039: 
-40039: 
-40039:   height_t max_depth;
-40039: # 1302 "../../src/CO_Tree_defs.hh"
-40039:   dimension_type* indexes;
-40039: 
-40039: 
-40039:   std::allocator<data_type> data_allocator;
-40039: # 1316 "../../src/CO_Tree_defs.hh"
-40039:   data_type* data;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type reserved_size;
-40039: 
-40039: 
-40039:   dimension_type size_;
-40039: };
-40039: 
-40039: class CO_Tree::tree_iterator {
-40039: 
-40039: public:
-40039: # 1341 "../../src/CO_Tree_defs.hh"
-40039:   explicit tree_iterator(CO_Tree& tree);
-40039: # 1353 "../../src/CO_Tree_defs.hh"
-40039:   tree_iterator(CO_Tree& tree, dimension_type i);
-40039: # 1365 "../../src/CO_Tree_defs.hh"
-40039:   tree_iterator(const iterator& itr, CO_Tree& tree);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   tree_iterator& operator=(const tree_iterator& itr);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   tree_iterator& operator=(const iterator& itr);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool operator==(const tree_iterator& itr) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool operator!=(const tree_iterator& itr) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void get_root();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void get_left_child();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void get_right_child();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void get_parent();
-40039: # 1433 "../../src/CO_Tree_defs.hh"
-40039:   void go_down_searching_key(dimension_type key);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void follow_left_children_with_value();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void follow_right_children_with_value();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_root() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_right_child() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_leaf() const;
-40039: 
-40039: 
-40039:   data_type& operator*();
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference operator*() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type& index();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type index() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type key() const;
-40039: 
-40039: 
-40039:   CO_Tree& tree;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type dfs_index() const;
-40039: # 1512 "../../src/CO_Tree_defs.hh"
-40039:   dimension_type get_offset() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   height_t depth() const;
-40039: 
-40039: private:
-40039: 
-40039:   bool OK() const;
-40039: 
-40039: 
-40039:   dimension_type i;
-40039: # 1534 "../../src/CO_Tree_defs.hh"
-40039:   dimension_type offset;
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: void swap(CO_Tree& x, CO_Tree& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: void swap(CO_Tree::const_iterator& x, CO_Tree::const_iterator& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: void swap(CO_Tree::iterator& x, CO_Tree::iterator& y);
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/CO_Tree_inlines.hh" 1
-40039: # 29 "../../src/CO_Tree_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline dimension_type
-40039: CO_Tree::dfs_index(const_iterator itr) const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   const std::ptrdiff_t index = itr.current_index - indexes;
-40039:   return static_cast<dimension_type>(index);
-40039: }
-40039: 
-40039: inline dimension_type
-40039: CO_Tree::dfs_index(iterator itr) const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   const std::ptrdiff_t index = itr.current_index - indexes;
-40039:   return static_cast<dimension_type>(index);
-40039: }
-40039: 
-40039: inline
-40039: CO_Tree::CO_Tree() {
-40039:   init(0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: CO_Tree::CO_Tree(const CO_Tree& y) {
-40039:   ((void) 0);
-40039:   data_allocator = y.data_allocator;
-40039:   init(y.reserved_size);
-40039:   copy_data_from(y);
-40039: }
-40039: 
-40039: inline CO_Tree&
-40039: CO_Tree::operator=(const CO_Tree& y) {
-40039:   if (this != &y) {
-40039:     destroy();
-40039:     data_allocator = y.data_allocator;
-40039:     init(y.reserved_size);
-40039:     copy_data_from(y);
-40039:   }
-40039:   return *this;
-40039: }
-40039: 
-40039: inline void
-40039: CO_Tree::clear() {
-40039:   *this = CO_Tree();
-40039: }
-40039: 
-40039: inline
-40039: CO_Tree::~CO_Tree() {
-40039: 
-40039:   destroy();
-40039: }
-40039: 
-40039: inline bool
-40039: CO_Tree::empty() const {
-40039:   return size_ == 0;
-40039: }
-40039: 
-40039: inline dimension_type
-40039: CO_Tree::size() const {
-40039:   return size_;
-40039: }
-40039: 
-40039: inline dimension_type
-40039: CO_Tree::max_size() {
-40039:   return C_Integer<dimension_type>::max/100;
-40039: }
-40039: 
-40039: inline void
-40039: CO_Tree::dump_tree() const {
-40039:   if (empty()) {
-40039:     std::cout << "(empty tree)" << std::endl;
-40039:   }
-40039:   else {
-40039:     dump_subtree(tree_iterator(*const_cast<CO_Tree*>(this)));
-40039:   }
-40039: }
-40039: 
-40039: inline CO_Tree::iterator
-40039: CO_Tree::insert(const dimension_type key) {
-40039:   if (empty()) {
-40039:     return insert(key, Coefficient_zero());
-40039:   }
-40039:   else {
-40039:     tree_iterator itr(*this);
-40039:     itr.go_down_searching_key(key);
-40039:     if (itr.index() == key) {
-40039:       return iterator(itr);
-40039:     }
-40039:     else {
-40039:       return iterator(insert_precise(key, Coefficient_zero(), itr));
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: inline CO_Tree::iterator
-40039: CO_Tree::insert(dimension_type key, data_type_const_reference data1) {
-40039:   if (empty()) {
-40039:     insert_in_empty_tree(key, data1);
-40039:     tree_iterator itr(*this);
-40039:     ((void) 0);
-40039:     return iterator(itr);
-40039:   }
-40039:   else {
-40039:     tree_iterator itr(*this);
-40039:     itr.go_down_searching_key(key);
-40039:     return iterator(insert_precise(key, data1, itr));
-40039:   }
-40039: }
-40039: 
-40039: inline CO_Tree::iterator
-40039: CO_Tree::erase(dimension_type key) {
-40039:   ((void) 0);
-40039: 
-40039:   if (empty()) {
-40039:     return end();
-40039:   }
-40039: 
-40039:   tree_iterator itr(*this);
-40039:   itr.go_down_searching_key(key);
-40039: 
-40039:   if (itr.index() == key) {
-40039:     return erase(itr);
-40039:   }
-40039: 
-40039:   iterator result(itr);
-40039:   if (result.index() < key) {
-40039:     ++result;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   return result;
-40039: }
-40039: 
-40039: inline CO_Tree::iterator
-40039: CO_Tree::erase(iterator itr) {
-40039:   ((void) 0);
-40039:   return erase(tree_iterator(itr, *this));
-40039: }
-40039: 
-40039: inline void
-40039: CO_Tree::m_swap(CO_Tree& x) {
-40039:   using std::swap;
-40039:   swap(max_depth, x.max_depth);
-40039:   swap(indexes, x.indexes);
-40039:   swap(data_allocator, x.data_allocator);
-40039:   swap(data, x.data);
-40039:   swap(reserved_size, x.reserved_size);
-40039:   swap(size_, x.size_);
-40039: 
-40039: 
-40039:   refresh_cached_iterators();
-40039:   x.refresh_cached_iterators();
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline CO_Tree::iterator
-40039: CO_Tree::begin() {
-40039:   return iterator(*this);
-40039: }
-40039: 
-40039: inline const CO_Tree::iterator&
-40039: CO_Tree::end() {
-40039:   return cached_end;
-40039: }
-40039: 
-40039: inline CO_Tree::const_iterator
-40039: CO_Tree::begin() const {
-40039:   return const_iterator(*this);
-40039: }
-40039: 
-40039: inline const CO_Tree::const_iterator&
-40039: CO_Tree::end() const {
-40039:   return cached_const_end;
-40039: }
-40039: 
-40039: inline CO_Tree::const_iterator
-40039: CO_Tree::cbegin() const {
-40039:   return const_iterator(*this);
-40039: }
-40039: 
-40039: inline const CO_Tree::const_iterator&
-40039: CO_Tree::cend() const {
-40039:   return cached_const_end;
-40039: }
-40039: 
-40039: inline CO_Tree::iterator
-40039: CO_Tree::bisect(dimension_type key) {
-40039:   if (empty()) {
-40039:     return end();
-40039:   }
-40039:   iterator last = end();
-40039:   --last;
-40039:   return bisect_in(begin(), last, key);
-40039: }
-40039: 
-40039: inline CO_Tree::const_iterator
-40039: CO_Tree::bisect(dimension_type key) const {
-40039:   if (empty()) {
-40039:     return end();
-40039:   }
-40039:   const_iterator last = end();
-40039:   --last;
-40039:   return bisect_in(begin(), last, key);
-40039: }
-40039: 
-40039: inline CO_Tree::iterator
-40039: CO_Tree::bisect_in(iterator first, iterator last, dimension_type key) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   const dimension_type index
-40039:     = bisect_in(dfs_index(first), dfs_index(last), key);
-40039:   return iterator(*this, index);
-40039: }
-40039: 
-40039: inline CO_Tree::const_iterator
-40039: CO_Tree::bisect_in(const_iterator first, const_iterator last,
-40039:                    dimension_type key) const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   const dimension_type index
-40039:     = bisect_in(dfs_index(first), dfs_index(last), key);
-40039:   return const_iterator(*this, index);
-40039: }
-40039: 
-40039: inline CO_Tree::iterator
-40039: CO_Tree::bisect_near(iterator hint, dimension_type key) {
-40039:   if (hint == end()) {
-40039:     return bisect(key);
-40039:   }
-40039:   const dimension_type index
-40039:     = bisect_near(dfs_index(hint), key);
-40039:   return iterator(*this, index);
-40039: }
-40039: 
-40039: inline CO_Tree::const_iterator
-40039: CO_Tree::bisect_near(const_iterator hint, dimension_type key) const {
-40039:   if (hint == end()) {
-40039:     return bisect(key);
-40039:   }
-40039:   const dimension_type index = bisect_near(dfs_index(hint), key);
-40039:   return const_iterator(*this, index);
-40039: }
-40039: 
-40039: inline void
-40039: CO_Tree::fast_shift(dimension_type i, iterator itr) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   indexes[dfs_index(itr)] = i;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline void
-40039: CO_Tree::insert_in_empty_tree(dimension_type key,
-40039:                               data_type_const_reference data1) {
-40039:   ((void) 0);
-40039:   rebuild_bigger_tree();
-40039:   tree_iterator itr(*this);
-40039:   ((void) 0);
-40039:   new(&(*itr)) data_type(data1);
-40039: 
-40039: 
-40039:   itr.index() = key;
-40039:   ++size_;
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline bool
-40039: CO_Tree::is_less_than_ratio(dimension_type numer, dimension_type denom,
-40039:                             dimension_type ratio) {
-40039:   ((void) 0);
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   return 100*numer < ratio*denom;
-40039: }
-40039: 
-40039: inline bool
-40039: CO_Tree::is_greater_than_ratio(dimension_type numer, dimension_type denom,
-40039:                                dimension_type ratio) {
-40039:   ((void) 0);
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   return 100*numer > ratio*denom;
-40039: }
-40039: 
-40039: inline void
-40039: CO_Tree::rebuild_smaller_tree() {
-40039:   ((void) 0);
-40039:   CO_Tree new_tree;
-40039:   new_tree.init(reserved_size / 2);
-40039:   new_tree.move_data_from(*this);
-40039:   m_swap(new_tree);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline void
-40039: CO_Tree::refresh_cached_iterators() {
-40039:   cached_end = iterator(*this, reserved_size + 1);
-40039:   cached_const_end = const_iterator(*this, reserved_size + 1);
-40039: }
-40039: 
-40039: inline void
-40039: CO_Tree::move_data_element(data_type& to, data_type& from) {
-40039: # 354 "../../src/CO_Tree_inlines.hh"
-40039:   std::memcpy(&to, &from, sizeof(data_type));
-40039: }
-40039: 
-40039: 
-40039: inline
-40039: CO_Tree::const_iterator::const_iterator()
-40039:   : current_index(0), current_data(0) {
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: CO_Tree::const_iterator::const_iterator(const CO_Tree& tree1)
-40039:   : current_index(&(tree1.indexes[1])), current_data(&(tree1.data[1])) {
-40039: 
-40039: 
-40039: 
-40039:   if (!tree1.empty()) {
-40039:     while (*current_index == unused_index) {
-40039:       ++current_index;
-40039:       ++current_data;
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: CO_Tree::const_iterator::const_iterator(const CO_Tree& tree1,
-40039:                                         dimension_type i)
-40039:   : current_index(&(tree1.indexes[i])), current_data(&(tree1.data[i])) {
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: CO_Tree::const_iterator::const_iterator(const const_iterator& itr2) {
-40039:   (*this) = itr2;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: CO_Tree::const_iterator::const_iterator(const iterator& itr2) {
-40039:   (*this) = itr2;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline void
-40039: CO_Tree::const_iterator::m_swap(const_iterator& itr) {
-40039:   using std::swap;
-40039:   swap(current_data, itr.current_data);
-40039:   swap(current_index, itr.current_index);
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline CO_Tree::const_iterator&
-40039: CO_Tree::const_iterator::operator=(const const_iterator& itr2) {
-40039:   current_index = itr2.current_index;
-40039:   current_data = itr2.current_data;
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline CO_Tree::const_iterator&
-40039: CO_Tree::const_iterator::operator=(const iterator& itr2) {
-40039:   current_index = itr2.current_index;
-40039:   current_data = itr2.current_data;
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline CO_Tree::const_iterator&
-40039: CO_Tree::const_iterator::operator++() {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:   ++current_index;
-40039:   ++current_data;
-40039:   while (*current_index == unused_index) {
-40039:     ++current_index;
-40039:     ++current_data;
-40039:   }
-40039:   ((void) 0);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline CO_Tree::const_iterator&
-40039: CO_Tree::const_iterator::operator--() {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   --current_index;
-40039:   --current_data;
-40039:   while (*current_index == unused_index) {
-40039:     --current_index;
-40039:     --current_data;
-40039:   }
-40039:   ((void) 0);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline CO_Tree::const_iterator
-40039: CO_Tree::const_iterator::operator++(int) {
-40039:   const_iterator itr(*this);
-40039:   ++(*this);
-40039:   return itr;
-40039: }
-40039: 
-40039: inline CO_Tree::const_iterator
-40039: CO_Tree::const_iterator::operator--(int) {
-40039:   const_iterator itr(*this);
-40039:   --(*this);
-40039:   return itr;
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: CO_Tree::const_iterator::operator*() const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:   return *current_data;
-40039: }
-40039: 
-40039: inline dimension_type
-40039: CO_Tree::const_iterator::index() const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:   return *current_index;
-40039: }
-40039: 
-40039: inline bool
-40039: CO_Tree::const_iterator::operator==(const const_iterator& x) const {
-40039:   ((void) 0)
-40039:                                                  ;
-40039:   ((void) 0);
-40039:   return (current_index == x.current_index);
-40039: }
-40039: 
-40039: inline bool
-40039: CO_Tree::const_iterator::operator!=(const const_iterator& x) const {
-40039:   return !(*this == x);
-40039: }
-40039: 
-40039: 
-40039: inline
-40039: CO_Tree::iterator::iterator()
-40039:   : current_index(0), current_data(0) {
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: CO_Tree::iterator::iterator(CO_Tree& tree1)
-40039:   : current_index(&(tree1.indexes[1])), current_data(&(tree1.data[1])) {
-40039: 
-40039: 
-40039: 
-40039:   if (!tree1.empty()) {
-40039:     while (*current_index == unused_index) {
-40039:       ++current_index;
-40039:       ++current_data;
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: CO_Tree::iterator::iterator(CO_Tree& tree1, dimension_type i)
-40039:   : current_index(&(tree1.indexes[i])), current_data(&(tree1.data[i])) {
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: CO_Tree::iterator::iterator(const tree_iterator& itr) {
-40039:   *this = itr;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: CO_Tree::iterator::iterator(const iterator& itr2) {
-40039:   (*this) = itr2;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline void
-40039: CO_Tree::iterator::m_swap(iterator& itr) {
-40039:   using std::swap;
-40039:   swap(current_data, itr.current_data);
-40039:   swap(current_index, itr.current_index);
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline CO_Tree::iterator&
-40039: CO_Tree::iterator::operator=(const tree_iterator& itr) {
-40039:   current_index = &(itr.tree.indexes[itr.dfs_index()]);
-40039:   current_data = &(itr.tree.data[itr.dfs_index()]);
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline CO_Tree::iterator&
-40039: CO_Tree::iterator::operator=(const iterator& itr2) {
-40039:   current_index = itr2.current_index;
-40039:   current_data = itr2.current_data;
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline CO_Tree::iterator&
-40039: CO_Tree::iterator::operator++() {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:   ++current_index;
-40039:   ++current_data;
-40039:   while (*current_index == unused_index) {
-40039:     ++current_index;
-40039:     ++current_data;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline CO_Tree::iterator&
-40039: CO_Tree::iterator::operator--() {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   --current_index;
-40039:   --current_data;
-40039:   while (*current_index == unused_index) {
-40039:     --current_index;
-40039:     --current_data;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline CO_Tree::iterator
-40039: CO_Tree::iterator::operator++(int) {
-40039:   iterator itr(*this);
-40039:   ++(*this);
-40039:   return itr;
-40039: }
-40039: 
-40039: inline CO_Tree::iterator
-40039: CO_Tree::iterator::operator--(int) {
-40039:   iterator itr(*this);
-40039:   --(*this);
-40039:   return itr;
-40039: }
-40039: 
-40039: inline CO_Tree::data_type&
-40039: CO_Tree::iterator::operator*() {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:   return *current_data;
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: CO_Tree::iterator::operator*() const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:   return *current_data;
-40039: }
-40039: 
-40039: inline dimension_type
-40039: CO_Tree::iterator::index() const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:   return *current_index;
-40039: }
-40039: 
-40039: inline bool
-40039: CO_Tree::iterator::operator==(const iterator& x) const {
-40039:   ((void) 0)
-40039:                                                  ;
-40039:   ((void) 0);
-40039:   return (current_index == x.current_index);
-40039: }
-40039: 
-40039: inline bool
-40039: CO_Tree::iterator::operator!=(const iterator& x) const {
-40039:   return !(*this == x);
-40039: }
-40039: 
-40039: 
-40039: inline
-40039: CO_Tree::tree_iterator::tree_iterator(CO_Tree& tree1)
-40039:   : tree(tree1) {
-40039:   ((void) 0);
-40039:   get_root();
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: CO_Tree::tree_iterator::tree_iterator(CO_Tree& tree1, dimension_type i1)
-40039:   : tree(tree1) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   i = i1;
-40039:   offset = least_significant_one_mask(i);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: CO_Tree::tree_iterator::tree_iterator(const iterator& itr, CO_Tree& tree1)
-40039:   : tree(tree1) {
-40039:   ((void) 0);
-40039:   *this = itr;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline CO_Tree::tree_iterator&
-40039: CO_Tree::tree_iterator::operator=(const tree_iterator& itr) {
-40039:   ((void) 0);
-40039:   i = itr.i;
-40039:   offset = itr.offset;
-40039:   return *this;
-40039: }
-40039: 
-40039: inline CO_Tree::tree_iterator&
-40039: CO_Tree::tree_iterator::operator=(const iterator& itr) {
-40039:   ((void) 0);
-40039:   i = tree.dfs_index(itr);
-40039:   offset = least_significant_one_mask(i);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline bool
-40039: CO_Tree::tree_iterator::operator==(const tree_iterator& itr) const {
-40039:   return i == itr.i;
-40039: }
-40039: 
-40039: inline bool
-40039: CO_Tree::tree_iterator::operator!=(const tree_iterator& itr) const {
-40039:   return !(*this == itr);
-40039: }
-40039: 
-40039: inline void
-40039: CO_Tree::tree_iterator::get_root() {
-40039:   i = tree.reserved_size / 2 + 1;
-40039:   offset = i;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline void
-40039: CO_Tree::tree_iterator::get_left_child() {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   offset /= 2;
-40039:   i -= offset;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline void
-40039: CO_Tree::tree_iterator::get_right_child() {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   offset /= 2;
-40039:   i += offset;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline void
-40039: CO_Tree::tree_iterator::get_parent() {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   i &= ~offset;
-40039:   offset *= 2;
-40039:   i |= offset;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline void
-40039: CO_Tree::tree_iterator::follow_left_children_with_value() {
-40039:   ((void) 0);
-40039:   const dimension_type* p = tree.indexes;
-40039:   p += i;
-40039:   p -= (offset - 1);
-40039:   while (*p == unused_index) {
-40039:     ++p;
-40039:   }
-40039:   const std::ptrdiff_t distance = p - tree.indexes;
-40039:   ((void) 0);
-40039:   i = static_cast<dimension_type>(distance);
-40039:   offset = least_significant_one_mask(i);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline void
-40039: CO_Tree::tree_iterator::follow_right_children_with_value() {
-40039:   ((void) 0);
-40039:   const dimension_type* p = tree.indexes;
-40039:   p += i;
-40039:   p += (offset - 1);
-40039:   while (*p == unused_index) {
-40039:     --p;
-40039:   }
-40039:   const std::ptrdiff_t distance = p - tree.indexes;
-40039:   ((void) 0);
-40039:   i = static_cast<dimension_type>(distance);
-40039:   offset = least_significant_one_mask(i);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline bool
-40039: CO_Tree::tree_iterator::is_root() const {
-40039: 
-40039:   ((void) 0);
-40039:   return offset == (tree.reserved_size / 2 + 1);
-40039: }
-40039: 
-40039: inline bool
-40039: CO_Tree::tree_iterator::is_right_child() const {
-40039:   if (is_root()) {
-40039:     return false;
-40039:   }
-40039:   return (i & (2*offset)) != 0;
-40039: }
-40039: 
-40039: inline bool
-40039: CO_Tree::tree_iterator::is_leaf() const {
-40039:   return offset == 1;
-40039: }
-40039: 
-40039: inline CO_Tree::data_type&
-40039: CO_Tree::tree_iterator::operator*() {
-40039:   return tree.data[i];
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: CO_Tree::tree_iterator::operator*() const {
-40039:   return tree.data[i];
-40039: }
-40039: 
-40039: inline dimension_type&
-40039: CO_Tree::tree_iterator::index() {
-40039:   return tree.indexes[i];
-40039: }
-40039: 
-40039: inline dimension_type
-40039: CO_Tree::tree_iterator::index() const {
-40039:   return tree.indexes[i];
-40039: }
-40039: 
-40039: inline dimension_type
-40039: CO_Tree::tree_iterator::dfs_index() const {
-40039:   return i;
-40039: }
-40039: 
-40039: inline dimension_type
-40039: CO_Tree::tree_iterator::get_offset() const {
-40039:   return offset;
-40039: }
-40039: 
-40039: inline CO_Tree::height_t
-40039: CO_Tree::tree_iterator::depth() const {
-40039:   return integer_log2((tree.reserved_size + 1) / offset);
-40039: }
-40039: 
-40039: inline void
-40039: swap(CO_Tree& x, CO_Tree& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: inline void
-40039: swap(CO_Tree::const_iterator& x, CO_Tree::const_iterator& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: inline void
-40039: swap(CO_Tree::iterator& x, CO_Tree::iterator& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 1558 "../../src/CO_Tree_defs.hh" 2
-40039: # 1 "../../src/CO_Tree_templates.hh" 1
-40039: # 27 "../../src/CO_Tree_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Iterator>
-40039: CO_Tree::CO_Tree(Iterator i, dimension_type n) {
-40039: 
-40039:   if (n == 0) {
-40039:     init(0);
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039:   const dimension_type new_max_depth = integer_log2(n) + 1;
-40039:   reserved_size = (static_cast<dimension_type>(1) << new_max_depth) - 1;
-40039: 
-40039:   if (is_greater_than_ratio(n, reserved_size, max_density_percent)
-40039:       && reserved_size != 3) {
-40039:     reserved_size = reserved_size*2 + 1;
-40039:   }
-40039: 
-40039:   init(reserved_size);
-40039: 
-40039:   tree_iterator root(*this);
-40039: # 57 "../../src/CO_Tree_templates.hh"
-40039:   static std::pair<dimension_type, signed char>
-40039:     stack[4U * ((sizeof(dimension_type)) * static_cast<std::size_t>(8)) + 1U];
-40039: 
-40039:   dimension_type stack_first_empty = 0;
-40039: # 71 "../../src/CO_Tree_templates.hh"
-40039:   stack[0].first = n;
-40039:   stack[0].second = 3;
-40039:   ++stack_first_empty;
-40039: 
-40039:   while (stack_first_empty != 0) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     const dimension_type top_n = stack[stack_first_empty - 1].first;
-40039:     const signed char top_operation = stack[stack_first_empty - 1].second;
-40039: 
-40039:     switch (top_operation) {
-40039: 
-40039:     case 0:
-40039:       root.get_parent();
-40039:       --stack_first_empty;
-40039:       continue;
-40039: 
-40039:     case 1:
-40039:       root.get_left_child();
-40039:       break;
-40039: 
-40039:     case 2:
-40039:       root.get_right_child();
-40039:       break;
-40039: # 108 "../../src/CO_Tree_templates.hh"
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:     if (top_n == 0) {
-40039:       --stack_first_empty;
-40039:     }
-40039:     else {
-40039:       if (top_n == 1) {
-40039:         ((void) 0);
-40039:         root.index() = i.index();
-40039:         new(&(*root)) data_type(*i);
-40039:         ++i;
-40039:         --stack_first_empty;
-40039:       }
-40039:       else {
-40039:         ((void) 0);
-40039: 
-40039:         const dimension_type half = (top_n + 1) / 2;
-40039:         stack[stack_first_empty - 1].second = 0;
-40039:         stack[stack_first_empty ] = std::make_pair(top_n - half, 2);
-40039:         stack[stack_first_empty + 1] = std::make_pair(1, 3);
-40039:         stack[stack_first_empty + 2].second = 0;
-40039:         stack[stack_first_empty + 3] = std::make_pair(half - 1, 1);
-40039:         stack_first_empty += 4;
-40039:       }
-40039:     }
-40039:   }
-40039:   size_ = n;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: }
-40039: # 1559 "../../src/CO_Tree_defs.hh" 2
-40039: # 30 "../../src/Sparse_Row_defs.hh" 2
-40039: # 58 "../../src/Sparse_Row_defs.hh"
-40039: class Parma_Polyhedra_Library::Sparse_Row {
-40039: 
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef CO_Tree::iterator iterator;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef CO_Tree::const_iterator const_iterator;
-40039: # 85 "../../src/Sparse_Row_defs.hh"
-40039:   explicit Sparse_Row(dimension_type n = 0);
-40039: # 99 "../../src/Sparse_Row_defs.hh"
-40039:   Sparse_Row(dimension_type n, dimension_type capacity);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Sparse_Row(const Sparse_Row& y, dimension_type capacity);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Sparse_Row(const Sparse_Row& y, dimension_type sz, dimension_type capacity);
-40039: # 122 "../../src/Sparse_Row_defs.hh"
-40039:   explicit Sparse_Row(const Dense_Row& row);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Sparse_Row(const Dense_Row& y, dimension_type sz, dimension_type capacity);
-40039: 
-40039:   Sparse_Row& operator=(const Dense_Row& row);
-40039: # 139 "../../src/Sparse_Row_defs.hh"
-40039:   void m_swap(Sparse_Row& x);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type size() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type num_stored_elements() const;
-40039: # 164 "../../src/Sparse_Row_defs.hh"
-40039:   void resize(dimension_type n);
-40039: # 176 "../../src/Sparse_Row_defs.hh"
-40039:   void expand_within_capacity(dimension_type n);
-40039: # 189 "../../src/Sparse_Row_defs.hh"
-40039:   void shrink(dimension_type n);
-40039: # 205 "../../src/Sparse_Row_defs.hh"
-40039:   void delete_element_and_shift(dimension_type i);
-40039: # 226 "../../src/Sparse_Row_defs.hh"
-40039:   void add_zeroes_and_shift(dimension_type n, dimension_type i);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   iterator begin();
-40039: # 243 "../../src/Sparse_Row_defs.hh"
-40039:   const iterator& end();
-40039: 
-40039: 
-40039:   const_iterator begin() const;
-40039: 
-40039: 
-40039:   const const_iterator& end() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const_iterator cbegin() const;
-40039: # 266 "../../src/Sparse_Row_defs.hh"
-40039:   const const_iterator& cend() const;
-40039: 
-40039: 
-40039:   static dimension_type max_size();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void clear();
-40039: # 293 "../../src/Sparse_Row_defs.hh"
-40039:   Coefficient& operator[](dimension_type i);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference operator[](dimension_type i) const;
-40039: # 311 "../../src/Sparse_Row_defs.hh"
-40039:   Coefficient_traits::const_reference get(dimension_type i) const;
-40039: # 323 "../../src/Sparse_Row_defs.hh"
-40039:   iterator find(dimension_type i);
-40039: # 341 "../../src/Sparse_Row_defs.hh"
-40039:   iterator find(iterator itr, dimension_type i);
-40039: # 353 "../../src/Sparse_Row_defs.hh"
-40039:   const_iterator find(dimension_type i) const;
-40039: # 371 "../../src/Sparse_Row_defs.hh"
-40039:   const_iterator find(const_iterator itr, dimension_type i) const;
-40039: # 387 "../../src/Sparse_Row_defs.hh"
-40039:   iterator lower_bound(dimension_type i);
-40039: # 409 "../../src/Sparse_Row_defs.hh"
-40039:   iterator lower_bound(iterator itr, dimension_type i);
-40039: # 426 "../../src/Sparse_Row_defs.hh"
-40039:   const_iterator lower_bound(dimension_type i) const;
-40039: # 448 "../../src/Sparse_Row_defs.hh"
-40039:   const_iterator lower_bound(const_iterator itr, dimension_type i) const;
-40039: # 465 "../../src/Sparse_Row_defs.hh"
-40039:   iterator insert(dimension_type i, Coefficient_traits::const_reference x);
-40039: # 488 "../../src/Sparse_Row_defs.hh"
-40039:   iterator insert(iterator itr, dimension_type i,
-40039:                   Coefficient_traits::const_reference x);
-40039: # 503 "../../src/Sparse_Row_defs.hh"
-40039:   iterator insert(dimension_type i);
-40039: # 523 "../../src/Sparse_Row_defs.hh"
-40039:   iterator insert(iterator itr, dimension_type i);
-40039: # 537 "../../src/Sparse_Row_defs.hh"
-40039:   void swap_coefficients(dimension_type i, dimension_type j);
-40039: # 547 "../../src/Sparse_Row_defs.hh"
-40039:   void fast_swap(dimension_type i, iterator itr);
-40039: # 559 "../../src/Sparse_Row_defs.hh"
-40039:   void swap_coefficients(iterator i, iterator j);
-40039: # 574 "../../src/Sparse_Row_defs.hh"
-40039:   iterator reset(iterator i);
-40039: # 592 "../../src/Sparse_Row_defs.hh"
-40039:   iterator reset(iterator first, iterator last);
-40039: # 606 "../../src/Sparse_Row_defs.hh"
-40039:   void reset(dimension_type i);
-40039: # 621 "../../src/Sparse_Row_defs.hh"
-40039:   void reset_after(dimension_type i);
-40039: # 630 "../../src/Sparse_Row_defs.hh"
-40039:   void normalize();
-40039: # 655 "../../src/Sparse_Row_defs.hh"
-40039:   template <typename Func1, typename Func2>
-40039:   void combine_needs_first(const Sparse_Row& y,
-40039:                            const Func1& f, const Func2& g);
-40039: # 683 "../../src/Sparse_Row_defs.hh"
-40039:   template <typename Func1, typename Func2>
-40039:   void combine_needs_second(const Sparse_Row& y,
-40039:                             const Func1& g, const Func2& h);
-40039: # 715 "../../src/Sparse_Row_defs.hh"
-40039:   template <typename Func1, typename Func2, typename Func3>
-40039:   void combine(const Sparse_Row& y,
-40039:                const Func1& f, const Func2& g, const Func3& h);
-40039: # 744 "../../src/Sparse_Row_defs.hh"
-40039:   void linear_combine(const Sparse_Row& y,
-40039:                       Coefficient_traits::const_reference coeff1,
-40039:                       Coefficient_traits::const_reference coeff2);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void linear_combine(const Sparse_Row& y,
-40039:                       Coefficient_traits::const_reference c1,
-40039:                       Coefficient_traits::const_reference c2,
-40039:                       dimension_type start, dimension_type end);
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: # 783 "../../src/Sparse_Row_defs.hh"
-40039:   memory_size_type external_memory_in_bytes(dimension_type capacity) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: # 800 "../../src/Sparse_Row_defs.hh"
-40039:   memory_size_type total_memory_in_bytes(dimension_type capacity) const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: # 812 "../../src/Sparse_Row_defs.hh"
-40039:   bool OK(dimension_type capacity) const;
-40039: 
-40039: private:
-40039: 
-40039:   CO_Tree tree;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type size_;
-40039: };
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: void swap(Parma_Polyhedra_Library::Sparse_Row& x,
-40039:           Parma_Polyhedra_Library::Sparse_Row& y);
-40039: 
-40039: void swap(Parma_Polyhedra_Library::Sparse_Row& x,
-40039:           Parma_Polyhedra_Library::Dense_Row& y);
-40039: 
-40039: void swap(Parma_Polyhedra_Library::Dense_Row& x,
-40039:           Parma_Polyhedra_Library::Sparse_Row& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: bool operator==(const Sparse_Row& x, const Sparse_Row& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: bool operator!=(const Sparse_Row& x, const Sparse_Row& y);
-40039: 
-40039: bool operator==(const Dense_Row& x, const Sparse_Row& y);
-40039: bool operator!=(const Dense_Row& x, const Sparse_Row& y);
-40039: 
-40039: bool operator==(const Sparse_Row& x, const Dense_Row& y);
-40039: bool operator!=(const Sparse_Row& x, const Dense_Row& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: void linear_combine(Sparse_Row& x, const Dense_Row& y,
-40039:                     Coefficient_traits::const_reference coeff1,
-40039:                     Coefficient_traits::const_reference coeff2);
-40039: # 876 "../../src/Sparse_Row_defs.hh"
-40039: void linear_combine(Sparse_Row& x, const Dense_Row& y,
-40039:                     Coefficient_traits::const_reference c1,
-40039:                     Coefficient_traits::const_reference c2,
-40039:                     dimension_type start, dimension_type end);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: void linear_combine(Dense_Row& x, const Sparse_Row& y,
-40039:                     Coefficient_traits::const_reference coeff1,
-40039:                     Coefficient_traits::const_reference coeff2);
-40039: # 898 "../../src/Sparse_Row_defs.hh"
-40039: void linear_combine(Dense_Row& x, const Sparse_Row& y,
-40039:                     Coefficient_traits::const_reference c1,
-40039:                     Coefficient_traits::const_reference c2,
-40039:                     dimension_type start, dimension_type end);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: void linear_combine(Sparse_Row& x, const Sparse_Row& y,
-40039:                     Coefficient_traits::const_reference coeff1,
-40039:                     Coefficient_traits::const_reference coeff2);
-40039: # 920 "../../src/Sparse_Row_defs.hh"
-40039: void linear_combine(Sparse_Row& x, const Sparse_Row& y,
-40039:                     Coefficient_traits::const_reference c1,
-40039:                     Coefficient_traits::const_reference c2,
-40039:                     dimension_type start, dimension_type end);
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Sparse_Row_inlines.hh" 1
-40039: # 29 "../../src/Sparse_Row_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline
-40039: Sparse_Row::Sparse_Row(dimension_type n)
-40039:   : size_(n) {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Sparse_Row::Sparse_Row(dimension_type n, dimension_type)
-40039:   : size_(n) {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Sparse_Row::Sparse_Row(const Sparse_Row& y, dimension_type)
-40039:   : tree(y.tree), size_(y.size_) {
-40039: }
-40039: 
-40039: inline
-40039: Sparse_Row::Sparse_Row(const Sparse_Row& y, dimension_type sz, dimension_type)
-40039:   : tree(y.begin(),
-40039:          std::distance(y.begin(), y.lower_bound(std::min(y.size(), sz)))),
-40039:     size_(sz) {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline void
-40039: Sparse_Row::m_swap(Sparse_Row& x) {
-40039:   using std::swap;
-40039:   swap(tree, x.tree);
-40039:   swap(size_, x.size_);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Sparse_Row::size() const {
-40039:   return size_;
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Sparse_Row::num_stored_elements() const {
-40039:   return tree.size();
-40039: }
-40039: 
-40039: inline void
-40039: Sparse_Row::resize(dimension_type n) {
-40039:   if (n < size_) {
-40039:     reset_after(n);
-40039:   }
-40039:   size_ = n;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline void
-40039: Sparse_Row::shrink(dimension_type n) {
-40039:   ((void) 0);
-40039:   resize(n);
-40039: }
-40039: 
-40039: inline void
-40039: Sparse_Row::expand_within_capacity(dimension_type n) {
-40039:   ((void) 0);
-40039:   resize(n);
-40039: }
-40039: 
-40039: inline void
-40039: Sparse_Row::delete_element_and_shift(dimension_type i) {
-40039:   ((void) 0);
-40039:   tree.erase_element_and_shift_left(i);
-40039:   --size_;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline void
-40039: Sparse_Row::add_zeroes_and_shift(dimension_type n, dimension_type i) {
-40039:   ((void) 0);
-40039:   tree.increase_keys_from(i, n);
-40039:   size_ += n;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline Sparse_Row::iterator
-40039: Sparse_Row::begin() {
-40039:   return tree.begin();
-40039: }
-40039: 
-40039: inline const Sparse_Row::iterator&
-40039: Sparse_Row::end() {
-40039:   return tree.end();
-40039: }
-40039: 
-40039: inline Sparse_Row::const_iterator
-40039: Sparse_Row::begin() const {
-40039:   return tree.cbegin();
-40039: }
-40039: 
-40039: inline const Sparse_Row::const_iterator&
-40039: Sparse_Row::end() const {
-40039:   return tree.cend();
-40039: }
-40039: 
-40039: inline Sparse_Row::const_iterator
-40039: Sparse_Row::cbegin() const {
-40039:   return tree.cbegin();
-40039: }
-40039: 
-40039: inline const Sparse_Row::const_iterator&
-40039: Sparse_Row::cend() const {
-40039:   return tree.cend();
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Sparse_Row::max_size() {
-40039:   return CO_Tree::max_size();
-40039: }
-40039: 
-40039: inline void
-40039: Sparse_Row::clear() {
-40039:   tree.clear();
-40039: }
-40039: 
-40039: inline Coefficient&
-40039: Sparse_Row::operator[](dimension_type i) {
-40039:   ((void) 0);
-40039:   iterator itr = insert(i);
-40039:   return *itr;
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: Sparse_Row::operator[](dimension_type i) const {
-40039:   return get(i);
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: Sparse_Row::get(dimension_type i) const {
-40039:   ((void) 0);
-40039:   if (tree.empty()) {
-40039:     return Coefficient_zero();
-40039:   }
-40039:   const_iterator itr = find(i);
-40039:   if (itr != end()) {
-40039:     return *itr;
-40039:   }
-40039:   else {
-40039:     return Coefficient_zero();
-40039:   }
-40039: }
-40039: 
-40039: inline Sparse_Row::iterator
-40039: Sparse_Row::find(dimension_type i) {
-40039:   ((void) 0);
-40039: 
-40039:   iterator itr = tree.bisect(i);
-40039: 
-40039:   if (itr != end() && itr.index() == i) {
-40039:     return itr;
-40039:   }
-40039:   return end();
-40039: }
-40039: 
-40039: inline Sparse_Row::iterator
-40039: Sparse_Row::find(iterator hint, dimension_type i) {
-40039:   ((void) 0);
-40039: 
-40039:   iterator itr = tree.bisect_near(hint, i);
-40039: 
-40039:   if (itr != end() && itr.index() == i) {
-40039:     return itr;
-40039:   }
-40039:   return end();
-40039: }
-40039: 
-40039: inline Sparse_Row::const_iterator
-40039: Sparse_Row::find(dimension_type i) const {
-40039:   ((void) 0);
-40039: 
-40039:   const_iterator itr = tree.bisect(i);
-40039: 
-40039:   if (itr != end() && itr.index() == i) {
-40039:     return itr;
-40039:   }
-40039: 
-40039:   return end();
-40039: }
-40039: 
-40039: inline Sparse_Row::const_iterator
-40039: Sparse_Row::find(const_iterator hint, dimension_type i) const {
-40039:   ((void) 0);
-40039: 
-40039:   const_iterator itr = tree.bisect_near(hint, i);
-40039: 
-40039:   if (itr != end() && itr.index() == i) {
-40039:     return itr;
-40039:   }
-40039:   return end();
-40039: }
-40039: 
-40039: inline Sparse_Row::iterator
-40039: Sparse_Row::lower_bound(dimension_type i) {
-40039:   ((void) 0);
-40039: 
-40039:   iterator itr = tree.bisect(i);
-40039: 
-40039:   if (itr == end()) {
-40039:     return end();
-40039:   }
-40039: 
-40039:   if (itr.index() < i) {
-40039:     ++itr;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: 
-40039:   return itr;
-40039: }
-40039: 
-40039: inline Sparse_Row::iterator
-40039: Sparse_Row::lower_bound(iterator hint, dimension_type i) {
-40039:   ((void) 0);
-40039: 
-40039:   iterator itr = tree.bisect_near(hint, i);
-40039: 
-40039:   if (itr == end()) {
-40039:     return end();
-40039:   }
-40039: 
-40039:   if (itr.index() < i) {
-40039:     ++itr;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: 
-40039:   return itr;
-40039: }
-40039: 
-40039: inline Sparse_Row::const_iterator
-40039: Sparse_Row::lower_bound(dimension_type i) const {
-40039:   ((void) 0);
-40039: 
-40039:   const_iterator itr = tree.bisect(i);
-40039: 
-40039:   if (itr == end()) {
-40039:     return end();
-40039:   }
-40039: 
-40039:   if (itr.index() < i) {
-40039:     ++itr;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: 
-40039:   return itr;
-40039: }
-40039: 
-40039: inline Sparse_Row::const_iterator
-40039: Sparse_Row::lower_bound(const_iterator hint, dimension_type i) const {
-40039:   ((void) 0);
-40039: 
-40039:   const_iterator itr = tree.bisect_near(hint, i);
-40039: 
-40039:   if (itr == end()) {
-40039:     return end();
-40039:   }
-40039: 
-40039:   if (itr.index() < i) {
-40039:     ++itr;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: 
-40039:   return itr;
-40039: }
-40039: 
-40039: inline Sparse_Row::iterator
-40039: Sparse_Row::insert(dimension_type i, Coefficient_traits::const_reference x) {
-40039:   ((void) 0);
-40039:   return tree.insert(i, x);
-40039: }
-40039: 
-40039: inline Sparse_Row::iterator
-40039: Sparse_Row::insert(iterator itr, dimension_type i,
-40039:                    Coefficient_traits::const_reference x) {
-40039:   ((void) 0);
-40039:   return tree.insert(itr, i, x);
-40039: }
-40039: 
-40039: inline Sparse_Row::iterator
-40039: Sparse_Row::insert(dimension_type i) {
-40039:   ((void) 0);
-40039:   return tree.insert(i);
-40039: }
-40039: 
-40039: inline Sparse_Row::iterator
-40039: Sparse_Row::insert(iterator itr, dimension_type i) {
-40039:   ((void) 0);
-40039:   return tree.insert(itr, i);
-40039: }
-40039: 
-40039: inline void
-40039: Sparse_Row::swap_coefficients(iterator i, iterator j) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   using std::swap;
-40039:   swap(*i, *j);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline void
-40039: Sparse_Row::fast_swap(dimension_type i, iterator itr) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   tree.fast_shift(i, itr);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline Sparse_Row::iterator
-40039: Sparse_Row::reset(iterator i) {
-40039:   iterator res = tree.erase(i);
-40039:   ((void) 0);
-40039:   return res;
-40039: }
-40039: 
-40039: inline void
-40039: Sparse_Row::reset(dimension_type i) {
-40039:   ((void) 0);
-40039: 
-40039:   tree.erase(i);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Sparse_Row::external_memory_in_bytes() const {
-40039:   return tree.external_memory_in_bytes();
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Sparse_Row::external_memory_in_bytes(dimension_type ) const {
-40039:   return external_memory_in_bytes();
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Sparse_Row::total_memory_in_bytes() const {
-40039:   return external_memory_in_bytes() + sizeof(*this);
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Sparse_Row::total_memory_in_bytes(dimension_type ) const {
-40039:   return total_memory_in_bytes();
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: inline void
-40039: swap(Sparse_Row& x, Sparse_Row& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 928 "../../src/Sparse_Row_defs.hh" 2
-40039: # 1 "../../src/Sparse_Row_templates.hh" 1
-40039: # 27 "../../src/Sparse_Row_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: template <typename Func1, typename Func2>
-40039: void
-40039: Sparse_Row::combine_needs_first(const Sparse_Row& y,
-40039:                                 const Func1& f, const Func2& g) {
-40039:   if (this == &y) {
-40039:     for (iterator i = begin(), i_end = end(); i != i_end; ++i) {
-40039:       g(*i, *i);
-40039:     }
-40039:   }
-40039:   else {
-40039:     iterator i = begin();
-40039: 
-40039: 
-40039: 
-40039:     const iterator& i_end = end();
-40039:     const_iterator j = y.begin();
-40039:     const_iterator j_end = y.end();
-40039:     while (i != i_end && j != j_end) {
-40039:       if (i.index() == j.index()) {
-40039:         g(*i, *j);
-40039:         if (*i == 0) {
-40039:           i = reset(i);
-40039:         }
-40039:         else {
-40039:           ++i;
-40039:         }
-40039:         ++j;
-40039:       }
-40039:       else
-40039:         if (i.index() < j.index()) {
-40039:           f(*i);
-40039:           if (*i == 0) {
-40039:             i = reset(i);
-40039:           }
-40039:           else {
-40039:             ++i;
-40039:           }
-40039:         }
-40039:         else {
-40039:           j = y.lower_bound(j, i.index());
-40039:         }
-40039:     }
-40039:     while (i != i_end) {
-40039:       f(*i);
-40039:       if (*i == 0) {
-40039:         i = reset(i);
-40039:       }
-40039:       else {
-40039:         ++i;
-40039:       }
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename Func1, typename Func2>
-40039: void
-40039: Sparse_Row::combine_needs_second(const Sparse_Row& y,
-40039:                                  const Func1& g,
-40039:                                  const Func2& ) {
-40039:   iterator i = begin();
-40039:   for (const_iterator j = y.begin(), j_end = y.end(); j != j_end; ++j) {
-40039:     i = insert(i, j.index());
-40039:     g(*i, *j);
-40039:     if (*i == 0) {
-40039:       i = reset(i);
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename Func1, typename Func2, typename Func3>
-40039: void
-40039: Sparse_Row::combine(const Sparse_Row& y, const Func1& f,
-40039:                     const Func2& g, const Func3& h) {
-40039:   if (this == &y) {
-40039:     for (iterator i = begin(), i_end = end(); i != i_end; ++i) {
-40039:       g(*i, *i);
-40039:     }
-40039:   }
-40039:   else {
-40039:     iterator i = begin();
-40039: 
-40039: 
-40039: 
-40039:     const iterator& i_end = end();
-40039:     const_iterator j = y.begin();
-40039:     const_iterator j_end = y.end();
-40039:     while (i != i_end && j != j_end) {
-40039:       if (i.index() == j.index()) {
-40039:         g(*i, *j);
-40039:         if (*i == 0) {
-40039:           i = reset(i);
-40039:         }
-40039:         else {
-40039:           ++i;
-40039:         }
-40039:         ++j;
-40039:       }
-40039:       else
-40039:         if (i.index() < j.index()) {
-40039:           f(*i);
-40039:           if (*i == 0) {
-40039:             i = reset(i);
-40039:           }
-40039:           else {
-40039:             ++i;
-40039:           }
-40039:         }
-40039:         else {
-40039:           ((void) 0);
-40039:           i = insert(i, j.index());
-40039:           h(*i, *j);
-40039:           if (*i == 0) {
-40039:             i = reset(i);
-40039:           }
-40039:           else {
-40039:             ++i;
-40039:           }
-40039:           ++j;
-40039:         }
-40039:     }
-40039:     ((void) 0);
-40039:     while (i != i_end) {
-40039:       f(*i);
-40039:       if (*i == 0) {
-40039:         i = reset(i);
-40039:       }
-40039:       else {
-40039:         ++i;
-40039:       }
-40039:     }
-40039:     while (j != j_end) {
-40039:       i = insert(i, j.index());
-40039:       h(*i, *j);
-40039:       if (*i == 0) {
-40039:         i = reset(i);
-40039:       }
-40039:       ++j;
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: }
-40039: # 929 "../../src/Sparse_Row_defs.hh" 2
-40039: # 34 "../../src/Linear_Expression_Impl_defs.hh" 2
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Row>
-40039: std::ostream&
-40039: operator<<(std::ostream& s, const Linear_Expression_Impl<Row>& e);
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 102 "../../src/Linear_Expression_Impl_defs.hh"
-40039: template <typename Row>
-40039: class Parma_Polyhedra_Library::Linear_Expression_Impl
-40039:   : public Linear_Expression_Interface {
-40039: public:
-40039: 
-40039:   Linear_Expression_Impl();
-40039: 
-40039: 
-40039:   Linear_Expression_Impl(const Linear_Expression_Impl& e);
-40039: 
-40039: 
-40039:   template <typename Row2>
-40039:   Linear_Expression_Impl(const Linear_Expression_Impl<Row2>& e);
-40039: 
-40039: 
-40039:   Linear_Expression_Impl(const Linear_Expression_Interface& e);
-40039: 
-40039: 
-40039:   virtual ~Linear_Expression_Impl();
-40039: 
-40039: 
-40039:   virtual bool OK() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   explicit Linear_Expression_Impl(Coefficient_traits::const_reference n);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Linear_Expression_Impl(Variable v);
-40039: 
-40039: 
-40039:   virtual Representation representation() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   class const_iterator: public const_iterator_interface {
-40039:   public:
-40039:     explicit const_iterator(const Row& row, dimension_type i);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     virtual const_iterator_interface* clone() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     virtual void operator++();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     virtual void operator--();
-40039: 
-40039: 
-40039:     virtual reference operator*() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     virtual Variable variable() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     virtual bool operator==(const const_iterator_interface& x) const;
-40039: 
-40039:   private:
-40039: 
-40039:     void skip_zeroes_forward();
-40039:     void skip_zeroes_backward();
-40039: 
-40039:     const Row* row;
-40039:     typename Row::const_iterator itr;
-40039:   };
-40039: 
-40039: 
-40039: 
-40039:   virtual const_iterator_interface* begin() const;
-40039: 
-40039: 
-40039: 
-40039:   virtual const_iterator_interface* end() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual const_iterator_interface* lower_bound(Variable v) const;
-40039: 
-40039: 
-40039:   static dimension_type max_space_dimension();
-40039: 
-40039: 
-40039:   virtual dimension_type space_dimension() const;
-40039: 
-40039: 
-40039:   virtual void set_space_dimension(dimension_type n);
-40039: 
-40039: 
-40039:   virtual Coefficient_traits::const_reference coefficient(Variable v) const;
-40039: 
-40039: 
-40039:   virtual void set_coefficient(Variable v,
-40039:                                Coefficient_traits::const_reference n);
-40039: 
-40039: 
-40039:   virtual Coefficient_traits::const_reference inhomogeneous_term() const;
-40039: 
-40039: 
-40039:   virtual void set_inhomogeneous_term(Coefficient_traits::const_reference n);
-40039: # 243 "../../src/Linear_Expression_Impl_defs.hh"
-40039:   virtual void linear_combine(const Linear_Expression_Interface& y, Variable v);
-40039: 
-40039: 
-40039: 
-40039:   virtual void linear_combine(const Linear_Expression_Interface& y,
-40039:                               Coefficient_traits::const_reference c1,
-40039:                               Coefficient_traits::const_reference c2);
-40039: 
-40039: 
-40039: 
-40039:   virtual void linear_combine_lax(const Linear_Expression_Interface& y,
-40039:                                   Coefficient_traits::const_reference c1,
-40039:                                   Coefficient_traits::const_reference c2);
-40039: 
-40039: 
-40039:   virtual void swap_space_dimensions(Variable v1, Variable v2);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void remove_space_dimensions(const Variables_Set& vars);
-40039: 
-40039: 
-40039: 
-40039:   virtual void shift_space_dimensions(Variable v, dimension_type n);
-40039: # 284 "../../src/Linear_Expression_Impl_defs.hh"
-40039:   virtual void permute_space_dimensions(const std::vector<Variable>& cycle);
-40039: 
-40039: 
-40039:   virtual bool is_zero() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual bool all_homogeneous_terms_are_zero() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   virtual memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   virtual void ascii_dump(std::ostream& s) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   Linear_Expression_Impl(const Linear_Expression_Interface& e,
-40039:                          dimension_type space_dim);
-40039: 
-40039: 
-40039: 
-40039:   virtual bool is_equal_to(const Linear_Expression_Interface& x) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void normalize();
-40039: 
-40039: 
-40039: 
-40039:   virtual void sign_normalize();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void negate(dimension_type first, dimension_type last);
-40039: 
-40039:   virtual Linear_Expression_Impl&
-40039:   operator+=(Coefficient_traits::const_reference n);
-40039:   virtual Linear_Expression_Impl&
-40039:   operator-=(Coefficient_traits::const_reference n);
-40039: # 357 "../../src/Linear_Expression_Impl_defs.hh"
-40039:   virtual int compare(const Linear_Expression_Interface& y) const;
-40039: 
-40039:   virtual Linear_Expression_Impl&
-40039:   operator+=(const Linear_Expression_Interface& e2);
-40039:   virtual Linear_Expression_Impl& operator+=(const Variable v);
-40039:   virtual Linear_Expression_Impl&
-40039:   operator-=(const Linear_Expression_Interface& e2);
-40039:   virtual Linear_Expression_Impl& operator-=(const Variable v);
-40039:   virtual Linear_Expression_Impl&
-40039:   operator*=(Coefficient_traits::const_reference n);
-40039:   virtual Linear_Expression_Impl&
-40039:   operator/=(Coefficient_traits::const_reference n);
-40039: 
-40039:   virtual void negate();
-40039: 
-40039:   virtual Linear_Expression_Impl&
-40039:   add_mul_assign(Coefficient_traits::const_reference n, const Variable v);
-40039: 
-40039:   virtual Linear_Expression_Impl&
-40039:   sub_mul_assign(Coefficient_traits::const_reference n, const Variable v);
-40039: 
-40039:   virtual void add_mul_assign(Coefficient_traits::const_reference factor,
-40039:                               const Linear_Expression_Interface& e2);
-40039: 
-40039:   virtual void sub_mul_assign(Coefficient_traits::const_reference factor,
-40039:                               const Linear_Expression_Interface& e2);
-40039: 
-40039:   virtual void print(std::ostream& s) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual bool all_zeroes(const Variables_Set& vars) const;
-40039: 
-40039: 
-40039: 
-40039:   virtual bool have_a_common_variable(const Linear_Expression_Interface& x,
-40039:                                       Variable first, Variable last) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual Coefficient_traits::const_reference get(dimension_type i) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void set(dimension_type i, Coefficient_traits::const_reference n);
-40039: # 416 "../../src/Linear_Expression_Impl_defs.hh"
-40039:   virtual bool all_zeroes(dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual dimension_type num_zeroes(dimension_type start, dimension_type end) const;
-40039: # 433 "../../src/Linear_Expression_Impl_defs.hh"
-40039:   virtual Coefficient gcd(dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void exact_div_assign(Coefficient_traits::const_reference c,
-40039:                                 dimension_type start, dimension_type end);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void mul_assign(Coefficient_traits::const_reference n,
-40039:                           dimension_type start, dimension_type end);
-40039: # 466 "../../src/Linear_Expression_Impl_defs.hh"
-40039:   virtual void
-40039:   linear_combine(const Linear_Expression_Interface& y, dimension_type i);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void linear_combine(const Linear_Expression_Interface& y,
-40039:                               Coefficient_traits::const_reference c1,
-40039:                               Coefficient_traits::const_reference c2,
-40039:                               dimension_type start, dimension_type end);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void linear_combine_lax(const Linear_Expression_Interface& y,
-40039:                                   Coefficient_traits::const_reference c1,
-40039:                                   Coefficient_traits::const_reference c2,
-40039:                                   dimension_type start, dimension_type end);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual dimension_type last_nonzero() const;
-40039: # 503 "../../src/Linear_Expression_Impl_defs.hh"
-40039:   virtual bool
-40039:   all_zeroes_except(const Variables_Set& vars,
-40039:                     dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void
-40039:   scalar_product_assign(Coefficient& result,
-40039:                         const Linear_Expression_Interface& y,
-40039:                         dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual int
-40039:   scalar_product_sign(const Linear_Expression_Interface& y,
-40039:                       dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual dimension_type
-40039:   first_nonzero(dimension_type first, dimension_type last) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual dimension_type
-40039:   last_nonzero(dimension_type first, dimension_type last) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void has_a_free_dimension_helper(std::set<dimension_type>& x) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual bool is_equal_to(const Linear_Expression_Interface& x,
-40039:                            dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual bool is_equal_to(const Linear_Expression_Interface& x,
-40039:                            Coefficient_traits::const_reference c1,
-40039:                            Coefficient_traits::const_reference c2,
-40039:                            dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void get_row(Dense_Row& r) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void get_row(Sparse_Row& r) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Linear_Expression_Impl(dimension_type space_dim, bool);
-40039: # 597 "../../src/Linear_Expression_Impl_defs.hh"
-40039:   template <typename Row2>
-40039:   void linear_combine(const Linear_Expression_Impl<Row2>& y, Variable v);
-40039: 
-40039: 
-40039: 
-40039:   template <typename Row2>
-40039:   void linear_combine(const Linear_Expression_Impl<Row2>& y,
-40039:                       Coefficient_traits::const_reference c1,
-40039:                       Coefficient_traits::const_reference c2);
-40039: 
-40039: 
-40039: 
-40039:   template <typename Row2>
-40039:   void linear_combine_lax(const Linear_Expression_Impl<Row2>& y,
-40039:                           Coefficient_traits::const_reference c1,
-40039:                           Coefficient_traits::const_reference c2);
-40039: 
-40039: 
-40039: 
-40039:   template <typename Row2>
-40039:   bool is_equal_to(const Linear_Expression_Impl<Row2>& x) const;
-40039: 
-40039:   template <typename Row2>
-40039:   Linear_Expression_Impl& operator+=(const Linear_Expression_Impl<Row2>& e2);
-40039:   template <typename Row2>
-40039:   Linear_Expression_Impl& operator-=(const Linear_Expression_Impl<Row2>& e2);
-40039: 
-40039:   template <typename Row2>
-40039:   Linear_Expression_Impl&
-40039:   sub_mul_assign(Coefficient_traits::const_reference n,
-40039:                  const Linear_Expression_Impl<Row2>& y,
-40039:                  dimension_type start, dimension_type end);
-40039: 
-40039:   template <typename Row2>
-40039:   void add_mul_assign(Coefficient_traits::const_reference factor,
-40039:                       const Linear_Expression_Impl<Row2>& e2);
-40039: 
-40039:   template <typename Row2>
-40039:   void sub_mul_assign(Coefficient_traits::const_reference factor,
-40039:                       const Linear_Expression_Impl<Row2>& e2);
-40039: # 653 "../../src/Linear_Expression_Impl_defs.hh"
-40039:   template <typename Row2>
-40039:   void linear_combine(const Linear_Expression_Impl<Row2>& y, dimension_type i);
-40039: 
-40039: 
-40039: 
-40039:   template <typename Row2>
-40039:   void linear_combine(const Linear_Expression_Impl<Row2>& y,
-40039:                       Coefficient_traits::const_reference c1,
-40039:                       Coefficient_traits::const_reference c2,
-40039:                       dimension_type start, dimension_type end);
-40039: 
-40039: 
-40039: 
-40039:   template <typename Row2>
-40039:   void linear_combine_lax(const Linear_Expression_Impl<Row2>& y,
-40039:                           Coefficient_traits::const_reference c1,
-40039:                           Coefficient_traits::const_reference c2,
-40039:                           dimension_type start, dimension_type end);
-40039: # 684 "../../src/Linear_Expression_Impl_defs.hh"
-40039:   template <typename Row2>
-40039:   int compare(const Linear_Expression_Impl<Row2>& y) const;
-40039: 
-40039: 
-40039:   template <typename Row2>
-40039:   void
-40039:   scalar_product_assign(Coefficient& result,
-40039:                         const Linear_Expression_Impl<Row2>& y,
-40039:                         dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039: 
-40039:   template <typename Row2>
-40039:   int scalar_product_sign(const Linear_Expression_Impl<Row2>& y,
-40039:                           dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039:   template <typename Row2>
-40039:   bool is_equal_to(const Linear_Expression_Impl<Row2>& x,
-40039:                    dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039: 
-40039:   template <typename Row2>
-40039:   bool is_equal_to(const Linear_Expression_Impl<Row2>& x,
-40039:                    Coefficient_traits::const_reference c1,
-40039:                    Coefficient_traits::const_reference c2,
-40039:                    dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039: 
-40039:   template <typename Row2>
-40039:   bool have_a_common_variable(const Linear_Expression_Impl<Row2>& x,
-40039:                               Variable first, Variable last) const;
-40039: 
-40039: private:
-40039: 
-40039:   void construct(const Linear_Expression_Interface& e);
-40039:   void construct(const Linear_Expression_Interface& e,
-40039:                  dimension_type space_dim);
-40039: 
-40039:   template <typename Row2>
-40039:   void construct(const Linear_Expression_Impl<Row2>& e);
-40039:   template <typename Row2>
-40039:   void construct(const Linear_Expression_Impl<Row2>& e,
-40039:                  dimension_type space_dim);
-40039: 
-40039:   Row row;
-40039: 
-40039:   template <typename Row2>
-40039:   friend class Linear_Expression_Impl;
-40039: 
-40039: };
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: template <>
-40039: bool
-40039: Linear_Expression_Impl<Dense_Row>::OK() const;
-40039: template <>
-40039: bool
-40039: Linear_Expression_Impl<Sparse_Row>::OK() const;
-40039: 
-40039: template <>
-40039: bool
-40039: Linear_Expression_Impl<Dense_Row>::all_homogeneous_terms_are_zero() const;
-40039: template <>
-40039: bool
-40039: Linear_Expression_Impl<Sparse_Row>::all_homogeneous_terms_are_zero() const;
-40039: 
-40039: template <>
-40039: bool
-40039: Linear_Expression_Impl<Dense_Row>::all_zeroes(dimension_type start,
-40039:                                               dimension_type end) const;
-40039: template <>
-40039: bool
-40039: Linear_Expression_Impl<Sparse_Row>::all_zeroes(dimension_type start,
-40039:                                                dimension_type end) const;
-40039: 
-40039: template <>
-40039: bool
-40039: Linear_Expression_Impl<Dense_Row>
-40039: ::all_zeroes(const Variables_Set& vars) const;
-40039: template <>
-40039: bool
-40039: Linear_Expression_Impl<Sparse_Row>
-40039: ::all_zeroes(const Variables_Set& vars) const;
-40039: 
-40039: template <>
-40039: bool
-40039: Linear_Expression_Impl<Dense_Row>
-40039: ::all_zeroes_except(const Variables_Set& vars,
-40039:                     dimension_type start, dimension_type end) const;
-40039: template <>
-40039: bool
-40039: Linear_Expression_Impl<Sparse_Row>
-40039: ::all_zeroes_except(const Variables_Set& vars,
-40039:                     dimension_type start, dimension_type end) const;
-40039: 
-40039: template <>
-40039: dimension_type
-40039: Linear_Expression_Impl<Dense_Row>
-40039: ::first_nonzero(dimension_type first, dimension_type last) const;
-40039: template <>
-40039: dimension_type
-40039: Linear_Expression_Impl<Sparse_Row>
-40039: ::first_nonzero(dimension_type first, dimension_type last) const;
-40039: 
-40039: template <>
-40039: Coefficient
-40039: Linear_Expression_Impl<Dense_Row>::gcd(dimension_type start,
-40039:                                        dimension_type end) const;
-40039: template <>
-40039: Coefficient
-40039: Linear_Expression_Impl<Sparse_Row>::gcd(dimension_type start,
-40039:                                         dimension_type end) const;
-40039: 
-40039: template <>
-40039: void
-40039: Linear_Expression_Impl<Dense_Row>
-40039: ::has_a_free_dimension_helper(std::set<dimension_type>& x) const;
-40039: template <>
-40039: void
-40039: Linear_Expression_Impl<Sparse_Row>
-40039: ::has_a_free_dimension_helper(std::set<dimension_type>& x) const;
-40039: 
-40039: template <>
-40039: template <>
-40039: bool
-40039: Linear_Expression_Impl<Dense_Row>
-40039: ::have_a_common_variable(const Linear_Expression_Impl<Dense_Row>& y,
-40039:                          Variable first, Variable last) const;
-40039: template <>
-40039: template <>
-40039: bool
-40039: Linear_Expression_Impl<Dense_Row>
-40039: ::have_a_common_variable(const Linear_Expression_Impl<Sparse_Row>& y,
-40039:                          Variable first, Variable last) const;
-40039: template <>
-40039: template <>
-40039: bool
-40039: Linear_Expression_Impl<Sparse_Row>
-40039: ::have_a_common_variable(const Linear_Expression_Impl<Dense_Row>& y,
-40039:                          Variable first, Variable last) const;
-40039: template <>
-40039: template <>
-40039: bool
-40039: Linear_Expression_Impl<Sparse_Row>
-40039: ::have_a_common_variable(const Linear_Expression_Impl<Sparse_Row>& y,
-40039:                          Variable first, Variable last) const;
-40039: 
-40039: template <>
-40039: bool
-40039: Linear_Expression_Impl<Dense_Row>::is_zero() const;
-40039: template <>
-40039: bool
-40039: Linear_Expression_Impl<Sparse_Row>::is_zero() const;
-40039: 
-40039: template <>
-40039: dimension_type
-40039: Linear_Expression_Impl<Dense_Row>::last_nonzero() const;
-40039: template <>
-40039: dimension_type
-40039: Linear_Expression_Impl<Sparse_Row>::last_nonzero() const;
-40039: 
-40039: template <>
-40039: dimension_type
-40039: Linear_Expression_Impl<Dense_Row>
-40039: ::last_nonzero(dimension_type first, dimension_type last) const;
-40039: template <>
-40039: dimension_type
-40039: Linear_Expression_Impl<Sparse_Row>
-40039: ::last_nonzero(dimension_type first, dimension_type last) const;
-40039: 
-40039: template <>
-40039: dimension_type
-40039: Linear_Expression_Impl<Dense_Row>::num_zeroes(dimension_type start,
-40039:                                               dimension_type end) const;
-40039: template <>
-40039: dimension_type
-40039: Linear_Expression_Impl<Sparse_Row>::num_zeroes(dimension_type start,
-40039:                                                dimension_type end) const;
-40039: 
-40039: template <>
-40039: void
-40039: Linear_Expression_Impl<Dense_Row>
-40039: ::remove_space_dimensions(const Variables_Set& vars);
-40039: template <>
-40039: void
-40039: Linear_Expression_Impl<Sparse_Row>
-40039: ::remove_space_dimensions(const Variables_Set& vars);
-40039: 
-40039: template <>
-40039: Representation
-40039: Linear_Expression_Impl<Dense_Row>::representation() const;
-40039: template <>
-40039: Representation
-40039: Linear_Expression_Impl<Sparse_Row>::representation() const;
-40039: 
-40039: template <>
-40039: void
-40039: Linear_Expression_Impl<Dense_Row>::const_iterator::skip_zeroes_backward();
-40039: template <>
-40039: void
-40039: Linear_Expression_Impl<Sparse_Row>::const_iterator::skip_zeroes_backward();
-40039: 
-40039: template <>
-40039: void
-40039: Linear_Expression_Impl<Dense_Row>::const_iterator::skip_zeroes_forward();
-40039: template <>
-40039: void
-40039: Linear_Expression_Impl<Sparse_Row>::const_iterator::skip_zeroes_forward();
-40039: 
-40039: }
-40039: 
-40039: 
-40039: # 1 "../../src/Linear_Expression_Impl_inlines.hh" 1
-40039: # 27 "../../src/Linear_Expression_Impl_inlines.hh"
-40039: # 1 "../../src/math_utilities_defs.hh" 1
-40039: # 31 "../../src/math_utilities_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: typename Enable_If<Is_Native_Or_Checked<T>::value, void>::type
-40039: numer_denom(const T& from,
-40039:             Coefficient& numer, Coefficient& denom);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: typename Enable_If<Is_Native_Or_Checked<T>::value, void>::type
-40039: div_round_up(T& to,
-40039:              Coefficient_traits::const_reference x,
-40039:              Coefficient_traits::const_reference y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename N>
-40039: void
-40039: min_assign(N& x, const N& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename N>
-40039: void
-40039: max_assign(N& x, const N& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
-40039: is_even(const T& x);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
-40039: is_additive_inverse(const T& x, const T& y);
-40039: # 88 "../../src/math_utilities_defs.hh"
-40039: void
-40039: normalize2(Coefficient_traits::const_reference x,
-40039:            Coefficient_traits::const_reference y,
-40039:            Coefficient& n_x, Coefficient& n_y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: bool
-40039: is_canonical(const mpq_class& x);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: T
-40039: low_bits_mask(unsigned n);
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/math_utilities_inlines.hh" 1
-40039: # 31 "../../src/math_utilities_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline void
-40039: normalize2(Coefficient_traits::const_reference x,
-40039:            Coefficient_traits::const_reference y,
-40039:            Coefficient& n_x, Coefficient& n_y) {
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_gcd; Parma_Polyhedra_Library::Coefficient& gcd = holder_gcd.item();
-40039:   gcd_assign(gcd, x, y);
-40039:   exact_div_assign(n_x, x, gcd);
-40039:   exact_div_assign(n_y, y, gcd);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline T
-40039: low_bits_mask(const unsigned n) {
-40039:   ((void) 0);
-40039:   return ~((~static_cast<T>(0)) << n);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Enable_If<Is_Native_Or_Checked<T>::value, void>::type
-40039: numer_denom(const T& from,
-40039:             Coefficient& numer, Coefficient& denom) {
-40039:   ((void) 0)
-40039: 
-40039:                                     ;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
-40039:   assign_r(q, from, ROUND_NOT_NEEDED);
-40039:   numer = q.get_num();
-40039:   denom = q.get_den();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Enable_If<Is_Native_Or_Checked<T>::value, void>::type
-40039: div_round_up(T& to,
-40039:              Coefficient_traits::const_reference x,
-40039:              Coefficient_traits::const_reference y) {
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_x; mpq_class& q_x = holder_q_x.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_y; mpq_class& q_y = holder_q_y.item();
-40039: 
-40039: 
-40039:   assign_r(q_x, x, ROUND_NOT_NEEDED);
-40039:   assign_r(q_y, y, ROUND_NOT_NEEDED);
-40039:   div_assign_r(q_x, q_x, q_y, ROUND_NOT_NEEDED);
-40039:   assign_r(to, q_x, ROUND_UP);
-40039: }
-40039: 
-40039: template <typename N>
-40039: inline void
-40039: min_assign(N& x, const N& y) {
-40039:   if (x > y) {
-40039:     x = y;
-40039:   }
-40039: }
-40039: 
-40039: template <typename N>
-40039: inline void
-40039: max_assign(N& x, const N& y) {
-40039:   if (x < y) {
-40039:     x = y;
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
-40039: is_even(const T& x) {
-40039:   T mod;
-40039:   return umod_2exp_assign_r(mod, x, 1, ROUND_DIRECT | ROUND_STRICT_RELATION) == V_EQ
-40039:     && mod == 0;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
-40039: is_additive_inverse(const T& x, const T& y) {
-40039:   T negated_x;
-40039:   return neg_assign_r(negated_x, x, ROUND_DIRECT | ROUND_STRICT_RELATION) == V_EQ
-40039:     && negated_x == y;
-40039: }
-40039: 
-40039: inline bool
-40039: is_canonical(const mpq_class& x) {
-40039:   if (x.get_den() <= 0) {
-40039:     return false;
-40039:   }
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_temp; mpq_class& temp = holder_temp.item();
-40039:   temp = x;
-40039:   temp.canonicalize();
-40039:   return temp.get_num() == x.get_num();
-40039: }
-40039: 
-40039: }
-40039: # 109 "../../src/math_utilities_defs.hh" 2
-40039: # 28 "../../src/Linear_Expression_Impl_inlines.hh" 2
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Row>
-40039: inline dimension_type
-40039: Linear_Expression_Impl<Row>::max_space_dimension() {
-40039:   return Row::max_size() - 1;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline
-40039: Linear_Expression_Impl<Row>::Linear_Expression_Impl()
-40039:   : row(1) {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline
-40039: Linear_Expression_Impl<Row>
-40039: ::Linear_Expression_Impl(dimension_type space_dim, bool)
-40039:   : row(space_dim + 1) {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline
-40039: Linear_Expression_Impl<Row>::~Linear_Expression_Impl() {
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline
-40039: Linear_Expression_Impl<Row>
-40039: ::Linear_Expression_Impl(Coefficient_traits::const_reference n)
-40039:   : row(1) {
-40039:   if (n != 0) {
-40039:     row.insert(0, n);
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline dimension_type
-40039: Linear_Expression_Impl<Row>::space_dimension() const {
-40039:   return row.size() - 1;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_Expression_Impl<Row>::set_space_dimension(dimension_type n) {
-40039:   row.resize(n + 1);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline Coefficient_traits::const_reference
-40039: Linear_Expression_Impl<Row>::coefficient(Variable v) const {
-40039:   if (v.space_dimension() > space_dimension()) {
-40039:     return Coefficient_zero();
-40039:   }
-40039:   return row.get(v.id() + 1);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_Expression_Impl<Row>
-40039: ::set_coefficient(Variable v, Coefficient_traits::const_reference n) {
-40039:   ((void) 0);
-40039:   const dimension_type i = v.space_dimension();
-40039:   if (n == 0) {
-40039:     row.reset(i);
-40039:   }
-40039:   else {
-40039:     row.insert(i, n);
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline Coefficient_traits::const_reference
-40039: Linear_Expression_Impl<Row>::inhomogeneous_term() const {
-40039:   return row.get(0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_Expression_Impl<Row>
-40039: ::set_inhomogeneous_term(Coefficient_traits::const_reference n) {
-40039:   if (n == 0) {
-40039:     row.reset(0);
-40039:   }
-40039:   else {
-40039:     row.insert(0, n);
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_Expression_Impl<Row>::swap_space_dimensions(Variable v1, Variable v2) {
-40039:   row.swap_coefficients(v1.space_dimension(), v2.space_dimension());
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_Expression_Impl<Row>::shift_space_dimensions(Variable v,
-40039:                                                     dimension_type n) {
-40039:   row.add_zeroes_and_shift(n, v.space_dimension());
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline memory_size_type
-40039: Linear_Expression_Impl<Row>::external_memory_in_bytes() const {
-40039:   return row.external_memory_in_bytes();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline memory_size_type
-40039: Linear_Expression_Impl<Row>::total_memory_in_bytes() const {
-40039:   return external_memory_in_bytes() + sizeof(*this);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline Linear_Expression_Impl<Row>&
-40039: Linear_Expression_Impl<Row>::operator+=(Coefficient_traits::const_reference n) {
-40039:   typename Row::iterator itr = row.insert(0);
-40039:   (*itr) += n;
-40039:   if (*itr == 0) {
-40039:     row.reset(itr);
-40039:   }
-40039:   ((void) 0);
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline Linear_Expression_Impl<Row>&
-40039: Linear_Expression_Impl<Row>::operator-=(Coefficient_traits::const_reference n) {
-40039:   typename Row::iterator itr = row.insert(0);
-40039:   (*itr) -= n;
-40039:   if (*itr == 0) {
-40039:     row.reset(itr);
-40039:   }
-40039:   ((void) 0);
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_Expression_Impl<Row>::normalize() {
-40039:   row.normalize();
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <>
-40039: inline bool
-40039: Linear_Expression_Impl<Sparse_Row>::is_zero() const {
-40039:   return row.num_stored_elements() == 0;
-40039: }
-40039: 
-40039: template <>
-40039: inline bool
-40039: Linear_Expression_Impl<Sparse_Row>::all_homogeneous_terms_are_zero() const {
-40039:   return row.lower_bound(1) == row.end();
-40039: }
-40039: 
-40039: template <>
-40039: inline bool
-40039: Linear_Expression_Impl<Sparse_Row>::all_zeroes(dimension_type start,
-40039:                                                dimension_type end) const {
-40039:   return row.lower_bound(start) == row.lower_bound(end);
-40039: }
-40039: 
-40039: template <>
-40039: inline dimension_type
-40039: Linear_Expression_Impl<Sparse_Row>::num_zeroes(dimension_type start,
-40039:                                                dimension_type end) const {
-40039:   ((void) 0);
-40039:   return (end - start)
-40039:     - std::distance(row.lower_bound(start), row.lower_bound(end));
-40039: }
-40039: 
-40039: template <>
-40039: inline dimension_type
-40039: Linear_Expression_Impl<Sparse_Row>::last_nonzero() const {
-40039:   if (row.num_stored_elements() == 0) {
-40039:     return 0;
-40039:   }
-40039:   Sparse_Row::const_iterator i = row.end();
-40039:   --i;
-40039:   return i.index();
-40039: }
-40039: 
-40039: template <>
-40039: inline dimension_type
-40039: Linear_Expression_Impl<Sparse_Row>
-40039: ::first_nonzero(dimension_type first, dimension_type last) const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   Sparse_Row::const_iterator i = row.lower_bound(first);
-40039: 
-40039:   if (i != row.end() && i.index() < last) {
-40039:     return i.index();
-40039:   }
-40039:   else {
-40039:     return last;
-40039:   }
-40039: }
-40039: 
-40039: template <>
-40039: inline dimension_type
-40039: Linear_Expression_Impl<Sparse_Row>
-40039: ::last_nonzero(dimension_type first, dimension_type last) const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   Sparse_Row::const_iterator itr1 = row.lower_bound(first);
-40039:   Sparse_Row::const_iterator itr2 = row.lower_bound(last);
-40039: 
-40039:   if (itr1 == itr2) {
-40039:     return last;
-40039:   }
-40039: 
-40039:   --itr2;
-40039:   return itr2.index();
-40039: }
-40039: 
-40039: template <>
-40039: inline Representation
-40039: Linear_Expression_Impl<Dense_Row>::representation() const {
-40039:   return DENSE;
-40039: }
-40039: 
-40039: template <>
-40039: inline Representation
-40039: Linear_Expression_Impl<Sparse_Row>::representation() const {
-40039:   return SPARSE;
-40039: }
-40039: 
-40039: template <>
-40039: inline void
-40039: Linear_Expression_Impl<Sparse_Row>::const_iterator
-40039: ::skip_zeroes_forward() {
-40039: 
-40039: }
-40039: 
-40039: template <>
-40039: inline void
-40039: Linear_Expression_Impl<Sparse_Row>::const_iterator
-40039: ::skip_zeroes_backward() {
-40039: 
-40039: }
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: template <typename Row>
-40039: inline std::ostream&
-40039: operator<<(std::ostream& s, const Linear_Expression_Impl<Row>& e) {
-40039:   e.print(s);
-40039:   return s;
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 904 "../../src/Linear_Expression_Impl_defs.hh" 2
-40039: # 1 "../../src/Linear_Expression_Impl_templates.hh" 1
-40039: # 30 "../../src/Linear_Expression_Impl_templates.hh"
-40039: # 1 "../../src/Constraint_defs.hh" 1
-40039: # 27 "../../src/Constraint_defs.hh"
-40039: # 1 "../../src/Constraint_types.hh" 1
-40039: # 16 "../../src/Constraint_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Constraint;
-40039: 
-40039: }
-40039: # 28 "../../src/Constraint_defs.hh" 2
-40039: 
-40039: # 1 "../../src/Congruence_types.hh" 1
-40039: # 16 "../../src/Congruence_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Congruence;
-40039: 
-40039: }
-40039: # 30 "../../src/Constraint_defs.hh" 2
-40039: 
-40039: # 1 "../../src/Polyhedron_types.hh" 1
-40039: # 16 "../../src/Polyhedron_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Polyhedron;
-40039: 
-40039: }
-40039: # 32 "../../src/Constraint_defs.hh" 2
-40039: # 1 "../../src/termination_types.hh" 1
-40039: # 16 "../../src/termination_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Termination_Helpers;
-40039: 
-40039: }
-40039: # 33 "../../src/Constraint_defs.hh" 2
-40039: # 1 "../../src/Octagonal_Shape_types.hh" 1
-40039: # 16 "../../src/Octagonal_Shape_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: class Octagonal_Shape;
-40039: 
-40039: class Octagonal_Shape_Helper;
-40039: 
-40039: }
-40039: # 34 "../../src/Constraint_defs.hh" 2
-40039: # 1 "../../src/Grid_types.hh" 1
-40039: # 16 "../../src/Grid_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Grid;
-40039: 
-40039: }
-40039: # 35 "../../src/Constraint_defs.hh" 2
-40039: 
-40039: # 1 "../../src/Linear_Expression_defs.hh" 1
-40039: # 30 "../../src/Linear_Expression_defs.hh"
-40039: # 1 "../../src/Generator_types.hh" 1
-40039: # 16 "../../src/Generator_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Generator;
-40039: 
-40039: }
-40039: # 31 "../../src/Linear_Expression_defs.hh" 2
-40039: 
-40039: # 1 "../../src/Grid_Generator_types.hh" 1
-40039: # 16 "../../src/Grid_Generator_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Grid_Generator;
-40039: 
-40039: }
-40039: # 33 "../../src/Linear_Expression_defs.hh" 2
-40039: # 1 "../../src/Linear_System_types.hh" 1
-40039: # 16 "../../src/Linear_System_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Row>
-40039: class Linear_System;
-40039: 
-40039: template <typename Row>
-40039: class Linear_System_With_Bit_Matrix_iterator;
-40039: 
-40039: }
-40039: # 34 "../../src/Linear_Expression_defs.hh" 2
-40039: # 1 "../../src/Constraint_System_types.hh" 1
-40039: # 16 "../../src/Constraint_System_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Constraint_System;
-40039: class Constraint_System_const_iterator;
-40039: 
-40039: }
-40039: # 35 "../../src/Linear_Expression_defs.hh" 2
-40039: # 1 "../../src/Congruence_System_types.hh" 1
-40039: # 16 "../../src/Congruence_System_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Congruence_System;
-40039: 
-40039: }
-40039: # 36 "../../src/Linear_Expression_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: # 1 "../../src/PIP_Problem_types.hh" 1
-40039: # 16 "../../src/PIP_Problem_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: enum PIP_Problem_Status {
-40039: 
-40039:   UNFEASIBLE_PIP_PROBLEM,
-40039: 
-40039:   OPTIMIZED_PIP_PROBLEM
-40039: };
-40039: 
-40039: class PIP_Problem;
-40039: 
-40039: }
-40039: # 40 "../../src/Linear_Expression_defs.hh" 2
-40039: # 1 "../../src/BHRZ03_Certificate_types.hh" 1
-40039: # 16 "../../src/BHRZ03_Certificate_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class BHRZ03_Certificate;
-40039: 
-40039: }
-40039: # 41 "../../src/Linear_Expression_defs.hh" 2
-40039: # 1 "../../src/Scalar_Products_types.hh" 1
-40039: # 16 "../../src/Scalar_Products_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Scalar_Products;
-40039: class Topology_Adjusted_Scalar_Product_Sign;
-40039: class Topology_Adjusted_Scalar_Product_Assign;
-40039: 
-40039: }
-40039: # 42 "../../src/Linear_Expression_defs.hh" 2
-40039: # 1 "../../src/MIP_Problem_types.hh" 1
-40039: # 16 "../../src/MIP_Problem_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: enum MIP_Problem_Status {
-40039: 
-40039:   UNFEASIBLE_MIP_PROBLEM,
-40039: 
-40039:   UNBOUNDED_MIP_PROBLEM,
-40039: 
-40039:   OPTIMIZED_MIP_PROBLEM
-40039: };
-40039: 
-40039: class MIP_Problem;
-40039: 
-40039: }
-40039: # 43 "../../src/Linear_Expression_defs.hh" 2
-40039: 
-40039: # 1 "../../src/BD_Shape_types.hh" 1
-40039: # 16 "../../src/BD_Shape_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: class BD_Shape;
-40039: 
-40039: class BD_Shape_Helpers;
-40039: 
-40039: }
-40039: # 45 "../../src/Linear_Expression_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: # 1 "../../src/Expression_Adapter_defs.hh" 1
-40039: # 27 "../../src/Expression_Adapter_defs.hh"
-40039: # 1 "../../src/Expression_Adapter_types.hh" 1
-40039: # 16 "../../src/Expression_Adapter_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Expression_Adapter_Base;
-40039: 
-40039: template <typename T>
-40039: class Expression_Adapter;
-40039: 
-40039: template <typename T>
-40039: class Expression_Adapter_Transparent;
-40039: 
-40039: }
-40039: # 28 "../../src/Expression_Adapter_defs.hh" 2
-40039: # 36 "../../src/Expression_Adapter_defs.hh"
-40039: class Parma_Polyhedra_Library::Expression_Adapter_Base {
-40039: };
-40039: # 55 "../../src/Expression_Adapter_defs.hh"
-40039: template <typename T>
-40039: class Parma_Polyhedra_Library::Expression_Adapter
-40039:   : public Expression_Adapter_Base {
-40039: public:
-40039: 
-40039:   typedef Expression_Adapter<T> const_reference;
-40039: 
-40039:   typedef typename T::const_reference inner_type;
-40039: 
-40039:   typedef typename T::raw_type raw_type;
-40039: 
-40039: 
-40039:   inner_type inner() const;
-40039: 
-40039: 
-40039:   typedef typename raw_type::const_iterator const_iterator;
-40039: 
-40039: 
-40039:   Representation representation() const;
-40039: 
-40039: 
-40039:   const_iterator begin() const;
-40039: 
-40039: 
-40039:   const_iterator end() const;
-40039: 
-40039: 
-40039: 
-40039:   const_iterator lower_bound(Variable v) const;
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference coefficient(Variable v) const;
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference inhomogeneous_term() const;
-40039: 
-40039: 
-40039:   bool is_zero() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool all_homogeneous_terms_are_zero() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename Expression>
-40039:   bool is_equal_to(const Expression& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool all_zeroes(const Variables_Set& vars) const;
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference get(dimension_type i) const;
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference get(Variable v) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool all_zeroes(dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039:   dimension_type num_zeroes(dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Coefficient gcd(dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039: 
-40039:   dimension_type last_nonzero() const;
-40039: 
-40039: 
-40039: 
-40039:   dimension_type last_nonzero(dimension_type first, dimension_type last) const;
-40039: 
-40039: 
-40039: 
-40039:   dimension_type first_nonzero(dimension_type first, dimension_type last) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool all_zeroes_except(const Variables_Set& vars,
-40039:                          dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039:   void has_a_free_dimension_helper(std::set<dimension_type>& x) const;
-40039: 
-40039: 
-40039: 
-40039:   template <typename Expression>
-40039:   bool is_equal_to(const Expression& y,
-40039:                    dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039: 
-40039:   template <typename Expression>
-40039:   bool is_equal_to(const Expression& y,
-40039:                    Coefficient_traits::const_reference c1,
-40039:                    Coefficient_traits::const_reference c2,
-40039:                    dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039:   void get_row(Dense_Row& r) const;
-40039: 
-40039: 
-40039:   void get_row(Sparse_Row& r) const;
-40039: 
-40039: 
-40039: 
-40039:   template <typename Expression>
-40039:   bool have_a_common_variable(const Expression& y,
-40039:                               Variable first, Variable last) const;
-40039: 
-40039: protected:
-40039: 
-40039:   explicit Expression_Adapter(const raw_type& expr);
-40039: 
-40039:   const raw_type& raw_;
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: class Parma_Polyhedra_Library::Expression_Adapter_Transparent
-40039:   : public Expression_Adapter<T> {
-40039:   typedef Expression_Adapter<T> base_type;
-40039: public:
-40039: 
-40039:   typedef Expression_Adapter_Transparent<T> const_reference;
-40039: 
-40039:   typedef typename base_type::inner_type inner_type;
-40039: 
-40039:   typedef typename base_type::raw_type raw_type;
-40039: 
-40039: 
-40039:   typedef typename base_type::const_iterator const_iterator;
-40039: 
-40039: 
-40039:   explicit Expression_Adapter_Transparent(const raw_type& expr);
-40039: };
-40039: 
-40039: # 1 "../../src/Expression_Adapter_inlines.hh" 1
-40039: # 29 "../../src/Expression_Adapter_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: inline
-40039: Expression_Adapter<T>::Expression_Adapter(const raw_type& expr)
-40039:   : raw_(expr) {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Expression_Adapter<T>::inner_type
-40039: Expression_Adapter<T>::inner() const {
-40039:   return inner_type(raw_);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline Representation
-40039: Expression_Adapter<T>::representation() const {
-40039:   return inner().representation();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Expression_Adapter<T>::const_iterator
-40039: Expression_Adapter<T>::begin() const {
-40039:   return inner().begin();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Expression_Adapter<T>::const_iterator
-40039: Expression_Adapter<T>::end() const {
-40039:   return inner().end();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Expression_Adapter<T>::const_iterator
-40039: Expression_Adapter<T>::lower_bound(Variable v) const {
-40039:   return inner().lower_bound(v);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: Expression_Adapter<T>::space_dimension() const {
-40039:   return inner().space_dimension();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline Coefficient_traits::const_reference
-40039: Expression_Adapter<T>::coefficient(Variable v) const {
-40039:   return inner().coefficient(v);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline Coefficient_traits::const_reference
-40039: Expression_Adapter<T>::inhomogeneous_term() const {
-40039:   return inner().inhomogeneous_term();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Expression_Adapter<T>::is_zero() const {
-40039:   return inner().is_zero();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Expression_Adapter<T>::all_homogeneous_terms_are_zero() const {
-40039:   return inner().all_homogeneous_terms_are_zero();
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Expression>
-40039: inline bool
-40039: Expression_Adapter<T>::is_equal_to(const Expression& y) const {
-40039:   return inner().is_equal_to(y);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Expression_Adapter<T>
-40039: ::all_zeroes(const Variables_Set& vars) const {
-40039:   return inner().all_zeroes(vars);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline Coefficient_traits::const_reference
-40039: Expression_Adapter<T>::get(dimension_type i) const {
-40039:   return inner().get(i);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline Coefficient_traits::const_reference
-40039: Expression_Adapter<T>::get(Variable v) const {
-40039:   return inner().get(v);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Expression_Adapter<T>::all_zeroes(dimension_type start,
-40039:                                   dimension_type end) const {
-40039:   return inner().all_zeroes(start, end);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: Expression_Adapter<T>::num_zeroes(dimension_type start,
-40039:                                   dimension_type end) const {
-40039:   return inner().num_zeroes(start, end);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline Coefficient
-40039: Expression_Adapter<T>::gcd(dimension_type start,
-40039:                            dimension_type end) const {
-40039:   return inner().gcd(start, end);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: Expression_Adapter<T>::last_nonzero() const {
-40039:   return inner().last_nonzero();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: Expression_Adapter<T>::last_nonzero(dimension_type first,
-40039:                                     dimension_type last) const {
-40039:   return inner().last_nonzero(first, last);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: Expression_Adapter<T>::first_nonzero(dimension_type first,
-40039:                                      dimension_type last) const {
-40039:   return inner().first_nonzero(first, last);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Expression_Adapter<T>
-40039: ::all_zeroes_except(const Variables_Set& vars,
-40039:                     dimension_type start, dimension_type end) const {
-40039:   return inner().all_zeroes_except(vars, start, end);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Expression_Adapter<T>
-40039: ::has_a_free_dimension_helper(std::set<dimension_type>& x) const {
-40039:   inner().has_a_free_dimension_helper(x);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Expression>
-40039: inline bool
-40039: Expression_Adapter<T>
-40039: ::is_equal_to(const Expression& y,
-40039:               dimension_type start, dimension_type end) const {
-40039:   return inner().is_equal_to(y, start, end);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Expression>
-40039: inline bool
-40039: Expression_Adapter<T>
-40039: ::is_equal_to(const Expression& y,
-40039:               Coefficient_traits::const_reference c1,
-40039:               Coefficient_traits::const_reference c2,
-40039:               dimension_type start, dimension_type end) const {
-40039:   return inner().is_equal_to(y, c1, c2, start, end);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Expression_Adapter<T>::get_row(Dense_Row& r) const {
-40039:   inner().get_row(r);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Expression_Adapter<T>::get_row(Sparse_Row& r) const {
-40039:   inner().get_row(r);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Expression>
-40039: inline bool
-40039: Expression_Adapter<T>
-40039: ::have_a_common_variable(const Expression& y,
-40039:                          Variable first, Variable last) const {
-40039:   return inner().have_a_common_variable(y, first, last);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: Expression_Adapter_Transparent<T>
-40039: ::Expression_Adapter_Transparent(const raw_type& expr)
-40039:   : base_type(expr) {
-40039: }
-40039: 
-40039: }
-40039: # 215 "../../src/Expression_Adapter_defs.hh" 2
-40039: # 49 "../../src/Linear_Expression_defs.hh" 2
-40039: # 1 "../../src/Expression_Hide_Inhomo_types.hh" 1
-40039: # 16 "../../src/Expression_Hide_Inhomo_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: class Expression_Hide_Inhomo;
-40039: 
-40039: }
-40039: # 50 "../../src/Linear_Expression_defs.hh" 2
-40039: # 1 "../../src/Expression_Hide_Last_types.hh" 1
-40039: # 16 "../../src/Expression_Hide_Last_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: class Expression_Hide_Last;
-40039: 
-40039: }
-40039: # 51 "../../src/Linear_Expression_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression
-40039: operator+(const Linear_Expression& e1, const Linear_Expression& e2);
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression
-40039: operator+(Variable v, Variable w);
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression
-40039: operator+(Variable v, const Linear_Expression& e);
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression
-40039: operator+(const Linear_Expression& e, Variable v);
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression
-40039: operator+(Coefficient_traits::const_reference n, const Linear_Expression& e);
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression
-40039: operator+(const Linear_Expression& e, Coefficient_traits::const_reference n);
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression
-40039: operator+(const Linear_Expression& e);
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression
-40039: operator-(const Linear_Expression& e);
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression
-40039: operator-(const Linear_Expression& e1, const Linear_Expression& e2);
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression
-40039: operator-(Variable v, Variable w);
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression
-40039: operator-(Variable v, const Linear_Expression& e);
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression
-40039: operator-(const Linear_Expression& e, Variable v);
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression
-40039: operator-(Coefficient_traits::const_reference n, const Linear_Expression& e);
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression
-40039: operator-(const Linear_Expression& e, Coefficient_traits::const_reference n);
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression
-40039: operator*(Coefficient_traits::const_reference n, const Linear_Expression& e);
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression
-40039: operator*(const Linear_Expression& e, Coefficient_traits::const_reference n);
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression&
-40039: operator+=(Linear_Expression& e1, const Linear_Expression& e2);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression&
-40039: operator+=(Linear_Expression& e, Variable v);
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression&
-40039: operator+=(Linear_Expression& e, Coefficient_traits::const_reference n);
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression&
-40039: operator-=(Linear_Expression& e1, const Linear_Expression& e2);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression&
-40039: operator-=(Linear_Expression& e, Variable v);
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression&
-40039: operator-=(Linear_Expression& e, Coefficient_traits::const_reference n);
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression&
-40039: operator*=(Linear_Expression& e, Coefficient_traits::const_reference n);
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression&
-40039: operator/=(Linear_Expression& e, Coefficient_traits::const_reference n);
-40039: 
-40039: 
-40039: 
-40039: void
-40039: neg_assign(Linear_Expression& e);
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression&
-40039: add_mul_assign(Linear_Expression& e,
-40039:                Coefficient_traits::const_reference n, Variable v);
-40039: 
-40039: 
-40039: 
-40039: void add_mul_assign(Linear_Expression& e1,
-40039:                     Coefficient_traits::const_reference factor,
-40039:                     const Linear_Expression& e2);
-40039: 
-40039: 
-40039: 
-40039: void sub_mul_assign(Linear_Expression& e1,
-40039:                     Coefficient_traits::const_reference factor,
-40039:                     const Linear_Expression& e2);
-40039: 
-40039: 
-40039: 
-40039: Linear_Expression&
-40039: sub_mul_assign(Linear_Expression& e,
-40039:                Coefficient_traits::const_reference n, Variable v);
-40039: # 230 "../../src/Linear_Expression_defs.hh"
-40039: int compare(const Linear_Expression& x, const Linear_Expression& y);
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: std::ostream& operator<<(std::ostream& s, const Linear_Expression& e);
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 289 "../../src/Linear_Expression_defs.hh"
-40039: class Parma_Polyhedra_Library::Linear_Expression {
-40039: public:
-40039:   static const Representation default_representation = SPARSE;
-40039: 
-40039: 
-40039:   explicit Linear_Expression(Representation r = default_representation);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Linear_Expression(const Linear_Expression& e);
-40039: 
-40039: 
-40039:   Linear_Expression(const Linear_Expression& e, Representation r);
-40039: 
-40039: 
-40039:   typedef const Linear_Expression& const_reference;
-40039:   typedef Linear_Expression raw_type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename LE_Adapter>
-40039:   explicit
-40039:   Linear_Expression(const LE_Adapter& e,
-40039:                     typename
-40039:                     Enable_If<Is_Same_Or_Derived<Expression_Adapter_Base,
-40039:                                                  LE_Adapter>::value,
-40039:                               void*>::type = 0);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename LE_Adapter>
-40039:   Linear_Expression(const LE_Adapter& e,
-40039:                     Representation r,
-40039:                     typename
-40039:                     Enable_If<Is_Same_Or_Derived<Expression_Adapter_Base,
-40039:                                                  LE_Adapter>::value,
-40039:                               void*>::type = 0);
-40039: # 341 "../../src/Linear_Expression_defs.hh"
-40039:   template <typename LE_Adapter>
-40039:   explicit
-40039:   Linear_Expression(const LE_Adapter& e,
-40039:                     dimension_type space_dim,
-40039:                     typename
-40039:                     Enable_If<Is_Same_Or_Derived<Expression_Adapter_Base,
-40039:                                                  LE_Adapter>::value,
-40039:                               void*>::type = 0);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename LE_Adapter>
-40039:   Linear_Expression(const LE_Adapter& e,
-40039:                     dimension_type space_dim,
-40039:                     Representation r,
-40039:                     typename
-40039:                     Enable_If<Is_Same_Or_Derived<Expression_Adapter_Base,
-40039:                                                  LE_Adapter>::value,
-40039:                               void*>::type = 0);
-40039: 
-40039: 
-40039:   Linear_Expression& operator=(const Linear_Expression& e);
-40039: 
-40039: 
-40039:   ~Linear_Expression();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   explicit Linear_Expression(Coefficient_traits::const_reference n,
-40039:                              Representation r = default_representation);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Linear_Expression(Variable v, Representation r = default_representation);
-40039: 
-40039: 
-40039:   Representation representation() const;
-40039: 
-40039: 
-40039:   void set_representation(Representation r);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   class const_iterator {
-40039:   private:
-40039:   public:
-40039:     typedef std::bidirectional_iterator_tag iterator_category;
-40039:     typedef const Coefficient value_type;
-40039:     typedef std::ptrdiff_t difference_type;
-40039:     typedef value_type* pointer;
-40039:     typedef Coefficient_traits::const_reference reference;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     explicit const_iterator();
-40039: # 417 "../../src/Linear_Expression_defs.hh"
-40039:     const_iterator(const const_iterator& i);
-40039: 
-40039:     ~const_iterator();
-40039: # 428 "../../src/Linear_Expression_defs.hh"
-40039:     void m_swap(const_iterator& i);
-40039: # 437 "../../src/Linear_Expression_defs.hh"
-40039:     const_iterator& operator=(const const_iterator& i);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     const_iterator& operator++();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     const_iterator& operator--();
-40039: 
-40039: 
-40039:     reference operator*() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     Variable variable() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     bool operator==(const const_iterator& i) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     bool operator!=(const const_iterator& i) const;
-40039: 
-40039:   private:
-40039: 
-40039: 
-40039:     const_iterator(Linear_Expression_Interface::const_iterator_interface* i);
-40039: 
-40039:     Linear_Expression_Interface::const_iterator_interface* itr;
-40039: 
-40039:     friend class Linear_Expression;
-40039:   };
-40039: 
-40039: 
-40039: 
-40039:   const_iterator begin() const;
-40039: 
-40039: 
-40039: 
-40039:   const_iterator end() const;
-40039: 
-40039: 
-40039: 
-40039:   const_iterator lower_bound(Variable v) const;
-40039: 
-40039: 
-40039:   static dimension_type max_space_dimension();
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039:   void set_space_dimension(dimension_type n);
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference coefficient(Variable v) const;
-40039: 
-40039: 
-40039:   void set_coefficient(Variable v,
-40039:                        Coefficient_traits::const_reference n);
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference inhomogeneous_term() const;
-40039: 
-40039: 
-40039:   void set_inhomogeneous_term(Coefficient_traits::const_reference n);
-40039: # 535 "../../src/Linear_Expression_defs.hh"
-40039:   void linear_combine(const Linear_Expression& y, Variable v);
-40039: 
-40039: 
-40039: 
-40039:   void linear_combine(const Linear_Expression& y,
-40039:                       Coefficient_traits::const_reference c1,
-40039:                       Coefficient_traits::const_reference c2);
-40039: 
-40039: 
-40039: 
-40039:   void linear_combine_lax(const Linear_Expression& y,
-40039:                           Coefficient_traits::const_reference c1,
-40039:                           Coefficient_traits::const_reference c2);
-40039: 
-40039: 
-40039:   void swap_space_dimensions(Variable v1, Variable v2);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void remove_space_dimensions(const Variables_Set& vars);
-40039: 
-40039: 
-40039: 
-40039:   void shift_space_dimensions(Variable v, dimension_type n);
-40039: # 576 "../../src/Linear_Expression_defs.hh"
-40039:   void permute_space_dimensions(const std::vector<Variable>& cycle);
-40039: 
-40039: 
-40039:   bool is_zero() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool all_homogeneous_terms_are_zero() const;
-40039: 
-40039: 
-40039:   static void initialize();
-40039: 
-40039: 
-40039:   static void finalize();
-40039: 
-40039: 
-40039:   static const Linear_Expression& zero();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   void m_swap(Linear_Expression& y);
-40039: 
-40039: 
-40039:   Linear_Expression(const Linear_Expression& e, dimension_type space_dim);
-40039: 
-40039: 
-40039:   Linear_Expression(const Linear_Expression& e, dimension_type space_dim,
-40039:                     Representation r);
-40039: 
-40039: 
-40039: 
-40039:   bool is_equal_to(const Linear_Expression& x) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void normalize();
-40039: 
-40039: 
-40039: 
-40039:   void sign_normalize();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool all_zeroes(const Variables_Set& vars) const;
-40039: 
-40039: private:
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Linear_Expression* zero_p;
-40039: 
-40039:   Linear_Expression_Interface* impl;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Linear_Expression(dimension_type space_dim, bool,
-40039:                     Representation r = default_representation);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference get(dimension_type i) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void set(dimension_type i, Coefficient_traits::const_reference n);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference get(Variable v) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void set(Variable v, Coefficient_traits::const_reference n);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool all_zeroes(dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type num_zeroes(dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Coefficient gcd(dimension_type start, dimension_type end) const;
-40039: 
-40039:   void exact_div_assign(Coefficient_traits::const_reference c,
-40039:                         dimension_type start, dimension_type end);
-40039: # 725 "../../src/Linear_Expression_defs.hh"
-40039:   void linear_combine(const Linear_Expression& y, dimension_type i);
-40039: 
-40039: 
-40039: 
-40039:   void linear_combine(const Linear_Expression& y,
-40039:                       Coefficient_traits::const_reference c1,
-40039:                       Coefficient_traits::const_reference c2,
-40039:                       dimension_type start, dimension_type end);
-40039: 
-40039: 
-40039: 
-40039:   void linear_combine_lax(const Linear_Expression& y,
-40039:                           Coefficient_traits::const_reference c1,
-40039:                           Coefficient_traits::const_reference c2,
-40039:                           dimension_type start, dimension_type end);
-40039: 
-40039: 
-40039:   void mul_assign(Coefficient_traits::const_reference n,
-40039:                   dimension_type start, dimension_type end);
-40039: 
-40039: 
-40039: 
-40039:   dimension_type last_nonzero() const;
-40039: 
-40039: 
-40039: 
-40039:   dimension_type last_nonzero(dimension_type first, dimension_type last) const;
-40039: 
-40039: 
-40039: 
-40039:   dimension_type first_nonzero(dimension_type first, dimension_type last) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool all_zeroes_except(const Variables_Set& vars,
-40039:                          dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039:   void scalar_product_assign(Coefficient& result,
-40039:                              const Linear_Expression& y) const;
-40039: 
-40039: 
-40039:   void scalar_product_assign(Coefficient& result, const Linear_Expression& y,
-40039:                              dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039:   int scalar_product_sign(const Linear_Expression& y) const;
-40039: 
-40039: 
-40039: 
-40039:   int scalar_product_sign(const Linear_Expression& y,
-40039:                           dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039:   void has_a_free_dimension_helper(std::set<dimension_type>& x) const;
-40039: 
-40039: 
-40039:   bool is_equal_to(const Linear_Expression& x,
-40039:                    dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039: 
-40039:   bool is_equal_to(const Linear_Expression& x,
-40039:                    Coefficient_traits::const_reference c1,
-40039:                    Coefficient_traits::const_reference c2,
-40039:                    dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039:   void get_row(Dense_Row& r) const;
-40039: 
-40039: 
-40039:   void get_row(Sparse_Row& r) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool have_a_common_variable(const Linear_Expression& x,
-40039:                               Variable first, Variable last) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void negate(dimension_type first, dimension_type last);
-40039: 
-40039:   template <typename Row>
-40039:   friend class Linear_Expression_Impl;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   friend class Grid;
-40039:   friend class Congruence;
-40039:   friend class Polyhedron;
-40039:   friend class PIP_Tree_Node;
-40039:   friend class Grid_Generator;
-40039:   friend class Generator;
-40039:   friend class Constraint;
-40039:   friend class Constraint_System;
-40039:   friend class PIP_Problem;
-40039:   friend class BHRZ03_Certificate;
-40039:   friend class Scalar_Products;
-40039:   friend class MIP_Problem;
-40039:   friend class Box_Helpers;
-40039:   friend class Congruence_System;
-40039:   friend class BD_Shape_Helpers;
-40039:   friend class Octagonal_Shape_Helper;
-40039:   friend class Termination_Helpers;
-40039:   template <typename T>
-40039:   friend class BD_Shape;
-40039:   template <typename T>
-40039:   friend class Octagonal_Shape;
-40039:   template <typename T>
-40039:   friend class Linear_System;
-40039:   template <typename T>
-40039:   friend class Box;
-40039:   template <typename T>
-40039:   friend class Expression_Adapter;
-40039:   template <typename T>
-40039:   friend class Expression_Hide_Inhomo;
-40039:   template <typename T>
-40039:   friend class Expression_Hide_Last;
-40039: 
-40039:   friend Linear_Expression
-40039:   operator+(const Linear_Expression& e1, const Linear_Expression& e2);
-40039:   friend Linear_Expression
-40039:   operator+(Coefficient_traits::const_reference n, const Linear_Expression& e);
-40039:   friend Linear_Expression
-40039:   operator+(const Linear_Expression& e, Coefficient_traits::const_reference n);
-40039:   friend Linear_Expression
-40039:   operator+(Variable v, const Linear_Expression& e);
-40039:   friend Linear_Expression
-40039:   operator+(Variable v, Variable w);
-40039: 
-40039:   friend Linear_Expression
-40039:   operator-(const Linear_Expression& e);
-40039: 
-40039:   friend Linear_Expression
-40039:   operator-(const Linear_Expression& e1, const Linear_Expression& e2);
-40039:   friend Linear_Expression
-40039:   operator-(Variable v, Variable w);
-40039:   friend Linear_Expression
-40039:   operator-(Coefficient_traits::const_reference n, const Linear_Expression& e);
-40039:   friend Linear_Expression
-40039:   operator-(const Linear_Expression& e, Coefficient_traits::const_reference n);
-40039:   friend Linear_Expression
-40039:   operator-(Variable v, const Linear_Expression& e);
-40039:   friend Linear_Expression
-40039:   operator-(const Linear_Expression& e, Variable v);
-40039: 
-40039:   friend Linear_Expression
-40039:   operator*(Coefficient_traits::const_reference n, const Linear_Expression& e);
-40039:   friend Linear_Expression
-40039:   operator*(const Linear_Expression& e, Coefficient_traits::const_reference n);
-40039: 
-40039:   friend Linear_Expression&
-40039:   operator+=(Linear_Expression& e1, const Linear_Expression& e2);
-40039:   friend Linear_Expression&
-40039:   operator+=(Linear_Expression& e, Variable v);
-40039:   friend Linear_Expression&
-40039:   operator+=(Linear_Expression& e, Coefficient_traits::const_reference n);
-40039: 
-40039:   friend Linear_Expression&
-40039:   operator-=(Linear_Expression& e1, const Linear_Expression& e2);
-40039:   friend Linear_Expression&
-40039:   operator-=(Linear_Expression& e, Variable v);
-40039:   friend Linear_Expression&
-40039:   operator-=(Linear_Expression& e, Coefficient_traits::const_reference n);
-40039: 
-40039:   friend Linear_Expression&
-40039:   operator*=(Linear_Expression& e, Coefficient_traits::const_reference n);
-40039:   friend Linear_Expression&
-40039:   operator/=(Linear_Expression& e, Coefficient_traits::const_reference n);
-40039: 
-40039:   friend void
-40039:   neg_assign(Linear_Expression& e);
-40039: 
-40039:   friend Linear_Expression&
-40039:   add_mul_assign(Linear_Expression& e,
-40039:                  Coefficient_traits::const_reference n, Variable v);
-40039:   friend Linear_Expression&
-40039:   sub_mul_assign(Linear_Expression& e,
-40039:                  Coefficient_traits::const_reference n, Variable v);
-40039: 
-40039:   friend void
-40039:   add_mul_assign(Linear_Expression& e1,
-40039:                  Coefficient_traits::const_reference factor,
-40039:                  const Linear_Expression& e2);
-40039:   friend void
-40039:   sub_mul_assign(Linear_Expression& e1,
-40039:                  Coefficient_traits::const_reference factor,
-40039:                  const Linear_Expression& e2);
-40039: 
-40039:   friend int
-40039:   compare(const Linear_Expression& x, const Linear_Expression& y);
-40039: 
-40039:   friend std::ostream&
-40039:   Parma_Polyhedra_Library::IO_Operators
-40039:   ::operator<<(std::ostream& s, const Linear_Expression& e);
-40039: };
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: void swap(Linear_Expression& x, Linear_Expression& y);
-40039: 
-40039: 
-40039: 
-40039: void swap(Linear_Expression::const_iterator& x,
-40039:           Linear_Expression::const_iterator& y);
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Linear_Expression_inlines.hh" 1
-40039: # 29 "../../src/Linear_Expression_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline Linear_Expression&
-40039: Linear_Expression::operator=(const Linear_Expression& e) {
-40039:   Linear_Expression tmp = e;
-40039:   swap(*this, tmp);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline
-40039: Linear_Expression::~Linear_Expression() {
-40039:   delete impl;
-40039: }
-40039: 
-40039: inline Representation
-40039: Linear_Expression::representation() const {
-40039:   return impl->representation();
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Linear_Expression::space_dimension() const {
-40039:   return impl->space_dimension();
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression::set_space_dimension(dimension_type n) {
-40039:   impl->set_space_dimension(n);
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: Linear_Expression::coefficient(Variable v) const {
-40039:   return impl->coefficient(v);
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression
-40039: ::set_coefficient(Variable v, Coefficient_traits::const_reference n) {
-40039:   impl->set_coefficient(v, n);
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: Linear_Expression::inhomogeneous_term() const {
-40039:   return impl->inhomogeneous_term();
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression
-40039: ::set_inhomogeneous_term(Coefficient_traits::const_reference n) {
-40039:   impl->set_inhomogeneous_term(n);
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression::swap_space_dimensions(Variable v1, Variable v2) {
-40039:   impl->swap_space_dimensions(v1, v2);
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression::shift_space_dimensions(Variable v, dimension_type n) {
-40039:   impl->shift_space_dimensions(v, n);
-40039: }
-40039: 
-40039: inline bool
-40039: Linear_Expression::is_zero() const {
-40039:   return impl->is_zero();
-40039: }
-40039: 
-40039: inline bool
-40039: Linear_Expression::all_homogeneous_terms_are_zero() const {
-40039:   return impl->all_homogeneous_terms_are_zero();
-40039: }
-40039: 
-40039: inline const Linear_Expression&
-40039: Linear_Expression::zero() {
-40039:   ((void) 0);
-40039:   return *zero_p;
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Linear_Expression::external_memory_in_bytes() const {
-40039:   return impl->total_memory_in_bytes();
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Linear_Expression::total_memory_in_bytes() const {
-40039:   return external_memory_in_bytes() + sizeof(*this);
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression
-40039: operator+(const Linear_Expression& e) {
-40039:   return e;
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression
-40039: operator+(const Linear_Expression& e, Coefficient_traits::const_reference n) {
-40039:   Linear_Expression x = e;
-40039:   x += n;
-40039:   return x;
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression
-40039: operator+(const Linear_Expression& e, const Variable v) {
-40039:   Linear_Expression x = e;
-40039:   x += v;
-40039:   return x;
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression
-40039: operator-(const Linear_Expression& e, Coefficient_traits::const_reference n) {
-40039:   Linear_Expression x = e;
-40039:   x -= n;
-40039:   return x;
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression
-40039: operator-(const Variable v, const Variable w) {
-40039:   const dimension_type v_space_dim = v.space_dimension();
-40039:   const dimension_type w_space_dim = w.space_dimension();
-40039:   const dimension_type space_dim = std::max(v_space_dim, w_space_dim);
-40039:   if (space_dim > Linear_Expression::max_space_dimension()) {
-40039:     throw std::length_error("Linear_Expression "
-40039:                             "PPL::operator+(v, w):\n"
-40039:                             "v or w exceed the maximum allowed "
-40039:                             "space dimension.");
-40039:   }
-40039:   if (v_space_dim >= w_space_dim) {
-40039:     Linear_Expression e(v);
-40039:     e -= w;
-40039:     return e;
-40039:   }
-40039:   else {
-40039:     Linear_Expression e(w.space_dimension(), true);
-40039:     e -= w;
-40039:     e += v;
-40039:     return e;
-40039:   }
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression
-40039: operator*(const Linear_Expression& e, Coefficient_traits::const_reference n) {
-40039:   Linear_Expression x = e;
-40039:   x *= n;
-40039:   return x;
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression&
-40039: operator+=(Linear_Expression& e, Coefficient_traits::const_reference n) {
-40039:   *e.impl += n;
-40039:   return e;
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression&
-40039: operator-=(Linear_Expression& e, Coefficient_traits::const_reference n) {
-40039:   *e.impl -= n;
-40039:   return e;
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression::m_swap(Linear_Expression& y) {
-40039:   using std::swap;
-40039:   swap(impl, y.impl);
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression::normalize() {
-40039:   impl->normalize();
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression::ascii_dump(std::ostream& s) const {
-40039:   impl->ascii_dump(s);
-40039: }
-40039: 
-40039: inline bool
-40039: Linear_Expression::ascii_load(std::istream& s) {
-40039:   return impl->ascii_load(s);
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression::remove_space_dimensions(const Variables_Set& vars) {
-40039:   impl->remove_space_dimensions(vars);
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression::permute_space_dimensions(const std::vector<Variable>& cycle) {
-40039:   impl->permute_space_dimensions(cycle);
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression
-40039: operator+(const Linear_Expression& e1, const Linear_Expression& e2) {
-40039:   if (e1.space_dimension() >= e2.space_dimension()) {
-40039:     Linear_Expression e = e1;
-40039:     e += e2;
-40039:     return e;
-40039:   }
-40039:   else {
-40039:     Linear_Expression e = e2;
-40039:     e += e1;
-40039:     return e;
-40039:   }
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression
-40039: operator+(const Variable v, const Linear_Expression& e) {
-40039:   return e + v;
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression
-40039: operator+(Coefficient_traits::const_reference n,
-40039:                const Linear_Expression& e) {
-40039:   return e + n;
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression
-40039: operator+(const Variable v, const Variable w) {
-40039:   const dimension_type v_space_dim = v.space_dimension();
-40039:   const dimension_type w_space_dim = w.space_dimension();
-40039:   const dimension_type space_dim = std::max(v_space_dim, w_space_dim);
-40039:   if (space_dim > Linear_Expression::max_space_dimension()) {
-40039:     throw std::length_error("Linear_Expression "
-40039:                             "PPL::operator+(v, w):\n"
-40039:                             "v or w exceed the maximum allowed "
-40039:                             "space dimension.");
-40039:   }
-40039:   if (v_space_dim >= w_space_dim) {
-40039:     Linear_Expression e(v);
-40039:     e += w;
-40039:     return e;
-40039:   }
-40039:   else {
-40039:     Linear_Expression e(w);
-40039:     e += v;
-40039:     return e;
-40039:   }
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression
-40039: operator-(const Linear_Expression& e) {
-40039:   Linear_Expression r(e);
-40039:   neg_assign(r);
-40039:   return r;
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression
-40039: operator-(const Linear_Expression& e1, const Linear_Expression& e2) {
-40039:   if (e1.space_dimension() >= e2.space_dimension()) {
-40039:     Linear_Expression e = e1;
-40039:     e -= e2;
-40039:     return e;
-40039:   }
-40039:   else {
-40039:     Linear_Expression e = e2;
-40039:     neg_assign(e);
-40039:     e += e1;
-40039:     return e;
-40039:   }
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression
-40039: operator-(const Variable v, const Linear_Expression& e) {
-40039:   Linear_Expression result(e, std::max(v.space_dimension(), e.space_dimension()));
-40039:   result.negate(0, e.space_dimension() + 1);
-40039:   result += v;
-40039:   return result;
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression
-40039: operator-(const Linear_Expression& e, const Variable v) {
-40039:   Linear_Expression result(e, std::max(v.space_dimension(), e.space_dimension()));
-40039:   result -= v;
-40039:   return result;
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression
-40039: operator-(Coefficient_traits::const_reference n,
-40039:                const Linear_Expression& e) {
-40039:   Linear_Expression result(e);
-40039:   neg_assign(result);
-40039:   result += n;
-40039:   return result;
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression
-40039: operator*(Coefficient_traits::const_reference n,
-40039:                const Linear_Expression& e) {
-40039:   return e * n;
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression&
-40039: operator+=(Linear_Expression& e1, const Linear_Expression& e2) {
-40039:   *e1.impl += *e2.impl;
-40039:   return e1;
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression&
-40039: operator+=(Linear_Expression& e, const Variable v) {
-40039:   *e.impl += v;
-40039:   return e;
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression&
-40039: operator-=(Linear_Expression& e1, const Linear_Expression& e2) {
-40039:   *e1.impl -= *e2.impl;
-40039:   return e1;
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression&
-40039: operator-=(Linear_Expression& e, const Variable v) {
-40039:   *e.impl -= v;
-40039:   return e;
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression&
-40039: operator*=(Linear_Expression& e, Coefficient_traits::const_reference n) {
-40039:   *e.impl *= n;
-40039:   return e;
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression&
-40039: operator/=(Linear_Expression& e, Coefficient_traits::const_reference n) {
-40039:   *e.impl /= n;
-40039:   return e;
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: neg_assign(Linear_Expression& e) {
-40039:   e.impl->negate();
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression&
-40039: add_mul_assign(Linear_Expression& e,
-40039:                Coefficient_traits::const_reference n,
-40039:                const Variable v) {
-40039:   e.impl->add_mul_assign(n, v);
-40039:   return e;
-40039: }
-40039: 
-40039: 
-40039: inline Linear_Expression&
-40039: sub_mul_assign(Linear_Expression& e,
-40039:                     Coefficient_traits::const_reference n,
-40039:                     const Variable v) {
-40039:   e.impl->sub_mul_assign(n, v);
-40039:   return e;
-40039: }
-40039: 
-40039: inline void
-40039: add_mul_assign(Linear_Expression& e1,
-40039:                Coefficient_traits::const_reference factor,
-40039:                const Linear_Expression& e2) {
-40039:   e1.impl->add_mul_assign(factor, *e2.impl);
-40039: }
-40039: 
-40039: inline void
-40039: sub_mul_assign(Linear_Expression& e1,
-40039:                     Coefficient_traits::const_reference factor,
-40039:                     const Linear_Expression& e2) {
-40039:   e1.impl->sub_mul_assign(factor, *e2.impl);
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: Linear_Expression::get(dimension_type i) const {
-40039:   return impl->get(i);
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression::set(dimension_type i,
-40039:                        Coefficient_traits::const_reference n) {
-40039:   impl->set(i, n);
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: Linear_Expression::get(Variable v) const {
-40039:   return impl->get(v.space_dimension());
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression::set(Variable v,
-40039:                        Coefficient_traits::const_reference n) {
-40039:   impl->set(v.space_dimension(), n);
-40039: }
-40039: 
-40039: inline bool
-40039: Linear_Expression::all_zeroes(dimension_type start, dimension_type end) const {
-40039:   return impl->all_zeroes(start, end);
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Linear_Expression::num_zeroes(dimension_type start, dimension_type end) const {
-40039:   return impl->num_zeroes(start, end);
-40039: }
-40039: 
-40039: inline Coefficient
-40039: Linear_Expression::gcd(dimension_type start, dimension_type end) const {
-40039:   return impl->gcd(start, end);
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression
-40039: ::exact_div_assign(Coefficient_traits::const_reference c,
-40039:                    dimension_type start, dimension_type end) {
-40039:   impl->exact_div_assign(c, start, end);
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression
-40039: ::mul_assign(Coefficient_traits::const_reference c,
-40039:              dimension_type start, dimension_type end) {
-40039:   impl->mul_assign(c, start, end);
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression::sign_normalize() {
-40039:   impl->sign_normalize();
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression::negate(dimension_type first, dimension_type last) {
-40039:   impl->negate(first, last);
-40039: }
-40039: 
-40039: inline bool
-40039: Linear_Expression::all_zeroes(const Variables_Set& vars) const {
-40039:   return impl->all_zeroes(vars);
-40039: }
-40039: 
-40039: inline bool
-40039: Linear_Expression::all_zeroes_except(const Variables_Set& vars,
-40039:                                      dimension_type start,
-40039:                                      dimension_type end) const {
-40039:   return impl->all_zeroes_except(vars, start, end);
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Linear_Expression::last_nonzero() const {
-40039:   return impl->last_nonzero();
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression
-40039: ::scalar_product_assign(Coefficient& result, const Linear_Expression& y) const {
-40039:   scalar_product_assign(result, y, 0, space_dimension() + 1);
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression
-40039: ::scalar_product_assign(Coefficient& result, const Linear_Expression& y,
-40039:                         dimension_type start, dimension_type end) const {
-40039:   impl->scalar_product_assign(result, *(y.impl), start, end);
-40039: }
-40039: 
-40039: inline int
-40039: Linear_Expression
-40039: ::scalar_product_sign(const Linear_Expression& y) const {
-40039:   return scalar_product_sign(y, 0, space_dimension() + 1);
-40039: }
-40039: 
-40039: inline int
-40039: Linear_Expression
-40039: ::scalar_product_sign(const Linear_Expression& y,
-40039:                       dimension_type start, dimension_type end) const {
-40039:   return impl->scalar_product_sign(*(y.impl), start, end);
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Linear_Expression
-40039: ::first_nonzero(dimension_type first, dimension_type last) const {
-40039:   return impl->first_nonzero(first, last);
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Linear_Expression
-40039: ::last_nonzero(dimension_type first, dimension_type last) const {
-40039:   return impl->last_nonzero(first, last);
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression
-40039: ::has_a_free_dimension_helper(std::set<dimension_type>& x) const {
-40039:   return impl->has_a_free_dimension_helper(x);
-40039: }
-40039: 
-40039: inline bool
-40039: Linear_Expression
-40039: ::is_equal_to(const Linear_Expression& x,
-40039:               dimension_type start, dimension_type end) const {
-40039:   return impl->is_equal_to(*(x.impl), start, end);
-40039: }
-40039: 
-40039: inline bool
-40039: Linear_Expression
-40039: ::is_equal_to(const Linear_Expression& x,
-40039:               Coefficient_traits::const_reference c1,
-40039:               Coefficient_traits::const_reference c2,
-40039:               dimension_type start, dimension_type end) const {
-40039:   return impl->is_equal_to(*(x.impl), c1, c2, start, end);
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression
-40039: ::get_row(Dense_Row& r) const {
-40039:   return impl->get_row(r);
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression
-40039: ::get_row(Sparse_Row& r) const {
-40039:   return impl->get_row(r);
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression
-40039: ::linear_combine(const Linear_Expression& y, dimension_type i) {
-40039:   impl->linear_combine(*y.impl, i);
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression
-40039: ::linear_combine(const Linear_Expression& y,
-40039:                  Coefficient_traits::const_reference c1,
-40039:                  Coefficient_traits::const_reference c2) {
-40039:   impl->linear_combine(*y.impl, c1, c2);
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression
-40039: ::linear_combine_lax(const Linear_Expression& y,
-40039:                      Coefficient_traits::const_reference c1,
-40039:                      Coefficient_traits::const_reference c2) {
-40039:   impl->linear_combine_lax(*y.impl, c1, c2);
-40039: }
-40039: 
-40039: inline int
-40039: compare(const Linear_Expression& x, const Linear_Expression& y) {
-40039:   return x.impl->compare(*y.impl);
-40039: }
-40039: 
-40039: inline bool
-40039: Linear_Expression::is_equal_to(const Linear_Expression& x) const {
-40039:   return impl->is_equal_to(*x.impl);
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression::linear_combine(const Linear_Expression& y,
-40039:                                   Coefficient_traits::const_reference c1,
-40039:                                   Coefficient_traits::const_reference c2,
-40039:                                   dimension_type start,
-40039:                                   dimension_type end) {
-40039:   impl->linear_combine(*y.impl, c1, c2, start, end);
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression::linear_combine_lax(const Linear_Expression& y,
-40039:                                       Coefficient_traits::const_reference c1,
-40039:                                       Coefficient_traits::const_reference c2,
-40039:                                       dimension_type start,
-40039:                                       dimension_type end) {
-40039:   impl->linear_combine_lax(*y.impl, c1, c2, start, end);
-40039: }
-40039: 
-40039: inline bool
-40039: Linear_Expression
-40039: ::have_a_common_variable(const Linear_Expression& x,
-40039:                          Variable first, Variable last) const {
-40039:   return impl->have_a_common_variable(*(x.impl), first, last);
-40039: }
-40039: 
-40039: inline
-40039: Linear_Expression::const_iterator
-40039: ::const_iterator()
-40039:   : itr(
-40039: # 624 "../../src/Linear_Expression_inlines.hh" 3 4
-40039:        __null
-40039: # 624 "../../src/Linear_Expression_inlines.hh"
-40039:            ) {
-40039: }
-40039: 
-40039: inline
-40039: Linear_Expression::const_iterator
-40039: ::const_iterator(const const_iterator& i)
-40039:   : itr(i.itr->clone()) {
-40039: }
-40039: 
-40039: inline
-40039: Linear_Expression::const_iterator
-40039: ::~const_iterator() {
-40039: 
-40039:   delete itr;
-40039: }
-40039: 
-40039: inline void
-40039: Linear_Expression::const_iterator::m_swap(const_iterator& i) {
-40039:   using std::swap;
-40039:   swap(itr, i.itr);
-40039: }
-40039: 
-40039: inline Linear_Expression::const_iterator&
-40039: Linear_Expression::const_iterator
-40039: ::operator=(const const_iterator& i) {
-40039:   const_iterator tmp = i;
-40039:   using std::swap;
-40039:   swap(*this, tmp);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline Linear_Expression::const_iterator&
-40039: Linear_Expression::const_iterator
-40039: ::operator++() {
-40039:   ((void) 0);
-40039:   ++(*itr);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline Linear_Expression::const_iterator&
-40039: Linear_Expression::const_iterator
-40039: ::operator--() {
-40039:   ((void) 0);
-40039:   --(*itr);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline Linear_Expression::const_iterator::reference
-40039: Linear_Expression::const_iterator
-40039: ::operator*() const {
-40039:   ((void) 0);
-40039:   return *(*itr);
-40039: }
-40039: 
-40039: inline Variable
-40039: Linear_Expression::const_iterator
-40039: ::variable() const {
-40039:   ((void) 0);
-40039:   return itr->variable();
-40039: }
-40039: 
-40039: inline bool
-40039: Linear_Expression::const_iterator
-40039: ::operator==(const const_iterator& i) const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   return *itr == *(i.itr);
-40039: }
-40039: 
-40039: inline bool
-40039: Linear_Expression::const_iterator
-40039: ::operator!=(const const_iterator& i) const {
-40039:   return !(*this == i);
-40039: }
-40039: 
-40039: inline
-40039: Linear_Expression::const_iterator
-40039: ::const_iterator(Linear_Expression_Interface::const_iterator_interface* i)
-40039:   : itr(i) {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline Linear_Expression::const_iterator
-40039: Linear_Expression
-40039: ::begin() const {
-40039:   return const_iterator(impl->begin());
-40039: }
-40039: 
-40039: inline Linear_Expression::const_iterator
-40039: Linear_Expression
-40039: ::end() const {
-40039:   return const_iterator(impl->end());
-40039: }
-40039: 
-40039: inline Linear_Expression::const_iterator
-40039: Linear_Expression
-40039: ::lower_bound(Variable v) const {
-40039:   return const_iterator(impl->lower_bound(v));
-40039: }
-40039: 
-40039: template <typename LE_Adapter>
-40039: inline
-40039: Linear_Expression
-40039: ::Linear_Expression(const LE_Adapter& e,
-40039:                     typename Enable_If<Is_Same_Or_Derived<Expression_Adapter_Base,
-40039:                                                           LE_Adapter>::value,
-40039:                                        void*>::type)
-40039:   : impl(
-40039: # 731 "../../src/Linear_Expression_inlines.hh" 3 4
-40039:         __null
-40039: # 731 "../../src/Linear_Expression_inlines.hh"
-40039:             ) {
-40039:   Linear_Expression tmp(e.representation());
-40039:   tmp.set_space_dimension(e.space_dimension());
-40039:   tmp.set_inhomogeneous_term(e.inhomogeneous_term());
-40039:   for (typename LE_Adapter::const_iterator i = e.begin(),
-40039:          i_end = e.end(); i != i_end; ++i) {
-40039:     add_mul_assign(tmp, *i, i.variable());
-40039:   }
-40039:   using std::swap;
-40039:   swap(impl, tmp.impl);
-40039: }
-40039: 
-40039: template <typename LE_Adapter>
-40039: inline
-40039: Linear_Expression
-40039: ::Linear_Expression(const LE_Adapter& e,
-40039:                     Representation r,
-40039:                     typename Enable_If<Is_Same_Or_Derived<Expression_Adapter_Base,
-40039:                                                           LE_Adapter>::value,
-40039:                                        void*>::type)
-40039:   : impl(
-40039: # 751 "../../src/Linear_Expression_inlines.hh" 3 4
-40039:         __null
-40039: # 751 "../../src/Linear_Expression_inlines.hh"
-40039:             ) {
-40039:   Linear_Expression tmp(r);
-40039:   tmp.set_space_dimension(e.space_dimension());
-40039:   tmp.set_inhomogeneous_term(e.inhomogeneous_term());
-40039:   for (typename LE_Adapter::const_iterator i = e.begin(),
-40039:          i_end = e.end(); i != i_end; ++i) {
-40039:     add_mul_assign(tmp, *i, i.variable());
-40039:   }
-40039:   using std::swap;
-40039:   swap(impl, tmp.impl);
-40039: }
-40039: 
-40039: template <typename LE_Adapter>
-40039: inline
-40039: Linear_Expression
-40039: ::Linear_Expression(const LE_Adapter& e,
-40039:                     dimension_type space_dim,
-40039:                     typename Enable_If<Is_Same_Or_Derived<Expression_Adapter_Base,
-40039:                                                           LE_Adapter>::value,
-40039:                                        void*>::type)
-40039:   : impl(
-40039: # 771 "../../src/Linear_Expression_inlines.hh" 3 4
-40039:         __null
-40039: # 771 "../../src/Linear_Expression_inlines.hh"
-40039:             ) {
-40039:   Linear_Expression tmp(e.representation());
-40039:   tmp.set_space_dimension(space_dim);
-40039:   tmp.set_inhomogeneous_term(e.inhomogeneous_term());
-40039:   typedef typename LE_Adapter::const_iterator itr_t;
-40039:   itr_t i_end;
-40039:   if (space_dim <= e.space_dimension()) {
-40039:     i_end = e.lower_bound(Variable(space_dim));
-40039:   }
-40039:   else {
-40039:     i_end = e.end();
-40039:   }
-40039:   for (itr_t i = e.begin(); i != i_end; ++i) {
-40039:     add_mul_assign(tmp, *i, i.variable());
-40039:   }
-40039:   using std::swap;
-40039:   swap(impl, tmp.impl);
-40039: }
-40039: 
-40039: template <typename LE_Adapter>
-40039: inline
-40039: Linear_Expression
-40039: ::Linear_Expression(const LE_Adapter& e,
-40039:                     dimension_type space_dim,
-40039:                     Representation r,
-40039:                     typename Enable_If<Is_Same_Or_Derived<Expression_Adapter_Base,
-40039:                                                           LE_Adapter>::value,
-40039:                                        void*>::type)
-40039:   : impl(
-40039: # 799 "../../src/Linear_Expression_inlines.hh" 3 4
-40039:         __null
-40039: # 799 "../../src/Linear_Expression_inlines.hh"
-40039:             ) {
-40039:   Linear_Expression tmp(r);
-40039:   tmp.set_space_dimension(space_dim);
-40039:   tmp.set_inhomogeneous_term(e.inhomogeneous_term());
-40039:   typedef typename LE_Adapter::const_iterator itr_t;
-40039:   itr_t i_end;
-40039:   if (space_dim <= e.space_dimension()) {
-40039:     i_end = e.lower_bound(Variable(space_dim));
-40039:   }
-40039:   else {
-40039:     i_end = e.end();
-40039:   }
-40039:   for (itr_t i = e.begin(); i != i_end; ++i) {
-40039:     add_mul_assign(tmp, *i, i.variable());
-40039:   }
-40039:   using std::swap;
-40039:   swap(impl, tmp.impl);
-40039: }
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: inline std::ostream&
-40039: operator<<(std::ostream& s, const Linear_Expression& e) {
-40039:   e.impl->print(s);
-40039:   return s;
-40039: }
-40039: 
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: swap(Linear_Expression& x, Linear_Expression& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: swap(Linear_Expression::const_iterator& x,
-40039:      Linear_Expression::const_iterator& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 946 "../../src/Linear_Expression_defs.hh" 2
-40039: # 37 "../../src/Constraint_defs.hh" 2
-40039: 
-40039: # 1 "../../src/Topology_types.hh" 1
-40039: # 16 "../../src/Topology_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: enum Topology {
-40039:   NECESSARILY_CLOSED = 0,
-40039:   NOT_NECESSARILY_CLOSED = 1
-40039: };
-40039: 
-40039: }
-40039: # 39 "../../src/Constraint_defs.hh" 2
-40039: # 1 "../../src/Expression_Hide_Last_defs.hh" 1
-40039: # 36 "../../src/Expression_Hide_Last_defs.hh"
-40039: template <typename T>
-40039: class Parma_Polyhedra_Library::Expression_Hide_Last
-40039:   : public Expression_Adapter<T> {
-40039:   typedef Expression_Adapter<T> base_type;
-40039: public:
-40039: 
-40039:   typedef Expression_Hide_Last<T> const_reference;
-40039: 
-40039:   typedef typename base_type::inner_type inner_type;
-40039: 
-40039:   typedef typename base_type::raw_type raw_type;
-40039: 
-40039: 
-40039:   typedef typename base_type::const_iterator const_iterator;
-40039: 
-40039: 
-40039:   explicit Expression_Hide_Last(const raw_type& expr, bool hide_last);
-40039: 
-40039: 
-40039:   const_iterator end() const;
-40039: 
-40039: 
-40039: 
-40039:   const_iterator lower_bound(Variable v) const;
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference coefficient(Variable v) const;
-40039: 
-40039: 
-40039:   bool is_zero() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool all_homogeneous_terms_are_zero() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename Expression>
-40039:   bool is_equal_to(const Expression& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool all_zeroes(const Variables_Set& vars) const;
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference get(dimension_type i) const;
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference get(Variable v) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool all_zeroes(dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039:   dimension_type num_zeroes(dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Coefficient gcd(dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039: 
-40039:   dimension_type last_nonzero() const;
-40039: 
-40039: 
-40039: 
-40039:   dimension_type last_nonzero(dimension_type first, dimension_type last) const;
-40039: 
-40039: 
-40039: 
-40039:   dimension_type first_nonzero(dimension_type first, dimension_type last) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool all_zeroes_except(const Variables_Set& vars,
-40039:                          dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039:   void has_a_free_dimension_helper(std::set<dimension_type>& x) const;
-40039: 
-40039: 
-40039: 
-40039:   template <typename Expression>
-40039:   bool is_equal_to(const Expression& y,
-40039:                    dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039: 
-40039:   template <typename Expression>
-40039:   bool is_equal_to(const Expression& y,
-40039:                    Coefficient_traits::const_reference c1,
-40039:                    Coefficient_traits::const_reference c2,
-40039:                    dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039:   void get_row(Dense_Row& r) const;
-40039: 
-40039: 
-40039:   void get_row(Sparse_Row& r) const;
-40039: 
-40039: 
-40039: 
-40039:   template <typename Expression>
-40039:   bool have_a_common_variable(const Expression& y,
-40039:                               Variable first, Variable last) const;
-40039: 
-40039: private:
-40039: 
-40039:   const bool hide_last_;
-40039: };
-40039: 
-40039: # 1 "../../src/Expression_Hide_Last_inlines.hh" 1
-40039: # 29 "../../src/Expression_Hide_Last_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: inline
-40039: Expression_Hide_Last<T>::Expression_Hide_Last(const raw_type& expr,
-40039:                                               const bool hide_last)
-40039:   : base_type(expr), hide_last_(hide_last) {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: Expression_Hide_Last<T>::space_dimension() const {
-40039:   dimension_type dim = this->inner().space_dimension();
-40039:   if (hide_last_) {
-40039:     ((void) 0);
-40039:     --dim;
-40039:   }
-40039:   return dim;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Expression_Hide_Last<T>::const_iterator
-40039: Expression_Hide_Last<T>::end() const {
-40039:   if (hide_last_) {
-40039:     return this->inner().lower_bound(Variable(space_dimension()));
-40039:   }
-40039:   else {
-40039:     return this->inner().end();
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Expression_Hide_Last<T>::const_iterator
-40039: Expression_Hide_Last<T>::lower_bound(Variable v) const {
-40039:   ((void) 0);
-40039:   return this->inner().lower_bound(v);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline Coefficient_traits::const_reference
-40039: Expression_Hide_Last<T>::coefficient(Variable v) const {
-40039:   ((void) 0);
-40039:   return this->inner().coefficient(v);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Expression_Hide_Last<T>::is_zero() const {
-40039:   return this->inner().all_zeroes(0, space_dimension() + 1);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Expression_Hide_Last<T>::all_homogeneous_terms_are_zero() const {
-40039:   return this->inner().all_zeroes(1, space_dimension() + 1);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Expression>
-40039: inline bool
-40039: Expression_Hide_Last<T>
-40039: ::is_equal_to(const Expression& y) const {
-40039:   const dimension_type x_dim = space_dimension();
-40039:   const dimension_type y_dim = y.space_dimension();
-40039:   if (x_dim != y_dim) {
-40039:     return false;
-40039:   }
-40039:   return is_equal_to(y, 0, x_dim + 1);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Expression_Hide_Last<T>::all_zeroes(const Variables_Set& vars) const {
-40039:   ((void) 0);
-40039:   return this->inner().all_zeroes(vars);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline Coefficient_traits::const_reference
-40039: Expression_Hide_Last<T>::get(dimension_type i) const {
-40039:   ((void) 0);
-40039:   return this->inner().get(i);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline Coefficient_traits::const_reference
-40039: Expression_Hide_Last<T>::get(Variable v) const {
-40039:   ((void) 0);
-40039:   return this->inner().get(v);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Expression_Hide_Last<T>::all_zeroes(dimension_type start,
-40039:                                     dimension_type end) const {
-40039:   ((void) 0);
-40039:   return this->inner().all_zeroes(start, end);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: Expression_Hide_Last<T>::num_zeroes(dimension_type start,
-40039:                                     dimension_type end) const {
-40039:   ((void) 0);
-40039:   return this->inner().num_zeroes(start, end);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline Coefficient
-40039: Expression_Hide_Last<T>::gcd(dimension_type start,
-40039:                              dimension_type end) const {
-40039:   ((void) 0);
-40039:   return this->inner().gcd(start, end);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: Expression_Hide_Last<T>::last_nonzero() const {
-40039:   return this->inner().last_nonzero(0, space_dimension() + 1);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: Expression_Hide_Last<T>::last_nonzero(dimension_type first,
-40039:                                       dimension_type last) const {
-40039:   ((void) 0);
-40039:   return this->inner().last_nonzero(first, last);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: Expression_Hide_Last<T>::first_nonzero(dimension_type first,
-40039:                                        dimension_type last) const {
-40039:   ((void) 0);
-40039:   return this->inner().first_nonzero(first, last);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Expression_Hide_Last<T>
-40039: ::all_zeroes_except(const Variables_Set& vars,
-40039:                     dimension_type start, dimension_type end) const {
-40039:   ((void) 0);
-40039:   return this->inner().all_zeroes_except(vars, start, end);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Expression_Hide_Last<T>
-40039: ::has_a_free_dimension_helper(std::set<dimension_type>& x) const {
-40039:   if (x.empty()) {
-40039:     return;
-40039:   }
-40039:   ((void) 0);
-40039:   this->inner().has_a_free_dimension_helper(x);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Expression>
-40039: inline bool
-40039: Expression_Hide_Last<T>
-40039: ::is_equal_to(const Expression& y,
-40039:               dimension_type start, dimension_type end) const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   return this->inner().is_equal_to(y, start, end);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Expression>
-40039: inline bool
-40039: Expression_Hide_Last<T>
-40039: ::is_equal_to(const Expression& y,
-40039:               Coefficient_traits::const_reference c1,
-40039:               Coefficient_traits::const_reference c2,
-40039:               dimension_type start, dimension_type end) const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   return this->inner().is_equal_to(y, c1, c2, start, end);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Expression_Hide_Last<T>::get_row(Dense_Row& r) const {
-40039:   this->inner().get_row(r);
-40039:   if (hide_last_) {
-40039:     ((void) 0);
-40039:     r.resize(r.size() - 1);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Expression_Hide_Last<T>::get_row(Sparse_Row& r) const {
-40039:   this->inner().get_row(r);
-40039:   if (hide_last_) {
-40039:     ((void) 0);
-40039:     r.resize(r.size() - 1);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Expression>
-40039: inline bool
-40039: Expression_Hide_Last<T>
-40039: ::have_a_common_variable(const Expression& y,
-40039:                          Variable first, Variable last) const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   return this->inner().have_a_common_variable(y, first, last);
-40039: }
-40039: 
-40039: }
-40039: # 164 "../../src/Expression_Hide_Last_defs.hh" 2
-40039: # 40 "../../src/Constraint_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: Constraint
-40039: operator<(const Linear_Expression& e1, const Linear_Expression& e2);
-40039: 
-40039: 
-40039: 
-40039: Constraint
-40039: operator<(Variable v1, Variable v2);
-40039: 
-40039: 
-40039: 
-40039: Constraint
-40039: operator<(const Linear_Expression& e, Coefficient_traits::const_reference n);
-40039: 
-40039: 
-40039: 
-40039: Constraint
-40039: operator<(Coefficient_traits::const_reference n, const Linear_Expression& e);
-40039: 
-40039: 
-40039: 
-40039: Constraint
-40039: operator>(const Linear_Expression& e1, const Linear_Expression& e2);
-40039: 
-40039: 
-40039: 
-40039: Constraint
-40039: operator>(Variable v1, Variable v2);
-40039: 
-40039: 
-40039: 
-40039: Constraint
-40039: operator>(const Linear_Expression& e, Coefficient_traits::const_reference n);
-40039: 
-40039: 
-40039: 
-40039: Constraint
-40039: operator>(Coefficient_traits::const_reference n, const Linear_Expression& e);
-40039: 
-40039: 
-40039: 
-40039: Constraint
-40039: operator==(const Linear_Expression& e1, const Linear_Expression& e2);
-40039: 
-40039: 
-40039: 
-40039: Constraint
-40039: operator==(Variable v1, Variable v2);
-40039: 
-40039: 
-40039: 
-40039: Constraint
-40039: operator==(const Linear_Expression& e, Coefficient_traits::const_reference n);
-40039: 
-40039: 
-40039: 
-40039: Constraint
-40039: operator==(Coefficient_traits::const_reference n, const Linear_Expression& e);
-40039: 
-40039: 
-40039: 
-40039: Constraint
-40039: operator<=(const Linear_Expression& e1, const Linear_Expression& e2);
-40039: 
-40039: 
-40039: 
-40039: Constraint
-40039: operator<=(Variable v1, Variable v2);
-40039: 
-40039: 
-40039: 
-40039: Constraint
-40039: operator<=(const Linear_Expression& e, Coefficient_traits::const_reference n);
-40039: 
-40039: 
-40039: 
-40039: Constraint
-40039: operator<=(Coefficient_traits::const_reference n, const Linear_Expression& e);
-40039: 
-40039: 
-40039: 
-40039: Constraint
-40039: operator>=(const Linear_Expression& e1, const Linear_Expression& e2);
-40039: 
-40039: 
-40039: 
-40039: Constraint
-40039: operator>=(Variable v1, Variable v2);
-40039: 
-40039: 
-40039: 
-40039: Constraint
-40039: operator>=(const Linear_Expression& e, Coefficient_traits::const_reference n);
-40039: 
-40039: 
-40039: 
-40039: Constraint
-40039: operator>=(Coefficient_traits::const_reference n, const Linear_Expression& e);
-40039: # 182 "../../src/Constraint_defs.hh"
-40039: int compare(const Constraint& x, const Constraint& y);
-40039: 
-40039: }
-40039: # 284 "../../src/Constraint_defs.hh"
-40039: class Parma_Polyhedra_Library::Constraint {
-40039: public:
-40039: 
-40039: 
-40039:   enum Type {
-40039: 
-40039:     EQUALITY,
-40039: 
-40039:     NONSTRICT_INEQUALITY,
-40039: 
-40039:     STRICT_INEQUALITY
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Representation default_representation = SPARSE;
-40039: 
-40039: 
-40039:   explicit Constraint(Representation r = default_representation);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Constraint(const Constraint& c);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Constraint(const Constraint& c, dimension_type space_dim);
-40039: 
-40039: 
-40039:   Constraint(const Constraint& c, Representation r);
-40039: 
-40039: 
-40039:   Constraint(const Constraint& c, dimension_type space_dim,
-40039:              Representation r);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   explicit Constraint(const Congruence& cg,
-40039:                       Representation r = default_representation);
-40039: 
-40039: 
-40039:   ~Constraint();
-40039: 
-40039: 
-40039:   Representation representation() const;
-40039: 
-40039: 
-40039:   void set_representation(Representation r);
-40039: 
-40039: 
-40039:   Constraint& operator=(const Constraint& c);
-40039: 
-40039: 
-40039:   static dimension_type max_space_dimension();
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039: 
-40039:   void set_space_dimension(dimension_type space_dim);
-40039: 
-40039: 
-40039:   void swap_space_dimensions(Variable v1, Variable v2);
-40039: # 371 "../../src/Constraint_defs.hh"
-40039:   bool remove_space_dimensions(const Variables_Set& vars);
-40039: # 385 "../../src/Constraint_defs.hh"
-40039:   void permute_space_dimensions(const std::vector<Variable>& cycle);
-40039: 
-40039: 
-40039: 
-40039:   void shift_space_dimensions(Variable v, dimension_type n);
-40039: 
-40039: 
-40039:   Type type() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_equality() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_inequality() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_nonstrict_inequality() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_strict_inequality() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference coefficient(Variable v) const;
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference inhomogeneous_term() const;
-40039: 
-40039: 
-40039:   static void initialize();
-40039: 
-40039: 
-40039:   static void finalize();
-40039: 
-40039: 
-40039:   static const Constraint& zero_dim_false();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Constraint& zero_dim_positivity();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: # 463 "../../src/Constraint_defs.hh"
-40039:   bool is_tautological() const;
-40039: # 477 "../../src/Constraint_defs.hh"
-40039:   bool is_inconsistent() const;
-40039: # 487 "../../src/Constraint_defs.hh"
-40039:   bool is_equivalent_to(const Constraint& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_equal_to(const Constraint& y) const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   void m_swap(Constraint& y);
-40039: 
-40039: 
-40039:   static const Constraint& epsilon_geq_zero();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Constraint& epsilon_leq_one();
-40039: 
-40039: 
-40039:   typedef Expression_Hide_Last<Linear_Expression> expr_type;
-40039: 
-40039:   expr_type expression() const;
-40039: 
-40039: private:
-40039: 
-40039: 
-40039:   enum Kind {
-40039:     LINE_OR_EQUALITY = 0,
-40039:     RAY_OR_POINT_OR_INEQUALITY = 1
-40039:   };
-40039: 
-40039:   Linear_Expression expr;
-40039: 
-40039:   Kind kind_;
-40039: 
-40039:   Topology topology_;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Constraint* zero_dim_false_p;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Constraint* zero_dim_positivity_p;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Constraint* epsilon_geq_zero_p;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Constraint* epsilon_leq_one_p;
-40039: 
-40039: 
-40039:   Constraint(dimension_type space_dim, Kind kind, Topology topology,
-40039:              Representation r = default_representation);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Constraint(Linear_Expression& e, Kind kind, Topology topology);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Constraint(Linear_Expression& e, Type type, Topology topology);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_line_or_equality() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_ray_or_point_or_inequality() const;
-40039: 
-40039: 
-40039:   void set_is_line_or_equality();
-40039: 
-40039: 
-40039:   void set_is_ray_or_point_or_inequality();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Topology topology() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_not_necessarily_closed() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_necessarily_closed() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void set_topology(Topology x);
-40039: 
-40039: 
-40039:   void set_necessarily_closed();
-40039: 
-40039: 
-40039:   void set_not_necessarily_closed();
-40039: # 642 "../../src/Constraint_defs.hh"
-40039:   void set_space_dimension_no_ok(dimension_type space_dim);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void
-40039:   throw_invalid_argument(const char* method, const char* message) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void
-40039:   throw_dimension_incompatible(const char* method,
-40039:                                const char* name_var,
-40039:                                Variable v) const;
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference epsilon_coefficient() const;
-40039: 
-40039: 
-40039:   void set_epsilon_coefficient(Coefficient_traits::const_reference n);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void mark_as_necessarily_closed();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void mark_as_not_necessarily_closed();
-40039: 
-40039: 
-40039:   void set_is_equality();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void set_is_inequality();
-40039: # 703 "../../src/Constraint_defs.hh"
-40039:   void linear_combine(const Constraint& y, dimension_type i);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void sign_normalize();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void strong_normalize();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool check_strong_normalized() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static Constraint construct_epsilon_geq_zero();
-40039: 
-40039:   friend int
-40039:   compare(const Constraint& x, const Constraint& y);
-40039: 
-40039:   friend class Linear_System<Constraint>;
-40039:   friend class Constraint_System;
-40039:   friend class Polyhedron;
-40039:   friend class Scalar_Products;
-40039:   friend class Topology_Adjusted_Scalar_Product_Sign;
-40039:   friend class Termination_Helpers;
-40039:   friend class Grid;
-40039:   template <typename T>
-40039:   friend class Octagonal_Shape;
-40039: 
-40039:   friend Constraint
-40039:   operator<(const Linear_Expression& e1, const Linear_Expression& e2);
-40039: 
-40039:   friend Constraint
-40039:   operator<(Variable v1, Variable v2);
-40039: 
-40039:   friend Constraint
-40039:   operator<(const Linear_Expression& e, Coefficient_traits::const_reference n);
-40039: 
-40039:   friend Constraint
-40039:   operator<(Coefficient_traits::const_reference n, const Linear_Expression& e);
-40039: 
-40039:   friend Constraint
-40039:   operator>(const Linear_Expression& e1, const Linear_Expression& e2);
-40039: 
-40039:   friend Constraint
-40039:   operator>(Variable v1, Variable v2);
-40039: 
-40039:   friend Constraint
-40039:   operator>(const Linear_Expression& e, Coefficient_traits::const_reference n);
-40039: 
-40039:   friend Constraint
-40039:   operator>(Coefficient_traits::const_reference n, const Linear_Expression& e);
-40039: 
-40039:   friend Constraint
-40039:   operator==(const Linear_Expression& e1, const Linear_Expression& e2);
-40039: 
-40039:   friend Constraint
-40039:   operator==(Variable v1, Variable v2);
-40039: 
-40039:   friend Constraint
-40039:   operator==(const Linear_Expression& e, Coefficient_traits::const_reference n);
-40039: 
-40039:   friend Constraint
-40039:   operator==(Coefficient_traits::const_reference n, const Linear_Expression& e);
-40039: 
-40039:   friend Constraint
-40039:   operator<=(const Linear_Expression& e1, const Linear_Expression& e2);
-40039: 
-40039:   friend Constraint
-40039:   operator<=(Variable v1, Variable v2);
-40039: 
-40039:   friend Constraint
-40039:   operator<=(const Linear_Expression& e, Coefficient_traits::const_reference n);
-40039: 
-40039:   friend Constraint
-40039:   operator<=(Coefficient_traits::const_reference n, const Linear_Expression& e);
-40039: 
-40039:   friend Constraint
-40039:   operator>=(const Linear_Expression& e1, const Linear_Expression& e2);
-40039: 
-40039:   friend Constraint
-40039:   operator>=(Variable v1, Variable v2);
-40039: 
-40039:   friend Constraint
-40039:   operator>=(const Linear_Expression& e, Coefficient_traits::const_reference n);
-40039: 
-40039:   friend Constraint
-40039:   operator>=(Coefficient_traits::const_reference n, const Linear_Expression& e);
-40039: };
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: std::ostream& operator<<(std::ostream& s, const Constraint& c);
-40039: 
-40039: 
-40039: 
-40039: std::ostream& operator<<(std::ostream& s, const Constraint::Type& t);
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: bool
-40039: operator==(const Constraint& x, const Constraint& y);
-40039: 
-40039: 
-40039: 
-40039: bool
-40039: operator!=(const Constraint& x, const Constraint& y);
-40039: 
-40039: 
-40039: void swap(Constraint& x, Constraint& y);
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Constraint_inlines.hh" 1
-40039: # 29 "../../src/Constraint_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline bool
-40039: Constraint::is_necessarily_closed() const {
-40039:   return (topology_ == NECESSARILY_CLOSED);
-40039: }
-40039: 
-40039: inline bool
-40039: Constraint::is_not_necessarily_closed() const {
-40039:   return !is_necessarily_closed();
-40039: }
-40039: 
-40039: inline Constraint::expr_type
-40039: Constraint::expression() const {
-40039:   return expr_type(expr, is_not_necessarily_closed());
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Constraint::space_dimension() const {
-40039:   return expression().space_dimension();
-40039: }
-40039: 
-40039: inline void
-40039: Constraint::shift_space_dimensions(Variable v, dimension_type n) {
-40039:   expr.shift_space_dimensions(v, n);
-40039: }
-40039: 
-40039: inline bool
-40039: Constraint::is_line_or_equality() const {
-40039:   return (kind_ == LINE_OR_EQUALITY);
-40039: }
-40039: 
-40039: inline bool
-40039: Constraint::is_ray_or_point_or_inequality() const {
-40039:   return (kind_ == RAY_OR_POINT_OR_INEQUALITY);
-40039: }
-40039: 
-40039: inline Topology
-40039: Constraint::topology() const {
-40039:   return topology_;
-40039: }
-40039: 
-40039: inline void
-40039: Constraint::set_is_line_or_equality() {
-40039:   kind_ = LINE_OR_EQUALITY;
-40039: }
-40039: 
-40039: inline void
-40039: Constraint::set_is_ray_or_point_or_inequality() {
-40039:   kind_ = RAY_OR_POINT_OR_INEQUALITY;
-40039: }
-40039: 
-40039: inline void
-40039: Constraint::set_topology(Topology x) {
-40039:   if (topology() == x) {
-40039:     return;
-40039:   }
-40039:   if (topology() == NECESSARILY_CLOSED) {
-40039: 
-40039:     expr.set_space_dimension(expr.space_dimension() + 1);
-40039:   }
-40039:   else {
-40039:     ((void) 0);
-40039:     expr.set_space_dimension(expr.space_dimension() - 1);
-40039:   }
-40039:   topology_ = x;
-40039: }
-40039: 
-40039: inline void
-40039: Constraint::mark_as_necessarily_closed() {
-40039:   ((void) 0);
-40039:   topology_ = NECESSARILY_CLOSED;
-40039: }
-40039: 
-40039: inline void
-40039: Constraint::mark_as_not_necessarily_closed() {
-40039:   ((void) 0);
-40039:   topology_ = NOT_NECESSARILY_CLOSED;
-40039: }
-40039: 
-40039: inline void
-40039: Constraint::set_necessarily_closed() {
-40039:   set_topology(NECESSARILY_CLOSED);
-40039: }
-40039: 
-40039: inline void
-40039: Constraint::set_not_necessarily_closed() {
-40039:   set_topology(NOT_NECESSARILY_CLOSED);
-40039: }
-40039: 
-40039: inline
-40039: Constraint::Constraint(Representation r)
-40039:   : expr(r),
-40039:     kind_(RAY_OR_POINT_OR_INEQUALITY),
-40039:     topology_(NECESSARILY_CLOSED) {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Constraint::Constraint(dimension_type space_dim, Kind kind, Topology topology,
-40039:                        Representation r)
-40039:   : expr(r),
-40039:     kind_(kind),
-40039:     topology_(topology) {
-40039:   expr.set_space_dimension(space_dim + 1);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Constraint::Constraint(Linear_Expression& e, Kind kind, Topology topology)
-40039:   : kind_(kind),
-40039:     topology_(topology) {
-40039:   ((void) 0);
-40039:   swap(expr, e);
-40039:   if (topology == NOT_NECESSARILY_CLOSED) {
-40039: 
-40039:     expr.set_space_dimension(expr.space_dimension() + 1);
-40039:   }
-40039:   strong_normalize();
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Constraint::Constraint(Linear_Expression& e, Type type, Topology topology)
-40039:   : topology_(topology) {
-40039:   ((void) 0);
-40039:   swap(expr, e);
-40039:   if (topology == NOT_NECESSARILY_CLOSED) {
-40039:     expr.set_space_dimension(expr.space_dimension() + 1);
-40039:   }
-40039:   if (type == EQUALITY) {
-40039:     kind_ = LINE_OR_EQUALITY;
-40039:   }
-40039:   else {
-40039:     kind_ = RAY_OR_POINT_OR_INEQUALITY;
-40039:   }
-40039:   strong_normalize();
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Constraint::Constraint(const Constraint& c)
-40039:   : expr(c.expr),
-40039:     kind_(c.kind_),
-40039:     topology_(c.topology_) {
-40039: 
-40039: }
-40039: 
-40039: inline
-40039: Constraint::Constraint(const Constraint& c, Representation r)
-40039:   : expr(c.expr, r),
-40039:     kind_(c.kind_),
-40039:     topology_(c.topology_) {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Constraint::Constraint(const Constraint& c, const dimension_type space_dim)
-40039:   : expr(c.expr, c.is_necessarily_closed() ? space_dim : (space_dim + 1)),
-40039:     kind_(c.kind_), topology_(c.topology_) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Constraint::Constraint(const Constraint& c, const dimension_type space_dim,
-40039:                        Representation r)
-40039:   : expr(c.expr, c.is_necessarily_closed() ? space_dim : (space_dim + 1), r),
-40039:     kind_(c.kind_), topology_(c.topology_) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Constraint::~Constraint() {
-40039: }
-40039: 
-40039: inline Constraint&
-40039: Constraint::operator=(const Constraint& c) {
-40039:   Constraint tmp = c;
-40039:   swap(*this, tmp);
-40039: 
-40039:   return *this;
-40039: }
-40039: 
-40039: inline Representation
-40039: Constraint::representation() const {
-40039:   return expr.representation();
-40039: }
-40039: 
-40039: inline void
-40039: Constraint::set_representation(Representation r) {
-40039:   expr.set_representation(r);
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Constraint::max_space_dimension() {
-40039:   return Linear_Expression::max_space_dimension();
-40039: }
-40039: 
-40039: inline void
-40039: Constraint::set_space_dimension_no_ok(dimension_type space_dim) {
-40039:   const dimension_type old_expr_space_dim = expr.space_dimension();
-40039:   if (topology() == NECESSARILY_CLOSED) {
-40039:     expr.set_space_dimension(space_dim);
-40039:   }
-40039:   else {
-40039:     const dimension_type old_space_dim = space_dimension();
-40039:     if (space_dim > old_space_dim) {
-40039:       expr.set_space_dimension(space_dim + 1);
-40039:       expr.swap_space_dimensions(Variable(space_dim), Variable(old_space_dim));
-40039:     }
-40039:     else {
-40039:       expr.swap_space_dimensions(Variable(space_dim), Variable(old_space_dim));
-40039:       expr.set_space_dimension(space_dim + 1);
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039:   if (expr.space_dimension() < old_expr_space_dim) {
-40039:     strong_normalize();
-40039:   }
-40039: }
-40039: 
-40039: inline void
-40039: Constraint::set_space_dimension(dimension_type space_dim) {
-40039:   set_space_dimension_no_ok(space_dim);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline bool
-40039: Constraint::remove_space_dimensions(const Variables_Set& vars) {
-40039:   expr.remove_space_dimensions(vars);
-40039:   return true;
-40039: }
-40039: 
-40039: inline bool
-40039: Constraint::is_equality() const {
-40039:   return is_line_or_equality();
-40039: }
-40039: 
-40039: inline bool
-40039: Constraint::is_inequality() const {
-40039:   return is_ray_or_point_or_inequality();
-40039: }
-40039: 
-40039: inline Constraint::Type
-40039: Constraint::type() const {
-40039:   if (is_equality()) {
-40039:     return EQUALITY;
-40039:   }
-40039:   if (is_necessarily_closed()) {
-40039:     return NONSTRICT_INEQUALITY;
-40039:   }
-40039:   if (epsilon_coefficient() < 0) {
-40039:     return STRICT_INEQUALITY;
-40039:   }
-40039:   else {
-40039:     return NONSTRICT_INEQUALITY;
-40039:   }
-40039: }
-40039: 
-40039: inline bool
-40039: Constraint::is_nonstrict_inequality() const {
-40039:   return type() == NONSTRICT_INEQUALITY;
-40039: }
-40039: 
-40039: inline bool
-40039: Constraint::is_strict_inequality() const {
-40039:   return type() == STRICT_INEQUALITY;
-40039: }
-40039: 
-40039: inline void
-40039: Constraint::set_is_equality() {
-40039:   set_is_line_or_equality();
-40039: }
-40039: 
-40039: inline void
-40039: Constraint::set_is_inequality() {
-40039:   set_is_ray_or_point_or_inequality();
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: Constraint::coefficient(const Variable v) const {
-40039:   if (v.space_dimension() > space_dimension()) {
-40039:     throw_dimension_incompatible("coefficient(v)", "v", v);
-40039:   }
-40039:   return expr.coefficient(v);
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: Constraint::inhomogeneous_term() const {
-40039:   return expr.inhomogeneous_term();
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Constraint::external_memory_in_bytes() const {
-40039:   return expr.external_memory_in_bytes();
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Constraint::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: inline void
-40039: Constraint::strong_normalize() {
-40039:   expr.normalize();
-40039:   sign_normalize();
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: operator==(const Constraint& x, const Constraint& y) {
-40039:   return x.is_equivalent_to(y);
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: operator!=(const Constraint& x, const Constraint& y) {
-40039:   return !x.is_equivalent_to(y);
-40039: }
-40039: 
-40039: 
-40039: inline Constraint
-40039: operator==(const Linear_Expression& e1, const Linear_Expression& e2) {
-40039:   Linear_Expression diff(e1,
-40039:                          std::max(e1.space_dimension(), e2.space_dimension()),
-40039:                          Constraint::default_representation);
-40039:   diff -= e2;
-40039:   return Constraint(diff, Constraint::EQUALITY, NECESSARILY_CLOSED);
-40039: }
-40039: 
-40039: 
-40039: inline Constraint
-40039: operator==(Variable v1, Variable v2) {
-40039:   if (v1.space_dimension() > v2.space_dimension()) {
-40039:     swap(v1, v2);
-40039:   }
-40039:   ((void) 0);
-40039: 
-40039:   Linear_Expression diff(v1, Constraint::default_representation);
-40039:   diff -= v2;
-40039:   return Constraint(diff, Constraint::EQUALITY, NECESSARILY_CLOSED);
-40039: }
-40039: 
-40039: 
-40039: inline Constraint
-40039: operator>=(const Linear_Expression& e1, const Linear_Expression& e2) {
-40039:   Linear_Expression diff(e1,
-40039:                          std::max(e1.space_dimension(), e2.space_dimension()),
-40039:                          Constraint::default_representation);
-40039:   diff -= e2;
-40039:   return Constraint(diff, Constraint::NONSTRICT_INEQUALITY, NECESSARILY_CLOSED);
-40039: }
-40039: 
-40039: 
-40039: inline Constraint
-40039: operator>=(const Variable v1, const Variable v2) {
-40039:   Linear_Expression diff(Constraint::default_representation);
-40039:   diff.set_space_dimension(std::max(v1.space_dimension(),
-40039:                                     v2.space_dimension()));
-40039:   diff += v1;
-40039:   diff -= v2;
-40039:   return Constraint(diff, Constraint::NONSTRICT_INEQUALITY, NECESSARILY_CLOSED);
-40039: }
-40039: 
-40039: 
-40039: inline Constraint
-40039: operator>(const Linear_Expression& e1, const Linear_Expression& e2) {
-40039:   Linear_Expression diff(e1, Constraint::default_representation);
-40039:   diff -= e2;
-40039:   Constraint c(diff, Constraint::STRICT_INEQUALITY, NOT_NECESSARILY_CLOSED);
-40039: 
-40039: 
-40039:   c.set_epsilon_coefficient(-1);
-40039:   ((void) 0);
-40039: 
-40039:   return c;
-40039: }
-40039: 
-40039: 
-40039: inline Constraint
-40039: operator>(const Variable v1, const Variable v2) {
-40039:   Linear_Expression diff(Constraint::default_representation);
-40039:   diff.set_space_dimension(std::max(v1.space_dimension(),
-40039:                                     v2.space_dimension()));
-40039:   diff += v1;
-40039:   diff -= v2;
-40039:   Constraint c(diff, Constraint::STRICT_INEQUALITY, NOT_NECESSARILY_CLOSED);
-40039: 
-40039:   c.set_epsilon_coefficient(-1);
-40039:   ((void) 0);
-40039: 
-40039:   return c;
-40039: }
-40039: 
-40039: 
-40039: inline Constraint
-40039: operator==(Coefficient_traits::const_reference n, const Linear_Expression& e) {
-40039:   Linear_Expression diff(e, Constraint::default_representation);
-40039:   neg_assign(diff);
-40039:   diff += n;
-40039:   return Constraint(diff, Constraint::EQUALITY, NECESSARILY_CLOSED);
-40039: }
-40039: 
-40039: 
-40039: inline Constraint
-40039: operator>=(Coefficient_traits::const_reference n, const Linear_Expression& e) {
-40039:   Linear_Expression diff(e, Constraint::default_representation);
-40039:   neg_assign(diff);
-40039:   diff += n;
-40039:   return Constraint(diff, Constraint::NONSTRICT_INEQUALITY, NECESSARILY_CLOSED);
-40039: }
-40039: 
-40039: 
-40039: inline Constraint
-40039: operator>(Coefficient_traits::const_reference n, const Linear_Expression& e) {
-40039:   Linear_Expression diff(e, Constraint::default_representation);
-40039:   neg_assign(diff);
-40039:   diff += n;
-40039:   Constraint c(diff, Constraint::STRICT_INEQUALITY, NOT_NECESSARILY_CLOSED);
-40039: 
-40039: 
-40039:   c.set_epsilon_coefficient(-1);
-40039:   ((void) 0);
-40039: 
-40039:   return c;
-40039: }
-40039: 
-40039: 
-40039: inline Constraint
-40039: operator==(const Linear_Expression& e, Coefficient_traits::const_reference n) {
-40039:   Linear_Expression diff(e, Constraint::default_representation);
-40039:   diff -= n;
-40039:   return Constraint(diff, Constraint::EQUALITY, NECESSARILY_CLOSED);
-40039: }
-40039: 
-40039: 
-40039: inline Constraint
-40039: operator>=(const Linear_Expression& e, Coefficient_traits::const_reference n) {
-40039:   Linear_Expression diff(e, Constraint::default_representation);
-40039:   diff -= n;
-40039:   return Constraint(diff, Constraint::NONSTRICT_INEQUALITY, NECESSARILY_CLOSED);
-40039: }
-40039: 
-40039: 
-40039: inline Constraint
-40039: operator>(const Linear_Expression& e, Coefficient_traits::const_reference n) {
-40039:   Linear_Expression diff(e, Constraint::default_representation);
-40039:   diff -= n;
-40039:   Constraint c(diff, Constraint::STRICT_INEQUALITY, NOT_NECESSARILY_CLOSED);
-40039: 
-40039: 
-40039:   c.set_epsilon_coefficient(-1);
-40039:   ((void) 0);
-40039: 
-40039:   return c;
-40039: }
-40039: 
-40039: 
-40039: inline Constraint
-40039: operator<=(const Linear_Expression& e1, const Linear_Expression& e2) {
-40039:   return e2 >= e1;
-40039: }
-40039: 
-40039: 
-40039: inline Constraint
-40039: operator<=(const Variable v1, const Variable v2) {
-40039:   return v2 >= v1;
-40039: }
-40039: 
-40039: 
-40039: inline Constraint
-40039: operator<=(Coefficient_traits::const_reference n, const Linear_Expression& e) {
-40039:   return e >= n;
-40039: }
-40039: 
-40039: 
-40039: inline Constraint
-40039: operator<=(const Linear_Expression& e, Coefficient_traits::const_reference n) {
-40039:   return n >= e;
-40039: }
-40039: 
-40039: 
-40039: inline Constraint
-40039: operator<(const Linear_Expression& e1, const Linear_Expression& e2) {
-40039:   return e2 > e1;
-40039: }
-40039: 
-40039: 
-40039: inline Constraint
-40039: operator<(const Variable v1, const Variable v2) {
-40039:   return v2 > v1;
-40039: }
-40039: 
-40039: 
-40039: inline Constraint
-40039: operator<(Coefficient_traits::const_reference n, const Linear_Expression& e) {
-40039:   return e > n;
-40039: }
-40039: 
-40039: 
-40039: inline Constraint
-40039: operator<(const Linear_Expression& e, Coefficient_traits::const_reference n) {
-40039:   return n > e;
-40039: }
-40039: 
-40039: inline const Constraint&
-40039: Constraint::zero_dim_false() {
-40039:   ((void) 0);
-40039:   return *zero_dim_false_p;
-40039: }
-40039: 
-40039: inline const Constraint&
-40039: Constraint::zero_dim_positivity() {
-40039:   ((void) 0);
-40039:   return *zero_dim_positivity_p;
-40039: }
-40039: 
-40039: inline const Constraint&
-40039: Constraint::epsilon_geq_zero() {
-40039:   ((void) 0);
-40039:   return *epsilon_geq_zero_p;
-40039: }
-40039: 
-40039: inline const Constraint&
-40039: Constraint::epsilon_leq_one() {
-40039:   ((void) 0);
-40039:   return *epsilon_leq_one_p;
-40039: }
-40039: 
-40039: inline void
-40039: Constraint::m_swap(Constraint& y) {
-40039:   using std::swap;
-40039:   swap(expr, y.expr);
-40039:   swap(kind_, y.kind_);
-40039:   swap(topology_, y.topology_);
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: Constraint::epsilon_coefficient() const {
-40039:   ((void) 0);
-40039:   return expr.coefficient(Variable(expr.space_dimension() - 1));
-40039: }
-40039: 
-40039: inline void
-40039: Constraint::set_epsilon_coefficient(Coefficient_traits::const_reference n) {
-40039:   ((void) 0);
-40039:   expr.set_coefficient(Variable(expr.space_dimension() - 1), n);
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: swap(Constraint& x, Constraint& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 835 "../../src/Constraint_defs.hh" 2
-40039: # 31 "../../src/Linear_Expression_Impl_templates.hh" 2
-40039: # 1 "../../src/Generator_defs.hh" 1
-40039: # 31 "../../src/Generator_defs.hh"
-40039: # 1 "../../src/Generator_System_types.hh" 1
-40039: # 16 "../../src/Generator_System_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Generator_System;
-40039: class Generator_System_const_iterator;
-40039: 
-40039: }
-40039: # 32 "../../src/Generator_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: # 1 "../../src/Grid_Generator_System_types.hh" 1
-40039: # 16 "../../src/Grid_Generator_System_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Grid_Generator_System;
-40039: 
-40039: }
-40039: # 36 "../../src/Generator_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "../../src/distances_defs.hh" 1
-40039: # 27 "../../src/distances_defs.hh"
-40039: # 1 "../../src/distances_types.hh" 1
-40039: # 16 "../../src/distances_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Temp>
-40039: struct Rectilinear_Distance_Specialization;
-40039: 
-40039: template <typename Temp>
-40039: struct Euclidean_Distance_Specialization;
-40039: 
-40039: template <typename Temp>
-40039: struct L_Infinity_Distance_Specialization;
-40039: 
-40039: }
-40039: # 28 "../../src/distances_defs.hh" 2
-40039: 
-40039: 
-40039: template <typename Temp>
-40039: struct Parma_Polyhedra_Library::Rectilinear_Distance_Specialization {
-40039:   static void combine(Temp& running, const Temp& current, Rounding_Dir dir);
-40039: 
-40039:   static void finalize(Temp&, Rounding_Dir);
-40039: };
-40039: 
-40039: template <typename Temp>
-40039: struct Parma_Polyhedra_Library::Euclidean_Distance_Specialization {
-40039:   static void combine(Temp& running, Temp& current, Rounding_Dir dir);
-40039: 
-40039:   static void finalize(Temp& running, Rounding_Dir dir);
-40039: };
-40039: 
-40039: 
-40039: template <typename Temp>
-40039: struct Parma_Polyhedra_Library::L_Infinity_Distance_Specialization {
-40039:   static void combine(Temp& running, const Temp& current, Rounding_Dir);
-40039: 
-40039:   static void finalize(Temp&, Rounding_Dir);
-40039: };
-40039: 
-40039: # 1 "../../src/distances_inlines.hh" 1
-40039: # 29 "../../src/distances_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: template <typename To, typename From>
-40039: struct maybe_assign_struct {
-40039:   static inline Result
-40039:   function(const To*& top, To& tmp, const From& from, Rounding_Dir dir) {
-40039: 
-40039: 
-40039:     top = &tmp;
-40039:     return assign_r(tmp, from, dir);
-40039:   }
-40039: };
-40039: 
-40039: template <typename Type>
-40039: struct maybe_assign_struct<Type, Type> {
-40039:   static inline Result
-40039:   function(const Type*& top, Type&, const Type& from, Rounding_Dir) {
-40039: 
-40039:     top = &from;
-40039:     return V_EQ;
-40039:   }
-40039: };
-40039: # 62 "../../src/distances_inlines.hh"
-40039: template <typename To, typename From>
-40039: inline Result
-40039: maybe_assign(const To*& top, To& tmp, const From& from, Rounding_Dir dir) {
-40039:   return maybe_assign_struct<To, From>::function(top, tmp, from, dir);
-40039: }
-40039: 
-40039: template <typename Temp>
-40039: inline void
-40039: Rectilinear_Distance_Specialization<Temp>::combine(Temp& running,
-40039:                                                    const Temp& current,
-40039:                                                    Rounding_Dir dir) {
-40039:   add_assign_r(running, running, current, dir);
-40039: }
-40039: 
-40039: template <typename Temp>
-40039: inline void
-40039: Rectilinear_Distance_Specialization<Temp>::finalize(Temp&, Rounding_Dir) {
-40039: }
-40039: 
-40039: template <typename Temp>
-40039: inline void
-40039: Euclidean_Distance_Specialization<Temp>::combine(Temp& running,
-40039:                                                  Temp& current,
-40039:                                                  Rounding_Dir dir) {
-40039:   mul_assign_r(current, current, current, dir);
-40039:   add_assign_r(running, running, current, dir);
-40039: }
-40039: 
-40039: template <typename Temp>
-40039: inline void
-40039: Euclidean_Distance_Specialization<Temp>::finalize(Temp& running,
-40039:                                                   Rounding_Dir dir) {
-40039:   sqrt_assign_r(running, running, dir);
-40039: }
-40039: 
-40039: template <typename Temp>
-40039: inline void
-40039: L_Infinity_Distance_Specialization<Temp>::combine(Temp& running,
-40039:                                                   const Temp& current,
-40039:                                                   Rounding_Dir) {
-40039:   if (current > running) {
-40039:     running = current;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Temp>
-40039: inline void
-40039: L_Infinity_Distance_Specialization<Temp>::finalize(Temp&, Rounding_Dir) {
-40039: }
-40039: 
-40039: }
-40039: # 53 "../../src/distances_defs.hh" 2
-40039: # 43 "../../src/Generator_defs.hh" 2
-40039: 
-40039: 
-40039: # 1 "../../src/Expression_Hide_Inhomo_defs.hh" 1
-40039: # 41 "../../src/Expression_Hide_Inhomo_defs.hh"
-40039: template <typename T>
-40039: class Parma_Polyhedra_Library::Expression_Hide_Inhomo
-40039:   : public Expression_Adapter<T> {
-40039:   typedef Expression_Adapter<T> base_type;
-40039: public:
-40039: 
-40039:   typedef Expression_Hide_Inhomo<T> const_reference;
-40039: 
-40039:   typedef typename base_type::inner_type inner_type;
-40039: 
-40039:   typedef typename base_type::raw_type raw_type;
-40039: 
-40039: 
-40039:   explicit Expression_Hide_Inhomo(const raw_type& expr);
-40039: 
-40039: public:
-40039: 
-40039:   typedef typename base_type::const_iterator const_iterator;
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference inhomogeneous_term() const;
-40039: 
-40039: 
-40039:   bool is_zero() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename Expression>
-40039:   bool is_equal_to(const Expression& y) const;
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference get(dimension_type i) const;
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference get(Variable v) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool all_zeroes(const Variables_Set& vars) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool all_zeroes(dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type num_zeroes(dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Coefficient gcd(dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039: 
-40039:   dimension_type last_nonzero() const;
-40039: 
-40039: 
-40039: 
-40039:   dimension_type last_nonzero(dimension_type first, dimension_type last) const;
-40039: 
-40039: 
-40039: 
-40039:   dimension_type first_nonzero(dimension_type first, dimension_type last) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool all_zeroes_except(const Variables_Set& vars,
-40039:                          dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039:   void has_a_free_dimension_helper(std::set<dimension_type>& x) const;
-40039: 
-40039: 
-40039: 
-40039:   template <typename Expression>
-40039:   bool is_equal_to(const Expression& y,
-40039:                    dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039: 
-40039:   template <typename Expression>
-40039:   bool is_equal_to(const Expression& y,
-40039:                    Coefficient_traits::const_reference c1,
-40039:                    Coefficient_traits::const_reference c2,
-40039:                    dimension_type start, dimension_type end) const;
-40039: 
-40039: 
-40039:   void get_row(Dense_Row& r) const;
-40039: 
-40039: 
-40039:   void get_row(Sparse_Row& r) const;
-40039: };
-40039: 
-40039: # 1 "../../src/Expression_Hide_Inhomo_inlines.hh" 1
-40039: # 29 "../../src/Expression_Hide_Inhomo_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: Expression_Hide_Inhomo<T>::Expression_Hide_Inhomo(const raw_type& expr)
-40039:   : base_type(expr) {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline Coefficient_traits::const_reference
-40039: Expression_Hide_Inhomo<T>::inhomogeneous_term() const {
-40039: 
-40039:   return Coefficient_zero();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Expression_Hide_Inhomo<T>::is_zero() const {
-40039: 
-40039:   return this->inner().all_homogeneous_terms_are_zero();
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Expression>
-40039: inline bool
-40039: Expression_Hide_Inhomo<T>
-40039: ::is_equal_to(const Expression& y) const {
-40039:   const dimension_type x_dim = this->space_dimension();
-40039:   const dimension_type y_dim = y.space_dimension();
-40039:   if (x_dim != y_dim) {
-40039:     return false;
-40039:   }
-40039:   if (y.inhomogeneous_term() != 0) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   return this->inner().is_equal_to(y, 1, x_dim + 1);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline Coefficient_traits::const_reference
-40039: Expression_Hide_Inhomo<T>::get(dimension_type i) const {
-40039:   if (i == 0) {
-40039:     return Coefficient_zero();
-40039:   }
-40039:   else {
-40039:     return this->inner().get(i);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline Coefficient_traits::const_reference
-40039: Expression_Hide_Inhomo<T>::get(Variable v) const {
-40039:   return this->inner().get(v);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Expression_Hide_Inhomo<T>
-40039: ::all_zeroes(const Variables_Set& vars) const {
-40039:   return this->inner().all_zeroes(vars);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Expression_Hide_Inhomo<T>::all_zeroes(dimension_type start,
-40039:                                       dimension_type end) const {
-40039:   if (start == end) {
-40039:     return true;
-40039:   }
-40039:   if (start == 0) {
-40039:     ++start;
-40039:   }
-40039:   return this->inner().all_zeroes(start, end);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: Expression_Hide_Inhomo<T>::num_zeroes(dimension_type start,
-40039:                                       dimension_type end) const {
-40039:   if (start == end) {
-40039:     return 0;
-40039:   }
-40039:   dimension_type nz = 0;
-40039:   if (start == 0) {
-40039:     ++start;
-40039:     ++nz;
-40039:   }
-40039:   nz += this->inner().num_zeroes(start, end);
-40039:   return nz;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline Coefficient
-40039: Expression_Hide_Inhomo<T>::gcd(dimension_type start,
-40039:                                dimension_type end) const {
-40039:   if (start == end) {
-40039:     return Coefficient_zero();
-40039:   }
-40039:   if (start == 0) {
-40039:     ++start;
-40039:   }
-40039:   return this->inner().gcd(start, end);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: Expression_Hide_Inhomo<T>::last_nonzero() const {
-40039:   return this->inner().last_nonzero();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: Expression_Hide_Inhomo<T>::last_nonzero(dimension_type first,
-40039:                                         dimension_type last) const {
-40039:   if (first == last) {
-40039:     return last;
-40039:   }
-40039:   if (first == 0) {
-40039:     ++first;
-40039:   }
-40039:   return this->inner().last_nonzero(first, last);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: Expression_Hide_Inhomo<T>::first_nonzero(dimension_type first,
-40039:                                          dimension_type last) const {
-40039:   if (first == last) {
-40039:     return last;
-40039:   }
-40039:   if (first == 0) {
-40039:     ++first;
-40039:   }
-40039:   return this->inner().first_nonzero(first, last);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Expression_Hide_Inhomo<T>
-40039: ::all_zeroes_except(const Variables_Set& vars,
-40039:                     dimension_type start, dimension_type end) const {
-40039:   if (start == end) {
-40039:     return true;
-40039:   }
-40039:   if (start == 0) {
-40039:     ++start;
-40039:   }
-40039:   return this->inner().all_zeroes_except(vars, start, end);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Expression_Hide_Inhomo<T>
-40039: ::has_a_free_dimension_helper(std::set<dimension_type>& y) const {
-40039:   bool had_0 = (y.count(0) == 1);
-40039:   this->inner().has_a_free_dimension_helper(y);
-40039:   if (had_0) {
-40039:     y.insert(0);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Expression>
-40039: inline bool
-40039: Expression_Hide_Inhomo<T>
-40039: ::is_equal_to(const Expression& y,
-40039:               dimension_type start, dimension_type end) const {
-40039:   if (start == end) {
-40039:     return true;
-40039:   }
-40039:   if (start == 0) {
-40039:     ++start;
-40039:   }
-40039:   return this->inner().is_equal_to(y, start, end);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Expression>
-40039: inline bool
-40039: Expression_Hide_Inhomo<T>
-40039: ::is_equal_to(const Expression& y,
-40039:               Coefficient_traits::const_reference c1,
-40039:               Coefficient_traits::const_reference c2,
-40039:               dimension_type start, dimension_type end) const {
-40039:   if (start == end) {
-40039:     return true;
-40039:   }
-40039:   if (start == 0) {
-40039:     ++start;
-40039:   }
-40039:   return this->inner().is_equal_to(y, c1, c2, start, end);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Expression_Hide_Inhomo<T>::get_row(Dense_Row& r) const {
-40039:   this->inner().get_row(r);
-40039:   r.reset(0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Expression_Hide_Inhomo<T>::get_row(Sparse_Row& r) const {
-40039:   this->inner().get_row(r);
-40039:   r.reset(0);
-40039: }
-40039: 
-40039: }
-40039: # 146 "../../src/Expression_Hide_Inhomo_defs.hh" 2
-40039: # 46 "../../src/Generator_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: # 90 "../../src/Generator_defs.hh"
-40039: int compare(const Generator& x, const Generator& y);
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: std::ostream& operator<<(std::ostream& s, const Generator& g);
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: void swap(Generator& x, Generator& y);
-40039: 
-40039: }
-40039: # 285 "../../src/Generator_defs.hh"
-40039: class Parma_Polyhedra_Library::Generator {
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Representation default_representation = SPARSE;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static Generator line(const Linear_Expression& e,
-40039:                         Representation r = default_representation);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static Generator ray(const Linear_Expression& e,
-40039:                        Representation r = default_representation);
-40039: # 322 "../../src/Generator_defs.hh"
-40039:   static Generator point(const Linear_Expression& e
-40039:                          = Linear_Expression::zero(),
-40039:                          Coefficient_traits::const_reference d
-40039:                          = Coefficient_one(),
-40039:                          Representation r = default_representation);
-40039: 
-40039: 
-40039:   static Generator point(Representation r);
-40039: 
-40039: 
-40039:   static Generator point(const Linear_Expression& e,
-40039:                          Representation r);
-40039: 
-40039: 
-40039:   explicit Generator(Representation r = default_representation);
-40039: # 346 "../../src/Generator_defs.hh"
-40039:   static Generator
-40039:   closure_point(const Linear_Expression& e = Linear_Expression::zero(),
-40039:                 Coefficient_traits::const_reference d = Coefficient_one(),
-40039:                 Representation r = default_representation);
-40039: 
-40039: 
-40039:   static Generator
-40039:   closure_point(Representation r);
-40039: 
-40039: 
-40039:   static Generator
-40039:   closure_point(const Linear_Expression& e, Representation r);
-40039: 
-40039: 
-40039: 
-40039:   Generator(const Generator& g);
-40039: 
-40039: 
-40039:   Generator(const Generator& g, Representation r);
-40039: 
-40039: 
-40039: 
-40039:   Generator(const Generator& g, dimension_type space_dim);
-40039: 
-40039: 
-40039:   Generator(const Generator& g, dimension_type space_dim, Representation r);
-40039: 
-40039: 
-40039:   ~Generator();
-40039: 
-40039: 
-40039:   Generator& operator=(const Generator& g);
-40039: 
-40039: 
-40039:   Representation representation() const;
-40039: 
-40039: 
-40039:   void set_representation(Representation r);
-40039: 
-40039: 
-40039:   static dimension_type max_space_dimension();
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039: 
-40039:   void set_space_dimension(dimension_type space_dim);
-40039: 
-40039: 
-40039:   void swap_space_dimensions(Variable v1, Variable v2);
-40039: # 408 "../../src/Generator_defs.hh"
-40039:   bool remove_space_dimensions(const Variables_Set& vars);
-40039: # 422 "../../src/Generator_defs.hh"
-40039:   void permute_space_dimensions(const std::vector<Variable>& cycle);
-40039: 
-40039: 
-40039: 
-40039:   void shift_space_dimensions(Variable v, dimension_type n);
-40039: 
-40039: 
-40039:   enum Type {
-40039: 
-40039:     LINE,
-40039: 
-40039:     RAY,
-40039: 
-40039:     POINT,
-40039: 
-40039:     CLOSURE_POINT
-40039:   };
-40039: 
-40039: 
-40039:   Type type() const;
-40039: 
-40039: 
-40039:   bool is_line() const;
-40039: 
-40039: 
-40039:   bool is_ray() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_line_or_ray() const;
-40039: 
-40039: 
-40039:   bool is_point() const;
-40039: 
-40039: 
-40039:   bool is_closure_point() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference coefficient(Variable v) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference divisor() const;
-40039: 
-40039: 
-40039:   static void initialize();
-40039: 
-40039: 
-40039:   static void finalize();
-40039: 
-40039: 
-40039:   static const Generator& zero_dim_point();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Generator& zero_dim_closure_point();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_equivalent_to(const Generator& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_equal_to(const Generator& y) const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   void m_swap(Generator& y);
-40039: 
-40039: 
-40039:   typedef Expression_Hide_Last<Expression_Hide_Inhomo<Linear_Expression> >
-40039:   expr_type;
-40039: 
-40039:   expr_type expression() const;
-40039: 
-40039: private:
-40039: 
-40039:   enum Kind {
-40039:     LINE_OR_EQUALITY = 0,
-40039:     RAY_OR_POINT_OR_INEQUALITY = 1
-40039:   };
-40039: 
-40039: 
-40039:   Linear_Expression expr;
-40039: 
-40039: 
-40039:   Kind kind_;
-40039: 
-40039: 
-40039:   Topology topology_;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Generator* zero_dim_point_p;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Generator* zero_dim_closure_point_p;
-40039: # 570 "../../src/Generator_defs.hh"
-40039:   Generator(Linear_Expression& e, Type type, Topology topology);
-40039: 
-40039:   Generator(Linear_Expression& e, Kind kind, Topology topology);
-40039: 
-40039:   Generator(dimension_type space_dim, Kind kind, Topology topology,
-40039:             Representation r = default_representation);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_line_or_equality() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_ray_or_point_or_inequality() const;
-40039: 
-40039: 
-40039:   void set_is_line_or_equality();
-40039: 
-40039: 
-40039:   void set_is_ray_or_point_or_inequality();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Topology topology() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_not_necessarily_closed() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_necessarily_closed() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void set_topology(Topology x);
-40039: 
-40039: 
-40039:   void set_necessarily_closed();
-40039: 
-40039: 
-40039:   void set_not_necessarily_closed();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void mark_as_necessarily_closed();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void mark_as_not_necessarily_closed();
-40039: # 652 "../../src/Generator_defs.hh"
-40039:   void linear_combine(const Generator& y, dimension_type i);
-40039: # 661 "../../src/Generator_defs.hh"
-40039:   void set_space_dimension_no_ok(dimension_type space_dim);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void
-40039:   throw_dimension_incompatible(const char* method,
-40039:                                const char* v_name,
-40039:                                Variable v) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void
-40039:   throw_invalid_argument(const char* method, const char* reason) const;
-40039: 
-40039: 
-40039:   bool is_ray_or_point() const;
-40039: 
-40039: 
-40039:   void set_is_line();
-40039: 
-40039: 
-40039:   void set_is_ray_or_point();
-40039: # 695 "../../src/Generator_defs.hh"
-40039:   bool is_matching_closure_point(const Generator& p) const;
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference epsilon_coefficient() const;
-40039: 
-40039: 
-40039:   void set_epsilon_coefficient(Coefficient_traits::const_reference n);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void sign_normalize();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void strong_normalize();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool check_strong_normalized() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void fancy_print(std::ostream& s) const;
-40039: 
-40039:   friend class Expression_Adapter<Generator>;
-40039:   friend class Linear_System<Generator>;
-40039:   friend class Parma_Polyhedra_Library::Scalar_Products;
-40039:   friend class Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign;
-40039:   friend class Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Assign;
-40039:   friend class Parma_Polyhedra_Library::Generator_System;
-40039:   friend class Parma_Polyhedra_Library::Generator_System_const_iterator;
-40039: 
-40039:   friend class Parma_Polyhedra_Library::Polyhedron;
-40039: 
-40039:   friend class Parma_Polyhedra_Library::Grid_Generator_System;
-40039:   friend class Parma_Polyhedra_Library::MIP_Problem;
-40039:   friend class Parma_Polyhedra_Library::Grid;
-40039: 
-40039:   friend std::ostream&
-40039:   Parma_Polyhedra_Library::IO_Operators::operator<<(std::ostream& s,
-40039:                                                     const Generator& g);
-40039: 
-40039:   friend int
-40039:   compare(const Generator& x, const Generator& y);
-40039: };
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: Generator line(const Linear_Expression& e,
-40039:                Representation r = Generator::default_representation);
-40039: 
-40039: 
-40039: 
-40039: Generator ray(const Linear_Expression& e,
-40039:               Representation r = Generator::default_representation);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: Generator
-40039: point(const Linear_Expression& e = Linear_Expression::zero(),
-40039:       Coefficient_traits::const_reference d = Coefficient_one(),
-40039:       Representation r = Generator::default_representation);
-40039: 
-40039: 
-40039: 
-40039: Generator
-40039: point(Representation r);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: Generator
-40039: point(const Linear_Expression& e, Representation r);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: Generator
-40039: closure_point(const Linear_Expression& e = Linear_Expression::zero(),
-40039:               Coefficient_traits::const_reference d = Coefficient_one(),
-40039:               Representation r = Generator::default_representation);
-40039: 
-40039: 
-40039: 
-40039: Generator
-40039: closure_point(Representation r);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: Generator
-40039: closure_point(const Linear_Expression& e, Representation r);
-40039: 
-40039: 
-40039: 
-40039: bool operator==(const Generator& x, const Generator& y);
-40039: 
-40039: 
-40039: 
-40039: bool operator!=(const Generator& x, const Generator& y);
-40039: # 838 "../../src/Generator_defs.hh"
-40039: template <typename To>
-40039: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                  const Generator& x,
-40039:                                  const Generator& y,
-40039:                                  Rounding_Dir dir);
-40039: # 859 "../../src/Generator_defs.hh"
-40039: template <typename Temp, typename To>
-40039: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                  const Generator& x,
-40039:                                  const Generator& y,
-40039:                                  Rounding_Dir dir);
-40039: # 880 "../../src/Generator_defs.hh"
-40039: template <typename Temp, typename To>
-40039: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                  const Generator& x,
-40039:                                  const Generator& y,
-40039:                                  Rounding_Dir dir,
-40039:                                  Temp& tmp0,
-40039:                                  Temp& tmp1,
-40039:                                  Temp& tmp2);
-40039: # 904 "../../src/Generator_defs.hh"
-40039: template <typename To>
-40039: bool euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                const Generator& x,
-40039:                                const Generator& y,
-40039:                                Rounding_Dir dir);
-40039: # 925 "../../src/Generator_defs.hh"
-40039: template <typename Temp, typename To>
-40039: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                  const Generator& x,
-40039:                                  const Generator& y,
-40039:                                  Rounding_Dir dir);
-40039: # 946 "../../src/Generator_defs.hh"
-40039: template <typename Temp, typename To>
-40039: bool euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                const Generator& x,
-40039:                                const Generator& y,
-40039:                                Rounding_Dir dir,
-40039:                                Temp& tmp0,
-40039:                                Temp& tmp1,
-40039:                                Temp& tmp2);
-40039: # 970 "../../src/Generator_defs.hh"
-40039: template <typename To>
-40039: bool l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                 const Generator& x,
-40039:                                 const Generator& y,
-40039:                                 Rounding_Dir dir);
-40039: # 991 "../../src/Generator_defs.hh"
-40039: template <typename Temp, typename To>
-40039: bool l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                 const Generator& x,
-40039:                                 const Generator& y,
-40039:                                 Rounding_Dir dir);
-40039: # 1012 "../../src/Generator_defs.hh"
-40039: template <typename Temp, typename To>
-40039: bool l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                 const Generator& x,
-40039:                                 const Generator& y,
-40039:                                 Rounding_Dir dir,
-40039:                                 Temp& tmp0,
-40039:                                 Temp& tmp1,
-40039:                                 Temp& tmp2);
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: std::ostream& operator<<(std::ostream& s, const Generator::Type& t);
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Generator_inlines.hh" 1
-40039: # 27 "../../src/Generator_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline bool
-40039: Generator::is_necessarily_closed() const {
-40039:   return (topology() == NECESSARILY_CLOSED);
-40039: }
-40039: 
-40039: inline bool
-40039: Generator::is_not_necessarily_closed() const {
-40039:   return (topology() == NOT_NECESSARILY_CLOSED);
-40039: }
-40039: 
-40039: inline Generator::expr_type
-40039: Generator::expression() const {
-40039:   return expr_type(expr, is_not_necessarily_closed());
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Generator::space_dimension() const {
-40039:   return expression().space_dimension();
-40039: }
-40039: 
-40039: inline bool
-40039: Generator::is_line_or_equality() const {
-40039:   return (kind_ == LINE_OR_EQUALITY);
-40039: }
-40039: 
-40039: inline bool
-40039: Generator::is_ray_or_point_or_inequality() const {
-40039:   return (kind_ == RAY_OR_POINT_OR_INEQUALITY);
-40039: }
-40039: 
-40039: inline Topology
-40039: Generator::topology() const {
-40039:   return topology_;
-40039: }
-40039: 
-40039: inline void
-40039: Generator::set_is_line_or_equality() {
-40039:   kind_ = LINE_OR_EQUALITY;
-40039: }
-40039: 
-40039: inline void
-40039: Generator::set_is_ray_or_point_or_inequality() {
-40039:   kind_ = RAY_OR_POINT_OR_INEQUALITY;
-40039: }
-40039: 
-40039: inline void
-40039: Generator::set_topology(Topology x) {
-40039:   if (topology() == x) {
-40039:     return;
-40039:   }
-40039:   if (topology() == NECESSARILY_CLOSED) {
-40039: 
-40039:     expr.set_space_dimension(expr.space_dimension() + 1);
-40039:   }
-40039:   else {
-40039:     ((void) 0);
-40039:     expr.set_space_dimension(expr.space_dimension() - 1);
-40039:   }
-40039:   topology_ = x;
-40039: }
-40039: 
-40039: inline void
-40039: Generator::mark_as_necessarily_closed() {
-40039:   ((void) 0);
-40039:   topology_ = NECESSARILY_CLOSED;
-40039: }
-40039: 
-40039: inline void
-40039: Generator::mark_as_not_necessarily_closed() {
-40039:   ((void) 0);
-40039:   topology_ = NOT_NECESSARILY_CLOSED;
-40039: }
-40039: 
-40039: inline void
-40039: Generator::set_necessarily_closed() {
-40039:   set_topology(NECESSARILY_CLOSED);
-40039: }
-40039: 
-40039: inline void
-40039: Generator::set_not_necessarily_closed() {
-40039:   set_topology(NOT_NECESSARILY_CLOSED);
-40039: }
-40039: 
-40039: inline
-40039: Generator::Generator(Representation r)
-40039:   : expr(r),
-40039:     kind_(RAY_OR_POINT_OR_INEQUALITY),
-40039:     topology_(NECESSARILY_CLOSED) {
-40039:   expr.set_inhomogeneous_term(Coefficient_one());
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Generator::Generator(dimension_type space_dim, Kind kind, Topology topology,
-40039:                      Representation r)
-40039:   : expr(r),
-40039:     kind_(kind),
-40039:     topology_(topology) {
-40039:   if (is_necessarily_closed()) {
-40039:     expr.set_space_dimension(space_dim);
-40039:   }
-40039:   else {
-40039:     expr.set_space_dimension(space_dim + 1);
-40039:   }
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Generator::Generator(Linear_Expression& e, Type type, Topology topology)
-40039:   : topology_(topology) {
-40039:   ((void) 0);
-40039:   swap(expr, e);
-40039:   if (topology == NOT_NECESSARILY_CLOSED) {
-40039:     expr.set_space_dimension(expr.space_dimension() + 1);
-40039:   }
-40039:   if (type == LINE) {
-40039:     kind_ = LINE_OR_EQUALITY;
-40039:   }
-40039:   else {
-40039:     kind_ = RAY_OR_POINT_OR_INEQUALITY;
-40039:   }
-40039:   strong_normalize();
-40039: }
-40039: 
-40039: inline
-40039: Generator::Generator(Linear_Expression& e, Kind kind, Topology topology)
-40039:   : kind_(kind),
-40039:     topology_(topology) {
-40039:   swap(expr, e);
-40039:   if (topology == NOT_NECESSARILY_CLOSED) {
-40039:     expr.set_space_dimension(expr.space_dimension() + 1);
-40039:   }
-40039:   strong_normalize();
-40039: }
-40039: 
-40039: inline
-40039: Generator::Generator(const Generator& g)
-40039:   : expr(g.expr),
-40039:     kind_(g.kind_),
-40039:     topology_(g.topology_) {
-40039: }
-40039: 
-40039: inline
-40039: Generator::Generator(const Generator& g, Representation r)
-40039:   : expr(g.expr, r),
-40039:     kind_(g.kind_),
-40039:     topology_(g.topology_) {
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Generator::Generator(const Generator& g, dimension_type space_dim)
-40039:   : expr(g.expr, g.is_necessarily_closed() ? space_dim : (space_dim + 1)),
-40039:     kind_(g.kind_),
-40039:     topology_(g.topology_) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Generator::Generator(const Generator& g, dimension_type space_dim,
-40039:                      Representation r)
-40039:   : expr(g.expr, g.is_necessarily_closed() ? space_dim : (space_dim + 1), r),
-40039:     kind_(g.kind_),
-40039:     topology_(g.topology_) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Generator::~Generator() {
-40039: }
-40039: 
-40039: inline Generator&
-40039: Generator::operator=(const Generator& g) {
-40039:   Generator tmp = g;
-40039:   swap(*this, tmp);
-40039: 
-40039:   return *this;
-40039: }
-40039: 
-40039: inline Representation
-40039: Generator::representation() const {
-40039:   return expr.representation();
-40039: }
-40039: 
-40039: inline void
-40039: Generator::set_representation(Representation r) {
-40039:   expr.set_representation(r);
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Generator::max_space_dimension() {
-40039:   return Linear_Expression::max_space_dimension();
-40039: }
-40039: 
-40039: inline void
-40039: Generator::set_space_dimension_no_ok(dimension_type space_dim) {
-40039:   const dimension_type old_expr_space_dim = expr.space_dimension();
-40039:   if (topology() == NECESSARILY_CLOSED) {
-40039:     expr.set_space_dimension(space_dim);
-40039:   }
-40039:   else {
-40039:     const dimension_type old_space_dim = space_dimension();
-40039:     if (space_dim > old_space_dim) {
-40039:       expr.set_space_dimension(space_dim + 1);
-40039:       expr.swap_space_dimensions(Variable(space_dim), Variable(old_space_dim));
-40039:     }
-40039:     else {
-40039:       expr.swap_space_dimensions(Variable(space_dim), Variable(old_space_dim));
-40039:       expr.set_space_dimension(space_dim + 1);
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039:   if (expr.space_dimension() < old_expr_space_dim) {
-40039:     strong_normalize();
-40039:   }
-40039: }
-40039: 
-40039: inline void
-40039: Generator::set_space_dimension(dimension_type space_dim) {
-40039:   set_space_dimension_no_ok(space_dim);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline void
-40039: Generator::shift_space_dimensions(Variable v, dimension_type n) {
-40039:   expr.shift_space_dimensions(v, n);
-40039: }
-40039: 
-40039: inline bool
-40039: Generator::is_line() const {
-40039:   return is_line_or_equality();
-40039: }
-40039: 
-40039: inline bool
-40039: Generator::is_ray_or_point() const {
-40039:   return is_ray_or_point_or_inequality();
-40039: }
-40039: 
-40039: inline bool
-40039: Generator::is_line_or_ray() const {
-40039:   return expr.inhomogeneous_term() == 0;
-40039: }
-40039: 
-40039: inline bool
-40039: Generator::is_ray() const {
-40039:   return is_ray_or_point() && is_line_or_ray();
-40039: }
-40039: 
-40039: inline Generator::Type
-40039: Generator::type() const {
-40039:   if (is_line()) {
-40039:     return LINE;
-40039:   }
-40039:   if (is_line_or_ray()) {
-40039:     return RAY;
-40039:   }
-40039:   if (is_necessarily_closed()) {
-40039:     return POINT;
-40039:   }
-40039:   else {
-40039: 
-40039:     if (epsilon_coefficient() == 0) {
-40039:       return CLOSURE_POINT;
-40039:     }
-40039:     else {
-40039:       return POINT;
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: inline bool
-40039: Generator::is_point() const {
-40039:   return type() == POINT;
-40039: }
-40039: 
-40039: inline bool
-40039: Generator::is_closure_point() const {
-40039:   return type() == CLOSURE_POINT;
-40039: }
-40039: 
-40039: inline void
-40039: Generator::set_is_line() {
-40039:   set_is_line_or_equality();
-40039: }
-40039: 
-40039: inline void
-40039: Generator::set_is_ray_or_point() {
-40039:   set_is_ray_or_point_or_inequality();
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: Generator::coefficient(const Variable v) const {
-40039:   if (v.space_dimension() > space_dimension()) {
-40039:     throw_dimension_incompatible("coefficient(v)", "v", v);
-40039:   }
-40039:   return expr.coefficient(v);
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: Generator::divisor() const {
-40039:   Coefficient_traits::const_reference d = expr.inhomogeneous_term();
-40039:   if (!is_ray_or_point() || d == 0) {
-40039:     throw_invalid_argument("divisor()",
-40039:                            "*this is neither a point nor a closure point");
-40039:   }
-40039:   return d;
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: Generator::epsilon_coefficient() const {
-40039:   ((void) 0);
-40039:   return expr.coefficient(Variable(expr.space_dimension() - 1));
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: Generator::set_epsilon_coefficient(Coefficient_traits::const_reference n) {
-40039:   ((void) 0);
-40039:   expr.set_coefficient(Variable(expr.space_dimension() - 1), n);
-40039: }
-40039: 
-40039: 
-40039: inline memory_size_type
-40039: Generator::external_memory_in_bytes() const {
-40039:   return expr.external_memory_in_bytes();
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Generator::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: inline void
-40039: Generator::strong_normalize() {
-40039:   expr.normalize();
-40039:   sign_normalize();
-40039: }
-40039: 
-40039: inline const Generator&
-40039: Generator::zero_dim_point() {
-40039:   ((void) 0);
-40039:   return *zero_dim_point_p;
-40039: }
-40039: 
-40039: inline const Generator&
-40039: Generator::zero_dim_closure_point() {
-40039:   ((void) 0);
-40039:   return *zero_dim_closure_point_p;
-40039: }
-40039: 
-40039: 
-40039: inline Generator
-40039: line(const Linear_Expression& e, Representation r) {
-40039:   return Generator::line(e, r);
-40039: }
-40039: 
-40039: 
-40039: inline Generator
-40039: ray(const Linear_Expression& e, Representation r) {
-40039:   return Generator::ray(e, r);
-40039: }
-40039: 
-40039: 
-40039: inline Generator
-40039: point(const Linear_Expression& e, Coefficient_traits::const_reference d,
-40039:       Representation r) {
-40039:   return Generator::point(e, d, r);
-40039: }
-40039: 
-40039: 
-40039: inline Generator
-40039: point(Representation r) {
-40039:   return Generator::point(r);
-40039: }
-40039: 
-40039: 
-40039: inline Generator
-40039: point(const Linear_Expression& e, Representation r) {
-40039:   return Generator::point(e, r);
-40039: }
-40039: 
-40039: 
-40039: inline Generator
-40039: closure_point(const Linear_Expression& e,
-40039:               Coefficient_traits::const_reference d,
-40039:               Representation r) {
-40039:   return Generator::closure_point(e, d, r);
-40039: }
-40039: 
-40039: 
-40039: inline Generator
-40039: closure_point(Representation r) {
-40039:   return Generator::closure_point(r);
-40039: }
-40039: 
-40039: 
-40039: inline Generator
-40039: closure_point(const Linear_Expression& e,
-40039:               Representation r) {
-40039:   return Generator::closure_point(e, r);
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: operator==(const Generator& x, const Generator& y) {
-40039:   return x.is_equivalent_to(y);
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: operator!=(const Generator& x, const Generator& y) {
-40039:   return !x.is_equivalent_to(y);
-40039: }
-40039: 
-40039: inline void
-40039: Generator::ascii_dump(std::ostream& s) const {
-40039: 
-40039:   expr.ascii_dump(s);
-40039: 
-40039:   s << " ";
-40039: 
-40039:   switch (type()) {
-40039:   case Generator::LINE:
-40039:     s << "L ";
-40039:     break;
-40039:   case Generator::RAY:
-40039:     s << "R ";
-40039:     break;
-40039:   case Generator::POINT:
-40039:     s << "P ";
-40039:     break;
-40039:   case Generator::CLOSURE_POINT:
-40039:     s << "C ";
-40039:     break;
-40039:   }
-40039:   if (is_necessarily_closed()) {
-40039:     s << "(C)";
-40039:   }
-40039:   else {
-40039:     s << "(NNC)";
-40039:   }
-40039:   s << "\n";
-40039: }
-40039: 
-40039: inline bool
-40039: Generator::ascii_load(std::istream& s) {
-40039:   std::string str;
-40039: 
-40039:   expr.ascii_load(s);
-40039: 
-40039:   if (!(s >> str)) {
-40039:     return false;
-40039:   }
-40039:   if (str == "L") {
-40039:     set_is_line();
-40039:   }
-40039:   else if (str == "R" || str == "P" || str == "C") {
-40039:     set_is_ray_or_point();
-40039:   }
-40039:   else {
-40039:     return false;
-40039:   }
-40039: 
-40039:   std::string str2;
-40039: 
-40039:   if (!(s >> str2)) {
-40039:     return false;
-40039:   }
-40039:   if (str2 == "(C)") {
-40039:     if (is_not_necessarily_closed()) {
-40039: 
-40039:       mark_as_necessarily_closed();
-40039:     }
-40039:   }
-40039:   else {
-40039:     if (str2 == "(NNC)") {
-40039:       if (is_necessarily_closed()) {
-40039: 
-40039:         mark_as_not_necessarily_closed();
-40039:       }
-40039:     }
-40039:     else {
-40039:       return false;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   switch (type()) {
-40039:   case Generator::LINE:
-40039:     if (str != "L") {
-40039:       return false;
-40039:     }
-40039:     break;
-40039:   case Generator::RAY:
-40039:     if (str != "R") {
-40039:       return false;
-40039:     }
-40039:     break;
-40039:   case Generator::POINT:
-40039:     if (str != "P") {
-40039:       return false;
-40039:     }
-40039:     break;
-40039:   case Generator::CLOSURE_POINT:
-40039:     if (str != "C") {
-40039:       return false;
-40039:     }
-40039:     break;
-40039:   }
-40039: 
-40039:   return true;
-40039: }
-40039: 
-40039: inline void
-40039: Generator::m_swap(Generator& y) {
-40039:   using std::swap;
-40039:   swap(expr, y.expr);
-40039:   swap(kind_, y.kind_);
-40039:   swap(topology_, y.topology_);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Specialization, typename Temp, typename To>
-40039: inline bool
-40039: l_m_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                     const Generator& x,
-40039:                     const Generator& y,
-40039:                     const Rounding_Dir dir,
-40039:                     Temp& tmp0,
-40039:                     Temp& tmp1,
-40039:                     Temp& tmp2) {
-40039: 
-40039: 
-40039:   if (x.is_line_or_ray() || y.is_line_or_ray()) {
-40039:     return false;
-40039:   }
-40039:   const dimension_type x_space_dim = x.space_dimension();
-40039: 
-40039:   if (x_space_dim != y.space_dimension()) {
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039:   if (x_space_dim == 0) {
-40039:     assign_r(r, 0, ROUND_NOT_NEEDED);
-40039:     return true;
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_x_coord; mpq_class& x_coord = holder_x_coord.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_y_coord; mpq_class& y_coord = holder_y_coord.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_x_div; mpq_class& x_div = holder_x_div.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_y_div; mpq_class& y_div = holder_y_div.item();
-40039:   assign_r(x_div, x.divisor(), ROUND_NOT_NEEDED);
-40039:   assign_r(y_div, y.divisor(), ROUND_NOT_NEEDED);
-40039: 
-40039:   assign_r(tmp0, 0, ROUND_NOT_NEEDED);
-40039: 
-40039:   for (dimension_type i = x_space_dim; i-- > 0; ) {
-40039:     assign_r(x_coord, x.coefficient(Variable(i)), ROUND_NOT_NEEDED);
-40039:     div_assign_r(x_coord, x_coord, x_div, ROUND_NOT_NEEDED);
-40039:     assign_r(y_coord, y.coefficient(Variable(i)), ROUND_NOT_NEEDED);
-40039:     div_assign_r(y_coord, y_coord, y_div, ROUND_NOT_NEEDED);
-40039:     const Temp* tmp1p;
-40039:     const Temp* tmp2p;
-40039: 
-40039:     if (x_coord > y_coord) {
-40039:       maybe_assign(tmp1p, tmp1, x_coord, dir);
-40039:       maybe_assign(tmp2p, tmp2, y_coord, inverse(dir));
-40039:     }
-40039:     else {
-40039:       maybe_assign(tmp1p, tmp1, y_coord, dir);
-40039:       maybe_assign(tmp2p, tmp2, x_coord, inverse(dir));
-40039:     }
-40039:     sub_assign_r(tmp1, *tmp1p, *tmp2p, dir);
-40039:     ((void) 0);
-40039:     Specialization::combine(tmp0, tmp1, dir);
-40039:   }
-40039:   Specialization::finalize(tmp0, dir);
-40039:   assign_r(r, tmp0, dir);
-40039:   return true;
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To>
-40039: inline bool
-40039: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                             const Generator& x,
-40039:                             const Generator& y,
-40039:                             const Rounding_Dir dir,
-40039:                             Temp& tmp0,
-40039:                             Temp& tmp1,
-40039:                             Temp& tmp2) {
-40039:   return l_m_distance_assign<Rectilinear_Distance_Specialization<Temp> >
-40039:     (r, x, y, dir, tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To>
-40039: inline bool
-40039: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                             const Generator& x,
-40039:                             const Generator& y,
-40039:                             const Rounding_Dir dir) {
-40039:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
-40039:   return rectilinear_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename To>
-40039: inline bool
-40039: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                             const Generator& x,
-40039:                             const Generator& y,
-40039:                             const Rounding_Dir dir) {
-40039:   return rectilinear_distance_assign<To, To>(r, x, y, dir);
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To>
-40039: inline bool
-40039: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                           const Generator& x,
-40039:                           const Generator& y,
-40039:                           const Rounding_Dir dir,
-40039:                           Temp& tmp0,
-40039:                           Temp& tmp1,
-40039:                           Temp& tmp2) {
-40039:   return l_m_distance_assign<Euclidean_Distance_Specialization<Temp> >
-40039:     (r, x, y, dir, tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To>
-40039: inline bool
-40039: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                           const Generator& x,
-40039:                           const Generator& y,
-40039:                           const Rounding_Dir dir) {
-40039:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
-40039:   return euclidean_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename To>
-40039: inline bool
-40039: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                           const Generator& x,
-40039:                           const Generator& y,
-40039:                           const Rounding_Dir dir) {
-40039:   return euclidean_distance_assign<To, To>(r, x, y, dir);
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To>
-40039: inline bool
-40039: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                            const Generator& x,
-40039:                            const Generator& y,
-40039:                            const Rounding_Dir dir,
-40039:                            Temp& tmp0,
-40039:                            Temp& tmp1,
-40039:                            Temp& tmp2) {
-40039:   return l_m_distance_assign<L_Infinity_Distance_Specialization<Temp> >
-40039:     (r, x, y, dir, tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To>
-40039: inline bool
-40039: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                            const Generator& x,
-40039:                            const Generator& y,
-40039:                            const Rounding_Dir dir) {
-40039:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
-40039:   return l_infinity_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename To>
-40039: inline bool
-40039: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                            const Generator& x,
-40039:                            const Generator& y,
-40039:                            const Rounding_Dir dir) {
-40039:   return l_infinity_distance_assign<To, To>(r, x, y, dir);
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: swap(Generator& x, Generator& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 1032 "../../src/Generator_defs.hh" 2
-40039: # 32 "../../src/Linear_Expression_Impl_templates.hh" 2
-40039: # 1 "../../src/Grid_Generator_defs.hh" 1
-40039: # 43 "../../src/Grid_Generator_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: # 84 "../../src/Grid_Generator_defs.hh"
-40039: int compare(const Grid_Generator& x, const Grid_Generator& y);
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: std::ostream& operator<<(std::ostream& s, const Grid_Generator& g);
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: void swap(Grid_Generator& x, Grid_Generator& y);
-40039: 
-40039: }
-40039: # 271 "../../src/Grid_Generator_defs.hh"
-40039: class Parma_Polyhedra_Library::Grid_Generator {
-40039: public:
-40039: 
-40039: 
-40039:   enum Kind {
-40039:     LINE_OR_EQUALITY = 0,
-40039:     RAY_OR_POINT_OR_INEQUALITY = 1
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Representation default_representation = SPARSE;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static Grid_Generator grid_line(const Linear_Expression& e,
-40039:                                   Representation r = default_representation);
-40039: # 306 "../../src/Grid_Generator_defs.hh"
-40039:   static Grid_Generator parameter(const Linear_Expression& e
-40039:                                   = Linear_Expression::zero(),
-40039:                                   Coefficient_traits::const_reference d
-40039:                                   = Coefficient_one(),
-40039:                                   Representation r = default_representation);
-40039: 
-40039: 
-40039: 
-40039:   static Grid_Generator parameter(Representation r);
-40039: 
-40039: 
-40039:   static Grid_Generator parameter(const Linear_Expression& e,
-40039:                                   Representation r);
-40039: # 328 "../../src/Grid_Generator_defs.hh"
-40039:   static Grid_Generator grid_point(const Linear_Expression& e
-40039:                                    = Linear_Expression::zero(),
-40039:                                    Coefficient_traits::const_reference d
-40039:                                    = Coefficient_one(),
-40039:                                    Representation r = default_representation);
-40039: 
-40039: 
-40039:   static Grid_Generator grid_point(Representation r);
-40039: 
-40039: 
-40039:   static Grid_Generator grid_point(const Linear_Expression& e,
-40039:                                    Representation r);
-40039: 
-40039: 
-40039:   explicit Grid_Generator(Representation r = default_representation);
-40039: 
-40039: 
-40039: 
-40039:   Grid_Generator(const Grid_Generator& g);
-40039: 
-40039: 
-40039:   Grid_Generator(const Grid_Generator& g, Representation r);
-40039: 
-40039: 
-40039: 
-40039:   Grid_Generator(const Grid_Generator& g, dimension_type space_dim);
-40039: 
-40039: 
-40039:   Grid_Generator(const Grid_Generator& g, dimension_type space_dim,
-40039:                  Representation r);
-40039: 
-40039: 
-40039:   ~Grid_Generator();
-40039: 
-40039: 
-40039:   Grid_Generator& operator=(const Grid_Generator& g);
-40039: 
-40039: 
-40039:   Representation representation() const;
-40039: 
-40039: 
-40039:   void set_representation(Representation r);
-40039: 
-40039: 
-40039:   static dimension_type max_space_dimension();
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039: 
-40039:   void set_space_dimension(dimension_type space_dim);
-40039: 
-40039: 
-40039:   void swap_space_dimensions(Variable v1, Variable v2);
-40039: # 393 "../../src/Grid_Generator_defs.hh"
-40039:   bool remove_space_dimensions(const Variables_Set& vars);
-40039: # 407 "../../src/Grid_Generator_defs.hh"
-40039:   void permute_space_dimensions(const std::vector<Variable>& cycle);
-40039: 
-40039: 
-40039: 
-40039:   void shift_space_dimensions(Variable v, dimension_type n);
-40039: 
-40039: 
-40039:   enum Type {
-40039: 
-40039:     LINE,
-40039: 
-40039:     PARAMETER,
-40039: 
-40039:     POINT
-40039:   };
-40039: 
-40039: 
-40039:   Type type() const;
-40039: 
-40039: 
-40039:   bool is_line() const;
-40039: 
-40039: 
-40039:   bool is_parameter() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_line_or_parameter() const;
-40039: 
-40039: 
-40039:   bool is_point() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_parameter_or_point() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference coefficient(Variable v) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference divisor() const;
-40039: 
-40039: 
-40039:   static void initialize();
-40039: 
-40039: 
-40039:   static void finalize();
-40039: 
-40039: 
-40039:   static const Grid_Generator& zero_dim_point();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_equivalent_to(const Grid_Generator& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_equal_to(const Grid_Generator& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool all_homogeneous_terms_are_zero() const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   void m_swap(Grid_Generator& y);
-40039: # 524 "../../src/Grid_Generator_defs.hh"
-40039:   void scale_to_divisor(Coefficient_traits::const_reference d);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void set_divisor(Coefficient_traits::const_reference d);
-40039: 
-40039: 
-40039:   typedef Expression_Hide_Last<Expression_Hide_Inhomo<Linear_Expression> >
-40039:   expr_type;
-40039: 
-40039:   expr_type expression() const;
-40039: 
-40039: private:
-40039:   Linear_Expression expr;
-40039: 
-40039:   Kind kind_;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Grid_Generator* zero_dim_point_p;
-40039: 
-40039: 
-40039: 
-40039:   Grid_Generator(dimension_type space_dim, Kind kind, Topology topology,
-40039:                  Representation r = default_representation);
-40039: # 565 "../../src/Grid_Generator_defs.hh"
-40039:   Grid_Generator(Linear_Expression& e, Type t);
-40039: # 574 "../../src/Grid_Generator_defs.hh"
-40039:   void set_space_dimension_no_ok(dimension_type space_dim);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_equal_at_dimension(dimension_type dim,
-40039:                              const Grid_Generator& gg) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void fancy_print(std::ostream& s) const;
-40039: 
-40039: 
-40039:   void set_is_parameter();
-40039: 
-40039: 
-40039:   void set_is_line();
-40039: 
-40039: 
-40039:   void set_is_parameter_or_point();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Topology topology() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_not_necessarily_closed() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_necessarily_closed() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_line_or_equality() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_ray_or_point_or_inequality() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void set_topology(Topology x);
-40039: 
-40039: 
-40039:   void set_necessarily_closed();
-40039: 
-40039: 
-40039:   void set_not_necessarily_closed();
-40039: 
-40039: 
-40039:   void set_is_line_or_equality();
-40039: 
-40039: 
-40039:   void set_is_ray_or_point_or_inequality();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void sign_normalize();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void strong_normalize();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool check_strong_normalized() const;
-40039: # 680 "../../src/Grid_Generator_defs.hh"
-40039:   void linear_combine(const Grid_Generator& y, dimension_type i);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void
-40039:   throw_dimension_incompatible(const char* method,
-40039:                                const char* name_var,
-40039:                                const Variable v) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void
-40039:   throw_invalid_argument(const char* method, const char* reason) const;
-40039: 
-40039:   friend std::ostream&
-40039:   IO_Operators::operator<<(std::ostream& s, const Grid_Generator& g);
-40039: 
-40039:   friend int
-40039:   compare(const Grid_Generator& x, const Grid_Generator& y);
-40039: 
-40039:   friend class Expression_Adapter<Grid_Generator>;
-40039:   friend class Grid_Generator_System;
-40039:   friend class Grid;
-40039:   friend class Linear_System<Grid_Generator>;
-40039:   friend class Scalar_Products;
-40039:   friend class Topology_Adjusted_Scalar_Product_Sign;
-40039: };
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: Grid_Generator
-40039: grid_line(const Linear_Expression& e,
-40039:           Representation r = Grid_Generator::default_representation);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: Grid_Generator
-40039: parameter(const Linear_Expression& e = Linear_Expression::zero(),
-40039:           Coefficient_traits::const_reference d = Coefficient_one(),
-40039:           Representation r = Grid_Generator::default_representation);
-40039: 
-40039: 
-40039: 
-40039: Grid_Generator
-40039: parameter(Representation r);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: Grid_Generator
-40039: parameter(const Linear_Expression& e, Representation r);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: Grid_Generator
-40039: grid_point(const Linear_Expression& e = Linear_Expression::zero(),
-40039:            Coefficient_traits::const_reference d = Coefficient_one(),
-40039:            Representation r = Grid_Generator::default_representation);
-40039: 
-40039: 
-40039: 
-40039: Grid_Generator
-40039: grid_point(Representation r);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: Grid_Generator
-40039: grid_point(const Linear_Expression& e, Representation r);
-40039: 
-40039: 
-40039: 
-40039: bool operator==(const Grid_Generator& x, const Grid_Generator& y);
-40039: 
-40039: 
-40039: 
-40039: bool operator!=(const Grid_Generator& x, const Grid_Generator& y);
-40039: 
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: std::ostream& operator<<(std::ostream& s, const Grid_Generator::Type& t);
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Grid_Generator_inlines.hh" 1
-40039: # 27 "../../src/Grid_Generator_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline bool
-40039: Grid_Generator::is_necessarily_closed() const {
-40039:   return true;
-40039: }
-40039: 
-40039: inline bool
-40039: Grid_Generator::is_not_necessarily_closed() const {
-40039:   return false;
-40039: }
-40039: 
-40039: inline bool
-40039: Grid_Generator::is_line_or_equality() const {
-40039:   return (kind_ == LINE_OR_EQUALITY);
-40039: }
-40039: 
-40039: inline bool
-40039: Grid_Generator::is_ray_or_point_or_inequality() const {
-40039:   return (kind_ == RAY_OR_POINT_OR_INEQUALITY);
-40039: }
-40039: 
-40039: inline Topology
-40039: Grid_Generator::topology() const {
-40039:   return NECESSARILY_CLOSED;
-40039: }
-40039: 
-40039: inline void
-40039: Grid_Generator::set_is_line_or_equality() {
-40039:   kind_ = LINE_OR_EQUALITY;
-40039: }
-40039: 
-40039: inline void
-40039: Grid_Generator::set_is_ray_or_point_or_inequality() {
-40039:   kind_ = RAY_OR_POINT_OR_INEQUALITY;
-40039: }
-40039: 
-40039: inline void
-40039: Grid_Generator::set_topology(Topology x) {
-40039:   (void)(x);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline void
-40039: Grid_Generator::set_necessarily_closed() {
-40039:   set_topology(NECESSARILY_CLOSED);
-40039: }
-40039: 
-40039: inline void
-40039: Grid_Generator::set_not_necessarily_closed() {
-40039:   set_topology(NOT_NECESSARILY_CLOSED);
-40039: }
-40039: 
-40039: inline
-40039: Grid_Generator::Grid_Generator(Linear_Expression& e, Type type) {
-40039:   swap(expr, e);
-40039:   if (type == LINE) {
-40039:     kind_ = LINE_OR_EQUALITY;
-40039:   }
-40039:   else {
-40039:     kind_ = RAY_OR_POINT_OR_INEQUALITY;
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Grid_Generator::Grid_Generator(Representation r)
-40039:   : expr(Coefficient_one(), r),
-40039:     kind_(RAY_OR_POINT_OR_INEQUALITY) {
-40039:   expr.set_space_dimension(1);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Grid_Generator::Grid_Generator(const Grid_Generator& g)
-40039:   : expr(g.expr),
-40039:     kind_(g.kind_) {
-40039: }
-40039: 
-40039: inline
-40039: Grid_Generator::Grid_Generator(const Grid_Generator& g, Representation r)
-40039:   : expr(g.expr, r),
-40039:     kind_(g.kind_) {
-40039: }
-40039: 
-40039: inline
-40039: Grid_Generator::Grid_Generator(dimension_type space_dim, Kind kind,
-40039:                                Topology topology, Representation r)
-40039:   : expr(r),
-40039:     kind_(kind) {
-40039:   (void)(topology);
-40039:   ((void) 0);
-40039:   expr.set_space_dimension(space_dim + 1);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Grid_Generator::Grid_Generator(const Grid_Generator& g,
-40039:                                dimension_type space_dim)
-40039:   : expr(g.expr, space_dim + 1),
-40039:     kind_(g.kind_) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Grid_Generator::Grid_Generator(const Grid_Generator& g,
-40039:                                dimension_type space_dim, Representation r)
-40039:   : expr(g.expr, space_dim + 1, r),
-40039:     kind_(g.kind_) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Grid_Generator::~Grid_Generator() {
-40039: }
-40039: 
-40039: inline Grid_Generator::expr_type
-40039: Grid_Generator::expression() const {
-40039:   return expr_type(expr, true);
-40039: }
-40039: 
-40039: inline Representation
-40039: Grid_Generator::representation() const {
-40039:   return expr.representation();
-40039: }
-40039: 
-40039: inline void
-40039: Grid_Generator::set_representation(Representation r) {
-40039:   expr.set_representation(r);
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Grid_Generator::max_space_dimension() {
-40039:   return Linear_Expression::max_space_dimension() - 1;
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Grid_Generator::space_dimension() const {
-40039:   return expression().space_dimension();
-40039: }
-40039: 
-40039: inline void
-40039: Grid_Generator::set_space_dimension(dimension_type space_dim) {
-40039:   const dimension_type old_space_dim = space_dimension();
-40039:   if (space_dim > old_space_dim) {
-40039:     expr.set_space_dimension(space_dim + 1);
-40039:     expr.swap_space_dimensions(Variable(space_dim), Variable(old_space_dim));
-40039:   }
-40039:   else {
-40039:     expr.swap_space_dimensions(Variable(space_dim), Variable(old_space_dim));
-40039:     expr.set_space_dimension(space_dim + 1);
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline void
-40039: Grid_Generator::set_space_dimension_no_ok(dimension_type space_dim) {
-40039:   set_space_dimension(space_dim);
-40039: }
-40039: 
-40039: inline void
-40039: Grid_Generator::shift_space_dimensions(Variable v, dimension_type n) {
-40039:   expr.shift_space_dimensions(v, n);
-40039: }
-40039: 
-40039: inline Grid_Generator::Type
-40039: Grid_Generator::type() const {
-40039:   if (is_line()) {
-40039:     return LINE;
-40039:   }
-40039:   return is_point() ? POINT : PARAMETER;
-40039: }
-40039: 
-40039: inline bool
-40039: Grid_Generator::is_line() const {
-40039:   return is_line_or_equality();
-40039: }
-40039: 
-40039: inline bool
-40039: Grid_Generator::is_parameter() const {
-40039:   return is_parameter_or_point() && is_line_or_parameter();
-40039: }
-40039: 
-40039: inline bool
-40039: Grid_Generator::is_line_or_parameter() const {
-40039:   return expr.inhomogeneous_term() == 0;
-40039: }
-40039: 
-40039: inline bool
-40039: Grid_Generator::is_point() const {
-40039:   return !is_line_or_parameter();
-40039: }
-40039: 
-40039: inline bool
-40039: Grid_Generator::is_parameter_or_point() const {
-40039:   return is_ray_or_point_or_inequality();
-40039: }
-40039: 
-40039: inline void
-40039: Grid_Generator::set_divisor(Coefficient_traits::const_reference d) {
-40039:   ((void) 0);
-40039:   if (is_line_or_parameter()) {
-40039:     expr.set_coefficient(Variable(space_dimension()), d);
-40039:   }
-40039:   else {
-40039:     expr.set_inhomogeneous_term(d);
-40039:   }
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: Grid_Generator::divisor() const {
-40039:   if (is_line()) {
-40039:     throw_invalid_argument("divisor()", "*this is a line");
-40039:   }
-40039:   if (is_line_or_parameter()) {
-40039:     return expr.coefficient(Variable(space_dimension()));
-40039:   }
-40039:   else {
-40039:     return expr.inhomogeneous_term();
-40039:   }
-40039: }
-40039: 
-40039: inline bool
-40039: Grid_Generator::is_equal_at_dimension(dimension_type dim,
-40039:                                       const Grid_Generator& y) const {
-40039:   const Grid_Generator& x = *this;
-40039:   return x.expr.get(dim) * y.divisor() == y.expr.get(dim) * x.divisor();
-40039: }
-40039: 
-40039: inline void
-40039: Grid_Generator::set_is_line() {
-40039:   set_is_line_or_equality();
-40039: }
-40039: 
-40039: inline void
-40039: Grid_Generator::set_is_parameter_or_point() {
-40039:   set_is_ray_or_point_or_inequality();
-40039: }
-40039: 
-40039: inline Grid_Generator&
-40039: Grid_Generator::operator=(const Grid_Generator& g) {
-40039:   Grid_Generator tmp = g;
-40039:   swap(*this, tmp);
-40039: 
-40039:   return *this;
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: Grid_Generator::coefficient(const Variable v) const {
-40039:   if (v.space_dimension() > space_dimension()) {
-40039:     throw_dimension_incompatible("coefficient(v)", "v", v);
-40039:   }
-40039:   return expr.coefficient(v);
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Grid_Generator::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Grid_Generator::external_memory_in_bytes() const {
-40039:   return expr.external_memory_in_bytes();
-40039: }
-40039: 
-40039: inline const Grid_Generator&
-40039: Grid_Generator::zero_dim_point() {
-40039:   ((void) 0);
-40039:   return *zero_dim_point_p;
-40039: }
-40039: 
-40039: inline void
-40039: Grid_Generator::strong_normalize() {
-40039:   ((void) 0);
-40039:   expr.normalize();
-40039:   sign_normalize();
-40039: }
-40039: 
-40039: inline void
-40039: Grid_Generator::m_swap(Grid_Generator& y) {
-40039:   using std::swap;
-40039:   swap(expr, y.expr);
-40039:   swap(kind_, y.kind_);
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: operator==(const Grid_Generator& x, const Grid_Generator& y) {
-40039:   return x.is_equivalent_to(y);
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: operator!=(const Grid_Generator& x, const Grid_Generator& y) {
-40039:   return !(x == y);
-40039: }
-40039: 
-40039: 
-40039: inline Grid_Generator
-40039: grid_line(const Linear_Expression& e, Representation r) {
-40039:   return Grid_Generator::grid_line(e, r);
-40039: }
-40039: 
-40039: 
-40039: inline Grid_Generator
-40039: parameter(const Linear_Expression& e,
-40039:           Coefficient_traits::const_reference d, Representation r) {
-40039:   return Grid_Generator::parameter(e, d, r);
-40039: }
-40039: 
-40039: 
-40039: inline Grid_Generator
-40039: parameter(Representation r) {
-40039:   return Grid_Generator::parameter(r);
-40039: }
-40039: 
-40039: 
-40039: inline Grid_Generator
-40039: parameter(const Linear_Expression& e, Representation r) {
-40039:   return Grid_Generator::parameter(e, r);
-40039: }
-40039: 
-40039: 
-40039: inline Grid_Generator
-40039: grid_point(const Linear_Expression& e,
-40039:            Coefficient_traits::const_reference d, Representation r) {
-40039:   return Grid_Generator::grid_point(e, d, r);
-40039: }
-40039: 
-40039: 
-40039: inline Grid_Generator
-40039: grid_point(Representation r) {
-40039:   return Grid_Generator::grid_point(r);
-40039: }
-40039: 
-40039: 
-40039: inline Grid_Generator
-40039: grid_point(const Linear_Expression& e, Representation r) {
-40039:   return Grid_Generator::grid_point(e, r);
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: swap(Grid_Generator& x, Grid_Generator& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 795 "../../src/Grid_Generator_defs.hh" 2
-40039: # 33 "../../src/Linear_Expression_Impl_templates.hh" 2
-40039: # 1 "../../src/Congruence_defs.hh" 1
-40039: # 42 "../../src/Congruence_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: bool
-40039: operator==(const Congruence& x, const Congruence& y);
-40039: 
-40039: 
-40039: 
-40039: bool
-40039: operator!=(const Congruence& x, const Congruence& y);
-40039: 
-40039: }
-40039: # 161 "../../src/Congruence_defs.hh"
-40039: class Parma_Polyhedra_Library::Congruence {
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Representation default_representation = SPARSE;
-40039: 
-40039: 
-40039:   explicit Congruence(Representation r = default_representation);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Congruence(const Congruence& cg);
-40039: 
-40039: 
-40039:   Congruence(const Congruence& cg, Representation r);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   explicit Congruence(const Constraint& c,
-40039:                       Representation r = default_representation);
-40039: 
-40039: 
-40039:   ~Congruence();
-40039: 
-40039: 
-40039:   Congruence& operator=(const Congruence& y);
-40039: 
-40039: 
-40039:   Representation representation() const;
-40039: 
-40039: 
-40039:   void set_representation(Representation r);
-40039: 
-40039: 
-40039:   static dimension_type max_space_dimension();
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039:   void permute_space_dimensions(const std::vector<Variable>& cycles);
-40039: 
-40039: 
-40039:   typedef Expression_Adapter_Transparent<Linear_Expression> expr_type;
-40039: 
-40039:   expr_type expression() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference coefficient(Variable v) const;
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference inhomogeneous_term() const;
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference modulus() const;
-40039: 
-40039: 
-40039: 
-40039:   void set_modulus(Coefficient_traits::const_reference m);
-40039: 
-40039: 
-40039:   void scale(Coefficient_traits::const_reference factor);
-40039: 
-40039: 
-40039:   void affine_preimage(Variable v,
-40039:                        const Linear_Expression& expr,
-40039:                        Coefficient_traits::const_reference denominator);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Congruence&
-40039:   operator/=(Coefficient_traits::const_reference k);
-40039: # 261 "../../src/Congruence_defs.hh"
-40039:   bool is_tautological() const;
-40039: # 273 "../../src/Congruence_defs.hh"
-40039:   bool is_inconsistent() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_proper_congruence() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_equality() const;
-40039: 
-40039: 
-40039:   static void initialize();
-40039: 
-40039: 
-40039:   static void finalize();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Congruence& zero_dim_integrality();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Congruence& zero_dim_false();
-40039: 
-40039: 
-40039:   static Congruence
-40039:   create(const Linear_Expression& e1, const Linear_Expression& e2,
-40039:          Representation r = default_representation);
-40039: 
-40039: 
-40039:   static Congruence
-40039:   create(const Linear_Expression& e, Coefficient_traits::const_reference n,
-40039:          Representation r = default_representation);
-40039: 
-40039: 
-40039:   static Congruence
-40039:   create(Coefficient_traits::const_reference n, const Linear_Expression& e,
-40039:          Representation r = default_representation);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   void m_swap(Congruence& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Congruence(const Congruence& cg, dimension_type new_space_dimension);
-40039: 
-40039: 
-40039:   Congruence(const Congruence& cg, dimension_type new_space_dimension,
-40039:              Representation r);
-40039: 
-40039: 
-40039: 
-40039:   Congruence(const Constraint& cg, dimension_type new_space_dimension,
-40039:              Representation r = default_representation);
-40039: # 374 "../../src/Congruence_defs.hh"
-40039:   Congruence(Linear_Expression& le,
-40039:              Coefficient_traits::const_reference m, Recycle_Input);
-40039: 
-40039: 
-40039:   void swap_space_dimensions(Variable v1, Variable v2);
-40039: 
-40039: 
-40039: 
-40039:   void set_space_dimension(dimension_type n);
-40039: 
-40039: 
-40039: 
-40039:   void shift_space_dimensions(Variable v, dimension_type n);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void sign_normalize();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void normalize();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void strong_normalize();
-40039: 
-40039: private:
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Congruence* zero_dim_false_p;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Congruence* zero_dim_integrality_p;
-40039: 
-40039:   Linear_Expression expr;
-40039: 
-40039:   Coefficient modulus_;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_equal_at_dimension(Variable v,
-40039:                              const Congruence& cg) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void
-40039:   throw_invalid_argument(const char* method, const char* message) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void
-40039:   throw_dimension_incompatible(const char* method,
-40039:                                const char* v_name,
-40039:                                Variable v) const;
-40039: 
-40039:   friend bool
-40039:   operator==(const Congruence& x, const Congruence& y);
-40039: 
-40039:   friend bool
-40039:   operator!=(const Congruence& x, const Congruence& y);
-40039: 
-40039:   friend class Scalar_Products;
-40039:   friend class Grid;
-40039: };
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: std::ostream&
-40039: operator<<(std::ostream& s, const Congruence& c);
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: Congruence
-40039: operator%=(const Linear_Expression& e1, const Linear_Expression& e2);
-40039: 
-40039: 
-40039: 
-40039: Congruence
-40039: operator%=(const Linear_Expression& e, Coefficient_traits::const_reference n);
-40039: # 490 "../../src/Congruence_defs.hh"
-40039: Congruence
-40039: operator/(const Congruence& cg, Coefficient_traits::const_reference k);
-40039: 
-40039: 
-40039: 
-40039: Congruence
-40039: operator/(const Constraint& c, Coefficient_traits::const_reference m);
-40039: 
-40039: 
-40039: void
-40039: swap(Congruence& x, Congruence& y);
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Congruence_inlines.hh" 1
-40039: # 29 "../../src/Congruence_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline
-40039: Congruence::Congruence(Representation r)
-40039:   : expr(r) {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Congruence::Congruence(const Congruence& cg)
-40039:   : expr(cg.expr), modulus_(cg.modulus_) {
-40039: }
-40039: 
-40039: inline
-40039: Congruence::Congruence(const Congruence& cg, Representation r)
-40039:   : expr(cg.expr, r), modulus_(cg.modulus_) {
-40039: }
-40039: 
-40039: inline
-40039: Congruence::Congruence(const Congruence& cg,
-40039:                        dimension_type new_space_dimension)
-40039:   : expr(cg.expr, new_space_dimension), modulus_(cg.modulus_) {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Congruence::Congruence(const Congruence& cg,
-40039:                        dimension_type new_space_dimension,
-40039:                        Representation r)
-40039:   : expr(cg.expr, new_space_dimension, r), modulus_(cg.modulus_) {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline Representation
-40039: Congruence::representation() const {
-40039:   return expr.representation();
-40039: }
-40039: 
-40039: inline void
-40039: Congruence::set_representation(Representation r) {
-40039:   expr.set_representation(r);
-40039: }
-40039: 
-40039: inline Congruence::expr_type
-40039: Congruence::expression() const {
-40039:   return expr_type(expr);
-40039: }
-40039: 
-40039: inline void
-40039: Congruence::set_space_dimension(dimension_type n) {
-40039:   expr.set_space_dimension(n);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline void
-40039: Congruence::shift_space_dimensions(Variable v, dimension_type n) {
-40039:   expr.shift_space_dimensions(v, n);
-40039: }
-40039: 
-40039: inline
-40039: Congruence::~Congruence() {
-40039: }
-40039: 
-40039: inline
-40039: Congruence::Congruence(Linear_Expression& le,
-40039:                        Coefficient_traits::const_reference m,
-40039:                        Recycle_Input)
-40039:   : modulus_(m) {
-40039:   ((void) 0);
-40039:   swap(expr, le);
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline Congruence
-40039: Congruence::create(const Linear_Expression& e,
-40039:                    Coefficient_traits::const_reference n,
-40039:                    Representation r) {
-40039:   Linear_Expression diff(e, r);
-40039:   diff -= n;
-40039:   const Congruence cg(diff, 1, Recycle_Input());
-40039:   return cg;
-40039: }
-40039: 
-40039: inline Congruence
-40039: Congruence::create(Coefficient_traits::const_reference n,
-40039:                    const Linear_Expression& e,
-40039:                    Representation r) {
-40039:   Linear_Expression diff(e, r);
-40039:   diff -= n;
-40039:   const Congruence cg(diff, 1, Recycle_Input());
-40039:   return cg;
-40039: }
-40039: 
-40039: 
-40039: inline Congruence
-40039: operator%=(const Linear_Expression& e1, const Linear_Expression& e2) {
-40039:   return Congruence::create(e1, e2);
-40039: }
-40039: 
-40039: 
-40039: inline Congruence
-40039: operator%=(const Linear_Expression& e, Coefficient_traits::const_reference n) {
-40039:   return Congruence::create(e, n);
-40039: }
-40039: 
-40039: 
-40039: inline Congruence
-40039: operator/(const Congruence& cg, Coefficient_traits::const_reference k) {
-40039:   Congruence ret = cg;
-40039:   ret /= k;
-40039:   return ret;
-40039: }
-40039: 
-40039: inline const Congruence&
-40039: Congruence::zero_dim_integrality() {
-40039:   return *zero_dim_integrality_p;
-40039: }
-40039: 
-40039: inline const Congruence&
-40039: Congruence::zero_dim_false() {
-40039:   return *zero_dim_false_p;
-40039: }
-40039: 
-40039: inline Congruence&
-40039: Congruence::operator=(const Congruence& y) {
-40039:   Congruence tmp = y;
-40039:   swap(*this, tmp);
-40039:   return *this;
-40039: }
-40039: 
-40039: 
-40039: inline Congruence
-40039: operator/(const Constraint& c, Coefficient_traits::const_reference m) {
-40039:   Congruence ret(c);
-40039:   ret /= m;
-40039:   return ret;
-40039: }
-40039: 
-40039: inline Congruence&
-40039: Congruence::operator/=(Coefficient_traits::const_reference k) {
-40039:   if (k >= 0) {
-40039:     modulus_ *= k;
-40039:   }
-40039:   else {
-40039:     modulus_ *= -k;
-40039:   }
-40039:   return *this;
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: operator==(const Congruence& x, const Congruence& y) {
-40039:   if (x.space_dimension() != y.space_dimension()) {
-40039:     return false;
-40039:   }
-40039:   Congruence x_temp(x);
-40039:   Congruence y_temp(y);
-40039:   x_temp.strong_normalize();
-40039:   y_temp.strong_normalize();
-40039:   return x_temp.expr.is_equal_to(y_temp.expr)
-40039:     && x_temp.modulus() == y_temp.modulus();
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: operator!=(const Congruence& x, const Congruence& y) {
-40039:   return !(x == y);
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Congruence::max_space_dimension() {
-40039:   return Linear_Expression::max_space_dimension();
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Congruence::space_dimension() const {
-40039:   return expr.space_dimension();
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: Congruence::coefficient(const Variable v) const {
-40039:   if (v.space_dimension() > space_dimension()) {
-40039:     throw_dimension_incompatible("coefficient(v)", "v", v);
-40039:   }
-40039:   return expr.coefficient(v);
-40039: }
-40039: 
-40039: inline void
-40039: Congruence::permute_space_dimensions(const std::vector<Variable>& cycles) {
-40039:   expr.permute_space_dimensions(cycles);
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: Congruence::inhomogeneous_term() const {
-40039:   return expr.inhomogeneous_term();
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: Congruence::modulus() const {
-40039:   return modulus_;
-40039: }
-40039: 
-40039: inline void
-40039: Congruence::set_modulus(Coefficient_traits::const_reference m) {
-40039:   modulus_ = m;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline bool
-40039: Congruence::is_proper_congruence() const {
-40039:   return modulus() > 0;
-40039: }
-40039: 
-40039: inline bool
-40039: Congruence::is_equality() const {
-40039:   return modulus() == 0;
-40039: }
-40039: 
-40039: inline bool
-40039: Congruence::is_equal_at_dimension(Variable v,
-40039:                                   const Congruence& cg) const {
-40039:   return coefficient(v) * cg.modulus() == cg.coefficient(v) * modulus();
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Congruence::external_memory_in_bytes() const {
-40039:   return expr.external_memory_in_bytes()
-40039:          + Parma_Polyhedra_Library::external_memory_in_bytes(modulus_);
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Congruence::total_memory_in_bytes() const {
-40039:   return external_memory_in_bytes() + sizeof(*this);
-40039: }
-40039: 
-40039: inline void
-40039: Congruence::m_swap(Congruence& y) {
-40039:   using std::swap;
-40039:   swap(expr, y.expr);
-40039:   swap(modulus_, y.modulus_);
-40039: }
-40039: 
-40039: inline void
-40039: Congruence::swap_space_dimensions(Variable v1, Variable v2) {
-40039:   expr.swap_space_dimensions(v1, v2);
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: swap(Congruence& x, Congruence& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 505 "../../src/Congruence_defs.hh" 2
-40039: # 34 "../../src/Linear_Expression_Impl_templates.hh" 2
-40039: 
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Row>
-40039: Linear_Expression_Impl<Row>
-40039: ::Linear_Expression_Impl(const Linear_Expression_Impl& e) {
-40039:   construct(e);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: template <typename Row2>
-40039: Linear_Expression_Impl<Row>
-40039: ::Linear_Expression_Impl(const Linear_Expression_Impl<Row2>& e) {
-40039:   construct(e);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: Linear_Expression_Impl<Row>
-40039: ::Linear_Expression_Impl(const Linear_Expression_Interface& e) {
-40039:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
-40039:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
-40039:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&e)) {
-40039:     construct(*p);
-40039:   }
-40039:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&e)) {
-40039:     construct(*p);
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: Linear_Expression_Impl<Row>
-40039: ::Linear_Expression_Impl(const Linear_Expression_Interface& e,
-40039:                          dimension_type space_dim) {
-40039:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
-40039:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
-40039:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&e)) {
-40039:     construct(*p, space_dim);
-40039:   }
-40039:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&e)) {
-40039:     construct(*p, space_dim);
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: template <typename Row2>
-40039: void
-40039: Linear_Expression_Impl<Row>
-40039: ::linear_combine(const Linear_Expression_Impl<Row2>& y, Variable i) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   linear_combine(y, i.space_dimension());
-40039: }
-40039: 
-40039: template <typename Row>
-40039: template <typename Row2>
-40039: void
-40039: Linear_Expression_Impl<Row>
-40039: ::linear_combine(const Linear_Expression_Impl<Row2>& y, dimension_type i) {
-40039:   const Linear_Expression_Impl& x = *this;
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   Coefficient_traits::const_reference x_i = x.row.get(i);
-40039:   Coefficient_traits::const_reference y_i = y.row.get(i);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_normalized_x_v; Parma_Polyhedra_Library::Coefficient& normalized_x_v = holder_normalized_x_v.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_normalized_y_v; Parma_Polyhedra_Library::Coefficient& normalized_y_v = holder_normalized_y_v.item();
-40039:   normalize2(x_i, y_i, normalized_x_v, normalized_y_v);
-40039:   neg_assign(normalized_x_v);
-40039:   linear_combine(y, normalized_y_v, normalized_x_v);
-40039: 
-40039: 
-40039:   
-40039: # 116 "../../src/Linear_Expression_Impl_templates.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 116 "../../src/Linear_Expression_Impl_templates.hh"
-40039:                           ;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: template <typename Row2>
-40039: void
-40039: Linear_Expression_Impl<Row>
-40039: ::linear_combine(const Linear_Expression_Impl<Row2>& y,
-40039:                  Coefficient_traits::const_reference c1,
-40039:                  Coefficient_traits::const_reference c2) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   if (space_dimension() < y.space_dimension()) {
-40039:     set_space_dimension(y.space_dimension());
-40039:   }
-40039:   linear_combine(y, c1, c2, 0, y.space_dimension() + 1);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: template <typename Row2>
-40039: void
-40039: Linear_Expression_Impl<Row>
-40039: ::linear_combine_lax(const Linear_Expression_Impl<Row2>& y,
-40039:                      Coefficient_traits::const_reference c1,
-40039:                      Coefficient_traits::const_reference c2) {
-40039:   if (space_dimension() < y.space_dimension()) {
-40039:     set_space_dimension(y.space_dimension());
-40039:   }
-40039:   linear_combine_lax(y, c1, c2, 0, y.space_dimension() + 1);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: template <typename Row2>
-40039: int
-40039: Linear_Expression_Impl<Row>
-40039: ::compare(const Linear_Expression_Impl<Row2>& y) const {
-40039:   const Linear_Expression_Impl& x = *this;
-40039: 
-40039: 
-40039:   typename Row::const_iterator i = x.row.lower_bound(1);
-40039:   typename Row::const_iterator i_end = x.row.end();
-40039:   typename Row2::const_iterator j = y.row.lower_bound(1);
-40039:   typename Row2::const_iterator j_end = y.row.end();
-40039:   while (i != i_end && j != j_end) {
-40039:     if (i.index() < j.index()) {
-40039:       const int s = sgn(*i);
-40039:       if (s != 0) {
-40039:         return 2*s;
-40039:       }
-40039:       ++i;
-40039:       continue;
-40039:     }
-40039:     if (i.index() > j.index()) {
-40039:       const int s = sgn(*j);
-40039:       if (s != 0) {
-40039:         return -2*s;
-40039:       }
-40039:       ++j;
-40039:       continue;
-40039:     }
-40039:     ((void) 0);
-40039:     const int s = cmp(*i, *j);
-40039:     if (s < 0) {
-40039:       return -2;
-40039:     }
-40039:     if (s > 0) {
-40039:       return 2;
-40039:     }
-40039:     ((void) 0);
-40039:     ++i;
-40039:     ++j;
-40039:   }
-40039:   for ( ; i != i_end; ++i) {
-40039:     const int s = sgn(*i);
-40039:     if (s != 0) {
-40039:       return 2*s;
-40039:     }
-40039:   }
-40039:   for ( ; j != j_end; ++j) {
-40039:     const int s = sgn(*j);
-40039:     if (s != 0) {
-40039:       return -2*s;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const int comp = cmp(x.row.get(0), y.row.get(0));
-40039:   if (comp > 0) {
-40039:     return 1;
-40039:   }
-40039:   if (comp < 0) {
-40039:     return -1;
-40039:   }
-40039:   ((void) 0);
-40039: 
-40039: 
-40039:   return 0;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: Linear_Expression_Impl<Row>::Linear_Expression_Impl(const Variable v) {
-40039:   if (v.space_dimension() > max_space_dimension()) {
-40039:     throw std::length_error("Linear_Expression_Impl::"
-40039:                             "Linear_Expression_Impl(v):\n"
-40039:                             "v exceeds the maximum allowed "
-40039:                             "space dimension.");
-40039:   }
-40039:   set_space_dimension(v.space_dimension());
-40039:   (*this) += v;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: template <typename Row2>
-40039: bool
-40039: Linear_Expression_Impl<Row>
-40039: ::is_equal_to(const Linear_Expression_Impl<Row2>& x) const {
-40039:   return row == x.row;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>::get_row(Dense_Row& r) const {
-40039:   r = this->row;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>::get_row(Sparse_Row& r) const {
-40039:   r = this->row;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>
-40039: ::permute_space_dimensions(const std::vector<Variable>& cycle) {
-40039:   const dimension_type n = cycle.size();
-40039:   if (n < 2) {
-40039:     return;
-40039:   }
-40039: 
-40039:   if (n == 2) {
-40039:     row.swap_coefficients(cycle[0].space_dimension(),
-40039:                           cycle[1].space_dimension());
-40039:   }
-40039:   else {
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_tmp; Parma_Polyhedra_Library::Coefficient& tmp = holder_tmp.item();
-40039:     tmp = row.get(cycle.back().space_dimension());
-40039:     for (dimension_type i = n - 1; i-- > 0; ) {
-40039:       row.swap_coefficients(cycle[i + 1].space_dimension(),
-40039:                             cycle[i].space_dimension());
-40039:     }
-40039:     if (tmp == 0) {
-40039:       row.reset(cycle[0].space_dimension());
-40039:     }
-40039:     else {
-40039:       using std::swap;
-40039:       swap(tmp, row[cycle[0].space_dimension()]);
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: template <typename Row2>
-40039: Linear_Expression_Impl<Row>&
-40039: Linear_Expression_Impl<Row>::operator+=(const Linear_Expression_Impl<Row2>& e) {
-40039:   linear_combine(e, Coefficient_one(), Coefficient_one());
-40039:   return *this;
-40039: }
-40039: 
-40039: 
-40039: template <typename Row>
-40039: Linear_Expression_Impl<Row>&
-40039: Linear_Expression_Impl<Row>::operator+=(const Variable v) {
-40039:   const dimension_type v_space_dim = v.space_dimension();
-40039:   if (v_space_dim > Linear_Expression_Impl<Row>::max_space_dimension()) {
-40039:     throw std::length_error("Linear_Expression_Impl& "
-40039:                             "operator+=(e, v):\n"
-40039:                             "v exceeds the maximum allowed space dimension.");
-40039:   }
-40039:   if (space_dimension() < v_space_dim) {
-40039:     set_space_dimension(v_space_dim);
-40039:   }
-40039:   typename Row::iterator itr = row.insert(v_space_dim);
-40039:   ++(*itr);
-40039:   if (*itr == 0) {
-40039:     row.reset(itr);
-40039:   }
-40039:   ((void) 0);
-40039:   return *this;
-40039: }
-40039: 
-40039: 
-40039: template <typename Row>
-40039: template <typename Row2>
-40039: Linear_Expression_Impl<Row>&
-40039: Linear_Expression_Impl<Row>::operator-=(const Linear_Expression_Impl<Row2>& e2) {
-40039:   linear_combine(e2, Coefficient_one(), -1);
-40039:   return *this;
-40039: }
-40039: 
-40039: 
-40039: template <typename Row>
-40039: Linear_Expression_Impl<Row>&
-40039: Linear_Expression_Impl<Row>::operator-=(const Variable v) {
-40039:   const dimension_type v_space_dim = v.space_dimension();
-40039:   if (v_space_dim > Linear_Expression_Impl<Row>::max_space_dimension()) {
-40039:     throw std::length_error("Linear_Expression_Impl& "
-40039:                             "operator-=(e, v):\n"
-40039:                             "v exceeds the maximum allowed space dimension.");
-40039:   }
-40039:   if (space_dimension() < v_space_dim) {
-40039:     set_space_dimension(v_space_dim);
-40039:   }
-40039:   typename Row::iterator itr = row.insert(v_space_dim);
-40039:   --(*itr);
-40039:   if (*itr == 0) {
-40039:     row.reset(itr);
-40039:   }
-40039:   ((void) 0);
-40039:   return *this;
-40039: }
-40039: 
-40039: 
-40039: template <typename Row>
-40039: Linear_Expression_Impl<Row>&
-40039: Linear_Expression_Impl<Row>::operator*=(Coefficient_traits::const_reference n) {
-40039:   if (n == 0) {
-40039:     row.clear();
-40039:     ((void) 0);
-40039:     return *this;
-40039:   }
-40039:   for (typename Row::iterator i = row.begin(),
-40039:          i_end = row.end(); i != i_end; ++i) {
-40039:     (*i) *= n;
-40039:   }
-40039:   ((void) 0);
-40039:   return *this;
-40039: }
-40039: 
-40039: 
-40039: template <typename Row>
-40039: Linear_Expression_Impl<Row>&
-40039: Linear_Expression_Impl<Row>::operator/=(Coefficient_traits::const_reference n) {
-40039:   typename Row::iterator i = row.begin();
-40039:   const typename Row::iterator& i_end = row.end();
-40039:   while (i != i_end) {
-40039:     (*i) /= n;
-40039:     if (*i == 0) {
-40039:       i = row.reset(i);
-40039:     }
-40039:     else {
-40039:       ++i;
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039:   return *this;
-40039: }
-40039: 
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>::negate() {
-40039:   for (typename Row::iterator i = row.begin(),
-40039:          i_end = row.end(); i != i_end; ++i) {
-40039:     neg_assign(*i);
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: 
-40039: template <typename Row>
-40039: Linear_Expression_Impl<Row>&
-40039: Linear_Expression_Impl<Row>::add_mul_assign(Coefficient_traits::const_reference n,
-40039:                                             const Variable v) {
-40039:   const dimension_type v_space_dim = v.space_dimension();
-40039:   if (v_space_dim > Linear_Expression_Impl<Row>::max_space_dimension()) {
-40039:     throw std::length_error("Linear_Expression_Impl& "
-40039:                             "add_mul_assign(e, n, v):\n"
-40039:                             "v exceeds the maximum allowed space dimension.");
-40039:   }
-40039:   if (space_dimension() < v_space_dim) {
-40039:     set_space_dimension(v_space_dim);
-40039:   }
-40039:   if (n == 0) {
-40039:     return *this;
-40039:   }
-40039:   typename Row::iterator itr = row.insert(v_space_dim);
-40039:   (*itr) += n;
-40039:   if (*itr == 0) {
-40039:     row.reset(itr);
-40039:   }
-40039:   ((void) 0);
-40039:   return *this;
-40039: }
-40039: 
-40039: 
-40039: template <typename Row>
-40039: Linear_Expression_Impl<Row>&
-40039: Linear_Expression_Impl<Row>
-40039: ::sub_mul_assign(Coefficient_traits::const_reference n,
-40039:                  const Variable v) {
-40039:   const dimension_type v_space_dim = v.space_dimension();
-40039:   if (v_space_dim > Linear_Expression_Impl<Row>::max_space_dimension()) {
-40039:     throw std::length_error("Linear_Expression_Impl& "
-40039:                             "sub_mul_assign(e, n, v):\n"
-40039:                             "v exceeds the maximum allowed space dimension.");
-40039:   }
-40039:   if (space_dimension() < v_space_dim) {
-40039:     set_space_dimension(v_space_dim);
-40039:   }
-40039:   if (n == 0) {
-40039:     return *this;
-40039:   }
-40039:   typename Row::iterator itr = row.insert(v_space_dim);
-40039:   (*itr) -= n;
-40039:   if (*itr == 0) {
-40039:     row.reset(itr);
-40039:   }
-40039:   ((void) 0);
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: template <typename Row2>
-40039: void
-40039: Linear_Expression_Impl<Row>
-40039: ::add_mul_assign(Coefficient_traits::const_reference factor,
-40039:                  const Linear_Expression_Impl<Row2>& y) {
-40039:   if (factor != 0) {
-40039:     linear_combine(y, Coefficient_one(), factor);
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: template <typename Row2>
-40039: void
-40039: Linear_Expression_Impl<Row>
-40039: ::sub_mul_assign(Coefficient_traits::const_reference factor,
-40039:                  const Linear_Expression_Impl<Row2>& y) {
-40039:   if (factor != 0) {
-40039:     linear_combine(y, Coefficient_one(), -factor);
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>::print(std::ostream& s) const {
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_ev; Parma_Polyhedra_Library::Coefficient& ev = holder_ev.item();
-40039:   bool first = true;
-40039:   for (typename Row::const_iterator i = row.lower_bound(1), i_end = row.end();
-40039:        i != i_end; ++i) {
-40039:     ev = *i;
-40039:     if (ev == 0) {
-40039:       continue;
-40039:     }
-40039:     if (!first) {
-40039:       if (ev > 0) {
-40039:         s << " + ";
-40039:       }
-40039:       else {
-40039:         s << " - ";
-40039:         neg_assign(ev);
-40039:       }
-40039:     }
-40039:     else {
-40039:       first = false;
-40039:     }
-40039:     if (ev == -1) {
-40039:       s << "-";
-40039:     }
-40039:     else if (ev != 1) {
-40039:       s << ev << "*";
-40039:     }
-40039:     IO_Operators::operator<<(s, Variable(i.index() - 1));
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_it; Parma_Polyhedra_Library::Coefficient& it = holder_it.item();
-40039:   it = row[0];
-40039:   if (it != 0) {
-40039:     if (!first) {
-40039:       if (it > 0) {
-40039:         s << " + ";
-40039:       }
-40039:       else {
-40039:         s << " - ";
-40039:         neg_assign(it);
-40039:       }
-40039:     }
-40039:     else {
-40039:       first = false;
-40039:     }
-40039:     s << it;
-40039:   }
-40039: 
-40039:   if (first) {
-40039: 
-40039:     s << Coefficient_zero();
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: Coefficient_traits::const_reference
-40039: Linear_Expression_Impl<Row>::get(dimension_type i) const {
-40039:   return row.get(i);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>
-40039: ::set(dimension_type i, Coefficient_traits::const_reference n) {
-40039:   if (n == 0) {
-40039:     row.reset(i);
-40039:   }
-40039:   else {
-40039:     row.insert(i, n);
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>
-40039: ::exact_div_assign(Coefficient_traits::const_reference c,
-40039:                    dimension_type start, dimension_type end) {
-40039: 
-40039: 
-40039: 
-40039:   for (typename Row::iterator i = row.lower_bound(start),
-40039:          i_end = row.lower_bound(end); i != i_end; ++i) {
-40039:     Parma_Polyhedra_Library::exact_div_assign(*i, *i, c);
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>
-40039: ::mul_assign(Coefficient_traits::const_reference c,
-40039:                    dimension_type start, dimension_type end) {
-40039:   if (c == 0) {
-40039:     typename Row::iterator i = row.lower_bound(start);
-40039:     const typename Row::iterator& i_end = row.end();
-40039:     while (i != i_end && i.index() < end) {
-40039:       i = row.reset(i);
-40039:     }
-40039:   }
-40039:   else {
-40039:     for (typename Row::iterator
-40039:       i = row.lower_bound(start), i_end = row.lower_bound(end);
-40039:       i != i_end; ++i) {
-40039:       (*i) *= c;
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: template <typename Row2>
-40039: void
-40039: Linear_Expression_Impl<Row>
-40039: ::linear_combine(const Linear_Expression_Impl<Row2>& y,
-40039:                  Coefficient_traits::const_reference c1,
-40039:                  Coefficient_traits::const_reference c2,
-40039:                  dimension_type start, dimension_type end) {
-40039:   Parma_Polyhedra_Library::linear_combine(row, y.row, c1, c2, start, end);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: template <typename Row2>
-40039: void
-40039: Linear_Expression_Impl<Row>
-40039: ::linear_combine_lax(const Linear_Expression_Impl<Row2>& y,
-40039:                      Coefficient_traits::const_reference c1,
-40039:                      Coefficient_traits::const_reference c2,
-40039:                      dimension_type start, dimension_type end) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   if (c1 == 0) {
-40039:     if (c2 == 0) {
-40039:       ((void) 0);
-40039:       ((void) 0);
-40039:       typename Row::iterator i = row.lower_bound(start);
-40039:       const typename Row::iterator& i_end = row.end();
-40039:       while (i != i_end && i.index() < end) {
-40039:         i = row.reset(i);
-40039:       }
-40039:     }
-40039:     else {
-40039:       ((void) 0);
-40039:       ((void) 0);
-40039: 
-40039:       typename Row::iterator i = row.lower_bound(start);
-40039:       const typename Row::iterator& i_end = row.end();
-40039:       typename Row2::const_iterator j = y.row.lower_bound(start);
-40039:       typename Row2::const_iterator j_last = y.row.lower_bound(end);
-40039: 
-40039:       while (i != i_end && i.index() < end && j != j_last) {
-40039:         if (i.index() < j.index()) {
-40039:           i = row.reset(i);
-40039:           continue;
-40039:         }
-40039:         if (i.index() > j.index()) {
-40039:           i = row.insert(i, j.index(), *j);
-40039:           (*i) *= c2;
-40039:           ++i;
-40039:           ++j;
-40039:           continue;
-40039:         }
-40039:         ((void) 0);
-40039:         (*i) = (*j);
-40039:         (*i) *= c2;
-40039:         ++i;
-40039:         ++j;
-40039:       }
-40039:       while (i != i_end && i.index() < end) {
-40039:         i = row.reset(i);
-40039:       }
-40039:       while (j != j_last) {
-40039:         i = row.insert(i, j.index(), *j);
-40039:         (*i) *= c2;
-40039: 
-40039:         ++j;
-40039:       }
-40039:     }
-40039:   }
-40039:   else {
-40039:     if (c2 == 0) {
-40039:       ((void) 0);
-40039:       ((void) 0);
-40039:       for (typename Row::iterator i = row.lower_bound(start),
-40039:              i_end = row.lower_bound(end); i != i_end; ++i) {
-40039:         (*i) *= c1;
-40039:       }
-40039:     }
-40039:     else {
-40039:       ((void) 0);
-40039:       ((void) 0);
-40039:       Parma_Polyhedra_Library::linear_combine(row, y.row, c1, c2, start, end);
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>::sign_normalize() {
-40039:   typename Row::iterator i = row.lower_bound(1);
-40039:   typename Row::iterator i_end = row.end();
-40039: 
-40039:   for ( ; i != i_end; ++i) {
-40039:     if (*i != 0) {
-40039:       break;
-40039:     }
-40039:   }
-40039: 
-40039:   if (i != i_end && *i < 0) {
-40039:     for ( ; i != i_end; ++i) {
-40039:       neg_assign(*i);
-40039:     }
-40039: 
-40039:     typename Row::iterator first = row.begin();
-40039:     if (first != row.end() && first.index() == 0) {
-40039:       neg_assign(*first);
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>::negate(dimension_type first, dimension_type last) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   typename Row::iterator i = row.lower_bound(first);
-40039:   typename Row::iterator i_end = row.lower_bound(last);
-40039:   for ( ; i != i_end; ++i) {
-40039:     neg_assign(*i);
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: template <typename Row2>
-40039: void
-40039: Linear_Expression_Impl<Row>::construct(const Linear_Expression_Impl<Row2>& e) {
-40039:   row = e.row;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: template <typename Row2>
-40039: void
-40039: Linear_Expression_Impl<Row>::construct(const Linear_Expression_Impl<Row2>& e,
-40039:                                        dimension_type space_dim) {
-40039:   Row x(e.row, space_dim + 1, space_dim + 1);
-40039:   swap(row, x);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: template <typename Row2>
-40039: void
-40039: Linear_Expression_Impl<Row>
-40039: ::scalar_product_assign(Coefficient& result,
-40039:                         const Linear_Expression_Impl<Row2>& y,
-40039:                         dimension_type start, dimension_type end) const {
-40039:   const Linear_Expression_Impl<Row>& x = *this;
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   result = 0;
-40039:   typename Row ::const_iterator x_i = x.row.lower_bound(start);
-40039:   typename Row ::const_iterator x_end = x.row.lower_bound(end);
-40039:   typename Row2::const_iterator y_i = y.row.lower_bound(start);
-40039:   typename Row2::const_iterator y_end = y.row.lower_bound(end);
-40039:   while (x_i != x_end && y_i != y_end) {
-40039:     if (x_i.index() == y_i.index()) {
-40039:       Parma_Polyhedra_Library::add_mul_assign(result, *x_i, *y_i);
-40039:       ++x_i;
-40039:       ++y_i;
-40039:     }
-40039:     else {
-40039:       if (x_i.index() < y_i.index()) {
-40039:         ((void) 0);
-40039: 
-40039:         ++x_i;
-40039:       }
-40039:       else {
-40039:         ((void) 0);
-40039: 
-40039:         ++y_i;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: }
-40039: 
-40039: template <typename Row>
-40039: template <typename Row2>
-40039: int
-40039: Linear_Expression_Impl<Row>
-40039: ::scalar_product_sign(const Linear_Expression_Impl<Row2>& y,
-40039:                       dimension_type start, dimension_type end) const {
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_result; Parma_Polyhedra_Library::Coefficient& result = holder_result.item();
-40039:   scalar_product_assign(result, y, start, end);
-40039:   return sgn(result);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: template <typename Row2>
-40039: bool
-40039: Linear_Expression_Impl<Row>
-40039: ::is_equal_to(const Linear_Expression_Impl<Row2>& y,
-40039:               dimension_type start, dimension_type end) const {
-40039:   const Linear_Expression_Impl<Row>& x = *this;
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039:   typename Row::const_iterator i = x.row.lower_bound(start);
-40039:   typename Row::const_iterator i_end = x.row.lower_bound(end);
-40039:   typename Row2::const_iterator j = y.row.lower_bound(start);
-40039:   typename Row2::const_iterator j_end = y.row.lower_bound(end);
-40039:   while (i != i_end && j != j_end) {
-40039:     if (i.index() == j.index()) {
-40039:       if (*i != *j) {
-40039:         return false;
-40039:       }
-40039:       ++i;
-40039:       ++j;
-40039:     }
-40039:     else {
-40039:       if (i.index() < j.index()) {
-40039:         if (*i != 0) {
-40039:           return false;
-40039:         }
-40039:         ++i;
-40039:       }
-40039:       else {
-40039:         ((void) 0);
-40039:         if (*j != 0) {
-40039:           return false;
-40039:         }
-40039:         ++j;
-40039:       }
-40039:     }
-40039:   }
-40039:   for ( ; i != i_end; ++i) {
-40039:     if (*i != 0) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   for ( ; j != j_end; ++j) {
-40039:     if (*j != 0) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: template <typename Row2>
-40039: bool
-40039: Linear_Expression_Impl<Row>
-40039: ::is_equal_to(const Linear_Expression_Impl<Row2>& y,
-40039:               Coefficient_traits::const_reference c1,
-40039:               Coefficient_traits::const_reference c2,
-40039:               dimension_type start, dimension_type end) const {
-40039:   const Linear_Expression_Impl<Row>& x = *this;
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039: 
-40039:   if (c1 == 0) {
-40039:     if (c2 == 0) {
-40039:       return true;
-40039:     }
-40039:     else {
-40039:       return y.all_zeroes(start, end);
-40039:     }
-40039:   }
-40039:   if (c2 == 0) {
-40039:     return x.all_zeroes(start, end);
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   typename Row::const_iterator i = x.row.lower_bound(start);
-40039:   typename Row::const_iterator i_end = x.row.lower_bound(end);
-40039:   typename Row2::const_iterator j = y.row.lower_bound(start);
-40039:   typename Row2::const_iterator j_end = y.row.lower_bound(end);
-40039:   while (i != i_end && j != j_end) {
-40039:     if (i.index() == j.index()) {
-40039:       if ((*i) * c1 != (*j) * c2) {
-40039:         return false;
-40039:       }
-40039:       ++i;
-40039:       ++j;
-40039:     }
-40039:     else {
-40039:       if (i.index() < j.index()) {
-40039:         if (*i != 0) {
-40039:           return false;
-40039:         }
-40039:         ++i;
-40039:       }
-40039:       else {
-40039:         ((void) 0);
-40039:         if (*j != 0) {
-40039:           return false;
-40039:         }
-40039:         ++j;
-40039:       }
-40039:     }
-40039:   }
-40039:   for ( ; i != i_end; ++i) {
-40039:     if (*i != 0) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   for ( ; j != j_end; ++j) {
-40039:     if (*j != 0) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>
-40039: ::linear_combine(const Linear_Expression_Interface& y, Variable v) {
-40039:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
-40039:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
-40039:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
-40039:     linear_combine(*p, v);
-40039:   }
-40039:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
-40039:     linear_combine(*p, v);
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>
-40039: ::linear_combine(const Linear_Expression_Interface& y,
-40039:                  Coefficient_traits::const_reference c1,
-40039:                  Coefficient_traits::const_reference c2) {
-40039:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
-40039:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
-40039:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
-40039:     linear_combine(*p, c1, c2);
-40039:   }
-40039:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
-40039:     linear_combine(*p, c1, c2);
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>
-40039: ::linear_combine_lax(const Linear_Expression_Interface& y,
-40039:                      Coefficient_traits::const_reference c1,
-40039:                      Coefficient_traits::const_reference c2) {
-40039:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
-40039:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
-40039:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
-40039:     linear_combine_lax(*p, c1, c2);
-40039:   }
-40039:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
-40039:     linear_combine_lax(*p, c1, c2);
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: bool
-40039: Linear_Expression_Impl<Row>
-40039: ::is_equal_to(const Linear_Expression_Interface& y) const {
-40039:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
-40039:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
-40039:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
-40039:     return is_equal_to(*p);
-40039:   }
-40039:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
-40039:     return is_equal_to(*p);
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return false;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: Linear_Expression_Impl<Row>&
-40039: Linear_Expression_Impl<Row>
-40039: ::operator+=(const Linear_Expression_Interface& y) {
-40039:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
-40039:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
-40039:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
-40039:     return operator+=(*p);
-40039:   }
-40039:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
-40039:     return operator+=(*p);
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return *this;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: Linear_Expression_Impl<Row>&
-40039: Linear_Expression_Impl<Row>
-40039: ::operator-=(const Linear_Expression_Interface& y) {
-40039:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
-40039:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
-40039:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
-40039:     return operator-=(*p);
-40039:   }
-40039:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
-40039:     return operator-=(*p);
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return *this;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>
-40039: ::add_mul_assign(Coefficient_traits::const_reference factor,
-40039:                  const Linear_Expression_Interface& y) {
-40039:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
-40039:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
-40039:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
-40039:     add_mul_assign(factor, *p);
-40039:   }
-40039:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
-40039:     add_mul_assign(factor, *p);
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>
-40039: ::sub_mul_assign(Coefficient_traits::const_reference factor,
-40039:                  const Linear_Expression_Interface& y) {
-40039:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
-40039:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
-40039:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
-40039:     sub_mul_assign(factor, *p);
-40039:   }
-40039:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
-40039:     sub_mul_assign(factor, *p);
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>
-40039: ::linear_combine(const Linear_Expression_Interface& y, dimension_type i) {
-40039:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
-40039:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
-40039:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
-40039:     linear_combine(*p, i);
-40039:   }
-40039:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
-40039:     linear_combine(*p, i);
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>
-40039: ::linear_combine(const Linear_Expression_Interface& y,
-40039:                  Coefficient_traits::const_reference c1,
-40039:                  Coefficient_traits::const_reference c2,
-40039:                  dimension_type start, dimension_type end) {
-40039:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
-40039:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
-40039:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
-40039:     linear_combine(*p, c1, c2, start, end);
-40039:   }
-40039:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
-40039:     linear_combine(*p, c1, c2, start, end);
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>
-40039: ::linear_combine_lax(const Linear_Expression_Interface& y,
-40039:                      Coefficient_traits::const_reference c1,
-40039:                      Coefficient_traits::const_reference c2,
-40039:                      dimension_type start, dimension_type end) {
-40039:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
-40039:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
-40039:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
-40039:     linear_combine_lax(*p, c1, c2, start, end);
-40039:   }
-40039:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
-40039:     linear_combine_lax(*p, c1, c2, start, end);
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: int
-40039: Linear_Expression_Impl<Row>
-40039: ::compare(const Linear_Expression_Interface& y) const {
-40039:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
-40039:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
-40039:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
-40039:     return compare(*p);
-40039:   }
-40039:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
-40039:     return compare(*p);
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return 0;
-40039:   }
-40039: }
-40039: 
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>::construct(const Linear_Expression_Interface& y) {
-40039:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
-40039:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
-40039:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
-40039:     return construct(*p);
-40039:   }
-40039:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
-40039:     return construct(*p);
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>::construct(const Linear_Expression_Interface& y,
-40039:                                        dimension_type space_dim) {
-40039:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
-40039:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
-40039:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
-40039:     return construct(*p, space_dim);
-40039:   }
-40039:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
-40039:     return construct(*p, space_dim);
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>
-40039: ::scalar_product_assign(Coefficient& result,
-40039:                         const Linear_Expression_Interface& y,
-40039:                         dimension_type start, dimension_type end) const {
-40039:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
-40039:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
-40039:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
-40039:     scalar_product_assign(result, *p, start, end);
-40039:   }
-40039:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
-40039:     scalar_product_assign(result, *p, start, end);
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: int
-40039: Linear_Expression_Impl<Row>
-40039: ::scalar_product_sign(const Linear_Expression_Interface& y,
-40039:                       dimension_type start, dimension_type end) const {
-40039:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
-40039:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
-40039:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
-40039:     return scalar_product_sign(*p, start, end);
-40039:   }
-40039:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
-40039:     return scalar_product_sign(*p, start, end);
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return 0;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: bool
-40039: Linear_Expression_Impl<Row>
-40039: ::is_equal_to(const Linear_Expression_Interface& y,
-40039:               dimension_type start, dimension_type end) const {
-40039:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
-40039:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
-40039:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
-40039:     return is_equal_to(*p, start, end);
-40039:   }
-40039:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
-40039:     return is_equal_to(*p, start, end);
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return false;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: bool
-40039: Linear_Expression_Impl<Row>
-40039: ::is_equal_to(const Linear_Expression_Interface& y,
-40039:               Coefficient_traits::const_reference c1,
-40039:               Coefficient_traits::const_reference c2,
-40039:               dimension_type start, dimension_type end) const {
-40039:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
-40039:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
-40039:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
-40039:     return is_equal_to(*p, c1, c2, start, end);
-40039:   }
-40039:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
-40039:     return is_equal_to(*p, c1, c2, start, end);
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return false;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: bool
-40039: Linear_Expression_Impl<Row>
-40039: ::have_a_common_variable(const Linear_Expression_Interface& y,
-40039:                          Variable first, Variable last) const {
-40039:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
-40039:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
-40039:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
-40039:     return have_a_common_variable(*p, first, last);
-40039:   }
-40039:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
-40039:     return have_a_common_variable(*p, first, last);
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return false;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: Linear_Expression_Interface::const_iterator_interface*
-40039: Linear_Expression_Impl<Row>::begin() const {
-40039:   return new const_iterator(row, 1);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: Linear_Expression_Interface::const_iterator_interface*
-40039: Linear_Expression_Impl<Row>::end() const {
-40039:   return new const_iterator(row, row.size());
-40039: }
-40039: 
-40039: template <typename Row>
-40039: Linear_Expression_Interface::const_iterator_interface*
-40039: Linear_Expression_Impl<Row>::lower_bound(Variable v) const {
-40039:   return new const_iterator(row, v.space_dimension());
-40039: }
-40039: 
-40039: template <typename Row>
-40039: Linear_Expression_Impl<Row>::const_iterator
-40039: ::const_iterator(const Row& r, dimension_type i)
-40039:   : row(&r), itr(r.lower_bound(i)) {
-40039:   skip_zeroes_forward();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: Linear_Expression_Interface::const_iterator_interface*
-40039: Linear_Expression_Impl<Row>::const_iterator
-40039: ::clone() const {
-40039:   return new const_iterator(*this);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>::const_iterator
-40039: ::operator++() {
-40039:   ++itr;
-40039:   skip_zeroes_forward();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>::const_iterator
-40039: ::operator--() {
-40039:   --itr;
-40039:   skip_zeroes_backward();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: typename Linear_Expression_Impl<Row>::const_iterator::reference
-40039: Linear_Expression_Impl<Row>::const_iterator
-40039: ::operator*() const {
-40039:   return *itr;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: Variable
-40039: Linear_Expression_Impl<Row>::const_iterator
-40039: ::variable() const {
-40039:   const dimension_type i = itr.index();
-40039:   ((void) 0);
-40039:   return Variable(i - 1);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: bool
-40039: Linear_Expression_Impl<Row>::const_iterator
-40039: ::operator==(const const_iterator_interface& x) const {
-40039:   const const_iterator* const p = dynamic_cast<const const_iterator*>(&x);
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   return itr == p->itr;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_Expression_Impl<Row>::ascii_dump(std::ostream& s) const {
-40039:   s << "size " << (space_dimension() + 1) << " ";
-40039:   for (dimension_type i = 0; i < row.size(); ++i) {
-40039:     s << row.get(i);
-40039:     if (i != row.size() - 1) {
-40039:       s << ' ';
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: bool
-40039: Linear_Expression_Impl<Row>::ascii_load(std::istream& s) {
-40039:   std::string str;
-40039: 
-40039:   if (!(s >> str)) {
-40039:     return false;
-40039:   }
-40039:   if (str != "size") {
-40039:     return false;
-40039:   }
-40039: 
-40039:   dimension_type new_size;
-40039:   if (!(s >> new_size)) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   row.resize(0);
-40039:   row.resize(new_size);
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_c; Parma_Polyhedra_Library::Coefficient& c = holder_c.item();
-40039: 
-40039:   for (dimension_type j = 0; j < new_size; ++j) {
-40039:     if (!(s >> c)) {
-40039:       return false;
-40039:     }
-40039:     if (c != 0) {
-40039:       row.insert(j, c);
-40039:     }
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: bool
-40039: Linear_Expression_Impl<Row>::OK() const {
-40039:   return row.OK();
-40039: }
-40039: 
-40039: }
-40039: # 905 "../../src/Linear_Expression_Impl_defs.hh" 2
-40039: # 9 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/Linear_Form_templates.hh" 1
-40039: # 29 "../../src/Linear_Form_templates.hh"
-40039: # 1 "../../src/Box_defs.hh" 1
-40039: # 42 "../../src/Box_defs.hh"
-40039: # 1 "../../src/Poly_Con_Relation_types.hh" 1
-40039: # 16 "../../src/Poly_Con_Relation_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Poly_Con_Relation;
-40039: 
-40039: }
-40039: # 43 "../../src/Box_defs.hh" 2
-40039: # 1 "../../src/Poly_Gen_Relation_types.hh" 1
-40039: # 16 "../../src/Poly_Gen_Relation_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Poly_Gen_Relation;
-40039: 
-40039: }
-40039: # 44 "../../src/Box_defs.hh" 2
-40039: 
-40039: 
-40039: # 1 "../../src/Partially_Reduced_Product_types.hh" 1
-40039: # 16 "../../src/Partially_Reduced_Product_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename D1, typename D2>
-40039: class Smash_Reduction;
-40039: 
-40039: template <typename D1, typename D2>
-40039: class Constraints_Reduction;
-40039: 
-40039: template <typename D1, typename D2>
-40039: class Congruences_Reduction;
-40039: 
-40039: template <typename D1, typename D2>
-40039: class Shape_Preserving_Reduction;
-40039: 
-40039: template <typename D1, typename D2>
-40039: class No_Reduction;
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: class Partially_Reduced_Product;
-40039: 
-40039: }
-40039: # 47 "../../src/Box_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: struct Interval_Base;
-40039: 
-40039: 
-40039: 
-40039: template <typename ITV>
-40039: void swap(Box<ITV>& x, Box<ITV>& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename ITV>
-40039: bool operator==(const Box<ITV>& x, const Box<ITV>& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename ITV>
-40039: bool operator!=(const Box<ITV>& x, const Box<ITV>& y);
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: template <typename ITV>
-40039: std::ostream& operator<<(std::ostream& s, const Box<ITV>& box);
-40039: 
-40039: }
-40039: # 98 "../../src/Box_defs.hh"
-40039: template <typename To, typename ITV>
-40039: bool
-40039: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                             const Box<ITV>& x,
-40039:                             const Box<ITV>& y,
-40039:                             Rounding_Dir dir);
-40039: # 116 "../../src/Box_defs.hh"
-40039: template <typename Temp, typename To, typename ITV>
-40039: bool
-40039: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                             const Box<ITV>& x,
-40039:                             const Box<ITV>& y,
-40039:                             Rounding_Dir dir);
-40039: # 134 "../../src/Box_defs.hh"
-40039: template <typename Temp, typename To, typename ITV>
-40039: bool
-40039: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                             const Box<ITV>& x,
-40039:                             const Box<ITV>& y,
-40039:                             Rounding_Dir dir,
-40039:                             Temp& tmp0,
-40039:                             Temp& tmp1,
-40039:                             Temp& tmp2);
-40039: # 155 "../../src/Box_defs.hh"
-40039: template <typename To, typename ITV>
-40039: bool
-40039: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                           const Box<ITV>& x,
-40039:                           const Box<ITV>& y,
-40039:                           Rounding_Dir dir);
-40039: # 173 "../../src/Box_defs.hh"
-40039: template <typename Temp, typename To, typename ITV>
-40039: bool
-40039: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                           const Box<ITV>& x,
-40039:                           const Box<ITV>& y,
-40039:                           Rounding_Dir dir);
-40039: # 191 "../../src/Box_defs.hh"
-40039: template <typename Temp, typename To, typename ITV>
-40039: bool
-40039: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                           const Box<ITV>& x,
-40039:                           const Box<ITV>& y,
-40039:                           Rounding_Dir dir,
-40039:                           Temp& tmp0,
-40039:                           Temp& tmp1,
-40039:                           Temp& tmp2);
-40039: # 212 "../../src/Box_defs.hh"
-40039: template <typename To, typename ITV>
-40039: bool
-40039: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                            const Box<ITV>& x,
-40039:                            const Box<ITV>& y,
-40039:                            Rounding_Dir dir);
-40039: # 230 "../../src/Box_defs.hh"
-40039: template <typename Temp, typename To, typename ITV>
-40039: bool
-40039: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                            const Box<ITV>& x,
-40039:                            const Box<ITV>& y,
-40039:                            Rounding_Dir dir);
-40039: # 248 "../../src/Box_defs.hh"
-40039: template <typename Temp, typename To, typename ITV>
-40039: bool
-40039: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                            const Box<ITV>& x,
-40039:                            const Box<ITV>& y,
-40039:                            Rounding_Dir dir,
-40039:                            Temp& tmp0,
-40039:                            Temp& tmp1,
-40039:                            Temp& tmp2);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Specialization,
-40039:           typename Temp, typename To, typename ITV>
-40039: bool
-40039: l_m_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                     const Box<ITV>& x, const Box<ITV>& y,
-40039:                     Rounding_Dir dir,
-40039:                     Temp& tmp0, Temp& tmp1, Temp& tmp2);
-40039: 
-40039: }
-40039: # 298 "../../src/Box_defs.hh"
-40039: template <typename ITV>
-40039: class Parma_Polyhedra_Library::Box {
-40039: public:
-40039: 
-40039:   typedef ITV interval_type;
-40039: 
-40039: 
-40039:   static dimension_type max_space_dimension();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static bool can_recycle_constraint_systems();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static bool can_recycle_congruence_systems();
-40039: # 328 "../../src/Box_defs.hh"
-40039:   explicit Box(dimension_type num_dimensions = 0,
-40039:                Degenerate_Element kind = UNIVERSE);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Box(const Box& y,
-40039:       Complexity_Class complexity = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename Other_ITV>
-40039:   explicit Box(const Box<Other_ITV>& y,
-40039:                Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 356 "../../src/Box_defs.hh"
-40039:   explicit Box(const Constraint_System& cs);
-40039: # 372 "../../src/Box_defs.hh"
-40039:   Box(const Constraint_System& cs, Recycle_Input dummy);
-40039: # 382 "../../src/Box_defs.hh"
-40039:   explicit Box(const Generator_System& gs);
-40039: # 399 "../../src/Box_defs.hh"
-40039:   Box(const Generator_System& gs, Recycle_Input dummy);
-40039: # 411 "../../src/Box_defs.hh"
-40039:   explicit Box(const Congruence_System& cgs);
-40039: # 427 "../../src/Box_defs.hh"
-40039:   Box(const Congruence_System& cgs, Recycle_Input dummy);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename T>
-40039:   explicit Box(const BD_Shape<T>& bds,
-40039:                Complexity_Class complexity = POLYNOMIAL_COMPLEXITY);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename T>
-40039:   explicit Box(const Octagonal_Shape<T>& oct,
-40039:                Complexity_Class complexity = POLYNOMIAL_COMPLEXITY);
-40039: # 454 "../../src/Box_defs.hh"
-40039:   explicit Box(const Polyhedron& ph,
-40039:                Complexity_Class complexity = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   explicit Box(const Grid& gr,
-40039:                Complexity_Class complexity = POLYNOMIAL_COMPLEXITY);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename D1, typename D2, typename R>
-40039:   explicit Box(const Partially_Reduced_Product<D1, D2, R>& dp,
-40039:                Complexity_Class complexity = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Box& operator=(const Box& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void m_swap(Box& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type affine_dimension() const;
-40039: 
-40039: 
-40039:   bool is_empty() const;
-40039: 
-40039: 
-40039:   bool is_universe() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_topologically_closed() const;
-40039: 
-40039: 
-40039:   bool is_discrete() const;
-40039: 
-40039: 
-40039:   bool is_bounded() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool contains_integer_point() const;
-40039: # 532 "../../src/Box_defs.hh"
-40039:   bool constrains(Variable var) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Poly_Con_Relation relation_with(const Constraint& c) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Poly_Con_Relation relation_with(const Congruence& cg) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Poly_Gen_Relation relation_with(const Generator& g) const;
-40039: # 562 "../../src/Box_defs.hh"
-40039:   bool bounds_from_above(const Linear_Expression& expr) const;
-40039: # 571 "../../src/Box_defs.hh"
-40039:   bool bounds_from_below(const Linear_Expression& expr) const;
-40039: # 597 "../../src/Box_defs.hh"
-40039:   bool maximize(const Linear_Expression& expr,
-40039:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum) const;
-40039: # 628 "../../src/Box_defs.hh"
-40039:   bool maximize(const Linear_Expression& expr,
-40039:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum,
-40039:                 Generator& g) const;
-40039: # 656 "../../src/Box_defs.hh"
-40039:   bool minimize(const Linear_Expression& expr,
-40039:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum) const;
-40039: # 687 "../../src/Box_defs.hh"
-40039:   bool minimize(const Linear_Expression& expr,
-40039:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum,
-40039:                 Generator& g) const;
-40039: # 719 "../../src/Box_defs.hh"
-40039:   bool frequency(const Linear_Expression& expr,
-40039:                  Coefficient& freq_n, Coefficient& freq_d,
-40039:                  Coefficient& val_n, Coefficient& val_d) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool contains(const Box& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool strictly_contains(const Box& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_disjoint_from(const Box& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: # 769 "../../src/Box_defs.hh"
-40039:   void add_constraint(const Constraint& c);
-40039: # 783 "../../src/Box_defs.hh"
-40039:   void add_constraints(const Constraint_System& cs);
-40039: # 801 "../../src/Box_defs.hh"
-40039:   void add_recycled_constraints(Constraint_System& cs);
-40039: # 813 "../../src/Box_defs.hh"
-40039:   void add_congruence(const Congruence& cg);
-40039: # 826 "../../src/Box_defs.hh"
-40039:   void add_congruences(const Congruence_System& cgs);
-40039: # 844 "../../src/Box_defs.hh"
-40039:   void add_recycled_congruences(Congruence_System& cgs);
-40039: # 855 "../../src/Box_defs.hh"
-40039:   void refine_with_constraint(const Constraint& c);
-40039: # 876 "../../src/Box_defs.hh"
-40039:   void refine_with_constraints(const Constraint_System& cs);
-40039: # 887 "../../src/Box_defs.hh"
-40039:   void refine_with_congruence(const Congruence& cg);
-40039: # 898 "../../src/Box_defs.hh"
-40039:   void refine_with_congruences(const Congruence_System& cgs);
-40039: # 909 "../../src/Box_defs.hh"
-40039:   void propagate_constraint(const Constraint& c);
-40039: # 928 "../../src/Box_defs.hh"
-40039:   void propagate_constraints(const Constraint_System& cs,
-40039:                              dimension_type max_iterations = 0);
-40039: # 941 "../../src/Box_defs.hh"
-40039:   void unconstrain(Variable var);
-40039: # 955 "../../src/Box_defs.hh"
-40039:   void unconstrain(const Variables_Set& vars);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void intersection_assign(const Box& y);
-40039: # 971 "../../src/Box_defs.hh"
-40039:   void upper_bound_assign(const Box& y);
-40039: # 981 "../../src/Box_defs.hh"
-40039:   bool upper_bound_assign_if_exact(const Box& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void difference_assign(const Box& y);
-40039: # 999 "../../src/Box_defs.hh"
-40039:   bool simplify_using_context_assign(const Box& y);
-40039: # 1022 "../../src/Box_defs.hh"
-40039:   void affine_image(Variable var,
-40039:                     const Linear_Expression& expr,
-40039:                     Coefficient_traits::const_reference denominator
-40039:                       = Coefficient_one());
-40039: # 1048 "../../src/Box_defs.hh"
-40039:   void affine_form_image(Variable var,
-40039:                          const Linear_Form<ITV>& lf);
-40039: # 1071 "../../src/Box_defs.hh"
-40039:   void affine_preimage(Variable var,
-40039:                        const Linear_Expression& expr,
-40039:                        Coefficient_traits::const_reference denominator
-40039:                          = Coefficient_one());
-40039: # 1100 "../../src/Box_defs.hh"
-40039:   void generalized_affine_image(Variable var,
-40039:                                 Relation_Symbol relsym,
-40039:                                 const Linear_Expression& expr,
-40039:                                 Coefficient_traits::const_reference denominator
-40039:                                   = Coefficient_one());
-40039: # 1130 "../../src/Box_defs.hh"
-40039:   void
-40039:   generalized_affine_preimage(Variable var,
-40039:                               Relation_Symbol relsym,
-40039:                               const Linear_Expression& expr,
-40039:                               Coefficient_traits::const_reference denominator
-40039:                               = Coefficient_one());
-40039: # 1155 "../../src/Box_defs.hh"
-40039:   void generalized_affine_image(const Linear_Expression& lhs,
-40039:                                 Relation_Symbol relsym,
-40039:                                 const Linear_Expression& rhs);
-40039: # 1177 "../../src/Box_defs.hh"
-40039:   void generalized_affine_preimage(const Linear_Expression& lhs,
-40039:                                    Relation_Symbol relsym,
-40039:                                    const Linear_Expression& rhs);
-40039: # 1206 "../../src/Box_defs.hh"
-40039:   void bounded_affine_image(Variable var,
-40039:                             const Linear_Expression& lb_expr,
-40039:                             const Linear_Expression& ub_expr,
-40039:                             Coefficient_traits::const_reference denominator
-40039:                             = Coefficient_one());
-40039: # 1237 "../../src/Box_defs.hh"
-40039:   void bounded_affine_preimage(Variable var,
-40039:                                const Linear_Expression& lb_expr,
-40039:                                const Linear_Expression& ub_expr,
-40039:                                Coefficient_traits::const_reference denominator
-40039:                                = Coefficient_one());
-40039: # 1250 "../../src/Box_defs.hh"
-40039:   void time_elapse_assign(const Box& y);
-40039: 
-40039: 
-40039:   void topological_closure_assign();
-40039: # 1295 "../../src/Box_defs.hh"
-40039:   void wrap_assign(const Variables_Set& vars,
-40039:                    Bounded_Integer_Type_Width w,
-40039:                    Bounded_Integer_Type_Representation r,
-40039:                    Bounded_Integer_Type_Overflow o,
-40039:                    const Constraint_System* cs_p = 0,
-40039:                    unsigned complexity_threshold = 16,
-40039:                    bool wrap_individually = true);
-40039: # 1314 "../../src/Box_defs.hh"
-40039:   void drop_some_non_integer_points(Complexity_Class complexity
-40039:                                     = ANY_COMPLEXITY);
-40039: # 1332 "../../src/Box_defs.hh"
-40039:   void drop_some_non_integer_points(const Variables_Set& vars,
-40039:                                     Complexity_Class complexity
-40039:                                     = ANY_COMPLEXITY);
-40039: # 1351 "../../src/Box_defs.hh"
-40039:   template <typename T>
-40039:   typename Enable_If<Is_Same<T, Box>::value
-40039:                      && Is_Same_Or_Derived<Interval_Base, ITV>::value,
-40039:                      void>::type
-40039:   CC76_widening_assign(const T& y, unsigned* tp = 0);
-40039: # 1373 "../../src/Box_defs.hh"
-40039:   template <typename T, typename Iterator>
-40039:   typename Enable_If<Is_Same<T, Box>::value
-40039:                      && Is_Same_Or_Derived<Interval_Base, ITV>::value,
-40039:                      void>::type
-40039:   CC76_widening_assign(const T& y,
-40039:                        Iterator first, Iterator last);
-40039: 
-40039: 
-40039:   void widening_assign(const Box& y, unsigned* tp = 0);
-40039: # 1403 "../../src/Box_defs.hh"
-40039:   void limited_CC76_extrapolation_assign(const Box& y,
-40039:                                          const Constraint_System& cs,
-40039:                                          unsigned* tp = 0);
-40039: # 1426 "../../src/Box_defs.hh"
-40039:   template <typename T>
-40039:   typename Enable_If<Is_Same<T, Box>::value
-40039:                      && Is_Same_Or_Derived<Interval_Base, ITV>::value,
-40039:                      void>::type
-40039:   CC76_narrowing_assign(const T& y);
-40039: # 1455 "../../src/Box_defs.hh"
-40039:   void add_space_dimensions_and_embed(dimension_type m);
-40039: # 1478 "../../src/Box_defs.hh"
-40039:   void add_space_dimensions_and_project(dimension_type m);
-40039: # 1503 "../../src/Box_defs.hh"
-40039:   void concatenate_assign(const Box& y);
-40039: # 1514 "../../src/Box_defs.hh"
-40039:   void remove_space_dimensions(const Variables_Set& vars);
-40039: # 1524 "../../src/Box_defs.hh"
-40039:   void remove_higher_space_dimensions(dimension_type new_dimension);
-40039: # 1563 "../../src/Box_defs.hh"
-40039:   template <typename Partial_Function>
-40039:   void map_space_dimensions(const Partial_Function& pfunc);
-40039: # 1587 "../../src/Box_defs.hh"
-40039:   void expand_space_dimension(Variable var, dimension_type m);
-40039: # 1612 "../../src/Box_defs.hh"
-40039:   void fold_space_dimensions(const Variables_Set& vars, Variable dest);
-40039: # 1622 "../../src/Box_defs.hh"
-40039:   const ITV& get_interval(Variable var) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void set_interval(Variable var, const ITV& i);
-40039: # 1663 "../../src/Box_defs.hh"
-40039:   bool has_lower_bound(Variable var,
-40039:                        Coefficient& n, Coefficient& d, bool& closed) const;
-40039: # 1697 "../../src/Box_defs.hh"
-40039:   bool has_upper_bound(Variable var,
-40039:                        Coefficient& n, Coefficient& d, bool& closed) const;
-40039: 
-40039: 
-40039:   Constraint_System constraints() const;
-40039: 
-40039: 
-40039:   Constraint_System minimized_constraints() const;
-40039: 
-40039: 
-40039:   Congruence_System congruences() const;
-40039: 
-40039: 
-40039:   Congruence_System minimized_congruences() const;
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   int32_t hash_code() const;
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: # 1735 "../../src/Box_defs.hh"
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: private:
-40039:   template <typename Other_ITV>
-40039:   friend class Parma_Polyhedra_Library::Box;
-40039: 
-40039:   friend bool
-40039:   operator==<ITV>(const Box<ITV>& x, const Box<ITV>& y);
-40039: 
-40039:   friend std::ostream&
-40039:   Parma_Polyhedra_Library
-40039:   ::IO_Operators::operator<<<>(std::ostream& s, const Box<ITV>& box);
-40039: 
-40039:   template <typename Specialization, typename Temp, typename To, typename I>
-40039:   friend bool Parma_Polyhedra_Library
-40039:   ::l_m_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                         const Box<I>& x, const Box<I>& y,
-40039:                         const Rounding_Dir dir,
-40039:                         Temp& tmp0, Temp& tmp1, Temp& tmp2);
-40039: 
-40039: 
-40039:   typedef std::vector<ITV> Sequence;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef ITV Tmp_Interval_Type;
-40039: 
-40039: 
-40039:   Sequence seq;
-40039: 
-40039: 
-40039: # 1 "../../src/Box_Status_idefs.hh" 1
-40039: # 43 "../../src/Box_Status_idefs.hh"
-40039: class Status;
-40039: 
-40039: class Status {
-40039: public:
-40039: 
-40039:   Status();
-40039: 
-40039: 
-40039:   Status(const Status& y);
-40039: 
-40039: 
-40039:   template <typename Other_ITV>
-40039:   Status(const typename Box<Other_ITV>::Status& y);
-40039: 
-40039: 
-40039: 
-40039:   bool test_empty_up_to_date() const;
-40039:   void reset_empty_up_to_date();
-40039:   void set_empty_up_to_date();
-40039: 
-40039:   bool test_empty() const;
-40039:   void reset_empty();
-40039:   void set_empty();
-40039: 
-40039:   bool test_universe() const;
-40039:   void reset_universe();
-40039:   void set_universe();
-40039: 
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: private:
-40039: 
-40039:   typedef unsigned int flags_t;
-40039: 
-40039: 
-40039: 
-40039:   static const flags_t NONE = 0U;
-40039:   static const flags_t EMPTY_UP_TO_DATE = 1U << 0;
-40039:   static const flags_t EMPTY = 1U << 1;
-40039:   static const flags_t UNIVERSE = 1U << 2;
-40039: 
-40039: 
-40039: 
-40039:   flags_t flags;
-40039: 
-40039: 
-40039:   Status(flags_t mask);
-40039: 
-40039: 
-40039:   bool test_all(flags_t mask) const;
-40039: 
-40039: 
-40039:   bool test_any(flags_t mask) const;
-40039: 
-40039: 
-40039:   void set(flags_t mask);
-40039: 
-40039: 
-40039:   void reset(flags_t mask);
-40039: };
-40039: # 1769 "../../src/Box_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039:   Status status;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool marked_empty() const;
-40039: 
-40039: public:
-40039: 
-40039:   void set_empty();
-40039: 
-40039: private:
-40039: 
-40039:   void set_nonempty();
-40039: 
-40039: 
-40039:   void set_empty_up_to_date();
-40039: 
-40039: 
-40039:   void reset_empty_up_to_date();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool check_empty() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const ITV& operator[](dimension_type k) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static I_Result
-40039:   refine_interval_no_check(ITV& itv,
-40039:                            Constraint::Type type,
-40039:                            Coefficient_traits::const_reference numer,
-40039:                            Coefficient_traits::const_reference denom);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void
-40039:   add_interval_constraint_no_check(dimension_type var_id,
-40039:                                    Constraint::Type type,
-40039:                                    Coefficient_traits::const_reference numer,
-40039:                                    Coefficient_traits::const_reference denom);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void add_constraint_no_check(const Constraint& c);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void add_constraints_no_check(const Constraint_System& cs);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void add_congruence_no_check(const Congruence& cg);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void add_congruences_no_check(const Congruence_System& cgs);
-40039: # 1856 "../../src/Box_defs.hh"
-40039:   void refine_no_check(const Constraint& c);
-40039: # 1870 "../../src/Box_defs.hh"
-40039:   void refine_no_check(const Constraint_System& cs);
-40039: # 1883 "../../src/Box_defs.hh"
-40039:   void refine_no_check(const Congruence& cg);
-40039: # 1896 "../../src/Box_defs.hh"
-40039:   void refine_no_check(const Congruence_System& cgs);
-40039: # 2058 "../../src/Box_defs.hh"
-40039:   void propagate_constraint_no_check(const Constraint& c);
-40039: # 2078 "../../src/Box_defs.hh"
-40039:   void propagate_constraints_no_check(const Constraint_System& cs,
-40039:                                       dimension_type max_iterations);
-40039: # 2098 "../../src/Box_defs.hh"
-40039:   bool bounds(const Linear_Expression& expr, bool from_above) const;
-40039: # 2130 "../../src/Box_defs.hh"
-40039:   bool max_min(const Linear_Expression& expr,
-40039:                bool maximize,
-40039:                Coefficient& ext_n, Coefficient& ext_d, bool& included,
-40039:                Generator& g) const;
-40039: # 2160 "../../src/Box_defs.hh"
-40039:   bool max_min(const Linear_Expression& expr,
-40039:                bool maximize,
-40039:                Coefficient& ext_n, Coefficient& ext_d, bool& included) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void get_limiting_box(const Constraint_System& cs,
-40039:                         Box& limiting_box) const;
-40039: 
-40039: 
-40039: 
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const Box& y) const;
-40039: 
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     dimension_type required_dim) const;
-40039: 
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const Constraint& c) const;
-40039: 
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const Congruence& cg) const;
-40039: 
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const Constraint_System& cs) const;
-40039: 
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const Congruence_System& cgs) const;
-40039: 
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const Generator& g) const;
-40039: 
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* le_name,
-40039:                                     const Linear_Expression& le) const;
-40039: 
-40039:   template <typename C>
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* lf_name,
-40039:                                     const Linear_Form<C>& lf) const;
-40039: 
-40039:   static void throw_constraint_incompatible(const char* method);
-40039: 
-40039:   static void throw_expression_too_complex(const char* method,
-40039:                                            const Linear_Expression& le);
-40039: 
-40039:   static void throw_invalid_argument(const char* method, const char* reason);
-40039: 
-40039: };
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: # 2237 "../../src/Box_defs.hh"
-40039: template <typename ITV>
-40039: Poly_Con_Relation
-40039: interval_relation(const ITV& i,
-40039:                   const Constraint::Type constraint_type,
-40039:                   Coefficient_traits::const_reference numer,
-40039:                   Coefficient_traits::const_reference denom
-40039:                   = Coefficient_one());
-40039: 
-40039: class Box_Helpers {
-40039: public:
-40039: # 2271 "../../src/Box_defs.hh"
-40039:   static bool extract_interval_constraint(const Constraint& c,
-40039:                                           dimension_type& c_num_vars,
-40039:                                           dimension_type& c_only_var);
-40039: 
-40039: 
-40039: 
-40039:   static bool extract_interval_congruence(const Congruence& cg,
-40039:                                           dimension_type& cg_num_vars,
-40039:                                           dimension_type& cg_only_var);
-40039: };
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Box_Status_inlines.hh" 1
-40039: # 29 "../../src/Box_Status_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename ITV>
-40039: inline
-40039: Box<ITV>::Status::Status(flags_t mask)
-40039:   : flags(mask) {
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline
-40039: Box<ITV>::Status::Status(const Status& y)
-40039:   : flags(y.flags) {
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: template <typename Other_ITV>
-40039: inline
-40039: Box<ITV>::Status::Status(const typename Box<Other_ITV>::Status& y)
-40039:   : flags(y.flags) {
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline
-40039: Box<ITV>::Status::Status()
-40039:   : flags(NONE) {
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline bool
-40039: Box<ITV>::Status::test_all(flags_t mask) const {
-40039:   return (flags & mask) == mask;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline bool
-40039: Box<ITV>::Status::test_any(flags_t mask) const {
-40039:   return (flags & mask) != 0;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::Status::set(flags_t mask) {
-40039:   flags |= mask;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::Status::reset(flags_t mask) {
-40039:   flags &= ~mask;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline bool
-40039: Box<ITV>::Status::test_empty_up_to_date() const {
-40039:   return test_any(EMPTY_UP_TO_DATE);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::Status::reset_empty_up_to_date() {
-40039:   reset(EMPTY_UP_TO_DATE);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::Status::set_empty_up_to_date() {
-40039:   set(EMPTY_UP_TO_DATE);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline bool
-40039: Box<ITV>::Status::test_empty() const {
-40039:   return test_any(EMPTY);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::Status::reset_empty() {
-40039:   reset(EMPTY);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::Status::set_empty() {
-40039:   set(EMPTY);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline bool
-40039: Box<ITV>::Status::test_universe() const {
-40039:   return test_any(UNIVERSE);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::Status::reset_universe() {
-40039:   reset(UNIVERSE);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::Status::set_universe() {
-40039:   set(UNIVERSE);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: bool
-40039: Box<ITV>::Status::OK() const {
-40039:   if (test_empty_up_to_date()
-40039:       && test_empty()
-40039:       && test_universe()) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039:   return true;
-40039: }
-40039: 
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: namespace Boxes {
-40039: 
-40039: 
-40039: extern const char* empty_up_to_date;
-40039: extern const char* empty;
-40039: extern const char* universe;
-40039: const char yes = '+';
-40039: const char no = '-';
-40039: const char separator = ' ';
-40039: # 172 "../../src/Box_Status_inlines.hh"
-40039: inline bool
-40039: get_field(std::istream& s, const char* keyword, bool& positive) {
-40039:   std::string str;
-40039:   if (!(s >> str)
-40039:       || (str[0] != yes && str[0] != no)
-40039:       || str.substr(1) != keyword) {
-40039:     return false;
-40039:   }
-40039:   positive = (str[0] == yes);
-40039:   return true;
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::Status::ascii_dump(std::ostream& s) const {
-40039:   using namespace Implementation::Boxes;
-40039:   s << (test_empty_up_to_date() ? yes : no) << empty_up_to_date << separator
-40039:     << (test_empty() ? yes : no) << empty << separator
-40039:     << (test_universe() ? yes : no) << universe << separator;
-40039: }
-40039: 
-40039: template <typename ITV> void Box<ITV>::Status::ascii_dump() const { ascii_dump(std::cerr); } template <typename ITV> void Box<ITV>::Status::print() const { std::cerr << "No user level output operator defined " << "for " "Box<ITV>::Status" << "." << std::endl; }
-40039: 
-40039: template <typename ITV>
-40039: bool
-40039: Box<ITV>::Status::ascii_load(std::istream& s) {
-40039:   using namespace Implementation::Boxes;
-40039:   bool positive = Suppress_Uninitialized_Warnings_Type<bool>::synonym();
-40039: 
-40039:   if (!get_field(s, Implementation::Boxes::empty_up_to_date, positive)) {
-40039:     return false;
-40039:   }
-40039:   if (positive) {
-40039:     set_empty_up_to_date();
-40039:   }
-40039: 
-40039:   if (!get_field(s, Implementation::Boxes::empty, positive)) {
-40039:     return false;
-40039:   }
-40039:   if (positive) {
-40039:     set_empty();
-40039:   }
-40039:   if (!get_field(s, universe, positive)) {
-40039:     return false;
-40039:   }
-40039:   if (positive) {
-40039:     set_universe();
-40039:   }
-40039:   else {
-40039:     reset_universe();
-40039:   }
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   return true;
-40039: }
-40039: 
-40039: }
-40039: # 2285 "../../src/Box_defs.hh" 2
-40039: # 1 "../../src/Box_inlines.hh" 1
-40039: # 28 "../../src/Box_inlines.hh"
-40039: # 1 "../../src/Constraint_System_defs.hh" 1
-40039: # 29 "../../src/Constraint_System_defs.hh"
-40039: # 1 "../../src/Linear_System_defs.hh" 1
-40039: # 29 "../../src/Linear_System_defs.hh"
-40039: # 1 "../../src/Swapping_Vector_defs.hh" 1
-40039: # 27 "../../src/Swapping_Vector_defs.hh"
-40039: # 1 "../../src/Swapping_Vector_types.hh" 1
-40039: # 16 "../../src/Swapping_Vector_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: class Swapping_Vector;
-40039: 
-40039: }
-40039: # 28 "../../src/Swapping_Vector_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: class Swapping_Vector {
-40039: 
-40039: public:
-40039:   typedef typename std::vector<T>::const_iterator const_iterator;
-40039:   typedef typename std::vector<T>::iterator iterator;
-40039:   typedef typename std::vector<T>::size_type size_type;
-40039: 
-40039:   Swapping_Vector();
-40039:   explicit Swapping_Vector(dimension_type new_size);
-40039:   Swapping_Vector(dimension_type new_size, const T& x);
-40039: 
-40039:   void clear();
-40039:   void reserve(dimension_type new_capacity);
-40039:   void resize(dimension_type new_size);
-40039:   void resize(dimension_type new_size, const T& x);
-40039: 
-40039:   dimension_type size() const;
-40039:   dimension_type capacity() const;
-40039:   bool empty() const;
-40039: 
-40039:   void m_swap(Swapping_Vector& v);
-40039: 
-40039:   T& operator[](dimension_type i);
-40039:   const T& operator[](dimension_type i) const;
-40039: 
-40039:   T& back();
-40039:   const T& back() const;
-40039: 
-40039:   void push_back(const T& x);
-40039:   void pop_back();
-40039: 
-40039:   iterator begin();
-40039:   iterator end();
-40039:   const_iterator begin() const;
-40039:   const_iterator end() const;
-40039: 
-40039:   iterator erase(iterator itr);
-40039:   iterator erase(iterator first, iterator last);
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039:   dimension_type max_num_rows();
-40039: 
-40039: private:
-40039:   std::vector<T> impl;
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: void swap(Swapping_Vector<T>& x, Swapping_Vector<T>& y);
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Swapping_Vector_inlines.hh" 1
-40039: # 29 "../../src/Swapping_Vector_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: inline
-40039: Swapping_Vector<T>::Swapping_Vector()
-40039:   : impl() {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: Swapping_Vector<T>::Swapping_Vector(dimension_type i)
-40039:   : impl() {
-40039: 
-40039: 
-40039:   resize(i);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: Swapping_Vector<T>::Swapping_Vector(dimension_type new_size, const T& x)
-40039:   : impl() {
-40039:   resize(new_size, x);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Swapping_Vector<T>::clear() {
-40039:   impl.clear();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Swapping_Vector<T>::reserve(dimension_type new_capacity) {
-40039:   if (impl.capacity() < new_capacity) {
-40039: 
-40039:     std::vector<T> new_impl;
-40039: 
-40039:     new_impl.reserve(compute_capacity(new_capacity, max_num_rows()));
-40039:     new_impl.resize(impl.size());
-40039: 
-40039:     using std::swap;
-40039: 
-40039: 
-40039:     for (dimension_type i = impl.size(); i-- > 0; ) {
-40039:       swap(new_impl[i], impl[i]);
-40039:     }
-40039: 
-40039: 
-40039:     swap(impl, new_impl);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Swapping_Vector<T>::resize(dimension_type new_size) {
-40039:   reserve(new_size);
-40039:   impl.resize(new_size);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Swapping_Vector<T>::resize(dimension_type new_size, const T& x) {
-40039:   reserve(new_size);
-40039:   impl.resize(new_size, x);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: Swapping_Vector<T>::size() const {
-40039:   return impl.size();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: Swapping_Vector<T>::capacity() const {
-40039:   return impl.capacity();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Swapping_Vector<T>::empty() const {
-40039:   return impl.empty();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Swapping_Vector<T>::m_swap(Swapping_Vector& v) {
-40039:   using std::swap;
-40039:   swap(impl, v.impl);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline T&
-40039: Swapping_Vector<T>::operator[](dimension_type i) {
-40039:   return impl[i];
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline const T&
-40039: Swapping_Vector<T>::operator[](dimension_type i) const {
-40039:   return impl[i];
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline T&
-40039: Swapping_Vector<T>::back() {
-40039:   return impl.back();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline const T&
-40039: Swapping_Vector<T>::back() const {
-40039:   return impl.back();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Swapping_Vector<T>::push_back(const T& x) {
-40039:   reserve(size() + 1);
-40039:   impl.push_back(x);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Swapping_Vector<T>::pop_back() {
-40039:   impl.pop_back();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline memory_size_type
-40039: Swapping_Vector<T>::external_memory_in_bytes() const {
-40039: 
-40039:   memory_size_type n = impl.capacity() * sizeof(T);
-40039:   for (const_iterator i = begin(), i_end = end(); i != i_end; ++i) {
-40039:     n += i->external_memory_in_bytes();
-40039:   }
-40039:   return n;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Swapping_Vector<T>::iterator
-40039: Swapping_Vector<T>::begin() {
-40039:   return impl.begin();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Swapping_Vector<T>::iterator
-40039: Swapping_Vector<T>::end() {
-40039:   return impl.end();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Swapping_Vector<T>::const_iterator
-40039: Swapping_Vector<T>::begin() const {
-40039:   return impl.begin();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Swapping_Vector<T>::const_iterator
-40039: Swapping_Vector<T>::end() const {
-40039:   return impl.end();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Swapping_Vector<T>::iterator
-40039: Swapping_Vector<T>::erase(iterator itr) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   const dimension_type old_i = itr - begin();
-40039:   dimension_type i = old_i;
-40039:   ++i;
-40039:   while (i != size()) {
-40039:     swap(impl[i-1], impl[i]);
-40039:   }
-40039:   impl.pop_back();
-40039:   return begin() + old_i;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Swapping_Vector<T>::iterator
-40039: Swapping_Vector<T>::erase(iterator first, iterator last) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   const iterator old_first = first;
-40039:   typedef typename std::iterator_traits<iterator>::difference_type diff_t;
-40039:   const diff_t k = last - first;
-40039:   const dimension_type n = static_cast<dimension_type>(end() - last);
-40039:   using std::swap;
-40039:   for (dimension_type i = 0; i < n; ++i, ++first) {
-40039:     swap(*first, *(first + k));
-40039:   }
-40039:   impl.erase(end() - k, end());
-40039:   return old_first;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: Swapping_Vector<T>::max_num_rows() {
-40039:   return impl.max_size();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: swap(Swapping_Vector<T>& vec1, Swapping_Vector<T>& vec2) {
-40039:   vec1.m_swap(vec2);
-40039: }
-40039: 
-40039: }
-40039: # 95 "../../src/Swapping_Vector_defs.hh" 2
-40039: # 30 "../../src/Linear_System_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "../../src/Bit_Row_types.hh" 1
-40039: # 16 "../../src/Bit_Row_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Bit_Row;
-40039: 
-40039: }
-40039: # 36 "../../src/Linear_System_defs.hh" 2
-40039: # 1 "../../src/Bit_Matrix_types.hh" 1
-40039: # 16 "../../src/Bit_Matrix_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Bit_Matrix;
-40039: 
-40039: }
-40039: # 37 "../../src/Linear_System_defs.hh" 2
-40039: # 60 "../../src/Linear_System_defs.hh"
-40039: template <typename Row>
-40039: class Parma_Polyhedra_Library::Linear_System {
-40039: public:
-40039: 
-40039: 
-40039:   typedef typename Swapping_Vector<Row>::const_iterator iterator;
-40039:   typedef typename Swapping_Vector<Row>::const_iterator const_iterator;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Linear_System(Topology topol, Representation r);
-40039: # 88 "../../src/Linear_System_defs.hh"
-40039:   Linear_System(Topology topol, dimension_type space_dim, Representation r);
-40039: # 98 "../../src/Linear_System_defs.hh"
-40039:   struct With_Pending {
-40039:   };
-40039: 
-40039: 
-40039:   Linear_System(const Linear_System& y);
-40039: 
-40039: 
-40039: 
-40039:   Linear_System(const Linear_System& y, Representation r);
-40039: 
-40039: 
-40039:   Linear_System(const Linear_System& y, With_Pending);
-40039: 
-40039: 
-40039:   Linear_System(const Linear_System& y, Representation r, With_Pending);
-40039: 
-40039: 
-40039:   Linear_System& operator=(const Linear_System& y);
-40039: 
-40039: 
-40039:   void assign_with_pending(const Linear_System& y);
-40039: 
-40039: 
-40039:   void m_swap(Linear_System& y);
-40039: 
-40039: 
-40039:   Representation representation() const;
-40039: 
-40039: 
-40039:   void set_representation(Representation r);
-40039: 
-40039: 
-40039:   static dimension_type max_space_dimension();
-40039: # 141 "../../src/Linear_System_defs.hh"
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039:   void set_space_dimension(dimension_type space_dim);
-40039: 
-40039: 
-40039:   void remove_trailing_rows(dimension_type n);
-40039: # 157 "../../src/Linear_System_defs.hh"
-40039:   void remove_row(dimension_type i, bool keep_sorted = false);
-40039: # 167 "../../src/Linear_System_defs.hh"
-40039:   void remove_rows(dimension_type first, dimension_type last,
-40039:                   bool keep_sorted = false);
-40039: # 177 "../../src/Linear_System_defs.hh"
-40039:   void remove_rows(const std::vector<dimension_type>& indexes);
-40039: # 186 "../../src/Linear_System_defs.hh"
-40039:   void remove_space_dimensions(const Variables_Set& vars);
-40039: 
-40039: 
-40039: 
-40039:   void shift_space_dimensions(Variable v, dimension_type n);
-40039: # 205 "../../src/Linear_System_defs.hh"
-40039:   void permute_space_dimensions(const std::vector<Variable>& cycle);
-40039: 
-40039: 
-40039:   void swap_space_dimensions(Variable v1, Variable v2);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const Row& operator[](dimension_type k) const;
-40039: 
-40039: 
-40039:   iterator begin();
-40039:   iterator end();
-40039:   const_iterator begin() const;
-40039:   const_iterator end() const;
-40039: 
-40039:   bool has_no_rows() const;
-40039:   dimension_type num_rows() const;
-40039: 
-40039: 
-40039:   void strong_normalize();
-40039: 
-40039: 
-40039:   void sign_normalize();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Topology topology() const;
-40039: 
-40039: 
-40039:   bool is_sorted() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_necessarily_closed() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type num_lines_or_equalities() const;
-40039: 
-40039: 
-40039:   dimension_type first_pending_row() const;
-40039: 
-40039: 
-40039:   dimension_type num_pending_rows() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool check_sorted() const;
-40039: 
-40039: 
-40039:   void set_topology(Topology t);
-40039: 
-40039: 
-40039:   void set_necessarily_closed();
-40039: 
-40039: 
-40039:   void set_not_necessarily_closed();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void mark_as_necessarily_closed();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void mark_as_not_necessarily_closed();
-40039: 
-40039: 
-40039:   void unset_pending_rows();
-40039: 
-40039: 
-40039:   void set_index_first_pending_row(dimension_type i);
-40039: 
-40039: 
-40039:   void set_sorted(bool b);
-40039: # 310 "../../src/Linear_System_defs.hh"
-40039:   void add_universe_rows_and_space_dimensions(dimension_type n);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void insert(const Row& r);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void insert_pending(const Row& r);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void insert(Row& r, Recycle_Input);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void insert_pending(Row& r, Recycle_Input);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void insert(const Linear_System& y);
-40039: 
-40039: 
-40039:   void insert_pending(const Linear_System& r);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void insert(Linear_System& r, Recycle_Input);
-40039: 
-40039: 
-40039: 
-40039:   void insert_pending(Linear_System& r, Recycle_Input);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void sort_rows();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void sort_rows(dimension_type first_row, dimension_type last_row);
-40039: # 375 "../../src/Linear_System_defs.hh"
-40039:   void merge_rows_assign(const Linear_System& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void sort_pending_and_remove_duplicates();
-40039: # 390 "../../src/Linear_System_defs.hh"
-40039:   void sort_and_remove_with_sat(Bit_Matrix& sat);
-40039: # 404 "../../src/Linear_System_defs.hh"
-40039:   dimension_type gauss(dimension_type n_lines_or_equalities);
-40039: # 416 "../../src/Linear_System_defs.hh"
-40039:   void back_substitute(dimension_type n_lines_or_equalities);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void simplify();
-40039: 
-40039: 
-40039:   void clear();
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: # 439 "../../src/Linear_System_defs.hh"
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Swapping_Vector<Row> rows;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039: private:
-40039: # 469 "../../src/Linear_System_defs.hh"
-40039:   void remove_row_no_ok(dimension_type i, bool keep_sorted = false);
-40039: # 478 "../../src/Linear_System_defs.hh"
-40039:   void insert_pending_no_ok(Row& r, Recycle_Input);
-40039: # 487 "../../src/Linear_System_defs.hh"
-40039:   void insert_no_ok(Row& r, Recycle_Input);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void set_space_dimension_no_ok(dimension_type space_dim);
-40039: # 506 "../../src/Linear_System_defs.hh"
-40039:   void swap_row_intervals(dimension_type first, dimension_type last,
-40039:                           dimension_type offset);
-40039: 
-40039: 
-40039: 
-40039:   dimension_type space_dimension_;
-40039: 
-40039: 
-40039: 
-40039:   Topology row_topology;
-40039: 
-40039: 
-40039:   dimension_type index_first_pending;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool sorted;
-40039: 
-40039:   Representation representation_;
-40039: 
-40039: 
-40039:   struct Row_Less_Than {
-40039:     bool operator()(const Row& x, const Row& y) const;
-40039:   };
-40039: 
-40039: 
-40039:   struct Unique_Compare {
-40039:     Unique_Compare(const Swapping_Vector<Row>& cont,
-40039:                    dimension_type base = 0);
-40039: 
-40039:     bool operator()(dimension_type i, dimension_type j) const;
-40039: 
-40039:     const Swapping_Vector<Row>& container;
-40039:     const dimension_type base_index;
-40039:   };
-40039: 
-40039:   friend class Polyhedron;
-40039:   friend class Generator_System;
-40039: };
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Row>
-40039: void swap(Parma_Polyhedra_Library::Linear_System<Row>& x,
-40039:           Parma_Polyhedra_Library::Linear_System<Row>& y);
-40039: 
-40039: }
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Row>
-40039: bool operator==(const Linear_System<Row>& x, const Linear_System<Row>& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Row>
-40039: bool operator!=(const Linear_System<Row>& x, const Linear_System<Row>& y);
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Linear_System_inlines.hh" 1
-40039: # 27 "../../src/Linear_System_inlines.hh"
-40039: # 1 "../../src/Bit_Row_defs.hh" 1
-40039: # 33 "../../src/Bit_Row_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: # 45 "../../src/Bit_Row_defs.hh"
-40039: void
-40039: iter_swap(std::vector<Bit_Row>::iterator x,
-40039:           std::vector<Bit_Row>::iterator y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: bool operator==(const Bit_Row& x, const Bit_Row& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: bool operator!=(const Bit_Row& x, const Bit_Row& y);
-40039: # 77 "../../src/Bit_Row_defs.hh"
-40039: int compare(const Bit_Row& x, const Bit_Row& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: bool subset_or_equal(const Bit_Row& x, const Bit_Row& y);
-40039: # 93 "../../src/Bit_Row_defs.hh"
-40039: bool subset_or_equal(const Bit_Row& x, const Bit_Row& y,
-40039:                      bool& strict_subset);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: bool strict_subset(const Bit_Row& x, const Bit_Row& y);
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: class Parma_Polyhedra_Library::Bit_Row {
-40039: public:
-40039: 
-40039:   Bit_Row();
-40039: 
-40039: 
-40039:   Bit_Row(const Bit_Row& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Bit_Row(const Bit_Row& y, const Bit_Row& z);
-40039: 
-40039: 
-40039:   ~Bit_Row();
-40039: 
-40039: 
-40039:   Bit_Row& operator=(const Bit_Row& y);
-40039: 
-40039: 
-40039:   void m_swap(Bit_Row& y);
-40039: 
-40039: 
-40039:   bool operator[](unsigned long k) const;
-40039: 
-40039: 
-40039:   void set(unsigned long k);
-40039: 
-40039: 
-40039:   void set_until(unsigned long k);
-40039: 
-40039: 
-40039:   void clear(unsigned long k);
-40039: 
-40039: 
-40039:   void clear_from(unsigned long k);
-40039: 
-40039: 
-40039:   void clear();
-40039: 
-40039: 
-40039:   void union_assign(const Bit_Row& x, const Bit_Row& y);
-40039: 
-40039: 
-40039:   void intersection_assign(const Bit_Row& x, const Bit_Row& y);
-40039: 
-40039: 
-40039:   void difference_assign(const Bit_Row& x, const Bit_Row& y);
-40039: 
-40039: 
-40039:   friend int compare(const Bit_Row& x, const Bit_Row& y);
-40039:   friend bool operator==(const Bit_Row& x, const Bit_Row& y);
-40039:   friend bool operator!=(const Bit_Row& x, const Bit_Row& y);
-40039:   friend bool subset_or_equal(const Bit_Row& x, const Bit_Row& y);
-40039:   friend bool subset_or_equal(const Bit_Row& x, const Bit_Row& y,
-40039:                               bool& strict_subset);
-40039:   friend bool strict_subset(const Bit_Row& x, const Bit_Row& y);
-40039: 
-40039: 
-40039:   unsigned long first() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   unsigned long next(unsigned long position) const;
-40039: 
-40039: 
-40039:   unsigned long last() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   unsigned long prev(unsigned long position) const;
-40039: 
-40039: 
-40039:   unsigned long count_ones() const;
-40039: 
-40039: 
-40039:   bool empty() const;
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039: private:
-40039: 
-40039:   mpz_t vec;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void union_helper(const Bit_Row& y, const Bit_Row& z);
-40039: };
-40039: 
-40039: # 1 "../../src/Bit_Row_inlines.hh" 1
-40039: # 40 "../../src/Bit_Row_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline
-40039: Bit_Row::Bit_Row() {
-40039:   
-40039: # 44 "../../src/Bit_Row_inlines.hh" 3 4
-40039:  __gmpz_init
-40039: # 44 "../../src/Bit_Row_inlines.hh"
-40039:          (vec);
-40039: }
-40039: 
-40039: inline
-40039: Bit_Row::Bit_Row(const Bit_Row& y) {
-40039:   
-40039: # 49 "../../src/Bit_Row_inlines.hh" 3 4
-40039:  __gmpz_init_set
-40039: # 49 "../../src/Bit_Row_inlines.hh"
-40039:              (vec, y.vec);
-40039: }
-40039: 
-40039: inline
-40039: Bit_Row::Bit_Row(const Bit_Row& y, const Bit_Row& z) {
-40039:   const mp_size_t y_size = y.vec->_mp_size;
-40039:   ((void) 0);
-40039:   const mp_size_t z_size = z.vec->_mp_size;
-40039:   ((void) 0);
-40039:   if (y_size < z_size) {
-40039:     ((void) 0)
-40039:                                                                         ;
-40039:     
-40039: # 61 "../../src/Bit_Row_inlines.hh" 3 4
-40039:    __gmpz_init2
-40039: # 61 "../../src/Bit_Row_inlines.hh"
-40039:             (vec, static_cast<unsigned long>(z_size) * ((8) * static_cast<std::size_t>(8)));
-40039:     union_helper(y, z);
-40039:   }
-40039:   else {
-40039:     ((void) 0)
-40039:                                                                         ;
-40039:     
-40039: # 67 "../../src/Bit_Row_inlines.hh" 3 4
-40039:    __gmpz_init2
-40039: # 67 "../../src/Bit_Row_inlines.hh"
-40039:             (vec, static_cast<unsigned long>(y_size) * ((8) * static_cast<std::size_t>(8)));
-40039:     union_helper(z, y);
-40039:   }
-40039: }
-40039: 
-40039: inline
-40039: Bit_Row::~Bit_Row() {
-40039:   
-40039: # 74 "../../src/Bit_Row_inlines.hh" 3 4
-40039:  __gmpz_clear
-40039: # 74 "../../src/Bit_Row_inlines.hh"
-40039:           (vec);
-40039: }
-40039: 
-40039: inline Bit_Row&
-40039: Bit_Row::operator=(const Bit_Row& y) {
-40039:   
-40039: # 79 "../../src/Bit_Row_inlines.hh" 3 4
-40039:  __gmpz_set
-40039: # 79 "../../src/Bit_Row_inlines.hh"
-40039:         (vec, y.vec);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline void
-40039: Bit_Row::set(const unsigned long k) {
-40039:   
-40039: # 85 "../../src/Bit_Row_inlines.hh" 3 4
-40039:  __gmpz_setbit
-40039: # 85 "../../src/Bit_Row_inlines.hh"
-40039:            (vec, k);
-40039: }
-40039: 
-40039: inline void
-40039: Bit_Row::clear(const unsigned long k) {
-40039:   
-40039: # 90 "../../src/Bit_Row_inlines.hh" 3 4
-40039:  __gmpz_clrbit
-40039: # 90 "../../src/Bit_Row_inlines.hh"
-40039:            (vec, k);
-40039: }
-40039: 
-40039: inline void
-40039: Bit_Row::clear_from(const unsigned long k) {
-40039:   
-40039: # 95 "../../src/Bit_Row_inlines.hh" 3 4
-40039:  __gmpz_tdiv_r_2exp
-40039: # 95 "../../src/Bit_Row_inlines.hh"
-40039:                 (vec, vec, k);
-40039: }
-40039: 
-40039: inline unsigned long
-40039: Bit_Row::count_ones() const {
-40039:   const mp_size_t x_size = vec->_mp_size;
-40039:   ((void) 0);
-40039:   return (x_size == 0) ? 0 : 
-40039: # 102 "../../src/Bit_Row_inlines.hh" 3 4
-40039:                             __gmpn_popcount
-40039: # 102 "../../src/Bit_Row_inlines.hh"
-40039:                                         (vec->_mp_d, x_size);
-40039: }
-40039: 
-40039: inline bool
-40039: Bit_Row::empty() const {
-40039:   return 
-40039: # 107 "../../src/Bit_Row_inlines.hh" 3 4
-40039:         ((
-40039: # 107 "../../src/Bit_Row_inlines.hh"
-40039:         vec
-40039: # 107 "../../src/Bit_Row_inlines.hh" 3 4
-40039:         )->_mp_size < 0 ? -1 : (
-40039: # 107 "../../src/Bit_Row_inlines.hh"
-40039:         vec
-40039: # 107 "../../src/Bit_Row_inlines.hh" 3 4
-40039:         )->_mp_size > 0) 
-40039: # 107 "../../src/Bit_Row_inlines.hh"
-40039:                      == 0;
-40039: }
-40039: 
-40039: inline void
-40039: Bit_Row::m_swap(Bit_Row& y) {
-40039:   
-40039: # 112 "../../src/Bit_Row_inlines.hh" 3 4
-40039:  __gmpz_swap
-40039: # 112 "../../src/Bit_Row_inlines.hh"
-40039:          (vec, y.vec);
-40039: }
-40039: 
-40039: inline void
-40039: Bit_Row::clear() {
-40039:   
-40039: # 117 "../../src/Bit_Row_inlines.hh" 3 4
-40039:  __gmpz_set_ui
-40039: # 117 "../../src/Bit_Row_inlines.hh"
-40039:            (vec, 0UL);
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Bit_Row::external_memory_in_bytes() const {
-40039:   return static_cast<memory_size_type>(vec[0]._mp_alloc) * 8;
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Bit_Row::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: inline void
-40039: Bit_Row::union_assign(const Bit_Row& x, const Bit_Row& y) {
-40039:   const mp_size_t x_size = x.vec->_mp_size;
-40039:   ((void) 0);
-40039:   const mp_size_t y_size = y.vec->_mp_size;
-40039:   ((void) 0);
-40039:   if (x_size < y_size) {
-40039:     ((void) 0)
-40039:                                                                         ;
-40039:     
-40039: # 139 "../../src/Bit_Row_inlines.hh" 3 4
-40039:    __gmpz_realloc2
-40039: # 139 "../../src/Bit_Row_inlines.hh"
-40039:                (vec, static_cast<unsigned long>(y_size) * ((8) * static_cast<std::size_t>(8)));
-40039:     union_helper(x, y);
-40039:   }
-40039:   else {
-40039:     ((void) 0)
-40039:                                                                         ;
-40039:     
-40039: # 145 "../../src/Bit_Row_inlines.hh" 3 4
-40039:    __gmpz_realloc2
-40039: # 145 "../../src/Bit_Row_inlines.hh"
-40039:                (vec, static_cast<unsigned long>(x_size) * ((8) * static_cast<std::size_t>(8)));
-40039:     union_helper(y, x);
-40039:   }
-40039: }
-40039: 
-40039: inline void
-40039: Bit_Row::intersection_assign(const Bit_Row& x, const Bit_Row& y) {
-40039:   
-40039: # 152 "../../src/Bit_Row_inlines.hh" 3 4
-40039:  __gmpz_and
-40039: # 152 "../../src/Bit_Row_inlines.hh"
-40039:         (vec, x.vec, y.vec);
-40039: }
-40039: 
-40039: inline void
-40039: Bit_Row::difference_assign(const Bit_Row& x, const Bit_Row& y) {
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpz_class> holder_complement_y; mpz_class& complement_y = holder_complement_y.item();
-40039:   
-40039: # 158 "../../src/Bit_Row_inlines.hh" 3 4
-40039:  __gmpz_com
-40039: # 158 "../../src/Bit_Row_inlines.hh"
-40039:         (complement_y.get_mpz_t(), y.vec);
-40039:   
-40039: # 159 "../../src/Bit_Row_inlines.hh" 3 4
-40039:  __gmpz_and
-40039: # 159 "../../src/Bit_Row_inlines.hh"
-40039:         (vec, x.vec, complement_y.get_mpz_t());
-40039: }
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: inline unsigned int
-40039: first_one(unsigned int u) {
-40039:   return ctz(u);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: inline unsigned int
-40039: first_one(unsigned long ul) {
-40039:   return ctz(ul);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: inline unsigned int
-40039: first_one(unsigned long long ull) {
-40039:   return ctz(ull);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: inline unsigned int
-40039: last_one(unsigned int u) {
-40039:   return static_cast<unsigned int>(((sizeof(u)) * static_cast<std::size_t>(8)))
-40039:     - 1U - clz(u);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: inline unsigned int
-40039: last_one(unsigned long ul) {
-40039:   return static_cast<unsigned int>(((sizeof(ul)) * static_cast<std::size_t>(8)))
-40039:     - 1U - clz(ul);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: inline unsigned int
-40039: last_one(unsigned long long ull) {
-40039:   return static_cast<unsigned int>(((sizeof(ull)) * static_cast<std::size_t>(8)))
-40039:     - 1U - clz(ull);
-40039: }
-40039: 
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: swap(Bit_Row& x, Bit_Row& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: iter_swap(std::vector<Bit_Row>::iterator x,
-40039:           std::vector<Bit_Row>::iterator y) {
-40039:   swap(*x, *y);
-40039: }
-40039: 
-40039: }
-40039: # 213 "../../src/Bit_Row_defs.hh" 2
-40039: # 28 "../../src/Linear_System_inlines.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Row>
-40039: inline memory_size_type
-40039: Linear_System<Row>::external_memory_in_bytes() const {
-40039:   return rows.external_memory_in_bytes();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline memory_size_type
-40039: Linear_System<Row>::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline bool
-40039: Linear_System<Row>::is_sorted() const {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   return sorted;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_System<Row>::set_sorted(const bool b) {
-40039:   sorted = b;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline
-40039: Linear_System<Row>::Linear_System(Topology topol, Representation r)
-40039:   : rows(),
-40039:     space_dimension_(0),
-40039:     row_topology(topol),
-40039:     index_first_pending(0),
-40039:     sorted(true),
-40039:     representation_(r) {
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline
-40039: Linear_System<Row>::Linear_System(Topology topol,
-40039:                                   dimension_type space_dim,
-40039:                                   Representation r)
-40039:   : rows(),
-40039:     space_dimension_(0),
-40039:     row_topology(topol),
-40039:     index_first_pending(0),
-40039:     sorted(true),
-40039:     representation_(r) {
-40039:   set_space_dimension(space_dim);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline dimension_type
-40039: Linear_System<Row>::first_pending_row() const {
-40039:   return index_first_pending;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline dimension_type
-40039: Linear_System<Row>::num_pending_rows() const {
-40039:   ((void) 0);
-40039:   return num_rows() - first_pending_row();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_System<Row>::unset_pending_rows() {
-40039:   index_first_pending = num_rows();
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_System<Row>::set_index_first_pending_row(const dimension_type i) {
-40039:   index_first_pending = i;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline
-40039: Linear_System<Row>::Linear_System(const Linear_System& y)
-40039:   : rows(y.rows),
-40039:     space_dimension_(y.space_dimension_),
-40039:     row_topology(y.row_topology),
-40039:     representation_(y.representation_) {
-40039: 
-40039:   sorted = (y.num_pending_rows() > 0) ? false : y.sorted;
-40039:   unset_pending_rows();
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline
-40039: Linear_System<Row>::Linear_System(const Linear_System& y, Representation r)
-40039:   : rows(),
-40039:     space_dimension_(y.space_dimension_),
-40039:     row_topology(y.row_topology),
-40039:     representation_(r) {
-40039:   rows.resize(y.num_rows());
-40039:   for (dimension_type i = 0; i < y.num_rows(); ++i) {
-40039: 
-40039:     Row row(y.rows[i], r);
-40039:     swap(rows[i], row);
-40039:   }
-40039: 
-40039:   sorted = (y.num_pending_rows() > 0) ? false : y.sorted;
-40039:   unset_pending_rows();
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline
-40039: Linear_System<Row>::Linear_System(const Linear_System& y, With_Pending)
-40039:   : rows(y.rows),
-40039:     space_dimension_(y.space_dimension_),
-40039:     row_topology(y.row_topology),
-40039:     index_first_pending(y.index_first_pending),
-40039:     sorted(y.sorted),
-40039:     representation_(y.representation_) {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline
-40039: Linear_System<Row>::Linear_System(const Linear_System& y, Representation r,
-40039:                                   With_Pending)
-40039:   : rows(),
-40039:     space_dimension_(y.space_dimension_),
-40039:     row_topology(y.row_topology),
-40039:     index_first_pending(y.index_first_pending),
-40039:     sorted(y.sorted),
-40039:     representation_(r) {
-40039:   rows.resize(y.num_rows());
-40039:   for (dimension_type i = 0; i < y.num_rows(); ++i) {
-40039: 
-40039:     Row row(y.rows[i], r);
-40039:     swap(rows[i], row);
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline Linear_System<Row>&
-40039: Linear_System<Row>::operator=(const Linear_System& y) {
-40039: 
-40039:   Linear_System<Row> tmp = y;
-40039:   swap(*this, tmp);
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_System<Row>::assign_with_pending(const Linear_System& y) {
-40039:   Linear_System<Row> tmp(y, With_Pending());
-40039:   swap(*this, tmp);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_System<Row>::m_swap(Linear_System& y) {
-40039:   using std::swap;
-40039:   swap(rows, y.rows);
-40039:   swap(space_dimension_, y.space_dimension_);
-40039:   swap(row_topology, y.row_topology);
-40039:   swap(index_first_pending, y.index_first_pending);
-40039:   swap(sorted, y.sorted);
-40039:   swap(representation_, y.representation_);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_System<Row>::clear() {
-40039: 
-40039:   rows.clear();
-40039:   index_first_pending = 0;
-40039:   sorted = true;
-40039:   space_dimension_ = 0;
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_System<Row>::mark_as_necessarily_closed() {
-40039:   ((void) 0);
-40039:   row_topology = NECESSARILY_CLOSED;
-40039:   ++space_dimension_;
-40039:   for (dimension_type i = num_rows(); i-- > 0; ) {
-40039:     rows[i].mark_as_necessarily_closed();
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_System<Row>::mark_as_not_necessarily_closed() {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   row_topology = NOT_NECESSARILY_CLOSED;
-40039:   --space_dimension_;
-40039:   for (dimension_type i = num_rows(); i-- > 0; ) {
-40039:     rows[i].mark_as_not_necessarily_closed();
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_System<Row>::set_topology(Topology t) {
-40039:   if (topology() == t) {
-40039:     return;
-40039:   }
-40039:   for (dimension_type i = num_rows(); i-- > 0; ) {
-40039:     rows[i].set_topology(t);
-40039:   }
-40039:   row_topology = t;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_System<Row>::set_necessarily_closed() {
-40039:   set_topology(NECESSARILY_CLOSED);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_System<Row>::set_not_necessarily_closed() {
-40039:   set_topology(NOT_NECESSARILY_CLOSED);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline bool
-40039: Linear_System<Row>::is_necessarily_closed() const {
-40039:   return row_topology == NECESSARILY_CLOSED;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline const Row&
-40039: Linear_System<Row>::operator[](const dimension_type k) const {
-40039:   return rows[k];
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline typename Linear_System<Row>::iterator
-40039: Linear_System<Row>::begin() {
-40039:   return rows.begin();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline typename Linear_System<Row>::iterator
-40039: Linear_System<Row>::end() {
-40039:   return rows.end();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline typename Linear_System<Row>::const_iterator
-40039: Linear_System<Row>::begin() const {
-40039:   return rows.begin();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline typename Linear_System<Row>::const_iterator
-40039: Linear_System<Row>::end() const {
-40039:   return rows.end();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline bool
-40039: Linear_System<Row>::has_no_rows() const {
-40039:   return rows.empty();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline dimension_type
-40039: Linear_System<Row>::num_rows() const {
-40039:   return rows.size();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline Topology
-40039: Linear_System<Row>::topology() const {
-40039:   return row_topology;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline Representation
-40039: Linear_System<Row>::representation() const {
-40039:   return representation_;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_System<Row>::set_representation(Representation r) {
-40039:   representation_ = r;
-40039:   for (dimension_type i = 0; i < rows.size(); ++i) {
-40039:     rows[i].set_representation(r);
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline dimension_type
-40039: Linear_System<Row>::max_space_dimension() {
-40039:   return Row::max_space_dimension();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline dimension_type
-40039: Linear_System<Row>::space_dimension() const {
-40039:   return space_dimension_;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_System<Row>::set_space_dimension_no_ok(dimension_type space_dim) {
-40039:   for (dimension_type i = rows.size(); i-- > 0; ) {
-40039:     rows[i].set_space_dimension_no_ok(space_dim);
-40039:   }
-40039:   space_dimension_ = space_dim;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_System<Row>::set_space_dimension(dimension_type space_dim) {
-40039:   set_space_dimension_no_ok(space_dim);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_System<Row>::remove_row_no_ok(const dimension_type i,
-40039:                                      const bool keep_sorted) {
-40039:   ((void) 0);
-40039:   const bool was_pending = (i >= index_first_pending);
-40039: 
-40039:   if (sorted && keep_sorted && !was_pending) {
-40039:     for (dimension_type j = i + 1; j < rows.size(); ++j) {
-40039:       swap(rows[j], rows[j-1]);
-40039:     }
-40039:     rows.pop_back();
-40039:   }
-40039:   else {
-40039:     if (!was_pending) {
-40039:       sorted = false;
-40039:     }
-40039:     const bool last_row_is_pending = (num_rows() - 1 >= index_first_pending);
-40039:     if (was_pending == last_row_is_pending) {
-40039: 
-40039:       swap(rows[i], rows.back());
-40039:     }
-40039:     else {
-40039: 
-40039:       ((void) 0);
-40039:       ((void) 0);
-40039: 
-40039: 
-40039:       swap(rows[i], rows[index_first_pending - 1]);
-40039: 
-40039: 
-40039: 
-40039:       swap(rows[i], rows.back());
-40039:     }
-40039:     rows.pop_back();
-40039:   }
-40039:   if (!was_pending) {
-40039: 
-40039:     --index_first_pending;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_System<Row>::remove_row(const dimension_type i, bool keep_sorted) {
-40039:   remove_row_no_ok(i, keep_sorted);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_System<Row>::remove_rows(dimension_type first,
-40039:                                 dimension_type last,
-40039:                                 bool keep_sorted) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   const dimension_type n = last - first;
-40039: 
-40039:   if (n == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: 
-40039:   const bool were_pending = (first >= index_first_pending);
-40039: 
-40039: 
-40039:   if (sorted && keep_sorted && !were_pending) {
-40039: 
-40039:     for (dimension_type i = last; i < rows.size(); ++i) {
-40039:       swap(rows[i], rows[i - n]);
-40039:     }
-40039: 
-40039:     rows.resize(rows.size() - n);
-40039: 
-40039: 
-40039:     index_first_pending -= n;
-40039: 
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type offset = rows.size() - n - first;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (index_first_pending == num_rows()) {
-40039: 
-40039:     ((void) 0);
-40039: 
-40039:     swap_row_intervals(first, last, offset);
-40039: 
-40039:     rows.resize(rows.size() - n);
-40039: 
-40039: 
-40039:     index_first_pending -= n;
-40039:   }
-40039:   else {
-40039: 
-40039:     if (were_pending) {
-40039: 
-40039: 
-40039: 
-40039:       swap_row_intervals(first, last, offset);
-40039: 
-40039:       rows.resize(rows.size() - n);
-40039: 
-40039: 
-40039:       index_first_pending -= n;
-40039:     }
-40039:     else {
-40039:       ((void) 0);
-40039:       ((void) 0);
-40039:       ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:       ((void) 0);
-40039:       swap_row_intervals(first, last, index_first_pending - last);
-40039: 
-40039: 
-40039:       index_first_pending -= n;
-40039:       first = index_first_pending;
-40039:       last = first + n;
-40039: 
-40039: 
-40039:       swap_row_intervals(first, last, num_rows() - last);
-40039: 
-40039: 
-40039:       rows.resize(rows.size() - n);
-40039:     }
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_System<Row>::swap_row_intervals(dimension_type first,
-40039:                                        dimension_type last,
-40039:                                        dimension_type offset) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: # 534 "../../src/Linear_System_inlines.hh"
-40039:   if (first + offset < last) {
-40039: 
-40039:     const dimension_type k = last - first - offset;
-40039:     last -= k;
-40039:     offset += k;
-40039:   }
-40039: 
-40039:   if (first == last) {
-40039: 
-40039:     return;
-40039:   }
-40039: 
-40039:   for (dimension_type i = first; i < last; ++i) {
-40039:     swap(rows[i], rows[i + offset]);
-40039:   }
-40039: 
-40039:   if (first < index_first_pending) {
-40039: 
-40039:     set_sorted(false);
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_System<Row>::remove_rows(const std::vector<dimension_type>& indexes) {
-40039: # 576 "../../src/Linear_System_inlines.hh"
-40039:   if (indexes.empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   const dimension_type rows_size = rows.size();
-40039:   typedef std::vector<dimension_type>::const_iterator itr_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type last_unused_row = indexes[0];
-40039:   dimension_type i = indexes[0];
-40039:   itr_t itr = indexes.begin();
-40039:   itr_t itr_end = indexes.end();
-40039:   while (itr != itr_end) {
-40039: 
-40039:     ((void) 0);
-40039:     if (*itr == i) {
-40039: 
-40039:       ++itr;
-40039:     }
-40039:     else {
-40039: 
-40039:       swap(rows[last_unused_row], rows[i]);
-40039:       ++last_unused_row;
-40039:     }
-40039:     ++i;
-40039:   }
-40039: 
-40039: 
-40039:   for ( ; i < rows_size; ++i) {
-40039:     swap(rows[last_unused_row], rows[i]);
-40039:     ++last_unused_row;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:   rows.resize(last_unused_row);
-40039: 
-40039: 
-40039:   if (indexes[0] >= index_first_pending) {
-40039: 
-40039:   }
-40039:   else {
-40039:     if (indexes.back() < index_first_pending) {
-40039: 
-40039:       index_first_pending -= indexes.size();
-40039:     }
-40039:     else {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       itr_t j = std::lower_bound(indexes.begin(), indexes.end(),
-40039:                                  index_first_pending);
-40039:       std::iterator_traits<itr_t>::difference_type
-40039:         non_pending = j - indexes.begin();
-40039:       index_first_pending -= static_cast<dimension_type>(non_pending);
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_System<Row>::remove_trailing_rows(const dimension_type n) {
-40039:   ((void) 0);
-40039:   rows.resize(rows.size() - n);
-40039:   if (first_pending_row() > rows.size()) {
-40039:     index_first_pending = rows.size();
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_System<Row>
-40039: ::permute_space_dimensions(const std::vector<Variable>& cycle) {
-40039:   for (dimension_type i = num_rows(); i-- > 0; ) {
-40039:     rows[i].permute_space_dimensions(cycle);
-40039:   }
-40039:   sorted = false;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Linear_System<Row>
-40039: ::swap_space_dimensions(Variable v1, Variable v2) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   for (dimension_type k = num_rows(); k-- > 0; ) {
-40039:     rows[k].swap_space_dimensions(v1, v2);
-40039:   }
-40039:   sorted = false;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: 
-40039: template <typename Row>
-40039: inline bool
-40039: operator!=(const Linear_System<Row>& x, const Linear_System<Row>& y) {
-40039:   return !(x == y);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline bool
-40039: Linear_System<Row>::Row_Less_Than::operator()(const Row& x,
-40039:                                               const Row& y) const {
-40039:   return compare(x, y) < 0;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline
-40039: Linear_System<Row>::Unique_Compare
-40039: ::Unique_Compare(const Swapping_Vector<Row>& cont,
-40039:                  dimension_type base)
-40039:   : container(cont), base_index(base) {
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline bool
-40039: Linear_System<Row>::Unique_Compare
-40039: ::operator()(dimension_type i, dimension_type j) const {
-40039:   return container[base_index + i].is_equal_to(container[base_index + j]);
-40039: }
-40039: 
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: swap(Linear_System<Row>& x, Linear_System<Row>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 580 "../../src/Linear_System_defs.hh" 2
-40039: # 1 "../../src/Linear_System_templates.hh" 1
-40039: # 27 "../../src/Linear_System_templates.hh"
-40039: # 1 "../../src/Bit_Matrix_defs.hh" 1
-40039: # 33 "../../src/Bit_Matrix_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: class Parma_Polyhedra_Library::Bit_Matrix {
-40039: public:
-40039: 
-40039:   Bit_Matrix();
-40039: 
-40039: 
-40039:   Bit_Matrix(dimension_type n_rows, dimension_type n_columns);
-40039: 
-40039: 
-40039:   Bit_Matrix(const Bit_Matrix& y);
-40039: 
-40039: 
-40039:   ~Bit_Matrix();
-40039: 
-40039: 
-40039:   Bit_Matrix& operator=(const Bit_Matrix& y);
-40039: 
-40039: 
-40039:   void m_swap(Bit_Matrix& y);
-40039: 
-40039: 
-40039:   Bit_Row& operator[](dimension_type k);
-40039: 
-40039: 
-40039:   const Bit_Row& operator[](dimension_type k) const;
-40039: 
-40039: 
-40039:   void clear();
-40039: 
-40039: 
-40039:   void transpose();
-40039: 
-40039: 
-40039:   void transpose_assign(const Bit_Matrix& y);
-40039: 
-40039: 
-40039:   static dimension_type max_num_rows();
-40039: 
-40039: 
-40039:   dimension_type num_columns() const;
-40039: 
-40039: 
-40039:   dimension_type num_rows() const;
-40039: 
-40039: 
-40039:   void sort_rows();
-40039: # 105 "../../src/Bit_Matrix_defs.hh"
-40039:   bool sorted_contains(const Bit_Row& row) const;
-40039: # 114 "../../src/Bit_Matrix_defs.hh"
-40039:   void add_recycled_row(Bit_Row& row);
-40039: 
-40039: 
-40039:   void remove_trailing_rows(dimension_type n);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void remove_trailing_columns(dimension_type n);
-40039: 
-40039: 
-40039:   void resize(dimension_type new_n_rows, dimension_type new_n_columns);
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: private:
-40039: 
-40039:   std::vector<Bit_Row> rows;
-40039: 
-40039: 
-40039:   dimension_type row_size;
-40039: 
-40039: 
-40039: 
-40039:   struct Bit_Row_Less_Than {
-40039:     bool operator()(const Bit_Row& x, const Bit_Row& y) const;
-40039:   };
-40039: 
-40039:   template <typename Row>
-40039:   friend class Parma_Polyhedra_Library::Linear_System;
-40039: };
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: bool operator==(const Bit_Matrix& x, const Bit_Matrix& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: bool operator!=(const Bit_Matrix& x, const Bit_Matrix& y);
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Bit_Matrix_inlines.hh" 1
-40039: # 30 "../../src/Bit_Matrix_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline
-40039: Bit_Matrix::Bit_Matrix()
-40039:   : rows(),
-40039:     row_size(0) {
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Bit_Matrix::max_num_rows() {
-40039:   return std::vector<Bit_Row>().max_size();
-40039: }
-40039: 
-40039: inline
-40039: Bit_Matrix::Bit_Matrix(const dimension_type n_rows,
-40039:                        const dimension_type n_columns)
-40039:   : rows(n_rows),
-40039:     row_size(n_columns) {
-40039: }
-40039: 
-40039: inline
-40039: Bit_Matrix::Bit_Matrix(const Bit_Matrix& y)
-40039:   : rows(y.rows),
-40039:     row_size(y.row_size) {
-40039: }
-40039: 
-40039: inline
-40039: Bit_Matrix::~Bit_Matrix() {
-40039: }
-40039: 
-40039: inline void
-40039: Bit_Matrix::remove_trailing_rows(const dimension_type n) {
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   if (n != 0) {
-40039:     rows.resize(rows.size() - n);
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline void
-40039: Bit_Matrix::remove_trailing_columns(const dimension_type n) {
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   row_size -= n;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline void
-40039: Bit_Matrix::m_swap(Bit_Matrix& y) {
-40039:   std::swap(row_size, y.row_size);
-40039:   std::swap(rows, y.rows);
-40039: }
-40039: 
-40039: inline Bit_Row&
-40039: Bit_Matrix::operator[](const dimension_type k) {
-40039:   ((void) 0);
-40039:   return rows[k];
-40039: }
-40039: 
-40039: inline const Bit_Row&
-40039: Bit_Matrix::operator[](const dimension_type k) const {
-40039:   ((void) 0);
-40039:   return rows[k];
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Bit_Matrix::num_columns() const {
-40039:   return row_size;
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Bit_Matrix::num_rows() const {
-40039:   return rows.size();
-40039: }
-40039: 
-40039: inline void
-40039: Bit_Matrix::clear() {
-40039: 
-40039:   std::vector<Bit_Row> tmp;
-40039:   std::swap(tmp, rows);
-40039:   row_size = 0;
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Bit_Matrix::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: inline bool
-40039: Bit_Matrix::Bit_Row_Less_Than::
-40039: operator()(const Bit_Row& x, const Bit_Row& y) const {
-40039:   return compare(x, y) < 0;
-40039: }
-40039: 
-40039: inline bool
-40039: Bit_Matrix::sorted_contains(const Bit_Row& row) const {
-40039:   ((void) 0);
-40039:   return std::binary_search(rows.begin(), rows.end(), row,
-40039:                             Bit_Row_Less_Than());
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: operator!=(const Bit_Matrix& x, const Bit_Matrix& y) {
-40039:   return !(x == y);
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: swap(Bit_Matrix& x, Bit_Matrix& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 186 "../../src/Bit_Matrix_defs.hh" 2
-40039: # 28 "../../src/Linear_System_templates.hh" 2
-40039: 
-40039: # 1 "../../src/Scalar_Products_defs.hh" 1
-40039: # 44 "../../src/Scalar_Products_defs.hh"
-40039: class Parma_Polyhedra_Library::Scalar_Products {
-40039: public:
-40039: 
-40039:   static void assign(Coefficient& z,
-40039:                      const Linear_Expression& x, const Linear_Expression& y);
-40039: 
-40039: 
-40039:   static void assign(Coefficient& z, const Constraint& c, const Generator& g);
-40039: 
-40039: 
-40039:   static void assign(Coefficient& z, const Generator& g, const Constraint& c);
-40039: 
-40039: 
-40039:   static void assign(Coefficient& z,
-40039:                      const Constraint& c, const Grid_Generator& gg);
-40039: 
-40039: 
-40039:   static void assign(Coefficient& z,
-40039:                      const Grid_Generator& gg, const Congruence& cg);
-40039: 
-40039: 
-40039:   static void assign(Coefficient& z,
-40039:                      const Congruence& cg, const Grid_Generator& gg);
-40039: 
-40039: 
-40039:   static int sign(const Linear_Expression& x, const Linear_Expression& y);
-40039: 
-40039: 
-40039:   static int sign(const Constraint& c, const Generator& g);
-40039: 
-40039: 
-40039:   static int sign(const Generator& g, const Constraint& c);
-40039: 
-40039: 
-40039:   static int sign(const Constraint& c, const Grid_Generator& g);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static void reduced_assign(Coefficient& z,
-40039:                              const Linear_Expression& x,
-40039:                              const Linear_Expression& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static void reduced_assign(Coefficient& z,
-40039:                              const Constraint& c, const Generator& g);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static void reduced_assign(Coefficient& z,
-40039:                              const Generator& g, const Constraint& c);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static void reduced_assign(Coefficient& z,
-40039:                              const Grid_Generator& gg, const Congruence& cg);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static int reduced_sign(const Linear_Expression& x,
-40039:                           const Linear_Expression& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static int reduced_sign(const Constraint& c, const Generator& g);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static int reduced_sign(const Generator& g, const Constraint& c);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static void homogeneous_assign(Coefficient& z,
-40039:                                  const Linear_Expression& x,
-40039:                                  const Linear_Expression& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static void homogeneous_assign(Coefficient& z,
-40039:                                  const Linear_Expression& e,
-40039:                                  const Generator& g);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static void homogeneous_assign(Coefficient& z,
-40039:                                  const Grid_Generator& gg,
-40039:                                  const Constraint& c);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static void homogeneous_assign(Coefficient& z,
-40039:                                  const Grid_Generator& gg,
-40039:                                  const Congruence& cg);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static void homogeneous_assign(Coefficient& z,
-40039:                                  const Linear_Expression& e,
-40039:                                  const Grid_Generator& g);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static int homogeneous_sign(const Linear_Expression& x,
-40039:                               const Linear_Expression& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static int homogeneous_sign(const Linear_Expression& e, const Generator& g);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static int homogeneous_sign(const Linear_Expression& e,
-40039:                               const Grid_Generator& g);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static int homogeneous_sign(const Grid_Generator& g, const Constraint& c);
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: class Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign {
-40039: public:
-40039: 
-40039:   Topology_Adjusted_Scalar_Product_Sign(const Constraint& c);
-40039: 
-40039: 
-40039:   Topology_Adjusted_Scalar_Product_Sign(const Generator& g);
-40039: 
-40039: 
-40039:   int operator()(const Constraint&, const Generator&) const;
-40039: 
-40039: 
-40039:   int operator()(const Generator&, const Constraint&) const;
-40039: 
-40039: private:
-40039: 
-40039:   typedef int (* const SPS_type)(const Linear_Expression&,
-40039:                                  const Linear_Expression&);
-40039: 
-40039: 
-40039:   SPS_type sps_fp;
-40039: };
-40039: # 30 "../../src/Linear_System_templates.hh" 2
-40039: # 1 "../../src/Scalar_Products_inlines.hh" 1
-40039: # 33 "../../src/Scalar_Products_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline int
-40039: Scalar_Products::sign(const Linear_Expression& x, const Linear_Expression& y) {
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_z; Parma_Polyhedra_Library::Coefficient& z = holder_z.item();
-40039:   assign(z, x, y);
-40039:   return sgn(z);
-40039: }
-40039: 
-40039: inline int
-40039: Scalar_Products::reduced_sign(const Linear_Expression& x,
-40039:                               const Linear_Expression& y) {
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_z; Parma_Polyhedra_Library::Coefficient& z = holder_z.item();
-40039:   reduced_assign(z, x, y);
-40039:   return sgn(z);
-40039: }
-40039: 
-40039: inline int
-40039: Scalar_Products::homogeneous_sign(const Linear_Expression& x,
-40039:                                   const Linear_Expression& y) {
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_z; Parma_Polyhedra_Library::Coefficient& z = holder_z.item();
-40039:   homogeneous_assign(z, x, y);
-40039:   return sgn(z);
-40039: }
-40039: 
-40039: inline int
-40039: Scalar_Products::sign(const Constraint& c, const Generator& g) {
-40039:   return sign(c.expr, g.expr);
-40039: }
-40039: 
-40039: inline int
-40039: Scalar_Products::sign(const Generator& g, const Constraint& c) {
-40039:   return sign(g.expr, c.expr);
-40039: }
-40039: 
-40039: inline int
-40039: Scalar_Products::sign(const Constraint& c, const Grid_Generator& g) {
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_z; Parma_Polyhedra_Library::Coefficient& z = holder_z.item();
-40039:   assign(z, c, g);
-40039:   return sgn(z);
-40039: }
-40039: 
-40039: inline int
-40039: Scalar_Products::reduced_sign(const Constraint& c, const Generator& g) {
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   return reduced_sign(c.expr, g.expr);
-40039: }
-40039: 
-40039: inline int
-40039: Scalar_Products::reduced_sign(const Generator& g, const Constraint& c) {
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   return reduced_sign(g.expr, c.expr);
-40039: }
-40039: 
-40039: inline void
-40039: Scalar_Products::homogeneous_assign(Coefficient& z,
-40039:                                     const Linear_Expression& e,
-40039:                                     const Generator& g) {
-40039:   homogeneous_assign(z, e, g.expr);
-40039: }
-40039: 
-40039: inline void
-40039: Scalar_Products::homogeneous_assign(Coefficient& z,
-40039:                                     const Linear_Expression& e,
-40039:                                     const Grid_Generator& g) {
-40039:   homogeneous_assign(z, e, g.expr);
-40039: }
-40039: 
-40039: inline int
-40039: Scalar_Products::homogeneous_sign(const Linear_Expression& e,
-40039:                                   const Generator& g) {
-40039:   return homogeneous_sign(e, g.expr);
-40039: }
-40039: 
-40039: inline int
-40039: Scalar_Products::homogeneous_sign(const Linear_Expression& e,
-40039:                                   const Grid_Generator& g) {
-40039:   return homogeneous_sign(e, g.expr);
-40039: }
-40039: 
-40039: inline int
-40039: Scalar_Products::homogeneous_sign(const Grid_Generator& g,
-40039:                                   const Constraint& c) {
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_z; Parma_Polyhedra_Library::Coefficient& z = holder_z.item();
-40039:   homogeneous_assign(z, g, c);
-40039:   return sgn(z);
-40039: }
-40039: 
-40039: inline
-40039: Topology_Adjusted_Scalar_Product_Sign
-40039: ::Topology_Adjusted_Scalar_Product_Sign(const Constraint& c)
-40039:   : sps_fp(c.is_necessarily_closed()
-40039:            ? static_cast<SPS_type>(&Scalar_Products::sign)
-40039:            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-40039: }
-40039: 
-40039: inline
-40039: Topology_Adjusted_Scalar_Product_Sign
-40039: ::Topology_Adjusted_Scalar_Product_Sign(const Generator& g)
-40039:   : sps_fp(g.is_necessarily_closed()
-40039:            ? static_cast<SPS_type>(&Scalar_Products::sign)
-40039:            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
-40039: }
-40039: 
-40039: inline int
-40039: Topology_Adjusted_Scalar_Product_Sign::operator()(const Constraint& c,
-40039:                                                   const Generator& g) const {
-40039:   ((void) 0);
-40039:   ((void) 0)
-40039: 
-40039:                                                                              ;
-40039:   return sps_fp(c.expr, g.expr);
-40039: }
-40039: 
-40039: inline int
-40039: Topology_Adjusted_Scalar_Product_Sign::operator()(const Generator& g,
-40039:                                                   const Constraint& c) const {
-40039:   ((void) 0);
-40039:   ((void) 0)
-40039: 
-40039:                                                                              ;
-40039:   return sps_fp(g.expr, c.expr);
-40039: }
-40039: 
-40039: }
-40039: # 31 "../../src/Linear_System_templates.hh" 2
-40039: # 1 "../../src/swapping_sort_templates.hh" 1
-40039: # 30 "../../src/swapping_sort_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: template <typename RA_Container, typename Compare>
-40039: struct Indirect_Sort_Compare {
-40039:   typedef typename RA_Container::size_type size_type;
-40039: 
-40039:   Indirect_Sort_Compare(const RA_Container& cont,
-40039:                         size_type base = 0,
-40039:                         Compare comp = Compare())
-40039:     : container(cont), base_index(base), compare(comp) {
-40039:   }
-40039: 
-40039:   bool operator()(size_type i, size_type j) const {
-40039:     return compare(container[base_index + i], container[base_index + j]);
-40039:   }
-40039: 
-40039:   const RA_Container& container;
-40039:   const size_type base_index;
-40039:   const Compare compare;
-40039: };
-40039: 
-40039: template <typename RA_Container>
-40039: struct Indirect_Unique_Compare {
-40039:   typedef typename RA_Container::size_type size_type;
-40039: 
-40039:   Indirect_Unique_Compare(const RA_Container& cont, size_type base = 0)
-40039:     : container(cont), base_index(base) {
-40039:   }
-40039: 
-40039:   bool operator()(size_type i, size_type j) const {
-40039:     return container[base_index + i] == container[base_index + j];
-40039:   }
-40039: 
-40039:   const RA_Container& container;
-40039:   const size_type base_index;
-40039: };
-40039: 
-40039: template <typename RA_Container>
-40039: struct Indirect_Swapper {
-40039:   typedef typename RA_Container::size_type size_type;
-40039: 
-40039:   Indirect_Swapper(RA_Container& cont, size_type base = 0)
-40039:     : container(cont), base_index(base) {
-40039:   }
-40039: 
-40039:   void operator()(size_type i, size_type j) const {
-40039:     using std::swap;
-40039:     swap(container[base_index + i], container[base_index + j]);
-40039:   }
-40039: 
-40039:   RA_Container& container;
-40039:   const size_type base_index;
-40039: };
-40039: 
-40039: template <typename RA_Container1, typename RA_Container2>
-40039: struct Indirect_Swapper2 {
-40039:   typedef typename RA_Container1::size_type size_type;
-40039: 
-40039:   Indirect_Swapper2(RA_Container1& cont1, RA_Container2& cont2)
-40039:     : container1(cont1), container2(cont2) {
-40039:   }
-40039: 
-40039:   void operator()(size_type i, size_type j) const {
-40039:     using std::swap;
-40039:     swap(container1[i], container1[j]);
-40039:     swap(container2[i], container2[j]);
-40039:   }
-40039: 
-40039:   RA_Container1& container1;
-40039:   RA_Container2& container2;
-40039: };
-40039: 
-40039: template <typename Sort_Comparer, typename Unique_Comparer, typename Swapper>
-40039: typename Sort_Comparer::size_type
-40039: indirect_sort_and_unique(typename Sort_Comparer::size_type num_elems,
-40039:                          Sort_Comparer sort_cmp,
-40039:                          Unique_Comparer unique_cmp,
-40039:                          Swapper indirect_swap) {
-40039:   typedef typename Sort_Comparer::size_type index_type;
-40039: 
-40039:   ((void) 0);
-40039:   std::vector<index_type> iv;
-40039:   iv.reserve(num_elems);
-40039:   for (index_type i = 0, i_end = num_elems; i != i_end; ++i) {
-40039:     iv.push_back(i);
-40039:   }
-40039: 
-40039:   typedef typename std::vector<index_type>::iterator Iter;
-40039:   const Iter iv_begin = iv.begin();
-40039:   Iter iv_end = iv.end();
-40039: 
-40039: 
-40039:   std::sort(iv_begin, iv_end, sort_cmp);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   for (index_type i = num_elems; i-- > 0; ) {
-40039:     if (i != iv[i]) {
-40039:       index_type dst = i;
-40039:       index_type src = iv[i];
-40039:       do {
-40039:         indirect_swap(src, dst);
-40039:         iv[dst] = dst;
-40039:         dst = src;
-40039:         src = iv[dst];
-40039:       } while (i != src);
-40039:       iv[dst] = dst;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   for (index_type i = num_elems; i-- > 0; ) {
-40039:     iv[i] = i;
-40039:   }
-40039: 
-40039: 
-40039:   iv_end = std::unique(iv_begin, iv_end, unique_cmp);
-40039: 
-40039:   const index_type num_sorted = static_cast<index_type>(iv_end - iv_begin);
-40039:   const index_type num_duplicates = num_elems - num_sorted;
-40039:   if (num_duplicates == 0) {
-40039:     return 0;
-40039:   }
-40039: 
-40039: 
-40039:   index_type dst = 0;
-40039:   while (dst < num_sorted && dst == iv[dst]) {
-40039:     ++dst;
-40039:   }
-40039:   if (dst == num_sorted) {
-40039:     return num_duplicates;
-40039:   }
-40039:   do {
-40039:     const index_type src = iv[dst];
-40039:     indirect_swap(src, dst);
-40039:     ++dst;
-40039:   }
-40039:   while (dst < num_sorted);
-40039:   return num_duplicates;
-40039: }
-40039: 
-40039: template <typename Iter>
-40039: Iter
-40039: swapping_unique(Iter first, Iter last) {
-40039:   return swapping_unique(first, last, std::iter_swap<Iter, Iter>);
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 32 "../../src/Linear_System_templates.hh" 2
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/deque" 1 3
-40039: # 58 "/usr/include/c++/8/deque" 3
-40039:        
-40039: # 59 "/usr/include/c++/8/deque" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/stl_deque.h" 1 3
-40039: # 68 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039: 
-40039: # 68 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: # 91 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:   constexpr inline size_t
-40039:   __deque_buf_size(size_t __size)
-40039:   { return (__size < 512
-40039:      ? size_t(512 / __size) : size_t(1)); }
-40039: # 108 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:   template<typename _Tp, typename _Ref, typename _Ptr>
-40039:     struct _Deque_iterator
-40039:     {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     private:
-40039:       template<typename _Up>
-40039:  using __ptr_to = typename pointer_traits<_Ptr>::template rebind<_Up>;
-40039:       template<typename _CvTp>
-40039:  using __iter = _Deque_iterator<_Tp, _CvTp&, __ptr_to<_CvTp>>;
-40039:     public:
-40039:       typedef __iter<_Tp> iterator;
-40039:       typedef __iter<const _Tp> const_iterator;
-40039:       typedef __ptr_to<_Tp> _Elt_pointer;
-40039:       typedef __ptr_to<_Elt_pointer> _Map_pointer;
-40039: 
-40039: 
-40039:       static size_t _S_buffer_size() noexcept
-40039:       { return __deque_buf_size(sizeof(_Tp)); }
-40039: 
-40039:       typedef std::random_access_iterator_tag iterator_category;
-40039:       typedef _Tp value_type;
-40039:       typedef _Ptr pointer;
-40039:       typedef _Ref reference;
-40039:       typedef size_t size_type;
-40039:       typedef ptrdiff_t difference_type;
-40039:       typedef _Deque_iterator _Self;
-40039: 
-40039:       _Elt_pointer _M_cur;
-40039:       _Elt_pointer _M_first;
-40039:       _Elt_pointer _M_last;
-40039:       _Map_pointer _M_node;
-40039: 
-40039:       _Deque_iterator(_Elt_pointer __x, _Map_pointer __y) noexcept
-40039:       : _M_cur(__x), _M_first(*__y),
-40039:  _M_last(*__y + _S_buffer_size()), _M_node(__y) { }
-40039: 
-40039:       _Deque_iterator() noexcept
-40039:       : _M_cur(), _M_first(), _M_last(), _M_node() { }
-40039: 
-40039:       _Deque_iterator(const iterator& __x) noexcept
-40039:       : _M_cur(__x._M_cur), _M_first(__x._M_first),
-40039:  _M_last(__x._M_last), _M_node(__x._M_node) { }
-40039: 
-40039:       iterator
-40039:       _M_const_cast() const noexcept
-40039:       { return iterator(_M_cur, _M_node); }
-40039: 
-40039:       reference
-40039:       operator*() const noexcept
-40039:       { return *_M_cur; }
-40039: 
-40039:       pointer
-40039:       operator->() const noexcept
-40039:       { return _M_cur; }
-40039: 
-40039:       _Self&
-40039:       operator++() noexcept
-40039:       {
-40039:  ++_M_cur;
-40039:  if (_M_cur == _M_last)
-40039:    {
-40039:      _M_set_node(_M_node + 1);
-40039:      _M_cur = _M_first;
-40039:    }
-40039:  return *this;
-40039:       }
-40039: 
-40039:       _Self
-40039:       operator++(int) noexcept
-40039:       {
-40039:  _Self __tmp = *this;
-40039:  ++*this;
-40039:  return __tmp;
-40039:       }
-40039: 
-40039:       _Self&
-40039:       operator--() noexcept
-40039:       {
-40039:  if (_M_cur == _M_first)
-40039:    {
-40039:      _M_set_node(_M_node - 1);
-40039:      _M_cur = _M_last;
-40039:    }
-40039:  --_M_cur;
-40039:  return *this;
-40039:       }
-40039: 
-40039:       _Self
-40039:       operator--(int) noexcept
-40039:       {
-40039:  _Self __tmp = *this;
-40039:  --*this;
-40039:  return __tmp;
-40039:       }
-40039: 
-40039:       _Self&
-40039:       operator+=(difference_type __n) noexcept
-40039:       {
-40039:  const difference_type __offset = __n + (_M_cur - _M_first);
-40039:  if (__offset >= 0 && __offset < difference_type(_S_buffer_size()))
-40039:    _M_cur += __n;
-40039:  else
-40039:    {
-40039:      const difference_type __node_offset =
-40039:        __offset > 0 ? __offset / difference_type(_S_buffer_size())
-40039:       : -difference_type((-__offset - 1)
-40039:            / _S_buffer_size()) - 1;
-40039:      _M_set_node(_M_node + __node_offset);
-40039:      _M_cur = _M_first + (__offset - __node_offset
-40039:      * difference_type(_S_buffer_size()));
-40039:    }
-40039:  return *this;
-40039:       }
-40039: 
-40039:       _Self
-40039:       operator+(difference_type __n) const noexcept
-40039:       {
-40039:  _Self __tmp = *this;
-40039:  return __tmp += __n;
-40039:       }
-40039: 
-40039:       _Self&
-40039:       operator-=(difference_type __n) noexcept
-40039:       { return *this += -__n; }
-40039: 
-40039:       _Self
-40039:       operator-(difference_type __n) const noexcept
-40039:       {
-40039:  _Self __tmp = *this;
-40039:  return __tmp -= __n;
-40039:       }
-40039: 
-40039:       reference
-40039:       operator[](difference_type __n) const noexcept
-40039:       { return *(*this + __n); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_set_node(_Map_pointer __new_node) noexcept
-40039:       {
-40039:  _M_node = __new_node;
-40039:  _M_first = *__new_node;
-40039:  _M_last = _M_first + difference_type(_S_buffer_size());
-40039:       }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Ref, typename _Ptr>
-40039:     inline bool
-40039:     operator==(const _Deque_iterator<_Tp, _Ref, _Ptr>& __x,
-40039:         const _Deque_iterator<_Tp, _Ref, _Ptr>& __y) noexcept
-40039:     { return __x._M_cur == __y._M_cur; }
-40039: 
-40039:   template<typename _Tp, typename _RefL, typename _PtrL,
-40039:     typename _RefR, typename _PtrR>
-40039:     inline bool
-40039:     operator==(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x,
-40039:         const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) noexcept
-40039:     { return __x._M_cur == __y._M_cur; }
-40039: 
-40039:   template<typename _Tp, typename _Ref, typename _Ptr>
-40039:     inline bool
-40039:     operator!=(const _Deque_iterator<_Tp, _Ref, _Ptr>& __x,
-40039:         const _Deque_iterator<_Tp, _Ref, _Ptr>& __y) noexcept
-40039:     { return !(__x == __y); }
-40039: 
-40039:   template<typename _Tp, typename _RefL, typename _PtrL,
-40039:     typename _RefR, typename _PtrR>
-40039:     inline bool
-40039:     operator!=(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x,
-40039:         const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) noexcept
-40039:     { return !(__x == __y); }
-40039: 
-40039:   template<typename _Tp, typename _Ref, typename _Ptr>
-40039:     inline bool
-40039:     operator<(const _Deque_iterator<_Tp, _Ref, _Ptr>& __x,
-40039:        const _Deque_iterator<_Tp, _Ref, _Ptr>& __y) noexcept
-40039:     { return (__x._M_node == __y._M_node) ? (__x._M_cur < __y._M_cur)
-40039:        : (__x._M_node < __y._M_node); }
-40039: 
-40039:   template<typename _Tp, typename _RefL, typename _PtrL,
-40039:     typename _RefR, typename _PtrR>
-40039:     inline bool
-40039:     operator<(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x,
-40039:        const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) noexcept
-40039:     { return (__x._M_node == __y._M_node) ? (__x._M_cur < __y._M_cur)
-40039:        : (__x._M_node < __y._M_node); }
-40039: 
-40039:   template<typename _Tp, typename _Ref, typename _Ptr>
-40039:     inline bool
-40039:     operator>(const _Deque_iterator<_Tp, _Ref, _Ptr>& __x,
-40039:        const _Deque_iterator<_Tp, _Ref, _Ptr>& __y) noexcept
-40039:     { return __y < __x; }
-40039: 
-40039:   template<typename _Tp, typename _RefL, typename _PtrL,
-40039:     typename _RefR, typename _PtrR>
-40039:     inline bool
-40039:     operator>(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x,
-40039:        const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) noexcept
-40039:     { return __y < __x; }
-40039: 
-40039:   template<typename _Tp, typename _Ref, typename _Ptr>
-40039:     inline bool
-40039:     operator<=(const _Deque_iterator<_Tp, _Ref, _Ptr>& __x,
-40039:         const _Deque_iterator<_Tp, _Ref, _Ptr>& __y) noexcept
-40039:     { return !(__y < __x); }
-40039: 
-40039:   template<typename _Tp, typename _RefL, typename _PtrL,
-40039:     typename _RefR, typename _PtrR>
-40039:     inline bool
-40039:     operator<=(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x,
-40039:         const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) noexcept
-40039:     { return !(__y < __x); }
-40039: 
-40039:   template<typename _Tp, typename _Ref, typename _Ptr>
-40039:     inline bool
-40039:     operator>=(const _Deque_iterator<_Tp, _Ref, _Ptr>& __x,
-40039:         const _Deque_iterator<_Tp, _Ref, _Ptr>& __y) noexcept
-40039:     { return !(__x < __y); }
-40039: 
-40039:   template<typename _Tp, typename _RefL, typename _PtrL,
-40039:     typename _RefR, typename _PtrR>
-40039:     inline bool
-40039:     operator>=(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x,
-40039:         const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) noexcept
-40039:     { return !(__x < __y); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Ref, typename _Ptr>
-40039:     inline typename _Deque_iterator<_Tp, _Ref, _Ptr>::difference_type
-40039:     operator-(const _Deque_iterator<_Tp, _Ref, _Ptr>& __x,
-40039:        const _Deque_iterator<_Tp, _Ref, _Ptr>& __y) noexcept
-40039:     {
-40039:       return typename _Deque_iterator<_Tp, _Ref, _Ptr>::difference_type
-40039:  (_Deque_iterator<_Tp, _Ref, _Ptr>::_S_buffer_size())
-40039:  * (__x._M_node - __y._M_node - 1) + (__x._M_cur - __x._M_first)
-40039:  + (__y._M_last - __y._M_cur);
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _RefL, typename _PtrL,
-40039:     typename _RefR, typename _PtrR>
-40039:     inline typename _Deque_iterator<_Tp, _RefL, _PtrL>::difference_type
-40039:     operator-(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x,
-40039:        const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) noexcept
-40039:     {
-40039:       return typename _Deque_iterator<_Tp, _RefL, _PtrL>::difference_type
-40039:  (_Deque_iterator<_Tp, _RefL, _PtrL>::_S_buffer_size())
-40039:  * (__x._M_node - __y._M_node - 1) + (__x._M_cur - __x._M_first)
-40039:  + (__y._M_last - __y._M_cur);
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Ref, typename _Ptr>
-40039:     inline _Deque_iterator<_Tp, _Ref, _Ptr>
-40039:     operator+(ptrdiff_t __n, const _Deque_iterator<_Tp, _Ref, _Ptr>& __x)
-40039:     noexcept
-40039:     { return __x + __n; }
-40039: 
-40039:   template<typename _Tp>
-40039:     void
-40039:     fill(const _Deque_iterator<_Tp, _Tp&, _Tp*>&,
-40039:   const _Deque_iterator<_Tp, _Tp&, _Tp*>&, const _Tp&);
-40039: 
-40039:   template<typename _Tp>
-40039:     _Deque_iterator<_Tp, _Tp&, _Tp*>
-40039:     copy(_Deque_iterator<_Tp, const _Tp&, const _Tp*>,
-40039:   _Deque_iterator<_Tp, const _Tp&, const _Tp*>,
-40039:   _Deque_iterator<_Tp, _Tp&, _Tp*>);
-40039: 
-40039:   template<typename _Tp>
-40039:     inline _Deque_iterator<_Tp, _Tp&, _Tp*>
-40039:     copy(_Deque_iterator<_Tp, _Tp&, _Tp*> __first,
-40039:   _Deque_iterator<_Tp, _Tp&, _Tp*> __last,
-40039:   _Deque_iterator<_Tp, _Tp&, _Tp*> __result)
-40039:     { return std::copy(_Deque_iterator<_Tp, const _Tp&, const _Tp*>(__first),
-40039:          _Deque_iterator<_Tp, const _Tp&, const _Tp*>(__last),
-40039:          __result); }
-40039: 
-40039:   template<typename _Tp>
-40039:     _Deque_iterator<_Tp, _Tp&, _Tp*>
-40039:     copy_backward(_Deque_iterator<_Tp, const _Tp&, const _Tp*>,
-40039:     _Deque_iterator<_Tp, const _Tp&, const _Tp*>,
-40039:     _Deque_iterator<_Tp, _Tp&, _Tp*>);
-40039: 
-40039:   template<typename _Tp>
-40039:     inline _Deque_iterator<_Tp, _Tp&, _Tp*>
-40039:     copy_backward(_Deque_iterator<_Tp, _Tp&, _Tp*> __first,
-40039:     _Deque_iterator<_Tp, _Tp&, _Tp*> __last,
-40039:     _Deque_iterator<_Tp, _Tp&, _Tp*> __result)
-40039:     { return std::copy_backward(_Deque_iterator<_Tp,
-40039:     const _Tp&, const _Tp*>(__first),
-40039:     _Deque_iterator<_Tp,
-40039:     const _Tp&, const _Tp*>(__last),
-40039:     __result); }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     _Deque_iterator<_Tp, _Tp&, _Tp*>
-40039:     move(_Deque_iterator<_Tp, const _Tp&, const _Tp*>,
-40039:   _Deque_iterator<_Tp, const _Tp&, const _Tp*>,
-40039:   _Deque_iterator<_Tp, _Tp&, _Tp*>);
-40039: 
-40039:   template<typename _Tp>
-40039:     inline _Deque_iterator<_Tp, _Tp&, _Tp*>
-40039:     move(_Deque_iterator<_Tp, _Tp&, _Tp*> __first,
-40039:   _Deque_iterator<_Tp, _Tp&, _Tp*> __last,
-40039:   _Deque_iterator<_Tp, _Tp&, _Tp*> __result)
-40039:     { return std::move(_Deque_iterator<_Tp, const _Tp&, const _Tp*>(__first),
-40039:          _Deque_iterator<_Tp, const _Tp&, const _Tp*>(__last),
-40039:          __result); }
-40039: 
-40039:   template<typename _Tp>
-40039:     _Deque_iterator<_Tp, _Tp&, _Tp*>
-40039:     move_backward(_Deque_iterator<_Tp, const _Tp&, const _Tp*>,
-40039:     _Deque_iterator<_Tp, const _Tp&, const _Tp*>,
-40039:     _Deque_iterator<_Tp, _Tp&, _Tp*>);
-40039: 
-40039:   template<typename _Tp>
-40039:     inline _Deque_iterator<_Tp, _Tp&, _Tp*>
-40039:     move_backward(_Deque_iterator<_Tp, _Tp&, _Tp*> __first,
-40039:     _Deque_iterator<_Tp, _Tp&, _Tp*> __last,
-40039:     _Deque_iterator<_Tp, _Tp&, _Tp*> __result)
-40039:     { return std::move_backward(_Deque_iterator<_Tp,
-40039:     const _Tp&, const _Tp*>(__first),
-40039:     _Deque_iterator<_Tp,
-40039:     const _Tp&, const _Tp*>(__last),
-40039:     __result); }
-40039: # 460 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:   template<typename _Tp, typename _Alloc>
-40039:     class _Deque_base
-40039:     {
-40039:     protected:
-40039:       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
-40039:  rebind<_Tp>::other _Tp_alloc_type;
-40039:       typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Alloc_traits;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       typedef typename _Alloc_traits::pointer _Ptr;
-40039:       typedef typename _Alloc_traits::const_pointer _Ptr_const;
-40039: 
-40039: 
-40039:       typedef typename _Alloc_traits::template rebind<_Ptr>::other
-40039:  _Map_alloc_type;
-40039:       typedef __gnu_cxx::__alloc_traits<_Map_alloc_type> _Map_alloc_traits;
-40039: 
-40039:     public:
-40039:       typedef _Alloc allocator_type;
-40039:       typedef typename _Alloc_traits::size_type size_type;
-40039: 
-40039:       allocator_type
-40039:       get_allocator() const noexcept
-40039:       { return allocator_type(_M_get_Tp_allocator()); }
-40039: 
-40039:       typedef _Deque_iterator<_Tp, _Tp&, _Ptr> iterator;
-40039:       typedef _Deque_iterator<_Tp, const _Tp&, _Ptr_const> const_iterator;
-40039: 
-40039:       _Deque_base()
-40039:       : _M_impl()
-40039:       { _M_initialize_map(0); }
-40039: 
-40039:       _Deque_base(size_t __num_elements)
-40039:       : _M_impl()
-40039:       { _M_initialize_map(__num_elements); }
-40039: 
-40039:       _Deque_base(const allocator_type& __a, size_t __num_elements)
-40039:       : _M_impl(__a)
-40039:       { _M_initialize_map(__num_elements); }
-40039: 
-40039:       _Deque_base(const allocator_type& __a)
-40039:       : _M_impl(__a)
-40039:       { }
-40039: 
-40039: 
-40039:       _Deque_base(_Deque_base&& __x, false_type)
-40039:       : _M_impl(__x._M_move_impl())
-40039:       { }
-40039: 
-40039:       _Deque_base(_Deque_base&& __x, true_type)
-40039:       : _M_impl(std::move(__x._M_get_Tp_allocator()))
-40039:       {
-40039:  _M_initialize_map(0);
-40039:  if (__x._M_impl._M_map)
-40039:    this->_M_impl._M_swap_data(__x._M_impl);
-40039:       }
-40039: 
-40039:       _Deque_base(_Deque_base&& __x)
-40039:       : _Deque_base(std::move(__x), typename _Alloc_traits::is_always_equal{})
-40039:       { }
-40039: 
-40039:       _Deque_base(_Deque_base&& __x, const allocator_type& __a, size_type __n)
-40039:       : _M_impl(__a)
-40039:       {
-40039:  if (__x.get_allocator() == __a)
-40039:    {
-40039:      if (__x._M_impl._M_map)
-40039:        {
-40039:   _M_initialize_map(0);
-40039:   this->_M_impl._M_swap_data(__x._M_impl);
-40039:        }
-40039:    }
-40039:  else
-40039:    {
-40039:      _M_initialize_map(__n);
-40039:    }
-40039:       }
-40039: 
-40039: 
-40039:       ~_Deque_base() noexcept;
-40039: 
-40039:     protected:
-40039:       typedef typename iterator::_Map_pointer _Map_pointer;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       struct _Deque_impl
-40039:       : public _Tp_alloc_type
-40039:       {
-40039:  _Map_pointer _M_map;
-40039:  size_t _M_map_size;
-40039:  iterator _M_start;
-40039:  iterator _M_finish;
-40039: 
-40039:  _Deque_impl()
-40039:  : _Tp_alloc_type(), _M_map(), _M_map_size(0),
-40039:    _M_start(), _M_finish()
-40039:  { }
-40039: 
-40039:  _Deque_impl(const _Tp_alloc_type& __a) noexcept
-40039:  : _Tp_alloc_type(__a), _M_map(), _M_map_size(0),
-40039:    _M_start(), _M_finish()
-40039:  { }
-40039: 
-40039: 
-40039:  _Deque_impl(_Deque_impl&&) = default;
-40039: 
-40039:  _Deque_impl(_Tp_alloc_type&& __a) noexcept
-40039:  : _Tp_alloc_type(std::move(__a)), _M_map(), _M_map_size(0),
-40039:    _M_start(), _M_finish()
-40039:  { }
-40039: 
-40039: 
-40039:  void _M_swap_data(_Deque_impl& __x) noexcept
-40039:  {
-40039:    using std::swap;
-40039:    swap(this->_M_start, __x._M_start);
-40039:    swap(this->_M_finish, __x._M_finish);
-40039:    swap(this->_M_map, __x._M_map);
-40039:    swap(this->_M_map_size, __x._M_map_size);
-40039:  }
-40039:       };
-40039: 
-40039:       _Tp_alloc_type&
-40039:       _M_get_Tp_allocator() noexcept
-40039:       { return *static_cast<_Tp_alloc_type*>(&this->_M_impl); }
-40039: 
-40039:       const _Tp_alloc_type&
-40039:       _M_get_Tp_allocator() const noexcept
-40039:       { return *static_cast<const _Tp_alloc_type*>(&this->_M_impl); }
-40039: 
-40039:       _Map_alloc_type
-40039:       _M_get_map_allocator() const noexcept
-40039:       { return _Map_alloc_type(_M_get_Tp_allocator()); }
-40039: 
-40039:       _Ptr
-40039:       _M_allocate_node()
-40039:       {
-40039:  typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Traits;
-40039:  return _Traits::allocate(_M_impl, __deque_buf_size(sizeof(_Tp)));
-40039:       }
-40039: 
-40039:       void
-40039:       _M_deallocate_node(_Ptr __p) noexcept
-40039:       {
-40039:  typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Traits;
-40039:  _Traits::deallocate(_M_impl, __p, __deque_buf_size(sizeof(_Tp)));
-40039:       }
-40039: 
-40039:       _Map_pointer
-40039:       _M_allocate_map(size_t __n)
-40039:       {
-40039:  _Map_alloc_type __map_alloc = _M_get_map_allocator();
-40039:  return _Map_alloc_traits::allocate(__map_alloc, __n);
-40039:       }
-40039: 
-40039:       void
-40039:       _M_deallocate_map(_Map_pointer __p, size_t __n) noexcept
-40039:       {
-40039:  _Map_alloc_type __map_alloc = _M_get_map_allocator();
-40039:  _Map_alloc_traits::deallocate(__map_alloc, __p, __n);
-40039:       }
-40039: 
-40039:     protected:
-40039:       void _M_initialize_map(size_t);
-40039:       void _M_create_nodes(_Map_pointer __nstart, _Map_pointer __nfinish);
-40039:       void _M_destroy_nodes(_Map_pointer __nstart,
-40039:        _Map_pointer __nfinish) noexcept;
-40039:       enum { _S_initial_map_size = 8 };
-40039: 
-40039:       _Deque_impl _M_impl;
-40039: 
-40039: 
-40039:     private:
-40039:       _Deque_impl
-40039:       _M_move_impl()
-40039:       {
-40039:  if (!_M_impl._M_map)
-40039:    return std::move(_M_impl);
-40039: 
-40039: 
-40039:  _Tp_alloc_type __alloc{_M_get_Tp_allocator()};
-40039: 
-40039:  _Tp_alloc_type __sink __attribute((__unused__)) {std::move(__alloc)};
-40039: 
-40039:  _Deque_base __empty{__alloc};
-40039:  __empty._M_initialize_map(0);
-40039: 
-40039:  _Deque_impl __ret{std::move(_M_get_Tp_allocator())};
-40039:  _M_impl._M_swap_data(__ret);
-40039:  _M_impl._M_swap_data(__empty._M_impl);
-40039:  return __ret;
-40039:       }
-40039: 
-40039:     };
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     _Deque_base<_Tp, _Alloc>::
-40039:     ~_Deque_base() noexcept
-40039:     {
-40039:       if (this->_M_impl._M_map)
-40039:  {
-40039:    _M_destroy_nodes(this->_M_impl._M_start._M_node,
-40039:       this->_M_impl._M_finish._M_node + 1);
-40039:    _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size);
-40039:  }
-40039:     }
-40039: # 680 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:   template<typename _Tp, typename _Alloc>
-40039:     void
-40039:     _Deque_base<_Tp, _Alloc>::
-40039:     _M_initialize_map(size_t __num_elements)
-40039:     {
-40039:       const size_t __num_nodes = (__num_elements/ __deque_buf_size(sizeof(_Tp))
-40039:       + 1);
-40039: 
-40039:       this->_M_impl._M_map_size = std::max((size_t) _S_initial_map_size,
-40039:         size_t(__num_nodes + 2));
-40039:       this->_M_impl._M_map = _M_allocate_map(this->_M_impl._M_map_size);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       _Map_pointer __nstart = (this->_M_impl._M_map
-40039:           + (this->_M_impl._M_map_size - __num_nodes) / 2);
-40039:       _Map_pointer __nfinish = __nstart + __num_nodes;
-40039: 
-40039:       try
-40039:  { _M_create_nodes(__nstart, __nfinish); }
-40039:       catch(...)
-40039:  {
-40039:    _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size);
-40039:    this->_M_impl._M_map = _Map_pointer();
-40039:    this->_M_impl._M_map_size = 0;
-40039:    throw;
-40039:  }
-40039: 
-40039:       this->_M_impl._M_start._M_set_node(__nstart);
-40039:       this->_M_impl._M_finish._M_set_node(__nfinish - 1);
-40039:       this->_M_impl._M_start._M_cur = _M_impl._M_start._M_first;
-40039:       this->_M_impl._M_finish._M_cur = (this->_M_impl._M_finish._M_first
-40039:      + __num_elements
-40039:      % __deque_buf_size(sizeof(_Tp)));
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     void
-40039:     _Deque_base<_Tp, _Alloc>::
-40039:     _M_create_nodes(_Map_pointer __nstart, _Map_pointer __nfinish)
-40039:     {
-40039:       _Map_pointer __cur;
-40039:       try
-40039:  {
-40039:    for (__cur = __nstart; __cur < __nfinish; ++__cur)
-40039:      *__cur = this->_M_allocate_node();
-40039:  }
-40039:       catch(...)
-40039:  {
-40039:    _M_destroy_nodes(__nstart, __cur);
-40039:    throw;
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     void
-40039:     _Deque_base<_Tp, _Alloc>::
-40039:     _M_destroy_nodes(_Map_pointer __nstart,
-40039:        _Map_pointer __nfinish) noexcept
-40039:     {
-40039:       for (_Map_pointer __n = __nstart; __n < __nfinish; ++__n)
-40039:  _M_deallocate_node(*__n);
-40039:     }
-40039: # 831 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:   template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
-40039:     class deque : protected _Deque_base<_Tp, _Alloc>
-40039:     {
-40039: # 844 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       static_assert(is_same<typename remove_cv<_Tp>::type, _Tp>::value,
-40039:    "std::deque must have a non-const, non-volatile value_type");
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       typedef _Deque_base<_Tp, _Alloc> _Base;
-40039:       typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
-40039:       typedef typename _Base::_Alloc_traits _Alloc_traits;
-40039:       typedef typename _Base::_Map_pointer _Map_pointer;
-40039: 
-40039:     public:
-40039:       typedef _Tp value_type;
-40039:       typedef typename _Alloc_traits::pointer pointer;
-40039:       typedef typename _Alloc_traits::const_pointer const_pointer;
-40039:       typedef typename _Alloc_traits::reference reference;
-40039:       typedef typename _Alloc_traits::const_reference const_reference;
-40039:       typedef typename _Base::iterator iterator;
-40039:       typedef typename _Base::const_iterator const_iterator;
-40039:       typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
-40039:       typedef std::reverse_iterator<iterator> reverse_iterator;
-40039:       typedef size_t size_type;
-40039:       typedef ptrdiff_t difference_type;
-40039:       typedef _Alloc allocator_type;
-40039: 
-40039:     protected:
-40039:       static size_t _S_buffer_size() noexcept
-40039:       { return __deque_buf_size(sizeof(_Tp)); }
-40039: 
-40039: 
-40039:       using _Base::_M_initialize_map;
-40039:       using _Base::_M_create_nodes;
-40039:       using _Base::_M_destroy_nodes;
-40039:       using _Base::_M_allocate_node;
-40039:       using _Base::_M_deallocate_node;
-40039:       using _Base::_M_allocate_map;
-40039:       using _Base::_M_deallocate_map;
-40039:       using _Base::_M_get_Tp_allocator;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       using _Base::_M_impl;
-40039: 
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       deque() : _Base() { }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       explicit
-40039:       deque(const allocator_type& __a)
-40039:       : _Base(__a, 0) { }
-40039: # 917 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       explicit
-40039:       deque(size_type __n, const allocator_type& __a = allocator_type())
-40039:       : _Base(__a, __n)
-40039:       { _M_default_initialize(); }
-40039: # 930 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       deque(size_type __n, const value_type& __value,
-40039:      const allocator_type& __a = allocator_type())
-40039:       : _Base(__a, __n)
-40039:       { _M_fill_initialize(__value); }
-40039: # 957 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       deque(const deque& __x)
-40039:       : _Base(_Alloc_traits::_S_select_on_copy(__x._M_get_Tp_allocator()),
-40039:        __x.size())
-40039:       { std::__uninitialized_copy_a(__x.begin(), __x.end(),
-40039:         this->_M_impl._M_start,
-40039:         _M_get_Tp_allocator()); }
-40039: # 972 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       deque(deque&& __x)
-40039:       : _Base(std::move(__x)) { }
-40039: 
-40039: 
-40039:       deque(const deque& __x, const allocator_type& __a)
-40039:       : _Base(__a, __x.size())
-40039:       { std::__uninitialized_copy_a(__x.begin(), __x.end(),
-40039:         this->_M_impl._M_start,
-40039:         _M_get_Tp_allocator()); }
-40039: 
-40039: 
-40039:       deque(deque&& __x, const allocator_type& __a)
-40039:       : _Base(std::move(__x), __a, __x.size())
-40039:       {
-40039:  if (__x.get_allocator() != __a)
-40039:    {
-40039:      std::__uninitialized_move_a(__x.begin(), __x.end(),
-40039:      this->_M_impl._M_start,
-40039:      _M_get_Tp_allocator());
-40039:      __x.clear();
-40039:    }
-40039:       }
-40039: # 1006 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       deque(initializer_list<value_type> __l,
-40039:      const allocator_type& __a = allocator_type())
-40039:       : _Base(__a)
-40039:       {
-40039:  _M_range_initialize(__l.begin(), __l.end(),
-40039:        random_access_iterator_tag());
-40039:       }
-40039: # 1031 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       template<typename _InputIterator,
-40039:         typename = std::_RequireInputIter<_InputIterator>>
-40039:  deque(_InputIterator __first, _InputIterator __last,
-40039:        const allocator_type& __a = allocator_type())
-40039:  : _Base(__a)
-40039:  { _M_initialize_dispatch(__first, __last, __false_type()); }
-40039: # 1054 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       ~deque()
-40039:       { _M_destroy_data(begin(), end(), _M_get_Tp_allocator()); }
-40039: # 1066 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       deque&
-40039:       operator=(const deque& __x);
-40039: # 1078 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       deque&
-40039:       operator=(deque&& __x) noexcept(_Alloc_traits::_S_always_equal())
-40039:       {
-40039:  using __always_equal = typename _Alloc_traits::is_always_equal;
-40039:  _M_move_assign1(std::move(__x), __always_equal{});
-40039:  return *this;
-40039:       }
-40039: # 1097 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       deque&
-40039:       operator=(initializer_list<value_type> __l)
-40039:       {
-40039:  _M_assign_aux(__l.begin(), __l.end(),
-40039:         random_access_iterator_tag());
-40039:  return *this;
-40039:       }
-40039: # 1116 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       void
-40039:       assign(size_type __n, const value_type& __val)
-40039:       { _M_fill_assign(__n, __val); }
-40039: # 1133 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       template<typename _InputIterator,
-40039:         typename = std::_RequireInputIter<_InputIterator>>
-40039:  void
-40039:  assign(_InputIterator __first, _InputIterator __last)
-40039:  { _M_assign_dispatch(__first, __last, __false_type()); }
-40039: # 1160 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       void
-40039:       assign(initializer_list<value_type> __l)
-40039:       { _M_assign_aux(__l.begin(), __l.end(), random_access_iterator_tag()); }
-40039: 
-40039: 
-40039: 
-40039:       allocator_type
-40039:       get_allocator() const noexcept
-40039:       { return _Base::get_allocator(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       begin() noexcept
-40039:       { return this->_M_impl._M_start; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       begin() const noexcept
-40039:       { return this->_M_impl._M_start; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       end() noexcept
-40039:       { return this->_M_impl._M_finish; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       end() const noexcept
-40039:       { return this->_M_impl._M_finish; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       rbegin() noexcept
-40039:       { return reverse_iterator(this->_M_impl._M_finish); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       rbegin() const noexcept
-40039:       { return const_reverse_iterator(this->_M_impl._M_finish); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       rend() noexcept
-40039:       { return reverse_iterator(this->_M_impl._M_start); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       rend() const noexcept
-40039:       { return const_reverse_iterator(this->_M_impl._M_start); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       cbegin() const noexcept
-40039:       { return this->_M_impl._M_start; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       cend() const noexcept
-40039:       { return this->_M_impl._M_finish; }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       crbegin() const noexcept
-40039:       { return const_reverse_iterator(this->_M_impl._M_finish); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       crend() const noexcept
-40039:       { return const_reverse_iterator(this->_M_impl._M_start); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       size_type
-40039:       size() const noexcept
-40039:       { return this->_M_impl._M_finish - this->_M_impl._M_start; }
-40039: 
-40039: 
-40039:       size_type
-40039:       max_size() const noexcept
-40039:       { return _Alloc_traits::max_size(_M_get_Tp_allocator()); }
-40039: # 1299 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       void
-40039:       resize(size_type __new_size)
-40039:       {
-40039:  const size_type __len = size();
-40039:  if (__new_size > __len)
-40039:    _M_default_append(__new_size - __len);
-40039:  else if (__new_size < __len)
-40039:    _M_erase_at_end(this->_M_impl._M_start
-40039:      + difference_type(__new_size));
-40039:       }
-40039: # 1321 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       void
-40039:       resize(size_type __new_size, const value_type& __x)
-40039:       {
-40039:  const size_type __len = size();
-40039:  if (__new_size > __len)
-40039:    _M_fill_insert(this->_M_impl._M_finish, __new_size - __len, __x);
-40039:  else if (__new_size < __len)
-40039:    _M_erase_at_end(this->_M_impl._M_start
-40039:      + difference_type(__new_size));
-40039:       }
-40039: # 1357 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       void
-40039:       shrink_to_fit() noexcept
-40039:       { _M_shrink_to_fit(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       bool
-40039:       empty() const noexcept
-40039:       { return this->_M_impl._M_finish == this->_M_impl._M_start; }
-40039: # 1382 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       reference
-40039:       operator[](size_type __n) noexcept
-40039:       {
-40039:  ;
-40039:  return this->_M_impl._M_start[difference_type(__n)];
-40039:       }
-40039: # 1400 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       const_reference
-40039:       operator[](size_type __n) const noexcept
-40039:       {
-40039:  ;
-40039:  return this->_M_impl._M_start[difference_type(__n)];
-40039:       }
-40039: 
-40039:     protected:
-40039: 
-40039:       void
-40039:       _M_range_check(size_type __n) const
-40039:       {
-40039:  if (__n >= this->size())
-40039:    __throw_out_of_range_fmt(("deque::_M_range_check: __n " "(which is %zu)>= this->size() " "(which is %zu)")
-40039: 
-40039:                             ,
-40039:        __n, this->size());
-40039:       }
-40039: 
-40039:     public:
-40039: # 1431 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       reference
-40039:       at(size_type __n)
-40039:       {
-40039:  _M_range_check(__n);
-40039:  return (*this)[__n];
-40039:       }
-40039: # 1449 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       const_reference
-40039:       at(size_type __n) const
-40039:       {
-40039:  _M_range_check(__n);
-40039:  return (*this)[__n];
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reference
-40039:       front() noexcept
-40039:       {
-40039:  ;
-40039:  return *begin();
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reference
-40039:       front() const noexcept
-40039:       {
-40039:  ;
-40039:  return *begin();
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reference
-40039:       back() noexcept
-40039:       {
-40039:  ;
-40039:  iterator __tmp = end();
-40039:  --__tmp;
-40039:  return *__tmp;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reference
-40039:       back() const noexcept
-40039:       {
-40039:  ;
-40039:  const_iterator __tmp = end();
-40039:  --__tmp;
-40039:  return *__tmp;
-40039:       }
-40039: # 1514 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       void
-40039:       push_front(const value_type& __x)
-40039:       {
-40039:  if (this->_M_impl._M_start._M_cur != this->_M_impl._M_start._M_first)
-40039:    {
-40039:      _Alloc_traits::construct(this->_M_impl,
-40039:          this->_M_impl._M_start._M_cur - 1,
-40039:          __x);
-40039:      --this->_M_impl._M_start._M_cur;
-40039:    }
-40039:  else
-40039:    _M_push_front_aux(__x);
-40039:       }
-40039: 
-40039: 
-40039:       void
-40039:       push_front(value_type&& __x)
-40039:       { emplace_front(std::move(__x)); }
-40039: 
-40039:       template<typename... _Args>
-40039: 
-40039: 
-40039: 
-40039:  void
-40039: 
-40039:  emplace_front(_Args&&... __args);
-40039: # 1551 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       void
-40039:       push_back(const value_type& __x)
-40039:       {
-40039:  if (this->_M_impl._M_finish._M_cur
-40039:      != this->_M_impl._M_finish._M_last - 1)
-40039:    {
-40039:      _Alloc_traits::construct(this->_M_impl,
-40039:          this->_M_impl._M_finish._M_cur, __x);
-40039:      ++this->_M_impl._M_finish._M_cur;
-40039:    }
-40039:  else
-40039:    _M_push_back_aux(__x);
-40039:       }
-40039: 
-40039: 
-40039:       void
-40039:       push_back(value_type&& __x)
-40039:       { emplace_back(std::move(__x)); }
-40039: 
-40039:       template<typename... _Args>
-40039: 
-40039: 
-40039: 
-40039:  void
-40039: 
-40039:  emplace_back(_Args&&... __args);
-40039: # 1587 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       void
-40039:       pop_front() noexcept
-40039:       {
-40039:  ;
-40039:  if (this->_M_impl._M_start._M_cur
-40039:      != this->_M_impl._M_start._M_last - 1)
-40039:    {
-40039:      _Alloc_traits::destroy(this->_M_impl,
-40039:        this->_M_impl._M_start._M_cur);
-40039:      ++this->_M_impl._M_start._M_cur;
-40039:    }
-40039:  else
-40039:    _M_pop_front_aux();
-40039:       }
-40039: # 1610 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       void
-40039:       pop_back() noexcept
-40039:       {
-40039:  ;
-40039:  if (this->_M_impl._M_finish._M_cur
-40039:      != this->_M_impl._M_finish._M_first)
-40039:    {
-40039:      --this->_M_impl._M_finish._M_cur;
-40039:      _Alloc_traits::destroy(this->_M_impl,
-40039:        this->_M_impl._M_finish._M_cur);
-40039:    }
-40039:  else
-40039:    _M_pop_back_aux();
-40039:       }
-40039: # 1635 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       template<typename... _Args>
-40039:  iterator
-40039:  emplace(const_iterator __position, _Args&&... __args);
-40039: # 1648 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       iterator
-40039:       insert(const_iterator __position, const value_type& __x);
-40039: # 1674 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       iterator
-40039:       insert(const_iterator __position, value_type&& __x)
-40039:       { return emplace(__position, std::move(__x)); }
-40039: # 1687 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       iterator
-40039:       insert(const_iterator __p, initializer_list<value_type> __l)
-40039:       {
-40039:  auto __offset = __p - cbegin();
-40039:  _M_range_insert_aux(__p._M_const_cast(), __l.begin(), __l.end(),
-40039:        std::random_access_iterator_tag());
-40039:  return begin() + __offset;
-40039:       }
-40039: # 1708 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       iterator
-40039:       insert(const_iterator __position, size_type __n, const value_type& __x)
-40039:       {
-40039:  difference_type __offset = __position - cbegin();
-40039:  _M_fill_insert(__position._M_const_cast(), __n, __x);
-40039:  return begin() + __offset;
-40039:       }
-40039: # 1742 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       template<typename _InputIterator,
-40039:         typename = std::_RequireInputIter<_InputIterator>>
-40039:  iterator
-40039:  insert(const_iterator __position, _InputIterator __first,
-40039:         _InputIterator __last)
-40039:  {
-40039:    difference_type __offset = __position - cbegin();
-40039:    _M_insert_dispatch(__position._M_const_cast(),
-40039:         __first, __last, __false_type());
-40039:    return begin() + __offset;
-40039:  }
-40039: # 1788 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       iterator
-40039: 
-40039:       erase(const_iterator __position)
-40039: 
-40039: 
-40039: 
-40039:       { return _M_erase(__position._M_const_cast()); }
-40039: # 1812 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       iterator
-40039: 
-40039:       erase(const_iterator __first, const_iterator __last)
-40039: 
-40039: 
-40039: 
-40039:       { return _M_erase(__first._M_const_cast(), __last._M_const_cast()); }
-40039: # 1831 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       void
-40039:       swap(deque& __x) noexcept
-40039:       {
-40039: 
-40039: 
-40039:                                                           ;
-40039: 
-40039:  _M_impl._M_swap_data(__x._M_impl);
-40039:  _Alloc_traits::_S_on_swap(_M_get_Tp_allocator(),
-40039:       __x._M_get_Tp_allocator());
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       clear() noexcept
-40039:       { _M_erase_at_end(begin()); }
-40039: 
-40039:     protected:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Integer>
-40039:  void
-40039:  _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type)
-40039:  {
-40039:    _M_initialize_map(static_cast<size_type>(__n));
-40039:    _M_fill_initialize(__x);
-40039:  }
-40039: 
-40039: 
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
-40039:           __false_type)
-40039:  {
-40039:    _M_range_initialize(__first, __last,
-40039:          std::__iterator_category(__first));
-40039:  }
-40039: # 1890 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  _M_range_initialize(_InputIterator __first, _InputIterator __last,
-40039:        std::input_iterator_tag);
-40039: 
-40039: 
-40039:       template<typename _ForwardIterator>
-40039:  void
-40039:  _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last,
-40039:        std::forward_iterator_tag);
-40039: # 1912 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       void
-40039:       _M_fill_initialize(const value_type& __value);
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_default_initialize();
-40039: # 1928 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       template<typename _Integer>
-40039:  void
-40039:  _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
-40039:  { _M_fill_assign(__n, __val); }
-40039: 
-40039: 
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  _M_assign_dispatch(_InputIterator __first, _InputIterator __last,
-40039:       __false_type)
-40039:  { _M_assign_aux(__first, __last, std::__iterator_category(__first)); }
-40039: 
-40039: 
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  _M_assign_aux(_InputIterator __first, _InputIterator __last,
-40039:         std::input_iterator_tag);
-40039: 
-40039: 
-40039:       template<typename _ForwardIterator>
-40039:  void
-40039:  _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
-40039:         std::forward_iterator_tag)
-40039:  {
-40039:    const size_type __len = std::distance(__first, __last);
-40039:    if (__len > size())
-40039:      {
-40039:        _ForwardIterator __mid = __first;
-40039:        std::advance(__mid, size());
-40039:        std::copy(__first, __mid, begin());
-40039:        _M_range_insert_aux(end(), __mid, __last,
-40039:       std::__iterator_category(__first));
-40039:      }
-40039:    else
-40039:      _M_erase_at_end(std::copy(__first, __last, begin()));
-40039:  }
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_fill_assign(size_type __n, const value_type& __val)
-40039:       {
-40039:  if (__n > size())
-40039:    {
-40039:      std::fill(begin(), end(), __val);
-40039:      _M_fill_insert(end(), __n - size(), __val);
-40039:    }
-40039:  else
-40039:    {
-40039:      _M_erase_at_end(begin() + difference_type(__n));
-40039:      std::fill(begin(), end(), __val);
-40039:    }
-40039:       }
-40039: # 1989 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       template<typename... _Args>
-40039:  void _M_push_back_aux(_Args&&... __args);
-40039: 
-40039:       template<typename... _Args>
-40039:  void _M_push_front_aux(_Args&&... __args);
-40039: 
-40039: 
-40039:       void _M_pop_back_aux();
-40039: 
-40039:       void _M_pop_front_aux();
-40039: # 2008 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       template<typename _Integer>
-40039:  void
-40039:  _M_insert_dispatch(iterator __pos,
-40039:       _Integer __n, _Integer __x, __true_type)
-40039:  { _M_fill_insert(__pos, __n, __x); }
-40039: 
-40039: 
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  _M_insert_dispatch(iterator __pos,
-40039:       _InputIterator __first, _InputIterator __last,
-40039:       __false_type)
-40039:  {
-40039:    _M_range_insert_aux(__pos, __first, __last,
-40039:          std::__iterator_category(__first));
-40039:  }
-40039: 
-40039: 
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  _M_range_insert_aux(iterator __pos, _InputIterator __first,
-40039:        _InputIterator __last, std::input_iterator_tag);
-40039: 
-40039: 
-40039:       template<typename _ForwardIterator>
-40039:  void
-40039:  _M_range_insert_aux(iterator __pos, _ForwardIterator __first,
-40039:        _ForwardIterator __last, std::forward_iterator_tag);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_fill_insert(iterator __pos, size_type __n, const value_type& __x);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       template<typename... _Args>
-40039:  iterator
-40039:  _M_insert_aux(iterator __pos, _Args&&... __args);
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_insert_aux(iterator __pos, size_type __n, const value_type& __x);
-40039: 
-40039: 
-40039:       template<typename _ForwardIterator>
-40039:  void
-40039:  _M_insert_aux(iterator __pos,
-40039:         _ForwardIterator __first, _ForwardIterator __last,
-40039:         size_type __n);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_destroy_data_aux(iterator __first, iterator __last);
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Alloc1>
-40039:  void
-40039:  _M_destroy_data(iterator __first, iterator __last, const _Alloc1&)
-40039:  { _M_destroy_data_aux(__first, __last); }
-40039: 
-40039:       void
-40039:       _M_destroy_data(iterator __first, iterator __last,
-40039:         const std::allocator<_Tp>&)
-40039:       {
-40039:  if (!__has_trivial_destructor(value_type))
-40039:    _M_destroy_data_aux(__first, __last);
-40039:       }
-40039: 
-40039: 
-40039:       void
-40039:       _M_erase_at_begin(iterator __pos)
-40039:       {
-40039:  _M_destroy_data(begin(), __pos, _M_get_Tp_allocator());
-40039:  _M_destroy_nodes(this->_M_impl._M_start._M_node, __pos._M_node);
-40039:  this->_M_impl._M_start = __pos;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_erase_at_end(iterator __pos)
-40039:       {
-40039:  _M_destroy_data(__pos, end(), _M_get_Tp_allocator());
-40039:  _M_destroy_nodes(__pos._M_node + 1,
-40039:     this->_M_impl._M_finish._M_node + 1);
-40039:  this->_M_impl._M_finish = __pos;
-40039:       }
-40039: 
-40039:       iterator
-40039:       _M_erase(iterator __pos);
-40039: 
-40039:       iterator
-40039:       _M_erase(iterator __first, iterator __last);
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_default_append(size_type __n);
-40039: 
-40039:       bool
-40039:       _M_shrink_to_fit();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       _M_reserve_elements_at_front(size_type __n)
-40039:       {
-40039:  const size_type __vacancies = this->_M_impl._M_start._M_cur
-40039:           - this->_M_impl._M_start._M_first;
-40039:  if (__n > __vacancies)
-40039:    _M_new_elements_at_front(__n - __vacancies);
-40039:  return this->_M_impl._M_start - difference_type(__n);
-40039:       }
-40039: 
-40039:       iterator
-40039:       _M_reserve_elements_at_back(size_type __n)
-40039:       {
-40039:  const size_type __vacancies = (this->_M_impl._M_finish._M_last
-40039:            - this->_M_impl._M_finish._M_cur) - 1;
-40039:  if (__n > __vacancies)
-40039:    _M_new_elements_at_back(__n - __vacancies);
-40039:  return this->_M_impl._M_finish + difference_type(__n);
-40039:       }
-40039: 
-40039:       void
-40039:       _M_new_elements_at_front(size_type __new_elements);
-40039: 
-40039:       void
-40039:       _M_new_elements_at_back(size_type __new_elements);
-40039: # 2158 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:       void
-40039:       _M_reserve_map_at_back(size_type __nodes_to_add = 1)
-40039:       {
-40039:  if (__nodes_to_add + 1 > this->_M_impl._M_map_size
-40039:      - (this->_M_impl._M_finish._M_node - this->_M_impl._M_map))
-40039:    _M_reallocate_map(__nodes_to_add, false);
-40039:       }
-40039: 
-40039:       void
-40039:       _M_reserve_map_at_front(size_type __nodes_to_add = 1)
-40039:       {
-40039:  if (__nodes_to_add > size_type(this->_M_impl._M_start._M_node
-40039:            - this->_M_impl._M_map))
-40039:    _M_reallocate_map(__nodes_to_add, true);
-40039:       }
-40039: 
-40039:       void
-40039:       _M_reallocate_map(size_type __nodes_to_add, bool __add_at_front);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_move_assign1(deque&& __x, true_type) noexcept
-40039:       {
-40039:  this->_M_impl._M_swap_data(__x._M_impl);
-40039:  __x.clear();
-40039:  std::__alloc_on_move(_M_get_Tp_allocator(), __x._M_get_Tp_allocator());
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_move_assign1(deque&& __x, false_type)
-40039:       {
-40039:  constexpr bool __move_storage =
-40039:    _Alloc_traits::_S_propagate_on_move_assign();
-40039:  _M_move_assign2(std::move(__x), __bool_constant<__move_storage>());
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       template<typename... _Args>
-40039:       void
-40039:       _M_replace_map(_Args&&... __args)
-40039:       {
-40039: 
-40039:  deque __newobj(std::forward<_Args>(__args)...);
-40039: 
-40039:  clear();
-40039:  _M_deallocate_node(*begin()._M_node);
-40039:  _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size);
-40039:  this->_M_impl._M_map = nullptr;
-40039:  this->_M_impl._M_map_size = 0;
-40039: 
-40039:  this->_M_impl._M_swap_data(__newobj._M_impl);
-40039:       }
-40039: 
-40039: 
-40039:       void
-40039:       _M_move_assign2(deque&& __x, true_type)
-40039:       {
-40039: 
-40039:  auto __alloc = __x._M_get_Tp_allocator();
-40039: 
-40039: 
-40039:  _M_replace_map(std::move(__x));
-40039: 
-40039:  _M_get_Tp_allocator() = std::move(__alloc);
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_move_assign2(deque&& __x, false_type)
-40039:       {
-40039:  if (__x._M_get_Tp_allocator() == this->_M_get_Tp_allocator())
-40039:    {
-40039: 
-40039: 
-40039:      _M_replace_map(std::move(__x), __x.get_allocator());
-40039:    }
-40039:  else
-40039:    {
-40039: 
-40039: 
-40039:      _M_assign_aux(std::__make_move_if_noexcept_iterator(__x.begin()),
-40039:      std::__make_move_if_noexcept_iterator(__x.end()),
-40039:      std::random_access_iterator_tag());
-40039:      __x.clear();
-40039:    }
-40039:       }
-40039: 
-40039:     };
-40039: # 2275 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:   template<typename _Tp, typename _Alloc>
-40039:     inline bool
-40039:     operator==(const deque<_Tp, _Alloc>& __x,
-40039:                          const deque<_Tp, _Alloc>& __y)
-40039:     { return __x.size() == __y.size()
-40039:       && std::equal(__x.begin(), __x.end(), __y.begin()); }
-40039: # 2293 "/usr/include/c++/8/bits/stl_deque.h" 3
-40039:   template<typename _Tp, typename _Alloc>
-40039:     inline bool
-40039:     operator<(const deque<_Tp, _Alloc>& __x,
-40039:        const deque<_Tp, _Alloc>& __y)
-40039:     { return std::lexicographical_compare(__x.begin(), __x.end(),
-40039:        __y.begin(), __y.end()); }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     inline bool
-40039:     operator!=(const deque<_Tp, _Alloc>& __x,
-40039:         const deque<_Tp, _Alloc>& __y)
-40039:     { return !(__x == __y); }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     inline bool
-40039:     operator>(const deque<_Tp, _Alloc>& __x,
-40039:        const deque<_Tp, _Alloc>& __y)
-40039:     { return __y < __x; }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     inline bool
-40039:     operator<=(const deque<_Tp, _Alloc>& __x,
-40039:         const deque<_Tp, _Alloc>& __y)
-40039:     { return !(__y < __x); }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     inline bool
-40039:     operator>=(const deque<_Tp, _Alloc>& __x,
-40039:         const deque<_Tp, _Alloc>& __y)
-40039:     { return !(__x < __y); }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     inline void
-40039:     swap(deque<_Tp,_Alloc>& __x, deque<_Tp,_Alloc>& __y)
-40039:     noexcept(noexcept(__x.swap(__y)))
-40039:     { __x.swap(__y); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 65 "/usr/include/c++/8/deque" 2 3
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/deque.tcc" 1 3
-40039: # 59 "/usr/include/c++/8/bits/deque.tcc" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename _Tp, typename _Alloc>
-40039:     void
-40039:     deque<_Tp, _Alloc>::
-40039:     _M_default_initialize()
-40039:     {
-40039:       _Map_pointer __cur;
-40039:       try
-40039:         {
-40039:           for (__cur = this->_M_impl._M_start._M_node;
-40039:         __cur < this->_M_impl._M_finish._M_node;
-40039:         ++__cur)
-40039:             std::__uninitialized_default_a(*__cur, *__cur + _S_buffer_size(),
-40039:         _M_get_Tp_allocator());
-40039:           std::__uninitialized_default_a(this->_M_impl._M_finish._M_first,
-40039:       this->_M_impl._M_finish._M_cur,
-40039:       _M_get_Tp_allocator());
-40039:         }
-40039:       catch(...)
-40039:         {
-40039:           std::_Destroy(this->_M_impl._M_start, iterator(*__cur, __cur),
-40039:    _M_get_Tp_allocator());
-40039:           throw;
-40039:         }
-40039:     }
-40039: 
-40039: 
-40039:   template <typename _Tp, typename _Alloc>
-40039:     deque<_Tp, _Alloc>&
-40039:     deque<_Tp, _Alloc>::
-40039:     operator=(const deque& __x)
-40039:     {
-40039:       if (&__x != this)
-40039:  {
-40039: 
-40039:    if (_Alloc_traits::_S_propagate_on_copy_assign())
-40039:      {
-40039:        if (!_Alloc_traits::_S_always_equal()
-40039:            && _M_get_Tp_allocator() != __x._M_get_Tp_allocator())
-40039:          {
-40039: 
-40039: 
-40039:     _M_replace_map(__x, __x.get_allocator());
-40039:     std::__alloc_on_copy(_M_get_Tp_allocator(),
-40039:            __x._M_get_Tp_allocator());
-40039:     return *this;
-40039:   }
-40039:        std::__alloc_on_copy(_M_get_Tp_allocator(),
-40039:        __x._M_get_Tp_allocator());
-40039:      }
-40039: 
-40039:    const size_type __len = size();
-40039:    if (__len >= __x.size())
-40039:      _M_erase_at_end(std::copy(__x.begin(), __x.end(),
-40039:           this->_M_impl._M_start));
-40039:    else
-40039:      {
-40039:        const_iterator __mid = __x.begin() + difference_type(__len);
-40039:        std::copy(__x.begin(), __mid, this->_M_impl._M_start);
-40039:        _M_range_insert_aux(this->_M_impl._M_finish, __mid, __x.end(),
-40039:       std::random_access_iterator_tag());
-40039:      }
-40039:  }
-40039:       return *this;
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     template<typename... _Args>
-40039: 
-40039: 
-40039: 
-40039:       void
-40039: 
-40039:       deque<_Tp, _Alloc>::
-40039:       emplace_front(_Args&&... __args)
-40039:       {
-40039:  if (this->_M_impl._M_start._M_cur != this->_M_impl._M_start._M_first)
-40039:    {
-40039:      _Alloc_traits::construct(this->_M_impl,
-40039:                               this->_M_impl._M_start._M_cur - 1,
-40039:                 std::forward<_Args>(__args)...);
-40039:      --this->_M_impl._M_start._M_cur;
-40039:    }
-40039:  else
-40039:    _M_push_front_aux(std::forward<_Args>(__args)...);
-40039: 
-40039: 
-40039: 
-40039:       }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     template<typename... _Args>
-40039: 
-40039: 
-40039: 
-40039:       void
-40039: 
-40039:       deque<_Tp, _Alloc>::
-40039:       emplace_back(_Args&&... __args)
-40039:       {
-40039:  if (this->_M_impl._M_finish._M_cur
-40039:      != this->_M_impl._M_finish._M_last - 1)
-40039:    {
-40039:      _Alloc_traits::construct(this->_M_impl,
-40039:                               this->_M_impl._M_finish._M_cur,
-40039:                 std::forward<_Args>(__args)...);
-40039:      ++this->_M_impl._M_finish._M_cur;
-40039:    }
-40039:  else
-40039:    _M_push_back_aux(std::forward<_Args>(__args)...);
-40039: 
-40039: 
-40039: 
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     template<typename... _Args>
-40039:       typename deque<_Tp, _Alloc>::iterator
-40039:       deque<_Tp, _Alloc>::
-40039:       emplace(const_iterator __position, _Args&&... __args)
-40039:       {
-40039:  if (__position._M_cur == this->_M_impl._M_start._M_cur)
-40039:    {
-40039:      emplace_front(std::forward<_Args>(__args)...);
-40039:      return this->_M_impl._M_start;
-40039:    }
-40039:  else if (__position._M_cur == this->_M_impl._M_finish._M_cur)
-40039:    {
-40039:      emplace_back(std::forward<_Args>(__args)...);
-40039:      iterator __tmp = this->_M_impl._M_finish;
-40039:      --__tmp;
-40039:      return __tmp;
-40039:    }
-40039:  else
-40039:    return _M_insert_aux(__position._M_const_cast(),
-40039:           std::forward<_Args>(__args)...);
-40039:       }
-40039: 
-40039: 
-40039:   template <typename _Tp, typename _Alloc>
-40039:     typename deque<_Tp, _Alloc>::iterator
-40039:     deque<_Tp, _Alloc>::
-40039: 
-40039:     insert(const_iterator __position, const value_type& __x)
-40039: 
-40039: 
-40039: 
-40039:     {
-40039:       if (__position._M_cur == this->_M_impl._M_start._M_cur)
-40039:  {
-40039:    push_front(__x);
-40039:    return this->_M_impl._M_start;
-40039:  }
-40039:       else if (__position._M_cur == this->_M_impl._M_finish._M_cur)
-40039:  {
-40039:    push_back(__x);
-40039:    iterator __tmp = this->_M_impl._M_finish;
-40039:    --__tmp;
-40039:    return __tmp;
-40039:  }
-40039:       else
-40039:  return _M_insert_aux(__position._M_const_cast(), __x);
-40039:    }
-40039: 
-40039:   template <typename _Tp, typename _Alloc>
-40039:     typename deque<_Tp, _Alloc>::iterator
-40039:     deque<_Tp, _Alloc>::
-40039:     _M_erase(iterator __position)
-40039:     {
-40039:       iterator __next = __position;
-40039:       ++__next;
-40039:       const difference_type __index = __position - begin();
-40039:       if (static_cast<size_type>(__index) < (size() >> 1))
-40039:  {
-40039:    if (__position != begin())
-40039:      std::move_backward(begin(), __position, __next);
-40039:    pop_front();
-40039:  }
-40039:       else
-40039:  {
-40039:    if (__next != end())
-40039:      std::move(__next, end(), __position);
-40039:    pop_back();
-40039:  }
-40039:       return begin() + __index;
-40039:     }
-40039: 
-40039:   template <typename _Tp, typename _Alloc>
-40039:     typename deque<_Tp, _Alloc>::iterator
-40039:     deque<_Tp, _Alloc>::
-40039:     _M_erase(iterator __first, iterator __last)
-40039:     {
-40039:       if (__first == __last)
-40039:  return __first;
-40039:       else if (__first == begin() && __last == end())
-40039:  {
-40039:    clear();
-40039:    return end();
-40039:  }
-40039:       else
-40039:  {
-40039:    const difference_type __n = __last - __first;
-40039:    const difference_type __elems_before = __first - begin();
-40039:    if (static_cast<size_type>(__elems_before) <= (size() - __n) / 2)
-40039:      {
-40039:        if (__first != begin())
-40039:   std::move_backward(begin(), __first, __last);
-40039:        _M_erase_at_begin(begin() + __n);
-40039:      }
-40039:    else
-40039:      {
-40039:        if (__last != end())
-40039:   std::move(__last, end(), __first);
-40039:        _M_erase_at_end(end() - __n);
-40039:      }
-40039:    return begin() + __elems_before;
-40039:  }
-40039:     }
-40039: 
-40039:   template <typename _Tp, class _Alloc>
-40039:     template <typename _InputIterator>
-40039:       void
-40039:       deque<_Tp, _Alloc>::
-40039:       _M_assign_aux(_InputIterator __first, _InputIterator __last,
-40039:       std::input_iterator_tag)
-40039:       {
-40039:         iterator __cur = begin();
-40039:         for (; __first != __last && __cur != end(); ++__cur, ++__first)
-40039:           *__cur = *__first;
-40039:         if (__first == __last)
-40039:           _M_erase_at_end(__cur);
-40039:         else
-40039:           _M_range_insert_aux(end(), __first, __last,
-40039:          std::__iterator_category(__first));
-40039:       }
-40039: 
-40039:   template <typename _Tp, typename _Alloc>
-40039:     void
-40039:     deque<_Tp, _Alloc>::
-40039:     _M_fill_insert(iterator __pos, size_type __n, const value_type& __x)
-40039:     {
-40039:       if (__pos._M_cur == this->_M_impl._M_start._M_cur)
-40039:  {
-40039:    iterator __new_start = _M_reserve_elements_at_front(__n);
-40039:    try
-40039:      {
-40039:        std::__uninitialized_fill_a(__new_start, this->_M_impl._M_start,
-40039:        __x, _M_get_Tp_allocator());
-40039:        this->_M_impl._M_start = __new_start;
-40039:      }
-40039:    catch(...)
-40039:      {
-40039:        _M_destroy_nodes(__new_start._M_node,
-40039:           this->_M_impl._M_start._M_node);
-40039:        throw;
-40039:      }
-40039:  }
-40039:       else if (__pos._M_cur == this->_M_impl._M_finish._M_cur)
-40039:  {
-40039:    iterator __new_finish = _M_reserve_elements_at_back(__n);
-40039:    try
-40039:      {
-40039:        std::__uninitialized_fill_a(this->_M_impl._M_finish,
-40039:        __new_finish, __x,
-40039:        _M_get_Tp_allocator());
-40039:        this->_M_impl._M_finish = __new_finish;
-40039:      }
-40039:    catch(...)
-40039:      {
-40039:        _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1,
-40039:           __new_finish._M_node + 1);
-40039:        throw;
-40039:      }
-40039:  }
-40039:       else
-40039:         _M_insert_aux(__pos, __n, __x);
-40039:     }
-40039: 
-40039: 
-40039:   template <typename _Tp, typename _Alloc>
-40039:     void
-40039:     deque<_Tp, _Alloc>::
-40039:     _M_default_append(size_type __n)
-40039:     {
-40039:       if (__n)
-40039:  {
-40039:    iterator __new_finish = _M_reserve_elements_at_back(__n);
-40039:    try
-40039:      {
-40039:        std::__uninitialized_default_a(this->_M_impl._M_finish,
-40039:           __new_finish,
-40039:           _M_get_Tp_allocator());
-40039:        this->_M_impl._M_finish = __new_finish;
-40039:      }
-40039:    catch(...)
-40039:      {
-40039:        _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1,
-40039:           __new_finish._M_node + 1);
-40039:        throw;
-40039:      }
-40039:  }
-40039:     }
-40039: 
-40039:   template <typename _Tp, typename _Alloc>
-40039:     bool
-40039:     deque<_Tp, _Alloc>::
-40039:     _M_shrink_to_fit()
-40039:     {
-40039:       const difference_type __front_capacity
-40039:  = (this->_M_impl._M_start._M_cur - this->_M_impl._M_start._M_first);
-40039:       if (__front_capacity == 0)
-40039:  return false;
-40039: 
-40039:       const difference_type __back_capacity
-40039:  = (this->_M_impl._M_finish._M_last - this->_M_impl._M_finish._M_cur);
-40039:       if (__front_capacity + __back_capacity < _S_buffer_size())
-40039:  return false;
-40039: 
-40039:       return std::__shrink_to_fit_aux<deque>::_S_do_it(*this);
-40039:     }
-40039: 
-40039: 
-40039:   template <typename _Tp, typename _Alloc>
-40039:     void
-40039:     deque<_Tp, _Alloc>::
-40039:     _M_fill_initialize(const value_type& __value)
-40039:     {
-40039:       _Map_pointer __cur;
-40039:       try
-40039:         {
-40039:           for (__cur = this->_M_impl._M_start._M_node;
-40039:         __cur < this->_M_impl._M_finish._M_node;
-40039:         ++__cur)
-40039:             std::__uninitialized_fill_a(*__cur, *__cur + _S_buffer_size(),
-40039:      __value, _M_get_Tp_allocator());
-40039:           std::__uninitialized_fill_a(this->_M_impl._M_finish._M_first,
-40039:           this->_M_impl._M_finish._M_cur,
-40039:           __value, _M_get_Tp_allocator());
-40039:         }
-40039:       catch(...)
-40039:         {
-40039:           std::_Destroy(this->_M_impl._M_start, iterator(*__cur, __cur),
-40039:    _M_get_Tp_allocator());
-40039:           throw;
-40039:         }
-40039:     }
-40039: 
-40039:   template <typename _Tp, typename _Alloc>
-40039:     template <typename _InputIterator>
-40039:       void
-40039:       deque<_Tp, _Alloc>::
-40039:       _M_range_initialize(_InputIterator __first, _InputIterator __last,
-40039:                           std::input_iterator_tag)
-40039:       {
-40039:         this->_M_initialize_map(0);
-40039:         try
-40039:           {
-40039:             for (; __first != __last; ++__first)
-40039: 
-40039:        emplace_back(*__first);
-40039: 
-40039: 
-40039: 
-40039:           }
-40039:         catch(...)
-40039:           {
-40039:             clear();
-40039:             throw;
-40039:           }
-40039:       }
-40039: 
-40039:   template <typename _Tp, typename _Alloc>
-40039:     template <typename _ForwardIterator>
-40039:       void
-40039:       deque<_Tp, _Alloc>::
-40039:       _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last,
-40039:                           std::forward_iterator_tag)
-40039:       {
-40039:         const size_type __n = std::distance(__first, __last);
-40039:         this->_M_initialize_map(__n);
-40039: 
-40039:         _Map_pointer __cur_node;
-40039:         try
-40039:           {
-40039:             for (__cur_node = this->_M_impl._M_start._M_node;
-40039:                  __cur_node < this->_M_impl._M_finish._M_node;
-40039:                  ++__cur_node)
-40039:        {
-40039:   _ForwardIterator __mid = __first;
-40039:   std::advance(__mid, _S_buffer_size());
-40039:   std::__uninitialized_copy_a(__first, __mid, *__cur_node,
-40039:          _M_get_Tp_allocator());
-40039:   __first = __mid;
-40039:        }
-40039:             std::__uninitialized_copy_a(__first, __last,
-40039:      this->_M_impl._M_finish._M_first,
-40039:      _M_get_Tp_allocator());
-40039:           }
-40039:         catch(...)
-40039:           {
-40039:             std::_Destroy(this->_M_impl._M_start,
-40039:      iterator(*__cur_node, __cur_node),
-40039:      _M_get_Tp_allocator());
-40039:             throw;
-40039:           }
-40039:       }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039: 
-40039:     template<typename... _Args>
-40039:       void
-40039:       deque<_Tp, _Alloc>::
-40039:       _M_push_back_aux(_Args&&... __args)
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       {
-40039:  _M_reserve_map_at_back();
-40039:  *(this->_M_impl._M_finish._M_node + 1) = this->_M_allocate_node();
-40039:  try
-40039:    {
-40039: 
-40039:      _Alloc_traits::construct(this->_M_impl,
-40039:                               this->_M_impl._M_finish._M_cur,
-40039:                 std::forward<_Args>(__args)...);
-40039: 
-40039: 
-40039: 
-40039:      this->_M_impl._M_finish._M_set_node(this->_M_impl._M_finish._M_node
-40039:       + 1);
-40039:      this->_M_impl._M_finish._M_cur = this->_M_impl._M_finish._M_first;
-40039:    }
-40039:  catch(...)
-40039:    {
-40039:      _M_deallocate_node(*(this->_M_impl._M_finish._M_node + 1));
-40039:      throw;
-40039:    }
-40039:       }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039: 
-40039:     template<typename... _Args>
-40039:       void
-40039:       deque<_Tp, _Alloc>::
-40039:       _M_push_front_aux(_Args&&... __args)
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       {
-40039:  _M_reserve_map_at_front();
-40039:  *(this->_M_impl._M_start._M_node - 1) = this->_M_allocate_node();
-40039:  try
-40039:    {
-40039:      this->_M_impl._M_start._M_set_node(this->_M_impl._M_start._M_node
-40039:             - 1);
-40039:      this->_M_impl._M_start._M_cur = this->_M_impl._M_start._M_last - 1;
-40039: 
-40039:      _Alloc_traits::construct(this->_M_impl,
-40039:                               this->_M_impl._M_start._M_cur,
-40039:                 std::forward<_Args>(__args)...);
-40039: 
-40039: 
-40039: 
-40039:    }
-40039:  catch(...)
-40039:    {
-40039:      ++this->_M_impl._M_start;
-40039:      _M_deallocate_node(*(this->_M_impl._M_start._M_node - 1));
-40039:      throw;
-40039:    }
-40039:       }
-40039: 
-40039: 
-40039:   template <typename _Tp, typename _Alloc>
-40039:     void deque<_Tp, _Alloc>::
-40039:     _M_pop_back_aux()
-40039:     {
-40039:       _M_deallocate_node(this->_M_impl._M_finish._M_first);
-40039:       this->_M_impl._M_finish._M_set_node(this->_M_impl._M_finish._M_node - 1);
-40039:       this->_M_impl._M_finish._M_cur = this->_M_impl._M_finish._M_last - 1;
-40039:       _Alloc_traits::destroy(_M_get_Tp_allocator(),
-40039:         this->_M_impl._M_finish._M_cur);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename _Tp, typename _Alloc>
-40039:     void deque<_Tp, _Alloc>::
-40039:     _M_pop_front_aux()
-40039:     {
-40039:       _Alloc_traits::destroy(_M_get_Tp_allocator(),
-40039:         this->_M_impl._M_start._M_cur);
-40039:       _M_deallocate_node(this->_M_impl._M_start._M_first);
-40039:       this->_M_impl._M_start._M_set_node(this->_M_impl._M_start._M_node + 1);
-40039:       this->_M_impl._M_start._M_cur = this->_M_impl._M_start._M_first;
-40039:     }
-40039: 
-40039:   template <typename _Tp, typename _Alloc>
-40039:     template <typename _InputIterator>
-40039:       void
-40039:       deque<_Tp, _Alloc>::
-40039:       _M_range_insert_aux(iterator __pos,
-40039:                           _InputIterator __first, _InputIterator __last,
-40039:                           std::input_iterator_tag)
-40039:       { std::copy(__first, __last, std::inserter(*this, __pos)); }
-40039: 
-40039:   template <typename _Tp, typename _Alloc>
-40039:     template <typename _ForwardIterator>
-40039:       void
-40039:       deque<_Tp, _Alloc>::
-40039:       _M_range_insert_aux(iterator __pos,
-40039:                           _ForwardIterator __first, _ForwardIterator __last,
-40039:                           std::forward_iterator_tag)
-40039:       {
-40039:         const size_type __n = std::distance(__first, __last);
-40039:         if (__pos._M_cur == this->_M_impl._M_start._M_cur)
-40039:    {
-40039:      iterator __new_start = _M_reserve_elements_at_front(__n);
-40039:      try
-40039:        {
-40039:   std::__uninitialized_copy_a(__first, __last, __new_start,
-40039:          _M_get_Tp_allocator());
-40039:   this->_M_impl._M_start = __new_start;
-40039:        }
-40039:      catch(...)
-40039:        {
-40039:   _M_destroy_nodes(__new_start._M_node,
-40039:      this->_M_impl._M_start._M_node);
-40039:   throw;
-40039:        }
-40039:    }
-40039:         else if (__pos._M_cur == this->_M_impl._M_finish._M_cur)
-40039:    {
-40039:      iterator __new_finish = _M_reserve_elements_at_back(__n);
-40039:      try
-40039:        {
-40039:   std::__uninitialized_copy_a(__first, __last,
-40039:          this->_M_impl._M_finish,
-40039:          _M_get_Tp_allocator());
-40039:   this->_M_impl._M_finish = __new_finish;
-40039:        }
-40039:      catch(...)
-40039:        {
-40039:   _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1,
-40039:      __new_finish._M_node + 1);
-40039:   throw;
-40039:        }
-40039:    }
-40039:         else
-40039:           _M_insert_aux(__pos, __first, __last, __n);
-40039:       }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039: 
-40039:     template<typename... _Args>
-40039:       typename deque<_Tp, _Alloc>::iterator
-40039:       deque<_Tp, _Alloc>::
-40039:       _M_insert_aux(iterator __pos, _Args&&... __args)
-40039:       {
-40039:  value_type __x_copy(std::forward<_Args>(__args)...);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  difference_type __index = __pos - this->_M_impl._M_start;
-40039:  if (static_cast<size_type>(__index) < size() / 2)
-40039:    {
-40039:      push_front(std::move(front()));
-40039:      iterator __front1 = this->_M_impl._M_start;
-40039:      ++__front1;
-40039:      iterator __front2 = __front1;
-40039:      ++__front2;
-40039:      __pos = this->_M_impl._M_start + __index;
-40039:      iterator __pos1 = __pos;
-40039:      ++__pos1;
-40039:      std::move(__front2, __pos1, __front1);
-40039:    }
-40039:  else
-40039:    {
-40039:      push_back(std::move(back()));
-40039:      iterator __back1 = this->_M_impl._M_finish;
-40039:      --__back1;
-40039:      iterator __back2 = __back1;
-40039:      --__back2;
-40039:      __pos = this->_M_impl._M_start + __index;
-40039:      std::move_backward(__pos, __back2, __back1);
-40039:    }
-40039:  *__pos = std::move(__x_copy);
-40039:  return __pos;
-40039:       }
-40039: 
-40039:   template <typename _Tp, typename _Alloc>
-40039:     void
-40039:     deque<_Tp, _Alloc>::
-40039:     _M_insert_aux(iterator __pos, size_type __n, const value_type& __x)
-40039:     {
-40039:       const difference_type __elems_before = __pos - this->_M_impl._M_start;
-40039:       const size_type __length = this->size();
-40039:       value_type __x_copy = __x;
-40039:       if (__elems_before < difference_type(__length / 2))
-40039:  {
-40039:    iterator __new_start = _M_reserve_elements_at_front(__n);
-40039:    iterator __old_start = this->_M_impl._M_start;
-40039:    __pos = this->_M_impl._M_start + __elems_before;
-40039:    try
-40039:      {
-40039:        if (__elems_before >= difference_type(__n))
-40039:   {
-40039:     iterator __start_n = (this->_M_impl._M_start
-40039:      + difference_type(__n));
-40039:     std::__uninitialized_move_a(this->_M_impl._M_start,
-40039:            __start_n, __new_start,
-40039:            _M_get_Tp_allocator());
-40039:     this->_M_impl._M_start = __new_start;
-40039:     std::move(__start_n, __pos, __old_start);
-40039:     std::fill(__pos - difference_type(__n), __pos, __x_copy);
-40039:   }
-40039:        else
-40039:   {
-40039:     std::__uninitialized_move_fill(this->_M_impl._M_start,
-40039:        __pos, __new_start,
-40039:        this->_M_impl._M_start,
-40039:        __x_copy,
-40039:        _M_get_Tp_allocator());
-40039:     this->_M_impl._M_start = __new_start;
-40039:     std::fill(__old_start, __pos, __x_copy);
-40039:   }
-40039:      }
-40039:    catch(...)
-40039:      {
-40039:        _M_destroy_nodes(__new_start._M_node,
-40039:           this->_M_impl._M_start._M_node);
-40039:        throw;
-40039:      }
-40039:  }
-40039:       else
-40039:  {
-40039:    iterator __new_finish = _M_reserve_elements_at_back(__n);
-40039:    iterator __old_finish = this->_M_impl._M_finish;
-40039:    const difference_type __elems_after =
-40039:      difference_type(__length) - __elems_before;
-40039:    __pos = this->_M_impl._M_finish - __elems_after;
-40039:    try
-40039:      {
-40039:        if (__elems_after > difference_type(__n))
-40039:   {
-40039:     iterator __finish_n = (this->_M_impl._M_finish
-40039:       - difference_type(__n));
-40039:     std::__uninitialized_move_a(__finish_n,
-40039:            this->_M_impl._M_finish,
-40039:            this->_M_impl._M_finish,
-40039:            _M_get_Tp_allocator());
-40039:     this->_M_impl._M_finish = __new_finish;
-40039:     std::move_backward(__pos, __finish_n, __old_finish);
-40039:     std::fill(__pos, __pos + difference_type(__n), __x_copy);
-40039:   }
-40039:        else
-40039:   {
-40039:     std::__uninitialized_fill_move(this->_M_impl._M_finish,
-40039:        __pos + difference_type(__n),
-40039:        __x_copy, __pos,
-40039:        this->_M_impl._M_finish,
-40039:        _M_get_Tp_allocator());
-40039:     this->_M_impl._M_finish = __new_finish;
-40039:     std::fill(__pos, __old_finish, __x_copy);
-40039:   }
-40039:      }
-40039:    catch(...)
-40039:      {
-40039:        _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1,
-40039:           __new_finish._M_node + 1);
-40039:        throw;
-40039:      }
-40039:  }
-40039:     }
-40039: 
-40039:   template <typename _Tp, typename _Alloc>
-40039:     template <typename _ForwardIterator>
-40039:       void
-40039:       deque<_Tp, _Alloc>::
-40039:       _M_insert_aux(iterator __pos,
-40039:                     _ForwardIterator __first, _ForwardIterator __last,
-40039:                     size_type __n)
-40039:       {
-40039:         const difference_type __elemsbefore = __pos - this->_M_impl._M_start;
-40039:         const size_type __length = size();
-40039:         if (static_cast<size_type>(__elemsbefore) < __length / 2)
-40039:    {
-40039:      iterator __new_start = _M_reserve_elements_at_front(__n);
-40039:      iterator __old_start = this->_M_impl._M_start;
-40039:      __pos = this->_M_impl._M_start + __elemsbefore;
-40039:      try
-40039:        {
-40039:   if (__elemsbefore >= difference_type(__n))
-40039:     {
-40039:       iterator __start_n = (this->_M_impl._M_start
-40039:        + difference_type(__n));
-40039:       std::__uninitialized_move_a(this->_M_impl._M_start,
-40039:       __start_n, __new_start,
-40039:       _M_get_Tp_allocator());
-40039:       this->_M_impl._M_start = __new_start;
-40039:       std::move(__start_n, __pos, __old_start);
-40039:       std::copy(__first, __last, __pos - difference_type(__n));
-40039:     }
-40039:   else
-40039:     {
-40039:       _ForwardIterator __mid = __first;
-40039:       std::advance(__mid, difference_type(__n) - __elemsbefore);
-40039:       std::__uninitialized_move_copy(this->_M_impl._M_start,
-40039:          __pos, __first, __mid,
-40039:          __new_start,
-40039:          _M_get_Tp_allocator());
-40039:       this->_M_impl._M_start = __new_start;
-40039:       std::copy(__mid, __last, __old_start);
-40039:     }
-40039:        }
-40039:      catch(...)
-40039:        {
-40039:   _M_destroy_nodes(__new_start._M_node,
-40039:      this->_M_impl._M_start._M_node);
-40039:   throw;
-40039:        }
-40039:    }
-40039:         else
-40039:         {
-40039:           iterator __new_finish = _M_reserve_elements_at_back(__n);
-40039:           iterator __old_finish = this->_M_impl._M_finish;
-40039:           const difference_type __elemsafter =
-40039:             difference_type(__length) - __elemsbefore;
-40039:           __pos = this->_M_impl._M_finish - __elemsafter;
-40039:           try
-40039:             {
-40039:               if (__elemsafter > difference_type(__n))
-40039:   {
-40039:     iterator __finish_n = (this->_M_impl._M_finish
-40039:       - difference_type(__n));
-40039:     std::__uninitialized_move_a(__finish_n,
-40039:            this->_M_impl._M_finish,
-40039:            this->_M_impl._M_finish,
-40039:            _M_get_Tp_allocator());
-40039:     this->_M_impl._M_finish = __new_finish;
-40039:     std::move_backward(__pos, __finish_n, __old_finish);
-40039:     std::copy(__first, __last, __pos);
-40039:   }
-40039:               else
-40039:   {
-40039:     _ForwardIterator __mid = __first;
-40039:     std::advance(__mid, __elemsafter);
-40039:     std::__uninitialized_copy_move(__mid, __last, __pos,
-40039:        this->_M_impl._M_finish,
-40039:        this->_M_impl._M_finish,
-40039:        _M_get_Tp_allocator());
-40039:     this->_M_impl._M_finish = __new_finish;
-40039:     std::copy(__first, __mid, __pos);
-40039:   }
-40039:             }
-40039:           catch(...)
-40039:             {
-40039:               _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1,
-40039:           __new_finish._M_node + 1);
-40039:               throw;
-40039:             }
-40039:         }
-40039:       }
-40039: 
-40039:    template<typename _Tp, typename _Alloc>
-40039:      void
-40039:      deque<_Tp, _Alloc>::
-40039:      _M_destroy_data_aux(iterator __first, iterator __last)
-40039:      {
-40039:        for (_Map_pointer __node = __first._M_node + 1;
-40039:      __node < __last._M_node; ++__node)
-40039:   std::_Destroy(*__node, *__node + _S_buffer_size(),
-40039:          _M_get_Tp_allocator());
-40039: 
-40039:        if (__first._M_node != __last._M_node)
-40039:   {
-40039:     std::_Destroy(__first._M_cur, __first._M_last,
-40039:     _M_get_Tp_allocator());
-40039:     std::_Destroy(__last._M_first, __last._M_cur,
-40039:     _M_get_Tp_allocator());
-40039:   }
-40039:        else
-40039:   std::_Destroy(__first._M_cur, __last._M_cur,
-40039:          _M_get_Tp_allocator());
-40039:      }
-40039: 
-40039:   template <typename _Tp, typename _Alloc>
-40039:     void
-40039:     deque<_Tp, _Alloc>::
-40039:     _M_new_elements_at_front(size_type __new_elems)
-40039:     {
-40039:       if (this->max_size() - this->size() < __new_elems)
-40039:  __throw_length_error(("deque::_M_new_elements_at_front"));
-40039: 
-40039:       const size_type __new_nodes = ((__new_elems + _S_buffer_size() - 1)
-40039:          / _S_buffer_size());
-40039:       _M_reserve_map_at_front(__new_nodes);
-40039:       size_type __i;
-40039:       try
-40039:         {
-40039:           for (__i = 1; __i <= __new_nodes; ++__i)
-40039:             *(this->_M_impl._M_start._M_node - __i) = this->_M_allocate_node();
-40039:         }
-40039:       catch(...)
-40039:         {
-40039:           for (size_type __j = 1; __j < __i; ++__j)
-40039:             _M_deallocate_node(*(this->_M_impl._M_start._M_node - __j));
-40039:           throw;
-40039:         }
-40039:     }
-40039: 
-40039:   template <typename _Tp, typename _Alloc>
-40039:     void
-40039:     deque<_Tp, _Alloc>::
-40039:     _M_new_elements_at_back(size_type __new_elems)
-40039:     {
-40039:       if (this->max_size() - this->size() < __new_elems)
-40039:  __throw_length_error(("deque::_M_new_elements_at_back"));
-40039: 
-40039:       const size_type __new_nodes = ((__new_elems + _S_buffer_size() - 1)
-40039:          / _S_buffer_size());
-40039:       _M_reserve_map_at_back(__new_nodes);
-40039:       size_type __i;
-40039:       try
-40039:         {
-40039:           for (__i = 1; __i <= __new_nodes; ++__i)
-40039:             *(this->_M_impl._M_finish._M_node + __i) = this->_M_allocate_node();
-40039:         }
-40039:       catch(...)
-40039:         {
-40039:           for (size_type __j = 1; __j < __i; ++__j)
-40039:             _M_deallocate_node(*(this->_M_impl._M_finish._M_node + __j));
-40039:           throw;
-40039:         }
-40039:     }
-40039: 
-40039:   template <typename _Tp, typename _Alloc>
-40039:     void
-40039:     deque<_Tp, _Alloc>::
-40039:     _M_reallocate_map(size_type __nodes_to_add, bool __add_at_front)
-40039:     {
-40039:       const size_type __old_num_nodes
-40039:  = this->_M_impl._M_finish._M_node - this->_M_impl._M_start._M_node + 1;
-40039:       const size_type __new_num_nodes = __old_num_nodes + __nodes_to_add;
-40039: 
-40039:       _Map_pointer __new_nstart;
-40039:       if (this->_M_impl._M_map_size > 2 * __new_num_nodes)
-40039:  {
-40039:    __new_nstart = this->_M_impl._M_map + (this->_M_impl._M_map_size
-40039:       - __new_num_nodes) / 2
-40039:                   + (__add_at_front ? __nodes_to_add : 0);
-40039:    if (__new_nstart < this->_M_impl._M_start._M_node)
-40039:      std::copy(this->_M_impl._M_start._M_node,
-40039:         this->_M_impl._M_finish._M_node + 1,
-40039:         __new_nstart);
-40039:    else
-40039:      std::copy_backward(this->_M_impl._M_start._M_node,
-40039:           this->_M_impl._M_finish._M_node + 1,
-40039:           __new_nstart + __old_num_nodes);
-40039:  }
-40039:       else
-40039:  {
-40039:    size_type __new_map_size = this->_M_impl._M_map_size
-40039:                               + std::max(this->_M_impl._M_map_size,
-40039:       __nodes_to_add) + 2;
-40039: 
-40039:    _Map_pointer __new_map = this->_M_allocate_map(__new_map_size);
-40039:    __new_nstart = __new_map + (__new_map_size - __new_num_nodes) / 2
-40039:                   + (__add_at_front ? __nodes_to_add : 0);
-40039:    std::copy(this->_M_impl._M_start._M_node,
-40039:       this->_M_impl._M_finish._M_node + 1,
-40039:       __new_nstart);
-40039:    _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size);
-40039: 
-40039:    this->_M_impl._M_map = __new_map;
-40039:    this->_M_impl._M_map_size = __new_map_size;
-40039:  }
-40039: 
-40039:       this->_M_impl._M_start._M_set_node(__new_nstart);
-40039:       this->_M_impl._M_finish._M_set_node(__new_nstart + __old_num_nodes - 1);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     void
-40039:     fill(const _Deque_iterator<_Tp, _Tp&, _Tp*>& __first,
-40039:   const _Deque_iterator<_Tp, _Tp&, _Tp*>& __last, const _Tp& __value)
-40039:     {
-40039:       typedef typename _Deque_iterator<_Tp, _Tp&, _Tp*>::_Self _Self;
-40039: 
-40039:       for (typename _Self::_Map_pointer __node = __first._M_node + 1;
-40039:            __node < __last._M_node; ++__node)
-40039:  std::fill(*__node, *__node + _Self::_S_buffer_size(), __value);
-40039: 
-40039:       if (__first._M_node != __last._M_node)
-40039:  {
-40039:    std::fill(__first._M_cur, __first._M_last, __value);
-40039:    std::fill(__last._M_first, __last._M_cur, __value);
-40039:  }
-40039:       else
-40039:  std::fill(__first._M_cur, __last._M_cur, __value);
-40039:     }
-40039: 
-40039:   template<typename _Tp>
-40039:     _Deque_iterator<_Tp, _Tp&, _Tp*>
-40039:     copy(_Deque_iterator<_Tp, const _Tp&, const _Tp*> __first,
-40039:   _Deque_iterator<_Tp, const _Tp&, const _Tp*> __last,
-40039:   _Deque_iterator<_Tp, _Tp&, _Tp*> __result)
-40039:     {
-40039:       typedef typename _Deque_iterator<_Tp, _Tp&, _Tp*>::_Self _Self;
-40039:       typedef typename _Self::difference_type difference_type;
-40039: 
-40039:       difference_type __len = __last - __first;
-40039:       while (__len > 0)
-40039:  {
-40039:    const difference_type __clen
-40039:      = std::min(__len, std::min(__first._M_last - __first._M_cur,
-40039:            __result._M_last - __result._M_cur));
-40039:    std::copy(__first._M_cur, __first._M_cur + __clen, __result._M_cur);
-40039:    __first += __clen;
-40039:    __result += __clen;
-40039:    __len -= __clen;
-40039:  }
-40039:       return __result;
-40039:     }
-40039: 
-40039:   template<typename _Tp>
-40039:     _Deque_iterator<_Tp, _Tp&, _Tp*>
-40039:     copy_backward(_Deque_iterator<_Tp, const _Tp&, const _Tp*> __first,
-40039:     _Deque_iterator<_Tp, const _Tp&, const _Tp*> __last,
-40039:     _Deque_iterator<_Tp, _Tp&, _Tp*> __result)
-40039:     {
-40039:       typedef typename _Deque_iterator<_Tp, _Tp&, _Tp*>::_Self _Self;
-40039:       typedef typename _Self::difference_type difference_type;
-40039: 
-40039:       difference_type __len = __last - __first;
-40039:       while (__len > 0)
-40039:  {
-40039:    difference_type __llen = __last._M_cur - __last._M_first;
-40039:    _Tp* __lend = __last._M_cur;
-40039: 
-40039:    difference_type __rlen = __result._M_cur - __result._M_first;
-40039:    _Tp* __rend = __result._M_cur;
-40039: 
-40039:    if (!__llen)
-40039:      {
-40039:        __llen = _Self::_S_buffer_size();
-40039:        __lend = *(__last._M_node - 1) + __llen;
-40039:      }
-40039:    if (!__rlen)
-40039:      {
-40039:        __rlen = _Self::_S_buffer_size();
-40039:        __rend = *(__result._M_node - 1) + __rlen;
-40039:      }
-40039: 
-40039:    const difference_type __clen = std::min(__len,
-40039:         std::min(__llen, __rlen));
-40039:    std::copy_backward(__lend - __clen, __lend, __rend);
-40039:    __last -= __clen;
-40039:    __result -= __clen;
-40039:    __len -= __clen;
-40039:  }
-40039:       return __result;
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     _Deque_iterator<_Tp, _Tp&, _Tp*>
-40039:     move(_Deque_iterator<_Tp, const _Tp&, const _Tp*> __first,
-40039:   _Deque_iterator<_Tp, const _Tp&, const _Tp*> __last,
-40039:   _Deque_iterator<_Tp, _Tp&, _Tp*> __result)
-40039:     {
-40039:       typedef typename _Deque_iterator<_Tp, _Tp&, _Tp*>::_Self _Self;
-40039:       typedef typename _Self::difference_type difference_type;
-40039: 
-40039:       difference_type __len = __last - __first;
-40039:       while (__len > 0)
-40039:  {
-40039:    const difference_type __clen
-40039:      = std::min(__len, std::min(__first._M_last - __first._M_cur,
-40039:            __result._M_last - __result._M_cur));
-40039:    std::move(__first._M_cur, __first._M_cur + __clen, __result._M_cur);
-40039:    __first += __clen;
-40039:    __result += __clen;
-40039:    __len -= __clen;
-40039:  }
-40039:       return __result;
-40039:     }
-40039: 
-40039:   template<typename _Tp>
-40039:     _Deque_iterator<_Tp, _Tp&, _Tp*>
-40039:     move_backward(_Deque_iterator<_Tp, const _Tp&, const _Tp*> __first,
-40039:     _Deque_iterator<_Tp, const _Tp&, const _Tp*> __last,
-40039:     _Deque_iterator<_Tp, _Tp&, _Tp*> __result)
-40039:     {
-40039:       typedef typename _Deque_iterator<_Tp, _Tp&, _Tp*>::_Self _Self;
-40039:       typedef typename _Self::difference_type difference_type;
-40039: 
-40039:       difference_type __len = __last - __first;
-40039:       while (__len > 0)
-40039:  {
-40039:    difference_type __llen = __last._M_cur - __last._M_first;
-40039:    _Tp* __lend = __last._M_cur;
-40039: 
-40039:    difference_type __rlen = __result._M_cur - __result._M_first;
-40039:    _Tp* __rend = __result._M_cur;
-40039: 
-40039:    if (!__llen)
-40039:      {
-40039:        __llen = _Self::_S_buffer_size();
-40039:        __lend = *(__last._M_node - 1) + __llen;
-40039:      }
-40039:    if (!__rlen)
-40039:      {
-40039:        __rlen = _Self::_S_buffer_size();
-40039:        __rend = *(__result._M_node - 1) + __rlen;
-40039:      }
-40039: 
-40039:    const difference_type __clen = std::min(__len,
-40039:         std::min(__llen, __rlen));
-40039:    std::move_backward(__lend - __clen, __lend, __rend);
-40039:    __last -= __clen;
-40039:    __result -= __clen;
-40039:    __len -= __clen;
-40039:  }
-40039:       return __result;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 67 "/usr/include/c++/8/deque" 2 3
-40039: # 36 "../../src/Linear_System_templates.hh" 2
-40039: 
-40039: 
-40039: # 37 "../../src/Linear_System_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Row>
-40039: dimension_type
-40039: Linear_System<Row>::num_lines_or_equalities() const {
-40039:   ((void) 0);
-40039:   const Linear_System& x = *this;
-40039:   dimension_type n = 0;
-40039:   for (dimension_type i = num_rows(); i-- > 0; ) {
-40039:     if (x[i].is_line_or_equality()) {
-40039:       ++n;
-40039:     }
-40039:   }
-40039:   return n;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_System<Row>::merge_rows_assign(const Linear_System& y) {
-40039:   ((void) 0);
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039:   Linear_System& x = *this;
-40039: 
-40039: 
-40039:   Swapping_Vector<Row> tmp;
-40039: 
-40039:   tmp.reserve(compute_capacity(x.rows.size() + y.rows.size(),
-40039:                                tmp.max_num_rows()));
-40039: 
-40039:   dimension_type xi = 0;
-40039:   const dimension_type x_num_rows = x.num_rows();
-40039:   dimension_type yi = 0;
-40039:   const dimension_type y_num_rows = y.num_rows();
-40039: 
-40039:   while (xi < x_num_rows && yi < y_num_rows) {
-40039:     const int comp = compare(x[xi], y[yi]);
-40039:     if (comp <= 0) {
-40039: 
-40039:       tmp.resize(tmp.size() + 1);
-40039:       swap(tmp.back(), x.rows[xi++]);
-40039:       tmp.back().set_representation(representation());
-40039:       if (comp == 0) {
-40039: 
-40039:         ++yi;
-40039:       }
-40039:     }
-40039:     else {
-40039: 
-40039:       tmp.resize(tmp.size() + 1);
-40039:       Row copy(y[yi++], space_dimension(), representation());
-40039:       swap(tmp.back(), copy);
-40039:     }
-40039:   }
-40039: 
-40039:   if (xi < x_num_rows) {
-40039:     while (xi < x_num_rows) {
-40039:       tmp.resize(tmp.size() + 1);
-40039:       swap(tmp.back(), x.rows[xi++]);
-40039:       tmp.back().set_representation(representation());
-40039:     }
-40039:   }
-40039:   else {
-40039:     while (yi < y_num_rows) {
-40039:       tmp.resize(tmp.size() + 1);
-40039:       Row copy(y[yi++], space_dimension(), representation());
-40039:       swap(tmp.back(), copy);
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   swap(tmp, rows);
-40039: 
-40039:   unset_pending_rows();
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_System<Row>::ascii_dump(std::ostream& s) const {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   s << "topology " << (is_necessarily_closed()
-40039:                        ? "NECESSARILY_CLOSED"
-40039:                        : "NOT_NECESSARILY_CLOSED")
-40039:     << "\n"
-40039:     << num_rows() << " x " << space_dimension() << " ";
-40039:   Parma_Polyhedra_Library::ascii_dump(s, representation());
-40039:   s << " " << (sorted ? "(sorted)" : "(not_sorted)")
-40039:     << "\n"
-40039:     << "index_first_pending " << first_pending_row()
-40039:     << "\n";
-40039:   for (dimension_type i = 0; i < rows.size(); ++i) {
-40039:     rows[i].ascii_dump(s);
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row> void Linear_System<Row>::ascii_dump() const { ascii_dump(std::cerr); } template <typename Row> void Linear_System<Row>::print() const { std::cerr << "No user level output operator defined " << "for " "Linear_System<Row>" << "." << std::endl; }
-40039: 
-40039: template <typename Row>
-40039: bool
-40039: Linear_System<Row>::ascii_load(std::istream& s) {
-40039:   std::string str;
-40039:   if (!(s >> str) || str != "topology") {
-40039:     return false;
-40039:   }
-40039:   if (!(s >> str)) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   clear();
-40039: 
-40039:   Topology t;
-40039:   if (str == "NECESSARILY_CLOSED") {
-40039:     t = NECESSARILY_CLOSED;
-40039:   }
-40039:   else {
-40039:     if (str != "NOT_NECESSARILY_CLOSED") {
-40039:       return false;
-40039:     }
-40039:     t = NOT_NECESSARILY_CLOSED;
-40039:   }
-40039: 
-40039:   set_topology(t);
-40039: 
-40039:   dimension_type nrows;
-40039:   dimension_type space_dims;
-40039:   if (!(s >> nrows)) {
-40039:     return false;
-40039:   }
-40039:   if (!(s >> str) || str != "x") {
-40039:     return false;
-40039:   }
-40039:   if (!(s >> space_dims)) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   space_dimension_ = space_dims;
-40039: 
-40039:   if (!Parma_Polyhedra_Library::ascii_load(s, representation_)) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (!(s >> str) || (str != "(sorted)" && str != "(not_sorted)")) {
-40039:     return false;
-40039:   }
-40039:   const bool sortedness = (str == "(sorted)");
-40039:   dimension_type index;
-40039:   if (!(s >> str) || str != "index_first_pending") {
-40039:     return false;
-40039:   }
-40039:   if (!(s >> index)) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   Row row;
-40039:   for (dimension_type i = 0; i < nrows; ++i) {
-40039:     if (!row.ascii_load(s)) {
-40039:       return false;
-40039:     }
-40039:     insert(row, Recycle_Input());
-40039:   }
-40039:   index_first_pending = index;
-40039:   sorted = sortedness;
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_System<Row>::insert(const Row& r) {
-40039:   Row tmp(r, representation());
-40039:   insert(tmp, Recycle_Input());
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_System<Row>::insert(Row& r, Recycle_Input) {
-40039:   insert_no_ok(r, Recycle_Input());
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_System<Row>::insert_no_ok(Row& r, Recycle_Input) {
-40039:   ((void) 0);
-40039: 
-40039:   ((void) 0);
-40039: 
-40039:   const bool was_sorted = is_sorted();
-40039: 
-40039:   insert_pending_no_ok(r, Recycle_Input());
-40039: 
-40039:   if (was_sorted) {
-40039:     const dimension_type nrows = num_rows();
-40039: 
-40039:     if (nrows > 1) {
-40039: 
-40039: 
-40039: 
-40039:       sorted = (compare(rows[nrows-2], rows[nrows-1]) <= 0);
-40039:     }
-40039:     else {
-40039: 
-40039:       sorted = true;
-40039:     }
-40039:   }
-40039: 
-40039:   unset_pending_rows();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_System<Row>::insert_pending_no_ok(Row& r, Recycle_Input) {
-40039: # 267 "../../src/Linear_System_templates.hh"
-40039:   ((void) 0);
-40039: 
-40039:   r.set_representation(representation());
-40039: 
-40039:   if (space_dimension() < r.space_dimension()) {
-40039:     set_space_dimension_no_ok(r.space_dimension());
-40039:   }
-40039:   else {
-40039:     r.set_space_dimension_no_ok(space_dimension());
-40039:   }
-40039: 
-40039:   rows.resize(rows.size() + 1);
-40039:   swap(rows.back(), r);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_System<Row>::insert_pending(const Row& r) {
-40039:   Row tmp(r, representation());
-40039:   insert_pending(tmp, Recycle_Input());
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_System<Row>::insert_pending(Row& r, Recycle_Input) {
-40039:   insert_pending_no_ok(r, Recycle_Input());
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_System<Row>::insert_pending(const Linear_System& y) {
-40039:   Linear_System tmp(y, representation(), With_Pending());
-40039:   insert_pending(tmp, Recycle_Input());
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_System<Row>::insert_pending(Linear_System& y, Recycle_Input) {
-40039:   Linear_System& x = *this;
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   for (dimension_type i = 0; i < y.num_rows(); ++i) {
-40039:     x.insert_pending(y.rows[i], Recycle_Input());
-40039:   }
-40039: 
-40039:   y.clear();
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_System<Row>::insert(const Linear_System& y) {
-40039:   Linear_System tmp(y, representation(), With_Pending());
-40039:   insert(tmp, Recycle_Input());
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_System<Row>::insert(Linear_System& y, Recycle_Input) {
-40039:   ((void) 0);
-40039: 
-40039: 
-40039:   if (y.has_no_rows()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   if (is_sorted()) {
-40039:     if (!y.is_sorted() || y.num_pending_rows() > 0) {
-40039:       sorted = false;
-40039:     }
-40039:     else {
-40039: 
-40039:       const dimension_type n_rows = num_rows();
-40039:       if (n_rows > 0) {
-40039:         sorted = (compare(rows[n_rows-1], y[0]) <= 0);
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   insert_pending(y, Recycle_Input());
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   unset_pending_rows();
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_System<Row>::remove_space_dimensions(const Variables_Set& vars) {
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (vars.empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   for (dimension_type i = 0; i < num_rows(); ) {
-40039:     const bool valid = rows[i].remove_space_dimensions(vars);
-40039:     if (!valid) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       remove_row_no_ok(i, false);
-40039:     }
-40039:     else {
-40039:       ++i;
-40039:     }
-40039:   }
-40039: 
-40039:   space_dimension_ -= vars.size();
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_System<Row>::shift_space_dimensions(Variable v, dimension_type n) {
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   for (dimension_type i = rows.size(); i-- > 0; ) {
-40039:     rows[i].shift_space_dimensions(v, n);
-40039:   }
-40039:   space_dimension_ += n;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_System<Row>::sort_rows() {
-40039: 
-40039:   sort_rows(0, first_pending_row());
-40039:   sorted = true;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_System<Row>::sort_rows(const dimension_type first_row,
-40039:                               const dimension_type last_row) {
-40039:   ((void) 0);
-40039: 
-40039:   ((void) 0)
-40039:                                                 ;
-40039: 
-40039:   const bool sorting_pending = (first_row >= first_pending_row());
-40039:   const dimension_type old_num_pending = num_pending_rows();
-40039: 
-40039:   const dimension_type num_elems = last_row - first_row;
-40039:   if (num_elems < 2) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   using namespace Implementation;
-40039:   typedef Swapping_Vector<Row> Cont;
-40039:   typedef Indirect_Sort_Compare<Cont, Row_Less_Than> Sort_Compare;
-40039:   typedef Indirect_Swapper<Cont> Swapper;
-40039:   const dimension_type num_duplicates
-40039:     = indirect_sort_and_unique(num_elems,
-40039:                                Sort_Compare(rows, first_row),
-40039:                                Unique_Compare(rows, first_row),
-40039:                                Swapper(rows, first_row));
-40039: 
-40039:   if (num_duplicates > 0) {
-40039:     typedef typename Cont::iterator Iter;
-40039:     typedef typename std::iterator_traits<Iter>::difference_type diff_t;
-40039:     Iter last = rows.begin() + static_cast<diff_t>(last_row);
-40039:     Iter first = last - + static_cast<diff_t>(num_duplicates);
-40039:     rows.erase(first, last);
-40039:   }
-40039: 
-40039:   if (sorting_pending) {
-40039:     ((void) 0);
-40039:     index_first_pending = num_rows() - (old_num_pending - num_duplicates);
-40039:   }
-40039:   else {
-40039:     index_first_pending = num_rows() - old_num_pending;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_System<Row>::strong_normalize() {
-40039:   const dimension_type nrows = rows.size();
-40039: 
-40039:   for (dimension_type i = nrows; i-- > 0; ) {
-40039:     rows[i].strong_normalize();
-40039:   }
-40039:   sorted = (nrows <= 1);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_System<Row>::sign_normalize() {
-40039:   const dimension_type nrows = rows.size();
-40039: 
-40039:   for (dimension_type i = nrows; i-- > 0; ) {
-40039:     rows[i].sign_normalize();
-40039:   }
-40039:   sorted = (nrows <= 1);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: 
-40039: template <typename Row>
-40039: bool
-40039: operator==(const Linear_System<Row>& x, const Linear_System<Row>& y) {
-40039:   if (x.space_dimension() != y.space_dimension()) {
-40039:     return false;
-40039:   }
-40039:   const dimension_type x_num_rows = x.num_rows();
-40039:   const dimension_type y_num_rows = y.num_rows();
-40039:   if (x_num_rows != y_num_rows) {
-40039:     return false;
-40039:   }
-40039:   if (x.first_pending_row() != y.first_pending_row()) {
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   for (dimension_type i = x_num_rows; i-- > 0; ) {
-40039:     if (x[i] != y[i]) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_System<Row>::sort_and_remove_with_sat(Bit_Matrix& sat) {
-40039: 
-40039:   ((void) 0);
-40039:   if (first_pending_row() <= 1) {
-40039:     set_sorted(true);
-40039:     return;
-40039:   }
-40039: 
-40039:   const dimension_type num_elems = sat.num_rows();
-40039: 
-40039: 
-40039:   typedef Swapping_Vector<Row> Cont;
-40039:   const Implementation::Indirect_Sort_Compare<Cont, Row_Less_Than>
-40039:     sort_cmp(rows);
-40039:   const Unique_Compare unique_cmp(rows);
-40039:   const Implementation::Indirect_Swapper2<Cont, Bit_Matrix> swapper(rows, sat);
-40039: 
-40039:   const dimension_type num_duplicates
-40039:     = Implementation::indirect_sort_and_unique(num_elems, sort_cmp,
-40039:                                                unique_cmp, swapper);
-40039: 
-40039:   const dimension_type new_first_pending_row
-40039:     = first_pending_row() - num_duplicates;
-40039: 
-40039:   if (num_pending_rows() > 0) {
-40039: 
-40039:     const dimension_type n_rows = num_rows() - 1;
-40039:     for (dimension_type i = 0; i < num_duplicates; ++i) {
-40039:       swap(rows[new_first_pending_row + i], rows[n_rows - i]);
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   rows.resize(rows.size() - num_duplicates);
-40039:   index_first_pending = new_first_pending_row;
-40039: 
-40039:   sat.remove_trailing_rows(num_duplicates);
-40039: 
-40039: 
-40039:   sorted = true;
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: dimension_type
-40039: Linear_System<Row>::gauss(const dimension_type n_lines_or_equalities) {
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type rank = 0;
-40039: 
-40039:   bool changed = false;
-40039: 
-40039:   const dimension_type num_cols
-40039:     = is_necessarily_closed() ? space_dimension() + 1 : space_dimension() + 2;
-40039: 
-40039: 
-40039: 
-40039:   for (dimension_type j = num_cols; j-- > 0; ) {
-40039:     for (dimension_type i = rank; i < n_lines_or_equalities; ++i) {
-40039: 
-40039: 
-40039:       if ((*this)[i].expr.get(j) == 0) {
-40039:         continue;
-40039:       }
-40039: 
-40039: 
-40039:       if (i > rank) {
-40039:         swap(rows[i], rows[rank]);
-40039: 
-40039:         changed = true;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       for (dimension_type k = i + 1; k < n_lines_or_equalities; ++k) {
-40039:         if (rows[k].expr.get(Variable(j - 1)) != 0) {
-40039:           rows[k].linear_combine(rows[rank], j);
-40039:           changed = true;
-40039:         }
-40039:       }
-40039: 
-40039:       ++rank;
-40039: 
-40039:       break;
-40039:     }
-40039:   }
-40039:   if (changed) {
-40039:     sorted = false;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   return rank;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_System<Row>
-40039: ::back_substitute(const dimension_type n_lines_or_equalities) {
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type nrows = num_rows();
-40039: 
-40039:   bool still_sorted = is_sorted();
-40039: 
-40039: 
-40039:   std::deque<bool> check_for_sortedness;
-40039:   if (still_sorted) {
-40039:     check_for_sortedness.insert(check_for_sortedness.end(), nrows, false);
-40039:   }
-40039: 
-40039:   for (dimension_type k = n_lines_or_equalities; k-- > 0; ) {
-40039: 
-40039: 
-40039: 
-40039:     Row& row_k = rows[k];
-40039:     const dimension_type j = row_k.expr.last_nonzero();
-40039: 
-40039:     ((void) 0);
-40039: 
-40039: 
-40039:     for (dimension_type i = k; i-- > 0; ) {
-40039:       Row& row_i = rows[i];
-40039:       if (row_i.expr.get(Variable(j - 1)) != 0) {
-40039: 
-40039: 
-40039:         row_i.linear_combine(row_k, j);
-40039:         if (still_sorted) {
-40039: 
-40039: 
-40039:           if (i > 0) {
-40039:             check_for_sortedness[i-1] = true;
-40039:           }
-40039:           check_for_sortedness[i] = true;
-40039:         }
-40039:       }
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     const bool have_to_negate = (row_k.expr.get(Variable(j - 1)) < 0);
-40039:     if (have_to_negate) {
-40039:       neg_assign(row_k.expr);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     for (dimension_type i = n_lines_or_equalities; i < nrows; ++i) {
-40039:       Row& row_i = rows[i];
-40039:       if (row_i.expr.get(Variable(j - 1)) != 0) {
-40039: 
-40039: 
-40039:         row_i.linear_combine(row_k, j);
-40039:         if (still_sorted) {
-40039: 
-40039: 
-40039:           if (i > n_lines_or_equalities) {
-40039:             check_for_sortedness[i-1] = true;
-40039:           }
-40039:           check_for_sortedness[i] = true;
-40039:         }
-40039:       }
-40039:     }
-40039:     if (have_to_negate) {
-40039: 
-40039:       neg_assign(row_k.expr);
-40039:     }
-40039: 
-40039:     ((void) 0);
-40039:   }
-40039: 
-40039: 
-40039:   for (dimension_type i = 0; still_sorted && i+1 < nrows; ++i) {
-40039:     if (check_for_sortedness[i]) {
-40039: 
-40039:       still_sorted = (compare((*this)[i], (*this)[i+1]) <= 0);
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   sorted = still_sorted;
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_System<Row>::simplify() {
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039:   const dimension_type old_nrows = num_rows();
-40039:   dimension_type nrows = old_nrows;
-40039:   dimension_type n_lines_or_equalities = 0;
-40039:   for (dimension_type i = 0; i < nrows; ++i) {
-40039:     if ((*this)[i].is_line_or_equality()) {
-40039:       if (n_lines_or_equalities < i) {
-40039:         swap(rows[i], rows[n_lines_or_equalities]);
-40039: 
-40039:         ((void) 0);
-40039:       }
-40039:       ++n_lines_or_equalities;
-40039:     }
-40039:   }
-40039: 
-40039:   const dimension_type rank = gauss(n_lines_or_equalities);
-40039: 
-40039:   if (rank < n_lines_or_equalities) {
-40039:     const dimension_type
-40039:       n_rays_or_points_or_inequalities = nrows - n_lines_or_equalities;
-40039:     const dimension_type
-40039:       num_swaps = std::min(n_lines_or_equalities - rank,
-40039:                            n_rays_or_points_or_inequalities);
-40039:     for (dimension_type i = num_swaps; i-- > 0; ) {
-40039:       swap(rows[--nrows], rows[rank + i]);
-40039:     }
-40039:     remove_trailing_rows(old_nrows - nrows);
-40039:     if (n_rays_or_points_or_inequalities > num_swaps) {
-40039:       set_sorted(false);
-40039:     }
-40039:     unset_pending_rows();
-40039:     n_lines_or_equalities = rank;
-40039:   }
-40039: 
-40039:   back_substitute(n_lines_or_equalities);
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_System<Row>
-40039: ::add_universe_rows_and_space_dimensions(const dimension_type n) {
-40039:   ((void) 0);
-40039:   const bool was_sorted = is_sorted();
-40039:   const dimension_type old_n_rows = num_rows();
-40039:   const dimension_type old_space_dim
-40039:     = is_necessarily_closed() ? space_dimension() : space_dimension() + 1;
-40039:   set_space_dimension(space_dimension() + n);
-40039:   rows.resize(rows.size() + n);
-40039: 
-40039:   for (dimension_type i = old_n_rows; i-- > 0; ) {
-40039:     swap(rows[i], rows[i + n]);
-40039:   }
-40039:   for (dimension_type i = n, c = old_space_dim; i-- > 0; ) {
-40039: 
-40039: 
-40039: 
-40039:     if (Variable(c).space_dimension() <= space_dimension()) {
-40039: 
-40039:       Linear_Expression le(representation());
-40039:       le.set_space_dimension(space_dimension());
-40039:       le += Variable(c);
-40039:       Row r(le, Row::LINE_OR_EQUALITY, row_topology);
-40039:       swap(r, rows[i]);
-40039:     }
-40039:     else {
-40039: 
-40039:       ((void) 0);
-40039:       Linear_Expression le(Variable(c), representation());
-40039:       Row r(le, Row::LINE_OR_EQUALITY, NECESSARILY_CLOSED);
-40039:       r.mark_as_not_necessarily_closed();
-40039:       swap(r, rows[i]);
-40039: 
-40039:     }
-40039:     ++c;
-40039:   }
-40039: 
-40039: 
-40039:   if (was_sorted) {
-40039:     sorted = (compare(rows[n-1], rows[n]) <= 0);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (!is_necessarily_closed()) {
-40039: 
-40039:     ((void) 0);
-40039:     if (!is_sorted()) {
-40039:       for (dimension_type i = n; i-- > 0; ) {
-40039:         rows[i].expr.swap_space_dimensions(Variable(old_space_dim - 1),
-40039:                                            Variable(old_space_dim - 1 + n));
-40039:         ((void) 0);
-40039:       }
-40039:     }
-40039:     else {
-40039:       dimension_type old_eps_index = old_space_dim - 1;
-40039: 
-40039: 
-40039:       for (dimension_type i = n; i-- > 0; ++old_eps_index) {
-40039:         rows[i].expr.swap_space_dimensions(Variable(old_eps_index),
-40039:                                            Variable(old_eps_index + 1));
-40039:         ((void) 0);
-40039:       }
-40039: 
-40039:       sorted = true;
-40039:     }
-40039:   }
-40039: 
-40039:   set_index_first_pending_row(index_first_pending + n);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Linear_System<Row>::sort_pending_and_remove_duplicates() {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type first_pending = first_pending_row();
-40039:   sort_rows(first_pending, num_rows());
-40039: 
-40039: 
-40039:   const dimension_type old_num_rows = num_rows();
-40039:   dimension_type num_rows = old_num_rows;
-40039: 
-40039:   dimension_type k1 = 0;
-40039:   dimension_type k2 = first_pending;
-40039:   dimension_type num_duplicates = 0;
-40039: 
-40039: 
-40039:   while (k1 < first_pending && k2 < num_rows) {
-40039:     const int cmp = compare(rows[k1], rows[k2]);
-40039:     if (cmp == 0) {
-40039: 
-40039:       ++num_duplicates;
-40039:       --num_rows;
-40039: 
-40039:       ++k1;
-40039: 
-40039:       if (k2 < num_rows) {
-40039:         swap(rows[k2], rows[k2 + num_duplicates]);
-40039:       }
-40039:     }
-40039:     else if (cmp < 0) {
-40039: 
-40039:       ++k1;
-40039:     }
-40039:     else {
-40039: 
-40039: 
-40039: 
-40039:       ++k2;
-40039:       if (num_duplicates > 0 && k2 < num_rows) {
-40039:         swap(rows[k2], rows[k2 + num_duplicates]);
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   if (num_duplicates > 0) {
-40039:     if (k2 < num_rows) {
-40039:       for (++k2; k2 < num_rows; ++k2) {
-40039:         swap(rows[k2], rows[k2 + num_duplicates]);
-40039:       }
-40039:     }
-40039:     rows.resize(num_rows);
-40039:   }
-40039:   sorted = true;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: bool
-40039: Linear_System<Row>::check_sorted() const {
-40039:   for (dimension_type i = first_pending_row(); i-- > 1; ) {
-40039:     if (compare(rows[i], rows[i-1]) < 0) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: bool
-40039: Linear_System<Row>::OK() const {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   for (dimension_type i = rows.size(); i-- > 0; ) {
-40039:     if (rows[i].representation() != representation()) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       return false;
-40039:     }
-40039:     if (rows[i].space_dimension() != space_dimension()) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       return false;
-40039:     }
-40039:   }
-40039: 
-40039:   for (dimension_type i = rows.size(); i-- > 0; ) {
-40039:     if (rows[i].topology() != topology()) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       return false;
-40039:     }
-40039: 
-40039:   }
-40039: 
-40039:   if (first_pending_row() > num_rows()) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type n_rows = num_rows();
-40039:   for (dimension_type i = 0; i < n_rows; ++i) {
-40039:     if (topology() != rows[i].topology()) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       return false;
-40039:     }
-40039: 
-40039:   }
-40039:   if (sorted && !check_sorted()) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039:   return true;
-40039: }
-40039: 
-40039: }
-40039: # 581 "../../src/Linear_System_defs.hh" 2
-40039: # 30 "../../src/Constraint_System_defs.hh" 2
-40039: # 38 "../../src/Constraint_System_defs.hh"
-40039: # 1 "/usr/include/c++/8/iterator" 1 3
-40039: # 58 "/usr/include/c++/8/iterator" 3
-40039:        
-40039: # 59 "/usr/include/c++/8/iterator" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/stream_iterator.h" 1 3
-40039: # 33 "/usr/include/c++/8/bits/stream_iterator.h" 3
-40039:        
-40039: # 34 "/usr/include/c++/8/bits/stream_iterator.h" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 37 "/usr/include/c++/8/bits/stream_iterator.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _CharT = char,
-40039:            typename _Traits = char_traits<_CharT>, typename _Dist = ptrdiff_t>
-40039:     class istream_iterator
-40039:     : public iterator<input_iterator_tag, _Tp, _Dist, const _Tp*, const _Tp&>
-40039:     {
-40039:     public:
-40039:       typedef _CharT char_type;
-40039:       typedef _Traits traits_type;
-40039:       typedef basic_istream<_CharT, _Traits> istream_type;
-40039: 
-40039:     private:
-40039:       istream_type* _M_stream;
-40039:       _Tp _M_value;
-40039:       bool _M_ok;
-40039: 
-40039:     public:
-40039: 
-40039:       constexpr istream_iterator()
-40039:       : _M_stream(0), _M_value(), _M_ok(false) {}
-40039: 
-40039: 
-40039:       istream_iterator(istream_type& __s)
-40039:       : _M_stream(std::__addressof(__s))
-40039:       { _M_read(); }
-40039: 
-40039:       istream_iterator(const istream_iterator& __obj)
-40039:       : _M_stream(__obj._M_stream), _M_value(__obj._M_value),
-40039:         _M_ok(__obj._M_ok)
-40039:       { }
-40039: 
-40039:       const _Tp&
-40039:       operator*() const
-40039:       {
-40039: 
-40039: 
-40039:                         ;
-40039:  return _M_value;
-40039:       }
-40039: 
-40039:       const _Tp*
-40039:       operator->() const { return std::__addressof((operator*())); }
-40039: 
-40039:       istream_iterator&
-40039:       operator++()
-40039:       {
-40039: 
-40039: 
-40039:                         ;
-40039:  _M_read();
-40039:  return *this;
-40039:       }
-40039: 
-40039:       istream_iterator
-40039:       operator++(int)
-40039:       {
-40039: 
-40039: 
-40039:                         ;
-40039:  istream_iterator __tmp = *this;
-40039:  _M_read();
-40039:  return __tmp;
-40039:       }
-40039: 
-40039:       bool
-40039:       _M_equal(const istream_iterator& __x) const
-40039:       { return (_M_ok == __x._M_ok) && (!_M_ok || _M_stream == __x._M_stream); }
-40039: 
-40039:     private:
-40039:       void
-40039:       _M_read()
-40039:       {
-40039:  _M_ok = (_M_stream && *_M_stream) ? true : false;
-40039:  if (_M_ok)
-40039:    {
-40039:      *_M_stream >> _M_value;
-40039:      _M_ok = *_M_stream ? true : false;
-40039:    }
-40039:       }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _CharT, typename _Traits, typename _Dist>
-40039:     inline bool
-40039:     operator==(const istream_iterator<_Tp, _CharT, _Traits, _Dist>& __x,
-40039:         const istream_iterator<_Tp, _CharT, _Traits, _Dist>& __y)
-40039:     { return __x._M_equal(__y); }
-40039: 
-40039: 
-40039:   template <class _Tp, class _CharT, class _Traits, class _Dist>
-40039:     inline bool
-40039:     operator!=(const istream_iterator<_Tp, _CharT, _Traits, _Dist>& __x,
-40039:         const istream_iterator<_Tp, _CharT, _Traits, _Dist>& __y)
-40039:     { return !__x._M_equal(__y); }
-40039: # 152 "/usr/include/c++/8/bits/stream_iterator.h" 3
-40039:   template<typename _Tp, typename _CharT = char,
-40039:            typename _Traits = char_traits<_CharT> >
-40039:     class ostream_iterator
-40039:     : public iterator<output_iterator_tag, void, void, void, void>
-40039:     {
-40039:     public:
-40039: 
-40039: 
-40039:       typedef _CharT char_type;
-40039:       typedef _Traits traits_type;
-40039:       typedef basic_ostream<_CharT, _Traits> ostream_type;
-40039: 
-40039: 
-40039:     private:
-40039:       ostream_type* _M_stream;
-40039:       const _CharT* _M_string;
-40039: 
-40039:     public:
-40039: 
-40039:       ostream_iterator(ostream_type& __s)
-40039:       : _M_stream(std::__addressof(__s)), _M_string(0) {}
-40039: # 184 "/usr/include/c++/8/bits/stream_iterator.h" 3
-40039:       ostream_iterator(ostream_type& __s, const _CharT* __c)
-40039:       : _M_stream(&__s), _M_string(__c) { }
-40039: 
-40039: 
-40039:       ostream_iterator(const ostream_iterator& __obj)
-40039:       : _M_stream(__obj._M_stream), _M_string(__obj._M_string) { }
-40039: 
-40039: 
-40039: 
-40039:       ostream_iterator&
-40039:       operator=(const _Tp& __value)
-40039:       {
-40039: 
-40039: 
-40039:                         ;
-40039:  *_M_stream << __value;
-40039:  if (_M_string) *_M_stream << _M_string;
-40039:  return *this;
-40039:       }
-40039: 
-40039:       ostream_iterator&
-40039:       operator*()
-40039:       { return *this; }
-40039: 
-40039:       ostream_iterator&
-40039:       operator++()
-40039:       { return *this; }
-40039: 
-40039:       ostream_iterator&
-40039:       operator++(int)
-40039:       { return *this; }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 67 "/usr/include/c++/8/iterator" 2 3
-40039: # 39 "../../src/Constraint_System_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 42 "../../src/Constraint_System_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: std::ostream& operator<<(std::ostream& s, const Constraint_System& cs);
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: bool operator==(const Constraint_System& x, const Constraint_System& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: bool operator!=(const Constraint_System& x, const Constraint_System& y);
-40039: 
-40039: 
-40039: void
-40039: swap(Constraint_System& x, Constraint_System& y);
-40039: 
-40039: }
-40039: # 137 "../../src/Constraint_System_defs.hh"
-40039: class Parma_Polyhedra_Library::Constraint_System {
-40039: public:
-40039:   typedef Constraint row_type;
-40039: 
-40039:   static const Representation default_representation = SPARSE;
-40039: 
-40039: 
-40039:   explicit Constraint_System(Representation r = default_representation);
-40039: 
-40039: 
-40039:   explicit Constraint_System(const Constraint& c,
-40039:                              Representation r = default_representation);
-40039: 
-40039: 
-40039:   explicit Constraint_System(const Congruence_System& cgs,
-40039:                              Representation r = default_representation);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Constraint_System(const Constraint_System& cs);
-40039: 
-40039: 
-40039:   Constraint_System(const Constraint_System& cs, Representation r);
-40039: 
-40039: 
-40039:   ~Constraint_System();
-40039: 
-40039: 
-40039:   Constraint_System& operator=(const Constraint_System& y);
-40039: 
-40039: 
-40039:   Representation representation() const;
-40039: 
-40039: 
-40039:   void set_representation(Representation r);
-40039: 
-40039: 
-40039:   static dimension_type max_space_dimension();
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039:   void set_space_dimension(dimension_type space_dim);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool has_equalities() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool has_strict_inequalities() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void insert(const Constraint& c);
-40039: 
-40039: 
-40039:   static void initialize();
-40039: 
-40039: 
-40039:   static void finalize();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Constraint_System& zero_dim_empty();
-40039: 
-40039:   typedef Constraint_System_const_iterator const_iterator;
-40039: 
-40039: 
-40039:   bool empty() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void clear();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const_iterator begin() const;
-40039: 
-40039: 
-40039:   const_iterator end() const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   void m_swap(Constraint_System& y);
-40039: 
-40039: private:
-40039:   Linear_System<Constraint> sys;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Constraint_System* zero_dim_empty_p;
-40039: 
-40039:   friend class Constraint_System_const_iterator;
-40039: 
-40039:   friend bool operator==(const Constraint_System& x,
-40039:                          const Constraint_System& y);
-40039: 
-40039: 
-40039:   explicit Constraint_System(Topology topol,
-40039:                              Representation r = default_representation);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Constraint_System(Topology topol, dimension_type space_dim,
-40039:                     Representation r = default_representation);
-40039: 
-40039: 
-40039:   dimension_type num_equalities() const;
-40039: 
-40039: 
-40039:   dimension_type num_inequalities() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void simplify();
-40039: # 303 "../../src/Constraint_System_defs.hh"
-40039:   bool adjust_topology_and_space_dimension(Topology new_topology,
-40039:                                            dimension_type new_space_dim);
-40039: 
-40039: 
-40039:   const Constraint& operator[](dimension_type k) const;
-40039: 
-40039: 
-40039:   bool satisfies_all_constraints(const Generator& g) const;
-40039: # 347 "../../src/Constraint_System_defs.hh"
-40039:   void affine_preimage(Variable v,
-40039:                        const Linear_Expression& expr,
-40039:                        Coefficient_traits::const_reference denominator);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void insert_pending(const Constraint& c);
-40039: 
-40039: 
-40039:   void add_low_level_constraints();
-40039: 
-40039: 
-40039:   Topology topology() const;
-40039: 
-40039:   dimension_type num_rows() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_necessarily_closed() const;
-40039: 
-40039: 
-40039:   dimension_type num_pending_rows() const;
-40039: 
-40039: 
-40039:   dimension_type first_pending_row() const;
-40039: 
-40039: 
-40039:   bool is_sorted() const;
-40039: 
-40039: 
-40039:   void unset_pending_rows();
-40039: 
-40039: 
-40039:   void set_index_first_pending_row(dimension_type i);
-40039: 
-40039: 
-40039:   void set_sorted(bool b);
-40039: # 398 "../../src/Constraint_System_defs.hh"
-40039:   void remove_row(dimension_type i, bool keep_sorted = false);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void remove_rows(const std::vector<dimension_type>& indexes);
-40039: # 416 "../../src/Constraint_System_defs.hh"
-40039:   void remove_rows(dimension_type first, dimension_type last,
-40039:                    bool keep_sorted = false);
-40039: 
-40039: 
-40039:   void remove_trailing_rows(dimension_type n);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void remove_space_dimensions(const Variables_Set& vars);
-40039: 
-40039: 
-40039: 
-40039:   void shift_space_dimensions(Variable v, dimension_type n);
-40039: # 446 "../../src/Constraint_System_defs.hh"
-40039:   void permute_space_dimensions(const std::vector<Variable>& cycle);
-40039: 
-40039: 
-40039:   void swap_space_dimensions(Variable v1, Variable v2);
-40039: 
-40039:   bool has_no_rows() const;
-40039: 
-40039: 
-40039:   void strong_normalize();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void sort_rows();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void insert_pending(Constraint& r, Recycle_Input);
-40039: 
-40039: 
-40039: 
-40039:   void insert_pending(Constraint_System& r, Recycle_Input);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void insert(Constraint& r, Recycle_Input);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void insert(Constraint_System& r, Recycle_Input);
-40039: 
-40039: 
-40039:   void insert_pending(const Constraint_System& r);
-40039: # 495 "../../src/Constraint_System_defs.hh"
-40039:   void merge_rows_assign(const Constraint_System& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void insert(const Constraint_System& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void mark_as_necessarily_closed();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void mark_as_not_necessarily_closed();
-40039: # 529 "../../src/Constraint_System_defs.hh"
-40039:   dimension_type gauss(dimension_type n_lines_or_equalities);
-40039: # 541 "../../src/Constraint_System_defs.hh"
-40039:   void back_substitute(dimension_type n_lines_or_equalities);
-40039: 
-40039: 
-40039:   void assign_with_pending(const Constraint_System& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void sort_pending_and_remove_duplicates();
-40039: # 559 "../../src/Constraint_System_defs.hh"
-40039:   void sort_and_remove_with_sat(Bit_Matrix& sat);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool check_sorted() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type num_lines_or_equalities() const;
-40039: # 586 "../../src/Constraint_System_defs.hh"
-40039:   void add_universe_rows_and_space_dimensions(dimension_type n);
-40039: 
-40039:   friend class Polyhedron;
-40039:   friend class Termination_Helpers;
-40039: };
-40039: # 610 "../../src/Constraint_System_defs.hh"
-40039: class Parma_Polyhedra_Library::Constraint_System_const_iterator
-40039:   : public std::iterator<std::forward_iterator_tag,
-40039:                          Constraint,
-40039:                          std::ptrdiff_t,
-40039:                          const Constraint*,
-40039:                          const Constraint&> {
-40039: public:
-40039: 
-40039:   Constraint_System_const_iterator();
-40039: 
-40039: 
-40039:   Constraint_System_const_iterator(const Constraint_System_const_iterator& y);
-40039: 
-40039: 
-40039:   ~Constraint_System_const_iterator();
-40039: 
-40039: 
-40039:   Constraint_System_const_iterator&
-40039:   operator=(const Constraint_System_const_iterator& y);
-40039: 
-40039: 
-40039:   const Constraint& operator*() const;
-40039: 
-40039: 
-40039:   const Constraint* operator->() const;
-40039: 
-40039: 
-40039:   Constraint_System_const_iterator& operator++();
-40039: 
-40039: 
-40039:   Constraint_System_const_iterator operator++(int);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool operator==(const Constraint_System_const_iterator& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool operator!=(const Constraint_System_const_iterator& y) const;
-40039: 
-40039: private:
-40039:   friend class Constraint_System;
-40039: 
-40039: 
-40039:   Linear_System<Constraint>::const_iterator i;
-40039: 
-40039: 
-40039:   const Linear_System<Constraint>* csp;
-40039: 
-40039: 
-40039:   Constraint_System_const_iterator(const Linear_System<Constraint>
-40039:                                    ::const_iterator& iter,
-40039:                                    const Constraint_System& cs);
-40039: 
-40039: 
-40039:   void skip_forward();
-40039: };
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: dimension_type
-40039: num_constraints(const Constraint_System& cs);
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 29 "../../src/Box_inlines.hh" 2
-40039: # 1 "../../src/Constraint_System_inlines.hh" 1
-40039: # 29 "../../src/Constraint_System_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline
-40039: Constraint_System::Constraint_System(Representation r)
-40039:   : sys(NECESSARILY_CLOSED, r) {
-40039: }
-40039: 
-40039: inline
-40039: Constraint_System::Constraint_System(const Constraint& c, Representation r)
-40039:   : sys(c.topology(), r) {
-40039:   sys.insert(c);
-40039: }
-40039: 
-40039: inline
-40039: Constraint_System::Constraint_System(const Constraint_System& cs)
-40039:   : sys(cs.sys) {
-40039: }
-40039: 
-40039: inline
-40039: Constraint_System::Constraint_System(const Constraint_System& cs,
-40039:                                      Representation r)
-40039:   : sys(cs.sys, r) {
-40039: }
-40039: 
-40039: inline
-40039: Constraint_System::Constraint_System(const Topology topol, Representation r)
-40039:   : sys(topol, r) {
-40039: }
-40039: 
-40039: inline
-40039: Constraint_System::Constraint_System(const Topology topol,
-40039:                                      const dimension_type space_dim,
-40039:                                      Representation r)
-40039:   : sys(topol, space_dim, r) {
-40039: }
-40039: 
-40039: inline
-40039: Constraint_System::~Constraint_System() {
-40039: }
-40039: 
-40039: inline Constraint_System&
-40039: Constraint_System::operator=(const Constraint_System& y) {
-40039:   Constraint_System tmp = y;
-40039:   swap(*this, tmp);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline const Constraint&
-40039: Constraint_System::operator[](const dimension_type k) const {
-40039:   return sys[k];
-40039: }
-40039: 
-40039: inline Representation
-40039: Constraint_System::representation() const {
-40039:   return sys.representation();
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::set_representation(Representation r) {
-40039:   sys.set_representation(r);
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Constraint_System::max_space_dimension() {
-40039:   return Linear_System<Constraint>::max_space_dimension();
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Constraint_System::space_dimension() const {
-40039:   return sys.space_dimension();
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::set_space_dimension(dimension_type space_dim) {
-40039:   return sys.set_space_dimension(space_dim);
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::clear() {
-40039:   sys.clear();
-40039: }
-40039: 
-40039: inline const Constraint_System&
-40039: Constraint_System::zero_dim_empty() {
-40039:   ((void) 0);
-40039:   return *zero_dim_empty_p;
-40039: }
-40039: 
-40039: inline
-40039: Constraint_System_const_iterator::Constraint_System_const_iterator()
-40039:   : i(), csp(0) {
-40039: }
-40039: 
-40039: inline
-40039: Constraint_System_const_iterator::Constraint_System_const_iterator(const Constraint_System_const_iterator& y)
-40039:   : i(y.i), csp(y.csp) {
-40039: }
-40039: 
-40039: inline
-40039: Constraint_System_const_iterator::~Constraint_System_const_iterator() {
-40039: }
-40039: 
-40039: inline Constraint_System_const_iterator&
-40039: Constraint_System_const_iterator::operator=(const Constraint_System_const_iterator& y) {
-40039:   i = y.i;
-40039:   csp = y.csp;
-40039:   return *this;
-40039: }
-40039: 
-40039: inline const Constraint&
-40039: Constraint_System_const_iterator::operator*() const {
-40039:   return *i;
-40039: }
-40039: 
-40039: inline const Constraint*
-40039: Constraint_System_const_iterator::operator->() const {
-40039:   return i.operator->();
-40039: }
-40039: 
-40039: inline Constraint_System_const_iterator&
-40039: Constraint_System_const_iterator::operator++() {
-40039:   ++i;
-40039:   skip_forward();
-40039:   return *this;
-40039: }
-40039: 
-40039: inline Constraint_System_const_iterator
-40039: Constraint_System_const_iterator::operator++(int) {
-40039:   const Constraint_System_const_iterator tmp = *this;
-40039:   operator++();
-40039:   return tmp;
-40039: }
-40039: 
-40039: inline bool
-40039: Constraint_System_const_iterator::operator==(const Constraint_System_const_iterator& y) const {
-40039:   return i == y.i;
-40039: }
-40039: 
-40039: inline bool
-40039: Constraint_System_const_iterator::operator!=(const Constraint_System_const_iterator& y) const {
-40039:   return i != y.i;
-40039: }
-40039: 
-40039: inline
-40039: Constraint_System_const_iterator::
-40039: Constraint_System_const_iterator(const Linear_System<Constraint>::const_iterator& iter,
-40039:                const Constraint_System& cs)
-40039:   : i(iter), csp(&cs.sys) {
-40039: }
-40039: 
-40039: inline Constraint_System_const_iterator
-40039: Constraint_System::begin() const {
-40039:   const_iterator i(sys.begin(), *this);
-40039:   i.skip_forward();
-40039:   return i;
-40039: }
-40039: 
-40039: inline Constraint_System_const_iterator
-40039: Constraint_System::end() const {
-40039:   const Constraint_System_const_iterator i(sys.end(), *this);
-40039:   return i;
-40039: }
-40039: 
-40039: inline bool
-40039: Constraint_System::empty() const {
-40039:   return begin() == end();
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::add_low_level_constraints() {
-40039:   if (sys.is_necessarily_closed()) {
-40039: 
-40039:     insert(Constraint::zero_dim_positivity());
-40039:   }
-40039:   else {
-40039: 
-40039:     insert(Constraint::epsilon_leq_one());
-40039:     insert(Constraint::epsilon_geq_zero());
-40039:   }
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::m_swap(Constraint_System& y) {
-40039:   swap(sys, y.sys);
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Constraint_System::external_memory_in_bytes() const {
-40039:   return sys.external_memory_in_bytes();
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Constraint_System::total_memory_in_bytes() const {
-40039:   return external_memory_in_bytes() + sizeof(*this);
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::simplify() {
-40039:   sys.simplify();
-40039: }
-40039: 
-40039: inline Topology
-40039: Constraint_System::topology() const {
-40039:   return sys.topology();
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Constraint_System::num_rows() const {
-40039:   return sys.num_rows();
-40039: }
-40039: 
-40039: inline bool
-40039: Constraint_System::is_necessarily_closed() const {
-40039:   return sys.is_necessarily_closed();
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Constraint_System::num_pending_rows() const {
-40039:   return sys.num_pending_rows();
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Constraint_System::first_pending_row() const {
-40039:   return sys.first_pending_row();
-40039: }
-40039: 
-40039: inline bool
-40039: Constraint_System::is_sorted() const {
-40039:   return sys.is_sorted();
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::unset_pending_rows() {
-40039:   sys.unset_pending_rows();
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::set_index_first_pending_row(dimension_type i) {
-40039:   sys.set_index_first_pending_row(i);
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::set_sorted(bool b) {
-40039:   sys.set_sorted(b);
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::remove_row(dimension_type i, bool keep_sorted) {
-40039:   sys.remove_row(i, keep_sorted);
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::remove_rows(dimension_type first, dimension_type last,
-40039:                                bool keep_sorted) {
-40039:   sys.remove_rows(first, last, keep_sorted);
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::remove_rows(const std::vector<dimension_type>& indexes) {
-40039:   sys.remove_rows(indexes);
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::remove_trailing_rows(dimension_type n) {
-40039:   sys.remove_trailing_rows(n);
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System
-40039: ::remove_space_dimensions(const Variables_Set& vars) {
-40039:   sys.remove_space_dimensions(vars);
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System
-40039: ::shift_space_dimensions(Variable v, dimension_type n) {
-40039:   sys.shift_space_dimensions(v, n);
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System
-40039: ::permute_space_dimensions(const std::vector<Variable>& cycle) {
-40039:   sys.permute_space_dimensions(cycle);
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System
-40039: ::swap_space_dimensions(Variable v1, Variable v2) {
-40039:   sys.swap_space_dimensions(v1, v2);
-40039: }
-40039: 
-40039: inline bool
-40039: Constraint_System::has_no_rows() const {
-40039:   return sys.has_no_rows();
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::strong_normalize() {
-40039:   sys.strong_normalize();
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::sort_rows() {
-40039:   sys.sort_rows();
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::insert_pending(Constraint_System& r, Recycle_Input) {
-40039:   sys.insert_pending(r.sys, Recycle_Input());
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::insert(Constraint_System& r, Recycle_Input) {
-40039:   sys.insert(r.sys, Recycle_Input());
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::insert_pending(const Constraint_System& r) {
-40039:   sys.insert_pending(r.sys);
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::merge_rows_assign(const Constraint_System& y) {
-40039:   sys.merge_rows_assign(y.sys);
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::insert(const Constraint_System& y) {
-40039:   sys.insert(y.sys);
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::mark_as_necessarily_closed() {
-40039:   sys.mark_as_necessarily_closed();
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::mark_as_not_necessarily_closed() {
-40039:   sys.mark_as_not_necessarily_closed();
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Constraint_System::gauss(dimension_type n_lines_or_equalities) {
-40039:   return sys.gauss(n_lines_or_equalities);
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::back_substitute(dimension_type n_lines_or_equalities) {
-40039:   sys.back_substitute(n_lines_or_equalities);
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::assign_with_pending(const Constraint_System& y) {
-40039:   sys.assign_with_pending(y.sys);
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::sort_pending_and_remove_duplicates() {
-40039:   sys.sort_pending_and_remove_duplicates();
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::sort_and_remove_with_sat(Bit_Matrix& sat) {
-40039:   sys.sort_and_remove_with_sat(sat);
-40039: }
-40039: 
-40039: inline bool
-40039: Constraint_System::check_sorted() const {
-40039:   return sys.check_sorted();
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Constraint_System::num_lines_or_equalities() const {
-40039:   return sys.num_lines_or_equalities();
-40039: }
-40039: 
-40039: inline void
-40039: Constraint_System::add_universe_rows_and_space_dimensions(dimension_type n) {
-40039:   sys.add_universe_rows_and_space_dimensions(n);
-40039: }
-40039: 
-40039: inline bool
-40039: operator==(const Constraint_System& x, const Constraint_System& y) {
-40039:   return x.sys == y.sys;
-40039: }
-40039: 
-40039: inline bool
-40039: operator!=(const Constraint_System& x, const Constraint_System& y) {
-40039:   return !(x == y);
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: swap(Constraint_System& x, Constraint_System& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: inline dimension_type
-40039: num_constraints(const Constraint_System& cs) {
-40039:   return static_cast<dimension_type>(std::distance(cs.begin(), cs.end()));
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 30 "../../src/Box_inlines.hh" 2
-40039: # 1 "../../src/Congruence_System_defs.hh" 1
-40039: # 38 "../../src/Congruence_System_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: bool
-40039: operator==(const Congruence_System& x, const Congruence_System& y);
-40039: 
-40039: }
-40039: # 103 "../../src/Congruence_System_defs.hh"
-40039: class Parma_Polyhedra_Library::Congruence_System {
-40039: public:
-40039: 
-40039:   typedef Congruence row_type;
-40039: 
-40039:   static const Representation default_representation = SPARSE;
-40039: 
-40039: 
-40039:   explicit Congruence_System(Representation r = default_representation);
-40039: 
-40039: 
-40039:   explicit Congruence_System(dimension_type d,
-40039:                              Representation r = default_representation);
-40039: 
-40039: 
-40039:   explicit Congruence_System(const Congruence& cg,
-40039:                              Representation r = default_representation);
-40039: # 129 "../../src/Congruence_System_defs.hh"
-40039:   explicit Congruence_System(const Constraint& c,
-40039:                              Representation r = default_representation);
-40039: 
-40039: 
-40039:   explicit Congruence_System(const Constraint_System& cs,
-40039:                              Representation r = default_representation);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Congruence_System(const Congruence_System& cgs);
-40039: 
-40039: 
-40039:   Congruence_System(const Congruence_System& cgs, Representation r);
-40039: 
-40039: 
-40039:   ~Congruence_System();
-40039: 
-40039: 
-40039:   Congruence_System& operator=(const Congruence_System& y);
-40039: 
-40039: 
-40039:   Representation representation() const;
-40039: 
-40039: 
-40039:   void set_representation(Representation r);
-40039: 
-40039: 
-40039:   static dimension_type max_space_dimension();
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_equal_to(const Congruence_System& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool has_linear_equalities() const;
-40039: 
-40039: 
-40039:   void clear();
-40039: # 187 "../../src/Congruence_System_defs.hh"
-40039:   void insert(const Congruence& cg);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void insert(Congruence& cg, Recycle_Input);
-40039: # 208 "../../src/Congruence_System_defs.hh"
-40039:   void insert(const Constraint& c);
-40039: # 218 "../../src/Congruence_System_defs.hh"
-40039:   void insert(const Congruence_System& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void insert(Congruence_System& cgs, Recycle_Input);
-40039: 
-40039: 
-40039:   static void initialize();
-40039: 
-40039: 
-40039:   static void finalize();
-40039: 
-40039: 
-40039:   static const Congruence_System& zero_dim_empty();
-40039: # 250 "../../src/Congruence_System_defs.hh"
-40039:   class const_iterator
-40039:     : public std::iterator<std::forward_iterator_tag,
-40039:                            Congruence,
-40039:                            std::ptrdiff_t,
-40039:                            const Congruence*,
-40039:                            const Congruence&> {
-40039:   public:
-40039: 
-40039:     const_iterator();
-40039: 
-40039: 
-40039:     const_iterator(const const_iterator& y);
-40039: 
-40039: 
-40039:     ~const_iterator();
-40039: 
-40039: 
-40039:     const_iterator& operator=(const const_iterator& y);
-40039: 
-40039: 
-40039:     const Congruence& operator*() const;
-40039: 
-40039: 
-40039:     const Congruence* operator->() const;
-40039: 
-40039: 
-40039:     const_iterator& operator++();
-40039: 
-40039: 
-40039:     const_iterator operator++(int);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     bool operator==(const const_iterator& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     bool operator!=(const const_iterator& y) const;
-40039: 
-40039:   private:
-40039:     friend class Congruence_System;
-40039: 
-40039: 
-40039:     Swapping_Vector<Congruence>::const_iterator i;
-40039: 
-40039: 
-40039:     const Swapping_Vector<Congruence>* csp;
-40039: 
-40039: 
-40039:     const_iterator(const Swapping_Vector<Congruence>::const_iterator& iter,
-40039:                    const Congruence_System& cgs);
-40039: 
-40039: 
-40039:     void skip_forward();
-40039:   };
-40039: 
-40039: 
-40039:   bool empty() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const_iterator begin() const;
-40039: 
-40039: 
-40039:   const_iterator end() const;
-40039: # 331 "../../src/Congruence_System_defs.hh"
-40039:   bool OK() const;
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   dimension_type num_equalities() const;
-40039: 
-40039: 
-40039:   dimension_type num_proper_congruences() const;
-40039: 
-40039: 
-40039:   void m_swap(Congruence_System& y);
-40039: # 372 "../../src/Congruence_System_defs.hh"
-40039:   void add_unit_rows_and_space_dimensions(dimension_type dims);
-40039: # 386 "../../src/Congruence_System_defs.hh"
-40039:   void permute_space_dimensions(const std::vector<Variable>& cycle);
-40039: 
-40039: 
-40039:   void swap_space_dimensions(Variable v1, Variable v2);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool set_space_dimension(dimension_type new_space_dim);
-40039: 
-40039: 
-40039: 
-40039: protected:
-40039: 
-40039:   bool satisfies_all_congruences(const Grid_Generator& g) const;
-40039: 
-40039: private:
-40039: 
-40039:   dimension_type num_rows() const;
-40039: 
-40039: 
-40039:   bool has_no_rows() const;
-40039: 
-40039: 
-40039:   const Congruence& operator[](dimension_type k) const;
-40039: 
-40039: 
-40039:   void normalize_moduli();
-40039: # 455 "../../src/Congruence_System_defs.hh"
-40039:   void affine_preimage(Variable v,
-40039:                        const Linear_Expression& expr,
-40039:                        Coefficient_traits::const_reference denominator);
-40039: # 472 "../../src/Congruence_System_defs.hh"
-40039:   void concatenate(const Congruence_System& y);
-40039: # 481 "../../src/Congruence_System_defs.hh"
-40039:   void insert_verbatim(Congruence& cg, Recycle_Input);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void remove_rows(dimension_type first, dimension_type last,
-40039:                    bool keep_sorted);
-40039: 
-40039:   void remove_trailing_rows(dimension_type n);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Congruence_System* zero_dim_empty_p;
-40039: 
-40039:   Swapping_Vector<Congruence> rows;
-40039: 
-40039:   dimension_type space_dimension_;
-40039: 
-40039:   Representation representation_;
-40039: # 514 "../../src/Congruence_System_defs.hh"
-40039:   bool has_a_free_dimension() const;
-40039: 
-40039:   friend class Grid;
-40039: 
-40039:   friend bool
-40039:   operator==(const Congruence_System& x, const Congruence_System& y);
-40039: };
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: std::ostream&
-40039: operator<<(std::ostream& s, const Congruence_System& cgs);
-40039: 
-40039: }
-40039: 
-40039: 
-40039: void
-40039: swap(Congruence_System& x, Congruence_System& y);
-40039: 
-40039: }
-40039: # 31 "../../src/Box_inlines.hh" 2
-40039: # 1 "../../src/Congruence_System_inlines.hh" 1
-40039: # 29 "../../src/Congruence_System_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline const Congruence&
-40039: Congruence_System::operator[](const dimension_type k) const {
-40039:   return rows[k];
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Congruence_System::num_rows() const {
-40039:   return rows.size();
-40039: }
-40039: 
-40039: inline bool
-40039: Congruence_System::has_no_rows() const {
-40039:   return num_rows() == 0;
-40039: }
-40039: 
-40039: inline void
-40039: Congruence_System::remove_trailing_rows(dimension_type n) {
-40039:   ((void) 0);
-40039:   rows.resize(num_rows() - n);
-40039: }
-40039: 
-40039: inline void
-40039: Congruence_System::insert(const Congruence& cg) {
-40039:   Congruence tmp = cg;
-40039:   insert(tmp, Recycle_Input());
-40039: }
-40039: 
-40039: inline void
-40039: Congruence_System::insert(Congruence& cg, Recycle_Input) {
-40039:   ((void) 0);
-40039:   cg.strong_normalize();
-40039:   ((void) 0);
-40039:   insert_verbatim(cg, Recycle_Input());
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Congruence_System::Congruence_System(Representation r)
-40039:   : rows(),
-40039:     space_dimension_(0),
-40039:     representation_(r) {
-40039: }
-40039: 
-40039: inline
-40039: Congruence_System::Congruence_System(const Congruence& cg, Representation r)
-40039:   : rows(),
-40039:     space_dimension_(0),
-40039:     representation_(r) {
-40039:   insert(cg);
-40039: }
-40039: 
-40039: inline
-40039: Congruence_System::Congruence_System(const Constraint& c, Representation r)
-40039:   : rows(),
-40039:     space_dimension_(0),
-40039:     representation_(r) {
-40039:   insert(c);
-40039: }
-40039: 
-40039: inline
-40039: Congruence_System::Congruence_System(const Congruence_System& cgs)
-40039:   : rows(cgs.rows),
-40039:     space_dimension_(cgs.space_dimension_),
-40039:     representation_(cgs.representation_) {
-40039: }
-40039: 
-40039: inline
-40039: Congruence_System::Congruence_System(const Congruence_System& cgs,
-40039:                                      Representation r)
-40039:   : rows(cgs.rows),
-40039:     space_dimension_(cgs.space_dimension_),
-40039:     representation_(r) {
-40039:   if (cgs.representation() != r) {
-40039:     for (dimension_type i = 0; i < num_rows(); ++i) {
-40039:       rows[i].set_representation(representation());
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: inline
-40039: Congruence_System::Congruence_System(const dimension_type d, Representation r)
-40039:   : rows(),
-40039:     space_dimension_(d),
-40039:     representation_(r) {
-40039: }
-40039: 
-40039: inline
-40039: Congruence_System::~Congruence_System() {
-40039: }
-40039: 
-40039: inline Congruence_System&
-40039: Congruence_System::operator=(const Congruence_System& y) {
-40039:   Congruence_System tmp = y;
-40039:   swap(*this, tmp);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline Representation
-40039: Congruence_System::representation() const {
-40039:   return representation_;
-40039: }
-40039: 
-40039: inline void
-40039: Congruence_System::set_representation(Representation r) {
-40039:   if (representation_ == r) {
-40039:     return;
-40039:   }
-40039:   representation_ = r;
-40039:   for (dimension_type i = 0; i < num_rows(); ++i) {
-40039:     rows[i].set_representation(r);
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Congruence_System::max_space_dimension() {
-40039:   return Congruence::max_space_dimension();
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Congruence_System::space_dimension() const {
-40039:   return space_dimension_;
-40039: }
-40039: 
-40039: inline void
-40039: Congruence_System::clear() {
-40039:   rows.clear();
-40039:   space_dimension_ = 0;
-40039: }
-40039: 
-40039: inline const Congruence_System&
-40039: Congruence_System::zero_dim_empty() {
-40039:   ((void) 0);
-40039:   return *zero_dim_empty_p;
-40039: }
-40039: 
-40039: inline
-40039: Congruence_System::const_iterator::const_iterator()
-40039:   : i(), csp(0) {
-40039: }
-40039: 
-40039: inline
-40039: Congruence_System::const_iterator::const_iterator(const const_iterator& y)
-40039:   : i(y.i), csp(y.csp) {
-40039: }
-40039: 
-40039: inline
-40039: Congruence_System::const_iterator::~const_iterator() {
-40039: }
-40039: 
-40039: inline Congruence_System::const_iterator&
-40039: Congruence_System::const_iterator::operator=(const const_iterator& y) {
-40039:   i = y.i;
-40039:   csp = y.csp;
-40039:   return *this;
-40039: }
-40039: 
-40039: inline const Congruence&
-40039: Congruence_System::const_iterator::operator*() const {
-40039:   return *i;
-40039: }
-40039: 
-40039: inline const Congruence*
-40039: Congruence_System::const_iterator::operator->() const {
-40039:   return i.operator->();
-40039: }
-40039: 
-40039: inline Congruence_System::const_iterator&
-40039: Congruence_System::const_iterator::operator++() {
-40039:   ++i;
-40039:   skip_forward();
-40039:   return *this;
-40039: }
-40039: 
-40039: inline Congruence_System::const_iterator
-40039: Congruence_System::const_iterator::operator++(int) {
-40039:   const const_iterator tmp = *this;
-40039:   operator++();
-40039:   return tmp;
-40039: }
-40039: 
-40039: inline bool
-40039: Congruence_System::const_iterator::operator==(const const_iterator& y) const {
-40039:   return i == y.i;
-40039: }
-40039: 
-40039: inline bool
-40039: Congruence_System::const_iterator::operator!=(const const_iterator& y) const {
-40039:   return i != y.i;
-40039: }
-40039: 
-40039: inline
-40039: Congruence_System::const_iterator::
-40039: const_iterator(const Swapping_Vector<Congruence>::const_iterator& iter,
-40039:                const Congruence_System& cgs)
-40039:   : i(iter), csp(&cgs.rows) {
-40039: }
-40039: 
-40039: inline Congruence_System::const_iterator
-40039: Congruence_System::begin() const {
-40039:   const_iterator i(rows.begin(), *this);
-40039:   i.skip_forward();
-40039:   return i;
-40039: }
-40039: 
-40039: inline Congruence_System::const_iterator
-40039: Congruence_System::end() const {
-40039:   const const_iterator i(rows.end(), *this);
-40039:   return i;
-40039: }
-40039: 
-40039: inline bool
-40039: Congruence_System::empty() const {
-40039:   return begin() == end();
-40039: }
-40039: 
-40039: inline void
-40039: Congruence_System::m_swap(Congruence_System& y) {
-40039:   using std::swap;
-40039:   swap(rows, y.rows);
-40039:   swap(space_dimension_, y.space_dimension_);
-40039:   swap(representation_, y.representation_);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Congruence_System::external_memory_in_bytes() const {
-40039:   return rows.external_memory_in_bytes();
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Congruence_System::total_memory_in_bytes() const {
-40039:   return rows.external_memory_in_bytes() + sizeof(*this);
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: swap(Congruence_System& x, Congruence_System& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 32 "../../src/Box_inlines.hh" 2
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename ITV>
-40039: inline bool
-40039: Box<ITV>::marked_empty() const {
-40039:   return status.test_empty_up_to_date() && status.test_empty();
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::set_empty() {
-40039:   status.set_empty();
-40039:   status.set_empty_up_to_date();
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::set_nonempty() {
-40039:   status.reset_empty();
-40039:   status.set_empty_up_to_date();
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::set_empty_up_to_date() {
-40039:   status.set_empty_up_to_date();
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::reset_empty_up_to_date() {
-40039:   return status.reset_empty_up_to_date();
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline
-40039: Box<ITV>::Box(const Box& y, Complexity_Class)
-40039:   : seq(y.seq), status(y.status) {
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline Box<ITV>&
-40039: Box<ITV>::operator=(const Box& y) {
-40039:   seq = y.seq;
-40039:   status = y.status;
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::m_swap(Box& y) {
-40039:   Box& x = *this;
-40039:   using std::swap;
-40039:   swap(x.seq, y.seq);
-40039:   swap(x.status, y.status);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline
-40039: Box<ITV>::Box(const Constraint_System& cs, Recycle_Input) {
-40039: 
-40039:   Box<ITV> tmp(cs);
-40039:   this->m_swap(tmp);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline
-40039: Box<ITV>::Box(const Generator_System& gs, Recycle_Input) {
-40039: 
-40039:   Box<ITV> tmp(gs);
-40039:   this->m_swap(tmp);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline
-40039: Box<ITV>::Box(const Congruence_System& cgs, Recycle_Input) {
-40039: 
-40039:   Box<ITV> tmp(cgs);
-40039:   this->m_swap(tmp);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline memory_size_type
-40039: Box<ITV>::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline dimension_type
-40039: Box<ITV>::space_dimension() const {
-40039:   return seq.size();
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline dimension_type
-40039: Box<ITV>::max_space_dimension() {
-40039: 
-40039: 
-40039:   return Sequence().max_size() - 1;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline int32_t
-40039: Box<ITV>::hash_code() const {
-40039:   return hash_code_from_dimension(space_dimension());
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline const ITV&
-40039: Box<ITV>::operator[](const dimension_type k) const {
-40039:   ((void) 0);
-40039:   return seq[k];
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline const ITV&
-40039: Box<ITV>::get_interval(const Variable var) const {
-40039:   if (space_dimension() < var.space_dimension()) {
-40039:     throw_dimension_incompatible("get_interval(v)", "v", var);
-40039:   }
-40039:   if (is_empty()) {
-40039:     static ITV empty_interval(EMPTY);
-40039:     return empty_interval;
-40039:   }
-40039: 
-40039:   return seq[var.id()];
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::set_interval(const Variable var, const ITV& i) {
-40039:   const dimension_type space_dim = space_dimension();
-40039:   if (space_dim < var.space_dimension()) {
-40039:     throw_dimension_incompatible("set_interval(v, i)", "v", var);
-40039:   }
-40039: 
-40039:   if (is_empty() && space_dim >= 2) {
-40039: 
-40039: 
-40039:     return;
-40039:   }
-40039:   seq[var.id()] = i;
-40039:   reset_empty_up_to_date();
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline bool
-40039: Box<ITV>::is_empty() const {
-40039:   return marked_empty() || check_empty();
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline bool
-40039: Box<ITV>::bounds_from_above(const Linear_Expression& expr) const {
-40039:   return bounds(expr, true);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline bool
-40039: Box<ITV>::bounds_from_below(const Linear_Expression& expr) const {
-40039:   return bounds(expr, false);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline bool
-40039: Box<ITV>::maximize(const Linear_Expression& expr,
-40039:                    Coefficient& sup_n, Coefficient& sup_d,
-40039:                    bool& maximum) const {
-40039:   return max_min(expr, true, sup_n, sup_d, maximum);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline bool
-40039: Box<ITV>::maximize(const Linear_Expression& expr,
-40039:                    Coefficient& sup_n, Coefficient& sup_d, bool& maximum,
-40039:                    Generator& g) const {
-40039:   return max_min(expr, true, sup_n, sup_d, maximum, g);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline bool
-40039: Box<ITV>::minimize(const Linear_Expression& expr,
-40039:                    Coefficient& inf_n, Coefficient& inf_d,
-40039:                    bool& minimum) const {
-40039:   return max_min(expr, false, inf_n, inf_d, minimum);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline bool
-40039: Box<ITV>::minimize(const Linear_Expression& expr,
-40039:                    Coefficient& inf_n, Coefficient& inf_d, bool& minimum,
-40039:                    Generator& g) const {
-40039:   return max_min(expr, false, inf_n, inf_d, minimum, g);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline bool
-40039: Box<ITV>::strictly_contains(const Box& y) const {
-40039:   const Box& x = *this;
-40039:   return x.contains(y) && !y.contains(x);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::expand_space_dimension(const Variable var,
-40039:                                  const dimension_type m) {
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039:   if (var.space_dimension() > space_dim) {
-40039:     throw_dimension_incompatible("expand_space_dimension(v, m)", "v", var);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (m > max_space_dimension() - space_dim) {
-40039:     throw_invalid_argument("expand_dimension(v, m)",
-40039:                            "adding m new space dimensions exceeds "
-40039:                            "the maximum allowed space dimension");
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   seq.insert(seq.end(), m, seq[var.id()]);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline bool
-40039: operator!=(const Box<ITV>& x, const Box<ITV>& y) {
-40039:   return !(x == y);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline bool
-40039: Box<ITV>::has_lower_bound(const Variable var,
-40039:                           Coefficient& n, Coefficient& d, bool& closed) const {
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   const dimension_type k = var.id();
-40039:   ((void) 0);
-40039:   const ITV& seq_k = seq[k];
-40039: 
-40039:   if (seq_k.lower_is_boundary_infinity()) {
-40039:     return false;
-40039:   }
-40039:   closed = !seq_k.lower_is_open();
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_lr; mpq_class& lr = holder_lr.item();
-40039:   assign_r(lr, seq_k.lower(), ROUND_NOT_NEEDED);
-40039:   n = lr.get_num();
-40039:   d = lr.get_den();
-40039: 
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline bool
-40039: Box<ITV>::has_upper_bound(const Variable var,
-40039:                           Coefficient& n, Coefficient& d, bool& closed) const {
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   const dimension_type k = var.id();
-40039:   ((void) 0);
-40039:   const ITV& seq_k = seq[k];
-40039: 
-40039:   if (seq_k.upper_is_boundary_infinity()) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   closed = !seq_k.upper_is_open();
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_ur; mpq_class& ur = holder_ur.item();
-40039:   assign_r(ur, seq_k.upper(), ROUND_NOT_NEEDED);
-40039:   n = ur.get_num();
-40039:   d = ur.get_den();
-40039: 
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::add_constraint(const Constraint& c) {
-40039:   const dimension_type c_space_dim = c.space_dimension();
-40039: 
-40039:   if (c_space_dim > space_dimension()) {
-40039:     throw_dimension_incompatible("add_constraint(c)", c);
-40039:   }
-40039: 
-40039:   add_constraint_no_check(c);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::add_constraints(const Constraint_System& cs) {
-40039: 
-40039:   if (cs.space_dimension() > space_dimension()) {
-40039:     throw_dimension_incompatible("add_constraints(cs)", cs);
-40039:   }
-40039: 
-40039:   add_constraints_no_check(cs);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Box<T>::add_recycled_constraints(Constraint_System& cs) {
-40039:   add_constraints(cs);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::add_congruence(const Congruence& cg) {
-40039:   const dimension_type cg_space_dim = cg.space_dimension();
-40039: 
-40039:   if (cg_space_dim > space_dimension()) {
-40039:     throw_dimension_incompatible("add_congruence(cg)", cg);
-40039:   }
-40039: 
-40039:   add_congruence_no_check(cg);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::add_congruences(const Congruence_System& cgs) {
-40039:   if (cgs.space_dimension() > space_dimension()) {
-40039:     throw_dimension_incompatible("add_congruences(cgs)", cgs);
-40039:   }
-40039:   add_congruences_no_check(cgs);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Box<T>::add_recycled_congruences(Congruence_System& cgs) {
-40039:   add_congruences(cgs);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Box<T>::can_recycle_constraint_systems() {
-40039:   return false;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Box<T>::can_recycle_congruence_systems() {
-40039:   return false;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Box<T>::widening_assign(const Box& y, unsigned* tp) {
-40039:   CC76_widening_assign(y, tp);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline Congruence_System
-40039: Box<ITV>::minimized_congruences() const {
-40039: 
-40039:   return congruences();
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline I_Result
-40039: Box<ITV>
-40039: ::refine_interval_no_check(ITV& itv,
-40039:                            const Constraint::Type type,
-40039:                            Coefficient_traits::const_reference numer,
-40039:                            Coefficient_traits::const_reference denom) {
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
-40039:   assign_r(q.get_num(), numer, ROUND_NOT_NEEDED);
-40039:   assign_r(q.get_den(), denom, ROUND_NOT_NEEDED);
-40039:   q.canonicalize();
-40039: 
-40039:   q = -q;
-40039: 
-40039:   Relation_Symbol rel_sym;
-40039:   switch (type) {
-40039:   case Constraint::EQUALITY:
-40039:     rel_sym = EQUAL;
-40039:     break;
-40039:   case Constraint::NONSTRICT_INEQUALITY:
-40039:     rel_sym = (denom > 0) ? GREATER_OR_EQUAL : LESS_OR_EQUAL;
-40039:     break;
-40039:   case Constraint::STRICT_INEQUALITY:
-40039:     rel_sym = (denom > 0) ? GREATER_THAN : LESS_THAN;
-40039:     break;
-40039:   default:
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return I_ANY;
-40039:   }
-40039:   I_Result res = itv.add_constraint(i_constraint(rel_sym, q));
-40039:   ((void) 0);
-40039:   return res;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>
-40039: ::add_interval_constraint_no_check(const dimension_type var_id,
-40039:                                    const Constraint::Type type,
-40039:                                    Coefficient_traits::const_reference numer,
-40039:                                    Coefficient_traits::const_reference denom) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   refine_interval_no_check(seq[var_id], type, numer, denom);
-40039: 
-40039: 
-40039: 
-40039:   reset_empty_up_to_date();
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::refine_with_constraint(const Constraint& c) {
-40039:   const dimension_type c_space_dim = c.space_dimension();
-40039: 
-40039:   if (c_space_dim > space_dimension()) {
-40039:     throw_dimension_incompatible("refine_with_constraint(c)", c);
-40039:   }
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   refine_no_check(c);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::refine_with_constraints(const Constraint_System& cs) {
-40039: 
-40039:   if (cs.space_dimension() > space_dimension()) {
-40039:     throw_dimension_incompatible("refine_with_constraints(cs)", cs);
-40039:   }
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039:   refine_no_check(cs);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::refine_with_congruence(const Congruence& cg) {
-40039:   const dimension_type cg_space_dim = cg.space_dimension();
-40039: 
-40039:   if (cg_space_dim > space_dimension()) {
-40039:     throw_dimension_incompatible("refine_with_congruence(cg)", cg);
-40039:   }
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039:   refine_no_check(cg);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::refine_with_congruences(const Congruence_System& cgs) {
-40039: 
-40039:   if (cgs.space_dimension() > space_dimension()) {
-40039:     throw_dimension_incompatible("refine_with_congruences(cgs)", cgs);
-40039:   }
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   refine_no_check(cgs);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::propagate_constraint(const Constraint& c) {
-40039:   const dimension_type c_space_dim = c.space_dimension();
-40039: 
-40039:   if (c_space_dim > space_dimension()) {
-40039:     throw_dimension_incompatible("propagate_constraint(c)", c);
-40039:   }
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039:   propagate_constraint_no_check(c);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::propagate_constraints(const Constraint_System& cs,
-40039:                                 const dimension_type max_iterations) {
-40039: 
-40039:   if (cs.space_dimension() > space_dimension()) {
-40039:     throw_dimension_incompatible("propagate_constraints(cs)", cs);
-40039:   }
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   propagate_constraints_no_check(cs, max_iterations);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::unconstrain(const Variable var) {
-40039:   const dimension_type var_id = var.id();
-40039: 
-40039:   if (space_dimension() < var_id + 1) {
-40039:     throw_dimension_incompatible("unconstrain(var)", var_id + 1);
-40039:   }
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   ITV& seq_var = seq[var_id];
-40039:   if (seq_var.is_empty()) {
-40039:     set_empty();
-40039:   }
-40039:   else {
-40039:     seq_var.assign(UNIVERSE);
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename ITV>
-40039: inline bool
-40039: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                             const Box<ITV>& x,
-40039:                             const Box<ITV>& y,
-40039:                             const Rounding_Dir dir,
-40039:                             Temp& tmp0,
-40039:                             Temp& tmp1,
-40039:                             Temp& tmp2) {
-40039:   return l_m_distance_assign<Rectilinear_Distance_Specialization<Temp> >
-40039:     (r, x, y, dir, tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename ITV>
-40039: inline bool
-40039: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                             const Box<ITV>& x,
-40039:                             const Box<ITV>& y,
-40039:                             const Rounding_Dir dir) {
-40039:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
-40039:   return rectilinear_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename To, typename ITV>
-40039: inline bool
-40039: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                             const Box<ITV>& x,
-40039:                             const Box<ITV>& y,
-40039:                             const Rounding_Dir dir) {
-40039: 
-40039: 
-40039:   return Parma_Polyhedra_Library
-40039:     ::rectilinear_distance_assign<To, To, ITV>(r, x, y, dir);
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename ITV>
-40039: inline bool
-40039: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                           const Box<ITV>& x,
-40039:                           const Box<ITV>& y,
-40039:                           const Rounding_Dir dir,
-40039:                           Temp& tmp0,
-40039:                           Temp& tmp1,
-40039:                           Temp& tmp2) {
-40039:   return l_m_distance_assign<Euclidean_Distance_Specialization<Temp> >
-40039:     (r, x, y, dir, tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename ITV>
-40039: inline bool
-40039: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                           const Box<ITV>& x,
-40039:                           const Box<ITV>& y,
-40039:                           const Rounding_Dir dir) {
-40039:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
-40039:   return euclidean_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename To, typename ITV>
-40039: inline bool
-40039: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                           const Box<ITV>& x,
-40039:                           const Box<ITV>& y,
-40039:                           const Rounding_Dir dir) {
-40039: 
-40039: 
-40039:   return Parma_Polyhedra_Library
-40039:     ::euclidean_distance_assign<To, To, ITV>(r, x, y, dir);
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename ITV>
-40039: inline bool
-40039: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                            const Box<ITV>& x,
-40039:                            const Box<ITV>& y,
-40039:                            const Rounding_Dir dir,
-40039:                            Temp& tmp0,
-40039:                            Temp& tmp1,
-40039:                            Temp& tmp2) {
-40039:   return l_m_distance_assign<L_Infinity_Distance_Specialization<Temp> >
-40039:     (r, x, y, dir, tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename ITV>
-40039: inline bool
-40039: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                            const Box<ITV>& x,
-40039:                            const Box<ITV>& y,
-40039:                            const Rounding_Dir dir) {
-40039:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
-40039:   return l_infinity_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename To, typename ITV>
-40039: inline bool
-40039: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                            const Box<ITV>& x,
-40039:                            const Box<ITV>& y,
-40039:                            const Rounding_Dir dir) {
-40039: 
-40039: 
-40039:   return Parma_Polyhedra_Library
-40039:     ::l_infinity_distance_assign<To, To, ITV>(r, x, y, dir);
-40039: }
-40039: 
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: swap(Box<ITV>& x, Box<ITV>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 2286 "../../src/Box_defs.hh" 2
-40039: # 1 "../../src/Box_templates.hh" 1
-40039: # 30 "../../src/Box_templates.hh"
-40039: # 1 "../../src/Generator_System_defs.hh" 1
-40039: # 33 "../../src/Generator_System_defs.hh"
-40039: # 1 "../../src/Poly_Con_Relation_defs.hh" 1
-40039: # 31 "../../src/Poly_Con_Relation_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: bool operator==(const Poly_Con_Relation& x, const Poly_Con_Relation& y);
-40039: 
-40039: 
-40039: 
-40039: bool operator!=(const Poly_Con_Relation& x, const Poly_Con_Relation& y);
-40039: 
-40039: 
-40039: 
-40039: Poly_Con_Relation operator&&(const Poly_Con_Relation& x,
-40039:                              const Poly_Con_Relation& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: Poly_Con_Relation operator-(const Poly_Con_Relation& x,
-40039:                             const Poly_Con_Relation& y);
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: std::ostream& operator<<(std::ostream& s, const Poly_Con_Relation& r);
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: class Parma_Polyhedra_Library::Poly_Con_Relation {
-40039: private:
-40039: 
-40039:   typedef unsigned int flags_t;
-40039: 
-40039: 
-40039: 
-40039:   static const flags_t NOTHING = 0U;
-40039:   static const flags_t IS_DISJOINT = 1U << 0;
-40039:   static const flags_t STRICTLY_INTERSECTS = 1U << 1;
-40039:   static const flags_t IS_INCLUDED = 1U << 2;
-40039:   static const flags_t SATURATES = 1U << 3;
-40039: 
-40039: 
-40039: 
-40039:   static const flags_t EVERYTHING
-40039:   = IS_DISJOINT
-40039:   | STRICTLY_INTERSECTS
-40039:   | IS_INCLUDED
-40039:   | SATURATES;
-40039: 
-40039: 
-40039:   flags_t flags;
-40039: 
-40039: 
-40039:   static bool implies(flags_t x, flags_t y);
-40039: 
-40039: 
-40039:   Poly_Con_Relation(flags_t mask);
-40039: 
-40039:   friend bool
-40039:   operator==(const Poly_Con_Relation& x, const Poly_Con_Relation& y);
-40039:   friend bool
-40039:   operator!=(const Poly_Con_Relation& x, const Poly_Con_Relation& y);
-40039: 
-40039:   friend Poly_Con_Relation
-40039:   operator&&(const Poly_Con_Relation& x, const Poly_Con_Relation& y);
-40039: 
-40039:   friend Poly_Con_Relation
-40039:   operator-(const Poly_Con_Relation& x, const Poly_Con_Relation& y);
-40039: 
-40039:   friend std::ostream&
-40039:   Parma_Polyhedra_Library::
-40039:   IO_Operators::operator<<(std::ostream& s, const Poly_Con_Relation& r);
-40039: 
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   flags_t get_flags() const;
-40039: 
-40039: public:
-40039: 
-40039:   static Poly_Con_Relation nothing();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static Poly_Con_Relation is_disjoint();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static Poly_Con_Relation strictly_intersects();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static Poly_Con_Relation is_included();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static Poly_Con_Relation saturates();
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039:   bool implies(const Poly_Con_Relation& y) const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: };
-40039: 
-40039: # 1 "../../src/Poly_Con_Relation_inlines.hh" 1
-40039: # 27 "../../src/Poly_Con_Relation_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline
-40039: Poly_Con_Relation::Poly_Con_Relation(flags_t mask)
-40039:   : flags(mask) {
-40039: }
-40039: 
-40039: inline Poly_Con_Relation::flags_t
-40039: Poly_Con_Relation::get_flags() const {
-40039:   return flags;
-40039: }
-40039: 
-40039: inline Poly_Con_Relation
-40039: Poly_Con_Relation::nothing() {
-40039:   return Poly_Con_Relation(NOTHING);
-40039: }
-40039: 
-40039: inline Poly_Con_Relation
-40039: Poly_Con_Relation::is_disjoint() {
-40039:   return Poly_Con_Relation(IS_DISJOINT);
-40039: }
-40039: 
-40039: inline Poly_Con_Relation
-40039: Poly_Con_Relation::strictly_intersects() {
-40039:   return Poly_Con_Relation(STRICTLY_INTERSECTS);
-40039: }
-40039: 
-40039: inline Poly_Con_Relation
-40039: Poly_Con_Relation::is_included() {
-40039:   return Poly_Con_Relation(IS_INCLUDED);
-40039: }
-40039: 
-40039: inline Poly_Con_Relation
-40039: Poly_Con_Relation::saturates() {
-40039:   return Poly_Con_Relation(SATURATES);
-40039: }
-40039: 
-40039: inline bool
-40039: Poly_Con_Relation::implies(flags_t x, flags_t y) {
-40039:   return (x & y) == y;
-40039: }
-40039: 
-40039: inline bool
-40039: Poly_Con_Relation::implies(const Poly_Con_Relation& y) const {
-40039:   return implies(flags, y.flags);
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: operator==(const Poly_Con_Relation& x, const Poly_Con_Relation& y) {
-40039:   return x.flags == y.flags;
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: operator!=(const Poly_Con_Relation& x, const Poly_Con_Relation& y) {
-40039:   return x.flags != y.flags;
-40039: }
-40039: 
-40039: 
-40039: inline Poly_Con_Relation
-40039: operator&&(const Poly_Con_Relation& x, const Poly_Con_Relation& y) {
-40039:   return Poly_Con_Relation(x.flags | y.flags);
-40039: }
-40039: 
-40039: 
-40039: inline Poly_Con_Relation
-40039: operator-(const Poly_Con_Relation& x, const Poly_Con_Relation& y) {
-40039:   return Poly_Con_Relation(x.flags & ~y.flags);
-40039: }
-40039: 
-40039: }
-40039: # 165 "../../src/Poly_Con_Relation_defs.hh" 2
-40039: # 34 "../../src/Generator_System_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: std::ostream& operator<<(std::ostream& s, const Generator_System& gs);
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: bool operator==(const Generator_System& x, const Generator_System& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: bool operator!=(const Generator_System& x, const Generator_System& y);
-40039: 
-40039: 
-40039: void
-40039: swap(Generator_System& x, Generator_System& y);
-40039: 
-40039: }
-40039: # 188 "../../src/Generator_System_defs.hh"
-40039: class Parma_Polyhedra_Library::Generator_System {
-40039: public:
-40039:   typedef Generator row_type;
-40039: 
-40039:   static const Representation default_representation = SPARSE;
-40039: 
-40039: 
-40039:   Generator_System(Representation r = default_representation);
-40039: 
-40039: 
-40039:   explicit Generator_System(const Generator& g,
-40039:                             Representation r = default_representation);
-40039: 
-40039: 
-40039: 
-40039:   Generator_System(const Generator_System& gs);
-40039: 
-40039: 
-40039:   Generator_System(const Generator_System& gs, Representation r);
-40039: 
-40039: 
-40039:   ~Generator_System();
-40039: 
-40039: 
-40039:   Generator_System& operator=(const Generator_System& y);
-40039: 
-40039: 
-40039:   Representation representation() const;
-40039: 
-40039: 
-40039:   void set_representation(Representation r);
-40039: 
-40039: 
-40039:   static dimension_type max_space_dimension();
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039:   void set_space_dimension(dimension_type space_dim);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void clear();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void insert(const Generator& g);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void insert(Generator& g, Recycle_Input);
-40039: 
-40039: 
-40039:   static void initialize();
-40039: 
-40039: 
-40039:   static void finalize();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Generator_System& zero_dim_univ();
-40039: 
-40039:   typedef Generator_System_const_iterator const_iterator;
-40039: 
-40039: 
-40039:   bool empty() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const_iterator begin() const;
-40039: 
-40039: 
-40039:   const_iterator end() const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: # 287 "../../src/Generator_System_defs.hh"
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   void m_swap(Generator_System& y);
-40039: 
-40039: private:
-40039: 
-40039:   bool has_no_rows() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void remove_space_dimensions(const Variables_Set& vars);
-40039: 
-40039: 
-40039: 
-40039:   void shift_space_dimensions(Variable v, dimension_type n);
-40039: # 326 "../../src/Generator_System_defs.hh"
-40039:   void permute_space_dimensions(const std::vector<Variable>& cycle);
-40039: 
-40039: 
-40039:   void swap_space_dimensions(Variable v1, Variable v2);
-40039: 
-40039:   dimension_type num_rows() const;
-40039: # 346 "../../src/Generator_System_defs.hh"
-40039:   void add_universe_rows_and_space_dimensions(dimension_type n);
-40039: 
-40039:   Topology topology() const;
-40039: 
-40039: 
-40039:   dimension_type first_pending_row() const;
-40039: 
-40039: 
-40039:   void unset_pending_rows();
-40039: 
-40039: 
-40039:   void set_sorted(bool b);
-40039: 
-40039: 
-40039:   bool is_sorted() const;
-40039: 
-40039: 
-40039:   void set_index_first_pending_row(dimension_type i);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_necessarily_closed() const;
-40039: 
-40039: 
-40039:   void assign_with_pending(const Generator_System& y);
-40039: 
-40039: 
-40039:   dimension_type num_pending_rows() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void sort_pending_and_remove_duplicates();
-40039: # 390 "../../src/Generator_System_defs.hh"
-40039:   void sort_and_remove_with_sat(Bit_Matrix& sat);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void sort_rows();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool check_sorted() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type num_lines_or_equalities() const;
-40039: # 418 "../../src/Generator_System_defs.hh"
-40039:   void remove_row(dimension_type i, bool keep_sorted = false);
-40039: # 428 "../../src/Generator_System_defs.hh"
-40039:   void remove_rows(dimension_type first, dimension_type last,
-40039:                    bool keep_sorted = false);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void remove_rows(const std::vector<dimension_type>& indexes);
-40039: 
-40039: 
-40039:   void remove_trailing_rows(dimension_type n);
-40039: # 454 "../../src/Generator_System_defs.hh"
-40039:   dimension_type gauss(dimension_type n_lines_or_equalities);
-40039: # 466 "../../src/Generator_System_defs.hh"
-40039:   void back_substitute(dimension_type n_lines_or_equalities);
-40039: 
-40039: 
-40039:   void strong_normalize();
-40039: # 479 "../../src/Generator_System_defs.hh"
-40039:   void merge_rows_assign(const Generator_System& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void insert(const Generator_System& y);
-40039: 
-40039: 
-40039:   void insert_pending(const Generator_System& r);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Generator_System* zero_dim_univ_p;
-40039: 
-40039:   friend class Generator_System_const_iterator;
-40039: 
-40039: 
-40039:   explicit Generator_System(Topology topol,
-40039:                             Representation r = default_representation);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Generator_System(Topology topol, dimension_type space_dim,
-40039:                    Representation r = default_representation);
-40039: # 517 "../../src/Generator_System_defs.hh"
-40039:   bool adjust_topology_and_space_dimension(Topology new_topology,
-40039:                                            dimension_type new_space_dim);
-40039: # 527 "../../src/Generator_System_defs.hh"
-40039:   void add_corresponding_points();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool has_points() const;
-40039: # 542 "../../src/Generator_System_defs.hh"
-40039:   void add_corresponding_closure_points();
-40039: # 554 "../../src/Generator_System_defs.hh"
-40039:   bool has_closure_points() const;
-40039: 
-40039: 
-40039: 
-40039:   void convert_into_non_necessarily_closed();
-40039: 
-40039: 
-40039:   const Generator& operator[](dimension_type k) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Poly_Con_Relation
-40039:   relation_with(const Constraint& c) const;
-40039: 
-40039: 
-40039:   bool satisfied_by_all_generators(const Constraint& c) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool satisfied_by_all_generators_C(const Constraint& c) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool satisfied_by_all_generators_NNC(const Constraint& c) const;
-40039: # 612 "../../src/Generator_System_defs.hh"
-40039:   void affine_image(Variable v,
-40039:                     const Linear_Expression& expr,
-40039:                     Coefficient_traits::const_reference denominator);
-40039: 
-40039: 
-40039:   dimension_type num_lines() const;
-40039: 
-40039: 
-40039:   dimension_type num_rays() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void remove_invalid_lines_and_rays();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void simplify();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void insert_pending(const Generator& g);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void insert_pending(Generator& g, Recycle_Input);
-40039: 
-40039:   Linear_System<Generator> sys;
-40039: 
-40039:   friend bool
-40039:   operator==(const Generator_System& x, const Generator_System& y);
-40039: 
-40039:   friend class Polyhedron;
-40039: };
-40039: # 680 "../../src/Generator_System_defs.hh"
-40039: class Parma_Polyhedra_Library::Generator_System_const_iterator
-40039:   : public std::iterator<std::forward_iterator_tag,
-40039:         Generator,
-40039:         std::ptrdiff_t,
-40039:         const Generator*,
-40039:         const Generator&> {
-40039: public:
-40039: 
-40039:   Generator_System_const_iterator();
-40039: 
-40039: 
-40039:   Generator_System_const_iterator(const Generator_System_const_iterator& y);
-40039: 
-40039: 
-40039:   ~Generator_System_const_iterator();
-40039: 
-40039: 
-40039:   Generator_System_const_iterator& operator=(const Generator_System_const_iterator& y);
-40039: 
-40039: 
-40039:   const Generator& operator*() const;
-40039: 
-40039: 
-40039:   const Generator* operator->() const;
-40039: 
-40039: 
-40039:   Generator_System_const_iterator& operator++();
-40039: 
-40039: 
-40039:   Generator_System_const_iterator operator++(int);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool operator==(const Generator_System_const_iterator& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool operator!=(const Generator_System_const_iterator& y) const;
-40039: 
-40039: private:
-40039:   friend class Generator_System;
-40039: 
-40039: 
-40039:   Linear_System<Generator>::const_iterator i;
-40039: 
-40039: 
-40039:   const Linear_System<Generator>* gsp;
-40039: 
-40039: 
-40039:   Generator_System_const_iterator(const Linear_System<Generator>::const_iterator& iter,
-40039:       const Generator_System& gsys);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void skip_forward();
-40039: };
-40039: # 31 "../../src/Box_templates.hh" 2
-40039: # 1 "../../src/Generator_System_inlines.hh" 1
-40039: # 29 "../../src/Generator_System_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline
-40039: Generator_System::Generator_System(Representation r)
-40039:   : sys(NECESSARILY_CLOSED, r) {
-40039: }
-40039: 
-40039: inline
-40039: Generator_System::Generator_System(const Generator& g, Representation r)
-40039:   : sys(g.topology(), r) {
-40039:   sys.insert(g);
-40039: }
-40039: 
-40039: inline
-40039: Generator_System::Generator_System(const Generator_System& gs)
-40039:   : sys(gs.sys) {
-40039: }
-40039: 
-40039: inline
-40039: Generator_System::Generator_System(const Generator_System& gs,
-40039:                                    Representation r)
-40039:   : sys(gs.sys, r) {
-40039: }
-40039: 
-40039: inline
-40039: Generator_System::Generator_System(const Topology topol, Representation r)
-40039:   : sys(topol, r) {
-40039: }
-40039: 
-40039: inline
-40039: Generator_System::Generator_System(const Topology topol,
-40039:                                    const dimension_type space_dim,
-40039:                                    Representation r)
-40039:   : sys(topol, space_dim, r) {
-40039: }
-40039: 
-40039: inline
-40039: Generator_System::~Generator_System() {
-40039: }
-40039: 
-40039: inline Generator_System&
-40039: Generator_System::operator=(const Generator_System& y) {
-40039:   Generator_System tmp = y;
-40039:   swap(*this, tmp);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline Representation
-40039: Generator_System::representation() const {
-40039:   return sys.representation();
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System::set_representation(Representation r) {
-40039:   sys.set_representation(r);
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Generator_System::max_space_dimension() {
-40039:   return Linear_System<Generator>::max_space_dimension();
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Generator_System::space_dimension() const {
-40039:   return sys.space_dimension();
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System::set_space_dimension(dimension_type space_dim) {
-40039:   const dimension_type old_space_dim = space_dimension();
-40039:   sys.set_space_dimension_no_ok(space_dim);
-40039: 
-40039:   if (space_dim < old_space_dim) {
-40039: 
-40039:     remove_invalid_lines_and_rays();
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System::clear() {
-40039:   sys.clear();
-40039: }
-40039: 
-40039: inline const Generator&
-40039: Generator_System::operator[](const dimension_type k) const {
-40039:   return sys[k];
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System
-40039: ::remove_space_dimensions(const Variables_Set& vars) {
-40039:   sys.remove_space_dimensions(vars);
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System
-40039: ::shift_space_dimensions(Variable v, dimension_type n) {
-40039:   sys.shift_space_dimensions(v, n);
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System
-40039: ::permute_space_dimensions(const std::vector<Variable>& cycle) {
-40039:   sys.permute_space_dimensions(cycle);
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System
-40039: ::swap_space_dimensions(Variable v1, Variable v2) {
-40039:   sys.swap_space_dimensions(v1, v2);
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Generator_System::num_rows() const {
-40039:   return sys.num_rows();
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System::add_universe_rows_and_space_dimensions(dimension_type n) {
-40039:   sys.add_universe_rows_and_space_dimensions(n);
-40039: }
-40039: 
-40039: inline Topology
-40039: Generator_System::topology() const {
-40039:   return sys.topology();
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Generator_System::first_pending_row() const {
-40039:   return sys.first_pending_row();
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System::unset_pending_rows() {
-40039:   sys.unset_pending_rows();
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System::set_sorted(bool b) {
-40039:   sys.set_sorted(b);
-40039: }
-40039: 
-40039: inline bool
-40039: Generator_System::is_sorted() const {
-40039:   return sys.is_sorted();
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System::set_index_first_pending_row(dimension_type i) {
-40039:   sys.set_index_first_pending_row(i);
-40039: }
-40039: 
-40039: inline bool
-40039: Generator_System::is_necessarily_closed() const {
-40039:   return sys.is_necessarily_closed();
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System::assign_with_pending(const Generator_System& y) {
-40039:   sys.assign_with_pending(y.sys);
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Generator_System::num_pending_rows() const {
-40039:   return sys.num_pending_rows();
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System::sort_pending_and_remove_duplicates() {
-40039:   return sys.sort_pending_and_remove_duplicates();
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System::sort_and_remove_with_sat(Bit_Matrix& sat) {
-40039:   sys.sort_and_remove_with_sat(sat);
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System::sort_rows() {
-40039:   sys.sort_rows();
-40039: }
-40039: 
-40039: inline bool
-40039: Generator_System::check_sorted() const {
-40039:   return sys.check_sorted();
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Generator_System::num_lines_or_equalities() const {
-40039:   return sys.num_lines_or_equalities();
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System::remove_row(dimension_type i, bool keep_sorted) {
-40039:   sys.remove_row(i, keep_sorted);
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System::remove_rows(dimension_type first, dimension_type last,
-40039:                               bool keep_sorted) {
-40039:   sys.remove_rows(first, last, keep_sorted);
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System::remove_rows(const std::vector<dimension_type>& indexes) {
-40039:   sys.remove_rows(indexes);
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System::remove_trailing_rows(dimension_type n) {
-40039:   sys.remove_trailing_rows(n);
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Generator_System::gauss(dimension_type n_lines_or_equalities) {
-40039:   return sys.gauss(n_lines_or_equalities);
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System::back_substitute(dimension_type n_lines_or_equalities) {
-40039:   sys.back_substitute(n_lines_or_equalities);
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System::strong_normalize() {
-40039:   sys.strong_normalize();
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System::merge_rows_assign(const Generator_System& y) {
-40039:   sys.merge_rows_assign(y.sys);
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System::insert(const Generator_System& y) {
-40039:   sys.insert(y.sys);
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System::insert_pending(const Generator_System& r) {
-40039:   sys.insert_pending(r.sys);
-40039: }
-40039: 
-40039: inline bool
-40039: operator==(const Generator_System& x, const Generator_System& y) {
-40039:   return x.sys == y.sys;
-40039: }
-40039: 
-40039: inline bool
-40039: operator!=(const Generator_System& x, const Generator_System& y) {
-40039:   return !(x == y);
-40039: }
-40039: 
-40039: inline
-40039: Generator_System_const_iterator::Generator_System_const_iterator()
-40039:   : i(), gsp(0) {
-40039: }
-40039: 
-40039: inline
-40039: Generator_System_const_iterator::Generator_System_const_iterator(const Generator_System_const_iterator& y)
-40039:   : i(y.i), gsp(y.gsp) {
-40039: }
-40039: 
-40039: inline
-40039: Generator_System_const_iterator::~Generator_System_const_iterator() {
-40039: }
-40039: 
-40039: inline
-40039: Generator_System_const_iterator&
-40039: Generator_System_const_iterator::operator=(const Generator_System_const_iterator& y) {
-40039:   i = y.i;
-40039:   gsp = y.gsp;
-40039:   return *this;
-40039: }
-40039: 
-40039: inline const Generator&
-40039: Generator_System_const_iterator::operator*() const {
-40039:   return *i;
-40039: }
-40039: 
-40039: inline const Generator*
-40039: Generator_System_const_iterator::operator->() const {
-40039:   return i.operator->();
-40039: }
-40039: 
-40039: inline Generator_System_const_iterator&
-40039: Generator_System_const_iterator::operator++() {
-40039:   ++i;
-40039:   if (!gsp->is_necessarily_closed()) {
-40039:     skip_forward();
-40039:   }
-40039:   return *this;
-40039: }
-40039: 
-40039: inline Generator_System_const_iterator
-40039: Generator_System_const_iterator::operator++(int) {
-40039:   const Generator_System_const_iterator tmp = *this;
-40039:   operator++();
-40039:   return tmp;
-40039: }
-40039: 
-40039: inline bool
-40039: Generator_System_const_iterator::operator==(const Generator_System_const_iterator& y) const {
-40039:   return i == y.i;
-40039: }
-40039: 
-40039: inline bool
-40039: Generator_System_const_iterator::operator!=(const Generator_System_const_iterator& y) const {
-40039:   return i != y.i;
-40039: }
-40039: 
-40039: inline
-40039: Generator_System_const_iterator::
-40039: Generator_System_const_iterator(const Linear_System<Generator>::const_iterator& iter,
-40039:                                 const Generator_System& gs)
-40039:   : i(iter), gsp(&gs.sys) {
-40039: }
-40039: 
-40039: inline bool
-40039: Generator_System::empty() const {
-40039:   return sys.has_no_rows();
-40039: }
-40039: 
-40039: inline bool
-40039: Generator_System::has_no_rows() const {
-40039:   return sys.has_no_rows();
-40039: }
-40039: 
-40039: inline Generator_System::const_iterator
-40039: Generator_System::begin() const {
-40039:   const_iterator i(sys.begin(), *this);
-40039:   if (!sys.is_necessarily_closed()) {
-40039:     i.skip_forward();
-40039:   }
-40039:   return i;
-40039: }
-40039: 
-40039: inline Generator_System::const_iterator
-40039: Generator_System::end() const {
-40039:   const const_iterator i(sys.end(), *this);
-40039:   return i;
-40039: }
-40039: 
-40039: inline const Generator_System&
-40039: Generator_System::zero_dim_univ() {
-40039:   ((void) 0);
-40039:   return *zero_dim_univ_p;
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System::m_swap(Generator_System& y) {
-40039:   swap(sys, y.sys);
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Generator_System::external_memory_in_bytes() const {
-40039:   return sys.external_memory_in_bytes();
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Generator_System::total_memory_in_bytes() const {
-40039:   return external_memory_in_bytes() + sizeof(*this);
-40039: }
-40039: 
-40039: inline void
-40039: Generator_System::simplify() {
-40039:   sys.simplify();
-40039:   remove_invalid_lines_and_rays();
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: swap(Generator_System& x, Generator_System& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 32 "../../src/Box_templates.hh" 2
-40039: 
-40039: # 1 "../../src/Poly_Gen_Relation_defs.hh" 1
-40039: # 31 "../../src/Poly_Gen_Relation_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: bool operator==(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y);
-40039: 
-40039: 
-40039: 
-40039: bool operator!=(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y);
-40039: 
-40039: 
-40039: 
-40039: Poly_Gen_Relation operator&&(const Poly_Gen_Relation& x,
-40039:                              const Poly_Gen_Relation& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: Poly_Gen_Relation operator-(const Poly_Gen_Relation& x,
-40039:                             const Poly_Gen_Relation& y);
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: std::ostream& operator<<(std::ostream& s, const Poly_Gen_Relation& r);
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: class Parma_Polyhedra_Library::Poly_Gen_Relation {
-40039: private:
-40039: 
-40039:   typedef unsigned int flags_t;
-40039: 
-40039: 
-40039: 
-40039:   static const flags_t NOTHING = 0U;
-40039:   static const flags_t SUBSUMES = 1U << 0;
-40039: 
-40039: 
-40039: 
-40039:   static const flags_t EVERYTHING
-40039:   = SUBSUMES;
-40039: 
-40039: 
-40039:   flags_t flags;
-40039: 
-40039: 
-40039:   static bool implies(flags_t x, flags_t y);
-40039: 
-40039: 
-40039:   Poly_Gen_Relation(flags_t mask);
-40039: 
-40039:   friend bool
-40039:   operator==(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y);
-40039:   friend bool
-40039:   operator!=(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y);
-40039: 
-40039:   friend Poly_Gen_Relation
-40039:   operator&&(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y);
-40039: 
-40039:   friend Poly_Gen_Relation
-40039:   operator-(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y);
-40039: 
-40039:   friend std::ostream&
-40039:   Parma_Polyhedra_Library::
-40039:   IO_Operators::operator<<(std::ostream& s, const Poly_Gen_Relation& r);
-40039: 
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   flags_t get_flags() const;
-40039: 
-40039: public:
-40039: 
-40039:   static Poly_Gen_Relation nothing();
-40039: 
-40039: 
-40039:   static Poly_Gen_Relation subsumes();
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039:   bool implies(const Poly_Gen_Relation& y) const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: };
-40039: 
-40039: # 1 "../../src/Poly_Gen_Relation_inlines.hh" 1
-40039: # 27 "../../src/Poly_Gen_Relation_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline
-40039: Poly_Gen_Relation::Poly_Gen_Relation(flags_t mask)
-40039:   : flags(mask) {
-40039: }
-40039: 
-40039: inline Poly_Gen_Relation::flags_t
-40039: Poly_Gen_Relation::get_flags() const {
-40039:   return flags;
-40039: }
-40039: 
-40039: inline Poly_Gen_Relation
-40039: Poly_Gen_Relation::nothing() {
-40039:   return Poly_Gen_Relation(NOTHING);
-40039: }
-40039: 
-40039: inline Poly_Gen_Relation
-40039: Poly_Gen_Relation::subsumes() {
-40039:   return Poly_Gen_Relation(SUBSUMES);
-40039: }
-40039: 
-40039: inline bool
-40039: Poly_Gen_Relation::implies(flags_t x, flags_t y) {
-40039:   return (x & y) == y;
-40039: }
-40039: 
-40039: inline bool
-40039: Poly_Gen_Relation::implies(const Poly_Gen_Relation& y) const {
-40039:   return implies(flags, y.flags);
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: operator==(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y) {
-40039:   return x.flags == y.flags;
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: operator!=(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y) {
-40039:   return x.flags != y.flags;
-40039: }
-40039: 
-40039: 
-40039: inline Poly_Gen_Relation
-40039: operator&&(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y) {
-40039:   return Poly_Gen_Relation(x.flags | y.flags);
-40039: }
-40039: 
-40039: 
-40039: inline Poly_Gen_Relation
-40039: operator-(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y) {
-40039:   return Poly_Gen_Relation(x.flags & ~y.flags);
-40039: }
-40039: 
-40039: }
-40039: # 138 "../../src/Poly_Gen_Relation_defs.hh" 2
-40039: # 34 "../../src/Box_templates.hh" 2
-40039: # 1 "../../src/Polyhedron_defs.hh" 1
-40039: # 45 "../../src/Polyhedron_defs.hh"
-40039: # 1 "../../src/H79_Certificate_types.hh" 1
-40039: # 16 "../../src/H79_Certificate_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class H79_Certificate;
-40039: 
-40039: }
-40039: # 46 "../../src/Polyhedron_defs.hh" 2
-40039: # 54 "../../src/Polyhedron_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace IO_Operators {
-40039: # 67 "../../src/Polyhedron_defs.hh"
-40039: std::ostream&
-40039: operator<<(std::ostream& s, const Polyhedron& ph);
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: void swap(Polyhedron& x, Polyhedron& y);
-40039: # 84 "../../src/Polyhedron_defs.hh"
-40039: bool operator==(const Polyhedron& x, const Polyhedron& y);
-40039: # 94 "../../src/Polyhedron_defs.hh"
-40039: bool operator!=(const Polyhedron& x, const Polyhedron& y);
-40039: 
-40039: namespace Interfaces {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: bool is_necessarily_closed_for_interfaces(const Polyhedron& ph);
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 369 "../../src/Polyhedron_defs.hh"
-40039: class Parma_Polyhedra_Library::Polyhedron {
-40039: public:
-40039: 
-40039:   typedef Coefficient coefficient_type;
-40039: 
-40039: 
-40039:   static dimension_type max_space_dimension();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static bool can_recycle_constraint_systems();
-40039: 
-40039: 
-40039:   static void initialize();
-40039: 
-40039: 
-40039:   static void finalize();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static bool can_recycle_congruence_systems();
-40039: 
-40039: protected:
-40039: # 406 "../../src/Polyhedron_defs.hh"
-40039:   Polyhedron(Topology topol,
-40039:              dimension_type num_dimensions,
-40039:              Degenerate_Element kind);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Polyhedron(const Polyhedron& y,
-40039:              Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 430 "../../src/Polyhedron_defs.hh"
-40039:   Polyhedron(Topology topol, const Constraint_System& cs);
-40039: # 451 "../../src/Polyhedron_defs.hh"
-40039:   Polyhedron(Topology topol, Constraint_System& cs, Recycle_Input dummy);
-40039: # 467 "../../src/Polyhedron_defs.hh"
-40039:   Polyhedron(Topology topol, const Generator_System& gs);
-40039: # 489 "../../src/Polyhedron_defs.hh"
-40039:   Polyhedron(Topology topol, Generator_System& gs, Recycle_Input dummy);
-40039: # 505 "../../src/Polyhedron_defs.hh"
-40039:   template <typename Interval>
-40039:   Polyhedron(Topology topol, const Box<Interval>& box,
-40039:              Complexity_Class complexity = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Polyhedron& operator=(const Polyhedron& y);
-40039: 
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type affine_dimension() const;
-40039: 
-40039: 
-40039:   const Constraint_System& constraints() const;
-40039: 
-40039: 
-40039:   const Constraint_System& minimized_constraints() const;
-40039: 
-40039: 
-40039:   const Generator_System& generators() const;
-40039: 
-40039: 
-40039:   const Generator_System& minimized_generators() const;
-40039: 
-40039: 
-40039:   Congruence_System congruences() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Congruence_System minimized_congruences() const;
-40039: # 558 "../../src/Polyhedron_defs.hh"
-40039:   Poly_Con_Relation relation_with(const Constraint& c) const;
-40039: # 567 "../../src/Polyhedron_defs.hh"
-40039:   Poly_Gen_Relation relation_with(const Generator& g) const;
-40039: # 576 "../../src/Polyhedron_defs.hh"
-40039:   Poly_Con_Relation relation_with(const Congruence& cg) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_empty() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_universe() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_topologically_closed() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_disjoint_from(const Polyhedron& y) const;
-40039: 
-40039: 
-40039:   bool is_discrete() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_bounded() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool contains_integer_point() const;
-40039: # 626 "../../src/Polyhedron_defs.hh"
-40039:   bool constrains(Variable var) const;
-40039: # 635 "../../src/Polyhedron_defs.hh"
-40039:   bool bounds_from_above(const Linear_Expression& expr) const;
-40039: # 644 "../../src/Polyhedron_defs.hh"
-40039:   bool bounds_from_below(const Linear_Expression& expr) const;
-40039: # 670 "../../src/Polyhedron_defs.hh"
-40039:   bool maximize(const Linear_Expression& expr,
-40039:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum) const;
-40039: # 701 "../../src/Polyhedron_defs.hh"
-40039:   bool maximize(const Linear_Expression& expr,
-40039:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum,
-40039:                 Generator& g) const;
-40039: # 729 "../../src/Polyhedron_defs.hh"
-40039:   bool minimize(const Linear_Expression& expr,
-40039:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum) const;
-40039: # 760 "../../src/Polyhedron_defs.hh"
-40039:   bool minimize(const Linear_Expression& expr,
-40039:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum,
-40039:                 Generator& g) const;
-40039: # 792 "../../src/Polyhedron_defs.hh"
-40039:   bool frequency(const Linear_Expression& expr,
-40039:                  Coefficient& freq_n, Coefficient& freq_d,
-40039:                  Coefficient& val_n, Coefficient& val_d) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool contains(const Polyhedron& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool strictly_contains(const Polyhedron& y) const;
-40039: # 829 "../../src/Polyhedron_defs.hh"
-40039:   bool OK(bool check_not_empty = false) const;
-40039: # 848 "../../src/Polyhedron_defs.hh"
-40039:   void add_constraint(const Constraint& c);
-40039: # 859 "../../src/Polyhedron_defs.hh"
-40039:   void add_generator(const Generator& g);
-40039: # 870 "../../src/Polyhedron_defs.hh"
-40039:   void add_congruence(const Congruence& cg);
-40039: # 884 "../../src/Polyhedron_defs.hh"
-40039:   void add_constraints(const Constraint_System& cs);
-40039: # 902 "../../src/Polyhedron_defs.hh"
-40039:   void add_recycled_constraints(Constraint_System& cs);
-40039: # 917 "../../src/Polyhedron_defs.hh"
-40039:   void add_generators(const Generator_System& gs);
-40039: # 936 "../../src/Polyhedron_defs.hh"
-40039:   void add_recycled_generators(Generator_System& gs);
-40039: # 950 "../../src/Polyhedron_defs.hh"
-40039:   void add_congruences(const Congruence_System& cgs);
-40039: # 968 "../../src/Polyhedron_defs.hh"
-40039:   void add_recycled_congruences(Congruence_System& cgs);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void refine_with_constraint(const Constraint& c);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void refine_with_congruence(const Congruence& cg);
-40039: # 996 "../../src/Polyhedron_defs.hh"
-40039:   void refine_with_constraints(const Constraint_System& cs);
-40039: # 1008 "../../src/Polyhedron_defs.hh"
-40039:   void refine_with_congruences(const Congruence_System& cgs);
-40039: # 1035 "../../src/Polyhedron_defs.hh"
-40039:   template <typename FP_Format, typename Interval_Info>
-40039:   void refine_with_linear_form_inequality(
-40039:   const Linear_Form< Interval<FP_Format, Interval_Info> >& left,
-40039:   const Linear_Form< Interval<FP_Format, Interval_Info> >& right,
-40039:   bool is_strict = false);
-40039: # 1069 "../../src/Polyhedron_defs.hh"
-40039:   template <typename FP_Format, typename Interval_Info>
-40039:   void generalized_refine_with_linear_form_inequality(
-40039:   const Linear_Form< Interval<FP_Format, Interval_Info> >& left,
-40039:   const Linear_Form< Interval<FP_Format, Interval_Info> >& right,
-40039:   Relation_Symbol relsym);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename FP_Format, typename Interval_Info>
-40039:   void refine_fp_interval_abstract_store(
-40039:        Box< Interval<FP_Format, Interval_Info> >& store)
-40039:        const;
-40039: # 1095 "../../src/Polyhedron_defs.hh"
-40039:   void unconstrain(Variable var);
-40039: # 1109 "../../src/Polyhedron_defs.hh"
-40039:   void unconstrain(const Variables_Set& vars);
-40039: # 1118 "../../src/Polyhedron_defs.hh"
-40039:   void intersection_assign(const Polyhedron& y);
-40039: # 1127 "../../src/Polyhedron_defs.hh"
-40039:   void poly_hull_assign(const Polyhedron& y);
-40039: 
-40039: 
-40039:   void upper_bound_assign(const Polyhedron& y);
-40039: # 1141 "../../src/Polyhedron_defs.hh"
-40039:   void poly_difference_assign(const Polyhedron& y);
-40039: 
-40039: 
-40039:   void difference_assign(const Polyhedron& y);
-40039: # 1155 "../../src/Polyhedron_defs.hh"
-40039:   bool simplify_using_context_assign(const Polyhedron& y);
-40039: # 1246 "../../src/Polyhedron_defs.hh"
-40039:   void affine_image(Variable var,
-40039:                     const Linear_Expression& expr,
-40039:                     Coefficient_traits::const_reference denominator
-40039:                       = Coefficient_one());
-40039: # 1273 "../../src/Polyhedron_defs.hh"
-40039:   template <typename FP_Format, typename Interval_Info>
-40039:   void affine_form_image(Variable var,
-40039:   const Linear_Form<Interval <FP_Format, Interval_Info> >& lf);
-40039: # 1364 "../../src/Polyhedron_defs.hh"
-40039:   void affine_preimage(Variable var,
-40039:                        const Linear_Expression& expr,
-40039:                        Coefficient_traits::const_reference denominator
-40039:                          = Coefficient_one());
-40039: # 1395 "../../src/Polyhedron_defs.hh"
-40039:   void generalized_affine_image(Variable var,
-40039:                                 Relation_Symbol relsym,
-40039:                                 const Linear_Expression& expr,
-40039:                                 Coefficient_traits::const_reference denominator
-40039:                                 = Coefficient_one());
-40039: # 1427 "../../src/Polyhedron_defs.hh"
-40039:   void
-40039:   generalized_affine_preimage(Variable var,
-40039:                               Relation_Symbol relsym,
-40039:                               const Linear_Expression& expr,
-40039:                               Coefficient_traits::const_reference denominator
-40039:                               = Coefficient_one());
-40039: # 1454 "../../src/Polyhedron_defs.hh"
-40039:   void generalized_affine_image(const Linear_Expression& lhs,
-40039:                                 Relation_Symbol relsym,
-40039:                                 const Linear_Expression& rhs);
-40039: # 1478 "../../src/Polyhedron_defs.hh"
-40039:   void generalized_affine_preimage(const Linear_Expression& lhs,
-40039:                                    Relation_Symbol relsym,
-40039:                                    const Linear_Expression& rhs);
-40039: # 1508 "../../src/Polyhedron_defs.hh"
-40039:   void bounded_affine_image(Variable var,
-40039:                             const Linear_Expression& lb_expr,
-40039:                             const Linear_Expression& ub_expr,
-40039:                             Coefficient_traits::const_reference denominator
-40039:                             = Coefficient_one());
-40039: # 1540 "../../src/Polyhedron_defs.hh"
-40039:   void bounded_affine_preimage(Variable var,
-40039:                                const Linear_Expression& lb_expr,
-40039:                                const Linear_Expression& ub_expr,
-40039:                                Coefficient_traits::const_reference denominator
-40039:                                = Coefficient_one());
-40039: # 1554 "../../src/Polyhedron_defs.hh"
-40039:   void time_elapse_assign(const Polyhedron& y);
-40039: # 1565 "../../src/Polyhedron_defs.hh"
-40039:   void positive_time_elapse_assign(const Polyhedron& y);
-40039: # 1613 "../../src/Polyhedron_defs.hh"
-40039:   void wrap_assign(const Variables_Set& vars,
-40039:                    Bounded_Integer_Type_Width w,
-40039:                    Bounded_Integer_Type_Representation r,
-40039:                    Bounded_Integer_Type_Overflow o,
-40039:                    const Constraint_System* cs_p = 0,
-40039:                    unsigned complexity_threshold = 16,
-40039:                    bool wrap_individually = true);
-40039: # 1632 "../../src/Polyhedron_defs.hh"
-40039:   void drop_some_non_integer_points(Complexity_Class complexity
-40039:                                     = ANY_COMPLEXITY);
-40039: # 1650 "../../src/Polyhedron_defs.hh"
-40039:   void drop_some_non_integer_points(const Variables_Set& vars,
-40039:                                     Complexity_Class complexity
-40039:                                     = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039:   void topological_closure_assign();
-40039: # 1673 "../../src/Polyhedron_defs.hh"
-40039:   void BHRZ03_widening_assign(const Polyhedron& y, unsigned* tp = 0);
-40039: # 1696 "../../src/Polyhedron_defs.hh"
-40039:   void limited_BHRZ03_extrapolation_assign(const Polyhedron& y,
-40039:                                            const Constraint_System& cs,
-40039:                                            unsigned* tp = 0);
-40039: # 1721 "../../src/Polyhedron_defs.hh"
-40039:   void bounded_BHRZ03_extrapolation_assign(const Polyhedron& y,
-40039:                                            const Constraint_System& cs,
-40039:                                            unsigned* tp = 0);
-40039: # 1741 "../../src/Polyhedron_defs.hh"
-40039:   void H79_widening_assign(const Polyhedron& y, unsigned* tp = 0);
-40039: 
-40039: 
-40039:   void widening_assign(const Polyhedron& y, unsigned* tp = 0);
-40039: # 1767 "../../src/Polyhedron_defs.hh"
-40039:   void limited_H79_extrapolation_assign(const Polyhedron& y,
-40039:                                         const Constraint_System& cs,
-40039:                                         unsigned* tp = 0);
-40039: # 1792 "../../src/Polyhedron_defs.hh"
-40039:   void bounded_H79_extrapolation_assign(const Polyhedron& y,
-40039:                                         const Constraint_System& cs,
-40039:                                         unsigned* tp = 0);
-40039: # 1826 "../../src/Polyhedron_defs.hh"
-40039:   void add_space_dimensions_and_embed(dimension_type m);
-40039: # 1853 "../../src/Polyhedron_defs.hh"
-40039:   void add_space_dimensions_and_project(dimension_type m);
-40039: # 1866 "../../src/Polyhedron_defs.hh"
-40039:   void concatenate_assign(const Polyhedron& y);
-40039: # 1878 "../../src/Polyhedron_defs.hh"
-40039:   void remove_space_dimensions(const Variables_Set& vars);
-40039: # 1888 "../../src/Polyhedron_defs.hh"
-40039:   void remove_higher_space_dimensions(dimension_type new_dimension);
-40039: # 1930 "../../src/Polyhedron_defs.hh"
-40039:   template <typename Partial_Function>
-40039:   void map_space_dimensions(const Partial_Function& pfunc);
-40039: # 1954 "../../src/Polyhedron_defs.hh"
-40039:   void expand_space_dimension(Variable var, dimension_type m);
-40039: # 1979 "../../src/Polyhedron_defs.hh"
-40039:   void fold_space_dimensions(const Variables_Set& vars, Variable dest);
-40039: 
-40039: 
-40039: 
-40039:   friend bool operator==(const Polyhedron& x, const Polyhedron& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   ~Polyhedron();
-40039: # 1998 "../../src/Polyhedron_defs.hh"
-40039:   void m_swap(Polyhedron& y);
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   int32_t hash_code() const;
-40039: 
-40039: 
-40039: 
-40039: private:
-40039:   static const Representation default_con_sys_repr = DENSE;
-40039:   static const Representation default_gen_sys_repr = DENSE;
-40039: 
-40039: 
-40039:   Constraint_System con_sys;
-40039: 
-40039: 
-40039:   Generator_System gen_sys;
-40039: 
-40039: 
-40039:   Bit_Matrix sat_c;
-40039: 
-40039: 
-40039:   Bit_Matrix sat_g;
-40039: 
-40039: 
-40039: # 1 "../../src/Ph_Status_idefs.hh" 1
-40039: # 86 "../../src/Ph_Status_idefs.hh"
-40039: class Status {
-40039: public:
-40039: 
-40039:   Status();
-40039: 
-40039: 
-40039: 
-40039:   bool test_zero_dim_univ() const;
-40039:   void reset_zero_dim_univ();
-40039:   void set_zero_dim_univ();
-40039: 
-40039:   bool test_empty() const;
-40039:   void reset_empty();
-40039:   void set_empty();
-40039: 
-40039:   bool test_c_up_to_date() const;
-40039:   void reset_c_up_to_date();
-40039:   void set_c_up_to_date();
-40039: 
-40039:   bool test_g_up_to_date() const;
-40039:   void reset_g_up_to_date();
-40039:   void set_g_up_to_date();
-40039: 
-40039:   bool test_c_minimized() const;
-40039:   void reset_c_minimized();
-40039:   void set_c_minimized();
-40039: 
-40039:   bool test_g_minimized() const;
-40039:   void reset_g_minimized();
-40039:   void set_g_minimized();
-40039: 
-40039:   bool test_sat_c_up_to_date() const;
-40039:   void reset_sat_c_up_to_date();
-40039:   void set_sat_c_up_to_date();
-40039: 
-40039:   bool test_sat_g_up_to_date() const;
-40039:   void reset_sat_g_up_to_date();
-40039:   void set_sat_g_up_to_date();
-40039: 
-40039:   bool test_c_pending() const;
-40039:   void reset_c_pending();
-40039:   void set_c_pending();
-40039: 
-40039:   bool test_g_pending() const;
-40039:   void reset_g_pending();
-40039:   void set_g_pending();
-40039: 
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: private:
-40039: 
-40039:   typedef unsigned int flags_t;
-40039: 
-40039: 
-40039: 
-40039:   static const flags_t ZERO_DIM_UNIV = 0U;
-40039:   static const flags_t EMPTY = 1U << 0;
-40039:   static const flags_t C_UP_TO_DATE = 1U << 1;
-40039:   static const flags_t G_UP_TO_DATE = 1U << 2;
-40039:   static const flags_t C_MINIMIZED = 1U << 3;
-40039:   static const flags_t G_MINIMIZED = 1U << 4;
-40039:   static const flags_t SAT_C_UP_TO_DATE = 1U << 5;
-40039:   static const flags_t SAT_G_UP_TO_DATE = 1U << 6;
-40039:   static const flags_t CS_PENDING = 1U << 7;
-40039:   static const flags_t GS_PENDING = 1U << 8;
-40039: 
-40039: 
-40039: 
-40039:   flags_t flags;
-40039: 
-40039: 
-40039:   Status(flags_t mask);
-40039: 
-40039: 
-40039:   bool test_all(flags_t mask) const;
-40039: 
-40039: 
-40039:   bool test_any(flags_t mask) const;
-40039: 
-40039: 
-40039:   void set(flags_t mask);
-40039: 
-40039: 
-40039:   void reset(flags_t mask);
-40039: };
-40039: # 2043 "../../src/Polyhedron_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039:   Status status;
-40039: 
-40039: 
-40039:   dimension_type space_dim;
-40039: 
-40039: 
-40039:   Topology topology() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_necessarily_closed() const;
-40039: 
-40039:   friend bool
-40039:   Parma_Polyhedra_Library::Interfaces
-40039:   ::is_necessarily_closed_for_interfaces(const Polyhedron&);
-40039: # 2071 "../../src/Polyhedron_defs.hh"
-40039:   void refine_no_check(const Constraint& c);
-40039: # 2081 "../../src/Polyhedron_defs.hh"
-40039:   bool marked_empty() const;
-40039: 
-40039: 
-40039:   bool constraints_are_up_to_date() const;
-40039: 
-40039: 
-40039:   bool generators_are_up_to_date() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool constraints_are_minimized() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool generators_are_minimized() const;
-40039: 
-40039: 
-40039:   bool has_pending_constraints() const;
-40039: 
-40039: 
-40039:   bool has_pending_generators() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool has_something_pending() const;
-40039: 
-40039: 
-40039:   bool can_have_something_pending() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool sat_c_is_up_to_date() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool sat_g_is_up_to_date() const;
-40039: # 2139 "../../src/Polyhedron_defs.hh"
-40039:   void set_zero_dim_univ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void set_empty();
-40039: 
-40039: 
-40039:   void set_constraints_up_to_date();
-40039: 
-40039: 
-40039:   void set_generators_up_to_date();
-40039: 
-40039: 
-40039:   void set_constraints_minimized();
-40039: 
-40039: 
-40039:   void set_generators_minimized();
-40039: 
-40039: 
-40039:   void set_constraints_pending();
-40039: 
-40039: 
-40039:   void set_generators_pending();
-40039: 
-40039: 
-40039:   void set_sat_c_up_to_date();
-40039: 
-40039: 
-40039:   void set_sat_g_up_to_date();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void clear_empty();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void clear_constraints_up_to_date();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void clear_generators_up_to_date();
-40039: 
-40039: 
-40039:   void clear_constraints_minimized();
-40039: 
-40039: 
-40039:   void clear_generators_minimized();
-40039: 
-40039: 
-40039:   void clear_pending_constraints();
-40039: 
-40039: 
-40039:   void clear_pending_generators();
-40039: 
-40039: 
-40039:   void clear_sat_c_up_to_date();
-40039: 
-40039: 
-40039:   void clear_sat_g_up_to_date();
-40039: # 2227 "../../src/Polyhedron_defs.hh"
-40039:   bool process_pending() const;
-40039: # 2237 "../../src/Polyhedron_defs.hh"
-40039:   bool process_pending_constraints() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void process_pending_generators() const;
-40039: # 2252 "../../src/Polyhedron_defs.hh"
-40039:   void remove_pending_to_obtain_constraints() const;
-40039: # 2265 "../../src/Polyhedron_defs.hh"
-40039:   bool remove_pending_to_obtain_generators() const;
-40039: # 2278 "../../src/Polyhedron_defs.hh"
-40039:   void update_constraints() const;
-40039: # 2292 "../../src/Polyhedron_defs.hh"
-40039:   bool update_generators() const;
-40039: # 2309 "../../src/Polyhedron_defs.hh"
-40039:   void update_sat_c() const;
-40039: # 2326 "../../src/Polyhedron_defs.hh"
-40039:   void update_sat_g() const;
-40039: # 2338 "../../src/Polyhedron_defs.hh"
-40039:   void obtain_sorted_constraints() const;
-40039: # 2350 "../../src/Polyhedron_defs.hh"
-40039:   void obtain_sorted_generators() const;
-40039: # 2360 "../../src/Polyhedron_defs.hh"
-40039:   void obtain_sorted_constraints_with_sat_c() const;
-40039: # 2370 "../../src/Polyhedron_defs.hh"
-40039:   void obtain_sorted_generators_with_sat_g() const;
-40039: # 2386 "../../src/Polyhedron_defs.hh"
-40039:   bool minimize() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool strongly_minimize_constraints() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool strongly_minimize_generators() const;
-40039: 
-40039: 
-40039:   Constraint_System simplified_constraints() const;
-40039: 
-40039: 
-40039: 
-40039:   enum Three_Valued_Boolean {
-40039:     TVB_TRUE,
-40039:     TVB_FALSE,
-40039:     TVB_DONT_KNOW
-40039:   };
-40039: 
-40039: 
-40039:   Three_Valued_Boolean quick_equivalence_test(const Polyhedron& y) const;
-40039: 
-40039: 
-40039:   bool is_included_in(const Polyhedron& y) const;
-40039: # 2438 "../../src/Polyhedron_defs.hh"
-40039:   bool bounds(const Linear_Expression& expr, bool from_above) const;
-40039: # 2471 "../../src/Polyhedron_defs.hh"
-40039:   bool max_min(const Linear_Expression& expr,
-40039:                bool maximize,
-40039:                Coefficient& ext_n, Coefficient& ext_d, bool& included,
-40039:                Generator& g) const;
-40039: # 2483 "../../src/Polyhedron_defs.hh"
-40039:   void select_CH78_constraints(const Polyhedron& y,
-40039:                                Constraint_System& cs_selection) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void select_H79_constraints(const Polyhedron& y,
-40039:                               Constraint_System& cs_selected,
-40039:                               Constraint_System& cs_not_selected) const;
-40039: 
-40039:   bool BHRZ03_combining_constraints(const Polyhedron& y,
-40039:                                     const BHRZ03_Certificate& y_cert,
-40039:                                     const Polyhedron& H79,
-40039:                                     const Constraint_System& x_minus_H79_cs);
-40039: 
-40039:   bool BHRZ03_evolving_points(const Polyhedron& y,
-40039:                               const BHRZ03_Certificate& y_cert,
-40039:                               const Polyhedron& H79);
-40039: 
-40039:   bool BHRZ03_evolving_rays(const Polyhedron& y,
-40039:                             const BHRZ03_Certificate& y_cert,
-40039:                             const Polyhedron& H79);
-40039: 
-40039:   static void modify_according_to_evolution(Linear_Expression& ray,
-40039:                                             const Linear_Expression& x,
-40039:                                             const Linear_Expression& y);
-40039: # 2542 "../../src/Polyhedron_defs.hh"
-40039:   template <typename Linear_System1, typename Linear_System2>
-40039:   static void add_space_dimensions(Linear_System1& sys1,
-40039:                                    Linear_System2& sys2,
-40039:                                    Bit_Matrix& sat1,
-40039:                                    Bit_Matrix& sat2,
-40039:                                    dimension_type add_dim);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename Source_Linear_System, typename Dest_Linear_System>
-40039:   static bool minimize(bool con_to_gen,
-40039:                        Source_Linear_System& source,
-40039:                        Dest_Linear_System& dest,
-40039:                        Bit_Matrix& sat);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename Source_Linear_System1, typename Source_Linear_System2,
-40039:             typename Dest_Linear_System>
-40039:   static bool add_and_minimize(bool con_to_gen,
-40039:                                Source_Linear_System1& source1,
-40039:                                Dest_Linear_System& dest,
-40039:                                Bit_Matrix& sat,
-40039:                                const Source_Linear_System2& source2);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename Source_Linear_System, typename Dest_Linear_System>
-40039:   static bool add_and_minimize(bool con_to_gen,
-40039:                                Source_Linear_System& source,
-40039:                                Dest_Linear_System& dest,
-40039:                                Bit_Matrix& sat);
-40039: 
-40039: 
-40039: 
-40039:   template <typename Source_Linear_System, typename Dest_Linear_System>
-40039:   static dimension_type conversion(Source_Linear_System& source,
-40039:                                    dimension_type start,
-40039:                                    Dest_Linear_System& dest,
-40039:                                    Bit_Matrix& sat,
-40039:                                    dimension_type num_lines_or_equalities);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename Linear_System1>
-40039:   static dimension_type simplify(Linear_System1& sys, Bit_Matrix& sat);
-40039: # 2610 "../../src/Polyhedron_defs.hh"
-40039:   static dimension_type* simplify_num_saturators_p;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static size_t simplify_num_saturators_size;
-40039: 
-40039:   template <typename Interval> friend class Parma_Polyhedra_Library::Box;
-40039:   template <typename T> friend class Parma_Polyhedra_Library::BD_Shape;
-40039:   template <typename T> friend class Parma_Polyhedra_Library::Octagonal_Shape;
-40039:   friend class Parma_Polyhedra_Library::Grid;
-40039:   friend class Parma_Polyhedra_Library::BHRZ03_Certificate;
-40039:   friend class Parma_Polyhedra_Library::H79_Certificate;
-40039: 
-40039: protected:
-40039: # 2644 "../../src/Polyhedron_defs.hh"
-40039:   bool BFT00_poly_hull_assign_if_exact(const Polyhedron& y);
-40039: 
-40039:   bool BHZ09_poly_hull_assign_if_exact(const Polyhedron& y);
-40039:   bool BHZ09_C_poly_hull_assign_if_exact(const Polyhedron& y);
-40039:   bool BHZ09_NNC_poly_hull_assign_if_exact(const Polyhedron& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: protected:
-40039:   void throw_invalid_argument(const char* method, const char* reason) const;
-40039: 
-40039:   void throw_topology_incompatible(const char* method,
-40039:                                    const char* ph_name,
-40039:                                    const Polyhedron& ph) const;
-40039:   void throw_topology_incompatible(const char* method,
-40039:                                    const char* c_name,
-40039:                                    const Constraint& c) const;
-40039:   void throw_topology_incompatible(const char* method,
-40039:                                    const char* g_name,
-40039:                                    const Generator& g) const;
-40039:   void throw_topology_incompatible(const char* method,
-40039:                                    const char* cs_name,
-40039:                                    const Constraint_System& cs) const;
-40039:   void throw_topology_incompatible(const char* method,
-40039:                                    const char* gs_name,
-40039:                                    const Generator_System& gs) const;
-40039: 
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* other_name,
-40039:                                     dimension_type other_dim) const;
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* ph_name,
-40039:                                     const Polyhedron& ph) const;
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* le_name,
-40039:                                     const Linear_Expression& le) const;
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* c_name,
-40039:                                     const Constraint& c) const;
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* g_name,
-40039:                                     const Generator& g) const;
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* cg_name,
-40039:                                     const Congruence& cg) const;
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* cs_name,
-40039:                                     const Constraint_System& cs) const;
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* gs_name,
-40039:                                     const Generator_System& gs) const;
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* cgs_name,
-40039:                                     const Congruence_System& cgs) const;
-40039:   template <typename C>
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* lf_name,
-40039:                                     const Linear_Form<C>& lf) const;
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* var_name,
-40039:                                     Variable var) const;
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     dimension_type required_space_dim) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static dimension_type
-40039:   check_space_dimension_overflow(dimension_type dim, dimension_type max,
-40039:                                  const Topology topol,
-40039:                                  const char* method, const char* reason);
-40039: 
-40039:   static dimension_type
-40039:   check_space_dimension_overflow(dimension_type dim, const Topology topol,
-40039:                                  const char* method, const char* reason);
-40039: 
-40039:   template <typename Object>
-40039:   static Object&
-40039:   check_obj_space_dimension_overflow(Object& input, Topology topol,
-40039:                                      const char* method, const char* reason);
-40039: 
-40039:   void throw_invalid_generator(const char* method,
-40039:                                const char* g_name) const;
-40039: 
-40039:   void throw_invalid_generators(const char* method,
-40039:                                 const char* gs_name) const;
-40039: # 2751 "../../src/Polyhedron_defs.hh"
-40039:   void drop_some_non_integer_points(const Variables_Set* vars_p,
-40039:                                     Complexity_Class complexity);
-40039: # 2772 "../../src/Polyhedron_defs.hh"
-40039:   template <typename FP_Format, typename Interval_Info>
-40039:   void overapproximate_linear_form(
-40039:   const Linear_Form<Interval <FP_Format, Interval_Info> >& lf,
-40039:   const dimension_type lf_dimension,
-40039:   Linear_Form<Interval <FP_Format, Interval_Info> >& result);
-40039: # 2797 "../../src/Polyhedron_defs.hh"
-40039:   template <typename FP_Format, typename Interval_Info>
-40039:   static void convert_to_integer_expression(
-40039:               const Linear_Form<Interval <FP_Format, Interval_Info> >& lf,
-40039:               const dimension_type lf_dimension,
-40039:               Linear_Expression& result);
-40039: # 2829 "../../src/Polyhedron_defs.hh"
-40039:   template <typename FP_Format, typename Interval_Info>
-40039:   static void
-40039:   convert_to_integer_expressions(const Linear_Form<Interval<FP_Format,
-40039:                                                             Interval_Info> >&
-40039:                                  lf,
-40039:                                  const dimension_type lf_dimension,
-40039:                                  Linear_Expression& res,
-40039:                                  Coefficient& res_low_coeff,
-40039:                                  Coefficient& res_hi_coeff,
-40039:                                  Coefficient& denominator);
-40039: 
-40039:   template <typename Linear_System1, typename Row2>
-40039:   static bool
-40039:   add_to_system_and_check_independence(Linear_System1& eq_sys,
-40039:                                        const Row2& eq);
-40039: # 2852 "../../src/Polyhedron_defs.hh"
-40039:   void positive_time_elapse_assign_impl(const Polyhedron& y);
-40039: };
-40039: 
-40039: # 1 "../../src/Ph_Status_inlines.hh" 1
-40039: # 27 "../../src/Ph_Status_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline
-40039: Polyhedron::Status::Status(flags_t mask)
-40039:   : flags(mask) {
-40039: }
-40039: 
-40039: inline
-40039: Polyhedron::Status::Status()
-40039:   : flags(ZERO_DIM_UNIV) {
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::Status::test_all(flags_t mask) const {
-40039:   return (flags & mask) == mask;
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::Status::test_any(flags_t mask) const {
-40039:   return (flags & mask) != 0;
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::Status::set(flags_t mask) {
-40039:   flags |= mask;
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::Status::reset(flags_t mask) {
-40039:   flags &= ~mask;
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::Status::test_zero_dim_univ() const {
-40039:   return flags == ZERO_DIM_UNIV;
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::Status::reset_zero_dim_univ() {
-40039: 
-40039:   if (flags == ZERO_DIM_UNIV) {
-40039: 
-40039:     flags = EMPTY;
-40039:   }
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::Status::set_zero_dim_univ() {
-40039: 
-40039:   flags = ZERO_DIM_UNIV;
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::Status::test_empty() const {
-40039:   return test_any(EMPTY);
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::Status::reset_empty() {
-40039:   reset(EMPTY);
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::Status::set_empty() {
-40039:   flags = EMPTY;
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::Status::test_c_up_to_date() const {
-40039:   return test_any(C_UP_TO_DATE);
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::Status::reset_c_up_to_date() {
-40039:   reset(C_UP_TO_DATE);
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::Status::set_c_up_to_date() {
-40039:   set(C_UP_TO_DATE);
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::Status::test_g_up_to_date() const {
-40039:   return test_any(G_UP_TO_DATE);
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::Status::reset_g_up_to_date() {
-40039:   reset(G_UP_TO_DATE);
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::Status::set_g_up_to_date() {
-40039:   set(G_UP_TO_DATE);
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::Status::test_c_minimized() const {
-40039:   return test_any(C_MINIMIZED);
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::Status::reset_c_minimized() {
-40039:   reset(C_MINIMIZED);
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::Status::set_c_minimized() {
-40039:   set(C_MINIMIZED);
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::Status::test_g_minimized() const {
-40039:   return test_any(G_MINIMIZED);
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::Status::reset_g_minimized() {
-40039:   reset(G_MINIMIZED);
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::Status::set_g_minimized() {
-40039:   set(G_MINIMIZED);
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: Polyhedron::Status::test_c_pending() const {
-40039:   return test_any(CS_PENDING);
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::Status::reset_c_pending() {
-40039:   reset(CS_PENDING);
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::Status::set_c_pending() {
-40039:   set(CS_PENDING);
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::Status::test_g_pending() const {
-40039:   return test_any(GS_PENDING);
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::Status::reset_g_pending() {
-40039:   reset(GS_PENDING);
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::Status::set_g_pending() {
-40039:   set(GS_PENDING);
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: Polyhedron::Status::test_sat_c_up_to_date() const {
-40039:   return test_any(SAT_C_UP_TO_DATE);
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::Status::reset_sat_c_up_to_date() {
-40039:   reset(SAT_C_UP_TO_DATE);
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::Status::set_sat_c_up_to_date() {
-40039:   set(SAT_C_UP_TO_DATE);
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::Status::test_sat_g_up_to_date() const {
-40039:   return test_any(SAT_G_UP_TO_DATE);
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::Status::reset_sat_g_up_to_date() {
-40039:   reset(SAT_G_UP_TO_DATE);
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::Status::set_sat_g_up_to_date() {
-40039:   set(SAT_G_UP_TO_DATE);
-40039: }
-40039: 
-40039: }
-40039: # 2856 "../../src/Polyhedron_defs.hh" 2
-40039: # 1 "../../src/Polyhedron_inlines.hh" 1
-40039: # 32 "../../src/Polyhedron_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline memory_size_type
-40039: Polyhedron::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Polyhedron::space_dimension() const {
-40039:   return space_dim;
-40039: }
-40039: 
-40039: inline int32_t
-40039: Polyhedron::hash_code() const {
-40039:   return hash_code_from_dimension(space_dimension());
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Polyhedron::max_space_dimension() {
-40039:   using std::min;
-40039: 
-40039: 
-40039:   return min(std::numeric_limits<dimension_type>::max() - 1,
-40039:              min(Constraint_System::max_space_dimension(),
-40039:                  Generator_System::max_space_dimension()
-40039:                  )
-40039:              );
-40039: }
-40039: 
-40039: inline Topology
-40039: Polyhedron::topology() const {
-40039: 
-40039: 
-40039:   return con_sys.topology();
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::is_discrete() const {
-40039:   return affine_dimension() == 0;
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::is_necessarily_closed() const {
-40039: 
-40039: 
-40039:   return con_sys.is_necessarily_closed();
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::upper_bound_assign(const Polyhedron& y) {
-40039:   poly_hull_assign(y);
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::difference_assign(const Polyhedron& y) {
-40039:   poly_difference_assign(y);
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::widening_assign(const Polyhedron& y, unsigned* tp) {
-40039:   H79_widening_assign(y, tp);
-40039: }
-40039: 
-40039: inline
-40039: Polyhedron::~Polyhedron() {
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::m_swap(Polyhedron& y) {
-40039:   if (topology() != y.topology()) {
-40039:     throw_topology_incompatible("swap(y)", "y", y);
-40039:   }
-40039:   using std::swap;
-40039:   swap(con_sys, y.con_sys);
-40039:   swap(gen_sys, y.gen_sys);
-40039:   swap(sat_c, y.sat_c);
-40039:   swap(sat_g, y.sat_g);
-40039:   swap(status, y.status);
-40039:   swap(space_dim, y.space_dim);
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: swap(Polyhedron& x, Polyhedron& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::can_recycle_constraint_systems() {
-40039:   return true;
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::can_recycle_congruence_systems() {
-40039:   return false;
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::marked_empty() const {
-40039:   return status.test_empty();
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::constraints_are_up_to_date() const {
-40039:   return status.test_c_up_to_date();
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::generators_are_up_to_date() const {
-40039:   return status.test_g_up_to_date();
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::constraints_are_minimized() const {
-40039:   return status.test_c_minimized();
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::generators_are_minimized() const {
-40039:   return status.test_g_minimized();
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::sat_c_is_up_to_date() const {
-40039:   return status.test_sat_c_up_to_date();
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::sat_g_is_up_to_date() const {
-40039:   return status.test_sat_g_up_to_date();
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::has_pending_constraints() const {
-40039:   return status.test_c_pending();
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::has_pending_generators() const {
-40039:   return status.test_g_pending();
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::has_something_pending() const {
-40039:   return status.test_c_pending() || status.test_g_pending();
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::can_have_something_pending() const {
-40039:   return constraints_are_minimized()
-40039:     && generators_are_minimized()
-40039:     && (sat_c_is_up_to_date() || sat_g_is_up_to_date());
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::is_empty() const {
-40039:   if (marked_empty()) {
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (generators_are_up_to_date() && !has_pending_constraints()) {
-40039:     return false;
-40039:   }
-40039:   return !minimize();
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::set_constraints_up_to_date() {
-40039:   status.set_c_up_to_date();
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::set_generators_up_to_date() {
-40039:   status.set_g_up_to_date();
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::set_constraints_minimized() {
-40039:   set_constraints_up_to_date();
-40039:   status.set_c_minimized();
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::set_generators_minimized() {
-40039:   set_generators_up_to_date();
-40039:   status.set_g_minimized();
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::set_constraints_pending() {
-40039:   status.set_c_pending();
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::set_generators_pending() {
-40039:   status.set_g_pending();
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::set_sat_c_up_to_date() {
-40039:   status.set_sat_c_up_to_date();
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::set_sat_g_up_to_date() {
-40039:   status.set_sat_g_up_to_date();
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::clear_empty() {
-40039:   status.reset_empty();
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::clear_constraints_minimized() {
-40039:   status.reset_c_minimized();
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::clear_generators_minimized() {
-40039:   status.reset_g_minimized();
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::clear_pending_constraints() {
-40039:   status.reset_c_pending();
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::clear_pending_generators() {
-40039:   status.reset_g_pending();
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::clear_sat_c_up_to_date() {
-40039:   status.reset_sat_c_up_to_date();
-40039: 
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::clear_sat_g_up_to_date() {
-40039:   status.reset_sat_g_up_to_date();
-40039: 
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::clear_constraints_up_to_date() {
-40039:   clear_pending_constraints();
-40039:   clear_constraints_minimized();
-40039:   clear_sat_c_up_to_date();
-40039:   clear_sat_g_up_to_date();
-40039:   status.reset_c_up_to_date();
-40039: 
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::clear_generators_up_to_date() {
-40039:   clear_pending_generators();
-40039:   clear_generators_minimized();
-40039:   clear_sat_c_up_to_date();
-40039:   clear_sat_g_up_to_date();
-40039:   status.reset_g_up_to_date();
-40039: 
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::process_pending() const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039:   if (has_pending_constraints()) {
-40039:     return process_pending_constraints();
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   process_pending_generators();
-40039:   return true;
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::bounds_from_above(const Linear_Expression& expr) const {
-40039:   return bounds(expr, true);
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::bounds_from_below(const Linear_Expression& expr) const {
-40039:   return bounds(expr, false);
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::maximize(const Linear_Expression& expr,
-40039:                      Coefficient& sup_n, Coefficient& sup_d,
-40039:                      bool& maximum) const {
-40039:   Generator g(point());
-40039:   return max_min(expr, true, sup_n, sup_d, maximum, g);
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::maximize(const Linear_Expression& expr,
-40039:                      Coefficient& sup_n, Coefficient& sup_d, bool& maximum,
-40039:                      Generator& g) const {
-40039:   return max_min(expr, true, sup_n, sup_d, maximum, g);
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::minimize(const Linear_Expression& expr,
-40039:                      Coefficient& inf_n, Coefficient& inf_d,
-40039:                      bool& minimum) const {
-40039:   Generator g(point());
-40039:   return max_min(expr, false, inf_n, inf_d, minimum, g);
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::minimize(const Linear_Expression& expr,
-40039:                      Coefficient& inf_n, Coefficient& inf_d, bool& minimum,
-40039:                      Generator& g) const {
-40039:   return max_min(expr, false, inf_n, inf_d, minimum, g);
-40039: }
-40039: 
-40039: inline Constraint_System
-40039: Polyhedron::simplified_constraints() const {
-40039:   ((void) 0);
-40039:   Constraint_System cs(con_sys);
-40039:   if (cs.num_pending_rows() > 0) {
-40039:     cs.unset_pending_rows();
-40039:   }
-40039:   if (has_pending_constraints() || !constraints_are_minimized()) {
-40039:     cs.simplify();
-40039:   }
-40039:   return cs;
-40039: }
-40039: 
-40039: inline Congruence_System
-40039: Polyhedron::congruences() const {
-40039:   return Congruence_System(minimized_constraints());
-40039: }
-40039: 
-40039: inline Congruence_System
-40039: Polyhedron::minimized_congruences() const {
-40039:   return Congruence_System(minimized_constraints());
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::add_recycled_congruences(Congruence_System& cgs) {
-40039:   add_congruences(cgs);
-40039: }
-40039: 
-40039: template <typename FP_Format, typename Interval_Info>
-40039: inline void
-40039: Polyhedron::generalized_refine_with_linear_form_inequality(
-40039:             const Linear_Form< Interval<FP_Format, Interval_Info> >& left,
-40039:             const Linear_Form< Interval<FP_Format, Interval_Info> >& right,
-40039:             const Relation_Symbol relsym) {
-40039:   switch (relsym) {
-40039:   case EQUAL:
-40039: 
-40039:     refine_with_linear_form_inequality(left, right, false);
-40039:     refine_with_linear_form_inequality(right, left, false);
-40039:     break;
-40039:   case LESS_THAN:
-40039:     refine_with_linear_form_inequality(left, right, true);
-40039:     break;
-40039:   case LESS_OR_EQUAL:
-40039:     refine_with_linear_form_inequality(left, right, false);
-40039:     break;
-40039:   case GREATER_THAN:
-40039:     refine_with_linear_form_inequality(right, left, true);
-40039:     break;
-40039:   case GREATER_OR_EQUAL:
-40039:     refine_with_linear_form_inequality(right, left, false);
-40039:     break;
-40039:   case NOT_EQUAL:
-40039:     break;
-40039:   default:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     break;
-40039:   }
-40039: }
-40039: 
-40039: template <typename FP_Format, typename Interval_Info>
-40039: inline void
-40039: Polyhedron::
-40039: refine_fp_interval_abstract_store(
-40039:        Box< Interval<FP_Format, Interval_Info> >& store) const {
-40039: 
-40039: 
-40039:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_422 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<FP_Format>::is_exact)>) }
-40039: 
-40039:                                                      ;
-40039: 
-40039:   typedef Interval<FP_Format, Interval_Info> FP_Interval_Type;
-40039:   store.intersection_assign(Box<FP_Interval_Type>(*this));
-40039: 
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: operator!=(const Polyhedron& x, const Polyhedron& y) {
-40039:   return !(x == y);
-40039: }
-40039: 
-40039: inline bool
-40039: Polyhedron::strictly_contains(const Polyhedron& y) const {
-40039:   const Polyhedron& x = *this;
-40039:   return x.contains(y) && !y.contains(x);
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::drop_some_non_integer_points(Complexity_Class complexity) {
-40039:   const Variables_Set* const p_vs = 0;
-40039:   drop_some_non_integer_points(p_vs, complexity);
-40039: }
-40039: 
-40039: inline void
-40039: Polyhedron::drop_some_non_integer_points(const Variables_Set& vars,
-40039:                                          Complexity_Class complexity) {
-40039:   drop_some_non_integer_points(&vars, complexity);
-40039: }
-40039: 
-40039: 
-40039: namespace Interfaces {
-40039: 
-40039: inline bool
-40039: is_necessarily_closed_for_interfaces(const Polyhedron& ph) {
-40039:   return ph.is_necessarily_closed();
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 2857 "../../src/Polyhedron_defs.hh" 2
-40039: # 1 "../../src/Polyhedron_templates.hh" 1
-40039: # 28 "../../src/Polyhedron_templates.hh"
-40039: # 1 "../../src/MIP_Problem_defs.hh" 1
-40039: # 29 "../../src/MIP_Problem_defs.hh"
-40039: # 1 "../../src/Matrix_defs.hh" 1
-40039: # 27 "../../src/Matrix_defs.hh"
-40039: # 1 "../../src/Matrix_types.hh" 1
-40039: # 16 "../../src/Matrix_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Row>
-40039: class Matrix;
-40039: 
-40039: }
-40039: # 28 "../../src/Matrix_defs.hh" 2
-40039: # 36 "../../src/Matrix_defs.hh"
-40039: template <typename Row>
-40039: class Parma_Polyhedra_Library::Matrix {
-40039: 
-40039: public:
-40039:   typedef typename Swapping_Vector<Row>::iterator iterator;
-40039:   typedef typename Swapping_Vector<Row>::const_iterator const_iterator;
-40039: 
-40039: 
-40039:   static dimension_type max_num_rows();
-40039: 
-40039: 
-40039:   static dimension_type max_num_columns();
-40039: # 58 "../../src/Matrix_defs.hh"
-40039:   explicit Matrix(dimension_type n = 0);
-40039: # 72 "../../src/Matrix_defs.hh"
-40039:   Matrix(dimension_type num_rows, dimension_type num_columns);
-40039: # 82 "../../src/Matrix_defs.hh"
-40039:   void m_swap(Matrix& x);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type num_rows() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type num_columns() const;
-40039: 
-40039: 
-40039: 
-40039:   dimension_type capacity() const;
-40039: # 109 "../../src/Matrix_defs.hh"
-40039:   bool has_no_rows() const;
-40039: 
-40039: 
-40039:   void resize(dimension_type n);
-40039: 
-40039: 
-40039: 
-40039:   void reserve_rows(dimension_type n);
-40039: # 146 "../../src/Matrix_defs.hh"
-40039:   void resize(dimension_type num_rows, dimension_type num_columns);
-40039: # 164 "../../src/Matrix_defs.hh"
-40039:   void add_zero_rows_and_columns(dimension_type n, dimension_type m);
-40039: # 178 "../../src/Matrix_defs.hh"
-40039:   void add_zero_rows(dimension_type n);
-40039: # 191 "../../src/Matrix_defs.hh"
-40039:   void add_row(const Row& x);
-40039: # 205 "../../src/Matrix_defs.hh"
-40039:   void add_recycled_row(Row& y);
-40039: # 219 "../../src/Matrix_defs.hh"
-40039:   void remove_trailing_rows(dimension_type n);
-40039: 
-40039:   void remove_rows(iterator first, iterator last);
-40039: # 253 "../../src/Matrix_defs.hh"
-40039:   void permute_columns(const std::vector<dimension_type>& cycles);
-40039: 
-40039: 
-40039:   void swap_columns(dimension_type i, dimension_type j);
-40039: # 269 "../../src/Matrix_defs.hh"
-40039:   void add_zero_columns(dimension_type n);
-40039: # 290 "../../src/Matrix_defs.hh"
-40039:   void add_zero_columns(dimension_type n, dimension_type i);
-40039: # 308 "../../src/Matrix_defs.hh"
-40039:   void remove_column(dimension_type i);
-40039: # 326 "../../src/Matrix_defs.hh"
-40039:   void remove_trailing_columns(dimension_type n);
-40039: 
-40039: 
-40039:   void clear();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   iterator begin();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   iterator end();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const_iterator begin() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const_iterator end() const;
-40039: # 362 "../../src/Matrix_defs.hh"
-40039:   Row& operator[](dimension_type i);
-40039: # 371 "../../src/Matrix_defs.hh"
-40039:   const Row& operator[](dimension_type i) const;
-40039: # 380 "../../src/Matrix_defs.hh"
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039: private:
-40039: 
-40039:   Swapping_Vector<Row> rows;
-40039: 
-40039: 
-40039:   dimension_type num_columns_;
-40039: };
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Row>
-40039: void swap(Matrix<Row>& x, Matrix<Row>& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Row>
-40039: bool operator==(const Matrix<Row>& x, const Matrix<Row>& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Row>
-40039: bool operator!=(const Matrix<Row>& x, const Matrix<Row>& y);
-40039: 
-40039: }
-40039: 
-40039: 
-40039: # 1 "../../src/Matrix_inlines.hh" 1
-40039: # 27 "../../src/Matrix_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Row>
-40039: inline dimension_type
-40039: Matrix<Row>::max_num_rows() {
-40039:   return std::vector<Row>().max_size();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline dimension_type
-40039: Matrix<Row>::max_num_columns() {
-40039:   return Row::max_size();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Matrix<Row>::m_swap(Matrix& x) {
-40039:   using std::swap;
-40039:   swap(rows, x.rows);
-40039:   swap(num_columns_, x.num_columns_);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline dimension_type
-40039: Matrix<Row>::num_rows() const {
-40039:   return rows.size();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline dimension_type
-40039: Matrix<Row>::num_columns() const {
-40039:   return num_columns_;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline dimension_type
-40039: Matrix<Row>::capacity() const {
-40039:   return rows.capacity();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline bool
-40039: Matrix<Row>::has_no_rows() const {
-40039:   return num_rows() == 0;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Matrix<Row>::resize(dimension_type n) {
-40039:   resize(n, n);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Matrix<Row>::reserve_rows(dimension_type requested_capacity) {
-40039: 
-40039:   rows.reserve(requested_capacity);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Matrix<Row>::add_zero_rows_and_columns(dimension_type n, dimension_type m) {
-40039:   resize(num_rows() + n, num_columns() + m);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Matrix<Row>::add_zero_rows(dimension_type n) {
-40039:   resize(num_rows() + n, num_columns());
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Matrix<Row>::add_row(const Row& x) {
-40039: 
-40039:   Row row(x);
-40039:   add_zero_rows(1);
-40039: 
-40039:   swap(rows.back(), row);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Matrix<Row>::add_recycled_row(Row& x) {
-40039:   add_zero_rows(1);
-40039:   swap(rows.back(), x);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Matrix<Row>::remove_trailing_rows(dimension_type n) {
-40039:   resize(num_rows() - n, num_columns());
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Matrix<Row>::remove_rows(iterator first, iterator last) {
-40039:   rows.erase(first, last);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Matrix<Row>::add_zero_columns(dimension_type n) {
-40039:   resize(num_rows(), num_columns() + n);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Matrix<Row>::remove_trailing_columns(dimension_type n) {
-40039:   ((void) 0);
-40039:   resize(num_rows(), num_columns() - n);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: Matrix<Row>::clear() {
-40039:   resize(0, 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline typename Matrix<Row>::iterator
-40039: Matrix<Row>::begin() {
-40039:   return rows.begin();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline typename Matrix<Row>::iterator
-40039: Matrix<Row>::end() {
-40039:   return rows.end();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline typename Matrix<Row>::const_iterator
-40039: Matrix<Row>::begin() const {
-40039:   return rows.begin();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline typename Matrix<Row>::const_iterator
-40039: Matrix<Row>::end() const {
-40039:   return rows.end();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline Row&
-40039: Matrix<Row>::operator[](dimension_type i) {
-40039:   ((void) 0);
-40039:   return rows[i];
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline const Row&
-40039: Matrix<Row>::operator[](dimension_type i) const {
-40039:   ((void) 0);
-40039:   return rows[i];
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline memory_size_type
-40039: Matrix<Row>::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: inline void
-40039: swap(Matrix<Row>& x, Matrix<Row>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 435 "../../src/Matrix_defs.hh" 2
-40039: # 1 "../../src/Matrix_templates.hh" 1
-40039: # 27 "../../src/Matrix_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Row>
-40039: Matrix<Row>::Matrix(dimension_type n)
-40039:   : rows(n), num_columns_(n) {
-40039:   for (dimension_type i = 0; i < rows.size(); ++i) {
-40039:     rows[i].resize(num_columns_);
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: Matrix<Row>::Matrix(dimension_type num_rows, dimension_type num_columns)
-40039:   : rows(num_rows), num_columns_(num_columns) {
-40039:   for (dimension_type i = 0; i < rows.size(); ++i) {
-40039:     rows[i].resize(num_columns_);
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Matrix<Row>::resize(dimension_type num_rows, dimension_type num_columns) {
-40039:   const dimension_type old_num_rows = rows.size();
-40039:   rows.resize(num_rows);
-40039:   if (old_num_rows < num_rows) {
-40039:     for (dimension_type i = old_num_rows; i < num_rows; ++i) {
-40039:       rows[i].resize(num_columns);
-40039:     }
-40039:     if (num_columns_ != num_columns) {
-40039:       num_columns_ = num_columns;
-40039:       for (dimension_type i = 0; i < old_num_rows; ++i) {
-40039:         rows[i].resize(num_columns);
-40039:       }
-40039:     }
-40039:   }
-40039:   else
-40039:     if (num_columns_ != num_columns) {
-40039:       num_columns_ = num_columns;
-40039:       for (dimension_type i = 0; i < num_rows; ++i) {
-40039:         rows[i].resize(num_columns);
-40039:       }
-40039:     }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Matrix<Row>::permute_columns(const std::vector<dimension_type>& cycles) {
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_tmp; Parma_Polyhedra_Library::Coefficient& tmp = holder_tmp.item();
-40039:   const dimension_type n = cycles.size();
-40039:   ((void) 0);
-40039:   for (dimension_type k = num_rows(); k-- > 0; ) {
-40039:     Row& rows_k = (*this)[k];
-40039:     for (dimension_type i = 0, j = 0; i < n; i = ++j) {
-40039: 
-40039:       while (cycles[j] != 0) {
-40039:         ++j;
-40039:       }
-40039: 
-40039:       ((void) 0);
-40039:       if (j - i == 2) {
-40039: 
-40039:         rows_k.swap_coefficients(cycles[i], cycles[i + 1]);
-40039:       }
-40039:       else {
-40039: 
-40039:         tmp = rows_k.get(cycles[j - 1]);
-40039:         for (dimension_type l = (j - 1); l > i; --l) {
-40039:           rows_k.swap_coefficients(cycles[l-1], cycles[l]);
-40039:         }
-40039:         if (tmp == 0) {
-40039:           rows_k.reset(cycles[i]);
-40039:         }
-40039:         else {
-40039:           using std::swap;
-40039:           swap(tmp, rows_k[cycles[i]]);
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Matrix<Row>::swap_columns(dimension_type i, dimension_type j) {
-40039:   for (dimension_type k = num_rows(); k-- > 0; ) {
-40039:     (*this)[k].swap_coefficients(i, j);
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Matrix<Row>::add_zero_columns(dimension_type n, dimension_type i) {
-40039:   for (dimension_type j = rows.size(); j-- > 0; ) {
-40039:     rows[j].add_zeroes_and_shift(n, i);
-40039:   }
-40039:   num_columns_ += n;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Matrix<Row>::remove_column(dimension_type i) {
-40039:   for (dimension_type j = rows.size(); j-- > 0; ) {
-40039:     rows[j].delete_element_and_shift(i);
-40039:   }
-40039:   --num_columns_;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Row>
-40039: void
-40039: Matrix<Row>::ascii_dump(std::ostream& s) const {
-40039:   s << num_rows() << " x ";
-40039:   s << num_columns() << "\n";
-40039:   for (const_iterator i = begin(), i_end = end(); i !=i_end; ++i) {
-40039:     i->ascii_dump(s);
-40039:   }
-40039: }
-40039: 
-40039: template <typename Row> void Matrix<Row>::ascii_dump() const { ascii_dump(std::cerr); } template <typename Row> void Matrix<Row>::print() const { std::cerr << "No user level output operator defined " << "for " "Matrix<Row>" << "." << std::endl; }
-40039: 
-40039: template <typename Row>
-40039: bool
-40039: Matrix<Row>::ascii_load(std::istream& s) {
-40039:   std::string str;
-40039:   dimension_type new_num_rows;
-40039:   dimension_type new_num_cols;
-40039:   if (!(s >> new_num_rows)) {
-40039:     return false;
-40039:   }
-40039:   if (!(s >> str) || str != "x") {
-40039:     return false;
-40039:   }
-40039:   if (!(s >> new_num_cols)) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   for (iterator i = rows.begin(), i_end = rows.end();
-40039:        i != i_end; ++i) {
-40039:     i->clear();
-40039:   }
-40039: 
-40039:   resize(new_num_rows, new_num_cols);
-40039: 
-40039:   for (dimension_type row = 0; row < new_num_rows; ++row) {
-40039:     if (!rows[row].ascii_load(s)) {
-40039:       return false;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename Row>
-40039: memory_size_type
-40039: Matrix<Row>::external_memory_in_bytes() const {
-40039:   return rows.external_memory_in_bytes();
-40039: }
-40039: 
-40039: template <typename Row>
-40039: bool
-40039: Matrix<Row>::OK() const {
-40039:   for (const_iterator i = begin(), i_end = end(); i != i_end; ++i) {
-40039:     if (i->size() != num_columns_) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: 
-40039: template <typename Row>
-40039: bool
-40039: operator==(const Matrix<Row>& x, const Matrix<Row>& y) {
-40039:   if (x.num_rows() != y.num_rows()) {
-40039:     return false;
-40039:   }
-40039:   if (x.num_columns() != y.num_columns()) {
-40039:     return false;
-40039:   }
-40039:   for (dimension_type i = x.num_rows(); i-- > 0; ) {
-40039:     if (x[i] != y[i]) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: 
-40039: template <typename Row>
-40039: bool
-40039: operator!=(const Matrix<Row>& x, const Matrix<Row>& y) {
-40039:   return !(x == y);
-40039: }
-40039: 
-40039: }
-40039: # 436 "../../src/Matrix_defs.hh" 2
-40039: # 30 "../../src/MIP_Problem_defs.hh" 2
-40039: # 42 "../../src/MIP_Problem_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: std::ostream&
-40039: operator<<(std::ostream& s, const MIP_Problem& mip);
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: void swap(MIP_Problem& x, MIP_Problem& y);
-40039: 
-40039: }
-40039: # 87 "../../src/MIP_Problem_defs.hh"
-40039: class Parma_Polyhedra_Library::MIP_Problem {
-40039: public:
-40039: # 102 "../../src/MIP_Problem_defs.hh"
-40039:   explicit MIP_Problem(dimension_type dim = 0);
-40039: # 140 "../../src/MIP_Problem_defs.hh"
-40039:   template <typename In>
-40039:   MIP_Problem(dimension_type dim,
-40039:               In first, In last,
-40039:               const Variables_Set& int_vars,
-40039:               const Linear_Expression& obj = Linear_Expression::zero(),
-40039:               Optimization_Mode mode = MAXIMIZATION);
-40039: # 178 "../../src/MIP_Problem_defs.hh"
-40039:   template <typename In>
-40039:   MIP_Problem(dimension_type dim,
-40039:               In first, In last,
-40039:               const Linear_Expression& obj = Linear_Expression::zero(),
-40039:               Optimization_Mode mode = MAXIMIZATION);
-40039: # 209 "../../src/MIP_Problem_defs.hh"
-40039:   MIP_Problem(dimension_type dim,
-40039:               const Constraint_System& cs,
-40039:               const Linear_Expression& obj = Linear_Expression::zero(),
-40039:               Optimization_Mode mode = MAXIMIZATION);
-40039: 
-40039: 
-40039:   MIP_Problem(const MIP_Problem& y);
-40039: 
-40039: 
-40039:   ~MIP_Problem();
-40039: 
-40039: 
-40039:   MIP_Problem& operator=(const MIP_Problem& y);
-40039: 
-40039: 
-40039:   static dimension_type max_space_dimension();
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const Variables_Set& integer_space_dimensions() const;
-40039: 
-40039: private:
-40039: 
-40039:   typedef std::vector<Constraint*> Constraint_Sequence;
-40039: 
-40039: public:
-40039: 
-40039:   class const_iterator {
-40039:   private:
-40039:     typedef Constraint_Sequence::const_iterator Base;
-40039:     typedef std::iterator_traits<Base> Base_Traits;
-40039: 
-40039:   public:
-40039:     typedef Base_Traits::iterator_category iterator_category;
-40039:     typedef Base_Traits::difference_type difference_type;
-40039:     typedef const Constraint value_type;
-40039:     typedef const Constraint* pointer;
-40039:     typedef const Constraint& reference;
-40039: 
-40039: 
-40039:     difference_type operator-(const const_iterator& y) const;
-40039: 
-40039: 
-40039:     const_iterator& operator++();
-40039: 
-40039: 
-40039:     const_iterator& operator--();
-40039: 
-40039: 
-40039:     const_iterator operator++(int);
-40039: 
-40039: 
-40039:     const_iterator operator--(int);
-40039: 
-40039: 
-40039:     const_iterator& operator+=(difference_type n);
-40039: 
-40039: 
-40039:     const_iterator& operator-=(difference_type n);
-40039: 
-40039: 
-40039:     const_iterator operator+(difference_type n) const;
-40039: 
-40039: 
-40039:     const_iterator operator-(difference_type n) const;
-40039: 
-40039: 
-40039:     reference operator*() const;
-40039: 
-40039: 
-40039:     pointer operator->() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     bool operator==(const const_iterator& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     bool operator!=(const const_iterator& y) const;
-40039: 
-40039:   private:
-40039: 
-40039:     explicit const_iterator(Base b);
-40039: 
-40039: 
-40039:     Base itr;
-40039: 
-40039:     friend class MIP_Problem;
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const_iterator constraints_begin() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const_iterator constraints_end() const;
-40039: 
-40039: 
-40039:   const Linear_Expression& objective_function() const;
-40039: 
-40039: 
-40039:   Optimization_Mode optimization_mode() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void clear();
-40039: # 348 "../../src/MIP_Problem_defs.hh"
-40039:   void add_space_dimensions_and_embed(dimension_type m);
-40039: # 358 "../../src/MIP_Problem_defs.hh"
-40039:   void add_to_integer_space_dimensions(const Variables_Set& i_vars);
-40039: # 367 "../../src/MIP_Problem_defs.hh"
-40039:   void add_constraint(const Constraint& c);
-40039: # 377 "../../src/MIP_Problem_defs.hh"
-40039:   void add_constraints(const Constraint_System& cs);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void set_objective_function(const Linear_Expression& obj);
-40039: 
-40039: 
-40039:   void set_optimization_mode(Optimization_Mode mode);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_satisfiable() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   MIP_Problem_Status solve() const;
-40039: # 423 "../../src/MIP_Problem_defs.hh"
-40039:   void evaluate_objective_function(const Generator& evaluating_point,
-40039:                                    Coefficient& numer,
-40039:                                    Coefficient& denom) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const Generator& feasible_point() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const Generator& optimizing_point() const;
-40039: # 451 "../../src/MIP_Problem_defs.hh"
-40039:   void optimal_value(Coefficient& numer, Coefficient& denom) const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   void m_swap(MIP_Problem& y);
-40039: 
-40039: 
-40039:   enum Control_Parameter_Name {
-40039: 
-40039:     PRICING
-40039:   };
-40039: 
-40039: 
-40039:   enum Control_Parameter_Value {
-40039: 
-40039:     PRICING_STEEPEST_EDGE_FLOAT,
-40039: 
-40039:     PRICING_STEEPEST_EDGE_EXACT,
-40039: 
-40039:     PRICING_TEXTBOOK
-40039:   };
-40039: 
-40039: 
-40039:   Control_Parameter_Value
-40039:   get_control_parameter(Control_Parameter_Name name) const;
-40039: 
-40039: 
-40039:   void set_control_parameter(Control_Parameter_Value value);
-40039: 
-40039: private:
-40039: 
-40039:   dimension_type external_space_dim;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type internal_space_dim;
-40039: 
-40039: 
-40039:   typedef Sparse_Row Row;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Matrix<Row> tableau;
-40039: 
-40039:   typedef Row working_cost_type;
-40039: 
-40039: 
-40039:   working_cost_type working_cost;
-40039: # 530 "../../src/MIP_Problem_defs.hh"
-40039:   std::vector<std::pair<dimension_type, dimension_type> > mapping;
-40039: 
-40039: 
-40039:   std::vector<dimension_type> base;
-40039: 
-40039: 
-40039:   enum Status {
-40039: 
-40039:     UNSATISFIABLE,
-40039: 
-40039:     SATISFIABLE,
-40039: 
-40039:     UNBOUNDED,
-40039: 
-40039:     OPTIMIZED,
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     PARTIALLY_SATISFIABLE
-40039:   };
-40039: 
-40039: 
-40039:   Status status;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Control_Parameter_Value pricing;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool initialized;
-40039: 
-40039: 
-40039:   std::vector<Constraint*> input_cs;
-40039: # 582 "../../src/MIP_Problem_defs.hh"
-40039:   dimension_type inherited_constraints;
-40039: 
-40039: 
-40039:   dimension_type first_pending_constraint;
-40039: 
-40039: 
-40039:   Linear_Expression input_obj_function;
-40039: 
-40039: 
-40039:   Optimization_Mode opt_mode;
-40039: 
-40039: 
-40039:   Generator last_generator;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Variables_Set i_variables;
-40039: 
-40039: 
-40039:   struct RAII_Temporary_Real_Relaxation {
-40039:     MIP_Problem& lp;
-40039:     Variables_Set i_vars;
-40039: 
-40039:     RAII_Temporary_Real_Relaxation(MIP_Problem& mip)
-40039:       : lp(mip), i_vars() {
-40039: 
-40039:       using std::swap;
-40039:       swap(i_vars, lp.i_variables);
-40039:     }
-40039: 
-40039:     ~RAII_Temporary_Real_Relaxation() {
-40039: 
-40039:       using std::swap;
-40039:       swap(i_vars, lp.i_variables);
-40039:     }
-40039:   };
-40039:   friend struct RAII_Temporary_Real_Relaxation;
-40039: 
-40039: 
-40039:   struct Inherit_Constraints {};
-40039: 
-40039: 
-40039:   MIP_Problem(const MIP_Problem& y, Inherit_Constraints);
-40039: 
-40039: 
-40039:   void add_constraint_helper(const Constraint& c);
-40039: 
-40039: 
-40039:   void process_pending_constraints();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void second_phase();
-40039: # 654 "../../src/MIP_Problem_defs.hh"
-40039:   MIP_Problem_Status
-40039:   compute_tableau(std::vector<dimension_type>& worked_out_row);
-40039: # 708 "../../src/MIP_Problem_defs.hh"
-40039:   bool parse_constraints(dimension_type& additional_tableau_rows,
-40039:                          dimension_type& additional_slack_variables,
-40039:                          std::deque<bool>& is_tableau_constraint,
-40039:                          std::deque<bool>& is_satisfied_inequality,
-40039:                          std::deque<bool>& is_nonnegative_variable,
-40039:                          std::deque<bool>& is_remergeable_variable) const;
-40039: # 725 "../../src/MIP_Problem_defs.hh"
-40039:   dimension_type
-40039:   get_exiting_base_index(dimension_type entering_var_index) const;
-40039: # 743 "../../src/MIP_Problem_defs.hh"
-40039:   static void linear_combine(Row& x, const Row& y, const dimension_type k);
-40039: # 763 "../../src/MIP_Problem_defs.hh"
-40039:   static void linear_combine(Dense_Row& x, const Sparse_Row& y,
-40039:                              const dimension_type k);
-40039: 
-40039: 
-40039: 
-40039:   static bool is_unbounded_obj_function(
-40039:     const Linear_Expression& obj_function,
-40039:     const std::vector<std::pair<dimension_type, dimension_type> >& mapping,
-40039:     Optimization_Mode optimization_mode);
-40039: # 782 "../../src/MIP_Problem_defs.hh"
-40039:   void pivot(dimension_type entering_var_index,
-40039:              dimension_type exiting_base_index);
-40039: # 794 "../../src/MIP_Problem_defs.hh"
-40039:   dimension_type textbook_entering_index() const;
-40039: # 821 "../../src/MIP_Problem_defs.hh"
-40039:   dimension_type steepest_edge_exact_entering_index() const;
-40039: # 834 "../../src/MIP_Problem_defs.hh"
-40039:   dimension_type steepest_edge_float_entering_index() const;
-40039: # 844 "../../src/MIP_Problem_defs.hh"
-40039:   bool compute_simplex_using_exact_pricing();
-40039: # 855 "../../src/MIP_Problem_defs.hh"
-40039:   bool compute_simplex_using_steepest_edge_float();
-40039: # 873 "../../src/MIP_Problem_defs.hh"
-40039:   void erase_artificials(dimension_type begin_artificials,
-40039:                          dimension_type end_artificials);
-40039: 
-40039:   bool is_in_base(dimension_type var_index,
-40039:                   dimension_type& row_index) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void compute_generator() const;
-40039: # 897 "../../src/MIP_Problem_defs.hh"
-40039:   dimension_type merge_split_variable(dimension_type var_index);
-40039: 
-40039: 
-40039:   static bool is_satisfied(const Constraint& c, const Generator& g);
-40039: 
-40039: 
-40039:   static bool is_saturated(const Constraint& c, const Generator& g);
-40039: # 924 "../../src/MIP_Problem_defs.hh"
-40039:   static MIP_Problem_Status solve_mip(bool& have_incumbent_solution,
-40039:                                       mpq_class& incumbent_solution_value,
-40039:                                       Generator& incumbent_solution_point,
-40039:                                       MIP_Problem& mip,
-40039:                                       const Variables_Set& i_vars);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_lp_satisfiable() const;
-40039: # 949 "../../src/MIP_Problem_defs.hh"
-40039:   static bool is_mip_satisfiable(MIP_Problem& mip,
-40039:                                  const Variables_Set& i_vars,
-40039:                                  Generator& p);
-40039: # 968 "../../src/MIP_Problem_defs.hh"
-40039:   static bool choose_branching_variable(const MIP_Problem& mip,
-40039:                                         const Variables_Set& i_vars,
-40039:                                         dimension_type& branching_index);
-40039: };
-40039: 
-40039: # 1 "../../src/MIP_Problem_inlines.hh" 1
-40039: # 30 "../../src/MIP_Problem_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline dimension_type
-40039: MIP_Problem::max_space_dimension() {
-40039:   return Constraint::max_space_dimension();
-40039: }
-40039: 
-40039: inline dimension_type
-40039: MIP_Problem::space_dimension() const {
-40039:   return external_space_dim;
-40039: }
-40039: 
-40039: 
-40039: inline
-40039: MIP_Problem::MIP_Problem(const MIP_Problem& y)
-40039:   : external_space_dim(y.external_space_dim),
-40039:     internal_space_dim(y.internal_space_dim),
-40039:     tableau(y.tableau),
-40039:     working_cost(y.working_cost),
-40039:     mapping(y.mapping),
-40039:     base(y.base),
-40039:     status(y.status),
-40039:     pricing(y.pricing),
-40039:     initialized(y.initialized),
-40039:     input_cs(),
-40039:     inherited_constraints(0),
-40039:     first_pending_constraint(),
-40039:     input_obj_function(y.input_obj_function),
-40039:     opt_mode(y.opt_mode),
-40039:     last_generator(y.last_generator),
-40039:     i_variables(y.i_variables) {
-40039:   input_cs.reserve(y.input_cs.size());
-40039:   for (Constraint_Sequence::const_iterator i = y.input_cs.begin(),
-40039:          i_end = y.input_cs.end(); i != i_end; ++i) {
-40039:     add_constraint_helper(*(*i));
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: MIP_Problem::MIP_Problem(const MIP_Problem& y, Inherit_Constraints)
-40039:   : external_space_dim(y.external_space_dim),
-40039:     internal_space_dim(y.internal_space_dim),
-40039:     tableau(y.tableau),
-40039:     working_cost(y.working_cost),
-40039:     mapping(y.mapping),
-40039:     base(y.base),
-40039:     status(y.status),
-40039:     pricing(y.pricing),
-40039:     initialized(y.initialized),
-40039:     input_cs(y.input_cs),
-40039: 
-40039:     inherited_constraints(y.input_cs.size()),
-40039:     first_pending_constraint(y.first_pending_constraint),
-40039:     input_obj_function(y.input_obj_function),
-40039:     opt_mode(y.opt_mode),
-40039:     last_generator(y.last_generator),
-40039:     i_variables(y.i_variables) {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline void
-40039: MIP_Problem::add_constraint_helper(const Constraint& c) {
-40039: 
-40039:   const dimension_type size = input_cs.size();
-40039:   if (size == input_cs.capacity()) {
-40039:     const dimension_type max_size = input_cs.max_size();
-40039:     if (size == max_size) {
-40039:       throw std::length_error("MIP_Problem::add_constraint(): "
-40039:                               "too many constraints");
-40039:     }
-40039: 
-40039:     input_cs.reserve(compute_capacity(size + 1, max_size));
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   input_cs.push_back(new Constraint(c));
-40039: }
-40039: 
-40039: inline
-40039: MIP_Problem::~MIP_Problem() {
-40039: 
-40039: 
-40039:   for (Constraint_Sequence::const_iterator
-40039:          i = nth_iter(input_cs, inherited_constraints),
-40039:          i_end = input_cs.end(); i != i_end; ++i) {
-40039:     delete *i;
-40039:   }
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: MIP_Problem::set_optimization_mode(const Optimization_Mode mode) {
-40039:   if (opt_mode != mode) {
-40039:     opt_mode = mode;
-40039:     if (status == UNBOUNDED || status == OPTIMIZED) {
-40039:       status = SATISFIABLE;
-40039:     }
-40039:     ((void) 0);
-40039:   }
-40039: }
-40039: 
-40039: inline const Linear_Expression&
-40039: MIP_Problem::objective_function() const {
-40039:   return input_obj_function;
-40039: }
-40039: 
-40039: inline Optimization_Mode
-40039: MIP_Problem::optimization_mode() const {
-40039:   return opt_mode;
-40039: }
-40039: 
-40039: inline void
-40039: MIP_Problem::optimal_value(Coefficient& numer, Coefficient& denom) const {
-40039:   const Generator& g = optimizing_point();
-40039:   evaluate_objective_function(g, numer, denom);
-40039: }
-40039: 
-40039: inline MIP_Problem::const_iterator
-40039: MIP_Problem::constraints_begin() const {
-40039:   return const_iterator(input_cs.begin());
-40039: }
-40039: 
-40039: inline MIP_Problem::const_iterator
-40039: MIP_Problem::constraints_end() const {
-40039:   return const_iterator(input_cs.end());
-40039: }
-40039: 
-40039: inline const Variables_Set&
-40039: MIP_Problem::integer_space_dimensions() const {
-40039:   return i_variables;
-40039: }
-40039: 
-40039: inline MIP_Problem::Control_Parameter_Value
-40039: MIP_Problem::get_control_parameter(Control_Parameter_Name name) const {
-40039:   (void)(name);
-40039:   ((void) 0);
-40039:   return pricing;
-40039: }
-40039: 
-40039: inline void
-40039: MIP_Problem::set_control_parameter(Control_Parameter_Value value) {
-40039:   pricing = value;
-40039: }
-40039: 
-40039: inline void
-40039: MIP_Problem::m_swap(MIP_Problem& y) {
-40039:   using std::swap;
-40039:   swap(external_space_dim, y.external_space_dim);
-40039:   swap(internal_space_dim, y.internal_space_dim);
-40039:   swap(tableau, y.tableau);
-40039:   swap(working_cost, y.working_cost);
-40039:   swap(mapping, y.mapping);
-40039:   swap(initialized, y.initialized);
-40039:   swap(base, y.base);
-40039:   swap(status, y.status);
-40039:   swap(pricing, y.pricing);
-40039:   swap(input_cs, y.input_cs);
-40039:   swap(inherited_constraints, y.inherited_constraints);
-40039:   swap(first_pending_constraint, y.first_pending_constraint);
-40039:   swap(input_obj_function, y.input_obj_function);
-40039:   swap(opt_mode, y.opt_mode);
-40039:   swap(last_generator, y.last_generator);
-40039:   swap(i_variables, y.i_variables);
-40039: }
-40039: 
-40039: inline MIP_Problem&
-40039: MIP_Problem::operator=(const MIP_Problem& y) {
-40039:   MIP_Problem tmp(y);
-40039:   m_swap(tmp);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline void
-40039: MIP_Problem::clear() {
-40039:   MIP_Problem tmp;
-40039:   m_swap(tmp);
-40039: }
-40039: 
-40039: 
-40039: inline memory_size_type
-40039: MIP_Problem::external_memory_in_bytes() const {
-40039:   memory_size_type n
-40039:     = working_cost.external_memory_in_bytes()
-40039:     + tableau.external_memory_in_bytes()
-40039:     + input_obj_function.external_memory_in_bytes()
-40039:     + last_generator.external_memory_in_bytes();
-40039: 
-40039: 
-40039: 
-40039:   n += input_cs.capacity() * sizeof(Constraint*);
-40039:   for (Constraint_Sequence::const_iterator
-40039:          i = nth_iter(input_cs, inherited_constraints),
-40039:          i_end = input_cs.end(); i != i_end; ++i) {
-40039:     n += ((*i)->total_memory_in_bytes());
-40039:   }
-40039: 
-40039: 
-40039:   n += base.capacity() * sizeof(dimension_type);
-40039: 
-40039:   n += mapping.capacity() * sizeof(std::pair<dimension_type, dimension_type>);
-40039:   return n;
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: MIP_Problem::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: inline
-40039: MIP_Problem::const_iterator::const_iterator(Base b)
-40039:   : itr(b) {
-40039: }
-40039: 
-40039: inline MIP_Problem::const_iterator::difference_type
-40039: MIP_Problem::const_iterator::operator-(const const_iterator& y) const {
-40039:   return itr - y.itr;
-40039: }
-40039: 
-40039: inline MIP_Problem::const_iterator&
-40039: MIP_Problem::const_iterator::operator++() {
-40039:   ++itr;
-40039:   return *this;
-40039: }
-40039: 
-40039: inline MIP_Problem::const_iterator&
-40039: MIP_Problem::const_iterator::operator--() {
-40039:   --itr;
-40039:   return *this;
-40039: }
-40039: 
-40039: inline MIP_Problem::const_iterator
-40039: MIP_Problem::const_iterator::operator++(int) {
-40039:   const_iterator x = *this;
-40039:   operator++();
-40039:   return x;
-40039: }
-40039: 
-40039: inline MIP_Problem::const_iterator
-40039: MIP_Problem::const_iterator::operator--(int) {
-40039:   const_iterator x = *this;
-40039:   operator--();
-40039:   return x;
-40039: }
-40039: 
-40039: inline MIP_Problem::const_iterator
-40039: MIP_Problem::const_iterator::operator+(difference_type n) const {
-40039:   return const_iterator(itr + n);
-40039: }
-40039: 
-40039: inline MIP_Problem::const_iterator
-40039: MIP_Problem::const_iterator::operator-(difference_type n) const {
-40039:   return const_iterator(itr - n);
-40039: }
-40039: 
-40039: inline MIP_Problem::const_iterator&
-40039: MIP_Problem::const_iterator::operator+=(difference_type n) {
-40039:   itr += n;
-40039:   return *this;
-40039: }
-40039: 
-40039: inline MIP_Problem::const_iterator&
-40039: MIP_Problem::const_iterator::operator-=(difference_type n) {
-40039:   itr -= n;
-40039:   return *this;
-40039: }
-40039: 
-40039: inline MIP_Problem::const_iterator::reference
-40039: MIP_Problem::const_iterator::operator*() const {
-40039:   return *(*itr);
-40039: }
-40039: 
-40039: inline MIP_Problem::const_iterator::pointer
-40039: MIP_Problem::const_iterator::operator->() const {
-40039:   return *itr;
-40039: }
-40039: 
-40039: inline bool
-40039: MIP_Problem::const_iterator::operator==(const const_iterator& y) const {
-40039:   return itr == y.itr;
-40039: }
-40039: 
-40039: inline bool
-40039: MIP_Problem::const_iterator::operator!=(const const_iterator& y) const {
-40039:   return itr != y.itr;
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: swap(MIP_Problem& x, MIP_Problem& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 974 "../../src/MIP_Problem_defs.hh" 2
-40039: # 1 "../../src/MIP_Problem_templates.hh" 1
-40039: # 29 "../../src/MIP_Problem_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename In>
-40039: MIP_Problem::MIP_Problem(const dimension_type dim,
-40039:                          In first, In last,
-40039:                          const Variables_Set& int_vars,
-40039:                          const Linear_Expression& obj,
-40039:                          const Optimization_Mode mode)
-40039:   : external_space_dim(dim),
-40039:     internal_space_dim(0),
-40039:     tableau(),
-40039:     working_cost(0),
-40039:     mapping(),
-40039:     base(),
-40039:     status(PARTIALLY_SATISFIABLE),
-40039:     pricing(PRICING_STEEPEST_EDGE_FLOAT),
-40039:     initialized(false),
-40039:     input_cs(),
-40039:     inherited_constraints(0),
-40039:     first_pending_constraint(0),
-40039:     input_obj_function(obj),
-40039:     opt_mode(mode),
-40039:     last_generator(point()),
-40039:     i_variables(int_vars) {
-40039: 
-40039: 
-40039:   if (i_variables.space_dimension() > external_space_dim) {
-40039:     std::ostringstream s;
-40039:     s << "PPL::MIP_Problem::MIP_Problem"
-40039:       << "(dim, first, last, int_vars, obj, mode):\n"
-40039:       << "dim == "<< external_space_dim << " and int_vars.space_dimension() =="
-40039:       << " " << i_variables.space_dimension() << " are dimension"
-40039:       "incompatible.";
-40039:     throw std::invalid_argument(s.str());
-40039:   }
-40039: 
-40039: 
-40039:   if (dim > max_space_dimension()) {
-40039:     throw std::length_error("PPL::MIP_Problem:: MIP_Problem(dim, first, "
-40039:                             "last, int_vars, obj, mode):\n"
-40039:                             "dim exceeds the maximum allowed"
-40039:                             "space dimension.");
-40039:   }
-40039: 
-40039:   if (obj.space_dimension() > dim) {
-40039:     std::ostringstream s;
-40039:     s << "PPL::MIP_Problem::MIP_Problem(dim, first, last,"
-40039:       << "int_vars, obj, mode):\n"
-40039:       << "obj.space_dimension() == "<< obj.space_dimension()
-40039:       << " exceeds d == "<< dim << ".";
-40039:     throw std::invalid_argument(s.str());
-40039:   }
-40039: 
-40039:   try {
-40039:     for (In i = first; i != last; ++i) {
-40039:       if (i->is_strict_inequality()) {
-40039:         throw std::invalid_argument("PPL::MIP_Problem::"
-40039:                                     "MIP_Problem(dim, first, last, int_vars,"
-40039:                                     "obj, mode):\nrange [first, last) contains"
-40039:                                     "a strict inequality constraint.");
-40039:       }
-40039:       if (i->space_dimension() > dim) {
-40039:         std::ostringstream s;
-40039:         s << "PPL::MIP_Problem::"
-40039:           << "MIP_Problem(dim, first, last, int_vars, obj, mode):\n"
-40039:           << "range [first, last) contains a constraint having space"
-40039:           << "dimension  == " << i->space_dimension() << " that exceeds"
-40039:           "this->space_dimension == " << dim << ".";
-40039:         throw std::invalid_argument(s.str());
-40039:       }
-40039:       add_constraint_helper(*i);
-40039:     }
-40039:   } catch (...) {
-40039: 
-40039: 
-40039:     for (Constraint_Sequence::const_iterator
-40039:           i = input_cs.begin(), i_end = input_cs.end();
-40039:           i != i_end; ++i) {
-40039:       delete *i;
-40039:     }
-40039: 
-40039:     throw;
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename In>
-40039: MIP_Problem::MIP_Problem(dimension_type dim,
-40039:                          In first, In last,
-40039:                          const Linear_Expression& obj,
-40039:                          Optimization_Mode mode)
-40039:   : external_space_dim(dim),
-40039:     internal_space_dim(0),
-40039:     tableau(),
-40039:     working_cost(0),
-40039:     mapping(),
-40039:     base(),
-40039:     status(PARTIALLY_SATISFIABLE),
-40039:     pricing(PRICING_STEEPEST_EDGE_FLOAT),
-40039:     initialized(false),
-40039:     input_cs(),
-40039:     inherited_constraints(0),
-40039:     first_pending_constraint(0),
-40039:     input_obj_function(obj),
-40039:     opt_mode(mode),
-40039:     last_generator(point()),
-40039:     i_variables() {
-40039: 
-40039:   if (dim > max_space_dimension()) {
-40039:     throw std::length_error("PPL::MIP_Problem::"
-40039:                             "MIP_Problem(dim, first, last, obj, mode):\n"
-40039:                             "dim exceeds the maximum allowed space "
-40039:                             "dimension.");
-40039:   }
-40039: 
-40039:   if (obj.space_dimension() > dim) {
-40039:     std::ostringstream s;
-40039:     s << "PPL::MIP_Problem::MIP_Problem(dim, first, last,"
-40039:       << " obj, mode):\n"
-40039:       << "obj.space_dimension() == "<< obj.space_dimension()
-40039:       << " exceeds d == "<< dim << ".";
-40039:     throw std::invalid_argument(s.str());
-40039:   }
-40039: 
-40039:   try {
-40039:     for (In i = first; i != last; ++i) {
-40039:       if (i->is_strict_inequality()) {
-40039:         throw std::invalid_argument("PPL::MIP_Problem::"
-40039:                                     "MIP_Problem(dim, first, last, obj, mode):"
-40039:                                     "\n"
-40039:                                     "range [first, last) contains a strict "
-40039:                                     "inequality constraint.");
-40039:       }
-40039:       if (i->space_dimension() > dim) {
-40039:         std::ostringstream s;
-40039:         s << "PPL::MIP_Problem::"
-40039:           << "MIP_Problem(dim, first, last, obj, mode):\n"
-40039:           << "range [first, last) contains a constraint having space"
-40039:           << "dimension" << " == " << i->space_dimension() << " that exceeds"
-40039:           "this->space_dimension == " << dim << ".";
-40039:         throw std::invalid_argument(s.str());
-40039:       }
-40039:       add_constraint_helper(*i);
-40039:     }
-40039:   } catch (...) {
-40039: 
-40039: 
-40039:     for (Constraint_Sequence::const_iterator
-40039:           i = input_cs.begin(), i_end = input_cs.end();
-40039:           i != i_end; ++i) {
-40039:       delete *i;
-40039:     }
-40039: 
-40039:     throw;
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: }
-40039: # 975 "../../src/MIP_Problem_defs.hh" 2
-40039: # 29 "../../src/Polyhedron_templates.hh" 2
-40039: 
-40039: 
-40039: 
-40039: # 1 "../../src/Floating_Point_Expression_defs.hh" 1
-40039: # 27 "../../src/Floating_Point_Expression_defs.hh"
-40039: # 1 "../../src/Floating_Point_Expression_types.hh" 1
-40039: # 16 "../../src/Floating_Point_Expression_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: class Floating_Point_Expression;
-40039: 
-40039: }
-40039: # 28 "../../src/Floating_Point_Expression_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/cmath" 1 3
-40039: # 39 "/usr/include/c++/8/cmath" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/cmath" 3
-40039: # 32 "../../src/Floating_Point_Expression_defs.hh" 2
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: # 54 "../../src/Floating_Point_Expression_defs.hh"
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: class Floating_Point_Expression {
-40039: 
-40039: public:
-40039: 
-40039: 
-40039:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
-40039: # 70 "../../src/Floating_Point_Expression_defs.hh"
-40039:   typedef Box<FP_Interval_Type> FP_Interval_Abstract_Store;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef std::map<dimension_type, FP_Linear_Form>
-40039:           FP_Linear_Form_Abstract_Store;
-40039: 
-40039: 
-40039:   typedef typename FP_Interval_Type::boundary_type boundary_type;
-40039: 
-40039: 
-40039:   typedef typename FP_Interval_Type::info_type info_type;
-40039: 
-40039: 
-40039:   virtual ~Floating_Point_Expression();
-40039: # 114 "../../src/Floating_Point_Expression_defs.hh"
-40039:   virtual bool linearize(const FP_Interval_Abstract_Store& int_store,
-40039:                          const FP_Linear_Form_Abstract_Store& lf_store,
-40039:                          FP_Linear_Form& result) const = 0;
-40039: # 126 "../../src/Floating_Point_Expression_defs.hh"
-40039:   static FP_Interval_Type absolute_error;
-40039: # 136 "../../src/Floating_Point_Expression_defs.hh"
-40039:   static bool overflows(const FP_Linear_Form& lf);
-40039: # 163 "../../src/Floating_Point_Expression_defs.hh"
-40039:   static void relative_error(const FP_Linear_Form& lf,
-40039:                              FP_Linear_Form& result);
-40039: # 183 "../../src/Floating_Point_Expression_defs.hh"
-40039:   static void intervalize(const FP_Linear_Form& lf,
-40039:                           const FP_Interval_Abstract_Store& store,
-40039:                           FP_Interval_Type& result);
-40039: 
-40039: private:
-40039: # 198 "../../src/Floating_Point_Expression_defs.hh"
-40039:   static FP_Interval_Type compute_absolute_error();
-40039: 
-40039: };
-40039: 
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: FP_Interval_Type Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039:   ::absolute_error = compute_absolute_error();
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Floating_Point_Expression_inlines.hh" 1
-40039: # 30 "../../src/Floating_Point_Expression_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline
-40039: Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::~Floating_Point_Expression() {}
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline bool
-40039: Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::overflows(const FP_Linear_Form& lf) {
-40039:   if (!lf.inhomogeneous_term().is_bounded()) {
-40039:     return true;
-40039:   }
-40039: 
-40039:   dimension_type dimension = lf.space_dimension();
-40039:   for (dimension_type i = 0; i < dimension; ++i) {
-40039:     if (!lf.coefficient(Variable(i)).is_bounded()) {
-40039:       return true;
-40039:     }
-40039:   }
-40039: 
-40039:   return false;
-40039: }
-40039: 
-40039: }
-40039: # 210 "../../src/Floating_Point_Expression_defs.hh" 2
-40039: # 1 "../../src/Floating_Point_Expression_templates.hh" 1
-40039: # 29 "../../src/Floating_Point_Expression_templates.hh"
-40039: # 1 "/usr/include/c++/8/cmath" 1 3
-40039: # 39 "/usr/include/c++/8/cmath" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/cmath" 3
-40039: # 30 "../../src/Floating_Point_Expression_templates.hh" 2
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template<typename FP_Interval_Type, typename FP_Format>
-40039: void
-40039: Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::relative_error(const FP_Linear_Form& lf, FP_Linear_Form& result) {
-40039: 
-40039:   FP_Interval_Type error_propagator;
-40039:   boundary_type lb = -pow(FP_Format::BASE,
-40039:   -static_cast<typename Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039:   ::boundary_type>(FP_Format::MANTISSA_BITS));
-40039:   error_propagator.build(i_constraint(GREATER_OR_EQUAL, lb),
-40039:                          i_constraint(LESS_OR_EQUAL, -lb));
-40039: 
-40039: 
-40039:   const FP_Interval_Type* current_term = &lf.inhomogeneous_term();
-40039:   
-40039: # 47 "../../src/Floating_Point_Expression_templates.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 47 "../../src/Floating_Point_Expression_templates.hh"
-40039:                                    ;
-40039: 
-40039:   FP_Interval_Type
-40039:     current_multiplier(std::max(std::abs(current_term->lower()),
-40039:                                 std::abs(current_term->upper())));
-40039:   FP_Linear_Form current_result_term(current_multiplier);
-40039:   current_result_term *= error_propagator;
-40039:   result = FP_Linear_Form(current_result_term);
-40039: 
-40039: 
-40039:   dimension_type dimension = lf.space_dimension();
-40039:   for (dimension_type i = 0; i < dimension; ++i) {
-40039:     current_term = &lf.coefficient(Variable(i));
-40039:     
-40039: # 60 "../../src/Floating_Point_Expression_templates.hh" 3 4
-40039:    (static_cast<void> (0))
-40039: # 60 "../../src/Floating_Point_Expression_templates.hh"
-40039:                                      ;
-40039:     current_multiplier
-40039:       = FP_Interval_Type(std::max(std::abs(current_term->lower()),
-40039:                                   std::abs(current_term->upper())));
-40039:     current_result_term = FP_Linear_Form(Variable(i));
-40039:     current_result_term *= current_multiplier;
-40039:     current_result_term *= error_propagator;
-40039:     result += current_result_term;
-40039:   }
-40039: 
-40039:   return;
-40039: }
-40039: 
-40039: template<typename FP_Interval_Type, typename FP_Format>
-40039: void
-40039: Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::intervalize(const FP_Linear_Form& lf,
-40039:               const FP_Interval_Abstract_Store& store,
-40039:               FP_Interval_Type& result) {
-40039:   result = FP_Interval_Type(lf.inhomogeneous_term());
-40039:   dimension_type dimension = lf.space_dimension();
-40039:   
-40039: # 81 "../../src/Floating_Point_Expression_templates.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 81 "../../src/Floating_Point_Expression_templates.hh"
-40039:                                              ;
-40039:   for (dimension_type i = 0; i < dimension; ++i) {
-40039:     FP_Interval_Type current_addend = lf.coefficient(Variable(i));
-40039:     const FP_Interval_Type& curr_int = store.get_interval(Variable(i));
-40039:     current_addend *= curr_int;
-40039:     result += current_addend;
-40039:   }
-40039: 
-40039:   return;
-40039: }
-40039: 
-40039: template<typename FP_Interval_Type, typename FP_Format>
-40039: FP_Interval_Type
-40039: Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::compute_absolute_error() {
-40039:   typedef typename Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039:     ::boundary_type Boundary;
-40039:   boundary_type omega;
-40039:   omega = std::max(pow(static_cast<Boundary>(FP_Format::BASE),
-40039:                        static_cast<Boundary>(1 - FP_Format::EXPONENT_BIAS
-40039:                                              - FP_Format::MANTISSA_BITS)),
-40039:                    std::numeric_limits<Boundary>::denorm_min());
-40039:   FP_Interval_Type result;
-40039:   result.build(i_constraint(GREATER_OR_EQUAL, -omega),
-40039:                i_constraint(LESS_OR_EQUAL, omega));
-40039:   return result;
-40039: }
-40039: 
-40039: }
-40039: # 211 "../../src/Floating_Point_Expression_defs.hh" 2
-40039: # 33 "../../src/Polyhedron_templates.hh" 2
-40039: 
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Interval>
-40039: Polyhedron::Polyhedron(Topology topol,
-40039:                        const Box<Interval>& box,
-40039:                        Complexity_Class)
-40039:   : con_sys(topol, default_con_sys_repr),
-40039:     gen_sys(topol, default_gen_sys_repr),
-40039:     sat_c(),
-40039:     sat_g() {
-40039: 
-40039:   space_dim = box.space_dimension();
-40039: 
-40039: 
-40039:   if (box.is_empty()) {
-40039:     set_empty();
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     set_zero_dim_univ();
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   con_sys.set_space_dimension(space_dim);
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_l_n; Parma_Polyhedra_Library::Coefficient& l_n = holder_l_n.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_l_d; Parma_Polyhedra_Library::Coefficient& l_d = holder_l_d.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_u_n; Parma_Polyhedra_Library::Coefficient& u_n = holder_u_n.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_u_d; Parma_Polyhedra_Library::Coefficient& u_d = holder_u_d.item();
-40039: 
-40039:   if (topol == NECESSARILY_CLOSED) {
-40039:     for (dimension_type k = space_dim; k-- > 0; ) {
-40039:       const Variable v_k = Variable(k);
-40039: 
-40039:       bool l_closed = false;
-40039:       bool l_bounded = box.has_lower_bound(v_k, l_n, l_d, l_closed);
-40039: 
-40039:       bool u_closed = false;
-40039:       bool u_bounded = box.has_upper_bound(v_k, u_n, u_d, u_closed);
-40039: 
-40039: 
-40039:       if (l_bounded && u_bounded
-40039:           && l_closed && u_closed
-40039:           && l_n == u_n && l_d == u_d) {
-40039: 
-40039:         con_sys.insert(l_d * v_k == l_n);
-40039:       }
-40039:       else {
-40039:         if (l_bounded) {
-40039: 
-40039:           con_sys.insert(l_d * v_k >= l_n);
-40039:         }
-40039:         if (u_bounded) {
-40039: 
-40039:           con_sys.insert(u_d * v_k <= u_n);
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039:   else {
-40039: 
-40039:     for (dimension_type k = space_dim; k-- > 0; ) {
-40039:       const Variable v_k = Variable(k);
-40039: 
-40039:       bool l_closed = false;
-40039:       bool l_bounded = box.has_lower_bound(v_k, l_n, l_d, l_closed);
-40039: 
-40039:       bool u_closed = false;
-40039:       bool u_bounded = box.has_upper_bound(v_k, u_n, u_d, u_closed);
-40039: 
-40039: 
-40039:       if (l_bounded && u_bounded
-40039:           && l_closed && u_closed
-40039:           && l_n == u_n && l_d == u_d) {
-40039: 
-40039:         con_sys.insert(l_d * v_k == l_n);
-40039:       }
-40039:       else {
-40039: 
-40039:         if (l_bounded) {
-40039:           if (l_closed) {
-40039: 
-40039:             con_sys.insert(l_d * v_k >= l_n);
-40039:           }
-40039:           else {
-40039: 
-40039:             con_sys.insert(l_d * v_k > l_n);
-40039:           }
-40039:         }
-40039: 
-40039:         if (u_bounded) {
-40039:           if (u_closed) {
-40039: 
-40039:             con_sys.insert(u_d * v_k <= u_n);
-40039:           }
-40039:           else {
-40039: 
-40039:             con_sys.insert(u_d * v_k < u_n);
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   con_sys.add_low_level_constraints();
-40039: 
-40039: 
-40039:   set_constraints_up_to_date();
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Partial_Function>
-40039: void
-40039: Polyhedron::map_space_dimensions(const Partial_Function& pfunc) {
-40039:   if (space_dim == 0) {
-40039:     return;
-40039:   }
-40039:   if (pfunc.has_empty_codomain()) {
-40039: 
-40039:     if (marked_empty()
-40039:         || (has_pending_constraints()
-40039:             && !remove_pending_to_obtain_generators())
-40039:         || (!generators_are_up_to_date() && !update_generators())) {
-40039: 
-40039:       space_dim = 0;
-40039:       con_sys.clear();
-40039:     }
-40039:     else {
-40039: 
-40039:       set_zero_dim_univ();
-40039:     }
-40039: 
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039:   const dimension_type new_space_dimension = pfunc.max_in_codomain() + 1;
-40039: 
-40039:   if (new_space_dimension == space_dim) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     std::vector<Variable> cycle;
-40039:     cycle.reserve(space_dim);
-40039: 
-40039: 
-40039:     std::deque<bool> visited(space_dim);
-40039: 
-40039:     for (dimension_type i = space_dim; i-- > 0; ) {
-40039:       if (visited[i]) {
-40039:         continue;
-40039:       }
-40039: 
-40039:       dimension_type j = i;
-40039:       do {
-40039:         visited[j] = true;
-40039: 
-40039:         dimension_type k = 0;
-40039:         if (!pfunc.maps(j, k)) {
-40039:           throw_invalid_argument("map_space_dimensions(pfunc)",
-40039:                                  " pfunc is inconsistent");
-40039:         }
-40039:         if (k == j) {
-40039:           break;
-40039:         }
-40039: 
-40039:         cycle.push_back(Variable(j));
-40039: 
-40039:         j = k;
-40039:       } while (!visited[j]);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       if (constraints_are_up_to_date()) {
-40039:         con_sys.permute_space_dimensions(cycle);
-40039:       }
-40039: 
-40039:       if (generators_are_up_to_date()) {
-40039:         gen_sys.permute_space_dimensions(cycle);
-40039:       }
-40039: 
-40039:       cycle.clear();
-40039:     }
-40039: 
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const Generator_System& old_gensys = generators();
-40039: 
-40039:   if (old_gensys.has_no_rows()) {
-40039: 
-40039:     Polyhedron new_polyhedron(topology(), new_space_dimension, EMPTY);
-40039:     m_swap(new_polyhedron);
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   std::vector<dimension_type> pfunc_maps(space_dim, not_a_dimension());
-40039:   for (dimension_type j = space_dim; j-- > 0; ) {
-40039:     dimension_type pfunc_j;
-40039:     if (pfunc.maps(j, pfunc_j)) {
-40039:       pfunc_maps[j] = pfunc_j;
-40039:     }
-40039:   }
-40039: 
-40039:   Generator_System new_gensys;
-40039:   for (Generator_System::const_iterator i = old_gensys.begin(),
-40039:          old_gensys_end = old_gensys.end(); i != old_gensys_end; ++i) {
-40039:     const Generator& old_g = *i;
-40039:     const Generator::expr_type old_e = old_g.expression();
-40039:     Linear_Expression expr;
-40039:     expr.set_space_dimension(new_space_dimension);
-40039:     bool all_zeroes = true;
-40039:     for (Generator::expr_type::const_iterator j = old_e.begin(),
-40039:           j_end = old_e.end(); j != j_end; ++j) {
-40039:       const dimension_type mapped_id = pfunc_maps[j.variable().id()];
-40039:       if (mapped_id != not_a_dimension()) {
-40039:         add_mul_assign(expr, *j, Variable(mapped_id));
-40039:         all_zeroes = false;
-40039:       }
-40039:     }
-40039:     switch (old_g.type()) {
-40039:     case Generator::LINE:
-40039:       if (!all_zeroes) {
-40039:         new_gensys.insert(line(expr));
-40039:       }
-40039:       break;
-40039:     case Generator::RAY:
-40039:       if (!all_zeroes) {
-40039:         new_gensys.insert(ray(expr));
-40039:       }
-40039:       break;
-40039:     case Generator::POINT:
-40039: 
-40039:       new_gensys.insert(point(expr, old_g.divisor()));
-40039:       break;
-40039:     case Generator::CLOSURE_POINT:
-40039: 
-40039:       new_gensys.insert(closure_point(expr, old_g.divisor()));
-40039:       break;
-40039:     }
-40039:   }
-40039:   Polyhedron new_polyhedron(topology(), new_gensys);
-40039:   m_swap(new_polyhedron);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename FP_Format, typename Interval_Info>
-40039: void
-40039: Polyhedron::refine_with_linear_form_inequality(
-40039:   const Linear_Form< Interval<FP_Format, Interval_Info> >& left,
-40039:   const Linear_Form< Interval<FP_Format, Interval_Info> >& right,
-40039:   const bool is_strict) {
-40039: 
-40039: 
-40039:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_308 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<FP_Format>::is_exact)>) }
-40039: 
-40039:                                                                  ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type left_space_dim = left.space_dimension();
-40039:   if (space_dim < left_space_dim) {
-40039:     throw_dimension_incompatible(
-40039:           "refine_with_linear_form_inequality(l1, l2, s)", "l1", left);
-40039:   }
-40039: 
-40039:   const dimension_type right_space_dim = right.space_dimension();
-40039:   if (space_dim < right_space_dim) {
-40039:     throw_dimension_incompatible(
-40039:           "refine_with_linear_form_inequality(l1, l2, s)", "l2", right);
-40039:   }
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: 
-40039:   typedef Interval<FP_Format, Interval_Info> FP_Interval_Type;
-40039:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
-40039: 
-40039:   if (Floating_Point_Expression<FP_Interval_Type, float_ieee754_single>::
-40039:       overflows(left)) {
-40039:     return;
-40039:   }
-40039: 
-40039:   if (Floating_Point_Expression<FP_Interval_Type, float_ieee754_single>::
-40039:       overflows(right)) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   FP_Linear_Form left_minus_right(left);
-40039:   left_minus_right -= right;
-40039:   if (Floating_Point_Expression<FP_Interval_Type, float_ieee754_single>::
-40039:       overflows(left_minus_right)) {
-40039:     return;
-40039:   }
-40039: 
-40039:   dimension_type lf_space_dim = left_minus_right.space_dimension();
-40039:   FP_Linear_Form lf_approx;
-40039:   overapproximate_linear_form(left_minus_right, lf_space_dim, lf_approx);
-40039:   if (Floating_Point_Expression<FP_Interval_Type, float_ieee754_single>::
-40039:       overflows(lf_approx)) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   Linear_Expression lf_approx_le;
-40039:   convert_to_integer_expression(lf_approx, lf_space_dim, lf_approx_le);
-40039: 
-40039: 
-40039:   if (!is_strict || is_necessarily_closed()) {
-40039:     refine_with_constraint(lf_approx_le <= 0);
-40039:   }
-40039:   else {
-40039:     refine_with_constraint(lf_approx_le < 0);
-40039:   }
-40039: }
-40039: 
-40039: template <typename FP_Format, typename Interval_Info>
-40039: void
-40039: Polyhedron::affine_form_image(const Variable var,
-40039: const Linear_Form<Interval <FP_Format, Interval_Info> >& lf) {
-40039: 
-40039: 
-40039:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_378 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<FP_Format>::is_exact)>) }
-40039: 
-40039:                                                                  ;
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type lf_space_dim = lf.space_dimension();
-40039:   if (space_dim < lf_space_dim) {
-40039:     throw_dimension_incompatible("affine_form_image(v, l, s)", "l", lf);
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type var_id = var.id();
-40039:   if (space_dim < var_id + 1) {
-40039:     throw_dimension_incompatible("affine_form_image(v, l, s)", "v", var);
-40039:   }
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: 
-40039:   typedef Interval<FP_Format, Interval_Info> FP_Interval_Type;
-40039:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
-40039: 
-40039:   if (Floating_Point_Expression<FP_Interval_Type, float_ieee754_single>::
-40039:       overflows(lf)) {
-40039:     *this = Polyhedron(topology(), space_dim, UNIVERSE);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   FP_Linear_Form lf_approx;
-40039:   overapproximate_linear_form(lf, lf_space_dim, lf_approx);
-40039: 
-40039:   if (Floating_Point_Expression<FP_Interval_Type, float_ieee754_single>::
-40039:       overflows(lf_approx)) {
-40039:     *this = Polyhedron(topology(), space_dim, UNIVERSE);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   Linear_Expression lf_approx_le;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_lo_coeff; Parma_Polyhedra_Library::Coefficient& lo_coeff = holder_lo_coeff.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_hi_coeff; Parma_Polyhedra_Library::Coefficient& hi_coeff = holder_hi_coeff.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denominator; Parma_Polyhedra_Library::Coefficient& denominator = holder_denominator.item();
-40039:   convert_to_integer_expressions(lf_approx, lf_space_dim, lf_approx_le,
-40039:                                  lo_coeff, hi_coeff, denominator);
-40039: 
-40039: 
-40039:   bounded_affine_image(var, lf_approx_le + lo_coeff, lf_approx_le + hi_coeff,
-40039:                        denominator);
-40039: }
-40039: 
-40039: template <typename FP_Format, typename Interval_Info>
-40039: void
-40039: Polyhedron
-40039: ::overapproximate_linear_form(const Linear_Form<Interval <FP_Format, Interval_Info> >& lf,
-40039:                               const dimension_type lf_dimension,
-40039:                               Linear_Form<Interval <FP_Format, Interval_Info> >& result) {
-40039: 
-40039: 
-40039:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_438 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<FP_Format>::is_exact)>) }
-40039: 
-40039:                                                                  ;
-40039: 
-40039:   typedef Interval<FP_Format, Interval_Info> FP_Interval_Type;
-40039:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
-40039: 
-40039: 
-40039: 
-40039:   Box<FP_Interval_Type> box(*this);
-40039: 
-40039:   result = FP_Linear_Form(lf.inhomogeneous_term());
-40039: 
-40039:   const FP_Interval_Type aux_divisor1(static_cast<FP_Format>(0.5));
-40039:   FP_Interval_Type aux_divisor2(aux_divisor1);
-40039:   aux_divisor2.lower() = static_cast<FP_Format>(-0.5);
-40039: 
-40039:   for (dimension_type i = 0; i < lf_dimension; ++i) {
-40039:     Variable curr_var(i);
-40039:     const FP_Interval_Type& curr_coeff = lf.coefficient(curr_var);
-40039:     ((void) 0);
-40039:     FP_Format curr_lb = curr_coeff.lower();
-40039:     FP_Format curr_ub = curr_coeff.upper();
-40039:     if (curr_lb != 0 || curr_ub != 0) {
-40039:       const FP_Interval_Type& curr_int = box.get_interval(curr_var);
-40039:       FP_Interval_Type curr_addend(curr_ub - curr_lb);
-40039:       curr_addend *= aux_divisor2;
-40039:       curr_addend *= curr_int;
-40039:       result += curr_addend;
-40039:       curr_addend = FP_Interval_Type(curr_lb + curr_ub);
-40039:       curr_addend *= aux_divisor1;
-40039:       FP_Linear_Form curr_addend_lf(curr_var);
-40039:       curr_addend_lf *= curr_addend;
-40039:       result += curr_addend_lf;
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename FP_Format, typename Interval_Info>
-40039: void
-40039: Polyhedron::convert_to_integer_expression(
-40039:                 const Linear_Form<Interval <FP_Format, Interval_Info> >& lf,
-40039:                 const dimension_type lf_dimension,
-40039:                 Linear_Expression& result) {
-40039:   result = Linear_Expression();
-40039: 
-40039:   typedef Interval<FP_Format, Interval_Info> FP_Interval_Type;
-40039:   std::vector<Coefficient> numerators(lf_dimension+1);
-40039:   std::vector<Coefficient> denominators(lf_dimension+1);
-40039: 
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_lcm; Parma_Polyhedra_Library::Coefficient& lcm = holder_lcm.item();
-40039:   lcm = 1;
-40039:   const FP_Interval_Type& b = lf.inhomogeneous_term();
-40039: 
-40039:   numer_denom(b.lower(), numerators[lf_dimension],
-40039:                          denominators[lf_dimension]);
-40039:   if (numerators[lf_dimension] != 0) {
-40039:       lcm_assign(lcm, lcm, denominators[lf_dimension]);
-40039:   }
-40039: 
-40039:   for (dimension_type i = 0; i < lf_dimension; ++i) {
-40039:     const FP_Interval_Type& curr_int = lf.coefficient(Variable(i));
-40039:     numer_denom(curr_int.lower(), numerators[i], denominators[i]);
-40039:     if (numerators[i] != 0) {
-40039:       lcm_assign(lcm, lcm, denominators[i]);
-40039:     }
-40039:   }
-40039: 
-40039:   for (dimension_type i = 0; i < lf_dimension; ++i) {
-40039:     if (numerators[i] != 0) {
-40039:       exact_div_assign(denominators[i], lcm, denominators[i]);
-40039:       numerators[i] *= denominators[i];
-40039:       result += numerators[i] * Variable(i);
-40039:     }
-40039:   }
-40039: 
-40039:   if (numerators[lf_dimension] != 0) {
-40039:     exact_div_assign(denominators[lf_dimension],
-40039:                      lcm, denominators[lf_dimension]);
-40039:     numerators[lf_dimension] *= denominators[lf_dimension];
-40039:     result += numerators[lf_dimension];
-40039:   }
-40039: }
-40039: 
-40039: template <typename FP_Format, typename Interval_Info>
-40039: void
-40039: Polyhedron::convert_to_integer_expressions(
-40039:                 const Linear_Form<Interval <FP_Format, Interval_Info> >& lf,
-40039:                 const dimension_type lf_dimension, Linear_Expression& res,
-40039:                 Coefficient& res_low_coeff, Coefficient& res_hi_coeff,
-40039:                 Coefficient& denominator) {
-40039:   res = Linear_Expression();
-40039: 
-40039:   typedef Interval<FP_Format, Interval_Info> FP_Interval_Type;
-40039:   std::vector<Coefficient> numerators(lf_dimension+2);
-40039:   std::vector<Coefficient> denominators(lf_dimension+2);
-40039: 
-40039: 
-40039: 
-40039:   Coefficient& lcm = denominator;
-40039:   lcm = 1;
-40039:   const FP_Interval_Type& b = lf.inhomogeneous_term();
-40039:   numer_denom(b.lower(), numerators[lf_dimension], denominators[lf_dimension]);
-40039: 
-40039:   if (numerators[lf_dimension] != 0) {
-40039:       lcm_assign(lcm, lcm, denominators[lf_dimension]);
-40039:   }
-40039: 
-40039:   numer_denom(b.upper(), numerators[lf_dimension+1],
-40039:                          denominators[lf_dimension+1]);
-40039:   if (numerators[lf_dimension+1] != 0) {
-40039:       lcm_assign(lcm, lcm, denominators[lf_dimension+1]);
-40039:   }
-40039: 
-40039:   for (dimension_type i = 0; i < lf_dimension; ++i) {
-40039:     const FP_Interval_Type& curr_int = lf.coefficient(Variable(i));
-40039:     numer_denom(curr_int.lower(), numerators[i], denominators[i]);
-40039:     if (numerators[i] != 0) {
-40039:       lcm_assign(lcm, lcm, denominators[i]);
-40039:     }
-40039:   }
-40039: 
-40039:   for (dimension_type i = 0; i < lf_dimension; ++i) {
-40039:     if (numerators[i] != 0) {
-40039:       exact_div_assign(denominators[i], lcm, denominators[i]);
-40039:       numerators[i] *= denominators[i];
-40039:       res += numerators[i] * Variable(i);
-40039:     }
-40039:   }
-40039: 
-40039:   if (numerators[lf_dimension] != 0) {
-40039:     exact_div_assign(denominators[lf_dimension],
-40039:                      lcm, denominators[lf_dimension]);
-40039:     numerators[lf_dimension] *= denominators[lf_dimension];
-40039:     res_low_coeff = numerators[lf_dimension];
-40039:   }
-40039:   else {
-40039:     res_low_coeff = 0;
-40039:   }
-40039: 
-40039:   if (numerators[lf_dimension+1] != 0) {
-40039:     exact_div_assign(denominators[lf_dimension+1],
-40039:                      lcm, denominators[lf_dimension+1]);
-40039:     numerators[lf_dimension+1] *= denominators[lf_dimension+1];
-40039:     res_hi_coeff = numerators[lf_dimension+1];
-40039:   }
-40039:   else {
-40039:     res_hi_coeff = 0;
-40039:   }
-40039: }
-40039: 
-40039: template <typename C>
-40039: void
-40039: Polyhedron::throw_dimension_incompatible(const char* method,
-40039:                                          const char* lf_name,
-40039:                                          const Linear_Form<C>& lf) const {
-40039:   throw_dimension_incompatible(method, lf_name, lf.space_dimension());
-40039: }
-40039: 
-40039: template <typename Input>
-40039: Input&
-40039: Polyhedron::check_obj_space_dimension_overflow(Input& input,
-40039:                                                const Topology topol,
-40039:                                                const char* method,
-40039:                                                const char* reason) {
-40039:   check_space_dimension_overflow(input.space_dimension(),
-40039:                                  max_space_dimension(),
-40039:                                  topol, method, reason);
-40039:   return input;
-40039: }
-40039: 
-40039: }
-40039: # 2858 "../../src/Polyhedron_defs.hh" 2
-40039: # 1 "../../src/Polyhedron_chdims_templates.hh" 1
-40039: # 28 "../../src/Polyhedron_chdims_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Linear_System1, typename Linear_System2>
-40039: void
-40039: Polyhedron::add_space_dimensions(Linear_System1& sys1,
-40039:                                  Linear_System2& sys2,
-40039:                                  Bit_Matrix& sat1,
-40039:                                  Bit_Matrix& sat2,
-40039:                                  dimension_type add_dim) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039:   sys1.set_space_dimension(sys1.space_dimension() + add_dim);
-40039:   sys2.add_universe_rows_and_space_dimensions(add_dim);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   sat1.resize(sat1.num_rows() + add_dim, sat1.num_columns());
-40039: 
-40039:   for (dimension_type i = sat1.num_rows() - add_dim; i-- > 0; ) {
-40039:     swap(sat1[i], sat1[i+add_dim]);
-40039:   }
-40039: 
-40039:   sat2.transpose_assign(sat1);
-40039: }
-40039: 
-40039: }
-40039: # 2859 "../../src/Polyhedron_defs.hh" 2
-40039: # 1 "../../src/Polyhedron_conversion_templates.hh" 1
-40039: # 29 "../../src/Polyhedron_conversion_templates.hh"
-40039: # 1 "../../src/Polyhedron_defs.hh" 1
-40039: # 30 "../../src/Polyhedron_conversion_templates.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/climits" 1 3
-40039: # 39 "/usr/include/c++/8/climits" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/climits" 3
-40039: 
-40039: 
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 1 3 4
-40039: # 43 "/usr/include/c++/8/climits" 2 3
-40039: # 37 "../../src/Polyhedron_conversion_templates.hh" 2
-40039: # 52 "../../src/Polyhedron_conversion_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: # 367 "../../src/Polyhedron_conversion_templates.hh"
-40039: template <typename Source_Linear_System, typename Dest_Linear_System>
-40039: dimension_type
-40039: Polyhedron::conversion(Source_Linear_System& source,
-40039:                        const dimension_type start,
-40039:                        Dest_Linear_System& dest,
-40039:                        Bit_Matrix& sat,
-40039:                        dimension_type num_lines_or_equalities) {
-40039:   typedef typename Dest_Linear_System::row_type dest_row_type;
-40039:   typedef typename Source_Linear_System::row_type source_row_type;
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   const dimension_type source_space_dim = source.space_dimension();
-40039:   const dimension_type source_num_rows = source.num_rows();
-40039:   const dimension_type source_num_columns = source_space_dim
-40039:     + (source.is_necessarily_closed() ? 1U : 2U);
-40039: 
-40039: 
-40039:   dimension_type dest_num_rows = dest.num_rows();
-40039: 
-40039: 
-40039:   std::vector<dest_row_type> recyclable_dest_rows;
-40039: 
-40039:   using std::swap;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_normalized_sp_i; Parma_Polyhedra_Library::Coefficient& normalized_sp_i = holder_normalized_sp_i.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_normalized_sp_o; Parma_Polyhedra_Library::Coefficient& normalized_sp_o = holder_normalized_sp_o.item();
-40039: 
-40039:   bool dest_sorted = dest.is_sorted();
-40039:   const dimension_type dest_first_pending_row = dest.first_pending_row();
-40039: 
-40039: 
-40039:   std::vector<dimension_type> redundant_source_rows;
-40039: 
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<std::vector<dimension_type> > holder_sat_num_ones; std::vector<dimension_type>& sat_num_ones = holder_sat_num_ones.item();
-40039:   sat_num_ones.resize(dest_num_rows, 0);
-40039:   for (dimension_type i = dest_num_rows; i-- > 0; ) {
-40039:     sat_num_ones[i] = sat[i].count_ones();
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   for (dimension_type k = start; k < source_num_rows; ++k) {
-40039:     const source_row_type& source_k = source[k];
-40039: # 437 "../../src/Polyhedron_conversion_templates.hh"
-40039:     Parma_Polyhedra_Library::Dirty_Temp<std::vector<Coefficient> > holder_scalar_prod; std::vector<Coefficient>& scalar_prod = holder_scalar_prod.item();
-40039:     if (dest_num_rows > scalar_prod.size()) {
-40039:       scalar_prod.insert(scalar_prod.end(),
-40039:                          dest_num_rows - scalar_prod.size(),
-40039:                          Coefficient_zero());
-40039:     }
-40039: 
-40039: 
-40039:     dimension_type index_non_zero = 0;
-40039:     for ( ; index_non_zero < dest_num_rows; ++index_non_zero) {
-40039:       do { } while (false);
-40039:       Scalar_Products::assign(scalar_prod[index_non_zero],
-40039:                               source_k,
-40039:                               dest.sys.rows[index_non_zero]);
-40039:       do { Weightwatch_Traits::weight += (17)*(source_space_dim); } while (false);
-40039:       if (scalar_prod[index_non_zero] != 0) {
-40039: 
-40039:         break;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       maybe_abandon();
-40039:     }
-40039:     for (dimension_type i = index_non_zero + 1; i < dest_num_rows; ++i) {
-40039:       do { } while (false);
-40039:       Scalar_Products::assign(scalar_prod[i], source_k, dest.sys.rows[i]);
-40039:       do { Weightwatch_Traits::weight += (25)*(source_space_dim); } while (false);
-40039: 
-40039: 
-40039: 
-40039:       maybe_abandon();
-40039:     }
-40039: # 478 "../../src/Polyhedron_conversion_templates.hh"
-40039:     if (index_non_zero < num_lines_or_equalities) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       dest.sys.rows[index_non_zero].set_is_ray_or_point_or_inequality();
-40039: 
-40039: 
-40039: 
-40039:       if (scalar_prod[index_non_zero] < 0) {
-40039: 
-40039: 
-40039:         neg_assign(scalar_prod[index_non_zero]);
-40039:         neg_assign(dest.sys.rows[index_non_zero].expr);
-40039: 
-40039: 
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       dest_sorted = false;
-40039:       --num_lines_or_equalities;
-40039:       if (index_non_zero != num_lines_or_equalities) {
-40039:         swap(dest.sys.rows[index_non_zero],
-40039:              dest.sys.rows[num_lines_or_equalities]);
-40039:         swap(scalar_prod[index_non_zero],
-40039:              scalar_prod[num_lines_or_equalities]);
-40039:       }
-40039:       const dest_row_type& dest_nle = dest.sys.rows[num_lines_or_equalities];
-40039: # 523 "../../src/Polyhedron_conversion_templates.hh"
-40039:       Coefficient& scalar_prod_nle = scalar_prod[num_lines_or_equalities];
-40039:       ((void) 0);
-40039:       for (dimension_type
-40039:              i = index_non_zero; i < num_lines_or_equalities; ++i) {
-40039:         if (scalar_prod[i] != 0) {
-40039: # 540 "../../src/Polyhedron_conversion_templates.hh"
-40039:           normalize2(scalar_prod[i],
-40039:                      scalar_prod_nle,
-40039:                      normalized_sp_i,
-40039:                      normalized_sp_o);
-40039:           dest_row_type& dest_i = dest.sys.rows[i];
-40039:           neg_assign(normalized_sp_i);
-40039:           dest_i.expr.linear_combine(dest_nle.expr,
-40039:                                      normalized_sp_o, normalized_sp_i);
-40039:           dest_i.strong_normalize();
-40039: 
-40039: 
-40039:           scalar_prod[i] = 0;
-40039: 
-40039:         }
-40039:       }
-40039: # 563 "../../src/Polyhedron_conversion_templates.hh"
-40039:       for (dimension_type
-40039:              i = num_lines_or_equalities + 1; i < dest_num_rows; ++i) {
-40039:         if (scalar_prod[i] != 0) {
-40039: # 578 "../../src/Polyhedron_conversion_templates.hh"
-40039:           normalize2(scalar_prod[i],
-40039:                      scalar_prod_nle,
-40039:                      normalized_sp_i,
-40039:                      normalized_sp_o);
-40039:           dest_row_type& dest_i = dest.sys.rows[i];
-40039:           do { } while (false);
-40039:           neg_assign(normalized_sp_i);
-40039:           dest_i.expr.linear_combine(dest_nle.expr,
-40039:                                      normalized_sp_o, normalized_sp_i);
-40039:           dest_i.strong_normalize();
-40039: 
-40039: 
-40039:           scalar_prod[i] = 0;
-40039: 
-40039:           do { Weightwatch_Traits::weight += (41)*(source_space_dim); } while (false);
-40039:         }
-40039: 
-40039: 
-40039: 
-40039:         maybe_abandon();
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       Bit_Row& sat_nle = sat[num_lines_or_equalities];
-40039:       if (source_k.is_ray_or_point_or_inequality()) {
-40039:         sat_nle.set(k - redundant_source_rows.size());
-40039: 
-40039:         ++sat_num_ones[num_lines_or_equalities];
-40039: 
-40039:       }
-40039:       else {
-40039: 
-40039: 
-40039: 
-40039:         --dest_num_rows;
-40039:         swap(dest.sys.rows[num_lines_or_equalities],
-40039:              dest.sys.rows[dest_num_rows]);
-40039:         recyclable_dest_rows.resize(recyclable_dest_rows.size() + 1);
-40039:         swap(dest.sys.rows.back(), recyclable_dest_rows.back());
-40039:         dest.sys.rows.pop_back();
-40039:         ((void) 0);
-40039: 
-40039:         swap(scalar_prod_nle, scalar_prod[dest_num_rows]);
-40039:         swap(sat_nle, sat[dest_num_rows]);
-40039: 
-40039:         swap(sat_num_ones[num_lines_or_equalities],
-40039:              sat_num_ones[dest_num_rows]);
-40039: 
-40039: 
-40039:       }
-40039: 
-40039: 
-40039:       continue;
-40039:     }
-40039: 
-40039: 
-40039:     ((void) 0);
-40039: # 649 "../../src/Polyhedron_conversion_templates.hh"
-40039:     dimension_type lines_or_equal_bound = num_lines_or_equalities;
-40039:     dimension_type inf_bound = dest_num_rows;
-40039: 
-40039: 
-40039:     while (inf_bound > lines_or_equal_bound
-40039:            && scalar_prod[lines_or_equal_bound] == 0) {
-40039:       ++lines_or_equal_bound;
-40039:     }
-40039:     dimension_type sup_bound = lines_or_equal_bound;
-40039:     while (inf_bound > sup_bound) {
-40039:       const int sp_sign = sgn(scalar_prod[sup_bound]);
-40039:       if (sp_sign == 0) {
-40039: 
-40039:         swap(dest.sys.rows[sup_bound], dest.sys.rows[lines_or_equal_bound]);
-40039:         swap(scalar_prod[sup_bound], scalar_prod[lines_or_equal_bound]);
-40039:         swap(sat[sup_bound], sat[lines_or_equal_bound]);
-40039: 
-40039:         swap(sat_num_ones[sup_bound], sat_num_ones[lines_or_equal_bound]);
-40039: 
-40039:         ++lines_or_equal_bound;
-40039:         ++sup_bound;
-40039:         dest_sorted = false;
-40039:       }
-40039:       else if (sp_sign < 0) {
-40039: 
-40039:         --inf_bound;
-40039:         swap(dest.sys.rows[sup_bound], dest.sys.rows[inf_bound]);
-40039:         swap(sat[sup_bound], sat[inf_bound]);
-40039:         swap(scalar_prod[sup_bound], scalar_prod[inf_bound]);
-40039: 
-40039:         swap(sat_num_ones[sup_bound], sat_num_ones[inf_bound]);
-40039: 
-40039:         dest_sorted = false;
-40039:       }
-40039:       else {
-40039: 
-40039:         ++sup_bound;
-40039:       }
-40039:     }
-40039: 
-40039:     if (sup_bound == dest_num_rows) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       if (source_k.is_ray_or_point_or_inequality()) {
-40039:         redundant_source_rows.push_back(k);
-40039:       }
-40039:       else {
-40039: 
-40039: 
-40039: 
-40039:         ((void) 0);
-40039:         while (dest_num_rows != lines_or_equal_bound) {
-40039:           recyclable_dest_rows.resize(recyclable_dest_rows.size() + 1);
-40039:           swap(dest.sys.rows.back(), recyclable_dest_rows.back());
-40039:           dest.sys.rows.pop_back();
-40039:           --dest_num_rows;
-40039:           }
-40039:         ((void) 0);
-40039:       }
-40039: 
-40039: 
-40039:       continue;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:     if (sup_bound == num_lines_or_equalities) {
-40039: 
-40039: 
-40039: 
-40039:       ((void) 0);
-40039:       while (dest_num_rows != sup_bound) {
-40039:         recyclable_dest_rows.resize(recyclable_dest_rows.size() + 1);
-40039:         swap(dest.sys.rows.back(), recyclable_dest_rows.back());
-40039:         dest.sys.rows.pop_back();
-40039:         --dest_num_rows;
-40039:       }
-40039:       ((void) 0);
-40039: 
-40039: 
-40039:       continue;
-40039:     }
-40039: # 744 "../../src/Polyhedron_conversion_templates.hh"
-40039:     const dimension_type bound = dest_num_rows;
-40039: # 755 "../../src/Polyhedron_conversion_templates.hh"
-40039:     const dimension_type min_saturators
-40039:       = source_num_columns - num_lines_or_equalities - 2;
-40039: 
-40039:     const dimension_type max_saturators = k - redundant_source_rows.size();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     for (dimension_type i = lines_or_equal_bound; i < sup_bound; ++i) {
-40039:       for (dimension_type j = sup_bound; j < bound; ++j) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:         ((void) 0)
-40039:                                         ;
-40039:         ((void) 0)
-40039:                                         ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:         Bit_Row new_satrow(sat[i], sat[j]);
-40039: # 790 "../../src/Polyhedron_conversion_templates.hh"
-40039:         dimension_type new_satrow_ones = new_satrow.count_ones();
-40039: 
-40039: 
-40039: 
-40039:         const dimension_type num_common_satur
-40039:           = max_saturators - new_satrow_ones;
-40039:         if (num_common_satur < min_saturators) {
-40039: 
-40039:           continue;
-40039:         }
-40039: # 808 "../../src/Polyhedron_conversion_templates.hh"
-40039:         const dimension_type max_ones_i_j
-40039:           = std::max(sat_num_ones[i], sat_num_ones[j]);
-40039:         if (max_ones_i_j + 1 == new_satrow_ones) {
-40039: 
-40039:           goto are_adjacent;
-40039:         }
-40039: 
-40039: 
-40039: 
-40039:         {
-40039:           bool redundant = false;
-40039:           do { } while (false);
-40039:           for (dimension_type l = num_lines_or_equalities; l < bound; ++l) {
-40039:             if (l != i && l != j
-40039:                 && subset_or_equal(sat[l], new_satrow)) {
-40039: 
-40039: 
-40039:               redundant = true;
-40039:               break;
-40039:             }
-40039:           }
-40039:           ((void) 0);
-40039:           do { Weightwatch_Traits::weight += (15)*(bound - num_lines_or_equalities); } while (false);
-40039:           if (redundant) {
-40039: 
-40039:             continue;
-40039:           }
-40039:         }
-40039: 
-40039: 
-40039:       are_adjacent:
-40039: 
-40039: 
-40039: 
-40039:         dest_row_type new_row;
-40039:         if (recyclable_dest_rows.empty()) {
-40039:           sat.add_recycled_row(new_satrow);
-40039: 
-40039:           sat_num_ones.push_back(new_satrow_ones);
-40039: 
-40039:         }
-40039:         else {
-40039:           swap(new_row, recyclable_dest_rows.back());
-40039:           recyclable_dest_rows.pop_back();
-40039:           new_row.set_space_dimension_no_ok(source_space_dim);
-40039:           swap(sat[dest_num_rows], new_satrow);
-40039: 
-40039:           swap(sat_num_ones[dest_num_rows], new_satrow_ones);
-40039: 
-40039:         }
-40039: # 871 "../../src/Polyhedron_conversion_templates.hh"
-40039:         normalize2(scalar_prod[i],
-40039:                    scalar_prod[j],
-40039:                    normalized_sp_i,
-40039:                    normalized_sp_o);
-40039:         do { } while (false);
-40039: 
-40039:         neg_assign(normalized_sp_o);
-40039:         new_row = dest.sys.rows[j];
-40039: 
-40039:         ((void) 0);
-40039:         ((void) 0);
-40039:         new_row.expr.linear_combine(dest.sys.rows[i].expr,
-40039:                                     normalized_sp_i, normalized_sp_o);
-40039: 
-40039:         do { Weightwatch_Traits::weight += (86)*(source_space_dim); } while (false);
-40039:         new_row.strong_normalize();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:         ((void) 0);
-40039:         if (scalar_prod.size() <= dest_num_rows) {
-40039:           scalar_prod.push_back(Coefficient_zero());
-40039:         }
-40039:         else {
-40039:           scalar_prod[dest_num_rows] = Coefficient_zero();
-40039:         }
-40039:         dest.sys.rows.resize(dest.sys.rows.size() + 1);
-40039:         swap(dest.sys.rows.back(), new_row);
-40039: 
-40039:         ++dest_num_rows;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       maybe_abandon();
-40039:     }
-40039: 
-40039: 
-40039:     dimension_type j;
-40039:     if (source_k.is_ray_or_point_or_inequality()) {
-40039: 
-40039: 
-40039:       j = sup_bound;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const dimension_type new_k = k - redundant_source_rows.size();
-40039:       for (dimension_type l = lines_or_equal_bound;
-40039:            l < sup_bound; ++l) {
-40039:         sat[l].set(new_k);
-40039: 
-40039:         ++sat_num_ones[l];
-40039: 
-40039:       }
-40039:     }
-40039:     else {
-40039: 
-40039: 
-40039:       j = lines_or_equal_bound;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     dimension_type i = dest_num_rows;
-40039:     while (j < bound && i > bound) {
-40039:       --i;
-40039:       swap(dest.sys.rows[i], dest.sys.rows[j]);
-40039:       swap(scalar_prod[i], scalar_prod[j]);
-40039:       swap(sat[i], sat[j]);
-40039: 
-40039:       swap(sat_num_ones[i], sat_num_ones[j]);
-40039: 
-40039:       ++j;
-40039:       dest_sorted = false;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     const dimension_type new_num_rows = (j == bound) ? i : j;
-40039:     ((void) 0);
-40039:     while (dest_num_rows != new_num_rows) {
-40039:       recyclable_dest_rows.resize(recyclable_dest_rows.size() + 1);
-40039:       swap(dest.sys.rows.back(), recyclable_dest_rows.back());
-40039:       dest.sys.rows.pop_back();
-40039:       --dest_num_rows;
-40039:     }
-40039:     ((void) 0);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (redundant_source_rows.size() > 0) {
-40039:     source.remove_rows(redundant_source_rows);
-40039:     sat.remove_trailing_columns(redundant_source_rows.size());
-40039:   }
-40039: # 985 "../../src/Polyhedron_conversion_templates.hh"
-40039:   if (start > 0 && start < source.num_rows()) {
-40039:     source.set_sorted(compare(source[start - 1], source[start]) <= 0);
-40039:   }
-40039: 
-40039:   source.unset_pending_rows();
-40039: 
-40039: 
-40039: 
-40039:   if (!recyclable_dest_rows.empty()) {
-40039:     const dimension_type num_removed_rows = recyclable_dest_rows.size();
-40039:     sat.remove_trailing_rows(num_removed_rows);
-40039:   }
-40039:   if (dest_sorted) {
-40039: 
-40039: 
-40039: 
-40039:     for (dimension_type i = dest_first_pending_row;
-40039:          i < dest_num_rows; ++i) {
-40039:       if (compare(dest.sys.rows[i - 1], dest.sys.rows[i]) > 0) {
-40039:         dest_sorted = false;
-40039:         break;
-40039:       }
-40039:     }
-40039:   }
-40039: # 1017 "../../src/Polyhedron_conversion_templates.hh"
-40039:   dest.sys.index_first_pending = dest.num_rows();
-40039:   dest.set_sorted(dest_sorted);
-40039:   ((void) 0);
-40039: 
-40039:   return num_lines_or_equalities;
-40039: }
-40039: 
-40039: }
-40039: # 2860 "../../src/Polyhedron_defs.hh" 2
-40039: # 1 "../../src/Polyhedron_minimize_templates.hh" 1
-40039: # 31 "../../src/Polyhedron_minimize_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: # 69 "../../src/Polyhedron_minimize_templates.hh"
-40039: template <typename Source_Linear_System, typename Dest_Linear_System>
-40039: bool
-40039: Polyhedron::minimize(const bool con_to_gen,
-40039:                      Source_Linear_System& source,
-40039:                      Dest_Linear_System& dest,
-40039:                      Bit_Matrix& sat) {
-40039: 
-40039:   typedef typename Dest_Linear_System::row_type dest_row_type;
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039:   if (!source.is_sorted()) {
-40039:     source.sort_rows();
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type dest_num_rows
-40039:     = source.topology() == NECESSARILY_CLOSED ? source.space_dimension() + 1
-40039:                                               : source.space_dimension() + 2;
-40039: 
-40039:   dest.clear();
-40039:   dest.set_space_dimension(source.space_dimension());
-40039: 
-40039: 
-40039:   for (dimension_type i = 0; i < dest_num_rows; ++i) {
-40039:     Linear_Expression expr;
-40039:     expr.set_space_dimension(dest_num_rows - 1);
-40039:     if (i == 0) {
-40039:       expr += 1;
-40039:     }
-40039:     else {
-40039:       expr += Variable(i - 1);
-40039:     }
-40039:     dest_row_type dest_i(expr, dest_row_type::LINE_OR_EQUALITY, NECESSARILY_CLOSED);
-40039:     if (dest.topology() == NOT_NECESSARILY_CLOSED) {
-40039:       dest_i.mark_as_not_necessarily_closed();
-40039:     }
-40039:     dest.sys.insert_no_ok(dest_i, Recycle_Input());
-40039:   }
-40039: 
-40039: 
-40039:   dest.set_sorted(false);
-40039: # 141 "../../src/Polyhedron_minimize_templates.hh"
-40039:   Bit_Matrix tmp_sat(dest_num_rows, source.num_rows());
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type num_lines_or_equalities
-40039:     = conversion(source, 0U, dest, tmp_sat, dest_num_rows);
-40039: 
-40039:   dest_num_rows = dest.num_rows();
-40039: # 166 "../../src/Polyhedron_minimize_templates.hh"
-40039:   dimension_type first_point;
-40039:   if (dest.is_necessarily_closed()) {
-40039:     for (first_point = num_lines_or_equalities;
-40039:         first_point < dest_num_rows;
-40039:         ++first_point) {
-40039:       if (dest[first_point].expr.inhomogeneous_term() > 0) {
-40039:         break;
-40039:       }
-40039:     }
-40039:   }
-40039:   else {
-40039:     for (first_point = num_lines_or_equalities;
-40039:         first_point < dest_num_rows;
-40039:         ++first_point) {
-40039:       if (dest[first_point].expr.get(Variable(dest.space_dimension())) > 0) {
-40039:         break;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   if (first_point == dest_num_rows) {
-40039:     if (con_to_gen) {
-40039: 
-40039:       return true;
-40039:     }
-40039:     else {
-40039: # 200 "../../src/Polyhedron_minimize_templates.hh"
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       return false;
-40039:     }
-40039:   }
-40039:   else {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     sat.transpose_assign(tmp_sat);
-40039:     simplify(source, sat);
-40039:     return false;
-40039:   }
-40039: }
-40039: # 264 "../../src/Polyhedron_minimize_templates.hh"
-40039: template <typename Source_Linear_System1, typename Source_Linear_System2,
-40039:           typename Dest_Linear_System>
-40039: bool
-40039: Polyhedron::add_and_minimize(const bool con_to_gen,
-40039:                              Source_Linear_System1& source1,
-40039:                              Dest_Linear_System& dest,
-40039:                              Bit_Matrix& sat,
-40039:                              const Source_Linear_System2& source2) {
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039:   const dimension_type old_source1_num_rows = source1.num_rows();
-40039: 
-40039:   dimension_type k1 = 0;
-40039:   dimension_type k2 = 0;
-40039:   dimension_type source2_num_rows = source2.num_rows();
-40039:   while (k1 < old_source1_num_rows && k2 < source2_num_rows) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     const int cmp = compare(source1[k1], source2[k2]);
-40039:     if (cmp == 0) {
-40039: 
-40039:       ++k2;
-40039: 
-40039: 
-40039:       ++k1;
-40039:     }
-40039:     else if (cmp < 0) {
-40039: 
-40039:       ++k1;
-40039:     }
-40039:     else {
-40039: 
-40039: 
-40039: 
-40039:       source1.add_pending_row(source2[k2]);
-40039: 
-40039:       ++k2;
-40039:     }
-40039:   }
-40039: 
-40039:   if (k2 < source2_num_rows) {
-40039: 
-40039: 
-40039: 
-40039:     for ( ; k2 < source2_num_rows; ++k2) {
-40039:       source1.add_pending_row(source2[k2]);
-40039:     }
-40039:   }
-40039: 
-40039:   if (source1.num_pending_rows() == 0) {
-40039: 
-40039: 
-40039: 
-40039:     return false;
-40039:   }
-40039:   return add_and_minimize(con_to_gen, source1, dest, sat);
-40039: }
-40039: # 370 "../../src/Polyhedron_minimize_templates.hh"
-40039: template <typename Source_Linear_System, typename Dest_Linear_System>
-40039: bool
-40039: Polyhedron::add_and_minimize(const bool con_to_gen,
-40039:                              Source_Linear_System& source,
-40039:                              Dest_Linear_System& dest,
-40039:                              Bit_Matrix& sat) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:   sat.resize(dest.num_rows(), source.num_rows());
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type num_lines_or_equalities
-40039:     = conversion(source, source.first_pending_row(),
-40039:                  dest, sat,
-40039:                  dest.num_lines_or_equalities());
-40039: 
-40039: 
-40039:   const dimension_type dest_num_rows = dest.num_rows();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type first_point;
-40039:   if (dest.is_necessarily_closed()) {
-40039:     for (first_point = num_lines_or_equalities;
-40039:         first_point < dest_num_rows;
-40039:         ++first_point) {
-40039:       if (dest[first_point].expr.inhomogeneous_term() > 0) {
-40039:         break;
-40039:       }
-40039:     }
-40039:   }
-40039:   else {
-40039:     for (first_point = num_lines_or_equalities;
-40039:         first_point < dest_num_rows;
-40039:         ++first_point) {
-40039:       if (dest[first_point].expr.get(Variable(dest.space_dimension())) > 0) {
-40039:         break;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   if (first_point == dest_num_rows) {
-40039:     if (con_to_gen) {
-40039: 
-40039:       return true;
-40039:     }
-40039:     else {
-40039: # 434 "../../src/Polyhedron_minimize_templates.hh"
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       return false;
-40039:     }
-40039:   }
-40039:   else {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     sat.transpose();
-40039:     simplify(source, sat);
-40039: 
-40039:     sat.transpose();
-40039:     return false;
-40039:   }
-40039: }
-40039: 
-40039: }
-40039: # 2861 "../../src/Polyhedron_defs.hh" 2
-40039: # 1 "../../src/Polyhedron_simplify_templates.hh" 1
-40039: # 32 "../../src/Polyhedron_simplify_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: # 82 "../../src/Polyhedron_simplify_templates.hh"
-40039: template <typename Linear_System1>
-40039: dimension_type
-40039: Polyhedron::simplify(Linear_System1& sys, Bit_Matrix& sat) {
-40039:   dimension_type num_rows = sys.num_rows();
-40039:   const dimension_type num_cols_sat = sat.num_columns();
-40039: 
-40039:   using std::swap;
-40039: 
-40039: 
-40039:   dimension_type num_lines_or_equalities = 0;
-40039:   while (num_lines_or_equalities < num_rows
-40039:          && sys[num_lines_or_equalities].is_line_or_equality()) {
-40039:     ++num_lines_or_equalities;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (num_rows > simplify_num_saturators_size) {
-40039:     delete [] simplify_num_saturators_p;
-40039:     simplify_num_saturators_p = 0;
-40039:     simplify_num_saturators_size = 0;
-40039:     const size_t max_size
-40039:       = std::numeric_limits<size_t>::max() / sizeof(dimension_type);
-40039:     const size_t new_size = compute_capacity(num_rows, max_size);
-40039:     simplify_num_saturators_p = new dimension_type[new_size];
-40039:     simplify_num_saturators_size = new_size;
-40039:   }
-40039:   dimension_type* const num_saturators = simplify_num_saturators_p;
-40039: 
-40039:   bool sys_sorted = sys.is_sorted();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   for (dimension_type i = num_lines_or_equalities; i < num_rows; ++i) {
-40039:     if (sat[i].empty()) {
-40039: 
-40039: 
-40039: 
-40039:       sys.sys.rows[i].set_is_line_or_equality();
-40039: 
-40039:       sys.sys.rows[i].sign_normalize();
-40039: 
-40039: 
-40039:       if (i != num_lines_or_equalities) {
-40039:         sys.sys.rows[i].m_swap(sys.sys.rows[num_lines_or_equalities]);
-40039:         swap(sat[i], sat[num_lines_or_equalities]);
-40039:         swap(num_saturators[i], num_saturators[num_lines_or_equalities]);
-40039:       }
-40039:       ++num_lines_or_equalities;
-40039: 
-40039:       sys_sorted = false;
-40039:     }
-40039:     else {
-40039: 
-40039: 
-40039: 
-40039:       num_saturators[i] = num_cols_sat - sat[i].count_ones();
-40039:     }
-40039:   }
-40039: 
-40039:   sys.set_sorted(sys_sorted);
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type rank = sys.gauss(num_lines_or_equalities);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (rank < num_lines_or_equalities) {
-40039: # 169 "../../src/Polyhedron_simplify_templates.hh"
-40039:     for (dimension_type redundant = rank,
-40039:            erasing = num_rows;
-40039:          redundant < num_lines_or_equalities
-40039:            && erasing > num_lines_or_equalities;
-40039:          ) {
-40039:       --erasing;
-40039:       sys.remove_row(redundant);
-40039:       swap(sat[redundant], sat[erasing]);
-40039:       swap(num_saturators[redundant], num_saturators[erasing]);
-40039:       ++redundant;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     num_rows -= num_lines_or_equalities - rank;
-40039: 
-40039: 
-40039: 
-40039:     sys.remove_trailing_rows(sys.num_rows() - num_rows);
-40039: 
-40039:     ((void) 0);
-40039: 
-40039:     sat.remove_trailing_rows(num_lines_or_equalities - rank);
-40039: 
-40039: 
-40039:     num_lines_or_equalities = rank;
-40039:   }
-40039: 
-40039:   const dimension_type old_num_rows = sys.num_rows();
-40039: # 230 "../../src/Polyhedron_simplify_templates.hh"
-40039:   const dimension_type sys_num_columns
-40039:     = sys.topology() == NECESSARILY_CLOSED ? sys.space_dimension() + 1
-40039:                                            : sys.space_dimension() + 2;
-40039:   const dimension_type min_saturators
-40039:     = sys_num_columns - num_lines_or_equalities - 1;
-40039:   for (dimension_type i = num_lines_or_equalities; i < num_rows; ) {
-40039:     if (num_saturators[i] < min_saturators) {
-40039: 
-40039:       --num_rows;
-40039:       sys.remove_row(i);
-40039:       swap(sat[i], sat[num_rows]);
-40039:       swap(num_saturators[i], num_saturators[num_rows]);
-40039:     }
-40039:     else {
-40039:       ++i;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   for (dimension_type i = num_lines_or_equalities; i < num_rows; ) {
-40039:     bool redundant = false;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     for (dimension_type j = num_lines_or_equalities; j < num_rows; ) {
-40039:       if (i == j) {
-40039: 
-40039:         ++j;
-40039:       }
-40039:       else {
-40039: # 271 "../../src/Polyhedron_simplify_templates.hh"
-40039:         bool strict_subset;
-40039:         if (subset_or_equal(sat[j], sat[i], strict_subset)) {
-40039:           if (strict_subset) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:             redundant = true;
-40039:             break;
-40039:           }
-40039:           else {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:             --num_rows;
-40039:             sys.remove_row(j);
-40039:             ((void) 0);
-40039:             swap(sat[j], sat[num_rows]);
-40039:             swap(num_saturators[j], num_saturators[num_rows]);
-40039:           }
-40039:         }
-40039:         else {
-40039: 
-40039: 
-40039: 
-40039:           ++j;
-40039:         }
-40039:       }
-40039:     }
-40039:     if (redundant) {
-40039: 
-40039:       --num_rows;
-40039:       sys.remove_row(i);
-40039:       ((void) 0);
-40039:       swap(sat[i], sat[num_rows]);
-40039:       swap(num_saturators[i], num_saturators[num_rows]);
-40039:     }
-40039:     else {
-40039: 
-40039:       ++i;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   sat.remove_trailing_rows(old_num_rows - num_rows);
-40039: # 335 "../../src/Polyhedron_simplify_templates.hh"
-40039:   sys.back_substitute(num_lines_or_equalities);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   return num_lines_or_equalities;
-40039: }
-40039: 
-40039: }
-40039: # 2862 "../../src/Polyhedron_defs.hh" 2
-40039: # 35 "../../src/Box_templates.hh" 2
-40039: # 1 "../../src/Grid_defs.hh" 1
-40039: # 37 "../../src/Grid_defs.hh"
-40039: # 1 "../../src/Grid_Generator_System_defs.hh" 1
-40039: # 36 "../../src/Grid_Generator_System_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: std::ostream& operator<<(std::ostream& s, const Grid_Generator_System& gs);
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: void swap(Grid_Generator_System& x, Grid_Generator_System& y);
-40039: 
-40039: 
-40039: 
-40039: bool operator==(const Grid_Generator_System& x,
-40039:                 const Grid_Generator_System& y);
-40039: 
-40039: }
-40039: # 175 "../../src/Grid_Generator_System_defs.hh"
-40039: class Parma_Polyhedra_Library::Grid_Generator_System {
-40039: public:
-40039:   typedef Grid_Generator row_type;
-40039: 
-40039:   static const Representation default_representation = SPARSE;
-40039: 
-40039: 
-40039:   explicit Grid_Generator_System(Representation r = default_representation);
-40039: 
-40039: 
-40039:   explicit Grid_Generator_System(const Grid_Generator& g,
-40039:                                  Representation r = default_representation);
-40039: 
-40039: 
-40039:   explicit Grid_Generator_System(dimension_type dim,
-40039:                                  Representation r = default_representation);
-40039: 
-40039: 
-40039: 
-40039:   Grid_Generator_System(const Grid_Generator_System& gs);
-40039: 
-40039: 
-40039:   Grid_Generator_System(const Grid_Generator_System& gs, Representation r);
-40039: 
-40039: 
-40039:   ~Grid_Generator_System();
-40039: 
-40039: 
-40039:   Grid_Generator_System& operator=(const Grid_Generator_System& y);
-40039: 
-40039: 
-40039:   Representation representation() const;
-40039: 
-40039: 
-40039:   void set_representation(Representation r);
-40039: 
-40039: 
-40039:   static dimension_type max_space_dimension();
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void clear();
-40039: # 231 "../../src/Grid_Generator_System_defs.hh"
-40039:   void insert(const Grid_Generator& g);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void insert(Grid_Generator& g, Recycle_Input);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void insert(Grid_Generator_System& gs, Recycle_Input);
-40039: 
-40039: 
-40039:   static void initialize();
-40039: 
-40039: 
-40039:   static void finalize();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Grid_Generator_System& zero_dim_univ();
-40039: # 278 "../../src/Grid_Generator_System_defs.hh"
-40039:   class const_iterator
-40039:     : public std::iterator<std::forward_iterator_tag,
-40039:                            Grid_Generator,
-40039:                            std::ptrdiff_t,
-40039:                            const Grid_Generator*,
-40039:                            const Grid_Generator&> {
-40039:   public:
-40039: 
-40039:     const_iterator();
-40039: 
-40039: 
-40039:     const_iterator(const const_iterator& y);
-40039: 
-40039: 
-40039:     ~const_iterator();
-40039: 
-40039: 
-40039:     const_iterator& operator=(const const_iterator& y);
-40039: 
-40039: 
-40039:     const Grid_Generator& operator*() const;
-40039: 
-40039: 
-40039:     const Grid_Generator* operator->() const;
-40039: 
-40039: 
-40039:     const_iterator& operator++();
-40039: 
-40039: 
-40039:     const_iterator operator++(int);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     bool operator==(const const_iterator& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     bool operator!=(const const_iterator& y) const;
-40039: 
-40039:   private:
-40039:     friend class Grid_Generator_System;
-40039: 
-40039:     Linear_System<Grid_Generator>::const_iterator i;
-40039: 
-40039: 
-40039:     const_iterator(const Linear_System<Grid_Generator>::const_iterator& y);
-40039:   };
-40039: 
-40039: 
-40039:   bool empty() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const_iterator begin() const;
-40039: 
-40039: 
-40039:   const_iterator end() const;
-40039: 
-40039: 
-40039:   dimension_type num_rows() const;
-40039: 
-40039: 
-40039:   dimension_type num_parameters() const;
-40039: 
-40039: 
-40039:   dimension_type num_lines() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool has_points() const;
-40039: 
-40039: 
-40039:   bool is_equal_to(const Grid_Generator_System& y) const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: # 375 "../../src/Grid_Generator_System_defs.hh"
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   void m_swap(Grid_Generator_System& y);
-40039: 
-40039: private:
-40039: 
-40039:   const Grid_Generator& operator[](dimension_type k) const;
-40039: # 419 "../../src/Grid_Generator_System_defs.hh"
-40039:   void affine_image(Variable v,
-40039:                     const Linear_Expression& expr,
-40039:                     Coefficient_traits::const_reference denominator);
-40039: 
-40039: 
-40039:   void set_sorted(bool b);
-40039: # 441 "../../src/Grid_Generator_System_defs.hh"
-40039:   void add_universe_rows_and_columns(dimension_type dims);
-40039: 
-40039: 
-40039:   void set_space_dimension(dimension_type space_dim);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void remove_space_dimensions(const Variables_Set& vars);
-40039: 
-40039: 
-40039: 
-40039:   void shift_space_dimensions(Variable v, dimension_type n);
-40039: 
-40039: 
-40039:   void unset_pending_rows();
-40039: # 473 "../../src/Grid_Generator_System_defs.hh"
-40039:   void permute_space_dimensions(const std::vector<Variable>& cycle);
-40039: 
-40039:   bool has_no_rows() const;
-40039: 
-40039: 
-40039:   void remove_trailing_rows(dimension_type n);
-40039: 
-40039:   void insert_verbatim(const Grid_Generator& g);
-40039: 
-40039: 
-40039:   Topology topology() const;
-40039: 
-40039: 
-40039:   dimension_type first_pending_row() const;
-40039: 
-40039:   Linear_System<Grid_Generator> sys;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static const Grid_Generator_System* zero_dim_univ_p;
-40039: 
-40039:   friend bool
-40039:   operator==(const Grid_Generator_System& x, const Grid_Generator_System& y);
-40039: 
-40039: 
-40039:   void set_index_first_pending_row(dimension_type i);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void remove_invalid_lines_and_parameters();
-40039: 
-40039:   friend class Polyhedron;
-40039:   friend class Grid;
-40039: };
-40039: # 38 "../../src/Grid_defs.hh" 2
-40039: # 1 "../../src/Grid_Generator_System_inlines.hh" 1
-40039: # 29 "../../src/Grid_Generator_System_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline void
-40039: Grid_Generator_System::set_sorted(bool b) {
-40039:   sys.set_sorted(b);
-40039: }
-40039: 
-40039: inline void
-40039: Grid_Generator_System::unset_pending_rows() {
-40039:   sys.unset_pending_rows();
-40039: }
-40039: 
-40039: inline void
-40039: Grid_Generator_System::set_index_first_pending_row(const dimension_type i) {
-40039:   sys.set_index_first_pending_row(i);
-40039: }
-40039: 
-40039: inline void
-40039: Grid_Generator_System
-40039: ::permute_space_dimensions(const std::vector<Variable>& cycle) {
-40039:   return sys.permute_space_dimensions(cycle);
-40039: }
-40039: 
-40039: inline bool
-40039: Grid_Generator_System::is_equal_to(const Grid_Generator_System& y) const {
-40039:   return (sys == y.sys);
-40039: }
-40039: 
-40039: inline
-40039: Grid_Generator_System::Grid_Generator_System(Representation r)
-40039:   : sys(NECESSARILY_CLOSED, r) {
-40039:   sys.set_sorted(false);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Grid_Generator_System::Grid_Generator_System(const Grid_Generator_System& gs)
-40039:   : sys(gs.sys) {
-40039: }
-40039: 
-40039: inline
-40039: Grid_Generator_System::Grid_Generator_System(const Grid_Generator_System& gs,
-40039:                                              Representation r)
-40039:   : sys(gs.sys, r) {
-40039: }
-40039: 
-40039: inline
-40039: Grid_Generator_System::Grid_Generator_System(dimension_type dim,
-40039:                                              Representation r)
-40039:   : sys(NECESSARILY_CLOSED, r) {
-40039:   sys.set_space_dimension(dim);
-40039:   sys.set_sorted(false);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Grid_Generator_System::Grid_Generator_System(const Grid_Generator& g,
-40039:                                              Representation r)
-40039:   : sys(NECESSARILY_CLOSED, r) {
-40039:   sys.insert(g);
-40039:   sys.set_sorted(false);
-40039: }
-40039: 
-40039: inline
-40039: Grid_Generator_System::~Grid_Generator_System() {
-40039: }
-40039: 
-40039: inline Grid_Generator_System&
-40039: Grid_Generator_System::operator=(const Grid_Generator_System& y) {
-40039:   Grid_Generator_System tmp = y;
-40039:   swap(*this, tmp);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline Representation
-40039: Grid_Generator_System::representation() const {
-40039:   return sys.representation();
-40039: }
-40039: 
-40039: inline void
-40039: Grid_Generator_System::set_representation(Representation r) {
-40039:   sys.set_representation(r);
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Grid_Generator_System::max_space_dimension() {
-40039: 
-40039:   return Linear_System<Grid_Generator>::max_space_dimension() - 1;
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Grid_Generator_System::space_dimension() const {
-40039:   return sys.space_dimension();
-40039: }
-40039: 
-40039: inline const Grid_Generator_System&
-40039: Grid_Generator_System::zero_dim_univ() {
-40039:   ((void) 0);
-40039:   return *zero_dim_univ_p;
-40039: }
-40039: 
-40039: inline void
-40039: Grid_Generator_System::clear() {
-40039:   sys.clear();
-40039:   sys.set_sorted(false);
-40039:   sys.unset_pending_rows();
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline void
-40039: Grid_Generator_System::m_swap(Grid_Generator_System& y) {
-40039:   swap(sys, y.sys);
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Grid_Generator_System::external_memory_in_bytes() const {
-40039:   return sys.external_memory_in_bytes();
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Grid_Generator_System::total_memory_in_bytes() const {
-40039:   return external_memory_in_bytes() + sizeof(*this);
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Grid_Generator_System::num_rows() const {
-40039:   return sys.num_rows();
-40039: }
-40039: 
-40039: inline
-40039: Grid_Generator_System::const_iterator::const_iterator()
-40039:   : i() {
-40039: }
-40039: 
-40039: inline
-40039: Grid_Generator_System::const_iterator::const_iterator(const const_iterator& y)
-40039:   : i(y.i) {
-40039: }
-40039: 
-40039: inline
-40039: Grid_Generator_System::const_iterator::~const_iterator() {
-40039: }
-40039: 
-40039: inline Grid_Generator_System::const_iterator&
-40039: Grid_Generator_System::const_iterator::operator=(const const_iterator& y) {
-40039:   i = y.i;
-40039:   return *this;
-40039: }
-40039: 
-40039: inline const Grid_Generator&
-40039: Grid_Generator_System::const_iterator::operator*() const {
-40039:   return *i;
-40039: }
-40039: 
-40039: inline const Grid_Generator*
-40039: Grid_Generator_System::const_iterator::operator->() const {
-40039:   return i.operator->();
-40039: }
-40039: 
-40039: inline Grid_Generator_System::const_iterator&
-40039: Grid_Generator_System::const_iterator::operator++() {
-40039:   ++i;
-40039:   return *this;
-40039: }
-40039: 
-40039: inline Grid_Generator_System::const_iterator
-40039: Grid_Generator_System::const_iterator::operator++(int) {
-40039:   const const_iterator tmp = *this;
-40039:   operator++();
-40039:   return tmp;
-40039: }
-40039: 
-40039: inline bool
-40039: Grid_Generator_System
-40039: ::const_iterator::operator==(const const_iterator& y) const {
-40039:   return i == y.i;
-40039: }
-40039: 
-40039: inline bool
-40039: Grid_Generator_System
-40039: ::const_iterator::operator!=(const const_iterator& y) const {
-40039:   return i != y.i;
-40039: }
-40039: 
-40039: inline bool
-40039: Grid_Generator_System::empty() const {
-40039:   return sys.has_no_rows();
-40039: }
-40039: 
-40039: inline
-40039: Grid_Generator_System::const_iterator
-40039: ::const_iterator(const Linear_System<Grid_Generator>::const_iterator& y)
-40039:   : i(y) {
-40039: }
-40039: 
-40039: inline Grid_Generator_System::const_iterator
-40039: Grid_Generator_System::begin() const {
-40039:   return static_cast<Grid_Generator_System::const_iterator>(sys.begin());
-40039: }
-40039: 
-40039: inline Grid_Generator_System::const_iterator
-40039: Grid_Generator_System::end() const {
-40039:   return static_cast<Grid_Generator_System::const_iterator>(sys.end());
-40039: }
-40039: 
-40039: inline const Grid_Generator&
-40039: Grid_Generator_System::operator[](const dimension_type k) const {
-40039:   return sys[k];
-40039: }
-40039: 
-40039: inline bool
-40039: Grid_Generator_System::has_no_rows() const {
-40039:   return sys.has_no_rows();
-40039: }
-40039: 
-40039: inline void
-40039: Grid_Generator_System::remove_trailing_rows(dimension_type n) {
-40039:   sys.remove_trailing_rows(n);
-40039: }
-40039: 
-40039: inline void
-40039: Grid_Generator_System::insert_verbatim(const Grid_Generator& g) {
-40039:   sys.insert(g);
-40039: }
-40039: 
-40039: inline Topology
-40039: Grid_Generator_System::topology() const {
-40039:   return sys.topology();
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Grid_Generator_System::first_pending_row() const {
-40039:   return sys.first_pending_row();
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: operator==(const Grid_Generator_System& x,
-40039:            const Grid_Generator_System& y) {
-40039:   return x.is_equal_to(y);
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: swap(Grid_Generator_System& x, Grid_Generator_System& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 39 "../../src/Grid_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: # 1 "../../src/Grid_Certificate_types.hh" 1
-40039: # 16 "../../src/Grid_Certificate_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Grid_Certificate;
-40039: 
-40039: }
-40039: # 43 "../../src/Grid_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace IO_Operators {
-40039: # 63 "../../src/Grid_defs.hh"
-40039: std::ostream&
-40039: operator<<(std::ostream& s, const Grid& gr);
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: void swap(Grid& x, Grid& y);
-40039: # 80 "../../src/Grid_defs.hh"
-40039: bool operator==(const Grid& x, const Grid& y);
-40039: # 90 "../../src/Grid_defs.hh"
-40039: bool operator!=(const Grid& x, const Grid& y);
-40039: 
-40039: }
-40039: # 363 "../../src/Grid_defs.hh"
-40039: class Parma_Polyhedra_Library::Grid {
-40039: public:
-40039: 
-40039:   typedef Coefficient coefficient_type;
-40039: 
-40039: 
-40039:   static dimension_type max_space_dimension();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static bool can_recycle_congruence_systems();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static bool can_recycle_constraint_systems();
-40039: # 395 "../../src/Grid_defs.hh"
-40039:   explicit Grid(dimension_type num_dimensions = 0,
-40039:                 Degenerate_Element kind = UNIVERSE);
-40039: # 409 "../../src/Grid_defs.hh"
-40039:   explicit Grid(const Congruence_System& cgs);
-40039: # 427 "../../src/Grid_defs.hh"
-40039:   Grid(Congruence_System& cgs, Recycle_Input dummy);
-40039: # 443 "../../src/Grid_defs.hh"
-40039:   explicit Grid(const Constraint_System& cs);
-40039: # 464 "../../src/Grid_defs.hh"
-40039:   Grid(Constraint_System& cs, Recycle_Input dummy);
-40039: # 480 "../../src/Grid_defs.hh"
-40039:   explicit Grid(const Grid_Generator_System& ggs);
-40039: # 500 "../../src/Grid_defs.hh"
-40039:   Grid(Grid_Generator_System& ggs, Recycle_Input dummy);
-40039: # 518 "../../src/Grid_defs.hh"
-40039:   template <typename Interval>
-40039:   explicit Grid(const Box<Interval>& box,
-40039:                 Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 538 "../../src/Grid_defs.hh"
-40039:   template <typename U>
-40039:   explicit Grid(const BD_Shape<U>& bd,
-40039:                 Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 558 "../../src/Grid_defs.hh"
-40039:   template <typename U>
-40039:   explicit Grid(const Octagonal_Shape<U>& os,
-40039:                 Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 580 "../../src/Grid_defs.hh"
-40039:   explicit Grid(const Polyhedron& ph,
-40039:                 Complexity_Class complexity = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Grid(const Grid& y,
-40039:        Complexity_Class complexity = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Grid& operator=(const Grid& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type affine_dimension() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Constraint_System constraints() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Constraint_System minimized_constraints() const;
-40039: 
-40039: 
-40039:   const Congruence_System& congruences() const;
-40039: 
-40039: 
-40039:   const Congruence_System& minimized_congruences() const;
-40039: 
-40039: 
-40039:   const Grid_Generator_System& grid_generators() const;
-40039: 
-40039: 
-40039:   const Grid_Generator_System& minimized_grid_generators() const;
-40039: # 640 "../../src/Grid_defs.hh"
-40039:   Poly_Con_Relation relation_with(const Congruence& cg) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Poly_Gen_Relation
-40039:   relation_with(const Grid_Generator& g) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Poly_Gen_Relation
-40039:   relation_with(const Generator& g) const;
-40039: # 668 "../../src/Grid_defs.hh"
-40039:   Poly_Con_Relation relation_with(const Constraint& c) const;
-40039: 
-40039: 
-40039:   bool is_empty() const;
-40039: 
-40039: 
-40039:   bool is_universe() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_topologically_closed() const;
-40039: # 691 "../../src/Grid_defs.hh"
-40039:   bool is_disjoint_from(const Grid& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_discrete() const;
-40039: 
-40039: 
-40039:   bool is_bounded() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool contains_integer_point() const;
-40039: # 717 "../../src/Grid_defs.hh"
-40039:   bool constrains(Variable var) const;
-40039: # 726 "../../src/Grid_defs.hh"
-40039:   bool bounds_from_above(const Linear_Expression& expr) const;
-40039: # 735 "../../src/Grid_defs.hh"
-40039:   bool bounds_from_below(const Linear_Expression& expr) const;
-40039: # 764 "../../src/Grid_defs.hh"
-40039:   bool maximize(const Linear_Expression& expr,
-40039:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum) const;
-40039: # 798 "../../src/Grid_defs.hh"
-40039:   bool maximize(const Linear_Expression& expr,
-40039:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum,
-40039:                 Generator& point) const;
-40039: # 829 "../../src/Grid_defs.hh"
-40039:   bool minimize(const Linear_Expression& expr,
-40039:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum) const;
-40039: # 863 "../../src/Grid_defs.hh"
-40039:   bool minimize(const Linear_Expression& expr,
-40039:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum,
-40039:                 Generator& point) const;
-40039: # 897 "../../src/Grid_defs.hh"
-40039:   bool frequency(const Linear_Expression& expr,
-40039:                  Coefficient& freq_n, Coefficient& freq_d,
-40039:                  Coefficient& val_n, Coefficient& val_d) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool contains(const Grid& y) const;
-40039: # 915 "../../src/Grid_defs.hh"
-40039:   bool strictly_contains(const Grid& y) const;
-40039: # 934 "../../src/Grid_defs.hh"
-40039:   bool OK(bool check_not_empty = false) const;
-40039: # 947 "../../src/Grid_defs.hh"
-40039:   void add_congruence(const Congruence& cg);
-40039: # 957 "../../src/Grid_defs.hh"
-40039:   void add_grid_generator(const Grid_Generator& g);
-40039: # 968 "../../src/Grid_defs.hh"
-40039:   void add_congruences(const Congruence_System& cgs);
-40039: # 983 "../../src/Grid_defs.hh"
-40039:   void add_recycled_congruences(Congruence_System& cgs);
-40039: # 995 "../../src/Grid_defs.hh"
-40039:   void add_constraint(const Constraint& c);
-40039: # 1008 "../../src/Grid_defs.hh"
-40039:   void add_constraints(const Constraint_System& cs);
-40039: # 1025 "../../src/Grid_defs.hh"
-40039:   void add_recycled_constraints(Constraint_System& cs);
-40039: # 1035 "../../src/Grid_defs.hh"
-40039:   void refine_with_congruence(const Congruence& cg);
-40039: # 1045 "../../src/Grid_defs.hh"
-40039:   void refine_with_congruences(const Congruence_System& cgs);
-40039: # 1056 "../../src/Grid_defs.hh"
-40039:   void refine_with_constraint(const Constraint& c);
-40039: # 1066 "../../src/Grid_defs.hh"
-40039:   void refine_with_constraints(const Constraint_System& cs);
-40039: # 1081 "../../src/Grid_defs.hh"
-40039:   void add_grid_generators(const Grid_Generator_System& gs);
-40039: # 1098 "../../src/Grid_defs.hh"
-40039:   void add_recycled_grid_generators(Grid_Generator_System& gs);
-40039: # 1110 "../../src/Grid_defs.hh"
-40039:   void unconstrain(Variable var);
-40039: # 1124 "../../src/Grid_defs.hh"
-40039:   void unconstrain(const Variables_Set& vars);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void intersection_assign(const Grid& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void upper_bound_assign(const Grid& y);
-40039: # 1150 "../../src/Grid_defs.hh"
-40039:   bool upper_bound_assign_if_exact(const Grid& y);
-40039: # 1162 "../../src/Grid_defs.hh"
-40039:   void difference_assign(const Grid& y);
-40039: # 1173 "../../src/Grid_defs.hh"
-40039:   bool simplify_using_context_assign(const Grid& y);
-40039: # 1236 "../../src/Grid_defs.hh"
-40039:   void affine_image(Variable var,
-40039:                     const Linear_Expression& expr,
-40039:                     Coefficient_traits::const_reference denominator
-40039:                     = Coefficient_one());
-40039: # 1300 "../../src/Grid_defs.hh"
-40039:   void affine_preimage(Variable var,
-40039:                        const Linear_Expression& expr,
-40039:                        Coefficient_traits::const_reference denominator
-40039:                          = Coefficient_one());
-40039: # 1335 "../../src/Grid_defs.hh"
-40039:   void
-40039:   generalized_affine_image(Variable var,
-40039:                            Relation_Symbol relsym,
-40039:                            const Linear_Expression& expr,
-40039:                            Coefficient_traits::const_reference denominator
-40039:                            = Coefficient_one(),
-40039:                            Coefficient_traits::const_reference modulus
-40039:                            = Coefficient_zero());
-40039: # 1374 "../../src/Grid_defs.hh"
-40039:   void
-40039:   generalized_affine_preimage(Variable var,
-40039:                               Relation_Symbol relsym,
-40039:                               const Linear_Expression& expr,
-40039:                               Coefficient_traits::const_reference denominator
-40039:                               = Coefficient_one(),
-40039:                               Coefficient_traits::const_reference modulus
-40039:                               = Coefficient_zero());
-40039: # 1407 "../../src/Grid_defs.hh"
-40039:   void
-40039:   generalized_affine_image(const Linear_Expression& lhs,
-40039:                            Relation_Symbol relsym,
-40039:                            const Linear_Expression& rhs,
-40039:                            Coefficient_traits::const_reference modulus
-40039:                            = Coefficient_zero());
-40039: # 1438 "../../src/Grid_defs.hh"
-40039:   void
-40039:   generalized_affine_preimage(const Linear_Expression& lhs,
-40039:                               Relation_Symbol relsym,
-40039:                               const Linear_Expression& rhs,
-40039:                               Coefficient_traits::const_reference modulus
-40039:                               = Coefficient_zero());
-40039: # 1471 "../../src/Grid_defs.hh"
-40039:   void bounded_affine_image(Variable var,
-40039:                             const Linear_Expression& lb_expr,
-40039:                             const Linear_Expression& ub_expr,
-40039:                             Coefficient_traits::const_reference denominator
-40039:                             = Coefficient_one());
-40039: # 1503 "../../src/Grid_defs.hh"
-40039:   void bounded_affine_preimage(Variable var,
-40039:                                const Linear_Expression& lb_expr,
-40039:                                const Linear_Expression& ub_expr,
-40039:                                Coefficient_traits::const_reference denominator
-40039:                                = Coefficient_one());
-40039: # 1516 "../../src/Grid_defs.hh"
-40039:   void time_elapse_assign(const Grid& y);
-40039: # 1563 "../../src/Grid_defs.hh"
-40039:   void wrap_assign(const Variables_Set& vars,
-40039:                    Bounded_Integer_Type_Width w,
-40039:                    Bounded_Integer_Type_Representation r,
-40039:                    Bounded_Integer_Type_Overflow o,
-40039:                    const Constraint_System* cs_p = 0,
-40039:                    unsigned complexity_threshold = 16,
-40039:                    bool wrap_individually = true);
-40039: # 1579 "../../src/Grid_defs.hh"
-40039:   void drop_some_non_integer_points(Complexity_Class complexity
-40039:                                     = ANY_COMPLEXITY);
-40039: # 1594 "../../src/Grid_defs.hh"
-40039:   void drop_some_non_integer_points(const Variables_Set& vars,
-40039:                                     Complexity_Class complexity
-40039:                                     = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039:   void topological_closure_assign();
-40039: # 1616 "../../src/Grid_defs.hh"
-40039:   void congruence_widening_assign(const Grid& y, unsigned* tp = 
-40039: # 1616 "../../src/Grid_defs.hh" 3 4
-40039:                                                                __null
-40039: # 1616 "../../src/Grid_defs.hh"
-40039:                                                                    );
-40039: # 1633 "../../src/Grid_defs.hh"
-40039:   void generator_widening_assign(const Grid& y, unsigned* tp = 
-40039: # 1633 "../../src/Grid_defs.hh" 3 4
-40039:                                                               __null
-40039: # 1633 "../../src/Grid_defs.hh"
-40039:                                                                   );
-40039: # 1654 "../../src/Grid_defs.hh"
-40039:   void widening_assign(const Grid& y, unsigned* tp = 
-40039: # 1654 "../../src/Grid_defs.hh" 3 4
-40039:                                                     __null
-40039: # 1654 "../../src/Grid_defs.hh"
-40039:                                                         );
-40039: # 1676 "../../src/Grid_defs.hh"
-40039:   void limited_congruence_extrapolation_assign(const Grid& y,
-40039:                                                const Congruence_System& cgs,
-40039:                                                unsigned* tp = 
-40039: # 1678 "../../src/Grid_defs.hh" 3 4
-40039:                                                              __null
-40039: # 1678 "../../src/Grid_defs.hh"
-40039:                                                                  );
-40039: # 1700 "../../src/Grid_defs.hh"
-40039:   void limited_generator_extrapolation_assign(const Grid& y,
-40039:                                               const Congruence_System& cgs,
-40039:                                               unsigned* tp = 
-40039: # 1702 "../../src/Grid_defs.hh" 3 4
-40039:                                                             __null
-40039: # 1702 "../../src/Grid_defs.hh"
-40039:                                                                 );
-40039: # 1723 "../../src/Grid_defs.hh"
-40039:   void limited_extrapolation_assign(const Grid& y,
-40039:                                     const Congruence_System& cgs,
-40039:                                     unsigned* tp = 
-40039: # 1725 "../../src/Grid_defs.hh" 3 4
-40039:                                                   __null
-40039: # 1725 "../../src/Grid_defs.hh"
-40039:                                                       );
-40039: # 1758 "../../src/Grid_defs.hh"
-40039:   void add_space_dimensions_and_embed(dimension_type m);
-40039: # 1786 "../../src/Grid_defs.hh"
-40039:   void add_space_dimensions_and_project(dimension_type m);
-40039: # 1796 "../../src/Grid_defs.hh"
-40039:   void concatenate_assign(const Grid& y);
-40039: # 1808 "../../src/Grid_defs.hh"
-40039:   void remove_space_dimensions(const Variables_Set& vars);
-40039: # 1819 "../../src/Grid_defs.hh"
-40039:   void remove_higher_space_dimensions(dimension_type new_dimension);
-40039: # 1868 "../../src/Grid_defs.hh"
-40039:   template <typename Partial_Function>
-40039:   void map_space_dimensions(const Partial_Function& pfunc);
-40039: # 1894 "../../src/Grid_defs.hh"
-40039:   void expand_space_dimension(Variable var, dimension_type m);
-40039: # 1920 "../../src/Grid_defs.hh"
-40039:   void fold_space_dimensions(const Variables_Set& vars, Variable dest);
-40039: 
-40039: 
-40039: 
-40039:   friend bool operator==(const Grid& x, const Grid& y);
-40039: 
-40039:   friend class Parma_Polyhedra_Library::Grid_Certificate;
-40039: 
-40039:   template <typename Interval> friend class Parma_Polyhedra_Library::Box;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   ~Grid();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void m_swap(Grid& y);
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   int32_t hash_code() const;
-40039: 
-40039: 
-40039: 
-40039: private:
-40039: 
-40039: 
-40039:   Congruence_System con_sys;
-40039: 
-40039: 
-40039:   Grid_Generator_System gen_sys;
-40039: 
-40039: 
-40039: # 1 "../../src/Grid_Status_idefs.hh" 1
-40039: # 71 "../../src/Grid_Status_idefs.hh"
-40039: class Status {
-40039: public:
-40039: 
-40039:   Status();
-40039: 
-40039: 
-40039: 
-40039:   bool test_zero_dim_univ() const;
-40039:   void reset_zero_dim_univ();
-40039:   void set_zero_dim_univ();
-40039: 
-40039:   bool test_empty() const;
-40039:   void reset_empty();
-40039:   void set_empty();
-40039: 
-40039:   bool test_c_up_to_date() const;
-40039:   void reset_c_up_to_date();
-40039:   void set_c_up_to_date();
-40039: 
-40039:   bool test_g_up_to_date() const;
-40039:   void reset_g_up_to_date();
-40039:   void set_g_up_to_date();
-40039: 
-40039:   bool test_c_minimized() const;
-40039:   void reset_c_minimized();
-40039:   void set_c_minimized();
-40039: 
-40039:   bool test_g_minimized() const;
-40039:   void reset_g_minimized();
-40039:   void set_g_minimized();
-40039: 
-40039:   bool test_sat_c_up_to_date() const;
-40039:   void reset_sat_c_up_to_date();
-40039:   void set_sat_c_up_to_date();
-40039: 
-40039:   bool test_sat_g_up_to_date() const;
-40039:   void reset_sat_g_up_to_date();
-40039:   void set_sat_g_up_to_date();
-40039: 
-40039:   bool test_c_pending() const;
-40039:   void reset_c_pending();
-40039:   void set_c_pending();
-40039: 
-40039:   bool test_g_pending() const;
-40039:   void reset_g_pending();
-40039:   void set_g_pending();
-40039: 
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: private:
-40039: 
-40039:   typedef unsigned int flags_t;
-40039: 
-40039: 
-40039: 
-40039:   static const flags_t ZERO_DIM_UNIV = 0U;
-40039:   static const flags_t EMPTY = 1U << 0;
-40039:   static const flags_t C_UP_TO_DATE = 1U << 1;
-40039:   static const flags_t G_UP_TO_DATE = 1U << 2;
-40039:   static const flags_t C_MINIMIZED = 1U << 3;
-40039:   static const flags_t G_MINIMIZED = 1U << 4;
-40039:   static const flags_t SAT_C_UP_TO_DATE = 1U << 5;
-40039:   static const flags_t SAT_G_UP_TO_DATE = 1U << 6;
-40039:   static const flags_t CS_PENDING = 1U << 7;
-40039:   static const flags_t GS_PENDING = 1U << 8;
-40039: 
-40039: 
-40039: 
-40039:   flags_t flags;
-40039: 
-40039: 
-40039:   Status(flags_t mask);
-40039: 
-40039: 
-40039:   bool test_all(flags_t mask) const;
-40039: 
-40039: 
-40039:   bool test_any(flags_t mask) const;
-40039: 
-40039: 
-40039:   void set(flags_t mask);
-40039: 
-40039: 
-40039:   void reset(flags_t mask);
-40039: };
-40039: # 1977 "../../src/Grid_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039:   Status status;
-40039: 
-40039: 
-40039:   dimension_type space_dim;
-40039: 
-40039:   enum Dimension_Kind {
-40039:     PARAMETER = 0,
-40039:     LINE = 1,
-40039:     GEN_VIRTUAL = 2,
-40039:     PROPER_CONGRUENCE = PARAMETER,
-40039:     CON_VIRTUAL = LINE,
-40039:     EQUALITY = GEN_VIRTUAL
-40039:   };
-40039: 
-40039:   typedef std::vector<Dimension_Kind> Dimension_Kinds;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Dimension_Kinds dim_kinds;
-40039: # 2012 "../../src/Grid_defs.hh"
-40039:   void construct(dimension_type num_dimensions, Degenerate_Element kind);
-40039: # 2022 "../../src/Grid_defs.hh"
-40039:   void construct(Congruence_System& cgs);
-40039: # 2032 "../../src/Grid_defs.hh"
-40039:   void construct(Grid_Generator_System& ggs);
-40039: # 2042 "../../src/Grid_defs.hh"
-40039:   bool marked_empty() const;
-40039: 
-40039: 
-40039:   bool congruences_are_up_to_date() const;
-40039: 
-40039: 
-40039:   bool generators_are_up_to_date() const;
-40039: 
-40039: 
-40039:   bool congruences_are_minimized() const;
-40039: 
-40039: 
-40039:   bool generators_are_minimized() const;
-40039: # 2065 "../../src/Grid_defs.hh"
-40039:   void set_zero_dim_univ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void set_empty();
-40039: 
-40039: 
-40039:   void set_congruences_up_to_date();
-40039: 
-40039: 
-40039:   void set_generators_up_to_date();
-40039: 
-40039: 
-40039:   void set_congruences_minimized();
-40039: 
-40039: 
-40039:   void set_generators_minimized();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void clear_empty();
-40039: 
-40039: 
-40039:   void clear_congruences_up_to_date();
-40039: 
-40039: 
-40039:   void clear_generators_up_to_date();
-40039: 
-40039: 
-40039:   void clear_congruences_minimized();
-40039: 
-40039: 
-40039:   void clear_generators_minimized();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void update_congruences() const;
-40039: # 2122 "../../src/Grid_defs.hh"
-40039:   bool update_generators() const;
-40039: # 2138 "../../src/Grid_defs.hh"
-40039:   bool minimize() const;
-40039: 
-40039: 
-40039: 
-40039:   enum Three_Valued_Boolean {
-40039:     TVB_TRUE,
-40039:     TVB_FALSE,
-40039:     TVB_DONT_KNOW
-40039:   };
-40039: 
-40039: 
-40039:   Three_Valued_Boolean quick_equivalence_test(const Grid& y) const;
-40039: 
-40039: 
-40039:   bool is_included_in(const Grid& y) const;
-40039: # 2172 "../../src/Grid_defs.hh"
-40039:   bool bounds(const Linear_Expression& expr, const char* method_call) const;
-40039: # 2206 "../../src/Grid_defs.hh"
-40039:   bool max_min(const Linear_Expression& expr,
-40039:                const char* method_call,
-40039:                Coefficient& ext_n, Coefficient& ext_d, bool& included,
-40039:                Generator* point = 
-40039: # 2209 "../../src/Grid_defs.hh" 3 4
-40039:                                  __null
-40039: # 2209 "../../src/Grid_defs.hh"
-40039:                                      ) const;
-40039: # 2243 "../../src/Grid_defs.hh"
-40039:   bool frequency_no_check(const Linear_Expression& expr,
-40039:                 Coefficient& freq_n, Coefficient& freq_d,
-40039:                 Coefficient& val_n, Coefficient& val_d) const;
-40039: # 2257 "../../src/Grid_defs.hh"
-40039:   bool bounds_no_check(const Linear_Expression& expr) const;
-40039: # 2267 "../../src/Grid_defs.hh"
-40039:   void add_congruence_no_check(const Congruence& cg);
-40039: # 2282 "../../src/Grid_defs.hh"
-40039:   void add_constraint_no_check(const Constraint& c);
-40039: # 2295 "../../src/Grid_defs.hh"
-40039:   void refine_no_check(const Constraint& c);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void select_wider_congruences(const Grid& y,
-40039:                                 Congruence_System& selected_cgs) const;
-40039: 
-40039: 
-40039:   void select_wider_generators(const Grid& y,
-40039:                                Grid_Generator_System& widened_ggs) const;
-40039: # 2324 "../../src/Grid_defs.hh"
-40039:   void add_space_dimensions(Congruence_System& cgs,
-40039:                             Grid_Generator_System& gs,
-40039:                             dimension_type dims);
-40039: # 2342 "../../src/Grid_defs.hh"
-40039:   void add_space_dimensions(Grid_Generator_System& gs,
-40039:                             Congruence_System& cgs,
-40039:                             dimension_type dims);
-40039: # 2367 "../../src/Grid_defs.hh"
-40039:   static void
-40039:   normalize_divisors(Grid_Generator_System& sys,
-40039:                      Coefficient& divisor,
-40039:                      const Grid_Generator* first_point = 
-40039: # 2370 "../../src/Grid_defs.hh" 3 4
-40039:                                                         __null
-40039: # 2370 "../../src/Grid_defs.hh"
-40039:                                                             );
-40039: # 2381 "../../src/Grid_defs.hh"
-40039:   static void
-40039:   normalize_divisors(Grid_Generator_System& sys);
-40039: # 2401 "../../src/Grid_defs.hh"
-40039:   static void normalize_divisors(Grid_Generator_System& sys,
-40039:                                  Grid_Generator_System& gen_sys);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static void conversion(Congruence_System& source,
-40039:                          Grid_Generator_System& dest,
-40039:                          Dimension_Kinds& dim_kinds);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static void conversion(Grid_Generator_System& source,
-40039:                          Congruence_System& dest,
-40039:                          Dimension_Kinds& dim_kinds);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static bool simplify(Congruence_System& cgs,
-40039:                        Dimension_Kinds& dim_kinds);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static void simplify(Grid_Generator_System& ggs,
-40039:                        Dimension_Kinds& dim_kinds);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static void reduce_line_with_line(Grid_Generator& row,
-40039:                                     Grid_Generator& pivot,
-40039:                                     dimension_type column);
-40039: # 2452 "../../src/Grid_defs.hh"
-40039:   static void reduce_equality_with_equality(Congruence& row,
-40039:                                             const Congruence& pivot,
-40039:                                             dimension_type column);
-40039: # 2469 "../../src/Grid_defs.hh"
-40039:   template <typename R>
-40039:   static void reduce_pc_with_pc(R& row,
-40039:                                 R& pivot,
-40039:                                 dimension_type column,
-40039:                                 dimension_type start,
-40039:                                 dimension_type end);
-40039: # 2486 "../../src/Grid_defs.hh"
-40039:   static void reduce_parameter_with_line(Grid_Generator& row,
-40039:                                          const Grid_Generator& pivot,
-40039:                                          dimension_type column,
-40039:                                          Swapping_Vector<Grid_Generator>& sys,
-40039:                                          dimension_type num_columns);
-40039: # 2501 "../../src/Grid_defs.hh"
-40039:   static void reduce_congruence_with_equality(Congruence& row,
-40039:                                               const Congruence& pivot,
-40039:                                               dimension_type column,
-40039:                                               Swapping_Vector<Congruence>& sys);
-40039: # 2539 "../../src/Grid_defs.hh"
-40039:   template <typename M>
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static void reduce_reduced(Swapping_Vector<typename M::row_type>& sys,
-40039:                              dimension_type dim,
-40039:                              dimension_type pivot_index,
-40039:                              dimension_type start, dimension_type end,
-40039:                              const Dimension_Kinds& sys_dim_kinds,
-40039:                              bool generators = true);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static void multiply_grid(const Coefficient& multiplier,
-40039:                             Congruence& cg,
-40039:                             Swapping_Vector<Congruence>& dest,
-40039:                             dimension_type num_rows);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static void multiply_grid(const Coefficient& multiplier,
-40039:                             Grid_Generator& gen,
-40039:                             Swapping_Vector<Grid_Generator>& dest,
-40039:                             dimension_type num_rows);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static bool lower_triangular(const Congruence_System& sys,
-40039:                                const Dimension_Kinds& dim_kinds);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static bool upper_triangular(const Grid_Generator_System& sys,
-40039:                                const Dimension_Kinds& dim_kinds);
-40039: # 2608 "../../src/Grid_defs.hh"
-40039: protected:
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* other_name,
-40039:                                     dimension_type other_dim) const;
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* gr_name,
-40039:                                     const Grid& gr) const;
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* le_name,
-40039:                                     const Linear_Expression& le) const;
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* cg_name,
-40039:                                     const Congruence& cg) const;
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* c_name,
-40039:                                     const Constraint& c) const;
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* g_name,
-40039:                                     const Grid_Generator& g) const;
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* g_name,
-40039:                                     const Generator& g) const;
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* cgs_name,
-40039:                                     const Congruence_System& cgs) const;
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* cs_name,
-40039:                                     const Constraint_System& cs) const;
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* gs_name,
-40039:                                     const Grid_Generator_System& gs) const;
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* var_name,
-40039:                                     Variable var) const;
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     dimension_type required_space_dim) const;
-40039: 
-40039:   static void throw_invalid_argument(const char* method,
-40039:                                      const char* reason);
-40039:   static void throw_invalid_constraint(const char* method,
-40039:                                        const char* c_name);
-40039:   static void throw_invalid_constraints(const char* method,
-40039:                                         const char* cs_name);
-40039:   static void throw_invalid_generator(const char* method,
-40039:                                       const char* g_name);
-40039:   static void throw_invalid_generators(const char* method,
-40039:                                        const char* gs_name);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: };
-40039: 
-40039: # 1 "../../src/Grid_Status_inlines.hh" 1
-40039: # 27 "../../src/Grid_Status_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline
-40039: Grid::Status::Status(flags_t mask)
-40039:   : flags(mask) {
-40039: }
-40039: 
-40039: inline
-40039: Grid::Status::Status()
-40039:   : flags(ZERO_DIM_UNIV) {
-40039: }
-40039: 
-40039: inline bool
-40039: Grid::Status::test_all(flags_t mask) const {
-40039:   return (flags & mask) == mask;
-40039: }
-40039: 
-40039: inline bool
-40039: Grid::Status::test_any(flags_t mask) const {
-40039:   return (flags & mask) != 0;
-40039: }
-40039: 
-40039: inline void
-40039: Grid::Status::set(flags_t mask) {
-40039:   flags |= mask;
-40039: }
-40039: 
-40039: inline void
-40039: Grid::Status::reset(flags_t mask) {
-40039:   flags &= ~mask;
-40039: }
-40039: 
-40039: inline bool
-40039: Grid::Status::test_zero_dim_univ() const {
-40039:   return flags == ZERO_DIM_UNIV;
-40039: }
-40039: 
-40039: inline void
-40039: Grid::Status::reset_zero_dim_univ() {
-40039: 
-40039:   if (flags == ZERO_DIM_UNIV) {
-40039: 
-40039:     flags = EMPTY;
-40039:   }
-40039: }
-40039: 
-40039: inline void
-40039: Grid::Status::set_zero_dim_univ() {
-40039: 
-40039:   flags = ZERO_DIM_UNIV;
-40039: }
-40039: 
-40039: inline bool
-40039: Grid::Status::test_empty() const {
-40039:   return test_any(EMPTY);
-40039: }
-40039: 
-40039: inline void
-40039: Grid::Status::reset_empty() {
-40039:   reset(EMPTY);
-40039: }
-40039: 
-40039: inline void
-40039: Grid::Status::set_empty() {
-40039:   flags = EMPTY;
-40039: }
-40039: 
-40039: inline bool
-40039: Grid::Status::test_c_up_to_date() const {
-40039:   return test_any(C_UP_TO_DATE);
-40039: }
-40039: 
-40039: inline void
-40039: Grid::Status::reset_c_up_to_date() {
-40039:   reset(C_UP_TO_DATE);
-40039: }
-40039: 
-40039: inline void
-40039: Grid::Status::set_c_up_to_date() {
-40039:   set(C_UP_TO_DATE);
-40039: }
-40039: 
-40039: inline bool
-40039: Grid::Status::test_g_up_to_date() const {
-40039:   return test_any(G_UP_TO_DATE);
-40039: }
-40039: 
-40039: inline void
-40039: Grid::Status::reset_g_up_to_date() {
-40039:   reset(G_UP_TO_DATE);
-40039: }
-40039: 
-40039: inline void
-40039: Grid::Status::set_g_up_to_date() {
-40039:   set(G_UP_TO_DATE);
-40039: }
-40039: 
-40039: inline bool
-40039: Grid::Status::test_c_minimized() const {
-40039:   return test_any(C_MINIMIZED);
-40039: }
-40039: 
-40039: inline void
-40039: Grid::Status::reset_c_minimized() {
-40039:   reset(C_MINIMIZED);
-40039: }
-40039: 
-40039: inline void
-40039: Grid::Status::set_c_minimized() {
-40039:   set(C_MINIMIZED);
-40039: }
-40039: 
-40039: inline bool
-40039: Grid::Status::test_g_minimized() const {
-40039:   return test_any(G_MINIMIZED);
-40039: }
-40039: 
-40039: inline void
-40039: Grid::Status::reset_g_minimized() {
-40039:   reset(G_MINIMIZED);
-40039: }
-40039: 
-40039: inline void
-40039: Grid::Status::set_g_minimized() {
-40039:   set(G_MINIMIZED);
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: Grid::Status::test_c_pending() const {
-40039:   return test_any(CS_PENDING);
-40039: }
-40039: 
-40039: inline void
-40039: Grid::Status::reset_c_pending() {
-40039:   reset(CS_PENDING);
-40039: }
-40039: 
-40039: inline void
-40039: Grid::Status::set_c_pending() {
-40039:   set(CS_PENDING);
-40039: }
-40039: 
-40039: inline bool
-40039: Grid::Status::test_g_pending() const {
-40039:   return test_any(GS_PENDING);
-40039: }
-40039: 
-40039: inline void
-40039: Grid::Status::reset_g_pending() {
-40039:   reset(GS_PENDING);
-40039: }
-40039: 
-40039: inline void
-40039: Grid::Status::set_g_pending() {
-40039:   set(GS_PENDING);
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: Grid::Status::test_sat_c_up_to_date() const {
-40039:   return test_any(SAT_C_UP_TO_DATE);
-40039: }
-40039: 
-40039: inline void
-40039: Grid::Status::reset_sat_c_up_to_date() {
-40039:   reset(SAT_C_UP_TO_DATE);
-40039: }
-40039: 
-40039: inline void
-40039: Grid::Status::set_sat_c_up_to_date() {
-40039:   set(SAT_C_UP_TO_DATE);
-40039: }
-40039: 
-40039: inline bool
-40039: Grid::Status::test_sat_g_up_to_date() const {
-40039:   return test_any(SAT_G_UP_TO_DATE);
-40039: }
-40039: 
-40039: inline void
-40039: Grid::Status::reset_sat_g_up_to_date() {
-40039:   reset(SAT_G_UP_TO_DATE);
-40039: }
-40039: 
-40039: inline void
-40039: Grid::Status::set_sat_g_up_to_date() {
-40039:   set(SAT_G_UP_TO_DATE);
-40039: }
-40039: 
-40039: }
-40039: # 2662 "../../src/Grid_defs.hh" 2
-40039: # 1 "../../src/Grid_inlines.hh" 1
-40039: # 32 "../../src/Grid_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline bool
-40039: Grid::marked_empty() const {
-40039:   return status.test_empty();
-40039: }
-40039: 
-40039: inline bool
-40039: Grid::congruences_are_up_to_date() const {
-40039:   return status.test_c_up_to_date();
-40039: }
-40039: 
-40039: inline bool
-40039: Grid::generators_are_up_to_date() const {
-40039:   return status.test_g_up_to_date();
-40039: }
-40039: 
-40039: inline bool
-40039: Grid::congruences_are_minimized() const {
-40039:   return status.test_c_minimized();
-40039: }
-40039: 
-40039: inline bool
-40039: Grid::generators_are_minimized() const {
-40039:   return status.test_g_minimized();
-40039: }
-40039: 
-40039: inline void
-40039: Grid::set_generators_up_to_date() {
-40039:   status.set_g_up_to_date();
-40039: }
-40039: 
-40039: inline void
-40039: Grid::set_congruences_up_to_date() {
-40039:   status.set_c_up_to_date();
-40039: }
-40039: 
-40039: inline void
-40039: Grid::set_congruences_minimized() {
-40039:   set_congruences_up_to_date();
-40039:   status.set_c_minimized();
-40039: }
-40039: 
-40039: inline void
-40039: Grid::set_generators_minimized() {
-40039:   set_generators_up_to_date();
-40039:   status.set_g_minimized();
-40039: }
-40039: 
-40039: inline void
-40039: Grid::clear_empty() {
-40039:   status.reset_empty();
-40039: }
-40039: 
-40039: inline void
-40039: Grid::clear_congruences_minimized() {
-40039:   status.reset_c_minimized();
-40039: }
-40039: 
-40039: inline void
-40039: Grid::clear_generators_minimized() {
-40039:   status.reset_g_minimized();
-40039: }
-40039: 
-40039: inline void
-40039: Grid::clear_congruences_up_to_date() {
-40039:   clear_congruences_minimized();
-40039:   status.reset_c_up_to_date();
-40039: 
-40039: }
-40039: 
-40039: inline void
-40039: Grid::clear_generators_up_to_date() {
-40039:   clear_generators_minimized();
-40039:   status.reset_g_up_to_date();
-40039: 
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Grid::max_space_dimension() {
-40039: 
-40039: 
-40039:   return std::min(std::numeric_limits<dimension_type>::max() - 1,
-40039:                   std::min(Congruence_System::max_space_dimension(),
-40039:                            Grid_Generator_System::max_space_dimension()
-40039:                            )
-40039:                   );
-40039: }
-40039: 
-40039: inline
-40039: Grid::Grid(dimension_type num_dimensions,
-40039:            const Degenerate_Element kind)
-40039:   : con_sys(),
-40039:     gen_sys(check_space_dimension_overflow(num_dimensions,
-40039:                                            max_space_dimension(),
-40039:                                            "PPL::Grid::",
-40039:                                            "Grid(n, k)",
-40039:                                            "n exceeds the maximum "
-40039:                                            "allowed space dimension")) {
-40039:   construct(num_dimensions, kind);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Grid::Grid(const Congruence_System& cgs)
-40039:   : con_sys(check_space_dimension_overflow(cgs.space_dimension(),
-40039:                                            max_space_dimension(),
-40039:                                            "PPL::Grid::",
-40039:                                            "Grid(cgs)",
-40039:                                            "the space dimension of cgs "
-40039:                                            "exceeds the maximum allowed "
-40039:                                            "space dimension")),
-40039:     gen_sys(cgs.space_dimension()) {
-40039:   Congruence_System cgs_copy(cgs);
-40039:   construct(cgs_copy);
-40039: }
-40039: 
-40039: inline
-40039: Grid::Grid(Congruence_System& cgs, Recycle_Input)
-40039:   : con_sys(check_space_dimension_overflow(cgs.space_dimension(),
-40039:                                            max_space_dimension(),
-40039:                                            "PPL::Grid::",
-40039:                                            "Grid(cgs, recycle)",
-40039:                                            "the space dimension of cgs "
-40039:                                            "exceeds the maximum allowed "
-40039:                                            "space dimension")),
-40039:     gen_sys(cgs.space_dimension()) {
-40039:   construct(cgs);
-40039: }
-40039: 
-40039: inline
-40039: Grid::Grid(const Grid_Generator_System& ggs)
-40039:   : con_sys(check_space_dimension_overflow(ggs.space_dimension(),
-40039:                                            max_space_dimension(),
-40039:                                            "PPL::Grid::",
-40039:                                            "Grid(ggs)",
-40039:                                            "the space dimension of ggs "
-40039:                                            "exceeds the maximum allowed "
-40039:                                            "space dimension")),
-40039:     gen_sys(ggs.space_dimension()) {
-40039:   Grid_Generator_System ggs_copy(ggs);
-40039:   construct(ggs_copy);
-40039: }
-40039: 
-40039: inline
-40039: Grid::Grid(Grid_Generator_System& ggs, Recycle_Input)
-40039:   : con_sys(check_space_dimension_overflow(ggs.space_dimension(),
-40039:                                            max_space_dimension(),
-40039:                                            "PPL::Grid::",
-40039:                                            "Grid(ggs, recycle)",
-40039:                                            "the space dimension of ggs "
-40039:                                            "exceeds the maximum allowed "
-40039:                                            "space dimension")),
-40039:     gen_sys(ggs.space_dimension()) {
-40039:   construct(ggs);
-40039: }
-40039: 
-40039: template <typename U>
-40039: inline
-40039: Grid::Grid(const BD_Shape<U>& bd, Complexity_Class)
-40039:   : con_sys(check_space_dimension_overflow(bd.space_dimension(),
-40039:                                            max_space_dimension(),
-40039:                                            "PPL::Grid::",
-40039:                                            "Grid(bd)",
-40039:                                            "the space dimension of bd "
-40039:                                            "exceeds the maximum allowed "
-40039:                                            "space dimension")),
-40039:     gen_sys(bd.space_dimension()) {
-40039:   Congruence_System cgs = bd.congruences();
-40039:   construct(cgs);
-40039: }
-40039: 
-40039: template <typename U>
-40039: inline
-40039: Grid::Grid(const Octagonal_Shape<U>& os, Complexity_Class)
-40039:   : con_sys(check_space_dimension_overflow(os.space_dimension(),
-40039:                                            max_space_dimension(),
-40039:                                            "PPL::Grid::",
-40039:                                            "Grid(os)",
-40039:                                            "the space dimension of os "
-40039:                                            "exceeds the maximum allowed "
-40039:                                            "space dimension")),
-40039:     gen_sys(os.space_dimension()) {
-40039:   Congruence_System cgs = os.congruences();
-40039:   construct(cgs);
-40039: }
-40039: 
-40039: inline
-40039: Grid::~Grid() {
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Grid::space_dimension() const {
-40039:   return space_dim;
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: Grid::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: inline int32_t
-40039: Grid::hash_code() const {
-40039:   return hash_code_from_dimension(space_dimension());
-40039: }
-40039: 
-40039: inline Constraint_System
-40039: Grid::constraints() const {
-40039:   return Constraint_System(congruences());
-40039: }
-40039: 
-40039: inline Constraint_System
-40039: Grid::minimized_constraints() const {
-40039:   return Constraint_System(minimized_congruences());
-40039: }
-40039: 
-40039: inline void
-40039: Grid::m_swap(Grid& y) {
-40039:   using std::swap;
-40039:   swap(con_sys, y.con_sys);
-40039:   swap(gen_sys, y.gen_sys);
-40039:   swap(status, y.status);
-40039:   swap(space_dim, y.space_dim);
-40039:   swap(dim_kinds, y.dim_kinds);
-40039: }
-40039: 
-40039: inline void
-40039: Grid::add_congruence(const Congruence& cg) {
-40039: 
-40039:   if (space_dim < cg.space_dimension()) {
-40039:     throw_dimension_incompatible("add_congruence(cg)", "cg", cg);
-40039:   }
-40039: 
-40039:   if (!marked_empty()) {
-40039:     add_congruence_no_check(cg);
-40039:   }
-40039: }
-40039: 
-40039: inline void
-40039: Grid::add_congruences(const Congruence_System& cgs) {
-40039: 
-40039: 
-40039:   if (space_dim < cgs.space_dimension()) {
-40039:     throw_dimension_incompatible("add_congruences(cgs)", "cgs", cgs);
-40039:   }
-40039: 
-40039:   if (!marked_empty()) {
-40039:     Congruence_System cgs_copy = cgs;
-40039:     add_recycled_congruences(cgs_copy);
-40039:   }
-40039: }
-40039: 
-40039: inline void
-40039: Grid::refine_with_congruence(const Congruence& cg) {
-40039:   add_congruence(cg);
-40039: }
-40039: 
-40039: inline void
-40039: Grid::refine_with_congruences(const Congruence_System& cgs) {
-40039:   add_congruences(cgs);
-40039: }
-40039: 
-40039: inline bool
-40039: Grid::can_recycle_constraint_systems() {
-40039:   return true;
-40039: }
-40039: 
-40039: inline bool
-40039: Grid::can_recycle_congruence_systems() {
-40039:   return true;
-40039: }
-40039: 
-40039: inline void
-40039: Grid::add_constraint(const Constraint& c) {
-40039: 
-40039:   if (space_dim < c.space_dimension()) {
-40039:     throw_dimension_incompatible("add_constraint(c)", "c", c);
-40039:   }
-40039:   if (!marked_empty()) {
-40039:     add_constraint_no_check(c);
-40039:   }
-40039: }
-40039: 
-40039: inline void
-40039: Grid::add_recycled_constraints(Constraint_System& cs) {
-40039: 
-40039:   add_constraints(cs);
-40039: }
-40039: 
-40039: inline bool
-40039: Grid::bounds_from_above(const Linear_Expression& expr) const {
-40039:   return bounds(expr, "bounds_from_above(e)");
-40039: }
-40039: 
-40039: inline bool
-40039: Grid::bounds_from_below(const Linear_Expression& expr) const {
-40039:   return bounds(expr, "bounds_from_below(e)");
-40039: }
-40039: 
-40039: inline bool
-40039: Grid::maximize(const Linear_Expression& expr,
-40039:                Coefficient& sup_n, Coefficient& sup_d, bool& maximum) const {
-40039:   return max_min(expr, "maximize(e, ...)", sup_n, sup_d, maximum);
-40039: }
-40039: 
-40039: inline bool
-40039: Grid::maximize(const Linear_Expression& expr,
-40039:                Coefficient& sup_n, Coefficient& sup_d, bool& maximum,
-40039:                Generator& point) const {
-40039:   return max_min(expr, "maximize(e, ...)", sup_n, sup_d, maximum, &point);
-40039: }
-40039: 
-40039: inline bool
-40039: Grid::minimize(const Linear_Expression& expr,
-40039:                Coefficient& inf_n, Coefficient& inf_d, bool& minimum) const {
-40039:   return max_min(expr, "minimize(e, ...)", inf_n, inf_d, minimum);
-40039: }
-40039: 
-40039: inline bool
-40039: Grid::minimize(const Linear_Expression& expr,
-40039:                Coefficient& inf_n, Coefficient& inf_d, bool& minimum,
-40039:                Generator& point) const {
-40039:   return max_min(expr, "minimize(e, ...)", inf_n, inf_d, minimum, &point);
-40039: }
-40039: 
-40039: inline void
-40039: Grid::normalize_divisors(Grid_Generator_System& sys) {
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_divisor; Parma_Polyhedra_Library::Coefficient& divisor = holder_divisor.item();
-40039:   divisor = 1;
-40039:   normalize_divisors(sys, divisor);
-40039: }
-40039: 
-40039: 
-40039: inline bool
-40039: operator!=(const Grid& x, const Grid& y) {
-40039:   return !(x == y);
-40039: }
-40039: 
-40039: inline bool
-40039: Grid::strictly_contains(const Grid& y) const {
-40039:   const Grid& x = *this;
-40039:   return x.contains(y) && !y.contains(x);
-40039: }
-40039: 
-40039: inline void
-40039: Grid::topological_closure_assign() {
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: swap(Grid& x, Grid& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 2663 "../../src/Grid_defs.hh" 2
-40039: # 1 "../../src/Grid_templates.hh" 1
-40039: # 33 "../../src/Grid_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Interval>
-40039: Grid::Grid(const Box<Interval>& box, Complexity_Class)
-40039:   : con_sys(),
-40039:     gen_sys() {
-40039:   space_dim = check_space_dimension_overflow(box.space_dimension(),
-40039:                                              max_space_dimension(),
-40039:                                              "PPL::Grid::",
-40039:                                              "Grid(box, from_bounding_box)",
-40039:                                              "the space dimension of box "
-40039:                                              "exceeds the maximum allowed "
-40039:                                              "space dimension");
-40039: 
-40039:   if (box.is_empty()) {
-40039: 
-40039:     set_empty();
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039:   if (space_dim == 0) {
-40039:     set_zero_dim_univ();
-40039:   }
-40039:   else {
-40039: 
-40039:     con_sys.set_space_dimension(space_dim);
-40039:     gen_sys.set_space_dimension(space_dim);
-40039: 
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_l_n; Parma_Polyhedra_Library::Coefficient& l_n = holder_l_n.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_l_d; Parma_Polyhedra_Library::Coefficient& l_d = holder_l_d.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_u_n; Parma_Polyhedra_Library::Coefficient& u_n = holder_u_n.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_u_d; Parma_Polyhedra_Library::Coefficient& u_d = holder_u_d.item();
-40039:     gen_sys.insert(grid_point());
-40039:     for (dimension_type k = space_dim; k-- > 0; ) {
-40039:       const Variable v_k = Variable(k);
-40039:       bool closed = false;
-40039: 
-40039:       if (box.has_lower_bound(v_k, l_n, l_d, closed)) {
-40039:         if (box.has_upper_bound(v_k, u_n, u_d, closed)) {
-40039:           if (l_n * u_d == u_n * l_d) {
-40039: 
-40039: 
-40039:             con_sys.insert(l_d * v_k == l_n);
-40039: 
-40039: 
-40039: 
-40039:             Grid_Generator& point = gen_sys.sys.rows[0];
-40039: 
-40039: 
-40039: 
-40039:             const Coefficient& point_divisor = point.divisor();
-40039:             gcd_assign(u_n, l_d, point_divisor);
-40039: 
-40039:             exact_div_assign(u_n, point_divisor, u_n);
-40039:             if (l_d < 0) {
-40039:               neg_assign(u_n);
-40039:             }
-40039: 
-40039:             point.scale_to_divisor(l_d * u_n);
-40039: 
-40039:             if (l_d < 0) {
-40039:               neg_assign(u_n);
-40039:             }
-40039: 
-40039:             point.expr.set(Variable(k), l_n * u_n);
-40039:             ((void) 0);
-40039: 
-40039:             ((void) 0);
-40039: 
-40039:             continue;
-40039:           }
-40039:         }
-40039:       }
-40039: 
-40039:       gen_sys.insert(grid_line(v_k));
-40039:     }
-40039:     set_congruences_up_to_date();
-40039:     set_generators_up_to_date();
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename Partial_Function>
-40039: void
-40039: Grid::map_space_dimensions(const Partial_Function& pfunc) {
-40039:   if (space_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039:   if (pfunc.has_empty_codomain()) {
-40039: 
-40039:     if (marked_empty()
-40039:         || (!generators_are_up_to_date() && !update_generators())) {
-40039: 
-40039:       space_dim = 0;
-40039:       set_empty();
-40039:     }
-40039:     else {
-40039: 
-40039:       set_zero_dim_univ();
-40039:     }
-40039: 
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039:   dimension_type new_space_dimension = pfunc.max_in_codomain() + 1;
-40039: 
-40039:   if (new_space_dimension == space_dim) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     std::vector<Variable> cycle;
-40039:     cycle.reserve(space_dim);
-40039: 
-40039: 
-40039:     std::deque<bool> visited(space_dim);
-40039: 
-40039:     for (dimension_type i = space_dim; i-- > 0; ) {
-40039:       if (!visited[i]) {
-40039:         dimension_type j = i;
-40039:         do {
-40039:           visited[j] = true;
-40039: 
-40039:           dimension_type k = 0;
-40039:           if (!pfunc.maps(j, k)) {
-40039:             throw_invalid_argument("map_space_dimensions(pfunc)",
-40039:                                    " pfunc is inconsistent");
-40039:           }
-40039:           if (k == j) {
-40039:             break;
-40039:           }
-40039: 
-40039:           cycle.push_back(Variable(j));
-40039: 
-40039:           j = k;
-40039:         } while (!visited[j]);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:         if (cycle.size() >= 2) {
-40039: 
-40039:           if (congruences_are_up_to_date()) {
-40039:             con_sys.permute_space_dimensions(cycle);
-40039:             clear_congruences_minimized();
-40039:           }
-40039: 
-40039:           if (generators_are_up_to_date()) {
-40039:             gen_sys.permute_space_dimensions(cycle);
-40039:             clear_generators_minimized();
-40039:           }
-40039:         }
-40039: 
-40039:         cycle.clear();
-40039:       }
-40039:     }
-40039: 
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const Grid_Generator_System& old_gensys = grid_generators();
-40039: 
-40039:   if (old_gensys.has_no_rows()) {
-40039: 
-40039:     Grid new_grid(new_space_dimension, EMPTY);
-40039:     m_swap(new_grid);
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   std::vector<dimension_type> pfunc_maps(space_dim, not_a_dimension());
-40039:   for (dimension_type j = space_dim; j-- > 0; ) {
-40039:     dimension_type pfunc_j;
-40039:     if (pfunc.maps(j, pfunc_j)) {
-40039:       pfunc_maps[j] = pfunc_j;
-40039:     }
-40039:   }
-40039: 
-40039:   Grid_Generator_System new_gensys;
-40039: 
-40039:   new_gensys.set_sorted(false);
-40039: 
-40039:   Grid_Generator_System::const_iterator i;
-40039:   Grid_Generator_System::const_iterator old_gensys_end = old_gensys.end();
-40039:   for (i = old_gensys.begin(); i != old_gensys_end; ++i) {
-40039:     if (i->is_point()) {
-40039:       break;
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039:   const Coefficient& system_divisor = i->divisor();
-40039:   for (i = old_gensys.begin(); i != old_gensys_end; ++i) {
-40039:     const Grid_Generator& old_g = *i;
-40039:     const Grid_Generator::expr_type old_g_e = old_g.expression();
-40039:     Linear_Expression expr;
-40039:     expr.set_space_dimension(new_space_dimension);
-40039:     bool all_zeroes = true;
-40039:     for (Grid_Generator::expr_type::const_iterator j = old_g_e.begin(),
-40039:           j_end = old_g_e.end(); j != j_end; ++j) {
-40039:       const dimension_type mapped_id = pfunc_maps[j.variable().id()];
-40039:       if (mapped_id != not_a_dimension()) {
-40039:         add_mul_assign(expr, *j, Variable(mapped_id));
-40039:         all_zeroes = false;
-40039:       }
-40039:     }
-40039:     switch (old_g.type()) {
-40039:     case Grid_Generator::LINE:
-40039:       if (!all_zeroes) {
-40039:         new_gensys.insert(grid_line(expr));
-40039:       }
-40039:       break;
-40039:     case Grid_Generator::PARAMETER:
-40039:       if (!all_zeroes) {
-40039:         new_gensys.insert(parameter(expr, system_divisor));
-40039:       }
-40039:       break;
-40039:     case Grid_Generator::POINT:
-40039:       new_gensys.insert(grid_point(expr, old_g.divisor()));
-40039:       break;
-40039:     }
-40039:   }
-40039: 
-40039:   Grid new_grid(new_gensys);
-40039:   m_swap(new_grid);
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: template <typename M>
-40039: void
-40039: Grid::reduce_reduced(Swapping_Vector<typename M::row_type>& rows,
-40039:                      const dimension_type dim,
-40039:                      const dimension_type pivot_index,
-40039:                      const dimension_type start,
-40039:                      const dimension_type end,
-40039:                      const Dimension_Kinds& sys_dim_kinds,
-40039:                      const bool generators) {
-40039: 
-40039:   typedef typename M::row_type M_row_type;
-40039: 
-40039:   const M_row_type& pivot = rows[pivot_index];
-40039:   const Coefficient& pivot_dim = pivot.expr.get(dim);
-40039: 
-40039:   if (pivot_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_pivot_dim_half; Parma_Polyhedra_Library::Coefficient& pivot_dim_half = holder_pivot_dim_half.item();
-40039:   pivot_dim_half = (pivot_dim + 1) / 2;
-40039:   const Dimension_Kind row_kind = sys_dim_kinds[dim];
-40039:   const bool row_is_line_or_equality
-40039:     = (row_kind == (generators ? LINE : EQUALITY));
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_num_rows_to_subtract; Parma_Polyhedra_Library::Coefficient& num_rows_to_subtract = holder_num_rows_to_subtract.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_row_dim_remainder; Parma_Polyhedra_Library::Coefficient& row_dim_remainder = holder_row_dim_remainder.item();
-40039:   for (dimension_type kinds_index = dim,
-40039:          row_index = pivot_index; row_index-- > 0; ) {
-40039:     if (generators) {
-40039:       --kinds_index;
-40039: 
-40039:       while (sys_dim_kinds[kinds_index] == GEN_VIRTUAL) {
-40039:         --kinds_index;
-40039:       }
-40039:     }
-40039:     else {
-40039:       ++kinds_index;
-40039: 
-40039:       while (sys_dim_kinds[kinds_index] == CON_VIRTUAL) {
-40039:         ++kinds_index;
-40039:       }
-40039:     }
-40039: 
-40039: 
-40039:     if (row_is_line_or_equality
-40039:         || (row_kind == PARAMETER
-40039:             && sys_dim_kinds[kinds_index] == PARAMETER)) {
-40039:       M_row_type& row = rows[row_index];
-40039: 
-40039:       const Coefficient& row_dim = row.expr.get(dim);
-40039: 
-40039:       num_rows_to_subtract = row_dim / pivot_dim;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       row_dim_remainder = row_dim % pivot_dim;
-40039:       if (row_dim_remainder < 0) {
-40039:         if (row_dim_remainder <= -pivot_dim_half) {
-40039:           --num_rows_to_subtract;
-40039:         }
-40039:       }
-40039:       else if (row_dim_remainder > 0 && row_dim_remainder > pivot_dim_half) {
-40039:         ++num_rows_to_subtract;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       if (num_rows_to_subtract != 0) {
-40039:         row.expr.linear_combine(pivot.expr,
-40039:                                 Coefficient_one(), -num_rows_to_subtract,
-40039:                                 start, end + 1);
-40039:       }
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: }
-40039: # 2664 "../../src/Grid_defs.hh" 2
-40039: # 36 "../../src/Box_templates.hh" 2
-40039: 
-40039: 
-40039: # 1 "../../src/BD_Shape_defs.hh" 1
-40039: # 44 "../../src/BD_Shape_defs.hh"
-40039: # 1 "../../src/DB_Matrix_defs.hh" 1
-40039: # 27 "../../src/DB_Matrix_defs.hh"
-40039: # 1 "../../src/DB_Matrix_types.hh" 1
-40039: # 16 "../../src/DB_Matrix_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: class DB_Matrix;
-40039: 
-40039: }
-40039: # 28 "../../src/DB_Matrix_defs.hh" 2
-40039: 
-40039: # 1 "../../src/DB_Row_defs.hh" 1
-40039: # 27 "../../src/DB_Row_defs.hh"
-40039: # 1 "../../src/DB_Row_types.hh" 1
-40039: # 16 "../../src/DB_Row_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: class DB_Row_Impl_Handler;
-40039: 
-40039: template <typename T>
-40039: class DB_Row;
-40039: 
-40039: }
-40039: # 28 "../../src/DB_Row_defs.hh" 2
-40039: 
-40039: # 1 "../../src/Ptr_Iterator_defs.hh" 1
-40039: # 27 "../../src/Ptr_Iterator_defs.hh"
-40039: # 1 "../../src/Ptr_Iterator_types.hh" 1
-40039: # 16 "../../src/Ptr_Iterator_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: template <typename P>
-40039: class Ptr_Iterator;
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 28 "../../src/Ptr_Iterator_defs.hh" 2
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: template<typename P, typename Q>
-40039: bool operator==(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y);
-40039: 
-40039: template<typename P, typename Q>
-40039: bool operator!=(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y);
-40039: 
-40039: template<typename P, typename Q>
-40039: bool operator<(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y);
-40039: 
-40039: template<typename P, typename Q>
-40039: bool operator<=(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y);
-40039: 
-40039: template<typename P, typename Q>
-40039: bool operator>(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y);
-40039: 
-40039: template<typename P, typename Q>
-40039: bool operator>=(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y);
-40039: 
-40039: template<typename P, typename Q>
-40039: typename Ptr_Iterator<P>::difference_type
-40039: operator-(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y);
-40039: 
-40039: template<typename P>
-40039: Ptr_Iterator<P> operator+(typename Ptr_Iterator<P>::difference_type m,
-40039:                           const Ptr_Iterator<P>& y);
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename P>
-40039: class Parma_Polyhedra_Library::Implementation::Ptr_Iterator
-40039:   : public std::iterator<typename std::iterator_traits<P>::iterator_category,
-40039:                          typename std::iterator_traits<P>::value_type,
-40039:                          typename std::iterator_traits<P>::difference_type,
-40039:                          typename std::iterator_traits<P>::pointer,
-40039:                          typename std::iterator_traits<P>::reference> {
-40039: public:
-40039:   typedef typename std::iterator_traits<P>::difference_type difference_type;
-40039:   typedef typename std::iterator_traits<P>::reference reference;
-40039:   typedef typename std::iterator_traits<P>::pointer pointer;
-40039: 
-40039: 
-40039:   Ptr_Iterator();
-40039: 
-40039: 
-40039:   explicit Ptr_Iterator(const P& q);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename Q>
-40039:   Ptr_Iterator(const Ptr_Iterator<Q>& q);
-40039: 
-40039: 
-40039:   reference operator*() const;
-40039: 
-40039: 
-40039:   pointer operator->() const;
-40039: 
-40039: 
-40039:   reference operator[](const difference_type m) const;
-40039: 
-40039: 
-40039:   Ptr_Iterator& operator++();
-40039: 
-40039: 
-40039:   Ptr_Iterator operator++(int);
-40039: 
-40039: 
-40039:   Ptr_Iterator& operator--();
-40039: 
-40039: 
-40039:   Ptr_Iterator operator--(int);
-40039: 
-40039: 
-40039:   Ptr_Iterator& operator+=(const difference_type m);
-40039: 
-40039: 
-40039:   Ptr_Iterator& operator-=(const difference_type m);
-40039: 
-40039: 
-40039:   difference_type operator-(const Ptr_Iterator& y) const;
-40039: 
-40039: 
-40039:   Ptr_Iterator operator+(const difference_type m) const;
-40039: 
-40039: 
-40039:   Ptr_Iterator operator-(const difference_type m) const;
-40039: 
-40039: private:
-40039: 
-40039:   P p;
-40039: 
-40039: 
-40039:   const P& base() const;
-40039: 
-40039:   template <typename Q, typename R>
-40039:   friend bool Parma_Polyhedra_Library::Implementation::
-40039:   operator==(const Ptr_Iterator<Q>& x, const Ptr_Iterator<R>& y);
-40039: 
-40039:   template <typename Q, typename R>
-40039:   friend bool Parma_Polyhedra_Library::Implementation::
-40039:   operator!=(const Ptr_Iterator<Q>& x, const Ptr_Iterator<R>& y);
-40039: 
-40039:   template<typename Q, typename R>
-40039:   friend bool Parma_Polyhedra_Library::Implementation::
-40039:   operator<(const Ptr_Iterator<Q>& x, const Ptr_Iterator<R>& y);
-40039: 
-40039:   template<typename Q, typename R>
-40039:   friend bool Parma_Polyhedra_Library::Implementation::
-40039:   operator<=(const Ptr_Iterator<Q>& x, const Ptr_Iterator<R>& y);
-40039: 
-40039:   template<typename Q, typename R>
-40039:   friend bool Parma_Polyhedra_Library::Implementation::
-40039:   operator>(const Ptr_Iterator<Q>& x, const Ptr_Iterator<R>& y);
-40039: 
-40039:   template<typename Q, typename R>
-40039:   friend bool Parma_Polyhedra_Library::Implementation::
-40039:   operator>=(const Ptr_Iterator<Q>& x, const Ptr_Iterator<R>& y);
-40039: 
-40039:   template<typename Q, typename R>
-40039:   friend typename Ptr_Iterator<Q>::difference_type
-40039:   Parma_Polyhedra_Library::Implementation::
-40039:   operator-(const Ptr_Iterator<Q>& x, const Ptr_Iterator<R>& y);
-40039: 
-40039:   friend Ptr_Iterator<P>
-40039:   Parma_Polyhedra_Library::Implementation::
-40039:   operator+<>(typename Ptr_Iterator<P>::difference_type m,
-40039:               const Ptr_Iterator<P>& y);
-40039: };
-40039: 
-40039: # 1 "../../src/Ptr_Iterator_inlines.hh" 1
-40039: # 27 "../../src/Ptr_Iterator_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: template <typename P>
-40039: inline const P&
-40039: Ptr_Iterator<P>::base() const {
-40039:   return p;
-40039: }
-40039: 
-40039: template <typename P>
-40039: inline
-40039: Ptr_Iterator<P>::Ptr_Iterator()
-40039:   : p(P()) {
-40039: }
-40039: 
-40039: template <typename P>
-40039: inline
-40039: Ptr_Iterator<P>::Ptr_Iterator(const P& q)
-40039:   : p(q) {
-40039: }
-40039: 
-40039: template <typename P>
-40039: template <typename Q>
-40039: inline
-40039: Ptr_Iterator<P>::Ptr_Iterator(const Ptr_Iterator<Q>& q)
-40039:   : p(q.base()) {
-40039: }
-40039: 
-40039: template <typename P>
-40039: inline typename Ptr_Iterator<P>::reference
-40039: Ptr_Iterator<P>::operator*() const {
-40039:   return *p;
-40039: }
-40039: 
-40039: template <typename P>
-40039: inline typename Ptr_Iterator<P>::pointer
-40039: Ptr_Iterator<P>::operator->() const {
-40039:   return p;
-40039: }
-40039: 
-40039: template <typename P>
-40039: inline typename Ptr_Iterator<P>::reference
-40039: Ptr_Iterator<P>::operator[](const difference_type m) const {
-40039:   return p[m];
-40039: }
-40039: 
-40039: template <typename P>
-40039: inline Ptr_Iterator<P>&
-40039: Ptr_Iterator<P>::operator++() {
-40039:   ++p;
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename P>
-40039: inline Ptr_Iterator<P>
-40039: Ptr_Iterator<P>::operator++(int) {
-40039:   return Ptr_Iterator(p++);
-40039: }
-40039: 
-40039: template <typename P>
-40039: inline Ptr_Iterator<P>&
-40039: Ptr_Iterator<P>::operator--() {
-40039:   --p;
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename P>
-40039: inline Ptr_Iterator<P>
-40039: Ptr_Iterator<P>::operator--(int) {
-40039:   return Ptr_Iterator(p--);
-40039: }
-40039: 
-40039: 
-40039: template <typename P>
-40039: inline Ptr_Iterator<P>&
-40039: Ptr_Iterator<P>::operator+=(const difference_type m) {
-40039:   p += m;
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename P>
-40039: inline Ptr_Iterator<P>&
-40039: Ptr_Iterator<P>::operator-=(const difference_type m) {
-40039:   p -= m;
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename P>
-40039: inline typename Ptr_Iterator<P>::difference_type
-40039: Ptr_Iterator<P>::operator-(const Ptr_Iterator& y) const {
-40039:   return p - y.p;
-40039: }
-40039: 
-40039: template <typename P>
-40039: inline Ptr_Iterator<P>
-40039: Ptr_Iterator<P>::operator+(const difference_type m) const {
-40039:   return Ptr_Iterator(p + m);
-40039: }
-40039: 
-40039: template <typename P>
-40039: inline Ptr_Iterator<P>
-40039: Ptr_Iterator<P>::operator-(const difference_type m) const {
-40039:   return Ptr_Iterator(p - m);
-40039: }
-40039: 
-40039: template<typename P, typename Q>
-40039: inline bool
-40039: operator==(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y) {
-40039:   return x.base() == y.base();
-40039: }
-40039: 
-40039: template<typename P, typename Q>
-40039: inline bool
-40039: operator!=(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y) {
-40039:   return x.base() != y.base();
-40039: }
-40039: 
-40039: template<typename P, typename Q>
-40039: inline bool
-40039: operator<(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y) {
-40039:   return x.base() < y.base();
-40039: }
-40039: 
-40039: template<typename P, typename Q>
-40039: inline bool
-40039: operator<=(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y) {
-40039:   return x.base() <= y.base();
-40039: }
-40039: 
-40039: template<typename P, typename Q>
-40039: inline bool
-40039: operator>(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y) {
-40039:   return x.base() > y.base();
-40039: }
-40039: 
-40039: template<typename P, typename Q>
-40039: inline bool
-40039: operator>=(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y) {
-40039:   return x.base() >= y.base();
-40039: }
-40039: 
-40039: template<typename P, typename Q>
-40039: inline typename Ptr_Iterator<P>::difference_type
-40039: operator-(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y) {
-40039:   return x.base() - y.base();
-40039: }
-40039: 
-40039: template<typename P>
-40039: inline Ptr_Iterator<P>
-40039: operator+(typename Ptr_Iterator<P>::difference_type m,
-40039:           const Ptr_Iterator<P>& y) {
-40039:   return Ptr_Iterator<P>(m + y.base());
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 171 "../../src/Ptr_Iterator_defs.hh" 2
-40039: # 30 "../../src/DB_Row_defs.hh" 2
-40039: # 57 "../../src/DB_Row_defs.hh"
-40039: template <typename T>
-40039: class Parma_Polyhedra_Library::DB_Row_Impl_Handler {
-40039: public:
-40039: 
-40039:   DB_Row_Impl_Handler();
-40039: 
-40039: 
-40039:   ~DB_Row_Impl_Handler();
-40039: 
-40039:   class Impl;
-40039: 
-40039: 
-40039:   Impl* impl;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: private:
-40039: 
-40039:   DB_Row_Impl_Handler(const DB_Row_Impl_Handler&);
-40039: 
-40039: 
-40039:   DB_Row_Impl_Handler& operator=(const DB_Row_Impl_Handler&);
-40039: };
-40039: # 119 "../../src/DB_Row_defs.hh"
-40039: template <typename T>
-40039: class Parma_Polyhedra_Library::DB_Row : private DB_Row_Impl_Handler<T> {
-40039: public:
-40039: 
-40039:   DB_Row();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void construct(dimension_type sz);
-40039: # 145 "../../src/DB_Row_defs.hh"
-40039:   void construct(dimension_type sz, dimension_type capacity);
-40039: # 159 "../../src/DB_Row_defs.hh"
-40039:   template <typename U>
-40039:   void construct_upward_approximation(const DB_Row<U>& y,
-40039:                                       dimension_type capacity);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   DB_Row(dimension_type sz);
-40039: 
-40039: 
-40039:   DB_Row(dimension_type sz, dimension_type capacity);
-40039: 
-40039: 
-40039:   DB_Row(const DB_Row& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   DB_Row(const DB_Row& y, dimension_type capacity);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   DB_Row(const DB_Row& y, dimension_type sz, dimension_type capacity);
-40039: 
-40039: 
-40039:   ~DB_Row();
-40039: 
-40039: 
-40039:   DB_Row& operator=(const DB_Row& y);
-40039: 
-40039: 
-40039:   void m_swap(DB_Row& y);
-40039: 
-40039: 
-40039:   void assign(DB_Row& y);
-40039: # 208 "../../src/DB_Row_defs.hh"
-40039:   void allocate(dimension_type capacity);
-40039: # 218 "../../src/DB_Row_defs.hh"
-40039:   void expand_within_capacity(dimension_type new_size);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void shrink(dimension_type new_size);
-40039: 
-40039: 
-40039:   static dimension_type max_size();
-40039: 
-40039: 
-40039:   dimension_type size() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   T& operator[](dimension_type k);
-40039: 
-40039: 
-40039:   const T& operator[](dimension_type k) const;
-40039: 
-40039: 
-40039: 
-40039:   typedef Implementation::Ptr_Iterator<T*> iterator;
-40039: 
-40039: 
-40039:   typedef Implementation::Ptr_Iterator<const T*> const_iterator;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   iterator begin();
-40039: 
-40039: 
-40039:   iterator end();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const_iterator begin() const;
-40039: 
-40039: 
-40039:   const_iterator end() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes(dimension_type capacity) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes(dimension_type capacity) const;
-40039: 
-40039: 
-40039:   bool OK(dimension_type row_size, dimension_type row_capacity) const;
-40039: 
-40039: private:
-40039:   template <typename U> friend class Parma_Polyhedra_Library::DB_Row;
-40039: 
-40039: 
-40039:   void copy_construct_coefficients(const DB_Row& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: };
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: void swap(DB_Row<T>& x, DB_Row<T>& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: void iter_swap(typename std::vector<DB_Row<T> >::iterator x,
-40039:                typename std::vector<DB_Row<T> >::iterator y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: bool operator==(const DB_Row<T>& x, const DB_Row<T>& y);
-40039: 
-40039: 
-40039: template <typename T>
-40039: bool operator!=(const DB_Row<T>& x, const DB_Row<T>& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 351 "../../src/DB_Row_defs.hh"
-40039: template <typename T>
-40039: class Parma_Polyhedra_Library::DB_Row_Impl_Handler<T>::Impl {
-40039: public:
-40039: # 362 "../../src/DB_Row_defs.hh"
-40039:   static void* operator new(size_t fixed_size, dimension_type capacity);
-40039: 
-40039: 
-40039:   static void operator delete(void* p);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static void operator delete(void* p, dimension_type capacity);
-40039: 
-40039: 
-40039: 
-40039:   Impl();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   ~Impl();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void expand_within_capacity(dimension_type new_size);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void shrink(dimension_type new_size);
-40039: 
-40039: 
-40039:   void copy_construct_coefficients(const Impl& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename U>
-40039:   void construct_upward_approximation(const U& y);
-40039: 
-40039: 
-40039:   static dimension_type max_size();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type size() const;
-40039: 
-40039: 
-40039:   void set_size(dimension_type new_sz);
-40039: 
-40039: 
-40039:   void bump_size();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   T& operator[](dimension_type k);
-40039: 
-40039: 
-40039:   const T& operator[](dimension_type k) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes(dimension_type capacity) const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: private:
-40039:   friend class DB_Row<T>;
-40039: 
-40039: 
-40039:   dimension_type size_;
-40039: 
-40039: 
-40039:   T vec_[
-40039: 
-40039:           0
-40039: 
-40039: 
-40039: 
-40039:   ];
-40039: 
-40039: 
-40039:   Impl(const Impl& y);
-40039: 
-40039: 
-40039:   Impl& operator=(const Impl&);
-40039: 
-40039: 
-40039:   void copy_construct(const Impl& y);
-40039: };
-40039: 
-40039: # 1 "../../src/DB_Row_inlines.hh" 1
-40039: # 34 "../../src/DB_Row_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: inline void*
-40039: DB_Row_Impl_Handler<T>::Impl::operator new(const size_t fixed_size,
-40039:                                            const dimension_type capacity) {
-40039: 
-40039:   return ::operator new(fixed_size + capacity*sizeof(T));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: DB_Row_Impl_Handler<T>::Impl::operator delete(void* p) {
-40039:   ::operator delete(p);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: DB_Row_Impl_Handler<T>::Impl::operator delete(void* p, dimension_type) {
-40039:   ::operator delete(p);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline memory_size_type
-40039: DB_Row_Impl_Handler<T>::Impl
-40039: ::total_memory_in_bytes(dimension_type capacity) const {
-40039:   return
-40039:     sizeof(*this)
-40039:     + capacity*sizeof(T)
-40039: 
-40039: 
-40039: 
-40039:     + external_memory_in_bytes();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline memory_size_type
-40039: DB_Row_Impl_Handler<T>::Impl::total_memory_in_bytes() const {
-40039: 
-40039: 
-40039:   return total_memory_in_bytes(size_);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: DB_Row_Impl_Handler<T>::Impl::max_size() {
-40039:   return std::numeric_limits<size_t>::max() / sizeof(T);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: DB_Row_Impl_Handler<T>::Impl::size() const {
-40039:   return size_;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: DB_Row_Impl_Handler<T>::Impl::set_size(const dimension_type new_sz) {
-40039:   size_ = new_sz;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: DB_Row_Impl_Handler<T>::Impl::bump_size() {
-40039:   ++size_;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: DB_Row_Impl_Handler<T>::Impl::Impl()
-40039:   : size_(0) {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: DB_Row_Impl_Handler<T>::Impl::~Impl() {
-40039:   shrink(0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: DB_Row_Impl_Handler<T>::DB_Row_Impl_Handler()
-40039:   : impl(0) {
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: DB_Row_Impl_Handler<T>::~DB_Row_Impl_Handler() {
-40039:   delete impl;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline T&
-40039: DB_Row_Impl_Handler<T>::Impl::operator[](const dimension_type k) {
-40039:   ((void) 0);
-40039:   return vec_[k];
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline const T&
-40039: DB_Row_Impl_Handler<T>::Impl::operator[](const dimension_type k) const {
-40039:   ((void) 0);
-40039:   return vec_[k];
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: DB_Row<T>::max_size() {
-40039:   return DB_Row_Impl_Handler<T>::Impl::max_size();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: DB_Row<T>::size() const {
-40039:   return this->impl->size();
-40039: }
-40039: # 166 "../../src/DB_Row_inlines.hh"
-40039: template <typename T>
-40039: inline
-40039: DB_Row<T>::DB_Row()
-40039:   : DB_Row_Impl_Handler<T>() {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: DB_Row<T>::allocate(
-40039: 
-40039:                const
-40039: 
-40039:                dimension_type capacity) {
-40039:   DB_Row<T>& x = *this;
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   x.impl = new(capacity) typename DB_Row_Impl_Handler<T>::Impl();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: DB_Row<T>::expand_within_capacity(const dimension_type new_size) {
-40039:   DB_Row<T>& x = *this;
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:   x.impl->expand_within_capacity(new_size);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: DB_Row<T>::copy_construct_coefficients(const DB_Row& y) {
-40039:   DB_Row<T>& x = *this;
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:   x.impl->copy_construct_coefficients(*(y.impl));
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline void
-40039: DB_Row<T>::construct_upward_approximation(const DB_Row<U>& y,
-40039:                                           const dimension_type capacity) {
-40039:   DB_Row<T>& x = *this;
-40039:   ((void) 0);
-40039:   allocate(capacity);
-40039:   ((void) 0);
-40039:   x.impl->construct_upward_approximation(*(y.impl));
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: DB_Row<T>::construct(const dimension_type sz,
-40039:                      const dimension_type capacity) {
-40039:   ((void) 0);
-40039:   allocate(capacity);
-40039:   expand_within_capacity(sz);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: DB_Row<T>::construct(const dimension_type sz) {
-40039:   construct(sz, sz);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: DB_Row<T>::DB_Row(const dimension_type sz,
-40039:                   const dimension_type capacity)
-40039:   : DB_Row_Impl_Handler<T>() {
-40039:   construct(sz, capacity);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: DB_Row<T>::DB_Row(const dimension_type sz) {
-40039:   construct(sz);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: DB_Row<T>::DB_Row(const DB_Row& y)
-40039:   : DB_Row_Impl_Handler<T>() {
-40039:   if (y.impl != 0) {
-40039:     allocate(compute_capacity(y.size(), max_size()));
-40039:     copy_construct_coefficients(y);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: DB_Row<T>::DB_Row(const DB_Row& y,
-40039:                   const dimension_type capacity)
-40039:   : DB_Row_Impl_Handler<T>() {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   allocate(capacity);
-40039:   copy_construct_coefficients(y);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: DB_Row<T>::DB_Row(const DB_Row& y,
-40039:                   const dimension_type sz,
-40039:                   const dimension_type capacity)
-40039:   : DB_Row_Impl_Handler<T>() {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   allocate(capacity);
-40039:   copy_construct_coefficients(y);
-40039:   expand_within_capacity(sz);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: DB_Row<T>::~DB_Row() {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: DB_Row<T>::shrink(const dimension_type new_size) {
-40039:   DB_Row<T>& x = *this;
-40039:   ((void) 0);
-40039:   x.impl->shrink(new_size);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: DB_Row<T>::m_swap(DB_Row& y) {
-40039:   using std::swap;
-40039:   DB_Row<T>& x = *this;
-40039:   swap(x.impl, y.impl);
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: DB_Row<T>::assign(DB_Row& y) {
-40039:   DB_Row<T>& x = *this;
-40039:   x.impl = y.impl;
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline DB_Row<T>&
-40039: DB_Row<T>::operator=(const DB_Row& y) {
-40039:   DB_Row tmp(y);
-40039:   m_swap(tmp);
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline T&
-40039: DB_Row<T>::operator[](const dimension_type k) {
-40039:   DB_Row<T>& x = *this;
-40039:   return (*x.impl)[k];
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline const T&
-40039: DB_Row<T>::operator[](const dimension_type k) const {
-40039:   const DB_Row<T>& x = *this;
-40039:   return (*x.impl)[k];
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename DB_Row<T>::iterator
-40039: DB_Row<T>::begin() {
-40039:   DB_Row<T>& x = *this;
-40039:   return iterator(x.impl->vec_);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename DB_Row<T>::iterator
-40039: DB_Row<T>::end() {
-40039:   DB_Row<T>& x = *this;
-40039:   return iterator(x.impl->vec_ + x.impl->size_);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename DB_Row<T>::const_iterator
-40039: DB_Row<T>::begin() const {
-40039:   const DB_Row<T>& x = *this;
-40039:   return const_iterator(x.impl->vec_);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename DB_Row<T>::const_iterator
-40039: DB_Row<T>::end() const {
-40039:   const DB_Row<T>& x = *this;
-40039:   return const_iterator(x.impl->vec_ + x.impl->size_);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline memory_size_type
-40039: DB_Row<T>::external_memory_in_bytes(dimension_type capacity) const {
-40039:   const DB_Row<T>& x = *this;
-40039:   return x.impl->total_memory_in_bytes(capacity);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline memory_size_type
-40039: DB_Row<T>::total_memory_in_bytes(dimension_type capacity) const {
-40039:   return sizeof(*this) + external_memory_in_bytes(capacity);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline memory_size_type
-40039: DB_Row<T>::external_memory_in_bytes() const {
-40039:   const DB_Row<T>& x = *this;
-40039: 
-40039: 
-40039: 
-40039:   return x.impl->total_memory_in_bytes();
-40039: 
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline memory_size_type
-40039: DB_Row<T>::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: operator!=(const DB_Row<T>& x, const DB_Row<T>& y) {
-40039:   return !(x == y);
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: swap(DB_Row<T>& x, DB_Row<T>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: iter_swap(typename std::vector<DB_Row<T> >::iterator x,
-40039:           typename std::vector<DB_Row<T> >::iterator y) {
-40039:   swap(*x, *y);
-40039: }
-40039: 
-40039: }
-40039: # 468 "../../src/DB_Row_defs.hh" 2
-40039: # 1 "../../src/DB_Row_templates.hh" 1
-40039: # 29 "../../src/DB_Row_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: void
-40039: DB_Row_Impl_Handler<T>::Impl::construct_upward_approximation(const U& y) {
-40039:   const dimension_type y_size = y.size();
-40039: 
-40039: 
-40039:   for (dimension_type i = 0; i < y_size; ++i) {
-40039:     construct(vec_[i], y[i], ROUND_UP);
-40039:     bump_size();
-40039:   }
-40039: # 53 "../../src/DB_Row_templates.hh"
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: DB_Row_Impl_Handler<T>::
-40039: Impl::expand_within_capacity(const dimension_type new_size) {
-40039:   ((void) 0);
-40039: # 68 "../../src/DB_Row_templates.hh"
-40039:   for (dimension_type i = size(); i < new_size; ++i) {
-40039:     new(&vec_[i]) T(PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     bump_size();
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: DB_Row_Impl_Handler<T>::Impl::shrink(dimension_type new_size) {
-40039:   const dimension_type old_size = size();
-40039:   ((void) 0);
-40039: 
-40039:   set_size(new_size);
-40039: # 89 "../../src/DB_Row_templates.hh"
-40039:   for (dimension_type i = old_size; i-- > new_size; ) {
-40039:     vec_[i].~T();
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: DB_Row_Impl_Handler<T>::Impl::copy_construct_coefficients(const Impl& y) {
-40039:   const dimension_type y_size = y.size();
-40039: 
-40039: 
-40039:   for (dimension_type i = 0; i < y_size; ++i) {
-40039:     new(&vec_[i]) T(y.vec_[i]);
-40039:     bump_size();
-40039:   }
-40039: # 115 "../../src/DB_Row_templates.hh"
-40039: }
-40039: 
-40039: template <typename T>
-40039: memory_size_type
-40039: DB_Row_Impl_Handler<T>::Impl::external_memory_in_bytes() const {
-40039:   memory_size_type n = 0;
-40039:   for (dimension_type i = size(); i-- > 0; ) {
-40039:     n += Parma_Polyhedra_Library::external_memory_in_bytes(vec_[i]);
-40039:   }
-40039:   return n;
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: DB_Row<T>::OK(const dimension_type row_size,
-40039:               const dimension_type
-40039: 
-40039: 
-40039: 
-40039:               ) const {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const DB_Row<T>& x = *this;
-40039:   bool is_broken = false;
-40039: # 163 "../../src/DB_Row_templates.hh"
-40039:   if (x.size() != row_size) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     is_broken = true;
-40039:   }
-40039: # 183 "../../src/DB_Row_templates.hh"
-40039:   for (dimension_type i = x.size(); i-- > 0; ) {
-40039:     const T& element = x[i];
-40039: 
-40039:     if (!element.OK()) {
-40039:       is_broken = true;
-40039:       break;
-40039:     }
-40039: 
-40039:     if (is_not_a_number(element)) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       is_broken = true;
-40039:       break;
-40039:     }
-40039:   }
-40039: 
-40039:   return !is_broken;
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: bool
-40039: operator==(const DB_Row<T>& x, const DB_Row<T>& y) {
-40039:   if (x.size() != y.size()) {
-40039:     return false;
-40039:   }
-40039:   for (dimension_type i = x.size(); i-- > 0; ) {
-40039:     if (x[i] != y[i]) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: }
-40039: # 469 "../../src/DB_Row_defs.hh" 2
-40039: # 30 "../../src/DB_Matrix_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: std::ostream&
-40039: operator<<(std::ostream& s, const DB_Matrix<T>& c);
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 61 "../../src/DB_Matrix_defs.hh"
-40039: template <typename T>
-40039: class Parma_Polyhedra_Library::DB_Matrix {
-40039: public:
-40039: 
-40039:   static dimension_type max_num_rows();
-40039: 
-40039: 
-40039:   static dimension_type max_num_columns();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   DB_Matrix();
-40039: 
-40039: 
-40039:   explicit DB_Matrix(dimension_type n_rows);
-40039: 
-40039: 
-40039:   DB_Matrix(const DB_Matrix& y);
-40039: 
-40039: 
-40039:   template <typename U>
-40039:   explicit DB_Matrix(const DB_Matrix<U>& y);
-40039: 
-40039: 
-40039:   ~DB_Matrix();
-40039: 
-40039: 
-40039:   DB_Matrix& operator=(const DB_Matrix& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   class const_iterator {
-40039:   private:
-40039:     typedef typename std::vector<DB_Row<T> >::const_iterator Iter;
-40039: 
-40039:     Iter i;
-40039: 
-40039:   public:
-40039:     typedef std::forward_iterator_tag iterator_category;
-40039:     typedef typename std::iterator_traits<Iter>::value_type value_type;
-40039:     typedef typename std::iterator_traits<Iter>::difference_type
-40039:     difference_type;
-40039:     typedef typename std::iterator_traits<Iter>::pointer pointer;
-40039:     typedef typename std::iterator_traits<Iter>::reference reference;
-40039: 
-40039: 
-40039:     const_iterator();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     explicit const_iterator(const Iter& b);
-40039: 
-40039: 
-40039:     const_iterator(const const_iterator& y);
-40039: 
-40039: 
-40039:     const_iterator& operator=(const const_iterator& y);
-40039: 
-40039: 
-40039:     reference operator*() const;
-40039: 
-40039: 
-40039:     pointer operator->() const;
-40039: 
-40039: 
-40039:     const_iterator& operator++();
-40039: 
-40039: 
-40039:     const_iterator operator++(int);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     bool operator==(const const_iterator& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     bool operator!=(const const_iterator& y) const;
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const_iterator begin() const;
-40039: 
-40039: 
-40039:   const_iterator end() const;
-40039: 
-40039: private:
-40039:   template <typename U> friend class DB_Matrix;
-40039: 
-40039: 
-40039:   std::vector<DB_Row<T> > rows;
-40039: 
-40039: 
-40039:   dimension_type row_size;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type row_capacity;
-40039: 
-40039: public:
-40039: 
-40039:   void m_swap(DB_Matrix& y);
-40039: # 188 "../../src/DB_Matrix_defs.hh"
-40039:   void grow(dimension_type new_n_rows);
-40039: # 198 "../../src/DB_Matrix_defs.hh"
-40039:   void resize_no_copy(dimension_type new_n_rows);
-40039: 
-40039: 
-40039:   dimension_type num_rows() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   DB_Row<T>& operator[](dimension_type k);
-40039: 
-40039: 
-40039:   const DB_Row<T>& operator[](dimension_type k) const;
-40039: 
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: };
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: void swap(DB_Matrix<T>& x, DB_Matrix<T>& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: bool operator==(const DB_Matrix<T>& x, const DB_Matrix<T>& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: bool operator!=(const DB_Matrix<T>& x, const DB_Matrix<T>& y);
-40039: # 267 "../../src/DB_Matrix_defs.hh"
-40039: template <typename Temp, typename To, typename T>
-40039: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                  const DB_Matrix<T>& x,
-40039:                                  const DB_Matrix<T>& y,
-40039:                                  Rounding_Dir dir,
-40039:                                  Temp& tmp0,
-40039:                                  Temp& tmp1,
-40039:                                  Temp& tmp2);
-40039: # 289 "../../src/DB_Matrix_defs.hh"
-40039: template <typename Temp, typename To, typename T>
-40039: bool euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                const DB_Matrix<T>& x,
-40039:                                const DB_Matrix<T>& y,
-40039:                                Rounding_Dir dir,
-40039:                                Temp& tmp0,
-40039:                                Temp& tmp1,
-40039:                                Temp& tmp2);
-40039: # 311 "../../src/DB_Matrix_defs.hh"
-40039: template <typename Temp, typename To, typename T>
-40039: bool l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                 const DB_Matrix<T>& x,
-40039:                                 const DB_Matrix<T>& y,
-40039:                                 Rounding_Dir dir,
-40039:                                 Temp& tmp0,
-40039:                                 Temp& tmp1,
-40039:                                 Temp& tmp2);
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/DB_Matrix_inlines.hh" 1
-40039: # 33 "../../src/DB_Matrix_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: DB_Matrix<T>::m_swap(DB_Matrix& y) {
-40039:   using std::swap;
-40039:   swap(rows, y.rows);
-40039:   swap(row_size, y.row_size);
-40039:   swap(row_capacity, y.row_capacity);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: DB_Matrix<T>::max_num_rows() {
-40039:   return std::vector<DB_Row<T> >().max_size();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: DB_Matrix<T>::max_num_columns() {
-40039:   return DB_Row<T>::max_size();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline memory_size_type
-40039: DB_Matrix<T>::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: DB_Matrix<T>::const_iterator::const_iterator()
-40039:   : i(Iter()) {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: DB_Matrix<T>::const_iterator::const_iterator(const Iter& b)
-40039:   : i(b) {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: DB_Matrix<T>::const_iterator::const_iterator(const const_iterator& y)
-40039:   : i(y.i) {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename DB_Matrix<T>::const_iterator&
-40039: DB_Matrix<T>::const_iterator::operator=(const const_iterator& y) {
-40039:   i = y.i;
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename DB_Matrix<T>::const_iterator::reference
-40039: DB_Matrix<T>::const_iterator::operator*() const {
-40039:   return *i;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename DB_Matrix<T>::const_iterator::pointer
-40039: DB_Matrix<T>::const_iterator::operator->() const {
-40039:   return &*i;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename DB_Matrix<T>::const_iterator&
-40039: DB_Matrix<T>::const_iterator::operator++() {
-40039:   ++i;
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename DB_Matrix<T>::const_iterator
-40039: DB_Matrix<T>::const_iterator::operator++(int) {
-40039:   return const_iterator(i++);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: DB_Matrix<T>::const_iterator::operator==(const const_iterator& y) const {
-40039:   return i == y.i;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: DB_Matrix<T>::const_iterator::operator!=(const const_iterator& y) const {
-40039:   return !operator==(y);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename DB_Matrix<T>::const_iterator
-40039: DB_Matrix<T>::begin() const {
-40039:   return const_iterator(rows.begin());
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename DB_Matrix<T>::const_iterator
-40039: DB_Matrix<T>::end() const {
-40039:   return const_iterator(rows.end());
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: DB_Matrix<T>::DB_Matrix()
-40039:   : rows(),
-40039:     row_size(0),
-40039:     row_capacity(0) {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: DB_Matrix<T>::~DB_Matrix() {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline DB_Row<T>&
-40039: DB_Matrix<T>::operator[](const dimension_type k) {
-40039:   ((void) 0);
-40039:   return rows[k];
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline const DB_Row<T>&
-40039: DB_Matrix<T>::operator[](const dimension_type k) const {
-40039:   ((void) 0);
-40039:   return rows[k];
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: DB_Matrix<T>::num_rows() const {
-40039:   return rows.size();
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: operator!=(const DB_Matrix<T>& x, const DB_Matrix<T>& y) {
-40039:   return !(x == y);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: DB_Matrix<T>::DB_Matrix(const DB_Matrix& y)
-40039:   : rows(y.rows),
-40039:     row_size(y.row_size),
-40039:     row_capacity(compute_capacity(y.row_size, max_num_columns())) {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline DB_Matrix<T>&
-40039: DB_Matrix<T>::operator=(const DB_Matrix& y) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (this != &y) {
-40039: 
-40039:     rows = y.rows;
-40039:     row_size = y.row_size;
-40039: 
-40039: 
-40039:     row_capacity = compute_capacity(y.row_size, max_num_columns());
-40039:   }
-40039:   return *this;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Specialization, typename Temp, typename To, typename T>
-40039: inline bool
-40039: l_m_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                     const DB_Matrix<T>& x,
-40039:                     const DB_Matrix<T>& y,
-40039:                     const Rounding_Dir dir,
-40039:                     Temp& tmp0,
-40039:                     Temp& tmp1,
-40039:                     Temp& tmp2) {
-40039:   const dimension_type x_num_rows = x.num_rows();
-40039:   if (x_num_rows != y.num_rows()) {
-40039:     return false;
-40039:   }
-40039:   assign_r(tmp0, 0, ROUND_NOT_NEEDED);
-40039:   for (dimension_type i = x_num_rows; i-- > 0; ) {
-40039:     const DB_Row<T>& x_i = x[i];
-40039:     const DB_Row<T>& y_i = y[i];
-40039:     for (dimension_type j = x_num_rows; j-- > 0; ) {
-40039:       const T& x_i_j = x_i[j];
-40039:       const T& y_i_j = y_i[j];
-40039:       if (is_plus_infinity(x_i_j)) {
-40039:         if (is_plus_infinity(y_i_j)) {
-40039:           continue;
-40039:         }
-40039:         else {
-40039:         pinf:
-40039:           assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:           return true;
-40039:         }
-40039:       }
-40039:       else if (is_plus_infinity(y_i_j)) {
-40039:         goto pinf;
-40039:       }
-40039:       const Temp* tmp1p;
-40039:       const Temp* tmp2p;
-40039:       if (x_i_j > y_i_j) {
-40039:         maybe_assign(tmp1p, tmp1, x_i_j, dir);
-40039:         maybe_assign(tmp2p, tmp2, y_i_j, inverse(dir));
-40039:       }
-40039:       else {
-40039:         maybe_assign(tmp1p, tmp1, y_i_j, dir);
-40039:         maybe_assign(tmp2p, tmp2, x_i_j, inverse(dir));
-40039:       }
-40039:       sub_assign_r(tmp1, *tmp1p, *tmp2p, dir);
-40039:       ((void) 0);
-40039:       Specialization::combine(tmp0, tmp1, dir);
-40039:     }
-40039:   }
-40039:   Specialization::finalize(tmp0, dir);
-40039:   assign_r(r, tmp0, dir);
-40039:   return true;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename T>
-40039: inline bool
-40039: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                             const DB_Matrix<T>& x,
-40039:                             const DB_Matrix<T>& y,
-40039:                             const Rounding_Dir dir,
-40039:                             Temp& tmp0,
-40039:                             Temp& tmp1,
-40039:                             Temp& tmp2) {
-40039:   return
-40039:     l_m_distance_assign<Rectilinear_Distance_Specialization<Temp> >(r, x, y,
-40039:                                                                     dir,
-40039:                                                                     tmp0,
-40039:                                                                     tmp1,
-40039:                                                                     tmp2);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename T>
-40039: inline bool
-40039: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                           const DB_Matrix<T>& x,
-40039:                           const DB_Matrix<T>& y,
-40039:                           const Rounding_Dir dir,
-40039:                           Temp& tmp0,
-40039:                           Temp& tmp1,
-40039:                           Temp& tmp2) {
-40039:   return
-40039:     l_m_distance_assign<Euclidean_Distance_Specialization<Temp> >(r, x, y,
-40039:                                                                   dir,
-40039:                                                                   tmp0,
-40039:                                                                   tmp1,
-40039:                                                                   tmp2);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename T>
-40039: inline bool
-40039: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                            const DB_Matrix<T>& x,
-40039:                            const DB_Matrix<T>& y,
-40039:                            const Rounding_Dir dir,
-40039:                            Temp& tmp0,
-40039:                            Temp& tmp1,
-40039:                            Temp& tmp2) {
-40039:   return
-40039:     l_m_distance_assign<L_Infinity_Distance_Specialization<Temp> >(r, x, y,
-40039:                                                                    dir,
-40039:                                                                    tmp0,
-40039:                                                                    tmp1,
-40039:                                                                    tmp2);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: swap(DB_Matrix<T>& x, DB_Matrix<T>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 323 "../../src/DB_Matrix_defs.hh" 2
-40039: # 1 "../../src/DB_Matrix_templates.hh" 1
-40039: # 27 "../../src/DB_Matrix_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: DB_Matrix<T>::DB_Matrix(const dimension_type n_rows)
-40039:   : rows(n_rows),
-40039:     row_size(n_rows),
-40039:     row_capacity(compute_capacity(n_rows, max_num_columns())) {
-40039: 
-40039:   for (dimension_type i = 0; i < n_rows; ++i) {
-40039:     rows[i].construct(n_rows, row_capacity);
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: DB_Matrix<T>::DB_Matrix(const DB_Matrix<U>& y)
-40039:   : rows(y.rows.size()),
-40039:     row_size(y.row_size),
-40039:     row_capacity(compute_capacity(y.row_size, max_num_columns())) {
-40039: 
-40039:   for (dimension_type i = 0, n_rows = rows.size(); i < n_rows; ++i) {
-40039:     rows[i].construct_upward_approximation(y[i], row_capacity);
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: DB_Matrix<T>::grow(const dimension_type new_n_rows) {
-40039:   const dimension_type old_n_rows = rows.size();
-40039:   ((void) 0);
-40039: 
-40039:   if (new_n_rows > old_n_rows) {
-40039:     if (new_n_rows <= row_capacity) {
-40039: 
-40039:       if (rows.capacity() < new_n_rows) {
-40039: 
-40039:         std::vector<DB_Row<T> > new_rows;
-40039:         new_rows.reserve(compute_capacity(new_n_rows, max_num_rows()));
-40039:         new_rows.insert(new_rows.end(), new_n_rows, DB_Row<T>());
-40039: 
-40039:         dimension_type i = new_n_rows;
-40039:         while (i-- > old_n_rows) {
-40039:           new_rows[i].construct(new_n_rows, row_capacity);
-40039:         }
-40039: 
-40039:         ++i;
-40039:         while (i-- > 0) {
-40039:           swap(new_rows[i], rows[i]);
-40039:         }
-40039: 
-40039:         using std::swap;
-40039:         swap(rows, new_rows);
-40039:       }
-40039:       else {
-40039: 
-40039:         rows.insert(rows.end(), new_n_rows - old_n_rows, DB_Row<T>());
-40039:         for (dimension_type i = new_n_rows; i-- > old_n_rows; ) {
-40039:           rows[i].construct(new_n_rows, row_capacity);
-40039:         }
-40039:       }
-40039:     }
-40039:     else {
-40039: 
-40039:       DB_Matrix new_matrix;
-40039:       new_matrix.rows.reserve(compute_capacity(new_n_rows, max_num_rows()));
-40039:       new_matrix.rows.insert(new_matrix.rows.end(), new_n_rows, DB_Row<T>());
-40039: 
-40039:       new_matrix.row_size = new_n_rows;
-40039:       new_matrix.row_capacity = compute_capacity(new_n_rows,
-40039:                                                  max_num_columns());
-40039:       dimension_type i = new_n_rows;
-40039:       while (i-- > old_n_rows) {
-40039:         new_matrix.rows[i].construct(new_matrix.row_size,
-40039:                                      new_matrix.row_capacity);
-40039:       }
-40039: 
-40039:       ++i;
-40039:       while (i-- > 0) {
-40039: 
-40039:         DB_Row<T> new_row(rows[i],
-40039:                           new_matrix.row_size,
-40039:                           new_matrix.row_capacity);
-40039:         swap(new_matrix.rows[i], new_row);
-40039:       }
-40039: 
-40039:       m_swap(new_matrix);
-40039:       return;
-40039:     }
-40039:   }
-40039: 
-40039:   if (new_n_rows > row_size) {
-40039: 
-40039:     if (new_n_rows <= row_capacity) {
-40039: 
-40039:       for (dimension_type i = old_n_rows; i-- > 0; ) {
-40039:         rows[i].expand_within_capacity(new_n_rows);
-40039:       }
-40039:     }
-40039:     else {
-40039: 
-40039: 
-40039:       const dimension_type new_row_capacity
-40039:         = compute_capacity(new_n_rows, max_num_columns());
-40039:       for (dimension_type i = old_n_rows; i-- > 0; ) {
-40039: 
-40039:         DB_Row<T> new_row(rows[i], new_n_rows, new_row_capacity);
-40039:         swap(rows[i], new_row);
-40039:       }
-40039:       row_capacity = new_row_capacity;
-40039:     }
-40039: 
-40039:     row_size = new_n_rows;
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: DB_Matrix<T>::resize_no_copy(const dimension_type new_n_rows) {
-40039:   dimension_type old_n_rows = rows.size();
-40039: 
-40039:   if (new_n_rows > old_n_rows) {
-40039: 
-40039:     if (new_n_rows <= row_capacity) {
-40039: 
-40039:       if (rows.capacity() < new_n_rows) {
-40039: 
-40039:         std::vector<DB_Row<T> > new_rows;
-40039:         new_rows.reserve(compute_capacity(new_n_rows, max_num_rows()));
-40039:         new_rows.insert(new_rows.end(), new_n_rows, DB_Row<T>());
-40039: 
-40039: 
-40039:         dimension_type i = new_n_rows;
-40039:         while (i-- > old_n_rows) {
-40039:           new_rows[i].construct(new_n_rows, row_capacity);
-40039: 
-40039:         }
-40039:         ++i;
-40039:         while (i-- > 0) {
-40039:           swap(new_rows[i], rows[i]);
-40039:         }
-40039: 
-40039:         using std::swap;
-40039:         swap(rows, new_rows);
-40039:       }
-40039:       else {
-40039: 
-40039:         rows.insert(rows.end(), new_n_rows - old_n_rows, DB_Row<T>());
-40039: 
-40039: 
-40039:         for (dimension_type i = new_n_rows; i-- > old_n_rows; ) {
-40039:           rows[i].construct(new_n_rows, row_capacity);
-40039:         }
-40039:       }
-40039:     }
-40039:     else {
-40039: 
-40039:       DB_Matrix new_matrix(new_n_rows);
-40039:       m_swap(new_matrix);
-40039:       return;
-40039:     }
-40039:   }
-40039:   else if (new_n_rows < old_n_rows) {
-40039: 
-40039:     rows.resize(new_n_rows);
-40039: 
-40039:     for (dimension_type i = new_n_rows; i-- > 0; ) {
-40039:       rows[i].shrink(new_n_rows);
-40039:     }
-40039:     old_n_rows = new_n_rows;
-40039:   }
-40039: 
-40039:   if (new_n_rows > row_size) {
-40039: 
-40039:     if (new_n_rows <= row_capacity) {
-40039: 
-40039:       for (dimension_type i = old_n_rows; i-- > 0; ) {
-40039:         rows[i].expand_within_capacity(new_n_rows);
-40039:       }
-40039:     }
-40039:     else {
-40039: 
-40039: 
-40039:       const dimension_type new_row_capacity
-40039:         = compute_capacity(new_n_rows, max_num_columns());
-40039:       for (dimension_type i = old_n_rows; i-- > 0; ) {
-40039:         DB_Row<T> new_row(new_n_rows, new_row_capacity);
-40039:         swap(rows[i], new_row);
-40039:       }
-40039:       row_capacity = new_row_capacity;
-40039:     }
-40039:   }
-40039: 
-40039:   row_size = new_n_rows;
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: DB_Matrix<T>::ascii_dump(std::ostream& s) const {
-40039:   const DB_Matrix<T>& x = *this;
-40039:   const char separator = ' ';
-40039:   const dimension_type nrows = x.num_rows();
-40039:   s << nrows << separator << "\n";
-40039:   for (dimension_type i = 0; i < nrows; ++i) {
-40039:     for (dimension_type j = 0; j < nrows; ++j) {
-40039:       using namespace IO_Operators;
-40039:       s << x[i][j] << separator;
-40039:     }
-40039:     s << "\n";
-40039:   }
-40039: }
-40039: 
-40039: template <typename T> void DB_Matrix<T>::ascii_dump() const { ascii_dump(std::cerr); } template <typename T> void DB_Matrix<T>::print() const { using IO_Operators::operator<<; std::cerr << *this; }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: DB_Matrix<T>::ascii_load(std::istream& s) {
-40039:   dimension_type nrows;
-40039:   if (!(s >> nrows)) {
-40039:     return false;
-40039:   }
-40039:   resize_no_copy(nrows);
-40039:   DB_Matrix& x = *this;
-40039:   for (dimension_type i = 0; i < nrows; ++i) {
-40039:     for (dimension_type j = 0; j < nrows; ++j) {
-40039:       Result r = input(x[i][j], s, ROUND_CHECK);
-40039:       if (result_relation(r) != VR_EQ || is_minus_infinity(x[i][j])) {
-40039:         return false;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   return true;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: bool
-40039: operator==(const DB_Matrix<T>& x, const DB_Matrix<T>& y) {
-40039:   const dimension_type x_num_rows = x.num_rows();
-40039:   if (x_num_rows != y.num_rows()) {
-40039:     return false;
-40039:   }
-40039:   for (dimension_type i = x_num_rows; i-- > 0; ) {
-40039:     if (x[i] != y[i]) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename T>
-40039: memory_size_type
-40039: DB_Matrix<T>::external_memory_in_bytes() const {
-40039:   memory_size_type n = rows.capacity() * sizeof(DB_Row<T>);
-40039:   for (dimension_type i = num_rows(); i-- > 0; ) {
-40039:     n += rows[i].external_memory_in_bytes(row_capacity);
-40039:   }
-40039:   return n;
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: DB_Matrix<T>::OK() const {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (num_rows() != row_size) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     return false;
-40039:   }
-40039: 
-40039:   const DB_Matrix& x = *this;
-40039:   const dimension_type n_rows = x.num_rows();
-40039:   for (dimension_type i = 0; i < n_rows; ++i) {
-40039:     if (!x[i].OK(row_size, row_capacity)) {
-40039:       return false;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   return true;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: std::ostream&
-40039: IO_Operators::operator<<(std::ostream& s, const DB_Matrix<T>& c) {
-40039:   const dimension_type n = c.num_rows();
-40039:   for (dimension_type i = 0; i < n; ++i) {
-40039:     for (dimension_type j = 0; j < n; ++j) {
-40039:       s << c[i][j] << " ";
-40039:     }
-40039:     s << "\n";
-40039:   }
-40039:   return s;
-40039: }
-40039: 
-40039: }
-40039: # 324 "../../src/DB_Matrix_defs.hh" 2
-40039: # 45 "../../src/BD_Shape_defs.hh" 2
-40039: 
-40039: 
-40039: # 1 "../../src/WRD_coefficient_types_defs.hh" 1
-40039: # 29 "../../src/WRD_coefficient_types_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: struct WRD_Extended_Number_Policy {
-40039: 
-40039:   enum const_bool_value_check_overflow { check_overflow = (true) };
-40039: 
-40039: 
-40039:   enum const_bool_value_check_inf_add_inf { check_inf_add_inf = (false) };
-40039: 
-40039: 
-40039:   enum const_bool_value_check_inf_sub_inf { check_inf_sub_inf = (false) };
-40039: 
-40039: 
-40039:   enum const_bool_value_check_inf_mul_zero { check_inf_mul_zero = (false) };
-40039: 
-40039: 
-40039:   enum const_bool_value_check_div_zero { check_div_zero = (false) };
-40039: 
-40039: 
-40039:   enum const_bool_value_check_inf_div_inf { check_inf_div_inf = (false) };
-40039: 
-40039: 
-40039:   enum const_bool_value_check_inf_mod { check_inf_mod = (false) };
-40039: 
-40039: 
-40039:   enum const_bool_value_check_sqrt_neg { check_sqrt_neg = (false) };
-40039: 
-40039: 
-40039:   enum const_bool_value_has_nan { has_nan = (true) };
-40039: 
-40039: 
-40039:   enum const_bool_value_has_infinity { has_infinity = (true) };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   enum const_bool_value_fpu_check_inexact { fpu_check_inexact = (true) };
-40039: 
-40039: 
-40039:   enum const_bool_value_fpu_check_nan_result { fpu_check_nan_result = (false) };
-40039: # 87 "../../src/WRD_coefficient_types_defs.hh"
-40039:   static void handle_result(Result r);
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: struct Debug_WRD_Extended_Number_Policy {
-40039: 
-40039:   enum const_bool_value_check_overflow { check_overflow = (true) };
-40039: 
-40039: 
-40039:   enum const_bool_value_check_inf_add_inf { check_inf_add_inf = (true) };
-40039: 
-40039: 
-40039:   enum const_bool_value_check_inf_sub_inf { check_inf_sub_inf = (true) };
-40039: 
-40039: 
-40039:   enum const_bool_value_check_inf_mul_zero { check_inf_mul_zero = (true) };
-40039: 
-40039: 
-40039:   enum const_bool_value_check_div_zero { check_div_zero = (true) };
-40039: 
-40039: 
-40039:   enum const_bool_value_check_inf_div_inf { check_inf_div_inf = (true) };
-40039: 
-40039: 
-40039:   enum const_bool_value_check_inf_mod { check_inf_mod = (true) };
-40039: 
-40039: 
-40039:   enum const_bool_value_check_sqrt_neg { check_sqrt_neg = (true) };
-40039: 
-40039: 
-40039:   enum const_bool_value_has_nan { has_nan = (true) };
-40039: 
-40039: 
-40039:   enum const_bool_value_has_infinity { has_infinity = (true) };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   enum const_bool_value_fpu_check_inexact { fpu_check_inexact = (true) };
-40039: 
-40039: 
-40039:   enum const_bool_value_fpu_check_nan_result { fpu_check_nan_result = (true) };
-40039: # 146 "../../src/WRD_coefficient_types_defs.hh"
-40039:   static void handle_result(Result r);
-40039: };
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/WRD_coefficient_types_inlines.hh" 1
-40039: # 27 "../../src/WRD_coefficient_types_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline void
-40039: WRD_Extended_Number_Policy::handle_result(Result r) {
-40039:   if (result_class(r) == VC_NAN) {
-40039:     throw_result_exception(r);
-40039:   }
-40039: }
-40039: 
-40039: inline void
-40039: Debug_WRD_Extended_Number_Policy::handle_result(Result r) {
-40039:   if (result_class(r) == VC_NAN) {
-40039:     throw_result_exception(r);
-40039:   }
-40039: }
-40039: 
-40039: }
-40039: # 152 "../../src/WRD_coefficient_types_defs.hh" 2
-40039: # 48 "../../src/BD_Shape_defs.hh" 2
-40039: # 56 "../../src/BD_Shape_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace IO_Operators {
-40039: # 68 "../../src/BD_Shape_defs.hh"
-40039: template <typename T>
-40039: std::ostream&
-40039: operator<<(std::ostream& s, const BD_Shape<T>& bds);
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: void swap(BD_Shape<T>& x, BD_Shape<T>& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: bool operator==(const BD_Shape<T>& x, const BD_Shape<T>& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: bool operator!=(const BD_Shape<T>& x, const BD_Shape<T>& y);
-40039: # 106 "../../src/BD_Shape_defs.hh"
-40039: template <typename To, typename T>
-40039: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                  const BD_Shape<T>& x,
-40039:                                  const BD_Shape<T>& y,
-40039:                                  Rounding_Dir dir);
-40039: # 123 "../../src/BD_Shape_defs.hh"
-40039: template <typename Temp, typename To, typename T>
-40039: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                  const BD_Shape<T>& x,
-40039:                                  const BD_Shape<T>& y,
-40039:                                  Rounding_Dir dir);
-40039: # 140 "../../src/BD_Shape_defs.hh"
-40039: template <typename Temp, typename To, typename T>
-40039: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                  const BD_Shape<T>& x,
-40039:                                  const BD_Shape<T>& y,
-40039:                                  Rounding_Dir dir,
-40039:                                  Temp& tmp0,
-40039:                                  Temp& tmp1,
-40039:                                  Temp& tmp2);
-40039: # 160 "../../src/BD_Shape_defs.hh"
-40039: template <typename To, typename T>
-40039: bool euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                const BD_Shape<T>& x,
-40039:                                const BD_Shape<T>& y,
-40039:                                Rounding_Dir dir);
-40039: # 177 "../../src/BD_Shape_defs.hh"
-40039: template <typename Temp, typename To, typename T>
-40039: bool euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                const BD_Shape<T>& x,
-40039:                                const BD_Shape<T>& y,
-40039:                                Rounding_Dir dir);
-40039: # 194 "../../src/BD_Shape_defs.hh"
-40039: template <typename Temp, typename To, typename T>
-40039: bool euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                const BD_Shape<T>& x,
-40039:                                const BD_Shape<T>& y,
-40039:                                Rounding_Dir dir,
-40039:                                Temp& tmp0,
-40039:                                Temp& tmp1,
-40039:                                Temp& tmp2);
-40039: # 214 "../../src/BD_Shape_defs.hh"
-40039: template <typename To, typename T>
-40039: bool l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                 const BD_Shape<T>& x,
-40039:                                 const BD_Shape<T>& y,
-40039:                                 Rounding_Dir dir);
-40039: # 231 "../../src/BD_Shape_defs.hh"
-40039: template <typename Temp, typename To, typename T>
-40039: bool l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                 const BD_Shape<T>& x,
-40039:                                 const BD_Shape<T>& y,
-40039:                                 Rounding_Dir dir);
-40039: # 248 "../../src/BD_Shape_defs.hh"
-40039: template <typename Temp, typename To, typename T>
-40039: bool l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                 const BD_Shape<T>& x,
-40039:                                 const BD_Shape<T>& y,
-40039:                                 Rounding_Dir dir,
-40039:                                 Temp& tmp0,
-40039:                                 Temp& tmp1,
-40039:                                 Temp& tmp2);
-40039: 
-40039: 
-40039: 
-40039: class BD_Shape_Helpers {
-40039: public:
-40039: # 294 "../../src/BD_Shape_defs.hh"
-40039:   static bool extract_bounded_difference(const Constraint& c,
-40039:                                          dimension_type& c_num_vars,
-40039:                                          dimension_type& c_first_var,
-40039:                                          dimension_type& c_second_var,
-40039:                                          Coefficient& c_coeff);
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: void compute_leader_indices(const std::vector<dimension_type>& predecessor,
-40039:                             std::vector<dimension_type>& indices);
-40039: 
-40039: }
-40039: # 411 "../../src/BD_Shape_defs.hh"
-40039: template <typename T>
-40039: class Parma_Polyhedra_Library::BD_Shape {
-40039: private:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef Checked_Number<T, WRD_Extended_Number_Policy> N;
-40039: 
-40039: 
-40039: public:
-40039: 
-40039:   typedef T coefficient_type_base;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef N coefficient_type;
-40039: 
-40039: 
-40039:   static dimension_type max_space_dimension();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static bool can_recycle_constraint_systems();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static bool can_recycle_congruence_systems();
-40039: # 458 "../../src/BD_Shape_defs.hh"
-40039:   explicit BD_Shape(dimension_type num_dimensions = 0,
-40039:                     Degenerate_Element kind = UNIVERSE);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   BD_Shape(const BD_Shape& y,
-40039:            Complexity_Class complexity = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename U>
-40039:   explicit BD_Shape(const BD_Shape<U>& y,
-40039:                     Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 487 "../../src/BD_Shape_defs.hh"
-40039:   explicit BD_Shape(const Constraint_System& cs);
-40039: # 500 "../../src/BD_Shape_defs.hh"
-40039:   explicit BD_Shape(const Congruence_System& cgs);
-40039: # 510 "../../src/BD_Shape_defs.hh"
-40039:   explicit BD_Shape(const Generator_System& gs);
-40039: # 519 "../../src/BD_Shape_defs.hh"
-40039:   explicit BD_Shape(const Polyhedron& ph,
-40039:                     Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 538 "../../src/BD_Shape_defs.hh"
-40039:   template <typename Interval>
-40039:   explicit BD_Shape(const Box<Interval>& box,
-40039:                     Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 558 "../../src/BD_Shape_defs.hh"
-40039:   explicit BD_Shape(const Grid& grid,
-40039:                     Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 577 "../../src/BD_Shape_defs.hh"
-40039:   template <typename U>
-40039:   explicit BD_Shape(const Octagonal_Shape<U>& os,
-40039:                     Complexity_Class complexity = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   BD_Shape& operator=(const BD_Shape& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void m_swap(BD_Shape& y);
-40039: 
-40039: 
-40039:   ~BD_Shape();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type affine_dimension() const;
-40039: 
-40039: 
-40039:   Constraint_System constraints() const;
-40039: 
-40039: 
-40039:   Constraint_System minimized_constraints() const;
-40039: 
-40039: 
-40039:   Congruence_System congruences() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Congruence_System minimized_congruences() const;
-40039: # 633 "../../src/BD_Shape_defs.hh"
-40039:   bool bounds_from_above(const Linear_Expression& expr) const;
-40039: # 642 "../../src/BD_Shape_defs.hh"
-40039:   bool bounds_from_below(const Linear_Expression& expr) const;
-40039: # 668 "../../src/BD_Shape_defs.hh"
-40039:   bool maximize(const Linear_Expression& expr,
-40039:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum) const;
-40039: # 699 "../../src/BD_Shape_defs.hh"
-40039:   bool maximize(const Linear_Expression& expr,
-40039:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum,
-40039:                 Generator& g) const;
-40039: # 727 "../../src/BD_Shape_defs.hh"
-40039:   bool minimize(const Linear_Expression& expr,
-40039:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum) const;
-40039: # 758 "../../src/BD_Shape_defs.hh"
-40039:   bool minimize(const Linear_Expression& expr,
-40039:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum,
-40039:                 Generator& g) const;
-40039: # 790 "../../src/BD_Shape_defs.hh"
-40039:   bool frequency(const Linear_Expression& expr,
-40039:                  Coefficient& freq_n, Coefficient& freq_d,
-40039:                  Coefficient& val_n, Coefficient& val_d) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool contains(const BD_Shape& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool strictly_contains(const BD_Shape& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_disjoint_from(const BD_Shape& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Poly_Con_Relation relation_with(const Constraint& c) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Poly_Con_Relation relation_with(const Congruence& cg) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Poly_Gen_Relation relation_with(const Generator& g) const;
-40039: 
-40039: 
-40039:   bool is_empty() const;
-40039: 
-40039: 
-40039:   bool is_universe() const;
-40039: 
-40039: 
-40039:   bool is_discrete() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_topologically_closed() const;
-40039: 
-40039: 
-40039:   bool is_bounded() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool contains_integer_point() const;
-40039: # 868 "../../src/BD_Shape_defs.hh"
-40039:   bool constrains(Variable var) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: # 892 "../../src/BD_Shape_defs.hh"
-40039:   void add_constraint(const Constraint& c);
-40039: # 904 "../../src/BD_Shape_defs.hh"
-40039:   void add_congruence(const Congruence& cg);
-40039: # 918 "../../src/BD_Shape_defs.hh"
-40039:   void add_constraints(const Constraint_System& cs);
-40039: # 937 "../../src/BD_Shape_defs.hh"
-40039:   void add_recycled_constraints(Constraint_System& cs);
-40039: # 951 "../../src/BD_Shape_defs.hh"
-40039:   void add_congruences(const Congruence_System& cgs);
-40039: # 969 "../../src/BD_Shape_defs.hh"
-40039:   void add_recycled_congruences(Congruence_System& cgs);
-40039: # 981 "../../src/BD_Shape_defs.hh"
-40039:   void refine_with_constraint(const Constraint& c);
-40039: # 994 "../../src/BD_Shape_defs.hh"
-40039:   void refine_with_congruence(const Congruence& cg);
-40039: # 1007 "../../src/BD_Shape_defs.hh"
-40039:   void refine_with_constraints(const Constraint_System& cs);
-40039: # 1020 "../../src/BD_Shape_defs.hh"
-40039:   void refine_with_congruences(const Congruence_System& cgs);
-40039: # 1043 "../../src/BD_Shape_defs.hh"
-40039:   template <typename Interval_Info>
-40039:   void refine_with_linear_form_inequality(
-40039:                    const Linear_Form<Interval<T, Interval_Info> >& left,
-40039:                    const Linear_Form<Interval<T, Interval_Info> >& right);
-40039: # 1076 "../../src/BD_Shape_defs.hh"
-40039:   template <typename Interval_Info>
-40039:   void generalized_refine_with_linear_form_inequality(
-40039:                    const Linear_Form<Interval<T, Interval_Info> >& left,
-40039:                    const Linear_Form<Interval<T, Interval_Info> >& right,
-40039:                    Relation_Symbol relsym);
-40039: # 1112 "../../src/BD_Shape_defs.hh"
-40039:   template <typename U>
-40039:   void export_interval_constraints(U& dest) const;
-40039: # 1125 "../../src/BD_Shape_defs.hh"
-40039:   void unconstrain(Variable var);
-40039: # 1139 "../../src/BD_Shape_defs.hh"
-40039:   void unconstrain(const Variables_Set& vars);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void intersection_assign(const BD_Shape& y);
-40039: # 1155 "../../src/BD_Shape_defs.hh"
-40039:   void upper_bound_assign(const BD_Shape& y);
-40039: # 1165 "../../src/BD_Shape_defs.hh"
-40039:   bool upper_bound_assign_if_exact(const BD_Shape& y);
-40039: # 1181 "../../src/BD_Shape_defs.hh"
-40039:   bool integer_upper_bound_assign_if_exact(const BD_Shape& y);
-40039: # 1190 "../../src/BD_Shape_defs.hh"
-40039:   void difference_assign(const BD_Shape& y);
-40039: # 1201 "../../src/BD_Shape_defs.hh"
-40039:   bool simplify_using_context_assign(const BD_Shape& y);
-40039: # 1222 "../../src/BD_Shape_defs.hh"
-40039:   void affine_image(Variable var,
-40039:                     const Linear_Expression& expr,
-40039:                     Coefficient_traits::const_reference denominator
-40039:                     = Coefficient_one());
-40039: # 1244 "../../src/BD_Shape_defs.hh"
-40039:   template <typename Interval_Info>
-40039:   void affine_form_image(Variable var,
-40039:                         const Linear_Form<Interval<T, Interval_Info> >& lf);
-40039: # 1267 "../../src/BD_Shape_defs.hh"
-40039:   void affine_preimage(Variable var,
-40039:                        const Linear_Expression& expr,
-40039:                        Coefficient_traits::const_reference denominator
-40039:                        = Coefficient_one());
-40039: # 1296 "../../src/BD_Shape_defs.hh"
-40039:   void generalized_affine_image(Variable var,
-40039:                                 Relation_Symbol relsym,
-40039:                                 const Linear_Expression& expr,
-40039:                                 Coefficient_traits::const_reference denominator
-40039:                                 = Coefficient_one());
-40039: # 1321 "../../src/BD_Shape_defs.hh"
-40039:   void generalized_affine_image(const Linear_Expression& lhs,
-40039:                                 Relation_Symbol relsym,
-40039:                                 const Linear_Expression& rhs);
-40039: # 1349 "../../src/BD_Shape_defs.hh"
-40039:   void generalized_affine_preimage(Variable var,
-40039:                                    Relation_Symbol relsym,
-40039:                                    const Linear_Expression& expr,
-40039:                                    Coefficient_traits::const_reference
-40039:                                    denominator = Coefficient_one());
-40039: # 1374 "../../src/BD_Shape_defs.hh"
-40039:   void generalized_affine_preimage(const Linear_Expression& lhs,
-40039:                                    Relation_Symbol relsym,
-40039:                                    const Linear_Expression& rhs);
-40039: # 1404 "../../src/BD_Shape_defs.hh"
-40039:   void bounded_affine_image(Variable var,
-40039:                             const Linear_Expression& lb_expr,
-40039:                             const Linear_Expression& ub_expr,
-40039:                             Coefficient_traits::const_reference denominator
-40039:                             = Coefficient_one());
-40039: # 1436 "../../src/BD_Shape_defs.hh"
-40039:   void bounded_affine_preimage(Variable var,
-40039:                                const Linear_Expression& lb_expr,
-40039:                                const Linear_Expression& ub_expr,
-40039:                                Coefficient_traits::const_reference denominator
-40039:                                = Coefficient_one());
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void time_elapse_assign(const BD_Shape& y);
-40039: # 1496 "../../src/BD_Shape_defs.hh"
-40039:   void wrap_assign(const Variables_Set& vars,
-40039:                    Bounded_Integer_Type_Width w,
-40039:                    Bounded_Integer_Type_Representation r,
-40039:                    Bounded_Integer_Type_Overflow o,
-40039:                    const Constraint_System* cs_p = 0,
-40039:                    unsigned complexity_threshold = 16,
-40039:                    bool wrap_individually = true);
-40039: # 1515 "../../src/BD_Shape_defs.hh"
-40039:   void drop_some_non_integer_points(Complexity_Class complexity
-40039:                                     = ANY_COMPLEXITY);
-40039: # 1533 "../../src/BD_Shape_defs.hh"
-40039:   void drop_some_non_integer_points(const Variables_Set& vars,
-40039:                                     Complexity_Class complexity
-40039:                                     = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039:   void topological_closure_assign();
-40039: # 1555 "../../src/BD_Shape_defs.hh"
-40039:   void CC76_extrapolation_assign(const BD_Shape& y, unsigned* tp = 0);
-40039: # 1578 "../../src/BD_Shape_defs.hh"
-40039:   template <typename Iterator>
-40039:   void CC76_extrapolation_assign(const BD_Shape& y,
-40039:                                  Iterator first, Iterator last,
-40039:                                  unsigned* tp = 0);
-40039: # 1598 "../../src/BD_Shape_defs.hh"
-40039:   void BHMZ05_widening_assign(const BD_Shape& y, unsigned* tp = 0);
-40039: # 1620 "../../src/BD_Shape_defs.hh"
-40039:   void limited_BHMZ05_extrapolation_assign(const BD_Shape& y,
-40039:                                            const Constraint_System& cs,
-40039:                                            unsigned* tp = 0);
-40039: # 1643 "../../src/BD_Shape_defs.hh"
-40039:   void CC76_narrowing_assign(const BD_Shape& y);
-40039: # 1665 "../../src/BD_Shape_defs.hh"
-40039:   void limited_CC76_extrapolation_assign(const BD_Shape& y,
-40039:                                          const Constraint_System& cs,
-40039:                                          unsigned* tp = 0);
-40039: # 1684 "../../src/BD_Shape_defs.hh"
-40039:   void H79_widening_assign(const BD_Shape& y, unsigned* tp = 0);
-40039: 
-40039: 
-40039:   void widening_assign(const BD_Shape& y, unsigned* tp = 0);
-40039: # 1708 "../../src/BD_Shape_defs.hh"
-40039:   void limited_H79_extrapolation_assign(const BD_Shape& y,
-40039:                                         const Constraint_System& cs,
-40039:                                         unsigned* tp = 0);
-40039: # 1735 "../../src/BD_Shape_defs.hh"
-40039:   void add_space_dimensions_and_embed(dimension_type m);
-40039: # 1758 "../../src/BD_Shape_defs.hh"
-40039:   void add_space_dimensions_and_project(dimension_type m);
-40039: # 1768 "../../src/BD_Shape_defs.hh"
-40039:   void concatenate_assign(const BD_Shape& y);
-40039: # 1779 "../../src/BD_Shape_defs.hh"
-40039:   void remove_space_dimensions(const Variables_Set& vars);
-40039: # 1789 "../../src/BD_Shape_defs.hh"
-40039:   void remove_higher_space_dimensions(dimension_type new_dimension);
-40039: # 1828 "../../src/BD_Shape_defs.hh"
-40039:   template <typename Partial_Function>
-40039:   void map_space_dimensions(const Partial_Function& pfunc);
-40039: # 1852 "../../src/BD_Shape_defs.hh"
-40039:   void expand_space_dimension(Variable var, dimension_type m);
-40039: # 1877 "../../src/BD_Shape_defs.hh"
-40039:   void fold_space_dimensions(const Variables_Set& vars, Variable dest);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename Interval_Info>
-40039:   void refine_fp_interval_abstract_store(Box<Interval<T, Interval_Info> >&
-40039:                                          store) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   int32_t hash_code() const;
-40039: 
-40039:   friend bool operator==<T>(const BD_Shape<T>& x, const BD_Shape<T>& y);
-40039: 
-40039:   template <typename Temp, typename To, typename U>
-40039:   friend bool Parma_Polyhedra_Library
-40039:   ::rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                 const BD_Shape<U>& x, const BD_Shape<U>& y,
-40039:                                 const Rounding_Dir dir,
-40039:                                 Temp& tmp0, Temp& tmp1, Temp& tmp2);
-40039:   template <typename Temp, typename To, typename U>
-40039:   friend bool Parma_Polyhedra_Library
-40039:   ::euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                               const BD_Shape<U>& x, const BD_Shape<U>& y,
-40039:                               const Rounding_Dir dir,
-40039:                               Temp& tmp0, Temp& tmp1, Temp& tmp2);
-40039:   template <typename Temp, typename To, typename U>
-40039:   friend bool Parma_Polyhedra_Library
-40039:   ::l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                const BD_Shape<U>& x, const BD_Shape<U>& y,
-40039:                                const Rounding_Dir dir,
-40039:                                Temp& tmp0, Temp& tmp1, Temp& tmp2);
-40039: 
-40039: private:
-40039:   template <typename U> friend class Parma_Polyhedra_Library::BD_Shape;
-40039:   template <typename Interval> friend class Parma_Polyhedra_Library::Box;
-40039: 
-40039: 
-40039:   DB_Matrix<N> dbm;
-40039: 
-40039: 
-40039: # 1 "../../src/BDS_Status_idefs.hh" 1
-40039: # 50 "../../src/BDS_Status_idefs.hh"
-40039: class Status {
-40039: public:
-40039: 
-40039:   Status();
-40039: 
-40039: 
-40039: 
-40039:   bool test_zero_dim_univ() const;
-40039:   void reset_zero_dim_univ();
-40039:   void set_zero_dim_univ();
-40039: 
-40039:   bool test_empty() const;
-40039:   void reset_empty();
-40039:   void set_empty();
-40039: 
-40039:   bool test_shortest_path_closed() const;
-40039:   void reset_shortest_path_closed();
-40039:   void set_shortest_path_closed();
-40039: 
-40039:   bool test_shortest_path_reduced() const;
-40039:   void reset_shortest_path_reduced();
-40039:   void set_shortest_path_reduced();
-40039: 
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: private:
-40039: 
-40039:   typedef unsigned int flags_t;
-40039: 
-40039: 
-40039: 
-40039:   static const flags_t ZERO_DIM_UNIV = 0U;
-40039:   static const flags_t EMPTY = 1U << 0;
-40039:   static const flags_t SHORTEST_PATH_CLOSED = 1U << 1;
-40039:   static const flags_t SHORTEST_PATH_REDUCED = 1U << 2;
-40039: 
-40039: 
-40039: 
-40039:   flags_t flags;
-40039: 
-40039: 
-40039:   Status(flags_t mask);
-40039: 
-40039: 
-40039:   bool test_all(flags_t mask) const;
-40039: 
-40039: 
-40039:   bool test_any(flags_t mask) const;
-40039: 
-40039: 
-40039:   void set(flags_t mask);
-40039: 
-40039: 
-40039:   void reset(flags_t mask);
-40039: };
-40039: # 1944 "../../src/BD_Shape_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039:   Status status;
-40039: 
-40039: 
-40039:   Bit_Matrix redundancy_dbm;
-40039: 
-40039: 
-40039:   bool marked_zero_dim_univ() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool marked_empty() const;
-40039: # 1970 "../../src/BD_Shape_defs.hh"
-40039:   bool marked_shortest_path_closed() const;
-40039: # 1979 "../../src/BD_Shape_defs.hh"
-40039:   bool marked_shortest_path_reduced() const;
-40039: 
-40039: 
-40039:   void set_empty();
-40039: 
-40039: 
-40039:   void set_zero_dim_univ();
-40039: 
-40039: 
-40039:   void set_shortest_path_closed();
-40039: 
-40039: 
-40039:   void set_shortest_path_reduced();
-40039: 
-40039: 
-40039:   void reset_shortest_path_closed();
-40039: 
-40039: 
-40039:   void reset_shortest_path_reduced();
-40039: 
-40039: 
-40039:   void shortest_path_closure_assign() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void shortest_path_reduction_assign() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_shortest_path_reduced() const;
-40039: # 2027 "../../src/BD_Shape_defs.hh"
-40039:   void incremental_shortest_path_closure_assign(Variable var) const;
-40039: # 2046 "../../src/BD_Shape_defs.hh"
-40039:   bool bounds(const Linear_Expression& expr, bool from_above) const;
-40039: # 2079 "../../src/BD_Shape_defs.hh"
-40039:   bool max_min(const Linear_Expression& expr,
-40039:                bool maximize,
-40039:                Coefficient& ext_n, Coefficient& ext_d, bool& included,
-40039:                Generator& g) const;
-40039: # 2110 "../../src/BD_Shape_defs.hh"
-40039:   bool max_min(const Linear_Expression& expr,
-40039:                bool maximize,
-40039:                Coefficient& ext_n, Coefficient& ext_d, bool& included) const;
-40039: # 2128 "../../src/BD_Shape_defs.hh"
-40039:   bool BFT00_upper_bound_assign_if_exact(const BD_Shape& y);
-40039: # 2146 "../../src/BD_Shape_defs.hh"
-40039:   template <bool integer_upper_bound>
-40039:   bool BHZ09_upper_bound_assign_if_exact(const BD_Shape& y);
-40039: # 2159 "../../src/BD_Shape_defs.hh"
-40039:   void refine_no_check(const Constraint& c);
-40039: # 2173 "../../src/BD_Shape_defs.hh"
-40039:   void refine_no_check(const Congruence& cg);
-40039: 
-40039: 
-40039:   void add_dbm_constraint(dimension_type i, dimension_type j, const N& k);
-40039: 
-40039: 
-40039:   void add_dbm_constraint(dimension_type i, dimension_type j,
-40039:                           Coefficient_traits::const_reference numer,
-40039:                           Coefficient_traits::const_reference denom);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void refine(Variable var, Relation_Symbol relsym,
-40039:               const Linear_Expression& expr,
-40039:               Coefficient_traits::const_reference denominator
-40039:               = Coefficient_one());
-40039: 
-40039: 
-40039:   void forget_all_dbm_constraints(dimension_type v);
-40039: 
-40039:   void forget_binary_dbm_constraints(dimension_type v);
-40039: # 2214 "../../src/BD_Shape_defs.hh"
-40039:   void deduce_v_minus_u_bounds(dimension_type v,
-40039:                                dimension_type last_v,
-40039:                                const Linear_Expression& sc_expr,
-40039:                                Coefficient_traits::const_reference sc_denom,
-40039:                                const N& ub_v);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename Interval_Info>
-40039:   void inhomogeneous_affine_form_image(const dimension_type& var_id,
-40039:                                        const Interval<T, Interval_Info>& b);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename Interval_Info>
-40039:   void
-40039:   one_variable_affine_form_image(const dimension_type& var_id,
-40039:                                  const Interval<T, Interval_Info>& b,
-40039:                                  const Interval<T, Interval_Info>& w_coeff,
-40039:                                  const dimension_type& w_id,
-40039:                                  const dimension_type& space_dim);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename Interval_Info>
-40039:   void
-40039:   two_variables_affine_form_image(const dimension_type& var_id,
-40039:                                   const Linear_Form<Interval<T,Interval_Info> >& lf,
-40039:                                   const dimension_type& space_dim);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename Interval_Info>
-40039:   void
-40039:   left_inhomogeneous_refine(const dimension_type& right_t,
-40039:                             const dimension_type& right_w_id,
-40039:                             const Linear_Form<Interval<T, Interval_Info> >& left,
-40039:                             const Linear_Form<Interval<T, Interval_Info> >& right);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename Interval_Info>
-40039:   void
-40039:   left_one_var_refine(const dimension_type& left_w_id,
-40039:                       const dimension_type& right_t,
-40039:                       const dimension_type& right_w_id,
-40039:                       const Linear_Form<Interval<T, Interval_Info> >& left,
-40039:                       const Linear_Form<Interval<T, Interval_Info> >& right);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename Interval_Info>
-40039:   void general_refine(const dimension_type& left_w_id,
-40039:                       const dimension_type& right_w_id,
-40039:                       const Linear_Form<Interval<T, Interval_Info> >& left,
-40039:                       const Linear_Form<Interval<T, Interval_Info> >& right);
-40039: 
-40039:   template <typename Interval_Info>
-40039:   void linear_form_upper_bound(const Linear_Form<Interval<T, Interval_Info> >&
-40039:                                lf,
-40039:                                N& result) const;
-40039: # 2304 "../../src/BD_Shape_defs.hh"
-40039:   void deduce_u_minus_v_bounds(dimension_type v,
-40039:                                dimension_type last_v,
-40039:                                const Linear_Expression& sc_expr,
-40039:                                Coefficient_traits::const_reference sc_denom,
-40039:                                const N& minus_lb_v);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void get_limiting_shape(const Constraint_System& cs,
-40039:                           BD_Shape& limiting_shape) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void compute_predecessors(std::vector<dimension_type>& predecessor) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void compute_leaders(std::vector<dimension_type>& leaders) const;
-40039: 
-40039:   void drop_some_non_integer_points_helper(N& elem);
-40039: 
-40039:   friend std::ostream&
-40039:   Parma_Polyhedra_Library::IO_Operators
-40039:   ::operator<<<>(std::ostream& s, const BD_Shape<T>& c);
-40039: 
-40039: 
-40039: 
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const BD_Shape& y) const;
-40039: 
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     dimension_type required_dim) const;
-40039: 
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const Constraint& c) const;
-40039: 
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const Congruence& cg) const;
-40039: 
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const Generator& g) const;
-40039: 
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* le_name,
-40039:                                     const Linear_Expression& le) const;
-40039: 
-40039:   template<typename Interval_Info>
-40039:   void
-40039:   throw_dimension_incompatible(const char* method,
-40039:                                const char* lf_name,
-40039:                                const Linear_Form<Interval<T, Interval_Info> >&
-40039:                                lf) const;
-40039: 
-40039:   static void throw_expression_too_complex(const char* method,
-40039:                                            const Linear_Expression& le);
-40039: 
-40039:   static void throw_invalid_argument(const char* method, const char* reason);
-40039: 
-40039: };
-40039: 
-40039: # 1 "../../src/BDS_Status_inlines.hh" 1
-40039: # 27 "../../src/BDS_Status_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: inline
-40039: BD_Shape<T>::Status::Status(flags_t mask)
-40039:   : flags(mask) {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: BD_Shape<T>::Status::Status()
-40039:   : flags(ZERO_DIM_UNIV) {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::Status::test_all(flags_t mask) const {
-40039:   return (flags & mask) == mask;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::Status::test_any(flags_t mask) const {
-40039:   return (flags & mask) != 0;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::Status::set(flags_t mask) {
-40039:   flags |= mask;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::Status::reset(flags_t mask) {
-40039:   flags &= ~mask;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::Status::test_zero_dim_univ() const {
-40039:   return flags == ZERO_DIM_UNIV;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::Status::reset_zero_dim_univ() {
-40039: 
-40039:   if (flags == ZERO_DIM_UNIV) {
-40039: 
-40039:     flags = EMPTY;
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::Status::set_zero_dim_univ() {
-40039: 
-40039:   flags = ZERO_DIM_UNIV;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::Status::test_empty() const {
-40039:   return test_any(EMPTY);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::Status::reset_empty() {
-40039:   reset(EMPTY);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::Status::set_empty() {
-40039:   flags = EMPTY;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::Status::test_shortest_path_closed() const {
-40039:   return test_any(SHORTEST_PATH_CLOSED);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::Status::reset_shortest_path_closed() {
-40039: 
-40039:   reset(SHORTEST_PATH_CLOSED | SHORTEST_PATH_REDUCED);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::Status::set_shortest_path_closed() {
-40039:   set(SHORTEST_PATH_CLOSED);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::Status::test_shortest_path_reduced() const {
-40039:   return test_any(SHORTEST_PATH_REDUCED);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::Status::reset_shortest_path_reduced() {
-40039:   reset(SHORTEST_PATH_REDUCED);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::Status::set_shortest_path_reduced() {
-40039:   ((void) 0);
-40039:   set(SHORTEST_PATH_REDUCED);
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: BD_Shape<T>::Status::OK() const {
-40039:   if (test_zero_dim_univ()) {
-40039: 
-40039:     return true;
-40039:   }
-40039: 
-40039:   if (test_empty()) {
-40039:     Status copy = *this;
-40039:     copy.reset_empty();
-40039:     if (copy.test_zero_dim_univ()) {
-40039:       return true;
-40039:     }
-40039:     else {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       return false;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   if (test_shortest_path_reduced()) {
-40039:     if (test_shortest_path_closed()) {
-40039:       return true;
-40039:     }
-40039:     else {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       return false;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   return true;
-40039: }
-40039: 
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: namespace BD_Shapes {
-40039: 
-40039: 
-40039: extern const char* zero_dim_univ;
-40039: extern const char* empty;
-40039: extern const char* sp_closed;
-40039: extern const char* sp_reduced;
-40039: const char yes = '+';
-40039: const char no = '-';
-40039: const char separator = ' ';
-40039: # 207 "../../src/BDS_Status_inlines.hh"
-40039: inline bool
-40039: get_field(std::istream& s, const char* keyword, bool& positive) {
-40039:   std::string str;
-40039:   if (!(s >> str)
-40039:       || (str[0] != yes && str[0] != no)
-40039:       || str.substr(1) != keyword) {
-40039:     return false;
-40039:   }
-40039:   positive = (str[0] == yes);
-40039:   return true;
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::Status::ascii_dump(std::ostream& s) const {
-40039:   using namespace Implementation::BD_Shapes;
-40039:   s << (test_zero_dim_univ() ? yes : no) << zero_dim_univ << separator
-40039:     << (test_empty() ? yes : no) << empty << separator
-40039:     << separator
-40039:     << (test_shortest_path_closed() ? yes : no) << sp_closed << separator
-40039:     << (test_shortest_path_reduced() ? yes : no) << sp_reduced << separator;
-40039: }
-40039: 
-40039: template <typename T> void BD_Shape<T>::Status::ascii_dump() const { ascii_dump(std::cerr); } template <typename T> void BD_Shape<T>::Status::print() const { std::cerr << "No user level output operator defined " << "for " "BD_Shape<T>::Status" << "." << std::endl; }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: BD_Shape<T>::Status::ascii_load(std::istream& s) {
-40039:   using namespace Implementation::BD_Shapes;
-40039:   bool positive = Suppress_Uninitialized_Warnings_Type<bool>::synonym();
-40039: 
-40039:   if (!get_field(s, zero_dim_univ, positive)) {
-40039:     return false;
-40039:   }
-40039:   if (positive) {
-40039:     set_zero_dim_univ();
-40039:   }
-40039: 
-40039:   if (!get_field(s, empty, positive)) {
-40039:     return false;
-40039:   }
-40039:   if (positive) {
-40039:     set_empty();
-40039:   }
-40039: 
-40039:   if (!get_field(s, sp_closed, positive)) {
-40039:     return false;
-40039:   }
-40039:   if (positive) {
-40039:     set_shortest_path_closed();
-40039:   }
-40039:   else {
-40039:     reset_shortest_path_closed();
-40039:   }
-40039: 
-40039:   if (!get_field(s, sp_reduced, positive)) {
-40039:     return false;
-40039:   }
-40039:   if (positive) {
-40039:     set_shortest_path_reduced();
-40039:   }
-40039:   else {
-40039:     reset_shortest_path_reduced();
-40039:   }
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   return true;
-40039: }
-40039: 
-40039: }
-40039: # 2371 "../../src/BD_Shape_defs.hh" 2
-40039: # 1 "../../src/BD_Shape_inlines.hh" 1
-40039: # 29 "../../src/BD_Shape_inlines.hh"
-40039: # 1 "../../src/C_Polyhedron_defs.hh" 1
-40039: # 27 "../../src/C_Polyhedron_defs.hh"
-40039: # 1 "../../src/C_Polyhedron_types.hh" 1
-40039: # 16 "../../src/C_Polyhedron_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class C_Polyhedron;
-40039: 
-40039: }
-40039: # 28 "../../src/C_Polyhedron_defs.hh" 2
-40039: # 1 "../../src/NNC_Polyhedron_types.hh" 1
-40039: # 16 "../../src/NNC_Polyhedron_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class NNC_Polyhedron;
-40039: 
-40039: }
-40039: # 29 "../../src/C_Polyhedron_defs.hh" 2
-40039: # 59 "../../src/C_Polyhedron_defs.hh"
-40039: class Parma_Polyhedra_Library::C_Polyhedron : public Polyhedron {
-40039: public:
-40039: # 75 "../../src/C_Polyhedron_defs.hh"
-40039:   explicit C_Polyhedron(dimension_type num_dimensions = 0,
-40039:                         Degenerate_Element kind = UNIVERSE);
-40039: # 88 "../../src/C_Polyhedron_defs.hh"
-40039:   explicit C_Polyhedron(const Constraint_System& cs);
-40039: # 106 "../../src/C_Polyhedron_defs.hh"
-40039:   C_Polyhedron(Constraint_System& cs, Recycle_Input dummy);
-40039: # 119 "../../src/C_Polyhedron_defs.hh"
-40039:   explicit C_Polyhedron(const Generator_System& gs);
-40039: # 138 "../../src/C_Polyhedron_defs.hh"
-40039:   C_Polyhedron(Generator_System& gs, Recycle_Input dummy);
-40039: # 147 "../../src/C_Polyhedron_defs.hh"
-40039:   explicit C_Polyhedron(const Congruence_System& cgs);
-40039: # 163 "../../src/C_Polyhedron_defs.hh"
-40039:   C_Polyhedron(Congruence_System& cgs, Recycle_Input dummy);
-40039: # 175 "../../src/C_Polyhedron_defs.hh"
-40039:   explicit C_Polyhedron(const NNC_Polyhedron& y,
-40039:                         Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 194 "../../src/C_Polyhedron_defs.hh"
-40039:   template <typename Interval>
-40039:   explicit C_Polyhedron(const Box<Interval>& box,
-40039:                         Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 210 "../../src/C_Polyhedron_defs.hh"
-40039:   template <typename U>
-40039:   explicit C_Polyhedron(const BD_Shape<U>& bd,
-40039:                         Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 226 "../../src/C_Polyhedron_defs.hh"
-40039:   template <typename U>
-40039:   explicit C_Polyhedron(const Octagonal_Shape<U>& os,
-40039:                         Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 242 "../../src/C_Polyhedron_defs.hh"
-40039:   explicit C_Polyhedron(const Grid& grid,
-40039:                         Complexity_Class complexity = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   C_Polyhedron(const C_Polyhedron& y,
-40039:                Complexity_Class complexity = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   C_Polyhedron& operator=(const C_Polyhedron& y);
-40039: 
-40039: 
-40039:   C_Polyhedron& operator=(const NNC_Polyhedron& y);
-40039: 
-40039: 
-40039:   ~C_Polyhedron();
-40039: # 272 "../../src/C_Polyhedron_defs.hh"
-40039:   bool poly_hull_assign_if_exact(const C_Polyhedron& y);
-40039: 
-40039: 
-40039:   bool upper_bound_assign_if_exact(const C_Polyhedron& y);
-40039: # 286 "../../src/C_Polyhedron_defs.hh"
-40039:   void positive_time_elapse_assign(const Polyhedron& y);
-40039: };
-40039: 
-40039: # 1 "../../src/C_Polyhedron_inlines.hh" 1
-40039: # 30 "../../src/C_Polyhedron_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline
-40039: C_Polyhedron::~C_Polyhedron() {
-40039: }
-40039: 
-40039: inline
-40039: C_Polyhedron::C_Polyhedron(dimension_type num_dimensions,
-40039:                            Degenerate_Element kind)
-40039:   : Polyhedron(NECESSARILY_CLOSED,
-40039:                check_space_dimension_overflow(num_dimensions,
-40039:                                               NECESSARILY_CLOSED,
-40039:                                               "C_Polyhedron(n, k)",
-40039:                                               "n exceeds the maximum "
-40039:                                               "allowed space dimension"),
-40039:                kind) {
-40039: }
-40039: 
-40039: inline
-40039: C_Polyhedron::C_Polyhedron(const Constraint_System& cs)
-40039:   : Polyhedron(NECESSARILY_CLOSED,
-40039:                check_obj_space_dimension_overflow(cs, NECESSARILY_CLOSED,
-40039:                                                   "C_Polyhedron(cs)",
-40039:                                                   "the space dimension of cs "
-40039:                                                   "exceeds the maximum allowed "
-40039:                                                   "space dimension")) {
-40039: }
-40039: 
-40039: inline
-40039: C_Polyhedron::C_Polyhedron(Constraint_System& cs, Recycle_Input)
-40039:   : Polyhedron(NECESSARILY_CLOSED,
-40039:                check_obj_space_dimension_overflow(cs, NECESSARILY_CLOSED,
-40039:                                                   "C_Polyhedron(cs, recycle)",
-40039:                                                   "the space dimension of cs "
-40039:                                                   "exceeds the maximum allowed "
-40039:                                                   "space dimension"),
-40039:                Recycle_Input()) {
-40039: }
-40039: 
-40039: inline
-40039: C_Polyhedron::C_Polyhedron(const Generator_System& gs)
-40039:   : Polyhedron(NECESSARILY_CLOSED,
-40039:                check_obj_space_dimension_overflow(gs, NECESSARILY_CLOSED,
-40039:                                                   "C_Polyhedron(gs)",
-40039:                                                   "the space dimension of gs "
-40039:                                                   "exceeds the maximum allowed "
-40039:                                                   "space dimension")) {
-40039: }
-40039: 
-40039: inline
-40039: C_Polyhedron::C_Polyhedron(Generator_System& gs, Recycle_Input)
-40039:   : Polyhedron(NECESSARILY_CLOSED,
-40039:                check_obj_space_dimension_overflow(gs, NECESSARILY_CLOSED,
-40039:                                                   "C_Polyhedron(gs, recycle)",
-40039:                                                   "the space dimension of gs "
-40039:                                                   "exceeds the maximum allowed "
-40039:                                                   "space dimension"),
-40039:                Recycle_Input()) {
-40039: }
-40039: 
-40039: template <typename Interval>
-40039: inline
-40039: C_Polyhedron::C_Polyhedron(const Box<Interval>& box, Complexity_Class)
-40039:   : Polyhedron(NECESSARILY_CLOSED,
-40039:                check_obj_space_dimension_overflow(box, NECESSARILY_CLOSED,
-40039:                                                   "C_Polyhedron(box)",
-40039:                                                   "the space dimension of box "
-40039:                                                   "exceeds the maximum allowed "
-40039:                                                   "space dimension")) {
-40039: }
-40039: 
-40039: template <typename U>
-40039: inline
-40039: C_Polyhedron::C_Polyhedron(const BD_Shape<U>& bd, Complexity_Class)
-40039:   : Polyhedron(NECESSARILY_CLOSED,
-40039:                check_space_dimension_overflow(bd.space_dimension(),
-40039:                                               NECESSARILY_CLOSED,
-40039:                                               "C_Polyhedron(bd)",
-40039:                                               "the space dimension of bd "
-40039:                                               "exceeds the maximum allowed "
-40039:                                               "space dimension"),
-40039:                UNIVERSE) {
-40039:   add_constraints(bd.constraints());
-40039: }
-40039: 
-40039: template <typename U>
-40039: inline
-40039: C_Polyhedron::C_Polyhedron(const Octagonal_Shape<U>& os, Complexity_Class)
-40039:   : Polyhedron(NECESSARILY_CLOSED,
-40039:                check_space_dimension_overflow(os.space_dimension(),
-40039:                                               NECESSARILY_CLOSED,
-40039:                                               "C_Polyhedron(os)",
-40039:                                               "the space dimension of os "
-40039:                                               "exceeds the maximum allowed "
-40039:                                               "space dimension"),
-40039:                UNIVERSE) {
-40039:   add_constraints(os.constraints());
-40039: }
-40039: 
-40039: inline
-40039: C_Polyhedron::C_Polyhedron(const C_Polyhedron& y, Complexity_Class)
-40039:   : Polyhedron(y) {
-40039: }
-40039: 
-40039: inline C_Polyhedron&
-40039: C_Polyhedron::operator=(const C_Polyhedron& y) {
-40039:   Polyhedron::operator=(y);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline C_Polyhedron&
-40039: C_Polyhedron::operator=(const NNC_Polyhedron& y) {
-40039:   C_Polyhedron c_y(y);
-40039:   m_swap(c_y);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline bool
-40039: C_Polyhedron::upper_bound_assign_if_exact(const C_Polyhedron& y) {
-40039:   return poly_hull_assign_if_exact(y);
-40039: }
-40039: 
-40039: }
-40039: # 290 "../../src/C_Polyhedron_defs.hh" 2
-40039: # 30 "../../src/BD_Shape_inlines.hh" 2
-40039: 
-40039: # 1 "../../src/Octagonal_Shape_defs.hh" 1
-40039: # 36 "../../src/Octagonal_Shape_defs.hh"
-40039: # 1 "../../src/OR_Matrix_defs.hh" 1
-40039: # 27 "../../src/OR_Matrix_defs.hh"
-40039: # 1 "../../src/OR_Matrix_types.hh" 1
-40039: # 16 "../../src/OR_Matrix_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: class OR_Matrix;
-40039: 
-40039: }
-40039: # 28 "../../src/OR_Matrix_defs.hh" 2
-40039: # 50 "../../src/OR_Matrix_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: bool operator==(const OR_Matrix<T>& x, const OR_Matrix<T>& y);
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: std::ostream&
-40039: operator<<(std::ostream& s, const OR_Matrix<T>& m);
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 104 "../../src/OR_Matrix_defs.hh"
-40039: template <typename T>
-40039: class Parma_Polyhedra_Library::OR_Matrix {
-40039: private:
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename U>
-40039:   class Pseudo_Row {
-40039:   public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     template <typename V>
-40039:     Pseudo_Row(const Pseudo_Row<V>& y);
-40039: 
-40039: 
-40039:     ~Pseudo_Row();
-40039: 
-40039: 
-40039:     U& operator[](dimension_type k) const;
-40039: 
-40039: 
-40039:     Pseudo_Row();
-40039: 
-40039: 
-40039:     Pseudo_Row& operator=(const Pseudo_Row& y);
-40039: 
-40039: 
-40039:   private:
-40039: # 149 "../../src/OR_Matrix_defs.hh"
-40039:     explicit Pseudo_Row(U& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     U* first;
-40039: # 181 "../../src/OR_Matrix_defs.hh"
-40039:     template <typename V> friend class Pseudo_Row;
-40039:     template <typename V> friend class any_row_iterator;
-40039: 
-40039: 
-40039:     friend class OR_Matrix;
-40039:   };
-40039: 
-40039: public:
-40039: 
-40039:   typedef Pseudo_Row<T> row_reference_type;
-40039: 
-40039: 
-40039:   typedef Pseudo_Row<const T> const_row_reference_type;
-40039: 
-40039: private:
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename U>
-40039:   class any_row_iterator {
-40039:   public:
-40039:     typedef std::random_access_iterator_tag iterator_category;
-40039:     typedef Pseudo_Row<U> value_type;
-40039:     typedef long difference_type;
-40039:     typedef const Pseudo_Row<U>* pointer;
-40039:     typedef const Pseudo_Row<U>& reference;
-40039: 
-40039: 
-40039:     any_row_iterator(dimension_type n_rows);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     explicit any_row_iterator(U& base);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     template <typename V>
-40039:     any_row_iterator(const any_row_iterator<V>& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     template <typename V>
-40039:     any_row_iterator& operator=(const any_row_iterator<V>& y);
-40039: 
-40039: 
-40039:     reference operator*() const;
-40039: 
-40039: 
-40039:     pointer operator->() const;
-40039: 
-40039: 
-40039:     any_row_iterator& operator++();
-40039: 
-40039: 
-40039:     any_row_iterator operator++(int);
-40039: 
-40039: 
-40039:     any_row_iterator& operator--();
-40039: 
-40039: 
-40039:     any_row_iterator operator--(int);
-40039: 
-40039: 
-40039:     reference operator[](difference_type m) const;
-40039: 
-40039: 
-40039:     any_row_iterator& operator+=(difference_type m);
-40039: 
-40039: 
-40039:     template <typename Unsigned>
-40039:     typename Enable_If<(static_cast<Unsigned>(-1) > 0), any_row_iterator&>::type
-40039:     operator+=(Unsigned m);
-40039: 
-40039: 
-40039:     any_row_iterator& operator-=(difference_type m);
-40039: 
-40039: 
-40039:     difference_type operator-(const any_row_iterator& y) const;
-40039: 
-40039: 
-40039:     any_row_iterator operator+(difference_type m) const;
-40039: 
-40039: 
-40039:     template <typename Unsigned>
-40039:     typename Enable_If<(static_cast<Unsigned>(-1) > 0), any_row_iterator>::type
-40039:     operator+(Unsigned m) const;
-40039: 
-40039: 
-40039:     any_row_iterator operator-(difference_type m) const;
-40039: 
-40039: 
-40039:     bool operator==(const any_row_iterator& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     bool operator!=(const any_row_iterator& y) const;
-40039: 
-40039: 
-40039:     bool operator<(const any_row_iterator& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     bool operator<=(const any_row_iterator& y) const;
-40039: 
-40039: 
-40039:     bool operator>(const any_row_iterator& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     bool operator>=(const any_row_iterator& y) const;
-40039: 
-40039:     dimension_type row_size() const;
-40039: 
-40039:     dimension_type index() const;
-40039: 
-40039:   private:
-40039: 
-40039:     Pseudo_Row<U> value;
-40039: 
-40039: 
-40039:     dimension_type e;
-40039: 
-40039: 
-40039:     dimension_type i;
-40039: # 326 "../../src/OR_Matrix_defs.hh"
-40039:     template <typename V> friend class any_row_iterator;
-40039: 
-40039:   };
-40039: 
-40039: public:
-40039: 
-40039:   typedef any_row_iterator<T> row_iterator;
-40039: 
-40039: 
-40039:   typedef any_row_iterator<const T> const_row_iterator;
-40039: 
-40039: 
-40039:   typedef typename DB_Row<T>::iterator element_iterator;
-40039: 
-40039: 
-40039:   typedef typename DB_Row<T>::const_iterator const_element_iterator;
-40039: 
-40039: public:
-40039: 
-40039:   static dimension_type max_num_rows();
-40039: # 355 "../../src/OR_Matrix_defs.hh"
-40039:   OR_Matrix(dimension_type num_dimensions);
-40039: 
-40039: 
-40039:   OR_Matrix(const OR_Matrix& y);
-40039: 
-40039: 
-40039:   template <typename U>
-40039:   explicit OR_Matrix(const OR_Matrix<U>& y);
-40039: 
-40039: 
-40039:   ~OR_Matrix();
-40039: 
-40039: 
-40039:   OR_Matrix& operator=(const OR_Matrix& y);
-40039: 
-40039: private:
-40039:   template <typename U> friend class OR_Matrix;
-40039: # 381 "../../src/OR_Matrix_defs.hh"
-40039:   DB_Row<T> vec;
-40039: 
-40039: 
-40039:   dimension_type space_dim;
-40039: 
-40039: 
-40039:   dimension_type vec_capacity;
-40039: 
-40039: 
-40039:   OR_Matrix();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static dimension_type row_first_element_index(dimension_type k);
-40039: 
-40039: public:
-40039: 
-40039:   static dimension_type row_size(dimension_type k);
-40039: 
-40039: 
-40039:   void m_swap(OR_Matrix& y);
-40039: # 417 "../../src/OR_Matrix_defs.hh"
-40039:   void grow(dimension_type new_dim);
-40039: # 427 "../../src/OR_Matrix_defs.hh"
-40039:   void shrink(dimension_type new_dim);
-40039: # 441 "../../src/OR_Matrix_defs.hh"
-40039:   void resize_no_copy(dimension_type new_dim);
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039:   dimension_type num_rows() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   row_reference_type operator[](dimension_type k);
-40039: 
-40039: 
-40039:   const_row_reference_type operator[](dimension_type k) const;
-40039: # 464 "../../src/OR_Matrix_defs.hh"
-40039:   row_iterator row_begin();
-40039: 
-40039: 
-40039:   row_iterator row_end();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const_row_iterator row_begin() const;
-40039: 
-40039: 
-40039:   const_row_iterator row_end() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   element_iterator element_begin();
-40039: 
-40039: 
-40039:   element_iterator element_end();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const_element_iterator element_begin() const;
-40039: 
-40039: 
-40039:   const_element_iterator element_end() const;
-40039: 
-40039: 
-40039:   void clear();
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039:   friend bool operator==<T>(const OR_Matrix<T>& x, const OR_Matrix<T>& y);
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: };
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: void swap(OR_Matrix<T>& x, OR_Matrix<T>& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: bool operator!=(const OR_Matrix<T>& x, const OR_Matrix<T>& y);
-40039: # 552 "../../src/OR_Matrix_defs.hh"
-40039: template <typename Temp, typename To, typename T>
-40039: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                  const OR_Matrix<T>& x,
-40039:                                  const OR_Matrix<T>& y,
-40039:                                  Rounding_Dir dir,
-40039:                                  Temp& tmp0,
-40039:                                  Temp& tmp1,
-40039:                                  Temp& tmp2);
-40039: # 574 "../../src/OR_Matrix_defs.hh"
-40039: template <typename Temp, typename To, typename T>
-40039: bool euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                const OR_Matrix<T>& x,
-40039:                                const OR_Matrix<T>& y,
-40039:                                Rounding_Dir dir,
-40039:                                Temp& tmp0,
-40039:                                Temp& tmp1,
-40039:                                Temp& tmp2);
-40039: # 596 "../../src/OR_Matrix_defs.hh"
-40039: template <typename Temp, typename To, typename T>
-40039: bool l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                  const OR_Matrix<T>& x,
-40039:                                  const OR_Matrix<T>& y,
-40039:                                  Rounding_Dir dir,
-40039:                                  Temp& tmp0,
-40039:                                  Temp& tmp1,
-40039:                                  Temp& tmp2);
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/OR_Matrix_inlines.hh" 1
-40039: # 35 "../../src/OR_Matrix_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: OR_Matrix<T>::row_first_element_index(const dimension_type k) {
-40039:   return ((k + 1)*(k + 1))/2;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: OR_Matrix<T>::row_size(const dimension_type k) {
-40039:   return k + 2 - k % 2;
-40039: }
-40039: # 60 "../../src/OR_Matrix_inlines.hh"
-40039: template <typename T>
-40039: template <typename U>
-40039: inline
-40039: OR_Matrix<T>::Pseudo_Row<U>::Pseudo_Row()
-40039:   : first(0)
-40039: 
-40039: 
-40039: 
-40039: {
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline
-40039: OR_Matrix<T>::Pseudo_Row<U>::Pseudo_Row(U& y
-40039: 
-40039: 
-40039: 
-40039:                 )
-40039:   : first(&y)
-40039: 
-40039: 
-40039: 
-40039: {
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: template <typename V>
-40039: inline
-40039: OR_Matrix<T>::Pseudo_Row<U>::Pseudo_Row(const Pseudo_Row<V>& y)
-40039:   : first(y.first)
-40039: 
-40039: 
-40039: 
-40039: {
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline OR_Matrix<T>::Pseudo_Row<U>&
-40039: OR_Matrix<T>::Pseudo_Row<U>::operator=(const Pseudo_Row& y) {
-40039:   first = y.first;
-40039: 
-40039: 
-40039: 
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline
-40039: OR_Matrix<T>::Pseudo_Row<U>::~Pseudo_Row() {
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline U&
-40039: OR_Matrix<T>::Pseudo_Row<U>::operator[](const dimension_type k) const {
-40039: 
-40039: 
-40039: 
-40039:   return *(first + k);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline
-40039: OR_Matrix<T>::any_row_iterator<U>
-40039: ::any_row_iterator(const dimension_type n_rows)
-40039:   : value(),
-40039:     e(n_rows)
-40039: 
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline
-40039: OR_Matrix<T>::any_row_iterator<U>::any_row_iterator(U& base)
-40039:   : value(base
-40039: 
-40039: 
-40039: 
-40039:            ),
-40039:      e(0),
-40039:      i(0) {
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: template <typename V>
-40039: inline
-40039: OR_Matrix<T>::any_row_iterator<U>
-40039: ::any_row_iterator(const any_row_iterator<V>& y)
-40039:   : value(y.value),
-40039:     e(y.e),
-40039:     i(y.i) {
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: template <typename V>
-40039: inline typename OR_Matrix<T>::template any_row_iterator<U>&
-40039: OR_Matrix<T>::any_row_iterator<U>::operator=(const any_row_iterator<V>& y) {
-40039:   value = y.value;
-40039:   e = y.e;
-40039:   i = y.i;
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline typename OR_Matrix<T>::template any_row_iterator<U>::reference
-40039: OR_Matrix<T>::any_row_iterator<U>::operator*() const {
-40039:   return value;
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline typename OR_Matrix<T>::template any_row_iterator<U>::pointer
-40039: OR_Matrix<T>::any_row_iterator<U>::operator->() const {
-40039:   return &value;
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline typename OR_Matrix<T>::template any_row_iterator<U>&
-40039: OR_Matrix<T>::any_row_iterator<U>::operator++() {
-40039:   ++e;
-40039:   dimension_type increment = e;
-40039:   if (e % 2 != 0) {
-40039:     ++increment;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   i += increment;
-40039:   value.first += increment;
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline typename OR_Matrix<T>::template any_row_iterator<U>
-40039: OR_Matrix<T>::any_row_iterator<U>::operator++(int) {
-40039:   any_row_iterator old = *this;
-40039:   ++(*this);
-40039:   return old;
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline typename OR_Matrix<T>::template any_row_iterator<U>&
-40039: OR_Matrix<T>::any_row_iterator<U>::operator--() {
-40039:   dimension_type decrement = e + 1;
-40039:   --e;
-40039:   if (e % 2 != 0) {
-40039:     ++decrement;
-40039: 
-40039: 
-40039: 
-40039:   }
-40039:   i -= decrement;
-40039:   value.first -= decrement;
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline typename OR_Matrix<T>::template any_row_iterator<U>
-40039: OR_Matrix<T>::any_row_iterator<U>::operator--(int) {
-40039:   any_row_iterator old = *this;
-40039:   --(*this);
-40039:   return old;
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline typename OR_Matrix<T>::template any_row_iterator<U>&
-40039: OR_Matrix<T>::any_row_iterator<U>::operator+=(const difference_type m) {
-40039:   difference_type e_dt = static_cast<difference_type>(e);
-40039:   difference_type i_dt = static_cast<difference_type>(i);
-40039:   difference_type increment = m + (m * m) / 2 + m * e_dt;
-40039:   if (e_dt % 2 == 0 && m % 2 != 0) {
-40039:     ++increment;
-40039:   }
-40039:   e_dt += m;
-40039:   i_dt += increment;
-40039:   e = static_cast<dimension_type>(e_dt);
-40039:   i = static_cast<dimension_type>(i_dt);
-40039:   value.first += increment;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: template <typename Unsigned>
-40039: inline typename
-40039: Enable_If<(static_cast<Unsigned>(-1) > 0),
-40039:             typename OR_Matrix<T>::template any_row_iterator<U>& >::type
-40039: OR_Matrix<T>::any_row_iterator<U>::operator+=(Unsigned m) {
-40039:   dimension_type n = m;
-40039:   dimension_type increment = n + (n*n)/2 + n*e;
-40039:   if (e % 2 == 0 && n % 2 != 0) {
-40039:     ++increment;
-40039:   }
-40039:   e += n;
-40039:   i += increment;
-40039:   value.first += increment;
-40039: 
-40039: 
-40039: 
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline typename OR_Matrix<T>::template any_row_iterator<U>&
-40039: OR_Matrix<T>::any_row_iterator<U>::operator-=(difference_type m) {
-40039:   return *this += -m;
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline typename OR_Matrix<T>::template any_row_iterator<U>::difference_type
-40039: OR_Matrix<T>::any_row_iterator<U>::operator-(const any_row_iterator& y) const {
-40039:   return e - y.e;
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline typename OR_Matrix<T>::template any_row_iterator<U>
-40039: OR_Matrix<T>::any_row_iterator<U>::operator+(difference_type m) const {
-40039:   any_row_iterator r = *this;
-40039:   r += m;
-40039:   return r;
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: template <typename Unsigned>
-40039: inline typename
-40039: Enable_If<(static_cast<Unsigned>(-1) > 0),
-40039:             typename OR_Matrix<T>::template any_row_iterator<U> >::type
-40039: OR_Matrix<T>::any_row_iterator<U>::operator+(Unsigned m) const {
-40039:   any_row_iterator r = *this;
-40039:   r += m;
-40039:   return r;
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline typename OR_Matrix<T>::template any_row_iterator<U>
-40039: OR_Matrix<T>::any_row_iterator<U>::operator-(const difference_type m) const {
-40039:   any_row_iterator r = *this;
-40039:   r -= m;
-40039:   return r;
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline bool
-40039: OR_Matrix<T>::any_row_iterator<U>
-40039: ::operator==(const any_row_iterator& y) const {
-40039:   return e == y.e;
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline bool
-40039: OR_Matrix<T>::any_row_iterator<U>
-40039: ::operator!=(const any_row_iterator& y) const {
-40039:   return e != y.e;
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline bool
-40039: OR_Matrix<T>::any_row_iterator<U>::operator<(const any_row_iterator& y) const {
-40039:   return e < y.e;
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline bool
-40039: OR_Matrix<T>::any_row_iterator<U>
-40039: ::operator<=(const any_row_iterator& y) const {
-40039:   return e <= y.e;
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline bool
-40039: OR_Matrix<T>::any_row_iterator<U>::operator>(const any_row_iterator& y) const {
-40039:   return e > y.e;
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline bool
-40039: OR_Matrix<T>::any_row_iterator<U>
-40039: ::operator>=(const any_row_iterator& y) const {
-40039:   return e >= y.e;
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline dimension_type
-40039: OR_Matrix<T>::any_row_iterator<U>::row_size() const {
-40039:   return OR_Matrix::row_size(e);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline dimension_type
-40039: OR_Matrix<T>::any_row_iterator<U>::index() const {
-40039:   return e;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename OR_Matrix<T>::row_iterator
-40039: OR_Matrix<T>::row_begin() {
-40039:   return num_rows() == 0 ? row_iterator(0) : row_iterator(vec[0]);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename OR_Matrix<T>::row_iterator
-40039: OR_Matrix<T>::row_end() {
-40039:   return row_iterator(num_rows());
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename OR_Matrix<T>::const_row_iterator
-40039: OR_Matrix<T>::row_begin() const {
-40039:   return num_rows() == 0 ? const_row_iterator(0) : const_row_iterator(vec[0]);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename OR_Matrix<T>::const_row_iterator
-40039: OR_Matrix<T>::row_end() const {
-40039:   return const_row_iterator(num_rows());
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename OR_Matrix<T>::element_iterator
-40039: OR_Matrix<T>::element_begin() {
-40039:   return vec.begin();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename OR_Matrix<T>::element_iterator
-40039: OR_Matrix<T>::element_end() {
-40039:   return vec.end();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename OR_Matrix<T>::const_element_iterator
-40039: OR_Matrix<T>::element_begin() const {
-40039:   return vec.begin();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename OR_Matrix<T>::const_element_iterator
-40039: OR_Matrix<T>::element_end() const {
-40039:   return vec.end();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: OR_Matrix<T>::m_swap(OR_Matrix& y) {
-40039:   using std::swap;
-40039:   swap(vec, y.vec);
-40039:   swap(space_dim, y.space_dim);
-40039:   swap(vec_capacity, y.vec_capacity);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: inline dimension_type
-40039: isqrt(dimension_type x) {
-40039:   dimension_type r = 0;
-40039:   const dimension_type FIRST_BIT_MASK = 0x40000000U;
-40039:   for (dimension_type t = FIRST_BIT_MASK; t != 0; t >>= 2) {
-40039:     const dimension_type s = r + t;
-40039:     if (s <= x) {
-40039:       x -= s;
-40039:       r = s + t;
-40039:     }
-40039:     r >>= 1;
-40039:   }
-40039:   return r;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: OR_Matrix<T>::max_num_rows() {
-40039: 
-40039: 
-40039:   const dimension_type k = isqrt(2*DB_Row<T>::max_size() + 1);
-40039:   return (k - 1) - (k - 1) % 2;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline memory_size_type
-40039: OR_Matrix<T>::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: OR_Matrix<T>::OR_Matrix(const dimension_type num_dimensions)
-40039:   : vec(2*num_dimensions*(num_dimensions + 1)),
-40039:     space_dim(num_dimensions),
-40039:     vec_capacity(vec.size()) {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: OR_Matrix<T>::~OR_Matrix() {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename OR_Matrix<T>::row_reference_type
-40039: OR_Matrix<T>::operator[](dimension_type k) {
-40039:   return row_reference_type(vec[row_first_element_index(k)]
-40039: 
-40039: 
-40039: 
-40039:                             );
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename OR_Matrix<T>::const_row_reference_type
-40039: OR_Matrix<T>::operator[](dimension_type k) const {
-40039:   return const_row_reference_type(vec[row_first_element_index(k)]
-40039: 
-40039: 
-40039: 
-40039:                                   );
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: OR_Matrix<T>::space_dimension() const {
-40039:   return space_dim;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: OR_Matrix<T>::num_rows() const {
-40039:   return 2*space_dimension();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: OR_Matrix<T>::clear() {
-40039:   OR_Matrix<T>(0).m_swap(*this);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: operator==(const OR_Matrix<T>& x, const OR_Matrix<T>& y) {
-40039:   return x.space_dim == y.space_dim && x.vec == y.vec;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: operator!=(const OR_Matrix<T>& x, const OR_Matrix<T>& y) {
-40039:   return !(x == y);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: OR_Matrix<T>::OR_Matrix(const OR_Matrix& y)
-40039:   : vec(y.vec),
-40039:     space_dim(y.space_dim),
-40039:     vec_capacity(compute_capacity(y.vec.size(),
-40039:                                   DB_Row<T>::max_size())) {
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline
-40039: OR_Matrix<T>::OR_Matrix(const OR_Matrix<U>& y)
-40039:   : vec(),
-40039:     space_dim(y.space_dim),
-40039:     vec_capacity(compute_capacity(y.vec.size(),
-40039:                                   DB_Row<T>::max_size())) {
-40039:   vec.construct_upward_approximation(y.vec, vec_capacity);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline OR_Matrix<T>&
-40039: OR_Matrix<T>::operator=(const OR_Matrix& y) {
-40039:   vec = y.vec;
-40039:   space_dim = y.space_dim;
-40039:   vec_capacity = compute_capacity(y.vec.size(), DB_Row<T>::max_size());
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: OR_Matrix<T>::grow(const dimension_type new_dim) {
-40039:   ((void) 0);
-40039:   if (new_dim > space_dim) {
-40039:     const dimension_type new_size = 2*new_dim*(new_dim + 1);
-40039:     if (new_size <= vec_capacity) {
-40039: 
-40039:       vec.expand_within_capacity(new_size);
-40039:       space_dim = new_dim;
-40039:     }
-40039:     else {
-40039: 
-40039:       OR_Matrix<T> new_matrix(new_dim);
-40039:       element_iterator j = new_matrix.element_begin();
-40039:       for (element_iterator i = element_begin(),
-40039:              mend = element_end(); i != mend; ++i, ++j) {
-40039:         assign_or_swap(*j, *i);
-40039:       }
-40039:       m_swap(new_matrix);
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: OR_Matrix<T>::shrink(const dimension_type new_dim) {
-40039:   ((void) 0);
-40039:   const dimension_type new_size = 2*new_dim*(new_dim + 1);
-40039:   vec.shrink(new_size);
-40039:   space_dim = new_dim;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: OR_Matrix<T>::resize_no_copy(const dimension_type new_dim) {
-40039:   if (new_dim > space_dim) {
-40039:     const dimension_type new_size = 2*new_dim*(new_dim + 1);
-40039:     if (new_size <= vec_capacity) {
-40039: 
-40039:       vec.expand_within_capacity(new_size);
-40039:       space_dim = new_dim;
-40039:     }
-40039:     else {
-40039: 
-40039:       OR_Matrix<T> new_matrix(new_dim);
-40039:       m_swap(new_matrix);
-40039:     }
-40039:   }
-40039:   else if (new_dim < space_dim) {
-40039:     shrink(new_dim);
-40039:   }
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Specialization, typename Temp, typename To, typename T>
-40039: inline bool
-40039: l_m_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                     const OR_Matrix<T>& x,
-40039:                     const OR_Matrix<T>& y,
-40039:                     const Rounding_Dir dir,
-40039:                     Temp& tmp0,
-40039:                     Temp& tmp1,
-40039:                     Temp& tmp2) {
-40039:   if (x.num_rows() != y.num_rows()) {
-40039:     return false;
-40039:   }
-40039:   assign_r(tmp0, 0, ROUND_NOT_NEEDED);
-40039:   for (typename OR_Matrix<T>::const_element_iterator
-40039:          i = x.element_begin(), j = y.element_begin(),
-40039:          mat_end = x.element_end(); i != mat_end; ++i, ++j) {
-40039:     const T& x_i = *i;
-40039:     const T& y_i = *j;
-40039:     if (is_plus_infinity(x_i)) {
-40039:       if (is_plus_infinity(y_i)) {
-40039:         continue;
-40039:       }
-40039:       else {
-40039:       pinf:
-40039:         assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:         return true;
-40039:       }
-40039:     }
-40039:     else if (is_plus_infinity(y_i)) {
-40039:       goto pinf;
-40039:     }
-40039:     const Temp* tmp1p;
-40039:     const Temp* tmp2p;
-40039:     if (x_i > y_i) {
-40039:       maybe_assign(tmp1p, tmp1, x_i, dir);
-40039:       maybe_assign(tmp2p, tmp2, y_i, inverse(dir));
-40039:     }
-40039:     else {
-40039:       maybe_assign(tmp1p, tmp1, y_i, dir);
-40039:       maybe_assign(tmp2p, tmp2, x_i, inverse(dir));
-40039:     }
-40039:     sub_assign_r(tmp1, *tmp1p, *tmp2p, dir);
-40039:     ((void) 0);
-40039:     Specialization::combine(tmp0, tmp1, dir);
-40039:   }
-40039: 
-40039:   Specialization::finalize(tmp0, dir);
-40039:   assign_r(r, tmp0, dir);
-40039:   return true;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename T>
-40039: inline bool
-40039: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                             const OR_Matrix<T>& x,
-40039:                             const OR_Matrix<T>& y,
-40039:                             const Rounding_Dir dir,
-40039:                             Temp& tmp0,
-40039:                             Temp& tmp1,
-40039:                             Temp& tmp2) {
-40039:   return
-40039:     l_m_distance_assign<Rectilinear_Distance_Specialization<Temp> >(r, x, y,
-40039:                                                                     dir,
-40039:                                                                     tmp0,
-40039:                                                                     tmp1,
-40039:                                                                     tmp2);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename T>
-40039: inline bool
-40039: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                           const OR_Matrix<T>& x,
-40039:                           const OR_Matrix<T>& y,
-40039:                           const Rounding_Dir dir,
-40039:                           Temp& tmp0,
-40039:                           Temp& tmp1,
-40039:                           Temp& tmp2) {
-40039:   return
-40039:     l_m_distance_assign<Euclidean_Distance_Specialization<Temp> >(r, x, y,
-40039:                                                                   dir,
-40039:                                                                   tmp0,
-40039:                                                                   tmp1,
-40039:                                                                   tmp2);
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename T>
-40039: inline bool
-40039: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                            const OR_Matrix<T>& x,
-40039:                            const OR_Matrix<T>& y,
-40039:                            const Rounding_Dir dir,
-40039:                            Temp& tmp0,
-40039:                            Temp& tmp1,
-40039:                            Temp& tmp2) {
-40039:   return
-40039:     l_m_distance_assign<L_Infinity_Distance_Specialization<Temp> >(r, x, y,
-40039:                                                                    dir,
-40039:                                                                    tmp0,
-40039:                                                                    tmp1,
-40039:                                                                    tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: swap(OR_Matrix<T>& x, OR_Matrix<T>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 608 "../../src/OR_Matrix_defs.hh" 2
-40039: # 1 "../../src/OR_Matrix_templates.hh" 1
-40039: # 29 "../../src/OR_Matrix_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: memory_size_type
-40039: OR_Matrix<T>::external_memory_in_bytes() const{
-40039:   return vec.external_memory_in_bytes();
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: OR_Matrix<T>::OK() const {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type dim = space_dimension();
-40039:   if (vec.size() != 2*dim*(dim + 1)) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039:   if (!vec.OK(vec.size(), vec_capacity)) {
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: OR_Matrix<T>::ascii_dump(std::ostream& s) const {
-40039:   const OR_Matrix<T>& x = *this;
-40039:   const char separator = ' ';
-40039:   dimension_type space = x.space_dimension();
-40039:   s << space << separator << "\n";
-40039:   for (const_row_iterator i = x.row_begin(),
-40039:          x_row_end = x.row_end(); i != x_row_end; ++i) {
-40039:     const_row_reference_type r = *i;
-40039:     dimension_type rs = i.row_size();
-40039:     for (dimension_type j = 0; j < rs; ++j) {
-40039:       using namespace IO_Operators;
-40039:       s << r[j] << separator;
-40039:     }
-40039:     s << "\n";
-40039:   }
-40039: }
-40039: 
-40039: template <typename T> void OR_Matrix<T>::ascii_dump() const { ascii_dump(std::cerr); } template <typename T> void OR_Matrix<T>::print() const { using IO_Operators::operator<<; std::cerr << *this; }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: OR_Matrix<T>::ascii_load(std::istream& s) {
-40039:   dimension_type space;
-40039:   if (!(s >> space)) {
-40039:     return false;
-40039:   }
-40039:   resize_no_copy(space);
-40039:   for (row_iterator i = row_begin(),
-40039:          this_row_end = row_end(); i != this_row_end; ++i) {
-40039:     row_reference_type r_i = *i;
-40039:     const dimension_type rs = i.row_size();
-40039:     for (dimension_type j = 0; j < rs; ++j) {
-40039:       Result r = input(r_i[j], s, ROUND_CHECK);
-40039:       if (result_relation(r) != VR_EQ || is_minus_infinity(r_i[j])) {
-40039:         return false;
-40039:       }
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039:   return true;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: std::ostream&
-40039: IO_Operators::operator<<(std::ostream& s, const OR_Matrix<T>& m) {
-40039:   for (typename OR_Matrix<T>::const_row_iterator m_iter = m.row_begin(),
-40039:          m_end = m.row_end(); m_iter != m_end; ++m_iter) {
-40039:     typename OR_Matrix<T>::const_row_reference_type r_m = *m_iter;
-40039:     const dimension_type mr_size = m_iter.row_size();
-40039:     for (dimension_type j = 0; j < mr_size; ++j) {
-40039:       s << r_m[j] << " ";
-40039:     }
-40039:     s << "\n";
-40039:   }
-40039:   return s;
-40039: }
-40039: 
-40039: }
-40039: # 609 "../../src/OR_Matrix_defs.hh" 2
-40039: # 37 "../../src/Octagonal_Shape_defs.hh" 2
-40039: # 52 "../../src/Octagonal_Shape_defs.hh"
-40039: # 1 "/usr/include/c++/8/climits" 1 3
-40039: # 39 "/usr/include/c++/8/climits" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/climits" 3
-40039: 
-40039: 
-40039: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 1 3 4
-40039: # 43 "/usr/include/c++/8/climits" 2 3
-40039: # 53 "../../src/Octagonal_Shape_defs.hh" 2
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace IO_Operators {
-40039: # 67 "../../src/Octagonal_Shape_defs.hh"
-40039: template <typename T>
-40039: std::ostream&
-40039: operator<<(std::ostream& s, const Octagonal_Shape<T>& oct);
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: void swap(Octagonal_Shape<T>& x, Octagonal_Shape<T>& y);
-40039: # 85 "../../src/Octagonal_Shape_defs.hh"
-40039: template <typename T>
-40039: bool operator==(const Octagonal_Shape<T>& x, const Octagonal_Shape<T>& y);
-40039: # 95 "../../src/Octagonal_Shape_defs.hh"
-40039: template <typename T>
-40039: bool operator!=(const Octagonal_Shape<T>& x, const Octagonal_Shape<T>& y);
-40039: # 109 "../../src/Octagonal_Shape_defs.hh"
-40039: template <typename To, typename T>
-40039: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                  const Octagonal_Shape<T>& x,
-40039:                                  const Octagonal_Shape<T>& y,
-40039:                                  Rounding_Dir dir);
-40039: # 126 "../../src/Octagonal_Shape_defs.hh"
-40039: template <typename Temp, typename To, typename T>
-40039: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                  const Octagonal_Shape<T>& x,
-40039:                                  const Octagonal_Shape<T>& y,
-40039:                                  Rounding_Dir dir);
-40039: # 143 "../../src/Octagonal_Shape_defs.hh"
-40039: template <typename Temp, typename To, typename T>
-40039: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                  const Octagonal_Shape<T>& x,
-40039:                                  const Octagonal_Shape<T>& y,
-40039:                                  Rounding_Dir dir,
-40039:                                  Temp& tmp0,
-40039:                                  Temp& tmp1,
-40039:                                  Temp& tmp2);
-40039: # 163 "../../src/Octagonal_Shape_defs.hh"
-40039: template <typename To, typename T>
-40039: bool euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                const Octagonal_Shape<T>& x,
-40039:                                const Octagonal_Shape<T>& y,
-40039:                                Rounding_Dir dir);
-40039: # 180 "../../src/Octagonal_Shape_defs.hh"
-40039: template <typename Temp, typename To, typename T>
-40039: bool euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                const Octagonal_Shape<T>& x,
-40039:                                const Octagonal_Shape<T>& y,
-40039:                                Rounding_Dir dir);
-40039: # 197 "../../src/Octagonal_Shape_defs.hh"
-40039: template <typename Temp, typename To, typename T>
-40039: bool euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                const Octagonal_Shape<T>& x,
-40039:                                const Octagonal_Shape<T>& y,
-40039:                                Rounding_Dir dir,
-40039:                                Temp& tmp0,
-40039:                                Temp& tmp1,
-40039:                                Temp& tmp2);
-40039: # 217 "../../src/Octagonal_Shape_defs.hh"
-40039: template <typename To, typename T>
-40039: bool l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                 const Octagonal_Shape<T>& x,
-40039:                                 const Octagonal_Shape<T>& y,
-40039:                                 Rounding_Dir dir);
-40039: # 234 "../../src/Octagonal_Shape_defs.hh"
-40039: template <typename Temp, typename To, typename T>
-40039: bool l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                 const Octagonal_Shape<T>& x,
-40039:                                 const Octagonal_Shape<T>& y,
-40039:                                 Rounding_Dir dir);
-40039: # 251 "../../src/Octagonal_Shape_defs.hh"
-40039: template <typename Temp, typename To, typename T>
-40039: bool l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                 const Octagonal_Shape<T>& x,
-40039:                                 const Octagonal_Shape<T>& y,
-40039:                                 Rounding_Dir dir,
-40039:                                 Temp& tmp0,
-40039:                                 Temp& tmp1,
-40039:                                 Temp& tmp2);
-40039: 
-40039: 
-40039: 
-40039: class Octagonal_Shape_Helper {
-40039: public:
-40039: # 304 "../../src/Octagonal_Shape_defs.hh"
-40039:   static bool extract_octagonal_difference(const Constraint& c,
-40039:                                            dimension_type c_space_dim,
-40039:                                            dimension_type& c_num_vars,
-40039:                                            dimension_type& c_first_var,
-40039:                                            dimension_type& c_second_var,
-40039:                                            Coefficient& c_coeff,
-40039:                                            Coefficient& c_term);
-40039: };
-40039: 
-40039: }
-40039: # 419 "../../src/Octagonal_Shape_defs.hh"
-40039: template <typename T>
-40039: class Parma_Polyhedra_Library::Octagonal_Shape {
-40039: private:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef Checked_Number<T, WRD_Extended_Number_Policy> N;
-40039: 
-40039: 
-40039: public:
-40039: 
-40039: 
-40039:   typedef T coefficient_type_base;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef N coefficient_type;
-40039: 
-40039: 
-40039:   static dimension_type max_space_dimension();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static bool can_recycle_constraint_systems();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static bool can_recycle_congruence_systems();
-40039: # 467 "../../src/Octagonal_Shape_defs.hh"
-40039:   explicit Octagonal_Shape(dimension_type num_dimensions = 0,
-40039:                            Degenerate_Element kind = UNIVERSE);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Octagonal_Shape(const Octagonal_Shape& y,
-40039:                   Complexity_Class complexity = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename U>
-40039:   explicit Octagonal_Shape(const Octagonal_Shape<U>& y,
-40039:                            Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 496 "../../src/Octagonal_Shape_defs.hh"
-40039:   explicit Octagonal_Shape(const Constraint_System& cs);
-40039: # 509 "../../src/Octagonal_Shape_defs.hh"
-40039:   explicit Octagonal_Shape(const Congruence_System& cgs);
-40039: # 519 "../../src/Octagonal_Shape_defs.hh"
-40039:   explicit Octagonal_Shape(const Generator_System& gs);
-40039: # 528 "../../src/Octagonal_Shape_defs.hh"
-40039:   explicit Octagonal_Shape(const Polyhedron& ph,
-40039:                            Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 547 "../../src/Octagonal_Shape_defs.hh"
-40039:   template <typename Interval>
-40039:   explicit Octagonal_Shape(const Box<Interval>& box,
-40039:                            Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 567 "../../src/Octagonal_Shape_defs.hh"
-40039:   explicit Octagonal_Shape(const Grid& grid,
-40039:                            Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 586 "../../src/Octagonal_Shape_defs.hh"
-40039:   template <typename U>
-40039:   explicit Octagonal_Shape(const BD_Shape<U>& bd,
-40039:                            Complexity_Class complexity = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Octagonal_Shape& operator=(const Octagonal_Shape& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void m_swap(Octagonal_Shape& y);
-40039: 
-40039: 
-40039:   ~Octagonal_Shape();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type affine_dimension() const;
-40039: 
-40039: 
-40039:   Constraint_System constraints() const;
-40039: 
-40039: 
-40039:   Constraint_System minimized_constraints() const;
-40039: 
-40039: 
-40039:   Congruence_System congruences() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Congruence_System minimized_congruences() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool contains(const Octagonal_Shape& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool strictly_contains(const Octagonal_Shape& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_disjoint_from(const Octagonal_Shape& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Poly_Con_Relation relation_with(const Constraint& c) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Poly_Con_Relation relation_with(const Congruence& cg) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Poly_Gen_Relation relation_with(const Generator& g) const;
-40039: 
-40039: 
-40039:   bool is_empty() const;
-40039: 
-40039: 
-40039:   bool is_universe() const;
-40039: 
-40039: 
-40039:   bool is_discrete() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_bounded() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_topologically_closed() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool contains_integer_point() const;
-40039: # 715 "../../src/Octagonal_Shape_defs.hh"
-40039:   bool constrains(Variable var) const;
-40039: # 724 "../../src/Octagonal_Shape_defs.hh"
-40039:   bool bounds_from_above(const Linear_Expression& expr) const;
-40039: # 733 "../../src/Octagonal_Shape_defs.hh"
-40039:   bool bounds_from_below(const Linear_Expression& expr) const;
-40039: # 759 "../../src/Octagonal_Shape_defs.hh"
-40039:   bool maximize(const Linear_Expression& expr,
-40039:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum) const;
-40039: # 790 "../../src/Octagonal_Shape_defs.hh"
-40039:   bool maximize(const Linear_Expression& expr,
-40039:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum,
-40039:                 Generator& g) const;
-40039: # 818 "../../src/Octagonal_Shape_defs.hh"
-40039:   bool minimize(const Linear_Expression& expr,
-40039:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum) const;
-40039: # 849 "../../src/Octagonal_Shape_defs.hh"
-40039:   bool minimize(const Linear_Expression& expr,
-40039:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum,
-40039:                 Generator& g) const;
-40039: # 881 "../../src/Octagonal_Shape_defs.hh"
-40039:   bool frequency(const Linear_Expression& expr,
-40039:                  Coefficient& freq_n, Coefficient& freq_d,
-40039:                  Coefficient& val_n, Coefficient& val_d) const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: # 904 "../../src/Octagonal_Shape_defs.hh"
-40039:   void add_constraint(const Constraint& c);
-40039: # 918 "../../src/Octagonal_Shape_defs.hh"
-40039:   void add_constraints(const Constraint_System& cs);
-40039: # 937 "../../src/Octagonal_Shape_defs.hh"
-40039:   void add_recycled_constraints(Constraint_System& cs);
-40039: # 949 "../../src/Octagonal_Shape_defs.hh"
-40039:   void add_congruence(const Congruence& cg);
-40039: # 962 "../../src/Octagonal_Shape_defs.hh"
-40039:   void add_congruences(const Congruence_System& cgs);
-40039: # 980 "../../src/Octagonal_Shape_defs.hh"
-40039:   void add_recycled_congruences(Congruence_System& cgs);
-40039: # 992 "../../src/Octagonal_Shape_defs.hh"
-40039:   void refine_with_constraint(const Constraint& c);
-40039: # 1005 "../../src/Octagonal_Shape_defs.hh"
-40039:   void refine_with_congruence(const Congruence& cg);
-40039: # 1018 "../../src/Octagonal_Shape_defs.hh"
-40039:   void refine_with_constraints(const Constraint_System& cs);
-40039: # 1031 "../../src/Octagonal_Shape_defs.hh"
-40039:   void refine_with_congruences(const Congruence_System& cgs);
-40039: # 1054 "../../src/Octagonal_Shape_defs.hh"
-40039:   template <typename Interval_Info>
-40039:   void refine_with_linear_form_inequality(
-40039:                    const Linear_Form< Interval<T, Interval_Info> >& left,
-40039:                    const Linear_Form< Interval<T, Interval_Info> >& right);
-40039: # 1087 "../../src/Octagonal_Shape_defs.hh"
-40039:   template <typename Interval_Info>
-40039:   void generalized_refine_with_linear_form_inequality(
-40039:                    const Linear_Form< Interval<T, Interval_Info> >& left,
-40039:                    const Linear_Form< Interval<T, Interval_Info> >& right,
-40039:                    Relation_Symbol relsym);
-40039: # 1103 "../../src/Octagonal_Shape_defs.hh"
-40039:   void unconstrain(Variable var);
-40039: # 1117 "../../src/Octagonal_Shape_defs.hh"
-40039:   void unconstrain(const Variables_Set& vars);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void intersection_assign(const Octagonal_Shape& y);
-40039: # 1133 "../../src/Octagonal_Shape_defs.hh"
-40039:   void upper_bound_assign(const Octagonal_Shape& y);
-40039: # 1145 "../../src/Octagonal_Shape_defs.hh"
-40039:   bool upper_bound_assign_if_exact(const Octagonal_Shape& y);
-40039: # 1168 "../../src/Octagonal_Shape_defs.hh"
-40039:   bool integer_upper_bound_assign_if_exact(const Octagonal_Shape& y);
-40039: # 1177 "../../src/Octagonal_Shape_defs.hh"
-40039:   void difference_assign(const Octagonal_Shape& y);
-40039: # 1188 "../../src/Octagonal_Shape_defs.hh"
-40039:   bool simplify_using_context_assign(const Octagonal_Shape& y);
-40039: # 1208 "../../src/Octagonal_Shape_defs.hh"
-40039:   void affine_image(Variable var,
-40039:                     const Linear_Expression& expr,
-40039:                     Coefficient_traits::const_reference denominator
-40039:                     = Coefficient_one());
-40039: # 1234 "../../src/Octagonal_Shape_defs.hh"
-40039:   template <typename Interval_Info>
-40039:   void affine_form_image(Variable var,
-40039:                         const Linear_Form< Interval<T, Interval_Info> >& lf);
-40039: # 1256 "../../src/Octagonal_Shape_defs.hh"
-40039:   void affine_preimage(Variable var,
-40039:                        const Linear_Expression& expr,
-40039:                        Coefficient_traits::const_reference denominator
-40039:                        = Coefficient_one());
-40039: # 1285 "../../src/Octagonal_Shape_defs.hh"
-40039:   void generalized_affine_image(Variable var,
-40039:                                 Relation_Symbol relsym,
-40039:                                 const Linear_Expression& expr,
-40039:                                 Coefficient_traits::const_reference denominator
-40039:                                 = Coefficient_one());
-40039: # 1310 "../../src/Octagonal_Shape_defs.hh"
-40039:   void generalized_affine_image(const Linear_Expression& lhs,
-40039:                                 Relation_Symbol relsym,
-40039:                                 const Linear_Expression& rhs);
-40039: # 1340 "../../src/Octagonal_Shape_defs.hh"
-40039:   void bounded_affine_image(Variable var,
-40039:                             const Linear_Expression& lb_expr,
-40039:                             const Linear_Expression& ub_expr,
-40039:                             Coefficient_traits::const_reference denominator
-40039:                             = Coefficient_one());
-40039: # 1370 "../../src/Octagonal_Shape_defs.hh"
-40039:   void generalized_affine_preimage(Variable var,
-40039:                                    Relation_Symbol relsym,
-40039:                                    const Linear_Expression& expr,
-40039:                                    Coefficient_traits::const_reference
-40039:                                    denominator = Coefficient_one());
-40039: # 1395 "../../src/Octagonal_Shape_defs.hh"
-40039:   void generalized_affine_preimage(const Linear_Expression& lhs,
-40039:                                    Relation_Symbol relsym,
-40039:                                    const Linear_Expression& rhs);
-40039: # 1425 "../../src/Octagonal_Shape_defs.hh"
-40039:   void bounded_affine_preimage(Variable var,
-40039:                                const Linear_Expression& lb_expr,
-40039:                                const Linear_Expression& ub_expr,
-40039:                                Coefficient_traits::const_reference denominator
-40039:                                = Coefficient_one());
-40039: # 1438 "../../src/Octagonal_Shape_defs.hh"
-40039:   void time_elapse_assign(const Octagonal_Shape& y);
-40039: # 1486 "../../src/Octagonal_Shape_defs.hh"
-40039:   void wrap_assign(const Variables_Set& vars,
-40039:                    Bounded_Integer_Type_Width w,
-40039:                    Bounded_Integer_Type_Representation r,
-40039:                    Bounded_Integer_Type_Overflow o,
-40039:                    const Constraint_System* cs_p = 0,
-40039:                    unsigned complexity_threshold = 16,
-40039:                    bool wrap_individually = true);
-40039: # 1505 "../../src/Octagonal_Shape_defs.hh"
-40039:   void drop_some_non_integer_points(Complexity_Class complexity
-40039:                                     = ANY_COMPLEXITY);
-40039: # 1523 "../../src/Octagonal_Shape_defs.hh"
-40039:   void drop_some_non_integer_points(const Variables_Set& vars,
-40039:                                     Complexity_Class complexity
-40039:                                     = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039:   void topological_closure_assign();
-40039: # 1545 "../../src/Octagonal_Shape_defs.hh"
-40039:   void CC76_extrapolation_assign(const Octagonal_Shape& y, unsigned* tp = 0);
-40039: # 1568 "../../src/Octagonal_Shape_defs.hh"
-40039:   template <typename Iterator>
-40039:   void CC76_extrapolation_assign(const Octagonal_Shape& y,
-40039:                                  Iterator first, Iterator last,
-40039:                                  unsigned* tp = 0);
-40039: # 1588 "../../src/Octagonal_Shape_defs.hh"
-40039:   void BHMZ05_widening_assign(const Octagonal_Shape& y, unsigned* tp = 0);
-40039: 
-40039: 
-40039:   void widening_assign(const Octagonal_Shape& y, unsigned* tp = 0);
-40039: # 1613 "../../src/Octagonal_Shape_defs.hh"
-40039:   void limited_BHMZ05_extrapolation_assign(const Octagonal_Shape& y,
-40039:                                            const Constraint_System& cs,
-40039:                                            unsigned* tp = 0);
-40039: # 1627 "../../src/Octagonal_Shape_defs.hh"
-40039:   void CC76_narrowing_assign(const Octagonal_Shape& y);
-40039: # 1649 "../../src/Octagonal_Shape_defs.hh"
-40039:   void limited_CC76_extrapolation_assign(const Octagonal_Shape& y,
-40039:                                          const Constraint_System& cs,
-40039:                                          unsigned* tp = 0);
-40039: # 1676 "../../src/Octagonal_Shape_defs.hh"
-40039:   void add_space_dimensions_and_embed(dimension_type m);
-40039: # 1699 "../../src/Octagonal_Shape_defs.hh"
-40039:   void add_space_dimensions_and_project(dimension_type m);
-40039: # 1709 "../../src/Octagonal_Shape_defs.hh"
-40039:   void concatenate_assign(const Octagonal_Shape& y);
-40039: # 1720 "../../src/Octagonal_Shape_defs.hh"
-40039:   void remove_space_dimensions(const Variables_Set& vars);
-40039: # 1730 "../../src/Octagonal_Shape_defs.hh"
-40039:   void remove_higher_space_dimensions(dimension_type new_dimension);
-40039: # 1768 "../../src/Octagonal_Shape_defs.hh"
-40039:   template <typename Partial_Function>
-40039:   void map_space_dimensions(const Partial_Function& pfunc);
-40039: # 1792 "../../src/Octagonal_Shape_defs.hh"
-40039:   void expand_space_dimension(Variable var, dimension_type m);
-40039: # 1817 "../../src/Octagonal_Shape_defs.hh"
-40039:   void fold_space_dimensions(const Variables_Set& vars, Variable dest);
-40039: # 1849 "../../src/Octagonal_Shape_defs.hh"
-40039:   template <typename U>
-40039:   void export_interval_constraints(U& dest) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename Interval_Info>
-40039:   void refine_fp_interval_abstract_store(
-40039:                           Box< Interval<T, Interval_Info> >& store) const;
-40039: 
-40039: 
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   int32_t hash_code() const;
-40039: 
-40039:   friend bool
-40039:   operator==<T>(const Octagonal_Shape<T>& x, const Octagonal_Shape<T>& y);
-40039: 
-40039:   template <typename Temp, typename To, typename U>
-40039:   friend bool Parma_Polyhedra_Library
-40039:   ::rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                 const Octagonal_Shape<U>& x,
-40039:                                 const Octagonal_Shape<U>& y,
-40039:                                 const Rounding_Dir dir,
-40039:                                 Temp& tmp0, Temp& tmp1, Temp& tmp2);
-40039:   template <typename Temp, typename To, typename U>
-40039:   friend bool Parma_Polyhedra_Library
-40039:   ::euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                               const Octagonal_Shape<U>& x,
-40039:                               const Octagonal_Shape<U>& y,
-40039:                               const Rounding_Dir dir,
-40039:                               Temp& tmp0, Temp& tmp1, Temp& tmp2);
-40039:   template <typename Temp, typename To, typename U>
-40039:   friend bool Parma_Polyhedra_Library
-40039:   ::l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                                const Octagonal_Shape<U>& x,
-40039:                                const Octagonal_Shape<U>& y,
-40039:                                const Rounding_Dir dir,
-40039:                                Temp& tmp0, Temp& tmp1, Temp& tmp2);
-40039: 
-40039: private:
-40039:   template <typename U> friend class Parma_Polyhedra_Library::Octagonal_Shape;
-40039:   template <typename Interval> friend class Parma_Polyhedra_Library::Box;
-40039: 
-40039: 
-40039:   OR_Matrix<N> matrix;
-40039: 
-40039: 
-40039:   dimension_type space_dim;
-40039: # 1928 "../../src/Octagonal_Shape_defs.hh"
-40039: # 1 "../../src/Og_Status_idefs.hh" 1
-40039: # 45 "../../src/Og_Status_idefs.hh"
-40039: class Status {
-40039: public:
-40039: 
-40039:   Status();
-40039: 
-40039: 
-40039: 
-40039:   bool test_zero_dim_univ() const;
-40039:   void reset_zero_dim_univ();
-40039:   void set_zero_dim_univ();
-40039: 
-40039:   bool test_empty() const;
-40039:   void reset_empty();
-40039:   void set_empty();
-40039: 
-40039:   bool test_strongly_closed() const;
-40039:   void reset_strongly_closed();
-40039:   void set_strongly_closed();
-40039: 
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void ascii_dump(std::ostream& s) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: private:
-40039: 
-40039:   typedef unsigned int flags_t;
-40039: 
-40039: 
-40039: 
-40039:   static const flags_t ZERO_DIM_UNIV = 0U;
-40039:   static const flags_t EMPTY = 1U << 0;
-40039:   static const flags_t STRONGLY_CLOSED = 1U << 1;
-40039: 
-40039: 
-40039: 
-40039:   flags_t flags;
-40039: 
-40039: 
-40039:   Status(flags_t mask);
-40039: 
-40039: 
-40039:   bool test_all(flags_t mask) const;
-40039: 
-40039: 
-40039:   bool test_any(flags_t mask) const;
-40039: 
-40039: 
-40039:   void set(flags_t mask);
-40039: 
-40039: 
-40039:   void reset(flags_t mask);
-40039: 
-40039: };
-40039: # 1929 "../../src/Octagonal_Shape_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039:   Status status;
-40039: 
-40039: 
-40039:   bool marked_zero_dim_univ() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool marked_empty() const;
-40039: # 1951 "../../src/Octagonal_Shape_defs.hh"
-40039:   bool marked_strongly_closed() const;
-40039: 
-40039: 
-40039:   void set_zero_dim_univ();
-40039: 
-40039: 
-40039:   void set_empty();
-40039: 
-40039: 
-40039:   void set_strongly_closed();
-40039: 
-40039: 
-40039:   void reset_strongly_closed();
-40039: 
-40039:   N& matrix_at(dimension_type i, dimension_type j);
-40039:   const N& matrix_at(dimension_type i, dimension_type j) const;
-40039: # 1978 "../../src/Octagonal_Shape_defs.hh"
-40039:   template <typename Interval_Info>
-40039:   void linear_form_upper_bound(
-40039:                    const Linear_Form< Interval<T, Interval_Info> >& lf,
-40039:                    N& result) const;
-40039: 
-40039: 
-40039:   static void interval_coefficient_upper_bound(const N& var_ub,
-40039:                                                const N& minus_var_ub,
-40039:                                                const N& int_ub, const N& int_lb,
-40039:                                                N& result);
-40039: # 1999 "../../src/Octagonal_Shape_defs.hh"
-40039:   void refine_no_check(const Constraint& c);
-40039: # 2013 "../../src/Octagonal_Shape_defs.hh"
-40039:   void refine_no_check(const Congruence& cg);
-40039: 
-40039: 
-40039:   void add_octagonal_constraint(dimension_type i,
-40039:                                 dimension_type j,
-40039:                                 const N& k);
-40039: 
-40039: 
-40039:   void add_octagonal_constraint(dimension_type i,
-40039:                                 dimension_type j,
-40039:                                 Coefficient_traits::const_reference numer,
-40039:                                 Coefficient_traits::const_reference denom);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void refine(Variable var,
-40039:               Relation_Symbol relsym,
-40039:               const Linear_Expression& expr,
-40039:               Coefficient_traits::const_reference denominator
-40039:               = Coefficient_one());
-40039: 
-40039: 
-40039:   void forget_all_octagonal_constraints(dimension_type v_id);
-40039: 
-40039: 
-40039:   void forget_binary_octagonal_constraints(dimension_type v_id);
-40039: # 2071 "../../src/Octagonal_Shape_defs.hh"
-40039:   void deduce_v_pm_u_bounds(dimension_type v_id,
-40039:                             dimension_type last_id,
-40039:                             const Linear_Expression& sc_expr,
-40039:                             Coefficient_traits::const_reference sc_denom,
-40039:                             const N& ub_v);
-40039: # 2105 "../../src/Octagonal_Shape_defs.hh"
-40039:   void deduce_minus_v_pm_u_bounds(dimension_type v_id,
-40039:                                   dimension_type last_id,
-40039:                                   const Linear_Expression& sc_expr,
-40039:                                   Coefficient_traits::const_reference sc_denom,
-40039:                                   const N& minus_lb_v);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void get_limiting_octagon(const Constraint_System& cs,
-40039:                             Octagonal_Shape& limiting_octagon) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void compute_successors(std::vector<dimension_type>& successor) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void compute_leaders(std::vector<dimension_type>& successor,
-40039:                        std::vector<dimension_type>& no_sing_leaders,
-40039:                        bool& exist_sing_class,
-40039:                        dimension_type& sing_leader) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void compute_leaders(std::vector<dimension_type>& leaders) const;
-40039: # 2146 "../../src/Octagonal_Shape_defs.hh"
-40039:   void non_redundant_matrix_entries(std::vector<Bit_Row>& non_redundant) const;
-40039: 
-40039: 
-40039:   void strong_reduction_assign() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_strongly_reduced() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_strong_coherent() const;
-40039: 
-40039:   bool tight_coherence_would_make_empty() const;
-40039: # 2172 "../../src/Octagonal_Shape_defs.hh"
-40039:   void strong_closure_assign() const;
-40039: 
-40039: 
-40039:   void strong_coherence_assign();
-40039: # 2185 "../../src/Octagonal_Shape_defs.hh"
-40039:   void tight_closure_assign();
-40039: # 2198 "../../src/Octagonal_Shape_defs.hh"
-40039:   void incremental_strong_closure_assign(Variable var) const;
-40039: # 2217 "../../src/Octagonal_Shape_defs.hh"
-40039:   bool bounds(const Linear_Expression& expr, bool from_above) const;
-40039: # 2245 "../../src/Octagonal_Shape_defs.hh"
-40039:   bool max_min(const Linear_Expression& expr,
-40039:                bool maximize,
-40039:                Coefficient& ext_n, Coefficient& ext_d, bool& included) const;
-40039: # 2280 "../../src/Octagonal_Shape_defs.hh"
-40039:   bool max_min(const Linear_Expression& expr,
-40039:                bool maximize,
-40039:                Coefficient& ext_n, Coefficient& ext_d, bool& included,
-40039:                Generator& g) const;
-40039: 
-40039:   void drop_some_non_integer_points_helper(N& elem);
-40039: 
-40039:   friend std::ostream&
-40039:   Parma_Polyhedra_Library::IO_Operators
-40039:   ::operator<<<>(std::ostream& s, const Octagonal_Shape<T>& c);
-40039: 
-40039: 
-40039: 
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const Octagonal_Shape& y) const;
-40039: 
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     dimension_type required_dim) const;
-40039: 
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const Constraint& c) const;
-40039: 
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const Congruence& cg) const;
-40039: 
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const Generator& g) const;
-40039: 
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* le_name,
-40039:                                     const Linear_Expression& le) const;
-40039: 
-40039:   template <typename C>
-40039:   void throw_dimension_incompatible(const char* method,
-40039:                                     const char* lf_name,
-40039:                                     const Linear_Form<C>& lf) const;
-40039: 
-40039:   static void throw_constraint_incompatible(const char* method);
-40039: 
-40039:   static void throw_expression_too_complex(const char* method,
-40039:                                            const Linear_Expression& le);
-40039: 
-40039:   static void throw_invalid_argument(const char* method, const char* reason);
-40039: 
-40039: };
-40039: 
-40039: # 1 "../../src/Og_Status_inlines.hh" 1
-40039: # 27 "../../src/Og_Status_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: inline
-40039: Octagonal_Shape<T>::Status::Status(flags_t mask)
-40039:   : flags(mask) {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: Octagonal_Shape<T>::Status::Status()
-40039:   : flags(ZERO_DIM_UNIV) {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Octagonal_Shape<T>::Status::test_all(flags_t mask) const {
-40039:   return (flags & mask) == mask;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Octagonal_Shape<T>::Status::test_any(flags_t mask) const {
-40039:   return (flags & mask) != 0;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::Status::set(flags_t mask) {
-40039:   flags |= mask;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::Status::reset(flags_t mask) {
-40039:   flags &= ~mask;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Octagonal_Shape<T>::Status::test_zero_dim_univ() const {
-40039:   return flags == ZERO_DIM_UNIV;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::Status::reset_zero_dim_univ() {
-40039: 
-40039:   if (flags == ZERO_DIM_UNIV) {
-40039: 
-40039:     flags = EMPTY;
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::Status::set_zero_dim_univ() {
-40039: 
-40039:   flags = ZERO_DIM_UNIV;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Octagonal_Shape<T>::Status::test_empty() const {
-40039:   return test_any(EMPTY);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::Status::reset_empty() {
-40039:   reset(EMPTY);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::Status::set_empty() {
-40039:   flags = EMPTY;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Octagonal_Shape<T>::Status::test_strongly_closed() const {
-40039:   return test_any(STRONGLY_CLOSED);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::Status::reset_strongly_closed() {
-40039:   reset(STRONGLY_CLOSED);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::Status::set_strongly_closed() {
-40039:   set(STRONGLY_CLOSED);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Octagonal_Shape<T>::Status::OK() const {
-40039:   if (test_zero_dim_univ()) {
-40039: 
-40039:     return true;
-40039:   }
-40039: 
-40039:   if (test_empty()) {
-40039:     Status copy = *this;
-40039:     copy.reset_empty();
-40039:     if (copy.test_zero_dim_univ()) {
-40039:       return true;
-40039:     }
-40039:     else {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       return false;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   return true;
-40039: }
-40039: 
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: namespace Octagonal_Shapes {
-40039: 
-40039: extern const char* zero_dim_univ;
-40039: extern const char* empty;
-40039: extern const char* strong_closed;
-40039: const char yes = '+';
-40039: const char no = '-';
-40039: const char separator = ' ';
-40039: # 170 "../../src/Og_Status_inlines.hh"
-40039: inline bool
-40039: get_field(std::istream& s, const char* keyword, bool& positive) {
-40039:   std::string str;
-40039:   if (!(s >> str)
-40039:       || (str[0] != yes && str[0] != no)
-40039:       || str.substr(1) != keyword) {
-40039:     return false;
-40039:   }
-40039:   positive = (str[0] == yes);
-40039:   return true;
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::Status::ascii_dump(std::ostream& s) const {
-40039:   using namespace Implementation::Octagonal_Shapes;
-40039:   s << (test_zero_dim_univ() ? yes : no) << zero_dim_univ
-40039:     << separator
-40039:     << (test_empty() ? yes : no) << empty
-40039:     << separator
-40039:     << separator
-40039:     << (test_strongly_closed() ? yes : no) << strong_closed
-40039:     << separator;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Octagonal_Shape<T>::Status::ascii_load(std::istream& s) {
-40039:   using namespace Implementation::Octagonal_Shapes;
-40039:   bool positive = Suppress_Uninitialized_Warnings_Type<bool>::synonym();
-40039: 
-40039:   if (!get_field(s, zero_dim_univ, positive)) {
-40039:     return false;
-40039:   }
-40039:   if (positive) {
-40039:     set_zero_dim_univ();
-40039:   }
-40039: 
-40039:   if (!get_field(s, empty, positive)) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (positive) {
-40039:     set_empty();
-40039:   }
-40039: 
-40039:   if (!get_field(s, strong_closed, positive)) {
-40039:     return false;
-40039:   }
-40039:   if (positive) {
-40039:     set_strongly_closed();
-40039:   }
-40039:   else {
-40039:     reset_strongly_closed();
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   return true;
-40039: }
-40039: 
-40039: }
-40039: # 2327 "../../src/Octagonal_Shape_defs.hh" 2
-40039: # 1 "../../src/Octagonal_Shape_inlines.hh" 1
-40039: # 31 "../../src/Octagonal_Shape_inlines.hh"
-40039: # 1 "../../src/BD_Shape_defs.hh" 1
-40039: # 32 "../../src/Octagonal_Shape_inlines.hh" 2
-40039: 
-40039: 
-40039: # 1 "../../src/wrap_assign.hh" 1
-40039: # 33 "../../src/wrap_assign.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: struct Wrap_Dim_Translations {
-40039:   Variable var;
-40039:   Coefficient first_quadrant;
-40039:   Coefficient last_quadrant;
-40039:   Wrap_Dim_Translations(Variable v,
-40039:                         Coefficient_traits::const_reference f,
-40039:                         Coefficient_traits::const_reference l)
-40039:     : var(v), first_quadrant(f), last_quadrant(l) {
-40039:   }
-40039: };
-40039: 
-40039: typedef std::vector<Wrap_Dim_Translations> Wrap_Translations;
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: wrap_assign_ind(PSET& pointset,
-40039:                 Variables_Set& vars,
-40039:                 Wrap_Translations::const_iterator first,
-40039:                 Wrap_Translations::const_iterator end,
-40039:                 Bounded_Integer_Type_Width w,
-40039:                 Coefficient_traits::const_reference min_value,
-40039:                 Coefficient_traits::const_reference max_value,
-40039:                 const Constraint_System& cs,
-40039:                 Coefficient& tmp1,
-40039:                 Coefficient& tmp2) {
-40039:   const dimension_type space_dim = pointset.space_dimension();
-40039:   for (Wrap_Translations::const_iterator i = first; i != end; ++i) {
-40039:     const Wrap_Dim_Translations& wrap_dim_translations = *i;
-40039:     const Variable x(wrap_dim_translations.var);
-40039:     const Coefficient& first_quadrant = wrap_dim_translations.first_quadrant;
-40039:     const Coefficient& last_quadrant = wrap_dim_translations.last_quadrant;
-40039:     Coefficient& quadrant = tmp1;
-40039:     Coefficient& shift = tmp2;
-40039:     PSET hull(space_dim, EMPTY);
-40039:     for (quadrant = first_quadrant; quadrant <= last_quadrant; ++quadrant) {
-40039:       PSET p(pointset);
-40039:       if (quadrant != 0) {
-40039:         mul_2exp_assign(shift, quadrant, w);
-40039:         p.affine_image(x, x - shift, 1);
-40039:       }
-40039: 
-40039:       vars.erase(x.id());
-40039: 
-40039: 
-40039: 
-40039:       if (vars.empty()) {
-40039:         p.refine_with_constraints(cs);
-40039:       }
-40039:       else {
-40039:         for (Constraint_System::const_iterator j = cs.begin(),
-40039:                cs_end = cs.end(); j != cs_end; ++j) {
-40039:           if (j->expression().all_zeroes(vars)) {
-40039: 
-40039:             p.refine_with_constraint(*j);
-40039:           }
-40039:         }
-40039:       }
-40039:       p.refine_with_constraint(min_value <= x);
-40039:       p.refine_with_constraint(x <= max_value);
-40039:       hull.upper_bound_assign(p);
-40039:     }
-40039:     pointset.m_swap(hull);
-40039:   }
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: wrap_assign_col(PSET& dest,
-40039:                 const PSET& src,
-40039:                 const Variables_Set& vars,
-40039:                 Wrap_Translations::const_iterator first,
-40039:                 Wrap_Translations::const_iterator end,
-40039:                 Bounded_Integer_Type_Width w,
-40039:                 Coefficient_traits::const_reference min_value,
-40039:                 Coefficient_traits::const_reference max_value,
-40039:                 const Constraint_System* cs_p,
-40039:                 Coefficient& tmp) {
-40039:   if (first == end) {
-40039:     PSET p(src);
-40039:     if (cs_p != 0) {
-40039:       p.refine_with_constraints(*cs_p);
-40039:     }
-40039:     for (Variables_Set::const_iterator i = vars.begin(),
-40039:            vars_end = vars.end(); i != vars_end; ++i) {
-40039:       const Variable x(*i);
-40039:       p.refine_with_constraint(min_value <= x);
-40039:       p.refine_with_constraint(x <= max_value);
-40039:     }
-40039:     dest.upper_bound_assign(p);
-40039:   }
-40039:   else {
-40039:     const Wrap_Dim_Translations& wrap_dim_translations = *first;
-40039:     const Variable x(wrap_dim_translations.var);
-40039:     const Coefficient& first_quadrant = wrap_dim_translations.first_quadrant;
-40039:     const Coefficient& last_quadrant = wrap_dim_translations.last_quadrant;
-40039:     Coefficient& shift = tmp;
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_quadrant; Parma_Polyhedra_Library::Coefficient& quadrant = holder_quadrant.item();
-40039:     for (quadrant = first_quadrant; quadrant <= last_quadrant; ++quadrant) {
-40039:       if (quadrant != 0) {
-40039:         mul_2exp_assign(shift, quadrant, w);
-40039:         PSET p(src);
-40039:         p.affine_image(x, x - shift, 1);
-40039:         wrap_assign_col(dest, p, vars, first+1, end, w, min_value, max_value,
-40039:                         cs_p, tmp);
-40039:       }
-40039:       else {
-40039:         wrap_assign_col(dest, src, vars, first+1, end, w, min_value, max_value,
-40039:                         cs_p, tmp);
-40039:       }
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: wrap_assign(PSET& pointset,
-40039:             const Variables_Set& vars,
-40039:             const Bounded_Integer_Type_Width w,
-40039:             const Bounded_Integer_Type_Representation r,
-40039:             const Bounded_Integer_Type_Overflow o,
-40039:             const Constraint_System* cs_p,
-40039:             const unsigned complexity_threshold,
-40039:             const bool wrap_individually,
-40039:             const char* class_name) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (cs_p != 0) {
-40039:     const dimension_type vars_space_dim = vars.space_dimension();
-40039:     if (cs_p->space_dimension() > vars_space_dim) {
-40039:       std::ostringstream s;
-40039:       s << "PPL::" << class_name << "::wrap_assign(..., cs_p, ...):"
-40039:         << std::endl
-40039:         << "vars.space_dimension() == " << vars_space_dim
-40039:         << ", cs_p->space_dimension() == " << cs_p->space_dimension() << ".";
-40039:       throw std::invalid_argument(s.str());
-40039:     }
-40039: # 191 "../../src/wrap_assign.hh"
-40039:   }
-40039: 
-40039: 
-40039:   if (vars.empty()) {
-40039:     if (cs_p != 0) {
-40039:       pointset.refine_with_constraints(*cs_p);
-40039:     }
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type space_dim = pointset.space_dimension();
-40039:   if (vars.space_dimension() > space_dim) {
-40039:     std::ostringstream s;
-40039:     s << "PPL::" << class_name << "::wrap_assign(vs, ...):" << std::endl
-40039:       << "this->space_dimension() == " << space_dim
-40039:       << ", required space dimension == " << vars.space_dimension() << ".";
-40039:     throw std::invalid_argument(s.str());
-40039:   }
-40039: 
-40039: 
-40039:   if (pointset.is_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_value; Parma_Polyhedra_Library::Coefficient& min_value = holder_min_value.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_value; Parma_Polyhedra_Library::Coefficient& max_value = holder_max_value.item();
-40039:   if (r == UNSIGNED) {
-40039:     min_value = 0;
-40039:     mul_2exp_assign(max_value, Coefficient_one(), w);
-40039:     --max_value;
-40039:   }
-40039:   else {
-40039:     ((void) 0);
-40039:     mul_2exp_assign(max_value, Coefficient_one(), w-1);
-40039:     neg_assign(min_value, max_value);
-40039:     --max_value;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Wrap_Translations translations;
-40039: 
-40039: 
-40039: 
-40039:   Variables_Set dimensions_to_be_translated;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   unsigned collective_wrap_complexity = 1;
-40039: 
-40039: 
-40039: 
-40039:   bool collective_wrap_too_complex = false;
-40039: 
-40039:   if (!wrap_individually) {
-40039:     translations.reserve(space_dim);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   Constraint_System full_range_bounds;
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_l_n; Parma_Polyhedra_Library::Coefficient& l_n = holder_l_n.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_l_d; Parma_Polyhedra_Library::Coefficient& l_d = holder_l_d.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_u_n; Parma_Polyhedra_Library::Coefficient& u_n = holder_u_n.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_u_d; Parma_Polyhedra_Library::Coefficient& u_d = holder_u_d.item();
-40039: 
-40039:   for (Variables_Set::const_iterator i = vars.begin(),
-40039:          vars_end = vars.end(); i != vars_end; ++i) {
-40039: 
-40039:     const Variable x(*i);
-40039: 
-40039:     bool extremum;
-40039: 
-40039:     if (!pointset.minimize(x, l_n, l_d, extremum)) {
-40039:     set_full_range:
-40039:       pointset.unconstrain(x);
-40039:       full_range_bounds.insert(min_value <= x);
-40039:       full_range_bounds.insert(x <= max_value);
-40039:       continue;
-40039:     }
-40039: 
-40039:     if (!pointset.maximize(x, u_n, u_d, extremum)) {
-40039:       goto set_full_range;
-40039:     }
-40039: 
-40039:     div_assign_r(l_n, l_n, l_d, ROUND_DOWN);
-40039:     div_assign_r(u_n, u_n, u_d, ROUND_DOWN);
-40039:     l_n -= min_value;
-40039:     u_n -= min_value;
-40039:     div_2exp_assign_r(l_n, l_n, w, ROUND_DOWN);
-40039:     div_2exp_assign_r(u_n, u_n, w, ROUND_DOWN);
-40039:     Coefficient& first_quadrant = l_n;
-40039:     const Coefficient& last_quadrant = u_n;
-40039: 
-40039: 
-40039:     if (first_quadrant == 0 && last_quadrant == 0) {
-40039:       continue;
-40039:     }
-40039: 
-40039: 
-40039:     if (o == OVERFLOW_IMPOSSIBLE) {
-40039:       if (first_quadrant < 0) {
-40039:         full_range_bounds.insert(min_value <= x);
-40039:       }
-40039:       if (last_quadrant > 0) {
-40039:         full_range_bounds.insert(x <= max_value);
-40039:       }
-40039:       continue;
-40039:     }
-40039: 
-40039:     if (o == OVERFLOW_UNDEFINED || collective_wrap_too_complex) {
-40039:       goto set_full_range;
-40039:     }
-40039: 
-40039:     Coefficient& quadrants = u_d;
-40039:     quadrants = last_quadrant - first_quadrant + 1;
-40039: 
-40039:     unsigned extension = Suppress_Uninitialized_Warnings_Type<unsigned>::synonym();
-40039:     Result res = assign_r(extension, quadrants, ROUND_IGNORE);
-40039:     if (result_overflow(res) != 0 || extension > complexity_threshold) {
-40039:       goto set_full_range;
-40039:     }
-40039: 
-40039:     if (!wrap_individually && !collective_wrap_too_complex) {
-40039:       res = mul_assign_r(collective_wrap_complexity,
-40039:                          collective_wrap_complexity, extension, ROUND_IGNORE);
-40039:       if (result_overflow(res) != 0
-40039:           || collective_wrap_complexity > complexity_threshold) {
-40039:         collective_wrap_too_complex = true;
-40039:       }
-40039:       if (collective_wrap_too_complex) {
-40039: 
-40039:         for (Wrap_Translations::const_iterator j = translations.begin(),
-40039:                translations_end = translations.end();
-40039:              j != translations_end;
-40039:              ++j) {
-40039:           const Variable y(j->var);
-40039:           pointset.unconstrain(y);
-40039:           full_range_bounds.insert(min_value <= y);
-40039:           full_range_bounds.insert(y <= max_value);
-40039:         }
-40039:       }
-40039:     }
-40039: 
-40039:     if (wrap_individually && cs_p == 0) {
-40039:       Coefficient& quadrant = first_quadrant;
-40039: 
-40039: 
-40039:       Coefficient& shift = l_d;
-40039:       PSET hull(space_dim, EMPTY);
-40039:       for ( ; quadrant <= last_quadrant; ++quadrant) {
-40039:         PSET p(pointset);
-40039:         if (quadrant != 0) {
-40039:           mul_2exp_assign(shift, quadrant, w);
-40039:           p.affine_image(x, x - shift, 1);
-40039:         }
-40039:         p.refine_with_constraint(min_value <= x);
-40039:         p.refine_with_constraint(x <= max_value);
-40039:         hull.upper_bound_assign(p);
-40039:       }
-40039:       pointset.m_swap(hull);
-40039:     }
-40039:     else if (wrap_individually || !collective_wrap_too_complex) {
-40039:       ((void) 0);
-40039:       dimensions_to_be_translated.insert(x);
-40039:       translations
-40039:         .push_back(Wrap_Dim_Translations(x, first_quadrant, last_quadrant));
-40039:     }
-40039:   }
-40039: 
-40039:   if (!translations.empty()) {
-40039:     if (wrap_individually) {
-40039:       ((void) 0);
-40039:       wrap_assign_ind(pointset, dimensions_to_be_translated,
-40039:                       translations.begin(), translations.end(),
-40039:                       w, min_value, max_value, *cs_p, l_n, l_d);
-40039:     }
-40039:     else {
-40039:       PSET hull(space_dim, EMPTY);
-40039:       wrap_assign_col(hull, pointset, dimensions_to_be_translated,
-40039:                       translations.begin(), translations.end(),
-40039:                       w, min_value, max_value, cs_p, l_n);
-40039:       pointset.m_swap(hull);
-40039:     }
-40039:   }
-40039: 
-40039:   if (cs_p != 0) {
-40039:     pointset.refine_with_constraints(*cs_p);
-40039:   }
-40039:   pointset.refine_with_constraints(full_range_bounds);
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 35 "../../src/Octagonal_Shape_inlines.hh" 2
-40039: 
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: namespace Octagonal_Shapes {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: inline dimension_type
-40039: coherent_index(const dimension_type i) {
-40039:   return (i % 2 != 0) ? (i-1) : (i+1);
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: Octagonal_Shape<T>::max_space_dimension() {
-40039:   return OR_Matrix<N>::max_num_rows()/2;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Octagonal_Shape<T>::marked_zero_dim_univ() const {
-40039:   return status.test_zero_dim_univ();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Octagonal_Shape<T>::marked_strongly_closed() const {
-40039:   return status.test_strongly_closed();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Octagonal_Shape<T>::marked_empty() const {
-40039:   return status.test_empty();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::set_zero_dim_univ() {
-40039:   status.set_zero_dim_univ();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::set_empty() {
-40039:   status.set_empty();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::set_strongly_closed() {
-40039:   status.set_strongly_closed();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::reset_strongly_closed() {
-40039:   status.reset_strongly_closed();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: Octagonal_Shape<T>::Octagonal_Shape(const dimension_type num_dimensions,
-40039:                                     const Degenerate_Element kind)
-40039:   : matrix(num_dimensions), space_dim(num_dimensions), status() {
-40039:   if (kind == EMPTY) {
-40039:     set_empty();
-40039:   }
-40039:   else if (num_dimensions > 0) {
-40039: 
-40039:     set_strongly_closed();
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: Octagonal_Shape<T>::Octagonal_Shape(const Octagonal_Shape& y, Complexity_Class)
-40039:   : matrix(y.matrix), space_dim(y.space_dim), status(y.status) {
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline
-40039: Octagonal_Shape<T>::Octagonal_Shape(const Octagonal_Shape<U>& y,
-40039:                                     Complexity_Class)
-40039: 
-40039: 
-40039:   : matrix((y.strong_closure_assign(), y.matrix)),
-40039:     space_dim(y.space_dim),
-40039:     status() {
-40039: 
-40039:   if (y.marked_empty()) {
-40039:     set_empty();
-40039:   }
-40039:   else if (y.marked_zero_dim_univ()) {
-40039:     set_zero_dim_univ();
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: Octagonal_Shape<T>::Octagonal_Shape(const Constraint_System& cs)
-40039:   : matrix(cs.space_dimension()),
-40039:     space_dim(cs.space_dimension()),
-40039:     status() {
-40039:   if (cs.space_dimension() > 0) {
-40039: 
-40039:     set_strongly_closed();
-40039:   }
-40039:   add_constraints(cs);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: Octagonal_Shape<T>::Octagonal_Shape(const Congruence_System& cgs)
-40039:   : matrix(cgs.space_dimension()),
-40039:     space_dim(cgs.space_dimension()),
-40039:     status() {
-40039:   if (cgs.space_dimension() > 0) {
-40039: 
-40039:     set_strongly_closed();
-40039:   }
-40039:   add_congruences(cgs);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Interval>
-40039: inline
-40039: Octagonal_Shape<T>::Octagonal_Shape(const Box<Interval>& box,
-40039:                                     Complexity_Class)
-40039:   : matrix(box.space_dimension()),
-40039:     space_dim(box.space_dimension()),
-40039:     status() {
-40039: 
-40039:   if (box.is_empty()) {
-40039:     set_empty();
-40039:   }
-40039:   else if (box.space_dimension() > 0) {
-40039: 
-40039:     set_strongly_closed();
-40039:     refine_with_constraints(box.constraints());
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: Octagonal_Shape<T>::Octagonal_Shape(const Grid& grid,
-40039:                                     Complexity_Class)
-40039:   : matrix(grid.space_dimension()),
-40039:     space_dim(grid.space_dimension()),
-40039:     status() {
-40039:   if (grid.space_dimension() > 0) {
-40039: 
-40039:     set_strongly_closed();
-40039:   }
-40039: 
-40039:   refine_with_congruences(grid.minimized_congruences());
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline
-40039: Octagonal_Shape<T>::Octagonal_Shape(const BD_Shape<U>& bd,
-40039:                                     Complexity_Class)
-40039:   : matrix(bd.space_dimension()),
-40039:     space_dim(bd.space_dimension()),
-40039:     status() {
-40039: 
-40039:   if (bd.is_empty()) {
-40039:     set_empty();
-40039:   }
-40039:   else if (bd.space_dimension() > 0) {
-40039: 
-40039:     set_strongly_closed();
-40039:     refine_with_constraints(bd.constraints());
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline Congruence_System
-40039: Octagonal_Shape<T>::congruences() const {
-40039:   return minimized_congruences();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline Octagonal_Shape<T>&
-40039: Octagonal_Shape<T>::operator=(const Octagonal_Shape& y) {
-40039:   matrix = y.matrix;
-40039:   space_dim = y.space_dim;
-40039:   status = y.status;
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: Octagonal_Shape<T>::~Octagonal_Shape() {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::m_swap(Octagonal_Shape& y) {
-40039:   using std::swap;
-40039:   swap(matrix, y.matrix);
-40039:   swap(space_dim, y.space_dim);
-40039:   swap(status, y.status);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: Octagonal_Shape<T>::space_dimension() const {
-40039:   return space_dim;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Octagonal_Shape<T>::is_discrete() const {
-40039:   return affine_dimension() == 0;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Octagonal_Shape<T>::is_empty() const {
-40039:   strong_closure_assign();
-40039:   return marked_empty();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Octagonal_Shape<T>::bounds_from_above(const Linear_Expression& expr) const {
-40039:   return bounds(expr, true);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Octagonal_Shape<T>::bounds_from_below(const Linear_Expression& expr) const {
-40039:   return bounds(expr, false);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Octagonal_Shape<T>::maximize(const Linear_Expression& expr,
-40039:                              Coefficient& sup_n, Coefficient& sup_d,
-40039:                              bool& maximum) const {
-40039:   return max_min(expr, true, sup_n, sup_d, maximum);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Octagonal_Shape<T>::maximize(const Linear_Expression& expr,
-40039:                              Coefficient& sup_n, Coefficient& sup_d,
-40039:                              bool& maximum,
-40039:                              Generator& g) const {
-40039:   return max_min(expr, true, sup_n, sup_d, maximum, g);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Octagonal_Shape<T>::minimize(const Linear_Expression& expr,
-40039:                              Coefficient& inf_n, Coefficient& inf_d,
-40039:                              bool& minimum) const {
-40039:   return max_min(expr, false, inf_n, inf_d, minimum);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Octagonal_Shape<T>::minimize(const Linear_Expression& expr,
-40039:                              Coefficient& inf_n, Coefficient& inf_d,
-40039:                              bool& minimum,
-40039:                              Generator& g) const {
-40039:   return max_min(expr, false, inf_n, inf_d, minimum, g);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Octagonal_Shape<T>::is_topologically_closed() const {
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::topological_closure_assign() {
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: operator==(const Octagonal_Shape<T>& x, const Octagonal_Shape<T>& y) {
-40039:   if (x.space_dim != y.space_dim) {
-40039: 
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (x.space_dim == 0) {
-40039:     if (x.marked_empty()) {
-40039:       return y.marked_empty();
-40039:     }
-40039:     else {
-40039:       return !y.marked_empty();
-40039:     }
-40039:   }
-40039: 
-40039:   x.strong_closure_assign();
-40039:   y.strong_closure_assign();
-40039: 
-40039: 
-40039:   if (x.marked_empty()) {
-40039:     return y.marked_empty();
-40039:   }
-40039:   if (y.marked_empty()) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   return x.matrix == y.matrix;
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: operator!=(const Octagonal_Shape<T>& x, const Octagonal_Shape<T>& y) {
-40039:   return !(x == y);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline const typename Octagonal_Shape<T>::coefficient_type&
-40039: Octagonal_Shape<T>::matrix_at(const dimension_type i,
-40039:                               const dimension_type j) const {
-40039:   ((void) 0);
-40039:   using namespace Implementation::Octagonal_Shapes;
-40039:   return (j < matrix.row_size(i))
-40039:     ? matrix[i][j]
-40039:     : matrix[coherent_index(j)][coherent_index(i)];
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename Octagonal_Shape<T>::coefficient_type&
-40039: Octagonal_Shape<T>::matrix_at(const dimension_type i,
-40039:                               const dimension_type j) {
-40039:   ((void) 0);
-40039:   using namespace Implementation::Octagonal_Shapes;
-40039:   return (j < matrix.row_size(i))
-40039:     ? matrix[i][j]
-40039:     : matrix[coherent_index(j)][coherent_index(i)];
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline Constraint_System
-40039: Octagonal_Shape<T>::minimized_constraints() const {
-40039:   strong_reduction_assign();
-40039:   return constraints();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::add_octagonal_constraint(const dimension_type i,
-40039:                                              const dimension_type j,
-40039:                                              const N& k) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   N& r_i_j = matrix[i][j];
-40039:   if (r_i_j > k) {
-40039:     r_i_j = k;
-40039:     if (marked_strongly_closed()) {
-40039:       reset_strongly_closed();
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>
-40039: ::add_octagonal_constraint(const dimension_type i,
-40039:                            const dimension_type j,
-40039:                            Coefficient_traits::const_reference numer,
-40039:                            Coefficient_traits::const_reference denom) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_k; N& k = holder_k.item();
-40039:   div_round_up(k, numer, denom);
-40039:   add_octagonal_constraint(i, j, k);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::add_constraints(const Constraint_System& cs) {
-40039:   for (Constraint_System::const_iterator i = cs.begin(),
-40039:          i_end = cs.end(); i != i_end; ++i) {
-40039:     add_constraint(*i);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::add_recycled_constraints(Constraint_System& cs) {
-40039:   add_constraints(cs);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::add_recycled_congruences(Congruence_System& cgs) {
-40039:   add_congruences(cgs);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::add_congruences(const Congruence_System& cgs) {
-40039:   for (Congruence_System::const_iterator i = cgs.begin(),
-40039:          cgs_end = cgs.end(); i != cgs_end; ++i) {
-40039:     add_congruence(*i);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::refine_with_constraint(const Constraint& c) {
-40039: 
-40039:   if (c.space_dimension() > space_dimension()) {
-40039:     throw_dimension_incompatible("refine_with_constraint(c)", c);
-40039:   }
-40039: 
-40039:   if (!marked_empty()) {
-40039:     refine_no_check(c);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::refine_with_constraints(const Constraint_System& cs) {
-40039: 
-40039:   if (cs.space_dimension() > space_dimension()) {
-40039:     throw_invalid_argument("refine_with_constraints(cs)",
-40039:                            "cs and *this are space-dimension incompatible");
-40039:   }
-40039: 
-40039:   for (Constraint_System::const_iterator i = cs.begin(),
-40039:          cs_end = cs.end(); !marked_empty() && i != cs_end; ++i) {
-40039:     refine_no_check(*i);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::refine_with_congruence(const Congruence& cg) {
-40039:   const dimension_type cg_space_dim = cg.space_dimension();
-40039: 
-40039:   if (cg_space_dim > space_dimension()) {
-40039:     throw_dimension_incompatible("refine_with_congruence(cg)", cg);
-40039:   }
-40039:   if (!marked_empty()) {
-40039:     refine_no_check(cg);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::refine_with_congruences(const Congruence_System& cgs) {
-40039: 
-40039:   if (cgs.space_dimension() > space_dimension()) {
-40039:     throw_invalid_argument("refine_with_congruences(cgs)",
-40039:                            "cgs and *this are space-dimension incompatible");
-40039:   }
-40039: 
-40039:   for (Congruence_System::const_iterator i = cgs.begin(),
-40039:          cgs_end = cgs.end(); !marked_empty() && i != cgs_end; ++i) {
-40039:     refine_no_check(*i);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::refine_no_check(const Congruence& cg) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039:   if (cg.is_proper_congruence()) {
-40039:     if (cg.is_inconsistent()) {
-40039:       set_empty();
-40039:     }
-40039: 
-40039:     return;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   Constraint c(cg);
-40039:   refine_no_check(c);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Octagonal_Shape<T>::can_recycle_constraint_systems() {
-40039:   return false;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Octagonal_Shape<T>::can_recycle_congruence_systems() {
-40039:   return false;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>
-40039: ::remove_higher_space_dimensions(const dimension_type new_dimension) {
-40039: 
-40039:   if (new_dimension > space_dim) {
-40039:     throw_dimension_incompatible("remove_higher_space_dimension(nd)",
-40039:                                  new_dimension);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (new_dimension == space_dim) {
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039:   strong_closure_assign();
-40039:   matrix.shrink(new_dimension);
-40039: 
-40039: 
-40039:   if (new_dimension == 0 && !marked_empty()) {
-40039:     set_zero_dim_univ();
-40039:   }
-40039:   space_dim = new_dimension;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::wrap_assign(const Variables_Set& vars,
-40039:                                 Bounded_Integer_Type_Width w,
-40039:                                 Bounded_Integer_Type_Representation r,
-40039:                                 Bounded_Integer_Type_Overflow o,
-40039:                                 const Constraint_System* cs_p,
-40039:                                 unsigned complexity_threshold,
-40039:                                 bool wrap_individually) {
-40039:   Implementation::wrap_assign(*this,
-40039:                               vars, w, r, o, cs_p,
-40039:                               complexity_threshold, wrap_individually,
-40039:                               "Octagonal_Shape");
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::widening_assign(const Octagonal_Shape& y, unsigned* tp) {
-40039:   BHMZ05_widening_assign(y, tp);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::CC76_extrapolation_assign(const Octagonal_Shape& y,
-40039:                                               unsigned* tp) {
-40039:   static N stop_points[] = {
-40039:     N(-2, ROUND_UP),
-40039:     N(-1, ROUND_UP),
-40039:     N( 0, ROUND_UP),
-40039:     N( 1, ROUND_UP),
-40039:     N( 2, ROUND_UP)
-40039:   };
-40039:   CC76_extrapolation_assign(y,
-40039:                             stop_points,
-40039:                             stop_points
-40039:                             + sizeof(stop_points)/sizeof(stop_points[0]),
-40039:                             tp);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::time_elapse_assign(const Octagonal_Shape& y) {
-40039: 
-40039:   if (space_dimension() != y.space_dimension()) {
-40039:     throw_dimension_incompatible("time_elapse_assign(y)", y);
-40039:   }
-40039: 
-40039: 
-40039:   C_Polyhedron ph_x(constraints());
-40039:   C_Polyhedron ph_y(y.constraints());
-40039:   ph_x.time_elapse_assign(ph_y);
-40039:   Octagonal_Shape<T> x(ph_x);
-40039:   m_swap(x);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: Octagonal_Shape<T>::strictly_contains(const Octagonal_Shape& y) const {
-40039:   const Octagonal_Shape<T>& x = *this;
-40039:   return x.contains(y) && !y.contains(x);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Interval_Info>
-40039: inline void
-40039: Octagonal_Shape<T>::generalized_refine_with_linear_form_inequality(
-40039:                     const Linear_Form< Interval<T, Interval_Info> >& left,
-40039:                     const Linear_Form< Interval<T, Interval_Info> >& right,
-40039:                     const Relation_Symbol relsym) {
-40039:   switch (relsym) {
-40039:   case EQUAL:
-40039: 
-40039:     refine_with_linear_form_inequality(left, right);
-40039:     refine_with_linear_form_inequality(right, left);
-40039:     break;
-40039:   case LESS_THAN:
-40039:   case LESS_OR_EQUAL:
-40039:     refine_with_linear_form_inequality(left, right);
-40039:     break;
-40039:   case GREATER_THAN:
-40039:   case GREATER_OR_EQUAL:
-40039:     refine_with_linear_form_inequality(right, left);
-40039:     break;
-40039:   case NOT_EQUAL:
-40039:     break;
-40039:   default:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     break;
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Interval_Info>
-40039: inline void
-40039: Octagonal_Shape<T>::
-40039: refine_fp_interval_abstract_store(
-40039:           Box< Interval<T, Interval_Info> >& store) const {
-40039: 
-40039: 
-40039:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_683 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<T>::is_exact)>) }
-40039: 
-40039:                                                      ;
-40039: 
-40039:   typedef Interval<T, Interval_Info> FP_Interval_Type;
-40039:   store.intersection_assign(Box<FP_Interval_Type>(*this));
-40039: 
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename T>
-40039: inline bool
-40039: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                             const Octagonal_Shape<T>& x,
-40039:                             const Octagonal_Shape<T>& y,
-40039:                             const Rounding_Dir dir,
-40039:                             Temp& tmp0,
-40039:                             Temp& tmp1,
-40039:                             Temp& tmp2) {
-40039: 
-40039:   if (x.space_dim != y.space_dim) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (x.space_dim == 0) {
-40039:     if (x.marked_empty() == y.marked_empty()) {
-40039:       assign_r(r, 0, ROUND_NOT_NEEDED);
-40039:     }
-40039:     else {
-40039:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     }
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   x.strong_closure_assign();
-40039:   y.strong_closure_assign();
-40039: 
-40039: 
-40039: 
-40039:   if (x.marked_empty() || y.marked_empty()) {
-40039:     if (x.marked_empty() == y.marked_empty()) {
-40039:       assign_r(r, 0, ROUND_NOT_NEEDED);
-40039:     }
-40039:     else {
-40039:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     }
-40039:     return true;
-40039:   }
-40039: 
-40039:   return rectilinear_distance_assign(r, x.matrix, y.matrix, dir,
-40039:                                      tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename T>
-40039: inline bool
-40039: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                             const Octagonal_Shape<T>& x,
-40039:                             const Octagonal_Shape<T>& y,
-40039:                             const Rounding_Dir dir) {
-40039:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
-40039:   return rectilinear_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename To, typename T>
-40039: inline bool
-40039: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                             const Octagonal_Shape<T>& x,
-40039:                             const Octagonal_Shape<T>& y,
-40039:                             const Rounding_Dir dir) {
-40039:   return rectilinear_distance_assign<To, To, T>(r, x, y, dir);
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename T>
-40039: inline bool
-40039: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                           const Octagonal_Shape<T>& x,
-40039:                           const Octagonal_Shape<T>& y,
-40039:                           const Rounding_Dir dir,
-40039:                           Temp& tmp0,
-40039:                           Temp& tmp1,
-40039:                           Temp& tmp2) {
-40039: 
-40039:   if (x.space_dim != y.space_dim) {
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039:   if (x.space_dim == 0) {
-40039:     if (x.marked_empty() == y.marked_empty()) {
-40039:       assign_r(r, 0, ROUND_NOT_NEEDED);
-40039:     }
-40039:     else {
-40039:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     }
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   x.strong_closure_assign();
-40039:   y.strong_closure_assign();
-40039: 
-40039: 
-40039: 
-40039:   if (x.marked_empty() || y.marked_empty()) {
-40039:     if (x.marked_empty() == y.marked_empty()) {
-40039:       assign_r(r, 0, ROUND_NOT_NEEDED);
-40039:     }
-40039:     else {
-40039:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     }
-40039:     return true;
-40039:   }
-40039: 
-40039:   return euclidean_distance_assign(r, x.matrix, y.matrix, dir,
-40039:                                    tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename T>
-40039: inline bool
-40039: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                           const Octagonal_Shape<T>& x,
-40039:                           const Octagonal_Shape<T>& y,
-40039:                           const Rounding_Dir dir) {
-40039:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
-40039:   return euclidean_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename To, typename T>
-40039: inline bool
-40039: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                           const Octagonal_Shape<T>& x,
-40039:                           const Octagonal_Shape<T>& y,
-40039:                           const Rounding_Dir dir) {
-40039:   return euclidean_distance_assign<To, To, T>(r, x, y, dir);
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename T>
-40039: inline bool
-40039: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                            const Octagonal_Shape<T>& x,
-40039:                            const Octagonal_Shape<T>& y,
-40039:                            const Rounding_Dir dir,
-40039:                            Temp& tmp0,
-40039:                            Temp& tmp1,
-40039:                            Temp& tmp2) {
-40039: 
-40039:   if (x.space_dim != y.space_dim) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (x.space_dim == 0) {
-40039:     if (x.marked_empty() == y.marked_empty()) {
-40039:       assign_r(r, 0, ROUND_NOT_NEEDED);
-40039:     }
-40039:     else {
-40039:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     }
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   x.strong_closure_assign();
-40039:   y.strong_closure_assign();
-40039: 
-40039: 
-40039: 
-40039:   if (x.marked_empty() || y.marked_empty()) {
-40039:     if (x.marked_empty() == y.marked_empty()) {
-40039:       assign_r(r, 0, ROUND_NOT_NEEDED);
-40039:     }
-40039:     else {
-40039:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     }
-40039:     return true;
-40039:   }
-40039: 
-40039:   return l_infinity_distance_assign(r, x.matrix, y.matrix, dir,
-40039:                                     tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename T>
-40039: inline bool
-40039: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                            const Octagonal_Shape<T>& x,
-40039:                            const Octagonal_Shape<T>& y,
-40039:                            const Rounding_Dir dir) {
-40039:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
-40039:   return l_infinity_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename To, typename T>
-40039: inline bool
-40039: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                            const Octagonal_Shape<T>& x,
-40039:                            const Octagonal_Shape<T>& y,
-40039:                            const Rounding_Dir dir) {
-40039:   return l_infinity_distance_assign<To, To, T>(r, x, y, dir);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline memory_size_type
-40039: Octagonal_Shape<T>::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline int32_t
-40039: Octagonal_Shape<T>::hash_code() const {
-40039:   return hash_code_from_dimension(space_dimension());
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Octagonal_Shape<T>::drop_some_non_integer_points_helper(N& elem) {
-40039:   if (!is_integer(elem)) {
-40039: 
-40039: 
-40039: 
-40039:     floor_assign_r(elem, elem, ROUND_DOWN);
-40039:     ((void) 0);
-40039:     reset_strongly_closed();
-40039:   }
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: swap(Octagonal_Shape<T>& x, Octagonal_Shape<T>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 2328 "../../src/Octagonal_Shape_defs.hh" 2
-40039: # 1 "../../src/Octagonal_Shape_templates.hh" 1
-40039: # 43 "../../src/Octagonal_Shape_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: Octagonal_Shape<T>::Octagonal_Shape(const Polyhedron& ph,
-40039:                                     const Complexity_Class complexity)
-40039:   : matrix(0), space_dim(0), status() {
-40039:   const dimension_type num_dimensions = ph.space_dimension();
-40039: 
-40039:   if (ph.marked_empty()) {
-40039:     *this = Octagonal_Shape(num_dimensions, EMPTY);
-40039:     return;
-40039:   }
-40039: 
-40039:   if (num_dimensions == 0) {
-40039:     *this = Octagonal_Shape(num_dimensions, UNIVERSE);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (complexity == ANY_COMPLEXITY
-40039:       || (!ph.has_pending_constraints() && ph.generators_are_up_to_date())) {
-40039:     *this = Octagonal_Shape(ph.generators());
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: 
-40039:   if (!ph.has_something_pending() && ph.constraints_are_minimized()) {
-40039: 
-40039: 
-40039:     if (ph.is_universe()) {
-40039:       *this = Octagonal_Shape(num_dimensions, UNIVERSE);
-40039:       return;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   for (Constraint_System::const_iterator i = ph.con_sys.begin(),
-40039:          cs_end = ph.con_sys.end(); i != cs_end; ++i) {
-40039:     if (i->is_inconsistent()) {
-40039:       *this = Octagonal_Shape(num_dimensions, EMPTY);
-40039:       return;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (complexity == SIMPLEX_COMPLEXITY) {
-40039:     MIP_Problem lp(num_dimensions);
-40039:     lp.set_optimization_mode(MAXIMIZATION);
-40039: 
-40039:     const Constraint_System& ph_cs = ph.constraints();
-40039:     if (!ph_cs.has_strict_inequalities()) {
-40039:       lp.add_constraints(ph_cs);
-40039:     }
-40039:     else {
-40039: 
-40039:       for (Constraint_System::const_iterator i = ph_cs.begin(),
-40039:              ph_cs_end = ph_cs.end(); i != ph_cs_end; ++i) {
-40039:         const Constraint& c = *i;
-40039:         if (c.is_strict_inequality()) {
-40039:           Linear_Expression expr(c.expression());
-40039:           lp.add_constraint(expr >= 0);
-40039:         }
-40039:         else {
-40039:           lp.add_constraint(c);
-40039:         }
-40039:       }
-40039:     }
-40039: 
-40039: 
-40039:     if (!lp.is_satisfiable()) {
-40039:       *this = Octagonal_Shape<T>(num_dimensions, EMPTY);
-40039:       return;
-40039:     }
-40039: 
-40039: 
-40039:     *this = Octagonal_Shape<T>(num_dimensions, UNIVERSE);
-40039: 
-40039:     Generator g(point());
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
-40039:     for (dimension_type i = 0; i < num_dimensions; ++i) {
-40039:       Variable x(i);
-40039: 
-40039:       lp.set_objective_function(x);
-40039:       if (lp.solve() == OPTIMIZED_MIP_PROBLEM) {
-40039:         g = lp.optimizing_point();
-40039:         lp.evaluate_objective_function(g, numer, denom);
-40039:         numer *= 2;
-40039:         div_round_up(matrix[2*i + 1][2*i], numer, denom);
-40039:       }
-40039: 
-40039:       for (dimension_type j = 0; j < i; ++j) {
-40039:         Variable y(j);
-40039:         lp.set_objective_function(x + y);
-40039:         if (lp.solve() == OPTIMIZED_MIP_PROBLEM) {
-40039:           g = lp.optimizing_point();
-40039:           lp.evaluate_objective_function(g, numer, denom);
-40039:           div_round_up(matrix[2*i + 1][2*j], numer, denom);
-40039:         }
-40039:       }
-40039: 
-40039:       for (dimension_type j = 0; j < num_dimensions; ++j) {
-40039:         if (i == j) {
-40039:           continue;
-40039:         }
-40039:         Variable y(j);
-40039:         lp.set_objective_function(x - y);
-40039:         if (lp.solve() == OPTIMIZED_MIP_PROBLEM) {
-40039:           g = lp.optimizing_point();
-40039:           lp.evaluate_objective_function(g, numer, denom);
-40039:           div_round_up(((i < j) ?
-40039:                         matrix[2*j][2*i]
-40039:                         : matrix[2*i + 1][2*j + 1]),
-40039:                        numer, denom);
-40039:         }
-40039:       }
-40039: 
-40039:       for (dimension_type j = 0; j < num_dimensions; ++j) {
-40039:         if (i == j) {
-40039:           continue;
-40039:         }
-40039:         Variable y(j);
-40039:         lp.set_objective_function(x - y);
-40039:         if (lp.solve() == OPTIMIZED_MIP_PROBLEM) {
-40039:           g = lp.optimizing_point();
-40039:           lp.evaluate_objective_function(g, numer, denom);
-40039:           div_round_up(((i < j)
-40039:                         ? matrix[2*j][2*i]
-40039:                         : matrix[2*i + 1][2*j + 1]),
-40039:                        numer, denom);
-40039:         }
-40039:       }
-40039: 
-40039:       for (dimension_type j = 0; j < i; ++j) {
-40039:         Variable y(j);
-40039:         lp.set_objective_function(-x - y);
-40039:         if (lp.solve() == OPTIMIZED_MIP_PROBLEM) {
-40039:           g = lp.optimizing_point();
-40039:           lp.evaluate_objective_function(g, numer, denom);
-40039:           div_round_up(matrix[2*i][2*j + 1], numer, denom);
-40039:         }
-40039:       }
-40039: 
-40039:       lp.set_objective_function(-x);
-40039:       if (lp.solve() == OPTIMIZED_MIP_PROBLEM) {
-40039:         g = lp.optimizing_point();
-40039:         lp.evaluate_objective_function(g, numer, denom);
-40039:         numer *= 2;
-40039:         div_round_up(matrix[2*i][2*i + 1], numer, denom);
-40039:       }
-40039:     }
-40039:     set_strongly_closed();
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   *this = Octagonal_Shape(num_dimensions, UNIVERSE);
-40039:   refine_with_constraints(ph.constraints());
-40039: }
-40039: 
-40039: template <typename T>
-40039: Octagonal_Shape<T>::Octagonal_Shape(const Generator_System& gs)
-40039:   : matrix(gs.space_dimension()),
-40039:     space_dim(gs.space_dimension()),
-40039:     status() {
-40039:   const Generator_System::const_iterator gs_begin = gs.begin();
-40039:   const Generator_System::const_iterator gs_end = gs.end();
-40039:   if (gs_begin == gs_end) {
-40039: 
-40039:     set_empty();
-40039:     return;
-40039:   }
-40039: 
-40039:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
-40039:   typename OR_Matrix<N>::row_iterator mat_begin = matrix.row_begin();
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_tmp; N& tmp = holder_tmp.item();
-40039:   bool mat_initialized = false;
-40039:   bool point_seen = false;
-40039: 
-40039:   for (Generator_System::const_iterator k = gs_begin; k != gs_end; ++k) {
-40039:     const Generator& g = *k;
-40039:     switch (g.type()) {
-40039:     case Generator::POINT:
-40039:       point_seen = true;
-40039: 
-40039:     case Generator::CLOSURE_POINT:
-40039:       if (!mat_initialized) {
-40039: 
-40039:         mat_initialized = true;
-40039:         const Coefficient& d = g.divisor();
-40039: 
-40039: 
-40039: 
-40039:         for (dimension_type i = 0; i < space_dim; ++i) {
-40039:           const Coefficient& g_i = g.coefficient(Variable(i));
-40039:           const dimension_type di = 2*i;
-40039:           row_reference x_i = *(mat_begin + di);
-40039:           row_reference x_ii = *(mat_begin + (di + 1));
-40039:           for (dimension_type j = 0; j < i; ++j) {
-40039:             const Coefficient& g_j = g.coefficient(Variable(j));
-40039:             const dimension_type dj = 2*j;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:             div_round_up(x_i[dj], g_j - g_i, d);
-40039:             div_round_up(x_ii[dj + 1], g_i - g_j, d);
-40039: 
-40039:             div_round_up(x_i[dj + 1], -g_j - g_i, d);
-40039:             div_round_up(x_ii[dj], g_i + g_j, d);
-40039:           }
-40039: 
-40039:           div_round_up(x_i[di + 1], -g_i - g_i, d);
-40039:           div_round_up(x_ii[di], g_i + g_i, d);
-40039:         }
-40039:       }
-40039:       else {
-40039: 
-40039: 
-40039:         const Coefficient& d = g.divisor();
-40039: 
-40039: 
-40039: 
-40039:         for (dimension_type i = 0; i < space_dim; ++i) {
-40039:           const Coefficient& g_i = g.coefficient(Variable(i));
-40039:           const dimension_type di = 2*i;
-40039:           row_reference x_i = *(mat_begin + di);
-40039:           row_reference x_ii = *(mat_begin + (di + 1));
-40039:           for (dimension_type j = 0; j < i; ++j) {
-40039:             const Coefficient& g_j = g.coefficient(Variable(j));
-40039:             const dimension_type dj = 2*j;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:             div_round_up(tmp, g_j - g_i, d);
-40039:             max_assign(x_i[dj], tmp);
-40039:             div_round_up(tmp, g_i - g_j, d);
-40039:             max_assign(x_ii[dj + 1], tmp);
-40039: 
-40039:             div_round_up(tmp, -g_j - g_i, d);
-40039:             max_assign(x_i[dj + 1], tmp);
-40039:             div_round_up(tmp, g_i + g_j, d);
-40039:             max_assign(x_ii[dj], tmp);
-40039:           }
-40039: 
-40039:           div_round_up(tmp, -g_i - g_i, d);
-40039:           max_assign(x_i[di + 1], tmp);
-40039:           div_round_up(tmp, g_i + g_i, d);
-40039:           max_assign(x_ii[di], tmp);
-40039:         }
-40039:       }
-40039:       break;
-40039:     default:
-40039: 
-40039:       break;
-40039:     }
-40039:   }
-40039: 
-40039:   if (!point_seen) {
-40039: 
-40039:     throw_invalid_argument("Octagonal_Shape(gs)",
-40039:                            "the non-empty generator system gs "
-40039:                            "contains no points.");
-40039:   }
-40039: 
-40039: 
-40039:   for (Generator_System::const_iterator k = gs_begin; k != gs_end; ++k) {
-40039:     const Generator& g = *k;
-40039:     switch (g.type()) {
-40039:     case Generator::LINE:
-40039: 
-40039: 
-40039: 
-40039:         for (dimension_type i = 0; i < space_dim; ++i) {
-40039:           const Coefficient& g_i = g.coefficient(Variable(i));
-40039:           const dimension_type di = 2*i;
-40039:           row_reference x_i = *(mat_begin + di);
-40039:           row_reference x_ii = *(mat_begin + (di + 1));
-40039:           for (dimension_type j = 0; j < i; ++j) {
-40039:             const Coefficient& g_j = g.coefficient(Variable(j));
-40039:             const dimension_type dj = 2*j;
-40039: 
-40039:             if (g_i != g_j) {
-40039: 
-40039:               assign_r(x_i[dj], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:               assign_r(x_ii[dj + 1], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:             }
-40039:             if (g_i != -g_j) {
-40039: 
-40039:               assign_r(x_i[dj + 1], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:               assign_r(x_ii[dj], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:             }
-40039:           }
-40039:           if (g_i != 0) {
-40039: 
-40039:             assign_r(x_i[di + 1], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:             assign_r(x_ii[di], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:           }
-40039:         }
-40039:       break;
-40039:     case Generator::RAY:
-40039: 
-40039: 
-40039: 
-40039:         for (dimension_type i = 0; i < space_dim; ++i) {
-40039:           const Coefficient& g_i = g.coefficient(Variable(i));
-40039:           const dimension_type di = 2*i;
-40039:           row_reference x_i = *(mat_begin + di);
-40039:           row_reference x_ii = *(mat_begin + (di + 1));
-40039:           for (dimension_type j = 0; j < i; ++j) {
-40039:             const Coefficient& g_j = g.coefficient(Variable(j));
-40039:             const dimension_type dj = 2*j;
-40039: 
-40039: 
-40039:             if (g_i < g_j) {
-40039: 
-40039:               assign_r(x_i[dj], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:             }
-40039:             if (g_i > g_j) {
-40039: 
-40039:               assign_r(x_ii[dj + 1], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:             }
-40039:             if (g_i < -g_j) {
-40039: 
-40039:               assign_r(x_i[dj + 1], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:             }
-40039:             if (g_i > -g_j) {
-40039: 
-40039:               assign_r(x_ii[dj], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:             }
-40039:           }
-40039: 
-40039:           if (g_i < 0) {
-40039: 
-40039:             assign_r(x_i[di + 1], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:           }
-40039:           if (g_i > 0) {
-40039: 
-40039:             assign_r(x_ii[di], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:           }
-40039:         }
-40039:       break;
-40039:     default:
-40039: 
-40039:       break;
-40039:     }
-40039:   }
-40039:   set_strongly_closed();
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::add_constraint(const Constraint& c) {
-40039:   const dimension_type c_space_dim = c.space_dimension();
-40039: 
-40039:   if (c_space_dim > space_dim) {
-40039:     throw_dimension_incompatible("add_constraint(c)", c);
-40039:   }
-40039: 
-40039:   if (c.is_strict_inequality()) {
-40039:     if (c.is_inconsistent()) {
-40039:       set_empty();
-40039:       return;
-40039:     }
-40039:     if (c.is_tautological()) {
-40039:       return;
-40039:     }
-40039: 
-40039:     throw_invalid_argument("add_constraint(c)",
-40039:                            "strict inequalities are not allowed");
-40039:   }
-40039: 
-40039:   dimension_type num_vars = 0;
-40039:   dimension_type i = 0;
-40039:   dimension_type j = 0;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_term; Parma_Polyhedra_Library::Coefficient& term = holder_term.item();
-40039: 
-40039:   if (!Octagonal_Shape_Helper
-40039:     ::extract_octagonal_difference(c, c_space_dim, num_vars,
-40039:                                    i, j, coeff, term)) {
-40039:     throw_invalid_argument("add_constraint(c)",
-40039:                            "c is not an octagonal constraint");
-40039:   }
-40039: 
-40039:   if (num_vars == 0) {
-40039: 
-40039:     if (c.inhomogeneous_term() < 0
-40039:         || (c.is_equality() && c.inhomogeneous_term() != 0)) {
-40039:       set_empty();
-40039:     }
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   typename OR_Matrix<N>::row_iterator i_iter = matrix.row_begin() + i;
-40039:   typename OR_Matrix<N>::row_reference_type m_i = *i_iter;
-40039:   N& m_i_j = m_i[j];
-40039: 
-40039:   if (coeff < 0) {
-40039:     neg_assign(coeff);
-40039:   }
-40039: 
-40039:   bool is_oct_changed = false;
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
-40039:   div_round_up(d, term, coeff);
-40039:   if (m_i_j > d) {
-40039:     m_i_j = d;
-40039:     is_oct_changed = true;
-40039:   }
-40039: 
-40039:   if (c.is_equality()) {
-40039: 
-40039:     if (i % 2 == 0) {
-40039:       ++i_iter;
-40039:     }
-40039:     else {
-40039:       --i_iter;
-40039:     }
-40039: 
-40039:     typename OR_Matrix<N>::row_reference_type m_ci = *i_iter;
-40039:     using namespace Implementation::Octagonal_Shapes;
-40039:     dimension_type cj = coherent_index(j);
-40039:     N& m_ci_cj = m_ci[cj];
-40039: 
-40039:     neg_assign(term);
-40039:     div_round_up(d, term, coeff);
-40039:     if (m_ci_cj > d) {
-40039:       m_ci_cj = d;
-40039:       is_oct_changed = true;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   if (is_oct_changed && marked_strongly_closed()) {
-40039:     reset_strongly_closed();
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::add_congruence(const Congruence& cg) {
-40039:   const dimension_type cg_space_dim = cg.space_dimension();
-40039: 
-40039: 
-40039:   if (space_dimension() < cg_space_dim) {
-40039:     throw_dimension_incompatible("add_congruence(cg)", cg);
-40039:   }
-40039: 
-40039: 
-40039:   if (cg.is_proper_congruence()) {
-40039:     if (cg.is_tautological()) {
-40039:       return;
-40039:     }
-40039:     if (cg.is_inconsistent()) {
-40039:       set_empty();
-40039:       return;
-40039:     }
-40039: 
-40039:     throw_invalid_argument("add_congruence(cg)",
-40039:                            "cg is a non-trivial, proper congruence");
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   Constraint c(cg);
-40039:   add_constraint(c);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Interval_Info>
-40039: void
-40039: Octagonal_Shape<T>::refine_with_linear_form_inequality(
-40039:                     const Linear_Form< Interval<T, Interval_Info> >& left,
-40039:                     const Linear_Form< Interval<T, Interval_Info> >& right) {
-40039: 
-40039: 
-40039:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_534 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<T>::is_exact)>) }
-40039: 
-40039:                                                      ;
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type left_space_dim = left.space_dimension();
-40039:   if (space_dim < left_space_dim) {
-40039:     throw_dimension_incompatible(
-40039:           "refine_with_linear_form_inequality(left, right)", "left", left);
-40039:   }
-40039: 
-40039:   const dimension_type right_space_dim = right.space_dimension();
-40039:   if (space_dim < right_space_dim) {
-40039:     throw_dimension_incompatible(
-40039:           "refine_with_linear_form_inequality(left, right)", "right", right);
-40039:   }
-40039: 
-40039: 
-40039:   dimension_type left_t = 0;
-40039: 
-40039:   dimension_type left_w_id = 0;
-40039: 
-40039: 
-40039:   dimension_type right_t = 0;
-40039: 
-40039:   dimension_type right_w_id = 0;
-40039: 
-40039: 
-40039:   for (dimension_type i = left_space_dim; i-- > 0; ) {
-40039:     if (left.coefficient(Variable(i)) != 0) {
-40039:       if (left_t++ == 1) {
-40039:         break;
-40039:       }
-40039:       else {
-40039:         left_w_id = i;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   for (dimension_type i = right_space_dim; i-- > 0; ) {
-40039:     if (right.coefficient(Variable(i)) != 0) {
-40039:       if (right_t++ == 1) {
-40039:         break;
-40039:       }
-40039:       else {
-40039:         right_w_id = i;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   typedef typename OR_Matrix<N>::row_iterator row_iterator;
-40039:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
-40039:   typedef Interval<T, Interval_Info> FP_Interval_Type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (left_t == 0) {
-40039:     if (right_t == 0) {
-40039: 
-40039: 
-40039:       ((void) 0);
-40039:       return;
-40039:     }
-40039: 
-40039:     if (right_t == 1) {
-40039: 
-40039: 
-40039:       const FP_Interval_Type& right_w_coeff =
-40039:                               right.coefficient(Variable(right_w_id));
-40039:       if (right_w_coeff == 1) {
-40039:         const dimension_type n_right = right_w_id * 2;
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_b_plus_minus_a_minus; N& b_plus_minus_a_minus = holder_b_plus_minus_a_minus.item();
-40039:         const FP_Interval_Type& left_a = left.inhomogeneous_term();
-40039:         const FP_Interval_Type& right_b = right.inhomogeneous_term();
-40039:         sub_assign_r(b_plus_minus_a_minus, right_b.upper(), left_a.lower(),
-40039:                      ROUND_UP);
-40039:         mul_2exp_assign_r(b_plus_minus_a_minus, b_plus_minus_a_minus, 1,
-40039:                           ROUND_UP);
-40039:         add_octagonal_constraint(n_right, n_right + 1, b_plus_minus_a_minus);
-40039:         ((void) 0);
-40039:         return;
-40039:       }
-40039: 
-40039:       if (right_w_coeff == -1) {
-40039:         const dimension_type n_right = right_w_id * 2;
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_b_plus_minus_a_minus; N& b_plus_minus_a_minus = holder_b_plus_minus_a_minus.item();
-40039:         const FP_Interval_Type& left_a = left.inhomogeneous_term();
-40039:         const FP_Interval_Type& right_b = right.inhomogeneous_term();
-40039:         sub_assign_r(b_plus_minus_a_minus, right_b.upper(), left_a.lower(),
-40039:                      ROUND_UP);
-40039:         mul_2exp_assign_r(b_plus_minus_a_minus, b_plus_minus_a_minus, 1,
-40039:                           ROUND_UP);
-40039:         add_octagonal_constraint(n_right + 1, n_right, b_plus_minus_a_minus);
-40039:         ((void) 0);
-40039:         return;
-40039:       }
-40039:     }
-40039:   }
-40039:   else if (left_t == 1) {
-40039:     if (right_t == 0) {
-40039: 
-40039: 
-40039:       const FP_Interval_Type& left_w_coeff =
-40039:                               left.coefficient(Variable(left_w_id));
-40039:       if (left_w_coeff == 1) {
-40039:         const dimension_type n_left = left_w_id * 2;
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item();
-40039:         const FP_Interval_Type& left_b = left.inhomogeneous_term();
-40039:         const FP_Interval_Type& right_a = right.inhomogeneous_term();
-40039:         sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(),
-40039:                      ROUND_UP);
-40039:         mul_2exp_assign_r(a_plus_minus_b_minus, a_plus_minus_b_minus, 1,
-40039:                           ROUND_UP);
-40039:         add_octagonal_constraint(n_left + 1, n_left, a_plus_minus_b_minus);
-40039:         ((void) 0);
-40039:         return;
-40039:       }
-40039: 
-40039:       if (left_w_coeff == -1) {
-40039:         const dimension_type n_left = left_w_id * 2;
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item();
-40039:         const FP_Interval_Type& left_b = left.inhomogeneous_term();
-40039:         const FP_Interval_Type& right_a = right.inhomogeneous_term();
-40039:         sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(),
-40039:                      ROUND_UP);
-40039:         mul_2exp_assign_r(a_plus_minus_b_minus, a_plus_minus_b_minus, 1,
-40039:                           ROUND_UP);
-40039:         add_octagonal_constraint(n_left, n_left + 1, a_plus_minus_b_minus);
-40039:         ((void) 0);
-40039:         return;
-40039:       }
-40039:     }
-40039: 
-40039:     if (right_t == 1) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const FP_Interval_Type& left_w_coeff =
-40039:                               left.coefficient(Variable(left_w_id));
-40039:       const FP_Interval_Type& right_w_coeff =
-40039:                               right.coefficient(Variable(right_w_id));
-40039:       bool is_left_coeff_one = (left_w_coeff == 1);
-40039:       bool is_left_coeff_minus_one = (left_w_coeff == -1);
-40039:       bool is_right_coeff_one = (right_w_coeff == 1);
-40039:       bool is_right_coeff_minus_one = (right_w_coeff == -1);
-40039:       if (left_w_id == right_w_id) {
-40039:         if ((is_left_coeff_one && is_right_coeff_one)
-40039:             || (is_left_coeff_minus_one && is_right_coeff_minus_one)) {
-40039: 
-40039:           ((void) 0);
-40039:           return;
-40039:         }
-40039:         if (is_left_coeff_one && is_right_coeff_minus_one) {
-40039: 
-40039: 
-40039:           const dimension_type n_left = left_w_id * 2;
-40039:           Parma_Polyhedra_Library::Dirty_Temp<N> holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item();
-40039:           const FP_Interval_Type& left_b = left.inhomogeneous_term();
-40039:           const FP_Interval_Type& right_a = right.inhomogeneous_term();
-40039:           sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(),
-40039:                        ROUND_UP);
-40039:           add_octagonal_constraint(n_left + 1, n_left, a_plus_minus_b_minus);
-40039:           ((void) 0);
-40039:           return;
-40039:         }
-40039:         if (is_left_coeff_minus_one && is_right_coeff_one) {
-40039: 
-40039: 
-40039:           const dimension_type n_left = left_w_id * 2;
-40039:           Parma_Polyhedra_Library::Dirty_Temp<N> holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item();
-40039:           const FP_Interval_Type& left_b = left.inhomogeneous_term();
-40039:           const FP_Interval_Type& right_a = right.inhomogeneous_term();
-40039:           sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(),
-40039:                        ROUND_UP);
-40039:           add_octagonal_constraint(n_left, n_left + 1, a_plus_minus_b_minus);
-40039:           ((void) 0);
-40039:           return;
-40039:         }
-40039:       }
-40039:       else if (is_left_coeff_one && is_right_coeff_one) {
-40039:         const dimension_type n_left = left_w_id * 2;
-40039:         const dimension_type n_right = right_w_id * 2;
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_c_plus_minus_a_minus; N& c_plus_minus_a_minus = holder_c_plus_minus_a_minus.item();
-40039:         const FP_Interval_Type& left_a = left.inhomogeneous_term();
-40039:         const FP_Interval_Type& right_c = right.inhomogeneous_term();
-40039:         sub_assign_r(c_plus_minus_a_minus, right_c.upper(), left_a.lower(),
-40039:                      ROUND_UP);
-40039:         if (left_w_id < right_w_id) {
-40039:           add_octagonal_constraint(n_right, n_left, c_plus_minus_a_minus);
-40039:         }
-40039:         else {
-40039:           add_octagonal_constraint(n_left + 1, n_right + 1,
-40039:                                    c_plus_minus_a_minus);
-40039:         }
-40039:         ((void) 0);
-40039:         return;
-40039:       }
-40039:       if (is_left_coeff_one && is_right_coeff_minus_one) {
-40039:         const dimension_type n_left = left_w_id * 2;
-40039:         const dimension_type n_right = right_w_id * 2;
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_c_plus_minus_a_minus; N& c_plus_minus_a_minus = holder_c_plus_minus_a_minus.item();
-40039:         const FP_Interval_Type& left_a = left.inhomogeneous_term();
-40039:         const FP_Interval_Type& right_c = right.inhomogeneous_term();
-40039:         sub_assign_r(c_plus_minus_a_minus, right_c.upper(), left_a.lower(),
-40039:                      ROUND_UP);
-40039:         if (left_w_id < right_w_id) {
-40039:           add_octagonal_constraint(n_right + 1, n_left, c_plus_minus_a_minus);
-40039:         }
-40039:         else {
-40039:           add_octagonal_constraint(n_left + 1, n_right, c_plus_minus_a_minus);
-40039:         }
-40039:         ((void) 0);
-40039:         return;
-40039:       }
-40039:       if (is_left_coeff_minus_one && is_right_coeff_one) {
-40039:         const dimension_type n_left = left_w_id * 2;
-40039:         const dimension_type n_right = right_w_id * 2;
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_c_plus_minus_a_minus; N& c_plus_minus_a_minus = holder_c_plus_minus_a_minus.item();
-40039:         const FP_Interval_Type& left_a = left.inhomogeneous_term();
-40039:         const FP_Interval_Type& right_c = right.inhomogeneous_term();
-40039:         sub_assign_r(c_plus_minus_a_minus, right_c.upper(), left_a.lower(),
-40039:                      ROUND_UP);
-40039:         if (left_w_id < right_w_id) {
-40039:           add_octagonal_constraint(n_right, n_left + 1, c_plus_minus_a_minus);
-40039:         }
-40039:         else {
-40039:           add_octagonal_constraint(n_left, n_right + 1, c_plus_minus_a_minus);
-40039:         }
-40039:         ((void) 0);
-40039:         return;
-40039:       }
-40039:       if (is_left_coeff_minus_one && is_right_coeff_minus_one) {
-40039:         const dimension_type n_left = left_w_id * 2;
-40039:         const dimension_type n_right = right_w_id * 2;
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_c_plus_minus_a_minus; N& c_plus_minus_a_minus = holder_c_plus_minus_a_minus.item();
-40039:         const FP_Interval_Type& left_a = left.inhomogeneous_term();
-40039:         const FP_Interval_Type& right_c = right.inhomogeneous_term();
-40039:         sub_assign_r(c_plus_minus_a_minus, right_c.upper(), left_a.lower(),
-40039:                      ROUND_UP);
-40039:         if (left_w_id < right_w_id) {
-40039:           add_octagonal_constraint(n_right + 1, n_left + 1,
-40039:                                    c_plus_minus_a_minus);
-40039:         }
-40039:         else {
-40039:           add_octagonal_constraint(n_left, n_right, c_plus_minus_a_minus);
-40039:         }
-40039:         ((void) 0);
-40039:         return;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_low_coeff; N& low_coeff = holder_low_coeff.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_high_coeff; N& high_coeff = holder_high_coeff.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_upper_bound; N& upper_bound = holder_upper_bound.item();
-40039: 
-40039:   Linear_Form<FP_Interval_Type> right_minus_left(right);
-40039:   right_minus_left -= left;
-40039: 
-40039:   dimension_type max_w_id = std::max(left_w_id, right_w_id);
-40039:   for (dimension_type first_v = 0; first_v < max_w_id; ++first_v) {
-40039:     for (dimension_type second_v = first_v + 1;
-40039:          second_v <= max_w_id; ++second_v) {
-40039:       const FP_Interval_Type& lfv_coefficient =
-40039:                         left.coefficient(Variable(first_v));
-40039:       const FP_Interval_Type& lsv_coefficient =
-40039:                         left.coefficient(Variable(second_v));
-40039:       const FP_Interval_Type& rfv_coefficient =
-40039:                         right.coefficient(Variable(first_v));
-40039:       const FP_Interval_Type& rsv_coefficient =
-40039:                         right.coefficient(Variable(second_v));
-40039: 
-40039: 
-40039:       bool do_update = false;
-40039:       assign_r(low_coeff, lfv_coefficient.lower(), ROUND_NOT_NEEDED);
-40039:       assign_r(high_coeff, lfv_coefficient.upper(), ROUND_NOT_NEEDED);
-40039:       if (low_coeff != 0 || high_coeff != 0) {
-40039:         assign_r(low_coeff, lsv_coefficient.lower(), ROUND_NOT_NEEDED);
-40039:         assign_r(high_coeff, lsv_coefficient.upper(), ROUND_NOT_NEEDED);
-40039:         if (low_coeff != 0 || high_coeff != 0) {
-40039:           do_update = true;
-40039:         }
-40039:         else {
-40039:           assign_r(low_coeff, rsv_coefficient.lower(), ROUND_NOT_NEEDED);
-40039:           assign_r(high_coeff, rsv_coefficient.upper(), ROUND_NOT_NEEDED);
-40039:           if (low_coeff != 0 || high_coeff != 0) {
-40039:             do_update = true;
-40039:           }
-40039:         }
-40039:       }
-40039:       else {
-40039:         assign_r(low_coeff, rfv_coefficient.lower(), ROUND_NOT_NEEDED);
-40039:         assign_r(high_coeff, rfv_coefficient.upper(), ROUND_NOT_NEEDED);
-40039:         if (low_coeff != 0 || high_coeff != 0) {
-40039:           assign_r(low_coeff, lsv_coefficient.lower(), ROUND_NOT_NEEDED);
-40039:           assign_r(high_coeff, lsv_coefficient.upper(), ROUND_NOT_NEEDED);
-40039:           if (low_coeff != 0 || high_coeff != 0) {
-40039:             do_update = true;
-40039:           }
-40039:           else {
-40039:             assign_r(low_coeff, rsv_coefficient.lower(), ROUND_NOT_NEEDED);
-40039:             assign_r(high_coeff, rsv_coefficient.upper(), ROUND_NOT_NEEDED);
-40039:             if (low_coeff != 0 || high_coeff != 0) {
-40039:               do_update = true;
-40039:             }
-40039:           }
-40039:         }
-40039:       }
-40039: 
-40039:       if (do_update) {
-40039:         Variable first(first_v);
-40039:         Variable second(second_v);
-40039:         dimension_type n_first_var = first_v * 2;
-40039:         dimension_type n_second_var = second_v * 2;
-40039:         linear_form_upper_bound(right_minus_left - first + second,
-40039:                                 upper_bound);
-40039:         add_octagonal_constraint(n_second_var + 1, n_first_var + 1,
-40039:                                  upper_bound);
-40039:         linear_form_upper_bound(right_minus_left + first + second,
-40039:                                 upper_bound);
-40039:         add_octagonal_constraint(n_second_var + 1, n_first_var, upper_bound);
-40039:         linear_form_upper_bound(right_minus_left - first - second,
-40039:                                 upper_bound);
-40039:         add_octagonal_constraint(n_second_var, n_first_var + 1, upper_bound);
-40039:         linear_form_upper_bound(right_minus_left + first - second,
-40039:                                 upper_bound);
-40039:         add_octagonal_constraint(n_second_var, n_first_var, upper_bound);
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   for (dimension_type v = 0; v <= max_w_id; ++v) {
-40039:     const FP_Interval_Type& lv_coefficient =
-40039:                         left.coefficient(Variable(v));
-40039:     const FP_Interval_Type& rv_coefficient =
-40039:                         right.coefficient(Variable(v));
-40039: 
-40039: 
-40039:     bool do_update = false;
-40039:     assign_r(low_coeff, lv_coefficient.lower(), ROUND_NOT_NEEDED);
-40039:     assign_r(high_coeff, lv_coefficient.upper(), ROUND_NOT_NEEDED);
-40039:     if (low_coeff != 0 || high_coeff != 0) {
-40039:       do_update = true;
-40039:     }
-40039:     else {
-40039:       assign_r(low_coeff, rv_coefficient.lower(), ROUND_NOT_NEEDED);
-40039:       assign_r(high_coeff, rv_coefficient.upper(), ROUND_NOT_NEEDED);
-40039:       if (low_coeff != 0 || high_coeff != 0) {
-40039:         do_update = true;
-40039:       }
-40039:     }
-40039: 
-40039:     if (do_update) {
-40039:       Variable var(v);
-40039:       dimension_type n_var = 2 * v;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       linear_form_upper_bound(right_minus_left + var, upper_bound);
-40039:       mul_2exp_assign_r(matrix[n_var + 1][n_var + 1], upper_bound, 1,
-40039:                         ROUND_UP);
-40039:       linear_form_upper_bound(right_minus_left - var, upper_bound);
-40039:       mul_2exp_assign_r(matrix[n_var][n_var], upper_bound, 1,
-40039:                         ROUND_UP);
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   row_iterator m_ite = matrix.row_begin();
-40039:   row_iterator m_end = matrix.row_end();
-40039:   for (dimension_type i = 0; m_ite != m_end; i += 2) {
-40039:     row_reference upper = *m_ite;
-40039:     N& ul = upper[i];
-40039:     add_octagonal_constraint(i, i + 1, ul);
-40039:     assign_r(ul, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     ++m_ite;
-40039:     row_reference lower = *m_ite;
-40039:     N& lr = lower[i + 1];
-40039:     add_octagonal_constraint(i + 1, i, lr);
-40039:     assign_r(lr, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     ++m_ite;
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::refine_no_check(const Constraint& c) {
-40039:   ((void) 0);
-40039:   const dimension_type c_space_dim = c.space_dimension();
-40039:   ((void) 0);
-40039: 
-40039:   dimension_type num_vars = 0;
-40039:   dimension_type i = 0;
-40039:   dimension_type j = 0;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_term; Parma_Polyhedra_Library::Coefficient& term = holder_term.item();
-40039: 
-40039:   if (!Octagonal_Shape_Helper
-40039:     ::extract_octagonal_difference(c, c_space_dim, num_vars,
-40039:                                    i, j, coeff, term)) {
-40039:     return;
-40039:   }
-40039: 
-40039:   if (num_vars == 0) {
-40039:     const Coefficient& c_inhomo = c.inhomogeneous_term();
-40039: 
-40039:     if (c_inhomo < 0
-40039:         || (c_inhomo != 0 && c.is_equality())
-40039:         || (c_inhomo == 0 && c.is_strict_inequality())) {
-40039:       set_empty();
-40039:     }
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   typename OR_Matrix<N>::row_iterator i_iter = matrix.row_begin() + i;
-40039:   typename OR_Matrix<N>::row_reference_type m_i = *i_iter;
-40039:   N& m_i_j = m_i[j];
-40039: 
-40039:   if (coeff < 0) {
-40039:     neg_assign(coeff);
-40039:   }
-40039: 
-40039:   bool is_oct_changed = false;
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
-40039:   div_round_up(d, term, coeff);
-40039:   if (m_i_j > d) {
-40039:     m_i_j = d;
-40039:     is_oct_changed = true;
-40039:   }
-40039: 
-40039:   if (c.is_equality()) {
-40039: 
-40039:     if (i % 2 == 0) {
-40039:       ++i_iter;
-40039:     }
-40039:     else {
-40039:       --i_iter;
-40039:     }
-40039: 
-40039:     typename OR_Matrix<N>::row_reference_type m_ci = *i_iter;
-40039:     using namespace Implementation::Octagonal_Shapes;
-40039:     dimension_type cj = coherent_index(j);
-40039:     N& m_ci_cj = m_ci[cj];
-40039: 
-40039:     neg_assign(term);
-40039:     div_round_up(d, term, coeff);
-40039:     if (m_ci_cj > d) {
-40039:       m_ci_cj = d;
-40039:       is_oct_changed = true;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   if (is_oct_changed && marked_strongly_closed()) {
-40039:     reset_strongly_closed();
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: dimension_type
-40039: Octagonal_Shape<T>::affine_dimension() const {
-40039:   const dimension_type n_rows = matrix.num_rows();
-40039: 
-40039:   if (n_rows == 0) {
-40039:     return 0;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   strong_closure_assign();
-40039:   if (marked_empty()) {
-40039:     return 0;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   std::vector<dimension_type> leaders;
-40039:   compute_leaders(leaders);
-40039: 
-40039: 
-40039: 
-40039:   dimension_type affine_dim = 0;
-40039:   for (dimension_type i = 0; i < n_rows; i += 2) {
-40039: 
-40039:     if (leaders[i] == i && leaders[i + 1] == i + 1) {
-40039:       ++affine_dim;
-40039:     }
-40039:   }
-40039: 
-40039:   return affine_dim;
-40039: }
-40039: 
-40039: template <typename T>
-40039: Congruence_System
-40039: Octagonal_Shape<T>::minimized_congruences() const {
-40039: 
-40039: 
-40039:   strong_closure_assign();
-40039:   Congruence_System cgs(space_dim);
-40039: 
-40039:   if (space_dim == 0) {
-40039:     if (marked_empty()) {
-40039:       cgs = Congruence_System::zero_dim_empty();
-40039:     }
-40039:     return cgs;
-40039:   }
-40039: 
-40039:   if (marked_empty()) {
-40039:     cgs.insert(Congruence::zero_dim_false());
-40039:     return cgs;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   std::vector<dimension_type> leaders;
-40039:   compute_leaders(leaders);
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
-40039:   for (dimension_type i = 0, i_end = 2*space_dim; i != i_end; i += 2) {
-40039:     const dimension_type lead_i = leaders[i];
-40039:     if (i == lead_i) {
-40039:       if (leaders[i + 1] == i) {
-40039: 
-40039:         goto singular;
-40039:       }
-40039:       else {
-40039: 
-40039:         continue;
-40039:       }
-40039:     }
-40039:     else {
-40039: 
-40039:       if (leaders[i + 1] == lead_i) {
-40039: 
-40039:         goto singular;
-40039:       }
-40039:       else {
-40039: 
-40039:         goto non_singular;
-40039:       }
-40039:     }
-40039: 
-40039:   singular:
-40039: 
-40039: 
-40039:     {
-40039:       const Variable x(i/2);
-40039:       const N& c_ii_i = matrix[i + 1][i];
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       numer_denom(c_ii_i, numer, denom);
-40039:       denom *= 2;
-40039:       cgs.insert(denom*x == numer);
-40039:     }
-40039:     continue;
-40039: 
-40039:   non_singular:
-40039: 
-40039: 
-40039:     {
-40039:       const N& c_i_li = matrix[i][lead_i];
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const Variable x(lead_i/2);
-40039:       const Variable y(i/2);
-40039:       numer_denom(c_i_li, numer, denom);
-40039:       if (lead_i % 2 == 0) {
-40039:         cgs.insert(denom*x - denom*y == numer);
-40039:       }
-40039:       else {
-40039:         cgs.insert(denom*x + denom*y + numer == 0);
-40039:       }
-40039:     }
-40039:     continue;
-40039:   }
-40039:   return cgs;
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::concatenate_assign(const Octagonal_Shape& y) {
-40039: 
-40039: 
-40039:   if (y.space_dim == 0) {
-40039:     if (y.marked_empty()) {
-40039:       set_empty();
-40039:     }
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (space_dim == 0 && marked_empty()) {
-40039:     add_space_dimensions_and_embed(y.space_dim);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   dimension_type old_num_rows = matrix.num_rows();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   add_space_dimensions_and_embed(y.space_dim);
-40039:   typename OR_Matrix<N>::const_element_iterator
-40039:     y_it = y.matrix.element_begin();
-40039:   for (typename OR_Matrix<N>::row_iterator
-40039:          i = matrix.row_begin() + old_num_rows,
-40039:          matrix_row_end = matrix.row_end(); i != matrix_row_end; ++i) {
-40039:     typename OR_Matrix<N>::row_reference_type r = *i;
-40039:     dimension_type rs_i = i.row_size();
-40039:     for (dimension_type j = old_num_rows; j < rs_i; ++j, ++y_it) {
-40039:       r[j] = *y_it;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   if (marked_strongly_closed()) {
-40039:     reset_strongly_closed();
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: Octagonal_Shape<T>::contains(const Octagonal_Shape& y) const {
-40039: 
-40039:   if (space_dim != y.space_dim) {
-40039:     throw_dimension_incompatible("contains(y)", y);
-40039:   }
-40039: 
-40039:   if (space_dim == 0) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     return marked_empty() ? y.marked_empty() : true;
-40039:   }
-40039: 
-40039: 
-40039:   y.strong_closure_assign();
-40039: 
-40039:   if (y.marked_empty()) {
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   if (is_empty()) {
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   for (typename OR_Matrix<N>::const_element_iterator
-40039:          i = matrix.element_begin(), j = y.matrix.element_begin(),
-40039:          matrix_element_end = matrix.element_end();
-40039:        i != matrix_element_end; ++i, ++j) {
-40039:     if (*i < *j) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: Octagonal_Shape<T>::is_disjoint_from(const Octagonal_Shape& y) const {
-40039: 
-40039:   if (space_dim != y.space_dim) {
-40039:     throw_dimension_incompatible("is_disjoint_from(y)", y);
-40039:   }
-40039: 
-40039: 
-40039:   strong_closure_assign();
-40039:   if (marked_empty()) {
-40039:     return true;
-40039:   }
-40039:   y.strong_closure_assign();
-40039:   if (y.marked_empty()) {
-40039:     return true;
-40039:   }
-40039: # 1257 "../../src/Octagonal_Shape_templates.hh"
-40039:   const dimension_type n_rows = matrix.num_rows();
-40039: 
-40039:   typedef typename OR_Matrix<N>::const_row_iterator row_iterator;
-40039:   typedef typename OR_Matrix<N>::const_row_reference_type row_reference;
-40039: 
-40039:   const row_iterator m_begin = matrix.row_begin();
-40039:   const row_iterator m_end = matrix.row_end();
-40039: 
-40039:   const row_iterator y_begin = y.matrix.row_begin();
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_neg_y_ci_cj; N& neg_y_ci_cj = holder_neg_y_ci_cj.item();
-40039:   for (row_iterator i_iter = m_begin; i_iter != m_end; ++i_iter) {
-40039:     using namespace Implementation::Octagonal_Shapes;
-40039:     const dimension_type i = i_iter.index();
-40039:     const dimension_type ci = coherent_index(i);
-40039:     const dimension_type rs_i = i_iter.row_size();
-40039:     row_reference m_i = *i_iter;
-40039:     for (dimension_type j = 0; j < n_rows; ++j) {
-40039:       const dimension_type cj = coherent_index(j);
-40039:       row_reference m_cj = *(m_begin + cj);
-40039:       const N& m_i_j = (j < rs_i) ? m_i[j] : m_cj[ci];
-40039:       row_reference y_ci = *(y_begin + ci);
-40039:       row_reference y_j = *(y_begin + j);
-40039:       const N& y_ci_cj = (j < rs_i) ? y_ci[cj] : y_j[i];
-40039:       neg_assign_r(neg_y_ci_cj, y_ci_cj, ROUND_UP);
-40039:       if (m_i_j < neg_y_ci_cj) {
-40039:         return true;
-40039:       }
-40039:     }
-40039:   }
-40039:   return false;
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: Octagonal_Shape<T>::is_universe() const {
-40039: 
-40039:   if (marked_empty()) {
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   for (typename OR_Matrix<N>::const_element_iterator
-40039:          i = matrix.element_begin(), matrix_element_end = matrix.element_end();
-40039:        i != matrix_element_end;
-40039:        ++i) {
-40039:     if (!is_plus_infinity(*i)) {
-40039:       return false;
-40039:     }
-40039:   }
-40039: 
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: Octagonal_Shape<T>::is_bounded() const {
-40039:   strong_closure_assign();
-40039: 
-40039:   if (marked_empty() || space_dim == 0) {
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   for (typename OR_Matrix<N>::const_row_iterator i = matrix.row_begin(),
-40039:          matrix_row_end = matrix.row_end(); i != matrix_row_end; ++i) {
-40039:     typename OR_Matrix<N>::const_row_reference_type x_i = *i;
-40039:     const dimension_type i_index = i.index();
-40039:     for (dimension_type j = i.row_size(); j-- > 0; ) {
-40039:       if (i_index != j) {
-40039:         if (is_plus_infinity(x_i[j])) {
-40039:           return false;
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: Octagonal_Shape<T>::contains_integer_point() const {
-40039: 
-40039:   if (is_empty()) {
-40039:     return false;
-40039:   }
-40039:   if (space_dim == 0) {
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   if (std::numeric_limits<T>::is_integer) {
-40039:     return !tight_coherence_would_make_empty();
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Octagonal_Shape<mpz_class> oct_z(space_dim);
-40039:   oct_z.reset_strongly_closed();
-40039: 
-40039:   typedef Octagonal_Shape<mpz_class>::N Z;
-40039:   bool all_integers = true;
-40039:   typename OR_Matrix<N>::const_element_iterator x_i = matrix.element_begin();
-40039:   for (typename OR_Matrix<Z>::element_iterator
-40039:          z_i = oct_z.matrix.element_begin(),
-40039:          z_end = oct_z.matrix.element_end(); z_i != z_end; ++z_i, ++x_i) {
-40039:     const N& d = *x_i;
-40039:     if (is_plus_infinity(d)) {
-40039:       continue;
-40039:     }
-40039:     if (is_integer(d)) {
-40039:       assign_r(*z_i, d, ROUND_NOT_NEEDED);
-40039:     }
-40039:     else {
-40039:       all_integers = false;
-40039:       assign_r(*z_i, d, ROUND_DOWN);
-40039:     }
-40039:   }
-40039: 
-40039:   if (all_integers) {
-40039: 
-40039:     oct_z.set_strongly_closed();
-40039:   }
-40039:   else {
-40039: 
-40039:     oct_z.strong_closure_assign();
-40039:     if (oct_z.marked_empty()) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return !oct_z.tight_coherence_would_make_empty();
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: Octagonal_Shape<T>::frequency(const Linear_Expression& expr,
-40039:                               Coefficient& freq_n, Coefficient& freq_d,
-40039:                               Coefficient& val_n, Coefficient& val_d) const {
-40039: 
-40039:   if (space_dim < expr.space_dimension()) {
-40039:     throw_dimension_incompatible("frequency(e, ...)", "e", expr);
-40039:   }
-40039: # 1415 "../../src/Octagonal_Shape_templates.hh"
-40039:   if (space_dim == 0) {
-40039:     if (is_empty()) {
-40039:       return false;
-40039:     }
-40039:     freq_n = 0;
-40039:     freq_d = 1;
-40039:     val_n = expr.inhomogeneous_term();
-40039:     val_d = 1;
-40039:     return true;
-40039:   }
-40039: 
-40039:   strong_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff_j; Parma_Polyhedra_Library::Coefficient& coeff_j = holder_coeff_j.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
-40039:   Linear_Expression le = expr;
-40039: 
-40039: 
-40039: 
-40039:   bool constant_v = false;
-40039: 
-40039:   typedef typename OR_Matrix<N>::const_row_iterator row_iterator;
-40039:   typedef typename OR_Matrix<N>::const_row_reference_type row_reference;
-40039: 
-40039:   const row_iterator m_begin = matrix.row_begin();
-40039:   const row_iterator m_end = matrix.row_end();
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_val_denom; Parma_Polyhedra_Library::Coefficient& val_denom = holder_val_denom.item();
-40039:   val_denom = 1;
-40039: 
-40039:   for (row_iterator i_iter = m_begin; i_iter != m_end; i_iter += 2) {
-40039:     constant_v = false;
-40039:     dimension_type i = i_iter.index();
-40039:     const Variable v(i/2);
-40039:     coeff = le.coefficient(v);
-40039:     if (coeff == 0) {
-40039:       constant_v = true;
-40039:       continue;
-40039:     }
-40039: 
-40039:     row_reference m_i = *i_iter;
-40039:     row_reference m_ii = *(i_iter + 1);
-40039:     const N& m_i_ii = m_i[i + 1];
-40039:     const N& m_ii_i = m_ii[i];
-40039:     if ((!is_plus_infinity(m_i_ii) && !is_plus_infinity(m_ii_i))
-40039:         && (is_additive_inverse(m_i_ii, m_ii_i))) {
-40039: 
-40039:       numer_denom(m_i_ii, numer, denom);
-40039:       denom *= 2;
-40039:       le -= coeff*v;
-40039:       le *= denom;
-40039:       le -= numer*coeff;
-40039:       val_denom *= denom;
-40039:       constant_v = true;
-40039:       continue;
-40039:     }
-40039: 
-40039: 
-40039:     else {
-40039:       ((void) 0);
-40039:       using namespace Implementation::Octagonal_Shapes;
-40039:       const dimension_type ci = coherent_index(i);
-40039:       for (row_iterator j_iter = i_iter; j_iter != m_end; j_iter += 2) {
-40039:         dimension_type j = j_iter.index();
-40039:         const Variable vj(j/2);
-40039:         coeff_j = le.coefficient(vj);
-40039:         if (coeff_j == 0) {
-40039: 
-40039:           continue;
-40039:         }
-40039:         const dimension_type cj = coherent_index(j);
-40039:         const dimension_type cjj = coherent_index(j + 1);
-40039: 
-40039:         row_reference m_j = *(m_begin + j);
-40039:         row_reference m_cj = *(m_begin + cj);
-40039:         const N& m_j_i = m_j[i];
-40039:         const N& m_i_j = m_cj[ci];
-40039:         if ((!is_plus_infinity(m_i_j) && !is_plus_infinity(m_j_i))
-40039:             && (is_additive_inverse(m_i_j, m_j_i))) {
-40039: 
-40039: 
-40039: 
-40039:           numer_denom(m_i_j, numer, denom);
-40039:           le -= coeff*v;
-40039:           le += coeff*vj;
-40039:           le *= denom;
-40039:           le -= numer*coeff;
-40039:           val_denom *= denom;
-40039:           constant_v = true;
-40039:           break;
-40039:         }
-40039: 
-40039:         m_j = *(m_begin + (j + 1));
-40039:         m_cj = *(m_begin + cjj);
-40039:         const N& m_j_i1 = m_j[i];
-40039:         const N& m_i_j1 = m_cj[ci];
-40039:         if ((!is_plus_infinity(m_i_j1) && !is_plus_infinity(m_j_i1))
-40039:             && (is_additive_inverse(m_i_j1, m_j_i1))) {
-40039: 
-40039: 
-40039: 
-40039:           numer_denom(m_i_j1, numer, denom);
-40039:           le -= coeff*v;
-40039:           le -= coeff*vj;
-40039:           le *= denom;
-40039:           le -= numer*coeff;
-40039:           val_denom *= denom;
-40039:           constant_v = true;
-40039:           break;
-40039:         }
-40039:       }
-40039:       if (!constant_v) {
-40039: 
-40039:         return false;
-40039:       }
-40039:     }
-40039:   }
-40039:   if (!constant_v) {
-40039: 
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039:   freq_n = 0;
-40039:   freq_d = 1;
-40039: 
-40039: 
-40039:   normalize2(le.inhomogeneous_term(), val_denom, val_n, val_d);
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: Octagonal_Shape<T>::constrains(const Variable var) const {
-40039: 
-40039:   const dimension_type var_space_dim = var.space_dimension();
-40039:   if (space_dimension() < var_space_dim) {
-40039:     throw_dimension_incompatible("constrains(v)", "v", var);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type n_v = 2*(var_space_dim - 1);
-40039:   typename OR_Matrix<N>::const_row_iterator m_iter = matrix.row_begin() + n_v;
-40039:   typename OR_Matrix<N>::const_row_reference_type r_v = *m_iter;
-40039:   typename OR_Matrix<N>::const_row_reference_type r_cv = *(++m_iter);
-40039:   for (dimension_type h = m_iter.row_size(); h-- > 0; ) {
-40039:     if (!is_plus_infinity(r_v[h]) || !is_plus_infinity(r_cv[h])) {
-40039:       return true;
-40039:     }
-40039:   }
-40039:   ++m_iter;
-40039:   for (typename OR_Matrix<N>::const_row_iterator m_end = matrix.row_end();
-40039:        m_iter != m_end; ++m_iter) {
-40039:     typename OR_Matrix<N>::const_row_reference_type r = *m_iter;
-40039:     if (!is_plus_infinity(r[n_v]) || !is_plus_infinity(r[n_v + 1])) {
-40039:       return true;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   return is_empty();
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: Octagonal_Shape<T>::is_strong_coherent() const {
-40039: 
-40039: 
-40039:   const dimension_type num_rows = matrix.num_rows();
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_semi_sum; N& semi_sum = holder_semi_sum.item();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   for (dimension_type i = num_rows; i-- > 0; ) {
-40039:     typename OR_Matrix<N>::const_row_iterator iter = matrix.row_begin() + i;
-40039:     typename OR_Matrix<N>::const_row_reference_type m_i = *iter;
-40039:     using namespace Implementation::Octagonal_Shapes;
-40039:     const N& m_i_ci = m_i[coherent_index(i)];
-40039:     for (dimension_type j = matrix.row_size(i); j-- > 0; ) {
-40039: 
-40039:       if (i != j) {
-40039:         const N& m_cj_j = matrix[coherent_index(j)][j];
-40039:         if (!is_plus_infinity(m_i_ci)
-40039:             && !is_plus_infinity(m_cj_j)) {
-40039: 
-40039: 
-40039:           add_assign_r(semi_sum, m_i_ci, m_cj_j, ROUND_UP);
-40039:           div_2exp_assign_r(semi_sum, semi_sum, 1, ROUND_UP);
-40039:           if (m_i[j] > semi_sum) {
-40039:             return false;
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: Octagonal_Shape<T>::is_strongly_reduced() const {
-40039: 
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return true;
-40039:   }
-40039: 
-40039:   Octagonal_Shape x = *this;
-40039: 
-40039: 
-40039:   for (typename OR_Matrix<N>::const_row_iterator iter = matrix.row_begin(),
-40039:          matrix_row_end = matrix.row_end(); iter != matrix_row_end; ++iter) {
-40039:     typename OR_Matrix<N>::const_row_reference_type m_i = *iter;
-40039:     const dimension_type i = iter.index();
-40039:     for (dimension_type j = iter.row_size(); j-- > 0; ) {
-40039:       if (!is_plus_infinity(m_i[j])) {
-40039:         Octagonal_Shape x_copy = *this;
-40039:         assign_r(x_copy.matrix[i][j], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:         if (x == x_copy) {
-40039:           return false;
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: Octagonal_Shape<T>::bounds(const Linear_Expression& expr,
-40039:                            const bool from_above) const {
-40039: 
-40039: 
-40039:   const dimension_type expr_space_dim = expr.space_dimension();
-40039:   if (space_dim < expr_space_dim) {
-40039:     throw_dimension_incompatible((from_above
-40039:                                   ? "bounds_from_above(e)"
-40039:                                   : "bounds_from_below(e)"), "e", expr);
-40039:   }
-40039:   strong_closure_assign();
-40039: 
-40039: 
-40039:   if (space_dim == 0 || marked_empty()) {
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   const Constraint& c = (from_above) ? expr <= 0 : expr >= 0;
-40039:   dimension_type num_vars = 0;
-40039:   dimension_type i = 0;
-40039:   dimension_type j = 0;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_term; Parma_Polyhedra_Library::Coefficient& term = holder_term.item();
-40039:   if (Octagonal_Shape_Helper
-40039:     ::extract_octagonal_difference(c, c.space_dimension(), num_vars,
-40039:                                    i, j, coeff, term)) {
-40039:     if (num_vars == 0) {
-40039:       return true;
-40039:     }
-40039: 
-40039:     typename OR_Matrix<N>::const_row_iterator i_iter = matrix.row_begin() + i;
-40039:     typename OR_Matrix<N>::const_row_reference_type m_i = *i_iter;
-40039:     return !is_plus_infinity(m_i[j]);
-40039:   }
-40039:   else {
-40039: 
-40039:     Optimization_Mode mode_bounds =
-40039:       from_above ? MAXIMIZATION : MINIMIZATION;
-40039:     MIP_Problem mip(space_dim, constraints(), expr, mode_bounds);
-40039:     return mip.solve() == OPTIMIZED_MIP_PROBLEM;
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: Octagonal_Shape<T>::max_min(const Linear_Expression& expr,
-40039:                             const bool maximize,
-40039:                             Coefficient& ext_n, Coefficient& ext_d,
-40039:                             bool& included) const {
-40039: 
-40039: 
-40039:   const dimension_type expr_space_dim = expr.space_dimension();
-40039:   if (space_dim < expr_space_dim) {
-40039:     throw_dimension_incompatible((maximize
-40039:                                   ? "maximize(e, ...)"
-40039:                                   : "minimize(e, ...)"), "e", expr);
-40039:   }
-40039: 
-40039:   if (space_dim == 0) {
-40039:     if (marked_empty()) {
-40039:       return false;
-40039:     }
-40039:     else {
-40039:       ext_n = expr.inhomogeneous_term();
-40039:       ext_d = 1;
-40039:       included = true;
-40039:       return true;
-40039:     }
-40039:   }
-40039: 
-40039:   strong_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   const Constraint& c = (maximize) ? expr <= 0 : expr >= 0;
-40039:   dimension_type num_vars = 0;
-40039:   dimension_type i = 0;
-40039:   dimension_type j = 0;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_term; Parma_Polyhedra_Library::Coefficient& term = holder_term.item();
-40039:   if (!Octagonal_Shape_Helper
-40039:     ::extract_octagonal_difference(c, c.space_dimension(), num_vars,
-40039:                                    i, j, coeff, term)) {
-40039: 
-40039:     Optimization_Mode max_min = (maximize) ? MAXIMIZATION : MINIMIZATION;
-40039:     MIP_Problem mip(space_dim, constraints(), expr, max_min);
-40039:     if (mip.solve() == OPTIMIZED_MIP_PROBLEM) {
-40039:       mip.optimal_value(ext_n, ext_d);
-40039:       included = true;
-40039:       return true;
-40039:     }
-40039:     else {
-40039: 
-40039:       return false;
-40039:     }
-40039:   }
-40039:   else {
-40039: 
-40039:     if (num_vars == 0) {
-40039:       ext_n = expr.inhomogeneous_term();
-40039:       ext_d = 1;
-40039:       included = true;
-40039:       return true;
-40039:     }
-40039: 
-40039: 
-40039:     typename OR_Matrix<N>::const_row_iterator i_iter = matrix.row_begin() + i;
-40039:     typename OR_Matrix<N>::const_row_reference_type m_i = *i_iter;
-40039:     Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
-40039:     if (!is_plus_infinity(m_i[j])) {
-40039:       const Coefficient& b = expr.inhomogeneous_term();
-40039:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item();
-40039:       neg_assign(minus_b, b);
-40039:       const Coefficient& sc_b = maximize ? b : minus_b;
-40039:       assign_r(d, sc_b, ROUND_UP);
-40039: 
-40039: 
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_expr; N& coeff_expr = holder_coeff_expr.item();
-40039:       const Coefficient& coeff_i = expr.coefficient(Variable(i/2));
-40039:       const int sign_i = sgn(coeff_i);
-40039:       if (sign_i > 0) {
-40039:         assign_r(coeff_expr, coeff_i, ROUND_UP);
-40039:       }
-40039:       else {
-40039:         Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_coeff_i; Parma_Polyhedra_Library::Coefficient& minus_coeff_i = holder_minus_coeff_i.item();
-40039:         neg_assign(minus_coeff_i, coeff_i);
-40039:         assign_r(coeff_expr, minus_coeff_i, ROUND_UP);
-40039:       }
-40039: 
-40039:       if (num_vars == 1) {
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_m_i_j; N& m_i_j = holder_m_i_j.item();
-40039:         div_2exp_assign_r(m_i_j, m_i[j], 1, ROUND_UP);
-40039:         add_mul_assign_r(d, coeff_expr, m_i_j, ROUND_UP);
-40039:       }
-40039:       else {
-40039:         add_mul_assign_r(d, coeff_expr, m_i[j], ROUND_UP);
-40039:       }
-40039:       numer_denom(d, ext_n, ext_d);
-40039:       if (!maximize) {
-40039:         neg_assign(ext_n);
-40039:       }
-40039:       included = true;
-40039:       return true;
-40039:     }
-40039: 
-40039: 
-40039:     return false;
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: Octagonal_Shape<T>::max_min(const Linear_Expression& expr,
-40039:                             const bool maximize,
-40039:                             Coefficient& ext_n, Coefficient& ext_d,
-40039:                             bool& included, Generator& g) const {
-40039: 
-40039: 
-40039:   const dimension_type expr_space_dim = expr.space_dimension();
-40039:   if (space_dim < expr_space_dim) {
-40039:     throw_dimension_incompatible((maximize
-40039:                                   ? "maximize(e, ...)"
-40039:                                   : "minimize(e, ...)"), "e", expr);
-40039:   }
-40039: 
-40039:   if (space_dim == 0) {
-40039:     if (marked_empty()) {
-40039:       return false;
-40039:     }
-40039:     else {
-40039:       ext_n = expr.inhomogeneous_term();
-40039:       ext_d = 1;
-40039:       included = true;
-40039:       g = point();
-40039:       return true;
-40039:     }
-40039:   }
-40039: 
-40039:   strong_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return false;
-40039:   }
-40039:   if (!is_universe()) {
-40039: 
-40039: 
-40039:     Optimization_Mode max_min = (maximize) ? MAXIMIZATION : MINIMIZATION;
-40039:     MIP_Problem mip(space_dim, constraints(), expr, max_min);
-40039:     if (mip.solve() == OPTIMIZED_MIP_PROBLEM) {
-40039:       g = mip.optimizing_point();
-40039:       mip.evaluate_objective_function(g, ext_n, ext_d);
-40039:       included = true;
-40039:       return true;
-40039:     }
-40039:   }
-40039: 
-40039:   return false;
-40039: }
-40039: 
-40039: template <typename T>
-40039: Poly_Con_Relation
-40039: Octagonal_Shape<T>::relation_with(const Congruence& cg) const {
-40039:   dimension_type cg_space_dim = cg.space_dimension();
-40039: 
-40039: 
-40039:   if (cg_space_dim > space_dim) {
-40039:     throw_dimension_incompatible("relation_with(cg)", cg);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (cg.is_equality()) {
-40039:     Constraint c(cg);
-40039:     return relation_with(c);
-40039:   }
-40039: 
-40039:   strong_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return Poly_Con_Relation::saturates()
-40039:       && Poly_Con_Relation::is_included()
-40039:       && Poly_Con_Relation::is_disjoint();
-40039:   }
-40039: 
-40039:   if (space_dim == 0) {
-40039:     if (cg.is_inconsistent()) {
-40039:       return Poly_Con_Relation::is_disjoint();
-40039:     }
-40039:     else {
-40039:       return Poly_Con_Relation::saturates()
-40039:         && Poly_Con_Relation::is_included();
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   Linear_Expression le(cg.expression());
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_numer; Parma_Polyhedra_Library::Coefficient& min_numer = holder_min_numer.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_denom; Parma_Polyhedra_Library::Coefficient& min_denom = holder_min_denom.item();
-40039:   bool min_included;
-40039:   bool bounded_below = minimize(le, min_numer, min_denom, min_included);
-40039: 
-40039: 
-40039: 
-40039:   if (!bounded_below) {
-40039:     return Poly_Con_Relation::strictly_intersects();
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_numer; Parma_Polyhedra_Library::Coefficient& max_numer = holder_max_numer.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_denom; Parma_Polyhedra_Library::Coefficient& max_denom = holder_max_denom.item();
-40039:   bool max_included;
-40039:   bool bounded_above = maximize(le, max_numer, max_denom, max_included);
-40039: 
-40039: 
-40039: 
-40039:   if (!bounded_above) {
-40039:     return Poly_Con_Relation::strictly_intersects();
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_signed_distance; Parma_Polyhedra_Library::Coefficient& signed_distance = holder_signed_distance.item();
-40039: 
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_value; Parma_Polyhedra_Library::Coefficient& min_value = holder_min_value.item();
-40039:   min_value = min_numer / min_denom;
-40039:   const Coefficient& modulus = cg.modulus();
-40039:   signed_distance = min_value % modulus;
-40039:   min_value -= signed_distance;
-40039:   if (min_value * min_denom < min_numer) {
-40039:     min_value += modulus;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_value; Parma_Polyhedra_Library::Coefficient& max_value = holder_max_value.item();
-40039:   max_value = max_numer / max_denom;
-40039:   signed_distance = max_value % modulus;
-40039:   max_value += signed_distance;
-40039:   if (max_value * max_denom > max_numer) {
-40039:     max_value -= modulus;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (max_value < min_value) {
-40039:     return Poly_Con_Relation::is_disjoint();
-40039:   }
-40039:   else {
-40039:     return Poly_Con_Relation::strictly_intersects();
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: Poly_Con_Relation
-40039: Octagonal_Shape<T>::relation_with(const Constraint& c) const {
-40039:   dimension_type c_space_dim = c.space_dimension();
-40039: 
-40039: 
-40039:   if (c_space_dim > space_dim) {
-40039:     throw_dimension_incompatible("relation_with(c)", c);
-40039:   }
-40039: 
-40039: 
-40039:   strong_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return Poly_Con_Relation::saturates()
-40039:       && Poly_Con_Relation::is_included()
-40039:       && Poly_Con_Relation::is_disjoint();
-40039:   }
-40039: 
-40039:   if (space_dim == 0) {
-40039: 
-40039:     if ((c.is_equality() && c.inhomogeneous_term() != 0)
-40039:         || (c.is_inequality() && c.inhomogeneous_term() < 0)) {
-40039:       return Poly_Con_Relation::is_disjoint();
-40039:     }
-40039:     else if (c.is_strict_inequality() && c.inhomogeneous_term() == 0) {
-40039: 
-40039: 
-40039:       return Poly_Con_Relation::saturates()
-40039:         && Poly_Con_Relation::is_disjoint();
-40039:     }
-40039: 
-40039: 
-40039:     else if (c.is_equality() || c.inhomogeneous_term() == 0) {
-40039:       return Poly_Con_Relation::saturates()
-40039:         && Poly_Con_Relation::is_included();
-40039:     }
-40039:     else {
-40039: 
-40039: 
-40039: 
-40039:       return Poly_Con_Relation::is_included();
-40039:     }
-40039:   }
-40039: 
-40039:   dimension_type num_vars = 0;
-40039:   dimension_type i = 0;
-40039:   dimension_type j = 0;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_c_term; Parma_Polyhedra_Library::Coefficient& c_term = holder_c_term.item();
-40039:   if (!Octagonal_Shape_Helper
-40039:     ::extract_octagonal_difference(c, c_space_dim, num_vars,
-40039:                                    i, j, coeff, c_term)) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     Linear_Expression le;
-40039:     le.set_space_dimension(c.space_dimension());
-40039:     le.linear_combine(c.expr, Coefficient_one(), Coefficient_one(),
-40039:                       1, c_space_dim + 1);
-40039: 
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_numer; Parma_Polyhedra_Library::Coefficient& max_numer = holder_max_numer.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_denom; Parma_Polyhedra_Library::Coefficient& max_denom = holder_max_denom.item();
-40039:     bool max_included;
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_numer; Parma_Polyhedra_Library::Coefficient& min_numer = holder_min_numer.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_denom; Parma_Polyhedra_Library::Coefficient& min_denom = holder_min_denom.item();
-40039:     bool min_included;
-40039:     bool bounded_above = maximize(le, max_numer, max_denom, max_included);
-40039:     bool bounded_below = minimize(le, min_numer, min_denom, min_included);
-40039:     if (!bounded_above) {
-40039:       if (!bounded_below) {
-40039:         return Poly_Con_Relation::strictly_intersects();
-40039:       }
-40039:       min_numer += c.inhomogeneous_term() * min_denom;
-40039:       switch (sgn(min_numer)) {
-40039:       case 1:
-40039:         if (c.is_equality()) {
-40039:           return Poly_Con_Relation::is_disjoint();
-40039:         }
-40039:         return Poly_Con_Relation::is_included();
-40039:       case 0:
-40039:         if (c.is_strict_inequality() || c.is_equality()) {
-40039:           return Poly_Con_Relation::strictly_intersects();
-40039:         }
-40039:         return Poly_Con_Relation::is_included();
-40039:       case -1:
-40039:         return Poly_Con_Relation::strictly_intersects();
-40039:       }
-40039:     }
-40039:     if (!bounded_below) {
-40039:       max_numer += c.inhomogeneous_term() * max_denom;
-40039:       switch (sgn(max_numer)) {
-40039:       case 1:
-40039:         return Poly_Con_Relation::strictly_intersects();
-40039:       case 0:
-40039:         if (c.is_strict_inequality()) {
-40039:           return Poly_Con_Relation::is_disjoint();
-40039:         }
-40039:         return Poly_Con_Relation::strictly_intersects();
-40039:       case -1:
-40039:         return Poly_Con_Relation::is_disjoint();
-40039:       }
-40039:     }
-40039:     else {
-40039:       max_numer += c.inhomogeneous_term() * max_denom;
-40039:       min_numer += c.inhomogeneous_term() * min_denom;
-40039:       switch (sgn(max_numer)) {
-40039:       case 1:
-40039:         switch (sgn(min_numer)) {
-40039:         case 1:
-40039:           if (c.is_equality()) {
-40039:             return Poly_Con_Relation::is_disjoint();
-40039:           }
-40039:           return Poly_Con_Relation::is_included();
-40039:         case 0:
-40039:           if (c.is_equality()) {
-40039:             return Poly_Con_Relation::strictly_intersects();
-40039:           }
-40039:           if (c.is_strict_inequality()) {
-40039:             return Poly_Con_Relation::strictly_intersects();
-40039:           }
-40039:           return Poly_Con_Relation::is_included();
-40039:         case -1:
-40039:           return Poly_Con_Relation::strictly_intersects();
-40039:         }
-40039:         Parma_Polyhedra_Library::ppl_unreachable();
-40039:         break;
-40039:       case 0:
-40039:         if (min_numer == 0) {
-40039:           if (c.is_strict_inequality()) {
-40039:             return Poly_Con_Relation::is_disjoint()
-40039:               && Poly_Con_Relation::saturates();
-40039:           }
-40039:           return Poly_Con_Relation::is_included()
-40039:             && Poly_Con_Relation::saturates();
-40039:         }
-40039:         if (c.is_strict_inequality()) {
-40039:           return Poly_Con_Relation::is_disjoint();
-40039:         }
-40039:         return Poly_Con_Relation::strictly_intersects();
-40039:       case -1:
-40039:         return Poly_Con_Relation::is_disjoint();
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   if (num_vars == 0) {
-40039: 
-40039:     switch (sgn(c.inhomogeneous_term())) {
-40039:     case -1:
-40039:       return Poly_Con_Relation::is_disjoint();
-40039:     case 0:
-40039:       if (c.is_strict_inequality()) {
-40039:         return Poly_Con_Relation::saturates()
-40039:           && Poly_Con_Relation::is_disjoint();
-40039:       }
-40039:       else {
-40039:         return Poly_Con_Relation::saturates()
-40039:           && Poly_Con_Relation::is_included();
-40039:       }
-40039:     case 1:
-40039:       if (c.is_equality()) {
-40039:         return Poly_Con_Relation::is_disjoint();
-40039:       }
-40039:       else {
-40039:         return Poly_Con_Relation::is_included();
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   typename OR_Matrix<N>::const_row_iterator i_iter = matrix.row_begin() + i;
-40039:   typename OR_Matrix<N>::const_row_reference_type m_i = *i_iter;
-40039:   const N& m_i_j = m_i[j];
-40039: 
-40039:   if (coeff < 0) {
-40039:     neg_assign(coeff);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (i % 2 == 0) {
-40039:     ++i_iter;
-40039:   }
-40039:   else {
-40039:     --i_iter;
-40039:   }
-40039:   typename OR_Matrix<N>::const_row_reference_type m_ci = *i_iter;
-40039:   using namespace Implementation::Octagonal_Shapes;
-40039:   const N& m_ci_cj = m_ci[coherent_index(j)];
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_x; mpq_class& q_x = holder_q_x.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_y; mpq_class& q_y = holder_q_y.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_d; mpq_class& d = holder_d.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_d1; mpq_class& d1 = holder_d1.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_c_denom; mpq_class& c_denom = holder_c_denom.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_denom; mpq_class& q_denom = holder_q_denom.item();
-40039:   assign_r(c_denom, coeff, ROUND_NOT_NEEDED);
-40039:   assign_r(d, c_term, ROUND_NOT_NEEDED);
-40039:   neg_assign_r(d1, d, ROUND_NOT_NEEDED);
-40039:   div_assign_r(d, d, c_denom, ROUND_NOT_NEEDED);
-40039:   div_assign_r(d1, d1, c_denom, ROUND_NOT_NEEDED);
-40039: 
-40039:   if (is_plus_infinity(m_i_j)) {
-40039:     if (!is_plus_infinity(m_ci_cj)) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       numer_denom(m_ci_cj, numer, denom);
-40039:       assign_r(q_denom, denom, ROUND_NOT_NEEDED);
-40039:       assign_r(q_y, numer, ROUND_NOT_NEEDED);
-40039:       div_assign_r(q_y, q_y, q_denom, ROUND_NOT_NEEDED);
-40039:       if (q_y < d1) {
-40039:         return Poly_Con_Relation::is_disjoint();
-40039:       }
-40039:       if (q_y == d1 && c.is_strict_inequality()) {
-40039:         return Poly_Con_Relation::is_disjoint();
-40039:       }
-40039:     }
-40039: 
-40039: 
-40039:     return Poly_Con_Relation::strictly_intersects();
-40039:   }
-40039: 
-40039: 
-40039:   numer_denom(m_i_j, numer, denom);
-40039:   assign_r(q_denom, denom, ROUND_NOT_NEEDED);
-40039:   assign_r(q_x, numer, ROUND_NOT_NEEDED);
-40039:   div_assign_r(q_x, q_x, q_denom, ROUND_NOT_NEEDED);
-40039: 
-40039:   if (!is_plus_infinity(m_ci_cj)) {
-40039:     numer_denom(m_ci_cj, numer, denom);
-40039:     assign_r(q_denom, denom, ROUND_NOT_NEEDED);
-40039:     assign_r(q_y, numer, ROUND_NOT_NEEDED);
-40039:     div_assign_r(q_y, q_y, q_denom, ROUND_NOT_NEEDED);
-40039:     if (q_x == d && q_y == d1) {
-40039:       if (c.is_strict_inequality()) {
-40039:         return Poly_Con_Relation::saturates()
-40039:           && Poly_Con_Relation::is_disjoint();
-40039:       }
-40039:       else {
-40039:         return Poly_Con_Relation::saturates()
-40039:           && Poly_Con_Relation::is_included();
-40039:       }
-40039:     }
-40039: 
-40039: 
-40039:     if (q_y < d1) {
-40039:       return Poly_Con_Relation::is_disjoint();
-40039:     }
-40039:     if (q_y == d1 && c.is_strict_inequality()) {
-40039:       return Poly_Con_Relation::is_disjoint();
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (d > q_x) {
-40039:     if (c.is_equality()) {
-40039:       return Poly_Con_Relation::is_disjoint();
-40039:     }
-40039:     else {
-40039:       return Poly_Con_Relation::is_included();
-40039:     }
-40039:   }
-40039: 
-40039:   if (d == q_x && c.is_nonstrict_inequality()) {
-40039:     return Poly_Con_Relation::is_included();
-40039:   }
-40039: 
-40039:   return Poly_Con_Relation::strictly_intersects();
-40039: }
-40039: 
-40039: template <typename T>
-40039: Poly_Gen_Relation
-40039: Octagonal_Shape<T>::relation_with(const Generator& g) const {
-40039:   const dimension_type g_space_dim = g.space_dimension();
-40039: 
-40039: 
-40039:   if (space_dim < g_space_dim) {
-40039:     throw_dimension_incompatible("relation_with(g)", g);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   strong_closure_assign();
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return Poly_Gen_Relation::nothing();
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return Poly_Gen_Relation::subsumes();
-40039:   }
-40039: 
-40039:   const bool is_line = g.is_line();
-40039:   const bool is_line_or_ray = g.is_line_or_ray();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename OR_Matrix<N>::const_row_iterator row_iterator;
-40039:   typedef typename OR_Matrix<N>::const_row_reference_type row_reference;
-40039: 
-40039:   const row_iterator m_begin = matrix.row_begin();
-40039:   const row_iterator m_end = matrix.row_end();
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_product; Parma_Polyhedra_Library::Coefficient& product = holder_product.item();
-40039: 
-40039: 
-40039:   for (row_iterator i_iter = m_begin; i_iter != m_end; i_iter += 2) {
-40039:     dimension_type i = i_iter.index();
-40039:     row_reference m_i = *i_iter;
-40039:     row_reference m_ii = *(i_iter + 1);
-40039:     const N& m_i_ii = m_i[i + 1];
-40039:     const N& m_ii_i = m_ii[i];
-40039: 
-40039:     const Variable x(i/2);
-40039:     const Coefficient& g_coeff_x
-40039:       = (x.space_dimension() > g_space_dim)
-40039:       ? Coefficient_zero()
-40039:       : g.coefficient(x);
-40039:     if (is_additive_inverse(m_i_ii, m_ii_i)) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       numer_denom(m_ii_i, numer, denom);
-40039:       denom *= 2;
-40039:       product = denom * g_coeff_x;
-40039: 
-40039: 
-40039:       if (!is_line_or_ray) {
-40039:         neg_assign(numer);
-40039:         add_mul_assign(product, numer, g.divisor());
-40039:       }
-40039:       if (product != 0) {
-40039:         return Poly_Gen_Relation::nothing();
-40039:       }
-40039:     }
-40039: 
-40039:     else {
-40039:       if (!is_plus_infinity(m_i_ii)) {
-40039: 
-40039: 
-40039: 
-40039:         numer_denom(m_i_ii, numer, denom);
-40039:         denom *= -2;
-40039:         product = denom * g_coeff_x;
-40039: 
-40039: 
-40039:         if (!is_line_or_ray) {
-40039:           neg_assign(numer);
-40039:           add_mul_assign(product, numer, g.divisor());
-40039:         }
-40039:         if (is_line && product != 0) {
-40039:           return Poly_Gen_Relation::nothing();
-40039:         }
-40039:         else
-40039: 
-40039: 
-40039: 
-40039: 
-40039:           if (product > 0) {
-40039:             return Poly_Gen_Relation::nothing();
-40039:           }
-40039:       }
-40039:       if (!is_plus_infinity(m_ii_i)) {
-40039: 
-40039:         numer_denom(m_ii_i, numer, denom);
-40039:         denom *= 2;
-40039:         product = denom * g_coeff_x;
-40039: 
-40039: 
-40039:         if (!is_line_or_ray) {
-40039:           neg_assign(numer);
-40039:           add_mul_assign(product, numer , g.divisor());
-40039:         }
-40039:         if (is_line && product != 0) {
-40039:           return Poly_Gen_Relation::nothing();
-40039:         }
-40039:         else {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:           if (product > 0) {
-40039:             return Poly_Gen_Relation::nothing();
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   for (row_iterator i_iter = m_begin ; i_iter != m_end; i_iter += 2) {
-40039:     dimension_type i = i_iter.index();
-40039:     row_reference m_i = *i_iter;
-40039:     row_reference m_ii = *(i_iter + 1);
-40039:     for (dimension_type j = 0; j < i; j += 2) {
-40039:       const N& m_i_j = m_i[j];
-40039:       const N& m_ii_jj = m_ii[j + 1];
-40039:       const N& m_ii_j = m_ii[j];
-40039:       const N& m_i_jj = m_i[j + 1];
-40039:       const Variable x(j/2);
-40039:       const Variable y(i/2);
-40039:       const Coefficient& g_coeff_x
-40039:         = (x.space_dimension() > g_space_dim)
-40039:         ? Coefficient_zero()
-40039:         : g.coefficient(x);
-40039:       const Coefficient& g_coeff_y
-40039:         = (y.space_dimension() > g_space_dim)
-40039:         ? Coefficient_zero()
-40039:         : g.coefficient(y);
-40039: 
-40039:       const bool difference_is_equality = is_additive_inverse(m_ii_jj, m_i_j);
-40039:       if (difference_is_equality) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:         numer_denom(m_i_j, numer, denom);
-40039:         product = denom * g_coeff_x;
-40039:         neg_assign(denom);
-40039:         add_mul_assign(product, denom, g_coeff_y);
-40039: 
-40039: 
-40039:         if (!is_line_or_ray) {
-40039:           neg_assign(numer);
-40039:           add_mul_assign(product, numer, g.divisor());
-40039:         }
-40039:         if (product != 0) {
-40039:           return Poly_Gen_Relation::nothing();
-40039:         }
-40039:       }
-40039:       else {
-40039:         if (!is_plus_infinity(m_i_j)) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:           numer_denom(m_i_j, numer, denom);
-40039:           product = denom * g_coeff_x;
-40039:           neg_assign(denom);
-40039:           add_mul_assign(product, denom, g_coeff_y);
-40039: 
-40039: 
-40039:           if (!is_line_or_ray) {
-40039:             neg_assign(numer);
-40039:             add_mul_assign(product, numer, g.divisor());
-40039:           }
-40039:           if (is_line && product != 0) {
-40039:             return Poly_Gen_Relation::nothing();
-40039:           }
-40039:           else if (product > 0) {
-40039:             return Poly_Gen_Relation::nothing();
-40039:           }
-40039:         }
-40039:         if (!is_plus_infinity(m_ii_jj)) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:           numer_denom(m_ii_jj, numer, denom);
-40039:           product = denom * g_coeff_y;
-40039:           neg_assign(denom);
-40039:           add_mul_assign(product, denom, g_coeff_x);
-40039: 
-40039: 
-40039:           if (!is_line_or_ray) {
-40039:             neg_assign(numer);
-40039:             add_mul_assign(product, numer, g.divisor());
-40039:           }
-40039:           if (is_line && product != 0) {
-40039:             return Poly_Gen_Relation::nothing();
-40039:           }
-40039:           else if (product > 0) {
-40039:             return Poly_Gen_Relation::nothing();
-40039:           }
-40039:         }
-40039:       }
-40039: 
-40039:       const bool sum_is_equality = is_additive_inverse(m_i_jj, m_ii_j);
-40039:       if (sum_is_equality) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:         numer_denom(m_ii_j, numer, denom);
-40039:         product = denom * g_coeff_x;
-40039:         add_mul_assign(product, denom, g_coeff_y);
-40039: 
-40039: 
-40039:         if (!is_line_or_ray) {
-40039:           neg_assign(numer);
-40039:           add_mul_assign(product, numer, g.divisor());
-40039:         }
-40039:         if (product != 0) {
-40039:           return Poly_Gen_Relation::nothing();
-40039:         }
-40039:       }
-40039:       else {
-40039:         if (!is_plus_infinity(m_i_jj)) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:           numer_denom(m_i_jj, numer, denom);
-40039:           neg_assign(denom);
-40039:           product = denom * g_coeff_x;
-40039:           add_mul_assign(product, denom, g_coeff_y);
-40039: 
-40039: 
-40039:           if (!is_line_or_ray) {
-40039:             neg_assign(numer);
-40039:             add_mul_assign(product, numer, g.divisor());
-40039:           }
-40039:           if (is_line && product != 0) {
-40039:             return Poly_Gen_Relation::nothing();
-40039:           }
-40039:           else if (product > 0) {
-40039:             return Poly_Gen_Relation::nothing();
-40039:           }
-40039:         }
-40039:         if (!is_plus_infinity(m_ii_j)) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:           numer_denom(m_ii_j, numer, denom);
-40039:           product = denom * g_coeff_x;
-40039:           add_mul_assign(product, denom, g_coeff_y);
-40039: 
-40039: 
-40039:           if (!is_line_or_ray) {
-40039:             neg_assign(numer);
-40039:             add_mul_assign(product, numer, g.divisor());
-40039:           }
-40039:           if (is_line && product != 0) {
-40039:             return Poly_Gen_Relation::nothing();
-40039:           }
-40039:           else if (product > 0) {
-40039:             return Poly_Gen_Relation::nothing();
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   return Poly_Gen_Relation::subsumes();
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::strong_closure_assign() const {
-40039: 
-40039:   if (marked_empty() || marked_strongly_closed() || space_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   Octagonal_Shape& x = const_cast<Octagonal_Shape<T>&>(*this);
-40039: 
-40039:   typedef typename OR_Matrix<N>::row_iterator row_iterator;
-40039:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
-40039: 
-40039:   const dimension_type n_rows = x.matrix.num_rows();
-40039:   const row_iterator m_begin = x.matrix.row_begin();
-40039:   const row_iterator m_end = x.matrix.row_end();
-40039: 
-40039: 
-40039:   for (row_iterator i = m_begin; i != m_end; ++i) {
-40039:     ((void) 0);
-40039:     assign_r((*i)[i.index()], 0, ROUND_NOT_NEEDED);
-40039:   }
-40039: # 2581 "../../src/Octagonal_Shape_templates.hh"
-40039:   typename OR_Matrix<N>::element_iterator iter_ij;
-40039:   std::vector<N> vec_k(n_rows);
-40039:   std::vector<N> vec_ck(n_rows);
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_sum1; N& sum1 = holder_sum1.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_sum2; N& sum2 = holder_sum2.item();
-40039:   row_reference x_k;
-40039:   row_reference x_ck;
-40039:   row_reference x_i;
-40039:   row_reference x_ci;
-40039: 
-40039: 
-40039: 
-40039:   for (int twice = 0; twice < 2; ++twice) {
-40039: 
-40039:     row_iterator x_k_iter = m_begin;
-40039:     row_iterator x_i_iter = m_begin;
-40039:     for (dimension_type k = 0; k < n_rows; k += 2) {
-40039:       const dimension_type ck = k + 1;
-40039: 
-40039:       iter_ij = x.matrix.element_begin();
-40039: 
-40039:       x_k = *x_k_iter;
-40039:       ++x_k_iter;
-40039:       x_ck = *x_k_iter;
-40039:       ++x_k_iter;
-40039: 
-40039:       for (dimension_type i = 0; i <= k; i += 2) {
-40039:         const dimension_type ci = i + 1;
-40039: 
-40039:         vec_k[i] = x_k[i];
-40039: 
-40039:         vec_k[ci] = x_k[ci];
-40039: 
-40039:         vec_ck[i] = x_ck[i];
-40039: 
-40039:         vec_ck[ci] = x_ck[ci];
-40039:       }
-40039:       x_i_iter = x_k_iter;
-40039:       for (dimension_type i = k + 2; i < n_rows; i += 2) {
-40039:         const dimension_type ci = i + 1;
-40039:         x_i = *x_i_iter;
-40039:         ++x_i_iter;
-40039:         x_ci = *x_i_iter;
-40039:         ++x_i_iter;
-40039: 
-40039:         vec_k[i] = x_ci[ck];
-40039: 
-40039:         vec_k[ci] = x_i[ck];
-40039: 
-40039:         vec_ck[i] = x_ci[k];
-40039: 
-40039:         vec_ck[ci] = x_i[k];
-40039:       }
-40039: 
-40039:       for (dimension_type i = 0; i < n_rows; ++i) {
-40039:         using namespace Implementation::Octagonal_Shapes;
-40039:         const dimension_type ci = coherent_index(i);
-40039:         const N& vec_k_ci = vec_k[ci];
-40039:         const N& vec_ck_ci = vec_ck[ci];
-40039: 
-40039: 
-40039:         for (dimension_type j = 0; j <= i; ) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:           add_assign_r(sum1, vec_ck_ci, vec_k[j], ROUND_UP);
-40039:           add_assign_r(sum2, vec_k_ci, vec_ck[j], ROUND_UP);
-40039:           min_assign(sum1, sum2);
-40039:           min_assign(*iter_ij, sum1);
-40039: 
-40039:           ++j;
-40039:           ++iter_ij;
-40039: 
-40039:           add_assign_r(sum1, vec_ck_ci, vec_k[j], ROUND_UP);
-40039:           add_assign_r(sum2, vec_k_ci, vec_ck[j], ROUND_UP);
-40039:           min_assign(sum1, sum2);
-40039:           min_assign(*iter_ij, sum1);
-40039: 
-40039:           ++j;
-40039:           ++iter_ij;
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   for (row_iterator i = m_begin; i != m_end; ++i) {
-40039:     N& x_i_i = (*i)[i.index()];
-40039:     if (sgn(x_i_i) < 0) {
-40039:       x.set_empty();
-40039:       return;
-40039:     }
-40039:     else {
-40039:       ((void) 0);
-40039: 
-40039:       assign_r(x_i_i, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   x.strong_coherence_assign();
-40039: 
-40039:   x.set_strongly_closed();
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::strong_coherence_assign() {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_semi_sum; N& semi_sum = holder_semi_sum.item();
-40039:   for (typename OR_Matrix<N>::row_iterator i_iter = matrix.row_begin(),
-40039:          i_end = matrix.row_end(); i_iter != i_end; ++i_iter) {
-40039:     typename OR_Matrix<N>::row_reference_type x_i = *i_iter;
-40039:     const dimension_type i = i_iter.index();
-40039:     using namespace Implementation::Octagonal_Shapes;
-40039:     const N& x_i_ci = x_i[coherent_index(i)];
-40039: 
-40039:     if (!is_plus_infinity(x_i_ci)) {
-40039:       for (dimension_type j = 0, rs_i = i_iter.row_size();
-40039:            j < rs_i; ++j) {
-40039:         if (i != j) {
-40039:           const N& x_cj_j = matrix[coherent_index(j)][j];
-40039:           if (!is_plus_infinity(x_cj_j)) {
-40039:             add_assign_r(semi_sum, x_i_ci, x_cj_j, ROUND_UP);
-40039:             div_2exp_assign_r(semi_sum, semi_sum, 1, ROUND_UP);
-40039:             min_assign(x_i[j], semi_sum);
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: Octagonal_Shape<T>::tight_coherence_would_make_empty() const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   for (dimension_type i = 0; i < 2*space_dim; i += 2) {
-40039:     const dimension_type ci = i + 1;
-40039:     const N& mat_i_ci = matrix[i][ci];
-40039:     if (!is_plus_infinity(mat_i_ci)
-40039: 
-40039:         && !is_even(mat_i_ci)
-40039: 
-40039:         && is_additive_inverse(mat_i_ci, matrix[ci][i])) {
-40039:       return true;
-40039:     }
-40039:   }
-40039:   return false;
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::tight_closure_assign() {
-40039:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_2746 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(std::numeric_limits<T>::is_integer)>) }
-40039: 
-40039:                                                           ;
-40039: 
-40039: 
-40039:   strong_closure_assign();
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039:   if (tight_coherence_would_make_empty()) {
-40039:     set_empty();
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::Dirty_Temp<N> holder_temp_one; N& temp_one = holder_temp_one.item();
-40039:     assign_r(temp_one, 1, ROUND_NOT_NEEDED);
-40039:     for (dimension_type i = 0; i < 2*space_dim; i += 2) {
-40039:       const dimension_type ci = i + 1;
-40039:       N& mat_i_ci = matrix[i][ci];
-40039:       if (!is_plus_infinity(mat_i_ci) && !is_even(mat_i_ci)) {
-40039:         sub_assign_r(mat_i_ci, mat_i_ci, temp_one, ROUND_UP);
-40039:       }
-40039:       N& mat_ci_i = matrix[ci][i];
-40039:       if (!is_plus_infinity(mat_ci_i) && !is_even(mat_ci_i)) {
-40039:         sub_assign_r(mat_ci_i, mat_ci_i, temp_one, ROUND_UP);
-40039:       }
-40039:     }
-40039: 
-40039:     strong_coherence_assign();
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>
-40039: ::incremental_strong_closure_assign(const Variable var) const {
-40039: 
-40039:   if (var.id() >= space_dim) {
-40039:     throw_dimension_incompatible("incremental_strong_closure_assign(v)",
-40039:                                  var.id());
-40039:   }
-40039: 
-40039: 
-40039:   if (marked_empty() || marked_strongly_closed()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   Octagonal_Shape& x = const_cast<Octagonal_Shape<T>&>(*this);
-40039: 
-40039:   typedef typename OR_Matrix<N>::row_iterator row_iterator;
-40039:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
-40039: 
-40039:   const row_iterator m_begin = x.matrix.row_begin();
-40039:   const row_iterator m_end = x.matrix.row_end();
-40039: 
-40039: 
-40039:   for (row_iterator i = m_begin; i != m_end; ++i) {
-40039:     ((void) 0);
-40039:     assign_r((*i)[i.index()], 0, ROUND_NOT_NEEDED);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type v = 2*var.id();
-40039:   const dimension_type cv = v + 1;
-40039:   row_iterator v_iter = m_begin + v;
-40039:   row_iterator cv_iter = v_iter + 1;
-40039:   row_reference x_v = *v_iter;
-40039:   row_reference x_cv = *cv_iter;
-40039:   const dimension_type rs_v = v_iter.row_size();
-40039:   const dimension_type n_rows = x.matrix.num_rows();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_sum; N& sum = holder_sum.item();
-40039:   using namespace Implementation::Octagonal_Shapes;
-40039:   for (row_iterator k_iter = m_begin; k_iter != m_end; ++k_iter) {
-40039:     const dimension_type k = k_iter.index();
-40039:     const dimension_type ck = coherent_index(k);
-40039:     const dimension_type rs_k = k_iter.row_size();
-40039:     row_reference x_k = *k_iter;
-40039:     row_reference x_ck = (k % 2 != 0) ? *(k_iter-1) : *(k_iter + 1);
-40039: 
-40039:     for (row_iterator i_iter = m_begin; i_iter != m_end; ++i_iter) {
-40039:       const dimension_type i = i_iter.index();
-40039:       const dimension_type ci = coherent_index(i);
-40039:       const dimension_type rs_i = i_iter.row_size();
-40039:       row_reference x_i = *i_iter;
-40039:       row_reference x_ci = (i % 2 != 0) ? *(i_iter-1) : *(i_iter + 1);
-40039: 
-40039:       const N& x_i_k = (k < rs_i) ? x_i[k] : x_ck[ci];
-40039:       if (!is_plus_infinity(x_i_k)) {
-40039:         const N& x_k_v = (v < rs_k) ? x_k[v] : x_cv[ck];
-40039:         if (!is_plus_infinity(x_k_v)) {
-40039:           add_assign_r(sum, x_i_k, x_k_v, ROUND_UP);
-40039:           N& x_i_v = (v < rs_i) ? x_i[v] : x_cv[ci];
-40039:           min_assign(x_i_v, sum);
-40039:         }
-40039:         const N& x_k_cv = (cv < rs_k) ? x_k[cv] : x_v[ck];
-40039:         if (!is_plus_infinity(x_k_cv)) {
-40039:           add_assign_r(sum, x_i_k, x_k_cv, ROUND_UP);
-40039:           N& x_i_cv = (cv < rs_i) ? x_i[cv] : x_v[ci];
-40039:           min_assign(x_i_cv, sum);
-40039:         }
-40039:       }
-40039:       const N& x_k_i = (i < rs_k) ? x_k[i] : x_ci[ck];
-40039:       if (!is_plus_infinity(x_k_i)) {
-40039:         const N& x_v_k = (k < rs_v) ? x_v[k] : x_ck[cv];
-40039:         if (!is_plus_infinity(x_v_k)) {
-40039:           N& x_v_i = (i < rs_v) ? x_v[i] : x_ci[cv];
-40039:           add_assign_r(sum, x_v_k, x_k_i, ROUND_UP);
-40039:           min_assign(x_v_i, sum);
-40039:         }
-40039:         const N& x_cv_k = (k < rs_v) ? x_cv[k] : x_ck[v];
-40039:         if (!is_plus_infinity(x_cv_k)) {
-40039:           N& x_cv_i = (i < rs_v) ? x_cv[i] : x_ci[v];
-40039:           add_assign_r(sum, x_cv_k, x_k_i, ROUND_UP);
-40039:           min_assign(x_cv_i, sum);
-40039:         }
-40039:       }
-40039: 
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   for (row_iterator i_iter = m_begin; i_iter != m_end; ++i_iter) {
-40039:     const dimension_type i = i_iter.index();
-40039:     const dimension_type ci = coherent_index(i);
-40039:     const dimension_type rs_i = i_iter.row_size();
-40039:     row_reference x_i = *i_iter;
-40039:     const N& x_i_v = (v < rs_i) ? x_i[v] : x_cv[ci];
-40039: 
-40039: 
-40039: 
-40039:     for (dimension_type j = 0; j < n_rows; ++j) {
-40039:       const dimension_type cj = coherent_index(j);
-40039:       row_reference x_cj = *(m_begin + cj);
-40039:       N& x_i_j = (j < rs_i) ? x_i[j] : x_cj[ci];
-40039:       if (!is_plus_infinity(x_i_v)) {
-40039:         const N& x_v_j = (j < rs_v) ? x_v[j] : x_cj[cv];
-40039:         if (!is_plus_infinity(x_v_j)) {
-40039:           add_assign_r(sum, x_i_v, x_v_j, ROUND_UP);
-40039:           min_assign(x_i_j, sum);
-40039:         }
-40039:       }
-40039:       const N& x_i_cv = (cv < rs_i) ? x_i[cv] : x_v[ci];
-40039:       if (!is_plus_infinity(x_i_cv)) {
-40039:         const N& x_cv_j = (j < rs_v) ? x_cv[j] : x_cj[v];
-40039:         if (!is_plus_infinity(x_cv_j)) {
-40039:           add_assign_r(sum, x_i_cv, x_cv_j, ROUND_UP);
-40039:           min_assign(x_i_j, sum);
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   for (row_iterator i = m_begin; i != m_end; ++i) {
-40039:     N& x_i_i = (*i)[i.index()];
-40039:     if (sgn(x_i_i) < 0) {
-40039:       x.set_empty();
-40039:       return;
-40039:     }
-40039:     else {
-40039: 
-40039:       ((void) 0);
-40039:       assign_r(x_i_i, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   x.strong_coherence_assign();
-40039: 
-40039:   x.set_strongly_closed();
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>
-40039: ::compute_successors(std::vector<dimension_type>& successor) const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type successor_size = matrix.num_rows();
-40039: 
-40039:   successor.reserve(successor_size);
-40039:   for (dimension_type i = 0; i < successor_size; ++i) {
-40039:     successor.push_back(i);
-40039:   }
-40039: 
-40039:   for (dimension_type i = successor_size; i-- > 0; ) {
-40039:     typename OR_Matrix<N>::const_row_iterator i_iter = matrix.row_begin() + i;
-40039:     typename OR_Matrix<N>::const_row_reference_type m_i = *i_iter;
-40039:     typename OR_Matrix<N>::const_row_reference_type m_ci
-40039:       = (i % 2 != 0) ? *(i_iter-1) : *(i_iter + 1);
-40039:     for (dimension_type j = 0; j < i; ++j) {
-40039: 
-40039: 
-40039:       using namespace Implementation::Octagonal_Shapes;
-40039:       dimension_type cj = coherent_index(j);
-40039:       if (is_additive_inverse(m_ci[cj], m_i[j])) {
-40039: 
-40039:         successor[j] = i;
-40039:       }
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>
-40039: ::compute_leaders(std::vector<dimension_type>& leaders) const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type leader_size = matrix.num_rows();
-40039: 
-40039:   leaders.reserve(leader_size);
-40039:   for (dimension_type i = 0; i < leader_size; ++i) {
-40039:     leaders.push_back(i);
-40039:   }
-40039: 
-40039:   for (typename OR_Matrix<N>::const_row_iterator i_iter = matrix.row_begin(),
-40039:          matrix_row_end = matrix.row_end();
-40039:        i_iter != matrix_row_end; ++i_iter) {
-40039:     typename OR_Matrix<N>::const_row_reference_type m_i = *i_iter;
-40039:     dimension_type i = i_iter.index();
-40039:     typename OR_Matrix<N>::const_row_reference_type m_ci
-40039:       = (i % 2 != 0) ? *(i_iter-1) : *(i_iter + 1);
-40039:     for (dimension_type j = 0; j < i; ++j) {
-40039:       using namespace Implementation::Octagonal_Shapes;
-40039:       dimension_type cj = coherent_index(j);
-40039:       if (is_additive_inverse(m_ci[cj], m_i[j])) {
-40039: 
-40039:         leaders[i] = leaders[j];
-40039:       }
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>
-40039: ::compute_leaders(std::vector<dimension_type>& successor,
-40039:                   std::vector<dimension_type>& no_sing_leaders,
-40039:                   bool& exist_sing_class,
-40039:                   dimension_type& sing_leader) const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   dimension_type successor_size = successor.size();
-40039:   std::deque<bool> dealt_with(successor_size, false);
-40039:   for (dimension_type i = 0; i < successor_size; ++i) {
-40039:     dimension_type next_i = successor[i];
-40039:     if (!dealt_with[i]) {
-40039: 
-40039: 
-40039:       using namespace Implementation::Octagonal_Shapes;
-40039:       if (next_i == coherent_index(i)) {
-40039:         exist_sing_class = true;
-40039:         sing_leader = i;
-40039:       }
-40039:       else {
-40039:         no_sing_leaders.push_back(i);
-40039:       }
-40039:     }
-40039: 
-40039:     dealt_with[next_i] = true;
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::strong_reduction_assign() const {
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return;
-40039:   }
-40039:   strong_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   std::vector<Bit_Row> non_red;
-40039:   non_redundant_matrix_entries(non_red);
-40039: 
-40039: 
-40039:   Octagonal_Shape<T>& x = const_cast<Octagonal_Shape<T>&>(*this);
-40039: 
-40039: 
-40039: 
-40039:   typename OR_Matrix<N>::element_iterator x_i = x.matrix.element_begin();
-40039:   for (dimension_type i = 0; i < 2 * space_dim; ++i) {
-40039:     const Bit_Row& non_red_i = non_red[i];
-40039:     for (dimension_type j = 0,
-40039:            j_end = OR_Matrix<N>::row_size(i); j < j_end; ++j, ++x_i) {
-40039:       if (!non_red_i[j]) {
-40039:         assign_r(*x_i, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:       }
-40039:     }
-40039:   }
-40039:   x.reset_strongly_closed();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>
-40039: ::non_redundant_matrix_entries(std::vector<Bit_Row>& non_redundant) const {
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:   non_redundant.resize(2*space_dim);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   std::vector<dimension_type> no_sing_leaders;
-40039:   dimension_type sing_leader = 0;
-40039:   bool exist_sing_class = false;
-40039:   std::vector<dimension_type> successor;
-40039:   compute_successors(successor);
-40039:   compute_leaders(successor, no_sing_leaders, exist_sing_class, sing_leader);
-40039:   const dimension_type num_no_sing_leaders = no_sing_leaders.size();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   for (dimension_type li = 0; li < num_no_sing_leaders; ++li) {
-40039:     const dimension_type i = no_sing_leaders[li];
-40039:     using namespace Implementation::Octagonal_Shapes;
-40039:     const dimension_type ci = coherent_index(i);
-40039:     typename OR_Matrix<N>::const_row_reference_type
-40039:       m_i = *(matrix.row_begin() + i);
-40039:     if (i % 2 == 0) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       if (i != successor[i]) {
-40039:         dimension_type j = i;
-40039:         dimension_type next_j = successor[j];
-40039:         while (j != next_j) {
-40039:           non_redundant[next_j].set(j);
-40039:           j = next_j;
-40039:           next_j = successor[j];
-40039:         }
-40039:         const dimension_type cj = coherent_index(j);
-40039:         non_redundant[cj].set(ci);
-40039:       }
-40039:     }
-40039: 
-40039:     dimension_type rs_li = (li % 2 != 0) ? li : (li + 1);
-40039: 
-40039:     Parma_Polyhedra_Library::Dirty_Temp<N> holder_tmp; N& tmp = holder_tmp.item();
-40039:     for (dimension_type lj = 0 ; lj <= rs_li; ++lj) {
-40039:       const dimension_type j = no_sing_leaders[lj];
-40039:       const dimension_type cj = coherent_index(j);
-40039:       const N& m_i_j = m_i[j];
-40039:       const N& m_i_ci = m_i[ci];
-40039:       bool to_add = true;
-40039: 
-40039: 
-40039: 
-40039:       if (j != ci) {
-40039:         add_assign_r(tmp, m_i_ci, matrix[cj][j], ROUND_UP);
-40039:         div_2exp_assign_r(tmp, tmp, 1, ROUND_UP);
-40039:         if (m_i_j >= tmp) {
-40039: 
-40039:           continue;
-40039:         }
-40039:       }
-40039: # 3140 "../../src/Octagonal_Shape_templates.hh"
-40039:       for (dimension_type lk = 0; lk < num_no_sing_leaders; ++lk) {
-40039:         const dimension_type k = no_sing_leaders[lk];
-40039:         if (k != i && k != j) {
-40039:           dimension_type ck = coherent_index(k);
-40039:           if (k < j) {
-40039: 
-40039:             add_assign_r(tmp, m_i[k], matrix[cj][ck], ROUND_UP);
-40039:           }
-40039:           else if (k < i) {
-40039: 
-40039:             add_assign_r(tmp, m_i[k], matrix[k][j], ROUND_UP);
-40039:           }
-40039:           else {
-40039: 
-40039:             add_assign_r(tmp, matrix[ck][ci], matrix[k][j], ROUND_UP);
-40039:           }
-40039: 
-40039:           if (m_i_j >= tmp) {
-40039:             to_add = false;
-40039:             break;
-40039:           }
-40039:         }
-40039:       }
-40039: 
-40039:       if (to_add) {
-40039: 
-40039:         non_redundant[i].set(j);
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (exist_sing_class) {
-40039:     non_redundant[sing_leader].set(sing_leader + 1);
-40039:     if (successor[sing_leader + 1] != sing_leader + 1) {
-40039:       dimension_type j = sing_leader;
-40039:       dimension_type next_j = successor[j + 1];
-40039:       while (next_j != j + 1) {
-40039:         non_redundant[next_j].set(j);
-40039:         j = next_j;
-40039:         next_j = successor[j + 1];
-40039:       }
-40039:       non_redundant[j + 1].set(j);
-40039:     }
-40039:     else {
-40039:       non_redundant[sing_leader + 1].set(sing_leader);
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::upper_bound_assign(const Octagonal_Shape& y) {
-40039: 
-40039:   if (space_dim != y.space_dim) {
-40039:     throw_dimension_incompatible("upper_bound_assign(y)", y);
-40039:   }
-40039: 
-40039: 
-40039:   y.strong_closure_assign();
-40039:   if (y.marked_empty()) {
-40039:     return;
-40039:   }
-40039:   strong_closure_assign();
-40039:   if (marked_empty()) {
-40039:     *this = y;
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   typename OR_Matrix<N>::const_element_iterator j = y.matrix.element_begin();
-40039:   for (typename OR_Matrix<N>::element_iterator i = matrix.element_begin(),
-40039:          matrix_element_end = matrix.element_end();
-40039:        i != matrix_element_end; ++i, ++j) {
-40039:     max_assign(*i, *j);
-40039:   }
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::difference_assign(const Octagonal_Shape& y) {
-40039: 
-40039:   if (space_dim != y.space_dim) {
-40039:     throw_dimension_incompatible("difference_assign(y)", y);
-40039:   }
-40039: 
-40039:   Octagonal_Shape& x = *this;
-40039: 
-40039: 
-40039: 
-40039:   x.strong_closure_assign();
-40039: 
-40039:   if (x.marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   if (y.marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (x.space_dim == 0) {
-40039:     x.set_empty();
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (y.contains(x)) {
-40039:     x.set_empty();
-40039:     return;
-40039:   }
-40039: 
-40039:   Octagonal_Shape new_oct(space_dim, EMPTY);
-40039: 
-40039: 
-40039: 
-40039:   const Constraint_System& y_cs = y.constraints();
-40039:   for (Constraint_System::const_iterator i = y_cs.begin(),
-40039:          y_cs_end = y_cs.end(); i != y_cs_end; ++i) {
-40039:     const Constraint& c = *i;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     if (x.relation_with(c).implies(Poly_Con_Relation::is_included())) {
-40039:       continue;
-40039:     }
-40039:     Octagonal_Shape z = x;
-40039:     const Linear_Expression e(c.expression());
-40039:     z.add_constraint(e <= 0);
-40039:     if (!z.is_empty()) {
-40039:       new_oct.upper_bound_assign(z);
-40039:     }
-40039:     if (c.is_equality()) {
-40039:       z = x;
-40039:       z.add_constraint(e >= 0);
-40039:       if (!z.is_empty()) {
-40039:         new_oct.upper_bound_assign(z);
-40039:       }
-40039:     }
-40039:   }
-40039:   *this = new_oct;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: Octagonal_Shape<T>::simplify_using_context_assign(const Octagonal_Shape& y) {
-40039:   Octagonal_Shape& x = *this;
-40039:   const dimension_type dim = x.space_dimension();
-40039: 
-40039:   if (dim != y.space_dimension()) {
-40039:     throw_dimension_incompatible("simplify_using_context_assign(y)", y);
-40039:   }
-40039: 
-40039: 
-40039:   if (dim == 0) {
-40039:     if (y.marked_empty()) {
-40039:       x.set_zero_dim_univ();
-40039:       return false;
-40039:     }
-40039:     else {
-40039:       return !x.marked_empty();
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (x.contains(y)) {
-40039:     Octagonal_Shape<T> res(dim, UNIVERSE);
-40039:     x.m_swap(res);
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039:   x.strong_closure_assign();
-40039:   if (x.marked_empty()) {
-40039: 
-40039:     dimension_type i;
-40039:     dimension_type j;
-40039: 
-40039:     for (i = 0; i < 2*dim; i += 2) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       if (!is_plus_infinity(y.matrix_at(i, i + 1))) {
-40039:         j = i + 1;
-40039:         goto found;
-40039:       }
-40039: 
-40039:       if (!is_plus_infinity(y.matrix_at(i + 1, i))) {
-40039:         j = i;
-40039:         ++i;
-40039:         goto found;
-40039:       }
-40039:     }
-40039: 
-40039: 
-40039:     for (i = 2; i < 2*dim; ++i) {
-40039:       for (j = 0; j < i; ++j) {
-40039: 
-40039:         if (!is_plus_infinity(y.matrix_at(i, j))) {
-40039:           goto found;
-40039:         }
-40039:       }
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:     return false;
-40039: 
-40039:   found:
-40039: 
-40039:     ((void) 0);
-40039:     Octagonal_Shape<T> res(dim, UNIVERSE);
-40039: 
-40039:     Parma_Polyhedra_Library::Dirty_Temp<N> holder_tmp; N& tmp = holder_tmp.item();
-40039:     assign_r(tmp, 1, ROUND_UP);
-40039:     add_assign_r(tmp, tmp, y.matrix_at(i, j), ROUND_UP);
-40039: 
-40039:     neg_assign_r(res.matrix_at(j, i), tmp, ROUND_DOWN);
-40039:     ((void) 0);
-40039:     x.m_swap(res);
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Octagonal_Shape<T> target = x;
-40039:   target.intersection_assign(y);
-40039:   const bool bool_result = !target.is_empty();
-40039: 
-40039: 
-40039: 
-40039:   std::vector<Bit_Row> x_non_redundant;
-40039:   x.non_redundant_matrix_entries(x_non_redundant);
-40039: 
-40039:   dimension_type x_num_non_redundant = 0;
-40039:   for (size_t i = x_non_redundant.size(); i-- > 0 ; ) {
-40039:     x_num_non_redundant += x_non_redundant[i].count_ones();
-40039:   }
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Octagonal_Shape<T> yy = y;
-40039: 
-40039: 
-40039:   Octagonal_Shape<T> res(dim, UNIVERSE);
-40039: 
-40039:   dimension_type res_num_non_redundant = 0;
-40039: 
-40039: 
-40039:   std::vector<dimension_type> x_leaders;
-40039:   x.compute_leaders(x_leaders);
-40039: 
-40039: 
-40039: 
-40039:   dimension_type sing_leader;
-40039:   for (sing_leader = 0; sing_leader < 2*dim; sing_leader += 2) {
-40039:     if (sing_leader == x_leaders[sing_leader]) {
-40039:       const N& x_s_ss = x.matrix_at(sing_leader, sing_leader + 1);
-40039:       const N& x_ss_s = x.matrix_at(sing_leader + 1, sing_leader);
-40039:       if (is_additive_inverse(x_s_ss, x_ss_s)) {
-40039: 
-40039:         break;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   for (dimension_type i = sing_leader; i < 2*dim; i += 2) {
-40039:     if (x_leaders[i] != sing_leader) {
-40039:       continue;
-40039:     }
-40039: 
-40039: 
-40039:     const N& x_i_ii = x.matrix_at(i, i + 1);
-40039:     N& yy_i_ii = yy.matrix_at(i, i + 1);
-40039:     if (x_i_ii < yy_i_ii) {
-40039: 
-40039:       res.matrix_at(i, i + 1) = x_i_ii;
-40039:       ++res_num_non_redundant;
-40039: 
-40039:       yy_i_ii = x_i_ii;
-40039:       yy.reset_strongly_closed();
-40039:     }
-40039:     const N& x_ii_i = x.matrix_at(i + 1, i);
-40039:     N& yy_ii_i = yy.matrix_at(i + 1, i);
-40039:     if (x_ii_i < yy_ii_i) {
-40039: 
-40039:       res.matrix_at(i + 1, i) = x_ii_i;
-40039:       ++res_num_non_redundant;
-40039: 
-40039:       yy_ii_i = x_ii_i;
-40039:       yy.reset_strongly_closed();
-40039:     }
-40039: 
-40039:     if (!yy.marked_strongly_closed()) {
-40039:       Variable var_i(i/2);
-40039:       yy.incremental_strong_closure_assign(var_i);
-40039:       if (target.contains(yy)) {
-40039: 
-40039:         if (res_num_non_redundant < x_num_non_redundant) {
-40039:           res.reset_strongly_closed();
-40039:           x.m_swap(res);
-40039:         }
-40039:         return bool_result;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   for (dimension_type i = 0; i < 2*dim; ++i) {
-40039:     const dimension_type j = x_leaders[i];
-40039:     if (j == i || j == sing_leader) {
-40039:       continue;
-40039:     }
-40039:     const N& x_i_j = x.matrix_at(i, j);
-40039:     ((void) 0);
-40039:     N& yy_i_j = yy.matrix_at(i, j);
-40039:     if (x_i_j < yy_i_j) {
-40039:       res.matrix_at(i, j) = x_i_j;
-40039:       ++res_num_non_redundant;
-40039: 
-40039:       yy_i_j = x_i_j;
-40039:       yy.reset_strongly_closed();
-40039:     }
-40039:     const N& x_j_i = x.matrix_at(j, i);
-40039:     N& yy_j_i = yy.matrix_at(j, i);
-40039:     ((void) 0);
-40039:     if (x_j_i < yy_j_i) {
-40039:       res.matrix_at(j, i) = x_j_i;
-40039:       ++res_num_non_redundant;
-40039: 
-40039:       yy_j_i = x_j_i;
-40039:       yy.reset_strongly_closed();
-40039:     }
-40039: 
-40039:     if (!yy.marked_strongly_closed()) {
-40039:       Variable var_j(j/2);
-40039:       yy.incremental_strong_closure_assign(var_j);
-40039:       if (target.contains(yy)) {
-40039: 
-40039:         if (res_num_non_redundant < x_num_non_redundant) {
-40039:           res.reset_strongly_closed();
-40039:           x.m_swap(res);
-40039:         }
-40039:         return bool_result;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   for (dimension_type i = 0; i < 2*dim; ++i) {
-40039:     if (i != x_leaders[i]) {
-40039:       continue;
-40039:     }
-40039:     const Bit_Row& x_non_redundant_i = x_non_redundant[i];
-40039:     for (dimension_type j = 0; j < 2*dim; ++j) {
-40039:       if (j != x_leaders[j]) {
-40039:         continue;
-40039:       }
-40039:       if (i >= j) {
-40039:         if (!x_non_redundant_i[j]) {
-40039:           continue;
-40039:         }
-40039:       }
-40039:       else if (!x_non_redundant[j][i]) {
-40039:         continue;
-40039:       }
-40039:       N& yy_i_j = yy.matrix_at(i, j);
-40039:       const N& x_i_j = x.matrix_at(i, j);
-40039:       if (x_i_j < yy_i_j) {
-40039:         res.matrix_at(i, j) = x_i_j;
-40039:         ++res_num_non_redundant;
-40039: 
-40039:         yy_i_j = x_i_j;
-40039:         yy.reset_strongly_closed();
-40039:         Variable var(i/2);
-40039:         yy.incremental_strong_closure_assign(var);
-40039:         if (target.contains(yy)) {
-40039: 
-40039:           if (res_num_non_redundant < x_num_non_redundant) {
-40039:             res.reset_strongly_closed();
-40039:             x.m_swap(res);
-40039:           }
-40039:           return bool_result;
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::ppl_unreachable();
-40039:   return false;
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::add_space_dimensions_and_embed(dimension_type m) {
-40039: 
-40039:   if (m == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039:   const dimension_type new_dim = space_dim + m;
-40039:   const bool was_zero_dim_univ = !marked_empty() && space_dim == 0;
-40039: 
-40039: 
-40039: 
-40039:   matrix.grow(new_dim);
-40039:   space_dim = new_dim;
-40039: 
-40039: 
-40039:   if (was_zero_dim_univ) {
-40039:     set_strongly_closed();
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::add_space_dimensions_and_project(dimension_type m) {
-40039: 
-40039:   if (m == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039:   const dimension_type n = matrix.num_rows();
-40039: 
-40039: 
-40039: 
-40039:   add_space_dimensions_and_embed(m);
-40039: 
-40039: 
-40039:   for (typename OR_Matrix<N>::row_iterator i = matrix.row_begin() + n,
-40039:          matrix_row_end = matrix.row_end(); i != matrix_row_end; i += 2) {
-40039:     typename OR_Matrix<N>::row_reference_type x_i = *i;
-40039:     typename OR_Matrix<N>::row_reference_type x_ci = *(i + 1);
-40039:     const dimension_type ind = i.index();
-40039:     assign_r(x_i[ind + 1], 0, ROUND_NOT_NEEDED);
-40039:     assign_r(x_ci[ind], 0, ROUND_NOT_NEEDED);
-40039:   }
-40039: 
-40039:   if (marked_strongly_closed()) {
-40039:     reset_strongly_closed();
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::remove_space_dimensions(const Variables_Set& vars) {
-40039: 
-40039: 
-40039: 
-40039:   if (vars.empty()) {
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type min_space_dim = vars.space_dimension();
-40039:   if (space_dim < min_space_dim) {
-40039:     throw_dimension_incompatible("remove_space_dimensions(vs)", min_space_dim);
-40039:   }
-40039: 
-40039:   const dimension_type new_space_dim = space_dim - vars.size();
-40039: 
-40039:   strong_closure_assign();
-40039: 
-40039: 
-40039:   if (new_space_dim == 0) {
-40039:     matrix.shrink(0);
-40039:     if (!marked_empty()) {
-40039: 
-40039:       set_zero_dim_univ();
-40039:     }
-40039:     space_dim = 0;
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename OR_Matrix<N>::element_iterator Elem_Iter;
-40039:   typedef typename std::iterator_traits<Elem_Iter>::difference_type diff_t;
-40039: 
-40039:   dimension_type first = *vars.begin();
-40039:   const dimension_type first_size = 2 * first * (first + 1);
-40039:   Elem_Iter iter = matrix.element_begin() + static_cast<diff_t>(first_size);
-40039: 
-40039:   for (dimension_type i = first + 1; i < space_dim; ++i) {
-40039:     if (vars.count(i) == 0) {
-40039:       typename OR_Matrix<N>::row_iterator row_iter = matrix.row_begin() + 2*i;
-40039:       typename OR_Matrix<N>::row_reference_type row_ref = *row_iter;
-40039:       typename OR_Matrix<N>::row_reference_type row_ref1 = *(++row_iter);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       for (dimension_type j = 0; j <= i; ++j) {
-40039:         if (vars.count(j) == 0) {
-40039:           assign_or_swap(*(iter++), row_ref[2*j]);
-40039:           assign_or_swap(*(iter++), row_ref[2*j + 1]);
-40039:         }
-40039:       }
-40039:       for (dimension_type j = 0; j <= i; ++j) {
-40039:         if (vars.count(j) == 0) {
-40039:           assign_or_swap(*(iter++), row_ref1[2*j]);
-40039:           assign_or_swap(*(iter++), row_ref1[2*j + 1]);
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   matrix.shrink(new_space_dim);
-40039:   space_dim = new_space_dim;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Partial_Function>
-40039: void
-40039: Octagonal_Shape<T>::map_space_dimensions(const Partial_Function& pfunc) {
-40039:   if (space_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039:   if (pfunc.has_empty_codomain()) {
-40039: 
-40039:     remove_higher_space_dimensions(0);
-40039:     return;
-40039:   }
-40039: 
-40039:   const dimension_type new_space_dim = pfunc.max_in_codomain() + 1;
-40039: 
-40039: 
-40039:   if (new_space_dim < space_dim) {
-40039:     strong_closure_assign();
-40039:   }
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     remove_higher_space_dimensions(new_space_dim);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   OR_Matrix<N> x(new_space_dim);
-40039: 
-40039:   typedef typename OR_Matrix<N>::row_iterator row_iterator;
-40039:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
-40039: 
-40039:   row_iterator m_begin = x.row_begin();
-40039: 
-40039:   for (row_iterator i_iter = matrix.row_begin(), i_end = matrix.row_end();
-40039:        i_iter != i_end; i_iter += 2) {
-40039:     dimension_type new_i;
-40039:     dimension_type i = i_iter.index()/2;
-40039: 
-40039: 
-40039: 
-40039:     if (pfunc.maps(i, new_i)) {
-40039:       row_reference r_i = *i_iter;
-40039:       row_reference r_ii = *(i_iter + 1);
-40039:       dimension_type double_new_i = 2*new_i;
-40039:       row_iterator x_iter = m_begin + double_new_i;
-40039:       row_reference x_i = *x_iter;
-40039:       row_reference x_ii = *(x_iter + 1);
-40039:       for (dimension_type j = 0; j <= i; ++j) {
-40039:         dimension_type new_j;
-40039: 
-40039:         if (pfunc.maps(j, new_j)) {
-40039:           dimension_type dj = 2*j;
-40039:           dimension_type double_new_j = 2*new_j;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:           if (new_i >= new_j) {
-40039:             assign_or_swap(x_i[double_new_j], r_i[dj]);
-40039:             assign_or_swap(x_ii[double_new_j], r_ii[dj]);
-40039:             assign_or_swap(x_ii[double_new_j + 1], r_ii[dj + 1]);
-40039:             assign_or_swap(x_i[double_new_j + 1], r_i[dj + 1]);
-40039:           }
-40039:           else {
-40039:             row_iterator x_j_iter = m_begin + double_new_j;
-40039:             row_reference x_j = *x_j_iter;
-40039:             row_reference x_jj = *(x_j_iter + 1);
-40039:             assign_or_swap(x_jj[double_new_i + 1], r_i[dj]);
-40039:             assign_or_swap(x_jj[double_new_i], r_ii[dj]);
-40039:             assign_or_swap(x_j[double_new_i + 1], r_i[dj + 1]);
-40039:             assign_or_swap(x_j[double_new_i], r_ii[dj + 1]);
-40039:           }
-40039: 
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   using std::swap;
-40039:   swap(matrix, x);
-40039:   space_dim = new_space_dim;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::intersection_assign(const Octagonal_Shape& y) {
-40039: 
-40039:   if (space_dim != y.space_dim) {
-40039:     throw_dimension_incompatible("intersection_assign(y)", y);
-40039:   }
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039:   if (y.marked_empty()) {
-40039:     set_empty();
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   bool changed = false;
-40039: 
-40039:   typename OR_Matrix<N>::const_element_iterator j = y.matrix.element_begin();
-40039:   for (typename OR_Matrix<N>::element_iterator i = matrix.element_begin(),
-40039:          matrix_element_end = matrix.element_end();
-40039:        i != matrix_element_end;
-40039:        ++i, ++j) {
-40039:     N& elem = *i;
-40039:     const N& y_elem = *j;
-40039:     if (y_elem < elem) {
-40039:       elem = y_elem;
-40039:       changed = true;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   if (changed && marked_strongly_closed()) {
-40039:     reset_strongly_closed();
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Iterator>
-40039: void
-40039: Octagonal_Shape<T>::CC76_extrapolation_assign(const Octagonal_Shape& y,
-40039:                                               Iterator first, Iterator last,
-40039:                                               unsigned* tp) {
-40039: 
-40039:   if (space_dim != y.space_dim) {
-40039:     throw_dimension_incompatible("CC76_extrapolation_assign(y)", y);
-40039:   }
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039:   strong_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039:   y.strong_closure_assign();
-40039: 
-40039:   if (y.marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   if (tp != 0 && *tp > 0) {
-40039:     Octagonal_Shape x_tmp(*this);
-40039:     x_tmp.CC76_extrapolation_assign(y, first, last, 0);
-40039: 
-40039:     if (!contains(x_tmp)) {
-40039:       --(*tp);
-40039:     }
-40039:     return;
-40039:   }
-40039: # 3858 "../../src/Octagonal_Shape_templates.hh"
-40039:   typename OR_Matrix<N>::const_element_iterator j = y.matrix.element_begin();
-40039:   for (typename OR_Matrix<N>::element_iterator i = matrix.element_begin(),
-40039:          matrix_element_end = matrix.element_end();
-40039:        i != matrix_element_end;
-40039:        ++i, ++j) {
-40039:     const N& y_elem = *j;
-40039:     N& elem = *i;
-40039:     if (y_elem < elem) {
-40039:       Iterator k = std::lower_bound(first, last, elem);
-40039:       if (k != last) {
-40039:         if (elem < *k) {
-40039:           assign_r(elem, *k, ROUND_UP);
-40039:         }
-40039:       }
-40039:       else {
-40039:         assign_r(elem, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   reset_strongly_closed();
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>
-40039: ::get_limiting_octagon(const Constraint_System& cs,
-40039:                        Octagonal_Shape& limiting_octagon) const {
-40039:   const dimension_type cs_space_dim = cs.space_dimension();
-40039: 
-40039:   ((void) 0);
-40039: 
-40039:   strong_closure_assign();
-40039:   bool is_oct_changed = false;
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_term; Parma_Polyhedra_Library::Coefficient& term = holder_term.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
-40039: 
-40039:   for (Constraint_System::const_iterator cs_i = cs.begin(),
-40039:          cs_end = cs.end(); cs_i != cs_end; ++cs_i) {
-40039:     const Constraint& c = *cs_i;
-40039:     dimension_type num_vars = 0;
-40039:     dimension_type i = 0;
-40039:     dimension_type j = 0;
-40039: 
-40039:     if (!Octagonal_Shape_Helper
-40039:       ::extract_octagonal_difference(c, cs_space_dim, num_vars, i, j,
-40039:                                      coeff, term)) {
-40039:       continue;
-40039:     }
-40039: 
-40039:     typedef typename OR_Matrix<N>::const_row_iterator Row_iterator;
-40039:     typedef typename OR_Matrix<N>::const_row_reference_type Row_reference;
-40039:     typedef typename OR_Matrix<N>::row_iterator row_iterator;
-40039:     typedef typename OR_Matrix<N>::row_reference_type row_reference;
-40039:     Row_iterator m_begin = matrix.row_begin();
-40039: 
-40039:     Row_iterator i_iter = m_begin + i;
-40039:     Row_reference m_i = *i_iter;
-40039:     OR_Matrix<N>& lo_mat = limiting_octagon.matrix;
-40039:     row_iterator lo_iter = lo_mat.row_begin() + i;
-40039:     row_reference lo_m_i = *lo_iter;
-40039:     N& lo_m_i_j = lo_m_i[j];
-40039:     if (coeff < 0) {
-40039:       neg_assign(coeff);
-40039:     }
-40039: 
-40039:     div_round_up(d, term, coeff);
-40039:     if (m_i[j] <= d) {
-40039:       if (c.is_inequality()) {
-40039:         if (lo_m_i_j > d) {
-40039:           lo_m_i_j = d;
-40039:           is_oct_changed = true;
-40039:         }
-40039:         else {
-40039: 
-40039:           if (i % 2 == 0) {
-40039:             ++i_iter;
-40039:             ++lo_iter;
-40039:           }
-40039:           else {
-40039:             --i_iter;
-40039:             --lo_iter;
-40039:           }
-40039:           Row_reference m_ci = *i_iter;
-40039:           row_reference lo_m_ci = *lo_iter;
-40039: 
-40039:           using namespace Implementation::Octagonal_Shapes;
-40039:           dimension_type cj = coherent_index(j);
-40039:           N& lo_m_ci_cj = lo_m_ci[cj];
-40039:           neg_assign(term);
-40039:           div_round_up(d, term, coeff);
-40039:           if (m_ci[cj] <= d && lo_m_ci_cj > d) {
-40039:             lo_m_ci_cj = d;
-40039:             is_oct_changed = true;
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   if (is_oct_changed && limiting_octagon.marked_strongly_closed()) {
-40039:     limiting_octagon.reset_strongly_closed();
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>
-40039: ::limited_CC76_extrapolation_assign(const Octagonal_Shape& y,
-40039:                                     const Constraint_System& cs,
-40039:                                     unsigned* tp) {
-40039: 
-40039: 
-40039:   if (space_dim != y.space_dim) {
-40039:     throw_dimension_incompatible("limited_CC76_extrapolation_assign(y, cs)",
-40039:                                  y);
-40039:   }
-40039: 
-40039:   const dimension_type cs_space_dim = cs.space_dimension();
-40039:   if (space_dim < cs_space_dim) {
-40039:     throw_constraint_incompatible("limited_CC76_extrapolation_assign(y, cs)");
-40039:   }
-40039: 
-40039: 
-40039:   if (cs.has_strict_inequalities()) {
-40039:     throw_constraint_incompatible("limited_CC76_extrapolation_assign(y, cs)");
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   if (y.marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   Octagonal_Shape limiting_octagon(space_dim, UNIVERSE);
-40039:   get_limiting_octagon(cs, limiting_octagon);
-40039:   CC76_extrapolation_assign(y, tp);
-40039:   intersection_assign(limiting_octagon);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::BHMZ05_widening_assign(const Octagonal_Shape& y,
-40039:                                            unsigned* tp) {
-40039: 
-40039:   if (space_dim != y.space_dim) {
-40039:     throw_dimension_incompatible("BHMZ05_widening_assign(y)", y);
-40039:   }
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039:   const dimension_type y_affine_dim = y.affine_dimension();
-40039: 
-40039: 
-40039: 
-40039:   if (y_affine_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type x_affine_dim = affine_dimension();
-40039:   ((void) 0);
-40039:   if (x_affine_dim != y_affine_dim) {
-40039:     return;
-40039:   }
-40039: 
-40039:   if (tp != 0 && *tp > 0) {
-40039:     Octagonal_Shape x_tmp(*this);
-40039:     x_tmp.BHMZ05_widening_assign(y, 0);
-40039: 
-40039:     if (!contains(x_tmp)) {
-40039:       --(*tp);
-40039:     }
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: 
-40039:   y.strong_reduction_assign();
-40039: 
-40039: 
-40039:   typename OR_Matrix<N>::const_element_iterator j = y.matrix.element_begin();
-40039:   for (typename OR_Matrix<N>::element_iterator i = matrix.element_begin(),
-40039:        matrix_element_end = matrix.element_end();
-40039:        i != matrix_element_end;
-40039:        ++i, ++j) {
-40039:     N& elem = *i;
-40039: 
-40039: 
-40039: 
-40039:     if (*j != elem) {
-40039:       assign_r(elem, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     }
-40039:   }
-40039:   reset_strongly_closed();
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>
-40039: ::limited_BHMZ05_extrapolation_assign(const Octagonal_Shape& y,
-40039:                                       const Constraint_System& cs,
-40039:                                       unsigned* tp) {
-40039: 
-40039: 
-40039:   if (space_dim != y.space_dim) {
-40039:     throw_dimension_incompatible("limited_BHMZ05_extrapolation_assign(y, cs)",
-40039:                                  y);
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type cs_space_dim = cs.space_dimension();
-40039:   if (space_dim < cs_space_dim) {
-40039:     throw_constraint_incompatible("limited_CH78_extrapolation_assign(y, cs)");
-40039:   }
-40039: 
-40039: 
-40039:   if (cs.has_strict_inequalities()) {
-40039:     throw_constraint_incompatible("limited_CH78_extrapolation_assign(y, cs)");
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   if (y.marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   Octagonal_Shape limiting_octagon(space_dim, UNIVERSE);
-40039:   get_limiting_octagon(cs, limiting_octagon);
-40039:   BHMZ05_widening_assign(y, tp);
-40039:   intersection_assign(limiting_octagon);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::CC76_narrowing_assign(const Octagonal_Shape& y) {
-40039: 
-40039:   if (space_dim != y.space_dim) {
-40039:     throw_dimension_incompatible("CC76_narrowing_assign(y)", y);
-40039:   }
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039:   y.strong_closure_assign();
-40039: 
-40039:   if (y.marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   strong_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   bool is_oct_changed = false;
-40039:   typename OR_Matrix<N>::const_element_iterator j = y.matrix.element_begin();
-40039:   for (typename OR_Matrix<N>::element_iterator i = matrix.element_begin(),
-40039:          matrix_element_end = matrix.element_end();
-40039:        i != matrix_element_end;
-40039:        ++i, ++j) {
-40039:     if (!is_plus_infinity(*i)
-40039:         && !is_plus_infinity(*j)
-40039:         && *i != *j) {
-40039:       *i = *j;
-40039:       is_oct_changed = true;
-40039:     }
-40039:   }
-40039: 
-40039:   if (is_oct_changed && marked_strongly_closed()) {
-40039:     reset_strongly_closed();
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>
-40039: ::deduce_v_pm_u_bounds(const dimension_type v_id,
-40039:                        const dimension_type last_id,
-40039:                        const Linear_Expression& sc_expr,
-40039:                        Coefficient_traits::const_reference sc_denom,
-40039:                        const N& ub_v) {
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_mpq_sc_denom; mpq_class& mpq_sc_denom = holder_mpq_sc_denom.item();
-40039:   assign_r(mpq_sc_denom, sc_denom, ROUND_NOT_NEEDED);
-40039: 
-40039: 
-40039:   const dimension_type n_v = 2*v_id;
-40039:   typename OR_Matrix<N>::row_reference_type m_cv = matrix[n_v + 1];
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_half; N& half = holder_half.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_minus_lb_u; mpq_class& minus_lb_u = holder_minus_lb_u.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_minus_q; mpq_class& minus_q = holder_minus_q.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_ub_u; mpq_class& ub_u = holder_ub_u.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_lb_u; mpq_class& lb_u = holder_lb_u.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_up_approx; N& up_approx = holder_up_approx.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_expr_u; Parma_Polyhedra_Library::Coefficient& minus_expr_u = holder_minus_expr_u.item();
-40039: 
-40039:   for (Linear_Expression::const_iterator u = sc_expr.begin(),
-40039:       u_end = sc_expr.lower_bound(Variable(last_id + 1)); u != u_end; ++u) {
-40039:     const dimension_type u_id = u.variable().id();
-40039: 
-40039:     if (u_id == v_id) {
-40039:       continue;
-40039:     }
-40039:     const Coefficient& expr_u = *u;
-40039: 
-40039:     const dimension_type n_u = u_id*2;
-40039: 
-40039:     if (expr_u > 0) {
-40039:       if (expr_u >= sc_denom) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:         div_2exp_assign_r(half, matrix[n_u + 1][n_u], 1, ROUND_UP);
-40039:         N& m_v_minus_u = (n_v < n_u) ? matrix[n_u][n_v] : m_cv[n_u + 1];
-40039:         sub_assign_r(m_v_minus_u, ub_v, half, ROUND_UP);
-40039:       }
-40039:       else {
-40039: 
-40039:         typename OR_Matrix<N>::row_reference_type m_u = matrix[n_u];
-40039:         const N& m_u_cu = m_u[n_u + 1];
-40039:         if (!is_plus_infinity(m_u_cu)) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:           assign_r(minus_lb_u, m_u_cu, ROUND_NOT_NEEDED);
-40039:           div_2exp_assign_r(minus_lb_u, minus_lb_u, 1, ROUND_NOT_NEEDED);
-40039:           assign_r(q, expr_u, ROUND_NOT_NEEDED);
-40039:           div_assign_r(q, q, mpq_sc_denom, ROUND_NOT_NEEDED);
-40039:           assign_r(ub_u, matrix[n_u + 1][n_u], ROUND_NOT_NEEDED);
-40039:           div_2exp_assign_r(ub_u, ub_u, 1, ROUND_NOT_NEEDED);
-40039: 
-40039:           add_assign_r(ub_u, ub_u, minus_lb_u, ROUND_NOT_NEEDED);
-40039: 
-40039:           sub_mul_assign_r(minus_lb_u, q, ub_u, ROUND_NOT_NEEDED);
-40039:           assign_r(up_approx, minus_lb_u, ROUND_UP);
-40039: 
-40039:           N& m_v_minus_u = (n_v < n_u) ? m_u[n_v] : m_cv[n_u + 1];
-40039:           add_assign_r(m_v_minus_u, ub_v, up_approx, ROUND_UP);
-40039:         }
-40039:       }
-40039:     }
-40039:     else {
-40039:       ((void) 0);
-40039: 
-40039:       neg_assign(minus_expr_u, expr_u);
-40039:       if (minus_expr_u >= sc_denom) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:         div_2exp_assign_r(half, matrix[n_u][n_u + 1], 1, ROUND_UP);
-40039:         N& m_v_plus_u = (n_v < n_u) ? matrix[n_u + 1][n_v] : m_cv[n_u];
-40039:         sub_assign_r(m_v_plus_u, ub_v, half, ROUND_UP);
-40039:       }
-40039:       else {
-40039: 
-40039:         typename OR_Matrix<N>::row_reference_type m_cu = matrix[n_u + 1];
-40039:         const N& m_cu_u = m_cu[n_u];
-40039:         if (!is_plus_infinity(m_cu_u)) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:           assign_r(ub_u, m_cu[n_u], ROUND_NOT_NEEDED);
-40039:           div_2exp_assign_r(ub_u, ub_u, 1, ROUND_NOT_NEEDED);
-40039:           assign_r(minus_q, minus_expr_u, ROUND_NOT_NEEDED);
-40039:           div_assign_r(minus_q, minus_q, mpq_sc_denom, ROUND_NOT_NEEDED);
-40039:           assign_r(lb_u, matrix[n_u][n_u + 1], ROUND_NOT_NEEDED);
-40039:           div_2exp_assign_r(lb_u, lb_u, 1, ROUND_NOT_NEEDED);
-40039:           neg_assign_r(lb_u, lb_u, ROUND_NOT_NEEDED);
-40039: 
-40039:           sub_assign_r(lb_u, lb_u, ub_u, ROUND_NOT_NEEDED);
-40039: 
-40039:           add_mul_assign_r(ub_u, minus_q, lb_u, ROUND_NOT_NEEDED);
-40039:           assign_r(up_approx, ub_u, ROUND_UP);
-40039: 
-40039:           N& m_v_plus_u = (n_v < n_u) ? m_cu[n_v] : m_cv[n_u];
-40039:           add_assign_r(m_v_plus_u, ub_v, up_approx, ROUND_UP);
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>
-40039: ::deduce_minus_v_pm_u_bounds(const dimension_type v_id,
-40039:                              const dimension_type last_id,
-40039:                              const Linear_Expression& sc_expr,
-40039:                              Coefficient_traits::const_reference sc_denom,
-40039:                              const N& minus_lb_v) {
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_mpq_sc_denom; mpq_class& mpq_sc_denom = holder_mpq_sc_denom.item();
-40039:   assign_r(mpq_sc_denom, sc_denom, ROUND_NOT_NEEDED);
-40039: 
-40039: 
-40039:   const dimension_type n_v = 2*v_id;
-40039:   typename OR_Matrix<N>::row_reference_type m_v = matrix[n_v];
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_half; N& half = holder_half.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_ub_u; mpq_class& ub_u = holder_ub_u.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_minus_lb_u; mpq_class& minus_lb_u = holder_minus_lb_u.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_up_approx; N& up_approx = holder_up_approx.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_expr_u; Parma_Polyhedra_Library::Coefficient& minus_expr_u = holder_minus_expr_u.item();
-40039: 
-40039:   for (Linear_Expression::const_iterator u = sc_expr.begin(),
-40039:       u_end = sc_expr.lower_bound(Variable(last_id + 1)); u != u_end; ++u) {
-40039:     const dimension_type u_id = u.variable().id();
-40039: 
-40039:     if (u_id == v_id) {
-40039:       continue;
-40039:     }
-40039:     const Coefficient& expr_u = *u;
-40039: 
-40039:     const dimension_type n_u = u_id*2;
-40039: 
-40039:     if (expr_u > 0) {
-40039:       if (expr_u >= sc_denom) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:         div_2exp_assign_r(half, matrix[n_u][n_u + 1], 1, ROUND_UP);
-40039:         N& m_u_minus_v = (n_v < n_u) ? matrix[n_u + 1][n_v + 1] : m_v[n_u];
-40039:         sub_assign_r(m_u_minus_v, minus_lb_v, half, ROUND_UP);
-40039:       }
-40039:       else {
-40039: 
-40039:         typename OR_Matrix<N>::row_reference_type m_cu = matrix[n_u + 1];
-40039:         const N& m_cu_u = m_cu[n_u];
-40039:         if (!is_plus_infinity(m_cu_u)) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:           assign_r(ub_u, m_cu[n_u], ROUND_NOT_NEEDED);
-40039:           div_2exp_assign_r(ub_u, ub_u, 1, ROUND_NOT_NEEDED);
-40039:           assign_r(q, expr_u, ROUND_NOT_NEEDED);
-40039:           div_assign_r(q, q, mpq_sc_denom, ROUND_NOT_NEEDED);
-40039:           assign_r(minus_lb_u, matrix[n_u][n_u + 1], ROUND_NOT_NEEDED);
-40039:           div_2exp_assign_r(minus_lb_u, minus_lb_u, 1, ROUND_NOT_NEEDED);
-40039: 
-40039:           add_assign_r(minus_lb_u, ub_u, minus_lb_u, ROUND_NOT_NEEDED);
-40039: 
-40039:           sub_mul_assign_r(ub_u, q, minus_lb_u, ROUND_NOT_NEEDED);
-40039:           assign_r(up_approx, ub_u, ROUND_UP);
-40039: 
-40039:           N& m_u_minus_v = (n_v < n_u) ? m_cu[n_v + 1] : m_v[n_u];
-40039:           add_assign_r(m_u_minus_v, minus_lb_v, up_approx, ROUND_UP);
-40039:         }
-40039:       }
-40039:     }
-40039:     else {
-40039:       ((void) 0);
-40039: 
-40039:       neg_assign(minus_expr_u, expr_u);
-40039:       if (minus_expr_u >= sc_denom) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:         div_2exp_assign_r(half, matrix[n_u + 1][n_u], 1, ROUND_UP);
-40039:         N& m_minus_v_minus_u = (n_v < n_u)
-40039:           ? matrix[n_u][n_v + 1]
-40039:           : m_v[n_u + 1];
-40039:         sub_assign_r(m_minus_v_minus_u, minus_lb_v, half, ROUND_UP);
-40039:       }
-40039:       else {
-40039: 
-40039:         typename OR_Matrix<N>::row_reference_type m_u = matrix[n_u];
-40039:         const N& m_u_cu = m_u[n_u + 1];
-40039:         if (!is_plus_infinity(m_u_cu)) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:           assign_r(ub_u, matrix[n_u + 1][n_u], ROUND_NOT_NEEDED);
-40039:           div_2exp_assign_r(ub_u, ub_u, 1, ROUND_NOT_NEEDED);
-40039:           assign_r(q, expr_u, ROUND_NOT_NEEDED);
-40039:           div_assign_r(q, q, mpq_sc_denom, ROUND_NOT_NEEDED);
-40039:           assign_r(minus_lb_u, m_u[n_u + 1], ROUND_NOT_NEEDED);
-40039:           div_2exp_assign_r(minus_lb_u, minus_lb_u, 1, ROUND_NOT_NEEDED);
-40039: 
-40039:           add_assign_r(ub_u, ub_u, minus_lb_u, ROUND_NOT_NEEDED);
-40039: 
-40039:           add_mul_assign_r(minus_lb_u, q, ub_u, ROUND_NOT_NEEDED);
-40039:           assign_r(up_approx, minus_lb_u, ROUND_UP);
-40039: 
-40039:           N& m_minus_v_minus_u = (n_v < n_u) ? m_u[n_v + 1] : m_v[n_u + 1];
-40039:           add_assign_r(m_minus_v_minus_u, minus_lb_v, up_approx, ROUND_UP);
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>
-40039: ::forget_all_octagonal_constraints(const dimension_type v_id) {
-40039:   ((void) 0);
-40039:   const dimension_type n_v = 2*v_id;
-40039:   typename OR_Matrix<N>::row_iterator m_iter = matrix.row_begin() + n_v;
-40039:   typename OR_Matrix<N>::row_reference_type r_v = *m_iter;
-40039:   typename OR_Matrix<N>::row_reference_type r_cv = *(++m_iter);
-40039:   for (dimension_type h = m_iter.row_size(); h-- > 0; ) {
-40039:     assign_r(r_v[h], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     assign_r(r_cv[h], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:   }
-40039:   ++m_iter;
-40039:   for (typename OR_Matrix<N>::row_iterator m_end = matrix.row_end();
-40039:        m_iter != m_end; ++m_iter) {
-40039:     typename OR_Matrix<N>::row_reference_type r = *m_iter;
-40039:     assign_r(r[n_v], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     assign_r(r[n_v + 1], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>
-40039: ::forget_binary_octagonal_constraints(const dimension_type v_id) {
-40039:   ((void) 0);
-40039:   const dimension_type n_v = 2*v_id;
-40039:   typename OR_Matrix<N>::row_iterator m_iter = matrix.row_begin() + n_v;
-40039:   typename OR_Matrix<N>::row_reference_type r_v = *m_iter;
-40039:   typename OR_Matrix<N>::row_reference_type r_cv = *(++m_iter);
-40039:   for (dimension_type k = n_v; k-- > 0; ) {
-40039:     assign_r(r_v[k], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     assign_r(r_cv[k], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:   }
-40039:   ++m_iter;
-40039:   for (typename OR_Matrix<N>::row_iterator m_end = matrix.row_end();
-40039:        m_iter != m_end; ++m_iter) {
-40039:     typename OR_Matrix<N>::row_reference_type r = *m_iter;
-40039:     assign_r(r[n_v], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     assign_r(r[n_v + 1], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::unconstrain(const Variable var) {
-40039: 
-40039:   const dimension_type var_id = var.id();
-40039:   if (space_dimension() < var_id + 1) {
-40039:     throw_dimension_incompatible("unconstrain(var)", var_id + 1);
-40039:   }
-40039: 
-40039: 
-40039:   strong_closure_assign();
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   forget_all_octagonal_constraints(var_id);
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::unconstrain(const Variables_Set& vars) {
-40039: 
-40039: 
-40039:   if (vars.empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type min_space_dim = vars.space_dimension();
-40039:   if (space_dimension() < min_space_dim) {
-40039:     throw_dimension_incompatible("unconstrain(vs)", min_space_dim);
-40039:   }
-40039: 
-40039: 
-40039:   strong_closure_assign();
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   for (Variables_Set::const_iterator vsi = vars.begin(),
-40039:          vsi_end = vars.end(); vsi != vsi_end; ++vsi) {
-40039:     forget_all_octagonal_constraints(*vsi);
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::refine(const Variable var,
-40039:                            const Relation_Symbol relsym,
-40039:                            const Linear_Expression& expr,
-40039:                            Coefficient_traits::const_reference denominator) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   const dimension_type var_id = var.id();
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039:   const Coefficient& b = expr.inhomogeneous_term();
-40039: 
-40039: 
-40039:   dimension_type t = 0;
-40039: 
-40039: 
-40039:   dimension_type w_id = expr.last_nonzero();
-40039: 
-40039:   if (w_id != 0) {
-40039:     ++t;
-40039:     if (!expr.all_zeroes(1, w_id)) {
-40039:       ++t;
-40039:     }
-40039:     --w_id;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename OR_Matrix<N>::row_iterator row_iterator;
-40039:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
-40039:   typedef typename OR_Matrix<N>::const_row_iterator Row_iterator;
-40039:   typedef typename OR_Matrix<N>::const_row_reference_type Row_reference;
-40039: 
-40039:   const row_iterator m_begin = matrix.row_begin();
-40039:   const dimension_type n_var = 2*var_id;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item();
-40039:   neg_assign(minus_denom, denominator);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (t == 1 && expr.coefficient(Variable(w_id)) != denominator
-40039:       && expr.coefficient(Variable(w_id)) != minus_denom) {
-40039:     t = 2;
-40039:   }
-40039:   if (t == 0) {
-40039: 
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_two_b; Parma_Polyhedra_Library::Coefficient& two_b = holder_two_b.item();
-40039:     two_b = 2*b;
-40039:     switch (relsym) {
-40039:     case EQUAL:
-40039: 
-40039:       add_octagonal_constraint(n_var + 1, n_var, two_b, denominator);
-40039:       add_octagonal_constraint(n_var, n_var + 1, two_b, minus_denom);
-40039:       break;
-40039:     case LESS_OR_EQUAL:
-40039: 
-40039:       add_octagonal_constraint(n_var + 1, n_var, two_b, denominator);
-40039:       break;
-40039:     case GREATER_OR_EQUAL:
-40039: 
-40039: 
-40039:       add_octagonal_constraint(n_var, n_var + 1, two_b, minus_denom);
-40039:       break;
-40039:     default:
-40039: 
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       break;
-40039:     }
-40039:   }
-40039:   else if (t == 1) {
-40039: 
-40039:     const Coefficient& w_coeff = expr.coefficient(Variable(w_id));
-40039:     const dimension_type n_w = 2*w_id;
-40039:     switch (relsym) {
-40039:     case EQUAL:
-40039:       if (w_coeff == denominator) {
-40039: 
-40039:         if (var_id < w_id) {
-40039:           add_octagonal_constraint(n_w, n_var, b, denominator);
-40039:           add_octagonal_constraint(n_w + 1, n_var + 1, b, minus_denom);
-40039:         }
-40039:         else {
-40039:           add_octagonal_constraint(n_var + 1, n_w + 1, b, denominator);
-40039:           add_octagonal_constraint(n_var, n_w, b, minus_denom);
-40039:         }
-40039:       }
-40039:       else {
-40039: 
-40039:         if (var_id < w_id) {
-40039:           add_octagonal_constraint(n_w + 1, n_var, b, denominator);
-40039:           add_octagonal_constraint(n_w, n_var + 1, b, minus_denom);
-40039:         }
-40039:         else {
-40039:           add_octagonal_constraint(n_var + 1, n_w, b, denominator);
-40039:           add_octagonal_constraint(n_var, n_w + 1, b, minus_denom);
-40039:         }
-40039:       }
-40039:       break;
-40039:     case LESS_OR_EQUAL:
-40039:       {
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
-40039:         div_round_up(d, b, denominator);
-40039: 
-40039: 
-40039:         if (w_coeff == denominator) {
-40039: 
-40039:           if (var_id < w_id) {
-40039:             add_octagonal_constraint(n_w, n_var, d);
-40039:           }
-40039:           else {
-40039:             add_octagonal_constraint(n_var + 1, n_w + 1, d);
-40039:           }
-40039:         }
-40039:         else if (w_coeff == minus_denom) {
-40039: 
-40039:           if (var_id < w_id) {
-40039:             add_octagonal_constraint(n_w + 1, n_var, d);
-40039:           }
-40039:           else {
-40039:             add_octagonal_constraint(n_var + 1, n_w, d);
-40039:           }
-40039:         }
-40039:         break;
-40039:       }
-40039: 
-40039:     case GREATER_OR_EQUAL:
-40039:       {
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
-40039:         div_round_up(d, b, minus_denom);
-40039: 
-40039: 
-40039:         if (w_coeff == denominator) {
-40039: 
-40039: 
-40039:           if (var_id < w_id) {
-40039:             add_octagonal_constraint(n_w + 1, n_var + 1, d);
-40039:           }
-40039:           else {
-40039:             add_octagonal_constraint(n_var, n_w, d);
-40039:           }
-40039:         }
-40039:         else if (w_coeff == minus_denom) {
-40039: 
-40039: 
-40039:           if (var_id < w_id) {
-40039:             add_octagonal_constraint(n_w, n_var + 1, d);
-40039:           }
-40039:           else {
-40039:             add_octagonal_constraint(n_var, n_w + 1, d);
-40039:           }
-40039:         }
-40039:         break;
-40039:       }
-40039: 
-40039:     default:
-40039: 
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       break;
-40039:     }
-40039:   }
-40039:   else {
-40039: 
-40039: 
-40039:     const bool is_sc = (denominator > 0);
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item();
-40039:     neg_assign(minus_b, b);
-40039:     const Coefficient& sc_b = is_sc ? b : minus_b;
-40039:     const Coefficient& minus_sc_b = is_sc ? minus_b : b;
-40039:     const Coefficient& sc_denom = is_sc ? denominator : minus_denom;
-40039:     const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator;
-40039: 
-40039: 
-40039: 
-40039:     Linear_Expression minus_expr;
-40039:     if (!is_sc) {
-40039:       minus_expr = -expr;
-40039:     }
-40039:     const Linear_Expression& sc_expr = is_sc ? expr : minus_expr;
-40039: 
-40039:     Parma_Polyhedra_Library::Dirty_Temp<N> holder_sum; N& sum = holder_sum.item();
-40039: 
-40039:     dimension_type pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
-40039: 
-40039:     dimension_type pinf_count = 0;
-40039: 
-40039:     switch (relsym) {
-40039:     case EQUAL:
-40039:       {
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_neg_sum; N& neg_sum = holder_neg_sum.item();
-40039: 
-40039:         dimension_type neg_pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
-40039: 
-40039:         dimension_type neg_pinf_count = 0;
-40039: 
-40039: 
-40039:         assign_r(sum, sc_b, ROUND_UP);
-40039:         assign_r(neg_sum, minus_sc_b, ROUND_UP);
-40039: 
-40039: 
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_i; N& coeff_i = holder_coeff_i.item();
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_half; N& half = holder_half.item();
-40039:         Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item();
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_minus_coeff_i; N& minus_coeff_i = holder_minus_coeff_i.item();
-40039: 
-40039: 
-40039:         for (Row_iterator m_iter = m_begin,
-40039:                m_iter_end = m_begin + (2 * w_id + 2);
-40039:              m_iter != m_iter_end; ) {
-40039:           const dimension_type n_i = m_iter.index();
-40039:           const dimension_type id = n_i/2;
-40039:           Row_reference m_i = *m_iter;
-40039:           ++m_iter;
-40039:           Row_reference m_ci = *m_iter;
-40039:           ++m_iter;
-40039:           const Coefficient& sc_i = sc_expr.coefficient(Variable(id));
-40039:           const int sign_i = sgn(sc_i);
-40039:           if (sign_i > 0) {
-40039:             assign_r(coeff_i, sc_i, ROUND_UP);
-40039: 
-40039:             if (pinf_count <= 1) {
-40039:               const N& double_approx_i = m_ci[n_i];
-40039:               if (!is_plus_infinity(double_approx_i)) {
-40039: 
-40039:                 div_2exp_assign_r(half, double_approx_i, 1, ROUND_UP);
-40039:                 add_mul_assign_r(sum, coeff_i, half, ROUND_UP);
-40039:               }
-40039:               else {
-40039:                 ++pinf_count;
-40039:                 pinf_index = id;
-40039:               }
-40039:             }
-40039: 
-40039:             if (neg_pinf_count <= 1) {
-40039:               const N& double_approx_minus_i = m_i[n_i + 1];
-40039:               if (!is_plus_infinity(double_approx_minus_i)) {
-40039: 
-40039:                 div_2exp_assign_r(half, double_approx_minus_i, 1, ROUND_UP);
-40039:                 add_mul_assign_r(neg_sum, coeff_i, half, ROUND_UP);
-40039:               }
-40039:               else {
-40039:                 ++neg_pinf_count;
-40039:                 neg_pinf_index = id;
-40039:               }
-40039:             }
-40039:           }
-40039:           else if (sign_i < 0) {
-40039:             neg_assign_r(minus_sc_i, sc_i, ROUND_NOT_NEEDED);
-40039:             assign_r(minus_coeff_i, minus_sc_i, ROUND_UP);
-40039: 
-40039:             if (pinf_count <= 1) {
-40039:               const N& double_approx_minus_i = m_i[n_i + 1];
-40039:               if (!is_plus_infinity(double_approx_minus_i)) {
-40039: 
-40039:                 div_2exp_assign_r(half, double_approx_minus_i, 1, ROUND_UP);
-40039:                 add_mul_assign_r(sum, minus_coeff_i, half, ROUND_UP);
-40039:               }
-40039:               else {
-40039:                 ++pinf_count;
-40039:                 pinf_index = id;
-40039:               }
-40039:             }
-40039: 
-40039:             if (neg_pinf_count <= 1) {
-40039:               const N& double_approx_i = m_ci[n_i];
-40039:               if (!is_plus_infinity(double_approx_i)) {
-40039: 
-40039:                 div_2exp_assign_r(half, double_approx_i, 1, ROUND_UP);
-40039:                 add_mul_assign_r(neg_sum, minus_coeff_i, half, ROUND_UP);
-40039:               }
-40039:               else {
-40039:                 ++neg_pinf_count;
-40039:                 neg_pinf_index = id;
-40039:               }
-40039:             }
-40039:           }
-40039:         }
-40039: 
-40039:         if (pinf_count > 1 && neg_pinf_count > 1) {
-40039:           ((void) 0);
-40039:           return;
-40039:         }
-40039: 
-40039: 
-40039:         reset_strongly_closed();
-40039: 
-40039: 
-40039:         if (pinf_count <= 1) {
-40039: 
-40039:           if (sc_denom != 1) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:             Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
-40039:             assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
-40039:             neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
-40039:             div_assign_r(sum, sum, down_sc_denom, ROUND_UP);
-40039:           }
-40039: 
-40039:           if (pinf_count == 0) {
-40039: 
-40039:             Parma_Polyhedra_Library::Dirty_Temp<N> holder_double_sum; N& double_sum = holder_double_sum.item();
-40039:             mul_2exp_assign_r(double_sum, sum, 1, ROUND_UP);
-40039:             matrix[n_var + 1][n_var] = double_sum;
-40039: 
-40039:             deduce_v_pm_u_bounds(var_id, w_id, sc_expr, sc_denom, sum);
-40039:           }
-40039:           else {
-40039: 
-40039:             if (pinf_index != var_id) {
-40039:               const Coefficient& ppi
-40039:                 = sc_expr.coefficient(Variable(pinf_index));
-40039:               if (ppi == sc_denom) {
-40039: 
-40039:                 if (var_id < pinf_index) {
-40039:                   matrix[2*pinf_index][n_var] = sum;
-40039:                 }
-40039:                 else {
-40039:                   matrix[n_var + 1][2*pinf_index + 1] = sum;
-40039:                 }
-40039:               }
-40039:               else {
-40039:                 if (ppi == minus_sc_denom) {
-40039: 
-40039:                   if (var_id < pinf_index) {
-40039:                     matrix[2*pinf_index + 1][n_var] = sum;
-40039:                   }
-40039:                   else {
-40039:                     matrix[n_var + 1][2*pinf_index] = sum;
-40039:                   }
-40039:                 }
-40039:               }
-40039:             }
-40039:           }
-40039:         }
-40039: 
-40039: 
-40039:         if (neg_pinf_count <= 1) {
-40039: 
-40039:           if (sc_denom != 1) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:             Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
-40039:             assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
-40039:             neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
-40039:             div_assign_r(neg_sum, neg_sum, down_sc_denom, ROUND_UP);
-40039:           }
-40039: 
-40039:           if (neg_pinf_count == 0) {
-40039: 
-40039:             Parma_Polyhedra_Library::Dirty_Temp<N> holder_double_neg_sum; N& double_neg_sum = holder_double_neg_sum.item();
-40039:             mul_2exp_assign_r(double_neg_sum, neg_sum, 1, ROUND_UP);
-40039:             matrix[n_var][n_var + 1] = double_neg_sum;
-40039: 
-40039:             deduce_minus_v_pm_u_bounds(var_id, w_id, sc_expr, sc_denom,
-40039:                                        neg_sum);
-40039:           }
-40039:           else {
-40039: 
-40039:             if (neg_pinf_index != var_id) {
-40039:               const Coefficient& npi
-40039:                 = sc_expr.coefficient(Variable(neg_pinf_index));
-40039:               if (npi == sc_denom) {
-40039: 
-40039: 
-40039:                 if (neg_pinf_index < var_id) {
-40039:                   matrix[n_var][2*neg_pinf_index] = neg_sum;
-40039:                 }
-40039:                 else {
-40039:                   matrix[2*neg_pinf_index + 1][n_var + 1] = neg_sum;
-40039:                 }
-40039:               }
-40039:               else {
-40039:                 if (npi == minus_sc_denom) {
-40039: 
-40039: 
-40039:                   if (neg_pinf_index < var_id) {
-40039:                     matrix[n_var][2*neg_pinf_index + 1] = neg_sum;
-40039:                   }
-40039:                   else {
-40039:                     matrix[2*neg_pinf_index][n_var + 1] = neg_sum;
-40039:                   }
-40039:                 }
-40039:               }
-40039:             }
-40039:           }
-40039:         }
-40039:         break;
-40039:       }
-40039: 
-40039:     case LESS_OR_EQUAL:
-40039:       {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:         assign_r(sum, sc_b, ROUND_UP);
-40039: 
-40039: 
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_i; N& coeff_i = holder_coeff_i.item();
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_approx_i; N& approx_i = holder_approx_i.item();
-40039:         Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item();
-40039: 
-40039: 
-40039:         for (row_iterator m_iter = m_begin,
-40039:                m_iter_end = m_begin + (2 * w_id + 2);
-40039:              m_iter != m_iter_end; ) {
-40039:           const dimension_type n_i = m_iter.index();
-40039:           const dimension_type id = n_i/2;
-40039:           row_reference m_i = *m_iter;
-40039:           ++m_iter;
-40039:           row_reference m_ci = *m_iter;
-40039:           ++m_iter;
-40039:           const Coefficient& sc_i = sc_expr.coefficient(Variable(id));
-40039:           const int sign_i = sgn(sc_i);
-40039:           if (sign_i == 0) {
-40039:             continue;
-40039:           }
-40039: 
-40039:           const N& double_approx_i = (sign_i > 0) ? m_ci[n_i] : m_i[n_i + 1];
-40039:           if (is_plus_infinity(double_approx_i)) {
-40039:             if (++pinf_count > 1) {
-40039:               break;
-40039:             }
-40039:             pinf_index = id;
-40039:             continue;
-40039:           }
-40039:           if (sign_i > 0) {
-40039:             assign_r(coeff_i, sc_i, ROUND_UP);
-40039:           }
-40039:           else {
-40039:             neg_assign(minus_sc_i, sc_i);
-40039:             assign_r(coeff_i, minus_sc_i, ROUND_UP);
-40039:           }
-40039:           div_2exp_assign_r(approx_i, double_approx_i, 1, ROUND_UP);
-40039:           add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP);
-40039:         }
-40039: 
-40039:         if (sc_denom != 1) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:           Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
-40039:           assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
-40039:           neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
-40039:           div_assign_r(sum, sum, down_sc_denom, ROUND_UP);
-40039:         }
-40039: 
-40039:         if (pinf_count == 0) {
-40039: 
-40039:           Parma_Polyhedra_Library::Dirty_Temp<N> holder_double_sum; N& double_sum = holder_double_sum.item();
-40039:           mul_2exp_assign_r(double_sum, sum, 1, ROUND_UP);
-40039:           add_octagonal_constraint(n_var + 1, n_var, double_sum);
-40039: 
-40039:           deduce_v_pm_u_bounds(var_id, w_id, sc_expr, sc_denom, sum);
-40039:         }
-40039:         else if (pinf_count == 1) {
-40039:           dimension_type pinf_ind = 2*pinf_index;
-40039:           if (expr.coefficient(Variable(pinf_index)) == denominator ) {
-40039: 
-40039:             if (var_id < pinf_index) {
-40039:               add_octagonal_constraint(pinf_ind, n_var, sum);
-40039:             }
-40039:             else {
-40039:               add_octagonal_constraint(n_var + 1, pinf_ind + 1, sum);
-40039:             }
-40039:           }
-40039:           else {
-40039:             if (expr.coefficient(Variable(pinf_index)) == minus_denom) {
-40039: 
-40039:               if (var_id < pinf_index) {
-40039:                 add_octagonal_constraint(pinf_ind + 1, n_var, sum);
-40039:               }
-40039:               else {
-40039:                 add_octagonal_constraint(n_var + 1, pinf_ind, sum);
-40039:               }
-40039:             }
-40039:           }
-40039:         }
-40039:         break;
-40039:       }
-40039: 
-40039:     case GREATER_OR_EQUAL:
-40039:       {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:         assign_r(sum, minus_sc_b, ROUND_UP);
-40039: 
-40039: 
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_i; N& coeff_i = holder_coeff_i.item();
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_approx_i; N& approx_i = holder_approx_i.item();
-40039:         Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item();
-40039:         for (row_iterator m_iter = m_begin,
-40039:                m_iter_end = m_begin + (2 * w_id + 2);
-40039:              m_iter != m_iter_end; ) {
-40039:           const dimension_type n_i = m_iter.index();
-40039:           const dimension_type id = n_i/2;
-40039:           row_reference m_i = *m_iter;
-40039:           ++m_iter;
-40039:           row_reference m_ci = *m_iter;
-40039:           ++m_iter;
-40039:           const Coefficient& sc_i = sc_expr.coefficient(Variable(id));
-40039:           const int sign_i = sgn(sc_i);
-40039:           if (sign_i == 0) {
-40039:             continue;
-40039:           }
-40039: 
-40039:           const N& double_approx_i = (sign_i > 0) ? m_i[n_i + 1] : m_ci[n_i];
-40039:           if (is_plus_infinity(double_approx_i)) {
-40039:             if (++pinf_count > 1) {
-40039:               break;
-40039:             }
-40039:             pinf_index = id;
-40039:             continue;
-40039:           }
-40039:           if (sign_i > 0) {
-40039:             assign_r(coeff_i, sc_i, ROUND_UP);
-40039:           }
-40039:           else {
-40039:             neg_assign(minus_sc_i, sc_i);
-40039:             assign_r(coeff_i, minus_sc_i, ROUND_UP);
-40039:           }
-40039:           div_2exp_assign_r(approx_i, double_approx_i, 1, ROUND_UP);
-40039:           add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP);
-40039:         }
-40039: 
-40039: 
-40039:         if (sc_denom != 1) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:           Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
-40039:           assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
-40039:           neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
-40039:           div_assign_r(sum, sum, down_sc_denom, ROUND_UP);
-40039:         }
-40039: 
-40039:         if (pinf_count == 0) {
-40039: 
-40039:           Parma_Polyhedra_Library::Dirty_Temp<N> holder_double_sum; N& double_sum = holder_double_sum.item();
-40039:           mul_2exp_assign_r(double_sum, sum, 1, ROUND_UP);
-40039:           add_octagonal_constraint(n_var, n_var + 1, double_sum);
-40039: 
-40039:           deduce_minus_v_pm_u_bounds(var_id, pinf_index, sc_expr, sc_denom,
-40039:                                      sum);
-40039:         }
-40039:         else if (pinf_count == 1) {
-40039:           dimension_type pinf_ind = 2*pinf_index;
-40039:           if (expr.coefficient(Variable(pinf_index)) == denominator) {
-40039: 
-40039: 
-40039:             if (pinf_index < var_id) {
-40039:               add_octagonal_constraint(n_var, pinf_ind, sum);
-40039:             }
-40039:             else {
-40039:               add_octagonal_constraint(pinf_ind + 1, n_var, sum);
-40039:             }
-40039:           }
-40039:           else {
-40039:             if (expr.coefficient(Variable(pinf_index)) == minus_denom) {
-40039: 
-40039: 
-40039:               if (pinf_index < var_id) {
-40039:                 add_octagonal_constraint(n_var, pinf_ind + 1, sum);
-40039:               }
-40039:               else {
-40039:                 add_octagonal_constraint(pinf_ind, n_var + 1, sum);
-40039:               }
-40039:             }
-40039:           }
-40039:         }
-40039:         break;
-40039:       }
-40039: 
-40039:     default:
-40039: 
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       break;
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::affine_image(const Variable var,
-40039:                                  const Linear_Expression& expr,
-40039:                                  Coefficient_traits::const_reference
-40039:                                  denominator) {
-40039: 
-40039:   if (denominator == 0) {
-40039:     throw_invalid_argument("affine_image(v, e, d)", "d == 0");
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type expr_space_dim = expr.space_dimension();
-40039:   if (space_dim < expr_space_dim) {
-40039:     throw_dimension_incompatible("affine_image(v, e, d)", "e", expr);
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type var_id = var.id();
-40039:   if (space_dim < var_id + 1) {
-40039:     throw_dimension_incompatible("affine_image(v, e, d)", var_id + 1);
-40039:   }
-40039: 
-40039:   strong_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   dimension_type t = 0;
-40039: 
-40039:   dimension_type w_id = expr.last_nonzero();
-40039: 
-40039:   if (w_id != 0) {
-40039:     ++t;
-40039:     if (!expr.all_zeroes(1, w_id)) {
-40039:       ++t;
-40039:     }
-40039:     --w_id;
-40039:   }
-40039: 
-40039:   typedef typename OR_Matrix<N>::row_iterator row_iterator;
-40039:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
-40039:   typedef typename OR_Matrix<N>::const_row_iterator Row_iterator;
-40039:   typedef typename OR_Matrix<N>::const_row_reference_type Row_reference;
-40039:   using std::swap;
-40039: 
-40039:   const dimension_type n_var = 2*var_id;
-40039:   const Coefficient& b = expr.inhomogeneous_term();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item();
-40039:   neg_assign_r(minus_denom, denominator, ROUND_NOT_NEEDED);
-40039: # 5179 "../../src/Octagonal_Shape_templates.hh"
-40039:   if (t == 0) {
-40039: 
-40039: 
-40039:     forget_all_octagonal_constraints(var_id);
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_two_b; Parma_Polyhedra_Library::Coefficient& two_b = holder_two_b.item();
-40039:     two_b = 2*b;
-40039: 
-40039:     add_octagonal_constraint(n_var + 1, n_var, two_b, denominator);
-40039:     add_octagonal_constraint(n_var, n_var + 1, two_b, minus_denom);
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039:   if (t == 1) {
-40039: 
-40039:     const Coefficient& w_coeff = expr.coefficient(Variable(w_id));
-40039:     if (w_coeff == denominator || w_coeff == minus_denom) {
-40039: 
-40039:       if (w_id == var_id) {
-40039: 
-40039:         const bool sign_symmetry = (w_coeff != denominator);
-40039:         if (!sign_symmetry && b == 0) {
-40039: 
-40039:           return;
-40039:         }
-40039: 
-40039: 
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
-40039:         div_round_up(d, b, denominator);
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_minus_d; N& minus_d = holder_minus_d.item();
-40039:         div_round_up(minus_d, b, minus_denom);
-40039:         if (sign_symmetry) {
-40039:           swap(d, minus_d);
-40039:         }
-40039:         const row_iterator m_begin = matrix.row_begin();
-40039:         const row_iterator m_end = matrix.row_end();
-40039:         row_iterator m_iter = m_begin + n_var;
-40039:         row_reference m_v = *m_iter;
-40039:         ++m_iter;
-40039:         row_reference m_cv = *m_iter;
-40039:         ++m_iter;
-40039: 
-40039:         for (dimension_type j = n_var; j-- > 0; ) {
-40039:           N& m_v_j = m_v[j];
-40039:           add_assign_r(m_v_j, m_v_j, minus_d, ROUND_UP);
-40039:           N& m_cv_j = m_cv[j];
-40039:           add_assign_r(m_cv_j, m_cv_j, d, ROUND_UP);
-40039:           if (sign_symmetry) {
-40039:             swap(m_v_j, m_cv_j);
-40039:           }
-40039:         }
-40039:         for ( ; m_iter != m_end; ++m_iter) {
-40039:           row_reference m_i = *m_iter;
-40039:           N& m_i_v = m_i[n_var];
-40039:           add_assign_r(m_i_v, m_i_v, d, ROUND_UP);
-40039:           N& m_i_cv = m_i[n_var + 1];
-40039:           add_assign_r(m_i_cv, m_i_cv, minus_d, ROUND_UP);
-40039:           if (sign_symmetry) {
-40039:             swap(m_i_v, m_i_cv);
-40039:           }
-40039:         }
-40039: 
-40039:         mul_2exp_assign_r(d, d, 1, ROUND_UP);
-40039:         N& m_cv_v = m_cv[n_var];
-40039:         add_assign_r(m_cv_v, m_cv_v, d, ROUND_UP);
-40039:         mul_2exp_assign_r(minus_d, minus_d, 1, ROUND_UP);
-40039:         N& m_v_cv = m_v[n_var + 1];
-40039:         add_assign_r(m_v_cv, m_v_cv, minus_d, ROUND_UP);
-40039:         if (sign_symmetry) {
-40039:           swap(m_cv_v, m_v_cv);
-40039:         }
-40039: 
-40039:       }
-40039:       else {
-40039: 
-40039: 
-40039: 
-40039:         forget_all_octagonal_constraints(var_id);
-40039:         const dimension_type n_w = 2*w_id;
-40039: 
-40039:         if (w_coeff == denominator) {
-40039:           if (var_id < w_id) {
-40039:             add_octagonal_constraint(n_w, n_var, b, denominator);
-40039:             add_octagonal_constraint(n_w + 1, n_var + 1, b, minus_denom);
-40039:           }
-40039:           else {
-40039:             add_octagonal_constraint(n_var + 1, n_w + 1, b, denominator);
-40039:             add_octagonal_constraint(n_var, n_w, b, minus_denom);
-40039:           }
-40039:         }
-40039:         else {
-40039: 
-40039:           if (var_id < w_id) {
-40039:             add_octagonal_constraint(n_w + 1, n_var, b, denominator);
-40039:             add_octagonal_constraint(n_w, n_var + 1, b, minus_denom);
-40039:           }
-40039:           else {
-40039:             add_octagonal_constraint(n_var + 1, n_w, b, denominator);
-40039:             add_octagonal_constraint(n_var, n_w + 1, b, minus_denom);
-40039:           }
-40039:         }
-40039:         incremental_strong_closure_assign(var);
-40039:       }
-40039:       ((void) 0);
-40039:       return;
-40039:     }
-40039:   }
-40039: # 5299 "../../src/Octagonal_Shape_templates.hh"
-40039:   const bool is_sc = (denominator > 0);
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item();
-40039:   neg_assign_r(minus_b, b, ROUND_NOT_NEEDED);
-40039: 
-40039:   const Coefficient& sc_b = is_sc ? b : minus_b;
-40039:   const Coefficient& minus_sc_b = is_sc ? minus_b : b;
-40039:   const Coefficient& sc_denom = is_sc ? denominator : minus_denom;
-40039:   const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator;
-40039: 
-40039: 
-40039: 
-40039:   Linear_Expression minus_expr;
-40039:   if (!is_sc) {
-40039:     minus_expr = -expr;
-40039:   }
-40039:   const Linear_Expression& sc_expr = is_sc ? expr : minus_expr;
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_pos_sum; N& pos_sum = holder_pos_sum.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_neg_sum; N& neg_sum = holder_neg_sum.item();
-40039: 
-40039:   dimension_type pos_pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
-40039:   dimension_type neg_pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
-40039: 
-40039:   dimension_type pos_pinf_count = 0;
-40039:   dimension_type neg_pinf_count = 0;
-40039: 
-40039: 
-40039:   assign_r(pos_sum, sc_b, ROUND_UP);
-40039:   assign_r(neg_sum, minus_sc_b, ROUND_UP);
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_i; N& coeff_i = holder_coeff_i.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_minus_coeff_i; N& minus_coeff_i = holder_minus_coeff_i.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_half; N& half = holder_half.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item();
-40039: 
-40039: 
-40039:   const row_iterator m_begin = matrix.row_begin();
-40039:   for (Row_iterator m_iter = m_begin, m_iter_end = m_begin + (2 * w_id + 2);
-40039:        m_iter != m_iter_end; ) {
-40039:     const dimension_type n_i = m_iter.index();
-40039:     const dimension_type id = n_i/2;
-40039:     Row_reference m_i = *m_iter;
-40039:     ++m_iter;
-40039:     Row_reference m_ci = *m_iter;
-40039:     ++m_iter;
-40039:     const Coefficient& sc_i = sc_expr.coefficient(Variable(id));
-40039:     const int sign_i = sgn(sc_i);
-40039:     if (sign_i > 0) {
-40039:       assign_r(coeff_i, sc_i, ROUND_UP);
-40039: 
-40039:       if (pos_pinf_count <= 1) {
-40039:         const N& double_up_approx_i = m_ci[n_i];
-40039:         if (!is_plus_infinity(double_up_approx_i)) {
-40039: 
-40039:           div_2exp_assign_r(half, double_up_approx_i, 1, ROUND_UP);
-40039:           add_mul_assign_r(pos_sum, coeff_i, half, ROUND_UP);
-40039:         }
-40039:         else {
-40039:           ++pos_pinf_count;
-40039:           pos_pinf_index = id;
-40039:         }
-40039:       }
-40039: 
-40039:       if (neg_pinf_count <= 1) {
-40039:         const N& double_up_approx_minus_i = m_i[n_i + 1];
-40039:         if (!is_plus_infinity(double_up_approx_minus_i)) {
-40039: 
-40039:           div_2exp_assign_r(half, double_up_approx_minus_i, 1, ROUND_UP);
-40039:           add_mul_assign_r(neg_sum, coeff_i, half, ROUND_UP);
-40039:         }
-40039:         else {
-40039:           ++neg_pinf_count;
-40039:           neg_pinf_index = id;
-40039:         }
-40039:       }
-40039:     }
-40039:     else if (sign_i < 0) {
-40039:       neg_assign_r(minus_sc_i, sc_i, ROUND_NOT_NEEDED);
-40039:       assign_r(minus_coeff_i, minus_sc_i, ROUND_UP);
-40039: 
-40039:       if (pos_pinf_count <= 1) {
-40039:         const N& double_up_approx_minus_i = m_i[n_i + 1];
-40039:         if (!is_plus_infinity(double_up_approx_minus_i)) {
-40039: 
-40039:           div_2exp_assign_r(half, double_up_approx_minus_i, 1, ROUND_UP);
-40039:           add_mul_assign_r(pos_sum, minus_coeff_i, half, ROUND_UP);
-40039:         }
-40039:         else {
-40039:           ++pos_pinf_count;
-40039:           pos_pinf_index = id;
-40039:         }
-40039:       }
-40039: 
-40039:       if (neg_pinf_count <= 1) {
-40039:         const N& double_up_approx_i = m_ci[n_i];
-40039:         if (!is_plus_infinity(double_up_approx_i)) {
-40039: 
-40039:           div_2exp_assign_r(half, double_up_approx_i, 1, ROUND_UP);
-40039:           add_mul_assign_r(neg_sum, minus_coeff_i, half, ROUND_UP);
-40039:         }
-40039:         else {
-40039:           ++neg_pinf_count;
-40039:           neg_pinf_index = id;
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   forget_all_octagonal_constraints(var_id);
-40039: 
-40039:   if (pos_pinf_count > 1 && neg_pinf_count > 1) {
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   reset_strongly_closed();
-40039: 
-40039: 
-40039:   if (pos_pinf_count <= 1) {
-40039: 
-40039:     if (sc_denom != 1) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
-40039:       assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
-40039:       neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
-40039:       div_assign_r(pos_sum, pos_sum, down_sc_denom, ROUND_UP);
-40039:     }
-40039: 
-40039:     if (pos_pinf_count == 0) {
-40039: 
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_double_pos_sum; N& double_pos_sum = holder_double_pos_sum.item();
-40039:       mul_2exp_assign_r(double_pos_sum, pos_sum, 1, ROUND_UP);
-40039:       matrix[n_var + 1][n_var] = double_pos_sum;
-40039: 
-40039:       deduce_v_pm_u_bounds(var_id, w_id, sc_expr, sc_denom, pos_sum);
-40039:     }
-40039:     else {
-40039: 
-40039:       if (pos_pinf_index != var_id) {
-40039:         const Coefficient& ppi = sc_expr.coefficient(Variable(pos_pinf_index));
-40039:         if (ppi == sc_denom) {
-40039: 
-40039:           if (var_id < pos_pinf_index) {
-40039:             matrix[2*pos_pinf_index][n_var] = pos_sum;
-40039:           }
-40039:           else {
-40039:             matrix[n_var + 1][2*pos_pinf_index + 1] = pos_sum;
-40039:           }
-40039:         }
-40039:         else {
-40039:           if (ppi == minus_sc_denom) {
-40039: 
-40039:             if (var_id < pos_pinf_index) {
-40039:               matrix[2*pos_pinf_index + 1][n_var] = pos_sum;
-40039:             }
-40039:             else {
-40039:               matrix[n_var + 1][2*pos_pinf_index] = pos_sum;
-40039:             }
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   if (neg_pinf_count <= 1) {
-40039: 
-40039:     if (sc_denom != 1) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
-40039:       assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
-40039:       neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
-40039:       div_assign_r(neg_sum, neg_sum, down_sc_denom, ROUND_UP);
-40039:     }
-40039: 
-40039:     if (neg_pinf_count == 0) {
-40039: 
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_double_neg_sum; N& double_neg_sum = holder_double_neg_sum.item();
-40039:       mul_2exp_assign_r(double_neg_sum, neg_sum, 1, ROUND_UP);
-40039:       matrix[n_var][n_var + 1] = double_neg_sum;
-40039: 
-40039:       deduce_minus_v_pm_u_bounds(var_id, w_id, sc_expr, sc_denom, neg_sum);
-40039:     }
-40039:     else {
-40039: 
-40039:       if (neg_pinf_index != var_id) {
-40039:         const Coefficient& npi = sc_expr.coefficient(Variable(neg_pinf_index));
-40039:         if (npi == sc_denom) {
-40039: 
-40039: 
-40039:           if (neg_pinf_index < var_id) {
-40039:             matrix[n_var][2*neg_pinf_index] = neg_sum;
-40039:           }
-40039:           else {
-40039:             matrix[2*neg_pinf_index + 1][n_var + 1] = neg_sum;
-40039:           }
-40039:         }
-40039:         else {
-40039:           if (npi == minus_sc_denom) {
-40039: 
-40039: 
-40039:             if (neg_pinf_index < var_id) {
-40039:               matrix[n_var][2*neg_pinf_index + 1] = neg_sum;
-40039:             }
-40039:             else {
-40039:               matrix[2*neg_pinf_index][n_var + 1] = neg_sum;
-40039:             }
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   incremental_strong_closure_assign(var);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Interval_Info>
-40039: void
-40039: Octagonal_Shape<T>::affine_form_image(const Variable var,
-40039:                     const Linear_Form< Interval<T, Interval_Info> >& lf) {
-40039: 
-40039:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_5533 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<T>::is_exact)>) }
-40039: 
-40039:                                        ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type lf_space_dim = lf.space_dimension();
-40039:   if (space_dim < lf_space_dim) {
-40039:     throw_dimension_incompatible("affine_form_image(v, l)", "l", lf);
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type var_id = var.id();
-40039:   if (space_dim < var_id + 1) {
-40039:     throw_dimension_incompatible("affine_form_image(v, l)", var.id() + 1);
-40039:   }
-40039: 
-40039:   strong_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   dimension_type t = 0;
-40039: 
-40039:   dimension_type w_id = 0;
-40039: 
-40039: 
-40039:   for (dimension_type i = lf_space_dim; i-- > 0; ) {
-40039:     if (lf.coefficient(Variable(i)) != 0) {
-40039:       if (t++ == 1) {
-40039:         break;
-40039:       }
-40039:       else {
-40039:         w_id = i;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   typedef typename OR_Matrix<N>::row_iterator row_iterator;
-40039:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
-40039:   typedef Interval<T, Interval_Info> FP_Interval_Type;
-40039:   using std::swap;
-40039: 
-40039:   const dimension_type n_var = 2*var_id;
-40039:   const FP_Interval_Type& b = lf.inhomogeneous_term();
-40039: # 5588 "../../src/Octagonal_Shape_templates.hh"
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_b_ub; N& b_ub = holder_b_ub.item();
-40039:   assign_r(b_ub, b.upper(), ROUND_NOT_NEEDED);
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_b_mlb; N& b_mlb = holder_b_mlb.item();
-40039:   neg_assign_r(b_mlb, b.lower(), ROUND_NOT_NEEDED);
-40039: 
-40039:   if (t == 0) {
-40039: 
-40039:     forget_all_octagonal_constraints(var_id);
-40039:     mul_2exp_assign_r(b_mlb, b_mlb, 1, ROUND_UP);
-40039:     mul_2exp_assign_r(b_ub, b_ub, 1, ROUND_UP);
-40039: 
-40039:     add_octagonal_constraint(n_var + 1, n_var, b_ub);
-40039:     add_octagonal_constraint(n_var, n_var + 1, b_mlb);
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   bool is_b_zero = (b_mlb == 0 && b_ub == 0);
-40039: 
-40039:   if (t == 1) {
-40039: 
-40039:     const FP_Interval_Type& w_coeff = lf.coefficient(Variable(w_id));
-40039: 
-40039:     bool is_w_coeff_one = (w_coeff == 1);
-40039: 
-40039:     bool is_w_coeff_minus_one = (w_coeff == -1);
-40039:     if (is_w_coeff_one || is_w_coeff_minus_one) {
-40039: 
-40039:       if (w_id == var_id) {
-40039: 
-40039:         if (is_w_coeff_one && is_b_zero) {
-40039: 
-40039:           return;
-40039:         }
-40039: 
-40039: 
-40039:         if (is_w_coeff_minus_one) {
-40039:           swap(b_ub, b_mlb);
-40039:         }
-40039:         const row_iterator m_begin = matrix.row_begin();
-40039:         const row_iterator m_end = matrix.row_end();
-40039:         row_iterator m_iter = m_begin + n_var;
-40039:         row_reference m_v = *m_iter;
-40039:         ++m_iter;
-40039:         row_reference m_cv = *m_iter;
-40039:         ++m_iter;
-40039: 
-40039:         for (dimension_type j = n_var; j-- > 0; ) {
-40039:           N& m_v_j = m_v[j];
-40039:           add_assign_r(m_v_j, m_v_j, b_mlb, ROUND_UP);
-40039:           N& m_cv_j = m_cv[j];
-40039:           add_assign_r(m_cv_j, m_cv_j, b_ub, ROUND_UP);
-40039:           if (is_w_coeff_minus_one) {
-40039:             swap(m_v_j, m_cv_j);
-40039:           }
-40039:         }
-40039:         for ( ; m_iter != m_end; ++m_iter) {
-40039:           row_reference m_i = *m_iter;
-40039:           N& m_i_v = m_i[n_var];
-40039:           add_assign_r(m_i_v, m_i_v, b_ub, ROUND_UP);
-40039:           N& m_i_cv = m_i[n_var + 1];
-40039:           add_assign_r(m_i_cv, m_i_cv, b_mlb, ROUND_UP);
-40039:           if (is_w_coeff_minus_one) {
-40039:             swap(m_i_v, m_i_cv);
-40039:           }
-40039:         }
-40039: 
-40039:         mul_2exp_assign_r(b_ub, b_ub, 1, ROUND_UP);
-40039:         N& m_cv_v = m_cv[n_var];
-40039:         add_assign_r(m_cv_v, m_cv_v, b_ub, ROUND_UP);
-40039:         mul_2exp_assign_r(b_mlb, b_mlb, 1, ROUND_UP);
-40039:         N& m_v_cv = m_v[n_var + 1];
-40039:         add_assign_r(m_v_cv, m_v_cv, b_mlb, ROUND_UP);
-40039:         if (is_w_coeff_minus_one) {
-40039:           swap(m_cv_v, m_v_cv);
-40039:         }
-40039: 
-40039:       }
-40039:       else {
-40039: 
-40039: 
-40039: 
-40039:         forget_all_octagonal_constraints(var_id);
-40039:         const dimension_type n_w = 2*w_id;
-40039:         if (is_w_coeff_one) {
-40039: 
-40039: 
-40039:           if (var_id < w_id) {
-40039:             add_octagonal_constraint(n_w, n_var, b_ub);
-40039:             add_octagonal_constraint(n_w + 1, n_var + 1, b_mlb);
-40039:           }
-40039:           else {
-40039:             add_octagonal_constraint(n_var + 1, n_w + 1, b_ub);
-40039:             add_octagonal_constraint(n_var, n_w, b_mlb);
-40039:           }
-40039:         }
-40039:         else {
-40039: 
-40039: 
-40039:           if (var_id < w_id) {
-40039:             add_octagonal_constraint(n_w + 1, n_var, b_ub);
-40039:             add_octagonal_constraint(n_w, n_var + 1, b_mlb);
-40039:           }
-40039:           else {
-40039:             add_octagonal_constraint(n_var + 1, n_w, b_ub);
-40039:             add_octagonal_constraint(n_var, n_w + 1, b_mlb);
-40039:           }
-40039:         }
-40039:         incremental_strong_closure_assign(var);
-40039:       }
-40039:       ((void) 0);
-40039:       return;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   reset_strongly_closed();
-40039: 
-40039:   Linear_Form<FP_Interval_Type> minus_lf(lf);
-40039:   minus_lf.negate();
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_upper_bound; N& upper_bound = holder_upper_bound.item();
-40039: 
-40039:   row_iterator m_iter = matrix.row_begin();
-40039:   m_iter += n_var;
-40039:   row_reference var_ite = *m_iter;
-40039:   ++m_iter;
-40039:   row_reference var_cv_ite = *m_iter;
-40039:   ++m_iter;
-40039:   row_iterator m_end = matrix.row_end();
-40039: 
-40039: 
-40039:   for (dimension_type curr_var = var_id,
-40039:          n_curr_var = n_var - 2; curr_var-- > 0; ) {
-40039:     Variable current(curr_var);
-40039:     linear_form_upper_bound(lf + current, upper_bound);
-40039:     assign_r(var_cv_ite[n_curr_var], upper_bound, ROUND_NOT_NEEDED);
-40039:     linear_form_upper_bound(lf - current, upper_bound);
-40039:     assign_r(var_cv_ite[n_curr_var + 1], upper_bound, ROUND_NOT_NEEDED);
-40039:     linear_form_upper_bound(minus_lf + current, upper_bound);
-40039:     assign_r(var_ite[n_curr_var], upper_bound, ROUND_NOT_NEEDED);
-40039:     linear_form_upper_bound(minus_lf - current, upper_bound);
-40039:     assign_r(var_ite[n_curr_var + 1], upper_bound, ROUND_NOT_NEEDED);
-40039:     n_curr_var -= 2;
-40039:   }
-40039:   for (dimension_type curr_var = var_id + 1; m_iter != m_end; ++m_iter) {
-40039:     row_reference m_v_ite = *m_iter;
-40039:     ++m_iter;
-40039:     row_reference m_cv_ite = *m_iter;
-40039:     Variable current(curr_var);
-40039:     linear_form_upper_bound(lf + current, upper_bound);
-40039:     assign_r(m_cv_ite[n_var], upper_bound, ROUND_NOT_NEEDED);
-40039:     linear_form_upper_bound(lf - current, upper_bound);
-40039:     assign_r(m_v_ite[n_var], upper_bound, ROUND_NOT_NEEDED);
-40039:     linear_form_upper_bound(minus_lf + current, upper_bound);
-40039:     assign_r(m_cv_ite[n_var + 1], upper_bound, ROUND_NOT_NEEDED);
-40039:     linear_form_upper_bound(minus_lf - current, upper_bound);
-40039:     assign_r(m_v_ite[n_var + 1], upper_bound, ROUND_NOT_NEEDED);
-40039:     ++curr_var;
-40039:   }
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_lf_ub; N& lf_ub = holder_lf_ub.item();
-40039:   linear_form_upper_bound(lf, lf_ub);
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_minus_lf_ub; N& minus_lf_ub = holder_minus_lf_ub.item();
-40039:   linear_form_upper_bound(minus_lf, minus_lf_ub);
-40039:   mul_2exp_assign_r(lf_ub, lf_ub, 1, ROUND_UP);
-40039:   assign_r(matrix[n_var + 1][n_var], lf_ub, ROUND_NOT_NEEDED);
-40039:   mul_2exp_assign_r(minus_lf_ub, minus_lf_ub, 1, ROUND_UP);
-40039:   assign_r(matrix[n_var][n_var + 1], minus_lf_ub, ROUND_NOT_NEEDED);
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Interval_Info>
-40039: void
-40039: Octagonal_Shape<T>::
-40039: linear_form_upper_bound(const Linear_Form< Interval<T, Interval_Info> >& lf,
-40039:                         N& result) const {
-40039: 
-40039: 
-40039:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_5779 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<T>::is_exact)>) }
-40039: 
-40039:                                                      ;
-40039: 
-40039:   const dimension_type lf_space_dimension = lf.space_dimension();
-40039:   ((void) 0);
-40039: 
-40039:   typedef Interval<T, Interval_Info> FP_Interval_Type;
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_curr_lb; N& curr_lb = holder_curr_lb.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_curr_ub; N& curr_ub = holder_curr_ub.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_curr_var_ub; N& curr_var_ub = holder_curr_var_ub.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_curr_minus_var_ub; N& curr_minus_var_ub = holder_curr_minus_var_ub.item();
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_first_comparison_term; N& first_comparison_term = holder_first_comparison_term.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_second_comparison_term; N& second_comparison_term = holder_second_comparison_term.item();
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_negator; N& negator = holder_negator.item();
-40039: 
-40039:   assign_r(result, lf.inhomogeneous_term().upper(), ROUND_NOT_NEEDED);
-40039: 
-40039:   for (dimension_type curr_var = 0, n_var = 0; curr_var < lf_space_dimension;
-40039:        ++curr_var) {
-40039:     const FP_Interval_Type& curr_coefficient =
-40039:                             lf.coefficient(Variable(curr_var));
-40039:     assign_r(curr_lb, curr_coefficient.lower(), ROUND_NOT_NEEDED);
-40039:     assign_r(curr_ub, curr_coefficient.upper(), ROUND_NOT_NEEDED);
-40039:     if (curr_lb != 0 || curr_ub != 0) {
-40039:       assign_r(curr_var_ub, matrix[n_var + 1][n_var], ROUND_NOT_NEEDED);
-40039:       div_2exp_assign_r(curr_var_ub, curr_var_ub, 1, ROUND_UP);
-40039:       neg_assign_r(curr_minus_var_ub, matrix[n_var][n_var + 1],
-40039:                    ROUND_NOT_NEEDED);
-40039:       div_2exp_assign_r(curr_minus_var_ub, curr_minus_var_ub, 1, ROUND_DOWN);
-40039: 
-40039:       if (curr_lb == 1 && curr_ub == 1) {
-40039:         add_assign_r(result, result, std::max(curr_var_ub, curr_minus_var_ub),
-40039:                      ROUND_UP);
-40039:       }
-40039:       else if (curr_lb == -1 && curr_ub == -1) {
-40039:         neg_assign_r(negator, std::min(curr_var_ub, curr_minus_var_ub),
-40039:                      ROUND_NOT_NEEDED);
-40039:         add_assign_r(result, result, negator, ROUND_UP);
-40039:       }
-40039:       else {
-40039: 
-40039:         assign_r(first_comparison_term, 0, ROUND_NOT_NEEDED);
-40039:         assign_r(second_comparison_term, 0, ROUND_NOT_NEEDED);
-40039:         add_mul_assign_r(first_comparison_term, curr_var_ub, curr_ub,
-40039:                          ROUND_UP);
-40039:         add_mul_assign_r(second_comparison_term, curr_var_ub, curr_lb,
-40039:                          ROUND_UP);
-40039:         assign_r(first_comparison_term, std::max(first_comparison_term,
-40039:                                                  second_comparison_term),
-40039:                  ROUND_NOT_NEEDED);
-40039:         assign_r(second_comparison_term, 0, ROUND_NOT_NEEDED);
-40039:         add_mul_assign_r(second_comparison_term, curr_minus_var_ub, curr_ub,
-40039:                          ROUND_UP);
-40039:         assign_r(first_comparison_term, std::max(first_comparison_term,
-40039:                                                  second_comparison_term),
-40039:                  ROUND_NOT_NEEDED);
-40039:         assign_r(second_comparison_term, 0, ROUND_NOT_NEEDED);
-40039:         add_mul_assign_r(second_comparison_term, curr_minus_var_ub, curr_lb,
-40039:                          ROUND_UP);
-40039:         assign_r(first_comparison_term, std::max(first_comparison_term,
-40039:                                                  second_comparison_term),
-40039:                  ROUND_NOT_NEEDED);
-40039: 
-40039:         add_assign_r(result, result, first_comparison_term, ROUND_UP);
-40039:       }
-40039:     }
-40039: 
-40039:     n_var += 2;
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::
-40039: interval_coefficient_upper_bound(const N& var_ub, const N& minus_var_ub,
-40039:                                  const N& int_ub, const N& int_lb,
-40039:                                  N& result) {
-40039: 
-40039: 
-40039:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_5862 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<T>::is_exact)>) }
-40039: 
-40039:                                                      ;
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_second_comparison_term; N& second_comparison_term = holder_second_comparison_term.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_third_comparison_term; N& third_comparison_term = holder_third_comparison_term.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_fourth_comparison_term; N& fourth_comparison_term = holder_fourth_comparison_term.item();
-40039: 
-40039:   assign_r(result, 0, ROUND_NOT_NEEDED);
-40039:   assign_r(second_comparison_term, 0, ROUND_NOT_NEEDED);
-40039:   assign_r(third_comparison_term, 0, ROUND_NOT_NEEDED);
-40039:   assign_r(fourth_comparison_term, 0, ROUND_NOT_NEEDED);
-40039: 
-40039:   add_mul_assign_r(result, var_ub, int_ub, ROUND_UP);
-40039:   add_mul_assign_r(second_comparison_term, minus_var_ub, int_ub, ROUND_UP);
-40039:   add_mul_assign_r(third_comparison_term, var_ub, int_lb, ROUND_UP);
-40039:   add_mul_assign_r(fourth_comparison_term, minus_var_ub, int_lb, ROUND_UP);
-40039: 
-40039:   assign_r(result, std::max(result, second_comparison_term), ROUND_NOT_NEEDED);
-40039:   assign_r(result, std::max(result, third_comparison_term), ROUND_NOT_NEEDED);
-40039:   assign_r(result, std::max(result, fourth_comparison_term), ROUND_NOT_NEEDED);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::affine_preimage(const Variable var,
-40039:                                     const Linear_Expression& expr,
-40039:                                     Coefficient_traits::const_reference
-40039:                                     denominator) {
-40039: 
-40039: 
-40039:   if (denominator == 0) {
-40039:     throw_invalid_argument("affine_preimage(v, e, d)", "d == 0");
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type expr_space_dim = expr.space_dimension();
-40039:   if (space_dim < expr_space_dim) {
-40039:     throw_dimension_incompatible("affine_preimage(v, e, d)", "e", expr);
-40039:   }
-40039: 
-40039: 
-40039:   dimension_type var_id = var.id();
-40039:   if (space_dim < var_id + 1) {
-40039:     throw_dimension_incompatible("affine_preimage(v, e, d)", var_id + 1);
-40039:   }
-40039: 
-40039:   strong_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   const Coefficient& b = expr.inhomogeneous_term();
-40039: 
-40039: 
-40039: 
-40039:   dimension_type t = 0;
-40039: 
-40039: 
-40039:   dimension_type w_id = expr.last_nonzero();
-40039: 
-40039:   if (w_id != 0) {
-40039:     ++t;
-40039:     if (!expr.all_zeroes(1, w_id)) {
-40039:       ++t;
-40039:     }
-40039:     --w_id;
-40039:   }
-40039: # 5942 "../../src/Octagonal_Shape_templates.hh"
-40039:   if (t == 0) {
-40039: 
-40039:     forget_all_octagonal_constraints(var_id);
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039:   if (t == 1) {
-40039: 
-40039:     const Coefficient& w_coeff = expr.coefficient(Variable(w_id));
-40039:     if (w_coeff == denominator || w_coeff == -denominator) {
-40039: 
-40039:       if (w_id == var_id) {
-40039: 
-40039:         affine_image(var, denominator*var - b, w_coeff);
-40039:       }
-40039:       else {
-40039: 
-40039: 
-40039:         forget_all_octagonal_constraints(var_id);
-40039:         ((void) 0);
-40039:       }
-40039:       return;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const Coefficient& coeff_v = expr.coefficient(var);
-40039:   if (coeff_v != 0) {
-40039:     if (coeff_v > 0) {
-40039: 
-40039:       Linear_Expression inverse = ((coeff_v + denominator)*var);
-40039:       inverse -= expr;
-40039:       affine_image(var, inverse, coeff_v);
-40039:     }
-40039:     else {
-40039: 
-40039:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_coeff_v; Parma_Polyhedra_Library::Coefficient& minus_coeff_v = holder_minus_coeff_v.item();
-40039:       neg_assign(minus_coeff_v, coeff_v);
-40039:       Linear_Expression inverse = ((minus_coeff_v - denominator)*var);
-40039:       inverse += expr;
-40039:       affine_image(var, inverse, minus_coeff_v);
-40039:     }
-40039:   }
-40039:   else {
-40039: 
-40039:     forget_all_octagonal_constraints(var_id);
-40039:     ((void) 0);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>
-40039: ::generalized_affine_image(const Variable var,
-40039:                            const Relation_Symbol relsym,
-40039:                            const Linear_Expression& expr ,
-40039:                            Coefficient_traits::const_reference denominator) {
-40039: 
-40039:   if (denominator == 0) {
-40039:     throw_invalid_argument("generalized_affine_image(v, r, e, d)", "d == 0");
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type expr_space_dim = expr.space_dimension();
-40039:   if (space_dim < expr_space_dim) {
-40039:     throw_dimension_incompatible("generalized_affine_image(v, r, e, d)", "e",
-40039:                                  expr);
-40039:   }
-40039: 
-40039: 
-40039:   dimension_type var_id = var.id();
-40039:   if (space_dim < var_id + 1) {
-40039:     throw_dimension_incompatible("generalized_affine_image(v, r, e, d)",
-40039:                                  var_id + 1);
-40039:   }
-40039: 
-40039: 
-40039:   if (relsym == LESS_THAN || relsym == GREATER_THAN) {
-40039:     throw_invalid_argument("generalized_affine_image(v, r, e, d)",
-40039:                            "r is a strict relation symbol");
-40039:   }
-40039: 
-40039:   if (relsym == NOT_EQUAL) {
-40039:     throw_invalid_argument("generalized_affine_image(v, r, e, d)",
-40039:                            "r is the disequality relation symbol");
-40039:   }
-40039: 
-40039:   if (relsym == EQUAL) {
-40039: 
-40039: 
-40039:     affine_image(var, expr, denominator);
-40039:     return;
-40039:   }
-40039: 
-40039:   strong_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   dimension_type t = 0;
-40039: 
-40039:   dimension_type w_id = expr.last_nonzero();
-40039: 
-40039:   if (w_id != 0) {
-40039:     ++t;
-40039:     if (!expr.all_zeroes(1, w_id)) {
-40039:       ++t;
-40039:     }
-40039:     --w_id;
-40039:   }
-40039: 
-40039:   typedef typename OR_Matrix<N>::row_iterator row_iterator;
-40039:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
-40039:   typedef typename OR_Matrix<N>::const_row_iterator Row_iterator;
-40039:   typedef typename OR_Matrix<N>::const_row_reference_type Row_reference;
-40039: 
-40039:   const row_iterator m_begin = matrix.row_begin();
-40039:   const row_iterator m_end = matrix.row_end();
-40039:   const dimension_type n_var = 2*var_id;
-40039:   const Coefficient& b = expr.inhomogeneous_term();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item();
-40039:   neg_assign_r(minus_denom, denominator, ROUND_NOT_NEEDED);
-40039: # 6082 "../../src/Octagonal_Shape_templates.hh"
-40039:   if (t == 0) {
-40039: 
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_two_b; Parma_Polyhedra_Library::Coefficient& two_b = holder_two_b.item();
-40039:     two_b = 2*b;
-40039: 
-40039:     forget_all_octagonal_constraints(var_id);
-40039: 
-40039:     reset_strongly_closed();
-40039:     switch (relsym) {
-40039:     case LESS_OR_EQUAL:
-40039: 
-40039:       add_octagonal_constraint(n_var + 1, n_var, two_b, denominator);
-40039:       break;
-40039:     case GREATER_OR_EQUAL:
-40039: 
-40039: 
-40039:       add_octagonal_constraint(n_var, n_var + 1, two_b, minus_denom);
-40039:       break;
-40039:     default:
-40039: 
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       break;
-40039:     }
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039:   if (t == 1) {
-40039: 
-40039:     const Coefficient& w_coeff = expr.coefficient(Variable(w_id));
-40039:     if (w_coeff == denominator || w_coeff == minus_denom) {
-40039: 
-40039:       switch (relsym) {
-40039:       case LESS_OR_EQUAL:
-40039:         {
-40039:           Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
-40039:           div_round_up(d, b, denominator);
-40039:           if (w_id == var_id) {
-40039: 
-40039: 
-40039:             reset_strongly_closed();
-40039:             if (w_coeff == denominator) {
-40039: 
-40039: 
-40039: 
-40039:               row_iterator m_iter = m_begin + n_var;
-40039:               row_reference m_v = *m_iter;
-40039:               N& m_v_cv = m_v[n_var + 1];
-40039:               ++m_iter;
-40039:               row_reference m_cv = *m_iter;
-40039:               N& m_cv_v = m_cv[n_var];
-40039:               ++m_iter;
-40039: 
-40039:               for ( ; m_iter != m_end; ++m_iter) {
-40039:                 row_reference m_i = *m_iter;
-40039:                 N& m_i_v = m_i[n_var];
-40039:                 add_assign_r(m_i_v, m_i_v, d, ROUND_UP);
-40039:                 assign_r(m_i[n_var + 1], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:               }
-40039:               for (dimension_type k = n_var; k-- > 0; ) {
-40039:                 assign_r(m_v[k], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:                 add_assign_r(m_cv[k], m_cv[k], d, ROUND_UP);
-40039:               }
-40039:               mul_2exp_assign_r(d, d, 1, ROUND_UP);
-40039:               add_assign_r(m_cv_v, m_cv_v, d, ROUND_UP);
-40039:               assign_r(m_v_cv, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:             }
-40039:             else {
-40039: 
-40039: 
-40039:               N& m_v_cv = matrix[n_var][n_var + 1];
-40039:               mul_2exp_assign_r(d, d, 1, ROUND_UP);
-40039:               add_assign_r(matrix[n_var + 1][n_var], m_v_cv, d, ROUND_UP);
-40039:               assign_r(m_v_cv, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:               forget_binary_octagonal_constraints(var_id);
-40039:             }
-40039:           }
-40039:           else {
-40039: 
-40039: 
-40039: 
-40039:             forget_all_octagonal_constraints(var_id);
-40039:             const dimension_type n_w = 2*w_id;
-40039:             if (w_coeff == denominator) {
-40039: 
-40039:               if (var_id < w_id) {
-40039:                 add_octagonal_constraint(n_w, n_var, b, denominator);
-40039:               }
-40039:               else {
-40039:                 add_octagonal_constraint(n_var + 1, n_w + 1, b, denominator);
-40039:               }
-40039:             }
-40039:             else {
-40039: 
-40039:               if (var_id < w_id) {
-40039:                 add_octagonal_constraint(n_w + 1, n_var, b, denominator);
-40039:               }
-40039:               else {
-40039:                 add_octagonal_constraint(n_var + 1, n_w, b, denominator);
-40039:               }
-40039:             }
-40039:           }
-40039:           break;
-40039:         }
-40039: 
-40039:       case GREATER_OR_EQUAL:
-40039:         {
-40039:           Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
-40039:           div_round_up(d, b, minus_denom);
-40039:           if (w_id == var_id) {
-40039: 
-40039: 
-40039:             reset_strongly_closed();
-40039:             if (w_coeff == denominator) {
-40039: 
-40039: 
-40039: 
-40039:               row_iterator m_iter = m_begin + n_var;
-40039:               row_reference m_v = *m_iter;
-40039:               N& m_v_cv = m_v[n_var + 1];
-40039:               ++m_iter;
-40039:               row_reference m_cv = *m_iter;
-40039:               N& m_cv_v = m_cv[n_var];
-40039:               ++m_iter;
-40039: 
-40039:               for ( ; m_iter != m_end; ++m_iter) {
-40039:                 row_reference m_i = *m_iter;
-40039:                 assign_r(m_i[n_var], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:                 add_assign_r(m_i[n_var + 1], m_i[n_var + 1], d, ROUND_UP);
-40039:               }
-40039:               for (dimension_type k = n_var; k-- > 0; ) {
-40039:                 add_assign_r(m_v[k], m_v[k], d, ROUND_UP);
-40039:                 assign_r(m_cv[k], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:               }
-40039:               mul_2exp_assign_r(d, d, 1, ROUND_UP);
-40039:               add_assign_r(m_v_cv, m_v_cv, d, ROUND_UP);
-40039:               assign_r(m_cv_v, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:             }
-40039:             else {
-40039: 
-40039: 
-40039:               N& m_cv_v = matrix[n_var + 1][n_var];
-40039:               mul_2exp_assign_r(d, d, 1, ROUND_UP);
-40039:               add_assign_r(matrix[n_var][n_var + 1], m_cv_v, d, ROUND_UP);
-40039:               assign_r(m_cv_v, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:               forget_binary_octagonal_constraints(var_id);
-40039:             }
-40039:           }
-40039:           else {
-40039: 
-40039: 
-40039: 
-40039:             forget_all_octagonal_constraints(var_id);
-40039:             const dimension_type n_w = 2*w_id;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:             if (w_coeff == denominator) {
-40039: 
-40039: 
-40039:               if (var_id < w_id) {
-40039:                 add_octagonal_constraint(n_w + 1, n_var + 1, b, minus_denom);
-40039:               }
-40039:               else {
-40039:                 add_octagonal_constraint(n_var, n_w, b, minus_denom);
-40039:               }
-40039:             }
-40039:             else {
-40039: 
-40039: 
-40039:               if (var_id < w_id) {
-40039:                 add_octagonal_constraint(n_w, n_var + 1, b, minus_denom);
-40039:               }
-40039:               else {
-40039:                 add_octagonal_constraint(n_var, n_w + 1, b, minus_denom);
-40039:               }
-40039:             }
-40039:           }
-40039:           break;
-40039:         }
-40039: 
-40039:       default:
-40039: 
-40039:         Parma_Polyhedra_Library::ppl_unreachable();
-40039:         break;
-40039:       }
-40039:       ((void) 0);
-40039:       return;
-40039:     }
-40039:   }
-40039: # 6281 "../../src/Octagonal_Shape_templates.hh"
-40039:   const bool is_sc = (denominator > 0);
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item();
-40039:   neg_assign(minus_b, b);
-40039:   const Coefficient& sc_b = is_sc ? b : minus_b;
-40039:   const Coefficient& minus_sc_b = is_sc ? minus_b : b;
-40039:   const Coefficient& sc_denom = is_sc ? denominator : minus_denom;
-40039:   const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator;
-40039: 
-40039: 
-40039: 
-40039:   Linear_Expression minus_expr;
-40039:   if (!is_sc) {
-40039:     minus_expr = -expr;
-40039:   }
-40039:   const Linear_Expression& sc_expr = is_sc ? expr : minus_expr;
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_sum; N& sum = holder_sum.item();
-40039: 
-40039:   dimension_type pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
-40039: 
-40039:   dimension_type pinf_count = 0;
-40039: 
-40039:   switch (relsym) {
-40039:   case LESS_OR_EQUAL:
-40039:     {
-40039: 
-40039: 
-40039: 
-40039:       assign_r(sum, sc_b, ROUND_UP);
-40039: 
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_i; N& coeff_i = holder_coeff_i.item();
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_approx_i; N& approx_i = holder_approx_i.item();
-40039:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item();
-40039: 
-40039: 
-40039:       for (Row_iterator m_iter = m_begin, m_iter_end = m_begin + (2 * w_id + 2);
-40039:            m_iter != m_iter_end; ) {
-40039:         const dimension_type n_i = m_iter.index();
-40039:         const dimension_type id = n_i/2;
-40039:         Row_reference m_i = *m_iter;
-40039:         ++m_iter;
-40039:         Row_reference m_ci = *m_iter;
-40039:         ++m_iter;
-40039:         const Coefficient& sc_i = sc_expr.coefficient(Variable(id));
-40039:         const int sign_i = sgn(sc_i);
-40039:         if (sign_i == 0) {
-40039:           continue;
-40039:         }
-40039: 
-40039:         const N& double_approx_i = (sign_i > 0) ? m_ci[n_i] : m_i[n_i + 1];
-40039:         if (is_plus_infinity(double_approx_i)) {
-40039:           if (++pinf_count > 1) {
-40039:             break;
-40039:           }
-40039:           pinf_index = id;
-40039:           continue;
-40039:         }
-40039:         if (sign_i > 0) {
-40039:           assign_r(coeff_i, sc_i, ROUND_UP);
-40039:         }
-40039:         else {
-40039:           neg_assign(minus_sc_i, sc_i);
-40039:           assign_r(coeff_i, minus_sc_i, ROUND_UP);
-40039:         }
-40039:         div_2exp_assign_r(approx_i, double_approx_i, 1, ROUND_UP);
-40039:         add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP);
-40039:       }
-40039: 
-40039:       forget_all_octagonal_constraints(var_id);
-40039:       reset_strongly_closed();
-40039: 
-40039:       if (pinf_count > 1) {
-40039:         ((void) 0);
-40039:         return;
-40039:       }
-40039: 
-40039: 
-40039:       if (sc_denom != 1) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
-40039:         assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
-40039:         neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
-40039:         div_assign_r(sum, sum, down_sc_denom, ROUND_UP);
-40039:       }
-40039: 
-40039:       if (pinf_count == 0) {
-40039: 
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_double_sum; N& double_sum = holder_double_sum.item();
-40039:         mul_2exp_assign_r(double_sum, sum, 1, ROUND_UP);
-40039:         matrix[n_var + 1][n_var] = double_sum;
-40039: 
-40039:         deduce_v_pm_u_bounds(var_id, w_id, sc_expr, sc_denom, sum);
-40039:       }
-40039:       else if (pinf_count == 1) {
-40039:         if (pinf_index != var_id) {
-40039:           const Coefficient& pi = expr.coefficient(Variable(pinf_index));
-40039:           if (pi == denominator ) {
-40039: 
-40039:             if (var_id < pinf_index) {
-40039:               matrix[2*pinf_index][n_var] = sum;
-40039:             }
-40039:             else {
-40039:               matrix[n_var + 1][2*pinf_index + 1] = sum;
-40039:             }
-40039:           }
-40039:           else {
-40039:             if (pi == minus_denom) {
-40039: 
-40039:               if (var_id < pinf_index) {
-40039:                 matrix[2*pinf_index + 1][n_var] = sum;
-40039:               }
-40039:               else {
-40039:                 matrix[n_var + 1][2*pinf_index] = sum;
-40039:               }
-40039:             }
-40039:           }
-40039:         }
-40039:       }
-40039:       break;
-40039:     }
-40039: 
-40039:   case GREATER_OR_EQUAL:
-40039:     {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       assign_r(sum, minus_sc_b, ROUND_UP);
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_i; N& coeff_i = holder_coeff_i.item();
-40039:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item();
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_approx_i; N& approx_i = holder_approx_i.item();
-40039: 
-40039:       for (Row_iterator m_iter = m_begin, m_iter_end = m_begin + (2 * w_id + 2);
-40039:            m_iter != m_iter_end; ) {
-40039:         const dimension_type n_i = m_iter.index();
-40039:         const dimension_type id = n_i/2;
-40039:         Row_reference m_i = *m_iter;
-40039:         ++m_iter;
-40039:         Row_reference m_ci = *m_iter;
-40039:         ++m_iter;
-40039:         const Coefficient& sc_i = sc_expr.coefficient(Variable(id));
-40039:         const int sign_i = sgn(sc_i);
-40039:         if (sign_i == 0) {
-40039:           continue;
-40039:         }
-40039: 
-40039:         const N& double_approx_i = (sign_i > 0) ? m_i[n_i + 1] : m_ci[n_i];
-40039:         if (is_plus_infinity(double_approx_i)) {
-40039:           if (++pinf_count > 1) {
-40039:             break;
-40039:           }
-40039:           pinf_index = id;
-40039:           continue;
-40039:         }
-40039:         if (sign_i > 0) {
-40039:           assign_r(coeff_i, sc_i, ROUND_UP);
-40039:         }
-40039:         else {
-40039:           neg_assign(minus_sc_i, sc_i);
-40039:           assign_r(coeff_i, minus_sc_i, ROUND_UP);
-40039:         }
-40039:         div_2exp_assign_r(approx_i, double_approx_i, 1, ROUND_UP);
-40039:         add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP);
-40039:       }
-40039: 
-40039: 
-40039:       forget_all_octagonal_constraints(var_id);
-40039:       reset_strongly_closed();
-40039: 
-40039:       if (pinf_count > 1) {
-40039:         ((void) 0);
-40039:         return;
-40039:       }
-40039: 
-40039: 
-40039:       if (sc_denom != 1) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
-40039:         assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
-40039:         neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
-40039:         div_assign_r(sum, sum, down_sc_denom, ROUND_UP);
-40039:       }
-40039: 
-40039:       if (pinf_count == 0) {
-40039: 
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_double_sum; N& double_sum = holder_double_sum.item();
-40039:         mul_2exp_assign_r(double_sum, sum, 1, ROUND_UP);
-40039:         matrix[n_var][n_var + 1] = double_sum;
-40039: 
-40039:         deduce_minus_v_pm_u_bounds(var_id, pinf_index, sc_expr, sc_denom, sum);
-40039:       }
-40039:       else if (pinf_count == 1) {
-40039:         if (pinf_index != var_id) {
-40039:           const Coefficient& pi = expr.coefficient(Variable(pinf_index));
-40039:           if (pi == denominator) {
-40039: 
-40039: 
-40039:             if (pinf_index < var_id) {
-40039:               matrix[n_var][2*pinf_index] = sum;
-40039:             }
-40039:             else {
-40039:               matrix[2*pinf_index + 1][n_var + 1] = sum;
-40039:             }
-40039:           }
-40039:           else {
-40039:             if (pi == minus_denom) {
-40039: 
-40039: 
-40039:               if (pinf_index < var_id) {
-40039:                 matrix[n_var][2*pinf_index + 1] = sum;
-40039:               }
-40039:               else {
-40039:                 matrix[2*pinf_index][n_var + 1] = sum;
-40039:               }
-40039:             }
-40039:           }
-40039:         }
-40039:       }
-40039:       break;
-40039:     }
-40039: 
-40039:   default:
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     break;
-40039:   }
-40039:   incremental_strong_closure_assign(var);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::generalized_affine_image(const Linear_Expression& lhs,
-40039:                                              const Relation_Symbol relsym,
-40039:                                              const Linear_Expression& rhs) {
-40039: 
-40039: 
-40039: 
-40039:   dimension_type lhs_space_dim = lhs.space_dimension();
-40039:   if (space_dim < lhs_space_dim) {
-40039:     throw_dimension_incompatible("generalized_affine_image(e1, r, e2)",
-40039:                                  "e1", lhs);
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type rhs_space_dim = rhs.space_dimension();
-40039:   if (space_dim < rhs_space_dim) {
-40039:     throw_dimension_incompatible("generalized_affine_image(e1, r, e2)",
-40039:                                  "e2", rhs);
-40039:   }
-40039: 
-40039: 
-40039:   if (relsym == LESS_THAN || relsym == GREATER_THAN) {
-40039:     throw_invalid_argument("generalized_affine_image(e1, r, e2)",
-40039:                            "r is a strict relation symbol");
-40039:   }
-40039: 
-40039:   if (relsym == NOT_EQUAL) {
-40039:     throw_invalid_argument("generalized_affine_image(e1, r, e2)",
-40039:                            "r is the disequality relation symbol");
-40039:   }
-40039: 
-40039:   strong_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   dimension_type t_lhs = 0;
-40039: 
-40039:   dimension_type j_lhs = lhs.last_nonzero();
-40039: 
-40039:   if (j_lhs != 0) {
-40039:     ++t_lhs;
-40039:     if (!lhs.all_zeroes(1, j_lhs)) {
-40039:       ++t_lhs;
-40039:     }
-40039:     --j_lhs;
-40039:   }
-40039: 
-40039:   const Coefficient& b_lhs = lhs.inhomogeneous_term();
-40039: 
-40039:   if (t_lhs == 0) {
-40039: # 6583 "../../src/Octagonal_Shape_templates.hh"
-40039:     switch (relsym) {
-40039:     case LESS_OR_EQUAL:
-40039:       refine_no_check(lhs <= rhs);
-40039:       break;
-40039:     case EQUAL:
-40039:       refine_no_check(lhs == rhs);
-40039:       break;
-40039:     case GREATER_OR_EQUAL:
-40039:       refine_no_check(lhs >= rhs);
-40039:       break;
-40039:     default:
-40039: 
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       break;
-40039:     }
-40039:   }
-40039: 
-40039:   else if (t_lhs == 1) {
-40039: 
-40039: 
-40039: 
-40039:     Variable v(j_lhs);
-40039: 
-40039:     const Coefficient& denom = lhs.coefficient(v);
-40039:     Relation_Symbol new_relsym = relsym;
-40039:     if (denom < 0) {
-40039:       if (relsym == LESS_OR_EQUAL) {
-40039:         new_relsym = GREATER_OR_EQUAL;
-40039:       }
-40039:       else if (relsym == GREATER_OR_EQUAL) {
-40039:         new_relsym = LESS_OR_EQUAL;
-40039:       }
-40039:     }
-40039:     Linear_Expression expr = rhs - b_lhs;
-40039:     generalized_affine_image(v, new_relsym, expr, denom);
-40039:   }
-40039:   else {
-40039: 
-40039: 
-40039:     std::vector<Variable> lhs_vars;
-40039:     for (Linear_Expression::const_iterator i = lhs.begin(), i_end = lhs.end();
-40039:           i != i_end; ++i) {
-40039:       lhs_vars.push_back(i.variable());
-40039:     }
-40039: 
-40039:     const dimension_type num_common_dims = std::min(lhs_space_dim, rhs_space_dim);
-40039:     if (!lhs.have_a_common_variable(rhs, Variable(0), Variable(num_common_dims))) {
-40039: 
-40039: 
-40039:       for (dimension_type i = lhs_vars.size(); i-- > 0; ) {
-40039:         dimension_type lhs_vars_i = lhs_vars[i].id();
-40039:         forget_all_octagonal_constraints(lhs_vars_i);
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       switch (relsym) {
-40039:       case LESS_OR_EQUAL:
-40039:         refine_no_check(lhs <= rhs);
-40039:         break;
-40039:       case EQUAL:
-40039:         refine_no_check(lhs == rhs);
-40039:         break;
-40039:       case GREATER_OR_EQUAL:
-40039:         refine_no_check(lhs >= rhs);
-40039:         break;
-40039:       default:
-40039: 
-40039:         Parma_Polyhedra_Library::ppl_unreachable();
-40039:         break;
-40039:       }
-40039:     }
-40039:     else {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       for (dimension_type i = lhs_vars.size(); i-- > 0; ) {
-40039:         dimension_type lhs_vars_i = lhs_vars[i].id();
-40039:         forget_all_octagonal_constraints(lhs_vars_i);
-40039:       }
-40039: # 6711 "../../src/Octagonal_Shape_templates.hh"
-40039:     }
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::bounded_affine_image(const Variable var,
-40039:                                          const Linear_Expression& lb_expr,
-40039:                                          const Linear_Expression& ub_expr,
-40039:                                          Coefficient_traits::const_reference
-40039:                                          denominator) {
-40039: 
-40039:   if (denominator == 0) {
-40039:     throw_invalid_argument("bounded_affine_image(v, lb, ub, d)", "d == 0");
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type var_id = var.id();
-40039:   if (space_dim < var_id + 1) {
-40039:     throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)",
-40039:                                  var_id + 1);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type lb_space_dim = lb_expr.space_dimension();
-40039:   if (space_dim < lb_space_dim) {
-40039:     throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)",
-40039:                                  "lb", lb_expr);
-40039:   }
-40039:   const dimension_type ub_space_dim = ub_expr.space_dimension();
-40039:   if (space_dim < ub_space_dim) {
-40039:     throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)",
-40039:                                  "ub", ub_expr);
-40039:   }
-40039: 
-40039:   strong_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   dimension_type t = 0;
-40039: 
-40039:   dimension_type w_id = lb_expr.last_nonzero();
-40039: 
-40039:   if (w_id != 0) {
-40039:     ++t;
-40039:     if (!lb_expr.all_zeroes(1, w_id)) {
-40039:       ++t;
-40039:     }
-40039:     --w_id;
-40039:   }
-40039: 
-40039:   typedef typename OR_Matrix<N>::row_iterator row_iterator;
-40039:   typedef typename OR_Matrix<N>::const_row_iterator Row_iterator;
-40039:   typedef typename OR_Matrix<N>::const_row_reference_type Row_reference;
-40039: 
-40039:   const row_iterator m_begin = matrix.row_begin();
-40039:   const dimension_type n_var = 2*var_id;
-40039:   const Coefficient& b = lb_expr.inhomogeneous_term();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item();
-40039:   neg_assign_r(minus_denom, denominator, ROUND_NOT_NEEDED);
-40039: # 6788 "../../src/Octagonal_Shape_templates.hh"
-40039:   if (t == 0) {
-40039: 
-40039:     generalized_affine_image(var,
-40039:                              LESS_OR_EQUAL,
-40039:                              ub_expr,
-40039:                              denominator);
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_two_b; Parma_Polyhedra_Library::Coefficient& two_b = holder_two_b.item();
-40039:     two_b = 2*b;
-40039: 
-40039:     add_octagonal_constraint(n_var, n_var + 1, two_b, minus_denom);
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039:   if (t == 1) {
-40039: 
-40039:     const Coefficient& w_coeff = lb_expr.coefficient(Variable(w_id));
-40039:     if (w_coeff == denominator || w_coeff == minus_denom) {
-40039: 
-40039:       if (w_id == var_id) {
-40039: 
-40039: 
-40039:         const Variable new_var(space_dim);
-40039:         add_space_dimensions_and_embed(1);
-40039: 
-40039: 
-40039:         affine_image(new_var, lb_expr, denominator);
-40039: 
-40039:         strong_closure_assign();
-40039:         ((void) 0);
-40039: 
-40039:         generalized_affine_image(var,
-40039:                                  LESS_OR_EQUAL,
-40039:                                  ub_expr,
-40039:                                  denominator);
-40039: 
-40039:         refine_no_check(var >= new_var);
-40039: 
-40039:         remove_higher_space_dimensions(space_dim-1);
-40039:         return;
-40039:       }
-40039:       else {
-40039: 
-40039:         generalized_affine_image(var,
-40039:                                  LESS_OR_EQUAL,
-40039:                                  ub_expr,
-40039:                                  denominator);
-40039: 
-40039: 
-40039:         const dimension_type n_w = 2*w_id;
-40039: 
-40039:         if (w_coeff == denominator) {
-40039:           if (var_id < w_id) {
-40039:             add_octagonal_constraint(n_w + 1, n_var + 1, b, minus_denom);
-40039:           }
-40039:           else {
-40039:             add_octagonal_constraint(n_var, n_w, b, minus_denom);
-40039:           }
-40039:         }
-40039:         else {
-40039: 
-40039:           if (var_id < w_id) {
-40039:             add_octagonal_constraint(n_w, n_var + 1, b, minus_denom);
-40039:           }
-40039:           else {
-40039:             add_octagonal_constraint(n_var, n_w + 1, b, minus_denom);
-40039:           }
-40039:         }
-40039:         ((void) 0);
-40039:         return;
-40039:       }
-40039:     }
-40039:   }
-40039: # 6874 "../../src/Octagonal_Shape_templates.hh"
-40039:   const bool is_sc = (denominator > 0);
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item();
-40039:   neg_assign_r(minus_b, b, ROUND_NOT_NEEDED);
-40039: 
-40039:   const Coefficient& minus_sc_b = is_sc ? minus_b : b;
-40039:   const Coefficient& sc_denom = is_sc ? denominator : minus_denom;
-40039:   const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator;
-40039: 
-40039: 
-40039: 
-40039:   Linear_Expression minus_expr;
-40039:   if (!is_sc) {
-40039:     minus_expr = -lb_expr;
-40039:   }
-40039:   const Linear_Expression& sc_expr = is_sc ? lb_expr : minus_expr;
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_neg_sum; N& neg_sum = holder_neg_sum.item();
-40039: 
-40039:   dimension_type neg_pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
-40039: 
-40039:   dimension_type neg_pinf_count = 0;
-40039: 
-40039: 
-40039:   assign_r(neg_sum, minus_sc_b, ROUND_UP);
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_i; N& coeff_i = holder_coeff_i.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_minus_coeff_i; N& minus_coeff_i = holder_minus_coeff_i.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_half; N& half = holder_half.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item();
-40039: 
-40039: 
-40039:   for (Row_iterator m_iter = m_begin, m_iter_end = m_begin + (2 * w_id + 2);
-40039:        m_iter != m_iter_end; ) {
-40039:     const dimension_type n_i = m_iter.index();
-40039:     const dimension_type id = n_i/2;
-40039:     Row_reference m_i = *m_iter;
-40039:     ++m_iter;
-40039:     Row_reference m_ci = *m_iter;
-40039:     ++m_iter;
-40039:     const Coefficient& sc_i = sc_expr.coefficient(Variable(id));
-40039:     const int sign_i = sgn(sc_i);
-40039:     if (sign_i > 0) {
-40039:       assign_r(coeff_i, sc_i, ROUND_UP);
-40039: 
-40039:       if (neg_pinf_count <= 1) {
-40039:         const N& double_up_approx_minus_i = m_i[n_i + 1];
-40039:         if (!is_plus_infinity(double_up_approx_minus_i)) {
-40039: 
-40039:           div_2exp_assign_r(half, double_up_approx_minus_i, 1, ROUND_UP);
-40039:           add_mul_assign_r(neg_sum, coeff_i, half, ROUND_UP);
-40039:         }
-40039:         else {
-40039:           ++neg_pinf_count;
-40039:           neg_pinf_index = id;
-40039:         }
-40039:       }
-40039:     }
-40039:     else if (sign_i < 0) {
-40039:       neg_assign_r(minus_sc_i, sc_i, ROUND_NOT_NEEDED);
-40039:       assign_r(minus_coeff_i, minus_sc_i, ROUND_UP);
-40039: 
-40039:       if (neg_pinf_count <= 1) {
-40039:         const N& double_up_approx_i = m_ci[n_i];
-40039:         if (!is_plus_infinity(double_up_approx_i)) {
-40039: 
-40039:           div_2exp_assign_r(half, double_up_approx_i, 1, ROUND_UP);
-40039:           add_mul_assign_r(neg_sum, minus_coeff_i, half, ROUND_UP);
-40039:         }
-40039:         else {
-40039:           ++neg_pinf_count;
-40039:           neg_pinf_index = id;
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   generalized_affine_image(var,
-40039:                            LESS_OR_EQUAL,
-40039:                            ub_expr,
-40039:                            denominator);
-40039: 
-40039: 
-40039:   if (neg_pinf_count > 1) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   reset_strongly_closed();
-40039: 
-40039: 
-40039:   if (neg_pinf_count <= 1) {
-40039: 
-40039:     if (sc_denom != 1) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
-40039:       assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
-40039:       neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
-40039:       div_assign_r(neg_sum, neg_sum, down_sc_denom, ROUND_UP);
-40039:     }
-40039: 
-40039:     if (neg_pinf_count == 0) {
-40039: 
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_double_neg_sum; N& double_neg_sum = holder_double_neg_sum.item();
-40039:       mul_2exp_assign_r(double_neg_sum, neg_sum, 1, ROUND_UP);
-40039:       matrix[n_var][n_var + 1] = double_neg_sum;
-40039: 
-40039:       deduce_minus_v_pm_u_bounds(var_id, w_id, sc_expr, sc_denom, neg_sum);
-40039:     }
-40039:     else
-40039: 
-40039:       if (neg_pinf_index != var_id) {
-40039:         const Coefficient& npi = sc_expr.coefficient(Variable(neg_pinf_index));
-40039:         if (npi == sc_denom) {
-40039: 
-40039: 
-40039:           if (neg_pinf_index < var_id) {
-40039:             matrix[n_var][2*neg_pinf_index] = neg_sum;
-40039:           }
-40039:           else {
-40039:             matrix[2*neg_pinf_index + 1][n_var + 1] = neg_sum;
-40039:           }
-40039:         }
-40039:         else {
-40039:           if (npi == minus_sc_denom) {
-40039: 
-40039: 
-40039:             if (neg_pinf_index < var_id) {
-40039:               matrix[n_var][2*neg_pinf_index + 1] = neg_sum;
-40039:             }
-40039:             else {
-40039:               matrix[2*neg_pinf_index][n_var + 1] = neg_sum;
-40039:             }
-40039:           }
-40039:         }
-40039:       }
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>
-40039: ::generalized_affine_preimage(const Variable var,
-40039:                               const Relation_Symbol relsym,
-40039:                               const Linear_Expression& expr,
-40039:                               Coefficient_traits::const_reference
-40039:                               denominator) {
-40039: 
-40039:   if (denominator == 0) {
-40039:     throw_invalid_argument("generalized_affine_preimage(v, r, e, d)", "d == 0");
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type expr_space_dim = expr.space_dimension();
-40039:   if (space_dim < expr_space_dim) {
-40039:     throw_dimension_incompatible("generalized_affine_preimage(v, r, e, d)",
-40039:                                  "e", expr);
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type var_id = var.id();
-40039:   if (space_dim < var_id + 1) {
-40039:     throw_dimension_incompatible("generalized_affine_preimage(v, r, e, d)",
-40039:                                  var_id + 1);
-40039:   }
-40039: 
-40039: 
-40039:   if (relsym == LESS_THAN || relsym == GREATER_THAN) {
-40039:     throw_invalid_argument("generalized_affine_preimage(v, r, e, d)",
-40039:                            "r is a strict relation symbol");
-40039:   }
-40039: 
-40039:   if (relsym == NOT_EQUAL) {
-40039:     throw_invalid_argument("generalized_affine_preimage(v, r, e, d)",
-40039:                            "r is the disequality relation symbol");
-40039:   }
-40039: 
-40039:   if (relsym == EQUAL) {
-40039: 
-40039: 
-40039:     affine_preimage(var, expr, denominator);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   strong_closure_assign();
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   const Coefficient& expr_v = expr.coefficient(var);
-40039:   if (expr_v != 0) {
-40039:     const Relation_Symbol reversed_relsym = (relsym == LESS_OR_EQUAL)
-40039:       ? GREATER_OR_EQUAL : LESS_OR_EQUAL;
-40039:     const Linear_Expression inverse
-40039:       = expr - (expr_v + denominator)*var;
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inverse_denom; Parma_Polyhedra_Library::Coefficient& inverse_denom = holder_inverse_denom.item();
-40039:     neg_assign(inverse_denom, expr_v);
-40039:     const Relation_Symbol inverse_relsym
-40039:       = (sgn(denominator) == sgn(inverse_denom)) ? relsym : reversed_relsym;
-40039:     generalized_affine_image(var, inverse_relsym, inverse, inverse_denom);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   refine(var, relsym, expr, denominator);
-40039: 
-40039: 
-40039:   if (is_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   forget_all_octagonal_constraints(var_id);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>
-40039: ::generalized_affine_preimage(const Linear_Expression& lhs,
-40039:                               const Relation_Symbol relsym,
-40039:                               const Linear_Expression& rhs) {
-40039: 
-40039: 
-40039: 
-40039:   dimension_type lhs_space_dim = lhs.space_dimension();
-40039:   if (space_dim < lhs_space_dim) {
-40039:     throw_dimension_incompatible("generalized_affine_preimage(e1, r, e2)",
-40039:                                  "e1", lhs);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type rhs_space_dim = rhs.space_dimension();
-40039:   if (space_dim < rhs_space_dim) {
-40039:     throw_dimension_incompatible("generalized_affine_preimage(e1, r, e2)",
-40039:                                  "e2", rhs);
-40039:   }
-40039: 
-40039: 
-40039:   if (relsym == LESS_THAN || relsym == GREATER_THAN) {
-40039:     throw_invalid_argument("generalized_affine_preimage(e1, r, e2)",
-40039:                            "r is a strict relation symbol");
-40039:   }
-40039: 
-40039:   if (relsym == NOT_EQUAL) {
-40039:     throw_invalid_argument("generalized_affine_preimage(e1, r, e2)",
-40039:                            "r is the disequality relation symbol");
-40039:   }
-40039:   strong_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   dimension_type t_lhs = 0;
-40039: 
-40039:   dimension_type j_lhs = lhs.last_nonzero();
-40039: 
-40039:   if (j_lhs != 0) {
-40039:     ++t_lhs;
-40039:     if (!lhs.all_zeroes(1, j_lhs)) {
-40039:       ++t_lhs;
-40039:     }
-40039:     --j_lhs;
-40039:   }
-40039: 
-40039:   const Coefficient& b_lhs = lhs.inhomogeneous_term();
-40039: 
-40039: 
-40039: 
-40039:   if (t_lhs == 0) {
-40039:     generalized_affine_image(lhs, relsym, rhs);
-40039:     return;
-40039:   }
-40039: 
-40039:   else if (t_lhs == 1) {
-40039: 
-40039: 
-40039: 
-40039:     Variable v(j_lhs);
-40039: 
-40039:     const Coefficient& denom = lhs.coefficient(v);
-40039:     Relation_Symbol new_relsym = relsym;
-40039:     if (denom < 0) {
-40039:       if (relsym == LESS_OR_EQUAL) {
-40039:         new_relsym = GREATER_OR_EQUAL;
-40039:       }
-40039:       else if (relsym == GREATER_OR_EQUAL) {
-40039:         new_relsym = LESS_OR_EQUAL;
-40039:       }
-40039:     }
-40039:     Linear_Expression expr = rhs - b_lhs;
-40039:     generalized_affine_preimage(v, new_relsym, expr, denom);
-40039:   }
-40039: 
-40039:   else {
-40039: 
-40039: 
-40039:     std::vector<Variable> lhs_vars;
-40039:     for (Linear_Expression::const_iterator i = lhs.begin(), i_end = lhs.end();
-40039:           i != i_end; ++i) {
-40039:       lhs_vars.push_back(i.variable());
-40039:     }
-40039: 
-40039:     const dimension_type num_common_dims = std::min(lhs_space_dim, rhs_space_dim);
-40039:     if (!lhs.have_a_common_variable(rhs, Variable(0), Variable(num_common_dims))) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       switch (relsym) {
-40039:       case LESS_OR_EQUAL:
-40039:         refine_no_check(lhs <= rhs);
-40039:         break;
-40039:       case EQUAL:
-40039:         refine_no_check(lhs == rhs);
-40039:         break;
-40039:       case GREATER_OR_EQUAL:
-40039:         refine_no_check(lhs >= rhs);
-40039:         break;
-40039:       default:
-40039: 
-40039:         Parma_Polyhedra_Library::ppl_unreachable();
-40039:         break;
-40039:       }
-40039: 
-40039: 
-40039:       if (is_empty()) {
-40039:         return;
-40039:       }
-40039: 
-40039:       for (dimension_type i = lhs_vars.size(); i-- > 0; ) {
-40039:         dimension_type lhs_vars_i = lhs_vars[i].id();
-40039:         forget_all_octagonal_constraints(lhs_vars_i);
-40039:       }
-40039:     }
-40039:     else {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const Variable new_var(space_dim);
-40039:       add_space_dimensions_and_embed(1);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       affine_image(new_var, lhs);
-40039: 
-40039: 
-40039:       strong_closure_assign();
-40039:       ((void) 0);
-40039:       for (dimension_type i = lhs_vars.size(); i-- > 0; ) {
-40039:         dimension_type lhs_vars_i = lhs_vars[i].id();
-40039:         forget_all_octagonal_constraints(lhs_vars_i);
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       switch (relsym) {
-40039:       case LESS_OR_EQUAL:
-40039:         refine_no_check(new_var <= rhs);
-40039:         break;
-40039:       case EQUAL:
-40039:         refine_no_check(new_var == rhs);
-40039:         break;
-40039:       case GREATER_OR_EQUAL:
-40039:         refine_no_check(new_var >= rhs);
-40039:         break;
-40039:       default:
-40039: 
-40039:         Parma_Polyhedra_Library::ppl_unreachable();
-40039:         break;
-40039:       }
-40039: 
-40039:       remove_higher_space_dimensions(space_dim-1);
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::bounded_affine_preimage(const Variable var,
-40039:                                             const Linear_Expression& lb_expr,
-40039:                                             const Linear_Expression& ub_expr,
-40039:                                             Coefficient_traits::const_reference
-40039:                                             denominator) {
-40039: 
-40039:   if (denominator == 0) {
-40039:     throw_invalid_argument("bounded_affine_preimage(v, lb, ub, d)", "d == 0");
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type var_id = var.id();
-40039:   if (space_dim < var_id + 1) {
-40039:     throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)",
-40039:                                  var_id + 1);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type lb_space_dim = lb_expr.space_dimension();
-40039:   if (space_dim < lb_space_dim) {
-40039:     throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)",
-40039:                                  "lb", lb_expr);
-40039:   }
-40039:   const dimension_type ub_space_dim = ub_expr.space_dimension();
-40039:   if (space_dim < ub_space_dim) {
-40039:     throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)",
-40039:                                  "ub", ub_expr);
-40039:   }
-40039: 
-40039:   strong_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   if (ub_expr.coefficient(var) == 0) {
-40039:     refine(var, LESS_OR_EQUAL, ub_expr, denominator);
-40039:     generalized_affine_preimage(var, GREATER_OR_EQUAL,
-40039:                                 lb_expr, denominator);
-40039:     return;
-40039:   }
-40039:   if (lb_expr.coefficient(var) == 0) {
-40039:     refine(var, GREATER_OR_EQUAL, lb_expr, denominator);
-40039:     generalized_affine_preimage(var, LESS_OR_EQUAL,
-40039:                                 ub_expr, denominator);
-40039:     return;
-40039:   }
-40039: 
-40039:   const Coefficient& expr_v = lb_expr.coefficient(var);
-40039: 
-40039: 
-40039:   const Variable new_var(space_dim);
-40039:   add_space_dimensions_and_embed(1);
-40039:   const Linear_Expression lb_inverse
-40039:     = lb_expr - (expr_v + denominator)*var;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inverse_denom; Parma_Polyhedra_Library::Coefficient& inverse_denom = holder_inverse_denom.item();
-40039:   neg_assign(inverse_denom, expr_v);
-40039:   affine_image(new_var, lb_inverse, inverse_denom);
-40039:   strong_closure_assign();
-40039:   ((void) 0);
-40039:   generalized_affine_preimage(var, LESS_OR_EQUAL,
-40039:                               ub_expr, denominator);
-40039:   if (sgn(denominator) == sgn(inverse_denom)) {
-40039:     refine_no_check(var >= new_var) ;
-40039:   }
-40039:   else {
-40039:     refine_no_check(var <= new_var);
-40039:   }
-40039: 
-40039:   remove_higher_space_dimensions(space_dim-1);
-40039: }
-40039: 
-40039: template <typename T>
-40039: Constraint_System
-40039: Octagonal_Shape<T>::constraints() const {
-40039:   Constraint_System cs;
-40039:   cs.set_space_dimension(space_dim);
-40039: 
-40039:   if (space_dim == 0) {
-40039:     if (marked_empty()) {
-40039:       cs = Constraint_System::zero_dim_empty();
-40039:     }
-40039:     return cs;
-40039:   }
-40039: 
-40039:   if (marked_empty()) {
-40039:     cs.insert(Constraint::zero_dim_false());
-40039:     return cs;
-40039:   }
-40039: 
-40039:   typedef typename OR_Matrix<N>::const_row_iterator row_iterator;
-40039:   typedef typename OR_Matrix<N>::const_row_reference_type row_reference;
-40039: 
-40039:   row_iterator m_begin = matrix.row_begin();
-40039:   row_iterator m_end = matrix.row_end();
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_a; Parma_Polyhedra_Library::Coefficient& a = holder_a.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_b; Parma_Polyhedra_Library::Coefficient& b = holder_b.item();
-40039: 
-40039: 
-40039:   for (row_iterator i_iter = m_begin; i_iter != m_end; ) {
-40039:     const dimension_type i = i_iter.index();
-40039:     const Variable x(i/2);
-40039:     const N& c_i_ii = (*i_iter)[i + 1];
-40039:     ++i_iter;
-40039:     const N& c_ii_i = (*i_iter)[i];
-40039:     ++i_iter;
-40039: 
-40039:     if (is_additive_inverse(c_i_ii, c_ii_i)) {
-40039: 
-40039:       numer_denom(c_ii_i, b, a);
-40039:       a *= 2;
-40039:       cs.insert(a*x == b);
-40039:     }
-40039:     else {
-40039: 
-40039:       if (!is_plus_infinity(c_i_ii)) {
-40039:         numer_denom(c_i_ii, b, a);
-40039:         a *= 2;
-40039:         cs.insert(-a*x <= b);
-40039:       }
-40039:       if (!is_plus_infinity(c_ii_i)) {
-40039:         numer_denom(c_ii_i, b, a);
-40039:         a *= 2;
-40039:         cs.insert(a*x <= b);
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   for (row_iterator i_iter = m_begin; i_iter != m_end; ) {
-40039:     const dimension_type i = i_iter.index();
-40039:     row_reference r_i = *i_iter;
-40039:     ++i_iter;
-40039:     row_reference r_ii = *i_iter;
-40039:     ++i_iter;
-40039:     const Variable y(i/2);
-40039:     for (dimension_type j = 0; j < i; j += 2) {
-40039:       const N& c_i_j = r_i[j];
-40039:       const N& c_ii_jj = r_ii[j + 1];
-40039:       const Variable x(j/2);
-40039:       if (is_additive_inverse(c_ii_jj, c_i_j)) {
-40039: 
-40039:         numer_denom(c_i_j, b, a);
-40039:         cs.insert(a*x - a*y == b);
-40039:       }
-40039:       else {
-40039: 
-40039:         if (!is_plus_infinity(c_i_j)) {
-40039:           numer_denom(c_i_j, b, a);
-40039:           cs.insert(a*x - a*y <= b);
-40039:         }
-40039:         if (!is_plus_infinity(c_ii_jj)) {
-40039:           numer_denom(c_ii_jj, b, a);
-40039:           cs.insert(a*y - a*x <= b);
-40039:         }
-40039:       }
-40039: 
-40039:       const N& c_ii_j = r_ii[j];
-40039:       const N& c_i_jj = r_i[j + 1];
-40039:       if (is_additive_inverse(c_i_jj, c_ii_j)) {
-40039: 
-40039:         numer_denom(c_ii_j, b, a);
-40039:         cs.insert(a*x + a*y == b);
-40039:       }
-40039:       else {
-40039: 
-40039:         if (!is_plus_infinity(c_i_jj)) {
-40039:           numer_denom(c_i_jj, b, a);
-40039:           cs.insert(-a*x - a*y <= b);
-40039:         }
-40039:         if (!is_plus_infinity(c_ii_j)) {
-40039:           numer_denom(c_ii_j, b, a);
-40039:           cs.insert(a*x + a*y <= b);
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039:   return cs;
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::expand_space_dimension(Variable var, dimension_type m) {
-40039: 
-40039:   const dimension_type var_id = var.id();
-40039:   if (var_id + 1 > space_dim) {
-40039:     throw_dimension_incompatible("expand_space_dimension(v, m)", var_id + 1);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (m > max_space_dimension() - space_dim) {
-40039:     throw_invalid_argument("expand_dimension(v, m)",
-40039:                            "adding m new space dimensions exceeds "
-40039:                            "the maximum allowed space dimension");
-40039:   }
-40039: 
-40039:   if (m == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039:   const dimension_type old_num_rows = matrix.num_rows();
-40039: 
-40039: 
-40039:   add_space_dimensions_and_embed(m);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename OR_Matrix<N>::row_iterator row_iterator;
-40039:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
-40039:   typedef typename OR_Matrix<N>::const_row_iterator Row_iterator;
-40039:   typedef typename OR_Matrix<N>::const_row_reference_type Row_reference;
-40039: 
-40039:   const row_iterator m_begin = matrix.row_begin();
-40039:   const row_iterator m_end = matrix.row_end();
-40039:   const dimension_type n_var = 2*var_id;
-40039:   Row_iterator v_iter = m_begin + n_var;
-40039:   Row_reference m_v = *v_iter;
-40039:   Row_reference m_cv = *(v_iter + 1);
-40039: 
-40039:   for (row_iterator i_iter = m_begin + old_num_rows; i_iter != m_end;
-40039:        i_iter += 2) {
-40039:     row_reference m_i = *i_iter;
-40039:     row_reference m_ci = *(i_iter + 1);
-40039:     const dimension_type i = i_iter.index();
-40039:     const dimension_type ci = i + 1;
-40039:     m_i[ci] = m_v[n_var + 1];
-40039:     m_ci[i] = m_cv[n_var];
-40039:     for (dimension_type j = 0; j < n_var; ++j) {
-40039:       m_i[j] = m_v[j];
-40039:       m_ci[j] = m_cv[j];
-40039:     }
-40039:     for (dimension_type j = n_var + 2; j < old_num_rows; ++j) {
-40039:       row_iterator j_iter = m_begin + j;
-40039:       row_reference m_cj = (j % 2 != 0) ? *(j_iter-1) : *(j_iter + 1);
-40039:       m_i[j] = m_cj[n_var + 1];
-40039:       m_ci[j] = m_cj[n_var];
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   if (marked_strongly_closed()) {
-40039:     reset_strongly_closed();
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::fold_space_dimensions(const Variables_Set& vars,
-40039:                                           Variable dest) {
-40039: 
-40039:   if (dest.space_dimension() > space_dim) {
-40039:     throw_dimension_incompatible("fold_space_dimensions(vs, v)", "v", dest);
-40039:   }
-40039: 
-40039:   if (vars.empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   if (vars.space_dimension() > space_dim) {
-40039:     throw_dimension_incompatible("fold_space_dimensions(vs, v)",
-40039:                                  vars.space_dimension());
-40039:   }
-40039: 
-40039: 
-40039:   if (vars.find(dest.id()) != vars.end()) {
-40039:     throw_invalid_argument("fold_space_dimensions(vs, v)",
-40039:                            "v should not occur in vs");
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename OR_Matrix<N>::row_iterator row_iterator;
-40039:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
-40039: 
-40039:   const row_iterator m_begin = matrix.row_begin();
-40039: 
-40039:   strong_closure_assign();
-40039:   const dimension_type n_rows = matrix.num_rows();
-40039:   const dimension_type n_dest = 2*dest.id();
-40039:   row_iterator v_iter = m_begin + n_dest;
-40039:   row_reference m_v = *v_iter;
-40039:   row_reference m_cv = *(v_iter + 1);
-40039:   for (Variables_Set::const_iterator i = vars.begin(),
-40039:          vs_end = vars.end(); i != vs_end; ++i) {
-40039:     const dimension_type tbf_id = *i;
-40039:     const dimension_type tbf_var = 2*tbf_id;
-40039:     row_iterator tbf_iter = m_begin + tbf_var;
-40039:     row_reference m_tbf = *tbf_iter;
-40039:     row_reference m_ctbf = *(tbf_iter + 1);
-40039:     max_assign(m_v[n_dest + 1], m_tbf[tbf_var + 1]);
-40039:     max_assign(m_cv[n_dest], m_ctbf[tbf_var]);
-40039: 
-40039:     const dimension_type min_id = std::min(n_dest, tbf_var);
-40039:     const dimension_type max_id = std::max(n_dest, tbf_var);
-40039: 
-40039:     using namespace Implementation::Octagonal_Shapes;
-40039:     for (dimension_type j = 0; j < min_id; ++j) {
-40039:       const dimension_type cj = coherent_index(j);
-40039:       max_assign(m_v[j], m_tbf[j]);
-40039:       max_assign(m_cv[j], m_ctbf[j]);
-40039:       max_assign(m_cv[cj], m_ctbf[cj]);
-40039:       max_assign(m_v[cj], m_tbf[cj]);
-40039:     }
-40039:     for (dimension_type j = min_id + 2; j < max_id; ++j) {
-40039:       const dimension_type cj = coherent_index(j);
-40039:       row_iterator j_iter = m_begin + j;
-40039:       row_reference m_j = *j_iter;
-40039:       row_reference m_cj = (j % 2 != 0) ? *(j_iter-1) : *(j_iter + 1);
-40039:       if (n_dest == min_id) {
-40039:         max_assign(m_cj[n_dest + 1], m_tbf[j]);
-40039:         max_assign(m_cj[n_dest], m_ctbf[j]);
-40039:         max_assign(m_j[n_dest], m_ctbf[cj]);
-40039:         max_assign(m_j[n_dest + 1], m_tbf[cj]);
-40039:       }
-40039:       else {
-40039:         max_assign(m_v[j], m_cj[tbf_var + 1]);
-40039:         max_assign(m_cv[j], m_cj[tbf_var]);
-40039:         max_assign(m_cv[cj], m_j[tbf_var]);
-40039:         max_assign(m_v[cj], m_j[tbf_var + 1]);
-40039:       }
-40039:     }
-40039:     for (dimension_type j = max_id + 2; j < n_rows; ++j) {
-40039:       row_iterator j_iter = m_begin + j;
-40039:       row_reference m_j = *j_iter;
-40039:       row_reference m_cj = (j % 2 != 0) ? *(j_iter-1) : *(j_iter + 1);
-40039:       max_assign(m_cj[n_dest + 1], m_cj[tbf_var + 1]);
-40039:       max_assign(m_cj[n_dest], m_cj[tbf_var]);
-40039:       max_assign(m_j[n_dest], m_j[tbf_var]);
-40039:       max_assign(m_j[n_dest + 1], m_j[tbf_var + 1]);
-40039:     }
-40039:   }
-40039:   remove_space_dimensions(vars);
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: Octagonal_Shape<T>::upper_bound_assign_if_exact(const Octagonal_Shape& y) {
-40039: 
-40039: 
-40039: 
-40039:   const Octagonal_Shape& x = *this;
-40039:   const dimension_type x_space_dim = x.space_dimension();
-40039: 
-40039:   if (x_space_dim != y.space_dimension()) {
-40039:     throw_dimension_incompatible("upper_bound_assign_if_exact(y)", y);
-40039:   }
-40039: 
-40039: 
-40039:   if (x_space_dim == 0) {
-40039:     upper_bound_assign(y);
-40039:     return true;
-40039:   }
-40039: 
-40039:   if (x.marked_empty()) {
-40039:     *this = y;
-40039:     return true;
-40039:   }
-40039:   else if (y.is_empty()) {
-40039:     return true;
-40039:   }
-40039:   else if (x.is_empty()) {
-40039:     *this = y;
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039:   Octagonal_Shape<T> ub(x);
-40039:   ub.upper_bound_assign(y);
-40039: 
-40039: 
-40039: 
-40039:   std::vector<Bit_Row> x_non_red;
-40039:   x.non_redundant_matrix_entries(x_non_red);
-40039:   std::vector<Bit_Row> y_non_red;
-40039:   y.non_redundant_matrix_entries(y_non_red);
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_lhs; N& lhs = holder_lhs.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_lhs_copy; N& lhs_copy = holder_lhs_copy.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_rhs; N& rhs = holder_rhs.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_temp_zero; N& temp_zero = holder_temp_zero.item();
-40039:   assign_r(temp_zero, 0, ROUND_NOT_NEEDED);
-40039: 
-40039:   typedef typename OR_Matrix<N>::const_row_iterator row_iterator;
-40039:   typedef typename OR_Matrix<N>::const_row_reference_type row_reference;
-40039:   const dimension_type n_rows = x.matrix.num_rows();
-40039:   const row_iterator x_m_begin = x.matrix.row_begin();
-40039:   const row_iterator y_m_begin = y.matrix.row_begin();
-40039:   const row_iterator ub_m_begin = ub.matrix.row_begin();
-40039: 
-40039:   for (dimension_type i = n_rows; i-- > 0; ) {
-40039:     const Bit_Row& x_non_red_i = x_non_red[i];
-40039:     using namespace Implementation::Octagonal_Shapes;
-40039:     const dimension_type ci = coherent_index(i);
-40039:     const dimension_type row_size_i = OR_Matrix<N>::row_size(i);
-40039:     row_reference x_i = *(x_m_begin + i);
-40039:     row_reference y_i = *(y_m_begin + i);
-40039:     row_reference ub_i = *(ub_m_begin + i);
-40039:     const N& ub_i_ci = ub_i[ci];
-40039:     for (dimension_type j = row_size_i; j-- > 0; ) {
-40039: 
-40039:       if (!x_non_red_i[j]) {
-40039:         continue;
-40039:       }
-40039:       const N& x_i_j = x_i[j];
-40039: 
-40039:       if (x_i_j >= y_i[j]) {
-40039:         continue;
-40039:       }
-40039: 
-40039:       const dimension_type cj = coherent_index(j);
-40039:       const dimension_type row_size_cj = OR_Matrix<N>::row_size(cj);
-40039:       row_reference ub_cj = *(ub_m_begin + cj);
-40039:       const N& ub_cj_j = ub_cj[j];
-40039:       for (dimension_type k = 0; k < n_rows; ++k) {
-40039:         const Bit_Row& y_non_red_k = y_non_red[k];
-40039:         const dimension_type ck = coherent_index(k);
-40039:         const dimension_type row_size_k = OR_Matrix<N>::row_size(k);
-40039:         row_reference x_k = *(x_m_begin + k);
-40039:         row_reference y_k = *(y_m_begin + k);
-40039:         row_reference ub_k = *(ub_m_begin + k);
-40039:         const N& ub_k_ck = ub_k[ck];
-40039: 
-40039: 
-40039: 
-40039:         const N& ub_k_j
-40039:           = (k == j)
-40039:           ? temp_zero
-40039:           : ((j < row_size_k) ? ub_k[j] : ub_cj[ck]);
-40039:         const N& ub_i_ck
-40039:           = (i == ck)
-40039:           ? temp_zero
-40039:           : ((ck < row_size_i) ? ub_i[ck] : ub_k[ci]);
-40039: 
-40039:         for (dimension_type ell = row_size_k; ell-- > 0; ) {
-40039: 
-40039:           if (!y_non_red_k[ell]) {
-40039:             continue;
-40039:           }
-40039:           const N& y_k_ell = y_k[ell];
-40039: 
-40039:           if (y_k_ell >= x_k[ell]) {
-40039:             continue;
-40039:           }
-40039:           const dimension_type cell = coherent_index(ell);
-40039:           row_reference ub_cell = *(ub_m_begin + cell);
-40039:           const N& ub_i_ell
-40039:             = (i == ell)
-40039:             ? temp_zero
-40039:             : ((ell < row_size_i) ? ub_i[ell] : ub_cell[ci]);
-40039:           const N& ub_cj_ell
-40039:             = (cj == ell)
-40039:             ? temp_zero
-40039:             : ((ell < row_size_cj) ? ub_cj[ell] : ub_cell[j]);
-40039: 
-40039:           add_assign_r(lhs, x_i_j, y_k_ell, ROUND_UP);
-40039:           add_assign_r(rhs, ub_i_ell, ub_k_j, ROUND_UP);
-40039:           if (lhs >= rhs) {
-40039:             continue;
-40039:           }
-40039: 
-40039:           add_assign_r(rhs, ub_i_ck, ub_cj_ell, ROUND_UP);
-40039:           if (lhs >= rhs) {
-40039:             continue;
-40039:           }
-40039: 
-40039:           assign_r(lhs_copy, lhs, ROUND_NOT_NEEDED);
-40039:           add_assign_r(lhs, lhs_copy, x_i_j, ROUND_UP);
-40039:           add_assign_r(rhs, ub_i_ell, ub_i_ck, ROUND_UP);
-40039:           add_assign_r(rhs, rhs, ub_cj_j, ROUND_UP);
-40039:           if (lhs >= rhs) {
-40039:             continue;
-40039:           }
-40039: 
-40039:           add_assign_r(rhs, ub_k_j, ub_cj_ell, ROUND_UP);
-40039:           add_assign_r(rhs, rhs, ub_i_ci, ROUND_UP);
-40039:           if (lhs >= rhs) {
-40039:             continue;
-40039:           }
-40039: 
-40039:           add_assign_r(lhs, lhs_copy, y_k_ell, ROUND_UP);
-40039:           add_assign_r(rhs, ub_i_ell, ub_cj_ell, ROUND_UP);
-40039:           add_assign_r(rhs, rhs, ub_k_ck, ROUND_UP);
-40039:           if (lhs >= rhs) {
-40039:             continue;
-40039:           }
-40039: 
-40039:           add_assign_r(rhs, ub_k_j, ub_i_ck, ROUND_UP);
-40039:           add_assign_r(rhs, rhs, ub_cell[ell], ROUND_UP);
-40039:           if (lhs < rhs) {
-40039: 
-40039: 
-40039:             return false;
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   m_swap(ub);
-40039:   ((void) 0);
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: Octagonal_Shape<T>
-40039: ::integer_upper_bound_assign_if_exact(const Octagonal_Shape& y) {
-40039:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_7801 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(std::numeric_limits<T>::is_integer)>) }
-40039: 
-40039: 
-40039:                                                           ;
-40039: 
-40039:   const Octagonal_Shape& x = *this;
-40039:   const dimension_type x_space_dim = x.space_dimension();
-40039: 
-40039:   if (x_space_dim != y.space_dimension()) {
-40039:     throw_dimension_incompatible("integer_upper_bound_assign_if_exact(y)", y);
-40039:   }
-40039: 
-40039:   if (x_space_dim == 0) {
-40039:     upper_bound_assign(y);
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (x.marked_empty()) {
-40039:     *this = y;
-40039:     tight_closure_assign();
-40039:     return true;
-40039:   }
-40039:   else if (y.marked_empty()) {
-40039:     tight_closure_assign();
-40039:     return true;
-40039:   }
-40039:   else if (x.is_empty() || x.tight_coherence_would_make_empty()) {
-40039:     *this = y;
-40039:     tight_closure_assign();
-40039:     return true;
-40039:   }
-40039:   else if (y.is_empty() || y.tight_coherence_would_make_empty()) {
-40039:     tight_closure_assign();
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039: 
-40039:   Octagonal_Shape<T> tx(x);
-40039:   tx.tight_closure_assign();
-40039:   Octagonal_Shape<T> ty(y);
-40039:   ty.tight_closure_assign();
-40039:   Octagonal_Shape<T> ub(tx);
-40039:   ub.upper_bound_assign(ty);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   std::vector<Bit_Row> tx_non_red;
-40039:   tx.non_redundant_matrix_entries(tx_non_red);
-40039:   std::vector<Bit_Row> ty_non_red;
-40039:   ty.non_redundant_matrix_entries(ty_non_red);
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_lhs_i_j; N& lhs_i_j = holder_lhs_i_j.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_lhs_k_ell; N& lhs_k_ell = holder_lhs_k_ell.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_lhs; N& lhs = holder_lhs.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_lhs_copy; N& lhs_copy = holder_lhs_copy.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_rhs; N& rhs = holder_rhs.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_temp_zero; N& temp_zero = holder_temp_zero.item();
-40039:   assign_r(temp_zero, 0, ROUND_NOT_NEEDED);
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_temp_one; N& temp_one = holder_temp_one.item();
-40039:   assign_r(temp_one, 1, ROUND_NOT_NEEDED);
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_temp_two; N& temp_two = holder_temp_two.item();
-40039:   assign_r(temp_two, 2, ROUND_NOT_NEEDED);
-40039: 
-40039:   typedef typename OR_Matrix<N>::const_row_iterator row_iterator;
-40039:   typedef typename OR_Matrix<N>::const_row_reference_type row_reference;
-40039:   const dimension_type n_rows = tx.matrix.num_rows();
-40039:   const row_iterator tx_m_begin = tx.matrix.row_begin();
-40039:   const row_iterator ty_m_begin = ty.matrix.row_begin();
-40039:   const row_iterator ub_m_begin = ub.matrix.row_begin();
-40039: 
-40039:   for (dimension_type i = n_rows; i-- > 0; ) {
-40039:     const Bit_Row& tx_non_red_i = tx_non_red[i];
-40039:     using namespace Implementation::Octagonal_Shapes;
-40039:     const dimension_type ci = coherent_index(i);
-40039:     const dimension_type row_size_i = OR_Matrix<N>::row_size(i);
-40039:     row_reference tx_i = *(tx_m_begin + i);
-40039:     row_reference ty_i = *(ty_m_begin + i);
-40039:     row_reference ub_i = *(ub_m_begin + i);
-40039:     const N& ub_i_ci = ub_i[ci];
-40039:     for (dimension_type j = row_size_i; j-- > 0; ) {
-40039: 
-40039:       if (!tx_non_red_i[j]) {
-40039:         continue;
-40039:       }
-40039:       const N& tx_i_j = tx_i[j];
-40039:       const dimension_type cj = coherent_index(j);
-40039:       const N& eps_i_j = (i == cj) ? temp_two : temp_one;
-40039: 
-40039:       add_assign_r(lhs_i_j, tx_i_j, eps_i_j, ROUND_NOT_NEEDED);
-40039:       if (lhs_i_j > ty_i[j]) {
-40039:         continue;
-40039:       }
-40039:       const dimension_type row_size_cj = OR_Matrix<N>::row_size(cj);
-40039:       row_reference ub_cj = *(ub_m_begin + cj);
-40039:       const N& ub_cj_j = ub_cj[j];
-40039:       for (dimension_type k = 0; k < n_rows; ++k) {
-40039:         const Bit_Row& ty_non_red_k = ty_non_red[k];
-40039:         const dimension_type ck = coherent_index(k);
-40039:         const dimension_type row_size_k = OR_Matrix<N>::row_size(k);
-40039:         row_reference tx_k = *(tx_m_begin + k);
-40039:         row_reference ty_k = *(ty_m_begin + k);
-40039:         row_reference ub_k = *(ub_m_begin + k);
-40039:         const N& ub_k_ck = ub_k[ck];
-40039: 
-40039: 
-40039: 
-40039:         const N& ub_k_j
-40039:           = (k == j)
-40039:           ? temp_zero
-40039:           : ((j < row_size_k) ? ub_k[j] : ub_cj[ck]);
-40039:         const N& ub_i_ck
-40039:           = (i == ck)
-40039:           ? temp_zero
-40039:           : ((ck < row_size_i) ? ub_i[ck] : ub_k[ci]);
-40039: 
-40039:         for (dimension_type ell = row_size_k; ell-- > 0; ) {
-40039: 
-40039:           if (!ty_non_red_k[ell]) {
-40039:             continue;
-40039:           }
-40039:           const N& ty_k_ell = ty_k[ell];
-40039:           const dimension_type cell = coherent_index(ell);
-40039:           const N& eps_k_ell = (k == cell) ? temp_two : temp_one;
-40039: 
-40039:           add_assign_r(lhs_k_ell, ty_k_ell, eps_k_ell, ROUND_NOT_NEEDED);
-40039:           if (lhs_k_ell > tx_k[ell]) {
-40039:             continue;
-40039:           }
-40039:           row_reference ub_cell = *(ub_m_begin + cell);
-40039:           const N& ub_i_ell
-40039:             = (i == ell)
-40039:             ? temp_zero
-40039:             : ((ell < row_size_i) ? ub_i[ell] : ub_cell[ci]);
-40039:           const N& ub_cj_ell
-40039:             = (cj == ell)
-40039:             ? temp_zero
-40039:             : ((ell < row_size_cj) ? ub_cj[ell] : ub_cell[j]);
-40039: 
-40039:           add_assign_r(lhs, lhs_i_j, lhs_k_ell, ROUND_NOT_NEEDED);
-40039:           add_assign_r(rhs, ub_i_ell, ub_k_j, ROUND_NOT_NEEDED);
-40039:           if (lhs > rhs) {
-40039:             continue;
-40039:           }
-40039: 
-40039:           add_assign_r(rhs, ub_i_ck, ub_cj_ell, ROUND_NOT_NEEDED);
-40039:           if (lhs > rhs) {
-40039:             continue;
-40039:           }
-40039: 
-40039:           assign_r(lhs_copy, lhs, ROUND_NOT_NEEDED);
-40039:           add_assign_r(lhs, lhs, lhs_i_j, ROUND_NOT_NEEDED);
-40039:           add_assign_r(rhs, ub_i_ell, ub_i_ck, ROUND_NOT_NEEDED);
-40039:           add_assign_r(rhs, rhs, ub_cj_j, ROUND_NOT_NEEDED);
-40039:           if (lhs > rhs) {
-40039:             continue;
-40039:           }
-40039: 
-40039:           add_assign_r(rhs, ub_k_j, ub_cj_ell, ROUND_NOT_NEEDED);
-40039:           add_assign_r(rhs, rhs, ub_i_ci, ROUND_NOT_NEEDED);
-40039:           if (lhs > rhs) {
-40039:             continue;
-40039:           }
-40039: 
-40039:           add_assign_r(lhs, lhs_copy, lhs_k_ell, ROUND_NOT_NEEDED);
-40039:           add_assign_r(rhs, ub_i_ell, ub_cj_ell, ROUND_NOT_NEEDED);
-40039:           add_assign_r(rhs, rhs, ub_k_ck, ROUND_NOT_NEEDED);
-40039:           if (lhs > rhs) {
-40039:             continue;
-40039:           }
-40039: 
-40039:           add_assign_r(rhs, ub_k_j, ub_i_ck, ROUND_NOT_NEEDED);
-40039:           add_assign_r(rhs, rhs, ub_cell[ell], ROUND_NOT_NEEDED);
-40039:           if (lhs <= rhs) {
-40039: 
-40039: 
-40039:             return false;
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   m_swap(ub);
-40039:   ((void) 0);
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::drop_some_non_integer_points(Complexity_Class) {
-40039:   if (std::numeric_limits<T>::is_integer) {
-40039:     return;
-40039:   }
-40039: 
-40039:   strong_closure_assign();
-40039:   if (space_dim == 0 || marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   for (typename OR_Matrix<N>::element_iterator i = matrix.element_begin(),
-40039:          i_end = matrix.element_end(); i != i_end; ++i) {
-40039:     drop_some_non_integer_points_helper(*i);
-40039:   }
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_temp_one; N& temp_one = holder_temp_one.item();
-40039:   assign_r(temp_one, 1, ROUND_NOT_NEEDED);
-40039:   for (dimension_type i = 0; i < 2*space_dim; i += 2) {
-40039:     const dimension_type ci = i + 1;
-40039:     N& mat_i_ci = matrix[i][ci];
-40039:     if (!is_plus_infinity(mat_i_ci) && !is_even(mat_i_ci)) {
-40039:       sub_assign_r(mat_i_ci, mat_i_ci, temp_one, ROUND_UP);
-40039:       reset_strongly_closed();
-40039:     }
-40039:     N& mat_ci_i = matrix[ci][i];
-40039:     if (!is_plus_infinity(mat_ci_i) && !is_even(mat_ci_i)) {
-40039:       sub_assign_r(mat_ci_i, mat_ci_i, temp_one, ROUND_UP);
-40039:       reset_strongly_closed();
-40039:     }
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>
-40039: ::drop_some_non_integer_points(const Variables_Set& vars,
-40039:                                Complexity_Class) {
-40039: 
-40039:   const dimension_type min_space_dim = vars.space_dimension();
-40039:   if (space_dimension() < min_space_dim) {
-40039:     throw_dimension_incompatible("drop_some_non_integer_points(vs, cmpl)",
-40039:                                  min_space_dim);
-40039:   }
-40039: 
-40039:   if (std::numeric_limits<T>::is_integer || min_space_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039:   strong_closure_assign();
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_temp_one; N& temp_one = holder_temp_one.item();
-40039:   assign_r(temp_one, 1, ROUND_NOT_NEEDED);
-40039: 
-40039:   const Variables_Set::const_iterator v_begin = vars.begin();
-40039:   const Variables_Set::const_iterator v_end = vars.end();
-40039:   ((void) 0);
-40039:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
-40039:   for (Variables_Set::const_iterator v_i = v_begin; v_i != v_end; ++v_i) {
-40039:     const dimension_type i = 2 * (*v_i);
-40039:     const dimension_type ci = i + 1;
-40039:     row_reference m_i = matrix[i];
-40039:     row_reference m_ci = matrix[ci];
-40039: 
-40039: 
-40039:     N& m_i_ci = m_i[ci];
-40039:     if (!is_plus_infinity(m_i_ci)) {
-40039:       drop_some_non_integer_points_helper(m_i_ci);
-40039:       if (!is_even(m_i_ci)) {
-40039:         sub_assign_r(m_i_ci, m_i_ci, temp_one, ROUND_UP);
-40039:         reset_strongly_closed();
-40039:       }
-40039:     }
-40039:     N& m_ci_i = m_ci[i];
-40039:     if (!is_plus_infinity(m_ci_i)) {
-40039:       drop_some_non_integer_points_helper(m_ci_i);
-40039:       if (!is_even(m_ci_i)) {
-40039:         sub_assign_r(m_ci_i, m_ci_i, temp_one, ROUND_UP);
-40039:         reset_strongly_closed();
-40039:       }
-40039:     }
-40039: 
-40039: 
-40039:     for (Variables_Set::const_iterator v_j = v_begin; v_j != v_i; ++v_j) {
-40039:       const dimension_type j = 2 * (*v_j);
-40039:       const dimension_type cj = j + 1;
-40039:       drop_some_non_integer_points_helper(m_i[j]);
-40039:       drop_some_non_integer_points_helper(m_i[cj]);
-40039:       drop_some_non_integer_points_helper(m_ci[j]);
-40039:       drop_some_non_integer_points_helper(m_ci[cj]);
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: void
-40039: Octagonal_Shape<T>
-40039: ::export_interval_constraints(U& dest) const {
-40039:   if (space_dim > dest.space_dimension()) {
-40039:     throw std::invalid_argument(
-40039:                "Octagonal_Shape<T>::export_interval_constraints");
-40039:   }
-40039: 
-40039:   strong_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     dest.set_empty();
-40039:     return;
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_lb; N& lb = holder_lb.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_ub; N& ub = holder_ub.item();
-40039:   for (dimension_type i = space_dim; i-- > 0; ) {
-40039:     const dimension_type ii = 2*i;
-40039:     const dimension_type cii = ii + 1;
-40039: 
-40039: 
-40039:     const N& twice_ub = matrix[cii][ii];
-40039:     if (!is_plus_infinity(twice_ub)) {
-40039:       assign_r(ub, twice_ub, ROUND_NOT_NEEDED);
-40039:       div_2exp_assign_r(ub, ub, 1, ROUND_UP);
-40039: 
-40039:       if (!dest.restrict_upper(i, ub.raw_value())) {
-40039:         return;
-40039:       }
-40039:     }
-40039: 
-40039: 
-40039:     const N& twice_lb = matrix[ii][cii];
-40039:     if (!is_plus_infinity(twice_lb)) {
-40039:       assign_r(lb, twice_lb, ROUND_NOT_NEEDED);
-40039:       neg_assign_r(lb, lb, ROUND_NOT_NEEDED);
-40039:       div_2exp_assign_r(lb, lb, 1, ROUND_DOWN);
-40039: 
-40039:       if (!dest.restrict_lower(i, lb.raw_value())) {
-40039:         return;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: std::ostream&
-40039: IO_Operators::operator<<(std::ostream& s, const Octagonal_Shape<T>& oct) {
-40039: 
-40039:   if (oct.marked_empty()) {
-40039:     s << "false";
-40039:     return s;
-40039:   }
-40039:   if (oct.is_universe()) {
-40039:     s << "true";
-40039:     return s;
-40039:   }
-40039: 
-40039:   typedef typename Octagonal_Shape<T>::coefficient_type N;
-40039:   typedef typename OR_Matrix<N>::const_row_iterator row_iterator;
-40039:   typedef typename OR_Matrix<N>::const_row_reference_type row_reference;
-40039: 
-40039: 
-40039:   bool first = true;
-40039: 
-40039:   row_iterator m_begin = oct.matrix.row_begin();
-40039:   row_iterator m_end = oct.matrix.row_end();
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_negation; N& negation = holder_negation.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_half; N& half = holder_half.item();
-40039: 
-40039: 
-40039:   for (row_iterator i_iter = m_begin; i_iter != m_end; ) {
-40039:     const dimension_type i = i_iter.index();
-40039:     const Variable v_i(i/2);
-40039:     const N& c_i_ii = (*i_iter)[i + 1];
-40039:     ++i_iter;
-40039:     const N& c_ii_i = (*i_iter)[i];
-40039:     ++i_iter;
-40039: 
-40039:     if (is_additive_inverse(c_i_ii, c_ii_i)) {
-40039: 
-40039:       ((void) 0);
-40039:       if (first) {
-40039:         first = false;
-40039:       }
-40039:       else {
-40039:         s << ", ";
-40039:       }
-40039: 
-40039: 
-40039:       if (div_2exp_assign_r(half, c_ii_i, 1,
-40039:                             ROUND_UP | ROUND_STRICT_RELATION)
-40039:           == V_EQ) {
-40039:         s << v_i << " = " << half;
-40039:       }
-40039:       else {
-40039:         s << "2*" << v_i << " = " << c_ii_i;
-40039:       }
-40039:     }
-40039:     else {
-40039: 
-40039:       if (!is_plus_infinity(c_i_ii)) {
-40039:         if (first) {
-40039:           first = false;
-40039:         }
-40039:         else {
-40039:           s << ", ";
-40039:         }
-40039:         neg_assign_r(negation, c_i_ii, ROUND_NOT_NEEDED);
-40039: 
-40039: 
-40039:         if (div_2exp_assign_r(half, negation, 1,
-40039:                               ROUND_UP | ROUND_STRICT_RELATION)
-40039:             == V_EQ) {
-40039:           s << v_i << " >= " << half;
-40039:         }
-40039:         else {
-40039:           s << "2*" << v_i << " >= " << negation;
-40039:         }
-40039:       }
-40039:       if (!is_plus_infinity(c_ii_i)) {
-40039:         if (first) {
-40039:           first = false;
-40039:         }
-40039:         else {
-40039:           s << ", ";
-40039:         }
-40039: 
-40039: 
-40039:         if (div_2exp_assign_r(half, c_ii_i, 1,
-40039:                               ROUND_UP | ROUND_STRICT_RELATION)
-40039:             == V_EQ) {
-40039:           s << v_i << " <= " << half;
-40039:         }
-40039:         else {
-40039:           s << "2*" << v_i << " <= " << c_ii_i;
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   for (row_iterator i_iter = m_begin; i_iter != m_end; ) {
-40039:     const dimension_type i = i_iter.index();
-40039:     const Variable v_i(i/2);
-40039:     row_reference r_i = *i_iter;
-40039:     ++i_iter;
-40039:     row_reference r_ii = *i_iter;
-40039:     ++i_iter;
-40039: 
-40039:     for (dimension_type j = 0; j < i; j += 2) {
-40039:       const Variable v_j(j/2);
-40039: 
-40039:       const N& c_ii_jj = r_ii[j + 1];
-40039:       const N& c_i_j = r_i[j];
-40039: 
-40039:       if (is_additive_inverse(c_ii_jj, c_i_j)) {
-40039: 
-40039:         ((void) 0);
-40039:         if (first) {
-40039:           first = false;
-40039:         }
-40039:         else {
-40039:           s << ", ";
-40039:         }
-40039:         if (sgn(c_i_j) >= 0) {
-40039:           s << v_j << " - " << v_i << " = " << c_i_j;
-40039:         }
-40039:         else {
-40039:           s << v_i << " - " << v_j << " = " << c_ii_jj;
-40039:         }
-40039:       }
-40039:       else {
-40039: 
-40039:         if (!is_plus_infinity(c_i_j)) {
-40039:           if (first) {
-40039:             first = false;
-40039:           }
-40039:           else {
-40039:             s << ", ";
-40039:           }
-40039:           if (sgn(c_i_j) >= 0) {
-40039:             s << v_j << " - " << v_i << " <= " << c_i_j;
-40039:           }
-40039:           else {
-40039:             neg_assign_r(negation, c_i_j, ROUND_DOWN);
-40039:             s << v_i << " - " << v_j << " >= " << negation;
-40039:           }
-40039:         }
-40039:         if (!is_plus_infinity(c_ii_jj)) {
-40039:           if (first) {
-40039:             first = false;
-40039:           }
-40039:           else {
-40039:             s << ", ";
-40039:           }
-40039:           if (sgn(c_ii_jj) >= 0) {
-40039:             s << v_i << " - " << v_j << " <= " << c_ii_jj;
-40039:           }
-40039:           else {
-40039:             neg_assign_r(negation, c_ii_jj, ROUND_DOWN);
-40039:             s << v_j << " - " << v_i << " >= " << negation;
-40039:           }
-40039:         }
-40039:       }
-40039: 
-40039:       const N& c_i_jj = r_i[j + 1];
-40039:       const N& c_ii_j = r_ii[j];
-40039: 
-40039:       if (is_additive_inverse(c_i_jj, c_ii_j)) {
-40039: 
-40039:         ((void) 0);
-40039:         if (first) {
-40039:           first = false;
-40039:         }
-40039:         else {
-40039:           s << ", ";
-40039:         }
-40039:         s << v_j << " + " << v_i << " = " << c_ii_j;
-40039:       }
-40039:       else {
-40039: 
-40039:         if (!is_plus_infinity(c_i_jj)) {
-40039:           if (first) {
-40039:             first = false;
-40039:           }
-40039:           else {
-40039:             s << ", ";
-40039:           }
-40039:           neg_assign_r(negation, c_i_jj, ROUND_DOWN);
-40039:           s << v_j << " + " << v_i << " >= " << negation;
-40039:         }
-40039:         if (!is_plus_infinity(c_ii_j)) {
-40039:           if (first) {
-40039:             first = false;
-40039:           }
-40039:           else {
-40039:             s << ", ";
-40039:           }
-40039:           s << v_j << " + " << v_i << " <= " << c_ii_j;
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039:   return s;
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::ascii_dump(std::ostream& s) const {
-40039:   s << "space_dim "
-40039:     << space_dim
-40039:     << "\n";
-40039:   status.ascii_dump(s);
-40039:   s << "\n";
-40039:   matrix.ascii_dump(s);
-40039: }
-40039: 
-40039: template <typename T> void Octagonal_Shape<T>::ascii_dump() const { ascii_dump(std::cerr); } template <typename T> void Octagonal_Shape<T>::print() const { using IO_Operators::operator<<; std::cerr << *this; }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: Octagonal_Shape<T>::ascii_load(std::istream& s) {
-40039:   std::string str;
-40039: 
-40039:   if (!(s >> str) || str != "space_dim") {
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (!(s >> space_dim)) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (!status.ascii_load(s)) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (!matrix.ascii_load(s)) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename T>
-40039: memory_size_type
-40039: Octagonal_Shape<T>::external_memory_in_bytes() const {
-40039:   return matrix.external_memory_in_bytes();
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: Octagonal_Shape<T>::OK() const {
-40039: 
-40039:   if (!matrix.OK()) {
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039:   if (!status.OK()) {
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   for (typename OR_Matrix<N>::const_row_iterator i = matrix.row_begin(),
-40039:          matrix_row_end = matrix.row_end(); i != matrix_row_end; ++i) {
-40039:     typename OR_Matrix<N>::const_row_reference_type x_i = *i;
-40039:     for (dimension_type j = i.row_size(); j-- > 0; ) {
-40039:       if (is_minus_infinity(x_i[j])) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:         return false;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   for (typename OR_Matrix<N>::const_row_iterator i = matrix.row_begin(),
-40039:          m_end = matrix.row_end(); i != m_end; ++i) {
-40039:     typename OR_Matrix<N>::const_row_reference_type r = *i;
-40039:     const N& m_i_i = r[i.index()];
-40039:     if (!is_plus_infinity(m_i_i)) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       return false;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (std::numeric_limits<coefficient_type_base>::is_exact) {
-40039: 
-40039: 
-40039:     if (marked_strongly_closed()) {
-40039:       Octagonal_Shape x = *this;
-40039:       x.reset_strongly_closed();
-40039:       x.strong_closure_assign();
-40039:       if (x.matrix != matrix) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:         return false;
-40039:       }
-40039:     }
-40039: 
-40039: 
-40039:     if (marked_strongly_closed()) {
-40039:       if (!is_strong_coherent()) {
-40039: 
-40039: 
-40039: 
-40039:         return false;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   return true;
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>
-40039: ::throw_dimension_incompatible(const char* method,
-40039:                                const Octagonal_Shape& y) const {
-40039:   std::ostringstream s;
-40039:   s << "PPL::Octagonal_Shape::" << method << ":\n"
-40039:     << "this->space_dimension() == " << space_dimension()
-40039:     << ", y->space_dimension() == " << y.space_dimension() << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>
-40039: ::throw_dimension_incompatible(const char* method,
-40039:                                dimension_type required_dim) const {
-40039:   std::ostringstream s;
-40039:   s << "PPL::Octagonal_Shape::" << method << ":\n"
-40039:     << "this->space_dimension() == " << space_dimension()
-40039:     << ", required dimension == " << required_dim << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::throw_dimension_incompatible(const char* method,
-40039:                                                  const Constraint& c) const {
-40039:   std::ostringstream s;
-40039:   s << "PPL::Octagonal_Shape::" << method << ":\n"
-40039:     << "this->space_dimension() == " << space_dimension()
-40039:     << ", c->space_dimension == " << c.space_dimension() << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::throw_dimension_incompatible(const char* method,
-40039:                                                  const Congruence& cg) const {
-40039:   std::ostringstream s;
-40039:   s << "PPL::Octagonal_Shape::" << method << ":\n"
-40039:     << "this->space_dimension() == " << space_dimension()
-40039:     << ", cg->space_dimension == " << cg.space_dimension() << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::throw_dimension_incompatible(const char* method,
-40039:                                                  const Generator& g) const {
-40039:   std::ostringstream s;
-40039:   s << "PPL::Octagonal_Shape::" << method << ":\n"
-40039:     << "this->space_dimension() == " << space_dimension()
-40039:     << ", g->space_dimension == " << g.space_dimension() << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::throw_constraint_incompatible(const char* method) {
-40039:   std::ostringstream s;
-40039:   s << "PPL::Octagonal_Shape::" << method << ":\n"
-40039:     << "the constraint is incompatible.";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::throw_expression_too_complex(const char* method,
-40039:                                                  const Linear_Expression& le) {
-40039:   using namespace IO_Operators;
-40039:   std::ostringstream s;
-40039:   s << "PPL::Octagonal_Shape::" << method << ":\n"
-40039:     << le << " is too complex.";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>
-40039: ::throw_dimension_incompatible(const char* method,
-40039:                                const char* le_name,
-40039:                                const Linear_Expression& le) const {
-40039:   std::ostringstream s;
-40039:   s << "PPL::Octagonal_Shape::" << method << ":\n"
-40039:     << "this->space_dimension() == " << space_dimension()
-40039:     << ", " << le_name << "->space_dimension() == "
-40039:     << le.space_dimension() << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename C>
-40039: void
-40039: Octagonal_Shape<T>
-40039: ::throw_dimension_incompatible(const char* method,
-40039:                                const char* lf_name,
-40039:                                const Linear_Form<C>& lf) const {
-40039:   std::ostringstream s;
-40039:   s << "PPL::Octagonal_Shape::" << method << ":\n"
-40039:     << "this->space_dimension() == " << space_dimension()
-40039:     << ", " << lf_name << "->space_dimension() == "
-40039:     << lf.space_dimension() << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: Octagonal_Shape<T>::throw_invalid_argument(const char* method,
-40039:                                            const char* reason) {
-40039:   std::ostringstream s;
-40039:   s << "PPL::Octagonal_Shape::" << method << ":\n"
-40039:     << reason << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: }
-40039: # 2329 "../../src/Octagonal_Shape_defs.hh" 2
-40039: # 32 "../../src/BD_Shape_inlines.hh" 2
-40039: # 42 "../../src/BD_Shape_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: BD_Shape<T>::max_space_dimension() {
-40039: 
-40039: 
-40039:   return std::min(DB_Matrix<N>::max_num_rows() - 1,
-40039:                   DB_Matrix<N>::max_num_columns() - 1);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::marked_zero_dim_univ() const {
-40039:   return status.test_zero_dim_univ();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::marked_empty() const {
-40039:   return status.test_empty();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::marked_shortest_path_closed() const {
-40039:   return status.test_shortest_path_closed();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::marked_shortest_path_reduced() const {
-40039:   return status.test_shortest_path_reduced();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::set_zero_dim_univ() {
-40039:   status.set_zero_dim_univ();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::set_empty() {
-40039:   status.set_empty();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::set_shortest_path_closed() {
-40039:   status.set_shortest_path_closed();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::set_shortest_path_reduced() {
-40039:   status.set_shortest_path_reduced();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::reset_shortest_path_closed() {
-40039:   status.reset_shortest_path_closed();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::reset_shortest_path_reduced() {
-40039:   status.reset_shortest_path_reduced();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: BD_Shape<T>::BD_Shape(const dimension_type num_dimensions,
-40039:                       const Degenerate_Element kind)
-40039:   : dbm(num_dimensions + 1), status(), redundancy_dbm() {
-40039:   if (kind == EMPTY) {
-40039:     set_empty();
-40039:   }
-40039:   else {
-40039:     if (num_dimensions > 0) {
-40039: 
-40039:       set_shortest_path_closed();
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: BD_Shape<T>::BD_Shape(const BD_Shape& y, Complexity_Class)
-40039:   : dbm(y.dbm), status(y.status), redundancy_dbm() {
-40039:   if (y.marked_shortest_path_reduced()) {
-40039:     redundancy_dbm = y.redundancy_dbm;
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline
-40039: BD_Shape<T>::BD_Shape(const BD_Shape<U>& y, Complexity_Class)
-40039: 
-40039: 
-40039:   : dbm((y.shortest_path_closure_assign(), y.dbm)),
-40039:     status(),
-40039:     redundancy_dbm() {
-40039: 
-40039:   if (y.marked_empty()) {
-40039:     set_empty();
-40039:   }
-40039:   else if (y.marked_zero_dim_univ()) {
-40039:     set_zero_dim_univ();
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline Congruence_System
-40039: BD_Shape<T>::congruences() const {
-40039:   return minimized_congruences();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::add_constraints(const Constraint_System& cs) {
-40039:   for (Constraint_System::const_iterator i = cs.begin(),
-40039:          cs_end = cs.end(); i != cs_end; ++i) {
-40039:     add_constraint(*i);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::add_recycled_constraints(Constraint_System& cs) {
-40039:   add_constraints(cs);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::add_congruences(const Congruence_System& cgs) {
-40039:   for (Congruence_System::const_iterator i = cgs.begin(),
-40039:          cgs_end = cgs.end(); i != cgs_end; ++i) {
-40039:     add_congruence(*i);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::add_recycled_congruences(Congruence_System& cgs) {
-40039:   add_congruences(cgs);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::refine_with_constraint(const Constraint& c) {
-40039:   const dimension_type c_space_dim = c.space_dimension();
-40039: 
-40039:   if (c_space_dim > space_dimension()) {
-40039:     throw_dimension_incompatible("refine_with_constraint(c)", c);
-40039:   }
-40039: 
-40039:   if (!marked_empty()) {
-40039:     refine_no_check(c);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::refine_with_constraints(const Constraint_System& cs) {
-40039: 
-40039:   if (cs.space_dimension() > space_dimension()) {
-40039:     throw_invalid_argument("refine_with_constraints(cs)",
-40039:                            "cs and *this are space-dimension incompatible");
-40039:   }
-40039: 
-40039:   for (Constraint_System::const_iterator i = cs.begin(),
-40039:          cs_end = cs.end(); !marked_empty() && i != cs_end; ++i) {
-40039:     refine_no_check(*i);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::refine_with_congruence(const Congruence& cg) {
-40039:   const dimension_type cg_space_dim = cg.space_dimension();
-40039: 
-40039:   if (cg_space_dim > space_dimension()) {
-40039:     throw_dimension_incompatible("refine_with_congruence(cg)", cg);
-40039:   }
-40039: 
-40039:   if (!marked_empty()) {
-40039:     refine_no_check(cg);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::refine_with_congruences(const Congruence_System& cgs) {
-40039: 
-40039:   if (cgs.space_dimension() > space_dimension()) {
-40039:     throw_invalid_argument("refine_with_congruences(cgs)",
-40039:                            "cgs and *this are space-dimension incompatible");
-40039:   }
-40039: 
-40039:   for (Congruence_System::const_iterator i = cgs.begin(),
-40039:          cgs_end = cgs.end(); !marked_empty() && i != cgs_end; ++i) {
-40039:     refine_no_check(*i);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::refine_no_check(const Congruence& cg) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039:   if (cg.is_proper_congruence()) {
-40039:     if (cg.is_inconsistent()) {
-40039:       set_empty();
-40039:     }
-40039: 
-40039:     return;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   Constraint c(cg);
-40039:   refine_no_check(c);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::can_recycle_constraint_systems() {
-40039:   return false;
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::can_recycle_congruence_systems() {
-40039:   return false;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: BD_Shape<T>::BD_Shape(const Constraint_System& cs)
-40039:   : dbm(cs.space_dimension() + 1), status(), redundancy_dbm() {
-40039:   if (cs.space_dimension() > 0) {
-40039: 
-40039:     set_shortest_path_closed();
-40039:   }
-40039:   add_constraints(cs);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Interval>
-40039: inline
-40039: BD_Shape<T>::BD_Shape(const Box<Interval>& box,
-40039:                       Complexity_Class)
-40039:   : dbm(box.space_dimension() + 1), status(), redundancy_dbm() {
-40039: 
-40039:   if (box.is_empty()) {
-40039:     set_empty();
-40039:   }
-40039:   else if (box.space_dimension() > 0) {
-40039: 
-40039:     set_shortest_path_closed();
-40039:     refine_with_constraints(box.constraints());
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: BD_Shape<T>::BD_Shape(const Grid& grid,
-40039:                       Complexity_Class)
-40039:   : dbm(grid.space_dimension() + 1), status(), redundancy_dbm() {
-40039:   if (grid.space_dimension() > 0) {
-40039: 
-40039:     set_shortest_path_closed();
-40039:   }
-40039: 
-40039:   refine_with_congruences(grid.minimized_congruences());
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: inline
-40039: BD_Shape<T>::BD_Shape(const Octagonal_Shape<U>& os,
-40039:                       Complexity_Class)
-40039:   : dbm(os.space_dimension() + 1), status(), redundancy_dbm() {
-40039: 
-40039:   if (os.is_empty()) {
-40039:     set_empty();
-40039:   }
-40039:   else if (os.space_dimension() > 0) {
-40039: 
-40039:     set_shortest_path_closed();
-40039:     refine_with_constraints(os.constraints());
-40039: 
-40039: 
-40039: 
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline BD_Shape<T>&
-40039: BD_Shape<T>::operator=(const BD_Shape& y) {
-40039:   dbm = y.dbm;
-40039:   status = y.status;
-40039:   if (y.marked_shortest_path_reduced()) {
-40039:     redundancy_dbm = y.redundancy_dbm;
-40039:   }
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: BD_Shape<T>::~BD_Shape() {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::m_swap(BD_Shape& y) {
-40039:   using std::swap;
-40039:   swap(dbm, y.dbm);
-40039:   swap(status, y.status);
-40039:   swap(redundancy_dbm, y.redundancy_dbm);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline dimension_type
-40039: BD_Shape<T>::space_dimension() const {
-40039:   return dbm.num_rows() - 1;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::is_empty() const {
-40039:   shortest_path_closure_assign();
-40039:   return marked_empty();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::bounds_from_above(const Linear_Expression& expr) const {
-40039:   return bounds(expr, true);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::bounds_from_below(const Linear_Expression& expr) const {
-40039:   return bounds(expr, false);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::maximize(const Linear_Expression& expr,
-40039:                       Coefficient& sup_n, Coefficient& sup_d,
-40039:                       bool& maximum) const {
-40039:   return max_min(expr, true, sup_n, sup_d, maximum);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::maximize(const Linear_Expression& expr,
-40039:                       Coefficient& sup_n, Coefficient& sup_d, bool& maximum,
-40039:                       Generator& g) const {
-40039:   return max_min(expr, true, sup_n, sup_d, maximum, g);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::minimize(const Linear_Expression& expr,
-40039:                       Coefficient& inf_n, Coefficient& inf_d,
-40039:                       bool& minimum) const {
-40039:   return max_min(expr, false, inf_n, inf_d, minimum);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::minimize(const Linear_Expression& expr,
-40039:                       Coefficient& inf_n, Coefficient& inf_d, bool& minimum,
-40039:                       Generator& g) const {
-40039:   return max_min(expr, false, inf_n, inf_d, minimum, g);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::is_topologically_closed() const {
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::is_discrete() const {
-40039:   return affine_dimension() == 0;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::topological_closure_assign() {
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: operator==(const BD_Shape<T>& x, const BD_Shape<T>& y) {
-40039:   const dimension_type x_space_dim = x.space_dimension();
-40039: 
-40039:   if (x_space_dim != y.space_dimension()) {
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039:   if (x_space_dim == 0) {
-40039:     if (x.marked_empty()) {
-40039:       return y.marked_empty();
-40039:     }
-40039:     else {
-40039:       return !y.marked_empty();
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   x.shortest_path_closure_assign();
-40039:   y.shortest_path_closure_assign();
-40039: 
-40039: 
-40039: 
-40039:   if (x.marked_empty()) {
-40039:     return y.marked_empty();
-40039:   }
-40039:   if (y.marked_empty()) {
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039:   return x.dbm == y.dbm;
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: operator!=(const BD_Shape<T>& x, const BD_Shape<T>& y) {
-40039:   return !(x == y);
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename T>
-40039: inline bool
-40039: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                             const BD_Shape<T>& x,
-40039:                             const BD_Shape<T>& y,
-40039:                             const Rounding_Dir dir,
-40039:                             Temp& tmp0,
-40039:                             Temp& tmp1,
-40039:                             Temp& tmp2) {
-40039:   const dimension_type x_space_dim = x.space_dimension();
-40039: 
-40039:   if (x_space_dim != y.space_dimension()) {
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039:   if (x_space_dim == 0) {
-40039:     if (x.marked_empty() == y.marked_empty()) {
-40039:       assign_r(r, 0, ROUND_NOT_NEEDED);
-40039:     }
-40039:     else {
-40039:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     }
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   x.shortest_path_closure_assign();
-40039:   y.shortest_path_closure_assign();
-40039: 
-40039: 
-40039: 
-40039:   if (x.marked_empty() || y.marked_empty()) {
-40039:     if (x.marked_empty() == y.marked_empty()) {
-40039:       assign_r(r, 0, ROUND_NOT_NEEDED);
-40039:     }
-40039:     else {
-40039:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     }
-40039:     return true;
-40039:   }
-40039: 
-40039:   return rectilinear_distance_assign(r, x.dbm, y.dbm, dir, tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename T>
-40039: inline bool
-40039: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                             const BD_Shape<T>& x,
-40039:                             const BD_Shape<T>& y,
-40039:                             const Rounding_Dir dir) {
-40039:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
-40039:   return rectilinear_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename To, typename T>
-40039: inline bool
-40039: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                             const BD_Shape<T>& x,
-40039:                             const BD_Shape<T>& y,
-40039:                             const Rounding_Dir dir) {
-40039:   return rectilinear_distance_assign<To, To, T>(r, x, y, dir);
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename T>
-40039: inline bool
-40039: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                           const BD_Shape<T>& x,
-40039:                           const BD_Shape<T>& y,
-40039:                           const Rounding_Dir dir,
-40039:                           Temp& tmp0,
-40039:                           Temp& tmp1,
-40039:                           Temp& tmp2) {
-40039:   const dimension_type x_space_dim = x.space_dimension();
-40039: 
-40039:   if (x_space_dim != y.space_dimension()) {
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039:   if (x_space_dim == 0) {
-40039:     if (x.marked_empty() == y.marked_empty()) {
-40039:       assign_r(r, 0, ROUND_NOT_NEEDED);
-40039:     }
-40039:     else {
-40039:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     }
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   x.shortest_path_closure_assign();
-40039:   y.shortest_path_closure_assign();
-40039: 
-40039: 
-40039: 
-40039:   if (x.marked_empty() || y.marked_empty()) {
-40039:     if (x.marked_empty() == y.marked_empty()) {
-40039:       assign_r(r, 0, ROUND_NOT_NEEDED);
-40039:     }
-40039:     else {
-40039:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     }
-40039:     return true;
-40039:   }
-40039: 
-40039:   return euclidean_distance_assign(r, x.dbm, y.dbm, dir, tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename T>
-40039: inline bool
-40039: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                           const BD_Shape<T>& x,
-40039:                           const BD_Shape<T>& y,
-40039:                           const Rounding_Dir dir) {
-40039:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
-40039:   return euclidean_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename To, typename T>
-40039: inline bool
-40039: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                           const BD_Shape<T>& x,
-40039:                           const BD_Shape<T>& y,
-40039:                           const Rounding_Dir dir) {
-40039:   return euclidean_distance_assign<To, To, T>(r, x, y, dir);
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename T>
-40039: inline bool
-40039: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                            const BD_Shape<T>& x,
-40039:                            const BD_Shape<T>& y,
-40039:                            const Rounding_Dir dir,
-40039:                            Temp& tmp0,
-40039:                            Temp& tmp1,
-40039:                            Temp& tmp2) {
-40039:   const dimension_type x_space_dim = x.space_dimension();
-40039: 
-40039:   if (x_space_dim != y.space_dimension()) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (x_space_dim == 0) {
-40039:     if (x.marked_empty() == y.marked_empty()) {
-40039:       assign_r(r, 0, ROUND_NOT_NEEDED);
-40039:     }
-40039:     else {
-40039:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     }
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   x.shortest_path_closure_assign();
-40039:   y.shortest_path_closure_assign();
-40039: 
-40039: 
-40039: 
-40039:   if (x.marked_empty() || y.marked_empty()) {
-40039:     if (x.marked_empty() == y.marked_empty()) {
-40039:       assign_r(r, 0, ROUND_NOT_NEEDED);
-40039:     }
-40039:     else {
-40039:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     }
-40039:     return true;
-40039:   }
-40039: 
-40039:   return l_infinity_distance_assign(r, x.dbm, y.dbm, dir, tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename Temp, typename To, typename T>
-40039: inline bool
-40039: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                            const BD_Shape<T>& x,
-40039:                            const BD_Shape<T>& y,
-40039:                            const Rounding_Dir dir) {
-40039:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
-40039:   return l_infinity_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
-40039: }
-40039: 
-40039: 
-40039: template <typename To, typename T>
-40039: inline bool
-40039: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                            const BD_Shape<T>& x,
-40039:                            const BD_Shape<T>& y,
-40039:                            const Rounding_Dir dir) {
-40039:   return l_infinity_distance_assign<To, To, T>(r, x, y, dir);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::add_dbm_constraint(const dimension_type i,
-40039:                                 const dimension_type j,
-40039:                                 const N& k) {
-40039: 
-40039:   ((void) 0);
-40039:   N& dbm_ij = dbm[i][j];
-40039:   if (dbm_ij > k) {
-40039:     dbm_ij = k;
-40039:     if (marked_shortest_path_closed()) {
-40039:       reset_shortest_path_closed();
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::add_dbm_constraint(const dimension_type i,
-40039:                                 const dimension_type j,
-40039:                                 Coefficient_traits::const_reference numer,
-40039:                                 Coefficient_traits::const_reference denom) {
-40039: 
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_k; N& k = holder_k.item();
-40039:   div_round_up(k, numer, denom);
-40039:   add_dbm_constraint(i, j, k);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::time_elapse_assign(const BD_Shape& y) {
-40039: 
-40039:   if (space_dimension() != y.space_dimension()) {
-40039:     throw_dimension_incompatible("time_elapse_assign(y)", y);
-40039:   }
-40039: 
-40039: 
-40039:   C_Polyhedron ph_x(constraints());
-40039:   C_Polyhedron ph_y(y.constraints());
-40039:   ph_x.time_elapse_assign(ph_y);
-40039:   BD_Shape<T> x(ph_x);
-40039:   m_swap(x);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::strictly_contains(const BD_Shape& y) const {
-40039:   const BD_Shape<T>& x = *this;
-40039:   return x.contains(y) && !y.contains(x);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::upper_bound_assign_if_exact(const BD_Shape& y) {
-40039:   if (space_dimension() != y.space_dimension()) {
-40039:     throw_dimension_incompatible("upper_bound_assign_if_exact(y)", y);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   const bool integer_upper_bound = false;
-40039:   return BHZ09_upper_bound_assign_if_exact<integer_upper_bound>(y);
-40039: 
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: BD_Shape<T>::integer_upper_bound_assign_if_exact(const BD_Shape& y) {
-40039:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_769 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(std::numeric_limits<T>::is_integer)>) }
-40039: 
-40039:                                                           ;
-40039:   if (space_dimension() != y.space_dimension()) {
-40039:     throw_dimension_incompatible("integer_upper_bound_assign_if_exact(y)", y);
-40039:   }
-40039:   const bool integer_upper_bound = true;
-40039:   return BHZ09_upper_bound_assign_if_exact<integer_upper_bound>(y);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>
-40039: ::remove_higher_space_dimensions(const dimension_type new_dimension) {
-40039: 
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039:   if (new_dimension > space_dim) {
-40039:     throw_dimension_incompatible("remove_higher_space_dimensions(nd)",
-40039:                                  new_dimension);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (new_dimension == space_dim) {
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   shortest_path_closure_assign();
-40039:   dbm.resize_no_copy(new_dimension + 1);
-40039: 
-40039: 
-40039: 
-40039:   if (marked_shortest_path_reduced()) {
-40039:     reset_shortest_path_reduced();
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (new_dimension == 0 && !marked_empty()) {
-40039:     set_zero_dim_univ();
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::wrap_assign(const Variables_Set& vars,
-40039:                          Bounded_Integer_Type_Width w,
-40039:                          Bounded_Integer_Type_Representation r,
-40039:                          Bounded_Integer_Type_Overflow o,
-40039:                          const Constraint_System* cs_p,
-40039:                          unsigned complexity_threshold,
-40039:                          bool wrap_individually) {
-40039:   Implementation::wrap_assign(*this,
-40039:                               vars, w, r, o, cs_p,
-40039:                               complexity_threshold, wrap_individually,
-40039:                               "BD_Shape");
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::CC76_extrapolation_assign(const BD_Shape& y, unsigned* tp) {
-40039:   static N stop_points[] = {
-40039:     N(-2, ROUND_UP),
-40039:     N(-1, ROUND_UP),
-40039:     N( 0, ROUND_UP),
-40039:     N( 1, ROUND_UP),
-40039:     N( 2, ROUND_UP)
-40039:   };
-40039:   CC76_extrapolation_assign(y,
-40039:                             stop_points,
-40039:                             stop_points
-40039:                             + sizeof(stop_points)/sizeof(stop_points[0]),
-40039:                             tp);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::H79_widening_assign(const BD_Shape& y, unsigned* tp) {
-40039: 
-40039: 
-40039:   C_Polyhedron ph_x(constraints());
-40039:   C_Polyhedron ph_y(y.constraints());
-40039:   ph_x.H79_widening_assign(ph_y, tp);
-40039:   BD_Shape x(ph_x);
-40039:   m_swap(x);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::widening_assign(const BD_Shape& y, unsigned* tp) {
-40039:   H79_widening_assign(y, tp);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::limited_H79_extrapolation_assign(const BD_Shape& y,
-40039:                                               const Constraint_System& cs,
-40039:                                               unsigned* tp) {
-40039: 
-40039: 
-40039:   C_Polyhedron ph_x(constraints());
-40039:   C_Polyhedron ph_y(y.constraints());
-40039:   ph_x.limited_H79_extrapolation_assign(ph_y, cs, tp);
-40039:   BD_Shape x(ph_x);
-40039:   m_swap(x);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline memory_size_type
-40039: BD_Shape<T>::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline int32_t
-40039: BD_Shape<T>::hash_code() const {
-40039:   return hash_code_from_dimension(space_dimension());
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Interval_Info>
-40039: inline void
-40039: BD_Shape<T>::generalized_refine_with_linear_form_inequality(
-40039:              const Linear_Form<Interval<T, Interval_Info> >& left,
-40039:              const Linear_Form<Interval<T, Interval_Info> >& right,
-40039:              const Relation_Symbol relsym) {
-40039:   switch (relsym) {
-40039:   case EQUAL:
-40039: 
-40039:     refine_with_linear_form_inequality(left, right);
-40039:     refine_with_linear_form_inequality(right, left);
-40039:     break;
-40039:   case LESS_THAN:
-40039:   case LESS_OR_EQUAL:
-40039:     refine_with_linear_form_inequality(left, right);
-40039:     break;
-40039:   case GREATER_THAN:
-40039:   case GREATER_OR_EQUAL:
-40039:     refine_with_linear_form_inequality(right, left);
-40039:     break;
-40039:   case NOT_EQUAL:
-40039:     break;
-40039:   default:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Interval_Info>
-40039: inline void
-40039: BD_Shape<T>
-40039: ::refine_fp_interval_abstract_store(Box<Interval<T, Interval_Info> >&
-40039:                                     store) const {
-40039: 
-40039: 
-40039:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_931 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<T>::is_exact)>) }
-40039: 
-40039:                                                      ;
-40039: 
-40039:   typedef Interval<T, Interval_Info> FP_Interval_Type;
-40039:   store.intersection_assign(Box<FP_Interval_Type>(*this));
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: BD_Shape<T>::drop_some_non_integer_points_helper(N& elem) {
-40039:   if (!is_integer(elem)) {
-40039:     Result r = floor_assign_r(elem, elem, ROUND_DOWN);
-40039:     (void)(r);
-40039:     ((void) 0);
-40039:     reset_shortest_path_closed();
-40039:   }
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: swap(BD_Shape<T>& x, BD_Shape<T>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 2372 "../../src/BD_Shape_defs.hh" 2
-40039: # 1 "../../src/BD_Shape_templates.hh" 1
-40039: # 47 "../../src/BD_Shape_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename T>
-40039: BD_Shape<T>::BD_Shape(const Congruence_System& cgs)
-40039:   : dbm(cgs.space_dimension() + 1),
-40039:     status(),
-40039:     redundancy_dbm() {
-40039:   add_congruences(cgs);
-40039: }
-40039: 
-40039: template <typename T>
-40039: BD_Shape<T>::BD_Shape(const Generator_System& gs)
-40039:   : dbm(gs.space_dimension() + 1), status(), redundancy_dbm() {
-40039:   const Generator_System::const_iterator gs_begin = gs.begin();
-40039:   const Generator_System::const_iterator gs_end = gs.end();
-40039:   if (gs_begin == gs_end) {
-40039: 
-40039:     set_empty();
-40039:     return;
-40039:   }
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039:   DB_Row<N>& dbm_0 = dbm[0];
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_tmp; N& tmp = holder_tmp.item();
-40039: 
-40039:   bool dbm_initialized = false;
-40039:   bool point_seen = false;
-40039: 
-40039:   for (Generator_System::const_iterator gs_i = gs_begin;
-40039:        gs_i != gs_end; ++gs_i) {
-40039:     const Generator& g = *gs_i;
-40039:     switch (g.type()) {
-40039:     case Generator::POINT:
-40039:       point_seen = true;
-40039: 
-40039:     case Generator::CLOSURE_POINT:
-40039:       if (!dbm_initialized) {
-40039: 
-40039:         dbm_initialized = true;
-40039:         const Coefficient& d = g.divisor();
-40039: 
-40039: 
-40039:         for (dimension_type i = space_dim; i > 0; --i) {
-40039:           const Coefficient& g_i = g.expression().get(Variable(i - 1));
-40039:           DB_Row<N>& dbm_i = dbm[i];
-40039:           for (dimension_type j = space_dim; j > 0; --j) {
-40039:             if (i != j) {
-40039:               const Coefficient& g_j = g.expression().get(Variable(j - 1));
-40039:               div_round_up(dbm_i[j], g_j - g_i, d);
-40039:             }
-40039:           }
-40039:           div_round_up(dbm_i[0], -g_i, d);
-40039:         }
-40039:         for (dimension_type j = space_dim; j > 0; --j) {
-40039:           const Coefficient& g_j = g.expression().get(Variable(j - 1));
-40039:           div_round_up(dbm_0[j], g_j, d);
-40039:         }
-40039: 
-40039:       }
-40039:       else {
-40039: 
-40039: 
-40039:         const Coefficient& d = g.divisor();
-40039: 
-40039: 
-40039:         for (dimension_type i = space_dim; i > 0; --i) {
-40039:           const Coefficient& g_i = g.expression().get(Variable(i - 1));
-40039:           DB_Row<N>& dbm_i = dbm[i];
-40039: 
-40039:           for (dimension_type j = space_dim; j > 0; --j) {
-40039:             const Coefficient& g_j = g.expression().get(Variable(j - 1));
-40039:             div_round_up(tmp, g_j - g_i, d);
-40039:             max_assign(dbm_i[j], tmp);
-40039:           }
-40039:           div_round_up(tmp, -g_i, d);
-40039:           max_assign(dbm_i[0], tmp);
-40039:         }
-40039:         for (dimension_type j = space_dim; j > 0; --j) {
-40039:           const Coefficient& g_j = g.expression().get(Variable(j - 1));
-40039:           div_round_up(tmp, g_j, d);
-40039:           max_assign(dbm_0[j], tmp);
-40039:         }
-40039:       }
-40039:       break;
-40039:     default:
-40039: 
-40039:       break;
-40039:     }
-40039:   }
-40039: 
-40039:   if (!point_seen) {
-40039: 
-40039:     throw_invalid_argument("BD_Shape(gs)",
-40039:                            "the non-empty generator system gs "
-40039:                            "contains no points.");
-40039:   }
-40039: 
-40039: 
-40039:   for (Generator_System::const_iterator gs_i = gs_begin;
-40039:        gs_i != gs_end; ++gs_i) {
-40039:     const Generator& g = *gs_i;
-40039:     switch (g.type()) {
-40039:     case Generator::LINE:
-40039: 
-40039: 
-40039:       for (dimension_type i = space_dim; i > 0; --i) {
-40039:         const Coefficient& g_i = g.expression().get(Variable(i - 1));
-40039:         DB_Row<N>& dbm_i = dbm[i];
-40039: 
-40039:         for (dimension_type j = space_dim; j > 0; --j) {
-40039:           if (g_i != g.expression().get(Variable(j - 1))) {
-40039:             assign_r(dbm_i[j], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:           }
-40039:         }
-40039:         if (g_i != 0) {
-40039:           assign_r(dbm_i[0], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:         }
-40039:       }
-40039:       for (Generator::expr_type::const_iterator i = g.expression().begin(),
-40039:             i_end = g.expression().end(); i != i_end; ++i) {
-40039:         assign_r(dbm_0[i.variable().space_dimension()],
-40039:                  PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:       }
-40039:       break;
-40039:     case Generator::RAY:
-40039: 
-40039: 
-40039:       for (dimension_type i = space_dim; i > 0; --i) {
-40039:         const Coefficient& g_i = g.expression().get(Variable(i - 1));
-40039:         DB_Row<N>& dbm_i = dbm[i];
-40039: 
-40039:         for (dimension_type j = space_dim; j > 0; --j) {
-40039:           if (g_i < g.expression().get(Variable(j - 1))) {
-40039:             assign_r(dbm_i[j], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:           }
-40039:         }
-40039:         if (g_i < 0) {
-40039:           assign_r(dbm_i[0], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:         }
-40039:       }
-40039:       for (Generator::expr_type::const_iterator i = g.expression().begin(),
-40039:             i_end = g.expression().end(); i != i_end; ++i) {
-40039:         if (*i > 0) {
-40039:           assign_r(dbm_0[i.variable().space_dimension()],
-40039:                    PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:         }
-40039:       }
-40039:       break;
-40039:     default:
-40039: 
-40039:       break;
-40039:     }
-40039:   }
-40039:   set_shortest_path_closed();
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: BD_Shape<T>::BD_Shape(const Polyhedron& ph, const Complexity_Class complexity)
-40039:   : dbm(), status(), redundancy_dbm() {
-40039:   const dimension_type num_dimensions = ph.space_dimension();
-40039: 
-40039:   if (ph.marked_empty()) {
-40039:     *this = BD_Shape<T>(num_dimensions, EMPTY);
-40039:     return;
-40039:   }
-40039: 
-40039:   if (num_dimensions == 0) {
-40039:     *this = BD_Shape<T>(num_dimensions, UNIVERSE);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (complexity == ANY_COMPLEXITY
-40039:       || (!ph.has_pending_constraints() && ph.generators_are_up_to_date())) {
-40039:     *this = BD_Shape<T>(ph.generators());
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: 
-40039:   if (!ph.has_something_pending() && ph.constraints_are_minimized()) {
-40039: 
-40039: 
-40039:     if (ph.is_universe()) {
-40039:       *this = BD_Shape<T>(num_dimensions, UNIVERSE);
-40039:       return;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   for (Constraint_System::const_iterator i = ph.con_sys.begin(),
-40039:          cs_end = ph.con_sys.end(); i != cs_end; ++i) {
-40039:     if (i->is_inconsistent()) {
-40039:       *this = BD_Shape<T>(num_dimensions, EMPTY);
-40039:       return;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (complexity == SIMPLEX_COMPLEXITY) {
-40039:     MIP_Problem lp(num_dimensions);
-40039:     lp.set_optimization_mode(MAXIMIZATION);
-40039: 
-40039:     const Constraint_System& ph_cs = ph.constraints();
-40039:     if (!ph_cs.has_strict_inequalities()) {
-40039:       lp.add_constraints(ph_cs);
-40039:     }
-40039:     else {
-40039: 
-40039:       for (Constraint_System::const_iterator i = ph_cs.begin(),
-40039:              ph_cs_end = ph_cs.end(); i != ph_cs_end; ++i) {
-40039:         const Constraint& c = *i;
-40039:         if (c.is_strict_inequality()) {
-40039:           Linear_Expression expr(c.expression());
-40039:           lp.add_constraint(expr >= 0);
-40039:         }
-40039:         else {
-40039:           lp.add_constraint(c);
-40039:         }
-40039:       }
-40039:     }
-40039: 
-40039: 
-40039:     if (!lp.is_satisfiable()) {
-40039:       *this = BD_Shape<T>(num_dimensions, EMPTY);
-40039:       return;
-40039:     }
-40039: 
-40039: 
-40039:     *this = BD_Shape<T>(num_dimensions, UNIVERSE);
-40039: 
-40039:     Generator g(point());
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
-40039:     for (dimension_type i = 1; i <= num_dimensions; ++i) {
-40039:       Variable x(i-1);
-40039: 
-40039:       lp.set_objective_function(x);
-40039:       if (lp.solve() == OPTIMIZED_MIP_PROBLEM) {
-40039:         g = lp.optimizing_point();
-40039:         lp.evaluate_objective_function(g, numer, denom);
-40039:         div_round_up(dbm[0][i], numer, denom);
-40039:       }
-40039: 
-40039:       for (dimension_type j = 1; j <= num_dimensions; ++j) {
-40039:         if (i == j) {
-40039:           continue;
-40039:         }
-40039:         Variable y(j-1);
-40039:         lp.set_objective_function(x - y);
-40039:         if (lp.solve() == OPTIMIZED_MIP_PROBLEM) {
-40039:           g = lp.optimizing_point();
-40039:           lp.evaluate_objective_function(g, numer, denom);
-40039:           div_round_up(dbm[j][i], numer, denom);
-40039:         }
-40039:       }
-40039: 
-40039:       lp.set_objective_function(-x);
-40039:       if (lp.solve() == OPTIMIZED_MIP_PROBLEM) {
-40039:         g = lp.optimizing_point();
-40039:         lp.evaluate_objective_function(g, numer, denom);
-40039:         div_round_up(dbm[i][0], numer, denom);
-40039:       }
-40039:     }
-40039:     set_shortest_path_closed();
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   *this = BD_Shape<T>(num_dimensions, UNIVERSE);
-40039:   refine_with_constraints(ph.constraints());
-40039: }
-40039: 
-40039: template <typename T>
-40039: dimension_type
-40039: BD_Shape<T>::affine_dimension() const {
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return 0;
-40039:   }
-40039: 
-40039: 
-40039:   shortest_path_closure_assign();
-40039:   if (marked_empty()) {
-40039:     return 0;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   std::vector<dimension_type> predecessor;
-40039:   compute_predecessors(predecessor);
-40039: 
-40039: 
-40039: 
-40039:   dimension_type affine_dim = 0;
-40039: 
-40039:   for (dimension_type i = 1; i <= space_dim; ++i) {
-40039:     if (predecessor[i] == i) {
-40039:       ++affine_dim;
-40039:     }
-40039:   }
-40039:   return affine_dim;
-40039: }
-40039: 
-40039: template <typename T>
-40039: Congruence_System
-40039: BD_Shape<T>::minimized_congruences() const {
-40039: 
-40039: 
-40039:   shortest_path_closure_assign();
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039:   Congruence_System cgs(space_dim);
-40039: 
-40039:   if (space_dim == 0) {
-40039:     if (marked_empty()) {
-40039:       cgs = Congruence_System::zero_dim_empty();
-40039:     }
-40039:     return cgs;
-40039:   }
-40039: 
-40039:   if (marked_empty()) {
-40039:     cgs.insert(Congruence::zero_dim_false());
-40039:     return cgs;
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
-40039: 
-40039: 
-40039:   std::vector<dimension_type> leaders;
-40039:   compute_leaders(leaders);
-40039: 
-40039: 
-40039:   const DB_Row<N>& dbm_0 = dbm[0];
-40039:   for (dimension_type i = 1; i <= space_dim; ++i) {
-40039:     const dimension_type leader = leaders[i];
-40039:     if (i != leader) {
-40039: 
-40039:       if (leader == 0) {
-40039: 
-40039:         ((void) 0);
-40039:         numer_denom(dbm_0[i], numer, denom);
-40039:         cgs.insert(denom*Variable(i-1) == numer);
-40039:       }
-40039:       else {
-40039: 
-40039:         ((void) 0);
-40039:         numer_denom(dbm[i][leader], numer, denom);
-40039:         cgs.insert(denom*Variable(leader-1) - denom*Variable(i-1) == numer);
-40039:       }
-40039:     }
-40039:   }
-40039:   return cgs;
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::add_constraint(const Constraint& c) {
-40039: 
-40039:   if (c.space_dimension() > space_dimension()) {
-40039:     throw_dimension_incompatible("add_constraint(c)", c);
-40039:   }
-40039: 
-40039:   if (c.is_strict_inequality()) {
-40039:     if (c.is_inconsistent()) {
-40039:       set_empty();
-40039:       return;
-40039:     }
-40039:     if (c.is_tautological()) {
-40039:       return;
-40039:     }
-40039: 
-40039:     throw_invalid_argument("add_constraint(c)",
-40039:                            "strict inequalities are not allowed");
-40039:   }
-40039: 
-40039:   dimension_type num_vars = 0;
-40039:   dimension_type i = 0;
-40039:   dimension_type j = 0;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
-40039: 
-40039:   if (!BD_Shape_Helpers::extract_bounded_difference(c, num_vars, i, j, coeff)) {
-40039:     throw_invalid_argument("add_constraint(c)",
-40039:                            "c is not a bounded difference constraint");
-40039:   }
-40039:   const Coefficient& inhomo = c.inhomogeneous_term();
-40039:   if (num_vars == 0) {
-40039: 
-40039:     if (inhomo < 0
-40039:         || (inhomo != 0 && c.is_equality())) {
-40039:       set_empty();
-40039:     }
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   const bool negative = (coeff < 0);
-40039:   if (negative) {
-40039:     neg_assign(coeff);
-40039:   }
-40039:   bool changed = false;
-40039:   N& x = negative ? dbm[i][j] : dbm[j][i];
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
-40039:   div_round_up(d, inhomo, coeff);
-40039:   if (x > d) {
-40039:     x = d;
-40039:     changed = true;
-40039:   }
-40039: 
-40039:   if (c.is_equality()) {
-40039:     N& y = negative ? dbm[j][i] : dbm[i][j];
-40039: 
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_c_term; Parma_Polyhedra_Library::Coefficient& minus_c_term = holder_minus_c_term.item();
-40039:     neg_assign(minus_c_term, inhomo);
-40039:     div_round_up(d, minus_c_term, coeff);
-40039:     if (y > d) {
-40039:       y = d;
-40039:       changed = true;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (changed && marked_shortest_path_closed()) {
-40039:     reset_shortest_path_closed();
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::add_congruence(const Congruence& cg) {
-40039:   const dimension_type cg_space_dim = cg.space_dimension();
-40039: 
-40039: 
-40039:   if (space_dimension() < cg_space_dim) {
-40039:     throw_dimension_incompatible("add_congruence(cg)", cg);
-40039:   }
-40039: 
-40039:   if (cg.is_proper_congruence()) {
-40039:     if (cg.is_tautological()) {
-40039:       return;
-40039:     }
-40039:     if (cg.is_inconsistent()) {
-40039:       set_empty();
-40039:       return;
-40039:     }
-40039: 
-40039:     throw_invalid_argument("add_congruence(cg)",
-40039:                            "cg is a non-trivial, proper congruence");
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   Constraint c(cg);
-40039:   add_constraint(c);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::refine_no_check(const Constraint& c) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039:   dimension_type num_vars = 0;
-40039:   dimension_type i = 0;
-40039:   dimension_type j = 0;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
-40039: 
-40039:   if (!BD_Shape_Helpers::extract_bounded_difference(c, num_vars, i, j, coeff)) {
-40039:     return;
-40039:   }
-40039:   const Coefficient& inhomo = c.inhomogeneous_term();
-40039:   if (num_vars == 0) {
-40039: 
-40039:     if (inhomo < 0
-40039:         || (c.is_equality() && inhomo != 0)
-40039:         || (c.is_strict_inequality() && inhomo == 0)) {
-40039:       set_empty();
-40039:     }
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   const bool negative = (coeff < 0);
-40039:   N& x = negative ? dbm[i][j] : dbm[j][i];
-40039:   N& y = negative ? dbm[j][i] : dbm[i][j];
-40039:   if (negative) {
-40039:     neg_assign(coeff);
-40039:   }
-40039:   bool changed = false;
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
-40039:   div_round_up(d, inhomo, coeff);
-40039:   if (x > d) {
-40039:     x = d;
-40039:     changed = true;
-40039:   }
-40039: 
-40039:   if (c.is_equality()) {
-40039: 
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_c_term; Parma_Polyhedra_Library::Coefficient& minus_c_term = holder_minus_c_term.item();
-40039:     neg_assign(minus_c_term, inhomo);
-40039:     div_round_up(d, minus_c_term, coeff);
-40039:     if (y > d) {
-40039:       y = d;
-40039:       changed = true;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (changed && marked_shortest_path_closed()) {
-40039:     reset_shortest_path_closed();
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::concatenate_assign(const BD_Shape& y) {
-40039:   BD_Shape& x = *this;
-40039: 
-40039:   const dimension_type x_space_dim = x.space_dimension();
-40039:   const dimension_type y_space_dim = y.space_dimension();
-40039: 
-40039: 
-40039: 
-40039:   if (y_space_dim == 0 && y.marked_empty()) {
-40039:     set_empty();
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (x_space_dim == 0 && marked_empty()) {
-40039:     dbm.grow(y_space_dim + 1);
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   add_space_dimensions_and_embed(y_space_dim);
-40039:   const dimension_type new_space_dim = x_space_dim + y_space_dim;
-40039:   for (dimension_type i = x_space_dim + 1; i <= new_space_dim; ++i) {
-40039:     DB_Row<N>& dbm_i = dbm[i];
-40039:     dbm_i[0] = y.dbm[i - x_space_dim][0];
-40039:     dbm[0][i] = y.dbm[0][i - x_space_dim];
-40039:     for (dimension_type j = x_space_dim + 1; j <= new_space_dim; ++j) {
-40039:       dbm_i[j] = y.dbm[i - x_space_dim][j - x_space_dim];
-40039:     }
-40039:   }
-40039: 
-40039:   if (marked_shortest_path_closed()) {
-40039:     reset_shortest_path_closed();
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: BD_Shape<T>::contains(const BD_Shape& y) const {
-40039:   const BD_Shape<T>& x = *this;
-40039:   const dimension_type x_space_dim = x.space_dimension();
-40039: 
-40039: 
-40039:   if (x_space_dim != y.space_dimension()) {
-40039:     throw_dimension_incompatible("contains(y)", y);
-40039:   }
-40039:   if (x_space_dim == 0) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     return marked_empty() ? y.marked_empty() : true;
-40039:   }
-40039: # 663 "../../src/BD_Shape_templates.hh"
-40039:   y.shortest_path_closure_assign();
-40039: 
-40039:   if (y.marked_empty()) {
-40039:     return true;
-40039:   }
-40039: 
-40039:   if (x.is_empty()) {
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039:   for (dimension_type i = x_space_dim + 1; i-- > 0; ) {
-40039:     const DB_Row<N>& x_dbm_i = x.dbm[i];
-40039:     const DB_Row<N>& y_dbm_i = y.dbm[i];
-40039:     for (dimension_type j = x_space_dim + 1; j-- > 0; ) {
-40039:       if (x_dbm_i[j] < y_dbm_i[j]) {
-40039:         return false;
-40039:       }
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: BD_Shape<T>::is_disjoint_from(const BD_Shape& y) const {
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039:   if (space_dim != y.space_dimension()) {
-40039:     throw_dimension_incompatible("is_disjoint_from(y)", y);
-40039:   }
-40039: 
-40039: 
-40039:   shortest_path_closure_assign();
-40039:   if (marked_empty()) {
-40039:     return true;
-40039:   }
-40039:   y.shortest_path_closure_assign();
-40039:   if (y.marked_empty()) {
-40039:     return true;
-40039:   }
-40039: # 716 "../../src/BD_Shape_templates.hh"
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_tmp; N& tmp = holder_tmp.item();
-40039:   for (dimension_type i = space_dim+1; i-- > 0; ) {
-40039:     const DB_Row<N>& x_i = dbm[i];
-40039:     for (dimension_type j = space_dim+1; j-- > 0; ) {
-40039:       neg_assign_r(tmp, y.dbm[j][i], ROUND_UP);
-40039:       if (x_i[j] < tmp) {
-40039:         return true;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   return false;
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: BD_Shape<T>::is_universe() const {
-40039:   if (marked_empty()) {
-40039:     return false;
-40039:   }
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
-40039:     const DB_Row<N>& dbm_i = dbm[i];
-40039:     for (dimension_type j = space_dim + 1; j-- > 0; ) {
-40039:       if (!is_plus_infinity(dbm_i[j])) {
-40039:         return false;
-40039:       }
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: BD_Shape<T>::is_bounded() const {
-40039:   shortest_path_closure_assign();
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039:   if (marked_empty() || space_dim == 0) {
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
-40039:     const DB_Row<N>& dbm_i = dbm[i];
-40039:     for (dimension_type j = space_dim + 1; j-- > 0; ) {
-40039:       if (i != j) {
-40039:         if (is_plus_infinity(dbm_i[j])) {
-40039:           return false;
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: BD_Shape<T>::contains_integer_point() const {
-40039: 
-40039:   if (is_empty()) {
-40039:     return false;
-40039:   }
-40039:   const dimension_type space_dim = space_dimension();
-40039:   if (space_dim == 0) {
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   if (std::numeric_limits<T>::is_integer) {
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   BD_Shape<mpz_class> bds_z(space_dim);
-40039:   typedef BD_Shape<mpz_class>::N Z;
-40039:   bds_z.reset_shortest_path_closed();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_tmp; N& tmp = holder_tmp.item();
-40039:   bool all_integers = true;
-40039:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
-40039:     DB_Row<Z>& z_i = bds_z.dbm[i];
-40039:     const DB_Row<N>& dbm_i = dbm[i];
-40039:     for (dimension_type j = space_dim + 1; j-- > 0; ) {
-40039:       const N& dbm_i_j = dbm_i[j];
-40039:       if (is_plus_infinity(dbm_i_j)) {
-40039:         continue;
-40039:       }
-40039:       if (is_integer(dbm_i_j)) {
-40039:         assign_r(z_i[j], dbm_i_j, ROUND_NOT_NEEDED);
-40039:       }
-40039:       else {
-40039:         all_integers = false;
-40039:         Z& z_i_j = z_i[j];
-40039: 
-40039:         neg_assign_r(tmp, dbm_i_j, ROUND_NOT_NEEDED);
-40039:         assign_r(z_i_j, tmp, ROUND_UP);
-40039:         neg_assign_r(z_i_j, z_i_j, ROUND_NOT_NEEDED);
-40039:       }
-40039:     }
-40039:   }
-40039:   return all_integers || !bds_z.is_empty();
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: BD_Shape<T>::frequency(const Linear_Expression& expr,
-40039:                        Coefficient& freq_n, Coefficient& freq_d,
-40039:                        Coefficient& val_n, Coefficient& val_d) const {
-40039:   dimension_type space_dim = space_dimension();
-40039: 
-40039:   if (space_dim < expr.space_dimension()) {
-40039:     throw_dimension_incompatible("frequency(e, ...)", "e", expr);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     if (is_empty()) {
-40039:       return false;
-40039:     }
-40039:     freq_n = 0;
-40039:     freq_d = 1;
-40039:     val_n = expr.inhomogeneous_term();
-40039:     val_d = 1;
-40039:     return true;
-40039:   }
-40039: 
-40039:   shortest_path_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_tmp; N& tmp = holder_tmp.item();
-40039:   Linear_Expression le = expr;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_val_denom; Parma_Polyhedra_Library::Coefficient& val_denom = holder_val_denom.item();
-40039:   val_denom = 1;
-40039: 
-40039: 
-40039: 
-40039:   for (dimension_type i = dbm.num_rows(); i-- > 1; ) {
-40039:     const Variable v(i-1);
-40039:     coeff = le.coefficient(v);
-40039:     if (coeff == 0) {
-40039:       continue;
-40039:     }
-40039:     const DB_Row<N>& dbm_i = dbm[i];
-40039: 
-40039:     assign_r(tmp, dbm_i[0], ROUND_NOT_NEEDED);
-40039:     if (is_additive_inverse(dbm[0][i], tmp)) {
-40039: 
-40039:       numer_denom(tmp, numer, denom);
-40039:       sub_mul_assign(le, coeff, v);
-40039:       le *= denom;
-40039:       le -= numer*coeff;
-40039:       val_denom *= denom;
-40039:       continue;
-40039:     }
-40039: 
-40039: 
-40039:     else {
-40039:       bool constant_v = false;
-40039:       for (Linear_Expression::const_iterator j = le.begin(),
-40039:             j_end = le.lower_bound(Variable(i - 1)); j != j_end; ++j) {
-40039:         const Variable vj = j.variable();
-40039:         const dimension_type j_dim = vj.space_dimension();
-40039:         assign_r(tmp, dbm_i[j_dim], ROUND_NOT_NEEDED);
-40039:         if (is_additive_inverse(dbm[j_dim][i], tmp)) {
-40039: 
-40039: 
-40039: 
-40039:           numer_denom(tmp, numer, denom);
-40039: 
-40039: 
-40039:           sub_mul_assign(le, coeff, v);
-40039:           add_mul_assign(le, coeff, vj);
-40039:           le *= denom;
-40039:           le -= numer*coeff;
-40039:           val_denom *= denom;
-40039:           constant_v = true;
-40039:           break;
-40039:         }
-40039:       }
-40039:       if (!constant_v) {
-40039: 
-40039:         return false;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   freq_n = 0;
-40039:   freq_d = 1;
-40039: 
-40039: 
-40039:   normalize2(le.inhomogeneous_term(), val_denom, val_n, val_d);
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: BD_Shape<T>::constrains(const Variable var) const {
-40039: 
-40039:   const dimension_type var_space_dim = var.space_dimension();
-40039:   if (space_dimension() < var_space_dim) {
-40039:     throw_dimension_incompatible("constrains(v)", "v", var);
-40039:   }
-40039:   shortest_path_closure_assign();
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return true;
-40039:   }
-40039: 
-40039:   const DB_Row<N>& dbm_v = dbm[var_space_dim];
-40039:   for (dimension_type i = dbm.num_rows(); i-- > 0; ) {
-40039:     if (!is_plus_infinity(dbm_v[i])
-40039:         || !is_plus_infinity(dbm[i][var_space_dim])) {
-40039:       return true;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   return is_empty();
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>
-40039: ::compute_predecessors(std::vector<dimension_type>& predecessor) const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type predecessor_size = dbm.num_rows();
-40039: 
-40039:   predecessor.reserve(predecessor_size);
-40039:   for (dimension_type i = 0; i < predecessor_size; ++i) {
-40039:     predecessor.push_back(i);
-40039:   }
-40039: 
-40039:   for (dimension_type i = predecessor_size; i-- > 1; ) {
-40039:     if (i == predecessor[i]) {
-40039:       const DB_Row<N>& dbm_i = dbm[i];
-40039:       for (dimension_type j = i; j-- > 0; ) {
-40039:         if (j == predecessor[j]
-40039:             && is_additive_inverse(dbm[j][i], dbm_i[j])) {
-40039: 
-40039:           predecessor[i] = j;
-40039:           break;
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::compute_leaders(std::vector<dimension_type>& leaders) const {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039:   compute_predecessors(leaders);
-40039: 
-40039:   ((void) 0);
-40039:   for (dimension_type i = 1, l_size = leaders.size(); i != l_size; ++i) {
-40039:     const dimension_type leaders_i = leaders[i];
-40039:     ((void) 0);
-40039:     if (leaders_i != i) {
-40039:       const dimension_type leaders_leaders_i = leaders[leaders_i];
-40039:       ((void) 0);
-40039:       leaders[i] = leaders_leaders_i;
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: BD_Shape<T>::is_shortest_path_reduced() const {
-40039: 
-40039:   if (marked_empty()) {
-40039:     return true;
-40039:   }
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (!marked_shortest_path_reduced()) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   const BD_Shape x_copy = *this;
-40039:   x_copy.shortest_path_closure_assign();
-40039: 
-40039:   if (x_copy.marked_empty()) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   std::vector<dimension_type> leader(space_dim + 1);
-40039: 
-40039: 
-40039:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
-40039:     leader[i] = i;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   for (dimension_type i = 0; i < space_dim; ++i) {
-40039:     const DB_Row<N>& x_copy_dbm_i = x_copy.dbm[i];
-40039:     for (dimension_type j = i + 1; j <= space_dim; ++j) {
-40039:       if (is_additive_inverse(x_copy.dbm[j][i], x_copy_dbm_i[j])) {
-40039: 
-40039: 
-40039:         leader[j] = leader[i];
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_c; N& c = holder_c.item();
-40039:   for (dimension_type k = 0; k <= space_dim; ++k) {
-40039:     if (leader[k] == k) {
-40039:       const DB_Row<N>& x_k = x_copy.dbm[k];
-40039:       for (dimension_type i = 0; i <= space_dim; ++i) {
-40039:         if (leader[i] == i) {
-40039:           const DB_Row<N>& x_i = x_copy.dbm[i];
-40039:           const Bit_Row& redundancy_i = redundancy_dbm[i];
-40039:           const N& x_i_k = x_i[k];
-40039:           for (dimension_type j = 0; j <= space_dim; ++j) {
-40039:             if (leader[j] == j) {
-40039:               const N& x_i_j = x_i[j];
-40039:               if (!is_plus_infinity(x_i_j)) {
-40039:                 add_assign_r(c, x_i_k, x_k[j], ROUND_UP);
-40039:                 if (x_i_j >= c && !redundancy_i[j]) {
-40039:                   return false;
-40039:                 }
-40039:               }
-40039:             }
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   std::vector<dimension_type> var_conn(space_dim + 1);
-40039:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
-40039:     var_conn[i] = space_dim + 1;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   for (dimension_type i = 0; i <= space_dim; ++i) {
-40039: 
-40039: 
-40039:     dimension_type t = 0;
-40039:     dimension_type leader_i = leader[i];
-40039: 
-40039:     if (leader_i == i) {
-40039:       for (dimension_type j = 0; j <= space_dim; ++j) {
-40039:         dimension_type leader_j = leader[j];
-40039: 
-40039: 
-40039:         if (j != leader_j) {
-40039:           if (!redundancy_dbm[i][j]) {
-40039:             if (t == 1) {
-40039: 
-40039:               return false;
-40039:             }
-40039:             else {
-40039:               if (leader_j != i) {
-40039: 
-40039:                 return false;
-40039:               }
-40039:               else {
-40039:                 ++t;
-40039:                 var_conn[i] = j;
-40039:               }
-40039:             }
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039: 
-40039:     else {
-40039:       for (dimension_type j = 0; j <= space_dim; ++j) {
-40039:         if (!redundancy_dbm[i][j]) {
-40039:           dimension_type leader_j = leader[j];
-40039:           if (leader_i != leader_j) {
-40039: 
-40039:             return false;
-40039:           }
-40039:           else {
-40039:             if (t == 1) {
-40039: 
-40039:               return false;
-40039:             }
-40039:             else {
-40039:               ++t;
-40039:               var_conn[i] = j;
-40039:             }
-40039:           }
-40039: 
-40039: 
-40039:           if (t == 0) {
-40039:             return false;
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   std::vector<bool> just_checked(space_dim + 1);
-40039:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
-40039:     just_checked[i] = false;
-40039:   }
-40039: 
-40039: 
-40039:   for (dimension_type i = 0; i <= space_dim; ++i) {
-40039: 
-40039:     if (!just_checked[i]) {
-40039:       dimension_type v_con = var_conn[i];
-40039: 
-40039: 
-40039:       if (v_con != space_dim + 1) {
-40039: 
-40039: 
-40039:         while (v_con != i) {
-40039:           just_checked[v_con] = true;
-40039:           v_con = var_conn[v_con];
-40039: 
-40039: 
-40039:           if (just_checked[v_con]) {
-40039:             return false;
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039:     just_checked[i] = true;
-40039:   }
-40039: 
-40039: 
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: BD_Shape<T>::bounds(const Linear_Expression& expr,
-40039:                     const bool from_above) const {
-40039: 
-40039: 
-40039:   const dimension_type expr_space_dim = expr.space_dimension();
-40039:   const dimension_type space_dim = space_dimension();
-40039:   if (space_dim < expr_space_dim) {
-40039:     throw_dimension_incompatible((from_above
-40039:                                   ? "bounds_from_above(e)"
-40039:                                   : "bounds_from_below(e)"), "e", expr);
-40039:   }
-40039:   shortest_path_closure_assign();
-40039: 
-40039:   if (space_dim == 0 || marked_empty()) {
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   const Constraint& c = from_above ? expr <= 0 : expr >= 0;
-40039:   dimension_type num_vars = 0;
-40039:   dimension_type i = 0;
-40039:   dimension_type j = 0;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
-40039: 
-40039:   if (BD_Shape_Helpers::extract_bounded_difference(c, num_vars, i, j, coeff)) {
-40039:     if (num_vars == 0) {
-40039: 
-40039:       return true;
-40039:     }
-40039: 
-40039:     const N& x = (coeff < 0) ? dbm[i][j] : dbm[j][i];
-40039:     return !is_plus_infinity(x);
-40039:   }
-40039:   else {
-40039: 
-40039:     Optimization_Mode mode_bounds
-40039:       = from_above ? MAXIMIZATION : MINIMIZATION;
-40039:     MIP_Problem mip(space_dim, constraints(), expr, mode_bounds);
-40039: 
-40039:     return mip.solve() == OPTIMIZED_MIP_PROBLEM;
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: BD_Shape<T>::max_min(const Linear_Expression& expr,
-40039:                      const bool maximize,
-40039:                      Coefficient& ext_n, Coefficient& ext_d,
-40039:                      bool& included) const {
-40039: 
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039:   const dimension_type expr_space_dim = expr.space_dimension();
-40039:   if (space_dim < expr_space_dim) {
-40039:     throw_dimension_incompatible((maximize
-40039:                                   ? "maximize(e, ...)"
-40039:                                   : "minimize(e, ...)"), "e", expr);
-40039:   }
-40039: 
-40039:   if (space_dim == 0) {
-40039:     if (marked_empty()) {
-40039:       return false;
-40039:     }
-40039:     else {
-40039:       ext_n = expr.inhomogeneous_term();
-40039:       ext_d = 1;
-40039:       included = true;
-40039:       return true;
-40039:     }
-40039:   }
-40039: 
-40039:   shortest_path_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039:   const Constraint& c = maximize ? expr <= 0 : expr >= 0;
-40039:   dimension_type num_vars = 0;
-40039:   dimension_type i = 0;
-40039:   dimension_type j = 0;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
-40039: 
-40039:   if (!BD_Shape_Helpers::extract_bounded_difference(c, num_vars, i, j, coeff)) {
-40039:     Optimization_Mode mode_max_min
-40039:       = maximize ? MAXIMIZATION : MINIMIZATION;
-40039:     MIP_Problem mip(space_dim, constraints(), expr, mode_max_min);
-40039:     if (mip.solve() == OPTIMIZED_MIP_PROBLEM) {
-40039:       mip.optimal_value(ext_n, ext_d);
-40039:       included = true;
-40039:       return true;
-40039:     }
-40039:     else {
-40039: 
-40039:       return false;
-40039:     }
-40039:   }
-40039:   else {
-40039: 
-40039:     if (num_vars == 0) {
-40039: 
-40039:       ext_n = expr.inhomogeneous_term();
-40039:       ext_d = 1;
-40039:       included = true;
-40039:       return true;
-40039:     }
-40039: 
-40039: 
-40039:     const N& x = (coeff < 0) ? dbm[i][j] : dbm[j][i];
-40039:     if (!is_plus_infinity(x)) {
-40039: 
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
-40039:       const Coefficient& b = expr.inhomogeneous_term();
-40039:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item();
-40039:       neg_assign(minus_b, b);
-40039:       const Coefficient& sc_b = maximize ? b : minus_b;
-40039:       assign_r(d, sc_b, ROUND_UP);
-40039: 
-40039: 
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_expr; N& coeff_expr = holder_coeff_expr.item();
-40039:       ((void) 0);
-40039:       const Coefficient& coeff_i = expr.get(Variable(i - 1));
-40039:       const int sign_i = sgn(coeff_i);
-40039:       if (sign_i > 0) {
-40039:         assign_r(coeff_expr, coeff_i, ROUND_UP);
-40039:       }
-40039:       else {
-40039:         Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_coeff_i; Parma_Polyhedra_Library::Coefficient& minus_coeff_i = holder_minus_coeff_i.item();
-40039:         neg_assign(minus_coeff_i, coeff_i);
-40039:         assign_r(coeff_expr, minus_coeff_i, ROUND_UP);
-40039:       }
-40039: 
-40039:       add_mul_assign_r(d, coeff_expr, x, ROUND_UP);
-40039:       numer_denom(d, ext_n, ext_d);
-40039:       if (!maximize) {
-40039:         neg_assign(ext_n);
-40039:       }
-40039:       included = true;
-40039:       return true;
-40039:     }
-40039: 
-40039: 
-40039:     return false;
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: BD_Shape<T>::max_min(const Linear_Expression& expr,
-40039:                      const bool maximize,
-40039:                      Coefficient& ext_n, Coefficient& ext_d,
-40039:                      bool& included,
-40039:                      Generator& g) const {
-40039: 
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039:   const dimension_type expr_space_dim = expr.space_dimension();
-40039:   if (space_dim < expr_space_dim) {
-40039:     throw_dimension_incompatible((maximize
-40039:                                   ? "maximize(e, ...)"
-40039:                                   : "minimize(e, ...)"), "e", expr);
-40039:   }
-40039: 
-40039:   if (space_dim == 0) {
-40039:     if (marked_empty()) {
-40039:       return false;
-40039:     }
-40039:     else {
-40039:       ext_n = expr.inhomogeneous_term();
-40039:       ext_d = 1;
-40039:       included = true;
-40039:       g = point();
-40039:       return true;
-40039:     }
-40039:   }
-40039: 
-40039:   shortest_path_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return false;
-40039:   }
-40039:   Optimization_Mode mode_max_min
-40039:     = maximize ? MAXIMIZATION : MINIMIZATION;
-40039:   MIP_Problem mip(space_dim, constraints(), expr, mode_max_min);
-40039:   if (mip.solve() == OPTIMIZED_MIP_PROBLEM) {
-40039:     g = mip.optimizing_point();
-40039:     mip.evaluate_objective_function(g, ext_n, ext_d);
-40039:     included = true;
-40039:     return true;
-40039:   }
-40039: 
-40039:   return false;
-40039: }
-40039: 
-40039: template <typename T>
-40039: Poly_Con_Relation
-40039: BD_Shape<T>::relation_with(const Congruence& cg) const {
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039: 
-40039:   if (cg.space_dimension() > space_dim) {
-40039:     throw_dimension_incompatible("relation_with(cg)", cg);
-40039:   }
-40039: 
-40039: 
-40039:   if (cg.is_equality()) {
-40039:     Constraint c(cg);
-40039:     return relation_with(c);
-40039:   }
-40039: 
-40039:   shortest_path_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return Poly_Con_Relation::saturates()
-40039:       && Poly_Con_Relation::is_included()
-40039:       && Poly_Con_Relation::is_disjoint();
-40039:   }
-40039:   if (space_dim == 0) {
-40039:     if (cg.is_inconsistent()) {
-40039:       return Poly_Con_Relation::is_disjoint();
-40039:     }
-40039:     else {
-40039:       return Poly_Con_Relation::saturates()
-40039:         && Poly_Con_Relation::is_included();
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   Linear_Expression le = Linear_Expression(cg.expression());
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_numer; Parma_Polyhedra_Library::Coefficient& min_numer = holder_min_numer.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_denom; Parma_Polyhedra_Library::Coefficient& min_denom = holder_min_denom.item();
-40039:   bool min_included;
-40039:   bool bounded_below = minimize(le, min_numer, min_denom, min_included);
-40039: 
-40039: 
-40039: 
-40039:   if (!bounded_below) {
-40039:     return Poly_Con_Relation::strictly_intersects();
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_numer; Parma_Polyhedra_Library::Coefficient& max_numer = holder_max_numer.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_denom; Parma_Polyhedra_Library::Coefficient& max_denom = holder_max_denom.item();
-40039:   bool max_included;
-40039:   bool bounded_above = maximize(le, max_numer, max_denom, max_included);
-40039: 
-40039: 
-40039: 
-40039:   if (!bounded_above) {
-40039:     return Poly_Con_Relation::strictly_intersects();
-40039:   }
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_signed_distance; Parma_Polyhedra_Library::Coefficient& signed_distance = holder_signed_distance.item();
-40039: 
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_value; Parma_Polyhedra_Library::Coefficient& min_value = holder_min_value.item();
-40039:   min_value = min_numer / min_denom;
-40039:   const Coefficient& modulus = cg.modulus();
-40039:   signed_distance = min_value % modulus;
-40039:   min_value -= signed_distance;
-40039:   if (min_value * min_denom < min_numer) {
-40039:     min_value += modulus;
-40039:   }
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_value; Parma_Polyhedra_Library::Coefficient& max_value = holder_max_value.item();
-40039:   max_value = max_numer / max_denom;
-40039:   signed_distance = max_value % modulus;
-40039:   max_value += signed_distance;
-40039:   if (max_value * max_denom > max_numer) {
-40039:     max_value -= modulus;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (max_value < min_value) {
-40039:     return Poly_Con_Relation::is_disjoint();
-40039:   }
-40039:   else {
-40039:     return Poly_Con_Relation::strictly_intersects();
-40039:   }
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: Poly_Con_Relation
-40039: BD_Shape<T>::relation_with(const Constraint& c) const {
-40039:   const dimension_type c_space_dim = c.space_dimension();
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039: 
-40039:   if (c_space_dim > space_dim) {
-40039:     throw_dimension_incompatible("relation_with(c)", c);
-40039:   }
-40039:   shortest_path_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return Poly_Con_Relation::saturates()
-40039:       && Poly_Con_Relation::is_included()
-40039:       && Poly_Con_Relation::is_disjoint();
-40039:   }
-40039:   if (space_dim == 0) {
-40039:     if ((c.is_equality() && c.inhomogeneous_term() != 0)
-40039:         || (c.is_inequality() && c.inhomogeneous_term() < 0)) {
-40039:       return Poly_Con_Relation::is_disjoint();
-40039:     }
-40039:     else if (c.is_strict_inequality() && c.inhomogeneous_term() == 0) {
-40039: 
-40039: 
-40039:       return Poly_Con_Relation::saturates()
-40039:         && Poly_Con_Relation::is_disjoint();
-40039:     }
-40039:     else if (c.is_equality() || c.inhomogeneous_term() == 0) {
-40039:       return Poly_Con_Relation::saturates()
-40039:         && Poly_Con_Relation::is_included();
-40039:     }
-40039:     else {
-40039: 
-40039: 
-40039: 
-40039:       return Poly_Con_Relation::is_included();
-40039:     }
-40039:   }
-40039: 
-40039:   dimension_type num_vars = 0;
-40039:   dimension_type i = 0;
-40039:   dimension_type j = 0;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
-40039:   if (!BD_Shape_Helpers::extract_bounded_difference(c, num_vars, i, j, coeff)) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     Linear_Expression le(c.expression());
-40039:     le.set_inhomogeneous_term(Coefficient_zero());
-40039: 
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_numer; Parma_Polyhedra_Library::Coefficient& max_numer = holder_max_numer.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_denom; Parma_Polyhedra_Library::Coefficient& max_denom = holder_max_denom.item();
-40039:     bool max_included;
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_numer; Parma_Polyhedra_Library::Coefficient& min_numer = holder_min_numer.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_denom; Parma_Polyhedra_Library::Coefficient& min_denom = holder_min_denom.item();
-40039:     bool min_included;
-40039:     bool bounded_above = maximize(le, max_numer, max_denom, max_included);
-40039:     bool bounded_below = minimize(le, min_numer, min_denom, min_included);
-40039:     if (!bounded_above) {
-40039:       if (!bounded_below) {
-40039:         return Poly_Con_Relation::strictly_intersects();
-40039:       }
-40039:       min_numer += c.inhomogeneous_term() * min_denom;
-40039:       switch (sgn(min_numer)) {
-40039:       case 1:
-40039:         if (c.is_equality()) {
-40039:           return Poly_Con_Relation::is_disjoint();
-40039:         }
-40039:         return Poly_Con_Relation::is_included();
-40039:       case 0:
-40039:         if (c.is_strict_inequality() || c.is_equality()) {
-40039:           return Poly_Con_Relation::strictly_intersects();
-40039:         }
-40039:         return Poly_Con_Relation::is_included();
-40039:       case -1:
-40039:         return Poly_Con_Relation::strictly_intersects();
-40039:       }
-40039:     }
-40039:     if (!bounded_below) {
-40039:       max_numer += c.inhomogeneous_term() * max_denom;
-40039:       switch (sgn(max_numer)) {
-40039:       case 1:
-40039:         return Poly_Con_Relation::strictly_intersects();
-40039:       case 0:
-40039:         if (c.is_strict_inequality()) {
-40039:           return Poly_Con_Relation::is_disjoint();
-40039:         }
-40039:         return Poly_Con_Relation::strictly_intersects();
-40039:       case -1:
-40039:         return Poly_Con_Relation::is_disjoint();
-40039:       }
-40039:     }
-40039:     else {
-40039:       max_numer += c.inhomogeneous_term() * max_denom;
-40039:       min_numer += c.inhomogeneous_term() * min_denom;
-40039:       switch (sgn(max_numer)) {
-40039:       case 1:
-40039:         switch (sgn(min_numer)) {
-40039:         case 1:
-40039:           if (c.is_equality()) {
-40039:             return Poly_Con_Relation::is_disjoint();
-40039:           }
-40039:           return Poly_Con_Relation::is_included();
-40039:         case 0:
-40039:           if (c.is_equality()) {
-40039:             return Poly_Con_Relation::strictly_intersects();
-40039:           }
-40039:           if (c.is_strict_inequality()) {
-40039:             return Poly_Con_Relation::strictly_intersects();
-40039:           }
-40039:           return Poly_Con_Relation::is_included();
-40039:         case -1:
-40039:           return Poly_Con_Relation::strictly_intersects();
-40039:         }
-40039:         Parma_Polyhedra_Library::ppl_unreachable();
-40039:         break;
-40039:       case 0:
-40039:         if (min_numer == 0) {
-40039:           if (c.is_strict_inequality()) {
-40039:             return Poly_Con_Relation::is_disjoint()
-40039:               && Poly_Con_Relation::saturates();
-40039:           }
-40039:           return Poly_Con_Relation::is_included()
-40039:             && Poly_Con_Relation::saturates();
-40039:         }
-40039:         if (c.is_strict_inequality()) {
-40039:           return Poly_Con_Relation::is_disjoint();
-40039:         }
-40039:         return Poly_Con_Relation::strictly_intersects();
-40039:       case -1:
-40039:         return Poly_Con_Relation::is_disjoint();
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   if (num_vars == 0) {
-40039: 
-40039:     switch (sgn(c.inhomogeneous_term())) {
-40039:     case -1:
-40039:       return Poly_Con_Relation::is_disjoint();
-40039:     case 0:
-40039:       if (c.is_strict_inequality()) {
-40039:         return Poly_Con_Relation::saturates()
-40039:           && Poly_Con_Relation::is_disjoint();
-40039:       }
-40039:       else {
-40039:         return Poly_Con_Relation::saturates()
-40039:           && Poly_Con_Relation::is_included();
-40039:       }
-40039:     case 1:
-40039:       if (c.is_equality()) {
-40039:         return Poly_Con_Relation::is_disjoint();
-40039:       }
-40039:       else {
-40039:         return Poly_Con_Relation::is_included();
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   const bool negative = (coeff < 0);
-40039:   const N& x = negative ? dbm[i][j] : dbm[j][i];
-40039:   const N& y = negative ? dbm[j][i] : dbm[i][j];
-40039:   if (negative) {
-40039:     neg_assign(coeff);
-40039:   }
-40039: # 1672 "../../src/BD_Shape_templates.hh"
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_x; mpq_class& q_x = holder_q_x.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_y; mpq_class& q_y = holder_q_y.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_d; mpq_class& d = holder_d.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_d1; mpq_class& d1 = holder_d1.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_c_denom; mpq_class& c_denom = holder_c_denom.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_denom; mpq_class& q_denom = holder_q_denom.item();
-40039:   assign_r(c_denom, coeff, ROUND_NOT_NEEDED);
-40039:   assign_r(d, c.inhomogeneous_term(), ROUND_NOT_NEEDED);
-40039:   neg_assign_r(d1, d, ROUND_NOT_NEEDED);
-40039:   div_assign_r(d, d, c_denom, ROUND_NOT_NEEDED);
-40039:   div_assign_r(d1, d1, c_denom, ROUND_NOT_NEEDED);
-40039: 
-40039:   if (is_plus_infinity(x)) {
-40039:     if (!is_plus_infinity(y)) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
-40039:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
-40039:       numer_denom(y, numer, denom);
-40039:       assign_r(q_denom, denom, ROUND_NOT_NEEDED);
-40039:       assign_r(q_y, numer, ROUND_NOT_NEEDED);
-40039:       div_assign_r(q_y, q_y, q_denom, ROUND_NOT_NEEDED);
-40039:       if (q_y < d1) {
-40039:         return Poly_Con_Relation::is_disjoint();
-40039:       }
-40039:       if (q_y == d1 && c.is_strict_inequality()) {
-40039:         return Poly_Con_Relation::is_disjoint();
-40039:       }
-40039:     }
-40039: 
-40039: 
-40039:     return Poly_Con_Relation::strictly_intersects();
-40039:   }
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
-40039:   numer_denom(x, numer, denom);
-40039:   assign_r(q_denom, denom, ROUND_NOT_NEEDED);
-40039:   assign_r(q_x, numer, ROUND_NOT_NEEDED);
-40039:   div_assign_r(q_x, q_x, q_denom, ROUND_NOT_NEEDED);
-40039: 
-40039:   if (!is_plus_infinity(y)) {
-40039:     numer_denom(y, numer, denom);
-40039:     assign_r(q_denom, denom, ROUND_NOT_NEEDED);
-40039:     assign_r(q_y, numer, ROUND_NOT_NEEDED);
-40039:     div_assign_r(q_y, q_y, q_denom, ROUND_NOT_NEEDED);
-40039:     if (q_x == d && q_y == d1) {
-40039:       if (c.is_strict_inequality()) {
-40039:         return Poly_Con_Relation::saturates()
-40039:           && Poly_Con_Relation::is_disjoint();
-40039:       }
-40039:       else {
-40039:         return Poly_Con_Relation::saturates()
-40039:           && Poly_Con_Relation::is_included();
-40039:       }
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:     if (q_y < d1) {
-40039:       return Poly_Con_Relation::is_disjoint();
-40039:     }
-40039:     if (q_y == d1 && c.is_strict_inequality()) {
-40039:       return Poly_Con_Relation::is_disjoint();
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (d > q_x) {
-40039:     if (c.is_equality()) {
-40039:       return Poly_Con_Relation::is_disjoint();
-40039:     }
-40039:     else {
-40039:       return Poly_Con_Relation::is_included();
-40039:     }
-40039:   }
-40039: 
-40039:   if (d == q_x && c.is_nonstrict_inequality()) {
-40039:     return Poly_Con_Relation::is_included();
-40039:   }
-40039: 
-40039:   return Poly_Con_Relation::strictly_intersects();
-40039: }
-40039: 
-40039: template <typename T>
-40039: Poly_Gen_Relation
-40039: BD_Shape<T>::relation_with(const Generator& g) const {
-40039:   const dimension_type space_dim = space_dimension();
-40039:   const dimension_type g_space_dim = g.space_dimension();
-40039: 
-40039: 
-40039:   if (space_dim < g_space_dim) {
-40039:     throw_dimension_incompatible("relation_with(g)", g);
-40039:   }
-40039:   shortest_path_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return Poly_Gen_Relation::nothing();
-40039:   }
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return Poly_Gen_Relation::subsumes();
-40039:   }
-40039:   const bool is_line = g.is_line();
-40039:   const bool is_line_or_ray = g.is_line_or_ray();
-40039: # 1792 "../../src/BD_Shape_templates.hh"
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_product; Parma_Polyhedra_Library::Coefficient& product = holder_product.item();
-40039: 
-40039: 
-40039:   for (dimension_type i = 0; i <= space_dim; ++i) {
-40039:     const Coefficient& g_coeff_y = (i > g_space_dim || i == 0)
-40039:       ? Coefficient_zero() : g.coefficient(Variable(i-1));
-40039:     const DB_Row<N>& dbm_i = dbm[i];
-40039:     for (dimension_type j = i + 1; j <= space_dim; ++j) {
-40039:       const Coefficient& g_coeff_x = (j > g_space_dim)
-40039:         ? Coefficient_zero() : g.coefficient(Variable(j-1));
-40039:       const N& dbm_ij = dbm_i[j];
-40039:       const N& dbm_ji = dbm[j][i];
-40039:       if (is_additive_inverse(dbm_ji, dbm_ij)) {
-40039: 
-40039: 
-40039:         numer_denom(dbm_ij, numer, denom);
-40039:         product = g_coeff_y;
-40039:         product -= g_coeff_x;
-40039:         product *= denom;
-40039:         if (!is_line_or_ray) {
-40039:           add_mul_assign(product, numer, g.divisor());
-40039:         }
-40039:         if (product != 0) {
-40039:           return Poly_Gen_Relation::nothing();
-40039:         }
-40039:       }
-40039:       else {
-40039: 
-40039:         if (!is_plus_infinity(dbm_ij)) {
-40039: 
-40039: 
-40039: 
-40039:           numer_denom(dbm_ij, numer, denom);
-40039:           product = g_coeff_y;
-40039:           product -= g_coeff_x;
-40039:           product *= denom;
-40039:           if (!is_line_or_ray) {
-40039:             add_mul_assign(product, numer, g.divisor());
-40039:           }
-40039:           if (is_line) {
-40039:             if (product != 0) {
-40039: 
-40039:               return Poly_Gen_Relation::nothing();
-40039:             }
-40039:           }
-40039:           else {
-40039: 
-40039:             if (product < 0) {
-40039:               return Poly_Gen_Relation::nothing();
-40039:             }
-40039:           }
-40039:         }
-40039: 
-40039:         if (!is_plus_infinity(dbm_ji)) {
-40039: 
-40039: 
-40039:           numer_denom(dbm_ji, numer, denom);
-40039:           product = 0;
-40039:           add_mul_assign(product, denom, g_coeff_x);
-40039:           add_mul_assign(product, -denom, g_coeff_y);
-40039:           if (!is_line_or_ray) {
-40039:             add_mul_assign(product, numer, g.divisor());
-40039:           }
-40039:           if (is_line) {
-40039:             if (product != 0) {
-40039: 
-40039:               return Poly_Gen_Relation::nothing();
-40039:             }
-40039:           }
-40039:           else {
-40039: 
-40039:             if (product < 0) {
-40039:               return Poly_Gen_Relation::nothing();
-40039:             }
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   return Poly_Gen_Relation::subsumes();
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::shortest_path_closure_assign() const {
-40039: 
-40039:   if (marked_empty() || marked_shortest_path_closed()) {
-40039:     return;
-40039:   }
-40039:   const dimension_type num_dimensions = space_dimension();
-40039: 
-40039:   if (num_dimensions == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   BD_Shape& x = const_cast<BD_Shape<T>&>(*this);
-40039: 
-40039: 
-40039:   for (dimension_type h = num_dimensions + 1; h-- > 0; ) {
-40039:     ((void) 0);
-40039:     assign_r(x.dbm[h][h], 0, ROUND_NOT_NEEDED);
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_sum; N& sum = holder_sum.item();
-40039:   for (dimension_type k = num_dimensions + 1; k-- > 0; ) {
-40039:     const DB_Row<N>& x_dbm_k = x.dbm[k];
-40039:     for (dimension_type i = num_dimensions + 1; i-- > 0; ) {
-40039:       DB_Row<N>& x_dbm_i = x.dbm[i];
-40039:       const N& x_dbm_i_k = x_dbm_i[k];
-40039:       if (!is_plus_infinity(x_dbm_i_k)) {
-40039:         for (dimension_type j = num_dimensions + 1; j-- > 0; ) {
-40039:           const N& x_dbm_k_j = x_dbm_k[j];
-40039:           if (!is_plus_infinity(x_dbm_k_j)) {
-40039: 
-40039:             add_assign_r(sum, x_dbm_i_k, x_dbm_k_j, ROUND_UP);
-40039:             min_assign(x_dbm_i[j], sum);
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   for (dimension_type h = num_dimensions + 1; h-- > 0; ) {
-40039:     N& x_dbm_hh = x.dbm[h][h];
-40039:     if (sgn(x_dbm_hh) < 0) {
-40039:       x.set_empty();
-40039:       return;
-40039:     }
-40039:     else {
-40039:       ((void) 0);
-40039: 
-40039:       assign_r(x_dbm_hh, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   x.set_shortest_path_closed();
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::incremental_shortest_path_closure_assign(Variable var) const {
-40039: 
-40039:   if (marked_empty() || marked_shortest_path_closed()) {
-40039:     return;
-40039:   }
-40039:   const dimension_type num_dimensions = space_dimension();
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:   BD_Shape& x = const_cast<BD_Shape&>(*this);
-40039: 
-40039: 
-40039:   for (dimension_type h = num_dimensions + 1; h-- > 0; ) {
-40039:     ((void) 0);
-40039:     assign_r(x.dbm[h][h], 0, ROUND_NOT_NEEDED);
-40039:   }
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_sum; N& sum = holder_sum.item();
-40039:   const dimension_type v = var.id() + 1;
-40039:   DB_Row<N>& x_v = x.dbm[v];
-40039: 
-40039:   for (dimension_type k = num_dimensions + 1; k-- > 0; ) {
-40039:     DB_Row<N>& x_k = x.dbm[k];
-40039:     const N& x_v_k = x_v[k];
-40039:     const N& x_k_v = x_k[v];
-40039:     const bool x_v_k_finite = !is_plus_infinity(x_v_k);
-40039:     const bool x_k_v_finite = !is_plus_infinity(x_k_v);
-40039: 
-40039:     if (x_v_k_finite) {
-40039:       if (x_k_v_finite) {
-40039: 
-40039:         for (dimension_type i = num_dimensions + 1; i-- > 0; ) {
-40039:           DB_Row<N>& x_i = x.dbm[i];
-40039:           const N& x_i_k = x_i[k];
-40039:           if (!is_plus_infinity(x_i_k)) {
-40039:             add_assign_r(sum, x_i_k, x_k_v, ROUND_UP);
-40039:             min_assign(x_i[v], sum);
-40039:           }
-40039:           const N& x_k_i = x_k[i];
-40039:           if (!is_plus_infinity(x_k_i)) {
-40039:             add_assign_r(sum, x_v_k, x_k_i, ROUND_UP);
-40039:             min_assign(x_v[i], sum);
-40039:           }
-40039:         }
-40039:       }
-40039:       else {
-40039: 
-40039:         for (dimension_type i = num_dimensions + 1; i-- > 0; ) {
-40039:           const N& x_k_i = x_k[i];
-40039:           if (!is_plus_infinity(x_k_i)) {
-40039:             add_assign_r(sum, x_v_k, x_k_i, ROUND_UP);
-40039:             min_assign(x_v[i], sum);
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039:     else if (x_k_v_finite) {
-40039: 
-40039:       for (dimension_type i = num_dimensions + 1; i-- > 0; ) {
-40039:         DB_Row<N>& x_i = x.dbm[i];
-40039:         const N& x_i_k = x_i[k];
-40039:         if (!is_plus_infinity(x_i_k)) {
-40039:           add_assign_r(sum, x_i_k, x_k_v, ROUND_UP);
-40039:           min_assign(x_i[v], sum);
-40039:         }
-40039:       }
-40039:     }
-40039:     else {
-40039: 
-40039:       continue;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   for (dimension_type i = num_dimensions + 1; i-- > 0; ) {
-40039:     DB_Row<N>& x_i = x.dbm[i];
-40039:     const N& x_i_v = x_i[v];
-40039:     if (!is_plus_infinity(x_i_v)) {
-40039:       for (dimension_type j = num_dimensions + 1; j-- > 0; ) {
-40039:         const N& x_v_j = x_v[j];
-40039:         if (!is_plus_infinity(x_v_j)) {
-40039:           add_assign_r(sum, x_i_v, x_v_j, ROUND_UP);
-40039:           min_assign(x_i[j], sum);
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   for (dimension_type h = num_dimensions + 1; h-- > 0; ) {
-40039:     N& x_dbm_hh = x.dbm[h][h];
-40039:     if (sgn(x_dbm_hh) < 0) {
-40039:       x.set_empty();
-40039:       return;
-40039:     }
-40039:     else {
-40039:       ((void) 0);
-40039: 
-40039:       assign_r(x_dbm_hh, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   x.set_shortest_path_closed();
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::shortest_path_reduction_assign() const {
-40039: 
-40039:   if (marked_shortest_path_reduced()) {
-40039:     return;
-40039:   }
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039:   shortest_path_closure_assign();
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   std::vector<dimension_type> predecessor;
-40039:   compute_predecessors(predecessor);
-40039:   std::vector<dimension_type> leaders;
-40039:   compute_leader_indices(predecessor, leaders);
-40039:   const dimension_type num_leaders = leaders.size();
-40039: 
-40039:   Bit_Matrix redundancy(space_dim + 1, space_dim + 1);
-40039: 
-40039: 
-40039:   Bit_Row& red_0 = redundancy[0];
-40039:   for (dimension_type j = space_dim + 1; j-- > 0; ) {
-40039:     red_0.set(j);
-40039:   }
-40039:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
-40039:     redundancy[i] = red_0;
-40039:   }
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_c; N& c = holder_c.item();
-40039:   for (dimension_type l_i = 0; l_i < num_leaders; ++l_i) {
-40039:     const dimension_type i = leaders[l_i];
-40039:     const DB_Row<N>& dbm_i = dbm[i];
-40039:     Bit_Row& redundancy_i = redundancy[i];
-40039:     for (dimension_type l_j = 0; l_j < num_leaders; ++l_j) {
-40039:       const dimension_type j = leaders[l_j];
-40039:       if (redundancy_i[j]) {
-40039:         const N& dbm_i_j = dbm_i[j];
-40039:         redundancy_i.clear(j);
-40039:         for (dimension_type l_k = 0; l_k < num_leaders; ++l_k) {
-40039:           const dimension_type k = leaders[l_k];
-40039:           add_assign_r(c, dbm_i[k], dbm[k][j], ROUND_UP);
-40039:           if (dbm_i_j >= c) {
-40039:             redundancy_i.set(j);
-40039:             break;
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   std::deque<bool> dealt_with(space_dim + 1, false);
-40039:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
-40039: 
-40039: 
-40039:     if (i != predecessor[i] && !dealt_with[i]) {
-40039:       dimension_type j = i;
-40039:       while (true) {
-40039:         const dimension_type predecessor_j = predecessor[j];
-40039:         if (j == predecessor_j) {
-40039: 
-40039:           ((void) 0);
-40039:           redundancy[i].clear(j);
-40039: 
-40039: 
-40039:           break;
-40039:         }
-40039: 
-40039:         ((void) 0);
-40039:         redundancy[predecessor_j].clear(j);
-40039:         dealt_with[predecessor_j] = true;
-40039:         j = predecessor_j;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   BD_Shape<T>& x = const_cast<BD_Shape<T>&>(*this);
-40039:   using std::swap;
-40039:   swap(x.redundancy_dbm, redundancy);
-40039:   x.set_shortest_path_reduced();
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::upper_bound_assign(const BD_Shape& y) {
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039: 
-40039:   if (space_dim != y.space_dimension()) {
-40039:     throw_dimension_incompatible("upper_bound_assign(y)", y);
-40039:   }
-40039: 
-40039:   y.shortest_path_closure_assign();
-40039:   if (y.marked_empty()) {
-40039:     return;
-40039:   }
-40039:   shortest_path_closure_assign();
-40039:   if (marked_empty()) {
-40039:     *this = y;
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
-40039:     DB_Row<N>& dbm_i = dbm[i];
-40039:     const DB_Row<N>& y_dbm_i = y.dbm[i];
-40039:     for (dimension_type j = space_dim + 1; j-- > 0; ) {
-40039:       N& dbm_ij = dbm_i[j];
-40039:       const N& y_dbm_ij = y_dbm_i[j];
-40039:       if (dbm_ij < y_dbm_ij) {
-40039:         dbm_ij = y_dbm_ij;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   if (marked_shortest_path_reduced()) {
-40039:     reset_shortest_path_reduced();
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: BD_Shape<T>::BFT00_upper_bound_assign_if_exact(const BD_Shape& y) {
-40039: 
-40039:   const BD_Shape& x = *this;
-40039:   const dimension_type x_space_dim = x.space_dimension();
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039:   if (x_space_dim == 0) {
-40039:     upper_bound_assign(y);
-40039:     return true;
-40039:   }
-40039: 
-40039:   if (x.marked_empty()) {
-40039:     *this = y;
-40039:     return true;
-40039:   }
-40039:   else if (y.is_empty()) {
-40039:     return true;
-40039:   }
-40039:   else if (x.is_empty()) {
-40039:     *this = y;
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Variable epsilon(x_space_dim);
-40039:   Linear_Expression zero_expr;
-40039:   zero_expr.set_space_dimension(x_space_dim + 1);
-40039:   Linear_Expression db_expr;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Constraint_System env_cs;
-40039:   Constraint_System x_cs_removed;
-40039:   Constraint_System y_cs_removed;
-40039:   x.shortest_path_reduction_assign();
-40039:   y.shortest_path_reduction_assign();
-40039:   for (dimension_type i = x_space_dim + 1; i-- > 0; ) {
-40039:     const Bit_Row& x_red_i = x.redundancy_dbm[i];
-40039:     const Bit_Row& y_red_i = y.redundancy_dbm[i];
-40039:     const DB_Row<N>& x_dbm_i = x.dbm[i];
-40039:     const DB_Row<N>& y_dbm_i = y.dbm[i];
-40039:     for (dimension_type j = x_space_dim + 1; j-- > 0; ) {
-40039:       if (x_red_i[j] && y_red_i[j]) {
-40039:         continue;
-40039:       }
-40039:       if (!x_red_i[j]) {
-40039:         const N& x_dbm_ij = x_dbm_i[j];
-40039:         ((void) 0);
-40039:         numer_denom(x_dbm_ij, numer, denom);
-40039: 
-40039:         db_expr = zero_expr;
-40039:         if (i > 0) {
-40039:           db_expr += Variable(i-1);
-40039:         }
-40039:         if (j > 0) {
-40039:           db_expr -= Variable(j-1);
-40039:         }
-40039:         if (denom != 1) {
-40039:           db_expr *= denom;
-40039:         }
-40039:         db_expr += numer;
-40039:         if (x_dbm_ij >= y_dbm_i[j]) {
-40039:           env_cs.insert(db_expr >= 0);
-40039:         }
-40039:         else {
-40039:           db_expr += epsilon;
-40039:           x_cs_removed.insert(db_expr == 0);
-40039:         }
-40039:       }
-40039:       if (!y_red_i[j]) {
-40039:         const N& y_dbm_ij = y_dbm_i[j];
-40039:         const N& x_dbm_ij = x_dbm_i[j];
-40039:         ((void) 0);
-40039:         numer_denom(y_dbm_ij, numer, denom);
-40039: 
-40039:         db_expr = zero_expr;
-40039:         if (i > 0) {
-40039:           db_expr += Variable(i-1);
-40039:         }
-40039:         if (j > 0) {
-40039:           db_expr -= Variable(j-1);
-40039:         }
-40039:         if (denom != 1) {
-40039:           db_expr *= denom;
-40039:         }
-40039:         db_expr += numer;
-40039:         if (y_dbm_ij >= x_dbm_ij) {
-40039: 
-40039:           if (!x_red_i[j] && x_dbm_ij == y_dbm_ij) {
-40039:             continue;
-40039:           }
-40039:           env_cs.insert(db_expr >= 0);
-40039:         }
-40039:         else {
-40039:           db_expr += epsilon;
-40039:           y_cs_removed.insert(db_expr == 0);
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   if (x_cs_removed.empty()) {
-40039: 
-40039:     return true;
-40039:   }
-40039:   if (y_cs_removed.empty()) {
-40039: 
-40039:     *this = y;
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   MIP_Problem env_lp(x_space_dim + 1, env_cs, epsilon, MAXIMIZATION);
-40039: 
-40039:   env_lp.solve();
-40039:   ((void) 0);
-40039: 
-40039: 
-40039:   for (Constraint_System::const_iterator i = x_cs_removed.begin(),
-40039:          i_end = x_cs_removed.end(); i != i_end; ++i) {
-40039:     MIP_Problem lp_i(env_lp);
-40039:     lp_i.add_constraint(*i);
-40039: 
-40039:     if (lp_i.solve() == UNFEASIBLE_MIP_PROBLEM) {
-40039:       continue;
-40039:     }
-40039:     for (Constraint_System::const_iterator j = y_cs_removed.begin(),
-40039:            j_end = y_cs_removed.end(); j != j_end; ++j) {
-40039:       MIP_Problem lp_ij(lp_i);
-40039:       lp_ij.add_constraint(*j);
-40039: 
-40039:       switch (lp_ij.solve()) {
-40039:       case UNFEASIBLE_MIP_PROBLEM:
-40039: 
-40039:         Parma_Polyhedra_Library::ppl_unreachable();
-40039:         return false;
-40039:       case UNBOUNDED_MIP_PROBLEM:
-40039:         return false;
-40039:       case OPTIMIZED_MIP_PROBLEM:
-40039:         lp_ij.optimal_value(numer, denom);
-40039:         if (numer > 0) {
-40039:           return false;
-40039:         }
-40039:         break;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   upper_bound_assign(y);
-40039:   ((void) 0);
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <bool integer_upper_bound>
-40039: bool
-40039: BD_Shape<T>::BHZ09_upper_bound_assign_if_exact(const BD_Shape& y) {
-40039:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_2368 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!integer_upper_bound || std::numeric_limits<T>::is_integer)>) }
-40039: 
-40039: 
-40039: 
-40039:                                                               ;
-40039: 
-40039: 
-40039: 
-40039:   const BD_Shape& x = *this;
-40039:   const dimension_type x_space_dim = x.space_dimension();
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039:   if (x_space_dim == 0) {
-40039:     upper_bound_assign(y);
-40039:     return true;
-40039:   }
-40039: 
-40039:   if (x.marked_empty()) {
-40039:     *this = y;
-40039:     return true;
-40039:   }
-40039:   else if (y.is_empty()) {
-40039:     return true;
-40039:   }
-40039:   else if (x.is_empty()) {
-40039:     *this = y;
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   x.shortest_path_reduction_assign();
-40039:   y.shortest_path_reduction_assign();
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039:   BD_Shape<T> ub(x);
-40039:   ub.upper_bound_assign(y);
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_lhs; N& lhs = holder_lhs.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_rhs; N& rhs = holder_rhs.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_temp_zero; N& temp_zero = holder_temp_zero.item();
-40039:   assign_r(temp_zero, 0, ROUND_NOT_NEEDED);
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_temp_one; N& temp_one = holder_temp_one.item();
-40039:   if (integer_upper_bound) {
-40039:     assign_r(temp_one, 1, ROUND_NOT_NEEDED);
-40039:   }
-40039:   for (dimension_type i = x_space_dim + 1; i-- > 0; ) {
-40039:     const DB_Row<N>& x_i = x.dbm[i];
-40039:     const Bit_Row& x_red_i = x.redundancy_dbm[i];
-40039:     const DB_Row<N>& y_i = y.dbm[i];
-40039:     const DB_Row<N>& ub_i = ub.dbm[i];
-40039:     for (dimension_type j = x_space_dim + 1; j-- > 0; ) {
-40039: 
-40039:       if (x_red_i[j]) {
-40039:         continue;
-40039:       }
-40039: 
-40039:       ((void) 0);
-40039:       const N& x_i_j = x_i[j];
-40039:       if (x_i_j < y_i[j]) {
-40039:         for (dimension_type k = x_space_dim + 1; k-- > 0; ) {
-40039:           const DB_Row<N>& x_k = x.dbm[k];
-40039:           const DB_Row<N>& y_k = y.dbm[k];
-40039:           const Bit_Row& y_red_k = y.redundancy_dbm[k];
-40039:           const DB_Row<N>& ub_k = ub.dbm[k];
-40039:           const N& ub_k_j = (k == j) ? temp_zero : ub_k[j];
-40039:           for (dimension_type ell = x_space_dim + 1; ell-- > 0; ) {
-40039: 
-40039:             if (y_red_k[ell]) {
-40039:               continue;
-40039:             }
-40039: 
-40039:             ((void) 0);
-40039:             const N& y_k_ell = y_k[ell];
-40039:             if (y_k_ell < x_k[ell]) {
-40039: 
-40039: 
-40039:               add_assign_r(lhs, x_i_j, y_k_ell, ROUND_UP);
-40039:               const N& ub_i_ell = (i == ell) ? temp_zero : ub_i[ell];
-40039:               add_assign_r(rhs, ub_i_ell, ub_k_j, ROUND_UP);
-40039:               if (integer_upper_bound) {
-40039: 
-40039: 
-40039:                 add_assign_r(lhs, lhs, temp_one, ROUND_NOT_NEEDED);
-40039:               }
-40039: 
-40039:               if (lhs < rhs) {
-40039:                 return false;
-40039:               }
-40039:             }
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   m_swap(ub);
-40039:   ((void) 0);
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::difference_assign(const BD_Shape& y) {
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039: 
-40039:   if (space_dim != y.space_dimension()) {
-40039:     throw_dimension_incompatible("difference_assign(y)", y);
-40039:   }
-40039:   BD_Shape new_bd_shape(space_dim, EMPTY);
-40039: 
-40039:   BD_Shape& x = *this;
-40039: 
-40039:   x.shortest_path_closure_assign();
-40039: 
-40039: 
-40039:   if (x.marked_empty()) {
-40039:     return;
-40039:   }
-40039:   y.shortest_path_closure_assign();
-40039: 
-40039: 
-40039:   if (y.marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     x.set_empty();
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (y.contains(x)) {
-40039:     x.set_empty();
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const Constraint_System& y_cs = y.constraints();
-40039:   for (Constraint_System::const_iterator i = y_cs.begin(),
-40039:          y_cs_end = y_cs.end(); i != y_cs_end; ++i) {
-40039:     const Constraint& c = *i;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     if (x.relation_with(c).implies(Poly_Con_Relation::is_included())) {
-40039:       continue;
-40039:     }
-40039:     BD_Shape z = x;
-40039:     const Linear_Expression e(c.expression());
-40039:     z.add_constraint(e <= 0);
-40039:     if (!z.is_empty()) {
-40039:       new_bd_shape.upper_bound_assign(z);
-40039:     }
-40039:     if (c.is_equality()) {
-40039:       z = x;
-40039:       z.add_constraint(e >= 0);
-40039:       if (!z.is_empty()) {
-40039:         new_bd_shape.upper_bound_assign(z);
-40039:       }
-40039:     }
-40039:   }
-40039:   *this = new_bd_shape;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: BD_Shape<T>::simplify_using_context_assign(const BD_Shape& y) {
-40039:   BD_Shape& x = *this;
-40039:   const dimension_type dim = x.space_dimension();
-40039: 
-40039:   if (dim != y.space_dimension()) {
-40039:     throw_dimension_incompatible("simplify_using_context_assign(y)", y);
-40039:   }
-40039: 
-40039:   if (dim == 0) {
-40039:     if (y.marked_empty()) {
-40039:       x.set_zero_dim_univ();
-40039:       return false;
-40039:     }
-40039:     else {
-40039:       return !x.marked_empty();
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   y.shortest_path_closure_assign();
-40039:   if (x.contains(y)) {
-40039:     BD_Shape<T> res(dim, UNIVERSE);
-40039:     x.m_swap(res);
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039:   x.shortest_path_closure_assign();
-40039:   if (x.marked_empty()) {
-40039: 
-40039:     dimension_type i;
-40039:     dimension_type j;
-40039: 
-40039:     i = 0;
-40039:     const DB_Row<N>& y_dbm_0 = y.dbm[0];
-40039:     for (j = 1; j <= dim; ++j) {
-40039:       if (!is_plus_infinity(y_dbm_0[j])) {
-40039: 
-40039: 
-40039: 
-40039:         goto found;
-40039:       }
-40039:     }
-40039:     j = 0;
-40039:     for (i = 1; i <= dim; ++i) {
-40039:       if (!is_plus_infinity(y.dbm[i][0])) {
-40039: 
-40039: 
-40039: 
-40039:         goto found;
-40039:       }
-40039:     }
-40039: 
-40039:     for (i = 1; i <= dim; ++i) {
-40039:       const DB_Row<N>& y_dbm_i = y.dbm[i];
-40039:       for (j = 1; j <= dim; ++j) {
-40039:         if (!is_plus_infinity(y_dbm_i[j])) {
-40039: 
-40039: 
-40039: 
-40039:           goto found;
-40039:         }
-40039:       }
-40039:     }
-40039: 
-40039: 
-40039:     return false;
-40039: 
-40039:   found:
-40039: 
-40039:     ((void) 0);
-40039:     BD_Shape<T> res(dim, UNIVERSE);
-40039:     Parma_Polyhedra_Library::Dirty_Temp<N> holder_tmp; N& tmp = holder_tmp.item();
-40039:     assign_r(tmp, 1, ROUND_UP);
-40039:     add_assign_r(tmp, tmp, y.dbm[i][j], ROUND_UP);
-40039:     ((void) 0);
-40039: 
-40039:     neg_assign_r(res.dbm[j][i], tmp, ROUND_DOWN);
-40039:     x.m_swap(res);
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   BD_Shape<T> target = x;
-40039:   target.intersection_assign(y);
-40039:   const bool bool_result = !target.is_empty();
-40039: 
-40039: 
-40039:   x.shortest_path_reduction_assign();
-40039: 
-40039:   dimension_type x_num_non_redundant = (dim+1)*(dim+1);
-40039:   for (dimension_type i = dim + 1; i-- > 0; ) {
-40039:     x_num_non_redundant -= x.redundancy_dbm[i].count_ones();
-40039:   }
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   BD_Shape<T> yy = y;
-40039: 
-40039: 
-40039:   BD_Shape<T> res(dim, UNIVERSE);
-40039: 
-40039:   dimension_type res_num_non_redundant = 0;
-40039: 
-40039: 
-40039:   std::vector<dimension_type> x_leaders;
-40039:   x.compute_leaders(x_leaders);
-40039: 
-40039: 
-40039:   const DB_Row<N>& x_dbm_0 = x.dbm[0];
-40039:   DB_Row<N>& yy_dbm_0 = yy.dbm[0];
-40039:   DB_Row<N>& res_dbm_0 = res.dbm[0];
-40039:   for (dimension_type j = 1; j <= dim; ++j) {
-40039: 
-40039: 
-40039:     if (x_leaders[j] != 0) {
-40039:       continue;
-40039:     }
-40039:     ((void) 0);
-40039:     if (x_dbm_0[j] < yy_dbm_0[j]) {
-40039:       res_dbm_0[j] = x_dbm_0[j];
-40039:       ++res_num_non_redundant;
-40039: 
-40039:       yy_dbm_0[j] = x_dbm_0[j];
-40039:       yy.reset_shortest_path_closed();
-40039:     }
-40039:     ((void) 0);
-40039:     if (x.dbm[j][0] < yy.dbm[j][0]) {
-40039:       res.dbm[j][0] = x.dbm[j][0];
-40039:       ++res_num_non_redundant;
-40039: 
-40039:       yy.dbm[j][0] = x.dbm[j][0];
-40039:       yy.reset_shortest_path_closed();
-40039:     }
-40039: 
-40039:     if (!yy.marked_shortest_path_closed()) {
-40039:       Variable var_j(j-1);
-40039:       yy.incremental_shortest_path_closure_assign(var_j);
-40039:       if (target.contains(yy)) {
-40039: 
-40039:         if (res_num_non_redundant < x_num_non_redundant) {
-40039:           res.reset_shortest_path_closed();
-40039:           x.m_swap(res);
-40039:         }
-40039:         return bool_result;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   for (dimension_type i = 2; i <= dim; ++i) {
-40039:     const dimension_type j = x_leaders[i];
-40039:     if (j == i || j == 0) {
-40039:       continue;
-40039:     }
-40039:     ((void) 0);
-40039:     if (x.dbm[i][j] < yy.dbm[i][j]) {
-40039:       res.dbm[i][j] = x.dbm[i][j];
-40039:       ++res_num_non_redundant;
-40039: 
-40039:       yy.dbm[i][j] = x.dbm[i][j];
-40039:       yy.reset_shortest_path_closed();
-40039:     }
-40039:     ((void) 0);
-40039:     if (x.dbm[j][i] < yy.dbm[j][i]) {
-40039:       res.dbm[j][i] = x.dbm[j][i];
-40039:       ++res_num_non_redundant;
-40039: 
-40039:       yy.dbm[j][i] = x.dbm[j][i];
-40039:       yy.reset_shortest_path_closed();
-40039:     }
-40039: 
-40039:     if (!yy.marked_shortest_path_closed()) {
-40039:       Variable var_j(j-1);
-40039:       yy.incremental_shortest_path_closure_assign(var_j);
-40039:       if (target.contains(yy)) {
-40039: 
-40039:         if (res_num_non_redundant < x_num_non_redundant) {
-40039:           res.reset_shortest_path_closed();
-40039:           x.m_swap(res);
-40039:         }
-40039:         return bool_result;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   for (dimension_type i = 0; i <= dim; ++i) {
-40039:     if (i != x_leaders[i]) {
-40039:       continue;
-40039:     }
-40039:     const DB_Row<N>& x_dbm_i = x.dbm[i];
-40039:     const Bit_Row& x_redundancy_dbm_i = x.redundancy_dbm[i];
-40039:     DB_Row<N>& yy_dbm_i = yy.dbm[i];
-40039:     DB_Row<N>& res_dbm_i = res.dbm[i];
-40039:     for (dimension_type j = 0; j <= dim; ++j) {
-40039:       if (j != x_leaders[j] || x_redundancy_dbm_i[j]) {
-40039:         continue;
-40039:       }
-40039:       N& yy_dbm_ij = yy_dbm_i[j];
-40039:       const N& x_dbm_ij = x_dbm_i[j];
-40039:       if (x_dbm_ij < yy_dbm_ij) {
-40039:         res_dbm_i[j] = x_dbm_ij;
-40039:         ++res_num_non_redundant;
-40039: 
-40039:         yy_dbm_ij = x_dbm_ij;
-40039:         yy.reset_shortest_path_closed();
-40039:         ((void) 0);
-40039:         Variable var(((i > 0) ? i : j) - 1);
-40039:         yy.incremental_shortest_path_closure_assign(var);
-40039:         if (target.contains(yy)) {
-40039: 
-40039:           if (res_num_non_redundant < x_num_non_redundant) {
-40039:             res.reset_shortest_path_closed();
-40039:             x.m_swap(res);
-40039:           }
-40039:           return bool_result;
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::ppl_unreachable();
-40039:   return false;
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::add_space_dimensions_and_embed(const dimension_type m) {
-40039: 
-40039:   if (m == 0) {
-40039:     return;
-40039:   }
-40039:   const dimension_type space_dim = space_dimension();
-40039:   const dimension_type new_space_dim = space_dim + m;
-40039:   const bool was_zero_dim_univ = (!marked_empty() && space_dim == 0);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dbm.grow(new_space_dim + 1);
-40039: 
-40039: 
-40039: 
-40039:   if (marked_shortest_path_reduced()) {
-40039:     reset_shortest_path_reduced();
-40039:   }
-40039: 
-40039: 
-40039:   if (was_zero_dim_univ) {
-40039:     set_shortest_path_closed();
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::add_space_dimensions_and_project(const dimension_type m) {
-40039: 
-40039:   if (m == 0) {
-40039:     return;
-40039:   }
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     dbm.grow(m + 1);
-40039:     if (!marked_empty()) {
-40039:       for (dimension_type i = m + 1; i-- > 0; ) {
-40039:         DB_Row<N>& dbm_i = dbm[i];
-40039:         for (dimension_type j = m + 1; j-- > 0; ) {
-40039:           if (i != j) {
-40039:             assign_r(dbm_i[j], 0, ROUND_NOT_NEEDED);
-40039:           }
-40039:         }
-40039:       }
-40039:       set_shortest_path_closed();
-40039:     }
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type new_space_dim = space_dim + m;
-40039:   dbm.grow(new_space_dim + 1);
-40039: 
-40039: 
-40039:   DB_Row<N>& dbm_0 = dbm[0];
-40039:   for (dimension_type i = space_dim + 1; i <= new_space_dim; ++i) {
-40039:     assign_r(dbm[i][0], 0, ROUND_NOT_NEEDED);
-40039:     assign_r(dbm_0[i], 0, ROUND_NOT_NEEDED);
-40039:   }
-40039: 
-40039:   if (marked_shortest_path_closed()) {
-40039:     reset_shortest_path_closed();
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::remove_space_dimensions(const Variables_Set& vars) {
-40039: 
-40039: 
-40039: 
-40039:   if (vars.empty()) {
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039:   const dimension_type old_space_dim = space_dimension();
-40039: 
-40039: 
-40039:   const dimension_type min_space_dim = vars.space_dimension();
-40039:   if (old_space_dim < min_space_dim) {
-40039:     throw_dimension_incompatible("remove_space_dimensions(vs)", min_space_dim);
-40039:   }
-40039: 
-40039:   shortest_path_closure_assign();
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type new_space_dim = old_space_dim - vars.size();
-40039:   if (new_space_dim == 0) {
-40039:     dbm.resize_no_copy(1);
-40039:     if (!marked_empty()) {
-40039: 
-40039:       set_zero_dim_univ();
-40039:     }
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     dbm.resize_no_copy(new_space_dim + 1);
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (marked_shortest_path_reduced()) {
-40039:     reset_shortest_path_reduced();
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   Variables_Set::const_iterator vsi = vars.begin();
-40039:   Variables_Set::const_iterator vsi_end = vars.end();
-40039:   dimension_type dst = *vsi + 1;
-40039:   dimension_type src = dst + 1;
-40039:   for (++vsi; vsi != vsi_end; ++vsi) {
-40039:     const dimension_type vsi_next = *vsi + 1;
-40039: 
-40039: 
-40039:     while (src < vsi_next) {
-40039:       using std::swap;
-40039:       swap(dbm[dst], dbm[src]);
-40039:       for (dimension_type i = old_space_dim + 1; i-- > 0; ) {
-40039:         DB_Row<N>& dbm_i = dbm[i];
-40039:         assign_or_swap(dbm_i[dst], dbm_i[src]);
-40039:       }
-40039:       ++dst;
-40039:       ++src;
-40039:     }
-40039:     ++src;
-40039:   }
-40039: 
-40039: 
-40039:   while (src <= old_space_dim) {
-40039:     using std::swap;
-40039:     swap(dbm[dst], dbm[src]);
-40039:     for (dimension_type i = old_space_dim + 1; i-- > 0; ) {
-40039:       DB_Row<N>& dbm_i = dbm[i];
-40039:       assign_or_swap(dbm_i[dst], dbm_i[src]);
-40039:     }
-40039:     ++src;
-40039:     ++dst;
-40039:   }
-40039: 
-40039: 
-40039:   dbm.resize_no_copy(new_space_dim + 1);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Partial_Function>
-40039: void
-40039: BD_Shape<T>::map_space_dimensions(const Partial_Function& pfunc) {
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return;
-40039:   }
-40039:   if (pfunc.has_empty_codomain()) {
-40039: 
-40039:     remove_higher_space_dimensions(0);
-40039:     return;
-40039:   }
-40039: 
-40039:   const dimension_type new_space_dim = pfunc.max_in_codomain() + 1;
-40039: 
-40039: 
-40039:   if (new_space_dim < space_dim) {
-40039:     shortest_path_closure_assign();
-40039:   }
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     remove_higher_space_dimensions(new_space_dim);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (marked_shortest_path_reduced()) {
-40039:     reset_shortest_path_reduced();
-40039:   }
-40039: 
-40039:   DB_Matrix<N> x(new_space_dim+1);
-40039: 
-40039: 
-40039: 
-40039:   DB_Row<N>& dbm_0 = dbm[0];
-40039:   DB_Row<N>& x_0 = x[0];
-40039:   for (dimension_type j = 1; j <= space_dim; ++j) {
-40039:     dimension_type new_j;
-40039:     if (pfunc.maps(j - 1, new_j)) {
-40039:       assign_or_swap(x_0[new_j + 1], dbm_0[j]);
-40039:       assign_or_swap(x[new_j + 1][0], dbm[j][0]);
-40039:     }
-40039:   }
-40039: 
-40039:   for (dimension_type i = 1; i <= space_dim; ++i) {
-40039:     dimension_type new_i;
-40039:     if (pfunc.maps(i - 1, new_i)) {
-40039:       DB_Row<N>& dbm_i = dbm[i];
-40039:       ++new_i;
-40039:       DB_Row<N>& x_new_i = x[new_i];
-40039:       for (dimension_type j = i+1; j <= space_dim; ++j) {
-40039:         dimension_type new_j;
-40039:         if (pfunc.maps(j - 1, new_j)) {
-40039:           ++new_j;
-40039:           assign_or_swap(x_new_i[new_j], dbm_i[j]);
-40039:           assign_or_swap(x[new_j][new_i], dbm[j][i]);
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   using std::swap;
-40039:   swap(dbm, x);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::intersection_assign(const BD_Shape& y) {
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039: 
-40039:   if (space_dim != y.space_dimension()) {
-40039:     throw_dimension_incompatible("intersection_assign(y)", y);
-40039:   }
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039:   if (y.marked_empty()) {
-40039:     set_empty();
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   bool changed = false;
-40039:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
-40039:     DB_Row<N>& dbm_i = dbm[i];
-40039:     const DB_Row<N>& y_dbm_i = y.dbm[i];
-40039:     for (dimension_type j = space_dim + 1; j-- > 0; ) {
-40039:       N& dbm_ij = dbm_i[j];
-40039:       const N& y_dbm_ij = y_dbm_i[j];
-40039:       if (dbm_ij > y_dbm_ij) {
-40039:         dbm_ij = y_dbm_ij;
-40039:         changed = true;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   if (changed && marked_shortest_path_closed()) {
-40039:     reset_shortest_path_closed();
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Iterator>
-40039: void
-40039: BD_Shape<T>::CC76_extrapolation_assign(const BD_Shape& y,
-40039:                                        Iterator first, Iterator last,
-40039:                                        unsigned* tp) {
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039: 
-40039:   if (space_dim != y.space_dimension()) {
-40039:     throw_dimension_incompatible("CC76_extrapolation_assign(y)", y);
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return;
-40039:   }
-40039:   shortest_path_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039:   y.shortest_path_closure_assign();
-40039: 
-40039:   if (y.marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   if (tp != 0 && *tp > 0) {
-40039:     BD_Shape<T> x_tmp(*this);
-40039:     x_tmp.CC76_extrapolation_assign(y, first, last, 0);
-40039: 
-40039:     if (!contains(x_tmp)) {
-40039:       --(*tp);
-40039:     }
-40039:     return;
-40039:   }
-40039: # 3108 "../../src/BD_Shape_templates.hh"
-40039:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
-40039:     DB_Row<N>& dbm_i = dbm[i];
-40039:     const DB_Row<N>& y_dbm_i = y.dbm[i];
-40039:     for (dimension_type j = space_dim + 1; j-- > 0; ) {
-40039:       N& dbm_ij = dbm_i[j];
-40039:       const N& y_dbm_ij = y_dbm_i[j];
-40039:       if (y_dbm_ij < dbm_ij) {
-40039:         Iterator k = std::lower_bound(first, last, dbm_ij);
-40039:         if (k != last) {
-40039:           if (dbm_ij < *k) {
-40039:             assign_r(dbm_ij, *k, ROUND_UP);
-40039:           }
-40039:         }
-40039:         else {
-40039:           assign_r(dbm_ij, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039:   reset_shortest_path_closed();
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::get_limiting_shape(const Constraint_System& cs,
-40039:                                 BD_Shape& limiting_shape) const {
-40039: 
-40039:   ((void) 0);
-40039: 
-40039:   shortest_path_closure_assign();
-40039:   bool changed = false;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_c_term; Parma_Polyhedra_Library::Coefficient& minus_c_term = holder_minus_c_term.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_d1; N& d1 = holder_d1.item();
-40039:   for (Constraint_System::const_iterator cs_i = cs.begin(),
-40039:          cs_end = cs.end(); cs_i != cs_end; ++cs_i) {
-40039:     const Constraint& c = *cs_i;
-40039:     dimension_type num_vars = 0;
-40039:     dimension_type i = 0;
-40039:     dimension_type j = 0;
-40039: 
-40039:     if (BD_Shape_Helpers::extract_bounded_difference(c, num_vars, i, j, coeff)) {
-40039: 
-40039: 
-40039:       const bool negative = (coeff < 0);
-40039:       const N& x = negative ? dbm[i][j] : dbm[j][i];
-40039:       const N& y = negative ? dbm[j][i] : dbm[i][j];
-40039:       DB_Matrix<N>& ls_dbm = limiting_shape.dbm;
-40039:       if (negative) {
-40039:         neg_assign(coeff);
-40039:       }
-40039: 
-40039:       div_round_up(d, c.inhomogeneous_term(), coeff);
-40039:       if (x <= d) {
-40039:         if (c.is_inequality()) {
-40039:           N& ls_x = negative ? ls_dbm[i][j] : ls_dbm[j][i];
-40039:           if (ls_x > d) {
-40039:             ls_x = d;
-40039:             changed = true;
-40039:           }
-40039:         }
-40039:         else {
-40039: 
-40039:           neg_assign(minus_c_term, c.inhomogeneous_term());
-40039:           div_round_up(d1, minus_c_term, coeff);
-40039:           if (y <= d1) {
-40039:             N& ls_x = negative ? ls_dbm[i][j] : ls_dbm[j][i];
-40039:             N& ls_y = negative ? ls_dbm[j][i] : ls_dbm[i][j];
-40039:             if ((ls_x >= d && ls_y > d1) || (ls_x > d && ls_y >= d1)) {
-40039:               ls_x = d;
-40039:               ls_y = d1;
-40039:               changed = true;
-40039:             }
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (changed && limiting_shape.marked_shortest_path_closed()) {
-40039:     limiting_shape.reset_shortest_path_closed();
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::limited_CC76_extrapolation_assign(const BD_Shape& y,
-40039:                                                const Constraint_System& cs,
-40039:                                                unsigned* tp) {
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039:   if (space_dim != y.space_dimension()) {
-40039:     throw_dimension_incompatible("limited_CC76_extrapolation_assign(y, cs)",
-40039:                                  y);
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type cs_space_dim = cs.space_dimension();
-40039:   if (space_dim < cs_space_dim) {
-40039:     throw_invalid_argument("limited_CC76_extrapolation_assign(y, cs)",
-40039:                            "cs is space_dimension incompatible");
-40039:   }
-40039: 
-40039: 
-40039:   if (cs.has_strict_inequalities()) {
-40039:     throw_invalid_argument("limited_CC76_extrapolation_assign(y, cs)",
-40039:                            "cs has strict inequalities");
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   if (y.marked_empty()) {
-40039:     return;
-40039:   }
-40039:   BD_Shape<T> limiting_shape(space_dim, UNIVERSE);
-40039:   get_limiting_shape(cs, limiting_shape);
-40039:   CC76_extrapolation_assign(y, tp);
-40039:   intersection_assign(limiting_shape);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::BHMZ05_widening_assign(const BD_Shape& y, unsigned* tp) {
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039: 
-40039:   if (space_dim != y.space_dimension()) {
-40039:     throw_dimension_incompatible("BHMZ05_widening_assign(y)", y);
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039:   const dimension_type y_affine_dim = y.affine_dimension();
-40039: 
-40039: 
-40039: 
-40039:   if (y_affine_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type x_affine_dim = affine_dimension();
-40039:   ((void) 0);
-40039:   if (x_affine_dim != y_affine_dim) {
-40039:     return;
-40039:   }
-40039: 
-40039:   if (tp != 0 && *tp > 0) {
-40039:     BD_Shape<T> x_tmp(*this);
-40039:     x_tmp.BHMZ05_widening_assign(y, 0);
-40039: 
-40039:     if (!contains(x_tmp)) {
-40039:       --(*tp);
-40039:     }
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: 
-40039:   y.shortest_path_reduction_assign();
-40039: 
-40039: 
-40039:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
-40039:     DB_Row<N>& dbm_i = dbm[i];
-40039:     const DB_Row<N>& y_dbm_i = y.dbm[i];
-40039:     const Bit_Row& y_redundancy_i = y.redundancy_dbm[i];
-40039:     for (dimension_type j = space_dim + 1; j-- > 0; ) {
-40039:       N& dbm_ij = dbm_i[j];
-40039: 
-40039: 
-40039: 
-40039:       if (y_redundancy_i[j] || y_dbm_i[j] != dbm_ij) {
-40039:         assign_r(dbm_ij, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   reset_shortest_path_closed();
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::limited_BHMZ05_extrapolation_assign(const BD_Shape& y,
-40039:                                                  const Constraint_System& cs,
-40039:                                                  unsigned* tp) {
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039:   if (space_dim != y.space_dimension()) {
-40039:     throw_dimension_incompatible("limited_BHMZ05_extrapolation_assign(y, cs)",
-40039:                                  y);
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type cs_space_dim = cs.space_dimension();
-40039:   if (space_dim < cs_space_dim) {
-40039:     throw_invalid_argument("limited_BHMZ05_extrapolation_assign(y, cs)",
-40039:                            "cs is space-dimension incompatible");
-40039:   }
-40039: 
-40039:   if (cs.has_strict_inequalities()) {
-40039:     throw_invalid_argument("limited_BHMZ05_extrapolation_assign(y, cs)",
-40039:                            "cs has strict inequalities");
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   if (y.marked_empty()) {
-40039:     return;
-40039:   }
-40039:   BD_Shape<T> limiting_shape(space_dim, UNIVERSE);
-40039:   get_limiting_shape(cs, limiting_shape);
-40039:   BHMZ05_widening_assign(y, tp);
-40039:   intersection_assign(limiting_shape);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::CC76_narrowing_assign(const BD_Shape& y) {
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039: 
-40039:   if (space_dim != y.space_dimension()) {
-40039:     throw_dimension_incompatible("CC76_narrowing_assign(y)", y);
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return;
-40039:   }
-40039:   y.shortest_path_closure_assign();
-40039: 
-40039:   if (y.marked_empty()) {
-40039:     return;
-40039:   }
-40039:   shortest_path_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   bool changed = false;
-40039:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
-40039:     DB_Row<N>& dbm_i = dbm[i];
-40039:     const DB_Row<N>& y_dbm_i = y.dbm[i];
-40039:     for (dimension_type j = space_dim + 1; j-- > 0; ) {
-40039:       N& dbm_ij = dbm_i[j];
-40039:       const N& y_dbm_ij = y_dbm_i[j];
-40039:       if (!is_plus_infinity(dbm_ij)
-40039:           && !is_plus_infinity(y_dbm_ij)
-40039:           && dbm_ij != y_dbm_ij) {
-40039:         dbm_ij = y_dbm_ij;
-40039:         changed = true;
-40039:       }
-40039:     }
-40039:   }
-40039:   if (changed && marked_shortest_path_closed()) {
-40039:     reset_shortest_path_closed();
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>
-40039: ::deduce_v_minus_u_bounds(const dimension_type v,
-40039:                           const dimension_type last_v,
-40039:                           const Linear_Expression& sc_expr,
-40039:                           Coefficient_traits::const_reference sc_denom,
-40039:                           const N& ub_v) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: # 3423 "../../src/BD_Shape_templates.hh"
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_mpq_sc_denom; mpq_class& mpq_sc_denom = holder_mpq_sc_denom.item();
-40039:   assign_r(mpq_sc_denom, sc_denom, ROUND_NOT_NEEDED);
-40039:   const DB_Row<N>& dbm_0 = dbm[0];
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_minus_lb_u; mpq_class& minus_lb_u = holder_minus_lb_u.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_ub_u; mpq_class& ub_u = holder_ub_u.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_up_approx; N& up_approx = holder_up_approx.item();
-40039:   for (Linear_Expression::const_iterator u = sc_expr.begin(),
-40039:         u_end = sc_expr.lower_bound(Variable(last_v)); u != u_end; ++u) {
-40039:     const dimension_type u_dim = u.variable().space_dimension();
-40039:     if (u_dim == v) {
-40039:       continue;
-40039:     }
-40039:     const Coefficient& expr_u = *u;
-40039:     if (expr_u < 0) {
-40039:       continue;
-40039:     }
-40039:     ((void) 0);
-40039:     if (expr_u >= sc_denom) {
-40039: 
-40039:       sub_assign_r(dbm[u_dim][v], ub_v, dbm_0[u_dim], ROUND_UP);
-40039:     }
-40039:     else {
-40039:       DB_Row<N>& dbm_u = dbm[u_dim];
-40039:       const N& dbm_u0 = dbm_u[0];
-40039:       if (!is_plus_infinity(dbm_u0)) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:         assign_r(minus_lb_u, dbm_u0, ROUND_NOT_NEEDED);
-40039:         assign_r(q, expr_u, ROUND_NOT_NEEDED);
-40039:         div_assign_r(q, q, mpq_sc_denom, ROUND_NOT_NEEDED);
-40039:         assign_r(ub_u, dbm_0[u_dim], ROUND_NOT_NEEDED);
-40039: 
-40039:         add_assign_r(ub_u, ub_u, minus_lb_u, ROUND_NOT_NEEDED);
-40039: 
-40039:         sub_mul_assign_r(minus_lb_u, q, ub_u, ROUND_NOT_NEEDED);
-40039:         assign_r(up_approx, minus_lb_u, ROUND_UP);
-40039: 
-40039:         add_assign_r(dbm_u[v], ub_v, up_approx, ROUND_UP);
-40039:       }
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>
-40039: ::deduce_u_minus_v_bounds(const dimension_type v,
-40039:                           const dimension_type last_v,
-40039:                           const Linear_Expression& sc_expr,
-40039:                           Coefficient_traits::const_reference sc_denom,
-40039:                           const N& minus_lb_v) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: # 3490 "../../src/BD_Shape_templates.hh"
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_mpq_sc_denom; mpq_class& mpq_sc_denom = holder_mpq_sc_denom.item();
-40039:   assign_r(mpq_sc_denom, sc_denom, ROUND_NOT_NEEDED);
-40039:   DB_Row<N>& dbm_0 = dbm[0];
-40039:   DB_Row<N>& dbm_v = dbm[v];
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_ub_u; mpq_class& ub_u = holder_ub_u.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_minus_lb_u; mpq_class& minus_lb_u = holder_minus_lb_u.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_up_approx; N& up_approx = holder_up_approx.item();
-40039: 
-40039:   for (Linear_Expression::const_iterator u = sc_expr.begin(),
-40039:         u_end = sc_expr.lower_bound(Variable(last_v)); u != u_end; ++u) {
-40039:     const Variable u_var = u.variable();
-40039:     const dimension_type u_dim = u_var.space_dimension();
-40039:     if (u_var.space_dimension() == v) {
-40039:       continue;
-40039:     }
-40039:     const Coefficient& expr_u = *u;
-40039:     if (expr_u < 0) {
-40039:       continue;
-40039:     }
-40039:     ((void) 0);
-40039:     if (expr_u >= sc_denom) {
-40039: 
-40039: 
-40039:       sub_assign_r(dbm_v[u_dim], minus_lb_v, dbm[u_dim][0], ROUND_UP);
-40039:     }
-40039:     else {
-40039:       const N& dbm_0u = dbm_0[u_dim];
-40039:       if (!is_plus_infinity(dbm_0u)) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:         assign_r(ub_u, dbm_0u, ROUND_NOT_NEEDED);
-40039:         assign_r(q, expr_u, ROUND_NOT_NEEDED);
-40039:         div_assign_r(q, q, mpq_sc_denom, ROUND_NOT_NEEDED);
-40039:         assign_r(minus_lb_u, dbm[u_dim][0], ROUND_NOT_NEEDED);
-40039: 
-40039:         add_assign_r(minus_lb_u, minus_lb_u, ub_u, ROUND_NOT_NEEDED);
-40039: 
-40039:         sub_mul_assign_r(ub_u, q, minus_lb_u, ROUND_NOT_NEEDED);
-40039:         assign_r(up_approx, ub_u, ROUND_UP);
-40039: 
-40039:         add_assign_r(dbm_v[u_dim], up_approx, minus_lb_v, ROUND_UP);
-40039:       }
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::forget_all_dbm_constraints(const dimension_type v) {
-40039:   ((void) 0);
-40039:   DB_Row<N>& dbm_v = dbm[v];
-40039:   for (dimension_type i = dbm.num_rows(); i-- > 0; ) {
-40039:     assign_r(dbm_v[i], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     assign_r(dbm[i][v], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::forget_binary_dbm_constraints(const dimension_type v) {
-40039:   ((void) 0);
-40039:   DB_Row<N>& dbm_v = dbm[v];
-40039:   for (dimension_type i = dbm.num_rows()-1; i > 0; --i) {
-40039:     assign_r(dbm_v[i], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     assign_r(dbm[i][v], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::unconstrain(const Variable var) {
-40039: 
-40039:   const dimension_type var_space_dim = var.space_dimension();
-40039:   if (space_dimension() < var_space_dim) {
-40039:     throw_dimension_incompatible("unconstrain(var)", var_space_dim);
-40039:   }
-40039: 
-40039: 
-40039:   shortest_path_closure_assign();
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039:   forget_all_dbm_constraints(var_space_dim);
-40039: 
-40039:   reset_shortest_path_reduced();
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::unconstrain(const Variables_Set& vars) {
-40039: 
-40039: 
-40039:   if (vars.empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   const dimension_type min_space_dim = vars.space_dimension();
-40039:   if (space_dimension() < min_space_dim) {
-40039:     throw_dimension_incompatible("unconstrain(vs)", min_space_dim);
-40039:   }
-40039: 
-40039: 
-40039:   shortest_path_closure_assign();
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039:   for (Variables_Set::const_iterator vsi = vars.begin(),
-40039:          vsi_end = vars.end(); vsi != vsi_end; ++vsi) {
-40039:     forget_all_dbm_constraints(*vsi + 1);
-40039:   }
-40039: 
-40039:   reset_shortest_path_reduced();
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::refine(const Variable var,
-40039:                     const Relation_Symbol relsym,
-40039:                     const Linear_Expression& expr,
-40039:                     Coefficient_traits::const_reference denominator) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   const dimension_type v = var.id() + 1;
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039:   const Coefficient& b = expr.inhomogeneous_term();
-40039: 
-40039: 
-40039:   dimension_type t = 0;
-40039: 
-40039:   dimension_type w = expr.last_nonzero();
-40039: 
-40039:   if (w != 0) {
-40039:     ++t;
-40039:     if (!expr.all_zeroes(1, w)) {
-40039:       ++t;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (t == 1 && expr.get(Variable(w - 1)) != denominator) {
-40039:     t = 2;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const DB_Row<N>& dbm_0 = dbm[0];
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item();
-40039:   neg_assign(minus_denom, denominator);
-40039: 
-40039:   if (t == 0) {
-40039: 
-40039:     switch (relsym) {
-40039:     case EQUAL:
-40039: 
-40039:       add_dbm_constraint(0, v, b, denominator);
-40039:       add_dbm_constraint(v, 0, b, minus_denom);
-40039:       break;
-40039:     case LESS_OR_EQUAL:
-40039: 
-40039:       add_dbm_constraint(0, v, b, denominator);
-40039:       break;
-40039:     case GREATER_OR_EQUAL:
-40039: 
-40039: 
-40039:       add_dbm_constraint(v, 0, b, minus_denom);
-40039:       break;
-40039:     default:
-40039: 
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       break;
-40039:     }
-40039:     return;
-40039:   }
-40039: 
-40039:   if (t == 1) {
-40039: 
-40039:     ((void) 0);
-40039:     Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
-40039:     switch (relsym) {
-40039:     case EQUAL:
-40039: 
-40039:       div_round_up(d, b, denominator);
-40039:       add_dbm_constraint(w, v, d);
-40039: 
-40039: 
-40039:       div_round_up(d, b, minus_denom);
-40039:       add_dbm_constraint(v, w, d);
-40039:       break;
-40039:     case LESS_OR_EQUAL:
-40039: 
-40039:       div_round_up(d, b, denominator);
-40039:       add_dbm_constraint(w, v, d);
-40039:       break;
-40039:     case GREATER_OR_EQUAL:
-40039: 
-40039: 
-40039:       div_round_up(d, b, minus_denom);
-40039:       add_dbm_constraint(v, w, d);
-40039:       break;
-40039:     default:
-40039: 
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       break;
-40039:     }
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const bool is_sc = (denominator > 0);
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item();
-40039:   neg_assign(minus_b, b);
-40039:   const Coefficient& sc_b = is_sc ? b : minus_b;
-40039:   const Coefficient& minus_sc_b = is_sc ? minus_b : b;
-40039:   const Coefficient& sc_denom = is_sc ? denominator : minus_denom;
-40039:   const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator;
-40039: 
-40039: 
-40039: 
-40039:   Linear_Expression minus_expr;
-40039:   if (!is_sc) {
-40039:     minus_expr = -expr;
-40039:   }
-40039:   const Linear_Expression& sc_expr = is_sc ? expr : minus_expr;
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_sum; N& sum = holder_sum.item();
-40039: 
-40039:   dimension_type pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
-40039: 
-40039:   dimension_type pinf_count = 0;
-40039: 
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_i; N& coeff_i = holder_coeff_i.item();
-40039: 
-40039:   switch (relsym) {
-40039:   case EQUAL:
-40039:     {
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_neg_sum; N& neg_sum = holder_neg_sum.item();
-40039: 
-40039:       dimension_type neg_pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
-40039: 
-40039:       dimension_type neg_pinf_count = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       assign_r(sum, sc_b, ROUND_UP);
-40039:       assign_r(neg_sum, minus_sc_b, ROUND_UP);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       for (Linear_Expression::const_iterator i = sc_expr.begin(),
-40039:             i_end = sc_expr.lower_bound(Variable(w)); i != i_end; ++i) {
-40039:         const dimension_type i_dim = i.variable().space_dimension();
-40039:         const Coefficient& sc_i = *i;
-40039:         const int sign_i = sgn(sc_i);
-40039:         ((void) 0);
-40039:         if (sign_i > 0) {
-40039:           assign_r(coeff_i, sc_i, ROUND_UP);
-40039: 
-40039:           if (pinf_count <= 1) {
-40039:             const N& approx_i = dbm_0[i_dim];
-40039:             if (!is_plus_infinity(approx_i)) {
-40039:               add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP);
-40039:             }
-40039:             else {
-40039:               ++pinf_count;
-40039:               pinf_index = i_dim;
-40039:             }
-40039:           }
-40039: 
-40039:           if (neg_pinf_count <= 1) {
-40039:             const N& approx_minus_i = dbm[i_dim][0];
-40039:             if (!is_plus_infinity(approx_minus_i)) {
-40039:               add_mul_assign_r(neg_sum, coeff_i, approx_minus_i, ROUND_UP);
-40039:             }
-40039:             else {
-40039:               ++neg_pinf_count;
-40039:               neg_pinf_index = i_dim;
-40039:             }
-40039:           }
-40039:         }
-40039:         else {
-40039:           ((void) 0);
-40039:           neg_assign(minus_sc_i, sc_i);
-40039: 
-40039:           assign_r(coeff_i, minus_sc_i, ROUND_UP);
-40039: 
-40039:           if (pinf_count <= 1) {
-40039:             const N& approx_minus_i = dbm[i_dim][0];
-40039:             if (!is_plus_infinity(approx_minus_i)) {
-40039:               add_mul_assign_r(sum, coeff_i, approx_minus_i, ROUND_UP);
-40039:             }
-40039:             else {
-40039:               ++pinf_count;
-40039:               pinf_index = i_dim;
-40039:             }
-40039:           }
-40039: 
-40039:           if (neg_pinf_count <= 1) {
-40039:             const N& approx_i = dbm_0[i_dim];
-40039:             if (!is_plus_infinity(approx_i)) {
-40039:               add_mul_assign_r(neg_sum, coeff_i, approx_i, ROUND_UP);
-40039:             }
-40039:             else {
-40039:               ++neg_pinf_count;
-40039:               neg_pinf_index = i_dim;
-40039:             }
-40039:           }
-40039:         }
-40039:       }
-40039: 
-40039:       if (pinf_count > 1 && neg_pinf_count > 1) {
-40039:         ((void) 0);
-40039:         return;
-40039:       }
-40039: 
-40039: 
-40039:       reset_shortest_path_closed();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
-40039:       assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
-40039:       neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
-40039: 
-40039: 
-40039:       if (pinf_count <= 1) {
-40039: 
-40039:         if (down_sc_denom != 1) {
-40039:           div_assign_r(sum, sum, down_sc_denom, ROUND_UP);
-40039:         }
-40039: 
-40039:         if (pinf_count == 0) {
-40039: 
-40039:           dbm[0][v] = sum;
-40039: 
-40039:           deduce_v_minus_u_bounds(v, w, sc_expr, sc_denom, sum);
-40039:         }
-40039:         else {
-40039: 
-40039:           if (pinf_index != v
-40039:               && sc_expr.get(Variable(pinf_index - 1)) == sc_denom) {
-40039: 
-40039:             dbm[pinf_index][v] = sum;
-40039:           }
-40039:         }
-40039:       }
-40039: 
-40039: 
-40039:       if (neg_pinf_count <= 1) {
-40039: 
-40039:         if (down_sc_denom != 1) {
-40039:           div_assign_r(neg_sum, neg_sum, down_sc_denom, ROUND_UP);
-40039:         }
-40039: 
-40039:         if (neg_pinf_count == 0) {
-40039: 
-40039:           DB_Row<N>& dbm_v = dbm[v];
-40039:           dbm_v[0] = neg_sum;
-40039: 
-40039:           deduce_u_minus_v_bounds(v, w, sc_expr, sc_denom, neg_sum);
-40039:         }
-40039: 
-40039:         else if (neg_pinf_index != v
-40039:               && sc_expr.get(Variable(neg_pinf_index - 1)) == sc_denom) {
-40039: 
-40039: 
-40039:             dbm[v][neg_pinf_index] = neg_sum;
-40039:         }
-40039:       }
-40039:     }
-40039:     break;
-40039: 
-40039:   case LESS_OR_EQUAL:
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     assign_r(sum, sc_b, ROUND_UP);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     for (Linear_Expression::const_iterator i = sc_expr.begin(),
-40039:           i_end = sc_expr.lower_bound(Variable(w)); i != i_end; ++i) {
-40039:       const Coefficient& sc_i = *i;
-40039:       const dimension_type i_dim = i.variable().space_dimension();
-40039:       const int sign_i = sgn(sc_i);
-40039:       ((void) 0);
-40039: 
-40039:       const N& approx_i = (sign_i > 0) ? dbm_0[i_dim] : dbm[i_dim][0];
-40039:       if (is_plus_infinity(approx_i)) {
-40039:         if (++pinf_count > 1) {
-40039:           break;
-40039:         }
-40039:         pinf_index = i_dim;
-40039:         continue;
-40039:       }
-40039:       if (sign_i > 0) {
-40039:         assign_r(coeff_i, sc_i, ROUND_UP);
-40039:       }
-40039:       else {
-40039:         neg_assign(minus_sc_i, sc_i);
-40039:         assign_r(coeff_i, minus_sc_i, ROUND_UP);
-40039:       }
-40039:       add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP);
-40039:     }
-40039: 
-40039: 
-40039:     if (sc_denom != 1) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
-40039:       assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
-40039:       neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
-40039:       div_assign_r(sum, sum, down_sc_denom, ROUND_UP);
-40039:     }
-40039: 
-40039:     if (pinf_count == 0) {
-40039: 
-40039:       add_dbm_constraint(0, v, sum);
-40039: 
-40039:       deduce_v_minus_u_bounds(v, w, sc_expr, sc_denom, sum);
-40039:     }
-40039:     else if (pinf_count == 1) {
-40039:       if (expr.get(Variable(pinf_index - 1)) == denominator) {
-40039: 
-40039:         add_dbm_constraint(pinf_index, v, sum);
-40039:       }
-40039:     }
-40039:     break;
-40039: 
-40039:   case GREATER_OR_EQUAL:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     assign_r(sum, minus_sc_b, ROUND_UP);
-40039: 
-40039: 
-40039:     for (Linear_Expression::const_iterator i = sc_expr.begin(),
-40039:           i_end = sc_expr.lower_bound(Variable(w)); i != i_end; ++i) {
-40039:       const Coefficient& sc_i = *i;
-40039:       const dimension_type i_dim = i.variable().space_dimension();
-40039:       const int sign_i = sgn(sc_i);
-40039:       ((void) 0);
-40039: 
-40039:       const N& approx_i = (sign_i > 0) ? dbm[i_dim][0] : dbm_0[i_dim];
-40039:       if (is_plus_infinity(approx_i)) {
-40039:         if (++pinf_count > 1) {
-40039:           break;
-40039:         }
-40039:         pinf_index = i_dim;
-40039:         continue;
-40039:       }
-40039:       if (sign_i > 0) {
-40039:         assign_r(coeff_i, sc_i, ROUND_UP);
-40039:       }
-40039:       else {
-40039:         neg_assign(minus_sc_i, sc_i);
-40039:         assign_r(coeff_i, minus_sc_i, ROUND_UP);
-40039:       }
-40039:       add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP);
-40039:     }
-40039: 
-40039: 
-40039:     if (sc_denom != 1) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
-40039:       assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
-40039:       neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
-40039:       div_assign_r(sum, sum, down_sc_denom, ROUND_UP);
-40039:     }
-40039: 
-40039:     if (pinf_count == 0) {
-40039: 
-40039:       add_dbm_constraint(v, 0, sum);
-40039: 
-40039:       deduce_u_minus_v_bounds(v, w, sc_expr, sc_denom, sum);
-40039:     }
-40039:     else if (pinf_count == 1) {
-40039:       if (pinf_index != v
-40039:           && expr.get(Variable(pinf_index - 1)) == denominator) {
-40039: 
-40039: 
-40039:         add_dbm_constraint(v, pinf_index, sum);
-40039:       }
-40039:     }
-40039:     break;
-40039: 
-40039:   default:
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     break;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::affine_image(const Variable var,
-40039:                           const Linear_Expression& expr,
-40039:                           Coefficient_traits::const_reference denominator) {
-40039: 
-40039:   if (denominator == 0) {
-40039:     throw_invalid_argument("affine_image(v, e, d)", "d == 0");
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039:   const dimension_type expr_space_dim = expr.space_dimension();
-40039:   if (space_dim < expr_space_dim) {
-40039:     throw_dimension_incompatible("affine_image(v, e, d)", "e", expr);
-40039:   }
-40039: 
-40039:   const dimension_type v = var.id() + 1;
-40039:   if (v > space_dim) {
-40039:     throw_dimension_incompatible("affine_image(v, e, d)", var.id());
-40039:   }
-40039: 
-40039:   shortest_path_closure_assign();
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039:   const Coefficient& b = expr.inhomogeneous_term();
-40039: 
-40039: 
-40039:   dimension_type t = 0;
-40039: 
-40039:   dimension_type w = expr.last_nonzero();
-40039: 
-40039:   if (w != 0) {
-40039:     ++t;
-40039:     if (!expr.all_zeroes(1, w)) {
-40039:       ++t;
-40039:     }
-40039:   }
-40039: # 4071 "../../src/BD_Shape_templates.hh"
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item();
-40039:   neg_assign(minus_denom, denominator);
-40039: 
-40039:   if (t == 0) {
-40039: 
-40039: 
-40039:     forget_all_dbm_constraints(v);
-40039: 
-40039:     if (marked_shortest_path_reduced()) {
-40039:       reset_shortest_path_reduced();
-40039:     }
-40039: 
-40039:     add_dbm_constraint(0, v, b, denominator);
-40039:     add_dbm_constraint(v, 0, b, minus_denom);
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039:   if (t == 1) {
-40039: 
-40039:     const Coefficient& a = expr.get(Variable(w - 1));
-40039:     if (a == denominator || a == minus_denom) {
-40039: 
-40039:       if (w == v) {
-40039: 
-40039:         if (a == denominator) {
-40039:           if (b == 0) {
-40039: 
-40039:             return;
-40039:           }
-40039:           else {
-40039: 
-40039: 
-40039:             Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
-40039:             div_round_up(d, b, denominator);
-40039:             Parma_Polyhedra_Library::Dirty_Temp<N> holder_c; N& c = holder_c.item();
-40039:             div_round_up(c, b, minus_denom);
-40039:             DB_Row<N>& dbm_v = dbm[v];
-40039:             for (dimension_type i = space_dim + 1; i-- > 0; ) {
-40039:               N& dbm_vi = dbm_v[i];
-40039:               add_assign_r(dbm_vi, dbm_vi, c, ROUND_UP);
-40039:               N& dbm_iv = dbm[i][v];
-40039:               add_assign_r(dbm_iv, dbm_iv, d, ROUND_UP);
-40039:             }
-40039: 
-40039:           }
-40039:         }
-40039:         else {
-40039: 
-40039: 
-40039:           forget_binary_dbm_constraints(v);
-40039: 
-40039:           using std::swap;
-40039:           swap(dbm[v][0], dbm[0][v]);
-40039: 
-40039:           reset_shortest_path_closed();
-40039:           if (b != 0) {
-40039: 
-40039: 
-40039:             Parma_Polyhedra_Library::Dirty_Temp<N> holder_c; N& c = holder_c.item();
-40039:             div_round_up(c, b, minus_denom);
-40039:             N& dbm_v0 = dbm[v][0];
-40039:             add_assign_r(dbm_v0, dbm_v0, c, ROUND_UP);
-40039:             Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
-40039:             div_round_up(d, b, denominator);
-40039:             N& dbm_0v = dbm[0][v];
-40039:             add_assign_r(dbm_0v, dbm_0v, d, ROUND_UP);
-40039:           }
-40039:         }
-40039:       }
-40039:       else {
-40039: 
-40039: 
-40039: 
-40039:         forget_all_dbm_constraints(v);
-40039: 
-40039:         if (marked_shortest_path_reduced()) {
-40039:           reset_shortest_path_reduced();
-40039:         }
-40039:         if (a == denominator) {
-40039: 
-40039:           add_dbm_constraint(w, v, b, denominator);
-40039:           add_dbm_constraint(v, w, b, minus_denom);
-40039:         }
-40039:         else {
-40039: 
-40039: 
-40039: 
-40039:           const N& dbm_w0 = dbm[w][0];
-40039:           if (!is_plus_infinity(dbm_w0)) {
-40039: 
-40039:             Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
-40039:             div_round_up(d, b, denominator);
-40039:             add_assign_r(dbm[0][v], d, dbm_w0, ROUND_UP);
-40039:             reset_shortest_path_closed();
-40039:           }
-40039:           const N& dbm_0w = dbm[0][w];
-40039:           if (!is_plus_infinity(dbm_0w)) {
-40039: 
-40039:             Parma_Polyhedra_Library::Dirty_Temp<N> holder_c; N& c = holder_c.item();
-40039:             div_round_up(c, b, minus_denom);
-40039:             add_assign_r(dbm[v][0], dbm_0w, c, ROUND_UP);
-40039:             reset_shortest_path_closed();
-40039:           }
-40039:         }
-40039:       }
-40039:       ((void) 0);
-40039:       return;
-40039:     }
-40039:   }
-40039: # 4194 "../../src/BD_Shape_templates.hh"
-40039:   const bool is_sc = (denominator > 0);
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item();
-40039:   neg_assign(minus_b, b);
-40039:   const Coefficient& sc_b = is_sc ? b : minus_b;
-40039:   const Coefficient& minus_sc_b = is_sc ? minus_b : b;
-40039:   const Coefficient& sc_denom = is_sc ? denominator : minus_denom;
-40039:   const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator;
-40039: 
-40039: 
-40039: 
-40039:   Linear_Expression minus_expr;
-40039:   if (!is_sc) {
-40039:     minus_expr = -expr;
-40039:   }
-40039:   const Linear_Expression& sc_expr = is_sc ? expr : minus_expr;
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_pos_sum; N& pos_sum = holder_pos_sum.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_neg_sum; N& neg_sum = holder_neg_sum.item();
-40039: 
-40039:   dimension_type pos_pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
-40039:   dimension_type neg_pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
-40039: 
-40039:   dimension_type pos_pinf_count = 0;
-40039:   dimension_type neg_pinf_count = 0;
-40039: 
-40039: 
-40039:   assign_r(pos_sum, sc_b, ROUND_UP);
-40039:   assign_r(neg_sum, minus_sc_b, ROUND_UP);
-40039: 
-40039: 
-40039:   const DB_Row<N>& dbm_0 = dbm[0];
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_i; N& coeff_i = holder_coeff_i.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item();
-40039: 
-40039: 
-40039: 
-40039:   for (Linear_Expression::const_iterator i = sc_expr.begin(),
-40039:         i_end = sc_expr.lower_bound(Variable(w)); i != i_end; ++i) {
-40039:     const Coefficient& sc_i = *i;
-40039:     const dimension_type i_dim = i.variable().space_dimension();
-40039:     const int sign_i = sgn(sc_i);
-40039:     if (sign_i > 0) {
-40039:       assign_r(coeff_i, sc_i, ROUND_UP);
-40039: 
-40039:       if (pos_pinf_count <= 1) {
-40039:         const N& up_approx_i = dbm_0[i_dim];
-40039:         if (!is_plus_infinity(up_approx_i)) {
-40039:           add_mul_assign_r(pos_sum, coeff_i, up_approx_i, ROUND_UP);
-40039:         }
-40039:         else {
-40039:           ++pos_pinf_count;
-40039:           pos_pinf_index = i_dim;
-40039:         }
-40039:       }
-40039: 
-40039:       if (neg_pinf_count <= 1) {
-40039:         const N& up_approx_minus_i = dbm[i_dim][0];
-40039:         if (!is_plus_infinity(up_approx_minus_i)) {
-40039:           add_mul_assign_r(neg_sum, coeff_i, up_approx_minus_i, ROUND_UP);
-40039:         }
-40039:         else {
-40039:           ++neg_pinf_count;
-40039:           neg_pinf_index = i_dim;
-40039:         }
-40039:       }
-40039:     }
-40039:     else {
-40039:       ((void) 0);
-40039:       neg_assign(minus_sc_i, sc_i);
-40039: 
-40039:       assign_r(coeff_i, minus_sc_i, ROUND_UP);
-40039: 
-40039:       if (pos_pinf_count <= 1) {
-40039:         const N& up_approx_minus_i = dbm[i_dim][0];
-40039:         if (!is_plus_infinity(up_approx_minus_i)) {
-40039:           add_mul_assign_r(pos_sum, coeff_i, up_approx_minus_i, ROUND_UP);
-40039:         }
-40039:         else {
-40039:           ++pos_pinf_count;
-40039:           pos_pinf_index = i_dim;
-40039:         }
-40039:       }
-40039: 
-40039:       if (neg_pinf_count <= 1) {
-40039:         const N& up_approx_i = dbm_0[i_dim];
-40039:         if (!is_plus_infinity(up_approx_i)) {
-40039:           add_mul_assign_r(neg_sum, coeff_i, up_approx_i, ROUND_UP);
-40039:         }
-40039:         else {
-40039:           ++neg_pinf_count;
-40039:           neg_pinf_index = i_dim;
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   forget_all_dbm_constraints(v);
-40039: 
-40039:   if (marked_shortest_path_reduced()) {
-40039:     reset_shortest_path_reduced();
-40039:   }
-40039: 
-40039:   if (pos_pinf_count > 1 && neg_pinf_count > 1) {
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   reset_shortest_path_closed();
-40039: 
-40039: 
-40039:   if (pos_pinf_count <= 1) {
-40039: 
-40039:     if (sc_denom != 1) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
-40039:       assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
-40039:       neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
-40039:       div_assign_r(pos_sum, pos_sum, down_sc_denom, ROUND_UP);
-40039:     }
-40039: 
-40039:     if (pos_pinf_count == 0) {
-40039: 
-40039:       dbm[0][v] = pos_sum;
-40039: 
-40039:       deduce_v_minus_u_bounds(v, w, sc_expr, sc_denom, pos_sum);
-40039:     }
-40039:     else if (pos_pinf_index != v
-40039:           && sc_expr.get(Variable(pos_pinf_index - 1)) == sc_denom) {
-40039: 
-40039:         dbm[pos_pinf_index][v] = pos_sum;
-40039:       }
-40039:   }
-40039: 
-40039: 
-40039:   if (neg_pinf_count <= 1) {
-40039: 
-40039:     if (sc_denom != 1) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
-40039:       assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
-40039:       neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
-40039:       div_assign_r(neg_sum, neg_sum, down_sc_denom, ROUND_UP);
-40039:     }
-40039: 
-40039:     if (neg_pinf_count == 0) {
-40039: 
-40039:       DB_Row<N>& dbm_v = dbm[v];
-40039:       dbm_v[0] = neg_sum;
-40039: 
-40039:       deduce_u_minus_v_bounds(v, w, sc_expr, sc_denom, neg_sum);
-40039:     }
-40039: 
-40039:     else if (neg_pinf_index != v
-40039:           && sc_expr.get(Variable(neg_pinf_index - 1)) == sc_denom) {
-40039: 
-40039: 
-40039:         dbm[v][neg_pinf_index] = neg_sum;
-40039:     }
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Interval_Info>
-40039: void
-40039: BD_Shape<T>::affine_form_image(const Variable var,
-40039:                     const Linear_Form< Interval<T, Interval_Info> >& lf) {
-40039: 
-40039: 
-40039:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_4375 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<T>::is_exact)>) }
-40039: 
-40039:                                                     ;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039:   const dimension_type lf_space_dim = lf.space_dimension();
-40039:   if (space_dim < lf_space_dim) {
-40039:     throw_dimension_incompatible("affine_form_image(var_id, l)", "l", lf);
-40039:   }
-40039: 
-40039:   const dimension_type var_id = var.id() + 1;
-40039:   if (space_dim < var_id) {
-40039:     throw_dimension_incompatible("affine_form_image(var_id, l)", var.id());
-40039:   }
-40039: 
-40039:   shortest_path_closure_assign();
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   dimension_type t = 0;
-40039: 
-40039:   dimension_type w_id = 0;
-40039: 
-40039:   for (dimension_type i = lf_space_dim; i-- > 0; ) {
-40039:     if (lf.coefficient(Variable(i)) != 0) {
-40039:       if (t++ == 1) {
-40039:         break;
-40039:       }
-40039:       else {
-40039:         w_id = i + 1;
-40039:       }
-40039:     }
-40039:   }
-40039:   typedef Interval<T, Interval_Info> FP_Interval_Type;
-40039: 
-40039:   const FP_Interval_Type& b = lf.inhomogeneous_term();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (t == 0) {
-40039:     inhomogeneous_affine_form_image(var_id, b);
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039:   else if (t == 1) {
-40039:     const FP_Interval_Type& w_coeff = lf.coefficient(Variable(w_id - 1));
-40039:     if (w_coeff == 1 || w_coeff == -1) {
-40039:       one_variable_affine_form_image(var_id, b, w_coeff, w_id, space_dim);
-40039:       ((void) 0);
-40039:       return;
-40039:     }
-40039:   }
-40039:   two_variables_affine_form_image(var_id, lf, space_dim);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: template <typename Interval_Info>
-40039: void
-40039: BD_Shape<T>
-40039: ::inhomogeneous_affine_form_image(const dimension_type& var_id,
-40039:                                   const Interval<T, Interval_Info>& b) {
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_b_ub; N& b_ub = holder_b_ub.item();
-40039:   assign_r(b_ub, b.upper(), ROUND_NOT_NEEDED);
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_b_mlb; N& b_mlb = holder_b_mlb.item();
-40039:   neg_assign_r(b_mlb, b.lower(), ROUND_NOT_NEEDED);
-40039: 
-40039: 
-40039:   forget_all_dbm_constraints(var_id);
-40039: 
-40039:   if (marked_shortest_path_reduced()) {
-40039:     reset_shortest_path_reduced();
-40039:   }
-40039: 
-40039:   add_dbm_constraint(0, var_id, b_ub);
-40039:   add_dbm_constraint(var_id, 0, b_mlb);
-40039:   return;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: template <typename Interval_Info>
-40039: void BD_Shape<T>
-40039: ::one_variable_affine_form_image(const dimension_type& var_id,
-40039:                             const Interval<T, Interval_Info>& b,
-40039:                             const Interval<T, Interval_Info>& w_coeff,
-40039:                             const dimension_type& w_id,
-40039:                             const dimension_type& space_dim) {
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_b_ub; N& b_ub = holder_b_ub.item();
-40039:   assign_r(b_ub, b.upper(), ROUND_NOT_NEEDED);
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_b_mlb; N& b_mlb = holder_b_mlb.item();
-40039:   neg_assign_r(b_mlb, b.lower(), ROUND_NOT_NEEDED);
-40039: 
-40039: 
-40039:   bool is_w_coeff_one = (w_coeff == 1);
-40039: 
-40039:   if (w_id == var_id) {
-40039: 
-40039:     bool is_b_zero = (b_mlb == 0 && b_ub == 0);
-40039: 
-40039:     if (is_w_coeff_one) {
-40039:       if (is_b_zero) {
-40039: 
-40039:         return;
-40039:       }
-40039:       else {
-40039: 
-40039: 
-40039:         DB_Row<N>& dbm_v = dbm[var_id];
-40039:         for (dimension_type i = space_dim + 1; i-- > 0; ) {
-40039:           N& dbm_vi = dbm_v[i];
-40039:           add_assign_r(dbm_vi, dbm_vi, b_mlb, ROUND_UP);
-40039:           N& dbm_iv = dbm[i][var_id];
-40039:           add_assign_r(dbm_iv, dbm_iv, b_ub, ROUND_UP);
-40039:         }
-40039: 
-40039:       }
-40039:     }
-40039:     else {
-40039: 
-40039: 
-40039:       forget_binary_dbm_constraints(var_id);
-40039:       using std::swap;
-40039:       swap(dbm[var_id][0], dbm[0][var_id]);
-40039: 
-40039:       reset_shortest_path_closed();
-40039:       if (!is_b_zero) {
-40039: 
-40039: 
-40039:         N& dbm_v0 = dbm[var_id][0];
-40039:         add_assign_r(dbm_v0, dbm_v0, b_mlb, ROUND_UP);
-40039:         N& dbm_0v = dbm[0][var_id];
-40039:         add_assign_r(dbm_0v, dbm_0v, b_ub, ROUND_UP);
-40039:       }
-40039:     }
-40039:   }
-40039:   else {
-40039: 
-40039: 
-40039: 
-40039:     forget_all_dbm_constraints(var_id);
-40039: 
-40039:     if (marked_shortest_path_reduced()) {
-40039:       reset_shortest_path_reduced();
-40039:     }
-40039:     if (is_w_coeff_one) {
-40039: 
-40039: 
-40039:       add_dbm_constraint(w_id, var_id, b_ub);
-40039:       add_dbm_constraint(var_id, w_id, b_mlb);
-40039:     }
-40039:     else {
-40039: 
-40039: 
-40039:       const N& mlb_w = dbm[w_id][0];
-40039:       if (!is_plus_infinity(mlb_w)) {
-40039: 
-40039:         add_assign_r(dbm[0][var_id], b_ub, mlb_w, ROUND_UP);
-40039:         reset_shortest_path_closed();
-40039:       }
-40039:       const N& ub_w = dbm[0][w_id];
-40039:       if (!is_plus_infinity(ub_w)) {
-40039: 
-40039:         add_assign_r(dbm[var_id][0], ub_w, b_mlb, ROUND_UP);
-40039:         reset_shortest_path_closed();
-40039:       }
-40039:     }
-40039:   }
-40039:   return;
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: template <typename Interval_Info>
-40039: void BD_Shape<T>
-40039: ::two_variables_affine_form_image(const dimension_type& var_id,
-40039:            const Linear_Form< Interval<T, Interval_Info> >& lf,
-40039:                              const dimension_type& space_dim) {
-40039: 
-40039:   if (marked_shortest_path_reduced()) {
-40039:     reset_shortest_path_reduced();
-40039:   }
-40039:   reset_shortest_path_closed();
-40039: 
-40039:   Linear_Form< Interval<T, Interval_Info> > minus_lf(lf);
-40039:   minus_lf.negate();
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_upper_bound; N& upper_bound = holder_upper_bound.item();
-40039: 
-40039: 
-40039:   for (dimension_type curr_var = 1; curr_var < var_id; ++curr_var) {
-40039:     Variable current(curr_var - 1);
-40039:     linear_form_upper_bound(lf - current, upper_bound);
-40039:     assign_r(dbm[curr_var][var_id], upper_bound, ROUND_NOT_NEEDED);
-40039:     linear_form_upper_bound(minus_lf + current, upper_bound);
-40039:     assign_r(dbm[var_id][curr_var], upper_bound, ROUND_NOT_NEEDED);
-40039:   }
-40039:   for (dimension_type curr_var = var_id + 1; curr_var <= space_dim;
-40039:                                                       ++curr_var) {
-40039:     Variable current(curr_var - 1);
-40039:     linear_form_upper_bound(lf - current, upper_bound);
-40039:     assign_r(dbm[curr_var][var_id], upper_bound, ROUND_NOT_NEEDED);
-40039:     linear_form_upper_bound(minus_lf + current, upper_bound);
-40039:     assign_r(dbm[var_id][curr_var], upper_bound, ROUND_NOT_NEEDED);
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_lf_ub; N& lf_ub = holder_lf_ub.item();
-40039:   linear_form_upper_bound(lf, lf_ub);
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_minus_lf_ub; N& minus_lf_ub = holder_minus_lf_ub.item();
-40039:   linear_form_upper_bound(minus_lf, minus_lf_ub);
-40039:   assign_r(dbm[0][var_id], lf_ub, ROUND_NOT_NEEDED);
-40039:   assign_r(dbm[var_id][0], minus_lf_ub, ROUND_NOT_NEEDED);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Interval_Info>
-40039: void BD_Shape<T>::refine_with_linear_form_inequality(
-40039:                    const Linear_Form< Interval<T, Interval_Info> >& left,
-40039:                    const Linear_Form< Interval<T, Interval_Info> >& right) {
-40039: 
-40039:     enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_4611 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<T>::is_exact)>) }
-40039: 
-40039:                                                     ;
-40039: 
-40039: 
-40039:     ((void) 0);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     const dimension_type left_space_dim = left.space_dimension();
-40039:     const dimension_type space_dim = space_dimension();
-40039:     if (space_dim < left_space_dim) {
-40039:       throw_dimension_incompatible(
-40039:           "refine_with_linear_form_inequality(left, right)", "left", left);
-40039:     }
-40039:     const dimension_type right_space_dim = right.space_dimension();
-40039:     if (space_dim < right_space_dim) {
-40039:       throw_dimension_incompatible(
-40039:           "refine_with_linear_form_inequality(left, right)", "right", right);
-40039:     }
-40039: 
-40039: 
-40039:   dimension_type left_t = 0;
-40039: 
-40039:   dimension_type left_w_id = 0;
-40039: 
-40039: 
-40039:   dimension_type right_t = 0;
-40039: 
-40039:   dimension_type right_w_id = 0;
-40039: 
-40039:   typedef Interval<T, Interval_Info> FP_Interval_Type;
-40039: 
-40039: 
-40039:   for (dimension_type i = left_space_dim; i-- > 0; ) {
-40039:     if (left.coefficient(Variable(i)) != 0) {
-40039:       if (left_t++ == 1) {
-40039:         break;
-40039:       }
-40039:       else {
-40039:         left_w_id = i;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   for (dimension_type i = right_space_dim; i-- > 0; ) {
-40039:     if (right.coefficient(Variable(i)) != 0) {
-40039:       if (right_t++ == 1) {
-40039:         break;
-40039:       }
-40039:       else {
-40039:         right_w_id = i;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   const FP_Interval_Type& left_w_coeff =
-40039:           left.coefficient(Variable(left_w_id));
-40039:   const FP_Interval_Type& right_w_coeff =
-40039:           right.coefficient(Variable(right_w_id));
-40039: 
-40039:   if (left_t == 0) {
-40039:     if (right_t == 0) {
-40039: 
-40039: 
-40039:       ((void) 0);
-40039:       return;
-40039:     }
-40039:     else if (right_w_coeff == 1 || right_w_coeff == -1) {
-40039:       left_inhomogeneous_refine(right_t, right_w_id, left, right);
-40039:       ((void) 0);
-40039:       return;
-40039:     }
-40039:   }
-40039:   else if (left_t == 1) {
-40039:     if (left_w_coeff == 1 || left_w_coeff == -1) {
-40039:       if (right_t == 0 || (right_w_coeff == 1 || right_w_coeff == -1)) {
-40039:         left_one_var_refine(left_w_id, right_t, right_w_id, left, right);
-40039:         ((void) 0);
-40039:         return;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   general_refine(left_w_id, right_w_id, left, right);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename U>
-40039: void
-40039: BD_Shape<T>
-40039: ::export_interval_constraints(U& dest) const {
-40039:   const dimension_type space_dim = space_dimension();
-40039:   if (space_dim > dest.space_dimension()) {
-40039:     throw std::invalid_argument(
-40039:                "BD_Shape<T>::export_interval_constraints");
-40039:   }
-40039: 
-40039: 
-40039:   shortest_path_closure_assign();
-40039: 
-40039:   if (marked_empty()) {
-40039:     dest.set_empty();
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_tmp; N& tmp = holder_tmp.item();
-40039:   const DB_Row<N>& dbm_0 = dbm[0];
-40039:   for (dimension_type i = space_dim; i-- > 0; ) {
-40039: 
-40039:     const N& u = dbm_0[i+1];
-40039:     if (!is_plus_infinity(u)) {
-40039:       if (!dest.restrict_upper(i, u.raw_value())) {
-40039:         return;
-40039:       }
-40039:     }
-40039: 
-40039:     const N& negated_l = dbm[i+1][0];
-40039:     if (!is_plus_infinity(negated_l)) {
-40039:       neg_assign_r(tmp, negated_l, ROUND_DOWN);
-40039:       if (!dest.restrict_lower(i, tmp.raw_value())) {
-40039:         return;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Interval_Info>
-40039: void
-40039: BD_Shape<T>::left_inhomogeneous_refine(const dimension_type& right_t,
-40039:                                        const dimension_type& right_w_id,
-40039:                     const Linear_Form< Interval<T, Interval_Info> >& left,
-40039:                     const Linear_Form< Interval<T, Interval_Info> >& right) {
-40039: 
-40039:   typedef Interval<T, Interval_Info> FP_Interval_Type;
-40039: 
-40039:   if (right_t == 1) {
-40039: 
-40039: 
-40039:       const FP_Interval_Type& right_w_coeff =
-40039:                               right.coefficient(Variable(right_w_id));
-40039:       if (right_w_coeff == 1) {
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_b_plus_minus_a_minus; N& b_plus_minus_a_minus = holder_b_plus_minus_a_minus.item();
-40039:         const FP_Interval_Type& left_a = left.inhomogeneous_term();
-40039:         const FP_Interval_Type& right_b = right.inhomogeneous_term();
-40039:         sub_assign_r(b_plus_minus_a_minus, right_b.upper(), left_a.lower(),
-40039:                      ROUND_UP);
-40039:         add_dbm_constraint(right_w_id+1, 0, b_plus_minus_a_minus);
-40039:         return;
-40039:       }
-40039: 
-40039:       if (right_w_coeff == -1) {
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_b_plus_minus_a_minus; N& b_plus_minus_a_minus = holder_b_plus_minus_a_minus.item();
-40039:         const FP_Interval_Type& left_a = left.inhomogeneous_term();
-40039:         const FP_Interval_Type& right_b = right.inhomogeneous_term();
-40039:         sub_assign_r(b_plus_minus_a_minus, right_b.upper(), left_a.lower(),
-40039:                      ROUND_UP);
-40039:         add_dbm_constraint(0, right_w_id+1, b_plus_minus_a_minus);
-40039:         return;
-40039:       }
-40039:     }
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: template <typename Interval_Info>
-40039: void
-40039: BD_Shape<T>
-40039: ::left_one_var_refine(const dimension_type& left_w_id,
-40039:                       const dimension_type& right_t,
-40039:                       const dimension_type& right_w_id,
-40039:                 const Linear_Form< Interval<T, Interval_Info> >& left,
-40039:                 const Linear_Form< Interval<T, Interval_Info> >& right) {
-40039: 
-40039:   typedef Interval<T, Interval_Info> FP_Interval_Type;
-40039: 
-40039:     if (right_t == 0) {
-40039: 
-40039: 
-40039:       const FP_Interval_Type& left_w_coeff =
-40039:         left.coefficient(Variable(left_w_id));
-40039: 
-40039:       if (left_w_coeff == 1) {
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item();
-40039:         const FP_Interval_Type& left_b = left.inhomogeneous_term();
-40039:         const FP_Interval_Type& right_a = right.inhomogeneous_term();
-40039:         sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(),
-40039:                      ROUND_UP);
-40039:         add_dbm_constraint(0, left_w_id+1, a_plus_minus_b_minus);
-40039:         return;
-40039:       }
-40039: 
-40039:       if (left_w_coeff == -1) {
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item();
-40039:         const FP_Interval_Type& left_b = left.inhomogeneous_term();
-40039:         const FP_Interval_Type& right_a = right.inhomogeneous_term();
-40039:         sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(),
-40039:                      ROUND_UP);
-40039:         add_dbm_constraint(left_w_id+1, 0, a_plus_minus_b_minus);
-40039:         return;
-40039:       }
-40039:     }
-40039:     else if (right_t == 1) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const FP_Interval_Type& left_w_coeff =
-40039:                               left.coefficient(Variable(left_w_id));
-40039: 
-40039:       const FP_Interval_Type& right_w_coeff =
-40039:                               right.coefficient(Variable(right_w_id));
-40039: 
-40039:       bool is_left_coeff_one = (left_w_coeff == 1);
-40039:       bool is_left_coeff_minus_one = (left_w_coeff == -1);
-40039:       bool is_right_coeff_one = (right_w_coeff == 1);
-40039:       bool is_right_coeff_minus_one = (right_w_coeff == -1);
-40039:       if (left_w_id == right_w_id) {
-40039:         if ((is_left_coeff_one && is_right_coeff_one)
-40039:             ||
-40039:             (is_left_coeff_minus_one && is_right_coeff_minus_one)) {
-40039: 
-40039:           return;
-40039:         }
-40039:         if (is_left_coeff_one && is_right_coeff_minus_one) {
-40039: 
-40039:           Parma_Polyhedra_Library::Dirty_Temp<N> holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item();
-40039:           const FP_Interval_Type& left_b = left.inhomogeneous_term();
-40039:           const FP_Interval_Type& right_a = right.inhomogeneous_term();
-40039:           sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(),
-40039:                        ROUND_UP);
-40039:           div_2exp_assign_r(a_plus_minus_b_minus, a_plus_minus_b_minus, 1,
-40039:                             ROUND_UP);
-40039:           add_dbm_constraint(0, left_w_id + 1, a_plus_minus_b_minus);
-40039:           return;
-40039:         }
-40039:         if (is_left_coeff_minus_one && is_right_coeff_one) {
-40039: 
-40039:           Parma_Polyhedra_Library::Dirty_Temp<N> holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item();
-40039:           const FP_Interval_Type& left_b = left.inhomogeneous_term();
-40039:           const FP_Interval_Type& right_a = right.inhomogeneous_term();
-40039:           sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(),
-40039:                        ROUND_UP);
-40039:           div_2exp_assign_r(a_plus_minus_b_minus, a_plus_minus_b_minus, 1,
-40039:                             ROUND_UP);
-40039:           add_dbm_constraint(right_w_id + 1, 0, a_plus_minus_b_minus);
-40039:           return;
-40039:         }
-40039:       }
-40039:       else if (is_left_coeff_minus_one && is_right_coeff_one) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item();
-40039:         const FP_Interval_Type& left_b = left.inhomogeneous_term();
-40039:         const FP_Interval_Type& right_a = right.inhomogeneous_term();
-40039:         sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(),
-40039:                        ROUND_UP);
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_ub; N& ub = holder_ub.item();
-40039:         ub = dbm[0][right_w_id + 1];
-40039:         if (!is_plus_infinity(ub)) {
-40039:           add_assign_r(ub, ub, a_plus_minus_b_minus, ROUND_UP);
-40039:           add_dbm_constraint(left_w_id + 1, 0, ub);
-40039:         }
-40039:         ub = dbm[0][left_w_id + 1];
-40039:         if (!is_plus_infinity(ub)) {
-40039:           add_assign_r(ub, ub, a_plus_minus_b_minus, ROUND_UP);
-40039:           add_dbm_constraint(right_w_id + 1, 0, ub);
-40039:         }
-40039:         return;
-40039:       }
-40039:       if (is_left_coeff_one && is_right_coeff_minus_one) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item();
-40039:         const FP_Interval_Type& left_b = left.inhomogeneous_term();
-40039:         const FP_Interval_Type& right_a = right.inhomogeneous_term();
-40039:         sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(),
-40039:                        ROUND_UP);
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_ub; N& ub = holder_ub.item();
-40039:         ub = dbm[right_w_id + 1][0];
-40039:         if (!is_plus_infinity(ub)) {
-40039:           add_assign_r(ub, ub, a_plus_minus_b_minus, ROUND_UP);
-40039:           add_dbm_constraint(0, left_w_id + 1, ub);
-40039:         }
-40039:         ub = dbm[left_w_id + 1][0];
-40039:         if (!is_plus_infinity(ub)) {
-40039:           add_assign_r(ub, ub, a_plus_minus_b_minus, ROUND_UP);
-40039:           add_dbm_constraint(0, right_w_id + 1, ub);
-40039:         }
-40039:             return;
-40039:       }
-40039:       if (is_left_coeff_one && is_right_coeff_one) {
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_c_plus_minus_a_minus; N& c_plus_minus_a_minus = holder_c_plus_minus_a_minus.item();
-40039:         const FP_Interval_Type& left_a = left.inhomogeneous_term();
-40039:         const FP_Interval_Type& right_c = right.inhomogeneous_term();
-40039:         sub_assign_r(c_plus_minus_a_minus, right_c.upper(), left_a.lower(),
-40039:                      ROUND_UP);
-40039:         add_dbm_constraint(right_w_id+1, left_w_id+1, c_plus_minus_a_minus);
-40039:         return;
-40039:       }
-40039:       if (is_left_coeff_minus_one && is_right_coeff_minus_one) {
-40039:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_c_plus_minus_a_minus; N& c_plus_minus_a_minus = holder_c_plus_minus_a_minus.item();
-40039:         const FP_Interval_Type& left_a = left.inhomogeneous_term();
-40039:         const FP_Interval_Type& right_c = right.inhomogeneous_term();
-40039:         sub_assign_r(c_plus_minus_a_minus, right_c.upper(), left_a.lower(),
-40039:                      ROUND_UP);
-40039:         add_dbm_constraint(left_w_id+1, right_w_id+1, c_plus_minus_a_minus);
-40039:         return;
-40039:       }
-40039:     }
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Interval_Info>
-40039: void
-40039: BD_Shape<T>
-40039: ::general_refine(const dimension_type& left_w_id,
-40039:                  const dimension_type& right_w_id,
-40039:                  const Linear_Form< Interval<T, Interval_Info> >& left,
-40039:                  const Linear_Form< Interval<T, Interval_Info> >& right) {
-40039: 
-40039:   typedef Interval<T, Interval_Info> FP_Interval_Type;
-40039:   Linear_Form<FP_Interval_Type> right_minus_left(right);
-40039:   right_minus_left -= left;
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_low_coeff; N& low_coeff = holder_low_coeff.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_high_coeff; N& high_coeff = holder_high_coeff.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_upper_bound; N& upper_bound = holder_upper_bound.item();
-40039: 
-40039:   dimension_type max_w_id = std::max(left_w_id, right_w_id);
-40039: 
-40039:   for (dimension_type first_v = 0; first_v < max_w_id; ++first_v) {
-40039:     for (dimension_type second_v = first_v+1;
-40039:          second_v <= max_w_id; ++second_v) {
-40039:       const FP_Interval_Type& lfv_coefficient =
-40039:         left.coefficient(Variable(first_v));
-40039:       const FP_Interval_Type& lsv_coefficient =
-40039:         left.coefficient(Variable(second_v));
-40039:       const FP_Interval_Type& rfv_coefficient =
-40039:         right.coefficient(Variable(first_v));
-40039:       const FP_Interval_Type& rsv_coefficient =
-40039:         right.coefficient(Variable(second_v));
-40039: 
-40039: 
-40039:       bool do_update = false;
-40039:       assign_r(low_coeff, lfv_coefficient.lower(), ROUND_NOT_NEEDED);
-40039:       assign_r(high_coeff, lfv_coefficient.upper(), ROUND_NOT_NEEDED);
-40039:       if (low_coeff != 0 || high_coeff != 0) {
-40039:         assign_r(low_coeff, lsv_coefficient.lower(), ROUND_NOT_NEEDED);
-40039:         assign_r(high_coeff, lsv_coefficient.upper(), ROUND_NOT_NEEDED);
-40039:         if (low_coeff != 0 || high_coeff != 0) {
-40039:           do_update = true;
-40039:         }
-40039:         else {
-40039:           assign_r(low_coeff, rsv_coefficient.lower(), ROUND_NOT_NEEDED);
-40039:           assign_r(high_coeff, rsv_coefficient.upper(), ROUND_NOT_NEEDED);
-40039:           if (low_coeff != 0 || high_coeff != 0) {
-40039:             do_update = true;
-40039:           }
-40039:         }
-40039:       }
-40039:       else {
-40039:         assign_r(low_coeff, rfv_coefficient.lower(), ROUND_NOT_NEEDED);
-40039:         assign_r(high_coeff, rfv_coefficient.upper(), ROUND_NOT_NEEDED);
-40039:         if (low_coeff != 0 || high_coeff != 0) {
-40039:           assign_r(low_coeff, lsv_coefficient.lower(), ROUND_NOT_NEEDED);
-40039:           assign_r(high_coeff, lsv_coefficient.upper(), ROUND_NOT_NEEDED);
-40039:           if (low_coeff != 0 || high_coeff != 0) {
-40039:             do_update = true;
-40039:           }
-40039:           else {
-40039:             assign_r(low_coeff, rsv_coefficient.lower(), ROUND_NOT_NEEDED);
-40039:             assign_r(high_coeff, rsv_coefficient.upper(), ROUND_NOT_NEEDED);
-40039:             if (low_coeff != 0 || high_coeff != 0) {
-40039:               do_update = true;
-40039:             }
-40039:           }
-40039:         }
-40039:       }
-40039: 
-40039:       if (do_update) {
-40039:         Variable first(first_v);
-40039:         Variable second(second_v);
-40039:         dimension_type n_first_var = first_v +1 ;
-40039:         dimension_type n_second_var = second_v + 1;
-40039:         linear_form_upper_bound(right_minus_left - first + second,
-40039:                                 upper_bound);
-40039:         add_dbm_constraint(n_first_var, n_second_var, upper_bound);
-40039:         linear_form_upper_bound(right_minus_left + first - second,
-40039:                                 upper_bound);
-40039:         add_dbm_constraint(n_second_var, n_first_var, upper_bound);
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   for (dimension_type v = 0; v < max_w_id; ++v) {
-40039:     const FP_Interval_Type& lv_coefficient =
-40039:       left.coefficient(Variable(v));
-40039:     const FP_Interval_Type& rv_coefficient =
-40039:       right.coefficient(Variable(v));
-40039: 
-40039: 
-40039:     bool do_update = false;
-40039:     assign_r(low_coeff, lv_coefficient.lower(), ROUND_NOT_NEEDED);
-40039:     assign_r(high_coeff, lv_coefficient.upper(), ROUND_NOT_NEEDED);
-40039:     if (low_coeff != 0 || high_coeff != 0) {
-40039:       do_update = true;
-40039:     }
-40039:     else {
-40039:       assign_r(low_coeff, rv_coefficient.lower(), ROUND_NOT_NEEDED);
-40039:       assign_r(high_coeff, rv_coefficient.upper(), ROUND_NOT_NEEDED);
-40039:       if (low_coeff != 0 || high_coeff != 0) {
-40039:         do_update = true;
-40039:       }
-40039:     }
-40039: 
-40039:     if (do_update) {
-40039:       Variable var(v);
-40039:       dimension_type n_var = v + 1;
-40039:       linear_form_upper_bound(right_minus_left + var, upper_bound);
-40039:       add_dbm_constraint(0, n_var, upper_bound);
-40039:       linear_form_upper_bound(right_minus_left - var, upper_bound);
-40039:       add_dbm_constraint(n_var, 0, upper_bound);
-40039:     }
-40039:   }
-40039: 
-40039: }
-40039: 
-40039: template <typename T>
-40039: template <typename Interval_Info>
-40039: void
-40039: BD_Shape<T>::
-40039: linear_form_upper_bound(const Linear_Form< Interval<T, Interval_Info> >& lf,
-40039:                         N& result) const {
-40039: 
-40039: 
-40039:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_5061 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<T>::is_exact)>) }
-40039: 
-40039:                                                      ;
-40039: 
-40039:   const dimension_type lf_space_dimension = lf.space_dimension();
-40039:   ((void) 0);
-40039: 
-40039:   typedef Interval<T, Interval_Info> FP_Interval_Type;
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_curr_lb; N& curr_lb = holder_curr_lb.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_curr_ub; N& curr_ub = holder_curr_ub.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_curr_var_ub; N& curr_var_ub = holder_curr_var_ub.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_curr_minus_var_ub; N& curr_minus_var_ub = holder_curr_minus_var_ub.item();
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_first_comparison_term; N& first_comparison_term = holder_first_comparison_term.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_second_comparison_term; N& second_comparison_term = holder_second_comparison_term.item();
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_negator; N& negator = holder_negator.item();
-40039: 
-40039:   assign_r(result, lf.inhomogeneous_term().upper(), ROUND_NOT_NEEDED);
-40039: 
-40039:   for (dimension_type curr_var = 0, n_var = 0; curr_var < lf_space_dimension;
-40039:        ++curr_var) {
-40039:     n_var = curr_var + 1;
-40039:     const FP_Interval_Type&
-40039:       curr_coefficient = lf.coefficient(Variable(curr_var));
-40039:     assign_r(curr_lb, curr_coefficient.lower(), ROUND_NOT_NEEDED);
-40039:     assign_r(curr_ub, curr_coefficient.upper(), ROUND_NOT_NEEDED);
-40039:     if (curr_lb != 0 || curr_ub != 0) {
-40039:       assign_r(curr_var_ub, dbm[0][n_var], ROUND_NOT_NEEDED);
-40039:       neg_assign_r(curr_minus_var_ub, dbm[n_var][0], ROUND_NOT_NEEDED);
-40039: 
-40039:       if (curr_lb == 1 && curr_ub == 1) {
-40039:         add_assign_r(result, result, std::max(curr_var_ub, curr_minus_var_ub),
-40039:                      ROUND_UP);
-40039:       }
-40039:       else if (curr_lb == -1 && curr_ub == -1) {
-40039:         neg_assign_r(negator, std::min(curr_var_ub, curr_minus_var_ub),
-40039:                      ROUND_NOT_NEEDED);
-40039:         add_assign_r(result, result, negator, ROUND_UP);
-40039:       }
-40039:       else {
-40039: 
-40039:         assign_r(first_comparison_term, 0, ROUND_NOT_NEEDED);
-40039:         assign_r(second_comparison_term, 0, ROUND_NOT_NEEDED);
-40039:         add_mul_assign_r(first_comparison_term, curr_var_ub, curr_ub,
-40039:                          ROUND_UP);
-40039:         add_mul_assign_r(second_comparison_term, curr_var_ub, curr_lb,
-40039:                          ROUND_UP);
-40039:         assign_r(first_comparison_term, std::max(first_comparison_term,
-40039:                                                  second_comparison_term),
-40039:                  ROUND_NOT_NEEDED);
-40039:         assign_r(second_comparison_term, 0, ROUND_NOT_NEEDED);
-40039:         add_mul_assign_r(second_comparison_term, curr_minus_var_ub, curr_ub,
-40039:                          ROUND_UP);
-40039:         assign_r(first_comparison_term, std::max(first_comparison_term,
-40039:                                                  second_comparison_term),
-40039:                  ROUND_NOT_NEEDED);
-40039:         assign_r(second_comparison_term, 0, ROUND_NOT_NEEDED);
-40039:         add_mul_assign_r(second_comparison_term, curr_minus_var_ub, curr_lb,
-40039:                          ROUND_UP);
-40039:         assign_r(first_comparison_term, std::max(first_comparison_term,
-40039:                                                  second_comparison_term),
-40039:                  ROUND_NOT_NEEDED);
-40039: 
-40039:         add_assign_r(result, result, first_comparison_term, ROUND_UP);
-40039:       }
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::affine_preimage(const Variable var,
-40039:                              const Linear_Expression& expr,
-40039:                              Coefficient_traits::const_reference denominator) {
-40039: 
-40039:   if (denominator == 0) {
-40039:     throw_invalid_argument("affine_preimage(v, e, d)", "d == 0");
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039:   const dimension_type expr_space_dim = expr.space_dimension();
-40039:   if (space_dim < expr_space_dim) {
-40039:     throw_dimension_incompatible("affine_preimage(v, e, d)", "e", expr);
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type v = var.id() + 1;
-40039:   if (v > space_dim) {
-40039:     throw_dimension_incompatible("affine_preimage(v, e, d)", var.id());
-40039:   }
-40039: 
-40039:   shortest_path_closure_assign();
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039:   const Coefficient& b = expr.inhomogeneous_term();
-40039: 
-40039: 
-40039:   dimension_type t = 0;
-40039: 
-40039:   dimension_type j = expr.last_nonzero();
-40039: 
-40039:   if (j != 0) {
-40039:     ++t;
-40039:     if (!expr.all_zeroes(1, j)) {
-40039:       ++t;
-40039:     }
-40039:   }
-40039: # 5179 "../../src/BD_Shape_templates.hh"
-40039:   if (t == 0) {
-40039: 
-40039:     forget_all_dbm_constraints(v);
-40039: 
-40039:     if (marked_shortest_path_reduced()) {
-40039:       reset_shortest_path_reduced();
-40039:     }
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039:   if (t == 1) {
-40039: 
-40039:     const Coefficient& a = expr.get(Variable(j - 1));
-40039:     if (a == denominator || a == -denominator) {
-40039: 
-40039:       if (j == var.space_dimension()) {
-40039: 
-40039:         affine_image(var, denominator*var - b, a);
-40039:       }
-40039:       else {
-40039: 
-40039: 
-40039:         forget_all_dbm_constraints(v);
-40039: 
-40039:         if (marked_shortest_path_reduced()) {
-40039:           reset_shortest_path_reduced();
-40039:         }
-40039:         ((void) 0);
-40039:       }
-40039:       return;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const Coefficient& expr_v = expr.coefficient(var);
-40039:   if (expr_v != 0) {
-40039: 
-40039:     Linear_Expression inverse((expr_v + denominator)*var);
-40039:     inverse -= expr;
-40039:     affine_image(var, inverse, expr_v);
-40039:   }
-40039:   else {
-40039: 
-40039:     forget_all_dbm_constraints(v);
-40039: 
-40039:     if (marked_shortest_path_reduced()) {
-40039:       reset_shortest_path_reduced();
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>
-40039: ::bounded_affine_image(const Variable var,
-40039:                        const Linear_Expression& lb_expr,
-40039:                        const Linear_Expression& ub_expr,
-40039:                        Coefficient_traits::const_reference denominator) {
-40039: 
-40039:   if (denominator == 0) {
-40039:     throw_invalid_argument("bounded_affine_image(v, lb, ub, d)", "d == 0");
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type bds_space_dim = space_dimension();
-40039:   const dimension_type v = var.id() + 1;
-40039:   if (v > bds_space_dim) {
-40039:     throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)",
-40039:                                  "v", var);
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type lb_space_dim = lb_expr.space_dimension();
-40039:   if (bds_space_dim < lb_space_dim) {
-40039:     throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)",
-40039:                                  "lb", lb_expr);
-40039:   }
-40039:   const dimension_type ub_space_dim = ub_expr.space_dimension();
-40039:   if (bds_space_dim < ub_space_dim) {
-40039:     throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)",
-40039:                                  "ub", ub_expr);
-40039:   }
-40039: 
-40039:   shortest_path_closure_assign();
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039:   const Coefficient& b = ub_expr.inhomogeneous_term();
-40039: 
-40039: 
-40039:   dimension_type t = 0;
-40039: 
-40039:   dimension_type w = ub_expr.last_nonzero();
-40039: 
-40039:   if (w != 0) {
-40039:     ++t;
-40039:     if (!ub_expr.all_zeroes(1, w)) {
-40039:       ++t;
-40039:     }
-40039:   }
-40039: # 5292 "../../src/BD_Shape_templates.hh"
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item();
-40039:   neg_assign(minus_denom, denominator);
-40039: 
-40039:   if (t == 0) {
-40039: 
-40039:     generalized_affine_image(var,
-40039:                              GREATER_OR_EQUAL,
-40039:                              lb_expr,
-40039:                              denominator);
-40039: 
-40039:     add_dbm_constraint(0, v, b, denominator);
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039:   if (t == 1) {
-40039: 
-40039:     const Coefficient& a = ub_expr.get(Variable(w - 1));
-40039:     if (a == denominator || a == minus_denom) {
-40039: 
-40039:       if (w == v) {
-40039: 
-40039: 
-40039:         const Variable new_var(bds_space_dim);
-40039:         add_space_dimensions_and_embed(1);
-40039: 
-40039:         affine_image(new_var, ub_expr, denominator);
-40039: 
-40039:         shortest_path_closure_assign();
-40039:         ((void) 0);
-40039: 
-40039:         generalized_affine_image(var,
-40039:                                  GREATER_OR_EQUAL,
-40039:                                  lb_expr,
-40039:                                  denominator);
-40039: 
-40039:         add_constraint(var <= new_var);
-40039: 
-40039:         remove_higher_space_dimensions(bds_space_dim);
-40039:         return;
-40039:       }
-40039:       else {
-40039: 
-40039: 
-40039: 
-40039:         generalized_affine_image(var,
-40039:                                  GREATER_OR_EQUAL,
-40039:                                  lb_expr,
-40039:                                  denominator);
-40039:         if (a == denominator) {
-40039: 
-40039:           add_dbm_constraint(w, v, b, denominator);
-40039:         }
-40039:         else {
-40039: 
-40039: 
-40039: 
-40039:           const N& dbm_w0 = dbm[w][0];
-40039:           if (!is_plus_infinity(dbm_w0)) {
-40039: 
-40039:             Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
-40039:             div_round_up(d, b, denominator);
-40039:             add_assign_r(dbm[0][v], d, dbm_w0, ROUND_UP);
-40039:             reset_shortest_path_closed();
-40039:           }
-40039:         }
-40039:         ((void) 0);
-40039:         return;
-40039:       }
-40039:     }
-40039:   }
-40039: # 5373 "../../src/BD_Shape_templates.hh"
-40039:   const bool is_sc = (denominator > 0);
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item();
-40039:   neg_assign(minus_b, b);
-40039:   const Coefficient& sc_b = is_sc ? b : minus_b;
-40039:   const Coefficient& sc_denom = is_sc ? denominator : minus_denom;
-40039:   const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator;
-40039: 
-40039: 
-40039: 
-40039:   Linear_Expression minus_expr;
-40039:   if (!is_sc) {
-40039:     minus_expr = -ub_expr;
-40039:   }
-40039:   const Linear_Expression& sc_expr = is_sc ? ub_expr : minus_expr;
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_pos_sum; N& pos_sum = holder_pos_sum.item();
-40039: 
-40039:   dimension_type pos_pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
-40039: 
-40039:   dimension_type pos_pinf_count = 0;
-40039: 
-40039: 
-40039:   assign_r(pos_sum, sc_b, ROUND_UP);
-40039: 
-40039: 
-40039:   const DB_Row<N>& dbm_0 = dbm[0];
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_i; N& coeff_i = holder_coeff_i.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item();
-40039: 
-40039: 
-40039:   for (Linear_Expression::const_iterator i = sc_expr.begin(),
-40039:         i_end = sc_expr.lower_bound(Variable(w)); i != i_end; ++i) {
-40039:     const Coefficient& sc_i = *i;
-40039:     const dimension_type i_dim = i.variable().space_dimension();
-40039:     const int sign_i = sgn(sc_i);
-40039:     if (sign_i > 0) {
-40039:       assign_r(coeff_i, sc_i, ROUND_UP);
-40039: 
-40039:       if (pos_pinf_count <= 1) {
-40039:         const N& up_approx_i = dbm_0[i_dim];
-40039:         if (!is_plus_infinity(up_approx_i)) {
-40039:           add_mul_assign_r(pos_sum, coeff_i, up_approx_i, ROUND_UP);
-40039:         }
-40039:         else {
-40039:           ++pos_pinf_count;
-40039:           pos_pinf_index = i_dim;
-40039:         }
-40039:       }
-40039:     }
-40039:     else {
-40039:       ((void) 0);
-40039:       neg_assign(minus_sc_i, sc_i);
-40039: 
-40039:       assign_r(coeff_i, minus_sc_i, ROUND_UP);
-40039: 
-40039:       if (pos_pinf_count <= 1) {
-40039:         const N& up_approx_minus_i = dbm[i_dim][0];
-40039:         if (!is_plus_infinity(up_approx_minus_i)) {
-40039:           add_mul_assign_r(pos_sum, coeff_i, up_approx_minus_i, ROUND_UP);
-40039:         }
-40039:         else {
-40039:           ++pos_pinf_count;
-40039:           pos_pinf_index = i_dim;
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   generalized_affine_image(var,
-40039:                            GREATER_OR_EQUAL,
-40039:                            lb_expr,
-40039:                            denominator);
-40039: 
-40039:   if (pos_pinf_count > 1) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   reset_shortest_path_closed();
-40039: 
-40039: 
-40039:   if (pos_pinf_count <= 1) {
-40039: 
-40039:     if (sc_denom != 1) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
-40039:       assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
-40039:       neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
-40039:       div_assign_r(pos_sum, pos_sum, down_sc_denom, ROUND_UP);
-40039:     }
-40039: 
-40039:     if (pos_pinf_count == 0) {
-40039: 
-40039:       dbm[0][v] = pos_sum;
-40039: 
-40039:       deduce_v_minus_u_bounds(v, w, sc_expr, sc_denom, pos_sum);
-40039:     }
-40039: 
-40039:     else if (pos_pinf_index != v
-40039:              && sc_expr.get(Variable(pos_pinf_index - 1)) == sc_denom) {
-40039: 
-40039:         dbm[pos_pinf_index][v] = pos_sum;
-40039:       }
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>
-40039: ::bounded_affine_preimage(const Variable var,
-40039:                           const Linear_Expression& lb_expr,
-40039:                           const Linear_Expression& ub_expr,
-40039:                           Coefficient_traits::const_reference denominator) {
-40039: 
-40039:   if (denominator == 0) {
-40039:     throw_invalid_argument("bounded_affine_preimage(v, lb, ub, d)", "d == 0");
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039:   const dimension_type v = var.id() + 1;
-40039:   if (v > space_dim) {
-40039:     throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)",
-40039:                                  "v", var);
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type lb_space_dim = lb_expr.space_dimension();
-40039:   if (space_dim < lb_space_dim) {
-40039:     throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)",
-40039:                                  "lb", lb_expr);
-40039:   }
-40039:   const dimension_type ub_space_dim = ub_expr.space_dimension();
-40039:   if (space_dim < ub_space_dim) {
-40039:     throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)",
-40039:                                  "ub", ub_expr);
-40039:   }
-40039: 
-40039:   shortest_path_closure_assign();
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039:   if (ub_expr.coefficient(var) == 0) {
-40039:     refine(var, LESS_OR_EQUAL, ub_expr, denominator);
-40039:     generalized_affine_preimage(var, GREATER_OR_EQUAL,
-40039:                                 lb_expr, denominator);
-40039:     return;
-40039:   }
-40039:   if (lb_expr.coefficient(var) == 0) {
-40039:     refine(var, GREATER_OR_EQUAL, lb_expr, denominator);
-40039:     generalized_affine_preimage(var, LESS_OR_EQUAL,
-40039:                                 ub_expr, denominator);
-40039:     return;
-40039:   }
-40039: 
-40039:   const Coefficient& lb_expr_v = lb_expr.coefficient(var);
-40039: 
-40039: 
-40039:   const Variable new_var(space_dim);
-40039:   add_space_dimensions_and_embed(1);
-40039:   const Linear_Expression lb_inverse
-40039:     = lb_expr - (lb_expr_v + denominator)*var;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_lb_inverse_denom; Parma_Polyhedra_Library::Coefficient& lb_inverse_denom = holder_lb_inverse_denom.item();
-40039:   neg_assign(lb_inverse_denom, lb_expr_v);
-40039:   affine_image(new_var, lb_inverse, lb_inverse_denom);
-40039:   shortest_path_closure_assign();
-40039:   ((void) 0);
-40039:   generalized_affine_preimage(var, LESS_OR_EQUAL,
-40039:                               ub_expr, denominator);
-40039:   if (sgn(denominator) == sgn(lb_inverse_denom)) {
-40039:     add_constraint(var >= new_var);
-40039:   }
-40039:   else {
-40039:     add_constraint(var <= new_var);
-40039:   }
-40039: 
-40039:   remove_higher_space_dimensions(space_dim);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::generalized_affine_image(const Variable var,
-40039:                                       const Relation_Symbol relsym,
-40039:                                       const Linear_Expression& expr,
-40039:                                       Coefficient_traits::const_reference
-40039:                                       denominator) {
-40039: 
-40039:   if (denominator == 0) {
-40039:     throw_invalid_argument("generalized_affine_image(v, r, e, d)", "d == 0");
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039:   const dimension_type expr_space_dim = expr.space_dimension();
-40039:   if (space_dim < expr_space_dim) {
-40039:     throw_dimension_incompatible("generalized_affine_image(v, r, e, d)",
-40039:                                  "e", expr);
-40039:   }
-40039: 
-40039:   const dimension_type v = var.id() + 1;
-40039:   if (v > space_dim) {
-40039:     throw_dimension_incompatible("generalized_affine_image(v, r, e, d)",
-40039:                                  var.id());
-40039:   }
-40039: 
-40039:   if (relsym == LESS_THAN || relsym == GREATER_THAN) {
-40039:     throw_invalid_argument("generalized_affine_image(v, r, e, d)",
-40039:                            "r is a strict relation symbol");
-40039:   }
-40039: 
-40039:   if (relsym == NOT_EQUAL) {
-40039:     throw_invalid_argument("generalized_affine_image(v, r, e, d)",
-40039:                            "r is the disequality relation symbol");
-40039:   }
-40039:   if (relsym == EQUAL) {
-40039: 
-40039: 
-40039:     affine_image(var, expr, denominator);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   shortest_path_closure_assign();
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039:   const Coefficient& b = expr.inhomogeneous_term();
-40039: 
-40039: 
-40039:   dimension_type t = 0;
-40039: 
-40039:   dimension_type w = expr.last_nonzero();
-40039: 
-40039:   if (w != 0) {
-40039:     ++t;
-40039:     if (!expr.all_zeroes(1, w)) {
-40039:       ++t;
-40039:     }
-40039:   }
-40039: # 5626 "../../src/BD_Shape_templates.hh"
-40039:   DB_Row<N>& dbm_0 = dbm[0];
-40039:   DB_Row<N>& dbm_v = dbm[v];
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item();
-40039:   neg_assign(minus_denom, denominator);
-40039: 
-40039:   if (t == 0) {
-40039: 
-40039: 
-40039:     forget_all_dbm_constraints(v);
-40039: 
-40039:     reset_shortest_path_closed();
-40039:     switch (relsym) {
-40039:     case LESS_OR_EQUAL:
-40039: 
-40039:       add_dbm_constraint(0, v, b, denominator);
-40039:       break;
-40039:     case GREATER_OR_EQUAL:
-40039: 
-40039: 
-40039:       add_dbm_constraint(v, 0, b, minus_denom);
-40039:       break;
-40039:     default:
-40039: 
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       break;
-40039:     }
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039:   if (t == 1) {
-40039: 
-40039:     const Coefficient& a = expr.get(Variable(w - 1));
-40039:     if (a == denominator || a == minus_denom) {
-40039: 
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
-40039:       switch (relsym) {
-40039:       case LESS_OR_EQUAL:
-40039:         div_round_up(d, b, denominator);
-40039:         if (w == v) {
-40039: 
-40039: 
-40039:           reset_shortest_path_closed();
-40039:           if (a == denominator) {
-40039: 
-40039: 
-40039: 
-40039:             for (dimension_type i = space_dim + 1; i-- > 0; ) {
-40039:               N& dbm_iv = dbm[i][v];
-40039:               add_assign_r(dbm_iv, dbm_iv, d, ROUND_UP);
-40039:               assign_r(dbm_v[i], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:             }
-40039:           }
-40039:           else {
-40039: 
-40039: 
-40039: 
-40039:             N& dbm_v0 = dbm_v[0];
-40039:             add_assign_r(dbm_0[v], dbm_v0, d, ROUND_UP);
-40039: 
-40039:             assign_r(dbm_v0, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:             forget_binary_dbm_constraints(v);
-40039:           }
-40039:         }
-40039:         else {
-40039: 
-40039: 
-40039: 
-40039:           forget_all_dbm_constraints(v);
-40039: 
-40039:           if (marked_shortest_path_reduced()) {
-40039:             reset_shortest_path_reduced();
-40039:           }
-40039:           if (a == denominator) {
-40039: 
-40039:             add_dbm_constraint(w, v, d);
-40039:           }
-40039:           else {
-40039: 
-40039: 
-40039: 
-40039:             const N& dbm_w0 = dbm[w][0];
-40039:             if (!is_plus_infinity(dbm_w0)) {
-40039: 
-40039:               add_assign_r(dbm_0[v], d, dbm_w0, ROUND_UP);
-40039: 
-40039:               reset_shortest_path_closed();
-40039:             }
-40039:           }
-40039:         }
-40039:         break;
-40039: 
-40039:       case GREATER_OR_EQUAL:
-40039:         div_round_up(d, b, minus_denom);
-40039:         if (w == v) {
-40039: 
-40039: 
-40039:           reset_shortest_path_closed();
-40039:           if (a == denominator) {
-40039: 
-40039: 
-40039: 
-40039:             for (dimension_type i = space_dim + 1; i-- > 0; ) {
-40039:               N& dbm_vi = dbm_v[i];
-40039:               add_assign_r(dbm_vi, dbm_vi, d, ROUND_UP);
-40039:               assign_r(dbm[i][v], PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:             }
-40039:           }
-40039:           else {
-40039: 
-40039: 
-40039: 
-40039:             N& dbm_0v = dbm_0[v];
-40039:             add_assign_r(dbm_v[0], dbm_0v, d, ROUND_UP);
-40039: 
-40039:             assign_r(dbm_0v, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:             forget_binary_dbm_constraints(v);
-40039:           }
-40039:         }
-40039:         else {
-40039: 
-40039: 
-40039: 
-40039:           forget_all_dbm_constraints(v);
-40039: 
-40039:           if (marked_shortest_path_reduced()) {
-40039:             reset_shortest_path_reduced();
-40039:           }
-40039:           if (a == denominator) {
-40039: 
-40039: 
-40039:             add_dbm_constraint(v, w, d);
-40039:           }
-40039:           else {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:             const N& dbm_0w = dbm_0[w];
-40039:             if (!is_plus_infinity(dbm_0w)) {
-40039: 
-40039:               add_assign_r(dbm_v[0], dbm_0w, d, ROUND_UP);
-40039: 
-40039:               reset_shortest_path_closed();
-40039:             }
-40039:           }
-40039:         }
-40039:         break;
-40039: 
-40039:       default:
-40039: 
-40039:         Parma_Polyhedra_Library::ppl_unreachable();
-40039:         break;
-40039:       }
-40039:       ((void) 0);
-40039:       return;
-40039:     }
-40039:   }
-40039: # 5792 "../../src/BD_Shape_templates.hh"
-40039:   const bool is_sc = (denominator > 0);
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item();
-40039:   neg_assign(minus_b, b);
-40039:   const Coefficient& sc_b = is_sc ? b : minus_b;
-40039:   const Coefficient& minus_sc_b = is_sc ? minus_b : b;
-40039:   const Coefficient& sc_denom = is_sc ? denominator : minus_denom;
-40039:   const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator;
-40039: 
-40039: 
-40039: 
-40039:   Linear_Expression minus_expr;
-40039:   if (!is_sc) {
-40039:     minus_expr = -expr;
-40039:   }
-40039:   const Linear_Expression& sc_expr = is_sc ? expr : minus_expr;
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_sum; N& sum = holder_sum.item();
-40039: 
-40039:   dimension_type pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
-40039: 
-40039:   dimension_type pinf_count = 0;
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_i; N& coeff_i = holder_coeff_i.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item();
-40039: 
-40039:   switch (relsym) {
-40039:   case LESS_OR_EQUAL:
-40039: 
-40039: 
-40039: 
-40039:     assign_r(sum, sc_b, ROUND_UP);
-40039: 
-40039: 
-40039: 
-40039:     ((void) 0);
-40039:     for (Linear_Expression::const_iterator i = sc_expr.begin(),
-40039:         i_end = sc_expr.lower_bound(Variable(w)); i != i_end; ++i) {
-40039:       const Coefficient& sc_i = *i;
-40039:       const dimension_type i_dim = i.variable().space_dimension();
-40039:       const int sign_i = sgn(sc_i);
-40039:       ((void) 0);
-40039: 
-40039:       const N& approx_i = (sign_i > 0) ? dbm_0[i_dim] : dbm[i_dim][0];
-40039:       if (is_plus_infinity(approx_i)) {
-40039:         if (++pinf_count > 1) {
-40039:           break;
-40039:         }
-40039:         pinf_index = i_dim;
-40039:         continue;
-40039:       }
-40039:       if (sign_i > 0) {
-40039:         assign_r(coeff_i, sc_i, ROUND_UP);
-40039:       }
-40039:       else {
-40039:         neg_assign(minus_sc_i, sc_i);
-40039:         assign_r(coeff_i, minus_sc_i, ROUND_UP);
-40039:       }
-40039:       add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP);
-40039:     }
-40039: 
-40039: 
-40039:     forget_all_dbm_constraints(v);
-40039: 
-40039:     if (marked_shortest_path_reduced()) {
-40039:       reset_shortest_path_reduced();
-40039:     }
-40039: 
-40039:     if (pinf_count > 1) {
-40039:       ((void) 0);
-40039:       return;
-40039:     }
-40039: 
-40039: 
-40039:     if (sc_denom != 1) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
-40039:       assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
-40039:       neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
-40039:       div_assign_r(sum, sum, down_sc_denom, ROUND_UP);
-40039:     }
-40039: 
-40039:     if (pinf_count == 0) {
-40039: 
-40039:       add_dbm_constraint(0, v, sum);
-40039: 
-40039:       deduce_v_minus_u_bounds(v, w, sc_expr, sc_denom, sum);
-40039:     }
-40039:     else if (pinf_count == 1) {
-40039:       if (pinf_index != v
-40039:           && expr.get(Variable(pinf_index - 1)) == denominator) {
-40039: 
-40039:         add_dbm_constraint(pinf_index, v, sum);
-40039:       }
-40039:     }
-40039:     break;
-40039: 
-40039:   case GREATER_OR_EQUAL:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     assign_r(sum, minus_sc_b, ROUND_UP);
-40039: 
-40039:     for (Linear_Expression::const_iterator i = sc_expr.begin(),
-40039:         i_end = sc_expr.lower_bound(Variable(w)); i != i_end; ++i) {
-40039:       const Coefficient& sc_i = *i;
-40039:       const int sign_i = sgn(sc_i);
-40039:       ((void) 0);
-40039:       const dimension_type i_dim = i.variable().space_dimension();
-40039: 
-40039:       const N& approx_i = (sign_i > 0) ? dbm[i_dim][0] : dbm_0[i_dim];
-40039:       if (is_plus_infinity(approx_i)) {
-40039:         if (++pinf_count > 1) {
-40039:           break;
-40039:         }
-40039:         pinf_index = i_dim;
-40039:         continue;
-40039:       }
-40039:       if (sign_i > 0) {
-40039:         assign_r(coeff_i, sc_i, ROUND_UP);
-40039:       }
-40039:       else {
-40039:         neg_assign(minus_sc_i, sc_i);
-40039:         assign_r(coeff_i, minus_sc_i, ROUND_UP);
-40039:       }
-40039:       add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP);
-40039:     }
-40039: 
-40039: 
-40039:     forget_all_dbm_constraints(v);
-40039: 
-40039:     if (marked_shortest_path_reduced()) {
-40039:       reset_shortest_path_reduced();
-40039:     }
-40039: 
-40039:     if (pinf_count > 1) {
-40039:       ((void) 0);
-40039:       return;
-40039:     }
-40039: 
-40039: 
-40039:     if (sc_denom != 1) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
-40039:       assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
-40039:       neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
-40039:       div_assign_r(sum, sum, down_sc_denom, ROUND_UP);
-40039:     }
-40039: 
-40039:     if (pinf_count == 0) {
-40039: 
-40039:       add_dbm_constraint(v, 0, sum);
-40039: 
-40039:       deduce_u_minus_v_bounds(v, w, sc_expr, sc_denom, sum);
-40039:     }
-40039:     else if (pinf_count == 1) {
-40039:       if (pinf_index != v
-40039:           && expr.get(Variable(pinf_index - 1)) == denominator) {
-40039: 
-40039: 
-40039:         add_dbm_constraint(v, pinf_index, sum);
-40039:       }
-40039:     }
-40039:     break;
-40039: 
-40039:   default:
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     break;
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::generalized_affine_image(const Linear_Expression& lhs,
-40039:                                       const Relation_Symbol relsym,
-40039:                                       const Linear_Expression& rhs) {
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039:   const dimension_type lhs_space_dim = lhs.space_dimension();
-40039:   if (space_dim < lhs_space_dim) {
-40039:     throw_dimension_incompatible("generalized_affine_image(e1, r, e2)",
-40039:                                  "e1", lhs);
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type rhs_space_dim = rhs.space_dimension();
-40039:   if (space_dim < rhs_space_dim) {
-40039:     throw_dimension_incompatible("generalized_affine_image(e1, r, e2)",
-40039:                                  "e2", rhs);
-40039:   }
-40039: 
-40039:   if (relsym == LESS_THAN || relsym == GREATER_THAN) {
-40039:     throw_invalid_argument("generalized_affine_image(e1, r, e2)",
-40039:                            "r is a strict relation symbol");
-40039:   }
-40039: 
-40039:   if (relsym == NOT_EQUAL) {
-40039:     throw_invalid_argument("generalized_affine_image(e1, r, e2)",
-40039:                            "r is the disequality relation symbol");
-40039:   }
-40039: 
-40039:   shortest_path_closure_assign();
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   dimension_type t_lhs = 0;
-40039: 
-40039:   dimension_type j_lhs = lhs.last_nonzero();
-40039: 
-40039:   if (j_lhs != 0) {
-40039:     ++t_lhs;
-40039:     if (!lhs.all_zeroes(1, j_lhs)) {
-40039:       ++t_lhs;
-40039:     }
-40039:     --j_lhs;
-40039:   }
-40039: 
-40039:   const Coefficient& b_lhs = lhs.inhomogeneous_term();
-40039: 
-40039:   if (t_lhs == 0) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     switch (relsym) {
-40039:     case LESS_OR_EQUAL:
-40039:       refine_no_check(lhs <= rhs);
-40039:       break;
-40039:     case EQUAL:
-40039:       refine_no_check(lhs == rhs);
-40039:       break;
-40039:     case GREATER_OR_EQUAL:
-40039:       refine_no_check(lhs >= rhs);
-40039:       break;
-40039:     default:
-40039: 
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       break;
-40039:     }
-40039:   }
-40039:   else if (t_lhs == 1) {
-40039: 
-40039: 
-40039: 
-40039:     Variable v(j_lhs);
-40039: 
-40039:     const Coefficient& denom = lhs.coefficient(v);
-40039:     Relation_Symbol new_relsym = relsym;
-40039:     if (denom < 0) {
-40039:       if (relsym == LESS_OR_EQUAL) {
-40039:         new_relsym = GREATER_OR_EQUAL;
-40039:       }
-40039:       else if (relsym == GREATER_OR_EQUAL) {
-40039:         new_relsym = LESS_OR_EQUAL;
-40039:       }
-40039:     }
-40039:     Linear_Expression expr = rhs - b_lhs;
-40039:     generalized_affine_image(v, new_relsym, expr, denom);
-40039:   }
-40039:   else {
-40039: 
-40039: 
-40039:     std::vector<Variable> lhs_vars;
-40039:     for (Linear_Expression::const_iterator i = lhs.begin(), i_end = lhs.end();
-40039:           i != i_end; ++i) {
-40039:       lhs_vars.push_back(i.variable());
-40039:     }
-40039:     const dimension_type num_common_dims = std::min(lhs_space_dim, rhs_space_dim);
-40039:     if (!lhs.have_a_common_variable(rhs, Variable(0), Variable(num_common_dims))) {
-40039: 
-40039: 
-40039:       for (dimension_type i = lhs_vars.size(); i-- > 0; ) {
-40039:         forget_all_dbm_constraints(lhs_vars[i].id() + 1);
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       switch (relsym) {
-40039:       case LESS_OR_EQUAL:
-40039:         refine_no_check(lhs <= rhs);
-40039:         break;
-40039:       case EQUAL:
-40039:         refine_no_check(lhs == rhs);
-40039:         break;
-40039:       case GREATER_OR_EQUAL:
-40039:         refine_no_check(lhs >= rhs);
-40039:         break;
-40039:       default:
-40039: 
-40039:         Parma_Polyhedra_Library::ppl_unreachable();
-40039:         break;
-40039:       }
-40039:     }
-40039:     else {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       for (dimension_type i = lhs_vars.size(); i-- > 0; ) {
-40039:         forget_all_dbm_constraints(lhs_vars[i].id() + 1);
-40039:       }
-40039: # 6155 "../../src/BD_Shape_templates.hh"
-40039:     }
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::generalized_affine_preimage(const Variable var,
-40039:                                          const Relation_Symbol relsym,
-40039:                                          const Linear_Expression& expr,
-40039:                                          Coefficient_traits::const_reference
-40039:                                          denominator) {
-40039: 
-40039:   if (denominator == 0) {
-40039:     throw_invalid_argument("generalized_affine_preimage(v, r, e, d)",
-40039:                            "d == 0");
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039:   const dimension_type expr_space_dim = expr.space_dimension();
-40039:   if (space_dim < expr_space_dim) {
-40039:     throw_dimension_incompatible("generalized_affine_preimage(v, r, e, d)",
-40039:                                  "e", expr);
-40039:   }
-40039: 
-40039:   const dimension_type v = var.id() + 1;
-40039:   if (v > space_dim) {
-40039:     throw_dimension_incompatible("generalized_affine_preimage(v, r, e, d)",
-40039:                                  var.id());
-40039:   }
-40039: 
-40039:   if (relsym == LESS_THAN || relsym == GREATER_THAN) {
-40039:     throw_invalid_argument("generalized_affine_preimage(v, r, e, d)",
-40039:                            "r is a strict relation symbol");
-40039:   }
-40039: 
-40039:   if (relsym == NOT_EQUAL) {
-40039:     throw_invalid_argument("generalized_affine_preimage(v, r, e, d)",
-40039:                            "r is the disequality relation symbol");
-40039:   }
-40039:   if (relsym == EQUAL) {
-40039: 
-40039: 
-40039:     affine_preimage(var, expr, denominator);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   shortest_path_closure_assign();
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   const Coefficient& expr_v = expr.coefficient(var);
-40039:   if (expr_v != 0) {
-40039:     const Relation_Symbol reversed_relsym = (relsym == LESS_OR_EQUAL)
-40039:       ? GREATER_OR_EQUAL : LESS_OR_EQUAL;
-40039:     const Linear_Expression inverse
-40039:       = expr - (expr_v + denominator)*var;
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inverse_denom; Parma_Polyhedra_Library::Coefficient& inverse_denom = holder_inverse_denom.item();
-40039:     neg_assign(inverse_denom, expr_v);
-40039:     const Relation_Symbol inverse_relsym
-40039:       = (sgn(denominator) == sgn(inverse_denom)) ? relsym : reversed_relsym;
-40039:     generalized_affine_image(var, inverse_relsym, inverse, inverse_denom);
-40039:     return;
-40039:   }
-40039: 
-40039:   refine(var, relsym, expr, denominator);
-40039: 
-40039:   if (is_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   forget_all_dbm_constraints(v);
-40039: 
-40039:   if (marked_shortest_path_reduced()) {
-40039:     reset_shortest_path_reduced();
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::generalized_affine_preimage(const Linear_Expression& lhs,
-40039:                                          const Relation_Symbol relsym,
-40039:                                          const Linear_Expression& rhs) {
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type bds_space_dim = space_dimension();
-40039:   const dimension_type lhs_space_dim = lhs.space_dimension();
-40039:   if (bds_space_dim < lhs_space_dim) {
-40039:     throw_dimension_incompatible("generalized_affine_preimage(e1, r, e2)",
-40039:                                  "e1", lhs);
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type rhs_space_dim = rhs.space_dimension();
-40039:   if (bds_space_dim < rhs_space_dim) {
-40039:     throw_dimension_incompatible("generalized_affine_preimage(e1, r, e2)",
-40039:                                  "e2", rhs);
-40039:   }
-40039: 
-40039:   if (relsym == LESS_THAN || relsym == GREATER_THAN) {
-40039:     throw_invalid_argument("generalized_affine_preimage(e1, r, e2)",
-40039:                            "r is a strict relation symbol");
-40039:   }
-40039: 
-40039:   if (relsym == NOT_EQUAL) {
-40039:     throw_invalid_argument("generalized_affine_preimage(e1, r, e2)",
-40039:                            "r is the disequality relation symbol");
-40039:   }
-40039: 
-40039:   shortest_path_closure_assign();
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   dimension_type t_lhs = 0;
-40039: 
-40039:   dimension_type j_lhs = lhs.last_nonzero();
-40039: 
-40039:   if (j_lhs != 0) {
-40039:     ++t_lhs;
-40039:     if (!lhs.all_zeroes(1, j_lhs)) {
-40039:       ++t_lhs;
-40039:     }
-40039:     --j_lhs;
-40039:   }
-40039: 
-40039:   const Coefficient& b_lhs = lhs.inhomogeneous_term();
-40039: 
-40039:   if (t_lhs == 0) {
-40039: 
-40039: 
-40039:     generalized_affine_image(lhs, relsym, rhs);
-40039:     return;
-40039:   }
-40039:   else if (t_lhs == 1) {
-40039: 
-40039: 
-40039: 
-40039:     Variable v(j_lhs);
-40039: 
-40039:     const Coefficient& denom = lhs.coefficient(v);
-40039:     Relation_Symbol new_relsym = relsym;
-40039:     if (denom < 0) {
-40039:       if (relsym == LESS_OR_EQUAL) {
-40039:         new_relsym = GREATER_OR_EQUAL;
-40039:       }
-40039:       else if (relsym == GREATER_OR_EQUAL) {
-40039:         new_relsym = LESS_OR_EQUAL;
-40039:       }
-40039:     }
-40039:     Linear_Expression expr = rhs - b_lhs;
-40039:     generalized_affine_preimage(v, new_relsym, expr, denom);
-40039:   }
-40039:   else {
-40039: 
-40039: 
-40039:     std::vector<Variable> lhs_vars;
-40039:     for (Linear_Expression::const_iterator i = lhs.begin(), i_end = lhs.end();
-40039:           i != i_end; ++i) {
-40039:       lhs_vars.push_back(i.variable());
-40039:     }
-40039:     const dimension_type num_common_dims = std::min(lhs_space_dim, rhs_space_dim);
-40039:     if (!lhs.have_a_common_variable(rhs, Variable(0), Variable(num_common_dims))) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       switch (relsym) {
-40039:       case LESS_OR_EQUAL:
-40039:         refine_no_check(lhs <= rhs);
-40039:         break;
-40039:       case EQUAL:
-40039:         refine_no_check(lhs == rhs);
-40039:         break;
-40039:       case GREATER_OR_EQUAL:
-40039:         refine_no_check(lhs >= rhs);
-40039:         break;
-40039:       default:
-40039: 
-40039:         Parma_Polyhedra_Library::ppl_unreachable();
-40039:         break;
-40039:       }
-40039: 
-40039: 
-40039:       if (is_empty()) {
-40039:         return;
-40039:       }
-40039: 
-40039:       for (dimension_type i = lhs_vars.size(); i-- > 0; ) {
-40039:         forget_all_dbm_constraints(lhs_vars[i].id() + 1);
-40039:       }
-40039:     }
-40039:     else {
-40039: 
-40039: 
-40039: 
-40039:       const Variable new_var(bds_space_dim);
-40039:       add_space_dimensions_and_embed(1);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       affine_image(new_var, lhs);
-40039: 
-40039: 
-40039:       shortest_path_closure_assign();
-40039:       ((void) 0);
-40039:       for (dimension_type i = lhs_vars.size(); i-- > 0; ) {
-40039:         forget_all_dbm_constraints(lhs_vars[i].id() + 1);
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       switch (relsym) {
-40039:       case LESS_OR_EQUAL:
-40039:         refine_no_check(new_var <= rhs);
-40039:         break;
-40039:       case EQUAL:
-40039:         refine_no_check(new_var == rhs);
-40039:         break;
-40039:       case GREATER_OR_EQUAL:
-40039:         refine_no_check(new_var >= rhs);
-40039:         break;
-40039:       default:
-40039: 
-40039:         Parma_Polyhedra_Library::ppl_unreachable();
-40039:         break;
-40039:       }
-40039: 
-40039:       remove_higher_space_dimensions(bds_space_dim);
-40039:     }
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: Constraint_System
-40039: BD_Shape<T>::constraints() const {
-40039:   const dimension_type space_dim = space_dimension();
-40039:   Constraint_System cs;
-40039:   cs.set_space_dimension(space_dim);
-40039: 
-40039:   if (space_dim == 0) {
-40039:     if (marked_empty()) {
-40039:       cs = Constraint_System::zero_dim_empty();
-40039:     }
-40039:     return cs;
-40039:   }
-40039: 
-40039:   if (marked_empty()) {
-40039:     cs.insert(Constraint::zero_dim_false());
-40039:     return cs;
-40039:   }
-40039: 
-40039:   if (marked_shortest_path_reduced()) {
-40039: 
-40039:     cs = minimized_constraints();
-40039:     return cs;
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_a; Parma_Polyhedra_Library::Coefficient& a = holder_a.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_b; Parma_Polyhedra_Library::Coefficient& b = holder_b.item();
-40039: 
-40039:   const DB_Row<N>& dbm_0 = dbm[0];
-40039:   for (dimension_type j = 1; j <= space_dim; ++j) {
-40039:     const Variable x(j-1);
-40039:     const N& dbm_0j = dbm_0[j];
-40039:     const N& dbm_j0 = dbm[j][0];
-40039:     if (is_additive_inverse(dbm_j0, dbm_0j)) {
-40039: 
-40039:       numer_denom(dbm_0j, b, a);
-40039:       cs.insert(a*x == b);
-40039:     }
-40039:     else {
-40039: 
-40039:       if (!is_plus_infinity(dbm_0j)) {
-40039:         numer_denom(dbm_0j, b, a);
-40039:         cs.insert(a*x <= b);
-40039:       }
-40039:       if (!is_plus_infinity(dbm_j0)) {
-40039:         numer_denom(dbm_j0, b, a);
-40039:         cs.insert(-a*x <= b);
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   for (dimension_type i = 1; i <= space_dim; ++i) {
-40039:     const Variable y(i-1);
-40039:     const DB_Row<N>& dbm_i = dbm[i];
-40039:     for (dimension_type j = i + 1; j <= space_dim; ++j) {
-40039:       const Variable x(j-1);
-40039:       const N& dbm_ij = dbm_i[j];
-40039:       const N& dbm_ji = dbm[j][i];
-40039:       if (is_additive_inverse(dbm_ji, dbm_ij)) {
-40039: 
-40039:         numer_denom(dbm_ij, b, a);
-40039:         cs.insert(a*x - a*y == b);
-40039:       }
-40039:       else {
-40039: 
-40039:         if (!is_plus_infinity(dbm_ij)) {
-40039:           numer_denom(dbm_ij, b, a);
-40039:           cs.insert(a*x - a*y <= b);
-40039:         }
-40039:         if (!is_plus_infinity(dbm_ji)) {
-40039:           numer_denom(dbm_ji, b, a);
-40039:           cs.insert(a*y - a*x <= b);
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039:   return cs;
-40039: }
-40039: 
-40039: template <typename T>
-40039: Constraint_System
-40039: BD_Shape<T>::minimized_constraints() const {
-40039:   shortest_path_reduction_assign();
-40039:   const dimension_type space_dim = space_dimension();
-40039:   Constraint_System cs;
-40039:   cs.set_space_dimension(space_dim);
-40039: 
-40039:   if (space_dim == 0) {
-40039:     if (marked_empty()) {
-40039:       cs = Constraint_System::zero_dim_empty();
-40039:     }
-40039:     return cs;
-40039:   }
-40039: 
-40039:   if (marked_empty()) {
-40039:     cs.insert(Constraint::zero_dim_false());
-40039:     return cs;
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
-40039: 
-40039: 
-40039:   std::vector<dimension_type> leaders;
-40039:   compute_leaders(leaders);
-40039:   std::vector<dimension_type> leader_indices;
-40039:   compute_leader_indices(leaders, leader_indices);
-40039:   const dimension_type num_leaders = leader_indices.size();
-40039: 
-40039: 
-40039:   const DB_Row<N>& dbm_0 = dbm[0];
-40039:   for (dimension_type i = 1; i <= space_dim; ++i) {
-40039:     const dimension_type leader = leaders[i];
-40039:     if (i != leader) {
-40039: 
-40039:       if (leader == 0) {
-40039: 
-40039:         ((void) 0);
-40039:         numer_denom(dbm_0[i], numer, denom);
-40039:         cs.insert(denom*Variable(i-1) == numer);
-40039:       }
-40039:       else {
-40039: 
-40039:         ((void) 0);
-40039:         numer_denom(dbm[i][leader], numer, denom);
-40039:         cs.insert(denom*Variable(leader-1) - denom*Variable(i-1) == numer);
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   const Bit_Row& red_0 = redundancy_dbm[0];
-40039:   for (dimension_type l_i = 1; l_i < num_leaders; ++l_i) {
-40039:     const dimension_type i = leader_indices[l_i];
-40039:     if (!red_0[i]) {
-40039:       numer_denom(dbm_0[i], numer, denom);
-40039:       cs.insert(denom*Variable(i-1) <= numer);
-40039:     }
-40039:     if (!redundancy_dbm[i][0]) {
-40039:       numer_denom(dbm[i][0], numer, denom);
-40039:       cs.insert(-denom*Variable(i-1) <= numer);
-40039:     }
-40039:   }
-40039: 
-40039:   for (dimension_type l_i = 1; l_i < num_leaders; ++l_i) {
-40039:     const dimension_type i = leader_indices[l_i];
-40039:     const DB_Row<N>& dbm_i = dbm[i];
-40039:     const Bit_Row& red_i = redundancy_dbm[i];
-40039:     for (dimension_type l_j = l_i + 1; l_j < num_leaders; ++l_j) {
-40039:       const dimension_type j = leader_indices[l_j];
-40039:       if (!red_i[j]) {
-40039:         numer_denom(dbm_i[j], numer, denom);
-40039:         cs.insert(denom*Variable(j-1) - denom*Variable(i-1) <= numer);
-40039:       }
-40039:       if (!redundancy_dbm[j][i]) {
-40039:         numer_denom(dbm[j][i], numer, denom);
-40039:         cs.insert(denom*Variable(i-1) - denom*Variable(j-1) <= numer);
-40039:       }
-40039:     }
-40039:   }
-40039:   return cs;
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::expand_space_dimension(Variable var, dimension_type m) {
-40039:   dimension_type old_dim = space_dimension();
-40039: 
-40039:   if (var.space_dimension() > old_dim) {
-40039:     throw_dimension_incompatible("expand_space_dimension(v, m)", "v", var);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (m > max_space_dimension() - space_dimension()) {
-40039:     throw_invalid_argument("expand_dimension(v, m)",
-40039:                            "adding m new space dimensions exceeds "
-40039:                            "the maximum allowed space dimension");
-40039:   }
-40039: 
-40039:   if (m == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039:   add_space_dimensions_and_embed(m);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type v_id = var.id() + 1;
-40039:   const DB_Row<N>& dbm_v = dbm[v_id];
-40039:   for (dimension_type i = old_dim + 1; i-- > 0; ) {
-40039:     DB_Row<N>& dbm_i = dbm[i];
-40039:     const N& dbm_i_v = dbm[i][v_id];
-40039:     const N& dbm_v_i = dbm_v[i];
-40039:     for (dimension_type j = old_dim+1; j < old_dim+m+1; ++j) {
-40039:       dbm_i[j] = dbm_i_v;
-40039:       dbm[j][i] = dbm_v_i;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   if (marked_shortest_path_closed()) {
-40039:     reset_shortest_path_closed();
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::fold_space_dimensions(const Variables_Set& vars,
-40039:                                    Variable dest) {
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039:   if (dest.space_dimension() > space_dim) {
-40039:     throw_dimension_incompatible("fold_space_dimensions(vs, v)",
-40039:                                  "v", dest);
-40039:   }
-40039: 
-40039:   if (vars.empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   if (vars.space_dimension() > space_dim) {
-40039:     throw_dimension_incompatible("fold_space_dimensions(vs, v)",
-40039:                                  vars.space_dimension());
-40039:   }
-40039: 
-40039:   if (vars.find(dest.id()) != vars.end()) {
-40039:     throw_invalid_argument("fold_space_dimensions(vs, v)",
-40039:                            "v should not occur in vs");
-40039:   }
-40039:   shortest_path_closure_assign();
-40039:   if (!marked_empty()) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     const dimension_type v_id = dest.id() + 1;
-40039:     DB_Row<N>& dbm_v = dbm[v_id];
-40039:     for (Variables_Set::const_iterator i = vars.begin(),
-40039:            vs_end = vars.end(); i != vs_end; ++i) {
-40039:       const dimension_type to_be_folded_id = *i + 1;
-40039:       const DB_Row<N>& dbm_to_be_folded_id = dbm[to_be_folded_id];
-40039:       for (dimension_type j = space_dim + 1; j-- > 0; ) {
-40039:         max_assign(dbm[j][v_id], dbm[j][to_be_folded_id]);
-40039:         max_assign(dbm_v[j], dbm_to_be_folded_id[j]);
-40039:       }
-40039:     }
-40039:   }
-40039:   remove_space_dimensions(vars);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::drop_some_non_integer_points(Complexity_Class) {
-40039:   if (std::numeric_limits<T>::is_integer) {
-40039:     return;
-40039:   }
-40039:   const dimension_type space_dim = space_dimension();
-40039:   shortest_path_closure_assign();
-40039:   if (space_dim == 0 || marked_empty()) {
-40039:     return;
-40039:   }
-40039:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
-40039:     DB_Row<N>& dbm_i = dbm[i];
-40039:     for (dimension_type j = space_dim + 1; j-- > 0; ) {
-40039:       if (i != j) {
-40039:         drop_some_non_integer_points_helper(dbm_i[j]);
-40039:       }
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::drop_some_non_integer_points(const Variables_Set& vars,
-40039:                                           Complexity_Class) {
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039:   const dimension_type min_space_dim = vars.space_dimension();
-40039:   if (space_dim < min_space_dim) {
-40039:     throw_dimension_incompatible("drop_some_non_integer_points(vs, cmpl)",
-40039:                                  min_space_dim);
-40039:   }
-40039:   if (std::numeric_limits<T>::is_integer || min_space_dim == 0) {
-40039:     return;
-40039:   }
-40039:   shortest_path_closure_assign();
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039:   const Variables_Set::const_iterator v_begin = vars.begin();
-40039:   const Variables_Set::const_iterator v_end = vars.end();
-40039:   ((void) 0);
-40039: 
-40039:   DB_Row<N>& dbm_0 = dbm[0];
-40039:   for (Variables_Set::const_iterator v_i = v_begin; v_i != v_end; ++v_i) {
-40039:     const dimension_type i = *v_i + 1;
-40039:     drop_some_non_integer_points_helper(dbm_0[i]);
-40039:     drop_some_non_integer_points_helper(dbm[i][0]);
-40039:   }
-40039: 
-40039: 
-40039:   for (Variables_Set::const_iterator v_i = v_begin; v_i != v_end; ++v_i) {
-40039:     const dimension_type i = *v_i + 1;
-40039:     DB_Row<N>& dbm_i = dbm[i];
-40039:     for (Variables_Set::const_iterator v_j = v_begin; v_j != v_end; ++v_j) {
-40039:       const dimension_type j = *v_j + 1;
-40039:       if (i != j) {
-40039:         drop_some_non_integer_points_helper(dbm_i[j]);
-40039:       }
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: std::ostream&
-40039: IO_Operators::operator<<(std::ostream& s, const BD_Shape<T>& bds) {
-40039:   typedef typename BD_Shape<T>::coefficient_type N;
-40039:   if (bds.is_universe()) {
-40039:     s << "true";
-40039:   }
-40039:   else {
-40039: 
-40039:     dimension_type n = bds.space_dimension();
-40039:     if (bds.marked_empty()) {
-40039:       s << "false";
-40039:     }
-40039:     else {
-40039:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_v; N& v = holder_v.item();
-40039:       bool first = true;
-40039:       for (dimension_type i = 0; i <= n; ++i) {
-40039:         for (dimension_type j = i + 1; j <= n; ++j) {
-40039:           const N& c_i_j = bds.dbm[i][j];
-40039:           const N& c_j_i = bds.dbm[j][i];
-40039:           if (is_additive_inverse(c_j_i, c_i_j)) {
-40039: 
-40039:             if (first) {
-40039:               first = false;
-40039:             }
-40039:             else {
-40039:               s << ", ";
-40039:             }
-40039:             if (i == 0) {
-40039: 
-40039:               s << Variable(j - 1);
-40039:               s << " = " << c_i_j;
-40039:             }
-40039:             else {
-40039: 
-40039:               if (sgn(c_i_j) >= 0) {
-40039:                 s << Variable(j - 1);
-40039:                 s << " - ";
-40039:                 s << Variable(i - 1);
-40039:                 s << " = " << c_i_j;
-40039:               }
-40039:               else {
-40039:                 s << Variable(i - 1);
-40039:                 s << " - ";
-40039:                 s << Variable(j - 1);
-40039:                 s << " = " << c_j_i;
-40039:               }
-40039:             }
-40039:           }
-40039:           else {
-40039: 
-40039:             if (!is_plus_infinity(c_j_i)) {
-40039:               if (first) {
-40039:                 first = false;
-40039:               }
-40039:               else {
-40039:                 s << ", ";
-40039:               }
-40039:               if (i == 0) {
-40039: 
-40039:                 s << Variable(j - 1);
-40039:                 neg_assign_r(v, c_j_i, ROUND_DOWN);
-40039:                 s << " >= " << v;
-40039:               }
-40039:               else {
-40039: 
-40039:                 if (sgn(c_j_i) >= 0) {
-40039:                   s << Variable(i - 1);
-40039:                   s << " - ";
-40039:                   s << Variable(j - 1);
-40039:                   s << " <= " << c_j_i;
-40039:                 }
-40039:                 else {
-40039:                   s << Variable(j - 1);
-40039:                   s << " - ";
-40039:                   s << Variable(i - 1);
-40039:                   neg_assign_r(v, c_j_i, ROUND_DOWN);
-40039:                   s << " >= " << v;
-40039:                 }
-40039:               }
-40039:             }
-40039:             if (!is_plus_infinity(c_i_j)) {
-40039:               if (first) {
-40039:                 first = false;
-40039:               }
-40039:               else {
-40039:                 s << ", ";
-40039:               }
-40039:               if (i == 0) {
-40039: 
-40039:                 s << Variable(j - 1);
-40039:                 s << " <= " << c_i_j;
-40039:               }
-40039:               else {
-40039: 
-40039:                 if (sgn(c_i_j) >= 0) {
-40039:                   s << Variable(j - 1);
-40039:                   s << " - ";
-40039:                   s << Variable(i - 1);
-40039:                   s << " <= " << c_i_j;
-40039:                 }
-40039:                 else {
-40039:                   s << Variable(i - 1);
-40039:                   s << " - ";
-40039:                   s << Variable(j - 1);
-40039:                   neg_assign_r(v, c_i_j, ROUND_DOWN);
-40039:                   s << " >= " << v;
-40039:                 }
-40039:               }
-40039:             }
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039:   return s;
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::ascii_dump(std::ostream& s) const {
-40039:   status.ascii_dump(s);
-40039:   s << "\n";
-40039:   dbm.ascii_dump(s);
-40039:   s << "\n";
-40039:   redundancy_dbm.ascii_dump(s);
-40039: }
-40039: 
-40039: template <typename T> void BD_Shape<T>::ascii_dump() const { ascii_dump(std::cerr); } template <typename T> void BD_Shape<T>::print() const { using IO_Operators::operator<<; std::cerr << *this; }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: BD_Shape<T>::ascii_load(std::istream& s) {
-40039:   if (!status.ascii_load(s)) {
-40039:     return false;
-40039:   }
-40039:   if (!dbm.ascii_load(s)) {
-40039:     return false;
-40039:   }
-40039:   if (!redundancy_dbm.ascii_load(s)) {
-40039:     return false;
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename T>
-40039: memory_size_type
-40039: BD_Shape<T>::external_memory_in_bytes() const {
-40039:   return dbm.external_memory_in_bytes()
-40039:     + redundancy_dbm.external_memory_in_bytes();
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: BD_Shape<T>::OK() const {
-40039: 
-40039:   if (!dbm.OK()) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (!status.OK()) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (marked_empty()) {
-40039:     return true;
-40039:   }
-40039: 
-40039:   for (dimension_type i = dbm.num_rows(); i-- > 0; ) {
-40039:     for (dimension_type j = dbm.num_rows(); j-- > 0; ) {
-40039:       if (is_minus_infinity(dbm[i][j])) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:         return false;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   for (dimension_type i = dbm.num_rows(); i-- > 0; ) {
-40039:     if (!is_plus_infinity(dbm[i][i])) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       return false;
-40039:     }
-40039:   }
-40039: 
-40039:   if (marked_shortest_path_closed()) {
-40039:     BD_Shape x = *this;
-40039:     x.reset_shortest_path_closed();
-40039:     x.shortest_path_closure_assign();
-40039:     if (x.dbm != dbm) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       return false;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (std::numeric_limits<coefficient_type_base>::is_exact) {
-40039: 
-40039: 
-40039:     if (marked_shortest_path_reduced()) {
-40039: 
-40039:       for (dimension_type i = dbm.num_rows(); i-- > 0; ) {
-40039:         for (dimension_type j = dbm.num_rows(); j-- > 0; ) {
-40039:           if (!redundancy_dbm[i][j] && is_plus_infinity(dbm[i][j])) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:             return false;
-40039:           }
-40039:         }
-40039:       }
-40039:       BD_Shape x = *this;
-40039:       x.reset_shortest_path_reduced();
-40039:       x.shortest_path_reduction_assign();
-40039:       if (x.redundancy_dbm != redundancy_dbm) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:         return false;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::throw_dimension_incompatible(const char* method,
-40039:                                           const BD_Shape& y) const {
-40039:   std::ostringstream s;
-40039:   s << "PPL::BD_Shape::" << method << ":" << std::endl
-40039:     << "this->space_dimension() == " << space_dimension()
-40039:     << ", y->space_dimension() == " << y.space_dimension() << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::throw_dimension_incompatible(const char* method,
-40039:                                           dimension_type required_dim) const {
-40039:   std::ostringstream s;
-40039:   s << "PPL::BD_Shape::" << method << ":" << std::endl
-40039:     << "this->space_dimension() == " << space_dimension()
-40039:     << ", required dimension == " << required_dim << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::throw_dimension_incompatible(const char* method,
-40039:                                           const Constraint& c) const {
-40039:   std::ostringstream s;
-40039:   s << "PPL::BD_Shape::" << method << ":" << std::endl
-40039:     << "this->space_dimension() == " << space_dimension()
-40039:     << ", c->space_dimension == " << c.space_dimension() << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::throw_dimension_incompatible(const char* method,
-40039:                                           const Congruence& cg) const {
-40039:   std::ostringstream s;
-40039:   s << "PPL::BD_Shape::" << method << ":" << std::endl
-40039:     << "this->space_dimension() == " << space_dimension()
-40039:     << ", cg->space_dimension == " << cg.space_dimension() << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::throw_dimension_incompatible(const char* method,
-40039:                                           const Generator& g) const {
-40039:   std::ostringstream s;
-40039:   s << "PPL::BD_Shape::" << method << ":" << std::endl
-40039:     << "this->space_dimension() == " << space_dimension()
-40039:     << ", g->space_dimension == " << g.space_dimension() << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::throw_expression_too_complex(const char* method,
-40039:                                           const Linear_Expression& le) {
-40039:   using namespace IO_Operators;
-40039:   std::ostringstream s;
-40039:   s << "PPL::BD_Shape::" << method << ":" << std::endl
-40039:     << le << " is too complex.";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::throw_dimension_incompatible(const char* method,
-40039:                                           const char* le_name,
-40039:                                           const Linear_Expression& le) const {
-40039:   std::ostringstream s;
-40039:   s << "PPL::BD_Shape::" << method << ":" << std::endl
-40039:     << "this->space_dimension() == " << space_dimension()
-40039:     << ", " << le_name << "->space_dimension() == "
-40039:     << le.space_dimension() << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename T>
-40039: template<typename Interval_Info>
-40039: void
-40039: BD_Shape<T>::throw_dimension_incompatible(const char* method,
-40039:                                           const char* lf_name,
-40039:                                           const Linear_Form< Interval<T,
-40039:                                           Interval_Info> >& lf) const {
-40039:   std::ostringstream s;
-40039:   s << "PPL::BD_Shape::" << method << ":" << std::endl
-40039:     << "this->space_dimension() == " << space_dimension()
-40039:     << ", " << lf_name << "->space_dimension() == "
-40039:     << lf.space_dimension() << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: BD_Shape<T>::throw_invalid_argument(const char* method, const char* reason) {
-40039:   std::ostringstream s;
-40039:   s << "PPL::BD_Shape::" << method << ":" << std::endl
-40039:     << reason << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: }
-40039: # 2373 "../../src/BD_Shape_defs.hh" 2
-40039: # 39 "../../src/Box_templates.hh" 2
-40039: 
-40039: 
-40039: # 1 "../../src/Rational_Interval.hh" 1
-40039: # 30 "../../src/Rational_Interval.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: struct Rational_Interval_Info_Policy {
-40039:   enum const_bool_value_store_special { store_special = (true) };
-40039:   enum const_bool_value_store_open { store_open = (true) };
-40039:   enum const_bool_value_cache_empty { cache_empty = (true) };
-40039:   enum const_bool_value_cache_singleton { cache_singleton = (true) };
-40039:   enum const_bool_value_cache_normalized { cache_normalized = (false) };
-40039:   enum anonymous_enum_next_bit { next_bit = (0) };
-40039:   enum const_bool_value_may_be_empty { may_be_empty = (true) };
-40039:   enum const_bool_value_may_contain_infinity { may_contain_infinity = (false) };
-40039:   enum const_bool_value_check_inexact { check_inexact = (false) };
-40039: };
-40039: 
-40039: typedef Interval_Info_Bitset<unsigned int,
-40039:                              Rational_Interval_Info_Policy> Rational_Interval_Info;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef Interval<mpq_class, Rational_Interval_Info> Rational_Interval;
-40039: 
-40039: }
-40039: # 42 "../../src/Box_templates.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename ITV>
-40039: inline
-40039: Box<ITV>::Box(dimension_type num_dimensions, Degenerate_Element kind)
-40039:   : seq(check_space_dimension_overflow(num_dimensions,
-40039:                                        max_space_dimension(),
-40039:                                        "PPL::Box::",
-40039:                                        "Box(n, k)",
-40039:                                        "n exceeds the maximum "
-40039:                                        "allowed space dimension")),
-40039:     status() {
-40039: 
-40039: 
-40039:   if (kind == UNIVERSE) {
-40039:     for (dimension_type i = num_dimensions; i-- > 0; ) {
-40039:       seq[i].assign(UNIVERSE);
-40039:     }
-40039:     set_empty_up_to_date();
-40039:   }
-40039:   else {
-40039:     set_empty();
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline
-40039: Box<ITV>::Box(const Constraint_System& cs)
-40039:   : seq(check_space_dimension_overflow(cs.space_dimension(),
-40039:                                        max_space_dimension(),
-40039:                                        "PPL::Box::",
-40039:                                        "Box(cs)",
-40039:                                        "cs exceeds the maximum "
-40039:                                        "allowed space dimension")),
-40039:     status() {
-40039: 
-40039:   for (dimension_type i = cs.space_dimension(); i-- > 0; ) {
-40039:     seq[i].assign(UNIVERSE);
-40039:   }
-40039:   add_constraints_no_check(cs);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline
-40039: Box<ITV>::Box(const Congruence_System& cgs)
-40039:   : seq(check_space_dimension_overflow(cgs.space_dimension(),
-40039:                                        max_space_dimension(),
-40039:                                        "PPL::Box::",
-40039:                                        "Box(cgs)",
-40039:                                        "cgs exceeds the maximum "
-40039:                                        "allowed space dimension")),
-40039:     status() {
-40039: 
-40039:   for (dimension_type i = cgs.space_dimension(); i-- > 0; ) {
-40039:     seq[i].assign(UNIVERSE);
-40039:   }
-40039:   add_congruences_no_check(cgs);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: template <typename Other_ITV>
-40039: inline
-40039: Box<ITV>::Box(const Box<Other_ITV>& y, Complexity_Class)
-40039:   : seq(y.space_dimension()),
-40039: 
-40039: 
-40039:     status() {
-40039: 
-40039:   if (y.marked_empty()) {
-40039:     set_empty();
-40039:   }
-40039: 
-40039:   if (!y.marked_empty()) {
-40039:     for (dimension_type k = y.space_dimension(); k-- > 0; ) {
-40039:       seq[k].assign(y.seq[k]);
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: Box<ITV>::Box(const Generator_System& gs)
-40039:   : seq(check_space_dimension_overflow(gs.space_dimension(),
-40039:                                        max_space_dimension(),
-40039:                                        "PPL::Box::",
-40039:                                        "Box(gs)",
-40039:                                        "gs exceeds the maximum "
-40039:                                        "allowed space dimension")),
-40039:     status() {
-40039:   const Generator_System::const_iterator gs_begin = gs.begin();
-40039:   const Generator_System::const_iterator gs_end = gs.end();
-40039:   if (gs_begin == gs_end) {
-40039: 
-40039:     set_empty();
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   set_empty_up_to_date();
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
-40039:   bool point_seen = false;
-40039: 
-40039:   for (Generator_System::const_iterator
-40039:          gs_i = gs_begin; gs_i != gs_end; ++gs_i) {
-40039:     const Generator& g = *gs_i;
-40039:     if (g.is_point()) {
-40039:       const Coefficient& d = g.divisor();
-40039:       if (point_seen) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:         for (dimension_type i = space_dim; i-- > 0; ) {
-40039:           assign_r(q.get_num(), g.coefficient(Variable(i)), ROUND_NOT_NEEDED);
-40039:           assign_r(q.get_den(), d, ROUND_NOT_NEEDED);
-40039:           q.canonicalize();
-40039:           Parma_Polyhedra_Library::Dirty_Temp<ITV> holder_iq; ITV& iq = holder_iq.item();
-40039:           iq.build(i_constraint(EQUAL, q));
-40039:           seq[i].join_assign(iq);
-40039:         }
-40039:       }
-40039:       else {
-40039: 
-40039:         point_seen = true;
-40039: 
-40039: 
-40039: 
-40039:         for (dimension_type i = space_dim; i-- > 0; ) {
-40039:           assign_r(q.get_num(), g.coefficient(Variable(i)), ROUND_NOT_NEEDED);
-40039:           assign_r(q.get_den(), d, ROUND_NOT_NEEDED);
-40039:           q.canonicalize();
-40039:           seq[i].build(i_constraint(EQUAL, q));
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   if (!point_seen) {
-40039: 
-40039:     throw std::invalid_argument("PPL::Box<ITV>::Box(gs):\n"
-40039:                                 "the non-empty generator system gs "
-40039:                                 "contains no points.");
-40039:   }
-40039: 
-40039: 
-40039:   for (Generator_System::const_iterator gs_i = gs_begin;
-40039:        gs_i != gs_end; ++gs_i) {
-40039:     const Generator& g = *gs_i;
-40039:     switch (g.type()) {
-40039:     case Generator::LINE:
-40039:       for (Generator::expr_type::const_iterator i = g.expression().begin(),
-40039:               i_end = g.expression().end();
-40039:               i != i_end; ++i) {
-40039:           seq[i.variable().id()].assign(UNIVERSE);
-40039:       }
-40039:       break;
-40039:     case Generator::RAY:
-40039:       for (Generator::expr_type::const_iterator i = g.expression().begin(),
-40039:               i_end = g.expression().end();
-40039:               i != i_end; ++i) {
-40039:         switch (sgn(*i)) {
-40039:         case 1:
-40039:           seq[i.variable().id()].upper_extend();
-40039:           break;
-40039:         case -1:
-40039:           seq[i.variable().id()].lower_extend();
-40039:           break;
-40039:         default:
-40039:           Parma_Polyhedra_Library::ppl_unreachable();
-40039:           break;
-40039:         }
-40039:       }
-40039:       break;
-40039:     case Generator::CLOSURE_POINT:
-40039:       {
-40039:         const Coefficient& d = g.divisor();
-40039: 
-40039: 
-40039: 
-40039:         for (dimension_type i = space_dim; i-- > 0; ) {
-40039:           assign_r(q.get_num(), g.coefficient(Variable(i)), ROUND_NOT_NEEDED);
-40039:           assign_r(q.get_den(), d, ROUND_NOT_NEEDED);
-40039:           q.canonicalize();
-40039:           ITV& seq_i = seq[i];
-40039:           seq_i.lower_extend(i_constraint(GREATER_THAN, q));
-40039:           seq_i.upper_extend(i_constraint(LESS_THAN, q));
-40039:         }
-40039:       }
-40039:       break;
-40039:     default:
-40039: 
-40039:       break;
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: template <typename T>
-40039: Box<ITV>::Box(const BD_Shape<T>& bds, Complexity_Class)
-40039:   : seq(check_space_dimension_overflow(bds.space_dimension(),
-40039:                                        max_space_dimension(),
-40039:                                        "PPL::Box::",
-40039:                                        "Box(bds)",
-40039:                                        "bds exceeds the maximum "
-40039:                                        "allowed space dimension")),
-40039:     status() {
-40039: 
-40039:   bds.shortest_path_closure_assign();
-40039:   if (bds.marked_empty()) {
-40039:     set_empty();
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   set_empty_up_to_date();
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039:   if (space_dim == 0) {
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039:   typedef typename BD_Shape<T>::coefficient_type Coeff;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Coeff> holder_tmp; Coeff& tmp = holder_tmp.item();
-40039:   const DB_Row<Coeff>& dbm_0 = bds.dbm[0];
-40039:   for (dimension_type i = space_dim; i-- > 0; ) {
-40039:     I_Constraint<Coeff> lower;
-40039:     I_Constraint<Coeff> upper;
-40039:     ITV& seq_i = seq[i];
-40039: 
-40039: 
-40039:     const Coeff& u = dbm_0[i+1];
-40039:     if (!is_plus_infinity(u)) {
-40039:       upper.set(LESS_OR_EQUAL, u, true);
-40039:     }
-40039: 
-40039: 
-40039:     const Coeff& negated_l = bds.dbm[i+1][0];
-40039:     if (!is_plus_infinity(negated_l)) {
-40039:       neg_assign_r(tmp, negated_l, ROUND_DOWN);
-40039:       lower.set(GREATER_OR_EQUAL, tmp);
-40039:     }
-40039: 
-40039:     seq_i.build(lower, upper);
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: template <typename T>
-40039: Box<ITV>::Box(const Octagonal_Shape<T>& oct, Complexity_Class)
-40039:   : seq(check_space_dimension_overflow(oct.space_dimension(),
-40039:                                        max_space_dimension(),
-40039:                                        "PPL::Box::",
-40039:                                        "Box(oct)",
-40039:                                        "oct exceeds the maximum "
-40039:                                        "allowed space dimension")),
-40039:     status() {
-40039: 
-40039:   oct.strong_closure_assign();
-40039:   if (oct.marked_empty()) {
-40039:     set_empty();
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   set_empty_up_to_date();
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039:   if (space_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_lower_bound; mpq_class& lower_bound = holder_lower_bound.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_upper_bound; mpq_class& upper_bound = holder_upper_bound.item();
-40039:   for (dimension_type i = space_dim; i-- > 0; ) {
-40039:     typedef typename Octagonal_Shape<T>::coefficient_type Coeff;
-40039:     I_Constraint<mpq_class> lower;
-40039:     I_Constraint<mpq_class> upper;
-40039:     ITV& seq_i = seq[i];
-40039:     const dimension_type ii = 2*i;
-40039:     const dimension_type cii = ii + 1;
-40039: 
-40039: 
-40039:     const Coeff& twice_ub = oct.matrix[cii][ii];
-40039:     if (!is_plus_infinity(twice_ub)) {
-40039:       assign_r(upper_bound, twice_ub, ROUND_NOT_NEEDED);
-40039:       div_2exp_assign_r(upper_bound, upper_bound, 1, ROUND_NOT_NEEDED);
-40039:       upper.set(LESS_OR_EQUAL, upper_bound);
-40039:     }
-40039: 
-40039: 
-40039:     const Coeff& twice_lb = oct.matrix[ii][cii];
-40039:     if (!is_plus_infinity(twice_lb)) {
-40039:       assign_r(lower_bound, twice_lb, ROUND_NOT_NEEDED);
-40039:       neg_assign_r(lower_bound, lower_bound, ROUND_NOT_NEEDED);
-40039:       div_2exp_assign_r(lower_bound, lower_bound, 1, ROUND_NOT_NEEDED);
-40039:       lower.set(GREATER_OR_EQUAL, lower_bound);
-40039:     }
-40039:     seq_i.build(lower, upper);
-40039:   }
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: Box<ITV>::Box(const Polyhedron& ph, Complexity_Class complexity)
-40039:   : seq(check_space_dimension_overflow(ph.space_dimension(),
-40039:                                        max_space_dimension(),
-40039:                                        "PPL::Box::",
-40039:                                        "Box(ph)",
-40039:                                        "ph exceeds the maximum "
-40039:                                        "allowed space dimension")),
-40039:     status() {
-40039: 
-40039:   set_empty_up_to_date();
-40039: 
-40039: 
-40039: 
-40039:   if (ph.marked_empty()) {
-40039:     set_empty();
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type space_dim = ph.space_dimension();
-40039:   if (space_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   if (ph.generators_are_up_to_date() && !ph.has_pending_constraints()) {
-40039:     Box tmp(ph.generators());
-40039:     m_swap(tmp);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: 
-40039:   if (complexity == POLYNOMIAL_COMPLEXITY) {
-40039: 
-40039:     for (dimension_type i = space_dim; i-- > 0; ) {
-40039:       seq[i].assign(UNIVERSE);
-40039:     }
-40039: 
-40039:     const Constraint_System cs = ph.simplified_constraints();
-40039: 
-40039: 
-40039: 
-40039:     const dimension_type max_iterations = 20;
-40039:     propagate_constraints_no_check(cs, max_iterations);
-40039:   }
-40039:   else if (complexity == SIMPLEX_COMPLEXITY) {
-40039:     MIP_Problem lp(space_dim);
-40039:     const Constraint_System& ph_cs = ph.constraints();
-40039:     if (!ph_cs.has_strict_inequalities()) {
-40039:       lp.add_constraints(ph_cs);
-40039:     }
-40039:     else {
-40039: 
-40039:       for (Constraint_System::const_iterator i = ph_cs.begin(),
-40039:              ph_cs_end = ph_cs.end(); i != ph_cs_end; ++i) {
-40039:         const Constraint& c = *i;
-40039:         if (c.is_strict_inequality()) {
-40039:           const Linear_Expression expr(c.expression());
-40039:           lp.add_constraint(expr >= 0);
-40039:         }
-40039:         else {
-40039:           lp.add_constraint(c);
-40039:         }
-40039:       }
-40039:     }
-40039: 
-40039:     if (!lp.is_satisfiable()) {
-40039:       set_empty();
-40039:       return;
-40039:     }
-40039: 
-40039:     Generator g(point());
-40039:     Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_lower_bound; mpq_class& lower_bound = holder_lower_bound.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_upper_bound; mpq_class& upper_bound = holder_upper_bound.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_bound_numer; Parma_Polyhedra_Library::Coefficient& bound_numer = holder_bound_numer.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_bound_denom; Parma_Polyhedra_Library::Coefficient& bound_denom = holder_bound_denom.item();
-40039:     for (dimension_type i = space_dim; i-- > 0; ) {
-40039:       I_Constraint<mpq_class> lower;
-40039:       I_Constraint<mpq_class> upper;
-40039:       ITV& seq_i = seq[i];
-40039:       lp.set_objective_function(Variable(i));
-40039: 
-40039:       lp.set_optimization_mode(MAXIMIZATION);
-40039:       if (lp.solve() == OPTIMIZED_MIP_PROBLEM) {
-40039:         g = lp.optimizing_point();
-40039:         lp.evaluate_objective_function(g, bound_numer, bound_denom);
-40039:         assign_r(upper_bound.get_num(), bound_numer, ROUND_NOT_NEEDED);
-40039:         assign_r(upper_bound.get_den(), bound_denom, ROUND_NOT_NEEDED);
-40039:         ((void) 0);
-40039:         upper.set(LESS_OR_EQUAL, upper_bound);
-40039:       }
-40039: 
-40039:       lp.set_optimization_mode(MINIMIZATION);
-40039:       if (lp.solve() == OPTIMIZED_MIP_PROBLEM) {
-40039:         g = lp.optimizing_point();
-40039:         lp.evaluate_objective_function(g, bound_numer, bound_denom);
-40039:         assign_r(lower_bound.get_num(), bound_numer, ROUND_NOT_NEEDED);
-40039:         assign_r(lower_bound.get_den(), bound_denom, ROUND_NOT_NEEDED);
-40039:         ((void) 0);
-40039:         lower.set(GREATER_OR_EQUAL, lower_bound);
-40039:       }
-40039:       seq_i.build(lower, upper);
-40039:     }
-40039:   }
-40039:   else {
-40039:     ((void) 0);
-40039:     if (ph.is_empty()) {
-40039:       set_empty();
-40039:     }
-40039:     else {
-40039:       Box tmp(ph.generators());
-40039:       m_swap(tmp);
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: Box<ITV>::Box(const Grid& gr, Complexity_Class)
-40039:   : seq(check_space_dimension_overflow(gr.space_dimension(),
-40039:                                        max_space_dimension(),
-40039:                                        "PPL::Box::",
-40039:                                        "Box(gr)",
-40039:                                        "gr exceeds the maximum "
-40039:                                        "allowed space dimension")),
-40039:     status() {
-40039: 
-40039:   if (gr.marked_empty()) {
-40039:     set_empty();
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   set_empty_up_to_date();
-40039: 
-40039:   const dimension_type space_dim = gr.space_dimension();
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039:   if (!gr.generators_are_up_to_date() && !gr.update_generators()) {
-40039: 
-40039:     set_empty();
-40039:     return;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_bound; mpq_class& bound = holder_bound.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_bound_numer; Parma_Polyhedra_Library::Coefficient& bound_numer = holder_bound_numer.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_bound_denom; Parma_Polyhedra_Library::Coefficient& bound_denom = holder_bound_denom.item();
-40039:   for (dimension_type i = space_dim; i-- > 0; ) {
-40039:     ITV& seq_i = seq[i];
-40039:     Variable var(i);
-40039:     bool max;
-40039:     if (gr.maximize(var, bound_numer, bound_denom, max)) {
-40039:       assign_r(bound.get_num(), bound_numer, ROUND_NOT_NEEDED);
-40039:       assign_r(bound.get_den(), bound_denom, ROUND_NOT_NEEDED);
-40039:       bound.canonicalize();
-40039:       seq_i.build(i_constraint(EQUAL, bound));
-40039:     }
-40039:     else {
-40039:       seq_i.assign(UNIVERSE);
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: template <typename D1, typename D2, typename R>
-40039: Box<ITV>::Box(const Partially_Reduced_Product<D1, D2, R>& dp,
-40039:               Complexity_Class complexity)
-40039:   : seq(), status() {
-40039:   check_space_dimension_overflow(dp.space_dimension(),
-40039:                                  max_space_dimension(),
-40039:                                  "PPL::Box::",
-40039:                                  "Box(dp)",
-40039:                                  "dp exceeds the maximum "
-40039:                                  "allowed space dimension");
-40039:   Box tmp1(dp.domain1(), complexity);
-40039:   Box tmp2(dp.domain2(), complexity);
-40039:   tmp1.intersection_assign(tmp2);
-40039:   m_swap(tmp1);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::add_space_dimensions_and_embed(const dimension_type m) {
-40039: 
-40039:   if (m == 0) {
-40039:     return;
-40039:   }
-40039:   check_space_dimension_overflow(m, max_space_dimension() - space_dimension(),
-40039:                                  "PPL::Box::",
-40039:                                  "add_space_dimensions_and_embed(m)",
-40039:                                  "adding m new space dimensions exceeds "
-40039:                                  "the maximum allowed space dimension");
-40039: 
-40039: 
-40039:   seq.insert(seq.end(), m, ITV(UNIVERSE));
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::add_space_dimensions_and_project(const dimension_type m) {
-40039: 
-40039:   if (m == 0) {
-40039:     return;
-40039:   }
-40039:   check_space_dimension_overflow(m, max_space_dimension() - space_dimension(),
-40039:                                  "PPL::Box::",
-40039:                                  "add_space_dimensions_and_project(m)",
-40039:                                  "adding m new space dimensions exceeds "
-40039:                                  "the maximum allowed space dimension");
-40039: 
-40039:   seq.insert(seq.end(), m, ITV(0));
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: bool
-40039: operator==(const Box<ITV>& x, const Box<ITV>& y) {
-40039:   const dimension_type x_space_dim = x.space_dimension();
-40039:   if (x_space_dim != y.space_dimension()) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (x.is_empty()) {
-40039:     return y.is_empty();
-40039:   }
-40039: 
-40039:   if (y.is_empty()) {
-40039:     return x.is_empty();
-40039:   }
-40039: 
-40039:   for (dimension_type k = x_space_dim; k-- > 0; ) {
-40039:     if (x.seq[k] != y.seq[k]) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: bool
-40039: Box<ITV>::bounds(const Linear_Expression& expr, const bool from_above) const {
-40039: 
-40039:   const dimension_type expr_space_dim = expr.space_dimension();
-40039:   const dimension_type space_dim = space_dimension();
-40039:   if (space_dim < expr_space_dim) {
-40039:     throw_dimension_incompatible((from_above
-40039:                                   ? "bounds_from_above(e)"
-40039:                                   : "bounds_from_below(e)"), "e", expr);
-40039:   }
-40039: 
-40039:   if (space_dim == 0 || is_empty()) {
-40039:     return true;
-40039:   }
-40039:   const int from_above_sign = from_above ? 1 : -1;
-40039: 
-40039: 
-40039:   for (Linear_Expression::const_iterator i = expr.begin(),
-40039:           i_end = expr.end(); i != i_end; ++i) {
-40039:     const Variable v = i.variable();
-40039:     switch (sgn(*i) * from_above_sign) {
-40039:     case 1:
-40039:       if (seq[v.id()].upper_is_boundary_infinity()) {
-40039:         return false;
-40039:       }
-40039:       break;
-40039:     case 0:
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       break;
-40039:     case -1:
-40039:       if (seq[v.id()].lower_is_boundary_infinity()) {
-40039:         return false;
-40039:       }
-40039:       break;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: Poly_Con_Relation
-40039: interval_relation(const ITV& i,
-40039:                   const Constraint::Type constraint_type,
-40039:                   Coefficient_traits::const_reference numer,
-40039:                   Coefficient_traits::const_reference denom) {
-40039: 
-40039:   if (i.is_universe()) {
-40039:     return Poly_Con_Relation::strictly_intersects();
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_bound; mpq_class& bound = holder_bound.item();
-40039:   assign_r(bound.get_num(), numer, ROUND_NOT_NEEDED);
-40039:   assign_r(bound.get_den(), denom, ROUND_NOT_NEEDED);
-40039:   bound.canonicalize();
-40039:   neg_assign_r(bound, bound, ROUND_NOT_NEEDED);
-40039:   const bool is_lower_bound = (denom > 0);
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_bound_diff; mpq_class& bound_diff = holder_bound_diff.item();
-40039:   if (constraint_type == Constraint::EQUALITY) {
-40039:     if (i.lower_is_boundary_infinity()) {
-40039:       ((void) 0);
-40039:       assign_r(bound_diff, i.upper(), ROUND_NOT_NEEDED);
-40039:       sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED);
-40039:       switch (sgn(bound_diff)) {
-40039:       case 1:
-40039:         return Poly_Con_Relation::strictly_intersects();
-40039:       case 0:
-40039:         return i.upper_is_open()
-40039:           ? Poly_Con_Relation::is_disjoint()
-40039:           : Poly_Con_Relation::strictly_intersects();
-40039:       case -1:
-40039:         return Poly_Con_Relation::is_disjoint();
-40039:       }
-40039:     }
-40039:     else {
-40039:       assign_r(bound_diff, i.lower(), ROUND_NOT_NEEDED);
-40039:       sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED);
-40039:       switch (sgn(bound_diff)) {
-40039:       case 1:
-40039:         return Poly_Con_Relation::is_disjoint();
-40039:       case 0:
-40039:         if (i.lower_is_open()) {
-40039:           return Poly_Con_Relation::is_disjoint();
-40039:         }
-40039:         if (i.is_singleton()) {
-40039:           return Poly_Con_Relation::is_included()
-40039:             && Poly_Con_Relation::saturates();
-40039:         }
-40039:         return Poly_Con_Relation::strictly_intersects();
-40039:       case -1:
-40039:         if (i.upper_is_boundary_infinity()) {
-40039:           return Poly_Con_Relation::strictly_intersects();
-40039:         }
-40039:         else {
-40039:           assign_r(bound_diff, i.upper(), ROUND_NOT_NEEDED);
-40039:           sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED);
-40039:           switch (sgn(bound_diff)) {
-40039:           case 1:
-40039:             return Poly_Con_Relation::strictly_intersects();
-40039:           case 0:
-40039:             if (i.upper_is_open()) {
-40039:               return Poly_Con_Relation::is_disjoint();
-40039:             }
-40039:             else {
-40039:               return Poly_Con_Relation::strictly_intersects();
-40039:             }
-40039:           case -1:
-40039:             return Poly_Con_Relation::is_disjoint();
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   if (is_lower_bound) {
-40039:     if (i.lower_is_boundary_infinity()) {
-40039:       ((void) 0);
-40039:       assign_r(bound_diff, i.upper(), ROUND_NOT_NEEDED);
-40039:       sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED);
-40039:       switch (sgn(bound_diff)) {
-40039:       case 1:
-40039:         return Poly_Con_Relation::strictly_intersects();
-40039:       case 0:
-40039:         if (constraint_type == Constraint::STRICT_INEQUALITY
-40039:             || i.upper_is_open()) {
-40039:           return Poly_Con_Relation::is_disjoint();
-40039:         }
-40039:         else {
-40039:           return Poly_Con_Relation::strictly_intersects();
-40039:         }
-40039:       case -1:
-40039:         return Poly_Con_Relation::is_disjoint();
-40039:       }
-40039:     }
-40039:     else {
-40039:       assign_r(bound_diff, i.lower(), ROUND_NOT_NEEDED);
-40039:       sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED);
-40039:       switch (sgn(bound_diff)) {
-40039:       case 1:
-40039:         return Poly_Con_Relation::is_included();
-40039:       case 0:
-40039:         if (constraint_type == Constraint::NONSTRICT_INEQUALITY
-40039:             || i.lower_is_open()) {
-40039:           Poly_Con_Relation result = Poly_Con_Relation::is_included();
-40039:           if (i.is_singleton()) {
-40039:             result = result && Poly_Con_Relation::saturates();
-40039:           }
-40039:           return result;
-40039:         }
-40039:         else {
-40039:           ((void) 0)
-40039:                                        ;
-40039:           if (i.is_singleton()) {
-40039:             return Poly_Con_Relation::is_disjoint()
-40039:               && Poly_Con_Relation::saturates();
-40039:           }
-40039:           else {
-40039:             return Poly_Con_Relation::strictly_intersects();
-40039:           }
-40039:         }
-40039:       case -1:
-40039:         if (i.upper_is_boundary_infinity()) {
-40039:           return Poly_Con_Relation::strictly_intersects();
-40039:         }
-40039:         else {
-40039:           assign_r(bound_diff, i.upper(), ROUND_NOT_NEEDED);
-40039:           sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED);
-40039:           switch (sgn(bound_diff)) {
-40039:           case 1:
-40039:             return Poly_Con_Relation::strictly_intersects();
-40039:           case 0:
-40039:             if (constraint_type == Constraint::STRICT_INEQUALITY
-40039:                 || i.upper_is_open()) {
-40039:               return Poly_Con_Relation::is_disjoint();
-40039:             }
-40039:             else {
-40039:               return Poly_Con_Relation::strictly_intersects();
-40039:             }
-40039:           case -1:
-40039:             return Poly_Con_Relation::is_disjoint();
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039:   else {
-40039: 
-40039:     if (i.upper_is_boundary_infinity()) {
-40039:       return Poly_Con_Relation::strictly_intersects();
-40039:     }
-40039:     else {
-40039:       assign_r(bound_diff, i.upper(), ROUND_NOT_NEEDED);
-40039:       sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED);
-40039:       switch (sgn(bound_diff)) {
-40039:       case -1:
-40039:         return Poly_Con_Relation::is_included();
-40039:       case 0:
-40039:         if (constraint_type == Constraint::NONSTRICT_INEQUALITY
-40039:             || i.upper_is_open()) {
-40039:           Poly_Con_Relation result = Poly_Con_Relation::is_included();
-40039:           if (i.is_singleton()) {
-40039:             result = result && Poly_Con_Relation::saturates();
-40039:           }
-40039:           return result;
-40039:         }
-40039:         else {
-40039:           ((void) 0)
-40039:                                        ;
-40039:           if (i.is_singleton()) {
-40039:             return Poly_Con_Relation::is_disjoint()
-40039:               && Poly_Con_Relation::saturates();
-40039:           }
-40039:           else {
-40039:             return Poly_Con_Relation::strictly_intersects();
-40039:           }
-40039:         }
-40039:       case 1:
-40039:         if (i.lower_is_boundary_infinity()) {
-40039:           return Poly_Con_Relation::strictly_intersects();
-40039:         }
-40039:         else {
-40039:           assign_r(bound_diff, i.lower(), ROUND_NOT_NEEDED);
-40039:           sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED);
-40039:           switch (sgn(bound_diff)) {
-40039:           case -1:
-40039:             return Poly_Con_Relation::strictly_intersects();
-40039:           case 0:
-40039:             if (constraint_type == Constraint::STRICT_INEQUALITY
-40039:                 || i.lower_is_open()) {
-40039:               return Poly_Con_Relation::is_disjoint();
-40039:             }
-40039:             else {
-40039:               return Poly_Con_Relation::strictly_intersects();
-40039:             }
-40039:           case 1:
-40039:             return Poly_Con_Relation::is_disjoint();
-40039:           }
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::ppl_unreachable();
-40039:   return Poly_Con_Relation::nothing();
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: Poly_Con_Relation
-40039: Box<ITV>::relation_with(const Congruence& cg) const {
-40039:   const dimension_type cg_space_dim = cg.space_dimension();
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039: 
-40039:   if (cg_space_dim > space_dim) {
-40039:     throw_dimension_incompatible("relation_with(cg)", cg);
-40039:   }
-40039:   if (is_empty()) {
-40039:     return Poly_Con_Relation::saturates()
-40039:       && Poly_Con_Relation::is_included()
-40039:       && Poly_Con_Relation::is_disjoint();
-40039:   }
-40039: 
-40039:   if (space_dim == 0) {
-40039:     if (cg.is_inconsistent()) {
-40039:       return Poly_Con_Relation::is_disjoint();
-40039:     }
-40039:     else {
-40039:       return Poly_Con_Relation::saturates()
-40039:         && Poly_Con_Relation::is_included();
-40039:     }
-40039:   }
-40039: 
-40039:   if (cg.is_equality()) {
-40039:     const Constraint c(cg);
-40039:     return relation_with(c);
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Rational_Interval> holder_r; Rational_Interval& r = holder_r.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Rational_Interval> holder_t; Rational_Interval& t = holder_t.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_m; mpq_class& m = holder_m.item();
-40039:   r = 0;
-40039:   for (Congruence::expr_type::const_iterator i = cg.expression().begin(),
-40039:       i_end = cg.expression().end(); i != i_end; ++i) {
-40039:     const Coefficient& cg_i = *i;
-40039:     const Variable v = i.variable();
-40039:     assign_r(m, cg_i, ROUND_NOT_NEEDED);
-40039: 
-40039:     t.build(seq[v.id()].lower_constraint(), seq[v.id()].upper_constraint());
-40039:     t *= m;
-40039:     r += t;
-40039:   }
-40039: 
-40039:   if (r.lower_is_boundary_infinity() || r.upper_is_boundary_infinity()) {
-40039:     return Poly_Con_Relation::strictly_intersects();
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_lower; Parma_Polyhedra_Library::Coefficient& lower = holder_lower.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_mod; Parma_Polyhedra_Library::Coefficient& mod = holder_mod.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_v; Parma_Polyhedra_Library::Coefficient& v = holder_v.item();
-40039:   mod = cg.modulus();
-40039:   v = cg.inhomogeneous_term() % mod;
-40039:   assign_r(lower, r.lower(), ROUND_DOWN);
-40039:   v -= ((lower / mod) * mod);
-40039:   if (v + lower > 0) {
-40039:     v -= mod;
-40039:   }
-40039:   return interval_relation(r, Constraint::EQUALITY, v);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: Poly_Con_Relation
-40039: Box<ITV>::relation_with(const Constraint& c) const {
-40039:   const dimension_type c_space_dim = c.space_dimension();
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039: 
-40039:   if (c_space_dim > space_dim) {
-40039:     throw_dimension_incompatible("relation_with(c)", c);
-40039:   }
-40039: 
-40039:   if (is_empty()) {
-40039:     return Poly_Con_Relation::saturates()
-40039:       && Poly_Con_Relation::is_included()
-40039:       && Poly_Con_Relation::is_disjoint();
-40039:   }
-40039: 
-40039:   if (space_dim == 0) {
-40039:     if ((c.is_equality() && c.inhomogeneous_term() != 0)
-40039:         || (c.is_inequality() && c.inhomogeneous_term() < 0)) {
-40039:       return Poly_Con_Relation::is_disjoint();
-40039:     }
-40039:     else if (c.is_strict_inequality() && c.inhomogeneous_term() == 0) {
-40039: 
-40039: 
-40039:       return Poly_Con_Relation::saturates()
-40039:         && Poly_Con_Relation::is_disjoint();
-40039:     }
-40039:     else if (c.is_equality() || c.inhomogeneous_term() == 0) {
-40039:       return Poly_Con_Relation::saturates()
-40039:         && Poly_Con_Relation::is_included();
-40039:     }
-40039:     else {
-40039: 
-40039: 
-40039: 
-40039:       return Poly_Con_Relation::is_included();
-40039:     }
-40039:   }
-40039: 
-40039:   dimension_type c_num_vars = 0;
-40039:   dimension_type c_only_var = 0;
-40039: 
-40039:   if (Box_Helpers::extract_interval_constraint(c, c_num_vars, c_only_var)) {
-40039:     if (c_num_vars == 0) {
-40039: 
-40039:       switch (sgn(c.inhomogeneous_term())) {
-40039:       case -1:
-40039:         return Poly_Con_Relation::is_disjoint();
-40039:       case 0:
-40039:         if (c.is_strict_inequality()) {
-40039:           return Poly_Con_Relation::saturates()
-40039:             && Poly_Con_Relation::is_disjoint();
-40039:         }
-40039:         else {
-40039:           return Poly_Con_Relation::saturates()
-40039:             && Poly_Con_Relation::is_included();
-40039:         }
-40039:       case 1:
-40039:         return Poly_Con_Relation::is_included();
-40039:       }
-40039:     }
-40039:     else {
-40039: 
-40039:       return interval_relation(seq[c_only_var],
-40039:                                c.type(),
-40039:                                c.inhomogeneous_term(),
-40039:                                c.coefficient(Variable(c_only_var)));
-40039:     }
-40039:   }
-40039:   else {
-40039: 
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Rational_Interval> holder_r; Rational_Interval& r = holder_r.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Rational_Interval> holder_t; Rational_Interval& t = holder_t.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_m; mpq_class& m = holder_m.item();
-40039:     r = 0;
-40039:     const Constraint::expr_type& e = c.expression();
-40039:     for (Constraint::expr_type::const_iterator i = e.begin(), i_end = e.end();
-40039:           i != i_end; ++i) {
-40039:       assign_r(m, *i, ROUND_NOT_NEEDED);
-40039:       const Variable v = i.variable();
-40039: 
-40039:       t.build(seq[v.id()].lower_constraint(), seq[v.id()].upper_constraint());
-40039:       t *= m;
-40039:       r += t;
-40039:     }
-40039:     return interval_relation(r,
-40039:                              c.type(),
-40039:                              c.inhomogeneous_term());
-40039:   }
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::ppl_unreachable();
-40039:   return Poly_Con_Relation::nothing();
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: Poly_Gen_Relation
-40039: Box<ITV>::relation_with(const Generator& g) const {
-40039:   const dimension_type space_dim = space_dimension();
-40039:   const dimension_type g_space_dim = g.space_dimension();
-40039: 
-40039: 
-40039:   if (space_dim < g_space_dim) {
-40039:     throw_dimension_incompatible("relation_with(g)", g);
-40039:   }
-40039: 
-40039: 
-40039:   if (is_empty()) {
-40039:     return Poly_Gen_Relation::nothing();
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return Poly_Gen_Relation::subsumes();
-40039:   }
-40039: 
-40039:   if (g.is_line_or_ray()) {
-40039:     if (g.is_line()) {
-40039:       const Generator::expr_type& e = g.expression();
-40039:       for (Generator::expr_type::const_iterator i = e.begin(), i_end = e.end();
-40039:            i != i_end; ++i) {
-40039:         if (!seq[i.variable().id()].is_universe()) {
-40039:           return Poly_Gen_Relation::nothing();
-40039:         }
-40039:       }
-40039:       return Poly_Gen_Relation::subsumes();
-40039:     }
-40039:     else {
-40039:       ((void) 0);
-40039:       const Generator::expr_type& e = g.expression();
-40039:       for (Generator::expr_type::const_iterator i = e.begin(), i_end = e.end();
-40039:            i != i_end; ++i) {
-40039:         const Variable v = i.variable();
-40039:         switch (sgn(*i)) {
-40039:         case 1:
-40039:           if (!seq[v.id()].upper_is_boundary_infinity()) {
-40039:             return Poly_Gen_Relation::nothing();
-40039:           }
-40039:           break;
-40039:         case 0:
-40039:           Parma_Polyhedra_Library::ppl_unreachable();
-40039:           break;
-40039:         case -1:
-40039:           if (!seq[v.id()].lower_is_boundary_infinity()) {
-40039:             return Poly_Gen_Relation::nothing();
-40039:           }
-40039:           break;
-40039:         }
-40039:       }
-40039:       return Poly_Gen_Relation::subsumes();
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   const Coefficient& g_divisor = g.divisor();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_g_coord; mpq_class& g_coord = holder_g_coord.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_bound; mpq_class& bound = holder_bound.item();
-40039: 
-40039: 
-40039: 
-40039:   for (dimension_type i = g_space_dim; i-- > 0; ) {
-40039:     const ITV& seq_i = seq[i];
-40039:     if (seq_i.is_universe()) {
-40039:       continue;
-40039:     }
-40039:     assign_r(g_coord.get_num(), g.coefficient(Variable(i)), ROUND_NOT_NEEDED);
-40039:     assign_r(g_coord.get_den(), g_divisor, ROUND_NOT_NEEDED);
-40039:     g_coord.canonicalize();
-40039: 
-40039:     if (!seq_i.lower_is_boundary_infinity()) {
-40039:       assign_r(bound, seq_i.lower(), ROUND_NOT_NEEDED);
-40039:       if (g_coord <= bound) {
-40039:         if (seq_i.lower_is_open()) {
-40039:           if (g.is_point() || g_coord != bound) {
-40039:             return Poly_Gen_Relation::nothing();
-40039:           }
-40039:         }
-40039:         else if (g_coord != bound) {
-40039:           return Poly_Gen_Relation::nothing();
-40039:         }
-40039:       }
-40039:     }
-40039: 
-40039:     if (!seq_i.upper_is_boundary_infinity()) {
-40039:       assign_r(bound, seq_i.upper(), ROUND_NOT_NEEDED);
-40039:       if (g_coord >= bound) {
-40039:         if (seq_i.upper_is_open()) {
-40039:           if (g.is_point() || g_coord != bound) {
-40039:             return Poly_Gen_Relation::nothing();
-40039:           }
-40039:         }
-40039:         else if (g_coord != bound) {
-40039:           return Poly_Gen_Relation::nothing();
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039:   return Poly_Gen_Relation::subsumes();
-40039: }
-40039: 
-40039: 
-40039: template <typename ITV>
-40039: bool
-40039: Box<ITV>::max_min(const Linear_Expression& expr,
-40039:                   const bool maximize,
-40039:                   Coefficient& ext_n, Coefficient& ext_d,
-40039:                   bool& included) const {
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039:   const dimension_type expr_space_dim = expr.space_dimension();
-40039:   if (space_dim < expr_space_dim) {
-40039:     throw_dimension_incompatible((maximize
-40039:                                   ? "maximize(e, ...)"
-40039:                                   : "minimize(e, ...)"), "e", expr);
-40039:   }
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     if (marked_empty()) {
-40039:       return false;
-40039:     }
-40039:     else {
-40039:       ext_n = expr.inhomogeneous_term();
-40039:       ext_d = 1;
-40039:       included = true;
-40039:       return true;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   if (is_empty()) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_result; mpq_class& result = holder_result.item();
-40039:   assign_r(result, expr.inhomogeneous_term(), ROUND_NOT_NEEDED);
-40039:   bool is_included = true;
-40039:   const int maximize_sign = maximize ? 1 : -1;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_bound_i; mpq_class& bound_i = holder_bound_i.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_expr_i; mpq_class& expr_i = holder_expr_i.item();
-40039:   for (Linear_Expression::const_iterator i = expr.begin(),
-40039:           i_end = expr.end(); i != i_end; ++i) {
-40039:     const ITV& seq_i = seq[i.variable().id()];
-40039:     assign_r(expr_i, *i, ROUND_NOT_NEEDED);
-40039:     switch (sgn(expr_i) * maximize_sign) {
-40039:     case 1:
-40039:       if (seq_i.upper_is_boundary_infinity()) {
-40039:         return false;
-40039:       }
-40039:       assign_r(bound_i, seq_i.upper(), ROUND_NOT_NEEDED);
-40039:       add_mul_assign_r(result, bound_i, expr_i, ROUND_NOT_NEEDED);
-40039:       if (seq_i.upper_is_open()) {
-40039:         is_included = false;
-40039:       }
-40039:       break;
-40039:     case 0:
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       break;
-40039:     case -1:
-40039:       if (seq_i.lower_is_boundary_infinity()) {
-40039:         return false;
-40039:       }
-40039:       assign_r(bound_i, seq_i.lower(), ROUND_NOT_NEEDED);
-40039:       add_mul_assign_r(result, bound_i, expr_i, ROUND_NOT_NEEDED);
-40039:       if (seq_i.lower_is_open()) {
-40039:         is_included = false;
-40039:       }
-40039:       break;
-40039:     }
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   ext_n = result.get_num();
-40039:   ext_d = result.get_den();
-40039:   included = is_included;
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: bool
-40039: Box<ITV>::max_min(const Linear_Expression& expr,
-40039:                   const bool maximize,
-40039:                   Coefficient& ext_n, Coefficient& ext_d,
-40039:                   bool& included,
-40039:                   Generator& g) const {
-40039:   if (!max_min(expr, maximize, ext_n, ext_d, included)) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   Linear_Expression g_expr;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_g_divisor; Parma_Polyhedra_Library::Coefficient& g_divisor = holder_g_divisor.item();
-40039:   g_divisor = 1;
-40039:   const int maximize_sign = maximize ? 1 : -1;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_g_coord; mpq_class& g_coord = holder_g_coord.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_lcm; Parma_Polyhedra_Library::Coefficient& lcm = holder_lcm.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_factor; Parma_Polyhedra_Library::Coefficient& factor = holder_factor.item();
-40039: 
-40039: 
-40039:   for (dimension_type i = space_dimension(); i-- > 0; ) {
-40039:     const ITV& seq_i = seq[i];
-40039:     switch (sgn(expr.coefficient(Variable(i))) * maximize_sign) {
-40039:     case 1:
-40039:       assign_r(g_coord, seq_i.upper(), ROUND_NOT_NEEDED);
-40039:       break;
-40039:     case 0:
-40039: 
-40039: 
-40039: 
-40039:       if (seq_i.contains(0)) {
-40039:         continue;
-40039:       }
-40039:       if (!seq_i.lower_is_boundary_infinity()) {
-40039:         if (seq_i.lower_is_open()) {
-40039:           if (!seq_i.upper_is_boundary_infinity()) {
-40039:             if (seq_i.upper_is_open()) {
-40039: 
-40039:               assign_r(g_coord, seq_i.lower(), ROUND_NOT_NEEDED);
-40039:               Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_seq_i_upper; mpq_class& q_seq_i_upper = holder_q_seq_i_upper.item();
-40039:               assign_r(q_seq_i_upper, seq_i.upper(), ROUND_NOT_NEEDED);
-40039:               g_coord += q_seq_i_upper;
-40039:               g_coord /= 2;
-40039:             }
-40039:             else {
-40039: 
-40039:               assign_r(g_coord, seq_i.upper(), ROUND_NOT_NEEDED);
-40039:             }
-40039:           }
-40039:           else {
-40039: 
-40039:             assign_r(g_coord, seq_i.lower(), ROUND_NOT_NEEDED);
-40039:             ++g_coord;
-40039:           }
-40039:         }
-40039:         else {
-40039: 
-40039:           assign_r(g_coord, seq_i.lower(), ROUND_NOT_NEEDED);
-40039:         }
-40039:       }
-40039:       else {
-40039: 
-40039: 
-40039:         ((void) 0);
-40039:         assign_r(g_coord, seq_i.upper(), ROUND_NOT_NEEDED);
-40039:         if (seq_i.upper_is_open()) {
-40039:           --g_coord;
-40039:         }
-40039:       }
-40039:       break;
-40039:     case -1:
-40039:       assign_r(g_coord, seq_i.lower(), ROUND_NOT_NEEDED);
-40039:       break;
-40039:     }
-40039: 
-40039:     assign_r(denom, g_coord.get_den(), ROUND_NOT_NEEDED);
-40039:     lcm_assign(lcm, g_divisor, denom);
-40039:     exact_div_assign(factor, lcm, g_divisor);
-40039:     g_expr *= factor;
-40039:     exact_div_assign(factor, lcm, denom);
-40039:     assign_r(numer, g_coord.get_num(), ROUND_NOT_NEEDED);
-40039:     numer *= factor;
-40039:     g_expr += numer * Variable(i);
-40039:     g_divisor = lcm;
-40039:   }
-40039:   g = Generator::point(g_expr, g_divisor);
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: bool
-40039: Box<ITV>::contains(const Box& y) const {
-40039:   const Box& x = *this;
-40039: 
-40039:   if (x.space_dimension() != y.space_dimension()) {
-40039:     x.throw_dimension_incompatible("contains(y)", y);
-40039:   }
-40039: 
-40039: 
-40039:   if (y.is_empty()) {
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   if (x.is_empty()) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   for (dimension_type k = x.seq.size(); k-- > 0; ) {
-40039: 
-40039:     if (!x.seq[k].contains(y.seq[k])) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: bool
-40039: Box<ITV>::is_disjoint_from(const Box& y) const {
-40039:   const Box& x = *this;
-40039: 
-40039:   if (x.space_dimension() != y.space_dimension()) {
-40039:     x.throw_dimension_incompatible("is_disjoint_from(y)", y);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (x.marked_empty() || y.marked_empty()) {
-40039:     return true;
-40039:   }
-40039: 
-40039:   for (dimension_type k = x.seq.size(); k-- > 0; ) {
-40039: 
-40039:     if (x.seq[k].is_disjoint_from(y.seq[k])) {
-40039:       return true;
-40039:     }
-40039:   }
-40039:   return false;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline bool
-40039: Box<ITV>::upper_bound_assign_if_exact(const Box& y) {
-40039:   Box& x = *this;
-40039: 
-40039: 
-40039:   if (x.space_dimension() != y.space_dimension()) {
-40039:     x.throw_dimension_incompatible("upper_bound_assign_if_exact(y)", y);
-40039:   }
-40039: 
-40039: 
-40039:   if (y.is_empty()) {
-40039:     return true;
-40039:   }
-40039:   if (x.is_empty()) {
-40039:     x = y;
-40039:     return true;
-40039:   }
-40039: 
-40039:   bool x_j_does_not_contain_y_j = false;
-40039:   bool y_j_does_not_contain_x_j = false;
-40039: 
-40039:   for (dimension_type i = x.seq.size(); i-- > 0; ) {
-40039:     const ITV& x_seq_i = x.seq[i];
-40039:     const ITV& y_seq_i = y.seq[i];
-40039: 
-40039:     if (!x_seq_i.can_be_exactly_joined_to(y_seq_i)) {
-40039:       return false;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     bool y_i_does_not_contain_x_i = !y_seq_i.contains(x_seq_i);
-40039:     if (y_i_does_not_contain_x_i && x_j_does_not_contain_y_j) {
-40039:       return false;
-40039:     }
-40039:     if (!x_seq_i.contains(y_seq_i)) {
-40039:       if (y_j_does_not_contain_x_j) {
-40039:         return false;
-40039:       }
-40039:       else {
-40039:         x_j_does_not_contain_y_j = true;
-40039:       }
-40039:     }
-40039:     if (y_i_does_not_contain_x_i) {
-40039:       y_j_does_not_contain_x_j = true;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   for (dimension_type k = x.seq.size(); k-- > 0; ) {
-40039:     x.seq[k].join_assign(y.seq[k]);
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: bool
-40039: Box<ITV>::OK() const {
-40039:   if (status.test_empty_up_to_date() && !status.test_empty()) {
-40039:     Box tmp = *this;
-40039:     tmp.reset_empty_up_to_date();
-40039:     if (tmp.check_empty()) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       return false;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   if (!marked_empty()) {
-40039:     for (dimension_type k = seq.size(); k-- > 0; ) {
-40039:       if (!seq[k].OK()) {
-40039:         return false;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: dimension_type
-40039: Box<ITV>::affine_dimension() const {
-40039:   dimension_type d = space_dimension();
-40039: 
-40039:   if (d == 0) {
-40039:     return 0;
-40039:   }
-40039: 
-40039: 
-40039:   if (is_empty()) {
-40039:     return 0;
-40039:   }
-40039: 
-40039:   for (dimension_type k = d; k-- > 0; ) {
-40039:     if (seq[k].is_singleton()) {
-40039:       --d;
-40039:     }
-40039:   }
-40039: 
-40039:   return d;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: bool
-40039: Box<ITV>::check_empty() const {
-40039:   ((void) 0);
-40039:   Box<ITV>& x = const_cast<Box<ITV>&>(*this);
-40039:   for (dimension_type k = seq.size(); k-- > 0; ) {
-40039:     if (seq[k].is_empty()) {
-40039:       x.set_empty();
-40039:       return true;
-40039:     }
-40039:   }
-40039:   x.set_nonempty();
-40039:   return false;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: bool
-40039: Box<ITV>::is_universe() const {
-40039:   if (marked_empty()) {
-40039:     return false;
-40039:   }
-40039:   for (dimension_type k = seq.size(); k-- > 0; ) {
-40039:     if (!seq[k].is_universe()) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: bool
-40039: Box<ITV>::is_topologically_closed() const {
-40039:   if (ITV::is_always_topologically_closed() || is_empty()) {
-40039:     return true;
-40039:   }
-40039: 
-40039:   for (dimension_type k = seq.size(); k-- > 0; ) {
-40039:     if (!seq[k].is_topologically_closed()) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: bool
-40039: Box<ITV>::is_discrete() const {
-40039:   if (is_empty()) {
-40039:     return true;
-40039:   }
-40039:   for (dimension_type k = seq.size(); k-- > 0; ) {
-40039:     if (!seq[k].is_singleton()) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: bool
-40039: Box<ITV>::is_bounded() const {
-40039:   if (is_empty()) {
-40039:     return true;
-40039:   }
-40039:   for (dimension_type k = seq.size(); k-- > 0; ) {
-40039:     if (!seq[k].is_bounded()) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: bool
-40039: Box<ITV>::contains_integer_point() const {
-40039:   if (marked_empty()) {
-40039:     return false;
-40039:   }
-40039:   for (dimension_type k = seq.size(); k-- > 0; ) {
-40039:     if (!seq[k].contains_integer_point()) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: bool
-40039: Box<ITV>::frequency(const Linear_Expression& expr,
-40039:                   Coefficient& freq_n, Coefficient& freq_d,
-40039:                   Coefficient& val_n, Coefficient& val_d) const {
-40039:   dimension_type space_dim = space_dimension();
-40039: 
-40039:   if (space_dim < expr.space_dimension()) {
-40039:     throw_dimension_incompatible("frequency(e, ...)", "e", expr);
-40039:   }
-40039: # 1552 "../../src/Box_templates.hh"
-40039:   if (space_dim == 0) {
-40039:     if (is_empty()) {
-40039:       return false;
-40039:     }
-40039:     freq_n = 0;
-40039:     freq_d = 1;
-40039:     val_n = expr.inhomogeneous_term();
-40039:     val_d = 1;
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   if (is_empty()) {
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_tmp; mpq_class& tmp = holder_tmp.item();
-40039:   Coefficient c = expr.inhomogeneous_term();
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_val_denom; Parma_Polyhedra_Library::Coefficient& val_denom = holder_val_denom.item();
-40039:   val_denom = 1;
-40039: 
-40039:   for (Linear_Expression::const_iterator i = expr.begin(), i_end = expr.end();
-40039:        i != i_end; ++i) {
-40039:     const ITV& seq_i = seq[i.variable().id()];
-40039: 
-40039:     if (seq_i.is_singleton()) {
-40039: 
-40039:       assign_r(tmp, seq_i.lower(), ROUND_NOT_NEEDED);
-40039:       numer = tmp.get_num();
-40039:       denom = tmp.get_den();
-40039:       c *= denom;
-40039:       c += numer * val_denom * (*i);
-40039:       val_denom *= denom;
-40039:       continue;
-40039:     }
-40039: 
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039:   freq_n = 0;
-40039:   freq_d = 1;
-40039: 
-40039: 
-40039:   normalize2(c, val_denom, val_n, val_d);
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: bool
-40039: Box<ITV>::constrains(Variable var) const {
-40039: 
-40039:   const dimension_type var_space_dim = var.space_dimension();
-40039:   if (space_dimension() < var_space_dim) {
-40039:     throw_dimension_incompatible("constrains(v)", "v", var);
-40039:   }
-40039: 
-40039:   if (marked_empty() || !seq[var_space_dim-1].is_universe()) {
-40039:     return true;
-40039:   }
-40039: 
-40039:   return is_empty();
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::unconstrain(const Variables_Set& vars) {
-40039: 
-40039: 
-40039: 
-40039:   if (vars.empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type min_space_dim = vars.space_dimension();
-40039:   if (space_dimension() < min_space_dim) {
-40039:     throw_dimension_incompatible("unconstrain(vs)", min_space_dim);
-40039:   }
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   for (Variables_Set::const_iterator vsi = vars.begin(),
-40039:          vsi_end = vars.end(); vsi != vsi_end; ++vsi) {
-40039:     ITV& seq_vsi = seq[*vsi];
-40039:     if (!seq_vsi.is_empty()) {
-40039:       seq_vsi.assign(UNIVERSE);
-40039:     }
-40039:     else {
-40039:       set_empty();
-40039:       break;
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::topological_closure_assign() {
-40039:   if (ITV::is_always_topologically_closed() || is_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   for (dimension_type k = seq.size(); k-- > 0; ) {
-40039:     seq[k].topological_closure_assign();
-40039:   }
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::wrap_assign(const Variables_Set& vars,
-40039:                       Bounded_Integer_Type_Width w,
-40039:                       Bounded_Integer_Type_Representation r,
-40039:                       Bounded_Integer_Type_Overflow o,
-40039:                       const Constraint_System* cs_p,
-40039:                       unsigned complexity_threshold,
-40039:                       bool wrap_individually) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   (void)(wrap_individually);
-40039:   (void)(complexity_threshold);
-40039:   Box& x = *this;
-40039: 
-40039: 
-40039:   const dimension_type vars_space_dim = vars.space_dimension();
-40039:   if (cs_p != 0 && cs_p->space_dimension() > vars_space_dim) {
-40039:     std::ostringstream s;
-40039:     s << "PPL::Box<ITV>::wrap_assign(vars, w, r, o, cs_p, ...):"
-40039:       << std::endl
-40039:       << "vars.space_dimension() == " << vars_space_dim
-40039:       << ", cs_p->space_dimension() == " << cs_p->space_dimension() << ".";
-40039:     throw std::invalid_argument(s.str());
-40039:   }
-40039: 
-40039: 
-40039:   if (vars.empty()) {
-40039:     if (cs_p != 0) {
-40039:       refine_with_constraints(*cs_p);
-40039:     }
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type space_dim = x.space_dimension();
-40039:   if (space_dim < vars_space_dim) {
-40039:     std::ostringstream s;
-40039:     s << "PPL::Box<ITV>::wrap_assign(vars, ...):"
-40039:       << std::endl
-40039:       << "this->space_dimension() == " << space_dim
-40039:       << ", required space dimension == " << vars_space_dim << ".";
-40039:     throw std::invalid_argument(s.str());
-40039:   }
-40039: 
-40039: 
-40039:   if (x.is_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_value; Parma_Polyhedra_Library::Coefficient& min_value = holder_min_value.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_value; Parma_Polyhedra_Library::Coefficient& max_value = holder_max_value.item();
-40039:   if (r == UNSIGNED) {
-40039:     min_value = 0;
-40039:     mul_2exp_assign(max_value, Coefficient_one(), w);
-40039:     --max_value;
-40039:   }
-40039:   else {
-40039:     ((void) 0);
-40039:     mul_2exp_assign(max_value, Coefficient_one(), w-1);
-40039:     neg_assign(min_value, max_value);
-40039:     --max_value;
-40039:   }
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<ITV> holder_integer_quadrant_itv; ITV& integer_quadrant_itv = holder_integer_quadrant_itv.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<ITV> holder_rational_quadrant_itv; ITV& rational_quadrant_itv = holder_rational_quadrant_itv.item();
-40039:   {
-40039:     I_Constraint<Coefficient> lower = i_constraint(GREATER_OR_EQUAL, min_value);
-40039:     I_Constraint<Coefficient> upper = i_constraint(LESS_OR_EQUAL, max_value);
-40039:     integer_quadrant_itv.build(lower, upper);
-40039: 
-40039:     if (o == OVERFLOW_UNDEFINED) {
-40039:       ++max_value;
-40039:       upper = i_constraint(LESS_THAN, max_value);
-40039:       rational_quadrant_itv.build(lower, upper);
-40039:     }
-40039:   }
-40039: 
-40039:   const Variables_Set::const_iterator vs_end = vars.end();
-40039: 
-40039:   if (cs_p == 0) {
-40039: 
-40039:     switch (o) {
-40039:     case OVERFLOW_WRAPS:
-40039:       for (Variables_Set::const_iterator i = vars.begin(); i != vs_end; ++i) {
-40039:         x.seq[*i].wrap_assign(w, r, integer_quadrant_itv);
-40039:       }
-40039:       reset_empty_up_to_date();
-40039:       break;
-40039:     case OVERFLOW_UNDEFINED:
-40039:       for (Variables_Set::const_iterator i = vars.begin(); i != vs_end; ++i) {
-40039:         ITV& x_seq_v = x.seq[*i];
-40039:         if (!rational_quadrant_itv.contains(x_seq_v)) {
-40039:           x_seq_v.assign(integer_quadrant_itv);
-40039:         }
-40039:       }
-40039:       break;
-40039:     case OVERFLOW_IMPOSSIBLE:
-40039:       for (Variables_Set::const_iterator i = vars.begin(); i != vs_end; ++i) {
-40039:         x.seq[*i].intersect_assign(integer_quadrant_itv);
-40039:       }
-40039:       reset_empty_up_to_date();
-40039:       break;
-40039:     }
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   const Constraint_System& cs = *cs_p;
-40039: 
-40039:   typedef std::map<dimension_type, std::vector<const Constraint*> > map_type;
-40039:   map_type var_cs_map;
-40039:   for (Constraint_System::const_iterator i = cs.begin(),
-40039:          i_end = cs.end(); i != i_end; ++i) {
-40039:     const Constraint& c = *i;
-40039:     dimension_type c_num_vars = 0;
-40039:     dimension_type c_only_var = 0;
-40039:     if (Box_Helpers::extract_interval_constraint(c, c_num_vars, c_only_var)) {
-40039:       if (c_num_vars == 1) {
-40039: 
-40039:         ((void) 0);
-40039: 
-40039:         if (vars.find(c_only_var) != vs_end) {
-40039:           var_cs_map[c_only_var].push_back(&c);
-40039:         }
-40039:       }
-40039:       else {
-40039:         ((void) 0);
-40039: 
-40039:         ((void) 0);
-40039:         x.set_empty();
-40039:         return;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<ITV> holder_refinement_itv; ITV& refinement_itv = holder_refinement_itv.item();
-40039:   const map_type::const_iterator var_cs_map_end = var_cs_map.end();
-40039: 
-40039:   for (Variables_Set::const_iterator i = vars.begin(); i != vs_end; ++i) {
-40039:     const dimension_type v = *i;
-40039:     refinement_itv = integer_quadrant_itv;
-40039: 
-40039:     map_type::const_iterator var_cs_map_iter = var_cs_map.find(v);
-40039:     if (var_cs_map_iter != var_cs_map_end) {
-40039: 
-40039:       const map_type::mapped_type& var_cs = var_cs_map_iter->second;
-40039:       for (dimension_type j = var_cs.size(); j-- > 0; ) {
-40039:         const Constraint& c = *var_cs[j];
-40039:         refine_interval_no_check(refinement_itv,
-40039:                                  c.type(),
-40039:                                  c.inhomogeneous_term(),
-40039:                                  c.coefficient(Variable(v)));
-40039:       }
-40039:     }
-40039: 
-40039:     ITV& x_seq_v = x.seq[v];
-40039:     switch (o) {
-40039:     case OVERFLOW_WRAPS:
-40039:       x_seq_v.wrap_assign(w, r, refinement_itv);
-40039:       break;
-40039:     case OVERFLOW_UNDEFINED:
-40039:       if (!rational_quadrant_itv.contains(x_seq_v)) {
-40039:         x_seq_v.assign(UNIVERSE);
-40039:       }
-40039:       break;
-40039:     case OVERFLOW_IMPOSSIBLE:
-40039:       x_seq_v.intersect_assign(refinement_itv);
-40039:       break;
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039: 
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::drop_some_non_integer_points(Complexity_Class) {
-40039:   if (std::numeric_limits<typename ITV::boundary_type>::is_integer
-40039:       && !ITV::info_type::store_open) {
-40039:     return;
-40039:   }
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   for (dimension_type k = seq.size(); k-- > 0; ) {
-40039:     seq[k].drop_some_non_integer_points();
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::drop_some_non_integer_points(const Variables_Set& vars,
-40039:                                        Complexity_Class) {
-40039: 
-40039:   const dimension_type min_space_dim = vars.space_dimension();
-40039:   if (space_dimension() < min_space_dim) {
-40039:     throw_dimension_incompatible("drop_some_non_integer_points(vs, cmpl)",
-40039:                                  min_space_dim);
-40039:   }
-40039:   if (std::numeric_limits<typename ITV::boundary_type>::is_integer
-40039:       && !ITV::info_type::store_open) {
-40039:     return;
-40039:   }
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   for (Variables_Set::const_iterator v_i = vars.begin(),
-40039:          v_end = vars.end(); v_i != v_end; ++v_i) {
-40039:     seq[*v_i].drop_some_non_integer_points();
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::intersection_assign(const Box& y) {
-40039:   Box& x = *this;
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039: 
-40039:   if (space_dim != y.space_dimension()) {
-40039:     x.throw_dimension_incompatible("intersection_assign(y)", y);
-40039:   }
-40039: 
-40039: 
-40039:   if (x.marked_empty()) {
-40039:     return;
-40039:   }
-40039:   if (y.marked_empty()) {
-40039:     x.set_empty();
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   reset_empty_up_to_date();
-40039: 
-40039:   for (dimension_type k = space_dim; k-- > 0; ) {
-40039:     x.seq[k].intersect_assign(y.seq[k]);
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::upper_bound_assign(const Box& y) {
-40039:   Box& x = *this;
-40039: 
-40039: 
-40039:   if (x.space_dimension() != y.space_dimension()) {
-40039:     x.throw_dimension_incompatible("upper_bound_assign(y)", y);
-40039:   }
-40039: 
-40039: 
-40039:   if (y.is_empty()) {
-40039:     return;
-40039:   }
-40039:   if (x.is_empty()) {
-40039:     x = y;
-40039:     return;
-40039:   }
-40039: 
-40039:   for (dimension_type k = x.seq.size(); k-- > 0; ) {
-40039:     x.seq[k].join_assign(y.seq[k]);
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::concatenate_assign(const Box& y) {
-40039:   Box& x = *this;
-40039:   const dimension_type x_space_dim = x.space_dimension();
-40039:   const dimension_type y_space_dim = y.space_dimension();
-40039: 
-40039: 
-40039:   if (y.marked_empty()) {
-40039:     x.set_empty();
-40039:   }
-40039: 
-40039: 
-40039:   if (y_space_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039:   check_space_dimension_overflow(y.space_dimension(),
-40039:                                  max_space_dimension() - space_dimension(),
-40039:                                  "PPL::Box::",
-40039:                                  "concatenate_assign(y)",
-40039:                                  "concatenation exceeds the maximum "
-40039:                                  "allowed space dimension");
-40039: 
-40039: 
-40039:   x.seq.reserve(x_space_dim + y_space_dim);
-40039: 
-40039: 
-40039: 
-40039:   if (x.marked_empty()) {
-40039:     x.seq.insert(x.seq.end(), y_space_dim, ITV(EMPTY));
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   std::copy(y.seq.begin(), y.seq.end(),
-40039:             std::back_insert_iterator<Sequence>(x.seq));
-40039: 
-40039:   if (!y.status.test_empty_up_to_date()) {
-40039:     reset_empty_up_to_date();
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::difference_assign(const Box& y) {
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039: 
-40039:   if (space_dim != y.space_dimension()) {
-40039:     throw_dimension_incompatible("difference_assign(y)", y);
-40039:   }
-40039: 
-40039:   Box& x = *this;
-40039:   if (x.is_empty() || y.is_empty()) {
-40039:     return;
-40039:   }
-40039:   switch (space_dim) {
-40039:   case 0:
-40039: 
-40039: 
-40039:     x.set_empty();
-40039:     break;
-40039: 
-40039:   case 1:
-40039:     x.seq[0].difference_assign(y.seq[0]);
-40039:     if (x.seq[0].is_empty()) {
-40039:       x.set_empty();
-40039:     }
-40039:     break;
-40039: 
-40039:   default:
-40039:     {
-40039:       dimension_type index_non_contained = space_dim;
-40039:       dimension_type number_non_contained = 0;
-40039:       for (dimension_type i = space_dim; i-- > 0; ) {
-40039:         if (!y.seq[i].contains(x.seq[i])) {
-40039:           if (++number_non_contained == 1) {
-40039:             index_non_contained = i;
-40039:           }
-40039:           else {
-40039:             break;
-40039:           }
-40039:         }
-40039:       }
-40039: 
-40039:       switch (number_non_contained) {
-40039:       case 0:
-40039: 
-40039:         x.set_empty();
-40039:         break;
-40039:       case 1:
-40039:         x.seq[index_non_contained]
-40039:           .difference_assign(y.seq[index_non_contained]);
-40039:         if (x.seq[index_non_contained].is_empty()) {
-40039:           x.set_empty();
-40039:         }
-40039:         break;
-40039:       default:
-40039: 
-40039:         break;
-40039:       }
-40039:     }
-40039:     break;
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: bool
-40039: Box<ITV>::simplify_using_context_assign(const Box& y) {
-40039:   Box& x = *this;
-40039:   const dimension_type num_dims = x.space_dimension();
-40039: 
-40039:   if (num_dims != y.space_dimension()) {
-40039:     x.throw_dimension_incompatible("simplify_using_context_assign(y)", y);
-40039:   }
-40039: 
-40039: 
-40039:   if (num_dims == 0) {
-40039:     if (y.marked_empty()) {
-40039:       x.set_nonempty();
-40039:       return false;
-40039:     }
-40039:     else {
-40039:       return !x.marked_empty();
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   if (y.is_empty()) {
-40039:     for (dimension_type i = num_dims; i-- > 0; ) {
-40039:       x.seq[i].assign(UNIVERSE);
-40039:     }
-40039:     x.set_nonempty();
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (x.is_empty()) {
-40039: 
-40039:     for (dimension_type i = 0; i < num_dims; ++i) {
-40039:       if (y.seq[i].is_universe()) {
-40039:         x.seq[i].assign(UNIVERSE);
-40039:       }
-40039:       else {
-40039: 
-40039:         ITV& seq_i = x.seq[i];
-40039:         seq_i.empty_intersection_assign(y.seq[i]);
-40039:         if (seq_i.is_empty()) {
-40039: 
-40039: 
-40039:           seq_i.assign(UNIVERSE);
-40039:           continue;
-40039:         }
-40039: 
-40039: 
-40039:         for (++i; i < num_dims; ++i) {
-40039:           x.seq[i].assign(UNIVERSE);
-40039:         }
-40039:         x.set_nonempty();
-40039:         ((void) 0);
-40039:         return false;
-40039:       }
-40039:     }
-40039: 
-40039: 
-40039:     ((void) 0);
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039:   for (dimension_type i = 0; i < num_dims; ++i) {
-40039:     if (!x.seq[i].simplify_using_context_assign(y.seq[i])) {
-40039:       ((void) 0);
-40039: 
-40039: 
-40039:       for (dimension_type j = num_dims; j-- > i; ) {
-40039:         x.seq[j].assign(UNIVERSE);
-40039:       }
-40039:       for (dimension_type j = i; j-- > 0; ) {
-40039:         x.seq[j].assign(UNIVERSE);
-40039:       }
-40039:       ((void) 0);
-40039:       return false;
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::time_elapse_assign(const Box& y) {
-40039:   Box& x = *this;
-40039:   const dimension_type x_space_dim = x.space_dimension();
-40039: 
-40039: 
-40039:   if (x_space_dim != y.space_dimension()) {
-40039:     x.throw_dimension_incompatible("time_elapse_assign(y)", y);
-40039:   }
-40039: 
-40039: 
-40039:   if (x_space_dim == 0) {
-40039:     if (y.marked_empty()) {
-40039:       x.set_empty();
-40039:     }
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (x.marked_empty() || y.marked_empty()
-40039:       || x.is_empty() || y.is_empty()) {
-40039:     x.set_empty();
-40039:     return;
-40039:   }
-40039: 
-40039:   for (dimension_type i = x_space_dim; i-- > 0; ) {
-40039:     ITV& x_seq_i = x.seq[i];
-40039:     const ITV& y_seq_i = y.seq[i];
-40039:     if (!x_seq_i.lower_is_boundary_infinity()) {
-40039:       if (y_seq_i.lower_is_boundary_infinity() || y_seq_i.lower() < 0) {
-40039:         x_seq_i.lower_extend();
-40039:       }
-40039:     }
-40039:     if (!x_seq_i.upper_is_boundary_infinity()) {
-40039:       if (y_seq_i.upper_is_boundary_infinity() || y_seq_i.upper() > 0) {
-40039:         x_seq_i.upper_extend();
-40039:       }
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: inline void
-40039: Box<ITV>::remove_space_dimensions(const Variables_Set& vars) {
-40039: 
-40039: 
-40039: 
-40039:   if (vars.empty()) {
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039:   const dimension_type old_space_dim = space_dimension();
-40039: 
-40039: 
-40039:   const dimension_type vsi_space_dim = vars.space_dimension();
-40039:   if (old_space_dim < vsi_space_dim) {
-40039:     throw_dimension_incompatible("remove_space_dimensions(vs)",
-40039:                                  vsi_space_dim);
-40039:   }
-40039: 
-40039:   const dimension_type new_space_dim = old_space_dim - vars.size();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (is_empty() || new_space_dim == 0) {
-40039:     seq.resize(new_space_dim);
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   Variables_Set::const_iterator vsi = vars.begin();
-40039:   Variables_Set::const_iterator vsi_end = vars.end();
-40039:   dimension_type dst = *vsi;
-40039:   dimension_type src = dst + 1;
-40039:   for (++vsi; vsi != vsi_end; ++vsi) {
-40039:     const dimension_type vsi_next = *vsi;
-40039: 
-40039:     while (src < vsi_next) {
-40039:       swap(seq[dst++], seq[src++]);
-40039:     }
-40039:     ++src;
-40039:   }
-40039: 
-40039: 
-40039:   while (src < old_space_dim) {
-40039:     swap(seq[dst++], seq[src++]);
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   seq.resize(new_space_dim);
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::remove_higher_space_dimensions(const dimension_type new_dimension) {
-40039: 
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039:   if (new_dimension > space_dim) {
-40039:     throw_dimension_incompatible("remove_higher_space_dimensions(nd)",
-40039:                                  new_dimension);
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   if (new_dimension == space_dim) {
-40039:     ((void) 0);
-40039:     return;
-40039:   }
-40039: 
-40039:   seq.resize(new_dimension);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: template <typename Partial_Function>
-40039: void
-40039: Box<ITV>::map_space_dimensions(const Partial_Function& pfunc) {
-40039:   const dimension_type space_dim = space_dimension();
-40039:   if (space_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039:   if (pfunc.has_empty_codomain()) {
-40039: 
-40039:     remove_higher_space_dimensions(0);
-40039:     return;
-40039:   }
-40039: 
-40039:   const dimension_type new_space_dim = pfunc.max_in_codomain() + 1;
-40039: 
-40039:   if (is_empty()) {
-40039:     remove_higher_space_dimensions(new_space_dim);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   Box<ITV> tmp(new_space_dim);
-40039: 
-40039:   for (dimension_type i = 0; i < space_dim; ++i) {
-40039:     dimension_type new_i;
-40039:     if (pfunc.maps(i, new_i)) {
-40039:       swap(seq[i], tmp.seq[new_i]);
-40039:     }
-40039:   }
-40039:   m_swap(tmp);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::fold_space_dimensions(const Variables_Set& vars,
-40039:                                 const Variable dest) {
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039:   if (dest.space_dimension() > space_dim) {
-40039:     throw_dimension_incompatible("fold_space_dimensions(vs, v)", "v", dest);
-40039:   }
-40039: 
-40039: 
-40039:   if (vars.empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   if (vars.space_dimension() > space_dim) {
-40039:     throw_dimension_incompatible("fold_space_dimensions(vs, v)",
-40039:                                  vars.space_dimension());
-40039:   }
-40039: 
-40039:   if (vars.find(dest.id()) != vars.end()) {
-40039:     throw_invalid_argument("fold_space_dimensions(vs, v)",
-40039:                            "v should not occur in vs");
-40039:   }
-40039: 
-40039: 
-40039:   if (!is_empty()) {
-40039: 
-40039: 
-40039:     ITV& seq_v = seq[dest.id()];
-40039:     for (Variables_Set::const_iterator i = vars.begin(),
-40039:            vs_end = vars.end(); i != vs_end; ++i) {
-40039:       seq_v.join_assign(seq[*i]);
-40039:     }
-40039:   }
-40039:   remove_space_dimensions(vars);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::add_constraint_no_check(const Constraint& c) {
-40039:   ((void) 0);
-40039: 
-40039:   dimension_type c_num_vars = 0;
-40039:   dimension_type c_only_var = 0;
-40039: 
-40039:   if (!Box_Helpers::extract_interval_constraint(c, c_num_vars, c_only_var)) {
-40039:     throw_invalid_argument("add_constraint(c)",
-40039:                            "c is not an interval constraint");
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (c.is_strict_inequality() && c_num_vars != 0
-40039:       && ITV::is_always_topologically_closed()) {
-40039:     throw_invalid_argument("add_constraint(c)",
-40039:                            "c is a nontrivial strict constraint");
-40039:   }
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   const Coefficient& n = c.inhomogeneous_term();
-40039:   if (c_num_vars == 0) {
-40039: 
-40039:     if (n < 0
-40039:         || (c.is_equality() && n != 0)
-40039:         || (c.is_strict_inequality() && n == 0)) {
-40039:       set_empty();
-40039:     }
-40039:     return;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   const Coefficient& d = c.coefficient(Variable(c_only_var));
-40039:   add_interval_constraint_no_check(c_only_var, c.type(), n, d);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::add_constraints_no_check(const Constraint_System& cs) {
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:   for (Constraint_System::const_iterator i = cs.begin(),
-40039:          cs_end = cs.end(); i != cs_end; ++i) {
-40039:     add_constraint_no_check(*i);
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::add_congruence_no_check(const Congruence& cg) {
-40039:   ((void) 0);
-40039: 
-40039: 
-40039:   if (cg.is_proper_congruence()) {
-40039:     if (cg.is_inconsistent()) {
-40039:       set_empty();
-40039:       return;
-40039:     }
-40039:     else if (cg.is_tautological()) {
-40039:       return;
-40039:     }
-40039:     else {
-40039:       throw_invalid_argument("add_congruence(cg)",
-40039:                              "cg is a nontrivial proper congruence");
-40039:     }
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   dimension_type cg_num_vars = 0;
-40039:   dimension_type cg_only_var = 0;
-40039: 
-40039:   if (!Box_Helpers::extract_interval_congruence(cg, cg_num_vars, cg_only_var)) {
-40039:     throw_invalid_argument("add_congruence(cg)",
-40039:                            "cg is not an interval congruence");
-40039:   }
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   const Coefficient& n = cg.inhomogeneous_term();
-40039:   if (cg_num_vars == 0) {
-40039: 
-40039:     if (n != 0) {
-40039:       set_empty();
-40039:     }
-40039:     return;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   const Coefficient& d = cg.coefficient(Variable(cg_only_var));
-40039:   add_interval_constraint_no_check(cg_only_var, Constraint::EQUALITY, n, d);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::add_congruences_no_check(const Congruence_System& cgs) {
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:   for (Congruence_System::const_iterator i = cgs.begin(),
-40039:          cgs_end = cgs.end(); i != cgs_end; ++i) {
-40039:     add_congruence_no_check(*i);
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::refine_no_check(const Constraint& c) {
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: 
-40039:   dimension_type c_num_vars = 0;
-40039:   dimension_type c_only_var = 0;
-40039: 
-40039:   if (!Box_Helpers::extract_interval_constraint(c, c_num_vars, c_only_var)) {
-40039:     propagate_constraint_no_check(c);
-40039:     return;
-40039:   }
-40039: 
-40039:   const Coefficient& n = c.inhomogeneous_term();
-40039:   if (c_num_vars == 0) {
-40039: 
-40039:     if (n < 0
-40039:         || (c.is_equality() && n != 0)
-40039:         || (c.is_strict_inequality() && n == 0)) {
-40039:       set_empty();
-40039:     }
-40039:     return;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   const Coefficient& d = c.coefficient(Variable(c_only_var));
-40039:   add_interval_constraint_no_check(c_only_var, c.type(), n, d);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::refine_no_check(const Constraint_System& cs) {
-40039:   ((void) 0);
-40039:   for (Constraint_System::const_iterator i = cs.begin(),
-40039:          cs_end = cs.end(); !marked_empty() && i != cs_end; ++i) {
-40039:     refine_no_check(*i);
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::refine_no_check(const Congruence& cg) {
-40039:   ((void) 0);
-40039: 
-40039:   ((void) 0);
-40039: 
-40039:   if (cg.is_proper_congruence()) {
-40039: 
-40039: 
-40039:     if (cg.is_inconsistent()) {
-40039:       set_empty();
-40039:     }
-40039:     return;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039:   Constraint c(cg);
-40039:   refine_no_check(c);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::refine_no_check(const Congruence_System& cgs) {
-40039:   ((void) 0);
-40039:   for (Congruence_System::const_iterator i = cgs.begin(),
-40039:          cgs_end = cgs.end(); !marked_empty() && i != cgs_end; ++i) {
-40039:     refine_no_check(*i);
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: namespace Boxes {
-40039: 
-40039: inline bool
-40039: propagate_constraint_check_result(Result r, Ternary& open) {
-40039:   r = result_relation_class(r);
-40039:   switch (r) {
-40039:   case V_GT_MINUS_INFINITY:
-40039:   case V_LT_PLUS_INFINITY:
-40039:     return true;
-40039:   case V_LT:
-40039:   case V_GT:
-40039:     open = T_YES;
-40039:     return false;
-40039:   case V_LE:
-40039:   case V_GE:
-40039:     if (open == T_NO) {
-40039:       open = T_MAYBE;
-40039:     }
-40039:     return false;
-40039:   case V_EQ:
-40039:     return false;
-40039:   default:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     return true;
-40039:   }
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::propagate_constraint_no_check(const Constraint& c) {
-40039:   using namespace Implementation::Boxes;
-40039: 
-40039:   ((void) 0);
-40039: 
-40039:   typedef
-40039:     typename Select_Temp_Boundary_Type<typename ITV::boundary_type>::type
-40039:     Temp_Boundary_Type;
-40039: 
-40039:   const dimension_type c_space_dim = c.space_dimension();
-40039:   const Constraint::Type c_type = c.type();
-40039:   const Coefficient& c_inhomogeneous_term = c.inhomogeneous_term();
-40039: 
-40039: 
-40039:   const dimension_type last_k
-40039:     = c.expression().last_nonzero(1, c_space_dim + 1);
-40039:   if (last_k == c_space_dim + 1) {
-40039: 
-40039:     if (c_inhomogeneous_term < 0
-40039:         || (c_inhomogeneous_term == 0
-40039:             && c_type != Constraint::NONSTRICT_INEQUALITY)) {
-40039:       set_empty();
-40039:     }
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   Temp_Boundary_Type t_bound;
-40039:   Temp_Boundary_Type t_a;
-40039:   Temp_Boundary_Type t_x;
-40039:   Ternary open;
-40039:   const Constraint::expr_type c_e = c.expression();
-40039:   for (Constraint::expr_type::const_iterator k = c_e.begin(),
-40039:          k_end = c_e.lower_bound(Variable(last_k)); k != k_end; ++k) {
-40039:     const Coefficient& a_k = *k;
-40039:     const Variable k_var = k.variable();
-40039:     const int sgn_a_k = sgn(a_k);
-40039:     if (sgn_a_k == 0) {
-40039:       continue;
-40039:     }
-40039:     Result r;
-40039:     if (sgn_a_k > 0) {
-40039:       open = (c_type == Constraint::STRICT_INEQUALITY) ? T_YES : T_NO;
-40039:       if (open == T_NO) {
-40039:         maybe_reset_fpu_inexact<Temp_Boundary_Type>();
-40039:       }
-40039:       r = assign_r(t_bound, c_inhomogeneous_term, ROUND_UP);
-40039:       if (propagate_constraint_check_result(r, open)) {
-40039:         goto maybe_refine_upper_1;
-40039:       }
-40039:       r = neg_assign_r(t_bound, t_bound, ROUND_DOWN);
-40039:       if (propagate_constraint_check_result(r, open)) {
-40039:         goto maybe_refine_upper_1;
-40039:       }
-40039:       for (Constraint::expr_type::const_iterator i = c_e.begin(),
-40039:             i_end = c_e.lower_bound(Variable(last_k)); i != i_end; ++i) {
-40039:         const Variable i_var = i.variable();
-40039:         if (i_var.id() == k_var.id()) {
-40039:           continue;
-40039:         }
-40039:         const Coefficient& a_i = *i;
-40039:         const int sgn_a_i = sgn(a_i);
-40039:         ITV& x_i = seq[i_var.id()];
-40039:         if (sgn_a_i < 0) {
-40039:           if (x_i.lower_is_boundary_infinity()) {
-40039:             goto maybe_refine_upper_1;
-40039:           }
-40039:           r = assign_r(t_a, a_i, ROUND_DOWN);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto maybe_refine_upper_1;
-40039:           }
-40039:           r = assign_r(t_x, x_i.lower(), ROUND_DOWN);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto maybe_refine_upper_1;
-40039:           }
-40039:           if (x_i.lower_is_open()) {
-40039:             open = T_YES;
-40039:           }
-40039:           r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_DOWN);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto maybe_refine_upper_1;
-40039:           }
-40039:         }
-40039:         else {
-40039:           ((void) 0);
-40039:           if (x_i.upper_is_boundary_infinity()) {
-40039:             goto maybe_refine_upper_1;
-40039:           }
-40039:           r = assign_r(t_a, a_i, ROUND_UP);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto maybe_refine_upper_1;
-40039:           }
-40039:           r = assign_r(t_x, x_i.upper(), ROUND_UP);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto maybe_refine_upper_1;
-40039:           }
-40039:           if (x_i.upper_is_open()) {
-40039:             open = T_YES;
-40039:           }
-40039:           r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_DOWN);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto maybe_refine_upper_1;
-40039:           }
-40039:         }
-40039:       }
-40039:       r = assign_r(t_a, a_k, ROUND_UP);
-40039:       if (propagate_constraint_check_result(r, open)) {
-40039:         goto maybe_refine_upper_1;
-40039:       }
-40039:       r = div_assign_r(t_bound, t_bound, t_a, ROUND_DOWN);
-40039:       if (propagate_constraint_check_result(r, open)) {
-40039:         goto maybe_refine_upper_1;
-40039:       }
-40039: 
-40039: 
-40039:       if (open == T_MAYBE
-40039:           && maybe_check_fpu_inexact<Temp_Boundary_Type>() == 1) {
-40039:         open = T_YES;
-40039:       }
-40039:       {
-40039:         const Relation_Symbol rel
-40039:           = (open == T_YES) ? GREATER_THAN : GREATER_OR_EQUAL;
-40039:         seq[k_var.id()].add_constraint(i_constraint(rel, t_bound));
-40039:       }
-40039:       reset_empty_up_to_date();
-40039:     maybe_refine_upper_1:
-40039:       if (c_type != Constraint::EQUALITY) {
-40039:         continue;
-40039:       }
-40039:       open = T_NO;
-40039:       maybe_reset_fpu_inexact<Temp_Boundary_Type>();
-40039:       r = assign_r(t_bound, c_inhomogeneous_term, ROUND_DOWN);
-40039:       if (propagate_constraint_check_result(r, open)) {
-40039:         goto next_k;
-40039:       }
-40039:       r = neg_assign_r(t_bound, t_bound, ROUND_UP);
-40039:       if (propagate_constraint_check_result(r, open)) {
-40039:         goto next_k;
-40039:       }
-40039:       for (Constraint::expr_type::const_iterator i = c_e.begin(),
-40039:             i_end = c_e.lower_bound(Variable(c_space_dim)); i != i_end; ++i) {
-40039:         const Variable i_var = i.variable();
-40039:         if (i_var.id() == k_var.id()) {
-40039:           continue;
-40039:         }
-40039:         const Coefficient& a_i = *i;
-40039:         const int sgn_a_i = sgn(a_i);
-40039:         ITV& x_i = seq[i_var.id()];
-40039:         if (sgn_a_i < 0) {
-40039:           if (x_i.upper_is_boundary_infinity()) {
-40039:             goto next_k;
-40039:           }
-40039:           r = assign_r(t_a, a_i, ROUND_UP);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto next_k;
-40039:           }
-40039:           r = assign_r(t_x, x_i.upper(), ROUND_UP);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto next_k;
-40039:           }
-40039:           if (x_i.upper_is_open()) {
-40039:             open = T_YES;
-40039:           }
-40039:           r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_UP);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto next_k;
-40039:           }
-40039:         }
-40039:         else {
-40039:           ((void) 0);
-40039:           if (x_i.lower_is_boundary_infinity()) {
-40039:             goto next_k;
-40039:           }
-40039:           r = assign_r(t_a, a_i, ROUND_DOWN);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto next_k;
-40039:           }
-40039:           r = assign_r(t_x, x_i.lower(), ROUND_DOWN);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto next_k;
-40039:           }
-40039:           if (x_i.lower_is_open()) {
-40039:             open = T_YES;
-40039:           }
-40039:           r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_UP);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto next_k;
-40039:           }
-40039:         }
-40039:       }
-40039:       r = assign_r(t_a, a_k, ROUND_DOWN);
-40039:       if (propagate_constraint_check_result(r, open)) {
-40039:         goto next_k;
-40039:       }
-40039:       r = div_assign_r(t_bound, t_bound, t_a, ROUND_UP);
-40039:       if (propagate_constraint_check_result(r, open)) {
-40039:         goto next_k;
-40039:       }
-40039: 
-40039: 
-40039:       if (open == T_MAYBE
-40039:           && maybe_check_fpu_inexact<Temp_Boundary_Type>() == 1) {
-40039:         open = T_YES;
-40039:       }
-40039:       const Relation_Symbol rel
-40039:         = (open == T_YES) ? LESS_THAN : LESS_OR_EQUAL;
-40039:       seq[k_var.id()].add_constraint(i_constraint(rel, t_bound));
-40039:       reset_empty_up_to_date();
-40039:     }
-40039:     else {
-40039:       ((void) 0);
-40039:       open = (c_type == Constraint::STRICT_INEQUALITY) ? T_YES : T_NO;
-40039:       if (open == T_NO) {
-40039:         maybe_reset_fpu_inexact<Temp_Boundary_Type>();
-40039:       }
-40039:       r = assign_r(t_bound, c_inhomogeneous_term, ROUND_UP);
-40039:       if (propagate_constraint_check_result(r, open)) {
-40039:         goto maybe_refine_upper_2;
-40039:       }
-40039:       r = neg_assign_r(t_bound, t_bound, ROUND_DOWN);
-40039:       if (propagate_constraint_check_result(r, open)) {
-40039:         goto maybe_refine_upper_2;
-40039:       }
-40039:       for (Constraint::expr_type::const_iterator i = c_e.begin(),
-40039:             i_end = c_e.lower_bound(Variable(c_space_dim)); i != i_end; ++i) {
-40039:         const Variable i_var = i.variable();
-40039:         if (i_var.id() == k_var.id()) {
-40039:           continue;
-40039:         }
-40039:         const Coefficient& a_i = *i;
-40039:         const int sgn_a_i = sgn(a_i);
-40039:         ITV& x_i = seq[i_var.id()];
-40039:         if (sgn_a_i < 0) {
-40039:           if (x_i.lower_is_boundary_infinity()) {
-40039:             goto maybe_refine_upper_2;
-40039:           }
-40039:           r = assign_r(t_a, a_i, ROUND_DOWN);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto maybe_refine_upper_2;
-40039:           }
-40039:           r = assign_r(t_x, x_i.lower(), ROUND_DOWN);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto maybe_refine_upper_2;
-40039:           }
-40039:           if (x_i.lower_is_open()) {
-40039:             open = T_YES;
-40039:           }
-40039:           r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_UP);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto maybe_refine_upper_2;
-40039:           }
-40039:         }
-40039:         else {
-40039:           ((void) 0);
-40039:           if (x_i.upper_is_boundary_infinity()) {
-40039:             goto maybe_refine_upper_2;
-40039:           }
-40039:           r = assign_r(t_a, a_i, ROUND_UP);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto maybe_refine_upper_2;
-40039:           }
-40039:           r = assign_r(t_x, x_i.upper(), ROUND_UP);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto maybe_refine_upper_2;
-40039:           }
-40039:           if (x_i.upper_is_open()) {
-40039:             open = T_YES;
-40039:           }
-40039:           r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_DOWN);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto maybe_refine_upper_2;
-40039:           }
-40039:         }
-40039:       }
-40039:       r = assign_r(t_a, a_k, ROUND_UP);
-40039:       if (propagate_constraint_check_result(r, open)) {
-40039:         goto maybe_refine_upper_2;
-40039:       }
-40039:       r = div_assign_r(t_bound, t_bound, t_a, ROUND_UP);
-40039:       if (propagate_constraint_check_result(r, open)) {
-40039:         goto maybe_refine_upper_2;
-40039:       }
-40039: 
-40039:       if (open == T_MAYBE
-40039:           && maybe_check_fpu_inexact<Temp_Boundary_Type>() == 1) {
-40039:         open = T_YES;
-40039:       }
-40039:       {
-40039:         const Relation_Symbol rel
-40039:           = (open == T_YES) ? LESS_THAN : LESS_OR_EQUAL;
-40039:         seq[k_var.id()].add_constraint(i_constraint(rel, t_bound));
-40039:       }
-40039:       reset_empty_up_to_date();
-40039:     maybe_refine_upper_2:
-40039:       if (c_type != Constraint::EQUALITY) {
-40039:         continue;
-40039:       }
-40039:       open = T_NO;
-40039:       maybe_reset_fpu_inexact<Temp_Boundary_Type>();
-40039:       r = assign_r(t_bound, c_inhomogeneous_term, ROUND_DOWN);
-40039:       if (propagate_constraint_check_result(r, open)) {
-40039:         goto next_k;
-40039:       }
-40039:       r = neg_assign_r(t_bound, t_bound, ROUND_UP);
-40039:       if (propagate_constraint_check_result(r, open)) {
-40039:         goto next_k;
-40039:       }
-40039:       for (Constraint::expr_type::const_iterator i = c_e.begin(),
-40039:             i_end = c_e.lower_bound(Variable(c_space_dim)); i != i_end; ++i) {
-40039:         const Variable i_var = i.variable();
-40039:         if (i_var.id() == k_var.id()) {
-40039:           continue;
-40039:         }
-40039:         const Coefficient& a_i = *i;
-40039:         const int sgn_a_i = sgn(a_i);
-40039:         ITV& x_i = seq[i_var.id()];
-40039:         if (sgn_a_i < 0) {
-40039:           if (x_i.upper_is_boundary_infinity()) {
-40039:             goto next_k;
-40039:           }
-40039:           r = assign_r(t_a, a_i, ROUND_UP);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto next_k;
-40039:           }
-40039:           r = assign_r(t_x, x_i.upper(), ROUND_UP);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto next_k;
-40039:           }
-40039:           if (x_i.upper_is_open()) {
-40039:             open = T_YES;
-40039:           }
-40039:           r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_UP);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto next_k;
-40039:           }
-40039:         }
-40039:         else {
-40039:           ((void) 0);
-40039:           if (x_i.lower_is_boundary_infinity()) {
-40039:             goto next_k;
-40039:           }
-40039:           r = assign_r(t_a, a_i, ROUND_DOWN);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto next_k;
-40039:           }
-40039:           r = assign_r(t_x, x_i.lower(), ROUND_DOWN);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto next_k;
-40039:           }
-40039:           if (x_i.lower_is_open()) {
-40039:             open = T_YES;
-40039:           }
-40039:           r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_UP);
-40039:           if (propagate_constraint_check_result(r, open)) {
-40039:             goto next_k;
-40039:           }
-40039:         }
-40039:       }
-40039:       r = assign_r(t_a, a_k, ROUND_DOWN);
-40039:       if (propagate_constraint_check_result(r, open)) {
-40039:         goto next_k;
-40039:       }
-40039:       r = div_assign_r(t_bound, t_bound, t_a, ROUND_DOWN);
-40039:       if (propagate_constraint_check_result(r, open)) {
-40039:         goto next_k;
-40039:       }
-40039: 
-40039: 
-40039:       if (open == T_MAYBE
-40039:           && maybe_check_fpu_inexact<Temp_Boundary_Type>() == 1) {
-40039:         open = T_YES;
-40039:       }
-40039:       const Relation_Symbol rel
-40039:         = (open == T_YES) ? GREATER_THAN : GREATER_OR_EQUAL;
-40039:       seq[k_var.id()].add_constraint(i_constraint(rel, t_bound));
-40039:       reset_empty_up_to_date();
-40039:     }
-40039:   next_k:
-40039:     ;
-40039:   }
-40039: }
-40039: # 3027 "../../src/Box_templates.hh"
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>
-40039: ::propagate_constraints_no_check(const Constraint_System& cs,
-40039:                                  const dimension_type max_iterations) {
-40039:   const dimension_type space_dim = space_dimension();
-40039:   ((void) 0);
-40039: 
-40039:   const Constraint_System::const_iterator cs_begin = cs.begin();
-40039:   const Constraint_System::const_iterator cs_end = cs.end();
-40039:   const dimension_type propagation_weight
-40039:     = Implementation::num_constraints(cs) * space_dim;
-40039: 
-40039:   Sequence copy;
-40039:   bool changed;
-40039:   dimension_type num_iterations = 0;
-40039:   do {
-40039:     do { } while (false);
-40039:     ++num_iterations;
-40039:     copy = seq;
-40039:     for (Constraint_System::const_iterator i = cs_begin; i != cs_end; ++i) {
-40039:       propagate_constraint_no_check(*i);
-40039:     }
-40039: 
-40039:     do { Weightwatch_Traits::weight += (40)*(propagation_weight); } while (false);
-40039: 
-40039: 
-40039: 
-40039:     maybe_abandon();
-40039: 
-40039: 
-40039: 
-40039:     if (num_iterations == max_iterations) {
-40039:       break;
-40039:     }
-40039: 
-40039:     changed = (copy != seq);
-40039:   } while (changed);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::affine_image(const Variable var,
-40039:                        const Linear_Expression& expr,
-40039:                        Coefficient_traits::const_reference denominator) {
-40039: 
-40039:   if (denominator == 0) {
-40039:     throw_invalid_argument("affine_image(v, e, d)", "d == 0");
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039:   const dimension_type expr_space_dim = expr.space_dimension();
-40039:   if (space_dim < expr_space_dim) {
-40039:     throw_dimension_incompatible("affine_image(v, e, d)", "e", expr);
-40039:   }
-40039: 
-40039:   const dimension_type var_space_dim = var.space_dimension();
-40039:   if (space_dim < var_space_dim) {
-40039:     throw_dimension_incompatible("affine_image(v, e, d)", "v", var);
-40039:   }
-40039: 
-40039:   if (is_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   Tmp_Interval_Type expr_value;
-40039:   Tmp_Interval_Type temp0;
-40039:   Tmp_Interval_Type temp1;
-40039:   expr_value.assign(expr.inhomogeneous_term());
-40039:   for (Linear_Expression::const_iterator i = expr.begin(),
-40039:           i_end = expr.end(); i != i_end; ++i) {
-40039:     temp0.assign(*i);
-40039:     temp1.assign(seq[i.variable().id()]);
-40039:     temp0.mul_assign(temp0, temp1);
-40039:     expr_value.add_assign(expr_value, temp0);
-40039:   }
-40039:   if (denominator != 1) {
-40039:     temp0.assign(denominator);
-40039:     expr_value.div_assign(expr_value, temp0);
-40039:   }
-40039:   seq[var.id()].assign(expr_value);
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::affine_form_image(const Variable var,
-40039:                             const Linear_Form<ITV>& lf) {
-40039: 
-40039: 
-40039:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_3121 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<typename ITV::boundary_type> ::is_exact)>) }
-40039: 
-40039:                                                                       ;
-40039: 
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039:   const dimension_type lf_space_dim = lf.space_dimension();
-40039:   if (space_dim < lf_space_dim) {
-40039:     throw_dimension_incompatible("affine_form_image(var, lf)", "lf", lf);
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type var_space_dim = var.space_dimension();
-40039:   if (space_dim < var_space_dim) {
-40039:     throw_dimension_incompatible("affine_form_image(var, lf)", "var", var);
-40039:   }
-40039: 
-40039:   if (is_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   ITV result = lf.inhomogeneous_term();
-40039:   for (dimension_type i = 0; i < lf_space_dim; ++i) {
-40039:     ITV current_addend = lf.coefficient(Variable(i));
-40039:     const ITV& curr_int = seq[i];
-40039:     current_addend *= curr_int;
-40039:     result += current_addend;
-40039:   }
-40039: 
-40039:   seq[var.id()].assign(result);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::affine_preimage(const Variable var,
-40039:                           const Linear_Expression& expr,
-40039:                           Coefficient_traits::const_reference
-40039:                           denominator) {
-40039: 
-40039:   if (denominator == 0) {
-40039:     throw_invalid_argument("affine_preimage(v, e, d)", "d == 0");
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type x_space_dim = space_dimension();
-40039:   const dimension_type expr_space_dim = expr.space_dimension();
-40039:   if (x_space_dim < expr_space_dim) {
-40039:     throw_dimension_incompatible("affine_preimage(v, e, d)", "e", expr);
-40039:   }
-40039: 
-40039:   const dimension_type var_space_dim = var.space_dimension();
-40039:   if (x_space_dim < var_space_dim) {
-40039:     throw_dimension_incompatible("affine_preimage(v, e, d)", "v", var);
-40039:   }
-40039: 
-40039:   if (is_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   const Coefficient& expr_v = expr.coefficient(var);
-40039:   const bool invertible = (expr_v != 0);
-40039:   if (!invertible) {
-40039:     Tmp_Interval_Type expr_value;
-40039:     Tmp_Interval_Type temp0;
-40039:     Tmp_Interval_Type temp1;
-40039:     expr_value.assign(expr.inhomogeneous_term());
-40039:     for (Linear_Expression::const_iterator i = expr.begin(),
-40039:             i_end = expr.end(); i != i_end; ++i) {
-40039:       temp0.assign(*i);
-40039:       temp1.assign(seq[i.variable().id()]);
-40039:       temp0.mul_assign(temp0, temp1);
-40039:       expr_value.add_assign(expr_value, temp0);
-40039:     }
-40039:     if (denominator != 1) {
-40039:       temp0.assign(denominator);
-40039:       expr_value.div_assign(expr_value, temp0);
-40039:     }
-40039:     ITV& x_seq_v = seq[var.id()];
-40039:     expr_value.intersect_assign(x_seq_v);
-40039:     if (expr_value.is_empty()) {
-40039:       set_empty();
-40039:     }
-40039:     else {
-40039:       x_seq_v.assign(UNIVERSE);
-40039:     }
-40039:   }
-40039:   else {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     Linear_Expression inverse;
-40039:     inverse -= expr;
-40039:     inverse += (expr_v + denominator) * var;
-40039:     affine_image(var, inverse, expr_v);
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>
-40039: ::bounded_affine_image(const Variable var,
-40039:                        const Linear_Expression& lb_expr,
-40039:                        const Linear_Expression& ub_expr,
-40039:                        Coefficient_traits::const_reference denominator) {
-40039: 
-40039:   if (denominator == 0) {
-40039:     throw_invalid_argument("bounded_affine_image(v, lb, ub, d)", "d == 0");
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039: 
-40039:   const dimension_type lb_space_dim = lb_expr.space_dimension();
-40039:   if (space_dim < lb_space_dim) {
-40039:     throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)",
-40039:                                  "lb", lb_expr);
-40039:   }
-40039:   const dimension_type ub_space_dim = ub_expr.space_dimension();
-40039:   if (space_dim < ub_space_dim) {
-40039:     throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)",
-40039:                                  "ub", ub_expr);
-40039:   }
-40039: 
-40039:   const dimension_type var_space_dim = var.space_dimension();
-40039:   if (space_dim < var_space_dim) {
-40039:     throw_dimension_incompatible("affine_image(v, e, d)", "v", var);
-40039:   }
-40039: 
-40039:   if (is_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   if (denominator > 0) {
-40039:     refine_with_constraint(lb_expr <= ub_expr);
-40039:   }
-40039:   else {
-40039:     refine_with_constraint(lb_expr >= ub_expr);
-40039:   }
-40039: 
-40039: 
-40039:   if (lb_expr.coefficient(var) == 0) {
-40039: 
-40039:     generalized_affine_image(var,
-40039:                              LESS_OR_EQUAL,
-40039:                              ub_expr,
-40039:                              denominator);
-40039:     if (denominator > 0) {
-40039:       refine_with_constraint(lb_expr <= denominator*var);
-40039:     }
-40039:     else {
-40039:       refine_with_constraint(denominator*var <= lb_expr);
-40039:     }
-40039:   }
-40039:   else if (ub_expr.coefficient(var) == 0) {
-40039: 
-40039:     generalized_affine_image(var,
-40039:                              GREATER_OR_EQUAL,
-40039:                              lb_expr,
-40039:                              denominator);
-40039:     if (denominator > 0) {
-40039:       refine_with_constraint(denominator*var <= ub_expr);
-40039:     }
-40039:     else {
-40039:       refine_with_constraint(ub_expr <= denominator*var);
-40039:     }
-40039:   }
-40039:   else {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_numer; Parma_Polyhedra_Library::Coefficient& max_numer = holder_max_numer.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_denom; Parma_Polyhedra_Library::Coefficient& max_denom = holder_max_denom.item();
-40039:     bool max_included;
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_numer; Parma_Polyhedra_Library::Coefficient& min_numer = holder_min_numer.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_denom; Parma_Polyhedra_Library::Coefficient& min_denom = holder_min_denom.item();
-40039:     bool min_included;
-40039:     ITV& seq_v = seq[var.id()];
-40039:     if (maximize(ub_expr, max_numer, max_denom, max_included)) {
-40039:       if (minimize(lb_expr, min_numer, min_denom, min_included)) {
-40039: 
-40039: 
-40039: 
-40039:         min_denom *= denominator;
-40039:         Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q1; mpq_class& q1 = holder_q1.item();
-40039:         Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q2; mpq_class& q2 = holder_q2.item();
-40039:         assign_r(q1.get_num(), min_numer, ROUND_NOT_NEEDED);
-40039:         assign_r(q1.get_den(), min_denom, ROUND_NOT_NEEDED);
-40039:         q1.canonicalize();
-40039: 
-40039: 
-40039:         max_denom *= denominator;
-40039:         assign_r(q2.get_num(), max_numer, ROUND_NOT_NEEDED);
-40039:         assign_r(q2.get_den(), max_denom, ROUND_NOT_NEEDED);
-40039:         q2.canonicalize();
-40039: 
-40039:         if (denominator > 0) {
-40039:           Relation_Symbol gr = min_included ? GREATER_OR_EQUAL : GREATER_THAN;
-40039:           Relation_Symbol lr = max_included ? LESS_OR_EQUAL : LESS_THAN;
-40039:           seq_v.build(i_constraint(gr, q1), i_constraint(lr, q2));
-40039:         }
-40039:         else {
-40039:           Relation_Symbol gr = max_included ? GREATER_OR_EQUAL : GREATER_THAN;
-40039:           Relation_Symbol lr = min_included ? LESS_OR_EQUAL : LESS_THAN;
-40039:           seq_v.build(i_constraint(gr, q2), i_constraint(lr, q1));
-40039:         }
-40039:       }
-40039:       else {
-40039: 
-40039: 
-40039: 
-40039:         Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
-40039:         max_denom *= denominator;
-40039:         assign_r(q.get_num(), max_numer, ROUND_NOT_NEEDED);
-40039:         assign_r(q.get_den(), max_denom, ROUND_NOT_NEEDED);
-40039:         q.canonicalize();
-40039:         Relation_Symbol rel = (denominator > 0)
-40039:           ? (max_included ? LESS_OR_EQUAL : LESS_THAN)
-40039:           : (max_included ? GREATER_OR_EQUAL : GREATER_THAN);
-40039:         seq_v.build(i_constraint(rel, q));
-40039:       }
-40039:     }
-40039:     else if (minimize(lb_expr, min_numer, min_denom, min_included)) {
-40039: 
-40039: 
-40039: 
-40039:         min_denom *= denominator;
-40039:         Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
-40039:         assign_r(q.get_num(), min_numer, ROUND_NOT_NEEDED);
-40039:         assign_r(q.get_den(), min_denom, ROUND_NOT_NEEDED);
-40039:         q.canonicalize();
-40039: 
-40039:         Relation_Symbol rel = (denominator > 0)
-40039:           ? (min_included ? GREATER_OR_EQUAL : GREATER_THAN)
-40039:           : (min_included ? LESS_OR_EQUAL : LESS_THAN);
-40039:         seq_v.build(i_constraint(rel, q));
-40039:     }
-40039:     else {
-40039: 
-40039: 
-40039: 
-40039:       seq_v.assign(UNIVERSE);
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>
-40039: ::bounded_affine_preimage(const Variable var,
-40039:                           const Linear_Expression& lb_expr,
-40039:                           const Linear_Expression& ub_expr,
-40039:                           Coefficient_traits::const_reference denominator) {
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039:   if (denominator == 0) {
-40039:     throw_invalid_argument("bounded_affine_preimage(v, lb, ub, d)", "d == 0");
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type var_space_dim = var.space_dimension();
-40039:   if (space_dim < var_space_dim) {
-40039:     throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)",
-40039:                                  "v", var);
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type lb_space_dim = lb_expr.space_dimension();
-40039:   if (space_dim < lb_space_dim) {
-40039:     throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)",
-40039:                                  "lb", lb_expr);
-40039:   }
-40039:   const dimension_type ub_space_dim = ub_expr.space_dimension();
-40039:   if (space_dim < ub_space_dim) {
-40039:     throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)",
-40039:                                  "ub", ub_expr);
-40039:   }
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   const bool negative_denom = (denominator < 0);
-40039:   const Coefficient& lb_var_coeff = lb_expr.coefficient(var);
-40039:   const Coefficient& ub_var_coeff = ub_expr.coefficient(var);
-40039: 
-40039: 
-40039: 
-40039:   if (lb_var_coeff == ub_var_coeff) {
-40039:     if (negative_denom) {
-40039:       refine_with_constraint(lb_expr >= ub_expr);
-40039:     }
-40039:     else {
-40039:       refine_with_constraint(lb_expr <= ub_expr);
-40039:     }
-40039:   }
-40039: 
-40039:   ITV& seq_var = seq[var.id()];
-40039:   if (!seq_var.is_universe()) {
-40039: 
-40039: 
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_pos_denominator; Parma_Polyhedra_Library::Coefficient& pos_denominator = holder_pos_denominator.item();
-40039:     pos_denominator = denominator;
-40039:     if (negative_denom) {
-40039:       neg_assign(pos_denominator, pos_denominator);
-40039:     }
-40039: 
-40039: 
-40039:     bool open_lower = seq_var.lower_is_open();
-40039:     bool unbounded_lower = seq_var.lower_is_boundary_infinity();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_seq_var_lower; mpq_class& q_seq_var_lower = holder_q_seq_var_lower.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer_lower; Parma_Polyhedra_Library::Coefficient& numer_lower = holder_numer_lower.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom_lower; Parma_Polyhedra_Library::Coefficient& denom_lower = holder_denom_lower.item();
-40039:     if (!unbounded_lower) {
-40039:       assign_r(q_seq_var_lower, seq_var.lower(), ROUND_NOT_NEEDED);
-40039:       assign_r(numer_lower, q_seq_var_lower.get_num(), ROUND_NOT_NEEDED);
-40039:       assign_r(denom_lower, q_seq_var_lower.get_den(), ROUND_NOT_NEEDED);
-40039:       if (negative_denom) {
-40039:         neg_assign(denom_lower, denom_lower);
-40039:       }
-40039:       numer_lower *= pos_denominator;
-40039:       seq_var.lower_extend();
-40039:     }
-40039:     bool open_upper = seq_var.upper_is_open();
-40039:     bool unbounded_upper = seq_var.upper_is_boundary_infinity();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_seq_var_upper; mpq_class& q_seq_var_upper = holder_q_seq_var_upper.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer_upper; Parma_Polyhedra_Library::Coefficient& numer_upper = holder_numer_upper.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom_upper; Parma_Polyhedra_Library::Coefficient& denom_upper = holder_denom_upper.item();
-40039:     if (!unbounded_upper) {
-40039:       assign_r(q_seq_var_upper, seq_var.upper(), ROUND_NOT_NEEDED);
-40039:       assign_r(numer_upper, q_seq_var_upper.get_num(), ROUND_NOT_NEEDED);
-40039:       assign_r(denom_upper, q_seq_var_upper.get_den(), ROUND_NOT_NEEDED);
-40039:       if (negative_denom) {
-40039:         neg_assign(denom_upper, denom_upper);
-40039:       }
-40039:       numer_upper *= pos_denominator;
-40039:       seq_var.upper_extend();
-40039:     }
-40039: 
-40039:     if (!unbounded_lower) {
-40039: 
-40039: 
-40039: 
-40039:       Linear_Expression revised_lb_expr(ub_expr);
-40039:       revised_lb_expr -= ub_var_coeff * var;
-40039:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_d; Parma_Polyhedra_Library::Coefficient& d = holder_d.item();
-40039:       neg_assign(d, denom_lower);
-40039:       revised_lb_expr *= d;
-40039:       revised_lb_expr += numer_lower;
-40039: 
-40039: 
-40039: 
-40039:       bool included;
-40039:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
-40039:       if (minimize(revised_lb_expr, numer_lower, denom, included)) {
-40039:         denom_lower *= (denom * ub_var_coeff);
-40039:         Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
-40039:         assign_r(q.get_num(), numer_lower, ROUND_NOT_NEEDED);
-40039:         assign_r(q.get_den(), denom_lower, ROUND_NOT_NEEDED);
-40039:         q.canonicalize();
-40039:         if (!included) {
-40039:           open_lower = true;
-40039:         }
-40039:         Relation_Symbol rel;
-40039:         if ((ub_var_coeff >= 0) ? !negative_denom : negative_denom) {
-40039:           rel = open_lower ? GREATER_THAN : GREATER_OR_EQUAL;
-40039:         }
-40039:         else {
-40039:           rel = open_lower ? LESS_THAN : LESS_OR_EQUAL;
-40039:         }
-40039:         seq_var.add_constraint(i_constraint(rel, q));
-40039:         if (seq_var.is_empty()) {
-40039:           set_empty();
-40039:           return;
-40039:         }
-40039:       }
-40039:     }
-40039: 
-40039:     if (!unbounded_upper) {
-40039: 
-40039: 
-40039: 
-40039:       Linear_Expression revised_ub_expr(lb_expr);
-40039:       revised_ub_expr -= lb_var_coeff * var;
-40039:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_d; Parma_Polyhedra_Library::Coefficient& d = holder_d.item();
-40039:       neg_assign(d, denom_upper);
-40039:       revised_ub_expr *= d;
-40039:       revised_ub_expr += numer_upper;
-40039: 
-40039: 
-40039: 
-40039:       bool included;
-40039:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
-40039:       if (maximize(revised_ub_expr, numer_upper, denom, included)) {
-40039:         denom_upper *= (denom * lb_var_coeff);
-40039:         Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
-40039:         assign_r(q.get_num(), numer_upper, ROUND_NOT_NEEDED);
-40039:         assign_r(q.get_den(), denom_upper, ROUND_NOT_NEEDED);
-40039:         q.canonicalize();
-40039:         if (!included) {
-40039:           open_upper = true;
-40039:         }
-40039:         Relation_Symbol rel;
-40039:         if ((lb_var_coeff >= 0) ? !negative_denom : negative_denom) {
-40039:           rel = open_upper ? LESS_THAN : LESS_OR_EQUAL;
-40039:         }
-40039:         else {
-40039:           rel = open_upper ? GREATER_THAN : GREATER_OR_EQUAL;
-40039:         }
-40039:         seq_var.add_constraint(i_constraint(rel, q));
-40039:         if (seq_var.is_empty()) {
-40039:           set_empty();
-40039:           return;
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (lb_var_coeff != ub_var_coeff) {
-40039:     if (denominator > 0) {
-40039:       refine_with_constraint(lb_expr <= ub_expr);
-40039:     }
-40039:     else {
-40039:       refine_with_constraint(lb_expr >= ub_expr);
-40039:     }
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>
-40039: ::generalized_affine_image(const Variable var,
-40039:                            const Relation_Symbol relsym,
-40039:                            const Linear_Expression& expr,
-40039:                            Coefficient_traits::const_reference denominator) {
-40039: 
-40039:   if (denominator == 0) {
-40039:     throw_invalid_argument("generalized_affine_image(v, r, e, d)", "d == 0");
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039: 
-40039:   if (space_dim < expr.space_dimension()) {
-40039:     throw_dimension_incompatible("generalized_affine_image(v, r, e, d)",
-40039:                                  "e", expr);
-40039:   }
-40039: 
-40039:   const dimension_type var_space_dim = var.space_dimension();
-40039:   if (space_dim < var_space_dim) {
-40039:     throw_dimension_incompatible("generalized_affine_image(v, r, e, d)",
-40039:                                  "v", var);
-40039:   }
-40039: 
-40039: 
-40039:   if (relsym == NOT_EQUAL) {
-40039:     throw_invalid_argument("generalized_affine_image(v, r, e, d)",
-40039:                            "r is the disequality relation symbol");
-40039:   }
-40039: 
-40039: 
-40039:   affine_image(var, expr, denominator);
-40039: 
-40039:   if (relsym == EQUAL) {
-40039: 
-40039:     return;
-40039:   }
-40039: 
-40039:   if (is_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   ITV& seq_var = seq[var.id()];
-40039:   switch (relsym) {
-40039:   case LESS_OR_EQUAL:
-40039:     seq_var.lower_extend();
-40039:     break;
-40039:   case LESS_THAN:
-40039:     seq_var.lower_extend();
-40039:     if (!seq_var.upper_is_boundary_infinity()) {
-40039:       seq_var.remove_sup();
-40039:     }
-40039:     break;
-40039:   case GREATER_OR_EQUAL:
-40039:     seq_var.upper_extend();
-40039:     break;
-40039:   case GREATER_THAN:
-40039:     seq_var.upper_extend();
-40039:     if (!seq_var.lower_is_boundary_infinity()) {
-40039:       seq_var.remove_inf();
-40039:     }
-40039:     break;
-40039:   default:
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     break;
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>
-40039: ::generalized_affine_preimage(const Variable var,
-40039:                               const Relation_Symbol relsym,
-40039:                               const Linear_Expression& expr,
-40039:                               Coefficient_traits::const_reference denominator)
-40039: {
-40039: 
-40039:   if (denominator == 0) {
-40039:     throw_invalid_argument("generalized_affine_preimage(v, r, e, d)",
-40039:                            "d == 0");
-40039:   }
-40039: 
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039: 
-40039:   if (space_dim < expr.space_dimension()) {
-40039:     throw_dimension_incompatible("generalized_affine_preimage(v, r, e, d)",
-40039:                                  "e", expr);
-40039:   }
-40039: 
-40039:   const dimension_type var_space_dim = var.space_dimension();
-40039:   if (space_dim < var_space_dim) {
-40039:     throw_dimension_incompatible("generalized_affine_preimage(v, r, e, d)",
-40039:                                  "v", var);
-40039:   }
-40039: 
-40039:   if (relsym == NOT_EQUAL) {
-40039:     throw_invalid_argument("generalized_affine_preimage(v, r, e, d)",
-40039:                            "r is the disequality relation symbol");
-40039:   }
-40039: 
-40039: 
-40039:   if (relsym == EQUAL) {
-40039:     affine_preimage(var, expr, denominator);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   Relation_Symbol reversed_relsym;
-40039:   switch (relsym) {
-40039:   case LESS_THAN:
-40039:     reversed_relsym = GREATER_THAN;
-40039:     break;
-40039:   case LESS_OR_EQUAL:
-40039:     reversed_relsym = GREATER_OR_EQUAL;
-40039:     break;
-40039:   case GREATER_OR_EQUAL:
-40039:     reversed_relsym = LESS_OR_EQUAL;
-40039:     break;
-40039:   case GREATER_THAN:
-40039:     reversed_relsym = LESS_THAN;
-40039:     break;
-40039:   default:
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     break;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   const Coefficient& var_coefficient = expr.coefficient(var);
-40039:   if (var_coefficient != 0) {
-40039:     Linear_Expression inverse_expr
-40039:       = expr - (denominator + var_coefficient) * var;
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inverse_denominator; Parma_Polyhedra_Library::Coefficient& inverse_denominator = holder_inverse_denominator.item();
-40039:     neg_assign(inverse_denominator, var_coefficient);
-40039:     Relation_Symbol inverse_relsym
-40039:       = (sgn(denominator) == sgn(inverse_denominator))
-40039:       ? relsym
-40039:       : reversed_relsym;
-40039:     generalized_affine_image(var, inverse_relsym, inverse_expr,
-40039:                              inverse_denominator);
-40039:     return;
-40039:   }
-40039: # 3716 "../../src/Box_templates.hh"
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_numer; Parma_Polyhedra_Library::Coefficient& max_numer = holder_max_numer.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_denom; Parma_Polyhedra_Library::Coefficient& max_denom = holder_max_denom.item();
-40039:   bool max_included;
-40039:   bool bound_above = maximize(denominator*var, max_numer, max_denom, max_included);
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_numer; Parma_Polyhedra_Library::Coefficient& min_numer = holder_min_numer.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_denom; Parma_Polyhedra_Library::Coefficient& min_denom = holder_min_denom.item();
-40039:   bool min_included;
-40039:   bool bound_below = minimize(denominator*var, min_numer, min_denom, min_included);
-40039: 
-40039:   const Relation_Symbol corrected_relsym
-40039:     = (denominator > 0) ? relsym : reversed_relsym;
-40039: 
-40039: 
-40039:   Linear_Expression revised_expr;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_d; Parma_Polyhedra_Library::Coefficient& d = holder_d.item();
-40039:   if (corrected_relsym == LESS_THAN || corrected_relsym == LESS_OR_EQUAL) {
-40039:     if (bound_below) {
-40039:       revised_expr = expr;
-40039:       revised_expr.set_inhomogeneous_term(Coefficient_zero());
-40039:       revised_expr *= d;
-40039:     }
-40039:   }
-40039:   else {
-40039:     if (bound_above) {
-40039:       revised_expr = expr;
-40039:       revised_expr.set_inhomogeneous_term(Coefficient_zero());
-40039:       revised_expr *= max_denom;
-40039:     }
-40039:   }
-40039: 
-40039:   switch (corrected_relsym) {
-40039:   case LESS_THAN:
-40039:     if (bound_below) {
-40039:       refine_with_constraint(min_numer < revised_expr);
-40039:     }
-40039:     break;
-40039:   case LESS_OR_EQUAL:
-40039:     if (bound_below) {
-40039:       (min_included)
-40039:         ? refine_with_constraint(min_numer <= revised_expr)
-40039:         : refine_with_constraint(min_numer < revised_expr);
-40039:     }
-40039:     break;
-40039:   case GREATER_OR_EQUAL:
-40039:     if (bound_above) {
-40039:       (max_included)
-40039:         ? refine_with_constraint(max_numer >= revised_expr)
-40039:         : refine_with_constraint(max_numer > revised_expr);
-40039:     }
-40039:     break;
-40039:   case GREATER_THAN:
-40039:     if (bound_above) {
-40039:       refine_with_constraint(max_numer > revised_expr);
-40039:     }
-40039:     break;
-40039:   default:
-40039: 
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     break;
-40039:   }
-40039: 
-40039:   if (is_empty()) {
-40039:     return;
-40039:   }
-40039:   ITV& seq_v = seq[var.id()];
-40039:   seq_v.assign(UNIVERSE);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>
-40039: ::generalized_affine_image(const Linear_Expression& lhs,
-40039:                            const Relation_Symbol relsym,
-40039:                            const Linear_Expression& rhs) {
-40039: 
-40039: 
-40039: 
-40039:   dimension_type lhs_space_dim = lhs.space_dimension();
-40039:   const dimension_type space_dim = space_dimension();
-40039:   if (space_dim < lhs_space_dim) {
-40039:     throw_dimension_incompatible("generalized_affine_image(e1, r, e2)",
-40039:                                  "e1", lhs);
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type rhs_space_dim = rhs.space_dimension();
-40039:   if (space_dim < rhs_space_dim) {
-40039:     throw_dimension_incompatible("generalized_affine_image(e1, r, e2)",
-40039:                                  "e2", rhs);
-40039:   }
-40039: 
-40039: 
-40039:   if (relsym == NOT_EQUAL) {
-40039:     throw_invalid_argument("generalized_affine_image(e1, r, e2)",
-40039:                            "r is the disequality relation symbol");
-40039:   }
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_numer; Parma_Polyhedra_Library::Coefficient& max_numer = holder_max_numer.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_denom; Parma_Polyhedra_Library::Coefficient& max_denom = holder_max_denom.item();
-40039:   bool max_included;
-40039:   bool max_rhs = maximize(rhs, max_numer, max_denom, max_included);
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_numer; Parma_Polyhedra_Library::Coefficient& min_numer = holder_min_numer.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_denom; Parma_Polyhedra_Library::Coefficient& min_denom = holder_min_denom.item();
-40039:   bool min_included;
-40039:   bool min_rhs = minimize(rhs, min_numer, min_denom, min_included);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool has_var = false;
-40039:   dimension_type has_var_id = lhs.last_nonzero();
-40039: 
-40039:   if (has_var_id != 0) {
-40039:     has_var = true;
-40039:     --has_var_id;
-40039:     dimension_type other_var = lhs.first_nonzero(1, has_var_id + 1);
-40039:     --other_var;
-40039:     if (other_var != has_var_id) {
-40039: 
-40039: 
-40039:       ITV& seq_var = seq[has_var_id];
-40039:       seq_var.assign(UNIVERSE);
-40039: 
-40039: 
-40039: 
-40039:       ITV& seq_i = seq[other_var];
-40039:       seq_i.assign(UNIVERSE);
-40039:       ((void) 0);
-40039:       return;
-40039:     }
-40039:   }
-40039: 
-40039:   if (has_var) {
-40039: 
-40039:     ITV& seq_var = seq[has_var_id];
-40039: 
-40039: 
-40039: 
-40039:     const Coefficient& inhomo = lhs.inhomogeneous_term();
-40039:     const Coefficient& coeff = lhs.coefficient(Variable(has_var_id));
-40039:     Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_max; mpq_class& q_max = holder_q_max.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_min; mpq_class& q_min = holder_q_min.item();
-40039:     if (max_rhs) {
-40039:       max_numer -= inhomo * max_denom;
-40039:       max_denom *= coeff;
-40039:       assign_r(q_max.get_num(), max_numer, ROUND_NOT_NEEDED);
-40039:       assign_r(q_max.get_den(), max_denom, ROUND_NOT_NEEDED);
-40039:       q_max.canonicalize();
-40039:     }
-40039:     if (min_rhs) {
-40039:       min_numer -= inhomo * min_denom;
-40039:       min_denom *= coeff;
-40039:       assign_r(q_min.get_num(), min_numer, ROUND_NOT_NEEDED);
-40039:       assign_r(q_min.get_den(), min_denom, ROUND_NOT_NEEDED);
-40039:       q_min.canonicalize();
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:     if (coeff > 0) {
-40039: 
-40039:       switch (relsym) {
-40039:       case LESS_OR_EQUAL:
-40039:         if (max_rhs) {
-40039:           Relation_Symbol rel = max_included ? LESS_OR_EQUAL : LESS_THAN;
-40039:           seq_var.build(i_constraint(rel, q_max));
-40039:         }
-40039:         else {
-40039:           seq_var.assign(UNIVERSE);
-40039:         }
-40039:         break;
-40039:       case LESS_THAN:
-40039:         if (max_rhs) {
-40039:           seq_var.build(i_constraint(LESS_THAN, q_max));
-40039:         }
-40039:         else {
-40039:           seq_var.assign(UNIVERSE);
-40039:         }
-40039:         break;
-40039:       case EQUAL:
-40039:         {
-40039:           I_Constraint<mpq_class> l;
-40039:           I_Constraint<mpq_class> u;
-40039:           if (max_rhs) {
-40039:             u.set(max_included ? LESS_OR_EQUAL : LESS_THAN, q_max);
-40039:           }
-40039:           if (min_rhs) {
-40039:             l.set(min_included ? GREATER_OR_EQUAL : GREATER_THAN, q_min);
-40039:           }
-40039:           seq_var.build(l, u);
-40039:           break;
-40039:         }
-40039:       case GREATER_OR_EQUAL:
-40039:         if (min_rhs) {
-40039:           Relation_Symbol rel = min_included ? GREATER_OR_EQUAL : GREATER_THAN;
-40039:           seq_var.build(i_constraint(rel, q_min));
-40039:         }
-40039:         else {
-40039:           seq_var.assign(UNIVERSE);
-40039:         }
-40039:         break;
-40039:       case GREATER_THAN:
-40039:         if (min_rhs) {
-40039:           seq_var.build(i_constraint(GREATER_THAN, q_min));
-40039:         }
-40039:         else {
-40039:           seq_var.assign(UNIVERSE);
-40039:         }
-40039:         break;
-40039:       default:
-40039: 
-40039:         Parma_Polyhedra_Library::ppl_unreachable();
-40039:         break;
-40039:       }
-40039:     }
-40039:     else {
-40039: 
-40039:       switch (relsym) {
-40039:       case GREATER_OR_EQUAL:
-40039:         if (min_rhs) {
-40039:           Relation_Symbol rel = min_included ? LESS_OR_EQUAL : LESS_THAN;
-40039:           seq_var.build(i_constraint(rel, q_min));
-40039:         }
-40039:         else {
-40039:           seq_var.assign(UNIVERSE);
-40039:         }
-40039:         break;
-40039:       case GREATER_THAN:
-40039:         if (min_rhs) {
-40039:           seq_var.build(i_constraint(LESS_THAN, q_min));
-40039:         }
-40039:         else {
-40039:           seq_var.assign(UNIVERSE);
-40039:         }
-40039:         break;
-40039:       case EQUAL:
-40039:         {
-40039:           I_Constraint<mpq_class> l;
-40039:           I_Constraint<mpq_class> u;
-40039:           if (max_rhs) {
-40039:             l.set(max_included ? GREATER_OR_EQUAL : GREATER_THAN, q_max);
-40039:           }
-40039:           if (min_rhs) {
-40039:             u.set(min_included ? LESS_OR_EQUAL : LESS_THAN, q_min);
-40039:           }
-40039:           seq_var.build(l, u);
-40039:           break;
-40039:         }
-40039:       case LESS_OR_EQUAL:
-40039:         if (max_rhs) {
-40039:           Relation_Symbol rel = max_included ? GREATER_OR_EQUAL : GREATER_THAN;
-40039:           seq_var.build(i_constraint(rel, q_max));
-40039:         }
-40039:         else {
-40039:           seq_var.assign(UNIVERSE);
-40039:         }
-40039:         break;
-40039:       case LESS_THAN:
-40039:         if (max_rhs) {
-40039:           seq_var.build(i_constraint(GREATER_THAN, q_max));
-40039:         }
-40039:         else {
-40039:           seq_var.assign(UNIVERSE);
-40039:         }
-40039:         break;
-40039:       default:
-40039: 
-40039:         Parma_Polyhedra_Library::ppl_unreachable();
-40039:         break;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   else {
-40039: 
-40039: 
-40039:     const Coefficient& inhomo = lhs.inhomogeneous_term();
-40039:     switch (relsym) {
-40039:     case LESS_THAN:
-40039:       refine_with_constraint(inhomo < rhs);
-40039:       break;
-40039:     case LESS_OR_EQUAL:
-40039:       refine_with_constraint(inhomo <= rhs);
-40039:       break;
-40039:     case EQUAL:
-40039:       refine_with_constraint(inhomo == rhs);
-40039:       break;
-40039:     case GREATER_OR_EQUAL:
-40039:       refine_with_constraint(inhomo >= rhs);
-40039:       break;
-40039:     case GREATER_THAN:
-40039:       refine_with_constraint(inhomo > rhs);
-40039:       break;
-40039:     default:
-40039: 
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       break;
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::generalized_affine_preimage(const Linear_Expression& lhs,
-40039:                                       const Relation_Symbol relsym,
-40039:                                       const Linear_Expression& rhs) {
-40039: 
-40039: 
-40039: 
-40039:   dimension_type lhs_space_dim = lhs.space_dimension();
-40039:   const dimension_type space_dim = space_dimension();
-40039:   if (space_dim < lhs_space_dim) {
-40039:     throw_dimension_incompatible("generalized_affine_image(e1, r, e2)",
-40039:                                  "e1", lhs);
-40039:   }
-40039: 
-40039: 
-40039:   const dimension_type rhs_space_dim = rhs.space_dimension();
-40039:   if (space_dim < rhs_space_dim) {
-40039:     throw_dimension_incompatible("generalized_affine_image(e1, r, e2)",
-40039:                                  "e2", rhs);
-40039:   }
-40039: 
-40039: 
-40039:   if (relsym == NOT_EQUAL) {
-40039:     throw_invalid_argument("generalized_affine_image(e1, r, e2)",
-40039:                            "r is the disequality relation symbol");
-40039:   }
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   Linear_Expression revised_lhs = lhs;
-40039:   Linear_Expression revised_rhs = rhs;
-40039:   for (Linear_Expression::const_iterator i = lhs.begin(),
-40039:          i_end = lhs.end(); i != i_end; ++i) {
-40039:     const Variable var = i.variable();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_tmp; Parma_Polyhedra_Library::Coefficient& tmp = holder_tmp.item();
-40039:     tmp = *i;
-40039:     tmp += rhs.coefficient(var);
-40039:     sub_mul_assign(revised_rhs, tmp, var);
-40039:     sub_mul_assign(revised_lhs, tmp, var);
-40039:   }
-40039:   generalized_affine_image(revised_lhs, relsym, revised_rhs);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: template <typename T, typename Iterator>
-40039: typename Enable_If<Is_Same<T, Box<ITV> >::value
-40039:                    && Is_Same_Or_Derived<Interval_Base, ITV>::value,
-40039:                    void>::type
-40039: Box<ITV>::CC76_widening_assign(const T& y, Iterator first, Iterator last) {
-40039:   if (y.is_empty()) {
-40039:     return;
-40039:   }
-40039:   for (dimension_type i = seq.size(); i-- > 0; ) {
-40039:     seq[i].CC76_widening_assign(y.seq[i], first, last);
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: template <typename T>
-40039: typename Enable_If<Is_Same<T, Box<ITV> >::value
-40039:                    && Is_Same_Or_Derived<Interval_Base, ITV>::value,
-40039:                    void>::type
-40039: Box<ITV>::CC76_widening_assign(const T& y, unsigned* tp) {
-40039:   static typename ITV::boundary_type stop_points[] = {
-40039:     typename ITV::boundary_type(-2),
-40039:     typename ITV::boundary_type(-1),
-40039:     typename ITV::boundary_type(0),
-40039:     typename ITV::boundary_type(1),
-40039:     typename ITV::boundary_type(2)
-40039:   };
-40039: 
-40039:   Box& x = *this;
-40039: 
-40039:   if (tp != 0 && *tp > 0) {
-40039:     Box<ITV> x_tmp(x);
-40039:     x_tmp.CC76_widening_assign(y, 0);
-40039: 
-40039:     if (!x.contains(x_tmp)) {
-40039:       --(*tp);
-40039:     }
-40039:     return;
-40039:   }
-40039:   x.CC76_widening_assign(y,
-40039:                          stop_points,
-40039:                          stop_points
-40039:                          + sizeof(stop_points)/sizeof(stop_points[0]));
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::get_limiting_box(const Constraint_System& cs,
-40039:                            Box& limiting_box) const {
-40039: 
-40039:   ((void) 0);
-40039: 
-40039:   for (Constraint_System::const_iterator cs_i = cs.begin(),
-40039:          cs_end = cs.end(); cs_i != cs_end; ++cs_i) {
-40039:     const Constraint& c = *cs_i;
-40039:     dimension_type c_num_vars = 0;
-40039:     dimension_type c_only_var = 0;
-40039: 
-40039:     if (!Box_Helpers::extract_interval_constraint(c, c_num_vars, c_only_var)) {
-40039:       continue;
-40039:     }
-40039: 
-40039:     if (c_num_vars != 0) {
-40039: 
-40039: 
-40039:       const Coefficient& n = c.inhomogeneous_term();
-40039:       const Coefficient& d = c.coefficient(Variable(c_only_var));
-40039:       if (interval_relation(seq[c_only_var], c.type(), n, d)
-40039:           == Poly_Con_Relation::is_included()) {
-40039:         limiting_box.add_interval_constraint_no_check(c_only_var, c.type(),
-40039:                                                       n, d);
-40039:       }
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::limited_CC76_extrapolation_assign(const Box& y,
-40039:                                             const Constraint_System& cs,
-40039:                                             unsigned* tp) {
-40039:   Box& x = *this;
-40039:   const dimension_type space_dim = x.space_dimension();
-40039: 
-40039: 
-40039:   if (space_dim != y.space_dimension()) {
-40039:     throw_dimension_incompatible("limited_CC76_extrapolation_assign(y, cs)",
-40039:                                   y);
-40039:   }
-40039: 
-40039:   const dimension_type cs_space_dim = cs.space_dimension();
-40039:   if (space_dim < cs_space_dim) {
-40039:     throw_constraint_incompatible("limited_CC76_extrapolation_assign(y, cs)");
-40039:   }
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039:   if (marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   if (y.marked_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   Box limiting_box(space_dim, UNIVERSE);
-40039:   get_limiting_box(cs, limiting_box);
-40039: 
-40039:   x.CC76_widening_assign(y, tp);
-40039: 
-40039: 
-40039:   intersection_assign(limiting_box);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: template <typename T>
-40039: typename Enable_If<Is_Same<T, Box<ITV> >::value
-40039:                    && Is_Same_Or_Derived<Interval_Base, ITV>::value,
-40039:                    void>::type
-40039: Box<ITV>::CC76_narrowing_assign(const T& y) {
-40039:   const dimension_type space_dim = space_dimension();
-40039: 
-40039: 
-40039:   if (space_dim != y.space_dimension()) {
-40039:     throw_dimension_incompatible("CC76_narrowing_assign(y)", y);
-40039:   }
-40039: 
-40039: 
-40039:   ((void) 0);
-40039: 
-40039: 
-40039: 
-40039:   if (space_dim == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039:   if (y.is_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   if (is_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   for (dimension_type i = space_dim; i-- > 0; ) {
-40039:     ITV& x_i = seq[i];
-40039:     const ITV& y_i = y.seq[i];
-40039:     if (!x_i.lower_is_boundary_infinity()
-40039:         && !y_i.lower_is_boundary_infinity()
-40039:         && x_i.lower() != y_i.lower()) {
-40039:       x_i.lower() = y_i.lower();
-40039:     }
-40039:     if (!x_i.upper_is_boundary_infinity()
-40039:         && !y_i.upper_is_boundary_infinity()
-40039:         && x_i.upper() != y_i.upper()) {
-40039:       x_i.upper() = y_i.upper();
-40039:     }
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: Constraint_System
-40039: Box<ITV>::constraints() const {
-40039:   const dimension_type space_dim = space_dimension();
-40039:   Constraint_System cs;
-40039:   cs.set_space_dimension(space_dim);
-40039: 
-40039:   if (space_dim == 0) {
-40039:     if (marked_empty()) {
-40039:       cs = Constraint_System::zero_dim_empty();
-40039:     }
-40039:     return cs;
-40039:   }
-40039: 
-40039:   if (marked_empty()) {
-40039:     cs.insert(Constraint::zero_dim_false());
-40039:     return cs;
-40039:   }
-40039: 
-40039:   for (dimension_type k = 0; k < space_dim; ++k) {
-40039:     const Variable v_k = Variable(k);
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_n; Parma_Polyhedra_Library::Coefficient& n = holder_n.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_d; Parma_Polyhedra_Library::Coefficient& d = holder_d.item();
-40039:     bool closed = false;
-40039:     if (has_lower_bound(v_k, n, d, closed)) {
-40039:       if (closed) {
-40039:         cs.insert(d * v_k >= n);
-40039:       }
-40039:       else {
-40039:         cs.insert(d * v_k > n);
-40039:       }
-40039:     }
-40039:     if (has_upper_bound(v_k, n, d, closed)) {
-40039:       if (closed) {
-40039:         cs.insert(d * v_k <= n);
-40039:       }
-40039:       else {
-40039:         cs.insert(d * v_k < n);
-40039:       }
-40039:     }
-40039:   }
-40039:   return cs;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: Constraint_System
-40039: Box<ITV>::minimized_constraints() const {
-40039:   const dimension_type space_dim = space_dimension();
-40039:   Constraint_System cs;
-40039:   cs.set_space_dimension(space_dim);
-40039: 
-40039:   if (space_dim == 0) {
-40039:     if (marked_empty()) {
-40039:       cs = Constraint_System::zero_dim_empty();
-40039:     }
-40039:     return cs;
-40039:   }
-40039: 
-40039: 
-40039:   if (is_empty()) {
-40039:     cs.insert(Constraint::zero_dim_false());
-40039:     return cs;
-40039:   }
-40039: 
-40039:   for (dimension_type k = 0; k < space_dim; ++k) {
-40039:     const Variable v_k = Variable(k);
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_n; Parma_Polyhedra_Library::Coefficient& n = holder_n.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_d; Parma_Polyhedra_Library::Coefficient& d = holder_d.item();
-40039:     bool closed = false;
-40039:     if (has_lower_bound(v_k, n, d, closed)) {
-40039:       if (closed) {
-40039: 
-40039:         if (seq[k].is_singleton()) {
-40039:           cs.insert(d * v_k == n);
-40039:           continue;
-40039:         }
-40039:         else {
-40039:           cs.insert(d * v_k >= n);
-40039:         }
-40039:       }
-40039:       else {
-40039:         cs.insert(d * v_k > n);
-40039:       }
-40039:     }
-40039:     if (has_upper_bound(v_k, n, d, closed)) {
-40039:       if (closed) {
-40039:         cs.insert(d * v_k <= n);
-40039:       }
-40039:       else {
-40039:         cs.insert(d * v_k < n);
-40039:       }
-40039:     }
-40039:   }
-40039:   return cs;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: Congruence_System
-40039: Box<ITV>::congruences() const {
-40039:   const dimension_type space_dim = space_dimension();
-40039:   Congruence_System cgs(space_dim);
-40039: 
-40039:   if (space_dim == 0) {
-40039:     if (marked_empty()) {
-40039:       cgs = Congruence_System::zero_dim_empty();
-40039:     }
-40039:     return cgs;
-40039:   }
-40039: 
-40039: 
-40039:   if (is_empty()) {
-40039:     cgs.insert(Congruence::zero_dim_false());
-40039:     return cgs;
-40039:   }
-40039: 
-40039:   for (dimension_type k = 0; k < space_dim; ++k) {
-40039:     const Variable v_k = Variable(k);
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_n; Parma_Polyhedra_Library::Coefficient& n = holder_n.item();
-40039:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_d; Parma_Polyhedra_Library::Coefficient& d = holder_d.item();
-40039:     bool closed = false;
-40039:     if (has_lower_bound(v_k, n, d, closed) && closed) {
-40039: 
-40039:       if (seq[k].is_singleton()) {
-40039:         cgs.insert((d * v_k %= n) / 0);
-40039:       }
-40039:     }
-40039:   }
-40039:   return cgs;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: memory_size_type
-40039: Box<ITV>::external_memory_in_bytes() const {
-40039:   memory_size_type n = seq.capacity() * sizeof(ITV);
-40039:   for (dimension_type k = seq.size(); k-- > 0; ) {
-40039:     n += seq[k].external_memory_in_bytes();
-40039:   }
-40039:   return n;
-40039: }
-40039: 
-40039: 
-40039: template <typename ITV>
-40039: std::ostream&
-40039: IO_Operators::operator<<(std::ostream& s, const Box<ITV>& box) {
-40039:   if (box.is_empty()) {
-40039:     s << "false";
-40039:   }
-40039:   else if (box.is_universe()) {
-40039:     s << "true";
-40039:   }
-40039:   else {
-40039:     for (dimension_type k = 0,
-40039:            space_dim = box.space_dimension(); k < space_dim; ) {
-40039:       s << Variable(k) << " in " << box[k];
-40039:       ++k;
-40039:       if (k < space_dim) {
-40039:         s << ", ";
-40039:       }
-40039:       else {
-40039:         break;
-40039:       }
-40039:     }
-40039:   }
-40039:   return s;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::ascii_dump(std::ostream& s) const {
-40039:   const char separator = ' ';
-40039:   status.ascii_dump(s);
-40039:   const dimension_type space_dim = space_dimension();
-40039:   s << "space_dim" << separator << space_dim;
-40039:   s << "\n";
-40039:   for (dimension_type i = 0; i < space_dim; ++i) {
-40039:     seq[i].ascii_dump(s);
-40039:   }
-40039: }
-40039: 
-40039: template <typename ITV> void Box<ITV>::ascii_dump() const { ascii_dump(std::cerr); } template <typename ITV> void Box<ITV>::print() const { using IO_Operators::operator<<; std::cerr << *this; }
-40039: 
-40039: template <typename ITV>
-40039: bool
-40039: Box<ITV>::ascii_load(std::istream& s) {
-40039:   if (!status.ascii_load(s)) {
-40039:     return false;
-40039:   }
-40039:   std::string str;
-40039:   dimension_type space_dim;
-40039:   if (!(s >> str) || str != "space_dim") {
-40039:     return false;
-40039:   }
-40039:   if (!(s >> space_dim)) {
-40039:     return false;
-40039:   }
-40039:   seq.clear();
-40039:   ITV seq_i;
-40039:   for (dimension_type i = 0; i < space_dim; ++i) {
-40039:     if (seq_i.ascii_load(s)) {
-40039:       seq.push_back(seq_i);
-40039:     }
-40039:     else {
-40039:       return false;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::throw_dimension_incompatible(const char* method,
-40039:                                        const Box& y) const {
-40039:   std::ostringstream s;
-40039:   s << "PPL::Box::" << method << ":" << std::endl
-40039:     << "this->space_dimension() == " << this->space_dimension()
-40039:     << ", y->space_dimension() == " << y.space_dimension() << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>
-40039: ::throw_dimension_incompatible(const char* method,
-40039:                                dimension_type required_dim) const {
-40039:   std::ostringstream s;
-40039:   s << "PPL::Box::" << method << ":" << std::endl
-40039:     << "this->space_dimension() == " << space_dimension()
-40039:     << ", required dimension == " << required_dim << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::throw_dimension_incompatible(const char* method,
-40039:                                        const Constraint& c) const {
-40039:   std::ostringstream s;
-40039:   s << "PPL::Box::" << method << ":" << std::endl
-40039:     << "this->space_dimension() == " << space_dimension()
-40039:     << ", c->space_dimension == " << c.space_dimension() << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::throw_dimension_incompatible(const char* method,
-40039:                                        const Congruence& cg) const {
-40039:   std::ostringstream s;
-40039:   s << "PPL::Box::" << method << ":" << std::endl
-40039:     << "this->space_dimension() == " << space_dimension()
-40039:     << ", cg->space_dimension == " << cg.space_dimension() << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::throw_dimension_incompatible(const char* method,
-40039:                                        const Constraint_System& cs) const {
-40039:   std::ostringstream s;
-40039:   s << "PPL::Box::" << method << ":" << std::endl
-40039:     << "this->space_dimension() == " << space_dimension()
-40039:     << ", cs->space_dimension == " << cs.space_dimension() << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::throw_dimension_incompatible(const char* method,
-40039:                                        const Congruence_System& cgs) const {
-40039:   std::ostringstream s;
-40039:   s << "PPL::Box::" << method << ":" << std::endl
-40039:     << "this->space_dimension() == " << space_dimension()
-40039:     << ", cgs->space_dimension == " << cgs.space_dimension() << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::throw_dimension_incompatible(const char* method,
-40039:                                        const Generator& g) const {
-40039:   std::ostringstream s;
-40039:   s << "PPL::Box::" << method << ":" << std::endl
-40039:     << "this->space_dimension() == " << space_dimension()
-40039:     << ", g->space_dimension == " << g.space_dimension() << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::throw_constraint_incompatible(const char* method) {
-40039:   std::ostringstream s;
-40039:   s << "PPL::Box::" << method << ":" << std::endl
-40039:     << "the constraint is incompatible.";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::throw_expression_too_complex(const char* method,
-40039:                                        const Linear_Expression& le) {
-40039:   using namespace IO_Operators;
-40039:   std::ostringstream s;
-40039:   s << "PPL::Box::" << method << ":" << std::endl
-40039:     << le << " is too complex.";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::throw_dimension_incompatible(const char* method,
-40039:                                        const char* le_name,
-40039:                                        const Linear_Expression& le) const {
-40039:   std::ostringstream s;
-40039:   s << "PPL::Box::" << method << ":" << std::endl
-40039:     << "this->space_dimension() == " << space_dimension()
-40039:     << ", " << le_name << "->space_dimension() == "
-40039:     << le.space_dimension() << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: template <typename C>
-40039: void
-40039: Box<ITV>::throw_dimension_incompatible(const char* method,
-40039:                                        const char* lf_name,
-40039:                                        const Linear_Form<C>& lf) const {
-40039:   std::ostringstream s;
-40039:   s << "PPL::Box::" << method << ":\n"
-40039:     << "this->space_dimension() == " << space_dimension()
-40039:     << ", " << lf_name << "->space_dimension() == "
-40039:     << lf.space_dimension() << ".";
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: template <typename ITV>
-40039: void
-40039: Box<ITV>::throw_invalid_argument(const char* method, const char* reason) {
-40039:   std::ostringstream s;
-40039:   s << "PPL::Box::" << method << ":" << std::endl
-40039:     << reason;
-40039:   throw std::invalid_argument(s.str());
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename Specialization,
-40039:           typename Temp, typename To, typename ITV>
-40039: bool
-40039: l_m_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
-40039:                     const Box<ITV>& x, const Box<ITV>& y,
-40039:                     const Rounding_Dir dir,
-40039:                     Temp& tmp0, Temp& tmp1, Temp& tmp2) {
-40039:   const dimension_type x_space_dim = x.space_dimension();
-40039: 
-40039:   if (x_space_dim != y.space_dimension()) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (x_space_dim == 0) {
-40039:     if (x.marked_empty() == y.marked_empty()) {
-40039:       assign_r(r, 0, ROUND_NOT_NEEDED);
-40039:     }
-40039:     else {
-40039:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:     }
-40039:     return true;
-40039:   }
-40039: 
-40039: 
-40039:   (void) x.is_empty();
-40039:   (void) y.is_empty();
-40039: 
-40039: 
-40039:   if (x.marked_empty() || y.marked_empty()) {
-40039:     if (x.marked_empty() == y.marked_empty()) {
-40039:       assign_r(r, 0, ROUND_NOT_NEEDED);
-40039:       return true;
-40039:     }
-40039:     else {
-40039:       goto pinf;
-40039:     }
-40039:   }
-40039: 
-40039:   assign_r(tmp0, 0, ROUND_NOT_NEEDED);
-40039:   for (dimension_type i = x_space_dim; i-- > 0; ) {
-40039:     const ITV& x_i = x.seq[i];
-40039:     const ITV& y_i = y.seq[i];
-40039: 
-40039:     if (x_i.lower_is_boundary_infinity()) {
-40039:       if (!y_i.lower_is_boundary_infinity()) {
-40039:         goto pinf;
-40039:       }
-40039:     }
-40039:     else if (y_i.lower_is_boundary_infinity()) {
-40039:       goto pinf;
-40039:     }
-40039:     else {
-40039:       const Temp* tmp1p;
-40039:       const Temp* tmp2p;
-40039:       if (x_i.lower() > y_i.lower()) {
-40039:         maybe_assign(tmp1p, tmp1, x_i.lower(), dir);
-40039:         maybe_assign(tmp2p, tmp2, y_i.lower(), inverse(dir));
-40039:       }
-40039:       else {
-40039:         maybe_assign(tmp1p, tmp1, y_i.lower(), dir);
-40039:         maybe_assign(tmp2p, tmp2, x_i.lower(), inverse(dir));
-40039:       }
-40039:       sub_assign_r(tmp1, *tmp1p, *tmp2p, dir);
-40039:       ((void) 0);
-40039:       Specialization::combine(tmp0, tmp1, dir);
-40039:     }
-40039: 
-40039:     if (x_i.upper_is_boundary_infinity()) {
-40039:       if (y_i.upper_is_boundary_infinity()) {
-40039:         continue;
-40039:       }
-40039:       else {
-40039:         goto pinf;
-40039:       }
-40039:     }
-40039:     else if (y_i.upper_is_boundary_infinity()) {
-40039:       goto pinf;
-40039:     }
-40039:     else {
-40039:       const Temp* tmp1p;
-40039:       const Temp* tmp2p;
-40039:       if (x_i.upper() > y_i.upper()) {
-40039:         maybe_assign(tmp1p, tmp1, x_i.upper(), dir);
-40039:         maybe_assign(tmp2p, tmp2, y_i.upper(), inverse(dir));
-40039:       }
-40039:       else {
-40039:         maybe_assign(tmp1p, tmp1, y_i.upper(), dir);
-40039:         maybe_assign(tmp2p, tmp2, x_i.upper(), inverse(dir));
-40039:       }
-40039:       sub_assign_r(tmp1, *tmp1p, *tmp2p, dir);
-40039:       ((void) 0);
-40039:       Specialization::combine(tmp0, tmp1, dir);
-40039:     }
-40039:   }
-40039:   Specialization::finalize(tmp0, dir);
-40039:   assign_r(r, tmp0, dir);
-40039:   return true;
-40039: 
-40039:  pinf:
-40039:   assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
-40039:   return true;
-40039: }
-40039: 
-40039: }
-40039: # 2287 "../../src/Box_defs.hh" 2
-40039: # 30 "../../src/Linear_Form_templates.hh" 2
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/cmath" 1 3
-40039: # 39 "/usr/include/c++/8/cmath" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/cmath" 3
-40039: # 33 "../../src/Linear_Form_templates.hh" 2
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>::Linear_Form(const Variable v)
-40039:   : vec() {
-40039:   const dimension_type space_dim = v.space_dimension();
-40039:   if (space_dim > max_space_dimension()) {
-40039:     throw std::length_error("Linear_Form<C>::"
-40039:                             "Linear_Form(v):\n"
-40039:                             "v exceeds the maximum allowed "
-40039:                             "space dimension.");
-40039:   }
-40039:   vec.reserve(compute_capacity(space_dim+1, vec_type().max_size()));
-40039:   vec.resize(space_dim+1, zero);
-40039:   vec[v.space_dimension()] = C(typename C::boundary_type(1));
-40039: }
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>::Linear_Form(const Variable v, const Variable w)
-40039:   : vec() {
-40039:   const dimension_type v_space_dim = v.space_dimension();
-40039:   const dimension_type w_space_dim = w.space_dimension();
-40039:   const dimension_type space_dim = std::max(v_space_dim, w_space_dim);
-40039:   if (space_dim > max_space_dimension()) {
-40039:     throw std::length_error("Linear_Form<C>::"
-40039:                             "Linear_Form(v, w):\n"
-40039:                             "v or w exceed the maximum allowed "
-40039:                             "space dimension.");
-40039:   }
-40039:   vec.reserve(compute_capacity(space_dim+1, vec_type().max_size()));
-40039:   vec.resize(space_dim+1, zero);
-40039:   if (v_space_dim != w_space_dim) {
-40039:     vec[v_space_dim] = C(typename C::boundary_type(1));
-40039:     vec[w_space_dim] = C(typename C::boundary_type(-1));
-40039:   }
-40039: }
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>::Linear_Form(const Linear_Expression& e)
-40039:   : vec() {
-40039:   const dimension_type space_dim = e.space_dimension();
-40039:   if (space_dim > max_space_dimension()) {
-40039:     throw std::length_error("Linear_Form<C>::"
-40039:                             "Linear_Form(e):\n"
-40039:                             "e exceeds the maximum allowed "
-40039:                             "space dimension.");
-40039:   }
-40039:   vec.reserve(compute_capacity(space_dim+1, vec_type().max_size()));
-40039:   vec.resize(space_dim+1);
-40039:   for (dimension_type i = space_dim; i-- > 0; )
-40039:     vec[i+1] = e.coefficient(Variable(i));
-40039:   vec[0] = e.inhomogeneous_term();
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>
-40039: operator+(const Linear_Form<C>& f1, const Linear_Form<C>& f2) {
-40039:   dimension_type f1_size = f1.size();
-40039:   dimension_type f2_size = f2.size();
-40039:   dimension_type min_size;
-40039:   dimension_type max_size;
-40039:   const Linear_Form<C>* p_e_max;
-40039:   if (f1_size > f2_size) {
-40039:     min_size = f2_size;
-40039:     max_size = f1_size;
-40039:     p_e_max = &f1;
-40039:   }
-40039:   else {
-40039:     min_size = f1_size;
-40039:     max_size = f2_size;
-40039:     p_e_max = &f2;
-40039:   }
-40039: 
-40039:   Linear_Form<C> r(max_size, false);
-40039:   dimension_type i = max_size;
-40039:   while (i > min_size) {
-40039:     --i;
-40039:     r[i] = p_e_max->vec[i];
-40039:   }
-40039:   while (i > 0) {
-40039:     --i;
-40039:     r[i] = f1[i];
-40039:     r[i] += f2[i];
-40039:   }
-40039:   return r;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>
-40039: operator+(const Variable v, const Linear_Form<C>& f) {
-40039:   const dimension_type v_space_dim = v.space_dimension();
-40039:   if (v_space_dim > Linear_Form<C>::max_space_dimension()) {
-40039:     throw std::length_error("Linear_Form "
-40039:                             "operator+(v, f):\n"
-40039:                             "v exceeds the maximum allowed "
-40039:                             "space dimension.");
-40039:   }
-40039:   Linear_Form<C> r(f);
-40039:   if (v_space_dim > f.space_dimension()) {
-40039:     r.extend(v_space_dim+1);
-40039:   }
-40039:   r[v_space_dim] += C(typename C::boundary_type(1));
-40039:   return r;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>
-40039: operator+(const C& n, const Linear_Form<C>& f) {
-40039:   Linear_Form<C> r(f);
-40039:   r[0] += n;
-40039:   return r;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>
-40039: operator-(const Linear_Form<C>& f) {
-40039:   Linear_Form<C> r(f);
-40039:   for (dimension_type i = f.size(); i-- > 0; ) {
-40039:     r[i].neg_assign(r[i]);
-40039:   }
-40039:   return r;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>
-40039: operator-(const Linear_Form<C>& f1, const Linear_Form<C>& f2) {
-40039:   dimension_type f1_size = f1.size();
-40039:   dimension_type f2_size = f2.size();
-40039:   if (f1_size > f2_size) {
-40039:     Linear_Form<C> r(f1_size, false);
-40039:     dimension_type i = f1_size;
-40039:     while (i > f2_size) {
-40039:       --i;
-40039:       r[i] = f1[i];
-40039:     }
-40039:     while (i > 0) {
-40039:       --i;
-40039:       r[i] = f1[i];
-40039:       r[i] -= f2[i];
-40039:     }
-40039:     return r;
-40039:   }
-40039:   else {
-40039:     Linear_Form<C> r(f2_size, false);
-40039:     dimension_type i = f2_size;
-40039:     while (i > f1_size) {
-40039:       --i;
-40039:       r[i].neg_assign(f2[i]);
-40039:     }
-40039:     while (i > 0) {
-40039:       --i;
-40039:       r[i] = f1[i];
-40039:       r[i] -= f2[i];
-40039:     }
-40039:     return r;
-40039:   }
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>
-40039: operator-(const Variable v, const Linear_Form<C>& f) {
-40039:   const dimension_type v_space_dim = v.space_dimension();
-40039:   if (v_space_dim > Linear_Form<C>::max_space_dimension()) {
-40039:     throw std::length_error("Linear_Form "
-40039:                             "operator-(v, e):\n"
-40039:                             "v exceeds the maximum allowed "
-40039:                             "space dimension.");
-40039:   }
-40039:   Linear_Form<C> r(f);
-40039:   if (v_space_dim > f.space_dimension()) {
-40039:     r.extend(v_space_dim+1);
-40039:   }
-40039:   for (dimension_type i = f.size(); i-- > 0; ) {
-40039:     r[i].neg_assign(r[i]);
-40039:   }
-40039:   r[v_space_dim] += C(typename C::boundary_type(1));
-40039:   return r;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>
-40039: operator-(const Linear_Form<C>& f, const Variable v) {
-40039:   const dimension_type v_space_dim = v.space_dimension();
-40039:   if (v_space_dim > Linear_Form<C>::max_space_dimension()) {
-40039:     throw std::length_error("Linear_Form "
-40039:                             "operator-(e, v):\n"
-40039:                             "v exceeds the maximum allowed "
-40039:                             "space dimension.");
-40039:   }
-40039:   Linear_Form<C> r(f);
-40039:   if (v_space_dim > f.space_dimension()) {
-40039:     r.extend(v_space_dim+1);
-40039:   }
-40039:   r[v_space_dim] -= C(typename C::boundary_type(1));
-40039:   return r;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>
-40039: operator-(const C& n, const Linear_Form<C>& f) {
-40039:   Linear_Form<C> r(f);
-40039:   for (dimension_type i = f.size(); i-- > 0; ) {
-40039:     r[i].neg_assign(r[i]);
-40039:   }
-40039:   r[0] += n;
-40039:   return r;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>
-40039: operator*(const C& n, const Linear_Form<C>& f) {
-40039:   Linear_Form<C> r(f);
-40039:   for (dimension_type i = f.size(); i-- > 0; ) {
-40039:     r[i] *= n;
-40039:   }
-40039:   return r;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>&
-40039: operator+=(Linear_Form<C>& f1, const Linear_Form<C>& f2) {
-40039:   dimension_type f1_size = f1.size();
-40039:   dimension_type f2_size = f2.size();
-40039:   if (f1_size < f2_size) {
-40039:     f1.extend(f2_size);
-40039:   }
-40039:   for (dimension_type i = f2_size; i-- > 0; ) {
-40039:     f1[i] += f2[i];
-40039:   }
-40039:   return f1;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>&
-40039: operator+=(Linear_Form<C>& f, const Variable v) {
-40039:   const dimension_type v_space_dim = v.space_dimension();
-40039:   if (v_space_dim > Linear_Form<C>::max_space_dimension()) {
-40039:     throw std::length_error("Linear_Form<C>& "
-40039:                             "operator+=(e, v):\n"
-40039:                             "v exceeds the maximum allowed space dimension.");
-40039:   }
-40039:   if (v_space_dim > f.space_dimension()) {
-40039:     f.extend(v_space_dim+1);
-40039:   }
-40039:   f[v_space_dim] += C(typename C::boundary_type(1));
-40039:   return f;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>&
-40039: operator-=(Linear_Form<C>& f1, const Linear_Form<C>& f2) {
-40039:   dimension_type f1_size = f1.size();
-40039:   dimension_type f2_size = f2.size();
-40039:   if (f1_size < f2_size) {
-40039:     f1.extend(f2_size);
-40039:   }
-40039:   for (dimension_type i = f2_size; i-- > 0; ) {
-40039:     f1[i] -= f2[i];
-40039:   }
-40039:   return f1;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>&
-40039: operator-=(Linear_Form<C>& f, const Variable v) {
-40039:   const dimension_type v_space_dim = v.space_dimension();
-40039:   if (v_space_dim > Linear_Form<C>::max_space_dimension()) {
-40039:     throw std::length_error("Linear_Form<C>& "
-40039:                             "operator-=(e, v):\n"
-40039:                             "v exceeds the maximum allowed space dimension.");
-40039:   }
-40039:   if (v_space_dim > f.space_dimension()) {
-40039:     f.extend(v_space_dim+1);
-40039:   }
-40039:   f[v_space_dim] -= C(typename C::boundary_type(1));
-40039:   return f;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>&
-40039: operator*=(Linear_Form<C>& f, const C& n) {
-40039:   dimension_type f_size = f.size();
-40039:   for (dimension_type i = f_size; i-- > 0; ) {
-40039:     f[i] *= n;
-40039:   }
-40039:   return f;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: Linear_Form<C>&
-40039: operator/=(Linear_Form<C>& f, const C& n) {
-40039:   dimension_type f_size = f.size();
-40039:   for (dimension_type i = f_size; i-- > 0; ) {
-40039:     f[i] /= n;
-40039:   }
-40039:   return f;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: inline bool
-40039: operator==(const Linear_Form<C>& x, const Linear_Form<C>& y) {
-40039:   const dimension_type x_size = x.size();
-40039:   const dimension_type y_size = y.size();
-40039:   if (x_size >= y_size) {
-40039:     for (dimension_type i = y_size; i-- > 0; ) {
-40039:       if (x[i] != y[i]) {
-40039:         return false;
-40039:       }
-40039:     }
-40039:     for (dimension_type i = x_size; --i >= y_size; ) {
-40039:       if (x[i] != x.zero) {
-40039:         return false;
-40039:       }
-40039:     }
-40039:   }
-40039:   else {
-40039:     for (dimension_type i = x_size; i-- > 0; ) {
-40039:       if (x[i] != y[i]) {
-40039:         return false;
-40039:       }
-40039:     }
-40039:     for (dimension_type i = y_size; --i >= x_size; ) {
-40039:       if (y[i] != x.zero) {
-40039:         return false;
-40039:       }
-40039:     }
-40039: 
-40039:   }
-40039: 
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename C>
-40039: void
-40039: Linear_Form<C>::negate() {
-40039:   for (dimension_type i = vec.size(); i-- > 0; ) {
-40039:     vec[i].neg_assign(vec[i]);
-40039:   }
-40039:   return;
-40039: }
-40039: 
-40039: template <typename C>
-40039: inline memory_size_type
-40039: Linear_Form<C>::external_memory_in_bytes() const {
-40039:   memory_size_type n = 0;
-40039:   for (dimension_type i = size(); i-- > 0; ) {
-40039:     n += vec[i].external_memory_in_bytes();
-40039:   }
-40039:   n += vec.capacity()*sizeof(C);
-40039:   return n;
-40039: }
-40039: 
-40039: template <typename C>
-40039: bool
-40039: Linear_Form<C>::OK() const {
-40039:   for (dimension_type i = size(); i-- > 0; ) {
-40039:     if (!vec[i].OK()) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: void
-40039: Linear_Form<C>::relative_error(
-40039:                 const Floating_Point_Format analyzed_format,
-40039:                 Linear_Form& result) const {
-40039:   typedef typename C::boundary_type analyzer_format;
-40039: 
-40039: 
-40039:   unsigned int f_base;
-40039:   unsigned int f_mantissa_bits;
-40039:   switch (analyzed_format) {
-40039:     case IEEE754_HALF:
-40039:       f_base = float_ieee754_half::BASE;
-40039:       f_mantissa_bits = float_ieee754_half::MANTISSA_BITS;
-40039:       break;
-40039:     case IEEE754_SINGLE:
-40039:       f_base = float_ieee754_single::BASE;
-40039:       f_mantissa_bits = float_ieee754_single::MANTISSA_BITS;
-40039:       break;
-40039:     case IEEE754_DOUBLE:
-40039:       f_base = float_ieee754_double::BASE;
-40039:       f_mantissa_bits = float_ieee754_double::MANTISSA_BITS;
-40039:       break;
-40039:     case IBM_SINGLE:
-40039:       f_base = float_ibm_single::BASE;
-40039:       f_mantissa_bits = float_ibm_single::MANTISSA_BITS;
-40039:       break;
-40039:     case IEEE754_QUAD:
-40039:       f_base = float_ieee754_quad::BASE;
-40039:       f_mantissa_bits = float_ieee754_quad::MANTISSA_BITS;
-40039:       break;
-40039:     case INTEL_DOUBLE_EXTENDED:
-40039:       f_base = float_intel_double_extended::BASE;
-40039:       f_mantissa_bits = float_intel_double_extended::MANTISSA_BITS;
-40039:       break;
-40039:     default:
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       break;
-40039:   }
-40039: 
-40039:   C error_propagator;
-40039: 
-40039:   unsigned int u_power = msb_position(f_base) * f_mantissa_bits;
-40039:   int neg_power = -static_cast<int>(u_power);
-40039:   analyzer_format lb = static_cast<analyzer_format>(ldexp(1.0, neg_power));
-40039: 
-40039:   error_propagator.build(i_constraint(GREATER_OR_EQUAL, -lb),
-40039:                          i_constraint(LESS_OR_EQUAL, lb));
-40039: 
-40039: 
-40039:   const C* current_term = &inhomogeneous_term();
-40039:   
-40039: # 465 "../../src/Linear_Form_templates.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 465 "../../src/Linear_Form_templates.hh"
-40039:                                    ;
-40039: 
-40039:   C current_multiplier(std::max(std::abs(current_term->lower()),
-40039:                                 std::abs(current_term->upper())));
-40039:   Linear_Form current_result_term(current_multiplier);
-40039:   current_result_term *= error_propagator;
-40039:   result = Linear_Form(current_result_term);
-40039: 
-40039: 
-40039:   dimension_type dimension = space_dimension();
-40039:   for (dimension_type i = 0; i < dimension; ++i) {
-40039:     current_term = &coefficient(Variable(i));
-40039:     
-40039: # 477 "../../src/Linear_Form_templates.hh" 3 4
-40039:    (static_cast<void> (0))
-40039: # 477 "../../src/Linear_Form_templates.hh"
-40039:                                      ;
-40039:     current_multiplier = C(std::max(std::abs(current_term->lower()),
-40039:                                     std::abs(current_term->upper())));
-40039:     current_result_term = Linear_Form(Variable(i));
-40039:     current_result_term *= current_multiplier;
-40039:     current_result_term *= error_propagator;
-40039:     result += current_result_term;
-40039:   }
-40039: 
-40039:   return;
-40039: }
-40039: 
-40039: template <typename C>
-40039: template <typename Target>
-40039: bool
-40039: Linear_Form<C>::intervalize(const FP_Oracle<Target,C>& oracle,
-40039:                             C& result) const {
-40039:   result = C(inhomogeneous_term());
-40039:   dimension_type dimension = space_dimension();
-40039:   for (dimension_type i = 0; i < dimension; ++i) {
-40039:     C current_addend = coefficient(Variable(i));
-40039:     C curr_int;
-40039:     if (!oracle.get_interval(i, curr_int)) {
-40039:       return false;
-40039:     }
-40039:     current_addend *= curr_int;
-40039:     result += current_addend;
-40039:   }
-40039: 
-40039:   return true;
-40039: }
-40039: 
-40039: 
-40039: template <typename C>
-40039: std::ostream&
-40039: IO_Operators::operator<<(std::ostream& s, const Linear_Form<C>& f) {
-40039:   const dimension_type num_variables = f.space_dimension();
-40039:   bool first = true;
-40039:   for (dimension_type v = 0; v < num_variables; ++v) {
-40039:     const C& fv = f[v+1];
-40039:     if (fv != typename C::boundary_type(0)) {
-40039:       if (first) {
-40039:         if (fv == typename C::boundary_type(-1)) {
-40039:           s << "-";
-40039:         }
-40039:         else if (fv != typename C::boundary_type(1)) {
-40039:           s << fv << "*";
-40039:         }
-40039:         first = false;
-40039:       }
-40039:       else {
-40039:         if (fv == typename C::boundary_type(-1)) {
-40039:           s << " - ";
-40039:         }
-40039:         else {
-40039:           s << " + ";
-40039:           if (fv != typename C::boundary_type(1)) {
-40039:             s << fv << "*";
-40039:           }
-40039:         }
-40039:       }
-40039:       s << Variable(v);
-40039:     }
-40039:   }
-40039: 
-40039:   const C& it = f[0];
-40039:   if (it != 0) {
-40039:     if (!first) {
-40039:         s << " + ";
-40039:     }
-40039:     else {
-40039:       first = false;
-40039:     }
-40039:     s << it;
-40039:   }
-40039: 
-40039:   if (first) {
-40039: 
-40039:     s << Linear_Form<C>::zero;
-40039:   }
-40039:   return s;
-40039: }
-40039: 
-40039: template <typename C> void Linear_Form<C>::ascii_dump() const { ascii_dump(std::cerr); } template <typename C> void Linear_Form<C>::print() const { using IO_Operators::operator<<; std::cerr << *this; }
-40039: 
-40039: template <typename C>
-40039: C Linear_Form<C>::zero(typename C::boundary_type(0));
-40039: 
-40039: }
-40039: # 10 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/linearize.hh" 1
-40039: # 27 "../../src/linearize.hh"
-40039: # 1 "../../src/Concrete_Expression_defs.hh" 1
-40039: # 31 "../../src/Concrete_Expression_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: class Concrete_Expression_Type {
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static Concrete_Expression_Type
-40039:   bounded_integer(Bounded_Integer_Type_Width width,
-40039:                   Bounded_Integer_Type_Representation representation,
-40039:                   Bounded_Integer_Type_Overflow overflow);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static Concrete_Expression_Type
-40039:   floating_point(Floating_Point_Format format);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_bounded_integer() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_floating_point() const;
-40039: # 70 "../../src/Concrete_Expression_defs.hh"
-40039:   Bounded_Integer_Type_Width bounded_integer_type_width() const;
-40039: # 79 "../../src/Concrete_Expression_defs.hh"
-40039:   Bounded_Integer_Type_Representation
-40039:   bounded_integer_type_representation() const;
-40039: # 89 "../../src/Concrete_Expression_defs.hh"
-40039:   Bounded_Integer_Type_Overflow
-40039:   bounded_integer_type_overflow() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Floating_Point_Format floating_point_format() const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039: private:
-40039: 
-40039:   struct Implementation {
-40039:     bool bounded_integer:1;
-40039:     unsigned int bounded_integer_type_width:23;
-40039:     unsigned int bounded_integer_type_representation:2;
-40039:     unsigned int bounded_integer_type_overflow:2;
-40039:     unsigned int floating_point_format:4;
-40039:   };
-40039: 
-40039: 
-40039:   Concrete_Expression_Type(Implementation implementation);
-40039: 
-40039: 
-40039:   Implementation impl;
-40039: };
-40039: 
-40039: 
-40039: template <typename Target>
-40039: class Concrete_Expression_Common {
-40039: public:
-40039: 
-40039:   Concrete_Expression_Type type() const;
-40039: 
-40039: 
-40039:   Concrete_Expression_Kind kind() const;
-40039: 
-40039: 
-40039:   template <template <typename T> class Derived>
-40039:   bool is() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <template <typename T> class Derived>
-40039:   Derived<Target>* as();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <template <typename T> class Derived>
-40039:   const Derived<Target>* as() const;
-40039: 
-40039: };
-40039: 
-40039: 
-40039: template <typename Target>
-40039: class Binary_Operator_Common {
-40039: public:
-40039: 
-40039:   Concrete_Expression_BOP binary_operator() const;
-40039: 
-40039: 
-40039:   const Concrete_Expression<Target>* left_hand_side() const;
-40039: 
-40039: 
-40039:   const Concrete_Expression<Target>* right_hand_side() const;
-40039: };
-40039: 
-40039: 
-40039: template <typename Target>
-40039: class Unary_Operator_Common {
-40039: public:
-40039: 
-40039:   Concrete_Expression_UOP unary_operator() const;
-40039: 
-40039: 
-40039:   const Concrete_Expression<Target>* argument() const;
-40039: };
-40039: 
-40039: 
-40039: template <typename Target>
-40039: class Cast_Operator_Common {
-40039: 
-40039:   const Concrete_Expression<Target>* argument() const;
-40039: };
-40039: 
-40039: 
-40039: template <typename Target>
-40039: class Integer_Constant_Common {
-40039: };
-40039: 
-40039: 
-40039: template <typename Target>
-40039: class Floating_Point_Constant_Common {
-40039: };
-40039: 
-40039: 
-40039: template <typename Target>
-40039: class Approximable_Reference_Common {
-40039: };
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Concrete_Expression_inlines.hh" 1
-40039: # 27 "../../src/Concrete_Expression_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline
-40039: Concrete_Expression_Type
-40039: ::Concrete_Expression_Type(Implementation implementation)
-40039:   : impl(implementation) {
-40039: }
-40039: 
-40039: inline Concrete_Expression_Type
-40039: Concrete_Expression_Type
-40039: ::bounded_integer(const Bounded_Integer_Type_Width width,
-40039:                   const Bounded_Integer_Type_Representation representation,
-40039:                   const Bounded_Integer_Type_Overflow overflow) {
-40039:   Implementation impl;
-40039:   impl.bounded_integer = true;
-40039:   impl.bounded_integer_type_width = width;
-40039:   impl.bounded_integer_type_representation = representation;
-40039:   impl.bounded_integer_type_overflow = overflow;
-40039: 
-40039:   impl.floating_point_format = IEEE754_HALF;
-40039:   return Concrete_Expression_Type(impl);
-40039: }
-40039: 
-40039: inline Concrete_Expression_Type
-40039: Concrete_Expression_Type
-40039: ::floating_point(const Floating_Point_Format format) {
-40039:   Implementation impl;
-40039:   impl.bounded_integer = false;
-40039:   impl.floating_point_format = format;
-40039: 
-40039:   impl.bounded_integer_type_width = BITS_128;
-40039:   impl.bounded_integer_type_representation = SIGNED_2_COMPLEMENT;
-40039:   impl.bounded_integer_type_overflow = OVERFLOW_IMPOSSIBLE;
-40039:   return Concrete_Expression_Type(impl);
-40039: }
-40039: 
-40039: inline bool
-40039: Concrete_Expression_Type::is_bounded_integer() const {
-40039:   return impl.bounded_integer;
-40039: }
-40039: 
-40039: inline bool
-40039: Concrete_Expression_Type::is_floating_point() const {
-40039:   return !impl.bounded_integer;
-40039: }
-40039: 
-40039: inline Bounded_Integer_Type_Width
-40039: Concrete_Expression_Type::bounded_integer_type_width() const {
-40039:   const unsigned int u = impl.bounded_integer_type_width;
-40039:   return static_cast<Bounded_Integer_Type_Width>(u);
-40039: }
-40039: 
-40039: inline Bounded_Integer_Type_Representation
-40039: Concrete_Expression_Type::bounded_integer_type_representation() const {
-40039:   const unsigned int u = impl.bounded_integer_type_representation;
-40039:   return static_cast<Bounded_Integer_Type_Representation>(u);
-40039: }
-40039: 
-40039: inline Bounded_Integer_Type_Overflow
-40039: Concrete_Expression_Type::bounded_integer_type_overflow() const {
-40039:   const unsigned int u = impl.bounded_integer_type_overflow;
-40039:   return static_cast<Bounded_Integer_Type_Overflow>(u);
-40039: }
-40039: 
-40039: inline Floating_Point_Format
-40039: Concrete_Expression_Type::floating_point_format() const {
-40039:   const unsigned int u = impl.floating_point_format;
-40039:   return static_cast<Floating_Point_Format>(u);
-40039: }
-40039: 
-40039: template <typename Target>
-40039: template <template <typename T> class Derived>
-40039: inline bool
-40039: Concrete_Expression_Common<Target>::is() const {
-40039:   return static_cast<const Concrete_Expression<Target>*>(this)->kind() ==
-40039:          Derived<Target>::KIND;
-40039: }
-40039: 
-40039: template <typename Target>
-40039: template <template <typename T> class Derived>
-40039: inline Derived<Target>*
-40039: Concrete_Expression_Common<Target>::as() {
-40039:   ((void) 0);
-40039:   return static_cast<Derived<Target>*>(this);
-40039: }
-40039: 
-40039: template <typename Target>
-40039: template <template <typename T> class Derived>
-40039: inline const Derived<Target>*
-40039: Concrete_Expression_Common<Target>::as() const {
-40039:   ((void) 0);
-40039:   return static_cast<const Derived<Target>*>(this);
-40039: }
-40039: 
-40039: }
-40039: # 200 "../../src/Concrete_Expression_defs.hh" 2
-40039: # 28 "../../src/linearize.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: # 108 "../../src/linearize.hh"
-40039: template <typename Target, typename FP_Interval_Type>
-40039: static bool
-40039: add_linearize(const Binary_Operator<Target>& bop_expr,
-40039:               const FP_Oracle<Target,FP_Interval_Type>& oracle,
-40039:               const std::map<dimension_type, Linear_Form<FP_Interval_Type> >&
-40039:               lf_store,
-40039:               Linear_Form<FP_Interval_Type>& result) {
-40039:   ((void) 0);
-40039: 
-40039:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
-40039: 
-40039:   if (!linearize(*(bop_expr.left_hand_side()), oracle, lf_store, result)) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   Floating_Point_Format analyzed_format =
-40039:     bop_expr.type().floating_point_format();
-40039:   FP_Linear_Form rel_error;
-40039:   result.relative_error(analyzed_format, rel_error);
-40039:   result += rel_error;
-40039:   FP_Linear_Form linearized_second_operand;
-40039:   if (!linearize(*(bop_expr.right_hand_side()), oracle, lf_store,
-40039:                  linearized_second_operand)) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   result += linearized_second_operand;
-40039:   linearized_second_operand.relative_error(analyzed_format, rel_error);
-40039:   result += rel_error;
-40039:   FP_Interval_Type absolute_error =
-40039:                    compute_absolute_error<FP_Interval_Type>(analyzed_format);
-40039:   result += absolute_error;
-40039:   return !result.overflows();
-40039: }
-40039: # 222 "../../src/linearize.hh"
-40039: template <typename Target, typename FP_Interval_Type>
-40039: static bool
-40039: sub_linearize(const Binary_Operator<Target>& bop_expr,
-40039:               const FP_Oracle<Target,FP_Interval_Type>& oracle,
-40039:               const std::map<dimension_type, Linear_Form<FP_Interval_Type> >& lf_store,
-40039:               Linear_Form<FP_Interval_Type>& result) {
-40039:   ((void) 0);
-40039: 
-40039:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
-40039: 
-40039:   if (!linearize(*(bop_expr.left_hand_side()), oracle, lf_store, result)) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   Floating_Point_Format analyzed_format =
-40039:     bop_expr.type().floating_point_format();
-40039:   FP_Linear_Form rel_error;
-40039:   result.relative_error(analyzed_format, rel_error);
-40039:   result += rel_error;
-40039:   FP_Linear_Form linearized_second_operand;
-40039:   if (!linearize(*(bop_expr.right_hand_side()), oracle, lf_store,
-40039:                  linearized_second_operand)) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   result -= linearized_second_operand;
-40039:   linearized_second_operand.relative_error(analyzed_format, rel_error);
-40039:   result += rel_error;
-40039:   FP_Interval_Type absolute_error =
-40039:                    compute_absolute_error<FP_Interval_Type>(analyzed_format);
-40039:   result += absolute_error;
-40039:   return !result.overflows();
-40039: }
-40039: # 364 "../../src/linearize.hh"
-40039: template <typename Target, typename FP_Interval_Type>
-40039: static bool
-40039: mul_linearize(const Binary_Operator<Target>& bop_expr,
-40039:               const FP_Oracle<Target,FP_Interval_Type>& oracle,
-40039:               const std::map<dimension_type, Linear_Form<FP_Interval_Type> >& lf_store,
-40039:               Linear_Form<FP_Interval_Type>& result) {
-40039:   ((void) 0);
-40039: 
-40039:   typedef typename FP_Interval_Type::boundary_type analyzer_format;
-40039:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
-40039: # 388 "../../src/linearize.hh"
-40039:   bool intervalize_first;
-40039:   FP_Linear_Form linearized_first_operand;
-40039:   if (!linearize(*(bop_expr.left_hand_side()), oracle, lf_store,
-40039:                  linearized_first_operand)) {
-40039:     return false;
-40039:   }
-40039:   FP_Interval_Type intervalized_first_operand;
-40039:   if (!linearized_first_operand.intervalize(oracle,
-40039:                                             intervalized_first_operand)) {
-40039:     return false;
-40039:   }
-40039:   FP_Linear_Form linearized_second_operand;
-40039:   if (!linearize(*(bop_expr.right_hand_side()), oracle, lf_store,
-40039:                  linearized_second_operand)) {
-40039:     return false;
-40039:   }
-40039:   FP_Interval_Type intervalized_second_operand;
-40039:   if (!linearized_second_operand.intervalize(oracle,
-40039:                                              intervalized_second_operand)) {
-40039:     return false;
-40039:   }
-40039: 
-40039: 
-40039:   if (intervalized_first_operand.is_bounded()) {
-40039:     if (intervalized_second_operand.is_bounded()) {
-40039:       analyzer_format first_interval_size
-40039:         = intervalized_first_operand.upper()
-40039:         - intervalized_first_operand.lower();
-40039:       analyzer_format second_interval_size
-40039:         = intervalized_second_operand.upper()
-40039:         - intervalized_second_operand.lower();
-40039:       if (first_interval_size <= second_interval_size) {
-40039:         intervalize_first = true;
-40039:       }
-40039:       else {
-40039:         intervalize_first = false;
-40039:       }
-40039:     }
-40039:     else {
-40039:       intervalize_first = true;
-40039:     }
-40039:   }
-40039:   else {
-40039:     if (intervalized_second_operand.is_bounded()) {
-40039:       intervalize_first = false;
-40039:     }
-40039:     else {
-40039:       return false;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   Floating_Point_Format analyzed_format =
-40039:     bop_expr.type().floating_point_format();
-40039:   if (intervalize_first) {
-40039:     linearized_second_operand.relative_error(analyzed_format, result);
-40039:     linearized_second_operand *= intervalized_first_operand;
-40039:     result *= intervalized_first_operand;
-40039:     result += linearized_second_operand;
-40039:   }
-40039:   else {
-40039:     linearized_first_operand.relative_error(analyzed_format, result);
-40039:     linearized_first_operand *= intervalized_second_operand;
-40039:     result *= intervalized_second_operand;
-40039:     result += linearized_first_operand;
-40039:   }
-40039: 
-40039:   FP_Interval_Type absolute_error =
-40039:                    compute_absolute_error<FP_Interval_Type>(analyzed_format);
-40039:   result += absolute_error;
-40039:   return !result.overflows();
-40039: }
-40039: # 558 "../../src/linearize.hh"
-40039: template <typename Target, typename FP_Interval_Type>
-40039: static bool
-40039: div_linearize(const Binary_Operator<Target>& bop_expr,
-40039:               const FP_Oracle<Target,FP_Interval_Type>& oracle,
-40039:               const std::map<dimension_type, Linear_Form<FP_Interval_Type> >& lf_store,
-40039:               Linear_Form<FP_Interval_Type>& result) {
-40039:   ((void) 0);
-40039: 
-40039:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
-40039: 
-40039:   FP_Linear_Form linearized_second_operand;
-40039:   if (!linearize(*(bop_expr.right_hand_side()), oracle, lf_store,
-40039:                  linearized_second_operand)) {
-40039:     return false;
-40039:   }
-40039:   FP_Interval_Type intervalized_second_operand;
-40039:   if (!linearized_second_operand.intervalize(oracle,
-40039:                                              intervalized_second_operand)) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   if ((intervalized_second_operand.lower_is_boundary_infinity()
-40039:        || intervalized_second_operand.lower() <= 0) &&
-40039:       (intervalized_second_operand.upper_is_boundary_infinity()
-40039:        || intervalized_second_operand.upper() >= 0)) {
-40039:     return false;
-40039:   }
-40039:   if (!linearize(*(bop_expr.left_hand_side()), oracle, lf_store, result)) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   Floating_Point_Format analyzed_format =
-40039:     bop_expr.type().floating_point_format();
-40039:   FP_Linear_Form rel_error;
-40039:   result.relative_error(analyzed_format, rel_error);
-40039:   result /= intervalized_second_operand;
-40039:   rel_error /= intervalized_second_operand;
-40039:   result += rel_error;
-40039:   FP_Interval_Type absolute_error =
-40039:                    compute_absolute_error<FP_Interval_Type>(analyzed_format);
-40039:   result += absolute_error;
-40039:   return !result.overflows();
-40039: }
-40039: # 633 "../../src/linearize.hh"
-40039: template <typename Target, typename FP_Interval_Type>
-40039: static bool
-40039: cast_linearize(const Cast_Operator<Target>& cast_expr,
-40039:                const FP_Oracle<Target,FP_Interval_Type>& oracle,
-40039:                const std::map<dimension_type, Linear_Form<FP_Interval_Type> >& lf_store,
-40039:                Linear_Form<FP_Interval_Type>& result) {
-40039:   typedef typename FP_Interval_Type::boundary_type analyzer_format;
-40039:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
-40039: 
-40039:   Floating_Point_Format analyzed_format =
-40039:     cast_expr.type().floating_point_format();
-40039:   const Concrete_Expression<Target>* cast_arg = cast_expr.argument();
-40039:   if (cast_arg->type().is_floating_point()) {
-40039:     if (!linearize(*cast_arg, oracle, lf_store, result)) {
-40039:       return false;
-40039:     }
-40039:     if (!is_less_precise_than(analyzed_format,
-40039:                               cast_arg->type().floating_point_format())
-40039:         || result == FP_Linear_Form(FP_Interval_Type(0))
-40039:         || result == FP_Linear_Form(FP_Interval_Type(1))) {
-40039: # 661 "../../src/linearize.hh"
-40039:       return true;
-40039:     }
-40039:   }
-40039:   else {
-40039:     FP_Interval_Type expr_value;
-40039:     if (!oracle.get_integer_expr_value(*cast_arg, expr_value))
-40039:       return false;
-40039:     result = FP_Linear_Form(expr_value);
-40039:     if (is_less_precise_than(Float<analyzer_format>::Binary::floating_point_format, analyzed_format)
-40039:         || result == FP_Linear_Form(FP_Interval_Type(0))
-40039:         || result == FP_Linear_Form(FP_Interval_Type(1))) {
-40039: # 680 "../../src/linearize.hh"
-40039:       return true;
-40039:     }
-40039:   }
-40039: 
-40039:   FP_Linear_Form rel_error;
-40039:   result.relative_error(analyzed_format, rel_error);
-40039:   result += rel_error;
-40039:   FP_Interval_Type absolute_error =
-40039:                    compute_absolute_error<FP_Interval_Type>(analyzed_format);
-40039:   result += absolute_error;
-40039:   return !result.overflows();
-40039: }
-40039: # 727 "../../src/linearize.hh"
-40039: template <typename Target, typename FP_Interval_Type>
-40039: bool
-40039: linearize(const Concrete_Expression<Target>& expr,
-40039:           const FP_Oracle<Target,FP_Interval_Type>& oracle,
-40039:           const std::map<dimension_type, Linear_Form<FP_Interval_Type> >& lf_store,
-40039:           Linear_Form<FP_Interval_Type>& result) {
-40039:   typedef typename FP_Interval_Type::boundary_type analyzer_format;
-40039:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
-40039:   typedef std::map<dimension_type, FP_Linear_Form>
-40039:     FP_Linear_Form_Abstract_Store;
-40039: 
-40039:   ((void) 0);
-40039: 
-40039:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_742 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<analyzer_format>::is_exact)>) }
-40039: 
-40039:                                                                                          ;
-40039: 
-40039:   switch(expr.kind()) {
-40039:   case Integer_Constant<Target>::KIND:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     break;
-40039:   case Floating_Point_Constant<Target>::KIND:
-40039:   {
-40039:     const Floating_Point_Constant<Target>* fpc_expr =
-40039:       expr.template as<Floating_Point_Constant>();
-40039:     FP_Interval_Type constant_value;
-40039:     if (!oracle.get_fp_constant_value(*fpc_expr, constant_value)) {
-40039:       return false;
-40039:     }
-40039:     result = FP_Linear_Form(constant_value);
-40039:     return true;
-40039:   }
-40039:   case Unary_Operator<Target>::KIND:
-40039:   {
-40039:     const Unary_Operator<Target>* uop_expr =
-40039:       expr.template as<Unary_Operator>();
-40039:     switch (uop_expr->unary_operator()) {
-40039:     case Unary_Operator<Target>::UPLUS:
-40039:       return linearize(*(uop_expr->argument()), oracle, lf_store, result);
-40039:     case Unary_Operator<Target>::UMINUS:
-40039:       if (!linearize(*(uop_expr->argument()), oracle, lf_store, result)) {
-40039:         return false;
-40039:       }
-40039: 
-40039:       result.negate();
-40039:       return true;
-40039:     case Unary_Operator<Target>::BNOT:
-40039:       throw std::runtime_error("PPL internal error: unimplemented");
-40039:       break;
-40039:     default:
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       break;
-40039:     }
-40039:     break;
-40039:   }
-40039:   case Binary_Operator<Target>::KIND:
-40039:   {
-40039:     const Binary_Operator<Target>* bop_expr =
-40039:       expr.template as<Binary_Operator>();
-40039:     switch (bop_expr->binary_operator()) {
-40039:     case Binary_Operator<Target>::ADD:
-40039:       return add_linearize(*bop_expr, oracle, lf_store, result);
-40039:     case Binary_Operator<Target>::SUB:
-40039:       return sub_linearize(*bop_expr, oracle, lf_store, result);
-40039:     case Binary_Operator<Target>::MUL:
-40039:       return mul_linearize(*bop_expr, oracle, lf_store, result);
-40039:     case Binary_Operator<Target>::DIV:
-40039:       return div_linearize(*bop_expr, oracle, lf_store, result);
-40039:     case Binary_Operator<Target>::REM:
-40039:     case Binary_Operator<Target>::BAND:
-40039:     case Binary_Operator<Target>::BOR:
-40039:     case Binary_Operator<Target>::BXOR:
-40039:     case Binary_Operator<Target>::LSHIFT:
-40039:     case Binary_Operator<Target>::RSHIFT:
-40039: 
-40039:       return false;
-40039:     default:
-40039:       Parma_Polyhedra_Library::ppl_unreachable();
-40039:       return false;
-40039:     }
-40039:     break;
-40039:   }
-40039:   case Approximable_Reference<Target>::KIND:
-40039:   {
-40039:     const Approximable_Reference<Target>* ref_expr =
-40039:       expr.template as<Approximable_Reference>();
-40039:     std::set<dimension_type> associated_dimensions;
-40039:     if (!oracle.get_associated_dimensions(*ref_expr, associated_dimensions)
-40039:         || associated_dimensions.empty()) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       return false;
-40039:     }
-40039: 
-40039:     if (associated_dimensions.size() == 1) {
-40039: 
-40039: 
-40039: 
-40039:       dimension_type variable_index = *associated_dimensions.begin();
-40039:       ((void) 0);
-40039: 
-40039:       typename FP_Linear_Form_Abstract_Store::const_iterator
-40039:         variable_value = lf_store.find(variable_index);
-40039:       if (variable_value == lf_store.end()) {
-40039:         result = FP_Linear_Form(Variable(variable_index));
-40039:         return true;
-40039:       }
-40039: 
-40039:       result = FP_Linear_Form(variable_value->second);
-40039: 
-40039: 
-40039:       return !result.overflows();
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     ((void) 0);
-40039:     std::set<dimension_type>::const_iterator i
-40039:       = associated_dimensions.begin();
-40039:     std::set<dimension_type>::const_iterator i_end
-40039:       = associated_dimensions.end();
-40039:     FP_Interval_Type lub(EMPTY);
-40039:     for (; i != i_end; ++i) {
-40039:       FP_Interval_Type curr_int;
-40039:       ((void) 0);
-40039:       if (!oracle.get_interval(*i, curr_int)) {
-40039:         return false;
-40039:       }
-40039: 
-40039:       lub.join_assign(curr_int);
-40039:     }
-40039: 
-40039:     result = FP_Linear_Form(lub);
-40039:     return !result.overflows();
-40039:   }
-40039:   case Cast_Operator<Target>::KIND:
-40039:   {
-40039:     const Cast_Operator<Target>* cast_expr =
-40039:       expr.template as<Cast_Operator>();
-40039:     return cast_linearize(*cast_expr, oracle, lf_store, result);
-40039:   }
-40039:   default:
-40039:     Parma_Polyhedra_Library::ppl_unreachable();
-40039:     break;
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::ppl_unreachable();
-40039:   return false;
-40039: }
-40039: 
-40039: }
-40039: # 11 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/PIP_Tree_defs.hh" 1
-40039: # 27 "../../src/PIP_Tree_defs.hh"
-40039: # 1 "../../src/PIP_Tree_types.hh" 1
-40039: # 16 "../../src/PIP_Tree_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class PIP_Tree_Node;
-40039: class PIP_Solution_Node;
-40039: class PIP_Decision_Node;
-40039: 
-40039: typedef const PIP_Tree_Node* PIP_Tree;
-40039: 
-40039: }
-40039: # 28 "../../src/PIP_Tree_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "../../src/PIP_Problem_defs.hh" 1
-40039: # 40 "../../src/PIP_Problem_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: std::ostream&
-40039: operator<<(std::ostream& s, const PIP_Problem& pip);
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: void swap(PIP_Problem& x, PIP_Problem& y);
-40039: 
-40039: }
-40039: # 493 "../../src/PIP_Problem_defs.hh"
-40039: class Parma_Polyhedra_Library::PIP_Problem {
-40039: public:
-40039: # 509 "../../src/PIP_Problem_defs.hh"
-40039:   explicit PIP_Problem(dimension_type dim = 0);
-40039: # 538 "../../src/PIP_Problem_defs.hh"
-40039:   template <typename In>
-40039:   PIP_Problem(dimension_type dim, In first, In last,
-40039:               const Variables_Set& p_vars);
-40039: 
-40039: 
-40039:   PIP_Problem(const PIP_Problem& y);
-40039: 
-40039: 
-40039:   ~PIP_Problem();
-40039: 
-40039: 
-40039:   PIP_Problem& operator=(const PIP_Problem& y);
-40039: 
-40039: 
-40039:   static dimension_type max_space_dimension();
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const Variables_Set& parameter_space_dimensions() const;
-40039: 
-40039: private:
-40039: 
-40039:   typedef std::vector<Constraint> Constraint_Sequence;
-40039: 
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef Constraint_Sequence::const_iterator const_iterator;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const_iterator constraints_begin() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const_iterator constraints_end() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void clear();
-40039: # 614 "../../src/PIP_Problem_defs.hh"
-40039:   void add_space_dimensions_and_embed(dimension_type m_vars,
-40039:                                       dimension_type m_params);
-40039: # 625 "../../src/PIP_Problem_defs.hh"
-40039:   void add_to_parameter_space_dimensions(const Variables_Set& p_vars);
-40039: # 634 "../../src/PIP_Problem_defs.hh"
-40039:   void add_constraint(const Constraint& c);
-40039: # 643 "../../src/PIP_Problem_defs.hh"
-40039:   void add_constraints(const Constraint_System& cs);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_satisfiable() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   PIP_Problem_Status solve() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   PIP_Tree solution() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   PIP_Tree optimizing_solution() const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: # 687 "../../src/PIP_Problem_defs.hh"
-40039:   void print_solution(std::ostream& s, int indent = 0) const;
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   void m_swap(PIP_Problem& y);
-40039: 
-40039: 
-40039:   enum Control_Parameter_Name {
-40039: 
-40039:     CUTTING_STRATEGY,
-40039: 
-40039:     PIVOT_ROW_STRATEGY,
-40039: 
-40039: 
-40039: 
-40039:     CONTROL_PARAMETER_NAME_SIZE
-40039:   };
-40039: 
-40039: 
-40039:   enum Control_Parameter_Value {
-40039: 
-40039:     CUTTING_STRATEGY_FIRST,
-40039: 
-40039:     CUTTING_STRATEGY_DEEPEST,
-40039: 
-40039:     CUTTING_STRATEGY_ALL,
-40039: 
-40039: 
-40039:     PIVOT_ROW_STRATEGY_FIRST,
-40039: 
-40039:     PIVOT_ROW_STRATEGY_MAX_COLUMN,
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     CONTROL_PARAMETER_VALUE_SIZE
-40039:   };
-40039: 
-40039: 
-40039:   Control_Parameter_Value
-40039:   get_control_parameter(Control_Parameter_Name name) const;
-40039: 
-40039: 
-40039:   void set_control_parameter(Control_Parameter_Value value);
-40039: 
-40039: 
-40039:   void set_big_parameter_dimension(dimension_type big_dim);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type get_big_parameter_dimension() const;
-40039: 
-40039: private:
-40039: 
-40039:   void control_parameters_init();
-40039: 
-40039: 
-40039:   void control_parameters_copy(const PIP_Problem& y);
-40039: 
-40039: 
-40039:   dimension_type external_space_dim;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type internal_space_dim;
-40039: 
-40039: 
-40039:   enum Status {
-40039: 
-40039:     UNSATISFIABLE,
-40039: 
-40039:     OPTIMIZED,
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     PARTIALLY_SATISFIABLE
-40039:   };
-40039: 
-40039: 
-40039:   Status status;
-40039: 
-40039: 
-40039:   PIP_Tree_Node* current_solution;
-40039: 
-40039: 
-40039:   Constraint_Sequence input_cs;
-40039: 
-40039: 
-40039:   dimension_type first_pending_constraint;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Variables_Set parameters;
-40039: 
-40039: 
-40039:   typedef Sparse_Row Row;
-40039: # 815 "../../src/PIP_Problem_defs.hh"
-40039:   Matrix<Row> initial_context;
-40039: 
-40039: 
-40039:   Control_Parameter_Value
-40039:   control_parameters[CONTROL_PARAMETER_NAME_SIZE];
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type big_parameter_dimension;
-40039: 
-40039:   friend class PIP_Solution_Node;
-40039: };
-40039: 
-40039: # 1 "../../src/PIP_Problem_inlines.hh" 1
-40039: # 27 "../../src/PIP_Problem_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline dimension_type
-40039: PIP_Problem::space_dimension() const {
-40039:   return external_space_dim;
-40039: }
-40039: 
-40039: inline dimension_type
-40039: PIP_Problem::max_space_dimension() {
-40039:   return Constraint::max_space_dimension();
-40039: }
-40039: 
-40039: inline PIP_Problem::const_iterator
-40039: PIP_Problem::constraints_begin() const {
-40039:   return input_cs.begin();
-40039: }
-40039: 
-40039: inline PIP_Problem::const_iterator
-40039: PIP_Problem::constraints_end() const {
-40039:   return input_cs.end();
-40039: }
-40039: 
-40039: inline const Variables_Set&
-40039: PIP_Problem::parameter_space_dimensions() const {
-40039:   return parameters;
-40039: }
-40039: 
-40039: inline void
-40039: PIP_Problem::m_swap(PIP_Problem& y) {
-40039:   using std::swap;
-40039:   swap(external_space_dim, y.external_space_dim);
-40039:   swap(internal_space_dim, y.internal_space_dim);
-40039:   swap(status, y.status);
-40039:   swap(current_solution, y.current_solution);
-40039:   swap(input_cs, y.input_cs);
-40039:   swap(first_pending_constraint, y.first_pending_constraint);
-40039:   swap(parameters, y.parameters);
-40039:   swap(initial_context, y.initial_context);
-40039:   for (dimension_type i = CONTROL_PARAMETER_NAME_SIZE; i-- > 0; ) {
-40039:     swap(control_parameters[i], y.control_parameters[i]);
-40039:   }
-40039:   swap(big_parameter_dimension, y.big_parameter_dimension);
-40039: }
-40039: 
-40039: inline PIP_Problem&
-40039: PIP_Problem::operator=(const PIP_Problem& y) {
-40039:   PIP_Problem tmp(y);
-40039:   m_swap(tmp);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline PIP_Problem::Control_Parameter_Value
-40039: PIP_Problem::get_control_parameter(Control_Parameter_Name name) const {
-40039:   ((void) 0);
-40039:   return control_parameters[name];
-40039: }
-40039: 
-40039: inline dimension_type
-40039: PIP_Problem::get_big_parameter_dimension() const {
-40039:   return big_parameter_dimension;
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: swap(PIP_Problem& x, PIP_Problem& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 831 "../../src/PIP_Problem_defs.hh" 2
-40039: # 1 "../../src/PIP_Problem_templates.hh" 1
-40039: # 29 "../../src/PIP_Problem_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename In>
-40039: PIP_Problem::PIP_Problem(dimension_type dim,
-40039:                          In first, In last,
-40039:                          const Variables_Set& p_vars)
-40039:   : external_space_dim(dim),
-40039:     internal_space_dim(0),
-40039:     status(PARTIALLY_SATISFIABLE),
-40039:     current_solution(0),
-40039:     input_cs(),
-40039:     first_pending_constraint(0),
-40039:     parameters(p_vars),
-40039:     initial_context(),
-40039:     big_parameter_dimension(not_a_dimension()) {
-40039: 
-40039: 
-40039:   if (p_vars.space_dimension() > external_space_dim) {
-40039:     std::ostringstream s;
-40039:     s << "PPL::PIP_Problem::PIP_Problem(dim, first, last, p_vars):\n"
-40039:       << "dim == " << external_space_dim
-40039:       << " and p_vars.space_dimension() == "
-40039:       << p_vars.space_dimension()
-40039:       << " are dimension incompatible.";
-40039:     throw std::invalid_argument(s.str());
-40039:   }
-40039: 
-40039: 
-40039:   if (dim > max_space_dimension()) {
-40039:     throw std::length_error("PPL::PIP_Problem::"
-40039:                             "PIP_Problem(dim, first, last, p_vars):\n"
-40039:                             "dim exceeds the maximum allowed "
-40039:                             "space dimension.");
-40039:   }
-40039: 
-40039:   for (In i = first; i != last; ++i) {
-40039:     if (i->space_dimension() > dim) {
-40039:       std::ostringstream s;
-40039:       s << "PPL::PIP_Problem::"
-40039:         << "PIP_Problem(dim, first, last, p_vars):\n"
-40039:         << "range [first, last) contains a constraint having space "
-40039:         << "dimension == " << i->space_dimension()
-40039:         << " that exceeds this->space_dimension == " << dim << ".";
-40039:       throw std::invalid_argument(s.str());
-40039:     }
-40039:     input_cs.push_back(*i);
-40039:   }
-40039:   control_parameters_init();
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: }
-40039: # 832 "../../src/PIP_Problem_defs.hh" 2
-40039: # 36 "../../src/PIP_Tree_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: # 50 "../../src/PIP_Tree_defs.hh"
-40039: class PIP_Tree_Node {
-40039: protected:
-40039: 
-40039:   explicit PIP_Tree_Node(const PIP_Problem* owner);
-40039: 
-40039: 
-40039:   PIP_Tree_Node(const PIP_Tree_Node& y);
-40039: 
-40039: 
-40039:   const PIP_Problem* get_owner() const;
-40039: 
-40039: 
-40039:   virtual void set_owner(const PIP_Problem* owner) = 0;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual bool check_ownership(const PIP_Problem* owner) const = 0;
-40039: 
-40039: public:
-40039: 
-40039:   typedef Sparse_Row Row;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual PIP_Tree_Node* clone() const = 0;
-40039: 
-40039: 
-40039:   virtual ~PIP_Tree_Node();
-40039: 
-40039: 
-40039:   virtual bool OK() const = 0;
-40039: 
-40039: 
-40039:   virtual const PIP_Solution_Node* as_solution() const = 0;
-40039: 
-40039: 
-40039:   virtual const PIP_Decision_Node* as_decision() const = 0;
-40039: # 99 "../../src/PIP_Tree_defs.hh"
-40039:   const Constraint_System& constraints() const;
-40039: 
-40039:   class Artificial_Parameter;
-40039: 
-40039: 
-40039:   typedef std::vector<Artificial_Parameter> Artificial_Parameter_Sequence;
-40039: 
-40039: 
-40039:   Artificial_Parameter_Sequence::const_iterator art_parameter_begin() const;
-40039: 
-40039: 
-40039:   Artificial_Parameter_Sequence::const_iterator art_parameter_end() const;
-40039: 
-40039: 
-40039:   dimension_type art_parameter_count() const;
-40039: # 123 "../../src/PIP_Tree_defs.hh"
-40039:   void print(std::ostream& s, int indent = 0) const;
-40039: 
-40039: 
-40039:   void ascii_dump(std::ostream& s) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   virtual memory_size_type total_memory_in_bytes() const = 0;
-40039: 
-40039:   virtual memory_size_type external_memory_in_bytes() const = 0;
-40039: 
-40039: protected:
-40039: 
-40039:   typedef std::vector<Constraint> Constraint_Sequence;
-40039: 
-40039: 
-40039: 
-40039:   friend class PIP_Problem;
-40039:   friend class PIP_Decision_Node;
-40039:   friend class PIP_Solution_Node;
-40039: 
-40039: 
-40039:   const PIP_Problem* owner_;
-40039: 
-40039: 
-40039:   const PIP_Decision_Node* parent_;
-40039: 
-40039: 
-40039:   Constraint_System constraints_;
-40039: 
-40039: 
-40039:   Artificial_Parameter_Sequence artificial_parameters;
-40039: 
-40039: 
-40039:   const PIP_Decision_Node* parent() const;
-40039: 
-40039: 
-40039:   void set_parent(const PIP_Decision_Node* p);
-40039: # 188 "../../src/PIP_Tree_defs.hh"
-40039:   virtual void update_tableau(const PIP_Problem& pip,
-40039:                               dimension_type external_space_dim,
-40039:                               dimension_type first_pending_constraint,
-40039:                               const Constraint_Sequence& input_cs,
-40039:                               const Variables_Set& parameters) = 0;
-40039: # 219 "../../src/PIP_Tree_defs.hh"
-40039:   virtual PIP_Tree_Node* solve(const PIP_Problem& pip,
-40039:                                bool check_feasible_context,
-40039:                                const Matrix<Row>& context,
-40039:                                const Variables_Set& params,
-40039:                                dimension_type space_dim,
-40039:                                int indent_level) = 0;
-40039: 
-40039: 
-40039:   void add_constraint(const Row& row, const Variables_Set& parameters);
-40039: 
-40039: 
-40039:   void parent_merge();
-40039: # 249 "../../src/PIP_Tree_defs.hh"
-40039:   virtual void print_tree(std::ostream& s,
-40039:                           int indent,
-40039:                           const std::vector<bool>& pip_dim_is_param,
-40039:                           dimension_type first_art_dim) const = 0;
-40039: 
-40039: 
-40039:   static void
-40039:   indent_and_print(std::ostream& s, int indent, const char* str);
-40039: # 266 "../../src/PIP_Tree_defs.hh"
-40039:   static bool compatibility_check(Matrix<Row>& s);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static bool compatibility_check(const Matrix<Row>& context, const Row& row);
-40039: 
-40039: };
-40039: # 285 "../../src/PIP_Tree_defs.hh"
-40039: class PIP_Tree_Node::Artificial_Parameter
-40039:   : public Linear_Expression {
-40039: public:
-40039: 
-40039:   Artificial_Parameter();
-40039: # 308 "../../src/PIP_Tree_defs.hh"
-40039:   Artificial_Parameter(const Linear_Expression& expr,
-40039:                        Coefficient_traits::const_reference d);
-40039: 
-40039: 
-40039:   Artificial_Parameter(const Artificial_Parameter& y);
-40039: 
-40039: 
-40039:   Coefficient_traits::const_reference denominator() const;
-40039: 
-40039: 
-40039:   void m_swap(Artificial_Parameter& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool operator==(const Artificial_Parameter& y) const;
-40039: 
-40039:   bool operator!=(const Artificial_Parameter& y) const;
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039: private:
-40039: 
-40039:   Coefficient denom;
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: void
-40039: swap(PIP_Tree_Node::Artificial_Parameter& x,
-40039:      PIP_Tree_Node::Artificial_Parameter& y);
-40039: 
-40039: 
-40039: 
-40039: class PIP_Solution_Node : public PIP_Tree_Node {
-40039: public:
-40039: 
-40039: 
-40039:   explicit PIP_Solution_Node(const PIP_Problem* owner);
-40039: 
-40039: 
-40039:   virtual PIP_Tree_Node* clone() const;
-40039: 
-40039: 
-40039:   virtual ~PIP_Solution_Node();
-40039: 
-40039: 
-40039:   virtual bool OK() const;
-40039: 
-40039: 
-40039:   virtual const PIP_Solution_Node* as_solution() const;
-40039: 
-40039: 
-40039:   virtual const PIP_Decision_Node* as_decision() const;
-40039: # 394 "../../src/PIP_Tree_defs.hh"
-40039:   const Linear_Expression& parametric_values(Variable var) const;
-40039: 
-40039: 
-40039:   void ascii_dump(std::ostream& os) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& is);
-40039: 
-40039: 
-40039:   virtual memory_size_type total_memory_in_bytes() const;
-40039: 
-40039:   virtual memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: private:
-40039: 
-40039:   struct Tableau {
-40039: 
-40039:     Matrix<Row> s;
-40039: 
-40039:     Matrix<Row> t;
-40039: 
-40039:     Coefficient denom;
-40039: 
-40039: 
-40039:     Tableau();
-40039: 
-40039:     Tableau(const Tableau& y);
-40039: 
-40039:     ~Tableau();
-40039: 
-40039: 
-40039:     bool is_integer() const;
-40039: 
-40039: 
-40039:     void scale(Coefficient_traits::const_reference ratio);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     void normalize();
-40039: # 490 "../../src/PIP_Tree_defs.hh"
-40039:     bool is_better_pivot(const std::vector<dimension_type>& mapping,
-40039:                          const std::vector<bool>& basis,
-40039:                          const dimension_type row_0,
-40039:                          const dimension_type col_0,
-40039:                          const dimension_type row_1,
-40039:                          const dimension_type col_1) const;
-40039: 
-40039: 
-40039:     Coefficient_traits::const_reference denominator() const;
-40039: 
-40039: 
-40039:     void ascii_dump(std::ostream& os) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     bool ascii_load(std::istream& is);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039:     bool OK() const;
-40039:   };
-40039: 
-40039: 
-40039:   Tableau tableau;
-40039: # 543 "../../src/PIP_Tree_defs.hh"
-40039:   std::vector<bool> basis;
-40039: # 555 "../../src/PIP_Tree_defs.hh"
-40039:   std::vector<dimension_type> mapping;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   std::vector<dimension_type> var_row;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   std::vector<dimension_type> var_column;
-40039: # 584 "../../src/PIP_Tree_defs.hh"
-40039:   dimension_type special_equality_row;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type big_dimension;
-40039: 
-40039: 
-40039:   enum Row_Sign {
-40039: 
-40039:     UNKNOWN,
-40039: 
-40039:     ZERO,
-40039: 
-40039:     POSITIVE,
-40039: 
-40039:     NEGATIVE,
-40039: 
-40039:     MIXED
-40039:   };
-40039: 
-40039: 
-40039:   std::vector<Row_Sign> sign;
-40039: 
-40039: 
-40039:   std::vector<Linear_Expression> solution;
-40039: 
-40039: 
-40039:   bool solution_valid;
-40039: 
-40039: 
-40039:   static Row_Sign row_sign(const Row& x,
-40039:                            dimension_type big_dimension);
-40039: 
-40039: protected:
-40039: 
-40039:   PIP_Solution_Node(const PIP_Solution_Node& y);
-40039: 
-40039: 
-40039:   struct No_Constraints {};
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   PIP_Solution_Node(const PIP_Solution_Node& y, No_Constraints);
-40039: 
-40039: 
-40039:   friend bool PIP_Problem::ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   virtual void set_owner(const PIP_Problem* owner);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual bool check_ownership(const PIP_Problem* owner) const;
-40039: 
-40039: 
-40039:   virtual void update_tableau(const PIP_Problem& pip,
-40039:                               dimension_type external_space_dim,
-40039:                               dimension_type first_pending_constraint,
-40039:                               const Constraint_Sequence& input_cs,
-40039:                               const Variables_Set& parameters);
-40039: # 660 "../../src/PIP_Tree_defs.hh"
-40039:   void update_solution(const std::vector<bool>& pip_dim_is_param) const;
-40039: 
-40039: 
-40039:   void update_solution() const;
-40039: 
-40039: 
-40039:   virtual PIP_Tree_Node* solve(const PIP_Problem& pip,
-40039:                                bool check_feasible_context,
-40039:                                const Matrix<Row>& context,
-40039:                                const Variables_Set& params,
-40039:                                dimension_type space_dim,
-40039:                                int indent_level);
-40039: # 694 "../../src/PIP_Tree_defs.hh"
-40039:   void generate_cut(dimension_type index, Variables_Set& parameters,
-40039:                     Matrix<Row>& context, dimension_type& space_dimension,
-40039:                     int indent_level);
-40039: 
-40039: 
-40039:   virtual void print_tree(std::ostream& s, int indent,
-40039:                           const std::vector<bool>& pip_dim_is_param,
-40039:                           dimension_type first_art_dim) const;
-40039: 
-40039: };
-40039: 
-40039: 
-40039: 
-40039: class PIP_Decision_Node : public PIP_Tree_Node {
-40039: public:
-40039: 
-40039:   virtual PIP_Tree_Node* clone() const;
-40039: 
-40039: 
-40039:   virtual ~PIP_Decision_Node();
-40039: 
-40039: 
-40039:   virtual bool OK() const;
-40039: 
-40039: 
-40039:   virtual const PIP_Decision_Node* as_decision() const;
-40039: 
-40039: 
-40039:   virtual const PIP_Solution_Node* as_solution() const;
-40039: 
-40039: 
-40039:   const PIP_Tree_Node* child_node(bool b) const;
-40039: 
-40039: 
-40039:   PIP_Tree_Node* child_node(bool b);
-40039: 
-40039: 
-40039:   void ascii_dump(std::ostream& s) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   virtual memory_size_type total_memory_in_bytes() const;
-40039: 
-40039:   virtual memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: private:
-40039: 
-40039:   friend class PIP_Solution_Node;
-40039: 
-40039: 
-40039:   friend bool PIP_Problem::ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   PIP_Tree_Node* false_child;
-40039: 
-40039: 
-40039:   PIP_Tree_Node* true_child;
-40039: # 780 "../../src/PIP_Tree_defs.hh"
-40039:   explicit PIP_Decision_Node(const PIP_Problem* owner,
-40039:                              PIP_Tree_Node* fcp,
-40039:                              PIP_Tree_Node* tcp);
-40039: 
-40039: 
-40039:   virtual void set_owner(const PIP_Problem* owner);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual bool check_ownership(const PIP_Problem* owner) const;
-40039: 
-40039: protected:
-40039: 
-40039:   PIP_Decision_Node(const PIP_Decision_Node& y);
-40039: 
-40039: 
-40039:   virtual void update_tableau(const PIP_Problem& pip,
-40039:                               dimension_type external_space_dim,
-40039:                               dimension_type first_pending_constraint,
-40039:                               const Constraint_Sequence& input_cs,
-40039:                               const Variables_Set& parameters);
-40039: 
-40039: 
-40039:   virtual PIP_Tree_Node* solve(const PIP_Problem& pip,
-40039:                                bool check_feasible_context,
-40039:                                const Matrix<Row>& context,
-40039:                                const Variables_Set& params,
-40039:                                dimension_type space_dim,
-40039:                                int indent_level);
-40039: 
-40039: 
-40039:   virtual void print_tree(std::ostream& s, int indent,
-40039:                           const std::vector<bool>& pip_dim_is_param,
-40039:                           dimension_type first_art_dim) const;
-40039: 
-40039: };
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: std::ostream& operator<<(std::ostream& os, const PIP_Tree_Node& x);
-40039: 
-40039: 
-40039: 
-40039: std::ostream& operator<<(std::ostream& os,
-40039:                          const PIP_Tree_Node::Artificial_Parameter& x);
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/PIP_Tree_inlines.hh" 1
-40039: # 27 "../../src/PIP_Tree_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline
-40039: PIP_Solution_Node::Tableau::Tableau()
-40039:   : s(), t(), denom(1) {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: PIP_Solution_Node::Tableau::Tableau(const Tableau& y)
-40039:   : s(y.s), t(y.t), denom(y.denom) {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: PIP_Solution_Node::Tableau::~Tableau() {
-40039: }
-40039: 
-40039: inline bool
-40039: PIP_Solution_Node::Tableau::is_integer() const {
-40039:   return denom == 1;
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: PIP_Solution_Node::Tableau::denominator() const {
-40039:   return denom;
-40039: }
-40039: 
-40039: inline void
-40039: PIP_Tree_Node::set_parent(const PIP_Decision_Node* p) {
-40039:   parent_ = p;
-40039: }
-40039: 
-40039: inline const PIP_Decision_Node*
-40039: PIP_Tree_Node::parent() const {
-40039:   return parent_;
-40039: }
-40039: 
-40039: inline const PIP_Problem*
-40039: PIP_Tree_Node::get_owner() const {
-40039:   return owner_;
-40039: }
-40039: 
-40039: inline const Constraint_System&
-40039: PIP_Tree_Node::constraints() const {
-40039:   return constraints_;
-40039: }
-40039: 
-40039: inline PIP_Tree_Node::Artificial_Parameter_Sequence::const_iterator
-40039: PIP_Tree_Node::art_parameter_begin() const {
-40039:   return artificial_parameters.begin();
-40039: }
-40039: 
-40039: inline PIP_Tree_Node::Artificial_Parameter_Sequence::const_iterator
-40039: PIP_Tree_Node::art_parameter_end() const {
-40039:   return artificial_parameters.end();
-40039: }
-40039: 
-40039: inline dimension_type
-40039: PIP_Tree_Node::art_parameter_count() const {
-40039:   return artificial_parameters.size();
-40039: }
-40039: 
-40039: inline
-40039: const PIP_Tree_Node*
-40039: PIP_Decision_Node::child_node(bool b) const {
-40039:   return b ? true_child : false_child;
-40039: }
-40039: 
-40039: inline
-40039: PIP_Tree_Node*
-40039: PIP_Decision_Node::child_node(bool b) {
-40039:   return b ? true_child : false_child;
-40039: }
-40039: 
-40039: inline
-40039: PIP_Tree_Node::Artificial_Parameter::Artificial_Parameter()
-40039:   : Linear_Expression(), denom(1) {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: PIP_Tree_Node::Artificial_Parameter
-40039: ::Artificial_Parameter(const Artificial_Parameter& y)
-40039:   : Linear_Expression(y), denom(y.denom) {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline Coefficient_traits::const_reference
-40039: PIP_Tree_Node::Artificial_Parameter::denominator() const {
-40039:   return denom;
-40039: }
-40039: 
-40039: inline void
-40039: PIP_Tree_Node::Artificial_Parameter::m_swap(Artificial_Parameter& y) {
-40039:   Linear_Expression::m_swap(y);
-40039:   using std::swap;
-40039:   swap(denom, y.denom);
-40039: }
-40039: 
-40039: 
-40039: inline void
-40039: swap(PIP_Tree_Node::Artificial_Parameter& x,
-40039:      PIP_Tree_Node::Artificial_Parameter& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 835 "../../src/PIP_Tree_defs.hh" 2
-40039: # 12 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/BHRZ03_Certificate_defs.hh" 1
-40039: # 42 "../../src/BHRZ03_Certificate_defs.hh"
-40039: class Parma_Polyhedra_Library::BHRZ03_Certificate {
-40039: public:
-40039: 
-40039:   BHRZ03_Certificate();
-40039: 
-40039: 
-40039:   BHRZ03_Certificate(const Polyhedron& ph);
-40039: 
-40039: 
-40039:   BHRZ03_Certificate(const BHRZ03_Certificate& y);
-40039: 
-40039: 
-40039:   ~BHRZ03_Certificate();
-40039: # 66 "../../src/BHRZ03_Certificate_defs.hh"
-40039:   int compare(const BHRZ03_Certificate& y) const;
-40039: 
-40039: 
-40039:   int compare(const Polyhedron& ph) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_stabilizing(const Polyhedron& ph) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   struct Compare {
-40039: 
-40039:     bool operator()(const BHRZ03_Certificate& x,
-40039:                     const BHRZ03_Certificate& y) const;
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039: private:
-40039: 
-40039:   dimension_type affine_dim;
-40039: 
-40039:   dimension_type lin_space_dim;
-40039: 
-40039:   dimension_type num_constraints;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type num_points;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   std::vector<dimension_type> num_rays_null_coord;
-40039: };
-40039: 
-40039: # 1 "../../src/BHRZ03_Certificate_inlines.hh" 1
-40039: # 29 "../../src/BHRZ03_Certificate_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline
-40039: BHRZ03_Certificate::BHRZ03_Certificate()
-40039:   : affine_dim(0), lin_space_dim(0), num_constraints(0), num_points(1),
-40039:     num_rays_null_coord() {
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: BHRZ03_Certificate::BHRZ03_Certificate(const BHRZ03_Certificate& y)
-40039:   : affine_dim(y.affine_dim), lin_space_dim(y.lin_space_dim),
-40039:     num_constraints(y.num_constraints), num_points(y.num_points),
-40039:     num_rays_null_coord(y.num_rays_null_coord) {
-40039: }
-40039: 
-40039: inline
-40039: BHRZ03_Certificate::~BHRZ03_Certificate() {
-40039: }
-40039: 
-40039: inline bool
-40039: BHRZ03_Certificate::is_stabilizing(const Polyhedron& ph) const {
-40039:   return compare(ph) == 1;
-40039: }
-40039: 
-40039: inline bool
-40039: BHRZ03_Certificate::Compare::operator()(const BHRZ03_Certificate& x,
-40039:                                         const BHRZ03_Certificate& y) const {
-40039: 
-40039: 
-40039:   return x.compare(y) == 1;
-40039: }
-40039: 
-40039: }
-40039: # 116 "../../src/BHRZ03_Certificate_defs.hh" 2
-40039: # 13 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/H79_Certificate_defs.hh" 1
-40039: # 40 "../../src/H79_Certificate_defs.hh"
-40039: class Parma_Polyhedra_Library::H79_Certificate {
-40039: public:
-40039: 
-40039:   H79_Certificate();
-40039: 
-40039: 
-40039:   template <typename PH>
-40039:   H79_Certificate(const PH& ph);
-40039: 
-40039: 
-40039:   H79_Certificate(const Polyhedron& ph);
-40039: 
-40039: 
-40039:   H79_Certificate(const H79_Certificate& y);
-40039: 
-40039: 
-40039:   ~H79_Certificate();
-40039: # 68 "../../src/H79_Certificate_defs.hh"
-40039:   int compare(const H79_Certificate& y) const;
-40039: 
-40039: 
-40039:   template <typename PH>
-40039:   int compare(const PH& ph) const;
-40039: 
-40039: 
-40039:   int compare(const Polyhedron& ph) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   struct Compare {
-40039: 
-40039:     bool operator()(const H79_Certificate& x,
-40039:                     const H79_Certificate& y) const;
-40039:   };
-40039: 
-40039: private:
-40039: 
-40039:   dimension_type affine_dim;
-40039: 
-40039:   dimension_type num_constraints;
-40039: };
-40039: 
-40039: # 1 "../../src/H79_Certificate_inlines.hh" 1
-40039: # 29 "../../src/H79_Certificate_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline
-40039: H79_Certificate::H79_Certificate()
-40039:   : affine_dim(0), num_constraints(0) {
-40039: 
-40039: }
-40039: 
-40039: inline
-40039: H79_Certificate::H79_Certificate(const H79_Certificate& y)
-40039:   : affine_dim(y.affine_dim), num_constraints(y.num_constraints) {
-40039: }
-40039: 
-40039: inline
-40039: H79_Certificate::~H79_Certificate() {
-40039: }
-40039: 
-40039: inline bool
-40039: H79_Certificate::Compare::operator()(const H79_Certificate& x,
-40039:                                      const H79_Certificate& y) const {
-40039: 
-40039: 
-40039:   return x.compare(y) == 1;
-40039: }
-40039: 
-40039: template <typename PH>
-40039: inline
-40039: H79_Certificate::H79_Certificate(const PH& ph)
-40039:   : affine_dim(0), num_constraints(0) {
-40039:   H79_Certificate cert(Polyhedron(NECESSARILY_CLOSED, ph.constraints()));
-40039:   affine_dim = cert.affine_dim;
-40039:   num_constraints = cert.num_constraints;
-40039: }
-40039: 
-40039: template <typename PH>
-40039: inline int
-40039: H79_Certificate::compare(const PH& ph) const {
-40039:   return this->compare(Polyhedron(NECESSARILY_CLOSED, ph.constraints()));
-40039: }
-40039: 
-40039: }
-40039: # 96 "../../src/H79_Certificate_defs.hh" 2
-40039: # 14 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/Grid_Certificate_defs.hh" 1
-40039: # 43 "../../src/Grid_Certificate_defs.hh"
-40039: class Parma_Polyhedra_Library::Grid_Certificate {
-40039: public:
-40039: 
-40039:   Grid_Certificate();
-40039: 
-40039: 
-40039:   Grid_Certificate(const Grid& gr);
-40039: 
-40039: 
-40039:   Grid_Certificate(const Grid_Certificate& y);
-40039: 
-40039: 
-40039:   ~Grid_Certificate();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   int compare(const Grid_Certificate& y) const;
-40039: 
-40039: 
-40039:   int compare(const Grid& gr) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_stabilizing(const Grid& gr) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   struct Compare {
-40039: 
-40039:     bool operator()(const Grid_Certificate& x,
-40039:                     const Grid_Certificate& y) const;
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039: private:
-40039: 
-40039: 
-40039:   dimension_type num_equalities;
-40039: 
-40039: 
-40039:   dimension_type num_proper_congruences;
-40039: };
-40039: 
-40039: # 1 "../../src/Grid_Certificate_inlines.hh" 1
-40039: # 29 "../../src/Grid_Certificate_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline
-40039: Grid_Certificate::Grid_Certificate()
-40039:   : num_equalities(0), num_proper_congruences(0) {
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: inline
-40039: Grid_Certificate::Grid_Certificate(const Grid_Certificate& y)
-40039:   : num_equalities(y.num_equalities),
-40039:     num_proper_congruences(y.num_proper_congruences) {
-40039: }
-40039: 
-40039: inline
-40039: Grid_Certificate::~Grid_Certificate() {
-40039: }
-40039: 
-40039: inline bool
-40039: Grid_Certificate::is_stabilizing(const Grid& gr) const {
-40039:   return compare(gr) == 1;
-40039: }
-40039: 
-40039: inline bool
-40039: Grid_Certificate::Compare::operator()(const Grid_Certificate& x,
-40039:                                       const Grid_Certificate& y) const {
-40039: 
-40039: 
-40039:   return x.compare(y) == 1;
-40039: }
-40039: 
-40039: }
-40039: # 102 "../../src/Grid_Certificate_defs.hh" 2
-40039: # 15 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/Partial_Function_defs.hh" 1
-40039: # 27 "../../src/Partial_Function_defs.hh"
-40039: # 1 "../../src/Partial_Function_types.hh" 1
-40039: # 16 "../../src/Partial_Function_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Partial_Function;
-40039: 
-40039: }
-40039: # 28 "../../src/Partial_Function_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Partial_Function {
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Partial_Function();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool has_empty_codomain() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type max_in_codomain() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool maps(dimension_type i, dimension_type& j) const;
-40039: 
-40039:   void print(std::ostream& s) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void insert(dimension_type i, dimension_type j);
-40039: 
-40039: private:
-40039:   std::vector<dimension_type> vec;
-40039:   dimension_type max;
-40039: 
-40039: 
-40039: 
-40039: };
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Partial_Function_inlines.hh" 1
-40039: # 30 "../../src/Partial_Function_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline
-40039: Partial_Function::Partial_Function()
-40039:   : max(0) {
-40039: }
-40039: 
-40039: inline bool
-40039: Partial_Function::has_empty_codomain() const {
-40039:   ((void) 0);
-40039:   return vec.empty();
-40039: }
-40039: 
-40039: inline dimension_type
-40039: Partial_Function::max_in_codomain() const {
-40039:   if (has_empty_codomain()) {
-40039:     throw std::runtime_error("Partial_Function::max_in_codomain() called"
-40039:                              " when has_empty_codomain()");
-40039:   }
-40039:   ((void) 0)
-40039:                                           ;
-40039:   return max;
-40039: }
-40039: 
-40039: inline void
-40039: Partial_Function::insert(dimension_type i, dimension_type j) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const dimension_type sz = vec.size();
-40039:   if (i >= sz) {
-40039:     vec.insert(vec.end(), i - sz + 1, not_a_dimension());
-40039:   }
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   vec[i] = j;
-40039: 
-40039: 
-40039:   if (j > max) {
-40039:     max = j;
-40039:   }
-40039:   ((void) 0)
-40039:                                           ;
-40039: }
-40039: 
-40039: inline bool
-40039: Partial_Function::maps(dimension_type i, dimension_type& j) const {
-40039:   if (i >= vec.size()) {
-40039:     return false;
-40039:   }
-40039:   const dimension_type vec_i = vec[i];
-40039:   if (vec_i == not_a_dimension()) {
-40039:     return false;
-40039:   }
-40039:   j = vec_i;
-40039:   return true;
-40039: }
-40039: 
-40039: }
-40039: # 86 "../../src/Partial_Function_defs.hh" 2
-40039: # 16 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/Widening_Function_defs.hh" 1
-40039: # 27 "../../src/Widening_Function_defs.hh"
-40039: # 1 "../../src/Widening_Function_types.hh" 1
-40039: # 16 "../../src/Widening_Function_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename PSET>
-40039: class Widening_Function;
-40039: 
-40039: template <typename PSET, typename CSYS>
-40039: class Limited_Widening_Function;
-40039: 
-40039: }
-40039: # 28 "../../src/Widening_Function_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename PSET>
-40039: class Parma_Polyhedra_Library::Widening_Function {
-40039: public:
-40039: 
-40039:   typedef void (PSET::* Widening_Method)(const PSET&, unsigned*);
-40039: 
-40039: 
-40039:   explicit
-40039:   Widening_Function(Widening_Method wm);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void operator()(PSET& x, const PSET& y, unsigned* tp = 0) const;
-40039: 
-40039: private:
-40039: 
-40039:   Widening_Method w_method;
-40039: };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename PSET, typename CSYS>
-40039: class Parma_Polyhedra_Library::Limited_Widening_Function {
-40039: public:
-40039: 
-40039:   typedef void (PSET::* Limited_Widening_Method)(const PSET&,
-40039:                                                  const CSYS&,
-40039:                                                  unsigned*);
-40039: # 77 "../../src/Widening_Function_defs.hh"
-40039:   Limited_Widening_Function(Limited_Widening_Method lwm,
-40039:                             const CSYS& cs);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void operator()(PSET& x, const PSET& y, unsigned* tp = 0) const;
-40039: 
-40039: private:
-40039: 
-40039:   Limited_Widening_Method lw_method;
-40039: 
-40039:   const CSYS& limiting_cs;
-40039: };
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: # 104 "../../src/Widening_Function_defs.hh"
-40039: template <typename PSET>
-40039: Widening_Function<PSET>
-40039: widen_fun_ref(void (PSET::* wm)(const PSET&, unsigned*));
-40039: # 118 "../../src/Widening_Function_defs.hh"
-40039: template <typename PSET, typename CSYS>
-40039: Limited_Widening_Function<PSET, CSYS>
-40039: widen_fun_ref(void (PSET::* lwm)(const PSET&, const CSYS&, unsigned*),
-40039:               const CSYS& cs);
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Widening_Function_inlines.hh" 1
-40039: # 29 "../../src/Widening_Function_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename PSET>
-40039: Widening_Function<PSET>::Widening_Function(Widening_Method wm)
-40039:   : w_method(wm) {
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline void
-40039: Widening_Function<PSET>::
-40039: operator()(PSET& x, const PSET& y, unsigned* tp) const {
-40039:   (x.*w_method)(y, tp);
-40039: }
-40039: 
-40039: template <typename PSET, typename CSYS>
-40039: Limited_Widening_Function<PSET, CSYS>::
-40039: Limited_Widening_Function(Limited_Widening_Method lwm,
-40039:                           const CSYS& cs)
-40039:   : lw_method(lwm), limiting_cs(cs) {
-40039: }
-40039: 
-40039: template <typename PSET, typename CSYS>
-40039: inline void
-40039: Limited_Widening_Function<PSET, CSYS>::
-40039: operator()(PSET& x, const PSET& y, unsigned* tp) const {
-40039:   (x.*lw_method)(y, limiting_cs, tp);
-40039: }
-40039: 
-40039: 
-40039: template <typename PSET>
-40039: inline Widening_Function<PSET>
-40039: widen_fun_ref(void (PSET::* wm)(const PSET&, unsigned*)) {
-40039:   return Widening_Function<PSET>(wm);
-40039: }
-40039: 
-40039: 
-40039: template <typename PSET, typename CSYS>
-40039: inline Limited_Widening_Function<PSET, CSYS>
-40039: widen_fun_ref(void (PSET::* lwm)(const PSET&, const CSYS&, unsigned*),
-40039:               const CSYS& cs) {
-40039:   return Limited_Widening_Function<PSET, CSYS>(lwm, cs);
-40039: }
-40039: 
-40039: }
-40039: # 126 "../../src/Widening_Function_defs.hh" 2
-40039: # 17 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/max_space_dimension.hh" 1
-40039: # 29 "../../src/max_space_dimension.hh"
-40039: # 1 "../../src/NNC_Polyhedron_defs.hh" 1
-40039: # 46 "../../src/NNC_Polyhedron_defs.hh"
-40039: class Parma_Polyhedra_Library::NNC_Polyhedron : public Polyhedron {
-40039: public:
-40039: # 62 "../../src/NNC_Polyhedron_defs.hh"
-40039:   explicit NNC_Polyhedron(dimension_type num_dimensions = 0,
-40039:                           Degenerate_Element kind = UNIVERSE);
-40039: # 72 "../../src/NNC_Polyhedron_defs.hh"
-40039:   explicit NNC_Polyhedron(const Constraint_System& cs);
-40039: # 87 "../../src/NNC_Polyhedron_defs.hh"
-40039:   NNC_Polyhedron(Constraint_System& cs, Recycle_Input dummy);
-40039: # 99 "../../src/NNC_Polyhedron_defs.hh"
-40039:   explicit NNC_Polyhedron(const Generator_System& gs);
-40039: # 117 "../../src/NNC_Polyhedron_defs.hh"
-40039:   NNC_Polyhedron(Generator_System& gs, Recycle_Input dummy);
-40039: # 128 "../../src/NNC_Polyhedron_defs.hh"
-40039:   explicit NNC_Polyhedron(const Congruence_System& cgs);
-40039: # 144 "../../src/NNC_Polyhedron_defs.hh"
-40039:   NNC_Polyhedron(Congruence_System& cgs, Recycle_Input dummy);
-40039: # 154 "../../src/NNC_Polyhedron_defs.hh"
-40039:   explicit NNC_Polyhedron(const C_Polyhedron& y,
-40039:                           Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 173 "../../src/NNC_Polyhedron_defs.hh"
-40039:   template <typename Interval>
-40039:   explicit NNC_Polyhedron(const Box<Interval>& box,
-40039:                           Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 189 "../../src/NNC_Polyhedron_defs.hh"
-40039:   explicit NNC_Polyhedron(const Grid& grid,
-40039:                           Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 204 "../../src/NNC_Polyhedron_defs.hh"
-40039:   template <typename U>
-40039:   explicit NNC_Polyhedron(const BD_Shape<U>& bd,
-40039:                           Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 220 "../../src/NNC_Polyhedron_defs.hh"
-40039:   template <typename U>
-40039:   explicit NNC_Polyhedron(const Octagonal_Shape<U>& os,
-40039:                           Complexity_Class complexity = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039:   NNC_Polyhedron(const NNC_Polyhedron& y,
-40039:                  Complexity_Class complexity = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   NNC_Polyhedron& operator=(const NNC_Polyhedron& y);
-40039: 
-40039: 
-40039:   NNC_Polyhedron& operator=(const C_Polyhedron& y);
-40039: 
-40039: 
-40039:   ~NNC_Polyhedron();
-40039: # 248 "../../src/NNC_Polyhedron_defs.hh"
-40039:   bool poly_hull_assign_if_exact(const NNC_Polyhedron& y);
-40039: 
-40039: 
-40039:   bool upper_bound_assign_if_exact(const NNC_Polyhedron& y);
-40039: # 262 "../../src/NNC_Polyhedron_defs.hh"
-40039:   void positive_time_elapse_assign(const Polyhedron& y);
-40039: };
-40039: 
-40039: # 1 "../../src/NNC_Polyhedron_inlines.hh" 1
-40039: # 29 "../../src/NNC_Polyhedron_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: inline
-40039: NNC_Polyhedron::~NNC_Polyhedron() {
-40039: }
-40039: 
-40039: inline
-40039: NNC_Polyhedron::NNC_Polyhedron(dimension_type num_dimensions,
-40039:                                Degenerate_Element kind)
-40039:   : Polyhedron(NOT_NECESSARILY_CLOSED,
-40039:                check_space_dimension_overflow(num_dimensions,
-40039:                                               NOT_NECESSARILY_CLOSED,
-40039:                                               "NNC_Polyhedron(n, k)",
-40039:                                               "n exceeds the maximum "
-40039:                                               "allowed space dimension"),
-40039:                kind) {
-40039: }
-40039: 
-40039: inline
-40039: NNC_Polyhedron::NNC_Polyhedron(const Constraint_System& cs)
-40039:   : Polyhedron(NOT_NECESSARILY_CLOSED,
-40039:                check_obj_space_dimension_overflow(cs, NOT_NECESSARILY_CLOSED,
-40039:                                                   "NNC_Polyhedron(cs)",
-40039:                                                   "the space dimension of cs "
-40039:                                                   "exceeds the maximum allowed "
-40039:                                                   "space dimension")) {
-40039: }
-40039: 
-40039: inline
-40039: NNC_Polyhedron::NNC_Polyhedron(Constraint_System& cs, Recycle_Input)
-40039:   : Polyhedron(NOT_NECESSARILY_CLOSED,
-40039:                check_obj_space_dimension_overflow(cs, NOT_NECESSARILY_CLOSED,
-40039:                                                   "NNC_Polyhedron(cs, recycle)",
-40039:                                                   "the space dimension of cs "
-40039:                                                   "exceeds the maximum allowed "
-40039:                                                   "space dimension"),
-40039:                Recycle_Input()) {
-40039: }
-40039: 
-40039: inline
-40039: NNC_Polyhedron::NNC_Polyhedron(const Generator_System& gs)
-40039:   : Polyhedron(NOT_NECESSARILY_CLOSED,
-40039:                check_obj_space_dimension_overflow(gs, NOT_NECESSARILY_CLOSED,
-40039:                                                   "NNC_Polyhedron(gs)",
-40039:                                                   "the space dimension of gs "
-40039:                                                   "exceeds the maximum allowed "
-40039:                                                   "space dimension")) {
-40039: }
-40039: 
-40039: inline
-40039: NNC_Polyhedron::NNC_Polyhedron(Generator_System& gs, Recycle_Input)
-40039:   : Polyhedron(NOT_NECESSARILY_CLOSED,
-40039:                check_obj_space_dimension_overflow(gs, NOT_NECESSARILY_CLOSED,
-40039:                                                   "NNC_Polyhedron(gs, recycle)",
-40039:                                                   "the space dimension of gs "
-40039:                                                   "exceeds the maximum allowed "
-40039:                                                   "space dimension"),
-40039:                Recycle_Input()) {
-40039: }
-40039: 
-40039: template <typename Interval>
-40039: inline
-40039: NNC_Polyhedron::NNC_Polyhedron(const Box<Interval>& box, Complexity_Class)
-40039:   : Polyhedron(NOT_NECESSARILY_CLOSED,
-40039:                check_obj_space_dimension_overflow(box, NOT_NECESSARILY_CLOSED,
-40039:                                                   "NNC_Polyhedron(box)",
-40039:                                                   "the space dimension of box "
-40039:                                                   "exceeds the maximum allowed "
-40039:                                                   "space dimension")) {
-40039: }
-40039: 
-40039: template <typename U>
-40039: inline
-40039: NNC_Polyhedron::NNC_Polyhedron(const BD_Shape<U>& bd, Complexity_Class)
-40039:   : Polyhedron(NOT_NECESSARILY_CLOSED,
-40039:                check_space_dimension_overflow(bd.space_dimension(),
-40039:                                               NOT_NECESSARILY_CLOSED,
-40039:                                               "NNC_Polyhedron(bd)",
-40039:                                               "the space dimension of bd "
-40039:                                               "exceeds the maximum allowed "
-40039:                                               "space dimension"),
-40039:                UNIVERSE) {
-40039:   add_constraints(bd.constraints());
-40039: }
-40039: 
-40039: template <typename U>
-40039: inline
-40039: NNC_Polyhedron::NNC_Polyhedron(const Octagonal_Shape<U>& os, Complexity_Class)
-40039:   : Polyhedron(NOT_NECESSARILY_CLOSED,
-40039:                check_space_dimension_overflow(os.space_dimension(),
-40039:                                               NOT_NECESSARILY_CLOSED,
-40039:                                               "NNC_Polyhedron(os)",
-40039:                                               "the space dimension of os "
-40039:                                               "exceeds the maximum allowed "
-40039:                                               "space dimension"),
-40039:                UNIVERSE) {
-40039:   add_constraints(os.constraints());
-40039: }
-40039: 
-40039: inline
-40039: NNC_Polyhedron::NNC_Polyhedron(const NNC_Polyhedron& y, Complexity_Class)
-40039:   : Polyhedron(y) {
-40039: }
-40039: 
-40039: inline NNC_Polyhedron&
-40039: NNC_Polyhedron::operator=(const NNC_Polyhedron& y) {
-40039:   Polyhedron::operator=(y);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline NNC_Polyhedron&
-40039: NNC_Polyhedron::operator=(const C_Polyhedron& y) {
-40039:   NNC_Polyhedron nnc_y(y);
-40039:   m_swap(nnc_y);
-40039:   return *this;
-40039: }
-40039: 
-40039: inline bool
-40039: NNC_Polyhedron::upper_bound_assign_if_exact(const NNC_Polyhedron& y) {
-40039:   return poly_hull_assign_if_exact(y);
-40039: }
-40039: 
-40039: inline void
-40039: NNC_Polyhedron::positive_time_elapse_assign(const Polyhedron& y) {
-40039:   Polyhedron::positive_time_elapse_assign_impl(y);
-40039: }
-40039: 
-40039: }
-40039: # 266 "../../src/NNC_Polyhedron_defs.hh" 2
-40039: # 30 "../../src/max_space_dimension.hh" 2
-40039: 
-40039: # 1 "../../src/Rational_Box.hh" 1
-40039: # 30 "../../src/Rational_Box.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef Box<Rational_Interval> Rational_Box;
-40039: 
-40039: }
-40039: # 32 "../../src/max_space_dimension.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: inline dimension_type
-40039: max_space_dimension() {
-40039: 
-40039: 
-40039:   static bool computed = false;
-40039:   static dimension_type d = not_a_dimension();
-40039:   if (!computed) {
-40039:     d = Variable::max_space_dimension();
-40039:     d = std::min(d, C_Polyhedron::max_space_dimension());
-40039:     d = std::min(d, NNC_Polyhedron::max_space_dimension());
-40039:     d = std::min(d, Grid::max_space_dimension());
-40039: 
-40039:     d = std::min(d, Rational_Box::max_space_dimension());
-40039:     d = std::min(d, BD_Shape<int8_t>::max_space_dimension());
-40039:     d = std::min(d, BD_Shape<int16_t>::max_space_dimension());
-40039:     d = std::min(d, BD_Shape<int32_t>::max_space_dimension());
-40039:     d = std::min(d, BD_Shape<int64_t>::max_space_dimension());
-40039:     d = std::min(d, BD_Shape<float>::max_space_dimension());
-40039:     d = std::min(d, BD_Shape<double>::max_space_dimension());
-40039:     d = std::min(d, BD_Shape<long double>::max_space_dimension());
-40039:     d = std::min(d, BD_Shape<mpz_class>::max_space_dimension());
-40039:     d = std::min(d, BD_Shape<mpq_class>::max_space_dimension());
-40039:     d = std::min(d, Octagonal_Shape<int8_t>::max_space_dimension());
-40039:     d = std::min(d, Octagonal_Shape<int16_t>::max_space_dimension());
-40039:     d = std::min(d, Octagonal_Shape<int32_t>::max_space_dimension());
-40039:     d = std::min(d, Octagonal_Shape<int64_t>::max_space_dimension());
-40039:     d = std::min(d, Octagonal_Shape<float>::max_space_dimension());
-40039:     d = std::min(d, Octagonal_Shape<double>::max_space_dimension());
-40039:     d = std::min(d, Octagonal_Shape<long double>::max_space_dimension());
-40039:     d = std::min(d, Octagonal_Shape<mpz_class>::max_space_dimension());
-40039:     d = std::min(d, Octagonal_Shape<mpq_class>::max_space_dimension());
-40039:     computed = true;
-40039:   }
-40039:   return d;
-40039: }
-40039: 
-40039: }
-40039: # 18 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/algorithms.hh" 1
-40039: # 28 "../../src/algorithms.hh"
-40039: # 1 "../../src/Pointset_Powerset_defs.hh" 1
-40039: # 27 "../../src/Pointset_Powerset_defs.hh"
-40039: # 1 "../../src/Pointset_Powerset_types.hh" 1
-40039: # 16 "../../src/Pointset_Powerset_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename PSET>
-40039: class Pointset_Powerset;
-40039: 
-40039: }
-40039: # 28 "../../src/Pointset_Powerset_defs.hh" 2
-40039: # 38 "../../src/Pointset_Powerset_defs.hh"
-40039: # 1 "../../src/Partially_Reduced_Product_defs.hh" 1
-40039: # 50 "../../src/Partially_Reduced_Product_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: std::ostream&
-40039: operator<<(std::ostream& s, const Partially_Reduced_Product<D1, D2, R>& dp);
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: void swap(Partially_Reduced_Product<D1, D2, R>& x,
-40039:           Partially_Reduced_Product<D1, D2, R>& y);
-40039: # 79 "../../src/Partially_Reduced_Product_defs.hh"
-40039: template <typename D1, typename D2, typename R>
-40039: bool operator==(const Partially_Reduced_Product<D1, D2, R>& x,
-40039:                 const Partially_Reduced_Product<D1, D2, R>& y);
-40039: # 91 "../../src/Partially_Reduced_Product_defs.hh"
-40039: template <typename D1, typename D2, typename R>
-40039: bool operator!=(const Partially_Reduced_Product<D1, D2, R>& x,
-40039:                 const Partially_Reduced_Product<D1, D2, R>& y);
-40039: 
-40039: }
-40039: # 106 "../../src/Partially_Reduced_Product_defs.hh"
-40039: template <typename D1, typename D2>
-40039: class Parma_Polyhedra_Library::Smash_Reduction {
-40039: public:
-40039: 
-40039:   Smash_Reduction();
-40039: # 125 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void product_reduce(D1& d1, D2& d2);
-40039: 
-40039: 
-40039:   ~Smash_Reduction();
-40039: };
-40039: # 140 "../../src/Partially_Reduced_Product_defs.hh"
-40039: template <typename D1, typename D2>
-40039: class Parma_Polyhedra_Library::Constraints_Reduction {
-40039: public:
-40039: 
-40039:   Constraints_Reduction();
-40039: # 168 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void product_reduce(D1& d1, D2& d2);
-40039: 
-40039: 
-40039:   ~Constraints_Reduction();
-40039: };
-40039: # 198 "../../src/Partially_Reduced_Product_defs.hh"
-40039: template <typename D1, typename D2>
-40039: class Parma_Polyhedra_Library::Congruences_Reduction {
-40039: public:
-40039: 
-40039:   Congruences_Reduction();
-40039: # 225 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void product_reduce(D1& d1, D2& d2);
-40039: 
-40039: 
-40039:   ~Congruences_Reduction();
-40039: };
-40039: # 248 "../../src/Partially_Reduced_Product_defs.hh"
-40039: template <typename D1, typename D2>
-40039: class Parma_Polyhedra_Library::Shape_Preserving_Reduction {
-40039: public:
-40039: 
-40039:   Shape_Preserving_Reduction();
-40039: # 275 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void product_reduce(D1& d1, D2& d2);
-40039: 
-40039: 
-40039:   ~Shape_Preserving_Reduction();
-40039: };
-40039: # 288 "../../src/Partially_Reduced_Product_defs.hh"
-40039: template <typename D1, typename D2>
-40039: class Parma_Polyhedra_Library::No_Reduction {
-40039: public:
-40039: 
-40039:   No_Reduction();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void product_reduce(D1& d1, D2& d2);
-40039: 
-40039: 
-40039:   ~No_Reduction();
-40039: };
-40039: # 417 "../../src/Partially_Reduced_Product_defs.hh"
-40039: template <typename D1, typename D2, typename R>
-40039: class Parma_Polyhedra_Library::Partially_Reduced_Product {
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static dimension_type max_space_dimension();
-40039: # 438 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   explicit Partially_Reduced_Product(dimension_type num_dimensions = 0,
-40039:                                      Degenerate_Element kind = UNIVERSE);
-40039: # 452 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   explicit Partially_Reduced_Product(const Congruence_System& cgs);
-40039: # 466 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   explicit Partially_Reduced_Product(Congruence_System& cgs);
-40039: # 479 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   explicit Partially_Reduced_Product(const Constraint_System& cs);
-40039: # 492 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   explicit Partially_Reduced_Product(Constraint_System& cs);
-40039: # 512 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   explicit
-40039:   Partially_Reduced_Product(const C_Polyhedron& ph,
-40039:                             Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 534 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   explicit
-40039:   Partially_Reduced_Product(const NNC_Polyhedron& ph,
-40039:                             Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 553 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   explicit
-40039:   Partially_Reduced_Product(const Grid& gr,
-40039:                             Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 572 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   template <typename Interval>
-40039:   Partially_Reduced_Product(const Box<Interval>& box,
-40039:                             Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 591 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   template <typename U>
-40039:   Partially_Reduced_Product(const BD_Shape<U>& bd,
-40039:                             Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 610 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   template <typename U>
-40039:   Partially_Reduced_Product(const Octagonal_Shape<U>& os,
-40039:                             Complexity_Class complexity = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039:   Partially_Reduced_Product(const Partially_Reduced_Product& y,
-40039:                             Complexity_Class complexity = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename E1, typename E2, typename S>
-40039:   explicit
-40039:   Partially_Reduced_Product(const Partially_Reduced_Product<E1, E2, S>& y,
-40039:                             Complexity_Class complexity = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Partially_Reduced_Product& operator=(const Partially_Reduced_Product& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type affine_dimension() const;
-40039: 
-40039: 
-40039:   const D1& domain1() const;
-40039: 
-40039: 
-40039:   const D2& domain2() const;
-40039: 
-40039: 
-40039:   Constraint_System constraints() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Constraint_System minimized_constraints() const;
-40039: 
-40039: 
-40039:   Congruence_System congruences() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Congruence_System minimized_congruences() const;
-40039: # 691 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   Poly_Con_Relation relation_with(const Constraint& c) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Poly_Con_Relation relation_with(const Congruence& cg) const;
-40039: # 712 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   Poly_Gen_Relation relation_with(const Generator& g) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_empty() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_universe() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_topologically_closed() const;
-40039: # 739 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   bool is_disjoint_from(const Partially_Reduced_Product& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_discrete() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_bounded() const;
-40039: # 760 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   bool constrains(Variable var) const;
-40039: # 769 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   bool bounds_from_above(const Linear_Expression& expr) const;
-40039: # 778 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   bool bounds_from_below(const Linear_Expression& expr) const;
-40039: # 804 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   bool maximize(const Linear_Expression& expr,
-40039:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum) const;
-40039: # 835 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   bool maximize(const Linear_Expression& expr,
-40039:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum,
-40039:                 Generator& g) const;
-40039: # 863 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   bool minimize(const Linear_Expression& expr,
-40039:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum) const;
-40039: # 894 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   bool minimize(const Linear_Expression& expr,
-40039:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum,
-40039:                 Generator& g) const;
-40039: # 905 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   bool contains(const Partially_Reduced_Product& y) const;
-40039: # 914 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   bool strictly_contains(const Partially_Reduced_Product& y) const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: # 929 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void add_constraint(const Constraint& c);
-40039: # 940 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void refine_with_constraint(const Constraint& c);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void add_congruence(const Congruence& cg);
-40039: # 959 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void refine_with_congruence(const Congruence& cg);
-40039: # 969 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void add_congruences(const Congruence_System& cgs);
-40039: # 980 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void refine_with_congruences(const Congruence_System& cgs);
-40039: # 994 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void add_recycled_congruences(Congruence_System& cgs);
-40039: # 1004 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void add_constraints(const Constraint_System& cs);
-40039: # 1015 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void refine_with_constraints(const Constraint_System& cs);
-40039: # 1029 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void add_recycled_constraints(Constraint_System& cs);
-40039: # 1041 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void unconstrain(Variable var);
-40039: # 1055 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void unconstrain(const Variables_Set& vars);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void intersection_assign(const Partially_Reduced_Product& y);
-40039: # 1072 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void upper_bound_assign(const Partially_Reduced_Product& y);
-40039: # 1083 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   bool upper_bound_assign_if_exact(const Partially_Reduced_Product& y);
-40039: # 1092 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void difference_assign(const Partially_Reduced_Product& y);
-40039: # 1116 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void affine_image(Variable var,
-40039:                     const Linear_Expression& expr,
-40039:                     Coefficient_traits::const_reference denominator
-40039:                     = Coefficient_one());
-40039: # 1141 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void affine_preimage(Variable var,
-40039:                        const Linear_Expression& expr,
-40039:                        Coefficient_traits::const_reference denominator
-40039:                          = Coefficient_one());
-40039: # 1173 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void generalized_affine_image(Variable var,
-40039:                                 Relation_Symbol relsym,
-40039:                                 const Linear_Expression& expr,
-40039:                                 Coefficient_traits::const_reference denominator
-40039:                                 = Coefficient_one());
-40039: # 1206 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void
-40039:   generalized_affine_preimage(Variable var,
-40039:                               Relation_Symbol relsym,
-40039:                               const Linear_Expression& expr,
-40039:                               Coefficient_traits::const_reference denominator
-40039:                               = Coefficient_one());
-40039: # 1234 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void generalized_affine_image(const Linear_Expression& lhs,
-40039:                                 Relation_Symbol relsym,
-40039:                                 const Linear_Expression& rhs);
-40039: # 1259 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void generalized_affine_preimage(const Linear_Expression& lhs,
-40039:                                    Relation_Symbol relsym,
-40039:                                    const Linear_Expression& rhs);
-40039: # 1289 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void bounded_affine_image(Variable var,
-40039:                             const Linear_Expression& lb_expr,
-40039:                             const Linear_Expression& ub_expr,
-40039:                             Coefficient_traits::const_reference denominator
-40039:                             = Coefficient_one());
-40039: # 1321 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void bounded_affine_preimage(Variable var,
-40039:                                const Linear_Expression& lb_expr,
-40039:                                const Linear_Expression& ub_expr,
-40039:                                Coefficient_traits::const_reference denominator
-40039:                                = Coefficient_one());
-40039: # 1335 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void time_elapse_assign(const Partially_Reduced_Product& y);
-40039: 
-40039: 
-40039:   void topological_closure_assign();
-40039: # 1364 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void widening_assign(const Partially_Reduced_Product& y,
-40039:                        unsigned* tp = 
-40039: # 1365 "../../src/Partially_Reduced_Product_defs.hh" 3 4
-40039:                                      __null
-40039: # 1365 "../../src/Partially_Reduced_Product_defs.hh"
-40039:                                          );
-40039: # 1378 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void drop_some_non_integer_points(Complexity_Class complexity
-40039:                                     = ANY_COMPLEXITY);
-40039: # 1396 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void drop_some_non_integer_points(const Variables_Set& vars,
-40039:                                     Complexity_Class complexity
-40039:                                     = ANY_COMPLEXITY);
-40039: # 1416 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void add_space_dimensions_and_embed(dimension_type m);
-40039: # 1429 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void add_space_dimensions_and_project(dimension_type m);
-40039: # 1441 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void concatenate_assign(const Partially_Reduced_Product& y);
-40039: # 1453 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void remove_space_dimensions(const Variables_Set& vars);
-40039: # 1463 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void remove_higher_space_dimensions(dimension_type new_dimension);
-40039: # 1513 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   template <typename Partial_Function>
-40039:   void map_space_dimensions(const Partial_Function& pfunc);
-40039: # 1539 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void expand_space_dimension(Variable var, dimension_type m);
-40039: # 1565 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   void fold_space_dimensions(const Variables_Set& vars, Variable dest);
-40039: 
-40039: 
-40039: 
-40039:   friend bool operator==<>(const Partially_Reduced_Product<D1, D2, R>& x,
-40039:                            const Partially_Reduced_Product<D1, D2, R>& y);
-40039: 
-40039:   friend std::ostream&
-40039:   Parma_Polyhedra_Library::IO_Operators::
-40039:   operator<<<>(std::ostream& s, const Partially_Reduced_Product<D1, D2, R>& dp);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   ~Partially_Reduced_Product();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void m_swap(Partially_Reduced_Product& y);
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   int32_t hash_code() const;
-40039: # 1619 "../../src/Partially_Reduced_Product_defs.hh"
-40039:   bool reduce() const;
-40039: 
-40039: protected:
-40039: 
-40039:   typedef D1 Domain1;
-40039: 
-40039: 
-40039:   typedef D2 Domain2;
-40039: 
-40039: 
-40039:   D1 d1;
-40039: 
-40039: 
-40039:   D2 d2;
-40039: 
-40039: protected:
-40039: 
-40039:   void clear_reduced_flag() const;
-40039: 
-40039: 
-40039:   void set_reduced_flag() const;
-40039: 
-40039: 
-40039:   bool is_reduced() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool reduced;
-40039: 
-40039: private:
-40039:   void throw_space_dimension_overflow(const char* method,
-40039:                                       const char* reason);
-40039: };
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: # 1665 "../../src/Partially_Reduced_Product_defs.hh"
-40039: template <typename D1, typename D2>
-40039: class Domain_Product {
-40039: public:
-40039:   typedef Partially_Reduced_Product<D1, D2, No_Reduction<D1, D2> >
-40039:   Direct_Product;
-40039: 
-40039:   typedef Partially_Reduced_Product<D1, D2, Smash_Reduction<D1, D2> >
-40039:   Smash_Product;
-40039: 
-40039:   typedef Partially_Reduced_Product<D1, D2, Constraints_Reduction<D1, D2> >
-40039:   Constraints_Product;
-40039: 
-40039:   typedef Partially_Reduced_Product<D1, D2, Congruences_Reduction<D1, D2> >
-40039:   Congruences_Product;
-40039: 
-40039:   typedef Partially_Reduced_Product<D1, D2, Shape_Preserving_Reduction<D1, D2> >
-40039:   Shape_Preserving_Product;
-40039: };
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Partially_Reduced_Product_inlines.hh" 1
-40039: # 33 "../../src/Partially_Reduced_Product_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline dimension_type
-40039: Partially_Reduced_Product<D1, D2, R>::max_space_dimension() {
-40039:   return (D1::max_space_dimension() < D2::max_space_dimension())
-40039:     ? D1::max_space_dimension()
-40039:     : D2::max_space_dimension();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::Partially_Reduced_Product(dimension_type num_dimensions,
-40039:                             const Degenerate_Element kind)
-40039:   : d1(num_dimensions <= max_space_dimension()
-40039:        ? num_dimensions
-40039:        : (throw_space_dimension_overflow("Partially_Reduced_Product(n, k)",
-40039:                                          "n exceeds the maximum "
-40039:                                          "allowed space dimension"),
-40039:           num_dimensions),
-40039:        kind),
-40039:     d2(num_dimensions, kind) {
-40039:   set_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::Partially_Reduced_Product(const Congruence_System& cgs)
-40039:   : d1(cgs), d2(cgs) {
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::Partially_Reduced_Product(Congruence_System& cgs)
-40039:   : d1(const_cast<const Congruence_System&>(cgs)), d2(cgs) {
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::Partially_Reduced_Product(const Constraint_System& cs)
-40039:   : d1(cs), d2(cs) {
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::Partially_Reduced_Product(Constraint_System& cs)
-40039:   : d1(const_cast<const Constraint_System&>(cs)), d2(cs) {
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::Partially_Reduced_Product(const C_Polyhedron& ph,
-40039:                             Complexity_Class complexity)
-40039:   : d1(ph, complexity), d2(ph, complexity) {
-40039:   set_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::Partially_Reduced_Product(const NNC_Polyhedron& ph,
-40039:                             Complexity_Class complexity)
-40039:   : d1(ph, complexity), d2(ph, complexity) {
-40039:   set_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::Partially_Reduced_Product(const Grid& gr, Complexity_Class)
-40039:   : d1(gr), d2(gr) {
-40039:   set_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: template <typename Interval>
-40039: inline
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::Partially_Reduced_Product(const Box<Interval>& box, Complexity_Class)
-40039:   : d1(box), d2(box) {
-40039:   set_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: template <typename U>
-40039: inline
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::Partially_Reduced_Product(const BD_Shape<U>& bd, Complexity_Class)
-40039:   : d1(bd), d2(bd) {
-40039:   set_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: template <typename U>
-40039: inline
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::Partially_Reduced_Product(const Octagonal_Shape<U>& os, Complexity_Class)
-40039:   : d1(os), d2(os) {
-40039:   set_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::Partially_Reduced_Product(const Partially_Reduced_Product& y,
-40039:                             Complexity_Class)
-40039:   : d1(y.d1), d2(y.d2) {
-40039:   reduced = y.reduced;
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: template <typename E1, typename E2, typename S>
-40039: inline
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::Partially_Reduced_Product(const Partially_Reduced_Product<E1, E2, S>& y,
-40039:                             Complexity_Class complexity)
-40039:   : d1(y.space_dimension()), d2(y.space_dimension()), reduced(false) {
-40039:   Partially_Reduced_Product<D1, D2, R> pg1(y.domain1(), complexity);
-40039:   Partially_Reduced_Product<D1, D2, R> pg2(y.domain2(), complexity);
-40039:   pg1.intersection_assign(pg2);
-40039:   m_swap(pg1);
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline
-40039: Partially_Reduced_Product<D1, D2, R>::~Partially_Reduced_Product() {
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline memory_size_type
-40039: Partially_Reduced_Product<D1, D2, R>::external_memory_in_bytes() const {
-40039:   return d1.external_memory_in_bytes() + d2.external_memory_in_bytes();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline memory_size_type
-40039: Partially_Reduced_Product<D1, D2, R>::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline dimension_type
-40039: Partially_Reduced_Product<D1, D2, R>::space_dimension() const {
-40039:   ((void) 0);
-40039:   return d1.space_dimension();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline dimension_type
-40039: Partially_Reduced_Product<D1, D2, R>::affine_dimension() const {
-40039:   reduce();
-40039:   const dimension_type d1_dim = d1.affine_dimension();
-40039:   const dimension_type d2_dim = d2.affine_dimension();
-40039:   return std::min(d1_dim, d2_dim);
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::unconstrain(const Variable var) {
-40039:   reduce();
-40039:   d1.unconstrain(var);
-40039:   d2.unconstrain(var);
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>::unconstrain(const Variables_Set& vars) {
-40039:   reduce();
-40039:   d1.unconstrain(vars);
-40039:   d2.unconstrain(vars);
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::intersection_assign(const Partially_Reduced_Product& y) {
-40039:   d1.intersection_assign(y.d1);
-40039:   d2.intersection_assign(y.d2);
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::difference_assign(const Partially_Reduced_Product& y) {
-40039:   reduce();
-40039:   y.reduce();
-40039:   d1.difference_assign(y.d1);
-40039:   d2.difference_assign(y.d2);
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::upper_bound_assign(const Partially_Reduced_Product& y) {
-40039:   reduce();
-40039:   y.reduce();
-40039:   d1.upper_bound_assign(y.d1);
-40039:   d2.upper_bound_assign(y.d2);
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline bool
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::upper_bound_assign_if_exact(const Partially_Reduced_Product& y) {
-40039:   reduce();
-40039:   y.reduce();
-40039:   D1 d1_copy = d1;
-40039:   bool ub_exact = d1_copy.upper_bound_assign_if_exact(y.d1);
-40039:   if (!ub_exact) {
-40039:     return false;
-40039:   }
-40039:   ub_exact = d2.upper_bound_assign_if_exact(y.d2);
-40039:   if (!ub_exact) {
-40039:     return false;
-40039:   }
-40039:   using std::swap;
-40039:   swap(d1, d1_copy);
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::affine_image(Variable var,
-40039:                const Linear_Expression& expr,
-40039:                Coefficient_traits::const_reference denominator) {
-40039:   d1.affine_image(var, expr, denominator);
-40039:   d2.affine_image(var, expr, denominator);
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::affine_preimage(Variable var,
-40039:                   const Linear_Expression& expr,
-40039:                   Coefficient_traits::const_reference denominator) {
-40039:   d1.affine_preimage(var, expr, denominator);
-40039:   d2.affine_preimage(var, expr, denominator);
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::generalized_affine_image(Variable var,
-40039:                            const Relation_Symbol relsym,
-40039:                            const Linear_Expression& expr,
-40039:                            Coefficient_traits::const_reference denominator) {
-40039:   d1.generalized_affine_image(var, relsym, expr, denominator);
-40039:   d2.generalized_affine_image(var, relsym, expr, denominator);
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::generalized_affine_preimage(Variable var,
-40039:                               const Relation_Symbol relsym,
-40039:                               const Linear_Expression& expr,
-40039:                               Coefficient_traits::const_reference denominator) {
-40039:   d1.generalized_affine_preimage(var, relsym, expr, denominator);
-40039:   d2.generalized_affine_preimage(var, relsym, expr, denominator);
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::generalized_affine_image(const Linear_Expression& lhs,
-40039:                            const Relation_Symbol relsym,
-40039:                            const Linear_Expression& rhs) {
-40039:   d1.generalized_affine_image(lhs, relsym, rhs);
-40039:   d2.generalized_affine_image(lhs, relsym, rhs);
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::generalized_affine_preimage(const Linear_Expression& lhs,
-40039:                               const Relation_Symbol relsym,
-40039:                               const Linear_Expression& rhs) {
-40039:   d1.generalized_affine_preimage(lhs, relsym, rhs);
-40039:   d2.generalized_affine_preimage(lhs, relsym, rhs);
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::bounded_affine_image(Variable var,
-40039:                        const Linear_Expression& lb_expr,
-40039:                        const Linear_Expression& ub_expr,
-40039:                        Coefficient_traits::const_reference denominator) {
-40039:   d1.bounded_affine_image(var, lb_expr, ub_expr, denominator);
-40039:   d2.bounded_affine_image(var, lb_expr, ub_expr, denominator);
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::bounded_affine_preimage(Variable var,
-40039:                           const Linear_Expression& lb_expr,
-40039:                           const Linear_Expression& ub_expr,
-40039:                           Coefficient_traits::const_reference denominator) {
-40039:   d1.bounded_affine_preimage(var, lb_expr, ub_expr, denominator);
-40039:   d2.bounded_affine_preimage(var, lb_expr, ub_expr, denominator);
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::time_elapse_assign(const Partially_Reduced_Product& y) {
-40039:   reduce();
-40039:   y.reduce();
-40039:   d1.time_elapse_assign(y.d1);
-40039:   d2.time_elapse_assign(y.d2);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>::topological_closure_assign() {
-40039:   d1.topological_closure_assign();
-40039:   d2.topological_closure_assign();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>::m_swap(Partially_Reduced_Product& y) {
-40039:   using std::swap;
-40039:   swap(d1, y.d1);
-40039:   swap(d2, y.d2);
-40039:   swap(reduced, y.reduced);
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>::add_constraint(const Constraint& c) {
-40039:   d1.add_constraint(c);
-40039:   d2.add_constraint(c);
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>::refine_with_constraint(const Constraint& c) {
-40039:   d1.refine_with_constraint(c);
-40039:   d2.refine_with_constraint(c);
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>::add_congruence(const Congruence& cg) {
-40039:   d1.add_congruence(cg);
-40039:   d2.add_congruence(cg);
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>::refine_with_congruence(const Congruence& cg) {
-40039:   d1.refine_with_congruence(cg);
-40039:   d2.refine_with_congruence(cg);
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::add_constraints(const Constraint_System& cs) {
-40039:   d1.add_constraints(cs);
-40039:   d2.add_constraints(cs);
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::refine_with_constraints(const Constraint_System& cs) {
-40039:   d1.refine_with_constraints(cs);
-40039:   d2.refine_with_constraints(cs);
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::add_congruences(const Congruence_System& cgs) {
-40039:   d1.add_congruences(cgs);
-40039:   d2.add_congruences(cgs);
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::refine_with_congruences(const Congruence_System& cgs) {
-40039:   d1.refine_with_congruences(cgs);
-40039:   d2.refine_with_congruences(cgs);
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::drop_some_non_integer_points(Complexity_Class complexity) {
-40039:   reduce();
-40039:   d1.drop_some_non_integer_points(complexity);
-40039:   d2.drop_some_non_integer_points(complexity);
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::drop_some_non_integer_points(const Variables_Set& vars,
-40039:                                     Complexity_Class complexity) {
-40039:   reduce();
-40039:   d1.drop_some_non_integer_points(vars, complexity);
-40039:   d2.drop_some_non_integer_points(vars, complexity);
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline Partially_Reduced_Product<D1, D2, R>&
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::operator=(const Partially_Reduced_Product& y) {
-40039:   d1 = y.d1;
-40039:   d2 = y.d2;
-40039:   reduced = y.reduced;
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline const D1&
-40039: Partially_Reduced_Product<D1, D2, R>::domain1() const {
-40039:   reduce();
-40039:   return d1;
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline const D2&
-40039: Partially_Reduced_Product<D1, D2, R>::domain2() const {
-40039:   reduce();
-40039:   return d2;
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline bool
-40039: Partially_Reduced_Product<D1, D2, R>::is_empty() const {
-40039:   reduce();
-40039:   return d1.is_empty() || d2.is_empty();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline bool
-40039: Partially_Reduced_Product<D1, D2, R>::is_universe() const {
-40039:   return d1.is_universe() && d2.is_universe();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline bool
-40039: Partially_Reduced_Product<D1, D2, R>::is_topologically_closed() const {
-40039:   reduce();
-40039:   return d1.is_topologically_closed() && d2.is_topologically_closed();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline bool
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::is_disjoint_from(const Partially_Reduced_Product& y) const {
-40039:   reduce();
-40039:   y.reduce();
-40039:   return d1.is_disjoint_from(y.d1) || d2.is_disjoint_from(y.d2);
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline bool
-40039: Partially_Reduced_Product<D1, D2, R>::is_discrete() const {
-40039:   reduce();
-40039:   return d1.is_discrete() || d2.is_discrete();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline bool
-40039: Partially_Reduced_Product<D1, D2, R>::is_bounded() const {
-40039:   reduce();
-40039:   return d1.is_bounded() || d2.is_bounded();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline bool
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::bounds_from_above(const Linear_Expression& expr) const {
-40039:   reduce();
-40039:   return d1.bounds_from_above(expr) || d2.bounds_from_above(expr);
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline bool
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::bounds_from_below(const Linear_Expression& expr) const {
-40039:   reduce();
-40039:   return d1.bounds_from_below(expr) || d2.bounds_from_below(expr);
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline bool
-40039: Partially_Reduced_Product<D1, D2, R>::constrains(Variable var) const {
-40039:   reduce();
-40039:   return d1.constrains(var) || d2.constrains(var);
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::widening_assign(const Partially_Reduced_Product& y,
-40039:                   unsigned* tp) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   reduce();
-40039:   y.reduce();
-40039:   d1.widening_assign(y.d1, tp);
-40039:   d2.widening_assign(y.d2, tp);
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::add_space_dimensions_and_embed(dimension_type m) {
-40039:   d1.add_space_dimensions_and_embed(m);
-40039:   d2.add_space_dimensions_and_embed(m);
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::add_space_dimensions_and_project(dimension_type m) {
-40039:   d1.add_space_dimensions_and_project(m);
-40039:   d2.add_space_dimensions_and_project(m);
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::concatenate_assign(const Partially_Reduced_Product& y) {
-40039:   d1.concatenate_assign(y.d1);
-40039:   d2.concatenate_assign(y.d2);
-40039:   if (!is_reduced() || !y.is_reduced()) {
-40039:     clear_reduced_flag();
-40039:   }
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::remove_space_dimensions(const Variables_Set& vars) {
-40039:   d1.remove_space_dimensions(vars);
-40039:   d2.remove_space_dimensions(vars);
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::remove_higher_space_dimensions(dimension_type new_dimension) {
-40039:   d1.remove_higher_space_dimensions(new_dimension);
-40039:   d2.remove_higher_space_dimensions(new_dimension);
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: template <typename Partial_Function>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::map_space_dimensions(const Partial_Function& pfunc) {
-40039:   d1.map_space_dimensions(pfunc);
-40039:   d2.map_space_dimensions(pfunc);
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::expand_space_dimension(Variable var, dimension_type m) {
-40039:   d1.expand_space_dimension(var, m);
-40039:   d2.expand_space_dimension(var, m);
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::fold_space_dimensions(const Variables_Set& vars,
-40039:                         Variable dest) {
-40039:   d1.fold_space_dimensions(vars, dest);
-40039:   d2.fold_space_dimensions(vars, dest);
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline bool
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::contains(const Partially_Reduced_Product& y) const {
-40039:   reduce();
-40039:   y.reduce();
-40039:   return d1.contains(y.d1) && d2.contains(y.d2);
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline bool
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::strictly_contains(const Partially_Reduced_Product& y) const {
-40039:   reduce();
-40039:   y.reduce();
-40039:   return (d1.contains(y.d1) && d2.strictly_contains(y.d2))
-40039:     || (d2.contains(y.d2) && d1.strictly_contains(y.d1));
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline bool
-40039: Partially_Reduced_Product<D1, D2, R>::reduce() const {
-40039:   Partially_Reduced_Product& dp
-40039:     = const_cast<Partially_Reduced_Product&>(*this);
-40039:   if (dp.is_reduced()) {
-40039:     return false;
-40039:   }
-40039:   R r;
-40039:   r.product_reduce(dp.d1, dp.d2);
-40039:   set_reduced_flag();
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline bool
-40039: Partially_Reduced_Product<D1, D2, R>::is_reduced() const {
-40039:   return reduced;
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>::clear_reduced_flag() const {
-40039:   const_cast<Partially_Reduced_Product&>(*this).reduced = false;
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>::set_reduced_flag() const {
-40039:   const_cast<Partially_Reduced_Product&>(*this).reduced = true;
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R> void Partially_Reduced_Product<D1, D2, R>::ascii_dump() const { ascii_dump(std::cerr); } template <typename D1, typename D2, typename R> void Partially_Reduced_Product<D1, D2, R>::print() const { using IO_Operators::operator<<; std::cerr << *this; }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: Partially_Reduced_Product<D1, D2, R>::ascii_dump(std::ostream& s) const {
-40039:   const char yes = '+';
-40039:   const char no = '-';
-40039:   s << "Partially_Reduced_Product\n";
-40039:   s << (reduced ? yes : no) << "reduced\n";
-40039:   s << "Domain 1:\n";
-40039:   d1.ascii_dump(s);
-40039:   s << "Domain 2:\n";
-40039:   d2.ascii_dump(s);
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline int32_t
-40039: Partially_Reduced_Product<D1, D2, R>::hash_code() const {
-40039:   return hash_code_from_dimension(space_dimension());
-40039: }
-40039: 
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline bool
-40039: operator==(const Partially_Reduced_Product<D1, D2, R>& x,
-40039:            const Partially_Reduced_Product<D1, D2, R>& y) {
-40039:   x.reduce();
-40039:   y.reduce();
-40039:   return x.d1 == y.d1 && x.d2 == y.d2;
-40039: }
-40039: 
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline bool
-40039: operator!=(const Partially_Reduced_Product<D1, D2, R>& x,
-40039:            const Partially_Reduced_Product<D1, D2, R>& y) {
-40039:   return !(x == y);
-40039: }
-40039: 
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline std::ostream&
-40039: IO_Operators::operator<<(std::ostream& s,
-40039:                          const Partially_Reduced_Product<D1, D2, R>& dp) {
-40039:   return s << "Domain 1:\n"
-40039:            << dp.d1
-40039:            << "Domain 2:\n"
-40039:            << dp.d2;
-40039: }
-40039: 
-40039: }
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename D1, typename D2>
-40039: inline
-40039: No_Reduction<D1, D2>::No_Reduction() {
-40039: }
-40039: 
-40039: template <typename D1, typename D2>
-40039: void No_Reduction<D1, D2>::product_reduce(D1&, D2&) {
-40039: }
-40039: 
-40039: template <typename D1, typename D2>
-40039: inline
-40039: No_Reduction<D1, D2>::~No_Reduction() {
-40039: }
-40039: 
-40039: template <typename D1, typename D2>
-40039: inline
-40039: Smash_Reduction<D1, D2>::Smash_Reduction() {
-40039: }
-40039: 
-40039: template <typename D1, typename D2>
-40039: inline
-40039: Smash_Reduction<D1, D2>::~Smash_Reduction() {
-40039: }
-40039: 
-40039: template <typename D1, typename D2>
-40039: inline
-40039: Constraints_Reduction<D1, D2>::Constraints_Reduction() {
-40039: }
-40039: 
-40039: template <typename D1, typename D2>
-40039: inline
-40039: Constraints_Reduction<D1, D2>::~Constraints_Reduction() {
-40039: }
-40039: 
-40039: template <typename D1, typename D2>
-40039: inline
-40039: Congruences_Reduction<D1, D2>::Congruences_Reduction() {
-40039: }
-40039: 
-40039: template <typename D1, typename D2>
-40039: inline
-40039: Congruences_Reduction<D1, D2>::~Congruences_Reduction() {
-40039: }
-40039: 
-40039: template <typename D1, typename D2>
-40039: inline
-40039: Shape_Preserving_Reduction<D1, D2>::Shape_Preserving_Reduction() {
-40039: }
-40039: 
-40039: template <typename D1, typename D2>
-40039: inline
-40039: Shape_Preserving_Reduction<D1, D2>::~Shape_Preserving_Reduction() {
-40039: }
-40039: 
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline void
-40039: swap(Partially_Reduced_Product<D1, D2, R>& x,
-40039:      Partially_Reduced_Product<D1, D2, R>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 1687 "../../src/Partially_Reduced_Product_defs.hh" 2
-40039: # 1 "../../src/Partially_Reduced_Product_templates.hh" 1
-40039: # 34 "../../src/Partially_Reduced_Product_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::throw_space_dimension_overflow(const char* method,
-40039:                                  const char* reason) {
-40039:   std::ostringstream s;
-40039:   s << "PPL::Partially_Reduced_Product::" << method << ":" << std::endl
-40039:     << reason << ".";
-40039:   throw std::length_error(s.str());
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: Constraint_System
-40039: Partially_Reduced_Product<D1, D2, R>::constraints() const {
-40039:   reduce();
-40039:   Constraint_System cs = d2.constraints();
-40039:   const Constraint_System& cs1 = d1.constraints();
-40039:   for (Constraint_System::const_iterator i = cs1.begin(),
-40039:          cs_end = cs1.end(); i != cs_end; ++i) {
-40039:     cs.insert(*i);
-40039:   }
-40039:   return cs;
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: Constraint_System
-40039: Partially_Reduced_Product<D1, D2, R>::minimized_constraints() const {
-40039:   reduce();
-40039:   Constraint_System cs = d2.constraints();
-40039:   const Constraint_System& cs1 = d1.constraints();
-40039:   for (Constraint_System::const_iterator i = cs1.begin(),
-40039:          cs_end = cs1.end(); i != cs_end; ++i) {
-40039:     cs.insert(*i);
-40039:   }
-40039:   if (cs.has_strict_inequalities()) {
-40039:     NNC_Polyhedron ph(cs);
-40039:     return ph.minimized_constraints();
-40039:   }
-40039:   else {
-40039:     C_Polyhedron ph(cs);
-40039:     return ph.minimized_constraints();
-40039:   }
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: Congruence_System
-40039: Partially_Reduced_Product<D1, D2, R>::congruences() const {
-40039:   reduce();
-40039:   Congruence_System cgs = d2.congruences();
-40039:   const Congruence_System& cgs1 = d1.congruences();
-40039:   for (Congruence_System::const_iterator i = cgs1.begin(),
-40039:          cgs_end = cgs1.end(); i != cgs_end; ++i) {
-40039:     cgs.insert(*i);
-40039:   }
-40039:   return cgs;
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: Congruence_System
-40039: Partially_Reduced_Product<D1, D2, R>::minimized_congruences() const {
-40039:   reduce();
-40039:   Congruence_System cgs = d2.congruences();
-40039:   const Congruence_System& cgs1 = d1.congruences();
-40039:   for (Congruence_System::const_iterator i = cgs1.begin(),
-40039:          cgs_end = cgs1.end(); i != cgs_end; ++i) {
-40039:     cgs.insert(*i);
-40039:   }
-40039:   Grid gr(cgs);
-40039:   return gr.minimized_congruences();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::add_recycled_constraints(Constraint_System& cs) {
-40039:   if (d1.can_recycle_constraint_systems()) {
-40039:     d2.refine_with_constraints(cs);
-40039:     d1.add_recycled_constraints(cs);
-40039:   }
-40039:   else {
-40039:     if (d2.can_recycle_constraint_systems()) {
-40039:       d1.refine_with_constraints(cs);
-40039:       d2.add_recycled_constraints(cs);
-40039:     }
-40039:     else {
-40039:       d1.add_constraints(cs);
-40039:       d2.add_constraints(cs);
-40039:     }
-40039:   }
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: void
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::add_recycled_congruences(Congruence_System& cgs) {
-40039:   if (d1.can_recycle_congruence_systems()) {
-40039:     d2.refine_with_congruences(cgs);
-40039:     d1.add_recycled_congruences(cgs);
-40039:   }
-40039:   else {
-40039:     if (d2.can_recycle_congruence_systems()) {
-40039:       d1.refine_with_congruences(cgs);
-40039:       d2.add_recycled_congruences(cgs);
-40039:     }
-40039:     else {
-40039:       d1.add_congruences(cgs);
-40039:       d2.add_congruences(cgs);
-40039:     }
-40039:   }
-40039:   clear_reduced_flag();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: Poly_Gen_Relation
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::relation_with(const Generator& g) const {
-40039:   reduce();
-40039:   if (Poly_Gen_Relation::nothing() == d1.relation_with(g)
-40039:       || Poly_Gen_Relation::nothing() == d2.relation_with(g)) {
-40039:     return Poly_Gen_Relation::nothing();
-40039:   }
-40039:   else {
-40039:     return Poly_Gen_Relation::subsumes();
-40039:   }
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: Poly_Con_Relation
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::relation_with(const Constraint& c) const {
-40039:   reduce();
-40039:   Poly_Con_Relation relation1 = d1.relation_with(c);
-40039:   Poly_Con_Relation relation2 = d2.relation_with(c);
-40039: 
-40039:   Poly_Con_Relation result = Poly_Con_Relation::nothing();
-40039: 
-40039:   if (relation1.implies(Poly_Con_Relation::is_included())) {
-40039:     result = result && Poly_Con_Relation::is_included();
-40039:   }
-40039:   else if (relation2.implies(Poly_Con_Relation::is_included())) {
-40039:     result = result && Poly_Con_Relation::is_included();
-40039:   }
-40039:   if (relation1.implies(Poly_Con_Relation::saturates())) {
-40039:     result = result && Poly_Con_Relation::saturates();
-40039:   }
-40039:   else if (relation2.implies(Poly_Con_Relation::saturates())) {
-40039:     result = result && Poly_Con_Relation::saturates();
-40039:   }
-40039:   if (relation1.implies(Poly_Con_Relation::is_disjoint())) {
-40039:     result = result && Poly_Con_Relation::is_disjoint();
-40039:   }
-40039:   else if (relation2.implies(Poly_Con_Relation::is_disjoint())) {
-40039:     result = result && Poly_Con_Relation::is_disjoint();
-40039:   }
-40039: 
-40039:   return result;
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: Poly_Con_Relation
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::relation_with(const Congruence& cg) const {
-40039:   reduce();
-40039:   Poly_Con_Relation relation1 = d1.relation_with(cg);
-40039:   Poly_Con_Relation relation2 = d2.relation_with(cg);
-40039: 
-40039:   Poly_Con_Relation result = Poly_Con_Relation::nothing();
-40039: 
-40039:   if (relation1.implies(Poly_Con_Relation::is_included())) {
-40039:     result = result && Poly_Con_Relation::is_included();
-40039:   }
-40039:   else if (relation2.implies(Poly_Con_Relation::is_included())) {
-40039:     result = result && Poly_Con_Relation::is_included();
-40039:   }
-40039:   if (relation1.implies(Poly_Con_Relation::saturates())) {
-40039:     result = result && Poly_Con_Relation::saturates();
-40039:   }
-40039:   else if (relation2.implies(Poly_Con_Relation::saturates())) {
-40039:     result = result && Poly_Con_Relation::saturates();
-40039:   }
-40039:   if (relation1.implies(Poly_Con_Relation::is_disjoint())) {
-40039:     result = result && Poly_Con_Relation::is_disjoint();
-40039:   }
-40039:   else if (relation2.implies(Poly_Con_Relation::is_disjoint())) {
-40039:     result = result && Poly_Con_Relation::is_disjoint();
-40039:   }
-40039: 
-40039:   return result;
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: bool
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::maximize(const Linear_Expression& expr,
-40039:            Coefficient& sup_n,
-40039:            Coefficient& sup_d,
-40039:            bool& maximum) const {
-40039:   reduce();
-40039: 
-40039:   if (is_empty()) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_sup1_n; Parma_Polyhedra_Library::Coefficient& sup1_n = holder_sup1_n.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_sup1_d; Parma_Polyhedra_Library::Coefficient& sup1_d = holder_sup1_d.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_sup2_n; Parma_Polyhedra_Library::Coefficient& sup2_n = holder_sup2_n.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_sup2_d; Parma_Polyhedra_Library::Coefficient& sup2_d = holder_sup2_d.item();
-40039:   bool maximum1;
-40039:   bool maximum2;
-40039:   bool r1 = d1.maximize(expr, sup1_n, sup1_d, maximum1);
-40039:   bool r2 = d2.maximize(expr, sup2_n, sup2_d, maximum2);
-40039: 
-40039:   if (!r1 && !r2) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (!r1) {
-40039:     sup_n = sup2_n;
-40039:     sup_d = sup2_d;
-40039:     maximum = maximum2;
-40039:     return true;
-40039:   }
-40039: 
-40039:   if (!r2) {
-40039:     sup_n = sup1_n;
-40039:     sup_d = sup1_d;
-40039:     maximum = maximum1;
-40039:     return true;
-40039:   }
-40039: 
-40039:   if (sup2_d * sup1_n >= sup1_d * sup2_n) {
-40039:     sup_n = sup1_n;
-40039:     sup_d = sup1_d;
-40039:     maximum = maximum1;
-40039:   }
-40039:   else {
-40039:     sup_n = sup2_n;
-40039:     sup_d = sup2_d;
-40039:     maximum = maximum2;
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: bool
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::minimize(const Linear_Expression& expr,
-40039:            Coefficient& inf_n,
-40039:            Coefficient& inf_d,
-40039:            bool& minimum) const {
-40039:   reduce();
-40039: 
-40039:   if (is_empty()) {
-40039:     return false;
-40039:   }
-40039:   ((void) 0);
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inf1_n; Parma_Polyhedra_Library::Coefficient& inf1_n = holder_inf1_n.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inf1_d; Parma_Polyhedra_Library::Coefficient& inf1_d = holder_inf1_d.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inf2_n; Parma_Polyhedra_Library::Coefficient& inf2_n = holder_inf2_n.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inf2_d; Parma_Polyhedra_Library::Coefficient& inf2_d = holder_inf2_d.item();
-40039:   bool minimum1;
-40039:   bool minimum2;
-40039:   bool r1 = d1.minimize(expr, inf1_n, inf1_d, minimum1);
-40039:   bool r2 = d2.minimize(expr, inf2_n, inf2_d, minimum2);
-40039: 
-40039:   if (!r1 && !r2) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (!r1) {
-40039:     inf_n = inf2_n;
-40039:     inf_d = inf2_d;
-40039:     minimum = minimum2;
-40039:     return true;
-40039:   }
-40039: 
-40039:   if (!r2) {
-40039:     inf_n = inf1_n;
-40039:     inf_d = inf1_d;
-40039:     minimum = minimum1;
-40039:     return true;
-40039:   }
-40039: 
-40039:   if (inf2_d * inf1_n <= inf1_d * inf2_n) {
-40039:     inf_n = inf1_n;
-40039:     inf_d = inf1_d;
-40039:     minimum = minimum1;
-40039:   }
-40039:   else {
-40039:     inf_n = inf2_n;
-40039:     inf_d = inf2_d;
-40039:     minimum = minimum2;
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: bool
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::maximize(const Linear_Expression& expr,
-40039:            Coefficient& sup_n,
-40039:            Coefficient& sup_d,
-40039:            bool& maximum,
-40039:            Generator& g) const {
-40039:   reduce();
-40039: 
-40039:   if (is_empty()) {
-40039:     return false;
-40039:   }
-40039:   ((void) 0);
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_sup1_n; Parma_Polyhedra_Library::Coefficient& sup1_n = holder_sup1_n.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_sup1_d; Parma_Polyhedra_Library::Coefficient& sup1_d = holder_sup1_d.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_sup2_n; Parma_Polyhedra_Library::Coefficient& sup2_n = holder_sup2_n.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_sup2_d; Parma_Polyhedra_Library::Coefficient& sup2_d = holder_sup2_d.item();
-40039:   bool maximum1;
-40039:   bool maximum2;
-40039:   Generator g1(point());
-40039:   Generator g2(point());
-40039:   bool r1 = d1.maximize(expr, sup1_n, sup1_d, maximum1, g1);
-40039:   bool r2 = d2.maximize(expr, sup2_n, sup2_d, maximum2, g2);
-40039: 
-40039:   if (!r1 && !r2) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (!r1) {
-40039:     sup_n = sup2_n;
-40039:     sup_d = sup2_d;
-40039:     maximum = maximum2;
-40039:     g = g2;
-40039:     return true;
-40039:   }
-40039: 
-40039:   if (!r2) {
-40039:     sup_n = sup1_n;
-40039:     sup_d = sup1_d;
-40039:     maximum = maximum1;
-40039:     g = g1;
-40039:     return true;
-40039:   }
-40039: 
-40039:   if (sup2_d * sup1_n >= sup1_d * sup2_n) {
-40039:     sup_n = sup1_n;
-40039:     sup_d = sup1_d;
-40039:     maximum = maximum1;
-40039:     g = g1;
-40039:   }
-40039:   else {
-40039:     sup_n = sup2_n;
-40039:     sup_d = sup2_d;
-40039:     maximum = maximum2;
-40039:     g = g2;
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: bool
-40039: Partially_Reduced_Product<D1, D2, R>
-40039: ::minimize(const Linear_Expression& expr,
-40039:            Coefficient& inf_n,
-40039:            Coefficient& inf_d,
-40039:            bool& minimum,
-40039:            Generator& g) const {
-40039:   reduce();
-40039: 
-40039:   if (is_empty()) {
-40039:     return false;
-40039:   }
-40039:   ((void) 0);
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inf1_n; Parma_Polyhedra_Library::Coefficient& inf1_n = holder_inf1_n.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inf1_d; Parma_Polyhedra_Library::Coefficient& inf1_d = holder_inf1_d.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inf2_n; Parma_Polyhedra_Library::Coefficient& inf2_n = holder_inf2_n.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inf2_d; Parma_Polyhedra_Library::Coefficient& inf2_d = holder_inf2_d.item();
-40039:   bool minimum1;
-40039:   bool minimum2;
-40039:   Generator g1(point());
-40039:   Generator g2(point());
-40039:   bool r1 = d1.minimize(expr, inf1_n, inf1_d, minimum1, g1);
-40039:   bool r2 = d2.minimize(expr, inf2_n, inf2_d, minimum2, g2);
-40039: 
-40039:   if (!r1 && !r2) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (!r1) {
-40039:     inf_n = inf2_n;
-40039:     inf_d = inf2_d;
-40039:     minimum = minimum2;
-40039:     g = g2;
-40039:     return true;
-40039:   }
-40039: 
-40039:   if (!r2) {
-40039:     inf_n = inf1_n;
-40039:     inf_d = inf1_d;
-40039:     minimum = minimum1;
-40039:     g = g1;
-40039:     return true;
-40039:   }
-40039: 
-40039:   if (inf2_d * inf1_n <= inf1_d * inf2_n) {
-40039:     inf_n = inf1_n;
-40039:     inf_d = inf1_d;
-40039:     minimum = minimum1;
-40039:     g = g1;
-40039:   }
-40039:   else {
-40039:     inf_n = inf2_n;
-40039:     inf_d = inf2_d;
-40039:     minimum = minimum2;
-40039:     g = g2;
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: inline bool
-40039: Partially_Reduced_Product<D1, D2, R>::OK() const {
-40039:   if (reduced) {
-40039:     Partially_Reduced_Product<D1, D2, R> dp1 = *this;
-40039:     Partially_Reduced_Product<D1, D2, R> dp2 = *this;
-40039: 
-40039:     dp1.clear_reduced_flag();
-40039:     dp1.reduce();
-40039:     if (dp1 != dp2) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return d1.OK() && d2.OK();
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: bool
-40039: Partially_Reduced_Product<D1, D2, R>::ascii_load(std::istream& s) {
-40039:   const char yes = '+';
-40039:   const char no = '-';
-40039:   std::string str;
-40039:   if (!(s >> str) || str != "Partially_Reduced_Product") {
-40039:     return false;
-40039:   }
-40039:   if (!(s >> str)
-40039:       || (str[0] != yes && str[0] != no)
-40039:       || str.substr(1) != "reduced") {
-40039:     return false;
-40039:   }
-40039:   reduced = (str[0] == yes);
-40039:   if (!(s >> str) || str != "Domain") {
-40039:     return false;
-40039:   }
-40039:   if (!(s >> str) || str != "1:") {
-40039:     return false;
-40039:   }
-40039:   if (!d1.ascii_load(s)) {
-40039:     return false;
-40039:   }
-40039:   if (!(s >> str) || str != "Domain") {
-40039:     return false;
-40039:   }
-40039:   if (!(s >> str) || str != "2:") {
-40039:     return false;
-40039:   }
-40039:   return d2.ascii_load(s);
-40039: }
-40039: 
-40039: template <typename D1, typename D2>
-40039: void Smash_Reduction<D1, D2>::product_reduce(D1& d1, D2& d2) {
-40039:   using std::swap;
-40039:   if (d2.is_empty()) {
-40039:     if (!d1.is_empty()) {
-40039:       D1 new_d1(d1.space_dimension(), EMPTY);
-40039:       swap(d1, new_d1);
-40039:     }
-40039:   }
-40039:   else if (d1.is_empty()) {
-40039:     D2 new_d2(d2.space_dimension(), EMPTY);
-40039:     swap(d2, new_d2);
-40039:   }
-40039: }
-40039: 
-40039: template <typename D1, typename D2>
-40039: void Constraints_Reduction<D1, D2>::product_reduce(D1& d1, D2& d2) {
-40039:   if (d1.is_empty() || d2.is_empty()) {
-40039: 
-40039:     Parma_Polyhedra_Library::Smash_Reduction<D1, D2> sr;
-40039:     sr.product_reduce(d1, d2);
-40039:     return;
-40039:   }
-40039:   else {
-40039:     using std::swap;
-40039:     dimension_type space_dim = d1.space_dimension();
-40039:     d1.refine_with_constraints(d2.minimized_constraints());
-40039:     if (d1.is_empty()) {
-40039:       D2 new_d2(space_dim, EMPTY);
-40039:       swap(d2, new_d2);
-40039:       return;
-40039:     }
-40039:     d2.refine_with_constraints(d1.minimized_constraints());
-40039:     if (d2.is_empty()) {
-40039:       D1 new_d1(space_dim, EMPTY);
-40039:       swap(d1, new_d1);
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename D1, typename D2>
-40039: bool shrink_to_congruence_no_check(D1& d1, D2& d2, const Congruence& cg) {
-40039: 
-40039:   ((void) 0);
-40039: 
-40039:   ((void) 0);
-40039: 
-40039:   Linear_Expression e(cg.expression());
-40039: 
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_numer; Parma_Polyhedra_Library::Coefficient& max_numer = holder_max_numer.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_denom; Parma_Polyhedra_Library::Coefficient& max_denom = holder_max_denom.item();
-40039:   bool max_included;
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_numer; Parma_Polyhedra_Library::Coefficient& min_numer = holder_min_numer.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_denom; Parma_Polyhedra_Library::Coefficient& min_denom = holder_min_denom.item();
-40039:   if (d2.maximize(e, max_numer, max_denom, max_included)) {
-40039:     bool min_included;
-40039:     if (d2.minimize(e, min_numer, min_denom, min_included)) {
-40039: 
-40039:       max_numer *= min_denom;
-40039:       min_numer *= max_denom;
-40039:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
-40039:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_mod; Parma_Polyhedra_Library::Coefficient& mod = holder_mod.item();
-40039:       denom = max_denom * min_denom;
-40039:       mod = cg.modulus() * denom;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_mod2; Parma_Polyhedra_Library::Coefficient& mod2 = holder_mod2.item();
-40039:       mod2 = 2 * mod;
-40039:       if (max_numer - min_numer < mod2
-40039:           || (max_numer - min_numer == mod2 && (!max_included || !min_included)))
-40039:         {
-40039:           Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_shrink_amount; Parma_Polyhedra_Library::Coefficient& shrink_amount = holder_shrink_amount.item();
-40039:           Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_decreased; Parma_Polyhedra_Library::Coefficient& max_decreased = holder_max_decreased.item();
-40039:           Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_increased; Parma_Polyhedra_Library::Coefficient& min_increased = holder_min_increased.item();
-40039: 
-40039:           shrink_amount = max_numer % mod;
-40039:           if (!max_included && shrink_amount == 0) {
-40039:             shrink_amount = mod;
-40039:           }
-40039:           if (shrink_amount < 0) {
-40039:             shrink_amount += mod;
-40039:           }
-40039:           max_decreased = max_numer - shrink_amount;
-40039: 
-40039:           shrink_amount = min_numer % mod;
-40039:           if (!min_included && shrink_amount == 0) {
-40039:             shrink_amount = - mod;
-40039:           }
-40039:           if (shrink_amount > 0) {
-40039:             shrink_amount -= mod;
-40039:           }
-40039:           min_increased = min_numer - shrink_amount;
-40039:           if (max_decreased == min_increased) {
-40039: 
-40039: 
-40039:             Constraint new_c(denom * e == min_increased);
-40039:             d1.refine_with_constraint(new_c);
-40039:             d2.refine_with_constraint(new_c);
-40039:             return true;
-40039:           }
-40039:           else {
-40039:             if (max_decreased < min_increased) {
-40039:               using std::swap;
-40039: 
-40039: 
-40039:               D1 new_d1(d1.space_dimension(), EMPTY);
-40039:               swap(d1, new_d1);
-40039:               D2 new_d2(d2.space_dimension(), EMPTY);
-40039:               swap(d2, new_d2);
-40039:               return false;
-40039:             }
-40039:           }
-40039:         }
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename D1, typename D2>
-40039: void
-40039: Congruences_Reduction<D1, D2>::product_reduce(D1& d1, D2& d2) {
-40039:   if (d1.is_empty() || d2.is_empty()) {
-40039: 
-40039:     Parma_Polyhedra_Library::Smash_Reduction<D1, D2> sr;
-40039:     sr.product_reduce(d1, d2);
-40039:     return;
-40039:   }
-40039: 
-40039:   const Congruence_System cgs1 = d1.minimized_congruences();
-40039:   for (Congruence_System::const_iterator i = cgs1.begin(),
-40039:          cgs_end = cgs1.end(); i != cgs_end; ++i) {
-40039:     const Congruence& cg1 = *i;
-40039:     if (cg1.is_equality()) {
-40039:       d2.refine_with_congruence(cg1);
-40039:     }
-40039:     else {
-40039:       if (!Parma_Polyhedra_Library::
-40039:           shrink_to_congruence_no_check(d1, d2, cg1)) {
-40039: 
-40039:         return;
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   const Congruence_System cgs2 = d2.minimized_congruences();
-40039:   for (Congruence_System::const_iterator i = cgs2.begin(),
-40039:          cgs_end = cgs2.end(); i != cgs_end; ++i) {
-40039:     const Congruence& cg2 = *i;
-40039:     if (cg2.is_equality()) {
-40039:       d1.refine_with_congruence(cg2);
-40039:     }
-40039:     else {
-40039:       if (!Parma_Polyhedra_Library::
-40039:           shrink_to_congruence_no_check(d2, d1, cg2)) {
-40039: 
-40039:         return;
-40039:       }
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: template <typename D1, typename D2>
-40039: void
-40039: Shape_Preserving_Reduction<D1, D2>::product_reduce(D1& d1, D2& d2) {
-40039: 
-40039:   Parma_Polyhedra_Library::Congruences_Reduction<D1, D2> cgr;
-40039:   cgr.product_reduce(d1, d2);
-40039:   if (d1.is_empty()) {
-40039:     return;
-40039:   }
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_freq_n; Parma_Polyhedra_Library::Coefficient& freq_n = holder_freq_n.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_freq_d; Parma_Polyhedra_Library::Coefficient& freq_d = holder_freq_d.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_val_n; Parma_Polyhedra_Library::Coefficient& val_n = holder_val_n.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_val_d; Parma_Polyhedra_Library::Coefficient& val_d = holder_val_d.item();
-40039: 
-40039: 
-40039:   Constraint_System cs = d2.minimized_constraints();
-40039:   Constraint_System refining_cs;
-40039:   for (Constraint_System::const_iterator i = cs.begin(),
-40039:          cs_end = cs.end(); i != cs_end; ++i) {
-40039:     const Constraint& c = *i;
-40039:     if (c.is_equality()) {
-40039:       continue;
-40039:     }
-40039: 
-40039: 
-40039:     Linear_Expression le(c.expression());
-40039:     if (!d1.frequency(le, freq_n, freq_d, val_n, val_d)) {
-40039: 
-40039:       continue;
-40039:     }
-40039:     if (val_n == 0) {
-40039: 
-40039:       continue;
-40039:     }
-40039: 
-40039: 
-40039:     if (val_n < 0) {
-40039:       val_n = val_n*freq_d + val_d*freq_n;
-40039:       val_d *= freq_d;
-40039:     }
-40039:     le *= val_d;
-40039:     le -= val_n;
-40039:     refining_cs.insert(le >= 0);
-40039:   }
-40039:   d2.refine_with_constraints(refining_cs);
-40039: 
-40039: 
-40039:   cs = d1.minimized_constraints();
-40039:   refining_cs.clear();
-40039:   for (Constraint_System::const_iterator i = cs.begin(),
-40039:          cs_end = cs.end(); i != cs_end; ++i) {
-40039:     const Constraint& c = *i;
-40039:     if (c.is_equality()) {
-40039: 
-40039:       continue;
-40039:     }
-40039: 
-40039: 
-40039:     Linear_Expression le(c.expression());
-40039:     if (!d2.frequency(le, freq_n, freq_d, val_n, val_d)) {
-40039: 
-40039:       continue;
-40039:     }
-40039:     if (val_n == 0) {
-40039: 
-40039:       continue;
-40039:     }
-40039: 
-40039: 
-40039:     if (val_n < 0) {
-40039:       val_n = val_n*freq_d + val_d*freq_n;
-40039:       val_d *= freq_d;
-40039:     }
-40039:     le *= val_d;
-40039:     le -= val_n;
-40039:     refining_cs.insert(le >= 0);
-40039:   }
-40039:   d1.refine_with_constraints(refining_cs);
-40039: 
-40039: 
-40039: 
-40039:   Parma_Polyhedra_Library::Constraints_Reduction<D1, D2> cr;
-40039:   cr.product_reduce(d1, d2);
-40039: }
-40039: 
-40039: }
-40039: # 1688 "../../src/Partially_Reduced_Product_defs.hh" 2
-40039: # 39 "../../src/Pointset_Powerset_defs.hh" 2
-40039: 
-40039: # 1 "../../src/Determinate_defs.hh" 1
-40039: # 27 "../../src/Determinate_defs.hh"
-40039: # 1 "../../src/Determinate_types.hh" 1
-40039: # 16 "../../src/Determinate_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename PSET>
-40039: class Determinate;
-40039: 
-40039: }
-40039: # 28 "../../src/Determinate_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: template <typename PSET>
-40039: void swap(Determinate<PSET>& x, Determinate<PSET>& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename PSET>
-40039: bool operator==(const Determinate<PSET>& x, const Determinate<PSET>& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename PSET>
-40039: bool operator!=(const Determinate<PSET>& x, const Determinate<PSET>& y);
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: template <typename PSET>
-40039: std::ostream&
-40039: operator<<(std::ostream&, const Determinate<PSET>&);
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 83 "../../src/Determinate_defs.hh"
-40039: template <typename PSET>
-40039: class Parma_Polyhedra_Library::Determinate {
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Determinate(const PSET& pset);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Determinate(const Constraint_System& cs);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Determinate(const Congruence_System& cgs);
-40039: 
-40039: 
-40039:   Determinate(const Determinate& y);
-40039: 
-40039: 
-40039:   ~Determinate();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const PSET& pointset() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_top() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_bottom() const;
-40039: 
-40039: 
-40039:   bool definitely_entails(const Determinate& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_definitely_equivalent_to(const Determinate& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static bool has_nontrivial_weakening();
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: # 169 "../../src/Determinate_defs.hh"
-40039:   void upper_bound_assign(const Determinate& y);
-40039: 
-40039: 
-40039:   void meet_assign(const Determinate& y);
-40039: 
-40039: 
-40039:   void weakening_assign(const Determinate& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void concatenate_assign(const Determinate& y);
-40039: 
-40039: 
-40039:   PSET& pointset();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void mutate();
-40039: 
-40039: 
-40039:   Determinate& operator=(const Determinate& y);
-40039: 
-40039: 
-40039:   void m_swap(Determinate& y);
-40039: # 217 "../../src/Determinate_defs.hh"
-40039:   template <typename Binary_Operator_Assign>
-40039:   class Binary_Operator_Assign_Lifter {
-40039:   public:
-40039: 
-40039:     explicit
-40039:     Binary_Operator_Assign_Lifter(Binary_Operator_Assign op_assign);
-40039: 
-40039: 
-40039:     void operator()(Determinate& x, const Determinate& y) const;
-40039: 
-40039:   private:
-40039: 
-40039:     Binary_Operator_Assign op_assign_;
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename Binary_Operator_Assign>
-40039:   static Binary_Operator_Assign_Lifter<Binary_Operator_Assign>
-40039:   lift_op_assign(Binary_Operator_Assign op_assign);
-40039: 
-40039: private:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   class Rep {
-40039:   private:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     mutable unsigned long references;
-40039: 
-40039: 
-40039:     Rep& operator=(const Rep& y);
-40039: 
-40039: 
-40039:     Rep(const Rep& y);
-40039: 
-40039: 
-40039:     Rep();
-40039: 
-40039:   public:
-40039: 
-40039:     PSET pset;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     Rep(dimension_type num_dimensions, Degenerate_Element kind);
-40039: 
-40039: 
-40039:     Rep(const PSET& p);
-40039: 
-40039: 
-40039:     Rep(const Constraint_System& cs);
-40039: 
-40039: 
-40039:     Rep(const Congruence_System& cgs);
-40039: 
-40039: 
-40039:     ~Rep();
-40039: 
-40039: 
-40039:     void new_reference() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     bool del_reference() const;
-40039: 
-40039: 
-40039:     bool is_shared() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     memory_size_type external_memory_in_bytes() const;
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Rep* prep;
-40039: 
-40039:   friend bool
-40039:   operator==<PSET>(const Determinate<PSET>& x, const Determinate<PSET>& y);
-40039: 
-40039:   friend bool
-40039:   operator!=<PSET>(const Determinate<PSET>& x, const Determinate<PSET>& y);
-40039: };
-40039: 
-40039: # 1 "../../src/Determinate_inlines.hh" 1
-40039: # 29 "../../src/Determinate_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename PSET>
-40039: inline
-40039: Determinate<PSET>::Rep::Rep(dimension_type num_dimensions,
-40039:                           Degenerate_Element kind)
-40039:   : references(0), pset(num_dimensions, kind) {
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline
-40039: Determinate<PSET>::Rep::Rep(const PSET& p)
-40039:   : references(0), pset(p) {
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline
-40039: Determinate<PSET>::Rep::Rep(const Constraint_System& cs)
-40039:   : references(0), pset(cs) {
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline
-40039: Determinate<PSET>::Rep::Rep(const Congruence_System& cgs)
-40039:   : references(0), pset(cgs) {
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline
-40039: Determinate<PSET>::Rep::~Rep() {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline void
-40039: Determinate<PSET>::Rep::new_reference() const {
-40039:   ++references;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline bool
-40039: Determinate<PSET>::Rep::del_reference() const {
-40039:   return --references == 0;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline bool
-40039: Determinate<PSET>::Rep::is_shared() const {
-40039:   return references > 1;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline memory_size_type
-40039: Determinate<PSET>::Rep::external_memory_in_bytes() const {
-40039:   return pset.external_memory_in_bytes();
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline memory_size_type
-40039: Determinate<PSET>::Rep::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline
-40039: Determinate<PSET>::Determinate(const PSET& pset)
-40039:   : prep(new Rep(pset)) {
-40039:   prep->new_reference();
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline
-40039: Determinate<PSET>::Determinate(const Constraint_System& cs)
-40039:   : prep(new Rep(cs)) {
-40039:   prep->new_reference();
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline
-40039: Determinate<PSET>::Determinate(const Congruence_System& cgs)
-40039:   : prep(new Rep(cgs)) {
-40039:   prep->new_reference();
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline
-40039: Determinate<PSET>::Determinate(const Determinate& y)
-40039:   : prep(y.prep) {
-40039:   prep->new_reference();
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline
-40039: Determinate<PSET>::~Determinate() {
-40039:   if (prep->del_reference()) {
-40039:     delete prep;
-40039:   }
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline Determinate<PSET>&
-40039: Determinate<PSET>::operator=(const Determinate& y) {
-40039:   y.prep->new_reference();
-40039:   if (prep->del_reference()) {
-40039:     delete prep;
-40039:   }
-40039:   prep = y.prep;
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline void
-40039: Determinate<PSET>::m_swap(Determinate& y) {
-40039:   using std::swap;
-40039:   swap(prep, y.prep);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline void
-40039: Determinate<PSET>::mutate() {
-40039:   if (prep->is_shared()) {
-40039:     Rep* const new_prep = new Rep(prep->pset);
-40039:     (void) prep->del_reference();
-40039:     new_prep->new_reference();
-40039:     prep = new_prep;
-40039:   }
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline const PSET&
-40039: Determinate<PSET>::pointset() const {
-40039:   return prep->pset;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline PSET&
-40039: Determinate<PSET>::pointset() {
-40039:   mutate();
-40039:   return prep->pset;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline void
-40039: Determinate<PSET>::upper_bound_assign(const Determinate& y) {
-40039:   pointset().upper_bound_assign(y.pointset());
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline void
-40039: Determinate<PSET>::meet_assign(const Determinate& y) {
-40039:   pointset().intersection_assign(y.pointset());
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline bool
-40039: Determinate<PSET>::has_nontrivial_weakening() {
-40039: 
-40039: 
-40039: 
-40039:   return false;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline void
-40039: Determinate<PSET>::weakening_assign(const Determinate& y) {
-40039: 
-40039: 
-40039: 
-40039:   pointset().difference_assign(y.pointset());
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline void
-40039: Determinate<PSET>::concatenate_assign(const Determinate& y) {
-40039:   pointset().concatenate_assign(y.pointset());
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline bool
-40039: Determinate<PSET>::definitely_entails(const Determinate& y) const {
-40039:   return prep == y.prep || y.prep->pset.contains(prep->pset);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline bool
-40039: Determinate<PSET>::is_definitely_equivalent_to(const Determinate& y) const {
-40039:   return prep == y.prep || prep->pset == y.prep->pset;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline bool
-40039: Determinate<PSET>::is_top() const {
-40039:   return prep->pset.is_universe();
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline bool
-40039: Determinate<PSET>::is_bottom() const {
-40039:   return prep->pset.is_empty();
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline memory_size_type
-40039: Determinate<PSET>::external_memory_in_bytes() const {
-40039:   return prep->total_memory_in_bytes();
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline memory_size_type
-40039: Determinate<PSET>::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline bool
-40039: Determinate<PSET>::OK() const {
-40039:   return prep->pset.OK();
-40039: }
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: template <typename PSET>
-40039: inline std::ostream&
-40039: operator<<(std::ostream& s, const Determinate<PSET>& x) {
-40039:   s << x.pointset();
-40039:   return s;
-40039: }
-40039: 
-40039: }
-40039: 
-40039: 
-40039: template <typename PSET>
-40039: inline bool
-40039: operator==(const Determinate<PSET>& x, const Determinate<PSET>& y) {
-40039:   return x.prep == y.prep || x.prep->pset == y.prep->pset;
-40039: }
-40039: 
-40039: 
-40039: template <typename PSET>
-40039: inline bool
-40039: operator!=(const Determinate<PSET>& x, const Determinate<PSET>& y) {
-40039:   return x.prep != y.prep && x.prep->pset != y.prep->pset;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: template <typename Binary_Operator_Assign>
-40039: inline
-40039: Determinate<PSET>::Binary_Operator_Assign_Lifter<Binary_Operator_Assign>::
-40039: Binary_Operator_Assign_Lifter(Binary_Operator_Assign op_assign)
-40039:   : op_assign_(op_assign) {
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: template <typename Binary_Operator_Assign>
-40039: inline void
-40039: Determinate<PSET>::Binary_Operator_Assign_Lifter<Binary_Operator_Assign>::
-40039: operator()(Determinate& x, const Determinate& y) const {
-40039:   op_assign_(x.pointset(), y.pointset());
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: template <typename Binary_Operator_Assign>
-40039: inline
-40039: Determinate<PSET>::Binary_Operator_Assign_Lifter<Binary_Operator_Assign>
-40039: Determinate<PSET>::lift_op_assign(Binary_Operator_Assign op_assign) {
-40039:   return Binary_Operator_Assign_Lifter<Binary_Operator_Assign>(op_assign);
-40039: }
-40039: 
-40039: 
-40039: template <typename PSET>
-40039: inline void
-40039: swap(Determinate<PSET>& x, Determinate<PSET>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 329 "../../src/Determinate_defs.hh" 2
-40039: # 41 "../../src/Pointset_Powerset_defs.hh" 2
-40039: # 1 "../../src/Powerset_defs.hh" 1
-40039: # 27 "../../src/Powerset_defs.hh"
-40039: # 1 "../../src/Powerset_types.hh" 1
-40039: # 16 "../../src/Powerset_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename D>
-40039: class Powerset;
-40039: 
-40039: }
-40039: # 28 "../../src/Powerset_defs.hh" 2
-40039: 
-40039: # 1 "../../src/iterator_to_const_defs.hh" 1
-40039: # 27 "../../src/iterator_to_const_defs.hh"
-40039: # 1 "../../src/iterator_to_const_types.hh" 1
-40039: # 16 "../../src/iterator_to_const_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Container>
-40039: class iterator_to_const;
-40039: 
-40039: template <typename Container>
-40039: class const_iterator_to_const;
-40039: 
-40039: }
-40039: # 28 "../../src/iterator_to_const_defs.hh" 2
-40039: # 49 "../../src/iterator_to_const_defs.hh"
-40039: template <typename Container>
-40039: class Parma_Polyhedra_Library::iterator_to_const {
-40039: private:
-40039: 
-40039:   typedef typename Container::iterator Base;
-40039: 
-40039: 
-40039:   typedef typename
-40039:   std::iterator_traits<typename Container::const_iterator> Traits;
-40039: 
-40039: 
-40039:   Base base;
-40039: 
-40039: 
-40039:   iterator_to_const(const Base& b);
-40039: 
-40039:   friend class const_iterator_to_const<Container>;
-40039:   template <typename T> friend class Powerset;
-40039: 
-40039: public:
-40039: 
-40039: 
-40039:   typedef typename Traits::iterator_category iterator_category;
-40039:   typedef typename Traits::value_type value_type;
-40039:   typedef typename Traits::difference_type difference_type;
-40039:   typedef typename Traits::pointer pointer;
-40039:   typedef typename Traits::reference reference;
-40039: 
-40039: 
-40039:   iterator_to_const();
-40039: 
-40039: 
-40039:   iterator_to_const(const iterator_to_const& y);
-40039: 
-40039: 
-40039:   reference operator*() const;
-40039: 
-40039: 
-40039:   pointer operator->() const;
-40039: 
-40039: 
-40039:   iterator_to_const& operator++();
-40039: 
-40039: 
-40039:   iterator_to_const operator++(int);
-40039: 
-40039: 
-40039:   iterator_to_const& operator--();
-40039: 
-40039: 
-40039:   iterator_to_const operator--(int);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool operator==(const iterator_to_const& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool operator!=(const iterator_to_const& y) const;
-40039: };
-40039: # 122 "../../src/iterator_to_const_defs.hh"
-40039: template <typename Container>
-40039: class Parma_Polyhedra_Library::const_iterator_to_const {
-40039: private:
-40039: 
-40039:   typedef typename Container::const_iterator Base;
-40039: 
-40039: 
-40039:   typedef typename std::iterator_traits<Base> Traits;
-40039: 
-40039: 
-40039:   Base base;
-40039: 
-40039: 
-40039:   const_iterator_to_const(const Base& b);
-40039: 
-40039:   friend class iterator_to_const<Container>;
-40039:   template <typename T> friend class Powerset;
-40039: 
-40039: public:
-40039: 
-40039:   typedef typename Traits::iterator_category iterator_category;
-40039:   typedef typename Traits::value_type value_type;
-40039:   typedef typename Traits::difference_type difference_type;
-40039:   typedef typename Traits::pointer pointer;
-40039:   typedef typename Traits::reference reference;
-40039: 
-40039: 
-40039:   const_iterator_to_const();
-40039: 
-40039: 
-40039:   const_iterator_to_const(const const_iterator_to_const& y);
-40039: 
-40039: 
-40039:   const_iterator_to_const(const iterator_to_const<Container>& y);
-40039: 
-40039: 
-40039:   reference operator*() const;
-40039: 
-40039: 
-40039:   pointer operator->() const;
-40039: 
-40039: 
-40039:   const_iterator_to_const& operator++();
-40039: 
-40039: 
-40039:   const_iterator_to_const operator++(int);
-40039: 
-40039: 
-40039:   const_iterator_to_const& operator--();
-40039: 
-40039: 
-40039:   const_iterator_to_const operator--(int);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool operator==(const const_iterator_to_const& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool operator!=(const const_iterator_to_const& y) const;
-40039: };
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: # 198 "../../src/iterator_to_const_defs.hh"
-40039: template <typename Container>
-40039: bool
-40039: operator==(const iterator_to_const<Container>& x,
-40039:            const const_iterator_to_const<Container>& y);
-40039: # 211 "../../src/iterator_to_const_defs.hh"
-40039: template <typename Container>
-40039: bool
-40039: operator!=(const iterator_to_const<Container>& x,
-40039:            const const_iterator_to_const<Container>& y);
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/iterator_to_const_inlines.hh" 1
-40039: # 28 "../../src/iterator_to_const_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Container>
-40039: inline
-40039: iterator_to_const<Container>::iterator_to_const()
-40039:   : base() {
-40039: }
-40039: 
-40039: template <typename Container>
-40039: inline
-40039: iterator_to_const<Container>::iterator_to_const(const iterator_to_const& y)
-40039:   : base(y.base) {
-40039: }
-40039: 
-40039: template <typename Container>
-40039: inline
-40039: iterator_to_const<Container>::iterator_to_const(const Base& b)
-40039:   : base(b) {
-40039: }
-40039: 
-40039: template <typename Container>
-40039: inline typename iterator_to_const<Container>::reference
-40039: iterator_to_const<Container>::operator*() const {
-40039:   return *base;
-40039: }
-40039: 
-40039: template <typename Container>
-40039: inline typename iterator_to_const<Container>::pointer
-40039: iterator_to_const<Container>::operator->() const {
-40039:   return &*base;
-40039: }
-40039: 
-40039: template <typename Container>
-40039: inline iterator_to_const<Container>&
-40039: iterator_to_const<Container>::operator++() {
-40039:   ++base;
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename Container>
-40039: inline iterator_to_const<Container>
-40039: iterator_to_const<Container>::operator++(int) {
-40039:   iterator_to_const tmp = *this;
-40039:   operator++();
-40039:   return tmp;
-40039: }
-40039: 
-40039: template <typename Container>
-40039: inline iterator_to_const<Container>&
-40039: iterator_to_const<Container>::operator--() {
-40039:   --base;
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename Container>
-40039: inline iterator_to_const<Container>
-40039: iterator_to_const<Container>::operator--(int) {
-40039:   iterator_to_const tmp = *this;
-40039:   operator--();
-40039:   return tmp;
-40039: }
-40039: 
-40039: template <typename Container>
-40039: inline bool
-40039: iterator_to_const<Container>::operator==(const iterator_to_const& y) const {
-40039:   return base == y.base;
-40039: }
-40039: 
-40039: template <typename Container>
-40039: inline bool
-40039: iterator_to_const<Container>::operator!=(const iterator_to_const& y) const {
-40039:   return !operator==(y);
-40039: }
-40039: 
-40039: template <typename Container>
-40039: inline
-40039: const_iterator_to_const<Container>::const_iterator_to_const()
-40039:   : base() {
-40039: }
-40039: 
-40039: template <typename Container>
-40039: inline
-40039: const_iterator_to_const<Container>
-40039: ::const_iterator_to_const(const const_iterator_to_const& y)
-40039:   : base(y.base) {
-40039: }
-40039: 
-40039: template <typename Container>
-40039: inline
-40039: const_iterator_to_const<Container>::const_iterator_to_const(const Base& b)
-40039:   : base(b) {
-40039: }
-40039: 
-40039: template <typename Container>
-40039: inline typename const_iterator_to_const<Container>::reference
-40039: const_iterator_to_const<Container>::operator*() const {
-40039:   return *base;
-40039: }
-40039: 
-40039: template <typename Container>
-40039: inline typename const_iterator_to_const<Container>::pointer
-40039: const_iterator_to_const<Container>::operator->() const {
-40039:   return &*base;
-40039: }
-40039: 
-40039: template <typename Container>
-40039: inline const_iterator_to_const<Container>&
-40039: const_iterator_to_const<Container>::operator++() {
-40039:   ++base;
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename Container>
-40039: inline const_iterator_to_const<Container>
-40039: const_iterator_to_const<Container>::operator++(int) {
-40039:   const_iterator_to_const tmp = *this;
-40039:   operator++();
-40039:   return tmp;
-40039: }
-40039: 
-40039: template <typename Container>
-40039: inline const_iterator_to_const<Container>&
-40039: const_iterator_to_const<Container>::operator--() {
-40039:   --base;
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename Container>
-40039: inline const_iterator_to_const<Container>
-40039: const_iterator_to_const<Container>::operator--(int) {
-40039:   const_iterator_to_const tmp = *this;
-40039:   operator--();
-40039:   return tmp;
-40039: }
-40039: 
-40039: template <typename Container>
-40039: inline bool
-40039: const_iterator_to_const<Container>
-40039: ::operator==(const const_iterator_to_const& y) const {
-40039:   return base == y.base;
-40039: }
-40039: 
-40039: template <typename Container>
-40039: inline bool
-40039: const_iterator_to_const<Container>
-40039: ::operator!=(const const_iterator_to_const& y) const {
-40039:   return !operator==(y);
-40039: }
-40039: 
-40039: template <typename Container>
-40039: inline
-40039: const_iterator_to_const<Container>
-40039: ::const_iterator_to_const(const iterator_to_const<Container>& y)
-40039:   : base(y.base) {
-40039: }
-40039: 
-40039: 
-40039: template <typename Container>
-40039: inline bool
-40039: operator==(const iterator_to_const<Container>& x,
-40039:            const const_iterator_to_const<Container>& y) {
-40039:   return const_iterator_to_const<Container>(x).operator==(y);
-40039: }
-40039: 
-40039: 
-40039: template <typename Container>
-40039: inline bool
-40039: operator!=(const iterator_to_const<Container>& x,
-40039:            const const_iterator_to_const<Container>& y) {
-40039:   return !(x == y);
-40039: }
-40039: 
-40039: }
-40039: # 219 "../../src/iterator_to_const_defs.hh" 2
-40039: # 30 "../../src/Powerset_defs.hh" 2
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/list" 1 3
-40039: # 58 "/usr/include/c++/8/list" 3
-40039:        
-40039: # 59 "/usr/include/c++/8/list" 3
-40039: 
-40039: 
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/bits/stl_list.h" 1 3
-40039: # 67 "/usr/include/c++/8/bits/stl_list.h" 3
-40039: 
-40039: # 67 "/usr/include/c++/8/bits/stl_list.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039:   namespace __detail
-40039:   {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     struct _List_node_base
-40039:     {
-40039:       _List_node_base* _M_next;
-40039:       _List_node_base* _M_prev;
-40039: 
-40039:       static void
-40039:       swap(_List_node_base& __x, _List_node_base& __y) noexcept;
-40039: 
-40039:       void
-40039:       _M_transfer(_List_node_base* const __first,
-40039:     _List_node_base* const __last) noexcept;
-40039: 
-40039:       void
-40039:       _M_reverse() noexcept;
-40039: 
-40039:       void
-40039:       _M_hook(_List_node_base* const __position) noexcept;
-40039: 
-40039:       void
-40039:       _M_unhook() noexcept;
-40039:     };
-40039: 
-40039: 
-40039:     struct _List_node_header : public _List_node_base
-40039:     {
-40039: 
-40039:       std::size_t _M_size;
-40039: 
-40039: 
-40039:       _List_node_header() noexcept
-40039:       { _M_init(); }
-40039: 
-40039: 
-40039:       _List_node_header(_List_node_header&& __x) noexcept
-40039:       : _List_node_base{ __x._M_next, __x._M_prev }
-40039: 
-40039:       , _M_size(__x._M_size)
-40039: 
-40039:       {
-40039:  if (__x._M_base()->_M_next == __x._M_base())
-40039:    this->_M_next = this->_M_prev = this;
-40039:  else
-40039:    {
-40039:      this->_M_next->_M_prev = this->_M_prev->_M_next = this->_M_base();
-40039:      __x._M_init();
-40039:    }
-40039:       }
-40039: 
-40039:       void
-40039:       _M_move_nodes(_List_node_header&& __x)
-40039:       {
-40039:  _List_node_base* const __xnode = __x._M_base();
-40039:  if (__xnode->_M_next == __xnode)
-40039:    _M_init();
-40039:  else
-40039:    {
-40039:      _List_node_base* const __node = this->_M_base();
-40039:      __node->_M_next = __xnode->_M_next;
-40039:      __node->_M_prev = __xnode->_M_prev;
-40039:      __node->_M_next->_M_prev = __node->_M_prev->_M_next = __node;
-40039: 
-40039:      _M_size = __x._M_size;
-40039: 
-40039:      __x._M_init();
-40039:    }
-40039:       }
-40039: 
-40039: 
-40039:       void
-40039:       _M_init() noexcept
-40039:       {
-40039:  this->_M_next = this->_M_prev = this;
-40039: 
-40039:  this->_M_size = 0;
-40039: 
-40039:       }
-40039: 
-40039:     private:
-40039:       _List_node_base* _M_base() { return this; }
-40039:     };
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct _List_node : public __detail::_List_node_base
-40039:     {
-40039: 
-40039:       __gnu_cxx::__aligned_membuf<_Tp> _M_storage;
-40039:       _Tp* _M_valptr() { return _M_storage._M_ptr(); }
-40039:       _Tp const* _M_valptr() const { return _M_storage._M_ptr(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct _List_iterator
-40039:     {
-40039:       typedef _List_iterator<_Tp> _Self;
-40039:       typedef _List_node<_Tp> _Node;
-40039: 
-40039:       typedef ptrdiff_t difference_type;
-40039:       typedef std::bidirectional_iterator_tag iterator_category;
-40039:       typedef _Tp value_type;
-40039:       typedef _Tp* pointer;
-40039:       typedef _Tp& reference;
-40039: 
-40039:       _List_iterator() noexcept
-40039:       : _M_node() { }
-40039: 
-40039:       explicit
-40039:       _List_iterator(__detail::_List_node_base* __x) noexcept
-40039:       : _M_node(__x) { }
-40039: 
-40039:       _Self
-40039:       _M_const_cast() const noexcept
-40039:       { return *this; }
-40039: 
-40039: 
-40039:       reference
-40039:       operator*() const noexcept
-40039:       { return *static_cast<_Node*>(_M_node)->_M_valptr(); }
-40039: 
-40039:       pointer
-40039:       operator->() const noexcept
-40039:       { return static_cast<_Node*>(_M_node)->_M_valptr(); }
-40039: 
-40039:       _Self&
-40039:       operator++() noexcept
-40039:       {
-40039:  _M_node = _M_node->_M_next;
-40039:  return *this;
-40039:       }
-40039: 
-40039:       _Self
-40039:       operator++(int) noexcept
-40039:       {
-40039:  _Self __tmp = *this;
-40039:  _M_node = _M_node->_M_next;
-40039:  return __tmp;
-40039:       }
-40039: 
-40039:       _Self&
-40039:       operator--() noexcept
-40039:       {
-40039:  _M_node = _M_node->_M_prev;
-40039:  return *this;
-40039:       }
-40039: 
-40039:       _Self
-40039:       operator--(int) noexcept
-40039:       {
-40039:  _Self __tmp = *this;
-40039:  _M_node = _M_node->_M_prev;
-40039:  return __tmp;
-40039:       }
-40039: 
-40039:       bool
-40039:       operator==(const _Self& __x) const noexcept
-40039:       { return _M_node == __x._M_node; }
-40039: 
-40039:       bool
-40039:       operator!=(const _Self& __x) const noexcept
-40039:       { return _M_node != __x._M_node; }
-40039: 
-40039: 
-40039:       __detail::_List_node_base* _M_node;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct _List_const_iterator
-40039:     {
-40039:       typedef _List_const_iterator<_Tp> _Self;
-40039:       typedef const _List_node<_Tp> _Node;
-40039:       typedef _List_iterator<_Tp> iterator;
-40039: 
-40039:       typedef ptrdiff_t difference_type;
-40039:       typedef std::bidirectional_iterator_tag iterator_category;
-40039:       typedef _Tp value_type;
-40039:       typedef const _Tp* pointer;
-40039:       typedef const _Tp& reference;
-40039: 
-40039:       _List_const_iterator() noexcept
-40039:       : _M_node() { }
-40039: 
-40039:       explicit
-40039:       _List_const_iterator(const __detail::_List_node_base* __x)
-40039:       noexcept
-40039:       : _M_node(__x) { }
-40039: 
-40039:       _List_const_iterator(const iterator& __x) noexcept
-40039:       : _M_node(__x._M_node) { }
-40039: 
-40039:       iterator
-40039:       _M_const_cast() const noexcept
-40039:       { return iterator(const_cast<__detail::_List_node_base*>(_M_node)); }
-40039: 
-40039: 
-40039:       reference
-40039:       operator*() const noexcept
-40039:       { return *static_cast<_Node*>(_M_node)->_M_valptr(); }
-40039: 
-40039:       pointer
-40039:       operator->() const noexcept
-40039:       { return static_cast<_Node*>(_M_node)->_M_valptr(); }
-40039: 
-40039:       _Self&
-40039:       operator++() noexcept
-40039:       {
-40039:  _M_node = _M_node->_M_next;
-40039:  return *this;
-40039:       }
-40039: 
-40039:       _Self
-40039:       operator++(int) noexcept
-40039:       {
-40039:  _Self __tmp = *this;
-40039:  _M_node = _M_node->_M_next;
-40039:  return __tmp;
-40039:       }
-40039: 
-40039:       _Self&
-40039:       operator--() noexcept
-40039:       {
-40039:  _M_node = _M_node->_M_prev;
-40039:  return *this;
-40039:       }
-40039: 
-40039:       _Self
-40039:       operator--(int) noexcept
-40039:       {
-40039:  _Self __tmp = *this;
-40039:  _M_node = _M_node->_M_prev;
-40039:  return __tmp;
-40039:       }
-40039: 
-40039:       bool
-40039:       operator==(const _Self& __x) const noexcept
-40039:       { return _M_node == __x._M_node; }
-40039: 
-40039:       bool
-40039:       operator!=(const _Self& __x) const noexcept
-40039:       { return _M_node != __x._M_node; }
-40039: 
-40039: 
-40039:       const __detail::_List_node_base* _M_node;
-40039:     };
-40039: 
-40039:   template<typename _Val>
-40039:     inline bool
-40039:     operator==(const _List_iterator<_Val>& __x,
-40039:         const _List_const_iterator<_Val>& __y) noexcept
-40039:     { return __x._M_node == __y._M_node; }
-40039: 
-40039:   template<typename _Val>
-40039:     inline bool
-40039:     operator!=(const _List_iterator<_Val>& __x,
-40039:         const _List_const_iterator<_Val>& __y) noexcept
-40039:     { return __x._M_node != __y._M_node; }
-40039: 
-40039: namespace __cxx11 {
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     class _List_base
-40039:     {
-40039:     protected:
-40039:       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
-40039:  rebind<_Tp>::other _Tp_alloc_type;
-40039:       typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tp_alloc_traits;
-40039:       typedef typename _Tp_alloc_traits::template
-40039:  rebind<_List_node<_Tp> >::other _Node_alloc_type;
-40039:       typedef __gnu_cxx::__alloc_traits<_Node_alloc_type> _Node_alloc_traits;
-40039: 
-40039: 
-40039:       static size_t
-40039:       _S_distance(const __detail::_List_node_base* __first,
-40039:     const __detail::_List_node_base* __last)
-40039:       {
-40039:  size_t __n = 0;
-40039:  while (__first != __last)
-40039:    {
-40039:      __first = __first->_M_next;
-40039:      ++__n;
-40039:    }
-40039:  return __n;
-40039:       }
-40039: 
-40039: 
-40039:       struct _List_impl
-40039:       : public _Node_alloc_type
-40039:       {
-40039:  __detail::_List_node_header _M_node;
-40039: 
-40039:  _List_impl() noexcept(is_nothrow_default_constructible<_Node_alloc_type>::value)
-40039: 
-40039:  : _Node_alloc_type()
-40039:  { }
-40039: 
-40039:  _List_impl(const _Node_alloc_type& __a) noexcept
-40039:  : _Node_alloc_type(__a)
-40039:  { }
-40039: 
-40039: 
-40039:  _List_impl(_List_impl&&) = default;
-40039: 
-40039:  _List_impl(_Node_alloc_type&& __a, _List_impl&& __x)
-40039:  : _Node_alloc_type(std::move(__a)), _M_node(std::move(__x._M_node))
-40039:  { }
-40039: 
-40039:  _List_impl(_Node_alloc_type&& __a) noexcept
-40039:  : _Node_alloc_type(std::move(__a))
-40039:  { }
-40039: 
-40039:       };
-40039: 
-40039:       _List_impl _M_impl;
-40039: 
-40039: 
-40039:       size_t _M_get_size() const { return _M_impl._M_node._M_size; }
-40039: 
-40039:       void _M_set_size(size_t __n) { _M_impl._M_node._M_size = __n; }
-40039: 
-40039:       void _M_inc_size(size_t __n) { _M_impl._M_node._M_size += __n; }
-40039: 
-40039:       void _M_dec_size(size_t __n) { _M_impl._M_node._M_size -= __n; }
-40039: 
-40039: 
-40039:       size_t
-40039:       _M_distance(const __detail::_List_node_base* __first,
-40039:     const __detail::_List_node_base* __last) const
-40039:       { return _S_distance(__first, __last); }
-40039: 
-40039: 
-40039:       size_t _M_node_count() const { return _M_get_size(); }
-40039: # 448 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       typename _Node_alloc_traits::pointer
-40039:       _M_get_node()
-40039:       { return _Node_alloc_traits::allocate(_M_impl, 1); }
-40039: 
-40039:       void
-40039:       _M_put_node(typename _Node_alloc_traits::pointer __p) noexcept
-40039:       { _Node_alloc_traits::deallocate(_M_impl, __p, 1); }
-40039: 
-40039:   public:
-40039:       typedef _Alloc allocator_type;
-40039: 
-40039:       _Node_alloc_type&
-40039:       _M_get_Node_allocator() noexcept
-40039:       { return _M_impl; }
-40039: 
-40039:       const _Node_alloc_type&
-40039:       _M_get_Node_allocator() const noexcept
-40039:       { return _M_impl; }
-40039: 
-40039: 
-40039:       _List_base() = default;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       _List_base(const _Node_alloc_type& __a) noexcept
-40039:       : _M_impl(__a)
-40039:       { }
-40039: 
-40039: 
-40039:       _List_base(_List_base&&) = default;
-40039: 
-40039: 
-40039:       _List_base(_List_base&& __x, _Node_alloc_type&& __a)
-40039:       : _M_impl(std::move(__a))
-40039:       {
-40039:  if (__x._M_get_Node_allocator() == _M_get_Node_allocator())
-40039:    _M_move_nodes(std::move(__x));
-40039: 
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       _List_base(_Node_alloc_type&& __a, _List_base&& __x)
-40039:       : _M_impl(std::move(__a), std::move(__x._M_impl))
-40039:       { }
-40039: 
-40039: 
-40039:       _List_base(_Node_alloc_type&& __a)
-40039:       : _M_impl(std::move(__a))
-40039:       { }
-40039: 
-40039:       void
-40039:       _M_move_nodes(_List_base&& __x)
-40039:       { _M_impl._M_node._M_move_nodes(std::move(__x._M_impl._M_node)); }
-40039: 
-40039: 
-40039: 
-40039:       ~_List_base() noexcept
-40039:       { _M_clear(); }
-40039: 
-40039:       void
-40039:       _M_clear() noexcept;
-40039: 
-40039:       void
-40039:       _M_init() noexcept
-40039:       { this->_M_impl._M_node._M_init(); }
-40039:     };
-40039: # 563 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:   template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
-40039:     class list : protected _List_base<_Tp, _Alloc>
-40039:     {
-40039: # 576 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       static_assert(is_same<typename remove_cv<_Tp>::type, _Tp>::value,
-40039:    "std::list must have a non-const, non-volatile value_type");
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       typedef _List_base<_Tp, _Alloc> _Base;
-40039:       typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
-40039:       typedef typename _Base::_Tp_alloc_traits _Tp_alloc_traits;
-40039:       typedef typename _Base::_Node_alloc_type _Node_alloc_type;
-40039:       typedef typename _Base::_Node_alloc_traits _Node_alloc_traits;
-40039: 
-40039:     public:
-40039:       typedef _Tp value_type;
-40039:       typedef typename _Tp_alloc_traits::pointer pointer;
-40039:       typedef typename _Tp_alloc_traits::const_pointer const_pointer;
-40039:       typedef typename _Tp_alloc_traits::reference reference;
-40039:       typedef typename _Tp_alloc_traits::const_reference const_reference;
-40039:       typedef _List_iterator<_Tp> iterator;
-40039:       typedef _List_const_iterator<_Tp> const_iterator;
-40039:       typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
-40039:       typedef std::reverse_iterator<iterator> reverse_iterator;
-40039:       typedef size_t size_type;
-40039:       typedef ptrdiff_t difference_type;
-40039:       typedef _Alloc allocator_type;
-40039: 
-40039:     protected:
-40039: 
-40039: 
-40039:       typedef _List_node<_Tp> _Node;
-40039: 
-40039:       using _Base::_M_impl;
-40039:       using _Base::_M_put_node;
-40039:       using _Base::_M_get_node;
-40039:       using _Base::_M_get_Node_allocator;
-40039: # 638 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       template<typename... _Args>
-40039:  _Node*
-40039:  _M_create_node(_Args&&... __args)
-40039:  {
-40039:    auto __p = this->_M_get_node();
-40039:    auto& __alloc = _M_get_Node_allocator();
-40039:    __allocated_ptr<_Node_alloc_type> __guard{__alloc, __p};
-40039:    _Node_alloc_traits::construct(__alloc, __p->_M_valptr(),
-40039:      std::forward<_Args>(__args)...);
-40039:    __guard = nullptr;
-40039:    return __p;
-40039:  }
-40039: 
-40039: 
-40039: 
-40039:       static size_t
-40039:       _S_distance(const_iterator __first, const_iterator __last)
-40039:       { return std::distance(__first, __last); }
-40039: 
-40039: 
-40039:       size_t
-40039:       _M_node_count() const
-40039:       { return this->_M_get_size(); }
-40039: # 673 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       list() = default;
-40039: # 690 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       explicit
-40039:       list(const allocator_type& __a) noexcept
-40039:       : _Base(_Node_alloc_type(__a)) { }
-40039: # 703 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       explicit
-40039:       list(size_type __n, const allocator_type& __a = allocator_type())
-40039:       : _Base(_Node_alloc_type(__a))
-40039:       { _M_default_initialize(__n); }
-40039: # 716 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       list(size_type __n, const value_type& __value,
-40039:     const allocator_type& __a = allocator_type())
-40039:       : _Base(_Node_alloc_type(__a))
-40039:       { _M_fill_initialize(__n, __value); }
-40039: # 743 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       list(const list& __x)
-40039:       : _Base(_Node_alloc_traits::
-40039:        _S_select_on_copy(__x._M_get_Node_allocator()))
-40039:       { _M_initialize_dispatch(__x.begin(), __x.end(), __false_type()); }
-40039: # 756 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       list(list&&) = default;
-40039: # 766 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       list(initializer_list<value_type> __l,
-40039:     const allocator_type& __a = allocator_type())
-40039:       : _Base(_Node_alloc_type(__a))
-40039:       { _M_initialize_dispatch(__l.begin(), __l.end(), __false_type()); }
-40039: 
-40039:       list(const list& __x, const allocator_type& __a)
-40039:       : _Base(_Node_alloc_type(__a))
-40039:       { _M_initialize_dispatch(__x.begin(), __x.end(), __false_type()); }
-40039: 
-40039:     private:
-40039:       list(list&& __x, const allocator_type& __a, true_type) noexcept
-40039:       : _Base(_Node_alloc_type(__a), std::move(__x))
-40039:       { }
-40039: 
-40039:       list(list&& __x, const allocator_type& __a, false_type)
-40039:       : _Base(_Node_alloc_type(__a))
-40039:       {
-40039:  if (__x._M_get_Node_allocator() == this->_M_get_Node_allocator())
-40039:    this->_M_move_nodes(std::move(__x));
-40039:  else
-40039:    insert(begin(), std::__make_move_if_noexcept_iterator(__x.begin()),
-40039:      std::__make_move_if_noexcept_iterator(__x.end()));
-40039:       }
-40039: 
-40039:     public:
-40039:       list(list&& __x, const allocator_type& __a)
-40039:       noexcept(_Node_alloc_traits::_S_always_equal())
-40039:       : list(std::move(__x), __a,
-40039:       typename _Node_alloc_traits::is_always_equal{})
-40039:       { }
-40039: # 809 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       template<typename _InputIterator,
-40039:         typename = std::_RequireInputIter<_InputIterator>>
-40039:  list(_InputIterator __first, _InputIterator __last,
-40039:       const allocator_type& __a = allocator_type())
-40039:  : _Base(_Node_alloc_type(__a))
-40039:  { _M_initialize_dispatch(__first, __last, __false_type()); }
-40039: # 835 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       ~list() = default;
-40039: # 846 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       list&
-40039:       operator=(const list& __x);
-40039: # 860 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       list&
-40039:       operator=(list&& __x)
-40039:       noexcept(_Node_alloc_traits::_S_nothrow_move())
-40039:       {
-40039:  constexpr bool __move_storage =
-40039:    _Node_alloc_traits::_S_propagate_on_move_assign()
-40039:    || _Node_alloc_traits::_S_always_equal();
-40039:  _M_move_assign(std::move(__x), __bool_constant<__move_storage>());
-40039:  return *this;
-40039:       }
-40039: # 878 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       list&
-40039:       operator=(initializer_list<value_type> __l)
-40039:       {
-40039:  this->assign(__l.begin(), __l.end());
-40039:  return *this;
-40039:       }
-40039: # 896 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       void
-40039:       assign(size_type __n, const value_type& __val)
-40039:       { _M_fill_assign(__n, __val); }
-40039: # 913 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       template<typename _InputIterator,
-40039:         typename = std::_RequireInputIter<_InputIterator>>
-40039:  void
-40039:  assign(_InputIterator __first, _InputIterator __last)
-40039:  { _M_assign_dispatch(__first, __last, __false_type()); }
-40039: # 937 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       void
-40039:       assign(initializer_list<value_type> __l)
-40039:       { this->_M_assign_dispatch(__l.begin(), __l.end(), __false_type()); }
-40039: 
-40039: 
-40039: 
-40039:       allocator_type
-40039:       get_allocator() const noexcept
-40039:       { return allocator_type(_Base::_M_get_Node_allocator()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       begin() noexcept
-40039:       { return iterator(this->_M_impl._M_node._M_next); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       begin() const noexcept
-40039:       { return const_iterator(this->_M_impl._M_node._M_next); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       iterator
-40039:       end() noexcept
-40039:       { return iterator(&this->_M_impl._M_node); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       end() const noexcept
-40039:       { return const_iterator(&this->_M_impl._M_node); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       rbegin() noexcept
-40039:       { return reverse_iterator(end()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       rbegin() const noexcept
-40039:       { return const_reverse_iterator(end()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reverse_iterator
-40039:       rend() noexcept
-40039:       { return reverse_iterator(begin()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       rend() const noexcept
-40039:       { return const_reverse_iterator(begin()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       cbegin() const noexcept
-40039:       { return const_iterator(this->_M_impl._M_node._M_next); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_iterator
-40039:       cend() const noexcept
-40039:       { return const_iterator(&this->_M_impl._M_node); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       crbegin() const noexcept
-40039:       { return const_reverse_iterator(end()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reverse_iterator
-40039:       crend() const noexcept
-40039:       { return const_reverse_iterator(begin()); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       bool
-40039:       empty() const noexcept
-40039:       { return this->_M_impl._M_node._M_next == &this->_M_impl._M_node; }
-40039: 
-40039: 
-40039:       size_type
-40039:       size() const noexcept
-40039:       { return _M_node_count(); }
-40039: 
-40039: 
-40039:       size_type
-40039:       max_size() const noexcept
-40039:       { return _Node_alloc_traits::max_size(_M_get_Node_allocator()); }
-40039: # 1086 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       void
-40039:       resize(size_type __new_size);
-40039: # 1099 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       void
-40039:       resize(size_type __new_size, const value_type& __x);
-40039: # 1121 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       reference
-40039:       front() noexcept
-40039:       { return *begin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reference
-40039:       front() const noexcept
-40039:       { return *begin(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       reference
-40039:       back() noexcept
-40039:       {
-40039:  iterator __tmp = end();
-40039:  --__tmp;
-40039:  return *__tmp;
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       const_reference
-40039:       back() const noexcept
-40039:       {
-40039:  const_iterator __tmp = end();
-40039:  --__tmp;
-40039:  return *__tmp;
-40039:       }
-40039: # 1168 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       void
-40039:       push_front(const value_type& __x)
-40039:       { this->_M_insert(begin(), __x); }
-40039: 
-40039: 
-40039:       void
-40039:       push_front(value_type&& __x)
-40039:       { this->_M_insert(begin(), std::move(__x)); }
-40039: 
-40039:       template<typename... _Args>
-40039: 
-40039: 
-40039: 
-40039:  void
-40039: 
-40039:  emplace_front(_Args&&... __args)
-40039:  {
-40039:    this->_M_insert(begin(), std::forward<_Args>(__args)...);
-40039: 
-40039: 
-40039: 
-40039:  }
-40039: # 1204 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       void
-40039:       pop_front() noexcept
-40039:       { this->_M_erase(begin()); }
-40039: # 1218 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       void
-40039:       push_back(const value_type& __x)
-40039:       { this->_M_insert(end(), __x); }
-40039: 
-40039: 
-40039:       void
-40039:       push_back(value_type&& __x)
-40039:       { this->_M_insert(end(), std::move(__x)); }
-40039: 
-40039:       template<typename... _Args>
-40039: 
-40039: 
-40039: 
-40039:  void
-40039: 
-40039:  emplace_back(_Args&&... __args)
-40039:  {
-40039:    this->_M_insert(end(), std::forward<_Args>(__args)...);
-40039: 
-40039: 
-40039: 
-40039:  }
-40039: # 1253 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       void
-40039:       pop_back() noexcept
-40039:       { this->_M_erase(iterator(this->_M_impl._M_node._M_prev)); }
-40039: # 1270 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       template<typename... _Args>
-40039:  iterator
-40039:  emplace(const_iterator __position, _Args&&... __args);
-40039: # 1285 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       iterator
-40039:       insert(const_iterator __position, const value_type& __x);
-40039: # 1315 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       iterator
-40039:       insert(const_iterator __position, value_type&& __x)
-40039:       { return emplace(__position, std::move(__x)); }
-40039: # 1334 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       iterator
-40039:       insert(const_iterator __p, initializer_list<value_type> __l)
-40039:       { return this->insert(__p, __l.begin(), __l.end()); }
-40039: # 1354 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       iterator
-40039:       insert(const_iterator __position, size_type __n, const value_type& __x);
-40039: # 1393 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       template<typename _InputIterator,
-40039:         typename = std::_RequireInputIter<_InputIterator>>
-40039:  iterator
-40039:  insert(const_iterator __position, _InputIterator __first,
-40039:         _InputIterator __last);
-40039: # 1437 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       iterator
-40039: 
-40039:       erase(const_iterator __position) noexcept;
-40039: # 1462 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       iterator
-40039: 
-40039:       erase(const_iterator __first, const_iterator __last) noexcept
-40039: 
-40039: 
-40039: 
-40039:       {
-40039:  while (__first != __last)
-40039:    __first = erase(__first);
-40039:  return __last._M_const_cast();
-40039:       }
-40039: # 1485 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       void
-40039:       swap(list& __x) noexcept
-40039:       {
-40039:  __detail::_List_node_base::swap(this->_M_impl._M_node,
-40039:      __x._M_impl._M_node);
-40039: 
-40039:  size_t __xsize = __x._M_get_size();
-40039:  __x._M_set_size(this->_M_get_size());
-40039:  this->_M_set_size(__xsize);
-40039: 
-40039:  _Node_alloc_traits::_S_on_swap(this->_M_get_Node_allocator(),
-40039:            __x._M_get_Node_allocator());
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       clear() noexcept
-40039:       {
-40039:  _Base::_M_clear();
-40039:  _Base::_M_init();
-40039:       }
-40039: # 1524 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       void
-40039: 
-40039:       splice(const_iterator __position, list&& __x) noexcept
-40039: 
-40039: 
-40039: 
-40039:       {
-40039:  if (!__x.empty())
-40039:    {
-40039:      _M_check_equal_allocators(__x);
-40039: 
-40039:      this->_M_transfer(__position._M_const_cast(),
-40039:          __x.begin(), __x.end());
-40039: 
-40039:      this->_M_inc_size(__x._M_get_size());
-40039:      __x._M_set_size(0);
-40039:    }
-40039:       }
-40039: 
-40039: 
-40039:       void
-40039:       splice(const_iterator __position, list& __x) noexcept
-40039:       { splice(__position, std::move(__x)); }
-40039: # 1560 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       void
-40039:       splice(const_iterator __position, list&& __x, const_iterator __i) noexcept
-40039: # 1575 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       {
-40039:  iterator __j = __i._M_const_cast();
-40039:  ++__j;
-40039:  if (__position == __i || __position == __j)
-40039:    return;
-40039: 
-40039:  if (this != std::__addressof(__x))
-40039:    _M_check_equal_allocators(__x);
-40039: 
-40039:  this->_M_transfer(__position._M_const_cast(),
-40039:      __i._M_const_cast(), __j);
-40039: 
-40039:  this->_M_inc_size(1);
-40039:  __x._M_dec_size(1);
-40039:       }
-40039: # 1602 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       void
-40039:       splice(const_iterator __position, list& __x, const_iterator __i) noexcept
-40039:       { splice(__position, std::move(__x), __i); }
-40039: # 1621 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       void
-40039:       splice(const_iterator __position, list&& __x, const_iterator __first,
-40039:       const_iterator __last) noexcept
-40039: # 1641 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       {
-40039:  if (__first != __last)
-40039:    {
-40039:      if (this != std::__addressof(__x))
-40039:        _M_check_equal_allocators(__x);
-40039: 
-40039:      size_t __n = _S_distance(__first, __last);
-40039:      this->_M_inc_size(__n);
-40039:      __x._M_dec_size(__n);
-40039: 
-40039:      this->_M_transfer(__position._M_const_cast(),
-40039:          __first._M_const_cast(),
-40039:          __last._M_const_cast());
-40039:    }
-40039:       }
-40039: # 1671 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       void
-40039:       splice(const_iterator __position, list& __x, const_iterator __first,
-40039:       const_iterator __last) noexcept
-40039:       { splice(__position, std::move(__x), __first, __last); }
-40039: # 1688 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       void
-40039:       remove(const _Tp& __value);
-40039: # 1702 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       template<typename _Predicate>
-40039:  void
-40039:  remove_if(_Predicate);
-40039: # 1716 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       void
-40039:       unique();
-40039: # 1731 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       template<typename _BinaryPredicate>
-40039:  void
-40039:  unique(_BinaryPredicate);
-40039: # 1745 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       void
-40039:       merge(list&& __x);
-40039: 
-40039:       void
-40039:       merge(list& __x)
-40039:       { merge(std::move(__x)); }
-40039: # 1770 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       template<typename _StrictWeakOrdering>
-40039:  void
-40039:  merge(list&& __x, _StrictWeakOrdering __comp);
-40039: 
-40039:       template<typename _StrictWeakOrdering>
-40039:  void
-40039:  merge(list& __x, _StrictWeakOrdering __comp)
-40039:  { merge(std::move(__x), __comp); }
-40039: # 1789 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       void
-40039:       reverse() noexcept
-40039:       { this->_M_impl._M_node._M_reverse(); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       sort();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       template<typename _StrictWeakOrdering>
-40039:  void
-40039:  sort(_StrictWeakOrdering);
-40039: 
-40039:     protected:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Integer>
-40039:  void
-40039:  _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type)
-40039:  { _M_fill_initialize(static_cast<size_type>(__n), __x); }
-40039: 
-40039: 
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
-40039:           __false_type)
-40039:  {
-40039:    for (; __first != __last; ++__first)
-40039: 
-40039:      emplace_back(*__first);
-40039: 
-40039: 
-40039: 
-40039:  }
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_fill_initialize(size_type __n, const value_type& __x)
-40039:       {
-40039:  for (; __n; --__n)
-40039:    push_back(__x);
-40039:       }
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_default_initialize(size_type __n)
-40039:       {
-40039:  for (; __n; --__n)
-40039:    emplace_back();
-40039:       }
-40039: 
-40039: 
-40039:       void
-40039:       _M_default_append(size_type __n);
-40039: # 1867 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:       template<typename _Integer>
-40039:  void
-40039:  _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
-40039:  { _M_fill_assign(__n, __val); }
-40039: 
-40039: 
-40039:       template<typename _InputIterator>
-40039:  void
-40039:  _M_assign_dispatch(_InputIterator __first, _InputIterator __last,
-40039:       __false_type);
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_fill_assign(size_type __n, const value_type& __val);
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_transfer(iterator __position, iterator __first, iterator __last)
-40039:       { __position._M_node->_M_transfer(__first._M_node, __last._M_node); }
-40039: # 1899 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:      template<typename... _Args>
-40039:        void
-40039:        _M_insert(iterator __position, _Args&&... __args)
-40039:        {
-40039:   _Node* __tmp = _M_create_node(std::forward<_Args>(__args)...);
-40039:   __tmp->_M_hook(__position._M_node);
-40039:   this->_M_inc_size(1);
-40039:        }
-40039: 
-40039: 
-40039: 
-40039:       void
-40039:       _M_erase(iterator __position) noexcept
-40039:       {
-40039:  this->_M_dec_size(1);
-40039:  __position._M_node->_M_unhook();
-40039:  _Node* __n = static_cast<_Node*>(__position._M_node);
-40039: 
-40039:  _Node_alloc_traits::destroy(_M_get_Node_allocator(), __n->_M_valptr());
-40039: 
-40039: 
-40039: 
-40039: 
-40039:  _M_put_node(__n);
-40039:       }
-40039: 
-40039: 
-40039:       void
-40039:       _M_check_equal_allocators(list& __x) noexcept
-40039:       {
-40039:  if (std::__alloc_neq<typename _Base::_Node_alloc_type>::
-40039:      _S_do_it(_M_get_Node_allocator(), __x._M_get_Node_allocator()))
-40039:    __builtin_abort();
-40039:       }
-40039: 
-40039: 
-40039:       const_iterator
-40039:       _M_resize_pos(size_type& __new_size) const;
-40039: 
-40039: 
-40039:       void
-40039:       _M_move_assign(list&& __x, true_type) noexcept
-40039:       {
-40039:  this->_M_clear();
-40039:  this->_M_move_nodes(std::move(__x));
-40039:  std::__alloc_on_move(this->_M_get_Node_allocator(),
-40039:         __x._M_get_Node_allocator());
-40039:       }
-40039: 
-40039:       void
-40039:       _M_move_assign(list&& __x, false_type)
-40039:       {
-40039:  if (__x._M_get_Node_allocator() == this->_M_get_Node_allocator())
-40039:    _M_move_assign(std::move(__x), true_type{});
-40039:  else
-40039: 
-40039: 
-40039:    _M_assign_dispatch(std::__make_move_if_noexcept_iterator(__x.begin()),
-40039:         std::__make_move_if_noexcept_iterator(__x.end()),
-40039:         __false_type{});
-40039:       }
-40039: 
-40039:     };
-40039: # 1973 "/usr/include/c++/8/bits/stl_list.h" 3
-40039: }
-40039: # 1985 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:   template<typename _Tp, typename _Alloc>
-40039:     inline bool
-40039:     operator==(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y)
-40039:     {
-40039: 
-40039:       if (__x.size() != __y.size())
-40039:  return false;
-40039: 
-40039: 
-40039:       typedef typename list<_Tp, _Alloc>::const_iterator const_iterator;
-40039:       const_iterator __end1 = __x.end();
-40039:       const_iterator __end2 = __y.end();
-40039: 
-40039:       const_iterator __i1 = __x.begin();
-40039:       const_iterator __i2 = __y.begin();
-40039:       while (__i1 != __end1 && __i2 != __end2 && *__i1 == *__i2)
-40039:  {
-40039:    ++__i1;
-40039:    ++__i2;
-40039:  }
-40039:       return __i1 == __end1 && __i2 == __end2;
-40039:     }
-40039: # 2019 "/usr/include/c++/8/bits/stl_list.h" 3
-40039:   template<typename _Tp, typename _Alloc>
-40039:     inline bool
-40039:     operator<(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y)
-40039:     { return std::lexicographical_compare(__x.begin(), __x.end(),
-40039:        __y.begin(), __y.end()); }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     inline bool
-40039:     operator!=(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y)
-40039:     { return !(__x == __y); }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     inline bool
-40039:     operator>(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y)
-40039:     { return __y < __x; }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     inline bool
-40039:     operator<=(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y)
-40039:     { return !(__y < __x); }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     inline bool
-40039:     operator>=(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y)
-40039:     { return !(__x < __y); }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     inline void
-40039:     swap(list<_Tp, _Alloc>& __x, list<_Tp, _Alloc>& __y)
-40039:     noexcept(noexcept(__x.swap(__y)))
-40039:     { __x.swap(__y); }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     inline ptrdiff_t
-40039:     __distance(std::_List_iterator<_Tp> __first,
-40039:         std::_List_iterator<_Tp> __last,
-40039:         input_iterator_tag __tag)
-40039:     {
-40039:       typedef std::_List_const_iterator<_Tp> _CIter;
-40039:       return std::__distance(_CIter(__first), _CIter(__last), __tag);
-40039:     }
-40039: 
-40039:   template<typename _Tp>
-40039:     inline ptrdiff_t
-40039:     __distance(std::_List_const_iterator<_Tp> __first,
-40039:         std::_List_const_iterator<_Tp> __last,
-40039:         input_iterator_tag)
-40039:     {
-40039:       typedef __detail::_List_node_header _Sentinel;
-40039:       std::_List_const_iterator<_Tp> __beyond = __last;
-40039:       ++__beyond;
-40039:       const bool __whole = __first == __beyond;
-40039:       if (__builtin_constant_p (__whole) && __whole)
-40039:  return static_cast<const _Sentinel*>(__last._M_node)->_M_size;
-40039: 
-40039:       ptrdiff_t __n = 0;
-40039:       while (__first != __last)
-40039:  {
-40039:    ++__first;
-40039:    ++__n;
-40039:  }
-40039:       return __n;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 64 "/usr/include/c++/8/list" 2 3
-40039: # 1 "/usr/include/c++/8/bits/list.tcc" 1 3
-40039: # 59 "/usr/include/c++/8/bits/list.tcc" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     void
-40039:     _List_base<_Tp, _Alloc>::
-40039:     _M_clear() noexcept
-40039:     {
-40039:       typedef _List_node<_Tp> _Node;
-40039:       __detail::_List_node_base* __cur = _M_impl._M_node._M_next;
-40039:       while (__cur != &_M_impl._M_node)
-40039:  {
-40039:    _Node* __tmp = static_cast<_Node*>(__cur);
-40039:    __cur = __tmp->_M_next;
-40039:    _Tp* __val = __tmp->_M_valptr();
-40039: 
-40039:    _Node_alloc_traits::destroy(_M_get_Node_allocator(), __val);
-40039: 
-40039: 
-40039: 
-40039:    _M_put_node(__tmp);
-40039:  }
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     template<typename... _Args>
-40039:       typename list<_Tp, _Alloc>::iterator
-40039:       list<_Tp, _Alloc>::
-40039:       emplace(const_iterator __position, _Args&&... __args)
-40039:       {
-40039:  _Node* __tmp = _M_create_node(std::forward<_Args>(__args)...);
-40039:  __tmp->_M_hook(__position._M_const_cast()._M_node);
-40039:  this->_M_inc_size(1);
-40039:  return iterator(__tmp);
-40039:       }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     typename list<_Tp, _Alloc>::iterator
-40039:     list<_Tp, _Alloc>::
-40039: 
-40039:     insert(const_iterator __position, const value_type& __x)
-40039: 
-40039: 
-40039: 
-40039:     {
-40039:       _Node* __tmp = _M_create_node(__x);
-40039:       __tmp->_M_hook(__position._M_const_cast()._M_node);
-40039:       this->_M_inc_size(1);
-40039:       return iterator(__tmp);
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     typename list<_Tp, _Alloc>::iterator
-40039:     list<_Tp, _Alloc>::
-40039:     insert(const_iterator __position, size_type __n, const value_type& __x)
-40039:     {
-40039:       if (__n)
-40039:  {
-40039:    list __tmp(__n, __x, get_allocator());
-40039:    iterator __it = __tmp.begin();
-40039:    splice(__position, __tmp);
-40039:    return __it;
-40039:  }
-40039:       return __position._M_const_cast();
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     template<typename _InputIterator, typename>
-40039:       typename list<_Tp, _Alloc>::iterator
-40039:       list<_Tp, _Alloc>::
-40039:       insert(const_iterator __position, _InputIterator __first,
-40039:       _InputIterator __last)
-40039:       {
-40039:  list __tmp(__first, __last, get_allocator());
-40039:  if (!__tmp.empty())
-40039:    {
-40039:      iterator __it = __tmp.begin();
-40039:      splice(__position, __tmp);
-40039:      return __it;
-40039:    }
-40039:  return __position._M_const_cast();
-40039:       }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     typename list<_Tp, _Alloc>::iterator
-40039:     list<_Tp, _Alloc>::
-40039: 
-40039:     erase(const_iterator __position) noexcept
-40039: 
-40039: 
-40039: 
-40039:     {
-40039:       iterator __ret = iterator(__position._M_node->_M_next);
-40039:       _M_erase(__position._M_const_cast());
-40039:       return __ret;
-40039:     }
-40039: # 173 "/usr/include/c++/8/bits/list.tcc" 3
-40039:   template<typename _Tp, typename _Alloc>
-40039:     typename list<_Tp, _Alloc>::const_iterator
-40039:     list<_Tp, _Alloc>::
-40039:     _M_resize_pos(size_type& __new_size) const
-40039:     {
-40039:       const_iterator __i;
-40039: 
-40039:       const size_type __len = size();
-40039:       if (__new_size < __len)
-40039:  {
-40039:    if (__new_size <= __len / 2)
-40039:      {
-40039:        __i = begin();
-40039:        std::advance(__i, __new_size);
-40039:      }
-40039:    else
-40039:      {
-40039:        __i = end();
-40039:        ptrdiff_t __num_erase = __len - __new_size;
-40039:        std::advance(__i, -__num_erase);
-40039:      }
-40039:    __new_size = 0;
-40039:    return __i;
-40039:  }
-40039:       else
-40039:  __i = end();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       __new_size -= __len;
-40039:       return __i;
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     void
-40039:     list<_Tp, _Alloc>::
-40039:     _M_default_append(size_type __n)
-40039:     {
-40039:       size_type __i = 0;
-40039:       try
-40039:  {
-40039:    for (; __i < __n; ++__i)
-40039:      emplace_back();
-40039:  }
-40039:       catch(...)
-40039:  {
-40039:    for (; __i; --__i)
-40039:      pop_back();
-40039:    throw;
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     void
-40039:     list<_Tp, _Alloc>::
-40039:     resize(size_type __new_size)
-40039:     {
-40039:       const_iterator __i = _M_resize_pos(__new_size);
-40039:       if (__new_size)
-40039:  _M_default_append(__new_size);
-40039:       else
-40039:         erase(__i, end());
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     void
-40039:     list<_Tp, _Alloc>::
-40039:     resize(size_type __new_size, const value_type& __x)
-40039:     {
-40039:       const_iterator __i = _M_resize_pos(__new_size);
-40039:       if (__new_size)
-40039:         insert(end(), __new_size, __x);
-40039:       else
-40039:         erase(__i, end());
-40039:     }
-40039: # 265 "/usr/include/c++/8/bits/list.tcc" 3
-40039:   template<typename _Tp, typename _Alloc>
-40039:     list<_Tp, _Alloc>&
-40039:     list<_Tp, _Alloc>::
-40039:     operator=(const list& __x)
-40039:     {
-40039:       if (this != std::__addressof(__x))
-40039:  {
-40039: 
-40039:    if (_Node_alloc_traits::_S_propagate_on_copy_assign())
-40039:      {
-40039:               auto& __this_alloc = this->_M_get_Node_allocator();
-40039:               auto& __that_alloc = __x._M_get_Node_allocator();
-40039:               if (!_Node_alloc_traits::_S_always_equal()
-40039:            && __this_alloc != __that_alloc)
-40039:          {
-40039: 
-40039:     clear();
-40039:   }
-40039:        std::__alloc_on_copy(__this_alloc, __that_alloc);
-40039:             }
-40039: 
-40039:    _M_assign_dispatch(__x.begin(), __x.end(), __false_type());
-40039:  }
-40039:       return *this;
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     void
-40039:     list<_Tp, _Alloc>::
-40039:     _M_fill_assign(size_type __n, const value_type& __val)
-40039:     {
-40039:       iterator __i = begin();
-40039:       for (; __i != end() && __n > 0; ++__i, --__n)
-40039:         *__i = __val;
-40039:       if (__n > 0)
-40039:         insert(end(), __n, __val);
-40039:       else
-40039:         erase(__i, end());
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     template <typename _InputIterator>
-40039:       void
-40039:       list<_Tp, _Alloc>::
-40039:       _M_assign_dispatch(_InputIterator __first2, _InputIterator __last2,
-40039:     __false_type)
-40039:       {
-40039:         iterator __first1 = begin();
-40039:         iterator __last1 = end();
-40039:         for (; __first1 != __last1 && __first2 != __last2;
-40039:       ++__first1, ++__first2)
-40039:           *__first1 = *__first2;
-40039:         if (__first2 == __last2)
-40039:           erase(__first1, __last1);
-40039:         else
-40039:           insert(__last1, __first2, __last2);
-40039:       }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     void
-40039:     list<_Tp, _Alloc>::
-40039:     remove(const value_type& __value)
-40039:     {
-40039:       iterator __first = begin();
-40039:       iterator __last = end();
-40039:       iterator __extra = __last;
-40039:       while (__first != __last)
-40039:  {
-40039:    iterator __next = __first;
-40039:    ++__next;
-40039:    if (*__first == __value)
-40039:      {
-40039: 
-40039: 
-40039: 
-40039:        if (std::__addressof(*__first) != std::__addressof(__value))
-40039:   _M_erase(__first);
-40039:        else
-40039:   __extra = __first;
-40039:      }
-40039:    __first = __next;
-40039:  }
-40039:       if (__extra != __last)
-40039:  _M_erase(__extra);
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     void
-40039:     list<_Tp, _Alloc>::
-40039:     unique()
-40039:     {
-40039:       iterator __first = begin();
-40039:       iterator __last = end();
-40039:       if (__first == __last)
-40039:  return;
-40039:       iterator __next = __first;
-40039:       while (++__next != __last)
-40039:  {
-40039:    if (*__first == *__next)
-40039:      _M_erase(__next);
-40039:    else
-40039:      __first = __next;
-40039:    __next = __first;
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     void
-40039:     list<_Tp, _Alloc>::
-40039: 
-40039:     merge(list&& __x)
-40039: 
-40039: 
-40039: 
-40039:     {
-40039: 
-40039: 
-40039:       if (this != std::__addressof(__x))
-40039:  {
-40039:    _M_check_equal_allocators(__x);
-40039: 
-40039:    iterator __first1 = begin();
-40039:    iterator __last1 = end();
-40039:    iterator __first2 = __x.begin();
-40039:    iterator __last2 = __x.end();
-40039:    const size_t __orig_size = __x.size();
-40039:    try {
-40039:      while (__first1 != __last1 && __first2 != __last2)
-40039:        if (*__first2 < *__first1)
-40039:   {
-40039:     iterator __next = __first2;
-40039:     _M_transfer(__first1, __first2, ++__next);
-40039:     __first2 = __next;
-40039:   }
-40039:        else
-40039:   ++__first1;
-40039:      if (__first2 != __last2)
-40039:        _M_transfer(__last1, __first2, __last2);
-40039: 
-40039:      this->_M_inc_size(__x._M_get_size());
-40039:      __x._M_set_size(0);
-40039:    }
-40039:    catch(...)
-40039:      {
-40039:        const size_t __dist = std::distance(__first2, __last2);
-40039:        this->_M_inc_size(__orig_size - __dist);
-40039:        __x._M_set_size(__dist);
-40039:        throw;
-40039:      }
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     template <typename _StrictWeakOrdering>
-40039:       void
-40039:       list<_Tp, _Alloc>::
-40039: 
-40039:       merge(list&& __x, _StrictWeakOrdering __comp)
-40039: 
-40039: 
-40039: 
-40039:       {
-40039: 
-40039: 
-40039:  if (this != std::__addressof(__x))
-40039:    {
-40039:      _M_check_equal_allocators(__x);
-40039: 
-40039:      iterator __first1 = begin();
-40039:      iterator __last1 = end();
-40039:      iterator __first2 = __x.begin();
-40039:      iterator __last2 = __x.end();
-40039:      const size_t __orig_size = __x.size();
-40039:      try
-40039:        {
-40039:   while (__first1 != __last1 && __first2 != __last2)
-40039:     if (__comp(*__first2, *__first1))
-40039:       {
-40039:         iterator __next = __first2;
-40039:         _M_transfer(__first1, __first2, ++__next);
-40039:         __first2 = __next;
-40039:       }
-40039:     else
-40039:       ++__first1;
-40039:   if (__first2 != __last2)
-40039:     _M_transfer(__last1, __first2, __last2);
-40039: 
-40039:   this->_M_inc_size(__x._M_get_size());
-40039:   __x._M_set_size(0);
-40039:        }
-40039:      catch(...)
-40039:        {
-40039:   const size_t __dist = std::distance(__first2, __last2);
-40039:   this->_M_inc_size(__orig_size - __dist);
-40039:   __x._M_set_size(__dist);
-40039:   throw;
-40039:        }
-40039:    }
-40039:       }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     void
-40039:     list<_Tp, _Alloc>::
-40039:     sort()
-40039:     {
-40039: 
-40039:       if (this->_M_impl._M_node._M_next != &this->_M_impl._M_node
-40039:    && this->_M_impl._M_node._M_next->_M_next != &this->_M_impl._M_node)
-40039:       {
-40039:         list __carry;
-40039:         list __tmp[64];
-40039:         list * __fill = __tmp;
-40039:         list * __counter;
-40039:  try
-40039:    {
-40039:      do
-40039:        {
-40039:   __carry.splice(__carry.begin(), *this, begin());
-40039: 
-40039:   for(__counter = __tmp;
-40039:       __counter != __fill && !__counter->empty();
-40039:       ++__counter)
-40039:     {
-40039:       __counter->merge(__carry);
-40039:       __carry.swap(*__counter);
-40039:     }
-40039:   __carry.swap(*__counter);
-40039:   if (__counter == __fill)
-40039:     ++__fill;
-40039:        }
-40039:      while ( !empty() );
-40039: 
-40039:      for (__counter = __tmp + 1; __counter != __fill; ++__counter)
-40039:        __counter->merge(*(__counter - 1));
-40039:      swap( *(__fill - 1) );
-40039:    }
-40039:  catch(...)
-40039:    {
-40039:      this->splice(this->end(), __carry);
-40039:      for (int __i = 0; __i < sizeof(__tmp)/sizeof(__tmp[0]); ++__i)
-40039:        this->splice(this->end(), __tmp[__i]);
-40039:      throw;
-40039:    }
-40039:       }
-40039:     }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     template <typename _Predicate>
-40039:       void
-40039:       list<_Tp, _Alloc>::
-40039:       remove_if(_Predicate __pred)
-40039:       {
-40039:         iterator __first = begin();
-40039:         iterator __last = end();
-40039:         while (__first != __last)
-40039:    {
-40039:      iterator __next = __first;
-40039:      ++__next;
-40039:      if (__pred(*__first))
-40039:        _M_erase(__first);
-40039:      __first = __next;
-40039:    }
-40039:       }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     template <typename _BinaryPredicate>
-40039:       void
-40039:       list<_Tp, _Alloc>::
-40039:       unique(_BinaryPredicate __binary_pred)
-40039:       {
-40039:         iterator __first = begin();
-40039:         iterator __last = end();
-40039:         if (__first == __last)
-40039:    return;
-40039:         iterator __next = __first;
-40039:         while (++__next != __last)
-40039:    {
-40039:      if (__binary_pred(*__first, *__next))
-40039:        _M_erase(__next);
-40039:      else
-40039:        __first = __next;
-40039:      __next = __first;
-40039:    }
-40039:       }
-40039: 
-40039:   template<typename _Tp, typename _Alloc>
-40039:     template <typename _StrictWeakOrdering>
-40039:       void
-40039:       list<_Tp, _Alloc>::
-40039:       sort(_StrictWeakOrdering __comp)
-40039:       {
-40039: 
-40039:  if (this->_M_impl._M_node._M_next != &this->_M_impl._M_node
-40039:      && this->_M_impl._M_node._M_next->_M_next != &this->_M_impl._M_node)
-40039:    {
-40039:      list __carry;
-40039:      list __tmp[64];
-40039:      list * __fill = __tmp;
-40039:      list * __counter;
-40039:      try
-40039:        {
-40039:   do
-40039:     {
-40039:       __carry.splice(__carry.begin(), *this, begin());
-40039: 
-40039:       for(__counter = __tmp;
-40039:    __counter != __fill && !__counter->empty();
-40039:    ++__counter)
-40039:         {
-40039:    __counter->merge(__carry, __comp);
-40039:    __carry.swap(*__counter);
-40039:         }
-40039:       __carry.swap(*__counter);
-40039:       if (__counter == __fill)
-40039:         ++__fill;
-40039:     }
-40039:   while ( !empty() );
-40039: 
-40039:   for (__counter = __tmp + 1; __counter != __fill; ++__counter)
-40039:     __counter->merge(*(__counter - 1), __comp);
-40039:   swap(*(__fill - 1));
-40039:        }
-40039:      catch(...)
-40039:        {
-40039:   this->splice(this->end(), __carry);
-40039:   for (int __i = 0; __i < sizeof(__tmp)/sizeof(__tmp[0]); ++__i)
-40039:     this->splice(this->end(), __tmp[__i]);
-40039:   throw;
-40039:        }
-40039:    }
-40039:       }
-40039: 
-40039: 
-40039: 
-40039: }
-40039: # 65 "/usr/include/c++/8/list" 2 3
-40039: # 33 "../../src/Powerset_defs.hh" 2
-40039: 
-40039: 
-40039: # 34 "../../src/Powerset_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: template <typename D>
-40039: void swap(Powerset<D>& x, Powerset<D>& y);
-40039: 
-40039: 
-40039: 
-40039: template <typename D>
-40039: bool
-40039: operator==(const Powerset<D>& x, const Powerset<D>& y);
-40039: 
-40039: 
-40039: 
-40039: template <typename D>
-40039: bool
-40039: operator!=(const Powerset<D>& x, const Powerset<D>& y);
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: 
-40039: template <typename D>
-40039: std::ostream&
-40039: operator<<(std::ostream& s, const Powerset<D>& x);
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 151 "../../src/Powerset_defs.hh"
-40039: template <typename D>
-40039: class Parma_Polyhedra_Library::Powerset {
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Powerset();
-40039: 
-40039: 
-40039:   Powerset(const Powerset& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   explicit Powerset(const D& d);
-40039: 
-40039: 
-40039:   ~Powerset();
-40039: # 186 "../../src/Powerset_defs.hh"
-40039:   bool definitely_entails(const Powerset& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_top() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_bottom() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039: 
-40039:   bool OK(bool disallow_bottom = false) const;
-40039: 
-40039: 
-40039: 
-40039: protected:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef std::list<D> Sequence;
-40039: 
-40039: 
-40039:   typedef typename Sequence::iterator Sequence_iterator;
-40039: 
-40039: 
-40039:   typedef typename Sequence::const_iterator Sequence_const_iterator;
-40039: 
-40039: 
-40039:   Sequence sequence;
-40039: 
-40039: 
-40039:   mutable bool reduced;
-40039: 
-40039: public:
-40039: 
-40039:   typedef typename Sequence::size_type size_type;
-40039:   typedef typename Sequence::value_type value_type;
-40039: # 255 "../../src/Powerset_defs.hh"
-40039:   typedef iterator_to_const<Sequence> iterator;
-40039: 
-40039: 
-40039:   typedef const_iterator_to_const<Sequence> const_iterator;
-40039: 
-40039: 
-40039:   typedef std::reverse_iterator<iterator> reverse_iterator;
-40039: 
-40039: 
-40039:   typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
-40039: # 277 "../../src/Powerset_defs.hh"
-40039:   void omega_reduce() const;
-40039: 
-40039: 
-40039:   size_type size() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool empty() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   iterator begin();
-40039: 
-40039: 
-40039:   iterator end();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const_iterator begin() const;
-40039: 
-40039: 
-40039:   const_iterator end() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   reverse_iterator rbegin();
-40039: 
-40039: 
-40039:   reverse_iterator rend();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   const_reverse_iterator rbegin() const;
-40039: 
-40039: 
-40039:   const_reverse_iterator rend() const;
-40039: 
-40039: 
-40039:   void add_disjunct(const D& d);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   iterator drop_disjunct(iterator position);
-40039: 
-40039: 
-40039:   void drop_disjuncts(iterator first, iterator last);
-40039: 
-40039: 
-40039:   void clear();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Powerset& operator=(const Powerset& y);
-40039: 
-40039: 
-40039:   void m_swap(Powerset& y);
-40039: 
-40039: 
-40039:   void least_upper_bound_assign(const Powerset& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void upper_bound_assign(const Powerset& y);
-40039: # 367 "../../src/Powerset_defs.hh"
-40039:   bool upper_bound_assign_if_exact(const Powerset& y);
-40039: 
-40039: 
-40039:   void meet_assign(const Powerset& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void collapse();
-40039: 
-40039: 
-40039: 
-40039: protected:
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_omega_reduced() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void collapse(unsigned max_disjuncts);
-40039: # 408 "../../src/Powerset_defs.hh"
-40039:   iterator add_non_bottom_disjunct_preserve_reduction(const D& d,
-40039:                                                       iterator first,
-40039:                                                       iterator last);
-40039: # 419 "../../src/Powerset_defs.hh"
-40039:   void add_non_bottom_disjunct_preserve_reduction(const D& d);
-40039: # 429 "../../src/Powerset_defs.hh"
-40039:   template <typename Binary_Operator_Assign>
-40039:   void pairwise_apply_assign(const Powerset& y,
-40039:                              Binary_Operator_Assign op_assign);
-40039: 
-40039: private:
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool check_omega_reduced() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void collapse(Sequence_iterator sink);
-40039: };
-40039: 
-40039: # 1 "../../src/Powerset_inlines.hh" 1
-40039: # 30 "../../src/Powerset_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename D>
-40039: inline typename Powerset<D>::iterator
-40039: Powerset<D>::begin() {
-40039:   return sequence.begin();
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline typename Powerset<D>::iterator
-40039: Powerset<D>::end() {
-40039:   return sequence.end();
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline typename Powerset<D>::const_iterator
-40039: Powerset<D>::begin() const {
-40039:   return sequence.begin();
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline typename Powerset<D>::const_iterator
-40039: Powerset<D>::end() const {
-40039:   return sequence.end();
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline typename Powerset<D>::reverse_iterator
-40039: Powerset<D>::rbegin() {
-40039:   return reverse_iterator(end());
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline typename Powerset<D>::reverse_iterator
-40039: Powerset<D>::rend() {
-40039:   return reverse_iterator(begin());
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline typename Powerset<D>::const_reverse_iterator
-40039: Powerset<D>::rbegin() const {
-40039:   return const_reverse_iterator(end());
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline typename Powerset<D>::const_reverse_iterator
-40039: Powerset<D>::rend() const {
-40039:   return const_reverse_iterator(begin());
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline typename Powerset<D>::size_type
-40039: Powerset<D>::size() const {
-40039:   return sequence.size();
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline bool
-40039: Powerset<D>::empty() const {
-40039:   return sequence.empty();
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline typename Powerset<D>::iterator
-40039: Powerset<D>::drop_disjunct(iterator position) {
-40039:   return sequence.erase(position.base);
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline void
-40039: Powerset<D>::drop_disjuncts(iterator first, iterator last) {
-40039:   sequence.erase(first.base, last.base);
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline void
-40039: Powerset<D>::clear() {
-40039:   sequence.clear();
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline
-40039: Powerset<D>::Powerset(const Powerset& y)
-40039:   : sequence(y.sequence), reduced(y.reduced) {
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline Powerset<D>&
-40039: Powerset<D>::operator=(const Powerset& y) {
-40039:   sequence = y.sequence;
-40039:   reduced = y.reduced;
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline void
-40039: Powerset<D>::m_swap(Powerset& y) {
-40039:   std::swap(sequence, y.sequence);
-40039:   std::swap(reduced, y.reduced);
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline
-40039: Powerset<D>::Powerset()
-40039:   : sequence(), reduced(true) {
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline
-40039: Powerset<D>::Powerset(const D& d)
-40039:   : sequence(), reduced(false) {
-40039:   sequence.push_back(d);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline
-40039: Powerset<D>::~Powerset() {
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline void
-40039: Powerset<D>::add_non_bottom_disjunct_preserve_reduction(const D& d) {
-40039: 
-40039:   add_non_bottom_disjunct_preserve_reduction(d, begin(), end());
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline void
-40039: Powerset<D>::add_disjunct(const D& d) {
-40039:   sequence.push_back(d);
-40039:   reduced = false;
-40039: }
-40039: 
-40039: 
-40039: template <typename D>
-40039: inline
-40039: bool operator!=(const Powerset<D>& x, const Powerset<D>& y) {
-40039:   return !(x == y);
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline bool
-40039: Powerset<D>::is_top() const {
-40039: 
-40039:   omega_reduce();
-40039:   const_iterator xi = begin();
-40039:   const_iterator x_end = end();
-40039:   return xi != x_end && xi->is_top() && ++xi == x_end;
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline bool
-40039: Powerset<D>::is_bottom() const {
-40039: 
-40039:   omega_reduce();
-40039:   return empty();
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline void
-40039: Powerset<D>::collapse() {
-40039:   if (!empty()) {
-40039:     collapse(sequence.begin());
-40039:   }
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline void
-40039: Powerset<D>::meet_assign(const Powerset& y) {
-40039:   pairwise_apply_assign(y, std::mem_fun_ref(&D::meet_assign));
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline void
-40039: Powerset<D>::upper_bound_assign(const Powerset& y) {
-40039:   least_upper_bound_assign(y);
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline bool
-40039: Powerset<D>::upper_bound_assign_if_exact(const Powerset& y) {
-40039:   least_upper_bound_assign(y);
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename D>
-40039: inline memory_size_type
-40039: Powerset<D>::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: 
-40039: template <typename D>
-40039: inline void
-40039: swap(Powerset<D>& x, Powerset<D>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 448 "../../src/Powerset_defs.hh" 2
-40039: # 1 "../../src/Powerset_templates.hh" 1
-40039: # 32 "../../src/Powerset_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename D>
-40039: void
-40039: Powerset<D>::collapse(const Sequence_iterator sink) {
-40039:   ((void) 0);
-40039:   D& d = *sink;
-40039:   iterator x_sink = sink;
-40039:   iterator next_x_sink = x_sink;
-40039:   ++next_x_sink;
-40039:   iterator x_end = end();
-40039:   for (const_iterator xi = next_x_sink; xi != x_end; ++xi) {
-40039:     d.upper_bound_assign(*xi);
-40039:   }
-40039: 
-40039:   drop_disjuncts(next_x_sink, x_end);
-40039: 
-40039: 
-40039:   for (iterator xi = begin(); xi != x_sink; ) {
-40039:     if (xi->definitely_entails(d)) {
-40039:       xi = drop_disjunct(xi);
-40039:     }
-40039:     else {
-40039:       ++xi;
-40039:     }
-40039:   }
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename D>
-40039: void
-40039: Powerset<D>::omega_reduce() const {
-40039:   if (reduced) {
-40039:     return;
-40039:   }
-40039:   Powerset& x = const_cast<Powerset&>(*this);
-40039: 
-40039:   for (iterator xi = x.begin(), x_end = x.end(); xi != x_end; ) {
-40039:     if (xi->is_bottom()) {
-40039:       xi = x.drop_disjunct(xi);
-40039:     }
-40039:     else {
-40039:       ++xi;
-40039:     }
-40039:   }
-40039: 
-40039:   for (iterator xi = x.begin(); xi != x.end(); ) {
-40039:     const D& xv = *xi;
-40039:     bool dropping_xi = false;
-40039:     for (iterator yi = x.begin(); yi != x.end(); ) {
-40039:       if (xi == yi) {
-40039:         ++yi;
-40039:       }
-40039:       else {
-40039:         const D& yv = *yi;
-40039:         if (yv.definitely_entails(xv)) {
-40039:           yi = x.drop_disjunct(yi);
-40039:         }
-40039:         else if (xv.definitely_entails(yv)) {
-40039:           dropping_xi = true;
-40039:           break;
-40039:         }
-40039:         else {
-40039:           ++yi;
-40039:         }
-40039:       }
-40039:     }
-40039:     if (dropping_xi) {
-40039:       xi = x.drop_disjunct(xi);
-40039:     }
-40039:     else {
-40039:       ++xi;
-40039:     }
-40039:     if (abandon_expensive_computations != 0 && xi != x.end()) {
-40039: 
-40039:       x.collapse(xi.base);
-40039:       break;
-40039:     }
-40039:   }
-40039:   reduced = true;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename D>
-40039: void
-40039: Powerset<D>::collapse(const unsigned max_disjuncts) {
-40039:   ((void) 0);
-40039: 
-40039:   omega_reduce();
-40039:   size_type n = size();
-40039:   if (n > max_disjuncts) {
-40039: 
-40039:     iterator i = begin();
-40039:     std::advance(i, max_disjuncts-1);
-40039: 
-40039: 
-40039:     collapse(i.base);
-40039:   }
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename D>
-40039: bool
-40039: Powerset<D>::check_omega_reduced() const {
-40039:   for (const_iterator x_begin = begin(), x_end = end(),
-40039:          xi = x_begin; xi != x_end; ++xi) {
-40039:     const D& xv = *xi;
-40039:     if (xv.is_bottom()) {
-40039:       return false;
-40039:     }
-40039:     for (const_iterator yi = x_begin; yi != x_end; ++yi) {
-40039:       if (xi == yi) {
-40039:         continue;
-40039:       }
-40039:       const D& yv = *yi;
-40039:       if (xv.definitely_entails(yv) || yv.definitely_entails(xv)) {
-40039:         return false;
-40039:       }
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename D>
-40039: bool
-40039: Powerset<D>::is_omega_reduced() const {
-40039:   if (!reduced && check_omega_reduced()) {
-40039:     reduced = true;
-40039:   }
-40039:   return reduced;
-40039: }
-40039: 
-40039: template <typename D>
-40039: typename Powerset<D>::iterator
-40039: Powerset<D>::add_non_bottom_disjunct_preserve_reduction(const D& d,
-40039:                                                         iterator first,
-40039:                                                         iterator last) {
-40039:   ((void) 0);
-40039:   for (iterator xi = first; xi != last; ) {
-40039:     const D& xv = *xi;
-40039:     if (d.definitely_entails(xv)) {
-40039:       return first;
-40039:     }
-40039:     else if (xv.definitely_entails(d)) {
-40039:       if (xi == first) {
-40039:         ++first;
-40039:       }
-40039:       xi = drop_disjunct(xi);
-40039:     }
-40039:     else {
-40039:       ++xi;
-40039:     }
-40039:   }
-40039:   sequence.push_back(d);
-40039:   ((void) 0);
-40039:   return first;
-40039: }
-40039: 
-40039: template <typename D>
-40039: bool
-40039: Powerset<D>::definitely_entails(const Powerset& y) const {
-40039:   const Powerset<D>& x = *this;
-40039:   bool found = true;
-40039:   for (const_iterator xi = x.begin(),
-40039:          x_end = x.end(); found && xi != x_end; ++xi) {
-40039:     found = false;
-40039:     for (const_iterator yi = y.begin(),
-40039:            y_end = y.end(); !found && yi != y_end; ++yi) {
-40039:       found = (*xi).definitely_entails(*yi);
-40039:     }
-40039:   }
-40039:   return found;
-40039: }
-40039: 
-40039: 
-40039: template <typename D>
-40039: bool
-40039: operator==(const Powerset<D>& x, const Powerset<D>& y) {
-40039:   x.omega_reduce();
-40039:   y.omega_reduce();
-40039:   if (x.size() != y.size()) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   Powerset<D> z = y;
-40039:   for (typename Powerset<D>::const_iterator xi = x.begin(),
-40039:          x_end = x.end(); xi != x_end; ++xi) {
-40039:     typename Powerset<D>::iterator zi = z.begin();
-40039:     typename Powerset<D>::iterator z_end = z.end();
-40039:     zi = std::find(zi, z_end, *xi);
-40039:     if (zi == z_end) {
-40039:       return false;
-40039:     }
-40039:     else {
-40039:       z.drop_disjunct(zi);
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename D>
-40039: template <typename Binary_Operator_Assign>
-40039: void
-40039: Powerset<D>::pairwise_apply_assign(const Powerset& y,
-40039:                                    Binary_Operator_Assign op_assign) {
-40039: 
-40039:   omega_reduce();
-40039:   y.omega_reduce();
-40039:   Sequence new_sequence;
-40039:   for (const_iterator xi = begin(), x_end = end(),
-40039:          y_begin = y.begin(), y_end = y.end(); xi != x_end; ++xi) {
-40039:     for (const_iterator yi = y_begin; yi != y_end; ++yi) {
-40039:       D zi = *xi;
-40039:       op_assign(zi, *yi);
-40039:       if (!zi.is_bottom()) {
-40039:         new_sequence.push_back(zi);
-40039:       }
-40039:     }
-40039:   }
-40039: 
-40039:   std::swap(sequence, new_sequence);
-40039:   reduced = false;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename D>
-40039: void
-40039: Powerset<D>::least_upper_bound_assign(const Powerset& y) {
-40039: 
-40039:   omega_reduce();
-40039:   y.omega_reduce();
-40039:   iterator old_begin = begin();
-40039:   iterator old_end = end();
-40039:   for (const_iterator i = y.begin(), y_end = y.end(); i != y_end; ++i) {
-40039:     old_begin = add_non_bottom_disjunct_preserve_reduction(*i,
-40039:                                                            old_begin,
-40039:                                                            old_end);
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: namespace IO_Operators {
-40039: 
-40039: 
-40039: template <typename D>
-40039: std::ostream&
-40039: operator<<(std::ostream& s, const Powerset<D>& x) {
-40039:   if (x.is_bottom()) {
-40039:     s << "false";
-40039:   }
-40039:   else if (x.is_top()) {
-40039:     s << "true";
-40039:   }
-40039:   else {
-40039:     for (typename Powerset<D>::const_iterator i = x.begin(),
-40039:            x_end = x.end(); i != x_end; ) {
-40039:       s << "{ " << *i << " }";
-40039:       ++i;
-40039:       if (i != x_end) {
-40039:         s << ", ";
-40039:       }
-40039:     }
-40039:   }
-40039:   return s;
-40039: }
-40039: 
-40039: }
-40039: 
-40039: template <typename D>
-40039: memory_size_type
-40039: Powerset<D>::external_memory_in_bytes() const {
-40039:   memory_size_type bytes = 0;
-40039:   for (const_iterator xi = begin(), x_end = end(); xi != x_end; ++xi) {
-40039:     bytes += xi->total_memory_in_bytes();
-40039: 
-40039: 
-40039: 
-40039:     bytes += 2*sizeof(D*);
-40039:   }
-40039:   return bytes;
-40039: }
-40039: 
-40039: template <typename D>
-40039: bool
-40039: Powerset<D>::OK(const bool disallow_bottom) const {
-40039:   for (const_iterator xi = begin(), x_end = end(); xi != x_end; ++xi) {
-40039:     if (!xi->OK()) {
-40039:       return false;
-40039:     }
-40039:     if (disallow_bottom && xi->is_bottom()) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       return false;
-40039:     }
-40039:   }
-40039:   if (reduced && !check_omega_reduced()) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     return false;
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: }
-40039: # 449 "../../src/Powerset_defs.hh" 2
-40039: # 42 "../../src/Pointset_Powerset_defs.hh" 2
-40039: # 60 "../../src/Pointset_Powerset_defs.hh"
-40039: template <typename PSET>
-40039: class Parma_Polyhedra_Library::Pointset_Powerset
-40039:   : public Parma_Polyhedra_Library::Powerset
-40039: <Parma_Polyhedra_Library::Determinate<PSET> > {
-40039: public:
-40039:   typedef PSET element_type;
-40039: 
-40039: private:
-40039:   typedef Determinate<PSET> Det_PSET;
-40039:   typedef Powerset<Det_PSET> Base;
-40039: 
-40039: public:
-40039: 
-40039:   static dimension_type max_space_dimension();
-40039: # 86 "../../src/Pointset_Powerset_defs.hh"
-40039:   explicit
-40039:   Pointset_Powerset(dimension_type num_dimensions = 0,
-40039:                     Degenerate_Element kind = UNIVERSE);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Pointset_Powerset(const Pointset_Powerset& y,
-40039:                     Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 107 "../../src/Pointset_Powerset_defs.hh"
-40039:   template <typename QH>
-40039:   explicit Pointset_Powerset(const Pointset_Powerset<QH>& y,
-40039:                              Complexity_Class complexity = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename QH1, typename QH2, typename R>
-40039:   explicit
-40039:   Pointset_Powerset(const Partially_Reduced_Product<QH1, QH2, R>& prp,
-40039:                     Complexity_Class complexity = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   explicit Pointset_Powerset(const Constraint_System& cs);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   explicit Pointset_Powerset(const Congruence_System& cgs);
-40039: # 152 "../../src/Pointset_Powerset_defs.hh"
-40039:   explicit Pointset_Powerset(const C_Polyhedron& ph,
-40039:                              Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 173 "../../src/Pointset_Powerset_defs.hh"
-40039:   explicit Pointset_Powerset(const NNC_Polyhedron& ph,
-40039:                              Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 193 "../../src/Pointset_Powerset_defs.hh"
-40039:   explicit Pointset_Powerset(const Grid& gr,
-40039:                              Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 213 "../../src/Pointset_Powerset_defs.hh"
-40039:   template <typename T>
-40039:   explicit Pointset_Powerset(const Octagonal_Shape<T>& os,
-40039:                              Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 234 "../../src/Pointset_Powerset_defs.hh"
-40039:   template <typename T>
-40039:   explicit Pointset_Powerset(const BD_Shape<T>& bds,
-40039:                              Complexity_Class complexity = ANY_COMPLEXITY);
-40039: # 254 "../../src/Pointset_Powerset_defs.hh"
-40039:   template <typename Interval>
-40039:   explicit Pointset_Powerset(const Box<Interval>& box,
-40039:                              Complexity_Class complexity = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   dimension_type space_dimension() const;
-40039: 
-40039: 
-40039:   dimension_type affine_dimension() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_empty() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_universe() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_topologically_closed() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_bounded() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_disjoint_from(const Pointset_Powerset& y) const;
-40039: 
-40039: 
-40039:   bool is_discrete() const;
-40039: # 323 "../../src/Pointset_Powerset_defs.hh"
-40039:   bool constrains(Variable var) const;
-40039: # 332 "../../src/Pointset_Powerset_defs.hh"
-40039:   bool bounds_from_above(const Linear_Expression& expr) const;
-40039: # 341 "../../src/Pointset_Powerset_defs.hh"
-40039:   bool bounds_from_below(const Linear_Expression& expr) const;
-40039: # 367 "../../src/Pointset_Powerset_defs.hh"
-40039:   bool maximize(const Linear_Expression& expr,
-40039:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum) const;
-40039: # 398 "../../src/Pointset_Powerset_defs.hh"
-40039:   bool maximize(const Linear_Expression& expr,
-40039:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum,
-40039:                 Generator& g) const;
-40039: # 426 "../../src/Pointset_Powerset_defs.hh"
-40039:   bool minimize(const Linear_Expression& expr,
-40039:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum) const;
-40039: # 458 "../../src/Pointset_Powerset_defs.hh"
-40039:   bool minimize(const Linear_Expression& expr,
-40039:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum,
-40039:                 Generator& g) const;
-40039: # 473 "../../src/Pointset_Powerset_defs.hh"
-40039:   bool geometrically_covers(const Pointset_Powerset& y) const;
-40039: # 486 "../../src/Pointset_Powerset_defs.hh"
-40039:   bool geometrically_equals(const Pointset_Powerset& y) const;
-40039: # 496 "../../src/Pointset_Powerset_defs.hh"
-40039:   bool contains(const Pointset_Powerset& y) const;
-40039: # 506 "../../src/Pointset_Powerset_defs.hh"
-40039:   bool strictly_contains(const Pointset_Powerset& y) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool contains_integer_point() const;
-40039: # 521 "../../src/Pointset_Powerset_defs.hh"
-40039:   Poly_Con_Relation relation_with(const Constraint& c) const;
-40039: # 530 "../../src/Pointset_Powerset_defs.hh"
-40039:   Poly_Gen_Relation relation_with(const Generator& g) const;
-40039: # 539 "../../src/Pointset_Powerset_defs.hh"
-40039:   Poly_Con_Relation relation_with(const Congruence& cg) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   int32_t hash_code() const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: # 574 "../../src/Pointset_Powerset_defs.hh"
-40039:   void add_disjunct(const PSET& ph);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void add_constraint(const Constraint& c);
-40039: # 593 "../../src/Pointset_Powerset_defs.hh"
-40039:   void refine_with_constraint(const Constraint& c);
-40039: # 604 "../../src/Pointset_Powerset_defs.hh"
-40039:   void add_constraints(const Constraint_System& cs);
-40039: # 615 "../../src/Pointset_Powerset_defs.hh"
-40039:   void refine_with_constraints(const Constraint_System& cs);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void add_congruence(const Congruence& cg);
-40039: # 634 "../../src/Pointset_Powerset_defs.hh"
-40039:   void refine_with_congruence(const Congruence& cg);
-40039: # 645 "../../src/Pointset_Powerset_defs.hh"
-40039:   void add_congruences(const Congruence_System& cgs);
-40039: # 656 "../../src/Pointset_Powerset_defs.hh"
-40039:   void refine_with_congruences(const Congruence_System& cgs);
-40039: # 668 "../../src/Pointset_Powerset_defs.hh"
-40039:   void unconstrain(Variable var);
-40039: # 682 "../../src/Pointset_Powerset_defs.hh"
-40039:   void unconstrain(const Variables_Set& vars);
-40039: # 695 "../../src/Pointset_Powerset_defs.hh"
-40039:   void drop_some_non_integer_points(Complexity_Class complexity
-40039:                                     = ANY_COMPLEXITY);
-40039: # 713 "../../src/Pointset_Powerset_defs.hh"
-40039:   void drop_some_non_integer_points(const Variables_Set& vars,
-40039:                                     Complexity_Class complexity
-40039:                                     = ANY_COMPLEXITY);
-40039: 
-40039: 
-40039:   void topological_closure_assign();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void intersection_assign(const Pointset_Powerset& y);
-40039: # 735 "../../src/Pointset_Powerset_defs.hh"
-40039:   void difference_assign(const Pointset_Powerset& y);
-40039: # 746 "../../src/Pointset_Powerset_defs.hh"
-40039:   bool simplify_using_context_assign(const Pointset_Powerset& y);
-40039: # 769 "../../src/Pointset_Powerset_defs.hh"
-40039:   void affine_image(Variable var,
-40039:                     const Linear_Expression& expr,
-40039:                     Coefficient_traits::const_reference denominator
-40039:                       = Coefficient_one());
-40039: # 795 "../../src/Pointset_Powerset_defs.hh"
-40039:   void affine_preimage(Variable var,
-40039:                     const Linear_Expression& expr,
-40039:                     Coefficient_traits::const_reference denominator
-40039:                       = Coefficient_one());
-40039: # 826 "../../src/Pointset_Powerset_defs.hh"
-40039:   void generalized_affine_image(Variable var,
-40039:                                 Relation_Symbol relsym,
-40039:                                 const Linear_Expression& expr,
-40039:                                 Coefficient_traits::const_reference denominator
-40039:                                   = Coefficient_one());
-40039: # 858 "../../src/Pointset_Powerset_defs.hh"
-40039:   void
-40039:   generalized_affine_preimage(Variable var,
-40039:                               Relation_Symbol relsym,
-40039:                               const Linear_Expression& expr,
-40039:                               Coefficient_traits::const_reference denominator
-40039:                               = Coefficient_one());
-40039: # 885 "../../src/Pointset_Powerset_defs.hh"
-40039:   void generalized_affine_image(const Linear_Expression& lhs,
-40039:                                 Relation_Symbol relsym,
-40039:                                 const Linear_Expression& rhs);
-40039: # 909 "../../src/Pointset_Powerset_defs.hh"
-40039:   void generalized_affine_preimage(const Linear_Expression& lhs,
-40039:                                    Relation_Symbol relsym,
-40039:                                    const Linear_Expression& rhs);
-40039: # 939 "../../src/Pointset_Powerset_defs.hh"
-40039:   void bounded_affine_image(Variable var,
-40039:                             const Linear_Expression& lb_expr,
-40039:                             const Linear_Expression& ub_expr,
-40039:                             Coefficient_traits::const_reference denominator
-40039:                             = Coefficient_one());
-40039: # 971 "../../src/Pointset_Powerset_defs.hh"
-40039:   void bounded_affine_preimage(Variable var,
-40039:                                const Linear_Expression& lb_expr,
-40039:                                const Linear_Expression& ub_expr,
-40039:                                Coefficient_traits::const_reference denominator
-40039:                                = Coefficient_one());
-40039: # 985 "../../src/Pointset_Powerset_defs.hh"
-40039:   void time_elapse_assign(const Pointset_Powerset& y);
-40039: # 1033 "../../src/Pointset_Powerset_defs.hh"
-40039:   void wrap_assign(const Variables_Set& vars,
-40039:                    Bounded_Integer_Type_Width w,
-40039:                    Bounded_Integer_Type_Representation r,
-40039:                    Bounded_Integer_Type_Overflow o,
-40039:                    const Constraint_System* cs_p = 0,
-40039:                    unsigned complexity_threshold = 16,
-40039:                    bool wrap_individually = true);
-40039: # 1049 "../../src/Pointset_Powerset_defs.hh"
-40039:   void pairwise_reduce();
-40039: # 1078 "../../src/Pointset_Powerset_defs.hh"
-40039:   template <typename Widening>
-40039:   void BGP99_extrapolation_assign(const Pointset_Powerset& y,
-40039:                                   Widening widen_fun,
-40039:                                   unsigned max_disjuncts);
-40039: # 1111 "../../src/Pointset_Powerset_defs.hh"
-40039:   template <typename Cert, typename Widening>
-40039:   void BHZ03_widening_assign(const Pointset_Powerset& y, Widening widen_fun);
-40039: # 1123 "../../src/Pointset_Powerset_defs.hh"
-40039:   Pointset_Powerset& operator=(const Pointset_Powerset& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename QH>
-40039:   Pointset_Powerset& operator=(const Pointset_Powerset<QH>& y);
-40039: 
-40039: 
-40039:   void m_swap(Pointset_Powerset& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void add_space_dimensions_and_embed(dimension_type m);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void add_space_dimensions_and_project(dimension_type m);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   void concatenate_assign(const Pointset_Powerset& y);
-40039: # 1166 "../../src/Pointset_Powerset_defs.hh"
-40039:   void remove_space_dimensions(const Variables_Set& vars);
-40039: # 1176 "../../src/Pointset_Powerset_defs.hh"
-40039:   void remove_higher_space_dimensions(dimension_type new_dimension);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename Partial_Function>
-40039:   void map_space_dimensions(const Partial_Function& pfunc);
-40039: # 1210 "../../src/Pointset_Powerset_defs.hh"
-40039:   void expand_space_dimension(Variable var, dimension_type m);
-40039: # 1236 "../../src/Pointset_Powerset_defs.hh"
-40039:   void fold_space_dimensions(const Variables_Set& vars, Variable dest);
-40039: 
-40039: 
-40039: 
-40039: public:
-40039:   typedef typename Base::size_type size_type;
-40039:   typedef typename Base::value_type value_type;
-40039:   typedef typename Base::iterator iterator;
-40039:   typedef typename Base::const_iterator const_iterator;
-40039:   typedef typename Base::reverse_iterator reverse_iterator;
-40039:   typedef typename Base::const_reverse_iterator const_reverse_iterator;
-40039: 
-40039:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ascii_load(std::istream& s);
-40039: 
-40039: private:
-40039:   typedef typename Base::Sequence Sequence;
-40039:   typedef typename Base::Sequence_iterator Sequence_iterator;
-40039:   typedef typename Base::Sequence_const_iterator Sequence_const_iterator;
-40039: 
-40039: 
-40039:   dimension_type space_dim;
-40039: # 1274 "../../src/Pointset_Powerset_defs.hh"
-40039:   bool intersection_preserving_enlarge_element(PSET& dest) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename Widening>
-40039:   void BGP99_heuristics_assign(const Pointset_Powerset& y, Widening widen_fun);
-40039: 
-40039: 
-40039:   template <typename Cert>
-40039:   void collect_certificates(std::map<Cert, size_type,
-40039:                                      typename Cert::Compare>& cert_ms) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename Cert>
-40039:   bool is_cert_multiset_stabilizing(const std::map<Cert, size_type,
-40039:                                                    typename Cert::Compare>&
-40039:                                     y_cert_ms) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template <typename Cons_or_Congr>
-40039:   Poly_Con_Relation relation_with_aux(const Cons_or_Congr& c) const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   friend class Pointset_Powerset<NNC_Polyhedron>;
-40039: };
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: template <typename PSET>
-40039: void swap(Pointset_Powerset<PSET>& x, Pointset_Powerset<PSET>& y);
-40039: # 1338 "../../src/Pointset_Powerset_defs.hh"
-40039: template <typename PSET>
-40039: std::pair<PSET, Pointset_Powerset<NNC_Polyhedron> >
-40039: linear_partition(const PSET& p, const PSET& q);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: bool
-40039: check_containment(const NNC_Polyhedron& ph,
-40039:                   const Pointset_Powerset<NNC_Polyhedron>& ps);
-40039: # 1374 "../../src/Pointset_Powerset_defs.hh"
-40039: std::pair<Grid, Pointset_Powerset<Grid> >
-40039: approximate_partition(const Grid& p, const Grid& q, bool& finite_partition);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: bool
-40039: check_containment(const Grid& ph,
-40039:                   const Pointset_Powerset<Grid>& ps);
-40039: # 1397 "../../src/Pointset_Powerset_defs.hh"
-40039: template <typename PSET>
-40039: bool
-40039: check_containment(const PSET& ph, const Pointset_Powerset<PSET>& ps);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <>
-40039: template <typename QH>
-40039: Pointset_Powerset<NNC_Polyhedron>
-40039: ::Pointset_Powerset(const Pointset_Powerset<QH>& y,
-40039:                     Complexity_Class);
-40039: 
-40039: 
-40039: 
-40039: template <>
-40039: template <>
-40039: Pointset_Powerset<NNC_Polyhedron>
-40039: ::Pointset_Powerset(const Pointset_Powerset<C_Polyhedron>& y,
-40039:                     Complexity_Class);
-40039: 
-40039: template <>
-40039: template <>
-40039: Pointset_Powerset<NNC_Polyhedron>
-40039: ::Pointset_Powerset(const Pointset_Powerset<Grid>& y,
-40039:                     Complexity_Class);
-40039: 
-40039: template <>
-40039: template <>
-40039: Pointset_Powerset<C_Polyhedron>
-40039: ::Pointset_Powerset(const Pointset_Powerset<NNC_Polyhedron>& y,
-40039:                     Complexity_Class);
-40039: 
-40039: template <>
-40039: void
-40039: Pointset_Powerset<NNC_Polyhedron>
-40039: ::difference_assign(const Pointset_Powerset& y);
-40039: 
-40039: template <>
-40039: void
-40039: Pointset_Powerset<Grid>
-40039: ::difference_assign(const Pointset_Powerset& y);
-40039: 
-40039: template <>
-40039: bool
-40039: Pointset_Powerset<NNC_Polyhedron>
-40039: ::geometrically_covers(const Pointset_Powerset& y) const;
-40039: 
-40039: template <>
-40039: bool
-40039: Pointset_Powerset<Grid>
-40039: ::geometrically_covers(const Pointset_Powerset& y) const;
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Pointset_Powerset_inlines.hh" 1
-40039: # 38 "../../src/Pointset_Powerset_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename PSET>
-40039: inline dimension_type
-40039: Pointset_Powerset<PSET>::space_dimension() const {
-40039:   return space_dim;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline dimension_type
-40039: Pointset_Powerset<PSET>::max_space_dimension() {
-40039:   return PSET::max_space_dimension();
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline
-40039: Pointset_Powerset<PSET>::Pointset_Powerset(dimension_type num_dimensions,
-40039:                                            Degenerate_Element kind)
-40039:   : Base(), space_dim(num_dimensions) {
-40039:   Pointset_Powerset& x = *this;
-40039:   if (kind == UNIVERSE) {
-40039:     x.sequence.push_back(Determinate<PSET>(PSET(num_dimensions, kind)));
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline
-40039: Pointset_Powerset<PSET>::Pointset_Powerset(const Pointset_Powerset& y,
-40039:                                            Complexity_Class)
-40039:   : Base(y), space_dim(y.space_dim) {
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline
-40039: Pointset_Powerset<PSET>::Pointset_Powerset(const C_Polyhedron& ph,
-40039:                                            Complexity_Class complexity)
-40039:   : Base(), space_dim(ph.space_dimension()) {
-40039:   Pointset_Powerset& x = *this;
-40039:   if (complexity == ANY_COMPLEXITY) {
-40039:     if (ph.is_empty()) {
-40039:       return;
-40039:     }
-40039:   }
-40039:   else {
-40039:     x.reduced = false;
-40039:   }
-40039:   x.sequence.push_back(Determinate<PSET>(PSET(ph, complexity)));
-40039:   x.reduced = false;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline
-40039: Pointset_Powerset<PSET>::Pointset_Powerset(const NNC_Polyhedron& ph,
-40039:                                            Complexity_Class complexity)
-40039:   : Base(), space_dim(ph.space_dimension()) {
-40039:   Pointset_Powerset& x = *this;
-40039:   if (complexity == ANY_COMPLEXITY) {
-40039:     if (ph.is_empty()) {
-40039:       return;
-40039:     }
-40039:   }
-40039:   else {
-40039:     x.reduced = false;
-40039:   }
-40039:   x.sequence.push_back(Determinate<PSET>(PSET(ph, complexity)));
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline
-40039: Pointset_Powerset<PSET>::Pointset_Powerset(const Grid& gr,
-40039:                                            Complexity_Class)
-40039:   : Base(), space_dim(gr.space_dimension()) {
-40039:   Pointset_Powerset& x = *this;
-40039:   if (!gr.is_empty()) {
-40039:     x.sequence.push_back(Determinate<PSET>(PSET(gr)));
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: template <typename QH1, typename QH2, typename R>
-40039: inline
-40039: Pointset_Powerset<PSET>
-40039: ::Pointset_Powerset(const Partially_Reduced_Product<QH1, QH2, R>& prp,
-40039:                     Complexity_Class complexity)
-40039:   : Base(), space_dim(prp.space_dimension()) {
-40039:   Pointset_Powerset& x = *this;
-40039:   if (complexity == ANY_COMPLEXITY) {
-40039:     if (prp.is_empty()) {
-40039:       return;
-40039:     }
-40039:   }
-40039:   else {
-40039:     x.reduced = false;
-40039:   }
-40039:   x.sequence.push_back(Determinate<PSET>(PSET(prp, complexity)));
-40039:   x.reduced = false;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: template <typename Interval>
-40039: Pointset_Powerset<PSET>::Pointset_Powerset(const Box<Interval>& box,
-40039:                                            Complexity_Class)
-40039:   : Base(), space_dim(box.space_dimension()) {
-40039:   Pointset_Powerset& x = *this;
-40039:   if (!box.is_empty()) {
-40039:     x.sequence.push_back(Determinate<PSET>(PSET(box)));
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: template <typename T>
-40039: Pointset_Powerset<PSET>::Pointset_Powerset(const Octagonal_Shape<T>& os,
-40039:                                            Complexity_Class)
-40039:   : Base(), space_dim(os.space_dimension()) {
-40039:   Pointset_Powerset& x = *this;
-40039:   if (!os.is_empty()) {
-40039:     x.sequence.push_back(Determinate<PSET>(PSET(os)));
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: template <typename T>
-40039: Pointset_Powerset<PSET>::Pointset_Powerset(const BD_Shape<T>& bds,
-40039:                                            Complexity_Class)
-40039:   : Base(), space_dim(bds.space_dimension()) {
-40039:   Pointset_Powerset& x = *this;
-40039:   if (!bds.is_empty()) {
-40039:     x.sequence.push_back(Determinate<PSET>(PSET(bds)));
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline
-40039: Pointset_Powerset<PSET>::Pointset_Powerset(const Constraint_System& cs)
-40039:   : Base(Determinate<PSET>(cs)), space_dim(cs.space_dimension()) {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline
-40039: Pointset_Powerset<PSET>::Pointset_Powerset(const Congruence_System& cgs)
-40039:   : Base(Determinate<PSET>(cgs)), space_dim(cgs.space_dimension()) {
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline Pointset_Powerset<PSET>&
-40039: Pointset_Powerset<PSET>::operator=(const Pointset_Powerset& y) {
-40039:   Pointset_Powerset& x = *this;
-40039:   x.Base::operator=(y);
-40039:   x.space_dim = y.space_dim;
-40039:   return x;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline void
-40039: Pointset_Powerset<PSET>::m_swap(Pointset_Powerset& y) {
-40039:   Pointset_Powerset& x = *this;
-40039:   x.Base::m_swap(y);
-40039:   using std::swap;
-40039:   swap(x.space_dim, y.space_dim);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: template <typename QH>
-40039: inline Pointset_Powerset<PSET>&
-40039: Pointset_Powerset<PSET>::operator=(const Pointset_Powerset<QH>& y) {
-40039:   Pointset_Powerset& x = *this;
-40039:   Pointset_Powerset<PSET> ps(y);
-40039:   swap(x, ps);
-40039:   return x;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline void
-40039: Pointset_Powerset<PSET>::intersection_assign(const Pointset_Powerset& y) {
-40039:   Pointset_Powerset& x = *this;
-40039:   x.pairwise_apply_assign(y,
-40039:                           Det_PSET::lift_op_assign(std::mem_fun_ref(&PSET::intersection_assign)));
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline void
-40039: Pointset_Powerset<PSET>::time_elapse_assign(const Pointset_Powerset& y) {
-40039:   Pointset_Powerset& x = *this;
-40039:   x.pairwise_apply_assign(y,
-40039:                           Det_PSET::lift_op_assign(std::mem_fun_ref(&PSET::time_elapse_assign)));
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline Poly_Con_Relation
-40039: Pointset_Powerset<PSET>::relation_with(const Constraint& c) const {
-40039:   return relation_with_aux(c);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline Poly_Con_Relation
-40039: Pointset_Powerset<PSET>::relation_with(const Congruence& cg) const {
-40039:   return relation_with_aux(cg);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline bool
-40039: Pointset_Powerset<PSET>
-40039: ::geometrically_covers(const Pointset_Powerset& y) const {
-40039: 
-40039:   const Pointset_Powerset<NNC_Polyhedron> xx(*this);
-40039:   const Pointset_Powerset<NNC_Polyhedron> yy(y);
-40039:   return xx.geometrically_covers(yy);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline bool
-40039: Pointset_Powerset<PSET>
-40039: ::geometrically_equals(const Pointset_Powerset& y) const {
-40039: 
-40039:   const Pointset_Powerset<NNC_Polyhedron> xx(*this);
-40039:   const Pointset_Powerset<NNC_Polyhedron> yy(y);
-40039:   return xx.geometrically_covers(yy) && yy.geometrically_covers(xx);
-40039: }
-40039: 
-40039: template <>
-40039: inline bool
-40039: Pointset_Powerset<Grid>
-40039: ::geometrically_equals(const Pointset_Powerset& y) const {
-40039:   const Pointset_Powerset& x = *this;
-40039:   return x.geometrically_covers(y) && y.geometrically_covers(x);
-40039: }
-40039: 
-40039: template <>
-40039: inline bool
-40039: Pointset_Powerset<NNC_Polyhedron>
-40039: ::geometrically_equals(const Pointset_Powerset& y) const {
-40039:   const Pointset_Powerset& x = *this;
-40039:   return x.geometrically_covers(y) && y.geometrically_covers(x);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline memory_size_type
-40039: Pointset_Powerset<PSET>::external_memory_in_bytes() const {
-40039:   return Base::external_memory_in_bytes();
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline memory_size_type
-40039: Pointset_Powerset<PSET>::total_memory_in_bytes() const {
-40039:   return sizeof(*this) + external_memory_in_bytes();
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline int32_t
-40039: Pointset_Powerset<PSET>::hash_code() const {
-40039:   return hash_code_from_dimension(space_dimension());
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: inline void
-40039: Pointset_Powerset<PSET>
-40039: ::difference_assign(const Pointset_Powerset& y) {
-40039: 
-40039:   Pointset_Powerset<NNC_Polyhedron> nnc_this(*this);
-40039:   Pointset_Powerset<NNC_Polyhedron> nnc_y(y);
-40039:   nnc_this.difference_assign(nnc_y);
-40039:   *this = nnc_this;
-40039: }
-40039: 
-40039: 
-40039: template <typename PSET>
-40039: inline bool
-40039: check_containment(const PSET& ph, const Pointset_Powerset<PSET>& ps) {
-40039: 
-40039:   const NNC_Polyhedron ph_nnc = NNC_Polyhedron(ph.constraints());
-40039:   const Pointset_Powerset<NNC_Polyhedron> ps_nnc(ps);
-40039:   return check_containment(ph_nnc, ps_nnc);
-40039: }
-40039: 
-40039: 
-40039: template <>
-40039: inline bool
-40039: check_containment(const C_Polyhedron& ph,
-40039:                   const Pointset_Powerset<C_Polyhedron>& ps) {
-40039:   return check_containment(NNC_Polyhedron(ph),
-40039:                            Pointset_Powerset<NNC_Polyhedron>(ps));
-40039: }
-40039: 
-40039: 
-40039: template <typename PSET>
-40039: inline void
-40039: swap(Pointset_Powerset<PSET>& x, Pointset_Powerset<PSET>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 1454 "../../src/Pointset_Powerset_defs.hh" 2
-40039: # 1 "../../src/Pointset_Powerset_templates.hh" 1
-40039: # 40 "../../src/Pointset_Powerset_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>::add_disjunct(const PSET& ph) {
-40039:   Pointset_Powerset& x = *this;
-40039:   if (x.space_dimension() != ph.space_dimension()) {
-40039:     std::ostringstream s;
-40039:     s << "PPL::Pointset_Powerset<PSET>::add_disjunct(ph):\n"
-40039:       << "this->space_dimension() == " << x.space_dimension() << ", "
-40039:       << "ph.space_dimension() == " << ph.space_dimension() << ".";
-40039:     throw std::invalid_argument(s.str());
-40039:   }
-40039:   x.sequence.push_back(Determinate<PSET>(ph));
-40039:   x.reduced = false;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <>
-40039: template <typename QH>
-40039: Pointset_Powerset<NNC_Polyhedron>
-40039: ::Pointset_Powerset(const Pointset_Powerset<QH>& y,
-40039:                     Complexity_Class complexity)
-40039:   : Base(), space_dim(y.space_dimension()) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (typename Pointset_Powerset<QH>::const_iterator i = y.begin(),
-40039:          y_end = y.end(); i != y_end; ++i) {
-40039:     x.sequence.push_back(Determinate<NNC_Polyhedron>
-40039:                          (NNC_Polyhedron(i->pointset(), complexity)));
-40039: 
-40039:   }
-40039: # 80 "../../src/Pointset_Powerset_templates.hh"
-40039:   x.reduced = y.reduced;
-40039: 
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: template <typename QH>
-40039: Pointset_Powerset<PSET>
-40039: ::Pointset_Powerset(const Pointset_Powerset<QH>& y,
-40039:                     Complexity_Class complexity)
-40039:   : Base(), space_dim(y.space_dimension()) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (typename Pointset_Powerset<QH>::const_iterator i = y.begin(),
-40039:          y_end = y.end(); i != y_end; ++i) {
-40039:     x.sequence.push_back(Determinate<PSET>(PSET(i->pointset(), complexity)));
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   x.reduced = false;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>::concatenate_assign(const Pointset_Powerset& y) {
-40039:   Pointset_Powerset& x = *this;
-40039: 
-40039:   x.omega_reduce();
-40039:   y.omega_reduce();
-40039:   Pointset_Powerset<PSET> new_x(x.space_dim + y.space_dim, EMPTY);
-40039:   for (const_iterator xi = x.begin(), x_end = x.end(),
-40039:          y_begin = y.begin(), y_end = y.end(); xi != x_end; ) {
-40039:     for (const_iterator yi = y_begin; yi != y_end; ++yi) {
-40039:       Det_PSET zi = *xi;
-40039:       zi.concatenate_assign(*yi);
-40039:       ((void) 0);
-40039:       new_x.sequence.push_back(zi);
-40039:     }
-40039:     ++xi;
-40039:     if ((abandon_expensive_computations != 0)
-40039:         && (xi != x_end) && (y_begin != y_end)) {
-40039: 
-40039:       PSET x_ph = xi->pointset();
-40039:       for (++xi; xi != x_end; ++xi) {
-40039:         x_ph.upper_bound_assign(xi->pointset());
-40039:       }
-40039:       const_iterator yi = y_begin;
-40039:       PSET y_ph = yi->pointset();
-40039:       for (++yi; yi != y_end; ++yi) {
-40039:         y_ph.upper_bound_assign(yi->pointset());
-40039:       }
-40039:       x_ph.concatenate_assign(y_ph);
-40039:       swap(x, new_x);
-40039:       x.add_disjunct(x_ph);
-40039:       ((void) 0);
-40039:       return;
-40039:     }
-40039:   }
-40039:   swap(x, new_x);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>::add_constraint(const Constraint& c) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().add_constraint(c);
-40039:   }
-40039:   x.reduced = false;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>::refine_with_constraint(const Constraint& c) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().refine_with_constraint(c);
-40039:   }
-40039:   x.reduced = false;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>::add_constraints(const Constraint_System& cs) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().add_constraints(cs);
-40039:   }
-40039:   x.reduced = false;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>::refine_with_constraints(const Constraint_System& cs) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().refine_with_constraints(cs);
-40039:   }
-40039:   x.reduced = false;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>::add_congruence(const Congruence& cg) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().add_congruence(cg);
-40039:   }
-40039:   x.reduced = false;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>::refine_with_congruence(const Congruence& cg) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().refine_with_congruence(cg);
-40039:   }
-40039:   x.reduced = false;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>::add_congruences(const Congruence_System& cgs) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().add_congruences(cgs);
-40039:   }
-40039:   x.reduced = false;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>::refine_with_congruences(const Congruence_System& cgs) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().refine_with_congruences(cgs);
-40039:   }
-40039:   x.reduced = false;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>::unconstrain(const Variable var) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().unconstrain(var);
-40039:     x.reduced = false;
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>::unconstrain(const Variables_Set& vars) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().unconstrain(vars);
-40039:     x.reduced = false;
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>::add_space_dimensions_and_embed(dimension_type m) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().add_space_dimensions_and_embed(m);
-40039:   }
-40039:   x.space_dim += m;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>::add_space_dimensions_and_project(dimension_type m) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().add_space_dimensions_and_project(m);
-40039:   }
-40039:   x.space_dim += m;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>::remove_space_dimensions(const Variables_Set& vars) {
-40039:   Pointset_Powerset& x = *this;
-40039:   Variables_Set::size_type num_removed = vars.size();
-40039:   if (num_removed > 0) {
-40039:     for (Sequence_iterator si = x.sequence.begin(),
-40039:            s_end = x.sequence.end(); si != s_end; ++si) {
-40039:       si->pointset().remove_space_dimensions(vars);
-40039:       x.reduced = false;
-40039:     }
-40039:     x.space_dim -= num_removed;
-40039:     ((void) 0);
-40039:   }
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>
-40039: ::remove_higher_space_dimensions(dimension_type new_dimension) {
-40039:   Pointset_Powerset& x = *this;
-40039:   if (new_dimension < x.space_dim) {
-40039:     for (Sequence_iterator si = x.sequence.begin(),
-40039:            s_end = x.sequence.end(); si != s_end; ++si) {
-40039:       si->pointset().remove_higher_space_dimensions(new_dimension);
-40039:       x.reduced = false;
-40039:     }
-40039:     x.space_dim = new_dimension;
-40039:     ((void) 0);
-40039:   }
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: template <typename Partial_Function>
-40039: void
-40039: Pointset_Powerset<PSET>::map_space_dimensions(const Partial_Function& pfunc) {
-40039:   Pointset_Powerset& x = *this;
-40039:   if (x.is_bottom()) {
-40039:     dimension_type n = 0;
-40039:     for (dimension_type i = x.space_dim; i-- > 0; ) {
-40039:       dimension_type new_i;
-40039:       if (pfunc.maps(i, new_i)) {
-40039:         ++n;
-40039:       }
-40039:     }
-40039:     x.space_dim = n;
-40039:   }
-40039:   else {
-40039:     Sequence_iterator s_begin = x.sequence.begin();
-40039:     for (Sequence_iterator si = s_begin,
-40039:            s_end = x.sequence.end(); si != s_end; ++si) {
-40039:       si->pointset().map_space_dimensions(pfunc);
-40039:     }
-40039:     x.space_dim = s_begin->pointset().space_dimension();
-40039:     x.reduced = false;
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>::expand_space_dimension(Variable var,
-40039:                                                 dimension_type m) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().expand_space_dimension(var, m);
-40039:   }
-40039:   x.space_dim += m;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>::fold_space_dimensions(const Variables_Set& vars,
-40039:                                                Variable dest) {
-40039:   Pointset_Powerset& x = *this;
-40039:   Variables_Set::size_type num_folded = vars.size();
-40039:   if (num_folded > 0) {
-40039:     for (Sequence_iterator si = x.sequence.begin(),
-40039:            s_end = x.sequence.end(); si != s_end; ++si) {
-40039:       si->pointset().fold_space_dimensions(vars, dest);
-40039:     }
-40039:   }
-40039:   x.space_dim -= num_folded;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>::affine_image(Variable var,
-40039:                                       const Linear_Expression& expr,
-40039:                                       Coefficient_traits::const_reference
-40039:                                       denominator) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().affine_image(var, expr, denominator);
-40039: 
-40039: 
-40039: 
-40039:     x.reduced = false;
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>::affine_preimage(Variable var,
-40039:                                          const Linear_Expression& expr,
-40039:                                          Coefficient_traits::const_reference
-40039:                                          denominator) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().affine_preimage(var, expr, denominator);
-40039: 
-40039: 
-40039: 
-40039:     x.reduced = false;
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>
-40039: ::generalized_affine_image(const Linear_Expression& lhs,
-40039:                            const Relation_Symbol relsym,
-40039:                            const Linear_Expression& rhs) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().generalized_affine_image(lhs, relsym, rhs);
-40039:     x.reduced = false;
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>
-40039: ::generalized_affine_preimage(const Linear_Expression& lhs,
-40039:                               const Relation_Symbol relsym,
-40039:                               const Linear_Expression& rhs) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().generalized_affine_preimage(lhs, relsym, rhs);
-40039:     x.reduced = false;
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>
-40039: ::generalized_affine_image(Variable var,
-40039:                            const Relation_Symbol relsym,
-40039:                            const Linear_Expression& expr,
-40039:                            Coefficient_traits::const_reference denominator) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().generalized_affine_image(var, relsym, expr, denominator);
-40039:     x.reduced = false;
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>
-40039: ::generalized_affine_preimage(Variable var,
-40039:                               const Relation_Symbol relsym,
-40039:                               const Linear_Expression& expr,
-40039:                               Coefficient_traits::const_reference
-40039:                               denominator) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().generalized_affine_preimage(var, relsym, expr, denominator);
-40039:     x.reduced = false;
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>
-40039: ::bounded_affine_image(Variable var,
-40039:                        const Linear_Expression& lb_expr,
-40039:                        const Linear_Expression& ub_expr,
-40039:                        Coefficient_traits::const_reference denominator) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().bounded_affine_image(var, lb_expr, ub_expr, denominator);
-40039:     x.reduced = false;
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>
-40039: ::bounded_affine_preimage(Variable var,
-40039:                           const Linear_Expression& lb_expr,
-40039:                           const Linear_Expression& ub_expr,
-40039:                           Coefficient_traits::const_reference denominator) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().bounded_affine_preimage(var, lb_expr, ub_expr,
-40039:                                           denominator);
-40039:     x.reduced = false;
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: dimension_type
-40039: Pointset_Powerset<PSET>::affine_dimension() const {
-40039: 
-40039: 
-40039:   const Pointset_Powerset& x = *this;
-40039:   C_Polyhedron x_ph(space_dim, EMPTY);
-40039: 
-40039:   for (Sequence_const_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     PSET pi(si->pointset());
-40039:     if (!pi.is_empty()) {
-40039:       C_Polyhedron phi(space_dim);
-40039:       const Constraint_System& cs = pi.minimized_constraints();
-40039:       for (Constraint_System::const_iterator i = cs.begin(),
-40039:              cs_end = cs.end(); i != cs_end; ++i) {
-40039:         const Constraint& c = *i;
-40039:         if (c.is_equality()) {
-40039:           phi.add_constraint(c);
-40039:         }
-40039:       }
-40039:       x_ph.poly_hull_assign(phi);
-40039:     }
-40039:   }
-40039: 
-40039:   return x_ph.affine_dimension();
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: Pointset_Powerset<PSET>::is_universe() const {
-40039:   const Pointset_Powerset& x = *this;
-40039: 
-40039:   if (x.is_omega_reduced()) {
-40039:     return x.size() == 1 && x.begin()->pointset().is_universe();
-40039:   }
-40039: 
-40039: 
-40039:   for (const_iterator x_i = x.begin(), x_end = x.end();
-40039:        x_i != x_end; ++x_i) {
-40039:     if (x_i->pointset().is_universe()) {
-40039: 
-40039:       if (x.size() > 1) {
-40039:         Pointset_Powerset<PSET> universe(x.space_dimension(), UNIVERSE);
-40039:         Pointset_Powerset& xx = const_cast<Pointset_Powerset&>(x);
-40039:         swap(xx, universe);
-40039:       }
-40039:       return true;
-40039:     }
-40039:   }
-40039:   return false;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: Pointset_Powerset<PSET>::is_empty() const {
-40039:   const Pointset_Powerset& x = *this;
-40039:   for (Sequence_const_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     if (!si->pointset().is_empty()) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: Pointset_Powerset<PSET>::is_discrete() const {
-40039:   const Pointset_Powerset& x = *this;
-40039:   for (Sequence_const_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     if (!si->pointset().is_discrete()) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: Pointset_Powerset<PSET>::is_topologically_closed() const {
-40039:   const Pointset_Powerset& x = *this;
-40039: 
-40039: 
-40039:   x.omega_reduce();
-40039:   for (Sequence_const_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     if (!si->pointset().is_topologically_closed()) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: Pointset_Powerset<PSET>::is_bounded() const {
-40039:   const Pointset_Powerset& x = *this;
-40039:   for (Sequence_const_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     if (!si->pointset().is_bounded()) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: Pointset_Powerset<PSET>::constrains(Variable var) const {
-40039:   const Pointset_Powerset& x = *this;
-40039: 
-40039:   const dimension_type var_space_dim = var.space_dimension();
-40039:   if (x.space_dimension() < var_space_dim) {
-40039:     std::ostringstream s;
-40039:     s << "PPL::Pointset_Powerset<PSET>::constrains(v):\n"
-40039:       << "this->space_dimension() == " << x.space_dimension() << ", "
-40039:       << "v.space_dimension() == " << var_space_dim << ".";
-40039:     throw std::invalid_argument(s.str());
-40039:   }
-40039: 
-40039:   x.omega_reduce();
-40039: 
-40039:   if (x.is_empty()) {
-40039:     return true;
-40039:   }
-40039:   for (const_iterator x_i = x.begin(), x_end = x.end();
-40039:        x_i != x_end; ++x_i) {
-40039:     if (x_i->pointset().constrains(var)) {
-40039:       return true;
-40039:     }
-40039:   }
-40039:   return false;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: Pointset_Powerset<PSET>::is_disjoint_from(const Pointset_Powerset& y) const {
-40039:   const Pointset_Powerset& x = *this;
-40039:   for (Sequence_const_iterator si = x.sequence.begin(),
-40039:          x_s_end = x.sequence.end(); si != x_s_end; ++si) {
-40039:     const PSET& pi = si->pointset();
-40039:     for (Sequence_const_iterator sj = y.sequence.begin(),
-40039:            y_s_end = y.sequence.end(); sj != y_s_end; ++sj) {
-40039:       const PSET& pj = sj->pointset();
-40039:       if (!pi.is_disjoint_from(pj)) {
-40039:         return false;
-40039:       }
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>
-40039: ::drop_some_non_integer_points(const Variables_Set& vars,
-40039:                                Complexity_Class complexity) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().drop_some_non_integer_points(vars, complexity);
-40039:   }
-40039:   x.reduced = false;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>
-40039: ::drop_some_non_integer_points(Complexity_Class complexity) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().drop_some_non_integer_points(complexity);
-40039:   }
-40039:   x.reduced = false;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>::topological_closure_assign() {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().topological_closure_assign();
-40039:   }
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: Pointset_Powerset<PSET>
-40039: ::intersection_preserving_enlarge_element(PSET& dest) const {
-40039: 
-40039:   const Pointset_Powerset& context = *this;
-40039:   ((void) 0);
-40039:   bool nonempty_intersection = false;
-40039: 
-40039:   PSET enlarged(context.space_dimension(), UNIVERSE);
-40039:   for (Sequence_const_iterator si = context.sequence.begin(),
-40039:          s_end = context.sequence.end(); si != s_end; ++si) {
-40039:     PSET context_i(si->pointset());
-40039:     context_i.intersection_assign(enlarged);
-40039:     PSET enlarged_i(dest);
-40039:     if (enlarged_i.simplify_using_context_assign(context_i)) {
-40039:       nonempty_intersection = true;
-40039:     }
-40039: 
-40039:     enlarged.intersection_assign(enlarged_i);
-40039:   }
-40039:   swap(dest, enlarged);
-40039:   return nonempty_intersection;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: Pointset_Powerset<PSET>
-40039: ::simplify_using_context_assign(const Pointset_Powerset& y) {
-40039:   Pointset_Powerset& x = *this;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   x.omega_reduce();
-40039:   if (x.is_empty()) {
-40039:     return false;
-40039:   }
-40039:   y.omega_reduce();
-40039:   if (y.is_empty()) {
-40039:     x = y;
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (y.size() == 1) {
-40039: 
-40039:     const PSET& y_i = y.sequence.begin()->pointset();
-40039:     for (Sequence_iterator si = x.sequence.begin(),
-40039:            s_end = x.sequence.end(); si != s_end; ) {
-40039:       PSET& x_i = si->pointset();
-40039:       if (x_i.simplify_using_context_assign(y_i)) {
-40039:         ++si;
-40039:       }
-40039:       else {
-40039: 
-40039:         si = x.sequence.erase(si);
-40039:       }
-40039:     }
-40039:   }
-40039:   else {
-40039: 
-40039:     for (Sequence_iterator si = x.sequence.begin(),
-40039:            s_end = x.sequence.end(); si != s_end; ) {
-40039:       if (y.intersection_preserving_enlarge_element(si->pointset())) {
-40039:         ++si;
-40039:       }
-40039:       else {
-40039: 
-40039:         si = x.sequence.erase(si);
-40039:       }
-40039:     }
-40039:   }
-40039:   x.reduced = false;
-40039:   ((void) 0);
-40039:   return !x.sequence.empty();
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: Pointset_Powerset<PSET>::contains(const Pointset_Powerset& y) const {
-40039:   const Pointset_Powerset& x = *this;
-40039:   for (Sequence_const_iterator si = y.sequence.begin(),
-40039:          y_s_end = y.sequence.end(); si != y_s_end; ++si) {
-40039:     const PSET& pi = si->pointset();
-40039:     bool pi_is_contained = false;
-40039:     for (Sequence_const_iterator sj = x.sequence.begin(),
-40039:            x_s_end = x.sequence.end();
-40039:          (sj != x_s_end && !pi_is_contained);
-40039:          ++sj) {
-40039:       const PSET& pj = sj->pointset();
-40039:       if (pj.contains(pi)) {
-40039:         pi_is_contained = true;
-40039:       }
-40039:     }
-40039:     if (!pi_is_contained) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: Pointset_Powerset<PSET>::strictly_contains(const Pointset_Powerset& y) const {
-40039: 
-40039: 
-40039: 
-40039:   const Pointset_Powerset& x = *this;
-40039:   x.omega_reduce();
-40039:   for (Sequence_const_iterator si = y.sequence.begin(),
-40039:          y_s_end = y.sequence.end(); si != y_s_end; ++si) {
-40039:     const PSET& pi = si->pointset();
-40039:     bool pi_is_strictly_contained = false;
-40039:     for (Sequence_const_iterator sj = x.sequence.begin(),
-40039:            x_s_end = x.sequence.end();
-40039:          (sj != x_s_end && !pi_is_strictly_contained); ++sj) {
-40039:       const PSET& pj = sj->pointset();
-40039:       if (pj.strictly_contains(pi)) {
-40039:         pi_is_strictly_contained = true;
-40039:       }
-40039:     }
-40039:     if (!pi_is_strictly_contained) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: template <typename Cons_or_Congr>
-40039: Poly_Con_Relation
-40039: Pointset_Powerset<PSET>::relation_with_aux(const Cons_or_Congr& c) const {
-40039:   const Pointset_Powerset& x = *this;
-40039: 
-40039: 
-40039:   bool is_included = true;
-40039: 
-40039:   bool is_disjoint = true;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool is_strictly_intersecting = false;
-40039:   bool included_once = false;
-40039:   bool disjoint_once = false;
-40039: 
-40039:   bool saturates = true;
-40039:   for (Sequence_const_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     Poly_Con_Relation relation_i = si->pointset().relation_with(c);
-40039:     if (relation_i.implies(Poly_Con_Relation::is_included())) {
-40039:       included_once = true;
-40039:     }
-40039:     else {
-40039:       is_included = false;
-40039:     }
-40039:     if (relation_i.implies(Poly_Con_Relation::is_disjoint())) {
-40039:       disjoint_once = true;
-40039:     }
-40039:     else {
-40039:       is_disjoint = false;
-40039:     }
-40039:     if (relation_i.implies(Poly_Con_Relation::strictly_intersects())) {
-40039:       is_strictly_intersecting = true;
-40039:     }
-40039:     if (!relation_i.implies(Poly_Con_Relation::saturates())) {
-40039:       saturates = false;
-40039:     }
-40039:   }
-40039: 
-40039:   Poly_Con_Relation result = Poly_Con_Relation::nothing();
-40039:   if (is_included) {
-40039:     result = result && Poly_Con_Relation::is_included();
-40039:   }
-40039:   if (is_disjoint) {
-40039:     result = result && Poly_Con_Relation::is_disjoint();
-40039:   }
-40039:   if (is_strictly_intersecting || (included_once && disjoint_once)) {
-40039:     result = result && Poly_Con_Relation::strictly_intersects();
-40039:   }
-40039:   if (saturates) {
-40039:     result = result && Poly_Con_Relation::saturates();
-40039:   }
-40039:   return result;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: Poly_Gen_Relation
-40039: Pointset_Powerset<PSET>::relation_with(const Generator& g) const {
-40039:   const Pointset_Powerset& x = *this;
-40039: 
-40039:   for (Sequence_const_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     Poly_Gen_Relation relation_i = si->pointset().relation_with(g);
-40039:     if (relation_i.implies(Poly_Gen_Relation::subsumes())) {
-40039:       return Poly_Gen_Relation::subsumes();
-40039:     }
-40039:   }
-40039: 
-40039:   return Poly_Gen_Relation::nothing();
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: Pointset_Powerset<PSET>
-40039: ::bounds_from_above(const Linear_Expression& expr) const {
-40039:   const Pointset_Powerset& x = *this;
-40039:   x.omega_reduce();
-40039:   for (Sequence_const_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     if (!si->pointset().bounds_from_above(expr)) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: Pointset_Powerset<PSET>
-40039: ::bounds_from_below(const Linear_Expression& expr) const {
-40039:   const Pointset_Powerset& x = *this;
-40039:   x.omega_reduce();
-40039:   for (Sequence_const_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     if (!si->pointset().bounds_from_below(expr)) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: Pointset_Powerset<PSET>::maximize(const Linear_Expression& expr,
-40039:                                   Coefficient& sup_n,
-40039:                                   Coefficient& sup_d,
-40039:                                   bool& maximum) const {
-40039:   const Pointset_Powerset& x = *this;
-40039:   x.omega_reduce();
-40039:   if (x.is_empty()) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   bool first = true;
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_best_sup_n; Parma_Polyhedra_Library::Coefficient& best_sup_n = holder_best_sup_n.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_best_sup_d; Parma_Polyhedra_Library::Coefficient& best_sup_d = holder_best_sup_d.item();
-40039:   best_sup_n = 0;
-40039:   best_sup_d = 1;
-40039:   bool best_max = false;
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_iter_sup_n; Parma_Polyhedra_Library::Coefficient& iter_sup_n = holder_iter_sup_n.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_iter_sup_d; Parma_Polyhedra_Library::Coefficient& iter_sup_d = holder_iter_sup_d.item();
-40039:   iter_sup_n = 0;
-40039:   iter_sup_d = 1;
-40039:   bool iter_max = false;
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_tmp; Parma_Polyhedra_Library::Coefficient& tmp = holder_tmp.item();
-40039: 
-40039:   for (Sequence_const_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     if (!si->pointset().maximize(expr, iter_sup_n, iter_sup_d, iter_max)) {
-40039:       return false;
-40039:     }
-40039:     else
-40039:       if (first) {
-40039:         first = false;
-40039:         best_sup_n = iter_sup_n;
-40039:         best_sup_d = iter_sup_d;
-40039:         best_max = iter_max;
-40039:       }
-40039:       else {
-40039:         tmp = (best_sup_n * iter_sup_d) - (iter_sup_n * best_sup_d);
-40039:         if (tmp < 0) {
-40039:           best_sup_n = iter_sup_n;
-40039:           best_sup_d = iter_sup_d;
-40039:           best_max = iter_max;
-40039:         }
-40039:         else if (tmp == 0) {
-40039:           best_max = (best_max || iter_max);
-40039:         }
-40039:       }
-40039:   }
-40039:   sup_n = best_sup_n;
-40039:   sup_d = best_sup_d;
-40039:   maximum = best_max;
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: Pointset_Powerset<PSET>::maximize(const Linear_Expression& expr,
-40039:                                   Coefficient& sup_n,
-40039:                                   Coefficient& sup_d,
-40039:                                   bool& maximum,
-40039:                                   Generator& g) const {
-40039:   const Pointset_Powerset& x = *this;
-40039:   x.omega_reduce();
-40039:   if (x.is_empty()) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   bool first = true;
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_best_sup_n; Parma_Polyhedra_Library::Coefficient& best_sup_n = holder_best_sup_n.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_best_sup_d; Parma_Polyhedra_Library::Coefficient& best_sup_d = holder_best_sup_d.item();
-40039:   best_sup_n = 0;
-40039:   best_sup_d = 1;
-40039:   bool best_max = false;
-40039:   Generator best_g = point();
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_iter_sup_n; Parma_Polyhedra_Library::Coefficient& iter_sup_n = holder_iter_sup_n.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_iter_sup_d; Parma_Polyhedra_Library::Coefficient& iter_sup_d = holder_iter_sup_d.item();
-40039:   iter_sup_n = 0;
-40039:   iter_sup_d = 1;
-40039:   bool iter_max = false;
-40039:   Generator iter_g = point();
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_tmp; Parma_Polyhedra_Library::Coefficient& tmp = holder_tmp.item();
-40039: 
-40039:   for (Sequence_const_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     if (!si->pointset().maximize(expr,
-40039:                                  iter_sup_n, iter_sup_d, iter_max, iter_g)) {
-40039:       return false;
-40039:     }
-40039:     else {
-40039:       if (first) {
-40039:         first = false;
-40039:         best_sup_n = iter_sup_n;
-40039:         best_sup_d = iter_sup_d;
-40039:         best_max = iter_max;
-40039:         best_g = iter_g;
-40039:       }
-40039:       else {
-40039:         tmp = (best_sup_n * iter_sup_d) - (iter_sup_n * best_sup_d);
-40039:         if (tmp < 0) {
-40039:           best_sup_n = iter_sup_n;
-40039:           best_sup_d = iter_sup_d;
-40039:           best_max = iter_max;
-40039:           best_g = iter_g;
-40039:         }
-40039:         else if (tmp == 0) {
-40039:           best_max = (best_max || iter_max);
-40039:           best_g = iter_g;
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039:   sup_n = best_sup_n;
-40039:   sup_d = best_sup_d;
-40039:   maximum = best_max;
-40039:   g = best_g;
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: Pointset_Powerset<PSET>::minimize(const Linear_Expression& expr,
-40039:                                   Coefficient& inf_n,
-40039:                                   Coefficient& inf_d,
-40039:                                   bool& minimum) const {
-40039:   const Pointset_Powerset& x = *this;
-40039:   x.omega_reduce();
-40039:   if (x.is_empty()) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   bool first = true;
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_best_inf_n; Parma_Polyhedra_Library::Coefficient& best_inf_n = holder_best_inf_n.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_best_inf_d; Parma_Polyhedra_Library::Coefficient& best_inf_d = holder_best_inf_d.item();
-40039:   best_inf_n = 0;
-40039:   best_inf_d = 1;
-40039:   bool best_min = false;
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_iter_inf_n; Parma_Polyhedra_Library::Coefficient& iter_inf_n = holder_iter_inf_n.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_iter_inf_d; Parma_Polyhedra_Library::Coefficient& iter_inf_d = holder_iter_inf_d.item();
-40039:   iter_inf_n = 0;
-40039:   iter_inf_d = 1;
-40039:   bool iter_min = false;
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_tmp; Parma_Polyhedra_Library::Coefficient& tmp = holder_tmp.item();
-40039: 
-40039:   for (Sequence_const_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     if (!si->pointset().minimize(expr, iter_inf_n, iter_inf_d, iter_min)) {
-40039:       return false;
-40039:     }
-40039:     else {
-40039:       if (first) {
-40039:         first = false;
-40039:         best_inf_n = iter_inf_n;
-40039:         best_inf_d = iter_inf_d;
-40039:         best_min = iter_min;
-40039:       }
-40039:       else {
-40039:         tmp = (best_inf_n * iter_inf_d) - (iter_inf_n * best_inf_d);
-40039:         if (tmp > 0) {
-40039:           best_inf_n = iter_inf_n;
-40039:           best_inf_d = iter_inf_d;
-40039:           best_min = iter_min;
-40039:         }
-40039:         else if (tmp == 0) {
-40039:           best_min = (best_min || iter_min);
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039:   inf_n = best_inf_n;
-40039:   inf_d = best_inf_d;
-40039:   minimum = best_min;
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: Pointset_Powerset<PSET>::minimize(const Linear_Expression& expr,
-40039:                                   Coefficient& inf_n,
-40039:                                   Coefficient& inf_d,
-40039:                                   bool& minimum,
-40039:                                   Generator& g) const {
-40039:   const Pointset_Powerset& x = *this;
-40039:   x.omega_reduce();
-40039:   if (x.is_empty()) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   bool first = true;
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_best_inf_n; Parma_Polyhedra_Library::Coefficient& best_inf_n = holder_best_inf_n.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_best_inf_d; Parma_Polyhedra_Library::Coefficient& best_inf_d = holder_best_inf_d.item();
-40039:   best_inf_n = 0;
-40039:   best_inf_d = 1;
-40039:   bool best_min = false;
-40039:   Generator best_g = point();
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_iter_inf_n; Parma_Polyhedra_Library::Coefficient& iter_inf_n = holder_iter_inf_n.item();
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_iter_inf_d; Parma_Polyhedra_Library::Coefficient& iter_inf_d = holder_iter_inf_d.item();
-40039:   iter_inf_n = 0;
-40039:   iter_inf_d = 1;
-40039:   bool iter_min = false;
-40039:   Generator iter_g = point();
-40039: 
-40039:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_tmp; Parma_Polyhedra_Library::Coefficient& tmp = holder_tmp.item();
-40039: 
-40039:   for (Sequence_const_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     if (!si->pointset().minimize(expr,
-40039:                                  iter_inf_n, iter_inf_d, iter_min, iter_g)) {
-40039:       return false;
-40039:     }
-40039:     else {
-40039:       if (first) {
-40039:         first = false;
-40039:         best_inf_n = iter_inf_n;
-40039:         best_inf_d = iter_inf_d;
-40039:         best_min = iter_min;
-40039:         best_g = iter_g;
-40039:       }
-40039:       else {
-40039:         tmp = (best_inf_n * iter_inf_d) - (iter_inf_n * best_inf_d);
-40039:         if (tmp > 0) {
-40039:           best_inf_n = iter_inf_n;
-40039:           best_inf_d = iter_inf_d;
-40039:           best_min = iter_min;
-40039:           best_g = iter_g;
-40039:         }
-40039:         else if (tmp == 0) {
-40039:           best_min = (best_min || iter_min);
-40039:           best_g = iter_g;
-40039:         }
-40039:       }
-40039:     }
-40039:   }
-40039:   inf_n = best_inf_n;
-40039:   inf_d = best_inf_d;
-40039:   minimum = best_min;
-40039:   g = best_g;
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: Pointset_Powerset<PSET>::contains_integer_point() const {
-40039:   const Pointset_Powerset& x = *this;
-40039:   for (Sequence_const_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     if (si->pointset().contains_integer_point()) {
-40039:       return true;
-40039:     }
-40039:   }
-40039:   return false;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>::wrap_assign(const Variables_Set& vars,
-40039:                                      Bounded_Integer_Type_Width w,
-40039:                                      Bounded_Integer_Type_Representation r,
-40039:                                      Bounded_Integer_Type_Overflow o,
-40039:                                      const Constraint_System* cs_p,
-40039:                                      unsigned complexity_threshold,
-40039:                                      bool wrap_individually) {
-40039:   Pointset_Powerset& x = *this;
-40039:   for (Sequence_iterator si = x.sequence.begin(),
-40039:          s_end = x.sequence.end(); si != s_end; ++si) {
-40039:     si->pointset().wrap_assign(vars, w, r, o, cs_p,
-40039:                                complexity_threshold, wrap_individually);
-40039:   }
-40039:   x.reduced = false;
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>::pairwise_reduce() {
-40039:   Pointset_Powerset& x = *this;
-40039: 
-40039:   x.omega_reduce();
-40039: 
-40039:   size_type n = x.size();
-40039:   size_type deleted;
-40039:   do {
-40039:     Pointset_Powerset new_x(x.space_dim, EMPTY);
-40039:     std::deque<bool> marked(n, false);
-40039:     deleted = 0;
-40039:     Sequence_iterator s_begin = x.sequence.begin();
-40039:     Sequence_iterator s_end = x.sequence.end();
-40039:     unsigned si_index = 0;
-40039:     for (Sequence_iterator si = s_begin; si != s_end; ++si, ++si_index) {
-40039:       if (marked[si_index]) {
-40039:         continue;
-40039:       }
-40039:       PSET& pi = si->pointset();
-40039:       Sequence_const_iterator sj = si;
-40039:       unsigned sj_index = si_index;
-40039:       for (++sj, ++sj_index; sj != s_end; ++sj, ++sj_index) {
-40039:         if (marked[sj_index]) {
-40039:           continue;
-40039:         }
-40039:         const PSET& pj = sj->pointset();
-40039:         if (pi.upper_bound_assign_if_exact(pj)) {
-40039:           marked[si_index] = true;
-40039:           marked[sj_index] = true;
-40039:           new_x.add_non_bottom_disjunct_preserve_reduction(pi);
-40039:           ++deleted;
-40039:           goto next;
-40039:         }
-40039:       }
-40039:     next:
-40039:       ;
-40039:     }
-40039:     iterator new_x_begin = new_x.begin();
-40039:     iterator new_x_end = new_x.end();
-40039:     unsigned xi_index = 0;
-40039:     for (const_iterator xi = x.begin(),
-40039:            x_end = x.end(); xi != x_end; ++xi, ++xi_index) {
-40039:       if (!marked[xi_index]) {
-40039:         new_x_begin
-40039:           = new_x.add_non_bottom_disjunct_preserve_reduction(*xi,
-40039:                                                              new_x_begin,
-40039:                                                              new_x_end);
-40039:       }
-40039:     }
-40039:     using std::swap;
-40039:     swap(x.sequence, new_x.sequence);
-40039:     n -= deleted;
-40039:   } while (deleted > 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: template <typename Widening>
-40039: void
-40039: Pointset_Powerset<PSET>::
-40039: BGP99_heuristics_assign(const Pointset_Powerset& y, Widening widen_fun) {
-40039: 
-40039:   Pointset_Powerset& x = *this;
-40039: # 1295 "../../src/Pointset_Powerset_templates.hh"
-40039:   size_type n = x.size();
-40039:   Pointset_Powerset new_x(x.space_dim, EMPTY);
-40039:   std::deque<bool> marked(n, false);
-40039:   const_iterator x_begin = x.begin();
-40039:   const_iterator x_end = x.end();
-40039:   unsigned i_index = 0;
-40039:   for (const_iterator i = x_begin,
-40039:          y_begin = y.begin(), y_end = y.end();
-40039:          i != x_end; ++i, ++i_index) {
-40039:     for (const_iterator j = y_begin; j != y_end; ++j) {
-40039:       const PSET& pi = i->pointset();
-40039:       const PSET& pj = j->pointset();
-40039:       if (pi.contains(pj)) {
-40039:         PSET pi_copy = pi;
-40039:         widen_fun(pi_copy, pj);
-40039:         new_x.add_non_bottom_disjunct_preserve_reduction(pi_copy);
-40039:         marked[i_index] = true;
-40039:       }
-40039:     }
-40039:   }
-40039:   iterator new_x_begin = new_x.begin();
-40039:   iterator new_x_end = new_x.end();
-40039:   i_index = 0;
-40039:   for (const_iterator i = x_begin; i != x_end; ++i, ++i_index) {
-40039:     if (!marked[i_index]) {
-40039:       new_x_begin
-40039:         = new_x.add_non_bottom_disjunct_preserve_reduction(*i,
-40039:                                                            new_x_begin,
-40039:                                                            new_x_end);
-40039:     }
-40039:   }
-40039:   using std::swap;
-40039:   swap(x.sequence, new_x.sequence);
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: template <typename Widening>
-40039: void
-40039: Pointset_Powerset<PSET>::
-40039: BGP99_extrapolation_assign(const Pointset_Powerset& y,
-40039:                            Widening widen_fun,
-40039:                            unsigned max_disjuncts) {
-40039: 
-40039:   Pointset_Powerset& x = *this;
-40039: # 1351 "../../src/Pointset_Powerset_templates.hh"
-40039:   x.pairwise_reduce();
-40039:   if (max_disjuncts != 0) {
-40039:     x.collapse(max_disjuncts);
-40039:   }
-40039:   x.BGP99_heuristics_assign(y, widen_fun);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: template <typename Cert>
-40039: void
-40039: Pointset_Powerset<PSET>::
-40039: collect_certificates(std::map<Cert, size_type,
-40039:                      typename Cert::Compare>& cert_ms) const {
-40039:   const Pointset_Powerset& x = *this;
-40039:   ((void) 0);
-40039:   ((void) 0);
-40039:   for (const_iterator i = x.begin(), end = x.end(); i != end; ++i) {
-40039:     Cert ph_cert(i->pointset());
-40039:     ++cert_ms[ph_cert];
-40039:   }
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: template <typename Cert>
-40039: bool
-40039: Pointset_Powerset<PSET>::
-40039: is_cert_multiset_stabilizing(const std::map<Cert, size_type,
-40039:                              typename Cert::Compare>& y_cert_ms) const {
-40039:   typedef std::map<Cert, size_type, typename Cert::Compare> Cert_Multiset;
-40039:   Cert_Multiset x_cert_ms;
-40039:   collect_certificates(x_cert_ms);
-40039:   typename Cert_Multiset::const_iterator xi = x_cert_ms.begin();
-40039:   typename Cert_Multiset::const_iterator x_cert_ms_end = x_cert_ms.end();
-40039:   typename Cert_Multiset::const_iterator yi = y_cert_ms.begin();
-40039:   typename Cert_Multiset::const_iterator y_cert_ms_end = y_cert_ms.end();
-40039:   while (xi != x_cert_ms_end && yi != y_cert_ms_end) {
-40039:     const Cert& xi_cert = xi->first;
-40039:     const Cert& yi_cert = yi->first;
-40039:     switch (xi_cert.compare(yi_cert)) {
-40039:     case 0:
-40039: 
-40039:       {
-40039:         const size_type& xi_count = xi->second;
-40039:         const size_type& yi_count = yi->second;
-40039:         if (xi_count == yi_count) {
-40039: 
-40039:           ++xi;
-40039:           ++yi;
-40039:         }
-40039:         else {
-40039: 
-40039:           return xi_count < yi_count;
-40039:         }
-40039:         break;
-40039:       }
-40039:     case 1:
-40039: 
-40039:       return false;
-40039: 
-40039:     case -1:
-40039: 
-40039:       return true;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   return yi != y_cert_ms_end;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: template <typename Cert, typename Widening>
-40039: void
-40039: Pointset_Powerset<PSET>::BHZ03_widening_assign(const Pointset_Powerset& y,
-40039:                                                Widening widen_fun) {
-40039: 
-40039:   Pointset_Powerset& x = *this;
-40039: # 1440 "../../src/Pointset_Powerset_templates.hh"
-40039:   ((void) 0);
-40039:   if (y.size() == 0) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   PSET x_hull(x.space_dim, EMPTY);
-40039:   for (const_iterator i = x.begin(), x_end = x.end(); i != x_end; ++i) {
-40039:     x_hull.upper_bound_assign(i->pointset());
-40039:   }
-40039: 
-40039: 
-40039:   PSET y_hull(y.space_dim, EMPTY);
-40039:   for (const_iterator i = y.begin(), y_end = y.end(); i != y_end; ++i) {
-40039:     y_hull.upper_bound_assign(i->pointset());
-40039:   }
-40039: 
-40039:   const Cert y_hull_cert(y_hull);
-40039: 
-40039: 
-40039:   int hull_stabilization = y_hull_cert.compare(x_hull);
-40039:   if (hull_stabilization == 1) {
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   const bool y_is_not_a_singleton = y.size() > 1;
-40039: 
-40039: 
-40039: 
-40039:   typedef std::map<Cert, size_type, typename Cert::Compare> Cert_Multiset;
-40039:   Cert_Multiset y_cert_ms;
-40039:   bool y_cert_ms_computed = false;
-40039: 
-40039:   if (hull_stabilization == 0 && y_is_not_a_singleton) {
-40039: 
-40039:     y.collect_certificates(y_cert_ms);
-40039:     y_cert_ms_computed = true;
-40039: 
-40039:     if (x.is_cert_multiset_stabilizing(y_cert_ms)) {
-40039:       return;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039:   Pointset_Powerset<PSET> bgp99_heuristics = x;
-40039:   bgp99_heuristics.BGP99_heuristics_assign(y, widen_fun);
-40039: 
-40039: 
-40039:   PSET bgp99_heuristics_hull(x.space_dim, EMPTY);
-40039:   for (const_iterator i = bgp99_heuristics.begin(),
-40039:          b_h_end = bgp99_heuristics.end(); i != b_h_end; ++i) {
-40039:     bgp99_heuristics_hull.upper_bound_assign(i->pointset());
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   hull_stabilization = y_hull_cert.compare(bgp99_heuristics_hull);
-40039:   if (hull_stabilization == 1) {
-40039: 
-40039:     swap(x, bgp99_heuristics);
-40039:     return;
-40039:   }
-40039:   else if (hull_stabilization == 0 && y_is_not_a_singleton) {
-40039: 
-40039:     if (!y_cert_ms_computed) {
-40039:       y.collect_certificates(y_cert_ms);
-40039:       y_cert_ms_computed = true;
-40039:     }
-40039:     if (bgp99_heuristics.is_cert_multiset_stabilizing(y_cert_ms)) {
-40039:       swap(x, bgp99_heuristics);
-40039:       return;
-40039:     }
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     Pointset_Powerset<PSET> reduced_bgp99_heuristics(bgp99_heuristics);
-40039:     reduced_bgp99_heuristics.pairwise_reduce();
-40039:     if (reduced_bgp99_heuristics.is_cert_multiset_stabilizing(y_cert_ms)) {
-40039:       swap(x, reduced_bgp99_heuristics);
-40039:       return;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (bgp99_heuristics_hull.strictly_contains(y_hull)) {
-40039: 
-40039:     PSET ph = bgp99_heuristics_hull;
-40039:     widen_fun(ph, y_hull);
-40039: 
-40039:     ph.difference_assign(bgp99_heuristics_hull);
-40039:     x.add_disjunct(ph);
-40039:     return;
-40039:   }
-40039: 
-40039: 
-40039:   Pointset_Powerset<PSET> x_hull_singleton(x.space_dim, EMPTY);
-40039:   x_hull_singleton.add_disjunct(x_hull);
-40039:   swap(x, x_hull_singleton);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Pointset_Powerset<PSET>::ascii_dump(std::ostream& s) const {
-40039:   const Pointset_Powerset& x = *this;
-40039:   s << "size " << x.size()
-40039:     << "\nspace_dim " << x.space_dim
-40039:     << "\n";
-40039:   for (const_iterator xi = x.begin(), x_end = x.end();
-40039:        xi != x_end; ++xi) {
-40039:     xi->pointset().ascii_dump(s);
-40039:   }
-40039: }
-40039: 
-40039: template <typename PSET> void Pointset_Powerset<PSET>::ascii_dump() const { ascii_dump(std::cerr); } template <typename PSET> void Pointset_Powerset<PSET>::print() const { using IO_Operators::operator<<; std::cerr << *this; }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: Pointset_Powerset<PSET>::ascii_load(std::istream& s) {
-40039:   Pointset_Powerset& x = *this;
-40039:   std::string str;
-40039: 
-40039:   if (!(s >> str) || str != "size") {
-40039:     return false;
-40039:   }
-40039: 
-40039:   size_type sz;
-40039: 
-40039:   if (!(s >> sz)) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (!(s >> str) || str != "space_dim") {
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (!(s >> x.space_dim)) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   Pointset_Powerset new_x(x.space_dim, EMPTY);
-40039:   while (sz-- > 0) {
-40039:     PSET ph;
-40039:     if (!ph.ascii_load(s)) {
-40039:       return false;
-40039:     }
-40039:     new_x.add_disjunct(ph);
-40039:   }
-40039:   swap(x, new_x);
-40039: 
-40039: 
-40039:   ((void) 0);
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: Pointset_Powerset<PSET>::OK() const {
-40039:   const Pointset_Powerset& x = *this;
-40039:   for (const_iterator xi = x.begin(), x_end = x.end(); xi != x_end; ++xi) {
-40039:     const PSET& pi = xi->pointset();
-40039:     if (pi.space_dimension() != x.space_dim) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       return false;
-40039:     }
-40039:   }
-40039:   return x.Base::OK();
-40039: }
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: namespace Pointset_Powersets {
-40039: # 1628 "../../src/Pointset_Powerset_templates.hh"
-40039: template <typename PSET>
-40039: void
-40039: linear_partition_aux(const Constraint& c,
-40039:                      PSET& pset,
-40039:                      Pointset_Powerset<NNC_Polyhedron>& r) {
-40039:   const Linear_Expression le(c.expression());
-40039:   const Constraint& neg_c = c.is_strict_inequality() ? (le <= 0) : (le < 0);
-40039:   NNC_Polyhedron nnc_ph_pset(pset);
-40039:   nnc_ph_pset.add_constraint(neg_c);
-40039:   if (!nnc_ph_pset.is_empty()) {
-40039:     r.add_disjunct(nnc_ph_pset);
-40039:   }
-40039:   pset.add_constraint(c);
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: template <typename PSET>
-40039: std::pair<PSET, Pointset_Powerset<NNC_Polyhedron> >
-40039: linear_partition(const PSET& p, const PSET& q) {
-40039:   using Implementation::Pointset_Powersets::linear_partition_aux;
-40039: 
-40039:   Pointset_Powerset<NNC_Polyhedron> r(p.space_dimension(), EMPTY);
-40039:   PSET pset = q;
-40039:   const Constraint_System& p_constraints = p.constraints();
-40039:   for (Constraint_System::const_iterator i = p_constraints.begin(),
-40039:          p_constraints_end = p_constraints.end();
-40039:        i != p_constraints_end;
-40039:        ++i) {
-40039:     const Constraint& c = *i;
-40039:     if (c.is_equality()) {
-40039:       const Linear_Expression le(c.expression());
-40039:       linear_partition_aux(le <= 0, pset, r);
-40039:       linear_partition_aux(le >= 0, pset, r);
-40039:     }
-40039:     else {
-40039:       linear_partition_aux(c, pset, r);
-40039:     }
-40039:   }
-40039:   return std::make_pair(pset, r);
-40039: }
-40039: 
-40039: }
-40039: # 1455 "../../src/Pointset_Powerset_defs.hh" 2
-40039: # 29 "../../src/algorithms.hh" 2
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: # 42 "../../src/algorithms.hh"
-40039: template <typename PH>
-40039: bool
-40039: poly_hull_assign_if_exact(PH& p, const PH& q);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename PH>
-40039: bool
-40039: poly_hull_assign_if_exact(PH& p, const PH& q) {
-40039:   PH poly_hull = p;
-40039:   NNC_Polyhedron nnc_p(p);
-40039:   poly_hull.poly_hull_assign(q);
-40039:   std::pair<PH, Pointset_Powerset<NNC_Polyhedron> >
-40039:     partition = linear_partition(q, poly_hull);
-40039:   const Pointset_Powerset<NNC_Polyhedron>& s = partition.second;
-40039:   typedef Pointset_Powerset<NNC_Polyhedron>::const_iterator iter;
-40039:   for (iter i = s.begin(), s_end = s.end(); i != s_end; ++i) {
-40039: 
-40039: 
-40039: 
-40039:     if (!nnc_p.contains(i->pointset())) {
-40039:       return false;
-40039:     }
-40039:   }
-40039:   p = poly_hull;
-40039:   return true;
-40039: }
-40039: 
-40039: }
-40039: # 19 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/termination_defs.hh" 1
-40039: # 34 "../../src/termination_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Termination_Helpers {
-40039: public:
-40039:   static void
-40039:   all_affine_ranking_functions_PR(const Constraint_System& cs_before,
-40039:                                   const Constraint_System& cs_after,
-40039:                                   NNC_Polyhedron& mu_space);
-40039:   static bool
-40039:   one_affine_ranking_function_PR(const Constraint_System& cs_before,
-40039:                                  const Constraint_System& cs_after,
-40039:                                  Generator& mu);
-40039:   static bool
-40039:   one_affine_ranking_function_PR_original(const Constraint_System& cs,
-40039:                                           Generator& mu);
-40039:   static void
-40039:   all_affine_ranking_functions_PR_original(const Constraint_System& cs,
-40039:                                            NNC_Polyhedron& mu_space);
-40039: 
-40039:   template <typename PSET>
-40039:   static void
-40039:   assign_all_inequalities_approximation(const PSET& pset_before,
-40039:                                         const PSET& pset_after,
-40039:                                         Constraint_System& cs);
-40039: };
-40039: # 92 "../../src/termination_defs.hh"
-40039: template <typename PSET>
-40039: bool
-40039: termination_test_MS(const PSET& pset);
-40039: # 134 "../../src/termination_defs.hh"
-40039: template <typename PSET>
-40039: bool
-40039: termination_test_MS_2(const PSET& pset_before, const PSET& pset_after);
-40039: # 176 "../../src/termination_defs.hh"
-40039: template <typename PSET>
-40039: bool
-40039: one_affine_ranking_function_MS(const PSET& pset, Generator& mu);
-40039: # 227 "../../src/termination_defs.hh"
-40039: template <typename PSET>
-40039: bool
-40039: one_affine_ranking_function_MS_2(const PSET& pset_before,
-40039:                                  const PSET& pset_after,
-40039:                                  Generator& mu);
-40039: # 271 "../../src/termination_defs.hh"
-40039: template <typename PSET>
-40039: void
-40039: all_affine_ranking_functions_MS(const PSET& pset, C_Polyhedron& mu_space);
-40039: # 322 "../../src/termination_defs.hh"
-40039: template <typename PSET>
-40039: void
-40039: all_affine_ranking_functions_MS_2(const PSET& pset_before,
-40039:                                   const PSET& pset_after,
-40039:                                   C_Polyhedron& mu_space);
-40039: # 374 "../../src/termination_defs.hh"
-40039: template <typename PSET>
-40039: void
-40039: all_affine_quasi_ranking_functions_MS(const PSET& pset,
-40039:                                       C_Polyhedron& decreasing_mu_space,
-40039:                                       C_Polyhedron& bounded_mu_space);
-40039: # 435 "../../src/termination_defs.hh"
-40039: template <typename PSET>
-40039: void
-40039: all_affine_quasi_ranking_functions_MS_2(const PSET& pset_before,
-40039:                                         const PSET& pset_after,
-40039:                                         C_Polyhedron& decreasing_mu_space,
-40039:                                         C_Polyhedron& bounded_mu_space);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: termination_test_PR(const PSET& pset);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: termination_test_PR_2(const PSET& pset_before, const PSET& pset_after);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: one_affine_ranking_function_PR(const PSET& pset, Generator& mu);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: one_affine_ranking_function_PR_2(const PSET& pset_before,
-40039:                                  const PSET& pset_after,
-40039:                                  Generator& mu);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: all_affine_ranking_functions_PR(const PSET& pset, NNC_Polyhedron& mu_space);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: all_affine_ranking_functions_PR_2(const PSET& pset_before,
-40039:                                   const PSET& pset_after,
-40039:                                   NNC_Polyhedron& mu_space);
-40039: 
-40039: 
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/termination_templates.hh" 1
-40039: # 42 "../../src/termination_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: namespace Termination {
-40039: # 160 "../../src/termination_templates.hh"
-40039: void
-40039: assign_all_inequalities_approximation(const Constraint_System& cs_in,
-40039:                                       Constraint_System& cs_out);
-40039: 
-40039: template <typename PSET>
-40039: inline void
-40039: assign_all_inequalities_approximation(const PSET& pset,
-40039:                                       Constraint_System& cs) {
-40039:   assign_all_inequalities_approximation(pset.minimized_constraints(), cs);
-40039: }
-40039: 
-40039: template <>
-40039: void
-40039: assign_all_inequalities_approximation(const C_Polyhedron& ph,
-40039:                                       Constraint_System& cs);
-40039: 
-40039: bool
-40039: termination_test_MS(const Constraint_System& cs);
-40039: 
-40039: bool
-40039: one_affine_ranking_function_MS(const Constraint_System& cs,
-40039:                                Generator& mu);
-40039: 
-40039: void
-40039: all_affine_ranking_functions_MS(const Constraint_System& cs,
-40039:                                 C_Polyhedron& mu_space);
-40039: 
-40039: void
-40039: all_affine_quasi_ranking_functions_MS(const Constraint_System& cs,
-40039:                                       C_Polyhedron& decreasing_mu_space,
-40039:                                       C_Polyhedron& bounded_mu_space);
-40039: 
-40039: bool
-40039: termination_test_PR(const Constraint_System& cs_before,
-40039:                     const Constraint_System& cs_after);
-40039: 
-40039: bool
-40039: one_affine_ranking_function_PR(const Constraint_System& cs_before,
-40039:                                const Constraint_System& cs_after,
-40039:                                Generator& mu);
-40039: 
-40039: void
-40039: all_affine_ranking_functions_PR(const Constraint_System& cs_before,
-40039:                                 const Constraint_System& cs_after,
-40039:                                 NNC_Polyhedron& mu_space);
-40039: 
-40039: bool
-40039: termination_test_PR_original(const Constraint_System& cs);
-40039: 
-40039: bool
-40039: one_affine_ranking_function_PR_original(const Constraint_System& cs,
-40039:                                         Generator& mu);
-40039: 
-40039: void
-40039: all_affine_ranking_functions_PR_original(const Constraint_System& cs,
-40039:                                          NNC_Polyhedron& mu_space);
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: Termination_Helpers
-40039: ::assign_all_inequalities_approximation(const PSET& pset_before,
-40039:                                         const PSET& pset_after,
-40039:                                         Constraint_System& cs) {
-40039:   Implementation::Termination
-40039:     ::assign_all_inequalities_approximation(pset_before, cs);
-40039:   cs.shift_space_dimensions(Variable(0), cs.space_dimension());
-40039:   Constraint_System cs_after;
-40039:   Implementation::Termination
-40039:     ::assign_all_inequalities_approximation(pset_after, cs_after);
-40039: 
-40039:   for (Constraint_System::const_iterator i = cs_after.begin(),
-40039:          cs_after_end = cs_after.end(); i != cs_after_end; ++i) {
-40039:     cs.insert(*i);
-40039:   }
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: termination_test_MS(const PSET& pset) {
-40039:   const dimension_type space_dim = pset.space_dimension();
-40039:   if (space_dim % 2 != 0) {
-40039:     std::ostringstream s;
-40039:     s << "PPL::termination_test_MS(pset):\n"
-40039:          "pset.space_dimension() == " << space_dim
-40039:       << " is odd.";
-40039:     throw std::invalid_argument(s.str());
-40039:   }
-40039: 
-40039:   using namespace Implementation::Termination;
-40039:   Constraint_System cs;
-40039:   assign_all_inequalities_approximation(pset, cs);
-40039:   return termination_test_MS(cs);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: termination_test_MS_2(const PSET& pset_before, const PSET& pset_after) {
-40039:   const dimension_type before_space_dim = pset_before.space_dimension();
-40039:   const dimension_type after_space_dim = pset_after.space_dimension();
-40039:   if (after_space_dim != 2*before_space_dim) {
-40039:     std::ostringstream s;
-40039:     s << "PPL::termination_test_MS_2(pset_before, pset_after):\n"
-40039:          "pset_before.space_dimension() == " << before_space_dim
-40039:       << ", pset_after.space_dimension() == " << after_space_dim
-40039:       << ";\nthe latter should be twice the former.";
-40039:     throw std::invalid_argument(s.str());
-40039:   }
-40039: 
-40039:   using namespace Implementation::Termination;
-40039:   Constraint_System cs;
-40039:   Termination_Helpers
-40039:     ::assign_all_inequalities_approximation(pset_before, pset_after, cs);
-40039:   return termination_test_MS(cs);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: one_affine_ranking_function_MS(const PSET& pset, Generator& mu) {
-40039:   const dimension_type space_dim = pset.space_dimension();
-40039:   if (space_dim % 2 != 0) {
-40039:     std::ostringstream s;
-40039:     s << "PPL::one_affine_ranking_function_MS(pset, mu):\n"
-40039:          "pset.space_dimension() == " << space_dim
-40039:       << " is odd.";
-40039:     throw std::invalid_argument(s.str());
-40039:   }
-40039: 
-40039:   using namespace Implementation::Termination;
-40039:   Constraint_System cs;
-40039:   assign_all_inequalities_approximation(pset, cs);
-40039:   return one_affine_ranking_function_MS(cs, mu);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: one_affine_ranking_function_MS_2(const PSET& pset_before,
-40039:                                  const PSET& pset_after,
-40039:                                  Generator& mu) {
-40039:   const dimension_type before_space_dim = pset_before.space_dimension();
-40039:   const dimension_type after_space_dim = pset_after.space_dimension();
-40039:   if (after_space_dim != 2*before_space_dim) {
-40039:     std::ostringstream s;
-40039:     s << "PPL::one_affine_ranking_function_MS_2(pset_before, pset_after, mu):\n"
-40039:          "pset_before.space_dimension() == " << before_space_dim
-40039:       << ", pset_after.space_dimension() == " << after_space_dim
-40039:       << ";\nthe latter should be twice the former.";
-40039:     throw std::invalid_argument(s.str());
-40039:   }
-40039: 
-40039:   using namespace Implementation::Termination;
-40039:   Constraint_System cs;
-40039:   Termination_Helpers
-40039:     ::assign_all_inequalities_approximation(pset_before, pset_after, cs);
-40039:   return one_affine_ranking_function_MS(cs, mu);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: all_affine_ranking_functions_MS(const PSET& pset, C_Polyhedron& mu_space) {
-40039:   const dimension_type space_dim = pset.space_dimension();
-40039:   if (space_dim % 2 != 0) {
-40039:     std::ostringstream s;
-40039:     s << "PPL::all_affine_ranking_functions_MS(pset, mu_space):\n"
-40039:          "pset.space_dimension() == " << space_dim
-40039:       << " is odd.";
-40039:     throw std::invalid_argument(s.str());
-40039:   }
-40039: 
-40039:   if (pset.is_empty()) {
-40039:     mu_space = C_Polyhedron(1 + space_dim/2, UNIVERSE);
-40039:     return;
-40039:   }
-40039: 
-40039:   using namespace Implementation::Termination;
-40039:   Constraint_System cs;
-40039:   assign_all_inequalities_approximation(pset, cs);
-40039:   all_affine_ranking_functions_MS(cs, mu_space);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: all_affine_ranking_functions_MS_2(const PSET& pset_before,
-40039:                                   const PSET& pset_after,
-40039:                                   C_Polyhedron& mu_space) {
-40039:   const dimension_type before_space_dim = pset_before.space_dimension();
-40039:   const dimension_type after_space_dim = pset_after.space_dimension();
-40039:   if (after_space_dim != 2*before_space_dim) {
-40039:     std::ostringstream s;
-40039:     s << "PPL::all_affine_ranking_functions_MS_2"
-40039:       << "(pset_before, pset_after, mu_space):\n"
-40039:       << "pset_before.space_dimension() == " << before_space_dim
-40039:       << ", pset_after.space_dimension() == " << after_space_dim
-40039:       << ";\nthe latter should be twice the former.";
-40039:     throw std::invalid_argument(s.str());
-40039:   }
-40039: 
-40039:   if (pset_before.is_empty()) {
-40039:     mu_space = C_Polyhedron(1 + before_space_dim, UNIVERSE);
-40039:     return;
-40039:   }
-40039: 
-40039:   using namespace Implementation::Termination;
-40039:   Constraint_System cs;
-40039:   Termination_Helpers
-40039:     ::assign_all_inequalities_approximation(pset_before, pset_after, cs);
-40039:   all_affine_ranking_functions_MS(cs, mu_space);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: all_affine_quasi_ranking_functions_MS(const PSET& pset,
-40039:                                       C_Polyhedron& decreasing_mu_space,
-40039:                                       C_Polyhedron& bounded_mu_space) {
-40039:   const dimension_type space_dim = pset.space_dimension();
-40039:   if (space_dim % 2 != 0) {
-40039:     std::ostringstream s;
-40039:     s << "PPL::all_affine_quasi_ranking_functions_MS"
-40039:       << "(pset, decr_space, bounded_space):\n"
-40039:       << "pset.space_dimension() == " << space_dim
-40039:       << " is odd.";
-40039:     throw std::invalid_argument(s.str());
-40039:   }
-40039: 
-40039:   if (pset.is_empty()) {
-40039:     decreasing_mu_space = C_Polyhedron(1 + space_dim/2, UNIVERSE);
-40039:     bounded_mu_space = decreasing_mu_space;
-40039:     return;
-40039:   }
-40039: 
-40039:   using namespace Implementation::Termination;
-40039:   Constraint_System cs;
-40039:   assign_all_inequalities_approximation(pset, cs);
-40039:   all_affine_quasi_ranking_functions_MS(cs,
-40039:                                         decreasing_mu_space,
-40039:                                         bounded_mu_space);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: all_affine_quasi_ranking_functions_MS_2(const PSET& pset_before,
-40039:                                         const PSET& pset_after,
-40039:                                         C_Polyhedron& decreasing_mu_space,
-40039:                                         C_Polyhedron& bounded_mu_space) {
-40039:   const dimension_type before_space_dim = pset_before.space_dimension();
-40039:   const dimension_type after_space_dim = pset_after.space_dimension();
-40039:   if (after_space_dim != 2*before_space_dim) {
-40039:     std::ostringstream s;
-40039:     s << "PPL::all_affine_quasi_ranking_functions_MS_2"
-40039:       << "(pset_before, pset_after, decr_space, bounded_space):\n"
-40039:       << "pset_before.space_dimension() == " << before_space_dim
-40039:       << ", pset_after.space_dimension() == " << after_space_dim
-40039:       << ";\nthe latter should be twice the former.";
-40039:     throw std::invalid_argument(s.str());
-40039:   }
-40039: 
-40039:   if (pset_before.is_empty()) {
-40039:     decreasing_mu_space = C_Polyhedron(1 + before_space_dim, UNIVERSE);
-40039:     bounded_mu_space = decreasing_mu_space;
-40039:     return;
-40039:   }
-40039: 
-40039:   using namespace Implementation::Termination;
-40039:   Constraint_System cs;
-40039:   Termination_Helpers
-40039:     ::assign_all_inequalities_approximation(pset_before, pset_after, cs);
-40039:   all_affine_quasi_ranking_functions_MS(cs,
-40039:                                         decreasing_mu_space,
-40039:                                         bounded_mu_space);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: termination_test_PR_2(const PSET& pset_before, const PSET& pset_after) {
-40039:   const dimension_type before_space_dim = pset_before.space_dimension();
-40039:   const dimension_type after_space_dim = pset_after.space_dimension();
-40039:   if (after_space_dim != 2*before_space_dim) {
-40039:     std::ostringstream s;
-40039:     s << "PPL::termination_test_PR_2(pset_before, pset_after):\n"
-40039:       << "pset_before.space_dimension() == " << before_space_dim
-40039:       << ", pset_after.space_dimension() == " << after_space_dim
-40039:       << ";\nthe latter should be twice the former.";
-40039:     throw std::invalid_argument(s.str());
-40039:   }
-40039: 
-40039:   using namespace Implementation::Termination;
-40039:   Constraint_System cs_before;
-40039:   Constraint_System cs_after;
-40039:   assign_all_inequalities_approximation(pset_before, cs_before);
-40039:   assign_all_inequalities_approximation(pset_after, cs_after);
-40039:   return termination_test_PR(cs_before, cs_after);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: termination_test_PR(const PSET& pset) {
-40039:   const dimension_type space_dim = pset.space_dimension();
-40039:   if (space_dim % 2 != 0) {
-40039:     std::ostringstream s;
-40039:     s << "PPL::termination_test_PR(pset):\n"
-40039:       << "pset.space_dimension() == " << space_dim
-40039:       << " is odd.";
-40039:     throw std::invalid_argument(s.str());
-40039:   }
-40039: 
-40039:   using namespace Implementation::Termination;
-40039:   Constraint_System cs;
-40039:   assign_all_inequalities_approximation(pset, cs);
-40039:   return termination_test_PR_original(cs);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: one_affine_ranking_function_PR_2(const PSET& pset_before,
-40039:                                  const PSET& pset_after,
-40039:                                  Generator& mu) {
-40039:   const dimension_type before_space_dim = pset_before.space_dimension();
-40039:   const dimension_type after_space_dim = pset_after.space_dimension();
-40039:   if (after_space_dim != 2*before_space_dim) {
-40039:     std::ostringstream s;
-40039:     s << "PPL::one_affine_ranking_function_PR_2"
-40039:       << "(pset_before, pset_after, mu):\n"
-40039:       << "pset_before.space_dimension() == " << before_space_dim
-40039:       << ", pset_after.space_dimension() == " << after_space_dim
-40039:       << ";\nthe latter should be twice the former.";
-40039:     throw std::invalid_argument(s.str());
-40039:   }
-40039: 
-40039:   using namespace Implementation::Termination;
-40039:   Constraint_System cs_before;
-40039:   Constraint_System cs_after;
-40039:   assign_all_inequalities_approximation(pset_before, cs_before);
-40039:   assign_all_inequalities_approximation(pset_after, cs_after);
-40039:   return one_affine_ranking_function_PR(cs_before, cs_after, mu);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: bool
-40039: one_affine_ranking_function_PR(const PSET& pset, Generator& mu) {
-40039:   const dimension_type space_dim = pset.space_dimension();
-40039:   if (space_dim % 2 != 0) {
-40039:     std::ostringstream s;
-40039:     s << "PPL::one_affine_ranking_function_PR(pset, mu):\n"
-40039:       << "pset.space_dimension() == " << space_dim
-40039:       << " is odd.";
-40039:     throw std::invalid_argument(s.str());
-40039:   }
-40039: 
-40039:   using namespace Implementation::Termination;
-40039:   Constraint_System cs;
-40039:   assign_all_inequalities_approximation(pset, cs);
-40039:   return one_affine_ranking_function_PR_original(cs, mu);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: all_affine_ranking_functions_PR_2(const PSET& pset_before,
-40039:                                   const PSET& pset_after,
-40039:                                   NNC_Polyhedron& mu_space) {
-40039:   const dimension_type before_space_dim = pset_before.space_dimension();
-40039:   const dimension_type after_space_dim = pset_after.space_dimension();
-40039:   if (after_space_dim != 2*before_space_dim) {
-40039:     std::ostringstream s;
-40039:     s << "PPL::all_affine_ranking_functions_MS_2"
-40039:       << "(pset_before, pset_after, mu_space):\n"
-40039:       << "pset_before.space_dimension() == " << before_space_dim
-40039:       << ", pset_after.space_dimension() == " << after_space_dim
-40039:       << ";\nthe latter should be twice the former.";
-40039:     throw std::invalid_argument(s.str());
-40039:   }
-40039: 
-40039:   if (pset_before.is_empty()) {
-40039:     mu_space = NNC_Polyhedron(1 + before_space_dim);
-40039:     return;
-40039:   }
-40039: 
-40039:   using namespace Implementation::Termination;
-40039:   Constraint_System cs_before;
-40039:   Constraint_System cs_after;
-40039:   assign_all_inequalities_approximation(pset_before, cs_before);
-40039:   assign_all_inequalities_approximation(pset_after, cs_after);
-40039:   all_affine_ranking_functions_PR(cs_before, cs_after, mu_space);
-40039: }
-40039: 
-40039: template <typename PSET>
-40039: void
-40039: all_affine_ranking_functions_PR(const PSET& pset,
-40039:                                 NNC_Polyhedron& mu_space) {
-40039:   const dimension_type space_dim = pset.space_dimension();
-40039:   if (space_dim % 2 != 0) {
-40039:     std::ostringstream s;
-40039:     s << "PPL::all_affine_ranking_functions_PR(pset, mu_space):\n"
-40039:       << "pset.space_dimension() == " << space_dim
-40039:       << " is odd.";
-40039:     throw std::invalid_argument(s.str());
-40039:   }
-40039: 
-40039:   if (pset.is_empty()) {
-40039:     mu_space = NNC_Polyhedron(1 + space_dim/2);
-40039:     return;
-40039:   }
-40039: 
-40039:   using namespace Implementation::Termination;
-40039:   Constraint_System cs;
-40039:   assign_all_inequalities_approximation(pset, cs);
-40039:   all_affine_ranking_functions_PR_original(cs, mu_space);
-40039: }
-40039: 
-40039: }
-40039: # 501 "../../src/termination_defs.hh" 2
-40039: # 20 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/wrap_string.hh" 1
-40039: # 29 "../../src/wrap_string.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace IO_Operators {
-40039: # 50 "../../src/wrap_string.hh"
-40039: std::string
-40039: wrap_string(const std::string& src_string,
-40039:             unsigned indent_depth,
-40039:             unsigned preferred_first_line_length,
-40039:             unsigned preferred_line_length);
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 21 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/Cast_Floating_Point_Expression_defs.hh" 1
-40039: # 30 "../../src/Cast_Floating_Point_Expression_defs.hh"
-40039: # 1 "../../src/Cast_Floating_Point_Expression_types.hh" 1
-40039: # 16 "../../src/Cast_Floating_Point_Expression_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: class Cast_Floating_Point_Expression;
-40039: 
-40039: }
-40039: # 31 "../../src/Cast_Floating_Point_Expression_defs.hh" 2
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: template<typename FP_Interval_Type, typename FP_Format>
-40039: void
-40039: swap(Cast_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
-40039:      Cast_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y);
-40039: # 89 "../../src/Cast_Floating_Point_Expression_defs.hh"
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: class Cast_Floating_Point_Expression
-40039:   : public Floating_Point_Expression<FP_Interval_Type, FP_Format> {
-40039: 
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039:   FP_Linear_Form FP_Linear_Form;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039:   FP_Interval_Abstract_Store FP_Interval_Abstract_Store;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039:   FP_Linear_Form_Abstract_Store FP_Linear_Form_Abstract_Store;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Cast_Floating_Point_Expression(
-40039:     Floating_Point_Expression<FP_Interval_Type, FP_Format>* const expr);
-40039: 
-40039: 
-40039:   ~Cast_Floating_Point_Expression();
-40039: # 148 "../../src/Cast_Floating_Point_Expression_defs.hh"
-40039:   bool linearize(const FP_Interval_Abstract_Store& int_store,
-40039:                  const FP_Linear_Form_Abstract_Store& lf_store,
-40039:                  FP_Linear_Form& result) const;
-40039: 
-40039: 
-40039:   void m_swap(Cast_Floating_Point_Expression& y);
-40039: 
-40039: private:
-40039: 
-40039: 
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>* expr;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Cast_Floating_Point_Expression(
-40039:                           const Cast_Floating_Point_Expression& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Cast_Floating_Point_Expression& operator=(
-40039:                           const Cast_Floating_Point_Expression& y);
-40039: 
-40039: };
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Cast_Floating_Point_Expression_inlines.hh" 1
-40039: # 29 "../../src/Cast_Floating_Point_Expression_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline
-40039: Cast_Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039: Cast_Floating_Point_Expression(
-40039: Floating_Point_Expression<FP_Interval_Type, FP_Format>* const e)
-40039:   : expr(e) {
-40039:   
-40039: # 37 "../../src/Cast_Floating_Point_Expression_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 37 "../../src/Cast_Floating_Point_Expression_inlines.hh"
-40039:                ;
-40039: }
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline
-40039: Cast_Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039: ~Cast_Floating_Point_Expression() {
-40039:   delete expr;
-40039: }
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline void
-40039: Cast_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::m_swap(Cast_Floating_Point_Expression& y) {
-40039:   swap(expr, y.expr);
-40039: }
-40039: 
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline void
-40039: swap(Cast_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
-40039:      Cast_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 181 "../../src/Cast_Floating_Point_Expression_defs.hh" 2
-40039: # 22 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/Cast_Floating_Point_Expression_templates.hh" 1
-40039: # 28 "../../src/Cast_Floating_Point_Expression_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: bool Cast_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::linearize(const FP_Interval_Abstract_Store& int_store,
-40039:             const FP_Linear_Form_Abstract_Store& lf_store,
-40039:             FP_Linear_Form& result) const {
-40039:   if (!expr->linearize(int_store, lf_store, result)) {
-40039:     return false;
-40039:   }
-40039:   FP_Linear_Form rel_error;
-40039:   relative_error(result, rel_error);
-40039:   result += rel_error;
-40039:   result += this->absolute_error;
-40039:   return !this->overflows(result);
-40039: }
-40039: 
-40039: }
-40039: # 23 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/Constant_Floating_Point_Expression_defs.hh" 1
-40039: # 30 "../../src/Constant_Floating_Point_Expression_defs.hh"
-40039: # 1 "../../src/Constant_Floating_Point_Expression_types.hh" 1
-40039: # 16 "../../src/Constant_Floating_Point_Expression_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: class Constant_Floating_Point_Expression;
-40039: 
-40039: }
-40039: # 31 "../../src/Constant_Floating_Point_Expression_defs.hh" 2
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: template<typename FP_Interval_Type, typename FP_Format>
-40039: void swap(Constant_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
-40039:           Constant_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y);
-40039: # 60 "../../src/Constant_Floating_Point_Expression_defs.hh"
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: class Constant_Floating_Point_Expression
-40039:   : public Floating_Point_Expression<FP_Interval_Type, FP_Format> {
-40039: 
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039:   FP_Linear_Form FP_Linear_Form;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039:   FP_Interval_Abstract_Store FP_Interval_Abstract_Store;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039:   FP_Linear_Form_Abstract_Store FP_Linear_Form_Abstract_Store;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::boundary_type
-40039:   boundary_type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::info_type info_type;
-40039: # 111 "../../src/Constant_Floating_Point_Expression_defs.hh"
-40039:   Constant_Floating_Point_Expression(const boundary_type lower_bound,
-40039:                                      const boundary_type upper_bound);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Constant_Floating_Point_Expression(const char* str_value);
-40039: 
-40039: 
-40039:   ~Constant_Floating_Point_Expression();
-40039: # 140 "../../src/Constant_Floating_Point_Expression_defs.hh"
-40039:   bool linearize(const FP_Interval_Abstract_Store& int_store,
-40039:                  const FP_Linear_Form_Abstract_Store& lf_store,
-40039:                  FP_Linear_Form& result) const;
-40039: 
-40039: 
-40039:   void m_swap(Constant_Floating_Point_Expression& y);
-40039: 
-40039: private:
-40039: 
-40039:   FP_Interval_Type value;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Constant_Floating_Point_Expression(
-40039:                           const Constant_Floating_Point_Expression& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Constant_Floating_Point_Expression& operator=(
-40039:                           const Constant_Floating_Point_Expression& y);
-40039: 
-40039: };
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Constant_Floating_Point_Expression_inlines.hh" 1
-40039: # 29 "../../src/Constant_Floating_Point_Expression_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline
-40039: Constant_Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039: Constant_Floating_Point_Expression(const char* str_value)
-40039:   : value(str_value) {}
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline
-40039: Constant_Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039: Constant_Floating_Point_Expression(const boundary_type lb,
-40039:                                    const boundary_type ub) {
-40039:   
-40039: # 42 "../../src/Constant_Floating_Point_Expression_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 42 "../../src/Constant_Floating_Point_Expression_inlines.hh"
-40039:                  ;
-40039:   value.build(i_constraint(GREATER_OR_EQUAL, lb),
-40039:               i_constraint(LESS_OR_EQUAL, ub));
-40039: }
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline
-40039: Constant_Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039: ~Constant_Floating_Point_Expression() {}
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline void
-40039: Constant_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::m_swap(Constant_Floating_Point_Expression& y) {
-40039:   using std::swap;
-40039:   swap(value, y.value);
-40039: }
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline bool
-40039: Constant_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::linearize(const FP_Interval_Abstract_Store&,
-40039:             const FP_Linear_Form_Abstract_Store&,
-40039:             FP_Linear_Form& result) const {
-40039:   result = FP_Linear_Form(value);
-40039:   return true;
-40039: }
-40039: 
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline void
-40039: swap(Constant_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
-40039:      Constant_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 172 "../../src/Constant_Floating_Point_Expression_defs.hh" 2
-40039: # 24 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/Variable_Floating_Point_Expression_defs.hh" 1
-40039: # 30 "../../src/Variable_Floating_Point_Expression_defs.hh"
-40039: # 1 "../../src/Variable_Floating_Point_Expression_types.hh" 1
-40039: # 16 "../../src/Variable_Floating_Point_Expression_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: class Variable_Floating_Point_Expression;
-40039: 
-40039: }
-40039: # 31 "../../src/Variable_Floating_Point_Expression_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: template<typename FP_Interval_Type, typename FP_Format>
-40039: void swap(Variable_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
-40039:           Variable_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y);
-40039: # 63 "../../src/Variable_Floating_Point_Expression_defs.hh"
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: class Variable_Floating_Point_Expression
-40039: : public Floating_Point_Expression<FP_Interval_Type, FP_Format> {
-40039: 
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039:   FP_Linear_Form FP_Linear_Form;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039:   FP_Interval_Abstract_Store FP_Interval_Abstract_Store;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039:   FP_Linear_Form_Abstract_Store FP_Linear_Form_Abstract_Store;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::boundary_type
-40039:   boundary_type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::info_type info_type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   explicit Variable_Floating_Point_Expression(const dimension_type v_index);
-40039: 
-40039: 
-40039:   ~Variable_Floating_Point_Expression();
-40039: # 140 "../../src/Variable_Floating_Point_Expression_defs.hh"
-40039:   bool linearize(const FP_Interval_Abstract_Store& int_store,
-40039:                  const FP_Linear_Form_Abstract_Store& lf_store,
-40039:                  FP_Linear_Form& result) const;
-40039: # 154 "../../src/Variable_Floating_Point_Expression_defs.hh"
-40039:   void linear_form_assign(const FP_Linear_Form& lf,
-40039:                                 FP_Linear_Form_Abstract_Store& lf_store) const;
-40039: 
-40039: 
-40039:   void m_swap(Variable_Floating_Point_Expression& y);
-40039: 
-40039: private:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Variable_Floating_Point_Expression(
-40039:                           const Variable_Floating_Point_Expression& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Variable_Floating_Point_Expression& operator=(
-40039:                           const Variable_Floating_Point_Expression& y);
-40039: 
-40039: 
-40039:   dimension_type variable_index;
-40039: 
-40039: };
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Variable_Floating_Point_Expression_inlines.hh" 1
-40039: # 29 "../../src/Variable_Floating_Point_Expression_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline
-40039: Variable_Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039: Variable_Floating_Point_Expression(const dimension_type v_index)
-40039:   : variable_index(v_index) {}
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline
-40039: Variable_Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039: ~Variable_Floating_Point_Expression() {}
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline void
-40039: Variable_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::m_swap(Variable_Floating_Point_Expression& y) {
-40039:   using std::swap;
-40039:   swap(variable_index, y.variable_index);
-40039: }
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline bool
-40039: Variable_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::linearize(const FP_Interval_Abstract_Store&,
-40039:             const FP_Linear_Form_Abstract_Store& lf_store,
-40039:             FP_Linear_Form& result) const {
-40039:   typename FP_Linear_Form_Abstract_Store::const_iterator
-40039:            variable_value = lf_store.find(variable_index);
-40039: 
-40039:   if (variable_value == lf_store.end()) {
-40039:     result = FP_Linear_Form(Variable(variable_index));
-40039:     return true;
-40039:   }
-40039: 
-40039:   result = FP_Linear_Form(variable_value->second);
-40039:   return !this->overflows(result);
-40039: }
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline void
-40039: Variable_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::linear_form_assign(const FP_Linear_Form& lf,
-40039:                            FP_Linear_Form_Abstract_Store& lf_store) const {
-40039:   for (typename FP_Linear_Form_Abstract_Store::iterator
-40039:          i = lf_store.begin(); i != lf_store.end(); ) {
-40039:     if ((i->second).coefficient(Variable(variable_index)) != 0) {
-40039:       i = lf_store.erase(i);
-40039:     }
-40039:     else {
-40039:       ++i;
-40039:     }
-40039:   }
-40039:   lf_store[variable_index] = lf;
-40039:   return;
-40039: }
-40039: 
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline void
-40039: swap(Variable_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
-40039:      Variable_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 186 "../../src/Variable_Floating_Point_Expression_defs.hh" 2
-40039: # 25 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/Sum_Floating_Point_Expression_defs.hh" 1
-40039: # 30 "../../src/Sum_Floating_Point_Expression_defs.hh"
-40039: # 1 "../../src/Sum_Floating_Point_Expression_types.hh" 1
-40039: # 16 "../../src/Sum_Floating_Point_Expression_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: class Sum_Floating_Point_Expression;
-40039: 
-40039: }
-40039: # 31 "../../src/Sum_Floating_Point_Expression_defs.hh" 2
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: void swap(Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
-40039:           Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y);
-40039: # 94 "../../src/Sum_Floating_Point_Expression_defs.hh"
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: class Sum_Floating_Point_Expression
-40039:   : public Floating_Point_Expression<FP_Interval_Type, FP_Format> {
-40039: 
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039:   ::FP_Linear_Form FP_Linear_Form;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039:   ::FP_Interval_Abstract_Store FP_Interval_Abstract_Store;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039:   FP_Linear_Form_Abstract_Store FP_Linear_Form_Abstract_Store;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::boundary_type
-40039:   boundary_type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::info_type info_type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Sum_Floating_Point_Expression(
-40039:            Floating_Point_Expression<FP_Interval_Type, FP_Format>* const x,
-40039:            Floating_Point_Expression<FP_Interval_Type, FP_Format>* const y);
-40039: 
-40039: 
-40039:   ~Sum_Floating_Point_Expression();
-40039: # 174 "../../src/Sum_Floating_Point_Expression_defs.hh"
-40039:   bool linearize(const FP_Interval_Abstract_Store& int_store,
-40039:                  const FP_Linear_Form_Abstract_Store& lf_store,
-40039:                  FP_Linear_Form& result) const;
-40039: 
-40039: 
-40039:   void m_swap(Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y);
-40039: 
-40039: private:
-40039: 
-40039: 
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>* first_operand;
-40039: 
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>* second_operand;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Sum_Floating_Point_Expression(
-40039:          const Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>& e);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>&
-40039:   operator=(const Sum_Floating_Point_Expression<FP_Interval_Type,
-40039:             FP_Format>& e);
-40039: 
-40039: 
-40039: };
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Sum_Floating_Point_Expression_inlines.hh" 1
-40039: # 30 "../../src/Sum_Floating_Point_Expression_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline
-40039: Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::Sum_Floating_Point_Expression(
-40039:          Floating_Point_Expression<FP_Interval_Type, FP_Format>* const x,
-40039:          Floating_Point_Expression<FP_Interval_Type, FP_Format>* const y)
-40039:   : first_operand(x), second_operand(y) {
-40039:   
-40039: # 39 "../../src/Sum_Floating_Point_Expression_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 39 "../../src/Sum_Floating_Point_Expression_inlines.hh"
-40039:                ;
-40039:   
-40039: # 40 "../../src/Sum_Floating_Point_Expression_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 40 "../../src/Sum_Floating_Point_Expression_inlines.hh"
-40039:                ;
-40039: }
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline
-40039: Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::~Sum_Floating_Point_Expression() {
-40039:   delete first_operand;
-40039:   delete second_operand;
-40039: }
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline void
-40039: Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::m_swap(Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y) {
-40039:   using std::swap;
-40039:   swap(first_operand, y.first_operand);
-40039:   swap(second_operand, y.second_operand);
-40039: }
-40039: 
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline void
-40039: swap(Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
-40039:      Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 211 "../../src/Sum_Floating_Point_Expression_defs.hh" 2
-40039: # 1 "../../src/Sum_Floating_Point_Expression_templates.hh" 1
-40039: # 28 "../../src/Sum_Floating_Point_Expression_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: bool Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::linearize(const FP_Interval_Abstract_Store& int_store,
-40039:             const FP_Linear_Form_Abstract_Store& lf_store,
-40039:             FP_Linear_Form& result) const {
-40039:   if (!first_operand->linearize(int_store, lf_store, result)) {
-40039:     return false;
-40039:   }
-40039:   FP_Linear_Form rel_error;
-40039:   relative_error(result, rel_error);
-40039:   result += rel_error;
-40039:   FP_Linear_Form linearized_second_operand;
-40039:   if (!second_operand->linearize(int_store, lf_store,
-40039:                                 linearized_second_operand)) {
-40039:     return false;
-40039:   }
-40039:   result += linearized_second_operand;
-40039:   relative_error(linearized_second_operand, rel_error);
-40039:   result += rel_error;
-40039:   result += this->absolute_error;
-40039:   return !this->overflows(result);
-40039: }
-40039: 
-40039: }
-40039: # 212 "../../src/Sum_Floating_Point_Expression_defs.hh" 2
-40039: # 26 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/Difference_Floating_Point_Expression_defs.hh" 1
-40039: # 30 "../../src/Difference_Floating_Point_Expression_defs.hh"
-40039: # 1 "../../src/Difference_Floating_Point_Expression_types.hh" 1
-40039: # 16 "../../src/Difference_Floating_Point_Expression_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: class Difference_Floating_Point_Expression;
-40039: 
-40039: }
-40039: # 31 "../../src/Difference_Floating_Point_Expression_defs.hh" 2
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: void
-40039: swap(Difference_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
-40039:      Difference_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y);
-40039: # 100 "../../src/Difference_Floating_Point_Expression_defs.hh"
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: class Difference_Floating_Point_Expression
-40039:   : public Floating_Point_Expression<FP_Interval_Type, FP_Format> {
-40039: 
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039:   ::FP_Linear_Form FP_Linear_Form;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039:   ::FP_Interval_Abstract_Store FP_Interval_Abstract_Store;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039:   ::FP_Linear_Form_Abstract_Store FP_Linear_Form_Abstract_Store;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::boundary_type
-40039:   boundary_type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::info_type info_type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Difference_Floating_Point_Expression(
-40039:            Floating_Point_Expression<FP_Interval_Type, FP_Format>* const x,
-40039:            Floating_Point_Expression<FP_Interval_Type, FP_Format>* const y);
-40039: 
-40039: 
-40039:   ~Difference_Floating_Point_Expression();
-40039: # 180 "../../src/Difference_Floating_Point_Expression_defs.hh"
-40039:   bool linearize(const FP_Interval_Abstract_Store& int_store,
-40039:                  const FP_Linear_Form_Abstract_Store& lf_store,
-40039:                  FP_Linear_Form& result) const;
-40039: 
-40039: 
-40039:   void m_swap(Difference_Floating_Point_Expression<FP_Interval_Type,
-40039:                                                    FP_Format>& y);
-40039: 
-40039: private:
-40039: 
-40039: 
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>* first_operand;
-40039: 
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>* second_operand;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Difference_Floating_Point_Expression(
-40039:          const Difference_Floating_Point_Expression<FP_Interval_Type,
-40039:                                                     FP_Format>& e);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Difference_Floating_Point_Expression<FP_Interval_Type, FP_Format>&
-40039:   operator=(const Difference_Floating_Point_Expression<FP_Interval_Type,
-40039:                                                        FP_Format>& e);
-40039: 
-40039: 
-40039: };
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Difference_Floating_Point_Expression_inlines.hh" 1
-40039: # 30 "../../src/Difference_Floating_Point_Expression_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline
-40039: Difference_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::Difference_Floating_Point_Expression(
-40039:          Floating_Point_Expression<FP_Interval_Type, FP_Format>* const x,
-40039:          Floating_Point_Expression<FP_Interval_Type, FP_Format>* const y)
-40039:   : first_operand(x), second_operand(y) {
-40039:   
-40039: # 39 "../../src/Difference_Floating_Point_Expression_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 39 "../../src/Difference_Floating_Point_Expression_inlines.hh"
-40039:                ;
-40039:   
-40039: # 40 "../../src/Difference_Floating_Point_Expression_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 40 "../../src/Difference_Floating_Point_Expression_inlines.hh"
-40039:                ;
-40039: }
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline
-40039: Difference_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::~Difference_Floating_Point_Expression() {
-40039:   delete first_operand;
-40039:   delete second_operand;
-40039: }
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline void
-40039: Difference_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::m_swap(Difference_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y) {
-40039:   using std::swap;
-40039:   swap(first_operand, y.first_operand);
-40039:   swap(second_operand, y.second_operand);
-40039: }
-40039: 
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline void
-40039: swap(Difference_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
-40039:      Difference_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 219 "../../src/Difference_Floating_Point_Expression_defs.hh" 2
-40039: # 1 "../../src/Difference_Floating_Point_Expression_templates.hh" 1
-40039: # 28 "../../src/Difference_Floating_Point_Expression_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: bool Difference_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::linearize(const FP_Interval_Abstract_Store& int_store,
-40039:             const FP_Linear_Form_Abstract_Store& lf_store,
-40039:             FP_Linear_Form& result) const {
-40039:   if (!first_operand->linearize(int_store, lf_store, result)) {
-40039:     return false;
-40039:   }
-40039:   FP_Linear_Form rel_error;
-40039:   relative_error(result, rel_error);
-40039:   result += rel_error;
-40039:   FP_Linear_Form linearized_second_operand;
-40039:   if (!second_operand->linearize(int_store, lf_store,
-40039:                       linearized_second_operand)) {
-40039:     return false;
-40039:   }
-40039:   result -= linearized_second_operand;
-40039:   relative_error(linearized_second_operand, rel_error);
-40039:   result += rel_error;
-40039:   result += this->absolute_error;
-40039:   return !this->overflows(result);
-40039: }
-40039: 
-40039: }
-40039: # 220 "../../src/Difference_Floating_Point_Expression_defs.hh" 2
-40039: # 27 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/Multiplication_Floating_Point_Expression_defs.hh" 1
-40039: # 30 "../../src/Multiplication_Floating_Point_Expression_defs.hh"
-40039: # 1 "../../src/Multiplication_Floating_Point_Expression_types.hh" 1
-40039: # 16 "../../src/Multiplication_Floating_Point_Expression_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: class Multiplication_Floating_Point_Expression;
-40039: 
-40039: }
-40039: # 31 "../../src/Multiplication_Floating_Point_Expression_defs.hh" 2
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: void
-40039: swap(Multiplication_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
-40039:      Multiplication_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y);
-40039: # 130 "../../src/Multiplication_Floating_Point_Expression_defs.hh"
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: class Multiplication_Floating_Point_Expression
-40039:   : public Floating_Point_Expression<FP_Interval_Type, FP_Format> {
-40039: 
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039:   ::FP_Linear_Form FP_Linear_Form;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039:   ::FP_Interval_Abstract_Store FP_Interval_Abstract_Store;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039:   FP_Linear_Form_Abstract_Store FP_Linear_Form_Abstract_Store;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::boundary_type
-40039:   boundary_type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::info_type info_type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Multiplication_Floating_Point_Expression(
-40039:            Floating_Point_Expression<FP_Interval_Type, FP_Format>* const x,
-40039:            Floating_Point_Expression<FP_Interval_Type, FP_Format>* const y);
-40039: 
-40039: 
-40039:   ~Multiplication_Floating_Point_Expression();
-40039: # 210 "../../src/Multiplication_Floating_Point_Expression_defs.hh"
-40039:   bool linearize(const FP_Interval_Abstract_Store& int_store,
-40039:                          const FP_Linear_Form_Abstract_Store& lf_store,
-40039:                        FP_Linear_Form& result) const;
-40039: 
-40039: 
-40039:   void m_swap(Multiplication_Floating_Point_Expression<FP_Interval_Type,
-40039:                                                        FP_Format>& y);
-40039: 
-40039: private:
-40039: 
-40039: 
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>* first_operand;
-40039: 
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>* second_operand;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Multiplication_Floating_Point_Expression(
-40039:          const Multiplication_Floating_Point_Expression<FP_Interval_Type,
-40039:                                                         FP_Format>& e);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Multiplication_Floating_Point_Expression<FP_Interval_Type, FP_Format>&
-40039:   operator=(const Multiplication_Floating_Point_Expression<FP_Interval_Type,
-40039:             FP_Format>& e);
-40039: 
-40039: 
-40039: };
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Multiplication_Floating_Point_Expression_inlines.hh" 1
-40039: # 30 "../../src/Multiplication_Floating_Point_Expression_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline
-40039: Multiplication_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::Multiplication_Floating_Point_Expression(
-40039:          Floating_Point_Expression<FP_Interval_Type, FP_Format>* const x,
-40039:          Floating_Point_Expression<FP_Interval_Type, FP_Format>* const y)
-40039:   : first_operand(x), second_operand(y) {
-40039:   
-40039: # 39 "../../src/Multiplication_Floating_Point_Expression_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 39 "../../src/Multiplication_Floating_Point_Expression_inlines.hh"
-40039:                ;
-40039:   
-40039: # 40 "../../src/Multiplication_Floating_Point_Expression_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 40 "../../src/Multiplication_Floating_Point_Expression_inlines.hh"
-40039:                ;
-40039: }
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline
-40039: Multiplication_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::~Multiplication_Floating_Point_Expression() {
-40039:   delete first_operand;
-40039:   delete second_operand;
-40039: }
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline void
-40039: Multiplication_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::m_swap(Multiplication_Floating_Point_Expression<FP_Interval_Type,
-40039:                                                   FP_Format>& y) {
-40039:   using std::swap;
-40039:   swap(first_operand, y.first_operand);
-40039:   swap(second_operand, y.second_operand);
-40039: }
-40039: 
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline void
-40039: swap(Multiplication_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
-40039:      Multiplication_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 249 "../../src/Multiplication_Floating_Point_Expression_defs.hh" 2
-40039: # 1 "../../src/Multiplication_Floating_Point_Expression_templates.hh" 1
-40039: # 28 "../../src/Multiplication_Floating_Point_Expression_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: bool Multiplication_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::linearize(const FP_Interval_Abstract_Store& int_store,
-40039:             const FP_Linear_Form_Abstract_Store& lf_store,
-40039:             FP_Linear_Form& result) const {
-40039: # 48 "../../src/Multiplication_Floating_Point_Expression_templates.hh"
-40039:   bool intervalize_first;
-40039:   FP_Linear_Form linearized_first_operand;
-40039:   if (!first_operand->linearize(int_store, lf_store,
-40039:                                linearized_first_operand)) {
-40039:     return false;
-40039:   }
-40039:   FP_Interval_Type intervalized_first_operand;
-40039:   this->intervalize(linearized_first_operand, int_store,
-40039:                     intervalized_first_operand);
-40039:   FP_Linear_Form linearized_second_operand;
-40039:   if (!second_operand->linearize(int_store, lf_store,
-40039:                                 linearized_second_operand)) {
-40039:     return false;
-40039:   }
-40039:   FP_Interval_Type intervalized_second_operand;
-40039:   this->intervalize(linearized_second_operand, int_store,
-40039:                     intervalized_second_operand);
-40039: 
-40039: 
-40039:   if (intervalized_first_operand.is_bounded()) {
-40039:     if (intervalized_second_operand.is_bounded()) {
-40039:       boundary_type first_interval_size
-40039:         = intervalized_first_operand.upper()
-40039:         - intervalized_first_operand.lower();
-40039:       boundary_type second_interval_size
-40039:         = intervalized_second_operand.upper()
-40039:         - intervalized_second_operand.lower();
-40039:       if (first_interval_size <= second_interval_size) {
-40039:         intervalize_first = true;
-40039:       }
-40039:       else {
-40039:         intervalize_first = false;
-40039:       }
-40039:     }
-40039:     else {
-40039:       intervalize_first = true;
-40039:     }
-40039:   }
-40039:   else {
-40039:     if (intervalized_second_operand.is_bounded()) {
-40039:       intervalize_first = false;
-40039:     }
-40039:     else {
-40039:       return false;
-40039:     }
-40039:   }
-40039: 
-40039: 
-40039: 
-40039:   if (intervalize_first) {
-40039:     relative_error(linearized_second_operand, result);
-40039:     linearized_second_operand *= intervalized_first_operand;
-40039:     result *= intervalized_first_operand;
-40039:     result += linearized_second_operand;
-40039:   }
-40039:   else {
-40039:     relative_error(linearized_first_operand, result);
-40039:     linearized_first_operand *= intervalized_second_operand;
-40039:     result *= intervalized_second_operand;
-40039:     result += linearized_first_operand;
-40039:   }
-40039: 
-40039:   result += this->absolute_error;
-40039:   return !this->overflows(result);
-40039: }
-40039: 
-40039: }
-40039: # 250 "../../src/Multiplication_Floating_Point_Expression_defs.hh" 2
-40039: # 28 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/Division_Floating_Point_Expression_defs.hh" 1
-40039: # 30 "../../src/Division_Floating_Point_Expression_defs.hh"
-40039: # 1 "../../src/Division_Floating_Point_Expression_types.hh" 1
-40039: # 16 "../../src/Division_Floating_Point_Expression_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: class Division_Floating_Point_Expression;
-40039: 
-40039: }
-40039: # 31 "../../src/Division_Floating_Point_Expression_defs.hh" 2
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: void swap(Division_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
-40039:           Division_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y);
-40039: # 117 "../../src/Division_Floating_Point_Expression_defs.hh"
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: class Division_Floating_Point_Expression
-40039:   : public Floating_Point_Expression<FP_Interval_Type, FP_Format> {
-40039: 
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039:   ::FP_Linear_Form FP_Linear_Form;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039:   ::FP_Interval_Abstract_Store FP_Interval_Abstract_Store;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039:   FP_Linear_Form_Abstract_Store FP_Linear_Form_Abstract_Store;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::boundary_type
-40039:   boundary_type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::info_type info_type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Division_Floating_Point_Expression(
-40039:            Floating_Point_Expression<FP_Interval_Type, FP_Format>* const num,
-40039:            Floating_Point_Expression<FP_Interval_Type, FP_Format>* const den);
-40039: 
-40039: 
-40039:   ~Division_Floating_Point_Expression();
-40039: # 197 "../../src/Division_Floating_Point_Expression_defs.hh"
-40039:   bool linearize(const FP_Interval_Abstract_Store& int_store,
-40039:                  const FP_Linear_Form_Abstract_Store& lf_store,
-40039:                  FP_Linear_Form& result) const;
-40039: 
-40039: 
-40039:   void m_swap(Division_Floating_Point_Expression<FP_Interval_Type,
-40039:                                                  FP_Format>& y);
-40039: 
-40039: private:
-40039: 
-40039: 
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>* first_operand;
-40039: 
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>* second_operand;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Division_Floating_Point_Expression(
-40039:          const Division_Floating_Point_Expression<FP_Interval_Type,
-40039:                                                   FP_Format>& e);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Division_Floating_Point_Expression<FP_Interval_Type, FP_Format>&
-40039:   operator=(const Division_Floating_Point_Expression<FP_Interval_Type,
-40039:             FP_Format>& e);
-40039: 
-40039: };
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Division_Floating_Point_Expression_inlines.hh" 1
-40039: # 29 "../../src/Division_Floating_Point_Expression_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline
-40039: Division_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::Division_Floating_Point_Expression(
-40039:          Floating_Point_Expression<FP_Interval_Type, FP_Format>* const num,
-40039:          Floating_Point_Expression<FP_Interval_Type, FP_Format>* const den)
-40039:   : first_operand(num), second_operand(den) {
-40039:   
-40039: # 38 "../../src/Division_Floating_Point_Expression_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 38 "../../src/Division_Floating_Point_Expression_inlines.hh"
-40039:                  ;
-40039:   
-40039: # 39 "../../src/Division_Floating_Point_Expression_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 39 "../../src/Division_Floating_Point_Expression_inlines.hh"
-40039:                  ;
-40039: }
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline
-40039: Division_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::~Division_Floating_Point_Expression() {
-40039:   delete first_operand;
-40039:   delete second_operand;
-40039: }
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline void
-40039: Division_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::m_swap(Division_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y) {
-40039:   using std::swap;
-40039:   swap(first_operand, y.first_operand);
-40039:   swap(second_operand, y.second_operand);
-40039: }
-40039: 
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline void
-40039: swap(Division_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
-40039:      Division_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 235 "../../src/Division_Floating_Point_Expression_defs.hh" 2
-40039: # 1 "../../src/Division_Floating_Point_Expression_templates.hh" 1
-40039: # 28 "../../src/Division_Floating_Point_Expression_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: bool Division_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::linearize(const FP_Interval_Abstract_Store& int_store,
-40039:             const FP_Linear_Form_Abstract_Store& lf_store,
-40039:             FP_Linear_Form& result) const {
-40039:   FP_Linear_Form linearized_second_operand;
-40039:   if (!second_operand->linearize(int_store, lf_store,
-40039:                                 linearized_second_operand)) {
-40039:     return false;
-40039:   }
-40039:   FP_Interval_Type intervalized_second_operand;
-40039:   this->intervalize(linearized_second_operand, int_store,
-40039:                     intervalized_second_operand);
-40039: 
-40039: 
-40039:   if (intervalized_second_operand.lower() <= 0
-40039:       && intervalized_second_operand.upper() >= 0) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   if (!first_operand->linearize(int_store, lf_store, result)) {
-40039:     return false;
-40039:   }
-40039:   FP_Linear_Form rel_error;
-40039:   relative_error(result, rel_error);
-40039:   result /= intervalized_second_operand;
-40039:   rel_error /= intervalized_second_operand;
-40039:   result += rel_error;
-40039:   result += this->absolute_error;
-40039:   return !this->overflows(result);
-40039: }
-40039: 
-40039: }
-40039: # 236 "../../src/Division_Floating_Point_Expression_defs.hh" 2
-40039: # 29 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/Opposite_Floating_Point_Expression_defs.hh" 1
-40039: # 30 "../../src/Opposite_Floating_Point_Expression_defs.hh"
-40039: # 1 "../../src/Opposite_Floating_Point_Expression_types.hh" 1
-40039: # 16 "../../src/Opposite_Floating_Point_Expression_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: class Opposite_Floating_Point_Expression;
-40039: 
-40039: }
-40039: # 31 "../../src/Opposite_Floating_Point_Expression_defs.hh" 2
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: template<typename FP_Interval_Type, typename FP_Format>
-40039: void swap(Opposite_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
-40039:           Opposite_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y);
-40039: # 80 "../../src/Opposite_Floating_Point_Expression_defs.hh"
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: class Opposite_Floating_Point_Expression
-40039:   : public Floating_Point_Expression<FP_Interval_Type, FP_Format> {
-40039: 
-40039: public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039:   FP_Linear_Form FP_Linear_Form;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039:   FP_Interval_Abstract_Store FP_Interval_Abstract_Store;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039:   FP_Linear_Form_Abstract_Store FP_Linear_Form_Abstract_Store;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::boundary_type
-40039:   boundary_type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   typedef typename
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::info_type info_type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   explicit Opposite_Floating_Point_Expression(
-40039:            Floating_Point_Expression<FP_Interval_Type, FP_Format>* const op);
-40039: 
-40039: 
-40039:   ~Opposite_Floating_Point_Expression();
-40039: # 159 "../../src/Opposite_Floating_Point_Expression_defs.hh"
-40039:   bool linearize(const FP_Interval_Abstract_Store& int_store,
-40039:                  const FP_Linear_Form_Abstract_Store& lf_store,
-40039:                  FP_Linear_Form& result) const;
-40039: 
-40039: 
-40039:   void m_swap(Opposite_Floating_Point_Expression& y);
-40039: 
-40039: private:
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Opposite_Floating_Point_Expression(
-40039:                           const Opposite_Floating_Point_Expression& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Opposite_Floating_Point_Expression& operator=(
-40039:                           const Opposite_Floating_Point_Expression& y);
-40039: 
-40039: 
-40039:   Floating_Point_Expression<FP_Interval_Type, FP_Format>* operand;
-40039: 
-40039: };
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Opposite_Floating_Point_Expression_inlines.hh" 1
-40039: # 29 "../../src/Opposite_Floating_Point_Expression_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline
-40039: Opposite_Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039: Opposite_Floating_Point_Expression(
-40039:          Floating_Point_Expression<FP_Interval_Type, FP_Format>* const op)
-40039:   : operand(op)
-40039: {
-40039:   
-40039: # 38 "../../src/Opposite_Floating_Point_Expression_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 38 "../../src/Opposite_Floating_Point_Expression_inlines.hh"
-40039:                 ;
-40039: }
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline
-40039: Opposite_Floating_Point_Expression<FP_Interval_Type, FP_Format>::
-40039: ~Opposite_Floating_Point_Expression() {
-40039:   delete operand;
-40039: }
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline void
-40039: Opposite_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::m_swap(Opposite_Floating_Point_Expression& y) {
-40039:   using std::swap;
-40039:   swap(operand, y.operand);
-40039: }
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline bool
-40039: Opposite_Floating_Point_Expression<FP_Interval_Type, FP_Format>
-40039: ::linearize(const FP_Interval_Abstract_Store& int_store,
-40039:             const FP_Linear_Form_Abstract_Store& lf_store,
-40039:             FP_Linear_Form& result) const {
-40039:   if (!operand->linearize(int_store, lf_store, result)) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   result.negate();
-40039:   return true;
-40039: }
-40039: 
-40039: 
-40039: template <typename FP_Interval_Type, typename FP_Format>
-40039: inline void
-40039: swap(Opposite_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
-40039:      Opposite_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y) {
-40039:   x.m_swap(y);
-40039: }
-40039: 
-40039: }
-40039: # 192 "../../src/Opposite_Floating_Point_Expression_defs.hh" 2
-40039: # 30 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/Watchdog_defs.hh" 1
-40039: # 27 "../../src/Watchdog_defs.hh"
-40039: # 1 "../../src/Watchdog_types.hh" 1
-40039: # 16 "../../src/Watchdog_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Watchdog;
-40039: 
-40039: }
-40039: # 28 "../../src/Watchdog_defs.hh" 2
-40039: # 1 "../../src/Time_defs.hh" 1
-40039: # 27 "../../src/Time_defs.hh"
-40039: # 1 "../../src/Time_types.hh" 1
-40039: # 16 "../../src/Time_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: namespace Watchdog {
-40039: 
-40039: class Time;
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 28 "../../src/Time_defs.hh" 2
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: namespace Watchdog {
-40039: 
-40039: 
-40039: bool operator==(const Time& x, const Time& y);
-40039: 
-40039: 
-40039: bool operator!=(const Time& x, const Time& y);
-40039: 
-40039: 
-40039: bool operator<(const Time& x, const Time& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: bool operator<=(const Time& x, const Time& y);
-40039: 
-40039: 
-40039: bool operator>(const Time& x, const Time& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: bool operator>=(const Time& x, const Time& y);
-40039: 
-40039: 
-40039: Time operator+(const Time& x, const Time& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: Time operator-(const Time& x, const Time& y);
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: 
-40039: class Parma_Polyhedra_Library::Implementation::Watchdog::Time {
-40039: public:
-40039: 
-40039:   Time();
-40039: 
-40039: 
-40039:   explicit Time(long centisecs);
-40039: 
-40039: 
-40039:   Time(long s, long m);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   long seconds() const;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   long microseconds() const;
-40039: 
-40039: 
-40039:   Time& operator+=(const Time& y);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Time& operator-=(const Time& y);
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039: private:
-40039: 
-40039:   static const long USECS_PER_SEC = 1000000L;
-40039: 
-40039: 
-40039:   static const long CSECS_PER_SEC = 100L;
-40039: 
-40039: 
-40039:   long secs;
-40039: 
-40039: 
-40039:   long microsecs;
-40039: };
-40039: 
-40039: # 1 "../../src/Time_inlines.hh" 1
-40039: # 27 "../../src/Time_inlines.hh"
-40039: # 1 "/usr/include/c++/8/cassert" 1 3
-40039: # 41 "/usr/include/c++/8/cassert" 3
-40039:        
-40039: # 42 "/usr/include/c++/8/cassert" 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/assert.h" 1 3 4
-40039: # 44 "/usr/include/c++/8/cassert" 2 3
-40039: # 28 "../../src/Time_inlines.hh" 2
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: namespace Watchdog {
-40039: 
-40039: inline
-40039: Time::Time()
-40039:   : secs(0), microsecs(0) {
-40039:   
-40039: # 38 "../../src/Time_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 38 "../../src/Time_inlines.hh"
-40039:              ;
-40039: }
-40039: 
-40039: inline
-40039: Time::Time(long centisecs)
-40039:   : secs(centisecs / CSECS_PER_SEC),
-40039:     microsecs((centisecs % CSECS_PER_SEC) * (USECS_PER_SEC/CSECS_PER_SEC)) {
-40039:   
-40039: # 45 "../../src/Time_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 45 "../../src/Time_inlines.hh"
-40039:              ;
-40039: }
-40039: 
-40039: inline
-40039: Time::Time(long s, long m)
-40039:   : secs(s),
-40039:     microsecs(m) {
-40039:   if (microsecs >= USECS_PER_SEC) {
-40039:     secs += microsecs / USECS_PER_SEC;
-40039:     microsecs %= USECS_PER_SEC;
-40039:   }
-40039:   
-40039: # 56 "../../src/Time_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 56 "../../src/Time_inlines.hh"
-40039:              ;
-40039: }
-40039: 
-40039: inline long
-40039: Time::seconds() const {
-40039:   return secs;
-40039: }
-40039: 
-40039: inline long
-40039: Time::microseconds() const {
-40039:   return microsecs;
-40039: }
-40039: 
-40039: inline Time&
-40039: Time::operator+=(const Time& y) {
-40039:   long r_secs = secs + y.secs;
-40039:   long r_microsecs = microsecs + y.microsecs;
-40039:   if (r_microsecs >= USECS_PER_SEC) {
-40039:     ++r_secs;
-40039:     r_microsecs %= USECS_PER_SEC;
-40039:   }
-40039:   secs = r_secs;
-40039:   microsecs = r_microsecs;
-40039:   
-40039: # 79 "../../src/Time_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 79 "../../src/Time_inlines.hh"
-40039:              ;
-40039:   return *this;
-40039: }
-40039: 
-40039: inline Time&
-40039: Time::operator-=(const Time& y) {
-40039:   long r_secs = secs - y.secs;
-40039:   long r_microsecs = microsecs - y.microsecs;
-40039:   if (r_microsecs < 0) {
-40039:     --r_secs;
-40039:     r_microsecs += USECS_PER_SEC;
-40039:   }
-40039:   if (r_secs < 0) {
-40039:     r_secs = 0;
-40039:     r_microsecs = 0;
-40039:   }
-40039:   secs = r_secs;
-40039:   microsecs = r_microsecs;
-40039:   
-40039: # 97 "../../src/Time_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 97 "../../src/Time_inlines.hh"
-40039:              ;
-40039:   return *this;
-40039: }
-40039: 
-40039: inline Time
-40039: operator+(const Time& x, const Time& y) {
-40039:   Time z = x;
-40039:   z += y;
-40039:   return z;
-40039: }
-40039: 
-40039: inline Time
-40039: operator-(const Time& x, const Time& y) {
-40039:   Time z = x;
-40039:   z -= y;
-40039:   return z;
-40039: }
-40039: 
-40039: inline bool
-40039: operator==(const Time& x, const Time& y) {
-40039:   
-40039: # 117 "../../src/Time_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 117 "../../src/Time_inlines.hh"
-40039:                          ;
-40039:   return x.seconds() == y.seconds() && y.microseconds() == y.microseconds();
-40039: }
-40039: 
-40039: inline bool
-40039: operator!=(const Time& x, const Time& y) {
-40039:   
-40039: # 123 "../../src/Time_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 123 "../../src/Time_inlines.hh"
-40039:                          ;
-40039:   return !(x == y);
-40039: }
-40039: 
-40039: inline bool
-40039: operator<(const Time& x, const Time& y) {
-40039:   
-40039: # 129 "../../src/Time_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 129 "../../src/Time_inlines.hh"
-40039:                          ;
-40039:   return x.seconds() < y.seconds()
-40039:     || (x.seconds() == y.seconds() && x.microseconds() < y.microseconds());
-40039: }
-40039: 
-40039: inline bool
-40039: operator<=(const Time& x, const Time& y) {
-40039:   return x < y || x == y;
-40039: }
-40039: 
-40039: inline bool
-40039: operator>(const Time& x, const Time& y) {
-40039:   return y < x;
-40039: }
-40039: 
-40039: inline bool
-40039: operator>=(const Time& x, const Time& y) {
-40039:   return y <= x;
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 125 "../../src/Time_defs.hh" 2
-40039: # 29 "../../src/Watchdog_defs.hh" 2
-40039: # 1 "../../src/Handler_types.hh" 1
-40039: # 16 "../../src/Handler_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: namespace Watchdog {
-40039: 
-40039: class Handler;
-40039: 
-40039: template <typename Flag_Base, typename Flag>
-40039: class Handler_Flag;
-40039: 
-40039: class Handler_Function;
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 30 "../../src/Watchdog_defs.hh" 2
-40039: # 1 "../../src/Pending_List_defs.hh" 1
-40039: # 27 "../../src/Pending_List_defs.hh"
-40039: # 1 "../../src/Pending_List_types.hh" 1
-40039: # 16 "../../src/Pending_List_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: namespace Watchdog {
-40039: 
-40039: template <typename Traits>
-40039: class Pending_List;
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 28 "../../src/Pending_List_defs.hh" 2
-40039: # 1 "../../src/Pending_Element_defs.hh" 1
-40039: # 27 "../../src/Pending_Element_defs.hh"
-40039: # 1 "../../src/Pending_Element_types.hh" 1
-40039: # 16 "../../src/Pending_Element_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: namespace Watchdog {
-40039: 
-40039: template <class Threshold>
-40039: class Pending_Element;
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 28 "../../src/Pending_Element_defs.hh" 2
-40039: # 1 "../../src/Doubly_Linked_Object_defs.hh" 1
-40039: # 27 "../../src/Doubly_Linked_Object_defs.hh"
-40039: # 1 "../../src/Doubly_Linked_Object_types.hh" 1
-40039: # 16 "../../src/Doubly_Linked_Object_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: class Doubly_Linked_Object;
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 28 "../../src/Doubly_Linked_Object_defs.hh" 2
-40039: # 1 "../../src/EList_types.hh" 1
-40039: # 16 "../../src/EList_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: template <typename T>
-40039: class EList;
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 29 "../../src/Doubly_Linked_Object_defs.hh" 2
-40039: # 1 "../../src/EList_Iterator_types.hh" 1
-40039: # 16 "../../src/EList_Iterator_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: template <typename T>
-40039: class EList_Iterator;
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 30 "../../src/Doubly_Linked_Object_defs.hh" 2
-40039: 
-40039: 
-40039: class Parma_Polyhedra_Library::Implementation::Doubly_Linked_Object {
-40039: public:
-40039: 
-40039:   Doubly_Linked_Object();
-40039: 
-40039: 
-40039:   Doubly_Linked_Object(Doubly_Linked_Object* f, Doubly_Linked_Object* b);
-40039: 
-40039: 
-40039:   void insert_before(Doubly_Linked_Object& y);
-40039: 
-40039: 
-40039:   void insert_after(Doubly_Linked_Object& y);
-40039: 
-40039: 
-40039:   Doubly_Linked_Object* erase();
-40039: 
-40039: 
-40039:   ~Doubly_Linked_Object();
-40039: 
-40039: private:
-40039: 
-40039:   Doubly_Linked_Object* next;
-40039: 
-40039: 
-40039:   Doubly_Linked_Object* prev;
-40039: 
-40039:   template <typename T> friend class EList;
-40039:   template <typename T> friend class EList_Iterator;
-40039: };
-40039: 
-40039: # 1 "../../src/Doubly_Linked_Object_inlines.hh" 1
-40039: # 27 "../../src/Doubly_Linked_Object_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: inline
-40039: Doubly_Linked_Object::Doubly_Linked_Object() {
-40039: }
-40039: 
-40039: inline
-40039: Doubly_Linked_Object::Doubly_Linked_Object(Doubly_Linked_Object* f,
-40039:                                            Doubly_Linked_Object* b)
-40039:   : next(f),
-40039:     prev(b) {
-40039: }
-40039: 
-40039: inline void
-40039: Doubly_Linked_Object::insert_before(Doubly_Linked_Object& y) {
-40039:   y.next = this;
-40039:   y.prev = prev;
-40039:   prev->next = &y;
-40039:   prev = &y;
-40039: }
-40039: 
-40039: inline void
-40039: Doubly_Linked_Object::insert_after(Doubly_Linked_Object& y) {
-40039:   y.next = next;
-40039:   y.prev = this;
-40039:   next->prev = &y;
-40039:   next = &y;
-40039: }
-40039: 
-40039: inline Doubly_Linked_Object*
-40039: Doubly_Linked_Object::erase() {
-40039:   next->prev = prev;
-40039:   prev->next = next;
-40039:   return next;
-40039: }
-40039: 
-40039: inline
-40039: Doubly_Linked_Object::~Doubly_Linked_Object() {
-40039:   erase();
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 64 "../../src/Doubly_Linked_Object_defs.hh" 2
-40039: # 29 "../../src/Pending_Element_defs.hh" 2
-40039: # 38 "../../src/Pending_Element_defs.hh"
-40039: template <typename Threshold>
-40039: class Parma_Polyhedra_Library::Implementation::Watchdog::Pending_Element
-40039:   : public Doubly_Linked_Object {
-40039: public:
-40039: 
-40039:   Pending_Element(const Threshold& deadline,
-40039:                   const Handler& handler,
-40039:                   bool& expired_flag);
-40039: 
-40039: 
-40039:   void assign(const Threshold& deadline,
-40039:               const Handler& handler,
-40039:               bool& expired_flag);
-40039: 
-40039: 
-40039:   const Threshold& deadline() const;
-40039: 
-40039: 
-40039:   const Handler& handler() const;
-40039: 
-40039: 
-40039:   bool& expired_flag() const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039: private:
-40039: 
-40039:   Threshold d;
-40039: 
-40039: 
-40039:   const Handler* p_h;
-40039: 
-40039: 
-40039:   bool* p_f;
-40039: };
-40039: 
-40039: # 1 "../../src/Pending_Element_inlines.hh" 1
-40039: # 27 "../../src/Pending_Element_inlines.hh"
-40039: # 1 "/usr/include/c++/8/cassert" 1 3
-40039: # 41 "/usr/include/c++/8/cassert" 3
-40039:        
-40039: # 42 "/usr/include/c++/8/cassert" 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/assert.h" 1 3 4
-40039: # 44 "/usr/include/c++/8/cassert" 2 3
-40039: # 28 "../../src/Pending_Element_inlines.hh" 2
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: namespace Watchdog {
-40039: 
-40039: template <typename Threshold>
-40039: inline bool
-40039: Pending_Element<Threshold>::OK() const {
-40039:   return true;
-40039: }
-40039: 
-40039: template <typename Threshold>
-40039: inline
-40039: Pending_Element<Threshold>::Pending_Element(const Threshold& deadline,
-40039:                                             const Handler& handler,
-40039:                                             bool& expired_flag)
-40039:   : d(deadline), p_h(&handler), p_f(&expired_flag) {
-40039:   
-40039: # 47 "../../src/Pending_Element_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 47 "../../src/Pending_Element_inlines.hh"
-40039:              ;
-40039: }
-40039: 
-40039: template <typename Threshold>
-40039: inline void
-40039: Pending_Element<Threshold>::assign(const Threshold& deadline,
-40039:                                    const Handler& handler,
-40039:                                    bool& expired_flag) {
-40039:   d = deadline;
-40039:   p_h = &handler;
-40039:   p_f = &expired_flag;
-40039:   
-40039: # 58 "../../src/Pending_Element_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 58 "../../src/Pending_Element_inlines.hh"
-40039:              ;
-40039: }
-40039: 
-40039: template <typename Threshold>
-40039: inline const Threshold&
-40039: Pending_Element<Threshold>::deadline() const {
-40039:   return d;
-40039: }
-40039: 
-40039: template <typename Threshold>
-40039: inline const Handler&
-40039: Pending_Element<Threshold>::handler() const {
-40039:   return *p_h;
-40039: }
-40039: 
-40039: template <typename Threshold>
-40039: inline bool&
-40039: Pending_Element<Threshold>::expired_flag() const {
-40039:   return *p_f;
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 76 "../../src/Pending_Element_defs.hh" 2
-40039: # 29 "../../src/Pending_List_defs.hh" 2
-40039: # 1 "../../src/EList_defs.hh" 1
-40039: # 29 "../../src/EList_defs.hh"
-40039: # 1 "../../src/EList_Iterator_defs.hh" 1
-40039: # 30 "../../src/EList_Iterator_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: 
-40039: template <typename T>
-40039: bool operator==(const EList_Iterator<T>& x, const EList_Iterator<T>& y);
-40039: 
-40039: 
-40039: template <typename T>
-40039: bool operator!=(const EList_Iterator<T>& x, const EList_Iterator<T>& y);
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: 
-40039: template <typename T>
-40039: class Parma_Polyhedra_Library::Implementation::EList_Iterator {
-40039: public:
-40039: 
-40039:   EList_Iterator();
-40039: 
-40039: 
-40039:   explicit EList_Iterator(Doubly_Linked_Object* p);
-40039: 
-40039: 
-40039:   EList_Iterator& operator=(Doubly_Linked_Object* p);
-40039: 
-40039: 
-40039:   T* operator->();
-40039: 
-40039: 
-40039:   T& operator*();
-40039: 
-40039: 
-40039:   EList_Iterator& operator++();
-40039: 
-40039: 
-40039:   EList_Iterator operator++(int);
-40039: 
-40039: 
-40039:   EList_Iterator& operator--();
-40039: 
-40039: 
-40039:   EList_Iterator operator--(int);
-40039: 
-40039: private:
-40039: 
-40039:   Doubly_Linked_Object* ptr;
-40039: 
-40039:   friend bool operator==<T>(const EList_Iterator& x, const EList_Iterator& y);
-40039: 
-40039:   friend bool operator!=<T>(const EList_Iterator& x, const EList_Iterator& y);
-40039: };
-40039: 
-40039: # 1 "../../src/EList_Iterator_inlines.hh" 1
-40039: # 29 "../../src/EList_Iterator_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: template <typename T>
-40039: inline
-40039: EList_Iterator<T>::EList_Iterator() {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: EList_Iterator<T>::EList_Iterator(Doubly_Linked_Object* p)
-40039:   : ptr(p) {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline EList_Iterator<T>&
-40039: EList_Iterator<T>::operator=(Doubly_Linked_Object* p) {
-40039:   ptr = p;
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline T*
-40039: EList_Iterator<T>::operator->() {
-40039:   return static_cast<T*>(ptr);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline T&
-40039: EList_Iterator<T>::operator*() {
-40039:   return *operator->();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline EList_Iterator<T>&
-40039: EList_Iterator<T>::operator++() {
-40039:   ptr = ptr->next;
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline EList_Iterator<T>
-40039: EList_Iterator<T>::operator++(int) {
-40039:   EList_Iterator tmp = *this;
-40039:   ++*this;
-40039:   return tmp;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline EList_Iterator<T>&
-40039: EList_Iterator<T>::operator--() {
-40039:   ptr = ptr->prev;
-40039:   return *this;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline EList_Iterator<T>
-40039: EList_Iterator<T>::operator--(int) {
-40039:   EList_Iterator tmp = *this;
-40039:   --*this;
-40039:   return tmp;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: operator==(const EList_Iterator<T>& x, const EList_Iterator<T>& y) {
-40039:   return x.ptr == y.ptr;
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: operator!=(const EList_Iterator<T>& x, const EList_Iterator<T>& y) {
-40039:   return x.ptr != y.ptr;
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 87 "../../src/EList_Iterator_defs.hh" 2
-40039: # 30 "../../src/EList_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: template <typename T>
-40039: class Parma_Polyhedra_Library::Implementation::EList
-40039:   : private Doubly_Linked_Object {
-40039: public:
-40039: 
-40039:   typedef EList_Iterator<const T> const_iterator;
-40039: 
-40039: 
-40039:   typedef EList_Iterator<T> iterator;
-40039: 
-40039: 
-40039:   EList();
-40039: 
-40039: 
-40039:   ~EList();
-40039: 
-40039: 
-40039:   void push_front(T& obj);
-40039: 
-40039: 
-40039:   void push_back(T& obj);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   iterator insert(iterator position, T& obj);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   iterator erase(iterator position);
-40039: 
-40039: 
-40039:   bool empty() const;
-40039: 
-40039: 
-40039:   iterator begin();
-40039: 
-40039: 
-40039:   iterator end();
-40039: 
-40039: 
-40039:   const_iterator begin() const;
-40039: 
-40039: 
-40039:   const_iterator end() const;
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: };
-40039: 
-40039: # 1 "../../src/EList_inlines.hh" 1
-40039: # 27 "../../src/EList_inlines.hh"
-40039: # 1 "/usr/include/c++/8/cassert" 1 3
-40039: # 41 "/usr/include/c++/8/cassert" 3
-40039:        
-40039: # 42 "/usr/include/c++/8/cassert" 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/assert.h" 1 3 4
-40039: # 44 "/usr/include/c++/8/cassert" 2 3
-40039: # 28 "../../src/EList_inlines.hh" 2
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: template <typename T>
-40039: inline
-40039: EList<T>::EList()
-40039:   : Doubly_Linked_Object(this, this) {
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: EList<T>::push_front(T& obj) {
-40039:   next->insert_before(obj);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: EList<T>::push_back(T& obj) {
-40039:   prev->insert_after(obj);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename EList<T>::iterator
-40039: EList<T>::insert(iterator position, T& obj) {
-40039:   position->insert_before(obj);
-40039:   return iterator(&obj);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename EList<T>::iterator
-40039: EList<T>::begin() {
-40039:   return iterator(next);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename EList<T>::iterator
-40039: EList<T>::end() {
-40039:   return iterator(this);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename EList<T>::const_iterator
-40039: EList<T>::begin() const {
-40039:   return const_iterator(next);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename EList<T>::const_iterator
-40039: EList<T>::end() const {
-40039:   return const_iterator(const_cast<EList<T>*>(this));
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: EList<T>::empty() const {
-40039:   return begin() == end();
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline typename EList<T>::iterator
-40039: EList<T>::erase(iterator position) {
-40039:   
-40039: # 91 "../../src/EList_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 91 "../../src/EList_inlines.hh"
-40039:                  ;
-40039:   return iterator(position->erase());
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline
-40039: EList<T>::~EList() {
-40039: 
-40039:   for (iterator i = begin(), lend = end(), next; i != lend; i = next) {
-40039:     next = erase(i);
-40039:     delete &*i;
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline bool
-40039: EList<T>::OK() const {
-40039:   for (const_iterator i = begin(), lend = end(); i != lend; ++i) {
-40039:     if (!i->OK()) {
-40039:       return false;
-40039:     }
-40039:   }
-40039: 
-40039:   return true;
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 89 "../../src/EList_defs.hh" 2
-40039: # 30 "../../src/Pending_List_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: template <typename Traits>
-40039: class Parma_Polyhedra_Library::Implementation::Watchdog::Pending_List {
-40039: public:
-40039: 
-40039:   typedef typename EList<Pending_Element<typename Traits::Threshold> >::iterator iterator;
-40039: 
-40039: 
-40039:   typedef typename EList<Pending_Element<typename Traits::Threshold> >::const_iterator const_iterator;
-40039: 
-40039: 
-40039:   Pending_List();
-40039: 
-40039: 
-40039:   ~Pending_List();
-40039: 
-40039: 
-40039:   iterator insert(const typename Traits::Threshold& deadline,
-40039:                   const Handler& handler,
-40039:                   bool& expired_flag);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   iterator erase(iterator position);
-40039: 
-40039: 
-40039:   bool empty() const;
-40039: 
-40039: 
-40039:   iterator begin();
-40039: 
-40039: 
-40039:   iterator end();
-40039: 
-40039: 
-40039:   bool OK() const;
-40039: 
-40039: private:
-40039:   EList<Pending_Element<typename Traits::Threshold> > active_list;
-40039:   EList<Pending_Element<typename Traits::Threshold> > free_list;
-40039: };
-40039: 
-40039: # 1 "../../src/Pending_List_inlines.hh" 1
-40039: # 27 "../../src/Pending_List_inlines.hh"
-40039: # 1 "/usr/include/c++/8/cassert" 1 3
-40039: # 41 "/usr/include/c++/8/cassert" 3
-40039:        
-40039: # 42 "/usr/include/c++/8/cassert" 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/assert.h" 1 3 4
-40039: # 44 "/usr/include/c++/8/cassert" 2 3
-40039: # 28 "../../src/Pending_List_inlines.hh" 2
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: namespace Watchdog {
-40039: 
-40039: template <typename Traits>
-40039: inline
-40039: Pending_List<Traits>::Pending_List()
-40039:   : active_list(),
-40039:     free_list() {
-40039:   
-40039: # 40 "../../src/Pending_List_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 40 "../../src/Pending_List_inlines.hh"
-40039:              ;
-40039: }
-40039: 
-40039: template <typename Traits>
-40039: inline
-40039: Pending_List<Traits>::~Pending_List() {
-40039: }
-40039: 
-40039: template <typename Traits>
-40039: inline typename Pending_List<Traits>::iterator
-40039: Pending_List<Traits>::begin() {
-40039:   return active_list.begin();
-40039: }
-40039: 
-40039: template <typename Traits>
-40039: inline typename Pending_List<Traits>::iterator
-40039: Pending_List<Traits>::end() {
-40039:   return active_list.end();
-40039: }
-40039: 
-40039: template <typename Traits>
-40039: inline bool
-40039: Pending_List<Traits>::empty() const {
-40039:   return active_list.empty();
-40039: }
-40039: 
-40039: template <typename Traits>
-40039: inline typename Pending_List<Traits>::iterator
-40039: Pending_List<Traits>::erase(iterator position) {
-40039:   
-40039: # 69 "../../src/Pending_List_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 69 "../../src/Pending_List_inlines.hh"
-40039:                  ;
-40039:   iterator next = active_list.erase(position);
-40039:   free_list.push_back(*position);
-40039:   
-40039: # 72 "../../src/Pending_List_inlines.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 72 "../../src/Pending_List_inlines.hh"
-40039:              ;
-40039:   return next;
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 77 "../../src/Pending_List_defs.hh" 2
-40039: # 1 "../../src/Pending_List_templates.hh" 1
-40039: # 29 "../../src/Pending_List_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: namespace Watchdog {
-40039: 
-40039: template <typename Traits>
-40039: typename Pending_List<Traits>::iterator
-40039: Pending_List<Traits>::insert(const typename Traits::Threshold& deadline,
-40039:                              const Handler& handler,
-40039:                              bool& expired_flag) {
-40039:   iterator position = active_list.begin();
-40039:   for (iterator active_list_end = active_list.end();
-40039:        position != active_list_end
-40039:          && Traits::less_than(position->deadline(), deadline);
-40039:        ++position) {
-40039:   }
-40039:   iterator pending_element_p;
-40039: 
-40039:   if (free_list.empty()) {
-40039:     pending_element_p
-40039:       = new Pending_Element<typename Traits::Threshold>(deadline,
-40039:                                                         handler,
-40039:                                                         expired_flag);
-40039:   }
-40039:   else {
-40039:     pending_element_p = free_list.begin();
-40039:     free_list.erase(pending_element_p);
-40039:     pending_element_p->assign(deadline, handler, expired_flag);
-40039:   }
-40039:   iterator r = active_list.insert(position, *pending_element_p);
-40039:   
-40039: # 60 "../../src/Pending_List_templates.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 60 "../../src/Pending_List_templates.hh"
-40039:              ;
-40039:   return r;
-40039: }
-40039: 
-40039: template <typename Traits>
-40039: bool
-40039: Pending_List<Traits>::OK() const {
-40039:   if (!active_list.OK()) {
-40039:     return false;
-40039:   }
-40039:   if (!free_list.OK()) {
-40039:     return false;
-40039:   }
-40039: 
-40039:   const typename Traits::Threshold* old;
-40039:   const_iterator i = active_list.begin();
-40039:   old = &i->deadline();
-40039:   ++i;
-40039:   for (const_iterator active_list_end = active_list.end(); i != active_list_end; ++i) {
-40039:     const typename Traits::Threshold& t = i->deadline();
-40039:     if (Traits::less_than(t, *old)) {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       return false;
-40039:     }
-40039:     old = &t;
-40039:   }
-40039:   return true;
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 78 "../../src/Pending_List_defs.hh" 2
-40039: # 31 "../../src/Watchdog_defs.hh" 2
-40039: # 1 "/usr/include/c++/8/cassert" 1 3
-40039: # 41 "/usr/include/c++/8/cassert" 3
-40039:        
-40039: # 42 "/usr/include/c++/8/cassert" 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/assert.h" 1 3 4
-40039: # 44 "/usr/include/c++/8/cassert" 2 3
-40039: # 32 "../../src/Watchdog_defs.hh" 2
-40039: # 1 "/usr/include/c++/8/functional" 1 3
-40039: # 46 "/usr/include/c++/8/functional" 3
-40039:        
-40039: # 47 "/usr/include/c++/8/functional" 3
-40039: # 59 "/usr/include/c++/8/functional" 3
-40039: # 1 "/usr/include/c++/8/bits/std_function.h" 1 3
-40039: # 33 "/usr/include/c++/8/bits/std_function.h" 3
-40039:        
-40039: # 34 "/usr/include/c++/8/bits/std_function.h" 3
-40039: # 47 "/usr/include/c++/8/bits/std_function.h" 3
-40039: 
-40039: # 47 "/usr/include/c++/8/bits/std_function.h" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   class bad_function_call : public std::exception
-40039:   {
-40039:   public:
-40039:     virtual ~bad_function_call() noexcept;
-40039: 
-40039:     const char* what() const noexcept;
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_location_invariant
-40039:     : is_trivially_copyable<_Tp>::type
-40039:     { };
-40039: 
-40039:   class _Undefined_class;
-40039: 
-40039:   union _Nocopy_types
-40039:   {
-40039:     void* _M_object;
-40039:     const void* _M_const_object;
-40039:     void (*_M_function_pointer)();
-40039:     void (_Undefined_class::*_M_member_pointer)();
-40039:   };
-40039: 
-40039:   union [[gnu::may_alias]] _Any_data
-40039:   {
-40039:     void* _M_access() { return &_M_pod_data[0]; }
-40039:     const void* _M_access() const { return &_M_pod_data[0]; }
-40039: 
-40039:     template<typename _Tp>
-40039:       _Tp&
-40039:       _M_access()
-40039:       { return *static_cast<_Tp*>(_M_access()); }
-40039: 
-40039:     template<typename _Tp>
-40039:       const _Tp&
-40039:       _M_access() const
-40039:       { return *static_cast<const _Tp*>(_M_access()); }
-40039: 
-40039:     _Nocopy_types _M_unused;
-40039:     char _M_pod_data[sizeof(_Nocopy_types)];
-40039:   };
-40039: 
-40039:   enum _Manager_operation
-40039:   {
-40039:     __get_type_info,
-40039:     __get_functor_ptr,
-40039:     __clone_functor,
-40039:     __destroy_functor
-40039:   };
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     struct _Simple_type_wrapper
-40039:     {
-40039:       _Simple_type_wrapper(_Tp __value) : __value(__value) { }
-40039: 
-40039:       _Tp __value;
-40039:     };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_location_invariant<_Simple_type_wrapper<_Tp> >
-40039:     : __is_location_invariant<_Tp>
-40039:     { };
-40039: 
-40039:   template<typename _Signature>
-40039:     class function;
-40039: 
-40039: 
-40039:   class _Function_base
-40039:   {
-40039:   public:
-40039:     static const std::size_t _M_max_size = sizeof(_Nocopy_types);
-40039:     static const std::size_t _M_max_align = __alignof__(_Nocopy_types);
-40039: 
-40039:     template<typename _Functor>
-40039:       class _Base_manager
-40039:       {
-40039:       protected:
-40039:  static const bool __stored_locally =
-40039:  (__is_location_invariant<_Functor>::value
-40039:   && sizeof(_Functor) <= _M_max_size
-40039:   && __alignof__(_Functor) <= _M_max_align
-40039:   && (_M_max_align % __alignof__(_Functor) == 0));
-40039: 
-40039:  typedef integral_constant<bool, __stored_locally> _Local_storage;
-40039: 
-40039: 
-40039:  static _Functor*
-40039:  _M_get_pointer(const _Any_data& __source)
-40039:  {
-40039:    const _Functor* __ptr =
-40039:      __stored_locally? std::__addressof(__source._M_access<_Functor>())
-40039:                                  : __source._M_access<_Functor*>();
-40039:    return const_cast<_Functor*>(__ptr);
-40039:  }
-40039: 
-40039: 
-40039: 
-40039:  static void
-40039:  _M_clone(_Any_data& __dest, const _Any_data& __source, true_type)
-40039:  {
-40039:    ::new (__dest._M_access()) _Functor(__source._M_access<_Functor>());
-40039:  }
-40039: 
-40039: 
-40039: 
-40039:  static void
-40039:  _M_clone(_Any_data& __dest, const _Any_data& __source, false_type)
-40039:  {
-40039:    __dest._M_access<_Functor*>() =
-40039:      new _Functor(*__source._M_access<_Functor*>());
-40039:  }
-40039: 
-40039: 
-40039: 
-40039:  static void
-40039:  _M_destroy(_Any_data& __victim, true_type)
-40039:  {
-40039:    __victim._M_access<_Functor>().~_Functor();
-40039:  }
-40039: 
-40039: 
-40039:  static void
-40039:  _M_destroy(_Any_data& __victim, false_type)
-40039:  {
-40039:    delete __victim._M_access<_Functor*>();
-40039:  }
-40039: 
-40039:       public:
-40039:  static bool
-40039:  _M_manager(_Any_data& __dest, const _Any_data& __source,
-40039:      _Manager_operation __op)
-40039:  {
-40039:    switch (__op)
-40039:      {
-40039: 
-40039:      case __get_type_info:
-40039:        __dest._M_access<const type_info*>() = &typeid(_Functor);
-40039:        break;
-40039: 
-40039:      case __get_functor_ptr:
-40039:        __dest._M_access<_Functor*>() = _M_get_pointer(__source);
-40039:        break;
-40039: 
-40039:      case __clone_functor:
-40039:        _M_clone(__dest, __source, _Local_storage());
-40039:        break;
-40039: 
-40039:      case __destroy_functor:
-40039:        _M_destroy(__dest, _Local_storage());
-40039:        break;
-40039:      }
-40039:    return false;
-40039:  }
-40039: 
-40039:  static void
-40039:  _M_init_functor(_Any_data& __functor, _Functor&& __f)
-40039:  { _M_init_functor(__functor, std::move(__f), _Local_storage()); }
-40039: 
-40039:  template<typename _Signature>
-40039:    static bool
-40039:    _M_not_empty_function(const function<_Signature>& __f)
-40039:    { return static_cast<bool>(__f); }
-40039: 
-40039:  template<typename _Tp>
-40039:    static bool
-40039:    _M_not_empty_function(_Tp* __fp)
-40039:    { return __fp != nullptr; }
-40039: 
-40039:  template<typename _Class, typename _Tp>
-40039:    static bool
-40039:    _M_not_empty_function(_Tp _Class::* __mp)
-40039:    { return __mp != nullptr; }
-40039: 
-40039:  template<typename _Tp>
-40039:    static bool
-40039:    _M_not_empty_function(const _Tp&)
-40039:    { return true; }
-40039: 
-40039:       private:
-40039:  static void
-40039:  _M_init_functor(_Any_data& __functor, _Functor&& __f, true_type)
-40039:  { ::new (__functor._M_access()) _Functor(std::move(__f)); }
-40039: 
-40039:  static void
-40039:  _M_init_functor(_Any_data& __functor, _Functor&& __f, false_type)
-40039:  { __functor._M_access<_Functor*>() = new _Functor(std::move(__f)); }
-40039:       };
-40039: 
-40039:     _Function_base() : _M_manager(nullptr) { }
-40039: 
-40039:     ~_Function_base()
-40039:     {
-40039:       if (_M_manager)
-40039:  _M_manager(_M_functor, _M_functor, __destroy_functor);
-40039:     }
-40039: 
-40039:     bool _M_empty() const { return !_M_manager; }
-40039: 
-40039:     typedef bool (*_Manager_type)(_Any_data&, const _Any_data&,
-40039:       _Manager_operation);
-40039: 
-40039:     _Any_data _M_functor;
-40039:     _Manager_type _M_manager;
-40039:   };
-40039: 
-40039:   template<typename _Signature, typename _Functor>
-40039:     class _Function_handler;
-40039: 
-40039:   template<typename _Res, typename _Functor, typename... _ArgTypes>
-40039:     class _Function_handler<_Res(_ArgTypes...), _Functor>
-40039:     : public _Function_base::_Base_manager<_Functor>
-40039:     {
-40039:       typedef _Function_base::_Base_manager<_Functor> _Base;
-40039: 
-40039:     public:
-40039:       static _Res
-40039:       _M_invoke(const _Any_data& __functor, _ArgTypes&&... __args)
-40039:       {
-40039:  return (*_Base::_M_get_pointer(__functor))(
-40039:      std::forward<_ArgTypes>(__args)...);
-40039:       }
-40039:     };
-40039: 
-40039:   template<typename _Functor, typename... _ArgTypes>
-40039:     class _Function_handler<void(_ArgTypes...), _Functor>
-40039:     : public _Function_base::_Base_manager<_Functor>
-40039:     {
-40039:       typedef _Function_base::_Base_manager<_Functor> _Base;
-40039: 
-40039:      public:
-40039:       static void
-40039:       _M_invoke(const _Any_data& __functor, _ArgTypes&&... __args)
-40039:       {
-40039:  (*_Base::_M_get_pointer(__functor))(
-40039:      std::forward<_ArgTypes>(__args)...);
-40039:       }
-40039:     };
-40039: 
-40039:   template<typename _Class, typename _Member, typename _Res,
-40039:     typename... _ArgTypes>
-40039:     class _Function_handler<_Res(_ArgTypes...), _Member _Class::*>
-40039:     : public _Function_handler<void(_ArgTypes...), _Member _Class::*>
-40039:     {
-40039:       typedef _Function_handler<void(_ArgTypes...), _Member _Class::*>
-40039:  _Base;
-40039: 
-40039:      public:
-40039:       static _Res
-40039:       _M_invoke(const _Any_data& __functor, _ArgTypes&&... __args)
-40039:       {
-40039:  return std::__invoke(_Base::_M_get_pointer(__functor)->__value,
-40039:         std::forward<_ArgTypes>(__args)...);
-40039:       }
-40039:     };
-40039: 
-40039:   template<typename _Class, typename _Member, typename... _ArgTypes>
-40039:     class _Function_handler<void(_ArgTypes...), _Member _Class::*>
-40039:     : public _Function_base::_Base_manager<
-40039:    _Simple_type_wrapper< _Member _Class::* > >
-40039:     {
-40039:       typedef _Member _Class::* _Functor;
-40039:       typedef _Simple_type_wrapper<_Functor> _Wrapper;
-40039:       typedef _Function_base::_Base_manager<_Wrapper> _Base;
-40039: 
-40039:     public:
-40039:       static bool
-40039:       _M_manager(_Any_data& __dest, const _Any_data& __source,
-40039:    _Manager_operation __op)
-40039:       {
-40039:  switch (__op)
-40039:    {
-40039: 
-40039:    case __get_type_info:
-40039:      __dest._M_access<const type_info*>() = &typeid(_Functor);
-40039:      break;
-40039: 
-40039:    case __get_functor_ptr:
-40039:      __dest._M_access<_Functor*>() =
-40039:        &_Base::_M_get_pointer(__source)->__value;
-40039:      break;
-40039: 
-40039:    default:
-40039:      _Base::_M_manager(__dest, __source, __op);
-40039:    }
-40039:  return false;
-40039:       }
-40039: 
-40039:       static void
-40039:       _M_invoke(const _Any_data& __functor, _ArgTypes&&... __args)
-40039:       {
-40039:  std::__invoke(_Base::_M_get_pointer(__functor)->__value,
-40039:         std::forward<_ArgTypes>(__args)...);
-40039:       }
-40039:     };
-40039: 
-40039:   template<typename _From, typename _To>
-40039:     using __check_func_return_type
-40039:       = __or_<is_void<_To>, is_same<_From, _To>, is_convertible<_From, _To>>;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes>
-40039:     class function<_Res(_ArgTypes...)>
-40039:     : public _Maybe_unary_or_binary_function<_Res, _ArgTypes...>,
-40039:       private _Function_base
-40039:     {
-40039:       template<typename _Func,
-40039:         typename _Res2 = typename result_of<_Func&(_ArgTypes...)>::type>
-40039:  struct _Callable : __check_func_return_type<_Res2, _Res> { };
-40039: 
-40039: 
-40039: 
-40039:       template<typename _Tp>
-40039:  struct _Callable<function, _Tp> : false_type { };
-40039: 
-40039:       template<typename _Cond, typename _Tp>
-40039:  using _Requires = typename enable_if<_Cond::value, _Tp>::type;
-40039: 
-40039:     public:
-40039:       typedef _Res result_type;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       function() noexcept
-40039:       : _Function_base() { }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       function(nullptr_t) noexcept
-40039:       : _Function_base() { }
-40039: # 413 "/usr/include/c++/8/bits/std_function.h" 3
-40039:       function(const function& __x);
-40039: # 422 "/usr/include/c++/8/bits/std_function.h" 3
-40039:       function(function&& __x) noexcept : _Function_base()
-40039:       {
-40039:  __x.swap(*this);
-40039:       }
-40039: # 443 "/usr/include/c++/8/bits/std_function.h" 3
-40039:       template<typename _Functor,
-40039:         typename = _Requires<__not_<is_same<_Functor, function>>, void>,
-40039:         typename = _Requires<_Callable<_Functor>, void>>
-40039:  function(_Functor);
-40039: # 460 "/usr/include/c++/8/bits/std_function.h" 3
-40039:       function&
-40039:       operator=(const function& __x)
-40039:       {
-40039:  function(__x).swap(*this);
-40039:  return *this;
-40039:       }
-40039: # 478 "/usr/include/c++/8/bits/std_function.h" 3
-40039:       function&
-40039:       operator=(function&& __x) noexcept
-40039:       {
-40039:  function(std::move(__x)).swap(*this);
-40039:  return *this;
-40039:       }
-40039: # 492 "/usr/include/c++/8/bits/std_function.h" 3
-40039:       function&
-40039:       operator=(nullptr_t) noexcept
-40039:       {
-40039:  if (_M_manager)
-40039:    {
-40039:      _M_manager(_M_functor, _M_functor, __destroy_functor);
-40039:      _M_manager = nullptr;
-40039:      _M_invoker = nullptr;
-40039:    }
-40039:  return *this;
-40039:       }
-40039: # 520 "/usr/include/c++/8/bits/std_function.h" 3
-40039:       template<typename _Functor>
-40039:  _Requires<_Callable<typename decay<_Functor>::type>, function&>
-40039:  operator=(_Functor&& __f)
-40039:  {
-40039:    function(std::forward<_Functor>(__f)).swap(*this);
-40039:    return *this;
-40039:  }
-40039: 
-40039: 
-40039:       template<typename _Functor>
-40039:  function&
-40039:  operator=(reference_wrapper<_Functor> __f) noexcept
-40039:  {
-40039:    function(__f).swap(*this);
-40039:    return *this;
-40039:  }
-40039: # 546 "/usr/include/c++/8/bits/std_function.h" 3
-40039:       void swap(function& __x) noexcept
-40039:       {
-40039:  std::swap(_M_functor, __x._M_functor);
-40039:  std::swap(_M_manager, __x._M_manager);
-40039:  std::swap(_M_invoker, __x._M_invoker);
-40039:       }
-40039: # 563 "/usr/include/c++/8/bits/std_function.h" 3
-40039:       explicit operator bool() const noexcept
-40039:       { return !_M_empty(); }
-40039: # 576 "/usr/include/c++/8/bits/std_function.h" 3
-40039:       _Res operator()(_ArgTypes... __args) const;
-40039: # 589 "/usr/include/c++/8/bits/std_function.h" 3
-40039:       const type_info& target_type() const noexcept;
-40039: # 602 "/usr/include/c++/8/bits/std_function.h" 3
-40039:       template<typename _Functor> _Functor* target() noexcept;
-40039: 
-40039:       template<typename _Functor> const _Functor* target() const noexcept;
-40039: 
-40039: 
-40039: 
-40039:     private:
-40039:       using _Invoker_type = _Res (*)(const _Any_data&, _ArgTypes&&...);
-40039:       _Invoker_type _M_invoker;
-40039:   };
-40039: # 651 "/usr/include/c++/8/bits/std_function.h" 3
-40039:   template<typename _Res, typename... _ArgTypes>
-40039:     function<_Res(_ArgTypes...)>::
-40039:     function(const function& __x)
-40039:     : _Function_base()
-40039:     {
-40039:       if (static_cast<bool>(__x))
-40039:  {
-40039:    __x._M_manager(_M_functor, __x._M_functor, __clone_functor);
-40039:    _M_invoker = __x._M_invoker;
-40039:    _M_manager = __x._M_manager;
-40039:  }
-40039:     }
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes>
-40039:     template<typename _Functor, typename, typename>
-40039:       function<_Res(_ArgTypes...)>::
-40039:       function(_Functor __f)
-40039:       : _Function_base()
-40039:       {
-40039:  typedef _Function_handler<_Res(_ArgTypes...), _Functor> _My_handler;
-40039: 
-40039:  if (_My_handler::_M_not_empty_function(__f))
-40039:    {
-40039:      _My_handler::_M_init_functor(_M_functor, std::move(__f));
-40039:      _M_invoker = &_My_handler::_M_invoke;
-40039:      _M_manager = &_My_handler::_M_manager;
-40039:    }
-40039:       }
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes>
-40039:     _Res
-40039:     function<_Res(_ArgTypes...)>::
-40039:     operator()(_ArgTypes... __args) const
-40039:     {
-40039:       if (_M_empty())
-40039:  __throw_bad_function_call();
-40039:       return _M_invoker(_M_functor, std::forward<_ArgTypes>(__args)...);
-40039:     }
-40039: 
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes>
-40039:     const type_info&
-40039:     function<_Res(_ArgTypes...)>::
-40039:     target_type() const noexcept
-40039:     {
-40039:       if (_M_manager)
-40039:  {
-40039:    _Any_data __typeinfo_result;
-40039:    _M_manager(__typeinfo_result, _M_functor, __get_type_info);
-40039:    return *__typeinfo_result._M_access<const type_info*>();
-40039:  }
-40039:       else
-40039:  return typeid(void);
-40039:     }
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes>
-40039:     template<typename _Functor>
-40039:       _Functor*
-40039:       function<_Res(_ArgTypes...)>::
-40039:       target() noexcept
-40039:       {
-40039:  const function* __const_this = this;
-40039:  const _Functor* __func = __const_this->template target<_Functor>();
-40039:  return const_cast<_Functor*>(__func);
-40039:       }
-40039: 
-40039:   template<typename _Res, typename... _ArgTypes>
-40039:     template<typename _Functor>
-40039:       const _Functor*
-40039:       function<_Res(_ArgTypes...)>::
-40039:       target() const noexcept
-40039:       {
-40039:  if (typeid(_Functor) == target_type() && _M_manager)
-40039:    {
-40039:      _Any_data __ptr;
-40039:      _M_manager(__ptr, _M_functor, __get_functor_ptr);
-40039:      return __ptr._M_access<const _Functor*>();
-40039:    }
-40039:  else
-40039:    return nullptr;
-40039:       }
-40039: # 743 "/usr/include/c++/8/bits/std_function.h" 3
-40039:   template<typename _Res, typename... _Args>
-40039:     inline bool
-40039:     operator==(const function<_Res(_Args...)>& __f, nullptr_t) noexcept
-40039:     { return !static_cast<bool>(__f); }
-40039: 
-40039: 
-40039:   template<typename _Res, typename... _Args>
-40039:     inline bool
-40039:     operator==(nullptr_t, const function<_Res(_Args...)>& __f) noexcept
-40039:     { return !static_cast<bool>(__f); }
-40039: # 761 "/usr/include/c++/8/bits/std_function.h" 3
-40039:   template<typename _Res, typename... _Args>
-40039:     inline bool
-40039:     operator!=(const function<_Res(_Args...)>& __f, nullptr_t) noexcept
-40039:     { return static_cast<bool>(__f); }
-40039: 
-40039: 
-40039:   template<typename _Res, typename... _Args>
-40039:     inline bool
-40039:     operator!=(nullptr_t, const function<_Res(_Args...)>& __f) noexcept
-40039:     { return static_cast<bool>(__f); }
-40039: # 782 "/usr/include/c++/8/bits/std_function.h" 3
-40039:   template<typename _Res, typename... _Args>
-40039:     inline void
-40039:     swap(function<_Res(_Args...)>& __x, function<_Res(_Args...)>& __y) noexcept
-40039:     { __x.swap(__y); }
-40039: 
-40039: 
-40039: }
-40039: # 60 "/usr/include/c++/8/functional" 2 3
-40039: # 68 "/usr/include/c++/8/functional" 3
-40039: namespace std __attribute__ ((__visibility__ ("default")))
-40039: {
-40039: 
-40039: # 86 "/usr/include/c++/8/functional" 3
-40039:   template<typename _MemFunPtr,
-40039:     bool __is_mem_fn = is_member_function_pointer<_MemFunPtr>::value>
-40039:     class _Mem_fn_base
-40039:     : public _Mem_fn_traits<_MemFunPtr>::__maybe_type
-40039:     {
-40039:       using _Traits = _Mem_fn_traits<_MemFunPtr>;
-40039: 
-40039:       using _Arity = typename _Traits::__arity;
-40039:       using _Varargs = typename _Traits::__vararg;
-40039: 
-40039:       template<typename _Func, typename... _BoundArgs>
-40039:  friend struct _Bind_check_arity;
-40039: 
-40039:       _MemFunPtr _M_pmf;
-40039: 
-40039:     public:
-40039: 
-40039:       using result_type = typename _Traits::__result_type;
-40039: 
-40039:       explicit constexpr
-40039:       _Mem_fn_base(_MemFunPtr __pmf) noexcept : _M_pmf(__pmf) { }
-40039: 
-40039:       template<typename... _Args>
-40039:  auto
-40039:  operator()(_Args&&... __args) const
-40039:  noexcept(noexcept(
-40039:        std::__invoke(_M_pmf, std::forward<_Args>(__args)...)))
-40039:  -> decltype(std::__invoke(_M_pmf, std::forward<_Args>(__args)...))
-40039:  { return std::__invoke(_M_pmf, std::forward<_Args>(__args)...); }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _MemObjPtr>
-40039:     class _Mem_fn_base<_MemObjPtr, false>
-40039:     {
-40039:       using _Arity = integral_constant<size_t, 0>;
-40039:       using _Varargs = false_type;
-40039: 
-40039:       template<typename _Func, typename... _BoundArgs>
-40039:  friend struct _Bind_check_arity;
-40039: 
-40039:       _MemObjPtr _M_pm;
-40039: 
-40039:     public:
-40039:       explicit constexpr
-40039:       _Mem_fn_base(_MemObjPtr __pm) noexcept : _M_pm(__pm) { }
-40039: 
-40039:       template<typename _Tp>
-40039:  auto
-40039:  operator()(_Tp&& __obj) const
-40039:  noexcept(noexcept(std::__invoke(_M_pm, std::forward<_Tp>(__obj))))
-40039:  -> decltype(std::__invoke(_M_pm, std::forward<_Tp>(__obj)))
-40039:  { return std::__invoke(_M_pm, std::forward<_Tp>(__obj)); }
-40039:     };
-40039: 
-40039:   template<typename _MemberPointer>
-40039:     struct _Mem_fn;
-40039: 
-40039:   template<typename _Res, typename _Class>
-40039:     struct _Mem_fn<_Res _Class::*>
-40039:     : _Mem_fn_base<_Res _Class::*>
-40039:     {
-40039:       using _Mem_fn_base<_Res _Class::*>::_Mem_fn_base;
-40039:     };
-40039: # 158 "/usr/include/c++/8/functional" 3
-40039:   template<typename _Tp, typename _Class>
-40039:     inline _Mem_fn<_Tp _Class::*>
-40039:     mem_fn(_Tp _Class::* __pm) noexcept
-40039:     {
-40039:       return _Mem_fn<_Tp _Class::*>(__pm);
-40039:     }
-40039: # 173 "/usr/include/c++/8/functional" 3
-40039:   template<typename _Tp>
-40039:     struct is_bind_expression
-40039:     : public false_type { };
-40039: # 184 "/usr/include/c++/8/functional" 3
-40039:   template<typename _Tp>
-40039:     struct is_placeholder
-40039:     : public integral_constant<int, 0>
-40039:     { };
-40039: # 199 "/usr/include/c++/8/functional" 3
-40039:   template<int _Num> struct _Placeholder { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   namespace placeholders
-40039:   {
-40039: 
-40039: 
-40039: 
-40039: 
-40039:     extern const _Placeholder<1> _1;
-40039:     extern const _Placeholder<2> _2;
-40039:     extern const _Placeholder<3> _3;
-40039:     extern const _Placeholder<4> _4;
-40039:     extern const _Placeholder<5> _5;
-40039:     extern const _Placeholder<6> _6;
-40039:     extern const _Placeholder<7> _7;
-40039:     extern const _Placeholder<8> _8;
-40039:     extern const _Placeholder<9> _9;
-40039:     extern const _Placeholder<10> _10;
-40039:     extern const _Placeholder<11> _11;
-40039:     extern const _Placeholder<12> _12;
-40039:     extern const _Placeholder<13> _13;
-40039:     extern const _Placeholder<14> _14;
-40039:     extern const _Placeholder<15> _15;
-40039:     extern const _Placeholder<16> _16;
-40039:     extern const _Placeholder<17> _17;
-40039:     extern const _Placeholder<18> _18;
-40039:     extern const _Placeholder<19> _19;
-40039:     extern const _Placeholder<20> _20;
-40039:     extern const _Placeholder<21> _21;
-40039:     extern const _Placeholder<22> _22;
-40039:     extern const _Placeholder<23> _23;
-40039:     extern const _Placeholder<24> _24;
-40039:     extern const _Placeholder<25> _25;
-40039:     extern const _Placeholder<26> _26;
-40039:     extern const _Placeholder<27> _27;
-40039:     extern const _Placeholder<28> _28;
-40039:     extern const _Placeholder<29> _29;
-40039:   }
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<int _Num>
-40039:     struct is_placeholder<_Placeholder<_Num> >
-40039:     : public integral_constant<int, _Num>
-40039:     { };
-40039: 
-40039:   template<int _Num>
-40039:     struct is_placeholder<const _Placeholder<_Num> >
-40039:     : public integral_constant<int, _Num>
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039:   template<std::size_t __i, typename _Tuple>
-40039:     using _Safe_tuple_element_t
-40039:       = typename enable_if<(__i < tuple_size<_Tuple>::value),
-40039:       tuple_element<__i, _Tuple>>::type::type;
-40039: # 275 "/usr/include/c++/8/functional" 3
-40039:   template<typename _Arg,
-40039:     bool _IsBindExp = is_bind_expression<_Arg>::value,
-40039:     bool _IsPlaceholder = (is_placeholder<_Arg>::value > 0)>
-40039:     class _Mu;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp>
-40039:     class _Mu<reference_wrapper<_Tp>, false, false>
-40039:     {
-40039:     public:
-40039: 
-40039: 
-40039: 
-40039: 
-40039:       template<typename _CVRef, typename _Tuple>
-40039:  _Tp&
-40039:  operator()(_CVRef& __arg, _Tuple&) const volatile
-40039:  { return __arg.get(); }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Arg>
-40039:     class _Mu<_Arg, true, false>
-40039:     {
-40039:     public:
-40039:       template<typename _CVArg, typename... _Args>
-40039:  auto
-40039:  operator()(_CVArg& __arg,
-40039:      tuple<_Args...>& __tuple) const volatile
-40039:  -> decltype(__arg(declval<_Args>()...))
-40039:  {
-40039: 
-40039:    typedef typename _Build_index_tuple<sizeof...(_Args)>::__type
-40039:      _Indexes;
-40039:    return this->__call(__arg, __tuple, _Indexes());
-40039:  }
-40039: 
-40039:     private:
-40039: 
-40039: 
-40039:       template<typename _CVArg, typename... _Args, std::size_t... _Indexes>
-40039:  auto
-40039:  __call(_CVArg& __arg, tuple<_Args...>& __tuple,
-40039:         const _Index_tuple<_Indexes...>&) const volatile
-40039:  -> decltype(__arg(declval<_Args>()...))
-40039:  {
-40039:    return __arg(std::get<_Indexes>(std::move(__tuple))...);
-40039:  }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Arg>
-40039:     class _Mu<_Arg, false, true>
-40039:     {
-40039:     public:
-40039:       template<typename _Tuple>
-40039:  _Safe_tuple_element_t<(is_placeholder<_Arg>::value - 1), _Tuple>&&
-40039:  operator()(const volatile _Arg&, _Tuple& __tuple) const volatile
-40039:  {
-40039:    return
-40039:      ::std::get<(is_placeholder<_Arg>::value - 1)>(std::move(__tuple));
-40039:  }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Arg>
-40039:     class _Mu<_Arg, false, false>
-40039:     {
-40039:     public:
-40039:       template<typename _CVArg, typename _Tuple>
-40039:  _CVArg&&
-40039:  operator()(_CVArg&& __arg, _Tuple&) const volatile
-40039:  { return std::forward<_CVArg>(__arg); }
-40039:     };
-40039: 
-40039: 
-40039:   template<std::size_t _Ind, typename... _Tp>
-40039:     inline auto
-40039:     __volget(volatile tuple<_Tp...>& __tuple)
-40039:     -> __tuple_element_t<_Ind, tuple<_Tp...>> volatile&
-40039:     { return std::get<_Ind>(const_cast<tuple<_Tp...>&>(__tuple)); }
-40039: 
-40039: 
-40039:   template<std::size_t _Ind, typename... _Tp>
-40039:     inline auto
-40039:     __volget(const volatile tuple<_Tp...>& __tuple)
-40039:     -> __tuple_element_t<_Ind, tuple<_Tp...>> const volatile&
-40039:     { return std::get<_Ind>(const_cast<const tuple<_Tp...>&>(__tuple)); }
-40039: 
-40039: 
-40039:   template<typename _Signature>
-40039:     struct _Bind;
-40039: 
-40039:    template<typename _Functor, typename... _Bound_args>
-40039:     class _Bind<_Functor(_Bound_args...)>
-40039:     : public _Weak_result_type<_Functor>
-40039:     {
-40039:       typedef typename _Build_index_tuple<sizeof...(_Bound_args)>::__type
-40039:  _Bound_indexes;
-40039: 
-40039:       _Functor _M_f;
-40039:       tuple<_Bound_args...> _M_bound_args;
-40039: 
-40039: 
-40039:       template<typename _Result, typename... _Args, std::size_t... _Indexes>
-40039:  _Result
-40039:  __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>)
-40039:  {
-40039:    return std::__invoke(_M_f,
-40039:        _Mu<_Bound_args>()(std::get<_Indexes>(_M_bound_args), __args)...
-40039:        );
-40039:  }
-40039: 
-40039: 
-40039:       template<typename _Result, typename... _Args, std::size_t... _Indexes>
-40039:  _Result
-40039:  __call_c(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) const
-40039:  {
-40039:    return std::__invoke(_M_f,
-40039:        _Mu<_Bound_args>()(std::get<_Indexes>(_M_bound_args), __args)...
-40039:        );
-40039:  }
-40039: 
-40039: 
-40039:       template<typename _Result, typename... _Args, std::size_t... _Indexes>
-40039:  _Result
-40039:  __call_v(tuple<_Args...>&& __args,
-40039:    _Index_tuple<_Indexes...>) volatile
-40039:  {
-40039:    return std::__invoke(_M_f,
-40039:        _Mu<_Bound_args>()(__volget<_Indexes>(_M_bound_args), __args)...
-40039:        );
-40039:  }
-40039: 
-40039: 
-40039:       template<typename _Result, typename... _Args, std::size_t... _Indexes>
-40039:  _Result
-40039:  __call_c_v(tuple<_Args...>&& __args,
-40039:      _Index_tuple<_Indexes...>) const volatile
-40039:  {
-40039:    return std::__invoke(_M_f,
-40039:        _Mu<_Bound_args>()(__volget<_Indexes>(_M_bound_args), __args)...
-40039:        );
-40039:  }
-40039: 
-40039:       template<typename _BoundArg, typename _CallArgs>
-40039:  using _Mu_type = decltype(
-40039:      _Mu<typename remove_cv<_BoundArg>::type>()(
-40039:        std::declval<_BoundArg&>(), std::declval<_CallArgs&>()) );
-40039: 
-40039:       template<typename _Fn, typename _CallArgs, typename... _BArgs>
-40039:  using _Res_type_impl
-40039:    = typename result_of< _Fn&(_Mu_type<_BArgs, _CallArgs>&&...) >::type;
-40039: 
-40039:       template<typename _CallArgs>
-40039:  using _Res_type = _Res_type_impl<_Functor, _CallArgs, _Bound_args...>;
-40039: 
-40039:       template<typename _CallArgs>
-40039:  using __dependent = typename
-40039:    enable_if<bool(tuple_size<_CallArgs>::value+1), _Functor>::type;
-40039: 
-40039:       template<typename _CallArgs, template<class> class __cv_quals>
-40039:  using _Res_type_cv = _Res_type_impl<
-40039:    typename __cv_quals<__dependent<_CallArgs>>::type,
-40039:    _CallArgs,
-40039:    typename __cv_quals<_Bound_args>::type...>;
-40039: 
-40039:      public:
-40039:       template<typename... _Args>
-40039:  explicit _Bind(const _Functor& __f, _Args&&... __args)
-40039:  : _M_f(__f), _M_bound_args(std::forward<_Args>(__args)...)
-40039:  { }
-40039: 
-40039:       template<typename... _Args>
-40039:  explicit _Bind(_Functor&& __f, _Args&&... __args)
-40039:  : _M_f(std::move(__f)), _M_bound_args(std::forward<_Args>(__args)...)
-40039:  { }
-40039: 
-40039:       _Bind(const _Bind&) = default;
-40039: 
-40039:       _Bind(_Bind&& __b)
-40039:       : _M_f(std::move(__b._M_f)), _M_bound_args(std::move(__b._M_bound_args))
-40039:       { }
-40039: 
-40039: 
-40039:       template<typename... _Args,
-40039:         typename _Result = _Res_type<tuple<_Args...>>>
-40039:  _Result
-40039:  operator()(_Args&&... __args)
-40039:  {
-40039:    return this->__call<_Result>(
-40039:        std::forward_as_tuple(std::forward<_Args>(__args)...),
-40039:        _Bound_indexes());
-40039:  }
-40039: 
-40039: 
-40039:       template<typename... _Args,
-40039:         typename _Result = _Res_type_cv<tuple<_Args...>, add_const>>
-40039:  _Result
-40039:  operator()(_Args&&... __args) const
-40039:  {
-40039:    return this->__call_c<_Result>(
-40039:        std::forward_as_tuple(std::forward<_Args>(__args)...),
-40039:        _Bound_indexes());
-40039:  }
-40039: # 505 "/usr/include/c++/8/functional" 3
-40039:       template<typename... _Args,
-40039:         typename _Result = _Res_type_cv<tuple<_Args...>, add_volatile>>
-40039: 
-40039:  _Result
-40039:  operator()(_Args&&... __args) volatile
-40039:  {
-40039:    return this->__call_v<_Result>(
-40039:        std::forward_as_tuple(std::forward<_Args>(__args)...),
-40039:        _Bound_indexes());
-40039:  }
-40039: 
-40039: 
-40039:       template<typename... _Args,
-40039:         typename _Result = _Res_type_cv<tuple<_Args...>, add_cv>>
-40039: 
-40039:  _Result
-40039:  operator()(_Args&&... __args) const volatile
-40039:  {
-40039:    return this->__call_c_v<_Result>(
-40039:        std::forward_as_tuple(std::forward<_Args>(__args)...),
-40039:        _Bound_indexes());
-40039:  }
-40039:     };
-40039: 
-40039: 
-40039:   template<typename _Result, typename _Signature>
-40039:     struct _Bind_result;
-40039: 
-40039:   template<typename _Result, typename _Functor, typename... _Bound_args>
-40039:     class _Bind_result<_Result, _Functor(_Bound_args...)>
-40039:     {
-40039:       typedef typename _Build_index_tuple<sizeof...(_Bound_args)>::__type
-40039:  _Bound_indexes;
-40039: 
-40039:       _Functor _M_f;
-40039:       tuple<_Bound_args...> _M_bound_args;
-40039: 
-40039: 
-40039:       template<typename _Res>
-40039:  using __enable_if_void
-40039:    = typename enable_if<is_void<_Res>{}>::type;
-40039: 
-40039:       template<typename _Res>
-40039:  using __disable_if_void
-40039:    = typename enable_if<!is_void<_Res>{}, _Result>::type;
-40039: 
-40039: 
-40039:       template<typename _Res, typename... _Args, std::size_t... _Indexes>
-40039:  __disable_if_void<_Res>
-40039:  __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>)
-40039:  {
-40039:    return std::__invoke(_M_f, _Mu<_Bound_args>()
-40039:         (std::get<_Indexes>(_M_bound_args), __args)...);
-40039:  }
-40039: 
-40039: 
-40039:       template<typename _Res, typename... _Args, std::size_t... _Indexes>
-40039:  __enable_if_void<_Res>
-40039:  __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>)
-40039:  {
-40039:    std::__invoke(_M_f, _Mu<_Bound_args>()
-40039:         (std::get<_Indexes>(_M_bound_args), __args)...);
-40039:  }
-40039: 
-40039: 
-40039:       template<typename _Res, typename... _Args, std::size_t... _Indexes>
-40039:  __disable_if_void<_Res>
-40039:  __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) const
-40039:  {
-40039:    return std::__invoke(_M_f, _Mu<_Bound_args>()
-40039:         (std::get<_Indexes>(_M_bound_args), __args)...);
-40039:  }
-40039: 
-40039: 
-40039:       template<typename _Res, typename... _Args, std::size_t... _Indexes>
-40039:  __enable_if_void<_Res>
-40039:  __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) const
-40039:  {
-40039:    std::__invoke(_M_f, _Mu<_Bound_args>()
-40039:         (std::get<_Indexes>(_M_bound_args), __args)...);
-40039:  }
-40039: 
-40039: 
-40039:       template<typename _Res, typename... _Args, std::size_t... _Indexes>
-40039:  __disable_if_void<_Res>
-40039:  __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) volatile
-40039:  {
-40039:    return std::__invoke(_M_f, _Mu<_Bound_args>()
-40039:         (__volget<_Indexes>(_M_bound_args), __args)...);
-40039:  }
-40039: 
-40039: 
-40039:       template<typename _Res, typename... _Args, std::size_t... _Indexes>
-40039:  __enable_if_void<_Res>
-40039:  __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) volatile
-40039:  {
-40039:    std::__invoke(_M_f, _Mu<_Bound_args>()
-40039:         (__volget<_Indexes>(_M_bound_args), __args)...);
-40039:  }
-40039: 
-40039: 
-40039:       template<typename _Res, typename... _Args, std::size_t... _Indexes>
-40039:  __disable_if_void<_Res>
-40039:  __call(tuple<_Args...>&& __args,
-40039:         _Index_tuple<_Indexes...>) const volatile
-40039:  {
-40039:    return std::__invoke(_M_f, _Mu<_Bound_args>()
-40039:         (__volget<_Indexes>(_M_bound_args), __args)...);
-40039:  }
-40039: 
-40039: 
-40039:       template<typename _Res, typename... _Args, std::size_t... _Indexes>
-40039:  __enable_if_void<_Res>
-40039:  __call(tuple<_Args...>&& __args,
-40039:         _Index_tuple<_Indexes...>) const volatile
-40039:  {
-40039:    std::__invoke(_M_f, _Mu<_Bound_args>()
-40039:         (__volget<_Indexes>(_M_bound_args), __args)...);
-40039:  }
-40039: 
-40039:     public:
-40039:       typedef _Result result_type;
-40039: 
-40039:       template<typename... _Args>
-40039:  explicit _Bind_result(const _Functor& __f, _Args&&... __args)
-40039:  : _M_f(__f), _M_bound_args(std::forward<_Args>(__args)...)
-40039:  { }
-40039: 
-40039:       template<typename... _Args>
-40039:  explicit _Bind_result(_Functor&& __f, _Args&&... __args)
-40039:  : _M_f(std::move(__f)), _M_bound_args(std::forward<_Args>(__args)...)
-40039:  { }
-40039: 
-40039:       _Bind_result(const _Bind_result&) = default;
-40039: 
-40039:       _Bind_result(_Bind_result&& __b)
-40039:       : _M_f(std::move(__b._M_f)), _M_bound_args(std::move(__b._M_bound_args))
-40039:       { }
-40039: 
-40039: 
-40039:       template<typename... _Args>
-40039:  result_type
-40039:  operator()(_Args&&... __args)
-40039:  {
-40039:    return this->__call<_Result>(
-40039:        std::forward_as_tuple(std::forward<_Args>(__args)...),
-40039:        _Bound_indexes());
-40039:  }
-40039: 
-40039: 
-40039:       template<typename... _Args>
-40039:  result_type
-40039:  operator()(_Args&&... __args) const
-40039:  {
-40039:    return this->__call<_Result>(
-40039:        std::forward_as_tuple(std::forward<_Args>(__args)...),
-40039:        _Bound_indexes());
-40039:  }
-40039: 
-40039: 
-40039:       template<typename... _Args>
-40039: 
-40039:  result_type
-40039:  operator()(_Args&&... __args) volatile
-40039:  {
-40039:    return this->__call<_Result>(
-40039:        std::forward_as_tuple(std::forward<_Args>(__args)...),
-40039:        _Bound_indexes());
-40039:  }
-40039: 
-40039: 
-40039:       template<typename... _Args>
-40039: 
-40039:  result_type
-40039:  operator()(_Args&&... __args) const volatile
-40039:  {
-40039:    return this->__call<_Result>(
-40039:        std::forward_as_tuple(std::forward<_Args>(__args)...),
-40039:        _Bound_indexes());
-40039:  }
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Signature>
-40039:     struct is_bind_expression<_Bind<_Signature> >
-40039:     : public true_type { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Signature>
-40039:     struct is_bind_expression<const _Bind<_Signature> >
-40039:     : public true_type { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Signature>
-40039:     struct is_bind_expression<volatile _Bind<_Signature> >
-40039:     : public true_type { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Signature>
-40039:     struct is_bind_expression<const volatile _Bind<_Signature>>
-40039:     : public true_type { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Result, typename _Signature>
-40039:     struct is_bind_expression<_Bind_result<_Result, _Signature>>
-40039:     : public true_type { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Result, typename _Signature>
-40039:     struct is_bind_expression<const _Bind_result<_Result, _Signature>>
-40039:     : public true_type { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Result, typename _Signature>
-40039:     struct is_bind_expression<volatile _Bind_result<_Result, _Signature>>
-40039:     : public true_type { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Result, typename _Signature>
-40039:     struct is_bind_expression<const volatile _Bind_result<_Result, _Signature>>
-40039:     : public true_type { };
-40039: 
-40039:   template<typename _Func, typename... _BoundArgs>
-40039:     struct _Bind_check_arity { };
-40039: 
-40039:   template<typename _Ret, typename... _Args, typename... _BoundArgs>
-40039:     struct _Bind_check_arity<_Ret (*)(_Args...), _BoundArgs...>
-40039:     {
-40039:       static_assert(sizeof...(_BoundArgs) == sizeof...(_Args),
-40039:                    "Wrong number of arguments for function");
-40039:     };
-40039: 
-40039:   template<typename _Ret, typename... _Args, typename... _BoundArgs>
-40039:     struct _Bind_check_arity<_Ret (*)(_Args......), _BoundArgs...>
-40039:     {
-40039:       static_assert(sizeof...(_BoundArgs) >= sizeof...(_Args),
-40039:                    "Wrong number of arguments for function");
-40039:     };
-40039: 
-40039:   template<typename _Tp, typename _Class, typename... _BoundArgs>
-40039:     struct _Bind_check_arity<_Tp _Class::*, _BoundArgs...>
-40039:     {
-40039:       using _Arity = typename _Mem_fn<_Tp _Class::*>::_Arity;
-40039:       using _Varargs = typename _Mem_fn<_Tp _Class::*>::_Varargs;
-40039:       static_assert(_Varargs::value
-40039:       ? sizeof...(_BoundArgs) >= _Arity::value + 1
-40039:       : sizeof...(_BoundArgs) == _Arity::value + 1,
-40039:       "Wrong number of arguments for pointer-to-member");
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Tp, typename _Tp2 = typename decay<_Tp>::type>
-40039:     using __is_socketlike = __or_<is_integral<_Tp2>, is_enum<_Tp2>>;
-40039: 
-40039:   template<bool _SocketLike, typename _Func, typename... _BoundArgs>
-40039:     struct _Bind_helper
-40039:     : _Bind_check_arity<typename decay<_Func>::type, _BoundArgs...>
-40039:     {
-40039:       typedef typename decay<_Func>::type __func_type;
-40039:       typedef _Bind<__func_type(typename decay<_BoundArgs>::type...)> type;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Func, typename... _BoundArgs>
-40039:     struct _Bind_helper<true, _Func, _BoundArgs...>
-40039:     { };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Func, typename... _BoundArgs>
-40039:     inline typename
-40039:     _Bind_helper<__is_socketlike<_Func>::value, _Func, _BoundArgs...>::type
-40039:     bind(_Func&& __f, _BoundArgs&&... __args)
-40039:     {
-40039:       typedef _Bind_helper<false, _Func, _BoundArgs...> __helper_type;
-40039:       return typename __helper_type::type(std::forward<_Func>(__f),
-40039:        std::forward<_BoundArgs>(__args)...);
-40039:     }
-40039: 
-40039:   template<typename _Result, typename _Func, typename... _BoundArgs>
-40039:     struct _Bindres_helper
-40039:     : _Bind_check_arity<typename decay<_Func>::type, _BoundArgs...>
-40039:     {
-40039:       typedef typename decay<_Func>::type __functor_type;
-40039:       typedef _Bind_result<_Result,
-40039:       __functor_type(typename decay<_BoundArgs>::type...)>
-40039:  type;
-40039:     };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Result, typename _Func, typename... _BoundArgs>
-40039:     inline
-40039:     typename _Bindres_helper<_Result, _Func, _BoundArgs...>::type
-40039:     bind(_Func&& __f, _BoundArgs&&... __args)
-40039:     {
-40039:       typedef _Bindres_helper<_Result, _Func, _BoundArgs...> __helper_type;
-40039:       return typename __helper_type::type(std::forward<_Func>(__f),
-40039:        std::forward<_BoundArgs>(__args)...);
-40039:     }
-40039: 
-40039: 
-40039: 
-40039:   template<typename _Fn>
-40039:     class _Not_fn
-40039:     {
-40039:       template<typename _Fn2, typename... _Args>
-40039:  using __inv_res_t = typename __invoke_result<_Fn2, _Args...>::type;
-40039: 
-40039:       template<typename _Tp>
-40039:  static decltype(!std::declval<_Tp>())
-40039:  _S_not() noexcept(noexcept(!std::declval<_Tp>()));
-40039: 
-40039:     public:
-40039:       template<typename _Fn2>
-40039:  _Not_fn(_Fn2&& __fn, int)
-40039:  : _M_fn(std::forward<_Fn2>(__fn)) { }
-40039: 
-40039:       _Not_fn(const _Not_fn& __fn) = default;
-40039:       _Not_fn(_Not_fn&& __fn) = default;
-40039:       ~_Not_fn() = default;
-40039: # 873 "/usr/include/c++/8/functional" 3
-40039:       template<typename... _Args> decltype(_S_not<__inv_res_t<_Fn &, _Args...>>()) operator()(_Args&&... __args) & noexcept(__is_nothrow_invocable<_Fn &, _Args...>::value && noexcept(_S_not<__inv_res_t<_Fn &, _Args...>>())) { return !std::__invoke(std::forward< _Fn & >(_M_fn), std::forward<_Args>(__args)...); }
-40039:       template<typename... _Args> decltype(_S_not<__inv_res_t<_Fn const &, _Args...>>()) operator()(_Args&&... __args) const & noexcept(__is_nothrow_invocable<_Fn const &, _Args...>::value && noexcept(_S_not<__inv_res_t<_Fn const &, _Args...>>())) { return !std::__invoke(std::forward< _Fn const & >(_M_fn), std::forward<_Args>(__args)...); }
-40039:       template<typename... _Args> decltype(_S_not<__inv_res_t<_Fn &&, _Args...>>()) operator()(_Args&&... __args) && noexcept(__is_nothrow_invocable<_Fn &&, _Args...>::value && noexcept(_S_not<__inv_res_t<_Fn &&, _Args...>>())) { return !std::__invoke(std::forward< _Fn && >(_M_fn), std::forward<_Args>(__args)...); }
-40039:       template<typename... _Args> decltype(_S_not<__inv_res_t<_Fn const &&, _Args...>>()) operator()(_Args&&... __args) const && noexcept(__is_nothrow_invocable<_Fn const &&, _Args...>::value && noexcept(_S_not<__inv_res_t<_Fn const &&, _Args...>>())) { return !std::__invoke(std::forward< _Fn const && >(_M_fn), std::forward<_Args>(__args)...); }
-40039: 
-40039: 
-40039:     private:
-40039:       _Fn _M_fn;
-40039:     };
-40039: 
-40039:   template<typename _Tp, typename _Pred>
-40039:     struct __is_byte_like : false_type { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_byte_like<_Tp, equal_to<_Tp>>
-40039:     : __bool_constant<sizeof(_Tp) == 1 && is_integral<_Tp>::value> { };
-40039: 
-40039:   template<typename _Tp>
-40039:     struct __is_byte_like<_Tp, equal_to<void>>
-40039:     : __bool_constant<sizeof(_Tp) == 1 && is_integral<_Tp>::value> { };
-40039: # 1193 "/usr/include/c++/8/functional" 3
-40039: 
-40039: }
-40039: # 33 "../../src/Watchdog_defs.hh" 2
-40039: 
-40039: 
-40039: # 1 "/usr/include/x86_64-linux-gnu/sys/time.h" 1 3 4
-40039: # 34 "/usr/include/x86_64-linux-gnu/sys/time.h" 3 4
-40039: extern "C" {
-40039: # 52 "/usr/include/x86_64-linux-gnu/sys/time.h" 3 4
-40039: struct timezone
-40039:   {
-40039:     int tz_minuteswest;
-40039:     int tz_dsttime;
-40039:   };
-40039: 
-40039: typedef struct timezone *__restrict __timezone_ptr_t;
-40039: # 68 "/usr/include/x86_64-linux-gnu/sys/time.h" 3 4
-40039: extern int gettimeofday (struct timeval *__restrict __tv,
-40039:     __timezone_ptr_t __tz) throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int settimeofday (const struct timeval *__tv,
-40039:     const struct timezone *__tz)
-40039:      throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int adjtime (const struct timeval *__delta,
-40039:       struct timeval *__olddelta) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: enum __itimer_which
-40039:   {
-40039: 
-40039:     ITIMER_REAL = 0,
-40039: 
-40039: 
-40039:     ITIMER_VIRTUAL = 1,
-40039: 
-40039: 
-40039: 
-40039:     ITIMER_PROF = 2
-40039: 
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: struct itimerval
-40039:   {
-40039: 
-40039:     struct timeval it_interval;
-40039: 
-40039:     struct timeval it_value;
-40039:   };
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: typedef int __itimer_which_t;
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int getitimer (__itimer_which_t __which,
-40039:         struct itimerval *__value) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int setitimer (__itimer_which_t __which,
-40039:         const struct itimerval *__restrict __new,
-40039:         struct itimerval *__restrict __old) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int utimes (const char *__file, const struct timeval __tvp[2])
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: 
-40039: extern int lutimes (const char *__file, const struct timeval __tvp[2])
-40039:      throw () __attribute__ ((__nonnull__ (1)));
-40039: 
-40039: 
-40039: extern int futimes (int __fd, const struct timeval __tvp[2]) throw ();
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: extern int futimesat (int __fd, const char *__file,
-40039:         const struct timeval __tvp[2]) throw ();
-40039: # 186 "/usr/include/x86_64-linux-gnu/sys/time.h" 3 4
-40039: }
-40039: # 36 "../../src/Watchdog_defs.hh" 2
-40039: 
-40039: 
-40039: 
-40039: # 38 "../../src/Watchdog_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: extern "C" void PPL_handle_timeout(int signum);
-40039: 
-40039: struct Watchdog_Traits {
-40039:   typedef Implementation::Watchdog::Time Threshold;
-40039:   static bool less_than(const Threshold& a, const Threshold& b) {
-40039:     return a < b;
-40039:   }
-40039: };
-40039: 
-40039: 
-40039: class Watchdog {
-40039: public:
-40039:   template <typename Flag_Base, typename Flag>
-40039:   Watchdog(long csecs, const Flag_Base* volatile& holder, Flag& flag);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   Watchdog(long csecs, void (* const function)());
-40039: 
-40039: 
-40039:   ~Watchdog();
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   static void initialize();
-40039: 
-40039:   static void finalize();
-40039: 
-40039: private:
-40039: 
-40039:   bool expired;
-40039: 
-40039:   typedef Implementation::Watchdog::Pending_List<Watchdog_Traits>
-40039:   WD_Pending_List;
-40039: 
-40039:   typedef Implementation::Watchdog::Handler
-40039:   WD_Handler;
-40039: 
-40039:   const WD_Handler& handler;
-40039:   WD_Pending_List::iterator pending_position;
-40039: 
-40039: 
-40039:   Watchdog(const Watchdog&);
-40039: 
-40039:   Watchdog& operator=(const Watchdog&);
-40039: 
-40039: 
-40039:   static itimerval current_timer_status;
-40039: 
-40039: 
-40039:   static void get_timer(Implementation::Watchdog::Time& time);
-40039: 
-40039: 
-40039:   static itimerval signal_once;
-40039: 
-40039: 
-40039:   static Implementation::Watchdog::Time last_time_requested;
-40039: 
-40039: 
-40039:   static void set_timer(const Implementation::Watchdog::Time& time);
-40039: 
-40039: 
-40039:   static void stop_timer();
-40039: 
-40039: 
-40039:   static void reschedule();
-40039: 
-40039: 
-40039:   static Implementation::Watchdog::Time reschedule_time;
-40039: 
-40039: 
-40039:   static Implementation::Watchdog::Time time_so_far;
-40039: 
-40039: 
-40039:   static WD_Pending_List pending;
-40039: 
-40039: 
-40039:   static void handle_timeout(int);
-40039: 
-40039: 
-40039:   static WD_Pending_List::iterator
-40039:   new_watchdog_event(long csecs,
-40039:                      const WD_Handler& handler,
-40039:                      bool& expired_flag);
-40039: 
-40039: 
-40039:   void remove_watchdog_event(WD_Pending_List::iterator position);
-40039: 
-40039: 
-40039:   static volatile bool alarm_clock_running;
-40039: 
-40039: 
-40039:   static volatile bool in_critical_section;
-40039: 
-40039:   friend void PPL_handle_timeout(int signum);
-40039: 
-40039: 
-40039: };
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../src/Watchdog_inlines.hh" 1
-40039: # 27 "../../src/Watchdog_inlines.hh"
-40039: # 1 "../../src/Handler_defs.hh" 1
-40039: # 30 "../../src/Handler_defs.hh"
-40039: class Parma_Polyhedra_Library::Implementation::Watchdog::Handler {
-40039: public:
-40039: 
-40039:   virtual void act() const = 0;
-40039: 
-40039: 
-40039:   virtual ~Handler();
-40039: };
-40039: # 60 "../../src/Handler_defs.hh"
-40039: template <typename Flag_Base, typename Flag>
-40039: class Parma_Polyhedra_Library::Implementation::Watchdog::Handler_Flag
-40039:   : public Handler {
-40039: public:
-40039: 
-40039:   Handler_Flag(const Flag_Base* volatile& holder, Flag& flag);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   virtual void act() const;
-40039: 
-40039: private:
-40039: 
-40039:   const Flag_Base* volatile& h;
-40039:   Flag& f;
-40039: };
-40039: 
-40039: 
-40039: class Parma_Polyhedra_Library::Implementation::Watchdog::Handler_Function
-40039:   : public Handler {
-40039: public:
-40039: 
-40039:   Handler_Function(void (* const function)());
-40039: 
-40039: 
-40039:   virtual void act() const;
-40039: 
-40039: private:
-40039: 
-40039:   void (* const f)();
-40039: };
-40039: 
-40039: # 1 "../../src/Handler_inlines.hh" 1
-40039: # 27 "../../src/Handler_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: 
-40039: namespace Watchdog {
-40039: 
-40039: template <typename Flag_Base, typename Flag>
-40039: Handler_Flag<Flag_Base, Flag>::Handler_Flag(const Flag_Base* volatile& holder,
-40039:                                             Flag& flag)
-40039:   : h(holder), f(flag) {
-40039: }
-40039: 
-40039: template <typename Flag_Base, typename Flag>
-40039: void
-40039: Handler_Flag<Flag_Base, Flag>::act() const {
-40039:   if (h == 0 || static_cast<const Flag&>(*h).priority() < f.priority()) {
-40039:     h = &f;
-40039:   }
-40039: }
-40039: 
-40039: inline
-40039: Handler_Function::Handler_Function(void (* const function)())
-40039:   : f(function) {
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: }
-40039: # 95 "../../src/Handler_defs.hh" 2
-40039: # 28 "../../src/Watchdog_inlines.hh" 2
-40039: 
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: 
-40039: 
-40039: template <typename Flag_Base, typename Flag>
-40039: Watchdog::Watchdog(long csecs,
-40039:                    const Flag_Base* volatile& holder,
-40039:                    Flag& flag)
-40039:   : expired(false),
-40039:     handler(*new
-40039:             Implementation::Watchdog::Handler_Flag<Flag_Base, Flag>(holder,
-40039:                                                                     flag)) {
-40039:   if (csecs == 0) {
-40039:     throw std::invalid_argument("Watchdog constructor called with a"
-40039:                                 " non-positive number of centiseconds");
-40039:   }
-40039:   in_critical_section = true;
-40039:   pending_position = new_watchdog_event(csecs, handler, expired);
-40039:   in_critical_section = false;
-40039: }
-40039: 
-40039: inline
-40039: Watchdog::Watchdog(long csecs, void (* const function)())
-40039:   : expired(false),
-40039:     handler(*new Implementation::Watchdog::Handler_Function(function)) {
-40039:   if (csecs == 0) {
-40039:     throw std::invalid_argument("Watchdog constructor called with a"
-40039:                                 " non-positive number of centiseconds");
-40039:   }
-40039:   in_critical_section = true;
-40039:   pending_position = new_watchdog_event(csecs, handler, expired);
-40039:   in_critical_section = false;
-40039: }
-40039: 
-40039: inline
-40039: Watchdog::~Watchdog() {
-40039:   if (!expired) {
-40039:     in_critical_section = true;
-40039:     remove_watchdog_event(pending_position);
-40039:     in_critical_section = false;
-40039:   }
-40039:   delete &handler;
-40039: }
-40039: 
-40039: inline void
-40039: Watchdog::reschedule() {
-40039:   set_timer(reschedule_time);
-40039: }
-40039: # 101 "../../src/Watchdog_inlines.hh"
-40039: }
-40039: # 146 "../../src/Watchdog_defs.hh" 2
-40039: # 31 "../../src/ppl_include_files.hh" 2
-40039: # 1 "../../src/Threshold_Watcher_defs.hh" 1
-40039: # 27 "../../src/Threshold_Watcher_defs.hh"
-40039: # 1 "../../src/Threshold_Watcher_types.hh" 1
-40039: # 16 "../../src/Threshold_Watcher_types.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Traits>
-40039: class Threshold_Watcher;
-40039: 
-40039: }
-40039: # 28 "../../src/Threshold_Watcher_defs.hh" 2
-40039: 
-40039: 
-40039: # 1 "/usr/include/c++/8/cassert" 1 3
-40039: # 41 "/usr/include/c++/8/cassert" 3
-40039:        
-40039: # 42 "/usr/include/c++/8/cassert" 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/assert.h" 1 3 4
-40039: # 44 "/usr/include/c++/8/cassert" 2 3
-40039: # 31 "../../src/Threshold_Watcher_defs.hh" 2
-40039: # 39 "../../src/Threshold_Watcher_defs.hh"
-40039: template <typename Traits>
-40039: class Parma_Polyhedra_Library::Threshold_Watcher {
-40039: public:
-40039:   template <typename Flag_Base, typename Flag>
-40039:   Threshold_Watcher(const typename Traits::Delta& delta,
-40039:                     const Flag_Base* volatile& holder,
-40039:                     Flag& flag);
-40039: 
-40039:   Threshold_Watcher(const typename Traits::Delta& delta,
-40039:                     void (*function)());
-40039: 
-40039:   ~Threshold_Watcher();
-40039: 
-40039: private:
-40039:   typedef Implementation::Watchdog::Pending_List<Traits> TW_Pending_List;
-40039:   typedef Implementation::Watchdog::Handler TW_Handler;
-40039: 
-40039:   bool expired;
-40039:   const TW_Handler& handler;
-40039:   typename TW_Pending_List::iterator pending_position;
-40039: 
-40039: 
-40039:   Threshold_Watcher(const Threshold_Watcher&);
-40039:   Threshold_Watcher& operator=(const Threshold_Watcher&);
-40039: 
-40039:   struct Initialize {
-40039: 
-40039:     TW_Pending_List pending;
-40039:   };
-40039:   static Initialize init;
-40039: 
-40039: 
-40039:   static typename TW_Pending_List::iterator
-40039:   add_threshold(typename Traits::Threshold threshold,
-40039:                 const TW_Handler& handler,
-40039:                 bool& expired_flag);
-40039: 
-40039: 
-40039:   static typename TW_Pending_List::iterator
-40039:   remove_threshold(typename TW_Pending_List::iterator position);
-40039: 
-40039: 
-40039:   static void check();
-40039: 
-40039: };
-40039: 
-40039: 
-40039: 
-40039: template <typename Traits>
-40039: typename
-40039: Parma_Polyhedra_Library::Threshold_Watcher<Traits>::Initialize
-40039: Parma_Polyhedra_Library::Threshold_Watcher<Traits>::init;
-40039: 
-40039: # 1 "../../src/Threshold_Watcher_inlines.hh" 1
-40039: # 30 "../../src/Threshold_Watcher_inlines.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Traits>
-40039: template <typename Flag_Base, typename Flag>
-40039: Threshold_Watcher<Traits>
-40039: ::Threshold_Watcher(const typename Traits::Delta& delta,
-40039:                     const Flag_Base* volatile& holder,
-40039:                     Flag& flag)
-40039:   : expired(false),
-40039:     handler(*new
-40039:             Implementation::Watchdog::Handler_Flag<Flag_Base, Flag>(holder,
-40039:                                                                     flag)) {
-40039:   typename Traits::Threshold threshold;
-40039:   Traits::from_delta(threshold, delta);
-40039:   if (!Traits::less_than(Traits::get(), threshold)) {
-40039:     throw std::invalid_argument("Threshold_Watcher constructor called with a"
-40039:                                 " threshold already reached");
-40039:   }
-40039:   pending_position = add_threshold(threshold, handler, expired);
-40039: }
-40039: 
-40039: template <typename Traits>
-40039: inline
-40039: Threshold_Watcher<Traits>
-40039: ::Threshold_Watcher(const typename Traits::Delta& delta, void (*function)())
-40039:   : expired(false),
-40039:     handler(*new Implementation::Watchdog::Handler_Function(function)) {
-40039:   typename Traits::Threshold threshold;
-40039:   Traits::from_delta(threshold, delta);
-40039:   if (!Traits::less_than(Traits::get(), threshold)) {
-40039:     throw std::invalid_argument("Threshold_Watcher constructor called with a"
-40039:                                 " threshold already reached");
-40039:   }
-40039:   pending_position = add_threshold(threshold, handler, expired);
-40039: }
-40039: 
-40039: }
-40039: # 93 "../../src/Threshold_Watcher_defs.hh" 2
-40039: # 1 "../../src/Threshold_Watcher_templates.hh" 1
-40039: # 27 "../../src/Threshold_Watcher_templates.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: template <typename Traits>
-40039: typename Threshold_Watcher<Traits>::TW_Pending_List::iterator
-40039: Threshold_Watcher<Traits>::add_threshold(typename Traits::Threshold threshold,
-40039:                                          const TW_Handler& handler,
-40039:                                          bool& expired_flag) {
-40039:   Traits::check_function = Threshold_Watcher::check;
-40039:   return init.pending.insert(threshold, handler, expired_flag);
-40039: }
-40039: 
-40039: template <typename Traits>
-40039: typename Threshold_Watcher<Traits>::TW_Pending_List::iterator
-40039: Threshold_Watcher<Traits>
-40039: ::remove_threshold(typename TW_Pending_List::iterator position) {
-40039:   typename TW_Pending_List::iterator i = init.pending.erase(position);
-40039:   if (init.pending.empty()) {
-40039:     Traits::check_function = 0;
-40039:   }
-40039:   return i;
-40039: }
-40039: 
-40039: template <typename Traits>
-40039: Threshold_Watcher<Traits>::~Threshold_Watcher() {
-40039:   if (!expired) {
-40039:     remove_threshold(pending_position);
-40039:   }
-40039:   delete &handler;
-40039: }
-40039: 
-40039: template <typename Traits>
-40039: void
-40039: Threshold_Watcher<Traits>::check() {
-40039:   typename TW_Pending_List::iterator i = init.pending.begin();
-40039:   
-40039: # 61 "../../src/Threshold_Watcher_templates.hh" 3 4
-40039:  (static_cast<void> (0))
-40039: # 61 "../../src/Threshold_Watcher_templates.hh"
-40039:                                 ;
-40039:   const typename Traits::Threshold& current = Traits::get();
-40039:   while (!Traits::less_than(current, i->deadline())) {
-40039:     i->handler().act();
-40039:     i->expired_flag() = true;
-40039:     i = remove_threshold(i);
-40039:     if (i == init.pending.end()) {
-40039:       break;
-40039:     }
-40039:   }
-40039: }
-40039: 
-40039: }
-40039: # 94 "../../src/Threshold_Watcher_defs.hh" 2
-40039: # 31 "../../src/ppl_include_files.hh" 2
-40039: # 39 "../../src/ppl_header.hh" 2
-40039: # 114 "../../src/ppl_header.hh"
-40039: # 1 "/usr/include/c++/8/cassert" 1 3
-40039: # 41 "/usr/include/c++/8/cassert" 3
-40039:        
-40039: # 42 "/usr/include/c++/8/cassert" 3
-40039: 
-40039: 
-40039: # 1 "/usr/include/assert.h" 1 3 4
-40039: # 44 "/usr/include/c++/8/cassert" 2 3
-40039: # 115 "../../src/ppl_header.hh" 2
-40039: # 28 "../../tests/ppl_test.hh" 2
-40039: # 1 "../../tests/Random_Number_Generator_defs.hh" 1
-40039: # 27 "../../tests/Random_Number_Generator_defs.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: class Random_Number_Generator {
-40039: public:
-40039:   Random_Number_Generator();
-40039: 
-40039:   explicit Random_Number_Generator(unsigned long seed);
-40039: 
-40039:   template <typename T>
-40039:   void get(T& x, unsigned int info);
-40039: 
-40039: private:
-40039:   gmp_randclass rand;
-40039:   unsigned int max_bits;
-40039: };
-40039: 
-40039: }
-40039: 
-40039: # 1 "../../tests/Random_Number_Generator_inlines.hh" 1
-40039: # 27 "../../tests/Random_Number_Generator_inlines.hh"
-40039: # 1 "/usr/include/c++/8/ctime" 1 3
-40039: # 39 "/usr/include/c++/8/ctime" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/ctime" 3
-40039: # 28 "../../tests/Random_Number_Generator_inlines.hh" 2
-40039: 
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Implementation {
-40039: namespace Random_Numbers {
-40039: 
-40039: template <typename T>
-40039: class Random_Number_Generator_Aux {
-40039: public:
-40039:   Random_Number_Generator_Aux(unsigned int max_bits) {
-40039:     if (std::numeric_limits<T>::is_bounded) {
-40039:       assign_r(zmin, std::numeric_limits<T>::min(), ROUND_NOT_NEEDED);
-40039:       assign_r(zrange, std::numeric_limits<T>::max(), ROUND_NOT_NEEDED);
-40039:       zrange -= zmin;
-40039:       ++zrange;
-40039:     }
-40039:     else if (std::numeric_limits<T>::is_signed) {
-40039:       zmin = 1;
-40039:       zmin <<= (max_bits - 1);
-40039:       zmin = -zmin;
-40039:     }
-40039:     else {
-40039:       assign_r(zmin, std::numeric_limits<T>::min(), ROUND_NOT_NEEDED);
-40039:     }
-40039:   }
-40039:   mpz_class zmin;
-40039:   mpz_class zrange;
-40039: };
-40039: 
-40039: }
-40039: }
-40039: 
-40039: inline
-40039: Random_Number_Generator::Random_Number_Generator()
-40039:   : rand(
-40039: # 62 "../../tests/Random_Number_Generator_inlines.hh" 3 4
-40039:         __gmp_randinit_default
-40039: # 62 "../../tests/Random_Number_Generator_inlines.hh"
-40039:                             ), max_bits(512) {
-40039: 
-40039:   rand.seed((unsigned long) time(0));
-40039: }
-40039: 
-40039: inline
-40039: Random_Number_Generator::Random_Number_Generator(const unsigned long seed)
-40039:   : rand(
-40039: # 69 "../../tests/Random_Number_Generator_inlines.hh" 3 4
-40039:         __gmp_randinit_default
-40039: # 69 "../../tests/Random_Number_Generator_inlines.hh"
-40039:                             ), max_bits(512) {
-40039: 
-40039:   rand.seed(seed);
-40039: }
-40039: 
-40039: template <typename T>
-40039: inline void
-40039: Random_Number_Generator::get(T& x, unsigned int) {
-40039:   using Implementation::Random_Numbers::Random_Number_Generator_Aux;
-40039:   static Random_Number_Generator_Aux<T> aux(max_bits);
-40039:   mpz_class n;
-40039:   if (std::numeric_limits<T>::is_bounded) {
-40039:     n = rand.get_z_range(aux.zrange);
-40039:   }
-40039:   else {
-40039:     n = rand.get_z_bits(max_bits);
-40039:   }
-40039:   n += aux.zmin;
-40039:   assign_r(x, n, ROUND_NOT_NEEDED);
-40039: }
-40039: 
-40039: }
-40039: # 46 "../../tests/Random_Number_Generator_defs.hh" 2
-40039: # 29 "../../tests/ppl_test.hh" 2
-40039: # 38 "../../tests/ppl_test.hh"
-40039: # 1 "/usr/include/c++/8/cstdlib" 1 3
-40039: # 39 "/usr/include/c++/8/cstdlib" 3
-40039:        
-40039: # 40 "/usr/include/c++/8/cstdlib" 3
-40039: # 39 "../../tests/ppl_test.hh" 2
-40039: # 352 "../../tests/ppl_test.hh"
-40039: namespace Parma_Polyhedra_Library {
-40039: 
-40039: namespace Test {
-40039: 
-40039: static bool
-40039: check_noisy(const char*
-40039: 
-40039:             environment_variable
-40039: 
-40039: ) {
-40039: 
-40039:   return getenv(environment_variable) != 0;
-40039: # 375 "../../tests/ppl_test.hh"
-40039: }
-40039: 
-40039: template<typename CharT, typename Traits = std::char_traits<CharT> >
-40039: class nullbuf : public std::basic_streambuf<CharT, Traits> {
-40039: protected:
-40039:   virtual typename Traits::int_type overflow(typename Traits::int_type c) {
-40039:     return Traits::not_eof(c);
-40039:   }
-40039: };
-40039: 
-40039: template <class CharT, class Traits = std::char_traits<CharT> >
-40039: class noisy_ostream : public std::basic_ostream<CharT, Traits> {
-40039: private:
-40039:   nullbuf<CharT, Traits> black_hole;
-40039: 
-40039: public:
-40039:   noisy_ostream(const std::basic_ostream<CharT, Traits>& os,
-40039:                 const char* environment_variable)
-40039:     : std::basic_ostream<CharT, Traits>(check_noisy(environment_variable)
-40039:                                         ? os.rdbuf()
-40039:                                         : &black_hole) {
-40039:   }
-40039: };
-40039: 
-40039: static noisy_ostream<char> nout(std::cout, "PPL_NOISY_TESTS");
-40039: static noisy_ostream<char> vnout(std::cout, "PPL_VERY_NOISY_TESTS");
-40039: 
-40039: void
-40039: set_handlers();
-40039: 
-40039: 
-40039: typedef long double long_double;
-40039: 
-40039: struct Floating_Real_Open_Interval_Info_Policy {
-40039:   enum const_bool_value_store_special { store_special = (false) };
-40039:   enum const_bool_value_store_open { store_open = (true) };
-40039:   enum const_bool_value_cache_empty { cache_empty = (true) };
-40039:   enum const_bool_value_cache_singleton { cache_singleton = (true) };
-40039:   enum const_bool_value_cache_normalized { cache_normalized = (false) };
-40039:   enum anonymous_enum_next_bit { next_bit = (0) };
-40039:   enum const_bool_value_may_be_empty { may_be_empty = (true) };
-40039:   enum const_bool_value_may_contain_infinity { may_contain_infinity = (false) };
-40039:   enum const_bool_value_check_empty_result { check_empty_result = (false) };
-40039:   enum const_bool_value_check_inexact { check_inexact = (false) };
-40039: };
-40039: 
-40039: struct Floating_Real_Closed_Interval_Info_Policy {
-40039:   enum const_bool_value_store_special { store_special = (false) };
-40039:   enum const_bool_value_store_open { store_open = (false) };
-40039:   enum const_bool_value_cache_empty { cache_empty = (false) };
-40039:   enum const_bool_value_cache_singleton { cache_singleton = (true) };
-40039:   enum const_bool_value_cache_normalized { cache_normalized = (false) };
-40039:   enum anonymous_enum_next_bit { next_bit = (0) };
-40039:   enum const_bool_value_may_be_empty { may_be_empty = (false) };
-40039:   enum const_bool_value_may_contain_infinity { may_contain_infinity = (false) };
-40039:   enum const_bool_value_check_empty_result { check_empty_result = (false) };
-40039:   enum const_bool_value_check_inexact { check_inexact = (false) };
-40039: };
-40039: 
-40039: typedef Interval_Info_Bitset<unsigned int,
-40039:                              Floating_Real_Open_Interval_Info_Policy> Floating_Real_Open_Interval_Info;
-40039: 
-40039: typedef Interval<float, Floating_Real_Open_Interval_Info> fl_r_oc;
-40039: typedef Interval<double, Floating_Real_Open_Interval_Info> db_r_oc;
-40039: typedef Interval<long double, Floating_Real_Open_Interval_Info> ld_r_oc;
-40039: 
-40039: struct Rational_Real_Open_Interval_Info_Policy {
-40039:   enum const_bool_value_store_special { store_special = (true) };
-40039:   enum const_bool_value_store_open { store_open = (true) };
-40039:   enum const_bool_value_cache_empty { cache_empty = (true) };
-40039:   enum const_bool_value_cache_singleton { cache_singleton = (true) };
-40039:   enum const_bool_value_cache_normalized { cache_normalized = (false) };
-40039:   enum anonymous_enum_next_bit { next_bit = (0) };
-40039:   enum const_bool_value_may_be_empty { may_be_empty = (true) };
-40039:   enum const_bool_value_may_contain_infinity { may_contain_infinity = (false) };
-40039:   enum const_bool_value_check_empty_result { check_empty_result = (false) };
-40039:   enum const_bool_value_check_inexact { check_inexact = (false) };
-40039: };
-40039: 
-40039: typedef Interval_Info_Bitset<unsigned int,
-40039:                              Rational_Real_Open_Interval_Info_Policy> Rational_Real_Open_Interval_Info;
-40039: 
-40039: typedef Interval<mpq_class, Rational_Real_Open_Interval_Info> rt_r_oc;
-40039: 
-40039: 
-40039: typedef Box<rt_r_oc> TBox;
-40039: 
-40039: 
-40039: typedef BD_Shape<mpq_class> TBD_Shape;
-40039: 
-40039: 
-40039: typedef Octagonal_Shape<mpq_class> TOctagonal_Shape;
-40039: # 499 "../../tests/ppl_test.hh"
-40039: template <typename Shape>
-40039: inline bool
-40039: has_exact_coefficient_type(const Shape&) {
-40039:   return std::numeric_limits<typename Shape::coefficient_type>::is_exact;
-40039: }
-40039: 
-40039: template <typename Interval>
-40039: inline bool
-40039: has_exact_coefficient_type(const Box<Interval>&) {
-40039:   return std::numeric_limits<typename Interval::boundary_type>::is_exact;
-40039: }
-40039: 
-40039: bool
-40039: check_distance(const Checked_Number<mpq_class, Extended_Number_Policy>& d,
-40039:                const char* max_d_s, const char* d_name);
-40039: 
-40039: template <typename T>
-40039: bool
-40039: check_result_i(const BD_Shape<T>& computed_result,
-40039:                const BD_Shape<mpq_class>& known_result,
-40039:                const char* max_r_d_s,
-40039:                const char* max_e_d_s,
-40039:                const char* max_l_d_s) {
-40039:   BD_Shape<mpq_class> q_computed_result(computed_result);
-40039: 
-40039:   if (max_r_d_s == 0 && max_e_d_s == 0 && max_l_d_s == 0) {
-40039:     if (q_computed_result != known_result) {
-40039:       using IO_Operators::operator<<;
-40039:       nout << "Equality does not hold:"
-40039:            << "\ncomputed result is\n"
-40039:            << q_computed_result
-40039:            << "\nknown result is\n"
-40039:            << known_result
-40039:            << std::endl;
-40039:       return false;
-40039:     }
-40039:     else
-40039:       return true;
-40039:   }
-40039: 
-40039:   if (!q_computed_result.contains(known_result)) {
-40039:     using IO_Operators::operator<<;
-40039:     nout << "Containment does not hold:"
-40039:          << "\ncomputed result is\n"
-40039:          << q_computed_result
-40039:          << "\nknown result is\n"
-40039:          << known_result
-40039:          << std::endl;
-40039:     return false;
-40039:   }
-40039: 
-40039:   Checked_Number<mpq_class, Extended_Number_Policy> r_d;
-40039:   rectilinear_distance_assign(r_d, known_result, q_computed_result, ROUND_UP);
-40039:   Checked_Number<mpq_class, Extended_Number_Policy> e_d;
-40039:   euclidean_distance_assign(e_d, known_result, q_computed_result, ROUND_UP);
-40039:   Checked_Number<mpq_class, Extended_Number_Policy> l_d;
-40039:   l_infinity_distance_assign(l_d, known_result, q_computed_result, ROUND_UP);
-40039:   bool ok_r = check_distance(r_d, max_r_d_s, "rectilinear");
-40039:   bool ok_e = check_distance(e_d, max_e_d_s, "euclidean");
-40039:   bool ok_l = check_distance(l_d, max_l_d_s, "l_infinity");
-40039:   bool ok = ok_r && ok_e && ok_l;
-40039:   if (!ok) {
-40039:     using IO_Operators::operator<<;
-40039:     nout << "Computed result is\n"
-40039:          << q_computed_result
-40039:          << "\nknown result is\n"
-40039:          << known_result
-40039:          << std::endl;
-40039:   }
-40039:   return ok;
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: check_result(const BD_Shape<T>& computed_result,
-40039:              const BD_Shape<mpq_class>& known_result,
-40039:              const char* max_r_d_s,
-40039:              const char* max_e_d_s,
-40039:              const char* max_l_d_s) {
-40039:   return std::numeric_limits<T>::is_integer
-40039:     ? check_result_i(computed_result, known_result,
-40039:                      "+inf", "+inf", "+inf")
-40039:     : check_result_i(computed_result, known_result,
-40039:                      max_r_d_s, max_e_d_s, max_l_d_s);
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: check_result(const BD_Shape<T>& computed_result,
-40039:              const BD_Shape<T>& known_result) {
-40039:   if (computed_result == known_result)
-40039:     return true;
-40039:   else {
-40039:     using IO_Operators::operator<<;
-40039:     nout << "Equality does not hold:"
-40039:          << "\ncomputed result is\n"
-40039:          << computed_result
-40039:          << "\nknown result is\n"
-40039:          << known_result
-40039:          << std::endl;
-40039:     return false;
-40039:   }
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: check_result(const BD_Shape<T>& computed_result,
-40039:              const BD_Shape<mpq_class>& known_result) {
-40039:   return std::numeric_limits<T>::is_integer
-40039:     ? check_result_i(computed_result, known_result, "+inf", "+inf", "+inf")
-40039:     : check_result_i(computed_result, known_result, 0, 0, 0);
-40039: }
-40039: 
-40039: bool
-40039: check_result(const BD_Shape<mpq_class>& computed_result,
-40039:              const BD_Shape<mpq_class>& known_result);
-40039: 
-40039: template <typename T>
-40039: bool
-40039: check_result_i(const Octagonal_Shape<T>& computed_result,
-40039:                const Octagonal_Shape<mpq_class>& known_result,
-40039:                const char* max_r_d_s,
-40039:                const char* max_e_d_s,
-40039:                const char* max_l_d_s) {
-40039:   Octagonal_Shape<mpq_class> q_computed_result(computed_result);
-40039: 
-40039:   if (max_r_d_s == 0 && max_e_d_s == 0 && max_l_d_s == 0) {
-40039:     if (q_computed_result != known_result) {
-40039:       using IO_Operators::operator<<;
-40039:       nout << "Equality does not hold:"
-40039:            << "\ncomputed result is\n"
-40039:            << q_computed_result
-40039:            << "\nknown result is\n"
-40039:            << known_result
-40039:            << std::endl;
-40039:       return false;
-40039:     }
-40039:     else
-40039:       return true;
-40039:   }
-40039: 
-40039:   if (!q_computed_result.contains(known_result)) {
-40039:     using IO_Operators::operator<<;
-40039:     nout << "Containment does not hold:"
-40039:          << "\ncomputed result is\n"
-40039:          << q_computed_result
-40039:          << "\nknown result is\n"
-40039:          << known_result
-40039:          << std::endl;
-40039:     return false;
-40039:   }
-40039: 
-40039:   Checked_Number<mpq_class, Extended_Number_Policy> r_d;
-40039:   rectilinear_distance_assign(r_d, known_result, q_computed_result, ROUND_UP);
-40039:   Checked_Number<mpq_class, Extended_Number_Policy> e_d;
-40039:   euclidean_distance_assign(e_d, known_result, q_computed_result, ROUND_UP);
-40039:   Checked_Number<mpq_class, Extended_Number_Policy> l_d;
-40039:   l_infinity_distance_assign(l_d, known_result, q_computed_result, ROUND_UP);
-40039:   bool ok_r = check_distance(r_d, max_r_d_s, "rectilinear");
-40039:   bool ok_e = check_distance(e_d, max_e_d_s, "euclidean");
-40039:   bool ok_l = check_distance(l_d, max_l_d_s, "l_infinity");
-40039:   bool ok = ok_r && ok_e && ok_l;
-40039:   if (!ok) {
-40039:     using IO_Operators::operator<<;
-40039:     nout << "Computed result is\n"
-40039:          << q_computed_result
-40039:          << "\nknown result is\n"
-40039:          << known_result
-40039:          << std::endl;
-40039:   }
-40039:   return ok;
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: check_result(const Octagonal_Shape<T>& computed_result,
-40039:              const Octagonal_Shape<mpq_class>& known_result,
-40039:              const char* max_r_d_s,
-40039:              const char* max_e_d_s,
-40039:              const char* max_l_d_s) {
-40039:   return std::numeric_limits<T>::is_integer
-40039:     ? check_result_i(computed_result, known_result,
-40039:                      "+inf", "+inf", "+inf")
-40039:     : check_result_i(computed_result, known_result,
-40039:                      max_r_d_s, max_e_d_s, max_l_d_s);
-40039: }
-40039: 
-40039: template <>
-40039: inline bool
-40039: check_result(const Octagonal_Shape<mpq_class>& computed_result,
-40039:              const Octagonal_Shape<mpq_class>& known_result,
-40039:              const char*,
-40039:              const char*,
-40039:              const char*) {
-40039:   return check_result_i(computed_result, known_result,
-40039:                         0, 0, 0);
-40039: }
-40039: 
-40039: template <typename T>
-40039: bool
-40039: check_result(const Octagonal_Shape<T>& computed_result,
-40039:              const Octagonal_Shape<mpq_class>& known_result) {
-40039:   return std::numeric_limits<T>::is_integer
-40039:     ? check_result_i(computed_result, known_result, "+inf", "+inf", "+inf")
-40039:     : check_result_i(computed_result, known_result, 0, 0, 0);
-40039: }
-40039: 
-40039: 
-40039: template <typename Interval>
-40039: bool
-40039: check_result_i(const Box<Interval>& computed_result,
-40039:                const Rational_Box& known_result,
-40039:                const char* max_r_d_s,
-40039:                const char* max_e_d_s,
-40039:                const char* max_l_d_s) {
-40039:   Rational_Box q_computed_result(computed_result);
-40039: 
-40039:   if (max_r_d_s == 0 && max_e_d_s == 0 && max_l_d_s == 0) {
-40039:     if (q_computed_result != known_result) {
-40039:       using IO_Operators::operator<<;
-40039:       nout << "Equality does not hold:"
-40039:            << "\ncomputed result is\n"
-40039:            << q_computed_result
-40039:            << "\nknown result is\n"
-40039:            << known_result
-40039:            << std::endl;
-40039:       return false;
-40039:     }
-40039:     else
-40039:       return true;
-40039:   }
-40039: 
-40039:   if (!q_computed_result.contains(known_result)) {
-40039:     using IO_Operators::operator<<;
-40039:     nout << "Containment does not hold:"
-40039:          << "\ncomputed result is\n"
-40039:          << q_computed_result
-40039:          << "\nknown result is\n"
-40039:          << known_result
-40039:          << std::endl;
-40039:     nout << "Individual dimensions where containment does not hold"
-40039:          << "\n(Variable: computed-result known-result):\n";
-40039:     for (dimension_type i = 0; i < computed_result.space_dimension(); ++i) {
-40039:       if (!q_computed_result.get_interval(Variable(i))
-40039:           .contains(known_result.get_interval(Variable(i)))) {
-40039:         using IO_Operators::operator<<;
-40039:         nout << Variable(i) << ": "
-40039:              << q_computed_result.get_interval(Variable(i))
-40039:              << ' '
-40039:              << known_result.get_interval(Variable(i))
-40039:              << std::endl;
-40039:       }
-40039:     }
-40039:     return false;
-40039:   }
-40039: 
-40039:   Checked_Number<mpq_class, Extended_Number_Policy> r_d;
-40039:   rectilinear_distance_assign(r_d, known_result, q_computed_result, ROUND_UP);
-40039:   Checked_Number<mpq_class, Extended_Number_Policy> e_d;
-40039:   euclidean_distance_assign(e_d, known_result, q_computed_result, ROUND_UP);
-40039:   Checked_Number<mpq_class, Extended_Number_Policy> l_d;
-40039:   l_infinity_distance_assign(l_d, known_result, q_computed_result, ROUND_UP);
-40039:   bool ok_r = check_distance(r_d, max_r_d_s, "rectilinear");
-40039:   bool ok_e = check_distance(e_d, max_e_d_s, "euclidean");
-40039:   bool ok_l = check_distance(l_d, max_l_d_s, "l_infinity");
-40039:   bool ok = ok_r && ok_e && ok_l;
-40039:   if (!ok) {
-40039:     using IO_Operators::operator<<;
-40039:     nout << "Computed result is\n"
-40039:          << q_computed_result
-40039:          << "\nknown result is\n"
-40039:          << known_result
-40039:          << std::endl;
-40039:   }
-40039:   return ok;
-40039: }
-40039: 
-40039: template <typename Interval>
-40039: bool
-40039: check_result(const Box<Interval>& computed_result,
-40039:              const Rational_Box& known_result,
-40039:              const char* max_r_d_s,
-40039:              const char* max_e_d_s,
-40039:              const char* max_l_d_s) {
-40039:   return std::numeric_limits<typename Interval::boundary_type>::is_integer
-40039:     ? check_result_i(computed_result, known_result,
-40039:                      "+inf", "+inf", "+inf")
-40039:     : check_result_i(computed_result, known_result,
-40039:                      max_r_d_s, max_e_d_s, max_l_d_s);
-40039: }
-40039: 
-40039: template <typename Interval>
-40039: bool
-40039: check_result(const Box<Interval>& computed_result,
-40039:              const Box<Interval>& known_result) {
-40039:   if (computed_result == known_result)
-40039:     return true;
-40039:   else {
-40039:     using IO_Operators::operator<<;
-40039:     nout << "Equality does not hold:"
-40039:          << "\ncomputed result is\n"
-40039:          << computed_result
-40039:          << "\nknown result is\n"
-40039:          << known_result
-40039:          << std::endl;
-40039:     return false;
-40039:   }
-40039: }
-40039: 
-40039: template <typename Interval>
-40039: bool
-40039: check_result(const Box<Interval>& computed_result,
-40039:              const Rational_Box& known_result) {
-40039:   return std::numeric_limits<typename Interval::boundary_type>::is_integer
-40039:     ? check_result_i(computed_result, known_result, "+inf", "+inf", "+inf")
-40039:     : check_result_i(computed_result, known_result, 0, 0, 0);
-40039: }
-40039: 
-40039: bool
-40039: check_result(const Rational_Box& computed_result,
-40039:              const Rational_Box& known_result);
-40039: 
-40039: bool
-40039: check_result(const Generator& computed_result,
-40039:              const Generator& known_result,
-40039:              const char* max_r_d_s,
-40039:              const char* max_e_d_s,
-40039:              const char* max_l_d_s);
-40039: 
-40039: bool
-40039: check_result(const Checked_Number<mpq_class, Extended_Number_Policy>& computed,
-40039:              const Checked_Number<mpq_class, Extended_Number_Policy>& known,
-40039:              const char* max_r_d_s);
-40039: 
-40039: class FCAIBVP;
-40039: 
-40039: bool
-40039: operator==(const FCAIBVP& x, const FCAIBVP& y);
-40039: 
-40039: bool
-40039: operator!=(const FCAIBVP& x, const FCAIBVP& y);
-40039: 
-40039: std::ostream&
-40039: operator<<(std::ostream& s, const FCAIBVP& x);
-40039: 
-40039: 
-40039: 
-40039: 
-40039: 
-40039: class FCAIBVP {
-40039: private:
-40039:   typedef size_t dim_t;
-40039: 
-40039:   typedef std::set<dim_t> Set;
-40039: 
-40039:   Set set;
-40039: 
-40039: public:
-40039:   FCAIBVP();
-40039: 
-40039:   explicit FCAIBVP(const Variable x);
-40039: 
-40039:   explicit FCAIBVP(const Variables_Set& y);
-40039: 
-40039:   FCAIBVP(const FCAIBVP& y, unsigned offset);
-40039: 
-40039:   memory_size_type total_memory_in_bytes() const;
-40039: 
-40039:   memory_size_type external_memory_in_bytes() const;
-40039: 
-40039:   bool is_top() const;
-40039: 
-40039:   bool is_bottom() const;
-40039: 
-40039:   bool definitely_entails(const FCAIBVP& y) const;
-40039: 
-40039:   void upper_bound_assign(const FCAIBVP& y);
-40039: 
-40039:   void difference_assign(const FCAIBVP& y);
-40039: 
-40039:   void meet_assign(const FCAIBVP& y);
-40039: 
-40039:   void weakening_assign(const FCAIBVP& y);
-40039: 
-40039:   static bool has_nontrivial_weakening();
-40039: 
-40039:   bool OK() const;
-40039: 
-40039:   friend std::ostream&
-40039:   Parma_Polyhedra_Library::Test::operator<<(std::ostream& s,
-40039:                                             const FCAIBVP& x);
-40039: };
-40039: 
-40039: inline
-40039: FCAIBVP::FCAIBVP()
-40039:   : set() {
-40039: }
-40039: 
-40039: inline
-40039: FCAIBVP::FCAIBVP(const Variable x)
-40039:   : set() {
-40039:   set.insert(x.id());
-40039: }
-40039: 
-40039: inline
-40039: FCAIBVP::FCAIBVP(const Variables_Set& y)
-40039:   : set() {
-40039:   for (Variables_Set::const_iterator i = y.begin(),
-40039:          y_end = y.end(); i != y_end; ++i)
-40039:     set.insert(*i);
-40039: }
-40039: 
-40039: inline
-40039: FCAIBVP::FCAIBVP(const FCAIBVP& y, unsigned offset)
-40039:   : set() {
-40039:   for (Set::const_iterator i = y.set.begin(),
-40039:          y_set_end = y.set.end(); i != y_set_end; ++i)
-40039:     set.insert(*i + offset);
-40039: }
-40039: 
-40039: inline memory_size_type
-40039: FCAIBVP::total_memory_in_bytes() const {
-40039:   return 1;
-40039: }
-40039: 
-40039: inline bool
-40039: FCAIBVP::is_top() const {
-40039:   return set.empty();
-40039: }
-40039: 
-40039: inline bool
-40039: FCAIBVP::is_bottom() const {
-40039:   return false;
-40039: }
-40039: 
-40039: inline bool
-40039: FCAIBVP::definitely_entails(const FCAIBVP& y) const{
-40039:   const FCAIBVP& x = *this;
-40039:   return std::includes(x.set.begin(), x.set.end(),
-40039:                        y.set.begin(), y.set.end());
-40039: }
-40039: 
-40039: inline void
-40039: FCAIBVP::upper_bound_assign(const FCAIBVP& y) {
-40039:   FCAIBVP& x = *this;
-40039:   FCAIBVP z;
-40039:   std::set_intersection(x.set.begin(), x.set.end(),
-40039:                         y.set.begin(), y.set.end(),
-40039:                         std::inserter(z.set, z.set.begin()));
-40039:   using std::swap;
-40039:   swap(x, z);
-40039: }
-40039: 
-40039: inline void
-40039: FCAIBVP::difference_assign(const FCAIBVP& y) {
-40039:   FCAIBVP& x = *this;
-40039:   FCAIBVP z;
-40039:   std::set_difference(x.set.begin(), x.set.end(),
-40039:                       y.set.begin(), y.set.end(),
-40039:                       std::inserter(z.set, z.set.begin()));
-40039:   using std::swap;
-40039:   swap(x, z);
-40039: }
-40039: 
-40039: inline void
-40039: FCAIBVP::meet_assign(const FCAIBVP& y) {
-40039:   set.insert(y.set.begin(), y.set.end());
-40039: }
-40039: 
-40039: inline void
-40039: FCAIBVP::weakening_assign(const FCAIBVP& y) {
-40039:   difference_assign(y);
-40039: }
-40039: 
-40039: inline bool
-40039: FCAIBVP::has_nontrivial_weakening() {
-40039:   return true;
-40039: }
-40039: 
-40039: inline bool
-40039: FCAIBVP::OK() const {
-40039:   return true;
-40039: }
-40039: 
-40039: inline bool
-40039: operator==(const FCAIBVP& x, const FCAIBVP& y) {
-40039:   return x.definitely_entails(y) && y.definitely_entails(x);
-40039: }
-40039: 
-40039: inline bool
-40039: operator!=(const FCAIBVP& x, const FCAIBVP& y) {
-40039:   return !(x == y);
-40039: }
-40039: 
-40039: void
-40039: print_constraint(const Constraint& c,
-40039:                  const std::string& intro = "",
-40039:                  std::ostream& s = nout);
-40039: 
-40039: void
-40039: print_constraints(const Constraint_System& cs,
-40039:                   const std::string& intro = "",
-40039:                   std::ostream& s = nout);
-40039: 
-40039: void
-40039: print_constraints(const Polyhedron& ph,
-40039:                   const std::string& intro = "",
-40039:                   std::ostream& s = nout);
-40039: # 1015 "../../tests/ppl_test.hh"
-40039: template <typename Interval>
-40039: void
-40039: print_constraints(const Box<Interval>& box,
-40039:                   const std::string& intro = "",
-40039:                   std::ostream& s = nout) {
-40039:   if (!intro.empty())
-40039:     s << intro << std::endl;
-40039:   using IO_Operators::operator<<;
-40039:   s << box << std::endl;
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: print_constraints(const BD_Shape<T>& bd,
-40039:                   const std::string& intro = "",
-40039:                   std::ostream& s = nout) {
-40039:   if (!intro.empty())
-40039:     s << intro << std::endl;
-40039:   using IO_Operators::operator<<;
-40039:   s << bd << std::endl;
-40039: }
-40039: 
-40039: template <typename T>
-40039: void
-40039: print_constraints(const Octagonal_Shape<T>& oc,
-40039:                   const std::string& intro = "",
-40039:                   std::ostream& s = nout) {
-40039:   if (!intro.empty())
-40039:     s << intro << std::endl;
-40039:   using IO_Operators::operator<<;
-40039:   s << oc << std::endl;
-40039: }
-40039: 
-40039: template <typename PH>
-40039: void
-40039: print_constraints(const Pointset_Powerset<PH>& pps,
-40039:                   const std::string& intro = "",
-40039:                   std::ostream& s = nout) {
-40039:   if (!intro.empty())
-40039:     s << intro << std::endl;
-40039:   using IO_Operators::operator<<;
-40039:   s << pps << std::endl;
-40039: }
-40039: 
-40039: template <typename PH>
-40039: void
-40039: print_congruences(const Pointset_Powerset<PH>& pps,
-40039:                   const std::string& intro = "",
-40039:                   std::ostream& s = nout) {
-40039:   if (!intro.empty())
-40039:     s << intro << std::endl;
-40039:   using IO_Operators::operator<<;
-40039:   s << pps << std::endl;
-40039: }
-40039: # 1083 "../../tests/ppl_test.hh"
-40039: void
-40039: print_congruence(const Congruence& c,
-40039:                  const std::string& intro = "",
-40039:                  std::ostream& s = nout);
-40039: 
-40039: void
-40039: print_congruences(const Congruence_System& cgs,
-40039:                   const std::string& intro = "",
-40039:                   std::ostream& s = nout);
-40039: 
-40039: void
-40039: print_congruences(const Grid& gr,
-40039:                   const std::string& intro = "",
-40039:                   std::ostream& s = nout);
-40039: 
-40039: void
-40039: print_generator(const Generator& g,
-40039:                 const std::string& intro = "",
-40039:                 std::ostream& s = nout);
-40039: 
-40039: void
-40039: print_generator(const Grid_Generator& g,
-40039:                 const std::string& intro = "",
-40039:                 std::ostream& s = nout);
-40039: 
-40039: void
-40039: print_generators(const Generator_System& gs,
-40039:                  const std::string& intro = "",
-40039:                  std::ostream& s = nout);
-40039: 
-40039: void
-40039: print_generators(const Grid_Generator_System& gs,
-40039:                  const std::string& intro = "",
-40039:                  std::ostream& s = nout);
-40039: 
-40039: void
-40039: print_generators(const Polyhedron& ph,
-40039:                  const std::string& intro = "",
-40039:                  std::ostream& s = nout);
-40039: 
-40039: void
-40039: print_generators(const Grid& gr,
-40039:                  const std::string& intro = "",
-40039:                  std::ostream& s = nout);
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: void
-40039: print_constraints(const Partially_Reduced_Product<D1, D2, R>& pd,
-40039:                   const std::string& intro = "",
-40039:                   std::ostream& s = nout) {
-40039:   print_constraints(pd.constraints(), intro, s);
-40039: }
-40039: 
-40039: template <typename D1, typename D2, typename R>
-40039: void
-40039: print_congruences(const Partially_Reduced_Product<D1, D2, R>& pd,
-40039:                   const std::string& intro = "",
-40039:                   std::ostream& s = nout) {
-40039:   print_congruences(pd.congruences(), intro, s);
-40039: }
-40039: 
-40039: void
-40039: print_function(const Parma_Polyhedra_Library::Partial_Function& function,
-40039:                const std::string& intro = "",
-40039:                std::ostream& s = nout);
-40039: 
-40039: }
-40039: 
-40039: }
-40039: 
-40039: 
-40039: 
-40039: using namespace Parma_Polyhedra_Library;
-40039: using namespace Parma_Polyhedra_Library::Test;
-40039: using std::endl;
-40039: # 26 "equals1.cc" 2
-40039: 
-40039: namespace {
-40039: 
-40039: 
-40039: bool
-40039: test01() {
-40039:   Variable x(0);
-40039:   Pointset_Powerset<TBox> pps_box(1);
-40039:   Constraint_System cs;
-40039:   cs.insert(x >= 5);
-40039:   cs.insert(x <= 3);
-40039:   pps_box.add_constraints(cs);
-40039: 
-40039:   Pointset_Powerset<TBox> pps_box1(1, EMPTY);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ok = pps_box.geometrically_equals(pps_box1);
-40039:   bool ok1 = pps_box.geometrically_equals(pps_box1);
-40039: 
-40039:   return ok && ok1;
-40039: }
-40039: 
-40039: 
-40039: bool
-40039: test02() {
-40039:   Variable x(0);
-40039:   Pointset_Powerset<TBox> pps_box(1);
-40039:   Constraint_System cs;
-40039:   cs.insert(x >= 5);
-40039:   cs.insert(x >= 8);
-40039:   pps_box.add_constraints(cs);
-40039: 
-40039:   Pointset_Powerset<TBox> pps_box1(1);
-40039:   cs.clear();
-40039:   cs.insert(x >= 8);
-40039:   pps_box1.add_constraints(cs);
-40039: 
-40039: 
-40039: 
-40039: 
-40039:   bool ok = pps_box.geometrically_equals(pps_box1);
-40039:   bool ok1 = pps_box.geometrically_equals(pps_box1);
-40039: 
-40039:   return ok && ok1;
-40039: }
-40039: 
-40039: }
-40039: 
-40039: int main() try { set_handlers(); bool succeeded = false; bool overflow = false; (void) overflow; std::list<std::string> failed_tests; std::list<std::string> unexpectedly_succeeded_tests;
-40039:   nout << "\n=== " "test01" " ===" << std::endl; try { overflow = false; succeeded = test01(); } catch (const std::overflow_error& e) { nout << "arithmetic overflow (" << e.what() << ")" << std::endl; overflow = true; succeeded = false; } catch (const std::exception& e) { nout << "std::exception caught: " << e.what() << " (type == " << typeid(e).name() << ")" << std::endl; succeeded = false; } catch (...) { nout << "unknown exception caught" << std::endl; succeeded = false; }; if (!succeeded) failed_tests.push_back("test01");;
-40039:   nout << "\n=== " "test02" " ===" << std::endl; try { overflow = false; succeeded = test02(); } catch (const std::overflow_error& e) { nout << "arithmetic overflow (" << e.what() << ")" << std::endl; overflow = true; succeeded = false; } catch (const std::exception& e) { nout << "std::exception caught: " << e.what() << " (type == " << typeid(e).name() << ")" << std::endl; succeeded = false; } catch (...) { nout << "unknown exception caught" << std::endl; succeeded = false; }; if (!succeeded) failed_tests.push_back("test02");;
-40039: if (!failed_tests.empty()) { std::cerr << "tests failed: "; std::copy(failed_tests.begin(), failed_tests.end(), std::ostream_iterator<std::string>(std::cerr, " ")); std::cerr << std::endl; return 1; } if (!unexpectedly_succeeded_tests.empty()) { std::cerr << "tests unexpectedly succeeded: "; std::copy(unexpectedly_succeeded_tests.begin(), unexpectedly_succeeded_tests.end(), std::ostream_iterator<std::string>(std::cerr, " ")); std::cerr << std::endl; return 1; } return 0; } catch (const std::overflow_error& e) { std::cerr << "arithmetic overflow (" << e.what() << ")" << std::endl; exit(1); } catch (const std::exception& e) { std::cerr << "std::exception caught: " << e.what() << " (type == " << typeid(e).name() << ")" << std::endl; exit(1); }
+16535: // Target: x86_64-linux-gnu
+16535: // Configured with: ../src/configure -v --with-pkgversion='Debian 8.3.0-6' --with-bugurl=file:///usr/share/doc/gcc-8/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-8 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
+16535: // Thread model: posix
+16535: // gcc version 8.3.0 (Debian 8.3.0-6) 
+16535: // 
+16535: // In file included from ../../src/CO_Tree_defs.hh:1557,
+16535: //                  from ../../src/Sparse_Row_defs.hh:29,
+16535: //                  from ../../src/Linear_Expression_Impl_defs.hh:33,
+16535: //                  from ../../src/ppl_include_files.hh:8,
+16535: //                  from ../../src/ppl_header.hh:38,
+16535: //                  from ../../tests/ppl_test.hh:27,
+16535: //                  from equals1.cc:25:
+16535: // ../../src/CO_Tree_inlines.hh: In static member function 'static void Parma_Polyhedra_Library::CO_Tree::move_data_element(Parma_Polyhedra_Library::CO_Tree::data_type&, Parma_Polyhedra_Library::CO_Tree::data_type&)':
+16535: // ../../src/CO_Tree_inlines.hh:354:44: warning: 'void* memcpy(void*, const void*, size_t)' writing to an object of type 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
+16535: //    std::memcpy(&to, &from, sizeof(data_type));
+16535: //                                             ^
+16535: // In file included from ../../src/mp_std_bits_defs.hh:28,
+16535: //                  from ../../src/checked_defs.hh:27,
+16535: //                  from ../../src/Checked_Number_defs.hh:28,
+16535: //                  from ../../src/checked_numeric_limits.hh:27,
+16535: //                  from ../../src/ppl_include_files.hh:3,
+16535: //                  from ../../src/ppl_header.hh:38,
+16535: //                  from ../../tests/ppl_test.hh:27,
+16535: //                  from equals1.cc:25:
+16535: // /usr/include/gmpxx.h:1429:7: note: 'Parma_Polyhedra_Library::CO_Tree::data_type' {aka 'class __gmp_expr<__mpz_struct [1], __mpz_struct [1]>'} declared here
+16535: //  class __gmp_expr<mpz_t, mpz_t>
+16535: //        ^~~~~~~~~~~~~~~~~~~~~~~~
+16535: // In file included from ../../src/Linear_System_templates.hh:30,
+16535: //                  from ../../src/Linear_System_defs.hh:580,
+16535: //                  from ../../src/Constraint_System_defs.hh:29,
+16535: //                  from ../../src/Box_inlines.hh:28,
+16535: //                  from ../../src/Box_defs.hh:2285,
+16535: //                  from ../../src/Linear_Form_templates.hh:29,
+16535: //                  from ../../src/ppl_include_files.hh:9,
+16535: //                  from ../../src/ppl_header.hh:38,
+16535: //                  from ../../tests/ppl_test.hh:27,
+16535: //                  from equals1.cc:25:
+16535: // ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Constraint&)':
+16535: // ../../src/Scalar_Products_inlines.hh:129:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+16535: //             ? static_cast<SPS_type>(&Scalar_Products::sign)
+16535: //                                                           ^
+16535: // ../../src/Scalar_Products_inlines.hh:130:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+16535: //             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+16535: //                                                                   ^
+16535: // ../../src/Scalar_Products_inlines.hh: In constructor 'Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign::Topology_Adjusted_Scalar_Product_Sign(const Parma_Polyhedra_Library::Generator&)':
+16535: // ../../src/Scalar_Products_inlines.hh:137:58: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+16535: //             ? static_cast<SPS_type>(&Scalar_Products::sign)
+16535: //                                                           ^
+16535: // ../../src/Scalar_Products_inlines.hh:138:66: warning: type qualifiers ignored on cast result type [-Wignored-qualifiers]
+16535: //             : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+16535: //                                                                   ^
+16535: // In file included from ../../src/Pointset_Powerset_defs.hh:1454,
+16535: //                  from ../../src/algorithms.hh:28,
+16535: //                  from ../../src/ppl_include_files.hh:18,
+16535: //                  from ../../src/ppl_header.hh:38,
+16535: //                  from ../../tests/ppl_test.hh:27,
+16535: //                  from equals1.cc:25:
+16535: // ../../src/Pointset_Powerset_templates.hh: In instantiation of 'Parma_Polyhedra_Library::Pointset_Powerset<PSET>::Pointset_Powerset(const Parma_Polyhedra_Library::Pointset_Powerset<QH>&, Parma_Polyhedra_Library::Complexity_Class) [with QH = Parma_Polyhedra_Library::Box<Parma_Polyhedra_Library::Interval<__gmp_expr<__mpq_struct [1], __mpq_struct [1]>, Parma_Polyhedra_Library::Interval_Info_Bitset<unsigned int, Parma_Polyhedra_Library::Test::Rational_Real_Open_Interval_Info_Policy> > >; PSET = Parma_Polyhedra_Library::NNC_Polyhedron]':
+16535: // ../../src/Pointset_Powerset_inlines.hh:262:43:   required from 'bool Parma_Polyhedra_Library::Pointset_Powerset<PSET>::geometrically_equals(const Parma_Polyhedra_Library::Pointset_Powerset<PSET>&) const [with PSET = Parma_Polyhedra_Library::Box<Parma_Polyhedra_Library::Interval<__gmp_expr<__mpq_struct [1], __mpq_struct [1]>, Parma_Polyhedra_Library::Interval_Info_Bitset<unsigned int, Parma_Polyhedra_Library::Test::Rational_Real_Open_Interval_Info_Policy> > >]'
+16535: // equals1.cc:44:50:   required from here
+16535: // ../../src/Pointset_Powerset_templates.hh:66:29: internal compiler error: in type_dependent_expression_p, at cp/pt.c:25195
+16535: //           y_end = y.end(); i != y_end; ++i) {
+16535: //                            ~~^~~~~~~~
+16535: // Please submit a full bug report,
+16535: // with preprocessed source if appropriate.
+16535: // See <file:///usr/share/doc/gcc-8/README.Bugs> for instructions.
+16535: 
+16535: // /usr/lib/gcc/x86_64-linux-gnu/8/cc1plus -quiet -I . -I ../.. -I ../../src -I ../../src -I ../../tests -I ../../utils -imultiarch x86_64-linux-gnu -D_GNU_SOURCE -D HAVE_CONFIG_H -D NDEBUG=1 -D _FORTIFY_SOURCE=2 equals1.cc -quiet -dumpbase equals1.cc -mtune=generic -march=x86-64 -auxbase-strip equals1.o -g -g -g -O2 -O2 -Wdate-time -Wformat=1 -Werror=format-security -Wextra -Wall -frounding-math -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -fpermissive -o - -frandom-seed=0 -fdump-noaddr
+16535: 
+16535: # 1 "equals1.cc"
+16535: # 1 "/build/ppl-1.2/tests/Powerset//"
+16535: # 1 "<built-in>"
+16535: # 1 "<command-line>"
+16535: # 1 "/usr/include/stdc-predef.h" 1 3 4
+16535: # 1 "<command-line>" 2
+16535: # 1 "equals1.cc"
+16535: # 25 "equals1.cc"
+16535: # 1 "../../tests/ppl_test.hh" 1
+16535: # 27 "../../tests/ppl_test.hh"
+16535: # 1 "../../src/ppl_header.hh" 1
+16535: # 36 "../../src/ppl_header.hh"
+16535: # 1 "../../ppl-config.h" 1
+16535: # 402 "../../ppl-config.h"
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stdint.h" 1 3 4
+16535: # 9 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stdint.h" 3 4
+16535: # 1 "/usr/include/stdint.h" 1 3 4
+16535: # 26 "/usr/include/stdint.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 1 3 4
+16535: # 33 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 3 4
+16535: # 1 "/usr/include/features.h" 1 3 4
+16535: # 424 "/usr/include/features.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 1 3 4
+16535: # 442 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
+16535: # 443 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/long-double.h" 1 3 4
+16535: # 444 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4
+16535: # 425 "/usr/include/features.h" 2 3 4
+16535: # 448 "/usr/include/features.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 1 3 4
+16535: # 10 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/gnu/stubs-64.h" 1 3 4
+16535: # 11 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 2 3 4
+16535: # 449 "/usr/include/features.h" 2 3 4
+16535: # 34 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 2 3 4
+16535: # 27 "/usr/include/stdint.h" 2 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types.h" 1 3 4
+16535: # 27 "/usr/include/x86_64-linux-gnu/bits/types.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
+16535: # 28 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: # 30 "/usr/include/x86_64-linux-gnu/bits/types.h" 3 4
+16535: typedef unsigned char __u_char;
+16535: typedef unsigned short int __u_short;
+16535: typedef unsigned int __u_int;
+16535: typedef unsigned long int __u_long;
+16535: 
+16535: 
+16535: typedef signed char __int8_t;
+16535: typedef unsigned char __uint8_t;
+16535: typedef signed short int __int16_t;
+16535: typedef unsigned short int __uint16_t;
+16535: typedef signed int __int32_t;
+16535: typedef unsigned int __uint32_t;
+16535: 
+16535: typedef signed long int __int64_t;
+16535: typedef unsigned long int __uint64_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __int8_t __int_least8_t;
+16535: typedef __uint8_t __uint_least8_t;
+16535: typedef __int16_t __int_least16_t;
+16535: typedef __uint16_t __uint_least16_t;
+16535: typedef __int32_t __int_least32_t;
+16535: typedef __uint32_t __uint_least32_t;
+16535: typedef __int64_t __int_least64_t;
+16535: typedef __uint64_t __uint_least64_t;
+16535: 
+16535: 
+16535: 
+16535: typedef long int __quad_t;
+16535: typedef unsigned long int __u_quad_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef long int __intmax_t;
+16535: typedef unsigned long int __uintmax_t;
+16535: # 140 "/usr/include/x86_64-linux-gnu/bits/types.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/typesizes.h" 1 3 4
+16535: # 141 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4
+16535: 
+16535: 
+16535: typedef unsigned long int __dev_t;
+16535: typedef unsigned int __uid_t;
+16535: typedef unsigned int __gid_t;
+16535: typedef unsigned long int __ino_t;
+16535: typedef unsigned long int __ino64_t;
+16535: typedef unsigned int __mode_t;
+16535: typedef unsigned long int __nlink_t;
+16535: typedef long int __off_t;
+16535: typedef long int __off64_t;
+16535: typedef int __pid_t;
+16535: typedef struct { int __val[2]; } __fsid_t;
+16535: typedef long int __clock_t;
+16535: typedef unsigned long int __rlim_t;
+16535: typedef unsigned long int __rlim64_t;
+16535: typedef unsigned int __id_t;
+16535: typedef long int __time_t;
+16535: typedef unsigned int __useconds_t;
+16535: typedef long int __suseconds_t;
+16535: 
+16535: typedef int __daddr_t;
+16535: typedef int __key_t;
+16535: 
+16535: 
+16535: typedef int __clockid_t;
+16535: 
+16535: 
+16535: typedef void * __timer_t;
+16535: 
+16535: 
+16535: typedef long int __blksize_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef long int __blkcnt_t;
+16535: typedef long int __blkcnt64_t;
+16535: 
+16535: 
+16535: typedef unsigned long int __fsblkcnt_t;
+16535: typedef unsigned long int __fsblkcnt64_t;
+16535: 
+16535: 
+16535: typedef unsigned long int __fsfilcnt_t;
+16535: typedef unsigned long int __fsfilcnt64_t;
+16535: 
+16535: 
+16535: typedef long int __fsword_t;
+16535: 
+16535: typedef long int __ssize_t;
+16535: 
+16535: 
+16535: typedef long int __syscall_slong_t;
+16535: 
+16535: typedef unsigned long int __syscall_ulong_t;
+16535: 
+16535: 
+16535: 
+16535: typedef __off64_t __loff_t;
+16535: typedef char *__caddr_t;
+16535: 
+16535: 
+16535: typedef long int __intptr_t;
+16535: 
+16535: 
+16535: typedef unsigned int __socklen_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef int __sig_atomic_t;
+16535: # 28 "/usr/include/stdint.h" 2 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/wchar.h" 1 3 4
+16535: # 29 "/usr/include/stdint.h" 2 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
+16535: # 30 "/usr/include/stdint.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/stdint-intn.h" 1 3 4
+16535: # 24 "/usr/include/x86_64-linux-gnu/bits/stdint-intn.h" 3 4
+16535: typedef __int8_t int8_t;
+16535: typedef __int16_t int16_t;
+16535: typedef __int32_t int32_t;
+16535: typedef __int64_t int64_t;
+16535: # 35 "/usr/include/stdint.h" 2 3 4
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h" 1 3 4
+16535: # 24 "/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h" 3 4
+16535: typedef __uint8_t uint8_t;
+16535: typedef __uint16_t uint16_t;
+16535: typedef __uint32_t uint32_t;
+16535: typedef __uint64_t uint64_t;
+16535: # 38 "/usr/include/stdint.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __int_least8_t int_least8_t;
+16535: typedef __int_least16_t int_least16_t;
+16535: typedef __int_least32_t int_least32_t;
+16535: typedef __int_least64_t int_least64_t;
+16535: 
+16535: 
+16535: typedef __uint_least8_t uint_least8_t;
+16535: typedef __uint_least16_t uint_least16_t;
+16535: typedef __uint_least32_t uint_least32_t;
+16535: typedef __uint_least64_t uint_least64_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef signed char int_fast8_t;
+16535: 
+16535: typedef long int int_fast16_t;
+16535: typedef long int int_fast32_t;
+16535: typedef long int int_fast64_t;
+16535: # 71 "/usr/include/stdint.h" 3 4
+16535: typedef unsigned char uint_fast8_t;
+16535: 
+16535: typedef unsigned long int uint_fast16_t;
+16535: typedef unsigned long int uint_fast32_t;
+16535: typedef unsigned long int uint_fast64_t;
+16535: # 87 "/usr/include/stdint.h" 3 4
+16535: typedef long int intptr_t;
+16535: 
+16535: 
+16535: typedef unsigned long int uintptr_t;
+16535: # 101 "/usr/include/stdint.h" 3 4
+16535: typedef __intmax_t intmax_t;
+16535: typedef __uintmax_t uintmax_t;
+16535: # 10 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stdint.h" 2 3 4
+16535: # 403 "../../ppl-config.h" 2
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/inttypes.h" 1 3 4
+16535: # 266 "/usr/include/inttypes.h" 3 4
+16535: extern "C" {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef struct
+16535:   {
+16535:     long int quot;
+16535:     long int rem;
+16535:   } imaxdiv_t;
+16535: # 290 "/usr/include/inttypes.h" 3 4
+16535: extern intmax_t imaxabs (intmax_t __n) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern imaxdiv_t imaxdiv (intmax_t __numer, intmax_t __denom)
+16535:       throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern intmax_t strtoimax (const char *__restrict __nptr,
+16535:       char **__restrict __endptr, int __base) throw ();
+16535: 
+16535: 
+16535: extern uintmax_t strtoumax (const char *__restrict __nptr,
+16535:        char ** __restrict __endptr, int __base) throw ();
+16535: 
+16535: 
+16535: extern intmax_t wcstoimax (const wchar_t *__restrict __nptr,
+16535:       wchar_t **__restrict __endptr, int __base)
+16535:      throw ();
+16535: 
+16535: 
+16535: extern uintmax_t wcstoumax (const wchar_t *__restrict __nptr,
+16535:        wchar_t ** __restrict __endptr, int __base)
+16535:      throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long int __strtol_internal (const char *__restrict __nptr,
+16535:        char **__restrict __endptr,
+16535:        int __base, int __group)
+16535:   throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: extern __inline __attribute__ ((__gnu_inline__)) intmax_t
+16535: __attribute__ ((__leaf__)) strtoimax (const char *__restrict nptr, char **__restrict endptr, int base) throw ()
+16535: 
+16535: {
+16535:   return __strtol_internal (nptr, endptr, base, 0);
+16535: }
+16535: 
+16535: extern unsigned long int __strtoul_internal (const char *__restrict __nptr,
+16535:           char ** __restrict __endptr,
+16535:           int __base, int __group)
+16535:   throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: extern __inline __attribute__ ((__gnu_inline__)) uintmax_t
+16535: __attribute__ ((__leaf__)) strtoumax (const char *__restrict nptr, char **__restrict endptr, int base) throw ()
+16535: 
+16535: {
+16535:   return __strtoul_internal (nptr, endptr, base, 0);
+16535: }
+16535: 
+16535: extern long int __wcstol_internal (const wchar_t * __restrict __nptr,
+16535:        wchar_t **__restrict __endptr,
+16535:        int __base, int __group)
+16535:   throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: extern __inline __attribute__ ((__gnu_inline__)) intmax_t
+16535: __attribute__ ((__leaf__)) wcstoimax (const wchar_t *__restrict nptr, wchar_t **__restrict endptr, int base) throw ()
+16535: 
+16535: {
+16535:   return __wcstol_internal (nptr, endptr, base, 0);
+16535: }
+16535: 
+16535: extern unsigned long int __wcstoul_internal (const wchar_t *
+16535:           __restrict __nptr,
+16535:           wchar_t **
+16535:           __restrict __endptr,
+16535:           int __base, int __group)
+16535:   throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: extern __inline __attribute__ ((__gnu_inline__)) uintmax_t
+16535: __attribute__ ((__leaf__)) wcstoumax (const wchar_t *__restrict nptr, wchar_t **__restrict endptr, int base) throw ()
+16535: 
+16535: {
+16535:   return __wcstoul_internal (nptr, endptr, base, 0);
+16535: }
+16535: # 432 "/usr/include/inttypes.h" 3 4
+16535: }
+16535: # 407 "../../ppl-config.h" 2
+16535: # 37 "../../src/ppl_header.hh" 2
+16535: # 1 "../../src/version.hh" 1
+16535: # 61 "../../src/version.hh"
+16535: 
+16535: # 61 "../../src/version.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: unsigned
+16535: version_major();
+16535: 
+16535: 
+16535: unsigned
+16535: version_minor();
+16535: 
+16535: 
+16535: unsigned
+16535: version_revision();
+16535: 
+16535: 
+16535: unsigned
+16535: version_beta();
+16535: 
+16535: 
+16535: const char* version();
+16535: # 92 "../../src/version.hh"
+16535: const char* banner();
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 38 "../../src/ppl_header.hh" 2
+16535: # 1 "../../src/ppl_include_files.hh" 1
+16535: # 1 "../../src/namespaces.hh" 1
+16535: # 28 "../../src/namespaces.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: # 58 "../../src/namespaces.hh"
+16535: namespace IO_Operators {
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace Checked {
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace Implementation {
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace Interfaces {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace C {
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace Java {
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace OCaml {
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace Prolog {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace Ciao {
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace GNU {
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace SICStus {
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace SWI {
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace XSB {
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace YAP {
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 180 "../../src/namespaces.hh"
+16535: namespace std {
+16535: }
+16535: # 2 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/Interval_Info_types.hh" 1
+16535: # 16 "../../src/Interval_Info_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Policy>
+16535: class Interval_Info_Null;
+16535: 
+16535: template <typename T, typename Policy>
+16535: class Interval_Info_Bitset;
+16535: 
+16535: }
+16535: # 3 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/checked_numeric_limits.hh" 1
+16535: # 27 "../../src/checked_numeric_limits.hh"
+16535: # 1 "../../src/Checked_Number_defs.hh" 1
+16535: # 27 "../../src/Checked_Number_defs.hh"
+16535: # 1 "../../src/Checked_Number_types.hh" 1
+16535: # 16 "../../src/Checked_Number_types.hh"
+16535: # 1 "../../src/Coefficient_traits_template.hh" 1
+16535: # 27 "../../src/Coefficient_traits_template.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Coefficient>
+16535: struct Coefficient_traits_template {
+16535: };
+16535: 
+16535: }
+16535: # 17 "../../src/Checked_Number_types.hh" 2
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: struct Extended_Number_Policy;
+16535: 
+16535: template <typename T, typename Policy>
+16535: class Checked_Number;
+16535: 
+16535: }
+16535: # 28 "../../src/Checked_Number_defs.hh" 2
+16535: # 1 "../../src/checked_defs.hh" 1
+16535: # 27 "../../src/checked_defs.hh"
+16535: # 1 "../../src/mp_std_bits_defs.hh" 1
+16535: # 28 "../../src/mp_std_bits_defs.hh"
+16535: # 1 "/usr/include/gmpxx.h" 1 3 4
+16535: # 34 "/usr/include/gmpxx.h" 3 4
+16535: # 1 "/usr/include/c++/8/iosfwd" 1 3 4
+16535: # 36 "/usr/include/c++/8/iosfwd" 3 4
+16535:        
+16535: # 37 "/usr/include/c++/8/iosfwd" 3
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h" 1 3
+16535: # 236 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h" 3
+16535: 
+16535: # 236 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h" 3
+16535: namespace std
+16535: {
+16535:   typedef long unsigned int size_t;
+16535:   typedef long int ptrdiff_t;
+16535: 
+16535: 
+16535:   typedef decltype(nullptr) nullptr_t;
+16535: 
+16535: }
+16535: # 258 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h" 3
+16535: namespace std
+16535: {
+16535:   inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
+16535: }
+16535: namespace __gnu_cxx
+16535: {
+16535:   inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
+16535: }
+16535: # 508 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h" 3
+16535: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/os_defines.h" 1 3
+16535: # 509 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h" 2 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/cpu_defines.h" 1 3
+16535: # 512 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++config.h" 2 3
+16535: # 39 "/usr/include/c++/8/iosfwd" 2 3
+16535: # 1 "/usr/include/c++/8/bits/stringfwd.h" 1 3
+16535: # 37 "/usr/include/c++/8/bits/stringfwd.h" 3
+16535:        
+16535: # 38 "/usr/include/c++/8/bits/stringfwd.h" 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/memoryfwd.h" 1 3
+16535: # 46 "/usr/include/c++/8/bits/memoryfwd.h" 3
+16535:        
+16535: # 47 "/usr/include/c++/8/bits/memoryfwd.h" 3
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 63 "/usr/include/c++/8/bits/memoryfwd.h" 3
+16535:   template<typename>
+16535:     class allocator;
+16535: 
+16535:   template<>
+16535:     class allocator<void>;
+16535: 
+16535: 
+16535:   template<typename, typename>
+16535:     struct uses_allocator;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 41 "/usr/include/c++/8/bits/stringfwd.h" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<class _CharT>
+16535:     struct char_traits;
+16535: 
+16535:   template<> struct char_traits<char>;
+16535: 
+16535: 
+16535:   template<> struct char_traits<wchar_t>;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<> struct char_traits<char16_t>;
+16535:   template<> struct char_traits<char32_t>;
+16535: 
+16535: 
+16535: namespace __cxx11 {
+16535: 
+16535:   template<typename _CharT, typename _Traits = char_traits<_CharT>,
+16535:            typename _Alloc = allocator<_CharT> >
+16535:     class basic_string;
+16535: 
+16535: 
+16535:   typedef basic_string<char> string;
+16535: 
+16535: 
+16535: 
+16535:   typedef basic_string<wchar_t> wstring;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef basic_string<char16_t> u16string;
+16535: 
+16535: 
+16535:   typedef basic_string<char32_t> u32string;
+16535: 
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 40 "/usr/include/c++/8/iosfwd" 2 3
+16535: # 1 "/usr/include/c++/8/bits/postypes.h" 1 3
+16535: # 38 "/usr/include/c++/8/bits/postypes.h" 3
+16535:        
+16535: # 39 "/usr/include/c++/8/bits/postypes.h" 3
+16535: 
+16535: # 1 "/usr/include/c++/8/cwchar" 1 3
+16535: # 39 "/usr/include/c++/8/cwchar" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/cwchar" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/wchar.h" 1 3 4
+16535: # 27 "/usr/include/wchar.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 1 3 4
+16535: # 28 "/usr/include/wchar.h" 2 3 4
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/floatn.h" 1 3 4
+16535: # 75 "/usr/include/x86_64-linux-gnu/bits/floatn.h" 3 4
+16535: typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__TC__)));
+16535: # 87 "/usr/include/x86_64-linux-gnu/bits/floatn.h" 3 4
+16535: typedef __float128 _Float128;
+16535: # 120 "/usr/include/x86_64-linux-gnu/bits/floatn.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/floatn-common.h" 1 3 4
+16535: # 24 "/usr/include/x86_64-linux-gnu/bits/floatn-common.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/long-double.h" 1 3 4
+16535: # 25 "/usr/include/x86_64-linux-gnu/bits/floatn-common.h" 2 3 4
+16535: # 214 "/usr/include/x86_64-linux-gnu/bits/floatn-common.h" 3 4
+16535: typedef float _Float32;
+16535: # 251 "/usr/include/x86_64-linux-gnu/bits/floatn-common.h" 3 4
+16535: typedef double _Float64;
+16535: # 268 "/usr/include/x86_64-linux-gnu/bits/floatn-common.h" 3 4
+16535: typedef double _Float32x;
+16535: # 285 "/usr/include/x86_64-linux-gnu/bits/floatn-common.h" 3 4
+16535: typedef long double _Float64x;
+16535: # 121 "/usr/include/x86_64-linux-gnu/bits/floatn.h" 2 3 4
+16535: # 31 "/usr/include/wchar.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
+16535: # 216 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 3 4
+16535: typedef long unsigned int size_t;
+16535: # 36 "/usr/include/wchar.h" 2 3 4
+16535: 
+16535: 
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stdarg.h" 1 3 4
+16535: # 40 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stdarg.h" 3 4
+16535: typedef __builtin_va_list __gnuc_va_list;
+16535: # 39 "/usr/include/wchar.h" 2 3 4
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types/wint_t.h" 1 3 4
+16535: # 20 "/usr/include/x86_64-linux-gnu/bits/types/wint_t.h" 3 4
+16535: typedef unsigned int wint_t;
+16535: # 42 "/usr/include/wchar.h" 2 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h" 1 3 4
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h" 1 3 4
+16535: # 13 "/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h" 3 4
+16535: typedef struct
+16535: {
+16535:   int __count;
+16535:   union
+16535:   {
+16535:     unsigned int __wch;
+16535:     char __wchb[4];
+16535:   } __value;
+16535: } __mbstate_t;
+16535: # 5 "/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h" 2 3 4
+16535: 
+16535: typedef __mbstate_t mbstate_t;
+16535: # 43 "/usr/include/wchar.h" 2 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types/__FILE.h" 1 3 4
+16535: 
+16535: 
+16535: 
+16535: struct _IO_FILE;
+16535: typedef struct _IO_FILE __FILE;
+16535: # 44 "/usr/include/wchar.h" 2 3 4
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types/FILE.h" 1 3 4
+16535: 
+16535: 
+16535: 
+16535: struct _IO_FILE;
+16535: 
+16535: 
+16535: typedef struct _IO_FILE FILE;
+16535: # 47 "/usr/include/wchar.h" 2 3 4
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types/locale_t.h" 1 3 4
+16535: # 22 "/usr/include/x86_64-linux-gnu/bits/types/locale_t.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h" 1 3 4
+16535: # 28 "/usr/include/x86_64-linux-gnu/bits/types/__locale_t.h" 3 4
+16535: struct __locale_struct
+16535: {
+16535: 
+16535:   struct __locale_data *__locales[13];
+16535: 
+16535: 
+16535:   const unsigned short int *__ctype_b;
+16535:   const int *__ctype_tolower;
+16535:   const int *__ctype_toupper;
+16535: 
+16535: 
+16535:   const char *__names[13];
+16535: };
+16535: 
+16535: typedef struct __locale_struct *__locale_t;
+16535: # 23 "/usr/include/x86_64-linux-gnu/bits/types/locale_t.h" 2 3 4
+16535: 
+16535: typedef __locale_t locale_t;
+16535: # 50 "/usr/include/wchar.h" 2 3 4
+16535: # 79 "/usr/include/wchar.h" 3 4
+16535: extern "C" {
+16535: 
+16535: 
+16535: 
+16535: struct tm;
+16535: 
+16535: 
+16535: 
+16535: extern wchar_t *wcscpy (wchar_t *__restrict __dest,
+16535:    const wchar_t *__restrict __src)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern wchar_t *wcsncpy (wchar_t *__restrict __dest,
+16535:     const wchar_t *__restrict __src, size_t __n)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern wchar_t *wcscat (wchar_t *__restrict __dest,
+16535:    const wchar_t *__restrict __src)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: extern wchar_t *wcsncat (wchar_t *__restrict __dest,
+16535:     const wchar_t *__restrict __src, size_t __n)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern int wcscmp (const wchar_t *__s1, const wchar_t *__s2)
+16535:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: extern int wcsncmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n)
+16535:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: 
+16535: extern int wcscasecmp (const wchar_t *__s1, const wchar_t *__s2) throw ();
+16535: 
+16535: 
+16535: extern int wcsncasecmp (const wchar_t *__s1, const wchar_t *__s2,
+16535:    size_t __n) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int wcscasecmp_l (const wchar_t *__s1, const wchar_t *__s2,
+16535:     locale_t __loc) throw ();
+16535: 
+16535: extern int wcsncasecmp_l (const wchar_t *__s1, const wchar_t *__s2,
+16535:      size_t __n, locale_t __loc) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int wcscoll (const wchar_t *__s1, const wchar_t *__s2) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern size_t wcsxfrm (wchar_t *__restrict __s1,
+16535:          const wchar_t *__restrict __s2, size_t __n) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int wcscoll_l (const wchar_t *__s1, const wchar_t *__s2,
+16535:         locale_t __loc) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern size_t wcsxfrm_l (wchar_t *__s1, const wchar_t *__s2,
+16535:     size_t __n, locale_t __loc) throw ();
+16535: 
+16535: 
+16535: extern wchar_t *wcsdup (const wchar_t *__s) throw () __attribute__ ((__malloc__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern "C++" wchar_t *wcschr (wchar_t *__wcs, wchar_t __wc)
+16535:      throw () __asm ("wcschr") __attribute__ ((__pure__));
+16535: extern "C++" const wchar_t *wcschr (const wchar_t *__wcs, wchar_t __wc)
+16535:      throw () __asm ("wcschr") __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern "C++" wchar_t *wcsrchr (wchar_t *__wcs, wchar_t __wc)
+16535:      throw () __asm ("wcsrchr") __attribute__ ((__pure__));
+16535: extern "C++" const wchar_t *wcsrchr (const wchar_t *__wcs, wchar_t __wc)
+16535:      throw () __asm ("wcsrchr") __attribute__ ((__pure__));
+16535: # 181 "/usr/include/wchar.h" 3 4
+16535: extern wchar_t *wcschrnul (const wchar_t *__s, wchar_t __wc)
+16535:      throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern size_t wcscspn (const wchar_t *__wcs, const wchar_t *__reject)
+16535:      throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: extern size_t wcsspn (const wchar_t *__wcs, const wchar_t *__accept)
+16535:      throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: extern "C++" wchar_t *wcspbrk (wchar_t *__wcs, const wchar_t *__accept)
+16535:      throw () __asm ("wcspbrk") __attribute__ ((__pure__));
+16535: extern "C++" const wchar_t *wcspbrk (const wchar_t *__wcs,
+16535:          const wchar_t *__accept)
+16535:      throw () __asm ("wcspbrk") __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern "C++" wchar_t *wcsstr (wchar_t *__haystack, const wchar_t *__needle)
+16535:      throw () __asm ("wcsstr") __attribute__ ((__pure__));
+16535: extern "C++" const wchar_t *wcsstr (const wchar_t *__haystack,
+16535:         const wchar_t *__needle)
+16535:      throw () __asm ("wcsstr") __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern wchar_t *wcstok (wchar_t *__restrict __s,
+16535:    const wchar_t *__restrict __delim,
+16535:    wchar_t **__restrict __ptr) throw ();
+16535: 
+16535: 
+16535: extern size_t wcslen (const wchar_t *__s) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern "C++" wchar_t *wcswcs (wchar_t *__haystack, const wchar_t *__needle)
+16535:      throw () __asm ("wcswcs") __attribute__ ((__pure__));
+16535: extern "C++" const wchar_t *wcswcs (const wchar_t *__haystack,
+16535:         const wchar_t *__needle)
+16535:      throw () __asm ("wcswcs") __attribute__ ((__pure__));
+16535: # 240 "/usr/include/wchar.h" 3 4
+16535: extern size_t wcsnlen (const wchar_t *__s, size_t __maxlen)
+16535:      throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern "C++" wchar_t *wmemchr (wchar_t *__s, wchar_t __c, size_t __n)
+16535:      throw () __asm ("wmemchr") __attribute__ ((__pure__));
+16535: extern "C++" const wchar_t *wmemchr (const wchar_t *__s, wchar_t __c,
+16535:          size_t __n)
+16535:      throw () __asm ("wmemchr") __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int wmemcmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n)
+16535:      throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: extern wchar_t *wmemcpy (wchar_t *__restrict __s1,
+16535:     const wchar_t *__restrict __s2, size_t __n) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern wchar_t *wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n)
+16535:      throw ();
+16535: 
+16535: 
+16535: extern wchar_t *wmemset (wchar_t *__s, wchar_t __c, size_t __n) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern wchar_t *wmempcpy (wchar_t *__restrict __s1,
+16535:      const wchar_t *__restrict __s2, size_t __n)
+16535:      throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern wint_t btowc (int __c) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int wctob (wint_t __c) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int mbsinit (const mbstate_t *__ps) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: 
+16535: extern size_t mbrtowc (wchar_t *__restrict __pwc,
+16535:          const char *__restrict __s, size_t __n,
+16535:          mbstate_t *__restrict __p) throw ();
+16535: 
+16535: 
+16535: extern size_t wcrtomb (char *__restrict __s, wchar_t __wc,
+16535:          mbstate_t *__restrict __ps) throw ();
+16535: 
+16535: 
+16535: extern size_t __mbrlen (const char *__restrict __s, size_t __n,
+16535:    mbstate_t *__restrict __ps) throw ();
+16535: extern size_t mbrlen (const char *__restrict __s, size_t __n,
+16535:         mbstate_t *__restrict __ps) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern wint_t __btowc_alias (int __c) __asm ("btowc");
+16535: extern __inline __attribute__ ((__gnu_inline__)) wint_t
+16535: __attribute__ ((__leaf__)) btowc (int __c) throw ()
+16535: { return (__builtin_constant_p (__c) && __c >= '\0' && __c <= '\x7f'
+16535:    ? (wint_t) __c : __btowc_alias (__c)); }
+16535: 
+16535: extern int __wctob_alias (wint_t __c) __asm ("wctob");
+16535: extern __inline __attribute__ ((__gnu_inline__)) int
+16535: __attribute__ ((__leaf__)) wctob (wint_t __wc) throw ()
+16535: { return (__builtin_constant_p (__wc) && __wc >= L'\0' && __wc <= L'\x7f'
+16535:    ? (int) __wc : __wctob_alias (__wc)); }
+16535: 
+16535: extern __inline __attribute__ ((__gnu_inline__)) size_t
+16535: __attribute__ ((__leaf__)) mbrlen (const char *__restrict __s, size_t __n, mbstate_t *__restrict __ps) throw ()
+16535: 
+16535: { return (__ps != __null
+16535:    ? mbrtowc (__null, __s, __n, __ps) : __mbrlen (__s, __n, __null)); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern size_t mbsrtowcs (wchar_t *__restrict __dst,
+16535:     const char **__restrict __src, size_t __len,
+16535:     mbstate_t *__restrict __ps) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern size_t wcsrtombs (char *__restrict __dst,
+16535:     const wchar_t **__restrict __src, size_t __len,
+16535:     mbstate_t *__restrict __ps) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern size_t mbsnrtowcs (wchar_t *__restrict __dst,
+16535:      const char **__restrict __src, size_t __nmc,
+16535:      size_t __len, mbstate_t *__restrict __ps) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern size_t wcsnrtombs (char *__restrict __dst,
+16535:      const wchar_t **__restrict __src,
+16535:      size_t __nwc, size_t __len,
+16535:      mbstate_t *__restrict __ps) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int wcwidth (wchar_t __c) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int wcswidth (const wchar_t *__s, size_t __n) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern double wcstod (const wchar_t *__restrict __nptr,
+16535:         wchar_t **__restrict __endptr) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern float wcstof (const wchar_t *__restrict __nptr,
+16535:        wchar_t **__restrict __endptr) throw ();
+16535: extern long double wcstold (const wchar_t *__restrict __nptr,
+16535:        wchar_t **__restrict __endptr) throw ();
+16535: # 396 "/usr/include/wchar.h" 3 4
+16535: extern _Float32 wcstof32 (const wchar_t *__restrict __nptr,
+16535:      wchar_t **__restrict __endptr) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 wcstof64 (const wchar_t *__restrict __nptr,
+16535:      wchar_t **__restrict __endptr) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 wcstof128 (const wchar_t *__restrict __nptr,
+16535:        wchar_t **__restrict __endptr) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x wcstof32x (const wchar_t *__restrict __nptr,
+16535:        wchar_t **__restrict __endptr) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x wcstof64x (const wchar_t *__restrict __nptr,
+16535:        wchar_t **__restrict __endptr) throw ();
+16535: # 428 "/usr/include/wchar.h" 3 4
+16535: extern long int wcstol (const wchar_t *__restrict __nptr,
+16535:    wchar_t **__restrict __endptr, int __base) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern unsigned long int wcstoul (const wchar_t *__restrict __nptr,
+16535:       wchar_t **__restrict __endptr, int __base)
+16535:      throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: __extension__
+16535: extern long long int wcstoll (const wchar_t *__restrict __nptr,
+16535:          wchar_t **__restrict __endptr, int __base)
+16535:      throw ();
+16535: 
+16535: 
+16535: 
+16535: __extension__
+16535: extern unsigned long long int wcstoull (const wchar_t *__restrict __nptr,
+16535:      wchar_t **__restrict __endptr,
+16535:      int __base) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: __extension__
+16535: extern long long int wcstoq (const wchar_t *__restrict __nptr,
+16535:         wchar_t **__restrict __endptr, int __base)
+16535:      throw ();
+16535: 
+16535: 
+16535: 
+16535: __extension__
+16535: extern unsigned long long int wcstouq (const wchar_t *__restrict __nptr,
+16535:            wchar_t **__restrict __endptr,
+16535:            int __base) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long int wcstol_l (const wchar_t *__restrict __nptr,
+16535:      wchar_t **__restrict __endptr, int __base,
+16535:      locale_t __loc) throw ();
+16535: 
+16535: extern unsigned long int wcstoul_l (const wchar_t *__restrict __nptr,
+16535:         wchar_t **__restrict __endptr,
+16535:         int __base, locale_t __loc) throw ();
+16535: 
+16535: __extension__
+16535: extern long long int wcstoll_l (const wchar_t *__restrict __nptr,
+16535:     wchar_t **__restrict __endptr,
+16535:     int __base, locale_t __loc) throw ();
+16535: 
+16535: __extension__
+16535: extern unsigned long long int wcstoull_l (const wchar_t *__restrict __nptr,
+16535:        wchar_t **__restrict __endptr,
+16535:        int __base, locale_t __loc)
+16535:      throw ();
+16535: 
+16535: extern double wcstod_l (const wchar_t *__restrict __nptr,
+16535:    wchar_t **__restrict __endptr, locale_t __loc)
+16535:      throw ();
+16535: 
+16535: extern float wcstof_l (const wchar_t *__restrict __nptr,
+16535:          wchar_t **__restrict __endptr, locale_t __loc)
+16535:      throw ();
+16535: 
+16535: extern long double wcstold_l (const wchar_t *__restrict __nptr,
+16535:          wchar_t **__restrict __endptr,
+16535:          locale_t __loc) throw ();
+16535: # 511 "/usr/include/wchar.h" 3 4
+16535: extern _Float32 wcstof32_l (const wchar_t *__restrict __nptr,
+16535:        wchar_t **__restrict __endptr,
+16535:        locale_t __loc) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 wcstof64_l (const wchar_t *__restrict __nptr,
+16535:        wchar_t **__restrict __endptr,
+16535:        locale_t __loc) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 wcstof128_l (const wchar_t *__restrict __nptr,
+16535:          wchar_t **__restrict __endptr,
+16535:          locale_t __loc) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x wcstof32x_l (const wchar_t *__restrict __nptr,
+16535:          wchar_t **__restrict __endptr,
+16535:          locale_t __loc) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x wcstof64x_l (const wchar_t *__restrict __nptr,
+16535:          wchar_t **__restrict __endptr,
+16535:          locale_t __loc) throw ();
+16535: # 551 "/usr/include/wchar.h" 3 4
+16535: extern wchar_t *wcpcpy (wchar_t *__restrict __dest,
+16535:    const wchar_t *__restrict __src) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern wchar_t *wcpncpy (wchar_t *__restrict __dest,
+16535:     const wchar_t *__restrict __src, size_t __n)
+16535:      throw ();
+16535: # 567 "/usr/include/wchar.h" 3 4
+16535: extern __FILE *open_wmemstream (wchar_t **__bufloc, size_t *__sizeloc) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int fwide (__FILE *__fp, int __mode) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int fwprintf (__FILE *__restrict __stream,
+16535:        const wchar_t *__restrict __format, ...)
+16535:                                                            ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int wprintf (const wchar_t *__restrict __format, ...)
+16535:                                                            ;
+16535: 
+16535: extern int swprintf (wchar_t *__restrict __s, size_t __n,
+16535:        const wchar_t *__restrict __format, ...)
+16535:      throw () ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int vfwprintf (__FILE *__restrict __s,
+16535:         const wchar_t *__restrict __format,
+16535:         __gnuc_va_list __arg)
+16535:                                                            ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int vwprintf (const wchar_t *__restrict __format,
+16535:        __gnuc_va_list __arg)
+16535:                                                            ;
+16535: 
+16535: 
+16535: extern int vswprintf (wchar_t *__restrict __s, size_t __n,
+16535:         const wchar_t *__restrict __format,
+16535:         __gnuc_va_list __arg)
+16535:      throw () ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int fwscanf (__FILE *__restrict __stream,
+16535:       const wchar_t *__restrict __format, ...)
+16535:                                                           ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int wscanf (const wchar_t *__restrict __format, ...)
+16535:                                                           ;
+16535: 
+16535: extern int swscanf (const wchar_t *__restrict __s,
+16535:       const wchar_t *__restrict __format, ...)
+16535:      throw () ;
+16535: # 673 "/usr/include/wchar.h" 3 4
+16535: extern int vfwscanf (__FILE *__restrict __s,
+16535:        const wchar_t *__restrict __format,
+16535:        __gnuc_va_list __arg)
+16535:                                                           ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int vwscanf (const wchar_t *__restrict __format,
+16535:       __gnuc_va_list __arg)
+16535:                                                           ;
+16535: 
+16535: extern int vswscanf (const wchar_t *__restrict __s,
+16535:        const wchar_t *__restrict __format,
+16535:        __gnuc_va_list __arg)
+16535:      throw () ;
+16535: # 727 "/usr/include/wchar.h" 3 4
+16535: extern wint_t fgetwc (__FILE *__stream);
+16535: extern wint_t getwc (__FILE *__stream);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern wint_t getwchar (void);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern wint_t fputwc (wchar_t __wc, __FILE *__stream);
+16535: extern wint_t putwc (wchar_t __wc, __FILE *__stream);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern wint_t putwchar (wchar_t __wc);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n,
+16535:    __FILE *__restrict __stream);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int fputws (const wchar_t *__restrict __ws,
+16535:      __FILE *__restrict __stream);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern wint_t ungetwc (wint_t __wc, __FILE *__stream);
+16535: # 782 "/usr/include/wchar.h" 3 4
+16535: extern wint_t getwc_unlocked (__FILE *__stream);
+16535: extern wint_t getwchar_unlocked (void);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern wint_t fgetwc_unlocked (__FILE *__stream);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern wint_t fputwc_unlocked (wchar_t __wc, __FILE *__stream);
+16535: # 808 "/usr/include/wchar.h" 3 4
+16535: extern wint_t putwc_unlocked (wchar_t __wc, __FILE *__stream);
+16535: extern wint_t putwchar_unlocked (wchar_t __wc);
+16535: # 818 "/usr/include/wchar.h" 3 4
+16535: extern wchar_t *fgetws_unlocked (wchar_t *__restrict __ws, int __n,
+16535:      __FILE *__restrict __stream);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int fputws_unlocked (const wchar_t *__restrict __ws,
+16535:        __FILE *__restrict __stream);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize,
+16535:    const wchar_t *__restrict __format,
+16535:    const struct tm *__restrict __tp) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize,
+16535:      const wchar_t *__restrict __format,
+16535:      const struct tm *__restrict __tp,
+16535:      locale_t __loc) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/wchar2.h" 1 3 4
+16535: # 24 "/usr/include/x86_64-linux-gnu/bits/wchar2.h" 3 4
+16535: extern wchar_t *__wmemcpy_chk (wchar_t *__restrict __s1,
+16535:           const wchar_t *__restrict __s2, size_t __n,
+16535:           size_t __ns1) throw ();
+16535: extern wchar_t *__wmemcpy_alias (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) throw () __asm__ ("" "wmemcpy")
+16535: 
+16535: 
+16535:             ;
+16535: extern wchar_t *__wmemcpy_chk_warn (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n, size_t __ns1) throw () __asm__ ("" "__wmemcpy_chk")
+16535: 
+16535: 
+16535: 
+16535:      __attribute__((__warning__ ("wmemcpy called with length bigger than size of destination " "buffer")))
+16535:             ;
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
+16535: __attribute__ ((__leaf__)) wmemcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) throw ()
+16535: 
+16535: {
+16535:   if (__builtin_object_size (__s1, 0) != (size_t) -1)
+16535:     {
+16535:       if (!__builtin_constant_p (__n))
+16535:  return __wmemcpy_chk (__s1, __s2, __n,
+16535:          __builtin_object_size (__s1, 0) / sizeof (wchar_t));
+16535: 
+16535:       if (__n > __builtin_object_size (__s1, 0) / sizeof (wchar_t))
+16535:  return __wmemcpy_chk_warn (__s1, __s2, __n,
+16535:        __builtin_object_size (__s1, 0) / sizeof (wchar_t));
+16535:     }
+16535:   return __wmemcpy_alias (__s1, __s2, __n);
+16535: }
+16535: 
+16535: 
+16535: extern wchar_t *__wmemmove_chk (wchar_t *__s1, const wchar_t *__s2,
+16535:     size_t __n, size_t __ns1) throw ();
+16535: extern wchar_t *__wmemmove_alias (wchar_t *__s1, const wchar_t *__s2, size_t __n) throw () __asm__ ("" "wmemmove")
+16535: 
+16535:                                ;
+16535: extern wchar_t *__wmemmove_chk_warn (wchar_t *__s1, const wchar_t *__s2, size_t __n, size_t __ns1) throw () __asm__ ("" "__wmemmove_chk")
+16535: 
+16535: 
+16535:      __attribute__((__warning__ ("wmemmove called with length bigger than size of destination " "buffer")))
+16535:             ;
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
+16535: __attribute__ ((__leaf__)) wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n) throw ()
+16535: {
+16535:   if (__builtin_object_size (__s1, 0) != (size_t) -1)
+16535:     {
+16535:       if (!__builtin_constant_p (__n))
+16535:  return __wmemmove_chk (__s1, __s2, __n,
+16535:           __builtin_object_size (__s1, 0) / sizeof (wchar_t));
+16535: 
+16535:       if (__n > __builtin_object_size (__s1, 0) / sizeof (wchar_t))
+16535:  return __wmemmove_chk_warn (__s1, __s2, __n,
+16535:         __builtin_object_size (__s1, 0) / sizeof (wchar_t));
+16535:     }
+16535:   return __wmemmove_alias (__s1, __s2, __n);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: extern wchar_t *__wmempcpy_chk (wchar_t *__restrict __s1,
+16535:     const wchar_t *__restrict __s2, size_t __n,
+16535:     size_t __ns1) throw ();
+16535: extern wchar_t *__wmempcpy_alias (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) throw () __asm__ ("" "wmempcpy")
+16535: 
+16535: 
+16535:                            ;
+16535: extern wchar_t *__wmempcpy_chk_warn (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n, size_t __ns1) throw () __asm__ ("" "__wmempcpy_chk")
+16535: 
+16535: 
+16535: 
+16535:      __attribute__((__warning__ ("wmempcpy called with length bigger than size of destination " "buffer")))
+16535:             ;
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
+16535: __attribute__ ((__leaf__)) wmempcpy (wchar_t *__restrict __s1, const wchar_t *__restrict __s2, size_t __n) throw ()
+16535: 
+16535: {
+16535:   if (__builtin_object_size (__s1, 0) != (size_t) -1)
+16535:     {
+16535:       if (!__builtin_constant_p (__n))
+16535:  return __wmempcpy_chk (__s1, __s2, __n,
+16535:           __builtin_object_size (__s1, 0) / sizeof (wchar_t));
+16535: 
+16535:       if (__n > __builtin_object_size (__s1, 0) / sizeof (wchar_t))
+16535:  return __wmempcpy_chk_warn (__s1, __s2, __n,
+16535:         __builtin_object_size (__s1, 0) / sizeof (wchar_t));
+16535:     }
+16535:   return __wmempcpy_alias (__s1, __s2, __n);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: extern wchar_t *__wmemset_chk (wchar_t *__s, wchar_t __c, size_t __n,
+16535:           size_t __ns) throw ();
+16535: extern wchar_t *__wmemset_alias (wchar_t *__s, wchar_t __c, size_t __n) throw () __asm__ ("" "wmemset")
+16535:                              ;
+16535: extern wchar_t *__wmemset_chk_warn (wchar_t *__s, wchar_t __c, size_t __n, size_t __ns) throw () __asm__ ("" "__wmemset_chk")
+16535: 
+16535: 
+16535:      __attribute__((__warning__ ("wmemset called with length bigger than size of destination " "buffer")))
+16535:             ;
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
+16535: __attribute__ ((__leaf__)) wmemset (wchar_t *__s, wchar_t __c, size_t __n) throw ()
+16535: {
+16535:   if (__builtin_object_size (__s, 0) != (size_t) -1)
+16535:     {
+16535:       if (!__builtin_constant_p (__n))
+16535:  return __wmemset_chk (__s, __c, __n, __builtin_object_size (__s, 0) / sizeof (wchar_t));
+16535: 
+16535:       if (__n > __builtin_object_size (__s, 0) / sizeof (wchar_t))
+16535:  return __wmemset_chk_warn (__s, __c, __n,
+16535:        __builtin_object_size (__s, 0) / sizeof (wchar_t));
+16535:     }
+16535:   return __wmemset_alias (__s, __c, __n);
+16535: }
+16535: 
+16535: 
+16535: extern wchar_t *__wcscpy_chk (wchar_t *__restrict __dest,
+16535:          const wchar_t *__restrict __src,
+16535:          size_t __n) throw ();
+16535: extern wchar_t *__wcscpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src) throw () __asm__ ("" "wcscpy")
+16535: 
+16535:                                               ;
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
+16535: __attribute__ ((__leaf__)) wcscpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src) throw ()
+16535: {
+16535:   if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1)
+16535:     return __wcscpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t));
+16535:   return __wcscpy_alias (__dest, __src);
+16535: }
+16535: 
+16535: 
+16535: extern wchar_t *__wcpcpy_chk (wchar_t *__restrict __dest,
+16535:          const wchar_t *__restrict __src,
+16535:          size_t __destlen) throw ();
+16535: extern wchar_t *__wcpcpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src) throw () __asm__ ("" "wcpcpy")
+16535: 
+16535:                                               ;
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
+16535: __attribute__ ((__leaf__)) wcpcpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src) throw ()
+16535: {
+16535:   if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1)
+16535:     return __wcpcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t));
+16535:   return __wcpcpy_alias (__dest, __src);
+16535: }
+16535: 
+16535: 
+16535: extern wchar_t *__wcsncpy_chk (wchar_t *__restrict __dest,
+16535:           const wchar_t *__restrict __src, size_t __n,
+16535:           size_t __destlen) throw ();
+16535: extern wchar_t *__wcsncpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) throw () __asm__ ("" "wcsncpy")
+16535: 
+16535: 
+16535:                           ;
+16535: extern wchar_t *__wcsncpy_chk_warn (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n, size_t __destlen) throw () __asm__ ("" "__wcsncpy_chk")
+16535: 
+16535: 
+16535: 
+16535:      __attribute__((__warning__ ("wcsncpy called with length bigger than size of destination " "buffer")))
+16535:             ;
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
+16535: __attribute__ ((__leaf__)) wcsncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) throw ()
+16535: 
+16535: {
+16535:   if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1)
+16535:     {
+16535:       if (!__builtin_constant_p (__n))
+16535:  return __wcsncpy_chk (__dest, __src, __n,
+16535:          __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t));
+16535:       if (__n > __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t))
+16535:  return __wcsncpy_chk_warn (__dest, __src, __n,
+16535:        __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t));
+16535:     }
+16535:   return __wcsncpy_alias (__dest, __src, __n);
+16535: }
+16535: 
+16535: 
+16535: extern wchar_t *__wcpncpy_chk (wchar_t *__restrict __dest,
+16535:           const wchar_t *__restrict __src, size_t __n,
+16535:           size_t __destlen) throw ();
+16535: extern wchar_t *__wcpncpy_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) throw () __asm__ ("" "wcpncpy")
+16535: 
+16535: 
+16535:                           ;
+16535: extern wchar_t *__wcpncpy_chk_warn (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n, size_t __destlen) throw () __asm__ ("" "__wcpncpy_chk")
+16535: 
+16535: 
+16535: 
+16535:      __attribute__((__warning__ ("wcpncpy called with length bigger than size of destination " "buffer")))
+16535:             ;
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
+16535: __attribute__ ((__leaf__)) wcpncpy (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) throw ()
+16535: 
+16535: {
+16535:   if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1)
+16535:     {
+16535:       if (!__builtin_constant_p (__n))
+16535:  return __wcpncpy_chk (__dest, __src, __n,
+16535:          __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t));
+16535:       if (__n > __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t))
+16535:  return __wcpncpy_chk_warn (__dest, __src, __n,
+16535:        __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t));
+16535:     }
+16535:   return __wcpncpy_alias (__dest, __src, __n);
+16535: }
+16535: 
+16535: 
+16535: extern wchar_t *__wcscat_chk (wchar_t *__restrict __dest,
+16535:          const wchar_t *__restrict __src,
+16535:          size_t __destlen) throw ();
+16535: extern wchar_t *__wcscat_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src) throw () __asm__ ("" "wcscat")
+16535: 
+16535:                                               ;
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
+16535: __attribute__ ((__leaf__)) wcscat (wchar_t *__restrict __dest, const wchar_t *__restrict __src) throw ()
+16535: {
+16535:   if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1)
+16535:     return __wcscat_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t));
+16535:   return __wcscat_alias (__dest, __src);
+16535: }
+16535: 
+16535: 
+16535: extern wchar_t *__wcsncat_chk (wchar_t *__restrict __dest,
+16535:           const wchar_t *__restrict __src,
+16535:           size_t __n, size_t __destlen) throw ();
+16535: extern wchar_t *__wcsncat_alias (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) throw () __asm__ ("" "wcsncat")
+16535: 
+16535: 
+16535:                           ;
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) wchar_t *
+16535: __attribute__ ((__leaf__)) wcsncat (wchar_t *__restrict __dest, const wchar_t *__restrict __src, size_t __n) throw ()
+16535: 
+16535: {
+16535:   if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1)
+16535:     return __wcsncat_chk (__dest, __src, __n,
+16535:      __builtin_object_size (__dest, 2 > 1) / sizeof (wchar_t));
+16535:   return __wcsncat_alias (__dest, __src, __n);
+16535: }
+16535: 
+16535: 
+16535: extern int __swprintf_chk (wchar_t *__restrict __s, size_t __n,
+16535:       int __flag, size_t __s_len,
+16535:       const wchar_t *__restrict __format, ...)
+16535:      throw () ;
+16535: 
+16535: extern int __swprintf_alias (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, ...) throw () __asm__ ("" "swprintf")
+16535: 
+16535: 
+16535:              ;
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+16535: __attribute__ ((__leaf__)) swprintf (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, ...) throw ()
+16535: 
+16535: {
+16535:   if (__builtin_object_size (__s, 2 > 1) != (size_t) -1 || 2 > 1)
+16535:     return __swprintf_chk (__s, __n, 2 - 1,
+16535:       __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t),
+16535:       __fmt, __builtin_va_arg_pack ());
+16535:   return __swprintf_alias (__s, __n, __fmt, __builtin_va_arg_pack ());
+16535: }
+16535: # 303 "/usr/include/x86_64-linux-gnu/bits/wchar2.h" 3 4
+16535: extern int __vswprintf_chk (wchar_t *__restrict __s, size_t __n,
+16535:        int __flag, size_t __s_len,
+16535:        const wchar_t *__restrict __format,
+16535:        __gnuc_va_list __arg)
+16535:      throw () ;
+16535: 
+16535: extern int __vswprintf_alias (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, __gnuc_va_list __ap) throw () __asm__ ("" "vswprintf")
+16535: 
+16535: 
+16535:                                      ;
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+16535: __attribute__ ((__leaf__)) vswprintf (wchar_t *__restrict __s, size_t __n, const wchar_t *__restrict __fmt, __gnuc_va_list __ap) throw ()
+16535: 
+16535: {
+16535:   if (__builtin_object_size (__s, 2 > 1) != (size_t) -1 || 2 > 1)
+16535:     return __vswprintf_chk (__s, __n, 2 - 1,
+16535:        __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t), __fmt, __ap);
+16535:   return __vswprintf_alias (__s, __n, __fmt, __ap);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int __fwprintf_chk (__FILE *__restrict __stream, int __flag,
+16535:       const wchar_t *__restrict __format, ...);
+16535: extern int __wprintf_chk (int __flag, const wchar_t *__restrict __format,
+16535:      ...);
+16535: extern int __vfwprintf_chk (__FILE *__restrict __stream, int __flag,
+16535:        const wchar_t *__restrict __format,
+16535:        __gnuc_va_list __ap);
+16535: extern int __vwprintf_chk (int __flag, const wchar_t *__restrict __format,
+16535:       __gnuc_va_list __ap);
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+16535: wprintf (const wchar_t *__restrict __fmt, ...)
+16535: {
+16535:   return __wprintf_chk (2 - 1, __fmt, __builtin_va_arg_pack ());
+16535: }
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+16535: fwprintf (__FILE *__restrict __stream, const wchar_t *__restrict __fmt, ...)
+16535: {
+16535:   return __fwprintf_chk (__stream, 2 - 1, __fmt,
+16535:     __builtin_va_arg_pack ());
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+16535: vwprintf (const wchar_t *__restrict __fmt, __gnuc_va_list __ap)
+16535: {
+16535:   return __vwprintf_chk (2 - 1, __fmt, __ap);
+16535: }
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+16535: vfwprintf (__FILE *__restrict __stream,
+16535:     const wchar_t *__restrict __fmt, __gnuc_va_list __ap)
+16535: {
+16535:   return __vfwprintf_chk (__stream, 2 - 1, __fmt, __ap);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: extern wchar_t *__fgetws_chk (wchar_t *__restrict __s, size_t __size, int __n,
+16535:          __FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+16535: extern wchar_t *__fgetws_alias (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) __asm__ ("" "fgetws")
+16535: 
+16535:                                               __attribute__ ((__warn_unused_result__));
+16535: extern wchar_t *__fgetws_chk_warn (wchar_t *__restrict __s, size_t __size, int __n, __FILE *__restrict __stream) __asm__ ("" "__fgetws_chk")
+16535: 
+16535: 
+16535:      __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgetws called with bigger size than length " "of destination buffer")))
+16535:                                  ;
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) wchar_t *
+16535: fgetws (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream)
+16535: {
+16535:   if (__builtin_object_size (__s, 2 > 1) != (size_t) -1)
+16535:     {
+16535:       if (!__builtin_constant_p (__n) || __n <= 0)
+16535:  return __fgetws_chk (__s, __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t),
+16535:         __n, __stream);
+16535: 
+16535:       if ((size_t) __n > __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t))
+16535:  return __fgetws_chk_warn (__s, __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t),
+16535:       __n, __stream);
+16535:     }
+16535:   return __fgetws_alias (__s, __n, __stream);
+16535: }
+16535: 
+16535: 
+16535: extern wchar_t *__fgetws_unlocked_chk (wchar_t *__restrict __s, size_t __size,
+16535:            int __n, __FILE *__restrict __stream)
+16535:   __attribute__ ((__warn_unused_result__));
+16535: extern wchar_t *__fgetws_unlocked_alias (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream) __asm__ ("" "fgetws_unlocked")
+16535: 
+16535: 
+16535:   __attribute__ ((__warn_unused_result__));
+16535: extern wchar_t *__fgetws_unlocked_chk_warn (wchar_t *__restrict __s, size_t __size, int __n, __FILE *__restrict __stream) __asm__ ("" "__fgetws_unlocked_chk")
+16535: 
+16535: 
+16535: 
+16535:      __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgetws_unlocked called with bigger size than length " "of destination buffer")))
+16535:                                  ;
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) wchar_t *
+16535: fgetws_unlocked (wchar_t *__restrict __s, int __n, __FILE *__restrict __stream)
+16535: {
+16535:   if (__builtin_object_size (__s, 2 > 1) != (size_t) -1)
+16535:     {
+16535:       if (!__builtin_constant_p (__n) || __n <= 0)
+16535:  return __fgetws_unlocked_chk (__s, __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t),
+16535:           __n, __stream);
+16535: 
+16535:       if ((size_t) __n > __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t))
+16535:  return __fgetws_unlocked_chk_warn (__s, __builtin_object_size (__s, 2 > 1) / sizeof (wchar_t),
+16535:         __n, __stream);
+16535:     }
+16535:   return __fgetws_unlocked_alias (__s, __n, __stream);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: extern size_t __wcrtomb_chk (char *__restrict __s, wchar_t __wchar,
+16535:         mbstate_t *__restrict __p,
+16535:         size_t __buflen) throw () __attribute__ ((__warn_unused_result__));
+16535: extern size_t __wcrtomb_alias (char *__restrict __s, wchar_t __wchar, mbstate_t *__restrict __ps) throw () __asm__ ("" "wcrtomb")
+16535: 
+16535:                                                 __attribute__ ((__warn_unused_result__));
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) size_t
+16535: __attribute__ ((__leaf__)) wcrtomb (char *__restrict __s, wchar_t __wchar, mbstate_t *__restrict __ps) throw ()
+16535: 
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (__builtin_object_size (__s, 2 > 1) != (size_t) -1 && 16 > __builtin_object_size (__s, 2 > 1))
+16535:     return __wcrtomb_chk (__s, __wchar, __ps, __builtin_object_size (__s, 2 > 1));
+16535:   return __wcrtomb_alias (__s, __wchar, __ps);
+16535: }
+16535: 
+16535: 
+16535: extern size_t __mbsrtowcs_chk (wchar_t *__restrict __dst,
+16535:           const char **__restrict __src,
+16535:           size_t __len, mbstate_t *__restrict __ps,
+16535:           size_t __dstlen) throw ();
+16535: extern size_t __mbsrtowcs_alias (wchar_t *__restrict __dst, const char **__restrict __src, size_t __len, mbstate_t *__restrict __ps) throw () __asm__ ("" "mbsrtowcs")
+16535: 
+16535: 
+16535: 
+16535:                    ;
+16535: extern size_t __mbsrtowcs_chk_warn (wchar_t *__restrict __dst, const char **__restrict __src, size_t __len, mbstate_t *__restrict __ps, size_t __dstlen) throw () __asm__ ("" "__mbsrtowcs_chk")
+16535: 
+16535: 
+16535: 
+16535: 
+16535:      __attribute__((__warning__ ("mbsrtowcs called with dst buffer smaller than len " "* sizeof (wchar_t)")))
+16535:                         ;
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t
+16535: __attribute__ ((__leaf__)) mbsrtowcs (wchar_t *__restrict __dst, const char **__restrict __src, size_t __len, mbstate_t *__restrict __ps) throw ()
+16535: 
+16535: {
+16535:   if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1)
+16535:     {
+16535:       if (!__builtin_constant_p (__len))
+16535:  return __mbsrtowcs_chk (__dst, __src, __len, __ps,
+16535:     __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t));
+16535: 
+16535:       if (__len > __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t))
+16535:  return __mbsrtowcs_chk_warn (__dst, __src, __len, __ps,
+16535:          __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t));
+16535:     }
+16535:   return __mbsrtowcs_alias (__dst, __src, __len, __ps);
+16535: }
+16535: 
+16535: 
+16535: extern size_t __wcsrtombs_chk (char *__restrict __dst,
+16535:           const wchar_t **__restrict __src,
+16535:           size_t __len, mbstate_t *__restrict __ps,
+16535:           size_t __dstlen) throw ();
+16535: extern size_t __wcsrtombs_alias (char *__restrict __dst, const wchar_t **__restrict __src, size_t __len, mbstate_t *__restrict __ps) throw () __asm__ ("" "wcsrtombs")
+16535: 
+16535: 
+16535: 
+16535:                    ;
+16535: extern size_t __wcsrtombs_chk_warn (char *__restrict __dst, const wchar_t **__restrict __src, size_t __len, mbstate_t *__restrict __ps, size_t __dstlen) throw () __asm__ ("" "__wcsrtombs_chk")
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     __attribute__((__warning__ ("wcsrtombs called with dst buffer smaller than len")));
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t
+16535: __attribute__ ((__leaf__)) wcsrtombs (char *__restrict __dst, const wchar_t **__restrict __src, size_t __len, mbstate_t *__restrict __ps) throw ()
+16535: 
+16535: {
+16535:   if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1)
+16535:     {
+16535:       if (!__builtin_constant_p (__len))
+16535:  return __wcsrtombs_chk (__dst, __src, __len, __ps, __builtin_object_size (__dst, 2 > 1));
+16535: 
+16535:       if (__len > __builtin_object_size (__dst, 2 > 1))
+16535:  return __wcsrtombs_chk_warn (__dst, __src, __len, __ps, __builtin_object_size (__dst, 2 > 1));
+16535:     }
+16535:   return __wcsrtombs_alias (__dst, __src, __len, __ps);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: extern size_t __mbsnrtowcs_chk (wchar_t *__restrict __dst,
+16535:     const char **__restrict __src, size_t __nmc,
+16535:     size_t __len, mbstate_t *__restrict __ps,
+16535:     size_t __dstlen) throw ();
+16535: extern size_t __mbsnrtowcs_alias (wchar_t *__restrict __dst, const char **__restrict __src, size_t __nmc, size_t __len, mbstate_t *__restrict __ps) throw () __asm__ ("" "mbsnrtowcs")
+16535: 
+16535: 
+16535: 
+16535:                     ;
+16535: extern size_t __mbsnrtowcs_chk_warn (wchar_t *__restrict __dst, const char **__restrict __src, size_t __nmc, size_t __len, mbstate_t *__restrict __ps, size_t __dstlen) throw () __asm__ ("" "__mbsnrtowcs_chk")
+16535: 
+16535: 
+16535: 
+16535: 
+16535:      __attribute__((__warning__ ("mbsnrtowcs called with dst buffer smaller than len " "* sizeof (wchar_t)")))
+16535:                         ;
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t
+16535: __attribute__ ((__leaf__)) mbsnrtowcs (wchar_t *__restrict __dst, const char **__restrict __src, size_t __nmc, size_t __len, mbstate_t *__restrict __ps) throw ()
+16535: 
+16535: {
+16535:   if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1)
+16535:     {
+16535:       if (!__builtin_constant_p (__len))
+16535:  return __mbsnrtowcs_chk (__dst, __src, __nmc, __len, __ps,
+16535:      __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t));
+16535: 
+16535:       if (__len > __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t))
+16535:  return __mbsnrtowcs_chk_warn (__dst, __src, __nmc, __len, __ps,
+16535:           __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t));
+16535:     }
+16535:   return __mbsnrtowcs_alias (__dst, __src, __nmc, __len, __ps);
+16535: }
+16535: 
+16535: 
+16535: extern size_t __wcsnrtombs_chk (char *__restrict __dst,
+16535:     const wchar_t **__restrict __src,
+16535:     size_t __nwc, size_t __len,
+16535:     mbstate_t *__restrict __ps, size_t __dstlen)
+16535:      throw ();
+16535: extern size_t __wcsnrtombs_alias (char *__restrict __dst, const wchar_t **__restrict __src, size_t __nwc, size_t __len, mbstate_t *__restrict __ps) throw () __asm__ ("" "wcsnrtombs")
+16535: 
+16535: 
+16535: 
+16535:                                                   ;
+16535: extern size_t __wcsnrtombs_chk_warn (char *__restrict __dst, const wchar_t **__restrict __src, size_t __nwc, size_t __len, mbstate_t *__restrict __ps, size_t __dstlen) throw () __asm__ ("" "__wcsnrtombs_chk")
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:      __attribute__((__warning__ ("wcsnrtombs called with dst buffer smaller than len")));
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t
+16535: __attribute__ ((__leaf__)) wcsnrtombs (char *__restrict __dst, const wchar_t **__restrict __src, size_t __nwc, size_t __len, mbstate_t *__restrict __ps) throw ()
+16535: 
+16535: {
+16535:   if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1)
+16535:     {
+16535:       if (!__builtin_constant_p (__len))
+16535:  return __wcsnrtombs_chk (__dst, __src, __nwc, __len, __ps,
+16535:      __builtin_object_size (__dst, 2 > 1));
+16535: 
+16535:       if (__len > __builtin_object_size (__dst, 2 > 1))
+16535:  return __wcsnrtombs_chk_warn (__dst, __src, __nwc, __len, __ps,
+16535:           __builtin_object_size (__dst, 2 > 1));
+16535:     }
+16535:   return __wcsnrtombs_alias (__dst, __src, __nwc, __len, __ps);
+16535: }
+16535: # 851 "/usr/include/wchar.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 45 "/usr/include/c++/8/cwchar" 2 3
+16535: # 62 "/usr/include/c++/8/cwchar" 3
+16535: namespace std
+16535: {
+16535:   using ::mbstate_t;
+16535: }
+16535: # 135 "/usr/include/c++/8/cwchar" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   using ::wint_t;
+16535: 
+16535:   using ::btowc;
+16535:   using ::fgetwc;
+16535:   using ::fgetws;
+16535:   using ::fputwc;
+16535:   using ::fputws;
+16535:   using ::fwide;
+16535:   using ::fwprintf;
+16535:   using ::fwscanf;
+16535:   using ::getwc;
+16535:   using ::getwchar;
+16535:   using ::mbrlen;
+16535:   using ::mbrtowc;
+16535:   using ::mbsinit;
+16535:   using ::mbsrtowcs;
+16535:   using ::putwc;
+16535:   using ::putwchar;
+16535: 
+16535:   using ::swprintf;
+16535: 
+16535:   using ::swscanf;
+16535:   using ::ungetwc;
+16535:   using ::vfwprintf;
+16535: 
+16535:   using ::vfwscanf;
+16535: 
+16535: 
+16535:   using ::vswprintf;
+16535: 
+16535: 
+16535:   using ::vswscanf;
+16535: 
+16535:   using ::vwprintf;
+16535: 
+16535:   using ::vwscanf;
+16535: 
+16535:   using ::wcrtomb;
+16535:   using ::wcscat;
+16535:   using ::wcscmp;
+16535:   using ::wcscoll;
+16535:   using ::wcscpy;
+16535:   using ::wcscspn;
+16535:   using ::wcsftime;
+16535:   using ::wcslen;
+16535:   using ::wcsncat;
+16535:   using ::wcsncmp;
+16535:   using ::wcsncpy;
+16535:   using ::wcsrtombs;
+16535:   using ::wcsspn;
+16535:   using ::wcstod;
+16535: 
+16535:   using ::wcstof;
+16535: 
+16535:   using ::wcstok;
+16535:   using ::wcstol;
+16535:   using ::wcstoul;
+16535:   using ::wcsxfrm;
+16535:   using ::wctob;
+16535:   using ::wmemcmp;
+16535:   using ::wmemcpy;
+16535:   using ::wmemmove;
+16535:   using ::wmemset;
+16535:   using ::wprintf;
+16535:   using ::wscanf;
+16535:   using ::wcschr;
+16535:   using ::wcspbrk;
+16535:   using ::wcsrchr;
+16535:   using ::wcsstr;
+16535:   using ::wmemchr;
+16535: # 232 "/usr/include/c++/8/cwchar" 3
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace __gnu_cxx
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   using ::wcstold;
+16535: # 257 "/usr/include/c++/8/cwchar" 3
+16535:   using ::wcstoll;
+16535:   using ::wcstoull;
+16535: 
+16535: }
+16535: 
+16535: namespace std
+16535: {
+16535:   using ::__gnu_cxx::wcstold;
+16535:   using ::__gnu_cxx::wcstoll;
+16535:   using ::__gnu_cxx::wcstoull;
+16535: }
+16535: # 277 "/usr/include/c++/8/cwchar" 3
+16535: namespace std
+16535: {
+16535: 
+16535:   using std::wcstof;
+16535: 
+16535: 
+16535:   using std::vfwscanf;
+16535: 
+16535: 
+16535:   using std::vswscanf;
+16535: 
+16535: 
+16535:   using std::vwscanf;
+16535: 
+16535: 
+16535: 
+16535:   using std::wcstold;
+16535:   using std::wcstoll;
+16535:   using std::wcstoull;
+16535: 
+16535: }
+16535: # 41 "/usr/include/c++/8/bits/postypes.h" 2 3
+16535: # 68 "/usr/include/c++/8/bits/postypes.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 88 "/usr/include/c++/8/bits/postypes.h" 3
+16535:   typedef long streamoff;
+16535: # 98 "/usr/include/c++/8/bits/postypes.h" 3
+16535:   typedef ptrdiff_t streamsize;
+16535: # 111 "/usr/include/c++/8/bits/postypes.h" 3
+16535:   template<typename _StateT>
+16535:     class fpos
+16535:     {
+16535:     private:
+16535:       streamoff _M_off;
+16535:       _StateT _M_state;
+16535: 
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       fpos()
+16535:       : _M_off(0), _M_state() { }
+16535: # 133 "/usr/include/c++/8/bits/postypes.h" 3
+16535:       fpos(streamoff __off)
+16535:       : _M_off(__off), _M_state() { }
+16535: 
+16535: 
+16535:       operator streamoff() const { return _M_off; }
+16535: 
+16535: 
+16535:       void
+16535:       state(_StateT __st)
+16535:       { _M_state = __st; }
+16535: 
+16535: 
+16535:       _StateT
+16535:       state() const
+16535:       { return _M_state; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       fpos&
+16535:       operator+=(streamoff __off)
+16535:       {
+16535:  _M_off += __off;
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       fpos&
+16535:       operator-=(streamoff __off)
+16535:       {
+16535:  _M_off -= __off;
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       fpos
+16535:       operator+(streamoff __off) const
+16535:       {
+16535:  fpos __pos(*this);
+16535:  __pos += __off;
+16535:  return __pos;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       fpos
+16535:       operator-(streamoff __off) const
+16535:       {
+16535:  fpos __pos(*this);
+16535:  __pos -= __off;
+16535:  return __pos;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       streamoff
+16535:       operator-(const fpos& __other) const
+16535:       { return _M_off - __other._M_off; }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _StateT>
+16535:     inline bool
+16535:     operator==(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs)
+16535:     { return streamoff(__lhs) == streamoff(__rhs); }
+16535: 
+16535:   template<typename _StateT>
+16535:     inline bool
+16535:     operator!=(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs)
+16535:     { return streamoff(__lhs) != streamoff(__rhs); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef fpos<mbstate_t> streampos;
+16535: 
+16535:   typedef fpos<mbstate_t> wstreampos;
+16535: 
+16535: 
+16535: 
+16535:   typedef fpos<mbstate_t> u16streampos;
+16535: 
+16535:   typedef fpos<mbstate_t> u32streampos;
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 41 "/usr/include/c++/8/iosfwd" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 74 "/usr/include/c++/8/iosfwd" 3
+16535:   class ios_base;
+16535: 
+16535:   template<typename _CharT, typename _Traits = char_traits<_CharT> >
+16535:     class basic_ios;
+16535: 
+16535:   template<typename _CharT, typename _Traits = char_traits<_CharT> >
+16535:     class basic_streambuf;
+16535: 
+16535:   template<typename _CharT, typename _Traits = char_traits<_CharT> >
+16535:     class basic_istream;
+16535: 
+16535:   template<typename _CharT, typename _Traits = char_traits<_CharT> >
+16535:     class basic_ostream;
+16535: 
+16535:   template<typename _CharT, typename _Traits = char_traits<_CharT> >
+16535:     class basic_iostream;
+16535: 
+16535: 
+16535: namespace __cxx11 {
+16535: 
+16535:   template<typename _CharT, typename _Traits = char_traits<_CharT>,
+16535:      typename _Alloc = allocator<_CharT> >
+16535:     class basic_stringbuf;
+16535: 
+16535:   template<typename _CharT, typename _Traits = char_traits<_CharT>,
+16535:     typename _Alloc = allocator<_CharT> >
+16535:     class basic_istringstream;
+16535: 
+16535:   template<typename _CharT, typename _Traits = char_traits<_CharT>,
+16535:     typename _Alloc = allocator<_CharT> >
+16535:     class basic_ostringstream;
+16535: 
+16535:   template<typename _CharT, typename _Traits = char_traits<_CharT>,
+16535:     typename _Alloc = allocator<_CharT> >
+16535:     class basic_stringstream;
+16535: 
+16535: }
+16535: 
+16535:   template<typename _CharT, typename _Traits = char_traits<_CharT> >
+16535:     class basic_filebuf;
+16535: 
+16535:   template<typename _CharT, typename _Traits = char_traits<_CharT> >
+16535:     class basic_ifstream;
+16535: 
+16535:   template<typename _CharT, typename _Traits = char_traits<_CharT> >
+16535:     class basic_ofstream;
+16535: 
+16535:   template<typename _CharT, typename _Traits = char_traits<_CharT> >
+16535:     class basic_fstream;
+16535: 
+16535:   template<typename _CharT, typename _Traits = char_traits<_CharT> >
+16535:     class istreambuf_iterator;
+16535: 
+16535:   template<typename _CharT, typename _Traits = char_traits<_CharT> >
+16535:     class ostreambuf_iterator;
+16535: 
+16535: 
+16535: 
+16535:   typedef basic_ios<char> ios;
+16535: 
+16535: 
+16535:   typedef basic_streambuf<char> streambuf;
+16535: 
+16535: 
+16535:   typedef basic_istream<char> istream;
+16535: 
+16535: 
+16535:   typedef basic_ostream<char> ostream;
+16535: 
+16535: 
+16535:   typedef basic_iostream<char> iostream;
+16535: 
+16535: 
+16535:   typedef basic_stringbuf<char> stringbuf;
+16535: 
+16535: 
+16535:   typedef basic_istringstream<char> istringstream;
+16535: 
+16535: 
+16535:   typedef basic_ostringstream<char> ostringstream;
+16535: 
+16535: 
+16535:   typedef basic_stringstream<char> stringstream;
+16535: 
+16535: 
+16535:   typedef basic_filebuf<char> filebuf;
+16535: 
+16535: 
+16535:   typedef basic_ifstream<char> ifstream;
+16535: 
+16535: 
+16535:   typedef basic_ofstream<char> ofstream;
+16535: 
+16535: 
+16535:   typedef basic_fstream<char> fstream;
+16535: 
+16535: 
+16535: 
+16535:   typedef basic_ios<wchar_t> wios;
+16535: 
+16535: 
+16535:   typedef basic_streambuf<wchar_t> wstreambuf;
+16535: 
+16535: 
+16535:   typedef basic_istream<wchar_t> wistream;
+16535: 
+16535: 
+16535:   typedef basic_ostream<wchar_t> wostream;
+16535: 
+16535: 
+16535:   typedef basic_iostream<wchar_t> wiostream;
+16535: 
+16535: 
+16535:   typedef basic_stringbuf<wchar_t> wstringbuf;
+16535: 
+16535: 
+16535:   typedef basic_istringstream<wchar_t> wistringstream;
+16535: 
+16535: 
+16535:   typedef basic_ostringstream<wchar_t> wostringstream;
+16535: 
+16535: 
+16535:   typedef basic_stringstream<wchar_t> wstringstream;
+16535: 
+16535: 
+16535:   typedef basic_filebuf<wchar_t> wfilebuf;
+16535: 
+16535: 
+16535:   typedef basic_ifstream<wchar_t> wifstream;
+16535: 
+16535: 
+16535:   typedef basic_ofstream<wchar_t> wofstream;
+16535: 
+16535: 
+16535:   typedef basic_fstream<wchar_t> wfstream;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 35 "/usr/include/gmpxx.h" 2 3 4
+16535: 
+16535: # 1 "/usr/include/c++/8/cstring" 1 3 4
+16535: # 39 "/usr/include/c++/8/cstring" 3 4
+16535:        
+16535: # 40 "/usr/include/c++/8/cstring" 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/string.h" 1 3 4
+16535: # 26 "/usr/include/string.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 1 3 4
+16535: # 27 "/usr/include/string.h" 2 3 4
+16535: 
+16535: extern "C" {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
+16535: # 34 "/usr/include/string.h" 2 3 4
+16535: # 42 "/usr/include/string.h" 3 4
+16535: extern void *memcpy (void *__restrict __dest, const void *__restrict __src,
+16535:        size_t __n) throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern void *memmove (void *__dest, const void *__src, size_t __n)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
+16535:         int __c, size_t __n)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern void *memset (void *__s, int __c, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int memcmp (const void *__s1, const void *__s2, size_t __n)
+16535:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: 
+16535: extern "C++"
+16535: {
+16535: extern void *memchr (void *__s, int __c, size_t __n)
+16535:       throw () __asm ("memchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+16535: extern const void *memchr (const void *__s, int __c, size_t __n)
+16535:       throw () __asm ("memchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) void *
+16535: memchr (void *__s, int __c, size_t __n) throw ()
+16535: {
+16535:   return __builtin_memchr (__s, __c, __n);
+16535: }
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const void *
+16535: memchr (const void *__s, int __c, size_t __n) throw ()
+16535: {
+16535:   return __builtin_memchr (__s, __c, __n);
+16535: }
+16535: 
+16535: }
+16535: # 98 "/usr/include/string.h" 3 4
+16535: extern "C++" void *rawmemchr (void *__s, int __c)
+16535:      throw () __asm ("rawmemchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+16535: extern "C++" const void *rawmemchr (const void *__s, int __c)
+16535:      throw () __asm ("rawmemchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern "C++" void *memrchr (void *__s, int __c, size_t __n)
+16535:       throw () __asm ("memrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+16535: extern "C++" const void *memrchr (const void *__s, int __c, size_t __n)
+16535:       throw () __asm ("memrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+16535: # 121 "/usr/include/string.h" 3 4
+16535: extern char *strcpy (char *__restrict __dest, const char *__restrict __src)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: extern char *strncpy (char *__restrict __dest,
+16535:         const char *__restrict __src, size_t __n)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern char *strcat (char *__restrict __dest, const char *__restrict __src)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: extern char *strncat (char *__restrict __dest, const char *__restrict __src,
+16535:         size_t __n) throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern int strcmp (const char *__s1, const char *__s2)
+16535:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: extern int strncmp (const char *__s1, const char *__s2, size_t __n)
+16535:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern int strcoll (const char *__s1, const char *__s2)
+16535:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: extern size_t strxfrm (char *__restrict __dest,
+16535:          const char *__restrict __src, size_t __n)
+16535:      throw () __attribute__ ((__nonnull__ (2)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int strcoll_l (const char *__s1, const char *__s2, locale_t __l)
+16535:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
+16535: 
+16535: 
+16535: extern size_t strxfrm_l (char *__dest, const char *__src, size_t __n,
+16535:     locale_t __l) throw () __attribute__ ((__nonnull__ (2, 4)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *strdup (const char *__s)
+16535:      throw () __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *strndup (const char *__string, size_t __n)
+16535:      throw () __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
+16535: # 203 "/usr/include/string.h" 3 4
+16535: extern "C++"
+16535: {
+16535: extern char *strchr (char *__s, int __c)
+16535:      throw () __asm ("strchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+16535: extern const char *strchr (const char *__s, int __c)
+16535:      throw () __asm ("strchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
+16535: strchr (char *__s, int __c) throw ()
+16535: {
+16535:   return __builtin_strchr (__s, __c);
+16535: }
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
+16535: strchr (const char *__s, int __c) throw ()
+16535: {
+16535:   return __builtin_strchr (__s, __c);
+16535: }
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern "C++"
+16535: {
+16535: extern char *strrchr (char *__s, int __c)
+16535:      throw () __asm ("strrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+16535: extern const char *strrchr (const char *__s, int __c)
+16535:      throw () __asm ("strrchr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
+16535: strrchr (char *__s, int __c) throw ()
+16535: {
+16535:   return __builtin_strrchr (__s, __c);
+16535: }
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
+16535: strrchr (const char *__s, int __c) throw ()
+16535: {
+16535:   return __builtin_strrchr (__s, __c);
+16535: }
+16535: 
+16535: }
+16535: # 260 "/usr/include/string.h" 3 4
+16535: extern "C++" char *strchrnul (char *__s, int __c)
+16535:      throw () __asm ("strchrnul") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+16535: extern "C++" const char *strchrnul (const char *__s, int __c)
+16535:      throw () __asm ("strchrnul") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+16535: # 272 "/usr/include/string.h" 3 4
+16535: extern size_t strcspn (const char *__s, const char *__reject)
+16535:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern size_t strspn (const char *__s, const char *__accept)
+16535:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern "C++"
+16535: {
+16535: extern char *strpbrk (char *__s, const char *__accept)
+16535:      throw () __asm ("strpbrk") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+16535: extern const char *strpbrk (const char *__s, const char *__accept)
+16535:      throw () __asm ("strpbrk") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
+16535: strpbrk (char *__s, const char *__accept) throw ()
+16535: {
+16535:   return __builtin_strpbrk (__s, __accept);
+16535: }
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
+16535: strpbrk (const char *__s, const char *__accept) throw ()
+16535: {
+16535:   return __builtin_strpbrk (__s, __accept);
+16535: }
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern "C++"
+16535: {
+16535: extern char *strstr (char *__haystack, const char *__needle)
+16535:      throw () __asm ("strstr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+16535: extern const char *strstr (const char *__haystack, const char *__needle)
+16535:      throw () __asm ("strstr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
+16535: strstr (char *__haystack, const char *__needle) throw ()
+16535: {
+16535:   return __builtin_strstr (__haystack, __needle);
+16535: }
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
+16535: strstr (const char *__haystack, const char *__needle) throw ()
+16535: {
+16535:   return __builtin_strstr (__haystack, __needle);
+16535: }
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *strtok (char *__restrict __s, const char *__restrict __delim)
+16535:      throw () __attribute__ ((__nonnull__ (2)));
+16535: 
+16535: 
+16535: 
+16535: extern char *__strtok_r (char *__restrict __s,
+16535:     const char *__restrict __delim,
+16535:     char **__restrict __save_ptr)
+16535:      throw () __attribute__ ((__nonnull__ (2, 3)));
+16535: 
+16535: extern char *strtok_r (char *__restrict __s, const char *__restrict __delim,
+16535:          char **__restrict __save_ptr)
+16535:      throw () __attribute__ ((__nonnull__ (2, 3)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern "C++" char *strcasestr (char *__haystack, const char *__needle)
+16535:      throw () __asm ("strcasestr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+16535: extern "C++" const char *strcasestr (const char *__haystack,
+16535:          const char *__needle)
+16535:      throw () __asm ("strcasestr") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+16535: # 368 "/usr/include/string.h" 3 4
+16535: extern void *memmem (const void *__haystack, size_t __haystacklen,
+16535:        const void *__needle, size_t __needlelen)
+16535:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 3)));
+16535: 
+16535: 
+16535: 
+16535: extern void *__mempcpy (void *__restrict __dest,
+16535:    const void *__restrict __src, size_t __n)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: extern void *mempcpy (void *__restrict __dest,
+16535:         const void *__restrict __src, size_t __n)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern size_t strlen (const char *__s)
+16535:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern size_t strnlen (const char *__string, size_t __maxlen)
+16535:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *strerror (int __errnum) throw ();
+16535: # 420 "/usr/include/string.h" 3 4
+16535: extern char *strerror_r (int __errnum, char *__buf, size_t __buflen)
+16535:      throw () __attribute__ ((__nonnull__ (2))) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *strerror_l (int __errnum, locale_t __l) throw ();
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/strings.h" 1 3 4
+16535: # 23 "/usr/include/strings.h" 3 4
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
+16535: # 24 "/usr/include/strings.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern "C" {
+16535: 
+16535: 
+16535: 
+16535: extern int bcmp (const void *__s1, const void *__s2, size_t __n)
+16535:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern void bcopy (const void *__src, void *__dest, size_t __n)
+16535:   throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern void bzero (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: extern "C++"
+16535: {
+16535: extern char *index (char *__s, int __c)
+16535:      throw () __asm ("index") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+16535: extern const char *index (const char *__s, int __c)
+16535:      throw () __asm ("index") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
+16535: index (char *__s, int __c) throw ()
+16535: {
+16535:   return __builtin_index (__s, __c);
+16535: }
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
+16535: index (const char *__s, int __c) throw ()
+16535: {
+16535:   return __builtin_index (__s, __c);
+16535: }
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern "C++"
+16535: {
+16535: extern char *rindex (char *__s, int __c)
+16535:      throw () __asm ("rindex") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+16535: extern const char *rindex (const char *__s, int __c)
+16535:      throw () __asm ("rindex") __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char *
+16535: rindex (char *__s, int __c) throw ()
+16535: {
+16535:   return __builtin_rindex (__s, __c);
+16535: }
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) const char *
+16535: rindex (const char *__s, int __c) throw ()
+16535: {
+16535:   return __builtin_rindex (__s, __c);
+16535: }
+16535: 
+16535: }
+16535: # 104 "/usr/include/strings.h" 3 4
+16535: extern int ffs (int __i) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int ffsl (long int __l) throw () __attribute__ ((__const__));
+16535: __extension__ extern int ffsll (long long int __ll)
+16535:      throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: extern int strcasecmp (const char *__s1, const char *__s2)
+16535:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern int strncasecmp (const char *__s1, const char *__s2, size_t __n)
+16535:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int strcasecmp_l (const char *__s1, const char *__s2, locale_t __loc)
+16535:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
+16535: 
+16535: 
+16535: 
+16535: extern int strncasecmp_l (const char *__s1, const char *__s2,
+16535:      size_t __n, locale_t __loc)
+16535:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 4)));
+16535: 
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/strings_fortified.h" 1 3 4
+16535: # 22 "/usr/include/x86_64-linux-gnu/bits/strings_fortified.h" 3 4
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void
+16535: __attribute__ ((__leaf__)) bcopy (const void *__src, void *__dest, size_t __len) throw ()
+16535: {
+16535:   (void) __builtin___memmove_chk (__dest, __src, __len, __builtin_object_size (__dest, 0));
+16535: }
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void
+16535: __attribute__ ((__leaf__)) bzero (void *__dest, size_t __len) throw ()
+16535: {
+16535:   (void) __builtin___memset_chk (__dest, '\0', __len, __builtin_object_size (__dest, 0));
+16535: }
+16535: # 145 "/usr/include/strings.h" 2 3 4
+16535: # 432 "/usr/include/string.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: extern void explicit_bzero (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: extern char *strsep (char **__restrict __stringp,
+16535:        const char *__restrict __delim)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *strsignal (int __sig) throw ();
+16535: 
+16535: 
+16535: extern char *__stpcpy (char *__restrict __dest, const char *__restrict __src)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: extern char *stpcpy (char *__restrict __dest, const char *__restrict __src)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: 
+16535: extern char *__stpncpy (char *__restrict __dest,
+16535:    const char *__restrict __src, size_t __n)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: extern char *stpncpy (char *__restrict __dest,
+16535:         const char *__restrict __src, size_t __n)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int strverscmp (const char *__s1, const char *__s2)
+16535:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern char *strfry (char *__string) throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern void *memfrob (void *__s, size_t __n) throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern "C++" char *basename (char *__filename)
+16535:      throw () __asm ("basename") __attribute__ ((__nonnull__ (1)));
+16535: extern "C++" const char *basename (const char *__filename)
+16535:      throw () __asm ("basename") __attribute__ ((__nonnull__ (1)));
+16535: # 494 "/usr/include/string.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/string_fortified.h" 1 3 4
+16535: # 30 "/usr/include/x86_64-linux-gnu/bits/string_fortified.h" 3 4
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void *
+16535: __attribute__ ((__leaf__)) memcpy (void *__restrict __dest, const void *__restrict __src, size_t __len) throw ()
+16535: 
+16535: {
+16535:   return __builtin___memcpy_chk (__dest, __src, __len, __builtin_object_size (__dest, 0));
+16535: }
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void *
+16535: __attribute__ ((__leaf__)) memmove (void *__dest, const void *__src, size_t __len) throw ()
+16535: {
+16535:   return __builtin___memmove_chk (__dest, __src, __len, __builtin_object_size (__dest, 0));
+16535: }
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void *
+16535: __attribute__ ((__leaf__)) mempcpy (void *__restrict __dest, const void *__restrict __src, size_t __len) throw ()
+16535: 
+16535: {
+16535:   return __builtin___mempcpy_chk (__dest, __src, __len, __builtin_object_size (__dest, 0));
+16535: }
+16535: # 58 "/usr/include/x86_64-linux-gnu/bits/string_fortified.h" 3 4
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void *
+16535: __attribute__ ((__leaf__)) memset (void *__dest, int __ch, size_t __len) throw ()
+16535: {
+16535: # 71 "/usr/include/x86_64-linux-gnu/bits/string_fortified.h" 3 4
+16535:   return __builtin___memset_chk (__dest, __ch, __len, __builtin_object_size (__dest, 0));
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: void __explicit_bzero_chk (void *__dest, size_t __len, size_t __destlen)
+16535:   throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) void
+16535: __attribute__ ((__leaf__)) explicit_bzero (void *__dest, size_t __len) throw ()
+16535: {
+16535:   __explicit_bzero_chk (__dest, __len, __builtin_object_size (__dest, 0));
+16535: }
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
+16535: __attribute__ ((__leaf__)) strcpy (char *__restrict __dest, const char *__restrict __src) throw ()
+16535: {
+16535:   return __builtin___strcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
+16535: }
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
+16535: __attribute__ ((__leaf__)) stpcpy (char *__restrict __dest, const char *__restrict __src) throw ()
+16535: {
+16535:   return __builtin___stpcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
+16535: }
+16535: 
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
+16535: __attribute__ ((__leaf__)) strncpy (char *__restrict __dest, const char *__restrict __src, size_t __len) throw ()
+16535: 
+16535: {
+16535:   return __builtin___strncpy_chk (__dest, __src, __len, __builtin_object_size (__dest, 2 > 1));
+16535: }
+16535: 
+16535: 
+16535: extern char *__stpncpy_chk (char *__dest, const char *__src, size_t __n,
+16535:        size_t __destlen) throw ();
+16535: extern char *__stpncpy_alias (char *__dest, const char *__src, size_t __n) throw () __asm__ ("" "stpncpy")
+16535:                                  ;
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
+16535: __attribute__ ((__leaf__)) stpncpy (char *__dest, const char *__src, size_t __n) throw ()
+16535: {
+16535:   if (__builtin_object_size (__dest, 2 > 1) != (size_t) -1
+16535:       && (!__builtin_constant_p (__n) || __n > __builtin_object_size (__dest, 2 > 1)))
+16535:     return __stpncpy_chk (__dest, __src, __n, __builtin_object_size (__dest, 2 > 1));
+16535:   return __stpncpy_alias (__dest, __src, __n);
+16535: }
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
+16535: __attribute__ ((__leaf__)) strcat (char *__restrict __dest, const char *__restrict __src) throw ()
+16535: {
+16535:   return __builtin___strcat_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
+16535: }
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char *
+16535: __attribute__ ((__leaf__)) strncat (char *__restrict __dest, const char *__restrict __src, size_t __len) throw ()
+16535: 
+16535: {
+16535:   return __builtin___strncat_chk (__dest, __src, __len, __builtin_object_size (__dest, 2 > 1));
+16535: }
+16535: # 495 "/usr/include/string.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 43 "/usr/include/c++/8/cstring" 2 3
+16535: # 71 "/usr/include/c++/8/cstring" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   using ::memchr;
+16535:   using ::memcmp;
+16535:   using ::memcpy;
+16535:   using ::memmove;
+16535:   using ::memset;
+16535:   using ::strcat;
+16535:   using ::strcmp;
+16535:   using ::strcoll;
+16535:   using ::strcpy;
+16535:   using ::strcspn;
+16535:   using ::strerror;
+16535:   using ::strlen;
+16535:   using ::strncat;
+16535:   using ::strncmp;
+16535:   using ::strncpy;
+16535:   using ::strspn;
+16535:   using ::strtok;
+16535:   using ::strxfrm;
+16535:   using ::strchr;
+16535:   using ::strpbrk;
+16535:   using ::strrchr;
+16535:   using ::strstr;
+16535: # 120 "/usr/include/c++/8/cstring" 3
+16535: 
+16535: }
+16535: # 37 "/usr/include/gmpxx.h" 2 3 4
+16535: # 1 "/usr/include/c++/8/limits" 1 3 4
+16535: # 40 "/usr/include/c++/8/limits" 3 4
+16535:        
+16535: # 41 "/usr/include/c++/8/limits" 3
+16535: # 158 "/usr/include/c++/8/limits" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   enum float_round_style
+16535:   {
+16535:     round_indeterminate = -1,
+16535:     round_toward_zero = 0,
+16535:     round_to_nearest = 1,
+16535:     round_toward_infinity = 2,
+16535:     round_toward_neg_infinity = 3
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   enum float_denorm_style
+16535:   {
+16535: 
+16535:     denorm_indeterminate = -1,
+16535: 
+16535:     denorm_absent = 0,
+16535: 
+16535:     denorm_present = 1
+16535:   };
+16535: # 202 "/usr/include/c++/8/limits" 3
+16535:   struct __numeric_limits_base
+16535:   {
+16535: 
+16535: 
+16535:     static constexpr bool is_specialized = false;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     static constexpr int digits = 0;
+16535: 
+16535: 
+16535:     static constexpr int digits10 = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     static constexpr int max_digits10 = 0;
+16535: 
+16535: 
+16535: 
+16535:     static constexpr bool is_signed = false;
+16535: 
+16535: 
+16535:     static constexpr bool is_integer = false;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     static constexpr bool is_exact = false;
+16535: 
+16535: 
+16535: 
+16535:     static constexpr int radix = 0;
+16535: 
+16535: 
+16535: 
+16535:     static constexpr int min_exponent = 0;
+16535: 
+16535: 
+16535: 
+16535:     static constexpr int min_exponent10 = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     static constexpr int max_exponent = 0;
+16535: 
+16535: 
+16535: 
+16535:     static constexpr int max_exponent10 = 0;
+16535: 
+16535: 
+16535:     static constexpr bool has_infinity = false;
+16535: 
+16535: 
+16535: 
+16535:     static constexpr bool has_quiet_NaN = false;
+16535: 
+16535: 
+16535: 
+16535:     static constexpr bool has_signaling_NaN = false;
+16535: 
+16535: 
+16535:     static constexpr float_denorm_style has_denorm = denorm_absent;
+16535: 
+16535: 
+16535: 
+16535:     static constexpr bool has_denorm_loss = false;
+16535: 
+16535: 
+16535: 
+16535:     static constexpr bool is_iec559 = false;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     static constexpr bool is_bounded = false;
+16535: # 288 "/usr/include/c++/8/limits" 3
+16535:     static constexpr bool is_modulo = false;
+16535: 
+16535: 
+16535:     static constexpr bool traps = false;
+16535: 
+16535: 
+16535:     static constexpr bool tinyness_before = false;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     static constexpr float_round_style round_style =
+16535:           round_toward_zero;
+16535:   };
+16535: # 311 "/usr/include/c++/8/limits" 3
+16535:   template<typename _Tp>
+16535:     struct numeric_limits : public __numeric_limits_base
+16535:     {
+16535: 
+16535: 
+16535:       static constexpr _Tp
+16535:       min() noexcept { return _Tp(); }
+16535: 
+16535: 
+16535:       static constexpr _Tp
+16535:       max() noexcept { return _Tp(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       static constexpr _Tp
+16535:       lowest() noexcept { return _Tp(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       static constexpr _Tp
+16535:       epsilon() noexcept { return _Tp(); }
+16535: 
+16535: 
+16535:       static constexpr _Tp
+16535:       round_error() noexcept { return _Tp(); }
+16535: 
+16535: 
+16535:       static constexpr _Tp
+16535:       infinity() noexcept { return _Tp(); }
+16535: 
+16535: 
+16535: 
+16535:       static constexpr _Tp
+16535:       quiet_NaN() noexcept { return _Tp(); }
+16535: 
+16535: 
+16535: 
+16535:       static constexpr _Tp
+16535:       signaling_NaN() noexcept { return _Tp(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       static constexpr _Tp
+16535:       denorm_min() noexcept { return _Tp(); }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct numeric_limits<const _Tp>
+16535:     : public numeric_limits<_Tp> { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct numeric_limits<volatile _Tp>
+16535:     : public numeric_limits<_Tp> { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct numeric_limits<const volatile _Tp>
+16535:     : public numeric_limits<_Tp> { };
+16535: # 382 "/usr/include/c++/8/limits" 3
+16535:   template<>
+16535:     struct numeric_limits<bool>
+16535:     {
+16535:       static constexpr bool is_specialized = true;
+16535: 
+16535:       static constexpr bool
+16535:       min() noexcept { return false; }
+16535: 
+16535:       static constexpr bool
+16535:       max() noexcept { return true; }
+16535: 
+16535: 
+16535:       static constexpr bool
+16535:       lowest() noexcept { return min(); }
+16535: 
+16535:       static constexpr int digits = 1;
+16535:       static constexpr int digits10 = 0;
+16535: 
+16535:       static constexpr int max_digits10 = 0;
+16535: 
+16535:       static constexpr bool is_signed = false;
+16535:       static constexpr bool is_integer = true;
+16535:       static constexpr bool is_exact = true;
+16535:       static constexpr int radix = 2;
+16535: 
+16535:       static constexpr bool
+16535:       epsilon() noexcept { return false; }
+16535: 
+16535:       static constexpr bool
+16535:       round_error() noexcept { return false; }
+16535: 
+16535:       static constexpr int min_exponent = 0;
+16535:       static constexpr int min_exponent10 = 0;
+16535:       static constexpr int max_exponent = 0;
+16535:       static constexpr int max_exponent10 = 0;
+16535: 
+16535:       static constexpr bool has_infinity = false;
+16535:       static constexpr bool has_quiet_NaN = false;
+16535:       static constexpr bool has_signaling_NaN = false;
+16535:       static constexpr float_denorm_style has_denorm
+16535:        = denorm_absent;
+16535:       static constexpr bool has_denorm_loss = false;
+16535: 
+16535:       static constexpr bool
+16535:       infinity() noexcept { return false; }
+16535: 
+16535:       static constexpr bool
+16535:       quiet_NaN() noexcept { return false; }
+16535: 
+16535:       static constexpr bool
+16535:       signaling_NaN() noexcept { return false; }
+16535: 
+16535:       static constexpr bool
+16535:       denorm_min() noexcept { return false; }
+16535: 
+16535:       static constexpr bool is_iec559 = false;
+16535:       static constexpr bool is_bounded = true;
+16535:       static constexpr bool is_modulo = false;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       static constexpr bool traps = true;
+16535:       static constexpr bool tinyness_before = false;
+16535:       static constexpr float_round_style round_style
+16535:        = round_toward_zero;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct numeric_limits<char>
+16535:     {
+16535:       static constexpr bool is_specialized = true;
+16535: 
+16535:       static constexpr char
+16535:       min() noexcept { return (((char)(-1) < 0) ? -(((char)(-1) < 0) ? (((((char)1 << ((sizeof(char) * 8 - ((char)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char)0) - 1 : (char)0); }
+16535: 
+16535:       static constexpr char
+16535:       max() noexcept { return (((char)(-1) < 0) ? (((((char)1 << ((sizeof(char) * 8 - ((char)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char)0); }
+16535: 
+16535: 
+16535:       static constexpr char
+16535:       lowest() noexcept { return min(); }
+16535: 
+16535: 
+16535:       static constexpr int digits = (sizeof(char) * 8 - ((char)(-1) < 0));
+16535:       static constexpr int digits10 = ((sizeof(char) * 8 - ((char)(-1) < 0)) * 643L / 2136);
+16535: 
+16535:       static constexpr int max_digits10 = 0;
+16535: 
+16535:       static constexpr bool is_signed = ((char)(-1) < 0);
+16535:       static constexpr bool is_integer = true;
+16535:       static constexpr bool is_exact = true;
+16535:       static constexpr int radix = 2;
+16535: 
+16535:       static constexpr char
+16535:       epsilon() noexcept { return 0; }
+16535: 
+16535:       static constexpr char
+16535:       round_error() noexcept { return 0; }
+16535: 
+16535:       static constexpr int min_exponent = 0;
+16535:       static constexpr int min_exponent10 = 0;
+16535:       static constexpr int max_exponent = 0;
+16535:       static constexpr int max_exponent10 = 0;
+16535: 
+16535:       static constexpr bool has_infinity = false;
+16535:       static constexpr bool has_quiet_NaN = false;
+16535:       static constexpr bool has_signaling_NaN = false;
+16535:       static constexpr float_denorm_style has_denorm
+16535:        = denorm_absent;
+16535:       static constexpr bool has_denorm_loss = false;
+16535: 
+16535:       static constexpr
+16535:       char infinity() noexcept { return char(); }
+16535: 
+16535:       static constexpr char
+16535:       quiet_NaN() noexcept { return char(); }
+16535: 
+16535:       static constexpr char
+16535:       signaling_NaN() noexcept { return char(); }
+16535: 
+16535:       static constexpr char
+16535:       denorm_min() noexcept { return static_cast<char>(0); }
+16535: 
+16535:       static constexpr bool is_iec559 = false;
+16535:       static constexpr bool is_bounded = true;
+16535:       static constexpr bool is_modulo = !is_signed;
+16535: 
+16535:       static constexpr bool traps = true;
+16535:       static constexpr bool tinyness_before = false;
+16535:       static constexpr float_round_style round_style
+16535:        = round_toward_zero;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct numeric_limits<signed char>
+16535:     {
+16535:       static constexpr bool is_specialized = true;
+16535: 
+16535:       static constexpr signed char
+16535:       min() noexcept { return -0x7f - 1; }
+16535: 
+16535:       static constexpr signed char
+16535:       max() noexcept { return 0x7f; }
+16535: 
+16535: 
+16535:       static constexpr signed char
+16535:       lowest() noexcept { return min(); }
+16535: 
+16535: 
+16535:       static constexpr int digits = (sizeof(signed char) * 8 - ((signed char)(-1) < 0));
+16535:       static constexpr int digits10
+16535:        = ((sizeof(signed char) * 8 - ((signed char)(-1) < 0)) * 643L / 2136);
+16535: 
+16535:       static constexpr int max_digits10 = 0;
+16535: 
+16535:       static constexpr bool is_signed = true;
+16535:       static constexpr bool is_integer = true;
+16535:       static constexpr bool is_exact = true;
+16535:       static constexpr int radix = 2;
+16535: 
+16535:       static constexpr signed char
+16535:       epsilon() noexcept { return 0; }
+16535: 
+16535:       static constexpr signed char
+16535:       round_error() noexcept { return 0; }
+16535: 
+16535:       static constexpr int min_exponent = 0;
+16535:       static constexpr int min_exponent10 = 0;
+16535:       static constexpr int max_exponent = 0;
+16535:       static constexpr int max_exponent10 = 0;
+16535: 
+16535:       static constexpr bool has_infinity = false;
+16535:       static constexpr bool has_quiet_NaN = false;
+16535:       static constexpr bool has_signaling_NaN = false;
+16535:       static constexpr float_denorm_style has_denorm
+16535:        = denorm_absent;
+16535:       static constexpr bool has_denorm_loss = false;
+16535: 
+16535:       static constexpr signed char
+16535:       infinity() noexcept { return static_cast<signed char>(0); }
+16535: 
+16535:       static constexpr signed char
+16535:       quiet_NaN() noexcept { return static_cast<signed char>(0); }
+16535: 
+16535:       static constexpr signed char
+16535:       signaling_NaN() noexcept
+16535:       { return static_cast<signed char>(0); }
+16535: 
+16535:       static constexpr signed char
+16535:       denorm_min() noexcept
+16535:       { return static_cast<signed char>(0); }
+16535: 
+16535:       static constexpr bool is_iec559 = false;
+16535:       static constexpr bool is_bounded = true;
+16535:       static constexpr bool is_modulo = false;
+16535: 
+16535:       static constexpr bool traps = true;
+16535:       static constexpr bool tinyness_before = false;
+16535:       static constexpr float_round_style round_style
+16535:        = round_toward_zero;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct numeric_limits<unsigned char>
+16535:     {
+16535:       static constexpr bool is_specialized = true;
+16535: 
+16535:       static constexpr unsigned char
+16535:       min() noexcept { return 0; }
+16535: 
+16535:       static constexpr unsigned char
+16535:       max() noexcept { return 0x7f * 2U + 1; }
+16535: 
+16535: 
+16535:       static constexpr unsigned char
+16535:       lowest() noexcept { return min(); }
+16535: 
+16535: 
+16535:       static constexpr int digits
+16535:        = (sizeof(unsigned char) * 8 - ((unsigned char)(-1) < 0));
+16535:       static constexpr int digits10
+16535:        = ((sizeof(unsigned char) * 8 - ((unsigned char)(-1) < 0)) * 643L / 2136);
+16535: 
+16535:       static constexpr int max_digits10 = 0;
+16535: 
+16535:       static constexpr bool is_signed = false;
+16535:       static constexpr bool is_integer = true;
+16535:       static constexpr bool is_exact = true;
+16535:       static constexpr int radix = 2;
+16535: 
+16535:       static constexpr unsigned char
+16535:       epsilon() noexcept { return 0; }
+16535: 
+16535:       static constexpr unsigned char
+16535:       round_error() noexcept { return 0; }
+16535: 
+16535:       static constexpr int min_exponent = 0;
+16535:       static constexpr int min_exponent10 = 0;
+16535:       static constexpr int max_exponent = 0;
+16535:       static constexpr int max_exponent10 = 0;
+16535: 
+16535:       static constexpr bool has_infinity = false;
+16535:       static constexpr bool has_quiet_NaN = false;
+16535:       static constexpr bool has_signaling_NaN = false;
+16535:       static constexpr float_denorm_style has_denorm
+16535:        = denorm_absent;
+16535:       static constexpr bool has_denorm_loss = false;
+16535: 
+16535:       static constexpr unsigned char
+16535:       infinity() noexcept
+16535:       { return static_cast<unsigned char>(0); }
+16535: 
+16535:       static constexpr unsigned char
+16535:       quiet_NaN() noexcept
+16535:       { return static_cast<unsigned char>(0); }
+16535: 
+16535:       static constexpr unsigned char
+16535:       signaling_NaN() noexcept
+16535:       { return static_cast<unsigned char>(0); }
+16535: 
+16535:       static constexpr unsigned char
+16535:       denorm_min() noexcept
+16535:       { return static_cast<unsigned char>(0); }
+16535: 
+16535:       static constexpr bool is_iec559 = false;
+16535:       static constexpr bool is_bounded = true;
+16535:       static constexpr bool is_modulo = true;
+16535: 
+16535:       static constexpr bool traps = true;
+16535:       static constexpr bool tinyness_before = false;
+16535:       static constexpr float_round_style round_style
+16535:        = round_toward_zero;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct numeric_limits<wchar_t>
+16535:     {
+16535:       static constexpr bool is_specialized = true;
+16535: 
+16535:       static constexpr wchar_t
+16535:       min() noexcept { return (((wchar_t)(-1) < 0) ? -(((wchar_t)(-1) < 0) ? (((((wchar_t)1 << ((sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(wchar_t)0) - 1 : (wchar_t)0); }
+16535: 
+16535:       static constexpr wchar_t
+16535:       max() noexcept { return (((wchar_t)(-1) < 0) ? (((((wchar_t)1 << ((sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(wchar_t)0); }
+16535: 
+16535: 
+16535:       static constexpr wchar_t
+16535:       lowest() noexcept { return min(); }
+16535: 
+16535: 
+16535:       static constexpr int digits = (sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0));
+16535:       static constexpr int digits10
+16535:        = ((sizeof(wchar_t) * 8 - ((wchar_t)(-1) < 0)) * 643L / 2136);
+16535: 
+16535:       static constexpr int max_digits10 = 0;
+16535: 
+16535:       static constexpr bool is_signed = ((wchar_t)(-1) < 0);
+16535:       static constexpr bool is_integer = true;
+16535:       static constexpr bool is_exact = true;
+16535:       static constexpr int radix = 2;
+16535: 
+16535:       static constexpr wchar_t
+16535:       epsilon() noexcept { return 0; }
+16535: 
+16535:       static constexpr wchar_t
+16535:       round_error() noexcept { return 0; }
+16535: 
+16535:       static constexpr int min_exponent = 0;
+16535:       static constexpr int min_exponent10 = 0;
+16535:       static constexpr int max_exponent = 0;
+16535:       static constexpr int max_exponent10 = 0;
+16535: 
+16535:       static constexpr bool has_infinity = false;
+16535:       static constexpr bool has_quiet_NaN = false;
+16535:       static constexpr bool has_signaling_NaN = false;
+16535:       static constexpr float_denorm_style has_denorm
+16535:        = denorm_absent;
+16535:       static constexpr bool has_denorm_loss = false;
+16535: 
+16535:       static constexpr wchar_t
+16535:       infinity() noexcept { return wchar_t(); }
+16535: 
+16535:       static constexpr wchar_t
+16535:       quiet_NaN() noexcept { return wchar_t(); }
+16535: 
+16535:       static constexpr wchar_t
+16535:       signaling_NaN() noexcept { return wchar_t(); }
+16535: 
+16535:       static constexpr wchar_t
+16535:       denorm_min() noexcept { return wchar_t(); }
+16535: 
+16535:       static constexpr bool is_iec559 = false;
+16535:       static constexpr bool is_bounded = true;
+16535:       static constexpr bool is_modulo = !is_signed;
+16535: 
+16535:       static constexpr bool traps = true;
+16535:       static constexpr bool tinyness_before = false;
+16535:       static constexpr float_round_style round_style
+16535:        = round_toward_zero;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<>
+16535:     struct numeric_limits<char16_t>
+16535:     {
+16535:       static constexpr bool is_specialized = true;
+16535: 
+16535:       static constexpr char16_t
+16535:       min() noexcept { return (((char16_t)(-1) < 0) ? -(((char16_t)(-1) < 0) ? (((((char16_t)1 << ((sizeof(char16_t) * 8 - ((char16_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char16_t)0) - 1 : (char16_t)0); }
+16535: 
+16535:       static constexpr char16_t
+16535:       max() noexcept { return (((char16_t)(-1) < 0) ? (((((char16_t)1 << ((sizeof(char16_t) * 8 - ((char16_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char16_t)0); }
+16535: 
+16535:       static constexpr char16_t
+16535:       lowest() noexcept { return min(); }
+16535: 
+16535:       static constexpr int digits = (sizeof(char16_t) * 8 - ((char16_t)(-1) < 0));
+16535:       static constexpr int digits10 = ((sizeof(char16_t) * 8 - ((char16_t)(-1) < 0)) * 643L / 2136);
+16535:       static constexpr int max_digits10 = 0;
+16535:       static constexpr bool is_signed = ((char16_t)(-1) < 0);
+16535:       static constexpr bool is_integer = true;
+16535:       static constexpr bool is_exact = true;
+16535:       static constexpr int radix = 2;
+16535: 
+16535:       static constexpr char16_t
+16535:       epsilon() noexcept { return 0; }
+16535: 
+16535:       static constexpr char16_t
+16535:       round_error() noexcept { return 0; }
+16535: 
+16535:       static constexpr int min_exponent = 0;
+16535:       static constexpr int min_exponent10 = 0;
+16535:       static constexpr int max_exponent = 0;
+16535:       static constexpr int max_exponent10 = 0;
+16535: 
+16535:       static constexpr bool has_infinity = false;
+16535:       static constexpr bool has_quiet_NaN = false;
+16535:       static constexpr bool has_signaling_NaN = false;
+16535:       static constexpr float_denorm_style has_denorm = denorm_absent;
+16535:       static constexpr bool has_denorm_loss = false;
+16535: 
+16535:       static constexpr char16_t
+16535:       infinity() noexcept { return char16_t(); }
+16535: 
+16535:       static constexpr char16_t
+16535:       quiet_NaN() noexcept { return char16_t(); }
+16535: 
+16535:       static constexpr char16_t
+16535:       signaling_NaN() noexcept { return char16_t(); }
+16535: 
+16535:       static constexpr char16_t
+16535:       denorm_min() noexcept { return char16_t(); }
+16535: 
+16535:       static constexpr bool is_iec559 = false;
+16535:       static constexpr bool is_bounded = true;
+16535:       static constexpr bool is_modulo = !is_signed;
+16535: 
+16535:       static constexpr bool traps = true;
+16535:       static constexpr bool tinyness_before = false;
+16535:       static constexpr float_round_style round_style = round_toward_zero;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct numeric_limits<char32_t>
+16535:     {
+16535:       static constexpr bool is_specialized = true;
+16535: 
+16535:       static constexpr char32_t
+16535:       min() noexcept { return (((char32_t)(-1) < 0) ? -(((char32_t)(-1) < 0) ? (((((char32_t)1 << ((sizeof(char32_t) * 8 - ((char32_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char32_t)0) - 1 : (char32_t)0); }
+16535: 
+16535:       static constexpr char32_t
+16535:       max() noexcept { return (((char32_t)(-1) < 0) ? (((((char32_t)1 << ((sizeof(char32_t) * 8 - ((char32_t)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(char32_t)0); }
+16535: 
+16535:       static constexpr char32_t
+16535:       lowest() noexcept { return min(); }
+16535: 
+16535:       static constexpr int digits = (sizeof(char32_t) * 8 - ((char32_t)(-1) < 0));
+16535:       static constexpr int digits10 = ((sizeof(char32_t) * 8 - ((char32_t)(-1) < 0)) * 643L / 2136);
+16535:       static constexpr int max_digits10 = 0;
+16535:       static constexpr bool is_signed = ((char32_t)(-1) < 0);
+16535:       static constexpr bool is_integer = true;
+16535:       static constexpr bool is_exact = true;
+16535:       static constexpr int radix = 2;
+16535: 
+16535:       static constexpr char32_t
+16535:       epsilon() noexcept { return 0; }
+16535: 
+16535:       static constexpr char32_t
+16535:       round_error() noexcept { return 0; }
+16535: 
+16535:       static constexpr int min_exponent = 0;
+16535:       static constexpr int min_exponent10 = 0;
+16535:       static constexpr int max_exponent = 0;
+16535:       static constexpr int max_exponent10 = 0;
+16535: 
+16535:       static constexpr bool has_infinity = false;
+16535:       static constexpr bool has_quiet_NaN = false;
+16535:       static constexpr bool has_signaling_NaN = false;
+16535:       static constexpr float_denorm_style has_denorm = denorm_absent;
+16535:       static constexpr bool has_denorm_loss = false;
+16535: 
+16535:       static constexpr char32_t
+16535:       infinity() noexcept { return char32_t(); }
+16535: 
+16535:       static constexpr char32_t
+16535:       quiet_NaN() noexcept { return char32_t(); }
+16535: 
+16535:       static constexpr char32_t
+16535:       signaling_NaN() noexcept { return char32_t(); }
+16535: 
+16535:       static constexpr char32_t
+16535:       denorm_min() noexcept { return char32_t(); }
+16535: 
+16535:       static constexpr bool is_iec559 = false;
+16535:       static constexpr bool is_bounded = true;
+16535:       static constexpr bool is_modulo = !is_signed;
+16535: 
+16535:       static constexpr bool traps = true;
+16535:       static constexpr bool tinyness_before = false;
+16535:       static constexpr float_round_style round_style = round_toward_zero;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<>
+16535:     struct numeric_limits<short>
+16535:     {
+16535:       static constexpr bool is_specialized = true;
+16535: 
+16535:       static constexpr short
+16535:       min() noexcept { return -0x7fff - 1; }
+16535: 
+16535:       static constexpr short
+16535:       max() noexcept { return 0x7fff; }
+16535: 
+16535: 
+16535:       static constexpr short
+16535:       lowest() noexcept { return min(); }
+16535: 
+16535: 
+16535:       static constexpr int digits = (sizeof(short) * 8 - ((short)(-1) < 0));
+16535:       static constexpr int digits10 = ((sizeof(short) * 8 - ((short)(-1) < 0)) * 643L / 2136);
+16535: 
+16535:       static constexpr int max_digits10 = 0;
+16535: 
+16535:       static constexpr bool is_signed = true;
+16535:       static constexpr bool is_integer = true;
+16535:       static constexpr bool is_exact = true;
+16535:       static constexpr int radix = 2;
+16535: 
+16535:       static constexpr short
+16535:       epsilon() noexcept { return 0; }
+16535: 
+16535:       static constexpr short
+16535:       round_error() noexcept { return 0; }
+16535: 
+16535:       static constexpr int min_exponent = 0;
+16535:       static constexpr int min_exponent10 = 0;
+16535:       static constexpr int max_exponent = 0;
+16535:       static constexpr int max_exponent10 = 0;
+16535: 
+16535:       static constexpr bool has_infinity = false;
+16535:       static constexpr bool has_quiet_NaN = false;
+16535:       static constexpr bool has_signaling_NaN = false;
+16535:       static constexpr float_denorm_style has_denorm
+16535:        = denorm_absent;
+16535:       static constexpr bool has_denorm_loss = false;
+16535: 
+16535:       static constexpr short
+16535:       infinity() noexcept { return short(); }
+16535: 
+16535:       static constexpr short
+16535:       quiet_NaN() noexcept { return short(); }
+16535: 
+16535:       static constexpr short
+16535:       signaling_NaN() noexcept { return short(); }
+16535: 
+16535:       static constexpr short
+16535:       denorm_min() noexcept { return short(); }
+16535: 
+16535:       static constexpr bool is_iec559 = false;
+16535:       static constexpr bool is_bounded = true;
+16535:       static constexpr bool is_modulo = false;
+16535: 
+16535:       static constexpr bool traps = true;
+16535:       static constexpr bool tinyness_before = false;
+16535:       static constexpr float_round_style round_style
+16535:        = round_toward_zero;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct numeric_limits<unsigned short>
+16535:     {
+16535:       static constexpr bool is_specialized = true;
+16535: 
+16535:       static constexpr unsigned short
+16535:       min() noexcept { return 0; }
+16535: 
+16535:       static constexpr unsigned short
+16535:       max() noexcept { return 0x7fff * 2U + 1; }
+16535: 
+16535: 
+16535:       static constexpr unsigned short
+16535:       lowest() noexcept { return min(); }
+16535: 
+16535: 
+16535:       static constexpr int digits
+16535:        = (sizeof(unsigned short) * 8 - ((unsigned short)(-1) < 0));
+16535:       static constexpr int digits10
+16535:        = ((sizeof(unsigned short) * 8 - ((unsigned short)(-1) < 0)) * 643L / 2136);
+16535: 
+16535:       static constexpr int max_digits10 = 0;
+16535: 
+16535:       static constexpr bool is_signed = false;
+16535:       static constexpr bool is_integer = true;
+16535:       static constexpr bool is_exact = true;
+16535:       static constexpr int radix = 2;
+16535: 
+16535:       static constexpr unsigned short
+16535:       epsilon() noexcept { return 0; }
+16535: 
+16535:       static constexpr unsigned short
+16535:       round_error() noexcept { return 0; }
+16535: 
+16535:       static constexpr int min_exponent = 0;
+16535:       static constexpr int min_exponent10 = 0;
+16535:       static constexpr int max_exponent = 0;
+16535:       static constexpr int max_exponent10 = 0;
+16535: 
+16535:       static constexpr bool has_infinity = false;
+16535:       static constexpr bool has_quiet_NaN = false;
+16535:       static constexpr bool has_signaling_NaN = false;
+16535:       static constexpr float_denorm_style has_denorm
+16535:        = denorm_absent;
+16535:       static constexpr bool has_denorm_loss = false;
+16535: 
+16535:       static constexpr unsigned short
+16535:       infinity() noexcept
+16535:       { return static_cast<unsigned short>(0); }
+16535: 
+16535:       static constexpr unsigned short
+16535:       quiet_NaN() noexcept
+16535:       { return static_cast<unsigned short>(0); }
+16535: 
+16535:       static constexpr unsigned short
+16535:       signaling_NaN() noexcept
+16535:       { return static_cast<unsigned short>(0); }
+16535: 
+16535:       static constexpr unsigned short
+16535:       denorm_min() noexcept
+16535:       { return static_cast<unsigned short>(0); }
+16535: 
+16535:       static constexpr bool is_iec559 = false;
+16535:       static constexpr bool is_bounded = true;
+16535:       static constexpr bool is_modulo = true;
+16535: 
+16535:       static constexpr bool traps = true;
+16535:       static constexpr bool tinyness_before = false;
+16535:       static constexpr float_round_style round_style
+16535:        = round_toward_zero;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct numeric_limits<int>
+16535:     {
+16535:       static constexpr bool is_specialized = true;
+16535: 
+16535:       static constexpr int
+16535:       min() noexcept { return -0x7fffffff - 1; }
+16535: 
+16535:       static constexpr int
+16535:       max() noexcept { return 0x7fffffff; }
+16535: 
+16535: 
+16535:       static constexpr int
+16535:       lowest() noexcept { return min(); }
+16535: 
+16535: 
+16535:       static constexpr int digits = (sizeof(int) * 8 - ((int)(-1) < 0));
+16535:       static constexpr int digits10 = ((sizeof(int) * 8 - ((int)(-1) < 0)) * 643L / 2136);
+16535: 
+16535:       static constexpr int max_digits10 = 0;
+16535: 
+16535:       static constexpr bool is_signed = true;
+16535:       static constexpr bool is_integer = true;
+16535:       static constexpr bool is_exact = true;
+16535:       static constexpr int radix = 2;
+16535: 
+16535:       static constexpr int
+16535:       epsilon() noexcept { return 0; }
+16535: 
+16535:       static constexpr int
+16535:       round_error() noexcept { return 0; }
+16535: 
+16535:       static constexpr int min_exponent = 0;
+16535:       static constexpr int min_exponent10 = 0;
+16535:       static constexpr int max_exponent = 0;
+16535:       static constexpr int max_exponent10 = 0;
+16535: 
+16535:       static constexpr bool has_infinity = false;
+16535:       static constexpr bool has_quiet_NaN = false;
+16535:       static constexpr bool has_signaling_NaN = false;
+16535:       static constexpr float_denorm_style has_denorm
+16535:        = denorm_absent;
+16535:       static constexpr bool has_denorm_loss = false;
+16535: 
+16535:       static constexpr int
+16535:       infinity() noexcept { return static_cast<int>(0); }
+16535: 
+16535:       static constexpr int
+16535:       quiet_NaN() noexcept { return static_cast<int>(0); }
+16535: 
+16535:       static constexpr int
+16535:       signaling_NaN() noexcept { return static_cast<int>(0); }
+16535: 
+16535:       static constexpr int
+16535:       denorm_min() noexcept { return static_cast<int>(0); }
+16535: 
+16535:       static constexpr bool is_iec559 = false;
+16535:       static constexpr bool is_bounded = true;
+16535:       static constexpr bool is_modulo = false;
+16535: 
+16535:       static constexpr bool traps = true;
+16535:       static constexpr bool tinyness_before = false;
+16535:       static constexpr float_round_style round_style
+16535:        = round_toward_zero;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct numeric_limits<unsigned int>
+16535:     {
+16535:       static constexpr bool is_specialized = true;
+16535: 
+16535:       static constexpr unsigned int
+16535:       min() noexcept { return 0; }
+16535: 
+16535:       static constexpr unsigned int
+16535:       max() noexcept { return 0x7fffffff * 2U + 1; }
+16535: 
+16535: 
+16535:       static constexpr unsigned int
+16535:       lowest() noexcept { return min(); }
+16535: 
+16535: 
+16535:       static constexpr int digits
+16535:        = (sizeof(unsigned int) * 8 - ((unsigned int)(-1) < 0));
+16535:       static constexpr int digits10
+16535:        = ((sizeof(unsigned int) * 8 - ((unsigned int)(-1) < 0)) * 643L / 2136);
+16535: 
+16535:       static constexpr int max_digits10 = 0;
+16535: 
+16535:       static constexpr bool is_signed = false;
+16535:       static constexpr bool is_integer = true;
+16535:       static constexpr bool is_exact = true;
+16535:       static constexpr int radix = 2;
+16535: 
+16535:       static constexpr unsigned int
+16535:       epsilon() noexcept { return 0; }
+16535: 
+16535:       static constexpr unsigned int
+16535:       round_error() noexcept { return 0; }
+16535: 
+16535:       static constexpr int min_exponent = 0;
+16535:       static constexpr int min_exponent10 = 0;
+16535:       static constexpr int max_exponent = 0;
+16535:       static constexpr int max_exponent10 = 0;
+16535: 
+16535:       static constexpr bool has_infinity = false;
+16535:       static constexpr bool has_quiet_NaN = false;
+16535:       static constexpr bool has_signaling_NaN = false;
+16535:       static constexpr float_denorm_style has_denorm
+16535:        = denorm_absent;
+16535:       static constexpr bool has_denorm_loss = false;
+16535: 
+16535:       static constexpr unsigned int
+16535:       infinity() noexcept { return static_cast<unsigned int>(0); }
+16535: 
+16535:       static constexpr unsigned int
+16535:       quiet_NaN() noexcept
+16535:       { return static_cast<unsigned int>(0); }
+16535: 
+16535:       static constexpr unsigned int
+16535:       signaling_NaN() noexcept
+16535:       { return static_cast<unsigned int>(0); }
+16535: 
+16535:       static constexpr unsigned int
+16535:       denorm_min() noexcept
+16535:       { return static_cast<unsigned int>(0); }
+16535: 
+16535:       static constexpr bool is_iec559 = false;
+16535:       static constexpr bool is_bounded = true;
+16535:       static constexpr bool is_modulo = true;
+16535: 
+16535:       static constexpr bool traps = true;
+16535:       static constexpr bool tinyness_before = false;
+16535:       static constexpr float_round_style round_style
+16535:        = round_toward_zero;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct numeric_limits<long>
+16535:     {
+16535:       static constexpr bool is_specialized = true;
+16535: 
+16535:       static constexpr long
+16535:       min() noexcept { return -0x7fffffffffffffffL - 1; }
+16535: 
+16535:       static constexpr long
+16535:       max() noexcept { return 0x7fffffffffffffffL; }
+16535: 
+16535: 
+16535:       static constexpr long
+16535:       lowest() noexcept { return min(); }
+16535: 
+16535: 
+16535:       static constexpr int digits = (sizeof(long) * 8 - ((long)(-1) < 0));
+16535:       static constexpr int digits10 = ((sizeof(long) * 8 - ((long)(-1) < 0)) * 643L / 2136);
+16535: 
+16535:       static constexpr int max_digits10 = 0;
+16535: 
+16535:       static constexpr bool is_signed = true;
+16535:       static constexpr bool is_integer = true;
+16535:       static constexpr bool is_exact = true;
+16535:       static constexpr int radix = 2;
+16535: 
+16535:       static constexpr long
+16535:       epsilon() noexcept { return 0; }
+16535: 
+16535:       static constexpr long
+16535:       round_error() noexcept { return 0; }
+16535: 
+16535:       static constexpr int min_exponent = 0;
+16535:       static constexpr int min_exponent10 = 0;
+16535:       static constexpr int max_exponent = 0;
+16535:       static constexpr int max_exponent10 = 0;
+16535: 
+16535:       static constexpr bool has_infinity = false;
+16535:       static constexpr bool has_quiet_NaN = false;
+16535:       static constexpr bool has_signaling_NaN = false;
+16535:       static constexpr float_denorm_style has_denorm
+16535:        = denorm_absent;
+16535:       static constexpr bool has_denorm_loss = false;
+16535: 
+16535:       static constexpr long
+16535:       infinity() noexcept { return static_cast<long>(0); }
+16535: 
+16535:       static constexpr long
+16535:       quiet_NaN() noexcept { return static_cast<long>(0); }
+16535: 
+16535:       static constexpr long
+16535:       signaling_NaN() noexcept { return static_cast<long>(0); }
+16535: 
+16535:       static constexpr long
+16535:       denorm_min() noexcept { return static_cast<long>(0); }
+16535: 
+16535:       static constexpr bool is_iec559 = false;
+16535:       static constexpr bool is_bounded = true;
+16535:       static constexpr bool is_modulo = false;
+16535: 
+16535:       static constexpr bool traps = true;
+16535:       static constexpr bool tinyness_before = false;
+16535:       static constexpr float_round_style round_style
+16535:        = round_toward_zero;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct numeric_limits<unsigned long>
+16535:     {
+16535:       static constexpr bool is_specialized = true;
+16535: 
+16535:       static constexpr unsigned long
+16535:       min() noexcept { return 0; }
+16535: 
+16535:       static constexpr unsigned long
+16535:       max() noexcept { return 0x7fffffffffffffffL * 2UL + 1; }
+16535: 
+16535: 
+16535:       static constexpr unsigned long
+16535:       lowest() noexcept { return min(); }
+16535: 
+16535: 
+16535:       static constexpr int digits
+16535:        = (sizeof(unsigned long) * 8 - ((unsigned long)(-1) < 0));
+16535:       static constexpr int digits10
+16535:        = ((sizeof(unsigned long) * 8 - ((unsigned long)(-1) < 0)) * 643L / 2136);
+16535: 
+16535:       static constexpr int max_digits10 = 0;
+16535: 
+16535:       static constexpr bool is_signed = false;
+16535:       static constexpr bool is_integer = true;
+16535:       static constexpr bool is_exact = true;
+16535:       static constexpr int radix = 2;
+16535: 
+16535:       static constexpr unsigned long
+16535:       epsilon() noexcept { return 0; }
+16535: 
+16535:       static constexpr unsigned long
+16535:       round_error() noexcept { return 0; }
+16535: 
+16535:       static constexpr int min_exponent = 0;
+16535:       static constexpr int min_exponent10 = 0;
+16535:       static constexpr int max_exponent = 0;
+16535:       static constexpr int max_exponent10 = 0;
+16535: 
+16535:       static constexpr bool has_infinity = false;
+16535:       static constexpr bool has_quiet_NaN = false;
+16535:       static constexpr bool has_signaling_NaN = false;
+16535:       static constexpr float_denorm_style has_denorm
+16535:        = denorm_absent;
+16535:       static constexpr bool has_denorm_loss = false;
+16535: 
+16535:       static constexpr unsigned long
+16535:       infinity() noexcept
+16535:       { return static_cast<unsigned long>(0); }
+16535: 
+16535:       static constexpr unsigned long
+16535:       quiet_NaN() noexcept
+16535:       { return static_cast<unsigned long>(0); }
+16535: 
+16535:       static constexpr unsigned long
+16535:       signaling_NaN() noexcept
+16535:       { return static_cast<unsigned long>(0); }
+16535: 
+16535:       static constexpr unsigned long
+16535:       denorm_min() noexcept
+16535:       { return static_cast<unsigned long>(0); }
+16535: 
+16535:       static constexpr bool is_iec559 = false;
+16535:       static constexpr bool is_bounded = true;
+16535:       static constexpr bool is_modulo = true;
+16535: 
+16535:       static constexpr bool traps = true;
+16535:       static constexpr bool tinyness_before = false;
+16535:       static constexpr float_round_style round_style
+16535:        = round_toward_zero;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct numeric_limits<long long>
+16535:     {
+16535:       static constexpr bool is_specialized = true;
+16535: 
+16535:       static constexpr long long
+16535:       min() noexcept { return -0x7fffffffffffffffLL - 1; }
+16535: 
+16535:       static constexpr long long
+16535:       max() noexcept { return 0x7fffffffffffffffLL; }
+16535: 
+16535: 
+16535:       static constexpr long long
+16535:       lowest() noexcept { return min(); }
+16535: 
+16535: 
+16535:       static constexpr int digits
+16535:        = (sizeof(long long) * 8 - ((long long)(-1) < 0));
+16535:       static constexpr int digits10
+16535:        = ((sizeof(long long) * 8 - ((long long)(-1) < 0)) * 643L / 2136);
+16535: 
+16535:       static constexpr int max_digits10 = 0;
+16535: 
+16535:       static constexpr bool is_signed = true;
+16535:       static constexpr bool is_integer = true;
+16535:       static constexpr bool is_exact = true;
+16535:       static constexpr int radix = 2;
+16535: 
+16535:       static constexpr long long
+16535:       epsilon() noexcept { return 0; }
+16535: 
+16535:       static constexpr long long
+16535:       round_error() noexcept { return 0; }
+16535: 
+16535:       static constexpr int min_exponent = 0;
+16535:       static constexpr int min_exponent10 = 0;
+16535:       static constexpr int max_exponent = 0;
+16535:       static constexpr int max_exponent10 = 0;
+16535: 
+16535:       static constexpr bool has_infinity = false;
+16535:       static constexpr bool has_quiet_NaN = false;
+16535:       static constexpr bool has_signaling_NaN = false;
+16535:       static constexpr float_denorm_style has_denorm
+16535:        = denorm_absent;
+16535:       static constexpr bool has_denorm_loss = false;
+16535: 
+16535:       static constexpr long long
+16535:       infinity() noexcept { return static_cast<long long>(0); }
+16535: 
+16535:       static constexpr long long
+16535:       quiet_NaN() noexcept { return static_cast<long long>(0); }
+16535: 
+16535:       static constexpr long long
+16535:       signaling_NaN() noexcept
+16535:       { return static_cast<long long>(0); }
+16535: 
+16535:       static constexpr long long
+16535:       denorm_min() noexcept { return static_cast<long long>(0); }
+16535: 
+16535:       static constexpr bool is_iec559 = false;
+16535:       static constexpr bool is_bounded = true;
+16535:       static constexpr bool is_modulo = false;
+16535: 
+16535:       static constexpr bool traps = true;
+16535:       static constexpr bool tinyness_before = false;
+16535:       static constexpr float_round_style round_style
+16535:        = round_toward_zero;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct numeric_limits<unsigned long long>
+16535:     {
+16535:       static constexpr bool is_specialized = true;
+16535: 
+16535:       static constexpr unsigned long long
+16535:       min() noexcept { return 0; }
+16535: 
+16535:       static constexpr unsigned long long
+16535:       max() noexcept { return 0x7fffffffffffffffLL * 2ULL + 1; }
+16535: 
+16535: 
+16535:       static constexpr unsigned long long
+16535:       lowest() noexcept { return min(); }
+16535: 
+16535: 
+16535:       static constexpr int digits
+16535:        = (sizeof(unsigned long long) * 8 - ((unsigned long long)(-1) < 0));
+16535:       static constexpr int digits10
+16535:        = ((sizeof(unsigned long long) * 8 - ((unsigned long long)(-1) < 0)) * 643L / 2136);
+16535: 
+16535:       static constexpr int max_digits10 = 0;
+16535: 
+16535:       static constexpr bool is_signed = false;
+16535:       static constexpr bool is_integer = true;
+16535:       static constexpr bool is_exact = true;
+16535:       static constexpr int radix = 2;
+16535: 
+16535:       static constexpr unsigned long long
+16535:       epsilon() noexcept { return 0; }
+16535: 
+16535:       static constexpr unsigned long long
+16535:       round_error() noexcept { return 0; }
+16535: 
+16535:       static constexpr int min_exponent = 0;
+16535:       static constexpr int min_exponent10 = 0;
+16535:       static constexpr int max_exponent = 0;
+16535:       static constexpr int max_exponent10 = 0;
+16535: 
+16535:       static constexpr bool has_infinity = false;
+16535:       static constexpr bool has_quiet_NaN = false;
+16535:       static constexpr bool has_signaling_NaN = false;
+16535:       static constexpr float_denorm_style has_denorm
+16535:        = denorm_absent;
+16535:       static constexpr bool has_denorm_loss = false;
+16535: 
+16535:       static constexpr unsigned long long
+16535:       infinity() noexcept
+16535:       { return static_cast<unsigned long long>(0); }
+16535: 
+16535:       static constexpr unsigned long long
+16535:       quiet_NaN() noexcept
+16535:       { return static_cast<unsigned long long>(0); }
+16535: 
+16535:       static constexpr unsigned long long
+16535:       signaling_NaN() noexcept
+16535:       { return static_cast<unsigned long long>(0); }
+16535: 
+16535:       static constexpr unsigned long long
+16535:       denorm_min() noexcept
+16535:       { return static_cast<unsigned long long>(0); }
+16535: 
+16535:       static constexpr bool is_iec559 = false;
+16535:       static constexpr bool is_bounded = true;
+16535:       static constexpr bool is_modulo = true;
+16535: 
+16535:       static constexpr bool traps = true;
+16535:       static constexpr bool tinyness_before = false;
+16535:       static constexpr float_round_style round_style
+16535:        = round_toward_zero;
+16535:     };
+16535: # 1570 "/usr/include/c++/8/limits" 3
+16535:   template<> struct numeric_limits<__int128> { static constexpr bool is_specialized = true; static constexpr __int128 min() noexcept { return (((__int128)(-1) < 0) ? -(((__int128)(-1) < 0) ? (((((__int128)1 << ((128 - ((__int128)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(__int128)0) - 1 : (__int128)0); } static constexpr __int128 max() noexcept { return (((__int128)(-1) < 0) ? (((((__int128)1 << ((128 - ((__int128)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(__int128)0); } static constexpr int digits = 128 - 1; static constexpr int digits10 = (128 - 1) * 643L / 2136; static constexpr bool is_signed = true; static constexpr bool is_integer = true; static constexpr bool is_exact = true; static constexpr int radix = 2; static constexpr __int128 epsilon() noexcept { return 0; } static constexpr __int128 round_error() noexcept { return 0; } static constexpr __int128 lowest() noexcept { return min(); } static constexpr int max_digits10 = 0; static constexpr int min_exponent = 0; static constexpr int min_exponent10 = 0; static constexpr int max_exponent = 0; static constexpr int max_exponent10 = 0; static constexpr bool has_infinity = false; static constexpr bool has_quiet_NaN = false; static constexpr bool has_signaling_NaN = false; static constexpr float_denorm_style has_denorm = denorm_absent; static constexpr bool has_denorm_loss = false; static constexpr __int128 infinity() noexcept { return static_cast<__int128>(0); } static constexpr __int128 quiet_NaN() noexcept { return static_cast<__int128>(0); } static constexpr __int128 signaling_NaN() noexcept { return static_cast<__int128>(0); } static constexpr __int128 denorm_min() noexcept { return static_cast<__int128>(0); } static constexpr bool is_iec559 = false; static constexpr bool is_bounded = true; static constexpr bool is_modulo = false; static constexpr bool traps = true; static constexpr bool tinyness_before = false; static constexpr float_round_style round_style = round_toward_zero; }; template<> struct numeric_limits<unsigned __int128> { static constexpr bool is_specialized = true; static constexpr unsigned __int128 min() noexcept { return 0; } static constexpr unsigned __int128 max() noexcept { return (((unsigned __int128)(-1) < 0) ? (((((unsigned __int128)1 << ((128 - ((unsigned __int128)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(unsigned __int128)0); } static constexpr unsigned __int128 lowest() noexcept { return min(); } static constexpr int max_digits10 = 0; static constexpr int digits = 128; static constexpr int digits10 = 128 * 643L / 2136; static constexpr bool is_signed = false; static constexpr bool is_integer = true; static constexpr bool is_exact = true; static constexpr int radix = 2; static constexpr unsigned __int128 epsilon() noexcept { return 0; } static constexpr unsigned __int128 round_error() noexcept { return 0; } static constexpr int min_exponent = 0; static constexpr int min_exponent10 = 0; static constexpr int max_exponent = 0; static constexpr int max_exponent10 = 0; static constexpr bool has_infinity = false; static constexpr bool has_quiet_NaN = false; static constexpr bool has_signaling_NaN = false; static constexpr float_denorm_style has_denorm = denorm_absent; static constexpr bool has_denorm_loss = false; static constexpr unsigned __int128 infinity() noexcept { return static_cast<unsigned __int128>(0); } static constexpr unsigned __int128 quiet_NaN() noexcept { return static_cast<unsigned __int128>(0); } static constexpr unsigned __int128 signaling_NaN() noexcept { return static_cast<unsigned __int128>(0); } static constexpr unsigned __int128 denorm_min() noexcept { return static_cast<unsigned __int128>(0); } static constexpr bool is_iec559 = false; static constexpr bool is_bounded = true; static constexpr bool is_modulo = true; static constexpr bool traps = true; static constexpr bool tinyness_before = false; static constexpr float_round_style round_style = round_toward_zero; };
+16535: # 1593 "/usr/include/c++/8/limits" 3
+16535:   template<>
+16535:     struct numeric_limits<float>
+16535:     {
+16535:       static constexpr bool is_specialized = true;
+16535: 
+16535:       static constexpr float
+16535:       min() noexcept { return 1.17549435082228750796873653722224568e-38F; }
+16535: 
+16535:       static constexpr float
+16535:       max() noexcept { return 3.40282346638528859811704183484516925e+38F; }
+16535: 
+16535: 
+16535:       static constexpr float
+16535:       lowest() noexcept { return -3.40282346638528859811704183484516925e+38F; }
+16535: 
+16535: 
+16535:       static constexpr int digits = 24;
+16535:       static constexpr int digits10 = 6;
+16535: 
+16535:       static constexpr int max_digits10
+16535:   = (2 + (24) * 643L / 2136);
+16535: 
+16535:       static constexpr bool is_signed = true;
+16535:       static constexpr bool is_integer = false;
+16535:       static constexpr bool is_exact = false;
+16535:       static constexpr int radix = 2;
+16535: 
+16535:       static constexpr float
+16535:       epsilon() noexcept { return 1.19209289550781250000000000000000000e-7F; }
+16535: 
+16535:       static constexpr float
+16535:       round_error() noexcept { return 0.5F; }
+16535: 
+16535:       static constexpr int min_exponent = (-125);
+16535:       static constexpr int min_exponent10 = (-37);
+16535:       static constexpr int max_exponent = 128;
+16535:       static constexpr int max_exponent10 = 38;
+16535: 
+16535:       static constexpr bool has_infinity = 1;
+16535:       static constexpr bool has_quiet_NaN = 1;
+16535:       static constexpr bool has_signaling_NaN = has_quiet_NaN;
+16535:       static constexpr float_denorm_style has_denorm
+16535:  = bool(1) ? denorm_present : denorm_absent;
+16535:       static constexpr bool has_denorm_loss
+16535:        = false;
+16535: 
+16535:       static constexpr float
+16535:       infinity() noexcept { return __builtin_huge_valf(); }
+16535: 
+16535:       static constexpr float
+16535:       quiet_NaN() noexcept { return __builtin_nanf(""); }
+16535: 
+16535:       static constexpr float
+16535:       signaling_NaN() noexcept { return __builtin_nansf(""); }
+16535: 
+16535:       static constexpr float
+16535:       denorm_min() noexcept { return 1.40129846432481707092372958328991613e-45F; }
+16535: 
+16535:       static constexpr bool is_iec559
+16535:  = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
+16535:       static constexpr bool is_bounded = true;
+16535:       static constexpr bool is_modulo = false;
+16535: 
+16535:       static constexpr bool traps = false;
+16535:       static constexpr bool tinyness_before
+16535:        = false;
+16535:       static constexpr float_round_style round_style
+16535:        = round_to_nearest;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<>
+16535:     struct numeric_limits<double>
+16535:     {
+16535:       static constexpr bool is_specialized = true;
+16535: 
+16535:       static constexpr double
+16535:       min() noexcept { return double(2.22507385850720138309023271733240406e-308L); }
+16535: 
+16535:       static constexpr double
+16535:       max() noexcept { return double(1.79769313486231570814527423731704357e+308L); }
+16535: 
+16535: 
+16535:       static constexpr double
+16535:       lowest() noexcept { return -double(1.79769313486231570814527423731704357e+308L); }
+16535: 
+16535: 
+16535:       static constexpr int digits = 53;
+16535:       static constexpr int digits10 = 15;
+16535: 
+16535:       static constexpr int max_digits10
+16535:   = (2 + (53) * 643L / 2136);
+16535: 
+16535:       static constexpr bool is_signed = true;
+16535:       static constexpr bool is_integer = false;
+16535:       static constexpr bool is_exact = false;
+16535:       static constexpr int radix = 2;
+16535: 
+16535:       static constexpr double
+16535:       epsilon() noexcept { return double(2.22044604925031308084726333618164062e-16L); }
+16535: 
+16535:       static constexpr double
+16535:       round_error() noexcept { return 0.5; }
+16535: 
+16535:       static constexpr int min_exponent = (-1021);
+16535:       static constexpr int min_exponent10 = (-307);
+16535:       static constexpr int max_exponent = 1024;
+16535:       static constexpr int max_exponent10 = 308;
+16535: 
+16535:       static constexpr bool has_infinity = 1;
+16535:       static constexpr bool has_quiet_NaN = 1;
+16535:       static constexpr bool has_signaling_NaN = has_quiet_NaN;
+16535:       static constexpr float_denorm_style has_denorm
+16535:  = bool(1) ? denorm_present : denorm_absent;
+16535:       static constexpr bool has_denorm_loss
+16535:         = false;
+16535: 
+16535:       static constexpr double
+16535:       infinity() noexcept { return __builtin_huge_val(); }
+16535: 
+16535:       static constexpr double
+16535:       quiet_NaN() noexcept { return __builtin_nan(""); }
+16535: 
+16535:       static constexpr double
+16535:       signaling_NaN() noexcept { return __builtin_nans(""); }
+16535: 
+16535:       static constexpr double
+16535:       denorm_min() noexcept { return double(4.94065645841246544176568792868221372e-324L); }
+16535: 
+16535:       static constexpr bool is_iec559
+16535:  = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
+16535:       static constexpr bool is_bounded = true;
+16535:       static constexpr bool is_modulo = false;
+16535: 
+16535:       static constexpr bool traps = false;
+16535:       static constexpr bool tinyness_before
+16535:        = false;
+16535:       static constexpr float_round_style round_style
+16535:        = round_to_nearest;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<>
+16535:     struct numeric_limits<long double>
+16535:     {
+16535:       static constexpr bool is_specialized = true;
+16535: 
+16535:       static constexpr long double
+16535:       min() noexcept { return 3.36210314311209350626267781732175260e-4932L; }
+16535: 
+16535:       static constexpr long double
+16535:       max() noexcept { return 1.18973149535723176502126385303097021e+4932L; }
+16535: 
+16535: 
+16535:       static constexpr long double
+16535:       lowest() noexcept { return -1.18973149535723176502126385303097021e+4932L; }
+16535: 
+16535: 
+16535:       static constexpr int digits = 64;
+16535:       static constexpr int digits10 = 18;
+16535: 
+16535:       static constexpr int max_digits10
+16535:   = (2 + (64) * 643L / 2136);
+16535: 
+16535:       static constexpr bool is_signed = true;
+16535:       static constexpr bool is_integer = false;
+16535:       static constexpr bool is_exact = false;
+16535:       static constexpr int radix = 2;
+16535: 
+16535:       static constexpr long double
+16535:       epsilon() noexcept { return 1.08420217248550443400745280086994171e-19L; }
+16535: 
+16535:       static constexpr long double
+16535:       round_error() noexcept { return 0.5L; }
+16535: 
+16535:       static constexpr int min_exponent = (-16381);
+16535:       static constexpr int min_exponent10 = (-4931);
+16535:       static constexpr int max_exponent = 16384;
+16535:       static constexpr int max_exponent10 = 4932;
+16535: 
+16535:       static constexpr bool has_infinity = 1;
+16535:       static constexpr bool has_quiet_NaN = 1;
+16535:       static constexpr bool has_signaling_NaN = has_quiet_NaN;
+16535:       static constexpr float_denorm_style has_denorm
+16535:  = bool(1) ? denorm_present : denorm_absent;
+16535:       static constexpr bool has_denorm_loss
+16535:  = false;
+16535: 
+16535:       static constexpr long double
+16535:       infinity() noexcept { return __builtin_huge_vall(); }
+16535: 
+16535:       static constexpr long double
+16535:       quiet_NaN() noexcept { return __builtin_nanl(""); }
+16535: 
+16535:       static constexpr long double
+16535:       signaling_NaN() noexcept { return __builtin_nansl(""); }
+16535: 
+16535:       static constexpr long double
+16535:       denorm_min() noexcept { return 3.64519953188247460252840593361941982e-4951L; }
+16535: 
+16535:       static constexpr bool is_iec559
+16535:  = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
+16535:       static constexpr bool is_bounded = true;
+16535:       static constexpr bool is_modulo = false;
+16535: 
+16535:       static constexpr bool traps = false;
+16535:       static constexpr bool tinyness_before =
+16535:       false;
+16535:       static constexpr float_round_style round_style =
+16535:             round_to_nearest;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 38 "/usr/include/gmpxx.h" 2 3 4
+16535: # 1 "/usr/include/c++/8/utility" 1 3 4
+16535: # 58 "/usr/include/c++/8/utility" 3 4
+16535:        
+16535: # 59 "/usr/include/c++/8/utility" 3
+16535: # 69 "/usr/include/c++/8/utility" 3
+16535: # 1 "/usr/include/c++/8/bits/stl_relops.h" 1 3
+16535: # 67 "/usr/include/c++/8/bits/stl_relops.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   namespace rel_ops
+16535:   {
+16535: # 85 "/usr/include/c++/8/bits/stl_relops.h" 3
+16535:     template <class _Tp>
+16535:       inline bool
+16535:       operator!=(const _Tp& __x, const _Tp& __y)
+16535:       { return !(__x == __y); }
+16535: # 98 "/usr/include/c++/8/bits/stl_relops.h" 3
+16535:     template <class _Tp>
+16535:       inline bool
+16535:       operator>(const _Tp& __x, const _Tp& __y)
+16535:       { return __y < __x; }
+16535: # 111 "/usr/include/c++/8/bits/stl_relops.h" 3
+16535:     template <class _Tp>
+16535:       inline bool
+16535:       operator<=(const _Tp& __x, const _Tp& __y)
+16535:       { return !(__y < __x); }
+16535: # 124 "/usr/include/c++/8/bits/stl_relops.h" 3
+16535:     template <class _Tp>
+16535:       inline bool
+16535:       operator>=(const _Tp& __x, const _Tp& __y)
+16535:       { return !(__x < __y); }
+16535:   }
+16535: 
+16535: 
+16535: }
+16535: # 70 "/usr/include/c++/8/utility" 2 3
+16535: # 1 "/usr/include/c++/8/bits/stl_pair.h" 1 3
+16535: # 59 "/usr/include/c++/8/bits/stl_pair.h" 3
+16535: # 1 "/usr/include/c++/8/bits/move.h" 1 3
+16535: # 34 "/usr/include/c++/8/bits/move.h" 3
+16535: # 1 "/usr/include/c++/8/bits/concept_check.h" 1 3
+16535: # 33 "/usr/include/c++/8/bits/concept_check.h" 3
+16535:        
+16535: # 34 "/usr/include/c++/8/bits/concept_check.h" 3
+16535: # 35 "/usr/include/c++/8/bits/move.h" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline constexpr _Tp*
+16535:     __addressof(_Tp& __r) noexcept
+16535:     { return __builtin_addressof(__r); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: # 1 "/usr/include/c++/8/type_traits" 1 3
+16535: # 32 "/usr/include/c++/8/type_traits" 3
+16535:        
+16535: # 33 "/usr/include/c++/8/type_traits" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 56 "/usr/include/c++/8/type_traits" 3
+16535:   template<typename _Tp, _Tp __v>
+16535:     struct integral_constant
+16535:     {
+16535:       static constexpr _Tp value = __v;
+16535:       typedef _Tp value_type;
+16535:       typedef integral_constant<_Tp, __v> type;
+16535:       constexpr operator value_type() const noexcept { return value; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       constexpr value_type operator()() const noexcept { return value; }
+16535: 
+16535:     };
+16535: 
+16535:   template<typename _Tp, _Tp __v>
+16535:     constexpr _Tp integral_constant<_Tp, __v>::value;
+16535: 
+16535: 
+16535:   typedef integral_constant<bool, true> true_type;
+16535: 
+16535: 
+16535:   typedef integral_constant<bool, false> false_type;
+16535: 
+16535:   template<bool __v>
+16535:     using __bool_constant = integral_constant<bool, __v>;
+16535: # 91 "/usr/include/c++/8/type_traits" 3
+16535:   template<bool, typename, typename>
+16535:     struct conditional;
+16535: 
+16535:   template<typename...>
+16535:     struct __or_;
+16535: 
+16535:   template<>
+16535:     struct __or_<>
+16535:     : public false_type
+16535:     { };
+16535: 
+16535:   template<typename _B1>
+16535:     struct __or_<_B1>
+16535:     : public _B1
+16535:     { };
+16535: 
+16535:   template<typename _B1, typename _B2>
+16535:     struct __or_<_B1, _B2>
+16535:     : public conditional<_B1::value, _B1, _B2>::type
+16535:     { };
+16535: 
+16535:   template<typename _B1, typename _B2, typename _B3, typename... _Bn>
+16535:     struct __or_<_B1, _B2, _B3, _Bn...>
+16535:     : public conditional<_B1::value, _B1, __or_<_B2, _B3, _Bn...>>::type
+16535:     { };
+16535: 
+16535:   template<typename...>
+16535:     struct __and_;
+16535: 
+16535:   template<>
+16535:     struct __and_<>
+16535:     : public true_type
+16535:     { };
+16535: 
+16535:   template<typename _B1>
+16535:     struct __and_<_B1>
+16535:     : public _B1
+16535:     { };
+16535: 
+16535:   template<typename _B1, typename _B2>
+16535:     struct __and_<_B1, _B2>
+16535:     : public conditional<_B1::value, _B2, _B1>::type
+16535:     { };
+16535: 
+16535:   template<typename _B1, typename _B2, typename _B3, typename... _Bn>
+16535:     struct __and_<_B1, _B2, _B3, _Bn...>
+16535:     : public conditional<_B1::value, __and_<_B2, _B3, _Bn...>, _B1>::type
+16535:     { };
+16535: 
+16535:   template<typename _Pp>
+16535:     struct __not_
+16535:     : public __bool_constant<!bool(_Pp::value)>
+16535:     { };
+16535: # 180 "/usr/include/c++/8/type_traits" 3
+16535:   template<typename _Tp>
+16535:     struct __success_type
+16535:     { typedef _Tp type; };
+16535: 
+16535:   struct __failure_type
+16535:   { };
+16535: 
+16535: 
+16535: 
+16535:   template<typename>
+16535:     struct remove_cv;
+16535: 
+16535:   template<typename>
+16535:     struct __is_void_helper
+16535:     : public false_type { };
+16535: 
+16535:   template<>
+16535:     struct __is_void_helper<void>
+16535:     : public true_type { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_void
+16535:     : public __is_void_helper<typename remove_cv<_Tp>::type>::type
+16535:     { };
+16535: 
+16535:   template<typename>
+16535:     struct __is_integral_helper
+16535:     : public false_type { };
+16535: 
+16535:   template<>
+16535:     struct __is_integral_helper<bool>
+16535:     : public true_type { };
+16535: 
+16535:   template<>
+16535:     struct __is_integral_helper<char>
+16535:     : public true_type { };
+16535: 
+16535:   template<>
+16535:     struct __is_integral_helper<signed char>
+16535:     : public true_type { };
+16535: 
+16535:   template<>
+16535:     struct __is_integral_helper<unsigned char>
+16535:     : public true_type { };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct __is_integral_helper<wchar_t>
+16535:     : public true_type { };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct __is_integral_helper<char16_t>
+16535:     : public true_type { };
+16535: 
+16535:   template<>
+16535:     struct __is_integral_helper<char32_t>
+16535:     : public true_type { };
+16535: 
+16535:   template<>
+16535:     struct __is_integral_helper<short>
+16535:     : public true_type { };
+16535: 
+16535:   template<>
+16535:     struct __is_integral_helper<unsigned short>
+16535:     : public true_type { };
+16535: 
+16535:   template<>
+16535:     struct __is_integral_helper<int>
+16535:     : public true_type { };
+16535: 
+16535:   template<>
+16535:     struct __is_integral_helper<unsigned int>
+16535:     : public true_type { };
+16535: 
+16535:   template<>
+16535:     struct __is_integral_helper<long>
+16535:     : public true_type { };
+16535: 
+16535:   template<>
+16535:     struct __is_integral_helper<unsigned long>
+16535:     : public true_type { };
+16535: 
+16535:   template<>
+16535:     struct __is_integral_helper<long long>
+16535:     : public true_type { };
+16535: 
+16535:   template<>
+16535:     struct __is_integral_helper<unsigned long long>
+16535:     : public true_type { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<>
+16535:     struct __is_integral_helper<__int128>
+16535:     : public true_type { };
+16535: 
+16535:   template<>
+16535:     struct __is_integral_helper<unsigned __int128>
+16535:     : public true_type { };
+16535: # 312 "/usr/include/c++/8/type_traits" 3
+16535:   template<typename _Tp>
+16535:     struct is_integral
+16535:     : public __is_integral_helper<typename remove_cv<_Tp>::type>::type
+16535:     { };
+16535: 
+16535:   template<typename>
+16535:     struct __is_floating_point_helper
+16535:     : public false_type { };
+16535: 
+16535:   template<>
+16535:     struct __is_floating_point_helper<float>
+16535:     : public true_type { };
+16535: 
+16535:   template<>
+16535:     struct __is_floating_point_helper<double>
+16535:     : public true_type { };
+16535: 
+16535:   template<>
+16535:     struct __is_floating_point_helper<long double>
+16535:     : public true_type { };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct __is_floating_point_helper<__float128>
+16535:     : public true_type { };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_floating_point
+16535:     : public __is_floating_point_helper<typename remove_cv<_Tp>::type>::type
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename>
+16535:     struct is_array
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp, std::size_t _Size>
+16535:     struct is_array<_Tp[_Size]>
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_array<_Tp[]>
+16535:     : public true_type { };
+16535: 
+16535:   template<typename>
+16535:     struct __is_pointer_helper
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_pointer_helper<_Tp*>
+16535:     : public true_type { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_pointer
+16535:     : public __is_pointer_helper<typename remove_cv<_Tp>::type>::type
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename>
+16535:     struct is_lvalue_reference
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_lvalue_reference<_Tp&>
+16535:     : public true_type { };
+16535: 
+16535: 
+16535:   template<typename>
+16535:     struct is_rvalue_reference
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_rvalue_reference<_Tp&&>
+16535:     : public true_type { };
+16535: 
+16535:   template<typename>
+16535:     struct is_function;
+16535: 
+16535:   template<typename>
+16535:     struct __is_member_object_pointer_helper
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp, typename _Cp>
+16535:     struct __is_member_object_pointer_helper<_Tp _Cp::*>
+16535:     : public integral_constant<bool, !is_function<_Tp>::value> { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_member_object_pointer
+16535:     : public __is_member_object_pointer_helper<
+16535:     typename remove_cv<_Tp>::type>::type
+16535:     { };
+16535: 
+16535:   template<typename>
+16535:     struct __is_member_function_pointer_helper
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp, typename _Cp>
+16535:     struct __is_member_function_pointer_helper<_Tp _Cp::*>
+16535:     : public integral_constant<bool, is_function<_Tp>::value> { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_member_function_pointer
+16535:     : public __is_member_function_pointer_helper<
+16535:     typename remove_cv<_Tp>::type>::type
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_enum
+16535:     : public integral_constant<bool, __is_enum(_Tp)>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_union
+16535:     : public integral_constant<bool, __is_union(_Tp)>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_class
+16535:     : public integral_constant<bool, __is_class(_Tp)>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename>
+16535:     struct is_function
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes...) >
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes...) & >
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes...) && >
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes......) >
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes......) & >
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes......) && >
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes...) const >
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes...) const & >
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes...) const && >
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes......) const >
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes......) const & >
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes......) const && >
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes...) volatile >
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes...) volatile & >
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes...) volatile && >
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes......) volatile >
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes......) volatile & >
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes......) volatile && >
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes...) const volatile >
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes...) const volatile & >
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes...) const volatile && >
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes......) const volatile >
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes......) const volatile & >
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct is_function<_Res(_ArgTypes......) const volatile && >
+16535:     : public true_type { };
+16535: 
+16535: 
+16535: 
+16535:   template<typename>
+16535:     struct __is_null_pointer_helper
+16535:     : public false_type { };
+16535: 
+16535:   template<>
+16535:     struct __is_null_pointer_helper<std::nullptr_t>
+16535:     : public true_type { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_null_pointer
+16535:     : public __is_null_pointer_helper<typename remove_cv<_Tp>::type>::type
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_nullptr_t
+16535:     : public is_null_pointer<_Tp>
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_reference
+16535:     : public __or_<is_lvalue_reference<_Tp>,
+16535:                    is_rvalue_reference<_Tp>>::type
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_arithmetic
+16535:     : public __or_<is_integral<_Tp>, is_floating_point<_Tp>>::type
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_fundamental
+16535:     : public __or_<is_arithmetic<_Tp>, is_void<_Tp>,
+16535:      is_null_pointer<_Tp>>::type
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_object
+16535:     : public __not_<__or_<is_function<_Tp>, is_reference<_Tp>,
+16535:                           is_void<_Tp>>>::type
+16535:     { };
+16535: 
+16535:   template<typename>
+16535:     struct is_member_pointer;
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_scalar
+16535:     : public __or_<is_arithmetic<_Tp>, is_enum<_Tp>, is_pointer<_Tp>,
+16535:                    is_member_pointer<_Tp>, is_null_pointer<_Tp>>::type
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_compound
+16535:     : public integral_constant<bool, !is_fundamental<_Tp>::value> { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_member_pointer_helper
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp, typename _Cp>
+16535:     struct __is_member_pointer_helper<_Tp _Cp::*>
+16535:     : public true_type { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_member_pointer
+16535:     : public __is_member_pointer_helper<typename remove_cv<_Tp>::type>::type
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_referenceable
+16535:     : public __or_<is_object<_Tp>, is_reference<_Tp>>::type
+16535:     { };
+16535: 
+16535:   template<typename _Res, typename... _Args >
+16535:     struct __is_referenceable<_Res(_Args...) >
+16535:     : public true_type
+16535:     { };
+16535: 
+16535:   template<typename _Res, typename... _Args >
+16535:     struct __is_referenceable<_Res(_Args......) >
+16535:     : public true_type
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename>
+16535:     struct is_const
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_const<_Tp const>
+16535:     : public true_type { };
+16535: 
+16535: 
+16535:   template<typename>
+16535:     struct is_volatile
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_volatile<_Tp volatile>
+16535:     : public true_type { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_trivial
+16535:     : public integral_constant<bool, __is_trivial(_Tp)>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_trivially_copyable
+16535:     : public integral_constant<bool, __is_trivially_copyable(_Tp)>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_standard_layout
+16535:     : public integral_constant<bool, __is_standard_layout(_Tp)>
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_pod
+16535:     : public integral_constant<bool, __is_pod(_Tp)>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_literal_type
+16535:     : public integral_constant<bool, __is_literal_type(_Tp)>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_empty
+16535:     : public integral_constant<bool, __is_empty(_Tp)>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_polymorphic
+16535:     : public integral_constant<bool, __is_polymorphic(_Tp)>
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_final
+16535:     : public integral_constant<bool, __is_final(_Tp)>
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_abstract
+16535:     : public integral_constant<bool, __is_abstract(_Tp)>
+16535:     { };
+16535: 
+16535:   template<typename _Tp,
+16535:     bool = is_arithmetic<_Tp>::value>
+16535:     struct __is_signed_helper
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_signed_helper<_Tp, true>
+16535:     : public integral_constant<bool, _Tp(-1) < _Tp(0)>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_signed
+16535:     : public __is_signed_helper<_Tp>::type
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_unsigned
+16535:     : public __and_<is_arithmetic<_Tp>, __not_<is_signed<_Tp>>>
+16535:     { };
+16535: # 747 "/usr/include/c++/8/type_traits" 3
+16535:   template<typename _Tp, typename _Up = _Tp&&>
+16535:     _Up
+16535:     __declval(int);
+16535: 
+16535:   template<typename _Tp>
+16535:     _Tp
+16535:     __declval(long);
+16535: 
+16535:   template<typename _Tp>
+16535:     auto declval() noexcept -> decltype(__declval<_Tp>(0));
+16535: 
+16535:   template<typename, unsigned = 0>
+16535:     struct extent;
+16535: 
+16535:   template<typename>
+16535:     struct remove_all_extents;
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_array_known_bounds
+16535:     : public integral_constant<bool, (extent<_Tp>::value > 0)>
+16535:     { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_array_unknown_bounds
+16535:     : public __and_<is_array<_Tp>, __not_<extent<_Tp>>>
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   struct __do_is_destructible_impl
+16535:   {
+16535:     template<typename _Tp, typename = decltype(declval<_Tp&>().~_Tp())>
+16535:       static true_type __test(int);
+16535: 
+16535:     template<typename>
+16535:       static false_type __test(...);
+16535:   };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_destructible_impl
+16535:     : public __do_is_destructible_impl
+16535:     {
+16535:       typedef decltype(__test<_Tp>(0)) type;
+16535:     };
+16535: 
+16535:   template<typename _Tp,
+16535:            bool = __or_<is_void<_Tp>,
+16535:                         __is_array_unknown_bounds<_Tp>,
+16535:                         is_function<_Tp>>::value,
+16535:            bool = __or_<is_reference<_Tp>, is_scalar<_Tp>>::value>
+16535:     struct __is_destructible_safe;
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_destructible_safe<_Tp, false, false>
+16535:     : public __is_destructible_impl<typename
+16535:                remove_all_extents<_Tp>::type>::type
+16535:     { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_destructible_safe<_Tp, true, false>
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_destructible_safe<_Tp, false, true>
+16535:     : public true_type { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_destructible
+16535:     : public __is_destructible_safe<_Tp>::type
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   struct __do_is_nt_destructible_impl
+16535:   {
+16535:     template<typename _Tp>
+16535:       static integral_constant<bool, noexcept(declval<_Tp&>().~_Tp())>
+16535:         __test(int);
+16535: 
+16535:     template<typename>
+16535:       static false_type __test(...);
+16535:   };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_nt_destructible_impl
+16535:     : public __do_is_nt_destructible_impl
+16535:     {
+16535:       typedef decltype(__test<_Tp>(0)) type;
+16535:     };
+16535: 
+16535:   template<typename _Tp,
+16535:            bool = __or_<is_void<_Tp>,
+16535:                         __is_array_unknown_bounds<_Tp>,
+16535:                         is_function<_Tp>>::value,
+16535:            bool = __or_<is_reference<_Tp>, is_scalar<_Tp>>::value>
+16535:     struct __is_nt_destructible_safe;
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_nt_destructible_safe<_Tp, false, false>
+16535:     : public __is_nt_destructible_impl<typename
+16535:                remove_all_extents<_Tp>::type>::type
+16535:     { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_nt_destructible_safe<_Tp, true, false>
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_nt_destructible_safe<_Tp, false, true>
+16535:     : public true_type { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_nothrow_destructible
+16535:     : public __is_nt_destructible_safe<_Tp>::type
+16535:     { };
+16535: 
+16535:   struct __do_is_default_constructible_impl
+16535:   {
+16535:     template<typename _Tp, typename = decltype(_Tp())>
+16535:       static true_type __test(int);
+16535: 
+16535:     template<typename>
+16535:       static false_type __test(...);
+16535:   };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_default_constructible_impl
+16535:     : public __do_is_default_constructible_impl
+16535:     {
+16535:       typedef decltype(__test<_Tp>(0)) type;
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_default_constructible_atom
+16535:     : public __and_<__not_<is_void<_Tp>>,
+16535:                     __is_default_constructible_impl<_Tp>>
+16535:     { };
+16535: 
+16535:   template<typename _Tp, bool = is_array<_Tp>::value>
+16535:     struct __is_default_constructible_safe;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_default_constructible_safe<_Tp, true>
+16535:     : public __and_<__is_array_known_bounds<_Tp>,
+16535:       __is_default_constructible_atom<typename
+16535:                       remove_all_extents<_Tp>::type>>
+16535:     { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_default_constructible_safe<_Tp, false>
+16535:     : public __is_default_constructible_atom<_Tp>::type
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_default_constructible
+16535:     : public __is_default_constructible_safe<_Tp>::type
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp, typename... _Args>
+16535:     struct is_constructible
+16535:       : public __bool_constant<__is_constructible(_Tp, _Args...)>
+16535:     { };
+16535: 
+16535:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
+16535:     struct __is_copy_constructible_impl;
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_copy_constructible_impl<_Tp, false>
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_copy_constructible_impl<_Tp, true>
+16535:     : public is_constructible<_Tp, const _Tp&>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_copy_constructible
+16535:     : public __is_copy_constructible_impl<_Tp>
+16535:     { };
+16535: 
+16535:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
+16535:     struct __is_move_constructible_impl;
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_move_constructible_impl<_Tp, false>
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_move_constructible_impl<_Tp, true>
+16535:     : public is_constructible<_Tp, _Tp&&>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_move_constructible
+16535:     : public __is_move_constructible_impl<_Tp>
+16535:     { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_nt_default_constructible_atom
+16535:     : public integral_constant<bool, noexcept(_Tp())>
+16535:     { };
+16535: 
+16535:   template<typename _Tp, bool = is_array<_Tp>::value>
+16535:     struct __is_nt_default_constructible_impl;
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_nt_default_constructible_impl<_Tp, true>
+16535:     : public __and_<__is_array_known_bounds<_Tp>,
+16535:       __is_nt_default_constructible_atom<typename
+16535:                       remove_all_extents<_Tp>::type>>
+16535:     { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_nt_default_constructible_impl<_Tp, false>
+16535:     : public __is_nt_default_constructible_atom<_Tp>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_nothrow_default_constructible
+16535:     : public __and_<is_default_constructible<_Tp>,
+16535:                     __is_nt_default_constructible_impl<_Tp>>
+16535:     { };
+16535: 
+16535:   template<typename _Tp, typename... _Args>
+16535:     struct __is_nt_constructible_impl
+16535:     : public integral_constant<bool, noexcept(_Tp(declval<_Args>()...))>
+16535:     { };
+16535: 
+16535:   template<typename _Tp, typename _Arg>
+16535:     struct __is_nt_constructible_impl<_Tp, _Arg>
+16535:     : public integral_constant<bool,
+16535:                                noexcept(static_cast<_Tp>(declval<_Arg>()))>
+16535:     { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_nt_constructible_impl<_Tp>
+16535:     : public is_nothrow_default_constructible<_Tp>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp, typename... _Args>
+16535:     struct is_nothrow_constructible
+16535:     : public __and_<is_constructible<_Tp, _Args...>,
+16535:       __is_nt_constructible_impl<_Tp, _Args...>>
+16535:     { };
+16535: 
+16535:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
+16535:     struct __is_nothrow_copy_constructible_impl;
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_nothrow_copy_constructible_impl<_Tp, false>
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_nothrow_copy_constructible_impl<_Tp, true>
+16535:     : public is_nothrow_constructible<_Tp, const _Tp&>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_nothrow_copy_constructible
+16535:     : public __is_nothrow_copy_constructible_impl<_Tp>
+16535:     { };
+16535: 
+16535:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
+16535:     struct __is_nothrow_move_constructible_impl;
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_nothrow_move_constructible_impl<_Tp, false>
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_nothrow_move_constructible_impl<_Tp, true>
+16535:     : public is_nothrow_constructible<_Tp, _Tp&&>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_nothrow_move_constructible
+16535:     : public __is_nothrow_move_constructible_impl<_Tp>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     struct is_assignable
+16535:       : public __bool_constant<__is_assignable(_Tp, _Up)>
+16535:     { };
+16535: 
+16535:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
+16535:     struct __is_copy_assignable_impl;
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_copy_assignable_impl<_Tp, false>
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_copy_assignable_impl<_Tp, true>
+16535:     : public is_assignable<_Tp&, const _Tp&>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_copy_assignable
+16535:     : public __is_copy_assignable_impl<_Tp>
+16535:     { };
+16535: 
+16535:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
+16535:     struct __is_move_assignable_impl;
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_move_assignable_impl<_Tp, false>
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_move_assignable_impl<_Tp, true>
+16535:     : public is_assignable<_Tp&, _Tp&&>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_move_assignable
+16535:     : public __is_move_assignable_impl<_Tp>
+16535:     { };
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     struct __is_nt_assignable_impl
+16535:     : public integral_constant<bool, noexcept(declval<_Tp>() = declval<_Up>())>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     struct is_nothrow_assignable
+16535:     : public __and_<is_assignable<_Tp, _Up>,
+16535:       __is_nt_assignable_impl<_Tp, _Up>>
+16535:     { };
+16535: 
+16535:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
+16535:     struct __is_nt_copy_assignable_impl;
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_nt_copy_assignable_impl<_Tp, false>
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_nt_copy_assignable_impl<_Tp, true>
+16535:     : public is_nothrow_assignable<_Tp&, const _Tp&>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_nothrow_copy_assignable
+16535:     : public __is_nt_copy_assignable_impl<_Tp>
+16535:     { };
+16535: 
+16535:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
+16535:     struct __is_nt_move_assignable_impl;
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_nt_move_assignable_impl<_Tp, false>
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_nt_move_assignable_impl<_Tp, true>
+16535:     : public is_nothrow_assignable<_Tp&, _Tp&&>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_nothrow_move_assignable
+16535:     : public __is_nt_move_assignable_impl<_Tp>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp, typename... _Args>
+16535:     struct is_trivially_constructible
+16535:     : public __and_<is_constructible<_Tp, _Args...>, __bool_constant<
+16535:         __is_trivially_constructible(_Tp, _Args...)>>::type
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_trivially_default_constructible
+16535:     : public is_trivially_constructible<_Tp>::type
+16535:     { };
+16535: 
+16535:   struct __do_is_implicitly_default_constructible_impl
+16535:   {
+16535:     template <typename _Tp>
+16535:     static void __helper(const _Tp&);
+16535: 
+16535:     template <typename _Tp>
+16535:     static true_type __test(const _Tp&,
+16535:                             decltype(__helper<const _Tp&>({}))* = 0);
+16535: 
+16535:     static false_type __test(...);
+16535:   };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_implicitly_default_constructible_impl
+16535:     : public __do_is_implicitly_default_constructible_impl
+16535:     {
+16535:       typedef decltype(__test(declval<_Tp>())) type;
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_implicitly_default_constructible_safe
+16535:     : public __is_implicitly_default_constructible_impl<_Tp>::type
+16535:     { };
+16535: 
+16535:   template <typename _Tp>
+16535:     struct __is_implicitly_default_constructible
+16535:     : public __and_<is_default_constructible<_Tp>,
+16535:       __is_implicitly_default_constructible_safe<_Tp>>
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
+16535:     struct __is_trivially_copy_constructible_impl;
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_trivially_copy_constructible_impl<_Tp, false>
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_trivially_copy_constructible_impl<_Tp, true>
+16535:     : public __and_<is_copy_constructible<_Tp>,
+16535:       integral_constant<bool,
+16535:    __is_trivially_constructible(_Tp, const _Tp&)>>
+16535:     { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_trivially_copy_constructible
+16535:     : public __is_trivially_copy_constructible_impl<_Tp>
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
+16535:     struct __is_trivially_move_constructible_impl;
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_trivially_move_constructible_impl<_Tp, false>
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_trivially_move_constructible_impl<_Tp, true>
+16535:     : public __and_<is_move_constructible<_Tp>,
+16535:       integral_constant<bool,
+16535:    __is_trivially_constructible(_Tp, _Tp&&)>>
+16535:     { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_trivially_move_constructible
+16535:     : public __is_trivially_move_constructible_impl<_Tp>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     struct is_trivially_assignable
+16535:     : public __bool_constant<__is_trivially_assignable(_Tp, _Up)>
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
+16535:     struct __is_trivially_copy_assignable_impl;
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_trivially_copy_assignable_impl<_Tp, false>
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_trivially_copy_assignable_impl<_Tp, true>
+16535:     : public __and_<is_copy_assignable<_Tp>,
+16535:       integral_constant<bool,
+16535:    __is_trivially_assignable(_Tp&, const _Tp&)>>
+16535:     { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_trivially_copy_assignable
+16535:     : public __is_trivially_copy_assignable_impl<_Tp>
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
+16535:     struct __is_trivially_move_assignable_impl;
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_trivially_move_assignable_impl<_Tp, false>
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_trivially_move_assignable_impl<_Tp, true>
+16535:     : public __and_<is_move_assignable<_Tp>,
+16535:       integral_constant<bool,
+16535:    __is_trivially_assignable(_Tp&, _Tp&&)>>
+16535:     { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_trivially_move_assignable
+16535:     : public __is_trivially_move_assignable_impl<_Tp>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_trivially_destructible
+16535:     : public __and_<is_destructible<_Tp>, integral_constant<bool,
+16535:          __has_trivial_destructor(_Tp)>>
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct has_virtual_destructor
+16535:     : public integral_constant<bool, __has_virtual_destructor(_Tp)>
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct alignment_of
+16535:     : public integral_constant<std::size_t, alignof(_Tp)> { };
+16535: 
+16535: 
+16535:   template<typename>
+16535:     struct rank
+16535:     : public integral_constant<std::size_t, 0> { };
+16535: 
+16535:   template<typename _Tp, std::size_t _Size>
+16535:     struct rank<_Tp[_Size]>
+16535:     : public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct rank<_Tp[]>
+16535:     : public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };
+16535: 
+16535: 
+16535:   template<typename, unsigned _Uint>
+16535:     struct extent
+16535:     : public integral_constant<std::size_t, 0> { };
+16535: 
+16535:   template<typename _Tp, unsigned _Uint, std::size_t _Size>
+16535:     struct extent<_Tp[_Size], _Uint>
+16535:     : public integral_constant<std::size_t,
+16535:           _Uint == 0 ? _Size : extent<_Tp,
+16535:           _Uint - 1>::value>
+16535:     { };
+16535: 
+16535:   template<typename _Tp, unsigned _Uint>
+16535:     struct extent<_Tp[], _Uint>
+16535:     : public integral_constant<std::size_t,
+16535:           _Uint == 0 ? 0 : extent<_Tp,
+16535:              _Uint - 1>::value>
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename, typename>
+16535:     struct is_same
+16535:     : public false_type { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_same<_Tp, _Tp>
+16535:     : public true_type { };
+16535: 
+16535: 
+16535:   template<typename _Base, typename _Derived>
+16535:     struct is_base_of
+16535:     : public integral_constant<bool, __is_base_of(_Base, _Derived)>
+16535:     { };
+16535: 
+16535:   template<typename _From, typename _To,
+16535:            bool = __or_<is_void<_From>, is_function<_To>,
+16535:                         is_array<_To>>::value>
+16535:     struct __is_convertible_helper
+16535:     { typedef typename is_void<_To>::type type; };
+16535: 
+16535:   template<typename _From, typename _To>
+16535:     class __is_convertible_helper<_From, _To, false>
+16535:     {
+16535:        template<typename _To1>
+16535:  static void __test_aux(_To1);
+16535: 
+16535:       template<typename _From1, typename _To1,
+16535:         typename = decltype(__test_aux<_To1>(std::declval<_From1>()))>
+16535:  static true_type
+16535:  __test(int);
+16535: 
+16535:       template<typename, typename>
+16535:  static false_type
+16535:  __test(...);
+16535: 
+16535:     public:
+16535:       typedef decltype(__test<_From, _To>(0)) type;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _From, typename _To>
+16535:     struct is_convertible
+16535:     : public __is_convertible_helper<_From, _To>::type
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct remove_const
+16535:     { typedef _Tp type; };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct remove_const<_Tp const>
+16535:     { typedef _Tp type; };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct remove_volatile
+16535:     { typedef _Tp type; };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct remove_volatile<_Tp volatile>
+16535:     { typedef _Tp type; };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct remove_cv
+16535:     {
+16535:       typedef typename
+16535:       remove_const<typename remove_volatile<_Tp>::type>::type type;
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct add_const
+16535:     { typedef _Tp const type; };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct add_volatile
+16535:     { typedef _Tp volatile type; };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct add_cv
+16535:     {
+16535:       typedef typename
+16535:       add_const<typename add_volatile<_Tp>::type>::type type;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     using remove_const_t = typename remove_const<_Tp>::type;
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     using remove_volatile_t = typename remove_volatile<_Tp>::type;
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     using remove_cv_t = typename remove_cv<_Tp>::type;
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     using add_const_t = typename add_const<_Tp>::type;
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     using add_volatile_t = typename add_volatile<_Tp>::type;
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     using add_cv_t = typename add_cv<_Tp>::type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct remove_reference
+16535:     { typedef _Tp type; };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct remove_reference<_Tp&>
+16535:     { typedef _Tp type; };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct remove_reference<_Tp&&>
+16535:     { typedef _Tp type; };
+16535: 
+16535:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
+16535:     struct __add_lvalue_reference_helper
+16535:     { typedef _Tp type; };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __add_lvalue_reference_helper<_Tp, true>
+16535:     { typedef _Tp& type; };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct add_lvalue_reference
+16535:     : public __add_lvalue_reference_helper<_Tp>
+16535:     { };
+16535: 
+16535:   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
+16535:     struct __add_rvalue_reference_helper
+16535:     { typedef _Tp type; };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __add_rvalue_reference_helper<_Tp, true>
+16535:     { typedef _Tp&& type; };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct add_rvalue_reference
+16535:     : public __add_rvalue_reference_helper<_Tp>
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     using remove_reference_t = typename remove_reference<_Tp>::type;
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     using add_lvalue_reference_t = typename add_lvalue_reference<_Tp>::type;
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     using add_rvalue_reference_t = typename add_rvalue_reference<_Tp>::type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Unqualified, bool _IsConst, bool _IsVol>
+16535:     struct __cv_selector;
+16535: 
+16535:   template<typename _Unqualified>
+16535:     struct __cv_selector<_Unqualified, false, false>
+16535:     { typedef _Unqualified __type; };
+16535: 
+16535:   template<typename _Unqualified>
+16535:     struct __cv_selector<_Unqualified, false, true>
+16535:     { typedef volatile _Unqualified __type; };
+16535: 
+16535:   template<typename _Unqualified>
+16535:     struct __cv_selector<_Unqualified, true, false>
+16535:     { typedef const _Unqualified __type; };
+16535: 
+16535:   template<typename _Unqualified>
+16535:     struct __cv_selector<_Unqualified, true, true>
+16535:     { typedef const volatile _Unqualified __type; };
+16535: 
+16535:   template<typename _Qualified, typename _Unqualified,
+16535:     bool _IsConst = is_const<_Qualified>::value,
+16535:     bool _IsVol = is_volatile<_Qualified>::value>
+16535:     class __match_cv_qualifiers
+16535:     {
+16535:       typedef __cv_selector<_Unqualified, _IsConst, _IsVol> __match;
+16535: 
+16535:     public:
+16535:       typedef typename __match::__type __type;
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __make_unsigned
+16535:     { typedef _Tp __type; };
+16535: 
+16535:   template<>
+16535:     struct __make_unsigned<char>
+16535:     { typedef unsigned char __type; };
+16535: 
+16535:   template<>
+16535:     struct __make_unsigned<signed char>
+16535:     { typedef unsigned char __type; };
+16535: 
+16535:   template<>
+16535:     struct __make_unsigned<short>
+16535:     { typedef unsigned short __type; };
+16535: 
+16535:   template<>
+16535:     struct __make_unsigned<int>
+16535:     { typedef unsigned int __type; };
+16535: 
+16535:   template<>
+16535:     struct __make_unsigned<long>
+16535:     { typedef unsigned long __type; };
+16535: 
+16535:   template<>
+16535:     struct __make_unsigned<long long>
+16535:     { typedef unsigned long long __type; };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct __make_unsigned<__int128>
+16535:     { typedef unsigned __int128 __type; };
+16535: # 1590 "/usr/include/c++/8/type_traits" 3
+16535:   template<typename _Tp,
+16535:     bool _IsInt = is_integral<_Tp>::value,
+16535:     bool _IsEnum = is_enum<_Tp>::value>
+16535:     class __make_unsigned_selector;
+16535: 
+16535:   template<typename _Tp>
+16535:     class __make_unsigned_selector<_Tp, true, false>
+16535:     {
+16535:       typedef __make_unsigned<typename remove_cv<_Tp>::type> __unsignedt;
+16535:       typedef typename __unsignedt::__type __unsigned_type;
+16535:       typedef __match_cv_qualifiers<_Tp, __unsigned_type> __cv_unsigned;
+16535: 
+16535:     public:
+16535:       typedef typename __cv_unsigned::__type __type;
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     class __make_unsigned_selector<_Tp, false, true>
+16535:     {
+16535: 
+16535:       typedef unsigned char __smallest;
+16535:       static const bool __b0 = sizeof(_Tp) <= sizeof(__smallest);
+16535:       static const bool __b1 = sizeof(_Tp) <= sizeof(unsigned short);
+16535:       static const bool __b2 = sizeof(_Tp) <= sizeof(unsigned int);
+16535:       static const bool __b3 = sizeof(_Tp) <= sizeof(unsigned long);
+16535:       typedef conditional<__b3, unsigned long, unsigned long long> __cond3;
+16535:       typedef typename __cond3::type __cond3_type;
+16535:       typedef conditional<__b2, unsigned int, __cond3_type> __cond2;
+16535:       typedef typename __cond2::type __cond2_type;
+16535:       typedef conditional<__b1, unsigned short, __cond2_type> __cond1;
+16535:       typedef typename __cond1::type __cond1_type;
+16535: 
+16535:       typedef typename conditional<__b0, __smallest, __cond1_type>::type
+16535:  __unsigned_type;
+16535:       typedef __match_cv_qualifiers<_Tp, __unsigned_type> __cv_unsigned;
+16535: 
+16535:     public:
+16535:       typedef typename __cv_unsigned::__type __type;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct make_unsigned
+16535:     { typedef typename __make_unsigned_selector<_Tp>::__type type; };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct make_unsigned<bool>;
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __make_signed
+16535:     { typedef _Tp __type; };
+16535: 
+16535:   template<>
+16535:     struct __make_signed<char>
+16535:     { typedef signed char __type; };
+16535: 
+16535:   template<>
+16535:     struct __make_signed<unsigned char>
+16535:     { typedef signed char __type; };
+16535: 
+16535:   template<>
+16535:     struct __make_signed<unsigned short>
+16535:     { typedef signed short __type; };
+16535: 
+16535:   template<>
+16535:     struct __make_signed<unsigned int>
+16535:     { typedef signed int __type; };
+16535: 
+16535:   template<>
+16535:     struct __make_signed<unsigned long>
+16535:     { typedef signed long __type; };
+16535: 
+16535:   template<>
+16535:     struct __make_signed<unsigned long long>
+16535:     { typedef signed long long __type; };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct __make_signed<unsigned __int128>
+16535:     { typedef __int128 __type; };
+16535: # 1694 "/usr/include/c++/8/type_traits" 3
+16535:   template<typename _Tp,
+16535:     bool _IsInt = is_integral<_Tp>::value,
+16535:     bool _IsEnum = is_enum<_Tp>::value>
+16535:     class __make_signed_selector;
+16535: 
+16535:   template<typename _Tp>
+16535:     class __make_signed_selector<_Tp, true, false>
+16535:     {
+16535:       typedef __make_signed<typename remove_cv<_Tp>::type> __signedt;
+16535:       typedef typename __signedt::__type __signed_type;
+16535:       typedef __match_cv_qualifiers<_Tp, __signed_type> __cv_signed;
+16535: 
+16535:     public:
+16535:       typedef typename __cv_signed::__type __type;
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     class __make_signed_selector<_Tp, false, true>
+16535:     {
+16535:       typedef typename __make_unsigned_selector<_Tp>::__type __unsigned_type;
+16535: 
+16535:     public:
+16535:       typedef typename __make_signed_selector<__unsigned_type>::__type __type;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct make_signed
+16535:     { typedef typename __make_signed_selector<_Tp>::__type type; };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct make_signed<bool>;
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     using make_signed_t = typename make_signed<_Tp>::type;
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     using make_unsigned_t = typename make_unsigned<_Tp>::type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct remove_extent
+16535:     { typedef _Tp type; };
+16535: 
+16535:   template<typename _Tp, std::size_t _Size>
+16535:     struct remove_extent<_Tp[_Size]>
+16535:     { typedef _Tp type; };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct remove_extent<_Tp[]>
+16535:     { typedef _Tp type; };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct remove_all_extents
+16535:     { typedef _Tp type; };
+16535: 
+16535:   template<typename _Tp, std::size_t _Size>
+16535:     struct remove_all_extents<_Tp[_Size]>
+16535:     { typedef typename remove_all_extents<_Tp>::type type; };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct remove_all_extents<_Tp[]>
+16535:     { typedef typename remove_all_extents<_Tp>::type type; };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     using remove_extent_t = typename remove_extent<_Tp>::type;
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     using remove_all_extents_t = typename remove_all_extents<_Tp>::type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename>
+16535:     struct __remove_pointer_helper
+16535:     { typedef _Tp type; };
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     struct __remove_pointer_helper<_Tp, _Up*>
+16535:     { typedef _Up type; };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct remove_pointer
+16535:     : public __remove_pointer_helper<_Tp, typename remove_cv<_Tp>::type>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp, bool = __or_<__is_referenceable<_Tp>,
+16535:           is_void<_Tp>>::value>
+16535:     struct __add_pointer_helper
+16535:     { typedef _Tp type; };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __add_pointer_helper<_Tp, true>
+16535:     { typedef typename remove_reference<_Tp>::type* type; };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct add_pointer
+16535:     : public __add_pointer_helper<_Tp>
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     using remove_pointer_t = typename remove_pointer<_Tp>::type;
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     using add_pointer_t = typename add_pointer<_Tp>::type;
+16535: 
+16535: 
+16535:   template<std::size_t _Len>
+16535:     struct __aligned_storage_msa
+16535:     {
+16535:       union __type
+16535:       {
+16535:  unsigned char __data[_Len];
+16535:  struct __attribute__((__aligned__)) { } __align;
+16535:       };
+16535:     };
+16535: # 1840 "/usr/include/c++/8/type_traits" 3
+16535:   template<std::size_t _Len, std::size_t _Align =
+16535:     __alignof__(typename __aligned_storage_msa<_Len>::__type)>
+16535:     struct aligned_storage
+16535:     {
+16535:       union type
+16535:       {
+16535:  unsigned char __data[_Len];
+16535:  struct __attribute__((__aligned__((_Align)))) { } __align;
+16535:       };
+16535:     };
+16535: 
+16535:   template <typename... _Types>
+16535:     struct __strictest_alignment
+16535:     {
+16535:       static const size_t _S_alignment = 0;
+16535:       static const size_t _S_size = 0;
+16535:     };
+16535: 
+16535:   template <typename _Tp, typename... _Types>
+16535:     struct __strictest_alignment<_Tp, _Types...>
+16535:     {
+16535:       static const size_t _S_alignment =
+16535:         alignof(_Tp) > __strictest_alignment<_Types...>::_S_alignment
+16535:  ? alignof(_Tp) : __strictest_alignment<_Types...>::_S_alignment;
+16535:       static const size_t _S_size =
+16535:         sizeof(_Tp) > __strictest_alignment<_Types...>::_S_size
+16535:  ? sizeof(_Tp) : __strictest_alignment<_Types...>::_S_size;
+16535:     };
+16535: # 1879 "/usr/include/c++/8/type_traits" 3
+16535:   template <size_t _Len, typename... _Types>
+16535:     struct aligned_union
+16535:     {
+16535:     private:
+16535:       static_assert(sizeof...(_Types) != 0, "At least one type is required");
+16535: 
+16535:       using __strictest = __strictest_alignment<_Types...>;
+16535:       static const size_t _S_len = _Len > __strictest::_S_size
+16535:  ? _Len : __strictest::_S_size;
+16535:     public:
+16535: 
+16535:       static const size_t alignment_value = __strictest::_S_alignment;
+16535: 
+16535:       typedef typename aligned_storage<_S_len, alignment_value>::type type;
+16535:     };
+16535: 
+16535:   template <size_t _Len, typename... _Types>
+16535:     const size_t aligned_union<_Len, _Types...>::alignment_value;
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Up,
+16535:     bool _IsArray = is_array<_Up>::value,
+16535:     bool _IsFunction = is_function<_Up>::value>
+16535:     struct __decay_selector;
+16535: 
+16535: 
+16535:   template<typename _Up>
+16535:     struct __decay_selector<_Up, false, false>
+16535:     { typedef typename remove_cv<_Up>::type __type; };
+16535: 
+16535:   template<typename _Up>
+16535:     struct __decay_selector<_Up, true, false>
+16535:     { typedef typename remove_extent<_Up>::type* __type; };
+16535: 
+16535:   template<typename _Up>
+16535:     struct __decay_selector<_Up, false, true>
+16535:     { typedef typename add_pointer<_Up>::type __type; };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     class decay
+16535:     {
+16535:       typedef typename remove_reference<_Tp>::type __remove_type;
+16535: 
+16535:     public:
+16535:       typedef typename __decay_selector<__remove_type>::__type type;
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     class reference_wrapper;
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __strip_reference_wrapper
+16535:     {
+16535:       typedef _Tp __type;
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __strip_reference_wrapper<reference_wrapper<_Tp> >
+16535:     {
+16535:       typedef _Tp& __type;
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __decay_and_strip
+16535:     {
+16535:       typedef typename __strip_reference_wrapper<
+16535:  typename decay<_Tp>::type>::__type __type;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<bool, typename _Tp = void>
+16535:     struct enable_if
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct enable_if<true, _Tp>
+16535:     { typedef _Tp type; };
+16535: 
+16535:   template<typename... _Cond>
+16535:     using _Require = typename enable_if<__and_<_Cond...>::value>::type;
+16535: 
+16535: 
+16535: 
+16535:   template<bool _Cond, typename _Iftrue, typename _Iffalse>
+16535:     struct conditional
+16535:     { typedef _Iftrue type; };
+16535: 
+16535: 
+16535:   template<typename _Iftrue, typename _Iffalse>
+16535:     struct conditional<false, _Iftrue, _Iffalse>
+16535:     { typedef _Iffalse type; };
+16535: 
+16535: 
+16535:   template<typename... _Tp>
+16535:     struct common_type;
+16535: 
+16535: 
+16535: 
+16535:   struct __do_common_type_impl
+16535:   {
+16535:     template<typename _Tp, typename _Up>
+16535:       static __success_type<typename decay<decltype
+16535:        (true ? std::declval<_Tp>()
+16535:         : std::declval<_Up>())>::type> _S_test(int);
+16535: 
+16535:     template<typename, typename>
+16535:       static __failure_type _S_test(...);
+16535:   };
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     struct __common_type_impl
+16535:     : private __do_common_type_impl
+16535:     {
+16535:       typedef decltype(_S_test<_Tp, _Up>(0)) type;
+16535:     };
+16535: 
+16535:   struct __do_member_type_wrapper
+16535:   {
+16535:     template<typename _Tp>
+16535:       static __success_type<typename _Tp::type> _S_test(int);
+16535: 
+16535:     template<typename>
+16535:       static __failure_type _S_test(...);
+16535:   };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __member_type_wrapper
+16535:     : private __do_member_type_wrapper
+16535:     {
+16535:       typedef decltype(_S_test<_Tp>(0)) type;
+16535:     };
+16535: 
+16535:   template<typename _CTp, typename... _Args>
+16535:     struct __expanded_common_type_wrapper
+16535:     {
+16535:       typedef common_type<typename _CTp::type, _Args...> type;
+16535:     };
+16535: 
+16535:   template<typename... _Args>
+16535:     struct __expanded_common_type_wrapper<__failure_type, _Args...>
+16535:     { typedef __failure_type type; };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct common_type<_Tp>
+16535:     { typedef typename decay<_Tp>::type type; };
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     struct common_type<_Tp, _Up>
+16535:     : public __common_type_impl<_Tp, _Up>::type
+16535:     { };
+16535: 
+16535:   template<typename _Tp, typename _Up, typename... _Vp>
+16535:     struct common_type<_Tp, _Up, _Vp...>
+16535:     : public __expanded_common_type_wrapper<typename __member_type_wrapper<
+16535:                common_type<_Tp, _Up>>::type, _Vp...>::type
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct underlying_type
+16535:     {
+16535:       typedef __underlying_type(_Tp) type;
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __declval_protector
+16535:     {
+16535:       static const bool __stop = false;
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     auto declval() noexcept -> decltype(__declval<_Tp>(0))
+16535:     {
+16535:       static_assert(__declval_protector<_Tp>::__stop,
+16535:       "declval() must not be used!");
+16535:       return __declval<_Tp>(0);
+16535:     }
+16535: # 2072 "/usr/include/c++/8/type_traits" 3
+16535:   template<>
+16535:     struct __make_unsigned<wchar_t>
+16535:     {
+16535:       using __type
+16535:  = typename __make_unsigned_selector<wchar_t, false, true>::__type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __make_signed<wchar_t>
+16535:     {
+16535:       using __type
+16535:  = typename __make_signed_selector<wchar_t, false, true>::__type;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct __make_unsigned<char16_t>
+16535:     {
+16535:       using __type
+16535:  = typename __make_unsigned_selector<char16_t, false, true>::__type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __make_signed<char16_t>
+16535:     {
+16535:       using __type
+16535:  = typename __make_signed_selector<char16_t, false, true>::__type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __make_unsigned<char32_t>
+16535:     {
+16535:       using __type
+16535:  = typename __make_unsigned_selector<char32_t, false, true>::__type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __make_signed<char32_t>
+16535:     {
+16535:       using __type
+16535:  = typename __make_signed_selector<char32_t, false, true>::__type;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Signature>
+16535:     class result_of;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   struct __invoke_memfun_ref { };
+16535:   struct __invoke_memfun_deref { };
+16535:   struct __invoke_memobj_ref { };
+16535:   struct __invoke_memobj_deref { };
+16535:   struct __invoke_other { };
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Tag>
+16535:     struct __result_of_success : __success_type<_Tp>
+16535:     { using __invoke_type = _Tag; };
+16535: 
+16535: 
+16535:   struct __result_of_memfun_ref_impl
+16535:   {
+16535:     template<typename _Fp, typename _Tp1, typename... _Args>
+16535:       static __result_of_success<decltype(
+16535:       (std::declval<_Tp1>().*std::declval<_Fp>())(std::declval<_Args>()...)
+16535:       ), __invoke_memfun_ref> _S_test(int);
+16535: 
+16535:     template<typename...>
+16535:       static __failure_type _S_test(...);
+16535:   };
+16535: 
+16535:   template<typename _MemPtr, typename _Arg, typename... _Args>
+16535:     struct __result_of_memfun_ref
+16535:     : private __result_of_memfun_ref_impl
+16535:     {
+16535:       typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type;
+16535:     };
+16535: 
+16535: 
+16535:   struct __result_of_memfun_deref_impl
+16535:   {
+16535:     template<typename _Fp, typename _Tp1, typename... _Args>
+16535:       static __result_of_success<decltype(
+16535:       ((*std::declval<_Tp1>()).*std::declval<_Fp>())(std::declval<_Args>()...)
+16535:       ), __invoke_memfun_deref> _S_test(int);
+16535: 
+16535:     template<typename...>
+16535:       static __failure_type _S_test(...);
+16535:   };
+16535: 
+16535:   template<typename _MemPtr, typename _Arg, typename... _Args>
+16535:     struct __result_of_memfun_deref
+16535:     : private __result_of_memfun_deref_impl
+16535:     {
+16535:       typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type;
+16535:     };
+16535: 
+16535: 
+16535:   struct __result_of_memobj_ref_impl
+16535:   {
+16535:     template<typename _Fp, typename _Tp1>
+16535:       static __result_of_success<decltype(
+16535:       std::declval<_Tp1>().*std::declval<_Fp>()
+16535:       ), __invoke_memobj_ref> _S_test(int);
+16535: 
+16535:     template<typename, typename>
+16535:       static __failure_type _S_test(...);
+16535:   };
+16535: 
+16535:   template<typename _MemPtr, typename _Arg>
+16535:     struct __result_of_memobj_ref
+16535:     : private __result_of_memobj_ref_impl
+16535:     {
+16535:       typedef decltype(_S_test<_MemPtr, _Arg>(0)) type;
+16535:     };
+16535: 
+16535: 
+16535:   struct __result_of_memobj_deref_impl
+16535:   {
+16535:     template<typename _Fp, typename _Tp1>
+16535:       static __result_of_success<decltype(
+16535:       (*std::declval<_Tp1>()).*std::declval<_Fp>()
+16535:       ), __invoke_memobj_deref> _S_test(int);
+16535: 
+16535:     template<typename, typename>
+16535:       static __failure_type _S_test(...);
+16535:   };
+16535: 
+16535:   template<typename _MemPtr, typename _Arg>
+16535:     struct __result_of_memobj_deref
+16535:     : private __result_of_memobj_deref_impl
+16535:     {
+16535:       typedef decltype(_S_test<_MemPtr, _Arg>(0)) type;
+16535:     };
+16535: 
+16535:   template<typename _MemPtr, typename _Arg>
+16535:     struct __result_of_memobj;
+16535: 
+16535:   template<typename _Res, typename _Class, typename _Arg>
+16535:     struct __result_of_memobj<_Res _Class::*, _Arg>
+16535:     {
+16535:       typedef typename remove_cv<typename remove_reference<
+16535:         _Arg>::type>::type _Argval;
+16535:       typedef _Res _Class::* _MemPtr;
+16535:       typedef typename conditional<__or_<is_same<_Argval, _Class>,
+16535:         is_base_of<_Class, _Argval>>::value,
+16535:         __result_of_memobj_ref<_MemPtr, _Arg>,
+16535:         __result_of_memobj_deref<_MemPtr, _Arg>
+16535:       >::type::type type;
+16535:     };
+16535: 
+16535:   template<typename _MemPtr, typename _Arg, typename... _Args>
+16535:     struct __result_of_memfun;
+16535: 
+16535:   template<typename _Res, typename _Class, typename _Arg, typename... _Args>
+16535:     struct __result_of_memfun<_Res _Class::*, _Arg, _Args...>
+16535:     {
+16535:       typedef typename remove_cv<typename remove_reference<
+16535:         _Arg>::type>::type _Argval;
+16535:       typedef _Res _Class::* _MemPtr;
+16535:       typedef typename conditional<__or_<is_same<_Argval, _Class>,
+16535:         is_base_of<_Class, _Argval>>::value,
+16535:         __result_of_memfun_ref<_MemPtr, _Arg, _Args...>,
+16535:         __result_of_memfun_deref<_MemPtr, _Arg, _Args...>
+16535:       >::type::type type;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up = typename decay<_Tp>::type>
+16535:     struct __inv_unwrap
+16535:     {
+16535:       using type = _Tp;
+16535:     };
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     struct __inv_unwrap<_Tp, reference_wrapper<_Up>>
+16535:     {
+16535:       using type = _Up&;
+16535:     };
+16535: 
+16535:   template<bool, bool, typename _Functor, typename... _ArgTypes>
+16535:     struct __result_of_impl
+16535:     {
+16535:       typedef __failure_type type;
+16535:     };
+16535: 
+16535:   template<typename _MemPtr, typename _Arg>
+16535:     struct __result_of_impl<true, false, _MemPtr, _Arg>
+16535:     : public __result_of_memobj<typename decay<_MemPtr>::type,
+16535:     typename __inv_unwrap<_Arg>::type>
+16535:     { };
+16535: 
+16535:   template<typename _MemPtr, typename _Arg, typename... _Args>
+16535:     struct __result_of_impl<false, true, _MemPtr, _Arg, _Args...>
+16535:     : public __result_of_memfun<typename decay<_MemPtr>::type,
+16535:     typename __inv_unwrap<_Arg>::type, _Args...>
+16535:     { };
+16535: 
+16535: 
+16535:   struct __result_of_other_impl
+16535:   {
+16535:     template<typename _Fn, typename... _Args>
+16535:       static __result_of_success<decltype(
+16535:       std::declval<_Fn>()(std::declval<_Args>()...)
+16535:       ), __invoke_other> _S_test(int);
+16535: 
+16535:     template<typename...>
+16535:       static __failure_type _S_test(...);
+16535:   };
+16535: 
+16535:   template<typename _Functor, typename... _ArgTypes>
+16535:     struct __result_of_impl<false, false, _Functor, _ArgTypes...>
+16535:     : private __result_of_other_impl
+16535:     {
+16535:       typedef decltype(_S_test<_Functor, _ArgTypes...>(0)) type;
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Functor, typename... _ArgTypes>
+16535:     struct __invoke_result
+16535:     : public __result_of_impl<
+16535:         is_member_object_pointer<
+16535:           typename remove_reference<_Functor>::type
+16535:         >::value,
+16535:         is_member_function_pointer<
+16535:           typename remove_reference<_Functor>::type
+16535:         >::value,
+16535:  _Functor, _ArgTypes...
+16535:       >::type
+16535:     { };
+16535: 
+16535:   template<typename _Functor, typename... _ArgTypes>
+16535:     struct result_of<_Functor(_ArgTypes...)>
+16535:     : public __invoke_result<_Functor, _ArgTypes...>
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535:   template<size_t _Len, size_t _Align =
+16535:      __alignof__(typename __aligned_storage_msa<_Len>::__type)>
+16535:     using aligned_storage_t = typename aligned_storage<_Len, _Align>::type;
+16535: 
+16535:   template <size_t _Len, typename... _Types>
+16535:     using aligned_union_t = typename aligned_union<_Len, _Types...>::type;
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     using decay_t = typename decay<_Tp>::type;
+16535: 
+16535: 
+16535:   template<bool _Cond, typename _Tp = void>
+16535:     using enable_if_t = typename enable_if<_Cond, _Tp>::type;
+16535: 
+16535: 
+16535:   template<bool _Cond, typename _Iftrue, typename _Iffalse>
+16535:     using conditional_t = typename conditional<_Cond, _Iftrue, _Iffalse>::type;
+16535: 
+16535: 
+16535:   template<typename... _Tp>
+16535:     using common_type_t = typename common_type<_Tp...>::type;
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     using underlying_type_t = typename underlying_type<_Tp>::type;
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     using result_of_t = typename result_of<_Tp>::type;
+16535: 
+16535: 
+16535: 
+16535:   template<bool _Cond, typename _Tp = void>
+16535:     using __enable_if_t = typename enable_if<_Cond, _Tp>::type;
+16535: 
+16535: 
+16535:   template<typename...> using __void_t = void;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename...> using void_t = void;
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Default, typename _AlwaysVoid,
+16535:     template<typename...> class _Op, typename... _Args>
+16535:     struct __detector
+16535:     {
+16535:       using value_t = false_type;
+16535:       using type = _Default;
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Default, template<typename...> class _Op,
+16535:      typename... _Args>
+16535:     struct __detector<_Default, __void_t<_Op<_Args...>>, _Op, _Args...>
+16535:     {
+16535:       using value_t = true_type;
+16535:       using type = _Op<_Args...>;
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Default, template<typename...> class _Op,
+16535:     typename... _Args>
+16535:     using __detected_or = __detector<_Default, void, _Op, _Args...>;
+16535: 
+16535: 
+16535:   template<typename _Default, template<typename...> class _Op,
+16535:     typename... _Args>
+16535:     using __detected_or_t
+16535:       = typename __detected_or<_Default, _Op, _Args...>::type;
+16535: # 2408 "/usr/include/c++/8/type_traits" 3
+16535:   template <typename _Tp>
+16535:     struct __is_swappable;
+16535: 
+16535:   template <typename _Tp>
+16535:     struct __is_nothrow_swappable;
+16535: 
+16535:   template<typename... _Elements>
+16535:     class tuple;
+16535: 
+16535:   template<typename>
+16535:     struct __is_tuple_like_impl : false_type
+16535:     { };
+16535: 
+16535:   template<typename... _Tps>
+16535:     struct __is_tuple_like_impl<tuple<_Tps...>> : true_type
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_tuple_like
+16535:     : public __is_tuple_like_impl<typename remove_cv<
+16535:       typename remove_reference<_Tp>::type>::type>::type
+16535:     { };
+16535: 
+16535:   template<typename _Tp>
+16535:     inline
+16535:     typename enable_if<__and_<__not_<__is_tuple_like<_Tp>>,
+16535:          is_move_constructible<_Tp>,
+16535:          is_move_assignable<_Tp>>::value>::type
+16535:     swap(_Tp&, _Tp&)
+16535:     noexcept(__and_<is_nothrow_move_constructible<_Tp>,
+16535:              is_nothrow_move_assignable<_Tp>>::value);
+16535: 
+16535:   template<typename _Tp, size_t _Nm>
+16535:     inline
+16535:     typename enable_if<__is_swappable<_Tp>::value>::type
+16535:     swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
+16535:     noexcept(__is_nothrow_swappable<_Tp>::value);
+16535: 
+16535:   namespace __swappable_details {
+16535:     using std::swap;
+16535: 
+16535:     struct __do_is_swappable_impl
+16535:     {
+16535:       template<typename _Tp, typename
+16535:                = decltype(swap(std::declval<_Tp&>(), std::declval<_Tp&>()))>
+16535:         static true_type __test(int);
+16535: 
+16535:       template<typename>
+16535:         static false_type __test(...);
+16535:     };
+16535: 
+16535:     struct __do_is_nothrow_swappable_impl
+16535:     {
+16535:       template<typename _Tp>
+16535:         static __bool_constant<
+16535:           noexcept(swap(std::declval<_Tp&>(), std::declval<_Tp&>()))
+16535:         > __test(int);
+16535: 
+16535:       template<typename>
+16535:         static false_type __test(...);
+16535:     };
+16535: 
+16535:   }
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_swappable_impl
+16535:     : public __swappable_details::__do_is_swappable_impl
+16535:     {
+16535:       typedef decltype(__test<_Tp>(0)) type;
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_nothrow_swappable_impl
+16535:     : public __swappable_details::__do_is_nothrow_swappable_impl
+16535:     {
+16535:       typedef decltype(__test<_Tp>(0)) type;
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_swappable
+16535:     : public __is_swappable_impl<_Tp>::type
+16535:     { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_nothrow_swappable
+16535:     : public __is_nothrow_swappable_impl<_Tp>::type
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_swappable
+16535:     : public __is_swappable_impl<_Tp>::type
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_nothrow_swappable
+16535:     : public __is_nothrow_swappable_impl<_Tp>::type
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr bool is_swappable_v =
+16535:       is_swappable<_Tp>::value;
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr bool is_nothrow_swappable_v =
+16535:       is_nothrow_swappable<_Tp>::value;
+16535: 
+16535: 
+16535:   namespace __swappable_with_details {
+16535:     using std::swap;
+16535: 
+16535:     struct __do_is_swappable_with_impl
+16535:     {
+16535:       template<typename _Tp, typename _Up, typename
+16535:                = decltype(swap(std::declval<_Tp>(), std::declval<_Up>())),
+16535:                typename
+16535:                = decltype(swap(std::declval<_Up>(), std::declval<_Tp>()))>
+16535:         static true_type __test(int);
+16535: 
+16535:       template<typename, typename>
+16535:         static false_type __test(...);
+16535:     };
+16535: 
+16535:     struct __do_is_nothrow_swappable_with_impl
+16535:     {
+16535:       template<typename _Tp, typename _Up>
+16535:         static __bool_constant<
+16535:           noexcept(swap(std::declval<_Tp>(), std::declval<_Up>()))
+16535:           &&
+16535:           noexcept(swap(std::declval<_Up>(), std::declval<_Tp>()))
+16535:         > __test(int);
+16535: 
+16535:       template<typename, typename>
+16535:         static false_type __test(...);
+16535:     };
+16535: 
+16535:   }
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     struct __is_swappable_with_impl
+16535:     : public __swappable_with_details::__do_is_swappable_with_impl
+16535:     {
+16535:       typedef decltype(__test<_Tp, _Up>(0)) type;
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_swappable_with_impl<_Tp&, _Tp&>
+16535:     : public __swappable_details::__do_is_swappable_impl
+16535:     {
+16535:       typedef decltype(__test<_Tp&>(0)) type;
+16535:     };
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     struct __is_nothrow_swappable_with_impl
+16535:     : public __swappable_with_details::__do_is_nothrow_swappable_with_impl
+16535:     {
+16535:       typedef decltype(__test<_Tp, _Up>(0)) type;
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_nothrow_swappable_with_impl<_Tp&, _Tp&>
+16535:     : public __swappable_details::__do_is_nothrow_swappable_impl
+16535:     {
+16535:       typedef decltype(__test<_Tp&>(0)) type;
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     struct is_swappable_with
+16535:     : public __is_swappable_with_impl<_Tp, _Up>::type
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     struct is_nothrow_swappable_with
+16535:     : public __is_nothrow_swappable_with_impl<_Tp, _Up>::type
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     constexpr bool is_swappable_with_v =
+16535:       is_swappable_with<_Tp, _Up>::value;
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     constexpr bool is_nothrow_swappable_with_v =
+16535:       is_nothrow_swappable_with<_Tp, _Up>::value;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Result, typename _Ret, typename = void>
+16535:     struct __is_invocable_impl : false_type { };
+16535: 
+16535:   template<typename _Result, typename _Ret>
+16535:     struct __is_invocable_impl<_Result, _Ret, __void_t<typename _Result::type>>
+16535:     : __or_<is_void<_Ret>, is_convertible<typename _Result::type, _Ret>>::type
+16535:     { };
+16535: 
+16535:   template<typename _Fn, typename... _ArgTypes>
+16535:     struct __is_invocable
+16535:     : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>::type
+16535:     { };
+16535: 
+16535:   template<typename _Fn, typename _Tp, typename... _Args>
+16535:     constexpr bool __call_is_nt(__invoke_memfun_ref)
+16535:     {
+16535:       using _Up = typename __inv_unwrap<_Tp>::type;
+16535:       return noexcept((std::declval<_Up>().*std::declval<_Fn>())(
+16535:      std::declval<_Args>()...));
+16535:     }
+16535: 
+16535:   template<typename _Fn, typename _Tp, typename... _Args>
+16535:     constexpr bool __call_is_nt(__invoke_memfun_deref)
+16535:     {
+16535:       return noexcept(((*std::declval<_Tp>()).*std::declval<_Fn>())(
+16535:      std::declval<_Args>()...));
+16535:     }
+16535: 
+16535:   template<typename _Fn, typename _Tp>
+16535:     constexpr bool __call_is_nt(__invoke_memobj_ref)
+16535:     {
+16535:       using _Up = typename __inv_unwrap<_Tp>::type;
+16535:       return noexcept(std::declval<_Up>().*std::declval<_Fn>());
+16535:     }
+16535: 
+16535:   template<typename _Fn, typename _Tp>
+16535:     constexpr bool __call_is_nt(__invoke_memobj_deref)
+16535:     {
+16535:       return noexcept((*std::declval<_Tp>()).*std::declval<_Fn>());
+16535:     }
+16535: 
+16535:   template<typename _Fn, typename... _Args>
+16535:     constexpr bool __call_is_nt(__invoke_other)
+16535:     {
+16535:       return noexcept(std::declval<_Fn>()(std::declval<_Args>()...));
+16535:     }
+16535: 
+16535:   template<typename _Result, typename _Fn, typename... _Args>
+16535:     struct __call_is_nothrow
+16535:     : __bool_constant<
+16535:  std::__call_is_nt<_Fn, _Args...>(typename _Result::__invoke_type{})
+16535:       >
+16535:     { };
+16535: 
+16535:   template<typename _Fn, typename... _Args>
+16535:     using __call_is_nothrow_
+16535:       = __call_is_nothrow<__invoke_result<_Fn, _Args...>, _Fn, _Args...>;
+16535: 
+16535: 
+16535:   template<typename _Fn, typename... _Args>
+16535:     struct __is_nothrow_invocable
+16535:     : __and_<__is_invocable<_Fn, _Args...>,
+16535:              __call_is_nothrow_<_Fn, _Args...>>::type
+16535:     { };
+16535: 
+16535:   struct __nonesuch {
+16535:     __nonesuch() = delete;
+16535:     ~__nonesuch() = delete;
+16535:     __nonesuch(__nonesuch const&) = delete;
+16535:     void operator=(__nonesuch const&) = delete;
+16535:   };
+16535: # 2973 "/usr/include/c++/8/type_traits" 3
+16535: 
+16535: }
+16535: # 56 "/usr/include/c++/8/bits/move.h" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 72 "/usr/include/c++/8/bits/move.h" 3
+16535:   template<typename _Tp>
+16535:     constexpr _Tp&&
+16535:     forward(typename std::remove_reference<_Tp>::type& __t) noexcept
+16535:     { return static_cast<_Tp&&>(__t); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr _Tp&&
+16535:     forward(typename std::remove_reference<_Tp>::type&& __t) noexcept
+16535:     {
+16535:       static_assert(!std::is_lvalue_reference<_Tp>::value, "template argument"
+16535:       " substituting _Tp is an lvalue reference type");
+16535:       return static_cast<_Tp&&>(__t);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename std::remove_reference<_Tp>::type&&
+16535:     move(_Tp&& __t) noexcept
+16535:     { return static_cast<typename std::remove_reference<_Tp>::type&&>(__t); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __move_if_noexcept_cond
+16535:     : public __and_<__not_<is_nothrow_move_constructible<_Tp>>,
+16535:                     is_copy_constructible<_Tp>>::type { };
+16535: # 116 "/usr/include/c++/8/bits/move.h" 3
+16535:   template<typename _Tp>
+16535:     constexpr typename
+16535:     conditional<__move_if_noexcept_cond<_Tp>::value, const _Tp&, _Tp&&>::type
+16535:     move_if_noexcept(_Tp& __x) noexcept
+16535:     { return std::move(__x); }
+16535: # 136 "/usr/include/c++/8/bits/move.h" 3
+16535:   template<typename _Tp>
+16535:     inline _Tp*
+16535:     addressof(_Tp& __r) noexcept
+16535:     { return std::__addressof(__r); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     const _Tp* addressof(const _Tp&&) = delete;
+16535: 
+16535: 
+16535:   template <typename _Tp, typename _Up = _Tp>
+16535:     inline _Tp
+16535:     __exchange(_Tp& __obj, _Up&& __new_val)
+16535:     {
+16535:       _Tp __old_val = std::move(__obj);
+16535:       __obj = std::forward<_Up>(__new_val);
+16535:       return __old_val;
+16535:     }
+16535: # 176 "/usr/include/c++/8/bits/move.h" 3
+16535:   template<typename _Tp>
+16535:     inline
+16535: 
+16535:     typename enable_if<__and_<__not_<__is_tuple_like<_Tp>>,
+16535:          is_move_constructible<_Tp>,
+16535:          is_move_assignable<_Tp>>::value>::type
+16535:     swap(_Tp& __a, _Tp& __b)
+16535:     noexcept(__and_<is_nothrow_move_constructible<_Tp>,
+16535:              is_nothrow_move_assignable<_Tp>>::value)
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:       _Tp __tmp = std::move(__a);
+16535:       __a = std::move(__b);
+16535:       __b = std::move(__tmp);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, size_t _Nm>
+16535:     inline
+16535: 
+16535:     typename enable_if<__is_swappable<_Tp>::value>::type
+16535:     swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
+16535:     noexcept(__is_nothrow_swappable<_Tp>::value)
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     {
+16535:       for (size_t __n = 0; __n < _Nm; ++__n)
+16535:  swap(__a[__n], __b[__n]);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 60 "/usr/include/c++/8/bits/stl_pair.h" 2 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 76 "/usr/include/c++/8/bits/stl_pair.h" 3
+16535:   struct piecewise_construct_t { explicit piecewise_construct_t() = default; };
+16535: 
+16535: 
+16535:   constexpr piecewise_construct_t piecewise_construct =
+16535:     piecewise_construct_t();
+16535: 
+16535: 
+16535:   template<typename...>
+16535:     class tuple;
+16535: 
+16535:   template<std::size_t...>
+16535:     struct _Index_tuple;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <bool, typename _T1, typename _T2>
+16535:     struct _PCC
+16535:     {
+16535:       template <typename _U1, typename _U2>
+16535:       static constexpr bool _ConstructiblePair()
+16535:       {
+16535:  return __and_<is_constructible<_T1, const _U1&>,
+16535:         is_constructible<_T2, const _U2&>>::value;
+16535:       }
+16535: 
+16535:       template <typename _U1, typename _U2>
+16535:       static constexpr bool _ImplicitlyConvertiblePair()
+16535:       {
+16535:  return __and_<is_convertible<const _U1&, _T1>,
+16535:         is_convertible<const _U2&, _T2>>::value;
+16535:       }
+16535: 
+16535:       template <typename _U1, typename _U2>
+16535:       static constexpr bool _MoveConstructiblePair()
+16535:       {
+16535:  return __and_<is_constructible<_T1, _U1&&>,
+16535:         is_constructible<_T2, _U2&&>>::value;
+16535:       }
+16535: 
+16535:       template <typename _U1, typename _U2>
+16535:       static constexpr bool _ImplicitlyMoveConvertiblePair()
+16535:       {
+16535:  return __and_<is_convertible<_U1&&, _T1>,
+16535:         is_convertible<_U2&&, _T2>>::value;
+16535:       }
+16535: 
+16535:       template <bool __implicit, typename _U1, typename _U2>
+16535:       static constexpr bool _CopyMovePair()
+16535:       {
+16535:  using __do_converts = __and_<is_convertible<const _U1&, _T1>,
+16535:       is_convertible<_U2&&, _T2>>;
+16535:  using __converts = typename conditional<__implicit,
+16535:            __do_converts,
+16535:            __not_<__do_converts>>::type;
+16535:  return __and_<is_constructible<_T1, const _U1&>,
+16535:         is_constructible<_T2, _U2&&>,
+16535:         __converts
+16535:         >::value;
+16535:       }
+16535: 
+16535:       template <bool __implicit, typename _U1, typename _U2>
+16535:       static constexpr bool _MoveCopyPair()
+16535:       {
+16535:  using __do_converts = __and_<is_convertible<_U1&&, _T1>,
+16535:       is_convertible<const _U2&, _T2>>;
+16535:  using __converts = typename conditional<__implicit,
+16535:            __do_converts,
+16535:            __not_<__do_converts>>::type;
+16535:  return __and_<is_constructible<_T1, _U1&&>,
+16535:         is_constructible<_T2, const _U2&&>,
+16535:         __converts
+16535:         >::value;
+16535:       }
+16535:   };
+16535: 
+16535:   template <typename _T1, typename _T2>
+16535:     struct _PCC<false, _T1, _T2>
+16535:     {
+16535:       template <typename _U1, typename _U2>
+16535:       static constexpr bool _ConstructiblePair()
+16535:       {
+16535:  return false;
+16535:       }
+16535: 
+16535:       template <typename _U1, typename _U2>
+16535:       static constexpr bool _ImplicitlyConvertiblePair()
+16535:       {
+16535:  return false;
+16535:       }
+16535: 
+16535:       template <typename _U1, typename _U2>
+16535:       static constexpr bool _MoveConstructiblePair()
+16535:       {
+16535:  return false;
+16535:       }
+16535: 
+16535:       template <typename _U1, typename _U2>
+16535:       static constexpr bool _ImplicitlyMoveConvertiblePair()
+16535:       {
+16535:  return false;
+16535:       }
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   struct __nonesuch_no_braces : std::__nonesuch {
+16535:     explicit __nonesuch_no_braces(const __nonesuch&) = delete;
+16535:   };
+16535: 
+16535: 
+16535:   template<typename _U1, typename _U2> class __pair_base
+16535:   {
+16535: 
+16535:     template<typename _T1, typename _T2> friend struct pair;
+16535:     __pair_base() = default;
+16535:     ~__pair_base() = default;
+16535:     __pair_base(const __pair_base&) = default;
+16535:     __pair_base& operator=(const __pair_base&) = delete;
+16535: 
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _T1, typename _T2>
+16535:     struct pair
+16535:     : private __pair_base<_T1, _T2>
+16535:     {
+16535:       typedef _T1 first_type;
+16535:       typedef _T2 second_type;
+16535: 
+16535:       _T1 first;
+16535:       _T2 second;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       template <typename _U1 = _T1,
+16535:                 typename _U2 = _T2,
+16535:                 typename enable_if<__and_<
+16535:                                      __is_implicitly_default_constructible<_U1>,
+16535:                                      __is_implicitly_default_constructible<_U2>>
+16535:                                    ::value, bool>::type = true>
+16535: 
+16535:       constexpr pair()
+16535:       : first(), second() { }
+16535: 
+16535: 
+16535:       template <typename _U1 = _T1,
+16535:                 typename _U2 = _T2,
+16535:                 typename enable_if<__and_<
+16535:                        is_default_constructible<_U1>,
+16535:                        is_default_constructible<_U2>,
+16535:                        __not_<
+16535:                          __and_<__is_implicitly_default_constructible<_U1>,
+16535:                                 __is_implicitly_default_constructible<_U2>>>>
+16535:                                    ::value, bool>::type = false>
+16535:       explicit constexpr pair()
+16535:       : first(), second() { }
+16535: # 252 "/usr/include/c++/8/bits/stl_pair.h" 3
+16535:       using _PCCP = _PCC<true, _T1, _T2>;
+16535: 
+16535:       template<typename _U1 = _T1, typename _U2=_T2, typename
+16535:         enable_if<_PCCP::template
+16535:       _ConstructiblePair<_U1, _U2>()
+16535:                   && _PCCP::template
+16535:       _ImplicitlyConvertiblePair<_U1, _U2>(),
+16535:                          bool>::type=true>
+16535:       constexpr pair(const _T1& __a, const _T2& __b)
+16535:       : first(__a), second(__b) { }
+16535: 
+16535:        template<typename _U1 = _T1, typename _U2=_T2, typename
+16535:   enable_if<_PCCP::template
+16535:        _ConstructiblePair<_U1, _U2>()
+16535:                    && !_PCCP::template
+16535:        _ImplicitlyConvertiblePair<_U1, _U2>(),
+16535:                          bool>::type=false>
+16535:       explicit constexpr pair(const _T1& __a, const _T2& __b)
+16535:       : first(__a), second(__b) { }
+16535: # 280 "/usr/include/c++/8/bits/stl_pair.h" 3
+16535:       template <typename _U1, typename _U2>
+16535:         using _PCCFP = _PCC<!is_same<_T1, _U1>::value
+16535:        || !is_same<_T2, _U2>::value,
+16535:        _T1, _T2>;
+16535: 
+16535:       template<typename _U1, typename _U2, typename
+16535:         enable_if<_PCCFP<_U1, _U2>::template
+16535:       _ConstructiblePair<_U1, _U2>()
+16535:                   && _PCCFP<_U1, _U2>::template
+16535:       _ImplicitlyConvertiblePair<_U1, _U2>(),
+16535:      bool>::type=true>
+16535:         constexpr pair(const pair<_U1, _U2>& __p)
+16535:         : first(__p.first), second(__p.second) { }
+16535: 
+16535:       template<typename _U1, typename _U2, typename
+16535:         enable_if<_PCCFP<_U1, _U2>::template
+16535:       _ConstructiblePair<_U1, _U2>()
+16535:     && !_PCCFP<_U1, _U2>::template
+16535:       _ImplicitlyConvertiblePair<_U1, _U2>(),
+16535:                          bool>::type=false>
+16535:  explicit constexpr pair(const pair<_U1, _U2>& __p)
+16535:  : first(__p.first), second(__p.second) { }
+16535: 
+16535:       constexpr pair(const pair&) = default;
+16535:       constexpr pair(pair&&) = default;
+16535: 
+16535: 
+16535:       template<typename _U1, typename
+16535:         enable_if<_PCCP::template
+16535:       _MoveCopyPair<true, _U1, _T2>(),
+16535:                          bool>::type=true>
+16535:        constexpr pair(_U1&& __x, const _T2& __y)
+16535:        : first(std::forward<_U1>(__x)), second(__y) { }
+16535: 
+16535:       template<typename _U1, typename
+16535:         enable_if<_PCCP::template
+16535:       _MoveCopyPair<false, _U1, _T2>(),
+16535:                          bool>::type=false>
+16535:        explicit constexpr pair(_U1&& __x, const _T2& __y)
+16535:        : first(std::forward<_U1>(__x)), second(__y) { }
+16535: 
+16535:       template<typename _U2, typename
+16535:         enable_if<_PCCP::template
+16535:       _CopyMovePair<true, _T1, _U2>(),
+16535:                          bool>::type=true>
+16535:        constexpr pair(const _T1& __x, _U2&& __y)
+16535:        : first(__x), second(std::forward<_U2>(__y)) { }
+16535: 
+16535:       template<typename _U2, typename
+16535:         enable_if<_PCCP::template
+16535:       _CopyMovePair<false, _T1, _U2>(),
+16535:                          bool>::type=false>
+16535:        explicit pair(const _T1& __x, _U2&& __y)
+16535:        : first(__x), second(std::forward<_U2>(__y)) { }
+16535: 
+16535:       template<typename _U1, typename _U2, typename
+16535:         enable_if<_PCCP::template
+16535:       _MoveConstructiblePair<_U1, _U2>()
+16535:      && _PCCP::template
+16535:       _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
+16535:                          bool>::type=true>
+16535:  constexpr pair(_U1&& __x, _U2&& __y)
+16535:  : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) { }
+16535: 
+16535:       template<typename _U1, typename _U2, typename
+16535:         enable_if<_PCCP::template
+16535:       _MoveConstructiblePair<_U1, _U2>()
+16535:      && !_PCCP::template
+16535:       _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
+16535:                          bool>::type=false>
+16535:  explicit constexpr pair(_U1&& __x, _U2&& __y)
+16535:  : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) { }
+16535: 
+16535: 
+16535:       template<typename _U1, typename _U2, typename
+16535:         enable_if<_PCCFP<_U1, _U2>::template
+16535:       _MoveConstructiblePair<_U1, _U2>()
+16535:      && _PCCFP<_U1, _U2>::template
+16535:       _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
+16535:                          bool>::type=true>
+16535:  constexpr pair(pair<_U1, _U2>&& __p)
+16535:  : first(std::forward<_U1>(__p.first)),
+16535:    second(std::forward<_U2>(__p.second)) { }
+16535: 
+16535:       template<typename _U1, typename _U2, typename
+16535:         enable_if<_PCCFP<_U1, _U2>::template
+16535:       _MoveConstructiblePair<_U1, _U2>()
+16535:      && !_PCCFP<_U1, _U2>::template
+16535:       _ImplicitlyMoveConvertiblePair<_U1, _U2>(),
+16535:                          bool>::type=false>
+16535:  explicit constexpr pair(pair<_U1, _U2>&& __p)
+16535:  : first(std::forward<_U1>(__p.first)),
+16535:    second(std::forward<_U2>(__p.second)) { }
+16535: 
+16535:       template<typename... _Args1, typename... _Args2>
+16535:         pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>);
+16535: 
+16535:       pair&
+16535:       operator=(typename conditional<
+16535:   __and_<is_copy_assignable<_T1>,
+16535:          is_copy_assignable<_T2>>::value,
+16535:   const pair&, const __nonesuch_no_braces&>::type __p)
+16535:       {
+16535:  first = __p.first;
+16535:  second = __p.second;
+16535:  return *this;
+16535:       }
+16535: 
+16535:       pair&
+16535:       operator=(typename conditional<
+16535:   __and_<is_move_assignable<_T1>,
+16535:          is_move_assignable<_T2>>::value,
+16535:   pair&&, __nonesuch_no_braces&&>::type __p)
+16535:       noexcept(__and_<is_nothrow_move_assignable<_T1>,
+16535:         is_nothrow_move_assignable<_T2>>::value)
+16535:       {
+16535:  first = std::forward<first_type>(__p.first);
+16535:  second = std::forward<second_type>(__p.second);
+16535:  return *this;
+16535:       }
+16535: 
+16535:       template<typename _U1, typename _U2>
+16535:       typename enable_if<__and_<is_assignable<_T1&, const _U1&>,
+16535:     is_assignable<_T2&, const _U2&>>::value,
+16535:     pair&>::type
+16535:  operator=(const pair<_U1, _U2>& __p)
+16535:  {
+16535:    first = __p.first;
+16535:    second = __p.second;
+16535:    return *this;
+16535:  }
+16535: 
+16535:       template<typename _U1, typename _U2>
+16535:       typename enable_if<__and_<is_assignable<_T1&, _U1&&>,
+16535:     is_assignable<_T2&, _U2&&>>::value,
+16535:     pair&>::type
+16535:  operator=(pair<_U1, _U2>&& __p)
+16535:  {
+16535:    first = std::forward<_U1>(__p.first);
+16535:    second = std::forward<_U2>(__p.second);
+16535:    return *this;
+16535:  }
+16535: 
+16535:       void
+16535:       swap(pair& __p)
+16535:       noexcept(__and_<__is_nothrow_swappable<_T1>,
+16535:                       __is_nothrow_swappable<_T2>>::value)
+16535:       {
+16535:  using std::swap;
+16535:  swap(first, __p.first);
+16535:  swap(second, __p.second);
+16535:       }
+16535: 
+16535:     private:
+16535:       template<typename... _Args1, std::size_t... _Indexes1,
+16535:                typename... _Args2, std::size_t... _Indexes2>
+16535:         pair(tuple<_Args1...>&, tuple<_Args2...>&,
+16535:              _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>);
+16535: 
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _T1, typename _T2>
+16535:     inline constexpr bool
+16535:     operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
+16535:     { return __x.first == __y.first && __x.second == __y.second; }
+16535: 
+16535: 
+16535:   template<typename _T1, typename _T2>
+16535:     inline constexpr bool
+16535:     operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
+16535:     { return __x.first < __y.first
+16535:       || (!(__y.first < __x.first) && __x.second < __y.second); }
+16535: 
+16535: 
+16535:   template<typename _T1, typename _T2>
+16535:     inline constexpr bool
+16535:     operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
+16535:     { return !(__x == __y); }
+16535: 
+16535: 
+16535:   template<typename _T1, typename _T2>
+16535:     inline constexpr bool
+16535:     operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
+16535:     { return __y < __x; }
+16535: 
+16535: 
+16535:   template<typename _T1, typename _T2>
+16535:     inline constexpr bool
+16535:     operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
+16535:     { return !(__y < __x); }
+16535: 
+16535: 
+16535:   template<typename _T1, typename _T2>
+16535:     inline constexpr bool
+16535:     operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
+16535:     { return !(__x < __y); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _T1, typename _T2>
+16535:     inline
+16535: 
+16535: 
+16535:     typename enable_if<__and_<__is_swappable<_T1>,
+16535:                               __is_swappable<_T2>>::value>::type
+16535: 
+16535: 
+16535: 
+16535:     swap(pair<_T1, _T2>& __x, pair<_T1, _T2>& __y)
+16535:     noexcept(noexcept(__x.swap(__y)))
+16535:     { __x.swap(__y); }
+16535: 
+16535: 
+16535:   template<typename _T1, typename _T2>
+16535:     typename enable_if<!__and_<__is_swappable<_T1>,
+16535:           __is_swappable<_T2>>::value>::type
+16535:     swap(pair<_T1, _T2>&, pair<_T1, _T2>&) = delete;
+16535: # 521 "/usr/include/c++/8/bits/stl_pair.h" 3
+16535:   template<typename _T1, typename _T2>
+16535:     constexpr pair<typename __decay_and_strip<_T1>::__type,
+16535:                    typename __decay_and_strip<_T2>::__type>
+16535:     make_pair(_T1&& __x, _T2&& __y)
+16535:     {
+16535:       typedef typename __decay_and_strip<_T1>::__type __ds_type1;
+16535:       typedef typename __decay_and_strip<_T2>::__type __ds_type2;
+16535:       typedef pair<__ds_type1, __ds_type2> __pair_type;
+16535:       return __pair_type(std::forward<_T1>(__x), std::forward<_T2>(__y));
+16535:     }
+16535: # 540 "/usr/include/c++/8/bits/stl_pair.h" 3
+16535: 
+16535: }
+16535: # 71 "/usr/include/c++/8/utility" 2 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/initializer_list" 1 3
+16535: # 33 "/usr/include/c++/8/initializer_list" 3
+16535:        
+16535: # 34 "/usr/include/c++/8/initializer_list" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: #pragma GCC visibility push(default)
+16535: 
+16535: 
+16535: 
+16535: namespace std
+16535: {
+16535: 
+16535:   template<class _E>
+16535:     class initializer_list
+16535:     {
+16535:     public:
+16535:       typedef _E value_type;
+16535:       typedef const _E& reference;
+16535:       typedef const _E& const_reference;
+16535:       typedef size_t size_type;
+16535:       typedef const _E* iterator;
+16535:       typedef const _E* const_iterator;
+16535: 
+16535:     private:
+16535:       iterator _M_array;
+16535:       size_type _M_len;
+16535: 
+16535: 
+16535:       constexpr initializer_list(const_iterator __a, size_type __l)
+16535:       : _M_array(__a), _M_len(__l) { }
+16535: 
+16535:     public:
+16535:       constexpr initializer_list() noexcept
+16535:       : _M_array(0), _M_len(0) { }
+16535: 
+16535: 
+16535:       constexpr size_type
+16535:       size() const noexcept { return _M_len; }
+16535: 
+16535: 
+16535:       constexpr const_iterator
+16535:       begin() const noexcept { return _M_array; }
+16535: 
+16535: 
+16535:       constexpr const_iterator
+16535:       end() const noexcept { return begin() + size(); }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<class _Tp>
+16535:     constexpr const _Tp*
+16535:     begin(initializer_list<_Tp> __ils) noexcept
+16535:     { return __ils.begin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<class _Tp>
+16535:     constexpr const _Tp*
+16535:     end(initializer_list<_Tp> __ils) noexcept
+16535:     { return __ils.end(); }
+16535: }
+16535: 
+16535: #pragma GCC visibility pop
+16535: # 77 "/usr/include/c++/8/utility" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct tuple_size;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp,
+16535:     typename _Up = typename remove_cv<_Tp>::type,
+16535:     typename = typename enable_if<is_same<_Tp, _Up>::value>::type,
+16535:     size_t = tuple_size<_Tp>::value>
+16535:     using __enable_if_has_tuple_size = _Tp;
+16535: 
+16535:   template<typename _Tp>
+16535:     struct tuple_size<const __enable_if_has_tuple_size<_Tp>>
+16535:     : public tuple_size<_Tp> { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct tuple_size<volatile __enable_if_has_tuple_size<_Tp>>
+16535:     : public tuple_size<_Tp> { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct tuple_size<const volatile __enable_if_has_tuple_size<_Tp>>
+16535:     : public tuple_size<_Tp> { };
+16535: 
+16535: 
+16535:   template<std::size_t __i, typename _Tp>
+16535:     struct tuple_element;
+16535: 
+16535: 
+16535:   template<std::size_t __i, typename _Tp>
+16535:     using __tuple_element_t = typename tuple_element<__i, _Tp>::type;
+16535: 
+16535:   template<std::size_t __i, typename _Tp>
+16535:     struct tuple_element<__i, const _Tp>
+16535:     {
+16535:       typedef typename add_const<__tuple_element_t<__i, _Tp>>::type type;
+16535:     };
+16535: 
+16535:   template<std::size_t __i, typename _Tp>
+16535:     struct tuple_element<__i, volatile _Tp>
+16535:     {
+16535:       typedef typename add_volatile<__tuple_element_t<__i, _Tp>>::type type;
+16535:     };
+16535: 
+16535:   template<std::size_t __i, typename _Tp>
+16535:     struct tuple_element<__i, const volatile _Tp>
+16535:     {
+16535:       typedef typename add_cv<__tuple_element_t<__i, _Tp>>::type type;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<std::size_t __i, typename _Tp>
+16535:     using tuple_element_t = typename tuple_element<__i, _Tp>::type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _T1, typename _T2>
+16535:     struct __is_tuple_like_impl<std::pair<_T1, _T2>> : true_type
+16535:     { };
+16535: 
+16535: 
+16535:   template<class _Tp1, class _Tp2>
+16535:     struct tuple_size<std::pair<_Tp1, _Tp2>>
+16535:     : public integral_constant<std::size_t, 2> { };
+16535: 
+16535: 
+16535:   template<class _Tp1, class _Tp2>
+16535:     struct tuple_element<0, std::pair<_Tp1, _Tp2>>
+16535:     { typedef _Tp1 type; };
+16535: 
+16535: 
+16535:   template<class _Tp1, class _Tp2>
+16535:     struct tuple_element<1, std::pair<_Tp1, _Tp2>>
+16535:     { typedef _Tp2 type; };
+16535: 
+16535:   template<std::size_t _Int>
+16535:     struct __pair_get;
+16535: 
+16535:   template<>
+16535:     struct __pair_get<0>
+16535:     {
+16535:       template<typename _Tp1, typename _Tp2>
+16535:         static constexpr _Tp1&
+16535:         __get(std::pair<_Tp1, _Tp2>& __pair) noexcept
+16535:         { return __pair.first; }
+16535: 
+16535:       template<typename _Tp1, typename _Tp2>
+16535:         static constexpr _Tp1&&
+16535:         __move_get(std::pair<_Tp1, _Tp2>&& __pair) noexcept
+16535:         { return std::forward<_Tp1>(__pair.first); }
+16535: 
+16535:       template<typename _Tp1, typename _Tp2>
+16535:         static constexpr const _Tp1&
+16535:         __const_get(const std::pair<_Tp1, _Tp2>& __pair) noexcept
+16535:         { return __pair.first; }
+16535: 
+16535:       template<typename _Tp1, typename _Tp2>
+16535:         static constexpr const _Tp1&&
+16535:         __const_move_get(const std::pair<_Tp1, _Tp2>&& __pair) noexcept
+16535:         { return std::forward<const _Tp1>(__pair.first); }
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __pair_get<1>
+16535:     {
+16535:       template<typename _Tp1, typename _Tp2>
+16535:         static constexpr _Tp2&
+16535:         __get(std::pair<_Tp1, _Tp2>& __pair) noexcept
+16535:         { return __pair.second; }
+16535: 
+16535:       template<typename _Tp1, typename _Tp2>
+16535:         static constexpr _Tp2&&
+16535:         __move_get(std::pair<_Tp1, _Tp2>&& __pair) noexcept
+16535:         { return std::forward<_Tp2>(__pair.second); }
+16535: 
+16535:       template<typename _Tp1, typename _Tp2>
+16535:         static constexpr const _Tp2&
+16535:         __const_get(const std::pair<_Tp1, _Tp2>& __pair) noexcept
+16535:         { return __pair.second; }
+16535: 
+16535:       template<typename _Tp1, typename _Tp2>
+16535:         static constexpr const _Tp2&&
+16535:         __const_move_get(const std::pair<_Tp1, _Tp2>&& __pair) noexcept
+16535:         { return std::forward<const _Tp2>(__pair.second); }
+16535:     };
+16535: 
+16535:   template<std::size_t _Int, class _Tp1, class _Tp2>
+16535:     constexpr typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&
+16535:     get(std::pair<_Tp1, _Tp2>& __in) noexcept
+16535:     { return __pair_get<_Int>::__get(__in); }
+16535: 
+16535:   template<std::size_t _Int, class _Tp1, class _Tp2>
+16535:     constexpr typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&&
+16535:     get(std::pair<_Tp1, _Tp2>&& __in) noexcept
+16535:     { return __pair_get<_Int>::__move_get(std::move(__in)); }
+16535: 
+16535:   template<std::size_t _Int, class _Tp1, class _Tp2>
+16535:     constexpr const typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&
+16535:     get(const std::pair<_Tp1, _Tp2>& __in) noexcept
+16535:     { return __pair_get<_Int>::__const_get(__in); }
+16535: 
+16535:   template<std::size_t _Int, class _Tp1, class _Tp2>
+16535:     constexpr const typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&&
+16535:     get(const std::pair<_Tp1, _Tp2>&& __in) noexcept
+16535:     { return __pair_get<_Int>::__const_move_get(std::move(__in)); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename _Tp, typename _Up>
+16535:     constexpr _Tp&
+16535:     get(pair<_Tp, _Up>& __p) noexcept
+16535:     { return __p.first; }
+16535: 
+16535:   template <typename _Tp, typename _Up>
+16535:     constexpr const _Tp&
+16535:     get(const pair<_Tp, _Up>& __p) noexcept
+16535:     { return __p.first; }
+16535: 
+16535:   template <typename _Tp, typename _Up>
+16535:     constexpr _Tp&&
+16535:     get(pair<_Tp, _Up>&& __p) noexcept
+16535:     { return std::move(__p.first); }
+16535: 
+16535:   template <typename _Tp, typename _Up>
+16535:     constexpr const _Tp&&
+16535:     get(const pair<_Tp, _Up>&& __p) noexcept
+16535:     { return std::move(__p.first); }
+16535: 
+16535:   template <typename _Tp, typename _Up>
+16535:     constexpr _Tp&
+16535:     get(pair<_Up, _Tp>& __p) noexcept
+16535:     { return __p.second; }
+16535: 
+16535:   template <typename _Tp, typename _Up>
+16535:     constexpr const _Tp&
+16535:     get(const pair<_Up, _Tp>& __p) noexcept
+16535:     { return __p.second; }
+16535: 
+16535:   template <typename _Tp, typename _Up>
+16535:     constexpr _Tp&&
+16535:     get(pair<_Up, _Tp>&& __p) noexcept
+16535:     { return std::move(__p.second); }
+16535: 
+16535:   template <typename _Tp, typename _Up>
+16535:     constexpr const _Tp&&
+16535:     get(const pair<_Up, _Tp>&& __p) noexcept
+16535:     { return std::move(__p.second); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename _Tp, typename _Up = _Tp>
+16535:     inline _Tp
+16535:     exchange(_Tp& __obj, _Up&& __new_val)
+16535:     { return std::__exchange(__obj, std::forward<_Up>(__new_val)); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<size_t... _Indexes> struct _Index_tuple { };
+16535: # 298 "/usr/include/c++/8/utility" 3
+16535:   template<size_t _Num>
+16535:     struct _Build_index_tuple
+16535:     {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       using __type = _Index_tuple<__integer_pack(_Num)...>;
+16535: 
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, _Tp... _Idx>
+16535:     struct integer_sequence
+16535:     {
+16535:       typedef _Tp value_type;
+16535:       static constexpr size_t size() noexcept { return sizeof...(_Idx); }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp, _Tp _Num>
+16535:     using make_integer_sequence
+16535: 
+16535: 
+16535: 
+16535:       = integer_sequence<_Tp, __integer_pack(_Num)...>;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<size_t... _Idx>
+16535:     using index_sequence = integer_sequence<size_t, _Idx...>;
+16535: 
+16535: 
+16535:   template<size_t _Num>
+16535:     using make_index_sequence = make_integer_sequence<size_t, _Num>;
+16535: 
+16535: 
+16535:   template<typename... _Types>
+16535:     using index_sequence_for = make_index_sequence<sizeof...(_Types)>;
+16535: # 393 "/usr/include/c++/8/utility" 3
+16535: 
+16535: }
+16535: # 39 "/usr/include/gmpxx.h" 2 3 4
+16535: # 1 "/usr/include/c++/8/algorithm" 1 3 4
+16535: # 58 "/usr/include/c++/8/algorithm" 3 4
+16535:        
+16535: # 59 "/usr/include/c++/8/algorithm" 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/stl_algobase.h" 1 3
+16535: # 60 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535: # 1 "/usr/include/c++/8/bits/functexcept.h" 1 3
+16535: # 40 "/usr/include/c++/8/bits/functexcept.h" 3
+16535: # 1 "/usr/include/c++/8/bits/exception_defines.h" 1 3
+16535: # 41 "/usr/include/c++/8/bits/functexcept.h" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535:   void
+16535:   __throw_bad_exception(void) __attribute__((__noreturn__));
+16535: 
+16535: 
+16535:   void
+16535:   __throw_bad_alloc(void) __attribute__((__noreturn__));
+16535: 
+16535: 
+16535:   void
+16535:   __throw_bad_cast(void) __attribute__((__noreturn__));
+16535: 
+16535:   void
+16535:   __throw_bad_typeid(void) __attribute__((__noreturn__));
+16535: 
+16535: 
+16535:   void
+16535:   __throw_logic_error(const char*) __attribute__((__noreturn__));
+16535: 
+16535:   void
+16535:   __throw_domain_error(const char*) __attribute__((__noreturn__));
+16535: 
+16535:   void
+16535:   __throw_invalid_argument(const char*) __attribute__((__noreturn__));
+16535: 
+16535:   void
+16535:   __throw_length_error(const char*) __attribute__((__noreturn__));
+16535: 
+16535:   void
+16535:   __throw_out_of_range(const char*) __attribute__((__noreturn__));
+16535: 
+16535:   void
+16535:   __throw_out_of_range_fmt(const char*, ...) __attribute__((__noreturn__))
+16535:     __attribute__((__format__(__gnu_printf__, 1, 2)));
+16535: 
+16535:   void
+16535:   __throw_runtime_error(const char*) __attribute__((__noreturn__));
+16535: 
+16535:   void
+16535:   __throw_range_error(const char*) __attribute__((__noreturn__));
+16535: 
+16535:   void
+16535:   __throw_overflow_error(const char*) __attribute__((__noreturn__));
+16535: 
+16535:   void
+16535:   __throw_underflow_error(const char*) __attribute__((__noreturn__));
+16535: 
+16535: 
+16535:   void
+16535:   __throw_ios_failure(const char*) __attribute__((__noreturn__));
+16535: 
+16535:   void
+16535:   __throw_system_error(int) __attribute__((__noreturn__));
+16535: 
+16535:   void
+16535:   __throw_future_error(int) __attribute__((__noreturn__));
+16535: 
+16535: 
+16535:   void
+16535:   __throw_bad_function_call() __attribute__((__noreturn__));
+16535: 
+16535: 
+16535: }
+16535: # 61 "/usr/include/c++/8/bits/stl_algobase.h" 2 3
+16535: # 1 "/usr/include/c++/8/bits/cpp_type_traits.h" 1 3
+16535: # 35 "/usr/include/c++/8/bits/cpp_type_traits.h" 3
+16535:        
+16535: # 36 "/usr/include/c++/8/bits/cpp_type_traits.h" 3
+16535: # 67 "/usr/include/c++/8/bits/cpp_type_traits.h" 3
+16535: extern "C++" {
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   struct __true_type { };
+16535:   struct __false_type { };
+16535: 
+16535:   template<bool>
+16535:     struct __truth_type
+16535:     { typedef __false_type __type; };
+16535: 
+16535:   template<>
+16535:     struct __truth_type<true>
+16535:     { typedef __true_type __type; };
+16535: 
+16535: 
+16535: 
+16535:   template<class _Sp, class _Tp>
+16535:     struct __traitor
+16535:     {
+16535:       enum { __value = bool(_Sp::__value) || bool(_Tp::__value) };
+16535:       typedef typename __truth_type<__value>::__type __type;
+16535:     };
+16535: 
+16535: 
+16535:   template<typename, typename>
+16535:     struct __are_same
+16535:     {
+16535:       enum { __value = 0 };
+16535:       typedef __false_type __type;
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __are_same<_Tp, _Tp>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_void
+16535:     {
+16535:       enum { __value = 0 };
+16535:       typedef __false_type __type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __is_void<void>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_integer
+16535:     {
+16535:       enum { __value = 0 };
+16535:       typedef __false_type __type;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<>
+16535:     struct __is_integer<bool>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __is_integer<char>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __is_integer<signed char>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __is_integer<unsigned char>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct __is_integer<wchar_t>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<>
+16535:     struct __is_integer<char16_t>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __is_integer<char32_t>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct __is_integer<short>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __is_integer<unsigned short>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __is_integer<int>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __is_integer<unsigned int>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __is_integer<long>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __is_integer<unsigned long>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __is_integer<long long>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __is_integer<unsigned long long>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: # 261 "/usr/include/c++/8/bits/cpp_type_traits.h" 3
+16535: template<> struct __is_integer<__int128> { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_integer<unsigned __int128> { enum { __value = 1 }; typedef __true_type __type; };
+16535: # 278 "/usr/include/c++/8/bits/cpp_type_traits.h" 3
+16535:   template<typename _Tp>
+16535:     struct __is_floating
+16535:     {
+16535:       enum { __value = 0 };
+16535:       typedef __false_type __type;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct __is_floating<float>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __is_floating<double>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __is_floating<long double>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_pointer
+16535:     {
+16535:       enum { __value = 0 };
+16535:       typedef __false_type __type;
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_pointer<_Tp*>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_arithmetic
+16535:     : public __traitor<__is_integer<_Tp>, __is_floating<_Tp> >
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_scalar
+16535:     : public __traitor<__is_arithmetic<_Tp>, __is_pointer<_Tp> >
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_char
+16535:     {
+16535:       enum { __value = 0 };
+16535:       typedef __false_type __type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __is_char<char>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct __is_char<wchar_t>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_byte
+16535:     {
+16535:       enum { __value = 0 };
+16535:       typedef __false_type __type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __is_byte<char>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __is_byte<signed char>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __is_byte<unsigned char>
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: # 408 "/usr/include/c++/8/bits/cpp_type_traits.h" 3
+16535:   template<typename _Tp>
+16535:     struct __is_move_iterator
+16535:     {
+16535:       enum { __value = 0 };
+16535:       typedef __false_type __type;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Iterator>
+16535:     inline _Iterator
+16535:     __miter_base(_Iterator __it)
+16535:     { return __it; }
+16535: 
+16535: 
+16535: }
+16535: }
+16535: # 62 "/usr/include/c++/8/bits/stl_algobase.h" 2 3
+16535: # 1 "/usr/include/c++/8/ext/type_traits.h" 1 3
+16535: # 32 "/usr/include/c++/8/ext/type_traits.h" 3
+16535:        
+16535: # 33 "/usr/include/c++/8/ext/type_traits.h" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern "C++" {
+16535: 
+16535: namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535:   template<bool, typename>
+16535:     struct __enable_if
+16535:     { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __enable_if<true, _Tp>
+16535:     { typedef _Tp __type; };
+16535: 
+16535: 
+16535: 
+16535:   template<bool _Cond, typename _Iftrue, typename _Iffalse>
+16535:     struct __conditional_type
+16535:     { typedef _Iftrue __type; };
+16535: 
+16535:   template<typename _Iftrue, typename _Iffalse>
+16535:     struct __conditional_type<false, _Iftrue, _Iffalse>
+16535:     { typedef _Iffalse __type; };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __add_unsigned
+16535:     {
+16535:     private:
+16535:       typedef __enable_if<std::__is_integer<_Tp>::__value, _Tp> __if_type;
+16535: 
+16535:     public:
+16535:       typedef typename __if_type::__type __type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __add_unsigned<char>
+16535:     { typedef unsigned char __type; };
+16535: 
+16535:   template<>
+16535:     struct __add_unsigned<signed char>
+16535:     { typedef unsigned char __type; };
+16535: 
+16535:   template<>
+16535:     struct __add_unsigned<short>
+16535:     { typedef unsigned short __type; };
+16535: 
+16535:   template<>
+16535:     struct __add_unsigned<int>
+16535:     { typedef unsigned int __type; };
+16535: 
+16535:   template<>
+16535:     struct __add_unsigned<long>
+16535:     { typedef unsigned long __type; };
+16535: 
+16535:   template<>
+16535:     struct __add_unsigned<long long>
+16535:     { typedef unsigned long long __type; };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct __add_unsigned<bool>;
+16535: 
+16535:   template<>
+16535:     struct __add_unsigned<wchar_t>;
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __remove_unsigned
+16535:     {
+16535:     private:
+16535:       typedef __enable_if<std::__is_integer<_Tp>::__value, _Tp> __if_type;
+16535: 
+16535:     public:
+16535:       typedef typename __if_type::__type __type;
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __remove_unsigned<char>
+16535:     { typedef signed char __type; };
+16535: 
+16535:   template<>
+16535:     struct __remove_unsigned<unsigned char>
+16535:     { typedef signed char __type; };
+16535: 
+16535:   template<>
+16535:     struct __remove_unsigned<unsigned short>
+16535:     { typedef short __type; };
+16535: 
+16535:   template<>
+16535:     struct __remove_unsigned<unsigned int>
+16535:     { typedef int __type; };
+16535: 
+16535:   template<>
+16535:     struct __remove_unsigned<unsigned long>
+16535:     { typedef long __type; };
+16535: 
+16535:   template<>
+16535:     struct __remove_unsigned<unsigned long long>
+16535:     { typedef long long __type; };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct __remove_unsigned<bool>;
+16535: 
+16535:   template<>
+16535:     struct __remove_unsigned<wchar_t>;
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Type>
+16535:     inline bool
+16535:     __is_null_pointer(_Type* __ptr)
+16535:     { return __ptr == 0; }
+16535: 
+16535:   template<typename _Type>
+16535:     inline bool
+16535:     __is_null_pointer(_Type)
+16535:     { return false; }
+16535: 
+16535: 
+16535:   inline bool
+16535:   __is_null_pointer(std::nullptr_t)
+16535:   { return true; }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, bool = std::__is_integer<_Tp>::__value>
+16535:     struct __promote
+16535:     { typedef double __type; };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __promote<_Tp, false>
+16535:     { };
+16535: 
+16535:   template<>
+16535:     struct __promote<long double>
+16535:     { typedef long double __type; };
+16535: 
+16535:   template<>
+16535:     struct __promote<double>
+16535:     { typedef double __type; };
+16535: 
+16535:   template<>
+16535:     struct __promote<float>
+16535:     { typedef float __type; };
+16535: 
+16535:   template<typename _Tp, typename _Up,
+16535:            typename _Tp2 = typename __promote<_Tp>::__type,
+16535:            typename _Up2 = typename __promote<_Up>::__type>
+16535:     struct __promote_2
+16535:     {
+16535:       typedef __typeof__(_Tp2() + _Up2()) __type;
+16535:     };
+16535: 
+16535:   template<typename _Tp, typename _Up, typename _Vp,
+16535:            typename _Tp2 = typename __promote<_Tp>::__type,
+16535:            typename _Up2 = typename __promote<_Up>::__type,
+16535:            typename _Vp2 = typename __promote<_Vp>::__type>
+16535:     struct __promote_3
+16535:     {
+16535:       typedef __typeof__(_Tp2() + _Up2() + _Vp2()) __type;
+16535:     };
+16535: 
+16535:   template<typename _Tp, typename _Up, typename _Vp, typename _Wp,
+16535:            typename _Tp2 = typename __promote<_Tp>::__type,
+16535:            typename _Up2 = typename __promote<_Up>::__type,
+16535:            typename _Vp2 = typename __promote<_Vp>::__type,
+16535:            typename _Wp2 = typename __promote<_Wp>::__type>
+16535:     struct __promote_4
+16535:     {
+16535:       typedef __typeof__(_Tp2() + _Up2() + _Vp2() + _Wp2()) __type;
+16535:     };
+16535: 
+16535: 
+16535: }
+16535: }
+16535: # 63 "/usr/include/c++/8/bits/stl_algobase.h" 2 3
+16535: # 1 "/usr/include/c++/8/ext/numeric_traits.h" 1 3
+16535: # 32 "/usr/include/c++/8/ext/numeric_traits.h" 3
+16535:        
+16535: # 33 "/usr/include/c++/8/ext/numeric_traits.h" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 54 "/usr/include/c++/8/ext/numeric_traits.h" 3
+16535:   template<typename _Value>
+16535:     struct __numeric_traits_integer
+16535:     {
+16535: 
+16535:       static const _Value __min = (((_Value)(-1) < 0) ? (_Value)1 << (sizeof(_Value) * 8 - ((_Value)(-1) < 0)) : (_Value)0);
+16535:       static const _Value __max = (((_Value)(-1) < 0) ? (((((_Value)1 << ((sizeof(_Value) * 8 - ((_Value)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(_Value)0);
+16535: 
+16535: 
+16535: 
+16535:       static const bool __is_signed = ((_Value)(-1) < 0);
+16535:       static const int __digits = (sizeof(_Value) * 8 - ((_Value)(-1) < 0));
+16535:     };
+16535: 
+16535:   template<typename _Value>
+16535:     const _Value __numeric_traits_integer<_Value>::__min;
+16535: 
+16535:   template<typename _Value>
+16535:     const _Value __numeric_traits_integer<_Value>::__max;
+16535: 
+16535:   template<typename _Value>
+16535:     const bool __numeric_traits_integer<_Value>::__is_signed;
+16535: 
+16535:   template<typename _Value>
+16535:     const int __numeric_traits_integer<_Value>::__digits;
+16535: # 99 "/usr/include/c++/8/ext/numeric_traits.h" 3
+16535:   template<typename _Value>
+16535:     struct __numeric_traits_floating
+16535:     {
+16535: 
+16535:       static const int __max_digits10 = (2 + (std::__are_same<_Value, float>::__value ? 24 : std::__are_same<_Value, double>::__value ? 53 : 64) * 643L / 2136);
+16535: 
+16535: 
+16535:       static const bool __is_signed = true;
+16535:       static const int __digits10 = (std::__are_same<_Value, float>::__value ? 6 : std::__are_same<_Value, double>::__value ? 15 : 18);
+16535:       static const int __max_exponent10 = (std::__are_same<_Value, float>::__value ? 38 : std::__are_same<_Value, double>::__value ? 308 : 4932);
+16535:     };
+16535: 
+16535:   template<typename _Value>
+16535:     const int __numeric_traits_floating<_Value>::__max_digits10;
+16535: 
+16535:   template<typename _Value>
+16535:     const bool __numeric_traits_floating<_Value>::__is_signed;
+16535: 
+16535:   template<typename _Value>
+16535:     const int __numeric_traits_floating<_Value>::__digits10;
+16535: 
+16535:   template<typename _Value>
+16535:     const int __numeric_traits_floating<_Value>::__max_exponent10;
+16535: 
+16535:   template<typename _Value>
+16535:     struct __numeric_traits
+16535:     : public __conditional_type<std::__is_integer<_Value>::__value,
+16535:     __numeric_traits_integer<_Value>,
+16535:     __numeric_traits_floating<_Value> >::__type
+16535:     { };
+16535: 
+16535: 
+16535: }
+16535: # 64 "/usr/include/c++/8/bits/stl_algobase.h" 2 3
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 1 3
+16535: # 62 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 3
+16535:        
+16535: # 63 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 89 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 3
+16535:   struct input_iterator_tag { };
+16535: 
+16535: 
+16535:   struct output_iterator_tag { };
+16535: 
+16535: 
+16535:   struct forward_iterator_tag : public input_iterator_tag { };
+16535: 
+16535: 
+16535: 
+16535:   struct bidirectional_iterator_tag : public forward_iterator_tag { };
+16535: 
+16535: 
+16535: 
+16535:   struct random_access_iterator_tag : public bidirectional_iterator_tag { };
+16535: # 116 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 3
+16535:   template<typename _Category, typename _Tp, typename _Distance = ptrdiff_t,
+16535:            typename _Pointer = _Tp*, typename _Reference = _Tp&>
+16535:     struct iterator
+16535:     {
+16535: 
+16535:       typedef _Category iterator_category;
+16535: 
+16535:       typedef _Tp value_type;
+16535: 
+16535:       typedef _Distance difference_type;
+16535: 
+16535:       typedef _Pointer pointer;
+16535: 
+16535:       typedef _Reference reference;
+16535:     };
+16535: # 143 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 3
+16535:   template<typename _Iterator, typename = __void_t<>>
+16535:     struct __iterator_traits { };
+16535: 
+16535:   template<typename _Iterator>
+16535:     struct __iterator_traits<_Iterator,
+16535:         __void_t<typename _Iterator::iterator_category,
+16535:           typename _Iterator::value_type,
+16535:           typename _Iterator::difference_type,
+16535:           typename _Iterator::pointer,
+16535:           typename _Iterator::reference>>
+16535:     {
+16535:       typedef typename _Iterator::iterator_category iterator_category;
+16535:       typedef typename _Iterator::value_type value_type;
+16535:       typedef typename _Iterator::difference_type difference_type;
+16535:       typedef typename _Iterator::pointer pointer;
+16535:       typedef typename _Iterator::reference reference;
+16535:     };
+16535: 
+16535:   template<typename _Iterator>
+16535:     struct iterator_traits
+16535:     : public __iterator_traits<_Iterator> { };
+16535: # 177 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 3
+16535:   template<typename _Tp>
+16535:     struct iterator_traits<_Tp*>
+16535:     {
+16535:       typedef random_access_iterator_tag iterator_category;
+16535:       typedef _Tp value_type;
+16535:       typedef ptrdiff_t difference_type;
+16535:       typedef _Tp* pointer;
+16535:       typedef _Tp& reference;
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct iterator_traits<const _Tp*>
+16535:     {
+16535:       typedef random_access_iterator_tag iterator_category;
+16535:       typedef _Tp value_type;
+16535:       typedef ptrdiff_t difference_type;
+16535:       typedef const _Tp* pointer;
+16535:       typedef const _Tp& reference;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Iter>
+16535:     inline constexpr
+16535:     typename iterator_traits<_Iter>::iterator_category
+16535:     __iterator_category(const _Iter&)
+16535:     { return typename iterator_traits<_Iter>::iterator_category(); }
+16535: # 231 "/usr/include/c++/8/bits/stl_iterator_base_types.h" 3
+16535:   template<typename _InIter>
+16535:     using _RequireInputIter = typename
+16535:       enable_if<is_convertible<typename
+16535:   iterator_traits<_InIter>::iterator_category,
+16535:           input_iterator_tag>::value>::type;
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 66 "/usr/include/c++/8/bits/stl_algobase.h" 2 3
+16535: # 1 "/usr/include/c++/8/bits/stl_iterator_base_funcs.h" 1 3
+16535: # 62 "/usr/include/c++/8/bits/stl_iterator_base_funcs.h" 3
+16535:        
+16535: # 63 "/usr/include/c++/8/bits/stl_iterator_base_funcs.h" 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/debug/assertions.h" 1 3
+16535: # 66 "/usr/include/c++/8/bits/stl_iterator_base_funcs.h" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename> struct _List_iterator;
+16535:   template <typename> struct _List_const_iterator;
+16535: 
+16535: 
+16535:   template<typename _InputIterator>
+16535:     inline constexpr
+16535:     typename iterator_traits<_InputIterator>::difference_type
+16535:     __distance(_InputIterator __first, _InputIterator __last,
+16535:                input_iterator_tag)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:       typename iterator_traits<_InputIterator>::difference_type __n = 0;
+16535:       while (__first != __last)
+16535:  {
+16535:    ++__first;
+16535:    ++__n;
+16535:  }
+16535:       return __n;
+16535:     }
+16535: 
+16535:   template<typename _RandomAccessIterator>
+16535:     inline constexpr
+16535:     typename iterator_traits<_RandomAccessIterator>::difference_type
+16535:     __distance(_RandomAccessIterator __first, _RandomAccessIterator __last,
+16535:                random_access_iterator_tag)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:       return __last - __first;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     ptrdiff_t
+16535:     __distance(std::_List_iterator<_Tp>,
+16535:         std::_List_iterator<_Tp>,
+16535:         input_iterator_tag);
+16535: 
+16535:   template<typename _Tp>
+16535:     ptrdiff_t
+16535:     __distance(std::_List_const_iterator<_Tp>,
+16535:         std::_List_const_iterator<_Tp>,
+16535:         input_iterator_tag);
+16535: # 135 "/usr/include/c++/8/bits/stl_iterator_base_funcs.h" 3
+16535:   template<typename _InputIterator>
+16535:     inline
+16535:     typename iterator_traits<_InputIterator>::difference_type
+16535:     distance(_InputIterator __first, _InputIterator __last)
+16535:     {
+16535: 
+16535:       return std::__distance(__first, __last,
+16535:         std::__iterator_category(__first));
+16535:     }
+16535: 
+16535:   template<typename _InputIterator, typename _Distance>
+16535:     inline constexpr void
+16535:     __advance(_InputIterator& __i, _Distance __n, input_iterator_tag)
+16535:     {
+16535: 
+16535:      
+16535:       ;
+16535:       while (__n--)
+16535:  ++__i;
+16535:     }
+16535: 
+16535:   template<typename _BidirectionalIterator, typename _Distance>
+16535:     inline constexpr void
+16535:     __advance(_BidirectionalIterator& __i, _Distance __n,
+16535:        bidirectional_iterator_tag)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:       if (__n > 0)
+16535:         while (__n--)
+16535:    ++__i;
+16535:       else
+16535:         while (__n++)
+16535:    --__i;
+16535:     }
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Distance>
+16535:     inline constexpr void
+16535:     __advance(_RandomAccessIterator& __i, _Distance __n,
+16535:               random_access_iterator_tag)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:       if (__builtin_constant_p(__n) && __n == 1)
+16535:  ++__i;
+16535:       else if (__builtin_constant_p(__n) && __n == -1)
+16535:  --__i;
+16535:       else
+16535:  __i += __n;
+16535:     }
+16535: # 200 "/usr/include/c++/8/bits/stl_iterator_base_funcs.h" 3
+16535:   template<typename _InputIterator, typename _Distance>
+16535:     inline void
+16535:     advance(_InputIterator& __i, _Distance __n)
+16535:     {
+16535: 
+16535:       typename iterator_traits<_InputIterator>::difference_type __d = __n;
+16535:       std::__advance(__i, __d, std::__iterator_category(__i));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _InputIterator>
+16535:     inline _InputIterator
+16535:     next(_InputIterator __x, typename
+16535:   iterator_traits<_InputIterator>::difference_type __n = 1)
+16535:     {
+16535: 
+16535:      
+16535:       std::advance(__x, __n);
+16535:       return __x;
+16535:     }
+16535: 
+16535:   template<typename _BidirectionalIterator>
+16535:     inline _BidirectionalIterator
+16535:     prev(_BidirectionalIterator __x, typename
+16535:   iterator_traits<_BidirectionalIterator>::difference_type __n = 1)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:       std::advance(__x, -__n);
+16535:       return __x;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 67 "/usr/include/c++/8/bits/stl_algobase.h" 2 3
+16535: # 1 "/usr/include/c++/8/bits/stl_iterator.h" 1 3
+16535: # 66 "/usr/include/c++/8/bits/stl_iterator.h" 3
+16535: # 1 "/usr/include/c++/8/bits/ptr_traits.h" 1 3
+16535: # 37 "/usr/include/c++/8/bits/ptr_traits.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   class __undefined;
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __get_first_arg
+16535:     { using type = __undefined; };
+16535: 
+16535:   template<template<typename, typename...> class _Template, typename _Tp,
+16535:            typename... _Types>
+16535:     struct __get_first_arg<_Template<_Tp, _Types...>>
+16535:     { using type = _Tp; };
+16535: 
+16535:   template<typename _Tp>
+16535:     using __get_first_arg_t = typename __get_first_arg<_Tp>::type;
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     struct __replace_first_arg
+16535:     { };
+16535: 
+16535:   template<template<typename, typename...> class _Template, typename _Up,
+16535:            typename _Tp, typename... _Types>
+16535:     struct __replace_first_arg<_Template<_Tp, _Types...>, _Up>
+16535:     { using type = _Template<_Up, _Types...>; };
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     using __replace_first_arg_t = typename __replace_first_arg<_Tp, _Up>::type;
+16535: 
+16535:   template<typename _Tp>
+16535:     using __make_not_void
+16535:       = typename conditional<is_void<_Tp>::value, __undefined, _Tp>::type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Ptr>
+16535:     struct pointer_traits
+16535:     {
+16535:     private:
+16535:       template<typename _Tp>
+16535:  using __element_type = typename _Tp::element_type;
+16535: 
+16535:       template<typename _Tp>
+16535:  using __difference_type = typename _Tp::difference_type;
+16535: 
+16535:       template<typename _Tp, typename _Up, typename = void>
+16535:  struct __rebind : __replace_first_arg<_Tp, _Up> { };
+16535: 
+16535:       template<typename _Tp, typename _Up>
+16535:  struct __rebind<_Tp, _Up, __void_t<typename _Tp::template rebind<_Up>>>
+16535:  { using type = typename _Tp::template rebind<_Up>; };
+16535: 
+16535:     public:
+16535: 
+16535:       using pointer = _Ptr;
+16535: 
+16535: 
+16535:       using element_type
+16535:  = __detected_or_t<__get_first_arg_t<_Ptr>, __element_type, _Ptr>;
+16535: 
+16535: 
+16535:       using difference_type
+16535:  = __detected_or_t<ptrdiff_t, __difference_type, _Ptr>;
+16535: 
+16535: 
+16535:       template<typename _Up>
+16535:         using rebind = typename __rebind<_Ptr, _Up>::type;
+16535: 
+16535:       static _Ptr
+16535:       pointer_to(__make_not_void<element_type>& __e)
+16535:       { return _Ptr::pointer_to(__e); }
+16535: 
+16535:       static_assert(!is_same<element_type, __undefined>::value,
+16535:    "pointer type defines element_type or is like SomePointer<T, Args>");
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct pointer_traits<_Tp*>
+16535:     {
+16535: 
+16535:       typedef _Tp* pointer;
+16535: 
+16535:       typedef _Tp element_type;
+16535: 
+16535:       typedef ptrdiff_t difference_type;
+16535: 
+16535:       template<typename _Up>
+16535:         using rebind = _Up*;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       static pointer
+16535:       pointer_to(__make_not_void<element_type>& __r) noexcept
+16535:       { return std::addressof(__r); }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Ptr, typename _Tp>
+16535:     using __ptr_rebind = typename pointer_traits<_Ptr>::template rebind<_Tp>;
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr _Tp*
+16535:     __to_address(_Tp* __ptr) noexcept
+16535:     {
+16535:       static_assert(!std::is_function<_Tp>::value, "not a function pointer");
+16535:       return __ptr;
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _Ptr>
+16535:     constexpr typename std::pointer_traits<_Ptr>::element_type*
+16535:     __to_address(const _Ptr& __ptr)
+16535:     { return std::__to_address(__ptr.operator->()); }
+16535: # 198 "/usr/include/c++/8/bits/ptr_traits.h" 3
+16535: 
+16535: }
+16535: # 67 "/usr/include/c++/8/bits/stl_iterator.h" 2 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 100 "/usr/include/c++/8/bits/stl_iterator.h" 3
+16535:   template<typename _Iterator>
+16535:     class reverse_iterator
+16535:     : public iterator<typename iterator_traits<_Iterator>::iterator_category,
+16535:         typename iterator_traits<_Iterator>::value_type,
+16535:         typename iterator_traits<_Iterator>::difference_type,
+16535:         typename iterator_traits<_Iterator>::pointer,
+16535:                       typename iterator_traits<_Iterator>::reference>
+16535:     {
+16535:     protected:
+16535:       _Iterator current;
+16535: 
+16535:       typedef iterator_traits<_Iterator> __traits_type;
+16535: 
+16535:     public:
+16535:       typedef _Iterator iterator_type;
+16535:       typedef typename __traits_type::difference_type difference_type;
+16535:       typedef typename __traits_type::pointer pointer;
+16535:       typedef typename __traits_type::reference reference;
+16535: # 126 "/usr/include/c++/8/bits/stl_iterator.h" 3
+16535:      
+16535:       reverse_iterator() : current() { }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       explicit
+16535:       reverse_iterator(iterator_type __x) : current(__x) { }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:      
+16535:       reverse_iterator(const reverse_iterator& __x)
+16535:       : current(__x.current) { }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Iter>
+16535: 
+16535:         reverse_iterator(const reverse_iterator<_Iter>& __x)
+16535:  : current(__x.base()) { }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator_type
+16535:       base() const
+16535:       { return current; }
+16535: # 168 "/usr/include/c++/8/bits/stl_iterator.h" 3
+16535:       reference
+16535:       operator*() const
+16535:       {
+16535:  _Iterator __tmp = current;
+16535:  return *--__tmp;
+16535:       }
+16535: # 182 "/usr/include/c++/8/bits/stl_iterator.h" 3
+16535:       pointer
+16535:       operator->() const
+16535:       { return std::__addressof(operator*()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator&
+16535:       operator++()
+16535:       {
+16535:  --current;
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       operator++(int)
+16535:       {
+16535:  reverse_iterator __tmp = *this;
+16535:  --current;
+16535:  return __tmp;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator&
+16535:       operator--()
+16535:       {
+16535:  ++current;
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       operator--(int)
+16535:       {
+16535:  reverse_iterator __tmp = *this;
+16535:  ++current;
+16535:  return __tmp;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       operator+(difference_type __n) const
+16535:       { return reverse_iterator(current - __n); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator&
+16535:       operator+=(difference_type __n)
+16535:       {
+16535:  current -= __n;
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       operator-(difference_type __n) const
+16535:       { return reverse_iterator(current + __n); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator&
+16535:       operator-=(difference_type __n)
+16535:       {
+16535:  current += __n;
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reference
+16535:       operator[](difference_type __n) const
+16535:       { return *(*this + __n); }
+16535:     };
+16535: # 300 "/usr/include/c++/8/bits/stl_iterator.h" 3
+16535:   template<typename _Iterator>
+16535:     inline bool
+16535:     operator==(const reverse_iterator<_Iterator>& __x,
+16535:         const reverse_iterator<_Iterator>& __y)
+16535:     { return __x.base() == __y.base(); }
+16535: 
+16535:   template<typename _Iterator>
+16535:     inline bool
+16535:     operator<(const reverse_iterator<_Iterator>& __x,
+16535:        const reverse_iterator<_Iterator>& __y)
+16535:     { return __y.base() < __x.base(); }
+16535: 
+16535:   template<typename _Iterator>
+16535:     inline bool
+16535:     operator!=(const reverse_iterator<_Iterator>& __x,
+16535:         const reverse_iterator<_Iterator>& __y)
+16535:     { return !(__x == __y); }
+16535: 
+16535:   template<typename _Iterator>
+16535:     inline bool
+16535:     operator>(const reverse_iterator<_Iterator>& __x,
+16535:        const reverse_iterator<_Iterator>& __y)
+16535:     { return __y < __x; }
+16535: 
+16535:   template<typename _Iterator>
+16535:     inline bool
+16535:     operator<=(const reverse_iterator<_Iterator>& __x,
+16535:         const reverse_iterator<_Iterator>& __y)
+16535:     { return !(__y < __x); }
+16535: 
+16535:   template<typename _Iterator>
+16535:     inline bool
+16535:     operator>=(const reverse_iterator<_Iterator>& __x,
+16535:         const reverse_iterator<_Iterator>& __y)
+16535:     { return !(__x < __y); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _IteratorL, typename _IteratorR>
+16535:     inline bool
+16535:     operator==(const reverse_iterator<_IteratorL>& __x,
+16535:         const reverse_iterator<_IteratorR>& __y)
+16535:     { return __x.base() == __y.base(); }
+16535: 
+16535:   template<typename _IteratorL, typename _IteratorR>
+16535:     inline bool
+16535:     operator<(const reverse_iterator<_IteratorL>& __x,
+16535:        const reverse_iterator<_IteratorR>& __y)
+16535:     { return __y.base() < __x.base(); }
+16535: 
+16535:   template<typename _IteratorL, typename _IteratorR>
+16535:     inline bool
+16535:     operator!=(const reverse_iterator<_IteratorL>& __x,
+16535:         const reverse_iterator<_IteratorR>& __y)
+16535:     { return !(__x == __y); }
+16535: 
+16535:   template<typename _IteratorL, typename _IteratorR>
+16535:     inline bool
+16535:     operator>(const reverse_iterator<_IteratorL>& __x,
+16535:        const reverse_iterator<_IteratorR>& __y)
+16535:     { return __y < __x; }
+16535: 
+16535:   template<typename _IteratorL, typename _IteratorR>
+16535:     inline bool
+16535:     operator<=(const reverse_iterator<_IteratorL>& __x,
+16535:         const reverse_iterator<_IteratorR>& __y)
+16535:     { return !(__y < __x); }
+16535: 
+16535:   template<typename _IteratorL, typename _IteratorR>
+16535:     inline bool
+16535:     operator>=(const reverse_iterator<_IteratorL>& __x,
+16535:         const reverse_iterator<_IteratorR>& __y)
+16535:     { return !(__x < __y); }
+16535: # 390 "/usr/include/c++/8/bits/stl_iterator.h" 3
+16535:   template<typename _IteratorL, typename _IteratorR>
+16535:     inline auto
+16535:     operator-(const reverse_iterator<_IteratorL>& __x,
+16535:        const reverse_iterator<_IteratorR>& __y)
+16535:     -> decltype(__y.base() - __x.base())
+16535:     { return __y.base() - __x.base(); }
+16535: 
+16535: 
+16535:   template<typename _Iterator>
+16535:     inline reverse_iterator<_Iterator>
+16535:     operator+(typename reverse_iterator<_Iterator>::difference_type __n,
+16535:        const reverse_iterator<_Iterator>& __x)
+16535:     { return reverse_iterator<_Iterator>(__x.base() - __n); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Iterator>
+16535:     inline reverse_iterator<_Iterator>
+16535:     __make_reverse_iterator(_Iterator __i)
+16535:     { return reverse_iterator<_Iterator>(__i); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Iterator>
+16535:     inline reverse_iterator<_Iterator>
+16535:     make_reverse_iterator(_Iterator __i)
+16535:     { return reverse_iterator<_Iterator>(__i); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Iterator>
+16535:     auto
+16535:     __niter_base(reverse_iterator<_Iterator> __it)
+16535:     -> decltype(__make_reverse_iterator(__niter_base(__it.base())))
+16535:     { return __make_reverse_iterator(__niter_base(__it.base())); }
+16535: 
+16535:   template<typename _Iterator>
+16535:     struct __is_move_iterator<reverse_iterator<_Iterator> >
+16535:       : __is_move_iterator<_Iterator>
+16535:     { };
+16535: 
+16535:   template<typename _Iterator>
+16535:     auto
+16535:     __miter_base(reverse_iterator<_Iterator> __it)
+16535:     -> decltype(__make_reverse_iterator(__miter_base(__it.base())))
+16535:     { return __make_reverse_iterator(__miter_base(__it.base())); }
+16535: # 454 "/usr/include/c++/8/bits/stl_iterator.h" 3
+16535:   template<typename _Container>
+16535:     class back_insert_iterator
+16535:     : public iterator<output_iterator_tag, void, void, void, void>
+16535:     {
+16535:     protected:
+16535:       _Container* container;
+16535: 
+16535:     public:
+16535: 
+16535:       typedef _Container container_type;
+16535: 
+16535: 
+16535:       explicit
+16535:       back_insert_iterator(_Container& __x)
+16535:       : container(std::__addressof(__x)) { }
+16535: # 489 "/usr/include/c++/8/bits/stl_iterator.h" 3
+16535:       back_insert_iterator&
+16535:       operator=(const typename _Container::value_type& __value)
+16535:       {
+16535:  container->push_back(__value);
+16535:  return *this;
+16535:       }
+16535: 
+16535:       back_insert_iterator&
+16535:       operator=(typename _Container::value_type&& __value)
+16535:       {
+16535:  container->push_back(std::move(__value));
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       back_insert_iterator&
+16535:       operator*()
+16535:       { return *this; }
+16535: 
+16535: 
+16535:       back_insert_iterator&
+16535:       operator++()
+16535:       { return *this; }
+16535: 
+16535: 
+16535:       back_insert_iterator
+16535:       operator++(int)
+16535:       { return *this; }
+16535:     };
+16535: # 531 "/usr/include/c++/8/bits/stl_iterator.h" 3
+16535:   template<typename _Container>
+16535:     inline back_insert_iterator<_Container>
+16535:     back_inserter(_Container& __x)
+16535:     { return back_insert_iterator<_Container>(__x); }
+16535: # 546 "/usr/include/c++/8/bits/stl_iterator.h" 3
+16535:   template<typename _Container>
+16535:     class front_insert_iterator
+16535:     : public iterator<output_iterator_tag, void, void, void, void>
+16535:     {
+16535:     protected:
+16535:       _Container* container;
+16535: 
+16535:     public:
+16535: 
+16535:       typedef _Container container_type;
+16535: 
+16535: 
+16535:       explicit front_insert_iterator(_Container& __x)
+16535:       : container(std::__addressof(__x)) { }
+16535: # 580 "/usr/include/c++/8/bits/stl_iterator.h" 3
+16535:       front_insert_iterator&
+16535:       operator=(const typename _Container::value_type& __value)
+16535:       {
+16535:  container->push_front(__value);
+16535:  return *this;
+16535:       }
+16535: 
+16535:       front_insert_iterator&
+16535:       operator=(typename _Container::value_type&& __value)
+16535:       {
+16535:  container->push_front(std::move(__value));
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       front_insert_iterator&
+16535:       operator*()
+16535:       { return *this; }
+16535: 
+16535: 
+16535:       front_insert_iterator&
+16535:       operator++()
+16535:       { return *this; }
+16535: 
+16535: 
+16535:       front_insert_iterator
+16535:       operator++(int)
+16535:       { return *this; }
+16535:     };
+16535: # 622 "/usr/include/c++/8/bits/stl_iterator.h" 3
+16535:   template<typename _Container>
+16535:     inline front_insert_iterator<_Container>
+16535:     front_inserter(_Container& __x)
+16535:     { return front_insert_iterator<_Container>(__x); }
+16535: # 641 "/usr/include/c++/8/bits/stl_iterator.h" 3
+16535:   template<typename _Container>
+16535:     class insert_iterator
+16535:     : public iterator<output_iterator_tag, void, void, void, void>
+16535:     {
+16535:     protected:
+16535:       _Container* container;
+16535:       typename _Container::iterator iter;
+16535: 
+16535:     public:
+16535: 
+16535:       typedef _Container container_type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       insert_iterator(_Container& __x, typename _Container::iterator __i)
+16535:       : container(std::__addressof(__x)), iter(__i) {}
+16535: # 692 "/usr/include/c++/8/bits/stl_iterator.h" 3
+16535:       insert_iterator&
+16535:       operator=(const typename _Container::value_type& __value)
+16535:       {
+16535:  iter = container->insert(iter, __value);
+16535:  ++iter;
+16535:  return *this;
+16535:       }
+16535: 
+16535:       insert_iterator&
+16535:       operator=(typename _Container::value_type&& __value)
+16535:       {
+16535:  iter = container->insert(iter, std::move(__value));
+16535:  ++iter;
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       insert_iterator&
+16535:       operator*()
+16535:       { return *this; }
+16535: 
+16535: 
+16535:       insert_iterator&
+16535:       operator++()
+16535:       { return *this; }
+16535: 
+16535: 
+16535:       insert_iterator&
+16535:       operator++(int)
+16535:       { return *this; }
+16535:     };
+16535: # 737 "/usr/include/c++/8/bits/stl_iterator.h" 3
+16535:   template<typename _Container, typename _Iterator>
+16535:     inline insert_iterator<_Container>
+16535:     inserter(_Container& __x, _Iterator __i)
+16535:     {
+16535:       return insert_iterator<_Container>(__x,
+16535:       typename _Container::iterator(__i));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 761 "/usr/include/c++/8/bits/stl_iterator.h" 3
+16535:   using std::iterator_traits;
+16535:   using std::iterator;
+16535:   template<typename _Iterator, typename _Container>
+16535:     class __normal_iterator
+16535:     {
+16535:     protected:
+16535:       _Iterator _M_current;
+16535: 
+16535:       typedef iterator_traits<_Iterator> __traits_type;
+16535: 
+16535:     public:
+16535:       typedef _Iterator iterator_type;
+16535:       typedef typename __traits_type::iterator_category iterator_category;
+16535:       typedef typename __traits_type::value_type value_type;
+16535:       typedef typename __traits_type::difference_type difference_type;
+16535:       typedef typename __traits_type::reference reference;
+16535:       typedef typename __traits_type::pointer pointer;
+16535: 
+16535:       constexpr __normal_iterator() noexcept
+16535:       : _M_current(_Iterator()) { }
+16535: 
+16535:       explicit
+16535:       __normal_iterator(const _Iterator& __i) noexcept
+16535:       : _M_current(__i) { }
+16535: 
+16535: 
+16535:       template<typename _Iter>
+16535:         __normal_iterator(const __normal_iterator<_Iter,
+16535:      typename __enable_if<
+16535:               (std::__are_same<_Iter, typename _Container::pointer>::__value),
+16535:         _Container>::__type>& __i) noexcept
+16535:         : _M_current(__i.base()) { }
+16535: 
+16535: 
+16535:       reference
+16535:       operator*() const noexcept
+16535:       { return *_M_current; }
+16535: 
+16535:       pointer
+16535:       operator->() const noexcept
+16535:       { return _M_current; }
+16535: 
+16535:       __normal_iterator&
+16535:       operator++() noexcept
+16535:       {
+16535:  ++_M_current;
+16535:  return *this;
+16535:       }
+16535: 
+16535:       __normal_iterator
+16535:       operator++(int) noexcept
+16535:       { return __normal_iterator(_M_current++); }
+16535: 
+16535: 
+16535:       __normal_iterator&
+16535:       operator--() noexcept
+16535:       {
+16535:  --_M_current;
+16535:  return *this;
+16535:       }
+16535: 
+16535:       __normal_iterator
+16535:       operator--(int) noexcept
+16535:       { return __normal_iterator(_M_current--); }
+16535: 
+16535: 
+16535:       reference
+16535:       operator[](difference_type __n) const noexcept
+16535:       { return _M_current[__n]; }
+16535: 
+16535:       __normal_iterator&
+16535:       operator+=(difference_type __n) noexcept
+16535:       { _M_current += __n; return *this; }
+16535: 
+16535:       __normal_iterator
+16535:       operator+(difference_type __n) const noexcept
+16535:       { return __normal_iterator(_M_current + __n); }
+16535: 
+16535:       __normal_iterator&
+16535:       operator-=(difference_type __n) noexcept
+16535:       { _M_current -= __n; return *this; }
+16535: 
+16535:       __normal_iterator
+16535:       operator-(difference_type __n) const noexcept
+16535:       { return __normal_iterator(_M_current - __n); }
+16535: 
+16535:       const _Iterator&
+16535:       base() const noexcept
+16535:       { return _M_current; }
+16535:     };
+16535: # 861 "/usr/include/c++/8/bits/stl_iterator.h" 3
+16535:   template<typename _IteratorL, typename _IteratorR, typename _Container>
+16535:     inline bool
+16535:     operator==(const __normal_iterator<_IteratorL, _Container>& __lhs,
+16535:         const __normal_iterator<_IteratorR, _Container>& __rhs)
+16535:     noexcept
+16535:     { return __lhs.base() == __rhs.base(); }
+16535: 
+16535:   template<typename _Iterator, typename _Container>
+16535:     inline bool
+16535:     operator==(const __normal_iterator<_Iterator, _Container>& __lhs,
+16535:         const __normal_iterator<_Iterator, _Container>& __rhs)
+16535:     noexcept
+16535:     { return __lhs.base() == __rhs.base(); }
+16535: 
+16535:   template<typename _IteratorL, typename _IteratorR, typename _Container>
+16535:     inline bool
+16535:     operator!=(const __normal_iterator<_IteratorL, _Container>& __lhs,
+16535:         const __normal_iterator<_IteratorR, _Container>& __rhs)
+16535:     noexcept
+16535:     { return __lhs.base() != __rhs.base(); }
+16535: 
+16535:   template<typename _Iterator, typename _Container>
+16535:     inline bool
+16535:     operator!=(const __normal_iterator<_Iterator, _Container>& __lhs,
+16535:         const __normal_iterator<_Iterator, _Container>& __rhs)
+16535:     noexcept
+16535:     { return __lhs.base() != __rhs.base(); }
+16535: 
+16535: 
+16535:   template<typename _IteratorL, typename _IteratorR, typename _Container>
+16535:     inline bool
+16535:     operator<(const __normal_iterator<_IteratorL, _Container>& __lhs,
+16535:        const __normal_iterator<_IteratorR, _Container>& __rhs)
+16535:     noexcept
+16535:     { return __lhs.base() < __rhs.base(); }
+16535: 
+16535:   template<typename _Iterator, typename _Container>
+16535:     inline bool
+16535:     operator<(const __normal_iterator<_Iterator, _Container>& __lhs,
+16535:        const __normal_iterator<_Iterator, _Container>& __rhs)
+16535:     noexcept
+16535:     { return __lhs.base() < __rhs.base(); }
+16535: 
+16535:   template<typename _IteratorL, typename _IteratorR, typename _Container>
+16535:     inline bool
+16535:     operator>(const __normal_iterator<_IteratorL, _Container>& __lhs,
+16535:        const __normal_iterator<_IteratorR, _Container>& __rhs)
+16535:     noexcept
+16535:     { return __lhs.base() > __rhs.base(); }
+16535: 
+16535:   template<typename _Iterator, typename _Container>
+16535:     inline bool
+16535:     operator>(const __normal_iterator<_Iterator, _Container>& __lhs,
+16535:        const __normal_iterator<_Iterator, _Container>& __rhs)
+16535:     noexcept
+16535:     { return __lhs.base() > __rhs.base(); }
+16535: 
+16535:   template<typename _IteratorL, typename _IteratorR, typename _Container>
+16535:     inline bool
+16535:     operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs,
+16535:         const __normal_iterator<_IteratorR, _Container>& __rhs)
+16535:     noexcept
+16535:     { return __lhs.base() <= __rhs.base(); }
+16535: 
+16535:   template<typename _Iterator, typename _Container>
+16535:     inline bool
+16535:     operator<=(const __normal_iterator<_Iterator, _Container>& __lhs,
+16535:         const __normal_iterator<_Iterator, _Container>& __rhs)
+16535:     noexcept
+16535:     { return __lhs.base() <= __rhs.base(); }
+16535: 
+16535:   template<typename _IteratorL, typename _IteratorR, typename _Container>
+16535:     inline bool
+16535:     operator>=(const __normal_iterator<_IteratorL, _Container>& __lhs,
+16535:         const __normal_iterator<_IteratorR, _Container>& __rhs)
+16535:     noexcept
+16535:     { return __lhs.base() >= __rhs.base(); }
+16535: 
+16535:   template<typename _Iterator, typename _Container>
+16535:     inline bool
+16535:     operator>=(const __normal_iterator<_Iterator, _Container>& __lhs,
+16535:         const __normal_iterator<_Iterator, _Container>& __rhs)
+16535:     noexcept
+16535:     { return __lhs.base() >= __rhs.base(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _IteratorL, typename _IteratorR, typename _Container>
+16535: 
+16535: 
+16535:     inline auto
+16535:     operator-(const __normal_iterator<_IteratorL, _Container>& __lhs,
+16535:        const __normal_iterator<_IteratorR, _Container>& __rhs) noexcept
+16535:     -> decltype(__lhs.base() - __rhs.base())
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     { return __lhs.base() - __rhs.base(); }
+16535: 
+16535:   template<typename _Iterator, typename _Container>
+16535:     inline typename __normal_iterator<_Iterator, _Container>::difference_type
+16535:     operator-(const __normal_iterator<_Iterator, _Container>& __lhs,
+16535:        const __normal_iterator<_Iterator, _Container>& __rhs)
+16535:     noexcept
+16535:     { return __lhs.base() - __rhs.base(); }
+16535: 
+16535:   template<typename _Iterator, typename _Container>
+16535:     inline __normal_iterator<_Iterator, _Container>
+16535:     operator+(typename __normal_iterator<_Iterator, _Container>::difference_type
+16535:        __n, const __normal_iterator<_Iterator, _Container>& __i)
+16535:     noexcept
+16535:     { return __normal_iterator<_Iterator, _Container>(__i.base() + __n); }
+16535: 
+16535: 
+16535: }
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   template<typename _Iterator, typename _Container>
+16535:     _Iterator
+16535:     __niter_base(__gnu_cxx::__normal_iterator<_Iterator, _Container> __it)
+16535:     { return __it.base(); }
+16535: # 1006 "/usr/include/c++/8/bits/stl_iterator.h" 3
+16535:   template<typename _Iterator>
+16535:     class move_iterator
+16535:     {
+16535:     protected:
+16535:       _Iterator _M_current;
+16535: 
+16535:       typedef iterator_traits<_Iterator> __traits_type;
+16535:       typedef typename __traits_type::reference __base_ref;
+16535: 
+16535:     public:
+16535:       typedef _Iterator iterator_type;
+16535:       typedef typename __traits_type::iterator_category iterator_category;
+16535:       typedef typename __traits_type::value_type value_type;
+16535:       typedef typename __traits_type::difference_type difference_type;
+16535: 
+16535:       typedef _Iterator pointer;
+16535: 
+16535: 
+16535:       typedef typename conditional<is_reference<__base_ref>::value,
+16535:     typename remove_reference<__base_ref>::type&&,
+16535:     __base_ref>::type reference;
+16535: 
+16535:      
+16535:       move_iterator()
+16535:       : _M_current() { }
+16535: 
+16535:       explicit
+16535:       move_iterator(iterator_type __i)
+16535:       : _M_current(__i) { }
+16535: 
+16535:       template<typename _Iter>
+16535: 
+16535:  move_iterator(const move_iterator<_Iter>& __i)
+16535:  : _M_current(__i.base()) { }
+16535: 
+16535:       iterator_type
+16535:       base() const
+16535:       { return _M_current; }
+16535: 
+16535:       reference
+16535:       operator*() const
+16535:       { return static_cast<reference>(*_M_current); }
+16535: 
+16535:       pointer
+16535:       operator->() const
+16535:       { return _M_current; }
+16535: 
+16535:       move_iterator&
+16535:       operator++()
+16535:       {
+16535:  ++_M_current;
+16535:  return *this;
+16535:       }
+16535: 
+16535:       move_iterator
+16535:       operator++(int)
+16535:       {
+16535:  move_iterator __tmp = *this;
+16535:  ++_M_current;
+16535:  return __tmp;
+16535:       }
+16535: 
+16535:       move_iterator&
+16535:       operator--()
+16535:       {
+16535:  --_M_current;
+16535:  return *this;
+16535:       }
+16535: 
+16535:       move_iterator
+16535:       operator--(int)
+16535:       {
+16535:  move_iterator __tmp = *this;
+16535:  --_M_current;
+16535:  return __tmp;
+16535:       }
+16535: 
+16535:       move_iterator
+16535:       operator+(difference_type __n) const
+16535:       { return move_iterator(_M_current + __n); }
+16535: 
+16535:       move_iterator&
+16535:       operator+=(difference_type __n)
+16535:       {
+16535:  _M_current += __n;
+16535:  return *this;
+16535:       }
+16535: 
+16535:       move_iterator
+16535:       operator-(difference_type __n) const
+16535:       { return move_iterator(_M_current - __n); }
+16535: 
+16535:       move_iterator&
+16535:       operator-=(difference_type __n)
+16535:       {
+16535:  _M_current -= __n;
+16535:  return *this;
+16535:       }
+16535: 
+16535:       reference
+16535:       operator[](difference_type __n) const
+16535:       { return std::move(_M_current[__n]); }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _IteratorL, typename _IteratorR>
+16535:     inline bool
+16535:     operator==(const move_iterator<_IteratorL>& __x,
+16535:         const move_iterator<_IteratorR>& __y)
+16535:     { return __x.base() == __y.base(); }
+16535: 
+16535:   template<typename _Iterator>
+16535:     inline bool
+16535:     operator==(const move_iterator<_Iterator>& __x,
+16535:         const move_iterator<_Iterator>& __y)
+16535:     { return __x.base() == __y.base(); }
+16535: 
+16535:   template<typename _IteratorL, typename _IteratorR>
+16535:     inline bool
+16535:     operator!=(const move_iterator<_IteratorL>& __x,
+16535:         const move_iterator<_IteratorR>& __y)
+16535:     { return !(__x == __y); }
+16535: 
+16535:   template<typename _Iterator>
+16535:     inline bool
+16535:     operator!=(const move_iterator<_Iterator>& __x,
+16535:         const move_iterator<_Iterator>& __y)
+16535:     { return !(__x == __y); }
+16535: 
+16535:   template<typename _IteratorL, typename _IteratorR>
+16535:     inline bool
+16535:     operator<(const move_iterator<_IteratorL>& __x,
+16535:        const move_iterator<_IteratorR>& __y)
+16535:     { return __x.base() < __y.base(); }
+16535: 
+16535:   template<typename _Iterator>
+16535:     inline bool
+16535:     operator<(const move_iterator<_Iterator>& __x,
+16535:        const move_iterator<_Iterator>& __y)
+16535:     { return __x.base() < __y.base(); }
+16535: 
+16535:   template<typename _IteratorL, typename _IteratorR>
+16535:     inline bool
+16535:     operator<=(const move_iterator<_IteratorL>& __x,
+16535:         const move_iterator<_IteratorR>& __y)
+16535:     { return !(__y < __x); }
+16535: 
+16535:   template<typename _Iterator>
+16535:     inline bool
+16535:     operator<=(const move_iterator<_Iterator>& __x,
+16535:         const move_iterator<_Iterator>& __y)
+16535:     { return !(__y < __x); }
+16535: 
+16535:   template<typename _IteratorL, typename _IteratorR>
+16535:     inline bool
+16535:     operator>(const move_iterator<_IteratorL>& __x,
+16535:        const move_iterator<_IteratorR>& __y)
+16535:     { return __y < __x; }
+16535: 
+16535:   template<typename _Iterator>
+16535:     inline bool
+16535:     operator>(const move_iterator<_Iterator>& __x,
+16535:        const move_iterator<_Iterator>& __y)
+16535:     { return __y < __x; }
+16535: 
+16535:   template<typename _IteratorL, typename _IteratorR>
+16535:     inline bool
+16535:     operator>=(const move_iterator<_IteratorL>& __x,
+16535:         const move_iterator<_IteratorR>& __y)
+16535:     { return !(__x < __y); }
+16535: 
+16535:   template<typename _Iterator>
+16535:     inline bool
+16535:     operator>=(const move_iterator<_Iterator>& __x,
+16535:         const move_iterator<_Iterator>& __y)
+16535:     { return !(__x < __y); }
+16535: 
+16535: 
+16535:   template<typename _IteratorL, typename _IteratorR>
+16535:     inline auto
+16535:     operator-(const move_iterator<_IteratorL>& __x,
+16535:        const move_iterator<_IteratorR>& __y)
+16535:     -> decltype(__x.base() - __y.base())
+16535:     { return __x.base() - __y.base(); }
+16535: 
+16535:   template<typename _Iterator>
+16535:     inline move_iterator<_Iterator>
+16535:     operator+(typename move_iterator<_Iterator>::difference_type __n,
+16535:        const move_iterator<_Iterator>& __x)
+16535:     { return __x + __n; }
+16535: 
+16535:   template<typename _Iterator>
+16535:     inline move_iterator<_Iterator>
+16535:     make_move_iterator(_Iterator __i)
+16535:     { return move_iterator<_Iterator>(__i); }
+16535: 
+16535:   template<typename _Iterator, typename _ReturnType
+16535:     = typename conditional<__move_if_noexcept_cond
+16535:       <typename iterator_traits<_Iterator>::value_type>::value,
+16535:                 _Iterator, move_iterator<_Iterator>>::type>
+16535:     inline _ReturnType
+16535:     __make_move_if_noexcept_iterator(_Iterator __i)
+16535:     { return _ReturnType(__i); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _ReturnType
+16535:     = typename conditional<__move_if_noexcept_cond<_Tp>::value,
+16535:       const _Tp*, move_iterator<_Tp*>>::type>
+16535:     inline _ReturnType
+16535:     __make_move_if_noexcept_iterator(_Tp* __i)
+16535:     { return _ReturnType(__i); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Iterator>
+16535:     auto
+16535:     __niter_base(move_iterator<_Iterator> __it)
+16535:     -> decltype(make_move_iterator(__niter_base(__it.base())))
+16535:     { return make_move_iterator(__niter_base(__it.base())); }
+16535: 
+16535:   template<typename _Iterator>
+16535:     struct __is_move_iterator<move_iterator<_Iterator> >
+16535:     {
+16535:       enum { __value = 1 };
+16535:       typedef __true_type __type;
+16535:     };
+16535: 
+16535:   template<typename _Iterator>
+16535:     auto
+16535:     __miter_base(move_iterator<_Iterator> __it)
+16535:     -> decltype(__miter_base(__it.base()))
+16535:     { return __miter_base(__it.base()); }
+16535: # 1271 "/usr/include/c++/8/bits/stl_iterator.h" 3
+16535: 
+16535: }
+16535: # 68 "/usr/include/c++/8/bits/stl_algobase.h" 2 3
+16535: 
+16535: # 1 "/usr/include/c++/8/debug/debug.h" 1 3
+16535: # 48 "/usr/include/c++/8/debug/debug.h" 3
+16535: namespace std
+16535: {
+16535:   namespace __debug { }
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace __gnu_debug
+16535: {
+16535:   using namespace std::__debug;
+16535: }
+16535: # 70 "/usr/include/c++/8/bits/stl_algobase.h" 2 3
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/predefined_ops.h" 1 3
+16535: # 33 "/usr/include/c++/8/bits/predefined_ops.h" 3
+16535: namespace __gnu_cxx
+16535: {
+16535: namespace __ops
+16535: {
+16535:   struct _Iter_less_iter
+16535:   {
+16535:     template<typename _Iterator1, typename _Iterator2>
+16535:       constexpr
+16535:       bool
+16535:       operator()(_Iterator1 __it1, _Iterator2 __it2) const
+16535:       { return *__it1 < *__it2; }
+16535:   };
+16535: 
+16535:   constexpr
+16535:   inline _Iter_less_iter
+16535:   __iter_less_iter()
+16535:   { return _Iter_less_iter(); }
+16535: 
+16535:   struct _Iter_less_val
+16535:   {
+16535: 
+16535:     constexpr _Iter_less_val() = default;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     explicit
+16535:     _Iter_less_val(_Iter_less_iter) { }
+16535: 
+16535:     template<typename _Iterator, typename _Value>
+16535:       bool
+16535:       operator()(_Iterator __it, _Value& __val) const
+16535:       { return *__it < __val; }
+16535:   };
+16535: 
+16535:   inline _Iter_less_val
+16535:   __iter_less_val()
+16535:   { return _Iter_less_val(); }
+16535: 
+16535:   inline _Iter_less_val
+16535:   __iter_comp_val(_Iter_less_iter)
+16535:   { return _Iter_less_val(); }
+16535: 
+16535:   struct _Val_less_iter
+16535:   {
+16535: 
+16535:     constexpr _Val_less_iter() = default;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     explicit
+16535:     _Val_less_iter(_Iter_less_iter) { }
+16535: 
+16535:     template<typename _Value, typename _Iterator>
+16535:       bool
+16535:       operator()(_Value& __val, _Iterator __it) const
+16535:       { return __val < *__it; }
+16535:   };
+16535: 
+16535:   inline _Val_less_iter
+16535:   __val_less_iter()
+16535:   { return _Val_less_iter(); }
+16535: 
+16535:   inline _Val_less_iter
+16535:   __val_comp_iter(_Iter_less_iter)
+16535:   { return _Val_less_iter(); }
+16535: 
+16535:   struct _Iter_equal_to_iter
+16535:   {
+16535:     template<typename _Iterator1, typename _Iterator2>
+16535:       bool
+16535:       operator()(_Iterator1 __it1, _Iterator2 __it2) const
+16535:       { return *__it1 == *__it2; }
+16535:   };
+16535: 
+16535:   inline _Iter_equal_to_iter
+16535:   __iter_equal_to_iter()
+16535:   { return _Iter_equal_to_iter(); }
+16535: 
+16535:   struct _Iter_equal_to_val
+16535:   {
+16535:     template<typename _Iterator, typename _Value>
+16535:       bool
+16535:       operator()(_Iterator __it, _Value& __val) const
+16535:       { return *__it == __val; }
+16535:   };
+16535: 
+16535:   inline _Iter_equal_to_val
+16535:   __iter_equal_to_val()
+16535:   { return _Iter_equal_to_val(); }
+16535: 
+16535:   inline _Iter_equal_to_val
+16535:   __iter_comp_val(_Iter_equal_to_iter)
+16535:   { return _Iter_equal_to_val(); }
+16535: 
+16535:   template<typename _Compare>
+16535:     struct _Iter_comp_iter
+16535:     {
+16535:       _Compare _M_comp;
+16535: 
+16535:       explicit constexpr
+16535:       _Iter_comp_iter(_Compare __comp)
+16535:  : _M_comp(std::move(__comp))
+16535:       { }
+16535: 
+16535:       template<typename _Iterator1, typename _Iterator2>
+16535:         constexpr
+16535:         bool
+16535:         operator()(_Iterator1 __it1, _Iterator2 __it2)
+16535:         { return bool(_M_comp(*__it1, *__it2)); }
+16535:     };
+16535: 
+16535:   template<typename _Compare>
+16535:     constexpr
+16535:     inline _Iter_comp_iter<_Compare>
+16535:     __iter_comp_iter(_Compare __comp)
+16535:     { return _Iter_comp_iter<_Compare>(std::move(__comp)); }
+16535: 
+16535:   template<typename _Compare>
+16535:     struct _Iter_comp_val
+16535:     {
+16535:       _Compare _M_comp;
+16535: 
+16535:       explicit
+16535:       _Iter_comp_val(_Compare __comp)
+16535:  : _M_comp(std::move(__comp))
+16535:       { }
+16535: 
+16535:       explicit
+16535:       _Iter_comp_val(const _Iter_comp_iter<_Compare>& __comp)
+16535:  : _M_comp(__comp._M_comp)
+16535:       { }
+16535: 
+16535: 
+16535:       explicit
+16535:       _Iter_comp_val(_Iter_comp_iter<_Compare>&& __comp)
+16535:  : _M_comp(std::move(__comp._M_comp))
+16535:       { }
+16535: 
+16535: 
+16535:       template<typename _Iterator, typename _Value>
+16535:  bool
+16535:  operator()(_Iterator __it, _Value& __val)
+16535:  { return bool(_M_comp(*__it, __val)); }
+16535:     };
+16535: 
+16535:   template<typename _Compare>
+16535:    inline _Iter_comp_val<_Compare>
+16535:     __iter_comp_val(_Compare __comp)
+16535:     { return _Iter_comp_val<_Compare>(std::move(__comp)); }
+16535: 
+16535:   template<typename _Compare>
+16535:     inline _Iter_comp_val<_Compare>
+16535:     __iter_comp_val(_Iter_comp_iter<_Compare> __comp)
+16535:     { return _Iter_comp_val<_Compare>(std::move(__comp)); }
+16535: 
+16535:   template<typename _Compare>
+16535:     struct _Val_comp_iter
+16535:     {
+16535:       _Compare _M_comp;
+16535: 
+16535:       explicit
+16535:       _Val_comp_iter(_Compare __comp)
+16535:  : _M_comp(std::move(__comp))
+16535:       { }
+16535: 
+16535:       explicit
+16535:       _Val_comp_iter(const _Iter_comp_iter<_Compare>& __comp)
+16535:  : _M_comp(__comp._M_comp)
+16535:       { }
+16535: 
+16535: 
+16535:       explicit
+16535:       _Val_comp_iter(_Iter_comp_iter<_Compare>&& __comp)
+16535:  : _M_comp(std::move(__comp._M_comp))
+16535:       { }
+16535: 
+16535: 
+16535:       template<typename _Value, typename _Iterator>
+16535:  bool
+16535:  operator()(_Value& __val, _Iterator __it)
+16535:  { return bool(_M_comp(__val, *__it)); }
+16535:     };
+16535: 
+16535:   template<typename _Compare>
+16535:     inline _Val_comp_iter<_Compare>
+16535:     __val_comp_iter(_Compare __comp)
+16535:     { return _Val_comp_iter<_Compare>(std::move(__comp)); }
+16535: 
+16535:   template<typename _Compare>
+16535:     inline _Val_comp_iter<_Compare>
+16535:     __val_comp_iter(_Iter_comp_iter<_Compare> __comp)
+16535:     { return _Val_comp_iter<_Compare>(std::move(__comp)); }
+16535: 
+16535:   template<typename _Value>
+16535:     struct _Iter_equals_val
+16535:     {
+16535:       _Value& _M_value;
+16535: 
+16535:       explicit
+16535:       _Iter_equals_val(_Value& __value)
+16535:  : _M_value(__value)
+16535:       { }
+16535: 
+16535:       template<typename _Iterator>
+16535:  bool
+16535:  operator()(_Iterator __it)
+16535:  { return *__it == _M_value; }
+16535:     };
+16535: 
+16535:   template<typename _Value>
+16535:     inline _Iter_equals_val<_Value>
+16535:     __iter_equals_val(_Value& __val)
+16535:     { return _Iter_equals_val<_Value>(__val); }
+16535: 
+16535:   template<typename _Iterator1>
+16535:     struct _Iter_equals_iter
+16535:     {
+16535:       _Iterator1 _M_it1;
+16535: 
+16535:       explicit
+16535:       _Iter_equals_iter(_Iterator1 __it1)
+16535:  : _M_it1(__it1)
+16535:       { }
+16535: 
+16535:       template<typename _Iterator2>
+16535:  bool
+16535:  operator()(_Iterator2 __it2)
+16535:  { return *__it2 == *_M_it1; }
+16535:     };
+16535: 
+16535:   template<typename _Iterator>
+16535:     inline _Iter_equals_iter<_Iterator>
+16535:     __iter_comp_iter(_Iter_equal_to_iter, _Iterator __it)
+16535:     { return _Iter_equals_iter<_Iterator>(__it); }
+16535: 
+16535:   template<typename _Predicate>
+16535:     struct _Iter_pred
+16535:     {
+16535:       _Predicate _M_pred;
+16535: 
+16535:       explicit
+16535:       _Iter_pred(_Predicate __pred)
+16535:  : _M_pred(std::move(__pred))
+16535:       { }
+16535: 
+16535:       template<typename _Iterator>
+16535:  bool
+16535:  operator()(_Iterator __it)
+16535:  { return bool(_M_pred(*__it)); }
+16535:     };
+16535: 
+16535:   template<typename _Predicate>
+16535:     inline _Iter_pred<_Predicate>
+16535:     __pred_iter(_Predicate __pred)
+16535:     { return _Iter_pred<_Predicate>(std::move(__pred)); }
+16535: 
+16535:   template<typename _Compare, typename _Value>
+16535:     struct _Iter_comp_to_val
+16535:     {
+16535:       _Compare _M_comp;
+16535:       _Value& _M_value;
+16535: 
+16535:       _Iter_comp_to_val(_Compare __comp, _Value& __value)
+16535:  : _M_comp(std::move(__comp)), _M_value(__value)
+16535:       { }
+16535: 
+16535:       template<typename _Iterator>
+16535:  bool
+16535:  operator()(_Iterator __it)
+16535:  { return bool(_M_comp(*__it, _M_value)); }
+16535:     };
+16535: 
+16535:   template<typename _Compare, typename _Value>
+16535:     _Iter_comp_to_val<_Compare, _Value>
+16535:     __iter_comp_val(_Compare __comp, _Value &__val)
+16535:     {
+16535:       return _Iter_comp_to_val<_Compare, _Value>(std::move(__comp), __val);
+16535:     }
+16535: 
+16535:   template<typename _Compare, typename _Iterator1>
+16535:     struct _Iter_comp_to_iter
+16535:     {
+16535:       _Compare _M_comp;
+16535:       _Iterator1 _M_it1;
+16535: 
+16535:       _Iter_comp_to_iter(_Compare __comp, _Iterator1 __it1)
+16535:  : _M_comp(std::move(__comp)), _M_it1(__it1)
+16535:       { }
+16535: 
+16535:       template<typename _Iterator2>
+16535:  bool
+16535:  operator()(_Iterator2 __it2)
+16535:  { return bool(_M_comp(*__it2, *_M_it1)); }
+16535:     };
+16535: 
+16535:   template<typename _Compare, typename _Iterator>
+16535:     inline _Iter_comp_to_iter<_Compare, _Iterator>
+16535:     __iter_comp_iter(_Iter_comp_iter<_Compare> __comp, _Iterator __it)
+16535:     {
+16535:       return _Iter_comp_to_iter<_Compare, _Iterator>(
+16535:    std::move(__comp._M_comp), __it);
+16535:     }
+16535: 
+16535:   template<typename _Predicate>
+16535:     struct _Iter_negate
+16535:     {
+16535:       _Predicate _M_pred;
+16535: 
+16535:       explicit
+16535:       _Iter_negate(_Predicate __pred)
+16535:  : _M_pred(std::move(__pred))
+16535:       { }
+16535: 
+16535:       template<typename _Iterator>
+16535:  bool
+16535:  operator()(_Iterator __it)
+16535:  { return !bool(_M_pred(*__it)); }
+16535:     };
+16535: 
+16535:   template<typename _Predicate>
+16535:     inline _Iter_negate<_Predicate>
+16535:     __negate(_Iter_pred<_Predicate> __pred)
+16535:     { return _Iter_negate<_Predicate>(std::move(__pred._M_pred)); }
+16535: 
+16535: }
+16535: }
+16535: # 72 "/usr/include/c++/8/bits/stl_algobase.h" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 118 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:   template<typename _ForwardIterator1, typename _ForwardIterator2>
+16535:     inline void
+16535:     iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: # 148 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:       swap(*__a, *__b);
+16535: 
+16535:     }
+16535: # 164 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:   template<typename _ForwardIterator1, typename _ForwardIterator2>
+16535:     _ForwardIterator2
+16535:     swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+16535:   _ForwardIterator2 __first2)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       for (; __first1 != __last1; ++__first1, (void)++__first2)
+16535:  std::iter_swap(__first1, __first2);
+16535:       return __first2;
+16535:     }
+16535: # 192 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:   template<typename _Tp>
+16535:     constexpr
+16535:     inline const _Tp&
+16535:     min(const _Tp& __a, const _Tp& __b)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:       if (__b < __a)
+16535:  return __b;
+16535:       return __a;
+16535:     }
+16535: # 216 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:   template<typename _Tp>
+16535:     constexpr
+16535:     inline const _Tp&
+16535:     max(const _Tp& __a, const _Tp& __b)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:       if (__a < __b)
+16535:  return __b;
+16535:       return __a;
+16535:     }
+16535: # 240 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:   template<typename _Tp, typename _Compare>
+16535:     constexpr
+16535:     inline const _Tp&
+16535:     min(const _Tp& __a, const _Tp& __b, _Compare __comp)
+16535:     {
+16535: 
+16535:       if (__comp(__b, __a))
+16535:  return __b;
+16535:       return __a;
+16535:     }
+16535: # 262 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:   template<typename _Tp, typename _Compare>
+16535:     constexpr
+16535:     inline const _Tp&
+16535:     max(const _Tp& __a, const _Tp& __b, _Compare __comp)
+16535:     {
+16535: 
+16535:       if (__comp(__a, __b))
+16535:  return __b;
+16535:       return __a;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Iterator>
+16535:     inline _Iterator
+16535:     __niter_base(_Iterator __it)
+16535:     { return __it; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<bool, bool, typename>
+16535:     struct __copy_move
+16535:     {
+16535:       template<typename _II, typename _OI>
+16535:  static _OI
+16535:  __copy_m(_II __first, _II __last, _OI __result)
+16535:  {
+16535:    for (; __first != __last; ++__result, (void)++__first)
+16535:      *__result = *__first;
+16535:    return __result;
+16535:  }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Category>
+16535:     struct __copy_move<true, false, _Category>
+16535:     {
+16535:       template<typename _II, typename _OI>
+16535:  static _OI
+16535:  __copy_m(_II __first, _II __last, _OI __result)
+16535:  {
+16535:    for (; __first != __last; ++__result, (void)++__first)
+16535:      *__result = std::move(*__first);
+16535:    return __result;
+16535:  }
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct __copy_move<false, false, random_access_iterator_tag>
+16535:     {
+16535:       template<typename _II, typename _OI>
+16535:  static _OI
+16535:  __copy_m(_II __first, _II __last, _OI __result)
+16535:  {
+16535:    typedef typename iterator_traits<_II>::difference_type _Distance;
+16535:    for(_Distance __n = __last - __first; __n > 0; --__n)
+16535:      {
+16535:        *__result = *__first;
+16535:        ++__first;
+16535:        ++__result;
+16535:      }
+16535:    return __result;
+16535:  }
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct __copy_move<true, false, random_access_iterator_tag>
+16535:     {
+16535:       template<typename _II, typename _OI>
+16535:  static _OI
+16535:  __copy_m(_II __first, _II __last, _OI __result)
+16535:  {
+16535:    typedef typename iterator_traits<_II>::difference_type _Distance;
+16535:    for(_Distance __n = __last - __first; __n > 0; --__n)
+16535:      {
+16535:        *__result = std::move(*__first);
+16535:        ++__first;
+16535:        ++__result;
+16535:      }
+16535:    return __result;
+16535:  }
+16535:     };
+16535: 
+16535: 
+16535:   template<bool _IsMove>
+16535:     struct __copy_move<_IsMove, true, random_access_iterator_tag>
+16535:     {
+16535:       template<typename _Tp>
+16535:  static _Tp*
+16535:  __copy_m(const _Tp* __first, const _Tp* __last, _Tp* __result)
+16535:  {
+16535: 
+16535:    using __assignable = conditional<_IsMove,
+16535:         is_move_assignable<_Tp>,
+16535:         is_copy_assignable<_Tp>>;
+16535: 
+16535:    static_assert( __assignable::type::value, "type is not assignable" );
+16535: 
+16535:    const ptrdiff_t _Num = __last - __first;
+16535:    if (_Num)
+16535:      __builtin_memmove(__result, __first, sizeof(_Tp) * _Num);
+16535:    return __result + _Num;
+16535:  }
+16535:     };
+16535: 
+16535:   template<bool _IsMove, typename _II, typename _OI>
+16535:     inline _OI
+16535:     __copy_move_a(_II __first, _II __last, _OI __result)
+16535:     {
+16535:       typedef typename iterator_traits<_II>::value_type _ValueTypeI;
+16535:       typedef typename iterator_traits<_OI>::value_type _ValueTypeO;
+16535:       typedef typename iterator_traits<_II>::iterator_category _Category;
+16535:       const bool __simple = (__is_trivial(_ValueTypeI)
+16535:         && __is_pointer<_II>::__value
+16535:         && __is_pointer<_OI>::__value
+16535:         && __are_same<_ValueTypeI, _ValueTypeO>::__value);
+16535: 
+16535:       return std::__copy_move<_IsMove, __simple,
+16535:          _Category>::__copy_m(__first, __last, __result);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     struct char_traits;
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     class istreambuf_iterator;
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     class ostreambuf_iterator;
+16535: 
+16535:   template<bool _IsMove, typename _CharT>
+16535:     typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
+16535:       ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type
+16535:     __copy_move_a2(_CharT*, _CharT*,
+16535:      ostreambuf_iterator<_CharT, char_traits<_CharT> >);
+16535: 
+16535:   template<bool _IsMove, typename _CharT>
+16535:     typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
+16535:       ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type
+16535:     __copy_move_a2(const _CharT*, const _CharT*,
+16535:      ostreambuf_iterator<_CharT, char_traits<_CharT> >);
+16535: 
+16535:   template<bool _IsMove, typename _CharT>
+16535:     typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
+16535:         _CharT*>::__type
+16535:     __copy_move_a2(istreambuf_iterator<_CharT, char_traits<_CharT> >,
+16535:      istreambuf_iterator<_CharT, char_traits<_CharT> >, _CharT*);
+16535: 
+16535:   template<bool _IsMove, typename _II, typename _OI>
+16535:     inline _OI
+16535:     __copy_move_a2(_II __first, _II __last, _OI __result)
+16535:     {
+16535:       return _OI(std::__copy_move_a<_IsMove>(std::__niter_base(__first),
+16535:           std::__niter_base(__last),
+16535:           std::__niter_base(__result)));
+16535:     }
+16535: # 444 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:   template<typename _II, typename _OI>
+16535:     inline _OI
+16535:     copy(_II __first, _II __last, _OI __result)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       return (std::__copy_move_a2<__is_move_iterator<_II>::__value>
+16535:        (std::__miter_base(__first), std::__miter_base(__last),
+16535:         __result));
+16535:     }
+16535: # 477 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:   template<typename _II, typename _OI>
+16535:     inline _OI
+16535:     move(_II __first, _II __last, _OI __result)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__copy_move_a2<true>(std::__miter_base(__first),
+16535:            std::__miter_base(__last), __result);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<bool, bool, typename>
+16535:     struct __copy_move_backward
+16535:     {
+16535:       template<typename _BI1, typename _BI2>
+16535:  static _BI2
+16535:  __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result)
+16535:  {
+16535:    while (__first != __last)
+16535:      *--__result = *--__last;
+16535:    return __result;
+16535:  }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Category>
+16535:     struct __copy_move_backward<true, false, _Category>
+16535:     {
+16535:       template<typename _BI1, typename _BI2>
+16535:  static _BI2
+16535:  __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result)
+16535:  {
+16535:    while (__first != __last)
+16535:      *--__result = std::move(*--__last);
+16535:    return __result;
+16535:  }
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct __copy_move_backward<false, false, random_access_iterator_tag>
+16535:     {
+16535:       template<typename _BI1, typename _BI2>
+16535:  static _BI2
+16535:  __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result)
+16535:  {
+16535:    typename iterator_traits<_BI1>::difference_type __n;
+16535:    for (__n = __last - __first; __n > 0; --__n)
+16535:      *--__result = *--__last;
+16535:    return __result;
+16535:  }
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct __copy_move_backward<true, false, random_access_iterator_tag>
+16535:     {
+16535:       template<typename _BI1, typename _BI2>
+16535:  static _BI2
+16535:  __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result)
+16535:  {
+16535:    typename iterator_traits<_BI1>::difference_type __n;
+16535:    for (__n = __last - __first; __n > 0; --__n)
+16535:      *--__result = std::move(*--__last);
+16535:    return __result;
+16535:  }
+16535:     };
+16535: 
+16535: 
+16535:   template<bool _IsMove>
+16535:     struct __copy_move_backward<_IsMove, true, random_access_iterator_tag>
+16535:     {
+16535:       template<typename _Tp>
+16535:  static _Tp*
+16535:  __copy_move_b(const _Tp* __first, const _Tp* __last, _Tp* __result)
+16535:  {
+16535: 
+16535:    using __assignable = conditional<_IsMove,
+16535:         is_move_assignable<_Tp>,
+16535:         is_copy_assignable<_Tp>>;
+16535: 
+16535:    static_assert( __assignable::type::value, "type is not assignable" );
+16535: 
+16535:    const ptrdiff_t _Num = __last - __first;
+16535:    if (_Num)
+16535:      __builtin_memmove(__result - _Num, __first, sizeof(_Tp) * _Num);
+16535:    return __result - _Num;
+16535:  }
+16535:     };
+16535: 
+16535:   template<bool _IsMove, typename _BI1, typename _BI2>
+16535:     inline _BI2
+16535:     __copy_move_backward_a(_BI1 __first, _BI1 __last, _BI2 __result)
+16535:     {
+16535:       typedef typename iterator_traits<_BI1>::value_type _ValueType1;
+16535:       typedef typename iterator_traits<_BI2>::value_type _ValueType2;
+16535:       typedef typename iterator_traits<_BI1>::iterator_category _Category;
+16535:       const bool __simple = (__is_trivial(_ValueType1)
+16535:         && __is_pointer<_BI1>::__value
+16535:         && __is_pointer<_BI2>::__value
+16535:         && __are_same<_ValueType1, _ValueType2>::__value);
+16535: 
+16535:       return std::__copy_move_backward<_IsMove, __simple,
+16535:            _Category>::__copy_move_b(__first,
+16535:          __last,
+16535:          __result);
+16535:     }
+16535: 
+16535:   template<bool _IsMove, typename _BI1, typename _BI2>
+16535:     inline _BI2
+16535:     __copy_move_backward_a2(_BI1 __first, _BI1 __last, _BI2 __result)
+16535:     {
+16535:       return _BI2(std::__copy_move_backward_a<_IsMove>
+16535:     (std::__niter_base(__first), std::__niter_base(__last),
+16535:      std::__niter_base(__result)));
+16535:     }
+16535: # 620 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:   template<typename _BI1, typename _BI2>
+16535:     inline _BI2
+16535:     copy_backward(_BI1 __first, _BI1 __last, _BI2 __result)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535: 
+16535:       return (std::__copy_move_backward_a2<__is_move_iterator<_BI1>::__value>
+16535:        (std::__miter_base(__first), std::__miter_base(__last),
+16535:         __result));
+16535:     }
+16535: # 656 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:   template<typename _BI1, typename _BI2>
+16535:     inline _BI2
+16535:     move_backward(_BI1 __first, _BI1 __last, _BI2 __result)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__copy_move_backward_a2<true>(std::__miter_base(__first),
+16535:       std::__miter_base(__last),
+16535:       __result);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _ForwardIterator, typename _Tp>
+16535:     inline typename
+16535:     __gnu_cxx::__enable_if<!__is_scalar<_Tp>::__value, void>::__type
+16535:     __fill_a(_ForwardIterator __first, _ForwardIterator __last,
+16535:        const _Tp& __value)
+16535:     {
+16535:       for (; __first != __last; ++__first)
+16535:  *__first = __value;
+16535:     }
+16535: 
+16535:   template<typename _ForwardIterator, typename _Tp>
+16535:     inline typename
+16535:     __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, void>::__type
+16535:     __fill_a(_ForwardIterator __first, _ForwardIterator __last,
+16535:       const _Tp& __value)
+16535:     {
+16535:       const _Tp __tmp = __value;
+16535:       for (; __first != __last; ++__first)
+16535:  *__first = __tmp;
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline typename
+16535:     __gnu_cxx::__enable_if<__is_byte<_Tp>::__value, void>::__type
+16535:     __fill_a(_Tp* __first, _Tp* __last, const _Tp& __c)
+16535:     {
+16535:       const _Tp __tmp = __c;
+16535:       if (const size_t __len = __last - __first)
+16535:  __builtin_memset(__first, static_cast<unsigned char>(__tmp), __len);
+16535:     }
+16535: # 722 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:   template<typename _ForwardIterator, typename _Tp>
+16535:     inline void
+16535:     fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       std::__fill_a(std::__niter_base(__first), std::__niter_base(__last),
+16535:       __value);
+16535:     }
+16535: 
+16535:   template<typename _OutputIterator, typename _Size, typename _Tp>
+16535:     inline typename
+16535:     __gnu_cxx::__enable_if<!__is_scalar<_Tp>::__value, _OutputIterator>::__type
+16535:     __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value)
+16535:     {
+16535:       for (__decltype(__n + 0) __niter = __n;
+16535:     __niter > 0; --__niter, (void) ++__first)
+16535:  *__first = __value;
+16535:       return __first;
+16535:     }
+16535: 
+16535:   template<typename _OutputIterator, typename _Size, typename _Tp>
+16535:     inline typename
+16535:     __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, _OutputIterator>::__type
+16535:     __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value)
+16535:     {
+16535:       const _Tp __tmp = __value;
+16535:       for (__decltype(__n + 0) __niter = __n;
+16535:     __niter > 0; --__niter, (void) ++__first)
+16535:  *__first = __tmp;
+16535:       return __first;
+16535:     }
+16535: 
+16535:   template<typename _Size, typename _Tp>
+16535:     inline typename
+16535:     __gnu_cxx::__enable_if<__is_byte<_Tp>::__value, _Tp*>::__type
+16535:     __fill_n_a(_Tp* __first, _Size __n, const _Tp& __c)
+16535:     {
+16535:       std::__fill_a(__first, __first + __n, __c);
+16535:       return __first + __n;
+16535:     }
+16535: # 782 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:   template<typename _OI, typename _Size, typename _Tp>
+16535:     inline _OI
+16535:     fill_n(_OI __first, _Size __n, const _Tp& __value)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:       return _OI(std::__fill_n_a(std::__niter_base(__first), __n, __value));
+16535:     }
+16535: 
+16535:   template<bool _BoolType>
+16535:     struct __equal
+16535:     {
+16535:       template<typename _II1, typename _II2>
+16535:  static bool
+16535:  equal(_II1 __first1, _II1 __last1, _II2 __first2)
+16535:  {
+16535:    for (; __first1 != __last1; ++__first1, (void) ++__first2)
+16535:      if (!(*__first1 == *__first2))
+16535:        return false;
+16535:    return true;
+16535:  }
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __equal<true>
+16535:     {
+16535:       template<typename _Tp>
+16535:  static bool
+16535:  equal(const _Tp* __first1, const _Tp* __last1, const _Tp* __first2)
+16535:  {
+16535:    if (const size_t __len = (__last1 - __first1))
+16535:      return !__builtin_memcmp(__first1, __first2, sizeof(_Tp) * __len);
+16535:    return true;
+16535:  }
+16535:     };
+16535: 
+16535:   template<typename _II1, typename _II2>
+16535:     inline bool
+16535:     __equal_aux(_II1 __first1, _II1 __last1, _II2 __first2)
+16535:     {
+16535:       typedef typename iterator_traits<_II1>::value_type _ValueType1;
+16535:       typedef typename iterator_traits<_II2>::value_type _ValueType2;
+16535:       const bool __simple = ((__is_integer<_ValueType1>::__value
+16535:          || __is_pointer<_ValueType1>::__value)
+16535:         && __is_pointer<_II1>::__value
+16535:         && __is_pointer<_II2>::__value
+16535:         && __are_same<_ValueType1, _ValueType2>::__value);
+16535: 
+16535:       return std::__equal<__simple>::equal(__first1, __last1, __first2);
+16535:     }
+16535: 
+16535:   template<typename, typename>
+16535:     struct __lc_rai
+16535:     {
+16535:       template<typename _II1, typename _II2>
+16535:  static _II1
+16535:  __newlast1(_II1, _II1 __last1, _II2, _II2)
+16535:  { return __last1; }
+16535: 
+16535:       template<typename _II>
+16535:  static bool
+16535:  __cnd2(_II __first, _II __last)
+16535:  { return __first != __last; }
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __lc_rai<random_access_iterator_tag, random_access_iterator_tag>
+16535:     {
+16535:       template<typename _RAI1, typename _RAI2>
+16535:  static _RAI1
+16535:  __newlast1(_RAI1 __first1, _RAI1 __last1,
+16535:      _RAI2 __first2, _RAI2 __last2)
+16535:  {
+16535:    const typename iterator_traits<_RAI1>::difference_type
+16535:      __diff1 = __last1 - __first1;
+16535:    const typename iterator_traits<_RAI2>::difference_type
+16535:      __diff2 = __last2 - __first2;
+16535:    return __diff2 < __diff1 ? __first1 + __diff2 : __last1;
+16535:  }
+16535: 
+16535:       template<typename _RAI>
+16535:  static bool
+16535:  __cnd2(_RAI, _RAI)
+16535:  { return true; }
+16535:     };
+16535: 
+16535:   template<typename _II1, typename _II2, typename _Compare>
+16535:     bool
+16535:     __lexicographical_compare_impl(_II1 __first1, _II1 __last1,
+16535:        _II2 __first2, _II2 __last2,
+16535:        _Compare __comp)
+16535:     {
+16535:       typedef typename iterator_traits<_II1>::iterator_category _Category1;
+16535:       typedef typename iterator_traits<_II2>::iterator_category _Category2;
+16535:       typedef std::__lc_rai<_Category1, _Category2> __rai_type;
+16535: 
+16535:       __last1 = __rai_type::__newlast1(__first1, __last1, __first2, __last2);
+16535:       for (; __first1 != __last1 && __rai_type::__cnd2(__first2, __last2);
+16535:     ++__first1, (void)++__first2)
+16535:  {
+16535:    if (__comp(__first1, __first2))
+16535:      return true;
+16535:    if (__comp(__first2, __first1))
+16535:      return false;
+16535:  }
+16535:       return __first1 == __last1 && __first2 != __last2;
+16535:     }
+16535: 
+16535:   template<bool _BoolType>
+16535:     struct __lexicographical_compare
+16535:     {
+16535:       template<typename _II1, typename _II2>
+16535:  static bool __lc(_II1, _II1, _II2, _II2);
+16535:     };
+16535: 
+16535:   template<bool _BoolType>
+16535:     template<typename _II1, typename _II2>
+16535:       bool
+16535:       __lexicographical_compare<_BoolType>::
+16535:       __lc(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2)
+16535:       {
+16535:  return std::__lexicographical_compare_impl(__first1, __last1,
+16535:          __first2, __last2,
+16535:      __gnu_cxx::__ops::__iter_less_iter());
+16535:       }
+16535: 
+16535:   template<>
+16535:     struct __lexicographical_compare<true>
+16535:     {
+16535:       template<typename _Tp, typename _Up>
+16535:  static bool
+16535:  __lc(const _Tp* __first1, const _Tp* __last1,
+16535:       const _Up* __first2, const _Up* __last2)
+16535:  {
+16535:    const size_t __len1 = __last1 - __first1;
+16535:    const size_t __len2 = __last2 - __first2;
+16535:    if (const size_t __len = std::min(__len1, __len2))
+16535:      if (int __result = __builtin_memcmp(__first1, __first2, __len))
+16535:        return __result < 0;
+16535:    return __len1 < __len2;
+16535:  }
+16535:     };
+16535: 
+16535:   template<typename _II1, typename _II2>
+16535:     inline bool
+16535:     __lexicographical_compare_aux(_II1 __first1, _II1 __last1,
+16535:       _II2 __first2, _II2 __last2)
+16535:     {
+16535:       typedef typename iterator_traits<_II1>::value_type _ValueType1;
+16535:       typedef typename iterator_traits<_II2>::value_type _ValueType2;
+16535:       const bool __simple =
+16535:  (__is_byte<_ValueType1>::__value && __is_byte<_ValueType2>::__value
+16535:   && !__gnu_cxx::__numeric_traits<_ValueType1>::__is_signed
+16535:   && !__gnu_cxx::__numeric_traits<_ValueType2>::__is_signed
+16535:   && __is_pointer<_II1>::__value
+16535:   && __is_pointer<_II2>::__value);
+16535: 
+16535:       return std::__lexicographical_compare<__simple>::__lc(__first1, __last1,
+16535:            __first2, __last2);
+16535:     }
+16535: 
+16535:   template<typename _ForwardIterator, typename _Tp, typename _Compare>
+16535:     _ForwardIterator
+16535:     __lower_bound(_ForwardIterator __first, _ForwardIterator __last,
+16535:     const _Tp& __val, _Compare __comp)
+16535:     {
+16535:       typedef typename iterator_traits<_ForwardIterator>::difference_type
+16535:  _DistanceType;
+16535: 
+16535:       _DistanceType __len = std::distance(__first, __last);
+16535: 
+16535:       while (__len > 0)
+16535:  {
+16535:    _DistanceType __half = __len >> 1;
+16535:    _ForwardIterator __middle = __first;
+16535:    std::advance(__middle, __half);
+16535:    if (__comp(__middle, __val))
+16535:      {
+16535:        __first = __middle;
+16535:        ++__first;
+16535:        __len = __len - __half - 1;
+16535:      }
+16535:    else
+16535:      __len = __half;
+16535:  }
+16535:       return __first;
+16535:     }
+16535: # 982 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:   template<typename _ForwardIterator, typename _Tp>
+16535:     inline _ForwardIterator
+16535:     lower_bound(_ForwardIterator __first, _ForwardIterator __last,
+16535:   const _Tp& __val)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__lower_bound(__first, __last, __val,
+16535:     __gnu_cxx::__ops::__iter_less_val());
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   inline constexpr int
+16535:   __lg(int __n)
+16535:   { return sizeof(int) * 8 - 1 - __builtin_clz(__n); }
+16535: 
+16535:   inline constexpr unsigned
+16535:   __lg(unsigned __n)
+16535:   { return sizeof(int) * 8 - 1 - __builtin_clz(__n); }
+16535: 
+16535:   inline constexpr long
+16535:   __lg(long __n)
+16535:   { return sizeof(long) * 8 - 1 - __builtin_clzl(__n); }
+16535: 
+16535:   inline constexpr unsigned long
+16535:   __lg(unsigned long __n)
+16535:   { return sizeof(long) * 8 - 1 - __builtin_clzl(__n); }
+16535: 
+16535:   inline constexpr long long
+16535:   __lg(long long __n)
+16535:   { return sizeof(long long) * 8 - 1 - __builtin_clzll(__n); }
+16535: 
+16535:   inline constexpr unsigned long long
+16535:   __lg(unsigned long long __n)
+16535:   { return sizeof(long long) * 8 - 1 - __builtin_clzll(__n); }
+16535: 
+16535: 
+16535: # 1037 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:   template<typename _II1, typename _II2>
+16535:     inline bool
+16535:     equal(_II1 __first1, _II1 __last1, _II2 __first2)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__equal_aux(std::__niter_base(__first1),
+16535:          std::__niter_base(__last1),
+16535:          std::__niter_base(__first2));
+16535:     }
+16535: # 1069 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:   template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
+16535:     inline bool
+16535:     equal(_IIter1 __first1, _IIter1 __last1,
+16535:    _IIter2 __first2, _BinaryPredicate __binary_pred)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:       ;
+16535: 
+16535:       for (; __first1 != __last1; ++__first1, (void)++__first2)
+16535:  if (!bool(__binary_pred(*__first1, *__first2)))
+16535:    return false;
+16535:       return true;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _II1, typename _II2>
+16535:     inline bool
+16535:     __equal4(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2)
+16535:     {
+16535:       using _RATag = random_access_iterator_tag;
+16535:       using _Cat1 = typename iterator_traits<_II1>::iterator_category;
+16535:       using _Cat2 = typename iterator_traits<_II2>::iterator_category;
+16535:       using _RAIters = __and_<is_same<_Cat1, _RATag>, is_same<_Cat2, _RATag>>;
+16535:       if (_RAIters())
+16535:  {
+16535:    auto __d1 = std::distance(__first1, __last1);
+16535:    auto __d2 = std::distance(__first2, __last2);
+16535:    if (__d1 != __d2)
+16535:      return false;
+16535:    return std::equal(__first1, __last1, __first2);
+16535:  }
+16535: 
+16535:       for (; __first1 != __last1 && __first2 != __last2;
+16535:    ++__first1, (void)++__first2)
+16535:  if (!(*__first1 == *__first2))
+16535:    return false;
+16535:       return __first1 == __last1 && __first2 == __last2;
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _II1, typename _II2, typename _BinaryPredicate>
+16535:     inline bool
+16535:     __equal4(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2,
+16535:       _BinaryPredicate __binary_pred)
+16535:     {
+16535:       using _RATag = random_access_iterator_tag;
+16535:       using _Cat1 = typename iterator_traits<_II1>::iterator_category;
+16535:       using _Cat2 = typename iterator_traits<_II2>::iterator_category;
+16535:       using _RAIters = __and_<is_same<_Cat1, _RATag>, is_same<_Cat2, _RATag>>;
+16535:       if (_RAIters())
+16535:  {
+16535:    auto __d1 = std::distance(__first1, __last1);
+16535:    auto __d2 = std::distance(__first2, __last2);
+16535:    if (__d1 != __d2)
+16535:      return false;
+16535:    return std::equal(__first1, __last1, __first2,
+16535:            __binary_pred);
+16535:  }
+16535: 
+16535:       for (; __first1 != __last1 && __first2 != __last2;
+16535:    ++__first1, (void)++__first2)
+16535:  if (!bool(__binary_pred(*__first1, *__first2)))
+16535:    return false;
+16535:       return __first1 == __last1 && __first2 == __last2;
+16535:     }
+16535: # 1156 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:   template<typename _II1, typename _II2>
+16535:     inline bool
+16535:     equal(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__equal4(__first1, __last1, __first2, __last2);
+16535:     }
+16535: # 1188 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:   template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
+16535:     inline bool
+16535:     equal(_IIter1 __first1, _IIter1 __last1,
+16535:    _IIter2 __first2, _IIter2 __last2, _BinaryPredicate __binary_pred)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__equal4(__first1, __last1, __first2, __last2,
+16535:           __binary_pred);
+16535:     }
+16535: # 1219 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:   template<typename _II1, typename _II2>
+16535:     inline bool
+16535:     lexicographical_compare(_II1 __first1, _II1 __last1,
+16535:        _II2 __first2, _II2 __last2)
+16535:     {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:      
+16535:      
+16535:      
+16535:      
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__lexicographical_compare_aux(std::__niter_base(__first1),
+16535:       std::__niter_base(__last1),
+16535:       std::__niter_base(__first2),
+16535:       std::__niter_base(__last2));
+16535:     }
+16535: # 1255 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:   template<typename _II1, typename _II2, typename _Compare>
+16535:     inline bool
+16535:     lexicographical_compare(_II1 __first1, _II1 __last1,
+16535:        _II2 __first2, _II2 __last2, _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__lexicographical_compare_impl
+16535:  (__first1, __last1, __first2, __last2,
+16535:   __gnu_cxx::__ops::__iter_comp_iter(__comp));
+16535:     }
+16535: 
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _BinaryPredicate>
+16535:     pair<_InputIterator1, _InputIterator2>
+16535:     __mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:         _InputIterator2 __first2, _BinaryPredicate __binary_pred)
+16535:     {
+16535:       while (__first1 != __last1 && __binary_pred(__first1, __first2))
+16535:  {
+16535:    ++__first1;
+16535:    ++__first2;
+16535:  }
+16535:       return pair<_InputIterator1, _InputIterator2>(__first1, __first2);
+16535:     }
+16535: # 1298 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:   template<typename _InputIterator1, typename _InputIterator2>
+16535:     inline pair<_InputIterator1, _InputIterator2>
+16535:     mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:       _InputIterator2 __first2)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__mismatch(__first1, __last1, __first2,
+16535:         __gnu_cxx::__ops::__iter_equal_to_iter());
+16535:     }
+16535: # 1331 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _BinaryPredicate>
+16535:     inline pair<_InputIterator1, _InputIterator2>
+16535:     mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:       _InputIterator2 __first2, _BinaryPredicate __binary_pred)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:       ;
+16535: 
+16535:       return std::__mismatch(__first1, __last1, __first2,
+16535:  __gnu_cxx::__ops::__iter_comp_iter(__binary_pred));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _BinaryPredicate>
+16535:     pair<_InputIterator1, _InputIterator2>
+16535:     __mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:         _InputIterator2 __first2, _InputIterator2 __last2,
+16535:         _BinaryPredicate __binary_pred)
+16535:     {
+16535:       while (__first1 != __last1 && __first2 != __last2
+16535:       && __binary_pred(__first1, __first2))
+16535:  {
+16535:    ++__first1;
+16535:    ++__first2;
+16535:  }
+16535:       return pair<_InputIterator1, _InputIterator2>(__first1, __first2);
+16535:     }
+16535: # 1378 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:   template<typename _InputIterator1, typename _InputIterator2>
+16535:     inline pair<_InputIterator1, _InputIterator2>
+16535:     mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:       _InputIterator2 __first2, _InputIterator2 __last2)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__mismatch(__first1, __last1, __first2, __last2,
+16535:         __gnu_cxx::__ops::__iter_equal_to_iter());
+16535:     }
+16535: # 1413 "/usr/include/c++/8/bits/stl_algobase.h" 3
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _BinaryPredicate>
+16535:     inline pair<_InputIterator1, _InputIterator2>
+16535:     mismatch(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:       _InputIterator2 __first2, _InputIterator2 __last2,
+16535:       _BinaryPredicate __binary_pred)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__mismatch(__first1, __last1, __first2, __last2,
+16535:         __gnu_cxx::__ops::__iter_comp_iter(__binary_pred));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 62 "/usr/include/c++/8/algorithm" 2 3
+16535: # 1 "/usr/include/c++/8/bits/stl_algo.h" 1 3
+16535: # 59 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535: # 1 "/usr/include/c++/8/cstdlib" 1 3
+16535: # 39 "/usr/include/c++/8/cstdlib" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/cstdlib" 3
+16535: # 75 "/usr/include/c++/8/cstdlib" 3
+16535: # 1 "/usr/include/stdlib.h" 1 3 4
+16535: # 25 "/usr/include/stdlib.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 1 3 4
+16535: # 26 "/usr/include/stdlib.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
+16535: # 32 "/usr/include/stdlib.h" 2 3 4
+16535: 
+16535: extern "C" {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/waitflags.h" 1 3 4
+16535: # 52 "/usr/include/x86_64-linux-gnu/bits/waitflags.h" 3 4
+16535: typedef enum
+16535: {
+16535:   P_ALL,
+16535:   P_PID,
+16535:   P_PGID
+16535: } idtype_t;
+16535: # 40 "/usr/include/stdlib.h" 2 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/waitstatus.h" 1 3 4
+16535: # 41 "/usr/include/stdlib.h" 2 3 4
+16535: # 58 "/usr/include/stdlib.h" 3 4
+16535: typedef struct
+16535:   {
+16535:     int quot;
+16535:     int rem;
+16535:   } div_t;
+16535: 
+16535: 
+16535: 
+16535: typedef struct
+16535:   {
+16535:     long int quot;
+16535:     long int rem;
+16535:   } ldiv_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: __extension__ typedef struct
+16535:   {
+16535:     long long int quot;
+16535:     long long int rem;
+16535:   } lldiv_t;
+16535: # 97 "/usr/include/stdlib.h" 3 4
+16535: extern size_t __ctype_get_mb_cur_max (void) throw () __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: extern double atof (const char *__nptr)
+16535:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: extern int atoi (const char *__nptr)
+16535:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: extern long int atol (const char *__nptr)
+16535:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: __extension__ extern long long int atoll (const char *__nptr)
+16535:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: extern double strtod (const char *__restrict __nptr,
+16535:         char **__restrict __endptr)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: extern float strtof (const char *__restrict __nptr,
+16535:        char **__restrict __endptr) throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: extern long double strtold (const char *__restrict __nptr,
+16535:        char **__restrict __endptr)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: # 140 "/usr/include/stdlib.h" 3 4
+16535: extern _Float32 strtof32 (const char *__restrict __nptr,
+16535:      char **__restrict __endptr)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 strtof64 (const char *__restrict __nptr,
+16535:      char **__restrict __endptr)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 strtof128 (const char *__restrict __nptr,
+16535:        char **__restrict __endptr)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x strtof32x (const char *__restrict __nptr,
+16535:        char **__restrict __endptr)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x strtof64x (const char *__restrict __nptr,
+16535:        char **__restrict __endptr)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: # 176 "/usr/include/stdlib.h" 3 4
+16535: extern long int strtol (const char *__restrict __nptr,
+16535:    char **__restrict __endptr, int __base)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: extern unsigned long int strtoul (const char *__restrict __nptr,
+16535:       char **__restrict __endptr, int __base)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: __extension__
+16535: extern long long int strtoq (const char *__restrict __nptr,
+16535:         char **__restrict __endptr, int __base)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: __extension__
+16535: extern unsigned long long int strtouq (const char *__restrict __nptr,
+16535:            char **__restrict __endptr, int __base)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: __extension__
+16535: extern long long int strtoll (const char *__restrict __nptr,
+16535:          char **__restrict __endptr, int __base)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: __extension__
+16535: extern unsigned long long int strtoull (const char *__restrict __nptr,
+16535:      char **__restrict __endptr, int __base)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int strfromd (char *__dest, size_t __size, const char *__format,
+16535:        double __f)
+16535:      throw () __attribute__ ((__nonnull__ (3)));
+16535: 
+16535: extern int strfromf (char *__dest, size_t __size, const char *__format,
+16535:        float __f)
+16535:      throw () __attribute__ ((__nonnull__ (3)));
+16535: 
+16535: extern int strfroml (char *__dest, size_t __size, const char *__format,
+16535:        long double __f)
+16535:      throw () __attribute__ ((__nonnull__ (3)));
+16535: # 232 "/usr/include/stdlib.h" 3 4
+16535: extern int strfromf32 (char *__dest, size_t __size, const char * __format,
+16535:          _Float32 __f)
+16535:      throw () __attribute__ ((__nonnull__ (3)));
+16535: 
+16535: 
+16535: 
+16535: extern int strfromf64 (char *__dest, size_t __size, const char * __format,
+16535:          _Float64 __f)
+16535:      throw () __attribute__ ((__nonnull__ (3)));
+16535: 
+16535: 
+16535: 
+16535: extern int strfromf128 (char *__dest, size_t __size, const char * __format,
+16535:    _Float128 __f)
+16535:      throw () __attribute__ ((__nonnull__ (3)));
+16535: 
+16535: 
+16535: 
+16535: extern int strfromf32x (char *__dest, size_t __size, const char * __format,
+16535:    _Float32x __f)
+16535:      throw () __attribute__ ((__nonnull__ (3)));
+16535: 
+16535: 
+16535: 
+16535: extern int strfromf64x (char *__dest, size_t __size, const char * __format,
+16535:    _Float64x __f)
+16535:      throw () __attribute__ ((__nonnull__ (3)));
+16535: # 274 "/usr/include/stdlib.h" 3 4
+16535: extern long int strtol_l (const char *__restrict __nptr,
+16535:      char **__restrict __endptr, int __base,
+16535:      locale_t __loc) throw () __attribute__ ((__nonnull__ (1, 4)));
+16535: 
+16535: extern unsigned long int strtoul_l (const char *__restrict __nptr,
+16535:         char **__restrict __endptr,
+16535:         int __base, locale_t __loc)
+16535:      throw () __attribute__ ((__nonnull__ (1, 4)));
+16535: 
+16535: __extension__
+16535: extern long long int strtoll_l (const char *__restrict __nptr,
+16535:     char **__restrict __endptr, int __base,
+16535:     locale_t __loc)
+16535:      throw () __attribute__ ((__nonnull__ (1, 4)));
+16535: 
+16535: __extension__
+16535: extern unsigned long long int strtoull_l (const char *__restrict __nptr,
+16535:        char **__restrict __endptr,
+16535:        int __base, locale_t __loc)
+16535:      throw () __attribute__ ((__nonnull__ (1, 4)));
+16535: 
+16535: extern double strtod_l (const char *__restrict __nptr,
+16535:    char **__restrict __endptr, locale_t __loc)
+16535:      throw () __attribute__ ((__nonnull__ (1, 3)));
+16535: 
+16535: extern float strtof_l (const char *__restrict __nptr,
+16535:          char **__restrict __endptr, locale_t __loc)
+16535:      throw () __attribute__ ((__nonnull__ (1, 3)));
+16535: 
+16535: extern long double strtold_l (const char *__restrict __nptr,
+16535:          char **__restrict __endptr,
+16535:          locale_t __loc)
+16535:      throw () __attribute__ ((__nonnull__ (1, 3)));
+16535: # 316 "/usr/include/stdlib.h" 3 4
+16535: extern _Float32 strtof32_l (const char *__restrict __nptr,
+16535:        char **__restrict __endptr,
+16535:        locale_t __loc)
+16535:      throw () __attribute__ ((__nonnull__ (1, 3)));
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 strtof64_l (const char *__restrict __nptr,
+16535:        char **__restrict __endptr,
+16535:        locale_t __loc)
+16535:      throw () __attribute__ ((__nonnull__ (1, 3)));
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 strtof128_l (const char *__restrict __nptr,
+16535:          char **__restrict __endptr,
+16535:          locale_t __loc)
+16535:      throw () __attribute__ ((__nonnull__ (1, 3)));
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x strtof32x_l (const char *__restrict __nptr,
+16535:          char **__restrict __endptr,
+16535:          locale_t __loc)
+16535:      throw () __attribute__ ((__nonnull__ (1, 3)));
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x strtof64x_l (const char *__restrict __nptr,
+16535:          char **__restrict __endptr,
+16535:          locale_t __loc)
+16535:      throw () __attribute__ ((__nonnull__ (1, 3)));
+16535: # 360 "/usr/include/stdlib.h" 3 4
+16535: extern __inline __attribute__ ((__gnu_inline__)) int
+16535: __attribute__ ((__leaf__)) atoi (const char *__nptr) throw ()
+16535: {
+16535:   return (int) strtol (__nptr, (char **) __null, 10);
+16535: }
+16535: extern __inline __attribute__ ((__gnu_inline__)) long int
+16535: __attribute__ ((__leaf__)) atol (const char *__nptr) throw ()
+16535: {
+16535:   return strtol (__nptr, (char **) __null, 10);
+16535: }
+16535: 
+16535: 
+16535: __extension__ extern __inline __attribute__ ((__gnu_inline__)) long long int
+16535: __attribute__ ((__leaf__)) atoll (const char *__nptr) throw ()
+16535: {
+16535:   return strtoll (__nptr, (char **) __null, 10);
+16535: }
+16535: # 385 "/usr/include/stdlib.h" 3 4
+16535: extern char *l64a (long int __n) throw () __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: extern long int a64l (const char *__s)
+16535:      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/sys/types.h" 1 3 4
+16535: # 27 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
+16535: extern "C" {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __u_char u_char;
+16535: typedef __u_short u_short;
+16535: typedef __u_int u_int;
+16535: typedef __u_long u_long;
+16535: typedef __quad_t quad_t;
+16535: typedef __u_quad_t u_quad_t;
+16535: typedef __fsid_t fsid_t;
+16535: 
+16535: 
+16535: typedef __loff_t loff_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __ino_t ino_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __ino64_t ino64_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __dev_t dev_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __gid_t gid_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __mode_t mode_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __nlink_t nlink_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __uid_t uid_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __off_t off_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __off64_t off64_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __pid_t pid_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __id_t id_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __ssize_t ssize_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __daddr_t daddr_t;
+16535: typedef __caddr_t caddr_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __key_t key_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types/clock_t.h" 1 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __clock_t clock_t;
+16535: # 127 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types/clockid_t.h" 1 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __clockid_t clockid_t;
+16535: # 129 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types/time_t.h" 1 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __time_t time_t;
+16535: # 130 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types/timer_t.h" 1 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __timer_t timer_t;
+16535: # 131 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: typedef __useconds_t useconds_t;
+16535: 
+16535: 
+16535: 
+16535: typedef __suseconds_t suseconds_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
+16535: # 145 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: typedef unsigned long int ulong;
+16535: typedef unsigned short int ushort;
+16535: typedef unsigned int uint;
+16535: # 177 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
+16535: typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
+16535: typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
+16535: typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
+16535: typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));
+16535: 
+16535: typedef int register_t __attribute__ ((__mode__ (__word__)));
+16535: # 193 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
+16535: # 1 "/usr/include/endian.h" 1 3 4
+16535: # 36 "/usr/include/endian.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/endian.h" 1 3 4
+16535: # 37 "/usr/include/endian.h" 2 3 4
+16535: # 60 "/usr/include/endian.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 1 3 4
+16535: # 33 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 3 4
+16535: static __inline __uint16_t
+16535: __bswap_16 (__uint16_t __bsx)
+16535: {
+16535: 
+16535:   return __builtin_bswap16 (__bsx);
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: static __inline __uint32_t
+16535: __bswap_32 (__uint32_t __bsx)
+16535: {
+16535: 
+16535:   return __builtin_bswap32 (__bsx);
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 69 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 3 4
+16535: __extension__ static __inline __uint64_t
+16535: __bswap_64 (__uint64_t __bsx)
+16535: {
+16535: 
+16535:   return __builtin_bswap64 (__bsx);
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 61 "/usr/include/endian.h" 2 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/uintn-identity.h" 1 3 4
+16535: # 32 "/usr/include/x86_64-linux-gnu/bits/uintn-identity.h" 3 4
+16535: static __inline __uint16_t
+16535: __uint16_identity (__uint16_t __x)
+16535: {
+16535:   return __x;
+16535: }
+16535: 
+16535: static __inline __uint32_t
+16535: __uint32_identity (__uint32_t __x)
+16535: {
+16535:   return __x;
+16535: }
+16535: 
+16535: static __inline __uint64_t
+16535: __uint64_identity (__uint64_t __x)
+16535: {
+16535:   return __x;
+16535: }
+16535: # 62 "/usr/include/endian.h" 2 3 4
+16535: # 194 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/sys/select.h" 1 3 4
+16535: # 30 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/select.h" 1 3 4
+16535: # 22 "/usr/include/x86_64-linux-gnu/bits/select.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
+16535: # 23 "/usr/include/x86_64-linux-gnu/bits/select.h" 2 3 4
+16535: # 31 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h" 1 3 4
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h" 1 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef struct
+16535: {
+16535:   unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
+16535: } __sigset_t;
+16535: # 5 "/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h" 2 3 4
+16535: 
+16535: 
+16535: typedef __sigset_t sigset_t;
+16535: # 34 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h" 1 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: struct timeval
+16535: {
+16535:   __time_t tv_sec;
+16535:   __suseconds_t tv_usec;
+16535: };
+16535: # 38 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h" 1 3 4
+16535: # 9 "/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h" 3 4
+16535: struct timespec
+16535: {
+16535:   __time_t tv_sec;
+16535:   __syscall_slong_t tv_nsec;
+16535: };
+16535: # 40 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4
+16535: # 49 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
+16535: typedef long int __fd_mask;
+16535: # 59 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
+16535: typedef struct
+16535:   {
+16535: 
+16535: 
+16535: 
+16535:     __fd_mask fds_bits[1024 / (8 * (int) sizeof (__fd_mask))];
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   } fd_set;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __fd_mask fd_mask;
+16535: # 91 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
+16535: extern "C" {
+16535: # 101 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
+16535: extern int select (int __nfds, fd_set *__restrict __readfds,
+16535:      fd_set *__restrict __writefds,
+16535:      fd_set *__restrict __exceptfds,
+16535:      struct timeval *__restrict __timeout);
+16535: # 113 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
+16535: extern int pselect (int __nfds, fd_set *__restrict __readfds,
+16535:       fd_set *__restrict __writefds,
+16535:       fd_set *__restrict __exceptfds,
+16535:       const struct timespec *__restrict __timeout,
+16535:       const __sigset_t *__restrict __sigmask);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/select2.h" 1 3 4
+16535: # 24 "/usr/include/x86_64-linux-gnu/bits/select2.h" 3 4
+16535: extern long int __fdelt_chk (long int __d);
+16535: extern long int __fdelt_warn (long int __d)
+16535:   __attribute__((__warning__ ("bit outside of fd_set selected")));
+16535: # 124 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4
+16535: 
+16535: 
+16535: }
+16535: # 197 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __blksize_t blksize_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __blkcnt_t blkcnt_t;
+16535: 
+16535: 
+16535: 
+16535: typedef __fsblkcnt_t fsblkcnt_t;
+16535: 
+16535: 
+16535: 
+16535: typedef __fsfilcnt_t fsfilcnt_t;
+16535: # 236 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
+16535: typedef __blkcnt64_t blkcnt64_t;
+16535: typedef __fsblkcnt64_t fsblkcnt64_t;
+16535: typedef __fsfilcnt64_t fsfilcnt64_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 1 3 4
+16535: # 23 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h" 1 3 4
+16535: # 77 "/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h" 1 3 4
+16535: # 21 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
+16535: # 22 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h" 2 3 4
+16535: # 65 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h" 3 4
+16535: struct __pthread_rwlock_arch_t
+16535: {
+16535:   unsigned int __readers;
+16535:   unsigned int __writers;
+16535:   unsigned int __wrphase_futex;
+16535:   unsigned int __writers_futex;
+16535:   unsigned int __pad3;
+16535:   unsigned int __pad4;
+16535: 
+16535:   int __cur_writer;
+16535:   int __shared;
+16535:   signed char __rwelision;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   unsigned char __pad1[7];
+16535: 
+16535: 
+16535:   unsigned long int __pad2;
+16535: 
+16535: 
+16535:   unsigned int __flags;
+16535: # 99 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h" 3 4
+16535: };
+16535: # 78 "/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef struct __pthread_internal_list
+16535: {
+16535:   struct __pthread_internal_list *__prev;
+16535:   struct __pthread_internal_list *__next;
+16535: } __pthread_list_t;
+16535: # 118 "/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h" 3 4
+16535: struct __pthread_mutex_s
+16535: {
+16535:   int __lock ;
+16535:   unsigned int __count;
+16535:   int __owner;
+16535: 
+16535:   unsigned int __nusers;
+16535: # 148 "/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h" 3 4
+16535:   int __kind;
+16535:  
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   short __spins; short __elision;
+16535:   __pthread_list_t __list;
+16535: # 165 "/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h" 3 4
+16535:  
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: struct __pthread_cond_s
+16535: {
+16535:   __extension__ union
+16535:   {
+16535:     __extension__ unsigned long long int __wseq;
+16535:     struct
+16535:     {
+16535:       unsigned int __low;
+16535:       unsigned int __high;
+16535:     } __wseq32;
+16535:   };
+16535:   __extension__ union
+16535:   {
+16535:     __extension__ unsigned long long int __g1_start;
+16535:     struct
+16535:     {
+16535:       unsigned int __low;
+16535:       unsigned int __high;
+16535:     } __g1_start32;
+16535:   };
+16535:   unsigned int __g_refs[2] ;
+16535:   unsigned int __g_size[2];
+16535:   unsigned int __g1_orig_size;
+16535:   unsigned int __wrefs;
+16535:   unsigned int __g_signals[2];
+16535: };
+16535: # 24 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: typedef unsigned long int pthread_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef union
+16535: {
+16535:   char __size[4];
+16535:   int __align;
+16535: } pthread_mutexattr_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef union
+16535: {
+16535:   char __size[4];
+16535:   int __align;
+16535: } pthread_condattr_t;
+16535: 
+16535: 
+16535: 
+16535: typedef unsigned int pthread_key_t;
+16535: 
+16535: 
+16535: 
+16535: typedef int pthread_once_t;
+16535: 
+16535: 
+16535: union pthread_attr_t
+16535: {
+16535:   char __size[56];
+16535:   long int __align;
+16535: };
+16535: 
+16535: typedef union pthread_attr_t pthread_attr_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef union
+16535: {
+16535:   struct __pthread_mutex_s __data;
+16535:   char __size[40];
+16535:   long int __align;
+16535: } pthread_mutex_t;
+16535: 
+16535: 
+16535: typedef union
+16535: {
+16535:   struct __pthread_cond_s __data;
+16535:   char __size[48];
+16535:   __extension__ long long int __align;
+16535: } pthread_cond_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef union
+16535: {
+16535:   struct __pthread_rwlock_arch_t __data;
+16535:   char __size[56];
+16535:   long int __align;
+16535: } pthread_rwlock_t;
+16535: 
+16535: typedef union
+16535: {
+16535:   char __size[8];
+16535:   long int __align;
+16535: } pthread_rwlockattr_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef volatile int pthread_spinlock_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef union
+16535: {
+16535:   char __size[32];
+16535:   long int __align;
+16535: } pthread_barrier_t;
+16535: 
+16535: typedef union
+16535: {
+16535:   char __size[4];
+16535:   int __align;
+16535: } pthread_barrierattr_t;
+16535: # 245 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
+16535: 
+16535: 
+16535: }
+16535: # 395 "/usr/include/stdlib.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long int random (void) throw ();
+16535: 
+16535: 
+16535: extern void srandom (unsigned int __seed) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *initstate (unsigned int __seed, char *__statebuf,
+16535:    size_t __statelen) throw () __attribute__ ((__nonnull__ (2)));
+16535: 
+16535: 
+16535: 
+16535: extern char *setstate (char *__statebuf) throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: struct random_data
+16535:   {
+16535:     int32_t *fptr;
+16535:     int32_t *rptr;
+16535:     int32_t *state;
+16535:     int rand_type;
+16535:     int rand_deg;
+16535:     int rand_sep;
+16535:     int32_t *end_ptr;
+16535:   };
+16535: 
+16535: extern int random_r (struct random_data *__restrict __buf,
+16535:        int32_t *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: extern int srandom_r (unsigned int __seed, struct random_data *__buf)
+16535:      throw () __attribute__ ((__nonnull__ (2)));
+16535: 
+16535: extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
+16535:    size_t __statelen,
+16535:    struct random_data *__restrict __buf)
+16535:      throw () __attribute__ ((__nonnull__ (2, 4)));
+16535: 
+16535: extern int setstate_r (char *__restrict __statebuf,
+16535:          struct random_data *__restrict __buf)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int rand (void) throw ();
+16535: 
+16535: extern void srand (unsigned int __seed) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int rand_r (unsigned int *__seed) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern double drand48 (void) throw ();
+16535: extern double erand48 (unsigned short int __xsubi[3]) throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern long int lrand48 (void) throw ();
+16535: extern long int nrand48 (unsigned short int __xsubi[3])
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern long int mrand48 (void) throw ();
+16535: extern long int jrand48 (unsigned short int __xsubi[3])
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern void srand48 (long int __seedval) throw ();
+16535: extern unsigned short int *seed48 (unsigned short int __seed16v[3])
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: extern void lcong48 (unsigned short int __param[7]) throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: struct drand48_data
+16535:   {
+16535:     unsigned short int __x[3];
+16535:     unsigned short int __old_x[3];
+16535:     unsigned short int __c;
+16535:     unsigned short int __init;
+16535:     __extension__ unsigned long long int __a;
+16535: 
+16535:   };
+16535: 
+16535: 
+16535: extern int drand48_r (struct drand48_data *__restrict __buffer,
+16535:         double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: extern int erand48_r (unsigned short int __xsubi[3],
+16535:         struct drand48_data *__restrict __buffer,
+16535:         double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern int lrand48_r (struct drand48_data *__restrict __buffer,
+16535:         long int *__restrict __result)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: extern int nrand48_r (unsigned short int __xsubi[3],
+16535:         struct drand48_data *__restrict __buffer,
+16535:         long int *__restrict __result)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern int mrand48_r (struct drand48_data *__restrict __buffer,
+16535:         long int *__restrict __result)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: extern int jrand48_r (unsigned short int __xsubi[3],
+16535:         struct drand48_data *__restrict __buffer,
+16535:         long int *__restrict __result)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
+16535:      throw () __attribute__ ((__nonnull__ (2)));
+16535: 
+16535: extern int seed48_r (unsigned short int __seed16v[3],
+16535:        struct drand48_data *__buffer) throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: extern int lcong48_r (unsigned short int __param[7],
+16535:         struct drand48_data *__buffer)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern void *malloc (size_t __size) throw () __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: extern void *calloc (size_t __nmemb, size_t __size)
+16535:      throw () __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern void *realloc (void *__ptr, size_t __size)
+16535:      throw () __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size)
+16535:      throw () __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: extern void free (void *__ptr) throw ();
+16535: 
+16535: 
+16535: # 1 "/usr/include/alloca.h" 1 3 4
+16535: # 24 "/usr/include/alloca.h" 3 4
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
+16535: # 25 "/usr/include/alloca.h" 2 3 4
+16535: 
+16535: extern "C" {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern void *alloca (size_t __size) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 567 "/usr/include/stdlib.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern void *valloc (size_t __size) throw () __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
+16535:      throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern void *aligned_alloc (size_t __alignment, size_t __size)
+16535:      throw () __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (2))) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: extern void abort (void) throw () __attribute__ ((__noreturn__));
+16535: 
+16535: 
+16535: 
+16535: extern int atexit (void (*__func) (void)) throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern "C++" int at_quick_exit (void (*__func) (void))
+16535:      throw () __asm ("at_quick_exit") __attribute__ ((__nonnull__ (1)));
+16535: # 607 "/usr/include/stdlib.h" 3 4
+16535: extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern void exit (int __status) throw () __attribute__ ((__noreturn__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern void quick_exit (int __status) throw () __attribute__ ((__noreturn__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern void _Exit (int __status) throw () __attribute__ ((__noreturn__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *getenv (const char *__name) throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *secure_getenv (const char *__name)
+16535:      throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int putenv (char *__string) throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int setenv (const char *__name, const char *__value, int __replace)
+16535:      throw () __attribute__ ((__nonnull__ (2)));
+16535: 
+16535: 
+16535: extern int unsetenv (const char *__name) throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int clearenv (void) throw ();
+16535: # 672 "/usr/include/stdlib.h" 3 4
+16535: extern char *mktemp (char *__template) throw () __attribute__ ((__nonnull__ (1)));
+16535: # 685 "/usr/include/stdlib.h" 3 4
+16535: extern int mkstemp (char *__template) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+16535: # 695 "/usr/include/stdlib.h" 3 4
+16535: extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+16535: # 707 "/usr/include/stdlib.h" 3 4
+16535: extern int mkstemps (char *__template, int __suffixlen) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+16535: # 717 "/usr/include/stdlib.h" 3 4
+16535: extern int mkstemps64 (char *__template, int __suffixlen)
+16535:      __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+16535: # 728 "/usr/include/stdlib.h" 3 4
+16535: extern char *mkdtemp (char *__template) throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+16535: # 739 "/usr/include/stdlib.h" 3 4
+16535: extern int mkostemp (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+16535: # 749 "/usr/include/stdlib.h" 3 4
+16535: extern int mkostemp64 (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+16535: # 759 "/usr/include/stdlib.h" 3 4
+16535: extern int mkostemps (char *__template, int __suffixlen, int __flags)
+16535:      __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+16535: # 771 "/usr/include/stdlib.h" 3 4
+16535: extern int mkostemps64 (char *__template, int __suffixlen, int __flags)
+16535:      __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+16535: # 781 "/usr/include/stdlib.h" 3 4
+16535: extern int system (const char *__command) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *canonicalize_file_name (const char *__name)
+16535:      throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+16535: # 797 "/usr/include/stdlib.h" 3 4
+16535: extern char *realpath (const char *__restrict __name,
+16535:          char *__restrict __resolved) throw () __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef int (*__compar_fn_t) (const void *, const void *);
+16535: 
+16535: 
+16535: typedef __compar_fn_t comparison_fn_t;
+16535: 
+16535: 
+16535: 
+16535: typedef int (*__compar_d_fn_t) (const void *, const void *, void *);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern void *bsearch (const void *__key, const void *__base,
+16535:         size_t __nmemb, size_t __size, __compar_fn_t __compar)
+16535:      __attribute__ ((__nonnull__ (1, 2, 5))) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h" 1 3 4
+16535: # 19 "/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h" 3 4
+16535: extern __inline __attribute__ ((__gnu_inline__)) void *
+16535: bsearch (const void *__key, const void *__base, size_t __nmemb, size_t __size,
+16535:   __compar_fn_t __compar)
+16535: {
+16535:   size_t __l, __u, __idx;
+16535:   const void *__p;
+16535:   int __comparison;
+16535: 
+16535:   __l = 0;
+16535:   __u = __nmemb;
+16535:   while (__l < __u)
+16535:     {
+16535:       __idx = (__l + __u) / 2;
+16535:       __p = (void *) (((const char *) __base) + (__idx * __size));
+16535:       __comparison = (*__compar) (__key, __p);
+16535:       if (__comparison < 0)
+16535:  __u = __idx;
+16535:       else if (__comparison > 0)
+16535:  __l = __idx + 1;
+16535:       else
+16535:  return (void *) __p;
+16535:     }
+16535: 
+16535:   return __null;
+16535: }
+16535: # 823 "/usr/include/stdlib.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern void qsort (void *__base, size_t __nmemb, size_t __size,
+16535:      __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4)));
+16535: 
+16535: extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
+16535:        __compar_d_fn_t __compar, void *__arg)
+16535:   __attribute__ ((__nonnull__ (1, 4)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int abs (int __x) throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
+16535: extern long int labs (long int __x) throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: __extension__ extern long long int llabs (long long int __x)
+16535:      throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern div_t div (int __numer, int __denom)
+16535:      throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
+16535: extern ldiv_t ldiv (long int __numer, long int __denom)
+16535:      throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: __extension__ extern lldiv_t lldiv (long long int __numer,
+16535:         long long int __denom)
+16535:      throw () __attribute__ ((__const__)) __attribute__ ((__warn_unused_result__));
+16535: # 869 "/usr/include/stdlib.h" 3 4
+16535: extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
+16535:      int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
+16535:      int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *gcvt (double __value, int __ndigit, char *__buf)
+16535:      throw () __attribute__ ((__nonnull__ (3))) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *qecvt (long double __value, int __ndigit,
+16535:       int *__restrict __decpt, int *__restrict __sign)
+16535:      throw () __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
+16535: extern char *qfcvt (long double __value, int __ndigit,
+16535:       int *__restrict __decpt, int *__restrict __sign)
+16535:      throw () __attribute__ ((__nonnull__ (3, 4))) __attribute__ ((__warn_unused_result__));
+16535: extern char *qgcvt (long double __value, int __ndigit, char *__buf)
+16535:      throw () __attribute__ ((__nonnull__ (3))) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
+16535:      int *__restrict __sign, char *__restrict __buf,
+16535:      size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5)));
+16535: extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
+16535:      int *__restrict __sign, char *__restrict __buf,
+16535:      size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5)));
+16535: 
+16535: extern int qecvt_r (long double __value, int __ndigit,
+16535:       int *__restrict __decpt, int *__restrict __sign,
+16535:       char *__restrict __buf, size_t __len)
+16535:      throw () __attribute__ ((__nonnull__ (3, 4, 5)));
+16535: extern int qfcvt_r (long double __value, int __ndigit,
+16535:       int *__restrict __decpt, int *__restrict __sign,
+16535:       char *__restrict __buf, size_t __len)
+16535:      throw () __attribute__ ((__nonnull__ (3, 4, 5)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int mblen (const char *__s, size_t __n) throw ();
+16535: 
+16535: 
+16535: extern int mbtowc (wchar_t *__restrict __pwc,
+16535:      const char *__restrict __s, size_t __n) throw ();
+16535: 
+16535: 
+16535: extern int wctomb (char *__s, wchar_t __wchar) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern size_t mbstowcs (wchar_t *__restrict __pwcs,
+16535:    const char *__restrict __s, size_t __n) throw ();
+16535: 
+16535: extern size_t wcstombs (char *__restrict __s,
+16535:    const wchar_t *__restrict __pwcs, size_t __n)
+16535:      throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int rpmatch (const char *__response) throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__warn_unused_result__));
+16535: # 954 "/usr/include/stdlib.h" 3 4
+16535: extern int getsubopt (char **__restrict __optionp,
+16535:         char *const *__restrict __tokens,
+16535:         char **__restrict __valuep)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2, 3))) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int posix_openpt (int __oflag) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int grantpt (int __fd) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int unlockpt (int __fd) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *ptsname (int __fd) throw () __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
+16535:      throw () __attribute__ ((__nonnull__ (2)));
+16535: 
+16535: 
+16535: extern int getpt (void);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int getloadavg (double __loadavg[], int __nelem)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: # 1010 "/usr/include/stdlib.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/stdlib-float.h" 1 3 4
+16535: # 24 "/usr/include/x86_64-linux-gnu/bits/stdlib-float.h" 3 4
+16535: extern __inline __attribute__ ((__gnu_inline__)) double
+16535: __attribute__ ((__leaf__)) atof (const char *__nptr) throw ()
+16535: {
+16535:   return strtod (__nptr, (char **) __null);
+16535: }
+16535: # 1011 "/usr/include/stdlib.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/stdlib.h" 1 3 4
+16535: # 23 "/usr/include/x86_64-linux-gnu/bits/stdlib.h" 3 4
+16535: extern char *__realpath_chk (const char *__restrict __name,
+16535:         char *__restrict __resolved,
+16535:         size_t __resolvedlen) throw () __attribute__ ((__warn_unused_result__));
+16535: extern char *__realpath_alias (const char *__restrict __name, char *__restrict __resolved) throw () __asm__ ("" "realpath")
+16535: 
+16535:                                                  __attribute__ ((__warn_unused_result__));
+16535: extern char *__realpath_chk_warn (const char *__restrict __name, char *__restrict __resolved, size_t __resolvedlen) throw () __asm__ ("" "__realpath_chk")
+16535: 
+16535: 
+16535:                                                 __attribute__ ((__warn_unused_result__))
+16535:      __attribute__((__warning__ ("second argument of realpath must be either NULL or at " "least PATH_MAX bytes long buffer")))
+16535:                                       ;
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char *
+16535: __attribute__ ((__leaf__)) realpath (const char *__restrict __name, char *__restrict __resolved) throw ()
+16535: {
+16535:   if (__builtin_object_size (__resolved, 2 > 1) != (size_t) -1)
+16535:     {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       return __realpath_chk (__name, __resolved, __builtin_object_size (__resolved, 2 > 1));
+16535:     }
+16535: 
+16535:   return __realpath_alias (__name, __resolved);
+16535: }
+16535: 
+16535: 
+16535: extern int __ptsname_r_chk (int __fd, char *__buf, size_t __buflen,
+16535:        size_t __nreal) throw () __attribute__ ((__nonnull__ (2)));
+16535: extern int __ptsname_r_alias (int __fd, char *__buf, size_t __buflen) throw () __asm__ ("" "ptsname_r")
+16535: 
+16535:      __attribute__ ((__nonnull__ (2)));
+16535: extern int __ptsname_r_chk_warn (int __fd, char *__buf, size_t __buflen, size_t __nreal) throw () __asm__ ("" "__ptsname_r_chk")
+16535: 
+16535: 
+16535:      __attribute__ ((__nonnull__ (2))) __attribute__((__warning__ ("ptsname_r called with buflen bigger than " "size of buf")))
+16535:                    ;
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+16535: __attribute__ ((__leaf__)) ptsname_r (int __fd, char *__buf, size_t __buflen) throw ()
+16535: {
+16535:   if (__builtin_object_size (__buf, 2 > 1) != (size_t) -1)
+16535:     {
+16535:       if (!__builtin_constant_p (__buflen))
+16535:  return __ptsname_r_chk (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1));
+16535:       if (__buflen > __builtin_object_size (__buf, 2 > 1))
+16535:  return __ptsname_r_chk_warn (__fd, __buf, __buflen, __builtin_object_size (__buf, 2 > 1));
+16535:     }
+16535:   return __ptsname_r_alias (__fd, __buf, __buflen);
+16535: }
+16535: 
+16535: 
+16535: extern int __wctomb_chk (char *__s, wchar_t __wchar, size_t __buflen)
+16535:   throw () __attribute__ ((__warn_unused_result__));
+16535: extern int __wctomb_alias (char *__s, wchar_t __wchar) throw () __asm__ ("" "wctomb")
+16535:               __attribute__ ((__warn_unused_result__));
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) int
+16535: __attribute__ ((__leaf__)) wctomb (char *__s, wchar_t __wchar) throw ()
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (__builtin_object_size (__s, 2 > 1) != (size_t) -1 && 16 > __builtin_object_size (__s, 2 > 1))
+16535:     return __wctomb_chk (__s, __wchar, __builtin_object_size (__s, 2 > 1));
+16535:   return __wctomb_alias (__s, __wchar);
+16535: }
+16535: 
+16535: 
+16535: extern size_t __mbstowcs_chk (wchar_t *__restrict __dst,
+16535:          const char *__restrict __src,
+16535:          size_t __len, size_t __dstlen) throw ();
+16535: extern size_t __mbstowcs_alias (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len) throw () __asm__ ("" "mbstowcs")
+16535: 
+16535: 
+16535:                                   ;
+16535: extern size_t __mbstowcs_chk_warn (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len, size_t __dstlen) throw () __asm__ ("" "__mbstowcs_chk")
+16535: 
+16535: 
+16535: 
+16535:      __attribute__((__warning__ ("mbstowcs called with dst buffer smaller than len " "* sizeof (wchar_t)")))
+16535:                         ;
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t
+16535: __attribute__ ((__leaf__)) mbstowcs (wchar_t *__restrict __dst, const char *__restrict __src, size_t __len) throw ()
+16535: 
+16535: {
+16535:   if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1)
+16535:     {
+16535:       if (!__builtin_constant_p (__len))
+16535:  return __mbstowcs_chk (__dst, __src, __len,
+16535:           __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t));
+16535: 
+16535:       if (__len > __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t))
+16535:  return __mbstowcs_chk_warn (__dst, __src, __len,
+16535:          __builtin_object_size (__dst, 2 > 1) / sizeof (wchar_t));
+16535:     }
+16535:   return __mbstowcs_alias (__dst, __src, __len);
+16535: }
+16535: 
+16535: 
+16535: extern size_t __wcstombs_chk (char *__restrict __dst,
+16535:          const wchar_t *__restrict __src,
+16535:          size_t __len, size_t __dstlen) throw ();
+16535: extern size_t __wcstombs_alias (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len) throw () __asm__ ("" "wcstombs")
+16535: 
+16535: 
+16535:                                   ;
+16535: extern size_t __wcstombs_chk_warn (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len, size_t __dstlen) throw () __asm__ ("" "__wcstombs_chk")
+16535: 
+16535: 
+16535: 
+16535:      __attribute__((__warning__ ("wcstombs called with dst buffer smaller than len")));
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) size_t
+16535: __attribute__ ((__leaf__)) wcstombs (char *__restrict __dst, const wchar_t *__restrict __src, size_t __len) throw ()
+16535: 
+16535: {
+16535:   if (__builtin_object_size (__dst, 2 > 1) != (size_t) -1)
+16535:     {
+16535:       if (!__builtin_constant_p (__len))
+16535:  return __wcstombs_chk (__dst, __src, __len, __builtin_object_size (__dst, 2 > 1));
+16535:       if (__len > __builtin_object_size (__dst, 2 > 1))
+16535:  return __wcstombs_chk_warn (__dst, __src, __len, __builtin_object_size (__dst, 2 > 1));
+16535:     }
+16535:   return __wcstombs_alias (__dst, __src, __len);
+16535: }
+16535: # 1015 "/usr/include/stdlib.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 76 "/usr/include/c++/8/cstdlib" 2 3
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/std_abs.h" 1 3
+16535: # 33 "/usr/include/c++/8/bits/std_abs.h" 3
+16535:        
+16535: # 34 "/usr/include/c++/8/bits/std_abs.h" 3
+16535: # 46 "/usr/include/c++/8/bits/std_abs.h" 3
+16535: extern "C++"
+16535: {
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   using ::abs;
+16535: 
+16535: 
+16535:   inline long
+16535:   abs(long __i) { return __builtin_labs(__i); }
+16535: 
+16535: 
+16535: 
+16535:   inline long long
+16535:   abs(long long __x) { return __builtin_llabs (__x); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   inline constexpr double
+16535:   abs(double __x)
+16535:   { return __builtin_fabs(__x); }
+16535: 
+16535:   inline constexpr float
+16535:   abs(float __x)
+16535:   { return __builtin_fabsf(__x); }
+16535: 
+16535:   inline constexpr long double
+16535:   abs(long double __x)
+16535:   { return __builtin_fabsl(__x); }
+16535: 
+16535: 
+16535: 
+16535:   inline constexpr __int128
+16535:   abs(__int128 __x) { return __x >= 0 ? __x : -__x; }
+16535: # 100 "/usr/include/c++/8/bits/std_abs.h" 3
+16535:   inline constexpr
+16535:   __float128
+16535:   abs(__float128 __x)
+16535:   { return __x < 0 ? -__x : __x; }
+16535: 
+16535: 
+16535: 
+16535: }
+16535: }
+16535: # 78 "/usr/include/c++/8/cstdlib" 2 3
+16535: # 121 "/usr/include/c++/8/cstdlib" 3
+16535: extern "C++"
+16535: {
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   using ::div_t;
+16535:   using ::ldiv_t;
+16535: 
+16535:   using ::abort;
+16535: 
+16535: 
+16535: 
+16535:   using ::atexit;
+16535: 
+16535: 
+16535:   using ::at_quick_exit;
+16535: 
+16535: 
+16535:   using ::atof;
+16535:   using ::atoi;
+16535:   using ::atol;
+16535:   using ::bsearch;
+16535:   using ::calloc;
+16535:   using ::div;
+16535:   using ::exit;
+16535:   using ::free;
+16535:   using ::getenv;
+16535:   using ::labs;
+16535:   using ::ldiv;
+16535:   using ::malloc;
+16535: 
+16535:   using ::mblen;
+16535:   using ::mbstowcs;
+16535:   using ::mbtowc;
+16535: 
+16535:   using ::qsort;
+16535: 
+16535: 
+16535:   using ::quick_exit;
+16535: 
+16535: 
+16535:   using ::rand;
+16535:   using ::realloc;
+16535:   using ::srand;
+16535:   using ::strtod;
+16535:   using ::strtol;
+16535:   using ::strtoul;
+16535:   using ::system;
+16535: 
+16535:   using ::wcstombs;
+16535:   using ::wctomb;
+16535: 
+16535: 
+16535: 
+16535:   inline ldiv_t
+16535:   div(long __i, long __j) { return ldiv(__i, __j); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 195 "/usr/include/c++/8/cstdlib" 3
+16535: namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535:   using ::lldiv_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   using ::_Exit;
+16535: 
+16535: 
+16535: 
+16535:   using ::llabs;
+16535: 
+16535:   inline lldiv_t
+16535:   div(long long __n, long long __d)
+16535:   { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; }
+16535: 
+16535:   using ::lldiv;
+16535: # 227 "/usr/include/c++/8/cstdlib" 3
+16535:   using ::atoll;
+16535:   using ::strtoll;
+16535:   using ::strtoull;
+16535: 
+16535:   using ::strtof;
+16535:   using ::strtold;
+16535: 
+16535: 
+16535: }
+16535: 
+16535: namespace std
+16535: {
+16535: 
+16535:   using ::__gnu_cxx::lldiv_t;
+16535: 
+16535:   using ::__gnu_cxx::_Exit;
+16535: 
+16535:   using ::__gnu_cxx::llabs;
+16535:   using ::__gnu_cxx::div;
+16535:   using ::__gnu_cxx::lldiv;
+16535: 
+16535:   using ::__gnu_cxx::atoll;
+16535:   using ::__gnu_cxx::strtof;
+16535:   using ::__gnu_cxx::strtoll;
+16535:   using ::__gnu_cxx::strtoull;
+16535:   using ::__gnu_cxx::strtold;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 60 "/usr/include/c++/8/bits/stl_algo.h" 2 3
+16535: # 1 "/usr/include/c++/8/bits/algorithmfwd.h" 1 3
+16535: # 33 "/usr/include/c++/8/bits/algorithmfwd.h" 3
+16535:        
+16535: # 34 "/usr/include/c++/8/bits/algorithmfwd.h" 3
+16535: # 42 "/usr/include/c++/8/bits/algorithmfwd.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 195 "/usr/include/c++/8/bits/algorithmfwd.h" 3
+16535:   template<typename _IIter, typename _Predicate>
+16535:     bool
+16535:     all_of(_IIter, _IIter, _Predicate);
+16535: 
+16535:   template<typename _IIter, typename _Predicate>
+16535:     bool
+16535:     any_of(_IIter, _IIter, _Predicate);
+16535: 
+16535: 
+16535:   template<typename _FIter, typename _Tp>
+16535:     bool
+16535:     binary_search(_FIter, _FIter, const _Tp&);
+16535: 
+16535:   template<typename _FIter, typename _Tp, typename _Compare>
+16535:     bool
+16535:     binary_search(_FIter, _FIter, const _Tp&, _Compare);
+16535: # 224 "/usr/include/c++/8/bits/algorithmfwd.h" 3
+16535:   template<typename _IIter, typename _OIter>
+16535:     _OIter
+16535:     copy(_IIter, _IIter, _OIter);
+16535: 
+16535:   template<typename _BIter1, typename _BIter2>
+16535:     _BIter2
+16535:     copy_backward(_BIter1, _BIter1, _BIter2);
+16535: 
+16535: 
+16535:   template<typename _IIter, typename _OIter, typename _Predicate>
+16535:     _OIter
+16535:     copy_if(_IIter, _IIter, _OIter, _Predicate);
+16535: 
+16535:   template<typename _IIter, typename _Size, typename _OIter>
+16535:     _OIter
+16535:     copy_n(_IIter, _Size, _OIter);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _FIter, typename _Tp>
+16535:     pair<_FIter, _FIter>
+16535:     equal_range(_FIter, _FIter, const _Tp&);
+16535: 
+16535:   template<typename _FIter, typename _Tp, typename _Compare>
+16535:     pair<_FIter, _FIter>
+16535:     equal_range(_FIter, _FIter, const _Tp&, _Compare);
+16535: 
+16535:   template<typename _FIter, typename _Tp>
+16535:     void
+16535:     fill(_FIter, _FIter, const _Tp&);
+16535: 
+16535:   template<typename _OIter, typename _Size, typename _Tp>
+16535:     _OIter
+16535:     fill_n(_OIter, _Size, const _Tp&);
+16535: 
+16535: 
+16535: 
+16535:   template<typename _FIter1, typename _FIter2>
+16535:     _FIter1
+16535:     find_end(_FIter1, _FIter1, _FIter2, _FIter2);
+16535: 
+16535:   template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
+16535:     _FIter1
+16535:     find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _IIter, typename _Predicate>
+16535:     _IIter
+16535:     find_if_not(_IIter, _IIter, _Predicate);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _IIter1, typename _IIter2>
+16535:     bool
+16535:     includes(_IIter1, _IIter1, _IIter2, _IIter2);
+16535: 
+16535:   template<typename _IIter1, typename _IIter2, typename _Compare>
+16535:     bool
+16535:     includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
+16535: 
+16535:   template<typename _BIter>
+16535:     void
+16535:     inplace_merge(_BIter, _BIter, _BIter);
+16535: 
+16535:   template<typename _BIter, typename _Compare>
+16535:     void
+16535:     inplace_merge(_BIter, _BIter, _BIter, _Compare);
+16535: 
+16535: 
+16535:   template<typename _RAIter>
+16535:     bool
+16535:     is_heap(_RAIter, _RAIter);
+16535: 
+16535:   template<typename _RAIter, typename _Compare>
+16535:     bool
+16535:     is_heap(_RAIter, _RAIter, _Compare);
+16535: 
+16535:   template<typename _RAIter>
+16535:     _RAIter
+16535:     is_heap_until(_RAIter, _RAIter);
+16535: 
+16535:   template<typename _RAIter, typename _Compare>
+16535:     _RAIter
+16535:     is_heap_until(_RAIter, _RAIter, _Compare);
+16535: 
+16535:   template<typename _IIter, typename _Predicate>
+16535:     bool
+16535:     is_partitioned(_IIter, _IIter, _Predicate);
+16535: 
+16535:   template<typename _FIter1, typename _FIter2>
+16535:     bool
+16535:     is_permutation(_FIter1, _FIter1, _FIter2);
+16535: 
+16535:   template<typename _FIter1, typename _FIter2,
+16535:     typename _BinaryPredicate>
+16535:     bool
+16535:     is_permutation(_FIter1, _FIter1, _FIter2, _BinaryPredicate);
+16535: 
+16535:   template<typename _FIter>
+16535:     bool
+16535:     is_sorted(_FIter, _FIter);
+16535: 
+16535:   template<typename _FIter, typename _Compare>
+16535:     bool
+16535:     is_sorted(_FIter, _FIter, _Compare);
+16535: 
+16535:   template<typename _FIter>
+16535:     _FIter
+16535:     is_sorted_until(_FIter, _FIter);
+16535: 
+16535:   template<typename _FIter, typename _Compare>
+16535:     _FIter
+16535:     is_sorted_until(_FIter, _FIter, _Compare);
+16535: 
+16535: 
+16535:   template<typename _FIter1, typename _FIter2>
+16535:     void
+16535:     iter_swap(_FIter1, _FIter2);
+16535: 
+16535:   template<typename _FIter, typename _Tp>
+16535:     _FIter
+16535:     lower_bound(_FIter, _FIter, const _Tp&);
+16535: 
+16535:   template<typename _FIter, typename _Tp, typename _Compare>
+16535:     _FIter
+16535:     lower_bound(_FIter, _FIter, const _Tp&, _Compare);
+16535: 
+16535:   template<typename _RAIter>
+16535:     void
+16535:     make_heap(_RAIter, _RAIter);
+16535: 
+16535:   template<typename _RAIter, typename _Compare>
+16535:     void
+16535:     make_heap(_RAIter, _RAIter, _Compare);
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr
+16535:     const _Tp&
+16535:     max(const _Tp&, const _Tp&);
+16535: 
+16535:   template<typename _Tp, typename _Compare>
+16535:     constexpr
+16535:     const _Tp&
+16535:     max(const _Tp&, const _Tp&, _Compare);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr
+16535:     const _Tp&
+16535:     min(const _Tp&, const _Tp&);
+16535: 
+16535:   template<typename _Tp, typename _Compare>
+16535:     constexpr
+16535:     const _Tp&
+16535:     min(const _Tp&, const _Tp&, _Compare);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr
+16535:     pair<const _Tp&, const _Tp&>
+16535:     minmax(const _Tp&, const _Tp&);
+16535: 
+16535:   template<typename _Tp, typename _Compare>
+16535:     constexpr
+16535:     pair<const _Tp&, const _Tp&>
+16535:     minmax(const _Tp&, const _Tp&, _Compare);
+16535: 
+16535:   template<typename _FIter>
+16535:     constexpr
+16535:     pair<_FIter, _FIter>
+16535:     minmax_element(_FIter, _FIter);
+16535: 
+16535:   template<typename _FIter, typename _Compare>
+16535:     constexpr
+16535:     pair<_FIter, _FIter>
+16535:     minmax_element(_FIter, _FIter, _Compare);
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr
+16535:     _Tp
+16535:     min(initializer_list<_Tp>);
+16535: 
+16535:   template<typename _Tp, typename _Compare>
+16535:     constexpr
+16535:     _Tp
+16535:     min(initializer_list<_Tp>, _Compare);
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr
+16535:     _Tp
+16535:     max(initializer_list<_Tp>);
+16535: 
+16535:   template<typename _Tp, typename _Compare>
+16535:     constexpr
+16535:     _Tp
+16535:     max(initializer_list<_Tp>, _Compare);
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr
+16535:     pair<_Tp, _Tp>
+16535:     minmax(initializer_list<_Tp>);
+16535: 
+16535:   template<typename _Tp, typename _Compare>
+16535:     constexpr
+16535:     pair<_Tp, _Tp>
+16535:     minmax(initializer_list<_Tp>, _Compare);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _BIter>
+16535:     bool
+16535:     next_permutation(_BIter, _BIter);
+16535: 
+16535:   template<typename _BIter, typename _Compare>
+16535:     bool
+16535:     next_permutation(_BIter, _BIter, _Compare);
+16535: 
+16535: 
+16535:   template<typename _IIter, typename _Predicate>
+16535:     bool
+16535:     none_of(_IIter, _IIter, _Predicate);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _IIter, typename _RAIter>
+16535:     _RAIter
+16535:     partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter);
+16535: 
+16535:   template<typename _IIter, typename _RAIter, typename _Compare>
+16535:     _RAIter
+16535:     partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _IIter, typename _OIter1,
+16535:     typename _OIter2, typename _Predicate>
+16535:     pair<_OIter1, _OIter2>
+16535:     partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate);
+16535: 
+16535:   template<typename _FIter, typename _Predicate>
+16535:     _FIter
+16535:     partition_point(_FIter, _FIter, _Predicate);
+16535: 
+16535: 
+16535:   template<typename _RAIter>
+16535:     void
+16535:     pop_heap(_RAIter, _RAIter);
+16535: 
+16535:   template<typename _RAIter, typename _Compare>
+16535:     void
+16535:     pop_heap(_RAIter, _RAIter, _Compare);
+16535: 
+16535:   template<typename _BIter>
+16535:     bool
+16535:     prev_permutation(_BIter, _BIter);
+16535: 
+16535:   template<typename _BIter, typename _Compare>
+16535:     bool
+16535:     prev_permutation(_BIter, _BIter, _Compare);
+16535: 
+16535:   template<typename _RAIter>
+16535:     void
+16535:     push_heap(_RAIter, _RAIter);
+16535: 
+16535:   template<typename _RAIter, typename _Compare>
+16535:     void
+16535:     push_heap(_RAIter, _RAIter, _Compare);
+16535: 
+16535: 
+16535: 
+16535:   template<typename _FIter, typename _Tp>
+16535:     _FIter
+16535:     remove(_FIter, _FIter, const _Tp&);
+16535: 
+16535:   template<typename _FIter, typename _Predicate>
+16535:     _FIter
+16535:     remove_if(_FIter, _FIter, _Predicate);
+16535: 
+16535:   template<typename _IIter, typename _OIter, typename _Tp>
+16535:     _OIter
+16535:     remove_copy(_IIter, _IIter, _OIter, const _Tp&);
+16535: 
+16535:   template<typename _IIter, typename _OIter, typename _Predicate>
+16535:     _OIter
+16535:     remove_copy_if(_IIter, _IIter, _OIter, _Predicate);
+16535: 
+16535: 
+16535: 
+16535:   template<typename _IIter, typename _OIter, typename _Tp>
+16535:     _OIter
+16535:     replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&);
+16535: 
+16535:   template<typename _Iter, typename _OIter, typename _Predicate, typename _Tp>
+16535:     _OIter
+16535:     replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&);
+16535: 
+16535: 
+16535: 
+16535:   template<typename _BIter>
+16535:     void
+16535:     reverse(_BIter, _BIter);
+16535: 
+16535:   template<typename _BIter, typename _OIter>
+16535:     _OIter
+16535:     reverse_copy(_BIter, _BIter, _OIter);
+16535: 
+16535:   inline namespace _V2
+16535:   {
+16535:     template<typename _FIter>
+16535:       _FIter
+16535:       rotate(_FIter, _FIter, _FIter);
+16535:   }
+16535: 
+16535:   template<typename _FIter, typename _OIter>
+16535:     _OIter
+16535:     rotate_copy(_FIter, _FIter, _FIter, _OIter);
+16535: # 565 "/usr/include/c++/8/bits/algorithmfwd.h" 3
+16535:   template<typename _RAIter, typename _UGenerator>
+16535:     void
+16535:     shuffle(_RAIter, _RAIter, _UGenerator&&);
+16535: 
+16535: 
+16535:   template<typename _RAIter>
+16535:     void
+16535:     sort_heap(_RAIter, _RAIter);
+16535: 
+16535:   template<typename _RAIter, typename _Compare>
+16535:     void
+16535:     sort_heap(_RAIter, _RAIter, _Compare);
+16535: 
+16535:   template<typename _BIter, typename _Predicate>
+16535:     _BIter
+16535:     stable_partition(_BIter, _BIter, _Predicate);
+16535: # 594 "/usr/include/c++/8/bits/algorithmfwd.h" 3
+16535:   template<typename _FIter1, typename _FIter2>
+16535:     _FIter2
+16535:     swap_ranges(_FIter1, _FIter1, _FIter2);
+16535: 
+16535: 
+16535: 
+16535:   template<typename _FIter>
+16535:     _FIter
+16535:     unique(_FIter, _FIter);
+16535: 
+16535:   template<typename _FIter, typename _BinaryPredicate>
+16535:     _FIter
+16535:     unique(_FIter, _FIter, _BinaryPredicate);
+16535: 
+16535: 
+16535: 
+16535:   template<typename _FIter, typename _Tp>
+16535:     _FIter
+16535:     upper_bound(_FIter, _FIter, const _Tp&);
+16535: 
+16535:   template<typename _FIter, typename _Tp, typename _Compare>
+16535:     _FIter
+16535:     upper_bound(_FIter, _FIter, const _Tp&, _Compare);
+16535: 
+16535: 
+16535: 
+16535:   template<typename _FIter>
+16535:     _FIter
+16535:     adjacent_find(_FIter, _FIter);
+16535: 
+16535:   template<typename _FIter, typename _BinaryPredicate>
+16535:     _FIter
+16535:     adjacent_find(_FIter, _FIter, _BinaryPredicate);
+16535: 
+16535:   template<typename _IIter, typename _Tp>
+16535:     typename iterator_traits<_IIter>::difference_type
+16535:     count(_IIter, _IIter, const _Tp&);
+16535: 
+16535:   template<typename _IIter, typename _Predicate>
+16535:     typename iterator_traits<_IIter>::difference_type
+16535:     count_if(_IIter, _IIter, _Predicate);
+16535: 
+16535:   template<typename _IIter1, typename _IIter2>
+16535:     bool
+16535:     equal(_IIter1, _IIter1, _IIter2);
+16535: 
+16535:   template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
+16535:     bool
+16535:     equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
+16535: 
+16535:   template<typename _IIter, typename _Tp>
+16535:     _IIter
+16535:     find(_IIter, _IIter, const _Tp&);
+16535: 
+16535:   template<typename _FIter1, typename _FIter2>
+16535:     _FIter1
+16535:     find_first_of(_FIter1, _FIter1, _FIter2, _FIter2);
+16535: 
+16535:   template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
+16535:     _FIter1
+16535:     find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
+16535: 
+16535:   template<typename _IIter, typename _Predicate>
+16535:     _IIter
+16535:     find_if(_IIter, _IIter, _Predicate);
+16535: 
+16535:   template<typename _IIter, typename _Funct>
+16535:     _Funct
+16535:     for_each(_IIter, _IIter, _Funct);
+16535: 
+16535:   template<typename _FIter, typename _Generator>
+16535:     void
+16535:     generate(_FIter, _FIter, _Generator);
+16535: 
+16535:   template<typename _OIter, typename _Size, typename _Generator>
+16535:     _OIter
+16535:     generate_n(_OIter, _Size, _Generator);
+16535: 
+16535:   template<typename _IIter1, typename _IIter2>
+16535:     bool
+16535:     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
+16535: 
+16535:   template<typename _IIter1, typename _IIter2, typename _Compare>
+16535:     bool
+16535:     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
+16535: 
+16535:   template<typename _FIter>
+16535:     constexpr
+16535:     _FIter
+16535:     max_element(_FIter, _FIter);
+16535: 
+16535:   template<typename _FIter, typename _Compare>
+16535:     constexpr
+16535:     _FIter
+16535:     max_element(_FIter, _FIter, _Compare);
+16535: 
+16535:   template<typename _IIter1, typename _IIter2, typename _OIter>
+16535:     _OIter
+16535:     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
+16535: 
+16535:   template<typename _IIter1, typename _IIter2, typename _OIter,
+16535:     typename _Compare>
+16535:     _OIter
+16535:     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
+16535: 
+16535:   template<typename _FIter>
+16535:     constexpr
+16535:     _FIter
+16535:     min_element(_FIter, _FIter);
+16535: 
+16535:   template<typename _FIter, typename _Compare>
+16535:     constexpr
+16535:     _FIter
+16535:     min_element(_FIter, _FIter, _Compare);
+16535: 
+16535:   template<typename _IIter1, typename _IIter2>
+16535:     pair<_IIter1, _IIter2>
+16535:     mismatch(_IIter1, _IIter1, _IIter2);
+16535: 
+16535:   template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
+16535:     pair<_IIter1, _IIter2>
+16535:     mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
+16535: 
+16535:   template<typename _RAIter>
+16535:     void
+16535:     nth_element(_RAIter, _RAIter, _RAIter);
+16535: 
+16535:   template<typename _RAIter, typename _Compare>
+16535:     void
+16535:     nth_element(_RAIter, _RAIter, _RAIter, _Compare);
+16535: 
+16535:   template<typename _RAIter>
+16535:     void
+16535:     partial_sort(_RAIter, _RAIter, _RAIter);
+16535: 
+16535:   template<typename _RAIter, typename _Compare>
+16535:     void
+16535:     partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
+16535: 
+16535:   template<typename _BIter, typename _Predicate>
+16535:     _BIter
+16535:     partition(_BIter, _BIter, _Predicate);
+16535: 
+16535:   template<typename _RAIter>
+16535:     void
+16535:     random_shuffle(_RAIter, _RAIter);
+16535: 
+16535:   template<typename _RAIter, typename _Generator>
+16535:     void
+16535:     random_shuffle(_RAIter, _RAIter,
+16535: 
+16535:      _Generator&&);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _FIter, typename _Tp>
+16535:     void
+16535:     replace(_FIter, _FIter, const _Tp&, const _Tp&);
+16535: 
+16535:   template<typename _FIter, typename _Predicate, typename _Tp>
+16535:     void
+16535:     replace_if(_FIter, _FIter, _Predicate, const _Tp&);
+16535: 
+16535:   template<typename _FIter1, typename _FIter2>
+16535:     _FIter1
+16535:     search(_FIter1, _FIter1, _FIter2, _FIter2);
+16535: 
+16535:   template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
+16535:     _FIter1
+16535:     search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
+16535: 
+16535:   template<typename _FIter, typename _Size, typename _Tp>
+16535:     _FIter
+16535:     search_n(_FIter, _FIter, _Size, const _Tp&);
+16535: 
+16535:   template<typename _FIter, typename _Size, typename _Tp,
+16535:     typename _BinaryPredicate>
+16535:     _FIter
+16535:     search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate);
+16535: 
+16535:   template<typename _IIter1, typename _IIter2, typename _OIter>
+16535:     _OIter
+16535:     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
+16535: 
+16535:   template<typename _IIter1, typename _IIter2, typename _OIter,
+16535:     typename _Compare>
+16535:     _OIter
+16535:     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
+16535: 
+16535:   template<typename _IIter1, typename _IIter2, typename _OIter>
+16535:     _OIter
+16535:     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
+16535: 
+16535:   template<typename _IIter1, typename _IIter2, typename _OIter,
+16535:     typename _Compare>
+16535:     _OIter
+16535:     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
+16535: 
+16535:   template<typename _IIter1, typename _IIter2, typename _OIter>
+16535:     _OIter
+16535:     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
+16535: 
+16535:   template<typename _IIter1, typename _IIter2, typename _OIter,
+16535:     typename _Compare>
+16535:     _OIter
+16535:     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2,
+16535:         _OIter, _Compare);
+16535: 
+16535:   template<typename _IIter1, typename _IIter2, typename _OIter>
+16535:     _OIter
+16535:     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
+16535: 
+16535:   template<typename _IIter1, typename _IIter2, typename _OIter,
+16535:     typename _Compare>
+16535:     _OIter
+16535:     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
+16535: 
+16535:   template<typename _RAIter>
+16535:     void
+16535:     sort(_RAIter, _RAIter);
+16535: 
+16535:   template<typename _RAIter, typename _Compare>
+16535:     void
+16535:     sort(_RAIter, _RAIter, _Compare);
+16535: 
+16535:   template<typename _RAIter>
+16535:     void
+16535:     stable_sort(_RAIter, _RAIter);
+16535: 
+16535:   template<typename _RAIter, typename _Compare>
+16535:     void
+16535:     stable_sort(_RAIter, _RAIter, _Compare);
+16535: 
+16535:   template<typename _IIter, typename _OIter, typename _UnaryOperation>
+16535:     _OIter
+16535:     transform(_IIter, _IIter, _OIter, _UnaryOperation);
+16535: 
+16535:   template<typename _IIter1, typename _IIter2, typename _OIter,
+16535:     typename _BinaryOperation>
+16535:     _OIter
+16535:     transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation);
+16535: 
+16535:   template<typename _IIter, typename _OIter>
+16535:     _OIter
+16535:     unique_copy(_IIter, _IIter, _OIter);
+16535: 
+16535:   template<typename _IIter, typename _OIter, typename _BinaryPredicate>
+16535:     _OIter
+16535:     unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 61 "/usr/include/c++/8/bits/stl_algo.h" 2 3
+16535: # 1 "/usr/include/c++/8/bits/stl_heap.h" 1 3
+16535: # 62 "/usr/include/c++/8/bits/stl_heap.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Distance,
+16535:     typename _Compare>
+16535:     _Distance
+16535:     __is_heap_until(_RandomAccessIterator __first, _Distance __n,
+16535:       _Compare& __comp)
+16535:     {
+16535:       _Distance __parent = 0;
+16535:       for (_Distance __child = 1; __child < __n; ++__child)
+16535:  {
+16535:    if (__comp(__first + __parent, __first + __child))
+16535:      return __child;
+16535:    if ((__child & 1) == 0)
+16535:      ++__parent;
+16535:  }
+16535:       return __n;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Distance>
+16535:     inline bool
+16535:     __is_heap(_RandomAccessIterator __first, _Distance __n)
+16535:     {
+16535:       __gnu_cxx::__ops::_Iter_less_iter __comp;
+16535:       return std::__is_heap_until(__first, __n, __comp) == __n;
+16535:     }
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Compare,
+16535:     typename _Distance>
+16535:     inline bool
+16535:     __is_heap(_RandomAccessIterator __first, _Compare __comp, _Distance __n)
+16535:     {
+16535:       typedef __decltype(__comp) _Cmp;
+16535:       __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp));
+16535:       return std::__is_heap_until(__first, __n, __cmp) == __n;
+16535:     }
+16535: 
+16535:   template<typename _RandomAccessIterator>
+16535:     inline bool
+16535:     __is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
+16535:     { return std::__is_heap(__first, std::distance(__first, __last)); }
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     inline bool
+16535:     __is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
+16535:        _Compare __comp)
+16535:     {
+16535:       return std::__is_heap(__first, std::move(__comp),
+16535:        std::distance(__first, __last));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Distance, typename _Tp,
+16535:     typename _Compare>
+16535:     void
+16535:     __push_heap(_RandomAccessIterator __first,
+16535:   _Distance __holeIndex, _Distance __topIndex, _Tp __value,
+16535:   _Compare& __comp)
+16535:     {
+16535:       _Distance __parent = (__holeIndex - 1) / 2;
+16535:       while (__holeIndex > __topIndex && __comp(__first + __parent, __value))
+16535:  {
+16535:    *(__first + __holeIndex) = std::move(*(__first + __parent));
+16535:    __holeIndex = __parent;
+16535:    __parent = (__holeIndex - 1) / 2;
+16535:  }
+16535:       *(__first + __holeIndex) = std::move(__value);
+16535:     }
+16535: # 152 "/usr/include/c++/8/bits/stl_heap.h" 3
+16535:   template<typename _RandomAccessIterator>
+16535:     inline void
+16535:     push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
+16535:     {
+16535:       typedef typename iterator_traits<_RandomAccessIterator>::value_type
+16535:    _ValueType;
+16535:       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+16535:    _DistanceType;
+16535: 
+16535: 
+16535:      
+16535: 
+16535:      
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       __gnu_cxx::__ops::_Iter_less_val __comp;
+16535:       _ValueType __value = std::move(*(__last - 1));
+16535:       std::__push_heap(__first, _DistanceType((__last - __first) - 1),
+16535:          _DistanceType(0), std::move(__value), __comp);
+16535:     }
+16535: # 187 "/usr/include/c++/8/bits/stl_heap.h" 3
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     inline void
+16535:     push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
+16535:        _Compare __comp)
+16535:     {
+16535:       typedef typename iterator_traits<_RandomAccessIterator>::value_type
+16535:    _ValueType;
+16535:       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+16535:    _DistanceType;
+16535: 
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       __decltype(__gnu_cxx::__ops::__iter_comp_val(std::move(__comp)))
+16535:  __cmp(std::move(__comp));
+16535:       _ValueType __value = std::move(*(__last - 1));
+16535:       std::__push_heap(__first, _DistanceType((__last - __first) - 1),
+16535:          _DistanceType(0), std::move(__value), __cmp);
+16535:     }
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Distance,
+16535:     typename _Tp, typename _Compare>
+16535:     void
+16535:     __adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
+16535:     _Distance __len, _Tp __value, _Compare __comp)
+16535:     {
+16535:       const _Distance __topIndex = __holeIndex;
+16535:       _Distance __secondChild = __holeIndex;
+16535:       while (__secondChild < (__len - 1) / 2)
+16535:  {
+16535:    __secondChild = 2 * (__secondChild + 1);
+16535:    if (__comp(__first + __secondChild,
+16535:        __first + (__secondChild - 1)))
+16535:      __secondChild--;
+16535:    *(__first + __holeIndex) = std::move(*(__first + __secondChild));
+16535:    __holeIndex = __secondChild;
+16535:  }
+16535:       if ((__len & 1) == 0 && __secondChild == (__len - 2) / 2)
+16535:  {
+16535:    __secondChild = 2 * (__secondChild + 1);
+16535:    *(__first + __holeIndex) = std::move(*(__first + (__secondChild - 1)))
+16535:                                   ;
+16535:    __holeIndex = __secondChild - 1;
+16535:  }
+16535:       __decltype(__gnu_cxx::__ops::__iter_comp_val(std::move(__comp)))
+16535:  __cmp(std::move(__comp));
+16535:       std::__push_heap(__first, __holeIndex, __topIndex,
+16535:          std::move(__value), __cmp);
+16535:     }
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     inline void
+16535:     __pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
+16535:         _RandomAccessIterator __result, _Compare& __comp)
+16535:     {
+16535:       typedef typename iterator_traits<_RandomAccessIterator>::value_type
+16535:  _ValueType;
+16535:       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+16535:  _DistanceType;
+16535: 
+16535:       _ValueType __value = std::move(*__result);
+16535:       *__result = std::move(*__first);
+16535:       std::__adjust_heap(__first, _DistanceType(0),
+16535:     _DistanceType(__last - __first),
+16535:     std::move(__value), __comp);
+16535:     }
+16535: # 269 "/usr/include/c++/8/bits/stl_heap.h" 3
+16535:   template<typename _RandomAccessIterator>
+16535:     inline void
+16535:     pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       if (__last - __first > 1)
+16535:  {
+16535:    --__last;
+16535:    __gnu_cxx::__ops::_Iter_less_iter __comp;
+16535:    std::__pop_heap(__first, __last, __last, __comp);
+16535:  }
+16535:     }
+16535: # 302 "/usr/include/c++/8/bits/stl_heap.h" 3
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     inline void
+16535:     pop_heap(_RandomAccessIterator __first,
+16535:       _RandomAccessIterator __last, _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       if (__last - __first > 1)
+16535:  {
+16535:    typedef __decltype(__comp) _Cmp;
+16535:    __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp));
+16535:    --__last;
+16535:    std::__pop_heap(__first, __last, __last, __cmp);
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     void
+16535:     __make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
+16535:   _Compare& __comp)
+16535:     {
+16535:       typedef typename iterator_traits<_RandomAccessIterator>::value_type
+16535:    _ValueType;
+16535:       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+16535:    _DistanceType;
+16535: 
+16535:       if (__last - __first < 2)
+16535:  return;
+16535: 
+16535:       const _DistanceType __len = __last - __first;
+16535:       _DistanceType __parent = (__len - 2) / 2;
+16535:       while (true)
+16535:  {
+16535:    _ValueType __value = std::move(*(__first + __parent));
+16535:    std::__adjust_heap(__first, __parent, __len, std::move(__value),
+16535:         __comp);
+16535:    if (__parent == 0)
+16535:      return;
+16535:    __parent--;
+16535:  }
+16535:     }
+16535: # 358 "/usr/include/c++/8/bits/stl_heap.h" 3
+16535:   template<typename _RandomAccessIterator>
+16535:     inline void
+16535:     make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       __gnu_cxx::__ops::_Iter_less_iter __comp;
+16535:       std::__make_heap(__first, __last, __comp);
+16535:     }
+16535: # 384 "/usr/include/c++/8/bits/stl_heap.h" 3
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     inline void
+16535:     make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
+16535:        _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       typedef __decltype(__comp) _Cmp;
+16535:       __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp));
+16535:       std::__make_heap(__first, __last, __cmp);
+16535:     }
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     void
+16535:     __sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
+16535:   _Compare& __comp)
+16535:     {
+16535:       while (__last - __first > 1)
+16535:  {
+16535:    --__last;
+16535:    std::__pop_heap(__first, __last, __last, __comp);
+16535:  }
+16535:     }
+16535: # 420 "/usr/include/c++/8/bits/stl_heap.h" 3
+16535:   template<typename _RandomAccessIterator>
+16535:     inline void
+16535:     sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       __gnu_cxx::__ops::_Iter_less_iter __comp;
+16535:       std::__sort_heap(__first, __last, __comp);
+16535:     }
+16535: # 447 "/usr/include/c++/8/bits/stl_heap.h" 3
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     inline void
+16535:     sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
+16535:        _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       typedef __decltype(__comp) _Cmp;
+16535:       __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp));
+16535:       std::__sort_heap(__first, __last, __cmp);
+16535:     }
+16535: # 475 "/usr/include/c++/8/bits/stl_heap.h" 3
+16535:   template<typename _RandomAccessIterator>
+16535:     inline _RandomAccessIterator
+16535:     is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       __gnu_cxx::__ops::_Iter_less_iter __comp;
+16535:       return __first +
+16535:  std::__is_heap_until(__first, std::distance(__first, __last), __comp);
+16535:     }
+16535: # 503 "/usr/include/c++/8/bits/stl_heap.h" 3
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     inline _RandomAccessIterator
+16535:     is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last,
+16535:     _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       typedef __decltype(__comp) _Cmp;
+16535:       __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp));
+16535:       return __first
+16535:  + std::__is_heap_until(__first, std::distance(__first, __last), __cmp);
+16535:     }
+16535: # 527 "/usr/include/c++/8/bits/stl_heap.h" 3
+16535:   template<typename _RandomAccessIterator>
+16535:     inline bool
+16535:     is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
+16535:     { return std::is_heap_until(__first, __last) == __last; }
+16535: # 540 "/usr/include/c++/8/bits/stl_heap.h" 3
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     inline bool
+16535:     is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
+16535:      _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       const auto __dist = std::distance(__first, __last);
+16535:       typedef __decltype(__comp) _Cmp;
+16535:       __gnu_cxx::__ops::_Iter_comp_iter<_Cmp> __cmp(std::move(__comp));
+16535:       return std::__is_heap_until(__first, __dist, __cmp) == __dist;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 62 "/usr/include/c++/8/bits/stl_algo.h" 2 3
+16535: # 1 "/usr/include/c++/8/bits/stl_tempbuf.h" 1 3
+16535: # 60 "/usr/include/c++/8/bits/stl_tempbuf.h" 3
+16535: # 1 "/usr/include/c++/8/bits/stl_construct.h" 1 3
+16535: # 59 "/usr/include/c++/8/bits/stl_construct.h" 3
+16535: # 1 "/usr/include/c++/8/new" 1 3
+16535: # 37 "/usr/include/c++/8/new" 3
+16535:        
+16535: # 38 "/usr/include/c++/8/new" 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/exception" 1 3
+16535: # 33 "/usr/include/c++/8/exception" 3
+16535:        
+16535: # 34 "/usr/include/c++/8/exception" 3
+16535: 
+16535: #pragma GCC visibility push(default)
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/exception.h" 1 3
+16535: # 34 "/usr/include/c++/8/bits/exception.h" 3
+16535:        
+16535: # 35 "/usr/include/c++/8/bits/exception.h" 3
+16535: 
+16535: #pragma GCC visibility push(default)
+16535: 
+16535: 
+16535: 
+16535: extern "C++" {
+16535: 
+16535: namespace std
+16535: {
+16535: # 60 "/usr/include/c++/8/bits/exception.h" 3
+16535:   class exception
+16535:   {
+16535:   public:
+16535:     exception() noexcept { }
+16535:     virtual ~exception() noexcept;
+16535: 
+16535: 
+16535: 
+16535:     virtual const char*
+16535:     what() const noexcept;
+16535:   };
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: #pragma GCC visibility pop
+16535: # 39 "/usr/include/c++/8/exception" 2 3
+16535: 
+16535: extern "C++" {
+16535: 
+16535: namespace std
+16535: {
+16535: 
+16535: 
+16535:   class bad_exception : public exception
+16535:   {
+16535:   public:
+16535:     bad_exception() noexcept { }
+16535: 
+16535: 
+16535: 
+16535:     virtual ~bad_exception() noexcept;
+16535: 
+16535: 
+16535:     virtual const char*
+16535:     what() const noexcept;
+16535:   };
+16535: 
+16535: 
+16535:   typedef void (*terminate_handler) ();
+16535: 
+16535: 
+16535:   typedef void (*unexpected_handler) ();
+16535: 
+16535: 
+16535:   terminate_handler set_terminate(terminate_handler) noexcept;
+16535: 
+16535: 
+16535: 
+16535:   terminate_handler get_terminate() noexcept;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void terminate() noexcept __attribute__ ((__noreturn__));
+16535: 
+16535: 
+16535:   unexpected_handler set_unexpected(unexpected_handler) noexcept;
+16535: 
+16535: 
+16535: 
+16535:   unexpected_handler get_unexpected() noexcept;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void unexpected() __attribute__ ((__noreturn__));
+16535: # 101 "/usr/include/c++/8/exception" 3
+16535:  
+16535:   bool uncaught_exception() noexcept __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   int uncaught_exceptions() noexcept __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: namespace __gnu_cxx
+16535: {
+16535: 
+16535: # 133 "/usr/include/c++/8/exception" 3
+16535:   void __verbose_terminate_handler();
+16535: 
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: #pragma GCC visibility pop
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/exception_ptr.h" 1 3
+16535: # 34 "/usr/include/c++/8/bits/exception_ptr.h" 3
+16535: #pragma GCC visibility push(default)
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/cxxabi_init_exception.h" 1 3
+16535: # 34 "/usr/include/c++/8/bits/cxxabi_init_exception.h" 3
+16535:        
+16535: # 35 "/usr/include/c++/8/bits/cxxabi_init_exception.h" 3
+16535: 
+16535: #pragma GCC visibility push(default)
+16535: 
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
+16535: # 149 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 3 4
+16535: typedef long int ptrdiff_t;
+16535: # 426 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 3 4
+16535: typedef struct {
+16535:   long long __max_align_ll __attribute__((__aligned__(__alignof__(long long))));
+16535:   long double __max_align_ld __attribute__((__aligned__(__alignof__(long double))));
+16535: # 437 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 3 4
+16535: } max_align_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef decltype(nullptr) nullptr_t;
+16535: # 39 "/usr/include/c++/8/bits/cxxabi_init_exception.h" 2 3
+16535: # 50 "/usr/include/c++/8/bits/cxxabi_init_exception.h" 3
+16535: namespace std
+16535: {
+16535:   class type_info;
+16535: }
+16535: 
+16535: namespace __cxxabiv1
+16535: {
+16535:   struct __cxa_refcounted_exception;
+16535: 
+16535:   extern "C"
+16535:     {
+16535: 
+16535:       void*
+16535:       __cxa_allocate_exception(size_t) noexcept;
+16535: 
+16535:       void
+16535:       __cxa_free_exception(void*) noexcept;
+16535: 
+16535: 
+16535:       __cxa_refcounted_exception*
+16535:       __cxa_init_primary_exception(void *object, std::type_info *tinfo,
+16535:                 void ( *dest) (void *)) noexcept;
+16535: 
+16535:     }
+16535: }
+16535: 
+16535: 
+16535: 
+16535: #pragma GCC visibility pop
+16535: # 39 "/usr/include/c++/8/bits/exception_ptr.h" 2 3
+16535: # 1 "/usr/include/c++/8/typeinfo" 1 3
+16535: # 32 "/usr/include/c++/8/typeinfo" 3
+16535:        
+16535: # 33 "/usr/include/c++/8/typeinfo" 3
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/hash_bytes.h" 1 3
+16535: # 33 "/usr/include/c++/8/bits/hash_bytes.h" 3
+16535:        
+16535: # 34 "/usr/include/c++/8/bits/hash_bytes.h" 3
+16535: 
+16535: 
+16535: 
+16535: namespace std
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   size_t
+16535:   _Hash_bytes(const void* __ptr, size_t __len, size_t __seed);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   size_t
+16535:   _Fnv_hash_bytes(const void* __ptr, size_t __len, size_t __seed);
+16535: 
+16535: 
+16535: }
+16535: # 37 "/usr/include/c++/8/typeinfo" 2 3
+16535: 
+16535: 
+16535: #pragma GCC visibility push(default)
+16535: 
+16535: extern "C++" {
+16535: 
+16535: namespace __cxxabiv1
+16535: {
+16535:   class __class_type_info;
+16535: }
+16535: # 80 "/usr/include/c++/8/typeinfo" 3
+16535: namespace std
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   class type_info
+16535:   {
+16535:   public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     virtual ~type_info();
+16535: 
+16535: 
+16535: 
+16535:     const char* name() const noexcept
+16535:     { return __name[0] == '*' ? __name + 1 : __name; }
+16535: # 115 "/usr/include/c++/8/typeinfo" 3
+16535:     bool before(const type_info& __arg) const noexcept
+16535:     { return (__name[0] == '*' && __arg.__name[0] == '*')
+16535:  ? __name < __arg.__name
+16535:  : __builtin_strcmp (__name, __arg.__name) < 0; }
+16535: 
+16535:     bool operator==(const type_info& __arg) const noexcept
+16535:     {
+16535:       return ((__name == __arg.__name)
+16535:        || (__name[0] != '*' &&
+16535:     __builtin_strcmp (__name, __arg.__name) == 0));
+16535:     }
+16535: # 136 "/usr/include/c++/8/typeinfo" 3
+16535:     bool operator!=(const type_info& __arg) const noexcept
+16535:     { return !operator==(__arg); }
+16535: 
+16535: 
+16535:     size_t hash_code() const noexcept
+16535:     {
+16535: 
+16535:       return _Hash_bytes(name(), __builtin_strlen(name()),
+16535:     static_cast<size_t>(0xc70f6907UL));
+16535: 
+16535: 
+16535: 
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:     virtual bool __is_pointer_p() const;
+16535: 
+16535: 
+16535:     virtual bool __is_function_p() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     virtual bool __do_catch(const type_info *__thr_type, void **__thr_obj,
+16535:        unsigned __outer) const;
+16535: 
+16535: 
+16535:     virtual bool __do_upcast(const __cxxabiv1::__class_type_info *__target,
+16535:         void **__obj_ptr) const;
+16535: 
+16535:   protected:
+16535:     const char *__name;
+16535: 
+16535:     explicit type_info(const char *__n): __name(__n) { }
+16535: 
+16535:   private:
+16535: 
+16535:     type_info& operator=(const type_info&);
+16535:     type_info(const type_info&);
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   class bad_cast : public exception
+16535:   {
+16535:   public:
+16535:     bad_cast() noexcept { }
+16535: 
+16535: 
+16535: 
+16535:     virtual ~bad_cast() noexcept;
+16535: 
+16535: 
+16535:     virtual const char* what() const noexcept;
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   class bad_typeid : public exception
+16535:   {
+16535:   public:
+16535:     bad_typeid () noexcept { }
+16535: 
+16535: 
+16535: 
+16535:     virtual ~bad_typeid() noexcept;
+16535: 
+16535: 
+16535:     virtual const char* what() const noexcept;
+16535:   };
+16535: }
+16535: 
+16535: }
+16535: 
+16535: #pragma GCC visibility pop
+16535: # 40 "/usr/include/c++/8/bits/exception_ptr.h" 2 3
+16535: # 1 "/usr/include/c++/8/new" 1 3
+16535: # 41 "/usr/include/c++/8/bits/exception_ptr.h" 2 3
+16535: 
+16535: extern "C++" {
+16535: 
+16535: namespace std
+16535: {
+16535:   class type_info;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   namespace __exception_ptr
+16535:   {
+16535:     class exception_ptr;
+16535:   }
+16535: 
+16535:   using __exception_ptr::exception_ptr;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   exception_ptr current_exception() noexcept;
+16535: 
+16535:   template<typename _Ex>
+16535:   exception_ptr make_exception_ptr(_Ex) noexcept;
+16535: 
+16535: 
+16535:   void rethrow_exception(exception_ptr) __attribute__ ((__noreturn__));
+16535: 
+16535:   namespace __exception_ptr
+16535:   {
+16535:     using std::rethrow_exception;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     class exception_ptr
+16535:     {
+16535:       void* _M_exception_object;
+16535: 
+16535:       explicit exception_ptr(void* __e) noexcept;
+16535: 
+16535:       void _M_addref() noexcept;
+16535:       void _M_release() noexcept;
+16535: 
+16535:       void *_M_get() const noexcept __attribute__ ((__pure__));
+16535: 
+16535:       friend exception_ptr std::current_exception() noexcept;
+16535:       friend void std::rethrow_exception(exception_ptr);
+16535:       template<typename _Ex>
+16535:       friend exception_ptr std::make_exception_ptr(_Ex) noexcept;
+16535: 
+16535:     public:
+16535:       exception_ptr() noexcept;
+16535: 
+16535:       exception_ptr(const exception_ptr&) noexcept;
+16535: 
+16535: 
+16535:       exception_ptr(nullptr_t) noexcept
+16535:       : _M_exception_object(0)
+16535:       { }
+16535: 
+16535:       exception_ptr(exception_ptr&& __o) noexcept
+16535:       : _M_exception_object(__o._M_exception_object)
+16535:       { __o._M_exception_object = 0; }
+16535: # 117 "/usr/include/c++/8/bits/exception_ptr.h" 3
+16535:       exception_ptr&
+16535:       operator=(const exception_ptr&) noexcept;
+16535: 
+16535: 
+16535:       exception_ptr&
+16535:       operator=(exception_ptr&& __o) noexcept
+16535:       {
+16535:         exception_ptr(static_cast<exception_ptr&&>(__o)).swap(*this);
+16535:         return *this;
+16535:       }
+16535: 
+16535: 
+16535:       ~exception_ptr() noexcept;
+16535: 
+16535:       void
+16535:       swap(exception_ptr&) noexcept;
+16535: # 144 "/usr/include/c++/8/bits/exception_ptr.h" 3
+16535:       explicit operator bool() const
+16535:       { return _M_exception_object; }
+16535: 
+16535: 
+16535:       friend bool
+16535:       operator==(const exception_ptr&, const exception_ptr&)
+16535:  noexcept __attribute__ ((__pure__));
+16535: 
+16535:       const class std::type_info*
+16535:       __cxa_exception_type() const noexcept
+16535:  __attribute__ ((__pure__));
+16535:     };
+16535: 
+16535:     bool
+16535:     operator==(const exception_ptr&, const exception_ptr&)
+16535:       noexcept __attribute__ ((__pure__));
+16535: 
+16535:     bool
+16535:     operator!=(const exception_ptr&, const exception_ptr&)
+16535:       noexcept __attribute__ ((__pure__));
+16535: 
+16535:     inline void
+16535:     swap(exception_ptr& __lhs, exception_ptr& __rhs)
+16535:     { __lhs.swap(__rhs); }
+16535: 
+16535:     template<typename _Ex>
+16535:       inline void
+16535:       __dest_thunk(void* __x)
+16535:       { static_cast<_Ex*>(__x)->~_Ex(); }
+16535: 
+16535:   }
+16535: 
+16535: 
+16535:   template<typename _Ex>
+16535:     exception_ptr
+16535:     make_exception_ptr(_Ex __ex) noexcept
+16535:     {
+16535: 
+16535:       void* __e = __cxxabiv1::__cxa_allocate_exception(sizeof(_Ex));
+16535:       (void) __cxxabiv1::__cxa_init_primary_exception(
+16535:    __e, const_cast<std::type_info*>(&typeid(__ex)),
+16535:    __exception_ptr::__dest_thunk<_Ex>);
+16535:       try
+16535:  {
+16535:           ::new (__e) _Ex(__ex);
+16535:           return exception_ptr(__e);
+16535:  }
+16535:       catch(...)
+16535:  {
+16535:    __cxxabiv1::__cxa_free_exception(__e);
+16535:    return current_exception();
+16535:  }
+16535: # 208 "/usr/include/c++/8/bits/exception_ptr.h" 3
+16535:     }
+16535: 
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: #pragma GCC visibility pop
+16535: # 144 "/usr/include/c++/8/exception" 2 3
+16535: # 1 "/usr/include/c++/8/bits/nested_exception.h" 1 3
+16535: # 33 "/usr/include/c++/8/bits/nested_exception.h" 3
+16535: #pragma GCC visibility push(default)
+16535: # 42 "/usr/include/c++/8/bits/nested_exception.h" 3
+16535: extern "C++" {
+16535: 
+16535: namespace std
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   class nested_exception
+16535:   {
+16535:     exception_ptr _M_ptr;
+16535: 
+16535:   public:
+16535:     nested_exception() noexcept : _M_ptr(current_exception()) { }
+16535: 
+16535:     nested_exception(const nested_exception&) noexcept = default;
+16535: 
+16535:     nested_exception& operator=(const nested_exception&) noexcept = default;
+16535: 
+16535:     virtual ~nested_exception() noexcept;
+16535: 
+16535:     [[noreturn]]
+16535:     void
+16535:     rethrow_nested() const
+16535:     {
+16535:       if (_M_ptr)
+16535:  rethrow_exception(_M_ptr);
+16535:       std::terminate();
+16535:     }
+16535: 
+16535:     exception_ptr
+16535:     nested_ptr() const noexcept
+16535:     { return _M_ptr; }
+16535:   };
+16535: 
+16535:   template<typename _Except>
+16535:     struct _Nested_exception : public _Except, public nested_exception
+16535:     {
+16535:       explicit _Nested_exception(const _Except& __ex)
+16535:       : _Except(__ex)
+16535:       { }
+16535: 
+16535:       explicit _Nested_exception(_Except&& __ex)
+16535:       : _Except(static_cast<_Except&&>(__ex))
+16535:       { }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     [[noreturn]]
+16535:     inline void
+16535:     __throw_with_nested_impl(_Tp&& __t, true_type)
+16535:     {
+16535:       using _Up = typename remove_reference<_Tp>::type;
+16535:       throw _Nested_exception<_Up>{std::forward<_Tp>(__t)};
+16535:     }
+16535: 
+16535:   template<typename _Tp>
+16535:     [[noreturn]]
+16535:     inline void
+16535:     __throw_with_nested_impl(_Tp&& __t, false_type)
+16535:     { throw std::forward<_Tp>(__t); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     [[noreturn]]
+16535:     inline void
+16535:     throw_with_nested(_Tp&& __t)
+16535:     {
+16535:       using _Up = typename decay<_Tp>::type;
+16535:       using _CopyConstructible
+16535:  = __and_<is_copy_constructible<_Up>, is_move_constructible<_Up>>;
+16535:       static_assert(_CopyConstructible::value,
+16535:    "throw_with_nested argument must be CopyConstructible");
+16535:       using __nest = __and_<is_class<_Up>, __bool_constant<!__is_final(_Up)>,
+16535:        __not_<is_base_of<nested_exception, _Up>>>;
+16535:       std::__throw_with_nested_impl(std::forward<_Tp>(__t), __nest{});
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     using __rethrow_if_nested_cond = typename enable_if<
+16535:       __and_<is_polymorphic<_Tp>,
+16535:       __or_<__not_<is_base_of<nested_exception, _Tp>>,
+16535:      is_convertible<_Tp*, nested_exception*>>>::value
+16535:     >::type;
+16535: 
+16535: 
+16535:   template<typename _Ex>
+16535:     inline __rethrow_if_nested_cond<_Ex>
+16535:     __rethrow_if_nested_impl(const _Ex* __ptr)
+16535:     {
+16535:       if (auto __ne_ptr = dynamic_cast<const nested_exception*>(__ptr))
+16535:  __ne_ptr->rethrow_nested();
+16535:     }
+16535: 
+16535: 
+16535:   inline void
+16535:   __rethrow_if_nested_impl(const void*)
+16535:   { }
+16535: 
+16535: 
+16535:   template<typename _Ex>
+16535:     inline void
+16535:     rethrow_if_nested(const _Ex& __ex)
+16535:     { std::__rethrow_if_nested_impl(std::__addressof(__ex)); }
+16535: 
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: #pragma GCC visibility pop
+16535: # 145 "/usr/include/c++/8/exception" 2 3
+16535: # 41 "/usr/include/c++/8/new" 2 3
+16535: 
+16535: #pragma GCC visibility push(default)
+16535: 
+16535: extern "C++" {
+16535: 
+16535: namespace std
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   class bad_alloc : public exception
+16535:   {
+16535:   public:
+16535:     bad_alloc() throw() { }
+16535: 
+16535: 
+16535: 
+16535:     virtual ~bad_alloc() throw();
+16535: 
+16535: 
+16535:     virtual const char* what() const throw();
+16535:   };
+16535: 
+16535: 
+16535:   class bad_array_new_length : public bad_alloc
+16535:   {
+16535:   public:
+16535:     bad_array_new_length() throw() { }
+16535: 
+16535: 
+16535: 
+16535:     virtual ~bad_array_new_length() throw();
+16535: 
+16535: 
+16535:     virtual const char* what() const throw();
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   struct nothrow_t
+16535:   {
+16535: 
+16535:     explicit nothrow_t() = default;
+16535: 
+16535:   };
+16535: 
+16535:   extern const nothrow_t nothrow;
+16535: 
+16535: 
+16535: 
+16535:   typedef void (*new_handler)();
+16535: 
+16535: 
+16535: 
+16535:   new_handler set_new_handler(new_handler) throw();
+16535: 
+16535: 
+16535: 
+16535:   new_handler get_new_handler() noexcept;
+16535: 
+16535: }
+16535: # 120 "/usr/include/c++/8/new" 3
+16535: void* operator new(std::size_t)
+16535:   __attribute__((__externally_visible__));
+16535: void* operator new[](std::size_t)
+16535:   __attribute__((__externally_visible__));
+16535: void operator delete(void*) noexcept
+16535:   __attribute__((__externally_visible__));
+16535: void operator delete[](void*) noexcept
+16535:   __attribute__((__externally_visible__));
+16535: 
+16535: void operator delete(void*, std::size_t) noexcept
+16535:   __attribute__((__externally_visible__));
+16535: void operator delete[](void*, std::size_t) noexcept
+16535:   __attribute__((__externally_visible__));
+16535: 
+16535: void* operator new(std::size_t, const std::nothrow_t&) noexcept
+16535:   __attribute__((__externally_visible__));
+16535: void* operator new[](std::size_t, const std::nothrow_t&) noexcept
+16535:   __attribute__((__externally_visible__));
+16535: void operator delete(void*, const std::nothrow_t&) noexcept
+16535:   __attribute__((__externally_visible__));
+16535: void operator delete[](void*, const std::nothrow_t&) noexcept
+16535:   __attribute__((__externally_visible__));
+16535: # 168 "/usr/include/c++/8/new" 3
+16535: inline void* operator new(std::size_t, void* __p) noexcept
+16535: { return __p; }
+16535: inline void* operator new[](std::size_t, void* __p) noexcept
+16535: { return __p; }
+16535: 
+16535: 
+16535: inline void operator delete (void*, void*) noexcept { }
+16535: inline void operator delete[](void*, void*) noexcept { }
+16535: 
+16535: }
+16535: # 216 "/usr/include/c++/8/new" 3
+16535: #pragma GCC visibility pop
+16535: # 60 "/usr/include/c++/8/bits/stl_construct.h" 2 3
+16535: 
+16535: # 1 "/usr/include/c++/8/ext/alloc_traits.h" 1 3
+16535: # 32 "/usr/include/c++/8/ext/alloc_traits.h" 3
+16535:        
+16535: # 33 "/usr/include/c++/8/ext/alloc_traits.h" 3
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/alloc_traits.h" 1 3
+16535: # 41 "/usr/include/c++/8/bits/alloc_traits.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   struct __allocator_traits_base
+16535:   {
+16535:     template<typename _Tp, typename _Up, typename = void>
+16535:       struct __rebind : __replace_first_arg<_Tp, _Up> { };
+16535: 
+16535:     template<typename _Tp, typename _Up>
+16535:       struct __rebind<_Tp, _Up,
+16535:         __void_t<typename _Tp::template rebind<_Up>::other>>
+16535:       { using type = typename _Tp::template rebind<_Up>::other; };
+16535: 
+16535:   protected:
+16535:     template<typename _Tp>
+16535:       using __pointer = typename _Tp::pointer;
+16535:     template<typename _Tp>
+16535:       using __c_pointer = typename _Tp::const_pointer;
+16535:     template<typename _Tp>
+16535:       using __v_pointer = typename _Tp::void_pointer;
+16535:     template<typename _Tp>
+16535:       using __cv_pointer = typename _Tp::const_void_pointer;
+16535:     template<typename _Tp>
+16535:       using __pocca = typename _Tp::propagate_on_container_copy_assignment;
+16535:     template<typename _Tp>
+16535:       using __pocma = typename _Tp::propagate_on_container_move_assignment;
+16535:     template<typename _Tp>
+16535:       using __pocs = typename _Tp::propagate_on_container_swap;
+16535:     template<typename _Tp>
+16535:       using __equal = typename _Tp::is_always_equal;
+16535:   };
+16535: 
+16535:   template<typename _Alloc, typename _Up>
+16535:     using __alloc_rebind
+16535:       = typename __allocator_traits_base::template __rebind<_Alloc, _Up>::type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Alloc>
+16535:     struct allocator_traits : __allocator_traits_base
+16535:     {
+16535: 
+16535:       typedef _Alloc allocator_type;
+16535: 
+16535:       typedef typename _Alloc::value_type value_type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       using pointer = __detected_or_t<value_type*, __pointer, _Alloc>;
+16535: 
+16535:     private:
+16535: 
+16535:       template<template<typename> class _Func, typename _Tp, typename = void>
+16535:  struct _Ptr
+16535:  {
+16535:    using type = typename pointer_traits<pointer>::template rebind<_Tp>;
+16535:  };
+16535: 
+16535:       template<template<typename> class _Func, typename _Tp>
+16535:  struct _Ptr<_Func, _Tp, __void_t<_Func<_Alloc>>>
+16535:  {
+16535:    using type = _Func<_Alloc>;
+16535:  };
+16535: 
+16535: 
+16535:       template<typename _A2, typename _PtrT, typename = void>
+16535:  struct _Diff
+16535:  { using type = typename pointer_traits<_PtrT>::difference_type; };
+16535: 
+16535:       template<typename _A2, typename _PtrT>
+16535:  struct _Diff<_A2, _PtrT, __void_t<typename _A2::difference_type>>
+16535:  { using type = typename _A2::difference_type; };
+16535: 
+16535: 
+16535:       template<typename _A2, typename _DiffT, typename = void>
+16535:  struct _Size : make_unsigned<_DiffT> { };
+16535: 
+16535:       template<typename _A2, typename _DiffT>
+16535:  struct _Size<_A2, _DiffT, __void_t<typename _A2::size_type>>
+16535:  { using type = typename _A2::size_type; };
+16535: 
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       using const_pointer = typename _Ptr<__c_pointer, const value_type>::type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       using void_pointer = typename _Ptr<__v_pointer, void>::type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       using const_void_pointer = typename _Ptr<__cv_pointer, const void>::type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       using difference_type = typename _Diff<_Alloc, pointer>::type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       using size_type = typename _Size<_Alloc, difference_type>::type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       using propagate_on_container_copy_assignment
+16535:  = __detected_or_t<false_type, __pocca, _Alloc>;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       using propagate_on_container_move_assignment
+16535:  = __detected_or_t<false_type, __pocma, _Alloc>;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       using propagate_on_container_swap
+16535:  = __detected_or_t<false_type, __pocs, _Alloc>;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       using is_always_equal
+16535:  = __detected_or_t<typename is_empty<_Alloc>::type, __equal, _Alloc>;
+16535: 
+16535:       template<typename _Tp>
+16535:  using rebind_alloc = __alloc_rebind<_Alloc, _Tp>;
+16535:       template<typename _Tp>
+16535:  using rebind_traits = allocator_traits<rebind_alloc<_Tp>>;
+16535: 
+16535:     private:
+16535:       template<typename _Alloc2>
+16535:  static auto
+16535:  _S_allocate(_Alloc2& __a, size_type __n, const_void_pointer __hint, int)
+16535:  -> decltype(__a.allocate(__n, __hint))
+16535:  { return __a.allocate(__n, __hint); }
+16535: 
+16535:       template<typename _Alloc2>
+16535:  static pointer
+16535:  _S_allocate(_Alloc2& __a, size_type __n, const_void_pointer, ...)
+16535:  { return __a.allocate(__n); }
+16535: 
+16535:       template<typename _Tp, typename... _Args>
+16535:  struct __construct_helper
+16535:  {
+16535:    template<typename _Alloc2,
+16535:      typename = decltype(std::declval<_Alloc2*>()->construct(
+16535:     std::declval<_Tp*>(), std::declval<_Args>()...))>
+16535:      static true_type __test(int);
+16535: 
+16535:    template<typename>
+16535:      static false_type __test(...);
+16535: 
+16535:    using type = decltype(__test<_Alloc>(0));
+16535:  };
+16535: 
+16535:       template<typename _Tp, typename... _Args>
+16535:  using __has_construct
+16535:    = typename __construct_helper<_Tp, _Args...>::type;
+16535: 
+16535:       template<typename _Tp, typename... _Args>
+16535:  static _Require<__has_construct<_Tp, _Args...>>
+16535:  _S_construct(_Alloc& __a, _Tp* __p, _Args&&... __args)
+16535:  { __a.construct(__p, std::forward<_Args>(__args)...); }
+16535: 
+16535:       template<typename _Tp, typename... _Args>
+16535:  static
+16535:  _Require<__and_<__not_<__has_construct<_Tp, _Args...>>,
+16535:           is_constructible<_Tp, _Args...>>>
+16535:  _S_construct(_Alloc&, _Tp* __p, _Args&&... __args)
+16535:  { ::new((void*)__p) _Tp(std::forward<_Args>(__args)...); }
+16535: 
+16535:       template<typename _Alloc2, typename _Tp>
+16535:  static auto
+16535:  _S_destroy(_Alloc2& __a, _Tp* __p, int)
+16535:  -> decltype(__a.destroy(__p))
+16535:  { __a.destroy(__p); }
+16535: 
+16535:       template<typename _Alloc2, typename _Tp>
+16535:  static void
+16535:  _S_destroy(_Alloc2&, _Tp* __p, ...)
+16535:  { __p->~_Tp(); }
+16535: 
+16535:       template<typename _Alloc2>
+16535:  static auto
+16535:  _S_max_size(_Alloc2& __a, int)
+16535:  -> decltype(__a.max_size())
+16535:  { return __a.max_size(); }
+16535: 
+16535:       template<typename _Alloc2>
+16535:  static size_type
+16535:  _S_max_size(_Alloc2&, ...)
+16535:  {
+16535: 
+16535: 
+16535:    return __gnu_cxx::__numeric_traits<size_type>::__max
+16535:      / sizeof(value_type);
+16535:  }
+16535: 
+16535:       template<typename _Alloc2>
+16535:  static auto
+16535:  _S_select(_Alloc2& __a, int)
+16535:  -> decltype(__a.select_on_container_copy_construction())
+16535:  { return __a.select_on_container_copy_construction(); }
+16535: 
+16535:       template<typename _Alloc2>
+16535:  static _Alloc2
+16535:  _S_select(_Alloc2& __a, ...)
+16535:  { return __a; }
+16535: 
+16535:     public:
+16535: # 299 "/usr/include/c++/8/bits/alloc_traits.h" 3
+16535:       static pointer
+16535:       allocate(_Alloc& __a, size_type __n)
+16535:       { return __a.allocate(__n); }
+16535: # 314 "/usr/include/c++/8/bits/alloc_traits.h" 3
+16535:       static pointer
+16535:       allocate(_Alloc& __a, size_type __n, const_void_pointer __hint)
+16535:       { return _S_allocate(__a, __n, __hint, 0); }
+16535: # 326 "/usr/include/c++/8/bits/alloc_traits.h" 3
+16535:       static void
+16535:       deallocate(_Alloc& __a, pointer __p, size_type __n)
+16535:       { __a.deallocate(__p, __n); }
+16535: # 341 "/usr/include/c++/8/bits/alloc_traits.h" 3
+16535:       template<typename _Tp, typename... _Args>
+16535:  static auto construct(_Alloc& __a, _Tp* __p, _Args&&... __args)
+16535:  -> decltype(_S_construct(__a, __p, std::forward<_Args>(__args)...))
+16535:  { _S_construct(__a, __p, std::forward<_Args>(__args)...); }
+16535: # 354 "/usr/include/c++/8/bits/alloc_traits.h" 3
+16535:       template<typename _Tp>
+16535:  static void destroy(_Alloc& __a, _Tp* __p)
+16535:  { _S_destroy(__a, __p, 0); }
+16535: # 366 "/usr/include/c++/8/bits/alloc_traits.h" 3
+16535:       static size_type max_size(const _Alloc& __a) noexcept
+16535:       { return _S_max_size(__a, 0); }
+16535: # 377 "/usr/include/c++/8/bits/alloc_traits.h" 3
+16535:       static _Alloc
+16535:       select_on_container_copy_construction(const _Alloc& __rhs)
+16535:       { return _S_select(__rhs, 0); }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct allocator_traits<allocator<_Tp>>
+16535:     {
+16535: 
+16535:       using allocator_type = allocator<_Tp>;
+16535: 
+16535:       using value_type = _Tp;
+16535: 
+16535: 
+16535:       using pointer = _Tp*;
+16535: 
+16535: 
+16535:       using const_pointer = const _Tp*;
+16535: 
+16535: 
+16535:       using void_pointer = void*;
+16535: 
+16535: 
+16535:       using const_void_pointer = const void*;
+16535: 
+16535: 
+16535:       using difference_type = std::ptrdiff_t;
+16535: 
+16535: 
+16535:       using size_type = std::size_t;
+16535: 
+16535: 
+16535:       using propagate_on_container_copy_assignment = false_type;
+16535: 
+16535: 
+16535:       using propagate_on_container_move_assignment = true_type;
+16535: 
+16535: 
+16535:       using propagate_on_container_swap = false_type;
+16535: 
+16535: 
+16535:       using is_always_equal = true_type;
+16535: 
+16535:       template<typename _Up>
+16535:  using rebind_alloc = allocator<_Up>;
+16535: 
+16535:       template<typename _Up>
+16535:  using rebind_traits = allocator_traits<allocator<_Up>>;
+16535: # 434 "/usr/include/c++/8/bits/alloc_traits.h" 3
+16535:       static pointer
+16535:       allocate(allocator_type& __a, size_type __n)
+16535:       { return __a.allocate(__n); }
+16535: # 448 "/usr/include/c++/8/bits/alloc_traits.h" 3
+16535:       static pointer
+16535:       allocate(allocator_type& __a, size_type __n, const_void_pointer __hint)
+16535:       { return __a.allocate(__n, __hint); }
+16535: # 460 "/usr/include/c++/8/bits/alloc_traits.h" 3
+16535:       static void
+16535:       deallocate(allocator_type& __a, pointer __p, size_type __n)
+16535:       { __a.deallocate(__p, __n); }
+16535: # 472 "/usr/include/c++/8/bits/alloc_traits.h" 3
+16535:       template<typename _Up, typename... _Args>
+16535:  static void
+16535:  construct(allocator_type& __a, _Up* __p, _Args&&... __args)
+16535:  { __a.construct(__p, std::forward<_Args>(__args)...); }
+16535: # 484 "/usr/include/c++/8/bits/alloc_traits.h" 3
+16535:       template<typename _Up>
+16535:  static void
+16535:  destroy(allocator_type& __a, _Up* __p)
+16535:  { __a.destroy(__p); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       static size_type
+16535:       max_size(const allocator_type& __a) noexcept
+16535:       { return __a.max_size(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       static allocator_type
+16535:       select_on_container_copy_construction(const allocator_type& __rhs)
+16535:       { return __rhs; }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Alloc>
+16535:     inline void
+16535:     __do_alloc_on_copy(_Alloc& __one, const _Alloc& __two, true_type)
+16535:     { __one = __two; }
+16535: 
+16535:   template<typename _Alloc>
+16535:     inline void
+16535:     __do_alloc_on_copy(_Alloc&, const _Alloc&, false_type)
+16535:     { }
+16535: 
+16535:   template<typename _Alloc>
+16535:     inline void __alloc_on_copy(_Alloc& __one, const _Alloc& __two)
+16535:     {
+16535:       typedef allocator_traits<_Alloc> __traits;
+16535:       typedef typename __traits::propagate_on_container_copy_assignment __pocca;
+16535:       __do_alloc_on_copy(__one, __two, __pocca());
+16535:     }
+16535: 
+16535:   template<typename _Alloc>
+16535:     inline _Alloc __alloc_on_copy(const _Alloc& __a)
+16535:     {
+16535:       typedef allocator_traits<_Alloc> __traits;
+16535:       return __traits::select_on_container_copy_construction(__a);
+16535:     }
+16535: 
+16535:   template<typename _Alloc>
+16535:     inline void __do_alloc_on_move(_Alloc& __one, _Alloc& __two, true_type)
+16535:     { __one = std::move(__two); }
+16535: 
+16535:   template<typename _Alloc>
+16535:     inline void __do_alloc_on_move(_Alloc&, _Alloc&, false_type)
+16535:     { }
+16535: 
+16535:   template<typename _Alloc>
+16535:     inline void __alloc_on_move(_Alloc& __one, _Alloc& __two)
+16535:     {
+16535:       typedef allocator_traits<_Alloc> __traits;
+16535:       typedef typename __traits::propagate_on_container_move_assignment __pocma;
+16535:       __do_alloc_on_move(__one, __two, __pocma());
+16535:     }
+16535: 
+16535:   template<typename _Alloc>
+16535:     inline void __do_alloc_on_swap(_Alloc& __one, _Alloc& __two, true_type)
+16535:     {
+16535:       using std::swap;
+16535:       swap(__one, __two);
+16535:     }
+16535: 
+16535:   template<typename _Alloc>
+16535:     inline void __do_alloc_on_swap(_Alloc&, _Alloc&, false_type)
+16535:     { }
+16535: 
+16535:   template<typename _Alloc>
+16535:     inline void __alloc_on_swap(_Alloc& __one, _Alloc& __two)
+16535:     {
+16535:       typedef allocator_traits<_Alloc> __traits;
+16535:       typedef typename __traits::propagate_on_container_swap __pocs;
+16535:       __do_alloc_on_swap(__one, __two, __pocs());
+16535:     }
+16535: 
+16535:   template<typename _Alloc>
+16535:     class __is_copy_insertable_impl
+16535:     {
+16535:       typedef allocator_traits<_Alloc> _Traits;
+16535: 
+16535:       template<typename _Up, typename
+16535:         = decltype(_Traits::construct(std::declval<_Alloc&>(),
+16535:           std::declval<_Up*>(),
+16535:           std::declval<const _Up&>()))>
+16535:  static true_type
+16535:  _M_select(int);
+16535: 
+16535:       template<typename _Up>
+16535:  static false_type
+16535:  _M_select(...);
+16535: 
+16535:     public:
+16535:       typedef decltype(_M_select<typename _Alloc::value_type>(0)) type;
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Alloc>
+16535:     struct __is_copy_insertable
+16535:     : __is_copy_insertable_impl<_Alloc>::type
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_copy_insertable<allocator<_Tp>>
+16535:     : is_copy_constructible<_Tp>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Alloc, typename = void>
+16535:     struct __is_allocator : false_type { };
+16535: 
+16535:   template<typename _Alloc>
+16535:     struct __is_allocator<_Alloc,
+16535:       __void_t<typename _Alloc::value_type,
+16535:         decltype(std::declval<_Alloc&>().allocate(size_t{}))>>
+16535:     : true_type { };
+16535: 
+16535:   template<typename _Alloc>
+16535:     using _RequireAllocator
+16535:       = typename enable_if<__is_allocator<_Alloc>::value, _Alloc>::type;
+16535: 
+16535: 
+16535: }
+16535: # 37 "/usr/include/c++/8/ext/alloc_traits.h" 2 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template<typename _Alloc, typename = typename _Alloc::value_type>
+16535:   struct __alloc_traits
+16535: 
+16535:   : std::allocator_traits<_Alloc>
+16535: 
+16535:   {
+16535:     typedef _Alloc allocator_type;
+16535: 
+16535:     typedef std::allocator_traits<_Alloc> _Base_type;
+16535:     typedef typename _Base_type::value_type value_type;
+16535:     typedef typename _Base_type::pointer pointer;
+16535:     typedef typename _Base_type::const_pointer const_pointer;
+16535:     typedef typename _Base_type::size_type size_type;
+16535:     typedef typename _Base_type::difference_type difference_type;
+16535: 
+16535:     typedef value_type& reference;
+16535:     typedef const value_type& const_reference;
+16535:     using _Base_type::allocate;
+16535:     using _Base_type::deallocate;
+16535:     using _Base_type::construct;
+16535:     using _Base_type::destroy;
+16535:     using _Base_type::max_size;
+16535: 
+16535:   private:
+16535:     template<typename _Ptr>
+16535:       using __is_custom_pointer
+16535:  = std::__and_<std::is_same<pointer, _Ptr>,
+16535:         std::__not_<std::is_pointer<_Ptr>>>;
+16535: 
+16535:   public:
+16535: 
+16535:     template<typename _Ptr, typename... _Args>
+16535:       static typename std::enable_if<__is_custom_pointer<_Ptr>::value>::type
+16535:       construct(_Alloc& __a, _Ptr __p, _Args&&... __args)
+16535:       {
+16535:  _Base_type::construct(__a, std::__to_address(__p),
+16535:          std::forward<_Args>(__args)...);
+16535:       }
+16535: 
+16535: 
+16535:     template<typename _Ptr>
+16535:       static typename std::enable_if<__is_custom_pointer<_Ptr>::value>::type
+16535:       destroy(_Alloc& __a, _Ptr __p)
+16535:       { _Base_type::destroy(__a, std::__to_address(__p)); }
+16535: 
+16535:     static _Alloc _S_select_on_copy(const _Alloc& __a)
+16535:     { return _Base_type::select_on_container_copy_construction(__a); }
+16535: 
+16535:     static void _S_on_swap(_Alloc& __a, _Alloc& __b)
+16535:     { std::__alloc_on_swap(__a, __b); }
+16535: 
+16535:     static constexpr bool _S_propagate_on_copy_assign()
+16535:     { return _Base_type::propagate_on_container_copy_assignment::value; }
+16535: 
+16535:     static constexpr bool _S_propagate_on_move_assign()
+16535:     { return _Base_type::propagate_on_container_move_assignment::value; }
+16535: 
+16535:     static constexpr bool _S_propagate_on_swap()
+16535:     { return _Base_type::propagate_on_container_swap::value; }
+16535: 
+16535:     static constexpr bool _S_always_equal()
+16535:     { return _Base_type::is_always_equal::value; }
+16535: 
+16535:     static constexpr bool _S_nothrow_move()
+16535:     { return _S_propagate_on_move_assign() || _S_always_equal(); }
+16535: 
+16535:     template<typename _Tp>
+16535:       struct rebind
+16535:       { typedef typename _Base_type::template rebind_alloc<_Tp> other; };
+16535: # 158 "/usr/include/c++/8/ext/alloc_traits.h" 3
+16535:   };
+16535: 
+16535: 
+16535: }
+16535: # 62 "/usr/include/c++/8/bits/stl_construct.h" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _T1, typename... _Args>
+16535:     inline void
+16535:     _Construct(_T1* __p, _Args&&... __args)
+16535:     { ::new(static_cast<void*>(__p)) _T1(std::forward<_Args>(__args)...); }
+16535: # 87 "/usr/include/c++/8/bits/stl_construct.h" 3
+16535:   template<typename _T1>
+16535:     inline void
+16535:     _Construct_novalue(_T1* __p)
+16535:     { ::new(static_cast<void*>(__p)) _T1; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline void
+16535:     _Destroy(_Tp* __pointer)
+16535:     { __pointer->~_Tp(); }
+16535: 
+16535:   template<bool>
+16535:     struct _Destroy_aux
+16535:     {
+16535:       template<typename _ForwardIterator>
+16535:         static void
+16535:         __destroy(_ForwardIterator __first, _ForwardIterator __last)
+16535:  {
+16535:    for (; __first != __last; ++__first)
+16535:      std::_Destroy(std::__addressof(*__first));
+16535:  }
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct _Destroy_aux<true>
+16535:     {
+16535:       template<typename _ForwardIterator>
+16535:         static void
+16535:         __destroy(_ForwardIterator, _ForwardIterator) { }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _ForwardIterator>
+16535:     inline void
+16535:     _Destroy(_ForwardIterator __first, _ForwardIterator __last)
+16535:     {
+16535:       typedef typename iterator_traits<_ForwardIterator>::value_type
+16535:                        _Value_type;
+16535: 
+16535: 
+16535:       static_assert(is_destructible<_Value_type>::value,
+16535:       "value type is destructible");
+16535: 
+16535:       std::_Destroy_aux<__has_trivial_destructor(_Value_type)>::
+16535:  __destroy(__first, __last);
+16535:     }
+16535: 
+16535:   template<bool>
+16535:     struct _Destroy_n_aux
+16535:     {
+16535:       template<typename _ForwardIterator, typename _Size>
+16535:         static _ForwardIterator
+16535:         __destroy_n(_ForwardIterator __first, _Size __count)
+16535:  {
+16535:    for (; __count > 0; (void)++__first, --__count)
+16535:      std::_Destroy(std::__addressof(*__first));
+16535:    return __first;
+16535:  }
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct _Destroy_n_aux<true>
+16535:     {
+16535:       template<typename _ForwardIterator, typename _Size>
+16535:         static _ForwardIterator
+16535:         __destroy_n(_ForwardIterator __first, _Size __count)
+16535:  {
+16535:    std::advance(__first, __count);
+16535:    return __first;
+16535:  }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _ForwardIterator, typename _Size>
+16535:     inline _ForwardIterator
+16535:     _Destroy_n(_ForwardIterator __first, _Size __count)
+16535:     {
+16535:       typedef typename iterator_traits<_ForwardIterator>::value_type
+16535:                        _Value_type;
+16535: 
+16535: 
+16535:       static_assert(is_destructible<_Value_type>::value,
+16535:       "value type is destructible");
+16535: 
+16535:       return std::_Destroy_n_aux<__has_trivial_destructor(_Value_type)>::
+16535:  __destroy_n(__first, __count);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _ForwardIterator, typename _Allocator>
+16535:     void
+16535:     _Destroy(_ForwardIterator __first, _ForwardIterator __last,
+16535:       _Allocator& __alloc)
+16535:     {
+16535:       typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
+16535:       for (; __first != __last; ++__first)
+16535:  __traits::destroy(__alloc, std::__addressof(*__first));
+16535:     }
+16535: 
+16535:   template<typename _ForwardIterator, typename _Tp>
+16535:     inline void
+16535:     _Destroy(_ForwardIterator __first, _ForwardIterator __last,
+16535:       allocator<_Tp>&)
+16535:     {
+16535:       _Destroy(__first, __last);
+16535:     }
+16535: # 232 "/usr/include/c++/8/bits/stl_construct.h" 3
+16535: 
+16535: }
+16535: # 61 "/usr/include/c++/8/bits/stl_tempbuf.h" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 83 "/usr/include/c++/8/bits/stl_tempbuf.h" 3
+16535:   template<typename _Tp>
+16535:     pair<_Tp*, ptrdiff_t>
+16535:     get_temporary_buffer(ptrdiff_t __len) noexcept
+16535:     {
+16535:       const ptrdiff_t __max =
+16535:  __gnu_cxx::__numeric_traits<ptrdiff_t>::__max / sizeof(_Tp);
+16535:       if (__len > __max)
+16535:  __len = __max;
+16535: 
+16535:       while (__len > 0)
+16535:  {
+16535:    _Tp* __tmp = static_cast<_Tp*>(::operator new(__len * sizeof(_Tp),
+16535:        std::nothrow));
+16535:    if (__tmp != 0)
+16535:      return std::pair<_Tp*, ptrdiff_t>(__tmp, __len);
+16535:    __len /= 2;
+16535:  }
+16535:       return std::pair<_Tp*, ptrdiff_t>(static_cast<_Tp*>(0), 0);
+16535:     }
+16535: # 110 "/usr/include/c++/8/bits/stl_tempbuf.h" 3
+16535:   template<typename _Tp>
+16535:     inline void
+16535:     return_temporary_buffer(_Tp* __p)
+16535:     { ::operator delete(__p, std::nothrow); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _ForwardIterator, typename _Tp>
+16535:     class _Temporary_buffer
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:     public:
+16535:       typedef _Tp value_type;
+16535:       typedef value_type* pointer;
+16535:       typedef pointer iterator;
+16535:       typedef ptrdiff_t size_type;
+16535: 
+16535:     protected:
+16535:       size_type _M_original_len;
+16535:       size_type _M_len;
+16535:       pointer _M_buffer;
+16535: 
+16535:     public:
+16535: 
+16535:       size_type
+16535:       size() const
+16535:       { return _M_len; }
+16535: 
+16535: 
+16535:       size_type
+16535:       requested_size() const
+16535:       { return _M_original_len; }
+16535: 
+16535: 
+16535:       iterator
+16535:       begin()
+16535:       { return _M_buffer; }
+16535: 
+16535: 
+16535:       iterator
+16535:       end()
+16535:       { return _M_buffer + _M_len; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       _Temporary_buffer(_ForwardIterator __first, _ForwardIterator __last);
+16535: 
+16535:       ~_Temporary_buffer()
+16535:       {
+16535:  std::_Destroy(_M_buffer, _M_buffer + _M_len);
+16535:  std::return_temporary_buffer(_M_buffer);
+16535:       }
+16535: 
+16535:     private:
+16535: 
+16535:       _Temporary_buffer(const _Temporary_buffer&);
+16535: 
+16535:       void
+16535:       operator=(const _Temporary_buffer&);
+16535:     };
+16535: 
+16535: 
+16535:   template<bool>
+16535:     struct __uninitialized_construct_buf_dispatch
+16535:     {
+16535:       template<typename _Pointer, typename _ForwardIterator>
+16535:         static void
+16535:         __ucr(_Pointer __first, _Pointer __last,
+16535:        _ForwardIterator __seed)
+16535:         {
+16535:    if(__first == __last)
+16535:      return;
+16535: 
+16535:    _Pointer __cur = __first;
+16535:    try
+16535:      {
+16535:        std::_Construct(std::__addressof(*__first),
+16535:          std::move(*__seed));
+16535:        _Pointer __prev = __cur;
+16535:        ++__cur;
+16535:        for(; __cur != __last; ++__cur, ++__prev)
+16535:   std::_Construct(std::__addressof(*__cur),
+16535:     std::move(*__prev));
+16535:        *__seed = std::move(*__prev);
+16535:      }
+16535:    catch(...)
+16535:      {
+16535:        std::_Destroy(__first, __cur);
+16535:        throw;
+16535:      }
+16535:  }
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __uninitialized_construct_buf_dispatch<true>
+16535:     {
+16535:       template<typename _Pointer, typename _ForwardIterator>
+16535:         static void
+16535:         __ucr(_Pointer, _Pointer, _ForwardIterator) { }
+16535:     };
+16535: # 229 "/usr/include/c++/8/bits/stl_tempbuf.h" 3
+16535:   template<typename _Pointer, typename _ForwardIterator>
+16535:     inline void
+16535:     __uninitialized_construct_buf(_Pointer __first, _Pointer __last,
+16535:       _ForwardIterator __seed)
+16535:     {
+16535:       typedef typename std::iterator_traits<_Pointer>::value_type
+16535:  _ValueType;
+16535: 
+16535:       std::__uninitialized_construct_buf_dispatch<
+16535:         __has_trivial_constructor(_ValueType)>::
+16535:    __ucr(__first, __last, __seed);
+16535:     }
+16535: 
+16535:   template<typename _ForwardIterator, typename _Tp>
+16535:     _Temporary_buffer<_ForwardIterator, _Tp>::
+16535:     _Temporary_buffer(_ForwardIterator __first, _ForwardIterator __last)
+16535:     : _M_original_len(std::distance(__first, __last)),
+16535:       _M_len(0), _M_buffer(0)
+16535:     {
+16535:       try
+16535:  {
+16535:    std::pair<pointer, size_type> __p(std::get_temporary_buffer<
+16535:          value_type>(_M_original_len));
+16535:    _M_buffer = __p.first;
+16535:    _M_len = __p.second;
+16535:    if (_M_buffer)
+16535:      std::__uninitialized_construct_buf(_M_buffer, _M_buffer + _M_len,
+16535:             __first);
+16535:  }
+16535:       catch(...)
+16535:  {
+16535:    std::return_temporary_buffer(_M_buffer);
+16535:    _M_buffer = 0;
+16535:    _M_len = 0;
+16535:    throw;
+16535:  }
+16535:     }
+16535: 
+16535: 
+16535: }
+16535: # 63 "/usr/include/c++/8/bits/stl_algo.h" 2 3
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/uniform_int_dist.h" 1 3
+16535: # 37 "/usr/include/c++/8/bits/uniform_int_dist.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   namespace __detail
+16535:   {
+16535: 
+16535:     template<typename _Tp>
+16535:       inline bool
+16535:       _Power_of_2(_Tp __x)
+16535:       {
+16535:  return ((__x - 1) & __x) == 0;
+16535:       }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _IntType = int>
+16535:     class uniform_int_distribution
+16535:     {
+16535:       static_assert(std::is_integral<_IntType>::value,
+16535:       "template argument must be an integral type");
+16535: 
+16535:     public:
+16535: 
+16535:       typedef _IntType result_type;
+16535: 
+16535:       struct param_type
+16535:       {
+16535:  typedef uniform_int_distribution<_IntType> distribution_type;
+16535: 
+16535:  explicit
+16535:  param_type(_IntType __a = 0,
+16535:      _IntType __b = std::numeric_limits<_IntType>::max())
+16535:  : _M_a(__a), _M_b(__b)
+16535:  {
+16535:    ;
+16535:  }
+16535: 
+16535:  result_type
+16535:  a() const
+16535:  { return _M_a; }
+16535: 
+16535:  result_type
+16535:  b() const
+16535:  { return _M_b; }
+16535: 
+16535:  friend bool
+16535:  operator==(const param_type& __p1, const param_type& __p2)
+16535:  { return __p1._M_a == __p2._M_a && __p1._M_b == __p2._M_b; }
+16535: 
+16535:  friend bool
+16535:  operator!=(const param_type& __p1, const param_type& __p2)
+16535:  { return !(__p1 == __p2); }
+16535: 
+16535:       private:
+16535:  _IntType _M_a;
+16535:  _IntType _M_b;
+16535:       };
+16535: 
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535:       explicit
+16535:       uniform_int_distribution(_IntType __a = 0,
+16535:       _IntType __b = std::numeric_limits<_IntType>::max())
+16535:       : _M_param(__a, __b)
+16535:       { }
+16535: 
+16535:       explicit
+16535:       uniform_int_distribution(const param_type& __p)
+16535:       : _M_param(__p)
+16535:       { }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       reset() { }
+16535: 
+16535:       result_type
+16535:       a() const
+16535:       { return _M_param.a(); }
+16535: 
+16535:       result_type
+16535:       b() const
+16535:       { return _M_param.b(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       param_type
+16535:       param() const
+16535:       { return _M_param; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       param(const param_type& __param)
+16535:       { _M_param = __param; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       result_type
+16535:       min() const
+16535:       { return this->a(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       result_type
+16535:       max() const
+16535:       { return this->b(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       template<typename _UniformRandomNumberGenerator>
+16535:  result_type
+16535:  operator()(_UniformRandomNumberGenerator& __urng)
+16535:         { return this->operator()(__urng, _M_param); }
+16535: 
+16535:       template<typename _UniformRandomNumberGenerator>
+16535:  result_type
+16535:  operator()(_UniformRandomNumberGenerator& __urng,
+16535:      const param_type& __p);
+16535: 
+16535:       template<typename _ForwardIterator,
+16535:         typename _UniformRandomNumberGenerator>
+16535:  void
+16535:  __generate(_ForwardIterator __f, _ForwardIterator __t,
+16535:      _UniformRandomNumberGenerator& __urng)
+16535:  { this->__generate(__f, __t, __urng, _M_param); }
+16535: 
+16535:       template<typename _ForwardIterator,
+16535:         typename _UniformRandomNumberGenerator>
+16535:  void
+16535:  __generate(_ForwardIterator __f, _ForwardIterator __t,
+16535:      _UniformRandomNumberGenerator& __urng,
+16535:      const param_type& __p)
+16535:  { this->__generate_impl(__f, __t, __urng, __p); }
+16535: 
+16535:       template<typename _UniformRandomNumberGenerator>
+16535:  void
+16535:  __generate(result_type* __f, result_type* __t,
+16535:      _UniformRandomNumberGenerator& __urng,
+16535:      const param_type& __p)
+16535:  { this->__generate_impl(__f, __t, __urng, __p); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       friend bool
+16535:       operator==(const uniform_int_distribution& __d1,
+16535:    const uniform_int_distribution& __d2)
+16535:       { return __d1._M_param == __d2._M_param; }
+16535: 
+16535:     private:
+16535:       template<typename _ForwardIterator,
+16535:         typename _UniformRandomNumberGenerator>
+16535:  void
+16535:  __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+16535:    _UniformRandomNumberGenerator& __urng,
+16535:    const param_type& __p);
+16535: 
+16535:       param_type _M_param;
+16535:     };
+16535: 
+16535:   template<typename _IntType>
+16535:     template<typename _UniformRandomNumberGenerator>
+16535:       typename uniform_int_distribution<_IntType>::result_type
+16535:       uniform_int_distribution<_IntType>::
+16535:       operator()(_UniformRandomNumberGenerator& __urng,
+16535:    const param_type& __param)
+16535:       {
+16535:  typedef typename _UniformRandomNumberGenerator::result_type
+16535:    _Gresult_type;
+16535:  typedef typename std::make_unsigned<result_type>::type __utype;
+16535:  typedef typename std::common_type<_Gresult_type, __utype>::type
+16535:    __uctype;
+16535: 
+16535:  const __uctype __urngmin = __urng.min();
+16535:  const __uctype __urngmax = __urng.max();
+16535:  const __uctype __urngrange = __urngmax - __urngmin;
+16535:  const __uctype __urange
+16535:    = __uctype(__param.b()) - __uctype(__param.a());
+16535: 
+16535:  __uctype __ret;
+16535: 
+16535:  if (__urngrange > __urange)
+16535:    {
+16535: 
+16535:      const __uctype __uerange = __urange + 1;
+16535:      const __uctype __scaling = __urngrange / __uerange;
+16535:      const __uctype __past = __uerange * __scaling;
+16535:      do
+16535:        __ret = __uctype(__urng()) - __urngmin;
+16535:      while (__ret >= __past);
+16535:      __ret /= __scaling;
+16535:    }
+16535:  else if (__urngrange < __urange)
+16535:    {
+16535: # 264 "/usr/include/c++/8/bits/uniform_int_dist.h" 3
+16535:      __uctype __tmp;
+16535:      do
+16535:        {
+16535:   const __uctype __uerngrange = __urngrange + 1;
+16535:   __tmp = (__uerngrange * operator()
+16535:     (__urng, param_type(0, __urange / __uerngrange)));
+16535:   __ret = __tmp + (__uctype(__urng()) - __urngmin);
+16535:        }
+16535:      while (__ret > __urange || __ret < __tmp);
+16535:    }
+16535:  else
+16535:    __ret = __uctype(__urng()) - __urngmin;
+16535: 
+16535:  return __ret + __param.a();
+16535:       }
+16535: 
+16535: 
+16535:   template<typename _IntType>
+16535:     template<typename _ForwardIterator,
+16535:       typename _UniformRandomNumberGenerator>
+16535:       void
+16535:       uniform_int_distribution<_IntType>::
+16535:       __generate_impl(_ForwardIterator __f, _ForwardIterator __t,
+16535:         _UniformRandomNumberGenerator& __urng,
+16535:         const param_type& __param)
+16535:       {
+16535: 
+16535:  typedef typename _UniformRandomNumberGenerator::result_type
+16535:    _Gresult_type;
+16535:  typedef typename std::make_unsigned<result_type>::type __utype;
+16535:  typedef typename std::common_type<_Gresult_type, __utype>::type
+16535:    __uctype;
+16535: 
+16535:  const __uctype __urngmin = __urng.min();
+16535:  const __uctype __urngmax = __urng.max();
+16535:  const __uctype __urngrange = __urngmax - __urngmin;
+16535:  const __uctype __urange
+16535:    = __uctype(__param.b()) - __uctype(__param.a());
+16535: 
+16535:  __uctype __ret;
+16535: 
+16535:  if (__urngrange > __urange)
+16535:    {
+16535:      if (__detail::_Power_of_2(__urngrange + 1)
+16535:   && __detail::_Power_of_2(__urange + 1))
+16535:        {
+16535:   while (__f != __t)
+16535:     {
+16535:       __ret = __uctype(__urng()) - __urngmin;
+16535:       *__f++ = (__ret & __urange) + __param.a();
+16535:     }
+16535:        }
+16535:      else
+16535:        {
+16535: 
+16535:   const __uctype __uerange = __urange + 1;
+16535:   const __uctype __scaling = __urngrange / __uerange;
+16535:   const __uctype __past = __uerange * __scaling;
+16535:   while (__f != __t)
+16535:     {
+16535:       do
+16535:         __ret = __uctype(__urng()) - __urngmin;
+16535:       while (__ret >= __past);
+16535:       *__f++ = __ret / __scaling + __param.a();
+16535:     }
+16535:        }
+16535:    }
+16535:  else if (__urngrange < __urange)
+16535:    {
+16535: # 348 "/usr/include/c++/8/bits/uniform_int_dist.h" 3
+16535:      __uctype __tmp;
+16535:      while (__f != __t)
+16535:        {
+16535:   do
+16535:     {
+16535:       const __uctype __uerngrange = __urngrange + 1;
+16535:       __tmp = (__uerngrange * operator()
+16535:         (__urng, param_type(0, __urange / __uerngrange)));
+16535:       __ret = __tmp + (__uctype(__urng()) - __urngmin);
+16535:     }
+16535:   while (__ret > __urange || __ret < __tmp);
+16535:   *__f++ = __ret;
+16535:        }
+16535:    }
+16535:  else
+16535:    while (__f != __t)
+16535:      *__f++ = __uctype(__urng()) - __urngmin + __param.a();
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 67 "/usr/include/c++/8/bits/stl_algo.h" 2 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Iterator, typename _Compare>
+16535:     void
+16535:     __move_median_to_first(_Iterator __result,_Iterator __a, _Iterator __b,
+16535:       _Iterator __c, _Compare __comp)
+16535:     {
+16535:       if (__comp(__a, __b))
+16535:  {
+16535:    if (__comp(__b, __c))
+16535:      std::iter_swap(__result, __b);
+16535:    else if (__comp(__a, __c))
+16535:      std::iter_swap(__result, __c);
+16535:    else
+16535:      std::iter_swap(__result, __a);
+16535:  }
+16535:       else if (__comp(__a, __c))
+16535:  std::iter_swap(__result, __a);
+16535:       else if (__comp(__b, __c))
+16535:  std::iter_swap(__result, __c);
+16535:       else
+16535:  std::iter_swap(__result, __b);
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _InputIterator, typename _Predicate>
+16535:     inline _InputIterator
+16535:     __find_if(_InputIterator __first, _InputIterator __last,
+16535:        _Predicate __pred, input_iterator_tag)
+16535:     {
+16535:       while (__first != __last && !__pred(__first))
+16535:  ++__first;
+16535:       return __first;
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Predicate>
+16535:     _RandomAccessIterator
+16535:     __find_if(_RandomAccessIterator __first, _RandomAccessIterator __last,
+16535:        _Predicate __pred, random_access_iterator_tag)
+16535:     {
+16535:       typename iterator_traits<_RandomAccessIterator>::difference_type
+16535:  __trip_count = (__last - __first) >> 2;
+16535: 
+16535:       for (; __trip_count > 0; --__trip_count)
+16535:  {
+16535:    if (__pred(__first))
+16535:      return __first;
+16535:    ++__first;
+16535: 
+16535:    if (__pred(__first))
+16535:      return __first;
+16535:    ++__first;
+16535: 
+16535:    if (__pred(__first))
+16535:      return __first;
+16535:    ++__first;
+16535: 
+16535:    if (__pred(__first))
+16535:      return __first;
+16535:    ++__first;
+16535:  }
+16535: 
+16535:       switch (__last - __first)
+16535:  {
+16535:  case 3:
+16535:    if (__pred(__first))
+16535:      return __first;
+16535:    ++__first;
+16535:  case 2:
+16535:    if (__pred(__first))
+16535:      return __first;
+16535:    ++__first;
+16535:  case 1:
+16535:    if (__pred(__first))
+16535:      return __first;
+16535:    ++__first;
+16535:  case 0:
+16535:  default:
+16535:    return __last;
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _Iterator, typename _Predicate>
+16535:     inline _Iterator
+16535:     __find_if(_Iterator __first, _Iterator __last, _Predicate __pred)
+16535:     {
+16535:       return __find_if(__first, __last, __pred,
+16535:          std::__iterator_category(__first));
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _InputIterator, typename _Predicate>
+16535:     inline _InputIterator
+16535:     __find_if_not(_InputIterator __first, _InputIterator __last,
+16535:     _Predicate __pred)
+16535:     {
+16535:       return std::__find_if(__first, __last,
+16535:        __gnu_cxx::__ops::__negate(__pred),
+16535:        std::__iterator_category(__first));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _InputIterator, typename _Predicate, typename _Distance>
+16535:     _InputIterator
+16535:     __find_if_not_n(_InputIterator __first, _Distance& __len, _Predicate __pred)
+16535:     {
+16535:       for (; __len; --__len, (void) ++__first)
+16535:  if (!__pred(__first))
+16535:    break;
+16535:       return __first;
+16535:     }
+16535: # 202 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator1, typename _ForwardIterator2,
+16535:     typename _BinaryPredicate>
+16535:     _ForwardIterator1
+16535:     __search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+16535:       _ForwardIterator2 __first2, _ForwardIterator2 __last2,
+16535:       _BinaryPredicate __predicate)
+16535:     {
+16535: 
+16535:       if (__first1 == __last1 || __first2 == __last2)
+16535:  return __first1;
+16535: 
+16535: 
+16535:       _ForwardIterator2 __p1(__first2);
+16535:       if (++__p1 == __last2)
+16535:  return std::__find_if(__first1, __last1,
+16535:   __gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2));
+16535: 
+16535: 
+16535:       _ForwardIterator2 __p;
+16535:       _ForwardIterator1 __current = __first1;
+16535: 
+16535:       for (;;)
+16535:  {
+16535:    __first1 =
+16535:      std::__find_if(__first1, __last1,
+16535:   __gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2));
+16535: 
+16535:    if (__first1 == __last1)
+16535:      return __last1;
+16535: 
+16535:    __p = __p1;
+16535:    __current = __first1;
+16535:    if (++__current == __last1)
+16535:      return __last1;
+16535: 
+16535:    while (__predicate(__current, __p))
+16535:      {
+16535:        if (++__p == __last2)
+16535:   return __first1;
+16535:        if (++__current == __last1)
+16535:   return __last1;
+16535:      }
+16535:    ++__first1;
+16535:  }
+16535:       return __first1;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _ForwardIterator, typename _Integer,
+16535:     typename _UnaryPredicate>
+16535:     _ForwardIterator
+16535:     __search_n_aux(_ForwardIterator __first, _ForwardIterator __last,
+16535:      _Integer __count, _UnaryPredicate __unary_pred,
+16535:      std::forward_iterator_tag)
+16535:     {
+16535:       __first = std::__find_if(__first, __last, __unary_pred);
+16535:       while (__first != __last)
+16535:  {
+16535:    typename iterator_traits<_ForwardIterator>::difference_type
+16535:      __n = __count;
+16535:    _ForwardIterator __i = __first;
+16535:    ++__i;
+16535:    while (__i != __last && __n != 1 && __unary_pred(__i))
+16535:      {
+16535:        ++__i;
+16535:        --__n;
+16535:      }
+16535:    if (__n == 1)
+16535:      return __first;
+16535:    if (__i == __last)
+16535:      return __last;
+16535:    __first = std::__find_if(++__i, __last, __unary_pred);
+16535:  }
+16535:       return __last;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _RandomAccessIter, typename _Integer,
+16535:     typename _UnaryPredicate>
+16535:     _RandomAccessIter
+16535:     __search_n_aux(_RandomAccessIter __first, _RandomAccessIter __last,
+16535:      _Integer __count, _UnaryPredicate __unary_pred,
+16535:      std::random_access_iterator_tag)
+16535:     {
+16535:       typedef typename std::iterator_traits<_RandomAccessIter>::difference_type
+16535:  _DistanceType;
+16535: 
+16535:       _DistanceType __tailSize = __last - __first;
+16535:       _DistanceType __remainder = __count;
+16535: 
+16535:       while (__remainder <= __tailSize)
+16535:  {
+16535:    __first += __remainder;
+16535:    __tailSize -= __remainder;
+16535: 
+16535: 
+16535:    _RandomAccessIter __backTrack = __first;
+16535:    while (__unary_pred(--__backTrack))
+16535:      {
+16535:        if (--__remainder == 0)
+16535:   return (__first - __count);
+16535:      }
+16535:    __remainder = __count + 1 - (__first - __backTrack);
+16535:  }
+16535:       return __last;
+16535:     }
+16535: 
+16535:   template<typename _ForwardIterator, typename _Integer,
+16535:     typename _UnaryPredicate>
+16535:     _ForwardIterator
+16535:     __search_n(_ForwardIterator __first, _ForwardIterator __last,
+16535:         _Integer __count,
+16535:         _UnaryPredicate __unary_pred)
+16535:     {
+16535:       if (__count <= 0)
+16535:  return __first;
+16535: 
+16535:       if (__count == 1)
+16535:  return std::__find_if(__first, __last, __unary_pred);
+16535: 
+16535:       return std::__search_n_aux(__first, __last, __count, __unary_pred,
+16535:      std::__iterator_category(__first));
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _ForwardIterator1, typename _ForwardIterator2,
+16535:     typename _BinaryPredicate>
+16535:     _ForwardIterator1
+16535:     __find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+16535:         _ForwardIterator2 __first2, _ForwardIterator2 __last2,
+16535:         forward_iterator_tag, forward_iterator_tag,
+16535:         _BinaryPredicate __comp)
+16535:     {
+16535:       if (__first2 == __last2)
+16535:  return __last1;
+16535: 
+16535:       _ForwardIterator1 __result = __last1;
+16535:       while (1)
+16535:  {
+16535:    _ForwardIterator1 __new_result
+16535:      = std::__search(__first1, __last1, __first2, __last2, __comp);
+16535:    if (__new_result == __last1)
+16535:      return __result;
+16535:    else
+16535:      {
+16535:        __result = __new_result;
+16535:        __first1 = __new_result;
+16535:        ++__first1;
+16535:      }
+16535:  }
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
+16535:     typename _BinaryPredicate>
+16535:     _BidirectionalIterator1
+16535:     __find_end(_BidirectionalIterator1 __first1,
+16535:         _BidirectionalIterator1 __last1,
+16535:         _BidirectionalIterator2 __first2,
+16535:         _BidirectionalIterator2 __last2,
+16535:         bidirectional_iterator_tag, bidirectional_iterator_tag,
+16535:         _BinaryPredicate __comp)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       typedef reverse_iterator<_BidirectionalIterator1> _RevIterator1;
+16535:       typedef reverse_iterator<_BidirectionalIterator2> _RevIterator2;
+16535: 
+16535:       _RevIterator1 __rlast1(__first1);
+16535:       _RevIterator2 __rlast2(__first2);
+16535:       _RevIterator1 __rresult = std::__search(_RevIterator1(__last1), __rlast1,
+16535:            _RevIterator2(__last2), __rlast2,
+16535:            __comp);
+16535: 
+16535:       if (__rresult == __rlast1)
+16535:  return __last1;
+16535:       else
+16535:  {
+16535:    _BidirectionalIterator1 __result = __rresult.base();
+16535:    std::advance(__result, -std::distance(__first2, __last2));
+16535:    return __result;
+16535:  }
+16535:     }
+16535: # 423 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator1, typename _ForwardIterator2>
+16535:     inline _ForwardIterator1
+16535:     find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+16535:       _ForwardIterator2 __first2, _ForwardIterator2 __last2)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__find_end(__first1, __last1, __first2, __last2,
+16535:         std::__iterator_category(__first1),
+16535:         std::__iterator_category(__first2),
+16535:         __gnu_cxx::__ops::__iter_equal_to_iter());
+16535:     }
+16535: # 471 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator1, typename _ForwardIterator2,
+16535:     typename _BinaryPredicate>
+16535:     inline _ForwardIterator1
+16535:     find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+16535:       _ForwardIterator2 __first2, _ForwardIterator2 __last2,
+16535:       _BinaryPredicate __comp)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__find_end(__first1, __last1, __first2, __last2,
+16535:         std::__iterator_category(__first1),
+16535:         std::__iterator_category(__first2),
+16535:         __gnu_cxx::__ops::__iter_comp_iter(__comp));
+16535:     }
+16535: # 506 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _Predicate>
+16535:     inline bool
+16535:     all_of(_InputIterator __first, _InputIterator __last, _Predicate __pred)
+16535:     { return __last == std::find_if_not(__first, __last, __pred); }
+16535: # 523 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _Predicate>
+16535:     inline bool
+16535:     none_of(_InputIterator __first, _InputIterator __last, _Predicate __pred)
+16535:     { return __last == std::find_if(__first, __last, __pred); }
+16535: # 541 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _Predicate>
+16535:     inline bool
+16535:     any_of(_InputIterator __first, _InputIterator __last, _Predicate __pred)
+16535:     { return !std::none_of(__first, __last, __pred); }
+16535: # 556 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _Predicate>
+16535:     inline _InputIterator
+16535:     find_if_not(_InputIterator __first, _InputIterator __last,
+16535:   _Predicate __pred)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:       ;
+16535:       return std::__find_if_not(__first, __last,
+16535:     __gnu_cxx::__ops::__pred_iter(__pred));
+16535:     }
+16535: # 580 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _Predicate>
+16535:     inline bool
+16535:     is_partitioned(_InputIterator __first, _InputIterator __last,
+16535:      _Predicate __pred)
+16535:     {
+16535:       __first = std::find_if_not(__first, __last, __pred);
+16535:       if (__first == __last)
+16535:  return true;
+16535:       ++__first;
+16535:       return std::none_of(__first, __last, __pred);
+16535:     }
+16535: # 601 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _Predicate>
+16535:     _ForwardIterator
+16535:     partition_point(_ForwardIterator __first, _ForwardIterator __last,
+16535:       _Predicate __pred)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535: 
+16535: 
+16535:       ;
+16535: 
+16535:       typedef typename iterator_traits<_ForwardIterator>::difference_type
+16535:  _DistanceType;
+16535: 
+16535:       _DistanceType __len = std::distance(__first, __last);
+16535:       _DistanceType __half;
+16535:       _ForwardIterator __middle;
+16535: 
+16535:       while (__len > 0)
+16535:  {
+16535:    __half = __len >> 1;
+16535:    __middle = __first;
+16535:    std::advance(__middle, __half);
+16535:    if (__pred(*__middle))
+16535:      {
+16535:        __first = __middle;
+16535:        ++__first;
+16535:        __len = __len - __half - 1;
+16535:      }
+16535:    else
+16535:      __len = __half;
+16535:  }
+16535:       return __first;
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _InputIterator, typename _OutputIterator,
+16535:     typename _Predicate>
+16535:     _OutputIterator
+16535:     __remove_copy_if(_InputIterator __first, _InputIterator __last,
+16535:        _OutputIterator __result, _Predicate __pred)
+16535:     {
+16535:       for (; __first != __last; ++__first)
+16535:  if (!__pred(__first))
+16535:    {
+16535:      *__result = *__first;
+16535:      ++__result;
+16535:    }
+16535:       return __result;
+16535:     }
+16535: # 668 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _OutputIterator, typename _Tp>
+16535:     inline _OutputIterator
+16535:     remove_copy(_InputIterator __first, _InputIterator __last,
+16535:   _OutputIterator __result, const _Tp& __value)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__remove_copy_if(__first, __last, __result,
+16535:  __gnu_cxx::__ops::__iter_equals_val(__value));
+16535:     }
+16535: # 700 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _OutputIterator,
+16535:     typename _Predicate>
+16535:     inline _OutputIterator
+16535:     remove_copy_if(_InputIterator __first, _InputIterator __last,
+16535:      _OutputIterator __result, _Predicate __pred)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__remove_copy_if(__first, __last, __result,
+16535:        __gnu_cxx::__ops::__pred_iter(__pred));
+16535:     }
+16535: # 734 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _OutputIterator,
+16535:     typename _Predicate>
+16535:     _OutputIterator
+16535:     copy_if(_InputIterator __first, _InputIterator __last,
+16535:      _OutputIterator __result, _Predicate __pred)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       for (; __first != __last; ++__first)
+16535:  if (__pred(*__first))
+16535:    {
+16535:      *__result = *__first;
+16535:      ++__result;
+16535:    }
+16535:       return __result;
+16535:     }
+16535: 
+16535:   template<typename _InputIterator, typename _Size, typename _OutputIterator>
+16535:     _OutputIterator
+16535:     __copy_n(_InputIterator __first, _Size __n,
+16535:       _OutputIterator __result, input_iterator_tag)
+16535:     {
+16535:       if (__n > 0)
+16535:  {
+16535:    while (true)
+16535:      {
+16535:        *__result = *__first;
+16535:        ++__result;
+16535:        if (--__n > 0)
+16535:   ++__first;
+16535:        else
+16535:   break;
+16535:      }
+16535:  }
+16535:       return __result;
+16535:     }
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Size,
+16535:     typename _OutputIterator>
+16535:     inline _OutputIterator
+16535:     __copy_n(_RandomAccessIterator __first, _Size __n,
+16535:       _OutputIterator __result, random_access_iterator_tag)
+16535:     { return std::copy(__first, __first + __n, __result); }
+16535: # 797 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _Size, typename _OutputIterator>
+16535:     inline _OutputIterator
+16535:     copy_n(_InputIterator __first, _Size __n, _OutputIterator __result)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535: 
+16535:       return std::__copy_n(__first, __n, __result,
+16535:       std::__iterator_category(__first));
+16535:     }
+16535: # 825 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _OutputIterator1,
+16535:     typename _OutputIterator2, typename _Predicate>
+16535:     pair<_OutputIterator1, _OutputIterator2>
+16535:     partition_copy(_InputIterator __first, _InputIterator __last,
+16535:      _OutputIterator1 __out_true, _OutputIterator2 __out_false,
+16535:      _Predicate __pred)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       for (; __first != __last; ++__first)
+16535:  if (__pred(*__first))
+16535:    {
+16535:      *__out_true = *__first;
+16535:      ++__out_true;
+16535:    }
+16535:  else
+16535:    {
+16535:      *__out_false = *__first;
+16535:      ++__out_false;
+16535:    }
+16535: 
+16535:       return pair<_OutputIterator1, _OutputIterator2>(__out_true, __out_false);
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _ForwardIterator, typename _Predicate>
+16535:     _ForwardIterator
+16535:     __remove_if(_ForwardIterator __first, _ForwardIterator __last,
+16535:   _Predicate __pred)
+16535:     {
+16535:       __first = std::__find_if(__first, __last, __pred);
+16535:       if (__first == __last)
+16535:  return __first;
+16535:       _ForwardIterator __result = __first;
+16535:       ++__first;
+16535:       for (; __first != __last; ++__first)
+16535:  if (!__pred(__first))
+16535:    {
+16535:      *__result = std::move(*__first);
+16535:      ++__result;
+16535:    }
+16535:       return __result;
+16535:     }
+16535: # 894 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _Tp>
+16535:     inline _ForwardIterator
+16535:     remove(_ForwardIterator __first, _ForwardIterator __last,
+16535:     const _Tp& __value)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__remove_if(__first, __last,
+16535:   __gnu_cxx::__ops::__iter_equals_val(__value));
+16535:     }
+16535: # 927 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _Predicate>
+16535:     inline _ForwardIterator
+16535:     remove_if(_ForwardIterator __first, _ForwardIterator __last,
+16535:        _Predicate __pred)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__remove_if(__first, __last,
+16535:          __gnu_cxx::__ops::__pred_iter(__pred));
+16535:     }
+16535: 
+16535:   template<typename _ForwardIterator, typename _BinaryPredicate>
+16535:     _ForwardIterator
+16535:     __adjacent_find(_ForwardIterator __first, _ForwardIterator __last,
+16535:       _BinaryPredicate __binary_pred)
+16535:     {
+16535:       if (__first == __last)
+16535:  return __last;
+16535:       _ForwardIterator __next = __first;
+16535:       while (++__next != __last)
+16535:  {
+16535:    if (__binary_pred(__first, __next))
+16535:      return __first;
+16535:    __first = __next;
+16535:  }
+16535:       return __last;
+16535:     }
+16535: 
+16535:   template<typename _ForwardIterator, typename _BinaryPredicate>
+16535:     _ForwardIterator
+16535:     __unique(_ForwardIterator __first, _ForwardIterator __last,
+16535:       _BinaryPredicate __binary_pred)
+16535:     {
+16535: 
+16535:       __first = std::__adjacent_find(__first, __last, __binary_pred);
+16535:       if (__first == __last)
+16535:  return __last;
+16535: 
+16535: 
+16535:       _ForwardIterator __dest = __first;
+16535:       ++__first;
+16535:       while (++__first != __last)
+16535:  if (!__binary_pred(__dest, __first))
+16535:    *++__dest = std::move(*__first);
+16535:       return ++__dest;
+16535:     }
+16535: # 993 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator>
+16535:     inline _ForwardIterator
+16535:     unique(_ForwardIterator __first, _ForwardIterator __last)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__unique(__first, __last,
+16535:       __gnu_cxx::__ops::__iter_equal_to_iter());
+16535:     }
+16535: # 1023 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _BinaryPredicate>
+16535:     inline _ForwardIterator
+16535:     unique(_ForwardIterator __first, _ForwardIterator __last,
+16535:     _BinaryPredicate __binary_pred)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__unique(__first, __last,
+16535:       __gnu_cxx::__ops::__iter_comp_iter(__binary_pred));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _ForwardIterator, typename _OutputIterator,
+16535:     typename _BinaryPredicate>
+16535:     _OutputIterator
+16535:     __unique_copy(_ForwardIterator __first, _ForwardIterator __last,
+16535:     _OutputIterator __result, _BinaryPredicate __binary_pred,
+16535:     forward_iterator_tag, output_iterator_tag)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535: 
+16535: 
+16535:       _ForwardIterator __next = __first;
+16535:       *__result = *__first;
+16535:       while (++__next != __last)
+16535:  if (!__binary_pred(__first, __next))
+16535:    {
+16535:      __first = __next;
+16535:      *++__result = *__first;
+16535:    }
+16535:       return ++__result;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _InputIterator, typename _OutputIterator,
+16535:     typename _BinaryPredicate>
+16535:     _OutputIterator
+16535:     __unique_copy(_InputIterator __first, _InputIterator __last,
+16535:     _OutputIterator __result, _BinaryPredicate __binary_pred,
+16535:     input_iterator_tag, output_iterator_tag)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535: 
+16535: 
+16535:       typename iterator_traits<_InputIterator>::value_type __value = *__first;
+16535:       __decltype(__gnu_cxx::__ops::__iter_comp_val(__binary_pred))
+16535:  __rebound_pred
+16535:  = __gnu_cxx::__ops::__iter_comp_val(__binary_pred);
+16535:       *__result = __value;
+16535:       while (++__first != __last)
+16535:  if (!__rebound_pred(__first, __value))
+16535:    {
+16535:      __value = *__first;
+16535:      *++__result = __value;
+16535:    }
+16535:       return ++__result;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _InputIterator, typename _ForwardIterator,
+16535:     typename _BinaryPredicate>
+16535:     _ForwardIterator
+16535:     __unique_copy(_InputIterator __first, _InputIterator __last,
+16535:     _ForwardIterator __result, _BinaryPredicate __binary_pred,
+16535:     input_iterator_tag, forward_iterator_tag)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       *__result = *__first;
+16535:       while (++__first != __last)
+16535:  if (!__binary_pred(__result, __first))
+16535:    *++__result = *__first;
+16535:       return ++__result;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _BidirectionalIterator>
+16535:     void
+16535:     __reverse(_BidirectionalIterator __first, _BidirectionalIterator __last,
+16535:        bidirectional_iterator_tag)
+16535:     {
+16535:       while (true)
+16535:  if (__first == __last || __first == --__last)
+16535:    return;
+16535:  else
+16535:    {
+16535:      std::iter_swap(__first, __last);
+16535:      ++__first;
+16535:    }
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _RandomAccessIterator>
+16535:     void
+16535:     __reverse(_RandomAccessIterator __first, _RandomAccessIterator __last,
+16535:        random_access_iterator_tag)
+16535:     {
+16535:       if (__first == __last)
+16535:  return;
+16535:       --__last;
+16535:       while (__first < __last)
+16535:  {
+16535:    std::iter_swap(__first, __last);
+16535:    ++__first;
+16535:    --__last;
+16535:  }
+16535:     }
+16535: # 1178 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _BidirectionalIterator>
+16535:     inline void
+16535:     reverse(_BidirectionalIterator __first, _BidirectionalIterator __last)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535:       std::__reverse(__first, __last, std::__iterator_category(__first));
+16535:     }
+16535: # 1205 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _BidirectionalIterator, typename _OutputIterator>
+16535:     _OutputIterator
+16535:     reverse_copy(_BidirectionalIterator __first, _BidirectionalIterator __last,
+16535:    _OutputIterator __result)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       while (__first != __last)
+16535:  {
+16535:    --__last;
+16535:    *__result = *__last;
+16535:    ++__result;
+16535:  }
+16535:       return __result;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _EuclideanRingElement>
+16535:     _EuclideanRingElement
+16535:     __gcd(_EuclideanRingElement __m, _EuclideanRingElement __n)
+16535:     {
+16535:       while (__n != 0)
+16535:  {
+16535:    _EuclideanRingElement __t = __m % __n;
+16535:    __m = __n;
+16535:    __n = __t;
+16535:  }
+16535:       return __m;
+16535:     }
+16535: 
+16535:   inline namespace _V2
+16535:   {
+16535: 
+16535: 
+16535:   template<typename _ForwardIterator>
+16535:     _ForwardIterator
+16535:     __rotate(_ForwardIterator __first,
+16535:       _ForwardIterator __middle,
+16535:       _ForwardIterator __last,
+16535:       forward_iterator_tag)
+16535:     {
+16535:       if (__first == __middle)
+16535:  return __last;
+16535:       else if (__last == __middle)
+16535:  return __first;
+16535: 
+16535:       _ForwardIterator __first2 = __middle;
+16535:       do
+16535:  {
+16535:    std::iter_swap(__first, __first2);
+16535:    ++__first;
+16535:    ++__first2;
+16535:    if (__first == __middle)
+16535:      __middle = __first2;
+16535:  }
+16535:       while (__first2 != __last);
+16535: 
+16535:       _ForwardIterator __ret = __first;
+16535: 
+16535:       __first2 = __middle;
+16535: 
+16535:       while (__first2 != __last)
+16535:  {
+16535:    std::iter_swap(__first, __first2);
+16535:    ++__first;
+16535:    ++__first2;
+16535:    if (__first == __middle)
+16535:      __middle = __first2;
+16535:    else if (__first2 == __last)
+16535:      __first2 = __middle;
+16535:  }
+16535:       return __ret;
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _BidirectionalIterator>
+16535:     _BidirectionalIterator
+16535:     __rotate(_BidirectionalIterator __first,
+16535:       _BidirectionalIterator __middle,
+16535:       _BidirectionalIterator __last,
+16535:        bidirectional_iterator_tag)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       if (__first == __middle)
+16535:  return __last;
+16535:       else if (__last == __middle)
+16535:  return __first;
+16535: 
+16535:       std::__reverse(__first, __middle, bidirectional_iterator_tag());
+16535:       std::__reverse(__middle, __last, bidirectional_iterator_tag());
+16535: 
+16535:       while (__first != __middle && __middle != __last)
+16535:  {
+16535:    std::iter_swap(__first, --__last);
+16535:    ++__first;
+16535:  }
+16535: 
+16535:       if (__first == __middle)
+16535:  {
+16535:    std::__reverse(__middle, __last, bidirectional_iterator_tag());
+16535:    return __last;
+16535:  }
+16535:       else
+16535:  {
+16535:    std::__reverse(__first, __middle, bidirectional_iterator_tag());
+16535:    return __first;
+16535:  }
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _RandomAccessIterator>
+16535:     _RandomAccessIterator
+16535:     __rotate(_RandomAccessIterator __first,
+16535:       _RandomAccessIterator __middle,
+16535:       _RandomAccessIterator __last,
+16535:       random_access_iterator_tag)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       if (__first == __middle)
+16535:  return __last;
+16535:       else if (__last == __middle)
+16535:  return __first;
+16535: 
+16535:       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+16535:  _Distance;
+16535:       typedef typename iterator_traits<_RandomAccessIterator>::value_type
+16535:  _ValueType;
+16535: 
+16535:       _Distance __n = __last - __first;
+16535:       _Distance __k = __middle - __first;
+16535: 
+16535:       if (__k == __n - __k)
+16535:  {
+16535:    std::swap_ranges(__first, __middle, __middle);
+16535:    return __middle;
+16535:  }
+16535: 
+16535:       _RandomAccessIterator __p = __first;
+16535:       _RandomAccessIterator __ret = __first + (__last - __middle);
+16535: 
+16535:       for (;;)
+16535:  {
+16535:    if (__k < __n - __k)
+16535:      {
+16535:        if (__is_pod(_ValueType) && __k == 1)
+16535:   {
+16535:     _ValueType __t = std::move(*__p);
+16535:     std::move(__p + 1, __p + __n, __p);
+16535:     *(__p + __n - 1) = std::move(__t);
+16535:     return __ret;
+16535:   }
+16535:        _RandomAccessIterator __q = __p + __k;
+16535:        for (_Distance __i = 0; __i < __n - __k; ++ __i)
+16535:   {
+16535:     std::iter_swap(__p, __q);
+16535:     ++__p;
+16535:     ++__q;
+16535:   }
+16535:        __n %= __k;
+16535:        if (__n == 0)
+16535:   return __ret;
+16535:        std::swap(__n, __k);
+16535:        __k = __n - __k;
+16535:      }
+16535:    else
+16535:      {
+16535:        __k = __n - __k;
+16535:        if (__is_pod(_ValueType) && __k == 1)
+16535:   {
+16535:     _ValueType __t = std::move(*(__p + __n - 1));
+16535:     std::move_backward(__p, __p + __n - 1, __p + __n);
+16535:     *__p = std::move(__t);
+16535:     return __ret;
+16535:   }
+16535:        _RandomAccessIterator __q = __p + __n;
+16535:        __p = __q - __k;
+16535:        for (_Distance __i = 0; __i < __n - __k; ++ __i)
+16535:   {
+16535:     --__p;
+16535:     --__q;
+16535:     std::iter_swap(__p, __q);
+16535:   }
+16535:        __n %= __k;
+16535:        if (__n == 0)
+16535:   return __ret;
+16535:        std::swap(__n, __k);
+16535:      }
+16535:  }
+16535:     }
+16535: # 1432 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator>
+16535:     inline _ForwardIterator
+16535:     rotate(_ForwardIterator __first, _ForwardIterator __middle,
+16535:     _ForwardIterator __last)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__rotate(__first, __middle, __last,
+16535:       std::__iterator_category(__first));
+16535:     }
+16535: 
+16535:   }
+16535: # 1469 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _OutputIterator>
+16535:     inline _OutputIterator
+16535:     rotate_copy(_ForwardIterator __first, _ForwardIterator __middle,
+16535:   _ForwardIterator __last, _OutputIterator __result)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::copy(__first, __middle,
+16535:          std::copy(__middle, __last, __result));
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _ForwardIterator, typename _Predicate>
+16535:     _ForwardIterator
+16535:     __partition(_ForwardIterator __first, _ForwardIterator __last,
+16535:   _Predicate __pred, forward_iterator_tag)
+16535:     {
+16535:       if (__first == __last)
+16535:  return __first;
+16535: 
+16535:       while (__pred(*__first))
+16535:  if (++__first == __last)
+16535:    return __first;
+16535: 
+16535:       _ForwardIterator __next = __first;
+16535: 
+16535:       while (++__next != __last)
+16535:  if (__pred(*__next))
+16535:    {
+16535:      std::iter_swap(__first, __next);
+16535:      ++__first;
+16535:    }
+16535: 
+16535:       return __first;
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _BidirectionalIterator, typename _Predicate>
+16535:     _BidirectionalIterator
+16535:     __partition(_BidirectionalIterator __first, _BidirectionalIterator __last,
+16535:   _Predicate __pred, bidirectional_iterator_tag)
+16535:     {
+16535:       while (true)
+16535:  {
+16535:    while (true)
+16535:      if (__first == __last)
+16535:        return __first;
+16535:      else if (__pred(*__first))
+16535:        ++__first;
+16535:      else
+16535:        break;
+16535:    --__last;
+16535:    while (true)
+16535:      if (__first == __last)
+16535:        return __first;
+16535:      else if (!bool(__pred(*__last)))
+16535:        --__last;
+16535:      else
+16535:        break;
+16535:    std::iter_swap(__first, __last);
+16535:    ++__first;
+16535:  }
+16535:     }
+16535: # 1546 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _Pointer, typename _Predicate,
+16535:     typename _Distance>
+16535:     _ForwardIterator
+16535:     __stable_partition_adaptive(_ForwardIterator __first,
+16535:     _ForwardIterator __last,
+16535:     _Predicate __pred, _Distance __len,
+16535:     _Pointer __buffer,
+16535:     _Distance __buffer_size)
+16535:     {
+16535:       if (__len == 1)
+16535:  return __first;
+16535: 
+16535:       if (__len <= __buffer_size)
+16535:  {
+16535:    _ForwardIterator __result1 = __first;
+16535:    _Pointer __result2 = __buffer;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:    *__result2 = std::move(*__first);
+16535:    ++__result2;
+16535:    ++__first;
+16535:    for (; __first != __last; ++__first)
+16535:      if (__pred(__first))
+16535:        {
+16535:   *__result1 = std::move(*__first);
+16535:   ++__result1;
+16535:        }
+16535:      else
+16535:        {
+16535:   *__result2 = std::move(*__first);
+16535:   ++__result2;
+16535:        }
+16535: 
+16535:    std::move(__buffer, __result2, __result1);
+16535:    return __result1;
+16535:  }
+16535: 
+16535:       _ForwardIterator __middle = __first;
+16535:       std::advance(__middle, __len / 2);
+16535:       _ForwardIterator __left_split =
+16535:  std::__stable_partition_adaptive(__first, __middle, __pred,
+16535:       __len / 2, __buffer,
+16535:       __buffer_size);
+16535: 
+16535: 
+16535: 
+16535:       _Distance __right_len = __len - __len / 2;
+16535:       _ForwardIterator __right_split =
+16535:  std::__find_if_not_n(__middle, __right_len, __pred);
+16535: 
+16535:       if (__right_len)
+16535:  __right_split =
+16535:    std::__stable_partition_adaptive(__right_split, __last, __pred,
+16535:         __right_len,
+16535:         __buffer, __buffer_size);
+16535: 
+16535:       std::rotate(__left_split, __middle, __right_split);
+16535:       std::advance(__left_split, std::distance(__middle, __right_split));
+16535:       return __left_split;
+16535:     }
+16535: 
+16535:   template<typename _ForwardIterator, typename _Predicate>
+16535:     _ForwardIterator
+16535:     __stable_partition(_ForwardIterator __first, _ForwardIterator __last,
+16535:          _Predicate __pred)
+16535:     {
+16535:       __first = std::__find_if_not(__first, __last, __pred);
+16535: 
+16535:       if (__first == __last)
+16535:  return __first;
+16535: 
+16535:       typedef typename iterator_traits<_ForwardIterator>::value_type
+16535:  _ValueType;
+16535:       typedef typename iterator_traits<_ForwardIterator>::difference_type
+16535:  _DistanceType;
+16535: 
+16535:       _Temporary_buffer<_ForwardIterator, _ValueType> __buf(__first, __last);
+16535:       return
+16535:  std::__stable_partition_adaptive(__first, __last, __pred,
+16535:       _DistanceType(__buf.requested_size()),
+16535:       __buf.begin(),
+16535:       _DistanceType(__buf.size()));
+16535:     }
+16535: # 1649 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _Predicate>
+16535:     inline _ForwardIterator
+16535:     stable_partition(_ForwardIterator __first, _ForwardIterator __last,
+16535:        _Predicate __pred)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__stable_partition(__first, __last,
+16535:          __gnu_cxx::__ops::__pred_iter(__pred));
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     void
+16535:     __heap_select(_RandomAccessIterator __first,
+16535:     _RandomAccessIterator __middle,
+16535:     _RandomAccessIterator __last, _Compare __comp)
+16535:     {
+16535:       std::__make_heap(__first, __middle, __comp);
+16535:       for (_RandomAccessIterator __i = __middle; __i < __last; ++__i)
+16535:  if (__comp(__i, __first))
+16535:    std::__pop_heap(__first, __middle, __i, __comp);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _InputIterator, typename _RandomAccessIterator,
+16535:     typename _Compare>
+16535:     _RandomAccessIterator
+16535:     __partial_sort_copy(_InputIterator __first, _InputIterator __last,
+16535:    _RandomAccessIterator __result_first,
+16535:    _RandomAccessIterator __result_last,
+16535:    _Compare __comp)
+16535:     {
+16535:       typedef typename iterator_traits<_InputIterator>::value_type
+16535:  _InputValueType;
+16535:       typedef iterator_traits<_RandomAccessIterator> _RItTraits;
+16535:       typedef typename _RItTraits::difference_type _DistanceType;
+16535: 
+16535:       if (__result_first == __result_last)
+16535:  return __result_last;
+16535:       _RandomAccessIterator __result_real_last = __result_first;
+16535:       while (__first != __last && __result_real_last != __result_last)
+16535:  {
+16535:    *__result_real_last = *__first;
+16535:    ++__result_real_last;
+16535:    ++__first;
+16535:  }
+16535: 
+16535:       std::__make_heap(__result_first, __result_real_last, __comp);
+16535:       while (__first != __last)
+16535:  {
+16535:    if (__comp(__first, __result_first))
+16535:      std::__adjust_heap(__result_first, _DistanceType(0),
+16535:           _DistanceType(__result_real_last
+16535:           - __result_first),
+16535:           _InputValueType(*__first), __comp);
+16535:    ++__first;
+16535:  }
+16535:       std::__sort_heap(__result_first, __result_real_last, __comp);
+16535:       return __result_real_last;
+16535:     }
+16535: # 1735 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _RandomAccessIterator>
+16535:     inline _RandomAccessIterator
+16535:     partial_sort_copy(_InputIterator __first, _InputIterator __last,
+16535:         _RandomAccessIterator __result_first,
+16535:         _RandomAccessIterator __result_last)
+16535:     {
+16535: # 1749 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:      
+16535:      
+16535: 
+16535:      
+16535: 
+16535:      
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__partial_sort_copy(__first, __last,
+16535:           __result_first, __result_last,
+16535:           __gnu_cxx::__ops::__iter_less_iter());
+16535:     }
+16535: # 1784 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _RandomAccessIterator,
+16535:     typename _Compare>
+16535:     inline _RandomAccessIterator
+16535:     partial_sort_copy(_InputIterator __first, _InputIterator __last,
+16535:         _RandomAccessIterator __result_first,
+16535:         _RandomAccessIterator __result_last,
+16535:         _Compare __comp)
+16535:     {
+16535: # 1800 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:      
+16535:      
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__partial_sort_copy(__first, __last,
+16535:           __result_first, __result_last,
+16535:     __gnu_cxx::__ops::__iter_comp_iter(__comp));
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     void
+16535:     __unguarded_linear_insert(_RandomAccessIterator __last,
+16535:          _Compare __comp)
+16535:     {
+16535:       typename iterator_traits<_RandomAccessIterator>::value_type
+16535:  __val = std::move(*__last);
+16535:       _RandomAccessIterator __next = __last;
+16535:       --__next;
+16535:       while (__comp(__val, __next))
+16535:  {
+16535:    *__last = std::move(*__next);
+16535:    __last = __next;
+16535:    --__next;
+16535:  }
+16535:       *__last = std::move(__val);
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     void
+16535:     __insertion_sort(_RandomAccessIterator __first,
+16535:        _RandomAccessIterator __last, _Compare __comp)
+16535:     {
+16535:       if (__first == __last) return;
+16535: 
+16535:       for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
+16535:  {
+16535:    if (__comp(__i, __first))
+16535:      {
+16535:        typename iterator_traits<_RandomAccessIterator>::value_type
+16535:   __val = std::move(*__i);
+16535:        std::move_backward(__first, __i, __i + 1);
+16535:        *__first = std::move(__val);
+16535:      }
+16535:    else
+16535:      std::__unguarded_linear_insert(__i,
+16535:     __gnu_cxx::__ops::__val_comp_iter(__comp));
+16535:  }
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     inline void
+16535:     __unguarded_insertion_sort(_RandomAccessIterator __first,
+16535:           _RandomAccessIterator __last, _Compare __comp)
+16535:     {
+16535:       for (_RandomAccessIterator __i = __first; __i != __last; ++__i)
+16535:  std::__unguarded_linear_insert(__i,
+16535:     __gnu_cxx::__ops::__val_comp_iter(__comp));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   enum { _S_threshold = 16 };
+16535: 
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     void
+16535:     __final_insertion_sort(_RandomAccessIterator __first,
+16535:       _RandomAccessIterator __last, _Compare __comp)
+16535:     {
+16535:       if (__last - __first > int(_S_threshold))
+16535:  {
+16535:    std::__insertion_sort(__first, __first + int(_S_threshold), __comp);
+16535:    std::__unguarded_insertion_sort(__first + int(_S_threshold), __last,
+16535:        __comp);
+16535:  }
+16535:       else
+16535:  std::__insertion_sort(__first, __last, __comp);
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     _RandomAccessIterator
+16535:     __unguarded_partition(_RandomAccessIterator __first,
+16535:      _RandomAccessIterator __last,
+16535:      _RandomAccessIterator __pivot, _Compare __comp)
+16535:     {
+16535:       while (true)
+16535:  {
+16535:    while (__comp(__first, __pivot))
+16535:      ++__first;
+16535:    --__last;
+16535:    while (__comp(__pivot, __last))
+16535:      --__last;
+16535:    if (!(__first < __last))
+16535:      return __first;
+16535:    std::iter_swap(__first, __last);
+16535:    ++__first;
+16535:  }
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     inline _RandomAccessIterator
+16535:     __unguarded_partition_pivot(_RandomAccessIterator __first,
+16535:     _RandomAccessIterator __last, _Compare __comp)
+16535:     {
+16535:       _RandomAccessIterator __mid = __first + (__last - __first) / 2;
+16535:       std::__move_median_to_first(__first, __first + 1, __mid, __last - 1,
+16535:       __comp);
+16535:       return std::__unguarded_partition(__first + 1, __last, __first, __comp);
+16535:     }
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     inline void
+16535:     __partial_sort(_RandomAccessIterator __first,
+16535:      _RandomAccessIterator __middle,
+16535:      _RandomAccessIterator __last,
+16535:      _Compare __comp)
+16535:     {
+16535:       std::__heap_select(__first, __middle, __last, __comp);
+16535:       std::__sort_heap(__first, __middle, __comp);
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Size, typename _Compare>
+16535:     void
+16535:     __introsort_loop(_RandomAccessIterator __first,
+16535:        _RandomAccessIterator __last,
+16535:        _Size __depth_limit, _Compare __comp)
+16535:     {
+16535:       while (__last - __first > int(_S_threshold))
+16535:  {
+16535:    if (__depth_limit == 0)
+16535:      {
+16535:        std::__partial_sort(__first, __last, __last, __comp);
+16535:        return;
+16535:      }
+16535:    --__depth_limit;
+16535:    _RandomAccessIterator __cut =
+16535:      std::__unguarded_partition_pivot(__first, __last, __comp);
+16535:    std::__introsort_loop(__cut, __last, __depth_limit, __comp);
+16535:    __last = __cut;
+16535:  }
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     inline void
+16535:     __sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
+16535:     _Compare __comp)
+16535:     {
+16535:       if (__first != __last)
+16535:  {
+16535:    std::__introsort_loop(__first, __last,
+16535:     std::__lg(__last - __first) * 2,
+16535:     __comp);
+16535:    std::__final_insertion_sort(__first, __last, __comp);
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Size, typename _Compare>
+16535:     void
+16535:     __introselect(_RandomAccessIterator __first, _RandomAccessIterator __nth,
+16535:     _RandomAccessIterator __last, _Size __depth_limit,
+16535:     _Compare __comp)
+16535:     {
+16535:       while (__last - __first > 3)
+16535:  {
+16535:    if (__depth_limit == 0)
+16535:      {
+16535:        std::__heap_select(__first, __nth + 1, __last, __comp);
+16535: 
+16535:        std::iter_swap(__first, __nth);
+16535:        return;
+16535:      }
+16535:    --__depth_limit;
+16535:    _RandomAccessIterator __cut =
+16535:      std::__unguarded_partition_pivot(__first, __last, __comp);
+16535:    if (__cut <= __nth)
+16535:      __first = __cut;
+16535:    else
+16535:      __last = __cut;
+16535:  }
+16535:       std::__insertion_sort(__first, __last, __comp);
+16535:     }
+16535: # 2021 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _Tp, typename _Compare>
+16535:     inline _ForwardIterator
+16535:     lower_bound(_ForwardIterator __first, _ForwardIterator __last,
+16535:   const _Tp& __val, _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:      
+16535:                     ;
+16535: 
+16535:       return std::__lower_bound(__first, __last, __val,
+16535:     __gnu_cxx::__ops::__iter_comp_val(__comp));
+16535:     }
+16535: 
+16535:   template<typename _ForwardIterator, typename _Tp, typename _Compare>
+16535:     _ForwardIterator
+16535:     __upper_bound(_ForwardIterator __first, _ForwardIterator __last,
+16535:     const _Tp& __val, _Compare __comp)
+16535:     {
+16535:       typedef typename iterator_traits<_ForwardIterator>::difference_type
+16535:  _DistanceType;
+16535: 
+16535:       _DistanceType __len = std::distance(__first, __last);
+16535: 
+16535:       while (__len > 0)
+16535:  {
+16535:    _DistanceType __half = __len >> 1;
+16535:    _ForwardIterator __middle = __first;
+16535:    std::advance(__middle, __half);
+16535:    if (__comp(__val, __middle))
+16535:      __len = __half;
+16535:    else
+16535:      {
+16535:        __first = __middle;
+16535:        ++__first;
+16535:        __len = __len - __half - 1;
+16535:      }
+16535:  }
+16535:       return __first;
+16535:     }
+16535: # 2075 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _Tp>
+16535:     inline _ForwardIterator
+16535:     upper_bound(_ForwardIterator __first, _ForwardIterator __last,
+16535:   const _Tp& __val)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__upper_bound(__first, __last, __val,
+16535:     __gnu_cxx::__ops::__val_less_iter());
+16535:     }
+16535: # 2105 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _Tp, typename _Compare>
+16535:     inline _ForwardIterator
+16535:     upper_bound(_ForwardIterator __first, _ForwardIterator __last,
+16535:   const _Tp& __val, _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:      
+16535:                     ;
+16535: 
+16535:       return std::__upper_bound(__first, __last, __val,
+16535:     __gnu_cxx::__ops::__val_comp_iter(__comp));
+16535:     }
+16535: 
+16535:   template<typename _ForwardIterator, typename _Tp,
+16535:     typename _CompareItTp, typename _CompareTpIt>
+16535:     pair<_ForwardIterator, _ForwardIterator>
+16535:     __equal_range(_ForwardIterator __first, _ForwardIterator __last,
+16535:     const _Tp& __val,
+16535:     _CompareItTp __comp_it_val, _CompareTpIt __comp_val_it)
+16535:     {
+16535:       typedef typename iterator_traits<_ForwardIterator>::difference_type
+16535:  _DistanceType;
+16535: 
+16535:       _DistanceType __len = std::distance(__first, __last);
+16535: 
+16535:       while (__len > 0)
+16535:  {
+16535:    _DistanceType __half = __len >> 1;
+16535:    _ForwardIterator __middle = __first;
+16535:    std::advance(__middle, __half);
+16535:    if (__comp_it_val(__middle, __val))
+16535:      {
+16535:        __first = __middle;
+16535:        ++__first;
+16535:        __len = __len - __half - 1;
+16535:      }
+16535:    else if (__comp_val_it(__val, __middle))
+16535:      __len = __half;
+16535:    else
+16535:      {
+16535:        _ForwardIterator __left
+16535:   = std::__lower_bound(__first, __middle, __val, __comp_it_val);
+16535:        std::advance(__first, __len);
+16535:        _ForwardIterator __right
+16535:   = std::__upper_bound(++__middle, __first, __val, __comp_val_it);
+16535:        return pair<_ForwardIterator, _ForwardIterator>(__left, __right);
+16535:      }
+16535:  }
+16535:       return pair<_ForwardIterator, _ForwardIterator>(__first, __first);
+16535:     }
+16535: # 2176 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _Tp>
+16535:     inline pair<_ForwardIterator, _ForwardIterator>
+16535:     equal_range(_ForwardIterator __first, _ForwardIterator __last,
+16535:   const _Tp& __val)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__equal_range(__first, __last, __val,
+16535:     __gnu_cxx::__ops::__iter_less_val(),
+16535:     __gnu_cxx::__ops::__val_less_iter());
+16535:     }
+16535: # 2212 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _Tp, typename _Compare>
+16535:     inline pair<_ForwardIterator, _ForwardIterator>
+16535:     equal_range(_ForwardIterator __first, _ForwardIterator __last,
+16535:   const _Tp& __val, _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:      
+16535: 
+16535:      
+16535:                     ;
+16535:      
+16535:                     ;
+16535: 
+16535:       return std::__equal_range(__first, __last, __val,
+16535:     __gnu_cxx::__ops::__iter_comp_val(__comp),
+16535:     __gnu_cxx::__ops::__val_comp_iter(__comp));
+16535:     }
+16535: # 2245 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _Tp>
+16535:     bool
+16535:     binary_search(_ForwardIterator __first, _ForwardIterator __last,
+16535:     const _Tp& __val)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       _ForwardIterator __i
+16535:  = std::__lower_bound(__first, __last, __val,
+16535:         __gnu_cxx::__ops::__iter_less_val());
+16535:       return __i != __last && !(__val < *__i);
+16535:     }
+16535: # 2278 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _Tp, typename _Compare>
+16535:     bool
+16535:     binary_search(_ForwardIterator __first, _ForwardIterator __last,
+16535:     const _Tp& __val, _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:      
+16535:                     ;
+16535:      
+16535:                     ;
+16535: 
+16535:       _ForwardIterator __i
+16535:  = std::__lower_bound(__first, __last, __val,
+16535:         __gnu_cxx::__ops::__iter_comp_val(__comp));
+16535:       return __i != __last && !bool(__comp(__val, *__i));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _OutputIterator, typename _Compare>
+16535:     void
+16535:     __move_merge_adaptive(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:      _InputIterator2 __first2, _InputIterator2 __last2,
+16535:      _OutputIterator __result, _Compare __comp)
+16535:     {
+16535:       while (__first1 != __last1 && __first2 != __last2)
+16535:  {
+16535:    if (__comp(__first2, __first1))
+16535:      {
+16535:        *__result = std::move(*__first2);
+16535:        ++__first2;
+16535:      }
+16535:    else
+16535:      {
+16535:        *__result = std::move(*__first1);
+16535:        ++__first1;
+16535:      }
+16535:    ++__result;
+16535:  }
+16535:       if (__first1 != __last1)
+16535:  std::move(__first1, __last1, __result);
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
+16535:     typename _BidirectionalIterator3, typename _Compare>
+16535:     void
+16535:     __move_merge_adaptive_backward(_BidirectionalIterator1 __first1,
+16535:        _BidirectionalIterator1 __last1,
+16535:        _BidirectionalIterator2 __first2,
+16535:        _BidirectionalIterator2 __last2,
+16535:        _BidirectionalIterator3 __result,
+16535:        _Compare __comp)
+16535:     {
+16535:       if (__first1 == __last1)
+16535:  {
+16535:    std::move_backward(__first2, __last2, __result);
+16535:    return;
+16535:  }
+16535:       else if (__first2 == __last2)
+16535:  return;
+16535: 
+16535:       --__last1;
+16535:       --__last2;
+16535:       while (true)
+16535:  {
+16535:    if (__comp(__last2, __last1))
+16535:      {
+16535:        *--__result = std::move(*__last1);
+16535:        if (__first1 == __last1)
+16535:   {
+16535:     std::move_backward(__first2, ++__last2, __result);
+16535:     return;
+16535:   }
+16535:        --__last1;
+16535:      }
+16535:    else
+16535:      {
+16535:        *--__result = std::move(*__last2);
+16535:        if (__first2 == __last2)
+16535:   return;
+16535:        --__last2;
+16535:      }
+16535:  }
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _BidirectionalIterator1, typename _BidirectionalIterator2,
+16535:     typename _Distance>
+16535:     _BidirectionalIterator1
+16535:     __rotate_adaptive(_BidirectionalIterator1 __first,
+16535:         _BidirectionalIterator1 __middle,
+16535:         _BidirectionalIterator1 __last,
+16535:         _Distance __len1, _Distance __len2,
+16535:         _BidirectionalIterator2 __buffer,
+16535:         _Distance __buffer_size)
+16535:     {
+16535:       _BidirectionalIterator2 __buffer_end;
+16535:       if (__len1 > __len2 && __len2 <= __buffer_size)
+16535:  {
+16535:    if (__len2)
+16535:      {
+16535:        __buffer_end = std::move(__middle, __last, __buffer);
+16535:        std::move_backward(__first, __middle, __last);
+16535:        return std::move(__buffer, __buffer_end, __first);
+16535:      }
+16535:    else
+16535:      return __first;
+16535:  }
+16535:       else if (__len1 <= __buffer_size)
+16535:  {
+16535:    if (__len1)
+16535:      {
+16535:        __buffer_end = std::move(__first, __middle, __buffer);
+16535:        std::move(__middle, __last, __first);
+16535:        return std::move_backward(__buffer, __buffer_end, __last);
+16535:      }
+16535:    else
+16535:      return __last;
+16535:  }
+16535:       else
+16535:  {
+16535:    std::rotate(__first, __middle, __last);
+16535:    std::advance(__first, std::distance(__middle, __last));
+16535:    return __first;
+16535:  }
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _BidirectionalIterator, typename _Distance,
+16535:     typename _Pointer, typename _Compare>
+16535:     void
+16535:     __merge_adaptive(_BidirectionalIterator __first,
+16535:        _BidirectionalIterator __middle,
+16535:        _BidirectionalIterator __last,
+16535:        _Distance __len1, _Distance __len2,
+16535:        _Pointer __buffer, _Distance __buffer_size,
+16535:        _Compare __comp)
+16535:     {
+16535:       if (__len1 <= __len2 && __len1 <= __buffer_size)
+16535:  {
+16535:    _Pointer __buffer_end = std::move(__first, __middle, __buffer);
+16535:    std::__move_merge_adaptive(__buffer, __buffer_end, __middle, __last,
+16535:          __first, __comp);
+16535:  }
+16535:       else if (__len2 <= __buffer_size)
+16535:  {
+16535:    _Pointer __buffer_end = std::move(__middle, __last, __buffer);
+16535:    std::__move_merge_adaptive_backward(__first, __middle, __buffer,
+16535:            __buffer_end, __last, __comp);
+16535:  }
+16535:       else
+16535:  {
+16535:    _BidirectionalIterator __first_cut = __first;
+16535:    _BidirectionalIterator __second_cut = __middle;
+16535:    _Distance __len11 = 0;
+16535:    _Distance __len22 = 0;
+16535:    if (__len1 > __len2)
+16535:      {
+16535:        __len11 = __len1 / 2;
+16535:        std::advance(__first_cut, __len11);
+16535:        __second_cut
+16535:   = std::__lower_bound(__middle, __last, *__first_cut,
+16535:          __gnu_cxx::__ops::__iter_comp_val(__comp));
+16535:        __len22 = std::distance(__middle, __second_cut);
+16535:      }
+16535:    else
+16535:      {
+16535:        __len22 = __len2 / 2;
+16535:        std::advance(__second_cut, __len22);
+16535:        __first_cut
+16535:   = std::__upper_bound(__first, __middle, *__second_cut,
+16535:          __gnu_cxx::__ops::__val_comp_iter(__comp));
+16535:        __len11 = std::distance(__first, __first_cut);
+16535:      }
+16535: 
+16535:    _BidirectionalIterator __new_middle
+16535:      = std::__rotate_adaptive(__first_cut, __middle, __second_cut,
+16535:          __len1 - __len11, __len22, __buffer,
+16535:          __buffer_size);
+16535:    std::__merge_adaptive(__first, __first_cut, __new_middle, __len11,
+16535:     __len22, __buffer, __buffer_size, __comp);
+16535:    std::__merge_adaptive(__new_middle, __second_cut, __last,
+16535:     __len1 - __len11,
+16535:     __len2 - __len22, __buffer,
+16535:     __buffer_size, __comp);
+16535:  }
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _BidirectionalIterator, typename _Distance,
+16535:     typename _Compare>
+16535:     void
+16535:     __merge_without_buffer(_BidirectionalIterator __first,
+16535:       _BidirectionalIterator __middle,
+16535:       _BidirectionalIterator __last,
+16535:       _Distance __len1, _Distance __len2,
+16535:       _Compare __comp)
+16535:     {
+16535:       if (__len1 == 0 || __len2 == 0)
+16535:  return;
+16535: 
+16535:       if (__len1 + __len2 == 2)
+16535:  {
+16535:    if (__comp(__middle, __first))
+16535:      std::iter_swap(__first, __middle);
+16535:    return;
+16535:  }
+16535: 
+16535:       _BidirectionalIterator __first_cut = __first;
+16535:       _BidirectionalIterator __second_cut = __middle;
+16535:       _Distance __len11 = 0;
+16535:       _Distance __len22 = 0;
+16535:       if (__len1 > __len2)
+16535:  {
+16535:    __len11 = __len1 / 2;
+16535:    std::advance(__first_cut, __len11);
+16535:    __second_cut
+16535:      = std::__lower_bound(__middle, __last, *__first_cut,
+16535:      __gnu_cxx::__ops::__iter_comp_val(__comp));
+16535:    __len22 = std::distance(__middle, __second_cut);
+16535:  }
+16535:       else
+16535:  {
+16535:    __len22 = __len2 / 2;
+16535:    std::advance(__second_cut, __len22);
+16535:    __first_cut
+16535:      = std::__upper_bound(__first, __middle, *__second_cut,
+16535:      __gnu_cxx::__ops::__val_comp_iter(__comp));
+16535:    __len11 = std::distance(__first, __first_cut);
+16535:  }
+16535: 
+16535:       std::rotate(__first_cut, __middle, __second_cut);
+16535:       _BidirectionalIterator __new_middle = __first_cut;
+16535:       std::advance(__new_middle, std::distance(__middle, __second_cut));
+16535:       std::__merge_without_buffer(__first, __first_cut, __new_middle,
+16535:       __len11, __len22, __comp);
+16535:       std::__merge_without_buffer(__new_middle, __second_cut, __last,
+16535:       __len1 - __len11, __len2 - __len22, __comp);
+16535:     }
+16535: 
+16535:   template<typename _BidirectionalIterator, typename _Compare>
+16535:     void
+16535:     __inplace_merge(_BidirectionalIterator __first,
+16535:       _BidirectionalIterator __middle,
+16535:       _BidirectionalIterator __last,
+16535:       _Compare __comp)
+16535:     {
+16535:       typedef typename iterator_traits<_BidirectionalIterator>::value_type
+16535:    _ValueType;
+16535:       typedef typename iterator_traits<_BidirectionalIterator>::difference_type
+16535:    _DistanceType;
+16535: 
+16535:       if (__first == __middle || __middle == __last)
+16535:  return;
+16535: 
+16535:       const _DistanceType __len1 = std::distance(__first, __middle);
+16535:       const _DistanceType __len2 = std::distance(__middle, __last);
+16535: 
+16535:       typedef _Temporary_buffer<_BidirectionalIterator, _ValueType> _TmpBuf;
+16535:       _TmpBuf __buf(__first, __last);
+16535: 
+16535:       if (__buf.begin() == 0)
+16535:  std::__merge_without_buffer
+16535:    (__first, __middle, __last, __len1, __len2, __comp);
+16535:       else
+16535:  std::__merge_adaptive
+16535:    (__first, __middle, __last, __len1, __len2, __buf.begin(),
+16535:     _DistanceType(__buf.size()), __comp);
+16535:     }
+16535: # 2572 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _BidirectionalIterator>
+16535:     inline void
+16535:     inplace_merge(_BidirectionalIterator __first,
+16535:     _BidirectionalIterator __middle,
+16535:     _BidirectionalIterator __last)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       std::__inplace_merge(__first, __middle, __last,
+16535:       __gnu_cxx::__ops::__iter_less_iter());
+16535:     }
+16535: # 2613 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _BidirectionalIterator, typename _Compare>
+16535:     inline void
+16535:     inplace_merge(_BidirectionalIterator __first,
+16535:     _BidirectionalIterator __middle,
+16535:     _BidirectionalIterator __last,
+16535:     _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       std::__inplace_merge(__first, __middle, __last,
+16535:       __gnu_cxx::__ops::__iter_comp_iter(__comp));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _InputIterator, typename _OutputIterator,
+16535:     typename _Compare>
+16535:     _OutputIterator
+16535:     __move_merge(_InputIterator __first1, _InputIterator __last1,
+16535:    _InputIterator __first2, _InputIterator __last2,
+16535:    _OutputIterator __result, _Compare __comp)
+16535:     {
+16535:       while (__first1 != __last1 && __first2 != __last2)
+16535:  {
+16535:    if (__comp(__first2, __first1))
+16535:      {
+16535:        *__result = std::move(*__first2);
+16535:        ++__first2;
+16535:      }
+16535:    else
+16535:      {
+16535:        *__result = std::move(*__first1);
+16535:        ++__first1;
+16535:      }
+16535:    ++__result;
+16535:  }
+16535:       return std::move(__first2, __last2, std::move(__first1, __last1, __result))
+16535: 
+16535:                   ;
+16535:     }
+16535: 
+16535:   template<typename _RandomAccessIterator1, typename _RandomAccessIterator2,
+16535:     typename _Distance, typename _Compare>
+16535:     void
+16535:     __merge_sort_loop(_RandomAccessIterator1 __first,
+16535:         _RandomAccessIterator1 __last,
+16535:         _RandomAccessIterator2 __result, _Distance __step_size,
+16535:         _Compare __comp)
+16535:     {
+16535:       const _Distance __two_step = 2 * __step_size;
+16535: 
+16535:       while (__last - __first >= __two_step)
+16535:  {
+16535:    __result = std::__move_merge(__first, __first + __step_size,
+16535:            __first + __step_size,
+16535:            __first + __two_step,
+16535:            __result, __comp);
+16535:    __first += __two_step;
+16535:  }
+16535:       __step_size = std::min(_Distance(__last - __first), __step_size);
+16535: 
+16535:       std::__move_merge(__first, __first + __step_size,
+16535:    __first + __step_size, __last, __result, __comp);
+16535:     }
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Distance,
+16535:     typename _Compare>
+16535:     void
+16535:     __chunk_insertion_sort(_RandomAccessIterator __first,
+16535:       _RandomAccessIterator __last,
+16535:       _Distance __chunk_size, _Compare __comp)
+16535:     {
+16535:       while (__last - __first >= __chunk_size)
+16535:  {
+16535:    std::__insertion_sort(__first, __first + __chunk_size, __comp);
+16535:    __first += __chunk_size;
+16535:  }
+16535:       std::__insertion_sort(__first, __last, __comp);
+16535:     }
+16535: 
+16535:   enum { _S_chunk_size = 7 };
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Pointer, typename _Compare>
+16535:     void
+16535:     __merge_sort_with_buffer(_RandomAccessIterator __first,
+16535:         _RandomAccessIterator __last,
+16535:         _Pointer __buffer, _Compare __comp)
+16535:     {
+16535:       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+16535:  _Distance;
+16535: 
+16535:       const _Distance __len = __last - __first;
+16535:       const _Pointer __buffer_last = __buffer + __len;
+16535: 
+16535:       _Distance __step_size = _S_chunk_size;
+16535:       std::__chunk_insertion_sort(__first, __last, __step_size, __comp);
+16535: 
+16535:       while (__step_size < __len)
+16535:  {
+16535:    std::__merge_sort_loop(__first, __last, __buffer,
+16535:      __step_size, __comp);
+16535:    __step_size *= 2;
+16535:    std::__merge_sort_loop(__buffer, __buffer_last, __first,
+16535:      __step_size, __comp);
+16535:    __step_size *= 2;
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Pointer,
+16535:     typename _Distance, typename _Compare>
+16535:     void
+16535:     __stable_sort_adaptive(_RandomAccessIterator __first,
+16535:       _RandomAccessIterator __last,
+16535:       _Pointer __buffer, _Distance __buffer_size,
+16535:       _Compare __comp)
+16535:     {
+16535:       const _Distance __len = (__last - __first + 1) / 2;
+16535:       const _RandomAccessIterator __middle = __first + __len;
+16535:       if (__len > __buffer_size)
+16535:  {
+16535:    std::__stable_sort_adaptive(__first, __middle, __buffer,
+16535:           __buffer_size, __comp);
+16535:    std::__stable_sort_adaptive(__middle, __last, __buffer,
+16535:           __buffer_size, __comp);
+16535:  }
+16535:       else
+16535:  {
+16535:    std::__merge_sort_with_buffer(__first, __middle, __buffer, __comp);
+16535:    std::__merge_sort_with_buffer(__middle, __last, __buffer, __comp);
+16535:  }
+16535:       std::__merge_adaptive(__first, __middle, __last,
+16535:        _Distance(__middle - __first),
+16535:        _Distance(__last - __middle),
+16535:        __buffer, __buffer_size,
+16535:        __comp);
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     void
+16535:     __inplace_stable_sort(_RandomAccessIterator __first,
+16535:      _RandomAccessIterator __last, _Compare __comp)
+16535:     {
+16535:       if (__last - __first < 15)
+16535:  {
+16535:    std::__insertion_sort(__first, __last, __comp);
+16535:    return;
+16535:  }
+16535:       _RandomAccessIterator __middle = __first + (__last - __first) / 2;
+16535:       std::__inplace_stable_sort(__first, __middle, __comp);
+16535:       std::__inplace_stable_sort(__middle, __last, __comp);
+16535:       std::__merge_without_buffer(__first, __middle, __last,
+16535:       __middle - __first,
+16535:       __last - __middle,
+16535:       __comp);
+16535:     }
+16535: # 2785 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _Compare>
+16535:     bool
+16535:     __includes(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:         _InputIterator2 __first2, _InputIterator2 __last2,
+16535:         _Compare __comp)
+16535:     {
+16535:       while (__first1 != __last1 && __first2 != __last2)
+16535:  if (__comp(__first2, __first1))
+16535:    return false;
+16535:  else if (__comp(__first1, __first2))
+16535:    ++__first1;
+16535:  else
+16535:    {
+16535:      ++__first1;
+16535:      ++__first2;
+16535:    }
+16535: 
+16535:       return __first2 == __last2;
+16535:     }
+16535: # 2824 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator1, typename _InputIterator2>
+16535:     inline bool
+16535:     includes(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:       _InputIterator2 __first2, _InputIterator2 __last2)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__includes(__first1, __last1, __first2, __last2,
+16535:         __gnu_cxx::__ops::__iter_less_iter());
+16535:     }
+16535: # 2868 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _Compare>
+16535:     inline bool
+16535:     includes(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:       _InputIterator2 __first2, _InputIterator2 __last2,
+16535:       _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__includes(__first1, __last1, __first2, __last2,
+16535:         __gnu_cxx::__ops::__iter_comp_iter(__comp));
+16535:     }
+16535: # 2903 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _BidirectionalIterator, typename _Compare>
+16535:     bool
+16535:     __next_permutation(_BidirectionalIterator __first,
+16535:          _BidirectionalIterator __last, _Compare __comp)
+16535:     {
+16535:       if (__first == __last)
+16535:  return false;
+16535:       _BidirectionalIterator __i = __first;
+16535:       ++__i;
+16535:       if (__i == __last)
+16535:  return false;
+16535:       __i = __last;
+16535:       --__i;
+16535: 
+16535:       for(;;)
+16535:  {
+16535:    _BidirectionalIterator __ii = __i;
+16535:    --__i;
+16535:    if (__comp(__i, __ii))
+16535:      {
+16535:        _BidirectionalIterator __j = __last;
+16535:        while (!__comp(__i, --__j))
+16535:   {}
+16535:        std::iter_swap(__i, __j);
+16535:        std::__reverse(__ii, __last,
+16535:         std::__iterator_category(__first));
+16535:        return true;
+16535:      }
+16535:    if (__i == __first)
+16535:      {
+16535:        std::__reverse(__first, __last,
+16535:         std::__iterator_category(__first));
+16535:        return false;
+16535:      }
+16535:  }
+16535:     }
+16535: # 2952 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _BidirectionalIterator>
+16535:     inline bool
+16535:     next_permutation(_BidirectionalIterator __first,
+16535:        _BidirectionalIterator __last)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__next_permutation
+16535:  (__first, __last, __gnu_cxx::__ops::__iter_less_iter());
+16535:     }
+16535: # 2984 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _BidirectionalIterator, typename _Compare>
+16535:     inline bool
+16535:     next_permutation(_BidirectionalIterator __first,
+16535:        _BidirectionalIterator __last, _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__next_permutation
+16535:  (__first, __last, __gnu_cxx::__ops::__iter_comp_iter(__comp));
+16535:     }
+16535: 
+16535:   template<typename _BidirectionalIterator, typename _Compare>
+16535:     bool
+16535:     __prev_permutation(_BidirectionalIterator __first,
+16535:          _BidirectionalIterator __last, _Compare __comp)
+16535:     {
+16535:       if (__first == __last)
+16535:  return false;
+16535:       _BidirectionalIterator __i = __first;
+16535:       ++__i;
+16535:       if (__i == __last)
+16535:  return false;
+16535:       __i = __last;
+16535:       --__i;
+16535: 
+16535:       for(;;)
+16535:  {
+16535:    _BidirectionalIterator __ii = __i;
+16535:    --__i;
+16535:    if (__comp(__ii, __i))
+16535:      {
+16535:        _BidirectionalIterator __j = __last;
+16535:        while (!__comp(--__j, __i))
+16535:   {}
+16535:        std::iter_swap(__i, __j);
+16535:        std::__reverse(__ii, __last,
+16535:         std::__iterator_category(__first));
+16535:        return true;
+16535:      }
+16535:    if (__i == __first)
+16535:      {
+16535:        std::__reverse(__first, __last,
+16535:         std::__iterator_category(__first));
+16535:        return false;
+16535:      }
+16535:  }
+16535:     }
+16535: # 3052 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _BidirectionalIterator>
+16535:     inline bool
+16535:     prev_permutation(_BidirectionalIterator __first,
+16535:        _BidirectionalIterator __last)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__prev_permutation(__first, __last,
+16535:          __gnu_cxx::__ops::__iter_less_iter());
+16535:     }
+16535: # 3084 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _BidirectionalIterator, typename _Compare>
+16535:     inline bool
+16535:     prev_permutation(_BidirectionalIterator __first,
+16535:        _BidirectionalIterator __last, _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__prev_permutation(__first, __last,
+16535:     __gnu_cxx::__ops::__iter_comp_iter(__comp));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _InputIterator, typename _OutputIterator,
+16535:     typename _Predicate, typename _Tp>
+16535:     _OutputIterator
+16535:     __replace_copy_if(_InputIterator __first, _InputIterator __last,
+16535:         _OutputIterator __result,
+16535:         _Predicate __pred, const _Tp& __new_value)
+16535:     {
+16535:       for (; __first != __last; ++__first, (void)++__result)
+16535:  if (__pred(__first))
+16535:    *__result = __new_value;
+16535:  else
+16535:    *__result = *__first;
+16535:       return __result;
+16535:     }
+16535: # 3134 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _OutputIterator, typename _Tp>
+16535:     inline _OutputIterator
+16535:     replace_copy(_InputIterator __first, _InputIterator __last,
+16535:    _OutputIterator __result,
+16535:    const _Tp& __old_value, const _Tp& __new_value)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__replace_copy_if(__first, __last, __result,
+16535:    __gnu_cxx::__ops::__iter_equals_val(__old_value),
+16535:            __new_value);
+16535:     }
+16535: # 3168 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _OutputIterator,
+16535:     typename _Predicate, typename _Tp>
+16535:     inline _OutputIterator
+16535:     replace_copy_if(_InputIterator __first, _InputIterator __last,
+16535:       _OutputIterator __result,
+16535:       _Predicate __pred, const _Tp& __new_value)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__replace_copy_if(__first, __last, __result,
+16535:     __gnu_cxx::__ops::__pred_iter(__pred),
+16535:            __new_value);
+16535:     }
+16535: 
+16535:   template<typename _InputIterator, typename _Predicate>
+16535:     typename iterator_traits<_InputIterator>::difference_type
+16535:     __count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred)
+16535:     {
+16535:       typename iterator_traits<_InputIterator>::difference_type __n = 0;
+16535:       for (; __first != __last; ++__first)
+16535:  if (__pred(__first))
+16535:    ++__n;
+16535:       return __n;
+16535:     }
+16535: # 3207 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator>
+16535:     inline bool
+16535:     is_sorted(_ForwardIterator __first, _ForwardIterator __last)
+16535:     { return std::is_sorted_until(__first, __last) == __last; }
+16535: # 3221 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _Compare>
+16535:     inline bool
+16535:     is_sorted(_ForwardIterator __first, _ForwardIterator __last,
+16535:        _Compare __comp)
+16535:     { return std::is_sorted_until(__first, __last, __comp) == __last; }
+16535: 
+16535:   template<typename _ForwardIterator, typename _Compare>
+16535:     _ForwardIterator
+16535:     __is_sorted_until(_ForwardIterator __first, _ForwardIterator __last,
+16535:         _Compare __comp)
+16535:     {
+16535:       if (__first == __last)
+16535:  return __last;
+16535: 
+16535:       _ForwardIterator __next = __first;
+16535:       for (++__next; __next != __last; __first = __next, (void)++__next)
+16535:  if (__comp(__next, __first))
+16535:    return __next;
+16535:       return __next;
+16535:     }
+16535: # 3250 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator>
+16535:     inline _ForwardIterator
+16535:     is_sorted_until(_ForwardIterator __first, _ForwardIterator __last)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__is_sorted_until(__first, __last,
+16535:         __gnu_cxx::__ops::__iter_less_iter());
+16535:     }
+16535: # 3274 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _Compare>
+16535:     inline _ForwardIterator
+16535:     is_sorted_until(_ForwardIterator __first, _ForwardIterator __last,
+16535:       _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__is_sorted_until(__first, __last,
+16535:         __gnu_cxx::__ops::__iter_comp_iter(__comp));
+16535:     }
+16535: # 3299 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _Tp>
+16535:     constexpr
+16535:     inline pair<const _Tp&, const _Tp&>
+16535:     minmax(const _Tp& __a, const _Tp& __b)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:       return __b < __a ? pair<const _Tp&, const _Tp&>(__b, __a)
+16535:          : pair<const _Tp&, const _Tp&>(__a, __b);
+16535:     }
+16535: # 3320 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _Tp, typename _Compare>
+16535:     constexpr
+16535:     inline pair<const _Tp&, const _Tp&>
+16535:     minmax(const _Tp& __a, const _Tp& __b, _Compare __comp)
+16535:     {
+16535:       return __comp(__b, __a) ? pair<const _Tp&, const _Tp&>(__b, __a)
+16535:          : pair<const _Tp&, const _Tp&>(__a, __b);
+16535:     }
+16535: 
+16535:   template<typename _ForwardIterator, typename _Compare>
+16535:     constexpr
+16535:     pair<_ForwardIterator, _ForwardIterator>
+16535:     __minmax_element(_ForwardIterator __first, _ForwardIterator __last,
+16535:        _Compare __comp)
+16535:     {
+16535:       _ForwardIterator __next = __first;
+16535:       if (__first == __last
+16535:    || ++__next == __last)
+16535:  return std::make_pair(__first, __first);
+16535: 
+16535:       _ForwardIterator __min{}, __max{};
+16535:       if (__comp(__next, __first))
+16535:  {
+16535:    __min = __next;
+16535:    __max = __first;
+16535:  }
+16535:       else
+16535:  {
+16535:    __min = __first;
+16535:    __max = __next;
+16535:  }
+16535: 
+16535:       __first = __next;
+16535:       ++__first;
+16535: 
+16535:       while (__first != __last)
+16535:  {
+16535:    __next = __first;
+16535:    if (++__next == __last)
+16535:      {
+16535:        if (__comp(__first, __min))
+16535:   __min = __first;
+16535:        else if (!__comp(__first, __max))
+16535:   __max = __first;
+16535:        break;
+16535:      }
+16535: 
+16535:    if (__comp(__next, __first))
+16535:      {
+16535:        if (__comp(__next, __min))
+16535:   __min = __next;
+16535:        if (!__comp(__first, __max))
+16535:   __max = __first;
+16535:      }
+16535:    else
+16535:      {
+16535:        if (__comp(__first, __min))
+16535:   __min = __first;
+16535:        if (!__comp(__next, __max))
+16535:   __max = __next;
+16535:      }
+16535: 
+16535:    __first = __next;
+16535:    ++__first;
+16535:  }
+16535: 
+16535:       return std::make_pair(__min, __max);
+16535:     }
+16535: # 3400 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator>
+16535:     constexpr
+16535:     inline pair<_ForwardIterator, _ForwardIterator>
+16535:     minmax_element(_ForwardIterator __first, _ForwardIterator __last)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__minmax_element(__first, __last,
+16535:        __gnu_cxx::__ops::__iter_less_iter());
+16535:     }
+16535: # 3428 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _Compare>
+16535:     constexpr
+16535:     inline pair<_ForwardIterator, _ForwardIterator>
+16535:     minmax_element(_ForwardIterator __first, _ForwardIterator __last,
+16535:      _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__minmax_element(__first, __last,
+16535:        __gnu_cxx::__ops::__iter_comp_iter(__comp));
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr
+16535:     inline _Tp
+16535:     min(initializer_list<_Tp> __l)
+16535:     { return *std::min_element(__l.begin(), __l.end()); }
+16535: 
+16535:   template<typename _Tp, typename _Compare>
+16535:     constexpr
+16535:     inline _Tp
+16535:     min(initializer_list<_Tp> __l, _Compare __comp)
+16535:     { return *std::min_element(__l.begin(), __l.end(), __comp); }
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr
+16535:     inline _Tp
+16535:     max(initializer_list<_Tp> __l)
+16535:     { return *std::max_element(__l.begin(), __l.end()); }
+16535: 
+16535:   template<typename _Tp, typename _Compare>
+16535:     constexpr
+16535:     inline _Tp
+16535:     max(initializer_list<_Tp> __l, _Compare __comp)
+16535:     { return *std::max_element(__l.begin(), __l.end(), __comp); }
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr
+16535:     inline pair<_Tp, _Tp>
+16535:     minmax(initializer_list<_Tp> __l)
+16535:     {
+16535:       pair<const _Tp*, const _Tp*> __p =
+16535:  std::minmax_element(__l.begin(), __l.end());
+16535:       return std::make_pair(*__p.first, *__p.second);
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Compare>
+16535:     constexpr
+16535:     inline pair<_Tp, _Tp>
+16535:     minmax(initializer_list<_Tp> __l, _Compare __comp)
+16535:     {
+16535:       pair<const _Tp*, const _Tp*> __p =
+16535:  std::minmax_element(__l.begin(), __l.end(), __comp);
+16535:       return std::make_pair(*__p.first, *__p.second);
+16535:     }
+16535: 
+16535:   template<typename _ForwardIterator1, typename _ForwardIterator2,
+16535:     typename _BinaryPredicate>
+16535:     bool
+16535:     __is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+16535:        _ForwardIterator2 __first2, _BinaryPredicate __pred)
+16535:     {
+16535: 
+16535: 
+16535:       for (; __first1 != __last1; ++__first1, (void)++__first2)
+16535:  if (!__pred(__first1, __first2))
+16535:    break;
+16535: 
+16535:       if (__first1 == __last1)
+16535:  return true;
+16535: 
+16535: 
+16535: 
+16535:       _ForwardIterator2 __last2 = __first2;
+16535:       std::advance(__last2, std::distance(__first1, __last1));
+16535:       for (_ForwardIterator1 __scan = __first1; __scan != __last1; ++__scan)
+16535:  {
+16535:    if (__scan != std::__find_if(__first1, __scan,
+16535:      __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)))
+16535:      continue;
+16535: 
+16535:    auto __matches
+16535:      = std::__count_if(__first2, __last2,
+16535:    __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan));
+16535:    if (0 == __matches ||
+16535:        std::__count_if(__scan, __last1,
+16535:    __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan))
+16535:        != __matches)
+16535:      return false;
+16535:  }
+16535:       return true;
+16535:     }
+16535: # 3540 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator1, typename _ForwardIterator2>
+16535:     inline bool
+16535:     is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+16535:      _ForwardIterator2 __first2)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__is_permutation(__first1, __last1, __first2,
+16535:        __gnu_cxx::__ops::__iter_equal_to_iter());
+16535:     }
+16535: # 3571 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator1, typename _ForwardIterator2,
+16535:     typename _BinaryPredicate>
+16535:     inline bool
+16535:     is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+16535:      _ForwardIterator2 __first2, _BinaryPredicate __pred)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__is_permutation(__first1, __last1, __first2,
+16535:        __gnu_cxx::__ops::__iter_comp_iter(__pred));
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _ForwardIterator1, typename _ForwardIterator2,
+16535:     typename _BinaryPredicate>
+16535:     bool
+16535:     __is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+16535:        _ForwardIterator2 __first2, _ForwardIterator2 __last2,
+16535:        _BinaryPredicate __pred)
+16535:     {
+16535:       using _Cat1
+16535:  = typename iterator_traits<_ForwardIterator1>::iterator_category;
+16535:       using _Cat2
+16535:  = typename iterator_traits<_ForwardIterator2>::iterator_category;
+16535:       using _It1_is_RA = is_same<_Cat1, random_access_iterator_tag>;
+16535:       using _It2_is_RA = is_same<_Cat2, random_access_iterator_tag>;
+16535:       constexpr bool __ra_iters = _It1_is_RA() && _It2_is_RA();
+16535:       if (__ra_iters)
+16535:  {
+16535:    auto __d1 = std::distance(__first1, __last1);
+16535:    auto __d2 = std::distance(__first2, __last2);
+16535:    if (__d1 != __d2)
+16535:      return false;
+16535:  }
+16535: 
+16535: 
+16535: 
+16535:       for (; __first1 != __last1 && __first2 != __last2;
+16535:    ++__first1, (void)++__first2)
+16535:  if (!__pred(__first1, __first2))
+16535:    break;
+16535: 
+16535:       if (__ra_iters)
+16535:  {
+16535:    if (__first1 == __last1)
+16535:      return true;
+16535:  }
+16535:       else
+16535:  {
+16535:    auto __d1 = std::distance(__first1, __last1);
+16535:    auto __d2 = std::distance(__first2, __last2);
+16535:    if (__d1 == 0 && __d2 == 0)
+16535:      return true;
+16535:    if (__d1 != __d2)
+16535:      return false;
+16535:  }
+16535: 
+16535:       for (_ForwardIterator1 __scan = __first1; __scan != __last1; ++__scan)
+16535:  {
+16535:    if (__scan != std::__find_if(__first1, __scan,
+16535:    __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)))
+16535:      continue;
+16535: 
+16535:    auto __matches = std::__count_if(__first2, __last2,
+16535:   __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan));
+16535:    if (0 == __matches
+16535:        || std::__count_if(__scan, __last1,
+16535:    __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan))
+16535:        != __matches)
+16535:      return false;
+16535:  }
+16535:       return true;
+16535:     }
+16535: # 3664 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator1, typename _ForwardIterator2>
+16535:     inline bool
+16535:     is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+16535:      _ForwardIterator2 __first2, _ForwardIterator2 __last2)
+16535:     {
+16535:       ;
+16535:       ;
+16535: 
+16535:       return
+16535:  std::__is_permutation(__first1, __last1, __first2, __last2,
+16535:          __gnu_cxx::__ops::__iter_equal_to_iter());
+16535:     }
+16535: # 3691 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator1, typename _ForwardIterator2,
+16535:     typename _BinaryPredicate>
+16535:     inline bool
+16535:     is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+16535:      _ForwardIterator2 __first2, _ForwardIterator2 __last2,
+16535:      _BinaryPredicate __pred)
+16535:     {
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__is_permutation(__first1, __last1, __first2, __last2,
+16535:        __gnu_cxx::__ops::__iter_comp_iter(__pred));
+16535:     }
+16535: # 3767 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _IntType, typename _UniformRandomBitGenerator>
+16535:     pair<_IntType, _IntType>
+16535:     __gen_two_uniform_ints(_IntType __b0, _IntType __b1,
+16535:       _UniformRandomBitGenerator&& __g)
+16535:     {
+16535:       _IntType __x
+16535:  = uniform_int_distribution<_IntType>{0, (__b0 * __b1) - 1}(__g);
+16535:       return std::make_pair(__x / __b1, __x % __b1);
+16535:     }
+16535: # 3789 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _RandomAccessIterator,
+16535:     typename _UniformRandomNumberGenerator>
+16535:     void
+16535:     shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last,
+16535:      _UniformRandomNumberGenerator&& __g)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       if (__first == __last)
+16535:  return;
+16535: 
+16535:       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+16535:  _DistanceType;
+16535: 
+16535:       typedef typename std::make_unsigned<_DistanceType>::type __ud_type;
+16535:       typedef typename std::uniform_int_distribution<__ud_type> __distr_type;
+16535:       typedef typename __distr_type::param_type __p_type;
+16535: 
+16535:       typedef typename remove_reference<_UniformRandomNumberGenerator>::type
+16535:  _Gen;
+16535:       typedef typename common_type<typename _Gen::result_type, __ud_type>::type
+16535:  __uc_type;
+16535: 
+16535:       const __uc_type __urngrange = __g.max() - __g.min();
+16535:       const __uc_type __urange = __uc_type(__last - __first);
+16535: 
+16535:       if (__urngrange / __urange >= __urange)
+16535: 
+16535:       {
+16535:  _RandomAccessIterator __i = __first + 1;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  if ((__urange % 2) == 0)
+16535:  {
+16535:    __distr_type __d{0, 1};
+16535:    std::iter_swap(__i++, __first + __d(__g));
+16535:  }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  while (__i != __last)
+16535:  {
+16535:    const __uc_type __swap_range = __uc_type(__i - __first) + 1;
+16535: 
+16535:    const pair<__uc_type, __uc_type> __pospos =
+16535:      __gen_two_uniform_ints(__swap_range, __swap_range + 1, __g);
+16535: 
+16535:    std::iter_swap(__i++, __first + __pospos.first);
+16535:    std::iter_swap(__i++, __first + __pospos.second);
+16535:  }
+16535: 
+16535:  return;
+16535:       }
+16535: 
+16535:       __distr_type __d;
+16535: 
+16535:       for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
+16535:  std::iter_swap(__i, __first + __d(__g, __p_type(0, __i - __first)));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 3874 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _Function>
+16535:     _Function
+16535:     for_each(_InputIterator __first, _InputIterator __last, _Function __f)
+16535:     {
+16535: 
+16535:      
+16535:       ;
+16535:       for (; __first != __last; ++__first)
+16535:  __f(*__first);
+16535:       return __f;
+16535:     }
+16535: # 3895 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _Tp>
+16535:     inline _InputIterator
+16535:     find(_InputIterator __first, _InputIterator __last,
+16535:   const _Tp& __val)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:       ;
+16535:       return std::__find_if(__first, __last,
+16535:        __gnu_cxx::__ops::__iter_equals_val(__val));
+16535:     }
+16535: # 3919 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _Predicate>
+16535:     inline _InputIterator
+16535:     find_if(_InputIterator __first, _InputIterator __last,
+16535:      _Predicate __pred)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__find_if(__first, __last,
+16535:        __gnu_cxx::__ops::__pred_iter(__pred));
+16535:     }
+16535: # 3950 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _ForwardIterator>
+16535:     _InputIterator
+16535:     find_first_of(_InputIterator __first1, _InputIterator __last1,
+16535:     _ForwardIterator __first2, _ForwardIterator __last2)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       for (; __first1 != __last1; ++__first1)
+16535:  for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter)
+16535:    if (*__first1 == *__iter)
+16535:      return __first1;
+16535:       return __last1;
+16535:     }
+16535: # 3990 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _ForwardIterator,
+16535:     typename _BinaryPredicate>
+16535:     _InputIterator
+16535:     find_first_of(_InputIterator __first1, _InputIterator __last1,
+16535:     _ForwardIterator __first2, _ForwardIterator __last2,
+16535:     _BinaryPredicate __comp)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       for (; __first1 != __last1; ++__first1)
+16535:  for (_ForwardIterator __iter = __first2; __iter != __last2; ++__iter)
+16535:    if (__comp(*__first1, *__iter))
+16535:      return __first1;
+16535:       return __last1;
+16535:     }
+16535: # 4022 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator>
+16535:     inline _ForwardIterator
+16535:     adjacent_find(_ForwardIterator __first, _ForwardIterator __last)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__adjacent_find(__first, __last,
+16535:       __gnu_cxx::__ops::__iter_equal_to_iter());
+16535:     }
+16535: # 4047 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _BinaryPredicate>
+16535:     inline _ForwardIterator
+16535:     adjacent_find(_ForwardIterator __first, _ForwardIterator __last,
+16535:     _BinaryPredicate __binary_pred)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__adjacent_find(__first, __last,
+16535:    __gnu_cxx::__ops::__iter_comp_iter(__binary_pred));
+16535:     }
+16535: # 4072 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _Tp>
+16535:     inline typename iterator_traits<_InputIterator>::difference_type
+16535:     count(_InputIterator __first, _InputIterator __last, const _Tp& __value)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__count_if(__first, __last,
+16535:         __gnu_cxx::__ops::__iter_equals_val(__value));
+16535:     }
+16535: # 4095 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _Predicate>
+16535:     inline typename iterator_traits<_InputIterator>::difference_type
+16535:     count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__count_if(__first, __last,
+16535:         __gnu_cxx::__ops::__pred_iter(__pred));
+16535:     }
+16535: # 4135 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator1, typename _ForwardIterator2>
+16535:     inline _ForwardIterator1
+16535:     search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+16535:     _ForwardIterator2 __first2, _ForwardIterator2 __last2)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__search(__first1, __last1, __first2, __last2,
+16535:       __gnu_cxx::__ops::__iter_equal_to_iter());
+16535:     }
+16535: # 4174 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator1, typename _ForwardIterator2,
+16535:     typename _BinaryPredicate>
+16535:     inline _ForwardIterator1
+16535:     search(_ForwardIterator1 __first1, _ForwardIterator1 __last1,
+16535:     _ForwardIterator2 __first2, _ForwardIterator2 __last2,
+16535:     _BinaryPredicate __predicate)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__search(__first1, __last1, __first2, __last2,
+16535:       __gnu_cxx::__ops::__iter_comp_iter(__predicate));
+16535:     }
+16535: # 4209 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _Integer, typename _Tp>
+16535:     inline _ForwardIterator
+16535:     search_n(_ForwardIterator __first, _ForwardIterator __last,
+16535:       _Integer __count, const _Tp& __val)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__search_n(__first, __last, __count,
+16535:         __gnu_cxx::__ops::__iter_equals_val(__val));
+16535:     }
+16535: # 4242 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _Integer, typename _Tp,
+16535:     typename _BinaryPredicate>
+16535:     inline _ForwardIterator
+16535:     search_n(_ForwardIterator __first, _ForwardIterator __last,
+16535:       _Integer __count, const _Tp& __val,
+16535:       _BinaryPredicate __binary_pred)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__search_n(__first, __last, __count,
+16535:   __gnu_cxx::__ops::__iter_comp_val(__binary_pred, __val));
+16535:     }
+16535: # 4290 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _OutputIterator,
+16535:     typename _UnaryOperation>
+16535:     _OutputIterator
+16535:     transform(_InputIterator __first, _InputIterator __last,
+16535:        _OutputIterator __result, _UnaryOperation __unary_op)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535: 
+16535:       for (; __first != __last; ++__first, (void)++__result)
+16535:  *__result = __unary_op(*__first);
+16535:       return __result;
+16535:     }
+16535: # 4327 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _OutputIterator, typename _BinaryOperation>
+16535:     _OutputIterator
+16535:     transform(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:        _InputIterator2 __first2, _OutputIterator __result,
+16535:        _BinaryOperation __binary_op)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535: 
+16535:       for (; __first1 != __last1; ++__first1, (void)++__first2, ++__result)
+16535:  *__result = __binary_op(*__first1, *__first2);
+16535:       return __result;
+16535:     }
+16535: # 4360 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _Tp>
+16535:     void
+16535:     replace(_ForwardIterator __first, _ForwardIterator __last,
+16535:      const _Tp& __old_value, const _Tp& __new_value)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       for (; __first != __last; ++__first)
+16535:  if (*__first == __old_value)
+16535:    *__first = __new_value;
+16535:     }
+16535: # 4392 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _Predicate, typename _Tp>
+16535:     void
+16535:     replace_if(_ForwardIterator __first, _ForwardIterator __last,
+16535:         _Predicate __pred, const _Tp& __new_value)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       for (; __first != __last; ++__first)
+16535:  if (__pred(*__first))
+16535:    *__first = __new_value;
+16535:     }
+16535: # 4424 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _Generator>
+16535:     void
+16535:     generate(_ForwardIterator __first, _ForwardIterator __last,
+16535:       _Generator __gen)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       for (; __first != __last; ++__first)
+16535:  *__first = __gen();
+16535:     }
+16535: # 4455 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _OutputIterator, typename _Size, typename _Generator>
+16535:     _OutputIterator
+16535:     generate_n(_OutputIterator __first, _Size __n, _Generator __gen)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535: 
+16535: 
+16535:       for (__decltype(__n + 0) __niter = __n;
+16535:     __niter > 0; --__niter, (void) ++__first)
+16535:  *__first = __gen();
+16535:       return __first;
+16535:     }
+16535: # 4491 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _OutputIterator>
+16535:     inline _OutputIterator
+16535:     unique_copy(_InputIterator __first, _InputIterator __last,
+16535:   _OutputIterator __result)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       if (__first == __last)
+16535:  return __result;
+16535:       return std::__unique_copy(__first, __last, __result,
+16535:     __gnu_cxx::__ops::__iter_equal_to_iter(),
+16535:     std::__iterator_category(__first),
+16535:     std::__iterator_category(__result));
+16535:     }
+16535: # 4531 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator, typename _OutputIterator,
+16535:     typename _BinaryPredicate>
+16535:     inline _OutputIterator
+16535:     unique_copy(_InputIterator __first, _InputIterator __last,
+16535:   _OutputIterator __result,
+16535:   _BinaryPredicate __binary_pred)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       if (__first == __last)
+16535:  return __result;
+16535:       return std::__unique_copy(__first, __last, __result,
+16535:    __gnu_cxx::__ops::__iter_comp_iter(__binary_pred),
+16535:     std::__iterator_category(__first),
+16535:     std::__iterator_category(__result));
+16535:     }
+16535: # 4564 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _RandomAccessIterator>
+16535:     inline void
+16535:     random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       if (__first != __last)
+16535:  for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
+16535:    {
+16535: 
+16535:      _RandomAccessIterator __j = __first
+16535:      + std::rand() % ((__i - __first) + 1);
+16535:      if (__i != __j)
+16535:        std::iter_swap(__i, __j);
+16535:    }
+16535:     }
+16535: # 4599 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _RandomAccessIterator, typename _RandomNumberGenerator>
+16535:     void
+16535:     random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last,
+16535: 
+16535:      _RandomNumberGenerator&& __rand)
+16535: 
+16535: 
+16535: 
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       if (__first == __last)
+16535:  return;
+16535:       for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
+16535:  {
+16535:    _RandomAccessIterator __j = __first + __rand((__i - __first) + 1);
+16535:    if (__i != __j)
+16535:      std::iter_swap(__i, __j);
+16535:  }
+16535:     }
+16535: # 4639 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _Predicate>
+16535:     inline _ForwardIterator
+16535:     partition(_ForwardIterator __first, _ForwardIterator __last,
+16535:        _Predicate __pred)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535: 
+16535:       return std::__partition(__first, __last, __pred,
+16535:          std::__iterator_category(__first));
+16535:     }
+16535: # 4672 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _RandomAccessIterator>
+16535:     inline void
+16535:     partial_sort(_RandomAccessIterator __first,
+16535:    _RandomAccessIterator __middle,
+16535:    _RandomAccessIterator __last)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       std::__partial_sort(__first, __middle, __last,
+16535:      __gnu_cxx::__ops::__iter_less_iter());
+16535:     }
+16535: # 4710 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     inline void
+16535:     partial_sort(_RandomAccessIterator __first,
+16535:    _RandomAccessIterator __middle,
+16535:    _RandomAccessIterator __last,
+16535:    _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       std::__partial_sort(__first, __middle, __last,
+16535:      __gnu_cxx::__ops::__iter_comp_iter(__comp));
+16535:     }
+16535: # 4746 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _RandomAccessIterator>
+16535:     inline void
+16535:     nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth,
+16535:   _RandomAccessIterator __last)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       if (__first == __last || __nth == __last)
+16535:  return;
+16535: 
+16535:       std::__introselect(__first, __nth, __last,
+16535:     std::__lg(__last - __first) * 2,
+16535:     __gnu_cxx::__ops::__iter_less_iter());
+16535:     }
+16535: # 4785 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     inline void
+16535:     nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth,
+16535:   _RandomAccessIterator __last, _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       if (__first == __last || __nth == __last)
+16535:  return;
+16535: 
+16535:       std::__introselect(__first, __nth, __last,
+16535:     std::__lg(__last - __first) * 2,
+16535:     __gnu_cxx::__ops::__iter_comp_iter(__comp));
+16535:     }
+16535: # 4822 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _RandomAccessIterator>
+16535:     inline void
+16535:     sort(_RandomAccessIterator __first, _RandomAccessIterator __last)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
+16535:     }
+16535: # 4852 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     inline void
+16535:     sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
+16535:   _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       std::__sort(__first, __last, __gnu_cxx::__ops::__iter_comp_iter(__comp));
+16535:     }
+16535: 
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _OutputIterator, typename _Compare>
+16535:     _OutputIterator
+16535:     __merge(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:      _InputIterator2 __first2, _InputIterator2 __last2,
+16535:      _OutputIterator __result, _Compare __comp)
+16535:     {
+16535:       while (__first1 != __last1 && __first2 != __last2)
+16535:  {
+16535:    if (__comp(__first2, __first1))
+16535:      {
+16535:        *__result = *__first2;
+16535:        ++__first2;
+16535:      }
+16535:    else
+16535:      {
+16535:        *__result = *__first1;
+16535:        ++__first1;
+16535:      }
+16535:    ++__result;
+16535:  }
+16535:       return std::copy(__first2, __last2,
+16535:          std::copy(__first1, __last1, __result));
+16535:     }
+16535: # 4913 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _OutputIterator>
+16535:     inline _OutputIterator
+16535:     merge(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:    _InputIterator2 __first2, _InputIterator2 __last2,
+16535:    _OutputIterator __result)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__merge(__first1, __last1,
+16535:          __first2, __last2, __result,
+16535:          __gnu_cxx::__ops::__iter_less_iter());
+16535:     }
+16535: # 4963 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _OutputIterator, typename _Compare>
+16535:     inline _OutputIterator
+16535:     merge(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:    _InputIterator2 __first2, _InputIterator2 __last2,
+16535:    _OutputIterator __result, _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__merge(__first1, __last1,
+16535:     __first2, __last2, __result,
+16535:     __gnu_cxx::__ops::__iter_comp_iter(__comp));
+16535:     }
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     inline void
+16535:     __stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
+16535:     _Compare __comp)
+16535:     {
+16535:       typedef typename iterator_traits<_RandomAccessIterator>::value_type
+16535:  _ValueType;
+16535:       typedef typename iterator_traits<_RandomAccessIterator>::difference_type
+16535:  _DistanceType;
+16535: 
+16535:       typedef _Temporary_buffer<_RandomAccessIterator, _ValueType> _TmpBuf;
+16535:       _TmpBuf __buf(__first, __last);
+16535: 
+16535:       if (__buf.begin() == 0)
+16535:  std::__inplace_stable_sort(__first, __last, __comp);
+16535:       else
+16535:  std::__stable_sort_adaptive(__first, __last, __buf.begin(),
+16535:         _DistanceType(__buf.size()), __comp);
+16535:     }
+16535: # 5027 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _RandomAccessIterator>
+16535:     inline void
+16535:     stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       std::__stable_sort(__first, __last,
+16535:         __gnu_cxx::__ops::__iter_less_iter());
+16535:     }
+16535: # 5061 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _RandomAccessIterator, typename _Compare>
+16535:     inline void
+16535:     stable_sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
+16535:   _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       std::__stable_sort(__first, __last,
+16535:         __gnu_cxx::__ops::__iter_comp_iter(__comp));
+16535:     }
+16535: 
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _OutputIterator,
+16535:     typename _Compare>
+16535:     _OutputIterator
+16535:     __set_union(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:   _InputIterator2 __first2, _InputIterator2 __last2,
+16535:   _OutputIterator __result, _Compare __comp)
+16535:     {
+16535:       while (__first1 != __last1 && __first2 != __last2)
+16535:  {
+16535:    if (__comp(__first1, __first2))
+16535:      {
+16535:        *__result = *__first1;
+16535:        ++__first1;
+16535:      }
+16535:    else if (__comp(__first2, __first1))
+16535:      {
+16535:        *__result = *__first2;
+16535:        ++__first2;
+16535:      }
+16535:    else
+16535:      {
+16535:        *__result = *__first1;
+16535:        ++__first1;
+16535:        ++__first2;
+16535:      }
+16535:    ++__result;
+16535:  }
+16535:       return std::copy(__first2, __last2,
+16535:          std::copy(__first1, __last1, __result));
+16535:     }
+16535: # 5130 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _OutputIterator>
+16535:     inline _OutputIterator
+16535:     set_union(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:        _InputIterator2 __first2, _InputIterator2 __last2,
+16535:        _OutputIterator __result)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__set_union(__first1, __last1,
+16535:     __first2, __last2, __result,
+16535:     __gnu_cxx::__ops::__iter_less_iter());
+16535:     }
+16535: # 5180 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _OutputIterator, typename _Compare>
+16535:     inline _OutputIterator
+16535:     set_union(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:        _InputIterator2 __first2, _InputIterator2 __last2,
+16535:        _OutputIterator __result, _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__set_union(__first1, __last1,
+16535:     __first2, __last2, __result,
+16535:     __gnu_cxx::__ops::__iter_comp_iter(__comp));
+16535:     }
+16535: 
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _OutputIterator,
+16535:     typename _Compare>
+16535:     _OutputIterator
+16535:     __set_intersection(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:          _InputIterator2 __first2, _InputIterator2 __last2,
+16535:          _OutputIterator __result, _Compare __comp)
+16535:     {
+16535:       while (__first1 != __last1 && __first2 != __last2)
+16535:  if (__comp(__first1, __first2))
+16535:    ++__first1;
+16535:  else if (__comp(__first2, __first1))
+16535:    ++__first2;
+16535:  else
+16535:    {
+16535:      *__result = *__first1;
+16535:      ++__first1;
+16535:      ++__first2;
+16535:      ++__result;
+16535:    }
+16535:       return __result;
+16535:     }
+16535: # 5251 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _OutputIterator>
+16535:     inline _OutputIterator
+16535:     set_intersection(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:        _InputIterator2 __first2, _InputIterator2 __last2,
+16535:        _OutputIterator __result)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535:      
+16535: 
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__set_intersection(__first1, __last1,
+16535:          __first2, __last2, __result,
+16535:          __gnu_cxx::__ops::__iter_less_iter());
+16535:     }
+16535: # 5300 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _OutputIterator, typename _Compare>
+16535:     inline _OutputIterator
+16535:     set_intersection(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:        _InputIterator2 __first2, _InputIterator2 __last2,
+16535:        _OutputIterator __result, _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535:      
+16535: 
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__set_intersection(__first1, __last1,
+16535:     __first2, __last2, __result,
+16535:     __gnu_cxx::__ops::__iter_comp_iter(__comp));
+16535:     }
+16535: 
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _OutputIterator,
+16535:     typename _Compare>
+16535:     _OutputIterator
+16535:     __set_difference(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:        _InputIterator2 __first2, _InputIterator2 __last2,
+16535:        _OutputIterator __result, _Compare __comp)
+16535:     {
+16535:       while (__first1 != __last1 && __first2 != __last2)
+16535:  if (__comp(__first1, __first2))
+16535:    {
+16535:      *__result = *__first1;
+16535:      ++__first1;
+16535:      ++__result;
+16535:    }
+16535:  else if (__comp(__first2, __first1))
+16535:    ++__first2;
+16535:  else
+16535:    {
+16535:      ++__first1;
+16535:      ++__first2;
+16535:    }
+16535:       return std::copy(__first1, __last1, __result);
+16535:     }
+16535: # 5373 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _OutputIterator>
+16535:     inline _OutputIterator
+16535:     set_difference(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:      _InputIterator2 __first2, _InputIterator2 __last2,
+16535:      _OutputIterator __result)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535:      
+16535: 
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__set_difference(__first1, __last1,
+16535:        __first2, __last2, __result,
+16535:        __gnu_cxx::__ops::__iter_less_iter());
+16535:     }
+16535: # 5424 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _OutputIterator, typename _Compare>
+16535:     inline _OutputIterator
+16535:     set_difference(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:      _InputIterator2 __first2, _InputIterator2 __last2,
+16535:      _OutputIterator __result, _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535:      
+16535: 
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__set_difference(__first1, __last1,
+16535:        __first2, __last2, __result,
+16535:        __gnu_cxx::__ops::__iter_comp_iter(__comp));
+16535:     }
+16535: 
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _OutputIterator,
+16535:     typename _Compare>
+16535:     _OutputIterator
+16535:     __set_symmetric_difference(_InputIterator1 __first1,
+16535:           _InputIterator1 __last1,
+16535:           _InputIterator2 __first2,
+16535:           _InputIterator2 __last2,
+16535:           _OutputIterator __result,
+16535:           _Compare __comp)
+16535:     {
+16535:       while (__first1 != __last1 && __first2 != __last2)
+16535:  if (__comp(__first1, __first2))
+16535:    {
+16535:      *__result = *__first1;
+16535:      ++__first1;
+16535:      ++__result;
+16535:    }
+16535:  else if (__comp(__first2, __first1))
+16535:    {
+16535:      *__result = *__first2;
+16535:      ++__first2;
+16535:      ++__result;
+16535:    }
+16535:  else
+16535:    {
+16535:      ++__first1;
+16535:      ++__first2;
+16535:    }
+16535:       return std::copy(__first2, __last2,
+16535:          std::copy(__first1, __last1, __result));
+16535:     }
+16535: # 5503 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _OutputIterator>
+16535:     inline _OutputIterator
+16535:     set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:         _InputIterator2 __first2, _InputIterator2 __last2,
+16535:         _OutputIterator __result)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__set_symmetric_difference(__first1, __last1,
+16535:      __first2, __last2, __result,
+16535:      __gnu_cxx::__ops::__iter_less_iter());
+16535:     }
+16535: # 5554 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _OutputIterator, typename _Compare>
+16535:     inline _OutputIterator
+16535:     set_symmetric_difference(_InputIterator1 __first1, _InputIterator1 __last1,
+16535:         _InputIterator2 __first2, _InputIterator2 __last2,
+16535:         _OutputIterator __result,
+16535:         _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535:      
+16535: 
+16535:      
+16535: 
+16535:      
+16535: 
+16535: 
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__set_symmetric_difference(__first1, __last1,
+16535:     __first2, __last2, __result,
+16535:     __gnu_cxx::__ops::__iter_comp_iter(__comp));
+16535:     }
+16535: 
+16535:   template<typename _ForwardIterator, typename _Compare>
+16535:     constexpr
+16535:     _ForwardIterator
+16535:     __min_element(_ForwardIterator __first, _ForwardIterator __last,
+16535:     _Compare __comp)
+16535:     {
+16535:       if (__first == __last)
+16535:  return __first;
+16535:       _ForwardIterator __result = __first;
+16535:       while (++__first != __last)
+16535:  if (__comp(__first, __result))
+16535:    __result = __first;
+16535:       return __result;
+16535:     }
+16535: # 5607 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator>
+16535:     constexpr
+16535:     _ForwardIterator
+16535:     inline min_element(_ForwardIterator __first, _ForwardIterator __last)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__min_element(__first, __last,
+16535:     __gnu_cxx::__ops::__iter_less_iter());
+16535:     }
+16535: # 5632 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _Compare>
+16535:     constexpr
+16535:     inline _ForwardIterator
+16535:     min_element(_ForwardIterator __first, _ForwardIterator __last,
+16535:   _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__min_element(__first, __last,
+16535:     __gnu_cxx::__ops::__iter_comp_iter(__comp));
+16535:     }
+16535: 
+16535:   template<typename _ForwardIterator, typename _Compare>
+16535:     constexpr
+16535:     _ForwardIterator
+16535:     __max_element(_ForwardIterator __first, _ForwardIterator __last,
+16535:     _Compare __comp)
+16535:     {
+16535:       if (__first == __last) return __first;
+16535:       _ForwardIterator __result = __first;
+16535:       while (++__first != __last)
+16535:  if (__comp(__result, __first))
+16535:    __result = __first;
+16535:       return __result;
+16535:     }
+16535: # 5671 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator>
+16535:     constexpr
+16535:     inline _ForwardIterator
+16535:     max_element(_ForwardIterator __first, _ForwardIterator __last)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__max_element(__first, __last,
+16535:     __gnu_cxx::__ops::__iter_less_iter());
+16535:     }
+16535: # 5696 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535:   template<typename _ForwardIterator, typename _Compare>
+16535:     constexpr
+16535:     inline _ForwardIterator
+16535:     max_element(_ForwardIterator __first, _ForwardIterator __last,
+16535:   _Compare __comp)
+16535:     {
+16535: 
+16535:      
+16535:      
+16535: 
+16535: 
+16535:       ;
+16535:       ;
+16535: 
+16535:       return std::__max_element(__first, __last,
+16535:     __gnu_cxx::__ops::__iter_comp_iter(__comp));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _InputIterator, typename _RandomAccessIterator,
+16535:            typename _Size, typename _UniformRandomBitGenerator>
+16535:     _RandomAccessIterator
+16535:     __sample(_InputIterator __first, _InputIterator __last, input_iterator_tag,
+16535:       _RandomAccessIterator __out, random_access_iterator_tag,
+16535:       _Size __n, _UniformRandomBitGenerator&& __g)
+16535:     {
+16535:       using __distrib_type = uniform_int_distribution<_Size>;
+16535:       using __param_type = typename __distrib_type::param_type;
+16535:       __distrib_type __d{};
+16535:       _Size __sample_sz = 0;
+16535:       while (__first != __last && __sample_sz != __n)
+16535:  {
+16535:    __out[__sample_sz++] = *__first;
+16535:    ++__first;
+16535:  }
+16535:       for (auto __pop_sz = __sample_sz; __first != __last;
+16535:    ++__first, (void) ++__pop_sz)
+16535:  {
+16535:    const auto __k = __d(__g, __param_type{0, __pop_sz});
+16535:    if (__k < __n)
+16535:      __out[__k] = *__first;
+16535:  }
+16535:       return __out + __sample_sz;
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _ForwardIterator, typename _OutputIterator, typename _Cat,
+16535:            typename _Size, typename _UniformRandomBitGenerator>
+16535:     _OutputIterator
+16535:     __sample(_ForwardIterator __first, _ForwardIterator __last,
+16535:       forward_iterator_tag,
+16535:       _OutputIterator __out, _Cat,
+16535:       _Size __n, _UniformRandomBitGenerator&& __g)
+16535:     {
+16535:       using __distrib_type = uniform_int_distribution<_Size>;
+16535:       using __param_type = typename __distrib_type::param_type;
+16535:       using _USize = make_unsigned_t<_Size>;
+16535:       using _Gen = remove_reference_t<_UniformRandomBitGenerator>;
+16535:       using __uc_type = common_type_t<typename _Gen::result_type, _USize>;
+16535: 
+16535:       __distrib_type __d{};
+16535:       _Size __unsampled_sz = std::distance(__first, __last);
+16535:       __n = std::min(__n, __unsampled_sz);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const __uc_type __urngrange = __g.max() - __g.min();
+16535:       if (__urngrange / __uc_type(__unsampled_sz) >= __uc_type(__unsampled_sz))
+16535: 
+16535: 
+16535:         {
+16535:    while (__n != 0 && __unsampled_sz >= 2)
+16535:      {
+16535:        const pair<_Size, _Size> __p =
+16535:   __gen_two_uniform_ints(__unsampled_sz, __unsampled_sz - 1, __g);
+16535: 
+16535:        --__unsampled_sz;
+16535:        if (__p.first < __n)
+16535:   {
+16535:     *__out++ = *__first;
+16535:     --__n;
+16535:   }
+16535: 
+16535:        ++__first;
+16535: 
+16535:        if (__n == 0) break;
+16535: 
+16535:        --__unsampled_sz;
+16535:        if (__p.second < __n)
+16535:   {
+16535:     *__out++ = *__first;
+16535:     --__n;
+16535:   }
+16535: 
+16535:        ++__first;
+16535:      }
+16535:         }
+16535: 
+16535: 
+16535: 
+16535:       for (; __n != 0; ++__first)
+16535:  if (__d(__g, __param_type{0, --__unsampled_sz}) < __n)
+16535:    {
+16535:      *__out++ = *__first;
+16535:      --__n;
+16535:    }
+16535:       return __out;
+16535:     }
+16535: # 5839 "/usr/include/c++/8/bits/stl_algo.h" 3
+16535: 
+16535: 
+16535: }
+16535: # 63 "/usr/include/c++/8/algorithm" 2 3
+16535: # 40 "/usr/include/gmpxx.h" 2 3 4
+16535: # 1 "/usr/include/c++/8/string" 1 3 4
+16535: # 36 "/usr/include/c++/8/string" 3 4
+16535:        
+16535: # 37 "/usr/include/c++/8/string" 3
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/char_traits.h" 1 3
+16535: # 37 "/usr/include/c++/8/bits/char_traits.h" 3
+16535:        
+16535: # 38 "/usr/include/c++/8/bits/char_traits.h" 3
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/cwchar" 1 3
+16535: # 39 "/usr/include/c++/8/cwchar" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/cwchar" 3
+16535: # 42 "/usr/include/c++/8/bits/char_traits.h" 2 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 61 "/usr/include/c++/8/bits/char_traits.h" 3
+16535:   template<typename _CharT>
+16535:     struct _Char_types
+16535:     {
+16535:       typedef unsigned long int_type;
+16535:       typedef std::streampos pos_type;
+16535:       typedef std::streamoff off_type;
+16535:       typedef std::mbstate_t state_type;
+16535:     };
+16535: # 86 "/usr/include/c++/8/bits/char_traits.h" 3
+16535:   template<typename _CharT>
+16535:     struct char_traits
+16535:     {
+16535:       typedef _CharT char_type;
+16535:       typedef typename _Char_types<_CharT>::int_type int_type;
+16535:       typedef typename _Char_types<_CharT>::pos_type pos_type;
+16535:       typedef typename _Char_types<_CharT>::off_type off_type;
+16535:       typedef typename _Char_types<_CharT>::state_type state_type;
+16535: 
+16535:       static constexpr void
+16535:       assign(char_type& __c1, const char_type& __c2)
+16535:       { __c1 = __c2; }
+16535: 
+16535:       static constexpr bool
+16535:       eq(const char_type& __c1, const char_type& __c2)
+16535:       { return __c1 == __c2; }
+16535: 
+16535:       static constexpr bool
+16535:       lt(const char_type& __c1, const char_type& __c2)
+16535:       { return __c1 < __c2; }
+16535: 
+16535:       static constexpr int
+16535:       compare(const char_type* __s1, const char_type* __s2, std::size_t __n);
+16535: 
+16535:       static constexpr std::size_t
+16535:       length(const char_type* __s);
+16535: 
+16535:       static constexpr const char_type*
+16535:       find(const char_type* __s, std::size_t __n, const char_type& __a);
+16535: 
+16535:       static char_type*
+16535:       move(char_type* __s1, const char_type* __s2, std::size_t __n);
+16535: 
+16535:       static char_type*
+16535:       copy(char_type* __s1, const char_type* __s2, std::size_t __n);
+16535: 
+16535:       static char_type*
+16535:       assign(char_type* __s, std::size_t __n, char_type __a);
+16535: 
+16535:       static constexpr char_type
+16535:       to_char_type(const int_type& __c)
+16535:       { return static_cast<char_type>(__c); }
+16535: 
+16535:       static constexpr int_type
+16535:       to_int_type(const char_type& __c)
+16535:       { return static_cast<int_type>(__c); }
+16535: 
+16535:       static constexpr bool
+16535:       eq_int_type(const int_type& __c1, const int_type& __c2)
+16535:       { return __c1 == __c2; }
+16535: 
+16535:       static constexpr int_type
+16535:       eof()
+16535:       { return static_cast<int_type>(-1); }
+16535: 
+16535:       static constexpr int_type
+16535:       not_eof(const int_type& __c)
+16535:       { return !eq_int_type(__c, eof()) ? __c : to_int_type(char_type()); }
+16535:     };
+16535: 
+16535:   template<typename _CharT>
+16535:     constexpr int
+16535:     char_traits<_CharT>::
+16535:     compare(const char_type* __s1, const char_type* __s2, std::size_t __n)
+16535:     {
+16535:       for (std::size_t __i = 0; __i < __n; ++__i)
+16535:  if (lt(__s1[__i], __s2[__i]))
+16535:    return -1;
+16535:  else if (lt(__s2[__i], __s1[__i]))
+16535:    return 1;
+16535:       return 0;
+16535:     }
+16535: 
+16535:   template<typename _CharT>
+16535:     constexpr std::size_t
+16535:     char_traits<_CharT>::
+16535:     length(const char_type* __p)
+16535:     {
+16535:       std::size_t __i = 0;
+16535:       while (!eq(__p[__i], char_type()))
+16535:         ++__i;
+16535:       return __i;
+16535:     }
+16535: 
+16535:   template<typename _CharT>
+16535:     constexpr const typename char_traits<_CharT>::char_type*
+16535:     char_traits<_CharT>::
+16535:     find(const char_type* __s, std::size_t __n, const char_type& __a)
+16535:     {
+16535:       for (std::size_t __i = 0; __i < __n; ++__i)
+16535:         if (eq(__s[__i], __a))
+16535:           return __s + __i;
+16535:       return 0;
+16535:     }
+16535: 
+16535:   template<typename _CharT>
+16535:     typename char_traits<_CharT>::char_type*
+16535:     char_traits<_CharT>::
+16535:     move(char_type* __s1, const char_type* __s2, std::size_t __n)
+16535:     {
+16535:       if (__n == 0)
+16535:  return __s1;
+16535:       return static_cast<_CharT*>(__builtin_memmove(__s1, __s2,
+16535:           __n * sizeof(char_type)));
+16535:     }
+16535: 
+16535:   template<typename _CharT>
+16535:     typename char_traits<_CharT>::char_type*
+16535:     char_traits<_CharT>::
+16535:     copy(char_type* __s1, const char_type* __s2, std::size_t __n)
+16535:     {
+16535: 
+16535:       std::copy(__s2, __s2 + __n, __s1);
+16535:       return __s1;
+16535:     }
+16535: 
+16535:   template<typename _CharT>
+16535:     typename char_traits<_CharT>::char_type*
+16535:     char_traits<_CharT>::
+16535:     assign(char_type* __s, std::size_t __n, char_type __a)
+16535:     {
+16535: 
+16535:       std::fill_n(__s, __n, __a);
+16535:       return __s;
+16535:     }
+16535: 
+16535: 
+16535: }
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 270 "/usr/include/c++/8/bits/char_traits.h" 3
+16535:   template<class _CharT>
+16535:     struct char_traits : public __gnu_cxx::char_traits<_CharT>
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535:   template<>
+16535:     struct char_traits<char>
+16535:     {
+16535:       typedef char char_type;
+16535:       typedef int int_type;
+16535:       typedef streampos pos_type;
+16535:       typedef streamoff off_type;
+16535:       typedef mbstate_t state_type;
+16535: 
+16535:       static void
+16535:       assign(char_type& __c1, const char_type& __c2) noexcept
+16535:       { __c1 = __c2; }
+16535: 
+16535:       static constexpr bool
+16535:       eq(const char_type& __c1, const char_type& __c2) noexcept
+16535:       { return __c1 == __c2; }
+16535: 
+16535:       static constexpr bool
+16535:       lt(const char_type& __c1, const char_type& __c2) noexcept
+16535:       {
+16535: 
+16535:  return (static_cast<unsigned char>(__c1)
+16535:   < static_cast<unsigned char>(__c2));
+16535:       }
+16535: 
+16535:       static int
+16535:       compare(const char_type* __s1, const char_type* __s2, size_t __n)
+16535:       {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  if (__n == 0)
+16535:    return 0;
+16535:  return __builtin_memcmp(__s1, __s2, __n);
+16535:       }
+16535: 
+16535:       static size_t
+16535:       length(const char_type* __s)
+16535:       {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  return __builtin_strlen(__s);
+16535:       }
+16535: 
+16535:       static const char_type*
+16535:       find(const char_type* __s, size_t __n, const char_type& __a)
+16535:       {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  if (__n == 0)
+16535:    return 0;
+16535:  return static_cast<const char_type*>(__builtin_memchr(__s, __a, __n));
+16535:       }
+16535: 
+16535:       static char_type*
+16535:       move(char_type* __s1, const char_type* __s2, size_t __n)
+16535:       {
+16535:  if (__n == 0)
+16535:    return __s1;
+16535:  return static_cast<char_type*>(__builtin_memmove(__s1, __s2, __n));
+16535:       }
+16535: 
+16535:       static char_type*
+16535:       copy(char_type* __s1, const char_type* __s2, size_t __n)
+16535:       {
+16535:  if (__n == 0)
+16535:    return __s1;
+16535:  return static_cast<char_type*>(__builtin_memcpy(__s1, __s2, __n));
+16535:       }
+16535: 
+16535:       static char_type*
+16535:       assign(char_type* __s, size_t __n, char_type __a)
+16535:       {
+16535:  if (__n == 0)
+16535:    return __s;
+16535:  return static_cast<char_type*>(__builtin_memset(__s, __a, __n));
+16535:       }
+16535: 
+16535:       static constexpr char_type
+16535:       to_char_type(const int_type& __c) noexcept
+16535:       { return static_cast<char_type>(__c); }
+16535: 
+16535: 
+16535: 
+16535:       static constexpr int_type
+16535:       to_int_type(const char_type& __c) noexcept
+16535:       { return static_cast<int_type>(static_cast<unsigned char>(__c)); }
+16535: 
+16535:       static constexpr bool
+16535:       eq_int_type(const int_type& __c1, const int_type& __c2) noexcept
+16535:       { return __c1 == __c2; }
+16535: 
+16535:       static constexpr int_type
+16535:       eof() noexcept
+16535:       { return static_cast<int_type>(-1); }
+16535: 
+16535:       static constexpr int_type
+16535:       not_eof(const int_type& __c) noexcept
+16535:       { return (__c == eof()) ? 0 : __c; }
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<>
+16535:     struct char_traits<wchar_t>
+16535:     {
+16535:       typedef wchar_t char_type;
+16535:       typedef wint_t int_type;
+16535:       typedef streamoff off_type;
+16535:       typedef wstreampos pos_type;
+16535:       typedef mbstate_t state_type;
+16535: 
+16535:       static void
+16535:       assign(char_type& __c1, const char_type& __c2) noexcept
+16535:       { __c1 = __c2; }
+16535: 
+16535:       static constexpr bool
+16535:       eq(const char_type& __c1, const char_type& __c2) noexcept
+16535:       { return __c1 == __c2; }
+16535: 
+16535:       static constexpr bool
+16535:       lt(const char_type& __c1, const char_type& __c2) noexcept
+16535:       { return __c1 < __c2; }
+16535: 
+16535:       static int
+16535:       compare(const char_type* __s1, const char_type* __s2, size_t __n)
+16535:       {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  if (__n == 0)
+16535:    return 0;
+16535:  else
+16535:    return wmemcmp(__s1, __s2, __n);
+16535:       }
+16535: 
+16535:       static size_t
+16535:       length(const char_type* __s)
+16535:       {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:    return wcslen(__s);
+16535:       }
+16535: 
+16535:       static const char_type*
+16535:       find(const char_type* __s, size_t __n, const char_type& __a)
+16535:       {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  if (__n == 0)
+16535:    return 0;
+16535:  else
+16535:    return wmemchr(__s, __a, __n);
+16535:       }
+16535: 
+16535:       static char_type*
+16535:       move(char_type* __s1, const char_type* __s2, size_t __n)
+16535:       {
+16535:  if (__n == 0)
+16535:    return __s1;
+16535:  return wmemmove(__s1, __s2, __n);
+16535:       }
+16535: 
+16535:       static char_type*
+16535:       copy(char_type* __s1, const char_type* __s2, size_t __n)
+16535:       {
+16535:  if (__n == 0)
+16535:    return __s1;
+16535:  return wmemcpy(__s1, __s2, __n);
+16535:       }
+16535: 
+16535:       static char_type*
+16535:       assign(char_type* __s, size_t __n, char_type __a)
+16535:       {
+16535:  if (__n == 0)
+16535:    return __s;
+16535:  return wmemset(__s, __a, __n);
+16535:       }
+16535: 
+16535:       static constexpr char_type
+16535:       to_char_type(const int_type& __c) noexcept
+16535:       { return char_type(__c); }
+16535: 
+16535:       static constexpr int_type
+16535:       to_int_type(const char_type& __c) noexcept
+16535:       { return int_type(__c); }
+16535: 
+16535:       static constexpr bool
+16535:       eq_int_type(const int_type& __c1, const int_type& __c2) noexcept
+16535:       { return __c1 == __c2; }
+16535: 
+16535:       static constexpr int_type
+16535:       eof() noexcept
+16535:       { return static_cast<int_type>((0xffffffffu)); }
+16535: 
+16535:       static constexpr int_type
+16535:       not_eof(const int_type& __c) noexcept
+16535:       { return eq_int_type(__c, eof()) ? 0 : __c; }
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/cstdint" 1 3
+16535: # 32 "/usr/include/c++/8/cstdint" 3
+16535:        
+16535: # 33 "/usr/include/c++/8/cstdint" 3
+16535: # 46 "/usr/include/c++/8/cstdint" 3
+16535: namespace std
+16535: {
+16535:   using ::int8_t;
+16535:   using ::int16_t;
+16535:   using ::int32_t;
+16535:   using ::int64_t;
+16535: 
+16535:   using ::int_fast8_t;
+16535:   using ::int_fast16_t;
+16535:   using ::int_fast32_t;
+16535:   using ::int_fast64_t;
+16535: 
+16535:   using ::int_least8_t;
+16535:   using ::int_least16_t;
+16535:   using ::int_least32_t;
+16535:   using ::int_least64_t;
+16535: 
+16535:   using ::intmax_t;
+16535:   using ::intptr_t;
+16535: 
+16535:   using ::uint8_t;
+16535:   using ::uint16_t;
+16535:   using ::uint32_t;
+16535:   using ::uint64_t;
+16535: 
+16535:   using ::uint_fast8_t;
+16535:   using ::uint_fast16_t;
+16535:   using ::uint_fast32_t;
+16535:   using ::uint_fast64_t;
+16535: 
+16535:   using ::uint_least8_t;
+16535:   using ::uint_least16_t;
+16535:   using ::uint_least32_t;
+16535:   using ::uint_least64_t;
+16535: 
+16535:   using ::uintmax_t;
+16535:   using ::uintptr_t;
+16535: }
+16535: # 504 "/usr/include/c++/8/bits/char_traits.h" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   template<>
+16535:     struct char_traits<char16_t>
+16535:     {
+16535:       typedef char16_t char_type;
+16535:       typedef uint_least16_t int_type;
+16535:       typedef streamoff off_type;
+16535:       typedef u16streampos pos_type;
+16535:       typedef mbstate_t state_type;
+16535: 
+16535:       static void
+16535:       assign(char_type& __c1, const char_type& __c2) noexcept
+16535:       { __c1 = __c2; }
+16535: 
+16535:       static constexpr bool
+16535:       eq(const char_type& __c1, const char_type& __c2) noexcept
+16535:       { return __c1 == __c2; }
+16535: 
+16535:       static constexpr bool
+16535:       lt(const char_type& __c1, const char_type& __c2) noexcept
+16535:       { return __c1 < __c2; }
+16535: 
+16535:       static int
+16535:       compare(const char_type* __s1, const char_type* __s2, size_t __n)
+16535:       {
+16535:  for (size_t __i = 0; __i < __n; ++__i)
+16535:    if (lt(__s1[__i], __s2[__i]))
+16535:      return -1;
+16535:    else if (lt(__s2[__i], __s1[__i]))
+16535:      return 1;
+16535:  return 0;
+16535:       }
+16535: 
+16535:       static size_t
+16535:       length(const char_type* __s)
+16535:       {
+16535:  size_t __i = 0;
+16535:  while (!eq(__s[__i], char_type()))
+16535:    ++__i;
+16535:  return __i;
+16535:       }
+16535: 
+16535:       static const char_type*
+16535:       find(const char_type* __s, size_t __n, const char_type& __a)
+16535:       {
+16535:  for (size_t __i = 0; __i < __n; ++__i)
+16535:    if (eq(__s[__i], __a))
+16535:      return __s + __i;
+16535:  return 0;
+16535:       }
+16535: 
+16535:       static char_type*
+16535:       move(char_type* __s1, const char_type* __s2, size_t __n)
+16535:       {
+16535:  if (__n == 0)
+16535:    return __s1;
+16535:  return (static_cast<char_type*>
+16535:   (__builtin_memmove(__s1, __s2, __n * sizeof(char_type))));
+16535:       }
+16535: 
+16535:       static char_type*
+16535:       copy(char_type* __s1, const char_type* __s2, size_t __n)
+16535:       {
+16535:  if (__n == 0)
+16535:    return __s1;
+16535:  return (static_cast<char_type*>
+16535:   (__builtin_memcpy(__s1, __s2, __n * sizeof(char_type))));
+16535:       }
+16535: 
+16535:       static char_type*
+16535:       assign(char_type* __s, size_t __n, char_type __a)
+16535:       {
+16535:  for (size_t __i = 0; __i < __n; ++__i)
+16535:    assign(__s[__i], __a);
+16535:  return __s;
+16535:       }
+16535: 
+16535:       static constexpr char_type
+16535:       to_char_type(const int_type& __c) noexcept
+16535:       { return char_type(__c); }
+16535: 
+16535:       static constexpr int_type
+16535:       to_int_type(const char_type& __c) noexcept
+16535:       { return __c == eof() ? int_type(0xfffd) : int_type(__c); }
+16535: 
+16535:       static constexpr bool
+16535:       eq_int_type(const int_type& __c1, const int_type& __c2) noexcept
+16535:       { return __c1 == __c2; }
+16535: 
+16535:       static constexpr int_type
+16535:       eof() noexcept
+16535:       { return static_cast<int_type>(-1); }
+16535: 
+16535:       static constexpr int_type
+16535:       not_eof(const int_type& __c) noexcept
+16535:       { return eq_int_type(__c, eof()) ? 0 : __c; }
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct char_traits<char32_t>
+16535:     {
+16535:       typedef char32_t char_type;
+16535:       typedef uint_least32_t int_type;
+16535:       typedef streamoff off_type;
+16535:       typedef u32streampos pos_type;
+16535:       typedef mbstate_t state_type;
+16535: 
+16535:       static void
+16535:       assign(char_type& __c1, const char_type& __c2) noexcept
+16535:       { __c1 = __c2; }
+16535: 
+16535:       static constexpr bool
+16535:       eq(const char_type& __c1, const char_type& __c2) noexcept
+16535:       { return __c1 == __c2; }
+16535: 
+16535:       static constexpr bool
+16535:       lt(const char_type& __c1, const char_type& __c2) noexcept
+16535:       { return __c1 < __c2; }
+16535: 
+16535:       static int
+16535:       compare(const char_type* __s1, const char_type* __s2, size_t __n)
+16535:       {
+16535:  for (size_t __i = 0; __i < __n; ++__i)
+16535:    if (lt(__s1[__i], __s2[__i]))
+16535:      return -1;
+16535:    else if (lt(__s2[__i], __s1[__i]))
+16535:      return 1;
+16535:  return 0;
+16535:       }
+16535: 
+16535:       static size_t
+16535:       length(const char_type* __s)
+16535:       {
+16535:  size_t __i = 0;
+16535:  while (!eq(__s[__i], char_type()))
+16535:    ++__i;
+16535:  return __i;
+16535:       }
+16535: 
+16535:       static const char_type*
+16535:       find(const char_type* __s, size_t __n, const char_type& __a)
+16535:       {
+16535:  for (size_t __i = 0; __i < __n; ++__i)
+16535:    if (eq(__s[__i], __a))
+16535:      return __s + __i;
+16535:  return 0;
+16535:       }
+16535: 
+16535:       static char_type*
+16535:       move(char_type* __s1, const char_type* __s2, size_t __n)
+16535:       {
+16535:  if (__n == 0)
+16535:    return __s1;
+16535:  return (static_cast<char_type*>
+16535:   (__builtin_memmove(__s1, __s2, __n * sizeof(char_type))));
+16535:       }
+16535: 
+16535:       static char_type*
+16535:       copy(char_type* __s1, const char_type* __s2, size_t __n)
+16535:       {
+16535:  if (__n == 0)
+16535:    return __s1;
+16535:  return (static_cast<char_type*>
+16535:   (__builtin_memcpy(__s1, __s2, __n * sizeof(char_type))));
+16535:       }
+16535: 
+16535:       static char_type*
+16535:       assign(char_type* __s, size_t __n, char_type __a)
+16535:       {
+16535:  for (size_t __i = 0; __i < __n; ++__i)
+16535:    assign(__s[__i], __a);
+16535:  return __s;
+16535:       }
+16535: 
+16535:       static constexpr char_type
+16535:       to_char_type(const int_type& __c) noexcept
+16535:       { return char_type(__c); }
+16535: 
+16535:       static constexpr int_type
+16535:       to_int_type(const char_type& __c) noexcept
+16535:       { return int_type(__c); }
+16535: 
+16535:       static constexpr bool
+16535:       eq_int_type(const int_type& __c1, const int_type& __c2) noexcept
+16535:       { return __c1 == __c2; }
+16535: 
+16535:       static constexpr int_type
+16535:       eof() noexcept
+16535:       { return static_cast<int_type>(-1); }
+16535: 
+16535:       static constexpr int_type
+16535:       not_eof(const int_type& __c) noexcept
+16535:       { return eq_int_type(__c, eof()) ? 0 : __c; }
+16535:     };
+16535: 
+16535: 
+16535: }
+16535: # 41 "/usr/include/c++/8/string" 2 3
+16535: # 1 "/usr/include/c++/8/bits/allocator.h" 1 3
+16535: # 46 "/usr/include/c++/8/bits/allocator.h" 3
+16535: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++allocator.h" 1 3
+16535: # 33 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++allocator.h" 3
+16535: # 1 "/usr/include/c++/8/ext/new_allocator.h" 1 3
+16535: # 40 "/usr/include/c++/8/ext/new_allocator.h" 3
+16535: namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   using std::size_t;
+16535:   using std::ptrdiff_t;
+16535: # 57 "/usr/include/c++/8/ext/new_allocator.h" 3
+16535:   template<typename _Tp>
+16535:     class new_allocator
+16535:     {
+16535:     public:
+16535:       typedef size_t size_type;
+16535:       typedef ptrdiff_t difference_type;
+16535:       typedef _Tp* pointer;
+16535:       typedef const _Tp* const_pointer;
+16535:       typedef _Tp& reference;
+16535:       typedef const _Tp& const_reference;
+16535:       typedef _Tp value_type;
+16535: 
+16535:       template<typename _Tp1>
+16535:  struct rebind
+16535:  { typedef new_allocator<_Tp1> other; };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       typedef std::true_type propagate_on_container_move_assignment;
+16535: 
+16535: 
+16535:       new_allocator() noexcept { }
+16535: 
+16535:       new_allocator(const new_allocator&) noexcept { }
+16535: 
+16535:       template<typename _Tp1>
+16535:  new_allocator(const new_allocator<_Tp1>&) noexcept { }
+16535: 
+16535:       ~new_allocator() noexcept { }
+16535: 
+16535:       pointer
+16535:       address(reference __x) const noexcept
+16535:       { return std::__addressof(__x); }
+16535: 
+16535:       const_pointer
+16535:       address(const_reference __x) const noexcept
+16535:       { return std::__addressof(__x); }
+16535: 
+16535: 
+16535: 
+16535:       pointer
+16535:       allocate(size_type __n, const void* = static_cast<const void*>(0))
+16535:       {
+16535:  if (__n > this->max_size())
+16535:    std::__throw_bad_alloc();
+16535: # 111 "/usr/include/c++/8/ext/new_allocator.h" 3
+16535:  return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp)));
+16535:       }
+16535: 
+16535: 
+16535:       void
+16535:       deallocate(pointer __p, size_type)
+16535:       {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  ::operator delete(__p);
+16535:       }
+16535: 
+16535:       size_type
+16535:       max_size() const noexcept
+16535:       { return size_t(-1) / sizeof(_Tp); }
+16535: 
+16535: 
+16535:       template<typename _Up, typename... _Args>
+16535:  void
+16535:  construct(_Up* __p, _Args&&... __args)
+16535:  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
+16535: 
+16535:       template<typename _Up>
+16535:  void
+16535:  destroy(_Up* __p) { __p->~_Up(); }
+16535: # 151 "/usr/include/c++/8/ext/new_allocator.h" 3
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     inline bool
+16535:     operator==(const new_allocator<_Tp>&, const new_allocator<_Tp>&)
+16535:     { return true; }
+16535: 
+16535:   template<typename _Tp>
+16535:     inline bool
+16535:     operator!=(const new_allocator<_Tp>&, const new_allocator<_Tp>&)
+16535:     { return false; }
+16535: 
+16535: 
+16535: }
+16535: # 34 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++allocator.h" 2 3
+16535: 
+16535: 
+16535: namespace std
+16535: {
+16535: # 47 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++allocator.h" 3
+16535:   template<typename _Tp>
+16535:     using __allocator_base = __gnu_cxx::new_allocator<_Tp>;
+16535: }
+16535: # 47 "/usr/include/c++/8/bits/allocator.h" 2 3
+16535: # 57 "/usr/include/c++/8/bits/allocator.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<>
+16535:     class allocator<void>
+16535:     {
+16535:     public:
+16535:       typedef size_t size_type;
+16535:       typedef ptrdiff_t difference_type;
+16535:       typedef void* pointer;
+16535:       typedef const void* const_pointer;
+16535:       typedef void value_type;
+16535: 
+16535:       template<typename _Tp1>
+16535:  struct rebind
+16535:  { typedef allocator<_Tp1> other; };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       typedef true_type propagate_on_container_move_assignment;
+16535: 
+16535:       typedef true_type is_always_equal;
+16535: 
+16535:       template<typename _Up, typename... _Args>
+16535:  void
+16535:  construct(_Up* __p, _Args&&... __args)
+16535:  { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
+16535: 
+16535:       template<typename _Up>
+16535:  void
+16535:  destroy(_Up* __p) { __p->~_Up(); }
+16535: 
+16535:     };
+16535: # 107 "/usr/include/c++/8/bits/allocator.h" 3
+16535:   template<typename _Tp>
+16535:     class allocator : public __allocator_base<_Tp>
+16535:     {
+16535:    public:
+16535:       typedef size_t size_type;
+16535:       typedef ptrdiff_t difference_type;
+16535:       typedef _Tp* pointer;
+16535:       typedef const _Tp* const_pointer;
+16535:       typedef _Tp& reference;
+16535:       typedef const _Tp& const_reference;
+16535:       typedef _Tp value_type;
+16535: 
+16535:       template<typename _Tp1>
+16535:  struct rebind
+16535:  { typedef allocator<_Tp1> other; };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       typedef true_type propagate_on_container_move_assignment;
+16535: 
+16535:       typedef true_type is_always_equal;
+16535: 
+16535: 
+16535:       allocator() throw() { }
+16535: 
+16535:       allocator(const allocator& __a) throw()
+16535:       : __allocator_base<_Tp>(__a) { }
+16535: 
+16535:       template<typename _Tp1>
+16535:  allocator(const allocator<_Tp1>&) throw() { }
+16535: 
+16535:       ~allocator() throw() { }
+16535: 
+16535: 
+16535:     };
+16535: 
+16535:   template<typename _T1, typename _T2>
+16535:     inline bool
+16535:     operator==(const allocator<_T1>&, const allocator<_T2>&)
+16535:     noexcept
+16535:     { return true; }
+16535: 
+16535:   template<typename _Tp>
+16535:     inline bool
+16535:     operator==(const allocator<_Tp>&, const allocator<_Tp>&)
+16535:     noexcept
+16535:     { return true; }
+16535: 
+16535:   template<typename _T1, typename _T2>
+16535:     inline bool
+16535:     operator!=(const allocator<_T1>&, const allocator<_T2>&)
+16535:     noexcept
+16535:     { return false; }
+16535: 
+16535:   template<typename _Tp>
+16535:     inline bool
+16535:     operator!=(const allocator<_Tp>&, const allocator<_Tp>&)
+16535:     noexcept
+16535:     { return false; }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     class allocator<const _Tp>
+16535:     {
+16535:     public:
+16535:       typedef _Tp value_type;
+16535:       template<typename _Up> allocator(const allocator<_Up>&) { }
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     class allocator<volatile _Tp>
+16535:     {
+16535:     public:
+16535:       typedef _Tp value_type;
+16535:       template<typename _Up> allocator(const allocator<_Up>&) { }
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     class allocator<const volatile _Tp>
+16535:     {
+16535:     public:
+16535:       typedef _Tp value_type;
+16535:       template<typename _Up> allocator(const allocator<_Up>&) { }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   extern template class allocator<char>;
+16535:   extern template class allocator<wchar_t>;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Alloc, bool = __is_empty(_Alloc)>
+16535:     struct __alloc_swap
+16535:     { static void _S_do_it(_Alloc&, _Alloc&) noexcept { } };
+16535: 
+16535:   template<typename _Alloc>
+16535:     struct __alloc_swap<_Alloc, false>
+16535:     {
+16535:       static void
+16535:       _S_do_it(_Alloc& __one, _Alloc& __two) noexcept
+16535:       {
+16535: 
+16535:  if (__one != __two)
+16535:    swap(__one, __two);
+16535:       }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Alloc, bool = __is_empty(_Alloc)>
+16535:     struct __alloc_neq
+16535:     {
+16535:       static bool
+16535:       _S_do_it(const _Alloc&, const _Alloc&)
+16535:       { return false; }
+16535:     };
+16535: 
+16535:   template<typename _Alloc>
+16535:     struct __alloc_neq<_Alloc, false>
+16535:     {
+16535:       static bool
+16535:       _S_do_it(const _Alloc& __one, const _Alloc& __two)
+16535:       { return __one != __two; }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp, bool
+16535:     = __or_<is_copy_constructible<typename _Tp::value_type>,
+16535:             is_nothrow_move_constructible<typename _Tp::value_type>>::value>
+16535:     struct __shrink_to_fit_aux
+16535:     { static bool _S_do_it(_Tp&) noexcept { return false; } };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __shrink_to_fit_aux<_Tp, true>
+16535:     {
+16535:       static bool
+16535:       _S_do_it(_Tp& __c) noexcept
+16535:       {
+16535: 
+16535:  try
+16535:    {
+16535:      _Tp(__make_move_if_noexcept_iterator(__c.begin()),
+16535:   __make_move_if_noexcept_iterator(__c.end()),
+16535:   __c.get_allocator()).swap(__c);
+16535:      return true;
+16535:    }
+16535:  catch(...)
+16535:    { return false; }
+16535: 
+16535: 
+16535: 
+16535:       }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 42 "/usr/include/c++/8/string" 2 3
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/localefwd.h" 1 3
+16535: # 37 "/usr/include/c++/8/bits/localefwd.h" 3
+16535:        
+16535: # 38 "/usr/include/c++/8/bits/localefwd.h" 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++locale.h" 1 3
+16535: # 39 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++locale.h" 3
+16535:        
+16535: # 40 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++locale.h" 3
+16535: 
+16535: # 1 "/usr/include/c++/8/clocale" 1 3
+16535: # 39 "/usr/include/c++/8/clocale" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/clocale" 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/locale.h" 1 3 4
+16535: # 28 "/usr/include/locale.h" 3 4
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
+16535: # 29 "/usr/include/locale.h" 2 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/locale.h" 1 3 4
+16535: # 30 "/usr/include/locale.h" 2 3 4
+16535: 
+16535: extern "C" {
+16535: # 51 "/usr/include/locale.h" 3 4
+16535: struct lconv
+16535: {
+16535: 
+16535: 
+16535:   char *decimal_point;
+16535:   char *thousands_sep;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   char *grouping;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   char *int_curr_symbol;
+16535:   char *currency_symbol;
+16535:   char *mon_decimal_point;
+16535:   char *mon_thousands_sep;
+16535:   char *mon_grouping;
+16535:   char *positive_sign;
+16535:   char *negative_sign;
+16535:   char int_frac_digits;
+16535:   char frac_digits;
+16535: 
+16535:   char p_cs_precedes;
+16535: 
+16535:   char p_sep_by_space;
+16535: 
+16535:   char n_cs_precedes;
+16535: 
+16535:   char n_sep_by_space;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   char p_sign_posn;
+16535:   char n_sign_posn;
+16535: 
+16535: 
+16535:   char int_p_cs_precedes;
+16535: 
+16535:   char int_p_sep_by_space;
+16535: 
+16535:   char int_n_cs_precedes;
+16535: 
+16535:   char int_n_sep_by_space;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   char int_p_sign_posn;
+16535:   char int_n_sign_posn;
+16535: # 118 "/usr/include/locale.h" 3 4
+16535: };
+16535: 
+16535: 
+16535: 
+16535: extern char *setlocale (int __category, const char *__locale) throw ();
+16535: 
+16535: 
+16535: extern struct lconv *localeconv (void) throw ();
+16535: # 141 "/usr/include/locale.h" 3 4
+16535: extern locale_t newlocale (int __category_mask, const char *__locale,
+16535:       locale_t __base) throw ();
+16535: # 176 "/usr/include/locale.h" 3 4
+16535: extern locale_t duplocale (locale_t __dataset) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern void freelocale (locale_t __dataset) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern locale_t uselocale (locale_t __dataset) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 43 "/usr/include/c++/8/clocale" 2 3
+16535: # 51 "/usr/include/c++/8/clocale" 3
+16535: namespace std
+16535: {
+16535:   using ::lconv;
+16535:   using ::setlocale;
+16535:   using ::localeconv;
+16535: }
+16535: # 42 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++locale.h" 2 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   extern "C" __typeof(uselocale) __uselocale;
+16535: 
+16535: 
+16535: }
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   typedef __locale_t __c_locale;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   inline int
+16535:   __convert_from_v(const __c_locale& __cloc __attribute__ ((__unused__)),
+16535:      char* __out,
+16535:      const int __size __attribute__ ((__unused__)),
+16535:      const char* __fmt, ...)
+16535:   {
+16535: 
+16535:     __c_locale __old = __gnu_cxx::__uselocale(__cloc);
+16535: # 88 "/usr/include/x86_64-linux-gnu/c++/8/bits/c++locale.h" 3
+16535:     __builtin_va_list __args;
+16535:     __builtin_va_start(__args, __fmt);
+16535: 
+16535: 
+16535:     const int __ret = __builtin_vsnprintf(__out, __size, __fmt, __args);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     __builtin_va_end(__args);
+16535: 
+16535: 
+16535:     __gnu_cxx::__uselocale(__old);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     return __ret;
+16535:   }
+16535: 
+16535: 
+16535: }
+16535: # 41 "/usr/include/c++/8/bits/localefwd.h" 2 3
+16535: 
+16535: # 1 "/usr/include/c++/8/cctype" 1 3
+16535: # 39 "/usr/include/c++/8/cctype" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/cctype" 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/ctype.h" 1 3 4
+16535: # 28 "/usr/include/ctype.h" 3 4
+16535: extern "C" {
+16535: # 46 "/usr/include/ctype.h" 3 4
+16535: enum
+16535: {
+16535:   _ISupper = ((0) < 8 ? ((1 << (0)) << 8) : ((1 << (0)) >> 8)),
+16535:   _ISlower = ((1) < 8 ? ((1 << (1)) << 8) : ((1 << (1)) >> 8)),
+16535:   _ISalpha = ((2) < 8 ? ((1 << (2)) << 8) : ((1 << (2)) >> 8)),
+16535:   _ISdigit = ((3) < 8 ? ((1 << (3)) << 8) : ((1 << (3)) >> 8)),
+16535:   _ISxdigit = ((4) < 8 ? ((1 << (4)) << 8) : ((1 << (4)) >> 8)),
+16535:   _ISspace = ((5) < 8 ? ((1 << (5)) << 8) : ((1 << (5)) >> 8)),
+16535:   _ISprint = ((6) < 8 ? ((1 << (6)) << 8) : ((1 << (6)) >> 8)),
+16535:   _ISgraph = ((7) < 8 ? ((1 << (7)) << 8) : ((1 << (7)) >> 8)),
+16535:   _ISblank = ((8) < 8 ? ((1 << (8)) << 8) : ((1 << (8)) >> 8)),
+16535:   _IScntrl = ((9) < 8 ? ((1 << (9)) << 8) : ((1 << (9)) >> 8)),
+16535:   _ISpunct = ((10) < 8 ? ((1 << (10)) << 8) : ((1 << (10)) >> 8)),
+16535:   _ISalnum = ((11) < 8 ? ((1 << (11)) << 8) : ((1 << (11)) >> 8))
+16535: };
+16535: # 79 "/usr/include/ctype.h" 3 4
+16535: extern const unsigned short int **__ctype_b_loc (void)
+16535:      throw () __attribute__ ((__const__));
+16535: extern const __int32_t **__ctype_tolower_loc (void)
+16535:      throw () __attribute__ ((__const__));
+16535: extern const __int32_t **__ctype_toupper_loc (void)
+16535:      throw () __attribute__ ((__const__));
+16535: # 108 "/usr/include/ctype.h" 3 4
+16535: extern int isalnum (int) throw ();
+16535: extern int isalpha (int) throw ();
+16535: extern int iscntrl (int) throw ();
+16535: extern int isdigit (int) throw ();
+16535: extern int islower (int) throw ();
+16535: extern int isgraph (int) throw ();
+16535: extern int isprint (int) throw ();
+16535: extern int ispunct (int) throw ();
+16535: extern int isspace (int) throw ();
+16535: extern int isupper (int) throw ();
+16535: extern int isxdigit (int) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int tolower (int __c) throw ();
+16535: 
+16535: 
+16535: extern int toupper (int __c) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int isblank (int) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int isctype (int __c, int __mask) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int isascii (int __c) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int toascii (int __c) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int _toupper (int) throw ();
+16535: extern int _tolower (int) throw ();
+16535: # 251 "/usr/include/ctype.h" 3 4
+16535: extern int isalnum_l (int, locale_t) throw ();
+16535: extern int isalpha_l (int, locale_t) throw ();
+16535: extern int iscntrl_l (int, locale_t) throw ();
+16535: extern int isdigit_l (int, locale_t) throw ();
+16535: extern int islower_l (int, locale_t) throw ();
+16535: extern int isgraph_l (int, locale_t) throw ();
+16535: extern int isprint_l (int, locale_t) throw ();
+16535: extern int ispunct_l (int, locale_t) throw ();
+16535: extern int isspace_l (int, locale_t) throw ();
+16535: extern int isupper_l (int, locale_t) throw ();
+16535: extern int isxdigit_l (int, locale_t) throw ();
+16535: 
+16535: extern int isblank_l (int, locale_t) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int __tolower_l (int __c, locale_t __l) throw ();
+16535: extern int tolower_l (int __c, locale_t __l) throw ();
+16535: 
+16535: 
+16535: extern int __toupper_l (int __c, locale_t __l) throw ();
+16535: extern int toupper_l (int __c, locale_t __l) throw ();
+16535: # 327 "/usr/include/ctype.h" 3 4
+16535: }
+16535: # 43 "/usr/include/c++/8/cctype" 2 3
+16535: # 62 "/usr/include/c++/8/cctype" 3
+16535: namespace std
+16535: {
+16535:   using ::isalnum;
+16535:   using ::isalpha;
+16535:   using ::iscntrl;
+16535:   using ::isdigit;
+16535:   using ::isgraph;
+16535:   using ::islower;
+16535:   using ::isprint;
+16535:   using ::ispunct;
+16535:   using ::isspace;
+16535:   using ::isupper;
+16535:   using ::isxdigit;
+16535:   using ::tolower;
+16535:   using ::toupper;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace std
+16535: {
+16535:   using ::isblank;
+16535: }
+16535: # 43 "/usr/include/c++/8/bits/localefwd.h" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 55 "/usr/include/c++/8/bits/localefwd.h" 3
+16535:   class locale;
+16535: 
+16535:   template<typename _Facet>
+16535:     bool
+16535:     has_facet(const locale&) throw();
+16535: 
+16535:   template<typename _Facet>
+16535:     const _Facet&
+16535:     use_facet(const locale&);
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     bool
+16535:     isspace(_CharT, const locale&);
+16535: 
+16535:   template<typename _CharT>
+16535:     bool
+16535:     isprint(_CharT, const locale&);
+16535: 
+16535:   template<typename _CharT>
+16535:     bool
+16535:     iscntrl(_CharT, const locale&);
+16535: 
+16535:   template<typename _CharT>
+16535:     bool
+16535:     isupper(_CharT, const locale&);
+16535: 
+16535:   template<typename _CharT>
+16535:     bool
+16535:     islower(_CharT, const locale&);
+16535: 
+16535:   template<typename _CharT>
+16535:     bool
+16535:     isalpha(_CharT, const locale&);
+16535: 
+16535:   template<typename _CharT>
+16535:     bool
+16535:     isdigit(_CharT, const locale&);
+16535: 
+16535:   template<typename _CharT>
+16535:     bool
+16535:     ispunct(_CharT, const locale&);
+16535: 
+16535:   template<typename _CharT>
+16535:     bool
+16535:     isxdigit(_CharT, const locale&);
+16535: 
+16535:   template<typename _CharT>
+16535:     bool
+16535:     isalnum(_CharT, const locale&);
+16535: 
+16535:   template<typename _CharT>
+16535:     bool
+16535:     isgraph(_CharT, const locale&);
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     bool
+16535:     isblank(_CharT, const locale&);
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     _CharT
+16535:     toupper(_CharT, const locale&);
+16535: 
+16535:   template<typename _CharT>
+16535:     _CharT
+16535:     tolower(_CharT, const locale&);
+16535: 
+16535: 
+16535:   class ctype_base;
+16535:   template<typename _CharT>
+16535:     class ctype;
+16535:   template<> class ctype<char>;
+16535: 
+16535:   template<> class ctype<wchar_t>;
+16535: 
+16535:   template<typename _CharT>
+16535:     class ctype_byname;
+16535: 
+16535: 
+16535:   class codecvt_base;
+16535:   template<typename _InternT, typename _ExternT, typename _StateT>
+16535:     class codecvt;
+16535:   template<> class codecvt<char, char, mbstate_t>;
+16535: 
+16535:   template<> class codecvt<wchar_t, char, mbstate_t>;
+16535: 
+16535:   template<typename _InternT, typename _ExternT, typename _StateT>
+16535:     class codecvt_byname;
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
+16535:     class num_get;
+16535:   template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
+16535:     class num_put;
+16535: 
+16535: namespace __cxx11 {
+16535:   template<typename _CharT> class numpunct;
+16535:   template<typename _CharT> class numpunct_byname;
+16535: }
+16535: 
+16535: namespace __cxx11 {
+16535: 
+16535:   template<typename _CharT>
+16535:     class collate;
+16535:   template<typename _CharT>
+16535:     class collate_byname;
+16535: }
+16535: 
+16535: 
+16535:   class time_base;
+16535: namespace __cxx11 {
+16535:   template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
+16535:     class time_get;
+16535:   template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
+16535:     class time_get_byname;
+16535: }
+16535:   template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
+16535:     class time_put;
+16535:   template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
+16535:     class time_put_byname;
+16535: 
+16535: 
+16535:   class money_base;
+16535: namespace __cxx11 {
+16535:   template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
+16535:     class money_get;
+16535:   template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
+16535:     class money_put;
+16535: }
+16535: namespace __cxx11 {
+16535:   template<typename _CharT, bool _Intl = false>
+16535:     class moneypunct;
+16535:   template<typename _CharT, bool _Intl = false>
+16535:     class moneypunct_byname;
+16535: }
+16535: 
+16535: 
+16535:   class messages_base;
+16535: namespace __cxx11 {
+16535:   template<typename _CharT>
+16535:     class messages;
+16535:   template<typename _CharT>
+16535:     class messages_byname;
+16535: }
+16535: 
+16535: 
+16535: }
+16535: # 44 "/usr/include/c++/8/string" 2 3
+16535: # 1 "/usr/include/c++/8/bits/ostream_insert.h" 1 3
+16535: # 33 "/usr/include/c++/8/bits/ostream_insert.h" 3
+16535:        
+16535: # 34 "/usr/include/c++/8/bits/ostream_insert.h" 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/cxxabi_forced.h" 1 3
+16535: # 34 "/usr/include/c++/8/bits/cxxabi_forced.h" 3
+16535:        
+16535: # 35 "/usr/include/c++/8/bits/cxxabi_forced.h" 3
+16535: 
+16535: #pragma GCC visibility push(default)
+16535: 
+16535: 
+16535: namespace __cxxabiv1
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   class __forced_unwind
+16535:   {
+16535:     virtual ~__forced_unwind() throw();
+16535: 
+16535: 
+16535:     virtual void __pure_dummy() = 0;
+16535:   };
+16535: }
+16535: 
+16535: 
+16535: #pragma GCC visibility pop
+16535: # 37 "/usr/include/c++/8/bits/ostream_insert.h" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     inline void
+16535:     __ostream_write(basic_ostream<_CharT, _Traits>& __out,
+16535:       const _CharT* __s, streamsize __n)
+16535:     {
+16535:       typedef basic_ostream<_CharT, _Traits> __ostream_type;
+16535:       typedef typename __ostream_type::ios_base __ios_base;
+16535: 
+16535:       const streamsize __put = __out.rdbuf()->sputn(__s, __n);
+16535:       if (__put != __n)
+16535:  __out.setstate(__ios_base::badbit);
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     inline void
+16535:     __ostream_fill(basic_ostream<_CharT, _Traits>& __out, streamsize __n)
+16535:     {
+16535:       typedef basic_ostream<_CharT, _Traits> __ostream_type;
+16535:       typedef typename __ostream_type::ios_base __ios_base;
+16535: 
+16535:       const _CharT __c = __out.fill();
+16535:       for (; __n > 0; --__n)
+16535:  {
+16535:    const typename _Traits::int_type __put = __out.rdbuf()->sputc(__c);
+16535:    if (_Traits::eq_int_type(__put, _Traits::eof()))
+16535:      {
+16535:        __out.setstate(__ios_base::badbit);
+16535:        break;
+16535:      }
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_ostream<_CharT, _Traits>&
+16535:     __ostream_insert(basic_ostream<_CharT, _Traits>& __out,
+16535:        const _CharT* __s, streamsize __n)
+16535:     {
+16535:       typedef basic_ostream<_CharT, _Traits> __ostream_type;
+16535:       typedef typename __ostream_type::ios_base __ios_base;
+16535: 
+16535:       typename __ostream_type::sentry __cerb(__out);
+16535:       if (__cerb)
+16535:  {
+16535:    try
+16535:      {
+16535:        const streamsize __w = __out.width();
+16535:        if (__w > __n)
+16535:   {
+16535:     const bool __left = ((__out.flags()
+16535:      & __ios_base::adjustfield)
+16535:            == __ios_base::left);
+16535:     if (!__left)
+16535:       __ostream_fill(__out, __w - __n);
+16535:     if (__out.good())
+16535:       __ostream_write(__out, __s, __n);
+16535:     if (__left && __out.good())
+16535:       __ostream_fill(__out, __w - __n);
+16535:   }
+16535:        else
+16535:   __ostream_write(__out, __s, __n);
+16535:        __out.width(0);
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        __out._M_setstate(__ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { __out._M_setstate(__ios_base::badbit); }
+16535:  }
+16535:       return __out;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   extern template ostream& __ostream_insert(ostream&, const char*, streamsize);
+16535: 
+16535: 
+16535:   extern template wostream& __ostream_insert(wostream&, const wchar_t*,
+16535:           streamsize);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 45 "/usr/include/c++/8/string" 2 3
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/stl_function.h" 1 3
+16535: # 63 "/usr/include/c++/8/bits/stl_function.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 104 "/usr/include/c++/8/bits/stl_function.h" 3
+16535:   template<typename _Arg, typename _Result>
+16535:     struct unary_function
+16535:     {
+16535: 
+16535:       typedef _Arg argument_type;
+16535: 
+16535: 
+16535:       typedef _Result result_type;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Arg1, typename _Arg2, typename _Result>
+16535:     struct binary_function
+16535:     {
+16535: 
+16535:       typedef _Arg1 first_argument_type;
+16535: 
+16535: 
+16535:       typedef _Arg2 second_argument_type;
+16535: 
+16535: 
+16535:       typedef _Result result_type;
+16535:     };
+16535: # 144 "/usr/include/c++/8/bits/stl_function.h" 3
+16535:   struct __is_transparent;
+16535: 
+16535:   template<typename _Tp = void>
+16535:     struct plus;
+16535: 
+16535:   template<typename _Tp = void>
+16535:     struct minus;
+16535: 
+16535:   template<typename _Tp = void>
+16535:     struct multiplies;
+16535: 
+16535:   template<typename _Tp = void>
+16535:     struct divides;
+16535: 
+16535:   template<typename _Tp = void>
+16535:     struct modulus;
+16535: 
+16535:   template<typename _Tp = void>
+16535:     struct negate;
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct plus : public binary_function<_Tp, _Tp, _Tp>
+16535:     {
+16535:       constexpr
+16535:       _Tp
+16535:       operator()(const _Tp& __x, const _Tp& __y) const
+16535:       { return __x + __y; }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct minus : public binary_function<_Tp, _Tp, _Tp>
+16535:     {
+16535:       constexpr
+16535:       _Tp
+16535:       operator()(const _Tp& __x, const _Tp& __y) const
+16535:       { return __x - __y; }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct multiplies : public binary_function<_Tp, _Tp, _Tp>
+16535:     {
+16535:       constexpr
+16535:       _Tp
+16535:       operator()(const _Tp& __x, const _Tp& __y) const
+16535:       { return __x * __y; }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct divides : public binary_function<_Tp, _Tp, _Tp>
+16535:     {
+16535:       constexpr
+16535:       _Tp
+16535:       operator()(const _Tp& __x, const _Tp& __y) const
+16535:       { return __x / __y; }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct modulus : public binary_function<_Tp, _Tp, _Tp>
+16535:     {
+16535:       constexpr
+16535:       _Tp
+16535:       operator()(const _Tp& __x, const _Tp& __y) const
+16535:       { return __x % __y; }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct negate : public unary_function<_Tp, _Tp>
+16535:     {
+16535:       constexpr
+16535:       _Tp
+16535:       operator()(const _Tp& __x) const
+16535:       { return -__x; }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<>
+16535:     struct plus<void>
+16535:     {
+16535:       template <typename _Tp, typename _Up>
+16535:  constexpr
+16535:  auto
+16535:  operator()(_Tp&& __t, _Up&& __u) const
+16535:  noexcept(noexcept(std::forward<_Tp>(__t) + std::forward<_Up>(__u)))
+16535:  -> decltype(std::forward<_Tp>(__t) + std::forward<_Up>(__u))
+16535:  { return std::forward<_Tp>(__t) + std::forward<_Up>(__u); }
+16535: 
+16535:       typedef __is_transparent is_transparent;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct minus<void>
+16535:     {
+16535:       template <typename _Tp, typename _Up>
+16535:  constexpr
+16535:  auto
+16535:  operator()(_Tp&& __t, _Up&& __u) const
+16535:  noexcept(noexcept(std::forward<_Tp>(__t) - std::forward<_Up>(__u)))
+16535:  -> decltype(std::forward<_Tp>(__t) - std::forward<_Up>(__u))
+16535:  { return std::forward<_Tp>(__t) - std::forward<_Up>(__u); }
+16535: 
+16535:       typedef __is_transparent is_transparent;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct multiplies<void>
+16535:     {
+16535:       template <typename _Tp, typename _Up>
+16535:  constexpr
+16535:  auto
+16535:  operator()(_Tp&& __t, _Up&& __u) const
+16535:  noexcept(noexcept(std::forward<_Tp>(__t) * std::forward<_Up>(__u)))
+16535:  -> decltype(std::forward<_Tp>(__t) * std::forward<_Up>(__u))
+16535:  { return std::forward<_Tp>(__t) * std::forward<_Up>(__u); }
+16535: 
+16535:       typedef __is_transparent is_transparent;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct divides<void>
+16535:     {
+16535:       template <typename _Tp, typename _Up>
+16535:  constexpr
+16535:  auto
+16535:  operator()(_Tp&& __t, _Up&& __u) const
+16535:  noexcept(noexcept(std::forward<_Tp>(__t) / std::forward<_Up>(__u)))
+16535:  -> decltype(std::forward<_Tp>(__t) / std::forward<_Up>(__u))
+16535:  { return std::forward<_Tp>(__t) / std::forward<_Up>(__u); }
+16535: 
+16535:       typedef __is_transparent is_transparent;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct modulus<void>
+16535:     {
+16535:       template <typename _Tp, typename _Up>
+16535:  constexpr
+16535:  auto
+16535:  operator()(_Tp&& __t, _Up&& __u) const
+16535:  noexcept(noexcept(std::forward<_Tp>(__t) % std::forward<_Up>(__u)))
+16535:  -> decltype(std::forward<_Tp>(__t) % std::forward<_Up>(__u))
+16535:  { return std::forward<_Tp>(__t) % std::forward<_Up>(__u); }
+16535: 
+16535:       typedef __is_transparent is_transparent;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct negate<void>
+16535:     {
+16535:       template <typename _Tp>
+16535:  constexpr
+16535:  auto
+16535:  operator()(_Tp&& __t) const
+16535:  noexcept(noexcept(-std::forward<_Tp>(__t)))
+16535:  -> decltype(-std::forward<_Tp>(__t))
+16535:  { return -std::forward<_Tp>(__t); }
+16535: 
+16535:       typedef __is_transparent is_transparent;
+16535:     };
+16535: # 330 "/usr/include/c++/8/bits/stl_function.h" 3
+16535:   template<typename _Tp = void>
+16535:     struct equal_to;
+16535: 
+16535:   template<typename _Tp = void>
+16535:     struct not_equal_to;
+16535: 
+16535:   template<typename _Tp = void>
+16535:     struct greater;
+16535: 
+16535:   template<typename _Tp = void>
+16535:     struct less;
+16535: 
+16535:   template<typename _Tp = void>
+16535:     struct greater_equal;
+16535: 
+16535:   template<typename _Tp = void>
+16535:     struct less_equal;
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct equal_to : public binary_function<_Tp, _Tp, bool>
+16535:     {
+16535:       constexpr
+16535:       bool
+16535:       operator()(const _Tp& __x, const _Tp& __y) const
+16535:       { return __x == __y; }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct not_equal_to : public binary_function<_Tp, _Tp, bool>
+16535:     {
+16535:       constexpr
+16535:       bool
+16535:       operator()(const _Tp& __x, const _Tp& __y) const
+16535:       { return __x != __y; }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct greater : public binary_function<_Tp, _Tp, bool>
+16535:     {
+16535:       constexpr
+16535:       bool
+16535:       operator()(const _Tp& __x, const _Tp& __y) const
+16535:       { return __x > __y; }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct less : public binary_function<_Tp, _Tp, bool>
+16535:     {
+16535:       constexpr
+16535:       bool
+16535:       operator()(const _Tp& __x, const _Tp& __y) const
+16535:       { return __x < __y; }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct greater_equal : public binary_function<_Tp, _Tp, bool>
+16535:     {
+16535:       constexpr
+16535:       bool
+16535:       operator()(const _Tp& __x, const _Tp& __y) const
+16535:       { return __x >= __y; }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct less_equal : public binary_function<_Tp, _Tp, bool>
+16535:     {
+16535:       constexpr
+16535:       bool
+16535:       operator()(const _Tp& __x, const _Tp& __y) const
+16535:       { return __x <= __y; }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct greater<_Tp*> : public binary_function<_Tp*, _Tp*, bool>
+16535:     {
+16535:       constexpr bool
+16535:       operator()(_Tp* __x, _Tp* __y) const noexcept
+16535:       {
+16535:  if (__builtin_constant_p (__x > __y))
+16535:    return __x > __y;
+16535:  return (long unsigned int)__x > (long unsigned int)__y;
+16535:       }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct less<_Tp*> : public binary_function<_Tp*, _Tp*, bool>
+16535:     {
+16535:       constexpr bool
+16535:       operator()(_Tp* __x, _Tp* __y) const noexcept
+16535:       {
+16535:  if (__builtin_constant_p (__x < __y))
+16535:    return __x < __y;
+16535:  return (long unsigned int)__x < (long unsigned int)__y;
+16535:       }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct greater_equal<_Tp*> : public binary_function<_Tp*, _Tp*, bool>
+16535:     {
+16535:       constexpr bool
+16535:       operator()(_Tp* __x, _Tp* __y) const noexcept
+16535:       {
+16535:  if (__builtin_constant_p (__x >= __y))
+16535:    return __x >= __y;
+16535:  return (long unsigned int)__x >= (long unsigned int)__y;
+16535:       }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct less_equal<_Tp*> : public binary_function<_Tp*, _Tp*, bool>
+16535:     {
+16535:       constexpr bool
+16535:       operator()(_Tp* __x, _Tp* __y) const noexcept
+16535:       {
+16535:  if (__builtin_constant_p (__x <= __y))
+16535:    return __x <= __y;
+16535:  return (long unsigned int)__x <= (long unsigned int)__y;
+16535:       }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<>
+16535:     struct equal_to<void>
+16535:     {
+16535:       template <typename _Tp, typename _Up>
+16535:  constexpr auto
+16535:  operator()(_Tp&& __t, _Up&& __u) const
+16535:  noexcept(noexcept(std::forward<_Tp>(__t) == std::forward<_Up>(__u)))
+16535:  -> decltype(std::forward<_Tp>(__t) == std::forward<_Up>(__u))
+16535:  { return std::forward<_Tp>(__t) == std::forward<_Up>(__u); }
+16535: 
+16535:       typedef __is_transparent is_transparent;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct not_equal_to<void>
+16535:     {
+16535:       template <typename _Tp, typename _Up>
+16535:  constexpr auto
+16535:  operator()(_Tp&& __t, _Up&& __u) const
+16535:  noexcept(noexcept(std::forward<_Tp>(__t) != std::forward<_Up>(__u)))
+16535:  -> decltype(std::forward<_Tp>(__t) != std::forward<_Up>(__u))
+16535:  { return std::forward<_Tp>(__t) != std::forward<_Up>(__u); }
+16535: 
+16535:       typedef __is_transparent is_transparent;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct greater<void>
+16535:     {
+16535:       template <typename _Tp, typename _Up>
+16535:  constexpr auto
+16535:  operator()(_Tp&& __t, _Up&& __u) const
+16535:  noexcept(noexcept(std::forward<_Tp>(__t) > std::forward<_Up>(__u)))
+16535:  -> decltype(std::forward<_Tp>(__t) > std::forward<_Up>(__u))
+16535:  {
+16535:    return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u),
+16535:    __ptr_cmp<_Tp, _Up>{});
+16535:  }
+16535: 
+16535:       template<typename _Tp, typename _Up>
+16535:  constexpr bool
+16535:  operator()(_Tp* __t, _Up* __u) const noexcept
+16535:  { return greater<common_type_t<_Tp*, _Up*>>{}(__t, __u); }
+16535: 
+16535:       typedef __is_transparent is_transparent;
+16535: 
+16535:     private:
+16535:       template <typename _Tp, typename _Up>
+16535:  static constexpr decltype(auto)
+16535:  _S_cmp(_Tp&& __t, _Up&& __u, false_type)
+16535:  { return std::forward<_Tp>(__t) > std::forward<_Up>(__u); }
+16535: 
+16535:       template <typename _Tp, typename _Up>
+16535:  static constexpr bool
+16535:  _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept
+16535:  {
+16535:    return greater<const volatile void*>{}(
+16535:        static_cast<const volatile void*>(std::forward<_Tp>(__t)),
+16535:        static_cast<const volatile void*>(std::forward<_Up>(__u)));
+16535:  }
+16535: 
+16535: 
+16535:       template<typename _Tp, typename _Up, typename = void>
+16535:  struct __not_overloaded2 : true_type { };
+16535: 
+16535: 
+16535:       template<typename _Tp, typename _Up>
+16535:  struct __not_overloaded2<_Tp, _Up, __void_t<
+16535:    decltype(std::declval<_Tp>().operator>(std::declval<_Up>()))>>
+16535:  : false_type { };
+16535: 
+16535: 
+16535:       template<typename _Tp, typename _Up, typename = void>
+16535:  struct __not_overloaded : __not_overloaded2<_Tp, _Up> { };
+16535: 
+16535: 
+16535:       template<typename _Tp, typename _Up>
+16535:  struct __not_overloaded<_Tp, _Up, __void_t<
+16535:    decltype(operator>(std::declval<_Tp>(), std::declval<_Up>()))>>
+16535:  : false_type { };
+16535: 
+16535:       template<typename _Tp, typename _Up>
+16535:  using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>,
+16535:        is_convertible<_Tp, const volatile void*>,
+16535:        is_convertible<_Up, const volatile void*>>;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct less<void>
+16535:     {
+16535:       template <typename _Tp, typename _Up>
+16535:  constexpr auto
+16535:  operator()(_Tp&& __t, _Up&& __u) const
+16535:  noexcept(noexcept(std::forward<_Tp>(__t) < std::forward<_Up>(__u)))
+16535:  -> decltype(std::forward<_Tp>(__t) < std::forward<_Up>(__u))
+16535:  {
+16535:    return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u),
+16535:    __ptr_cmp<_Tp, _Up>{});
+16535:  }
+16535: 
+16535:       template<typename _Tp, typename _Up>
+16535:  constexpr bool
+16535:  operator()(_Tp* __t, _Up* __u) const noexcept
+16535:  { return less<common_type_t<_Tp*, _Up*>>{}(__t, __u); }
+16535: 
+16535:       typedef __is_transparent is_transparent;
+16535: 
+16535:     private:
+16535:       template <typename _Tp, typename _Up>
+16535:  static constexpr decltype(auto)
+16535:  _S_cmp(_Tp&& __t, _Up&& __u, false_type)
+16535:  { return std::forward<_Tp>(__t) < std::forward<_Up>(__u); }
+16535: 
+16535:       template <typename _Tp, typename _Up>
+16535:  static constexpr bool
+16535:  _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept
+16535:  {
+16535:    return less<const volatile void*>{}(
+16535:        static_cast<const volatile void*>(std::forward<_Tp>(__t)),
+16535:        static_cast<const volatile void*>(std::forward<_Up>(__u)));
+16535:  }
+16535: 
+16535: 
+16535:       template<typename _Tp, typename _Up, typename = void>
+16535:  struct __not_overloaded2 : true_type { };
+16535: 
+16535: 
+16535:       template<typename _Tp, typename _Up>
+16535:  struct __not_overloaded2<_Tp, _Up, __void_t<
+16535:    decltype(std::declval<_Tp>().operator<(std::declval<_Up>()))>>
+16535:  : false_type { };
+16535: 
+16535: 
+16535:       template<typename _Tp, typename _Up, typename = void>
+16535:  struct __not_overloaded : __not_overloaded2<_Tp, _Up> { };
+16535: 
+16535: 
+16535:       template<typename _Tp, typename _Up>
+16535:  struct __not_overloaded<_Tp, _Up, __void_t<
+16535:    decltype(operator<(std::declval<_Tp>(), std::declval<_Up>()))>>
+16535:  : false_type { };
+16535: 
+16535:       template<typename _Tp, typename _Up>
+16535:  using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>,
+16535:        is_convertible<_Tp, const volatile void*>,
+16535:        is_convertible<_Up, const volatile void*>>;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct greater_equal<void>
+16535:     {
+16535:       template <typename _Tp, typename _Up>
+16535:  constexpr auto
+16535:  operator()(_Tp&& __t, _Up&& __u) const
+16535:  noexcept(noexcept(std::forward<_Tp>(__t) >= std::forward<_Up>(__u)))
+16535:  -> decltype(std::forward<_Tp>(__t) >= std::forward<_Up>(__u))
+16535:  {
+16535:    return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u),
+16535:    __ptr_cmp<_Tp, _Up>{});
+16535:  }
+16535: 
+16535:       template<typename _Tp, typename _Up>
+16535:  constexpr bool
+16535:  operator()(_Tp* __t, _Up* __u) const noexcept
+16535:  { return greater_equal<common_type_t<_Tp*, _Up*>>{}(__t, __u); }
+16535: 
+16535:       typedef __is_transparent is_transparent;
+16535: 
+16535:     private:
+16535:       template <typename _Tp, typename _Up>
+16535:  static constexpr decltype(auto)
+16535:  _S_cmp(_Tp&& __t, _Up&& __u, false_type)
+16535:  { return std::forward<_Tp>(__t) >= std::forward<_Up>(__u); }
+16535: 
+16535:       template <typename _Tp, typename _Up>
+16535:  static constexpr bool
+16535:  _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept
+16535:  {
+16535:    return greater_equal<const volatile void*>{}(
+16535:        static_cast<const volatile void*>(std::forward<_Tp>(__t)),
+16535:        static_cast<const volatile void*>(std::forward<_Up>(__u)));
+16535:  }
+16535: 
+16535: 
+16535:       template<typename _Tp, typename _Up, typename = void>
+16535:  struct __not_overloaded2 : true_type { };
+16535: 
+16535: 
+16535:       template<typename _Tp, typename _Up>
+16535:  struct __not_overloaded2<_Tp, _Up, __void_t<
+16535:    decltype(std::declval<_Tp>().operator>=(std::declval<_Up>()))>>
+16535:  : false_type { };
+16535: 
+16535: 
+16535:       template<typename _Tp, typename _Up, typename = void>
+16535:  struct __not_overloaded : __not_overloaded2<_Tp, _Up> { };
+16535: 
+16535: 
+16535:       template<typename _Tp, typename _Up>
+16535:  struct __not_overloaded<_Tp, _Up, __void_t<
+16535:    decltype(operator>=(std::declval<_Tp>(), std::declval<_Up>()))>>
+16535:  : false_type { };
+16535: 
+16535:       template<typename _Tp, typename _Up>
+16535:  using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>,
+16535:        is_convertible<_Tp, const volatile void*>,
+16535:        is_convertible<_Up, const volatile void*>>;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct less_equal<void>
+16535:     {
+16535:       template <typename _Tp, typename _Up>
+16535:  constexpr auto
+16535:  operator()(_Tp&& __t, _Up&& __u) const
+16535:  noexcept(noexcept(std::forward<_Tp>(__t) <= std::forward<_Up>(__u)))
+16535:  -> decltype(std::forward<_Tp>(__t) <= std::forward<_Up>(__u))
+16535:  {
+16535:    return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u),
+16535:    __ptr_cmp<_Tp, _Up>{});
+16535:  }
+16535: 
+16535:       template<typename _Tp, typename _Up>
+16535:  constexpr bool
+16535:  operator()(_Tp* __t, _Up* __u) const noexcept
+16535:  { return less_equal<common_type_t<_Tp*, _Up*>>{}(__t, __u); }
+16535: 
+16535:       typedef __is_transparent is_transparent;
+16535: 
+16535:     private:
+16535:       template <typename _Tp, typename _Up>
+16535:  static constexpr decltype(auto)
+16535:  _S_cmp(_Tp&& __t, _Up&& __u, false_type)
+16535:  { return std::forward<_Tp>(__t) <= std::forward<_Up>(__u); }
+16535: 
+16535:       template <typename _Tp, typename _Up>
+16535:  static constexpr bool
+16535:  _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept
+16535:  {
+16535:    return less_equal<const volatile void*>{}(
+16535:        static_cast<const volatile void*>(std::forward<_Tp>(__t)),
+16535:        static_cast<const volatile void*>(std::forward<_Up>(__u)));
+16535:  }
+16535: 
+16535: 
+16535:       template<typename _Tp, typename _Up, typename = void>
+16535:  struct __not_overloaded2 : true_type { };
+16535: 
+16535: 
+16535:       template<typename _Tp, typename _Up>
+16535:  struct __not_overloaded2<_Tp, _Up, __void_t<
+16535:    decltype(std::declval<_Tp>().operator<=(std::declval<_Up>()))>>
+16535:  : false_type { };
+16535: 
+16535: 
+16535:       template<typename _Tp, typename _Up, typename = void>
+16535:  struct __not_overloaded : __not_overloaded2<_Tp, _Up> { };
+16535: 
+16535: 
+16535:       template<typename _Tp, typename _Up>
+16535:  struct __not_overloaded<_Tp, _Up, __void_t<
+16535:    decltype(operator<=(std::declval<_Tp>(), std::declval<_Up>()))>>
+16535:  : false_type { };
+16535: 
+16535:       template<typename _Tp, typename _Up>
+16535:  using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>,
+16535:        is_convertible<_Tp, const volatile void*>,
+16535:        is_convertible<_Up, const volatile void*>>;
+16535:     };
+16535: # 750 "/usr/include/c++/8/bits/stl_function.h" 3
+16535:   template<typename _Tp = void>
+16535:     struct logical_and;
+16535: 
+16535:   template<typename _Tp = void>
+16535:     struct logical_or;
+16535: 
+16535:   template<typename _Tp = void>
+16535:     struct logical_not;
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct logical_and : public binary_function<_Tp, _Tp, bool>
+16535:     {
+16535:       constexpr
+16535:       bool
+16535:       operator()(const _Tp& __x, const _Tp& __y) const
+16535:       { return __x && __y; }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct logical_or : public binary_function<_Tp, _Tp, bool>
+16535:     {
+16535:       constexpr
+16535:       bool
+16535:       operator()(const _Tp& __x, const _Tp& __y) const
+16535:       { return __x || __y; }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct logical_not : public unary_function<_Tp, bool>
+16535:     {
+16535:       constexpr
+16535:       bool
+16535:       operator()(const _Tp& __x) const
+16535:       { return !__x; }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<>
+16535:     struct logical_and<void>
+16535:     {
+16535:       template <typename _Tp, typename _Up>
+16535:  constexpr
+16535:  auto
+16535:  operator()(_Tp&& __t, _Up&& __u) const
+16535:  noexcept(noexcept(std::forward<_Tp>(__t) && std::forward<_Up>(__u)))
+16535:  -> decltype(std::forward<_Tp>(__t) && std::forward<_Up>(__u))
+16535:  { return std::forward<_Tp>(__t) && std::forward<_Up>(__u); }
+16535: 
+16535:       typedef __is_transparent is_transparent;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct logical_or<void>
+16535:     {
+16535:       template <typename _Tp, typename _Up>
+16535:  constexpr
+16535:  auto
+16535:  operator()(_Tp&& __t, _Up&& __u) const
+16535:  noexcept(noexcept(std::forward<_Tp>(__t) || std::forward<_Up>(__u)))
+16535:  -> decltype(std::forward<_Tp>(__t) || std::forward<_Up>(__u))
+16535:  { return std::forward<_Tp>(__t) || std::forward<_Up>(__u); }
+16535: 
+16535:       typedef __is_transparent is_transparent;
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct logical_not<void>
+16535:     {
+16535:       template <typename _Tp>
+16535:  constexpr
+16535:  auto
+16535:  operator()(_Tp&& __t) const
+16535:  noexcept(noexcept(!std::forward<_Tp>(__t)))
+16535:  -> decltype(!std::forward<_Tp>(__t))
+16535:  { return !std::forward<_Tp>(__t); }
+16535: 
+16535:       typedef __is_transparent is_transparent;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp = void>
+16535:     struct bit_and;
+16535: 
+16535:   template<typename _Tp = void>
+16535:     struct bit_or;
+16535: 
+16535:   template<typename _Tp = void>
+16535:     struct bit_xor;
+16535: 
+16535:   template<typename _Tp = void>
+16535:     struct bit_not;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct bit_and : public binary_function<_Tp, _Tp, _Tp>
+16535:     {
+16535:       constexpr
+16535:       _Tp
+16535:       operator()(const _Tp& __x, const _Tp& __y) const
+16535:       { return __x & __y; }
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct bit_or : public binary_function<_Tp, _Tp, _Tp>
+16535:     {
+16535:       constexpr
+16535:       _Tp
+16535:       operator()(const _Tp& __x, const _Tp& __y) const
+16535:       { return __x | __y; }
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct bit_xor : public binary_function<_Tp, _Tp, _Tp>
+16535:     {
+16535:       constexpr
+16535:       _Tp
+16535:       operator()(const _Tp& __x, const _Tp& __y) const
+16535:       { return __x ^ __y; }
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct bit_not : public unary_function<_Tp, _Tp>
+16535:     {
+16535:     constexpr
+16535:       _Tp
+16535:       operator()(const _Tp& __x) const
+16535:       { return ~__x; }
+16535:     };
+16535: 
+16535: 
+16535:   template <>
+16535:     struct bit_and<void>
+16535:     {
+16535:       template <typename _Tp, typename _Up>
+16535:  constexpr
+16535:  auto
+16535:  operator()(_Tp&& __t, _Up&& __u) const
+16535:  noexcept(noexcept(std::forward<_Tp>(__t) & std::forward<_Up>(__u)))
+16535:  -> decltype(std::forward<_Tp>(__t) & std::forward<_Up>(__u))
+16535:  { return std::forward<_Tp>(__t) & std::forward<_Up>(__u); }
+16535: 
+16535:       typedef __is_transparent is_transparent;
+16535:     };
+16535: 
+16535:   template <>
+16535:     struct bit_or<void>
+16535:     {
+16535:       template <typename _Tp, typename _Up>
+16535:  constexpr
+16535:  auto
+16535:  operator()(_Tp&& __t, _Up&& __u) const
+16535:  noexcept(noexcept(std::forward<_Tp>(__t) | std::forward<_Up>(__u)))
+16535:  -> decltype(std::forward<_Tp>(__t) | std::forward<_Up>(__u))
+16535:  { return std::forward<_Tp>(__t) | std::forward<_Up>(__u); }
+16535: 
+16535:       typedef __is_transparent is_transparent;
+16535:     };
+16535: 
+16535:   template <>
+16535:     struct bit_xor<void>
+16535:     {
+16535:       template <typename _Tp, typename _Up>
+16535:  constexpr
+16535:  auto
+16535:  operator()(_Tp&& __t, _Up&& __u) const
+16535:  noexcept(noexcept(std::forward<_Tp>(__t) ^ std::forward<_Up>(__u)))
+16535:  -> decltype(std::forward<_Tp>(__t) ^ std::forward<_Up>(__u))
+16535:  { return std::forward<_Tp>(__t) ^ std::forward<_Up>(__u); }
+16535: 
+16535:       typedef __is_transparent is_transparent;
+16535:     };
+16535: 
+16535:   template <>
+16535:     struct bit_not<void>
+16535:     {
+16535:       template <typename _Tp>
+16535:  constexpr
+16535:  auto
+16535:  operator()(_Tp&& __t) const
+16535:  noexcept(noexcept(~std::forward<_Tp>(__t)))
+16535:  -> decltype(~std::forward<_Tp>(__t))
+16535:  { return ~std::forward<_Tp>(__t); }
+16535: 
+16535:       typedef __is_transparent is_transparent;
+16535:     };
+16535: # 978 "/usr/include/c++/8/bits/stl_function.h" 3
+16535:   template<typename _Predicate>
+16535:     class unary_negate
+16535:     : public unary_function<typename _Predicate::argument_type, bool>
+16535:     {
+16535:     protected:
+16535:       _Predicate _M_pred;
+16535: 
+16535:     public:
+16535:       constexpr
+16535:       explicit
+16535:       unary_negate(const _Predicate& __x) : _M_pred(__x) { }
+16535: 
+16535:       constexpr
+16535:       bool
+16535:       operator()(const typename _Predicate::argument_type& __x) const
+16535:       { return !_M_pred(__x); }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Predicate>
+16535:     constexpr
+16535:     inline unary_negate<_Predicate>
+16535:     not1(const _Predicate& __pred)
+16535:     { return unary_negate<_Predicate>(__pred); }
+16535: 
+16535: 
+16535:   template<typename _Predicate>
+16535:     class binary_negate
+16535:     : public binary_function<typename _Predicate::first_argument_type,
+16535:         typename _Predicate::second_argument_type, bool>
+16535:     {
+16535:     protected:
+16535:       _Predicate _M_pred;
+16535: 
+16535:     public:
+16535:       constexpr
+16535:       explicit
+16535:       binary_negate(const _Predicate& __x) : _M_pred(__x) { }
+16535: 
+16535:       constexpr
+16535:       bool
+16535:       operator()(const typename _Predicate::first_argument_type& __x,
+16535:    const typename _Predicate::second_argument_type& __y) const
+16535:       { return !_M_pred(__x, __y); }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Predicate>
+16535:     constexpr
+16535:     inline binary_negate<_Predicate>
+16535:     not2(const _Predicate& __pred)
+16535:     { return binary_negate<_Predicate>(__pred); }
+16535: # 1055 "/usr/include/c++/8/bits/stl_function.h" 3
+16535:   template<typename _Arg, typename _Result>
+16535:     class pointer_to_unary_function : public unary_function<_Arg, _Result>
+16535:     {
+16535:     protected:
+16535:       _Result (*_M_ptr)(_Arg);
+16535: 
+16535:     public:
+16535:       pointer_to_unary_function() { }
+16535: 
+16535:       explicit
+16535:       pointer_to_unary_function(_Result (*__x)(_Arg))
+16535:       : _M_ptr(__x) { }
+16535: 
+16535:       _Result
+16535:       operator()(_Arg __x) const
+16535:       { return _M_ptr(__x); }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Arg, typename _Result>
+16535:     inline pointer_to_unary_function<_Arg, _Result>
+16535:     ptr_fun(_Result (*__x)(_Arg))
+16535:     { return pointer_to_unary_function<_Arg, _Result>(__x); }
+16535: 
+16535: 
+16535:   template<typename _Arg1, typename _Arg2, typename _Result>
+16535:     class pointer_to_binary_function
+16535:     : public binary_function<_Arg1, _Arg2, _Result>
+16535:     {
+16535:     protected:
+16535:       _Result (*_M_ptr)(_Arg1, _Arg2);
+16535: 
+16535:     public:
+16535:       pointer_to_binary_function() { }
+16535: 
+16535:       explicit
+16535:       pointer_to_binary_function(_Result (*__x)(_Arg1, _Arg2))
+16535:       : _M_ptr(__x) { }
+16535: 
+16535:       _Result
+16535:       operator()(_Arg1 __x, _Arg2 __y) const
+16535:       { return _M_ptr(__x, __y); }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Arg1, typename _Arg2, typename _Result>
+16535:     inline pointer_to_binary_function<_Arg1, _Arg2, _Result>
+16535:     ptr_fun(_Result (*__x)(_Arg1, _Arg2))
+16535:     { return pointer_to_binary_function<_Arg1, _Arg2, _Result>(__x); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct _Identity
+16535:     : public unary_function<_Tp, _Tp>
+16535:     {
+16535:       _Tp&
+16535:       operator()(_Tp& __x) const
+16535:       { return __x; }
+16535: 
+16535:       const _Tp&
+16535:       operator()(const _Tp& __x) const
+16535:       { return __x; }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp> struct _Identity<const _Tp> : _Identity<_Tp> { };
+16535: 
+16535:   template<typename _Pair>
+16535:     struct _Select1st
+16535:     : public unary_function<_Pair, typename _Pair::first_type>
+16535:     {
+16535:       typename _Pair::first_type&
+16535:       operator()(_Pair& __x) const
+16535:       { return __x.first; }
+16535: 
+16535:       const typename _Pair::first_type&
+16535:       operator()(const _Pair& __x) const
+16535:       { return __x.first; }
+16535: 
+16535: 
+16535:       template<typename _Pair2>
+16535:         typename _Pair2::first_type&
+16535:         operator()(_Pair2& __x) const
+16535:         { return __x.first; }
+16535: 
+16535:       template<typename _Pair2>
+16535:         const typename _Pair2::first_type&
+16535:         operator()(const _Pair2& __x) const
+16535:         { return __x.first; }
+16535: 
+16535:     };
+16535: 
+16535:   template<typename _Pair>
+16535:     struct _Select2nd
+16535:     : public unary_function<_Pair, typename _Pair::second_type>
+16535:     {
+16535:       typename _Pair::second_type&
+16535:       operator()(_Pair& __x) const
+16535:       { return __x.second; }
+16535: 
+16535:       const typename _Pair::second_type&
+16535:       operator()(const _Pair& __x) const
+16535:       { return __x.second; }
+16535:     };
+16535: # 1178 "/usr/include/c++/8/bits/stl_function.h" 3
+16535:   template<typename _Ret, typename _Tp>
+16535:     class mem_fun_t : public unary_function<_Tp*, _Ret>
+16535:     {
+16535:     public:
+16535:       explicit
+16535:       mem_fun_t(_Ret (_Tp::*__pf)())
+16535:       : _M_f(__pf) { }
+16535: 
+16535:       _Ret
+16535:       operator()(_Tp* __p) const
+16535:       { return (__p->*_M_f)(); }
+16535: 
+16535:     private:
+16535:       _Ret (_Tp::*_M_f)();
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Ret, typename _Tp>
+16535:     class const_mem_fun_t : public unary_function<const _Tp*, _Ret>
+16535:     {
+16535:     public:
+16535:       explicit
+16535:       const_mem_fun_t(_Ret (_Tp::*__pf)() const)
+16535:       : _M_f(__pf) { }
+16535: 
+16535:       _Ret
+16535:       operator()(const _Tp* __p) const
+16535:       { return (__p->*_M_f)(); }
+16535: 
+16535:     private:
+16535:       _Ret (_Tp::*_M_f)() const;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Ret, typename _Tp>
+16535:     class mem_fun_ref_t : public unary_function<_Tp, _Ret>
+16535:     {
+16535:     public:
+16535:       explicit
+16535:       mem_fun_ref_t(_Ret (_Tp::*__pf)())
+16535:       : _M_f(__pf) { }
+16535: 
+16535:       _Ret
+16535:       operator()(_Tp& __r) const
+16535:       { return (__r.*_M_f)(); }
+16535: 
+16535:     private:
+16535:       _Ret (_Tp::*_M_f)();
+16535:   };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Ret, typename _Tp>
+16535:     class const_mem_fun_ref_t : public unary_function<_Tp, _Ret>
+16535:     {
+16535:     public:
+16535:       explicit
+16535:       const_mem_fun_ref_t(_Ret (_Tp::*__pf)() const)
+16535:       : _M_f(__pf) { }
+16535: 
+16535:       _Ret
+16535:       operator()(const _Tp& __r) const
+16535:       { return (__r.*_M_f)(); }
+16535: 
+16535:     private:
+16535:       _Ret (_Tp::*_M_f)() const;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Ret, typename _Tp, typename _Arg>
+16535:     class mem_fun1_t : public binary_function<_Tp*, _Arg, _Ret>
+16535:     {
+16535:     public:
+16535:       explicit
+16535:       mem_fun1_t(_Ret (_Tp::*__pf)(_Arg))
+16535:       : _M_f(__pf) { }
+16535: 
+16535:       _Ret
+16535:       operator()(_Tp* __p, _Arg __x) const
+16535:       { return (__p->*_M_f)(__x); }
+16535: 
+16535:     private:
+16535:       _Ret (_Tp::*_M_f)(_Arg);
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Ret, typename _Tp, typename _Arg>
+16535:     class const_mem_fun1_t : public binary_function<const _Tp*, _Arg, _Ret>
+16535:     {
+16535:     public:
+16535:       explicit
+16535:       const_mem_fun1_t(_Ret (_Tp::*__pf)(_Arg) const)
+16535:       : _M_f(__pf) { }
+16535: 
+16535:       _Ret
+16535:       operator()(const _Tp* __p, _Arg __x) const
+16535:       { return (__p->*_M_f)(__x); }
+16535: 
+16535:     private:
+16535:       _Ret (_Tp::*_M_f)(_Arg) const;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Ret, typename _Tp, typename _Arg>
+16535:     class mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret>
+16535:     {
+16535:     public:
+16535:       explicit
+16535:       mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg))
+16535:       : _M_f(__pf) { }
+16535: 
+16535:       _Ret
+16535:       operator()(_Tp& __r, _Arg __x) const
+16535:       { return (__r.*_M_f)(__x); }
+16535: 
+16535:     private:
+16535:       _Ret (_Tp::*_M_f)(_Arg);
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Ret, typename _Tp, typename _Arg>
+16535:     class const_mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret>
+16535:     {
+16535:     public:
+16535:       explicit
+16535:       const_mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg) const)
+16535:       : _M_f(__pf) { }
+16535: 
+16535:       _Ret
+16535:       operator()(const _Tp& __r, _Arg __x) const
+16535:       { return (__r.*_M_f)(__x); }
+16535: 
+16535:     private:
+16535:       _Ret (_Tp::*_M_f)(_Arg) const;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Ret, typename _Tp>
+16535:     inline mem_fun_t<_Ret, _Tp>
+16535:     mem_fun(_Ret (_Tp::*__f)())
+16535:     { return mem_fun_t<_Ret, _Tp>(__f); }
+16535: 
+16535:   template<typename _Ret, typename _Tp>
+16535:     inline const_mem_fun_t<_Ret, _Tp>
+16535:     mem_fun(_Ret (_Tp::*__f)() const)
+16535:     { return const_mem_fun_t<_Ret, _Tp>(__f); }
+16535: 
+16535:   template<typename _Ret, typename _Tp>
+16535:     inline mem_fun_ref_t<_Ret, _Tp>
+16535:     mem_fun_ref(_Ret (_Tp::*__f)())
+16535:     { return mem_fun_ref_t<_Ret, _Tp>(__f); }
+16535: 
+16535:   template<typename _Ret, typename _Tp>
+16535:     inline const_mem_fun_ref_t<_Ret, _Tp>
+16535:     mem_fun_ref(_Ret (_Tp::*__f)() const)
+16535:     { return const_mem_fun_ref_t<_Ret, _Tp>(__f); }
+16535: 
+16535:   template<typename _Ret, typename _Tp, typename _Arg>
+16535:     inline mem_fun1_t<_Ret, _Tp, _Arg>
+16535:     mem_fun(_Ret (_Tp::*__f)(_Arg))
+16535:     { return mem_fun1_t<_Ret, _Tp, _Arg>(__f); }
+16535: 
+16535:   template<typename _Ret, typename _Tp, typename _Arg>
+16535:     inline const_mem_fun1_t<_Ret, _Tp, _Arg>
+16535:     mem_fun(_Ret (_Tp::*__f)(_Arg) const)
+16535:     { return const_mem_fun1_t<_Ret, _Tp, _Arg>(__f); }
+16535: 
+16535:   template<typename _Ret, typename _Tp, typename _Arg>
+16535:     inline mem_fun1_ref_t<_Ret, _Tp, _Arg>
+16535:     mem_fun_ref(_Ret (_Tp::*__f)(_Arg))
+16535:     { return mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); }
+16535: 
+16535:   template<typename _Ret, typename _Tp, typename _Arg>
+16535:     inline const_mem_fun1_ref_t<_Ret, _Tp, _Arg>
+16535:     mem_fun_ref(_Ret (_Tp::*__f)(_Arg) const)
+16535:     { return const_mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/backward/binders.h" 1 3
+16535: # 60 "/usr/include/c++/8/backward/binders.h" 3
+16535: #pragma GCC diagnostic push
+16535: #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 107 "/usr/include/c++/8/backward/binders.h" 3
+16535:   template<typename _Operation>
+16535:     class binder1st
+16535:     : public unary_function<typename _Operation::second_argument_type,
+16535:        typename _Operation::result_type>
+16535:     {
+16535:     protected:
+16535:       _Operation op;
+16535:       typename _Operation::first_argument_type value;
+16535: 
+16535:     public:
+16535:       binder1st(const _Operation& __x,
+16535:   const typename _Operation::first_argument_type& __y)
+16535:       : op(__x), value(__y) { }
+16535: 
+16535:       typename _Operation::result_type
+16535:       operator()(const typename _Operation::second_argument_type& __x) const
+16535:       { return op(value, __x); }
+16535: 
+16535: 
+16535: 
+16535:       typename _Operation::result_type
+16535:       operator()(typename _Operation::second_argument_type& __x) const
+16535:       { return op(value, __x); }
+16535:     } __attribute__ ((__deprecated__));
+16535: 
+16535: 
+16535:   template<typename _Operation, typename _Tp>
+16535:     inline binder1st<_Operation>
+16535:     bind1st(const _Operation& __fn, const _Tp& __x)
+16535:     {
+16535:       typedef typename _Operation::first_argument_type _Arg1_type;
+16535:       return binder1st<_Operation>(__fn, _Arg1_type(__x));
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _Operation>
+16535:     class binder2nd
+16535:     : public unary_function<typename _Operation::first_argument_type,
+16535:        typename _Operation::result_type>
+16535:     {
+16535:     protected:
+16535:       _Operation op;
+16535:       typename _Operation::second_argument_type value;
+16535: 
+16535:     public:
+16535:       binder2nd(const _Operation& __x,
+16535:   const typename _Operation::second_argument_type& __y)
+16535:       : op(__x), value(__y) { }
+16535: 
+16535:       typename _Operation::result_type
+16535:       operator()(const typename _Operation::first_argument_type& __x) const
+16535:       { return op(__x, value); }
+16535: 
+16535: 
+16535: 
+16535:       typename _Operation::result_type
+16535:       operator()(typename _Operation::first_argument_type& __x) const
+16535:       { return op(__x, value); }
+16535:     } __attribute__ ((__deprecated__));
+16535: 
+16535: 
+16535:   template<typename _Operation, typename _Tp>
+16535:     inline binder2nd<_Operation>
+16535:     bind2nd(const _Operation& __fn, const _Tp& __x)
+16535:     {
+16535:       typedef typename _Operation::second_argument_type _Arg2_type;
+16535:       return binder2nd<_Operation>(__fn, _Arg2_type(__x));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: #pragma GCC diagnostic pop
+16535: # 1369 "/usr/include/c++/8/bits/stl_function.h" 2 3
+16535: # 49 "/usr/include/c++/8/string" 2 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/range_access.h" 1 3
+16535: # 33 "/usr/include/c++/8/bits/range_access.h" 3
+16535:        
+16535: # 34 "/usr/include/c++/8/bits/range_access.h" 3
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Container>
+16535:     inline auto
+16535:     begin(_Container& __cont) -> decltype(__cont.begin())
+16535:     { return __cont.begin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Container>
+16535:     inline auto
+16535:     begin(const _Container& __cont) -> decltype(__cont.begin())
+16535:     { return __cont.begin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Container>
+16535:     inline auto
+16535:     end(_Container& __cont) -> decltype(__cont.end())
+16535:     { return __cont.end(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Container>
+16535:     inline auto
+16535:     end(const _Container& __cont) -> decltype(__cont.end())
+16535:     { return __cont.end(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, size_t _Nm>
+16535:     inline constexpr _Tp*
+16535:     begin(_Tp (&__arr)[_Nm])
+16535:     { return __arr; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, size_t _Nm>
+16535:     inline constexpr _Tp*
+16535:     end(_Tp (&__arr)[_Nm])
+16535:     { return __arr + _Nm; }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp> class valarray;
+16535: 
+16535:   template<typename _Tp> _Tp* begin(valarray<_Tp>&);
+16535:   template<typename _Tp> const _Tp* begin(const valarray<_Tp>&);
+16535:   template<typename _Tp> _Tp* end(valarray<_Tp>&);
+16535:   template<typename _Tp> const _Tp* end(const valarray<_Tp>&);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Container>
+16535:     inline constexpr auto
+16535:     cbegin(const _Container& __cont) noexcept(noexcept(std::begin(__cont)))
+16535:       -> decltype(std::begin(__cont))
+16535:     { return std::begin(__cont); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Container>
+16535:     inline constexpr auto
+16535:     cend(const _Container& __cont) noexcept(noexcept(std::end(__cont)))
+16535:       -> decltype(std::end(__cont))
+16535:     { return std::end(__cont); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Container>
+16535:     inline auto
+16535:     rbegin(_Container& __cont) -> decltype(__cont.rbegin())
+16535:     { return __cont.rbegin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Container>
+16535:     inline auto
+16535:     rbegin(const _Container& __cont) -> decltype(__cont.rbegin())
+16535:     { return __cont.rbegin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Container>
+16535:     inline auto
+16535:     rend(_Container& __cont) -> decltype(__cont.rend())
+16535:     { return __cont.rend(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Container>
+16535:     inline auto
+16535:     rend(const _Container& __cont) -> decltype(__cont.rend())
+16535:     { return __cont.rend(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, size_t _Nm>
+16535:     inline reverse_iterator<_Tp*>
+16535:     rbegin(_Tp (&__arr)[_Nm])
+16535:     { return reverse_iterator<_Tp*>(__arr + _Nm); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, size_t _Nm>
+16535:     inline reverse_iterator<_Tp*>
+16535:     rend(_Tp (&__arr)[_Nm])
+16535:     { return reverse_iterator<_Tp*>(__arr); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline reverse_iterator<const _Tp*>
+16535:     rbegin(initializer_list<_Tp> __il)
+16535:     { return reverse_iterator<const _Tp*>(__il.end()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline reverse_iterator<const _Tp*>
+16535:     rend(initializer_list<_Tp> __il)
+16535:     { return reverse_iterator<const _Tp*>(__il.begin()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Container>
+16535:     inline auto
+16535:     crbegin(const _Container& __cont) -> decltype(std::rbegin(__cont))
+16535:     { return std::rbegin(__cont); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Container>
+16535:     inline auto
+16535:     crend(const _Container& __cont) -> decltype(std::rend(__cont))
+16535:     { return std::rend(__cont); }
+16535: # 323 "/usr/include/c++/8/bits/range_access.h" 3
+16535: 
+16535: }
+16535: # 52 "/usr/include/c++/8/string" 2 3
+16535: # 1 "/usr/include/c++/8/bits/basic_string.h" 1 3
+16535: # 37 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:        
+16535: # 38 "/usr/include/c++/8/bits/basic_string.h" 3
+16535: 
+16535: # 1 "/usr/include/c++/8/ext/atomicity.h" 1 3
+16535: # 32 "/usr/include/c++/8/ext/atomicity.h" 3
+16535:        
+16535: # 33 "/usr/include/c++/8/ext/atomicity.h" 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr.h" 1 3
+16535: # 30 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr.h" 3
+16535: #pragma GCC visibility push(default)
+16535: # 148 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr.h" 3
+16535: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h" 1 3
+16535: # 35 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h" 3
+16535: # 1 "/usr/include/pthread.h" 1 3 4
+16535: # 23 "/usr/include/pthread.h" 3 4
+16535: # 1 "/usr/include/sched.h" 1 3 4
+16535: # 29 "/usr/include/sched.h" 3 4
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
+16535: # 30 "/usr/include/sched.h" 2 3 4
+16535: # 43 "/usr/include/sched.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/sched.h" 1 3 4
+16535: # 74 "/usr/include/x86_64-linux-gnu/bits/sched.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h" 1 3 4
+16535: # 23 "/usr/include/x86_64-linux-gnu/bits/types/struct_sched_param.h" 3 4
+16535: struct sched_param
+16535: {
+16535:   int sched_priority;
+16535: };
+16535: # 75 "/usr/include/x86_64-linux-gnu/bits/sched.h" 2 3 4
+16535: 
+16535: extern "C" {
+16535: 
+16535: 
+16535: 
+16535: extern int clone (int (*__fn) (void *__arg), void *__child_stack,
+16535:     int __flags, void *__arg, ...) throw ();
+16535: 
+16535: 
+16535: extern int unshare (int __flags) throw ();
+16535: 
+16535: 
+16535: extern int sched_getcpu (void) throw ();
+16535: 
+16535: 
+16535: extern int setns (int __fd, int __nstype) throw ();
+16535: 
+16535: 
+16535: }
+16535: # 44 "/usr/include/sched.h" 2 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/cpu-set.h" 1 3 4
+16535: # 32 "/usr/include/x86_64-linux-gnu/bits/cpu-set.h" 3 4
+16535: typedef unsigned long int __cpu_mask;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef struct
+16535: {
+16535:   __cpu_mask __bits[1024 / (8 * sizeof (__cpu_mask))];
+16535: } cpu_set_t;
+16535: # 115 "/usr/include/x86_64-linux-gnu/bits/cpu-set.h" 3 4
+16535: extern "C" {
+16535: 
+16535: extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp)
+16535:      throw ();
+16535: extern cpu_set_t *__sched_cpualloc (size_t __count) throw () __attribute__ ((__warn_unused_result__));
+16535: extern void __sched_cpufree (cpu_set_t *__set) throw ();
+16535: 
+16535: }
+16535: # 45 "/usr/include/sched.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern "C" {
+16535: 
+16535: 
+16535: extern int sched_setparam (__pid_t __pid, const struct sched_param *__param)
+16535:      throw ();
+16535: 
+16535: 
+16535: extern int sched_getparam (__pid_t __pid, struct sched_param *__param) throw ();
+16535: 
+16535: 
+16535: extern int sched_setscheduler (__pid_t __pid, int __policy,
+16535:           const struct sched_param *__param) throw ();
+16535: 
+16535: 
+16535: extern int sched_getscheduler (__pid_t __pid) throw ();
+16535: 
+16535: 
+16535: extern int sched_yield (void) throw ();
+16535: 
+16535: 
+16535: extern int sched_get_priority_max (int __algorithm) throw ();
+16535: 
+16535: 
+16535: extern int sched_get_priority_min (int __algorithm) throw ();
+16535: 
+16535: 
+16535: extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) throw ();
+16535: # 121 "/usr/include/sched.h" 3 4
+16535: extern int sched_setaffinity (__pid_t __pid, size_t __cpusetsize,
+16535:          const cpu_set_t *__cpuset) throw ();
+16535: 
+16535: 
+16535: extern int sched_getaffinity (__pid_t __pid, size_t __cpusetsize,
+16535:          cpu_set_t *__cpuset) throw ();
+16535: 
+16535: 
+16535: }
+16535: # 24 "/usr/include/pthread.h" 2 3 4
+16535: # 1 "/usr/include/time.h" 1 3 4
+16535: # 29 "/usr/include/time.h" 3 4
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
+16535: # 30 "/usr/include/time.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/time.h" 1 3 4
+16535: # 73 "/usr/include/x86_64-linux-gnu/bits/time.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/timex.h" 1 3 4
+16535: # 26 "/usr/include/x86_64-linux-gnu/bits/timex.h" 3 4
+16535: struct timex
+16535: {
+16535:   unsigned int modes;
+16535:   __syscall_slong_t offset;
+16535:   __syscall_slong_t freq;
+16535:   __syscall_slong_t maxerror;
+16535:   __syscall_slong_t esterror;
+16535:   int status;
+16535:   __syscall_slong_t constant;
+16535:   __syscall_slong_t precision;
+16535:   __syscall_slong_t tolerance;
+16535:   struct timeval time;
+16535:   __syscall_slong_t tick;
+16535:   __syscall_slong_t ppsfreq;
+16535:   __syscall_slong_t jitter;
+16535:   int shift;
+16535:   __syscall_slong_t stabil;
+16535:   __syscall_slong_t jitcnt;
+16535:   __syscall_slong_t calcnt;
+16535:   __syscall_slong_t errcnt;
+16535:   __syscall_slong_t stbcnt;
+16535: 
+16535:   int tai;
+16535: 
+16535: 
+16535:   int :32; int :32; int :32; int :32;
+16535:   int :32; int :32; int :32; int :32;
+16535:   int :32; int :32; int :32;
+16535: };
+16535: # 74 "/usr/include/x86_64-linux-gnu/bits/time.h" 2 3 4
+16535: 
+16535: extern "C" {
+16535: 
+16535: 
+16535: extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) throw ();
+16535: 
+16535: }
+16535: # 34 "/usr/include/time.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h" 1 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: struct tm
+16535: {
+16535:   int tm_sec;
+16535:   int tm_min;
+16535:   int tm_hour;
+16535:   int tm_mday;
+16535:   int tm_mon;
+16535:   int tm_year;
+16535:   int tm_wday;
+16535:   int tm_yday;
+16535:   int tm_isdst;
+16535: 
+16535: 
+16535:   long int tm_gmtoff;
+16535:   const char *tm_zone;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: };
+16535: # 40 "/usr/include/time.h" 2 3 4
+16535: # 48 "/usr/include/time.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h" 1 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: struct itimerspec
+16535:   {
+16535:     struct timespec it_interval;
+16535:     struct timespec it_value;
+16535:   };
+16535: # 49 "/usr/include/time.h" 2 3 4
+16535: struct sigevent;
+16535: # 68 "/usr/include/time.h" 3 4
+16535: extern "C" {
+16535: 
+16535: 
+16535: 
+16535: extern clock_t clock (void) throw ();
+16535: 
+16535: 
+16535: extern time_t time (time_t *__timer) throw ();
+16535: 
+16535: 
+16535: extern double difftime (time_t __time1, time_t __time0)
+16535:      throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern time_t mktime (struct tm *__tp) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern size_t strftime (char *__restrict __s, size_t __maxsize,
+16535:    const char *__restrict __format,
+16535:    const struct tm *__restrict __tp) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *strptime (const char *__restrict __s,
+16535:          const char *__restrict __fmt, struct tm *__tp)
+16535:      throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern size_t strftime_l (char *__restrict __s, size_t __maxsize,
+16535:      const char *__restrict __format,
+16535:      const struct tm *__restrict __tp,
+16535:      locale_t __loc) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern char *strptime_l (const char *__restrict __s,
+16535:     const char *__restrict __fmt, struct tm *__tp,
+16535:     locale_t __loc) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern struct tm *gmtime (const time_t *__timer) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern struct tm *localtime (const time_t *__timer) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern struct tm *gmtime_r (const time_t *__restrict __timer,
+16535:        struct tm *__restrict __tp) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern struct tm *localtime_r (const time_t *__restrict __timer,
+16535:           struct tm *__restrict __tp) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *asctime (const struct tm *__tp) throw ();
+16535: 
+16535: 
+16535: extern char *ctime (const time_t *__timer) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *asctime_r (const struct tm *__restrict __tp,
+16535:    char *__restrict __buf) throw ();
+16535: 
+16535: 
+16535: extern char *ctime_r (const time_t *__restrict __timer,
+16535:         char *__restrict __buf) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *__tzname[2];
+16535: extern int __daylight;
+16535: extern long int __timezone;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *tzname[2];
+16535: 
+16535: 
+16535: 
+16535: extern void tzset (void) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int daylight;
+16535: extern long int timezone;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int stime (const time_t *__when) throw ();
+16535: # 196 "/usr/include/time.h" 3 4
+16535: extern time_t timegm (struct tm *__tp) throw ();
+16535: 
+16535: 
+16535: extern time_t timelocal (struct tm *__tp) throw ();
+16535: 
+16535: 
+16535: extern int dysize (int __year) throw () __attribute__ ((__const__));
+16535: # 211 "/usr/include/time.h" 3 4
+16535: extern int nanosleep (const struct timespec *__requested_time,
+16535:         struct timespec *__remaining);
+16535: 
+16535: 
+16535: 
+16535: extern int clock_getres (clockid_t __clock_id, struct timespec *__res) throw ();
+16535: 
+16535: 
+16535: extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) throw ();
+16535: 
+16535: 
+16535: extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp)
+16535:      throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int clock_nanosleep (clockid_t __clock_id, int __flags,
+16535:        const struct timespec *__req,
+16535:        struct timespec *__rem);
+16535: 
+16535: 
+16535: extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int timer_create (clockid_t __clock_id,
+16535:     struct sigevent *__restrict __evp,
+16535:     timer_t *__restrict __timerid) throw ();
+16535: 
+16535: 
+16535: extern int timer_delete (timer_t __timerid) throw ();
+16535: 
+16535: 
+16535: extern int timer_settime (timer_t __timerid, int __flags,
+16535:      const struct itimerspec *__restrict __value,
+16535:      struct itimerspec *__restrict __ovalue) throw ();
+16535: 
+16535: 
+16535: extern int timer_gettime (timer_t __timerid, struct itimerspec *__value)
+16535:      throw ();
+16535: 
+16535: 
+16535: extern int timer_getoverrun (timer_t __timerid) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int timespec_get (struct timespec *__ts, int __base)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: # 280 "/usr/include/time.h" 3 4
+16535: extern int getdate_err;
+16535: # 289 "/usr/include/time.h" 3 4
+16535: extern struct tm *getdate (const char *__string);
+16535: # 303 "/usr/include/time.h" 3 4
+16535: extern int getdate_r (const char *__restrict __string,
+16535:         struct tm *__restrict __resbufp);
+16535: 
+16535: 
+16535: }
+16535: # 25 "/usr/include/pthread.h" 2 3 4
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/setjmp.h" 1 3 4
+16535: # 26 "/usr/include/x86_64-linux-gnu/bits/setjmp.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
+16535: # 27 "/usr/include/x86_64-linux-gnu/bits/setjmp.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef long int __jmp_buf[8];
+16535: # 28 "/usr/include/pthread.h" 2 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
+16535: # 29 "/usr/include/pthread.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: enum
+16535: {
+16535:   PTHREAD_CREATE_JOINABLE,
+16535: 
+16535:   PTHREAD_CREATE_DETACHED
+16535: 
+16535: };
+16535: 
+16535: 
+16535: 
+16535: enum
+16535: {
+16535:   PTHREAD_MUTEX_TIMED_NP,
+16535:   PTHREAD_MUTEX_RECURSIVE_NP,
+16535:   PTHREAD_MUTEX_ERRORCHECK_NP,
+16535:   PTHREAD_MUTEX_ADAPTIVE_NP
+16535: 
+16535:   ,
+16535:   PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP,
+16535:   PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP,
+16535:   PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP,
+16535:   PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL
+16535: 
+16535: 
+16535: 
+16535:   , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP
+16535: 
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: enum
+16535: {
+16535:   PTHREAD_MUTEX_STALLED,
+16535:   PTHREAD_MUTEX_STALLED_NP = PTHREAD_MUTEX_STALLED,
+16535:   PTHREAD_MUTEX_ROBUST,
+16535:   PTHREAD_MUTEX_ROBUST_NP = PTHREAD_MUTEX_ROBUST
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: enum
+16535: {
+16535:   PTHREAD_PRIO_NONE,
+16535:   PTHREAD_PRIO_INHERIT,
+16535:   PTHREAD_PRIO_PROTECT
+16535: };
+16535: # 115 "/usr/include/pthread.h" 3 4
+16535: enum
+16535: {
+16535:   PTHREAD_RWLOCK_PREFER_READER_NP,
+16535:   PTHREAD_RWLOCK_PREFER_WRITER_NP,
+16535:   PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,
+16535:   PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_READER_NP
+16535: };
+16535: # 156 "/usr/include/pthread.h" 3 4
+16535: enum
+16535: {
+16535:   PTHREAD_INHERIT_SCHED,
+16535: 
+16535:   PTHREAD_EXPLICIT_SCHED
+16535: 
+16535: };
+16535: 
+16535: 
+16535: 
+16535: enum
+16535: {
+16535:   PTHREAD_SCOPE_SYSTEM,
+16535: 
+16535:   PTHREAD_SCOPE_PROCESS
+16535: 
+16535: };
+16535: 
+16535: 
+16535: 
+16535: enum
+16535: {
+16535:   PTHREAD_PROCESS_PRIVATE,
+16535: 
+16535:   PTHREAD_PROCESS_SHARED
+16535: 
+16535: };
+16535: # 191 "/usr/include/pthread.h" 3 4
+16535: struct _pthread_cleanup_buffer
+16535: {
+16535:   void (*__routine) (void *);
+16535:   void *__arg;
+16535:   int __canceltype;
+16535:   struct _pthread_cleanup_buffer *__prev;
+16535: };
+16535: 
+16535: 
+16535: enum
+16535: {
+16535:   PTHREAD_CANCEL_ENABLE,
+16535: 
+16535:   PTHREAD_CANCEL_DISABLE
+16535: 
+16535: };
+16535: enum
+16535: {
+16535:   PTHREAD_CANCEL_DEFERRED,
+16535: 
+16535:   PTHREAD_CANCEL_ASYNCHRONOUS
+16535: 
+16535: };
+16535: # 229 "/usr/include/pthread.h" 3 4
+16535: extern "C" {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_create (pthread_t *__restrict __newthread,
+16535:       const pthread_attr_t *__restrict __attr,
+16535:       void *(*__start_routine) (void *),
+16535:       void *__restrict __arg) throw () __attribute__ ((__nonnull__ (1, 3)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern void pthread_exit (void *__retval) __attribute__ ((__noreturn__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_join (pthread_t __th, void **__thread_return);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_timedjoin_np (pthread_t __th, void **__thread_return,
+16535:      const struct timespec *__abstime);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_detach (pthread_t __th) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern pthread_t pthread_self (void) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int pthread_equal (pthread_t __thread1, pthread_t __thread2)
+16535:   throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_attr_init (pthread_attr_t *__attr) throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_attr_destroy (pthread_attr_t *__attr)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr,
+16535:      int *__detachstate)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern int pthread_attr_setdetachstate (pthread_attr_t *__attr,
+16535:      int __detachstate)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_attr_getguardsize (const pthread_attr_t *__attr,
+16535:           size_t *__guardsize)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern int pthread_attr_setguardsize (pthread_attr_t *__attr,
+16535:           size_t __guardsize)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict __attr,
+16535:            struct sched_param *__restrict __param)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr,
+16535:            const struct sched_param *__restrict
+16535:            __param) throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict
+16535:      __attr, int *__restrict __policy)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict
+16535:       __attr, int *__restrict __inherit)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern int pthread_attr_setinheritsched (pthread_attr_t *__attr,
+16535:       int __inherit)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr,
+16535:       int *__restrict __scope)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict
+16535:           __attr, void **__restrict __stackaddr)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__deprecated__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_attr_setstackaddr (pthread_attr_t *__attr,
+16535:           void *__stackaddr)
+16535:      throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__));
+16535: 
+16535: 
+16535: extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict
+16535:           __attr, size_t *__restrict __stacksize)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_attr_setstacksize (pthread_attr_t *__attr,
+16535:           size_t __stacksize)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr,
+16535:       void **__restrict __stackaddr,
+16535:       size_t *__restrict __stacksize)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2, 3)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr,
+16535:       size_t __stacksize) throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr,
+16535:      size_t __cpusetsize,
+16535:      const cpu_set_t *__cpuset)
+16535:      throw () __attribute__ ((__nonnull__ (1, 3)));
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_attr_getaffinity_np (const pthread_attr_t *__attr,
+16535:      size_t __cpusetsize,
+16535:      cpu_set_t *__cpuset)
+16535:      throw () __attribute__ ((__nonnull__ (1, 3)));
+16535: 
+16535: 
+16535: extern int pthread_getattr_default_np (pthread_attr_t *__attr)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_setattr_default_np (const pthread_attr_t *__attr)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr)
+16535:      throw () __attribute__ ((__nonnull__ (2)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_setschedparam (pthread_t __target_thread, int __policy,
+16535:       const struct sched_param *__param)
+16535:      throw () __attribute__ ((__nonnull__ (3)));
+16535: 
+16535: 
+16535: extern int pthread_getschedparam (pthread_t __target_thread,
+16535:       int *__restrict __policy,
+16535:       struct sched_param *__restrict __param)
+16535:      throw () __attribute__ ((__nonnull__ (2, 3)));
+16535: 
+16535: 
+16535: extern int pthread_setschedprio (pthread_t __target_thread, int __prio)
+16535:      throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_getname_np (pthread_t __target_thread, char *__buf,
+16535:           size_t __buflen)
+16535:      throw () __attribute__ ((__nonnull__ (2)));
+16535: 
+16535: 
+16535: extern int pthread_setname_np (pthread_t __target_thread, const char *__name)
+16535:      throw () __attribute__ ((__nonnull__ (2)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_getconcurrency (void) throw ();
+16535: 
+16535: 
+16535: extern int pthread_setconcurrency (int __level) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_yield (void) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_setaffinity_np (pthread_t __th, size_t __cpusetsize,
+16535:        const cpu_set_t *__cpuset)
+16535:      throw () __attribute__ ((__nonnull__ (3)));
+16535: 
+16535: 
+16535: extern int pthread_getaffinity_np (pthread_t __th, size_t __cpusetsize,
+16535:        cpu_set_t *__cpuset)
+16535:      throw () __attribute__ ((__nonnull__ (3)));
+16535: # 495 "/usr/include/pthread.h" 3 4
+16535: extern int pthread_once (pthread_once_t *__once_control,
+16535:     void (*__init_routine) (void)) __attribute__ ((__nonnull__ (1, 2)));
+16535: # 507 "/usr/include/pthread.h" 3 4
+16535: extern int pthread_setcancelstate (int __state, int *__oldstate);
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_setcanceltype (int __type, int *__oldtype);
+16535: 
+16535: 
+16535: extern int pthread_cancel (pthread_t __th);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern void pthread_testcancel (void);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef struct
+16535: {
+16535:   struct
+16535:   {
+16535:     __jmp_buf __cancel_jmp_buf;
+16535:     int __mask_was_saved;
+16535:   } __cancel_jmp_buf[1];
+16535:   void *__pad[4];
+16535: } __pthread_unwind_buf_t __attribute__ ((__aligned__));
+16535: # 541 "/usr/include/pthread.h" 3 4
+16535: struct __pthread_cleanup_frame
+16535: {
+16535:   void (*__cancel_routine) (void *);
+16535:   void *__cancel_arg;
+16535:   int __do_it;
+16535:   int __cancel_type;
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: class __pthread_cleanup_class
+16535: {
+16535:   void (*__cancel_routine) (void *);
+16535:   void *__cancel_arg;
+16535:   int __do_it;
+16535:   int __cancel_type;
+16535: 
+16535:  public:
+16535:   __pthread_cleanup_class (void (*__fct) (void *), void *__arg)
+16535:     : __cancel_routine (__fct), __cancel_arg (__arg), __do_it (1) { }
+16535:   ~__pthread_cleanup_class () { if (__do_it) __cancel_routine (__cancel_arg); }
+16535:   void __setdoit (int __newval) { __do_it = __newval; }
+16535:   void __defer () { pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED,
+16535:         &__cancel_type); }
+16535:   void __restore () const { pthread_setcanceltype (__cancel_type, 0); }
+16535: };
+16535: # 743 "/usr/include/pthread.h" 3 4
+16535: struct __jmp_buf_tag;
+16535: extern int __sigsetjmp (struct __jmp_buf_tag *__env, int __savemask) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_mutex_init (pthread_mutex_t *__mutex,
+16535:           const pthread_mutexattr_t *__mutexattr)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_mutex_destroy (pthread_mutex_t *__mutex)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_mutex_trylock (pthread_mutex_t *__mutex)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_mutex_lock (pthread_mutex_t *__mutex)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex,
+16535:         const struct timespec *__restrict
+16535:         __abstime) throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_mutex_unlock (pthread_mutex_t *__mutex)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_mutex_getprioceiling (const pthread_mutex_t *
+16535:       __restrict __mutex,
+16535:       int *__restrict __prioceiling)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex,
+16535:       int __prioceiling,
+16535:       int *__restrict __old_ceiling)
+16535:      throw () __attribute__ ((__nonnull__ (1, 3)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_mutex_consistent (pthread_mutex_t *__mutex)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: extern int pthread_mutex_consistent_np (pthread_mutex_t *__mutex)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: # 807 "/usr/include/pthread.h" 3 4
+16535: extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_mutexattr_getpshared (const pthread_mutexattr_t *
+16535:       __restrict __attr,
+16535:       int *__restrict __pshared)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr,
+16535:       int __pshared)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_mutexattr_gettype (const pthread_mutexattr_t *__restrict
+16535:           __attr, int *__restrict __kind)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_mutexattr_getprotocol (const pthread_mutexattr_t *
+16535:        __restrict __attr,
+16535:        int *__restrict __protocol)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_mutexattr_setprotocol (pthread_mutexattr_t *__attr,
+16535:        int __protocol)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t *
+16535:           __restrict __attr,
+16535:           int *__restrict __prioceiling)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *__attr,
+16535:           int __prioceiling)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_mutexattr_getrobust (const pthread_mutexattr_t *__attr,
+16535:      int *__robustness)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: extern int pthread_mutexattr_getrobust_np (const pthread_mutexattr_t *__attr,
+16535:         int *__robustness)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_mutexattr_setrobust (pthread_mutexattr_t *__attr,
+16535:      int __robustness)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: extern int pthread_mutexattr_setrobust_np (pthread_mutexattr_t *__attr,
+16535:         int __robustness)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: # 889 "/usr/include/pthread.h" 3 4
+16535: extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock,
+16535:     const pthread_rwlockattr_t *__restrict
+16535:     __attr) throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock)
+16535:   throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock,
+16535:            const struct timespec *__restrict
+16535:            __abstime) throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock,
+16535:            const struct timespec *__restrict
+16535:            __abstime) throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *
+16535:        __restrict __attr,
+16535:        int *__restrict __pshared)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr,
+16535:        int __pshared)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_rwlockattr_getkind_np (const pthread_rwlockattr_t *
+16535:        __restrict __attr,
+16535:        int *__restrict __pref)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern int pthread_rwlockattr_setkind_np (pthread_rwlockattr_t *__attr,
+16535:        int __pref) throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_cond_init (pthread_cond_t *__restrict __cond,
+16535:          const pthread_condattr_t *__restrict __cond_attr)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_cond_destroy (pthread_cond_t *__cond)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_cond_signal (pthread_cond_t *__cond)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_cond_broadcast (pthread_cond_t *__cond)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_cond_wait (pthread_cond_t *__restrict __cond,
+16535:          pthread_mutex_t *__restrict __mutex)
+16535:      __attribute__ ((__nonnull__ (1, 2)));
+16535: # 1001 "/usr/include/pthread.h" 3 4
+16535: extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond,
+16535:        pthread_mutex_t *__restrict __mutex,
+16535:        const struct timespec *__restrict __abstime)
+16535:      __attribute__ ((__nonnull__ (1, 2, 3)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_condattr_init (pthread_condattr_t *__attr)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_condattr_destroy (pthread_condattr_t *__attr)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_condattr_getpshared (const pthread_condattr_t *
+16535:      __restrict __attr,
+16535:      int *__restrict __pshared)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern int pthread_condattr_setpshared (pthread_condattr_t *__attr,
+16535:      int __pshared) throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_condattr_getclock (const pthread_condattr_t *
+16535:           __restrict __attr,
+16535:           __clockid_t *__restrict __clock_id)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern int pthread_condattr_setclock (pthread_condattr_t *__attr,
+16535:           __clockid_t __clock_id)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: # 1045 "/usr/include/pthread.h" 3 4
+16535: extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_spin_destroy (pthread_spinlock_t *__lock)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_spin_lock (pthread_spinlock_t *__lock)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_spin_trylock (pthread_spinlock_t *__lock)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_spin_unlock (pthread_spinlock_t *__lock)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier,
+16535:      const pthread_barrierattr_t *__restrict
+16535:      __attr, unsigned int __count)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_barrier_destroy (pthread_barrier_t *__barrier)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_barrier_wait (pthread_barrier_t *__barrier)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t *
+16535:         __restrict __attr,
+16535:         int *__restrict __pshared)
+16535:      throw () __attribute__ ((__nonnull__ (1, 2)));
+16535: 
+16535: 
+16535: extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr,
+16535:         int __pshared)
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: # 1112 "/usr/include/pthread.h" 3 4
+16535: extern int pthread_key_create (pthread_key_t *__key,
+16535:           void (*__destr_function) (void *))
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int pthread_key_delete (pthread_key_t __key) throw ();
+16535: 
+16535: 
+16535: extern void *pthread_getspecific (pthread_key_t __key) throw ();
+16535: 
+16535: 
+16535: extern int pthread_setspecific (pthread_key_t __key,
+16535:     const void *__pointer) throw () ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pthread_getcpuclockid (pthread_t __thread_id,
+16535:       __clockid_t *__clock_id)
+16535:      throw () __attribute__ ((__nonnull__ (2)));
+16535: # 1146 "/usr/include/pthread.h" 3 4
+16535: extern int pthread_atfork (void (*__prepare) (void),
+16535:       void (*__parent) (void),
+16535:       void (*__child) (void)) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__gnu_inline__)) int
+16535: __attribute__ ((__leaf__)) pthread_equal (pthread_t __thread1, pthread_t __thread2) throw ()
+16535: {
+16535:   return __thread1 == __thread2;
+16535: }
+16535: 
+16535: 
+16535: }
+16535: # 36 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h" 2 3
+16535: # 47 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h" 3
+16535: typedef pthread_t __gthread_t;
+16535: typedef pthread_key_t __gthread_key_t;
+16535: typedef pthread_once_t __gthread_once_t;
+16535: typedef pthread_mutex_t __gthread_mutex_t;
+16535: typedef pthread_mutex_t __gthread_recursive_mutex_t;
+16535: typedef pthread_cond_t __gthread_cond_t;
+16535: typedef struct timespec __gthread_time_t;
+16535: # 101 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h" 3
+16535: static __typeof(pthread_once) __gthrw_pthread_once __attribute__ ((__weakref__("pthread_once")));
+16535: static __typeof(pthread_getspecific) __gthrw_pthread_getspecific __attribute__ ((__weakref__("pthread_getspecific")));
+16535: static __typeof(pthread_setspecific) __gthrw_pthread_setspecific __attribute__ ((__weakref__("pthread_setspecific")));
+16535: 
+16535: static __typeof(pthread_create) __gthrw_pthread_create __attribute__ ((__weakref__("pthread_create")));
+16535: static __typeof(pthread_join) __gthrw_pthread_join __attribute__ ((__weakref__("pthread_join")));
+16535: static __typeof(pthread_equal) __gthrw_pthread_equal __attribute__ ((__weakref__("pthread_equal")));
+16535: static __typeof(pthread_self) __gthrw_pthread_self __attribute__ ((__weakref__("pthread_self")));
+16535: static __typeof(pthread_detach) __gthrw_pthread_detach __attribute__ ((__weakref__("pthread_detach")));
+16535: 
+16535: static __typeof(pthread_cancel) __gthrw_pthread_cancel __attribute__ ((__weakref__("pthread_cancel")));
+16535: 
+16535: static __typeof(sched_yield) __gthrw_sched_yield __attribute__ ((__weakref__("sched_yield")));
+16535: 
+16535: static __typeof(pthread_mutex_lock) __gthrw_pthread_mutex_lock __attribute__ ((__weakref__("pthread_mutex_lock")));
+16535: static __typeof(pthread_mutex_trylock) __gthrw_pthread_mutex_trylock __attribute__ ((__weakref__("pthread_mutex_trylock")));
+16535: 
+16535: static __typeof(pthread_mutex_timedlock) __gthrw_pthread_mutex_timedlock __attribute__ ((__weakref__("pthread_mutex_timedlock")));
+16535: 
+16535: static __typeof(pthread_mutex_unlock) __gthrw_pthread_mutex_unlock __attribute__ ((__weakref__("pthread_mutex_unlock")));
+16535: static __typeof(pthread_mutex_init) __gthrw_pthread_mutex_init __attribute__ ((__weakref__("pthread_mutex_init")));
+16535: static __typeof(pthread_mutex_destroy) __gthrw_pthread_mutex_destroy __attribute__ ((__weakref__("pthread_mutex_destroy")));
+16535: 
+16535: static __typeof(pthread_cond_init) __gthrw_pthread_cond_init __attribute__ ((__weakref__("pthread_cond_init")));
+16535: static __typeof(pthread_cond_broadcast) __gthrw_pthread_cond_broadcast __attribute__ ((__weakref__("pthread_cond_broadcast")));
+16535: static __typeof(pthread_cond_signal) __gthrw_pthread_cond_signal __attribute__ ((__weakref__("pthread_cond_signal")));
+16535: static __typeof(pthread_cond_wait) __gthrw_pthread_cond_wait __attribute__ ((__weakref__("pthread_cond_wait")));
+16535: static __typeof(pthread_cond_timedwait) __gthrw_pthread_cond_timedwait __attribute__ ((__weakref__("pthread_cond_timedwait")));
+16535: static __typeof(pthread_cond_destroy) __gthrw_pthread_cond_destroy __attribute__ ((__weakref__("pthread_cond_destroy")));
+16535: 
+16535: static __typeof(pthread_key_create) __gthrw_pthread_key_create __attribute__ ((__weakref__("pthread_key_create")));
+16535: static __typeof(pthread_key_delete) __gthrw_pthread_key_delete __attribute__ ((__weakref__("pthread_key_delete")));
+16535: static __typeof(pthread_mutexattr_init) __gthrw_pthread_mutexattr_init __attribute__ ((__weakref__("pthread_mutexattr_init")));
+16535: static __typeof(pthread_mutexattr_settype) __gthrw_pthread_mutexattr_settype __attribute__ ((__weakref__("pthread_mutexattr_settype")));
+16535: static __typeof(pthread_mutexattr_destroy) __gthrw_pthread_mutexattr_destroy __attribute__ ((__weakref__("pthread_mutexattr_destroy")));
+16535: # 236 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h" 3
+16535: static __typeof(pthread_key_create) __gthrw___pthread_key_create __attribute__ ((__weakref__("__pthread_key_create")));
+16535: # 246 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h" 3
+16535: static inline int
+16535: __gthread_active_p (void)
+16535: {
+16535:   static void *const __gthread_active_ptr
+16535:     = __extension__ (void *) &__gthrw___pthread_key_create;
+16535:   return __gthread_active_ptr != 0;
+16535: }
+16535: # 658 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h" 3
+16535: static inline int
+16535: __gthread_create (__gthread_t *__threadid, void *(*__func) (void*),
+16535:     void *__args)
+16535: {
+16535:   return __gthrw_pthread_create (__threadid, __null, __func, __args);
+16535: }
+16535: 
+16535: static inline int
+16535: __gthread_join (__gthread_t __threadid, void **__value_ptr)
+16535: {
+16535:   return __gthrw_pthread_join (__threadid, __value_ptr);
+16535: }
+16535: 
+16535: static inline int
+16535: __gthread_detach (__gthread_t __threadid)
+16535: {
+16535:   return __gthrw_pthread_detach (__threadid);
+16535: }
+16535: 
+16535: static inline int
+16535: __gthread_equal (__gthread_t __t1, __gthread_t __t2)
+16535: {
+16535:   return __gthrw_pthread_equal (__t1, __t2);
+16535: }
+16535: 
+16535: static inline __gthread_t
+16535: __gthread_self (void)
+16535: {
+16535:   return __gthrw_pthread_self ();
+16535: }
+16535: 
+16535: static inline int
+16535: __gthread_yield (void)
+16535: {
+16535:   return __gthrw_sched_yield ();
+16535: }
+16535: 
+16535: static inline int
+16535: __gthread_once (__gthread_once_t *__once, void (*__func) (void))
+16535: {
+16535:   if (__gthread_active_p ())
+16535:     return __gthrw_pthread_once (__once, __func);
+16535:   else
+16535:     return -1;
+16535: }
+16535: 
+16535: static inline int
+16535: __gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *))
+16535: {
+16535:   return __gthrw_pthread_key_create (__key, __dtor);
+16535: }
+16535: 
+16535: static inline int
+16535: __gthread_key_delete (__gthread_key_t __key)
+16535: {
+16535:   return __gthrw_pthread_key_delete (__key);
+16535: }
+16535: 
+16535: static inline void *
+16535: __gthread_getspecific (__gthread_key_t __key)
+16535: {
+16535:   return __gthrw_pthread_getspecific (__key);
+16535: }
+16535: 
+16535: static inline int
+16535: __gthread_setspecific (__gthread_key_t __key, const void *__ptr)
+16535: {
+16535:   return __gthrw_pthread_setspecific (__key, __ptr);
+16535: }
+16535: 
+16535: static inline void
+16535: __gthread_mutex_init_function (__gthread_mutex_t *__mutex)
+16535: {
+16535:   if (__gthread_active_p ())
+16535:     __gthrw_pthread_mutex_init (__mutex, __null);
+16535: }
+16535: 
+16535: static inline int
+16535: __gthread_mutex_destroy (__gthread_mutex_t *__mutex)
+16535: {
+16535:   if (__gthread_active_p ())
+16535:     return __gthrw_pthread_mutex_destroy (__mutex);
+16535:   else
+16535:     return 0;
+16535: }
+16535: 
+16535: static inline int
+16535: __gthread_mutex_lock (__gthread_mutex_t *__mutex)
+16535: {
+16535:   if (__gthread_active_p ())
+16535:     return __gthrw_pthread_mutex_lock (__mutex);
+16535:   else
+16535:     return 0;
+16535: }
+16535: 
+16535: static inline int
+16535: __gthread_mutex_trylock (__gthread_mutex_t *__mutex)
+16535: {
+16535:   if (__gthread_active_p ())
+16535:     return __gthrw_pthread_mutex_trylock (__mutex);
+16535:   else
+16535:     return 0;
+16535: }
+16535: 
+16535: 
+16535: static inline int
+16535: __gthread_mutex_timedlock (__gthread_mutex_t *__mutex,
+16535:       const __gthread_time_t *__abs_timeout)
+16535: {
+16535:   if (__gthread_active_p ())
+16535:     return __gthrw_pthread_mutex_timedlock (__mutex, __abs_timeout);
+16535:   else
+16535:     return 0;
+16535: }
+16535: 
+16535: 
+16535: static inline int
+16535: __gthread_mutex_unlock (__gthread_mutex_t *__mutex)
+16535: {
+16535:   if (__gthread_active_p ())
+16535:     return __gthrw_pthread_mutex_unlock (__mutex);
+16535:   else
+16535:     return 0;
+16535: }
+16535: # 807 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h" 3
+16535: static inline int
+16535: __gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex)
+16535: {
+16535:   return __gthread_mutex_lock (__mutex);
+16535: }
+16535: 
+16535: static inline int
+16535: __gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex)
+16535: {
+16535:   return __gthread_mutex_trylock (__mutex);
+16535: }
+16535: 
+16535: 
+16535: static inline int
+16535: __gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *__mutex,
+16535:          const __gthread_time_t *__abs_timeout)
+16535: {
+16535:   return __gthread_mutex_timedlock (__mutex, __abs_timeout);
+16535: }
+16535: 
+16535: 
+16535: static inline int
+16535: __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
+16535: {
+16535:   return __gthread_mutex_unlock (__mutex);
+16535: }
+16535: 
+16535: static inline int
+16535: __gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
+16535: {
+16535:   return __gthread_mutex_destroy (__mutex);
+16535: }
+16535: # 849 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr-default.h" 3
+16535: static inline int
+16535: __gthread_cond_broadcast (__gthread_cond_t *__cond)
+16535: {
+16535:   return __gthrw_pthread_cond_broadcast (__cond);
+16535: }
+16535: 
+16535: static inline int
+16535: __gthread_cond_signal (__gthread_cond_t *__cond)
+16535: {
+16535:   return __gthrw_pthread_cond_signal (__cond);
+16535: }
+16535: 
+16535: static inline int
+16535: __gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex)
+16535: {
+16535:   return __gthrw_pthread_cond_wait (__cond, __mutex);
+16535: }
+16535: 
+16535: static inline int
+16535: __gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex,
+16535:      const __gthread_time_t *__abs_timeout)
+16535: {
+16535:   return __gthrw_pthread_cond_timedwait (__cond, __mutex, __abs_timeout);
+16535: }
+16535: 
+16535: static inline int
+16535: __gthread_cond_wait_recursive (__gthread_cond_t *__cond,
+16535:           __gthread_recursive_mutex_t *__mutex)
+16535: {
+16535:   return __gthread_cond_wait (__cond, __mutex);
+16535: }
+16535: 
+16535: static inline int
+16535: __gthread_cond_destroy (__gthread_cond_t* __cond)
+16535: {
+16535:   return __gthrw_pthread_cond_destroy (__cond);
+16535: }
+16535: # 149 "/usr/include/x86_64-linux-gnu/c++/8/bits/gthr.h" 2 3
+16535: 
+16535: 
+16535: #pragma GCC visibility pop
+16535: # 36 "/usr/include/c++/8/ext/atomicity.h" 2 3
+16535: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/atomic_word.h" 1 3
+16535: # 32 "/usr/include/x86_64-linux-gnu/c++/8/bits/atomic_word.h" 3
+16535: typedef int _Atomic_word;
+16535: # 37 "/usr/include/c++/8/ext/atomicity.h" 2 3
+16535: 
+16535: namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static inline _Atomic_word
+16535:   __exchange_and_add(volatile _Atomic_word* __mem, int __val)
+16535:   { return __atomic_fetch_add(__mem, __val, 4); }
+16535: 
+16535:   static inline void
+16535:   __atomic_add(volatile _Atomic_word* __mem, int __val)
+16535:   { __atomic_fetch_add(__mem, __val, 4); }
+16535: # 64 "/usr/include/c++/8/ext/atomicity.h" 3
+16535:   static inline _Atomic_word
+16535:   __exchange_and_add_single(_Atomic_word* __mem, int __val)
+16535:   {
+16535:     _Atomic_word __result = *__mem;
+16535:     *__mem += __val;
+16535:     return __result;
+16535:   }
+16535: 
+16535:   static inline void
+16535:   __atomic_add_single(_Atomic_word* __mem, int __val)
+16535:   { *__mem += __val; }
+16535: 
+16535:   static inline _Atomic_word
+16535:   __attribute__ ((__unused__))
+16535:   __exchange_and_add_dispatch(_Atomic_word* __mem, int __val)
+16535:   {
+16535: 
+16535:     if (__gthread_active_p())
+16535:       return __exchange_and_add(__mem, __val);
+16535:     else
+16535:       return __exchange_and_add_single(__mem, __val);
+16535: 
+16535: 
+16535: 
+16535:   }
+16535: 
+16535:   static inline void
+16535:   __attribute__ ((__unused__))
+16535:   __atomic_add_dispatch(_Atomic_word* __mem, int __val)
+16535:   {
+16535: 
+16535:     if (__gthread_active_p())
+16535:       __atomic_add(__mem, __val);
+16535:     else
+16535:       __atomic_add_single(__mem, __val);
+16535: 
+16535: 
+16535: 
+16535:   }
+16535: 
+16535: 
+16535: }
+16535: # 40 "/usr/include/c++/8/bits/basic_string.h" 2 3
+16535: # 52 "/usr/include/c++/8/bits/basic_string.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: namespace __cxx11 {
+16535: # 76 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     class basic_string
+16535:     {
+16535:       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
+16535:  rebind<_CharT>::other _Char_alloc_type;
+16535:       typedef __gnu_cxx::__alloc_traits<_Char_alloc_type> _Alloc_traits;
+16535: 
+16535: 
+16535:     public:
+16535:       typedef _Traits traits_type;
+16535:       typedef typename _Traits::char_type value_type;
+16535:       typedef _Char_alloc_type allocator_type;
+16535:       typedef typename _Alloc_traits::size_type size_type;
+16535:       typedef typename _Alloc_traits::difference_type difference_type;
+16535:       typedef typename _Alloc_traits::reference reference;
+16535:       typedef typename _Alloc_traits::const_reference const_reference;
+16535:       typedef typename _Alloc_traits::pointer pointer;
+16535:       typedef typename _Alloc_traits::const_pointer const_pointer;
+16535:       typedef __gnu_cxx::__normal_iterator<pointer, basic_string> iterator;
+16535:       typedef __gnu_cxx::__normal_iterator<const_pointer, basic_string>
+16535:        const_iterator;
+16535:       typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+16535:       typedef std::reverse_iterator<iterator> reverse_iterator;
+16535: 
+16535: 
+16535:       static const size_type npos = static_cast<size_type>(-1);
+16535: 
+16535:     private:
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       typedef const_iterator __const_iterator;
+16535: # 139 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       struct _Alloc_hider : allocator_type
+16535:       {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  _Alloc_hider(pointer __dat, const _Alloc& __a)
+16535:  : allocator_type(__a), _M_p(__dat) { }
+16535: 
+16535:  _Alloc_hider(pointer __dat, _Alloc&& __a = _Alloc())
+16535:  : allocator_type(std::move(__a)), _M_p(__dat) { }
+16535: 
+16535: 
+16535:  pointer _M_p;
+16535:       };
+16535: 
+16535:       _Alloc_hider _M_dataplus;
+16535:       size_type _M_string_length;
+16535: 
+16535:       enum { _S_local_capacity = 15 / sizeof(_CharT) };
+16535: 
+16535:       union
+16535:       {
+16535:  _CharT _M_local_buf[_S_local_capacity + 1];
+16535:  size_type _M_allocated_capacity;
+16535:       };
+16535: 
+16535:       void
+16535:       _M_data(pointer __p)
+16535:       { _M_dataplus._M_p = __p; }
+16535: 
+16535:       void
+16535:       _M_length(size_type __length)
+16535:       { _M_string_length = __length; }
+16535: 
+16535:       pointer
+16535:       _M_data() const
+16535:       { return _M_dataplus._M_p; }
+16535: 
+16535:       pointer
+16535:       _M_local_data()
+16535:       {
+16535: 
+16535:  return std::pointer_traits<pointer>::pointer_to(*_M_local_buf);
+16535: 
+16535: 
+16535: 
+16535:       }
+16535: 
+16535:       const_pointer
+16535:       _M_local_data() const
+16535:       {
+16535: 
+16535:  return std::pointer_traits<const_pointer>::pointer_to(*_M_local_buf);
+16535: 
+16535: 
+16535: 
+16535:       }
+16535: 
+16535:       void
+16535:       _M_capacity(size_type __capacity)
+16535:       { _M_allocated_capacity = __capacity; }
+16535: 
+16535:       void
+16535:       _M_set_length(size_type __n)
+16535:       {
+16535:  _M_length(__n);
+16535:  traits_type::assign(_M_data()[__n], _CharT());
+16535:       }
+16535: 
+16535:       bool
+16535:       _M_is_local() const
+16535:       { return _M_data() == _M_local_data(); }
+16535: 
+16535: 
+16535:       pointer
+16535:       _M_create(size_type&, size_type);
+16535: 
+16535:       void
+16535:       _M_dispose()
+16535:       {
+16535:  if (!_M_is_local())
+16535:    _M_destroy(_M_allocated_capacity);
+16535:       }
+16535: 
+16535:       void
+16535:       _M_destroy(size_type __size) throw()
+16535:       { _Alloc_traits::deallocate(_M_get_allocator(), _M_data(), __size + 1); }
+16535: 
+16535: 
+16535: 
+16535:       template<typename _InIterator>
+16535:         void
+16535:         _M_construct_aux(_InIterator __beg, _InIterator __end,
+16535:     std::__false_type)
+16535:  {
+16535:           typedef typename iterator_traits<_InIterator>::iterator_category _Tag;
+16535:           _M_construct(__beg, __end, _Tag());
+16535:  }
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Integer>
+16535:         void
+16535:         _M_construct_aux(_Integer __beg, _Integer __end, std::__true_type)
+16535:  { _M_construct_aux_2(static_cast<size_type>(__beg), __end); }
+16535: 
+16535:       void
+16535:       _M_construct_aux_2(size_type __req, _CharT __c)
+16535:       { _M_construct(__req, __c); }
+16535: 
+16535:       template<typename _InIterator>
+16535:         void
+16535:         _M_construct(_InIterator __beg, _InIterator __end)
+16535:  {
+16535:    typedef typename std::__is_integer<_InIterator>::__type _Integral;
+16535:    _M_construct_aux(__beg, __end, _Integral());
+16535:         }
+16535: 
+16535: 
+16535:       template<typename _InIterator>
+16535:         void
+16535:         _M_construct(_InIterator __beg, _InIterator __end,
+16535:        std::input_iterator_tag);
+16535: 
+16535: 
+16535: 
+16535:       template<typename _FwdIterator>
+16535:         void
+16535:         _M_construct(_FwdIterator __beg, _FwdIterator __end,
+16535:        std::forward_iterator_tag);
+16535: 
+16535:       void
+16535:       _M_construct(size_type __req, _CharT __c);
+16535: 
+16535:       allocator_type&
+16535:       _M_get_allocator()
+16535:       { return _M_dataplus; }
+16535: 
+16535:       const allocator_type&
+16535:       _M_get_allocator() const
+16535:       { return _M_dataplus; }
+16535: 
+16535:     private:
+16535: # 298 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       _M_check(size_type __pos, const char* __s) const
+16535:       {
+16535:  if (__pos > this->size())
+16535:    __throw_out_of_range_fmt(("%s: __pos (which is %zu) > " "this->size() (which is %zu)")
+16535:                                          ,
+16535:        __s, __pos, this->size());
+16535:  return __pos;
+16535:       }
+16535: 
+16535:       void
+16535:       _M_check_length(size_type __n1, size_type __n2, const char* __s) const
+16535:       {
+16535:  if (this->max_size() - (this->size() - __n1) < __n2)
+16535:    __throw_length_error((__s));
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       size_type
+16535:       _M_limit(size_type __pos, size_type __off) const noexcept
+16535:       {
+16535:  const bool __testoff = __off < this->size() - __pos;
+16535:  return __testoff ? __off : this->size() - __pos;
+16535:       }
+16535: 
+16535: 
+16535:       bool
+16535:       _M_disjunct(const _CharT* __s) const noexcept
+16535:       {
+16535:  return (less<const _CharT*>()(__s, _M_data())
+16535:   || less<const _CharT*>()(_M_data() + this->size(), __s));
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       static void
+16535:       _S_copy(_CharT* __d, const _CharT* __s, size_type __n)
+16535:       {
+16535:  if (__n == 1)
+16535:    traits_type::assign(*__d, *__s);
+16535:  else
+16535:    traits_type::copy(__d, __s, __n);
+16535:       }
+16535: 
+16535:       static void
+16535:       _S_move(_CharT* __d, const _CharT* __s, size_type __n)
+16535:       {
+16535:  if (__n == 1)
+16535:    traits_type::assign(*__d, *__s);
+16535:  else
+16535:    traits_type::move(__d, __s, __n);
+16535:       }
+16535: 
+16535:       static void
+16535:       _S_assign(_CharT* __d, size_type __n, _CharT __c)
+16535:       {
+16535:  if (__n == 1)
+16535:    traits_type::assign(*__d, __c);
+16535:  else
+16535:    traits_type::assign(__d, __n, __c);
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       template<class _Iterator>
+16535:         static void
+16535:         _S_copy_chars(_CharT* __p, _Iterator __k1, _Iterator __k2)
+16535:         {
+16535:    for (; __k1 != __k2; ++__k1, (void)++__p)
+16535:      traits_type::assign(*__p, *__k1);
+16535:  }
+16535: 
+16535:       static void
+16535:       _S_copy_chars(_CharT* __p, iterator __k1, iterator __k2) noexcept
+16535:       { _S_copy_chars(__p, __k1.base(), __k2.base()); }
+16535: 
+16535:       static void
+16535:       _S_copy_chars(_CharT* __p, const_iterator __k1, const_iterator __k2)
+16535:       noexcept
+16535:       { _S_copy_chars(__p, __k1.base(), __k2.base()); }
+16535: 
+16535:       static void
+16535:       _S_copy_chars(_CharT* __p, _CharT* __k1, _CharT* __k2) noexcept
+16535:       { _S_copy(__p, __k1, __k2 - __k1); }
+16535: 
+16535:       static void
+16535:       _S_copy_chars(_CharT* __p, const _CharT* __k1, const _CharT* __k2)
+16535:       noexcept
+16535:       { _S_copy(__p, __k1, __k2 - __k1); }
+16535: 
+16535:       static int
+16535:       _S_compare(size_type __n1, size_type __n2) noexcept
+16535:       {
+16535:  const difference_type __d = difference_type(__n1 - __n2);
+16535: 
+16535:  if (__d > __gnu_cxx::__numeric_traits<int>::__max)
+16535:    return __gnu_cxx::__numeric_traits<int>::__max;
+16535:  else if (__d < __gnu_cxx::__numeric_traits<int>::__min)
+16535:    return __gnu_cxx::__numeric_traits<int>::__min;
+16535:  else
+16535:    return int(__d);
+16535:       }
+16535: 
+16535:       void
+16535:       _M_assign(const basic_string&);
+16535: 
+16535:       void
+16535:       _M_mutate(size_type __pos, size_type __len1, const _CharT* __s,
+16535:   size_type __len2);
+16535: 
+16535:       void
+16535:       _M_erase(size_type __pos, size_type __n);
+16535: 
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       basic_string()
+16535:       noexcept(is_nothrow_default_constructible<_Alloc>::value)
+16535:       : _M_dataplus(_M_local_data())
+16535:       { _M_set_length(0); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       explicit
+16535:       basic_string(const _Alloc& __a) noexcept
+16535:       : _M_dataplus(_M_local_data(), __a)
+16535:       { _M_set_length(0); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       basic_string(const basic_string& __str)
+16535:       : _M_dataplus(_M_local_data(),
+16535:       _Alloc_traits::_S_select_on_copy(__str._M_get_allocator()))
+16535:       { _M_construct(__str._M_data(), __str._M_data() + __str.length()); }
+16535: # 450 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string(const basic_string& __str, size_type __pos,
+16535:      const _Alloc& __a = _Alloc())
+16535:       : _M_dataplus(_M_local_data(), __a)
+16535:       {
+16535:  const _CharT* __start = __str._M_data()
+16535:    + __str._M_check(__pos, "basic_string::basic_string");
+16535:  _M_construct(__start, __start + __str._M_limit(__pos, npos));
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       basic_string(const basic_string& __str, size_type __pos,
+16535:      size_type __n)
+16535:       : _M_dataplus(_M_local_data())
+16535:       {
+16535:  const _CharT* __start = __str._M_data()
+16535:    + __str._M_check(__pos, "basic_string::basic_string");
+16535:  _M_construct(__start, __start + __str._M_limit(__pos, __n));
+16535:       }
+16535: # 481 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string(const basic_string& __str, size_type __pos,
+16535:      size_type __n, const _Alloc& __a)
+16535:       : _M_dataplus(_M_local_data(), __a)
+16535:       {
+16535:  const _CharT* __start
+16535:    = __str._M_data() + __str._M_check(__pos, "string::string");
+16535:  _M_construct(__start, __start + __str._M_limit(__pos, __n));
+16535:       }
+16535: # 499 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string(const _CharT* __s, size_type __n,
+16535:      const _Alloc& __a = _Alloc())
+16535:       : _M_dataplus(_M_local_data(), __a)
+16535:       { _M_construct(__s, __s + __n); }
+16535: # 514 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string(const _CharT* __s, const _Alloc& __a = _Alloc())
+16535:       : _M_dataplus(_M_local_data(), __a)
+16535:       { _M_construct(__s, __s ? __s + traits_type::length(__s) : __s+npos); }
+16535: # 529 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc())
+16535:       : _M_dataplus(_M_local_data(), __a)
+16535:       { _M_construct(__n, __c); }
+16535: # 541 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string(basic_string&& __str) noexcept
+16535:       : _M_dataplus(_M_local_data(), std::move(__str._M_get_allocator()))
+16535:       {
+16535:  if (__str._M_is_local())
+16535:    {
+16535:      traits_type::copy(_M_local_buf, __str._M_local_buf,
+16535:          _S_local_capacity + 1);
+16535:    }
+16535:  else
+16535:    {
+16535:      _M_data(__str._M_data());
+16535:      _M_capacity(__str._M_allocated_capacity);
+16535:    }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  _M_length(__str.length());
+16535:  __str._M_data(__str._M_local_data());
+16535:  __str._M_set_length(0);
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc())
+16535:       : _M_dataplus(_M_local_data(), __a)
+16535:       { _M_construct(__l.begin(), __l.end()); }
+16535: 
+16535:       basic_string(const basic_string& __str, const _Alloc& __a)
+16535:       : _M_dataplus(_M_local_data(), __a)
+16535:       { _M_construct(__str.begin(), __str.end()); }
+16535: 
+16535:       basic_string(basic_string&& __str, const _Alloc& __a)
+16535:       noexcept(_Alloc_traits::_S_always_equal())
+16535:       : _M_dataplus(_M_local_data(), __a)
+16535:       {
+16535:  if (__str._M_is_local())
+16535:    {
+16535:      traits_type::copy(_M_local_buf, __str._M_local_buf,
+16535:          _S_local_capacity + 1);
+16535:      _M_length(__str.length());
+16535:      __str._M_set_length(0);
+16535:    }
+16535:  else if (_Alloc_traits::_S_always_equal()
+16535:      || __str.get_allocator() == __a)
+16535:    {
+16535:      _M_data(__str._M_data());
+16535:      _M_length(__str.length());
+16535:      _M_capacity(__str._M_allocated_capacity);
+16535:      __str._M_data(__str._M_local_buf);
+16535:      __str._M_set_length(0);
+16535:    }
+16535:  else
+16535:    _M_construct(__str.begin(), __str.end());
+16535:       }
+16535: # 609 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       template<typename _InputIterator,
+16535:         typename = std::_RequireInputIter<_InputIterator>>
+16535: 
+16535: 
+16535: 
+16535:         basic_string(_InputIterator __beg, _InputIterator __end,
+16535:        const _Alloc& __a = _Alloc())
+16535:  : _M_dataplus(_M_local_data(), __a)
+16535:  { _M_construct(__beg, __end); }
+16535: # 656 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       ~basic_string()
+16535:       { _M_dispose(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       basic_string&
+16535:       operator=(const basic_string& __str)
+16535:       {
+16535: 
+16535:  if (_Alloc_traits::_S_propagate_on_copy_assign())
+16535:    {
+16535:      if (!_Alloc_traits::_S_always_equal() && !_M_is_local()
+16535:   && _M_get_allocator() != __str._M_get_allocator())
+16535:        {
+16535: 
+16535: 
+16535:   if (__str.size() <= _S_local_capacity)
+16535:     {
+16535:       _M_destroy(_M_allocated_capacity);
+16535:       _M_data(_M_local_data());
+16535:       _M_set_length(0);
+16535:     }
+16535:   else
+16535:     {
+16535:       const auto __len = __str.size();
+16535:       auto __alloc = __str._M_get_allocator();
+16535: 
+16535:       auto __ptr = _Alloc_traits::allocate(__alloc, __len + 1);
+16535:       _M_destroy(_M_allocated_capacity);
+16535:       _M_data(__ptr);
+16535:       _M_capacity(__len);
+16535:       _M_set_length(__len);
+16535:     }
+16535:        }
+16535:      std::__alloc_on_copy(_M_get_allocator(), __str._M_get_allocator());
+16535:    }
+16535: 
+16535:  return this->assign(__str);
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       basic_string&
+16535:       operator=(const _CharT* __s)
+16535:       { return this->assign(__s); }
+16535: # 713 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       operator=(_CharT __c)
+16535:       {
+16535:  this->assign(1, __c);
+16535:  return *this;
+16535:       }
+16535: # 731 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       operator=(basic_string&& __str)
+16535:       noexcept(_Alloc_traits::_S_nothrow_move())
+16535:       {
+16535:  if (!_M_is_local() && _Alloc_traits::_S_propagate_on_move_assign()
+16535:      && !_Alloc_traits::_S_always_equal()
+16535:      && _M_get_allocator() != __str._M_get_allocator())
+16535:    {
+16535: 
+16535:      _M_destroy(_M_allocated_capacity);
+16535:      _M_data(_M_local_data());
+16535:      _M_set_length(0);
+16535:    }
+16535: 
+16535:  std::__alloc_on_move(_M_get_allocator(), __str._M_get_allocator());
+16535: 
+16535:  if (__str._M_is_local())
+16535:    {
+16535: 
+16535:      if (__str.size())
+16535:        this->_S_copy(_M_data(), __str._M_data(), __str.size());
+16535:      _M_set_length(__str.size());
+16535:    }
+16535:  else if (_Alloc_traits::_S_propagate_on_move_assign()
+16535:      || _Alloc_traits::_S_always_equal()
+16535:      || _M_get_allocator() == __str._M_get_allocator())
+16535:    {
+16535: 
+16535:      pointer __data = nullptr;
+16535:      size_type __capacity;
+16535:      if (!_M_is_local())
+16535:        {
+16535:   if (_Alloc_traits::_S_always_equal())
+16535:     {
+16535: 
+16535:       __data = _M_data();
+16535:       __capacity = _M_allocated_capacity;
+16535:     }
+16535:   else
+16535:     _M_destroy(_M_allocated_capacity);
+16535:        }
+16535: 
+16535:      _M_data(__str._M_data());
+16535:      _M_length(__str.length());
+16535:      _M_capacity(__str._M_allocated_capacity);
+16535:      if (__data)
+16535:        {
+16535:   __str._M_data(__data);
+16535:   __str._M_capacity(__capacity);
+16535:        }
+16535:      else
+16535:        __str._M_data(__str._M_local_buf);
+16535:    }
+16535:  else
+16535:    assign(__str);
+16535:  __str.clear();
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       basic_string&
+16535:       operator=(initializer_list<_CharT> __l)
+16535:       {
+16535:  this->assign(__l.begin(), __l.size());
+16535:  return *this;
+16535:       }
+16535: # 825 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       iterator
+16535:       begin() noexcept
+16535:       { return iterator(_M_data()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       begin() const noexcept
+16535:       { return const_iterator(_M_data()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       end() noexcept
+16535:       { return iterator(_M_data() + this->size()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       end() const noexcept
+16535:       { return const_iterator(_M_data() + this->size()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       rbegin() noexcept
+16535:       { return reverse_iterator(this->end()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       rbegin() const noexcept
+16535:       { return const_reverse_iterator(this->end()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       rend() noexcept
+16535:       { return reverse_iterator(this->begin()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       rend() const noexcept
+16535:       { return const_reverse_iterator(this->begin()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       cbegin() const noexcept
+16535:       { return const_iterator(this->_M_data()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       cend() const noexcept
+16535:       { return const_iterator(this->_M_data() + this->size()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       crbegin() const noexcept
+16535:       { return const_reverse_iterator(this->end()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       crend() const noexcept
+16535:       { return const_reverse_iterator(this->begin()); }
+16535: 
+16535: 
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535:       size_type
+16535:       size() const noexcept
+16535:       { return _M_string_length; }
+16535: 
+16535: 
+16535: 
+16535:       size_type
+16535:       length() const noexcept
+16535:       { return _M_string_length; }
+16535: 
+16535: 
+16535:       size_type
+16535:       max_size() const noexcept
+16535:       { return (_Alloc_traits::max_size(_M_get_allocator()) - 1) / 2; }
+16535: # 954 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       void
+16535:       resize(size_type __n, _CharT __c);
+16535: # 967 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       void
+16535:       resize(size_type __n)
+16535:       { this->resize(__n, _CharT()); }
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       shrink_to_fit() noexcept
+16535:       {
+16535: 
+16535:  if (capacity() > size())
+16535:    {
+16535:      try
+16535:        { reserve(0); }
+16535:      catch(...)
+16535:        { }
+16535:    }
+16535: 
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       size_type
+16535:       capacity() const noexcept
+16535:       {
+16535:  return _M_is_local() ? size_type(_S_local_capacity)
+16535:                       : _M_allocated_capacity;
+16535:       }
+16535: # 1016 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       void
+16535:       reserve(size_type __res_arg = 0);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       clear() noexcept
+16535:       { _M_set_length(0); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       bool
+16535:       empty() const noexcept
+16535:       { return this->size() == 0; }
+16535: # 1045 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       const_reference
+16535:       operator[] (size_type __pos) const noexcept
+16535:       {
+16535:  ;
+16535:  return _M_data()[__pos];
+16535:       }
+16535: # 1062 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       reference
+16535:       operator[](size_type __pos)
+16535:       {
+16535: 
+16535: 
+16535:  ;
+16535: 
+16535:  ;
+16535:  return _M_data()[__pos];
+16535:       }
+16535: # 1083 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       const_reference
+16535:       at(size_type __n) const
+16535:       {
+16535:  if (__n >= this->size())
+16535:    __throw_out_of_range_fmt(("basic_string::at: __n " "(which is %zu) >= this->size() " "(which is %zu)")
+16535: 
+16535:                             ,
+16535:        __n, this->size());
+16535:  return _M_data()[__n];
+16535:       }
+16535: # 1104 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       reference
+16535:       at(size_type __n)
+16535:       {
+16535:  if (__n >= size())
+16535:    __throw_out_of_range_fmt(("basic_string::at: __n " "(which is %zu) >= this->size() " "(which is %zu)")
+16535: 
+16535:                             ,
+16535:        __n, this->size());
+16535:  return _M_data()[__n];
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reference
+16535:       front() noexcept
+16535:       {
+16535:  ;
+16535:  return operator[](0);
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reference
+16535:       front() const noexcept
+16535:       {
+16535:  ;
+16535:  return operator[](0);
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reference
+16535:       back() noexcept
+16535:       {
+16535:  ;
+16535:  return operator[](this->size() - 1);
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reference
+16535:       back() const noexcept
+16535:       {
+16535:  ;
+16535:  return operator[](this->size() - 1);
+16535:       }
+16535: # 1167 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       operator+=(const basic_string& __str)
+16535:       { return this->append(__str); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       basic_string&
+16535:       operator+=(const _CharT* __s)
+16535:       { return this->append(__s); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       basic_string&
+16535:       operator+=(_CharT __c)
+16535:       {
+16535:  this->push_back(__c);
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       basic_string&
+16535:       operator+=(initializer_list<_CharT> __l)
+16535:       { return this->append(__l.begin(), __l.size()); }
+16535: # 1220 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       append(const basic_string& __str)
+16535:       { return _M_append(__str._M_data(), __str.size()); }
+16535: # 1237 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       append(const basic_string& __str, size_type __pos, size_type __n = npos)
+16535:       { return _M_append(__str._M_data()
+16535:     + __str._M_check(__pos, "basic_string::append"),
+16535:     __str._M_limit(__pos, __n)); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       basic_string&
+16535:       append(const _CharT* __s, size_type __n)
+16535:       {
+16535:  ;
+16535:  _M_check_length(size_type(0), __n, "basic_string::append");
+16535:  return _M_append(__s, __n);
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       basic_string&
+16535:       append(const _CharT* __s)
+16535:       {
+16535:  ;
+16535:  const size_type __n = traits_type::length(__s);
+16535:  _M_check_length(size_type(0), __n, "basic_string::append");
+16535:  return _M_append(__s, __n);
+16535:       }
+16535: # 1279 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       append(size_type __n, _CharT __c)
+16535:       { return _M_replace_aux(this->size(), size_type(0), __n, __c); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       basic_string&
+16535:       append(initializer_list<_CharT> __l)
+16535:       { return this->append(__l.begin(), __l.size()); }
+16535: # 1303 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       template<class _InputIterator,
+16535:         typename = std::_RequireInputIter<_InputIterator>>
+16535: 
+16535: 
+16535: 
+16535:         basic_string&
+16535:         append(_InputIterator __first, _InputIterator __last)
+16535:         { return this->replace(end(), end(), __first, __last); }
+16535: # 1348 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       void
+16535:       push_back(_CharT __c)
+16535:       {
+16535:  const size_type __size = this->size();
+16535:  if (__size + 1 > this->capacity())
+16535:    this->_M_mutate(__size, size_type(0), 0, size_type(1));
+16535:  traits_type::assign(this->_M_data()[__size], __c);
+16535:  this->_M_set_length(__size + 1);
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       basic_string&
+16535:       assign(const basic_string& __str)
+16535:       {
+16535:  this->_M_assign(__str);
+16535:  return *this;
+16535:       }
+16535: # 1379 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       assign(basic_string&& __str)
+16535:       noexcept(_Alloc_traits::_S_nothrow_move())
+16535:       {
+16535: 
+16535: 
+16535:  return *this = std::move(__str);
+16535:       }
+16535: # 1402 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       assign(const basic_string& __str, size_type __pos, size_type __n = npos)
+16535:       { return _M_replace(size_type(0), this->size(), __str._M_data()
+16535:      + __str._M_check(__pos, "basic_string::assign"),
+16535:      __str._M_limit(__pos, __n)); }
+16535: # 1418 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       assign(const _CharT* __s, size_type __n)
+16535:       {
+16535:  ;
+16535:  return _M_replace(size_type(0), this->size(), __s, __n);
+16535:       }
+16535: # 1434 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       assign(const _CharT* __s)
+16535:       {
+16535:  ;
+16535:  return _M_replace(size_type(0), this->size(), __s,
+16535:      traits_type::length(__s));
+16535:       }
+16535: # 1451 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       assign(size_type __n, _CharT __c)
+16535:       { return _M_replace_aux(size_type(0), this->size(), __n, __c); }
+16535: # 1464 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       template<class _InputIterator,
+16535:         typename = std::_RequireInputIter<_InputIterator>>
+16535: 
+16535: 
+16535: 
+16535:         basic_string&
+16535:         assign(_InputIterator __first, _InputIterator __last)
+16535:         { return this->replace(begin(), end(), __first, __last); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       basic_string&
+16535:       assign(initializer_list<_CharT> __l)
+16535:       { return this->assign(__l.begin(), __l.size()); }
+16535: # 1532 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       iterator
+16535:       insert(const_iterator __p, size_type __n, _CharT __c)
+16535:       {
+16535:  ;
+16535:  const size_type __pos = __p - begin();
+16535:  this->replace(__p, __p, __n, __c);
+16535:  return iterator(this->_M_data() + __pos);
+16535:       }
+16535: # 1574 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       template<class _InputIterator,
+16535:         typename = std::_RequireInputIter<_InputIterator>>
+16535:  iterator
+16535:         insert(const_iterator __p, _InputIterator __beg, _InputIterator __end)
+16535:         {
+16535:    ;
+16535:    const size_type __pos = __p - begin();
+16535:    this->replace(__p, __p, __beg, __end);
+16535:    return iterator(this->_M_data() + __pos);
+16535:  }
+16535: # 1610 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       void
+16535:       insert(iterator __p, initializer_list<_CharT> __l)
+16535:       {
+16535:  ;
+16535:  this->insert(__p - begin(), __l.begin(), __l.size());
+16535:       }
+16535: # 1630 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       insert(size_type __pos1, const basic_string& __str)
+16535:       { return this->replace(__pos1, size_type(0),
+16535:         __str._M_data(), __str.size()); }
+16535: # 1653 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       insert(size_type __pos1, const basic_string& __str,
+16535:       size_type __pos2, size_type __n = npos)
+16535:       { return this->replace(__pos1, size_type(0), __str._M_data()
+16535:         + __str._M_check(__pos2, "basic_string::insert"),
+16535:         __str._M_limit(__pos2, __n)); }
+16535: # 1676 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       insert(size_type __pos, const _CharT* __s, size_type __n)
+16535:       { return this->replace(__pos, size_type(0), __s, __n); }
+16535: # 1695 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       insert(size_type __pos, const _CharT* __s)
+16535:       {
+16535:  ;
+16535:  return this->replace(__pos, size_type(0), __s,
+16535:         traits_type::length(__s));
+16535:       }
+16535: # 1719 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       insert(size_type __pos, size_type __n, _CharT __c)
+16535:       { return _M_replace_aux(_M_check(__pos, "basic_string::insert"),
+16535:          size_type(0), __n, __c); }
+16535: # 1737 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       iterator
+16535:       insert(__const_iterator __p, _CharT __c)
+16535:       {
+16535:  ;
+16535:  const size_type __pos = __p - begin();
+16535:  _M_replace_aux(__pos, size_type(0), size_type(1), __c);
+16535:  return iterator(_M_data() + __pos);
+16535:       }
+16535: # 1797 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       erase(size_type __pos = 0, size_type __n = npos)
+16535:       {
+16535:  _M_check(__pos, "basic_string::erase");
+16535:  if (__n == npos)
+16535:    this->_M_set_length(__pos);
+16535:  else if (__n != 0)
+16535:    this->_M_erase(__pos, _M_limit(__pos, __n));
+16535:  return *this;
+16535:       }
+16535: # 1816 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       iterator
+16535:       erase(__const_iterator __position)
+16535:       {
+16535: 
+16535:                            ;
+16535:  const size_type __pos = __position - begin();
+16535:  this->_M_erase(__pos, size_type(1));
+16535:  return iterator(_M_data() + __pos);
+16535:       }
+16535: # 1835 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       iterator
+16535:       erase(__const_iterator __first, __const_iterator __last)
+16535:       {
+16535: 
+16535:                         ;
+16535:         const size_type __pos = __first - begin();
+16535:  if (__last == end())
+16535:    this->_M_set_length(__pos);
+16535:  else
+16535:    this->_M_erase(__pos, __last - __first);
+16535:  return iterator(this->_M_data() + __pos);
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       pop_back() noexcept
+16535:       {
+16535:  ;
+16535:  _M_erase(size() - 1, 1);
+16535:       }
+16535: # 1879 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       replace(size_type __pos, size_type __n, const basic_string& __str)
+16535:       { return this->replace(__pos, __n, __str._M_data(), __str.size()); }
+16535: # 1901 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       replace(size_type __pos1, size_type __n1, const basic_string& __str,
+16535:        size_type __pos2, size_type __n2 = npos)
+16535:       { return this->replace(__pos1, __n1, __str._M_data()
+16535:         + __str._M_check(__pos2, "basic_string::replace"),
+16535:         __str._M_limit(__pos2, __n2)); }
+16535: # 1926 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       replace(size_type __pos, size_type __n1, const _CharT* __s,
+16535:        size_type __n2)
+16535:       {
+16535:  ;
+16535:  return _M_replace(_M_check(__pos, "basic_string::replace"),
+16535:      _M_limit(__pos, __n1), __s, __n2);
+16535:       }
+16535: # 1951 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       replace(size_type __pos, size_type __n1, const _CharT* __s)
+16535:       {
+16535:  ;
+16535:  return this->replace(__pos, __n1, __s, traits_type::length(__s));
+16535:       }
+16535: # 1975 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c)
+16535:       { return _M_replace_aux(_M_check(__pos, "basic_string::replace"),
+16535:          _M_limit(__pos, __n1), __n2, __c); }
+16535: # 1993 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       replace(__const_iterator __i1, __const_iterator __i2,
+16535:        const basic_string& __str)
+16535:       { return this->replace(__i1, __i2, __str._M_data(), __str.size()); }
+16535: # 2013 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       replace(__const_iterator __i1, __const_iterator __i2,
+16535:        const _CharT* __s, size_type __n)
+16535:       {
+16535: 
+16535:                       ;
+16535:  return this->replace(__i1 - begin(), __i2 - __i1, __s, __n);
+16535:       }
+16535: # 2035 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       replace(__const_iterator __i1, __const_iterator __i2, const _CharT* __s)
+16535:       {
+16535:  ;
+16535:  return this->replace(__i1, __i2, __s, traits_type::length(__s));
+16535:       }
+16535: # 2056 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       replace(__const_iterator __i1, __const_iterator __i2, size_type __n,
+16535:        _CharT __c)
+16535:       {
+16535: 
+16535:                       ;
+16535:  return _M_replace_aux(__i1 - begin(), __i2 - __i1, __n, __c);
+16535:       }
+16535: # 2081 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       template<class _InputIterator,
+16535:         typename = std::_RequireInputIter<_InputIterator>>
+16535:         basic_string&
+16535:         replace(const_iterator __i1, const_iterator __i2,
+16535:   _InputIterator __k1, _InputIterator __k2)
+16535:         {
+16535:   
+16535:                         ;
+16535:    ;
+16535:    return this->_M_replace_dispatch(__i1, __i2, __k1, __k2,
+16535:         std::__false_type());
+16535:  }
+16535: # 2113 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string&
+16535:       replace(__const_iterator __i1, __const_iterator __i2,
+16535:        _CharT* __k1, _CharT* __k2)
+16535:       {
+16535: 
+16535:                       ;
+16535:  ;
+16535:  return this->replace(__i1 - begin(), __i2 - __i1,
+16535:         __k1, __k2 - __k1);
+16535:       }
+16535: 
+16535:       basic_string&
+16535:       replace(__const_iterator __i1, __const_iterator __i2,
+16535:        const _CharT* __k1, const _CharT* __k2)
+16535:       {
+16535: 
+16535:                       ;
+16535:  ;
+16535:  return this->replace(__i1 - begin(), __i2 - __i1,
+16535:         __k1, __k2 - __k1);
+16535:       }
+16535: 
+16535:       basic_string&
+16535:       replace(__const_iterator __i1, __const_iterator __i2,
+16535:        iterator __k1, iterator __k2)
+16535:       {
+16535: 
+16535:                       ;
+16535:  ;
+16535:  return this->replace(__i1 - begin(), __i2 - __i1,
+16535:         __k1.base(), __k2 - __k1);
+16535:       }
+16535: 
+16535:       basic_string&
+16535:       replace(__const_iterator __i1, __const_iterator __i2,
+16535:        const_iterator __k1, const_iterator __k2)
+16535:       {
+16535: 
+16535:                       ;
+16535:  ;
+16535:  return this->replace(__i1 - begin(), __i2 - __i1,
+16535:         __k1.base(), __k2 - __k1);
+16535:       }
+16535: # 2172 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string& replace(const_iterator __i1, const_iterator __i2,
+16535:        initializer_list<_CharT> __l)
+16535:       { return this->replace(__i1, __i2, __l.begin(), __l.size()); }
+16535: # 2231 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:     private:
+16535:       template<class _Integer>
+16535:  basic_string&
+16535:  _M_replace_dispatch(const_iterator __i1, const_iterator __i2,
+16535:        _Integer __n, _Integer __val, __true_type)
+16535:         { return _M_replace_aux(__i1 - begin(), __i2 - __i1, __n, __val); }
+16535: 
+16535:       template<class _InputIterator>
+16535:  basic_string&
+16535:  _M_replace_dispatch(const_iterator __i1, const_iterator __i2,
+16535:        _InputIterator __k1, _InputIterator __k2,
+16535:        __false_type);
+16535: 
+16535:       basic_string&
+16535:       _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2,
+16535:        _CharT __c);
+16535: 
+16535:       basic_string&
+16535:       _M_replace(size_type __pos, size_type __len1, const _CharT* __s,
+16535:    const size_type __len2);
+16535: 
+16535:       basic_string&
+16535:       _M_append(const _CharT* __s, size_type __n);
+16535: 
+16535:     public:
+16535: # 2269 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       copy(_CharT* __s, size_type __n, size_type __pos = 0) const;
+16535: # 2279 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       void
+16535:       swap(basic_string& __s) noexcept;
+16535: # 2289 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       const _CharT*
+16535:       c_str() const noexcept
+16535:       { return _M_data(); }
+16535: # 2301 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       const _CharT*
+16535:       data() const noexcept
+16535:       { return _M_data(); }
+16535: # 2320 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       allocator_type
+16535:       get_allocator() const noexcept
+16535:       { return _M_get_allocator(); }
+16535: # 2336 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       find(const _CharT* __s, size_type __pos, size_type __n) const
+16535:       noexcept;
+16535: # 2350 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       find(const basic_string& __str, size_type __pos = 0) const
+16535:       noexcept
+16535:       { return this->find(__str.data(), __pos, __str.size()); }
+16535: # 2382 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       find(const _CharT* __s, size_type __pos = 0) const noexcept
+16535:       {
+16535:  ;
+16535:  return this->find(__s, __pos, traits_type::length(__s));
+16535:       }
+16535: # 2399 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       find(_CharT __c, size_type __pos = 0) const noexcept;
+16535: # 2412 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       rfind(const basic_string& __str, size_type __pos = npos) const
+16535:       noexcept
+16535:       { return this->rfind(__str.data(), __pos, __str.size()); }
+16535: # 2446 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       rfind(const _CharT* __s, size_type __pos, size_type __n) const
+16535:       noexcept;
+16535: # 2460 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       rfind(const _CharT* __s, size_type __pos = npos) const
+16535:       {
+16535:  ;
+16535:  return this->rfind(__s, __pos, traits_type::length(__s));
+16535:       }
+16535: # 2477 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       rfind(_CharT __c, size_type __pos = npos) const noexcept;
+16535: # 2491 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       find_first_of(const basic_string& __str, size_type __pos = 0) const
+16535:       noexcept
+16535:       { return this->find_first_of(__str.data(), __pos, __str.size()); }
+16535: # 2526 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       find_first_of(const _CharT* __s, size_type __pos, size_type __n) const
+16535:       noexcept;
+16535: # 2540 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       find_first_of(const _CharT* __s, size_type __pos = 0) const
+16535:       noexcept
+16535:       {
+16535:  ;
+16535:  return this->find_first_of(__s, __pos, traits_type::length(__s));
+16535:       }
+16535: # 2560 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       find_first_of(_CharT __c, size_type __pos = 0) const noexcept
+16535:       { return this->find(__c, __pos); }
+16535: # 2575 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       find_last_of(const basic_string& __str, size_type __pos = npos) const
+16535:       noexcept
+16535:       { return this->find_last_of(__str.data(), __pos, __str.size()); }
+16535: # 2610 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       find_last_of(const _CharT* __s, size_type __pos, size_type __n) const
+16535:       noexcept;
+16535: # 2624 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       find_last_of(const _CharT* __s, size_type __pos = npos) const
+16535:       noexcept
+16535:       {
+16535:  ;
+16535:  return this->find_last_of(__s, __pos, traits_type::length(__s));
+16535:       }
+16535: # 2644 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       find_last_of(_CharT __c, size_type __pos = npos) const noexcept
+16535:       { return this->rfind(__c, __pos); }
+16535: # 2658 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       find_first_not_of(const basic_string& __str, size_type __pos = 0) const
+16535:       noexcept
+16535:       { return this->find_first_not_of(__str.data(), __pos, __str.size()); }
+16535: # 2693 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       find_first_not_of(const _CharT* __s, size_type __pos,
+16535:    size_type __n) const noexcept;
+16535: # 2707 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       find_first_not_of(const _CharT* __s, size_type __pos = 0) const
+16535:       noexcept
+16535:       {
+16535:  ;
+16535:  return this->find_first_not_of(__s, __pos, traits_type::length(__s));
+16535:       }
+16535: # 2725 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       find_first_not_of(_CharT __c, size_type __pos = 0) const
+16535:       noexcept;
+16535: # 2740 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       find_last_not_of(const basic_string& __str, size_type __pos = npos) const
+16535:       noexcept
+16535:       { return this->find_last_not_of(__str.data(), __pos, __str.size()); }
+16535: # 2775 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       find_last_not_of(const _CharT* __s, size_type __pos,
+16535:          size_type __n) const noexcept;
+16535: # 2789 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       find_last_not_of(const _CharT* __s, size_type __pos = npos) const
+16535:       noexcept
+16535:       {
+16535:  ;
+16535:  return this->find_last_not_of(__s, __pos, traits_type::length(__s));
+16535:       }
+16535: # 2807 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       size_type
+16535:       find_last_not_of(_CharT __c, size_type __pos = npos) const
+16535:       noexcept;
+16535: # 2823 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       basic_string
+16535:       substr(size_type __pos = 0, size_type __n = npos) const
+16535:       { return basic_string(*this,
+16535:        _M_check(__pos, "basic_string::substr"), __n); }
+16535: # 2842 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       int
+16535:       compare(const basic_string& __str) const
+16535:       {
+16535:  const size_type __size = this->size();
+16535:  const size_type __osize = __str.size();
+16535:  const size_type __len = std::min(__size, __osize);
+16535: 
+16535:  int __r = traits_type::compare(_M_data(), __str.data(), __len);
+16535:  if (!__r)
+16535:    __r = _S_compare(__size, __osize);
+16535:  return __r;
+16535:       }
+16535: # 2935 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       int
+16535:       compare(size_type __pos, size_type __n, const basic_string& __str) const;
+16535: # 2961 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       int
+16535:       compare(size_type __pos1, size_type __n1, const basic_string& __str,
+16535:        size_type __pos2, size_type __n2 = npos) const;
+16535: # 2979 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       int
+16535:       compare(const _CharT* __s) const noexcept;
+16535: # 3003 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       int
+16535:       compare(size_type __pos, size_type __n1, const _CharT* __s) const;
+16535: # 3030 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:       int
+16535:       compare(size_type __pos, size_type __n1, const _CharT* __s,
+16535:        size_type __n2) const;
+16535: 
+16535: 
+16535:       template<typename, typename, typename> friend class basic_stringbuf;
+16535:     };
+16535: }
+16535: # 5925 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     basic_string<_CharT, _Traits, _Alloc>
+16535:     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+16535:        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+16535:     {
+16535:       basic_string<_CharT, _Traits, _Alloc> __str(__lhs);
+16535:       __str.append(__rhs);
+16535:       return __str;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     basic_string<_CharT,_Traits,_Alloc>
+16535:     operator+(const _CharT* __lhs,
+16535:        const basic_string<_CharT,_Traits,_Alloc>& __rhs);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     basic_string<_CharT,_Traits,_Alloc>
+16535:     operator+(_CharT __lhs, const basic_string<_CharT,_Traits,_Alloc>& __rhs);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline basic_string<_CharT, _Traits, _Alloc>
+16535:     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+16535:        const _CharT* __rhs)
+16535:     {
+16535:       basic_string<_CharT, _Traits, _Alloc> __str(__lhs);
+16535:       __str.append(__rhs);
+16535:       return __str;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline basic_string<_CharT, _Traits, _Alloc>
+16535:     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, _CharT __rhs)
+16535:     {
+16535:       typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
+16535:       typedef typename __string_type::size_type __size_type;
+16535:       __string_type __str(__lhs);
+16535:       __str.append(__size_type(1), __rhs);
+16535:       return __str;
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline basic_string<_CharT, _Traits, _Alloc>
+16535:     operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
+16535:        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+16535:     { return std::move(__lhs.append(__rhs)); }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline basic_string<_CharT, _Traits, _Alloc>
+16535:     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+16535:        basic_string<_CharT, _Traits, _Alloc>&& __rhs)
+16535:     { return std::move(__rhs.insert(0, __lhs)); }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline basic_string<_CharT, _Traits, _Alloc>
+16535:     operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
+16535:        basic_string<_CharT, _Traits, _Alloc>&& __rhs)
+16535:     {
+16535:       const auto __size = __lhs.size() + __rhs.size();
+16535:       const bool __cond = (__size > __lhs.capacity()
+16535:       && __size <= __rhs.capacity());
+16535:       return __cond ? std::move(__rhs.insert(0, __lhs))
+16535:              : std::move(__lhs.append(__rhs));
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline basic_string<_CharT, _Traits, _Alloc>
+16535:     operator+(const _CharT* __lhs,
+16535:        basic_string<_CharT, _Traits, _Alloc>&& __rhs)
+16535:     { return std::move(__rhs.insert(0, __lhs)); }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline basic_string<_CharT, _Traits, _Alloc>
+16535:     operator+(_CharT __lhs,
+16535:        basic_string<_CharT, _Traits, _Alloc>&& __rhs)
+16535:     { return std::move(__rhs.insert(0, 1, __lhs)); }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline basic_string<_CharT, _Traits, _Alloc>
+16535:     operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
+16535:        const _CharT* __rhs)
+16535:     { return std::move(__lhs.append(__rhs)); }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline basic_string<_CharT, _Traits, _Alloc>
+16535:     operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs,
+16535:        _CharT __rhs)
+16535:     { return std::move(__lhs.append(1, __rhs)); }
+16535: # 6046 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline bool
+16535:     operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+16535:         const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+16535:     noexcept
+16535:     { return __lhs.compare(__rhs) == 0; }
+16535: 
+16535:   template<typename _CharT>
+16535:     inline
+16535:     typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, bool>::__type
+16535:     operator==(const basic_string<_CharT>& __lhs,
+16535:         const basic_string<_CharT>& __rhs) noexcept
+16535:     { return (__lhs.size() == __rhs.size()
+16535:        && !std::char_traits<_CharT>::compare(__lhs.data(), __rhs.data(),
+16535:           __lhs.size())); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline bool
+16535:     operator==(const _CharT* __lhs,
+16535:         const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+16535:     { return __rhs.compare(__lhs) == 0; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline bool
+16535:     operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+16535:         const _CharT* __rhs)
+16535:     { return __lhs.compare(__rhs) == 0; }
+16535: # 6093 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline bool
+16535:     operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+16535:         const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+16535:     noexcept
+16535:     { return !(__lhs == __rhs); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline bool
+16535:     operator!=(const _CharT* __lhs,
+16535:         const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+16535:     { return !(__lhs == __rhs); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline bool
+16535:     operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+16535:         const _CharT* __rhs)
+16535:     { return !(__lhs == __rhs); }
+16535: # 6131 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline bool
+16535:     operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+16535:        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+16535:     noexcept
+16535:     { return __lhs.compare(__rhs) < 0; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline bool
+16535:     operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+16535:        const _CharT* __rhs)
+16535:     { return __lhs.compare(__rhs) < 0; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline bool
+16535:     operator<(const _CharT* __lhs,
+16535:        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+16535:     { return __rhs.compare(__lhs) > 0; }
+16535: # 6169 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline bool
+16535:     operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+16535:        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+16535:     noexcept
+16535:     { return __lhs.compare(__rhs) > 0; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline bool
+16535:     operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+16535:        const _CharT* __rhs)
+16535:     { return __lhs.compare(__rhs) > 0; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline bool
+16535:     operator>(const _CharT* __lhs,
+16535:        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+16535:     { return __rhs.compare(__lhs) < 0; }
+16535: # 6207 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline bool
+16535:     operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+16535:         const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+16535:     noexcept
+16535:     { return __lhs.compare(__rhs) <= 0; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline bool
+16535:     operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+16535:         const _CharT* __rhs)
+16535:     { return __lhs.compare(__rhs) <= 0; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline bool
+16535:     operator<=(const _CharT* __lhs,
+16535:         const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+16535:     { return __rhs.compare(__lhs) >= 0; }
+16535: # 6245 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline bool
+16535:     operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+16535:         const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+16535:     noexcept
+16535:     { return __lhs.compare(__rhs) >= 0; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline bool
+16535:     operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
+16535:         const _CharT* __rhs)
+16535:     { return __lhs.compare(__rhs) >= 0; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline bool
+16535:     operator>=(const _CharT* __lhs,
+16535:       const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+16535:     { return __rhs.compare(__lhs) <= 0; }
+16535: # 6283 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline void
+16535:     swap(basic_string<_CharT, _Traits, _Alloc>& __lhs,
+16535:   basic_string<_CharT, _Traits, _Alloc>& __rhs)
+16535:     noexcept(noexcept(__lhs.swap(__rhs)))
+16535:     { __lhs.swap(__rhs); }
+16535: # 6303 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     operator>>(basic_istream<_CharT, _Traits>& __is,
+16535:         basic_string<_CharT, _Traits, _Alloc>& __str);
+16535: 
+16535:   template<>
+16535:     basic_istream<char>&
+16535:     operator>>(basic_istream<char>& __is, basic_string<char>& __str);
+16535: # 6321 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline basic_ostream<_CharT, _Traits>&
+16535:     operator<<(basic_ostream<_CharT, _Traits>& __os,
+16535:         const basic_string<_CharT, _Traits, _Alloc>& __str)
+16535:     {
+16535: 
+16535: 
+16535:       return __ostream_insert(__os, __str.data(), __str.size());
+16535:     }
+16535: # 6344 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     getline(basic_istream<_CharT, _Traits>& __is,
+16535:      basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim);
+16535: # 6361 "/usr/include/c++/8/bits/basic_string.h" 3
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline basic_istream<_CharT, _Traits>&
+16535:     getline(basic_istream<_CharT, _Traits>& __is,
+16535:      basic_string<_CharT, _Traits, _Alloc>& __str)
+16535:     { return std::getline(__is, __str, __is.widen('\n')); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline basic_istream<_CharT, _Traits>&
+16535:     getline(basic_istream<_CharT, _Traits>&& __is,
+16535:      basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim)
+16535:     { return std::getline(__is, __str, __delim); }
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline basic_istream<_CharT, _Traits>&
+16535:     getline(basic_istream<_CharT, _Traits>&& __is,
+16535:      basic_string<_CharT, _Traits, _Alloc>& __str)
+16535:     { return std::getline(__is, __str); }
+16535: 
+16535: 
+16535:   template<>
+16535:     basic_istream<char>&
+16535:     getline(basic_istream<char>& __in, basic_string<char>& __str,
+16535:      char __delim);
+16535: 
+16535: 
+16535:   template<>
+16535:     basic_istream<wchar_t>&
+16535:     getline(basic_istream<wchar_t>& __in, basic_string<wchar_t>& __str,
+16535:      wchar_t __delim);
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/ext/string_conversions.h" 1 3
+16535: # 32 "/usr/include/c++/8/ext/string_conversions.h" 3
+16535:        
+16535: # 33 "/usr/include/c++/8/ext/string_conversions.h" 3
+16535: # 41 "/usr/include/c++/8/ext/string_conversions.h" 3
+16535: # 1 "/usr/include/c++/8/cstdlib" 1 3
+16535: # 39 "/usr/include/c++/8/cstdlib" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/cstdlib" 3
+16535: # 42 "/usr/include/c++/8/ext/string_conversions.h" 2 3
+16535: # 1 "/usr/include/c++/8/cwchar" 1 3
+16535: # 39 "/usr/include/c++/8/cwchar" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/cwchar" 3
+16535: # 43 "/usr/include/c++/8/ext/string_conversions.h" 2 3
+16535: # 1 "/usr/include/c++/8/cstdio" 1 3
+16535: # 39 "/usr/include/c++/8/cstdio" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/cstdio" 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/stdio.h" 1 3 4
+16535: # 27 "/usr/include/stdio.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 1 3 4
+16535: # 28 "/usr/include/stdio.h" 2 3 4
+16535: 
+16535: extern "C" {
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
+16535: # 34 "/usr/include/stdio.h" 2 3 4
+16535: 
+16535: 
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stdarg.h" 1 3 4
+16535: # 37 "/usr/include/stdio.h" 2 3 4
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h" 1 3 4
+16535: # 10 "/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h" 3 4
+16535: typedef struct _G_fpos_t
+16535: {
+16535:   __off_t __pos;
+16535:   __mbstate_t __state;
+16535: } __fpos_t;
+16535: # 40 "/usr/include/stdio.h" 2 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h" 1 3 4
+16535: # 10 "/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h" 3 4
+16535: typedef struct _G_fpos64_t
+16535: {
+16535:   __off64_t __pos;
+16535:   __mbstate_t __state;
+16535: } __fpos64_t;
+16535: # 41 "/usr/include/stdio.h" 2 3 4
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h" 1 3 4
+16535: # 35 "/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h" 3 4
+16535: struct _IO_FILE;
+16535: struct _IO_marker;
+16535: struct _IO_codecvt;
+16535: struct _IO_wide_data;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef void _IO_lock_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: struct _IO_FILE
+16535: {
+16535:   int _flags;
+16535: 
+16535: 
+16535:   char *_IO_read_ptr;
+16535:   char *_IO_read_end;
+16535:   char *_IO_read_base;
+16535:   char *_IO_write_base;
+16535:   char *_IO_write_ptr;
+16535:   char *_IO_write_end;
+16535:   char *_IO_buf_base;
+16535:   char *_IO_buf_end;
+16535: 
+16535: 
+16535:   char *_IO_save_base;
+16535:   char *_IO_backup_base;
+16535:   char *_IO_save_end;
+16535: 
+16535:   struct _IO_marker *_markers;
+16535: 
+16535:   struct _IO_FILE *_chain;
+16535: 
+16535:   int _fileno;
+16535:   int _flags2;
+16535:   __off_t _old_offset;
+16535: 
+16535: 
+16535:   unsigned short _cur_column;
+16535:   signed char _vtable_offset;
+16535:   char _shortbuf[1];
+16535: 
+16535:   _IO_lock_t *_lock;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   __off64_t _offset;
+16535: 
+16535:   struct _IO_codecvt *_codecvt;
+16535:   struct _IO_wide_data *_wide_data;
+16535:   struct _IO_FILE *_freeres_list;
+16535:   void *_freeres_buf;
+16535:   size_t __pad5;
+16535:   int _mode;
+16535: 
+16535:   char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
+16535: };
+16535: # 44 "/usr/include/stdio.h" 2 3 4
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h" 1 3 4
+16535: # 27 "/usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h" 3 4
+16535: typedef __ssize_t cookie_read_function_t (void *__cookie, char *__buf,
+16535:                                           size_t __nbytes);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __ssize_t cookie_write_function_t (void *__cookie, const char *__buf,
+16535:                                            size_t __nbytes);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef int cookie_seek_function_t (void *__cookie, __off64_t *__pos, int __w);
+16535: 
+16535: 
+16535: typedef int cookie_close_function_t (void *__cookie);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef struct _IO_cookie_io_functions_t
+16535: {
+16535:   cookie_read_function_t *read;
+16535:   cookie_write_function_t *write;
+16535:   cookie_seek_function_t *seek;
+16535:   cookie_close_function_t *close;
+16535: } cookie_io_functions_t;
+16535: # 47 "/usr/include/stdio.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __gnuc_va_list va_list;
+16535: # 84 "/usr/include/stdio.h" 3 4
+16535: typedef __fpos_t fpos_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __fpos64_t fpos64_t;
+16535: # 133 "/usr/include/stdio.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/stdio_lim.h" 1 3 4
+16535: # 134 "/usr/include/stdio.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: extern FILE *stdin;
+16535: extern FILE *stdout;
+16535: extern FILE *stderr;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int remove (const char *__filename) throw ();
+16535: 
+16535: extern int rename (const char *__old, const char *__new) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int renameat (int __oldfd, const char *__old, int __newfd,
+16535:        const char *__new) throw ();
+16535: # 164 "/usr/include/stdio.h" 3 4
+16535: extern int renameat2 (int __oldfd, const char *__old, int __newfd,
+16535:         const char *__new, unsigned int __flags) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern FILE *tmpfile (void) __attribute__ ((__warn_unused_result__));
+16535: # 183 "/usr/include/stdio.h" 3 4
+16535: extern FILE *tmpfile64 (void) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: extern char *tmpnam (char *__s) throw () __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *tmpnam_r (char *__s) throw () __attribute__ ((__warn_unused_result__));
+16535: # 204 "/usr/include/stdio.h" 3 4
+16535: extern char *tempnam (const char *__dir, const char *__pfx)
+16535:      throw () __attribute__ ((__malloc__)) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int fclose (FILE *__stream);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int fflush (FILE *__stream);
+16535: # 227 "/usr/include/stdio.h" 3 4
+16535: extern int fflush_unlocked (FILE *__stream);
+16535: # 237 "/usr/include/stdio.h" 3 4
+16535: extern int fcloseall (void);
+16535: # 246 "/usr/include/stdio.h" 3 4
+16535: extern FILE *fopen (const char *__restrict __filename,
+16535:       const char *__restrict __modes) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern FILE *freopen (const char *__restrict __filename,
+16535:         const char *__restrict __modes,
+16535:         FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+16535: # 270 "/usr/include/stdio.h" 3 4
+16535: extern FILE *fopen64 (const char *__restrict __filename,
+16535:         const char *__restrict __modes) __attribute__ ((__warn_unused_result__));
+16535: extern FILE *freopen64 (const char *__restrict __filename,
+16535:    const char *__restrict __modes,
+16535:    FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern FILE *fdopen (int __fd, const char *__modes) throw () __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern FILE *fopencookie (void *__restrict __magic_cookie,
+16535:      const char *__restrict __modes,
+16535:      cookie_io_functions_t __io_funcs) throw () __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern FILE *fmemopen (void *__s, size_t __len, const char *__modes)
+16535:   throw () __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) throw () __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
+16535:       int __modes, size_t __n) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
+16535:          size_t __size) throw ();
+16535: 
+16535: 
+16535: extern void setlinebuf (FILE *__stream) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int fprintf (FILE *__restrict __stream,
+16535:       const char *__restrict __format, ...);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int printf (const char *__restrict __format, ...);
+16535: 
+16535: extern int sprintf (char *__restrict __s,
+16535:       const char *__restrict __format, ...) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int vfprintf (FILE *__restrict __s, const char *__restrict __format,
+16535:        __gnuc_va_list __arg);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg);
+16535: 
+16535: extern int vsprintf (char *__restrict __s, const char *__restrict __format,
+16535:        __gnuc_va_list __arg) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int snprintf (char *__restrict __s, size_t __maxlen,
+16535:        const char *__restrict __format, ...)
+16535:      throw () __attribute__ ((__format__ (__printf__, 3, 4)));
+16535: 
+16535: extern int vsnprintf (char *__restrict __s, size_t __maxlen,
+16535:         const char *__restrict __format, __gnuc_va_list __arg)
+16535:      throw () __attribute__ ((__format__ (__printf__, 3, 0)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int vasprintf (char **__restrict __ptr, const char *__restrict __f,
+16535:         __gnuc_va_list __arg)
+16535:      throw () __attribute__ ((__format__ (__printf__, 2, 0))) __attribute__ ((__warn_unused_result__));
+16535: extern int __asprintf (char **__restrict __ptr,
+16535:          const char *__restrict __fmt, ...)
+16535:      throw () __attribute__ ((__format__ (__printf__, 2, 3))) __attribute__ ((__warn_unused_result__));
+16535: extern int asprintf (char **__restrict __ptr,
+16535:        const char *__restrict __fmt, ...)
+16535:      throw () __attribute__ ((__format__ (__printf__, 2, 3))) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int vdprintf (int __fd, const char *__restrict __fmt,
+16535:        __gnuc_va_list __arg)
+16535:      __attribute__ ((__format__ (__printf__, 2, 0)));
+16535: extern int dprintf (int __fd, const char *__restrict __fmt, ...)
+16535:      __attribute__ ((__format__ (__printf__, 2, 3)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int fscanf (FILE *__restrict __stream,
+16535:      const char *__restrict __format, ...) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int scanf (const char *__restrict __format, ...) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: extern int sscanf (const char *__restrict __s,
+16535:      const char *__restrict __format, ...) throw ();
+16535: # 434 "/usr/include/stdio.h" 3 4
+16535: extern int vfscanf (FILE *__restrict __s, const char *__restrict __format,
+16535:       __gnuc_va_list __arg)
+16535:      __attribute__ ((__format__ (__scanf__, 2, 0))) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg)
+16535:      __attribute__ ((__format__ (__scanf__, 1, 0))) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: extern int vsscanf (const char *__restrict __s,
+16535:       const char *__restrict __format, __gnuc_va_list __arg)
+16535:      throw () __attribute__ ((__format__ (__scanf__, 2, 0)));
+16535: # 491 "/usr/include/stdio.h" 3 4
+16535: extern int fgetc (FILE *__stream);
+16535: extern int getc (FILE *__stream);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int getchar (void);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int getc_unlocked (FILE *__stream);
+16535: extern int getchar_unlocked (void);
+16535: # 516 "/usr/include/stdio.h" 3 4
+16535: extern int fgetc_unlocked (FILE *__stream);
+16535: # 527 "/usr/include/stdio.h" 3 4
+16535: extern int fputc (int __c, FILE *__stream);
+16535: extern int putc (int __c, FILE *__stream);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int putchar (int __c);
+16535: # 543 "/usr/include/stdio.h" 3 4
+16535: extern int fputc_unlocked (int __c, FILE *__stream);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int putc_unlocked (int __c, FILE *__stream);
+16535: extern int putchar_unlocked (int __c);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int getw (FILE *__stream);
+16535: 
+16535: 
+16535: extern int putw (int __w, FILE *__stream);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
+16535:      __attribute__ ((__warn_unused_result__));
+16535: # 593 "/usr/include/stdio.h" 3 4
+16535: extern char *fgets_unlocked (char *__restrict __s, int __n,
+16535:         FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+16535: # 609 "/usr/include/stdio.h" 3 4
+16535: extern __ssize_t __getdelim (char **__restrict __lineptr,
+16535:                              size_t *__restrict __n, int __delimiter,
+16535:                              FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+16535: extern __ssize_t getdelim (char **__restrict __lineptr,
+16535:                            size_t *__restrict __n, int __delimiter,
+16535:                            FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __ssize_t getline (char **__restrict __lineptr,
+16535:                           size_t *__restrict __n,
+16535:                           FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int fputs (const char *__restrict __s, FILE *__restrict __stream);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int puts (const char *__s);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int ungetc (int __c, FILE *__stream);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern size_t fread (void *__restrict __ptr, size_t __size,
+16535:        size_t __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern size_t fwrite (const void *__restrict __ptr, size_t __size,
+16535:         size_t __n, FILE *__restrict __s);
+16535: # 668 "/usr/include/stdio.h" 3 4
+16535: extern int fputs_unlocked (const char *__restrict __s,
+16535:       FILE *__restrict __stream);
+16535: # 679 "/usr/include/stdio.h" 3 4
+16535: extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
+16535:          size_t __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+16535: extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size,
+16535:           size_t __n, FILE *__restrict __stream);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int fseek (FILE *__stream, long int __off, int __whence);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long int ftell (FILE *__stream) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern void rewind (FILE *__stream);
+16535: # 713 "/usr/include/stdio.h" 3 4
+16535: extern int fseeko (FILE *__stream, __off_t __off, int __whence);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __off_t ftello (FILE *__stream) __attribute__ ((__warn_unused_result__));
+16535: # 737 "/usr/include/stdio.h" 3 4
+16535: extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int fsetpos (FILE *__stream, const fpos_t *__pos);
+16535: # 756 "/usr/include/stdio.h" 3 4
+16535: extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);
+16535: extern __off64_t ftello64 (FILE *__stream) __attribute__ ((__warn_unused_result__));
+16535: extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);
+16535: extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos);
+16535: 
+16535: 
+16535: 
+16535: extern void clearerr (FILE *__stream) throw ();
+16535: 
+16535: extern int feof (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
+16535: 
+16535: extern int ferror (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: extern void clearerr_unlocked (FILE *__stream) throw ();
+16535: extern int feof_unlocked (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
+16535: extern int ferror_unlocked (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern void perror (const char *__s);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/sys_errlist.h" 1 3 4
+16535: # 26 "/usr/include/x86_64-linux-gnu/bits/sys_errlist.h" 3 4
+16535: extern int sys_nerr;
+16535: extern const char *const sys_errlist[];
+16535: 
+16535: 
+16535: extern int _sys_nerr;
+16535: extern const char *const _sys_errlist[];
+16535: # 788 "/usr/include/stdio.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int fileno (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int fileno_unlocked (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
+16535: # 806 "/usr/include/stdio.h" 3 4
+16535: extern FILE *popen (const char *__command, const char *__modes) __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int pclose (FILE *__stream);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *ctermid (char *__s) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *cuserid (char *__s);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: struct obstack;
+16535: 
+16535: 
+16535: extern int obstack_printf (struct obstack *__restrict __obstack,
+16535:       const char *__restrict __format, ...)
+16535:      throw () __attribute__ ((__format__ (__printf__, 2, 3)));
+16535: extern int obstack_vprintf (struct obstack *__restrict __obstack,
+16535:        const char *__restrict __format,
+16535:        __gnuc_va_list __args)
+16535:      throw () __attribute__ ((__format__ (__printf__, 2, 0)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern void flockfile (FILE *__stream) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int ftrylockfile (FILE *__stream) throw () __attribute__ ((__warn_unused_result__));
+16535: 
+16535: 
+16535: extern void funlockfile (FILE *__stream) throw ();
+16535: # 864 "/usr/include/stdio.h" 3 4
+16535: extern int __uflow (FILE *);
+16535: extern int __overflow (FILE *, int);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/stdio.h" 1 3 4
+16535: # 46 "/usr/include/x86_64-linux-gnu/bits/stdio.h" 3 4
+16535: extern __inline __attribute__ ((__gnu_inline__)) int
+16535: getchar (void)
+16535: {
+16535:   return getc (stdin);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__gnu_inline__)) int
+16535: fgetc_unlocked (FILE *__fp)
+16535: {
+16535:   return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__gnu_inline__)) int
+16535: getc_unlocked (FILE *__fp)
+16535: {
+16535:   return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
+16535: }
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__gnu_inline__)) int
+16535: getchar_unlocked (void)
+16535: {
+16535:   return (__builtin_expect (((stdin)->_IO_read_ptr >= (stdin)->_IO_read_end), 0) ? __uflow (stdin) : *(unsigned char *) (stdin)->_IO_read_ptr++);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__gnu_inline__)) int
+16535: putchar (int __c)
+16535: {
+16535:   return putc (__c, stdout);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__gnu_inline__)) int
+16535: fputc_unlocked (int __c, FILE *__stream)
+16535: {
+16535:   return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__gnu_inline__)) int
+16535: putc_unlocked (int __c, FILE *__stream)
+16535: {
+16535:   return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
+16535: }
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__gnu_inline__)) int
+16535: putchar_unlocked (int __c)
+16535: {
+16535:   return (__builtin_expect (((stdout)->_IO_write_ptr >= (stdout)->_IO_write_end), 0) ? __overflow (stdout, (unsigned char) (__c)) : (unsigned char) (*(stdout)->_IO_write_ptr++ = (__c)));
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__gnu_inline__)) __ssize_t
+16535: getline (char **__lineptr, size_t *__n, FILE *__stream)
+16535: {
+16535:   return __getdelim (__lineptr, __n, '\n', __stream);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__gnu_inline__)) int
+16535: __attribute__ ((__leaf__)) feof_unlocked (FILE *__stream) throw ()
+16535: {
+16535:   return (((__stream)->_flags & 0x0010) != 0);
+16535: }
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__gnu_inline__)) int
+16535: __attribute__ ((__leaf__)) ferror_unlocked (FILE *__stream) throw ()
+16535: {
+16535:   return (((__stream)->_flags & 0x0020) != 0);
+16535: }
+16535: # 871 "/usr/include/stdio.h" 2 3 4
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/stdio2.h" 1 3 4
+16535: # 26 "/usr/include/x86_64-linux-gnu/bits/stdio2.h" 3 4
+16535: extern int __sprintf_chk (char *__restrict __s, int __flag, size_t __slen,
+16535:      const char *__restrict __format, ...) throw ();
+16535: extern int __vsprintf_chk (char *__restrict __s, int __flag, size_t __slen,
+16535:       const char *__restrict __format,
+16535:       __gnuc_va_list __ap) throw ();
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+16535: __attribute__ ((__leaf__)) sprintf (char *__restrict __s, const char *__restrict __fmt, ...) throw ()
+16535: {
+16535:   return __builtin___sprintf_chk (__s, 2 - 1,
+16535:       __builtin_object_size (__s, 2 > 1), __fmt, __builtin_va_arg_pack ());
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+16535: __attribute__ ((__leaf__)) vsprintf (char *__restrict __s, const char *__restrict __fmt, __gnuc_va_list __ap) throw ()
+16535: 
+16535: {
+16535:   return __builtin___vsprintf_chk (__s, 2 - 1,
+16535:        __builtin_object_size (__s, 2 > 1), __fmt, __ap);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: extern int __snprintf_chk (char *__restrict __s, size_t __n, int __flag,
+16535:       size_t __slen, const char *__restrict __format,
+16535:       ...) throw ();
+16535: extern int __vsnprintf_chk (char *__restrict __s, size_t __n, int __flag,
+16535:        size_t __slen, const char *__restrict __format,
+16535:        __gnuc_va_list __ap) throw ();
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+16535: __attribute__ ((__leaf__)) snprintf (char *__restrict __s, size_t __n, const char *__restrict __fmt, ...) throw ()
+16535: 
+16535: {
+16535:   return __builtin___snprintf_chk (__s, __n, 2 - 1,
+16535:        __builtin_object_size (__s, 2 > 1), __fmt, __builtin_va_arg_pack ());
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+16535: __attribute__ ((__leaf__)) vsnprintf (char *__restrict __s, size_t __n, const char *__restrict __fmt, __gnuc_va_list __ap) throw ()
+16535: 
+16535: {
+16535:   return __builtin___vsnprintf_chk (__s, __n, 2 - 1,
+16535:         __builtin_object_size (__s, 2 > 1), __fmt, __ap);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int __fprintf_chk (FILE *__restrict __stream, int __flag,
+16535:      const char *__restrict __format, ...);
+16535: extern int __printf_chk (int __flag, const char *__restrict __format, ...);
+16535: extern int __vfprintf_chk (FILE *__restrict __stream, int __flag,
+16535:       const char *__restrict __format, __gnuc_va_list __ap);
+16535: extern int __vprintf_chk (int __flag, const char *__restrict __format,
+16535:      __gnuc_va_list __ap);
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+16535: fprintf (FILE *__restrict __stream, const char *__restrict __fmt, ...)
+16535: {
+16535:   return __fprintf_chk (__stream, 2 - 1, __fmt,
+16535:    __builtin_va_arg_pack ());
+16535: }
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+16535: printf (const char *__restrict __fmt, ...)
+16535: {
+16535:   return __printf_chk (2 - 1, __fmt, __builtin_va_arg_pack ());
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+16535: vprintf (const char *__restrict __fmt, __gnuc_va_list __ap)
+16535: {
+16535: 
+16535:   return __vfprintf_chk (stdout, 2 - 1, __fmt, __ap);
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+16535: vfprintf (FILE *__restrict __stream,
+16535:    const char *__restrict __fmt, __gnuc_va_list __ap)
+16535: {
+16535:   return __vfprintf_chk (__stream, 2 - 1, __fmt, __ap);
+16535: }
+16535: 
+16535: 
+16535: extern int __dprintf_chk (int __fd, int __flag, const char *__restrict __fmt,
+16535:      ...) __attribute__ ((__format__ (__printf__, 3, 4)));
+16535: extern int __vdprintf_chk (int __fd, int __flag,
+16535:       const char *__restrict __fmt, __gnuc_va_list __arg)
+16535:      __attribute__ ((__format__ (__printf__, 3, 0)));
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+16535: dprintf (int __fd, const char *__restrict __fmt, ...)
+16535: {
+16535:   return __dprintf_chk (__fd, 2 - 1, __fmt,
+16535:    __builtin_va_arg_pack ());
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+16535: vdprintf (int __fd, const char *__restrict __fmt, __gnuc_va_list __ap)
+16535: {
+16535:   return __vdprintf_chk (__fd, 2 - 1, __fmt, __ap);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int __asprintf_chk (char **__restrict __ptr, int __flag,
+16535:       const char *__restrict __fmt, ...)
+16535:      throw () __attribute__ ((__format__ (__printf__, 3, 4))) __attribute__ ((__warn_unused_result__));
+16535: extern int __vasprintf_chk (char **__restrict __ptr, int __flag,
+16535:        const char *__restrict __fmt, __gnuc_va_list __arg)
+16535:      throw () __attribute__ ((__format__ (__printf__, 3, 0))) __attribute__ ((__warn_unused_result__));
+16535: extern int __obstack_printf_chk (struct obstack *__restrict __obstack,
+16535:      int __flag, const char *__restrict __format,
+16535:      ...)
+16535:      throw () __attribute__ ((__format__ (__printf__, 3, 4)));
+16535: extern int __obstack_vprintf_chk (struct obstack *__restrict __obstack,
+16535:       int __flag,
+16535:       const char *__restrict __format,
+16535:       __gnuc_va_list __args)
+16535:      throw () __attribute__ ((__format__ (__printf__, 3, 0)));
+16535: 
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+16535: __attribute__ ((__leaf__)) asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...) throw ()
+16535: {
+16535:   return __asprintf_chk (__ptr, 2 - 1, __fmt,
+16535:     __builtin_va_arg_pack ());
+16535: }
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+16535: __attribute__ ((__leaf__)) __asprintf (char **__restrict __ptr, const char *__restrict __fmt, ...) throw ()
+16535: 
+16535: {
+16535:   return __asprintf_chk (__ptr, 2 - 1, __fmt,
+16535:     __builtin_va_arg_pack ());
+16535: }
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+16535: __attribute__ ((__leaf__)) obstack_printf (struct obstack *__restrict __obstack, const char *__restrict __fmt, ...) throw ()
+16535: 
+16535: {
+16535:   return __obstack_printf_chk (__obstack, 2 - 1, __fmt,
+16535:           __builtin_va_arg_pack ());
+16535: }
+16535: # 209 "/usr/include/x86_64-linux-gnu/bits/stdio2.h" 3 4
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+16535: __attribute__ ((__leaf__)) vasprintf (char **__restrict __ptr, const char *__restrict __fmt, __gnuc_va_list __ap) throw ()
+16535: 
+16535: {
+16535:   return __vasprintf_chk (__ptr, 2 - 1, __fmt, __ap);
+16535: }
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) int
+16535: __attribute__ ((__leaf__)) obstack_vprintf (struct obstack *__restrict __obstack, const char *__restrict __fmt, __gnuc_va_list __ap) throw ()
+16535: 
+16535: {
+16535:   return __obstack_vprintf_chk (__obstack, 2 - 1, __fmt,
+16535:     __ap);
+16535: }
+16535: # 243 "/usr/include/x86_64-linux-gnu/bits/stdio2.h" 3 4
+16535: extern char *__fgets_chk (char *__restrict __s, size_t __size, int __n,
+16535:      FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+16535: extern char *__fgets_alias (char *__restrict __s, int __n, FILE *__restrict __stream) __asm__ ("" "fgets")
+16535: 
+16535:                                         __attribute__ ((__warn_unused_result__));
+16535: extern char *__fgets_chk_warn (char *__restrict __s, size_t __size, int __n, FILE *__restrict __stream) __asm__ ("" "__fgets_chk")
+16535: 
+16535: 
+16535:      __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgets called with bigger size than length " "of destination buffer")))
+16535:                                  ;
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char *
+16535: fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
+16535: {
+16535:   if (__builtin_object_size (__s, 2 > 1) != (size_t) -1)
+16535:     {
+16535:       if (!__builtin_constant_p (__n) || __n <= 0)
+16535:  return __fgets_chk (__s, __builtin_object_size (__s, 2 > 1), __n, __stream);
+16535: 
+16535:       if ((size_t) __n > __builtin_object_size (__s, 2 > 1))
+16535:  return __fgets_chk_warn (__s, __builtin_object_size (__s, 2 > 1), __n, __stream);
+16535:     }
+16535:   return __fgets_alias (__s, __n, __stream);
+16535: }
+16535: 
+16535: extern size_t __fread_chk (void *__restrict __ptr, size_t __ptrlen,
+16535:       size_t __size, size_t __n,
+16535:       FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+16535: extern size_t __fread_alias (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "fread")
+16535: 
+16535: 
+16535:             __attribute__ ((__warn_unused_result__));
+16535: extern size_t __fread_chk_warn (void *__restrict __ptr, size_t __ptrlen, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "__fread_chk")
+16535: 
+16535: 
+16535: 
+16535: 
+16535:      __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fread called with bigger size * nmemb than length " "of destination buffer")))
+16535:                                  ;
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) size_t
+16535: fread (void *__restrict __ptr, size_t __size, size_t __n,
+16535:        FILE *__restrict __stream)
+16535: {
+16535:   if (__builtin_object_size (__ptr, 0) != (size_t) -1)
+16535:     {
+16535:       if (!__builtin_constant_p (__size)
+16535:    || !__builtin_constant_p (__n)
+16535:    || (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2)))
+16535:  return __fread_chk (__ptr, __builtin_object_size (__ptr, 0), __size, __n, __stream);
+16535: 
+16535:       if (__size * __n > __builtin_object_size (__ptr, 0))
+16535:  return __fread_chk_warn (__ptr, __builtin_object_size (__ptr, 0), __size, __n, __stream);
+16535:     }
+16535:   return __fread_alias (__ptr, __size, __n, __stream);
+16535: }
+16535: 
+16535: 
+16535: extern char *__fgets_unlocked_chk (char *__restrict __s, size_t __size,
+16535:        int __n, FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+16535: extern char *__fgets_unlocked_alias (char *__restrict __s, int __n, FILE *__restrict __stream) __asm__ ("" "fgets_unlocked")
+16535: 
+16535:                                                  __attribute__ ((__warn_unused_result__));
+16535: extern char *__fgets_unlocked_chk_warn (char *__restrict __s, size_t __size, int __n, FILE *__restrict __stream) __asm__ ("" "__fgets_unlocked_chk")
+16535: 
+16535: 
+16535:      __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fgets_unlocked called with bigger size than length " "of destination buffer")))
+16535:                                  ;
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) char *
+16535: fgets_unlocked (char *__restrict __s, int __n, FILE *__restrict __stream)
+16535: {
+16535:   if (__builtin_object_size (__s, 2 > 1) != (size_t) -1)
+16535:     {
+16535:       if (!__builtin_constant_p (__n) || __n <= 0)
+16535:  return __fgets_unlocked_chk (__s, __builtin_object_size (__s, 2 > 1), __n, __stream);
+16535: 
+16535:       if ((size_t) __n > __builtin_object_size (__s, 2 > 1))
+16535:  return __fgets_unlocked_chk_warn (__s, __builtin_object_size (__s, 2 > 1), __n, __stream);
+16535:     }
+16535:   return __fgets_unlocked_alias (__s, __n, __stream);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern size_t __fread_unlocked_chk (void *__restrict __ptr, size_t __ptrlen,
+16535:         size_t __size, size_t __n,
+16535:         FILE *__restrict __stream) __attribute__ ((__warn_unused_result__));
+16535: extern size_t __fread_unlocked_alias (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "fread_unlocked")
+16535: 
+16535: 
+16535:                      __attribute__ ((__warn_unused_result__));
+16535: extern size_t __fread_unlocked_chk_warn (void *__restrict __ptr, size_t __ptrlen, size_t __size, size_t __n, FILE *__restrict __stream) __asm__ ("" "__fread_unlocked_chk")
+16535: 
+16535: 
+16535: 
+16535: 
+16535:      __attribute__ ((__warn_unused_result__)) __attribute__((__warning__ ("fread_unlocked called with bigger size * nmemb than " "length of destination buffer")))
+16535:                                         ;
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) __attribute__ ((__warn_unused_result__)) size_t
+16535: fread_unlocked (void *__restrict __ptr, size_t __size, size_t __n,
+16535:   FILE *__restrict __stream)
+16535: {
+16535:   if (__builtin_object_size (__ptr, 0) != (size_t) -1)
+16535:     {
+16535:       if (!__builtin_constant_p (__size)
+16535:    || !__builtin_constant_p (__n)
+16535:    || (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2)))
+16535:  return __fread_unlocked_chk (__ptr, __builtin_object_size (__ptr, 0), __size, __n,
+16535:          __stream);
+16535: 
+16535:       if (__size * __n > __builtin_object_size (__ptr, 0))
+16535:  return __fread_unlocked_chk_warn (__ptr, __builtin_object_size (__ptr, 0), __size, __n,
+16535:        __stream);
+16535:     }
+16535: 
+16535: 
+16535:   if (__builtin_constant_p (__size)
+16535:       && __builtin_constant_p (__n)
+16535:       && (__size | __n) < (((size_t) 1) << (8 * sizeof (size_t) / 2))
+16535:       && __size * __n <= 8)
+16535:     {
+16535:       size_t __cnt = __size * __n;
+16535:       char *__cptr = (char *) __ptr;
+16535:       if (__cnt == 0)
+16535:  return 0;
+16535: 
+16535:       for (; __cnt > 0; --__cnt)
+16535:  {
+16535:    int __c = getc_unlocked (__stream);
+16535:    if (__c == (-1))
+16535:      break;
+16535:    *__cptr++ = __c;
+16535:  }
+16535:       return (__cptr - (char *) __ptr) / __size;
+16535:     }
+16535: 
+16535:   return __fread_unlocked_alias (__ptr, __size, __n, __stream);
+16535: }
+16535: # 874 "/usr/include/stdio.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 43 "/usr/include/c++/8/cstdio" 2 3
+16535: # 96 "/usr/include/c++/8/cstdio" 3
+16535: namespace std
+16535: {
+16535:   using ::FILE;
+16535:   using ::fpos_t;
+16535: 
+16535:   using ::clearerr;
+16535:   using ::fclose;
+16535:   using ::feof;
+16535:   using ::ferror;
+16535:   using ::fflush;
+16535:   using ::fgetc;
+16535:   using ::fgetpos;
+16535:   using ::fgets;
+16535:   using ::fopen;
+16535:   using ::fprintf;
+16535:   using ::fputc;
+16535:   using ::fputs;
+16535:   using ::fread;
+16535:   using ::freopen;
+16535:   using ::fscanf;
+16535:   using ::fseek;
+16535:   using ::fsetpos;
+16535:   using ::ftell;
+16535:   using ::fwrite;
+16535:   using ::getc;
+16535:   using ::getchar;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   using ::perror;
+16535:   using ::printf;
+16535:   using ::putc;
+16535:   using ::putchar;
+16535:   using ::puts;
+16535:   using ::remove;
+16535:   using ::rename;
+16535:   using ::rewind;
+16535:   using ::scanf;
+16535:   using ::setbuf;
+16535:   using ::setvbuf;
+16535:   using ::sprintf;
+16535:   using ::sscanf;
+16535:   using ::tmpfile;
+16535: 
+16535:   using ::tmpnam;
+16535: 
+16535:   using ::ungetc;
+16535:   using ::vfprintf;
+16535:   using ::vprintf;
+16535:   using ::vsprintf;
+16535: }
+16535: # 157 "/usr/include/c++/8/cstdio" 3
+16535: namespace __gnu_cxx
+16535: {
+16535: # 175 "/usr/include/c++/8/cstdio" 3
+16535:   using ::snprintf;
+16535:   using ::vfscanf;
+16535:   using ::vscanf;
+16535:   using ::vsnprintf;
+16535:   using ::vsscanf;
+16535: 
+16535: }
+16535: 
+16535: namespace std
+16535: {
+16535:   using ::__gnu_cxx::snprintf;
+16535:   using ::__gnu_cxx::vfscanf;
+16535:   using ::__gnu_cxx::vscanf;
+16535:   using ::__gnu_cxx::vsnprintf;
+16535:   using ::__gnu_cxx::vsscanf;
+16535: }
+16535: # 44 "/usr/include/c++/8/ext/string_conversions.h" 2 3
+16535: # 1 "/usr/include/c++/8/cerrno" 1 3
+16535: # 39 "/usr/include/c++/8/cerrno" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/cerrno" 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/errno.h" 1 3 4
+16535: # 28 "/usr/include/errno.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/errno.h" 1 3 4
+16535: # 26 "/usr/include/x86_64-linux-gnu/bits/errno.h" 3 4
+16535: # 1 "/usr/include/linux/errno.h" 1 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/asm/errno.h" 1 3 4
+16535: # 1 "/usr/include/asm-generic/errno.h" 1 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/asm-generic/errno-base.h" 1 3 4
+16535: # 6 "/usr/include/asm-generic/errno.h" 2 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/asm/errno.h" 2 3 4
+16535: # 1 "/usr/include/linux/errno.h" 2 3 4
+16535: # 27 "/usr/include/x86_64-linux-gnu/bits/errno.h" 2 3 4
+16535: # 29 "/usr/include/errno.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern "C" {
+16535: 
+16535: 
+16535: extern int *__errno_location (void) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *program_invocation_name;
+16535: extern char *program_invocation_short_name;
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/types/error_t.h" 1 3 4
+16535: # 22 "/usr/include/x86_64-linux-gnu/bits/types/error_t.h" 3 4
+16535: typedef int error_t;
+16535: # 49 "/usr/include/errno.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 43 "/usr/include/c++/8/cerrno" 2 3
+16535: # 45 "/usr/include/c++/8/ext/string_conversions.h" 2 3
+16535: 
+16535: namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535:   template<typename _TRet, typename _Ret = _TRet, typename _CharT,
+16535:     typename... _Base>
+16535:     _Ret
+16535:     __stoa(_TRet (*__convf) (const _CharT*, _CharT**, _Base...),
+16535:     const char* __name, const _CharT* __str, std::size_t* __idx,
+16535:     _Base... __base)
+16535:     {
+16535:       _Ret __ret;
+16535: 
+16535:       _CharT* __endptr;
+16535: 
+16535:       struct _Save_errno {
+16535:  _Save_errno() : _M_errno((*__errno_location ())) { (*__errno_location ()) = 0; }
+16535:  ~_Save_errno() { if ((*__errno_location ()) == 0) (*__errno_location ()) = _M_errno; }
+16535:  int _M_errno;
+16535:       } const __save_errno;
+16535: 
+16535:       struct _Range_chk {
+16535:    static bool
+16535:    _S_chk(_TRet, std::false_type) { return false; }
+16535: 
+16535:    static bool
+16535:    _S_chk(_TRet __val, std::true_type)
+16535:    {
+16535:      return __val < _TRet(__numeric_traits<int>::__min)
+16535:        || __val > _TRet(__numeric_traits<int>::__max);
+16535:    }
+16535:       };
+16535: 
+16535:       const _TRet __tmp = __convf(__str, &__endptr, __base...);
+16535: 
+16535:       if (__endptr == __str)
+16535:  std::__throw_invalid_argument(__name);
+16535:       else if ((*__errno_location ()) == 34
+16535:    || _Range_chk::_S_chk(__tmp, std::is_same<_Ret, int>{}))
+16535:  std::__throw_out_of_range(__name);
+16535:       else
+16535:  __ret = __tmp;
+16535: 
+16535:       if (__idx)
+16535:  *__idx = __endptr - __str;
+16535: 
+16535:       return __ret;
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _String, typename _CharT = typename _String::value_type>
+16535:     _String
+16535:     __to_xstring(int (*__convf) (_CharT*, std::size_t, const _CharT*,
+16535:      __builtin_va_list), std::size_t __n,
+16535:    const _CharT* __fmt, ...)
+16535:     {
+16535: 
+16535: 
+16535:       _CharT* __s = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+16535:          * __n));
+16535: 
+16535:       __builtin_va_list __args;
+16535:       __builtin_va_start(__args, __fmt);
+16535: 
+16535:       const int __len = __convf(__s, __n, __fmt, __args);
+16535: 
+16535:       __builtin_va_end(__args);
+16535: 
+16535:       return _String(__s, __s + __len);
+16535:     }
+16535: 
+16535: 
+16535: }
+16535: # 6401 "/usr/include/c++/8/bits/basic_string.h" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: namespace __cxx11 {
+16535: 
+16535: 
+16535: 
+16535:   inline int
+16535:   stoi(const string& __str, size_t* __idx = 0, int __base = 10)
+16535:   { return __gnu_cxx::__stoa<long, int>(&std::strtol, "stoi", __str.c_str(),
+16535:      __idx, __base); }
+16535: 
+16535:   inline long
+16535:   stol(const string& __str, size_t* __idx = 0, int __base = 10)
+16535:   { return __gnu_cxx::__stoa(&std::strtol, "stol", __str.c_str(),
+16535:         __idx, __base); }
+16535: 
+16535:   inline unsigned long
+16535:   stoul(const string& __str, size_t* __idx = 0, int __base = 10)
+16535:   { return __gnu_cxx::__stoa(&std::strtoul, "stoul", __str.c_str(),
+16535:         __idx, __base); }
+16535: 
+16535:   inline long long
+16535:   stoll(const string& __str, size_t* __idx = 0, int __base = 10)
+16535:   { return __gnu_cxx::__stoa(&std::strtoll, "stoll", __str.c_str(),
+16535:         __idx, __base); }
+16535: 
+16535:   inline unsigned long long
+16535:   stoull(const string& __str, size_t* __idx = 0, int __base = 10)
+16535:   { return __gnu_cxx::__stoa(&std::strtoull, "stoull", __str.c_str(),
+16535:         __idx, __base); }
+16535: 
+16535: 
+16535:   inline float
+16535:   stof(const string& __str, size_t* __idx = 0)
+16535:   { return __gnu_cxx::__stoa(&std::strtof, "stof", __str.c_str(), __idx); }
+16535: 
+16535:   inline double
+16535:   stod(const string& __str, size_t* __idx = 0)
+16535:   { return __gnu_cxx::__stoa(&std::strtod, "stod", __str.c_str(), __idx); }
+16535: 
+16535:   inline long double
+16535:   stold(const string& __str, size_t* __idx = 0)
+16535:   { return __gnu_cxx::__stoa(&std::strtold, "stold", __str.c_str(), __idx); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   inline string
+16535:   to_string(int __val)
+16535:   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, 4 * sizeof(int),
+16535:         "%d", __val); }
+16535: 
+16535:   inline string
+16535:   to_string(unsigned __val)
+16535:   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf,
+16535:         4 * sizeof(unsigned),
+16535:         "%u", __val); }
+16535: 
+16535:   inline string
+16535:   to_string(long __val)
+16535:   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, 4 * sizeof(long),
+16535:         "%ld", __val); }
+16535: 
+16535:   inline string
+16535:   to_string(unsigned long __val)
+16535:   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf,
+16535:         4 * sizeof(unsigned long),
+16535:         "%lu", __val); }
+16535: 
+16535:   inline string
+16535:   to_string(long long __val)
+16535:   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf,
+16535:         4 * sizeof(long long),
+16535:         "%lld", __val); }
+16535: 
+16535:   inline string
+16535:   to_string(unsigned long long __val)
+16535:   { return __gnu_cxx::__to_xstring<string>(&std::vsnprintf,
+16535:         4 * sizeof(unsigned long long),
+16535:         "%llu", __val); }
+16535: 
+16535:   inline string
+16535:   to_string(float __val)
+16535:   {
+16535:     const int __n =
+16535:       __gnu_cxx::__numeric_traits<float>::__max_exponent10 + 20;
+16535:     return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, __n,
+16535:         "%f", __val);
+16535:   }
+16535: 
+16535:   inline string
+16535:   to_string(double __val)
+16535:   {
+16535:     const int __n =
+16535:       __gnu_cxx::__numeric_traits<double>::__max_exponent10 + 20;
+16535:     return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, __n,
+16535:         "%f", __val);
+16535:   }
+16535: 
+16535:   inline string
+16535:   to_string(long double __val)
+16535:   {
+16535:     const int __n =
+16535:       __gnu_cxx::__numeric_traits<long double>::__max_exponent10 + 20;
+16535:     return __gnu_cxx::__to_xstring<string>(&std::vsnprintf, __n,
+16535:         "%Lf", __val);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   inline int
+16535:   stoi(const wstring& __str, size_t* __idx = 0, int __base = 10)
+16535:   { return __gnu_cxx::__stoa<long, int>(&std::wcstol, "stoi", __str.c_str(),
+16535:      __idx, __base); }
+16535: 
+16535:   inline long
+16535:   stol(const wstring& __str, size_t* __idx = 0, int __base = 10)
+16535:   { return __gnu_cxx::__stoa(&std::wcstol, "stol", __str.c_str(),
+16535:         __idx, __base); }
+16535: 
+16535:   inline unsigned long
+16535:   stoul(const wstring& __str, size_t* __idx = 0, int __base = 10)
+16535:   { return __gnu_cxx::__stoa(&std::wcstoul, "stoul", __str.c_str(),
+16535:         __idx, __base); }
+16535: 
+16535:   inline long long
+16535:   stoll(const wstring& __str, size_t* __idx = 0, int __base = 10)
+16535:   { return __gnu_cxx::__stoa(&std::wcstoll, "stoll", __str.c_str(),
+16535:         __idx, __base); }
+16535: 
+16535:   inline unsigned long long
+16535:   stoull(const wstring& __str, size_t* __idx = 0, int __base = 10)
+16535:   { return __gnu_cxx::__stoa(&std::wcstoull, "stoull", __str.c_str(),
+16535:         __idx, __base); }
+16535: 
+16535: 
+16535:   inline float
+16535:   stof(const wstring& __str, size_t* __idx = 0)
+16535:   { return __gnu_cxx::__stoa(&std::wcstof, "stof", __str.c_str(), __idx); }
+16535: 
+16535:   inline double
+16535:   stod(const wstring& __str, size_t* __idx = 0)
+16535:   { return __gnu_cxx::__stoa(&std::wcstod, "stod", __str.c_str(), __idx); }
+16535: 
+16535:   inline long double
+16535:   stold(const wstring& __str, size_t* __idx = 0)
+16535:   { return __gnu_cxx::__stoa(&std::wcstold, "stold", __str.c_str(), __idx); }
+16535: 
+16535: 
+16535: 
+16535:   inline wstring
+16535:   to_wstring(int __val)
+16535:   { return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf, 4 * sizeof(int),
+16535:          L"%d", __val); }
+16535: 
+16535:   inline wstring
+16535:   to_wstring(unsigned __val)
+16535:   { return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf,
+16535:          4 * sizeof(unsigned),
+16535:          L"%u", __val); }
+16535: 
+16535:   inline wstring
+16535:   to_wstring(long __val)
+16535:   { return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf, 4 * sizeof(long),
+16535:          L"%ld", __val); }
+16535: 
+16535:   inline wstring
+16535:   to_wstring(unsigned long __val)
+16535:   { return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf,
+16535:          4 * sizeof(unsigned long),
+16535:          L"%lu", __val); }
+16535: 
+16535:   inline wstring
+16535:   to_wstring(long long __val)
+16535:   { return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf,
+16535:          4 * sizeof(long long),
+16535:          L"%lld", __val); }
+16535: 
+16535:   inline wstring
+16535:   to_wstring(unsigned long long __val)
+16535:   { return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf,
+16535:          4 * sizeof(unsigned long long),
+16535:          L"%llu", __val); }
+16535: 
+16535:   inline wstring
+16535:   to_wstring(float __val)
+16535:   {
+16535:     const int __n =
+16535:       __gnu_cxx::__numeric_traits<float>::__max_exponent10 + 20;
+16535:     return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf, __n,
+16535:          L"%f", __val);
+16535:   }
+16535: 
+16535:   inline wstring
+16535:   to_wstring(double __val)
+16535:   {
+16535:     const int __n =
+16535:       __gnu_cxx::__numeric_traits<double>::__max_exponent10 + 20;
+16535:     return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf, __n,
+16535:          L"%f", __val);
+16535:   }
+16535: 
+16535:   inline wstring
+16535:   to_wstring(long double __val)
+16535:   {
+16535:     const int __n =
+16535:       __gnu_cxx::__numeric_traits<long double>::__max_exponent10 + 20;
+16535:     return __gnu_cxx::__to_xstring<wstring>(&std::vswprintf, __n,
+16535:          L"%Lf", __val);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/functional_hash.h" 1 3
+16535: # 33 "/usr/include/c++/8/bits/functional_hash.h" 3
+16535:        
+16535: # 34 "/usr/include/c++/8/bits/functional_hash.h" 3
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 49 "/usr/include/c++/8/bits/functional_hash.h" 3
+16535:   template<typename _Result, typename _Arg>
+16535:     struct __hash_base
+16535:     {
+16535:       typedef _Result result_type ;
+16535:       typedef _Arg argument_type ;
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct hash;
+16535: 
+16535:   template<typename _Tp, typename = void>
+16535:     struct __poison_hash
+16535:     {
+16535:       static constexpr bool __enable_hash_call = false;
+16535:     private:
+16535: 
+16535:       __poison_hash(__poison_hash&&);
+16535:       ~__poison_hash();
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __poison_hash<_Tp, __void_t<decltype(hash<_Tp>()(declval<_Tp>()))>>
+16535:     {
+16535:       static constexpr bool __enable_hash_call = true;
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp, bool = is_enum<_Tp>::value>
+16535:     struct __hash_enum
+16535:     {
+16535:     private:
+16535: 
+16535:       __hash_enum(__hash_enum&&);
+16535:       ~__hash_enum();
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __hash_enum<_Tp, true> : public __hash_base<size_t, _Tp>
+16535:     {
+16535:       size_t
+16535:       operator()(_Tp __val) const noexcept
+16535:       {
+16535:        using __type = typename underlying_type<_Tp>::type;
+16535:        return hash<__type>{}(static_cast<__type>(__val));
+16535:       }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct hash : __hash_enum<_Tp>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct hash<_Tp*> : public __hash_base<size_t, _Tp*>
+16535:     {
+16535:       size_t
+16535:       operator()(_Tp* __p) const noexcept
+16535:       { return reinterpret_cast<size_t>(__p); }
+16535:     };
+16535: # 124 "/usr/include/c++/8/bits/functional_hash.h" 3
+16535:   template<> struct hash<bool> : public __hash_base<size_t, bool> { size_t operator()(bool __val) const noexcept { return static_cast<size_t>(__val); } };
+16535: 
+16535: 
+16535:   template<> struct hash<char> : public __hash_base<size_t, char> { size_t operator()(char __val) const noexcept { return static_cast<size_t>(__val); } };
+16535: 
+16535: 
+16535:   template<> struct hash<signed char> : public __hash_base<size_t, signed char> { size_t operator()(signed char __val) const noexcept { return static_cast<size_t>(__val); } };
+16535: 
+16535: 
+16535:   template<> struct hash<unsigned char> : public __hash_base<size_t, unsigned char> { size_t operator()(unsigned char __val) const noexcept { return static_cast<size_t>(__val); } };
+16535: 
+16535: 
+16535:   template<> struct hash<wchar_t> : public __hash_base<size_t, wchar_t> { size_t operator()(wchar_t __val) const noexcept { return static_cast<size_t>(__val); } };
+16535: 
+16535: 
+16535:   template<> struct hash<char16_t> : public __hash_base<size_t, char16_t> { size_t operator()(char16_t __val) const noexcept { return static_cast<size_t>(__val); } };
+16535: 
+16535: 
+16535:   template<> struct hash<char32_t> : public __hash_base<size_t, char32_t> { size_t operator()(char32_t __val) const noexcept { return static_cast<size_t>(__val); } };
+16535: 
+16535: 
+16535:   template<> struct hash<short> : public __hash_base<size_t, short> { size_t operator()(short __val) const noexcept { return static_cast<size_t>(__val); } };
+16535: 
+16535: 
+16535:   template<> struct hash<int> : public __hash_base<size_t, int> { size_t operator()(int __val) const noexcept { return static_cast<size_t>(__val); } };
+16535: 
+16535: 
+16535:   template<> struct hash<long> : public __hash_base<size_t, long> { size_t operator()(long __val) const noexcept { return static_cast<size_t>(__val); } };
+16535: 
+16535: 
+16535:   template<> struct hash<long long> : public __hash_base<size_t, long long> { size_t operator()(long long __val) const noexcept { return static_cast<size_t>(__val); } };
+16535: 
+16535: 
+16535:   template<> struct hash<unsigned short> : public __hash_base<size_t, unsigned short> { size_t operator()(unsigned short __val) const noexcept { return static_cast<size_t>(__val); } };
+16535: 
+16535: 
+16535:   template<> struct hash<unsigned int> : public __hash_base<size_t, unsigned int> { size_t operator()(unsigned int __val) const noexcept { return static_cast<size_t>(__val); } };
+16535: 
+16535: 
+16535:   template<> struct hash<unsigned long> : public __hash_base<size_t, unsigned long> { size_t operator()(unsigned long __val) const noexcept { return static_cast<size_t>(__val); } };
+16535: 
+16535: 
+16535:   template<> struct hash<unsigned long long> : public __hash_base<size_t, unsigned long long> { size_t operator()(unsigned long long __val) const noexcept { return static_cast<size_t>(__val); } };
+16535: 
+16535: 
+16535:   template<> struct hash<__int128> : public __hash_base<size_t, __int128> { size_t operator()(__int128 __val) const noexcept { return static_cast<size_t>(__val); } };
+16535:   template<> struct hash<__int128 unsigned> : public __hash_base<size_t, __int128 unsigned> { size_t operator()(__int128 unsigned __val) const noexcept { return static_cast<size_t>(__val); } };
+16535: # 187 "/usr/include/c++/8/bits/functional_hash.h" 3
+16535:   struct _Hash_impl
+16535:   {
+16535:     static size_t
+16535:     hash(const void* __ptr, size_t __clength,
+16535:   size_t __seed = static_cast<size_t>(0xc70f6907UL))
+16535:     { return _Hash_bytes(__ptr, __clength, __seed); }
+16535: 
+16535:     template<typename _Tp>
+16535:       static size_t
+16535:       hash(const _Tp& __val)
+16535:       { return hash(&__val, sizeof(__val)); }
+16535: 
+16535:     template<typename _Tp>
+16535:       static size_t
+16535:       __hash_combine(const _Tp& __val, size_t __hash)
+16535:       { return hash(&__val, sizeof(__val), __hash); }
+16535:   };
+16535: 
+16535: 
+16535:   struct _Fnv_hash_impl
+16535:   {
+16535:     static size_t
+16535:     hash(const void* __ptr, size_t __clength,
+16535:   size_t __seed = static_cast<size_t>(2166136261UL))
+16535:     { return _Fnv_hash_bytes(__ptr, __clength, __seed); }
+16535: 
+16535:     template<typename _Tp>
+16535:       static size_t
+16535:       hash(const _Tp& __val)
+16535:       { return hash(&__val, sizeof(__val)); }
+16535: 
+16535:     template<typename _Tp>
+16535:       static size_t
+16535:       __hash_combine(const _Tp& __val, size_t __hash)
+16535:       { return hash(&__val, sizeof(__val), __hash); }
+16535:   };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct hash<float> : public __hash_base<size_t, float>
+16535:     {
+16535:       size_t
+16535:       operator()(float __val) const noexcept
+16535:       {
+16535: 
+16535:  return __val != 0.0f ? std::_Hash_impl::hash(__val) : 0;
+16535:       }
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct hash<double> : public __hash_base<size_t, double>
+16535:     {
+16535:       size_t
+16535:       operator()(double __val) const noexcept
+16535:       {
+16535: 
+16535:  return __val != 0.0 ? std::_Hash_impl::hash(__val) : 0;
+16535:       }
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct hash<long double>
+16535:     : public __hash_base<size_t, long double>
+16535:     {
+16535:       __attribute__ ((__pure__)) size_t
+16535:       operator()(long double __val) const noexcept;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Hash>
+16535:     struct __is_fast_hash : public std::true_type
+16535:     { };
+16535: 
+16535:   template<>
+16535:     struct __is_fast_hash<hash<long double>> : public std::false_type
+16535:     { };
+16535: 
+16535: 
+16535: }
+16535: # 6627 "/usr/include/c++/8/bits/basic_string.h" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<>
+16535:     struct hash<string>
+16535:     : public __hash_base<size_t, string>
+16535:     {
+16535:       size_t
+16535:       operator()(const string& __s) const noexcept
+16535:       { return std::_Hash_impl::hash(__s.data(), __s.length()); }
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __is_fast_hash<hash<string>> : std::false_type
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535:   template<>
+16535:     struct hash<wstring>
+16535:     : public __hash_base<size_t, wstring>
+16535:     {
+16535:       size_t
+16535:       operator()(const wstring& __s) const noexcept
+16535:       { return std::_Hash_impl::hash(__s.data(),
+16535:                                      __s.length() * sizeof(wchar_t)); }
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __is_fast_hash<hash<wstring>> : std::false_type
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<>
+16535:     struct hash<u16string>
+16535:     : public __hash_base<size_t, u16string>
+16535:     {
+16535:       size_t
+16535:       operator()(const u16string& __s) const noexcept
+16535:       { return std::_Hash_impl::hash(__s.data(),
+16535:                                      __s.length() * sizeof(char16_t)); }
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __is_fast_hash<hash<u16string>> : std::false_type
+16535:     { };
+16535: 
+16535: 
+16535:   template<>
+16535:     struct hash<u32string>
+16535:     : public __hash_base<size_t, u32string>
+16535:     {
+16535:       size_t
+16535:       operator()(const u32string& __s) const noexcept
+16535:       { return std::_Hash_impl::hash(__s.data(),
+16535:                                      __s.length() * sizeof(char32_t)); }
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __is_fast_hash<hash<u32string>> : std::false_type
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   inline namespace literals
+16535:   {
+16535:   inline namespace string_literals
+16535:   {
+16535: #pragma GCC diagnostic push
+16535: #pragma GCC diagnostic ignored "-Wliteral-suffix"
+16535:     __attribute ((__abi_tag__ ("cxx11")))
+16535:     inline basic_string<char>
+16535:     operator""s(const char* __str, size_t __len)
+16535:     { return basic_string<char>{__str, __len}; }
+16535: 
+16535: 
+16535:     __attribute ((__abi_tag__ ("cxx11")))
+16535:     inline basic_string<wchar_t>
+16535:     operator""s(const wchar_t* __str, size_t __len)
+16535:     { return basic_string<wchar_t>{__str, __len}; }
+16535: 
+16535: 
+16535: 
+16535:     __attribute ((__abi_tag__ ("cxx11")))
+16535:     inline basic_string<char16_t>
+16535:     operator""s(const char16_t* __str, size_t __len)
+16535:     { return basic_string<char16_t>{__str, __len}; }
+16535: 
+16535:     __attribute ((__abi_tag__ ("cxx11")))
+16535:     inline basic_string<char32_t>
+16535:     operator""s(const char32_t* __str, size_t __len)
+16535:     { return basic_string<char32_t>{__str, __len}; }
+16535: 
+16535: 
+16535: #pragma GCC diagnostic pop
+16535:   }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 53 "/usr/include/c++/8/string" 2 3
+16535: # 1 "/usr/include/c++/8/bits/basic_string.tcc" 1 3
+16535: # 42 "/usr/include/c++/8/bits/basic_string.tcc" 3
+16535:        
+16535: # 43 "/usr/include/c++/8/bits/basic_string.tcc" 3
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     const typename basic_string<_CharT, _Traits, _Alloc>::size_type
+16535:     basic_string<_CharT, _Traits, _Alloc>::npos;
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     void
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     swap(basic_string& __s) noexcept
+16535:     {
+16535:       if (this == &__s)
+16535:  return;
+16535: 
+16535:       _Alloc_traits::_S_on_swap(_M_get_allocator(), __s._M_get_allocator());
+16535: 
+16535:       if (_M_is_local())
+16535:  if (__s._M_is_local())
+16535:    {
+16535:      if (length() && __s.length())
+16535:        {
+16535:   _CharT __tmp_data[_S_local_capacity + 1];
+16535:   traits_type::copy(__tmp_data, __s._M_local_buf,
+16535:       _S_local_capacity + 1);
+16535:   traits_type::copy(__s._M_local_buf, _M_local_buf,
+16535:       _S_local_capacity + 1);
+16535:   traits_type::copy(_M_local_buf, __tmp_data,
+16535:       _S_local_capacity + 1);
+16535:        }
+16535:      else if (__s.length())
+16535:        {
+16535:   traits_type::copy(_M_local_buf, __s._M_local_buf,
+16535:       _S_local_capacity + 1);
+16535:   _M_length(__s.length());
+16535:   __s._M_set_length(0);
+16535:   return;
+16535:        }
+16535:      else if (length())
+16535:        {
+16535:   traits_type::copy(__s._M_local_buf, _M_local_buf,
+16535:       _S_local_capacity + 1);
+16535:   __s._M_length(length());
+16535:   _M_set_length(0);
+16535:   return;
+16535:        }
+16535:    }
+16535:  else
+16535:    {
+16535:      const size_type __tmp_capacity = __s._M_allocated_capacity;
+16535:      traits_type::copy(__s._M_local_buf, _M_local_buf,
+16535:          _S_local_capacity + 1);
+16535:      _M_data(__s._M_data());
+16535:      __s._M_data(__s._M_local_buf);
+16535:      _M_capacity(__tmp_capacity);
+16535:    }
+16535:       else
+16535:  {
+16535:    const size_type __tmp_capacity = _M_allocated_capacity;
+16535:    if (__s._M_is_local())
+16535:      {
+16535:        traits_type::copy(_M_local_buf, __s._M_local_buf,
+16535:     _S_local_capacity + 1);
+16535:        __s._M_data(_M_data());
+16535:        _M_data(_M_local_buf);
+16535:      }
+16535:    else
+16535:      {
+16535:        pointer __tmp_ptr = _M_data();
+16535:        _M_data(__s._M_data());
+16535:        __s._M_data(__tmp_ptr);
+16535:        _M_capacity(__s._M_allocated_capacity);
+16535:      }
+16535:    __s._M_capacity(__tmp_capacity);
+16535:  }
+16535: 
+16535:       const size_type __tmp_length = length();
+16535:       _M_length(__s.length());
+16535:       __s._M_length(__tmp_length);
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     typename basic_string<_CharT, _Traits, _Alloc>::pointer
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     _M_create(size_type& __capacity, size_type __old_capacity)
+16535:     {
+16535: 
+16535: 
+16535:       if (__capacity > max_size())
+16535:  std::__throw_length_error(("basic_string::_M_create"));
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       if (__capacity > __old_capacity && __capacity < 2 * __old_capacity)
+16535:  {
+16535:    __capacity = 2 * __old_capacity;
+16535: 
+16535:    if (__capacity > max_size())
+16535:      __capacity = max_size();
+16535:  }
+16535: 
+16535: 
+16535: 
+16535:       return _Alloc_traits::allocate(_M_get_allocator(), __capacity + 1);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     template<typename _InIterator>
+16535:       void
+16535:       basic_string<_CharT, _Traits, _Alloc>::
+16535:       _M_construct(_InIterator __beg, _InIterator __end,
+16535:      std::input_iterator_tag)
+16535:       {
+16535:  size_type __len = 0;
+16535:  size_type __capacity = size_type(_S_local_capacity);
+16535: 
+16535:  while (__beg != __end && __len < __capacity)
+16535:    {
+16535:      _M_data()[__len++] = *__beg;
+16535:      ++__beg;
+16535:    }
+16535: 
+16535:  try
+16535:    {
+16535:      while (__beg != __end)
+16535:        {
+16535:   if (__len == __capacity)
+16535:     {
+16535: 
+16535:       __capacity = __len + 1;
+16535:       pointer __another = _M_create(__capacity, __len);
+16535:       this->_S_copy(__another, _M_data(), __len);
+16535:       _M_dispose();
+16535:       _M_data(__another);
+16535:       _M_capacity(__capacity);
+16535:     }
+16535:   _M_data()[__len++] = *__beg;
+16535:   ++__beg;
+16535:        }
+16535:    }
+16535:  catch(...)
+16535:    {
+16535:      _M_dispose();
+16535:      throw;
+16535:    }
+16535: 
+16535:  _M_set_length(__len);
+16535:       }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     template<typename _InIterator>
+16535:       void
+16535:       basic_string<_CharT, _Traits, _Alloc>::
+16535:       _M_construct(_InIterator __beg, _InIterator __end,
+16535:      std::forward_iterator_tag)
+16535:       {
+16535: 
+16535:  if (__gnu_cxx::__is_null_pointer(__beg) && __beg != __end)
+16535:    std::__throw_logic_error(("basic_string::" "_M_construct null not valid")
+16535:                                          );
+16535: 
+16535:  size_type __dnew = static_cast<size_type>(std::distance(__beg, __end));
+16535: 
+16535:  if (__dnew > size_type(_S_local_capacity))
+16535:    {
+16535:      _M_data(_M_create(__dnew, size_type(0)));
+16535:      _M_capacity(__dnew);
+16535:    }
+16535: 
+16535: 
+16535:  try
+16535:    { this->_S_copy_chars(_M_data(), __beg, __end); }
+16535:  catch(...)
+16535:    {
+16535:      _M_dispose();
+16535:      throw;
+16535:    }
+16535: 
+16535:  _M_set_length(__dnew);
+16535:       }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     void
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     _M_construct(size_type __n, _CharT __c)
+16535:     {
+16535:       if (__n > size_type(_S_local_capacity))
+16535:  {
+16535:    _M_data(_M_create(__n, size_type(0)));
+16535:    _M_capacity(__n);
+16535:  }
+16535: 
+16535:       if (__n)
+16535:  this->_S_assign(_M_data(), __n, __c);
+16535: 
+16535:       _M_set_length(__n);
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     void
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     _M_assign(const basic_string& __str)
+16535:     {
+16535:       if (this != &__str)
+16535:  {
+16535:    const size_type __rsize = __str.length();
+16535:    const size_type __capacity = capacity();
+16535: 
+16535:    if (__rsize > __capacity)
+16535:      {
+16535:        size_type __new_capacity = __rsize;
+16535:        pointer __tmp = _M_create(__new_capacity, __capacity);
+16535:        _M_dispose();
+16535:        _M_data(__tmp);
+16535:        _M_capacity(__new_capacity);
+16535:      }
+16535: 
+16535:    if (__rsize)
+16535:      this->_S_copy(_M_data(), __str._M_data(), __rsize);
+16535: 
+16535:    _M_set_length(__rsize);
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     void
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     reserve(size_type __res)
+16535:     {
+16535: 
+16535:       if (__res < length())
+16535:  __res = length();
+16535: 
+16535:       const size_type __capacity = capacity();
+16535:       if (__res != __capacity)
+16535:  {
+16535:    if (__res > __capacity
+16535:        || __res > size_type(_S_local_capacity))
+16535:      {
+16535:        pointer __tmp = _M_create(__res, __capacity);
+16535:        this->_S_copy(__tmp, _M_data(), length() + 1);
+16535:        _M_dispose();
+16535:        _M_data(__tmp);
+16535:        _M_capacity(__res);
+16535:      }
+16535:    else if (!_M_is_local())
+16535:      {
+16535:        this->_S_copy(_M_local_data(), _M_data(), length() + 1);
+16535:        _M_destroy(__capacity);
+16535:        _M_data(_M_local_data());
+16535:      }
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     void
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     _M_mutate(size_type __pos, size_type __len1, const _CharT* __s,
+16535:        size_type __len2)
+16535:     {
+16535:       const size_type __how_much = length() - __pos - __len1;
+16535: 
+16535:       size_type __new_capacity = length() + __len2 - __len1;
+16535:       pointer __r = _M_create(__new_capacity, capacity());
+16535: 
+16535:       if (__pos)
+16535:  this->_S_copy(__r, _M_data(), __pos);
+16535:       if (__s && __len2)
+16535:  this->_S_copy(__r + __pos, __s, __len2);
+16535:       if (__how_much)
+16535:  this->_S_copy(__r + __pos + __len2,
+16535:         _M_data() + __pos + __len1, __how_much);
+16535: 
+16535:       _M_dispose();
+16535:       _M_data(__r);
+16535:       _M_capacity(__new_capacity);
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     void
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     _M_erase(size_type __pos, size_type __n)
+16535:     {
+16535:       const size_type __how_much = length() - __pos - __n;
+16535: 
+16535:       if (__how_much && __n)
+16535:  this->_S_move(_M_data() + __pos, _M_data() + __pos + __n, __how_much);
+16535: 
+16535:       _M_set_length(length() - __n);
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     void
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     resize(size_type __n, _CharT __c)
+16535:     {
+16535:       const size_type __size = this->size();
+16535:       if (__size < __n)
+16535:  this->append(__n - __size, __c);
+16535:       else if (__n < __size)
+16535:  this->_M_set_length(__n);
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     basic_string<_CharT, _Traits, _Alloc>&
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     _M_append(const _CharT* __s, size_type __n)
+16535:     {
+16535:       const size_type __len = __n + this->size();
+16535: 
+16535:       if (__len <= this->capacity())
+16535:  {
+16535:    if (__n)
+16535:      this->_S_copy(this->_M_data() + this->size(), __s, __n);
+16535:  }
+16535:       else
+16535:  this->_M_mutate(this->size(), size_type(0), __s, __n);
+16535: 
+16535:       this->_M_set_length(__len);
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     template<typename _InputIterator>
+16535:       basic_string<_CharT, _Traits, _Alloc>&
+16535:       basic_string<_CharT, _Traits, _Alloc>::
+16535:       _M_replace_dispatch(const_iterator __i1, const_iterator __i2,
+16535:      _InputIterator __k1, _InputIterator __k2,
+16535:      std::__false_type)
+16535:       {
+16535:  const basic_string __s(__k1, __k2);
+16535:  const size_type __n1 = __i2 - __i1;
+16535:  return _M_replace(__i1 - begin(), __n1, __s._M_data(),
+16535:      __s.size());
+16535:       }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     basic_string<_CharT, _Traits, _Alloc>&
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2,
+16535:      _CharT __c)
+16535:     {
+16535:       _M_check_length(__n1, __n2, "basic_string::_M_replace_aux");
+16535: 
+16535:       const size_type __old_size = this->size();
+16535:       const size_type __new_size = __old_size + __n2 - __n1;
+16535: 
+16535:       if (__new_size <= this->capacity())
+16535:  {
+16535:    pointer __p = this->_M_data() + __pos1;
+16535: 
+16535:    const size_type __how_much = __old_size - __pos1 - __n1;
+16535:    if (__how_much && __n1 != __n2)
+16535:      this->_S_move(__p + __n2, __p + __n1, __how_much);
+16535:  }
+16535:       else
+16535:  this->_M_mutate(__pos1, __n1, 0, __n2);
+16535: 
+16535:       if (__n2)
+16535:  this->_S_assign(this->_M_data() + __pos1, __n2, __c);
+16535: 
+16535:       this->_M_set_length(__new_size);
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     basic_string<_CharT, _Traits, _Alloc>&
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     _M_replace(size_type __pos, size_type __len1, const _CharT* __s,
+16535:         const size_type __len2)
+16535:     {
+16535:       _M_check_length(__len1, __len2, "basic_string::_M_replace");
+16535: 
+16535:       const size_type __old_size = this->size();
+16535:       const size_type __new_size = __old_size + __len2 - __len1;
+16535: 
+16535:       if (__new_size <= this->capacity())
+16535:  {
+16535:    pointer __p = this->_M_data() + __pos;
+16535: 
+16535:    const size_type __how_much = __old_size - __pos - __len1;
+16535:    if (_M_disjunct(__s))
+16535:      {
+16535:        if (__how_much && __len1 != __len2)
+16535:   this->_S_move(__p + __len2, __p + __len1, __how_much);
+16535:        if (__len2)
+16535:   this->_S_copy(__p, __s, __len2);
+16535:      }
+16535:    else
+16535:      {
+16535: 
+16535:        if (__len2 && __len2 <= __len1)
+16535:   this->_S_move(__p, __s, __len2);
+16535:        if (__how_much && __len1 != __len2)
+16535:   this->_S_move(__p + __len2, __p + __len1, __how_much);
+16535:        if (__len2 > __len1)
+16535:   {
+16535:     if (__s + __len2 <= __p + __len1)
+16535:       this->_S_move(__p, __s, __len2);
+16535:     else if (__s >= __p + __len1)
+16535:       this->_S_copy(__p, __s + __len2 - __len1, __len2);
+16535:     else
+16535:       {
+16535:         const size_type __nleft = (__p + __len1) - __s;
+16535:         this->_S_move(__p, __s, __nleft);
+16535:         this->_S_copy(__p + __nleft, __p + __len2,
+16535:         __len2 - __nleft);
+16535:       }
+16535:   }
+16535:      }
+16535:  }
+16535:       else
+16535:  this->_M_mutate(__pos, __len1, __s, __len2);
+16535: 
+16535:       this->_M_set_length(__new_size);
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     typename basic_string<_CharT, _Traits, _Alloc>::size_type
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     copy(_CharT* __s, size_type __n, size_type __pos) const
+16535:     {
+16535:       _M_check(__pos, "basic_string::copy");
+16535:       __n = _M_limit(__pos, __n);
+16535:       ;
+16535:       if (__n)
+16535:  _S_copy(__s, _M_data() + __pos, __n);
+16535: 
+16535:       return __n;
+16535:     }
+16535: # 1155 "/usr/include/c++/8/bits/basic_string.tcc" 3
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     basic_string<_CharT, _Traits, _Alloc>
+16535:     operator+(const _CharT* __lhs,
+16535:        const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+16535:     {
+16535:       ;
+16535:       typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
+16535:       typedef typename __string_type::size_type __size_type;
+16535:       const __size_type __len = _Traits::length(__lhs);
+16535:       __string_type __str;
+16535:       __str.reserve(__len + __rhs.size());
+16535:       __str.append(__lhs, __len);
+16535:       __str.append(__rhs);
+16535:       return __str;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     basic_string<_CharT, _Traits, _Alloc>
+16535:     operator+(_CharT __lhs, const basic_string<_CharT, _Traits, _Alloc>& __rhs)
+16535:     {
+16535:       typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
+16535:       typedef typename __string_type::size_type __size_type;
+16535:       __string_type __str;
+16535:       const __size_type __len = __rhs.size();
+16535:       __str.reserve(__len + 1);
+16535:       __str.append(__size_type(1), __lhs);
+16535:       __str.append(__rhs);
+16535:       return __str;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     typename basic_string<_CharT, _Traits, _Alloc>::size_type
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     find(const _CharT* __s, size_type __pos, size_type __n) const
+16535:     noexcept
+16535:     {
+16535:       ;
+16535:       const size_type __size = this->size();
+16535: 
+16535:       if (__n == 0)
+16535:  return __pos <= __size ? __pos : npos;
+16535:       if (__pos >= __size)
+16535:  return npos;
+16535: 
+16535:       const _CharT __elem0 = __s[0];
+16535:       const _CharT* const __data = data();
+16535:       const _CharT* __first = __data + __pos;
+16535:       const _CharT* const __last = __data + __size;
+16535:       size_type __len = __size - __pos;
+16535: 
+16535:       while (__len >= __n)
+16535:  {
+16535: 
+16535:    __first = traits_type::find(__first, __len - __n + 1, __elem0);
+16535:    if (!__first)
+16535:      return npos;
+16535: 
+16535: 
+16535: 
+16535:    if (traits_type::compare(__first, __s, __n) == 0)
+16535:      return __first - __data;
+16535:    __len = __last - ++__first;
+16535:  }
+16535:       return npos;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     typename basic_string<_CharT, _Traits, _Alloc>::size_type
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     find(_CharT __c, size_type __pos) const noexcept
+16535:     {
+16535:       size_type __ret = npos;
+16535:       const size_type __size = this->size();
+16535:       if (__pos < __size)
+16535:  {
+16535:    const _CharT* __data = _M_data();
+16535:    const size_type __n = __size - __pos;
+16535:    const _CharT* __p = traits_type::find(__data + __pos, __n, __c);
+16535:    if (__p)
+16535:      __ret = __p - __data;
+16535:  }
+16535:       return __ret;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     typename basic_string<_CharT, _Traits, _Alloc>::size_type
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     rfind(const _CharT* __s, size_type __pos, size_type __n) const
+16535:     noexcept
+16535:     {
+16535:       ;
+16535:       const size_type __size = this->size();
+16535:       if (__n <= __size)
+16535:  {
+16535:    __pos = std::min(size_type(__size - __n), __pos);
+16535:    const _CharT* __data = _M_data();
+16535:    do
+16535:      {
+16535:        if (traits_type::compare(__data + __pos, __s, __n) == 0)
+16535:   return __pos;
+16535:      }
+16535:    while (__pos-- > 0);
+16535:  }
+16535:       return npos;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     typename basic_string<_CharT, _Traits, _Alloc>::size_type
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     rfind(_CharT __c, size_type __pos) const noexcept
+16535:     {
+16535:       size_type __size = this->size();
+16535:       if (__size)
+16535:  {
+16535:    if (--__size > __pos)
+16535:      __size = __pos;
+16535:    for (++__size; __size-- > 0; )
+16535:      if (traits_type::eq(_M_data()[__size], __c))
+16535:        return __size;
+16535:  }
+16535:       return npos;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     typename basic_string<_CharT, _Traits, _Alloc>::size_type
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     find_first_of(const _CharT* __s, size_type __pos, size_type __n) const
+16535:     noexcept
+16535:     {
+16535:       ;
+16535:       for (; __n && __pos < this->size(); ++__pos)
+16535:  {
+16535:    const _CharT* __p = traits_type::find(__s, __n, _M_data()[__pos]);
+16535:    if (__p)
+16535:      return __pos;
+16535:  }
+16535:       return npos;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     typename basic_string<_CharT, _Traits, _Alloc>::size_type
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     find_last_of(const _CharT* __s, size_type __pos, size_type __n) const
+16535:     noexcept
+16535:     {
+16535:       ;
+16535:       size_type __size = this->size();
+16535:       if (__size && __n)
+16535:  {
+16535:    if (--__size > __pos)
+16535:      __size = __pos;
+16535:    do
+16535:      {
+16535:        if (traits_type::find(__s, __n, _M_data()[__size]))
+16535:   return __size;
+16535:      }
+16535:    while (__size-- != 0);
+16535:  }
+16535:       return npos;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     typename basic_string<_CharT, _Traits, _Alloc>::size_type
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     find_first_not_of(const _CharT* __s, size_type __pos, size_type __n) const
+16535:     noexcept
+16535:     {
+16535:       ;
+16535:       for (; __pos < this->size(); ++__pos)
+16535:  if (!traits_type::find(__s, __n, _M_data()[__pos]))
+16535:    return __pos;
+16535:       return npos;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     typename basic_string<_CharT, _Traits, _Alloc>::size_type
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     find_first_not_of(_CharT __c, size_type __pos) const noexcept
+16535:     {
+16535:       for (; __pos < this->size(); ++__pos)
+16535:  if (!traits_type::eq(_M_data()[__pos], __c))
+16535:    return __pos;
+16535:       return npos;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     typename basic_string<_CharT, _Traits, _Alloc>::size_type
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     find_last_not_of(const _CharT* __s, size_type __pos, size_type __n) const
+16535:     noexcept
+16535:     {
+16535:       ;
+16535:       size_type __size = this->size();
+16535:       if (__size)
+16535:  {
+16535:    if (--__size > __pos)
+16535:      __size = __pos;
+16535:    do
+16535:      {
+16535:        if (!traits_type::find(__s, __n, _M_data()[__size]))
+16535:   return __size;
+16535:      }
+16535:    while (__size--);
+16535:  }
+16535:       return npos;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     typename basic_string<_CharT, _Traits, _Alloc>::size_type
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     find_last_not_of(_CharT __c, size_type __pos) const noexcept
+16535:     {
+16535:       size_type __size = this->size();
+16535:       if (__size)
+16535:  {
+16535:    if (--__size > __pos)
+16535:      __size = __pos;
+16535:    do
+16535:      {
+16535:        if (!traits_type::eq(_M_data()[__size], __c))
+16535:   return __size;
+16535:      }
+16535:    while (__size--);
+16535:  }
+16535:       return npos;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     int
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     compare(size_type __pos, size_type __n, const basic_string& __str) const
+16535:     {
+16535:       _M_check(__pos, "basic_string::compare");
+16535:       __n = _M_limit(__pos, __n);
+16535:       const size_type __osize = __str.size();
+16535:       const size_type __len = std::min(__n, __osize);
+16535:       int __r = traits_type::compare(_M_data() + __pos, __str.data(), __len);
+16535:       if (!__r)
+16535:  __r = _S_compare(__n, __osize);
+16535:       return __r;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     int
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     compare(size_type __pos1, size_type __n1, const basic_string& __str,
+16535:      size_type __pos2, size_type __n2) const
+16535:     {
+16535:       _M_check(__pos1, "basic_string::compare");
+16535:       __str._M_check(__pos2, "basic_string::compare");
+16535:       __n1 = _M_limit(__pos1, __n1);
+16535:       __n2 = __str._M_limit(__pos2, __n2);
+16535:       const size_type __len = std::min(__n1, __n2);
+16535:       int __r = traits_type::compare(_M_data() + __pos1,
+16535:          __str.data() + __pos2, __len);
+16535:       if (!__r)
+16535:  __r = _S_compare(__n1, __n2);
+16535:       return __r;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     int
+16535:     basic_string<_CharT, _Traits, _Alloc>::
+16535:     compare(const _CharT* __s) const noexcept
+16535:     {
+16535:       ;
+16535:       const size_type __size = this->size();
+16535:       const size_type __osize = traits_type::length(__s);
+16535:       const size_type __len = std::min(__size, __osize);
+16535:       int __r = traits_type::compare(_M_data(), __s, __len);
+16535:       if (!__r)
+16535:  __r = _S_compare(__size, __osize);
+16535:       return __r;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     int
+16535:     basic_string <_CharT, _Traits, _Alloc>::
+16535:     compare(size_type __pos, size_type __n1, const _CharT* __s) const
+16535:     {
+16535:       ;
+16535:       _M_check(__pos, "basic_string::compare");
+16535:       __n1 = _M_limit(__pos, __n1);
+16535:       const size_type __osize = traits_type::length(__s);
+16535:       const size_type __len = std::min(__n1, __osize);
+16535:       int __r = traits_type::compare(_M_data() + __pos, __s, __len);
+16535:       if (!__r)
+16535:  __r = _S_compare(__n1, __osize);
+16535:       return __r;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     int
+16535:     basic_string <_CharT, _Traits, _Alloc>::
+16535:     compare(size_type __pos, size_type __n1, const _CharT* __s,
+16535:      size_type __n2) const
+16535:     {
+16535:       ;
+16535:       _M_check(__pos, "basic_string::compare");
+16535:       __n1 = _M_limit(__pos, __n1);
+16535:       const size_type __len = std::min(__n1, __n2);
+16535:       int __r = traits_type::compare(_M_data() + __pos, __s, __len);
+16535:       if (!__r)
+16535:  __r = _S_compare(__n1, __n2);
+16535:       return __r;
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     operator>>(basic_istream<_CharT, _Traits>& __in,
+16535:         basic_string<_CharT, _Traits, _Alloc>& __str)
+16535:     {
+16535:       typedef basic_istream<_CharT, _Traits> __istream_type;
+16535:       typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
+16535:       typedef typename __istream_type::ios_base __ios_base;
+16535:       typedef typename __istream_type::int_type __int_type;
+16535:       typedef typename __string_type::size_type __size_type;
+16535:       typedef ctype<_CharT> __ctype_type;
+16535:       typedef typename __ctype_type::ctype_base __ctype_base;
+16535: 
+16535:       __size_type __extracted = 0;
+16535:       typename __ios_base::iostate __err = __ios_base::goodbit;
+16535:       typename __istream_type::sentry __cerb(__in, false);
+16535:       if (__cerb)
+16535:  {
+16535:    try
+16535:      {
+16535: 
+16535:        __str.erase();
+16535:        _CharT __buf[128];
+16535:        __size_type __len = 0;
+16535:        const streamsize __w = __in.width();
+16535:        const __size_type __n = __w > 0 ? static_cast<__size_type>(__w)
+16535:                                 : __str.max_size();
+16535:        const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc());
+16535:        const __int_type __eof = _Traits::eof();
+16535:        __int_type __c = __in.rdbuf()->sgetc();
+16535: 
+16535:        while (__extracted < __n
+16535:        && !_Traits::eq_int_type(__c, __eof)
+16535:        && !__ct.is(__ctype_base::space,
+16535:      _Traits::to_char_type(__c)))
+16535:   {
+16535:     if (__len == sizeof(__buf) / sizeof(_CharT))
+16535:       {
+16535:         __str.append(__buf, sizeof(__buf) / sizeof(_CharT));
+16535:         __len = 0;
+16535:       }
+16535:     __buf[__len++] = _Traits::to_char_type(__c);
+16535:     ++__extracted;
+16535:     __c = __in.rdbuf()->snextc();
+16535:   }
+16535:        __str.append(__buf, __len);
+16535: 
+16535:        if (_Traits::eq_int_type(__c, __eof))
+16535:   __err |= __ios_base::eofbit;
+16535:        __in.width(0);
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        __in._M_setstate(__ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      {
+16535: 
+16535: 
+16535: 
+16535:        __in._M_setstate(__ios_base::badbit);
+16535:      }
+16535:  }
+16535: 
+16535:       if (!__extracted)
+16535:  __err |= __ios_base::failbit;
+16535:       if (__err)
+16535:  __in.setstate(__err);
+16535:       return __in;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     getline(basic_istream<_CharT, _Traits>& __in,
+16535:      basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim)
+16535:     {
+16535:       typedef basic_istream<_CharT, _Traits> __istream_type;
+16535:       typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
+16535:       typedef typename __istream_type::ios_base __ios_base;
+16535:       typedef typename __istream_type::int_type __int_type;
+16535:       typedef typename __string_type::size_type __size_type;
+16535: 
+16535:       __size_type __extracted = 0;
+16535:       const __size_type __n = __str.max_size();
+16535:       typename __ios_base::iostate __err = __ios_base::goodbit;
+16535:       typename __istream_type::sentry __cerb(__in, true);
+16535:       if (__cerb)
+16535:  {
+16535:    try
+16535:      {
+16535:        __str.erase();
+16535:        const __int_type __idelim = _Traits::to_int_type(__delim);
+16535:        const __int_type __eof = _Traits::eof();
+16535:        __int_type __c = __in.rdbuf()->sgetc();
+16535: 
+16535:        while (__extracted < __n
+16535:        && !_Traits::eq_int_type(__c, __eof)
+16535:        && !_Traits::eq_int_type(__c, __idelim))
+16535:   {
+16535:     __str += _Traits::to_char_type(__c);
+16535:     ++__extracted;
+16535:     __c = __in.rdbuf()->snextc();
+16535:   }
+16535: 
+16535:        if (_Traits::eq_int_type(__c, __eof))
+16535:   __err |= __ios_base::eofbit;
+16535:        else if (_Traits::eq_int_type(__c, __idelim))
+16535:   {
+16535:     ++__extracted;
+16535:     __in.rdbuf()->sbumpc();
+16535:   }
+16535:        else
+16535:   __err |= __ios_base::failbit;
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        __in._M_setstate(__ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      {
+16535: 
+16535: 
+16535: 
+16535:        __in._M_setstate(__ios_base::badbit);
+16535:      }
+16535:  }
+16535:       if (!__extracted)
+16535:  __err |= __ios_base::failbit;
+16535:       if (__err)
+16535:  __in.setstate(__err);
+16535:       return __in;
+16535:     }
+16535: # 1607 "/usr/include/c++/8/bits/basic_string.tcc" 3
+16535:   extern template class basic_string<char>;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   extern template
+16535:     basic_istream<char>&
+16535:     operator>>(basic_istream<char>&, string&);
+16535:   extern template
+16535:     basic_ostream<char>&
+16535:     operator<<(basic_ostream<char>&, const string&);
+16535:   extern template
+16535:     basic_istream<char>&
+16535:     getline(basic_istream<char>&, string&, char);
+16535:   extern template
+16535:     basic_istream<char>&
+16535:     getline(basic_istream<char>&, string&);
+16535: 
+16535: 
+16535: 
+16535:   extern template class basic_string<wchar_t>;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   extern template
+16535:     basic_istream<wchar_t>&
+16535:     operator>>(basic_istream<wchar_t>&, wstring&);
+16535:   extern template
+16535:     basic_ostream<wchar_t>&
+16535:     operator<<(basic_ostream<wchar_t>&, const wstring&);
+16535:   extern template
+16535:     basic_istream<wchar_t>&
+16535:     getline(basic_istream<wchar_t>&, wstring&, wchar_t);
+16535:   extern template
+16535:     basic_istream<wchar_t>&
+16535:     getline(basic_istream<wchar_t>&, wstring&);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 54 "/usr/include/c++/8/string" 2 3
+16535: # 41 "/usr/include/gmpxx.h" 2 3 4
+16535: # 1 "/usr/include/c++/8/stdexcept" 1 3 4
+16535: # 36 "/usr/include/c++/8/stdexcept" 3 4
+16535:        
+16535: # 37 "/usr/include/c++/8/stdexcept" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   struct __cow_string
+16535:   {
+16535:     union {
+16535:       const char* _M_p;
+16535:       char _M_bytes[sizeof(const char*)];
+16535:     };
+16535: 
+16535:     __cow_string();
+16535:     __cow_string(const std::string&);
+16535:     __cow_string(const char*, size_t);
+16535:     __cow_string(const __cow_string&) noexcept;
+16535:     __cow_string& operator=(const __cow_string&) noexcept;
+16535:     ~__cow_string();
+16535: 
+16535:     __cow_string(__cow_string&&) noexcept;
+16535:     __cow_string& operator=(__cow_string&&) noexcept;
+16535: 
+16535:   };
+16535: 
+16535:   typedef basic_string<char> __sso_string;
+16535: # 113 "/usr/include/c++/8/stdexcept" 3
+16535:   class logic_error : public exception
+16535:   {
+16535:     __cow_string _M_msg;
+16535: 
+16535:   public:
+16535: 
+16535:     explicit
+16535:     logic_error(const string& __arg) ;
+16535: 
+16535: 
+16535:     explicit
+16535:     logic_error(const char*) ;
+16535: 
+16535: 
+16535: 
+16535:     logic_error(const logic_error&) noexcept;
+16535:     logic_error& operator=(const logic_error&) noexcept;
+16535: 
+16535: 
+16535:     virtual ~logic_error() noexcept;
+16535: 
+16535: 
+16535: 
+16535:     virtual const char*
+16535:     what() const noexcept;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   };
+16535: 
+16535: 
+16535: 
+16535:   class domain_error : public logic_error
+16535:   {
+16535:   public:
+16535:     explicit domain_error(const string& __arg) ;
+16535: 
+16535:     explicit domain_error(const char*) ;
+16535: 
+16535:     virtual ~domain_error() noexcept;
+16535:   };
+16535: 
+16535: 
+16535:   class invalid_argument : public logic_error
+16535:   {
+16535:   public:
+16535:     explicit invalid_argument(const string& __arg) ;
+16535: 
+16535:     explicit invalid_argument(const char*) ;
+16535: 
+16535:     virtual ~invalid_argument() noexcept;
+16535:   };
+16535: 
+16535: 
+16535: 
+16535:   class length_error : public logic_error
+16535:   {
+16535:   public:
+16535:     explicit length_error(const string& __arg) ;
+16535: 
+16535:     explicit length_error(const char*) ;
+16535: 
+16535:     virtual ~length_error() noexcept;
+16535:   };
+16535: 
+16535: 
+16535: 
+16535:   class out_of_range : public logic_error
+16535:   {
+16535:   public:
+16535:     explicit out_of_range(const string& __arg) ;
+16535: 
+16535:     explicit out_of_range(const char*) ;
+16535: 
+16535:     virtual ~out_of_range() noexcept;
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   class runtime_error : public exception
+16535:   {
+16535:     __cow_string _M_msg;
+16535: 
+16535:   public:
+16535: 
+16535:     explicit
+16535:     runtime_error(const string& __arg) ;
+16535: 
+16535: 
+16535:     explicit
+16535:     runtime_error(const char*) ;
+16535: 
+16535: 
+16535: 
+16535:     runtime_error(const runtime_error&) noexcept;
+16535:     runtime_error& operator=(const runtime_error&) noexcept;
+16535: 
+16535: 
+16535:     virtual ~runtime_error() noexcept;
+16535: 
+16535: 
+16535: 
+16535:     virtual const char*
+16535:     what() const noexcept;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   };
+16535: 
+16535: 
+16535:   class range_error : public runtime_error
+16535:   {
+16535:   public:
+16535:     explicit range_error(const string& __arg) ;
+16535: 
+16535:     explicit range_error(const char*) ;
+16535: 
+16535:     virtual ~range_error() noexcept;
+16535:   };
+16535: 
+16535: 
+16535:   class overflow_error : public runtime_error
+16535:   {
+16535:   public:
+16535:     explicit overflow_error(const string& __arg) ;
+16535: 
+16535:     explicit overflow_error(const char*) ;
+16535: 
+16535:     virtual ~overflow_error() noexcept;
+16535:   };
+16535: 
+16535: 
+16535:   class underflow_error : public runtime_error
+16535:   {
+16535:   public:
+16535:     explicit underflow_error(const string& __arg) ;
+16535: 
+16535:     explicit underflow_error(const char*) ;
+16535: 
+16535:     virtual ~underflow_error() noexcept;
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 42 "/usr/include/gmpxx.h" 2 3 4
+16535: # 1 "/usr/include/c++/8/cfloat" 1 3 4
+16535: # 39 "/usr/include/c++/8/cfloat" 3 4
+16535:        
+16535: # 40 "/usr/include/c++/8/cfloat" 3
+16535: 
+16535: 
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/float.h" 1 3 4
+16535: # 43 "/usr/include/c++/8/cfloat" 2 3
+16535: # 43 "/usr/include/gmpxx.h" 2 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/gmp.h" 1 3 4
+16535: # 35 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
+16535: # 1 "/usr/include/c++/8/cstdio" 1 3 4
+16535: # 39 "/usr/include/c++/8/cstdio" 3 4
+16535:        
+16535: # 40 "/usr/include/c++/8/cstdio" 3
+16535: # 36 "/usr/include/x86_64-linux-gnu/gmp.h" 2 3 4
+16535: # 55 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
+16535: # 56 "/usr/include/x86_64-linux-gnu/gmp.h" 2 3 4
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 1 3 4
+16535: # 34 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 3 4
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/syslimits.h" 1 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 1 3 4
+16535: # 194 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 3 4
+16535: # 1 "/usr/include/limits.h" 1 3 4
+16535: # 26 "/usr/include/limits.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 1 3 4
+16535: # 27 "/usr/include/limits.h" 2 3 4
+16535: # 183 "/usr/include/limits.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/posix1_lim.h" 1 3 4
+16535: # 27 "/usr/include/x86_64-linux-gnu/bits/posix1_lim.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
+16535: # 28 "/usr/include/x86_64-linux-gnu/bits/posix1_lim.h" 2 3 4
+16535: # 161 "/usr/include/x86_64-linux-gnu/bits/posix1_lim.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/local_lim.h" 1 3 4
+16535: # 38 "/usr/include/x86_64-linux-gnu/bits/local_lim.h" 3 4
+16535: # 1 "/usr/include/linux/limits.h" 1 3 4
+16535: # 39 "/usr/include/x86_64-linux-gnu/bits/local_lim.h" 2 3 4
+16535: # 162 "/usr/include/x86_64-linux-gnu/bits/posix1_lim.h" 2 3 4
+16535: # 184 "/usr/include/limits.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/posix2_lim.h" 1 3 4
+16535: # 188 "/usr/include/limits.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/xopen_lim.h" 1 3 4
+16535: # 64 "/usr/include/x86_64-linux-gnu/bits/xopen_lim.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/uio_lim.h" 1 3 4
+16535: # 65 "/usr/include/x86_64-linux-gnu/bits/xopen_lim.h" 2 3 4
+16535: # 192 "/usr/include/limits.h" 2 3 4
+16535: # 195 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 2 3 4
+16535: # 8 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/syslimits.h" 2 3 4
+16535: # 35 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 2 3 4
+16535: # 57 "/usr/include/x86_64-linux-gnu/gmp.h" 2 3 4
+16535: # 141 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
+16535: typedef unsigned long int mp_limb_t;
+16535: typedef long int mp_limb_signed_t;
+16535: 
+16535: 
+16535: typedef unsigned long int mp_bitcnt_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef struct
+16535: {
+16535:   int _mp_alloc;
+16535: 
+16535:   int _mp_size;
+16535: 
+16535: 
+16535:   mp_limb_t *_mp_d;
+16535: } __mpz_struct;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef __mpz_struct MP_INT;
+16535: typedef __mpz_struct mpz_t[1];
+16535: 
+16535: typedef mp_limb_t * mp_ptr;
+16535: typedef const mp_limb_t * mp_srcptr;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef long int mp_size_t;
+16535: typedef long int mp_exp_t;
+16535: 
+16535: 
+16535: typedef struct
+16535: {
+16535:   __mpz_struct _mp_num;
+16535:   __mpz_struct _mp_den;
+16535: } __mpq_struct;
+16535: 
+16535: typedef __mpq_struct MP_RAT;
+16535: typedef __mpq_struct mpq_t[1];
+16535: 
+16535: typedef struct
+16535: {
+16535:   int _mp_prec;
+16535: 
+16535: 
+16535: 
+16535:   int _mp_size;
+16535: 
+16535: 
+16535:   mp_exp_t _mp_exp;
+16535:   mp_limb_t *_mp_d;
+16535: } __mpf_struct;
+16535: 
+16535: 
+16535: typedef __mpf_struct mpf_t[1];
+16535: 
+16535: 
+16535: typedef enum
+16535: {
+16535:   GMP_RAND_ALG_DEFAULT = 0,
+16535:   GMP_RAND_ALG_LC = GMP_RAND_ALG_DEFAULT
+16535: } gmp_randalg_t;
+16535: 
+16535: 
+16535: typedef struct
+16535: {
+16535:   mpz_t _mp_seed;
+16535:   gmp_randalg_t _mp_alg;
+16535:   union {
+16535:     void *_mp_lc;
+16535:   } _mp_algdata;
+16535: } __gmp_randstate_struct;
+16535: typedef __gmp_randstate_struct gmp_randstate_t[1];
+16535: 
+16535: 
+16535: 
+16535: typedef const __mpz_struct *mpz_srcptr;
+16535: typedef __mpz_struct *mpz_ptr;
+16535: typedef const __mpf_struct *mpf_srcptr;
+16535: typedef __mpf_struct *mpf_ptr;
+16535: typedef const __mpq_struct *mpq_srcptr;
+16535: typedef __mpq_struct *mpq_ptr;
+16535: # 468 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
+16535: extern "C" {
+16535: using std::FILE;
+16535: 
+16535: 
+16535: 
+16535:  void __gmp_set_memory_functions (void *(*) (size_t),
+16535:           void *(*) (void *, size_t, size_t),
+16535:           void (*) (void *, size_t)) throw ();
+16535: 
+16535: 
+16535:  void __gmp_get_memory_functions (void *(**) (size_t),
+16535:           void *(**) (void *, size_t, size_t),
+16535:           void (**) (void *, size_t)) throw ();
+16535: 
+16535: 
+16535:  extern const int __gmp_bits_per_limb;
+16535: 
+16535: 
+16535:  extern int __gmp_errno;
+16535: 
+16535: 
+16535:  extern const char * const __gmp_version;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  void __gmp_randinit (gmp_randstate_t, gmp_randalg_t, ...);
+16535: 
+16535: 
+16535:  void __gmp_randinit_default (gmp_randstate_t);
+16535: 
+16535: 
+16535:  void __gmp_randinit_lc_2exp (gmp_randstate_t, mpz_srcptr, unsigned long int, mp_bitcnt_t);
+16535: 
+16535: 
+16535:  int __gmp_randinit_lc_2exp_size (gmp_randstate_t, mp_bitcnt_t);
+16535: 
+16535: 
+16535:  void __gmp_randinit_mt (gmp_randstate_t);
+16535: 
+16535: 
+16535:  void __gmp_randinit_set (gmp_randstate_t, const __gmp_randstate_struct *);
+16535: 
+16535: 
+16535:  void __gmp_randseed (gmp_randstate_t, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmp_randseed_ui (gmp_randstate_t, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmp_randclear (gmp_randstate_t);
+16535: 
+16535: 
+16535:  unsigned long __gmp_urandomb_ui (gmp_randstate_t, unsigned long);
+16535: 
+16535: 
+16535:  unsigned long __gmp_urandomm_ui (gmp_randstate_t, unsigned long);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  int __gmp_asprintf (char **, const char *, ...);
+16535: 
+16535: 
+16535: 
+16535:  int __gmp_fprintf (FILE *, const char *, ...);
+16535: # 550 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
+16535:  int __gmp_printf (const char *, ...);
+16535: 
+16535: 
+16535:  int __gmp_snprintf (char *, size_t, const char *, ...);
+16535: 
+16535: 
+16535:  int __gmp_sprintf (char *, const char *, ...);
+16535: # 588 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
+16535:  int __gmp_fscanf (FILE *, const char *, ...);
+16535: 
+16535: 
+16535: 
+16535:  int __gmp_scanf (const char *, ...);
+16535: 
+16535: 
+16535:  int __gmp_sscanf (const char *, const char *, ...);
+16535: # 617 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
+16535:  void *__gmpz_realloc (mpz_ptr, mp_size_t);
+16535: 
+16535: 
+16535: 
+16535:  void __gmpz_abs (mpz_ptr, mpz_srcptr);
+16535: 
+16535: 
+16535: 
+16535:  void __gmpz_add (mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_add_ui (mpz_ptr, mpz_srcptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_addmul (mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_addmul_ui (mpz_ptr, mpz_srcptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_and (mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_array_init (mpz_ptr, mp_size_t, mp_size_t);
+16535: 
+16535: 
+16535:  void __gmpz_bin_ui (mpz_ptr, mpz_srcptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_bin_uiui (mpz_ptr, unsigned long int, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_cdiv_q (mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_cdiv_q_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t);
+16535: 
+16535: 
+16535:  unsigned long int __gmpz_cdiv_q_ui (mpz_ptr, mpz_srcptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_cdiv_qr (mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  unsigned long int __gmpz_cdiv_qr_ui (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_cdiv_r (mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_cdiv_r_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t);
+16535: 
+16535: 
+16535:  unsigned long int __gmpz_cdiv_r_ui (mpz_ptr, mpz_srcptr, unsigned long int);
+16535: 
+16535: 
+16535:  unsigned long int __gmpz_cdiv_ui (mpz_srcptr, unsigned long int) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpz_clear (mpz_ptr);
+16535: 
+16535: 
+16535:  void __gmpz_clears (mpz_ptr, ...);
+16535: 
+16535: 
+16535:  void __gmpz_clrbit (mpz_ptr, mp_bitcnt_t);
+16535: 
+16535: 
+16535:  int __gmpz_cmp (mpz_srcptr, mpz_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpz_cmp_d (mpz_srcptr, double) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpz_cmp_si (mpz_srcptr, signed long int) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpz_cmp_ui (mpz_srcptr, unsigned long int) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpz_cmpabs (mpz_srcptr, mpz_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpz_cmpabs_d (mpz_srcptr, double) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpz_cmpabs_ui (mpz_srcptr, unsigned long int) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpz_com (mpz_ptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_combit (mpz_ptr, mp_bitcnt_t);
+16535: 
+16535: 
+16535:  int __gmpz_congruent_p (mpz_srcptr, mpz_srcptr, mpz_srcptr) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpz_congruent_2exp_p (mpz_srcptr, mpz_srcptr, mp_bitcnt_t) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpz_congruent_ui_p (mpz_srcptr, unsigned long, unsigned long) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpz_divexact (mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_divexact_ui (mpz_ptr, mpz_srcptr, unsigned long);
+16535: 
+16535: 
+16535:  int __gmpz_divisible_p (mpz_srcptr, mpz_srcptr) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpz_divisible_ui_p (mpz_srcptr, unsigned long) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpz_divisible_2exp_p (mpz_srcptr, mp_bitcnt_t) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpz_dump (mpz_srcptr);
+16535: 
+16535: 
+16535:  void *__gmpz_export (void *, size_t *, int, size_t, int, size_t, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_fac_ui (mpz_ptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_2fac_ui (mpz_ptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_mfac_uiui (mpz_ptr, unsigned long int, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_primorial_ui (mpz_ptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_fdiv_q (mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_fdiv_q_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t);
+16535: 
+16535: 
+16535:  unsigned long int __gmpz_fdiv_q_ui (mpz_ptr, mpz_srcptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_fdiv_qr (mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  unsigned long int __gmpz_fdiv_qr_ui (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_fdiv_r (mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_fdiv_r_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t);
+16535: 
+16535: 
+16535:  unsigned long int __gmpz_fdiv_r_ui (mpz_ptr, mpz_srcptr, unsigned long int);
+16535: 
+16535: 
+16535:  unsigned long int __gmpz_fdiv_ui (mpz_srcptr, unsigned long int) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpz_fib_ui (mpz_ptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_fib2_ui (mpz_ptr, mpz_ptr, unsigned long int);
+16535: 
+16535: 
+16535:  int __gmpz_fits_sint_p (mpz_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpz_fits_slong_p (mpz_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpz_fits_sshort_p (mpz_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: 
+16535:  int __gmpz_fits_uint_p (mpz_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  int __gmpz_fits_ulong_p (mpz_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  int __gmpz_fits_ushort_p (mpz_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: 
+16535:  void __gmpz_gcd (mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  unsigned long int __gmpz_gcd_ui (mpz_ptr, mpz_srcptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_gcdext (mpz_ptr, mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  double __gmpz_get_d (mpz_srcptr) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  double __gmpz_get_d_2exp (signed long int *, mpz_srcptr);
+16535: 
+16535: 
+16535:  long int __gmpz_get_si (mpz_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  char *__gmpz_get_str (char *, int, mpz_srcptr);
+16535: 
+16535: 
+16535: 
+16535:  unsigned long int __gmpz_get_ui (mpz_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  mp_limb_t __gmpz_getlimbn (mpz_srcptr, mp_size_t) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: 
+16535:  mp_bitcnt_t __gmpz_hamdist (mpz_srcptr, mpz_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpz_import (mpz_ptr, size_t, int, size_t, int, size_t, const void *);
+16535: 
+16535: 
+16535:  void __gmpz_init (mpz_ptr);
+16535: 
+16535: 
+16535:  void __gmpz_init2 (mpz_ptr, mp_bitcnt_t);
+16535: 
+16535: 
+16535:  void __gmpz_inits (mpz_ptr, ...);
+16535: 
+16535: 
+16535:  void __gmpz_init_set (mpz_ptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_init_set_d (mpz_ptr, double);
+16535: 
+16535: 
+16535:  void __gmpz_init_set_si (mpz_ptr, signed long int);
+16535: 
+16535: 
+16535:  int __gmpz_init_set_str (mpz_ptr, const char *, int);
+16535: 
+16535: 
+16535:  void __gmpz_init_set_ui (mpz_ptr, unsigned long int);
+16535: 
+16535: 
+16535: 
+16535:  size_t __gmpz_inp_raw (mpz_ptr, FILE *);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  size_t __gmpz_inp_str (mpz_ptr, FILE *, int);
+16535: 
+16535: 
+16535: 
+16535:  int __gmpz_invert (mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_ior (mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  int __gmpz_jacobi (mpz_srcptr, mpz_srcptr) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  int __gmpz_kronecker_si (mpz_srcptr, long) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpz_kronecker_ui (mpz_srcptr, unsigned long) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpz_si_kronecker (long, mpz_srcptr) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpz_ui_kronecker (unsigned long, mpz_srcptr) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpz_lcm (mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_lcm_ui (mpz_ptr, mpz_srcptr, unsigned long);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  void __gmpz_lucnum_ui (mpz_ptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_lucnum2_ui (mpz_ptr, mpz_ptr, unsigned long int);
+16535: 
+16535: 
+16535:  int __gmpz_millerrabin (mpz_srcptr, int) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpz_mod (mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  void __gmpz_mul (mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_mul_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t);
+16535: 
+16535: 
+16535:  void __gmpz_mul_si (mpz_ptr, mpz_srcptr, long int);
+16535: 
+16535: 
+16535:  void __gmpz_mul_ui (mpz_ptr, mpz_srcptr, unsigned long int);
+16535: 
+16535: 
+16535: 
+16535:  void __gmpz_neg (mpz_ptr, mpz_srcptr);
+16535: 
+16535: 
+16535: 
+16535:  void __gmpz_nextprime (mpz_ptr, mpz_srcptr);
+16535: 
+16535: 
+16535: 
+16535:  size_t __gmpz_out_raw (FILE *, mpz_srcptr);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  size_t __gmpz_out_str (FILE *, int, mpz_srcptr);
+16535: 
+16535: 
+16535: 
+16535:  int __gmpz_perfect_power_p (mpz_srcptr) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: 
+16535:  int __gmpz_perfect_square_p (mpz_srcptr) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  mp_bitcnt_t __gmpz_popcount (mpz_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: 
+16535:  void __gmpz_pow_ui (mpz_ptr, mpz_srcptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_powm (mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_powm_sec (mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_powm_ui (mpz_ptr, mpz_srcptr, unsigned long int, mpz_srcptr);
+16535: 
+16535: 
+16535:  int __gmpz_probab_prime_p (mpz_srcptr, int) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpz_random (mpz_ptr, mp_size_t);
+16535: 
+16535: 
+16535:  void __gmpz_random2 (mpz_ptr, mp_size_t);
+16535: 
+16535: 
+16535:  void __gmpz_realloc2 (mpz_ptr, mp_bitcnt_t);
+16535: 
+16535: 
+16535:  mp_bitcnt_t __gmpz_remove (mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  int __gmpz_root (mpz_ptr, mpz_srcptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_rootrem (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_rrandomb (mpz_ptr, gmp_randstate_t, mp_bitcnt_t);
+16535: 
+16535: 
+16535:  mp_bitcnt_t __gmpz_scan0 (mpz_srcptr, mp_bitcnt_t) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  mp_bitcnt_t __gmpz_scan1 (mpz_srcptr, mp_bitcnt_t) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpz_set (mpz_ptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_set_d (mpz_ptr, double);
+16535: 
+16535: 
+16535:  void __gmpz_set_f (mpz_ptr, mpf_srcptr);
+16535: 
+16535: 
+16535: 
+16535:  void __gmpz_set_q (mpz_ptr, mpq_srcptr);
+16535: 
+16535: 
+16535: 
+16535:  void __gmpz_set_si (mpz_ptr, signed long int);
+16535: 
+16535: 
+16535:  int __gmpz_set_str (mpz_ptr, const char *, int);
+16535: 
+16535: 
+16535:  void __gmpz_set_ui (mpz_ptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_setbit (mpz_ptr, mp_bitcnt_t);
+16535: 
+16535: 
+16535: 
+16535:  size_t __gmpz_size (mpz_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: 
+16535:  size_t __gmpz_sizeinbase (mpz_srcptr, int) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpz_sqrt (mpz_ptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_sqrtrem (mpz_ptr, mpz_ptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_sub (mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_sub_ui (mpz_ptr, mpz_srcptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_ui_sub (mpz_ptr, unsigned long int, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_submul (mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_submul_ui (mpz_ptr, mpz_srcptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_swap (mpz_ptr, mpz_ptr) throw ();
+16535: 
+16535: 
+16535:  unsigned long int __gmpz_tdiv_ui (mpz_srcptr, unsigned long int) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpz_tdiv_q (mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_tdiv_q_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t);
+16535: 
+16535: 
+16535:  unsigned long int __gmpz_tdiv_q_ui (mpz_ptr, mpz_srcptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_tdiv_qr (mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  unsigned long int __gmpz_tdiv_qr_ui (mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_tdiv_r (mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpz_tdiv_r_2exp (mpz_ptr, mpz_srcptr, mp_bitcnt_t);
+16535: 
+16535: 
+16535:  unsigned long int __gmpz_tdiv_r_ui (mpz_ptr, mpz_srcptr, unsigned long int);
+16535: 
+16535: 
+16535:  int __gmpz_tstbit (mpz_srcptr, mp_bitcnt_t) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpz_ui_pow_ui (mpz_ptr, unsigned long int, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpz_urandomb (mpz_ptr, gmp_randstate_t, mp_bitcnt_t);
+16535: 
+16535: 
+16535:  void __gmpz_urandomm (mpz_ptr, gmp_randstate_t, mpz_srcptr);
+16535: 
+16535: 
+16535: 
+16535:  void __gmpz_xor (mpz_ptr, mpz_srcptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  mp_srcptr __gmpz_limbs_read (mpz_srcptr);
+16535: 
+16535: 
+16535:  mp_ptr __gmpz_limbs_write (mpz_ptr, mp_size_t);
+16535: 
+16535: 
+16535:  mp_ptr __gmpz_limbs_modify (mpz_ptr, mp_size_t);
+16535: 
+16535: 
+16535:  void __gmpz_limbs_finish (mpz_ptr, mp_size_t);
+16535: 
+16535: 
+16535:  mpz_srcptr __gmpz_roinit_n (mpz_ptr, mp_srcptr, mp_size_t);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  void __gmpq_abs (mpq_ptr, mpq_srcptr);
+16535: 
+16535: 
+16535: 
+16535:  void __gmpq_add (mpq_ptr, mpq_srcptr, mpq_srcptr);
+16535: 
+16535: 
+16535:  void __gmpq_canonicalize (mpq_ptr);
+16535: 
+16535: 
+16535:  void __gmpq_clear (mpq_ptr);
+16535: 
+16535: 
+16535:  void __gmpq_clears (mpq_ptr, ...);
+16535: 
+16535: 
+16535:  int __gmpq_cmp (mpq_srcptr, mpq_srcptr) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpq_cmp_si (mpq_srcptr, long, unsigned long) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpq_cmp_ui (mpq_srcptr, unsigned long int, unsigned long int) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpq_cmp_z (mpq_srcptr, mpz_srcptr) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpq_div (mpq_ptr, mpq_srcptr, mpq_srcptr);
+16535: 
+16535: 
+16535:  void __gmpq_div_2exp (mpq_ptr, mpq_srcptr, mp_bitcnt_t);
+16535: 
+16535: 
+16535:  int __gmpq_equal (mpq_srcptr, mpq_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpq_get_num (mpz_ptr, mpq_srcptr);
+16535: 
+16535: 
+16535:  void __gmpq_get_den (mpz_ptr, mpq_srcptr);
+16535: 
+16535: 
+16535:  double __gmpq_get_d (mpq_srcptr) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  char *__gmpq_get_str (char *, int, mpq_srcptr);
+16535: 
+16535: 
+16535:  void __gmpq_init (mpq_ptr);
+16535: 
+16535: 
+16535:  void __gmpq_inits (mpq_ptr, ...);
+16535: 
+16535: 
+16535: 
+16535:  size_t __gmpq_inp_str (mpq_ptr, FILE *, int);
+16535: 
+16535: 
+16535: 
+16535:  void __gmpq_inv (mpq_ptr, mpq_srcptr);
+16535: 
+16535: 
+16535:  void __gmpq_mul (mpq_ptr, mpq_srcptr, mpq_srcptr);
+16535: 
+16535: 
+16535:  void __gmpq_mul_2exp (mpq_ptr, mpq_srcptr, mp_bitcnt_t);
+16535: 
+16535: 
+16535: 
+16535:  void __gmpq_neg (mpq_ptr, mpq_srcptr);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  size_t __gmpq_out_str (FILE *, int, mpq_srcptr);
+16535: 
+16535: 
+16535: 
+16535:  void __gmpq_set (mpq_ptr, mpq_srcptr);
+16535: 
+16535: 
+16535:  void __gmpq_set_d (mpq_ptr, double);
+16535: 
+16535: 
+16535:  void __gmpq_set_den (mpq_ptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpq_set_f (mpq_ptr, mpf_srcptr);
+16535: 
+16535: 
+16535:  void __gmpq_set_num (mpq_ptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpq_set_si (mpq_ptr, signed long int, unsigned long int);
+16535: 
+16535: 
+16535:  int __gmpq_set_str (mpq_ptr, const char *, int);
+16535: 
+16535: 
+16535:  void __gmpq_set_ui (mpq_ptr, unsigned long int, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpq_set_z (mpq_ptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  void __gmpq_sub (mpq_ptr, mpq_srcptr, mpq_srcptr);
+16535: 
+16535: 
+16535:  void __gmpq_swap (mpq_ptr, mpq_ptr) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  void __gmpf_abs (mpf_ptr, mpf_srcptr);
+16535: 
+16535: 
+16535:  void __gmpf_add (mpf_ptr, mpf_srcptr, mpf_srcptr);
+16535: 
+16535: 
+16535:  void __gmpf_add_ui (mpf_ptr, mpf_srcptr, unsigned long int);
+16535: 
+16535:  void __gmpf_ceil (mpf_ptr, mpf_srcptr);
+16535: 
+16535: 
+16535:  void __gmpf_clear (mpf_ptr);
+16535: 
+16535: 
+16535:  void __gmpf_clears (mpf_ptr, ...);
+16535: 
+16535: 
+16535:  int __gmpf_cmp (mpf_srcptr, mpf_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpf_cmp_z (mpf_srcptr, mpz_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpf_cmp_d (mpf_srcptr, double) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpf_cmp_si (mpf_srcptr, signed long int) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpf_cmp_ui (mpf_srcptr, unsigned long int) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpf_div (mpf_ptr, mpf_srcptr, mpf_srcptr);
+16535: 
+16535: 
+16535:  void __gmpf_div_2exp (mpf_ptr, mpf_srcptr, mp_bitcnt_t);
+16535: 
+16535: 
+16535:  void __gmpf_div_ui (mpf_ptr, mpf_srcptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpf_dump (mpf_srcptr);
+16535: 
+16535: 
+16535:  int __gmpf_eq (mpf_srcptr, mpf_srcptr, mp_bitcnt_t) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpf_fits_sint_p (mpf_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpf_fits_slong_p (mpf_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpf_fits_sshort_p (mpf_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpf_fits_uint_p (mpf_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpf_fits_ulong_p (mpf_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpf_fits_ushort_p (mpf_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpf_floor (mpf_ptr, mpf_srcptr);
+16535: 
+16535: 
+16535:  double __gmpf_get_d (mpf_srcptr) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  double __gmpf_get_d_2exp (signed long int *, mpf_srcptr);
+16535: 
+16535: 
+16535:  mp_bitcnt_t __gmpf_get_default_prec (void) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  mp_bitcnt_t __gmpf_get_prec (mpf_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  long __gmpf_get_si (mpf_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  char *__gmpf_get_str (char *, mp_exp_t *, int, size_t, mpf_srcptr);
+16535: 
+16535: 
+16535:  unsigned long __gmpf_get_ui (mpf_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpf_init (mpf_ptr);
+16535: 
+16535: 
+16535:  void __gmpf_init2 (mpf_ptr, mp_bitcnt_t);
+16535: 
+16535: 
+16535:  void __gmpf_inits (mpf_ptr, ...);
+16535: 
+16535: 
+16535:  void __gmpf_init_set (mpf_ptr, mpf_srcptr);
+16535: 
+16535: 
+16535:  void __gmpf_init_set_d (mpf_ptr, double);
+16535: 
+16535: 
+16535:  void __gmpf_init_set_si (mpf_ptr, signed long int);
+16535: 
+16535: 
+16535:  int __gmpf_init_set_str (mpf_ptr, const char *, int);
+16535: 
+16535: 
+16535:  void __gmpf_init_set_ui (mpf_ptr, unsigned long int);
+16535: 
+16535: 
+16535: 
+16535:  size_t __gmpf_inp_str (mpf_ptr, FILE *, int);
+16535: 
+16535: 
+16535: 
+16535:  int __gmpf_integer_p (mpf_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpf_mul (mpf_ptr, mpf_srcptr, mpf_srcptr);
+16535: 
+16535: 
+16535:  void __gmpf_mul_2exp (mpf_ptr, mpf_srcptr, mp_bitcnt_t);
+16535: 
+16535: 
+16535:  void __gmpf_mul_ui (mpf_ptr, mpf_srcptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpf_neg (mpf_ptr, mpf_srcptr);
+16535: 
+16535: 
+16535: 
+16535:  size_t __gmpf_out_str (FILE *, int, size_t, mpf_srcptr);
+16535: 
+16535: 
+16535: 
+16535:  void __gmpf_pow_ui (mpf_ptr, mpf_srcptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpf_random2 (mpf_ptr, mp_size_t, mp_exp_t);
+16535: 
+16535: 
+16535:  void __gmpf_reldiff (mpf_ptr, mpf_srcptr, mpf_srcptr);
+16535: 
+16535: 
+16535:  void __gmpf_set (mpf_ptr, mpf_srcptr);
+16535: 
+16535: 
+16535:  void __gmpf_set_d (mpf_ptr, double);
+16535: 
+16535: 
+16535:  void __gmpf_set_default_prec (mp_bitcnt_t) throw ();
+16535: 
+16535: 
+16535:  void __gmpf_set_prec (mpf_ptr, mp_bitcnt_t);
+16535: 
+16535: 
+16535:  void __gmpf_set_prec_raw (mpf_ptr, mp_bitcnt_t) throw ();
+16535: 
+16535: 
+16535:  void __gmpf_set_q (mpf_ptr, mpq_srcptr);
+16535: 
+16535: 
+16535:  void __gmpf_set_si (mpf_ptr, signed long int);
+16535: 
+16535: 
+16535:  int __gmpf_set_str (mpf_ptr, const char *, int);
+16535: 
+16535: 
+16535:  void __gmpf_set_ui (mpf_ptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpf_set_z (mpf_ptr, mpz_srcptr);
+16535: 
+16535: 
+16535:  size_t __gmpf_size (mpf_srcptr) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpf_sqrt (mpf_ptr, mpf_srcptr);
+16535: 
+16535: 
+16535:  void __gmpf_sqrt_ui (mpf_ptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpf_sub (mpf_ptr, mpf_srcptr, mpf_srcptr);
+16535: 
+16535: 
+16535:  void __gmpf_sub_ui (mpf_ptr, mpf_srcptr, unsigned long int);
+16535: 
+16535: 
+16535:  void __gmpf_swap (mpf_ptr, mpf_ptr) throw ();
+16535: 
+16535: 
+16535:  void __gmpf_trunc (mpf_ptr, mpf_srcptr);
+16535: 
+16535: 
+16535:  void __gmpf_ui_div (mpf_ptr, unsigned long int, mpf_srcptr);
+16535: 
+16535: 
+16535:  void __gmpf_ui_sub (mpf_ptr, unsigned long int, mpf_srcptr);
+16535: 
+16535: 
+16535:  void __gmpf_urandomb (mpf_t, gmp_randstate_t, mp_bitcnt_t);
+16535: # 1461 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
+16535:  mp_limb_t __gmpn_add (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_add_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t) throw ();
+16535: 
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_add_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_addmul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
+16535: 
+16535: 
+16535: 
+16535:  int __gmpn_cmp (mp_srcptr, mp_srcptr, mp_size_t) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  int __gmpn_zero_p (mp_srcptr, mp_size_t) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: 
+16535:  void __gmpn_divexact_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_divexact_by3c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_divrem (mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr, mp_size_t);
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_divrem_1 (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t);
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_divrem_2 (mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr);
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_div_qr_1 (mp_ptr, mp_limb_t *, mp_srcptr, mp_size_t, mp_limb_t);
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_div_qr_2 (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_srcptr);
+16535: 
+16535: 
+16535:  mp_size_t __gmpn_gcd (mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t);
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_gcd_1 (mp_srcptr, mp_size_t, mp_limb_t) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_gcdext_1 (mp_limb_signed_t *, mp_limb_signed_t *, mp_limb_t, mp_limb_t);
+16535: 
+16535: 
+16535:  mp_size_t __gmpn_gcdext (mp_ptr, mp_ptr, mp_size_t *, mp_ptr, mp_size_t, mp_ptr, mp_size_t);
+16535: 
+16535: 
+16535:  size_t __gmpn_get_str (unsigned char *, int, mp_ptr, mp_size_t);
+16535: 
+16535: 
+16535:  mp_bitcnt_t __gmpn_hamdist (mp_srcptr, mp_srcptr, mp_size_t) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_lshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int);
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_mod_1 (mp_srcptr, mp_size_t, mp_limb_t) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_mul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
+16535: 
+16535: 
+16535:  void __gmpn_mul_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
+16535: 
+16535: 
+16535:  void __gmpn_sqr (mp_ptr, mp_srcptr, mp_size_t);
+16535: 
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_neg (mp_ptr, mp_srcptr, mp_size_t);
+16535: 
+16535: 
+16535: 
+16535:  void __gmpn_com (mp_ptr, mp_srcptr, mp_size_t);
+16535: 
+16535: 
+16535:  int __gmpn_perfect_square_p (mp_srcptr, mp_size_t) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpn_perfect_power_p (mp_srcptr, mp_size_t) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  mp_bitcnt_t __gmpn_popcount (mp_srcptr, mp_size_t) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  mp_size_t __gmpn_pow_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr);
+16535: 
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_preinv_mod_1 (mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpn_random (mp_ptr, mp_size_t);
+16535: 
+16535: 
+16535:  void __gmpn_random2 (mp_ptr, mp_size_t);
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_rshift (mp_ptr, mp_srcptr, mp_size_t, unsigned int);
+16535: 
+16535: 
+16535:  mp_bitcnt_t __gmpn_scan0 (mp_srcptr, mp_bitcnt_t) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  mp_bitcnt_t __gmpn_scan1 (mp_srcptr, mp_bitcnt_t) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  mp_size_t __gmpn_set_str (mp_ptr, const unsigned char *, size_t, int);
+16535: 
+16535: 
+16535:  size_t __gmpn_sizeinbase (mp_srcptr, mp_size_t, int);
+16535: 
+16535: 
+16535:  mp_size_t __gmpn_sqrtrem (mp_ptr, mp_ptr, mp_srcptr, mp_size_t);
+16535: 
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_sub (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_sub_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t) throw ();
+16535: 
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_sub_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_submul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
+16535: 
+16535: 
+16535:  void __gmpn_tdiv_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
+16535: 
+16535: 
+16535:  void __gmpn_and_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
+16535: 
+16535:  void __gmpn_andn_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
+16535: 
+16535:  void __gmpn_nand_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
+16535: 
+16535:  void __gmpn_ior_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
+16535: 
+16535:  void __gmpn_iorn_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
+16535: 
+16535:  void __gmpn_nior_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
+16535: 
+16535:  void __gmpn_xor_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
+16535: 
+16535:  void __gmpn_xnor_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
+16535: 
+16535: 
+16535:  void __gmpn_copyi (mp_ptr, mp_srcptr, mp_size_t);
+16535: 
+16535:  void __gmpn_copyd (mp_ptr, mp_srcptr, mp_size_t);
+16535: 
+16535:  void __gmpn_zero (mp_ptr, mp_size_t);
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_cnd_add_n (mp_limb_t, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
+16535: 
+16535:  mp_limb_t __gmpn_cnd_sub_n (mp_limb_t, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_sec_add_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr);
+16535: 
+16535:  mp_size_t __gmpn_sec_add_1_itch (mp_size_t) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_sec_sub_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_ptr);
+16535: 
+16535:  mp_size_t __gmpn_sec_sub_1_itch (mp_size_t) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpn_cnd_swap (mp_limb_t, volatile mp_limb_t *, volatile mp_limb_t *, mp_size_t);
+16535: 
+16535: 
+16535:  void __gmpn_sec_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr);
+16535: 
+16535:  mp_size_t __gmpn_sec_mul_itch (mp_size_t, mp_size_t) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpn_sec_sqr (mp_ptr, mp_srcptr, mp_size_t, mp_ptr);
+16535: 
+16535:  mp_size_t __gmpn_sec_sqr_itch (mp_size_t) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpn_sec_powm (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_bitcnt_t, mp_srcptr, mp_size_t, mp_ptr);
+16535: 
+16535:  mp_size_t __gmpn_sec_powm_itch (mp_size_t, mp_bitcnt_t, mp_size_t) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  void __gmpn_sec_tabselect (volatile mp_limb_t *, volatile const mp_limb_t *, mp_size_t, mp_size_t, mp_size_t);
+16535: 
+16535: 
+16535:  mp_limb_t __gmpn_sec_div_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr);
+16535: 
+16535:  mp_size_t __gmpn_sec_div_qr_itch (mp_size_t, mp_size_t) __attribute__ ((__pure__));
+16535: 
+16535:  void __gmpn_sec_div_r (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_ptr);
+16535: 
+16535:  mp_size_t __gmpn_sec_div_r_itch (mp_size_t, mp_size_t) __attribute__ ((__pure__));
+16535: 
+16535: 
+16535:  int __gmpn_sec_invert (mp_ptr, mp_ptr, mp_srcptr, mp_size_t, mp_bitcnt_t, mp_ptr);
+16535: 
+16535:  mp_size_t __gmpn_sec_invert_itch (mp_size_t) __attribute__ ((__pure__));
+16535: # 1707 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
+16535: extern __inline__ __attribute__ ((__gnu_inline__)) void
+16535: __gmpz_abs (mpz_ptr __gmp_w, mpz_srcptr __gmp_u)
+16535: {
+16535:   if (__gmp_w != __gmp_u)
+16535:     __gmpz_set (__gmp_w, __gmp_u);
+16535:   __gmp_w->_mp_size = ((__gmp_w->_mp_size) >= 0 ? (__gmp_w->_mp_size) : -(__gmp_w->_mp_size));
+16535: }
+16535: # 1731 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
+16535: extern __inline__ __attribute__ ((__gnu_inline__))
+16535: 
+16535: int
+16535: __gmpz_fits_uint_p (mpz_srcptr __gmp_z) throw ()
+16535: {
+16535:   mp_size_t __gmp_n = __gmp_z->_mp_size; mp_ptr __gmp_p = __gmp_z->_mp_d; return (__gmp_n == 0 || (__gmp_n == 1 && __gmp_p[0] <= (0x7fffffff * 2U + 1U)));;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline__ __attribute__ ((__gnu_inline__))
+16535: 
+16535: int
+16535: __gmpz_fits_ulong_p (mpz_srcptr __gmp_z) throw ()
+16535: {
+16535:   mp_size_t __gmp_n = __gmp_z->_mp_size; mp_ptr __gmp_p = __gmp_z->_mp_d; return (__gmp_n == 0 || (__gmp_n == 1 && __gmp_p[0] <= (0x7fffffffffffffffL * 2UL + 1UL)));;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline__ __attribute__ ((__gnu_inline__))
+16535: 
+16535: int
+16535: __gmpz_fits_ushort_p (mpz_srcptr __gmp_z) throw ()
+16535: {
+16535:   mp_size_t __gmp_n = __gmp_z->_mp_size; mp_ptr __gmp_p = __gmp_z->_mp_d; return (__gmp_n == 0 || (__gmp_n == 1 && __gmp_p[0] <= (0x7fff * 2 + 1)));;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline__ __attribute__ ((__gnu_inline__))
+16535: 
+16535: unsigned long
+16535: __gmpz_get_ui (mpz_srcptr __gmp_z) throw ()
+16535: {
+16535:   mp_ptr __gmp_p = __gmp_z->_mp_d;
+16535:   mp_size_t __gmp_n = __gmp_z->_mp_size;
+16535:   mp_limb_t __gmp_l = __gmp_p[0];
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   return (__gmp_n != 0 ? __gmp_l : 0);
+16535: # 1787 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline__ __attribute__ ((__gnu_inline__))
+16535: 
+16535: mp_limb_t
+16535: __gmpz_getlimbn (mpz_srcptr __gmp_z, mp_size_t __gmp_n) throw ()
+16535: {
+16535:   mp_limb_t __gmp_result = 0;
+16535:   if (__builtin_expect ((__gmp_n >= 0 && __gmp_n < ((__gmp_z->_mp_size) >= 0 ? (__gmp_z->_mp_size) : -(__gmp_z->_mp_size))) != 0, 1))
+16535:     __gmp_result = __gmp_z->_mp_d[__gmp_n];
+16535:   return __gmp_result;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: extern __inline__ __attribute__ ((__gnu_inline__)) void
+16535: __gmpz_neg (mpz_ptr __gmp_w, mpz_srcptr __gmp_u)
+16535: {
+16535:   if (__gmp_w != __gmp_u)
+16535:     __gmpz_set (__gmp_w, __gmp_u);
+16535:   __gmp_w->_mp_size = - __gmp_w->_mp_size;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline__ __attribute__ ((__gnu_inline__))
+16535: 
+16535: int
+16535: __gmpz_perfect_square_p (mpz_srcptr __gmp_a)
+16535: {
+16535:   mp_size_t __gmp_asize;
+16535:   int __gmp_result;
+16535: 
+16535:   __gmp_asize = __gmp_a->_mp_size;
+16535:   __gmp_result = (__gmp_asize >= 0);
+16535:   if (__builtin_expect ((__gmp_asize > 0) != 0, 1))
+16535:     __gmp_result = __gmpn_perfect_square_p (__gmp_a->_mp_d, __gmp_asize);
+16535:   return __gmp_result;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline__ __attribute__ ((__gnu_inline__))
+16535: 
+16535: mp_bitcnt_t
+16535: __gmpz_popcount (mpz_srcptr __gmp_u) throw ()
+16535: {
+16535:   mp_size_t __gmp_usize;
+16535:   mp_bitcnt_t __gmp_result;
+16535: 
+16535:   __gmp_usize = __gmp_u->_mp_size;
+16535:   __gmp_result = (__gmp_usize < 0 ? (0x7fffffffffffffffL * 2UL + 1UL) : 0);
+16535:   if (__builtin_expect ((__gmp_usize > 0) != 0, 1))
+16535:     __gmp_result = __gmpn_popcount (__gmp_u->_mp_d, __gmp_usize);
+16535:   return __gmp_result;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline__ __attribute__ ((__gnu_inline__))
+16535: 
+16535: void
+16535: __gmpz_set_q (mpz_ptr __gmp_w, mpq_srcptr __gmp_u)
+16535: {
+16535:   __gmpz_tdiv_q (__gmp_w, (&((__gmp_u)->_mp_num)), (&((__gmp_u)->_mp_den)));
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline__ __attribute__ ((__gnu_inline__))
+16535: 
+16535: size_t
+16535: __gmpz_size (mpz_srcptr __gmp_z) throw ()
+16535: {
+16535:   return ((__gmp_z->_mp_size) >= 0 ? (__gmp_z->_mp_size) : -(__gmp_z->_mp_size));
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline__ __attribute__ ((__gnu_inline__)) void
+16535: __gmpq_abs (mpq_ptr __gmp_w, mpq_srcptr __gmp_u)
+16535: {
+16535:   if (__gmp_w != __gmp_u)
+16535:     __gmpq_set (__gmp_w, __gmp_u);
+16535:   __gmp_w->_mp_num._mp_size = ((__gmp_w->_mp_num._mp_size) >= 0 ? (__gmp_w->_mp_num._mp_size) : -(__gmp_w->_mp_num._mp_size));
+16535: }
+16535: 
+16535: 
+16535: 
+16535: extern __inline__ __attribute__ ((__gnu_inline__)) void
+16535: __gmpq_neg (mpq_ptr __gmp_w, mpq_srcptr __gmp_u)
+16535: {
+16535:   if (__gmp_w != __gmp_u)
+16535:     __gmpq_set (__gmp_w, __gmp_u);
+16535:   __gmp_w->_mp_num._mp_size = - __gmp_w->_mp_num._mp_size;
+16535: }
+16535: # 2129 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
+16535: extern __inline__ __attribute__ ((__gnu_inline__))
+16535: 
+16535: mp_limb_t
+16535: __gmpn_add (mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize)
+16535: {
+16535:   mp_limb_t __gmp_c;
+16535:   do { mp_size_t __gmp_i; mp_limb_t __gmp_x; __gmp_i = (__gmp_ysize); if (__gmp_i != 0) { if (__gmpn_add_n (__gmp_wp, __gmp_xp, __gmp_yp, __gmp_i)) { do { if (__gmp_i >= (__gmp_xsize)) { (__gmp_c) = 1; goto __gmp_done; } __gmp_x = (__gmp_xp)[__gmp_i]; } while ((((__gmp_wp)[__gmp_i++] = (__gmp_x + 1) & ((~ (static_cast<mp_limb_t> (0))) >> 0)) == 0)); } } if ((__gmp_wp) != (__gmp_xp)) do { mp_size_t __gmp_j; ; for (__gmp_j = (__gmp_i); __gmp_j < (__gmp_xsize); __gmp_j++) (__gmp_wp)[__gmp_j] = (__gmp_xp)[__gmp_j]; } while (0); (__gmp_c) = 0; __gmp_done: ; } while (0);
+16535:   return __gmp_c;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline__ __attribute__ ((__gnu_inline__))
+16535: 
+16535: mp_limb_t
+16535: __gmpn_add_1 (mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) throw ()
+16535: {
+16535:   mp_limb_t __gmp_c;
+16535:   do { mp_size_t __gmp_i; mp_limb_t __gmp_x, __gmp_r; __gmp_x = (__gmp_src)[0]; __gmp_r = __gmp_x + (__gmp_n); (__gmp_dst)[0] = __gmp_r; if (((__gmp_r) < ((__gmp_n)))) { (__gmp_c) = 1; for (__gmp_i = 1; __gmp_i < (__gmp_size);) { __gmp_x = (__gmp_src)[__gmp_i]; __gmp_r = __gmp_x + 1; (__gmp_dst)[__gmp_i] = __gmp_r; ++__gmp_i; if (!((__gmp_r) < (1))) { if ((__gmp_src) != (__gmp_dst)) do { mp_size_t __gmp_j; ; for (__gmp_j = (__gmp_i); __gmp_j < (__gmp_size); __gmp_j++) (__gmp_dst)[__gmp_j] = (__gmp_src)[__gmp_j]; } while (0); (__gmp_c) = 0; break; } } } else { if ((__gmp_src) != (__gmp_dst)) do { mp_size_t __gmp_j; ; for (__gmp_j = (1); __gmp_j < (__gmp_size); __gmp_j++) (__gmp_dst)[__gmp_j] = (__gmp_src)[__gmp_j]; } while (0); (__gmp_c) = 0; } } while (0);
+16535:   return __gmp_c;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline__ __attribute__ ((__gnu_inline__))
+16535: 
+16535: int
+16535: __gmpn_cmp (mp_srcptr __gmp_xp, mp_srcptr __gmp_yp, mp_size_t __gmp_size) throw ()
+16535: {
+16535:   int __gmp_result;
+16535:   do { mp_size_t __gmp_i; mp_limb_t __gmp_x, __gmp_y; (__gmp_result) = 0; __gmp_i = (__gmp_size); while (--__gmp_i >= 0) { __gmp_x = (__gmp_xp)[__gmp_i]; __gmp_y = (__gmp_yp)[__gmp_i]; if (__gmp_x != __gmp_y) { (__gmp_result) = (__gmp_x > __gmp_y ? 1 : -1); break; } } } while (0);
+16535:   return __gmp_result;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline__ __attribute__ ((__gnu_inline__))
+16535: 
+16535: int
+16535: __gmpn_zero_p (mp_srcptr __gmp_p, mp_size_t __gmp_n) throw ()
+16535: {
+16535: 
+16535:     do {
+16535:       if (__gmp_p[--__gmp_n] != 0)
+16535:  return 0;
+16535:     } while (__gmp_n != 0);
+16535:   return 1;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline__ __attribute__ ((__gnu_inline__))
+16535: 
+16535: mp_limb_t
+16535: __gmpn_sub (mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize)
+16535: {
+16535:   mp_limb_t __gmp_c;
+16535:   do { mp_size_t __gmp_i; mp_limb_t __gmp_x; __gmp_i = (__gmp_ysize); if (__gmp_i != 0) { if (__gmpn_sub_n (__gmp_wp, __gmp_xp, __gmp_yp, __gmp_i)) { do { if (__gmp_i >= (__gmp_xsize)) { (__gmp_c) = 1; goto __gmp_done; } __gmp_x = (__gmp_xp)[__gmp_i]; } while ((((__gmp_wp)[__gmp_i++] = (__gmp_x - 1) & ((~ (static_cast<mp_limb_t> (0))) >> 0)), __gmp_x == 0)); } } if ((__gmp_wp) != (__gmp_xp)) do { mp_size_t __gmp_j; ; for (__gmp_j = (__gmp_i); __gmp_j < (__gmp_xsize); __gmp_j++) (__gmp_wp)[__gmp_j] = (__gmp_xp)[__gmp_j]; } while (0); (__gmp_c) = 0; __gmp_done: ; } while (0);
+16535:   return __gmp_c;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline__ __attribute__ ((__gnu_inline__))
+16535: 
+16535: mp_limb_t
+16535: __gmpn_sub_1 (mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) throw ()
+16535: {
+16535:   mp_limb_t __gmp_c;
+16535:   do { mp_size_t __gmp_i; mp_limb_t __gmp_x, __gmp_r; __gmp_x = (__gmp_src)[0]; __gmp_r = __gmp_x - (__gmp_n); (__gmp_dst)[0] = __gmp_r; if (((__gmp_x) < ((__gmp_n)))) { (__gmp_c) = 1; for (__gmp_i = 1; __gmp_i < (__gmp_size);) { __gmp_x = (__gmp_src)[__gmp_i]; __gmp_r = __gmp_x - 1; (__gmp_dst)[__gmp_i] = __gmp_r; ++__gmp_i; if (!((__gmp_x) < (1))) { if ((__gmp_src) != (__gmp_dst)) do { mp_size_t __gmp_j; ; for (__gmp_j = (__gmp_i); __gmp_j < (__gmp_size); __gmp_j++) (__gmp_dst)[__gmp_j] = (__gmp_src)[__gmp_j]; } while (0); (__gmp_c) = 0; break; } } } else { if ((__gmp_src) != (__gmp_dst)) do { mp_size_t __gmp_j; ; for (__gmp_j = (1); __gmp_j < (__gmp_size); __gmp_j++) (__gmp_dst)[__gmp_j] = (__gmp_src)[__gmp_j]; } while (0); (__gmp_c) = 0; } } while (0);
+16535:   return __gmp_c;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __inline__ __attribute__ ((__gnu_inline__))
+16535: 
+16535: mp_limb_t
+16535: __gmpn_neg (mp_ptr __gmp_rp, mp_srcptr __gmp_up, mp_size_t __gmp_n)
+16535: {
+16535:   while (*__gmp_up == 0)
+16535:     {
+16535:       *__gmp_rp = 0;
+16535:       if (!--__gmp_n)
+16535:  return 0;
+16535:       ++__gmp_up; ++__gmp_rp;
+16535:     }
+16535: 
+16535:   *__gmp_rp = (- *__gmp_up) & ((~ (static_cast<mp_limb_t> (0))) >> 0);
+16535: 
+16535:   if (--__gmp_n)
+16535:     __gmpn_com (++__gmp_rp, ++__gmp_up, __gmp_n);
+16535: 
+16535:   return 1;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 2278 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
+16535:  std::ostream& operator<< (std::ostream &, mpz_srcptr);
+16535:  std::ostream& operator<< (std::ostream &, mpq_srcptr);
+16535:  std::ostream& operator<< (std::ostream &, mpf_srcptr);
+16535:  std::istream& operator>> (std::istream &, mpz_ptr);
+16535:  std::istream& operator>> (std::istream &, mpq_ptr);
+16535:  std::istream& operator>> (std::istream &, mpf_ptr);
+16535: # 2309 "/usr/include/x86_64-linux-gnu/gmp.h" 3 4
+16535: enum
+16535: {
+16535:   GMP_ERROR_NONE = 0,
+16535:   GMP_ERROR_UNSUPPORTED_ARGUMENT = 1,
+16535:   GMP_ERROR_DIVISION_BY_ZERO = 2,
+16535:   GMP_ERROR_SQRT_OF_NEGATIVE = 4,
+16535:   GMP_ERROR_INVALID_ARGUMENT = 8
+16535: };
+16535: # 44 "/usr/include/gmpxx.h" 2 3 4
+16535: # 85 "/usr/include/gmpxx.h" 3 4
+16535: inline void __mpz_set_ui_safe(mpz_ptr p, unsigned long l)
+16535: {
+16535:   p->_mp_size = (l != 0);
+16535:   p->_mp_d[0] = l & ((~ (static_cast<mp_limb_t> (0))) >> 0);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: inline void __mpz_set_si_safe(mpz_ptr p, long l)
+16535: {
+16535:   if(l < 0)
+16535:   {
+16535:     __mpz_set_ui_safe(p, -static_cast<unsigned long>(l));
+16535:     __gmpz_neg(p, p);
+16535:   }
+16535:   else
+16535:     __mpz_set_ui_safe(p, l);
+16535: 
+16535: }
+16535: # 151 "/usr/include/gmpxx.h" 3 4
+16535: inline unsigned long __gmpxx_abs_ui (signed long l)
+16535: {
+16535:   return l >= 0 ? static_cast<unsigned long>(l)
+16535:    : -static_cast<unsigned long>(l);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: struct __gmp_unary_plus
+16535: {
+16535:   static void eval(mpz_ptr z, mpz_srcptr w) { __gmpz_set(z, w); }
+16535:   static void eval(mpq_ptr q, mpq_srcptr r) { __gmpq_set(q, r); }
+16535:   static void eval(mpf_ptr f, mpf_srcptr g) { __gmpf_set(f, g); }
+16535: };
+16535: 
+16535: struct __gmp_unary_minus
+16535: {
+16535:   static void eval(mpz_ptr z, mpz_srcptr w) { __gmpz_neg(z, w); }
+16535:   static void eval(mpq_ptr q, mpq_srcptr r) { __gmpq_neg(q, r); }
+16535:   static void eval(mpf_ptr f, mpf_srcptr g) { __gmpf_neg(f, g); }
+16535: };
+16535: 
+16535: struct __gmp_unary_com
+16535: {
+16535:   static void eval(mpz_ptr z, mpz_srcptr w) { __gmpz_com(z, w); }
+16535: };
+16535: 
+16535: struct __gmp_binary_plus
+16535: {
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v)
+16535:   { __gmpz_add(z, w, v); }
+16535: 
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l)
+16535:   {
+16535: 
+16535: 
+16535:     if (__builtin_constant_p(l) && l == 0)
+16535:     {
+16535:       if (z != w) __gmpz_set(z, w);
+16535:     }
+16535:     else
+16535:       __gmpz_add_ui(z, w, l);
+16535:   }
+16535:   static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w)
+16535:   { eval(z, w, l); }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, signed long int l)
+16535:   {
+16535:     if (l >= 0)
+16535:       eval(z, w, static_cast<unsigned long>(l));
+16535:     else
+16535:       __gmpz_sub_ui(z, w, -static_cast<unsigned long>(l));
+16535:   }
+16535:   static void eval(mpz_ptr z, signed long int l, mpz_srcptr w)
+16535:   { eval(z, w, l); }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, double d)
+16535:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_add (z, w, temp); }
+16535:   static void eval(mpz_ptr z, double d, mpz_srcptr w)
+16535:   { eval(z, w, d); }
+16535: 
+16535:   static void eval(mpq_ptr q, mpq_srcptr r, mpq_srcptr s)
+16535:   { __gmpq_add(q, r, s); }
+16535: 
+16535:   static void eval(mpq_ptr q, mpq_srcptr r, unsigned long int l)
+16535:   {
+16535:     if (__builtin_constant_p(l) && l == 0)
+16535:     {
+16535:       if (q != r) __gmpq_set(q, r);
+16535:     }
+16535:     else
+16535:     {
+16535:       if (q == r)
+16535:         __gmpz_addmul_ui((&((q)->_mp_num)), (&((q)->_mp_den)), l);
+16535:       else
+16535:       {
+16535:         __gmpz_mul_ui((&((q)->_mp_num)), (&((r)->_mp_den)), l);
+16535:         __gmpz_add((&((q)->_mp_num)), (&((q)->_mp_num)), (&((r)->_mp_num)));
+16535:         __gmpz_set((&((q)->_mp_den)), (&((r)->_mp_den)));
+16535:       }
+16535:     }
+16535:   }
+16535:   static void eval(mpq_ptr q, unsigned long int l, mpq_srcptr r)
+16535:   { eval(q, r, l); }
+16535:   static inline void eval(mpq_ptr q, mpq_srcptr r, signed long int l);
+16535: 
+16535:   static void eval(mpq_ptr q, signed long int l, mpq_srcptr r)
+16535:   { eval(q, r, l); }
+16535:   static void eval(mpq_ptr q, mpq_srcptr r, double d)
+16535:   { mpq_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1 + (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpq_set_d (temp, d); __gmpq_add (q, r, temp); }
+16535:   static void eval(mpq_ptr q, double d, mpq_srcptr r)
+16535:   { eval(q, r, d); }
+16535: 
+16535:   static void eval(mpq_ptr q, mpq_srcptr r, mpz_srcptr z)
+16535:   {
+16535:     if (q == r)
+16535:       __gmpz_addmul((&((q)->_mp_num)), (&((q)->_mp_den)), z);
+16535:     else
+16535:     {
+16535:       __gmpz_mul((&((q)->_mp_num)), (&((r)->_mp_den)), z);
+16535:       __gmpz_add((&((q)->_mp_num)), (&((q)->_mp_num)), (&((r)->_mp_num)));
+16535:       __gmpz_set((&((q)->_mp_den)), (&((r)->_mp_den)));
+16535:     }
+16535:   }
+16535:   static void eval(mpq_ptr q, mpz_srcptr z, mpq_srcptr r)
+16535:   { eval(q, r, z); }
+16535: 
+16535:   static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h)
+16535:   { __gmpf_add(f, g, h); }
+16535: 
+16535:   static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l)
+16535:   { __gmpf_add_ui(f, g, l); }
+16535:   static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g)
+16535:   { __gmpf_add_ui(f, g, l); }
+16535:   static void eval(mpf_ptr f, mpf_srcptr g, signed long int l)
+16535:   {
+16535:     if (l >= 0)
+16535:       __gmpf_add_ui(f, g, l);
+16535:     else
+16535:       __gmpf_sub_ui(f, g, -static_cast<unsigned long>(l));
+16535:   }
+16535:   static void eval(mpf_ptr f, signed long int l, mpf_srcptr g)
+16535:   { eval(f, g, l); }
+16535:   static void eval(mpf_ptr f, mpf_srcptr g, double d)
+16535:   {
+16535:     mpf_t temp;
+16535:     __gmpf_init2(temp, 8*sizeof(double));
+16535:     __gmpf_set_d(temp, d);
+16535:     __gmpf_add(f, g, temp);
+16535:     __gmpf_clear(temp);
+16535:   }
+16535:   static void eval(mpf_ptr f, double d, mpf_srcptr g)
+16535:   { eval(f, g, d); }
+16535: };
+16535: 
+16535: struct __gmp_binary_minus
+16535: {
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v)
+16535:   { __gmpz_sub(z, w, v); }
+16535: 
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l)
+16535:   {
+16535:     if (__builtin_constant_p(l) && l == 0)
+16535:     {
+16535:       if (z != w) __gmpz_set(z, w);
+16535:     }
+16535:     else
+16535:       __gmpz_sub_ui(z, w, l);
+16535:   }
+16535:   static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w)
+16535:   {
+16535:     if (__builtin_constant_p(l) && l == 0)
+16535:     {
+16535:       __gmpz_neg(z, w);
+16535:     }
+16535:     else
+16535:       __gmpz_ui_sub(z, l, w);
+16535:   }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, signed long int l)
+16535:   {
+16535:     if (l >= 0)
+16535:       eval(z, w, static_cast<unsigned long>(l));
+16535:     else
+16535:       __gmpz_add_ui(z, w, -static_cast<unsigned long>(l));
+16535:   }
+16535:   static void eval(mpz_ptr z, signed long int l, mpz_srcptr w)
+16535:   {
+16535:     if (l >= 0)
+16535:       eval(z, static_cast<unsigned long>(l), w);
+16535:     else
+16535:       {
+16535:         __gmpz_add_ui(z, w, -static_cast<unsigned long>(l));
+16535:         __gmpz_neg(z, z);
+16535:       }
+16535:   }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, double d)
+16535:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_sub (z, w, temp); }
+16535:   static void eval(mpz_ptr z, double d, mpz_srcptr w)
+16535:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_sub (z, temp, w); }
+16535: 
+16535:   static void eval(mpq_ptr q, mpq_srcptr r, mpq_srcptr s)
+16535:   { __gmpq_sub(q, r, s); }
+16535: 
+16535:   static void eval(mpq_ptr q, mpq_srcptr r, unsigned long int l)
+16535:   {
+16535:     if (__builtin_constant_p(l) && l == 0)
+16535:     {
+16535:       if (q != r) __gmpq_set(q, r);
+16535:     }
+16535:     else
+16535:     {
+16535:       if (q == r)
+16535:         __gmpz_submul_ui((&((q)->_mp_num)), (&((q)->_mp_den)), l);
+16535:       else
+16535:       {
+16535:         __gmpz_mul_ui((&((q)->_mp_num)), (&((r)->_mp_den)), l);
+16535:         __gmpz_sub((&((q)->_mp_num)), (&((r)->_mp_num)), (&((q)->_mp_num)));
+16535:         __gmpz_set((&((q)->_mp_den)), (&((r)->_mp_den)));
+16535:       }
+16535:     }
+16535:   }
+16535:   static void eval(mpq_ptr q, unsigned long int l, mpq_srcptr r)
+16535:   { eval(q, r, l); __gmpq_neg(q, q); }
+16535:   static void eval(mpq_ptr q, mpq_srcptr r, signed long int l)
+16535:   {
+16535:     if (l >= 0)
+16535:       eval(q, r, static_cast<unsigned long>(l));
+16535:     else
+16535:       __gmp_binary_plus::eval(q, r, -static_cast<unsigned long>(l));
+16535:   }
+16535:   static void eval(mpq_ptr q, signed long int l, mpq_srcptr r)
+16535:   { eval(q, r, l); __gmpq_neg(q, q); }
+16535:   static void eval(mpq_ptr q, mpq_srcptr r, double d)
+16535:   { mpq_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1 + (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpq_set_d (temp, d); __gmpq_sub (q, r, temp); }
+16535:   static void eval(mpq_ptr q, double d, mpq_srcptr r)
+16535:   { mpq_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1 + (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpq_set_d (temp, d); __gmpq_sub (q, temp, r); }
+16535: 
+16535:   static void eval(mpq_ptr q, mpq_srcptr r, mpz_srcptr z)
+16535:   {
+16535:     if (q == r)
+16535:       __gmpz_submul((&((q)->_mp_num)), (&((q)->_mp_den)), z);
+16535:     else
+16535:     {
+16535:       __gmpz_mul((&((q)->_mp_num)), (&((r)->_mp_den)), z);
+16535:       __gmpz_sub((&((q)->_mp_num)), (&((r)->_mp_num)), (&((q)->_mp_num)));
+16535:       __gmpz_set((&((q)->_mp_den)), (&((r)->_mp_den)));
+16535:     }
+16535:   }
+16535:   static void eval(mpq_ptr q, mpz_srcptr z, mpq_srcptr r)
+16535:   { eval(q, r, z); __gmpq_neg(q, q); }
+16535: 
+16535:   static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h)
+16535:   { __gmpf_sub(f, g, h); }
+16535: 
+16535:   static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l)
+16535:   { __gmpf_sub_ui(f, g, l); }
+16535:   static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g)
+16535:   { __gmpf_ui_sub(f, l, g); }
+16535:   static void eval(mpf_ptr f, mpf_srcptr g, signed long int l)
+16535:   {
+16535:     if (l >= 0)
+16535:       __gmpf_sub_ui(f, g, l);
+16535:     else
+16535:       __gmpf_add_ui(f, g, -static_cast<unsigned long>(l));
+16535:   }
+16535:   static void eval(mpf_ptr f, signed long int l, mpf_srcptr g)
+16535:   {
+16535:     if (l >= 0)
+16535:       __gmpf_sub_ui(f, g, l);
+16535:     else
+16535:       __gmpf_add_ui(f, g, -static_cast<unsigned long>(l));
+16535:     __gmpf_neg(f, f);
+16535:   }
+16535:   static void eval(mpf_ptr f, mpf_srcptr g, double d)
+16535:   {
+16535:     mpf_t temp;
+16535:     __gmpf_init2(temp, 8*sizeof(double));
+16535:     __gmpf_set_d(temp, d);
+16535:     __gmpf_sub(f, g, temp);
+16535:     __gmpf_clear(temp);
+16535:   }
+16535:   static void eval(mpf_ptr f, double d, mpf_srcptr g)
+16535:   {
+16535:     mpf_t temp;
+16535:     __gmpf_init2(temp, 8*sizeof(double));
+16535:     __gmpf_set_d(temp, d);
+16535:     __gmpf_sub(f, temp, g);
+16535:     __gmpf_clear(temp);
+16535:   }
+16535: };
+16535: 
+16535: 
+16535: inline void
+16535: __gmp_binary_plus::eval(mpq_ptr q, mpq_srcptr r, signed long int l)
+16535: {
+16535:   if (l >= 0)
+16535:     eval(q, r, static_cast<unsigned long>(l));
+16535:   else
+16535:     __gmp_binary_minus::eval(q, r, -static_cast<unsigned long>(l));
+16535: }
+16535: 
+16535: struct __gmp_binary_lshift
+16535: {
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, mp_bitcnt_t l)
+16535:   {
+16535:     if (__builtin_constant_p(l) && (l == 0))
+16535:     {
+16535:       if (z != w) __gmpz_set(z, w);
+16535:     }
+16535:     else
+16535:       __gmpz_mul_2exp(z, w, l);
+16535:   }
+16535:   static void eval(mpq_ptr q, mpq_srcptr r, mp_bitcnt_t l)
+16535:   {
+16535:     if (__builtin_constant_p(l) && (l == 0))
+16535:     {
+16535:       if (q != r) __gmpq_set(q, r);
+16535:     }
+16535:     else
+16535:       __gmpq_mul_2exp(q, r, l);
+16535:   }
+16535:   static void eval(mpf_ptr f, mpf_srcptr g, mp_bitcnt_t l)
+16535:   { __gmpf_mul_2exp(f, g, l); }
+16535: };
+16535: 
+16535: struct __gmp_binary_rshift
+16535: {
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, mp_bitcnt_t l)
+16535:   {
+16535:     if (__builtin_constant_p(l) && (l == 0))
+16535:     {
+16535:       if (z != w) __gmpz_set(z, w);
+16535:     }
+16535:     else
+16535:       __gmpz_fdiv_q_2exp(z, w, l);
+16535:   }
+16535:   static void eval(mpq_ptr q, mpq_srcptr r, mp_bitcnt_t l)
+16535:   {
+16535:     if (__builtin_constant_p(l) && (l == 0))
+16535:     {
+16535:       if (q != r) __gmpq_set(q, r);
+16535:     }
+16535:     else
+16535:       __gmpq_div_2exp(q, r, l);
+16535:   }
+16535:   static void eval(mpf_ptr f, mpf_srcptr g, mp_bitcnt_t l)
+16535:   { __gmpf_div_2exp(f, g, l); }
+16535: };
+16535: 
+16535: struct __gmp_binary_multiplies
+16535: {
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v)
+16535:   { __gmpz_mul(z, w, v); }
+16535: 
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l)
+16535:   {
+16535: 
+16535: 
+16535:     if (__builtin_constant_p(l) && (l & (l-1)) == 0)
+16535:     {
+16535:       if (l == 0)
+16535:       {
+16535:         z->_mp_size = 0;
+16535:       }
+16535:       else
+16535:       {
+16535:         __gmp_binary_lshift::eval(z, w, __builtin_ctzl(l));
+16535:       }
+16535:     }
+16535:     else
+16535: 
+16535:       __gmpz_mul_ui(z, w, l);
+16535:   }
+16535:   static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w)
+16535:   { eval(z, w, l); }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, signed long int l)
+16535:   {
+16535:     if ((__builtin_constant_p(l >= 0) && (l >= 0)))
+16535:       eval(z, w, static_cast<unsigned long>(l));
+16535:     else if ((__builtin_constant_p(l <= 0) && (l <= 0)))
+16535:       {
+16535:         eval(z, w, -static_cast<unsigned long>(l));
+16535:  __gmpz_neg(z, z);
+16535:       }
+16535:     else
+16535:       __gmpz_mul_si (z, w, l);
+16535:   }
+16535:   static void eval(mpz_ptr z, signed long int l, mpz_srcptr w)
+16535:   { eval(z, w, l); }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, double d)
+16535:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_mul (z, w, temp); }
+16535:   static void eval(mpz_ptr z, double d, mpz_srcptr w)
+16535:   { eval(z, w, d); }
+16535: 
+16535:   static void eval(mpq_ptr q, mpq_srcptr r, mpq_srcptr s)
+16535:   { __gmpq_mul(q, r, s); }
+16535: 
+16535:   static void eval(mpq_ptr q, mpq_srcptr r, unsigned long int l)
+16535:   {
+16535: 
+16535:     if (__builtin_constant_p(l) && (l & (l-1)) == 0)
+16535:     {
+16535:       if (l == 0)
+16535:       {
+16535:  __gmpq_set_ui(q, 0, 1);
+16535:       }
+16535:       else
+16535:       {
+16535:         __gmp_binary_lshift::eval(q, r, __builtin_ctzl(l));
+16535:       }
+16535:     }
+16535:     else
+16535: 
+16535:     {
+16535:       mpq_t temp; mp_limb_t limbs[1 +1]; (&((temp)->_mp_num))->_mp_d = limbs; __mpz_set_ui_safe ((&((temp)->_mp_num)), l); (&((temp)->_mp_den))->_mp_d = limbs + 1; (&((temp)->_mp_den))->_mp_size = 1; (&((temp)->_mp_den))->_mp_d[0] = 1;
+16535:       __gmpq_mul (q, r, temp);
+16535:     }
+16535:   }
+16535:   static void eval(mpq_ptr q, unsigned long int l, mpq_srcptr r)
+16535:   { eval(q, r, l); }
+16535:   static void eval(mpq_ptr q, mpq_srcptr r, signed long int l)
+16535:   {
+16535:     if ((__builtin_constant_p(l >= 0) && (l >= 0)))
+16535:       eval(q, r, static_cast<unsigned long>(l));
+16535:     else if ((__builtin_constant_p(l <= 0) && (l <= 0)))
+16535:       {
+16535:         eval(q, r, -static_cast<unsigned long>(l));
+16535:  __gmpq_neg(q, q);
+16535:       }
+16535:     else
+16535:       {
+16535:  mpq_t temp; mp_limb_t limbs[1 +1]; (&((temp)->_mp_num))->_mp_d = limbs; __mpz_set_si_safe ((&((temp)->_mp_num)), l); (&((temp)->_mp_den))->_mp_d = limbs + 1; (&((temp)->_mp_den))->_mp_size = 1; (&((temp)->_mp_den))->_mp_d[0] = 1;
+16535:  __gmpq_mul (q, r, temp);
+16535:       }
+16535:   }
+16535:   static void eval(mpq_ptr q, signed long int l, mpq_srcptr r)
+16535:   { eval(q, r, l); }
+16535:   static void eval(mpq_ptr q, mpq_srcptr r, double d)
+16535:   { mpq_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1 + (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpq_set_d (temp, d); __gmpq_mul (q, r, temp); }
+16535:   static void eval(mpq_ptr q, double d, mpq_srcptr r)
+16535:   { eval(q, r, d); }
+16535: 
+16535:   static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h)
+16535:   { __gmpf_mul(f, g, h); }
+16535: 
+16535:   static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l)
+16535:   { __gmpf_mul_ui(f, g, l); }
+16535:   static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g)
+16535:   { __gmpf_mul_ui(f, g, l); }
+16535:   static void eval(mpf_ptr f, mpf_srcptr g, signed long int l)
+16535:   {
+16535:     if (l >= 0)
+16535:       __gmpf_mul_ui(f, g, l);
+16535:     else
+16535:       {
+16535:  __gmpf_mul_ui(f, g, -static_cast<unsigned long>(l));
+16535:  __gmpf_neg(f, f);
+16535:       }
+16535:   }
+16535:   static void eval(mpf_ptr f, signed long int l, mpf_srcptr g)
+16535:   { eval(f, g, l); }
+16535:   static void eval(mpf_ptr f, mpf_srcptr g, double d)
+16535:   {
+16535:     mpf_t temp;
+16535:     __gmpf_init2(temp, 8*sizeof(double));
+16535:     __gmpf_set_d(temp, d);
+16535:     __gmpf_mul(f, g, temp);
+16535:     __gmpf_clear(temp);
+16535:   }
+16535:   static void eval(mpf_ptr f, double d, mpf_srcptr g)
+16535:   { eval(f, g, d); }
+16535: };
+16535: 
+16535: struct __gmp_binary_divides
+16535: {
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v)
+16535:   { __gmpz_tdiv_q(z, w, v); }
+16535: 
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l)
+16535:   {
+16535: 
+16535: 
+16535:     if (__builtin_constant_p(l) && (l & (l-1)) == 0 && l != 0)
+16535:     {
+16535:       if (l == 1)
+16535:       {
+16535:         if (z != w) __gmpz_set(z, w);
+16535:       }
+16535:       else
+16535:         __gmpz_tdiv_q_2exp(z, w, __builtin_ctzl(l));
+16535: 
+16535:     }
+16535:     else
+16535: 
+16535:       __gmpz_tdiv_q_ui(z, w, l);
+16535:   }
+16535:   static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w)
+16535:   {
+16535:     if (((w)->_mp_size < 0 ? -1 : (w)->_mp_size > 0) >= 0)
+16535:       {
+16535:  if (__gmpz_fits_ulong_p(w))
+16535:    __gmpz_set_ui(z, l / __gmpz_get_ui(w));
+16535:  else
+16535:    __gmpz_set_ui(z, 0);
+16535:       }
+16535:     else
+16535:       {
+16535:  __gmpz_neg(z, w);
+16535:  if (__gmpz_fits_ulong_p(z))
+16535:    {
+16535:      __gmpz_set_ui(z, l / __gmpz_get_ui(z));
+16535:      __gmpz_neg(z, z);
+16535:    }
+16535:  else
+16535:    __gmpz_set_ui(z, 0);
+16535:       }
+16535:   }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, signed long int l)
+16535:   {
+16535:     if (l >= 0)
+16535:       eval(z, w, static_cast<unsigned long>(l));
+16535:     else
+16535:       {
+16535:  eval(z, w, -static_cast<unsigned long>(l));
+16535:  __gmpz_neg(z, z);
+16535:       }
+16535:   }
+16535:   static void eval(mpz_ptr z, signed long int l, mpz_srcptr w)
+16535:   {
+16535:     if (__gmpz_fits_slong_p(w))
+16535:       __gmpz_set_si(z, l / __gmpz_get_si(w));
+16535:     else
+16535:       {
+16535: 
+16535: 
+16535:         __gmpz_set_si (z, (__gmpz_cmpabs_ui (w, __gmpxx_abs_ui(l)) == 0 ? -1 : 0));
+16535:       }
+16535:   }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, double d)
+16535:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_tdiv_q (z, w, temp); }
+16535:   static void eval(mpz_ptr z, double d, mpz_srcptr w)
+16535:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_tdiv_q (z, temp, w); }
+16535: 
+16535:   static void eval(mpq_ptr q, mpq_srcptr r, mpq_srcptr s)
+16535:   { __gmpq_div(q, r, s); }
+16535: 
+16535:   static void eval(mpq_ptr q, mpq_srcptr r, unsigned long int l)
+16535:   {
+16535: 
+16535:     if (__builtin_constant_p(l) && (l & (l-1)) == 0 && l != 0)
+16535:       __gmp_binary_rshift::eval(q, r, __builtin_ctzl(l));
+16535:     else
+16535: 
+16535:     {
+16535:       mpq_t temp; mp_limb_t limbs[1 +1]; (&((temp)->_mp_num))->_mp_d = limbs; __mpz_set_ui_safe ((&((temp)->_mp_num)), l); (&((temp)->_mp_den))->_mp_d = limbs + 1; (&((temp)->_mp_den))->_mp_size = 1; (&((temp)->_mp_den))->_mp_d[0] = 1;
+16535:       __gmpq_div (q, r, temp);
+16535:     }
+16535:   }
+16535:   static void eval(mpq_ptr q, unsigned long int l, mpq_srcptr r)
+16535:   { mpq_t temp; mp_limb_t limbs[1 +1]; (&((temp)->_mp_num))->_mp_d = limbs; __mpz_set_ui_safe ((&((temp)->_mp_num)), l); (&((temp)->_mp_den))->_mp_d = limbs + 1; (&((temp)->_mp_den))->_mp_size = 1; (&((temp)->_mp_den))->_mp_d[0] = 1; __gmpq_div (q, temp, r); }
+16535:   static void eval(mpq_ptr q, mpq_srcptr r, signed long int l)
+16535:   {
+16535:     if ((__builtin_constant_p(l >= 0) && (l >= 0)))
+16535:       eval(q, r, static_cast<unsigned long>(l));
+16535:     else if ((__builtin_constant_p(l <= 0) && (l <= 0)))
+16535:       {
+16535:         eval(q, r, -static_cast<unsigned long>(l));
+16535:  __gmpq_neg(q, q);
+16535:       }
+16535:     else
+16535:       {
+16535:  mpq_t temp; mp_limb_t limbs[1 +1]; (&((temp)->_mp_num))->_mp_d = limbs; __mpz_set_si_safe ((&((temp)->_mp_num)), l); (&((temp)->_mp_den))->_mp_d = limbs + 1; (&((temp)->_mp_den))->_mp_size = 1; (&((temp)->_mp_den))->_mp_d[0] = 1;
+16535:  __gmpq_div (q, r, temp);
+16535:       }
+16535:   }
+16535:   static void eval(mpq_ptr q, signed long int l, mpq_srcptr r)
+16535:   { mpq_t temp; mp_limb_t limbs[1 +1]; (&((temp)->_mp_num))->_mp_d = limbs; __mpz_set_si_safe ((&((temp)->_mp_num)), l); (&((temp)->_mp_den))->_mp_d = limbs + 1; (&((temp)->_mp_den))->_mp_size = 1; (&((temp)->_mp_den))->_mp_d[0] = 1; __gmpq_div (q, temp, r); }
+16535:   static void eval(mpq_ptr q, mpq_srcptr r, double d)
+16535:   { mpq_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1 + (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpq_set_d (temp, d); __gmpq_div (q, r, temp); }
+16535:   static void eval(mpq_ptr q, double d, mpq_srcptr r)
+16535:   { mpq_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1 + (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpq_set_d (temp, d); __gmpq_div (q, temp, r); }
+16535: 
+16535:   static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h)
+16535:   { __gmpf_div(f, g, h); }
+16535: 
+16535:   static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l)
+16535:   { __gmpf_div_ui(f, g, l); }
+16535:   static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g)
+16535:   { __gmpf_ui_div(f, l, g); }
+16535:   static void eval(mpf_ptr f, mpf_srcptr g, signed long int l)
+16535:   {
+16535:     if (l >= 0)
+16535:       __gmpf_div_ui(f, g, l);
+16535:     else
+16535:       {
+16535:  __gmpf_div_ui(f, g, -static_cast<unsigned long>(l));
+16535:  __gmpf_neg(f, f);
+16535:       }
+16535:   }
+16535:   static void eval(mpf_ptr f, signed long int l, mpf_srcptr g)
+16535:   {
+16535:     if (l >= 0)
+16535:       __gmpf_ui_div(f, l, g);
+16535:     else
+16535:       {
+16535:  __gmpf_ui_div(f, -static_cast<unsigned long>(l), g);
+16535:  __gmpf_neg(f, f);
+16535:       }
+16535:   }
+16535:   static void eval(mpf_ptr f, mpf_srcptr g, double d)
+16535:   {
+16535:     mpf_t temp;
+16535:     __gmpf_init2(temp, 8*sizeof(double));
+16535:     __gmpf_set_d(temp, d);
+16535:     __gmpf_div(f, g, temp);
+16535:     __gmpf_clear(temp);
+16535:   }
+16535:   static void eval(mpf_ptr f, double d, mpf_srcptr g)
+16535:   {
+16535:     mpf_t temp;
+16535:     __gmpf_init2(temp, 8*sizeof(double));
+16535:     __gmpf_set_d(temp, d);
+16535:     __gmpf_div(f, temp, g);
+16535:     __gmpf_clear(temp);
+16535:   }
+16535: };
+16535: 
+16535: struct __gmp_binary_modulus
+16535: {
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v)
+16535:   { __gmpz_tdiv_r(z, w, v); }
+16535: 
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l)
+16535:   { __gmpz_tdiv_r_ui(z, w, l); }
+16535:   static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w)
+16535:   {
+16535:     if (((w)->_mp_size < 0 ? -1 : (w)->_mp_size > 0) >= 0)
+16535:       {
+16535:  if (__gmpz_fits_ulong_p(w))
+16535:    __gmpz_set_ui(z, l % __gmpz_get_ui(w));
+16535:  else
+16535:    __gmpz_set_ui(z, l);
+16535:       }
+16535:     else
+16535:       {
+16535:  __gmpz_neg(z, w);
+16535:  if (__gmpz_fits_ulong_p(z))
+16535:    __gmpz_set_ui(z, l % __gmpz_get_ui(z));
+16535:  else
+16535:    __gmpz_set_ui(z, l);
+16535:       }
+16535:   }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, signed long int l)
+16535:   {
+16535:     __gmpz_tdiv_r_ui (z, w, __gmpxx_abs_ui(l));
+16535:   }
+16535:   static void eval(mpz_ptr z, signed long int l, mpz_srcptr w)
+16535:   {
+16535:     if (__gmpz_fits_slong_p(w))
+16535:       __gmpz_set_si(z, l % __gmpz_get_si(w));
+16535:     else
+16535:       {
+16535: 
+16535: 
+16535:         __gmpz_set_si (z, __gmpz_cmpabs_ui (w, __gmpxx_abs_ui(l)) == 0 ? 0 : l);
+16535:       }
+16535:   }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, double d)
+16535:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_tdiv_r (z, w, temp); }
+16535:   static void eval(mpz_ptr z, double d, mpz_srcptr w)
+16535:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_tdiv_r (z, temp, w); }
+16535: };
+16535: 
+16535: struct __gmp_binary_and
+16535: {
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v)
+16535:   { __gmpz_and(z, w, v); }
+16535: 
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l)
+16535:   { mpz_t temp; mp_limb_t limbs[1]; temp->_mp_d = limbs; __mpz_set_ui_safe (temp, l); __gmpz_and (z, w, temp); }
+16535:   static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w)
+16535:   { eval(z, w, l); }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, signed long int l)
+16535:   { mpz_t temp; mp_limb_t limbs[1]; temp->_mp_d = limbs; __mpz_set_si_safe (temp, l); __gmpz_and (z, w, temp); }
+16535:   static void eval(mpz_ptr z, signed long int l, mpz_srcptr w)
+16535:   { eval(z, w, l); }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, double d)
+16535:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_and (z, w, temp); }
+16535:   static void eval(mpz_ptr z, double d, mpz_srcptr w)
+16535:   { eval(z, w, d); }
+16535: };
+16535: 
+16535: struct __gmp_binary_ior
+16535: {
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v)
+16535:   { __gmpz_ior(z, w, v); }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l)
+16535:   { mpz_t temp; mp_limb_t limbs[1]; temp->_mp_d = limbs; __mpz_set_ui_safe (temp, l); __gmpz_ior (z, w, temp); }
+16535:   static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w)
+16535:   { eval(z, w, l); }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, signed long int l)
+16535:   { mpz_t temp; mp_limb_t limbs[1]; temp->_mp_d = limbs; __mpz_set_si_safe (temp, l); __gmpz_ior (z, w, temp); }
+16535:   static void eval(mpz_ptr z, signed long int l, mpz_srcptr w)
+16535:   { eval(z, w, l); }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, double d)
+16535:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_ior (z, w, temp); }
+16535:   static void eval(mpz_ptr z, double d, mpz_srcptr w)
+16535:   { eval(z, w, d); }
+16535: };
+16535: 
+16535: struct __gmp_binary_xor
+16535: {
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v)
+16535:   { __gmpz_xor(z, w, v); }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l)
+16535:   { mpz_t temp; mp_limb_t limbs[1]; temp->_mp_d = limbs; __mpz_set_ui_safe (temp, l); __gmpz_xor (z, w, temp); }
+16535:   static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w)
+16535:   { eval(z, w, l); }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, signed long int l)
+16535:   { mpz_t temp; mp_limb_t limbs[1]; temp->_mp_d = limbs; __mpz_set_si_safe (temp, l); __gmpz_xor (z, w, temp); }
+16535:   static void eval(mpz_ptr z, signed long int l, mpz_srcptr w)
+16535:   { eval(z, w, l); }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, double d)
+16535:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_xor (z, w, temp); }
+16535:   static void eval(mpz_ptr z, double d, mpz_srcptr w)
+16535:   { eval(z, w, d); }
+16535: };
+16535: 
+16535: struct __gmp_cmp_function
+16535: {
+16535:   static int eval(mpz_srcptr z, mpz_srcptr w) { return __gmpz_cmp(z, w); }
+16535: 
+16535:   static int eval(mpz_srcptr z, unsigned long int l)
+16535:   { return (__builtin_constant_p (l) && (l) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,l)); }
+16535:   static int eval(unsigned long int l, mpz_srcptr z)
+16535:   { return -(__builtin_constant_p (l) && (l) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,l)); }
+16535:   static int eval(mpz_srcptr z, signed long int l)
+16535:   { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast<unsigned long> (l))) && ((static_cast<unsigned long> (l))) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,(static_cast<unsigned long> (l)))) : __gmpz_cmp_si (z,l)); }
+16535:   static int eval(signed long int l, mpz_srcptr z)
+16535:   { return -(__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast<unsigned long> (l))) && ((static_cast<unsigned long> (l))) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,(static_cast<unsigned long> (l)))) : __gmpz_cmp_si (z,l)); }
+16535:   static int eval(mpz_srcptr z, double d)
+16535:   { return __gmpz_cmp_d(z, d); }
+16535:   static int eval(double d, mpz_srcptr z)
+16535:   { return -__gmpz_cmp_d(z, d); }
+16535: 
+16535:   static int eval(mpq_srcptr q, mpq_srcptr r) { return __gmpq_cmp(q, r); }
+16535: 
+16535:   static int eval(mpq_srcptr q, unsigned long int l)
+16535:   { return (__builtin_constant_p (l) && (l) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p ((l) == (1)) && (l) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,l,1)); }
+16535:   static int eval(unsigned long int l, mpq_srcptr q)
+16535:   { return -(__builtin_constant_p (l) && (l) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p ((l) == (1)) && (l) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,l,1)); }
+16535:   static int eval(mpq_srcptr q, signed long int l)
+16535:   { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast<unsigned long> (l))) && ((static_cast<unsigned long> (l))) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p (((static_cast<unsigned long> (l))) == (1)) && ((static_cast<unsigned long> (l))) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,(static_cast<unsigned long> (l)),1)) : __gmpq_cmp_si (q, l, 1)); }
+16535:   static int eval(signed long int l, mpq_srcptr q)
+16535:   { return -(__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast<unsigned long> (l))) && ((static_cast<unsigned long> (l))) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p (((static_cast<unsigned long> (l))) == (1)) && ((static_cast<unsigned long> (l))) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,(static_cast<unsigned long> (l)),1)) : __gmpq_cmp_si (q, l, 1)); }
+16535:   static int eval(mpq_srcptr q, double d)
+16535:   { mpq_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1 + (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpq_set_d (temp, d); return __gmpq_cmp (q, temp); }
+16535:   static int eval(double d, mpq_srcptr q)
+16535:   { mpq_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1 + (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpq_set_d (temp, d); return __gmpq_cmp (temp, q); }
+16535:   static int eval(mpq_srcptr q, mpz_srcptr z)
+16535:   { return __gmpq_cmp_z(q, z); }
+16535:   static int eval(mpz_srcptr z, mpq_srcptr q)
+16535:   { return -__gmpq_cmp_z(q, z); }
+16535: 
+16535:   static int eval(mpf_srcptr f, mpf_srcptr g) { return __gmpf_cmp(f, g); }
+16535: 
+16535:   static int eval(mpf_srcptr f, unsigned long int l)
+16535:   { return __gmpf_cmp_ui(f, l); }
+16535:   static int eval(unsigned long int l, mpf_srcptr f)
+16535:   { return -__gmpf_cmp_ui(f, l); }
+16535:   static int eval(mpf_srcptr f, signed long int l)
+16535:   { return __gmpf_cmp_si(f, l); }
+16535:   static int eval(signed long int l, mpf_srcptr f)
+16535:   { return -__gmpf_cmp_si(f, l); }
+16535:   static int eval(mpf_srcptr f, double d)
+16535:   { return __gmpf_cmp_d(f, d); }
+16535:   static int eval(double d, mpf_srcptr f)
+16535:   { return -__gmpf_cmp_d(f, d); }
+16535:   static int eval(mpf_srcptr f, mpz_srcptr z)
+16535:   { return __gmpf_cmp_z(f, z); }
+16535:   static int eval(mpz_srcptr z, mpf_srcptr f)
+16535:   { return -__gmpf_cmp_z(f, z); }
+16535:   static int eval(mpf_srcptr f, mpq_srcptr q)
+16535:   {
+16535:     mpf_t qf;
+16535:     __gmpf_init(qf);
+16535:     __gmpf_set_q(qf, q);
+16535:     int ret = eval(f, qf);
+16535:     __gmpf_clear(qf);
+16535:     return ret;
+16535:   }
+16535:   static int eval(mpq_srcptr q, mpf_srcptr f)
+16535:   { return -eval(f, q); }
+16535: };
+16535: 
+16535: struct __gmp_binary_equal
+16535: {
+16535:   static bool eval(mpz_srcptr z, mpz_srcptr w) { return __gmpz_cmp(z, w) == 0; }
+16535: 
+16535:   static bool eval(mpz_srcptr z, unsigned long int l)
+16535:   { return (__builtin_constant_p (l) && (l) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,l)) == 0; }
+16535:   static bool eval(unsigned long int l, mpz_srcptr z)
+16535:   { return eval(z, l); }
+16535:   static bool eval(mpz_srcptr z, signed long int l)
+16535:   { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast<unsigned long> (l))) && ((static_cast<unsigned long> (l))) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,(static_cast<unsigned long> (l)))) : __gmpz_cmp_si (z,l)) == 0; }
+16535:   static bool eval(signed long int l, mpz_srcptr z)
+16535:   { return eval(z, l); }
+16535:   static bool eval(mpz_srcptr z, double d)
+16535:   { return __gmpz_cmp_d(z, d) == 0; }
+16535:   static bool eval(double d, mpz_srcptr z)
+16535:   { return eval(z, d); }
+16535: 
+16535:   static bool eval(mpq_srcptr q, mpq_srcptr r)
+16535:   { return __gmpq_equal(q, r) != 0; }
+16535: 
+16535:   static bool eval(mpq_srcptr q, unsigned long int l)
+16535:   { return (__builtin_constant_p (l) && (l) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p ((l) == (1)) && (l) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,l,1)) == 0; }
+16535:   static bool eval(unsigned long int l, mpq_srcptr q)
+16535:   { return eval(q, l); }
+16535:   static bool eval(mpq_srcptr q, signed long int l)
+16535:   { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast<unsigned long> (l))) && ((static_cast<unsigned long> (l))) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p (((static_cast<unsigned long> (l))) == (1)) && ((static_cast<unsigned long> (l))) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,(static_cast<unsigned long> (l)),1)) : __gmpq_cmp_si (q, l, 1)) == 0; }
+16535:   static bool eval(signed long int l, mpq_srcptr q)
+16535:   { return eval(q, l); }
+16535:   static bool eval(mpq_srcptr q, double d)
+16535:   { mpq_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1 + (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpq_set_d (temp, d); return __gmpq_equal (q, temp) != 0; }
+16535:   static bool eval(double d, mpq_srcptr q)
+16535:   { return eval(q, d); }
+16535:   static bool eval(mpq_srcptr q, mpz_srcptr z)
+16535:   { return __gmpq_cmp_z(q, z) == 0; }
+16535:   static bool eval(mpz_srcptr z, mpq_srcptr q)
+16535:   { return eval(q, z); }
+16535: 
+16535:   static bool eval(mpf_srcptr f, mpf_srcptr g) { return __gmpf_cmp(f, g) == 0; }
+16535: 
+16535:   static bool eval(mpf_srcptr f, unsigned long int l)
+16535:   { return __gmpf_cmp_ui(f, l) == 0; }
+16535:   static bool eval(unsigned long int l, mpf_srcptr f)
+16535:   { return eval(f, l); }
+16535:   static bool eval(mpf_srcptr f, signed long int l)
+16535:   { return __gmpf_cmp_si(f, l) == 0; }
+16535:   static bool eval(signed long int l, mpf_srcptr f)
+16535:   { return eval(f, l); }
+16535:   static bool eval(mpf_srcptr f, double d)
+16535:   { return __gmpf_cmp_d(f, d) == 0; }
+16535:   static bool eval(double d, mpf_srcptr f)
+16535:   { return eval(f, d); }
+16535:   static bool eval(mpf_srcptr f, mpz_srcptr z)
+16535:   { return __gmpf_cmp_z(f, z) == 0; }
+16535:   static bool eval(mpz_srcptr z, mpf_srcptr f)
+16535:   { return eval(f, z); }
+16535:   static bool eval(mpf_srcptr f, mpq_srcptr q)
+16535:   { return __gmp_cmp_function::eval(f, q) == 0; }
+16535:   static bool eval(mpq_srcptr q, mpf_srcptr f)
+16535:   { return eval(f, q); }
+16535: };
+16535: 
+16535: struct __gmp_binary_less
+16535: {
+16535:   static bool eval(mpz_srcptr z, mpz_srcptr w) { return __gmpz_cmp(z, w) < 0; }
+16535: 
+16535:   static bool eval(mpz_srcptr z, unsigned long int l)
+16535:   { return (__builtin_constant_p (l) && (l) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,l)) < 0; }
+16535:   static bool eval(unsigned long int l, mpz_srcptr z)
+16535:   { return (__builtin_constant_p (l) && (l) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,l)) > 0; }
+16535:   static bool eval(mpz_srcptr z, signed long int l)
+16535:   { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast<unsigned long> (l))) && ((static_cast<unsigned long> (l))) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,(static_cast<unsigned long> (l)))) : __gmpz_cmp_si (z,l)) < 0; }
+16535:   static bool eval(signed long int l, mpz_srcptr z)
+16535:   { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast<unsigned long> (l))) && ((static_cast<unsigned long> (l))) == 0 ? ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0) : __gmpz_cmp_ui (z,(static_cast<unsigned long> (l)))) : __gmpz_cmp_si (z,l)) > 0; }
+16535:   static bool eval(mpz_srcptr z, double d)
+16535:   { return __gmpz_cmp_d(z, d) < 0; }
+16535:   static bool eval(double d, mpz_srcptr z)
+16535:   { return __gmpz_cmp_d(z, d) > 0; }
+16535: 
+16535:   static bool eval(mpq_srcptr q, mpq_srcptr r) { return __gmpq_cmp(q, r) < 0; }
+16535: 
+16535:   static bool eval(mpq_srcptr q, unsigned long int l)
+16535:   { return (__builtin_constant_p (l) && (l) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p ((l) == (1)) && (l) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,l,1)) < 0; }
+16535:   static bool eval(unsigned long int l, mpq_srcptr q)
+16535:   { return (__builtin_constant_p (l) && (l) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p ((l) == (1)) && (l) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,l,1)) > 0; }
+16535:   static bool eval(mpq_srcptr q, signed long int l)
+16535:   { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast<unsigned long> (l))) && ((static_cast<unsigned long> (l))) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p (((static_cast<unsigned long> (l))) == (1)) && ((static_cast<unsigned long> (l))) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,(static_cast<unsigned long> (l)),1)) : __gmpq_cmp_si (q, l, 1)) < 0; }
+16535:   static bool eval(signed long int l, mpq_srcptr q)
+16535:   { return (__builtin_constant_p ((l) >= 0) && (l) >= 0 ? (__builtin_constant_p ((static_cast<unsigned long> (l))) && ((static_cast<unsigned long> (l))) == 0 ? ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0) : __builtin_constant_p (((static_cast<unsigned long> (l))) == (1)) && ((static_cast<unsigned long> (l))) == (1) ? __gmpz_cmp ((&((q)->_mp_num)), (&((q)->_mp_den))) : __gmpq_cmp_ui (q,(static_cast<unsigned long> (l)),1)) : __gmpq_cmp_si (q, l, 1)) > 0; }
+16535:   static bool eval(mpq_srcptr q, double d)
+16535:   { mpq_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1 + (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpq_set_d (temp, d); return __gmpq_cmp (q, temp) < 0; }
+16535:   static bool eval(double d, mpq_srcptr q)
+16535:   { mpq_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1 + (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1]; (&((temp)->_mp_num))->_mp_d = limbs; (&((temp)->_mp_num))->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_d = limbs + (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; (&((temp)->_mp_den))->_mp_alloc = (((53 +1-(-1021)) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpq_set_d (temp, d); return __gmpq_cmp (temp, q) < 0; }
+16535:   static bool eval(mpq_srcptr q, mpz_srcptr z)
+16535:   { return __gmpq_cmp_z(q, z) < 0; }
+16535:   static bool eval(mpz_srcptr z, mpq_srcptr q)
+16535:   { return __gmpq_cmp_z(q, z) > 0; }
+16535: 
+16535:   static bool eval(mpf_srcptr f, mpf_srcptr g) { return __gmpf_cmp(f, g) < 0; }
+16535: 
+16535:   static bool eval(mpf_srcptr f, unsigned long int l)
+16535:   { return __gmpf_cmp_ui(f, l) < 0; }
+16535:   static bool eval(unsigned long int l, mpf_srcptr f)
+16535:   { return __gmpf_cmp_ui(f, l) > 0; }
+16535:   static bool eval(mpf_srcptr f, signed long int l)
+16535:   { return __gmpf_cmp_si(f, l) < 0; }
+16535:   static bool eval(signed long int l, mpf_srcptr f)
+16535:   { return __gmpf_cmp_si(f, l) > 0; }
+16535:   static bool eval(mpf_srcptr f, double d)
+16535:   { return __gmpf_cmp_d(f, d) < 0; }
+16535:   static bool eval(double d, mpf_srcptr f)
+16535:   { return __gmpf_cmp_d(f, d) > 0; }
+16535:   static bool eval(mpf_srcptr f, mpz_srcptr z)
+16535:   { return __gmpf_cmp_z(f, z) < 0; }
+16535:   static bool eval(mpz_srcptr z, mpf_srcptr f)
+16535:   { return __gmpf_cmp_z(f, z) > 0; }
+16535:   static bool eval(mpf_srcptr f, mpq_srcptr q)
+16535:   { return __gmp_cmp_function::eval(f, q) < 0; }
+16535:   static bool eval(mpq_srcptr q, mpf_srcptr f)
+16535:   { return __gmp_cmp_function::eval(q, f) < 0; }
+16535: };
+16535: 
+16535: struct __gmp_binary_greater
+16535: {
+16535:   template <class T, class U>
+16535:   static inline bool eval(T t, U u) { return __gmp_binary_less::eval(u, t); }
+16535: };
+16535: 
+16535: struct __gmp_unary_increment
+16535: {
+16535:   static void eval(mpz_ptr z) { __gmpz_add_ui(z, z, 1); }
+16535:   static void eval(mpq_ptr q)
+16535:   { __gmpz_add((&((q)->_mp_num)), (&((q)->_mp_num)), (&((q)->_mp_den))); }
+16535:   static void eval(mpf_ptr f) { __gmpf_add_ui(f, f, 1); }
+16535: };
+16535: 
+16535: struct __gmp_unary_decrement
+16535: {
+16535:   static void eval(mpz_ptr z) { __gmpz_sub_ui(z, z, 1); }
+16535:   static void eval(mpq_ptr q)
+16535:   { __gmpz_sub((&((q)->_mp_num)), (&((q)->_mp_num)), (&((q)->_mp_den))); }
+16535:   static void eval(mpf_ptr f) { __gmpf_sub_ui(f, f, 1); }
+16535: };
+16535: 
+16535: struct __gmp_abs_function
+16535: {
+16535:   static void eval(mpz_ptr z, mpz_srcptr w) { __gmpz_abs(z, w); }
+16535:   static void eval(mpq_ptr q, mpq_srcptr r) { __gmpq_abs(q, r); }
+16535:   static void eval(mpf_ptr f, mpf_srcptr g) { __gmpf_abs(f, g); }
+16535: };
+16535: 
+16535: struct __gmp_trunc_function
+16535: {
+16535:   static void eval(mpf_ptr f, mpf_srcptr g) { __gmpf_trunc(f, g); }
+16535: };
+16535: 
+16535: struct __gmp_floor_function
+16535: {
+16535:   static void eval(mpf_ptr f, mpf_srcptr g) { __gmpf_floor(f, g); }
+16535: };
+16535: 
+16535: struct __gmp_ceil_function
+16535: {
+16535:   static void eval(mpf_ptr f, mpf_srcptr g) { __gmpf_ceil(f, g); }
+16535: };
+16535: 
+16535: struct __gmp_sqrt_function
+16535: {
+16535:   static void eval(mpz_ptr z, mpz_srcptr w) { __gmpz_sqrt(z, w); }
+16535:   static void eval(mpf_ptr f, mpf_srcptr g) { __gmpf_sqrt(f, g); }
+16535: };
+16535: 
+16535: struct __gmp_hypot_function
+16535: {
+16535:   static void eval(mpf_ptr f, mpf_srcptr g, mpf_srcptr h)
+16535:   {
+16535:     mpf_t temp;
+16535:     __gmpf_init2(temp, __gmpf_get_prec(f));
+16535:     __gmpf_mul(temp, g, g);
+16535:     __gmpf_mul(f, h, h);
+16535:     __gmpf_add(f, f, temp);
+16535:     __gmpf_sqrt(f, f);
+16535:     __gmpf_clear(temp);
+16535:   }
+16535: 
+16535:   static void eval(mpf_ptr f, mpf_srcptr g, unsigned long int l)
+16535:   {
+16535:     mpf_t temp;
+16535:     __gmpf_init2(temp, __gmpf_get_prec(f));
+16535:     __gmpf_mul(temp, g, g);
+16535:     __gmpf_set_ui(f, l);
+16535:     __gmpf_mul_ui(f, f, l);
+16535:     __gmpf_add(f, f, temp);
+16535:     __gmpf_clear(temp);
+16535:     __gmpf_sqrt(f, f);
+16535:   }
+16535:   static void eval(mpf_ptr f, unsigned long int l, mpf_srcptr g)
+16535:   { eval(f, g, l); }
+16535:   static void eval(mpf_ptr f, mpf_srcptr g, signed long int l)
+16535:   { eval(f, g, __gmpxx_abs_ui(l)); }
+16535:   static void eval(mpf_ptr f, signed long int l, mpf_srcptr g)
+16535:   { eval(f, g, l); }
+16535:   static void eval(mpf_ptr f, mpf_srcptr g, double d)
+16535:   {
+16535:     mpf_t temp;
+16535:     __gmpf_init2(temp, __gmpf_get_prec(f));
+16535:     __gmpf_mul(temp, g, g);
+16535:     __gmpf_set_d(f, d);
+16535:     __gmpf_mul(f, f, f);
+16535:     __gmpf_add(f, f, temp);
+16535:     __gmpf_sqrt(f, f);
+16535:     __gmpf_clear(temp);
+16535:   }
+16535:   static void eval(mpf_ptr f, double d, mpf_srcptr g)
+16535:   { eval(f, g, d); }
+16535: };
+16535: 
+16535: struct __gmp_sgn_function
+16535: {
+16535:   static int eval(mpz_srcptr z) { return ((z)->_mp_size < 0 ? -1 : (z)->_mp_size > 0); }
+16535:   static int eval(mpq_srcptr q) { return ((q)->_mp_num._mp_size < 0 ? -1 : (q)->_mp_num._mp_size > 0); }
+16535:   static int eval(mpf_srcptr f) { return ((f)->_mp_size < 0 ? -1 : (f)->_mp_size > 0); }
+16535: };
+16535: 
+16535: struct __gmp_gcd_function
+16535: {
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v)
+16535:   { __gmpz_gcd(z, w, v); }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l)
+16535:   { __gmpz_gcd_ui(z, w, l); }
+16535:   static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w)
+16535:   { eval(z, w, l); }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, signed long int l)
+16535:   { eval(z, w, __gmpxx_abs_ui(l)); }
+16535:   static void eval(mpz_ptr z, signed long int l, mpz_srcptr w)
+16535:   { eval(z, w, l); }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, double d)
+16535:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_gcd (z, w, temp); }
+16535:   static void eval(mpz_ptr z, double d, mpz_srcptr w)
+16535:   { eval(z, w, d); }
+16535: };
+16535: 
+16535: struct __gmp_lcm_function
+16535: {
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, mpz_srcptr v)
+16535:   { __gmpz_lcm(z, w, v); }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, unsigned long int l)
+16535:   { __gmpz_lcm_ui(z, w, l); }
+16535:   static void eval(mpz_ptr z, unsigned long int l, mpz_srcptr w)
+16535:   { eval(z, w, l); }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, signed long int l)
+16535:   { eval(z, w, __gmpxx_abs_ui(l)); }
+16535:   static void eval(mpz_ptr z, signed long int l, mpz_srcptr w)
+16535:   { eval(z, w, l); }
+16535:   static void eval(mpz_ptr z, mpz_srcptr w, double d)
+16535:   { mpz_t temp; mp_limb_t limbs[(((1024) + ((64 - 0) - 1)) / (64 - 0))+1]; temp->_mp_d = limbs; temp->_mp_alloc = (((1024) + ((64 - 0) - 1)) / (64 - 0))+1; __gmpz_set_d (temp, d); __gmpz_lcm (z, w, temp); }
+16535:   static void eval(mpz_ptr z, double d, mpz_srcptr w)
+16535:   { eval(z, w, d); }
+16535: };
+16535: 
+16535: struct __gmp_rand_function
+16535: {
+16535:   static void eval(mpz_ptr z, gmp_randstate_t s, mp_bitcnt_t l)
+16535:   { __gmpz_urandomb(z, s, l); }
+16535:   static void eval(mpz_ptr z, gmp_randstate_t s, mpz_srcptr w)
+16535:   { __gmpz_urandomm(z, s, w); }
+16535:   static void eval(mpf_ptr f, gmp_randstate_t s, mp_bitcnt_t prec)
+16535:   { __gmpf_urandomb(f, s, prec); }
+16535: };
+16535: # 1204 "/usr/include/gmpxx.h" 3 4
+16535: extern "C" {
+16535:   typedef void (*__gmp_freefunc_t) (void *, size_t);
+16535: }
+16535: struct __gmp_alloc_cstring
+16535: {
+16535:   char *str;
+16535:   __gmp_alloc_cstring(char *s) { str = s; }
+16535:   ~__gmp_alloc_cstring()
+16535:   {
+16535:     __gmp_freefunc_t freefunc;
+16535:     __gmp_get_memory_functions (__null, __null, &freefunc);
+16535:     (*freefunc) (str, std::strlen(str)+1);
+16535:   }
+16535: };
+16535: 
+16535: 
+16535: 
+16535: template <class T, class U>
+16535: class __gmp_expr;
+16535: 
+16535: 
+16535: 
+16535: template <class T>
+16535: struct __gmp_resolve_ref
+16535: {
+16535:   typedef T ref_type;
+16535: };
+16535: 
+16535: template <class T, class U>
+16535: struct __gmp_resolve_ref<__gmp_expr<T, U> >
+16535: {
+16535:   typedef const __gmp_expr<T, U> & ref_type;
+16535: };
+16535: 
+16535: 
+16535: template <class T, class U = T>
+16535: struct __gmp_resolve_expr;
+16535: 
+16535: template <>
+16535: struct __gmp_resolve_expr<mpz_t>
+16535: {
+16535:   typedef mpz_t value_type;
+16535:   typedef mpz_ptr ptr_type;
+16535:   typedef mpz_srcptr srcptr_type;
+16535: };
+16535: 
+16535: template <>
+16535: struct __gmp_resolve_expr<mpq_t>
+16535: {
+16535:   typedef mpq_t value_type;
+16535:   typedef mpq_ptr ptr_type;
+16535:   typedef mpq_srcptr srcptr_type;
+16535: };
+16535: 
+16535: template <>
+16535: struct __gmp_resolve_expr<mpf_t>
+16535: {
+16535:   typedef mpf_t value_type;
+16535:   typedef mpf_ptr ptr_type;
+16535:   typedef mpf_srcptr srcptr_type;
+16535: };
+16535: 
+16535: template <>
+16535: struct __gmp_resolve_expr<mpz_t, mpq_t>
+16535: {
+16535:   typedef mpq_t value_type;
+16535: };
+16535: 
+16535: template <>
+16535: struct __gmp_resolve_expr<mpq_t, mpz_t>
+16535: {
+16535:   typedef mpq_t value_type;
+16535: };
+16535: 
+16535: template <>
+16535: struct __gmp_resolve_expr<mpz_t, mpf_t>
+16535: {
+16535:   typedef mpf_t value_type;
+16535: };
+16535: 
+16535: template <>
+16535: struct __gmp_resolve_expr<mpf_t, mpz_t>
+16535: {
+16535:   typedef mpf_t value_type;
+16535: };
+16535: 
+16535: template <>
+16535: struct __gmp_resolve_expr<mpq_t, mpf_t>
+16535: {
+16535:   typedef mpf_t value_type;
+16535: };
+16535: 
+16535: template <>
+16535: struct __gmp_resolve_expr<mpf_t, mpq_t>
+16535: {
+16535:   typedef mpf_t value_type;
+16535: };
+16535: 
+16535: 
+16535: namespace std {
+16535:   template <class T, class U, class V, class W>
+16535:   struct common_type <__gmp_expr<T, U>, __gmp_expr<V, W> >
+16535:   {
+16535:   private:
+16535:     typedef typename __gmp_resolve_expr<T, V>::value_type X;
+16535:   public:
+16535:     typedef __gmp_expr<X, X> type;
+16535:   };
+16535: 
+16535:   template <class T, class U>
+16535:   struct common_type <__gmp_expr<T, U> >
+16535:   {
+16535:     typedef __gmp_expr<T, T> type;
+16535:   };
+16535: # 1332 "/usr/include/gmpxx.h" 3 4
+16535:   template <class T, class U> struct common_type <__gmp_expr<T, U>, signed char > { typedef __gmp_expr<T, T> type; }; template <class T, class U> struct common_type <signed char, __gmp_expr<T, U> > { typedef __gmp_expr<T, T> type; };
+16535:   template <class T, class U> struct common_type <__gmp_expr<T, U>, unsigned char > { typedef __gmp_expr<T, T> type; }; template <class T, class U> struct common_type <unsigned char, __gmp_expr<T, U> > { typedef __gmp_expr<T, T> type; };
+16535:   template <class T, class U> struct common_type <__gmp_expr<T, U>, signed int > { typedef __gmp_expr<T, T> type; }; template <class T, class U> struct common_type <signed int, __gmp_expr<T, U> > { typedef __gmp_expr<T, T> type; };
+16535:   template <class T, class U> struct common_type <__gmp_expr<T, U>, unsigned int > { typedef __gmp_expr<T, T> type; }; template <class T, class U> struct common_type <unsigned int, __gmp_expr<T, U> > { typedef __gmp_expr<T, T> type; };
+16535:   template <class T, class U> struct common_type <__gmp_expr<T, U>, signed short int > { typedef __gmp_expr<T, T> type; }; template <class T, class U> struct common_type <signed short int, __gmp_expr<T, U> > { typedef __gmp_expr<T, T> type; };
+16535:   template <class T, class U> struct common_type <__gmp_expr<T, U>, unsigned short int > { typedef __gmp_expr<T, T> type; }; template <class T, class U> struct common_type <unsigned short int, __gmp_expr<T, U> > { typedef __gmp_expr<T, T> type; };
+16535:   template <class T, class U> struct common_type <__gmp_expr<T, U>, signed long int > { typedef __gmp_expr<T, T> type; }; template <class T, class U> struct common_type <signed long int, __gmp_expr<T, U> > { typedef __gmp_expr<T, T> type; };
+16535:   template <class T, class U> struct common_type <__gmp_expr<T, U>, unsigned long int > { typedef __gmp_expr<T, T> type; }; template <class T, class U> struct common_type <unsigned long int, __gmp_expr<T, U> > { typedef __gmp_expr<T, T> type; };
+16535:   template <class T, class U> struct common_type <__gmp_expr<T, U>, float > { typedef __gmp_expr<T, T> type; }; template <class T, class U> struct common_type <float, __gmp_expr<T, U> > { typedef __gmp_expr<T, T> type; };
+16535:   template <class T, class U> struct common_type <__gmp_expr<T, U>, double > { typedef __gmp_expr<T, T> type; }; template <class T, class U> struct common_type <double, __gmp_expr<T, U> > { typedef __gmp_expr<T, T> type; };
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: template <class T, class Op>
+16535: struct __gmp_unary_expr
+16535: {
+16535:   typename __gmp_resolve_ref<T>::ref_type val;
+16535: 
+16535:   __gmp_unary_expr(const T &v) : val(v) { }
+16535: private:
+16535:   __gmp_unary_expr();
+16535: };
+16535: 
+16535: template <class T, class U, class Op>
+16535: struct __gmp_binary_expr
+16535: {
+16535:   typename __gmp_resolve_ref<T>::ref_type val1;
+16535:   typename __gmp_resolve_ref<U>::ref_type val2;
+16535: 
+16535:   __gmp_binary_expr(const T &v1, const U &v2) : val1(v1), val2(v2) { }
+16535: private:
+16535:   __gmp_binary_expr();
+16535: };
+16535: # 1428 "/usr/include/gmpxx.h" 3 4
+16535: template <>
+16535: class __gmp_expr<mpz_t, mpz_t>
+16535: {
+16535: private:
+16535:   typedef mpz_t value_type;
+16535:   value_type mp;
+16535: 
+16535: 
+16535:   void assign_ui(unsigned long l)
+16535:   {
+16535:     if ((__builtin_constant_p(l == 0) && (l == 0)))
+16535:       mp->_mp_size = 0;
+16535:     else
+16535:       __gmpz_set_ui(mp, l);
+16535:   }
+16535:   void assign_si(signed long l)
+16535:   {
+16535:     if ((__builtin_constant_p(l >= 0) && (l >= 0)))
+16535:       assign_ui(l);
+16535:     else if ((__builtin_constant_p(l <= 0) && (l <= 0)))
+16535:       {
+16535:  assign_ui(-static_cast<unsigned long>(l));
+16535:  __gmpz_neg(mp, mp);
+16535:       }
+16535:     else
+16535:       __gmpz_set_si(mp, l);
+16535:   }
+16535:   void assign_d (double d)
+16535:   {
+16535:     __gmpz_set_d (mp, d);
+16535:   }
+16535: 
+16535:   void init_ui(unsigned long l)
+16535:   {
+16535:     if ((__builtin_constant_p(l == 0) && (l == 0)))
+16535:       __gmpz_init(mp);
+16535:     else
+16535:       __gmpz_init_set_ui(mp, l);
+16535:   }
+16535:   void init_si(signed long l)
+16535:   {
+16535:     if ((__builtin_constant_p(l >= 0) && (l >= 0)))
+16535:       init_ui(l);
+16535:     else if ((__builtin_constant_p(l <= 0) && (l <= 0)))
+16535:       {
+16535:  init_ui(-static_cast<unsigned long>(l));
+16535:  __gmpz_neg(mp, mp);
+16535:       }
+16535:     else
+16535:       __gmpz_init_set_si(mp, l);
+16535:   }
+16535:   void init_d (double d)
+16535:   {
+16535:     __gmpz_init_set_d (mp, d);
+16535:   }
+16535: 
+16535: public:
+16535:   mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); }
+16535: 
+16535: 
+16535:   __gmp_expr() { __gmpz_init(mp); }
+16535: 
+16535:   __gmp_expr(const __gmp_expr &z) { __gmpz_init_set(mp, z.mp); }
+16535: 
+16535:   __gmp_expr(__gmp_expr &&z)
+16535:   { *mp = *z.mp; __gmpz_init(z.mp); }
+16535: 
+16535:   template <class T>
+16535:   __gmp_expr(const __gmp_expr<mpz_t, T> &expr)
+16535:   { __gmpz_init(mp); __gmp_set_expr(mp, expr); }
+16535:   template <class T, class U>
+16535:   explicit __gmp_expr(const __gmp_expr<T, U> &expr)
+16535:   { __gmpz_init(mp); __gmp_set_expr(mp, expr); }
+16535: 
+16535:   __gmp_expr(signed char c) { init_si(c); } __gmp_expr(unsigned char c) { init_ui(c); } __gmp_expr(signed int i) { init_si(i); } __gmp_expr(unsigned int i) { init_ui(i); } __gmp_expr(signed short int s) { init_si(s); } __gmp_expr(unsigned short int s) { init_ui(s); } __gmp_expr(signed long int l) { init_si(l); } __gmp_expr(unsigned long int l) { init_ui(l); } __gmp_expr(float f) { init_d(f); } __gmp_expr(double d) { init_d(d); }
+16535: 
+16535:   explicit __gmp_expr(const char *s, int base = 0)
+16535:   {
+16535:     if (__gmpz_init_set_str (mp, s, base) != 0)
+16535:       {
+16535:         __gmpz_clear (mp);
+16535:         throw std::invalid_argument ("mpz_set_str");
+16535:       }
+16535:   }
+16535:   explicit __gmp_expr(const std::string &s, int base = 0)
+16535:   {
+16535:     if (__gmpz_init_set_str(mp, s.c_str(), base) != 0)
+16535:       {
+16535:         __gmpz_clear (mp);
+16535:         throw std::invalid_argument ("mpz_set_str");
+16535:       }
+16535:   }
+16535: 
+16535:   explicit __gmp_expr(mpz_srcptr z) { __gmpz_init_set(mp, z); }
+16535: 
+16535:   ~__gmp_expr() { __gmpz_clear(mp); }
+16535: 
+16535:   void swap(__gmp_expr& z) noexcept { std::swap(*mp, *z.mp); }
+16535: 
+16535: 
+16535:   __gmp_expr & operator=(const __gmp_expr &z)
+16535:   { __gmpz_set(mp, z.mp); return *this; }
+16535: 
+16535:   __gmp_expr & operator=(__gmp_expr &&z) noexcept
+16535:   { swap(z); return *this; }
+16535: 
+16535:   template <class T, class U>
+16535:   __gmp_expr<value_type, value_type> & operator=(const __gmp_expr<T, U> &expr)
+16535:   { __gmp_set_expr(mp, expr); return *this; }
+16535: 
+16535:   __gmp_expr & operator=(signed char c) { assign_si(c); return *this; } __gmp_expr & operator=(unsigned char c) { assign_ui(c); return *this; } __gmp_expr & operator=(signed int i) { assign_si(i); return *this; } __gmp_expr & operator=(unsigned int i) { assign_ui(i); return *this; } __gmp_expr & operator=(signed short int s) { assign_si(s); return *this; } __gmp_expr & operator=(unsigned short int s) { assign_ui(s); return *this; } __gmp_expr & operator=(signed long int l) { assign_si(l); return *this; } __gmp_expr & operator=(unsigned long int l) { assign_ui(l); return *this; } __gmp_expr & operator=(float f) { assign_d(f); return *this; } __gmp_expr & operator=(double d) { assign_d(d); return *this; }
+16535: 
+16535:   __gmp_expr & operator=(const char *s)
+16535:   {
+16535:     if (__gmpz_set_str (mp, s, 0) != 0)
+16535:       throw std::invalid_argument ("mpz_set_str");
+16535:     return *this;
+16535:   }
+16535:   __gmp_expr & operator=(const std::string &s)
+16535:   {
+16535:     if (__gmpz_set_str(mp, s.c_str(), 0) != 0)
+16535:       throw std::invalid_argument ("mpz_set_str");
+16535:     return *this;
+16535:   }
+16535: 
+16535: 
+16535:   int set_str(const char *s, int base)
+16535:   { return __gmpz_set_str(mp, s, base); }
+16535:   int set_str(const std::string &s, int base)
+16535:   { return __gmpz_set_str(mp, s.c_str(), base); }
+16535:   std::string get_str(int base = 10) const
+16535:   {
+16535:     __gmp_alloc_cstring temp(__gmpz_get_str(0, base, mp));
+16535:     return std::string(temp.str);
+16535:   }
+16535: 
+16535: 
+16535:   mpz_srcptr __get_mp() const { return mp; }
+16535:   mpz_ptr __get_mp() { return mp; }
+16535:   mpz_srcptr get_mpz_t() const { return mp; }
+16535:   mpz_ptr get_mpz_t() { return mp; }
+16535: 
+16535:   signed long int get_si() const { return __gmpz_get_si(mp); }
+16535:   unsigned long int get_ui() const { return __gmpz_get_ui(mp); }
+16535:   double get_d() const { return __gmpz_get_d(mp); }
+16535: 
+16535: 
+16535: 
+16535:   bool fits_sint_p() const { return __gmpz_fits_sint_p(mp); }
+16535:   bool fits_uint_p() const { return __gmpz_fits_uint_p(mp); }
+16535:   bool fits_sshort_p() const { return __gmpz_fits_sshort_p(mp); }
+16535:   bool fits_ushort_p() const { return __gmpz_fits_ushort_p(mp); }
+16535:   bool fits_slong_p() const { return __gmpz_fits_slong_p(mp); }
+16535:   bool fits_ulong_p() const { return __gmpz_fits_ulong_p(mp); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   explicit operator bool() const { return mp->_mp_size != 0; }
+16535: 
+16535: 
+16535: 
+16535:   template <class T, class U> __gmp_expr<value_type, value_type> & operator+=(const __gmp_expr<T, U> &); __gmp_expr & operator+=(signed char); __gmp_expr & operator+=(unsigned char); __gmp_expr & operator+=(signed int); __gmp_expr & operator+=(unsigned int); __gmp_expr & operator+=(signed short int); __gmp_expr & operator+=(unsigned short int); __gmp_expr & operator+=(signed long int); __gmp_expr & operator+=(unsigned long int); __gmp_expr & operator+=(float); __gmp_expr & operator+=(double);
+16535:   template <class T, class U> __gmp_expr<value_type, value_type> & operator-=(const __gmp_expr<T, U> &); __gmp_expr & operator-=(signed char); __gmp_expr & operator-=(unsigned char); __gmp_expr & operator-=(signed int); __gmp_expr & operator-=(unsigned int); __gmp_expr & operator-=(signed short int); __gmp_expr & operator-=(unsigned short int); __gmp_expr & operator-=(signed long int); __gmp_expr & operator-=(unsigned long int); __gmp_expr & operator-=(float); __gmp_expr & operator-=(double);
+16535:   template <class T, class U> __gmp_expr<value_type, value_type> & operator*=(const __gmp_expr<T, U> &); __gmp_expr & operator*=(signed char); __gmp_expr & operator*=(unsigned char); __gmp_expr & operator*=(signed int); __gmp_expr & operator*=(unsigned int); __gmp_expr & operator*=(signed short int); __gmp_expr & operator*=(unsigned short int); __gmp_expr & operator*=(signed long int); __gmp_expr & operator*=(unsigned long int); __gmp_expr & operator*=(float); __gmp_expr & operator*=(double);
+16535:   template <class T, class U> __gmp_expr<value_type, value_type> & operator/=(const __gmp_expr<T, U> &); __gmp_expr & operator/=(signed char); __gmp_expr & operator/=(unsigned char); __gmp_expr & operator/=(signed int); __gmp_expr & operator/=(unsigned int); __gmp_expr & operator/=(signed short int); __gmp_expr & operator/=(unsigned short int); __gmp_expr & operator/=(signed long int); __gmp_expr & operator/=(unsigned long int); __gmp_expr & operator/=(float); __gmp_expr & operator/=(double);
+16535:   template <class T, class U> __gmp_expr<value_type, value_type> & operator%=(const __gmp_expr<T, U> &); __gmp_expr & operator%=(signed char); __gmp_expr & operator%=(unsigned char); __gmp_expr & operator%=(signed int); __gmp_expr & operator%=(unsigned int); __gmp_expr & operator%=(signed short int); __gmp_expr & operator%=(unsigned short int); __gmp_expr & operator%=(signed long int); __gmp_expr & operator%=(unsigned long int); __gmp_expr & operator%=(float); __gmp_expr & operator%=(double);
+16535: 
+16535:   template <class T, class U> __gmp_expr<value_type, value_type> & operator&=(const __gmp_expr<T, U> &); __gmp_expr & operator&=(signed char); __gmp_expr & operator&=(unsigned char); __gmp_expr & operator&=(signed int); __gmp_expr & operator&=(unsigned int); __gmp_expr & operator&=(signed short int); __gmp_expr & operator&=(unsigned short int); __gmp_expr & operator&=(signed long int); __gmp_expr & operator&=(unsigned long int); __gmp_expr & operator&=(float); __gmp_expr & operator&=(double);
+16535:   template <class T, class U> __gmp_expr<value_type, value_type> & operator|=(const __gmp_expr<T, U> &); __gmp_expr & operator|=(signed char); __gmp_expr & operator|=(unsigned char); __gmp_expr & operator|=(signed int); __gmp_expr & operator|=(unsigned int); __gmp_expr & operator|=(signed short int); __gmp_expr & operator|=(unsigned short int); __gmp_expr & operator|=(signed long int); __gmp_expr & operator|=(unsigned long int); __gmp_expr & operator|=(float); __gmp_expr & operator|=(double);
+16535:   template <class T, class U> __gmp_expr<value_type, value_type> & operator^=(const __gmp_expr<T, U> &); __gmp_expr & operator^=(signed char); __gmp_expr & operator^=(unsigned char); __gmp_expr & operator^=(signed int); __gmp_expr & operator^=(unsigned int); __gmp_expr & operator^=(signed short int); __gmp_expr & operator^=(unsigned short int); __gmp_expr & operator^=(signed long int); __gmp_expr & operator^=(unsigned long int); __gmp_expr & operator^=(float); __gmp_expr & operator^=(double);
+16535: 
+16535:   __gmp_expr & operator<<=(mp_bitcnt_t);
+16535:   __gmp_expr & operator>>=(mp_bitcnt_t);
+16535: 
+16535:   inline __gmp_expr & operator++(); inline __gmp_expr operator++(int);
+16535:   inline __gmp_expr & operator--(); inline __gmp_expr operator--(int);
+16535: };
+16535: 
+16535: typedef __gmp_expr<mpz_t, mpz_t> mpz_class;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <>
+16535: class __gmp_expr<mpq_t, mpq_t>
+16535: {
+16535: private:
+16535:   typedef mpq_t value_type;
+16535:   value_type mp;
+16535: 
+16535: 
+16535:   void assign_ui(unsigned long l) { __gmpq_set_ui(mp, l, 1); }
+16535:   void assign_si(signed long l)
+16535:   {
+16535:     if ((__builtin_constant_p(l >= 0) && (l >= 0)))
+16535:       assign_ui(l);
+16535:     else
+16535:       __gmpq_set_si(mp, l, 1);
+16535:   }
+16535:   void assign_d (double d) { __gmpq_set_d (mp, d); }
+16535: 
+16535:   void init_ui(unsigned long l) { __gmpq_init(mp); get_num() = l; }
+16535:   void init_si(signed long l) { __gmpq_init(mp); get_num() = l; }
+16535:   void init_d (double d) { __gmpq_init(mp); assign_d (d); }
+16535: 
+16535: public:
+16535:   mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); }
+16535:   void canonicalize() { __gmpq_canonicalize(mp); }
+16535: 
+16535: 
+16535:   __gmp_expr() { __gmpq_init(mp); }
+16535: 
+16535:   __gmp_expr(const __gmp_expr &q)
+16535:   {
+16535:     __gmpz_init_set((&((mp)->_mp_num)), (&((q.mp)->_mp_num)));
+16535:     __gmpz_init_set((&((mp)->_mp_den)), (&((q.mp)->_mp_den)));
+16535:   }
+16535: 
+16535:   __gmp_expr(__gmp_expr &&q)
+16535:   { *mp = *q.mp; __gmpq_init(q.mp); }
+16535: 
+16535:   template <class T>
+16535:   __gmp_expr(const __gmp_expr<mpz_t, T> &expr)
+16535:   { __gmpq_init(mp); __gmp_set_expr(mp, expr); }
+16535:   template <class T>
+16535:   __gmp_expr(const __gmp_expr<mpq_t, T> &expr)
+16535:   { __gmpq_init(mp); __gmp_set_expr(mp, expr); }
+16535:   template <class T, class U>
+16535:   explicit __gmp_expr(const __gmp_expr<T, U> &expr)
+16535:   { __gmpq_init(mp); __gmp_set_expr(mp, expr); }
+16535: 
+16535:   __gmp_expr(signed char c) { init_si(c); } __gmp_expr(unsigned char c) { init_ui(c); } __gmp_expr(signed int i) { init_si(i); } __gmp_expr(unsigned int i) { init_ui(i); } __gmp_expr(signed short int s) { init_si(s); } __gmp_expr(unsigned short int s) { init_ui(s); } __gmp_expr(signed long int l) { init_si(l); } __gmp_expr(unsigned long int l) { init_ui(l); } __gmp_expr(float f) { init_d(f); } __gmp_expr(double d) { init_d(d); }
+16535: 
+16535:   explicit __gmp_expr(const char *s, int base = 0)
+16535:   {
+16535:     __gmpq_init (mp);
+16535: 
+16535: 
+16535:     if (s == 0)
+16535:       {
+16535: 
+16535:  __gmpz_set_si((&((mp)->_mp_den)), base);
+16535:       }
+16535:     else if (__gmpq_set_str(mp, s, base) != 0)
+16535:       {
+16535:         __gmpq_clear (mp);
+16535:         throw std::invalid_argument ("mpq_set_str");
+16535:       }
+16535:   }
+16535:   explicit __gmp_expr(const std::string &s, int base = 0)
+16535:   {
+16535:     __gmpq_init(mp);
+16535:     if (__gmpq_set_str (mp, s.c_str(), base) != 0)
+16535:       {
+16535:         __gmpq_clear (mp);
+16535:         throw std::invalid_argument ("mpq_set_str");
+16535:       }
+16535:   }
+16535:   explicit __gmp_expr(mpq_srcptr q)
+16535:   {
+16535:     __gmpz_init_set((&((mp)->_mp_num)), (&((q)->_mp_num)));
+16535:     __gmpz_init_set((&((mp)->_mp_den)), (&((q)->_mp_den)));
+16535:   }
+16535: 
+16535:   __gmp_expr(const mpz_class &num, const mpz_class &den)
+16535:   {
+16535:     __gmpz_init_set((&((mp)->_mp_num)), num.get_mpz_t());
+16535:     __gmpz_init_set((&((mp)->_mp_den)), den.get_mpz_t());
+16535:   }
+16535: 
+16535:   ~__gmp_expr() { __gmpq_clear(mp); }
+16535: 
+16535:   void swap(__gmp_expr& q) noexcept { std::swap(*mp, *q.mp); }
+16535: 
+16535: 
+16535:   __gmp_expr & operator=(const __gmp_expr &q)
+16535:   { __gmpq_set(mp, q.mp); return *this; }
+16535: 
+16535:   __gmp_expr & operator=(__gmp_expr &&q) noexcept
+16535:   { swap(q); return *this; }
+16535:   __gmp_expr & operator=(mpz_class &&z) noexcept
+16535:   { get_num() = std::move(z); get_den() = 1u; return *this; }
+16535: 
+16535:   template <class T, class U>
+16535:   __gmp_expr<value_type, value_type> & operator=(const __gmp_expr<T, U> &expr)
+16535:   { __gmp_set_expr(mp, expr); return *this; }
+16535: 
+16535:   __gmp_expr & operator=(signed char c) { assign_si(c); return *this; } __gmp_expr & operator=(unsigned char c) { assign_ui(c); return *this; } __gmp_expr & operator=(signed int i) { assign_si(i); return *this; } __gmp_expr & operator=(unsigned int i) { assign_ui(i); return *this; } __gmp_expr & operator=(signed short int s) { assign_si(s); return *this; } __gmp_expr & operator=(unsigned short int s) { assign_ui(s); return *this; } __gmp_expr & operator=(signed long int l) { assign_si(l); return *this; } __gmp_expr & operator=(unsigned long int l) { assign_ui(l); return *this; } __gmp_expr & operator=(float f) { assign_d(f); return *this; } __gmp_expr & operator=(double d) { assign_d(d); return *this; }
+16535: 
+16535:   __gmp_expr & operator=(const char *s)
+16535:   {
+16535:     if (__gmpq_set_str (mp, s, 0) != 0)
+16535:       throw std::invalid_argument ("mpq_set_str");
+16535:     return *this;
+16535:   }
+16535:   __gmp_expr & operator=(const std::string &s)
+16535:   {
+16535:     if (__gmpq_set_str(mp, s.c_str(), 0) != 0)
+16535:       throw std::invalid_argument ("mpq_set_str");
+16535:     return *this;
+16535:   }
+16535: 
+16535: 
+16535:   int set_str(const char *s, int base)
+16535:   { return __gmpq_set_str(mp, s, base); }
+16535:   int set_str(const std::string &s, int base)
+16535:   { return __gmpq_set_str(mp, s.c_str(), base); }
+16535:   std::string get_str(int base = 10) const
+16535:   {
+16535:     __gmp_alloc_cstring temp(__gmpq_get_str(0, base, mp));
+16535:     return std::string(temp.str);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const mpz_class & get_num() const
+16535:   { return reinterpret_cast<const mpz_class &>(*(&((mp)->_mp_num))); }
+16535:   mpz_class & get_num()
+16535:   { return reinterpret_cast<mpz_class &>(*(&((mp)->_mp_num))); }
+16535:   const mpz_class & get_den() const
+16535:   { return reinterpret_cast<const mpz_class &>(*(&((mp)->_mp_den))); }
+16535:   mpz_class & get_den()
+16535:   { return reinterpret_cast<mpz_class &>(*(&((mp)->_mp_den))); }
+16535: 
+16535:   mpq_srcptr __get_mp() const { return mp; }
+16535:   mpq_ptr __get_mp() { return mp; }
+16535:   mpq_srcptr get_mpq_t() const { return mp; }
+16535:   mpq_ptr get_mpq_t() { return mp; }
+16535: 
+16535:   mpz_srcptr get_num_mpz_t() const { return (&((mp)->_mp_num)); }
+16535:   mpz_ptr get_num_mpz_t() { return (&((mp)->_mp_num)); }
+16535:   mpz_srcptr get_den_mpz_t() const { return (&((mp)->_mp_den)); }
+16535:   mpz_ptr get_den_mpz_t() { return (&((mp)->_mp_den)); }
+16535: 
+16535:   double get_d() const { return __gmpq_get_d(mp); }
+16535: 
+16535: 
+16535:   explicit operator bool() const { return (&((mp)->_mp_num))->_mp_size != 0; }
+16535: 
+16535: 
+16535: 
+16535:   template <class T, class U> __gmp_expr<value_type, value_type> & operator+=(const __gmp_expr<T, U> &); __gmp_expr & operator+=(signed char); __gmp_expr & operator+=(unsigned char); __gmp_expr & operator+=(signed int); __gmp_expr & operator+=(unsigned int); __gmp_expr & operator+=(signed short int); __gmp_expr & operator+=(unsigned short int); __gmp_expr & operator+=(signed long int); __gmp_expr & operator+=(unsigned long int); __gmp_expr & operator+=(float); __gmp_expr & operator+=(double);
+16535:   template <class T, class U> __gmp_expr<value_type, value_type> & operator-=(const __gmp_expr<T, U> &); __gmp_expr & operator-=(signed char); __gmp_expr & operator-=(unsigned char); __gmp_expr & operator-=(signed int); __gmp_expr & operator-=(unsigned int); __gmp_expr & operator-=(signed short int); __gmp_expr & operator-=(unsigned short int); __gmp_expr & operator-=(signed long int); __gmp_expr & operator-=(unsigned long int); __gmp_expr & operator-=(float); __gmp_expr & operator-=(double);
+16535:   template <class T, class U> __gmp_expr<value_type, value_type> & operator*=(const __gmp_expr<T, U> &); __gmp_expr & operator*=(signed char); __gmp_expr & operator*=(unsigned char); __gmp_expr & operator*=(signed int); __gmp_expr & operator*=(unsigned int); __gmp_expr & operator*=(signed short int); __gmp_expr & operator*=(unsigned short int); __gmp_expr & operator*=(signed long int); __gmp_expr & operator*=(unsigned long int); __gmp_expr & operator*=(float); __gmp_expr & operator*=(double);
+16535:   template <class T, class U> __gmp_expr<value_type, value_type> & operator/=(const __gmp_expr<T, U> &); __gmp_expr & operator/=(signed char); __gmp_expr & operator/=(unsigned char); __gmp_expr & operator/=(signed int); __gmp_expr & operator/=(unsigned int); __gmp_expr & operator/=(signed short int); __gmp_expr & operator/=(unsigned short int); __gmp_expr & operator/=(signed long int); __gmp_expr & operator/=(unsigned long int); __gmp_expr & operator/=(float); __gmp_expr & operator/=(double);
+16535: 
+16535:   __gmp_expr & operator<<=(mp_bitcnt_t);
+16535:   __gmp_expr & operator>>=(mp_bitcnt_t);
+16535: 
+16535:   inline __gmp_expr & operator++(); inline __gmp_expr operator++(int);
+16535:   inline __gmp_expr & operator--(); inline __gmp_expr operator--(int);
+16535: };
+16535: 
+16535: typedef __gmp_expr<mpq_t, mpq_t> mpq_class;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <>
+16535: class __gmp_expr<mpf_t, mpf_t>
+16535: {
+16535: private:
+16535:   typedef mpf_t value_type;
+16535:   value_type mp;
+16535: 
+16535: 
+16535:   void assign_ui(unsigned long l) { __gmpf_set_ui(mp, l); }
+16535:   void assign_si(signed long l)
+16535:   {
+16535:     if ((__builtin_constant_p(l >= 0) && (l >= 0)))
+16535:       assign_ui(l);
+16535:     else
+16535:       __gmpf_set_si(mp, l);
+16535:   }
+16535:   void assign_d (double d) { __gmpf_set_d (mp, d); }
+16535: 
+16535:   void init_ui(unsigned long l)
+16535:   {
+16535:     if ((__builtin_constant_p(l == 0) && (l == 0)))
+16535:       __gmpf_init(mp);
+16535:     else
+16535:       __gmpf_init_set_ui(mp, l);
+16535:   }
+16535:   void init_si(signed long l)
+16535:   {
+16535:     if ((__builtin_constant_p(l >= 0) && (l >= 0)))
+16535:       init_ui(l);
+16535:     else
+16535:       __gmpf_init_set_si(mp, l);
+16535:   }
+16535:   void init_d (double d) { __gmpf_init_set_d (mp, d); }
+16535: 
+16535: public:
+16535:   mp_bitcnt_t get_prec() const { return __gmpf_get_prec(mp); }
+16535: 
+16535:   void set_prec(mp_bitcnt_t prec) { __gmpf_set_prec(mp, prec); }
+16535:   void set_prec_raw(mp_bitcnt_t prec) { __gmpf_set_prec_raw(mp, prec); }
+16535: 
+16535: 
+16535:   __gmp_expr() { __gmpf_init(mp); }
+16535: 
+16535:   __gmp_expr(const __gmp_expr &f)
+16535:   { __gmpf_init2(mp, f.get_prec()); __gmpf_set(mp, f.mp); }
+16535: 
+16535:   __gmp_expr(__gmp_expr &&f)
+16535:   { *mp = *f.mp; __gmpf_init2(f.mp, get_prec()); }
+16535: 
+16535:   __gmp_expr(const __gmp_expr &f, mp_bitcnt_t prec)
+16535:   { __gmpf_init2(mp, prec); __gmpf_set(mp, f.mp); }
+16535:   template <class T, class U>
+16535:   __gmp_expr(const __gmp_expr<T, U> &expr)
+16535:   { __gmpf_init2(mp, expr.get_prec()); __gmp_set_expr(mp, expr); }
+16535:   template <class T, class U>
+16535:   __gmp_expr(const __gmp_expr<T, U> &expr, mp_bitcnt_t prec)
+16535:   { __gmpf_init2(mp, prec); __gmp_set_expr(mp, expr); }
+16535: 
+16535:   __gmp_expr(signed char c) { init_si(c); } __gmp_expr(unsigned char c) { init_ui(c); } __gmp_expr(signed int i) { init_si(i); } __gmp_expr(unsigned int i) { init_ui(i); } __gmp_expr(signed short int s) { init_si(s); } __gmp_expr(unsigned short int s) { init_ui(s); } __gmp_expr(signed long int l) { init_si(l); } __gmp_expr(unsigned long int l) { init_ui(l); } __gmp_expr(float f) { init_d(f); } __gmp_expr(double d) { init_d(d); }
+16535: 
+16535:   __gmp_expr(signed char c, mp_bitcnt_t prec)
+16535:   { __gmpf_init2(mp, prec); __gmpf_set_si(mp, c); }
+16535:   __gmp_expr(unsigned char c, mp_bitcnt_t prec)
+16535:   { __gmpf_init2(mp, prec); __gmpf_set_ui(mp, c); }
+16535: 
+16535:   __gmp_expr(signed int i, mp_bitcnt_t prec)
+16535:   { __gmpf_init2(mp, prec); __gmpf_set_si(mp, i); }
+16535:   __gmp_expr(unsigned int i, mp_bitcnt_t prec)
+16535:   { __gmpf_init2(mp, prec); __gmpf_set_ui(mp, i); }
+16535: 
+16535:   __gmp_expr(signed short int s, mp_bitcnt_t prec)
+16535:   { __gmpf_init2(mp, prec); __gmpf_set_si(mp, s); }
+16535:   __gmp_expr(unsigned short int s, mp_bitcnt_t prec)
+16535:   { __gmpf_init2(mp, prec); __gmpf_set_ui(mp, s); }
+16535: 
+16535:   __gmp_expr(signed long int l, mp_bitcnt_t prec)
+16535:   { __gmpf_init2(mp, prec); __gmpf_set_si(mp, l); }
+16535:   __gmp_expr(unsigned long int l, mp_bitcnt_t prec)
+16535:   { __gmpf_init2(mp, prec); __gmpf_set_ui(mp, l); }
+16535: 
+16535:   __gmp_expr(float f, mp_bitcnt_t prec)
+16535:   { __gmpf_init2(mp, prec); __gmpf_set_d(mp, f); }
+16535:   __gmp_expr(double d, mp_bitcnt_t prec)
+16535:   { __gmpf_init2(mp, prec); __gmpf_set_d(mp, d); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   explicit __gmp_expr(const char *s)
+16535:   {
+16535:     if (__gmpf_init_set_str (mp, s, 0) != 0)
+16535:       {
+16535:         __gmpf_clear (mp);
+16535:         throw std::invalid_argument ("mpf_set_str");
+16535:       }
+16535:   }
+16535:   __gmp_expr(const char *s, mp_bitcnt_t prec, int base = 0)
+16535:   {
+16535:     __gmpf_init2(mp, prec);
+16535:     if (__gmpf_set_str(mp, s, base) != 0)
+16535:       {
+16535:         __gmpf_clear (mp);
+16535:         throw std::invalid_argument ("mpf_set_str");
+16535:       }
+16535:   }
+16535:   explicit __gmp_expr(const std::string &s)
+16535:   {
+16535:     if (__gmpf_init_set_str(mp, s.c_str(), 0) != 0)
+16535:       {
+16535:         __gmpf_clear (mp);
+16535:         throw std::invalid_argument ("mpf_set_str");
+16535:       }
+16535:   }
+16535:   __gmp_expr(const std::string &s, mp_bitcnt_t prec, int base = 0)
+16535:   {
+16535:     __gmpf_init2(mp, prec);
+16535:     if (__gmpf_set_str(mp, s.c_str(), base) != 0)
+16535:       {
+16535:         __gmpf_clear (mp);
+16535:         throw std::invalid_argument ("mpf_set_str");
+16535:       }
+16535:   }
+16535: 
+16535:   explicit __gmp_expr(mpf_srcptr f)
+16535:   { __gmpf_init2(mp, __gmpf_get_prec(f)); __gmpf_set(mp, f); }
+16535:   __gmp_expr(mpf_srcptr f, mp_bitcnt_t prec)
+16535:   { __gmpf_init2(mp, prec); __gmpf_set(mp, f); }
+16535: 
+16535:   ~__gmp_expr() { __gmpf_clear(mp); }
+16535: 
+16535:   void swap(__gmp_expr& f) noexcept { std::swap(*mp, *f.mp); }
+16535: 
+16535: 
+16535:   __gmp_expr & operator=(const __gmp_expr &f)
+16535:   { __gmpf_set(mp, f.mp); return *this; }
+16535: 
+16535:   __gmp_expr & operator=(__gmp_expr &&f) noexcept
+16535:   { swap(f); return *this; }
+16535: 
+16535:   template <class T, class U>
+16535:   __gmp_expr<value_type, value_type> & operator=(const __gmp_expr<T, U> &expr)
+16535:   { __gmp_set_expr(mp, expr); return *this; }
+16535: 
+16535:   __gmp_expr & operator=(signed char c) { assign_si(c); return *this; } __gmp_expr & operator=(unsigned char c) { assign_ui(c); return *this; } __gmp_expr & operator=(signed int i) { assign_si(i); return *this; } __gmp_expr & operator=(unsigned int i) { assign_ui(i); return *this; } __gmp_expr & operator=(signed short int s) { assign_si(s); return *this; } __gmp_expr & operator=(unsigned short int s) { assign_ui(s); return *this; } __gmp_expr & operator=(signed long int l) { assign_si(l); return *this; } __gmp_expr & operator=(unsigned long int l) { assign_ui(l); return *this; } __gmp_expr & operator=(float f) { assign_d(f); return *this; } __gmp_expr & operator=(double d) { assign_d(d); return *this; }
+16535: 
+16535:   __gmp_expr & operator=(const char *s)
+16535:   {
+16535:     if (__gmpf_set_str (mp, s, 0) != 0)
+16535:       throw std::invalid_argument ("mpf_set_str");
+16535:     return *this;
+16535:   }
+16535:   __gmp_expr & operator=(const std::string &s)
+16535:   {
+16535:     if (__gmpf_set_str(mp, s.c_str(), 0) != 0)
+16535:       throw std::invalid_argument ("mpf_set_str");
+16535:     return *this;
+16535:   }
+16535: 
+16535: 
+16535:   int set_str(const char *s, int base)
+16535:   { return __gmpf_set_str(mp, s, base); }
+16535:   int set_str(const std::string &s, int base)
+16535:   { return __gmpf_set_str(mp, s.c_str(), base); }
+16535:   std::string get_str(mp_exp_t &expo, int base = 10, size_t size = 0) const
+16535:   {
+16535:     __gmp_alloc_cstring temp(__gmpf_get_str(0, &expo, base, size, mp));
+16535:     return std::string(temp.str);
+16535:   }
+16535: 
+16535: 
+16535:   mpf_srcptr __get_mp() const { return mp; }
+16535:   mpf_ptr __get_mp() { return mp; }
+16535:   mpf_srcptr get_mpf_t() const { return mp; }
+16535:   mpf_ptr get_mpf_t() { return mp; }
+16535: 
+16535:   signed long int get_si() const { return __gmpf_get_si(mp); }
+16535:   unsigned long int get_ui() const { return __gmpf_get_ui(mp); }
+16535:   double get_d() const { return __gmpf_get_d(mp); }
+16535: 
+16535: 
+16535: 
+16535:   bool fits_sint_p() const { return __gmpf_fits_sint_p(mp); }
+16535:   bool fits_uint_p() const { return __gmpf_fits_uint_p(mp); }
+16535:   bool fits_sshort_p() const { return __gmpf_fits_sshort_p(mp); }
+16535:   bool fits_ushort_p() const { return __gmpf_fits_ushort_p(mp); }
+16535:   bool fits_slong_p() const { return __gmpf_fits_slong_p(mp); }
+16535:   bool fits_ulong_p() const { return __gmpf_fits_ulong_p(mp); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   explicit operator bool() const { return mp->_mp_size != 0; }
+16535: 
+16535: 
+16535: 
+16535:   template <class T, class U> __gmp_expr<value_type, value_type> & operator+=(const __gmp_expr<T, U> &); __gmp_expr & operator+=(signed char); __gmp_expr & operator+=(unsigned char); __gmp_expr & operator+=(signed int); __gmp_expr & operator+=(unsigned int); __gmp_expr & operator+=(signed short int); __gmp_expr & operator+=(unsigned short int); __gmp_expr & operator+=(signed long int); __gmp_expr & operator+=(unsigned long int); __gmp_expr & operator+=(float); __gmp_expr & operator+=(double);
+16535:   template <class T, class U> __gmp_expr<value_type, value_type> & operator-=(const __gmp_expr<T, U> &); __gmp_expr & operator-=(signed char); __gmp_expr & operator-=(unsigned char); __gmp_expr & operator-=(signed int); __gmp_expr & operator-=(unsigned int); __gmp_expr & operator-=(signed short int); __gmp_expr & operator-=(unsigned short int); __gmp_expr & operator-=(signed long int); __gmp_expr & operator-=(unsigned long int); __gmp_expr & operator-=(float); __gmp_expr & operator-=(double);
+16535:   template <class T, class U> __gmp_expr<value_type, value_type> & operator*=(const __gmp_expr<T, U> &); __gmp_expr & operator*=(signed char); __gmp_expr & operator*=(unsigned char); __gmp_expr & operator*=(signed int); __gmp_expr & operator*=(unsigned int); __gmp_expr & operator*=(signed short int); __gmp_expr & operator*=(unsigned short int); __gmp_expr & operator*=(signed long int); __gmp_expr & operator*=(unsigned long int); __gmp_expr & operator*=(float); __gmp_expr & operator*=(double);
+16535:   template <class T, class U> __gmp_expr<value_type, value_type> & operator/=(const __gmp_expr<T, U> &); __gmp_expr & operator/=(signed char); __gmp_expr & operator/=(unsigned char); __gmp_expr & operator/=(signed int); __gmp_expr & operator/=(unsigned int); __gmp_expr & operator/=(signed short int); __gmp_expr & operator/=(unsigned short int); __gmp_expr & operator/=(signed long int); __gmp_expr & operator/=(unsigned long int); __gmp_expr & operator/=(float); __gmp_expr & operator/=(double);
+16535: 
+16535:   __gmp_expr & operator<<=(mp_bitcnt_t);
+16535:   __gmp_expr & operator>>=(mp_bitcnt_t);
+16535: 
+16535:   inline __gmp_expr & operator++(); inline __gmp_expr operator++(int);
+16535:   inline __gmp_expr & operator--(); inline __gmp_expr operator--(int);
+16535: };
+16535: 
+16535: typedef __gmp_expr<mpf_t, mpf_t> mpf_class;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: inline mpz_class operator"" _mpz(const char* s)
+16535: {
+16535:   return mpz_class(s);
+16535: }
+16535: 
+16535: inline mpq_class operator"" _mpq(const char* s)
+16535: {
+16535:   mpq_class q;
+16535:   q.get_num() = s;
+16535:   return q;
+16535: }
+16535: 
+16535: inline mpf_class operator"" _mpf(const char* s)
+16535: {
+16535:   return mpf_class(s);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <class T, class U>
+16535: inline std::ostream & operator<<
+16535: (std::ostream &o, const __gmp_expr<T, U> &expr)
+16535: {
+16535:   __gmp_expr<T, T> const& temp(expr);
+16535:   return o << temp.__get_mp();
+16535: }
+16535: 
+16535: template <class T>
+16535: inline std::istream & operator>>(std::istream &i, __gmp_expr<T, T> &expr)
+16535: {
+16535:   return i >> expr.__get_mp();
+16535: }
+16535: # 2055 "/usr/include/gmpxx.h" 3 4
+16535: inline void __gmp_set_expr(mpz_ptr z, const mpz_class &w)
+16535: {
+16535:   __gmpz_set(z, w.get_mpz_t());
+16535: }
+16535: 
+16535: template <class T>
+16535: inline void __gmp_set_expr(mpz_ptr z, const __gmp_expr<mpz_t, T> &expr)
+16535: {
+16535:   expr.eval(z);
+16535: }
+16535: 
+16535: template <class T>
+16535: inline void __gmp_set_expr(mpz_ptr z, const __gmp_expr<mpq_t, T> &expr)
+16535: {
+16535:   mpq_class const& temp(expr);
+16535:   __gmpz_set_q(z, temp.get_mpq_t());
+16535: }
+16535: 
+16535: template <class T>
+16535: inline void __gmp_set_expr(mpz_ptr z, const __gmp_expr<mpf_t, T> &expr)
+16535: {
+16535:   mpf_class const& temp(expr);
+16535:   __gmpz_set_f(z, temp.get_mpf_t());
+16535: }
+16535: 
+16535: inline void __gmp_set_expr(mpq_ptr q, const mpz_class &z)
+16535: {
+16535:   __gmpq_set_z(q, z.get_mpz_t());
+16535: }
+16535: 
+16535: template <class T>
+16535: inline void __gmp_set_expr(mpq_ptr q, const __gmp_expr<mpz_t, T> &expr)
+16535: {
+16535:   __gmp_set_expr((&((q)->_mp_num)), expr);
+16535:   __gmpz_set_ui((&((q)->_mp_den)), 1);
+16535: }
+16535: 
+16535: inline void __gmp_set_expr(mpq_ptr q, const mpq_class &r)
+16535: {
+16535:   __gmpq_set(q, r.get_mpq_t());
+16535: }
+16535: 
+16535: template <class T>
+16535: inline void __gmp_set_expr(mpq_ptr q, const __gmp_expr<mpq_t, T> &expr)
+16535: {
+16535:   expr.eval(q);
+16535: }
+16535: 
+16535: template <class T>
+16535: inline void __gmp_set_expr(mpq_ptr q, const __gmp_expr<mpf_t, T> &expr)
+16535: {
+16535:   mpf_class const& temp(expr);
+16535:   __gmpq_set_f(q, temp.get_mpf_t());
+16535: }
+16535: 
+16535: template <class T>
+16535: inline void __gmp_set_expr(mpf_ptr f, const __gmp_expr<mpz_t, T> &expr)
+16535: {
+16535:   mpz_class const& temp(expr);
+16535:   __gmpf_set_z(f, temp.get_mpz_t());
+16535: }
+16535: 
+16535: template <class T>
+16535: inline void __gmp_set_expr(mpf_ptr f, const __gmp_expr<mpq_t, T> &expr)
+16535: {
+16535:   mpq_class const& temp(expr);
+16535:   __gmpf_set_q(f, temp.get_mpq_t());
+16535: }
+16535: 
+16535: inline void __gmp_set_expr(mpf_ptr f, const mpf_class &g)
+16535: {
+16535:   __gmpf_set(f, g.get_mpf_t());
+16535: }
+16535: 
+16535: template <class T>
+16535: inline void __gmp_set_expr(mpf_ptr f, const __gmp_expr<mpf_t, T> &expr)
+16535: {
+16535:   expr.eval(f);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <class T>
+16535: class __gmp_temp
+16535: {
+16535:   __gmp_expr<T, T> val;
+16535:   public:
+16535:   template<class U, class V>
+16535:   __gmp_temp(U const& u, V) : val (u) {}
+16535:   typename __gmp_resolve_expr<T>::srcptr_type
+16535:   __get_mp() const { return val.__get_mp(); }
+16535: };
+16535: 
+16535: template <>
+16535: class __gmp_temp <mpf_t>
+16535: {
+16535:   mpf_class val;
+16535:   public:
+16535:   template<class U>
+16535:   __gmp_temp(U const& u, mpf_ptr res) : val (u, __gmpf_get_prec(res)) {}
+16535:   mpf_srcptr __get_mp() const { return val.__get_mp(); }
+16535: };
+16535: # 2178 "/usr/include/gmpxx.h" 3 4
+16535: template <class T, class Op>
+16535: class __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, T>, Op> >
+16535: {
+16535: private:
+16535:   typedef __gmp_expr<T, T> val_type;
+16535: 
+16535:   __gmp_unary_expr<val_type, Op> expr;
+16535: public:
+16535:   explicit __gmp_expr(const val_type &val) : expr(val) { }
+16535:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
+16535:   { Op::eval(p, expr.val.__get_mp()); }
+16535:   const val_type & get_val() const { return expr.val; }
+16535:   mp_bitcnt_t get_prec() const { return expr.val.get_prec(); }
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <class T, class U, class Op>
+16535: class __gmp_expr<T, __gmp_unary_expr<U, Op> >
+16535: {
+16535: private:
+16535:   typedef U val_type;
+16535: 
+16535:   __gmp_unary_expr<val_type, Op> expr;
+16535: public:
+16535:   explicit __gmp_expr(const val_type &val) : expr(val) { }
+16535:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
+16535:   { Op::eval(p, expr.val); }
+16535:   const val_type & get_val() const { return expr.val; }
+16535:   mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); }
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <class T, class U, class Op>
+16535: class __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, Op> >
+16535: {
+16535: private:
+16535:   typedef __gmp_expr<T, U> val_type;
+16535: 
+16535:   __gmp_unary_expr<val_type, Op> expr;
+16535: public:
+16535:   explicit __gmp_expr(const val_type &val) : expr(val) { }
+16535:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
+16535:   { expr.val.eval(p); Op::eval(p, p); }
+16535:   const val_type & get_val() const { return expr.val; }
+16535:   mp_bitcnt_t get_prec() const { return expr.val.get_prec(); }
+16535: };
+16535: # 2242 "/usr/include/gmpxx.h" 3 4
+16535: template <class T, class Op>
+16535: class __gmp_expr
+16535: <T, __gmp_binary_expr<__gmp_expr<T, T>, __gmp_expr<T, T>, Op> >
+16535: {
+16535: private:
+16535:   typedef __gmp_expr<T, T> val1_type;
+16535:   typedef __gmp_expr<T, T> val2_type;
+16535: 
+16535:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
+16535: public:
+16535:   __gmp_expr(const val1_type &val1, const val2_type &val2)
+16535:     : expr(val1, val2) { }
+16535:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
+16535:   { Op::eval(p, expr.val1.__get_mp(), expr.val2.__get_mp()); }
+16535:   const val1_type & get_val1() const { return expr.val1; }
+16535:   const val2_type & get_val2() const { return expr.val2; }
+16535:   mp_bitcnt_t get_prec() const
+16535:   {
+16535:     mp_bitcnt_t prec1 = expr.val1.get_prec(),
+16535:       prec2 = expr.val2.get_prec();
+16535:     return (prec1 > prec2) ? prec1 : prec2;
+16535:   }
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <class T, class U, class Op>
+16535: class __gmp_expr<T, __gmp_binary_expr<__gmp_expr<T, T>, U, Op> >
+16535: {
+16535: private:
+16535:   typedef __gmp_expr<T, T> val1_type;
+16535:   typedef U val2_type;
+16535: 
+16535:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
+16535: public:
+16535:   __gmp_expr(const val1_type &val1, const val2_type &val2)
+16535:     : expr(val1, val2) { }
+16535:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
+16535:   { Op::eval(p, expr.val1.__get_mp(), expr.val2); }
+16535:   const val1_type & get_val1() const { return expr.val1; }
+16535:   const val2_type & get_val2() const { return expr.val2; }
+16535:   mp_bitcnt_t get_prec() const { return expr.val1.get_prec(); }
+16535: };
+16535: 
+16535: template <class T, class U, class Op>
+16535: class __gmp_expr<T, __gmp_binary_expr<U, __gmp_expr<T, T>, Op> >
+16535: {
+16535: private:
+16535:   typedef U val1_type;
+16535:   typedef __gmp_expr<T, T> val2_type;
+16535: 
+16535:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
+16535: public:
+16535:   __gmp_expr(const val1_type &val1, const val2_type &val2)
+16535:     : expr(val1, val2) { }
+16535:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
+16535:   { Op::eval(p, expr.val1, expr.val2.__get_mp()); }
+16535:   const val1_type & get_val1() const { return expr.val1; }
+16535:   const val2_type & get_val2() const { return expr.val2; }
+16535:   mp_bitcnt_t get_prec() const { return expr.val2.get_prec(); }
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <class T, class U, class V, class Op>
+16535: class __gmp_expr
+16535: <T, __gmp_binary_expr<__gmp_expr<T, T>, __gmp_expr<U, V>, Op> >
+16535: {
+16535: private:
+16535:   typedef __gmp_expr<T, T> val1_type;
+16535:   typedef __gmp_expr<U, V> val2_type;
+16535: 
+16535:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
+16535: public:
+16535:   __gmp_expr(const val1_type &val1, const val2_type &val2)
+16535:     : expr(val1, val2) { }
+16535:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
+16535:   {
+16535:     if(p != expr.val1.__get_mp())
+16535:     {
+16535:       __gmp_set_expr(p, expr.val2);
+16535:       Op::eval(p, expr.val1.__get_mp(), p);
+16535:     }
+16535:     else
+16535:     {
+16535:       __gmp_temp<T> temp(expr.val2, p);
+16535:       Op::eval(p, expr.val1.__get_mp(), temp.__get_mp());
+16535:     }
+16535:   }
+16535:   const val1_type & get_val1() const { return expr.val1; }
+16535:   const val2_type & get_val2() const { return expr.val2; }
+16535:   mp_bitcnt_t get_prec() const
+16535:   {
+16535:     mp_bitcnt_t prec1 = expr.val1.get_prec(),
+16535:       prec2 = expr.val2.get_prec();
+16535:     return (prec1 > prec2) ? prec1 : prec2;
+16535:   }
+16535: };
+16535: 
+16535: template <class T, class U, class V, class Op>
+16535: class __gmp_expr
+16535: <T, __gmp_binary_expr<__gmp_expr<U, V>, __gmp_expr<T, T>, Op> >
+16535: {
+16535: private:
+16535:   typedef __gmp_expr<U, V> val1_type;
+16535:   typedef __gmp_expr<T, T> val2_type;
+16535: 
+16535:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
+16535: public:
+16535:   __gmp_expr(const val1_type &val1, const val2_type &val2)
+16535:     : expr(val1, val2) { }
+16535:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
+16535:   {
+16535:     if(p != expr.val2.__get_mp())
+16535:     {
+16535:       __gmp_set_expr(p, expr.val1);
+16535:       Op::eval(p, p, expr.val2.__get_mp());
+16535:     }
+16535:     else
+16535:     {
+16535:       __gmp_temp<T> temp(expr.val1, p);
+16535:       Op::eval(p, temp.__get_mp(), expr.val2.__get_mp());
+16535:     }
+16535:   }
+16535:   const val1_type & get_val1() const { return expr.val1; }
+16535:   const val2_type & get_val2() const { return expr.val2; }
+16535:   mp_bitcnt_t get_prec() const
+16535:   {
+16535:     mp_bitcnt_t prec1 = expr.val1.get_prec(),
+16535:       prec2 = expr.val2.get_prec();
+16535:     return (prec1 > prec2) ? prec1 : prec2;
+16535:   }
+16535: };
+16535: 
+16535: template <class T, class U, class Op>
+16535: class __gmp_expr
+16535: <T, __gmp_binary_expr<__gmp_expr<T, T>, __gmp_expr<T, U>, Op> >
+16535: {
+16535: private:
+16535:   typedef __gmp_expr<T, T> val1_type;
+16535:   typedef __gmp_expr<T, U> val2_type;
+16535: 
+16535:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
+16535: public:
+16535:   __gmp_expr(const val1_type &val1, const val2_type &val2)
+16535:     : expr(val1, val2) { }
+16535:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
+16535:   {
+16535:     if(p != expr.val1.__get_mp())
+16535:     {
+16535:       __gmp_set_expr(p, expr.val2);
+16535:       Op::eval(p, expr.val1.__get_mp(), p);
+16535:     }
+16535:     else
+16535:     {
+16535:       __gmp_temp<T> temp(expr.val2, p);
+16535:       Op::eval(p, expr.val1.__get_mp(), temp.__get_mp());
+16535:     }
+16535:   }
+16535:   const val1_type & get_val1() const { return expr.val1; }
+16535:   const val2_type & get_val2() const { return expr.val2; }
+16535:   mp_bitcnt_t get_prec() const
+16535:   {
+16535:     mp_bitcnt_t prec1 = expr.val1.get_prec(),
+16535:       prec2 = expr.val2.get_prec();
+16535:     return (prec1 > prec2) ? prec1 : prec2;
+16535:   }
+16535: };
+16535: 
+16535: template <class T, class U, class Op>
+16535: class __gmp_expr
+16535: <T, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<T, T>, Op> >
+16535: {
+16535: private:
+16535:   typedef __gmp_expr<T, U> val1_type;
+16535:   typedef __gmp_expr<T, T> val2_type;
+16535: 
+16535:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
+16535: public:
+16535:   __gmp_expr(const val1_type &val1, const val2_type &val2)
+16535:     : expr(val1, val2) { }
+16535:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
+16535:   {
+16535:     if(p != expr.val2.__get_mp())
+16535:     {
+16535:       __gmp_set_expr(p, expr.val1);
+16535:       Op::eval(p, p, expr.val2.__get_mp());
+16535:     }
+16535:     else
+16535:     {
+16535:       __gmp_temp<T> temp(expr.val1, p);
+16535:       Op::eval(p, temp.__get_mp(), expr.val2.__get_mp());
+16535:     }
+16535:   }
+16535:   const val1_type & get_val1() const { return expr.val1; }
+16535:   const val2_type & get_val2() const { return expr.val2; }
+16535:   mp_bitcnt_t get_prec() const
+16535:   {
+16535:     mp_bitcnt_t prec1 = expr.val1.get_prec(),
+16535:       prec2 = expr.val2.get_prec();
+16535:     return (prec1 > prec2) ? prec1 : prec2;
+16535:   }
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <class T, class U, class V, class Op>
+16535: class __gmp_expr<T, __gmp_binary_expr<__gmp_expr<T, U>, V, Op> >
+16535: {
+16535: private:
+16535:   typedef __gmp_expr<T, U> val1_type;
+16535:   typedef V val2_type;
+16535: 
+16535:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
+16535: public:
+16535:   __gmp_expr(const val1_type &val1, const val2_type &val2)
+16535:     : expr(val1, val2) { }
+16535:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
+16535:   {
+16535:     expr.val1.eval(p);
+16535:     Op::eval(p, p, expr.val2);
+16535:   }
+16535:   const val1_type & get_val1() const { return expr.val1; }
+16535:   const val2_type & get_val2() const { return expr.val2; }
+16535:   mp_bitcnt_t get_prec() const { return expr.val1.get_prec(); }
+16535: };
+16535: 
+16535: template <class T, class U, class V, class Op>
+16535: class __gmp_expr<T, __gmp_binary_expr<U, __gmp_expr<T, V>, Op> >
+16535: {
+16535: private:
+16535:   typedef U val1_type;
+16535:   typedef __gmp_expr<T, V> val2_type;
+16535: 
+16535:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
+16535: public:
+16535:   __gmp_expr(const val1_type &val1, const val2_type &val2)
+16535:     : expr(val1, val2) { }
+16535:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
+16535:   {
+16535:     expr.val2.eval(p);
+16535:     Op::eval(p, expr.val1, p);
+16535:   }
+16535:   const val1_type & get_val1() const { return expr.val1; }
+16535:   const val2_type & get_val2() const { return expr.val2; }
+16535:   mp_bitcnt_t get_prec() const { return expr.val2.get_prec(); }
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <class T, class U, class V, class W, class Op>
+16535: class __gmp_expr
+16535: <T, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, Op> >
+16535: {
+16535: private:
+16535:   typedef __gmp_expr<T, U> val1_type;
+16535:   typedef __gmp_expr<V, W> val2_type;
+16535: 
+16535:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
+16535: public:
+16535:   __gmp_expr(const val1_type &val1, const val2_type &val2)
+16535:     : expr(val1, val2) { }
+16535:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
+16535:   {
+16535:     __gmp_temp<T> temp2(expr.val2, p);
+16535:     expr.val1.eval(p);
+16535:     Op::eval(p, p, temp2.__get_mp());
+16535:   }
+16535:   const val1_type & get_val1() const { return expr.val1; }
+16535:   const val2_type & get_val2() const { return expr.val2; }
+16535:   mp_bitcnt_t get_prec() const
+16535:   {
+16535:     mp_bitcnt_t prec1 = expr.val1.get_prec(),
+16535:       prec2 = expr.val2.get_prec();
+16535:     return (prec1 > prec2) ? prec1 : prec2;
+16535:   }
+16535: };
+16535: 
+16535: template <class T, class U, class V, class W, class Op>
+16535: class __gmp_expr
+16535: <T, __gmp_binary_expr<__gmp_expr<U, V>, __gmp_expr<T, W>, Op> >
+16535: {
+16535: private:
+16535:   typedef __gmp_expr<U, V> val1_type;
+16535:   typedef __gmp_expr<T, W> val2_type;
+16535: 
+16535:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
+16535: public:
+16535:   __gmp_expr(const val1_type &val1, const val2_type &val2)
+16535:     : expr(val1, val2) { }
+16535:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
+16535:   {
+16535:     __gmp_temp<T> temp1(expr.val1, p);
+16535:     expr.val2.eval(p);
+16535:     Op::eval(p, temp1.__get_mp(), p);
+16535:   }
+16535:   const val1_type & get_val1() const { return expr.val1; }
+16535:   const val2_type & get_val2() const { return expr.val2; }
+16535:   mp_bitcnt_t get_prec() const
+16535:   {
+16535:     mp_bitcnt_t prec1 = expr.val1.get_prec(),
+16535:       prec2 = expr.val2.get_prec();
+16535:     return (prec1 > prec2) ? prec1 : prec2;
+16535:   }
+16535: };
+16535: 
+16535: template <class T, class U, class V, class Op>
+16535: class __gmp_expr
+16535: <T, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<T, V>, Op> >
+16535: {
+16535: private:
+16535:   typedef __gmp_expr<T, U> val1_type;
+16535:   typedef __gmp_expr<T, V> val2_type;
+16535: 
+16535:   __gmp_binary_expr<val1_type, val2_type, Op> expr;
+16535: public:
+16535:   __gmp_expr(const val1_type &val1, const val2_type &val2)
+16535:     : expr(val1, val2) { }
+16535:   void eval(typename __gmp_resolve_expr<T>::ptr_type p) const
+16535:   {
+16535:     __gmp_temp<T> temp2(expr.val2, p);
+16535:     expr.val1.eval(p);
+16535:     Op::eval(p, p, temp2.__get_mp());
+16535:   }
+16535:   const val1_type & get_val1() const { return expr.val1; }
+16535:   const val2_type & get_val2() const { return expr.val2; }
+16535:   mp_bitcnt_t get_prec() const
+16535:   {
+16535:     mp_bitcnt_t prec1 = expr.val1.get_prec(),
+16535:       prec2 = expr.val2.get_prec();
+16535:     return (prec1 > prec2) ? prec1 : prec2;
+16535:   }
+16535: };
+16535: # 2761 "/usr/include/gmpxx.h" 3 4
+16535: template <> class __gmp_expr<mpq_t, __gmp_binary_expr<mpz_class, mpq_class, __gmp_binary_plus> > { private: typedef mpz_class val1_type; typedef mpq_class val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_plus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { __gmp_binary_plus::eval(q, expr.val1.get_mpz_t(), expr.val2.get_mpq_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <> class __gmp_expr<mpq_t, __gmp_binary_expr<mpq_class, mpz_class, __gmp_binary_plus> > { private: typedef mpq_class val1_type; typedef mpz_class val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_plus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { __gmp_binary_plus::eval(q, expr.val1.get_mpq_t(), expr.val2.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T> class __gmp_expr <mpq_t, __gmp_binary_expr<mpz_class, __gmp_expr<mpq_t, T>, __gmp_binary_plus> > { private: typedef mpz_class val1_type; typedef __gmp_expr<mpq_t, T> val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_plus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpq_class temp(expr.val2); __gmp_binary_plus::eval(q, expr.val1.get_mpz_t(), temp.get_mpq_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T> class __gmp_expr <mpq_t, __gmp_binary_expr<mpq_class, __gmp_expr<mpz_t, T>, __gmp_binary_plus> > { private: typedef mpq_class val1_type; typedef __gmp_expr<mpz_t, T> val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_plus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp(expr.val2); __gmp_binary_plus::eval(q, expr.val1.get_mpq_t(), temp.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T> class __gmp_expr <mpq_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, mpq_class, __gmp_binary_plus> > { private: typedef __gmp_expr<mpz_t, T> val1_type; typedef mpq_class val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_plus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp(expr.val1); __gmp_binary_plus::eval(q, temp.get_mpz_t(), expr.val2.get_mpq_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T> class __gmp_expr <mpq_t, __gmp_binary_expr<__gmp_expr<mpq_t, T>, mpz_class, __gmp_binary_plus> > { private: typedef __gmp_expr<mpq_t, T> val1_type; typedef mpz_class val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_plus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpq_class temp(expr.val1); __gmp_binary_plus::eval(q, temp.get_mpq_t(), expr.val2.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T, class U> class __gmp_expr<mpq_t, __gmp_binary_expr <__gmp_expr<mpz_t, T>, __gmp_expr<mpq_t, U>, __gmp_binary_plus> > { private: typedef __gmp_expr<mpz_t, T> val1_type; typedef __gmp_expr<mpq_t, U> val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_plus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp1(expr.val1); expr.val2.eval(q); __gmp_binary_plus::eval(q, temp1.get_mpz_t(), q); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T, class U> class __gmp_expr<mpq_t, __gmp_binary_expr <__gmp_expr<mpq_t, T>, __gmp_expr<mpz_t, U>, __gmp_binary_plus> > { private: typedef __gmp_expr<mpq_t, T> val1_type; typedef __gmp_expr<mpz_t, U> val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_plus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp2(expr.val2); expr.val1.eval(q); __gmp_binary_plus::eval(q, q, temp2.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } };
+16535: template <> class __gmp_expr<mpq_t, __gmp_binary_expr<mpz_class, mpq_class, __gmp_binary_minus> > { private: typedef mpz_class val1_type; typedef mpq_class val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_minus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { __gmp_binary_minus::eval(q, expr.val1.get_mpz_t(), expr.val2.get_mpq_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <> class __gmp_expr<mpq_t, __gmp_binary_expr<mpq_class, mpz_class, __gmp_binary_minus> > { private: typedef mpq_class val1_type; typedef mpz_class val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_minus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { __gmp_binary_minus::eval(q, expr.val1.get_mpq_t(), expr.val2.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T> class __gmp_expr <mpq_t, __gmp_binary_expr<mpz_class, __gmp_expr<mpq_t, T>, __gmp_binary_minus> > { private: typedef mpz_class val1_type; typedef __gmp_expr<mpq_t, T> val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_minus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpq_class temp(expr.val2); __gmp_binary_minus::eval(q, expr.val1.get_mpz_t(), temp.get_mpq_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T> class __gmp_expr <mpq_t, __gmp_binary_expr<mpq_class, __gmp_expr<mpz_t, T>, __gmp_binary_minus> > { private: typedef mpq_class val1_type; typedef __gmp_expr<mpz_t, T> val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_minus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp(expr.val2); __gmp_binary_minus::eval(q, expr.val1.get_mpq_t(), temp.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T> class __gmp_expr <mpq_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, mpq_class, __gmp_binary_minus> > { private: typedef __gmp_expr<mpz_t, T> val1_type; typedef mpq_class val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_minus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp(expr.val1); __gmp_binary_minus::eval(q, temp.get_mpz_t(), expr.val2.get_mpq_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T> class __gmp_expr <mpq_t, __gmp_binary_expr<__gmp_expr<mpq_t, T>, mpz_class, __gmp_binary_minus> > { private: typedef __gmp_expr<mpq_t, T> val1_type; typedef mpz_class val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_minus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpq_class temp(expr.val1); __gmp_binary_minus::eval(q, temp.get_mpq_t(), expr.val2.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T, class U> class __gmp_expr<mpq_t, __gmp_binary_expr <__gmp_expr<mpz_t, T>, __gmp_expr<mpq_t, U>, __gmp_binary_minus> > { private: typedef __gmp_expr<mpz_t, T> val1_type; typedef __gmp_expr<mpq_t, U> val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_minus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp1(expr.val1); expr.val2.eval(q); __gmp_binary_minus::eval(q, temp1.get_mpz_t(), q); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } }; template <class T, class U> class __gmp_expr<mpq_t, __gmp_binary_expr <__gmp_expr<mpq_t, T>, __gmp_expr<mpz_t, U>, __gmp_binary_minus> > { private: typedef __gmp_expr<mpq_t, T> val1_type; typedef __gmp_expr<mpz_t, U> val2_type; __gmp_binary_expr<val1_type, val2_type, __gmp_binary_minus> expr; public: __gmp_expr(const val1_type &val1, const val2_type &val2) : expr(val1, val2) { } void eval(mpq_ptr q) const { mpz_class temp2(expr.val2); expr.val1.eval(q); __gmp_binary_minus::eval(q, q, temp2.get_mpz_t()); } const val1_type & get_val1() const { return expr.val1; } const val2_type & get_val2() const { return expr.val2; } mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); } };
+16535: # 3054 "/usr/include/gmpxx.h" 3 4
+16535: template <class T, class U> inline __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_unary_plus> > operator+(const __gmp_expr<T, U> &expr) { return __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_unary_plus> >(expr); }
+16535: template <class T, class U> inline __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_unary_minus> > operator-(const __gmp_expr<T, U> &expr) { return __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_unary_minus> >(expr); }
+16535: template <class T, class U> inline __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_unary_com> > operator~(const __gmp_expr<T, U> &expr) { return __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_unary_com> >(expr); }
+16535: 
+16535: template <class T, class U, class V, class W> inline __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_plus> > operator+(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { return __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_plus> > (expr1, expr2); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_plus> > operator+(const __gmp_expr<T, U> &expr, signed char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_plus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_plus> > operator+(signed char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_plus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_plus> > operator+(const __gmp_expr<T, U> &expr, unsigned char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_plus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_plus> > operator+(unsigned char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_plus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_plus> > operator+(const __gmp_expr<T, U> &expr, signed int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_plus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_plus> > operator+(signed int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_plus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_plus> > operator+(const __gmp_expr<T, U> &expr, unsigned int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_plus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_plus> > operator+(unsigned int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_plus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_plus> > operator+(const __gmp_expr<T, U> &expr, signed short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_plus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_plus> > operator+(signed short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_plus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_plus> > operator+(const __gmp_expr<T, U> &expr, unsigned short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_plus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_plus> > operator+(unsigned short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_plus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_plus> > operator+(const __gmp_expr<T, U> &expr, signed long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_plus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_plus> > operator+(signed long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_plus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_plus> > operator+(const __gmp_expr<T, U> &expr, unsigned long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_plus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_plus> > operator+(unsigned long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_plus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_plus> > operator+(const __gmp_expr<T, U> &expr, float t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_plus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_plus> > operator+(float t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_plus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_plus> > operator+(const __gmp_expr<T, U> &expr, double t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_plus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_plus> > operator+(double t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_plus> >(t, expr); }
+16535: template <class T, class U, class V, class W> inline __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_minus> > operator-(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { return __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_minus> > (expr1, expr2); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_minus> > operator-(const __gmp_expr<T, U> &expr, signed char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_minus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_minus> > operator-(signed char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_minus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_minus> > operator-(const __gmp_expr<T, U> &expr, unsigned char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_minus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_minus> > operator-(unsigned char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_minus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_minus> > operator-(const __gmp_expr<T, U> &expr, signed int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_minus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_minus> > operator-(signed int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_minus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_minus> > operator-(const __gmp_expr<T, U> &expr, unsigned int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_minus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_minus> > operator-(unsigned int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_minus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_minus> > operator-(const __gmp_expr<T, U> &expr, signed short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_minus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_minus> > operator-(signed short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_minus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_minus> > operator-(const __gmp_expr<T, U> &expr, unsigned short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_minus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_minus> > operator-(unsigned short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_minus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_minus> > operator-(const __gmp_expr<T, U> &expr, signed long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_minus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_minus> > operator-(signed long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_minus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_minus> > operator-(const __gmp_expr<T, U> &expr, unsigned long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_minus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_minus> > operator-(unsigned long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_minus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_minus> > operator-(const __gmp_expr<T, U> &expr, float t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_minus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_minus> > operator-(float t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_minus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_minus> > operator-(const __gmp_expr<T, U> &expr, double t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_minus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_minus> > operator-(double t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_minus> >(t, expr); }
+16535: template <class T, class U, class V, class W> inline __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_multiplies> > operator*(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { return __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_multiplies> > (expr1, expr2); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_multiplies> > operator*(const __gmp_expr<T, U> &expr, signed char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_multiplies> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_multiplies> > operator*(signed char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_multiplies> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_multiplies> > operator*(const __gmp_expr<T, U> &expr, unsigned char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_multiplies> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_multiplies> > operator*(unsigned char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_multiplies> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_multiplies> > operator*(const __gmp_expr<T, U> &expr, signed int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_multiplies> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_multiplies> > operator*(signed int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_multiplies> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_multiplies> > operator*(const __gmp_expr<T, U> &expr, unsigned int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_multiplies> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_multiplies> > operator*(unsigned int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_multiplies> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_multiplies> > operator*(const __gmp_expr<T, U> &expr, signed short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_multiplies> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_multiplies> > operator*(signed short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_multiplies> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_multiplies> > operator*(const __gmp_expr<T, U> &expr, unsigned short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_multiplies> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_multiplies> > operator*(unsigned short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_multiplies> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_multiplies> > operator*(const __gmp_expr<T, U> &expr, signed long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_multiplies> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_multiplies> > operator*(signed long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_multiplies> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_multiplies> > operator*(const __gmp_expr<T, U> &expr, unsigned long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_multiplies> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_multiplies> > operator*(unsigned long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_multiplies> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_multiplies> > operator*(const __gmp_expr<T, U> &expr, float t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_multiplies> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_multiplies> > operator*(float t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_multiplies> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_multiplies> > operator*(const __gmp_expr<T, U> &expr, double t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_multiplies> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_multiplies> > operator*(double t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_multiplies> >(t, expr); }
+16535: template <class T, class U, class V, class W> inline __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_divides> > operator/(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { return __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_divides> > (expr1, expr2); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_divides> > operator/(const __gmp_expr<T, U> &expr, signed char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_divides> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_divides> > operator/(signed char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_divides> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_divides> > operator/(const __gmp_expr<T, U> &expr, unsigned char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_divides> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_divides> > operator/(unsigned char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_divides> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_divides> > operator/(const __gmp_expr<T, U> &expr, signed int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_divides> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_divides> > operator/(signed int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_divides> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_divides> > operator/(const __gmp_expr<T, U> &expr, unsigned int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_divides> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_divides> > operator/(unsigned int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_divides> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_divides> > operator/(const __gmp_expr<T, U> &expr, signed short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_divides> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_divides> > operator/(signed short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_divides> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_divides> > operator/(const __gmp_expr<T, U> &expr, unsigned short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_divides> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_divides> > operator/(unsigned short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_divides> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_divides> > operator/(const __gmp_expr<T, U> &expr, signed long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_divides> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_divides> > operator/(signed long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_divides> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_divides> > operator/(const __gmp_expr<T, U> &expr, unsigned long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_divides> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_divides> > operator/(unsigned long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_divides> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_divides> > operator/(const __gmp_expr<T, U> &expr, float t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_divides> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_divides> > operator/(float t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_divides> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_divides> > operator/(const __gmp_expr<T, U> &expr, double t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_divides> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_divides> > operator/(double t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_divides> >(t, expr); }
+16535: template <class T, class U, class V, class W> inline __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_modulus> > operator%(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { return __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_modulus> > (expr1, expr2); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_modulus> > operator%(const __gmp_expr<T, U> &expr, signed char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_modulus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_modulus> > operator%(signed char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_modulus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_modulus> > operator%(const __gmp_expr<T, U> &expr, unsigned char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_modulus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_modulus> > operator%(unsigned char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_modulus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_modulus> > operator%(const __gmp_expr<T, U> &expr, signed int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_modulus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_modulus> > operator%(signed int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_modulus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_modulus> > operator%(const __gmp_expr<T, U> &expr, unsigned int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_modulus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_modulus> > operator%(unsigned int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_modulus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_modulus> > operator%(const __gmp_expr<T, U> &expr, signed short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_modulus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_modulus> > operator%(signed short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_modulus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_modulus> > operator%(const __gmp_expr<T, U> &expr, unsigned short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_modulus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_modulus> > operator%(unsigned short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_modulus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_modulus> > operator%(const __gmp_expr<T, U> &expr, signed long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_modulus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_modulus> > operator%(signed long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_modulus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_modulus> > operator%(const __gmp_expr<T, U> &expr, unsigned long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_modulus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_modulus> > operator%(unsigned long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_modulus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_modulus> > operator%(const __gmp_expr<T, U> &expr, float t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_modulus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_modulus> > operator%(float t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_modulus> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_modulus> > operator%(const __gmp_expr<T, U> &expr, double t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_modulus> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_modulus> > operator%(double t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_modulus> >(t, expr); }
+16535: template <class T, class U, class V, class W> inline __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_and> > operator&(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { return __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_and> > (expr1, expr2); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_and> > operator&(const __gmp_expr<T, U> &expr, signed char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_and> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_and> > operator&(signed char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_and> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_and> > operator&(const __gmp_expr<T, U> &expr, unsigned char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_and> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_and> > operator&(unsigned char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_and> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_and> > operator&(const __gmp_expr<T, U> &expr, signed int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_and> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_and> > operator&(signed int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_and> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_and> > operator&(const __gmp_expr<T, U> &expr, unsigned int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_and> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_and> > operator&(unsigned int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_and> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_and> > operator&(const __gmp_expr<T, U> &expr, signed short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_and> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_and> > operator&(signed short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_and> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_and> > operator&(const __gmp_expr<T, U> &expr, unsigned short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_and> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_and> > operator&(unsigned short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_and> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_and> > operator&(const __gmp_expr<T, U> &expr, signed long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_and> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_and> > operator&(signed long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_and> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_and> > operator&(const __gmp_expr<T, U> &expr, unsigned long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_and> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_and> > operator&(unsigned long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_and> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_and> > operator&(const __gmp_expr<T, U> &expr, float t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_and> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_and> > operator&(float t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_and> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_and> > operator&(const __gmp_expr<T, U> &expr, double t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_and> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_and> > operator&(double t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_and> >(t, expr); }
+16535: template <class T, class U, class V, class W> inline __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_ior> > operator|(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { return __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_ior> > (expr1, expr2); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_ior> > operator|(const __gmp_expr<T, U> &expr, signed char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_ior> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_ior> > operator|(signed char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_ior> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_ior> > operator|(const __gmp_expr<T, U> &expr, unsigned char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_ior> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_ior> > operator|(unsigned char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_ior> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_ior> > operator|(const __gmp_expr<T, U> &expr, signed int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_ior> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_ior> > operator|(signed int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_ior> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_ior> > operator|(const __gmp_expr<T, U> &expr, unsigned int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_ior> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_ior> > operator|(unsigned int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_ior> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_ior> > operator|(const __gmp_expr<T, U> &expr, signed short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_ior> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_ior> > operator|(signed short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_ior> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_ior> > operator|(const __gmp_expr<T, U> &expr, unsigned short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_ior> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_ior> > operator|(unsigned short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_ior> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_ior> > operator|(const __gmp_expr<T, U> &expr, signed long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_ior> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_ior> > operator|(signed long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_ior> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_ior> > operator|(const __gmp_expr<T, U> &expr, unsigned long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_ior> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_ior> > operator|(unsigned long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_ior> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_ior> > operator|(const __gmp_expr<T, U> &expr, float t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_ior> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_ior> > operator|(float t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_ior> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_ior> > operator|(const __gmp_expr<T, U> &expr, double t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_ior> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_ior> > operator|(double t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_ior> >(t, expr); }
+16535: template <class T, class U, class V, class W> inline __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_xor> > operator^(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { return __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_binary_xor> > (expr1, expr2); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_xor> > operator^(const __gmp_expr<T, U> &expr, signed char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_xor> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_xor> > operator^(signed char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_xor> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_xor> > operator^(const __gmp_expr<T, U> &expr, unsigned char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_xor> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_xor> > operator^(unsigned char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_xor> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_xor> > operator^(const __gmp_expr<T, U> &expr, signed int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_xor> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_xor> > operator^(signed int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_xor> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_xor> > operator^(const __gmp_expr<T, U> &expr, unsigned int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_xor> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_xor> > operator^(unsigned int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_xor> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_xor> > operator^(const __gmp_expr<T, U> &expr, signed short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_xor> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_xor> > operator^(signed short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_xor> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_xor> > operator^(const __gmp_expr<T, U> &expr, unsigned short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_xor> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_xor> > operator^(unsigned short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_xor> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_xor> > operator^(const __gmp_expr<T, U> &expr, signed long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_binary_xor> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_xor> > operator^(signed long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_binary_xor> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_xor> > operator^(const __gmp_expr<T, U> &expr, unsigned long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_binary_xor> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_xor> > operator^(unsigned long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_binary_xor> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_xor> > operator^(const __gmp_expr<T, U> &expr, float t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_xor> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_xor> > operator^(float t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_xor> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_xor> > operator^(const __gmp_expr<T, U> &expr, double t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_binary_xor> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_xor> > operator^(double t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_binary_xor> >(t, expr); }
+16535: 
+16535: template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, mp_bitcnt_t, __gmp_binary_lshift> > operator<<(const __gmp_expr<T, U> &expr, mp_bitcnt_t l) { return __gmp_expr<T, __gmp_binary_expr <__gmp_expr<T, U>, mp_bitcnt_t, __gmp_binary_lshift> >(expr, l); }
+16535: template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, mp_bitcnt_t, __gmp_binary_rshift> > operator>>(const __gmp_expr<T, U> &expr, mp_bitcnt_t l) { return __gmp_expr<T, __gmp_binary_expr <__gmp_expr<T, U>, mp_bitcnt_t, __gmp_binary_rshift> >(expr, l); }
+16535: 
+16535: template <class T, class U, class V, class W> inline bool operator==(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { __gmp_expr<T, T> const& temp1(expr1); __gmp_expr<V, V> const& temp2(expr2); return __gmp_binary_equal::eval(temp1.__get_mp(), temp2.__get_mp()); } template <class T, class U> inline bool operator==(const __gmp_expr<T, U> &expr, signed char t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator==(signed char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator==(const __gmp_expr<T, U> &expr, unsigned char t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator==(unsigned char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator==(const __gmp_expr<T, U> &expr, signed int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator==(signed int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator==(const __gmp_expr<T, U> &expr, unsigned int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator==(unsigned int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator==(const __gmp_expr<T, U> &expr, signed short int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator==(signed short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator==(const __gmp_expr<T, U> &expr, unsigned short int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator==(unsigned short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator==(const __gmp_expr<T, U> &expr, signed long int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator==(signed long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator==(const __gmp_expr<T, U> &expr, unsigned long int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator==(unsigned long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator==(const __gmp_expr<T, U> &expr, float t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator==(float t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(static_cast<double>(t), temp.__get_mp()); } template <class T, class U> inline bool operator==(const __gmp_expr<T, U> &expr, double t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator==(double t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_equal::eval(static_cast<double>(t), temp.__get_mp()); }
+16535: template <class T, class U, class V, class W> inline bool operator!=(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { __gmp_expr<T, T> const& temp1(expr1); __gmp_expr<V, V> const& temp2(expr2); return ! __gmp_binary_equal::eval(temp1.__get_mp(), temp2.__get_mp()); } template <class T, class U> inline bool operator!=(const __gmp_expr<T, U> &expr, signed char t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator!=(signed char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator!=(const __gmp_expr<T, U> &expr, unsigned char t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator!=(unsigned char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator!=(const __gmp_expr<T, U> &expr, signed int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator!=(signed int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator!=(const __gmp_expr<T, U> &expr, unsigned int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator!=(unsigned int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator!=(const __gmp_expr<T, U> &expr, signed short int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator!=(signed short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator!=(const __gmp_expr<T, U> &expr, unsigned short int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator!=(unsigned short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator!=(const __gmp_expr<T, U> &expr, signed long int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator!=(signed long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator!=(const __gmp_expr<T, U> &expr, unsigned long int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator!=(unsigned long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator!=(const __gmp_expr<T, U> &expr, float t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator!=(float t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(static_cast<double>(t), temp.__get_mp()); } template <class T, class U> inline bool operator!=(const __gmp_expr<T, U> &expr, double t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator!=(double t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_equal::eval(static_cast<double>(t), temp.__get_mp()); }
+16535: template <class T, class U, class V, class W> inline bool operator<(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { __gmp_expr<T, T> const& temp1(expr1); __gmp_expr<V, V> const& temp2(expr2); return __gmp_binary_less::eval(temp1.__get_mp(), temp2.__get_mp()); } template <class T, class U> inline bool operator<(const __gmp_expr<T, U> &expr, signed char t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator<(signed char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<(const __gmp_expr<T, U> &expr, unsigned char t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator<(unsigned char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<(const __gmp_expr<T, U> &expr, signed int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator<(signed int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<(const __gmp_expr<T, U> &expr, unsigned int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator<(unsigned int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<(const __gmp_expr<T, U> &expr, signed short int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator<(signed short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<(const __gmp_expr<T, U> &expr, unsigned short int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator<(unsigned short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<(const __gmp_expr<T, U> &expr, signed long int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator<(signed long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<(const __gmp_expr<T, U> &expr, unsigned long int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator<(unsigned long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<(const __gmp_expr<T, U> &expr, float t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator<(float t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(static_cast<double>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<(const __gmp_expr<T, U> &expr, double t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator<(double t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_less::eval(static_cast<double>(t), temp.__get_mp()); }
+16535: template <class T, class U, class V, class W> inline bool operator<=(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { __gmp_expr<T, T> const& temp1(expr1); __gmp_expr<V, V> const& temp2(expr2); return ! __gmp_binary_greater::eval(temp1.__get_mp(), temp2.__get_mp()); } template <class T, class U> inline bool operator<=(const __gmp_expr<T, U> &expr, signed char t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator<=(signed char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<=(const __gmp_expr<T, U> &expr, unsigned char t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator<=(unsigned char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<=(const __gmp_expr<T, U> &expr, signed int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator<=(signed int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<=(const __gmp_expr<T, U> &expr, unsigned int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator<=(unsigned int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<=(const __gmp_expr<T, U> &expr, signed short int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator<=(signed short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<=(const __gmp_expr<T, U> &expr, unsigned short int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator<=(unsigned short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<=(const __gmp_expr<T, U> &expr, signed long int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator<=(signed long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<=(const __gmp_expr<T, U> &expr, unsigned long int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator<=(unsigned long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<=(const __gmp_expr<T, U> &expr, float t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator<=(float t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(static_cast<double>(t), temp.__get_mp()); } template <class T, class U> inline bool operator<=(const __gmp_expr<T, U> &expr, double t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator<=(double t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_greater::eval(static_cast<double>(t), temp.__get_mp()); }
+16535: template <class T, class U, class V, class W> inline bool operator>(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { __gmp_expr<T, T> const& temp1(expr1); __gmp_expr<V, V> const& temp2(expr2); return __gmp_binary_greater::eval(temp1.__get_mp(), temp2.__get_mp()); } template <class T, class U> inline bool operator>(const __gmp_expr<T, U> &expr, signed char t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator>(signed char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>(const __gmp_expr<T, U> &expr, unsigned char t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator>(unsigned char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>(const __gmp_expr<T, U> &expr, signed int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator>(signed int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>(const __gmp_expr<T, U> &expr, unsigned int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator>(unsigned int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>(const __gmp_expr<T, U> &expr, signed short int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator>(signed short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>(const __gmp_expr<T, U> &expr, unsigned short int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator>(unsigned short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>(const __gmp_expr<T, U> &expr, signed long int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator>(signed long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>(const __gmp_expr<T, U> &expr, unsigned long int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator>(unsigned long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>(const __gmp_expr<T, U> &expr, float t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator>(float t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(static_cast<double>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>(const __gmp_expr<T, U> &expr, double t) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator>(double t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_binary_greater::eval(static_cast<double>(t), temp.__get_mp()); }
+16535: template <class T, class U, class V, class W> inline bool operator>=(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { __gmp_expr<T, T> const& temp1(expr1); __gmp_expr<V, V> const& temp2(expr2); return ! __gmp_binary_less::eval(temp1.__get_mp(), temp2.__get_mp()); } template <class T, class U> inline bool operator>=(const __gmp_expr<T, U> &expr, signed char t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator>=(signed char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>=(const __gmp_expr<T, U> &expr, unsigned char t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator>=(unsigned char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>=(const __gmp_expr<T, U> &expr, signed int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator>=(signed int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>=(const __gmp_expr<T, U> &expr, unsigned int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator>=(unsigned int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>=(const __gmp_expr<T, U> &expr, signed short int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator>=(signed short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>=(const __gmp_expr<T, U> &expr, unsigned short int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator>=(unsigned short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>=(const __gmp_expr<T, U> &expr, signed long int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline bool operator>=(signed long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>=(const __gmp_expr<T, U> &expr, unsigned long int t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline bool operator>=(unsigned long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>=(const __gmp_expr<T, U> &expr, float t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator>=(float t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(static_cast<double>(t), temp.__get_mp()); } template <class T, class U> inline bool operator>=(const __gmp_expr<T, U> &expr, double t) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline bool operator>=(double t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return ! __gmp_binary_less::eval(static_cast<double>(t), temp.__get_mp()); }
+16535: 
+16535: template <class T, class U> inline __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_abs_function> > abs(const __gmp_expr<T, U> &expr) { return __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_abs_function> >(expr); }
+16535: template <class T, class U> inline __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_trunc_function> > trunc(const __gmp_expr<T, U> &expr) { return __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_trunc_function> >(expr); }
+16535: template <class T, class U> inline __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_floor_function> > floor(const __gmp_expr<T, U> &expr) { return __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_floor_function> >(expr); }
+16535: template <class T, class U> inline __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_ceil_function> > ceil(const __gmp_expr<T, U> &expr) { return __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_ceil_function> >(expr); }
+16535: template <class T, class U> inline __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_sqrt_function> > sqrt(const __gmp_expr<T, U> &expr) { return __gmp_expr<T, __gmp_unary_expr<__gmp_expr<T, U>, __gmp_sqrt_function> >(expr); }
+16535: template <class T, class U, class V, class W> inline __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_hypot_function> > hypot(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { return __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_hypot_function> > (expr1, expr2); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_hypot_function> > hypot(const __gmp_expr<T, U> &expr, signed char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_hypot_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_hypot_function> > hypot(signed char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_hypot_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_hypot_function> > hypot(const __gmp_expr<T, U> &expr, unsigned char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_hypot_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_hypot_function> > hypot(unsigned char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_hypot_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_hypot_function> > hypot(const __gmp_expr<T, U> &expr, signed int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_hypot_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_hypot_function> > hypot(signed int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_hypot_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_hypot_function> > hypot(const __gmp_expr<T, U> &expr, unsigned int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_hypot_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_hypot_function> > hypot(unsigned int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_hypot_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_hypot_function> > hypot(const __gmp_expr<T, U> &expr, signed short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_hypot_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_hypot_function> > hypot(signed short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_hypot_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_hypot_function> > hypot(const __gmp_expr<T, U> &expr, unsigned short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_hypot_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_hypot_function> > hypot(unsigned short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_hypot_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_hypot_function> > hypot(const __gmp_expr<T, U> &expr, signed long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_hypot_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_hypot_function> > hypot(signed long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_hypot_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_hypot_function> > hypot(const __gmp_expr<T, U> &expr, unsigned long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_hypot_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_hypot_function> > hypot(unsigned long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_hypot_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_hypot_function> > hypot(const __gmp_expr<T, U> &expr, float t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_hypot_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_hypot_function> > hypot(float t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_hypot_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_hypot_function> > hypot(const __gmp_expr<T, U> &expr, double t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_hypot_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_hypot_function> > hypot(double t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_hypot_function> >(t, expr); }
+16535: template <class T, class U, class V, class W> inline __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_gcd_function> > gcd(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { return __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_gcd_function> > (expr1, expr2); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_gcd_function> > gcd(const __gmp_expr<T, U> &expr, signed char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_gcd_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_gcd_function> > gcd(signed char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_gcd_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_gcd_function> > gcd(const __gmp_expr<T, U> &expr, unsigned char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_gcd_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_gcd_function> > gcd(unsigned char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_gcd_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_gcd_function> > gcd(const __gmp_expr<T, U> &expr, signed int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_gcd_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_gcd_function> > gcd(signed int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_gcd_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_gcd_function> > gcd(const __gmp_expr<T, U> &expr, unsigned int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_gcd_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_gcd_function> > gcd(unsigned int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_gcd_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_gcd_function> > gcd(const __gmp_expr<T, U> &expr, signed short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_gcd_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_gcd_function> > gcd(signed short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_gcd_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_gcd_function> > gcd(const __gmp_expr<T, U> &expr, unsigned short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_gcd_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_gcd_function> > gcd(unsigned short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_gcd_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_gcd_function> > gcd(const __gmp_expr<T, U> &expr, signed long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_gcd_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_gcd_function> > gcd(signed long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_gcd_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_gcd_function> > gcd(const __gmp_expr<T, U> &expr, unsigned long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_gcd_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_gcd_function> > gcd(unsigned long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_gcd_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_gcd_function> > gcd(const __gmp_expr<T, U> &expr, float t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_gcd_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_gcd_function> > gcd(float t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_gcd_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_gcd_function> > gcd(const __gmp_expr<T, U> &expr, double t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_gcd_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_gcd_function> > gcd(double t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_gcd_function> >(t, expr); }
+16535: template <class T, class U, class V, class W> inline __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_lcm_function> > lcm(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { return __gmp_expr<typename __gmp_resolve_expr<T, V>::value_type, __gmp_binary_expr<__gmp_expr<T, U>, __gmp_expr<V, W>, __gmp_lcm_function> > (expr1, expr2); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_lcm_function> > lcm(const __gmp_expr<T, U> &expr, signed char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_lcm_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_lcm_function> > lcm(signed char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_lcm_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_lcm_function> > lcm(const __gmp_expr<T, U> &expr, unsigned char t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_lcm_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_lcm_function> > lcm(unsigned char t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_lcm_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_lcm_function> > lcm(const __gmp_expr<T, U> &expr, signed int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_lcm_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_lcm_function> > lcm(signed int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_lcm_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_lcm_function> > lcm(const __gmp_expr<T, U> &expr, unsigned int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_lcm_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_lcm_function> > lcm(unsigned int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_lcm_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_lcm_function> > lcm(const __gmp_expr<T, U> &expr, signed short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_lcm_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_lcm_function> > lcm(signed short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_lcm_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_lcm_function> > lcm(const __gmp_expr<T, U> &expr, unsigned short int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_lcm_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_lcm_function> > lcm(unsigned short int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_lcm_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_lcm_function> > lcm(const __gmp_expr<T, U> &expr, signed long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, signed long int, __gmp_lcm_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_lcm_function> > lcm(signed long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<signed long int, __gmp_expr<T, U>, __gmp_lcm_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_lcm_function> > lcm(const __gmp_expr<T, U> &expr, unsigned long int t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, unsigned long int, __gmp_lcm_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_lcm_function> > lcm(unsigned long int t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<unsigned long int, __gmp_expr<T, U>, __gmp_lcm_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_lcm_function> > lcm(const __gmp_expr<T, U> &expr, float t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_lcm_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_lcm_function> > lcm(float t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_lcm_function> >(t, expr); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_lcm_function> > lcm(const __gmp_expr<T, U> &expr, double t) { return __gmp_expr <T, __gmp_binary_expr<__gmp_expr<T, U>, double, __gmp_lcm_function> >(expr, t); } template <class T, class U> inline __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_lcm_function> > lcm(double t, const __gmp_expr<T, U> &expr) { return __gmp_expr <T, __gmp_binary_expr<double, __gmp_expr<T, U>, __gmp_lcm_function> >(t, expr); }
+16535: 
+16535: template <class T, class U> inline int sgn(const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_sgn_function::eval(temp.__get_mp()); }
+16535: template <class T, class U, class V, class W> inline int cmp(const __gmp_expr<T, U> &expr1, const __gmp_expr<V, W> &expr2) { __gmp_expr<T, T> const& temp1(expr1); __gmp_expr<V, V> const& temp2(expr2); return __gmp_cmp_function::eval(temp1.__get_mp(), temp2.__get_mp()); } template <class T, class U> inline int cmp(const __gmp_expr<T, U> &expr, signed char t) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline int cmp(signed char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline int cmp(const __gmp_expr<T, U> &expr, unsigned char t) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline int cmp(unsigned char t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline int cmp(const __gmp_expr<T, U> &expr, signed int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline int cmp(signed int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline int cmp(const __gmp_expr<T, U> &expr, unsigned int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline int cmp(unsigned int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline int cmp(const __gmp_expr<T, U> &expr, signed short int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline int cmp(signed short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline int cmp(const __gmp_expr<T, U> &expr, unsigned short int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline int cmp(unsigned short int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline int cmp(const __gmp_expr<T, U> &expr, signed long int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast<signed long int>(t)); } template <class T, class U> inline int cmp(signed long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(static_cast<signed long int>(t), temp.__get_mp()); } template <class T, class U> inline int cmp(const __gmp_expr<T, U> &expr, unsigned long int t) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast<unsigned long int>(t)); } template <class T, class U> inline int cmp(unsigned long int t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(static_cast<unsigned long int>(t), temp.__get_mp()); } template <class T, class U> inline int cmp(const __gmp_expr<T, U> &expr, float t) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline int cmp(float t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(static_cast<double>(t), temp.__get_mp()); } template <class T, class U> inline int cmp(const __gmp_expr<T, U> &expr, double t) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(temp.__get_mp(), static_cast<double>(t)); } template <class T, class U> inline int cmp(double t, const __gmp_expr<T, U> &expr) { __gmp_expr<T, T> const& temp(expr); return __gmp_cmp_function::eval(static_cast<double>(t), temp.__get_mp()); }
+16535: 
+16535: template <class T>
+16535: void swap(__gmp_expr<T, T>& x, __gmp_expr<T, T>& y) noexcept
+16535: { x.swap(y); }
+16535: 
+16535: 
+16535: 
+16535: template <class T, class U> inline mpz_class & mpz_class::operator+=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, __gmp_expr<T, U>, __gmp_binary_plus> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator+=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(float t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_plus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator+=(double t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_plus> >(*this, t)); return *this; }
+16535: template <class T, class U> inline mpz_class & mpz_class::operator-=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, __gmp_expr<T, U>, __gmp_binary_minus> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator-=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(float t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_minus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator-=(double t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_minus> >(*this, t)); return *this; }
+16535: template <class T, class U> inline mpz_class & mpz_class::operator*=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, __gmp_expr<T, U>, __gmp_binary_multiplies> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator*=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(float t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator*=(double t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_multiplies> >(*this, t)); return *this; }
+16535: template <class T, class U> inline mpz_class & mpz_class::operator/=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, __gmp_expr<T, U>, __gmp_binary_divides> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator/=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(float t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_divides> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator/=(double t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_divides> >(*this, t)); return *this; }
+16535: template <class T, class U> inline mpz_class & mpz_class::operator%=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, __gmp_expr<T, U>, __gmp_binary_modulus> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator%=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_modulus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_modulus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_modulus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_modulus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_modulus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_modulus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_modulus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_modulus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(float t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_modulus> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator%=(double t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_modulus> >(*this, t)); return *this; }
+16535: 
+16535: template <class T, class U> inline mpz_class & mpz_class::operator&=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, __gmp_expr<T, U>, __gmp_binary_and> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator&=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_and> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_and> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_and> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_and> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_and> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_and> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_and> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_and> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(float t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_and> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator&=(double t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_and> >(*this, t)); return *this; }
+16535: template <class T, class U> inline mpz_class & mpz_class::operator|=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, __gmp_expr<T, U>, __gmp_binary_ior> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator|=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_ior> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_ior> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_ior> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_ior> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_ior> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_ior> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_ior> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_ior> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(float t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_ior> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator|=(double t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_ior> >(*this, t)); return *this; }
+16535: template <class T, class U> inline mpz_class & mpz_class::operator^=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, __gmp_expr<T, U>, __gmp_binary_xor> >(*this, expr)); return *this; } inline mpz_class & mpz_class::operator^=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_xor> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_xor> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_xor> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_xor> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_xor> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_xor> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, signed long int, __gmp_binary_xor> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, unsigned long int, __gmp_binary_xor> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(float t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_xor> >(*this, t)); return *this; } inline mpz_class & mpz_class::operator^=(double t) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, double, __gmp_binary_xor> >(*this, t)); return *this; }
+16535: 
+16535: inline mpz_class & mpz_class::operator<<=(mp_bitcnt_t l) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, mp_bitcnt_t, __gmp_binary_lshift> >(*this, l)); return *this; }
+16535: inline mpz_class & mpz_class::operator>>=(mp_bitcnt_t l) { __gmp_set_expr(mp, __gmp_expr<mpz_t, __gmp_binary_expr <mpz_class, mp_bitcnt_t, __gmp_binary_rshift> >(*this, l)); return *this; }
+16535: 
+16535: inline mpz_class & mpz_class::operator++() { __gmp_unary_increment::eval(mp); return *this; } inline mpz_class mpz_class::operator++(int) { mpz_class temp(*this); __gmp_unary_increment::eval(mp); return temp; }
+16535: inline mpz_class & mpz_class::operator--() { __gmp_unary_decrement::eval(mp); return *this; } inline mpz_class mpz_class::operator--(int) { mpz_class temp(*this); __gmp_unary_decrement::eval(mp); return temp; }
+16535: 
+16535: 
+16535: 
+16535: template <class T, class U> inline mpq_class & mpq_class::operator+=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, __gmp_expr<T, U>, __gmp_binary_plus> >(*this, expr)); return *this; } inline mpq_class & mpq_class::operator+=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(float t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, double, __gmp_binary_plus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator+=(double t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, double, __gmp_binary_plus> >(*this, t)); return *this; }
+16535: template <class T, class U> inline mpq_class & mpq_class::operator-=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, __gmp_expr<T, U>, __gmp_binary_minus> >(*this, expr)); return *this; } inline mpq_class & mpq_class::operator-=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(float t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, double, __gmp_binary_minus> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator-=(double t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, double, __gmp_binary_minus> >(*this, t)); return *this; }
+16535: template <class T, class U> inline mpq_class & mpq_class::operator*=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, __gmp_expr<T, U>, __gmp_binary_multiplies> >(*this, expr)); return *this; } inline mpq_class & mpq_class::operator*=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(float t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, double, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator*=(double t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, double, __gmp_binary_multiplies> >(*this, t)); return *this; }
+16535: template <class T, class U> inline mpq_class & mpq_class::operator/=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, __gmp_expr<T, U>, __gmp_binary_divides> >(*this, expr)); return *this; } inline mpq_class & mpq_class::operator/=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(float t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, double, __gmp_binary_divides> >(*this, t)); return *this; } inline mpq_class & mpq_class::operator/=(double t) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, double, __gmp_binary_divides> >(*this, t)); return *this; }
+16535: 
+16535: inline mpq_class & mpq_class::operator<<=(mp_bitcnt_t l) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, mp_bitcnt_t, __gmp_binary_lshift> >(*this, l)); return *this; }
+16535: inline mpq_class & mpq_class::operator>>=(mp_bitcnt_t l) { __gmp_set_expr(mp, __gmp_expr<mpq_t, __gmp_binary_expr <mpq_class, mp_bitcnt_t, __gmp_binary_rshift> >(*this, l)); return *this; }
+16535: 
+16535: inline mpq_class & mpq_class::operator++() { __gmp_unary_increment::eval(mp); return *this; } inline mpq_class mpq_class::operator++(int) { mpq_class temp(*this); __gmp_unary_increment::eval(mp); return temp; }
+16535: inline mpq_class & mpq_class::operator--() { __gmp_unary_decrement::eval(mp); return *this; } inline mpq_class mpq_class::operator--(int) { mpq_class temp(*this); __gmp_unary_decrement::eval(mp); return temp; }
+16535: 
+16535: 
+16535: 
+16535: template <class T, class U> inline mpf_class & mpf_class::operator+=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, __gmp_expr<T, U>, __gmp_binary_plus> >(*this, expr)); return *this; } inline mpf_class & mpf_class::operator+=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_plus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(float t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, double, __gmp_binary_plus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator+=(double t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, double, __gmp_binary_plus> >(*this, t)); return *this; }
+16535: template <class T, class U> inline mpf_class & mpf_class::operator-=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, __gmp_expr<T, U>, __gmp_binary_minus> >(*this, expr)); return *this; } inline mpf_class & mpf_class::operator-=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_minus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(float t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, double, __gmp_binary_minus> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator-=(double t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, double, __gmp_binary_minus> >(*this, t)); return *this; }
+16535: template <class T, class U> inline mpf_class & mpf_class::operator*=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, __gmp_expr<T, U>, __gmp_binary_multiplies> >(*this, expr)); return *this; } inline mpf_class & mpf_class::operator*=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(float t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, double, __gmp_binary_multiplies> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator*=(double t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, double, __gmp_binary_multiplies> >(*this, t)); return *this; }
+16535: template <class T, class U> inline mpf_class & mpf_class::operator/=(const __gmp_expr<T, U> &expr) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, __gmp_expr<T, U>, __gmp_binary_divides> >(*this, expr)); return *this; } inline mpf_class & mpf_class::operator/=(signed char t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(unsigned char t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(signed int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(unsigned int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(signed short int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(unsigned short int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(signed long int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, signed long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(unsigned long int t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, unsigned long int, __gmp_binary_divides> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(float t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, double, __gmp_binary_divides> >(*this, t)); return *this; } inline mpf_class & mpf_class::operator/=(double t) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, double, __gmp_binary_divides> >(*this, t)); return *this; }
+16535: 
+16535: inline mpf_class & mpf_class::operator<<=(mp_bitcnt_t l) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, mp_bitcnt_t, __gmp_binary_lshift> >(*this, l)); return *this; }
+16535: inline mpf_class & mpf_class::operator>>=(mp_bitcnt_t l) { __gmp_set_expr(mp, __gmp_expr<mpf_t, __gmp_binary_expr <mpf_class, mp_bitcnt_t, __gmp_binary_rshift> >(*this, l)); return *this; }
+16535: 
+16535: inline mpf_class & mpf_class::operator++() { __gmp_unary_increment::eval(mp); return *this; } inline mpf_class mpf_class::operator++(int) { mpf_class temp(*this); __gmp_unary_increment::eval(mp); return temp; }
+16535: inline mpf_class & mpf_class::operator--() { __gmp_unary_decrement::eval(mp); return *this; } inline mpf_class mpf_class::operator--(int) { mpf_class temp(*this); __gmp_unary_decrement::eval(mp); return temp; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: class __gmp_urandomb_value { };
+16535: class __gmp_urandomm_value { };
+16535: 
+16535: template <>
+16535: class __gmp_expr<mpz_t, __gmp_urandomb_value>
+16535: {
+16535: private:
+16535:   __gmp_randstate_struct *state;
+16535:   mp_bitcnt_t bits;
+16535: public:
+16535:   __gmp_expr(gmp_randstate_t s, mp_bitcnt_t l) : state(s), bits(l) { }
+16535:   void eval(mpz_ptr z) const { __gmp_rand_function::eval(z, state, bits); }
+16535:   mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); }
+16535: };
+16535: 
+16535: template <>
+16535: class __gmp_expr<mpz_t, __gmp_urandomm_value>
+16535: {
+16535: private:
+16535:   __gmp_randstate_struct *state;
+16535:   mpz_class range;
+16535: public:
+16535:   __gmp_expr(gmp_randstate_t s, const mpz_class &z) : state(s), range(z) { }
+16535:   void eval(mpz_ptr z) const
+16535:   { __gmp_rand_function::eval(z, state, range.get_mpz_t()); }
+16535:   mp_bitcnt_t get_prec() const { return __gmpf_get_default_prec(); }
+16535: };
+16535: 
+16535: template <>
+16535: class __gmp_expr<mpf_t, __gmp_urandomb_value>
+16535: {
+16535: private:
+16535:   __gmp_randstate_struct *state;
+16535:   mp_bitcnt_t bits;
+16535: public:
+16535:   __gmp_expr(gmp_randstate_t s, mp_bitcnt_t l) : state(s), bits(l) { }
+16535:   void eval(mpf_ptr f) const
+16535:   {
+16535:     __gmp_rand_function::eval(f, state,
+16535:  (bits>0) ? bits : __gmpf_get_prec(f));
+16535:   }
+16535:   mp_bitcnt_t get_prec() const
+16535:   {
+16535:     if (bits == 0)
+16535:       return __gmpf_get_default_prec();
+16535:     else
+16535:       return bits;
+16535:   }
+16535: };
+16535: 
+16535: extern "C" {
+16535:   typedef void __gmp_randinit_default_t (gmp_randstate_t);
+16535:   typedef void __gmp_randinit_lc_2exp_t (gmp_randstate_t, mpz_srcptr, unsigned long int, mp_bitcnt_t);
+16535:   typedef int __gmp_randinit_lc_2exp_size_t (gmp_randstate_t, mp_bitcnt_t);
+16535: }
+16535: 
+16535: class gmp_randclass
+16535: {
+16535: private:
+16535:   gmp_randstate_t state;
+16535: 
+16535: 
+16535:   gmp_randclass(const gmp_randclass &);
+16535:   void operator=(const gmp_randclass &);
+16535: public:
+16535: 
+16535:   gmp_randclass(gmp_randalg_t alg, unsigned long int size)
+16535:   {
+16535:     switch (alg)
+16535:       {
+16535:       case GMP_RAND_ALG_LC:
+16535:       default:
+16535:  __gmp_randinit(state, alg, size);
+16535:  break;
+16535:       }
+16535:   }
+16535: 
+16535: 
+16535:   gmp_randclass(__gmp_randinit_default_t* f) { f(state); }
+16535: 
+16535: 
+16535:   gmp_randclass(__gmp_randinit_lc_2exp_t* f,
+16535:   mpz_class z, unsigned long int l1, mp_bitcnt_t l2)
+16535:   { f(state, z.get_mpz_t(), l1, l2); }
+16535: 
+16535: 
+16535:   gmp_randclass(__gmp_randinit_lc_2exp_size_t* f,
+16535:   mp_bitcnt_t size)
+16535:   {
+16535:     if (f (state, size) == 0)
+16535:       throw std::length_error ("gmp_randinit_lc_2exp_size");
+16535:   }
+16535: 
+16535:   ~gmp_randclass() { __gmp_randclear(state); }
+16535: 
+16535: 
+16535:   void seed();
+16535:   void seed(unsigned long int s) { __gmp_randseed_ui(state, s); }
+16535:   void seed(const mpz_class &z) { __gmp_randseed(state, z.get_mpz_t()); }
+16535: 
+16535: 
+16535:   __gmp_expr<mpz_t, __gmp_urandomb_value> get_z_bits(mp_bitcnt_t l)
+16535:   { return __gmp_expr<mpz_t, __gmp_urandomb_value>(state, l); }
+16535:   __gmp_expr<mpz_t, __gmp_urandomb_value> get_z_bits(const mpz_class &z)
+16535:   { return get_z_bits(z.get_ui()); }
+16535: 
+16535: 
+16535:   __gmp_expr<mpz_t, __gmp_urandomm_value> get_z_range(const mpz_class &z)
+16535:   { return __gmp_expr<mpz_t, __gmp_urandomm_value>(state, z); }
+16535: 
+16535:   __gmp_expr<mpf_t, __gmp_urandomb_value> get_f(mp_bitcnt_t prec = 0)
+16535:   { return __gmp_expr<mpf_t, __gmp_urandomb_value>(state, prec); }
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace std {
+16535:   template <> class numeric_limits<mpz_class>
+16535:   {
+16535:   public:
+16535:     static const bool is_specialized = true;
+16535:     static mpz_class min() { return mpz_class(); }
+16535:     static mpz_class max() { return mpz_class(); }
+16535:     static mpz_class lowest() { return mpz_class(); }
+16535:     static const int digits = 0;
+16535:     static const int digits10 = 0;
+16535:     static const int max_digits10 = 0;
+16535:     static const bool is_signed = true;
+16535:     static const bool is_integer = true;
+16535:     static const bool is_exact = true;
+16535:     static const int radix = 2;
+16535:     static mpz_class epsilon() { return mpz_class(); }
+16535:     static mpz_class round_error() { return mpz_class(); }
+16535:     static const int min_exponent = 0;
+16535:     static const int min_exponent10 = 0;
+16535:     static const int max_exponent = 0;
+16535:     static const int max_exponent10 = 0;
+16535:     static const bool has_infinity = false;
+16535:     static const bool has_quiet_NaN = false;
+16535:     static const bool has_signaling_NaN = false;
+16535:     static const float_denorm_style has_denorm = denorm_absent;
+16535:     static const bool has_denorm_loss = false;
+16535:     static mpz_class infinity() { return mpz_class(); }
+16535:     static mpz_class quiet_NaN() { return mpz_class(); }
+16535:     static mpz_class signaling_NaN() { return mpz_class(); }
+16535:     static mpz_class denorm_min() { return mpz_class(); }
+16535:     static const bool is_iec559 = false;
+16535:     static const bool is_bounded = false;
+16535:     static const bool is_modulo = false;
+16535:     static const bool traps = false;
+16535:     static const bool tinyness_before = false;
+16535:     static const float_round_style round_style = round_toward_zero;
+16535:   };
+16535: 
+16535:   template <> class numeric_limits<mpq_class>
+16535:   {
+16535:   public:
+16535:     static const bool is_specialized = true;
+16535:     static mpq_class min() { return mpq_class(); }
+16535:     static mpq_class max() { return mpq_class(); }
+16535:     static mpq_class lowest() { return mpq_class(); }
+16535:     static const int digits = 0;
+16535:     static const int digits10 = 0;
+16535:     static const int max_digits10 = 0;
+16535:     static const bool is_signed = true;
+16535:     static const bool is_integer = false;
+16535:     static const bool is_exact = true;
+16535:     static const int radix = 2;
+16535:     static mpq_class epsilon() { return mpq_class(); }
+16535:     static mpq_class round_error() { return mpq_class(); }
+16535:     static const int min_exponent = 0;
+16535:     static const int min_exponent10 = 0;
+16535:     static const int max_exponent = 0;
+16535:     static const int max_exponent10 = 0;
+16535:     static const bool has_infinity = false;
+16535:     static const bool has_quiet_NaN = false;
+16535:     static const bool has_signaling_NaN = false;
+16535:     static const float_denorm_style has_denorm = denorm_absent;
+16535:     static const bool has_denorm_loss = false;
+16535:     static mpq_class infinity() { return mpq_class(); }
+16535:     static mpq_class quiet_NaN() { return mpq_class(); }
+16535:     static mpq_class signaling_NaN() { return mpq_class(); }
+16535:     static mpq_class denorm_min() { return mpq_class(); }
+16535:     static const bool is_iec559 = false;
+16535:     static const bool is_bounded = false;
+16535:     static const bool is_modulo = false;
+16535:     static const bool traps = false;
+16535:     static const bool tinyness_before = false;
+16535:     static const float_round_style round_style = round_toward_zero;
+16535:   };
+16535: 
+16535:   template <> class numeric_limits<mpf_class>
+16535:   {
+16535:   public:
+16535:     static const bool is_specialized = true;
+16535:     static mpf_class min() { return mpf_class(); }
+16535:     static mpf_class max() { return mpf_class(); }
+16535:     static mpf_class lowest() { return mpf_class(); }
+16535:     static const int digits = 0;
+16535:     static const int digits10 = 0;
+16535:     static const int max_digits10 = 0;
+16535:     static const bool is_signed = true;
+16535:     static const bool is_integer = false;
+16535:     static const bool is_exact = false;
+16535:     static const int radix = 2;
+16535:     static mpf_class epsilon() { return mpf_class(); }
+16535:     static mpf_class round_error() { return mpf_class(); }
+16535:     static const int min_exponent = 0;
+16535:     static const int min_exponent10 = 0;
+16535:     static const int max_exponent = 0;
+16535:     static const int max_exponent10 = 0;
+16535:     static const bool has_infinity = false;
+16535:     static const bool has_quiet_NaN = false;
+16535:     static const bool has_signaling_NaN = false;
+16535:     static const float_denorm_style has_denorm = denorm_absent;
+16535:     static const bool has_denorm_loss = false;
+16535:     static mpf_class infinity() { return mpf_class(); }
+16535:     static mpf_class quiet_NaN() { return mpf_class(); }
+16535:     static mpf_class signaling_NaN() { return mpf_class(); }
+16535:     static mpf_class denorm_min() { return mpf_class(); }
+16535:     static const bool is_iec559 = false;
+16535:     static const bool is_bounded = false;
+16535:     static const bool is_modulo = false;
+16535:     static const bool traps = false;
+16535:     static const bool tinyness_before = false;
+16535:     static const float_round_style round_style = round_indeterminate;
+16535:   };
+16535: }
+16535: # 29 "../../src/mp_std_bits_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 34 "../../src/mp_std_bits_defs.hh"
+16535: void swap(mpz_class& x, mpz_class& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: void swap(mpq_class& x, mpq_class& y);
+16535: # 173 "../../src/mp_std_bits_defs.hh"
+16535: # 1 "../../src/mp_std_bits_inlines.hh" 1
+16535: # 28 "../../src/mp_std_bits_inlines.hh"
+16535: inline void
+16535: swap(mpz_class& x, mpz_class& y) {
+16535:   
+16535: # 30 "../../src/mp_std_bits_inlines.hh" 3 4
+16535:  __gmpz_swap
+16535: # 30 "../../src/mp_std_bits_inlines.hh"
+16535:          (x.get_mpz_t(), y.get_mpz_t());
+16535: }
+16535: 
+16535: inline void
+16535: swap(mpq_class& x, mpq_class& y) {
+16535:   
+16535: # 35 "../../src/mp_std_bits_inlines.hh" 3 4
+16535:  __gmpq_swap
+16535: # 35 "../../src/mp_std_bits_inlines.hh"
+16535:          (x.get_mpq_t(), y.get_mpq_t());
+16535: }
+16535: # 174 "../../src/mp_std_bits_defs.hh" 2
+16535: # 28 "../../src/checked_defs.hh" 2
+16535: # 1 "../../src/Temp_defs.hh" 1
+16535: # 27 "../../src/Temp_defs.hh"
+16535: # 1 "../../src/meta_programming.hh" 1
+16535: # 29 "../../src/meta_programming.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: # 102 "../../src/meta_programming.hh"
+16535: template <bool b>
+16535: struct Compile_Time_Check;
+16535: # 114 "../../src/meta_programming.hh"
+16535: template <>
+16535: struct Compile_Time_Check<true> {
+16535: };
+16535: # 142 "../../src/meta_programming.hh"
+16535: template <bool b>
+16535: struct Bool {
+16535:   enum const_bool_value {
+16535:     value = b
+16535:   };
+16535: };
+16535: # 156 "../../src/meta_programming.hh"
+16535: struct True : public Bool<true> {
+16535: };
+16535: # 166 "../../src/meta_programming.hh"
+16535: struct False : public Bool<false> {
+16535: };
+16535: # 178 "../../src/meta_programming.hh"
+16535: template <typename T1, typename T2>
+16535: struct Is_Same : public False {
+16535: };
+16535: # 191 "../../src/meta_programming.hh"
+16535: template <typename T>
+16535: struct Is_Same<T, T> : public True {
+16535: };
+16535: # 222 "../../src/meta_programming.hh"
+16535: template <typename Base, typename Derived>
+16535: struct Is_Same_Or_Derived {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   struct Any {
+16535: 
+16535:     template <typename T>
+16535:     Any(const T&);
+16535:   };
+16535: 
+16535: 
+16535:   static char func(const Base&);
+16535: 
+16535: 
+16535:   static double func(Any);
+16535: 
+16535: 
+16535:   static const Derived& derived_object();
+16535: 
+16535:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_245 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(sizeof(char) != sizeof(double))>) }
+16535: 
+16535:                                  ;
+16535: 
+16535:   enum const_bool_value {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     value = (sizeof(func(derived_object())) == sizeof(char))
+16535:   };
+16535: };
+16535: # 269 "../../src/meta_programming.hh"
+16535: template <bool b, typename T = void>
+16535: struct Enable_If {
+16535: };
+16535: 
+16535: template <typename Type, Type, typename T = void>
+16535: struct Enable_If_Is {
+16535:   typedef T type;
+16535: };
+16535: # 304 "../../src/meta_programming.hh"
+16535: template <typename T>
+16535: struct Enable_If<true, T> {
+16535:   typedef T type;
+16535: };
+16535: 
+16535: template <typename T>
+16535: struct Is_Native : public False {
+16535: };
+16535: 
+16535: template <> struct Is_Native<char> : public True { };
+16535: template <> struct Is_Native<signed char> : public True { };
+16535: template <> struct Is_Native<signed short> : public True { };
+16535: template <> struct Is_Native<signed int> : public True { };
+16535: template <> struct Is_Native<signed long> : public True { };
+16535: template <> struct Is_Native<signed long long> : public True { };
+16535: template <> struct Is_Native<unsigned char> : public True { };
+16535: template <> struct Is_Native<unsigned short> : public True { };
+16535: template <> struct Is_Native<unsigned int> : public True { };
+16535: template <> struct Is_Native<unsigned long> : public True { };
+16535: template <> struct Is_Native<unsigned long long> : public True { };
+16535: 
+16535: 
+16535: template <> struct Is_Native<float> : public True { };
+16535: 
+16535: 
+16535: template <> struct Is_Native<double> : public True { };
+16535: 
+16535: 
+16535: template <> struct Is_Native<long double> : public True { };
+16535: 
+16535: 
+16535: template <> struct Is_Native<mpz_class> : public True { };
+16535: 
+16535: template <> struct Is_Native<mpq_class> : public True { };
+16535: 
+16535: }
+16535: # 28 "../../src/Temp_defs.hh" 2
+16535: # 1 "../../src/Slow_Copy.hh" 1
+16535: # 30 "../../src/Slow_Copy.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: struct Slow_Copy : public False {
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <>
+16535: struct Slow_Copy<mpz_class> : public True {
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <>
+16535: struct Slow_Copy<mpq_class> : public True {
+16535: };
+16535: 
+16535: }
+16535: # 29 "../../src/Temp_defs.hh" 2
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: class Temp_Item {
+16535: public:
+16535: 
+16535:   static Temp_Item& obtain();
+16535: 
+16535: 
+16535:   static void release(Temp_Item& p);
+16535: 
+16535: 
+16535:   T& item();
+16535: 
+16535: private:
+16535: 
+16535:   T item_;
+16535: 
+16535: 
+16535:   Temp_Item* next;
+16535: 
+16535:   class Free_List {
+16535:   public:
+16535:     Free_List();
+16535:     ~Free_List();
+16535:     Temp_Item* head_ptr;
+16535:   private:
+16535:     Free_List(const Free_List&);
+16535:     Free_List& operator=(const Free_List&);
+16535:   };
+16535: 
+16535:   friend class Free_List;
+16535: 
+16535: 
+16535:   static Temp_Item*& free_list_ref();
+16535: 
+16535: 
+16535:   Temp_Item();
+16535: 
+16535: 
+16535:   Temp_Item(const Temp_Item&);
+16535: 
+16535: 
+16535:   Temp_Item& operator=(const Temp_Item&);
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: class Temp_Reference_Holder {
+16535: public:
+16535: 
+16535:   Temp_Reference_Holder();
+16535: 
+16535: 
+16535:   ~Temp_Reference_Holder();
+16535: 
+16535: 
+16535:   T& item();
+16535: 
+16535: private:
+16535: 
+16535:   Temp_Reference_Holder(const Temp_Reference_Holder&);
+16535: 
+16535: 
+16535:   Temp_Reference_Holder& operator=(const Temp_Reference_Holder&);
+16535: 
+16535: 
+16535:   Temp_Item<T>& held;
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: class Temp_Value_Holder {
+16535: public:
+16535: 
+16535:   Temp_Value_Holder();
+16535: 
+16535: 
+16535:   T& item();
+16535: 
+16535: private:
+16535: 
+16535:   Temp_Value_Holder(const Temp_Value_Holder&);
+16535: 
+16535: 
+16535:   Temp_Value_Holder& operator=(const Temp_Value_Holder&);
+16535: 
+16535: 
+16535:   T item_;
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Enable = void>
+16535: class Dirty_Temp;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: class Dirty_Temp<T, typename Enable_If<Slow_Copy<T>::value>::type>
+16535:   : public Temp_Reference_Holder<T> {
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: class Dirty_Temp<T, typename Enable_If<!Slow_Copy<T>::value>::type>
+16535:   : public Temp_Value_Holder<T> {
+16535: };
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Temp_inlines.hh" 1
+16535: # 29 "../../src/Temp_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: inline
+16535: Temp_Item<T>::Temp_Item()
+16535:   : item_() {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline T&
+16535: Temp_Item<T>::item() {
+16535:     return item_;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: Temp_Item<T>::Free_List::Free_List()
+16535:   : head_ptr(0) {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline Temp_Item<T>*&
+16535: Temp_Item<T>::free_list_ref() {
+16535:   static Free_List free_list;
+16535:   return free_list.head_ptr;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline Temp_Item<T>&
+16535: Temp_Item<T>::obtain() {
+16535:   Temp_Item* const p = free_list_ref();
+16535:   if (p != 0) {
+16535:     free_list_ref() = p->next;
+16535:     return *p;
+16535:   }
+16535:   else {
+16535:     return *new Temp_Item();
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Temp_Item<T>::release(Temp_Item& p) {
+16535:   p.next = free_list_ref();
+16535:   free_list_ref() = &p;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: Temp_Reference_Holder<T>::Temp_Reference_Holder()
+16535:   : held(Temp_Item<T>::obtain()) {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: Temp_Reference_Holder<T>::~Temp_Reference_Holder() {
+16535:   Temp_Item<T>::release(held);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline T&
+16535: Temp_Reference_Holder<T>::item() {
+16535:   return held.item();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: Temp_Value_Holder<T>::Temp_Value_Holder() {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline T&
+16535: Temp_Value_Holder<T>::item() {
+16535:   return item_;
+16535: }
+16535: 
+16535: }
+16535: # 153 "../../src/Temp_defs.hh" 2
+16535: # 1 "../../src/Temp_templates.hh" 1
+16535: # 27 "../../src/Temp_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: Temp_Item<T>::Free_List::~Free_List() {
+16535:   while (head_ptr != 0) {
+16535:     Temp_Item* const p = head_ptr;
+16535:     head_ptr = head_ptr->next;
+16535:     delete p;
+16535:   }
+16535: }
+16535: 
+16535: }
+16535: # 154 "../../src/Temp_defs.hh" 2
+16535: # 29 "../../src/checked_defs.hh" 2
+16535: # 1 "../../src/Rounding_Dir_defs.hh" 1
+16535: # 27 "../../src/Rounding_Dir_defs.hh"
+16535: # 1 "../../src/Result_defs.hh" 1
+16535: # 27 "../../src/Result_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: enum Result_Class {
+16535: 
+16535:   VC_NORMAL = 0U << 4,
+16535: 
+16535: 
+16535:   VC_MINUS_INFINITY = 1U << 4,
+16535: 
+16535: 
+16535:   VC_PLUS_INFINITY = 2U << 4,
+16535: 
+16535: 
+16535:   VC_NAN = 3U << 4,
+16535: 
+16535:   VC_MASK = VC_NAN
+16535: };
+16535: 
+16535: 
+16535: enum Result_Relation {
+16535: 
+16535:   VR_EMPTY = 0U,
+16535: 
+16535: 
+16535:   VR_EQ = 1U,
+16535: 
+16535: 
+16535:   VR_LT = 2U,
+16535: 
+16535: 
+16535:   VR_GT = 4U,
+16535: 
+16535: 
+16535:   VR_NE = VR_LT | VR_GT,
+16535: 
+16535: 
+16535:   VR_LE = VR_EQ | VR_LT,
+16535: 
+16535: 
+16535:   VR_GE = VR_EQ | VR_GT,
+16535: 
+16535: 
+16535:   VR_LGE = VR_LT | VR_EQ | VR_GT,
+16535: 
+16535:   VR_MASK = VR_LGE
+16535: };
+16535: 
+16535: 
+16535: 
+16535: enum Result {
+16535: 
+16535:   V_EMPTY = VR_EMPTY,
+16535: 
+16535: 
+16535:   V_EQ = static_cast<unsigned>(VR_EQ),
+16535: 
+16535: 
+16535:   V_LT = static_cast<unsigned>(VR_LT),
+16535: 
+16535: 
+16535:   V_GT = static_cast<unsigned>(VR_GT),
+16535: 
+16535: 
+16535:   V_NE = VR_NE,
+16535: 
+16535: 
+16535:   V_LE = VR_LE,
+16535: 
+16535: 
+16535:   V_GE = VR_GE,
+16535: 
+16535: 
+16535:   V_LGE = VR_LGE,
+16535: 
+16535: 
+16535:   V_OVERFLOW = 1U << 6,
+16535: 
+16535: 
+16535:   V_LT_INF = V_LT | V_OVERFLOW,
+16535: 
+16535: 
+16535:   V_GT_SUP = V_GT | V_OVERFLOW,
+16535: 
+16535: 
+16535:   V_LT_PLUS_INFINITY = V_LT | static_cast<unsigned>(VC_PLUS_INFINITY),
+16535: 
+16535: 
+16535:   V_GT_MINUS_INFINITY = V_GT | static_cast<unsigned>(VC_MINUS_INFINITY),
+16535: 
+16535: 
+16535:   V_EQ_MINUS_INFINITY = V_EQ | static_cast<unsigned>(VC_MINUS_INFINITY),
+16535: 
+16535: 
+16535:   V_EQ_PLUS_INFINITY = V_EQ | static_cast<unsigned>(VC_PLUS_INFINITY),
+16535: 
+16535: 
+16535:   V_NAN = static_cast<unsigned>(VC_NAN),
+16535: 
+16535: 
+16535:   V_CVT_STR_UNK = V_NAN | (1U << 8),
+16535: 
+16535: 
+16535:   V_DIV_ZERO = V_NAN | (2U << 8),
+16535: 
+16535: 
+16535:   V_INF_ADD_INF = V_NAN | (3U << 8),
+16535: 
+16535: 
+16535:   V_INF_DIV_INF = V_NAN | (4U << 8),
+16535: 
+16535: 
+16535:   V_INF_MOD = V_NAN | (5U << 8),
+16535: 
+16535: 
+16535:   V_INF_MUL_ZERO = V_NAN | (6U << 8),
+16535: 
+16535: 
+16535:   V_INF_SUB_INF = V_NAN | (7U << 8),
+16535: 
+16535: 
+16535:   V_MOD_ZERO = V_NAN | (8U << 8),
+16535: 
+16535: 
+16535:   V_SQRT_NEG = V_NAN | (9U << 8),
+16535: 
+16535: 
+16535:   V_UNKNOWN_NEG_OVERFLOW = V_NAN | (10U << 8),
+16535: 
+16535: 
+16535:   V_UNKNOWN_POS_OVERFLOW = V_NAN | (11U << 8),
+16535: 
+16535: 
+16535:   V_UNREPRESENTABLE = 1U << 7
+16535: 
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: Result operator&(Result x, Result y);
+16535: 
+16535: 
+16535: Result operator|(Result x, Result y);
+16535: 
+16535: 
+16535: Result operator-(Result x, Result y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: Result_Class result_class(Result r);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: Result_Relation result_relation(Result r);
+16535: 
+16535: 
+16535: Result result_relation_class(Result r);
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Result_inlines.hh" 1
+16535: # 27 "../../src/Result_inlines.hh"
+16535: # 1 "../../src/assertions.hh" 1
+16535: # 99 "../../src/assertions.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: # 110 "../../src/assertions.hh"
+16535: void ppl_unreachable() __attribute__((weak, noreturn));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: void ppl_unreachable_msg(const char* msg,
+16535:                          const char* file, unsigned int line,
+16535:                          const char* function) __attribute__((weak, noreturn));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: void ppl_assertion_failed(const char* assertion_text,
+16535:                           const char* file, unsigned int line,
+16535:                           const char* function) __attribute__((weak, noreturn));
+16535: # 143 "../../src/assertions.hh"
+16535: template <typename T>
+16535: bool copy_contains(T x_copy, T y_copy) {
+16535:   return x_copy.contains(y_copy);
+16535: }
+16535: 
+16535: }
+16535: # 28 "../../src/Result_inlines.hh" 2
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: inline Result
+16535: operator&(Result x, Result y) {
+16535:   const unsigned res = static_cast<unsigned>(x) & static_cast<unsigned>(y);
+16535:   return static_cast<Result>(res);
+16535: }
+16535: 
+16535: 
+16535: inline Result
+16535: operator|(Result x, Result y) {
+16535:   const unsigned res = static_cast<unsigned>(x) | static_cast<unsigned>(y);
+16535:   return static_cast<Result>(res);
+16535: }
+16535: 
+16535: 
+16535: inline Result
+16535: operator-(Result x, Result y) {
+16535:   const Result y_neg = static_cast<Result>(~static_cast<unsigned>(y));
+16535:   return x & y_neg;
+16535: }
+16535: 
+16535: 
+16535: inline Result_Class
+16535: result_class(Result r) {
+16535:   const Result rc = r & static_cast<Result>(VC_MASK);
+16535:   return static_cast<Result_Class>(rc);
+16535: }
+16535: 
+16535: 
+16535: inline Result_Relation
+16535: result_relation(Result r) {
+16535:   const Result rc = r & static_cast<Result>(VR_MASK);
+16535:   return static_cast<Result_Relation>(rc);
+16535: }
+16535: 
+16535: 
+16535: inline Result
+16535: result_relation_class(Result r) {
+16535:   return r & (static_cast<Result>(VR_MASK) | static_cast<Result>(VC_MASK));
+16535: }
+16535: 
+16535: inline int
+16535: result_overflow(Result r) {
+16535:   switch (result_class(r)) {
+16535:   case VC_NORMAL:
+16535:     switch (r) {
+16535:     case V_LT_INF:
+16535:       return -1;
+16535:     case V_GT_SUP:
+16535:       return 1;
+16535:     default:
+16535:       break;
+16535:     }
+16535:     break;
+16535:   case VC_MINUS_INFINITY:
+16535:     return -1;
+16535:   case VC_PLUS_INFINITY:
+16535:     return 1;
+16535:   default:
+16535:     break;
+16535:   }
+16535:   return 0;
+16535: }
+16535: 
+16535: inline bool
+16535: result_representable(Result r) {
+16535:   return (r & V_UNREPRESENTABLE) != V_UNREPRESENTABLE;
+16535: }
+16535: 
+16535: }
+16535: # 194 "../../src/Result_defs.hh" 2
+16535: # 28 "../../src/Rounding_Dir_defs.hh" 2
+16535: # 1 "../../src/fpu_defs.hh" 1
+16535: # 27 "../../src/fpu_defs.hh"
+16535: # 1 "../../src/fpu_types.hh" 1
+16535: # 20 "../../src/fpu_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: enum fpu_rounding_direction_type {};
+16535: enum fpu_rounding_control_word_type {};
+16535: 
+16535: }
+16535: # 28 "../../src/fpu_defs.hh" 2
+16535: # 1 "../../src/compiler.hh" 1
+16535: # 27 "../../src/compiler.hh"
+16535: # 1 "/usr/include/c++/8/cstddef" 1 3
+16535: # 42 "/usr/include/c++/8/cstddef" 3
+16535:        
+16535: # 43 "/usr/include/c++/8/cstddef" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include/stddef.h" 1 3 4
+16535: # 51 "/usr/include/c++/8/cstddef" 2 3
+16535: 
+16535: 
+16535: 
+16535: # 53 "/usr/include/c++/8/cstddef" 3
+16535: namespace std
+16535: {
+16535: 
+16535:   using ::max_align_t;
+16535: }
+16535: # 28 "../../src/compiler.hh" 2
+16535: # 1 "/usr/include/c++/8/climits" 1 3
+16535: # 39 "/usr/include/c++/8/climits" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/climits" 3
+16535: 
+16535: 
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 1 3 4
+16535: # 43 "/usr/include/c++/8/climits" 2 3
+16535: # 29 "../../src/compiler.hh" 2
+16535: # 1 "/usr/include/c++/8/cassert" 1 3
+16535: # 41 "/usr/include/c++/8/cassert" 3
+16535:        
+16535: # 42 "/usr/include/c++/8/cassert" 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/assert.h" 1 3 4
+16535: # 44 "/usr/include/c++/8/cassert" 2 3
+16535: # 30 "../../src/compiler.hh" 2
+16535: 
+16535: 
+16535: # 31 "../../src/compiler.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: # 47 "../../src/compiler.hh"
+16535: template <typename T>
+16535: inline void
+16535: PPL_CC_FLUSH(const T& x) {
+16535: 
+16535:   __asm__ __volatile__ ("" : "+m" (const_cast<T&>(x)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 67 "../../src/compiler.hh"
+16535: template <typename T>
+16535: struct Suppress_Uninitialized_Warnings_Type {
+16535:   typedef T synonym;
+16535: };
+16535: # 142 "../../src/compiler.hh"
+16535: inline unsigned int
+16535: clz(unsigned int u) {
+16535:   
+16535: # 144 "../../src/compiler.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 144 "../../src/compiler.hh"
+16535:                ;
+16535: 
+16535:   return static_cast<unsigned int>(__builtin_clz(u));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: inline unsigned int
+16535: clz(unsigned long ul) {
+16535:   
+16535: # 158 "../../src/compiler.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 158 "../../src/compiler.hh"
+16535:                 ;
+16535: 
+16535:   return static_cast<unsigned int>(__builtin_clzl(ul));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: inline unsigned int
+16535: clz(unsigned long long ull) {
+16535:   
+16535: # 172 "../../src/compiler.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 172 "../../src/compiler.hh"
+16535:                  ;
+16535: 
+16535:   return static_cast<unsigned int>(__builtin_clzll(ull));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: 
+16535: inline unsigned int
+16535: ctz(unsigned int u) {
+16535:   
+16535: # 187 "../../src/compiler.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 187 "../../src/compiler.hh"
+16535:                ;
+16535: 
+16535:   return static_cast<unsigned int>(__builtin_ctz(u));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: inline unsigned int
+16535: ctz(unsigned long ul) {
+16535:   
+16535: # 201 "../../src/compiler.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 201 "../../src/compiler.hh"
+16535:                 ;
+16535: 
+16535:   return static_cast<unsigned int>(__builtin_ctzl(ul));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: inline unsigned int
+16535: ctz(unsigned long long ull) {
+16535:   
+16535: # 215 "../../src/compiler.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 215 "../../src/compiler.hh"
+16535:                  ;
+16535: 
+16535:   return static_cast<unsigned int>(__builtin_ctzll(ull));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 29 "../../src/fpu_defs.hh" 2
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: void
+16535: fpu_initialize_control_functions();
+16535: 
+16535: 
+16535: fpu_rounding_direction_type
+16535: fpu_get_rounding_direction();
+16535: 
+16535: 
+16535: void
+16535: fpu_set_rounding_direction(fpu_rounding_direction_type dir);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: fpu_rounding_control_word_type
+16535: fpu_save_rounding_direction(fpu_rounding_direction_type dir);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: fpu_rounding_control_word_type
+16535: fpu_save_rounding_direction_reset_inexact(fpu_rounding_direction_type dir);
+16535: 
+16535: 
+16535: void
+16535: fpu_restore_rounding_direction(fpu_rounding_control_word_type w);
+16535: 
+16535: 
+16535: void
+16535: fpu_reset_inexact();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: int
+16535: fpu_check_inexact();
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 93 "../../src/fpu_defs.hh"
+16535: # 1 "../../src/fpu-c99_inlines.hh" 1
+16535: # 28 "../../src/fpu-c99_inlines.hh"
+16535: # 1 "/usr/include/c++/8/fenv.h" 1 3
+16535: # 32 "/usr/include/c++/8/fenv.h" 3
+16535:        
+16535: # 33 "/usr/include/c++/8/fenv.h" 3
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/fenv.h" 1 3 4
+16535: # 26 "/usr/include/fenv.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 1 3 4
+16535: # 27 "/usr/include/fenv.h" 2 3 4
+16535: # 64 "/usr/include/fenv.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/fenv.h" 1 3 4
+16535: # 24 "/usr/include/x86_64-linux-gnu/bits/fenv.h" 3 4
+16535: 
+16535: # 24 "/usr/include/x86_64-linux-gnu/bits/fenv.h" 3 4
+16535: enum
+16535:   {
+16535:     FE_INVALID =
+16535: 
+16535:       0x01,
+16535:     __FE_DENORM = 0x02,
+16535:     FE_DIVBYZERO =
+16535: 
+16535:       0x04,
+16535:     FE_OVERFLOW =
+16535: 
+16535:       0x08,
+16535:     FE_UNDERFLOW =
+16535: 
+16535:       0x10,
+16535:     FE_INEXACT =
+16535: 
+16535:       0x20
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: enum
+16535:   {
+16535:     FE_TONEAREST =
+16535: 
+16535:       0,
+16535:     FE_DOWNWARD =
+16535: 
+16535:       0x400,
+16535:     FE_UPWARD =
+16535: 
+16535:       0x800,
+16535:     FE_TOWARDZERO =
+16535: 
+16535:       0xc00
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: typedef unsigned short int fexcept_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef struct
+16535:   {
+16535:     unsigned short int __control_word;
+16535:     unsigned short int __glibc_reserved1;
+16535:     unsigned short int __status_word;
+16535:     unsigned short int __glibc_reserved2;
+16535:     unsigned short int __tags;
+16535:     unsigned short int __glibc_reserved3;
+16535:     unsigned int __eip;
+16535:     unsigned short int __cs_selector;
+16535:     unsigned int __opcode:11;
+16535:     unsigned int __glibc_reserved4:5;
+16535:     unsigned int __data_offset;
+16535:     unsigned short int __data_selector;
+16535:     unsigned short int __glibc_reserved5;
+16535: 
+16535:     unsigned int __mxcsr;
+16535: 
+16535:   }
+16535: fenv_t;
+16535: # 106 "/usr/include/x86_64-linux-gnu/bits/fenv.h" 3 4
+16535: typedef struct
+16535:   {
+16535:     unsigned short int __control_word;
+16535:     unsigned short int __glibc_reserved;
+16535:     unsigned int __mxcsr;
+16535:   }
+16535: femode_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern "C" {
+16535: 
+16535: 
+16535: 
+16535: extern int __feraiseexcept_renamed (int) throw () __asm__ ("" "feraiseexcept");
+16535: 
+16535: extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) void
+16535: __attribute__ ((__leaf__)) __feraiseexcept_invalid_divbyzero (int __excepts) throw ()
+16535: {
+16535:   if ((0x01 & __excepts) != 0)
+16535:     {
+16535: 
+16535:       float __f = 0.0;
+16535: 
+16535: 
+16535:       __asm__ __volatile__ ("divss %0, %0 " : : "x" (__f));
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       (void) &__f;
+16535:     }
+16535:   if ((0x04 & __excepts) != 0)
+16535:     {
+16535:       float __f = 1.0;
+16535:       float __g = 0.0;
+16535: 
+16535: 
+16535:       __asm__ __volatile__ ("divss %1, %0" : : "x" (__f), "x" (__g));
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       (void) &__f;
+16535:     }
+16535: }
+16535: extern __inline __attribute__ ((__gnu_inline__)) int
+16535: __attribute__ ((__leaf__)) feraiseexcept (int __excepts) throw ()
+16535: {
+16535:   if (__builtin_constant_p (__excepts)
+16535:       && (__excepts & ~(0x01 | 0x04)) == 0)
+16535:     {
+16535:       __feraiseexcept_invalid_divbyzero (__excepts);
+16535:       return 0;
+16535:     }
+16535: 
+16535:   return __feraiseexcept_renamed (__excepts);
+16535: }
+16535: 
+16535: }
+16535: # 65 "/usr/include/fenv.h" 2 3 4
+16535: 
+16535: extern "C" {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int feclearexcept (int __excepts) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int fegetexceptflag (fexcept_t *__flagp, int __excepts) throw ();
+16535: 
+16535: 
+16535: extern int feraiseexcept (int __excepts) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int fesetexcept (int __excepts) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int fesetexceptflag (const fexcept_t *__flagp, int __excepts) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int fetestexcept (int __excepts) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int fetestexceptflag (const fexcept_t *__flagp, int __excepts) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int fegetround (void) throw () __attribute__ ((__pure__));
+16535: 
+16535: 
+16535: extern int fesetround (int __rounding_direction) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int fegetenv (fenv_t *__envp) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int feholdexcept (fenv_t *__envp) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int fesetenv (const fenv_t *__envp) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int feupdateenv (const fenv_t *__envp) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int fegetmode (femode_t *__modep) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int fesetmode (const femode_t *__modep) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/fenvinline.h" 1 3 4
+16535: # 146 "/usr/include/fenv.h" 2 3 4
+16535: # 161 "/usr/include/fenv.h" 3 4
+16535: extern int feenableexcept (int __excepts) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int fedisableexcept (int __excepts) throw ();
+16535: 
+16535: 
+16535: extern int fegetexcept (void) throw ();
+16535: 
+16535: 
+16535: }
+16535: # 37 "/usr/include/c++/8/fenv.h" 2 3
+16535: # 55 "/usr/include/c++/8/fenv.h" 3
+16535: namespace std
+16535: {
+16535: 
+16535:   using ::fenv_t;
+16535:   using ::fexcept_t;
+16535: 
+16535: 
+16535:   using ::feclearexcept;
+16535:   using ::fegetexceptflag;
+16535:   using ::feraiseexcept;
+16535:   using ::fesetexceptflag;
+16535:   using ::fetestexcept;
+16535: 
+16535:   using ::fegetround;
+16535:   using ::fesetround;
+16535: 
+16535:   using ::fegetenv;
+16535:   using ::feholdexcept;
+16535:   using ::fesetenv;
+16535:   using ::feupdateenv;
+16535: }
+16535: # 29 "../../src/fpu-c99_inlines.hh" 2
+16535: # 44 "../../src/fpu-c99_inlines.hh"
+16535: 
+16535: # 44 "../../src/fpu-c99_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline void
+16535: fpu_initialize_control_functions() {
+16535:   const int old = fegetround();
+16535:   if (fesetround(
+16535: # 49 "../../src/fpu-c99_inlines.hh" 3 4
+16535:                 0x400
+16535: # 49 "../../src/fpu-c99_inlines.hh"
+16535:                                 ) != 0
+16535:       || fesetround(
+16535: # 50 "../../src/fpu-c99_inlines.hh" 3 4
+16535:                    0x800
+16535: # 50 "../../src/fpu-c99_inlines.hh"
+16535:                                  ) != 0
+16535:       || fesetround(old) != 0) {
+16535:     throw std::logic_error("PPL configuration error:"
+16535:                            " PPL_CAN_CONTROL_FPU evaluates to true,"
+16535:                            " but fesetround() returns nonzero.");
+16535:   }
+16535: }
+16535: 
+16535: inline fpu_rounding_direction_type
+16535: fpu_get_rounding_direction() {
+16535:   return static_cast<fpu_rounding_direction_type>(fegetround());
+16535: }
+16535: 
+16535: inline void
+16535: fpu_set_rounding_direction(fpu_rounding_direction_type dir) {
+16535:   fesetround(dir);
+16535: }
+16535: 
+16535: inline fpu_rounding_control_word_type
+16535: fpu_save_rounding_direction(fpu_rounding_direction_type dir) {
+16535:   const fpu_rounding_control_word_type old
+16535:     = static_cast<fpu_rounding_control_word_type>(fegetround());
+16535:   fesetround(dir);
+16535:   return old;
+16535: }
+16535: 
+16535: inline void
+16535: fpu_reset_inexact() {
+16535: 
+16535:   feclearexcept(
+16535: # 79 "../../src/fpu-c99_inlines.hh" 3 4
+16535:                0x20
+16535: # 79 "../../src/fpu-c99_inlines.hh"
+16535:                          );
+16535: 
+16535: }
+16535: 
+16535: inline void
+16535: fpu_restore_rounding_direction(fpu_rounding_control_word_type w) {
+16535:   fesetround(w);
+16535: }
+16535: 
+16535: inline int
+16535: fpu_check_inexact() {
+16535: 
+16535:   return fetestexcept(
+16535: # 91 "../../src/fpu-c99_inlines.hh" 3 4
+16535:                      0x20
+16535: # 91 "../../src/fpu-c99_inlines.hh"
+16535:                                ) != 0 ? 1 : 0;
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 94 "../../src/fpu_defs.hh" 2
+16535: # 29 "../../src/Rounding_Dir_defs.hh" 2
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: enum Rounding_Dir {
+16535: 
+16535: 
+16535: 
+16535:   ROUND_DOWN = 0U,
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   ROUND_UP = 1U,
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   ROUND_IGNORE = 6U,
+16535:   ROUND_NATIVE = ROUND_IGNORE,
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   ROUND_NOT_NEEDED = 7U,
+16535: 
+16535:   ROUND_DIRECT = ROUND_UP,
+16535:   ROUND_INVERSE = ROUND_DOWN,
+16535: 
+16535:   ROUND_DIR_MASK = 7U,
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   ROUND_STRICT_RELATION = 8U,
+16535: 
+16535:   ROUND_CHECK = ROUND_DIRECT | ROUND_STRICT_RELATION
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: Rounding_Dir operator&(Rounding_Dir x, Rounding_Dir y);
+16535: 
+16535: 
+16535: Rounding_Dir operator|(Rounding_Dir x, Rounding_Dir y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: Rounding_Dir inverse(Rounding_Dir dir);
+16535: 
+16535: 
+16535: Rounding_Dir round_dir(Rounding_Dir dir);
+16535: 
+16535: 
+16535: bool round_down(Rounding_Dir dir);
+16535: 
+16535: 
+16535: bool round_up(Rounding_Dir dir);
+16535: 
+16535: 
+16535: bool round_ignore(Rounding_Dir dir);
+16535: 
+16535: 
+16535: bool round_not_needed(Rounding_Dir dir);
+16535: 
+16535: 
+16535: bool round_not_requested(Rounding_Dir dir);
+16535: 
+16535: 
+16535: bool round_direct(Rounding_Dir dir);
+16535: 
+16535: 
+16535: bool round_inverse(Rounding_Dir dir);
+16535: 
+16535: 
+16535: bool round_strict_relation(Rounding_Dir dir);
+16535: 
+16535: 
+16535: fpu_rounding_direction_type round_fpu_dir(Rounding_Dir dir);
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Rounding_Dir_inlines.hh" 1
+16535: # 29 "../../src/Rounding_Dir_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: inline Rounding_Dir
+16535: operator&(Rounding_Dir x, Rounding_Dir y) {
+16535:   const unsigned res = static_cast<unsigned>(x) & static_cast<unsigned>(y);
+16535:   return static_cast<Rounding_Dir>(res);
+16535: }
+16535: 
+16535: 
+16535: inline Rounding_Dir
+16535: operator|(Rounding_Dir x, Rounding_Dir y) {
+16535:   const unsigned res = static_cast<unsigned>(x) | static_cast<unsigned>(y);
+16535:   return static_cast<Rounding_Dir>(res);
+16535: }
+16535: 
+16535: 
+16535: inline Rounding_Dir
+16535: round_dir(Rounding_Dir dir) {
+16535:   return dir & ROUND_DIR_MASK;
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: round_down(Rounding_Dir dir) {
+16535:   return round_dir(dir) == ROUND_DOWN;
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: round_up(Rounding_Dir dir) {
+16535:   return round_dir(dir) == ROUND_UP;
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: round_ignore(Rounding_Dir dir) {
+16535:   return round_dir(dir) == ROUND_IGNORE;
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: round_not_needed(Rounding_Dir dir) {
+16535:   return round_dir(dir) == ROUND_NOT_NEEDED;
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: round_not_requested(Rounding_Dir dir) {
+16535:   return round_dir(dir) == ROUND_IGNORE || round_dir(dir) == ROUND_NOT_NEEDED;
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: round_direct(Rounding_Dir dir) {
+16535:   return round_dir(dir) == ROUND_DIRECT;
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: round_inverse(Rounding_Dir dir) {
+16535:   return round_dir(dir) == ROUND_INVERSE;
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: round_strict_relation(Rounding_Dir dir) {
+16535:   return (dir & ROUND_STRICT_RELATION) == ROUND_STRICT_RELATION;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: inline fpu_rounding_direction_type
+16535: round_fpu_dir(Rounding_Dir dir) {
+16535:   switch (round_dir(dir)) {
+16535:   case ROUND_UP:
+16535:     return static_cast<fpu_rounding_direction_type>(
+16535: # 106 "../../src/Rounding_Dir_inlines.hh" 3 4
+16535:                                                    0x800
+16535: # 106 "../../src/Rounding_Dir_inlines.hh"
+16535:                                                                  );
+16535:   case ROUND_DOWN:
+16535:     return static_cast<fpu_rounding_direction_type>(
+16535: # 108 "../../src/Rounding_Dir_inlines.hh" 3 4
+16535:                                                    0x400
+16535: # 108 "../../src/Rounding_Dir_inlines.hh"
+16535:                                                                    );
+16535:   case ROUND_IGNORE:
+16535:   default:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return static_cast<fpu_rounding_direction_type>(
+16535: # 112 "../../src/Rounding_Dir_inlines.hh" 3 4
+16535:                                                    0x800
+16535: # 112 "../../src/Rounding_Dir_inlines.hh"
+16535:                                                                  );
+16535:   }
+16535: }
+16535: # 124 "../../src/Rounding_Dir_inlines.hh"
+16535: inline Rounding_Dir
+16535: inverse(Rounding_Dir dir) {
+16535:   switch (round_dir(dir)) {
+16535:   case ROUND_UP:
+16535:     return ROUND_DOWN | (dir & ROUND_STRICT_RELATION);
+16535:   case ROUND_DOWN:
+16535:     return ROUND_UP | (dir & ROUND_STRICT_RELATION);
+16535:   case ROUND_IGNORE:
+16535:     return dir;
+16535:   default:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return dir;
+16535:   }
+16535: }
+16535: 
+16535: }
+16535: # 122 "../../src/Rounding_Dir_defs.hh" 2
+16535: # 30 "../../src/checked_defs.hh" 2
+16535: # 1 "../../src/Numeric_Format_defs.hh" 1
+16535: # 30 "../../src/Numeric_Format_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Numeric_Format {
+16535: };
+16535: 
+16535: }
+16535: # 31 "../../src/checked_defs.hh" 2
+16535: # 1 "../../src/Float_defs.hh" 1
+16535: # 27 "../../src/Float_defs.hh"
+16535: # 1 "../../src/globals_types.hh" 1
+16535: # 18 "../../src/globals_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: typedef size_t dimension_type;
+16535: 
+16535: 
+16535: 
+16535: typedef size_t memory_size_type;
+16535: 
+16535: 
+16535: 
+16535: enum Degenerate_Element {
+16535: 
+16535:   UNIVERSE,
+16535: 
+16535:   EMPTY
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: enum Relation_Symbol {
+16535: 
+16535:   EQUAL = 1U,
+16535: 
+16535:   LESS_THAN = 2U,
+16535: 
+16535:   LESS_OR_EQUAL = LESS_THAN | EQUAL,
+16535: 
+16535:   GREATER_THAN = 4U,
+16535: 
+16535:   GREATER_OR_EQUAL = GREATER_THAN | EQUAL,
+16535: 
+16535:   NOT_EQUAL = LESS_THAN | GREATER_THAN
+16535: };
+16535: 
+16535: 
+16535: 
+16535: enum Complexity_Class {
+16535: 
+16535:   POLYNOMIAL_COMPLEXITY,
+16535: 
+16535:   SIMPLEX_COMPLEXITY,
+16535: 
+16535:   ANY_COMPLEXITY
+16535: };
+16535: 
+16535: 
+16535: 
+16535: enum Optimization_Mode {
+16535: 
+16535:   MINIMIZATION,
+16535: 
+16535:   MAXIMIZATION
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: enum Bounded_Integer_Type_Width {
+16535: 
+16535:   BITS_8 = 8,
+16535: 
+16535: 
+16535:   BITS_16 = 16,
+16535: 
+16535: 
+16535:   BITS_32 = 32,
+16535: 
+16535: 
+16535:   BITS_64 = 64,
+16535: 
+16535: 
+16535:   BITS_128 = 128
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: enum Bounded_Integer_Type_Representation {
+16535: 
+16535:   UNSIGNED,
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   SIGNED_2_COMPLEMENT
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: enum Bounded_Integer_Type_Overflow {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   OVERFLOW_WRAPS,
+16535: # 143 "../../src/globals_types.hh"
+16535:   OVERFLOW_UNDEFINED,
+16535: # 153 "../../src/globals_types.hh"
+16535:   OVERFLOW_IMPOSSIBLE
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: enum Representation {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   DENSE,
+16535: # 177 "../../src/globals_types.hh"
+16535:   SPARSE
+16535: };
+16535: # 187 "../../src/globals_types.hh"
+16535: enum Floating_Point_Format {
+16535: 
+16535:   IEEE754_HALF,
+16535: 
+16535: 
+16535:   IEEE754_SINGLE,
+16535: 
+16535: 
+16535:   IEEE754_DOUBLE,
+16535: 
+16535: 
+16535:   IEEE754_QUAD,
+16535: 
+16535: 
+16535:   INTEL_DOUBLE_EXTENDED,
+16535: 
+16535: 
+16535:   IBM_SINGLE,
+16535: 
+16535: 
+16535:   IBM_DOUBLE
+16535: };
+16535: 
+16535: struct Weightwatch_Traits;
+16535: 
+16535: }
+16535: # 28 "../../src/Float_defs.hh" 2
+16535: 
+16535: 
+16535: # 1 "../../src/Concrete_Expression_types.hh" 1
+16535: # 16 "../../src/Concrete_Expression_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: # 27 "../../src/Concrete_Expression_types.hh"
+16535: template <typename Target>
+16535: class Concrete_Expression;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Target>
+16535: class Binary_Operator;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Target>
+16535: class Unary_Operator;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Target>
+16535: class Cast_Operator;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Target>
+16535: class Integer_Constant;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Target>
+16535: class Floating_Point_Constant;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Target>
+16535: class Approximable_Reference;
+16535: 
+16535: class Concrete_Expression_Type;
+16535: # 78 "../../src/Concrete_Expression_types.hh"
+16535: typedef int Concrete_Expression_Kind;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef int Concrete_Expression_BOP;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef int Concrete_Expression_UOP;
+16535: 
+16535: }
+16535: # 31 "../../src/Float_defs.hh" 2
+16535: # 1 "../../src/Variable_types.hh" 1
+16535: # 16 "../../src/Variable_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Variable;
+16535: 
+16535: }
+16535: # 32 "../../src/Float_defs.hh" 2
+16535: # 1 "../../src/Linear_Form_types.hh" 1
+16535: # 16 "../../src/Linear_Form_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename C>
+16535: class Linear_Form;
+16535: 
+16535: }
+16535: # 33 "../../src/Float_defs.hh" 2
+16535: # 1 "/usr/include/c++/8/set" 1 3
+16535: # 58 "/usr/include/c++/8/set" 3
+16535:        
+16535: # 59 "/usr/include/c++/8/set" 3
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/stl_tree.h" 1 3
+16535: # 61 "/usr/include/c++/8/bits/stl_tree.h" 3
+16535:        
+16535: # 62 "/usr/include/c++/8/bits/stl_tree.h" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/ext/aligned_buffer.h" 1 3
+16535: # 32 "/usr/include/c++/8/ext/aligned_buffer.h" 3
+16535:        
+16535: # 33 "/usr/include/c++/8/ext/aligned_buffer.h" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 40 "/usr/include/c++/8/ext/aligned_buffer.h" 3
+16535: namespace __gnu_cxx
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __aligned_membuf
+16535:     {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       struct _Tp2 { _Tp _M_t; };
+16535: 
+16535:       alignas(__alignof__(_Tp2::_M_t)) unsigned char _M_storage[sizeof(_Tp)];
+16535: 
+16535:       __aligned_membuf() = default;
+16535: 
+16535: 
+16535:       __aligned_membuf(std::nullptr_t) { }
+16535: 
+16535:       void*
+16535:       _M_addr() noexcept
+16535:       { return static_cast<void*>(&_M_storage); }
+16535: 
+16535:       const void*
+16535:       _M_addr() const noexcept
+16535:       { return static_cast<const void*>(&_M_storage); }
+16535: 
+16535:       _Tp*
+16535:       _M_ptr() noexcept
+16535:       { return static_cast<_Tp*>(_M_addr()); }
+16535: 
+16535:       const _Tp*
+16535:       _M_ptr() const noexcept
+16535:       { return static_cast<const _Tp*>(_M_addr()); }
+16535:     };
+16535: # 89 "/usr/include/c++/8/ext/aligned_buffer.h" 3
+16535:   template<typename _Tp>
+16535:     struct __aligned_buffer
+16535:     : std::aligned_storage<sizeof(_Tp), __alignof__(_Tp)>
+16535:     {
+16535:       typename
+16535:  std::aligned_storage<sizeof(_Tp), __alignof__(_Tp)>::type _M_storage;
+16535: 
+16535:       __aligned_buffer() = default;
+16535: 
+16535: 
+16535:       __aligned_buffer(std::nullptr_t) { }
+16535: 
+16535:       void*
+16535:       _M_addr() noexcept
+16535:       {
+16535:         return static_cast<void*>(&_M_storage);
+16535:       }
+16535: 
+16535:       const void*
+16535:       _M_addr() const noexcept
+16535:       {
+16535:         return static_cast<const void*>(&_M_storage);
+16535:       }
+16535: 
+16535:       _Tp*
+16535:       _M_ptr() noexcept
+16535:       { return static_cast<_Tp*>(_M_addr()); }
+16535: 
+16535:       const _Tp*
+16535:       _M_ptr() const noexcept
+16535:       { return static_cast<const _Tp*>(_M_addr()); }
+16535:     };
+16535: 
+16535: 
+16535: }
+16535: # 70 "/usr/include/c++/8/bits/stl_tree.h" 2 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 99 "/usr/include/c++/8/bits/stl_tree.h" 3
+16535:   enum _Rb_tree_color { _S_red = false, _S_black = true };
+16535: 
+16535:   struct _Rb_tree_node_base
+16535:   {
+16535:     typedef _Rb_tree_node_base* _Base_ptr;
+16535:     typedef const _Rb_tree_node_base* _Const_Base_ptr;
+16535: 
+16535:     _Rb_tree_color _M_color;
+16535:     _Base_ptr _M_parent;
+16535:     _Base_ptr _M_left;
+16535:     _Base_ptr _M_right;
+16535: 
+16535:     static _Base_ptr
+16535:     _S_minimum(_Base_ptr __x) noexcept
+16535:     {
+16535:       while (__x->_M_left != 0) __x = __x->_M_left;
+16535:       return __x;
+16535:     }
+16535: 
+16535:     static _Const_Base_ptr
+16535:     _S_minimum(_Const_Base_ptr __x) noexcept
+16535:     {
+16535:       while (__x->_M_left != 0) __x = __x->_M_left;
+16535:       return __x;
+16535:     }
+16535: 
+16535:     static _Base_ptr
+16535:     _S_maximum(_Base_ptr __x) noexcept
+16535:     {
+16535:       while (__x->_M_right != 0) __x = __x->_M_right;
+16535:       return __x;
+16535:     }
+16535: 
+16535:     static _Const_Base_ptr
+16535:     _S_maximum(_Const_Base_ptr __x) noexcept
+16535:     {
+16535:       while (__x->_M_right != 0) __x = __x->_M_right;
+16535:       return __x;
+16535:     }
+16535:   };
+16535: 
+16535: 
+16535:   template<typename _Key_compare>
+16535:     struct _Rb_tree_key_compare
+16535:     {
+16535:       _Key_compare _M_key_compare;
+16535: 
+16535:       _Rb_tree_key_compare()
+16535:       noexcept(is_nothrow_default_constructible<_Key_compare>::value)
+16535: 
+16535:       : _M_key_compare()
+16535:       { }
+16535: 
+16535:       _Rb_tree_key_compare(const _Key_compare& __comp)
+16535:       : _M_key_compare(__comp)
+16535:       { }
+16535: 
+16535: 
+16535: 
+16535:       _Rb_tree_key_compare(const _Rb_tree_key_compare&) = default;
+16535: 
+16535:       _Rb_tree_key_compare(_Rb_tree_key_compare&& __x)
+16535:  noexcept(is_nothrow_copy_constructible<_Key_compare>::value)
+16535:       : _M_key_compare(__x._M_key_compare)
+16535:       { }
+16535: 
+16535:     };
+16535: 
+16535: 
+16535:   struct _Rb_tree_header
+16535:   {
+16535:     _Rb_tree_node_base _M_header;
+16535:     size_t _M_node_count;
+16535: 
+16535:     _Rb_tree_header() noexcept
+16535:     {
+16535:       _M_header._M_color = _S_red;
+16535:       _M_reset();
+16535:     }
+16535: 
+16535: 
+16535:     _Rb_tree_header(_Rb_tree_header&& __x) noexcept
+16535:     {
+16535:       if (__x._M_header._M_parent != nullptr)
+16535:  _M_move_data(__x);
+16535:       else
+16535:  {
+16535:    _M_header._M_color = _S_red;
+16535:    _M_reset();
+16535:  }
+16535:     }
+16535: 
+16535: 
+16535:     void
+16535:     _M_move_data(_Rb_tree_header& __from)
+16535:     {
+16535:       _M_header._M_color = __from._M_header._M_color;
+16535:       _M_header._M_parent = __from._M_header._M_parent;
+16535:       _M_header._M_left = __from._M_header._M_left;
+16535:       _M_header._M_right = __from._M_header._M_right;
+16535:       _M_header._M_parent->_M_parent = &_M_header;
+16535:       _M_node_count = __from._M_node_count;
+16535: 
+16535:       __from._M_reset();
+16535:     }
+16535: 
+16535:     void
+16535:     _M_reset()
+16535:     {
+16535:       _M_header._M_parent = 0;
+16535:       _M_header._M_left = &_M_header;
+16535:       _M_header._M_right = &_M_header;
+16535:       _M_node_count = 0;
+16535:     }
+16535:   };
+16535: 
+16535:   template<typename _Val>
+16535:     struct _Rb_tree_node : public _Rb_tree_node_base
+16535:     {
+16535:       typedef _Rb_tree_node<_Val>* _Link_type;
+16535: # 231 "/usr/include/c++/8/bits/stl_tree.h" 3
+16535:       __gnu_cxx::__aligned_membuf<_Val> _M_storage;
+16535: 
+16535:       _Val*
+16535:       _M_valptr()
+16535:       { return _M_storage._M_ptr(); }
+16535: 
+16535:       const _Val*
+16535:       _M_valptr() const
+16535:       { return _M_storage._M_ptr(); }
+16535: 
+16535:     };
+16535: 
+16535:   __attribute__ ((__pure__)) _Rb_tree_node_base*
+16535:   _Rb_tree_increment(_Rb_tree_node_base* __x) throw ();
+16535: 
+16535:   __attribute__ ((__pure__)) const _Rb_tree_node_base*
+16535:   _Rb_tree_increment(const _Rb_tree_node_base* __x) throw ();
+16535: 
+16535:   __attribute__ ((__pure__)) _Rb_tree_node_base*
+16535:   _Rb_tree_decrement(_Rb_tree_node_base* __x) throw ();
+16535: 
+16535:   __attribute__ ((__pure__)) const _Rb_tree_node_base*
+16535:   _Rb_tree_decrement(const _Rb_tree_node_base* __x) throw ();
+16535: 
+16535:   template<typename _Tp>
+16535:     struct _Rb_tree_iterator
+16535:     {
+16535:       typedef _Tp value_type;
+16535:       typedef _Tp& reference;
+16535:       typedef _Tp* pointer;
+16535: 
+16535:       typedef bidirectional_iterator_tag iterator_category;
+16535:       typedef ptrdiff_t difference_type;
+16535: 
+16535:       typedef _Rb_tree_iterator<_Tp> _Self;
+16535:       typedef _Rb_tree_node_base::_Base_ptr _Base_ptr;
+16535:       typedef _Rb_tree_node<_Tp>* _Link_type;
+16535: 
+16535:       _Rb_tree_iterator() noexcept
+16535:       : _M_node() { }
+16535: 
+16535:       explicit
+16535:       _Rb_tree_iterator(_Base_ptr __x) noexcept
+16535:       : _M_node(__x) { }
+16535: 
+16535:       reference
+16535:       operator*() const noexcept
+16535:       { return *static_cast<_Link_type>(_M_node)->_M_valptr(); }
+16535: 
+16535:       pointer
+16535:       operator->() const noexcept
+16535:       { return static_cast<_Link_type> (_M_node)->_M_valptr(); }
+16535: 
+16535:       _Self&
+16535:       operator++() noexcept
+16535:       {
+16535:  _M_node = _Rb_tree_increment(_M_node);
+16535:  return *this;
+16535:       }
+16535: 
+16535:       _Self
+16535:       operator++(int) noexcept
+16535:       {
+16535:  _Self __tmp = *this;
+16535:  _M_node = _Rb_tree_increment(_M_node);
+16535:  return __tmp;
+16535:       }
+16535: 
+16535:       _Self&
+16535:       operator--() noexcept
+16535:       {
+16535:  _M_node = _Rb_tree_decrement(_M_node);
+16535:  return *this;
+16535:       }
+16535: 
+16535:       _Self
+16535:       operator--(int) noexcept
+16535:       {
+16535:  _Self __tmp = *this;
+16535:  _M_node = _Rb_tree_decrement(_M_node);
+16535:  return __tmp;
+16535:       }
+16535: 
+16535:       bool
+16535:       operator==(const _Self& __x) const noexcept
+16535:       { return _M_node == __x._M_node; }
+16535: 
+16535:       bool
+16535:       operator!=(const _Self& __x) const noexcept
+16535:       { return _M_node != __x._M_node; }
+16535: 
+16535:       _Base_ptr _M_node;
+16535:   };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct _Rb_tree_const_iterator
+16535:     {
+16535:       typedef _Tp value_type;
+16535:       typedef const _Tp& reference;
+16535:       typedef const _Tp* pointer;
+16535: 
+16535:       typedef _Rb_tree_iterator<_Tp> iterator;
+16535: 
+16535:       typedef bidirectional_iterator_tag iterator_category;
+16535:       typedef ptrdiff_t difference_type;
+16535: 
+16535:       typedef _Rb_tree_const_iterator<_Tp> _Self;
+16535:       typedef _Rb_tree_node_base::_Const_Base_ptr _Base_ptr;
+16535:       typedef const _Rb_tree_node<_Tp>* _Link_type;
+16535: 
+16535:       _Rb_tree_const_iterator() noexcept
+16535:       : _M_node() { }
+16535: 
+16535:       explicit
+16535:       _Rb_tree_const_iterator(_Base_ptr __x) noexcept
+16535:       : _M_node(__x) { }
+16535: 
+16535:       _Rb_tree_const_iterator(const iterator& __it) noexcept
+16535:       : _M_node(__it._M_node) { }
+16535: 
+16535:       iterator
+16535:       _M_const_cast() const noexcept
+16535:       { return iterator(const_cast<typename iterator::_Base_ptr>(_M_node)); }
+16535: 
+16535:       reference
+16535:       operator*() const noexcept
+16535:       { return *static_cast<_Link_type>(_M_node)->_M_valptr(); }
+16535: 
+16535:       pointer
+16535:       operator->() const noexcept
+16535:       { return static_cast<_Link_type>(_M_node)->_M_valptr(); }
+16535: 
+16535:       _Self&
+16535:       operator++() noexcept
+16535:       {
+16535:  _M_node = _Rb_tree_increment(_M_node);
+16535:  return *this;
+16535:       }
+16535: 
+16535:       _Self
+16535:       operator++(int) noexcept
+16535:       {
+16535:  _Self __tmp = *this;
+16535:  _M_node = _Rb_tree_increment(_M_node);
+16535:  return __tmp;
+16535:       }
+16535: 
+16535:       _Self&
+16535:       operator--() noexcept
+16535:       {
+16535:  _M_node = _Rb_tree_decrement(_M_node);
+16535:  return *this;
+16535:       }
+16535: 
+16535:       _Self
+16535:       operator--(int) noexcept
+16535:       {
+16535:  _Self __tmp = *this;
+16535:  _M_node = _Rb_tree_decrement(_M_node);
+16535:  return __tmp;
+16535:       }
+16535: 
+16535:       bool
+16535:       operator==(const _Self& __x) const noexcept
+16535:       { return _M_node == __x._M_node; }
+16535: 
+16535:       bool
+16535:       operator!=(const _Self& __x) const noexcept
+16535:       { return _M_node != __x._M_node; }
+16535: 
+16535:       _Base_ptr _M_node;
+16535:     };
+16535: 
+16535:   template<typename _Val>
+16535:     inline bool
+16535:     operator==(const _Rb_tree_iterator<_Val>& __x,
+16535:         const _Rb_tree_const_iterator<_Val>& __y) noexcept
+16535:     { return __x._M_node == __y._M_node; }
+16535: 
+16535:   template<typename _Val>
+16535:     inline bool
+16535:     operator!=(const _Rb_tree_iterator<_Val>& __x,
+16535:         const _Rb_tree_const_iterator<_Val>& __y) noexcept
+16535:     { return __x._M_node != __y._M_node; }
+16535: 
+16535:   void
+16535:   _Rb_tree_insert_and_rebalance(const bool __insert_left,
+16535:     _Rb_tree_node_base* __x,
+16535:     _Rb_tree_node_base* __p,
+16535:     _Rb_tree_node_base& __header) throw ();
+16535: 
+16535:   _Rb_tree_node_base*
+16535:   _Rb_tree_rebalance_for_erase(_Rb_tree_node_base* const __z,
+16535:           _Rb_tree_node_base& __header) throw ();
+16535: 
+16535: 
+16535:   template<typename _Cmp, typename _SfinaeType, typename = __void_t<>>
+16535:     struct __has_is_transparent
+16535:     { };
+16535: 
+16535:   template<typename _Cmp, typename _SfinaeType>
+16535:     struct __has_is_transparent<_Cmp, _SfinaeType,
+16535:     __void_t<typename _Cmp::is_transparent>>
+16535:     { typedef void type; };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc = allocator<_Val> >
+16535:     class _Rb_tree
+16535:     {
+16535:       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
+16535:  rebind<_Rb_tree_node<_Val> >::other _Node_allocator;
+16535: 
+16535:       typedef __gnu_cxx::__alloc_traits<_Node_allocator> _Alloc_traits;
+16535: 
+16535: 
+16535:       static_assert(__is_invocable<_Compare&, const _Key&, const _Key&>{},
+16535:    "comparison object must be invocable with two arguments of key type");
+16535: # 462 "/usr/include/c++/8/bits/stl_tree.h" 3
+16535:     protected:
+16535:       typedef _Rb_tree_node_base* _Base_ptr;
+16535:       typedef const _Rb_tree_node_base* _Const_Base_ptr;
+16535:       typedef _Rb_tree_node<_Val>* _Link_type;
+16535:       typedef const _Rb_tree_node<_Val>* _Const_Link_type;
+16535: 
+16535:     private:
+16535: 
+16535: 
+16535:       struct _Reuse_or_alloc_node
+16535:       {
+16535:  _Reuse_or_alloc_node(_Rb_tree& __t)
+16535:    : _M_root(__t._M_root()), _M_nodes(__t._M_rightmost()), _M_t(__t)
+16535:  {
+16535:    if (_M_root)
+16535:      {
+16535:        _M_root->_M_parent = 0;
+16535: 
+16535:        if (_M_nodes->_M_left)
+16535:   _M_nodes = _M_nodes->_M_left;
+16535:      }
+16535:    else
+16535:      _M_nodes = 0;
+16535:  }
+16535: 
+16535: 
+16535:  _Reuse_or_alloc_node(const _Reuse_or_alloc_node&) = delete;
+16535: 
+16535: 
+16535:  ~_Reuse_or_alloc_node()
+16535:  { _M_t._M_erase(static_cast<_Link_type>(_M_root)); }
+16535: 
+16535:  template<typename _Arg>
+16535:    _Link_type
+16535: 
+16535: 
+16535: 
+16535:    operator()(_Arg&& __arg)
+16535: 
+16535:    {
+16535:      _Link_type __node = static_cast<_Link_type>(_M_extract());
+16535:      if (__node)
+16535:        {
+16535:   _M_t._M_destroy_node(__node);
+16535:   _M_t._M_construct_node(__node, std::forward<_Arg>(__arg));
+16535:   return __node;
+16535:        }
+16535: 
+16535:      return _M_t._M_create_node(std::forward<_Arg>(__arg));
+16535:    }
+16535: 
+16535:       private:
+16535:  _Base_ptr
+16535:  _M_extract()
+16535:  {
+16535:    if (!_M_nodes)
+16535:      return _M_nodes;
+16535: 
+16535:    _Base_ptr __node = _M_nodes;
+16535:    _M_nodes = _M_nodes->_M_parent;
+16535:    if (_M_nodes)
+16535:      {
+16535:        if (_M_nodes->_M_right == __node)
+16535:   {
+16535:     _M_nodes->_M_right = 0;
+16535: 
+16535:     if (_M_nodes->_M_left)
+16535:       {
+16535:         _M_nodes = _M_nodes->_M_left;
+16535: 
+16535:         while (_M_nodes->_M_right)
+16535:    _M_nodes = _M_nodes->_M_right;
+16535: 
+16535:         if (_M_nodes->_M_left)
+16535:    _M_nodes = _M_nodes->_M_left;
+16535:       }
+16535:   }
+16535:        else
+16535:   _M_nodes->_M_left = 0;
+16535:      }
+16535:    else
+16535:      _M_root = 0;
+16535: 
+16535:    return __node;
+16535:  }
+16535: 
+16535:  _Base_ptr _M_root;
+16535:  _Base_ptr _M_nodes;
+16535:  _Rb_tree& _M_t;
+16535:       };
+16535: 
+16535: 
+16535: 
+16535:       struct _Alloc_node
+16535:       {
+16535:  _Alloc_node(_Rb_tree& __t)
+16535:    : _M_t(__t) { }
+16535: 
+16535:  template<typename _Arg>
+16535:    _Link_type
+16535: 
+16535: 
+16535: 
+16535:    operator()(_Arg&& __arg) const
+16535: 
+16535:    { return _M_t._M_create_node(std::forward<_Arg>(__arg)); }
+16535: 
+16535:       private:
+16535:  _Rb_tree& _M_t;
+16535:       };
+16535: 
+16535:     public:
+16535:       typedef _Key key_type;
+16535:       typedef _Val value_type;
+16535:       typedef value_type* pointer;
+16535:       typedef const value_type* const_pointer;
+16535:       typedef value_type& reference;
+16535:       typedef const value_type& const_reference;
+16535:       typedef size_t size_type;
+16535:       typedef ptrdiff_t difference_type;
+16535:       typedef _Alloc allocator_type;
+16535: 
+16535:       _Node_allocator&
+16535:       _M_get_Node_allocator() noexcept
+16535:       { return this->_M_impl; }
+16535: 
+16535:       const _Node_allocator&
+16535:       _M_get_Node_allocator() const noexcept
+16535:       { return this->_M_impl; }
+16535: 
+16535:       allocator_type
+16535:       get_allocator() const noexcept
+16535:       { return allocator_type(_M_get_Node_allocator()); }
+16535: 
+16535:     protected:
+16535:       _Link_type
+16535:       _M_get_node()
+16535:       { return _Alloc_traits::allocate(_M_get_Node_allocator(), 1); }
+16535: 
+16535:       void
+16535:       _M_put_node(_Link_type __p) noexcept
+16535:       { _Alloc_traits::deallocate(_M_get_Node_allocator(), __p, 1); }
+16535: # 630 "/usr/include/c++/8/bits/stl_tree.h" 3
+16535:       template<typename... _Args>
+16535:  void
+16535:  _M_construct_node(_Link_type __node, _Args&&... __args)
+16535:  {
+16535:    try
+16535:      {
+16535:        ::new(__node) _Rb_tree_node<_Val>;
+16535:        _Alloc_traits::construct(_M_get_Node_allocator(),
+16535:            __node->_M_valptr(),
+16535:            std::forward<_Args>(__args)...);
+16535:      }
+16535:    catch(...)
+16535:      {
+16535:        __node->~_Rb_tree_node<_Val>();
+16535:        _M_put_node(__node);
+16535:        throw;
+16535:      }
+16535:  }
+16535: 
+16535:       template<typename... _Args>
+16535:  _Link_type
+16535:  _M_create_node(_Args&&... __args)
+16535:  {
+16535:    _Link_type __tmp = _M_get_node();
+16535:    _M_construct_node(__tmp, std::forward<_Args>(__args)...);
+16535:    return __tmp;
+16535:  }
+16535: 
+16535:       void
+16535:       _M_destroy_node(_Link_type __p) noexcept
+16535:       {
+16535:  _Alloc_traits::destroy(_M_get_Node_allocator(), __p->_M_valptr());
+16535:  __p->~_Rb_tree_node<_Val>();
+16535:       }
+16535: 
+16535: 
+16535:       void
+16535:       _M_drop_node(_Link_type __p) noexcept
+16535:       {
+16535:  _M_destroy_node(__p);
+16535:  _M_put_node(__p);
+16535:       }
+16535: 
+16535:       template<typename _NodeGen>
+16535:  _Link_type
+16535:  _M_clone_node(_Const_Link_type __x, _NodeGen& __node_gen)
+16535:  {
+16535:    _Link_type __tmp = __node_gen(*__x->_M_valptr());
+16535:    __tmp->_M_color = __x->_M_color;
+16535:    __tmp->_M_left = 0;
+16535:    __tmp->_M_right = 0;
+16535:    return __tmp;
+16535:  }
+16535: 
+16535:     protected:
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Key_compare,
+16535:         bool = __is_pod(_Key_compare)>
+16535: 
+16535:  struct _Rb_tree_impl
+16535:  : public _Node_allocator
+16535:  , public _Rb_tree_key_compare<_Key_compare>
+16535:  , public _Rb_tree_header
+16535:  {
+16535:    typedef _Rb_tree_key_compare<_Key_compare> _Base_key_compare;
+16535: 
+16535:    _Rb_tree_impl()
+16535:      noexcept(is_nothrow_default_constructible<_Node_allocator>::value && is_nothrow_default_constructible<_Base_key_compare>::value)
+16535: 
+16535: 
+16535:    : _Node_allocator()
+16535:    { }
+16535: 
+16535:    _Rb_tree_impl(const _Rb_tree_impl& __x)
+16535:    : _Node_allocator(_Alloc_traits::_S_select_on_copy(__x))
+16535:    , _Base_key_compare(__x._M_key_compare)
+16535:    { }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:    _Rb_tree_impl(_Rb_tree_impl&&) = default;
+16535: 
+16535:    _Rb_tree_impl(const _Key_compare& __comp, _Node_allocator&& __a)
+16535:    : _Node_allocator(std::move(__a)), _Base_key_compare(__comp)
+16535:    { }
+16535: 
+16535:  };
+16535: 
+16535:       _Rb_tree_impl<_Compare> _M_impl;
+16535: 
+16535:     protected:
+16535:       _Base_ptr&
+16535:       _M_root() noexcept
+16535:       { return this->_M_impl._M_header._M_parent; }
+16535: 
+16535:       _Const_Base_ptr
+16535:       _M_root() const noexcept
+16535:       { return this->_M_impl._M_header._M_parent; }
+16535: 
+16535:       _Base_ptr&
+16535:       _M_leftmost() noexcept
+16535:       { return this->_M_impl._M_header._M_left; }
+16535: 
+16535:       _Const_Base_ptr
+16535:       _M_leftmost() const noexcept
+16535:       { return this->_M_impl._M_header._M_left; }
+16535: 
+16535:       _Base_ptr&
+16535:       _M_rightmost() noexcept
+16535:       { return this->_M_impl._M_header._M_right; }
+16535: 
+16535:       _Const_Base_ptr
+16535:       _M_rightmost() const noexcept
+16535:       { return this->_M_impl._M_header._M_right; }
+16535: 
+16535:       _Link_type
+16535:       _M_begin() noexcept
+16535:       { return static_cast<_Link_type>(this->_M_impl._M_header._M_parent); }
+16535: 
+16535:       _Const_Link_type
+16535:       _M_begin() const noexcept
+16535:       {
+16535:  return static_cast<_Const_Link_type>
+16535:    (this->_M_impl._M_header._M_parent);
+16535:       }
+16535: 
+16535:       _Base_ptr
+16535:       _M_end() noexcept
+16535:       { return &this->_M_impl._M_header; }
+16535: 
+16535:       _Const_Base_ptr
+16535:       _M_end() const noexcept
+16535:       { return &this->_M_impl._M_header; }
+16535: 
+16535:       static const_reference
+16535:       _S_value(_Const_Link_type __x)
+16535:       { return *__x->_M_valptr(); }
+16535: 
+16535:       static const _Key&
+16535:       _S_key(_Const_Link_type __x)
+16535:       { return _KeyOfValue()(_S_value(__x)); }
+16535: 
+16535:       static _Link_type
+16535:       _S_left(_Base_ptr __x) noexcept
+16535:       { return static_cast<_Link_type>(__x->_M_left); }
+16535: 
+16535:       static _Const_Link_type
+16535:       _S_left(_Const_Base_ptr __x) noexcept
+16535:       { return static_cast<_Const_Link_type>(__x->_M_left); }
+16535: 
+16535:       static _Link_type
+16535:       _S_right(_Base_ptr __x) noexcept
+16535:       { return static_cast<_Link_type>(__x->_M_right); }
+16535: 
+16535:       static _Const_Link_type
+16535:       _S_right(_Const_Base_ptr __x) noexcept
+16535:       { return static_cast<_Const_Link_type>(__x->_M_right); }
+16535: 
+16535:       static const_reference
+16535:       _S_value(_Const_Base_ptr __x)
+16535:       { return *static_cast<_Const_Link_type>(__x)->_M_valptr(); }
+16535: 
+16535:       static const _Key&
+16535:       _S_key(_Const_Base_ptr __x)
+16535:       { return _KeyOfValue()(_S_value(__x)); }
+16535: 
+16535:       static _Base_ptr
+16535:       _S_minimum(_Base_ptr __x) noexcept
+16535:       { return _Rb_tree_node_base::_S_minimum(__x); }
+16535: 
+16535:       static _Const_Base_ptr
+16535:       _S_minimum(_Const_Base_ptr __x) noexcept
+16535:       { return _Rb_tree_node_base::_S_minimum(__x); }
+16535: 
+16535:       static _Base_ptr
+16535:       _S_maximum(_Base_ptr __x) noexcept
+16535:       { return _Rb_tree_node_base::_S_maximum(__x); }
+16535: 
+16535:       static _Const_Base_ptr
+16535:       _S_maximum(_Const_Base_ptr __x) noexcept
+16535:       { return _Rb_tree_node_base::_S_maximum(__x); }
+16535: 
+16535:     public:
+16535:       typedef _Rb_tree_iterator<value_type> iterator;
+16535:       typedef _Rb_tree_const_iterator<value_type> const_iterator;
+16535: 
+16535:       typedef std::reverse_iterator<iterator> reverse_iterator;
+16535:       typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+16535: # 832 "/usr/include/c++/8/bits/stl_tree.h" 3
+16535:       pair<_Base_ptr, _Base_ptr>
+16535:       _M_get_insert_unique_pos(const key_type& __k);
+16535: 
+16535:       pair<_Base_ptr, _Base_ptr>
+16535:       _M_get_insert_equal_pos(const key_type& __k);
+16535: 
+16535:       pair<_Base_ptr, _Base_ptr>
+16535:       _M_get_insert_hint_unique_pos(const_iterator __pos,
+16535:         const key_type& __k);
+16535: 
+16535:       pair<_Base_ptr, _Base_ptr>
+16535:       _M_get_insert_hint_equal_pos(const_iterator __pos,
+16535:        const key_type& __k);
+16535: 
+16535:     private:
+16535: 
+16535:       template<typename _Arg, typename _NodeGen>
+16535:  iterator
+16535:  _M_insert_(_Base_ptr __x, _Base_ptr __y, _Arg&& __v, _NodeGen&);
+16535: 
+16535:       iterator
+16535:       _M_insert_node(_Base_ptr __x, _Base_ptr __y, _Link_type __z);
+16535: 
+16535:       template<typename _Arg>
+16535:  iterator
+16535:  _M_insert_lower(_Base_ptr __y, _Arg&& __v);
+16535: 
+16535:       template<typename _Arg>
+16535:  iterator
+16535:  _M_insert_equal_lower(_Arg&& __x);
+16535: 
+16535:       iterator
+16535:       _M_insert_lower_node(_Base_ptr __p, _Link_type __z);
+16535: 
+16535:       iterator
+16535:       _M_insert_equal_lower_node(_Link_type __z);
+16535: # 883 "/usr/include/c++/8/bits/stl_tree.h" 3
+16535:       template<typename _NodeGen>
+16535:  _Link_type
+16535:  _M_copy(_Const_Link_type __x, _Base_ptr __p, _NodeGen&);
+16535: 
+16535:       template<typename _NodeGen>
+16535:  _Link_type
+16535:  _M_copy(const _Rb_tree& __x, _NodeGen& __gen)
+16535:  {
+16535:    _Link_type __root = _M_copy(__x._M_begin(), _M_end(), __gen);
+16535:    _M_leftmost() = _S_minimum(__root);
+16535:    _M_rightmost() = _S_maximum(__root);
+16535:    _M_impl._M_node_count = __x._M_impl._M_node_count;
+16535:    return __root;
+16535:  }
+16535: 
+16535:       _Link_type
+16535:       _M_copy(const _Rb_tree& __x)
+16535:       {
+16535:  _Alloc_node __an(*this);
+16535:  return _M_copy(__x, __an);
+16535:       }
+16535: 
+16535:       void
+16535:       _M_erase(_Link_type __x);
+16535: 
+16535:       iterator
+16535:       _M_lower_bound(_Link_type __x, _Base_ptr __y,
+16535:        const _Key& __k);
+16535: 
+16535:       const_iterator
+16535:       _M_lower_bound(_Const_Link_type __x, _Const_Base_ptr __y,
+16535:        const _Key& __k) const;
+16535: 
+16535:       iterator
+16535:       _M_upper_bound(_Link_type __x, _Base_ptr __y,
+16535:        const _Key& __k);
+16535: 
+16535:       const_iterator
+16535:       _M_upper_bound(_Const_Link_type __x, _Const_Base_ptr __y,
+16535:        const _Key& __k) const;
+16535: 
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       _Rb_tree() = default;
+16535: 
+16535: 
+16535:       _Rb_tree(const _Compare& __comp,
+16535:         const allocator_type& __a = allocator_type())
+16535:       : _M_impl(__comp, _Node_allocator(__a)) { }
+16535: 
+16535:       _Rb_tree(const _Rb_tree& __x)
+16535:       : _M_impl(__x._M_impl)
+16535:       {
+16535:  if (__x._M_root() != 0)
+16535:    _M_root() = _M_copy(__x);
+16535:       }
+16535: 
+16535: 
+16535:       _Rb_tree(const allocator_type& __a)
+16535:       : _M_impl(_Compare(), _Node_allocator(__a))
+16535:       { }
+16535: 
+16535:       _Rb_tree(const _Rb_tree& __x, const allocator_type& __a)
+16535:       : _M_impl(__x._M_impl._M_key_compare, _Node_allocator(__a))
+16535:       {
+16535:  if (__x._M_root() != nullptr)
+16535:    _M_root() = _M_copy(__x);
+16535:       }
+16535: 
+16535:       _Rb_tree(_Rb_tree&&) = default;
+16535: 
+16535:       _Rb_tree(_Rb_tree&& __x, const allocator_type& __a)
+16535:       : _Rb_tree(std::move(__x), _Node_allocator(__a))
+16535:       { }
+16535: 
+16535:       _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a);
+16535: 
+16535: 
+16535:       ~_Rb_tree() noexcept
+16535:       { _M_erase(_M_begin()); }
+16535: 
+16535:       _Rb_tree&
+16535:       operator=(const _Rb_tree& __x);
+16535: 
+16535: 
+16535:       _Compare
+16535:       key_comp() const
+16535:       { return _M_impl._M_key_compare; }
+16535: 
+16535:       iterator
+16535:       begin() noexcept
+16535:       { return iterator(this->_M_impl._M_header._M_left); }
+16535: 
+16535:       const_iterator
+16535:       begin() const noexcept
+16535:       { return const_iterator(this->_M_impl._M_header._M_left); }
+16535: 
+16535:       iterator
+16535:       end() noexcept
+16535:       { return iterator(&this->_M_impl._M_header); }
+16535: 
+16535:       const_iterator
+16535:       end() const noexcept
+16535:       { return const_iterator(&this->_M_impl._M_header); }
+16535: 
+16535:       reverse_iterator
+16535:       rbegin() noexcept
+16535:       { return reverse_iterator(end()); }
+16535: 
+16535:       const_reverse_iterator
+16535:       rbegin() const noexcept
+16535:       { return const_reverse_iterator(end()); }
+16535: 
+16535:       reverse_iterator
+16535:       rend() noexcept
+16535:       { return reverse_iterator(begin()); }
+16535: 
+16535:       const_reverse_iterator
+16535:       rend() const noexcept
+16535:       { return const_reverse_iterator(begin()); }
+16535: 
+16535:       bool
+16535:       empty() const noexcept
+16535:       { return _M_impl._M_node_count == 0; }
+16535: 
+16535:       size_type
+16535:       size() const noexcept
+16535:       { return _M_impl._M_node_count; }
+16535: 
+16535:       size_type
+16535:       max_size() const noexcept
+16535:       { return _Alloc_traits::max_size(_M_get_Node_allocator()); }
+16535: 
+16535:       void
+16535:       swap(_Rb_tree& __t)
+16535:       noexcept(__is_nothrow_swappable<_Compare>::value);
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Arg>
+16535:  pair<iterator, bool>
+16535:  _M_insert_unique(_Arg&& __x);
+16535: 
+16535:       template<typename _Arg>
+16535:  iterator
+16535:  _M_insert_equal(_Arg&& __x);
+16535: 
+16535:       template<typename _Arg, typename _NodeGen>
+16535:  iterator
+16535:  _M_insert_unique_(const_iterator __pos, _Arg&& __x, _NodeGen&);
+16535: 
+16535:       template<typename _Arg>
+16535:  iterator
+16535:  _M_insert_unique_(const_iterator __pos, _Arg&& __x)
+16535:  {
+16535:    _Alloc_node __an(*this);
+16535:    return _M_insert_unique_(__pos, std::forward<_Arg>(__x), __an);
+16535:  }
+16535: 
+16535:       template<typename _Arg, typename _NodeGen>
+16535:  iterator
+16535:  _M_insert_equal_(const_iterator __pos, _Arg&& __x, _NodeGen&);
+16535: 
+16535:       template<typename _Arg>
+16535:  iterator
+16535:  _M_insert_equal_(const_iterator __pos, _Arg&& __x)
+16535:  {
+16535:    _Alloc_node __an(*this);
+16535:    return _M_insert_equal_(__pos, std::forward<_Arg>(__x), __an);
+16535:  }
+16535: 
+16535:       template<typename... _Args>
+16535:  pair<iterator, bool>
+16535:  _M_emplace_unique(_Args&&... __args);
+16535: 
+16535:       template<typename... _Args>
+16535:  iterator
+16535:  _M_emplace_equal(_Args&&... __args);
+16535: 
+16535:       template<typename... _Args>
+16535:  iterator
+16535:  _M_emplace_hint_unique(const_iterator __pos, _Args&&... __args);
+16535: 
+16535:       template<typename... _Args>
+16535:  iterator
+16535:  _M_emplace_hint_equal(const_iterator __pos, _Args&&... __args);
+16535: # 1103 "/usr/include/c++/8/bits/stl_tree.h" 3
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  _M_insert_unique(_InputIterator __first, _InputIterator __last);
+16535: 
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  _M_insert_equal(_InputIterator __first, _InputIterator __last);
+16535: 
+16535:     private:
+16535:       void
+16535:       _M_erase_aux(const_iterator __position);
+16535: 
+16535:       void
+16535:       _M_erase_aux(const_iterator __first, const_iterator __last);
+16535: 
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535:       __attribute ((__abi_tag__ ("cxx11")))
+16535:       iterator
+16535:       erase(const_iterator __position)
+16535:       {
+16535:  ;
+16535:  const_iterator __result = __position;
+16535:  ++__result;
+16535:  _M_erase_aux(__position);
+16535:  return __result._M_const_cast();
+16535:       }
+16535: 
+16535: 
+16535:       __attribute ((__abi_tag__ ("cxx11")))
+16535:       iterator
+16535:       erase(iterator __position)
+16535:       {
+16535:  ;
+16535:  iterator __result = __position;
+16535:  ++__result;
+16535:  _M_erase_aux(__position);
+16535:  return __result;
+16535:       }
+16535: # 1159 "/usr/include/c++/8/bits/stl_tree.h" 3
+16535:       size_type
+16535:       erase(const key_type& __x);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       __attribute ((__abi_tag__ ("cxx11")))
+16535:       iterator
+16535:       erase(const_iterator __first, const_iterator __last)
+16535:       {
+16535:  _M_erase_aux(__first, __last);
+16535:  return __last._M_const_cast();
+16535:       }
+16535: # 1181 "/usr/include/c++/8/bits/stl_tree.h" 3
+16535:       void
+16535:       erase(const key_type* __first, const key_type* __last);
+16535: 
+16535:       void
+16535:       clear() noexcept
+16535:       {
+16535:  _M_erase(_M_begin());
+16535:  _M_impl._M_reset();
+16535:       }
+16535: 
+16535: 
+16535:       iterator
+16535:       find(const key_type& __k);
+16535: 
+16535:       const_iterator
+16535:       find(const key_type& __k) const;
+16535: 
+16535:       size_type
+16535:       count(const key_type& __k) const;
+16535: 
+16535:       iterator
+16535:       lower_bound(const key_type& __k)
+16535:       { return _M_lower_bound(_M_begin(), _M_end(), __k); }
+16535: 
+16535:       const_iterator
+16535:       lower_bound(const key_type& __k) const
+16535:       { return _M_lower_bound(_M_begin(), _M_end(), __k); }
+16535: 
+16535:       iterator
+16535:       upper_bound(const key_type& __k)
+16535:       { return _M_upper_bound(_M_begin(), _M_end(), __k); }
+16535: 
+16535:       const_iterator
+16535:       upper_bound(const key_type& __k) const
+16535:       { return _M_upper_bound(_M_begin(), _M_end(), __k); }
+16535: 
+16535:       pair<iterator, iterator>
+16535:       equal_range(const key_type& __k);
+16535: 
+16535:       pair<const_iterator, const_iterator>
+16535:       equal_range(const key_type& __k) const;
+16535: 
+16535: 
+16535:       template<typename _Kt,
+16535:         typename _Req =
+16535:    typename __has_is_transparent<_Compare, _Kt>::type>
+16535:  iterator
+16535:  _M_find_tr(const _Kt& __k)
+16535:  {
+16535:    const _Rb_tree* __const_this = this;
+16535:    return __const_this->_M_find_tr(__k)._M_const_cast();
+16535:  }
+16535: 
+16535:       template<typename _Kt,
+16535:         typename _Req =
+16535:    typename __has_is_transparent<_Compare, _Kt>::type>
+16535:  const_iterator
+16535:  _M_find_tr(const _Kt& __k) const
+16535:  {
+16535:    auto __j = _M_lower_bound_tr(__k);
+16535:    if (__j != end() && _M_impl._M_key_compare(__k, _S_key(__j._M_node)))
+16535:      __j = end();
+16535:    return __j;
+16535:  }
+16535: 
+16535:       template<typename _Kt,
+16535:         typename _Req =
+16535:    typename __has_is_transparent<_Compare, _Kt>::type>
+16535:  size_type
+16535:  _M_count_tr(const _Kt& __k) const
+16535:  {
+16535:    auto __p = _M_equal_range_tr(__k);
+16535:    return std::distance(__p.first, __p.second);
+16535:  }
+16535: 
+16535:       template<typename _Kt,
+16535:         typename _Req =
+16535:    typename __has_is_transparent<_Compare, _Kt>::type>
+16535:  iterator
+16535:  _M_lower_bound_tr(const _Kt& __k)
+16535:  {
+16535:    const _Rb_tree* __const_this = this;
+16535:    return __const_this->_M_lower_bound_tr(__k)._M_const_cast();
+16535:  }
+16535: 
+16535:       template<typename _Kt,
+16535:         typename _Req =
+16535:    typename __has_is_transparent<_Compare, _Kt>::type>
+16535:  const_iterator
+16535:  _M_lower_bound_tr(const _Kt& __k) const
+16535:  {
+16535:    auto __x = _M_begin();
+16535:    auto __y = _M_end();
+16535:    while (__x != 0)
+16535:      if (!_M_impl._M_key_compare(_S_key(__x), __k))
+16535:        {
+16535:   __y = __x;
+16535:   __x = _S_left(__x);
+16535:        }
+16535:      else
+16535:        __x = _S_right(__x);
+16535:    return const_iterator(__y);
+16535:  }
+16535: 
+16535:       template<typename _Kt,
+16535:         typename _Req =
+16535:    typename __has_is_transparent<_Compare, _Kt>::type>
+16535:  iterator
+16535:  _M_upper_bound_tr(const _Kt& __k)
+16535:  {
+16535:    const _Rb_tree* __const_this = this;
+16535:    return __const_this->_M_upper_bound_tr(__k)._M_const_cast();
+16535:  }
+16535: 
+16535:       template<typename _Kt,
+16535:         typename _Req =
+16535:    typename __has_is_transparent<_Compare, _Kt>::type>
+16535:  const_iterator
+16535:  _M_upper_bound_tr(const _Kt& __k) const
+16535:  {
+16535:    auto __x = _M_begin();
+16535:    auto __y = _M_end();
+16535:    while (__x != 0)
+16535:      if (_M_impl._M_key_compare(__k, _S_key(__x)))
+16535:        {
+16535:   __y = __x;
+16535:   __x = _S_left(__x);
+16535:        }
+16535:      else
+16535:        __x = _S_right(__x);
+16535:    return const_iterator(__y);
+16535:  }
+16535: 
+16535:       template<typename _Kt,
+16535:         typename _Req =
+16535:    typename __has_is_transparent<_Compare, _Kt>::type>
+16535:  pair<iterator, iterator>
+16535:  _M_equal_range_tr(const _Kt& __k)
+16535:  {
+16535:    const _Rb_tree* __const_this = this;
+16535:    auto __ret = __const_this->_M_equal_range_tr(__k);
+16535:    return { __ret.first._M_const_cast(), __ret.second._M_const_cast() };
+16535:  }
+16535: 
+16535:       template<typename _Kt,
+16535:         typename _Req =
+16535:    typename __has_is_transparent<_Compare, _Kt>::type>
+16535:  pair<const_iterator, const_iterator>
+16535:  _M_equal_range_tr(const _Kt& __k) const
+16535:  {
+16535:    auto __low = _M_lower_bound_tr(__k);
+16535:    auto __high = __low;
+16535:    auto& __cmp = _M_impl._M_key_compare;
+16535:    while (__high != end() && !__cmp(__k, _S_key(__high._M_node)))
+16535:      ++__high;
+16535:    return { __low, __high };
+16535:  }
+16535: 
+16535: 
+16535: 
+16535:       bool
+16535:       __rb_verify() const;
+16535: 
+16535: 
+16535:       _Rb_tree&
+16535:       operator=(_Rb_tree&&)
+16535:       noexcept(_Alloc_traits::_S_nothrow_move()
+16535:         && is_nothrow_move_assignable<_Compare>::value);
+16535: 
+16535:       template<typename _Iterator>
+16535:  void
+16535:  _M_assign_unique(_Iterator, _Iterator);
+16535: 
+16535:       template<typename _Iterator>
+16535:  void
+16535:  _M_assign_equal(_Iterator, _Iterator);
+16535: 
+16535:     private:
+16535: 
+16535:       void
+16535:       _M_move_data(_Rb_tree& __x, std::true_type)
+16535:       { _M_impl._M_move_data(__x._M_impl); }
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_move_data(_Rb_tree&, std::false_type);
+16535: 
+16535: 
+16535:       void
+16535:       _M_move_assign(_Rb_tree&, std::true_type);
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_move_assign(_Rb_tree&, std::false_type);
+16535: # 1544 "/usr/include/c++/8/bits/stl_tree.h" 3
+16535:     };
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator==(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
+16535:         const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y)
+16535:     {
+16535:       return __x.size() == __y.size()
+16535:       && std::equal(__x.begin(), __x.end(), __y.begin());
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator<(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
+16535:        const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y)
+16535:     {
+16535:       return std::lexicographical_compare(__x.begin(), __x.end(),
+16535:        __y.begin(), __y.end());
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator!=(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
+16535:         const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y)
+16535:     { return !(__x == __y); }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator>(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
+16535:        const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y)
+16535:     { return __y < __x; }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator<=(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
+16535:         const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y)
+16535:     { return !(__y < __x); }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator>=(const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
+16535:         const _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y)
+16535:     { return !(__x < __y); }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     inline void
+16535:     swap(_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __x,
+16535:   _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>& __y)
+16535:     { __x.swap(__y); }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a)
+16535:     : _M_impl(__x._M_impl._M_key_compare, std::move(__a))
+16535:     {
+16535:       using __eq = typename _Alloc_traits::is_always_equal;
+16535:       if (__x._M_root() != nullptr)
+16535:  _M_move_data(__x, __eq());
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     void
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     _M_move_data(_Rb_tree& __x, std::false_type)
+16535:     {
+16535:       if (_M_get_Node_allocator() == __x._M_get_Node_allocator())
+16535:  _M_move_data(__x, std::true_type());
+16535:       else
+16535:  {
+16535:    _Alloc_node __an(*this);
+16535:    auto __lbd =
+16535:      [&__an](const value_type& __cval)
+16535:      {
+16535:        auto& __val = const_cast<value_type&>(__cval);
+16535:        return __an(std::move_if_noexcept(__val));
+16535:      };
+16535:    _M_root() = _M_copy(__x, __lbd);
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     inline void
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     _M_move_assign(_Rb_tree& __x, true_type)
+16535:     {
+16535:       clear();
+16535:       if (__x._M_root() != nullptr)
+16535:  _M_move_data(__x, std::true_type());
+16535:       std::__alloc_on_move(_M_get_Node_allocator(),
+16535:       __x._M_get_Node_allocator());
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     void
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     _M_move_assign(_Rb_tree& __x, false_type)
+16535:     {
+16535:       if (_M_get_Node_allocator() == __x._M_get_Node_allocator())
+16535:  return _M_move_assign(__x, true_type{});
+16535: 
+16535: 
+16535: 
+16535:       _Reuse_or_alloc_node __roan(*this);
+16535:       _M_impl._M_reset();
+16535:       if (__x._M_root() != nullptr)
+16535:  {
+16535:    auto __lbd =
+16535:      [&__roan](const value_type& __cval)
+16535:      {
+16535:        auto& __val = const_cast<value_type&>(__cval);
+16535:        return __roan(std::move_if_noexcept(__val));
+16535:      };
+16535:    _M_root() = _M_copy(__x, __lbd);
+16535:    __x.clear();
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     inline _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>&
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     operator=(_Rb_tree&& __x)
+16535:     noexcept(_Alloc_traits::_S_nothrow_move()
+16535:       && is_nothrow_move_assignable<_Compare>::value)
+16535:     {
+16535:       _M_impl._M_key_compare = std::move(__x._M_impl._M_key_compare);
+16535:       _M_move_assign(__x, __bool_constant<_Alloc_traits::_S_nothrow_move()>());
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     template<typename _Iterator>
+16535:       void
+16535:       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:       _M_assign_unique(_Iterator __first, _Iterator __last)
+16535:       {
+16535:  _Reuse_or_alloc_node __roan(*this);
+16535:  _M_impl._M_reset();
+16535:  for (; __first != __last; ++__first)
+16535:    _M_insert_unique_(end(), *__first, __roan);
+16535:       }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     template<typename _Iterator>
+16535:       void
+16535:       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:       _M_assign_equal(_Iterator __first, _Iterator __last)
+16535:       {
+16535:  _Reuse_or_alloc_node __roan(*this);
+16535:  _M_impl._M_reset();
+16535:  for (; __first != __last; ++__first)
+16535:    _M_insert_equal_(end(), *__first, __roan);
+16535:       }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>&
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     operator=(const _Rb_tree& __x)
+16535:     {
+16535:       if (this != &__x)
+16535:  {
+16535: 
+16535: 
+16535:    if (_Alloc_traits::_S_propagate_on_copy_assign())
+16535:      {
+16535:        auto& __this_alloc = this->_M_get_Node_allocator();
+16535:        auto& __that_alloc = __x._M_get_Node_allocator();
+16535:        if (!_Alloc_traits::_S_always_equal()
+16535:     && __this_alloc != __that_alloc)
+16535:   {
+16535: 
+16535: 
+16535:     clear();
+16535:     std::__alloc_on_copy(__this_alloc, __that_alloc);
+16535:   }
+16535:      }
+16535: 
+16535: 
+16535:    _Reuse_or_alloc_node __roan(*this);
+16535:    _M_impl._M_reset();
+16535:    _M_impl._M_key_compare = __x._M_impl._M_key_compare;
+16535:    if (__x._M_root() != 0)
+16535:      _M_root() = _M_copy(__x, __roan);
+16535:  }
+16535: 
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535: 
+16535:     template<typename _Arg, typename _NodeGen>
+16535: 
+16535: 
+16535: 
+16535:       typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+16535:       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:       _M_insert_(_Base_ptr __x, _Base_ptr __p,
+16535: 
+16535:    _Arg&& __v,
+16535: 
+16535: 
+16535: 
+16535:    _NodeGen& __node_gen)
+16535:       {
+16535:  bool __insert_left = (__x != 0 || __p == _M_end()
+16535:          || _M_impl._M_key_compare(_KeyOfValue()(__v),
+16535:        _S_key(__p)));
+16535: 
+16535:  _Link_type __z = __node_gen(std::forward<_Arg>(__v));
+16535: 
+16535:  _Rb_tree_insert_and_rebalance(__insert_left, __z, __p,
+16535:           this->_M_impl._M_header);
+16535:  ++_M_impl._M_node_count;
+16535:  return iterator(__z);
+16535:       }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535: 
+16535:     template<typename _Arg>
+16535: 
+16535:     typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535: 
+16535:     _M_insert_lower(_Base_ptr __p, _Arg&& __v)
+16535: 
+16535: 
+16535: 
+16535:     {
+16535:       bool __insert_left = (__p == _M_end()
+16535:        || !_M_impl._M_key_compare(_S_key(__p),
+16535:              _KeyOfValue()(__v)));
+16535: 
+16535:       _Link_type __z = _M_create_node(std::forward<_Arg>(__v));
+16535: 
+16535:       _Rb_tree_insert_and_rebalance(__insert_left, __z, __p,
+16535:         this->_M_impl._M_header);
+16535:       ++_M_impl._M_node_count;
+16535:       return iterator(__z);
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535: 
+16535:     template<typename _Arg>
+16535: 
+16535:     typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535: 
+16535:     _M_insert_equal_lower(_Arg&& __v)
+16535: 
+16535: 
+16535: 
+16535:     {
+16535:       _Link_type __x = _M_begin();
+16535:       _Base_ptr __y = _M_end();
+16535:       while (__x != 0)
+16535:  {
+16535:    __y = __x;
+16535:    __x = !_M_impl._M_key_compare(_S_key(__x), _KeyOfValue()(__v)) ?
+16535:   _S_left(__x) : _S_right(__x);
+16535:  }
+16535:       return _M_insert_lower(__y, std::forward<_Arg>(__v));
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KoV,
+16535:     typename _Compare, typename _Alloc>
+16535:     template<typename _NodeGen>
+16535:       typename _Rb_tree<_Key, _Val, _KoV, _Compare, _Alloc>::_Link_type
+16535:       _Rb_tree<_Key, _Val, _KoV, _Compare, _Alloc>::
+16535:       _M_copy(_Const_Link_type __x, _Base_ptr __p, _NodeGen& __node_gen)
+16535:       {
+16535: 
+16535:  _Link_type __top = _M_clone_node(__x, __node_gen);
+16535:  __top->_M_parent = __p;
+16535: 
+16535:  try
+16535:    {
+16535:      if (__x->_M_right)
+16535:        __top->_M_right = _M_copy(_S_right(__x), __top, __node_gen);
+16535:      __p = __top;
+16535:      __x = _S_left(__x);
+16535: 
+16535:      while (__x != 0)
+16535:        {
+16535:   _Link_type __y = _M_clone_node(__x, __node_gen);
+16535:   __p->_M_left = __y;
+16535:   __y->_M_parent = __p;
+16535:   if (__x->_M_right)
+16535:     __y->_M_right = _M_copy(_S_right(__x), __y, __node_gen);
+16535:   __p = __y;
+16535:   __x = _S_left(__x);
+16535:        }
+16535:    }
+16535:  catch(...)
+16535:    {
+16535:      _M_erase(__top);
+16535:      throw;
+16535:    }
+16535:  return __top;
+16535:       }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     void
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     _M_erase(_Link_type __x)
+16535:     {
+16535: 
+16535:       while (__x != 0)
+16535:  {
+16535:    _M_erase(_S_right(__x));
+16535:    _Link_type __y = _S_left(__x);
+16535:    _M_drop_node(__x);
+16535:    __x = __y;
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     typename _Rb_tree<_Key, _Val, _KeyOfValue,
+16535:         _Compare, _Alloc>::iterator
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     _M_lower_bound(_Link_type __x, _Base_ptr __y,
+16535:      const _Key& __k)
+16535:     {
+16535:       while (__x != 0)
+16535:  if (!_M_impl._M_key_compare(_S_key(__x), __k))
+16535:    __y = __x, __x = _S_left(__x);
+16535:  else
+16535:    __x = _S_right(__x);
+16535:       return iterator(__y);
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     typename _Rb_tree<_Key, _Val, _KeyOfValue,
+16535:         _Compare, _Alloc>::const_iterator
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     _M_lower_bound(_Const_Link_type __x, _Const_Base_ptr __y,
+16535:      const _Key& __k) const
+16535:     {
+16535:       while (__x != 0)
+16535:  if (!_M_impl._M_key_compare(_S_key(__x), __k))
+16535:    __y = __x, __x = _S_left(__x);
+16535:  else
+16535:    __x = _S_right(__x);
+16535:       return const_iterator(__y);
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     typename _Rb_tree<_Key, _Val, _KeyOfValue,
+16535:         _Compare, _Alloc>::iterator
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     _M_upper_bound(_Link_type __x, _Base_ptr __y,
+16535:      const _Key& __k)
+16535:     {
+16535:       while (__x != 0)
+16535:  if (_M_impl._M_key_compare(__k, _S_key(__x)))
+16535:    __y = __x, __x = _S_left(__x);
+16535:  else
+16535:    __x = _S_right(__x);
+16535:       return iterator(__y);
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     typename _Rb_tree<_Key, _Val, _KeyOfValue,
+16535:         _Compare, _Alloc>::const_iterator
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     _M_upper_bound(_Const_Link_type __x, _Const_Base_ptr __y,
+16535:      const _Key& __k) const
+16535:     {
+16535:       while (__x != 0)
+16535:  if (_M_impl._M_key_compare(__k, _S_key(__x)))
+16535:    __y = __x, __x = _S_left(__x);
+16535:  else
+16535:    __x = _S_right(__x);
+16535:       return const_iterator(__y);
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
+16535:       _Compare, _Alloc>::iterator,
+16535:   typename _Rb_tree<_Key, _Val, _KeyOfValue,
+16535:       _Compare, _Alloc>::iterator>
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     equal_range(const _Key& __k)
+16535:     {
+16535:       _Link_type __x = _M_begin();
+16535:       _Base_ptr __y = _M_end();
+16535:       while (__x != 0)
+16535:  {
+16535:    if (_M_impl._M_key_compare(_S_key(__x), __k))
+16535:      __x = _S_right(__x);
+16535:    else if (_M_impl._M_key_compare(__k, _S_key(__x)))
+16535:      __y = __x, __x = _S_left(__x);
+16535:    else
+16535:      {
+16535:        _Link_type __xu(__x);
+16535:        _Base_ptr __yu(__y);
+16535:        __y = __x, __x = _S_left(__x);
+16535:        __xu = _S_right(__xu);
+16535:        return pair<iterator,
+16535:      iterator>(_M_lower_bound(__x, __y, __k),
+16535:         _M_upper_bound(__xu, __yu, __k));
+16535:      }
+16535:  }
+16535:       return pair<iterator, iterator>(iterator(__y),
+16535:           iterator(__y));
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
+16535:       _Compare, _Alloc>::const_iterator,
+16535:   typename _Rb_tree<_Key, _Val, _KeyOfValue,
+16535:       _Compare, _Alloc>::const_iterator>
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     equal_range(const _Key& __k) const
+16535:     {
+16535:       _Const_Link_type __x = _M_begin();
+16535:       _Const_Base_ptr __y = _M_end();
+16535:       while (__x != 0)
+16535:  {
+16535:    if (_M_impl._M_key_compare(_S_key(__x), __k))
+16535:      __x = _S_right(__x);
+16535:    else if (_M_impl._M_key_compare(__k, _S_key(__x)))
+16535:      __y = __x, __x = _S_left(__x);
+16535:    else
+16535:      {
+16535:        _Const_Link_type __xu(__x);
+16535:        _Const_Base_ptr __yu(__y);
+16535:        __y = __x, __x = _S_left(__x);
+16535:        __xu = _S_right(__xu);
+16535:        return pair<const_iterator,
+16535:      const_iterator>(_M_lower_bound(__x, __y, __k),
+16535:        _M_upper_bound(__xu, __yu, __k));
+16535:      }
+16535:  }
+16535:       return pair<const_iterator, const_iterator>(const_iterator(__y),
+16535:         const_iterator(__y));
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     void
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     swap(_Rb_tree& __t)
+16535:     noexcept(__is_nothrow_swappable<_Compare>::value)
+16535:     {
+16535:       if (_M_root() == 0)
+16535:  {
+16535:    if (__t._M_root() != 0)
+16535:      _M_impl._M_move_data(__t._M_impl);
+16535:  }
+16535:       else if (__t._M_root() == 0)
+16535:  __t._M_impl._M_move_data(_M_impl);
+16535:       else
+16535:  {
+16535:    std::swap(_M_root(),__t._M_root());
+16535:    std::swap(_M_leftmost(),__t._M_leftmost());
+16535:    std::swap(_M_rightmost(),__t._M_rightmost());
+16535: 
+16535:    _M_root()->_M_parent = _M_end();
+16535:    __t._M_root()->_M_parent = __t._M_end();
+16535:    std::swap(this->_M_impl._M_node_count, __t._M_impl._M_node_count);
+16535:  }
+16535: 
+16535:       std::swap(this->_M_impl._M_key_compare, __t._M_impl._M_key_compare);
+16535: 
+16535:       _Alloc_traits::_S_on_swap(_M_get_Node_allocator(),
+16535:     __t._M_get_Node_allocator());
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
+16535:       _Compare, _Alloc>::_Base_ptr,
+16535:   typename _Rb_tree<_Key, _Val, _KeyOfValue,
+16535:       _Compare, _Alloc>::_Base_ptr>
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     _M_get_insert_unique_pos(const key_type& __k)
+16535:     {
+16535:       typedef pair<_Base_ptr, _Base_ptr> _Res;
+16535:       _Link_type __x = _M_begin();
+16535:       _Base_ptr __y = _M_end();
+16535:       bool __comp = true;
+16535:       while (__x != 0)
+16535:  {
+16535:    __y = __x;
+16535:    __comp = _M_impl._M_key_compare(__k, _S_key(__x));
+16535:    __x = __comp ? _S_left(__x) : _S_right(__x);
+16535:  }
+16535:       iterator __j = iterator(__y);
+16535:       if (__comp)
+16535:  {
+16535:    if (__j == begin())
+16535:      return _Res(__x, __y);
+16535:    else
+16535:      --__j;
+16535:  }
+16535:       if (_M_impl._M_key_compare(_S_key(__j._M_node), __k))
+16535:  return _Res(__x, __y);
+16535:       return _Res(__j._M_node, 0);
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
+16535:       _Compare, _Alloc>::_Base_ptr,
+16535:   typename _Rb_tree<_Key, _Val, _KeyOfValue,
+16535:       _Compare, _Alloc>::_Base_ptr>
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     _M_get_insert_equal_pos(const key_type& __k)
+16535:     {
+16535:       typedef pair<_Base_ptr, _Base_ptr> _Res;
+16535:       _Link_type __x = _M_begin();
+16535:       _Base_ptr __y = _M_end();
+16535:       while (__x != 0)
+16535:  {
+16535:    __y = __x;
+16535:    __x = _M_impl._M_key_compare(__k, _S_key(__x)) ?
+16535:   _S_left(__x) : _S_right(__x);
+16535:  }
+16535:       return _Res(__x, __y);
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535: 
+16535:     template<typename _Arg>
+16535: 
+16535:     pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
+16535:       _Compare, _Alloc>::iterator, bool>
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535: 
+16535:     _M_insert_unique(_Arg&& __v)
+16535: 
+16535: 
+16535: 
+16535:     {
+16535:       typedef pair<iterator, bool> _Res;
+16535:       pair<_Base_ptr, _Base_ptr> __res
+16535:  = _M_get_insert_unique_pos(_KeyOfValue()(__v));
+16535: 
+16535:       if (__res.second)
+16535:  {
+16535:    _Alloc_node __an(*this);
+16535:    return _Res(_M_insert_(__res.first, __res.second,
+16535:      std::forward<_Arg>(__v), __an),
+16535:         true);
+16535:  }
+16535: 
+16535:       return _Res(iterator(__res.first), false);
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535: 
+16535:     template<typename _Arg>
+16535: 
+16535:     typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535: 
+16535:     _M_insert_equal(_Arg&& __v)
+16535: 
+16535: 
+16535: 
+16535:     {
+16535:       pair<_Base_ptr, _Base_ptr> __res
+16535:  = _M_get_insert_equal_pos(_KeyOfValue()(__v));
+16535:       _Alloc_node __an(*this);
+16535:       return _M_insert_(__res.first, __res.second,
+16535:    std::forward<_Arg>(__v), __an);
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
+16535:       _Compare, _Alloc>::_Base_ptr,
+16535:   typename _Rb_tree<_Key, _Val, _KeyOfValue,
+16535:       _Compare, _Alloc>::_Base_ptr>
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     _M_get_insert_hint_unique_pos(const_iterator __position,
+16535:       const key_type& __k)
+16535:     {
+16535:       iterator __pos = __position._M_const_cast();
+16535:       typedef pair<_Base_ptr, _Base_ptr> _Res;
+16535: 
+16535: 
+16535:       if (__pos._M_node == _M_end())
+16535:  {
+16535:    if (size() > 0
+16535:        && _M_impl._M_key_compare(_S_key(_M_rightmost()), __k))
+16535:      return _Res(0, _M_rightmost());
+16535:    else
+16535:      return _M_get_insert_unique_pos(__k);
+16535:  }
+16535:       else if (_M_impl._M_key_compare(__k, _S_key(__pos._M_node)))
+16535:  {
+16535: 
+16535:    iterator __before = __pos;
+16535:    if (__pos._M_node == _M_leftmost())
+16535:      return _Res(_M_leftmost(), _M_leftmost());
+16535:    else if (_M_impl._M_key_compare(_S_key((--__before)._M_node), __k))
+16535:      {
+16535:        if (_S_right(__before._M_node) == 0)
+16535:   return _Res(0, __before._M_node);
+16535:        else
+16535:   return _Res(__pos._M_node, __pos._M_node);
+16535:      }
+16535:    else
+16535:      return _M_get_insert_unique_pos(__k);
+16535:  }
+16535:       else if (_M_impl._M_key_compare(_S_key(__pos._M_node), __k))
+16535:  {
+16535: 
+16535:    iterator __after = __pos;
+16535:    if (__pos._M_node == _M_rightmost())
+16535:      return _Res(0, _M_rightmost());
+16535:    else if (_M_impl._M_key_compare(__k, _S_key((++__after)._M_node)))
+16535:      {
+16535:        if (_S_right(__pos._M_node) == 0)
+16535:   return _Res(0, __pos._M_node);
+16535:        else
+16535:   return _Res(__after._M_node, __after._M_node);
+16535:      }
+16535:    else
+16535:      return _M_get_insert_unique_pos(__k);
+16535:  }
+16535:       else
+16535: 
+16535:  return _Res(__pos._M_node, 0);
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535: 
+16535:     template<typename _Arg, typename _NodeGen>
+16535: 
+16535: 
+16535: 
+16535:       typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+16535:       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:       _M_insert_unique_(const_iterator __position,
+16535: 
+16535:    _Arg&& __v,
+16535: 
+16535: 
+16535: 
+16535:    _NodeGen& __node_gen)
+16535:     {
+16535:       pair<_Base_ptr, _Base_ptr> __res
+16535:  = _M_get_insert_hint_unique_pos(__position, _KeyOfValue()(__v));
+16535: 
+16535:       if (__res.second)
+16535:  return _M_insert_(__res.first, __res.second,
+16535:      std::forward<_Arg>(__v),
+16535:      __node_gen);
+16535:       return iterator(__res.first);
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
+16535:       _Compare, _Alloc>::_Base_ptr,
+16535:   typename _Rb_tree<_Key, _Val, _KeyOfValue,
+16535:       _Compare, _Alloc>::_Base_ptr>
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     _M_get_insert_hint_equal_pos(const_iterator __position, const key_type& __k)
+16535:     {
+16535:       iterator __pos = __position._M_const_cast();
+16535:       typedef pair<_Base_ptr, _Base_ptr> _Res;
+16535: 
+16535: 
+16535:       if (__pos._M_node == _M_end())
+16535:  {
+16535:    if (size() > 0
+16535:        && !_M_impl._M_key_compare(__k, _S_key(_M_rightmost())))
+16535:      return _Res(0, _M_rightmost());
+16535:    else
+16535:      return _M_get_insert_equal_pos(__k);
+16535:  }
+16535:       else if (!_M_impl._M_key_compare(_S_key(__pos._M_node), __k))
+16535:  {
+16535: 
+16535:    iterator __before = __pos;
+16535:    if (__pos._M_node == _M_leftmost())
+16535:      return _Res(_M_leftmost(), _M_leftmost());
+16535:    else if (!_M_impl._M_key_compare(__k, _S_key((--__before)._M_node)))
+16535:      {
+16535:        if (_S_right(__before._M_node) == 0)
+16535:   return _Res(0, __before._M_node);
+16535:        else
+16535:   return _Res(__pos._M_node, __pos._M_node);
+16535:      }
+16535:    else
+16535:      return _M_get_insert_equal_pos(__k);
+16535:  }
+16535:       else
+16535:  {
+16535: 
+16535:    iterator __after = __pos;
+16535:    if (__pos._M_node == _M_rightmost())
+16535:      return _Res(0, _M_rightmost());
+16535:    else if (!_M_impl._M_key_compare(_S_key((++__after)._M_node), __k))
+16535:      {
+16535:        if (_S_right(__pos._M_node) == 0)
+16535:   return _Res(0, __pos._M_node);
+16535:        else
+16535:   return _Res(__after._M_node, __after._M_node);
+16535:      }
+16535:    else
+16535:      return _Res(0, 0);
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535: 
+16535:     template<typename _Arg, typename _NodeGen>
+16535: 
+16535: 
+16535: 
+16535:       typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+16535:       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:       _M_insert_equal_(const_iterator __position,
+16535: 
+16535:          _Arg&& __v,
+16535: 
+16535: 
+16535: 
+16535:          _NodeGen& __node_gen)
+16535:       {
+16535:  pair<_Base_ptr, _Base_ptr> __res
+16535:    = _M_get_insert_hint_equal_pos(__position, _KeyOfValue()(__v));
+16535: 
+16535:  if (__res.second)
+16535:    return _M_insert_(__res.first, __res.second,
+16535:        std::forward<_Arg>(__v),
+16535:        __node_gen);
+16535: 
+16535:  return _M_insert_equal_lower(std::forward<_Arg>(__v));
+16535:       }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     _M_insert_node(_Base_ptr __x, _Base_ptr __p, _Link_type __z)
+16535:     {
+16535:       bool __insert_left = (__x != 0 || __p == _M_end()
+16535:        || _M_impl._M_key_compare(_S_key(__z),
+16535:             _S_key(__p)));
+16535: 
+16535:       _Rb_tree_insert_and_rebalance(__insert_left, __z, __p,
+16535:         this->_M_impl._M_header);
+16535:       ++_M_impl._M_node_count;
+16535:       return iterator(__z);
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     _M_insert_lower_node(_Base_ptr __p, _Link_type __z)
+16535:     {
+16535:       bool __insert_left = (__p == _M_end()
+16535:        || !_M_impl._M_key_compare(_S_key(__p),
+16535:              _S_key(__z)));
+16535: 
+16535:       _Rb_tree_insert_and_rebalance(__insert_left, __z, __p,
+16535:         this->_M_impl._M_header);
+16535:       ++_M_impl._M_node_count;
+16535:       return iterator(__z);
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     _M_insert_equal_lower_node(_Link_type __z)
+16535:     {
+16535:       _Link_type __x = _M_begin();
+16535:       _Base_ptr __y = _M_end();
+16535:       while (__x != 0)
+16535:  {
+16535:    __y = __x;
+16535:    __x = !_M_impl._M_key_compare(_S_key(__x), _S_key(__z)) ?
+16535:   _S_left(__x) : _S_right(__x);
+16535:  }
+16535:       return _M_insert_lower_node(__y, __z);
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     template<typename... _Args>
+16535:       pair<typename _Rb_tree<_Key, _Val, _KeyOfValue,
+16535:         _Compare, _Alloc>::iterator, bool>
+16535:       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:       _M_emplace_unique(_Args&&... __args)
+16535:       {
+16535:  _Link_type __z = _M_create_node(std::forward<_Args>(__args)...);
+16535: 
+16535:  try
+16535:    {
+16535:      typedef pair<iterator, bool> _Res;
+16535:      auto __res = _M_get_insert_unique_pos(_S_key(__z));
+16535:      if (__res.second)
+16535:        return _Res(_M_insert_node(__res.first, __res.second, __z), true);
+16535: 
+16535:      _M_drop_node(__z);
+16535:      return _Res(iterator(__res.first), false);
+16535:    }
+16535:  catch(...)
+16535:    {
+16535:      _M_drop_node(__z);
+16535:      throw;
+16535:    }
+16535:       }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     template<typename... _Args>
+16535:       typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+16535:       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:       _M_emplace_equal(_Args&&... __args)
+16535:       {
+16535:  _Link_type __z = _M_create_node(std::forward<_Args>(__args)...);
+16535: 
+16535:  try
+16535:    {
+16535:      auto __res = _M_get_insert_equal_pos(_S_key(__z));
+16535:      return _M_insert_node(__res.first, __res.second, __z);
+16535:    }
+16535:  catch(...)
+16535:    {
+16535:      _M_drop_node(__z);
+16535:      throw;
+16535:    }
+16535:       }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     template<typename... _Args>
+16535:       typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+16535:       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:       _M_emplace_hint_unique(const_iterator __pos, _Args&&... __args)
+16535:       {
+16535:  _Link_type __z = _M_create_node(std::forward<_Args>(__args)...);
+16535: 
+16535:  try
+16535:    {
+16535:      auto __res = _M_get_insert_hint_unique_pos(__pos, _S_key(__z));
+16535: 
+16535:      if (__res.second)
+16535:        return _M_insert_node(__res.first, __res.second, __z);
+16535: 
+16535:      _M_drop_node(__z);
+16535:      return iterator(__res.first);
+16535:    }
+16535:  catch(...)
+16535:    {
+16535:      _M_drop_node(__z);
+16535:      throw;
+16535:    }
+16535:       }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     template<typename... _Args>
+16535:       typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
+16535:       _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:       _M_emplace_hint_equal(const_iterator __pos, _Args&&... __args)
+16535:       {
+16535:  _Link_type __z = _M_create_node(std::forward<_Args>(__args)...);
+16535: 
+16535:  try
+16535:    {
+16535:      auto __res = _M_get_insert_hint_equal_pos(__pos, _S_key(__z));
+16535: 
+16535:      if (__res.second)
+16535:        return _M_insert_node(__res.first, __res.second, __z);
+16535: 
+16535:      return _M_insert_equal_lower_node(__z);
+16535:    }
+16535:  catch(...)
+16535:    {
+16535:      _M_drop_node(__z);
+16535:      throw;
+16535:    }
+16535:       }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KoV,
+16535:     typename _Cmp, typename _Alloc>
+16535:     template<class _II>
+16535:       void
+16535:       _Rb_tree<_Key, _Val, _KoV, _Cmp, _Alloc>::
+16535:       _M_insert_unique(_II __first, _II __last)
+16535:       {
+16535:  _Alloc_node __an(*this);
+16535:  for (; __first != __last; ++__first)
+16535:    _M_insert_unique_(end(), *__first, __an);
+16535:       }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KoV,
+16535:     typename _Cmp, typename _Alloc>
+16535:     template<class _II>
+16535:       void
+16535:       _Rb_tree<_Key, _Val, _KoV, _Cmp, _Alloc>::
+16535:       _M_insert_equal(_II __first, _II __last)
+16535:       {
+16535:  _Alloc_node __an(*this);
+16535:  for (; __first != __last; ++__first)
+16535:    _M_insert_equal_(end(), *__first, __an);
+16535:       }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     void
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     _M_erase_aux(const_iterator __position)
+16535:     {
+16535:       _Link_type __y =
+16535:  static_cast<_Link_type>(_Rb_tree_rebalance_for_erase
+16535:     (const_cast<_Base_ptr>(__position._M_node),
+16535:      this->_M_impl._M_header));
+16535:       _M_drop_node(__y);
+16535:       --_M_impl._M_node_count;
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     void
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     _M_erase_aux(const_iterator __first, const_iterator __last)
+16535:     {
+16535:       if (__first == begin() && __last == end())
+16535:  clear();
+16535:       else
+16535:  while (__first != __last)
+16535:    _M_erase_aux(__first++);
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     erase(const _Key& __x)
+16535:     {
+16535:       pair<iterator, iterator> __p = equal_range(__x);
+16535:       const size_type __old_size = size();
+16535:       _M_erase_aux(__p.first, __p.second);
+16535:       return __old_size - size();
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     void
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     erase(const _Key* __first, const _Key* __last)
+16535:     {
+16535:       while (__first != __last)
+16535:  erase(*__first++);
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     typename _Rb_tree<_Key, _Val, _KeyOfValue,
+16535:         _Compare, _Alloc>::iterator
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     find(const _Key& __k)
+16535:     {
+16535:       iterator __j = _M_lower_bound(_M_begin(), _M_end(), __k);
+16535:       return (__j == end()
+16535:        || _M_impl._M_key_compare(__k,
+16535:      _S_key(__j._M_node))) ? end() : __j;
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     typename _Rb_tree<_Key, _Val, _KeyOfValue,
+16535:         _Compare, _Alloc>::const_iterator
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     find(const _Key& __k) const
+16535:     {
+16535:       const_iterator __j = _M_lower_bound(_M_begin(), _M_end(), __k);
+16535:       return (__j == end()
+16535:        || _M_impl._M_key_compare(__k,
+16535:      _S_key(__j._M_node))) ? end() : __j;
+16535:     }
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type
+16535:     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
+16535:     count(const _Key& __k) const
+16535:     {
+16535:       pair<const_iterator, const_iterator> __p = equal_range(__k);
+16535:       const size_type __n = std::distance(__p.first, __p.second);
+16535:       return __n;
+16535:     }
+16535: 
+16535:   __attribute__ ((__pure__)) unsigned int
+16535:   _Rb_tree_black_count(const _Rb_tree_node_base* __node,
+16535:          const _Rb_tree_node_base* __root) throw ();
+16535: 
+16535:   template<typename _Key, typename _Val, typename _KeyOfValue,
+16535:     typename _Compare, typename _Alloc>
+16535:     bool
+16535:     _Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>::__rb_verify() const
+16535:     {
+16535:       if (_M_impl._M_node_count == 0 || begin() == end())
+16535:  return _M_impl._M_node_count == 0 && begin() == end()
+16535:         && this->_M_impl._M_header._M_left == _M_end()
+16535:         && this->_M_impl._M_header._M_right == _M_end();
+16535: 
+16535:       unsigned int __len = _Rb_tree_black_count(_M_leftmost(), _M_root());
+16535:       for (const_iterator __it = begin(); __it != end(); ++__it)
+16535:  {
+16535:    _Const_Link_type __x = static_cast<_Const_Link_type>(__it._M_node);
+16535:    _Const_Link_type __L = _S_left(__x);
+16535:    _Const_Link_type __R = _S_right(__x);
+16535: 
+16535:    if (__x->_M_color == _S_red)
+16535:      if ((__L && __L->_M_color == _S_red)
+16535:   || (__R && __R->_M_color == _S_red))
+16535:        return false;
+16535: 
+16535:    if (__L && _M_impl._M_key_compare(_S_key(__x), _S_key(__L)))
+16535:      return false;
+16535:    if (__R && _M_impl._M_key_compare(_S_key(__R), _S_key(__x)))
+16535:      return false;
+16535: 
+16535:    if (!__L && !__R && _Rb_tree_black_count(__x, _M_root()) != __len)
+16535:      return false;
+16535:  }
+16535: 
+16535:       if (_M_leftmost() != _Rb_tree_node_base::_S_minimum(_M_root()))
+16535:  return false;
+16535:       if (_M_rightmost() != _Rb_tree_node_base::_S_maximum(_M_root()))
+16535:  return false;
+16535:       return true;
+16535:     }
+16535: # 2627 "/usr/include/c++/8/bits/stl_tree.h" 3
+16535: 
+16535: }
+16535: # 61 "/usr/include/c++/8/set" 2 3
+16535: # 1 "/usr/include/c++/8/bits/stl_set.h" 1 3
+16535: # 64 "/usr/include/c++/8/bits/stl_set.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Compare, typename _Alloc>
+16535:     class multiset;
+16535: # 92 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:   template<typename _Key, typename _Compare = std::less<_Key>,
+16535:     typename _Alloc = std::allocator<_Key> >
+16535:     class set
+16535:     {
+16535: # 108 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       static_assert(is_same<typename remove_cv<_Key>::type, _Key>::value,
+16535:    "std::set must have a non-const, non-volatile value_type");
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535:       typedef _Key key_type;
+16535:       typedef _Key value_type;
+16535:       typedef _Compare key_compare;
+16535:       typedef _Compare value_compare;
+16535:       typedef _Alloc allocator_type;
+16535: 
+16535: 
+16535:     private:
+16535:       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
+16535:  rebind<_Key>::other _Key_alloc_type;
+16535: 
+16535:       typedef _Rb_tree<key_type, value_type, _Identity<value_type>,
+16535:          key_compare, _Key_alloc_type> _Rep_type;
+16535:       _Rep_type _M_t;
+16535: 
+16535:       typedef __gnu_cxx::__alloc_traits<_Key_alloc_type> _Alloc_traits;
+16535: 
+16535:     public:
+16535: 
+16535: 
+16535:       typedef typename _Alloc_traits::pointer pointer;
+16535:       typedef typename _Alloc_traits::const_pointer const_pointer;
+16535:       typedef typename _Alloc_traits::reference reference;
+16535:       typedef typename _Alloc_traits::const_reference const_reference;
+16535: 
+16535: 
+16535: 
+16535:       typedef typename _Rep_type::const_iterator iterator;
+16535:       typedef typename _Rep_type::const_iterator const_iterator;
+16535:       typedef typename _Rep_type::const_reverse_iterator reverse_iterator;
+16535:       typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
+16535:       typedef typename _Rep_type::size_type size_type;
+16535:       typedef typename _Rep_type::difference_type difference_type;
+16535: # 167 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       set() = default;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       explicit
+16535:       set(const _Compare& __comp,
+16535:    const allocator_type& __a = allocator_type())
+16535:       : _M_t(__comp, _Key_alloc_type(__a)) { }
+16535: # 190 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       template<typename _InputIterator>
+16535:  set(_InputIterator __first, _InputIterator __last)
+16535:  : _M_t()
+16535:  { _M_t._M_insert_unique(__first, __last); }
+16535: # 207 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       template<typename _InputIterator>
+16535:  set(_InputIterator __first, _InputIterator __last,
+16535:      const _Compare& __comp,
+16535:      const allocator_type& __a = allocator_type())
+16535:  : _M_t(__comp, _Key_alloc_type(__a))
+16535:  { _M_t._M_insert_unique(__first, __last); }
+16535: # 223 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       set(const set&) = default;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       set(set&&) = default;
+16535: # 243 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       set(initializer_list<value_type> __l,
+16535:    const _Compare& __comp = _Compare(),
+16535:    const allocator_type& __a = allocator_type())
+16535:       : _M_t(__comp, _Key_alloc_type(__a))
+16535:       { _M_t._M_insert_unique(__l.begin(), __l.end()); }
+16535: 
+16535: 
+16535:       explicit
+16535:       set(const allocator_type& __a)
+16535:       : _M_t(_Compare(), _Key_alloc_type(__a)) { }
+16535: 
+16535: 
+16535:       set(const set& __x, const allocator_type& __a)
+16535:       : _M_t(__x._M_t, _Key_alloc_type(__a)) { }
+16535: 
+16535: 
+16535:       set(set&& __x, const allocator_type& __a)
+16535:       noexcept(is_nothrow_copy_constructible<_Compare>::value
+16535:         && _Alloc_traits::_S_always_equal())
+16535:       : _M_t(std::move(__x._M_t), _Key_alloc_type(__a)) { }
+16535: 
+16535: 
+16535:       set(initializer_list<value_type> __l, const allocator_type& __a)
+16535:       : _M_t(_Compare(), _Key_alloc_type(__a))
+16535:       { _M_t._M_insert_unique(__l.begin(), __l.end()); }
+16535: 
+16535: 
+16535:       template<typename _InputIterator>
+16535:  set(_InputIterator __first, _InputIterator __last,
+16535:      const allocator_type& __a)
+16535:  : _M_t(_Compare(), _Key_alloc_type(__a))
+16535:  { _M_t._M_insert_unique(__first, __last); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       ~set() = default;
+16535: # 297 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       set&
+16535:       operator=(const set&) = default;
+16535: 
+16535: 
+16535:       set&
+16535:       operator=(set&&) = default;
+16535: # 315 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       set&
+16535:       operator=(initializer_list<value_type> __l)
+16535:       {
+16535:  _M_t._M_assign_unique(__l.begin(), __l.end());
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       key_compare
+16535:       key_comp() const
+16535:       { return _M_t.key_comp(); }
+16535: 
+16535:       value_compare
+16535:       value_comp() const
+16535:       { return _M_t.key_comp(); }
+16535: 
+16535:       allocator_type
+16535:       get_allocator() const noexcept
+16535:       { return allocator_type(_M_t.get_allocator()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       begin() const noexcept
+16535:       { return _M_t.begin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       end() const noexcept
+16535:       { return _M_t.end(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       rbegin() const noexcept
+16535:       { return _M_t.rbegin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       rend() const noexcept
+16535:       { return _M_t.rend(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       cbegin() const noexcept
+16535:       { return _M_t.begin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       cend() const noexcept
+16535:       { return _M_t.end(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       crbegin() const noexcept
+16535:       { return _M_t.rbegin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       crend() const noexcept
+16535:       { return _M_t.rend(); }
+16535: 
+16535: 
+16535: 
+16535:       bool
+16535:       empty() const noexcept
+16535:       { return _M_t.empty(); }
+16535: 
+16535: 
+16535:       size_type
+16535:       size() const noexcept
+16535:       { return _M_t.size(); }
+16535: 
+16535: 
+16535:       size_type
+16535:       max_size() const noexcept
+16535:       { return _M_t.max_size(); }
+16535: # 440 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       void
+16535:       swap(set& __x)
+16535:       noexcept(__is_nothrow_swappable<_Compare>::value)
+16535:       { _M_t.swap(__x._M_t); }
+16535: # 460 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       template<typename... _Args>
+16535:  std::pair<iterator, bool>
+16535:  emplace(_Args&&... __args)
+16535:  { return _M_t._M_emplace_unique(std::forward<_Args>(__args)...); }
+16535: # 486 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       template<typename... _Args>
+16535:  iterator
+16535:  emplace_hint(const_iterator __pos, _Args&&... __args)
+16535:  {
+16535:    return _M_t._M_emplace_hint_unique(__pos,
+16535:           std::forward<_Args>(__args)...);
+16535:  }
+16535: # 508 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       std::pair<iterator, bool>
+16535:       insert(const value_type& __x)
+16535:       {
+16535:  std::pair<typename _Rep_type::iterator, bool> __p =
+16535:    _M_t._M_insert_unique(__x);
+16535:  return std::pair<iterator, bool>(__p.first, __p.second);
+16535:       }
+16535: 
+16535: 
+16535:       std::pair<iterator, bool>
+16535:       insert(value_type&& __x)
+16535:       {
+16535:  std::pair<typename _Rep_type::iterator, bool> __p =
+16535:    _M_t._M_insert_unique(std::move(__x));
+16535:  return std::pair<iterator, bool>(__p.first, __p.second);
+16535:       }
+16535: # 545 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       iterator
+16535:       insert(const_iterator __position, const value_type& __x)
+16535:       { return _M_t._M_insert_unique_(__position, __x); }
+16535: 
+16535: 
+16535:       iterator
+16535:       insert(const_iterator __position, value_type&& __x)
+16535:       { return _M_t._M_insert_unique_(__position, std::move(__x)); }
+16535: # 564 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  insert(_InputIterator __first, _InputIterator __last)
+16535:  { _M_t._M_insert_unique(__first, __last); }
+16535: # 577 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       void
+16535:       insert(initializer_list<value_type> __l)
+16535:       { this->insert(__l.begin(), __l.end()); }
+16535: # 652 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       __attribute ((__abi_tag__ ("cxx11")))
+16535:       iterator
+16535:       erase(const_iterator __position)
+16535:       { return _M_t.erase(__position); }
+16535: # 683 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       size_type
+16535:       erase(const key_type& __x)
+16535:       { return _M_t.erase(__x); }
+16535: # 704 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       __attribute ((__abi_tag__ ("cxx11")))
+16535:       iterator
+16535:       erase(const_iterator __first, const_iterator __last)
+16535:       { return _M_t.erase(__first, __last); }
+16535: # 732 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       void
+16535:       clear() noexcept
+16535:       { _M_t.clear(); }
+16535: # 747 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       size_type
+16535:       count(const key_type& __x) const
+16535:       { return _M_t.find(__x) == _M_t.end() ? 0 : 1; }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  count(const _Kt& __x) const
+16535:  -> decltype(_M_t._M_count_tr(__x))
+16535:  { return _M_t._M_count_tr(__x); }
+16535: # 774 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       iterator
+16535:       find(const key_type& __x)
+16535:       { return _M_t.find(__x); }
+16535: 
+16535:       const_iterator
+16535:       find(const key_type& __x) const
+16535:       { return _M_t.find(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  find(const _Kt& __x)
+16535:  -> decltype(iterator{_M_t._M_find_tr(__x)})
+16535:  { return iterator{_M_t._M_find_tr(__x)}; }
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  find(const _Kt& __x) const
+16535:  -> decltype(const_iterator{_M_t._M_find_tr(__x)})
+16535:  { return const_iterator{_M_t._M_find_tr(__x)}; }
+16535: # 809 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       iterator
+16535:       lower_bound(const key_type& __x)
+16535:       { return _M_t.lower_bound(__x); }
+16535: 
+16535:       const_iterator
+16535:       lower_bound(const key_type& __x) const
+16535:       { return _M_t.lower_bound(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  lower_bound(const _Kt& __x)
+16535:  -> decltype(iterator(_M_t._M_lower_bound_tr(__x)))
+16535:  { return iterator(_M_t._M_lower_bound_tr(__x)); }
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  lower_bound(const _Kt& __x) const
+16535:  -> decltype(const_iterator(_M_t._M_lower_bound_tr(__x)))
+16535:  { return const_iterator(_M_t._M_lower_bound_tr(__x)); }
+16535: # 839 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       iterator
+16535:       upper_bound(const key_type& __x)
+16535:       { return _M_t.upper_bound(__x); }
+16535: 
+16535:       const_iterator
+16535:       upper_bound(const key_type& __x) const
+16535:       { return _M_t.upper_bound(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  upper_bound(const _Kt& __x)
+16535:  -> decltype(iterator(_M_t._M_upper_bound_tr(__x)))
+16535:  { return iterator(_M_t._M_upper_bound_tr(__x)); }
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  upper_bound(const _Kt& __x) const
+16535:  -> decltype(iterator(_M_t._M_upper_bound_tr(__x)))
+16535:  { return const_iterator(_M_t._M_upper_bound_tr(__x)); }
+16535: # 878 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:       std::pair<iterator, iterator>
+16535:       equal_range(const key_type& __x)
+16535:       { return _M_t.equal_range(__x); }
+16535: 
+16535:       std::pair<const_iterator, const_iterator>
+16535:       equal_range(const key_type& __x) const
+16535:       { return _M_t.equal_range(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  equal_range(const _Kt& __x)
+16535:  -> decltype(pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)))
+16535:  { return pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)); }
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  equal_range(const _Kt& __x) const
+16535:  -> decltype(pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)))
+16535:  { return pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)); }
+16535: 
+16535: 
+16535: 
+16535:       template<typename _K1, typename _C1, typename _A1>
+16535:  friend bool
+16535:  operator==(const set<_K1, _C1, _A1>&, const set<_K1, _C1, _A1>&);
+16535: 
+16535:       template<typename _K1, typename _C1, typename _A1>
+16535:  friend bool
+16535:  operator<(const set<_K1, _C1, _A1>&, const set<_K1, _C1, _A1>&);
+16535:     };
+16535: # 956 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:   template<typename _Key, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator==(const set<_Key, _Compare, _Alloc>& __x,
+16535:         const set<_Key, _Compare, _Alloc>& __y)
+16535:     { return __x._M_t == __y._M_t; }
+16535: # 973 "/usr/include/c++/8/bits/stl_set.h" 3
+16535:   template<typename _Key, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator<(const set<_Key, _Compare, _Alloc>& __x,
+16535:        const set<_Key, _Compare, _Alloc>& __y)
+16535:     { return __x._M_t < __y._M_t; }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator!=(const set<_Key, _Compare, _Alloc>& __x,
+16535:         const set<_Key, _Compare, _Alloc>& __y)
+16535:     { return !(__x == __y); }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator>(const set<_Key, _Compare, _Alloc>& __x,
+16535:        const set<_Key, _Compare, _Alloc>& __y)
+16535:     { return __y < __x; }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator<=(const set<_Key, _Compare, _Alloc>& __x,
+16535:         const set<_Key, _Compare, _Alloc>& __y)
+16535:     { return !(__y < __x); }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator>=(const set<_Key, _Compare, _Alloc>& __x,
+16535:         const set<_Key, _Compare, _Alloc>& __y)
+16535:     { return !(__x < __y); }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Compare, typename _Alloc>
+16535:     inline void
+16535:     swap(set<_Key, _Compare, _Alloc>& __x, set<_Key, _Compare, _Alloc>& __y)
+16535:     noexcept(noexcept(__x.swap(__y)))
+16535:     { __x.swap(__y); }
+16535: 
+16535: 
+16535: # 1035 "/usr/include/c++/8/bits/stl_set.h" 3
+16535: 
+16535: }
+16535: # 62 "/usr/include/c++/8/set" 2 3
+16535: # 1 "/usr/include/c++/8/bits/stl_multiset.h" 1 3
+16535: # 64 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Compare, typename _Alloc>
+16535:     class set;
+16535: # 94 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:   template <typename _Key, typename _Compare = std::less<_Key>,
+16535:      typename _Alloc = std::allocator<_Key> >
+16535:     class multiset
+16535:     {
+16535: # 110 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       static_assert(is_same<typename remove_cv<_Key>::type, _Key>::value,
+16535:    "std::multiset must have a non-const, non-volatile value_type");
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     public:
+16535: 
+16535:       typedef _Key key_type;
+16535:       typedef _Key value_type;
+16535:       typedef _Compare key_compare;
+16535:       typedef _Compare value_compare;
+16535:       typedef _Alloc allocator_type;
+16535: 
+16535:     private:
+16535: 
+16535:       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
+16535:  rebind<_Key>::other _Key_alloc_type;
+16535: 
+16535:       typedef _Rb_tree<key_type, value_type, _Identity<value_type>,
+16535:          key_compare, _Key_alloc_type> _Rep_type;
+16535: 
+16535:       _Rep_type _M_t;
+16535: 
+16535:       typedef __gnu_cxx::__alloc_traits<_Key_alloc_type> _Alloc_traits;
+16535: 
+16535:     public:
+16535:       typedef typename _Alloc_traits::pointer pointer;
+16535:       typedef typename _Alloc_traits::const_pointer const_pointer;
+16535:       typedef typename _Alloc_traits::reference reference;
+16535:       typedef typename _Alloc_traits::const_reference const_reference;
+16535: 
+16535: 
+16535: 
+16535:       typedef typename _Rep_type::const_iterator iterator;
+16535:       typedef typename _Rep_type::const_iterator const_iterator;
+16535:       typedef typename _Rep_type::const_reverse_iterator reverse_iterator;
+16535:       typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
+16535:       typedef typename _Rep_type::size_type size_type;
+16535:       typedef typename _Rep_type::difference_type difference_type;
+16535: # 164 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       multiset() = default;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       explicit
+16535:       multiset(const _Compare& __comp,
+16535:         const allocator_type& __a = allocator_type())
+16535:       : _M_t(__comp, _Key_alloc_type(__a)) { }
+16535: # 186 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       template<typename _InputIterator>
+16535:  multiset(_InputIterator __first, _InputIterator __last)
+16535:  : _M_t()
+16535:  { _M_t._M_insert_equal(__first, __last); }
+16535: # 202 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       template<typename _InputIterator>
+16535:  multiset(_InputIterator __first, _InputIterator __last,
+16535:    const _Compare& __comp,
+16535:    const allocator_type& __a = allocator_type())
+16535:  : _M_t(__comp, _Key_alloc_type(__a))
+16535:  { _M_t._M_insert_equal(__first, __last); }
+16535: # 218 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       multiset(const multiset&) = default;
+16535: # 227 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       multiset(multiset&&) = default;
+16535: # 239 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       multiset(initializer_list<value_type> __l,
+16535:         const _Compare& __comp = _Compare(),
+16535:         const allocator_type& __a = allocator_type())
+16535:       : _M_t(__comp, _Key_alloc_type(__a))
+16535:       { _M_t._M_insert_equal(__l.begin(), __l.end()); }
+16535: 
+16535: 
+16535:       explicit
+16535:       multiset(const allocator_type& __a)
+16535:       : _M_t(_Compare(), _Key_alloc_type(__a)) { }
+16535: 
+16535: 
+16535:       multiset(const multiset& __m, const allocator_type& __a)
+16535:       : _M_t(__m._M_t, _Key_alloc_type(__a)) { }
+16535: 
+16535: 
+16535:       multiset(multiset&& __m, const allocator_type& __a)
+16535:       noexcept(is_nothrow_copy_constructible<_Compare>::value
+16535:         && _Alloc_traits::_S_always_equal())
+16535:       : _M_t(std::move(__m._M_t), _Key_alloc_type(__a)) { }
+16535: 
+16535: 
+16535:       multiset(initializer_list<value_type> __l, const allocator_type& __a)
+16535:       : _M_t(_Compare(), _Key_alloc_type(__a))
+16535:       { _M_t._M_insert_equal(__l.begin(), __l.end()); }
+16535: 
+16535: 
+16535:       template<typename _InputIterator>
+16535:  multiset(_InputIterator __first, _InputIterator __last,
+16535:    const allocator_type& __a)
+16535:  : _M_t(_Compare(), _Key_alloc_type(__a))
+16535:  { _M_t._M_insert_equal(__first, __last); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       ~multiset() = default;
+16535: # 293 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       multiset&
+16535:       operator=(const multiset&) = default;
+16535: 
+16535: 
+16535:       multiset&
+16535:       operator=(multiset&&) = default;
+16535: # 311 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       multiset&
+16535:       operator=(initializer_list<value_type> __l)
+16535:       {
+16535:  _M_t._M_assign_equal(__l.begin(), __l.end());
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       key_compare
+16535:       key_comp() const
+16535:       { return _M_t.key_comp(); }
+16535: 
+16535:       value_compare
+16535:       value_comp() const
+16535:       { return _M_t.key_comp(); }
+16535: 
+16535:       allocator_type
+16535:       get_allocator() const noexcept
+16535:       { return allocator_type(_M_t.get_allocator()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       begin() const noexcept
+16535:       { return _M_t.begin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       end() const noexcept
+16535:       { return _M_t.end(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       rbegin() const noexcept
+16535:       { return _M_t.rbegin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       rend() const noexcept
+16535:       { return _M_t.rend(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       cbegin() const noexcept
+16535:       { return _M_t.begin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       cend() const noexcept
+16535:       { return _M_t.end(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       crbegin() const noexcept
+16535:       { return _M_t.rbegin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       crend() const noexcept
+16535:       { return _M_t.rend(); }
+16535: 
+16535: 
+16535: 
+16535:       bool
+16535:       empty() const noexcept
+16535:       { return _M_t.empty(); }
+16535: 
+16535: 
+16535:       size_type
+16535:       size() const noexcept
+16535:       { return _M_t.size(); }
+16535: 
+16535: 
+16535:       size_type
+16535:       max_size() const noexcept
+16535:       { return _M_t.max_size(); }
+16535: # 436 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       void
+16535:       swap(multiset& __x)
+16535:       noexcept(__is_nothrow_swappable<_Compare>::value)
+16535:       { _M_t.swap(__x._M_t); }
+16535: # 455 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       template<typename... _Args>
+16535:  iterator
+16535:  emplace(_Args&&... __args)
+16535:  { return _M_t._M_emplace_equal(std::forward<_Args>(__args)...); }
+16535: # 481 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       template<typename... _Args>
+16535:  iterator
+16535:  emplace_hint(const_iterator __pos, _Args&&... __args)
+16535:  {
+16535:    return _M_t._M_emplace_hint_equal(__pos,
+16535:          std::forward<_Args>(__args)...);
+16535:  }
+16535: # 501 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       iterator
+16535:       insert(const value_type& __x)
+16535:       { return _M_t._M_insert_equal(__x); }
+16535: 
+16535: 
+16535:       iterator
+16535:       insert(value_type&& __x)
+16535:       { return _M_t._M_insert_equal(std::move(__x)); }
+16535: # 531 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       iterator
+16535:       insert(const_iterator __position, const value_type& __x)
+16535:       { return _M_t._M_insert_equal_(__position, __x); }
+16535: 
+16535: 
+16535:       iterator
+16535:       insert(const_iterator __position, value_type&& __x)
+16535:       { return _M_t._M_insert_equal_(__position, std::move(__x)); }
+16535: # 549 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  insert(_InputIterator __first, _InputIterator __last)
+16535:  { _M_t._M_insert_equal(__first, __last); }
+16535: # 562 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       void
+16535:       insert(initializer_list<value_type> __l)
+16535:       { this->insert(__l.begin(), __l.end()); }
+16535: # 637 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       __attribute ((__abi_tag__ ("cxx11")))
+16535:       iterator
+16535:       erase(const_iterator __position)
+16535:       { return _M_t.erase(__position); }
+16535: # 668 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       size_type
+16535:       erase(const key_type& __x)
+16535:       { return _M_t.erase(__x); }
+16535: # 689 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       __attribute ((__abi_tag__ ("cxx11")))
+16535:       iterator
+16535:       erase(const_iterator __first, const_iterator __last)
+16535:       { return _M_t.erase(__first, __last); }
+16535: # 717 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       void
+16535:       clear() noexcept
+16535:       { _M_t.clear(); }
+16535: # 729 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       size_type
+16535:       count(const key_type& __x) const
+16535:       { return _M_t.count(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  count(const _Kt& __x) const -> decltype(_M_t._M_count_tr(__x))
+16535:  { return _M_t._M_count_tr(__x); }
+16535: # 755 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       iterator
+16535:       find(const key_type& __x)
+16535:       { return _M_t.find(__x); }
+16535: 
+16535:       const_iterator
+16535:       find(const key_type& __x) const
+16535:       { return _M_t.find(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  find(const _Kt& __x)
+16535:  -> decltype(iterator{_M_t._M_find_tr(__x)})
+16535:  { return iterator{_M_t._M_find_tr(__x)}; }
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  find(const _Kt& __x) const
+16535:  -> decltype(const_iterator{_M_t._M_find_tr(__x)})
+16535:  { return const_iterator{_M_t._M_find_tr(__x)}; }
+16535: # 790 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       iterator
+16535:       lower_bound(const key_type& __x)
+16535:       { return _M_t.lower_bound(__x); }
+16535: 
+16535:       const_iterator
+16535:       lower_bound(const key_type& __x) const
+16535:       { return _M_t.lower_bound(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  lower_bound(const _Kt& __x)
+16535:  -> decltype(iterator(_M_t._M_lower_bound_tr(__x)))
+16535:  { return iterator(_M_t._M_lower_bound_tr(__x)); }
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  lower_bound(const _Kt& __x) const
+16535:  -> decltype(iterator(_M_t._M_lower_bound_tr(__x)))
+16535:  { return iterator(_M_t._M_lower_bound_tr(__x)); }
+16535: # 820 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       iterator
+16535:       upper_bound(const key_type& __x)
+16535:       { return _M_t.upper_bound(__x); }
+16535: 
+16535:       const_iterator
+16535:       upper_bound(const key_type& __x) const
+16535:       { return _M_t.upper_bound(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  upper_bound(const _Kt& __x)
+16535:  -> decltype(iterator(_M_t._M_upper_bound_tr(__x)))
+16535:  { return iterator(_M_t._M_upper_bound_tr(__x)); }
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  upper_bound(const _Kt& __x) const
+16535:  -> decltype(iterator(_M_t._M_upper_bound_tr(__x)))
+16535:  { return iterator(_M_t._M_upper_bound_tr(__x)); }
+16535: # 859 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:       std::pair<iterator, iterator>
+16535:       equal_range(const key_type& __x)
+16535:       { return _M_t.equal_range(__x); }
+16535: 
+16535:       std::pair<const_iterator, const_iterator>
+16535:       equal_range(const key_type& __x) const
+16535:       { return _M_t.equal_range(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  equal_range(const _Kt& __x)
+16535:  -> decltype(pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)))
+16535:  { return pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)); }
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  equal_range(const _Kt& __x) const
+16535:  -> decltype(pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)))
+16535:  { return pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)); }
+16535: 
+16535: 
+16535: 
+16535:       template<typename _K1, typename _C1, typename _A1>
+16535:  friend bool
+16535:  operator==(const multiset<_K1, _C1, _A1>&,
+16535:      const multiset<_K1, _C1, _A1>&);
+16535: 
+16535:       template<typename _K1, typename _C1, typename _A1>
+16535:  friend bool
+16535:  operator< (const multiset<_K1, _C1, _A1>&,
+16535:      const multiset<_K1, _C1, _A1>&);
+16535:     };
+16535: # 941 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:   template<typename _Key, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator==(const multiset<_Key, _Compare, _Alloc>& __x,
+16535:         const multiset<_Key, _Compare, _Alloc>& __y)
+16535:     { return __x._M_t == __y._M_t; }
+16535: # 958 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535:   template<typename _Key, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator<(const multiset<_Key, _Compare, _Alloc>& __x,
+16535:        const multiset<_Key, _Compare, _Alloc>& __y)
+16535:     { return __x._M_t < __y._M_t; }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator!=(const multiset<_Key, _Compare, _Alloc>& __x,
+16535:         const multiset<_Key, _Compare, _Alloc>& __y)
+16535:     { return !(__x == __y); }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator>(const multiset<_Key,_Compare,_Alloc>& __x,
+16535:        const multiset<_Key,_Compare,_Alloc>& __y)
+16535:     { return __y < __x; }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator<=(const multiset<_Key, _Compare, _Alloc>& __x,
+16535:         const multiset<_Key, _Compare, _Alloc>& __y)
+16535:     { return !(__y < __x); }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator>=(const multiset<_Key, _Compare, _Alloc>& __x,
+16535:         const multiset<_Key, _Compare, _Alloc>& __y)
+16535:     { return !(__x < __y); }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Compare, typename _Alloc>
+16535:     inline void
+16535:     swap(multiset<_Key, _Compare, _Alloc>& __x,
+16535:   multiset<_Key, _Compare, _Alloc>& __y)
+16535:     noexcept(noexcept(__x.swap(__y)))
+16535:     { __x.swap(__y); }
+16535: 
+16535: 
+16535: # 1023 "/usr/include/c++/8/bits/stl_multiset.h" 3
+16535: 
+16535: }
+16535: # 63 "/usr/include/c++/8/set" 2 3
+16535: # 34 "../../src/Float_defs.hh" 2
+16535: # 1 "/usr/include/c++/8/cmath" 1 3
+16535: # 39 "/usr/include/c++/8/cmath" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/cmath" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/math.h" 1 3 4
+16535: # 27 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/libc-header-start.h" 1 3 4
+16535: # 28 "/usr/include/math.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern "C" {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/math-vector.h" 1 3 4
+16535: # 25 "/usr/include/x86_64-linux-gnu/bits/math-vector.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h" 1 3 4
+16535: # 26 "/usr/include/x86_64-linux-gnu/bits/math-vector.h" 2 3 4
+16535: # 41 "/usr/include/math.h" 2 3 4
+16535: # 138 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/flt-eval-method.h" 1 3 4
+16535: # 139 "/usr/include/math.h" 2 3 4
+16535: # 149 "/usr/include/math.h" 3 4
+16535: typedef float float_t;
+16535: typedef double double_t;
+16535: # 190 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/fp-logb.h" 1 3 4
+16535: # 191 "/usr/include/math.h" 2 3 4
+16535: # 233 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/fp-fast.h" 1 3 4
+16535: # 234 "/usr/include/math.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: enum
+16535:   {
+16535:     FP_INT_UPWARD =
+16535: 
+16535:       0,
+16535:     FP_INT_DOWNWARD =
+16535: 
+16535:       1,
+16535:     FP_INT_TOWARDZERO =
+16535: 
+16535:       2,
+16535:     FP_INT_TONEARESTFROMZERO =
+16535: 
+16535:       3,
+16535:     FP_INT_TONEAREST =
+16535: 
+16535:       4,
+16535:   };
+16535: # 289 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h" 1 3 4
+16535: # 21 "/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h" 3 4
+16535: extern int __fpclassify (double __value) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int __signbit (double __value) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: extern int __isinf (double __value) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int __finite (double __value) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int __isnan (double __value) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int __iseqsig (double __x, double __y) throw ();
+16535: 
+16535: 
+16535: extern int __issignaling (double __value) throw ()
+16535:      __attribute__ ((__const__));
+16535: # 290 "/usr/include/math.h" 2 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 1 3 4
+16535: # 53 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern double acos (double __x) throw (); extern double __acos (double __x) throw ();
+16535: 
+16535: extern double asin (double __x) throw (); extern double __asin (double __x) throw ();
+16535: 
+16535: extern double atan (double __x) throw (); extern double __atan (double __x) throw ();
+16535: 
+16535: extern double atan2 (double __y, double __x) throw (); extern double __atan2 (double __y, double __x) throw ();
+16535: 
+16535: 
+16535:  extern double cos (double __x) throw (); extern double __cos (double __x) throw ();
+16535: 
+16535:  extern double sin (double __x) throw (); extern double __sin (double __x) throw ();
+16535: 
+16535: extern double tan (double __x) throw (); extern double __tan (double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern double cosh (double __x) throw (); extern double __cosh (double __x) throw ();
+16535: 
+16535: extern double sinh (double __x) throw (); extern double __sinh (double __x) throw ();
+16535: 
+16535: extern double tanh (double __x) throw (); extern double __tanh (double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535:  extern void sincos (double __x, double *__sinx, double *__cosx) throw (); extern void __sincos (double __x, double *__sinx, double *__cosx) throw ()
+16535:                                                         ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern double acosh (double __x) throw (); extern double __acosh (double __x) throw ();
+16535: 
+16535: extern double asinh (double __x) throw (); extern double __asinh (double __x) throw ();
+16535: 
+16535: extern double atanh (double __x) throw (); extern double __atanh (double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  extern double exp (double __x) throw (); extern double __exp (double __x) throw ();
+16535: 
+16535: 
+16535: extern double frexp (double __x, int *__exponent) throw (); extern double __frexp (double __x, int *__exponent) throw ();
+16535: 
+16535: 
+16535: extern double ldexp (double __x, int __exponent) throw (); extern double __ldexp (double __x, int __exponent) throw ();
+16535: 
+16535: 
+16535:  extern double log (double __x) throw (); extern double __log (double __x) throw ();
+16535: 
+16535: 
+16535: extern double log10 (double __x) throw (); extern double __log10 (double __x) throw ();
+16535: 
+16535: 
+16535: extern double modf (double __x, double *__iptr) throw (); extern double __modf (double __x, double *__iptr) throw () __attribute__ ((__nonnull__ (2)));
+16535: 
+16535: 
+16535: 
+16535: extern double exp10 (double __x) throw (); extern double __exp10 (double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern double expm1 (double __x) throw (); extern double __expm1 (double __x) throw ();
+16535: 
+16535: 
+16535: extern double log1p (double __x) throw (); extern double __log1p (double __x) throw ();
+16535: 
+16535: 
+16535: extern double logb (double __x) throw (); extern double __logb (double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern double exp2 (double __x) throw (); extern double __exp2 (double __x) throw ();
+16535: 
+16535: 
+16535: extern double log2 (double __x) throw (); extern double __log2 (double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  extern double pow (double __x, double __y) throw (); extern double __pow (double __x, double __y) throw ();
+16535: 
+16535: 
+16535: extern double sqrt (double __x) throw (); extern double __sqrt (double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern double hypot (double __x, double __y) throw (); extern double __hypot (double __x, double __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern double cbrt (double __x) throw (); extern double __cbrt (double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern double ceil (double __x) throw () __attribute__ ((__const__)); extern double __ceil (double __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern double fabs (double __x) throw () __attribute__ ((__const__)); extern double __fabs (double __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern double floor (double __x) throw () __attribute__ ((__const__)); extern double __floor (double __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern double fmod (double __x, double __y) throw (); extern double __fmod (double __x, double __y) throw ();
+16535: # 182 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern int finite (double __value) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern double drem (double __x, double __y) throw (); extern double __drem (double __x, double __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern double significand (double __x) throw (); extern double __significand (double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern double copysign (double __x, double __y) throw () __attribute__ ((__const__)); extern double __copysign (double __x, double __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern double nan (const char *__tagb) throw (); extern double __nan (const char *__tagb) throw ();
+16535: # 217 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern double j0 (double) throw (); extern double __j0 (double) throw ();
+16535: extern double j1 (double) throw (); extern double __j1 (double) throw ();
+16535: extern double jn (int, double) throw (); extern double __jn (int, double) throw ();
+16535: extern double y0 (double) throw (); extern double __y0 (double) throw ();
+16535: extern double y1 (double) throw (); extern double __y1 (double) throw ();
+16535: extern double yn (int, double) throw (); extern double __yn (int, double) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern double erf (double) throw (); extern double __erf (double) throw ();
+16535: extern double erfc (double) throw (); extern double __erfc (double) throw ();
+16535: extern double lgamma (double) throw (); extern double __lgamma (double) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern double tgamma (double) throw (); extern double __tgamma (double) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern double gamma (double) throw (); extern double __gamma (double) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern double lgamma_r (double, int *__signgamp) throw (); extern double __lgamma_r (double, int *__signgamp) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern double rint (double __x) throw (); extern double __rint (double __x) throw ();
+16535: 
+16535: 
+16535: extern double nextafter (double __x, double __y) throw (); extern double __nextafter (double __x, double __y) throw ();
+16535: 
+16535: extern double nexttoward (double __x, long double __y) throw (); extern double __nexttoward (double __x, long double __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern double nextdown (double __x) throw (); extern double __nextdown (double __x) throw ();
+16535: 
+16535: extern double nextup (double __x) throw (); extern double __nextup (double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern double remainder (double __x, double __y) throw (); extern double __remainder (double __x, double __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern double scalbn (double __x, int __n) throw (); extern double __scalbn (double __x, int __n) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int ilogb (double __x) throw (); extern int __ilogb (double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long int llogb (double __x) throw (); extern long int __llogb (double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern double scalbln (double __x, long int __n) throw (); extern double __scalbln (double __x, long int __n) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern double nearbyint (double __x) throw (); extern double __nearbyint (double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern double round (double __x) throw () __attribute__ ((__const__)); extern double __round (double __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: extern double trunc (double __x) throw () __attribute__ ((__const__)); extern double __trunc (double __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern double remquo (double __x, double __y, int *__quo) throw (); extern double __remquo (double __x, double __y, int *__quo) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long int lrint (double __x) throw (); extern long int __lrint (double __x) throw ();
+16535: __extension__
+16535: extern long long int llrint (double __x) throw (); extern long long int __llrint (double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern long int lround (double __x) throw (); extern long int __lround (double __x) throw ();
+16535: __extension__
+16535: extern long long int llround (double __x) throw (); extern long long int __llround (double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern double fdim (double __x, double __y) throw (); extern double __fdim (double __x, double __y) throw ();
+16535: 
+16535: 
+16535: extern double fmax (double __x, double __y) throw () __attribute__ ((__const__)); extern double __fmax (double __x, double __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern double fmin (double __x, double __y) throw () __attribute__ ((__const__)); extern double __fmin (double __x, double __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern double fma (double __x, double __y, double __z) throw (); extern double __fma (double __x, double __y, double __z) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern double roundeven (double __x) throw () __attribute__ ((__const__)); extern double __roundeven (double __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: extern __intmax_t fromfp (double __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfp (double __x, int __round, unsigned int __width) throw ()
+16535:                             ;
+16535: 
+16535: 
+16535: 
+16535: extern __uintmax_t ufromfp (double __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfp (double __x, int __round, unsigned int __width) throw ()
+16535:                               ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __intmax_t fromfpx (double __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpx (double __x, int __round, unsigned int __width) throw ()
+16535:                              ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __uintmax_t ufromfpx (double __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpx (double __x, int __round, unsigned int __width) throw ()
+16535:                                ;
+16535: 
+16535: 
+16535: extern double fmaxmag (double __x, double __y) throw () __attribute__ ((__const__)); extern double __fmaxmag (double __x, double __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern double fminmag (double __x, double __y) throw () __attribute__ ((__const__)); extern double __fminmag (double __x, double __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int totalorder (double __x, double __y) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int totalordermag (double __x, double __y) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int canonicalize (double *__cx, const double *__x) throw ();
+16535: 
+16535: 
+16535: extern double getpayload (const double *__x) throw (); extern double __getpayload (const double *__x) throw ();
+16535: 
+16535: 
+16535: extern int setpayload (double *__x, double __payload) throw ();
+16535: 
+16535: 
+16535: extern int setpayloadsig (double *__x, double __payload) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern double scalb (double __x, double __n) throw (); extern double __scalb (double __x, double __n) throw ();
+16535: # 291 "/usr/include/math.h" 2 3 4
+16535: # 306 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h" 1 3 4
+16535: # 21 "/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h" 3 4
+16535: extern int __fpclassifyf (float __value) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int __signbitf (float __value) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: extern int __isinff (float __value) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int __finitef (float __value) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int __isnanf (float __value) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int __iseqsigf (float __x, float __y) throw ();
+16535: 
+16535: 
+16535: extern int __issignalingf (float __value) throw ()
+16535:      __attribute__ ((__const__));
+16535: # 307 "/usr/include/math.h" 2 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 1 3 4
+16535: # 53 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern float acosf (float __x) throw (); extern float __acosf (float __x) throw ();
+16535: 
+16535: extern float asinf (float __x) throw (); extern float __asinf (float __x) throw ();
+16535: 
+16535: extern float atanf (float __x) throw (); extern float __atanf (float __x) throw ();
+16535: 
+16535: extern float atan2f (float __y, float __x) throw (); extern float __atan2f (float __y, float __x) throw ();
+16535: 
+16535: 
+16535:  extern float cosf (float __x) throw (); extern float __cosf (float __x) throw ();
+16535: 
+16535:  extern float sinf (float __x) throw (); extern float __sinf (float __x) throw ();
+16535: 
+16535: extern float tanf (float __x) throw (); extern float __tanf (float __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern float coshf (float __x) throw (); extern float __coshf (float __x) throw ();
+16535: 
+16535: extern float sinhf (float __x) throw (); extern float __sinhf (float __x) throw ();
+16535: 
+16535: extern float tanhf (float __x) throw (); extern float __tanhf (float __x) throw ();
+16535: 
+16535: 
+16535: 
+16535:  extern void sincosf (float __x, float *__sinx, float *__cosx) throw (); extern void __sincosf (float __x, float *__sinx, float *__cosx) throw ()
+16535:                                                         ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern float acoshf (float __x) throw (); extern float __acoshf (float __x) throw ();
+16535: 
+16535: extern float asinhf (float __x) throw (); extern float __asinhf (float __x) throw ();
+16535: 
+16535: extern float atanhf (float __x) throw (); extern float __atanhf (float __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  extern float expf (float __x) throw (); extern float __expf (float __x) throw ();
+16535: 
+16535: 
+16535: extern float frexpf (float __x, int *__exponent) throw (); extern float __frexpf (float __x, int *__exponent) throw ();
+16535: 
+16535: 
+16535: extern float ldexpf (float __x, int __exponent) throw (); extern float __ldexpf (float __x, int __exponent) throw ();
+16535: 
+16535: 
+16535:  extern float logf (float __x) throw (); extern float __logf (float __x) throw ();
+16535: 
+16535: 
+16535: extern float log10f (float __x) throw (); extern float __log10f (float __x) throw ();
+16535: 
+16535: 
+16535: extern float modff (float __x, float *__iptr) throw (); extern float __modff (float __x, float *__iptr) throw () __attribute__ ((__nonnull__ (2)));
+16535: 
+16535: 
+16535: 
+16535: extern float exp10f (float __x) throw (); extern float __exp10f (float __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern float expm1f (float __x) throw (); extern float __expm1f (float __x) throw ();
+16535: 
+16535: 
+16535: extern float log1pf (float __x) throw (); extern float __log1pf (float __x) throw ();
+16535: 
+16535: 
+16535: extern float logbf (float __x) throw (); extern float __logbf (float __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern float exp2f (float __x) throw (); extern float __exp2f (float __x) throw ();
+16535: 
+16535: 
+16535: extern float log2f (float __x) throw (); extern float __log2f (float __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  extern float powf (float __x, float __y) throw (); extern float __powf (float __x, float __y) throw ();
+16535: 
+16535: 
+16535: extern float sqrtf (float __x) throw (); extern float __sqrtf (float __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern float hypotf (float __x, float __y) throw (); extern float __hypotf (float __x, float __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern float cbrtf (float __x) throw (); extern float __cbrtf (float __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern float ceilf (float __x) throw () __attribute__ ((__const__)); extern float __ceilf (float __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern float fabsf (float __x) throw () __attribute__ ((__const__)); extern float __fabsf (float __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern float floorf (float __x) throw () __attribute__ ((__const__)); extern float __floorf (float __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern float fmodf (float __x, float __y) throw (); extern float __fmodf (float __x, float __y) throw ();
+16535: # 177 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern int isinff (float __value) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int finitef (float __value) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern float dremf (float __x, float __y) throw (); extern float __dremf (float __x, float __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern float significandf (float __x) throw (); extern float __significandf (float __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern float copysignf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __copysignf (float __x, float __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern float nanf (const char *__tagb) throw (); extern float __nanf (const char *__tagb) throw ();
+16535: # 211 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern int isnanf (float __value) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern float j0f (float) throw (); extern float __j0f (float) throw ();
+16535: extern float j1f (float) throw (); extern float __j1f (float) throw ();
+16535: extern float jnf (int, float) throw (); extern float __jnf (int, float) throw ();
+16535: extern float y0f (float) throw (); extern float __y0f (float) throw ();
+16535: extern float y1f (float) throw (); extern float __y1f (float) throw ();
+16535: extern float ynf (int, float) throw (); extern float __ynf (int, float) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern float erff (float) throw (); extern float __erff (float) throw ();
+16535: extern float erfcf (float) throw (); extern float __erfcf (float) throw ();
+16535: extern float lgammaf (float) throw (); extern float __lgammaf (float) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern float tgammaf (float) throw (); extern float __tgammaf (float) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern float gammaf (float) throw (); extern float __gammaf (float) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern float lgammaf_r (float, int *__signgamp) throw (); extern float __lgammaf_r (float, int *__signgamp) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern float rintf (float __x) throw (); extern float __rintf (float __x) throw ();
+16535: 
+16535: 
+16535: extern float nextafterf (float __x, float __y) throw (); extern float __nextafterf (float __x, float __y) throw ();
+16535: 
+16535: extern float nexttowardf (float __x, long double __y) throw (); extern float __nexttowardf (float __x, long double __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern float nextdownf (float __x) throw (); extern float __nextdownf (float __x) throw ();
+16535: 
+16535: extern float nextupf (float __x) throw (); extern float __nextupf (float __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern float remainderf (float __x, float __y) throw (); extern float __remainderf (float __x, float __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern float scalbnf (float __x, int __n) throw (); extern float __scalbnf (float __x, int __n) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int ilogbf (float __x) throw (); extern int __ilogbf (float __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long int llogbf (float __x) throw (); extern long int __llogbf (float __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern float scalblnf (float __x, long int __n) throw (); extern float __scalblnf (float __x, long int __n) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern float nearbyintf (float __x) throw (); extern float __nearbyintf (float __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern float roundf (float __x) throw () __attribute__ ((__const__)); extern float __roundf (float __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: extern float truncf (float __x) throw () __attribute__ ((__const__)); extern float __truncf (float __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern float remquof (float __x, float __y, int *__quo) throw (); extern float __remquof (float __x, float __y, int *__quo) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long int lrintf (float __x) throw (); extern long int __lrintf (float __x) throw ();
+16535: __extension__
+16535: extern long long int llrintf (float __x) throw (); extern long long int __llrintf (float __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern long int lroundf (float __x) throw (); extern long int __lroundf (float __x) throw ();
+16535: __extension__
+16535: extern long long int llroundf (float __x) throw (); extern long long int __llroundf (float __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern float fdimf (float __x, float __y) throw (); extern float __fdimf (float __x, float __y) throw ();
+16535: 
+16535: 
+16535: extern float fmaxf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __fmaxf (float __x, float __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern float fminf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __fminf (float __x, float __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern float fmaf (float __x, float __y, float __z) throw (); extern float __fmaf (float __x, float __y, float __z) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern float roundevenf (float __x) throw () __attribute__ ((__const__)); extern float __roundevenf (float __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: extern __intmax_t fromfpf (float __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpf (float __x, int __round, unsigned int __width) throw ()
+16535:                             ;
+16535: 
+16535: 
+16535: 
+16535: extern __uintmax_t ufromfpf (float __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpf (float __x, int __round, unsigned int __width) throw ()
+16535:                               ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __intmax_t fromfpxf (float __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpxf (float __x, int __round, unsigned int __width) throw ()
+16535:                              ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __uintmax_t ufromfpxf (float __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpxf (float __x, int __round, unsigned int __width) throw ()
+16535:                                ;
+16535: 
+16535: 
+16535: extern float fmaxmagf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __fmaxmagf (float __x, float __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern float fminmagf (float __x, float __y) throw () __attribute__ ((__const__)); extern float __fminmagf (float __x, float __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int totalorderf (float __x, float __y) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int totalordermagf (float __x, float __y) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int canonicalizef (float *__cx, const float *__x) throw ();
+16535: 
+16535: 
+16535: extern float getpayloadf (const float *__x) throw (); extern float __getpayloadf (const float *__x) throw ();
+16535: 
+16535: 
+16535: extern int setpayloadf (float *__x, float __payload) throw ();
+16535: 
+16535: 
+16535: extern int setpayloadsigf (float *__x, float __payload) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern float scalbf (float __x, float __n) throw (); extern float __scalbf (float __x, float __n) throw ();
+16535: # 308 "/usr/include/math.h" 2 3 4
+16535: # 349 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h" 1 3 4
+16535: # 21 "/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h" 3 4
+16535: extern int __fpclassifyl (long double __value) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int __signbitl (long double __value) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: extern int __isinfl (long double __value) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int __finitel (long double __value) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int __isnanl (long double __value) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int __iseqsigl (long double __x, long double __y) throw ();
+16535: 
+16535: 
+16535: extern int __issignalingl (long double __value) throw ()
+16535:      __attribute__ ((__const__));
+16535: # 350 "/usr/include/math.h" 2 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 1 3 4
+16535: # 53 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern long double acosl (long double __x) throw (); extern long double __acosl (long double __x) throw ();
+16535: 
+16535: extern long double asinl (long double __x) throw (); extern long double __asinl (long double __x) throw ();
+16535: 
+16535: extern long double atanl (long double __x) throw (); extern long double __atanl (long double __x) throw ();
+16535: 
+16535: extern long double atan2l (long double __y, long double __x) throw (); extern long double __atan2l (long double __y, long double __x) throw ();
+16535: 
+16535: 
+16535:  extern long double cosl (long double __x) throw (); extern long double __cosl (long double __x) throw ();
+16535: 
+16535:  extern long double sinl (long double __x) throw (); extern long double __sinl (long double __x) throw ();
+16535: 
+16535: extern long double tanl (long double __x) throw (); extern long double __tanl (long double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long double coshl (long double __x) throw (); extern long double __coshl (long double __x) throw ();
+16535: 
+16535: extern long double sinhl (long double __x) throw (); extern long double __sinhl (long double __x) throw ();
+16535: 
+16535: extern long double tanhl (long double __x) throw (); extern long double __tanhl (long double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535:  extern void sincosl (long double __x, long double *__sinx, long double *__cosx) throw (); extern void __sincosl (long double __x, long double *__sinx, long double *__cosx) throw ()
+16535:                                                         ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long double acoshl (long double __x) throw (); extern long double __acoshl (long double __x) throw ();
+16535: 
+16535: extern long double asinhl (long double __x) throw (); extern long double __asinhl (long double __x) throw ();
+16535: 
+16535: extern long double atanhl (long double __x) throw (); extern long double __atanhl (long double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  extern long double expl (long double __x) throw (); extern long double __expl (long double __x) throw ();
+16535: 
+16535: 
+16535: extern long double frexpl (long double __x, int *__exponent) throw (); extern long double __frexpl (long double __x, int *__exponent) throw ();
+16535: 
+16535: 
+16535: extern long double ldexpl (long double __x, int __exponent) throw (); extern long double __ldexpl (long double __x, int __exponent) throw ();
+16535: 
+16535: 
+16535:  extern long double logl (long double __x) throw (); extern long double __logl (long double __x) throw ();
+16535: 
+16535: 
+16535: extern long double log10l (long double __x) throw (); extern long double __log10l (long double __x) throw ();
+16535: 
+16535: 
+16535: extern long double modfl (long double __x, long double *__iptr) throw (); extern long double __modfl (long double __x, long double *__iptr) throw () __attribute__ ((__nonnull__ (2)));
+16535: 
+16535: 
+16535: 
+16535: extern long double exp10l (long double __x) throw (); extern long double __exp10l (long double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long double expm1l (long double __x) throw (); extern long double __expm1l (long double __x) throw ();
+16535: 
+16535: 
+16535: extern long double log1pl (long double __x) throw (); extern long double __log1pl (long double __x) throw ();
+16535: 
+16535: 
+16535: extern long double logbl (long double __x) throw (); extern long double __logbl (long double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long double exp2l (long double __x) throw (); extern long double __exp2l (long double __x) throw ();
+16535: 
+16535: 
+16535: extern long double log2l (long double __x) throw (); extern long double __log2l (long double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  extern long double powl (long double __x, long double __y) throw (); extern long double __powl (long double __x, long double __y) throw ();
+16535: 
+16535: 
+16535: extern long double sqrtl (long double __x) throw (); extern long double __sqrtl (long double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern long double hypotl (long double __x, long double __y) throw (); extern long double __hypotl (long double __x, long double __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long double cbrtl (long double __x) throw (); extern long double __cbrtl (long double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long double ceill (long double __x) throw () __attribute__ ((__const__)); extern long double __ceill (long double __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern long double fabsl (long double __x) throw () __attribute__ ((__const__)); extern long double __fabsl (long double __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern long double floorl (long double __x) throw () __attribute__ ((__const__)); extern long double __floorl (long double __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern long double fmodl (long double __x, long double __y) throw (); extern long double __fmodl (long double __x, long double __y) throw ();
+16535: # 177 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern int isinfl (long double __value) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int finitel (long double __value) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern long double dreml (long double __x, long double __y) throw (); extern long double __dreml (long double __x, long double __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern long double significandl (long double __x) throw (); extern long double __significandl (long double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long double copysignl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __copysignl (long double __x, long double __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long double nanl (const char *__tagb) throw (); extern long double __nanl (const char *__tagb) throw ();
+16535: # 211 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern int isnanl (long double __value) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long double j0l (long double) throw (); extern long double __j0l (long double) throw ();
+16535: extern long double j1l (long double) throw (); extern long double __j1l (long double) throw ();
+16535: extern long double jnl (int, long double) throw (); extern long double __jnl (int, long double) throw ();
+16535: extern long double y0l (long double) throw (); extern long double __y0l (long double) throw ();
+16535: extern long double y1l (long double) throw (); extern long double __y1l (long double) throw ();
+16535: extern long double ynl (int, long double) throw (); extern long double __ynl (int, long double) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long double erfl (long double) throw (); extern long double __erfl (long double) throw ();
+16535: extern long double erfcl (long double) throw (); extern long double __erfcl (long double) throw ();
+16535: extern long double lgammal (long double) throw (); extern long double __lgammal (long double) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long double tgammal (long double) throw (); extern long double __tgammal (long double) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long double gammal (long double) throw (); extern long double __gammal (long double) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long double lgammal_r (long double, int *__signgamp) throw (); extern long double __lgammal_r (long double, int *__signgamp) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long double rintl (long double __x) throw (); extern long double __rintl (long double __x) throw ();
+16535: 
+16535: 
+16535: extern long double nextafterl (long double __x, long double __y) throw (); extern long double __nextafterl (long double __x, long double __y) throw ();
+16535: 
+16535: extern long double nexttowardl (long double __x, long double __y) throw (); extern long double __nexttowardl (long double __x, long double __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long double nextdownl (long double __x) throw (); extern long double __nextdownl (long double __x) throw ();
+16535: 
+16535: extern long double nextupl (long double __x) throw (); extern long double __nextupl (long double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern long double remainderl (long double __x, long double __y) throw (); extern long double __remainderl (long double __x, long double __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern long double scalbnl (long double __x, int __n) throw (); extern long double __scalbnl (long double __x, int __n) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int ilogbl (long double __x) throw (); extern int __ilogbl (long double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long int llogbl (long double __x) throw (); extern long int __llogbl (long double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long double scalblnl (long double __x, long int __n) throw (); extern long double __scalblnl (long double __x, long int __n) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern long double nearbyintl (long double __x) throw (); extern long double __nearbyintl (long double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern long double roundl (long double __x) throw () __attribute__ ((__const__)); extern long double __roundl (long double __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: extern long double truncl (long double __x) throw () __attribute__ ((__const__)); extern long double __truncl (long double __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long double remquol (long double __x, long double __y, int *__quo) throw (); extern long double __remquol (long double __x, long double __y, int *__quo) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long int lrintl (long double __x) throw (); extern long int __lrintl (long double __x) throw ();
+16535: __extension__
+16535: extern long long int llrintl (long double __x) throw (); extern long long int __llrintl (long double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern long int lroundl (long double __x) throw (); extern long int __lroundl (long double __x) throw ();
+16535: __extension__
+16535: extern long long int llroundl (long double __x) throw (); extern long long int __llroundl (long double __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern long double fdiml (long double __x, long double __y) throw (); extern long double __fdiml (long double __x, long double __y) throw ();
+16535: 
+16535: 
+16535: extern long double fmaxl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __fmaxl (long double __x, long double __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern long double fminl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __fminl (long double __x, long double __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern long double fmal (long double __x, long double __y, long double __z) throw (); extern long double __fmal (long double __x, long double __y, long double __z) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long double roundevenl (long double __x) throw () __attribute__ ((__const__)); extern long double __roundevenl (long double __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: extern __intmax_t fromfpl (long double __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpl (long double __x, int __round, unsigned int __width) throw ()
+16535:                             ;
+16535: 
+16535: 
+16535: 
+16535: extern __uintmax_t ufromfpl (long double __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpl (long double __x, int __round, unsigned int __width) throw ()
+16535:                               ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __intmax_t fromfpxl (long double __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpxl (long double __x, int __round, unsigned int __width) throw ()
+16535:                              ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __uintmax_t ufromfpxl (long double __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpxl (long double __x, int __round, unsigned int __width) throw ()
+16535:                                ;
+16535: 
+16535: 
+16535: extern long double fmaxmagl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __fmaxmagl (long double __x, long double __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern long double fminmagl (long double __x, long double __y) throw () __attribute__ ((__const__)); extern long double __fminmagl (long double __x, long double __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int totalorderl (long double __x, long double __y) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int totalordermagl (long double __x, long double __y) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int canonicalizel (long double *__cx, const long double *__x) throw ();
+16535: 
+16535: 
+16535: extern long double getpayloadl (const long double *__x) throw (); extern long double __getpayloadl (const long double *__x) throw ();
+16535: 
+16535: 
+16535: extern int setpayloadl (long double *__x, long double __payload) throw ();
+16535: 
+16535: 
+16535: extern int setpayloadsigl (long double *__x, long double __payload) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long double scalbl (long double __x, long double __n) throw (); extern long double __scalbl (long double __x, long double __n) throw ();
+16535: # 351 "/usr/include/math.h" 2 3 4
+16535: # 389 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 1 3 4
+16535: # 53 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern _Float32 acosf32 (_Float32 __x) throw (); extern _Float32 __acosf32 (_Float32 __x) throw ();
+16535: 
+16535: extern _Float32 asinf32 (_Float32 __x) throw (); extern _Float32 __asinf32 (_Float32 __x) throw ();
+16535: 
+16535: extern _Float32 atanf32 (_Float32 __x) throw (); extern _Float32 __atanf32 (_Float32 __x) throw ();
+16535: 
+16535: extern _Float32 atan2f32 (_Float32 __y, _Float32 __x) throw (); extern _Float32 __atan2f32 (_Float32 __y, _Float32 __x) throw ();
+16535: 
+16535: 
+16535:  extern _Float32 cosf32 (_Float32 __x) throw (); extern _Float32 __cosf32 (_Float32 __x) throw ();
+16535: 
+16535:  extern _Float32 sinf32 (_Float32 __x) throw (); extern _Float32 __sinf32 (_Float32 __x) throw ();
+16535: 
+16535: extern _Float32 tanf32 (_Float32 __x) throw (); extern _Float32 __tanf32 (_Float32 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32 coshf32 (_Float32 __x) throw (); extern _Float32 __coshf32 (_Float32 __x) throw ();
+16535: 
+16535: extern _Float32 sinhf32 (_Float32 __x) throw (); extern _Float32 __sinhf32 (_Float32 __x) throw ();
+16535: 
+16535: extern _Float32 tanhf32 (_Float32 __x) throw (); extern _Float32 __tanhf32 (_Float32 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535:  extern void sincosf32 (_Float32 __x, _Float32 *__sinx, _Float32 *__cosx) throw (); extern void __sincosf32 (_Float32 __x, _Float32 *__sinx, _Float32 *__cosx) throw ()
+16535:                                                         ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32 acoshf32 (_Float32 __x) throw (); extern _Float32 __acoshf32 (_Float32 __x) throw ();
+16535: 
+16535: extern _Float32 asinhf32 (_Float32 __x) throw (); extern _Float32 __asinhf32 (_Float32 __x) throw ();
+16535: 
+16535: extern _Float32 atanhf32 (_Float32 __x) throw (); extern _Float32 __atanhf32 (_Float32 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  extern _Float32 expf32 (_Float32 __x) throw (); extern _Float32 __expf32 (_Float32 __x) throw ();
+16535: 
+16535: 
+16535: extern _Float32 frexpf32 (_Float32 __x, int *__exponent) throw (); extern _Float32 __frexpf32 (_Float32 __x, int *__exponent) throw ();
+16535: 
+16535: 
+16535: extern _Float32 ldexpf32 (_Float32 __x, int __exponent) throw (); extern _Float32 __ldexpf32 (_Float32 __x, int __exponent) throw ();
+16535: 
+16535: 
+16535:  extern _Float32 logf32 (_Float32 __x) throw (); extern _Float32 __logf32 (_Float32 __x) throw ();
+16535: 
+16535: 
+16535: extern _Float32 log10f32 (_Float32 __x) throw (); extern _Float32 __log10f32 (_Float32 __x) throw ();
+16535: 
+16535: 
+16535: extern _Float32 modff32 (_Float32 __x, _Float32 *__iptr) throw (); extern _Float32 __modff32 (_Float32 __x, _Float32 *__iptr) throw () __attribute__ ((__nonnull__ (2)));
+16535: 
+16535: 
+16535: 
+16535: extern _Float32 exp10f32 (_Float32 __x) throw (); extern _Float32 __exp10f32 (_Float32 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32 expm1f32 (_Float32 __x) throw (); extern _Float32 __expm1f32 (_Float32 __x) throw ();
+16535: 
+16535: 
+16535: extern _Float32 log1pf32 (_Float32 __x) throw (); extern _Float32 __log1pf32 (_Float32 __x) throw ();
+16535: 
+16535: 
+16535: extern _Float32 logbf32 (_Float32 __x) throw (); extern _Float32 __logbf32 (_Float32 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32 exp2f32 (_Float32 __x) throw (); extern _Float32 __exp2f32 (_Float32 __x) throw ();
+16535: 
+16535: 
+16535: extern _Float32 log2f32 (_Float32 __x) throw (); extern _Float32 __log2f32 (_Float32 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  extern _Float32 powf32 (_Float32 __x, _Float32 __y) throw (); extern _Float32 __powf32 (_Float32 __x, _Float32 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32 sqrtf32 (_Float32 __x) throw (); extern _Float32 __sqrtf32 (_Float32 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float32 hypotf32 (_Float32 __x, _Float32 __y) throw (); extern _Float32 __hypotf32 (_Float32 __x, _Float32 __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32 cbrtf32 (_Float32 __x) throw (); extern _Float32 __cbrtf32 (_Float32 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32 ceilf32 (_Float32 __x) throw () __attribute__ ((__const__)); extern _Float32 __ceilf32 (_Float32 __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float32 fabsf32 (_Float32 __x) throw () __attribute__ ((__const__)); extern _Float32 __fabsf32 (_Float32 __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float32 floorf32 (_Float32 __x) throw () __attribute__ ((__const__)); extern _Float32 __floorf32 (_Float32 __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float32 fmodf32 (_Float32 __x, _Float32 __y) throw (); extern _Float32 __fmodf32 (_Float32 __x, _Float32 __y) throw ();
+16535: # 196 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern _Float32 copysignf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__)); extern _Float32 __copysignf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32 nanf32 (const char *__tagb) throw (); extern _Float32 __nanf32 (const char *__tagb) throw ();
+16535: # 217 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern _Float32 j0f32 (_Float32) throw (); extern _Float32 __j0f32 (_Float32) throw ();
+16535: extern _Float32 j1f32 (_Float32) throw (); extern _Float32 __j1f32 (_Float32) throw ();
+16535: extern _Float32 jnf32 (int, _Float32) throw (); extern _Float32 __jnf32 (int, _Float32) throw ();
+16535: extern _Float32 y0f32 (_Float32) throw (); extern _Float32 __y0f32 (_Float32) throw ();
+16535: extern _Float32 y1f32 (_Float32) throw (); extern _Float32 __y1f32 (_Float32) throw ();
+16535: extern _Float32 ynf32 (int, _Float32) throw (); extern _Float32 __ynf32 (int, _Float32) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32 erff32 (_Float32) throw (); extern _Float32 __erff32 (_Float32) throw ();
+16535: extern _Float32 erfcf32 (_Float32) throw (); extern _Float32 __erfcf32 (_Float32) throw ();
+16535: extern _Float32 lgammaf32 (_Float32) throw (); extern _Float32 __lgammaf32 (_Float32) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32 tgammaf32 (_Float32) throw (); extern _Float32 __tgammaf32 (_Float32) throw ();
+16535: # 249 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern _Float32 lgammaf32_r (_Float32, int *__signgamp) throw (); extern _Float32 __lgammaf32_r (_Float32, int *__signgamp) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32 rintf32 (_Float32 __x) throw (); extern _Float32 __rintf32 (_Float32 __x) throw ();
+16535: 
+16535: 
+16535: extern _Float32 nextafterf32 (_Float32 __x, _Float32 __y) throw (); extern _Float32 __nextafterf32 (_Float32 __x, _Float32 __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32 nextdownf32 (_Float32 __x) throw (); extern _Float32 __nextdownf32 (_Float32 __x) throw ();
+16535: 
+16535: extern _Float32 nextupf32 (_Float32 __x) throw (); extern _Float32 __nextupf32 (_Float32 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float32 remainderf32 (_Float32 __x, _Float32 __y) throw (); extern _Float32 __remainderf32 (_Float32 __x, _Float32 __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float32 scalbnf32 (_Float32 __x, int __n) throw (); extern _Float32 __scalbnf32 (_Float32 __x, int __n) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int ilogbf32 (_Float32 __x) throw (); extern int __ilogbf32 (_Float32 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long int llogbf32 (_Float32 __x) throw (); extern long int __llogbf32 (_Float32 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32 scalblnf32 (_Float32 __x, long int __n) throw (); extern _Float32 __scalblnf32 (_Float32 __x, long int __n) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float32 nearbyintf32 (_Float32 __x) throw (); extern _Float32 __nearbyintf32 (_Float32 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float32 roundf32 (_Float32 __x) throw () __attribute__ ((__const__)); extern _Float32 __roundf32 (_Float32 __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: extern _Float32 truncf32 (_Float32 __x) throw () __attribute__ ((__const__)); extern _Float32 __truncf32 (_Float32 __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32 remquof32 (_Float32 __x, _Float32 __y, int *__quo) throw (); extern _Float32 __remquof32 (_Float32 __x, _Float32 __y, int *__quo) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long int lrintf32 (_Float32 __x) throw (); extern long int __lrintf32 (_Float32 __x) throw ();
+16535: __extension__
+16535: extern long long int llrintf32 (_Float32 __x) throw (); extern long long int __llrintf32 (_Float32 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern long int lroundf32 (_Float32 __x) throw (); extern long int __lroundf32 (_Float32 __x) throw ();
+16535: __extension__
+16535: extern long long int llroundf32 (_Float32 __x) throw (); extern long long int __llroundf32 (_Float32 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float32 fdimf32 (_Float32 __x, _Float32 __y) throw (); extern _Float32 __fdimf32 (_Float32 __x, _Float32 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32 fmaxf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__)); extern _Float32 __fmaxf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float32 fminf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__)); extern _Float32 __fminf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float32 fmaf32 (_Float32 __x, _Float32 __y, _Float32 __z) throw (); extern _Float32 __fmaf32 (_Float32 __x, _Float32 __y, _Float32 __z) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32 roundevenf32 (_Float32 __x) throw () __attribute__ ((__const__)); extern _Float32 __roundevenf32 (_Float32 __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: extern __intmax_t fromfpf32 (_Float32 __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpf32 (_Float32 __x, int __round, unsigned int __width) throw ()
+16535:                             ;
+16535: 
+16535: 
+16535: 
+16535: extern __uintmax_t ufromfpf32 (_Float32 __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpf32 (_Float32 __x, int __round, unsigned int __width) throw ()
+16535:                               ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __intmax_t fromfpxf32 (_Float32 __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpxf32 (_Float32 __x, int __round, unsigned int __width) throw ()
+16535:                              ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __uintmax_t ufromfpxf32 (_Float32 __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpxf32 (_Float32 __x, int __round, unsigned int __width) throw ()
+16535:                                ;
+16535: 
+16535: 
+16535: extern _Float32 fmaxmagf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__)); extern _Float32 __fmaxmagf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float32 fminmagf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__)); extern _Float32 __fminmagf32 (_Float32 __x, _Float32 __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int totalorderf32 (_Float32 __x, _Float32 __y) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int totalordermagf32 (_Float32 __x, _Float32 __y) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int canonicalizef32 (_Float32 *__cx, const _Float32 *__x) throw ();
+16535: 
+16535: 
+16535: extern _Float32 getpayloadf32 (const _Float32 *__x) throw (); extern _Float32 __getpayloadf32 (const _Float32 *__x) throw ();
+16535: 
+16535: 
+16535: extern int setpayloadf32 (_Float32 *__x, _Float32 __payload) throw ();
+16535: 
+16535: 
+16535: extern int setpayloadsigf32 (_Float32 *__x, _Float32 __payload) throw ();
+16535: # 390 "/usr/include/math.h" 2 3 4
+16535: # 406 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 1 3 4
+16535: # 53 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern _Float64 acosf64 (_Float64 __x) throw (); extern _Float64 __acosf64 (_Float64 __x) throw ();
+16535: 
+16535: extern _Float64 asinf64 (_Float64 __x) throw (); extern _Float64 __asinf64 (_Float64 __x) throw ();
+16535: 
+16535: extern _Float64 atanf64 (_Float64 __x) throw (); extern _Float64 __atanf64 (_Float64 __x) throw ();
+16535: 
+16535: extern _Float64 atan2f64 (_Float64 __y, _Float64 __x) throw (); extern _Float64 __atan2f64 (_Float64 __y, _Float64 __x) throw ();
+16535: 
+16535: 
+16535:  extern _Float64 cosf64 (_Float64 __x) throw (); extern _Float64 __cosf64 (_Float64 __x) throw ();
+16535: 
+16535:  extern _Float64 sinf64 (_Float64 __x) throw (); extern _Float64 __sinf64 (_Float64 __x) throw ();
+16535: 
+16535: extern _Float64 tanf64 (_Float64 __x) throw (); extern _Float64 __tanf64 (_Float64 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 coshf64 (_Float64 __x) throw (); extern _Float64 __coshf64 (_Float64 __x) throw ();
+16535: 
+16535: extern _Float64 sinhf64 (_Float64 __x) throw (); extern _Float64 __sinhf64 (_Float64 __x) throw ();
+16535: 
+16535: extern _Float64 tanhf64 (_Float64 __x) throw (); extern _Float64 __tanhf64 (_Float64 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535:  extern void sincosf64 (_Float64 __x, _Float64 *__sinx, _Float64 *__cosx) throw (); extern void __sincosf64 (_Float64 __x, _Float64 *__sinx, _Float64 *__cosx) throw ()
+16535:                                                         ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 acoshf64 (_Float64 __x) throw (); extern _Float64 __acoshf64 (_Float64 __x) throw ();
+16535: 
+16535: extern _Float64 asinhf64 (_Float64 __x) throw (); extern _Float64 __asinhf64 (_Float64 __x) throw ();
+16535: 
+16535: extern _Float64 atanhf64 (_Float64 __x) throw (); extern _Float64 __atanhf64 (_Float64 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  extern _Float64 expf64 (_Float64 __x) throw (); extern _Float64 __expf64 (_Float64 __x) throw ();
+16535: 
+16535: 
+16535: extern _Float64 frexpf64 (_Float64 __x, int *__exponent) throw (); extern _Float64 __frexpf64 (_Float64 __x, int *__exponent) throw ();
+16535: 
+16535: 
+16535: extern _Float64 ldexpf64 (_Float64 __x, int __exponent) throw (); extern _Float64 __ldexpf64 (_Float64 __x, int __exponent) throw ();
+16535: 
+16535: 
+16535:  extern _Float64 logf64 (_Float64 __x) throw (); extern _Float64 __logf64 (_Float64 __x) throw ();
+16535: 
+16535: 
+16535: extern _Float64 log10f64 (_Float64 __x) throw (); extern _Float64 __log10f64 (_Float64 __x) throw ();
+16535: 
+16535: 
+16535: extern _Float64 modff64 (_Float64 __x, _Float64 *__iptr) throw (); extern _Float64 __modff64 (_Float64 __x, _Float64 *__iptr) throw () __attribute__ ((__nonnull__ (2)));
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 exp10f64 (_Float64 __x) throw (); extern _Float64 __exp10f64 (_Float64 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 expm1f64 (_Float64 __x) throw (); extern _Float64 __expm1f64 (_Float64 __x) throw ();
+16535: 
+16535: 
+16535: extern _Float64 log1pf64 (_Float64 __x) throw (); extern _Float64 __log1pf64 (_Float64 __x) throw ();
+16535: 
+16535: 
+16535: extern _Float64 logbf64 (_Float64 __x) throw (); extern _Float64 __logbf64 (_Float64 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 exp2f64 (_Float64 __x) throw (); extern _Float64 __exp2f64 (_Float64 __x) throw ();
+16535: 
+16535: 
+16535: extern _Float64 log2f64 (_Float64 __x) throw (); extern _Float64 __log2f64 (_Float64 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  extern _Float64 powf64 (_Float64 __x, _Float64 __y) throw (); extern _Float64 __powf64 (_Float64 __x, _Float64 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float64 sqrtf64 (_Float64 __x) throw (); extern _Float64 __sqrtf64 (_Float64 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 hypotf64 (_Float64 __x, _Float64 __y) throw (); extern _Float64 __hypotf64 (_Float64 __x, _Float64 __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 cbrtf64 (_Float64 __x) throw (); extern _Float64 __cbrtf64 (_Float64 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 ceilf64 (_Float64 __x) throw () __attribute__ ((__const__)); extern _Float64 __ceilf64 (_Float64 __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float64 fabsf64 (_Float64 __x) throw () __attribute__ ((__const__)); extern _Float64 __fabsf64 (_Float64 __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float64 floorf64 (_Float64 __x) throw () __attribute__ ((__const__)); extern _Float64 __floorf64 (_Float64 __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float64 fmodf64 (_Float64 __x, _Float64 __y) throw (); extern _Float64 __fmodf64 (_Float64 __x, _Float64 __y) throw ();
+16535: # 196 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern _Float64 copysignf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__)); extern _Float64 __copysignf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 nanf64 (const char *__tagb) throw (); extern _Float64 __nanf64 (const char *__tagb) throw ();
+16535: # 217 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern _Float64 j0f64 (_Float64) throw (); extern _Float64 __j0f64 (_Float64) throw ();
+16535: extern _Float64 j1f64 (_Float64) throw (); extern _Float64 __j1f64 (_Float64) throw ();
+16535: extern _Float64 jnf64 (int, _Float64) throw (); extern _Float64 __jnf64 (int, _Float64) throw ();
+16535: extern _Float64 y0f64 (_Float64) throw (); extern _Float64 __y0f64 (_Float64) throw ();
+16535: extern _Float64 y1f64 (_Float64) throw (); extern _Float64 __y1f64 (_Float64) throw ();
+16535: extern _Float64 ynf64 (int, _Float64) throw (); extern _Float64 __ynf64 (int, _Float64) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 erff64 (_Float64) throw (); extern _Float64 __erff64 (_Float64) throw ();
+16535: extern _Float64 erfcf64 (_Float64) throw (); extern _Float64 __erfcf64 (_Float64) throw ();
+16535: extern _Float64 lgammaf64 (_Float64) throw (); extern _Float64 __lgammaf64 (_Float64) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 tgammaf64 (_Float64) throw (); extern _Float64 __tgammaf64 (_Float64) throw ();
+16535: # 249 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern _Float64 lgammaf64_r (_Float64, int *__signgamp) throw (); extern _Float64 __lgammaf64_r (_Float64, int *__signgamp) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 rintf64 (_Float64 __x) throw (); extern _Float64 __rintf64 (_Float64 __x) throw ();
+16535: 
+16535: 
+16535: extern _Float64 nextafterf64 (_Float64 __x, _Float64 __y) throw (); extern _Float64 __nextafterf64 (_Float64 __x, _Float64 __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 nextdownf64 (_Float64 __x) throw (); extern _Float64 __nextdownf64 (_Float64 __x) throw ();
+16535: 
+16535: extern _Float64 nextupf64 (_Float64 __x) throw (); extern _Float64 __nextupf64 (_Float64 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 remainderf64 (_Float64 __x, _Float64 __y) throw (); extern _Float64 __remainderf64 (_Float64 __x, _Float64 __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 scalbnf64 (_Float64 __x, int __n) throw (); extern _Float64 __scalbnf64 (_Float64 __x, int __n) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int ilogbf64 (_Float64 __x) throw (); extern int __ilogbf64 (_Float64 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long int llogbf64 (_Float64 __x) throw (); extern long int __llogbf64 (_Float64 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 scalblnf64 (_Float64 __x, long int __n) throw (); extern _Float64 __scalblnf64 (_Float64 __x, long int __n) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 nearbyintf64 (_Float64 __x) throw (); extern _Float64 __nearbyintf64 (_Float64 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 roundf64 (_Float64 __x) throw () __attribute__ ((__const__)); extern _Float64 __roundf64 (_Float64 __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 truncf64 (_Float64 __x) throw () __attribute__ ((__const__)); extern _Float64 __truncf64 (_Float64 __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 remquof64 (_Float64 __x, _Float64 __y, int *__quo) throw (); extern _Float64 __remquof64 (_Float64 __x, _Float64 __y, int *__quo) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long int lrintf64 (_Float64 __x) throw (); extern long int __lrintf64 (_Float64 __x) throw ();
+16535: __extension__
+16535: extern long long int llrintf64 (_Float64 __x) throw (); extern long long int __llrintf64 (_Float64 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern long int lroundf64 (_Float64 __x) throw (); extern long int __lroundf64 (_Float64 __x) throw ();
+16535: __extension__
+16535: extern long long int llroundf64 (_Float64 __x) throw (); extern long long int __llroundf64 (_Float64 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 fdimf64 (_Float64 __x, _Float64 __y) throw (); extern _Float64 __fdimf64 (_Float64 __x, _Float64 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float64 fmaxf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__)); extern _Float64 __fmaxf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float64 fminf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__)); extern _Float64 __fminf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float64 fmaf64 (_Float64 __x, _Float64 __y, _Float64 __z) throw (); extern _Float64 __fmaf64 (_Float64 __x, _Float64 __y, _Float64 __z) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64 roundevenf64 (_Float64 __x) throw () __attribute__ ((__const__)); extern _Float64 __roundevenf64 (_Float64 __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: extern __intmax_t fromfpf64 (_Float64 __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpf64 (_Float64 __x, int __round, unsigned int __width) throw ()
+16535:                             ;
+16535: 
+16535: 
+16535: 
+16535: extern __uintmax_t ufromfpf64 (_Float64 __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpf64 (_Float64 __x, int __round, unsigned int __width) throw ()
+16535:                               ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __intmax_t fromfpxf64 (_Float64 __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpxf64 (_Float64 __x, int __round, unsigned int __width) throw ()
+16535:                              ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __uintmax_t ufromfpxf64 (_Float64 __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpxf64 (_Float64 __x, int __round, unsigned int __width) throw ()
+16535:                                ;
+16535: 
+16535: 
+16535: extern _Float64 fmaxmagf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__)); extern _Float64 __fmaxmagf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float64 fminmagf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__)); extern _Float64 __fminmagf64 (_Float64 __x, _Float64 __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int totalorderf64 (_Float64 __x, _Float64 __y) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int totalordermagf64 (_Float64 __x, _Float64 __y) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int canonicalizef64 (_Float64 *__cx, const _Float64 *__x) throw ();
+16535: 
+16535: 
+16535: extern _Float64 getpayloadf64 (const _Float64 *__x) throw (); extern _Float64 __getpayloadf64 (const _Float64 *__x) throw ();
+16535: 
+16535: 
+16535: extern int setpayloadf64 (_Float64 *__x, _Float64 __payload) throw ();
+16535: 
+16535: 
+16535: extern int setpayloadsigf64 (_Float64 *__x, _Float64 __payload) throw ();
+16535: # 407 "/usr/include/math.h" 2 3 4
+16535: # 420 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h" 1 3 4
+16535: # 21 "/usr/include/x86_64-linux-gnu/bits/mathcalls-helper-functions.h" 3 4
+16535: extern int __fpclassifyf128 (_Float128 __value) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int __signbitf128 (_Float128 __value) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: extern int __isinff128 (_Float128 __value) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int __finitef128 (_Float128 __value) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int __isnanf128 (_Float128 __value) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int __iseqsigf128 (_Float128 __x, _Float128 __y) throw ();
+16535: 
+16535: 
+16535: extern int __issignalingf128 (_Float128 __value) throw ()
+16535:      __attribute__ ((__const__));
+16535: # 421 "/usr/include/math.h" 2 3 4
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 1 3 4
+16535: # 53 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern _Float128 acosf128 (_Float128 __x) throw (); extern _Float128 __acosf128 (_Float128 __x) throw ();
+16535: 
+16535: extern _Float128 asinf128 (_Float128 __x) throw (); extern _Float128 __asinf128 (_Float128 __x) throw ();
+16535: 
+16535: extern _Float128 atanf128 (_Float128 __x) throw (); extern _Float128 __atanf128 (_Float128 __x) throw ();
+16535: 
+16535: extern _Float128 atan2f128 (_Float128 __y, _Float128 __x) throw (); extern _Float128 __atan2f128 (_Float128 __y, _Float128 __x) throw ();
+16535: 
+16535: 
+16535:  extern _Float128 cosf128 (_Float128 __x) throw (); extern _Float128 __cosf128 (_Float128 __x) throw ();
+16535: 
+16535:  extern _Float128 sinf128 (_Float128 __x) throw (); extern _Float128 __sinf128 (_Float128 __x) throw ();
+16535: 
+16535: extern _Float128 tanf128 (_Float128 __x) throw (); extern _Float128 __tanf128 (_Float128 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 coshf128 (_Float128 __x) throw (); extern _Float128 __coshf128 (_Float128 __x) throw ();
+16535: 
+16535: extern _Float128 sinhf128 (_Float128 __x) throw (); extern _Float128 __sinhf128 (_Float128 __x) throw ();
+16535: 
+16535: extern _Float128 tanhf128 (_Float128 __x) throw (); extern _Float128 __tanhf128 (_Float128 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535:  extern void sincosf128 (_Float128 __x, _Float128 *__sinx, _Float128 *__cosx) throw (); extern void __sincosf128 (_Float128 __x, _Float128 *__sinx, _Float128 *__cosx) throw ()
+16535:                                                         ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 acoshf128 (_Float128 __x) throw (); extern _Float128 __acoshf128 (_Float128 __x) throw ();
+16535: 
+16535: extern _Float128 asinhf128 (_Float128 __x) throw (); extern _Float128 __asinhf128 (_Float128 __x) throw ();
+16535: 
+16535: extern _Float128 atanhf128 (_Float128 __x) throw (); extern _Float128 __atanhf128 (_Float128 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  extern _Float128 expf128 (_Float128 __x) throw (); extern _Float128 __expf128 (_Float128 __x) throw ();
+16535: 
+16535: 
+16535: extern _Float128 frexpf128 (_Float128 __x, int *__exponent) throw (); extern _Float128 __frexpf128 (_Float128 __x, int *__exponent) throw ();
+16535: 
+16535: 
+16535: extern _Float128 ldexpf128 (_Float128 __x, int __exponent) throw (); extern _Float128 __ldexpf128 (_Float128 __x, int __exponent) throw ();
+16535: 
+16535: 
+16535:  extern _Float128 logf128 (_Float128 __x) throw (); extern _Float128 __logf128 (_Float128 __x) throw ();
+16535: 
+16535: 
+16535: extern _Float128 log10f128 (_Float128 __x) throw (); extern _Float128 __log10f128 (_Float128 __x) throw ();
+16535: 
+16535: 
+16535: extern _Float128 modff128 (_Float128 __x, _Float128 *__iptr) throw (); extern _Float128 __modff128 (_Float128 __x, _Float128 *__iptr) throw () __attribute__ ((__nonnull__ (2)));
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 exp10f128 (_Float128 __x) throw (); extern _Float128 __exp10f128 (_Float128 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 expm1f128 (_Float128 __x) throw (); extern _Float128 __expm1f128 (_Float128 __x) throw ();
+16535: 
+16535: 
+16535: extern _Float128 log1pf128 (_Float128 __x) throw (); extern _Float128 __log1pf128 (_Float128 __x) throw ();
+16535: 
+16535: 
+16535: extern _Float128 logbf128 (_Float128 __x) throw (); extern _Float128 __logbf128 (_Float128 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 exp2f128 (_Float128 __x) throw (); extern _Float128 __exp2f128 (_Float128 __x) throw ();
+16535: 
+16535: 
+16535: extern _Float128 log2f128 (_Float128 __x) throw (); extern _Float128 __log2f128 (_Float128 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  extern _Float128 powf128 (_Float128 __x, _Float128 __y) throw (); extern _Float128 __powf128 (_Float128 __x, _Float128 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float128 sqrtf128 (_Float128 __x) throw (); extern _Float128 __sqrtf128 (_Float128 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 hypotf128 (_Float128 __x, _Float128 __y) throw (); extern _Float128 __hypotf128 (_Float128 __x, _Float128 __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 cbrtf128 (_Float128 __x) throw (); extern _Float128 __cbrtf128 (_Float128 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 ceilf128 (_Float128 __x) throw () __attribute__ ((__const__)); extern _Float128 __ceilf128 (_Float128 __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float128 fabsf128 (_Float128 __x) throw () __attribute__ ((__const__)); extern _Float128 __fabsf128 (_Float128 __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float128 floorf128 (_Float128 __x) throw () __attribute__ ((__const__)); extern _Float128 __floorf128 (_Float128 __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float128 fmodf128 (_Float128 __x, _Float128 __y) throw (); extern _Float128 __fmodf128 (_Float128 __x, _Float128 __y) throw ();
+16535: # 196 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern _Float128 copysignf128 (_Float128 __x, _Float128 __y) throw () __attribute__ ((__const__)); extern _Float128 __copysignf128 (_Float128 __x, _Float128 __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 nanf128 (const char *__tagb) throw (); extern _Float128 __nanf128 (const char *__tagb) throw ();
+16535: # 217 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern _Float128 j0f128 (_Float128) throw (); extern _Float128 __j0f128 (_Float128) throw ();
+16535: extern _Float128 j1f128 (_Float128) throw (); extern _Float128 __j1f128 (_Float128) throw ();
+16535: extern _Float128 jnf128 (int, _Float128) throw (); extern _Float128 __jnf128 (int, _Float128) throw ();
+16535: extern _Float128 y0f128 (_Float128) throw (); extern _Float128 __y0f128 (_Float128) throw ();
+16535: extern _Float128 y1f128 (_Float128) throw (); extern _Float128 __y1f128 (_Float128) throw ();
+16535: extern _Float128 ynf128 (int, _Float128) throw (); extern _Float128 __ynf128 (int, _Float128) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 erff128 (_Float128) throw (); extern _Float128 __erff128 (_Float128) throw ();
+16535: extern _Float128 erfcf128 (_Float128) throw (); extern _Float128 __erfcf128 (_Float128) throw ();
+16535: extern _Float128 lgammaf128 (_Float128) throw (); extern _Float128 __lgammaf128 (_Float128) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 tgammaf128 (_Float128) throw (); extern _Float128 __tgammaf128 (_Float128) throw ();
+16535: # 249 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern _Float128 lgammaf128_r (_Float128, int *__signgamp) throw (); extern _Float128 __lgammaf128_r (_Float128, int *__signgamp) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 rintf128 (_Float128 __x) throw (); extern _Float128 __rintf128 (_Float128 __x) throw ();
+16535: 
+16535: 
+16535: extern _Float128 nextafterf128 (_Float128 __x, _Float128 __y) throw (); extern _Float128 __nextafterf128 (_Float128 __x, _Float128 __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 nextdownf128 (_Float128 __x) throw (); extern _Float128 __nextdownf128 (_Float128 __x) throw ();
+16535: 
+16535: extern _Float128 nextupf128 (_Float128 __x) throw (); extern _Float128 __nextupf128 (_Float128 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 remainderf128 (_Float128 __x, _Float128 __y) throw (); extern _Float128 __remainderf128 (_Float128 __x, _Float128 __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 scalbnf128 (_Float128 __x, int __n) throw (); extern _Float128 __scalbnf128 (_Float128 __x, int __n) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int ilogbf128 (_Float128 __x) throw (); extern int __ilogbf128 (_Float128 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long int llogbf128 (_Float128 __x) throw (); extern long int __llogbf128 (_Float128 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 scalblnf128 (_Float128 __x, long int __n) throw (); extern _Float128 __scalblnf128 (_Float128 __x, long int __n) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 nearbyintf128 (_Float128 __x) throw (); extern _Float128 __nearbyintf128 (_Float128 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 roundf128 (_Float128 __x) throw () __attribute__ ((__const__)); extern _Float128 __roundf128 (_Float128 __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 truncf128 (_Float128 __x) throw () __attribute__ ((__const__)); extern _Float128 __truncf128 (_Float128 __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 remquof128 (_Float128 __x, _Float128 __y, int *__quo) throw (); extern _Float128 __remquof128 (_Float128 __x, _Float128 __y, int *__quo) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long int lrintf128 (_Float128 __x) throw (); extern long int __lrintf128 (_Float128 __x) throw ();
+16535: __extension__
+16535: extern long long int llrintf128 (_Float128 __x) throw (); extern long long int __llrintf128 (_Float128 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern long int lroundf128 (_Float128 __x) throw (); extern long int __lroundf128 (_Float128 __x) throw ();
+16535: __extension__
+16535: extern long long int llroundf128 (_Float128 __x) throw (); extern long long int __llroundf128 (_Float128 __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 fdimf128 (_Float128 __x, _Float128 __y) throw (); extern _Float128 __fdimf128 (_Float128 __x, _Float128 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float128 fmaxf128 (_Float128 __x, _Float128 __y) throw () __attribute__ ((__const__)); extern _Float128 __fmaxf128 (_Float128 __x, _Float128 __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float128 fminf128 (_Float128 __x, _Float128 __y) throw () __attribute__ ((__const__)); extern _Float128 __fminf128 (_Float128 __x, _Float128 __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float128 fmaf128 (_Float128 __x, _Float128 __y, _Float128 __z) throw (); extern _Float128 __fmaf128 (_Float128 __x, _Float128 __y, _Float128 __z) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float128 roundevenf128 (_Float128 __x) throw () __attribute__ ((__const__)); extern _Float128 __roundevenf128 (_Float128 __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: extern __intmax_t fromfpf128 (_Float128 __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpf128 (_Float128 __x, int __round, unsigned int __width) throw ()
+16535:                             ;
+16535: 
+16535: 
+16535: 
+16535: extern __uintmax_t ufromfpf128 (_Float128 __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpf128 (_Float128 __x, int __round, unsigned int __width) throw ()
+16535:                               ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __intmax_t fromfpxf128 (_Float128 __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpxf128 (_Float128 __x, int __round, unsigned int __width) throw ()
+16535:                              ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __uintmax_t ufromfpxf128 (_Float128 __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpxf128 (_Float128 __x, int __round, unsigned int __width) throw ()
+16535:                                ;
+16535: 
+16535: 
+16535: extern _Float128 fmaxmagf128 (_Float128 __x, _Float128 __y) throw () __attribute__ ((__const__)); extern _Float128 __fmaxmagf128 (_Float128 __x, _Float128 __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float128 fminmagf128 (_Float128 __x, _Float128 __y) throw () __attribute__ ((__const__)); extern _Float128 __fminmagf128 (_Float128 __x, _Float128 __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int totalorderf128 (_Float128 __x, _Float128 __y) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int totalordermagf128 (_Float128 __x, _Float128 __y) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int canonicalizef128 (_Float128 *__cx, const _Float128 *__x) throw ();
+16535: 
+16535: 
+16535: extern _Float128 getpayloadf128 (const _Float128 *__x) throw (); extern _Float128 __getpayloadf128 (const _Float128 *__x) throw ();
+16535: 
+16535: 
+16535: extern int setpayloadf128 (_Float128 *__x, _Float128 __payload) throw ();
+16535: 
+16535: 
+16535: extern int setpayloadsigf128 (_Float128 *__x, _Float128 __payload) throw ();
+16535: # 424 "/usr/include/math.h" 2 3 4
+16535: # 440 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 1 3 4
+16535: # 53 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern _Float32x acosf32x (_Float32x __x) throw (); extern _Float32x __acosf32x (_Float32x __x) throw ();
+16535: 
+16535: extern _Float32x asinf32x (_Float32x __x) throw (); extern _Float32x __asinf32x (_Float32x __x) throw ();
+16535: 
+16535: extern _Float32x atanf32x (_Float32x __x) throw (); extern _Float32x __atanf32x (_Float32x __x) throw ();
+16535: 
+16535: extern _Float32x atan2f32x (_Float32x __y, _Float32x __x) throw (); extern _Float32x __atan2f32x (_Float32x __y, _Float32x __x) throw ();
+16535: 
+16535: 
+16535:  extern _Float32x cosf32x (_Float32x __x) throw (); extern _Float32x __cosf32x (_Float32x __x) throw ();
+16535: 
+16535:  extern _Float32x sinf32x (_Float32x __x) throw (); extern _Float32x __sinf32x (_Float32x __x) throw ();
+16535: 
+16535: extern _Float32x tanf32x (_Float32x __x) throw (); extern _Float32x __tanf32x (_Float32x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x coshf32x (_Float32x __x) throw (); extern _Float32x __coshf32x (_Float32x __x) throw ();
+16535: 
+16535: extern _Float32x sinhf32x (_Float32x __x) throw (); extern _Float32x __sinhf32x (_Float32x __x) throw ();
+16535: 
+16535: extern _Float32x tanhf32x (_Float32x __x) throw (); extern _Float32x __tanhf32x (_Float32x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535:  extern void sincosf32x (_Float32x __x, _Float32x *__sinx, _Float32x *__cosx) throw (); extern void __sincosf32x (_Float32x __x, _Float32x *__sinx, _Float32x *__cosx) throw ()
+16535:                                                         ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x acoshf32x (_Float32x __x) throw (); extern _Float32x __acoshf32x (_Float32x __x) throw ();
+16535: 
+16535: extern _Float32x asinhf32x (_Float32x __x) throw (); extern _Float32x __asinhf32x (_Float32x __x) throw ();
+16535: 
+16535: extern _Float32x atanhf32x (_Float32x __x) throw (); extern _Float32x __atanhf32x (_Float32x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  extern _Float32x expf32x (_Float32x __x) throw (); extern _Float32x __expf32x (_Float32x __x) throw ();
+16535: 
+16535: 
+16535: extern _Float32x frexpf32x (_Float32x __x, int *__exponent) throw (); extern _Float32x __frexpf32x (_Float32x __x, int *__exponent) throw ();
+16535: 
+16535: 
+16535: extern _Float32x ldexpf32x (_Float32x __x, int __exponent) throw (); extern _Float32x __ldexpf32x (_Float32x __x, int __exponent) throw ();
+16535: 
+16535: 
+16535:  extern _Float32x logf32x (_Float32x __x) throw (); extern _Float32x __logf32x (_Float32x __x) throw ();
+16535: 
+16535: 
+16535: extern _Float32x log10f32x (_Float32x __x) throw (); extern _Float32x __log10f32x (_Float32x __x) throw ();
+16535: 
+16535: 
+16535: extern _Float32x modff32x (_Float32x __x, _Float32x *__iptr) throw (); extern _Float32x __modff32x (_Float32x __x, _Float32x *__iptr) throw () __attribute__ ((__nonnull__ (2)));
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x exp10f32x (_Float32x __x) throw (); extern _Float32x __exp10f32x (_Float32x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x expm1f32x (_Float32x __x) throw (); extern _Float32x __expm1f32x (_Float32x __x) throw ();
+16535: 
+16535: 
+16535: extern _Float32x log1pf32x (_Float32x __x) throw (); extern _Float32x __log1pf32x (_Float32x __x) throw ();
+16535: 
+16535: 
+16535: extern _Float32x logbf32x (_Float32x __x) throw (); extern _Float32x __logbf32x (_Float32x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x exp2f32x (_Float32x __x) throw (); extern _Float32x __exp2f32x (_Float32x __x) throw ();
+16535: 
+16535: 
+16535: extern _Float32x log2f32x (_Float32x __x) throw (); extern _Float32x __log2f32x (_Float32x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  extern _Float32x powf32x (_Float32x __x, _Float32x __y) throw (); extern _Float32x __powf32x (_Float32x __x, _Float32x __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32x sqrtf32x (_Float32x __x) throw (); extern _Float32x __sqrtf32x (_Float32x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x hypotf32x (_Float32x __x, _Float32x __y) throw (); extern _Float32x __hypotf32x (_Float32x __x, _Float32x __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x cbrtf32x (_Float32x __x) throw (); extern _Float32x __cbrtf32x (_Float32x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x ceilf32x (_Float32x __x) throw () __attribute__ ((__const__)); extern _Float32x __ceilf32x (_Float32x __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float32x fabsf32x (_Float32x __x) throw () __attribute__ ((__const__)); extern _Float32x __fabsf32x (_Float32x __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float32x floorf32x (_Float32x __x) throw () __attribute__ ((__const__)); extern _Float32x __floorf32x (_Float32x __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float32x fmodf32x (_Float32x __x, _Float32x __y) throw (); extern _Float32x __fmodf32x (_Float32x __x, _Float32x __y) throw ();
+16535: # 196 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern _Float32x copysignf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__)); extern _Float32x __copysignf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x nanf32x (const char *__tagb) throw (); extern _Float32x __nanf32x (const char *__tagb) throw ();
+16535: # 217 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern _Float32x j0f32x (_Float32x) throw (); extern _Float32x __j0f32x (_Float32x) throw ();
+16535: extern _Float32x j1f32x (_Float32x) throw (); extern _Float32x __j1f32x (_Float32x) throw ();
+16535: extern _Float32x jnf32x (int, _Float32x) throw (); extern _Float32x __jnf32x (int, _Float32x) throw ();
+16535: extern _Float32x y0f32x (_Float32x) throw (); extern _Float32x __y0f32x (_Float32x) throw ();
+16535: extern _Float32x y1f32x (_Float32x) throw (); extern _Float32x __y1f32x (_Float32x) throw ();
+16535: extern _Float32x ynf32x (int, _Float32x) throw (); extern _Float32x __ynf32x (int, _Float32x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x erff32x (_Float32x) throw (); extern _Float32x __erff32x (_Float32x) throw ();
+16535: extern _Float32x erfcf32x (_Float32x) throw (); extern _Float32x __erfcf32x (_Float32x) throw ();
+16535: extern _Float32x lgammaf32x (_Float32x) throw (); extern _Float32x __lgammaf32x (_Float32x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x tgammaf32x (_Float32x) throw (); extern _Float32x __tgammaf32x (_Float32x) throw ();
+16535: # 249 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern _Float32x lgammaf32x_r (_Float32x, int *__signgamp) throw (); extern _Float32x __lgammaf32x_r (_Float32x, int *__signgamp) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x rintf32x (_Float32x __x) throw (); extern _Float32x __rintf32x (_Float32x __x) throw ();
+16535: 
+16535: 
+16535: extern _Float32x nextafterf32x (_Float32x __x, _Float32x __y) throw (); extern _Float32x __nextafterf32x (_Float32x __x, _Float32x __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x nextdownf32x (_Float32x __x) throw (); extern _Float32x __nextdownf32x (_Float32x __x) throw ();
+16535: 
+16535: extern _Float32x nextupf32x (_Float32x __x) throw (); extern _Float32x __nextupf32x (_Float32x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x remainderf32x (_Float32x __x, _Float32x __y) throw (); extern _Float32x __remainderf32x (_Float32x __x, _Float32x __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x scalbnf32x (_Float32x __x, int __n) throw (); extern _Float32x __scalbnf32x (_Float32x __x, int __n) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int ilogbf32x (_Float32x __x) throw (); extern int __ilogbf32x (_Float32x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long int llogbf32x (_Float32x __x) throw (); extern long int __llogbf32x (_Float32x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x scalblnf32x (_Float32x __x, long int __n) throw (); extern _Float32x __scalblnf32x (_Float32x __x, long int __n) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x nearbyintf32x (_Float32x __x) throw (); extern _Float32x __nearbyintf32x (_Float32x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x roundf32x (_Float32x __x) throw () __attribute__ ((__const__)); extern _Float32x __roundf32x (_Float32x __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x truncf32x (_Float32x __x) throw () __attribute__ ((__const__)); extern _Float32x __truncf32x (_Float32x __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x remquof32x (_Float32x __x, _Float32x __y, int *__quo) throw (); extern _Float32x __remquof32x (_Float32x __x, _Float32x __y, int *__quo) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long int lrintf32x (_Float32x __x) throw (); extern long int __lrintf32x (_Float32x __x) throw ();
+16535: __extension__
+16535: extern long long int llrintf32x (_Float32x __x) throw (); extern long long int __llrintf32x (_Float32x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern long int lroundf32x (_Float32x __x) throw (); extern long int __lroundf32x (_Float32x __x) throw ();
+16535: __extension__
+16535: extern long long int llroundf32x (_Float32x __x) throw (); extern long long int __llroundf32x (_Float32x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x fdimf32x (_Float32x __x, _Float32x __y) throw (); extern _Float32x __fdimf32x (_Float32x __x, _Float32x __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32x fmaxf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__)); extern _Float32x __fmaxf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float32x fminf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__)); extern _Float32x __fminf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float32x fmaf32x (_Float32x __x, _Float32x __y, _Float32x __z) throw (); extern _Float32x __fmaf32x (_Float32x __x, _Float32x __y, _Float32x __z) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float32x roundevenf32x (_Float32x __x) throw () __attribute__ ((__const__)); extern _Float32x __roundevenf32x (_Float32x __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: extern __intmax_t fromfpf32x (_Float32x __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpf32x (_Float32x __x, int __round, unsigned int __width) throw ()
+16535:                             ;
+16535: 
+16535: 
+16535: 
+16535: extern __uintmax_t ufromfpf32x (_Float32x __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpf32x (_Float32x __x, int __round, unsigned int __width) throw ()
+16535:                               ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __intmax_t fromfpxf32x (_Float32x __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpxf32x (_Float32x __x, int __round, unsigned int __width) throw ()
+16535:                              ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __uintmax_t ufromfpxf32x (_Float32x __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpxf32x (_Float32x __x, int __round, unsigned int __width) throw ()
+16535:                                ;
+16535: 
+16535: 
+16535: extern _Float32x fmaxmagf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__)); extern _Float32x __fmaxmagf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float32x fminmagf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__)); extern _Float32x __fminmagf32x (_Float32x __x, _Float32x __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int totalorderf32x (_Float32x __x, _Float32x __y) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int totalordermagf32x (_Float32x __x, _Float32x __y) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int canonicalizef32x (_Float32x *__cx, const _Float32x *__x) throw ();
+16535: 
+16535: 
+16535: extern _Float32x getpayloadf32x (const _Float32x *__x) throw (); extern _Float32x __getpayloadf32x (const _Float32x *__x) throw ();
+16535: 
+16535: 
+16535: extern int setpayloadf32x (_Float32x *__x, _Float32x __payload) throw ();
+16535: 
+16535: 
+16535: extern int setpayloadsigf32x (_Float32x *__x, _Float32x __payload) throw ();
+16535: # 441 "/usr/include/math.h" 2 3 4
+16535: # 457 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 1 3 4
+16535: # 53 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern _Float64x acosf64x (_Float64x __x) throw (); extern _Float64x __acosf64x (_Float64x __x) throw ();
+16535: 
+16535: extern _Float64x asinf64x (_Float64x __x) throw (); extern _Float64x __asinf64x (_Float64x __x) throw ();
+16535: 
+16535: extern _Float64x atanf64x (_Float64x __x) throw (); extern _Float64x __atanf64x (_Float64x __x) throw ();
+16535: 
+16535: extern _Float64x atan2f64x (_Float64x __y, _Float64x __x) throw (); extern _Float64x __atan2f64x (_Float64x __y, _Float64x __x) throw ();
+16535: 
+16535: 
+16535:  extern _Float64x cosf64x (_Float64x __x) throw (); extern _Float64x __cosf64x (_Float64x __x) throw ();
+16535: 
+16535:  extern _Float64x sinf64x (_Float64x __x) throw (); extern _Float64x __sinf64x (_Float64x __x) throw ();
+16535: 
+16535: extern _Float64x tanf64x (_Float64x __x) throw (); extern _Float64x __tanf64x (_Float64x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x coshf64x (_Float64x __x) throw (); extern _Float64x __coshf64x (_Float64x __x) throw ();
+16535: 
+16535: extern _Float64x sinhf64x (_Float64x __x) throw (); extern _Float64x __sinhf64x (_Float64x __x) throw ();
+16535: 
+16535: extern _Float64x tanhf64x (_Float64x __x) throw (); extern _Float64x __tanhf64x (_Float64x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535:  extern void sincosf64x (_Float64x __x, _Float64x *__sinx, _Float64x *__cosx) throw (); extern void __sincosf64x (_Float64x __x, _Float64x *__sinx, _Float64x *__cosx) throw ()
+16535:                                                         ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x acoshf64x (_Float64x __x) throw (); extern _Float64x __acoshf64x (_Float64x __x) throw ();
+16535: 
+16535: extern _Float64x asinhf64x (_Float64x __x) throw (); extern _Float64x __asinhf64x (_Float64x __x) throw ();
+16535: 
+16535: extern _Float64x atanhf64x (_Float64x __x) throw (); extern _Float64x __atanhf64x (_Float64x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  extern _Float64x expf64x (_Float64x __x) throw (); extern _Float64x __expf64x (_Float64x __x) throw ();
+16535: 
+16535: 
+16535: extern _Float64x frexpf64x (_Float64x __x, int *__exponent) throw (); extern _Float64x __frexpf64x (_Float64x __x, int *__exponent) throw ();
+16535: 
+16535: 
+16535: extern _Float64x ldexpf64x (_Float64x __x, int __exponent) throw (); extern _Float64x __ldexpf64x (_Float64x __x, int __exponent) throw ();
+16535: 
+16535: 
+16535:  extern _Float64x logf64x (_Float64x __x) throw (); extern _Float64x __logf64x (_Float64x __x) throw ();
+16535: 
+16535: 
+16535: extern _Float64x log10f64x (_Float64x __x) throw (); extern _Float64x __log10f64x (_Float64x __x) throw ();
+16535: 
+16535: 
+16535: extern _Float64x modff64x (_Float64x __x, _Float64x *__iptr) throw (); extern _Float64x __modff64x (_Float64x __x, _Float64x *__iptr) throw () __attribute__ ((__nonnull__ (2)));
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x exp10f64x (_Float64x __x) throw (); extern _Float64x __exp10f64x (_Float64x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x expm1f64x (_Float64x __x) throw (); extern _Float64x __expm1f64x (_Float64x __x) throw ();
+16535: 
+16535: 
+16535: extern _Float64x log1pf64x (_Float64x __x) throw (); extern _Float64x __log1pf64x (_Float64x __x) throw ();
+16535: 
+16535: 
+16535: extern _Float64x logbf64x (_Float64x __x) throw (); extern _Float64x __logbf64x (_Float64x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x exp2f64x (_Float64x __x) throw (); extern _Float64x __exp2f64x (_Float64x __x) throw ();
+16535: 
+16535: 
+16535: extern _Float64x log2f64x (_Float64x __x) throw (); extern _Float64x __log2f64x (_Float64x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  extern _Float64x powf64x (_Float64x __x, _Float64x __y) throw (); extern _Float64x __powf64x (_Float64x __x, _Float64x __y) throw ();
+16535: 
+16535: 
+16535: extern _Float64x sqrtf64x (_Float64x __x) throw (); extern _Float64x __sqrtf64x (_Float64x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x hypotf64x (_Float64x __x, _Float64x __y) throw (); extern _Float64x __hypotf64x (_Float64x __x, _Float64x __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x cbrtf64x (_Float64x __x) throw (); extern _Float64x __cbrtf64x (_Float64x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x ceilf64x (_Float64x __x) throw () __attribute__ ((__const__)); extern _Float64x __ceilf64x (_Float64x __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float64x fabsf64x (_Float64x __x) throw () __attribute__ ((__const__)); extern _Float64x __fabsf64x (_Float64x __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float64x floorf64x (_Float64x __x) throw () __attribute__ ((__const__)); extern _Float64x __floorf64x (_Float64x __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float64x fmodf64x (_Float64x __x, _Float64x __y) throw (); extern _Float64x __fmodf64x (_Float64x __x, _Float64x __y) throw ();
+16535: # 196 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern _Float64x copysignf64x (_Float64x __x, _Float64x __y) throw () __attribute__ ((__const__)); extern _Float64x __copysignf64x (_Float64x __x, _Float64x __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x nanf64x (const char *__tagb) throw (); extern _Float64x __nanf64x (const char *__tagb) throw ();
+16535: # 217 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern _Float64x j0f64x (_Float64x) throw (); extern _Float64x __j0f64x (_Float64x) throw ();
+16535: extern _Float64x j1f64x (_Float64x) throw (); extern _Float64x __j1f64x (_Float64x) throw ();
+16535: extern _Float64x jnf64x (int, _Float64x) throw (); extern _Float64x __jnf64x (int, _Float64x) throw ();
+16535: extern _Float64x y0f64x (_Float64x) throw (); extern _Float64x __y0f64x (_Float64x) throw ();
+16535: extern _Float64x y1f64x (_Float64x) throw (); extern _Float64x __y1f64x (_Float64x) throw ();
+16535: extern _Float64x ynf64x (int, _Float64x) throw (); extern _Float64x __ynf64x (int, _Float64x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x erff64x (_Float64x) throw (); extern _Float64x __erff64x (_Float64x) throw ();
+16535: extern _Float64x erfcf64x (_Float64x) throw (); extern _Float64x __erfcf64x (_Float64x) throw ();
+16535: extern _Float64x lgammaf64x (_Float64x) throw (); extern _Float64x __lgammaf64x (_Float64x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x tgammaf64x (_Float64x) throw (); extern _Float64x __tgammaf64x (_Float64x) throw ();
+16535: # 249 "/usr/include/x86_64-linux-gnu/bits/mathcalls.h" 3 4
+16535: extern _Float64x lgammaf64x_r (_Float64x, int *__signgamp) throw (); extern _Float64x __lgammaf64x_r (_Float64x, int *__signgamp) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x rintf64x (_Float64x __x) throw (); extern _Float64x __rintf64x (_Float64x __x) throw ();
+16535: 
+16535: 
+16535: extern _Float64x nextafterf64x (_Float64x __x, _Float64x __y) throw (); extern _Float64x __nextafterf64x (_Float64x __x, _Float64x __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x nextdownf64x (_Float64x __x) throw (); extern _Float64x __nextdownf64x (_Float64x __x) throw ();
+16535: 
+16535: extern _Float64x nextupf64x (_Float64x __x) throw (); extern _Float64x __nextupf64x (_Float64x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x remainderf64x (_Float64x __x, _Float64x __y) throw (); extern _Float64x __remainderf64x (_Float64x __x, _Float64x __y) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x scalbnf64x (_Float64x __x, int __n) throw (); extern _Float64x __scalbnf64x (_Float64x __x, int __n) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int ilogbf64x (_Float64x __x) throw (); extern int __ilogbf64x (_Float64x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long int llogbf64x (_Float64x __x) throw (); extern long int __llogbf64x (_Float64x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x scalblnf64x (_Float64x __x, long int __n) throw (); extern _Float64x __scalblnf64x (_Float64x __x, long int __n) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x nearbyintf64x (_Float64x __x) throw (); extern _Float64x __nearbyintf64x (_Float64x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x roundf64x (_Float64x __x) throw () __attribute__ ((__const__)); extern _Float64x __roundf64x (_Float64x __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x truncf64x (_Float64x __x) throw () __attribute__ ((__const__)); extern _Float64x __truncf64x (_Float64x __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x remquof64x (_Float64x __x, _Float64x __y, int *__quo) throw (); extern _Float64x __remquof64x (_Float64x __x, _Float64x __y, int *__quo) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern long int lrintf64x (_Float64x __x) throw (); extern long int __lrintf64x (_Float64x __x) throw ();
+16535: __extension__
+16535: extern long long int llrintf64x (_Float64x __x) throw (); extern long long int __llrintf64x (_Float64x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern long int lroundf64x (_Float64x __x) throw (); extern long int __lroundf64x (_Float64x __x) throw ();
+16535: __extension__
+16535: extern long long int llroundf64x (_Float64x __x) throw (); extern long long int __llroundf64x (_Float64x __x) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x fdimf64x (_Float64x __x, _Float64x __y) throw (); extern _Float64x __fdimf64x (_Float64x __x, _Float64x __y) throw ();
+16535: 
+16535: 
+16535: extern _Float64x fmaxf64x (_Float64x __x, _Float64x __y) throw () __attribute__ ((__const__)); extern _Float64x __fmaxf64x (_Float64x __x, _Float64x __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float64x fminf64x (_Float64x __x, _Float64x __y) throw () __attribute__ ((__const__)); extern _Float64x __fminf64x (_Float64x __x, _Float64x __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float64x fmaf64x (_Float64x __x, _Float64x __y, _Float64x __z) throw (); extern _Float64x __fmaf64x (_Float64x __x, _Float64x __y, _Float64x __z) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern _Float64x roundevenf64x (_Float64x __x) throw () __attribute__ ((__const__)); extern _Float64x __roundevenf64x (_Float64x __x) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: 
+16535: extern __intmax_t fromfpf64x (_Float64x __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpf64x (_Float64x __x, int __round, unsigned int __width) throw ()
+16535:                             ;
+16535: 
+16535: 
+16535: 
+16535: extern __uintmax_t ufromfpf64x (_Float64x __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpf64x (_Float64x __x, int __round, unsigned int __width) throw ()
+16535:                               ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __intmax_t fromfpxf64x (_Float64x __x, int __round, unsigned int __width) throw (); extern __intmax_t __fromfpxf64x (_Float64x __x, int __round, unsigned int __width) throw ()
+16535:                              ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern __uintmax_t ufromfpxf64x (_Float64x __x, int __round, unsigned int __width) throw (); extern __uintmax_t __ufromfpxf64x (_Float64x __x, int __round, unsigned int __width) throw ()
+16535:                                ;
+16535: 
+16535: 
+16535: extern _Float64x fmaxmagf64x (_Float64x __x, _Float64x __y) throw () __attribute__ ((__const__)); extern _Float64x __fmaxmagf64x (_Float64x __x, _Float64x __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern _Float64x fminmagf64x (_Float64x __x, _Float64x __y) throw () __attribute__ ((__const__)); extern _Float64x __fminmagf64x (_Float64x __x, _Float64x __y) throw () __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int totalorderf64x (_Float64x __x, _Float64x __y) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int totalordermagf64x (_Float64x __x, _Float64x __y) throw ()
+16535:      __attribute__ ((__const__));
+16535: 
+16535: 
+16535: extern int canonicalizef64x (_Float64x *__cx, const _Float64x *__x) throw ();
+16535: 
+16535: 
+16535: extern _Float64x getpayloadf64x (const _Float64x *__x) throw (); extern _Float64x __getpayloadf64x (const _Float64x *__x) throw ();
+16535: 
+16535: 
+16535: extern int setpayloadf64x (_Float64x *__x, _Float64x __payload) throw ();
+16535: 
+16535: 
+16535: extern int setpayloadsigf64x (_Float64x *__x, _Float64x __payload) throw ();
+16535: # 458 "/usr/include/math.h" 2 3 4
+16535: # 503 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
+16535: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
+16535: extern float fadd (double __x, double __y) throw ();
+16535: 
+16535: 
+16535: extern float fdiv (double __x, double __y) throw ();
+16535: 
+16535: 
+16535: extern float fmul (double __x, double __y) throw ();
+16535: 
+16535: 
+16535: extern float fsub (double __x, double __y) throw ();
+16535: # 504 "/usr/include/math.h" 2 3 4
+16535: # 517 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
+16535: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
+16535: extern float faddl (long double __x, long double __y) throw ();
+16535: 
+16535: 
+16535: extern float fdivl (long double __x, long double __y) throw ();
+16535: 
+16535: 
+16535: extern float fmull (long double __x, long double __y) throw ();
+16535: 
+16535: 
+16535: extern float fsubl (long double __x, long double __y) throw ();
+16535: # 518 "/usr/include/math.h" 2 3 4
+16535: # 537 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
+16535: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
+16535: extern double daddl (long double __x, long double __y) throw ();
+16535: 
+16535: 
+16535: extern double ddivl (long double __x, long double __y) throw ();
+16535: 
+16535: 
+16535: extern double dmull (long double __x, long double __y) throw ();
+16535: 
+16535: 
+16535: extern double dsubl (long double __x, long double __y) throw ();
+16535: # 538 "/usr/include/math.h" 2 3 4
+16535: # 616 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
+16535: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
+16535: extern _Float32 f32addf32x (_Float32x __x, _Float32x __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32 f32divf32x (_Float32x __x, _Float32x __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32 f32mulf32x (_Float32x __x, _Float32x __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32 f32subf32x (_Float32x __x, _Float32x __y) throw ();
+16535: # 617 "/usr/include/math.h" 2 3 4
+16535: # 626 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
+16535: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
+16535: extern _Float32 f32addf64 (_Float64 __x, _Float64 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32 f32divf64 (_Float64 __x, _Float64 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32 f32mulf64 (_Float64 __x, _Float64 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32 f32subf64 (_Float64 __x, _Float64 __y) throw ();
+16535: # 627 "/usr/include/math.h" 2 3 4
+16535: # 636 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
+16535: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
+16535: extern _Float32 f32addf64x (_Float64x __x, _Float64x __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32 f32divf64x (_Float64x __x, _Float64x __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32 f32mulf64x (_Float64x __x, _Float64x __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32 f32subf64x (_Float64x __x, _Float64x __y) throw ();
+16535: # 637 "/usr/include/math.h" 2 3 4
+16535: # 646 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
+16535: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
+16535: extern _Float32 f32addf128 (_Float128 __x, _Float128 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32 f32divf128 (_Float128 __x, _Float128 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32 f32mulf128 (_Float128 __x, _Float128 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32 f32subf128 (_Float128 __x, _Float128 __y) throw ();
+16535: # 647 "/usr/include/math.h" 2 3 4
+16535: # 666 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
+16535: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
+16535: extern _Float32x f32xaddf64 (_Float64 __x, _Float64 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32x f32xdivf64 (_Float64 __x, _Float64 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32x f32xmulf64 (_Float64 __x, _Float64 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32x f32xsubf64 (_Float64 __x, _Float64 __y) throw ();
+16535: # 667 "/usr/include/math.h" 2 3 4
+16535: # 676 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
+16535: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
+16535: extern _Float32x f32xaddf64x (_Float64x __x, _Float64x __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32x f32xdivf64x (_Float64x __x, _Float64x __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32x f32xmulf64x (_Float64x __x, _Float64x __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32x f32xsubf64x (_Float64x __x, _Float64x __y) throw ();
+16535: # 677 "/usr/include/math.h" 2 3 4
+16535: # 686 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
+16535: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
+16535: extern _Float32x f32xaddf128 (_Float128 __x, _Float128 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32x f32xdivf128 (_Float128 __x, _Float128 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32x f32xmulf128 (_Float128 __x, _Float128 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float32x f32xsubf128 (_Float128 __x, _Float128 __y) throw ();
+16535: # 687 "/usr/include/math.h" 2 3 4
+16535: # 706 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
+16535: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
+16535: extern _Float64 f64addf64x (_Float64x __x, _Float64x __y) throw ();
+16535: 
+16535: 
+16535: extern _Float64 f64divf64x (_Float64x __x, _Float64x __y) throw ();
+16535: 
+16535: 
+16535: extern _Float64 f64mulf64x (_Float64x __x, _Float64x __y) throw ();
+16535: 
+16535: 
+16535: extern _Float64 f64subf64x (_Float64x __x, _Float64x __y) throw ();
+16535: # 707 "/usr/include/math.h" 2 3 4
+16535: # 716 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
+16535: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
+16535: extern _Float64 f64addf128 (_Float128 __x, _Float128 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float64 f64divf128 (_Float128 __x, _Float128 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float64 f64mulf128 (_Float128 __x, _Float128 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float64 f64subf128 (_Float128 __x, _Float128 __y) throw ();
+16535: # 717 "/usr/include/math.h" 2 3 4
+16535: # 736 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 1 3 4
+16535: # 24 "/usr/include/x86_64-linux-gnu/bits/mathcalls-narrow.h" 3 4
+16535: extern _Float64x f64xaddf128 (_Float128 __x, _Float128 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float64x f64xdivf128 (_Float128 __x, _Float128 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float64x f64xmulf128 (_Float128 __x, _Float128 __y) throw ();
+16535: 
+16535: 
+16535: extern _Float64x f64xsubf128 (_Float128 __x, _Float128 __y) throw ();
+16535: # 737 "/usr/include/math.h" 2 3 4
+16535: # 773 "/usr/include/math.h" 3 4
+16535: extern int signgam;
+16535: # 853 "/usr/include/math.h" 3 4
+16535: enum
+16535:   {
+16535:     FP_NAN =
+16535: 
+16535:       0,
+16535:     FP_INFINITE =
+16535: 
+16535:       1,
+16535:     FP_ZERO =
+16535: 
+16535:       2,
+16535:     FP_SUBNORMAL =
+16535: 
+16535:       3,
+16535:     FP_NORMAL =
+16535: 
+16535:       4
+16535:   };
+16535: # 968 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/iscanonical.h" 1 3 4
+16535: # 23 "/usr/include/x86_64-linux-gnu/bits/iscanonical.h" 3 4
+16535: extern int __iscanonicall (long double __x)
+16535:      throw () __attribute__ ((__const__));
+16535: # 46 "/usr/include/x86_64-linux-gnu/bits/iscanonical.h" 3 4
+16535: extern "C++" {
+16535: inline int iscanonical (float __val) { return ((void) (__typeof (__val)) (__val), 1); }
+16535: inline int iscanonical (double __val) { return ((void) (__typeof (__val)) (__val), 1); }
+16535: inline int iscanonical (long double __val) { return __iscanonicall (__val); }
+16535: 
+16535: inline int iscanonical (_Float128 __val) { return ((void) (__typeof (__val)) (__val), 1); }
+16535: 
+16535: }
+16535: # 969 "/usr/include/math.h" 2 3 4
+16535: # 980 "/usr/include/math.h" 3 4
+16535: extern "C++" {
+16535: inline int issignaling (float __val) { return __issignalingf (__val); }
+16535: inline int issignaling (double __val) { return __issignaling (__val); }
+16535: inline int
+16535: issignaling (long double __val)
+16535: {
+16535: 
+16535: 
+16535: 
+16535:   return __issignalingl (__val);
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: inline int issignaling (_Float128 __val) { return __issignalingf128 (__val); }
+16535: 
+16535: }
+16535: # 1011 "/usr/include/math.h" 3 4
+16535: extern "C++" {
+16535: # 1042 "/usr/include/math.h" 3 4
+16535: template <class __T> inline bool
+16535: iszero (__T __val)
+16535: {
+16535:   return __val == 0;
+16535: }
+16535: 
+16535: }
+16535: # 1240 "/usr/include/math.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/mathinline.h" 1 3 4
+16535: # 1241 "/usr/include/math.h" 2 3 4
+16535: # 1493 "/usr/include/math.h" 3 4
+16535: extern "C++" {
+16535: template<typename> struct __iseqsig_type;
+16535: 
+16535: template<> struct __iseqsig_type<float>
+16535: {
+16535:   static int __call (float __x, float __y) throw ()
+16535:   {
+16535:     return __iseqsigf (__x, __y);
+16535:   }
+16535: };
+16535: 
+16535: template<> struct __iseqsig_type<double>
+16535: {
+16535:   static int __call (double __x, double __y) throw ()
+16535:   {
+16535:     return __iseqsig (__x, __y);
+16535:   }
+16535: };
+16535: 
+16535: template<> struct __iseqsig_type<long double>
+16535: {
+16535:   static int __call (long double __x, long double __y) throw ()
+16535:   {
+16535: 
+16535:     return __iseqsigl (__x, __y);
+16535: 
+16535: 
+16535: 
+16535:   }
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template<> struct __iseqsig_type<_Float128>
+16535: {
+16535:   static int __call (_Float128 __x, _Float128 __y) throw ()
+16535:   {
+16535:     return __iseqsigf128 (__x, __y);
+16535:   }
+16535: };
+16535: 
+16535: 
+16535: template<typename _T1, typename _T2>
+16535: inline int
+16535: iseqsig (_T1 __x, _T2 __y) throw ()
+16535: {
+16535: 
+16535:   typedef decltype (((__x) + (__y) + 0.0f)) _T3;
+16535: 
+16535: 
+16535: 
+16535:   return __iseqsig_type<_T3>::__call (__x, __y);
+16535: }
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 46 "/usr/include/c++/8/cmath" 2 3
+16535: # 77 "/usr/include/c++/8/cmath" 3
+16535: extern "C++"
+16535: {
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   using ::acos;
+16535: 
+16535: 
+16535:   inline constexpr float
+16535:   acos(float __x)
+16535:   { return __builtin_acosf(__x); }
+16535: 
+16535:   inline constexpr long double
+16535:   acos(long double __x)
+16535:   { return __builtin_acosl(__x); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline constexpr
+16535:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                     double>::__type
+16535:     acos(_Tp __x)
+16535:     { return __builtin_acos(__x); }
+16535: 
+16535:   using ::asin;
+16535: 
+16535: 
+16535:   inline constexpr float
+16535:   asin(float __x)
+16535:   { return __builtin_asinf(__x); }
+16535: 
+16535:   inline constexpr long double
+16535:   asin(long double __x)
+16535:   { return __builtin_asinl(__x); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline constexpr
+16535:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                     double>::__type
+16535:     asin(_Tp __x)
+16535:     { return __builtin_asin(__x); }
+16535: 
+16535:   using ::atan;
+16535: 
+16535: 
+16535:   inline constexpr float
+16535:   atan(float __x)
+16535:   { return __builtin_atanf(__x); }
+16535: 
+16535:   inline constexpr long double
+16535:   atan(long double __x)
+16535:   { return __builtin_atanl(__x); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline constexpr
+16535:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                     double>::__type
+16535:     atan(_Tp __x)
+16535:     { return __builtin_atan(__x); }
+16535: 
+16535:   using ::atan2;
+16535: 
+16535: 
+16535:   inline constexpr float
+16535:   atan2(float __y, float __x)
+16535:   { return __builtin_atan2f(__y, __x); }
+16535: 
+16535:   inline constexpr long double
+16535:   atan2(long double __y, long double __x)
+16535:   { return __builtin_atan2l(__y, __x); }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     inline constexpr
+16535:     typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+16535:     atan2(_Tp __y, _Up __x)
+16535:     {
+16535:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+16535:       return atan2(__type(__y), __type(__x));
+16535:     }
+16535: 
+16535:   using ::ceil;
+16535: 
+16535: 
+16535:   inline constexpr float
+16535:   ceil(float __x)
+16535:   { return __builtin_ceilf(__x); }
+16535: 
+16535:   inline constexpr long double
+16535:   ceil(long double __x)
+16535:   { return __builtin_ceill(__x); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline constexpr
+16535:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                     double>::__type
+16535:     ceil(_Tp __x)
+16535:     { return __builtin_ceil(__x); }
+16535: 
+16535:   using ::cos;
+16535: 
+16535: 
+16535:   inline constexpr float
+16535:   cos(float __x)
+16535:   { return __builtin_cosf(__x); }
+16535: 
+16535:   inline constexpr long double
+16535:   cos(long double __x)
+16535:   { return __builtin_cosl(__x); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline constexpr
+16535:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                     double>::__type
+16535:     cos(_Tp __x)
+16535:     { return __builtin_cos(__x); }
+16535: 
+16535:   using ::cosh;
+16535: 
+16535: 
+16535:   inline constexpr float
+16535:   cosh(float __x)
+16535:   { return __builtin_coshf(__x); }
+16535: 
+16535:   inline constexpr long double
+16535:   cosh(long double __x)
+16535:   { return __builtin_coshl(__x); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline constexpr
+16535:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                     double>::__type
+16535:     cosh(_Tp __x)
+16535:     { return __builtin_cosh(__x); }
+16535: 
+16535:   using ::exp;
+16535: 
+16535: 
+16535:   inline constexpr float
+16535:   exp(float __x)
+16535:   { return __builtin_expf(__x); }
+16535: 
+16535:   inline constexpr long double
+16535:   exp(long double __x)
+16535:   { return __builtin_expl(__x); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline constexpr
+16535:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                     double>::__type
+16535:     exp(_Tp __x)
+16535:     { return __builtin_exp(__x); }
+16535: 
+16535:   using ::fabs;
+16535: 
+16535: 
+16535:   inline constexpr float
+16535:   fabs(float __x)
+16535:   { return __builtin_fabsf(__x); }
+16535: 
+16535:   inline constexpr long double
+16535:   fabs(long double __x)
+16535:   { return __builtin_fabsl(__x); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline constexpr
+16535:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                     double>::__type
+16535:     fabs(_Tp __x)
+16535:     { return __builtin_fabs(__x); }
+16535: 
+16535:   using ::floor;
+16535: 
+16535: 
+16535:   inline constexpr float
+16535:   floor(float __x)
+16535:   { return __builtin_floorf(__x); }
+16535: 
+16535:   inline constexpr long double
+16535:   floor(long double __x)
+16535:   { return __builtin_floorl(__x); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline constexpr
+16535:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                     double>::__type
+16535:     floor(_Tp __x)
+16535:     { return __builtin_floor(__x); }
+16535: 
+16535:   using ::fmod;
+16535: 
+16535: 
+16535:   inline constexpr float
+16535:   fmod(float __x, float __y)
+16535:   { return __builtin_fmodf(__x, __y); }
+16535: 
+16535:   inline constexpr long double
+16535:   fmod(long double __x, long double __y)
+16535:   { return __builtin_fmodl(__x, __y); }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     inline constexpr
+16535:     typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+16535:     fmod(_Tp __x, _Up __y)
+16535:     {
+16535:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+16535:       return fmod(__type(__x), __type(__y));
+16535:     }
+16535: 
+16535:   using ::frexp;
+16535: 
+16535: 
+16535:   inline float
+16535:   frexp(float __x, int* __exp)
+16535:   { return __builtin_frexpf(__x, __exp); }
+16535: 
+16535:   inline long double
+16535:   frexp(long double __x, int* __exp)
+16535:   { return __builtin_frexpl(__x, __exp); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline constexpr
+16535:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                     double>::__type
+16535:     frexp(_Tp __x, int* __exp)
+16535:     { return __builtin_frexp(__x, __exp); }
+16535: 
+16535:   using ::ldexp;
+16535: 
+16535: 
+16535:   inline constexpr float
+16535:   ldexp(float __x, int __exp)
+16535:   { return __builtin_ldexpf(__x, __exp); }
+16535: 
+16535:   inline constexpr long double
+16535:   ldexp(long double __x, int __exp)
+16535:   { return __builtin_ldexpl(__x, __exp); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline constexpr
+16535:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                     double>::__type
+16535:     ldexp(_Tp __x, int __exp)
+16535:     { return __builtin_ldexp(__x, __exp); }
+16535: 
+16535:   using ::log;
+16535: 
+16535: 
+16535:   inline constexpr float
+16535:   log(float __x)
+16535:   { return __builtin_logf(__x); }
+16535: 
+16535:   inline constexpr long double
+16535:   log(long double __x)
+16535:   { return __builtin_logl(__x); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline constexpr
+16535:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                     double>::__type
+16535:     log(_Tp __x)
+16535:     { return __builtin_log(__x); }
+16535: 
+16535:   using ::log10;
+16535: 
+16535: 
+16535:   inline constexpr float
+16535:   log10(float __x)
+16535:   { return __builtin_log10f(__x); }
+16535: 
+16535:   inline constexpr long double
+16535:   log10(long double __x)
+16535:   { return __builtin_log10l(__x); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline constexpr
+16535:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                     double>::__type
+16535:     log10(_Tp __x)
+16535:     { return __builtin_log10(__x); }
+16535: 
+16535:   using ::modf;
+16535: 
+16535: 
+16535:   inline float
+16535:   modf(float __x, float* __iptr)
+16535:   { return __builtin_modff(__x, __iptr); }
+16535: 
+16535:   inline long double
+16535:   modf(long double __x, long double* __iptr)
+16535:   { return __builtin_modfl(__x, __iptr); }
+16535: 
+16535: 
+16535:   using ::pow;
+16535: 
+16535: 
+16535:   inline constexpr float
+16535:   pow(float __x, float __y)
+16535:   { return __builtin_powf(__x, __y); }
+16535: 
+16535:   inline constexpr long double
+16535:   pow(long double __x, long double __y)
+16535:   { return __builtin_powl(__x, __y); }
+16535: # 412 "/usr/include/c++/8/cmath" 3
+16535:   template<typename _Tp, typename _Up>
+16535:     inline constexpr
+16535:     typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+16535:     pow(_Tp __x, _Up __y)
+16535:     {
+16535:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+16535:       return pow(__type(__x), __type(__y));
+16535:     }
+16535: 
+16535:   using ::sin;
+16535: 
+16535: 
+16535:   inline constexpr float
+16535:   sin(float __x)
+16535:   { return __builtin_sinf(__x); }
+16535: 
+16535:   inline constexpr long double
+16535:   sin(long double __x)
+16535:   { return __builtin_sinl(__x); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline constexpr
+16535:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                     double>::__type
+16535:     sin(_Tp __x)
+16535:     { return __builtin_sin(__x); }
+16535: 
+16535:   using ::sinh;
+16535: 
+16535: 
+16535:   inline constexpr float
+16535:   sinh(float __x)
+16535:   { return __builtin_sinhf(__x); }
+16535: 
+16535:   inline constexpr long double
+16535:   sinh(long double __x)
+16535:   { return __builtin_sinhl(__x); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline constexpr
+16535:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                     double>::__type
+16535:     sinh(_Tp __x)
+16535:     { return __builtin_sinh(__x); }
+16535: 
+16535:   using ::sqrt;
+16535: 
+16535: 
+16535:   inline constexpr float
+16535:   sqrt(float __x)
+16535:   { return __builtin_sqrtf(__x); }
+16535: 
+16535:   inline constexpr long double
+16535:   sqrt(long double __x)
+16535:   { return __builtin_sqrtl(__x); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline constexpr
+16535:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                     double>::__type
+16535:     sqrt(_Tp __x)
+16535:     { return __builtin_sqrt(__x); }
+16535: 
+16535:   using ::tan;
+16535: 
+16535: 
+16535:   inline constexpr float
+16535:   tan(float __x)
+16535:   { return __builtin_tanf(__x); }
+16535: 
+16535:   inline constexpr long double
+16535:   tan(long double __x)
+16535:   { return __builtin_tanl(__x); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline constexpr
+16535:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                     double>::__type
+16535:     tan(_Tp __x)
+16535:     { return __builtin_tan(__x); }
+16535: 
+16535:   using ::tanh;
+16535: 
+16535: 
+16535:   inline constexpr float
+16535:   tanh(float __x)
+16535:   { return __builtin_tanhf(__x); }
+16535: 
+16535:   inline constexpr long double
+16535:   tanh(long double __x)
+16535:   { return __builtin_tanhl(__x); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline constexpr
+16535:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                     double>::__type
+16535:     tanh(_Tp __x)
+16535:     { return __builtin_tanh(__x); }
+16535: # 536 "/usr/include/c++/8/cmath" 3
+16535:   constexpr int
+16535:   fpclassify(float __x)
+16535:   { return __builtin_fpclassify(0, 1, 4,
+16535:     3, 2, __x); }
+16535: 
+16535:   constexpr int
+16535:   fpclassify(double __x)
+16535:   { return __builtin_fpclassify(0, 1, 4,
+16535:     3, 2, __x); }
+16535: 
+16535:   constexpr int
+16535:   fpclassify(long double __x)
+16535:   { return __builtin_fpclassify(0, 1, 4,
+16535:     3, 2, __x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               int>::__type
+16535:     fpclassify(_Tp __x)
+16535:     { return __x != 0 ? 4 : 2; }
+16535: 
+16535: 
+16535: 
+16535:   constexpr bool
+16535:   isfinite(float __x)
+16535:   { return __builtin_isfinite(__x); }
+16535: 
+16535:   constexpr bool
+16535:   isfinite(double __x)
+16535:   { return __builtin_isfinite(__x); }
+16535: 
+16535:   constexpr bool
+16535:   isfinite(long double __x)
+16535:   { return __builtin_isfinite(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               bool>::__type
+16535:     isfinite(_Tp __x)
+16535:     { return true; }
+16535: 
+16535: 
+16535: 
+16535:   constexpr bool
+16535:   isinf(float __x)
+16535:   { return __builtin_isinf(__x); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   constexpr bool
+16535:   isinf(double __x)
+16535:   { return __builtin_isinf(__x); }
+16535: 
+16535: 
+16535:   constexpr bool
+16535:   isinf(long double __x)
+16535:   { return __builtin_isinf(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               bool>::__type
+16535:     isinf(_Tp __x)
+16535:     { return false; }
+16535: 
+16535: 
+16535: 
+16535:   constexpr bool
+16535:   isnan(float __x)
+16535:   { return __builtin_isnan(__x); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   constexpr bool
+16535:   isnan(double __x)
+16535:   { return __builtin_isnan(__x); }
+16535: 
+16535: 
+16535:   constexpr bool
+16535:   isnan(long double __x)
+16535:   { return __builtin_isnan(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               bool>::__type
+16535:     isnan(_Tp __x)
+16535:     { return false; }
+16535: 
+16535: 
+16535: 
+16535:   constexpr bool
+16535:   isnormal(float __x)
+16535:   { return __builtin_isnormal(__x); }
+16535: 
+16535:   constexpr bool
+16535:   isnormal(double __x)
+16535:   { return __builtin_isnormal(__x); }
+16535: 
+16535:   constexpr bool
+16535:   isnormal(long double __x)
+16535:   { return __builtin_isnormal(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               bool>::__type
+16535:     isnormal(_Tp __x)
+16535:     { return __x != 0 ? true : false; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   constexpr bool
+16535:   signbit(float __x)
+16535:   { return __builtin_signbit(__x); }
+16535: 
+16535:   constexpr bool
+16535:   signbit(double __x)
+16535:   { return __builtin_signbit(__x); }
+16535: 
+16535:   constexpr bool
+16535:   signbit(long double __x)
+16535:   { return __builtin_signbit(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               bool>::__type
+16535:     signbit(_Tp __x)
+16535:     { return __x < 0 ? true : false; }
+16535: 
+16535: 
+16535: 
+16535:   constexpr bool
+16535:   isgreater(float __x, float __y)
+16535:   { return __builtin_isgreater(__x, __y); }
+16535: 
+16535:   constexpr bool
+16535:   isgreater(double __x, double __y)
+16535:   { return __builtin_isgreater(__x, __y); }
+16535: 
+16535:   constexpr bool
+16535:   isgreater(long double __x, long double __y)
+16535:   { return __builtin_isgreater(__x, __y); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     constexpr typename
+16535:     __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
+16535:        && __is_arithmetic<_Up>::__value), bool>::__type
+16535:     isgreater(_Tp __x, _Up __y)
+16535:     {
+16535:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+16535:       return __builtin_isgreater(__type(__x), __type(__y));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   constexpr bool
+16535:   isgreaterequal(float __x, float __y)
+16535:   { return __builtin_isgreaterequal(__x, __y); }
+16535: 
+16535:   constexpr bool
+16535:   isgreaterequal(double __x, double __y)
+16535:   { return __builtin_isgreaterequal(__x, __y); }
+16535: 
+16535:   constexpr bool
+16535:   isgreaterequal(long double __x, long double __y)
+16535:   { return __builtin_isgreaterequal(__x, __y); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     constexpr typename
+16535:     __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
+16535:        && __is_arithmetic<_Up>::__value), bool>::__type
+16535:     isgreaterequal(_Tp __x, _Up __y)
+16535:     {
+16535:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+16535:       return __builtin_isgreaterequal(__type(__x), __type(__y));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   constexpr bool
+16535:   isless(float __x, float __y)
+16535:   { return __builtin_isless(__x, __y); }
+16535: 
+16535:   constexpr bool
+16535:   isless(double __x, double __y)
+16535:   { return __builtin_isless(__x, __y); }
+16535: 
+16535:   constexpr bool
+16535:   isless(long double __x, long double __y)
+16535:   { return __builtin_isless(__x, __y); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     constexpr typename
+16535:     __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
+16535:        && __is_arithmetic<_Up>::__value), bool>::__type
+16535:     isless(_Tp __x, _Up __y)
+16535:     {
+16535:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+16535:       return __builtin_isless(__type(__x), __type(__y));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   constexpr bool
+16535:   islessequal(float __x, float __y)
+16535:   { return __builtin_islessequal(__x, __y); }
+16535: 
+16535:   constexpr bool
+16535:   islessequal(double __x, double __y)
+16535:   { return __builtin_islessequal(__x, __y); }
+16535: 
+16535:   constexpr bool
+16535:   islessequal(long double __x, long double __y)
+16535:   { return __builtin_islessequal(__x, __y); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     constexpr typename
+16535:     __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
+16535:        && __is_arithmetic<_Up>::__value), bool>::__type
+16535:     islessequal(_Tp __x, _Up __y)
+16535:     {
+16535:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+16535:       return __builtin_islessequal(__type(__x), __type(__y));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   constexpr bool
+16535:   islessgreater(float __x, float __y)
+16535:   { return __builtin_islessgreater(__x, __y); }
+16535: 
+16535:   constexpr bool
+16535:   islessgreater(double __x, double __y)
+16535:   { return __builtin_islessgreater(__x, __y); }
+16535: 
+16535:   constexpr bool
+16535:   islessgreater(long double __x, long double __y)
+16535:   { return __builtin_islessgreater(__x, __y); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     constexpr typename
+16535:     __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
+16535:        && __is_arithmetic<_Up>::__value), bool>::__type
+16535:     islessgreater(_Tp __x, _Up __y)
+16535:     {
+16535:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+16535:       return __builtin_islessgreater(__type(__x), __type(__y));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   constexpr bool
+16535:   isunordered(float __x, float __y)
+16535:   { return __builtin_isunordered(__x, __y); }
+16535: 
+16535:   constexpr bool
+16535:   isunordered(double __x, double __y)
+16535:   { return __builtin_isunordered(__x, __y); }
+16535: 
+16535:   constexpr bool
+16535:   isunordered(long double __x, long double __y)
+16535:   { return __builtin_isunordered(__x, __y); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     constexpr typename
+16535:     __gnu_cxx::__enable_if<(__is_arithmetic<_Tp>::__value
+16535:        && __is_arithmetic<_Up>::__value), bool>::__type
+16535:     isunordered(_Tp __x, _Up __y)
+16535:     {
+16535:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+16535:       return __builtin_isunordered(__type(__x), __type(__y));
+16535:     }
+16535: # 1065 "/usr/include/c++/8/cmath" 3
+16535:   using ::double_t;
+16535:   using ::float_t;
+16535: 
+16535: 
+16535:   using ::acosh;
+16535:   using ::acoshf;
+16535:   using ::acoshl;
+16535: 
+16535:   using ::asinh;
+16535:   using ::asinhf;
+16535:   using ::asinhl;
+16535: 
+16535:   using ::atanh;
+16535:   using ::atanhf;
+16535:   using ::atanhl;
+16535: 
+16535:   using ::cbrt;
+16535:   using ::cbrtf;
+16535:   using ::cbrtl;
+16535: 
+16535:   using ::copysign;
+16535:   using ::copysignf;
+16535:   using ::copysignl;
+16535: 
+16535:   using ::erf;
+16535:   using ::erff;
+16535:   using ::erfl;
+16535: 
+16535:   using ::erfc;
+16535:   using ::erfcf;
+16535:   using ::erfcl;
+16535: 
+16535:   using ::exp2;
+16535:   using ::exp2f;
+16535:   using ::exp2l;
+16535: 
+16535:   using ::expm1;
+16535:   using ::expm1f;
+16535:   using ::expm1l;
+16535: 
+16535:   using ::fdim;
+16535:   using ::fdimf;
+16535:   using ::fdiml;
+16535: 
+16535:   using ::fma;
+16535:   using ::fmaf;
+16535:   using ::fmal;
+16535: 
+16535:   using ::fmax;
+16535:   using ::fmaxf;
+16535:   using ::fmaxl;
+16535: 
+16535:   using ::fmin;
+16535:   using ::fminf;
+16535:   using ::fminl;
+16535: 
+16535:   using ::hypot;
+16535:   using ::hypotf;
+16535:   using ::hypotl;
+16535: 
+16535:   using ::ilogb;
+16535:   using ::ilogbf;
+16535:   using ::ilogbl;
+16535: 
+16535:   using ::lgamma;
+16535:   using ::lgammaf;
+16535:   using ::lgammal;
+16535: 
+16535: 
+16535:   using ::llrint;
+16535:   using ::llrintf;
+16535:   using ::llrintl;
+16535: 
+16535:   using ::llround;
+16535:   using ::llroundf;
+16535:   using ::llroundl;
+16535: 
+16535: 
+16535:   using ::log1p;
+16535:   using ::log1pf;
+16535:   using ::log1pl;
+16535: 
+16535:   using ::log2;
+16535:   using ::log2f;
+16535:   using ::log2l;
+16535: 
+16535:   using ::logb;
+16535:   using ::logbf;
+16535:   using ::logbl;
+16535: 
+16535:   using ::lrint;
+16535:   using ::lrintf;
+16535:   using ::lrintl;
+16535: 
+16535:   using ::lround;
+16535:   using ::lroundf;
+16535:   using ::lroundl;
+16535: 
+16535:   using ::nan;
+16535:   using ::nanf;
+16535:   using ::nanl;
+16535: 
+16535:   using ::nearbyint;
+16535:   using ::nearbyintf;
+16535:   using ::nearbyintl;
+16535: 
+16535:   using ::nextafter;
+16535:   using ::nextafterf;
+16535:   using ::nextafterl;
+16535: 
+16535:   using ::nexttoward;
+16535:   using ::nexttowardf;
+16535:   using ::nexttowardl;
+16535: 
+16535:   using ::remainder;
+16535:   using ::remainderf;
+16535:   using ::remainderl;
+16535: 
+16535:   using ::remquo;
+16535:   using ::remquof;
+16535:   using ::remquol;
+16535: 
+16535:   using ::rint;
+16535:   using ::rintf;
+16535:   using ::rintl;
+16535: 
+16535:   using ::round;
+16535:   using ::roundf;
+16535:   using ::roundl;
+16535: 
+16535:   using ::scalbln;
+16535:   using ::scalblnf;
+16535:   using ::scalblnl;
+16535: 
+16535:   using ::scalbn;
+16535:   using ::scalbnf;
+16535:   using ::scalbnl;
+16535: 
+16535:   using ::tgamma;
+16535:   using ::tgammaf;
+16535:   using ::tgammal;
+16535: 
+16535:   using ::trunc;
+16535:   using ::truncf;
+16535:   using ::truncl;
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   acosh(float __x)
+16535:   { return __builtin_acoshf(__x); }
+16535: 
+16535:   constexpr long double
+16535:   acosh(long double __x)
+16535:   { return __builtin_acoshl(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               double>::__type
+16535:     acosh(_Tp __x)
+16535:     { return __builtin_acosh(__x); }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   asinh(float __x)
+16535:   { return __builtin_asinhf(__x); }
+16535: 
+16535:   constexpr long double
+16535:   asinh(long double __x)
+16535:   { return __builtin_asinhl(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               double>::__type
+16535:     asinh(_Tp __x)
+16535:     { return __builtin_asinh(__x); }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   atanh(float __x)
+16535:   { return __builtin_atanhf(__x); }
+16535: 
+16535:   constexpr long double
+16535:   atanh(long double __x)
+16535:   { return __builtin_atanhl(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               double>::__type
+16535:     atanh(_Tp __x)
+16535:     { return __builtin_atanh(__x); }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   cbrt(float __x)
+16535:   { return __builtin_cbrtf(__x); }
+16535: 
+16535:   constexpr long double
+16535:   cbrt(long double __x)
+16535:   { return __builtin_cbrtl(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               double>::__type
+16535:     cbrt(_Tp __x)
+16535:     { return __builtin_cbrt(__x); }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   copysign(float __x, float __y)
+16535:   { return __builtin_copysignf(__x, __y); }
+16535: 
+16535:   constexpr long double
+16535:   copysign(long double __x, long double __y)
+16535:   { return __builtin_copysignl(__x, __y); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+16535:     copysign(_Tp __x, _Up __y)
+16535:     {
+16535:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+16535:       return copysign(__type(__x), __type(__y));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   erf(float __x)
+16535:   { return __builtin_erff(__x); }
+16535: 
+16535:   constexpr long double
+16535:   erf(long double __x)
+16535:   { return __builtin_erfl(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               double>::__type
+16535:     erf(_Tp __x)
+16535:     { return __builtin_erf(__x); }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   erfc(float __x)
+16535:   { return __builtin_erfcf(__x); }
+16535: 
+16535:   constexpr long double
+16535:   erfc(long double __x)
+16535:   { return __builtin_erfcl(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               double>::__type
+16535:     erfc(_Tp __x)
+16535:     { return __builtin_erfc(__x); }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   exp2(float __x)
+16535:   { return __builtin_exp2f(__x); }
+16535: 
+16535:   constexpr long double
+16535:   exp2(long double __x)
+16535:   { return __builtin_exp2l(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               double>::__type
+16535:     exp2(_Tp __x)
+16535:     { return __builtin_exp2(__x); }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   expm1(float __x)
+16535:   { return __builtin_expm1f(__x); }
+16535: 
+16535:   constexpr long double
+16535:   expm1(long double __x)
+16535:   { return __builtin_expm1l(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               double>::__type
+16535:     expm1(_Tp __x)
+16535:     { return __builtin_expm1(__x); }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   fdim(float __x, float __y)
+16535:   { return __builtin_fdimf(__x, __y); }
+16535: 
+16535:   constexpr long double
+16535:   fdim(long double __x, long double __y)
+16535:   { return __builtin_fdiml(__x, __y); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+16535:     fdim(_Tp __x, _Up __y)
+16535:     {
+16535:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+16535:       return fdim(__type(__x), __type(__y));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   fma(float __x, float __y, float __z)
+16535:   { return __builtin_fmaf(__x, __y, __z); }
+16535: 
+16535:   constexpr long double
+16535:   fma(long double __x, long double __y, long double __z)
+16535:   { return __builtin_fmal(__x, __y, __z); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up, typename _Vp>
+16535:     constexpr typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type
+16535:     fma(_Tp __x, _Up __y, _Vp __z)
+16535:     {
+16535:       typedef typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type __type;
+16535:       return fma(__type(__x), __type(__y), __type(__z));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   fmax(float __x, float __y)
+16535:   { return __builtin_fmaxf(__x, __y); }
+16535: 
+16535:   constexpr long double
+16535:   fmax(long double __x, long double __y)
+16535:   { return __builtin_fmaxl(__x, __y); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+16535:     fmax(_Tp __x, _Up __y)
+16535:     {
+16535:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+16535:       return fmax(__type(__x), __type(__y));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   fmin(float __x, float __y)
+16535:   { return __builtin_fminf(__x, __y); }
+16535: 
+16535:   constexpr long double
+16535:   fmin(long double __x, long double __y)
+16535:   { return __builtin_fminl(__x, __y); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+16535:     fmin(_Tp __x, _Up __y)
+16535:     {
+16535:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+16535:       return fmin(__type(__x), __type(__y));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   hypot(float __x, float __y)
+16535:   { return __builtin_hypotf(__x, __y); }
+16535: 
+16535:   constexpr long double
+16535:   hypot(long double __x, long double __y)
+16535:   { return __builtin_hypotl(__x, __y); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+16535:     hypot(_Tp __x, _Up __y)
+16535:     {
+16535:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+16535:       return hypot(__type(__x), __type(__y));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   constexpr int
+16535:   ilogb(float __x)
+16535:   { return __builtin_ilogbf(__x); }
+16535: 
+16535:   constexpr int
+16535:   ilogb(long double __x)
+16535:   { return __builtin_ilogbl(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr
+16535:     typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                     int>::__type
+16535:     ilogb(_Tp __x)
+16535:     { return __builtin_ilogb(__x); }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   lgamma(float __x)
+16535:   { return __builtin_lgammaf(__x); }
+16535: 
+16535:   constexpr long double
+16535:   lgamma(long double __x)
+16535:   { return __builtin_lgammal(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               double>::__type
+16535:     lgamma(_Tp __x)
+16535:     { return __builtin_lgamma(__x); }
+16535: 
+16535: 
+16535: 
+16535:   constexpr long long
+16535:   llrint(float __x)
+16535:   { return __builtin_llrintf(__x); }
+16535: 
+16535:   constexpr long long
+16535:   llrint(long double __x)
+16535:   { return __builtin_llrintl(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               long long>::__type
+16535:     llrint(_Tp __x)
+16535:     { return __builtin_llrint(__x); }
+16535: 
+16535: 
+16535: 
+16535:   constexpr long long
+16535:   llround(float __x)
+16535:   { return __builtin_llroundf(__x); }
+16535: 
+16535:   constexpr long long
+16535:   llround(long double __x)
+16535:   { return __builtin_llroundl(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               long long>::__type
+16535:     llround(_Tp __x)
+16535:     { return __builtin_llround(__x); }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   log1p(float __x)
+16535:   { return __builtin_log1pf(__x); }
+16535: 
+16535:   constexpr long double
+16535:   log1p(long double __x)
+16535:   { return __builtin_log1pl(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               double>::__type
+16535:     log1p(_Tp __x)
+16535:     { return __builtin_log1p(__x); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   log2(float __x)
+16535:   { return __builtin_log2f(__x); }
+16535: 
+16535:   constexpr long double
+16535:   log2(long double __x)
+16535:   { return __builtin_log2l(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               double>::__type
+16535:     log2(_Tp __x)
+16535:     { return __builtin_log2(__x); }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   logb(float __x)
+16535:   { return __builtin_logbf(__x); }
+16535: 
+16535:   constexpr long double
+16535:   logb(long double __x)
+16535:   { return __builtin_logbl(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               double>::__type
+16535:     logb(_Tp __x)
+16535:     { return __builtin_logb(__x); }
+16535: 
+16535: 
+16535: 
+16535:   constexpr long
+16535:   lrint(float __x)
+16535:   { return __builtin_lrintf(__x); }
+16535: 
+16535:   constexpr long
+16535:   lrint(long double __x)
+16535:   { return __builtin_lrintl(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               long>::__type
+16535:     lrint(_Tp __x)
+16535:     { return __builtin_lrint(__x); }
+16535: 
+16535: 
+16535: 
+16535:   constexpr long
+16535:   lround(float __x)
+16535:   { return __builtin_lroundf(__x); }
+16535: 
+16535:   constexpr long
+16535:   lround(long double __x)
+16535:   { return __builtin_lroundl(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               long>::__type
+16535:     lround(_Tp __x)
+16535:     { return __builtin_lround(__x); }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   nearbyint(float __x)
+16535:   { return __builtin_nearbyintf(__x); }
+16535: 
+16535:   constexpr long double
+16535:   nearbyint(long double __x)
+16535:   { return __builtin_nearbyintl(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               double>::__type
+16535:     nearbyint(_Tp __x)
+16535:     { return __builtin_nearbyint(__x); }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   nextafter(float __x, float __y)
+16535:   { return __builtin_nextafterf(__x, __y); }
+16535: 
+16535:   constexpr long double
+16535:   nextafter(long double __x, long double __y)
+16535:   { return __builtin_nextafterl(__x, __y); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+16535:     nextafter(_Tp __x, _Up __y)
+16535:     {
+16535:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+16535:       return nextafter(__type(__x), __type(__y));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   nexttoward(float __x, long double __y)
+16535:   { return __builtin_nexttowardf(__x, __y); }
+16535: 
+16535:   constexpr long double
+16535:   nexttoward(long double __x, long double __y)
+16535:   { return __builtin_nexttowardl(__x, __y); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               double>::__type
+16535:     nexttoward(_Tp __x, long double __y)
+16535:     { return __builtin_nexttoward(__x, __y); }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   remainder(float __x, float __y)
+16535:   { return __builtin_remainderf(__x, __y); }
+16535: 
+16535:   constexpr long double
+16535:   remainder(long double __x, long double __y)
+16535:   { return __builtin_remainderl(__x, __y); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     constexpr typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+16535:     remainder(_Tp __x, _Up __y)
+16535:     {
+16535:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+16535:       return remainder(__type(__x), __type(__y));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   inline float
+16535:   remquo(float __x, float __y, int* __pquo)
+16535:   { return __builtin_remquof(__x, __y, __pquo); }
+16535: 
+16535:   inline long double
+16535:   remquo(long double __x, long double __y, int* __pquo)
+16535:   { return __builtin_remquol(__x, __y, __pquo); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
+16535:     remquo(_Tp __x, _Up __y, int* __pquo)
+16535:     {
+16535:       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
+16535:       return remquo(__type(__x), __type(__y), __pquo);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   rint(float __x)
+16535:   { return __builtin_rintf(__x); }
+16535: 
+16535:   constexpr long double
+16535:   rint(long double __x)
+16535:   { return __builtin_rintl(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               double>::__type
+16535:     rint(_Tp __x)
+16535:     { return __builtin_rint(__x); }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   round(float __x)
+16535:   { return __builtin_roundf(__x); }
+16535: 
+16535:   constexpr long double
+16535:   round(long double __x)
+16535:   { return __builtin_roundl(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               double>::__type
+16535:     round(_Tp __x)
+16535:     { return __builtin_round(__x); }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   scalbln(float __x, long __ex)
+16535:   { return __builtin_scalblnf(__x, __ex); }
+16535: 
+16535:   constexpr long double
+16535:   scalbln(long double __x, long __ex)
+16535:   { return __builtin_scalblnl(__x, __ex); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               double>::__type
+16535:     scalbln(_Tp __x, long __ex)
+16535:     { return __builtin_scalbln(__x, __ex); }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   scalbn(float __x, int __ex)
+16535:   { return __builtin_scalbnf(__x, __ex); }
+16535: 
+16535:   constexpr long double
+16535:   scalbn(long double __x, int __ex)
+16535:   { return __builtin_scalbnl(__x, __ex); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               double>::__type
+16535:     scalbn(_Tp __x, int __ex)
+16535:     { return __builtin_scalbn(__x, __ex); }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   tgamma(float __x)
+16535:   { return __builtin_tgammaf(__x); }
+16535: 
+16535:   constexpr long double
+16535:   tgamma(long double __x)
+16535:   { return __builtin_tgammal(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               double>::__type
+16535:     tgamma(_Tp __x)
+16535:     { return __builtin_tgamma(__x); }
+16535: 
+16535: 
+16535: 
+16535:   constexpr float
+16535:   trunc(float __x)
+16535:   { return __builtin_truncf(__x); }
+16535: 
+16535:   constexpr long double
+16535:   trunc(long double __x)
+16535:   { return __builtin_truncl(__x); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     constexpr typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
+16535:                                               double>::__type
+16535:     trunc(_Tp __x)
+16535:     { return __builtin_trunc(__x); }
+16535: # 1888 "/usr/include/c++/8/cmath" 3
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 35 "../../src/Float_defs.hh" 2
+16535: # 1 "/usr/include/c++/8/map" 1 3
+16535: # 58 "/usr/include/c++/8/map" 3
+16535:        
+16535: # 59 "/usr/include/c++/8/map" 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/stl_map.h" 1 3
+16535: # 63 "/usr/include/c++/8/bits/stl_map.h" 3
+16535: # 1 "/usr/include/c++/8/tuple" 1 3
+16535: # 32 "/usr/include/c++/8/tuple" 3
+16535:        
+16535: # 33 "/usr/include/c++/8/tuple" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/array" 1 3
+16535: # 32 "/usr/include/c++/8/array" 3
+16535:        
+16535: # 33 "/usr/include/c++/8/array" 3
+16535: # 43 "/usr/include/c++/8/array" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   template<typename _Tp, std::size_t _Nm>
+16535:     struct __array_traits
+16535:     {
+16535:       typedef _Tp _Type[_Nm];
+16535:       typedef __is_swappable<_Tp> _Is_swappable;
+16535:       typedef __is_nothrow_swappable<_Tp> _Is_nothrow_swappable;
+16535: 
+16535:       static constexpr _Tp&
+16535:       _S_ref(const _Type& __t, std::size_t __n) noexcept
+16535:       { return const_cast<_Tp&>(__t[__n]); }
+16535: 
+16535:       static constexpr _Tp*
+16535:       _S_ptr(const _Type& __t) noexcept
+16535:       { return const_cast<_Tp*>(__t); }
+16535:     };
+16535: 
+16535:  template<typename _Tp>
+16535:    struct __array_traits<_Tp, 0>
+16535:    {
+16535:      struct _Type { };
+16535:      typedef true_type _Is_swappable;
+16535:      typedef true_type _Is_nothrow_swappable;
+16535: 
+16535:      static constexpr _Tp&
+16535:      _S_ref(const _Type&, std::size_t) noexcept
+16535:      { return *static_cast<_Tp*>(nullptr); }
+16535: 
+16535:      static constexpr _Tp*
+16535:      _S_ptr(const _Type&) noexcept
+16535:      { return nullptr; }
+16535:    };
+16535: # 93 "/usr/include/c++/8/array" 3
+16535:   template<typename _Tp, std::size_t _Nm>
+16535:     struct array
+16535:     {
+16535:       typedef _Tp value_type;
+16535:       typedef value_type* pointer;
+16535:       typedef const value_type* const_pointer;
+16535:       typedef value_type& reference;
+16535:       typedef const value_type& const_reference;
+16535:       typedef value_type* iterator;
+16535:       typedef const value_type* const_iterator;
+16535:       typedef std::size_t size_type;
+16535:       typedef std::ptrdiff_t difference_type;
+16535:       typedef std::reverse_iterator<iterator> reverse_iterator;
+16535:       typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+16535: 
+16535: 
+16535:       typedef std::__array_traits<_Tp, _Nm> _AT_Type;
+16535:       typename _AT_Type::_Type _M_elems;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       fill(const value_type& __u)
+16535:       { std::fill_n(begin(), size(), __u); }
+16535: 
+16535:       void
+16535:       swap(array& __other)
+16535:       noexcept(_AT_Type::_Is_nothrow_swappable::value)
+16535:       { std::swap_ranges(begin(), end(), __other.begin()); }
+16535: 
+16535: 
+16535:       iterator
+16535:       begin() noexcept
+16535:       { return iterator(data()); }
+16535: 
+16535:       const_iterator
+16535:       begin() const noexcept
+16535:       { return const_iterator(data()); }
+16535: 
+16535:       iterator
+16535:       end() noexcept
+16535:       { return iterator(data() + _Nm); }
+16535: 
+16535:       const_iterator
+16535:       end() const noexcept
+16535:       { return const_iterator(data() + _Nm); }
+16535: 
+16535:       reverse_iterator
+16535:       rbegin() noexcept
+16535:       { return reverse_iterator(end()); }
+16535: 
+16535:       const_reverse_iterator
+16535:       rbegin() const noexcept
+16535:       { return const_reverse_iterator(end()); }
+16535: 
+16535:       reverse_iterator
+16535:       rend() noexcept
+16535:       { return reverse_iterator(begin()); }
+16535: 
+16535:       const_reverse_iterator
+16535:       rend() const noexcept
+16535:       { return const_reverse_iterator(begin()); }
+16535: 
+16535:       const_iterator
+16535:       cbegin() const noexcept
+16535:       { return const_iterator(data()); }
+16535: 
+16535:       const_iterator
+16535:       cend() const noexcept
+16535:       { return const_iterator(data() + _Nm); }
+16535: 
+16535:       const_reverse_iterator
+16535:       crbegin() const noexcept
+16535:       { return const_reverse_iterator(end()); }
+16535: 
+16535:       const_reverse_iterator
+16535:       crend() const noexcept
+16535:       { return const_reverse_iterator(begin()); }
+16535: 
+16535: 
+16535:       constexpr size_type
+16535:       size() const noexcept { return _Nm; }
+16535: 
+16535:       constexpr size_type
+16535:       max_size() const noexcept { return _Nm; }
+16535: 
+16535:       constexpr bool
+16535:       empty() const noexcept { return size() == 0; }
+16535: 
+16535: 
+16535:       reference
+16535:       operator[](size_type __n) noexcept
+16535:       { return _AT_Type::_S_ref(_M_elems, __n); }
+16535: 
+16535:       constexpr const_reference
+16535:       operator[](size_type __n) const noexcept
+16535:       { return _AT_Type::_S_ref(_M_elems, __n); }
+16535: 
+16535:       reference
+16535:       at(size_type __n)
+16535:       {
+16535:  if (__n >= _Nm)
+16535:    std::__throw_out_of_range_fmt(("array::at: __n (which is %zu) " ">= _Nm (which is %zu)")
+16535:                                  ,
+16535:      __n, _Nm);
+16535:  return _AT_Type::_S_ref(_M_elems, __n);
+16535:       }
+16535: 
+16535:       constexpr const_reference
+16535:       at(size_type __n) const
+16535:       {
+16535: 
+16535: 
+16535:  return __n < _Nm ? _AT_Type::_S_ref(_M_elems, __n)
+16535:    : (std::__throw_out_of_range_fmt(("array::at: __n (which is %zu) " ">= _Nm (which is %zu)")
+16535:                                     ,
+16535:         __n, _Nm),
+16535:       _AT_Type::_S_ref(_M_elems, 0));
+16535:       }
+16535: 
+16535:       reference
+16535:       front() noexcept
+16535:       { return *begin(); }
+16535: 
+16535:       constexpr const_reference
+16535:       front() const noexcept
+16535:       { return _AT_Type::_S_ref(_M_elems, 0); }
+16535: 
+16535:       reference
+16535:       back() noexcept
+16535:       { return _Nm ? *(end() - 1) : *end(); }
+16535: 
+16535:       constexpr const_reference
+16535:       back() const noexcept
+16535:       {
+16535:  return _Nm ? _AT_Type::_S_ref(_M_elems, _Nm - 1)
+16535:              : _AT_Type::_S_ref(_M_elems, 0);
+16535:       }
+16535: 
+16535:       pointer
+16535:       data() noexcept
+16535:       { return _AT_Type::_S_ptr(_M_elems); }
+16535: 
+16535:       const_pointer
+16535:       data() const noexcept
+16535:       { return _AT_Type::_S_ptr(_M_elems); }
+16535:     };
+16535: # 250 "/usr/include/c++/8/array" 3
+16535:   template<typename _Tp, std::size_t _Nm>
+16535:     inline bool
+16535:     operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
+16535:     { return std::equal(__one.begin(), __one.end(), __two.begin()); }
+16535: 
+16535:   template<typename _Tp, std::size_t _Nm>
+16535:     inline bool
+16535:     operator!=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
+16535:     { return !(__one == __two); }
+16535: 
+16535:   template<typename _Tp, std::size_t _Nm>
+16535:     inline bool
+16535:     operator<(const array<_Tp, _Nm>& __a, const array<_Tp, _Nm>& __b)
+16535:     {
+16535:       return std::lexicographical_compare(__a.begin(), __a.end(),
+16535:        __b.begin(), __b.end());
+16535:     }
+16535: 
+16535:   template<typename _Tp, std::size_t _Nm>
+16535:     inline bool
+16535:     operator>(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
+16535:     { return __two < __one; }
+16535: 
+16535:   template<typename _Tp, std::size_t _Nm>
+16535:     inline bool
+16535:     operator<=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
+16535:     { return !(__one > __two); }
+16535: 
+16535:   template<typename _Tp, std::size_t _Nm>
+16535:     inline bool
+16535:     operator>=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
+16535:     { return !(__one < __two); }
+16535: 
+16535: 
+16535:   template<typename _Tp, std::size_t _Nm>
+16535:     inline
+16535: 
+16535: 
+16535:     typename enable_if<
+16535:       std::__array_traits<_Tp, _Nm>::_Is_swappable::value
+16535:     >::type
+16535: 
+16535: 
+16535: 
+16535:     swap(array<_Tp, _Nm>& __one, array<_Tp, _Nm>& __two)
+16535:     noexcept(noexcept(__one.swap(__two)))
+16535:     { __one.swap(__two); }
+16535: 
+16535: 
+16535:   template<typename _Tp, std::size_t _Nm>
+16535:     typename enable_if<
+16535:       !std::__array_traits<_Tp, _Nm>::_Is_swappable::value>::type
+16535:     swap(array<_Tp, _Nm>&, array<_Tp, _Nm>&) = delete;
+16535: 
+16535: 
+16535:   template<std::size_t _Int, typename _Tp, std::size_t _Nm>
+16535:     constexpr _Tp&
+16535:     get(array<_Tp, _Nm>& __arr) noexcept
+16535:     {
+16535:       static_assert(_Int < _Nm, "array index is within bounds");
+16535:       return std::__array_traits<_Tp, _Nm>::
+16535:  _S_ref(__arr._M_elems, _Int);
+16535:     }
+16535: 
+16535:   template<std::size_t _Int, typename _Tp, std::size_t _Nm>
+16535:     constexpr _Tp&&
+16535:     get(array<_Tp, _Nm>&& __arr) noexcept
+16535:     {
+16535:       static_assert(_Int < _Nm, "array index is within bounds");
+16535:       return std::move(std::get<_Int>(__arr));
+16535:     }
+16535: 
+16535:   template<std::size_t _Int, typename _Tp, std::size_t _Nm>
+16535:     constexpr const _Tp&
+16535:     get(const array<_Tp, _Nm>& __arr) noexcept
+16535:     {
+16535:       static_assert(_Int < _Nm, "array index is within bounds");
+16535:       return std::__array_traits<_Tp, _Nm>::
+16535:  _S_ref(__arr._M_elems, _Int);
+16535:     }
+16535: 
+16535:   template<std::size_t _Int, typename _Tp, std::size_t _Nm>
+16535:     constexpr const _Tp&&
+16535:     get(const array<_Tp, _Nm>&& __arr) noexcept
+16535:     {
+16535:       static_assert(_Int < _Nm, "array index is within bounds");
+16535:       return std::move(std::get<_Int>(__arr));
+16535:     }
+16535: 
+16535: 
+16535: }
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct tuple_size;
+16535: 
+16535: 
+16535:   template<typename _Tp, std::size_t _Nm>
+16535:     struct tuple_size<std::array<_Tp, _Nm>>
+16535:     : public integral_constant<std::size_t, _Nm> { };
+16535: 
+16535: 
+16535:   template<std::size_t _Int, typename _Tp>
+16535:     struct tuple_element;
+16535: 
+16535: 
+16535:   template<std::size_t _Int, typename _Tp, std::size_t _Nm>
+16535:     struct tuple_element<_Int, std::array<_Tp, _Nm>>
+16535:     {
+16535:       static_assert(_Int < _Nm, "index is out of bounds");
+16535:       typedef _Tp type;
+16535:     };
+16535: 
+16535:   template<typename _Tp, std::size_t _Nm>
+16535:     struct __is_tuple_like_impl<std::array<_Tp, _Nm>> : true_type
+16535:     { };
+16535: 
+16535: 
+16535: }
+16535: # 40 "/usr/include/c++/8/tuple" 2 3
+16535: # 1 "/usr/include/c++/8/bits/uses_allocator.h" 1 3
+16535: # 35 "/usr/include/c++/8/bits/uses_allocator.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   struct __erased_type { };
+16535: 
+16535:   template<typename _Alloc, typename _Tp>
+16535:     using __is_erased_or_convertible
+16535:       = __or_<is_same<_Tp, __erased_type>, is_convertible<_Alloc, _Tp>>;
+16535: 
+16535: 
+16535:   struct allocator_arg_t { explicit allocator_arg_t() = default; };
+16535: 
+16535:   constexpr allocator_arg_t allocator_arg =
+16535:     allocator_arg_t();
+16535: 
+16535:   template<typename _Tp, typename _Alloc, typename = __void_t<>>
+16535:     struct __uses_allocator_helper
+16535:     : false_type { };
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     struct __uses_allocator_helper<_Tp, _Alloc,
+16535:        __void_t<typename _Tp::allocator_type>>
+16535:     : __is_erased_or_convertible<_Alloc, typename _Tp::allocator_type>::type
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     struct uses_allocator
+16535:     : __uses_allocator_helper<_Tp, _Alloc>::type
+16535:     { };
+16535: 
+16535:   struct __uses_alloc_base { };
+16535: 
+16535:   struct __uses_alloc0 : __uses_alloc_base
+16535:   {
+16535:     struct _Sink { void operator=(const void*) { } } _M_a;
+16535:   };
+16535: 
+16535:   template<typename _Alloc>
+16535:     struct __uses_alloc1 : __uses_alloc_base { const _Alloc* _M_a; };
+16535: 
+16535:   template<typename _Alloc>
+16535:     struct __uses_alloc2 : __uses_alloc_base { const _Alloc* _M_a; };
+16535: 
+16535:   template<bool, typename _Tp, typename _Alloc, typename... _Args>
+16535:     struct __uses_alloc;
+16535: 
+16535:   template<typename _Tp, typename _Alloc, typename... _Args>
+16535:     struct __uses_alloc<true, _Tp, _Alloc, _Args...>
+16535:     : conditional<
+16535:         is_constructible<_Tp, allocator_arg_t, _Alloc, _Args...>::value,
+16535:         __uses_alloc1<_Alloc>,
+16535:         __uses_alloc2<_Alloc>>::type
+16535:     {
+16535:       static_assert(__or_<
+16535:    is_constructible<_Tp, allocator_arg_t, _Alloc, _Args...>,
+16535:    is_constructible<_Tp, _Args..., _Alloc>>::value, "construction with"
+16535:    " an allocator must be possible if uses_allocator is true");
+16535:     };
+16535: 
+16535:   template<typename _Tp, typename _Alloc, typename... _Args>
+16535:     struct __uses_alloc<false, _Tp, _Alloc, _Args...>
+16535:     : __uses_alloc0 { };
+16535: 
+16535:   template<typename _Tp, typename _Alloc, typename... _Args>
+16535:     using __uses_alloc_t =
+16535:       __uses_alloc<uses_allocator<_Tp, _Alloc>::value, _Tp, _Alloc, _Args...>;
+16535: 
+16535:   template<typename _Tp, typename _Alloc, typename... _Args>
+16535:     inline __uses_alloc_t<_Tp, _Alloc, _Args...>
+16535:     __use_alloc(const _Alloc& __a)
+16535:     {
+16535:       __uses_alloc_t<_Tp, _Alloc, _Args...> __ret;
+16535:       __ret._M_a = std::__addressof(__a);
+16535:       return __ret;
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Alloc, typename... _Args>
+16535:     void
+16535:     __use_alloc(const _Alloc&&) = delete;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<template<typename...> class _Predicate,
+16535:     typename _Tp, typename _Alloc, typename... _Args>
+16535:     struct __is_uses_allocator_predicate
+16535:     : conditional<uses_allocator<_Tp, _Alloc>::value,
+16535:       __or_<_Predicate<_Tp, allocator_arg_t, _Alloc, _Args...>,
+16535:      _Predicate<_Tp, _Args..., _Alloc>>,
+16535:       _Predicate<_Tp, _Args...>>::type { };
+16535: 
+16535:   template<typename _Tp, typename _Alloc, typename... _Args>
+16535:     struct __is_uses_allocator_constructible
+16535:     : __is_uses_allocator_predicate<is_constructible, _Tp, _Alloc, _Args...>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc, typename... _Args>
+16535:     constexpr bool __is_uses_allocator_constructible_v =
+16535:       __is_uses_allocator_constructible<_Tp, _Alloc, _Args...>::value;
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc, typename... _Args>
+16535:     struct __is_nothrow_uses_allocator_constructible
+16535:     : __is_uses_allocator_predicate<is_nothrow_constructible,
+16535:         _Tp, _Alloc, _Args...>
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc, typename... _Args>
+16535:     constexpr bool
+16535:     __is_nothrow_uses_allocator_constructible_v =
+16535:       __is_nothrow_uses_allocator_constructible<_Tp, _Alloc, _Args...>::value;
+16535: 
+16535: 
+16535:   template<typename _Tp, typename... _Args>
+16535:     void __uses_allocator_construct_impl(__uses_alloc0 __a, _Tp* __ptr,
+16535:       _Args&&... __args)
+16535:     { ::new ((void*)__ptr) _Tp(std::forward<_Args>(__args)...); }
+16535: 
+16535:   template<typename _Tp, typename _Alloc, typename... _Args>
+16535:     void __uses_allocator_construct_impl(__uses_alloc1<_Alloc> __a, _Tp* __ptr,
+16535:       _Args&&... __args)
+16535:     {
+16535:       ::new ((void*)__ptr) _Tp(allocator_arg, *__a._M_a,
+16535:           std::forward<_Args>(__args)...);
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Alloc, typename... _Args>
+16535:     void __uses_allocator_construct_impl(__uses_alloc2<_Alloc> __a, _Tp* __ptr,
+16535:       _Args&&... __args)
+16535:     { ::new ((void*)__ptr) _Tp(std::forward<_Args>(__args)..., *__a._M_a); }
+16535: 
+16535:   template<typename _Tp, typename _Alloc, typename... _Args>
+16535:     void __uses_allocator_construct(const _Alloc& __a, _Tp* __ptr,
+16535:         _Args&&... __args)
+16535:     {
+16535:       __uses_allocator_construct_impl(__use_alloc<_Tp, _Alloc, _Args...>(__a),
+16535:           __ptr, std::forward<_Args>(__args)...);
+16535:     }
+16535: 
+16535: 
+16535: }
+16535: # 41 "/usr/include/c++/8/tuple" 2 3
+16535: # 1 "/usr/include/c++/8/bits/invoke.h" 1 3
+16535: # 33 "/usr/include/c++/8/bits/invoke.h" 3
+16535:        
+16535: # 34 "/usr/include/c++/8/bits/invoke.h" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 52 "/usr/include/c++/8/bits/invoke.h" 3
+16535:   template<typename _Tp, typename _Up = typename __inv_unwrap<_Tp>::type>
+16535:     constexpr _Up&&
+16535:     __invfwd(typename remove_reference<_Tp>::type& __t) noexcept
+16535:     { return static_cast<_Up&&>(__t); }
+16535: 
+16535:   template<typename _Res, typename _Fn, typename... _Args>
+16535:     constexpr _Res
+16535:     __invoke_impl(__invoke_other, _Fn&& __f, _Args&&... __args)
+16535:     { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); }
+16535: 
+16535:   template<typename _Res, typename _MemFun, typename _Tp, typename... _Args>
+16535:     constexpr _Res
+16535:     __invoke_impl(__invoke_memfun_ref, _MemFun&& __f, _Tp&& __t,
+16535:     _Args&&... __args)
+16535:     { return (__invfwd<_Tp>(__t).*__f)(std::forward<_Args>(__args)...); }
+16535: 
+16535:   template<typename _Res, typename _MemFun, typename _Tp, typename... _Args>
+16535:     constexpr _Res
+16535:     __invoke_impl(__invoke_memfun_deref, _MemFun&& __f, _Tp&& __t,
+16535:     _Args&&... __args)
+16535:     {
+16535:       return ((*std::forward<_Tp>(__t)).*__f)(std::forward<_Args>(__args)...);
+16535:     }
+16535: 
+16535:   template<typename _Res, typename _MemPtr, typename _Tp>
+16535:     constexpr _Res
+16535:     __invoke_impl(__invoke_memobj_ref, _MemPtr&& __f, _Tp&& __t)
+16535:     { return __invfwd<_Tp>(__t).*__f; }
+16535: 
+16535:   template<typename _Res, typename _MemPtr, typename _Tp>
+16535:     constexpr _Res
+16535:     __invoke_impl(__invoke_memobj_deref, _MemPtr&& __f, _Tp&& __t)
+16535:     { return (*std::forward<_Tp>(__t)).*__f; }
+16535: 
+16535: 
+16535:   template<typename _Callable, typename... _Args>
+16535:     constexpr typename __invoke_result<_Callable, _Args...>::type
+16535:     __invoke(_Callable&& __fn, _Args&&... __args)
+16535:     noexcept(__is_nothrow_invocable<_Callable, _Args...>::value)
+16535:     {
+16535:       using __result = __invoke_result<_Callable, _Args...>;
+16535:       using __type = typename __result::type;
+16535:       using __tag = typename __result::__invoke_type;
+16535:       return std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn),
+16535:      std::forward<_Args>(__args)...);
+16535:     }
+16535: 
+16535: 
+16535: }
+16535: # 42 "/usr/include/c++/8/tuple" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename... _Elements>
+16535:     class tuple;
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_empty_non_tuple : is_empty<_Tp> { };
+16535: 
+16535: 
+16535:   template<typename _El0, typename... _El>
+16535:     struct __is_empty_non_tuple<tuple<_El0, _El...>> : false_type { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     using __empty_not_final
+16535:     = typename conditional<__is_final(_Tp), false_type,
+16535:       __is_empty_non_tuple<_Tp>>::type;
+16535: 
+16535:   template<std::size_t _Idx, typename _Head,
+16535:     bool = __empty_not_final<_Head>::value>
+16535:     struct _Head_base;
+16535: 
+16535:   template<std::size_t _Idx, typename _Head>
+16535:     struct _Head_base<_Idx, _Head, true>
+16535:     : public _Head
+16535:     {
+16535:       constexpr _Head_base()
+16535:       : _Head() { }
+16535: 
+16535:       constexpr _Head_base(const _Head& __h)
+16535:       : _Head(__h) { }
+16535: 
+16535:       constexpr _Head_base(const _Head_base&) = default;
+16535:       constexpr _Head_base(_Head_base&&) = default;
+16535: 
+16535:       template<typename _UHead>
+16535:         constexpr _Head_base(_UHead&& __h)
+16535:  : _Head(std::forward<_UHead>(__h)) { }
+16535: 
+16535:       _Head_base(allocator_arg_t, __uses_alloc0)
+16535:       : _Head() { }
+16535: 
+16535:       template<typename _Alloc>
+16535:  _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a)
+16535:  : _Head(allocator_arg, *__a._M_a) { }
+16535: 
+16535:       template<typename _Alloc>
+16535:  _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a)
+16535:  : _Head(*__a._M_a) { }
+16535: 
+16535:       template<typename _UHead>
+16535:  _Head_base(__uses_alloc0, _UHead&& __uhead)
+16535:  : _Head(std::forward<_UHead>(__uhead)) { }
+16535: 
+16535:       template<typename _Alloc, typename _UHead>
+16535:  _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead)
+16535:  : _Head(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead)) { }
+16535: 
+16535:       template<typename _Alloc, typename _UHead>
+16535:  _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead)
+16535:  : _Head(std::forward<_UHead>(__uhead), *__a._M_a) { }
+16535: 
+16535:       static constexpr _Head&
+16535:       _M_head(_Head_base& __b) noexcept { return __b; }
+16535: 
+16535:       static constexpr const _Head&
+16535:       _M_head(const _Head_base& __b) noexcept { return __b; }
+16535:     };
+16535: 
+16535:   template<std::size_t _Idx, typename _Head>
+16535:     struct _Head_base<_Idx, _Head, false>
+16535:     {
+16535:       constexpr _Head_base()
+16535:       : _M_head_impl() { }
+16535: 
+16535:       constexpr _Head_base(const _Head& __h)
+16535:       : _M_head_impl(__h) { }
+16535: 
+16535:       constexpr _Head_base(const _Head_base&) = default;
+16535:       constexpr _Head_base(_Head_base&&) = default;
+16535: 
+16535:       template<typename _UHead>
+16535:         constexpr _Head_base(_UHead&& __h)
+16535:  : _M_head_impl(std::forward<_UHead>(__h)) { }
+16535: 
+16535:       _Head_base(allocator_arg_t, __uses_alloc0)
+16535:       : _M_head_impl() { }
+16535: 
+16535:       template<typename _Alloc>
+16535:  _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a)
+16535:  : _M_head_impl(allocator_arg, *__a._M_a) { }
+16535: 
+16535:       template<typename _Alloc>
+16535:  _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a)
+16535:  : _M_head_impl(*__a._M_a) { }
+16535: 
+16535:       template<typename _UHead>
+16535:  _Head_base(__uses_alloc0, _UHead&& __uhead)
+16535:  : _M_head_impl(std::forward<_UHead>(__uhead)) { }
+16535: 
+16535:       template<typename _Alloc, typename _UHead>
+16535:  _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead)
+16535:  : _M_head_impl(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead))
+16535:  { }
+16535: 
+16535:       template<typename _Alloc, typename _UHead>
+16535:  _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead)
+16535:  : _M_head_impl(std::forward<_UHead>(__uhead), *__a._M_a) { }
+16535: 
+16535:       static constexpr _Head&
+16535:       _M_head(_Head_base& __b) noexcept { return __b._M_head_impl; }
+16535: 
+16535:       static constexpr const _Head&
+16535:       _M_head(const _Head_base& __b) noexcept { return __b._M_head_impl; }
+16535: 
+16535:       _Head _M_head_impl;
+16535:     };
+16535: # 176 "/usr/include/c++/8/tuple" 3
+16535:   template<std::size_t _Idx, typename... _Elements>
+16535:     struct _Tuple_impl;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<std::size_t _Idx, typename _Head, typename... _Tail>
+16535:     struct _Tuple_impl<_Idx, _Head, _Tail...>
+16535:     : public _Tuple_impl<_Idx + 1, _Tail...>,
+16535:       private _Head_base<_Idx, _Head>
+16535:     {
+16535:       template<std::size_t, typename...> friend class _Tuple_impl;
+16535: 
+16535:       typedef _Tuple_impl<_Idx + 1, _Tail...> _Inherited;
+16535:       typedef _Head_base<_Idx, _Head> _Base;
+16535: 
+16535:       static constexpr _Head&
+16535:       _M_head(_Tuple_impl& __t) noexcept { return _Base::_M_head(__t); }
+16535: 
+16535:       static constexpr const _Head&
+16535:       _M_head(const _Tuple_impl& __t) noexcept { return _Base::_M_head(__t); }
+16535: 
+16535:       static constexpr _Inherited&
+16535:       _M_tail(_Tuple_impl& __t) noexcept { return __t; }
+16535: 
+16535:       static constexpr const _Inherited&
+16535:       _M_tail(const _Tuple_impl& __t) noexcept { return __t; }
+16535: 
+16535:       constexpr _Tuple_impl()
+16535:       : _Inherited(), _Base() { }
+16535: 
+16535:       explicit
+16535:       constexpr _Tuple_impl(const _Head& __head, const _Tail&... __tail)
+16535:       : _Inherited(__tail...), _Base(__head) { }
+16535: 
+16535:       template<typename _UHead, typename... _UTail, typename = typename
+16535:                enable_if<sizeof...(_Tail) == sizeof...(_UTail)>::type>
+16535:         explicit
+16535:         constexpr _Tuple_impl(_UHead&& __head, _UTail&&... __tail)
+16535:  : _Inherited(std::forward<_UTail>(__tail)...),
+16535:    _Base(std::forward<_UHead>(__head)) { }
+16535: 
+16535:       constexpr _Tuple_impl(const _Tuple_impl&) = default;
+16535: 
+16535:       constexpr
+16535:       _Tuple_impl(_Tuple_impl&& __in)
+16535:       noexcept(__and_<is_nothrow_move_constructible<_Head>,
+16535:                is_nothrow_move_constructible<_Inherited>>::value)
+16535:       : _Inherited(std::move(_M_tail(__in))),
+16535:  _Base(std::forward<_Head>(_M_head(__in))) { }
+16535: 
+16535:       template<typename... _UElements>
+16535:         constexpr _Tuple_impl(const _Tuple_impl<_Idx, _UElements...>& __in)
+16535:  : _Inherited(_Tuple_impl<_Idx, _UElements...>::_M_tail(__in)),
+16535:    _Base(_Tuple_impl<_Idx, _UElements...>::_M_head(__in)) { }
+16535: 
+16535:       template<typename _UHead, typename... _UTails>
+16535:         constexpr _Tuple_impl(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in)
+16535:  : _Inherited(std::move
+16535:        (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))),
+16535:    _Base(std::forward<_UHead>
+16535:   (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))) { }
+16535: 
+16535:       template<typename _Alloc>
+16535:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a)
+16535:  : _Inherited(__tag, __a),
+16535:           _Base(__tag, __use_alloc<_Head>(__a)) { }
+16535: 
+16535:       template<typename _Alloc>
+16535:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+16535:       const _Head& __head, const _Tail&... __tail)
+16535:  : _Inherited(__tag, __a, __tail...),
+16535:           _Base(__use_alloc<_Head, _Alloc, _Head>(__a), __head) { }
+16535: 
+16535:       template<typename _Alloc, typename _UHead, typename... _UTail,
+16535:                typename = typename enable_if<sizeof...(_Tail)
+16535:           == sizeof...(_UTail)>::type>
+16535:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+16535:              _UHead&& __head, _UTail&&... __tail)
+16535:  : _Inherited(__tag, __a, std::forward<_UTail>(__tail)...),
+16535:           _Base(__use_alloc<_Head, _Alloc, _UHead>(__a),
+16535:          std::forward<_UHead>(__head)) { }
+16535: 
+16535:       template<typename _Alloc>
+16535:         _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+16535:              const _Tuple_impl& __in)
+16535:  : _Inherited(__tag, __a, _M_tail(__in)),
+16535:           _Base(__use_alloc<_Head, _Alloc, _Head>(__a), _M_head(__in)) { }
+16535: 
+16535:       template<typename _Alloc>
+16535:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+16535:              _Tuple_impl&& __in)
+16535:  : _Inherited(__tag, __a, std::move(_M_tail(__in))),
+16535:    _Base(__use_alloc<_Head, _Alloc, _Head>(__a),
+16535:          std::forward<_Head>(_M_head(__in))) { }
+16535: 
+16535:       template<typename _Alloc, typename... _UElements>
+16535:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+16535:              const _Tuple_impl<_Idx, _UElements...>& __in)
+16535:  : _Inherited(__tag, __a,
+16535:        _Tuple_impl<_Idx, _UElements...>::_M_tail(__in)),
+16535:    _Base(__use_alloc<_Head, _Alloc, _Head>(__a),
+16535:   _Tuple_impl<_Idx, _UElements...>::_M_head(__in)) { }
+16535: 
+16535:       template<typename _Alloc, typename _UHead, typename... _UTails>
+16535:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+16535:              _Tuple_impl<_Idx, _UHead, _UTails...>&& __in)
+16535:  : _Inherited(__tag, __a, std::move
+16535:        (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))),
+16535:    _Base(__use_alloc<_Head, _Alloc, _UHead>(__a),
+16535:                 std::forward<_UHead>
+16535:   (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))) { }
+16535: 
+16535:       _Tuple_impl&
+16535:       operator=(const _Tuple_impl& __in)
+16535:       {
+16535:  _M_head(*this) = _M_head(__in);
+16535:  _M_tail(*this) = _M_tail(__in);
+16535:  return *this;
+16535:       }
+16535: 
+16535:       _Tuple_impl&
+16535:       operator=(_Tuple_impl&& __in)
+16535:       noexcept(__and_<is_nothrow_move_assignable<_Head>,
+16535:                is_nothrow_move_assignable<_Inherited>>::value)
+16535:       {
+16535:  _M_head(*this) = std::forward<_Head>(_M_head(__in));
+16535:  _M_tail(*this) = std::move(_M_tail(__in));
+16535:  return *this;
+16535:       }
+16535: 
+16535:       template<typename... _UElements>
+16535:         _Tuple_impl&
+16535:         operator=(const _Tuple_impl<_Idx, _UElements...>& __in)
+16535:         {
+16535:    _M_head(*this) = _Tuple_impl<_Idx, _UElements...>::_M_head(__in);
+16535:    _M_tail(*this) = _Tuple_impl<_Idx, _UElements...>::_M_tail(__in);
+16535:    return *this;
+16535:  }
+16535: 
+16535:       template<typename _UHead, typename... _UTails>
+16535:         _Tuple_impl&
+16535:         operator=(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in)
+16535:         {
+16535:    _M_head(*this) = std::forward<_UHead>
+16535:      (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in));
+16535:    _M_tail(*this) = std::move
+16535:      (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in));
+16535:    return *this;
+16535:  }
+16535: 
+16535:     protected:
+16535:       void
+16535:       _M_swap(_Tuple_impl& __in)
+16535:       noexcept(__is_nothrow_swappable<_Head>::value
+16535:                && noexcept(_M_tail(__in)._M_swap(_M_tail(__in))))
+16535:       {
+16535:  using std::swap;
+16535:  swap(_M_head(*this), _M_head(__in));
+16535:  _Inherited::_M_swap(_M_tail(__in));
+16535:       }
+16535:     };
+16535: 
+16535: 
+16535:   template<std::size_t _Idx, typename _Head>
+16535:     struct _Tuple_impl<_Idx, _Head>
+16535:     : private _Head_base<_Idx, _Head>
+16535:     {
+16535:       template<std::size_t, typename...> friend class _Tuple_impl;
+16535: 
+16535:       typedef _Head_base<_Idx, _Head> _Base;
+16535: 
+16535:       static constexpr _Head&
+16535:       _M_head(_Tuple_impl& __t) noexcept { return _Base::_M_head(__t); }
+16535: 
+16535:       static constexpr const _Head&
+16535:       _M_head(const _Tuple_impl& __t) noexcept { return _Base::_M_head(__t); }
+16535: 
+16535:       constexpr _Tuple_impl()
+16535:       : _Base() { }
+16535: 
+16535:       explicit
+16535:       constexpr _Tuple_impl(const _Head& __head)
+16535:       : _Base(__head) { }
+16535: 
+16535:       template<typename _UHead>
+16535:         explicit
+16535:         constexpr _Tuple_impl(_UHead&& __head)
+16535:  : _Base(std::forward<_UHead>(__head)) { }
+16535: 
+16535:       constexpr _Tuple_impl(const _Tuple_impl&) = default;
+16535: 
+16535:       constexpr
+16535:       _Tuple_impl(_Tuple_impl&& __in)
+16535:       noexcept(is_nothrow_move_constructible<_Head>::value)
+16535:       : _Base(std::forward<_Head>(_M_head(__in))) { }
+16535: 
+16535:       template<typename _UHead>
+16535:         constexpr _Tuple_impl(const _Tuple_impl<_Idx, _UHead>& __in)
+16535:  : _Base(_Tuple_impl<_Idx, _UHead>::_M_head(__in)) { }
+16535: 
+16535:       template<typename _UHead>
+16535:         constexpr _Tuple_impl(_Tuple_impl<_Idx, _UHead>&& __in)
+16535:  : _Base(std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in)))
+16535:  { }
+16535: 
+16535:       template<typename _Alloc>
+16535:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a)
+16535:  : _Base(__tag, __use_alloc<_Head>(__a)) { }
+16535: 
+16535:       template<typename _Alloc>
+16535:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+16535:       const _Head& __head)
+16535:  : _Base(__use_alloc<_Head, _Alloc, _Head>(__a), __head) { }
+16535: 
+16535:       template<typename _Alloc, typename _UHead>
+16535:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+16535:              _UHead&& __head)
+16535:  : _Base(__use_alloc<_Head, _Alloc, _UHead>(__a),
+16535:          std::forward<_UHead>(__head)) { }
+16535: 
+16535:       template<typename _Alloc>
+16535:         _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+16535:              const _Tuple_impl& __in)
+16535:  : _Base(__use_alloc<_Head, _Alloc, _Head>(__a), _M_head(__in)) { }
+16535: 
+16535:       template<typename _Alloc>
+16535:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+16535:              _Tuple_impl&& __in)
+16535:  : _Base(__use_alloc<_Head, _Alloc, _Head>(__a),
+16535:          std::forward<_Head>(_M_head(__in))) { }
+16535: 
+16535:       template<typename _Alloc, typename _UHead>
+16535:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+16535:              const _Tuple_impl<_Idx, _UHead>& __in)
+16535:  : _Base(__use_alloc<_Head, _Alloc, _Head>(__a),
+16535:   _Tuple_impl<_Idx, _UHead>::_M_head(__in)) { }
+16535: 
+16535:       template<typename _Alloc, typename _UHead>
+16535:  _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a,
+16535:              _Tuple_impl<_Idx, _UHead>&& __in)
+16535:  : _Base(__use_alloc<_Head, _Alloc, _UHead>(__a),
+16535:                 std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in)))
+16535:  { }
+16535: 
+16535:       _Tuple_impl&
+16535:       operator=(const _Tuple_impl& __in)
+16535:       {
+16535:  _M_head(*this) = _M_head(__in);
+16535:  return *this;
+16535:       }
+16535: 
+16535:       _Tuple_impl&
+16535:       operator=(_Tuple_impl&& __in)
+16535:       noexcept(is_nothrow_move_assignable<_Head>::value)
+16535:       {
+16535:  _M_head(*this) = std::forward<_Head>(_M_head(__in));
+16535:  return *this;
+16535:       }
+16535: 
+16535:       template<typename _UHead>
+16535:         _Tuple_impl&
+16535:         operator=(const _Tuple_impl<_Idx, _UHead>& __in)
+16535:         {
+16535:    _M_head(*this) = _Tuple_impl<_Idx, _UHead>::_M_head(__in);
+16535:    return *this;
+16535:  }
+16535: 
+16535:       template<typename _UHead>
+16535:         _Tuple_impl&
+16535:         operator=(_Tuple_impl<_Idx, _UHead>&& __in)
+16535:         {
+16535:    _M_head(*this)
+16535:      = std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in));
+16535:    return *this;
+16535:  }
+16535: 
+16535:     protected:
+16535:       void
+16535:       _M_swap(_Tuple_impl& __in)
+16535:       noexcept(__is_nothrow_swappable<_Head>::value)
+16535:       {
+16535:  using std::swap;
+16535:  swap(_M_head(*this), _M_head(__in));
+16535:       }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<bool, typename... _Elements>
+16535:   struct _TC
+16535:   {
+16535:     template<typename... _UElements>
+16535:     static constexpr bool _ConstructibleTuple()
+16535:     {
+16535:       return __and_<is_constructible<_Elements, const _UElements&>...>::value;
+16535:     }
+16535: 
+16535:     template<typename... _UElements>
+16535:     static constexpr bool _ImplicitlyConvertibleTuple()
+16535:     {
+16535:       return __and_<is_convertible<const _UElements&, _Elements>...>::value;
+16535:     }
+16535: 
+16535:     template<typename... _UElements>
+16535:     static constexpr bool _MoveConstructibleTuple()
+16535:     {
+16535:       return __and_<is_constructible<_Elements, _UElements&&>...>::value;
+16535:     }
+16535: 
+16535:     template<typename... _UElements>
+16535:     static constexpr bool _ImplicitlyMoveConvertibleTuple()
+16535:     {
+16535:       return __and_<is_convertible<_UElements&&, _Elements>...>::value;
+16535:     }
+16535: 
+16535:     template<typename _SrcTuple>
+16535:     static constexpr bool _NonNestedTuple()
+16535:     {
+16535:       return __and_<__not_<is_same<tuple<_Elements...>,
+16535:                                    typename remove_cv<
+16535:                                      typename remove_reference<_SrcTuple>::type
+16535:                                    >::type>>,
+16535:                      __not_<is_convertible<_SrcTuple, _Elements...>>,
+16535:                      __not_<is_constructible<_Elements..., _SrcTuple>>
+16535:               >::value;
+16535:     }
+16535:     template<typename... _UElements>
+16535:     static constexpr bool _NotSameTuple()
+16535:     {
+16535:       return __not_<is_same<tuple<_Elements...>,
+16535:         typename remove_const<
+16535:           typename remove_reference<_UElements...>::type
+16535:           >::type>>::value;
+16535:     }
+16535:   };
+16535: 
+16535:   template<typename... _Elements>
+16535:   struct _TC<false, _Elements...>
+16535:   {
+16535:     template<typename... _UElements>
+16535:     static constexpr bool _ConstructibleTuple()
+16535:     {
+16535:       return false;
+16535:     }
+16535: 
+16535:     template<typename... _UElements>
+16535:     static constexpr bool _ImplicitlyConvertibleTuple()
+16535:     {
+16535:       return false;
+16535:     }
+16535: 
+16535:     template<typename... _UElements>
+16535:     static constexpr bool _MoveConstructibleTuple()
+16535:     {
+16535:       return false;
+16535:     }
+16535: 
+16535:     template<typename... _UElements>
+16535:     static constexpr bool _ImplicitlyMoveConvertibleTuple()
+16535:     {
+16535:       return false;
+16535:     }
+16535: 
+16535:     template<typename... _UElements>
+16535:     static constexpr bool _NonNestedTuple()
+16535:     {
+16535:       return true;
+16535:     }
+16535:     template<typename... _UElements>
+16535:     static constexpr bool _NotSameTuple()
+16535:     {
+16535:       return true;
+16535:     }
+16535:   };
+16535: 
+16535: 
+16535:   template<typename... _Elements>
+16535:     class tuple : public _Tuple_impl<0, _Elements...>
+16535:     {
+16535:       typedef _Tuple_impl<0, _Elements...> _Inherited;
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Dummy>
+16535:       struct _TC2
+16535:       {
+16535:         static constexpr bool _DefaultConstructibleTuple()
+16535:         {
+16535:           return __and_<is_default_constructible<_Elements>...>::value;
+16535:         }
+16535:         static constexpr bool _ImplicitlyDefaultConstructibleTuple()
+16535:         {
+16535:           return __and_<__is_implicitly_default_constructible<_Elements>...>
+16535:             ::value;
+16535:         }
+16535:       };
+16535: 
+16535:     public:
+16535:       template<typename _Dummy = void,
+16535:                typename enable_if<_TC2<_Dummy>::
+16535:                                     _ImplicitlyDefaultConstructibleTuple(),
+16535:                                   bool>::type = true>
+16535:       constexpr tuple()
+16535:       : _Inherited() { }
+16535: 
+16535:       template<typename _Dummy = void,
+16535:                typename enable_if<_TC2<_Dummy>::
+16535:                                     _DefaultConstructibleTuple()
+16535:                                   &&
+16535:                                   !_TC2<_Dummy>::
+16535:                                     _ImplicitlyDefaultConstructibleTuple(),
+16535:                                   bool>::type = false>
+16535:       explicit constexpr tuple()
+16535:       : _Inherited() { }
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Dummy> using _TCC =
+16535:         _TC<is_same<_Dummy, void>::value,
+16535:             _Elements...>;
+16535: 
+16535:       template<typename _Dummy = void,
+16535:                typename enable_if<
+16535:                  _TCC<_Dummy>::template
+16535:                    _ConstructibleTuple<_Elements...>()
+16535:                  && _TCC<_Dummy>::template
+16535:                    _ImplicitlyConvertibleTuple<_Elements...>()
+16535:                  && (sizeof...(_Elements) >= 1),
+16535:                bool>::type=true>
+16535:         constexpr tuple(const _Elements&... __elements)
+16535:       : _Inherited(__elements...) { }
+16535: 
+16535:       template<typename _Dummy = void,
+16535:                typename enable_if<
+16535:                  _TCC<_Dummy>::template
+16535:                    _ConstructibleTuple<_Elements...>()
+16535:                  && !_TCC<_Dummy>::template
+16535:                    _ImplicitlyConvertibleTuple<_Elements...>()
+16535:                  && (sizeof...(_Elements) >= 1),
+16535:                bool>::type=false>
+16535:       explicit constexpr tuple(const _Elements&... __elements)
+16535:       : _Inherited(__elements...) { }
+16535: 
+16535: 
+16535: 
+16535:       template<typename... _UElements> using _TMC =
+16535:                   _TC<(sizeof...(_Elements) == sizeof...(_UElements))
+16535:         && (_TC<(sizeof...(_UElements)==1), _Elements...>::
+16535:      template _NotSameTuple<_UElements...>()),
+16535:                       _Elements...>;
+16535: 
+16535: 
+16535: 
+16535:       template<typename... _UElements> using _TMCT =
+16535:                   _TC<(sizeof...(_Elements) == sizeof...(_UElements))
+16535:         && !is_same<tuple<_Elements...>,
+16535:       tuple<_UElements...>>::value,
+16535:                       _Elements...>;
+16535: 
+16535:       template<typename... _UElements, typename
+16535:         enable_if<
+16535:     _TMC<_UElements...>::template
+16535:                     _MoveConstructibleTuple<_UElements...>()
+16535:                   && _TMC<_UElements...>::template
+16535:                     _ImplicitlyMoveConvertibleTuple<_UElements...>()
+16535:                   && (sizeof...(_Elements) >= 1),
+16535:         bool>::type=true>
+16535:         constexpr tuple(_UElements&&... __elements)
+16535:         : _Inherited(std::forward<_UElements>(__elements)...) { }
+16535: 
+16535:       template<typename... _UElements, typename
+16535:         enable_if<
+16535:     _TMC<_UElements...>::template
+16535:                     _MoveConstructibleTuple<_UElements...>()
+16535:                   && !_TMC<_UElements...>::template
+16535:                     _ImplicitlyMoveConvertibleTuple<_UElements...>()
+16535:                   && (sizeof...(_Elements) >= 1),
+16535:         bool>::type=false>
+16535:         explicit constexpr tuple(_UElements&&... __elements)
+16535:  : _Inherited(std::forward<_UElements>(__elements)...) { }
+16535: 
+16535:       constexpr tuple(const tuple&) = default;
+16535: 
+16535:       constexpr tuple(tuple&&) = default;
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Dummy> using _TNTC =
+16535:         _TC<is_same<_Dummy, void>::value && sizeof...(_Elements) == 1,
+16535:             _Elements...>;
+16535: 
+16535:       template<typename... _UElements, typename _Dummy = void, typename
+16535:         enable_if<_TMCT<_UElements...>::template
+16535:                     _ConstructibleTuple<_UElements...>()
+16535:                   && _TMCT<_UElements...>::template
+16535:                     _ImplicitlyConvertibleTuple<_UElements...>()
+16535:                   && _TNTC<_Dummy>::template
+16535:                     _NonNestedTuple<const tuple<_UElements...>&>(),
+16535:         bool>::type=true>
+16535:         constexpr tuple(const tuple<_UElements...>& __in)
+16535:         : _Inherited(static_cast<const _Tuple_impl<0, _UElements...>&>(__in))
+16535:         { }
+16535: 
+16535:       template<typename... _UElements, typename _Dummy = void, typename
+16535:         enable_if<_TMCT<_UElements...>::template
+16535:                     _ConstructibleTuple<_UElements...>()
+16535:                   && !_TMCT<_UElements...>::template
+16535:                     _ImplicitlyConvertibleTuple<_UElements...>()
+16535:                   && _TNTC<_Dummy>::template
+16535:                     _NonNestedTuple<const tuple<_UElements...>&>(),
+16535:         bool>::type=false>
+16535:         explicit constexpr tuple(const tuple<_UElements...>& __in)
+16535:         : _Inherited(static_cast<const _Tuple_impl<0, _UElements...>&>(__in))
+16535:         { }
+16535: 
+16535:       template<typename... _UElements, typename _Dummy = void, typename
+16535:         enable_if<_TMCT<_UElements...>::template
+16535:                     _MoveConstructibleTuple<_UElements...>()
+16535:                   && _TMCT<_UElements...>::template
+16535:                     _ImplicitlyMoveConvertibleTuple<_UElements...>()
+16535:                   && _TNTC<_Dummy>::template
+16535:                     _NonNestedTuple<tuple<_UElements...>&&>(),
+16535:         bool>::type=true>
+16535:         constexpr tuple(tuple<_UElements...>&& __in)
+16535:         : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) { }
+16535: 
+16535:       template<typename... _UElements, typename _Dummy = void, typename
+16535:         enable_if<_TMCT<_UElements...>::template
+16535:                     _MoveConstructibleTuple<_UElements...>()
+16535:                   && !_TMCT<_UElements...>::template
+16535:                     _ImplicitlyMoveConvertibleTuple<_UElements...>()
+16535:                   && _TNTC<_Dummy>::template
+16535:                     _NonNestedTuple<tuple<_UElements...>&&>(),
+16535:         bool>::type=false>
+16535:         explicit constexpr tuple(tuple<_UElements...>&& __in)
+16535:         : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) { }
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Alloc>
+16535:  tuple(allocator_arg_t __tag, const _Alloc& __a)
+16535:  : _Inherited(__tag, __a) { }
+16535: 
+16535:       template<typename _Alloc, typename _Dummy = void,
+16535:                typename enable_if<
+16535:                  _TCC<_Dummy>::template
+16535:                    _ConstructibleTuple<_Elements...>()
+16535:                  && _TCC<_Dummy>::template
+16535:                    _ImplicitlyConvertibleTuple<_Elements...>(),
+16535:                bool>::type=true>
+16535:  tuple(allocator_arg_t __tag, const _Alloc& __a,
+16535:        const _Elements&... __elements)
+16535:  : _Inherited(__tag, __a, __elements...) { }
+16535: 
+16535:       template<typename _Alloc, typename _Dummy = void,
+16535:                typename enable_if<
+16535:                  _TCC<_Dummy>::template
+16535:                    _ConstructibleTuple<_Elements...>()
+16535:                  && !_TCC<_Dummy>::template
+16535:                    _ImplicitlyConvertibleTuple<_Elements...>(),
+16535:                bool>::type=false>
+16535:  explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
+16535:                        const _Elements&... __elements)
+16535:  : _Inherited(__tag, __a, __elements...) { }
+16535: 
+16535:       template<typename _Alloc, typename... _UElements, typename
+16535:         enable_if<_TMC<_UElements...>::template
+16535:                     _MoveConstructibleTuple<_UElements...>()
+16535:                   && _TMC<_UElements...>::template
+16535:                     _ImplicitlyMoveConvertibleTuple<_UElements...>(),
+16535:         bool>::type=true>
+16535:  tuple(allocator_arg_t __tag, const _Alloc& __a,
+16535:        _UElements&&... __elements)
+16535:  : _Inherited(__tag, __a, std::forward<_UElements>(__elements)...)
+16535:         { }
+16535: 
+16535:       template<typename _Alloc, typename... _UElements, typename
+16535:         enable_if<_TMC<_UElements...>::template
+16535:                     _MoveConstructibleTuple<_UElements...>()
+16535:                   && !_TMC<_UElements...>::template
+16535:                     _ImplicitlyMoveConvertibleTuple<_UElements...>(),
+16535:         bool>::type=false>
+16535:  explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
+16535:        _UElements&&... __elements)
+16535:  : _Inherited(__tag, __a, std::forward<_UElements>(__elements)...)
+16535:         { }
+16535: 
+16535:       template<typename _Alloc>
+16535:  tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __in)
+16535:  : _Inherited(__tag, __a, static_cast<const _Inherited&>(__in)) { }
+16535: 
+16535:       template<typename _Alloc>
+16535:  tuple(allocator_arg_t __tag, const _Alloc& __a, tuple&& __in)
+16535:  : _Inherited(__tag, __a, static_cast<_Inherited&&>(__in)) { }
+16535: 
+16535:       template<typename _Alloc, typename _Dummy = void,
+16535:         typename... _UElements, typename
+16535:         enable_if<_TMCT<_UElements...>::template
+16535:                     _ConstructibleTuple<_UElements...>()
+16535:                   && _TMCT<_UElements...>::template
+16535:                     _ImplicitlyConvertibleTuple<_UElements...>()
+16535:                   && _TNTC<_Dummy>::template
+16535:                     _NonNestedTuple<tuple<_UElements...>&&>(),
+16535:         bool>::type=true>
+16535:  tuple(allocator_arg_t __tag, const _Alloc& __a,
+16535:        const tuple<_UElements...>& __in)
+16535:  : _Inherited(__tag, __a,
+16535:               static_cast<const _Tuple_impl<0, _UElements...>&>(__in))
+16535:  { }
+16535: 
+16535:       template<typename _Alloc, typename _Dummy = void,
+16535:         typename... _UElements, typename
+16535:         enable_if<_TMCT<_UElements...>::template
+16535:                     _ConstructibleTuple<_UElements...>()
+16535:                   && !_TMCT<_UElements...>::template
+16535:                     _ImplicitlyConvertibleTuple<_UElements...>()
+16535:                   && _TNTC<_Dummy>::template
+16535:                     _NonNestedTuple<tuple<_UElements...>&&>(),
+16535:         bool>::type=false>
+16535:  explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
+16535:        const tuple<_UElements...>& __in)
+16535:  : _Inherited(__tag, __a,
+16535:               static_cast<const _Tuple_impl<0, _UElements...>&>(__in))
+16535:  { }
+16535: 
+16535:       template<typename _Alloc, typename _Dummy = void,
+16535:         typename... _UElements, typename
+16535:         enable_if<_TMCT<_UElements...>::template
+16535:                     _MoveConstructibleTuple<_UElements...>()
+16535:                   && _TMCT<_UElements...>::template
+16535:                     _ImplicitlyMoveConvertibleTuple<_UElements...>()
+16535:                   && _TNTC<_Dummy>::template
+16535:                     _NonNestedTuple<tuple<_UElements...>&&>(),
+16535:         bool>::type=true>
+16535:  tuple(allocator_arg_t __tag, const _Alloc& __a,
+16535:        tuple<_UElements...>&& __in)
+16535:  : _Inherited(__tag, __a,
+16535:               static_cast<_Tuple_impl<0, _UElements...>&&>(__in))
+16535:  { }
+16535: 
+16535:       template<typename _Alloc, typename _Dummy = void,
+16535:         typename... _UElements, typename
+16535:         enable_if<_TMCT<_UElements...>::template
+16535:                     _MoveConstructibleTuple<_UElements...>()
+16535:                   && !_TMCT<_UElements...>::template
+16535:                     _ImplicitlyMoveConvertibleTuple<_UElements...>()
+16535:                   && _TNTC<_Dummy>::template
+16535:                     _NonNestedTuple<tuple<_UElements...>&&>(),
+16535:         bool>::type=false>
+16535:  explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
+16535:        tuple<_UElements...>&& __in)
+16535:  : _Inherited(__tag, __a,
+16535:               static_cast<_Tuple_impl<0, _UElements...>&&>(__in))
+16535:  { }
+16535: 
+16535:       tuple&
+16535:       operator=(const tuple& __in)
+16535:       {
+16535:  static_cast<_Inherited&>(*this) = __in;
+16535:  return *this;
+16535:       }
+16535: 
+16535:       tuple&
+16535:       operator=(tuple&& __in)
+16535:       noexcept(is_nothrow_move_assignable<_Inherited>::value)
+16535:       {
+16535:  static_cast<_Inherited&>(*this) = std::move(__in);
+16535:  return *this;
+16535:       }
+16535: 
+16535:       template<typename... _UElements>
+16535:  typename
+16535:         enable_if<sizeof...(_UElements)
+16535:     == sizeof...(_Elements), tuple&>::type
+16535:         operator=(const tuple<_UElements...>& __in)
+16535:         {
+16535:    static_cast<_Inherited&>(*this) = __in;
+16535:    return *this;
+16535:  }
+16535: 
+16535:       template<typename... _UElements>
+16535:  typename
+16535:         enable_if<sizeof...(_UElements)
+16535:     == sizeof...(_Elements), tuple&>::type
+16535:         operator=(tuple<_UElements...>&& __in)
+16535:         {
+16535:    static_cast<_Inherited&>(*this) = std::move(__in);
+16535:    return *this;
+16535:  }
+16535: 
+16535:       void
+16535:       swap(tuple& __in)
+16535:       noexcept(noexcept(__in._M_swap(__in)))
+16535:       { _Inherited::_M_swap(__in); }
+16535:     };
+16535: # 889 "/usr/include/c++/8/tuple" 3
+16535:   template<>
+16535:     class tuple<>
+16535:     {
+16535:     public:
+16535:       void swap(tuple&) noexcept { }
+16535: 
+16535: 
+16535:       tuple() = default;
+16535: 
+16535:       template<typename _Alloc>
+16535:  tuple(allocator_arg_t, const _Alloc&) { }
+16535:       template<typename _Alloc>
+16535:  tuple(allocator_arg_t, const _Alloc&, const tuple&) { }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _T1, typename _T2>
+16535:     class tuple<_T1, _T2> : public _Tuple_impl<0, _T1, _T2>
+16535:     {
+16535:       typedef _Tuple_impl<0, _T1, _T2> _Inherited;
+16535: 
+16535:     public:
+16535:       template <typename _U1 = _T1,
+16535:                 typename _U2 = _T2,
+16535:                 typename enable_if<__and_<
+16535:                                      __is_implicitly_default_constructible<_U1>,
+16535:                                      __is_implicitly_default_constructible<_U2>>
+16535:                                    ::value, bool>::type = true>
+16535: 
+16535:       constexpr tuple()
+16535:       : _Inherited() { }
+16535: 
+16535:       template <typename _U1 = _T1,
+16535:                 typename _U2 = _T2,
+16535:                 typename enable_if<
+16535:                   __and_<
+16535:                     is_default_constructible<_U1>,
+16535:                     is_default_constructible<_U2>,
+16535:                     __not_<
+16535:                       __and_<__is_implicitly_default_constructible<_U1>,
+16535:                              __is_implicitly_default_constructible<_U2>>>>
+16535:                   ::value, bool>::type = false>
+16535: 
+16535:       explicit constexpr tuple()
+16535:       : _Inherited() { }
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Dummy> using _TCC =
+16535:         _TC<is_same<_Dummy, void>::value, _T1, _T2>;
+16535: 
+16535:       template<typename _Dummy = void, typename
+16535:                enable_if<_TCC<_Dummy>::template
+16535:                            _ConstructibleTuple<_T1, _T2>()
+16535:                          && _TCC<_Dummy>::template
+16535:                            _ImplicitlyConvertibleTuple<_T1, _T2>(),
+16535:  bool>::type = true>
+16535:         constexpr tuple(const _T1& __a1, const _T2& __a2)
+16535:         : _Inherited(__a1, __a2) { }
+16535: 
+16535:       template<typename _Dummy = void, typename
+16535:                enable_if<_TCC<_Dummy>::template
+16535:                            _ConstructibleTuple<_T1, _T2>()
+16535:                          && !_TCC<_Dummy>::template
+16535:                            _ImplicitlyConvertibleTuple<_T1, _T2>(),
+16535:  bool>::type = false>
+16535:         explicit constexpr tuple(const _T1& __a1, const _T2& __a2)
+16535:         : _Inherited(__a1, __a2) { }
+16535: 
+16535: 
+16535: 
+16535:       using _TMC = _TC<true, _T1, _T2>;
+16535: 
+16535:       template<typename _U1, typename _U2, typename
+16535:         enable_if<_TMC::template
+16535:                     _MoveConstructibleTuple<_U1, _U2>()
+16535:                   && _TMC::template
+16535:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>()
+16535:            && !is_same<typename decay<_U1>::type,
+16535:          allocator_arg_t>::value,
+16535:  bool>::type = true>
+16535:         constexpr tuple(_U1&& __a1, _U2&& __a2)
+16535:  : _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { }
+16535: 
+16535:       template<typename _U1, typename _U2, typename
+16535:         enable_if<_TMC::template
+16535:                     _MoveConstructibleTuple<_U1, _U2>()
+16535:                   && !_TMC::template
+16535:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>()
+16535:            && !is_same<typename decay<_U1>::type,
+16535:          allocator_arg_t>::value,
+16535:  bool>::type = false>
+16535:         explicit constexpr tuple(_U1&& __a1, _U2&& __a2)
+16535:  : _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { }
+16535: 
+16535:       constexpr tuple(const tuple&) = default;
+16535: 
+16535:       constexpr tuple(tuple&&) = default;
+16535: 
+16535:       template<typename _U1, typename _U2, typename
+16535:         enable_if<_TMC::template
+16535:                     _ConstructibleTuple<_U1, _U2>()
+16535:                   && _TMC::template
+16535:                     _ImplicitlyConvertibleTuple<_U1, _U2>(),
+16535:  bool>::type = true>
+16535:         constexpr tuple(const tuple<_U1, _U2>& __in)
+16535:  : _Inherited(static_cast<const _Tuple_impl<0, _U1, _U2>&>(__in)) { }
+16535: 
+16535:       template<typename _U1, typename _U2, typename
+16535:         enable_if<_TMC::template
+16535:                     _ConstructibleTuple<_U1, _U2>()
+16535:                   && !_TMC::template
+16535:                     _ImplicitlyConvertibleTuple<_U1, _U2>(),
+16535:  bool>::type = false>
+16535:         explicit constexpr tuple(const tuple<_U1, _U2>& __in)
+16535:  : _Inherited(static_cast<const _Tuple_impl<0, _U1, _U2>&>(__in)) { }
+16535: 
+16535:       template<typename _U1, typename _U2, typename
+16535:         enable_if<_TMC::template
+16535:                     _MoveConstructibleTuple<_U1, _U2>()
+16535:                   && _TMC::template
+16535:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>(),
+16535:  bool>::type = true>
+16535:         constexpr tuple(tuple<_U1, _U2>&& __in)
+16535:  : _Inherited(static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) { }
+16535: 
+16535:       template<typename _U1, typename _U2, typename
+16535:         enable_if<_TMC::template
+16535:                     _MoveConstructibleTuple<_U1, _U2>()
+16535:                   && !_TMC::template
+16535:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>(),
+16535:  bool>::type = false>
+16535:         explicit constexpr tuple(tuple<_U1, _U2>&& __in)
+16535:  : _Inherited(static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) { }
+16535: 
+16535:       template<typename _U1, typename _U2, typename
+16535:         enable_if<_TMC::template
+16535:                     _ConstructibleTuple<_U1, _U2>()
+16535:                   && _TMC::template
+16535:                     _ImplicitlyConvertibleTuple<_U1, _U2>(),
+16535:  bool>::type = true>
+16535:         constexpr tuple(const pair<_U1, _U2>& __in)
+16535:  : _Inherited(__in.first, __in.second) { }
+16535: 
+16535:       template<typename _U1, typename _U2, typename
+16535:         enable_if<_TMC::template
+16535:                     _ConstructibleTuple<_U1, _U2>()
+16535:                   && !_TMC::template
+16535:                     _ImplicitlyConvertibleTuple<_U1, _U2>(),
+16535:  bool>::type = false>
+16535:         explicit constexpr tuple(const pair<_U1, _U2>& __in)
+16535:  : _Inherited(__in.first, __in.second) { }
+16535: 
+16535:       template<typename _U1, typename _U2, typename
+16535:         enable_if<_TMC::template
+16535:                     _MoveConstructibleTuple<_U1, _U2>()
+16535:                   && _TMC::template
+16535:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>(),
+16535:  bool>::type = true>
+16535:         constexpr tuple(pair<_U1, _U2>&& __in)
+16535:  : _Inherited(std::forward<_U1>(__in.first),
+16535:        std::forward<_U2>(__in.second)) { }
+16535: 
+16535:       template<typename _U1, typename _U2, typename
+16535:         enable_if<_TMC::template
+16535:                     _MoveConstructibleTuple<_U1, _U2>()
+16535:                   && !_TMC::template
+16535:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>(),
+16535:  bool>::type = false>
+16535:         explicit constexpr tuple(pair<_U1, _U2>&& __in)
+16535:  : _Inherited(std::forward<_U1>(__in.first),
+16535:        std::forward<_U2>(__in.second)) { }
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Alloc>
+16535:  tuple(allocator_arg_t __tag, const _Alloc& __a)
+16535:  : _Inherited(__tag, __a) { }
+16535: 
+16535:       template<typename _Alloc, typename _Dummy = void,
+16535:                typename enable_if<
+16535:                  _TCC<_Dummy>::template
+16535:                    _ConstructibleTuple<_T1, _T2>()
+16535:                  && _TCC<_Dummy>::template
+16535:                    _ImplicitlyConvertibleTuple<_T1, _T2>(),
+16535:                bool>::type=true>
+16535: 
+16535:  tuple(allocator_arg_t __tag, const _Alloc& __a,
+16535:        const _T1& __a1, const _T2& __a2)
+16535:  : _Inherited(__tag, __a, __a1, __a2) { }
+16535: 
+16535:       template<typename _Alloc, typename _Dummy = void,
+16535:                typename enable_if<
+16535:                  _TCC<_Dummy>::template
+16535:                    _ConstructibleTuple<_T1, _T2>()
+16535:                  && !_TCC<_Dummy>::template
+16535:                    _ImplicitlyConvertibleTuple<_T1, _T2>(),
+16535:                bool>::type=false>
+16535: 
+16535:  explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
+16535:        const _T1& __a1, const _T2& __a2)
+16535:  : _Inherited(__tag, __a, __a1, __a2) { }
+16535: 
+16535:       template<typename _Alloc, typename _U1, typename _U2, typename
+16535:         enable_if<_TMC::template
+16535:                     _MoveConstructibleTuple<_U1, _U2>()
+16535:                   && _TMC::template
+16535:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>(),
+16535:  bool>::type = true>
+16535:  tuple(allocator_arg_t __tag, const _Alloc& __a, _U1&& __a1, _U2&& __a2)
+16535:  : _Inherited(__tag, __a, std::forward<_U1>(__a1),
+16535:               std::forward<_U2>(__a2)) { }
+16535: 
+16535:       template<typename _Alloc, typename _U1, typename _U2, typename
+16535:         enable_if<_TMC::template
+16535:                     _MoveConstructibleTuple<_U1, _U2>()
+16535:                   && !_TMC::template
+16535:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>(),
+16535:  bool>::type = false>
+16535:  explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
+16535:                        _U1&& __a1, _U2&& __a2)
+16535:  : _Inherited(__tag, __a, std::forward<_U1>(__a1),
+16535:               std::forward<_U2>(__a2)) { }
+16535: 
+16535:       template<typename _Alloc>
+16535:  tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __in)
+16535:  : _Inherited(__tag, __a, static_cast<const _Inherited&>(__in)) { }
+16535: 
+16535:       template<typename _Alloc>
+16535:  tuple(allocator_arg_t __tag, const _Alloc& __a, tuple&& __in)
+16535:  : _Inherited(__tag, __a, static_cast<_Inherited&&>(__in)) { }
+16535: 
+16535:       template<typename _Alloc, typename _U1, typename _U2, typename
+16535:         enable_if<_TMC::template
+16535:                     _ConstructibleTuple<_U1, _U2>()
+16535:                   && _TMC::template
+16535:                     _ImplicitlyConvertibleTuple<_U1, _U2>(),
+16535:  bool>::type = true>
+16535:  tuple(allocator_arg_t __tag, const _Alloc& __a,
+16535:        const tuple<_U1, _U2>& __in)
+16535:  : _Inherited(__tag, __a,
+16535:               static_cast<const _Tuple_impl<0, _U1, _U2>&>(__in))
+16535:  { }
+16535: 
+16535:       template<typename _Alloc, typename _U1, typename _U2, typename
+16535:         enable_if<_TMC::template
+16535:                     _ConstructibleTuple<_U1, _U2>()
+16535:                   && !_TMC::template
+16535:                     _ImplicitlyConvertibleTuple<_U1, _U2>(),
+16535:  bool>::type = false>
+16535:  explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
+16535:        const tuple<_U1, _U2>& __in)
+16535:  : _Inherited(__tag, __a,
+16535:               static_cast<const _Tuple_impl<0, _U1, _U2>&>(__in))
+16535:  { }
+16535: 
+16535:       template<typename _Alloc, typename _U1, typename _U2, typename
+16535:         enable_if<_TMC::template
+16535:                     _MoveConstructibleTuple<_U1, _U2>()
+16535:                   && _TMC::template
+16535:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>(),
+16535:  bool>::type = true>
+16535:  tuple(allocator_arg_t __tag, const _Alloc& __a, tuple<_U1, _U2>&& __in)
+16535:  : _Inherited(__tag, __a, static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in))
+16535:  { }
+16535: 
+16535:       template<typename _Alloc, typename _U1, typename _U2, typename
+16535:         enable_if<_TMC::template
+16535:                     _MoveConstructibleTuple<_U1, _U2>()
+16535:                   && !_TMC::template
+16535:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>(),
+16535:  bool>::type = false>
+16535:  explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
+16535:                        tuple<_U1, _U2>&& __in)
+16535:  : _Inherited(__tag, __a, static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in))
+16535:  { }
+16535: 
+16535:       template<typename _Alloc, typename _U1, typename _U2, typename
+16535:         enable_if<_TMC::template
+16535:                     _ConstructibleTuple<_U1, _U2>()
+16535:                   && _TMC::template
+16535:                     _ImplicitlyConvertibleTuple<_U1, _U2>(),
+16535:  bool>::type = true>
+16535:         tuple(allocator_arg_t __tag, const _Alloc& __a,
+16535:        const pair<_U1, _U2>& __in)
+16535:  : _Inherited(__tag, __a, __in.first, __in.second) { }
+16535: 
+16535:       template<typename _Alloc, typename _U1, typename _U2, typename
+16535:         enable_if<_TMC::template
+16535:                     _ConstructibleTuple<_U1, _U2>()
+16535:                   && !_TMC::template
+16535:                     _ImplicitlyConvertibleTuple<_U1, _U2>(),
+16535:  bool>::type = false>
+16535:         explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
+16535:        const pair<_U1, _U2>& __in)
+16535:  : _Inherited(__tag, __a, __in.first, __in.second) { }
+16535: 
+16535:       template<typename _Alloc, typename _U1, typename _U2, typename
+16535:         enable_if<_TMC::template
+16535:                     _MoveConstructibleTuple<_U1, _U2>()
+16535:                   && _TMC::template
+16535:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>(),
+16535:  bool>::type = true>
+16535:         tuple(allocator_arg_t __tag, const _Alloc& __a, pair<_U1, _U2>&& __in)
+16535:  : _Inherited(__tag, __a, std::forward<_U1>(__in.first),
+16535:        std::forward<_U2>(__in.second)) { }
+16535: 
+16535:       template<typename _Alloc, typename _U1, typename _U2, typename
+16535:         enable_if<_TMC::template
+16535:                     _MoveConstructibleTuple<_U1, _U2>()
+16535:                   && !_TMC::template
+16535:                     _ImplicitlyMoveConvertibleTuple<_U1, _U2>(),
+16535:  bool>::type = false>
+16535:         explicit tuple(allocator_arg_t __tag, const _Alloc& __a,
+16535:                        pair<_U1, _U2>&& __in)
+16535:  : _Inherited(__tag, __a, std::forward<_U1>(__in.first),
+16535:        std::forward<_U2>(__in.second)) { }
+16535: 
+16535:       tuple&
+16535:       operator=(const tuple& __in)
+16535:       {
+16535:  static_cast<_Inherited&>(*this) = __in;
+16535:  return *this;
+16535:       }
+16535: 
+16535:       tuple&
+16535:       operator=(tuple&& __in)
+16535:       noexcept(is_nothrow_move_assignable<_Inherited>::value)
+16535:       {
+16535:  static_cast<_Inherited&>(*this) = std::move(__in);
+16535:  return *this;
+16535:       }
+16535: 
+16535:       template<typename _U1, typename _U2>
+16535:         tuple&
+16535:         operator=(const tuple<_U1, _U2>& __in)
+16535:         {
+16535:    static_cast<_Inherited&>(*this) = __in;
+16535:    return *this;
+16535:  }
+16535: 
+16535:       template<typename _U1, typename _U2>
+16535:         tuple&
+16535:         operator=(tuple<_U1, _U2>&& __in)
+16535:         {
+16535:    static_cast<_Inherited&>(*this) = std::move(__in);
+16535:    return *this;
+16535:  }
+16535: 
+16535:       template<typename _U1, typename _U2>
+16535:         tuple&
+16535:         operator=(const pair<_U1, _U2>& __in)
+16535:         {
+16535:    this->_M_head(*this) = __in.first;
+16535:    this->_M_tail(*this)._M_head(*this) = __in.second;
+16535:    return *this;
+16535:  }
+16535: 
+16535:       template<typename _U1, typename _U2>
+16535:         tuple&
+16535:         operator=(pair<_U1, _U2>&& __in)
+16535:         {
+16535:    this->_M_head(*this) = std::forward<_U1>(__in.first);
+16535:    this->_M_tail(*this)._M_head(*this) = std::forward<_U2>(__in.second);
+16535:    return *this;
+16535:  }
+16535: 
+16535:       void
+16535:       swap(tuple& __in)
+16535:       noexcept(noexcept(__in._M_swap(__in)))
+16535:       { _Inherited::_M_swap(__in); }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<typename... _Elements>
+16535:     struct tuple_size<tuple<_Elements...>>
+16535:     : public integral_constant<std::size_t, sizeof...(_Elements)> { };
+16535: # 1278 "/usr/include/c++/8/tuple" 3
+16535:   template<std::size_t __i, typename _Head, typename... _Tail>
+16535:     struct tuple_element<__i, tuple<_Head, _Tail...> >
+16535:     : tuple_element<__i - 1, tuple<_Tail...> > { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Head, typename... _Tail>
+16535:     struct tuple_element<0, tuple<_Head, _Tail...> >
+16535:     {
+16535:       typedef _Head type;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<size_t __i>
+16535:     struct tuple_element<__i, tuple<>>
+16535:     {
+16535:       static_assert(__i < tuple_size<tuple<>>::value,
+16535:    "tuple index is in range");
+16535:     };
+16535: 
+16535:   template<std::size_t __i, typename _Head, typename... _Tail>
+16535:     constexpr _Head&
+16535:     __get_helper(_Tuple_impl<__i, _Head, _Tail...>& __t) noexcept
+16535:     { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); }
+16535: 
+16535:   template<std::size_t __i, typename _Head, typename... _Tail>
+16535:     constexpr const _Head&
+16535:     __get_helper(const _Tuple_impl<__i, _Head, _Tail...>& __t) noexcept
+16535:     { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); }
+16535: 
+16535: 
+16535:   template<std::size_t __i, typename... _Elements>
+16535:     constexpr __tuple_element_t<__i, tuple<_Elements...>>&
+16535:     get(tuple<_Elements...>& __t) noexcept
+16535:     { return std::__get_helper<__i>(__t); }
+16535: 
+16535: 
+16535:   template<std::size_t __i, typename... _Elements>
+16535:     constexpr const __tuple_element_t<__i, tuple<_Elements...>>&
+16535:     get(const tuple<_Elements...>& __t) noexcept
+16535:     { return std::__get_helper<__i>(__t); }
+16535: 
+16535: 
+16535:   template<std::size_t __i, typename... _Elements>
+16535:     constexpr __tuple_element_t<__i, tuple<_Elements...>>&&
+16535:     get(tuple<_Elements...>&& __t) noexcept
+16535:     {
+16535:       typedef __tuple_element_t<__i, tuple<_Elements...>> __element_type;
+16535:       return std::forward<__element_type&&>(std::get<__i>(__t));
+16535:     }
+16535: 
+16535: 
+16535:   template<std::size_t __i, typename... _Elements>
+16535:     constexpr const __tuple_element_t<__i, tuple<_Elements...>>&&
+16535:     get(const tuple<_Elements...>&& __t) noexcept
+16535:     {
+16535:       typedef __tuple_element_t<__i, tuple<_Elements...>> __element_type;
+16535:       return std::forward<const __element_type&&>(std::get<__i>(__t));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Head, size_t __i, typename... _Tail>
+16535:     constexpr _Head&
+16535:     __get_helper2(_Tuple_impl<__i, _Head, _Tail...>& __t) noexcept
+16535:     { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); }
+16535: 
+16535:   template<typename _Head, size_t __i, typename... _Tail>
+16535:     constexpr const _Head&
+16535:     __get_helper2(const _Tuple_impl<__i, _Head, _Tail...>& __t) noexcept
+16535:     { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); }
+16535: 
+16535: 
+16535:   template <typename _Tp, typename... _Types>
+16535:     constexpr _Tp&
+16535:     get(tuple<_Types...>& __t) noexcept
+16535:     { return std::__get_helper2<_Tp>(__t); }
+16535: 
+16535: 
+16535:   template <typename _Tp, typename... _Types>
+16535:     constexpr _Tp&&
+16535:     get(tuple<_Types...>&& __t) noexcept
+16535:     { return std::forward<_Tp&&>(std::__get_helper2<_Tp>(__t)); }
+16535: 
+16535: 
+16535:   template <typename _Tp, typename... _Types>
+16535:     constexpr const _Tp&
+16535:     get(const tuple<_Types...>& __t) noexcept
+16535:     { return std::__get_helper2<_Tp>(__t); }
+16535: 
+16535: 
+16535: 
+16535:   template <typename _Tp, typename... _Types>
+16535:     constexpr const _Tp&&
+16535:     get(const tuple<_Types...>&& __t) noexcept
+16535:     { return std::forward<const _Tp&&>(std::__get_helper2<_Tp>(__t)); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up, size_t __i, size_t __size>
+16535:     struct __tuple_compare
+16535:     {
+16535:       static constexpr bool
+16535:       __eq(const _Tp& __t, const _Up& __u)
+16535:       {
+16535:  return bool(std::get<__i>(__t) == std::get<__i>(__u))
+16535:    && __tuple_compare<_Tp, _Up, __i + 1, __size>::__eq(__t, __u);
+16535:       }
+16535: 
+16535:       static constexpr bool
+16535:       __less(const _Tp& __t, const _Up& __u)
+16535:       {
+16535:  return bool(std::get<__i>(__t) < std::get<__i>(__u))
+16535:    || (!bool(std::get<__i>(__u) < std::get<__i>(__t))
+16535:        && __tuple_compare<_Tp, _Up, __i + 1, __size>::__less(__t, __u));
+16535:       }
+16535:     };
+16535: 
+16535:   template<typename _Tp, typename _Up, size_t __size>
+16535:     struct __tuple_compare<_Tp, _Up, __size, __size>
+16535:     {
+16535:       static constexpr bool
+16535:       __eq(const _Tp&, const _Up&) { return true; }
+16535: 
+16535:       static constexpr bool
+16535:       __less(const _Tp&, const _Up&) { return false; }
+16535:     };
+16535: 
+16535:   template<typename... _TElements, typename... _UElements>
+16535:     constexpr bool
+16535:     operator==(const tuple<_TElements...>& __t,
+16535:         const tuple<_UElements...>& __u)
+16535:     {
+16535:       static_assert(sizeof...(_TElements) == sizeof...(_UElements),
+16535:    "tuple objects can only be compared if they have equal sizes.");
+16535:       using __compare = __tuple_compare<tuple<_TElements...>,
+16535:      tuple<_UElements...>,
+16535:      0, sizeof...(_TElements)>;
+16535:       return __compare::__eq(__t, __u);
+16535:     }
+16535: 
+16535:   template<typename... _TElements, typename... _UElements>
+16535:     constexpr bool
+16535:     operator<(const tuple<_TElements...>& __t,
+16535:        const tuple<_UElements...>& __u)
+16535:     {
+16535:       static_assert(sizeof...(_TElements) == sizeof...(_UElements),
+16535:    "tuple objects can only be compared if they have equal sizes.");
+16535:       using __compare = __tuple_compare<tuple<_TElements...>,
+16535:      tuple<_UElements...>,
+16535:      0, sizeof...(_TElements)>;
+16535:       return __compare::__less(__t, __u);
+16535:     }
+16535: 
+16535:   template<typename... _TElements, typename... _UElements>
+16535:     constexpr bool
+16535:     operator!=(const tuple<_TElements...>& __t,
+16535:         const tuple<_UElements...>& __u)
+16535:     { return !(__t == __u); }
+16535: 
+16535:   template<typename... _TElements, typename... _UElements>
+16535:     constexpr bool
+16535:     operator>(const tuple<_TElements...>& __t,
+16535:        const tuple<_UElements...>& __u)
+16535:     { return __u < __t; }
+16535: 
+16535:   template<typename... _TElements, typename... _UElements>
+16535:     constexpr bool
+16535:     operator<=(const tuple<_TElements...>& __t,
+16535:         const tuple<_UElements...>& __u)
+16535:     { return !(__u < __t); }
+16535: 
+16535:   template<typename... _TElements, typename... _UElements>
+16535:     constexpr bool
+16535:     operator>=(const tuple<_TElements...>& __t,
+16535:         const tuple<_UElements...>& __u)
+16535:     { return !(__t < __u); }
+16535: 
+16535: 
+16535:   template<typename... _Elements>
+16535:     constexpr tuple<typename __decay_and_strip<_Elements>::__type...>
+16535:     make_tuple(_Elements&&... __args)
+16535:     {
+16535:       typedef tuple<typename __decay_and_strip<_Elements>::__type...>
+16535:  __result_type;
+16535:       return __result_type(std::forward<_Elements>(__args)...);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename... _Elements>
+16535:     constexpr tuple<_Elements&&...>
+16535:     forward_as_tuple(_Elements&&... __args) noexcept
+16535:     { return tuple<_Elements&&...>(std::forward<_Elements>(__args)...); }
+16535: 
+16535:   template<size_t, typename, typename, size_t>
+16535:     struct __make_tuple_impl;
+16535: 
+16535:   template<size_t _Idx, typename _Tuple, typename... _Tp, size_t _Nm>
+16535:     struct __make_tuple_impl<_Idx, tuple<_Tp...>, _Tuple, _Nm>
+16535:     : __make_tuple_impl<_Idx + 1,
+16535:    tuple<_Tp..., __tuple_element_t<_Idx, _Tuple>>,
+16535:    _Tuple, _Nm>
+16535:     { };
+16535: 
+16535:   template<std::size_t _Nm, typename _Tuple, typename... _Tp>
+16535:     struct __make_tuple_impl<_Nm, tuple<_Tp...>, _Tuple, _Nm>
+16535:     {
+16535:       typedef tuple<_Tp...> __type;
+16535:     };
+16535: 
+16535:   template<typename _Tuple>
+16535:     struct __do_make_tuple
+16535:     : __make_tuple_impl<0, tuple<>, _Tuple, std::tuple_size<_Tuple>::value>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tuple>
+16535:     struct __make_tuple
+16535:     : public __do_make_tuple<typename std::remove_cv
+16535:             <typename std::remove_reference<_Tuple>::type>::type>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename...>
+16535:     struct __combine_tuples;
+16535: 
+16535:   template<>
+16535:     struct __combine_tuples<>
+16535:     {
+16535:       typedef tuple<> __type;
+16535:     };
+16535: 
+16535:   template<typename... _Ts>
+16535:     struct __combine_tuples<tuple<_Ts...>>
+16535:     {
+16535:       typedef tuple<_Ts...> __type;
+16535:     };
+16535: 
+16535:   template<typename... _T1s, typename... _T2s, typename... _Rem>
+16535:     struct __combine_tuples<tuple<_T1s...>, tuple<_T2s...>, _Rem...>
+16535:     {
+16535:       typedef typename __combine_tuples<tuple<_T1s..., _T2s...>,
+16535:      _Rem...>::__type __type;
+16535:     };
+16535: 
+16535: 
+16535:   template<typename... _Tpls>
+16535:     struct __tuple_cat_result
+16535:     {
+16535:       typedef typename __combine_tuples
+16535:         <typename __make_tuple<_Tpls>::__type...>::__type __type;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<typename...>
+16535:     struct __make_1st_indices;
+16535: 
+16535:   template<>
+16535:     struct __make_1st_indices<>
+16535:     {
+16535:       typedef std::_Index_tuple<> __type;
+16535:     };
+16535: 
+16535:   template<typename _Tp, typename... _Tpls>
+16535:     struct __make_1st_indices<_Tp, _Tpls...>
+16535:     {
+16535:       typedef typename std::_Build_index_tuple<std::tuple_size<
+16535:  typename std::remove_reference<_Tp>::type>::value>::__type __type;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Ret, typename _Indices, typename... _Tpls>
+16535:     struct __tuple_concater;
+16535: 
+16535:   template<typename _Ret, std::size_t... _Is, typename _Tp, typename... _Tpls>
+16535:     struct __tuple_concater<_Ret, std::_Index_tuple<_Is...>, _Tp, _Tpls...>
+16535:     {
+16535:       template<typename... _Us>
+16535:         static constexpr _Ret
+16535:         _S_do(_Tp&& __tp, _Tpls&&... __tps, _Us&&... __us)
+16535:         {
+16535:    typedef typename __make_1st_indices<_Tpls...>::__type __idx;
+16535:    typedef __tuple_concater<_Ret, __idx, _Tpls...> __next;
+16535:    return __next::_S_do(std::forward<_Tpls>(__tps)...,
+16535:           std::forward<_Us>(__us)...,
+16535:           std::get<_Is>(std::forward<_Tp>(__tp))...);
+16535:  }
+16535:     };
+16535: 
+16535:   template<typename _Ret>
+16535:     struct __tuple_concater<_Ret, std::_Index_tuple<>>
+16535:     {
+16535:       template<typename... _Us>
+16535:  static constexpr _Ret
+16535:  _S_do(_Us&&... __us)
+16535:         {
+16535:    return _Ret(std::forward<_Us>(__us)...);
+16535:  }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename... _Tpls, typename = typename
+16535:            enable_if<__and_<__is_tuple_like<_Tpls>...>::value>::type>
+16535:     constexpr auto
+16535:     tuple_cat(_Tpls&&... __tpls)
+16535:     -> typename __tuple_cat_result<_Tpls...>::__type
+16535:     {
+16535:       typedef typename __tuple_cat_result<_Tpls...>::__type __ret;
+16535:       typedef typename __make_1st_indices<_Tpls...>::__type __idx;
+16535:       typedef __tuple_concater<__ret, __idx, _Tpls...> __concater;
+16535:       return __concater::_S_do(std::forward<_Tpls>(__tpls)...);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename... _Elements>
+16535:     constexpr tuple<_Elements&...>
+16535:     tie(_Elements&... __args) noexcept
+16535:     { return tuple<_Elements&...>(__args...); }
+16535: 
+16535: 
+16535:   template<typename... _Elements>
+16535:     inline
+16535: 
+16535: 
+16535:     typename enable_if<__and_<__is_swappable<_Elements>...>::value
+16535:       >::type
+16535: 
+16535: 
+16535: 
+16535:     swap(tuple<_Elements...>& __x, tuple<_Elements...>& __y)
+16535:     noexcept(noexcept(__x.swap(__y)))
+16535:     { __x.swap(__y); }
+16535: 
+16535: 
+16535:   template<typename... _Elements>
+16535:     typename enable_if<!__and_<__is_swappable<_Elements>...>::value>::type
+16535:     swap(tuple<_Elements...>&, tuple<_Elements...>&) = delete;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   struct _Swallow_assign
+16535:   {
+16535:     template<class _Tp>
+16535:       constexpr const _Swallow_assign&
+16535:       operator=(const _Tp&) const
+16535:       { return *this; }
+16535:   };
+16535: 
+16535: 
+16535: 
+16535:   constexpr _Swallow_assign ignore{};
+16535: 
+16535: 
+16535:   template<typename... _Types, typename _Alloc>
+16535:     struct uses_allocator<tuple<_Types...>, _Alloc> : true_type { };
+16535: 
+16535: 
+16535:   template<class _T1, class _T2>
+16535:     template<typename... _Args1, typename... _Args2>
+16535:       inline
+16535:       pair<_T1, _T2>::
+16535:       pair(piecewise_construct_t,
+16535:     tuple<_Args1...> __first, tuple<_Args2...> __second)
+16535:       : pair(__first, __second,
+16535:       typename _Build_index_tuple<sizeof...(_Args1)>::__type(),
+16535:       typename _Build_index_tuple<sizeof...(_Args2)>::__type())
+16535:       { }
+16535: 
+16535:   template<class _T1, class _T2>
+16535:     template<typename... _Args1, std::size_t... _Indexes1,
+16535:              typename... _Args2, std::size_t... _Indexes2>
+16535:       inline
+16535:       pair<_T1, _T2>::
+16535:       pair(tuple<_Args1...>& __tuple1, tuple<_Args2...>& __tuple2,
+16535:     _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>)
+16535:       : first(std::forward<_Args1>(std::get<_Indexes1>(__tuple1))...),
+16535:         second(std::forward<_Args2>(std::get<_Indexes2>(__tuple2))...)
+16535:       { }
+16535: # 1711 "/usr/include/c++/8/tuple" 3
+16535: 
+16535: }
+16535: # 64 "/usr/include/c++/8/bits/stl_map.h" 2 3
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535:   template <typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+16535:     class multimap;
+16535: # 98 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:   template <typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
+16535:      typename _Alloc = std::allocator<std::pair<const _Key, _Tp> > >
+16535:     class map
+16535:     {
+16535:     public:
+16535:       typedef _Key key_type;
+16535:       typedef _Tp mapped_type;
+16535:       typedef std::pair<const _Key, _Tp> value_type;
+16535:       typedef _Compare key_compare;
+16535:       typedef _Alloc allocator_type;
+16535: 
+16535:     private:
+16535: # 126 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:     public:
+16535:       class value_compare
+16535:       : public std::binary_function<value_type, value_type, bool>
+16535:       {
+16535:  friend class map<_Key, _Tp, _Compare, _Alloc>;
+16535:       protected:
+16535:  _Compare comp;
+16535: 
+16535:  value_compare(_Compare __c)
+16535:  : comp(__c) { }
+16535: 
+16535:       public:
+16535:  bool operator()(const value_type& __x, const value_type& __y) const
+16535:  { return comp(__x.first, __y.first); }
+16535:       };
+16535: 
+16535:     private:
+16535: 
+16535:       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
+16535:  rebind<value_type>::other _Pair_alloc_type;
+16535: 
+16535:       typedef _Rb_tree<key_type, value_type, _Select1st<value_type>,
+16535:          key_compare, _Pair_alloc_type> _Rep_type;
+16535: 
+16535: 
+16535:       _Rep_type _M_t;
+16535: 
+16535:       typedef __gnu_cxx::__alloc_traits<_Pair_alloc_type> _Alloc_traits;
+16535: 
+16535:     public:
+16535: 
+16535: 
+16535:       typedef typename _Alloc_traits::pointer pointer;
+16535:       typedef typename _Alloc_traits::const_pointer const_pointer;
+16535:       typedef typename _Alloc_traits::reference reference;
+16535:       typedef typename _Alloc_traits::const_reference const_reference;
+16535:       typedef typename _Rep_type::iterator iterator;
+16535:       typedef typename _Rep_type::const_iterator const_iterator;
+16535:       typedef typename _Rep_type::size_type size_type;
+16535:       typedef typename _Rep_type::difference_type difference_type;
+16535:       typedef typename _Rep_type::reverse_iterator reverse_iterator;
+16535:       typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
+16535: # 183 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       map() = default;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       explicit
+16535:       map(const _Compare& __comp,
+16535:    const allocator_type& __a = allocator_type())
+16535:       : _M_t(__comp, _Pair_alloc_type(__a)) { }
+16535: # 205 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       map(const map&) = default;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       map(map&&) = default;
+16535: # 226 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       map(initializer_list<value_type> __l,
+16535:    const _Compare& __comp = _Compare(),
+16535:    const allocator_type& __a = allocator_type())
+16535:       : _M_t(__comp, _Pair_alloc_type(__a))
+16535:       { _M_t._M_insert_unique(__l.begin(), __l.end()); }
+16535: 
+16535: 
+16535:       explicit
+16535:       map(const allocator_type& __a)
+16535:       : _M_t(_Compare(), _Pair_alloc_type(__a)) { }
+16535: 
+16535: 
+16535:       map(const map& __m, const allocator_type& __a)
+16535:       : _M_t(__m._M_t, _Pair_alloc_type(__a)) { }
+16535: 
+16535: 
+16535:       map(map&& __m, const allocator_type& __a)
+16535:       noexcept(is_nothrow_copy_constructible<_Compare>::value
+16535:         && _Alloc_traits::_S_always_equal())
+16535:       : _M_t(std::move(__m._M_t), _Pair_alloc_type(__a)) { }
+16535: 
+16535: 
+16535:       map(initializer_list<value_type> __l, const allocator_type& __a)
+16535:       : _M_t(_Compare(), _Pair_alloc_type(__a))
+16535:       { _M_t._M_insert_unique(__l.begin(), __l.end()); }
+16535: 
+16535: 
+16535:       template<typename _InputIterator>
+16535:  map(_InputIterator __first, _InputIterator __last,
+16535:      const allocator_type& __a)
+16535:  : _M_t(_Compare(), _Pair_alloc_type(__a))
+16535:  { _M_t._M_insert_unique(__first, __last); }
+16535: # 270 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       template<typename _InputIterator>
+16535:  map(_InputIterator __first, _InputIterator __last)
+16535:  : _M_t()
+16535:  { _M_t._M_insert_unique(__first, __last); }
+16535: # 287 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       template<typename _InputIterator>
+16535:  map(_InputIterator __first, _InputIterator __last,
+16535:      const _Compare& __comp,
+16535:      const allocator_type& __a = allocator_type())
+16535:  : _M_t(__comp, _Pair_alloc_type(__a))
+16535:  { _M_t._M_insert_unique(__first, __last); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       ~map() = default;
+16535: # 316 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       map&
+16535:       operator=(const map&) = default;
+16535: 
+16535: 
+16535:       map&
+16535:       operator=(map&&) = default;
+16535: # 334 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       map&
+16535:       operator=(initializer_list<value_type> __l)
+16535:       {
+16535:  _M_t._M_assign_unique(__l.begin(), __l.end());
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       allocator_type
+16535:       get_allocator() const noexcept
+16535:       { return allocator_type(_M_t.get_allocator()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       begin() noexcept
+16535:       { return _M_t.begin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       begin() const noexcept
+16535:       { return _M_t.begin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       end() noexcept
+16535:       { return _M_t.end(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       end() const noexcept
+16535:       { return _M_t.end(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       rbegin() noexcept
+16535:       { return _M_t.rbegin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       rbegin() const noexcept
+16535:       { return _M_t.rbegin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       rend() noexcept
+16535:       { return _M_t.rend(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       rend() const noexcept
+16535:       { return _M_t.rend(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       cbegin() const noexcept
+16535:       { return _M_t.begin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       cend() const noexcept
+16535:       { return _M_t.end(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       crbegin() const noexcept
+16535:       { return _M_t.rbegin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       crend() const noexcept
+16535:       { return _M_t.rend(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       bool
+16535:       empty() const noexcept
+16535:       { return _M_t.empty(); }
+16535: 
+16535: 
+16535:       size_type
+16535:       size() const noexcept
+16535:       { return _M_t.size(); }
+16535: 
+16535: 
+16535:       size_type
+16535:       max_size() const noexcept
+16535:       { return _M_t.max_size(); }
+16535: # 489 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       mapped_type&
+16535:       operator[](const key_type& __k)
+16535:       {
+16535: 
+16535: 
+16535: 
+16535:  iterator __i = lower_bound(__k);
+16535: 
+16535:  if (__i == end() || key_comp()(__k, (*__i).first))
+16535: 
+16535:    __i = _M_t._M_emplace_hint_unique(__i, std::piecewise_construct,
+16535:          std::tuple<const key_type&>(__k),
+16535:          std::tuple<>());
+16535: 
+16535: 
+16535: 
+16535:  return (*__i).second;
+16535:       }
+16535: 
+16535: 
+16535:       mapped_type&
+16535:       operator[](key_type&& __k)
+16535:       {
+16535: 
+16535: 
+16535: 
+16535:  iterator __i = lower_bound(__k);
+16535: 
+16535:  if (__i == end() || key_comp()(__k, (*__i).first))
+16535:    __i = _M_t._M_emplace_hint_unique(__i, std::piecewise_construct,
+16535:      std::forward_as_tuple(std::move(__k)),
+16535:      std::tuple<>());
+16535:  return (*__i).second;
+16535:       }
+16535: # 534 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       mapped_type&
+16535:       at(const key_type& __k)
+16535:       {
+16535:  iterator __i = lower_bound(__k);
+16535:  if (__i == end() || key_comp()(__k, (*__i).first))
+16535:    __throw_out_of_range(("map::at"));
+16535:  return (*__i).second;
+16535:       }
+16535: 
+16535:       const mapped_type&
+16535:       at(const key_type& __k) const
+16535:       {
+16535:  const_iterator __i = lower_bound(__k);
+16535:  if (__i == end() || key_comp()(__k, (*__i).first))
+16535:    __throw_out_of_range(("map::at"));
+16535:  return (*__i).second;
+16535:       }
+16535: # 572 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       template<typename... _Args>
+16535:  std::pair<iterator, bool>
+16535:  emplace(_Args&&... __args)
+16535:  { return _M_t._M_emplace_unique(std::forward<_Args>(__args)...); }
+16535: # 602 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       template<typename... _Args>
+16535:  iterator
+16535:  emplace_hint(const_iterator __pos, _Args&&... __args)
+16535:  {
+16535:    return _M_t._M_emplace_hint_unique(__pos,
+16535:           std::forward<_Args>(__args)...);
+16535:  }
+16535: # 800 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       std::pair<iterator, bool>
+16535:       insert(const value_type& __x)
+16535:       { return _M_t._M_insert_unique(__x); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       std::pair<iterator, bool>
+16535:       insert(value_type&& __x)
+16535:       { return _M_t._M_insert_unique(std::move(__x)); }
+16535: 
+16535:       template<typename _Pair>
+16535:  __enable_if_t<is_constructible<value_type, _Pair>::value,
+16535:         pair<iterator, bool>>
+16535:  insert(_Pair&& __x)
+16535:  { return _M_t._M_emplace_unique(std::forward<_Pair>(__x)); }
+16535: # 827 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       void
+16535:       insert(std::initializer_list<value_type> __list)
+16535:       { insert(__list.begin(), __list.end()); }
+16535: # 856 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       iterator
+16535: 
+16535:       insert(const_iterator __position, const value_type& __x)
+16535: 
+16535: 
+16535: 
+16535:       { return _M_t._M_insert_unique_(__position, __x); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       insert(const_iterator __position, value_type&& __x)
+16535:       { return _M_t._M_insert_unique_(__position, std::move(__x)); }
+16535: 
+16535:       template<typename _Pair>
+16535:  __enable_if_t<is_constructible<value_type, _Pair>::value, iterator>
+16535:  insert(const_iterator __position, _Pair&& __x)
+16535:  {
+16535:    return _M_t._M_emplace_hint_unique(__position,
+16535:           std::forward<_Pair>(__x));
+16535:  }
+16535: # 889 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  insert(_InputIterator __first, _InputIterator __last)
+16535:  { _M_t._M_insert_unique(__first, __last); }
+16535: # 1029 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       iterator
+16535:       erase(const_iterator __position)
+16535:       { return _M_t.erase(__position); }
+16535: 
+16535: 
+16535:       __attribute ((__abi_tag__ ("cxx11")))
+16535:       iterator
+16535:       erase(iterator __position)
+16535:       { return _M_t.erase(__position); }
+16535: # 1066 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       size_type
+16535:       erase(const key_type& __x)
+16535:       { return _M_t.erase(__x); }
+16535: # 1086 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       iterator
+16535:       erase(const_iterator __first, const_iterator __last)
+16535:       { return _M_t.erase(__first, __last); }
+16535: # 1120 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       void
+16535:       swap(map& __x)
+16535:       noexcept(__is_nothrow_swappable<_Compare>::value)
+16535:       { _M_t.swap(__x._M_t); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       clear() noexcept
+16535:       { _M_t.clear(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       key_compare
+16535:       key_comp() const
+16535:       { return _M_t.key_comp(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       value_compare
+16535:       value_comp() const
+16535:       { return value_compare(_M_t.key_comp()); }
+16535: # 1167 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       iterator
+16535:       find(const key_type& __x)
+16535:       { return _M_t.find(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  find(const _Kt& __x) -> decltype(_M_t._M_find_tr(__x))
+16535:  { return _M_t._M_find_tr(__x); }
+16535: # 1192 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       const_iterator
+16535:       find(const key_type& __x) const
+16535:       { return _M_t.find(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  find(const _Kt& __x) const -> decltype(_M_t._M_find_tr(__x))
+16535:  { return _M_t._M_find_tr(__x); }
+16535: # 1213 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       size_type
+16535:       count(const key_type& __x) const
+16535:       { return _M_t.find(__x) == _M_t.end() ? 0 : 1; }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  count(const _Kt& __x) const -> decltype(_M_t._M_count_tr(__x))
+16535:  { return _M_t._M_count_tr(__x); }
+16535: # 1237 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       iterator
+16535:       lower_bound(const key_type& __x)
+16535:       { return _M_t.lower_bound(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  lower_bound(const _Kt& __x)
+16535:  -> decltype(iterator(_M_t._M_lower_bound_tr(__x)))
+16535:  { return iterator(_M_t._M_lower_bound_tr(__x)); }
+16535: # 1262 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       const_iterator
+16535:       lower_bound(const key_type& __x) const
+16535:       { return _M_t.lower_bound(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  lower_bound(const _Kt& __x) const
+16535:  -> decltype(const_iterator(_M_t._M_lower_bound_tr(__x)))
+16535:  { return const_iterator(_M_t._M_lower_bound_tr(__x)); }
+16535: # 1282 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       iterator
+16535:       upper_bound(const key_type& __x)
+16535:       { return _M_t.upper_bound(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  upper_bound(const _Kt& __x)
+16535:  -> decltype(iterator(_M_t._M_upper_bound_tr(__x)))
+16535:  { return iterator(_M_t._M_upper_bound_tr(__x)); }
+16535: # 1302 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       const_iterator
+16535:       upper_bound(const key_type& __x) const
+16535:       { return _M_t.upper_bound(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  upper_bound(const _Kt& __x) const
+16535:  -> decltype(const_iterator(_M_t._M_upper_bound_tr(__x)))
+16535:  { return const_iterator(_M_t._M_upper_bound_tr(__x)); }
+16535: # 1331 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       std::pair<iterator, iterator>
+16535:       equal_range(const key_type& __x)
+16535:       { return _M_t.equal_range(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  equal_range(const _Kt& __x)
+16535:  -> decltype(pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)))
+16535:  { return pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)); }
+16535: # 1360 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:       std::pair<const_iterator, const_iterator>
+16535:       equal_range(const key_type& __x) const
+16535:       { return _M_t.equal_range(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  equal_range(const _Kt& __x) const
+16535:  -> decltype(pair<const_iterator, const_iterator>(
+16535:        _M_t._M_equal_range_tr(__x)))
+16535:  {
+16535:    return pair<const_iterator, const_iterator>(
+16535:        _M_t._M_equal_range_tr(__x));
+16535:  }
+16535: 
+16535: 
+16535: 
+16535:       template<typename _K1, typename _T1, typename _C1, typename _A1>
+16535:  friend bool
+16535:  operator==(const map<_K1, _T1, _C1, _A1>&,
+16535:      const map<_K1, _T1, _C1, _A1>&);
+16535: 
+16535:       template<typename _K1, typename _T1, typename _C1, typename _A1>
+16535:  friend bool
+16535:  operator<(const map<_K1, _T1, _C1, _A1>&,
+16535:     const map<_K1, _T1, _C1, _A1>&);
+16535:     };
+16535: # 1432 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator==(const map<_Key, _Tp, _Compare, _Alloc>& __x,
+16535:         const map<_Key, _Tp, _Compare, _Alloc>& __y)
+16535:     { return __x._M_t == __y._M_t; }
+16535: # 1449 "/usr/include/c++/8/bits/stl_map.h" 3
+16535:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator<(const map<_Key, _Tp, _Compare, _Alloc>& __x,
+16535:        const map<_Key, _Tp, _Compare, _Alloc>& __y)
+16535:     { return __x._M_t < __y._M_t; }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator!=(const map<_Key, _Tp, _Compare, _Alloc>& __x,
+16535:         const map<_Key, _Tp, _Compare, _Alloc>& __y)
+16535:     { return !(__x == __y); }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator>(const map<_Key, _Tp, _Compare, _Alloc>& __x,
+16535:        const map<_Key, _Tp, _Compare, _Alloc>& __y)
+16535:     { return __y < __x; }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator<=(const map<_Key, _Tp, _Compare, _Alloc>& __x,
+16535:         const map<_Key, _Tp, _Compare, _Alloc>& __y)
+16535:     { return !(__y < __x); }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator>=(const map<_Key, _Tp, _Compare, _Alloc>& __x,
+16535:         const map<_Key, _Tp, _Compare, _Alloc>& __y)
+16535:     { return !(__x < __y); }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+16535:     inline void
+16535:     swap(map<_Key, _Tp, _Compare, _Alloc>& __x,
+16535:   map<_Key, _Tp, _Compare, _Alloc>& __y)
+16535:     noexcept(noexcept(__x.swap(__y)))
+16535:     { __x.swap(__y); }
+16535: 
+16535: 
+16535: # 1514 "/usr/include/c++/8/bits/stl_map.h" 3
+16535: 
+16535: }
+16535: # 62 "/usr/include/c++/8/map" 2 3
+16535: # 1 "/usr/include/c++/8/bits/stl_multimap.h" 1 3
+16535: # 64 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535:   template <typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+16535:     class map;
+16535: # 96 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:   template <typename _Key, typename _Tp,
+16535:      typename _Compare = std::less<_Key>,
+16535:      typename _Alloc = std::allocator<std::pair<const _Key, _Tp> > >
+16535:     class multimap
+16535:     {
+16535:     public:
+16535:       typedef _Key key_type;
+16535:       typedef _Tp mapped_type;
+16535:       typedef std::pair<const _Key, _Tp> value_type;
+16535:       typedef _Compare key_compare;
+16535:       typedef _Alloc allocator_type;
+16535: 
+16535:     private:
+16535: # 125 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:     public:
+16535:       class value_compare
+16535:       : public std::binary_function<value_type, value_type, bool>
+16535:       {
+16535:  friend class multimap<_Key, _Tp, _Compare, _Alloc>;
+16535:       protected:
+16535:  _Compare comp;
+16535: 
+16535:  value_compare(_Compare __c)
+16535:  : comp(__c) { }
+16535: 
+16535:       public:
+16535:  bool operator()(const value_type& __x, const value_type& __y) const
+16535:  { return comp(__x.first, __y.first); }
+16535:       };
+16535: 
+16535:     private:
+16535: 
+16535:       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
+16535:  rebind<value_type>::other _Pair_alloc_type;
+16535: 
+16535:       typedef _Rb_tree<key_type, value_type, _Select1st<value_type>,
+16535:          key_compare, _Pair_alloc_type> _Rep_type;
+16535: 
+16535:       _Rep_type _M_t;
+16535: 
+16535:       typedef __gnu_cxx::__alloc_traits<_Pair_alloc_type> _Alloc_traits;
+16535: 
+16535:     public:
+16535: 
+16535: 
+16535:       typedef typename _Alloc_traits::pointer pointer;
+16535:       typedef typename _Alloc_traits::const_pointer const_pointer;
+16535:       typedef typename _Alloc_traits::reference reference;
+16535:       typedef typename _Alloc_traits::const_reference const_reference;
+16535:       typedef typename _Rep_type::iterator iterator;
+16535:       typedef typename _Rep_type::const_iterator const_iterator;
+16535:       typedef typename _Rep_type::size_type size_type;
+16535:       typedef typename _Rep_type::difference_type difference_type;
+16535:       typedef typename _Rep_type::reverse_iterator reverse_iterator;
+16535:       typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
+16535: # 180 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       multimap() = default;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       explicit
+16535:       multimap(const _Compare& __comp,
+16535:         const allocator_type& __a = allocator_type())
+16535:       : _M_t(__comp, _Pair_alloc_type(__a)) { }
+16535: # 202 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       multimap(const multimap&) = default;
+16535: # 211 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       multimap(multimap&&) = default;
+16535: # 223 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       multimap(initializer_list<value_type> __l,
+16535:         const _Compare& __comp = _Compare(),
+16535:         const allocator_type& __a = allocator_type())
+16535:       : _M_t(__comp, _Pair_alloc_type(__a))
+16535:       { _M_t._M_insert_equal(__l.begin(), __l.end()); }
+16535: 
+16535: 
+16535:       explicit
+16535:       multimap(const allocator_type& __a)
+16535:       : _M_t(_Compare(), _Pair_alloc_type(__a)) { }
+16535: 
+16535: 
+16535:       multimap(const multimap& __m, const allocator_type& __a)
+16535:       : _M_t(__m._M_t, _Pair_alloc_type(__a)) { }
+16535: 
+16535: 
+16535:       multimap(multimap&& __m, const allocator_type& __a)
+16535:       noexcept(is_nothrow_copy_constructible<_Compare>::value
+16535:         && _Alloc_traits::_S_always_equal())
+16535:       : _M_t(std::move(__m._M_t), _Pair_alloc_type(__a)) { }
+16535: 
+16535: 
+16535:       multimap(initializer_list<value_type> __l, const allocator_type& __a)
+16535:       : _M_t(_Compare(), _Pair_alloc_type(__a))
+16535:       { _M_t._M_insert_equal(__l.begin(), __l.end()); }
+16535: 
+16535: 
+16535:       template<typename _InputIterator>
+16535:  multimap(_InputIterator __first, _InputIterator __last,
+16535:    const allocator_type& __a)
+16535:  : _M_t(_Compare(), _Pair_alloc_type(__a))
+16535:  { _M_t._M_insert_equal(__first, __last); }
+16535: # 266 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       template<typename _InputIterator>
+16535:  multimap(_InputIterator __first, _InputIterator __last)
+16535:  : _M_t()
+16535:  { _M_t._M_insert_equal(__first, __last); }
+16535: # 282 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       template<typename _InputIterator>
+16535:  multimap(_InputIterator __first, _InputIterator __last,
+16535:    const _Compare& __comp,
+16535:    const allocator_type& __a = allocator_type())
+16535:  : _M_t(__comp, _Pair_alloc_type(__a))
+16535:  { _M_t._M_insert_equal(__first, __last); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       ~multimap() = default;
+16535: # 311 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       multimap&
+16535:       operator=(const multimap&) = default;
+16535: 
+16535: 
+16535:       multimap&
+16535:       operator=(multimap&&) = default;
+16535: # 329 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       multimap&
+16535:       operator=(initializer_list<value_type> __l)
+16535:       {
+16535:  _M_t._M_assign_equal(__l.begin(), __l.end());
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       allocator_type
+16535:       get_allocator() const noexcept
+16535:       { return allocator_type(_M_t.get_allocator()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       begin() noexcept
+16535:       { return _M_t.begin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       begin() const noexcept
+16535:       { return _M_t.begin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       end() noexcept
+16535:       { return _M_t.end(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       end() const noexcept
+16535:       { return _M_t.end(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       rbegin() noexcept
+16535:       { return _M_t.rbegin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       rbegin() const noexcept
+16535:       { return _M_t.rbegin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       rend() noexcept
+16535:       { return _M_t.rend(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       rend() const noexcept
+16535:       { return _M_t.rend(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       cbegin() const noexcept
+16535:       { return _M_t.begin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       cend() const noexcept
+16535:       { return _M_t.end(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       crbegin() const noexcept
+16535:       { return _M_t.rbegin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       crend() const noexcept
+16535:       { return _M_t.rend(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       bool
+16535:       empty() const noexcept
+16535:       { return _M_t.empty(); }
+16535: 
+16535: 
+16535:       size_type
+16535:       size() const noexcept
+16535:       { return _M_t.size(); }
+16535: 
+16535: 
+16535:       size_type
+16535:       max_size() const noexcept
+16535:       { return _M_t.max_size(); }
+16535: # 487 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       template<typename... _Args>
+16535:  iterator
+16535:  emplace(_Args&&... __args)
+16535:  { return _M_t._M_emplace_equal(std::forward<_Args>(__args)...); }
+16535: # 514 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       template<typename... _Args>
+16535:  iterator
+16535:  emplace_hint(const_iterator __pos, _Args&&... __args)
+16535:  {
+16535:    return _M_t._M_emplace_hint_equal(__pos,
+16535:          std::forward<_Args>(__args)...);
+16535:  }
+16535: # 536 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       iterator
+16535:       insert(const value_type& __x)
+16535:       { return _M_t._M_insert_equal(__x); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       insert(value_type&& __x)
+16535:       { return _M_t._M_insert_equal(std::move(__x)); }
+16535: 
+16535:       template<typename _Pair>
+16535:  __enable_if_t<is_constructible<value_type, _Pair>::value, iterator>
+16535:  insert(_Pair&& __x)
+16535:  { return _M_t._M_emplace_equal(std::forward<_Pair>(__x)); }
+16535: # 575 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       iterator
+16535: 
+16535:       insert(const_iterator __position, const value_type& __x)
+16535: 
+16535: 
+16535: 
+16535:       { return _M_t._M_insert_equal_(__position, __x); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       insert(const_iterator __position, value_type&& __x)
+16535:       { return _M_t._M_insert_equal_(__position, std::move(__x)); }
+16535: 
+16535:       template<typename _Pair>
+16535:  __enable_if_t<is_constructible<value_type, _Pair&&>::value, iterator>
+16535:  insert(const_iterator __position, _Pair&& __x)
+16535:  {
+16535:    return _M_t._M_emplace_hint_equal(__position,
+16535:          std::forward<_Pair>(__x));
+16535:  }
+16535: # 609 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  insert(_InputIterator __first, _InputIterator __last)
+16535:  { _M_t._M_insert_equal(__first, __last); }
+16535: # 622 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       void
+16535:       insert(initializer_list<value_type> __l)
+16535:       { this->insert(__l.begin(), __l.end()); }
+16535: # 699 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       iterator
+16535:       erase(const_iterator __position)
+16535:       { return _M_t.erase(__position); }
+16535: 
+16535: 
+16535:       __attribute ((__abi_tag__ ("cxx11")))
+16535:       iterator
+16535:       erase(iterator __position)
+16535:       { return _M_t.erase(__position); }
+16535: # 736 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       size_type
+16535:       erase(const key_type& __x)
+16535:       { return _M_t.erase(__x); }
+16535: # 757 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       iterator
+16535:       erase(const_iterator __first, const_iterator __last)
+16535:       { return _M_t.erase(__first, __last); }
+16535: # 794 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       void
+16535:       swap(multimap& __x)
+16535:       noexcept(__is_nothrow_swappable<_Compare>::value)
+16535:       { _M_t.swap(__x._M_t); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       clear() noexcept
+16535:       { _M_t.clear(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       key_compare
+16535:       key_comp() const
+16535:       { return _M_t.key_comp(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       value_compare
+16535:       value_comp() const
+16535:       { return value_compare(_M_t.key_comp()); }
+16535: # 840 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       iterator
+16535:       find(const key_type& __x)
+16535:       { return _M_t.find(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  find(const _Kt& __x) -> decltype(_M_t._M_find_tr(__x))
+16535:  { return _M_t._M_find_tr(__x); }
+16535: # 864 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       const_iterator
+16535:       find(const key_type& __x) const
+16535:       { return _M_t.find(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  find(const _Kt& __x) const -> decltype(_M_t._M_find_tr(__x))
+16535:  { return _M_t._M_find_tr(__x); }
+16535: # 882 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       size_type
+16535:       count(const key_type& __x) const
+16535:       { return _M_t.count(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  count(const _Kt& __x) const -> decltype(_M_t._M_count_tr(__x))
+16535:  { return _M_t._M_count_tr(__x); }
+16535: # 906 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       iterator
+16535:       lower_bound(const key_type& __x)
+16535:       { return _M_t.lower_bound(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  lower_bound(const _Kt& __x)
+16535:  -> decltype(iterator(_M_t._M_lower_bound_tr(__x)))
+16535:  { return iterator(_M_t._M_lower_bound_tr(__x)); }
+16535: # 931 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       const_iterator
+16535:       lower_bound(const key_type& __x) const
+16535:       { return _M_t.lower_bound(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  lower_bound(const _Kt& __x) const
+16535:  -> decltype(const_iterator(_M_t._M_lower_bound_tr(__x)))
+16535:  { return const_iterator(_M_t._M_lower_bound_tr(__x)); }
+16535: # 951 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       iterator
+16535:       upper_bound(const key_type& __x)
+16535:       { return _M_t.upper_bound(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  upper_bound(const _Kt& __x)
+16535:  -> decltype(iterator(_M_t._M_upper_bound_tr(__x)))
+16535:  { return iterator(_M_t._M_upper_bound_tr(__x)); }
+16535: # 971 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       const_iterator
+16535:       upper_bound(const key_type& __x) const
+16535:       { return _M_t.upper_bound(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  upper_bound(const _Kt& __x) const
+16535:  -> decltype(const_iterator(_M_t._M_upper_bound_tr(__x)))
+16535:  { return const_iterator(_M_t._M_upper_bound_tr(__x)); }
+16535: # 998 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       std::pair<iterator, iterator>
+16535:       equal_range(const key_type& __x)
+16535:       { return _M_t.equal_range(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  equal_range(const _Kt& __x)
+16535:  -> decltype(pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)))
+16535:  { return pair<iterator, iterator>(_M_t._M_equal_range_tr(__x)); }
+16535: # 1025 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:       std::pair<const_iterator, const_iterator>
+16535:       equal_range(const key_type& __x) const
+16535:       { return _M_t.equal_range(__x); }
+16535: 
+16535: 
+16535:       template<typename _Kt>
+16535:  auto
+16535:  equal_range(const _Kt& __x) const
+16535:  -> decltype(pair<const_iterator, const_iterator>(
+16535:        _M_t._M_equal_range_tr(__x)))
+16535:  {
+16535:    return pair<const_iterator, const_iterator>(
+16535:        _M_t._M_equal_range_tr(__x));
+16535:  }
+16535: 
+16535: 
+16535: 
+16535:       template<typename _K1, typename _T1, typename _C1, typename _A1>
+16535:  friend bool
+16535:  operator==(const multimap<_K1, _T1, _C1, _A1>&,
+16535:      const multimap<_K1, _T1, _C1, _A1>&);
+16535: 
+16535:       template<typename _K1, typename _T1, typename _C1, typename _A1>
+16535:  friend bool
+16535:  operator<(const multimap<_K1, _T1, _C1, _A1>&,
+16535:     const multimap<_K1, _T1, _C1, _A1>&);
+16535:   };
+16535: # 1096 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator==(const multimap<_Key, _Tp, _Compare, _Alloc>& __x,
+16535:         const multimap<_Key, _Tp, _Compare, _Alloc>& __y)
+16535:     { return __x._M_t == __y._M_t; }
+16535: # 1113 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator<(const multimap<_Key, _Tp, _Compare, _Alloc>& __x,
+16535:        const multimap<_Key, _Tp, _Compare, _Alloc>& __y)
+16535:     { return __x._M_t < __y._M_t; }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator!=(const multimap<_Key, _Tp, _Compare, _Alloc>& __x,
+16535:         const multimap<_Key, _Tp, _Compare, _Alloc>& __y)
+16535:     { return !(__x == __y); }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator>(const multimap<_Key, _Tp, _Compare, _Alloc>& __x,
+16535:        const multimap<_Key, _Tp, _Compare, _Alloc>& __y)
+16535:     { return __y < __x; }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator<=(const multimap<_Key, _Tp, _Compare, _Alloc>& __x,
+16535:         const multimap<_Key, _Tp, _Compare, _Alloc>& __y)
+16535:     { return !(__y < __x); }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+16535:     inline bool
+16535:     operator>=(const multimap<_Key, _Tp, _Compare, _Alloc>& __x,
+16535:         const multimap<_Key, _Tp, _Compare, _Alloc>& __y)
+16535:     { return !(__x < __y); }
+16535: 
+16535: 
+16535:   template<typename _Key, typename _Tp, typename _Compare, typename _Alloc>
+16535:     inline void
+16535:     swap(multimap<_Key, _Tp, _Compare, _Alloc>& __x,
+16535:   multimap<_Key, _Tp, _Compare, _Alloc>& __y)
+16535:     noexcept(noexcept(__x.swap(__y)))
+16535:     { __x.swap(__y); }
+16535: 
+16535: 
+16535: # 1178 "/usr/include/c++/8/bits/stl_multimap.h" 3
+16535: 
+16535: }
+16535: # 63 "/usr/include/c++/8/map" 2 3
+16535: # 36 "../../src/Float_defs.hh" 2
+16535: # 44 "../../src/Float_defs.hh"
+16535: 
+16535: # 44 "../../src/Float_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: struct float_ieee754_half {
+16535:   uint16_t word;
+16535:   static const uint16_t SGN_MASK = 0x8000U;
+16535:   static const uint16_t EXP_MASK = 0xfc00U;
+16535:   static const uint16_t WRD_MAX = 0x7bffU;
+16535:   static const uint16_t POS_INF = 0x7c00U;
+16535:   static const uint16_t NEG_INF = 0xfc00U;
+16535:   static const uint16_t POS_ZERO = 0x0000U;
+16535:   static const uint16_t NEG_ZERO = 0x8000U;
+16535:   static const unsigned int BASE = 2;
+16535:   static const unsigned int EXPONENT_BITS = 5;
+16535:   static const unsigned int MANTISSA_BITS = 10;
+16535:   static const int EXPONENT_MAX = (1 << (EXPONENT_BITS - 1)) - 1;
+16535:   static const int EXPONENT_BIAS = EXPONENT_MAX;
+16535:   static const int EXPONENT_MIN = -EXPONENT_MAX + 1;
+16535:   static const int EXPONENT_MIN_DENORM = EXPONENT_MIN
+16535:                                         - static_cast<int>(MANTISSA_BITS);
+16535:   static const Floating_Point_Format floating_point_format = IEEE754_HALF;
+16535:   int inf_sign() const;
+16535:   bool is_nan() const;
+16535:   int zero_sign() const;
+16535:   bool sign_bit() const;
+16535:   void negate();
+16535:   void dec();
+16535:   void inc();
+16535:   void set_max(bool negative);
+16535:   void build(bool negative, mpz_t mantissa, int exponent);
+16535: 
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: struct float_ieee754_single {
+16535:   uint32_t word;
+16535:   static const uint32_t SGN_MASK = 0x80000000U;
+16535:   static const uint32_t EXP_MASK = 0x7f800000U;
+16535:   static const uint32_t WRD_MAX = 0x7f7fffffU;
+16535:   static const uint32_t POS_INF = 0x7f800000U;
+16535:   static const uint32_t NEG_INF = 0xff800000U;
+16535:   static const uint32_t POS_ZERO = 0x00000000U;
+16535:   static const uint32_t NEG_ZERO = 0x80000000U;
+16535:   static const unsigned int BASE = 2;
+16535:   static const unsigned int EXPONENT_BITS = 8;
+16535:   static const unsigned int MANTISSA_BITS = 23;
+16535:   static const int EXPONENT_MAX = (1 << (EXPONENT_BITS - 1)) - 1;
+16535:   static const int EXPONENT_BIAS = EXPONENT_MAX;
+16535:   static const int EXPONENT_MIN = -EXPONENT_MAX + 1;
+16535:   static const int EXPONENT_MIN_DENORM = EXPONENT_MIN
+16535:                                         - static_cast<int>(MANTISSA_BITS);
+16535:   static const Floating_Point_Format floating_point_format = IEEE754_SINGLE;
+16535:   int inf_sign() const;
+16535:   bool is_nan() const;
+16535:   int zero_sign() const;
+16535:   bool sign_bit() const;
+16535:   void negate();
+16535:   void dec();
+16535:   void inc();
+16535:   void set_max(bool negative);
+16535:   void build(bool negative, mpz_t mantissa, int exponent);
+16535: };
+16535: # 120 "../../src/Float_defs.hh"
+16535: struct float_ieee754_double {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   uint32_t lsp;
+16535:   uint32_t msp;
+16535: 
+16535:   static const uint32_t MSP_SGN_MASK = 0x80000000U;
+16535:   static const uint32_t MSP_POS_INF = 0x7ff00000U;
+16535:   static const uint32_t MSP_NEG_INF = 0xfff00000U;
+16535:   static const uint32_t MSP_POS_ZERO = 0x00000000U;
+16535:   static const uint32_t MSP_NEG_ZERO = 0x80000000U;
+16535:   static const uint32_t LSP_INF = 0;
+16535:   static const uint32_t LSP_ZERO = 0;
+16535:   static const uint32_t MSP_MAX = 0x7fefffffU;
+16535:   static const uint32_t LSP_MAX = 0xffffffffU;
+16535:   static const unsigned int BASE = 2;
+16535:   static const unsigned int EXPONENT_BITS = 11;
+16535:   static const unsigned int MANTISSA_BITS = 52;
+16535:   static const int EXPONENT_MAX = (1 << (EXPONENT_BITS - 1)) - 1;
+16535:   static const int EXPONENT_BIAS = EXPONENT_MAX;
+16535:   static const int EXPONENT_MIN = -EXPONENT_MAX + 1;
+16535:   static const int EXPONENT_MIN_DENORM = EXPONENT_MIN
+16535:                                         - static_cast<int>(MANTISSA_BITS);
+16535:   static const Floating_Point_Format floating_point_format = IEEE754_DOUBLE;
+16535:   int inf_sign() const;
+16535:   bool is_nan() const;
+16535:   int zero_sign() const;
+16535:   bool sign_bit() const;
+16535:   void negate();
+16535:   void dec();
+16535:   void inc();
+16535:   void set_max(bool negative);
+16535:   void build(bool negative, mpz_t mantissa, int exponent);
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: struct float_ibm_single {
+16535:   uint32_t word;
+16535:   static const uint32_t SGN_MASK = 0x80000000U;
+16535:   static const uint32_t EXP_MASK = 0x7f000000U;
+16535:   static const uint32_t WRD_MAX = 0x7fffffffU;
+16535:   static const uint32_t POS_INF = 0x7f000000U;
+16535:   static const uint32_t NEG_INF = 0xff000000U;
+16535:   static const uint32_t POS_ZERO = 0x00000000U;
+16535:   static const uint32_t NEG_ZERO = 0x80000000U;
+16535:   static const unsigned int BASE = 16;
+16535:   static const unsigned int EXPONENT_BITS = 7;
+16535:   static const unsigned int MANTISSA_BITS = 24;
+16535:   static const int EXPONENT_BIAS = 64;
+16535:   static const int EXPONENT_MAX = (1 << (EXPONENT_BITS - 1)) - 1;
+16535:   static const int EXPONENT_MIN = -EXPONENT_MAX + 1;
+16535:   static const int EXPONENT_MIN_DENORM = EXPONENT_MIN
+16535:                                         - static_cast<int>(MANTISSA_BITS);
+16535:   static const Floating_Point_Format floating_point_format = IBM_SINGLE;
+16535:   int inf_sign() const;
+16535:   bool is_nan() const;
+16535:   int zero_sign() const;
+16535:   bool sign_bit() const;
+16535:   void negate();
+16535:   void dec();
+16535:   void inc();
+16535:   void set_max(bool negative);
+16535:   void build(bool negative, mpz_t mantissa, int exponent);
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: struct float_ibm_double {
+16535:   static const unsigned int BASE = 16;
+16535:   static const unsigned int EXPONENT_BITS = 7;
+16535:   static const unsigned int MANTISSA_BITS = 56;
+16535:   static const int EXPONENT_BIAS = 64;
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: struct float_intel_double_extended {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   uint64_t lsp;
+16535:   uint32_t msp;
+16535: 
+16535:   static const uint32_t MSP_SGN_MASK = 0x00008000U;
+16535:   static const uint32_t MSP_POS_INF = 0x00007fffU;
+16535:   static const uint32_t MSP_NEG_INF = 0x0000ffffU;
+16535:   static const uint32_t MSP_POS_ZERO = 0x00000000U;
+16535:   static const uint32_t MSP_NEG_ZERO = 0x00008000U;
+16535:   static const uint64_t LSP_INF = static_cast<uint64_t>(0x8000000000000000ULL);
+16535:   static const uint64_t LSP_ZERO = 0;
+16535:   static const uint32_t MSP_MAX = 0x00007ffeU;
+16535:   static const uint64_t LSP_DMAX = static_cast<uint64_t>(0x7fffffffffffffffULL);
+16535:   static const uint64_t LSP_NMAX = static_cast<uint64_t>(0xffffffffffffffffULL);
+16535:   static const unsigned int BASE = 2;
+16535:   static const unsigned int EXPONENT_BITS = 15;
+16535:   static const unsigned int MANTISSA_BITS = 63;
+16535:   static const int EXPONENT_MAX = (1 << (EXPONENT_BITS - 1)) - 1;
+16535:   static const int EXPONENT_BIAS = EXPONENT_MAX;
+16535:   static const int EXPONENT_MIN = -EXPONENT_MAX + 1;
+16535:   static const int EXPONENT_MIN_DENORM = EXPONENT_MIN
+16535:                                         - static_cast<int>(MANTISSA_BITS);
+16535:   static const Floating_Point_Format floating_point_format =
+16535:                                      INTEL_DOUBLE_EXTENDED;
+16535:   int inf_sign() const;
+16535:   bool is_nan() const;
+16535:   int zero_sign() const;
+16535:   bool sign_bit() const;
+16535:   void negate();
+16535:   void dec();
+16535:   void inc();
+16535:   void set_max(bool negative);
+16535:   void build(bool negative, mpz_t mantissa, int exponent);
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: struct float_ieee754_quad {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   uint64_t lsp;
+16535:   uint64_t msp;
+16535: 
+16535:   static const uint64_t MSP_SGN_MASK = static_cast<uint64_t>(0x8000000000000000ULL);
+16535:   static const uint64_t MSP_POS_INF = static_cast<uint64_t>(0x7fff000000000000ULL);
+16535:   static const uint64_t MSP_NEG_INF = static_cast<uint64_t>(0xffff000000000000ULL);
+16535:   static const uint64_t MSP_POS_ZERO = static_cast<uint64_t>(0x0000000000000000ULL);
+16535:   static const uint64_t MSP_NEG_ZERO = static_cast<uint64_t>(0x8000000000000000ULL);
+16535:   static const uint64_t LSP_INF = 0;
+16535:   static const uint64_t LSP_ZERO = 0;
+16535:   static const uint64_t MSP_MAX = static_cast<uint64_t>(0x7ffeffffffffffffULL);
+16535:   static const uint64_t LSP_MAX = static_cast<uint64_t>(0xffffffffffffffffULL);
+16535:   static const unsigned int BASE = 2;
+16535:   static const unsigned int EXPONENT_BITS = 15;
+16535:   static const unsigned int MANTISSA_BITS = 112;
+16535:   static const int EXPONENT_MAX = (1 << (EXPONENT_BITS - 1)) - 1;
+16535:   static const int EXPONENT_BIAS = EXPONENT_MAX;
+16535:   static const int EXPONENT_MIN = -EXPONENT_MAX + 1;
+16535:   static const int EXPONENT_MIN_DENORM = EXPONENT_MIN
+16535:                                         - static_cast<int>(MANTISSA_BITS);
+16535:   static const Floating_Point_Format floating_point_format = IEEE754_QUAD;
+16535:   int inf_sign() const;
+16535:   bool is_nan() const;
+16535:   int zero_sign() const;
+16535:   bool sign_bit() const;
+16535:   void negate();
+16535:   void dec();
+16535:   void inc();
+16535:   void set_max(bool negative);
+16535:   void build(bool negative, mpz_t mantissa, int exponent);
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: class Float : public False { };
+16535: 
+16535: 
+16535: template <>
+16535: class Float<float> : public True {
+16535: public:
+16535: 
+16535: 
+16535: 
+16535:   typedef float_ieee754_single Binary;
+16535: # 306 "../../src/Float_defs.hh"
+16535:   union {
+16535:     float number;
+16535:     Binary binary;
+16535:   } u;
+16535:   Float();
+16535:   Float(float v);
+16535:   float value();
+16535: };
+16535: 
+16535: 
+16535: 
+16535: template <>
+16535: class Float<double> : public True {
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef float_ieee754_double Binary;
+16535: # 335 "../../src/Float_defs.hh"
+16535:   union {
+16535:     double number;
+16535:     Binary binary;
+16535:   } u;
+16535:   Float();
+16535:   Float(double v);
+16535:   double value();
+16535: };
+16535: 
+16535: 
+16535: 
+16535: template <>
+16535: class Float<long double> : public True {
+16535: public:
+16535: # 360 "../../src/Float_defs.hh"
+16535:   typedef float_intel_double_extended Binary;
+16535: 
+16535: 
+16535: 
+16535:   union {
+16535:     long double number;
+16535:     Binary binary;
+16535:   } u;
+16535:   Float();
+16535:   Float(long double v);
+16535:   long double value();
+16535: };
+16535: # 383 "../../src/Float_defs.hh"
+16535: unsigned int msb_position(unsigned long long v);
+16535: # 398 "../../src/Float_defs.hh"
+16535: template <typename Target, typename FP_Interval_Type>
+16535: class FP_Oracle {
+16535: public:
+16535: # 414 "../../src/Float_defs.hh"
+16535:   virtual bool get_interval(dimension_type dim, FP_Interval_Type& result) const
+16535:     = 0;
+16535: # 425 "../../src/Float_defs.hh"
+16535:   virtual bool get_fp_constant_value(
+16535:                const Floating_Point_Constant<Target>& expr,
+16535:                      FP_Interval_Type& result) const = 0;
+16535: # 437 "../../src/Float_defs.hh"
+16535:   virtual bool get_integer_expr_value(const Concrete_Expression<Target>& expr,
+16535:                                       FP_Interval_Type& result) const = 0;
+16535: # 450 "../../src/Float_defs.hh"
+16535:   virtual bool get_associated_dimensions(
+16535:           const Approximable_Reference<Target>& expr,
+16535:           std::set<dimension_type>& result) const = 0;
+16535: 
+16535: };
+16535: # 463 "../../src/Float_defs.hh"
+16535: bool is_less_precise_than(Floating_Point_Format f1, Floating_Point_Format f2);
+16535: # 481 "../../src/Float_defs.hh"
+16535: template <typename FP_Interval_Type>
+16535: const FP_Interval_Type&
+16535: compute_absolute_error(Floating_Point_Format analyzed_format);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename FP_Interval_Type>
+16535: void
+16535: discard_occurrences(std::map<dimension_type,
+16535:                              Linear_Form<FP_Interval_Type> >& lf_store,
+16535:                     Variable var);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename FP_Interval_Type>
+16535: void
+16535: affine_form_image(std::map<dimension_type,
+16535:                            Linear_Form<FP_Interval_Type> >& lf_store,
+16535:                   Variable var,
+16535:                   const Linear_Form<FP_Interval_Type>& lf);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename FP_Interval_Type>
+16535: void
+16535: upper_bound_assign(std::map<dimension_type,
+16535:                             Linear_Form<FP_Interval_Type> >& ls1,
+16535:                    const std::map<dimension_type,
+16535:                                   Linear_Form<FP_Interval_Type> >& ls2);
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Float_inlines.hh" 1
+16535: # 27 "../../src/Float_inlines.hh"
+16535: # 1 "../../src/Variable_defs.hh" 1
+16535: # 28 "../../src/Variable_defs.hh"
+16535: # 1 "../../src/Init_types.hh" 1
+16535: # 16 "../../src/Init_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Init;
+16535: 
+16535: }
+16535: # 29 "../../src/Variable_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: std::ostream&
+16535: operator<<(std::ostream& s, const Variable v);
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: bool less(Variable v, Variable w);
+16535: 
+16535: 
+16535: void
+16535: swap(Variable& x, Variable& y);
+16535: 
+16535: }
+16535: # 85 "../../src/Variable_defs.hh"
+16535: class Parma_Polyhedra_Library::Variable {
+16535: 
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   explicit Variable(dimension_type i);
+16535: 
+16535: 
+16535:   dimension_type id() const;
+16535: 
+16535: 
+16535:   static dimension_type max_space_dimension();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535: 
+16535:   typedef void output_function_type(std::ostream& s, const Variable v);
+16535: 
+16535: 
+16535:   static void default_output_function(std::ostream& s, const Variable v);
+16535: 
+16535: 
+16535:   static void set_output_function(output_function_type* p);
+16535: 
+16535: 
+16535:   static output_function_type* get_output_function();
+16535: 
+16535: 
+16535: 
+16535:   struct Compare {
+16535: 
+16535:     bool operator()(Variable x, Variable y) const;
+16535:   };
+16535: 
+16535: 
+16535:   void m_swap(Variable& v);
+16535: 
+16535: private:
+16535: 
+16535:   dimension_type varid;
+16535: 
+16535: 
+16535:   friend class Init;
+16535: 
+16535:   friend std::ostream&
+16535:   Parma_Polyhedra_Library::IO_Operators::operator<<(std::ostream& s,
+16535:                                                     const Variable v);
+16535: 
+16535: 
+16535:   static output_function_type* current_output_function;
+16535: 
+16535: };
+16535: 
+16535: # 1 "../../src/Variable_inlines.hh" 1
+16535: # 27 "../../src/Variable_inlines.hh"
+16535: # 1 "../../src/globals_defs.hh" 1
+16535: # 28 "../../src/globals_defs.hh"
+16535: # 1 "../../src/C_Integer.hh" 1
+16535: # 28 "../../src/C_Integer.hh"
+16535: # 1 "/usr/include/c++/8/climits" 1 3
+16535: # 39 "/usr/include/c++/8/climits" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/climits" 3
+16535: 
+16535: 
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 1 3 4
+16535: # 43 "/usr/include/c++/8/climits" 2 3
+16535: # 29 "../../src/C_Integer.hh" 2
+16535: # 59 "../../src/C_Integer.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: struct C_Integer : public False { };
+16535: 
+16535: template <>
+16535: struct C_Integer<char> : public True {
+16535:   enum const_bool_value {
+16535: 
+16535:     is_signed = true
+16535: 
+16535: 
+16535: 
+16535:   };
+16535:   typedef void smaller_type;
+16535:   typedef void smaller_signed_type;
+16535:   typedef void smaller_unsigned_type;
+16535: 
+16535:   typedef unsigned char other_type;
+16535: 
+16535: 
+16535: 
+16535:   static const char min = static_cast<char>(
+16535: # 81 "../../src/C_Integer.hh" 3 4
+16535:                                            (-0x7f - 1)
+16535: # 81 "../../src/C_Integer.hh"
+16535:                                                    );
+16535:   static const char max = static_cast<char>(0x7f);
+16535: };
+16535: 
+16535: template <>
+16535: struct C_Integer<signed char> : public True {
+16535:   enum const_bool_value {
+16535:     is_signed = true
+16535:   };
+16535:   typedef void smaller_type;
+16535:   typedef void smaller_signed_type;
+16535:   typedef void smaller_unsigned_type;
+16535:   typedef unsigned char other_type;
+16535:   static const signed char min = static_cast<signed char>(
+16535: # 94 "../../src/C_Integer.hh" 3 4
+16535:                                                          (-0x7f - 1)
+16535: # 94 "../../src/C_Integer.hh"
+16535:                                                                   );
+16535:   static const signed char max = static_cast<signed char>(0x7f);
+16535: };
+16535: 
+16535: template <>
+16535: struct C_Integer<signed short> : public True {
+16535:   enum const_bool_value {
+16535:     is_signed = true
+16535:   };
+16535:   typedef signed char smaller_type;
+16535:   typedef signed char smaller_signed_type;
+16535:   typedef unsigned char smaller_unsigned_type;
+16535:   typedef unsigned short other_type;
+16535:   static const signed short min = static_cast<signed short>(
+16535: # 107 "../../src/C_Integer.hh" 3 4
+16535:                                                            (-0x7fff - 1)
+16535: # 107 "../../src/C_Integer.hh"
+16535:                                                                    );
+16535:   static const signed short max = static_cast<signed short>(0x7fff);
+16535: };
+16535: 
+16535: template <>
+16535: struct C_Integer<signed int> : public True {
+16535:   enum const_bool_value {
+16535:     is_signed = true
+16535:   };
+16535:   typedef signed short smaller_type;
+16535:   typedef signed short smaller_signed_type;
+16535:   typedef unsigned short smaller_unsigned_type;
+16535:   typedef unsigned int other_type;
+16535:   static const signed int min = 
+16535: # 120 "../../src/C_Integer.hh" 3 4
+16535:                                (-0x7fffffff - 1)
+16535: # 120 "../../src/C_Integer.hh"
+16535:                                       ;
+16535:   static const signed int max = 0x7fffffff;
+16535: };
+16535: 
+16535: template <>
+16535: struct C_Integer<signed long> : public True {
+16535:   enum const_bool_value {
+16535:     is_signed = true
+16535:   };
+16535:   typedef signed int smaller_type;
+16535:   typedef signed int smaller_signed_type;
+16535:   typedef unsigned int smaller_unsigned_type;
+16535:   typedef unsigned long other_type;
+16535:   static const signed long min = 
+16535: # 133 "../../src/C_Integer.hh" 3 4
+16535:                                 (-0x7fffffffffffffffL - 1L)
+16535: # 133 "../../src/C_Integer.hh"
+16535:                                         ;
+16535:   static const signed long max = 0x7fffffffffffffffL;
+16535: };
+16535: 
+16535: template <>
+16535: struct C_Integer<signed long long> : public True {
+16535:   enum const_bool_value {
+16535:     is_signed = true
+16535:   };
+16535:   typedef signed long smaller_type;
+16535:   typedef signed long smaller_signed_type;
+16535:   typedef unsigned long smaller_unsigned_type;
+16535:   typedef unsigned long long other_type;
+16535:   static const signed long long min = 
+16535: # 146 "../../src/C_Integer.hh" 3 4
+16535:                                      (-0x7fffffffffffffffLL -1)
+16535: # 146 "../../src/C_Integer.hh"
+16535:                                               ;
+16535:   static const signed long long max = 0x7fffffffffffffffLL;
+16535: };
+16535: 
+16535: template <>
+16535: struct C_Integer<unsigned char> : public True {
+16535:   enum const_bool_value {
+16535:     is_signed = false
+16535:   };
+16535:   typedef void smaller_type;
+16535:   typedef void smaller_signed_type;
+16535:   typedef void smaller_unsigned_type;
+16535:   typedef signed char other_type;
+16535:   static const unsigned char min = static_cast<unsigned char>(0U);
+16535:   static const unsigned char max = static_cast<unsigned char>(
+16535: # 160 "../../src/C_Integer.hh" 3 4
+16535:                                                              (0x7f * 2 + 1)
+16535: # 160 "../../src/C_Integer.hh"
+16535:                                                                       );
+16535: };
+16535: 
+16535: template <>
+16535: struct C_Integer<unsigned short> : public True {
+16535:   enum const_bool_value {
+16535:     is_signed = false
+16535:   };
+16535:   typedef unsigned char smaller_type;
+16535:   typedef signed char smaller_signed_type;
+16535:   typedef unsigned char smaller_unsigned_type;
+16535:   typedef signed short other_type;
+16535:   static const unsigned short min = static_cast<unsigned short>(0U);
+16535:   static const unsigned short max = static_cast<unsigned short>(
+16535: # 173 "../../src/C_Integer.hh" 3 4
+16535:                                                                (0x7fff * 2 + 1)
+16535: # 173 "../../src/C_Integer.hh"
+16535:                                                                         );
+16535: };
+16535: 
+16535: template <>
+16535: struct C_Integer<unsigned int> : public True {
+16535:   enum const_bool_value {
+16535:     is_signed = false
+16535:   };
+16535:   typedef unsigned short smaller_type;
+16535:   typedef signed short smaller_signed_type;
+16535:   typedef unsigned short smaller_unsigned_type;
+16535:   typedef signed int other_type;
+16535:   static const unsigned int min = 0U;
+16535:   static const unsigned int max = 
+16535: # 186 "../../src/C_Integer.hh" 3 4
+16535:                                  (0x7fffffff * 2U + 1U)
+16535: # 186 "../../src/C_Integer.hh"
+16535:                                          ;
+16535: };
+16535: 
+16535: template <>
+16535: struct C_Integer<unsigned long> : public True {
+16535:   enum const_bool_value {
+16535:     is_signed = false
+16535:   };
+16535:   typedef unsigned int smaller_type;
+16535:   typedef signed int smaller_signed_type;
+16535:   typedef unsigned int smaller_unsigned_type;
+16535:   typedef signed long other_type;
+16535:   static const unsigned long min = 0UL;
+16535:   static const unsigned long max = 
+16535: # 199 "../../src/C_Integer.hh" 3 4
+16535:                                   (0x7fffffffffffffffL * 2UL + 1UL)
+16535: # 199 "../../src/C_Integer.hh"
+16535:                                            ;
+16535: };
+16535: 
+16535: template <>
+16535: struct C_Integer<unsigned long long> : public True {
+16535:   enum const_bool_value {
+16535:     is_signed = false
+16535:   };
+16535:   typedef unsigned long smaller_type;
+16535:   typedef signed long smaller_signed_type;
+16535:   typedef unsigned long smaller_unsigned_type;
+16535:   typedef signed long long other_type;
+16535:   static const unsigned long long min = 0ULL;
+16535:   static const unsigned long long max = 
+16535: # 212 "../../src/C_Integer.hh" 3 4
+16535:                                        (0x7fffffffffffffffLL * 2ULL + 1)
+16535: # 212 "../../src/C_Integer.hh"
+16535:                                                  ;
+16535: };
+16535: 
+16535: }
+16535: # 29 "../../src/globals_defs.hh" 2
+16535: # 100 "../../src/globals_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: dimension_type
+16535: not_a_dimension();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: int32_t
+16535: hash_code_from_dimension(dimension_type dim);
+16535: # 120 "../../src/globals_defs.hh"
+16535: template <typename T>
+16535: inline typename Enable_If<Slow_Copy<T>::value, void>::type
+16535: swap(T&, T&) {
+16535:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_123 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!Slow_Copy<T>::value)>) };
+16535: }
+16535: # 156 "../../src/globals_defs.hh"
+16535: dimension_type
+16535: compute_capacity(dimension_type requested_size,
+16535:                  dimension_type maximum_size);
+16535: # 169 "../../src/globals_defs.hh"
+16535: struct Weightwatch_Traits {
+16535: 
+16535:   typedef unsigned long long Threshold;
+16535: 
+16535: 
+16535:   typedef unsigned long long Delta;
+16535: 
+16535: 
+16535:   static const Threshold& get();
+16535: 
+16535: 
+16535:   static bool less_than(const Threshold& a, const Threshold& b);
+16535: # 194 "../../src/globals_defs.hh"
+16535:   static Delta compute_delta(unsigned long unscaled, unsigned scale);
+16535: 
+16535: 
+16535:   static void from_delta(Threshold& threshold, const Delta& delta);
+16535: 
+16535: 
+16535:   static Threshold weight;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static void (*check_function)(void);
+16535: };
+16535: # 239 "../../src/globals_defs.hh"
+16535: class Throwable {
+16535: public:
+16535: 
+16535:   virtual void throw_me() const = 0;
+16535: 
+16535: 
+16535:   virtual ~Throwable();
+16535: };
+16535: # 271 "../../src/globals_defs.hh"
+16535: extern const Throwable* volatile abandon_expensive_computations;
+16535: # 281 "../../src/globals_defs.hh"
+16535: void
+16535: maybe_abandon();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: struct Recycle_Input {
+16535: };
+16535: # 401 "../../src/globals_defs.hh"
+16535: bool is_space(char c);
+16535: 
+16535: template <typename T, long long v, typename Enable = void>
+16535: struct Fit : public False {
+16535: };
+16535: 
+16535: template <typename T, long long v>
+16535: struct Fit<T, v, typename Enable_If<C_Integer<T>::value>::type> {
+16535:   enum {
+16535:     value = (v >= static_cast<long long>(C_Integer<T>::min)
+16535:              && v <= static_cast<long long>(C_Integer<T>::max))
+16535:   };
+16535: };
+16535: 
+16535: template <typename T, T v>
+16535: struct TConstant {
+16535:   static const T value = v;
+16535: };
+16535: 
+16535: 
+16535: template <typename T, T v>
+16535: const T TConstant<T, v>::value;
+16535: 
+16535: template <typename T, long long v, bool prefer_signed = true,
+16535:           typename Enable = void>
+16535: struct Constant_ : public TConstant<T, v> {
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T, long long v, bool prefer_signed>
+16535: struct Constant_<T, v, prefer_signed,
+16535:                  typename Enable_If<(Fit<typename C_Integer<T>::smaller_signed_type, v>::value
+16535:                                      && (prefer_signed
+16535:                                          || !Fit<typename C_Integer<T>::smaller_unsigned_type, v>::value))>::type>
+16535:   : public Constant_<typename C_Integer<T>::smaller_signed_type, v, prefer_signed> {
+16535: };
+16535: 
+16535: template <typename T, long long v, bool prefer_signed>
+16535: struct Constant_<T, v, prefer_signed,
+16535:                  typename Enable_If<(Fit<typename C_Integer<T>::smaller_unsigned_type, v>::value
+16535:                                      && (!prefer_signed
+16535:                                          || !Fit<typename C_Integer<T>::smaller_signed_type, v>::value))>::type>
+16535:   : public Constant_<typename C_Integer<T>::smaller_unsigned_type, v, prefer_signed> {
+16535: };
+16535: 
+16535: 
+16535: 
+16535: template <long long v, bool prefer_signed = true>
+16535: struct Constant : public Constant_<long long, v, prefer_signed> {
+16535: };
+16535: # 465 "../../src/globals_defs.hh"
+16535: template <typename T>
+16535: typename Enable_If<Is_Native<T>::value, memory_size_type>::type
+16535: total_memory_in_bytes(const T&);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: typename Enable_If<Is_Native<T>::value, memory_size_type>::type
+16535: external_memory_in_bytes(const T&);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: memory_size_type
+16535: total_memory_in_bytes(const mpz_class& x);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: memory_size_type
+16535: external_memory_in_bytes(const mpz_class& x);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: memory_size_type
+16535: total_memory_in_bytes(const mpq_class& x);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: memory_size_type
+16535: external_memory_in_bytes(const mpq_class& x);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Enable = void>
+16535: struct Has_OK : public False { };
+16535: 
+16535: template <typename T>
+16535: struct Has_OK<T, typename Enable_If_Is<bool (T::*)() const, &T::OK>::type>
+16535:   : public True {
+16535: };
+16535: 
+16535: template <typename T>
+16535: inline typename Enable_If<Has_OK<T>::value, bool>::type
+16535: f_OK(const T& to) {
+16535:   return to.OK();
+16535: }
+16535: 
+16535: 
+16535: 
+16535: inline bool f_OK(const char&) { return true; }
+16535: inline bool f_OK(const signed char&) { return true; }
+16535: inline bool f_OK(const unsigned char&) { return true; }
+16535: inline bool f_OK(const signed short&) { return true; }
+16535: inline bool f_OK(const unsigned short&) { return true; }
+16535: inline bool f_OK(const signed int&) { return true; }
+16535: inline bool f_OK(const unsigned int&) { return true; }
+16535: inline bool f_OK(const signed long&) { return true; }
+16535: inline bool f_OK(const unsigned long&) { return true; }
+16535: inline bool f_OK(const signed long long&) { return true; }
+16535: inline bool f_OK(const unsigned long long&) { return true; }
+16535: inline bool f_OK(const float&) { return true; }
+16535: inline bool f_OK(const double&) { return true; }
+16535: inline bool f_OK(const long double&) { return true; }
+16535: inline bool f_OK(const mpz_class&) { return true; }
+16535: inline bool f_OK(const mpq_class&) { return true; }
+16535: 
+16535: void ascii_dump(std::ostream& s, Representation r);
+16535: bool ascii_load(std::istream& s, Representation& r);
+16535: 
+16535: dimension_type
+16535: check_space_dimension_overflow(dimension_type dim,
+16535:                                dimension_type max,
+16535:                                const char* domain,
+16535:                                const char* method,
+16535:                                const char* reason);
+16535: 
+16535: template <typename RA_Container>
+16535: typename RA_Container::iterator
+16535: nth_iter(RA_Container& cont, dimension_type n);
+16535: 
+16535: template <typename RA_Container>
+16535: typename RA_Container::const_iterator
+16535: nth_iter(const RA_Container& cont, dimension_type n);
+16535: 
+16535: dimension_type
+16535: least_significant_one_mask(dimension_type i);
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "../../src/globals_inlines.hh" 1
+16535: # 29 "../../src/globals_inlines.hh"
+16535: # 1 "/usr/include/c++/8/cassert" 1 3
+16535: # 41 "/usr/include/c++/8/cassert" 3
+16535:        
+16535: # 42 "/usr/include/c++/8/cassert" 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/assert.h" 1 3 4
+16535: # 44 "/usr/include/c++/8/cassert" 2 3
+16535: # 30 "../../src/globals_inlines.hh" 2
+16535: # 1 "/usr/include/c++/8/istream" 1 3
+16535: # 36 "/usr/include/c++/8/istream" 3
+16535:        
+16535: # 37 "/usr/include/c++/8/istream" 3
+16535: 
+16535: # 1 "/usr/include/c++/8/ios" 1 3
+16535: # 36 "/usr/include/c++/8/ios" 3
+16535:        
+16535: # 37 "/usr/include/c++/8/ios" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/ios_base.h" 1 3
+16535: # 37 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:        
+16535: # 38 "/usr/include/c++/8/bits/ios_base.h" 3
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/locale_classes.h" 1 3
+16535: # 37 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:        
+16535: # 38 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 43 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 62 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:   class locale
+16535:   {
+16535:   public:
+16535: 
+16535: 
+16535:     typedef int category;
+16535: 
+16535: 
+16535:     class facet;
+16535:     class id;
+16535:     class _Impl;
+16535: 
+16535:     friend class facet;
+16535:     friend class _Impl;
+16535: 
+16535:     template<typename _Facet>
+16535:       friend bool
+16535:       has_facet(const locale&) throw();
+16535: 
+16535:     template<typename _Facet>
+16535:       friend const _Facet&
+16535:       use_facet(const locale&);
+16535: 
+16535:     template<typename _Cache>
+16535:       friend struct __use_cache;
+16535: # 98 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:     static const category none = 0;
+16535:     static const category ctype = 1L << 0;
+16535:     static const category numeric = 1L << 1;
+16535:     static const category collate = 1L << 2;
+16535:     static const category time = 1L << 3;
+16535:     static const category monetary = 1L << 4;
+16535:     static const category messages = 1L << 5;
+16535:     static const category all = (ctype | numeric | collate |
+16535:         time | monetary | messages);
+16535: # 117 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:     locale() throw();
+16535: # 126 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:     locale(const locale& __other) throw();
+16535: # 136 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:     explicit
+16535:     locale(const char* __s);
+16535: # 151 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:     locale(const locale& __base, const char* __s, category __cat);
+16535: # 162 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:     explicit
+16535:     locale(const std::string& __s) : locale(__s.c_str()) { }
+16535: # 177 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:     locale(const locale& __base, const std::string& __s, category __cat)
+16535:     : locale(__base, __s.c_str(), __cat) { }
+16535: # 192 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:     locale(const locale& __base, const locale& __add, category __cat);
+16535: # 205 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:     template<typename _Facet>
+16535:       locale(const locale& __other, _Facet* __f);
+16535: 
+16535: 
+16535:     ~locale() throw();
+16535: # 219 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:     const locale&
+16535:     operator=(const locale& __other) throw();
+16535: # 234 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:     template<typename _Facet>
+16535:       locale
+16535:       combine(const locale& __other) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     __attribute ((__abi_tag__ ("cxx11")))
+16535:     string
+16535:     name() const;
+16535: # 254 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:     bool
+16535:     operator==(const locale& __other) const throw();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     bool
+16535:     operator!=(const locale& __other) const throw()
+16535:     { return !(this->operator==(__other)); }
+16535: # 282 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:     template<typename _Char, typename _Traits, typename _Alloc>
+16535:       bool
+16535:       operator()(const basic_string<_Char, _Traits, _Alloc>& __s1,
+16535:    const basic_string<_Char, _Traits, _Alloc>& __s2) const;
+16535: # 298 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:     static locale
+16535:     global(const locale& __loc);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     static const locale&
+16535:     classic();
+16535: 
+16535:   private:
+16535: 
+16535:     _Impl* _M_impl;
+16535: 
+16535: 
+16535:     static _Impl* _S_classic;
+16535: 
+16535: 
+16535:     static _Impl* _S_global;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     static const char* const* const _S_categories;
+16535: # 333 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:     enum { _S_categories_size = 6 + 6 };
+16535: 
+16535: 
+16535:     static __gthread_once_t _S_once;
+16535: 
+16535: 
+16535:     explicit
+16535:     locale(_Impl*) throw();
+16535: 
+16535:     static void
+16535:     _S_initialize();
+16535: 
+16535:     static void
+16535:     _S_initialize_once() throw();
+16535: 
+16535:     static category
+16535:     _S_normalize_category(category);
+16535: 
+16535:     void
+16535:     _M_coalesce(const locale& __base, const locale& __add, category __cat);
+16535: 
+16535: 
+16535:     static const id* const _S_twinned_facets[];
+16535: 
+16535:   };
+16535: # 371 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:   class locale::facet
+16535:   {
+16535:   private:
+16535:     friend class locale;
+16535:     friend class locale::_Impl;
+16535: 
+16535:     mutable _Atomic_word _M_refcount;
+16535: 
+16535: 
+16535:     static __c_locale _S_c_locale;
+16535: 
+16535: 
+16535:     static const char _S_c_name[2];
+16535: 
+16535: 
+16535:     static __gthread_once_t _S_once;
+16535: 
+16535: 
+16535:     static void
+16535:     _S_initialize_once();
+16535: 
+16535:   protected:
+16535: # 402 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:     explicit
+16535:     facet(size_t __refs = 0) throw() : _M_refcount(__refs ? 1 : 0)
+16535:     { }
+16535: 
+16535: 
+16535:     virtual
+16535:     ~facet();
+16535: 
+16535:     static void
+16535:     _S_create_c_locale(__c_locale& __cloc, const char* __s,
+16535:          __c_locale __old = 0);
+16535: 
+16535:     static __c_locale
+16535:     _S_clone_c_locale(__c_locale& __cloc) throw();
+16535: 
+16535:     static void
+16535:     _S_destroy_c_locale(__c_locale& __cloc);
+16535: 
+16535:     static __c_locale
+16535:     _S_lc_ctype_c_locale(__c_locale __cloc, const char* __s);
+16535: 
+16535: 
+16535: 
+16535:     static __c_locale
+16535:     _S_get_c_locale();
+16535: 
+16535:     __attribute__ ((__const__)) static const char*
+16535:     _S_get_c_name() throw();
+16535: # 438 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:     facet(const facet&) = delete;
+16535: 
+16535:     facet&
+16535:     operator=(const facet&) = delete;
+16535: 
+16535: 
+16535:   private:
+16535:     void
+16535:     _M_add_reference() const throw()
+16535:     { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); }
+16535: 
+16535:     void
+16535:     _M_remove_reference() const throw()
+16535:     {
+16535: 
+16535:       ;
+16535:       if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1)
+16535:  {
+16535:           ;
+16535:    try
+16535:      { delete this; }
+16535:    catch(...)
+16535:      { }
+16535:  }
+16535:     }
+16535: 
+16535:     const facet* _M_sso_shim(const id*) const;
+16535:     const facet* _M_cow_shim(const id*) const;
+16535: 
+16535:   protected:
+16535:     class __shim;
+16535:   };
+16535: # 483 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:   class locale::id
+16535:   {
+16535:   private:
+16535:     friend class locale;
+16535:     friend class locale::_Impl;
+16535: 
+16535:     template<typename _Facet>
+16535:       friend const _Facet&
+16535:       use_facet(const locale&);
+16535: 
+16535:     template<typename _Facet>
+16535:       friend bool
+16535:       has_facet(const locale&) throw();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     mutable size_t _M_index;
+16535: 
+16535: 
+16535:     static _Atomic_word _S_refcount;
+16535: 
+16535:     void
+16535:     operator=(const id&);
+16535: 
+16535:     id(const id&);
+16535: 
+16535:   public:
+16535: 
+16535: 
+16535: 
+16535:     id() { }
+16535: 
+16535:     size_t
+16535:     _M_id() const throw();
+16535:   };
+16535: 
+16535: 
+16535: 
+16535:   class locale::_Impl
+16535:   {
+16535:   public:
+16535: 
+16535:     friend class locale;
+16535:     friend class locale::facet;
+16535: 
+16535:     template<typename _Facet>
+16535:       friend bool
+16535:       has_facet(const locale&) throw();
+16535: 
+16535:     template<typename _Facet>
+16535:       friend const _Facet&
+16535:       use_facet(const locale&);
+16535: 
+16535:     template<typename _Cache>
+16535:       friend struct __use_cache;
+16535: 
+16535:   private:
+16535: 
+16535:     _Atomic_word _M_refcount;
+16535:     const facet** _M_facets;
+16535:     size_t _M_facets_size;
+16535:     const facet** _M_caches;
+16535:     char** _M_names;
+16535:     static const locale::id* const _S_id_ctype[];
+16535:     static const locale::id* const _S_id_numeric[];
+16535:     static const locale::id* const _S_id_collate[];
+16535:     static const locale::id* const _S_id_time[];
+16535:     static const locale::id* const _S_id_monetary[];
+16535:     static const locale::id* const _S_id_messages[];
+16535:     static const locale::id* const* const _S_facet_categories[];
+16535: 
+16535:     void
+16535:     _M_add_reference() throw()
+16535:     { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); }
+16535: 
+16535:     void
+16535:     _M_remove_reference() throw()
+16535:     {
+16535: 
+16535:       ;
+16535:       if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1)
+16535:  {
+16535:           ;
+16535:    try
+16535:      { delete this; }
+16535:    catch(...)
+16535:      { }
+16535:  }
+16535:     }
+16535: 
+16535:     _Impl(const _Impl&, size_t);
+16535:     _Impl(const char*, size_t);
+16535:     _Impl(size_t) throw();
+16535: 
+16535:    ~_Impl() throw();
+16535: 
+16535:     _Impl(const _Impl&);
+16535: 
+16535:     void
+16535:     operator=(const _Impl&);
+16535: 
+16535:     bool
+16535:     _M_check_same_name()
+16535:     {
+16535:       bool __ret = true;
+16535:       if (_M_names[1])
+16535: 
+16535:  for (size_t __i = 0; __ret && __i < _S_categories_size - 1; ++__i)
+16535:    __ret = __builtin_strcmp(_M_names[__i], _M_names[__i + 1]) == 0;
+16535:       return __ret;
+16535:     }
+16535: 
+16535:     void
+16535:     _M_replace_categories(const _Impl*, category);
+16535: 
+16535:     void
+16535:     _M_replace_category(const _Impl*, const locale::id* const*);
+16535: 
+16535:     void
+16535:     _M_replace_facet(const _Impl*, const locale::id*);
+16535: 
+16535:     void
+16535:     _M_install_facet(const locale::id*, const facet*);
+16535: 
+16535:     template<typename _Facet>
+16535:       void
+16535:       _M_init_facet(_Facet* __facet)
+16535:       { _M_install_facet(&_Facet::id, __facet); }
+16535: 
+16535:     template<typename _Facet>
+16535:       void
+16535:       _M_init_facet_unchecked(_Facet* __facet)
+16535:       {
+16535:  __facet->_M_add_reference();
+16535:  _M_facets[_Facet::id._M_id()] = __facet;
+16535:       }
+16535: 
+16535:     void
+16535:     _M_install_cache(const facet*, size_t);
+16535: 
+16535:     void _M_init_extra(facet**);
+16535:     void _M_init_extra(void*, void*, const char*, const char*);
+16535:   };
+16535: # 641 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:   template<typename _CharT>
+16535:     class __cxx11:: collate : public locale::facet
+16535:     {
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef basic_string<_CharT> string_type;
+16535: 
+16535: 
+16535:     protected:
+16535: 
+16535: 
+16535:       __c_locale _M_c_locale_collate;
+16535: 
+16535:     public:
+16535: 
+16535:       static locale::id id;
+16535: # 668 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:       explicit
+16535:       collate(size_t __refs = 0)
+16535:       : facet(__refs), _M_c_locale_collate(_S_get_c_locale())
+16535:       { }
+16535: # 682 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:       explicit
+16535:       collate(__c_locale __cloc, size_t __refs = 0)
+16535:       : facet(__refs), _M_c_locale_collate(_S_clone_c_locale(__cloc))
+16535:       { }
+16535: # 699 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:       int
+16535:       compare(const _CharT* __lo1, const _CharT* __hi1,
+16535:        const _CharT* __lo2, const _CharT* __hi2) const
+16535:       { return this->do_compare(__lo1, __hi1, __lo2, __hi2); }
+16535: # 718 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:       string_type
+16535:       transform(const _CharT* __lo, const _CharT* __hi) const
+16535:       { return this->do_transform(__lo, __hi); }
+16535: # 732 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:       long
+16535:       hash(const _CharT* __lo, const _CharT* __hi) const
+16535:       { return this->do_hash(__lo, __hi); }
+16535: 
+16535: 
+16535:       int
+16535:       _M_compare(const _CharT*, const _CharT*) const throw();
+16535: 
+16535:       size_t
+16535:       _M_transform(_CharT*, const _CharT*, size_t) const throw();
+16535: 
+16535:   protected:
+16535: 
+16535:       virtual
+16535:       ~collate()
+16535:       { _S_destroy_c_locale(_M_c_locale_collate); }
+16535: # 761 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:       virtual int
+16535:       do_compare(const _CharT* __lo1, const _CharT* __hi1,
+16535:    const _CharT* __lo2, const _CharT* __hi2) const;
+16535: # 775 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:       virtual string_type
+16535:       do_transform(const _CharT* __lo, const _CharT* __hi) const;
+16535: # 788 "/usr/include/c++/8/bits/locale_classes.h" 3
+16535:       virtual long
+16535:       do_hash(const _CharT* __lo, const _CharT* __hi) const;
+16535:     };
+16535: 
+16535:   template<typename _CharT>
+16535:     locale::id collate<_CharT>::id;
+16535: 
+16535: 
+16535:   template<>
+16535:     int
+16535:     collate<char>::_M_compare(const char*, const char*) const throw();
+16535: 
+16535:   template<>
+16535:     size_t
+16535:     collate<char>::_M_transform(char*, const char*, size_t) const throw();
+16535: 
+16535: 
+16535:   template<>
+16535:     int
+16535:     collate<wchar_t>::_M_compare(const wchar_t*, const wchar_t*) const throw();
+16535: 
+16535:   template<>
+16535:     size_t
+16535:     collate<wchar_t>::_M_transform(wchar_t*, const wchar_t*, size_t) const throw();
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     class __cxx11:: collate_byname : public collate<_CharT>
+16535:     {
+16535:     public:
+16535: 
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef basic_string<_CharT> string_type;
+16535: 
+16535: 
+16535:       explicit
+16535:       collate_byname(const char* __s, size_t __refs = 0)
+16535:       : collate<_CharT>(__refs)
+16535:       {
+16535:  if (__builtin_strcmp(__s, "C") != 0
+16535:      && __builtin_strcmp(__s, "POSIX") != 0)
+16535:    {
+16535:      this->_S_destroy_c_locale(this->_M_c_locale_collate);
+16535:      this->_S_create_c_locale(this->_M_c_locale_collate, __s);
+16535:    }
+16535:       }
+16535: 
+16535: 
+16535:       explicit
+16535:       collate_byname(const string& __s, size_t __refs = 0)
+16535:       : collate_byname(__s.c_str(), __refs) { }
+16535: 
+16535: 
+16535:     protected:
+16535:       virtual
+16535:       ~collate_byname() { }
+16535:     };
+16535: 
+16535: 
+16535: }
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/locale_classes.tcc" 1 3
+16535: # 37 "/usr/include/c++/8/bits/locale_classes.tcc" 3
+16535:        
+16535: # 38 "/usr/include/c++/8/bits/locale_classes.tcc" 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   template<typename _Facet>
+16535:     locale::
+16535:     locale(const locale& __other, _Facet* __f)
+16535:     {
+16535:       _M_impl = new _Impl(*__other._M_impl, 1);
+16535: 
+16535:       try
+16535:  { _M_impl->_M_install_facet(&_Facet::id, __f); }
+16535:       catch(...)
+16535:  {
+16535:    _M_impl->_M_remove_reference();
+16535:    throw;
+16535:  }
+16535:       delete [] _M_impl->_M_names[0];
+16535:       _M_impl->_M_names[0] = 0;
+16535:     }
+16535: 
+16535:   template<typename _Facet>
+16535:     locale
+16535:     locale::
+16535:     combine(const locale& __other) const
+16535:     {
+16535:       _Impl* __tmp = new _Impl(*_M_impl, 1);
+16535:       try
+16535:  {
+16535:    __tmp->_M_replace_facet(__other._M_impl, &_Facet::id);
+16535:  }
+16535:       catch(...)
+16535:  {
+16535:    __tmp->_M_remove_reference();
+16535:    throw;
+16535:  }
+16535:       return locale(__tmp);
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     bool
+16535:     locale::
+16535:     operator()(const basic_string<_CharT, _Traits, _Alloc>& __s1,
+16535:         const basic_string<_CharT, _Traits, _Alloc>& __s2) const
+16535:     {
+16535:       typedef std::collate<_CharT> __collate_type;
+16535:       const __collate_type& __collate = use_facet<__collate_type>(*this);
+16535:       return (__collate.compare(__s1.data(), __s1.data() + __s1.length(),
+16535:     __s2.data(), __s2.data() + __s2.length()) < 0);
+16535:     }
+16535: # 102 "/usr/include/c++/8/bits/locale_classes.tcc" 3
+16535:   template<typename _Facet>
+16535:     bool
+16535:     has_facet(const locale& __loc) throw()
+16535:     {
+16535:       const size_t __i = _Facet::id._M_id();
+16535:       const locale::facet** __facets = __loc._M_impl->_M_facets;
+16535:       return (__i < __loc._M_impl->_M_facets_size
+16535: 
+16535:        && dynamic_cast<const _Facet*>(__facets[__i]));
+16535: 
+16535: 
+16535: 
+16535:     }
+16535: # 130 "/usr/include/c++/8/bits/locale_classes.tcc" 3
+16535:   template<typename _Facet>
+16535:     const _Facet&
+16535:     use_facet(const locale& __loc)
+16535:     {
+16535:       const size_t __i = _Facet::id._M_id();
+16535:       const locale::facet** __facets = __loc._M_impl->_M_facets;
+16535:       if (__i >= __loc._M_impl->_M_facets_size || !__facets[__i])
+16535:         __throw_bad_cast();
+16535: 
+16535:       return dynamic_cast<const _Facet&>(*__facets[__i]);
+16535: 
+16535: 
+16535: 
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     int
+16535:     collate<_CharT>::_M_compare(const _CharT*, const _CharT*) const throw ()
+16535:     { return 0; }
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     size_t
+16535:     collate<_CharT>::_M_transform(_CharT*, const _CharT*, size_t) const throw ()
+16535:     { return 0; }
+16535: 
+16535:   template<typename _CharT>
+16535:     int
+16535:     collate<_CharT>::
+16535:     do_compare(const _CharT* __lo1, const _CharT* __hi1,
+16535:         const _CharT* __lo2, const _CharT* __hi2) const
+16535:     {
+16535: 
+16535: 
+16535:       const string_type __one(__lo1, __hi1);
+16535:       const string_type __two(__lo2, __hi2);
+16535: 
+16535:       const _CharT* __p = __one.c_str();
+16535:       const _CharT* __pend = __one.data() + __one.length();
+16535:       const _CharT* __q = __two.c_str();
+16535:       const _CharT* __qend = __two.data() + __two.length();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       for (;;)
+16535:  {
+16535:    const int __res = _M_compare(__p, __q);
+16535:    if (__res)
+16535:      return __res;
+16535: 
+16535:    __p += char_traits<_CharT>::length(__p);
+16535:    __q += char_traits<_CharT>::length(__q);
+16535:    if (__p == __pend && __q == __qend)
+16535:      return 0;
+16535:    else if (__p == __pend)
+16535:      return -1;
+16535:    else if (__q == __qend)
+16535:      return 1;
+16535: 
+16535:    __p++;
+16535:    __q++;
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _CharT>
+16535:     typename collate<_CharT>::string_type
+16535:     collate<_CharT>::
+16535:     do_transform(const _CharT* __lo, const _CharT* __hi) const
+16535:     {
+16535:       string_type __ret;
+16535: 
+16535: 
+16535:       const string_type __str(__lo, __hi);
+16535: 
+16535:       const _CharT* __p = __str.c_str();
+16535:       const _CharT* __pend = __str.data() + __str.length();
+16535: 
+16535:       size_t __len = (__hi - __lo) * 2;
+16535: 
+16535:       _CharT* __c = new _CharT[__len];
+16535: 
+16535:       try
+16535:  {
+16535: 
+16535: 
+16535: 
+16535:    for (;;)
+16535:      {
+16535: 
+16535:        size_t __res = _M_transform(__c, __p, __len);
+16535: 
+16535: 
+16535:        if (__res >= __len)
+16535:   {
+16535:     __len = __res + 1;
+16535:     delete [] __c, __c = 0;
+16535:     __c = new _CharT[__len];
+16535:     __res = _M_transform(__c, __p, __len);
+16535:   }
+16535: 
+16535:        __ret.append(__c, __res);
+16535:        __p += char_traits<_CharT>::length(__p);
+16535:        if (__p == __pend)
+16535:   break;
+16535: 
+16535:        __p++;
+16535:        __ret.push_back(_CharT());
+16535:      }
+16535:  }
+16535:       catch(...)
+16535:  {
+16535:    delete [] __c;
+16535:    throw;
+16535:  }
+16535: 
+16535:       delete [] __c;
+16535: 
+16535:       return __ret;
+16535:     }
+16535: 
+16535:   template<typename _CharT>
+16535:     long
+16535:     collate<_CharT>::
+16535:     do_hash(const _CharT* __lo, const _CharT* __hi) const
+16535:     {
+16535:       unsigned long __val = 0;
+16535:       for (; __lo < __hi; ++__lo)
+16535:  __val =
+16535:    *__lo + ((__val << 7)
+16535:      | (__val >> (__gnu_cxx::__numeric_traits<unsigned long>::
+16535:     __digits - 7)));
+16535:       return static_cast<long>(__val);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   extern template class collate<char>;
+16535:   extern template class collate_byname<char>;
+16535: 
+16535:   extern template
+16535:     const collate<char>&
+16535:     use_facet<collate<char> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<collate<char> >(const locale&);
+16535: 
+16535: 
+16535:   extern template class collate<wchar_t>;
+16535:   extern template class collate_byname<wchar_t>;
+16535: 
+16535:   extern template
+16535:     const collate<wchar_t>&
+16535:     use_facet<collate<wchar_t> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<collate<wchar_t> >(const locale&);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 852 "/usr/include/c++/8/bits/locale_classes.h" 2 3
+16535: # 42 "/usr/include/c++/8/bits/ios_base.h" 2 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/system_error" 1 3
+16535: # 32 "/usr/include/c++/8/system_error" 3
+16535:        
+16535: # 33 "/usr/include/c++/8/system_error" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/error_constants.h" 1 3
+16535: # 34 "/usr/include/x86_64-linux-gnu/c++/8/bits/error_constants.h" 3
+16535: # 1 "/usr/include/c++/8/cerrno" 1 3
+16535: # 39 "/usr/include/c++/8/cerrno" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/cerrno" 3
+16535: # 35 "/usr/include/x86_64-linux-gnu/c++/8/bits/error_constants.h" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   enum class errc
+16535:     {
+16535:       address_family_not_supported = 97,
+16535:       address_in_use = 98,
+16535:       address_not_available = 99,
+16535:       already_connected = 106,
+16535:       argument_list_too_long = 7,
+16535:       argument_out_of_domain = 33,
+16535:       bad_address = 14,
+16535:       bad_file_descriptor = 9,
+16535: 
+16535: 
+16535:       bad_message = 74,
+16535: 
+16535: 
+16535:       broken_pipe = 32,
+16535:       connection_aborted = 103,
+16535:       connection_already_in_progress = 114,
+16535:       connection_refused = 111,
+16535:       connection_reset = 104,
+16535:       cross_device_link = 18,
+16535:       destination_address_required = 89,
+16535:       device_or_resource_busy = 16,
+16535:       directory_not_empty = 39,
+16535:       executable_format_error = 8,
+16535:       file_exists = 17,
+16535:       file_too_large = 27,
+16535:       filename_too_long = 36,
+16535:       function_not_supported = 38,
+16535:       host_unreachable = 113,
+16535: 
+16535: 
+16535:       identifier_removed = 43,
+16535: 
+16535: 
+16535:       illegal_byte_sequence = 84,
+16535:       inappropriate_io_control_operation = 25,
+16535:       interrupted = 4,
+16535:       invalid_argument = 22,
+16535:       invalid_seek = 29,
+16535:       io_error = 5,
+16535:       is_a_directory = 21,
+16535:       message_size = 90,
+16535:       network_down = 100,
+16535:       network_reset = 102,
+16535:       network_unreachable = 101,
+16535:       no_buffer_space = 105,
+16535:       no_child_process = 10,
+16535: 
+16535: 
+16535:       no_link = 67,
+16535: 
+16535: 
+16535:       no_lock_available = 37,
+16535: 
+16535: 
+16535:       no_message_available = 61,
+16535: 
+16535: 
+16535:       no_message = 42,
+16535:       no_protocol_option = 92,
+16535:       no_space_on_device = 28,
+16535: 
+16535: 
+16535:       no_stream_resources = 63,
+16535: 
+16535: 
+16535:       no_such_device_or_address = 6,
+16535:       no_such_device = 19,
+16535:       no_such_file_or_directory = 2,
+16535:       no_such_process = 3,
+16535:       not_a_directory = 20,
+16535:       not_a_socket = 88,
+16535: 
+16535: 
+16535:       not_a_stream = 60,
+16535: 
+16535: 
+16535:       not_connected = 107,
+16535:       not_enough_memory = 12,
+16535: 
+16535: 
+16535:       not_supported = 95,
+16535: 
+16535: 
+16535: 
+16535:       operation_canceled = 125,
+16535: 
+16535: 
+16535:       operation_in_progress = 115,
+16535:       operation_not_permitted = 1,
+16535:       operation_not_supported = 95,
+16535:       operation_would_block = 11,
+16535: 
+16535: 
+16535:       owner_dead = 130,
+16535: 
+16535: 
+16535:       permission_denied = 13,
+16535: 
+16535: 
+16535:       protocol_error = 71,
+16535: 
+16535: 
+16535:       protocol_not_supported = 93,
+16535:       read_only_file_system = 30,
+16535:       resource_deadlock_would_occur = 35,
+16535:       resource_unavailable_try_again = 11,
+16535:       result_out_of_range = 34,
+16535: 
+16535: 
+16535:       state_not_recoverable = 131,
+16535: 
+16535: 
+16535: 
+16535:       stream_timeout = 62,
+16535: 
+16535: 
+16535: 
+16535:       text_file_busy = 26,
+16535: 
+16535: 
+16535:       timed_out = 110,
+16535:       too_many_files_open_in_system = 23,
+16535:       too_many_files_open = 24,
+16535:       too_many_links = 31,
+16535:       too_many_symbolic_link_levels = 40,
+16535: 
+16535: 
+16535:       value_too_large = 75,
+16535: 
+16535: 
+16535:       wrong_protocol_type = 91
+16535:     };
+16535: 
+16535: 
+16535: }
+16535: # 40 "/usr/include/c++/8/system_error" 2 3
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   class error_code;
+16535:   class error_condition;
+16535:   class system_error;
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_error_code_enum : public false_type { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct is_error_condition_enum : public false_type { };
+16535: 
+16535:   template<>
+16535:     struct is_error_condition_enum<errc>
+16535:     : public true_type { };
+16535: # 71 "/usr/include/c++/8/system_error" 3
+16535:   inline namespace _V2 {
+16535: 
+16535: 
+16535:   class error_category
+16535:   {
+16535:   public:
+16535:     constexpr error_category() noexcept = default;
+16535: 
+16535:     virtual ~error_category();
+16535: 
+16535:     error_category(const error_category&) = delete;
+16535:     error_category& operator=(const error_category&) = delete;
+16535: 
+16535:     virtual const char*
+16535:     name() const noexcept = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   private:
+16535:     __attribute ((__abi_tag__ ("cxx11")))
+16535:     virtual __cow_string
+16535:     _M_message(int) const;
+16535: 
+16535:   public:
+16535:     __attribute ((__abi_tag__ ("cxx11")))
+16535:     virtual string
+16535:     message(int) const = 0;
+16535: # 110 "/usr/include/c++/8/system_error" 3
+16535:   public:
+16535:     virtual error_condition
+16535:     default_error_condition(int __i) const noexcept;
+16535: 
+16535:     virtual bool
+16535:     equivalent(int __i, const error_condition& __cond) const noexcept;
+16535: 
+16535:     virtual bool
+16535:     equivalent(const error_code& __code, int __i) const noexcept;
+16535: 
+16535:     bool
+16535:     operator<(const error_category& __other) const noexcept
+16535:     { return less<const error_category*>()(this, &__other); }
+16535: 
+16535:     bool
+16535:     operator==(const error_category& __other) const noexcept
+16535:     { return this == &__other; }
+16535: 
+16535:     bool
+16535:     operator!=(const error_category& __other) const noexcept
+16535:     { return this != &__other; }
+16535:   };
+16535: 
+16535: 
+16535:   __attribute__ ((__const__)) const error_category& system_category() noexcept;
+16535:   __attribute__ ((__const__)) const error_category& generic_category() noexcept;
+16535: 
+16535:   }
+16535: 
+16535:   error_code make_error_code(errc) noexcept;
+16535: 
+16535:   template<typename _Tp>
+16535:     struct hash;
+16535: 
+16535: 
+16535: 
+16535:   struct error_code
+16535:   {
+16535:     error_code() noexcept
+16535:     : _M_value(0), _M_cat(&system_category()) { }
+16535: 
+16535:     error_code(int __v, const error_category& __cat) noexcept
+16535:     : _M_value(__v), _M_cat(&__cat) { }
+16535: 
+16535:     template<typename _ErrorCodeEnum, typename = typename
+16535:       enable_if<is_error_code_enum<_ErrorCodeEnum>::value>::type>
+16535:       error_code(_ErrorCodeEnum __e) noexcept
+16535:       { *this = make_error_code(__e); }
+16535: 
+16535:     void
+16535:     assign(int __v, const error_category& __cat) noexcept
+16535:     {
+16535:       _M_value = __v;
+16535:       _M_cat = &__cat;
+16535:     }
+16535: 
+16535:     void
+16535:     clear() noexcept
+16535:     { assign(0, system_category()); }
+16535: 
+16535: 
+16535:     template<typename _ErrorCodeEnum>
+16535:       typename enable_if<is_error_code_enum<_ErrorCodeEnum>::value,
+16535:     error_code&>::type
+16535:       operator=(_ErrorCodeEnum __e) noexcept
+16535:       { return *this = make_error_code(__e); }
+16535: 
+16535:     int
+16535:     value() const noexcept { return _M_value; }
+16535: 
+16535:     const error_category&
+16535:     category() const noexcept { return *_M_cat; }
+16535: 
+16535:     error_condition
+16535:     default_error_condition() const noexcept;
+16535: 
+16535:     __attribute ((__abi_tag__ ("cxx11")))
+16535:     string
+16535:     message() const
+16535:     { return category().message(value()); }
+16535: 
+16535:     explicit operator bool() const noexcept
+16535:     { return _M_value != 0; }
+16535: 
+16535: 
+16535:   private:
+16535:     friend class hash<error_code>;
+16535: 
+16535:     int _M_value;
+16535:     const error_category* _M_cat;
+16535:   };
+16535: 
+16535: 
+16535:   inline error_code
+16535:   make_error_code(errc __e) noexcept
+16535:   { return error_code(static_cast<int>(__e), generic_category()); }
+16535: 
+16535:   inline bool
+16535:   operator<(const error_code& __lhs, const error_code& __rhs) noexcept
+16535:   {
+16535:     return (__lhs.category() < __rhs.category()
+16535:      || (__lhs.category() == __rhs.category()
+16535:   && __lhs.value() < __rhs.value()));
+16535:   }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_ostream<_CharT, _Traits>&
+16535:     operator<<(basic_ostream<_CharT, _Traits>& __os, const error_code& __e)
+16535:     { return (__os << __e.category().name() << ':' << __e.value()); }
+16535: 
+16535:   error_condition make_error_condition(errc) noexcept;
+16535: 
+16535: 
+16535: 
+16535:   struct error_condition
+16535:   {
+16535:     error_condition() noexcept
+16535:     : _M_value(0), _M_cat(&generic_category()) { }
+16535: 
+16535:     error_condition(int __v, const error_category& __cat) noexcept
+16535:     : _M_value(__v), _M_cat(&__cat) { }
+16535: 
+16535:     template<typename _ErrorConditionEnum, typename = typename
+16535:   enable_if<is_error_condition_enum<_ErrorConditionEnum>::value>::type>
+16535:       error_condition(_ErrorConditionEnum __e) noexcept
+16535:       { *this = make_error_condition(__e); }
+16535: 
+16535:     void
+16535:     assign(int __v, const error_category& __cat) noexcept
+16535:     {
+16535:       _M_value = __v;
+16535:       _M_cat = &__cat;
+16535:     }
+16535: 
+16535: 
+16535:     template<typename _ErrorConditionEnum>
+16535:       typename enable_if<is_error_condition_enum
+16535:     <_ErrorConditionEnum>::value, error_condition&>::type
+16535:       operator=(_ErrorConditionEnum __e) noexcept
+16535:       { return *this = make_error_condition(__e); }
+16535: 
+16535:     void
+16535:     clear() noexcept
+16535:     { assign(0, generic_category()); }
+16535: 
+16535: 
+16535:     int
+16535:     value() const noexcept { return _M_value; }
+16535: 
+16535:     const error_category&
+16535:     category() const noexcept { return *_M_cat; }
+16535: 
+16535:     __attribute ((__abi_tag__ ("cxx11")))
+16535:     string
+16535:     message() const
+16535:     { return category().message(value()); }
+16535: 
+16535:     explicit operator bool() const noexcept
+16535:     { return _M_value != 0; }
+16535: 
+16535: 
+16535:   private:
+16535:     int _M_value;
+16535:     const error_category* _M_cat;
+16535:   };
+16535: 
+16535: 
+16535:   inline error_condition
+16535:   make_error_condition(errc __e) noexcept
+16535:   { return error_condition(static_cast<int>(__e), generic_category()); }
+16535: 
+16535:   inline bool
+16535:   operator<(const error_condition& __lhs,
+16535:      const error_condition& __rhs) noexcept
+16535:   {
+16535:     return (__lhs.category() < __rhs.category()
+16535:      || (__lhs.category() == __rhs.category()
+16535:   && __lhs.value() < __rhs.value()));
+16535:   }
+16535: 
+16535: 
+16535:   inline bool
+16535:   operator==(const error_code& __lhs, const error_code& __rhs) noexcept
+16535:   { return (__lhs.category() == __rhs.category()
+16535:      && __lhs.value() == __rhs.value()); }
+16535: 
+16535:   inline bool
+16535:   operator==(const error_code& __lhs, const error_condition& __rhs) noexcept
+16535:   {
+16535:     return (__lhs.category().equivalent(__lhs.value(), __rhs)
+16535:      || __rhs.category().equivalent(__lhs, __rhs.value()));
+16535:   }
+16535: 
+16535:   inline bool
+16535:   operator==(const error_condition& __lhs, const error_code& __rhs) noexcept
+16535:   {
+16535:     return (__rhs.category().equivalent(__rhs.value(), __lhs)
+16535:      || __lhs.category().equivalent(__rhs, __lhs.value()));
+16535:   }
+16535: 
+16535:   inline bool
+16535:   operator==(const error_condition& __lhs,
+16535:       const error_condition& __rhs) noexcept
+16535:   {
+16535:     return (__lhs.category() == __rhs.category()
+16535:      && __lhs.value() == __rhs.value());
+16535:   }
+16535: 
+16535:   inline bool
+16535:   operator!=(const error_code& __lhs, const error_code& __rhs) noexcept
+16535:   { return !(__lhs == __rhs); }
+16535: 
+16535:   inline bool
+16535:   operator!=(const error_code& __lhs, const error_condition& __rhs) noexcept
+16535:   { return !(__lhs == __rhs); }
+16535: 
+16535:   inline bool
+16535:   operator!=(const error_condition& __lhs, const error_code& __rhs) noexcept
+16535:   { return !(__lhs == __rhs); }
+16535: 
+16535:   inline bool
+16535:   operator!=(const error_condition& __lhs,
+16535:       const error_condition& __rhs) noexcept
+16535:   { return !(__lhs == __rhs); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   class system_error : public std::runtime_error
+16535:   {
+16535:   private:
+16535:     error_code _M_code;
+16535: 
+16535:   public:
+16535:     system_error(error_code __ec = error_code())
+16535:     : runtime_error(__ec.message()), _M_code(__ec) { }
+16535: 
+16535:     system_error(error_code __ec, const string& __what)
+16535:     : runtime_error(__what + ": " + __ec.message()), _M_code(__ec) { }
+16535: 
+16535:     system_error(error_code __ec, const char* __what)
+16535:     : runtime_error(__what + (": " + __ec.message())), _M_code(__ec) { }
+16535: 
+16535:     system_error(int __v, const error_category& __ecat, const char* __what)
+16535:     : system_error(error_code(__v, __ecat), __what) { }
+16535: 
+16535:     system_error(int __v, const error_category& __ecat)
+16535:     : runtime_error(error_code(__v, __ecat).message()),
+16535:       _M_code(__v, __ecat) { }
+16535: 
+16535:     system_error(int __v, const error_category& __ecat, const string& __what)
+16535:     : runtime_error(__what + ": " + error_code(__v, __ecat).message()),
+16535:       _M_code(__v, __ecat) { }
+16535: 
+16535:     virtual ~system_error() noexcept;
+16535: 
+16535:     const error_code&
+16535:     code() const noexcept { return _M_code; }
+16535:   };
+16535: 
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<>
+16535:     struct hash<error_code>
+16535:     : public __hash_base<size_t, error_code>
+16535:     {
+16535:       size_t
+16535:       operator()(const error_code& __e) const noexcept
+16535:       {
+16535:  const size_t __tmp = std::_Hash_impl::hash(__e._M_value);
+16535:  return std::_Hash_impl::__hash_combine(__e._M_cat, __tmp);
+16535:       }
+16535:     };
+16535: # 414 "/usr/include/c++/8/system_error" 3
+16535: 
+16535: }
+16535: # 47 "/usr/include/c++/8/bits/ios_base.h" 2 3
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   enum _Ios_Fmtflags
+16535:     {
+16535:       _S_boolalpha = 1L << 0,
+16535:       _S_dec = 1L << 1,
+16535:       _S_fixed = 1L << 2,
+16535:       _S_hex = 1L << 3,
+16535:       _S_internal = 1L << 4,
+16535:       _S_left = 1L << 5,
+16535:       _S_oct = 1L << 6,
+16535:       _S_right = 1L << 7,
+16535:       _S_scientific = 1L << 8,
+16535:       _S_showbase = 1L << 9,
+16535:       _S_showpoint = 1L << 10,
+16535:       _S_showpos = 1L << 11,
+16535:       _S_skipws = 1L << 12,
+16535:       _S_unitbuf = 1L << 13,
+16535:       _S_uppercase = 1L << 14,
+16535:       _S_adjustfield = _S_left | _S_right | _S_internal,
+16535:       _S_basefield = _S_dec | _S_oct | _S_hex,
+16535:       _S_floatfield = _S_scientific | _S_fixed,
+16535:       _S_ios_fmtflags_end = 1L << 16,
+16535:       _S_ios_fmtflags_max = 0x7fffffff,
+16535:       _S_ios_fmtflags_min = ~0x7fffffff
+16535:     };
+16535: 
+16535:   inline constexpr _Ios_Fmtflags
+16535:   operator&(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
+16535:   { return _Ios_Fmtflags(static_cast<int>(__a) & static_cast<int>(__b)); }
+16535: 
+16535:   inline constexpr _Ios_Fmtflags
+16535:   operator|(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
+16535:   { return _Ios_Fmtflags(static_cast<int>(__a) | static_cast<int>(__b)); }
+16535: 
+16535:   inline constexpr _Ios_Fmtflags
+16535:   operator^(_Ios_Fmtflags __a, _Ios_Fmtflags __b)
+16535:   { return _Ios_Fmtflags(static_cast<int>(__a) ^ static_cast<int>(__b)); }
+16535: 
+16535:   inline constexpr _Ios_Fmtflags
+16535:   operator~(_Ios_Fmtflags __a)
+16535:   { return _Ios_Fmtflags(~static_cast<int>(__a)); }
+16535: 
+16535:   inline const _Ios_Fmtflags&
+16535:   operator|=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
+16535:   { return __a = __a | __b; }
+16535: 
+16535:   inline const _Ios_Fmtflags&
+16535:   operator&=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
+16535:   { return __a = __a & __b; }
+16535: 
+16535:   inline const _Ios_Fmtflags&
+16535:   operator^=(_Ios_Fmtflags& __a, _Ios_Fmtflags __b)
+16535:   { return __a = __a ^ __b; }
+16535: 
+16535: 
+16535:   enum _Ios_Openmode
+16535:     {
+16535:       _S_app = 1L << 0,
+16535:       _S_ate = 1L << 1,
+16535:       _S_bin = 1L << 2,
+16535:       _S_in = 1L << 3,
+16535:       _S_out = 1L << 4,
+16535:       _S_trunc = 1L << 5,
+16535:       _S_ios_openmode_end = 1L << 16,
+16535:       _S_ios_openmode_max = 0x7fffffff,
+16535:       _S_ios_openmode_min = ~0x7fffffff
+16535:     };
+16535: 
+16535:   inline constexpr _Ios_Openmode
+16535:   operator&(_Ios_Openmode __a, _Ios_Openmode __b)
+16535:   { return _Ios_Openmode(static_cast<int>(__a) & static_cast<int>(__b)); }
+16535: 
+16535:   inline constexpr _Ios_Openmode
+16535:   operator|(_Ios_Openmode __a, _Ios_Openmode __b)
+16535:   { return _Ios_Openmode(static_cast<int>(__a) | static_cast<int>(__b)); }
+16535: 
+16535:   inline constexpr _Ios_Openmode
+16535:   operator^(_Ios_Openmode __a, _Ios_Openmode __b)
+16535:   { return _Ios_Openmode(static_cast<int>(__a) ^ static_cast<int>(__b)); }
+16535: 
+16535:   inline constexpr _Ios_Openmode
+16535:   operator~(_Ios_Openmode __a)
+16535:   { return _Ios_Openmode(~static_cast<int>(__a)); }
+16535: 
+16535:   inline const _Ios_Openmode&
+16535:   operator|=(_Ios_Openmode& __a, _Ios_Openmode __b)
+16535:   { return __a = __a | __b; }
+16535: 
+16535:   inline const _Ios_Openmode&
+16535:   operator&=(_Ios_Openmode& __a, _Ios_Openmode __b)
+16535:   { return __a = __a & __b; }
+16535: 
+16535:   inline const _Ios_Openmode&
+16535:   operator^=(_Ios_Openmode& __a, _Ios_Openmode __b)
+16535:   { return __a = __a ^ __b; }
+16535: 
+16535: 
+16535:   enum _Ios_Iostate
+16535:     {
+16535:       _S_goodbit = 0,
+16535:       _S_badbit = 1L << 0,
+16535:       _S_eofbit = 1L << 1,
+16535:       _S_failbit = 1L << 2,
+16535:       _S_ios_iostate_end = 1L << 16,
+16535:       _S_ios_iostate_max = 0x7fffffff,
+16535:       _S_ios_iostate_min = ~0x7fffffff
+16535:     };
+16535: 
+16535:   inline constexpr _Ios_Iostate
+16535:   operator&(_Ios_Iostate __a, _Ios_Iostate __b)
+16535:   { return _Ios_Iostate(static_cast<int>(__a) & static_cast<int>(__b)); }
+16535: 
+16535:   inline constexpr _Ios_Iostate
+16535:   operator|(_Ios_Iostate __a, _Ios_Iostate __b)
+16535:   { return _Ios_Iostate(static_cast<int>(__a) | static_cast<int>(__b)); }
+16535: 
+16535:   inline constexpr _Ios_Iostate
+16535:   operator^(_Ios_Iostate __a, _Ios_Iostate __b)
+16535:   { return _Ios_Iostate(static_cast<int>(__a) ^ static_cast<int>(__b)); }
+16535: 
+16535:   inline constexpr _Ios_Iostate
+16535:   operator~(_Ios_Iostate __a)
+16535:   { return _Ios_Iostate(~static_cast<int>(__a)); }
+16535: 
+16535:   inline const _Ios_Iostate&
+16535:   operator|=(_Ios_Iostate& __a, _Ios_Iostate __b)
+16535:   { return __a = __a | __b; }
+16535: 
+16535:   inline const _Ios_Iostate&
+16535:   operator&=(_Ios_Iostate& __a, _Ios_Iostate __b)
+16535:   { return __a = __a & __b; }
+16535: 
+16535:   inline const _Ios_Iostate&
+16535:   operator^=(_Ios_Iostate& __a, _Ios_Iostate __b)
+16535:   { return __a = __a ^ __b; }
+16535: 
+16535: 
+16535:   enum _Ios_Seekdir
+16535:     {
+16535:       _S_beg = 0,
+16535:       _S_cur = 1,
+16535:       _S_end = 2,
+16535:       _S_ios_seekdir_end = 1L << 16
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   enum class io_errc { stream = 1 };
+16535: 
+16535:   template <> struct is_error_code_enum<io_errc> : public true_type { };
+16535: 
+16535:   const error_category& iostream_category() noexcept;
+16535: 
+16535:   inline error_code
+16535:   make_error_code(io_errc __e) noexcept
+16535:   { return error_code(static_cast<int>(__e), iostream_category()); }
+16535: 
+16535:   inline error_condition
+16535:   make_error_condition(io_errc __e) noexcept
+16535:   { return error_condition(static_cast<int>(__e), iostream_category()); }
+16535: # 228 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:   class ios_base
+16535:   {
+16535: # 246 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:   public:
+16535: # 255 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:     class __attribute ((__abi_tag__ ("cxx11"))) failure : public system_error
+16535:     {
+16535:     public:
+16535:       explicit
+16535:       failure(const string& __str);
+16535: 
+16535: 
+16535:       explicit
+16535:       failure(const string&, const error_code&);
+16535: 
+16535:       explicit
+16535:       failure(const char*, const error_code& = io_errc::stream);
+16535: 
+16535: 
+16535:       virtual
+16535:       ~failure() throw();
+16535: 
+16535:       virtual const char*
+16535:       what() const throw();
+16535:     };
+16535: # 323 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:     typedef _Ios_Fmtflags fmtflags;
+16535: 
+16535: 
+16535:     static const fmtflags boolalpha = _S_boolalpha;
+16535: 
+16535: 
+16535:     static const fmtflags dec = _S_dec;
+16535: 
+16535: 
+16535:     static const fmtflags fixed = _S_fixed;
+16535: 
+16535: 
+16535:     static const fmtflags hex = _S_hex;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     static const fmtflags internal = _S_internal;
+16535: 
+16535: 
+16535: 
+16535:     static const fmtflags left = _S_left;
+16535: 
+16535: 
+16535:     static const fmtflags oct = _S_oct;
+16535: 
+16535: 
+16535: 
+16535:     static const fmtflags right = _S_right;
+16535: 
+16535: 
+16535:     static const fmtflags scientific = _S_scientific;
+16535: 
+16535: 
+16535: 
+16535:     static const fmtflags showbase = _S_showbase;
+16535: 
+16535: 
+16535: 
+16535:     static const fmtflags showpoint = _S_showpoint;
+16535: 
+16535: 
+16535:     static const fmtflags showpos = _S_showpos;
+16535: 
+16535: 
+16535:     static const fmtflags skipws = _S_skipws;
+16535: 
+16535: 
+16535:     static const fmtflags unitbuf = _S_unitbuf;
+16535: 
+16535: 
+16535: 
+16535:     static const fmtflags uppercase = _S_uppercase;
+16535: 
+16535: 
+16535:     static const fmtflags adjustfield = _S_adjustfield;
+16535: 
+16535: 
+16535:     static const fmtflags basefield = _S_basefield;
+16535: 
+16535: 
+16535:     static const fmtflags floatfield = _S_floatfield;
+16535: # 398 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:     typedef _Ios_Iostate iostate;
+16535: 
+16535: 
+16535: 
+16535:     static const iostate badbit = _S_badbit;
+16535: 
+16535: 
+16535:     static const iostate eofbit = _S_eofbit;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     static const iostate failbit = _S_failbit;
+16535: 
+16535: 
+16535:     static const iostate goodbit = _S_goodbit;
+16535: # 429 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:     typedef _Ios_Openmode openmode;
+16535: 
+16535: 
+16535:     static const openmode app = _S_app;
+16535: 
+16535: 
+16535:     static const openmode ate = _S_ate;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     static const openmode binary = _S_bin;
+16535: 
+16535: 
+16535:     static const openmode in = _S_in;
+16535: 
+16535: 
+16535:     static const openmode out = _S_out;
+16535: 
+16535: 
+16535:     static const openmode trunc = _S_trunc;
+16535: # 461 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:     typedef _Ios_Seekdir seekdir;
+16535: 
+16535: 
+16535:     static const seekdir beg = _S_beg;
+16535: 
+16535: 
+16535:     static const seekdir cur = _S_cur;
+16535: 
+16535: 
+16535:     static const seekdir end = _S_end;
+16535: 
+16535: 
+16535: 
+16535:     typedef int io_state;
+16535:     typedef int open_mode;
+16535:     typedef int seek_dir;
+16535: 
+16535:     typedef std::streampos streampos;
+16535:     typedef std::streamoff streamoff;
+16535: # 489 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:     enum event
+16535:     {
+16535:       erase_event,
+16535:       imbue_event,
+16535:       copyfmt_event
+16535:     };
+16535: # 506 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:     typedef void (*event_callback) (event __e, ios_base& __b, int __i);
+16535: # 518 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:     void
+16535:     register_callback(event_callback __fn, int __index);
+16535: 
+16535:   protected:
+16535:     streamsize _M_precision;
+16535:     streamsize _M_width;
+16535:     fmtflags _M_flags;
+16535:     iostate _M_exception;
+16535:     iostate _M_streambuf_state;
+16535: 
+16535: 
+16535: 
+16535:     struct _Callback_list
+16535:     {
+16535: 
+16535:       _Callback_list* _M_next;
+16535:       ios_base::event_callback _M_fn;
+16535:       int _M_index;
+16535:       _Atomic_word _M_refcount;
+16535: 
+16535:       _Callback_list(ios_base::event_callback __fn, int __index,
+16535:        _Callback_list* __cb)
+16535:       : _M_next(__cb), _M_fn(__fn), _M_index(__index), _M_refcount(0) { }
+16535: 
+16535:       void
+16535:       _M_add_reference() { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); }
+16535: 
+16535: 
+16535:       int
+16535:       _M_remove_reference()
+16535:       {
+16535: 
+16535:         ;
+16535:         int __res = __gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1);
+16535:         if (__res == 0)
+16535:           {
+16535:             ;
+16535:           }
+16535:         return __res;
+16535:       }
+16535:     };
+16535: 
+16535:      _Callback_list* _M_callbacks;
+16535: 
+16535:     void
+16535:     _M_call_callbacks(event __ev) throw();
+16535: 
+16535:     void
+16535:     _M_dispose_callbacks(void) throw();
+16535: 
+16535: 
+16535:     struct _Words
+16535:     {
+16535:       void* _M_pword;
+16535:       long _M_iword;
+16535:       _Words() : _M_pword(0), _M_iword(0) { }
+16535:     };
+16535: 
+16535: 
+16535:     _Words _M_word_zero;
+16535: 
+16535: 
+16535: 
+16535:     enum { _S_local_word_size = 8 };
+16535:     _Words _M_local_word[_S_local_word_size];
+16535: 
+16535: 
+16535:     int _M_word_size;
+16535:     _Words* _M_word;
+16535: 
+16535:     _Words&
+16535:     _M_grow_words(int __index, bool __iword);
+16535: 
+16535: 
+16535:     locale _M_ios_locale;
+16535: 
+16535:     void
+16535:     _M_init() throw();
+16535: 
+16535:   public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     class Init
+16535:     {
+16535:       friend class ios_base;
+16535:     public:
+16535:       Init();
+16535:       ~Init();
+16535: 
+16535:     private:
+16535:       static _Atomic_word _S_refcount;
+16535:       static bool _S_synced_with_stdio;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     fmtflags
+16535:     flags() const
+16535:     { return _M_flags; }
+16535: # 631 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:     fmtflags
+16535:     flags(fmtflags __fmtfl)
+16535:     {
+16535:       fmtflags __old = _M_flags;
+16535:       _M_flags = __fmtfl;
+16535:       return __old;
+16535:     }
+16535: # 647 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:     fmtflags
+16535:     setf(fmtflags __fmtfl)
+16535:     {
+16535:       fmtflags __old = _M_flags;
+16535:       _M_flags |= __fmtfl;
+16535:       return __old;
+16535:     }
+16535: # 664 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:     fmtflags
+16535:     setf(fmtflags __fmtfl, fmtflags __mask)
+16535:     {
+16535:       fmtflags __old = _M_flags;
+16535:       _M_flags &= ~__mask;
+16535:       _M_flags |= (__fmtfl & __mask);
+16535:       return __old;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     void
+16535:     unsetf(fmtflags __mask)
+16535:     { _M_flags &= ~__mask; }
+16535: # 690 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:     streamsize
+16535:     precision() const
+16535:     { return _M_precision; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     streamsize
+16535:     precision(streamsize __prec)
+16535:     {
+16535:       streamsize __old = _M_precision;
+16535:       _M_precision = __prec;
+16535:       return __old;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     streamsize
+16535:     width() const
+16535:     { return _M_width; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     streamsize
+16535:     width(streamsize __wide)
+16535:     {
+16535:       streamsize __old = _M_width;
+16535:       _M_width = __wide;
+16535:       return __old;
+16535:     }
+16535: # 741 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:     static bool
+16535:     sync_with_stdio(bool __sync = true);
+16535: # 753 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:     locale
+16535:     imbue(const locale& __loc) throw();
+16535: # 764 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:     locale
+16535:     getloc() const
+16535:     { return _M_ios_locale; }
+16535: # 775 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:     const locale&
+16535:     _M_getloc() const
+16535:     { return _M_ios_locale; }
+16535: # 794 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:     static int
+16535:     xalloc() throw();
+16535: # 810 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:     long&
+16535:     iword(int __ix)
+16535:     {
+16535:       _Words& __word = (__ix < _M_word_size)
+16535:    ? _M_word[__ix] : _M_grow_words(__ix, true);
+16535:       return __word._M_iword;
+16535:     }
+16535: # 831 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:     void*&
+16535:     pword(int __ix)
+16535:     {
+16535:       _Words& __word = (__ix < _M_word_size)
+16535:    ? _M_word[__ix] : _M_grow_words(__ix, false);
+16535:       return __word._M_pword;
+16535:     }
+16535: # 848 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:     virtual ~ios_base();
+16535: 
+16535:   protected:
+16535:     ios_base() throw ();
+16535: # 862 "/usr/include/c++/8/bits/ios_base.h" 3
+16535:   public:
+16535:     ios_base(const ios_base&) = delete;
+16535: 
+16535:     ios_base&
+16535:     operator=(const ios_base&) = delete;
+16535: 
+16535:   protected:
+16535:     void
+16535:     _M_move(ios_base&) noexcept;
+16535: 
+16535:     void
+16535:     _M_swap(ios_base& __rhs) noexcept;
+16535: 
+16535:   };
+16535: 
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   boolalpha(ios_base& __base)
+16535:   {
+16535:     __base.setf(ios_base::boolalpha);
+16535:     return __base;
+16535:   }
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   noboolalpha(ios_base& __base)
+16535:   {
+16535:     __base.unsetf(ios_base::boolalpha);
+16535:     return __base;
+16535:   }
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   showbase(ios_base& __base)
+16535:   {
+16535:     __base.setf(ios_base::showbase);
+16535:     return __base;
+16535:   }
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   noshowbase(ios_base& __base)
+16535:   {
+16535:     __base.unsetf(ios_base::showbase);
+16535:     return __base;
+16535:   }
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   showpoint(ios_base& __base)
+16535:   {
+16535:     __base.setf(ios_base::showpoint);
+16535:     return __base;
+16535:   }
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   noshowpoint(ios_base& __base)
+16535:   {
+16535:     __base.unsetf(ios_base::showpoint);
+16535:     return __base;
+16535:   }
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   showpos(ios_base& __base)
+16535:   {
+16535:     __base.setf(ios_base::showpos);
+16535:     return __base;
+16535:   }
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   noshowpos(ios_base& __base)
+16535:   {
+16535:     __base.unsetf(ios_base::showpos);
+16535:     return __base;
+16535:   }
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   skipws(ios_base& __base)
+16535:   {
+16535:     __base.setf(ios_base::skipws);
+16535:     return __base;
+16535:   }
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   noskipws(ios_base& __base)
+16535:   {
+16535:     __base.unsetf(ios_base::skipws);
+16535:     return __base;
+16535:   }
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   uppercase(ios_base& __base)
+16535:   {
+16535:     __base.setf(ios_base::uppercase);
+16535:     return __base;
+16535:   }
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   nouppercase(ios_base& __base)
+16535:   {
+16535:     __base.unsetf(ios_base::uppercase);
+16535:     return __base;
+16535:   }
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   unitbuf(ios_base& __base)
+16535:   {
+16535:      __base.setf(ios_base::unitbuf);
+16535:      return __base;
+16535:   }
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   nounitbuf(ios_base& __base)
+16535:   {
+16535:      __base.unsetf(ios_base::unitbuf);
+16535:      return __base;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   internal(ios_base& __base)
+16535:   {
+16535:      __base.setf(ios_base::internal, ios_base::adjustfield);
+16535:      return __base;
+16535:   }
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   left(ios_base& __base)
+16535:   {
+16535:     __base.setf(ios_base::left, ios_base::adjustfield);
+16535:     return __base;
+16535:   }
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   right(ios_base& __base)
+16535:   {
+16535:     __base.setf(ios_base::right, ios_base::adjustfield);
+16535:     return __base;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   dec(ios_base& __base)
+16535:   {
+16535:     __base.setf(ios_base::dec, ios_base::basefield);
+16535:     return __base;
+16535:   }
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   hex(ios_base& __base)
+16535:   {
+16535:     __base.setf(ios_base::hex, ios_base::basefield);
+16535:     return __base;
+16535:   }
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   oct(ios_base& __base)
+16535:   {
+16535:     __base.setf(ios_base::oct, ios_base::basefield);
+16535:     return __base;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   fixed(ios_base& __base)
+16535:   {
+16535:     __base.setf(ios_base::fixed, ios_base::floatfield);
+16535:     return __base;
+16535:   }
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   scientific(ios_base& __base)
+16535:   {
+16535:     __base.setf(ios_base::scientific, ios_base::floatfield);
+16535:     return __base;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   hexfloat(ios_base& __base)
+16535:   {
+16535:     __base.setf(ios_base::fixed | ios_base::scientific, ios_base::floatfield);
+16535:     return __base;
+16535:   }
+16535: 
+16535: 
+16535:   inline ios_base&
+16535:   defaultfloat(ios_base& __base)
+16535:   {
+16535:     __base.unsetf(ios_base::floatfield);
+16535:     return __base;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 43 "/usr/include/c++/8/ios" 2 3
+16535: # 1 "/usr/include/c++/8/streambuf" 1 3
+16535: # 36 "/usr/include/c++/8/streambuf" 3
+16535:        
+16535: # 37 "/usr/include/c++/8/streambuf" 3
+16535: # 45 "/usr/include/c++/8/streambuf" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     streamsize
+16535:     __copy_streambufs_eof(basic_streambuf<_CharT, _Traits>*,
+16535:      basic_streambuf<_CharT, _Traits>*, bool&);
+16535: # 121 "/usr/include/c++/8/streambuf" 3
+16535:   template<typename _CharT, typename _Traits>
+16535:     class basic_streambuf
+16535:     {
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef _Traits traits_type;
+16535:       typedef typename traits_type::int_type int_type;
+16535:       typedef typename traits_type::pos_type pos_type;
+16535:       typedef typename traits_type::off_type off_type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       typedef basic_streambuf<char_type, traits_type> __streambuf_type;
+16535: 
+16535: 
+16535:       friend class basic_ios<char_type, traits_type>;
+16535:       friend class basic_istream<char_type, traits_type>;
+16535:       friend class basic_ostream<char_type, traits_type>;
+16535:       friend class istreambuf_iterator<char_type, traits_type>;
+16535:       friend class ostreambuf_iterator<char_type, traits_type>;
+16535: 
+16535:       friend streamsize
+16535:       __copy_streambufs_eof<>(basic_streambuf*, basic_streambuf*, bool&);
+16535: 
+16535:       template<bool _IsMove, typename _CharT2>
+16535:         friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
+16535:             _CharT2*>::__type
+16535:         __copy_move_a2(istreambuf_iterator<_CharT2>,
+16535:          istreambuf_iterator<_CharT2>, _CharT2*);
+16535: 
+16535:       template<typename _CharT2>
+16535:         friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
+16535:       istreambuf_iterator<_CharT2> >::__type
+16535:         find(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>,
+16535:       const _CharT2&);
+16535: 
+16535:       template<typename _CharT2, typename _Distance>
+16535:         friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
+16535:             void>::__type
+16535:         advance(istreambuf_iterator<_CharT2>&, _Distance);
+16535: 
+16535:       template<typename _CharT2, typename _Traits2>
+16535:         friend basic_istream<_CharT2, _Traits2>&
+16535:         operator>>(basic_istream<_CharT2, _Traits2>&, _CharT2*);
+16535: 
+16535:       template<typename _CharT2, typename _Traits2, typename _Alloc>
+16535:         friend basic_istream<_CharT2, _Traits2>&
+16535:         operator>>(basic_istream<_CharT2, _Traits2>&,
+16535:      basic_string<_CharT2, _Traits2, _Alloc>&);
+16535: 
+16535:       template<typename _CharT2, typename _Traits2, typename _Alloc>
+16535:         friend basic_istream<_CharT2, _Traits2>&
+16535:         getline(basic_istream<_CharT2, _Traits2>&,
+16535:   basic_string<_CharT2, _Traits2, _Alloc>&, _CharT2);
+16535: 
+16535:     protected:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       char_type* _M_in_beg;
+16535:       char_type* _M_in_cur;
+16535:       char_type* _M_in_end;
+16535:       char_type* _M_out_beg;
+16535:       char_type* _M_out_cur;
+16535:       char_type* _M_out_end;
+16535: 
+16535: 
+16535:       locale _M_buf_locale;
+16535: 
+16535:   public:
+16535: 
+16535:       virtual
+16535:       ~basic_streambuf()
+16535:       { }
+16535: # 215 "/usr/include/c++/8/streambuf" 3
+16535:       locale
+16535:       pubimbue(const locale& __loc)
+16535:       {
+16535:  locale __tmp(this->getloc());
+16535:  this->imbue(__loc);
+16535:  _M_buf_locale = __loc;
+16535:  return __tmp;
+16535:       }
+16535: # 232 "/usr/include/c++/8/streambuf" 3
+16535:       locale
+16535:       getloc() const
+16535:       { return _M_buf_locale; }
+16535: # 245 "/usr/include/c++/8/streambuf" 3
+16535:       basic_streambuf*
+16535:       pubsetbuf(char_type* __s, streamsize __n)
+16535:       { return this->setbuf(__s, __n); }
+16535: # 257 "/usr/include/c++/8/streambuf" 3
+16535:       pos_type
+16535:       pubseekoff(off_type __off, ios_base::seekdir __way,
+16535:    ios_base::openmode __mode = ios_base::in | ios_base::out)
+16535:       { return this->seekoff(__off, __way, __mode); }
+16535: # 269 "/usr/include/c++/8/streambuf" 3
+16535:       pos_type
+16535:       pubseekpos(pos_type __sp,
+16535:    ios_base::openmode __mode = ios_base::in | ios_base::out)
+16535:       { return this->seekpos(__sp, __mode); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       int
+16535:       pubsync() { return this->sync(); }
+16535: # 290 "/usr/include/c++/8/streambuf" 3
+16535:       streamsize
+16535:       in_avail()
+16535:       {
+16535:  const streamsize __ret = this->egptr() - this->gptr();
+16535:  return __ret ? __ret : this->showmanyc();
+16535:       }
+16535: # 304 "/usr/include/c++/8/streambuf" 3
+16535:       int_type
+16535:       snextc()
+16535:       {
+16535:  int_type __ret = traits_type::eof();
+16535:  if (__builtin_expect(!traits_type::eq_int_type(this->sbumpc(),
+16535:              __ret), true))
+16535:    __ret = this->sgetc();
+16535:  return __ret;
+16535:       }
+16535: # 322 "/usr/include/c++/8/streambuf" 3
+16535:       int_type
+16535:       sbumpc()
+16535:       {
+16535:  int_type __ret;
+16535:  if (__builtin_expect(this->gptr() < this->egptr(), true))
+16535:    {
+16535:      __ret = traits_type::to_int_type(*this->gptr());
+16535:      this->gbump(1);
+16535:    }
+16535:  else
+16535:    __ret = this->uflow();
+16535:  return __ret;
+16535:       }
+16535: # 344 "/usr/include/c++/8/streambuf" 3
+16535:       int_type
+16535:       sgetc()
+16535:       {
+16535:  int_type __ret;
+16535:  if (__builtin_expect(this->gptr() < this->egptr(), true))
+16535:    __ret = traits_type::to_int_type(*this->gptr());
+16535:  else
+16535:    __ret = this->underflow();
+16535:  return __ret;
+16535:       }
+16535: # 363 "/usr/include/c++/8/streambuf" 3
+16535:       streamsize
+16535:       sgetn(char_type* __s, streamsize __n)
+16535:       { return this->xsgetn(__s, __n); }
+16535: # 378 "/usr/include/c++/8/streambuf" 3
+16535:       int_type
+16535:       sputbackc(char_type __c)
+16535:       {
+16535:  int_type __ret;
+16535:  const bool __testpos = this->eback() < this->gptr();
+16535:  if (__builtin_expect(!__testpos ||
+16535:         !traits_type::eq(__c, this->gptr()[-1]), false))
+16535:    __ret = this->pbackfail(traits_type::to_int_type(__c));
+16535:  else
+16535:    {
+16535:      this->gbump(-1);
+16535:      __ret = traits_type::to_int_type(*this->gptr());
+16535:    }
+16535:  return __ret;
+16535:       }
+16535: # 403 "/usr/include/c++/8/streambuf" 3
+16535:       int_type
+16535:       sungetc()
+16535:       {
+16535:  int_type __ret;
+16535:  if (__builtin_expect(this->eback() < this->gptr(), true))
+16535:    {
+16535:      this->gbump(-1);
+16535:      __ret = traits_type::to_int_type(*this->gptr());
+16535:    }
+16535:  else
+16535:    __ret = this->pbackfail();
+16535:  return __ret;
+16535:       }
+16535: # 430 "/usr/include/c++/8/streambuf" 3
+16535:       int_type
+16535:       sputc(char_type __c)
+16535:       {
+16535:  int_type __ret;
+16535:  if (__builtin_expect(this->pptr() < this->epptr(), true))
+16535:    {
+16535:      *this->pptr() = __c;
+16535:      this->pbump(1);
+16535:      __ret = traits_type::to_int_type(__c);
+16535:    }
+16535:  else
+16535:    __ret = this->overflow(traits_type::to_int_type(__c));
+16535:  return __ret;
+16535:       }
+16535: # 456 "/usr/include/c++/8/streambuf" 3
+16535:       streamsize
+16535:       sputn(const char_type* __s, streamsize __n)
+16535:       { return this->xsputn(__s, __n); }
+16535: 
+16535:     protected:
+16535: # 470 "/usr/include/c++/8/streambuf" 3
+16535:       basic_streambuf()
+16535:       : _M_in_beg(0), _M_in_cur(0), _M_in_end(0),
+16535:       _M_out_beg(0), _M_out_cur(0), _M_out_end(0),
+16535:       _M_buf_locale(locale())
+16535:       { }
+16535: # 488 "/usr/include/c++/8/streambuf" 3
+16535:       char_type*
+16535:       eback() const { return _M_in_beg; }
+16535: 
+16535:       char_type*
+16535:       gptr() const { return _M_in_cur; }
+16535: 
+16535:       char_type*
+16535:       egptr() const { return _M_in_end; }
+16535: # 504 "/usr/include/c++/8/streambuf" 3
+16535:       void
+16535:       gbump(int __n) { _M_in_cur += __n; }
+16535: # 515 "/usr/include/c++/8/streambuf" 3
+16535:       void
+16535:       setg(char_type* __gbeg, char_type* __gnext, char_type* __gend)
+16535:       {
+16535:  _M_in_beg = __gbeg;
+16535:  _M_in_cur = __gnext;
+16535:  _M_in_end = __gend;
+16535:       }
+16535: # 535 "/usr/include/c++/8/streambuf" 3
+16535:       char_type*
+16535:       pbase() const { return _M_out_beg; }
+16535: 
+16535:       char_type*
+16535:       pptr() const { return _M_out_cur; }
+16535: 
+16535:       char_type*
+16535:       epptr() const { return _M_out_end; }
+16535: # 551 "/usr/include/c++/8/streambuf" 3
+16535:       void
+16535:       pbump(int __n) { _M_out_cur += __n; }
+16535: # 561 "/usr/include/c++/8/streambuf" 3
+16535:       void
+16535:       setp(char_type* __pbeg, char_type* __pend)
+16535:       {
+16535:  _M_out_beg = _M_out_cur = __pbeg;
+16535:  _M_out_end = __pend;
+16535:       }
+16535: # 582 "/usr/include/c++/8/streambuf" 3
+16535:       virtual void
+16535:       imbue(const locale& __loc __attribute__ ((__unused__)))
+16535:       { }
+16535: # 597 "/usr/include/c++/8/streambuf" 3
+16535:       virtual basic_streambuf<char_type,_Traits>*
+16535:       setbuf(char_type*, streamsize)
+16535:       { return this; }
+16535: # 608 "/usr/include/c++/8/streambuf" 3
+16535:       virtual pos_type
+16535:       seekoff(off_type, ios_base::seekdir,
+16535:        ios_base::openmode = ios_base::in | ios_base::out)
+16535:       { return pos_type(off_type(-1)); }
+16535: # 620 "/usr/include/c++/8/streambuf" 3
+16535:       virtual pos_type
+16535:       seekpos(pos_type,
+16535:        ios_base::openmode = ios_base::in | ios_base::out)
+16535:       { return pos_type(off_type(-1)); }
+16535: # 633 "/usr/include/c++/8/streambuf" 3
+16535:       virtual int
+16535:       sync() { return 0; }
+16535: # 655 "/usr/include/c++/8/streambuf" 3
+16535:       virtual streamsize
+16535:       showmanyc() { return 0; }
+16535: # 671 "/usr/include/c++/8/streambuf" 3
+16535:       virtual streamsize
+16535:       xsgetn(char_type* __s, streamsize __n);
+16535: # 693 "/usr/include/c++/8/streambuf" 3
+16535:       virtual int_type
+16535:       underflow()
+16535:       { return traits_type::eof(); }
+16535: # 706 "/usr/include/c++/8/streambuf" 3
+16535:       virtual int_type
+16535:       uflow()
+16535:       {
+16535:  int_type __ret = traits_type::eof();
+16535:  const bool __testeof = traits_type::eq_int_type(this->underflow(),
+16535:        __ret);
+16535:  if (!__testeof)
+16535:    {
+16535:      __ret = traits_type::to_int_type(*this->gptr());
+16535:      this->gbump(1);
+16535:    }
+16535:  return __ret;
+16535:       }
+16535: # 730 "/usr/include/c++/8/streambuf" 3
+16535:       virtual int_type
+16535:       pbackfail(int_type __c __attribute__ ((__unused__)) = traits_type::eof())
+16535:       { return traits_type::eof(); }
+16535: # 748 "/usr/include/c++/8/streambuf" 3
+16535:       virtual streamsize
+16535:       xsputn(const char_type* __s, streamsize __n);
+16535: # 774 "/usr/include/c++/8/streambuf" 3
+16535:       virtual int_type
+16535:       overflow(int_type __c __attribute__ ((__unused__)) = traits_type::eof())
+16535:       { return traits_type::eof(); }
+16535: 
+16535: 
+16535: 
+16535:     public:
+16535: # 790 "/usr/include/c++/8/streambuf" 3
+16535:       [[__deprecated__("stossc is deprecated, use sbumpc instead")]]
+16535: 
+16535:       void
+16535:       stossc()
+16535:       {
+16535:  if (this->gptr() < this->egptr())
+16535:    this->gbump(1);
+16535:  else
+16535:    this->uflow();
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       __safe_gbump(streamsize __n) { _M_in_cur += __n; }
+16535: 
+16535:       void
+16535:       __safe_pbump(streamsize __n) { _M_out_cur += __n; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     protected:
+16535: 
+16535:       basic_streambuf(const basic_streambuf&);
+16535: 
+16535:       basic_streambuf&
+16535:       operator=(const basic_streambuf&);
+16535: 
+16535: 
+16535:       void
+16535:       swap(basic_streambuf& __sb)
+16535:       {
+16535:  std::swap(_M_in_beg, __sb._M_in_beg);
+16535:  std::swap(_M_in_cur, __sb._M_in_cur);
+16535:  std::swap(_M_in_end, __sb._M_in_end);
+16535:  std::swap(_M_out_beg, __sb._M_out_beg);
+16535:  std::swap(_M_out_cur, __sb._M_out_cur);
+16535:  std::swap(_M_out_end, __sb._M_out_end);
+16535:  std::swap(_M_buf_locale, __sb._M_buf_locale);
+16535:       }
+16535: 
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     std::basic_streambuf<_CharT, _Traits>::
+16535:     basic_streambuf(const basic_streambuf&) = default;
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     std::basic_streambuf<_CharT, _Traits>&
+16535:     std::basic_streambuf<_CharT, _Traits>::
+16535:     operator=(const basic_streambuf&) = default;
+16535: 
+16535: 
+16535: 
+16535:   template<>
+16535:     streamsize
+16535:     __copy_streambufs_eof(basic_streambuf<char>* __sbin,
+16535:      basic_streambuf<char>* __sbout, bool& __ineof);
+16535: 
+16535:   template<>
+16535:     streamsize
+16535:     __copy_streambufs_eof(basic_streambuf<wchar_t>* __sbin,
+16535:      basic_streambuf<wchar_t>* __sbout, bool& __ineof);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/streambuf.tcc" 1 3
+16535: # 37 "/usr/include/c++/8/bits/streambuf.tcc" 3
+16535:        
+16535: # 38 "/usr/include/c++/8/bits/streambuf.tcc" 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     streamsize
+16535:     basic_streambuf<_CharT, _Traits>::
+16535:     xsgetn(char_type* __s, streamsize __n)
+16535:     {
+16535:       streamsize __ret = 0;
+16535:       while (__ret < __n)
+16535:  {
+16535:    const streamsize __buf_len = this->egptr() - this->gptr();
+16535:    if (__buf_len)
+16535:      {
+16535:        const streamsize __remaining = __n - __ret;
+16535:        const streamsize __len = std::min(__buf_len, __remaining);
+16535:        traits_type::copy(__s, this->gptr(), __len);
+16535:        __ret += __len;
+16535:        __s += __len;
+16535:        this->__safe_gbump(__len);
+16535:      }
+16535: 
+16535:    if (__ret < __n)
+16535:      {
+16535:        const int_type __c = this->uflow();
+16535:        if (!traits_type::eq_int_type(__c, traits_type::eof()))
+16535:   {
+16535:     traits_type::assign(*__s++, traits_type::to_char_type(__c));
+16535:     ++__ret;
+16535:   }
+16535:        else
+16535:   break;
+16535:      }
+16535:  }
+16535:       return __ret;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     streamsize
+16535:     basic_streambuf<_CharT, _Traits>::
+16535:     xsputn(const char_type* __s, streamsize __n)
+16535:     {
+16535:       streamsize __ret = 0;
+16535:       while (__ret < __n)
+16535:  {
+16535:    const streamsize __buf_len = this->epptr() - this->pptr();
+16535:    if (__buf_len)
+16535:      {
+16535:        const streamsize __remaining = __n - __ret;
+16535:        const streamsize __len = std::min(__buf_len, __remaining);
+16535:        traits_type::copy(this->pptr(), __s, __len);
+16535:        __ret += __len;
+16535:        __s += __len;
+16535:        this->__safe_pbump(__len);
+16535:      }
+16535: 
+16535:    if (__ret < __n)
+16535:      {
+16535:        int_type __c = this->overflow(traits_type::to_int_type(*__s));
+16535:        if (!traits_type::eq_int_type(__c, traits_type::eof()))
+16535:   {
+16535:     ++__ret;
+16535:     ++__s;
+16535:   }
+16535:        else
+16535:   break;
+16535:      }
+16535:  }
+16535:       return __ret;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     streamsize
+16535:     __copy_streambufs_eof(basic_streambuf<_CharT, _Traits>* __sbin,
+16535:      basic_streambuf<_CharT, _Traits>* __sbout,
+16535:      bool& __ineof)
+16535:     {
+16535:       streamsize __ret = 0;
+16535:       __ineof = true;
+16535:       typename _Traits::int_type __c = __sbin->sgetc();
+16535:       while (!_Traits::eq_int_type(__c, _Traits::eof()))
+16535:  {
+16535:    __c = __sbout->sputc(_Traits::to_char_type(__c));
+16535:    if (_Traits::eq_int_type(__c, _Traits::eof()))
+16535:      {
+16535:        __ineof = false;
+16535:        break;
+16535:      }
+16535:    ++__ret;
+16535:    __c = __sbin->snextc();
+16535:  }
+16535:       return __ret;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     inline streamsize
+16535:     __copy_streambufs(basic_streambuf<_CharT, _Traits>* __sbin,
+16535:         basic_streambuf<_CharT, _Traits>* __sbout)
+16535:     {
+16535:       bool __ineof;
+16535:       return __copy_streambufs_eof(__sbin, __sbout, __ineof);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   extern template class basic_streambuf<char>;
+16535:   extern template
+16535:     streamsize
+16535:     __copy_streambufs(basic_streambuf<char>*,
+16535:         basic_streambuf<char>*);
+16535:   extern template
+16535:     streamsize
+16535:     __copy_streambufs_eof(basic_streambuf<char>*,
+16535:      basic_streambuf<char>*, bool&);
+16535: 
+16535: 
+16535:   extern template class basic_streambuf<wchar_t>;
+16535:   extern template
+16535:     streamsize
+16535:     __copy_streambufs(basic_streambuf<wchar_t>*,
+16535:         basic_streambuf<wchar_t>*);
+16535:   extern template
+16535:     streamsize
+16535:     __copy_streambufs_eof(basic_streambuf<wchar_t>*,
+16535:      basic_streambuf<wchar_t>*, bool&);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 863 "/usr/include/c++/8/streambuf" 2 3
+16535: # 44 "/usr/include/c++/8/ios" 2 3
+16535: # 1 "/usr/include/c++/8/bits/basic_ios.h" 1 3
+16535: # 33 "/usr/include/c++/8/bits/basic_ios.h" 3
+16535:        
+16535: # 34 "/usr/include/c++/8/bits/basic_ios.h" 3
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/locale_facets.h" 1 3
+16535: # 37 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:        
+16535: # 38 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535: 
+16535: # 1 "/usr/include/c++/8/cwctype" 1 3
+16535: # 39 "/usr/include/c++/8/cwctype" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/cwctype" 3
+16535: # 50 "/usr/include/c++/8/cwctype" 3
+16535: # 1 "/usr/include/wctype.h" 1 3 4
+16535: # 38 "/usr/include/wctype.h" 3 4
+16535: # 1 "/usr/include/x86_64-linux-gnu/bits/wctype-wchar.h" 1 3 4
+16535: # 38 "/usr/include/x86_64-linux-gnu/bits/wctype-wchar.h" 3 4
+16535: typedef unsigned long int wctype_t;
+16535: # 56 "/usr/include/x86_64-linux-gnu/bits/wctype-wchar.h" 3 4
+16535: enum
+16535: {
+16535:   __ISwupper = 0,
+16535:   __ISwlower = 1,
+16535:   __ISwalpha = 2,
+16535:   __ISwdigit = 3,
+16535:   __ISwxdigit = 4,
+16535:   __ISwspace = 5,
+16535:   __ISwprint = 6,
+16535:   __ISwgraph = 7,
+16535:   __ISwblank = 8,
+16535:   __ISwcntrl = 9,
+16535:   __ISwpunct = 10,
+16535:   __ISwalnum = 11,
+16535: 
+16535:   _ISwupper = ((__ISwupper) < 8 ? (int) ((1UL << (__ISwupper)) << 24) : ((__ISwupper) < 16 ? (int) ((1UL << (__ISwupper)) << 8) : ((__ISwupper) < 24 ? (int) ((1UL << (__ISwupper)) >> 8) : (int) ((1UL << (__ISwupper)) >> 24)))),
+16535:   _ISwlower = ((__ISwlower) < 8 ? (int) ((1UL << (__ISwlower)) << 24) : ((__ISwlower) < 16 ? (int) ((1UL << (__ISwlower)) << 8) : ((__ISwlower) < 24 ? (int) ((1UL << (__ISwlower)) >> 8) : (int) ((1UL << (__ISwlower)) >> 24)))),
+16535:   _ISwalpha = ((__ISwalpha) < 8 ? (int) ((1UL << (__ISwalpha)) << 24) : ((__ISwalpha) < 16 ? (int) ((1UL << (__ISwalpha)) << 8) : ((__ISwalpha) < 24 ? (int) ((1UL << (__ISwalpha)) >> 8) : (int) ((1UL << (__ISwalpha)) >> 24)))),
+16535:   _ISwdigit = ((__ISwdigit) < 8 ? (int) ((1UL << (__ISwdigit)) << 24) : ((__ISwdigit) < 16 ? (int) ((1UL << (__ISwdigit)) << 8) : ((__ISwdigit) < 24 ? (int) ((1UL << (__ISwdigit)) >> 8) : (int) ((1UL << (__ISwdigit)) >> 24)))),
+16535:   _ISwxdigit = ((__ISwxdigit) < 8 ? (int) ((1UL << (__ISwxdigit)) << 24) : ((__ISwxdigit) < 16 ? (int) ((1UL << (__ISwxdigit)) << 8) : ((__ISwxdigit) < 24 ? (int) ((1UL << (__ISwxdigit)) >> 8) : (int) ((1UL << (__ISwxdigit)) >> 24)))),
+16535:   _ISwspace = ((__ISwspace) < 8 ? (int) ((1UL << (__ISwspace)) << 24) : ((__ISwspace) < 16 ? (int) ((1UL << (__ISwspace)) << 8) : ((__ISwspace) < 24 ? (int) ((1UL << (__ISwspace)) >> 8) : (int) ((1UL << (__ISwspace)) >> 24)))),
+16535:   _ISwprint = ((__ISwprint) < 8 ? (int) ((1UL << (__ISwprint)) << 24) : ((__ISwprint) < 16 ? (int) ((1UL << (__ISwprint)) << 8) : ((__ISwprint) < 24 ? (int) ((1UL << (__ISwprint)) >> 8) : (int) ((1UL << (__ISwprint)) >> 24)))),
+16535:   _ISwgraph = ((__ISwgraph) < 8 ? (int) ((1UL << (__ISwgraph)) << 24) : ((__ISwgraph) < 16 ? (int) ((1UL << (__ISwgraph)) << 8) : ((__ISwgraph) < 24 ? (int) ((1UL << (__ISwgraph)) >> 8) : (int) ((1UL << (__ISwgraph)) >> 24)))),
+16535:   _ISwblank = ((__ISwblank) < 8 ? (int) ((1UL << (__ISwblank)) << 24) : ((__ISwblank) < 16 ? (int) ((1UL << (__ISwblank)) << 8) : ((__ISwblank) < 24 ? (int) ((1UL << (__ISwblank)) >> 8) : (int) ((1UL << (__ISwblank)) >> 24)))),
+16535:   _ISwcntrl = ((__ISwcntrl) < 8 ? (int) ((1UL << (__ISwcntrl)) << 24) : ((__ISwcntrl) < 16 ? (int) ((1UL << (__ISwcntrl)) << 8) : ((__ISwcntrl) < 24 ? (int) ((1UL << (__ISwcntrl)) >> 8) : (int) ((1UL << (__ISwcntrl)) >> 24)))),
+16535:   _ISwpunct = ((__ISwpunct) < 8 ? (int) ((1UL << (__ISwpunct)) << 24) : ((__ISwpunct) < 16 ? (int) ((1UL << (__ISwpunct)) << 8) : ((__ISwpunct) < 24 ? (int) ((1UL << (__ISwpunct)) >> 8) : (int) ((1UL << (__ISwpunct)) >> 24)))),
+16535:   _ISwalnum = ((__ISwalnum) < 8 ? (int) ((1UL << (__ISwalnum)) << 24) : ((__ISwalnum) < 16 ? (int) ((1UL << (__ISwalnum)) << 8) : ((__ISwalnum) < 24 ? (int) ((1UL << (__ISwalnum)) >> 8) : (int) ((1UL << (__ISwalnum)) >> 24))))
+16535: };
+16535: 
+16535: 
+16535: 
+16535: extern "C" {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int iswalnum (wint_t __wc) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int iswalpha (wint_t __wc) throw ();
+16535: 
+16535: 
+16535: extern int iswcntrl (wint_t __wc) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int iswdigit (wint_t __wc) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int iswgraph (wint_t __wc) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int iswlower (wint_t __wc) throw ();
+16535: 
+16535: 
+16535: extern int iswprint (wint_t __wc) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int iswpunct (wint_t __wc) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int iswspace (wint_t __wc) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int iswupper (wint_t __wc) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int iswxdigit (wint_t __wc) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int iswblank (wint_t __wc) throw ();
+16535: # 155 "/usr/include/x86_64-linux-gnu/bits/wctype-wchar.h" 3 4
+16535: extern wctype_t wctype (const char *__property) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int iswctype (wint_t __wc, wctype_t __desc) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern wint_t towlower (wint_t __wc) throw ();
+16535: 
+16535: 
+16535: extern wint_t towupper (wint_t __wc) throw ();
+16535: 
+16535: }
+16535: # 39 "/usr/include/wctype.h" 2 3 4
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern "C" {
+16535: 
+16535: 
+16535: 
+16535: typedef const __int32_t *wctrans_t;
+16535: 
+16535: 
+16535: 
+16535: extern wctrans_t wctrans (const char *__property) throw ();
+16535: 
+16535: 
+16535: extern wint_t towctrans (wint_t __wc, wctrans_t __desc) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int iswalnum_l (wint_t __wc, locale_t __locale) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int iswalpha_l (wint_t __wc, locale_t __locale) throw ();
+16535: 
+16535: 
+16535: extern int iswcntrl_l (wint_t __wc, locale_t __locale) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int iswdigit_l (wint_t __wc, locale_t __locale) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int iswgraph_l (wint_t __wc, locale_t __locale) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int iswlower_l (wint_t __wc, locale_t __locale) throw ();
+16535: 
+16535: 
+16535: extern int iswprint_l (wint_t __wc, locale_t __locale) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int iswpunct_l (wint_t __wc, locale_t __locale) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int iswspace_l (wint_t __wc, locale_t __locale) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int iswupper_l (wint_t __wc, locale_t __locale) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int iswxdigit_l (wint_t __wc, locale_t __locale) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int iswblank_l (wint_t __wc, locale_t __locale) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern wctype_t wctype_l (const char *__property, locale_t __locale)
+16535:      throw ();
+16535: 
+16535: 
+16535: 
+16535: extern int iswctype_l (wint_t __wc, wctype_t __desc, locale_t __locale)
+16535:      throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern wint_t towlower_l (wint_t __wc, locale_t __locale) throw ();
+16535: 
+16535: 
+16535: extern wint_t towupper_l (wint_t __wc, locale_t __locale) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern wctrans_t wctrans_l (const char *__property, locale_t __locale)
+16535:      throw ();
+16535: 
+16535: 
+16535: extern wint_t towctrans_l (wint_t __wc, wctrans_t __desc,
+16535:       locale_t __locale) throw ();
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 51 "/usr/include/c++/8/cwctype" 2 3
+16535: # 80 "/usr/include/c++/8/cwctype" 3
+16535: namespace std
+16535: {
+16535:   using ::wctrans_t;
+16535:   using ::wctype_t;
+16535:   using ::wint_t;
+16535: 
+16535:   using ::iswalnum;
+16535:   using ::iswalpha;
+16535: 
+16535:   using ::iswblank;
+16535: 
+16535:   using ::iswcntrl;
+16535:   using ::iswctype;
+16535:   using ::iswdigit;
+16535:   using ::iswgraph;
+16535:   using ::iswlower;
+16535:   using ::iswprint;
+16535:   using ::iswpunct;
+16535:   using ::iswspace;
+16535:   using ::iswupper;
+16535:   using ::iswxdigit;
+16535:   using ::towctrans;
+16535:   using ::towlower;
+16535:   using ::towupper;
+16535:   using ::wctrans;
+16535:   using ::wctype;
+16535: }
+16535: # 40 "/usr/include/c++/8/bits/locale_facets.h" 2 3
+16535: # 1 "/usr/include/c++/8/cctype" 1 3
+16535: # 39 "/usr/include/c++/8/cctype" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/cctype" 3
+16535: # 41 "/usr/include/c++/8/bits/locale_facets.h" 2 3
+16535: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/ctype_base.h" 1 3
+16535: # 36 "/usr/include/x86_64-linux-gnu/c++/8/bits/ctype_base.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535:   struct ctype_base
+16535:   {
+16535: 
+16535:     typedef const int* __to_type;
+16535: 
+16535: 
+16535: 
+16535:     typedef unsigned short mask;
+16535:     static const mask upper = _ISupper;
+16535:     static const mask lower = _ISlower;
+16535:     static const mask alpha = _ISalpha;
+16535:     static const mask digit = _ISdigit;
+16535:     static const mask xdigit = _ISxdigit;
+16535:     static const mask space = _ISspace;
+16535:     static const mask print = _ISprint;
+16535:     static const mask graph = _ISalpha | _ISdigit | _ISpunct;
+16535:     static const mask cntrl = _IScntrl;
+16535:     static const mask punct = _ISpunct;
+16535:     static const mask alnum = _ISalpha | _ISdigit;
+16535: 
+16535:     static const mask blank = _ISblank;
+16535: 
+16535:   };
+16535: 
+16535: 
+16535: }
+16535: # 42 "/usr/include/c++/8/bits/locale_facets.h" 2 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/streambuf_iterator.h" 1 3
+16535: # 33 "/usr/include/c++/8/bits/streambuf_iterator.h" 3
+16535:        
+16535: # 34 "/usr/include/c++/8/bits/streambuf_iterator.h" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 49 "/usr/include/c++/8/bits/streambuf_iterator.h" 3
+16535:   template<typename _CharT, typename _Traits>
+16535:     class istreambuf_iterator
+16535:     : public iterator<input_iterator_tag, _CharT, typename _Traits::off_type,
+16535:         _CharT*,
+16535: 
+16535: 
+16535:         _CharT>
+16535: 
+16535: 
+16535: 
+16535:     {
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef _Traits traits_type;
+16535:       typedef typename _Traits::int_type int_type;
+16535:       typedef basic_streambuf<_CharT, _Traits> streambuf_type;
+16535:       typedef basic_istream<_CharT, _Traits> istream_type;
+16535: 
+16535: 
+16535:       template<typename _CharT2>
+16535:  friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
+16535:         ostreambuf_iterator<_CharT2> >::__type
+16535:  copy(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>,
+16535:       ostreambuf_iterator<_CharT2>);
+16535: 
+16535:       template<bool _IsMove, typename _CharT2>
+16535:  friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
+16535:             _CharT2*>::__type
+16535:  __copy_move_a2(istreambuf_iterator<_CharT2>,
+16535:          istreambuf_iterator<_CharT2>, _CharT2*);
+16535: 
+16535:       template<typename _CharT2>
+16535:  friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
+16535:         istreambuf_iterator<_CharT2> >::__type
+16535:  find(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>,
+16535:       const _CharT2&);
+16535: 
+16535:       template<typename _CharT2, typename _Distance>
+16535:  friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
+16535:             void>::__type
+16535:  advance(istreambuf_iterator<_CharT2>&, _Distance);
+16535: 
+16535:     private:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       mutable streambuf_type* _M_sbuf;
+16535:       int_type _M_c;
+16535: 
+16535:     public:
+16535: 
+16535:       constexpr istreambuf_iterator() noexcept
+16535:       : _M_sbuf(0), _M_c(traits_type::eof()) { }
+16535: 
+16535: 
+16535:       istreambuf_iterator(const istreambuf_iterator&) noexcept = default;
+16535: 
+16535:       ~istreambuf_iterator() = default;
+16535: 
+16535: 
+16535: 
+16535:       istreambuf_iterator(istream_type& __s) noexcept
+16535:       : _M_sbuf(__s.rdbuf()), _M_c(traits_type::eof()) { }
+16535: 
+16535: 
+16535:       istreambuf_iterator(streambuf_type* __s) noexcept
+16535:       : _M_sbuf(__s), _M_c(traits_type::eof()) { }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       char_type
+16535:       operator*() const
+16535:       {
+16535:  int_type __c = _M_get();
+16535: # 139 "/usr/include/c++/8/bits/streambuf_iterator.h" 3
+16535:  return traits_type::to_char_type(__c);
+16535:       }
+16535: 
+16535: 
+16535:       istreambuf_iterator&
+16535:       operator++()
+16535:       {
+16535: 
+16535: 
+16535: 
+16535:                         ;
+16535: 
+16535:  _M_sbuf->sbumpc();
+16535:  _M_c = traits_type::eof();
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535:       istreambuf_iterator
+16535:       operator++(int)
+16535:       {
+16535: 
+16535: 
+16535: 
+16535:                         ;
+16535: 
+16535:  istreambuf_iterator __old = *this;
+16535:  __old._M_c = _M_sbuf->sbumpc();
+16535:  _M_c = traits_type::eof();
+16535:  return __old;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       bool
+16535:       equal(const istreambuf_iterator& __b) const
+16535:       { return _M_at_eof() == __b._M_at_eof(); }
+16535: 
+16535:     private:
+16535:       int_type
+16535:       _M_get() const
+16535:       {
+16535:  int_type __ret = _M_c;
+16535:  if (_M_sbuf && _S_is_eof(__ret) && _S_is_eof(__ret = _M_sbuf->sgetc()))
+16535:    _M_sbuf = 0;
+16535:  return __ret;
+16535:       }
+16535: 
+16535:       bool
+16535:       _M_at_eof() const
+16535:       { return _S_is_eof(_M_get()); }
+16535: 
+16535:       static bool
+16535:       _S_is_eof(int_type __c)
+16535:       {
+16535:  const int_type __eof = traits_type::eof();
+16535:  return traits_type::eq_int_type(__c, __eof);
+16535:       }
+16535:     };
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     inline bool
+16535:     operator==(const istreambuf_iterator<_CharT, _Traits>& __a,
+16535:         const istreambuf_iterator<_CharT, _Traits>& __b)
+16535:     { return __a.equal(__b); }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     inline bool
+16535:     operator!=(const istreambuf_iterator<_CharT, _Traits>& __a,
+16535:         const istreambuf_iterator<_CharT, _Traits>& __b)
+16535:     { return !__a.equal(__b); }
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     class ostreambuf_iterator
+16535:     : public iterator<output_iterator_tag, void, void, void, void>
+16535:     {
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef _Traits traits_type;
+16535:       typedef basic_streambuf<_CharT, _Traits> streambuf_type;
+16535:       typedef basic_ostream<_CharT, _Traits> ostream_type;
+16535: 
+16535: 
+16535:       template<typename _CharT2>
+16535:  friend typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value,
+16535:         ostreambuf_iterator<_CharT2> >::__type
+16535:  copy(istreambuf_iterator<_CharT2>, istreambuf_iterator<_CharT2>,
+16535:       ostreambuf_iterator<_CharT2>);
+16535: 
+16535:     private:
+16535:       streambuf_type* _M_sbuf;
+16535:       bool _M_failed;
+16535: 
+16535:     public:
+16535: 
+16535:       ostreambuf_iterator(ostream_type& __s) noexcept
+16535:       : _M_sbuf(__s.rdbuf()), _M_failed(!_M_sbuf) { }
+16535: 
+16535: 
+16535:       ostreambuf_iterator(streambuf_type* __s) noexcept
+16535:       : _M_sbuf(__s), _M_failed(!_M_sbuf) { }
+16535: 
+16535: 
+16535:       ostreambuf_iterator&
+16535:       operator=(_CharT __c)
+16535:       {
+16535:  if (!_M_failed &&
+16535:      _Traits::eq_int_type(_M_sbuf->sputc(__c), _Traits::eof()))
+16535:    _M_failed = true;
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535:       ostreambuf_iterator&
+16535:       operator*()
+16535:       { return *this; }
+16535: 
+16535: 
+16535:       ostreambuf_iterator&
+16535:       operator++(int)
+16535:       { return *this; }
+16535: 
+16535: 
+16535:       ostreambuf_iterator&
+16535:       operator++()
+16535:       { return *this; }
+16535: 
+16535: 
+16535:       bool
+16535:       failed() const noexcept
+16535:       { return _M_failed; }
+16535: 
+16535:       ostreambuf_iterator&
+16535:       _M_put(const _CharT* __ws, streamsize __len)
+16535:       {
+16535:  if (__builtin_expect(!_M_failed, true)
+16535:      && __builtin_expect(this->_M_sbuf->sputn(__ws, __len) != __len,
+16535:     false))
+16535:    _M_failed = true;
+16535:  return *this;
+16535:       }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
+16535:         ostreambuf_iterator<_CharT> >::__type
+16535:     copy(istreambuf_iterator<_CharT> __first,
+16535:   istreambuf_iterator<_CharT> __last,
+16535:   ostreambuf_iterator<_CharT> __result)
+16535:     {
+16535:       if (__first._M_sbuf && !__last._M_sbuf && !__result._M_failed)
+16535:  {
+16535:    bool __ineof;
+16535:    __copy_streambufs_eof(__first._M_sbuf, __result._M_sbuf, __ineof);
+16535:    if (!__ineof)
+16535:      __result._M_failed = true;
+16535:  }
+16535:       return __result;
+16535:     }
+16535: 
+16535:   template<bool _IsMove, typename _CharT>
+16535:     typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
+16535:         ostreambuf_iterator<_CharT> >::__type
+16535:     __copy_move_a2(_CharT* __first, _CharT* __last,
+16535:      ostreambuf_iterator<_CharT> __result)
+16535:     {
+16535:       const streamsize __num = __last - __first;
+16535:       if (__num > 0)
+16535:  __result._M_put(__first, __num);
+16535:       return __result;
+16535:     }
+16535: 
+16535:   template<bool _IsMove, typename _CharT>
+16535:     typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
+16535:         ostreambuf_iterator<_CharT> >::__type
+16535:     __copy_move_a2(const _CharT* __first, const _CharT* __last,
+16535:      ostreambuf_iterator<_CharT> __result)
+16535:     {
+16535:       const streamsize __num = __last - __first;
+16535:       if (__num > 0)
+16535:  __result._M_put(__first, __num);
+16535:       return __result;
+16535:     }
+16535: 
+16535:   template<bool _IsMove, typename _CharT>
+16535:     typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
+16535:         _CharT*>::__type
+16535:     __copy_move_a2(istreambuf_iterator<_CharT> __first,
+16535:      istreambuf_iterator<_CharT> __last, _CharT* __result)
+16535:     {
+16535:       typedef istreambuf_iterator<_CharT> __is_iterator_type;
+16535:       typedef typename __is_iterator_type::traits_type traits_type;
+16535:       typedef typename __is_iterator_type::streambuf_type streambuf_type;
+16535:       typedef typename traits_type::int_type int_type;
+16535: 
+16535:       if (__first._M_sbuf && !__last._M_sbuf)
+16535:  {
+16535:    streambuf_type* __sb = __first._M_sbuf;
+16535:    int_type __c = __sb->sgetc();
+16535:    while (!traits_type::eq_int_type(__c, traits_type::eof()))
+16535:      {
+16535:        const streamsize __n = __sb->egptr() - __sb->gptr();
+16535:        if (__n > 1)
+16535:   {
+16535:     traits_type::copy(__result, __sb->gptr(), __n);
+16535:     __sb->__safe_gbump(__n);
+16535:     __result += __n;
+16535:     __c = __sb->underflow();
+16535:   }
+16535:        else
+16535:   {
+16535:     *__result++ = traits_type::to_char_type(__c);
+16535:     __c = __sb->snextc();
+16535:   }
+16535:      }
+16535:  }
+16535:       return __result;
+16535:     }
+16535: 
+16535:   template<typename _CharT>
+16535:     typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
+16535:           istreambuf_iterator<_CharT> >::__type
+16535:     find(istreambuf_iterator<_CharT> __first,
+16535:   istreambuf_iterator<_CharT> __last, const _CharT& __val)
+16535:     {
+16535:       typedef istreambuf_iterator<_CharT> __is_iterator_type;
+16535:       typedef typename __is_iterator_type::traits_type traits_type;
+16535:       typedef typename __is_iterator_type::streambuf_type streambuf_type;
+16535:       typedef typename traits_type::int_type int_type;
+16535:       const int_type __eof = traits_type::eof();
+16535: 
+16535:       if (__first._M_sbuf && !__last._M_sbuf)
+16535:  {
+16535:    const int_type __ival = traits_type::to_int_type(__val);
+16535:    streambuf_type* __sb = __first._M_sbuf;
+16535:    int_type __c = __sb->sgetc();
+16535:    while (!traits_type::eq_int_type(__c, __eof)
+16535:    && !traits_type::eq_int_type(__c, __ival))
+16535:      {
+16535:        streamsize __n = __sb->egptr() - __sb->gptr();
+16535:        if (__n > 1)
+16535:   {
+16535:     const _CharT* __p = traits_type::find(__sb->gptr(),
+16535:        __n, __val);
+16535:     if (__p)
+16535:       __n = __p - __sb->gptr();
+16535:     __sb->__safe_gbump(__n);
+16535:     __c = __sb->sgetc();
+16535:   }
+16535:        else
+16535:   __c = __sb->snextc();
+16535:      }
+16535: 
+16535:    __first._M_c = __eof;
+16535:  }
+16535: 
+16535:       return __first;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Distance>
+16535:     typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value,
+16535:         void>::__type
+16535:     advance(istreambuf_iterator<_CharT>& __i, _Distance __n)
+16535:     {
+16535:       if (__n == 0)
+16535:  return;
+16535: 
+16535:       ;
+16535:      
+16535: 
+16535:                            ;
+16535: 
+16535:       typedef istreambuf_iterator<_CharT> __is_iterator_type;
+16535:       typedef typename __is_iterator_type::traits_type traits_type;
+16535:       typedef typename __is_iterator_type::streambuf_type streambuf_type;
+16535:       typedef typename traits_type::int_type int_type;
+16535:       const int_type __eof = traits_type::eof();
+16535: 
+16535:       streambuf_type* __sb = __i._M_sbuf;
+16535:       while (__n > 0)
+16535:  {
+16535:    streamsize __size = __sb->egptr() - __sb->gptr();
+16535:    if (__size > __n)
+16535:      {
+16535:        __sb->__safe_gbump(__n);
+16535:        break;
+16535:      }
+16535: 
+16535:    __sb->__safe_gbump(__size);
+16535:    __n -= __size;
+16535:    if (traits_type::eq_int_type(__sb->underflow(), __eof))
+16535:      {
+16535:       
+16535: 
+16535:                       ;
+16535:        break;
+16535:      }
+16535:  }
+16535: 
+16535:       __i._M_c = __eof;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 49 "/usr/include/c++/8/bits/locale_facets.h" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 71 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:   template<typename _Tp>
+16535:     void
+16535:     __convert_to_v(const char*, _Tp&, ios_base::iostate&,
+16535:      const __c_locale&) throw();
+16535: 
+16535: 
+16535:   template<>
+16535:     void
+16535:     __convert_to_v(const char*, float&, ios_base::iostate&,
+16535:      const __c_locale&) throw();
+16535: 
+16535:   template<>
+16535:     void
+16535:     __convert_to_v(const char*, double&, ios_base::iostate&,
+16535:      const __c_locale&) throw();
+16535: 
+16535:   template<>
+16535:     void
+16535:     __convert_to_v(const char*, long double&, ios_base::iostate&,
+16535:      const __c_locale&) throw();
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     struct __pad
+16535:     {
+16535:       static void
+16535:       _S_pad(ios_base& __io, _CharT __fill, _CharT* __news,
+16535:       const _CharT* __olds, streamsize __newlen, streamsize __oldlen);
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     _CharT*
+16535:     __add_grouping(_CharT* __s, _CharT __sep,
+16535:      const char* __gbeg, size_t __gsize,
+16535:      const _CharT* __first, const _CharT* __last);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     inline
+16535:     ostreambuf_iterator<_CharT>
+16535:     __write(ostreambuf_iterator<_CharT> __s, const _CharT* __ws, int __len)
+16535:     {
+16535:       __s._M_put(__ws, __len);
+16535:       return __s;
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _OutIter>
+16535:     inline
+16535:     _OutIter
+16535:     __write(_OutIter __s, const _CharT* __ws, int __len)
+16535:     {
+16535:       for (int __j = 0; __j < __len; __j++, ++__s)
+16535:  *__s = __ws[__j];
+16535:       return __s;
+16535:     }
+16535: # 149 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:   template<typename _CharT>
+16535:     class __ctype_abstract_base : public locale::facet, public ctype_base
+16535:     {
+16535:     public:
+16535: 
+16535: 
+16535:       typedef _CharT char_type;
+16535: # 168 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       bool
+16535:       is(mask __m, char_type __c) const
+16535:       { return this->do_is(__m, __c); }
+16535: # 185 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       const char_type*
+16535:       is(const char_type *__lo, const char_type *__hi, mask *__vec) const
+16535:       { return this->do_is(__lo, __hi, __vec); }
+16535: # 201 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       const char_type*
+16535:       scan_is(mask __m, const char_type* __lo, const char_type* __hi) const
+16535:       { return this->do_scan_is(__m, __lo, __hi); }
+16535: # 217 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       const char_type*
+16535:       scan_not(mask __m, const char_type* __lo, const char_type* __hi) const
+16535:       { return this->do_scan_not(__m, __lo, __hi); }
+16535: # 231 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       char_type
+16535:       toupper(char_type __c) const
+16535:       { return this->do_toupper(__c); }
+16535: # 246 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       const char_type*
+16535:       toupper(char_type *__lo, const char_type* __hi) const
+16535:       { return this->do_toupper(__lo, __hi); }
+16535: # 260 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       char_type
+16535:       tolower(char_type __c) const
+16535:       { return this->do_tolower(__c); }
+16535: # 275 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       const char_type*
+16535:       tolower(char_type* __lo, const char_type* __hi) const
+16535:       { return this->do_tolower(__lo, __hi); }
+16535: # 292 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       char_type
+16535:       widen(char __c) const
+16535:       { return this->do_widen(__c); }
+16535: # 311 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       const char*
+16535:       widen(const char* __lo, const char* __hi, char_type* __to) const
+16535:       { return this->do_widen(__lo, __hi, __to); }
+16535: # 330 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       char
+16535:       narrow(char_type __c, char __dfault) const
+16535:       { return this->do_narrow(__c, __dfault); }
+16535: # 352 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       const char_type*
+16535:       narrow(const char_type* __lo, const char_type* __hi,
+16535:        char __dfault, char* __to) const
+16535:       { return this->do_narrow(__lo, __hi, __dfault, __to); }
+16535: 
+16535:     protected:
+16535:       explicit
+16535:       __ctype_abstract_base(size_t __refs = 0): facet(__refs) { }
+16535: 
+16535:       virtual
+16535:       ~__ctype_abstract_base() { }
+16535: # 377 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual bool
+16535:       do_is(mask __m, char_type __c) const = 0;
+16535: # 396 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual const char_type*
+16535:       do_is(const char_type* __lo, const char_type* __hi,
+16535:      mask* __vec) const = 0;
+16535: # 415 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual const char_type*
+16535:       do_scan_is(mask __m, const char_type* __lo,
+16535:    const char_type* __hi) const = 0;
+16535: # 434 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual const char_type*
+16535:       do_scan_not(mask __m, const char_type* __lo,
+16535:     const char_type* __hi) const = 0;
+16535: # 452 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual char_type
+16535:       do_toupper(char_type __c) const = 0;
+16535: # 469 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual const char_type*
+16535:       do_toupper(char_type* __lo, const char_type* __hi) const = 0;
+16535: # 485 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual char_type
+16535:       do_tolower(char_type __c) const = 0;
+16535: # 502 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual const char_type*
+16535:       do_tolower(char_type* __lo, const char_type* __hi) const = 0;
+16535: # 521 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual char_type
+16535:       do_widen(char __c) const = 0;
+16535: # 542 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual const char*
+16535:       do_widen(const char* __lo, const char* __hi, char_type* __to) const = 0;
+16535: # 563 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual char
+16535:       do_narrow(char_type __c, char __dfault) const = 0;
+16535: # 588 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual const char_type*
+16535:       do_narrow(const char_type* __lo, const char_type* __hi,
+16535:   char __dfault, char* __to) const = 0;
+16535:     };
+16535: # 611 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:   template<typename _CharT>
+16535:     class ctype : public __ctype_abstract_base<_CharT>
+16535:     {
+16535:     public:
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef typename __ctype_abstract_base<_CharT>::mask mask;
+16535: 
+16535: 
+16535:       static locale::id id;
+16535: 
+16535:       explicit
+16535:       ctype(size_t __refs = 0) : __ctype_abstract_base<_CharT>(__refs) { }
+16535: 
+16535:    protected:
+16535:       virtual
+16535:       ~ctype();
+16535: 
+16535:       virtual bool
+16535:       do_is(mask __m, char_type __c) const;
+16535: 
+16535:       virtual const char_type*
+16535:       do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const;
+16535: 
+16535:       virtual const char_type*
+16535:       do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const;
+16535: 
+16535:       virtual const char_type*
+16535:       do_scan_not(mask __m, const char_type* __lo,
+16535:     const char_type* __hi) const;
+16535: 
+16535:       virtual char_type
+16535:       do_toupper(char_type __c) const;
+16535: 
+16535:       virtual const char_type*
+16535:       do_toupper(char_type* __lo, const char_type* __hi) const;
+16535: 
+16535:       virtual char_type
+16535:       do_tolower(char_type __c) const;
+16535: 
+16535:       virtual const char_type*
+16535:       do_tolower(char_type* __lo, const char_type* __hi) const;
+16535: 
+16535:       virtual char_type
+16535:       do_widen(char __c) const;
+16535: 
+16535:       virtual const char*
+16535:       do_widen(const char* __lo, const char* __hi, char_type* __dest) const;
+16535: 
+16535:       virtual char
+16535:       do_narrow(char_type, char __dfault) const;
+16535: 
+16535:       virtual const char_type*
+16535:       do_narrow(const char_type* __lo, const char_type* __hi,
+16535:   char __dfault, char* __to) const;
+16535:     };
+16535: 
+16535:   template<typename _CharT>
+16535:     locale::id ctype<_CharT>::id;
+16535: # 680 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:   template<>
+16535:     class ctype<char> : public locale::facet, public ctype_base
+16535:     {
+16535:     public:
+16535: 
+16535: 
+16535:       typedef char char_type;
+16535: 
+16535:     protected:
+16535: 
+16535:       __c_locale _M_c_locale_ctype;
+16535:       bool _M_del;
+16535:       __to_type _M_toupper;
+16535:       __to_type _M_tolower;
+16535:       const mask* _M_table;
+16535:       mutable char _M_widen_ok;
+16535:       mutable char _M_widen[1 + static_cast<unsigned char>(-1)];
+16535:       mutable char _M_narrow[1 + static_cast<unsigned char>(-1)];
+16535:       mutable char _M_narrow_ok;
+16535: 
+16535: 
+16535:     public:
+16535: 
+16535:       static locale::id id;
+16535: 
+16535:       static const size_t table_size = 1 + static_cast<unsigned char>(-1);
+16535: # 717 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       explicit
+16535:       ctype(const mask* __table = 0, bool __del = false, size_t __refs = 0);
+16535: # 730 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       explicit
+16535:       ctype(__c_locale __cloc, const mask* __table = 0, bool __del = false,
+16535:      size_t __refs = 0);
+16535: # 743 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       inline bool
+16535:       is(mask __m, char __c) const;
+16535: # 758 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       inline const char*
+16535:       is(const char* __lo, const char* __hi, mask* __vec) const;
+16535: # 772 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       inline const char*
+16535:       scan_is(mask __m, const char* __lo, const char* __hi) const;
+16535: # 786 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       inline const char*
+16535:       scan_not(mask __m, const char* __lo, const char* __hi) const;
+16535: # 801 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       char_type
+16535:       toupper(char_type __c) const
+16535:       { return this->do_toupper(__c); }
+16535: # 818 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       const char_type*
+16535:       toupper(char_type *__lo, const char_type* __hi) const
+16535:       { return this->do_toupper(__lo, __hi); }
+16535: # 834 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       char_type
+16535:       tolower(char_type __c) const
+16535:       { return this->do_tolower(__c); }
+16535: # 851 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       const char_type*
+16535:       tolower(char_type* __lo, const char_type* __hi) const
+16535:       { return this->do_tolower(__lo, __hi); }
+16535: # 871 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       char_type
+16535:       widen(char __c) const
+16535:       {
+16535:  if (_M_widen_ok)
+16535:    return _M_widen[static_cast<unsigned char>(__c)];
+16535:  this->_M_widen_init();
+16535:  return this->do_widen(__c);
+16535:       }
+16535: # 898 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       const char*
+16535:       widen(const char* __lo, const char* __hi, char_type* __to) const
+16535:       {
+16535:  if (_M_widen_ok == 1)
+16535:    {
+16535:      if (__builtin_expect(__hi != __lo, true))
+16535:        __builtin_memcpy(__to, __lo, __hi - __lo);
+16535:      return __hi;
+16535:    }
+16535:  if (!_M_widen_ok)
+16535:    _M_widen_init();
+16535:  return this->do_widen(__lo, __hi, __to);
+16535:       }
+16535: # 930 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       char
+16535:       narrow(char_type __c, char __dfault) const
+16535:       {
+16535:  if (_M_narrow[static_cast<unsigned char>(__c)])
+16535:    return _M_narrow[static_cast<unsigned char>(__c)];
+16535:  const char __t = do_narrow(__c, __dfault);
+16535:  if (__t != __dfault)
+16535:    _M_narrow[static_cast<unsigned char>(__c)] = __t;
+16535:  return __t;
+16535:       }
+16535: # 963 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       const char_type*
+16535:       narrow(const char_type* __lo, const char_type* __hi,
+16535:       char __dfault, char* __to) const
+16535:       {
+16535:  if (__builtin_expect(_M_narrow_ok == 1, true))
+16535:    {
+16535:      if (__builtin_expect(__hi != __lo, true))
+16535:        __builtin_memcpy(__to, __lo, __hi - __lo);
+16535:      return __hi;
+16535:    }
+16535:  if (!_M_narrow_ok)
+16535:    _M_narrow_init();
+16535:  return this->do_narrow(__lo, __hi, __dfault, __to);
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const mask*
+16535:       table() const throw()
+16535:       { return _M_table; }
+16535: 
+16535: 
+16535:       static const mask*
+16535:       classic_table() throw();
+16535:     protected:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       virtual
+16535:       ~ctype();
+16535: # 1013 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual char_type
+16535:       do_toupper(char_type __c) const;
+16535: # 1030 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual const char_type*
+16535:       do_toupper(char_type* __lo, const char_type* __hi) const;
+16535: # 1046 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual char_type
+16535:       do_tolower(char_type __c) const;
+16535: # 1063 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual const char_type*
+16535:       do_tolower(char_type* __lo, const char_type* __hi) const;
+16535: # 1083 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual char_type
+16535:       do_widen(char __c) const
+16535:       { return __c; }
+16535: # 1106 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual const char*
+16535:       do_widen(const char* __lo, const char* __hi, char_type* __to) const
+16535:       {
+16535:  if (__builtin_expect(__hi != __lo, true))
+16535:    __builtin_memcpy(__to, __lo, __hi - __lo);
+16535:  return __hi;
+16535:       }
+16535: # 1133 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual char
+16535:       do_narrow(char_type __c, char __dfault __attribute__((__unused__))) const
+16535:       { return __c; }
+16535: # 1159 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual const char_type*
+16535:       do_narrow(const char_type* __lo, const char_type* __hi,
+16535:   char __dfault __attribute__((__unused__)), char* __to) const
+16535:       {
+16535:  if (__builtin_expect(__hi != __lo, true))
+16535:    __builtin_memcpy(__to, __lo, __hi - __lo);
+16535:  return __hi;
+16535:       }
+16535: 
+16535:     private:
+16535:       void _M_narrow_init() const;
+16535:       void _M_widen_init() const;
+16535:     };
+16535: # 1185 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:   template<>
+16535:     class ctype<wchar_t> : public __ctype_abstract_base<wchar_t>
+16535:     {
+16535:     public:
+16535: 
+16535: 
+16535:       typedef wchar_t char_type;
+16535:       typedef wctype_t __wmask_type;
+16535: 
+16535:     protected:
+16535:       __c_locale _M_c_locale_ctype;
+16535: 
+16535: 
+16535:       bool _M_narrow_ok;
+16535:       char _M_narrow[128];
+16535:       wint_t _M_widen[1 + static_cast<unsigned char>(-1)];
+16535: 
+16535: 
+16535:       mask _M_bit[16];
+16535:       __wmask_type _M_wmask[16];
+16535: 
+16535:     public:
+16535: 
+16535: 
+16535:       static locale::id id;
+16535: # 1218 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       explicit
+16535:       ctype(size_t __refs = 0);
+16535: # 1229 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       explicit
+16535:       ctype(__c_locale __cloc, size_t __refs = 0);
+16535: 
+16535:     protected:
+16535:       __wmask_type
+16535:       _M_convert_to_wmask(const mask __m) const throw();
+16535: 
+16535: 
+16535:       virtual
+16535:       ~ctype();
+16535: # 1253 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual bool
+16535:       do_is(mask __m, char_type __c) const;
+16535: # 1272 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual const char_type*
+16535:       do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const;
+16535: # 1290 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual const char_type*
+16535:       do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const;
+16535: # 1308 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual const char_type*
+16535:       do_scan_not(mask __m, const char_type* __lo,
+16535:     const char_type* __hi) const;
+16535: # 1325 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual char_type
+16535:       do_toupper(char_type __c) const;
+16535: # 1342 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual const char_type*
+16535:       do_toupper(char_type* __lo, const char_type* __hi) const;
+16535: # 1358 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual char_type
+16535:       do_tolower(char_type __c) const;
+16535: # 1375 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual const char_type*
+16535:       do_tolower(char_type* __lo, const char_type* __hi) const;
+16535: # 1395 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual char_type
+16535:       do_widen(char __c) const;
+16535: # 1417 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual const char*
+16535:       do_widen(const char* __lo, const char* __hi, char_type* __to) const;
+16535: # 1440 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual char
+16535:       do_narrow(char_type __c, char __dfault) const;
+16535: # 1466 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual const char_type*
+16535:       do_narrow(const char_type* __lo, const char_type* __hi,
+16535:   char __dfault, char* __to) const;
+16535: 
+16535: 
+16535:       void
+16535:       _M_initialize_ctype() throw();
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     class ctype_byname : public ctype<_CharT>
+16535:     {
+16535:     public:
+16535:       typedef typename ctype<_CharT>::mask mask;
+16535: 
+16535:       explicit
+16535:       ctype_byname(const char* __s, size_t __refs = 0);
+16535: 
+16535: 
+16535:       explicit
+16535:       ctype_byname(const string& __s, size_t __refs = 0)
+16535:       : ctype_byname(__s.c_str(), __refs) { }
+16535: 
+16535: 
+16535:     protected:
+16535:       virtual
+16535:       ~ctype_byname() { }
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     class ctype_byname<char> : public ctype<char>
+16535:     {
+16535:     public:
+16535:       explicit
+16535:       ctype_byname(const char* __s, size_t __refs = 0);
+16535: 
+16535: 
+16535:       explicit
+16535:       ctype_byname(const string& __s, size_t __refs = 0);
+16535: 
+16535: 
+16535:     protected:
+16535:       virtual
+16535:       ~ctype_byname();
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     class ctype_byname<wchar_t> : public ctype<wchar_t>
+16535:     {
+16535:     public:
+16535:       explicit
+16535:       ctype_byname(const char* __s, size_t __refs = 0);
+16535: 
+16535: 
+16535:       explicit
+16535:       ctype_byname(const string& __s, size_t __refs = 0);
+16535: 
+16535: 
+16535:     protected:
+16535:       virtual
+16535:       ~ctype_byname();
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/ctype_inline.h" 1 3
+16535: # 37 "/usr/include/x86_64-linux-gnu/c++/8/bits/ctype_inline.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   bool
+16535:   ctype<char>::
+16535:   is(mask __m, char __c) const
+16535:   { return _M_table[static_cast<unsigned char>(__c)] & __m; }
+16535: 
+16535:   const char*
+16535:   ctype<char>::
+16535:   is(const char* __low, const char* __high, mask* __vec) const
+16535:   {
+16535:     while (__low < __high)
+16535:       *__vec++ = _M_table[static_cast<unsigned char>(*__low++)];
+16535:     return __high;
+16535:   }
+16535: 
+16535:   const char*
+16535:   ctype<char>::
+16535:   scan_is(mask __m, const char* __low, const char* __high) const
+16535:   {
+16535:     while (__low < __high
+16535:     && !(_M_table[static_cast<unsigned char>(*__low)] & __m))
+16535:       ++__low;
+16535:     return __low;
+16535:   }
+16535: 
+16535:   const char*
+16535:   ctype<char>::
+16535:   scan_not(mask __m, const char* __low, const char* __high) const
+16535:   {
+16535:     while (__low < __high
+16535:     && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0)
+16535:       ++__low;
+16535:     return __low;
+16535:   }
+16535: 
+16535: 
+16535: }
+16535: # 1539 "/usr/include/c++/8/bits/locale_facets.h" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535:   class __num_base
+16535:   {
+16535:   public:
+16535: 
+16535: 
+16535:     enum
+16535:       {
+16535:  _S_ominus,
+16535:  _S_oplus,
+16535:  _S_ox,
+16535:  _S_oX,
+16535:  _S_odigits,
+16535:  _S_odigits_end = _S_odigits + 16,
+16535:  _S_oudigits = _S_odigits_end,
+16535:  _S_oudigits_end = _S_oudigits + 16,
+16535:  _S_oe = _S_odigits + 14,
+16535:  _S_oE = _S_oudigits + 14,
+16535:  _S_oend = _S_oudigits_end
+16535:       };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     static const char* _S_atoms_out;
+16535: 
+16535: 
+16535: 
+16535:     static const char* _S_atoms_in;
+16535: 
+16535:     enum
+16535:     {
+16535:       _S_iminus,
+16535:       _S_iplus,
+16535:       _S_ix,
+16535:       _S_iX,
+16535:       _S_izero,
+16535:       _S_ie = _S_izero + 14,
+16535:       _S_iE = _S_izero + 20,
+16535:       _S_iend = 26
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:     static void
+16535:     _S_format_float(const ios_base& __io, char* __fptr, char __mod) throw();
+16535:   };
+16535: 
+16535:   template<typename _CharT>
+16535:     struct __numpunct_cache : public locale::facet
+16535:     {
+16535:       const char* _M_grouping;
+16535:       size_t _M_grouping_size;
+16535:       bool _M_use_grouping;
+16535:       const _CharT* _M_truename;
+16535:       size_t _M_truename_size;
+16535:       const _CharT* _M_falsename;
+16535:       size_t _M_falsename_size;
+16535:       _CharT _M_decimal_point;
+16535:       _CharT _M_thousands_sep;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       _CharT _M_atoms_out[__num_base::_S_oend];
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       _CharT _M_atoms_in[__num_base::_S_iend];
+16535: 
+16535:       bool _M_allocated;
+16535: 
+16535:       __numpunct_cache(size_t __refs = 0)
+16535:       : facet(__refs), _M_grouping(0), _M_grouping_size(0),
+16535:  _M_use_grouping(false),
+16535:  _M_truename(0), _M_truename_size(0), _M_falsename(0),
+16535:  _M_falsename_size(0), _M_decimal_point(_CharT()),
+16535:  _M_thousands_sep(_CharT()), _M_allocated(false)
+16535:  { }
+16535: 
+16535:       ~__numpunct_cache();
+16535: 
+16535:       void
+16535:       _M_cache(const locale& __loc);
+16535: 
+16535:     private:
+16535:       __numpunct_cache&
+16535:       operator=(const __numpunct_cache&);
+16535: 
+16535:       explicit
+16535:       __numpunct_cache(const __numpunct_cache&);
+16535:     };
+16535: 
+16535:   template<typename _CharT>
+16535:     __numpunct_cache<_CharT>::~__numpunct_cache()
+16535:     {
+16535:       if (_M_allocated)
+16535:  {
+16535:    delete [] _M_grouping;
+16535:    delete [] _M_truename;
+16535:    delete [] _M_falsename;
+16535:  }
+16535:     }
+16535: 
+16535: namespace __cxx11 {
+16535: # 1669 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:   template<typename _CharT>
+16535:     class numpunct : public locale::facet
+16535:     {
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef basic_string<_CharT> string_type;
+16535: 
+16535:       typedef __numpunct_cache<_CharT> __cache_type;
+16535: 
+16535:     protected:
+16535:       __cache_type* _M_data;
+16535: 
+16535:     public:
+16535: 
+16535:       static locale::id id;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       explicit
+16535:       numpunct(size_t __refs = 0)
+16535:       : facet(__refs), _M_data(0)
+16535:       { _M_initialize_numpunct(); }
+16535: # 1707 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       explicit
+16535:       numpunct(__cache_type* __cache, size_t __refs = 0)
+16535:       : facet(__refs), _M_data(__cache)
+16535:       { _M_initialize_numpunct(); }
+16535: # 1721 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       explicit
+16535:       numpunct(__c_locale __cloc, size_t __refs = 0)
+16535:       : facet(__refs), _M_data(0)
+16535:       { _M_initialize_numpunct(__cloc); }
+16535: # 1735 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       char_type
+16535:       decimal_point() const
+16535:       { return this->do_decimal_point(); }
+16535: # 1748 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       char_type
+16535:       thousands_sep() const
+16535:       { return this->do_thousands_sep(); }
+16535: # 1779 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       string
+16535:       grouping() const
+16535:       { return this->do_grouping(); }
+16535: # 1792 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       string_type
+16535:       truename() const
+16535:       { return this->do_truename(); }
+16535: # 1805 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       string_type
+16535:       falsename() const
+16535:       { return this->do_falsename(); }
+16535: 
+16535:     protected:
+16535: 
+16535:       virtual
+16535:       ~numpunct();
+16535: # 1822 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual char_type
+16535:       do_decimal_point() const
+16535:       { return _M_data->_M_decimal_point; }
+16535: # 1834 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual char_type
+16535:       do_thousands_sep() const
+16535:       { return _M_data->_M_thousands_sep; }
+16535: # 1847 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual string
+16535:       do_grouping() const
+16535:       { return _M_data->_M_grouping; }
+16535: # 1860 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual string_type
+16535:       do_truename() const
+16535:       { return _M_data->_M_truename; }
+16535: # 1873 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual string_type
+16535:       do_falsename() const
+16535:       { return _M_data->_M_falsename; }
+16535: 
+16535: 
+16535:       void
+16535:       _M_initialize_numpunct(__c_locale __cloc = 0);
+16535:     };
+16535: 
+16535:   template<typename _CharT>
+16535:     locale::id numpunct<_CharT>::id;
+16535: 
+16535:   template<>
+16535:     numpunct<char>::~numpunct();
+16535: 
+16535:   template<>
+16535:     void
+16535:     numpunct<char>::_M_initialize_numpunct(__c_locale __cloc);
+16535: 
+16535: 
+16535:   template<>
+16535:     numpunct<wchar_t>::~numpunct();
+16535: 
+16535:   template<>
+16535:     void
+16535:     numpunct<wchar_t>::_M_initialize_numpunct(__c_locale __cloc);
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     class numpunct_byname : public numpunct<_CharT>
+16535:     {
+16535:     public:
+16535:       typedef _CharT char_type;
+16535:       typedef basic_string<_CharT> string_type;
+16535: 
+16535:       explicit
+16535:       numpunct_byname(const char* __s, size_t __refs = 0)
+16535:       : numpunct<_CharT>(__refs)
+16535:       {
+16535:  if (__builtin_strcmp(__s, "C") != 0
+16535:      && __builtin_strcmp(__s, "POSIX") != 0)
+16535:    {
+16535:      __c_locale __tmp;
+16535:      this->_S_create_c_locale(__tmp, __s);
+16535:      this->_M_initialize_numpunct(__tmp);
+16535:      this->_S_destroy_c_locale(__tmp);
+16535:    }
+16535:       }
+16535: 
+16535: 
+16535:       explicit
+16535:       numpunct_byname(const string& __s, size_t __refs = 0)
+16535:       : numpunct_byname(__s.c_str(), __refs) { }
+16535: 
+16535: 
+16535:     protected:
+16535:       virtual
+16535:       ~numpunct_byname() { }
+16535:     };
+16535: 
+16535: }
+16535: 
+16535: 
+16535: # 1951 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:   template<typename _CharT, typename _InIter>
+16535:     class num_get : public locale::facet
+16535:     {
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef _InIter iter_type;
+16535: 
+16535: 
+16535: 
+16535:       static locale::id id;
+16535: # 1972 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       explicit
+16535:       num_get(size_t __refs = 0) : facet(__refs) { }
+16535: # 1998 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       iter_type
+16535:       get(iter_type __in, iter_type __end, ios_base& __io,
+16535:    ios_base::iostate& __err, bool& __v) const
+16535:       { return this->do_get(__in, __end, __io, __err, __v); }
+16535: # 2035 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       iter_type
+16535:       get(iter_type __in, iter_type __end, ios_base& __io,
+16535:    ios_base::iostate& __err, long& __v) const
+16535:       { return this->do_get(__in, __end, __io, __err, __v); }
+16535: 
+16535:       iter_type
+16535:       get(iter_type __in, iter_type __end, ios_base& __io,
+16535:    ios_base::iostate& __err, unsigned short& __v) const
+16535:       { return this->do_get(__in, __end, __io, __err, __v); }
+16535: 
+16535:       iter_type
+16535:       get(iter_type __in, iter_type __end, ios_base& __io,
+16535:    ios_base::iostate& __err, unsigned int& __v) const
+16535:       { return this->do_get(__in, __end, __io, __err, __v); }
+16535: 
+16535:       iter_type
+16535:       get(iter_type __in, iter_type __end, ios_base& __io,
+16535:    ios_base::iostate& __err, unsigned long& __v) const
+16535:       { return this->do_get(__in, __end, __io, __err, __v); }
+16535: 
+16535: 
+16535:       iter_type
+16535:       get(iter_type __in, iter_type __end, ios_base& __io,
+16535:    ios_base::iostate& __err, long long& __v) const
+16535:       { return this->do_get(__in, __end, __io, __err, __v); }
+16535: 
+16535:       iter_type
+16535:       get(iter_type __in, iter_type __end, ios_base& __io,
+16535:    ios_base::iostate& __err, unsigned long long& __v) const
+16535:       { return this->do_get(__in, __end, __io, __err, __v); }
+16535: # 2095 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       iter_type
+16535:       get(iter_type __in, iter_type __end, ios_base& __io,
+16535:    ios_base::iostate& __err, float& __v) const
+16535:       { return this->do_get(__in, __end, __io, __err, __v); }
+16535: 
+16535:       iter_type
+16535:       get(iter_type __in, iter_type __end, ios_base& __io,
+16535:    ios_base::iostate& __err, double& __v) const
+16535:       { return this->do_get(__in, __end, __io, __err, __v); }
+16535: 
+16535:       iter_type
+16535:       get(iter_type __in, iter_type __end, ios_base& __io,
+16535:    ios_base::iostate& __err, long double& __v) const
+16535:       { return this->do_get(__in, __end, __io, __err, __v); }
+16535: # 2138 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       iter_type
+16535:       get(iter_type __in, iter_type __end, ios_base& __io,
+16535:    ios_base::iostate& __err, void*& __v) const
+16535:       { return this->do_get(__in, __end, __io, __err, __v); }
+16535: 
+16535:     protected:
+16535: 
+16535:       virtual ~num_get() { }
+16535: 
+16535:       __attribute ((__abi_tag__ ("cxx11")))
+16535:       iter_type
+16535:       _M_extract_float(iter_type, iter_type, ios_base&, ios_base::iostate&,
+16535:          string&) const;
+16535: 
+16535:       template<typename _ValueT>
+16535:  __attribute ((__abi_tag__ ("cxx11")))
+16535:  iter_type
+16535:  _M_extract_int(iter_type, iter_type, ios_base&, ios_base::iostate&,
+16535:          _ValueT&) const;
+16535: 
+16535:       template<typename _CharT2>
+16535:       typename __gnu_cxx::__enable_if<__is_char<_CharT2>::__value, int>::__type
+16535:  _M_find(const _CharT2*, size_t __len, _CharT2 __c) const
+16535:  {
+16535:    int __ret = -1;
+16535:    if (__len <= 10)
+16535:      {
+16535:        if (__c >= _CharT2('0') && __c < _CharT2(_CharT2('0') + __len))
+16535:   __ret = __c - _CharT2('0');
+16535:      }
+16535:    else
+16535:      {
+16535:        if (__c >= _CharT2('0') && __c <= _CharT2('9'))
+16535:   __ret = __c - _CharT2('0');
+16535:        else if (__c >= _CharT2('a') && __c <= _CharT2('f'))
+16535:   __ret = 10 + (__c - _CharT2('a'));
+16535:        else if (__c >= _CharT2('A') && __c <= _CharT2('F'))
+16535:   __ret = 10 + (__c - _CharT2('A'));
+16535:      }
+16535:    return __ret;
+16535:  }
+16535: 
+16535:       template<typename _CharT2>
+16535:       typename __gnu_cxx::__enable_if<!__is_char<_CharT2>::__value,
+16535:           int>::__type
+16535:  _M_find(const _CharT2* __zero, size_t __len, _CharT2 __c) const
+16535:  {
+16535:    int __ret = -1;
+16535:    const char_type* __q = char_traits<_CharT2>::find(__zero, __len, __c);
+16535:    if (__q)
+16535:      {
+16535:        __ret = __q - __zero;
+16535:        if (__ret > 15)
+16535:   __ret -= 6;
+16535:      }
+16535:    return __ret;
+16535:  }
+16535: # 2211 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual iter_type
+16535:       do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, bool&) const;
+16535: 
+16535:       virtual iter_type
+16535:       do_get(iter_type __beg, iter_type __end, ios_base& __io,
+16535:       ios_base::iostate& __err, long& __v) const
+16535:       { return _M_extract_int(__beg, __end, __io, __err, __v); }
+16535: 
+16535:       virtual iter_type
+16535:       do_get(iter_type __beg, iter_type __end, ios_base& __io,
+16535:       ios_base::iostate& __err, unsigned short& __v) const
+16535:       { return _M_extract_int(__beg, __end, __io, __err, __v); }
+16535: 
+16535:       virtual iter_type
+16535:       do_get(iter_type __beg, iter_type __end, ios_base& __io,
+16535:       ios_base::iostate& __err, unsigned int& __v) const
+16535:       { return _M_extract_int(__beg, __end, __io, __err, __v); }
+16535: 
+16535:       virtual iter_type
+16535:       do_get(iter_type __beg, iter_type __end, ios_base& __io,
+16535:       ios_base::iostate& __err, unsigned long& __v) const
+16535:       { return _M_extract_int(__beg, __end, __io, __err, __v); }
+16535: 
+16535: 
+16535:       virtual iter_type
+16535:       do_get(iter_type __beg, iter_type __end, ios_base& __io,
+16535:       ios_base::iostate& __err, long long& __v) const
+16535:       { return _M_extract_int(__beg, __end, __io, __err, __v); }
+16535: 
+16535:       virtual iter_type
+16535:       do_get(iter_type __beg, iter_type __end, ios_base& __io,
+16535:       ios_base::iostate& __err, unsigned long long& __v) const
+16535:       { return _M_extract_int(__beg, __end, __io, __err, __v); }
+16535: 
+16535: 
+16535:       virtual iter_type
+16535:       do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, float&) const;
+16535: 
+16535:       virtual iter_type
+16535:       do_get(iter_type, iter_type, ios_base&, ios_base::iostate&,
+16535:       double&) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       virtual iter_type
+16535:       do_get(iter_type, iter_type, ios_base&, ios_base::iostate&,
+16535:       long double&) const;
+16535: 
+16535: 
+16535:       virtual iter_type
+16535:       do_get(iter_type, iter_type, ios_base&, ios_base::iostate&, void*&) const;
+16535: # 2274 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:     };
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     locale::id num_get<_CharT, _InIter>::id;
+16535: # 2292 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:   template<typename _CharT, typename _OutIter>
+16535:     class num_put : public locale::facet
+16535:     {
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef _OutIter iter_type;
+16535: 
+16535: 
+16535: 
+16535:       static locale::id id;
+16535: # 2313 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       explicit
+16535:       num_put(size_t __refs = 0) : facet(__refs) { }
+16535: # 2331 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       iter_type
+16535:       put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const
+16535:       { return this->do_put(__s, __io, __fill, __v); }
+16535: # 2373 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       iter_type
+16535:       put(iter_type __s, ios_base& __io, char_type __fill, long __v) const
+16535:       { return this->do_put(__s, __io, __fill, __v); }
+16535: 
+16535:       iter_type
+16535:       put(iter_type __s, ios_base& __io, char_type __fill,
+16535:    unsigned long __v) const
+16535:       { return this->do_put(__s, __io, __fill, __v); }
+16535: 
+16535: 
+16535:       iter_type
+16535:       put(iter_type __s, ios_base& __io, char_type __fill, long long __v) const
+16535:       { return this->do_put(__s, __io, __fill, __v); }
+16535: 
+16535:       iter_type
+16535:       put(iter_type __s, ios_base& __io, char_type __fill,
+16535:    unsigned long long __v) const
+16535:       { return this->do_put(__s, __io, __fill, __v); }
+16535: # 2436 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       iter_type
+16535:       put(iter_type __s, ios_base& __io, char_type __fill, double __v) const
+16535:       { return this->do_put(__s, __io, __fill, __v); }
+16535: 
+16535:       iter_type
+16535:       put(iter_type __s, ios_base& __io, char_type __fill,
+16535:    long double __v) const
+16535:       { return this->do_put(__s, __io, __fill, __v); }
+16535: # 2461 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       iter_type
+16535:       put(iter_type __s, ios_base& __io, char_type __fill,
+16535:    const void* __v) const
+16535:       { return this->do_put(__s, __io, __fill, __v); }
+16535: 
+16535:     protected:
+16535:       template<typename _ValueT>
+16535:  iter_type
+16535:  _M_insert_float(iter_type, ios_base& __io, char_type __fill,
+16535:    char __mod, _ValueT __v) const;
+16535: 
+16535:       void
+16535:       _M_group_float(const char* __grouping, size_t __grouping_size,
+16535:        char_type __sep, const char_type* __p, char_type* __new,
+16535:        char_type* __cs, int& __len) const;
+16535: 
+16535:       template<typename _ValueT>
+16535:  iter_type
+16535:  _M_insert_int(iter_type, ios_base& __io, char_type __fill,
+16535:         _ValueT __v) const;
+16535: 
+16535:       void
+16535:       _M_group_int(const char* __grouping, size_t __grouping_size,
+16535:      char_type __sep, ios_base& __io, char_type* __new,
+16535:      char_type* __cs, int& __len) const;
+16535: 
+16535:       void
+16535:       _M_pad(char_type __fill, streamsize __w, ios_base& __io,
+16535:       char_type* __new, const char_type* __cs, int& __len) const;
+16535: 
+16535: 
+16535:       virtual
+16535:       ~num_put() { }
+16535: # 2509 "/usr/include/c++/8/bits/locale_facets.h" 3
+16535:       virtual iter_type
+16535:       do_put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const;
+16535: 
+16535:       virtual iter_type
+16535:       do_put(iter_type __s, ios_base& __io, char_type __fill, long __v) const
+16535:       { return _M_insert_int(__s, __io, __fill, __v); }
+16535: 
+16535:       virtual iter_type
+16535:       do_put(iter_type __s, ios_base& __io, char_type __fill,
+16535:       unsigned long __v) const
+16535:       { return _M_insert_int(__s, __io, __fill, __v); }
+16535: 
+16535: 
+16535:       virtual iter_type
+16535:       do_put(iter_type __s, ios_base& __io, char_type __fill,
+16535:       long long __v) const
+16535:       { return _M_insert_int(__s, __io, __fill, __v); }
+16535: 
+16535:       virtual iter_type
+16535:       do_put(iter_type __s, ios_base& __io, char_type __fill,
+16535:       unsigned long long __v) const
+16535:       { return _M_insert_int(__s, __io, __fill, __v); }
+16535: 
+16535: 
+16535:       virtual iter_type
+16535:       do_put(iter_type, ios_base&, char_type, double) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       virtual iter_type
+16535:       do_put(iter_type, ios_base&, char_type, long double) const;
+16535: 
+16535: 
+16535:       virtual iter_type
+16535:       do_put(iter_type, ios_base&, char_type, const void*) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     };
+16535: 
+16535:   template <typename _CharT, typename _OutIter>
+16535:     locale::id num_put<_CharT, _OutIter>::id;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     inline bool
+16535:     isspace(_CharT __c, const locale& __loc)
+16535:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::space, __c); }
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     inline bool
+16535:     isprint(_CharT __c, const locale& __loc)
+16535:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::print, __c); }
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     inline bool
+16535:     iscntrl(_CharT __c, const locale& __loc)
+16535:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::cntrl, __c); }
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     inline bool
+16535:     isupper(_CharT __c, const locale& __loc)
+16535:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::upper, __c); }
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     inline bool
+16535:     islower(_CharT __c, const locale& __loc)
+16535:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::lower, __c); }
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     inline bool
+16535:     isalpha(_CharT __c, const locale& __loc)
+16535:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::alpha, __c); }
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     inline bool
+16535:     isdigit(_CharT __c, const locale& __loc)
+16535:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::digit, __c); }
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     inline bool
+16535:     ispunct(_CharT __c, const locale& __loc)
+16535:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::punct, __c); }
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     inline bool
+16535:     isxdigit(_CharT __c, const locale& __loc)
+16535:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::xdigit, __c); }
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     inline bool
+16535:     isalnum(_CharT __c, const locale& __loc)
+16535:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::alnum, __c); }
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     inline bool
+16535:     isgraph(_CharT __c, const locale& __loc)
+16535:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::graph, __c); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     inline bool
+16535:     isblank(_CharT __c, const locale& __loc)
+16535:     { return use_facet<ctype<_CharT> >(__loc).is(ctype_base::blank, __c); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     inline _CharT
+16535:     toupper(_CharT __c, const locale& __loc)
+16535:     { return use_facet<ctype<_CharT> >(__loc).toupper(__c); }
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     inline _CharT
+16535:     tolower(_CharT __c, const locale& __loc)
+16535:     { return use_facet<ctype<_CharT> >(__loc).tolower(__c); }
+16535: 
+16535: 
+16535: }
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/locale_facets.tcc" 1 3
+16535: # 33 "/usr/include/c++/8/bits/locale_facets.tcc" 3
+16535:        
+16535: # 34 "/usr/include/c++/8/bits/locale_facets.tcc" 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Facet>
+16535:     struct __use_cache
+16535:     {
+16535:       const _Facet*
+16535:       operator() (const locale& __loc) const;
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     struct __use_cache<__numpunct_cache<_CharT> >
+16535:     {
+16535:       const __numpunct_cache<_CharT>*
+16535:       operator() (const locale& __loc) const
+16535:       {
+16535:  const size_t __i = numpunct<_CharT>::id._M_id();
+16535:  const locale::facet** __caches = __loc._M_impl->_M_caches;
+16535:  if (!__caches[__i])
+16535:    {
+16535:      __numpunct_cache<_CharT>* __tmp = 0;
+16535:      try
+16535:        {
+16535:   __tmp = new __numpunct_cache<_CharT>;
+16535:   __tmp->_M_cache(__loc);
+16535:        }
+16535:      catch(...)
+16535:        {
+16535:   delete __tmp;
+16535:   throw;
+16535:        }
+16535:      __loc._M_impl->_M_install_cache(__tmp, __i);
+16535:    }
+16535:  return static_cast<const __numpunct_cache<_CharT>*>(__caches[__i]);
+16535:       }
+16535:     };
+16535: 
+16535:   template<typename _CharT>
+16535:     void
+16535:     __numpunct_cache<_CharT>::_M_cache(const locale& __loc)
+16535:     {
+16535:       const numpunct<_CharT>& __np = use_facet<numpunct<_CharT> >(__loc);
+16535: 
+16535:       char* __grouping = 0;
+16535:       _CharT* __truename = 0;
+16535:       _CharT* __falsename = 0;
+16535:       try
+16535:  {
+16535:    const string& __g = __np.grouping();
+16535:    _M_grouping_size = __g.size();
+16535:    __grouping = new char[_M_grouping_size];
+16535:    __g.copy(__grouping, _M_grouping_size);
+16535:    _M_use_grouping = (_M_grouping_size
+16535:         && static_cast<signed char>(__grouping[0]) > 0
+16535:         && (__grouping[0]
+16535:      != __gnu_cxx::__numeric_traits<char>::__max));
+16535: 
+16535:    const basic_string<_CharT>& __tn = __np.truename();
+16535:    _M_truename_size = __tn.size();
+16535:    __truename = new _CharT[_M_truename_size];
+16535:    __tn.copy(__truename, _M_truename_size);
+16535: 
+16535:    const basic_string<_CharT>& __fn = __np.falsename();
+16535:    _M_falsename_size = __fn.size();
+16535:    __falsename = new _CharT[_M_falsename_size];
+16535:    __fn.copy(__falsename, _M_falsename_size);
+16535: 
+16535:    _M_decimal_point = __np.decimal_point();
+16535:    _M_thousands_sep = __np.thousands_sep();
+16535: 
+16535:    const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__loc);
+16535:    __ct.widen(__num_base::_S_atoms_out,
+16535:        __num_base::_S_atoms_out
+16535:        + __num_base::_S_oend, _M_atoms_out);
+16535:    __ct.widen(__num_base::_S_atoms_in,
+16535:        __num_base::_S_atoms_in
+16535:        + __num_base::_S_iend, _M_atoms_in);
+16535: 
+16535:    _M_grouping = __grouping;
+16535:    _M_truename = __truename;
+16535:    _M_falsename = __falsename;
+16535:    _M_allocated = true;
+16535:  }
+16535:       catch(...)
+16535:  {
+16535:    delete [] __grouping;
+16535:    delete [] __truename;
+16535:    delete [] __falsename;
+16535:    throw;
+16535:  }
+16535:     }
+16535: # 139 "/usr/include/c++/8/bits/locale_facets.tcc" 3
+16535:   __attribute__ ((__pure__)) bool
+16535:   __verify_grouping(const char* __grouping, size_t __grouping_size,
+16535:       const string& __grouping_tmp) throw ();
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     __attribute ((__abi_tag__ ("cxx11")))
+16535:     _InIter
+16535:     num_get<_CharT, _InIter>::
+16535:     _M_extract_float(_InIter __beg, _InIter __end, ios_base& __io,
+16535:        ios_base::iostate& __err, string& __xtrc) const
+16535:     {
+16535:       typedef char_traits<_CharT> __traits_type;
+16535:       typedef __numpunct_cache<_CharT> __cache_type;
+16535:       __use_cache<__cache_type> __uc;
+16535:       const locale& __loc = __io._M_getloc();
+16535:       const __cache_type* __lc = __uc(__loc);
+16535:       const _CharT* __lit = __lc->_M_atoms_in;
+16535:       char_type __c = char_type();
+16535: 
+16535: 
+16535:       bool __testeof = __beg == __end;
+16535: 
+16535: 
+16535:       if (!__testeof)
+16535:  {
+16535:    __c = *__beg;
+16535:    const bool __plus = __c == __lit[__num_base::_S_iplus];
+16535:    if ((__plus || __c == __lit[__num_base::_S_iminus])
+16535:        && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
+16535:        && !(__c == __lc->_M_decimal_point))
+16535:      {
+16535:        __xtrc += __plus ? '+' : '-';
+16535:        if (++__beg != __end)
+16535:   __c = *__beg;
+16535:        else
+16535:   __testeof = true;
+16535:      }
+16535:  }
+16535: 
+16535: 
+16535:       bool __found_mantissa = false;
+16535:       int __sep_pos = 0;
+16535:       while (!__testeof)
+16535:  {
+16535:    if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
+16535:        || __c == __lc->_M_decimal_point)
+16535:      break;
+16535:    else if (__c == __lit[__num_base::_S_izero])
+16535:      {
+16535:        if (!__found_mantissa)
+16535:   {
+16535:     __xtrc += '0';
+16535:     __found_mantissa = true;
+16535:   }
+16535:        ++__sep_pos;
+16535: 
+16535:        if (++__beg != __end)
+16535:   __c = *__beg;
+16535:        else
+16535:   __testeof = true;
+16535:      }
+16535:    else
+16535:      break;
+16535:  }
+16535: 
+16535: 
+16535:       bool __found_dec = false;
+16535:       bool __found_sci = false;
+16535:       string __found_grouping;
+16535:       if (__lc->_M_use_grouping)
+16535:  __found_grouping.reserve(32);
+16535:       const char_type* __lit_zero = __lit + __num_base::_S_izero;
+16535: 
+16535:       if (!__lc->_M_allocated)
+16535: 
+16535:  while (!__testeof)
+16535:    {
+16535:      const int __digit = _M_find(__lit_zero, 10, __c);
+16535:      if (__digit != -1)
+16535:        {
+16535:   __xtrc += '0' + __digit;
+16535:   __found_mantissa = true;
+16535:        }
+16535:      else if (__c == __lc->_M_decimal_point
+16535:        && !__found_dec && !__found_sci)
+16535:        {
+16535:   __xtrc += '.';
+16535:   __found_dec = true;
+16535:        }
+16535:      else if ((__c == __lit[__num_base::_S_ie]
+16535:         || __c == __lit[__num_base::_S_iE])
+16535:        && !__found_sci && __found_mantissa)
+16535:        {
+16535: 
+16535:   __xtrc += 'e';
+16535:   __found_sci = true;
+16535: 
+16535: 
+16535:   if (++__beg != __end)
+16535:     {
+16535:       __c = *__beg;
+16535:       const bool __plus = __c == __lit[__num_base::_S_iplus];
+16535:       if (__plus || __c == __lit[__num_base::_S_iminus])
+16535:         __xtrc += __plus ? '+' : '-';
+16535:       else
+16535:         continue;
+16535:     }
+16535:   else
+16535:     {
+16535:       __testeof = true;
+16535:       break;
+16535:     }
+16535:        }
+16535:      else
+16535:        break;
+16535: 
+16535:      if (++__beg != __end)
+16535:        __c = *__beg;
+16535:      else
+16535:        __testeof = true;
+16535:    }
+16535:       else
+16535:  while (!__testeof)
+16535:    {
+16535: 
+16535: 
+16535:      if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
+16535:        {
+16535:   if (!__found_dec && !__found_sci)
+16535:     {
+16535: 
+16535: 
+16535:       if (__sep_pos)
+16535:         {
+16535:    __found_grouping += static_cast<char>(__sep_pos);
+16535:    __sep_pos = 0;
+16535:         }
+16535:       else
+16535:         {
+16535: 
+16535: 
+16535:    __xtrc.clear();
+16535:    break;
+16535:         }
+16535:     }
+16535:   else
+16535:     break;
+16535:        }
+16535:      else if (__c == __lc->_M_decimal_point)
+16535:        {
+16535:   if (!__found_dec && !__found_sci)
+16535:     {
+16535: 
+16535: 
+16535: 
+16535:       if (__found_grouping.size())
+16535:         __found_grouping += static_cast<char>(__sep_pos);
+16535:       __xtrc += '.';
+16535:       __found_dec = true;
+16535:     }
+16535:   else
+16535:     break;
+16535:        }
+16535:      else
+16535:        {
+16535:   const char_type* __q =
+16535:     __traits_type::find(__lit_zero, 10, __c);
+16535:   if (__q)
+16535:     {
+16535:       __xtrc += '0' + (__q - __lit_zero);
+16535:       __found_mantissa = true;
+16535:       ++__sep_pos;
+16535:     }
+16535:   else if ((__c == __lit[__num_base::_S_ie]
+16535:      || __c == __lit[__num_base::_S_iE])
+16535:     && !__found_sci && __found_mantissa)
+16535:     {
+16535: 
+16535:       if (__found_grouping.size() && !__found_dec)
+16535:         __found_grouping += static_cast<char>(__sep_pos);
+16535:       __xtrc += 'e';
+16535:       __found_sci = true;
+16535: 
+16535: 
+16535:       if (++__beg != __end)
+16535:         {
+16535:    __c = *__beg;
+16535:    const bool __plus = __c == __lit[__num_base::_S_iplus];
+16535:    if ((__plus || __c == __lit[__num_base::_S_iminus])
+16535:        && !(__lc->_M_use_grouping
+16535:      && __c == __lc->_M_thousands_sep)
+16535:        && !(__c == __lc->_M_decimal_point))
+16535:         __xtrc += __plus ? '+' : '-';
+16535:    else
+16535:      continue;
+16535:         }
+16535:       else
+16535:         {
+16535:    __testeof = true;
+16535:    break;
+16535:         }
+16535:     }
+16535:   else
+16535:     break;
+16535:        }
+16535: 
+16535:      if (++__beg != __end)
+16535:        __c = *__beg;
+16535:      else
+16535:        __testeof = true;
+16535:    }
+16535: 
+16535: 
+16535: 
+16535:       if (__found_grouping.size())
+16535:         {
+16535: 
+16535:    if (!__found_dec && !__found_sci)
+16535:      __found_grouping += static_cast<char>(__sep_pos);
+16535: 
+16535:           if (!std::__verify_grouping(__lc->_M_grouping,
+16535:           __lc->_M_grouping_size,
+16535:           __found_grouping))
+16535:      __err = ios_base::failbit;
+16535:         }
+16535: 
+16535:       return __beg;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     template<typename _ValueT>
+16535:       __attribute ((__abi_tag__ ("cxx11")))
+16535:       _InIter
+16535:       num_get<_CharT, _InIter>::
+16535:       _M_extract_int(_InIter __beg, _InIter __end, ios_base& __io,
+16535:        ios_base::iostate& __err, _ValueT& __v) const
+16535:       {
+16535:         typedef char_traits<_CharT> __traits_type;
+16535:  using __gnu_cxx::__add_unsigned;
+16535:  typedef typename __add_unsigned<_ValueT>::__type __unsigned_type;
+16535:  typedef __numpunct_cache<_CharT> __cache_type;
+16535:  __use_cache<__cache_type> __uc;
+16535:  const locale& __loc = __io._M_getloc();
+16535:  const __cache_type* __lc = __uc(__loc);
+16535:  const _CharT* __lit = __lc->_M_atoms_in;
+16535:  char_type __c = char_type();
+16535: 
+16535: 
+16535:  const ios_base::fmtflags __basefield = __io.flags()
+16535:                                         & ios_base::basefield;
+16535:  const bool __oct = __basefield == ios_base::oct;
+16535:  int __base = __oct ? 8 : (__basefield == ios_base::hex ? 16 : 10);
+16535: 
+16535: 
+16535:  bool __testeof = __beg == __end;
+16535: 
+16535: 
+16535:  bool __negative = false;
+16535:  if (!__testeof)
+16535:    {
+16535:      __c = *__beg;
+16535:      __negative = __c == __lit[__num_base::_S_iminus];
+16535:      if ((__negative || __c == __lit[__num_base::_S_iplus])
+16535:   && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
+16535:   && !(__c == __lc->_M_decimal_point))
+16535:        {
+16535:   if (++__beg != __end)
+16535:     __c = *__beg;
+16535:   else
+16535:     __testeof = true;
+16535:        }
+16535:    }
+16535: 
+16535: 
+16535: 
+16535:  bool __found_zero = false;
+16535:  int __sep_pos = 0;
+16535:  while (!__testeof)
+16535:    {
+16535:      if ((__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
+16535:   || __c == __lc->_M_decimal_point)
+16535:        break;
+16535:      else if (__c == __lit[__num_base::_S_izero]
+16535:        && (!__found_zero || __base == 10))
+16535:        {
+16535:   __found_zero = true;
+16535:   ++__sep_pos;
+16535:   if (__basefield == 0)
+16535:     __base = 8;
+16535:   if (__base == 8)
+16535:     __sep_pos = 0;
+16535:        }
+16535:      else if (__found_zero
+16535:        && (__c == __lit[__num_base::_S_ix]
+16535:     || __c == __lit[__num_base::_S_iX]))
+16535:        {
+16535:   if (__basefield == 0)
+16535:     __base = 16;
+16535:   if (__base == 16)
+16535:     {
+16535:       __found_zero = false;
+16535:       __sep_pos = 0;
+16535:     }
+16535:   else
+16535:     break;
+16535:        }
+16535:      else
+16535:        break;
+16535: 
+16535:      if (++__beg != __end)
+16535:        {
+16535:   __c = *__beg;
+16535:   if (!__found_zero)
+16535:     break;
+16535:        }
+16535:      else
+16535:        __testeof = true;
+16535:    }
+16535: 
+16535: 
+16535: 
+16535:  const size_t __len = (__base == 16 ? __num_base::_S_iend
+16535:          - __num_base::_S_izero : __base);
+16535: 
+16535: 
+16535:  typedef __gnu_cxx::__numeric_traits<_ValueT> __num_traits;
+16535:  string __found_grouping;
+16535:  if (__lc->_M_use_grouping)
+16535:    __found_grouping.reserve(32);
+16535:  bool __testfail = false;
+16535:  bool __testoverflow = false;
+16535:  const __unsigned_type __max =
+16535:    (__negative && __num_traits::__is_signed)
+16535:    ? -static_cast<__unsigned_type>(__num_traits::__min)
+16535:    : __num_traits::__max;
+16535:  const __unsigned_type __smax = __max / __base;
+16535:  __unsigned_type __result = 0;
+16535:  int __digit = 0;
+16535:  const char_type* __lit_zero = __lit + __num_base::_S_izero;
+16535: 
+16535:  if (!__lc->_M_allocated)
+16535: 
+16535:    while (!__testeof)
+16535:      {
+16535:        __digit = _M_find(__lit_zero, __len, __c);
+16535:        if (__digit == -1)
+16535:   break;
+16535: 
+16535:        if (__result > __smax)
+16535:   __testoverflow = true;
+16535:        else
+16535:   {
+16535:     __result *= __base;
+16535:     __testoverflow |= __result > __max - __digit;
+16535:     __result += __digit;
+16535:     ++__sep_pos;
+16535:   }
+16535: 
+16535:        if (++__beg != __end)
+16535:   __c = *__beg;
+16535:        else
+16535:   __testeof = true;
+16535:      }
+16535:  else
+16535:    while (!__testeof)
+16535:      {
+16535: 
+16535: 
+16535:        if (__lc->_M_use_grouping && __c == __lc->_M_thousands_sep)
+16535:   {
+16535: 
+16535: 
+16535:     if (__sep_pos)
+16535:       {
+16535:         __found_grouping += static_cast<char>(__sep_pos);
+16535:         __sep_pos = 0;
+16535:       }
+16535:     else
+16535:       {
+16535:         __testfail = true;
+16535:         break;
+16535:       }
+16535:   }
+16535:        else if (__c == __lc->_M_decimal_point)
+16535:   break;
+16535:        else
+16535:   {
+16535:     const char_type* __q =
+16535:       __traits_type::find(__lit_zero, __len, __c);
+16535:     if (!__q)
+16535:       break;
+16535: 
+16535:     __digit = __q - __lit_zero;
+16535:     if (__digit > 15)
+16535:       __digit -= 6;
+16535:     if (__result > __smax)
+16535:       __testoverflow = true;
+16535:     else
+16535:       {
+16535:         __result *= __base;
+16535:         __testoverflow |= __result > __max - __digit;
+16535:         __result += __digit;
+16535:         ++__sep_pos;
+16535:       }
+16535:   }
+16535: 
+16535:        if (++__beg != __end)
+16535:   __c = *__beg;
+16535:        else
+16535:   __testeof = true;
+16535:      }
+16535: 
+16535: 
+16535: 
+16535:  if (__found_grouping.size())
+16535:    {
+16535: 
+16535:      __found_grouping += static_cast<char>(__sep_pos);
+16535: 
+16535:      if (!std::__verify_grouping(__lc->_M_grouping,
+16535:      __lc->_M_grouping_size,
+16535:      __found_grouping))
+16535:        __err = ios_base::failbit;
+16535:    }
+16535: 
+16535: 
+16535: 
+16535:  if ((!__sep_pos && !__found_zero && !__found_grouping.size())
+16535:      || __testfail)
+16535:    {
+16535:      __v = 0;
+16535:      __err = ios_base::failbit;
+16535:    }
+16535:  else if (__testoverflow)
+16535:    {
+16535:      if (__negative && __num_traits::__is_signed)
+16535:        __v = __num_traits::__min;
+16535:      else
+16535:        __v = __num_traits::__max;
+16535:      __err = ios_base::failbit;
+16535:    }
+16535:  else
+16535:    __v = __negative ? -__result : __result;
+16535: 
+16535:  if (__testeof)
+16535:    __err |= ios_base::eofbit;
+16535:  return __beg;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     _InIter
+16535:     num_get<_CharT, _InIter>::
+16535:     do_get(iter_type __beg, iter_type __end, ios_base& __io,
+16535:            ios_base::iostate& __err, bool& __v) const
+16535:     {
+16535:       if (!(__io.flags() & ios_base::boolalpha))
+16535:         {
+16535: 
+16535: 
+16535: 
+16535:    long __l = -1;
+16535:           __beg = _M_extract_int(__beg, __end, __io, __err, __l);
+16535:    if (__l == 0 || __l == 1)
+16535:      __v = bool(__l);
+16535:    else
+16535:      {
+16535: 
+16535: 
+16535:        __v = true;
+16535:        __err = ios_base::failbit;
+16535:        if (__beg == __end)
+16535:   __err |= ios_base::eofbit;
+16535:      }
+16535:         }
+16535:       else
+16535:         {
+16535: 
+16535:    typedef __numpunct_cache<_CharT> __cache_type;
+16535:    __use_cache<__cache_type> __uc;
+16535:    const locale& __loc = __io._M_getloc();
+16535:    const __cache_type* __lc = __uc(__loc);
+16535: 
+16535:    bool __testf = true;
+16535:    bool __testt = true;
+16535:    bool __donef = __lc->_M_falsename_size == 0;
+16535:    bool __donet = __lc->_M_truename_size == 0;
+16535:    bool __testeof = false;
+16535:    size_t __n = 0;
+16535:    while (!__donef || !__donet)
+16535:      {
+16535:        if (__beg == __end)
+16535:   {
+16535:     __testeof = true;
+16535:     break;
+16535:   }
+16535: 
+16535:        const char_type __c = *__beg;
+16535: 
+16535:        if (!__donef)
+16535:   __testf = __c == __lc->_M_falsename[__n];
+16535: 
+16535:        if (!__testf && __donet)
+16535:   break;
+16535: 
+16535:        if (!__donet)
+16535:   __testt = __c == __lc->_M_truename[__n];
+16535: 
+16535:        if (!__testt && __donef)
+16535:   break;
+16535: 
+16535:        if (!__testt && !__testf)
+16535:   break;
+16535: 
+16535:        ++__n;
+16535:        ++__beg;
+16535: 
+16535:        __donef = !__testf || __n >= __lc->_M_falsename_size;
+16535:        __donet = !__testt || __n >= __lc->_M_truename_size;
+16535:      }
+16535:    if (__testf && __n == __lc->_M_falsename_size && __n)
+16535:      {
+16535:        __v = false;
+16535:        if (__testt && __n == __lc->_M_truename_size)
+16535:   __err = ios_base::failbit;
+16535:        else
+16535:   __err = __testeof ? ios_base::eofbit : ios_base::goodbit;
+16535:      }
+16535:    else if (__testt && __n == __lc->_M_truename_size && __n)
+16535:      {
+16535:        __v = true;
+16535:        __err = __testeof ? ios_base::eofbit : ios_base::goodbit;
+16535:      }
+16535:    else
+16535:      {
+16535: 
+16535: 
+16535:        __v = false;
+16535:        __err = ios_base::failbit;
+16535:        if (__testeof)
+16535:   __err |= ios_base::eofbit;
+16535:      }
+16535:  }
+16535:       return __beg;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     _InIter
+16535:     num_get<_CharT, _InIter>::
+16535:     do_get(iter_type __beg, iter_type __end, ios_base& __io,
+16535:     ios_base::iostate& __err, float& __v) const
+16535:     {
+16535:       string __xtrc;
+16535:       __xtrc.reserve(32);
+16535:       __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
+16535:       std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale());
+16535:       if (__beg == __end)
+16535:  __err |= ios_base::eofbit;
+16535:       return __beg;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     _InIter
+16535:     num_get<_CharT, _InIter>::
+16535:     do_get(iter_type __beg, iter_type __end, ios_base& __io,
+16535:            ios_base::iostate& __err, double& __v) const
+16535:     {
+16535:       string __xtrc;
+16535:       __xtrc.reserve(32);
+16535:       __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
+16535:       std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale());
+16535:       if (__beg == __end)
+16535:  __err |= ios_base::eofbit;
+16535:       return __beg;
+16535:     }
+16535: # 735 "/usr/include/c++/8/bits/locale_facets.tcc" 3
+16535:   template<typename _CharT, typename _InIter>
+16535:     _InIter
+16535:     num_get<_CharT, _InIter>::
+16535:     do_get(iter_type __beg, iter_type __end, ios_base& __io,
+16535:            ios_base::iostate& __err, long double& __v) const
+16535:     {
+16535:       string __xtrc;
+16535:       __xtrc.reserve(32);
+16535:       __beg = _M_extract_float(__beg, __end, __io, __err, __xtrc);
+16535:       std::__convert_to_v(__xtrc.c_str(), __v, __err, _S_get_c_locale());
+16535:       if (__beg == __end)
+16535:  __err |= ios_base::eofbit;
+16535:       return __beg;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     _InIter
+16535:     num_get<_CharT, _InIter>::
+16535:     do_get(iter_type __beg, iter_type __end, ios_base& __io,
+16535:            ios_base::iostate& __err, void*& __v) const
+16535:     {
+16535: 
+16535:       typedef ios_base::fmtflags fmtflags;
+16535:       const fmtflags __fmt = __io.flags();
+16535:       __io.flags((__fmt & ~ios_base::basefield) | ios_base::hex);
+16535: 
+16535:       typedef __gnu_cxx::__conditional_type<(sizeof(void*)
+16535:           <= sizeof(unsigned long)),
+16535:  unsigned long, unsigned long long>::__type _UIntPtrType;
+16535: 
+16535:       _UIntPtrType __ul;
+16535:       __beg = _M_extract_int(__beg, __end, __io, __err, __ul);
+16535: 
+16535: 
+16535:       __io.flags(__fmt);
+16535: 
+16535:       __v = reinterpret_cast<void*>(__ul);
+16535:       return __beg;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _OutIter>
+16535:     void
+16535:     num_put<_CharT, _OutIter>::
+16535:     _M_pad(_CharT __fill, streamsize __w, ios_base& __io,
+16535:     _CharT* __new, const _CharT* __cs, int& __len) const
+16535:     {
+16535: 
+16535: 
+16535:       __pad<_CharT, char_traits<_CharT> >::_S_pad(__io, __fill, __new,
+16535:         __cs, __w, __len);
+16535:       __len = static_cast<int>(__w);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _ValueT>
+16535:     int
+16535:     __int_to_char(_CharT* __bufend, _ValueT __v, const _CharT* __lit,
+16535:     ios_base::fmtflags __flags, bool __dec)
+16535:     {
+16535:       _CharT* __buf = __bufend;
+16535:       if (__builtin_expect(__dec, true))
+16535:  {
+16535: 
+16535:    do
+16535:      {
+16535:        *--__buf = __lit[(__v % 10) + __num_base::_S_odigits];
+16535:        __v /= 10;
+16535:      }
+16535:    while (__v != 0);
+16535:  }
+16535:       else if ((__flags & ios_base::basefield) == ios_base::oct)
+16535:  {
+16535: 
+16535:    do
+16535:      {
+16535:        *--__buf = __lit[(__v & 0x7) + __num_base::_S_odigits];
+16535:        __v >>= 3;
+16535:      }
+16535:    while (__v != 0);
+16535:  }
+16535:       else
+16535:  {
+16535: 
+16535:    const bool __uppercase = __flags & ios_base::uppercase;
+16535:    const int __case_offset = __uppercase ? __num_base::_S_oudigits
+16535:                                          : __num_base::_S_odigits;
+16535:    do
+16535:      {
+16535:        *--__buf = __lit[(__v & 0xf) + __case_offset];
+16535:        __v >>= 4;
+16535:      }
+16535:    while (__v != 0);
+16535:  }
+16535:       return __bufend - __buf;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _OutIter>
+16535:     void
+16535:     num_put<_CharT, _OutIter>::
+16535:     _M_group_int(const char* __grouping, size_t __grouping_size, _CharT __sep,
+16535:    ios_base&, _CharT* __new, _CharT* __cs, int& __len) const
+16535:     {
+16535:       _CharT* __p = std::__add_grouping(__new, __sep, __grouping,
+16535:      __grouping_size, __cs, __cs + __len);
+16535:       __len = __p - __new;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _OutIter>
+16535:     template<typename _ValueT>
+16535:       _OutIter
+16535:       num_put<_CharT, _OutIter>::
+16535:       _M_insert_int(_OutIter __s, ios_base& __io, _CharT __fill,
+16535:       _ValueT __v) const
+16535:       {
+16535:  using __gnu_cxx::__add_unsigned;
+16535:  typedef typename __add_unsigned<_ValueT>::__type __unsigned_type;
+16535:  typedef __numpunct_cache<_CharT> __cache_type;
+16535:  __use_cache<__cache_type> __uc;
+16535:  const locale& __loc = __io._M_getloc();
+16535:  const __cache_type* __lc = __uc(__loc);
+16535:  const _CharT* __lit = __lc->_M_atoms_out;
+16535:  const ios_base::fmtflags __flags = __io.flags();
+16535: 
+16535: 
+16535:  const int __ilen = 5 * sizeof(_ValueT);
+16535:  _CharT* __cs = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+16535:             * __ilen));
+16535: 
+16535: 
+16535: 
+16535:  const ios_base::fmtflags __basefield = __flags & ios_base::basefield;
+16535:  const bool __dec = (__basefield != ios_base::oct
+16535:        && __basefield != ios_base::hex);
+16535:  const __unsigned_type __u = ((__v > 0 || !__dec)
+16535:          ? __unsigned_type(__v)
+16535:          : -__unsigned_type(__v));
+16535:   int __len = __int_to_char(__cs + __ilen, __u, __lit, __flags, __dec);
+16535:  __cs += __ilen - __len;
+16535: 
+16535: 
+16535:  if (__lc->_M_use_grouping)
+16535:    {
+16535: 
+16535: 
+16535:      _CharT* __cs2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+16535:           * (__len + 1)
+16535:           * 2));
+16535:      _M_group_int(__lc->_M_grouping, __lc->_M_grouping_size,
+16535:     __lc->_M_thousands_sep, __io, __cs2 + 2, __cs, __len);
+16535:      __cs = __cs2 + 2;
+16535:    }
+16535: 
+16535: 
+16535:  if (__builtin_expect(__dec, true))
+16535:    {
+16535: 
+16535:      if (__v >= 0)
+16535:        {
+16535:   if (bool(__flags & ios_base::showpos)
+16535:       && __gnu_cxx::__numeric_traits<_ValueT>::__is_signed)
+16535:     *--__cs = __lit[__num_base::_S_oplus], ++__len;
+16535:        }
+16535:      else
+16535:        *--__cs = __lit[__num_base::_S_ominus], ++__len;
+16535:    }
+16535:  else if (bool(__flags & ios_base::showbase) && __v)
+16535:    {
+16535:      if (__basefield == ios_base::oct)
+16535:        *--__cs = __lit[__num_base::_S_odigits], ++__len;
+16535:      else
+16535:        {
+16535: 
+16535:   const bool __uppercase = __flags & ios_base::uppercase;
+16535:   *--__cs = __lit[__num_base::_S_ox + __uppercase];
+16535: 
+16535:   *--__cs = __lit[__num_base::_S_odigits];
+16535:   __len += 2;
+16535:        }
+16535:    }
+16535: 
+16535: 
+16535:  const streamsize __w = __io.width();
+16535:  if (__w > static_cast<streamsize>(__len))
+16535:    {
+16535:      _CharT* __cs3 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+16535:           * __w));
+16535:      _M_pad(__fill, __w, __io, __cs3, __cs, __len);
+16535:      __cs = __cs3;
+16535:    }
+16535:  __io.width(0);
+16535: 
+16535: 
+16535: 
+16535:  return std::__write(__s, __cs, __len);
+16535:       }
+16535: 
+16535:   template<typename _CharT, typename _OutIter>
+16535:     void
+16535:     num_put<_CharT, _OutIter>::
+16535:     _M_group_float(const char* __grouping, size_t __grouping_size,
+16535:      _CharT __sep, const _CharT* __p, _CharT* __new,
+16535:      _CharT* __cs, int& __len) const
+16535:     {
+16535: 
+16535: 
+16535: 
+16535:       const int __declen = __p ? __p - __cs : __len;
+16535:       _CharT* __p2 = std::__add_grouping(__new, __sep, __grouping,
+16535:       __grouping_size,
+16535:       __cs, __cs + __declen);
+16535: 
+16535: 
+16535:       int __newlen = __p2 - __new;
+16535:       if (__p)
+16535:  {
+16535:    char_traits<_CharT>::copy(__p2, __p, __len - __declen);
+16535:    __newlen += __len - __declen;
+16535:  }
+16535:       __len = __newlen;
+16535:     }
+16535: # 971 "/usr/include/c++/8/bits/locale_facets.tcc" 3
+16535:   template<typename _CharT, typename _OutIter>
+16535:     template<typename _ValueT>
+16535:       _OutIter
+16535:       num_put<_CharT, _OutIter>::
+16535:       _M_insert_float(_OutIter __s, ios_base& __io, _CharT __fill, char __mod,
+16535:          _ValueT __v) const
+16535:       {
+16535:  typedef __numpunct_cache<_CharT> __cache_type;
+16535:  __use_cache<__cache_type> __uc;
+16535:  const locale& __loc = __io._M_getloc();
+16535:  const __cache_type* __lc = __uc(__loc);
+16535: 
+16535: 
+16535:  const streamsize __prec = __io.precision() < 0 ? 6 : __io.precision();
+16535: 
+16535:  const int __max_digits =
+16535:    __gnu_cxx::__numeric_traits<_ValueT>::__digits10;
+16535: 
+16535: 
+16535:  int __len;
+16535: 
+16535:  char __fbuf[16];
+16535:  __num_base::_S_format_float(__io, __fbuf, __mod);
+16535: 
+16535: 
+16535: 
+16535:  const bool __use_prec =
+16535:    (__io.flags() & ios_base::floatfield) != ios_base::floatfield;
+16535: 
+16535: 
+16535: 
+16535:  int __cs_size = __max_digits * 3;
+16535:  char* __cs = static_cast<char*>(__builtin_alloca(__cs_size));
+16535:  if (__use_prec)
+16535:    __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
+16535:      __fbuf, __prec, __v);
+16535:  else
+16535:    __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
+16535:      __fbuf, __v);
+16535: 
+16535: 
+16535:  if (__len >= __cs_size)
+16535:    {
+16535:      __cs_size = __len + 1;
+16535:      __cs = static_cast<char*>(__builtin_alloca(__cs_size));
+16535:      if (__use_prec)
+16535:        __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
+16535:          __fbuf, __prec, __v);
+16535:      else
+16535:        __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
+16535:          __fbuf, __v);
+16535:    }
+16535: # 1044 "/usr/include/c++/8/bits/locale_facets.tcc" 3
+16535:  const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
+16535: 
+16535:  _CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+16535:             * __len));
+16535:  __ctype.widen(__cs, __cs + __len, __ws);
+16535: 
+16535: 
+16535:  _CharT* __wp = 0;
+16535:  const char* __p = char_traits<char>::find(__cs, __len, '.');
+16535:  if (__p)
+16535:    {
+16535:      __wp = __ws + (__p - __cs);
+16535:      *__wp = __lc->_M_decimal_point;
+16535:    }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  if (__lc->_M_use_grouping
+16535:      && (__wp || __len < 3 || (__cs[1] <= '9' && __cs[2] <= '9'
+16535:           && __cs[1] >= '0' && __cs[2] >= '0')))
+16535:    {
+16535: 
+16535: 
+16535:      _CharT* __ws2 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+16535:           * __len * 2));
+16535: 
+16535:      streamsize __off = 0;
+16535:      if (__cs[0] == '-' || __cs[0] == '+')
+16535:        {
+16535:   __off = 1;
+16535:   __ws2[0] = __ws[0];
+16535:   __len -= 1;
+16535:        }
+16535: 
+16535:      _M_group_float(__lc->_M_grouping, __lc->_M_grouping_size,
+16535:       __lc->_M_thousands_sep, __wp, __ws2 + __off,
+16535:       __ws + __off, __len);
+16535:      __len += __off;
+16535: 
+16535:      __ws = __ws2;
+16535:    }
+16535: 
+16535: 
+16535:  const streamsize __w = __io.width();
+16535:  if (__w > static_cast<streamsize>(__len))
+16535:    {
+16535:      _CharT* __ws3 = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+16535:           * __w));
+16535:      _M_pad(__fill, __w, __io, __ws3, __ws, __len);
+16535:      __ws = __ws3;
+16535:    }
+16535:  __io.width(0);
+16535: 
+16535: 
+16535: 
+16535:  return std::__write(__s, __ws, __len);
+16535:       }
+16535: 
+16535:   template<typename _CharT, typename _OutIter>
+16535:     _OutIter
+16535:     num_put<_CharT, _OutIter>::
+16535:     do_put(iter_type __s, ios_base& __io, char_type __fill, bool __v) const
+16535:     {
+16535:       const ios_base::fmtflags __flags = __io.flags();
+16535:       if ((__flags & ios_base::boolalpha) == 0)
+16535:         {
+16535:           const long __l = __v;
+16535:           __s = _M_insert_int(__s, __io, __fill, __l);
+16535:         }
+16535:       else
+16535:         {
+16535:    typedef __numpunct_cache<_CharT> __cache_type;
+16535:    __use_cache<__cache_type> __uc;
+16535:    const locale& __loc = __io._M_getloc();
+16535:    const __cache_type* __lc = __uc(__loc);
+16535: 
+16535:    const _CharT* __name = __v ? __lc->_M_truename
+16535:                               : __lc->_M_falsename;
+16535:    int __len = __v ? __lc->_M_truename_size
+16535:                    : __lc->_M_falsename_size;
+16535: 
+16535:    const streamsize __w = __io.width();
+16535:    if (__w > static_cast<streamsize>(__len))
+16535:      {
+16535:        const streamsize __plen = __w - __len;
+16535:        _CharT* __ps
+16535:   = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
+16535:        * __plen));
+16535: 
+16535:        char_traits<_CharT>::assign(__ps, __plen, __fill);
+16535:        __io.width(0);
+16535: 
+16535:        if ((__flags & ios_base::adjustfield) == ios_base::left)
+16535:   {
+16535:     __s = std::__write(__s, __name, __len);
+16535:     __s = std::__write(__s, __ps, __plen);
+16535:   }
+16535:        else
+16535:   {
+16535:     __s = std::__write(__s, __ps, __plen);
+16535:     __s = std::__write(__s, __name, __len);
+16535:   }
+16535:        return __s;
+16535:      }
+16535:    __io.width(0);
+16535:    __s = std::__write(__s, __name, __len);
+16535:  }
+16535:       return __s;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _OutIter>
+16535:     _OutIter
+16535:     num_put<_CharT, _OutIter>::
+16535:     do_put(iter_type __s, ios_base& __io, char_type __fill, double __v) const
+16535:     { return _M_insert_float(__s, __io, __fill, char(), __v); }
+16535: # 1169 "/usr/include/c++/8/bits/locale_facets.tcc" 3
+16535:   template<typename _CharT, typename _OutIter>
+16535:     _OutIter
+16535:     num_put<_CharT, _OutIter>::
+16535:     do_put(iter_type __s, ios_base& __io, char_type __fill,
+16535:     long double __v) const
+16535:     { return _M_insert_float(__s, __io, __fill, 'L', __v); }
+16535: 
+16535:   template<typename _CharT, typename _OutIter>
+16535:     _OutIter
+16535:     num_put<_CharT, _OutIter>::
+16535:     do_put(iter_type __s, ios_base& __io, char_type __fill,
+16535:            const void* __v) const
+16535:     {
+16535:       const ios_base::fmtflags __flags = __io.flags();
+16535:       const ios_base::fmtflags __fmt = ~(ios_base::basefield
+16535:       | ios_base::uppercase);
+16535:       __io.flags((__flags & __fmt) | (ios_base::hex | ios_base::showbase));
+16535: 
+16535:       typedef __gnu_cxx::__conditional_type<(sizeof(const void*)
+16535:           <= sizeof(unsigned long)),
+16535:  unsigned long, unsigned long long>::__type _UIntPtrType;
+16535: 
+16535:       __s = _M_insert_int(__s, __io, __fill,
+16535:      reinterpret_cast<_UIntPtrType>(__v));
+16535:       __io.flags(__flags);
+16535:       return __s;
+16535:     }
+16535: 
+16535: 
+16535: # 1206 "/usr/include/c++/8/bits/locale_facets.tcc" 3
+16535:   template<typename _CharT, typename _Traits>
+16535:     void
+16535:     __pad<_CharT, _Traits>::_S_pad(ios_base& __io, _CharT __fill,
+16535:        _CharT* __news, const _CharT* __olds,
+16535:        streamsize __newlen, streamsize __oldlen)
+16535:     {
+16535:       const size_t __plen = static_cast<size_t>(__newlen - __oldlen);
+16535:       const ios_base::fmtflags __adjust = __io.flags() & ios_base::adjustfield;
+16535: 
+16535: 
+16535:       if (__adjust == ios_base::left)
+16535:  {
+16535:    _Traits::copy(__news, __olds, __oldlen);
+16535:    _Traits::assign(__news + __oldlen, __plen, __fill);
+16535:    return;
+16535:  }
+16535: 
+16535:       size_t __mod = 0;
+16535:       if (__adjust == ios_base::internal)
+16535:  {
+16535: 
+16535: 
+16535: 
+16535:           const locale& __loc = __io._M_getloc();
+16535:    const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
+16535: 
+16535:    if (__ctype.widen('-') == __olds[0]
+16535:        || __ctype.widen('+') == __olds[0])
+16535:      {
+16535:        __news[0] = __olds[0];
+16535:        __mod = 1;
+16535:        ++__news;
+16535:      }
+16535:    else if (__ctype.widen('0') == __olds[0]
+16535:      && __oldlen > 1
+16535:      && (__ctype.widen('x') == __olds[1]
+16535:          || __ctype.widen('X') == __olds[1]))
+16535:      {
+16535:        __news[0] = __olds[0];
+16535:        __news[1] = __olds[1];
+16535:        __mod = 2;
+16535:        __news += 2;
+16535:      }
+16535: 
+16535:  }
+16535:       _Traits::assign(__news, __plen, __fill);
+16535:       _Traits::copy(__news + __plen, __olds + __mod, __oldlen - __mod);
+16535:     }
+16535: 
+16535:   template<typename _CharT>
+16535:     _CharT*
+16535:     __add_grouping(_CharT* __s, _CharT __sep,
+16535:      const char* __gbeg, size_t __gsize,
+16535:      const _CharT* __first, const _CharT* __last)
+16535:     {
+16535:       size_t __idx = 0;
+16535:       size_t __ctr = 0;
+16535: 
+16535:       while (__last - __first > __gbeg[__idx]
+16535:       && static_cast<signed char>(__gbeg[__idx]) > 0
+16535:       && __gbeg[__idx] != __gnu_cxx::__numeric_traits<char>::__max)
+16535:  {
+16535:    __last -= __gbeg[__idx];
+16535:    __idx < __gsize - 1 ? ++__idx : ++__ctr;
+16535:  }
+16535: 
+16535:       while (__first != __last)
+16535:  *__s++ = *__first++;
+16535: 
+16535:       while (__ctr--)
+16535:  {
+16535:    *__s++ = __sep;
+16535:    for (char __i = __gbeg[__idx]; __i > 0; --__i)
+16535:      *__s++ = *__first++;
+16535:  }
+16535: 
+16535:       while (__idx--)
+16535:  {
+16535:    *__s++ = __sep;
+16535:    for (char __i = __gbeg[__idx]; __i > 0; --__i)
+16535:      *__s++ = *__first++;
+16535:  }
+16535: 
+16535:       return __s;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   extern template class __cxx11:: numpunct<char>;
+16535:   extern template class __cxx11:: numpunct_byname<char>;
+16535:   extern template class num_get<char>;
+16535:   extern template class num_put<char>;
+16535:   extern template class ctype_byname<char>;
+16535: 
+16535:   extern template
+16535:     const ctype<char>&
+16535:     use_facet<ctype<char> >(const locale&);
+16535: 
+16535:   extern template
+16535:     const numpunct<char>&
+16535:     use_facet<numpunct<char> >(const locale&);
+16535: 
+16535:   extern template
+16535:     const num_put<char>&
+16535:     use_facet<num_put<char> >(const locale&);
+16535: 
+16535:   extern template
+16535:     const num_get<char>&
+16535:     use_facet<num_get<char> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<ctype<char> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<numpunct<char> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<num_put<char> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<num_get<char> >(const locale&);
+16535: 
+16535: 
+16535:   extern template class __cxx11:: numpunct<wchar_t>;
+16535:   extern template class __cxx11:: numpunct_byname<wchar_t>;
+16535:   extern template class num_get<wchar_t>;
+16535:   extern template class num_put<wchar_t>;
+16535:   extern template class ctype_byname<wchar_t>;
+16535: 
+16535:   extern template
+16535:     const ctype<wchar_t>&
+16535:     use_facet<ctype<wchar_t> >(const locale&);
+16535: 
+16535:   extern template
+16535:     const numpunct<wchar_t>&
+16535:     use_facet<numpunct<wchar_t> >(const locale&);
+16535: 
+16535:   extern template
+16535:     const num_put<wchar_t>&
+16535:     use_facet<num_put<wchar_t> >(const locale&);
+16535: 
+16535:   extern template
+16535:     const num_get<wchar_t>&
+16535:     use_facet<num_get<wchar_t> >(const locale&);
+16535: 
+16535:  extern template
+16535:     bool
+16535:     has_facet<ctype<wchar_t> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<numpunct<wchar_t> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<num_put<wchar_t> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<num_get<wchar_t> >(const locale&);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 2656 "/usr/include/c++/8/bits/locale_facets.h" 2 3
+16535: # 38 "/usr/include/c++/8/bits/basic_ios.h" 2 3
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   template<typename _Facet>
+16535:     inline const _Facet&
+16535:     __check_facet(const _Facet* __f)
+16535:     {
+16535:       if (!__f)
+16535:  __throw_bad_cast();
+16535:       return *__f;
+16535:     }
+16535: # 66 "/usr/include/c++/8/bits/basic_ios.h" 3
+16535:   template<typename _CharT, typename _Traits>
+16535:     class basic_ios : public ios_base
+16535:     {
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef typename _Traits::int_type int_type;
+16535:       typedef typename _Traits::pos_type pos_type;
+16535:       typedef typename _Traits::off_type off_type;
+16535:       typedef _Traits traits_type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       typedef ctype<_CharT> __ctype_type;
+16535:       typedef num_put<_CharT, ostreambuf_iterator<_CharT, _Traits> >
+16535:            __num_put_type;
+16535:       typedef num_get<_CharT, istreambuf_iterator<_CharT, _Traits> >
+16535:            __num_get_type;
+16535: 
+16535: 
+16535: 
+16535:     protected:
+16535:       basic_ostream<_CharT, _Traits>* _M_tie;
+16535:       mutable char_type _M_fill;
+16535:       mutable bool _M_fill_init;
+16535:       basic_streambuf<_CharT, _Traits>* _M_streambuf;
+16535: 
+16535: 
+16535:       const __ctype_type* _M_ctype;
+16535: 
+16535:       const __num_put_type* _M_num_put;
+16535: 
+16535:       const __num_get_type* _M_num_get;
+16535: 
+16535:     public:
+16535: # 117 "/usr/include/c++/8/bits/basic_ios.h" 3
+16535:       explicit operator bool() const
+16535:       { return !this->fail(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       bool
+16535:       operator!() const
+16535:       { return this->fail(); }
+16535: # 136 "/usr/include/c++/8/bits/basic_ios.h" 3
+16535:       iostate
+16535:       rdstate() const
+16535:       { return _M_streambuf_state; }
+16535: # 147 "/usr/include/c++/8/bits/basic_ios.h" 3
+16535:       void
+16535:       clear(iostate __state = goodbit);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       setstate(iostate __state)
+16535:       { this->clear(this->rdstate() | __state); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_setstate(iostate __state)
+16535:       {
+16535: 
+16535: 
+16535:  _M_streambuf_state |= __state;
+16535:  if (this->exceptions() & __state)
+16535:    throw;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       bool
+16535:       good() const
+16535:       { return this->rdstate() == 0; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       bool
+16535:       eof() const
+16535:       { return (this->rdstate() & eofbit) != 0; }
+16535: # 200 "/usr/include/c++/8/bits/basic_ios.h" 3
+16535:       bool
+16535:       fail() const
+16535:       { return (this->rdstate() & (badbit | failbit)) != 0; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       bool
+16535:       bad() const
+16535:       { return (this->rdstate() & badbit) != 0; }
+16535: # 221 "/usr/include/c++/8/bits/basic_ios.h" 3
+16535:       iostate
+16535:       exceptions() const
+16535:       { return _M_exception; }
+16535: # 256 "/usr/include/c++/8/bits/basic_ios.h" 3
+16535:       void
+16535:       exceptions(iostate __except)
+16535:       {
+16535:         _M_exception = __except;
+16535:         this->clear(_M_streambuf_state);
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       explicit
+16535:       basic_ios(basic_streambuf<_CharT, _Traits>* __sb)
+16535:       : ios_base(), _M_tie(0), _M_fill(), _M_fill_init(false), _M_streambuf(0),
+16535:  _M_ctype(0), _M_num_put(0), _M_num_get(0)
+16535:       { this->init(__sb); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       virtual
+16535:       ~basic_ios() { }
+16535: # 294 "/usr/include/c++/8/bits/basic_ios.h" 3
+16535:       basic_ostream<_CharT, _Traits>*
+16535:       tie() const
+16535:       { return _M_tie; }
+16535: # 306 "/usr/include/c++/8/bits/basic_ios.h" 3
+16535:       basic_ostream<_CharT, _Traits>*
+16535:       tie(basic_ostream<_CharT, _Traits>* __tiestr)
+16535:       {
+16535:         basic_ostream<_CharT, _Traits>* __old = _M_tie;
+16535:         _M_tie = __tiestr;
+16535:         return __old;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       basic_streambuf<_CharT, _Traits>*
+16535:       rdbuf() const
+16535:       { return _M_streambuf; }
+16535: # 346 "/usr/include/c++/8/bits/basic_ios.h" 3
+16535:       basic_streambuf<_CharT, _Traits>*
+16535:       rdbuf(basic_streambuf<_CharT, _Traits>* __sb);
+16535: # 360 "/usr/include/c++/8/bits/basic_ios.h" 3
+16535:       basic_ios&
+16535:       copyfmt(const basic_ios& __rhs);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       char_type
+16535:       fill() const
+16535:       {
+16535:  if (!_M_fill_init)
+16535:    {
+16535:      _M_fill = this->widen(' ');
+16535:      _M_fill_init = true;
+16535:    }
+16535:  return _M_fill;
+16535:       }
+16535: # 389 "/usr/include/c++/8/bits/basic_ios.h" 3
+16535:       char_type
+16535:       fill(char_type __ch)
+16535:       {
+16535:  char_type __old = this->fill();
+16535:  _M_fill = __ch;
+16535:  return __old;
+16535:       }
+16535: # 409 "/usr/include/c++/8/bits/basic_ios.h" 3
+16535:       locale
+16535:       imbue(const locale& __loc);
+16535: # 429 "/usr/include/c++/8/bits/basic_ios.h" 3
+16535:       char
+16535:       narrow(char_type __c, char __dfault) const
+16535:       { return __check_facet(_M_ctype).narrow(__c, __dfault); }
+16535: # 448 "/usr/include/c++/8/bits/basic_ios.h" 3
+16535:       char_type
+16535:       widen(char __c) const
+16535:       { return __check_facet(_M_ctype).widen(__c); }
+16535: 
+16535:     protected:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       basic_ios()
+16535:       : ios_base(), _M_tie(0), _M_fill(char_type()), _M_fill_init(false),
+16535:  _M_streambuf(0), _M_ctype(0), _M_num_put(0), _M_num_get(0)
+16535:       { }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       init(basic_streambuf<_CharT, _Traits>* __sb);
+16535: 
+16535: 
+16535:       basic_ios(const basic_ios&) = delete;
+16535:       basic_ios& operator=(const basic_ios&) = delete;
+16535: 
+16535:       void
+16535:       move(basic_ios& __rhs)
+16535:       {
+16535:  ios_base::_M_move(__rhs);
+16535:  _M_cache_locale(_M_ios_locale);
+16535:  this->tie(__rhs.tie(nullptr));
+16535:  _M_fill = __rhs._M_fill;
+16535:  _M_fill_init = __rhs._M_fill_init;
+16535:  _M_streambuf = nullptr;
+16535:       }
+16535: 
+16535:       void
+16535:       move(basic_ios&& __rhs)
+16535:       { this->move(__rhs); }
+16535: 
+16535:       void
+16535:       swap(basic_ios& __rhs) noexcept
+16535:       {
+16535:  ios_base::_M_swap(__rhs);
+16535:  _M_cache_locale(_M_ios_locale);
+16535:  __rhs._M_cache_locale(__rhs._M_ios_locale);
+16535:  std::swap(_M_tie, __rhs._M_tie);
+16535:  std::swap(_M_fill, __rhs._M_fill);
+16535:  std::swap(_M_fill_init, __rhs._M_fill_init);
+16535:       }
+16535: 
+16535:       void
+16535:       set_rdbuf(basic_streambuf<_CharT, _Traits>* __sb)
+16535:       { _M_streambuf = __sb; }
+16535: 
+16535: 
+16535:       void
+16535:       _M_cache_locale(const locale& __loc);
+16535:     };
+16535: 
+16535: 
+16535: }
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/basic_ios.tcc" 1 3
+16535: # 33 "/usr/include/c++/8/bits/basic_ios.tcc" 3
+16535:        
+16535: # 34 "/usr/include/c++/8/bits/basic_ios.tcc" 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     void
+16535:     basic_ios<_CharT, _Traits>::clear(iostate __state)
+16535:     {
+16535:       if (this->rdbuf())
+16535:  _M_streambuf_state = __state;
+16535:       else
+16535:    _M_streambuf_state = __state | badbit;
+16535:       if (this->exceptions() & this->rdstate())
+16535:  __throw_ios_failure(("basic_ios::clear"));
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_streambuf<_CharT, _Traits>*
+16535:     basic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<_CharT, _Traits>* __sb)
+16535:     {
+16535:       basic_streambuf<_CharT, _Traits>* __old = _M_streambuf;
+16535:       _M_streambuf = __sb;
+16535:       this->clear();
+16535:       return __old;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_ios<_CharT, _Traits>&
+16535:     basic_ios<_CharT, _Traits>::copyfmt(const basic_ios& __rhs)
+16535:     {
+16535: 
+16535: 
+16535:       if (this != &__rhs)
+16535:  {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:    _Words* __words = (__rhs._M_word_size <= _S_local_word_size) ?
+16535:                       _M_local_word : new _Words[__rhs._M_word_size];
+16535: 
+16535: 
+16535:    _Callback_list* __cb = __rhs._M_callbacks;
+16535:    if (__cb)
+16535:      __cb->_M_add_reference();
+16535:    _M_call_callbacks(erase_event);
+16535:    if (_M_word != _M_local_word)
+16535:      {
+16535:        delete [] _M_word;
+16535:        _M_word = 0;
+16535:      }
+16535:    _M_dispose_callbacks();
+16535: 
+16535: 
+16535:    _M_callbacks = __cb;
+16535:    for (int __i = 0; __i < __rhs._M_word_size; ++__i)
+16535:      __words[__i] = __rhs._M_word[__i];
+16535:    _M_word = __words;
+16535:    _M_word_size = __rhs._M_word_size;
+16535: 
+16535:    this->flags(__rhs.flags());
+16535:    this->width(__rhs.width());
+16535:    this->precision(__rhs.precision());
+16535:    this->tie(__rhs.tie());
+16535:    this->fill(__rhs.fill());
+16535:    _M_ios_locale = __rhs.getloc();
+16535:    _M_cache_locale(_M_ios_locale);
+16535: 
+16535:    _M_call_callbacks(copyfmt_event);
+16535: 
+16535: 
+16535:    this->exceptions(__rhs.exceptions());
+16535:  }
+16535:       return *this;
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     locale
+16535:     basic_ios<_CharT, _Traits>::imbue(const locale& __loc)
+16535:     {
+16535:       locale __old(this->getloc());
+16535:       ios_base::imbue(__loc);
+16535:       _M_cache_locale(__loc);
+16535:       if (this->rdbuf() != 0)
+16535:  this->rdbuf()->pubimbue(__loc);
+16535:       return __old;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     void
+16535:     basic_ios<_CharT, _Traits>::init(basic_streambuf<_CharT, _Traits>* __sb)
+16535:     {
+16535: 
+16535:       ios_base::_M_init();
+16535: 
+16535: 
+16535:       _M_cache_locale(_M_ios_locale);
+16535: # 146 "/usr/include/c++/8/bits/basic_ios.tcc" 3
+16535:       _M_fill = _CharT();
+16535:       _M_fill_init = false;
+16535: 
+16535:       _M_tie = 0;
+16535:       _M_exception = goodbit;
+16535:       _M_streambuf = __sb;
+16535:       _M_streambuf_state = __sb ? goodbit : badbit;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     void
+16535:     basic_ios<_CharT, _Traits>::_M_cache_locale(const locale& __loc)
+16535:     {
+16535:       if (__builtin_expect(has_facet<__ctype_type>(__loc), true))
+16535:  _M_ctype = std::__addressof(use_facet<__ctype_type>(__loc));
+16535:       else
+16535:  _M_ctype = 0;
+16535: 
+16535:       if (__builtin_expect(has_facet<__num_put_type>(__loc), true))
+16535:  _M_num_put = std::__addressof(use_facet<__num_put_type>(__loc));
+16535:       else
+16535:  _M_num_put = 0;
+16535: 
+16535:       if (__builtin_expect(has_facet<__num_get_type>(__loc), true))
+16535:  _M_num_get = std::__addressof(use_facet<__num_get_type>(__loc));
+16535:       else
+16535:  _M_num_get = 0;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   extern template class basic_ios<char>;
+16535: 
+16535: 
+16535:   extern template class basic_ios<wchar_t>;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 517 "/usr/include/c++/8/bits/basic_ios.h" 2 3
+16535: # 45 "/usr/include/c++/8/ios" 2 3
+16535: # 39 "/usr/include/c++/8/istream" 2 3
+16535: # 1 "/usr/include/c++/8/ostream" 1 3
+16535: # 36 "/usr/include/c++/8/ostream" 3
+16535:        
+16535: # 37 "/usr/include/c++/8/ostream" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 57 "/usr/include/c++/8/ostream" 3
+16535:   template<typename _CharT, typename _Traits>
+16535:     class basic_ostream : virtual public basic_ios<_CharT, _Traits>
+16535:     {
+16535:     public:
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef typename _Traits::int_type int_type;
+16535:       typedef typename _Traits::pos_type pos_type;
+16535:       typedef typename _Traits::off_type off_type;
+16535:       typedef _Traits traits_type;
+16535: 
+16535: 
+16535:       typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
+16535:       typedef basic_ios<_CharT, _Traits> __ios_type;
+16535:       typedef basic_ostream<_CharT, _Traits> __ostream_type;
+16535:       typedef num_put<_CharT, ostreambuf_iterator<_CharT, _Traits> >
+16535:              __num_put_type;
+16535:       typedef ctype<_CharT> __ctype_type;
+16535: # 83 "/usr/include/c++/8/ostream" 3
+16535:       explicit
+16535:       basic_ostream(__streambuf_type* __sb)
+16535:       { this->init(__sb); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       virtual
+16535:       ~basic_ostream() { }
+16535: 
+16535: 
+16535:       class sentry;
+16535:       friend class sentry;
+16535: # 107 "/usr/include/c++/8/ostream" 3
+16535:       __ostream_type&
+16535:       operator<<(__ostream_type& (*__pf)(__ostream_type&))
+16535:       {
+16535: 
+16535: 
+16535: 
+16535:  return __pf(*this);
+16535:       }
+16535: 
+16535:       __ostream_type&
+16535:       operator<<(__ios_type& (*__pf)(__ios_type&))
+16535:       {
+16535: 
+16535: 
+16535: 
+16535:  __pf(*this);
+16535:  return *this;
+16535:       }
+16535: 
+16535:       __ostream_type&
+16535:       operator<<(ios_base& (*__pf) (ios_base&))
+16535:       {
+16535: 
+16535: 
+16535: 
+16535:  __pf(*this);
+16535:  return *this;
+16535:       }
+16535: # 165 "/usr/include/c++/8/ostream" 3
+16535:       __ostream_type&
+16535:       operator<<(long __n)
+16535:       { return _M_insert(__n); }
+16535: 
+16535:       __ostream_type&
+16535:       operator<<(unsigned long __n)
+16535:       { return _M_insert(__n); }
+16535: 
+16535:       __ostream_type&
+16535:       operator<<(bool __n)
+16535:       { return _M_insert(__n); }
+16535: 
+16535:       __ostream_type&
+16535:       operator<<(short __n);
+16535: 
+16535:       __ostream_type&
+16535:       operator<<(unsigned short __n)
+16535:       {
+16535: 
+16535: 
+16535:  return _M_insert(static_cast<unsigned long>(__n));
+16535:       }
+16535: 
+16535:       __ostream_type&
+16535:       operator<<(int __n);
+16535: 
+16535:       __ostream_type&
+16535:       operator<<(unsigned int __n)
+16535:       {
+16535: 
+16535: 
+16535:  return _M_insert(static_cast<unsigned long>(__n));
+16535:       }
+16535: 
+16535: 
+16535:       __ostream_type&
+16535:       operator<<(long long __n)
+16535:       { return _M_insert(__n); }
+16535: 
+16535:       __ostream_type&
+16535:       operator<<(unsigned long long __n)
+16535:       { return _M_insert(__n); }
+16535: # 219 "/usr/include/c++/8/ostream" 3
+16535:       __ostream_type&
+16535:       operator<<(double __f)
+16535:       { return _M_insert(__f); }
+16535: 
+16535:       __ostream_type&
+16535:       operator<<(float __f)
+16535:       {
+16535: 
+16535: 
+16535:  return _M_insert(static_cast<double>(__f));
+16535:       }
+16535: 
+16535:       __ostream_type&
+16535:       operator<<(long double __f)
+16535:       { return _M_insert(__f); }
+16535: # 244 "/usr/include/c++/8/ostream" 3
+16535:       __ostream_type&
+16535:       operator<<(const void* __p)
+16535:       { return _M_insert(__p); }
+16535: # 269 "/usr/include/c++/8/ostream" 3
+16535:       __ostream_type&
+16535:       operator<<(__streambuf_type* __sb);
+16535: # 302 "/usr/include/c++/8/ostream" 3
+16535:       __ostream_type&
+16535:       put(char_type __c);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_write(const char_type* __s, streamsize __n)
+16535:       {
+16535:  const streamsize __put = this->rdbuf()->sputn(__s, __n);
+16535:  if (__put != __n)
+16535:    this->setstate(ios_base::badbit);
+16535:       }
+16535: # 334 "/usr/include/c++/8/ostream" 3
+16535:       __ostream_type&
+16535:       write(const char_type* __s, streamsize __n);
+16535: # 347 "/usr/include/c++/8/ostream" 3
+16535:       __ostream_type&
+16535:       flush();
+16535: # 357 "/usr/include/c++/8/ostream" 3
+16535:       pos_type
+16535:       tellp();
+16535: # 368 "/usr/include/c++/8/ostream" 3
+16535:       __ostream_type&
+16535:       seekp(pos_type);
+16535: # 380 "/usr/include/c++/8/ostream" 3
+16535:        __ostream_type&
+16535:       seekp(off_type, ios_base::seekdir);
+16535: 
+16535:     protected:
+16535:       basic_ostream()
+16535:       { this->init(0); }
+16535: 
+16535: 
+16535: 
+16535:       basic_ostream(basic_iostream<_CharT, _Traits>&) { }
+16535: 
+16535:       basic_ostream(const basic_ostream&) = delete;
+16535: 
+16535:       basic_ostream(basic_ostream&& __rhs)
+16535:       : __ios_type()
+16535:       { __ios_type::move(__rhs); }
+16535: 
+16535: 
+16535: 
+16535:       basic_ostream& operator=(const basic_ostream&) = delete;
+16535: 
+16535:       basic_ostream&
+16535:       operator=(basic_ostream&& __rhs)
+16535:       {
+16535:  swap(__rhs);
+16535:  return *this;
+16535:       }
+16535: 
+16535:       void
+16535:       swap(basic_ostream& __rhs)
+16535:       { __ios_type::swap(__rhs); }
+16535: 
+16535: 
+16535:       template<typename _ValueT>
+16535:  __ostream_type&
+16535:  _M_insert(_ValueT __v);
+16535:     };
+16535: # 425 "/usr/include/c++/8/ostream" 3
+16535:   template <typename _CharT, typename _Traits>
+16535:     class basic_ostream<_CharT, _Traits>::sentry
+16535:     {
+16535: 
+16535:       bool _M_ok;
+16535:       basic_ostream<_CharT, _Traits>& _M_os;
+16535: 
+16535:     public:
+16535: # 444 "/usr/include/c++/8/ostream" 3
+16535:       explicit
+16535:       sentry(basic_ostream<_CharT, _Traits>& __os);
+16535: # 454 "/usr/include/c++/8/ostream" 3
+16535:       ~sentry()
+16535:       {
+16535: 
+16535:  if (bool(_M_os.flags() & ios_base::unitbuf) && !uncaught_exception())
+16535:    {
+16535: 
+16535:      if (_M_os.rdbuf() && _M_os.rdbuf()->pubsync() == -1)
+16535:        _M_os.setstate(ios_base::badbit);
+16535:    }
+16535:       }
+16535: # 473 "/usr/include/c++/8/ostream" 3
+16535:       explicit
+16535: 
+16535:       operator bool() const
+16535:       { return _M_ok; }
+16535:     };
+16535: # 495 "/usr/include/c++/8/ostream" 3
+16535:   template<typename _CharT, typename _Traits>
+16535:     inline basic_ostream<_CharT, _Traits>&
+16535:     operator<<(basic_ostream<_CharT, _Traits>& __out, _CharT __c)
+16535:     { return __ostream_insert(__out, &__c, 1); }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     inline basic_ostream<_CharT, _Traits>&
+16535:     operator<<(basic_ostream<_CharT, _Traits>& __out, char __c)
+16535:     { return (__out << __out.widen(__c)); }
+16535: 
+16535: 
+16535:   template <class _Traits>
+16535:     inline basic_ostream<char, _Traits>&
+16535:     operator<<(basic_ostream<char, _Traits>& __out, char __c)
+16535:     { return __ostream_insert(__out, &__c, 1); }
+16535: 
+16535: 
+16535:   template<class _Traits>
+16535:     inline basic_ostream<char, _Traits>&
+16535:     operator<<(basic_ostream<char, _Traits>& __out, signed char __c)
+16535:     { return (__out << static_cast<char>(__c)); }
+16535: 
+16535:   template<class _Traits>
+16535:     inline basic_ostream<char, _Traits>&
+16535:     operator<<(basic_ostream<char, _Traits>& __out, unsigned char __c)
+16535:     { return (__out << static_cast<char>(__c)); }
+16535: # 537 "/usr/include/c++/8/ostream" 3
+16535:   template<typename _CharT, typename _Traits>
+16535:     inline basic_ostream<_CharT, _Traits>&
+16535:     operator<<(basic_ostream<_CharT, _Traits>& __out, const _CharT* __s)
+16535:     {
+16535:       if (!__s)
+16535:  __out.setstate(ios_base::badbit);
+16535:       else
+16535:  __ostream_insert(__out, __s,
+16535:     static_cast<streamsize>(_Traits::length(__s)));
+16535:       return __out;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_ostream<_CharT, _Traits> &
+16535:     operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s);
+16535: 
+16535: 
+16535:   template<class _Traits>
+16535:     inline basic_ostream<char, _Traits>&
+16535:     operator<<(basic_ostream<char, _Traits>& __out, const char* __s)
+16535:     {
+16535:       if (!__s)
+16535:  __out.setstate(ios_base::badbit);
+16535:       else
+16535:  __ostream_insert(__out, __s,
+16535:     static_cast<streamsize>(_Traits::length(__s)));
+16535:       return __out;
+16535:     }
+16535: 
+16535: 
+16535:   template<class _Traits>
+16535:     inline basic_ostream<char, _Traits>&
+16535:     operator<<(basic_ostream<char, _Traits>& __out, const signed char* __s)
+16535:     { return (__out << reinterpret_cast<const char*>(__s)); }
+16535: 
+16535:   template<class _Traits>
+16535:     inline basic_ostream<char, _Traits> &
+16535:     operator<<(basic_ostream<char, _Traits>& __out, const unsigned char* __s)
+16535:     { return (__out << reinterpret_cast<const char*>(__s)); }
+16535: # 588 "/usr/include/c++/8/ostream" 3
+16535:   template<typename _CharT, typename _Traits>
+16535:     inline basic_ostream<_CharT, _Traits>&
+16535:     endl(basic_ostream<_CharT, _Traits>& __os)
+16535:     { return flush(__os.put(__os.widen('\n'))); }
+16535: # 600 "/usr/include/c++/8/ostream" 3
+16535:   template<typename _CharT, typename _Traits>
+16535:     inline basic_ostream<_CharT, _Traits>&
+16535:     ends(basic_ostream<_CharT, _Traits>& __os)
+16535:     { return __os.put(_CharT()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     inline basic_ostream<_CharT, _Traits>&
+16535:     flush(basic_ostream<_CharT, _Traits>& __os)
+16535:     { return __os.flush(); }
+16535: 
+16535: 
+16535:   template<typename _Ch, typename _Up>
+16535:     basic_ostream<_Ch, _Up>&
+16535:     __is_convertible_to_basic_ostream_test(basic_ostream<_Ch, _Up>*);
+16535: 
+16535:   template<typename _Tp, typename = void>
+16535:     struct __is_convertible_to_basic_ostream_impl
+16535:     {
+16535:       using __ostream_type = void;
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     using __do_is_convertible_to_basic_ostream_impl =
+16535:     decltype(__is_convertible_to_basic_ostream_test
+16535:       (declval<typename remove_reference<_Tp>::type*>()));
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_convertible_to_basic_ostream_impl
+16535:     <_Tp,
+16535:      __void_t<__do_is_convertible_to_basic_ostream_impl<_Tp>>>
+16535:     {
+16535:       using __ostream_type =
+16535:  __do_is_convertible_to_basic_ostream_impl<_Tp>;
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_convertible_to_basic_ostream
+16535:     : __is_convertible_to_basic_ostream_impl<_Tp>
+16535:     {
+16535:     public:
+16535:       using type = __not_<is_void<
+16535:         typename __is_convertible_to_basic_ostream_impl<_Tp>::__ostream_type>>;
+16535:       constexpr static bool value = type::value;
+16535:     };
+16535: 
+16535:   template<typename _Ostream, typename _Tp, typename = void>
+16535:     struct __is_insertable : false_type {};
+16535: 
+16535:   template<typename _Ostream, typename _Tp>
+16535:     struct __is_insertable<_Ostream, _Tp,
+16535:       __void_t<decltype(declval<_Ostream&>()
+16535:           << declval<const _Tp&>())>>
+16535:         : true_type {};
+16535: 
+16535:   template<typename _Ostream>
+16535:     using __rvalue_ostream_type =
+16535:       typename __is_convertible_to_basic_ostream<
+16535:  _Ostream>::__ostream_type;
+16535: # 674 "/usr/include/c++/8/ostream" 3
+16535:   template<typename _Ostream, typename _Tp>
+16535:     inline
+16535:     typename enable_if<__and_<__not_<is_lvalue_reference<_Ostream>>,
+16535:          __is_convertible_to_basic_ostream<_Ostream>,
+16535:          __is_insertable<
+16535:     __rvalue_ostream_type<_Ostream>,
+16535:     const _Tp&>>::value,
+16535:          __rvalue_ostream_type<_Ostream>>::type
+16535:     operator<<(_Ostream&& __os, const _Tp& __x)
+16535:     {
+16535:       __rvalue_ostream_type<_Ostream> __ret_os = __os;
+16535:       __ret_os << __x;
+16535:       return __ret_os;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/ostream.tcc" 1 3
+16535: # 37 "/usr/include/c++/8/bits/ostream.tcc" 3
+16535:        
+16535: # 38 "/usr/include/c++/8/bits/ostream.tcc" 3
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_ostream<_CharT, _Traits>::sentry::
+16535:     sentry(basic_ostream<_CharT, _Traits>& __os)
+16535:     : _M_ok(false), _M_os(__os)
+16535:     {
+16535: 
+16535:       if (__os.tie() && __os.good())
+16535:  __os.tie()->flush();
+16535: 
+16535:       if (__os.good())
+16535:  _M_ok = true;
+16535:       else
+16535:  __os.setstate(ios_base::failbit);
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     template<typename _ValueT>
+16535:       basic_ostream<_CharT, _Traits>&
+16535:       basic_ostream<_CharT, _Traits>::
+16535:       _M_insert(_ValueT __v)
+16535:       {
+16535:  sentry __cerb(*this);
+16535:  if (__cerb)
+16535:    {
+16535:      ios_base::iostate __err = ios_base::goodbit;
+16535:      try
+16535:        {
+16535:   const __num_put_type& __np = __check_facet(this->_M_num_put);
+16535:   if (__np.put(*this, *this, this->fill(), __v).failed())
+16535:     __err |= ios_base::badbit;
+16535:        }
+16535:      catch(__cxxabiv1::__forced_unwind&)
+16535:        {
+16535:   this->_M_setstate(ios_base::badbit);
+16535:   throw;
+16535:        }
+16535:      catch(...)
+16535:        { this->_M_setstate(ios_base::badbit); }
+16535:      if (__err)
+16535:        this->setstate(__err);
+16535:    }
+16535:  return *this;
+16535:       }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_ostream<_CharT, _Traits>&
+16535:     basic_ostream<_CharT, _Traits>::
+16535:     operator<<(short __n)
+16535:     {
+16535: 
+16535: 
+16535:       const ios_base::fmtflags __fmt = this->flags() & ios_base::basefield;
+16535:       if (__fmt == ios_base::oct || __fmt == ios_base::hex)
+16535:  return _M_insert(static_cast<long>(static_cast<unsigned short>(__n)));
+16535:       else
+16535:  return _M_insert(static_cast<long>(__n));
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_ostream<_CharT, _Traits>&
+16535:     basic_ostream<_CharT, _Traits>::
+16535:     operator<<(int __n)
+16535:     {
+16535: 
+16535: 
+16535:       const ios_base::fmtflags __fmt = this->flags() & ios_base::basefield;
+16535:       if (__fmt == ios_base::oct || __fmt == ios_base::hex)
+16535:  return _M_insert(static_cast<long>(static_cast<unsigned int>(__n)));
+16535:       else
+16535:  return _M_insert(static_cast<long>(__n));
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_ostream<_CharT, _Traits>&
+16535:     basic_ostream<_CharT, _Traits>::
+16535:     operator<<(__streambuf_type* __sbin)
+16535:     {
+16535:       ios_base::iostate __err = ios_base::goodbit;
+16535:       sentry __cerb(*this);
+16535:       if (__cerb && __sbin)
+16535:  {
+16535:    try
+16535:      {
+16535:        if (!__copy_streambufs(__sbin, this->rdbuf()))
+16535:   __err |= ios_base::failbit;
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        this->_M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { this->_M_setstate(ios_base::failbit); }
+16535:  }
+16535:       else if (!__sbin)
+16535:  __err |= ios_base::badbit;
+16535:       if (__err)
+16535:  this->setstate(__err);
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_ostream<_CharT, _Traits>&
+16535:     basic_ostream<_CharT, _Traits>::
+16535:     put(char_type __c)
+16535:     {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       sentry __cerb(*this);
+16535:       if (__cerb)
+16535:  {
+16535:    ios_base::iostate __err = ios_base::goodbit;
+16535:    try
+16535:      {
+16535:        const int_type __put = this->rdbuf()->sputc(__c);
+16535:        if (traits_type::eq_int_type(__put, traits_type::eof()))
+16535:   __err |= ios_base::badbit;
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        this->_M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { this->_M_setstate(ios_base::badbit); }
+16535:    if (__err)
+16535:      this->setstate(__err);
+16535:  }
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_ostream<_CharT, _Traits>&
+16535:     basic_ostream<_CharT, _Traits>::
+16535:     write(const _CharT* __s, streamsize __n)
+16535:     {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       sentry __cerb(*this);
+16535:       if (__cerb)
+16535:  {
+16535:    try
+16535:      { _M_write(__s, __n); }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        this->_M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { this->_M_setstate(ios_base::badbit); }
+16535:  }
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_ostream<_CharT, _Traits>&
+16535:     basic_ostream<_CharT, _Traits>::
+16535:     flush()
+16535:     {
+16535: 
+16535: 
+16535: 
+16535:       ios_base::iostate __err = ios_base::goodbit;
+16535:       try
+16535:  {
+16535:    if (this->rdbuf() && this->rdbuf()->pubsync() == -1)
+16535:      __err |= ios_base::badbit;
+16535:  }
+16535:       catch(__cxxabiv1::__forced_unwind&)
+16535:  {
+16535:    this->_M_setstate(ios_base::badbit);
+16535:    throw;
+16535:  }
+16535:       catch(...)
+16535:  { this->_M_setstate(ios_base::badbit); }
+16535:       if (__err)
+16535:  this->setstate(__err);
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     typename basic_ostream<_CharT, _Traits>::pos_type
+16535:     basic_ostream<_CharT, _Traits>::
+16535:     tellp()
+16535:     {
+16535:       pos_type __ret = pos_type(-1);
+16535:       try
+16535:  {
+16535:    if (!this->fail())
+16535:      __ret = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out);
+16535:  }
+16535:       catch(__cxxabiv1::__forced_unwind&)
+16535:  {
+16535:    this->_M_setstate(ios_base::badbit);
+16535:    throw;
+16535:  }
+16535:       catch(...)
+16535:  { this->_M_setstate(ios_base::badbit); }
+16535:       return __ret;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_ostream<_CharT, _Traits>&
+16535:     basic_ostream<_CharT, _Traits>::
+16535:     seekp(pos_type __pos)
+16535:     {
+16535:       ios_base::iostate __err = ios_base::goodbit;
+16535:       try
+16535:  {
+16535:    if (!this->fail())
+16535:      {
+16535: 
+16535: 
+16535:        const pos_type __p = this->rdbuf()->pubseekpos(__pos,
+16535:             ios_base::out);
+16535: 
+16535: 
+16535:        if (__p == pos_type(off_type(-1)))
+16535:   __err |= ios_base::failbit;
+16535:      }
+16535:  }
+16535:       catch(__cxxabiv1::__forced_unwind&)
+16535:  {
+16535:    this->_M_setstate(ios_base::badbit);
+16535:    throw;
+16535:  }
+16535:       catch(...)
+16535:  { this->_M_setstate(ios_base::badbit); }
+16535:       if (__err)
+16535:  this->setstate(__err);
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_ostream<_CharT, _Traits>&
+16535:     basic_ostream<_CharT, _Traits>::
+16535:     seekp(off_type __off, ios_base::seekdir __dir)
+16535:     {
+16535:       ios_base::iostate __err = ios_base::goodbit;
+16535:       try
+16535:  {
+16535:    if (!this->fail())
+16535:      {
+16535: 
+16535: 
+16535:        const pos_type __p = this->rdbuf()->pubseekoff(__off, __dir,
+16535:             ios_base::out);
+16535: 
+16535: 
+16535:        if (__p == pos_type(off_type(-1)))
+16535:   __err |= ios_base::failbit;
+16535:      }
+16535:  }
+16535:       catch(__cxxabiv1::__forced_unwind&)
+16535:  {
+16535:    this->_M_setstate(ios_base::badbit);
+16535:    throw;
+16535:  }
+16535:       catch(...)
+16535:  { this->_M_setstate(ios_base::badbit); }
+16535:       if (__err)
+16535:  this->setstate(__err);
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_ostream<_CharT, _Traits>&
+16535:     operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s)
+16535:     {
+16535:       if (!__s)
+16535:  __out.setstate(ios_base::badbit);
+16535:       else
+16535:  {
+16535: 
+16535: 
+16535:    const size_t __clen = char_traits<char>::length(__s);
+16535:    try
+16535:      {
+16535:        struct __ptr_guard
+16535:        {
+16535:   _CharT *__p;
+16535:   __ptr_guard (_CharT *__ip): __p(__ip) { }
+16535:   ~__ptr_guard() { delete[] __p; }
+16535:   _CharT* __get() { return __p; }
+16535:        } __pg (new _CharT[__clen]);
+16535: 
+16535:        _CharT *__ws = __pg.__get();
+16535:        for (size_t __i = 0; __i < __clen; ++__i)
+16535:   __ws[__i] = __out.widen(__s[__i]);
+16535:        __ostream_insert(__out, __ws, __clen);
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        __out._M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { __out._M_setstate(ios_base::badbit); }
+16535:  }
+16535:       return __out;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   extern template class basic_ostream<char>;
+16535:   extern template ostream& endl(ostream&);
+16535:   extern template ostream& ends(ostream&);
+16535:   extern template ostream& flush(ostream&);
+16535:   extern template ostream& operator<<(ostream&, char);
+16535:   extern template ostream& operator<<(ostream&, unsigned char);
+16535:   extern template ostream& operator<<(ostream&, signed char);
+16535:   extern template ostream& operator<<(ostream&, const char*);
+16535:   extern template ostream& operator<<(ostream&, const unsigned char*);
+16535:   extern template ostream& operator<<(ostream&, const signed char*);
+16535: 
+16535:   extern template ostream& ostream::_M_insert(long);
+16535:   extern template ostream& ostream::_M_insert(unsigned long);
+16535:   extern template ostream& ostream::_M_insert(bool);
+16535: 
+16535:   extern template ostream& ostream::_M_insert(long long);
+16535:   extern template ostream& ostream::_M_insert(unsigned long long);
+16535: 
+16535:   extern template ostream& ostream::_M_insert(double);
+16535:   extern template ostream& ostream::_M_insert(long double);
+16535:   extern template ostream& ostream::_M_insert(const void*);
+16535: 
+16535: 
+16535:   extern template class basic_ostream<wchar_t>;
+16535:   extern template wostream& endl(wostream&);
+16535:   extern template wostream& ends(wostream&);
+16535:   extern template wostream& flush(wostream&);
+16535:   extern template wostream& operator<<(wostream&, wchar_t);
+16535:   extern template wostream& operator<<(wostream&, char);
+16535:   extern template wostream& operator<<(wostream&, const wchar_t*);
+16535:   extern template wostream& operator<<(wostream&, const char*);
+16535: 
+16535:   extern template wostream& wostream::_M_insert(long);
+16535:   extern template wostream& wostream::_M_insert(unsigned long);
+16535:   extern template wostream& wostream::_M_insert(bool);
+16535: 
+16535:   extern template wostream& wostream::_M_insert(long long);
+16535:   extern template wostream& wostream::_M_insert(unsigned long long);
+16535: 
+16535:   extern template wostream& wostream::_M_insert(double);
+16535:   extern template wostream& wostream::_M_insert(long double);
+16535:   extern template wostream& wostream::_M_insert(const void*);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 694 "/usr/include/c++/8/ostream" 2 3
+16535: # 40 "/usr/include/c++/8/istream" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 57 "/usr/include/c++/8/istream" 3
+16535:   template<typename _CharT, typename _Traits>
+16535:     class basic_istream : virtual public basic_ios<_CharT, _Traits>
+16535:     {
+16535:     public:
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef typename _Traits::int_type int_type;
+16535:       typedef typename _Traits::pos_type pos_type;
+16535:       typedef typename _Traits::off_type off_type;
+16535:       typedef _Traits traits_type;
+16535: 
+16535: 
+16535:       typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
+16535:       typedef basic_ios<_CharT, _Traits> __ios_type;
+16535:       typedef basic_istream<_CharT, _Traits> __istream_type;
+16535:       typedef num_get<_CharT, istreambuf_iterator<_CharT, _Traits> >
+16535:         __num_get_type;
+16535:       typedef ctype<_CharT> __ctype_type;
+16535: 
+16535:     protected:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       streamsize _M_gcount;
+16535: 
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       explicit
+16535:       basic_istream(__streambuf_type* __sb)
+16535:       : _M_gcount(streamsize(0))
+16535:       { this->init(__sb); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       virtual
+16535:       ~basic_istream()
+16535:       { _M_gcount = streamsize(0); }
+16535: 
+16535: 
+16535:       class sentry;
+16535:       friend class sentry;
+16535: # 119 "/usr/include/c++/8/istream" 3
+16535:       __istream_type&
+16535:       operator>>(__istream_type& (*__pf)(__istream_type&))
+16535:       { return __pf(*this); }
+16535: 
+16535:       __istream_type&
+16535:       operator>>(__ios_type& (*__pf)(__ios_type&))
+16535:       {
+16535:  __pf(*this);
+16535:  return *this;
+16535:       }
+16535: 
+16535:       __istream_type&
+16535:       operator>>(ios_base& (*__pf)(ios_base&))
+16535:       {
+16535:  __pf(*this);
+16535:  return *this;
+16535:       }
+16535: # 167 "/usr/include/c++/8/istream" 3
+16535:       __istream_type&
+16535:       operator>>(bool& __n)
+16535:       { return _M_extract(__n); }
+16535: 
+16535:       __istream_type&
+16535:       operator>>(short& __n);
+16535: 
+16535:       __istream_type&
+16535:       operator>>(unsigned short& __n)
+16535:       { return _M_extract(__n); }
+16535: 
+16535:       __istream_type&
+16535:       operator>>(int& __n);
+16535: 
+16535:       __istream_type&
+16535:       operator>>(unsigned int& __n)
+16535:       { return _M_extract(__n); }
+16535: 
+16535:       __istream_type&
+16535:       operator>>(long& __n)
+16535:       { return _M_extract(__n); }
+16535: 
+16535:       __istream_type&
+16535:       operator>>(unsigned long& __n)
+16535:       { return _M_extract(__n); }
+16535: 
+16535: 
+16535:       __istream_type&
+16535:       operator>>(long long& __n)
+16535:       { return _M_extract(__n); }
+16535: 
+16535:       __istream_type&
+16535:       operator>>(unsigned long long& __n)
+16535:       { return _M_extract(__n); }
+16535: # 213 "/usr/include/c++/8/istream" 3
+16535:       __istream_type&
+16535:       operator>>(float& __f)
+16535:       { return _M_extract(__f); }
+16535: 
+16535:       __istream_type&
+16535:       operator>>(double& __f)
+16535:       { return _M_extract(__f); }
+16535: 
+16535:       __istream_type&
+16535:       operator>>(long double& __f)
+16535:       { return _M_extract(__f); }
+16535: # 234 "/usr/include/c++/8/istream" 3
+16535:       __istream_type&
+16535:       operator>>(void*& __p)
+16535:       { return _M_extract(__p); }
+16535: # 258 "/usr/include/c++/8/istream" 3
+16535:       __istream_type&
+16535:       operator>>(__streambuf_type* __sb);
+16535: # 268 "/usr/include/c++/8/istream" 3
+16535:       streamsize
+16535:       gcount() const
+16535:       { return _M_gcount; }
+16535: # 301 "/usr/include/c++/8/istream" 3
+16535:       int_type
+16535:       get();
+16535: # 315 "/usr/include/c++/8/istream" 3
+16535:       __istream_type&
+16535:       get(char_type& __c);
+16535: # 342 "/usr/include/c++/8/istream" 3
+16535:       __istream_type&
+16535:       get(char_type* __s, streamsize __n, char_type __delim);
+16535: # 353 "/usr/include/c++/8/istream" 3
+16535:       __istream_type&
+16535:       get(char_type* __s, streamsize __n)
+16535:       { return this->get(__s, __n, this->widen('\n')); }
+16535: # 376 "/usr/include/c++/8/istream" 3
+16535:       __istream_type&
+16535:       get(__streambuf_type& __sb, char_type __delim);
+16535: # 386 "/usr/include/c++/8/istream" 3
+16535:       __istream_type&
+16535:       get(__streambuf_type& __sb)
+16535:       { return this->get(__sb, this->widen('\n')); }
+16535: # 415 "/usr/include/c++/8/istream" 3
+16535:       __istream_type&
+16535:       getline(char_type* __s, streamsize __n, char_type __delim);
+16535: # 426 "/usr/include/c++/8/istream" 3
+16535:       __istream_type&
+16535:       getline(char_type* __s, streamsize __n)
+16535:       { return this->getline(__s, __n, this->widen('\n')); }
+16535: # 450 "/usr/include/c++/8/istream" 3
+16535:       __istream_type&
+16535:       ignore(streamsize __n, int_type __delim);
+16535: 
+16535:       __istream_type&
+16535:       ignore(streamsize __n);
+16535: 
+16535:       __istream_type&
+16535:       ignore();
+16535: # 467 "/usr/include/c++/8/istream" 3
+16535:       int_type
+16535:       peek();
+16535: # 485 "/usr/include/c++/8/istream" 3
+16535:       __istream_type&
+16535:       read(char_type* __s, streamsize __n);
+16535: # 504 "/usr/include/c++/8/istream" 3
+16535:       streamsize
+16535:       readsome(char_type* __s, streamsize __n);
+16535: # 521 "/usr/include/c++/8/istream" 3
+16535:       __istream_type&
+16535:       putback(char_type __c);
+16535: # 537 "/usr/include/c++/8/istream" 3
+16535:       __istream_type&
+16535:       unget();
+16535: # 555 "/usr/include/c++/8/istream" 3
+16535:       int
+16535:       sync();
+16535: # 570 "/usr/include/c++/8/istream" 3
+16535:       pos_type
+16535:       tellg();
+16535: # 585 "/usr/include/c++/8/istream" 3
+16535:       __istream_type&
+16535:       seekg(pos_type);
+16535: # 601 "/usr/include/c++/8/istream" 3
+16535:       __istream_type&
+16535:       seekg(off_type, ios_base::seekdir);
+16535: 
+16535: 
+16535:     protected:
+16535:       basic_istream()
+16535:       : _M_gcount(streamsize(0))
+16535:       { this->init(0); }
+16535: 
+16535: 
+16535:       basic_istream(const basic_istream&) = delete;
+16535: 
+16535:       basic_istream(basic_istream&& __rhs)
+16535:       : __ios_type(), _M_gcount(__rhs._M_gcount)
+16535:       {
+16535:  __ios_type::move(__rhs);
+16535:  __rhs._M_gcount = 0;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       basic_istream& operator=(const basic_istream&) = delete;
+16535: 
+16535:       basic_istream&
+16535:       operator=(basic_istream&& __rhs)
+16535:       {
+16535:  swap(__rhs);
+16535:  return *this;
+16535:       }
+16535: 
+16535:       void
+16535:       swap(basic_istream& __rhs)
+16535:       {
+16535:  __ios_type::swap(__rhs);
+16535:  std::swap(_M_gcount, __rhs._M_gcount);
+16535:       }
+16535: 
+16535: 
+16535:       template<typename _ValueT>
+16535:  __istream_type&
+16535:  _M_extract(_ValueT& __v);
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     basic_istream<char>&
+16535:     basic_istream<char>::
+16535:     getline(char_type* __s, streamsize __n, char_type __delim);
+16535: 
+16535:   template<>
+16535:     basic_istream<char>&
+16535:     basic_istream<char>::
+16535:     ignore(streamsize __n);
+16535: 
+16535:   template<>
+16535:     basic_istream<char>&
+16535:     basic_istream<char>::
+16535:     ignore(streamsize __n, int_type __delim);
+16535: 
+16535: 
+16535:   template<>
+16535:     basic_istream<wchar_t>&
+16535:     basic_istream<wchar_t>::
+16535:     getline(char_type* __s, streamsize __n, char_type __delim);
+16535: 
+16535:   template<>
+16535:     basic_istream<wchar_t>&
+16535:     basic_istream<wchar_t>::
+16535:     ignore(streamsize __n);
+16535: 
+16535:   template<>
+16535:     basic_istream<wchar_t>&
+16535:     basic_istream<wchar_t>::
+16535:     ignore(streamsize __n, int_type __delim);
+16535: # 685 "/usr/include/c++/8/istream" 3
+16535:   template<typename _CharT, typename _Traits>
+16535:     class basic_istream<_CharT, _Traits>::sentry
+16535:     {
+16535: 
+16535:       bool _M_ok;
+16535: 
+16535:     public:
+16535: 
+16535:       typedef _Traits traits_type;
+16535:       typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
+16535:       typedef basic_istream<_CharT, _Traits> __istream_type;
+16535:       typedef typename __istream_type::__ctype_type __ctype_type;
+16535:       typedef typename _Traits::int_type __int_type;
+16535: # 721 "/usr/include/c++/8/istream" 3
+16535:       explicit
+16535:       sentry(basic_istream<_CharT, _Traits>& __is, bool __noskipws = false);
+16535: # 732 "/usr/include/c++/8/istream" 3
+16535:       explicit
+16535: 
+16535:       operator bool() const
+16535:       { return _M_ok; }
+16535:     };
+16535: # 750 "/usr/include/c++/8/istream" 3
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c);
+16535: 
+16535:   template<class _Traits>
+16535:     inline basic_istream<char, _Traits>&
+16535:     operator>>(basic_istream<char, _Traits>& __in, unsigned char& __c)
+16535:     { return (__in >> reinterpret_cast<char&>(__c)); }
+16535: 
+16535:   template<class _Traits>
+16535:     inline basic_istream<char, _Traits>&
+16535:     operator>>(basic_istream<char, _Traits>& __in, signed char& __c)
+16535:     { return (__in >> reinterpret_cast<char&>(__c)); }
+16535: # 792 "/usr/include/c++/8/istream" 3
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s);
+16535: 
+16535: 
+16535:   template<>
+16535:     basic_istream<char>&
+16535:     operator>>(basic_istream<char>& __in, char* __s);
+16535: 
+16535:   template<class _Traits>
+16535:     inline basic_istream<char, _Traits>&
+16535:     operator>>(basic_istream<char, _Traits>& __in, unsigned char* __s)
+16535:     { return (__in >> reinterpret_cast<char*>(__s)); }
+16535: 
+16535:   template<class _Traits>
+16535:     inline basic_istream<char, _Traits>&
+16535:     operator>>(basic_istream<char, _Traits>& __in, signed char* __s)
+16535:     { return (__in >> reinterpret_cast<char*>(__s)); }
+16535: # 823 "/usr/include/c++/8/istream" 3
+16535:   template<typename _CharT, typename _Traits>
+16535:     class basic_iostream
+16535:     : public basic_istream<_CharT, _Traits>,
+16535:       public basic_ostream<_CharT, _Traits>
+16535:     {
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef typename _Traits::int_type int_type;
+16535:       typedef typename _Traits::pos_type pos_type;
+16535:       typedef typename _Traits::off_type off_type;
+16535:       typedef _Traits traits_type;
+16535: 
+16535: 
+16535:       typedef basic_istream<_CharT, _Traits> __istream_type;
+16535:       typedef basic_ostream<_CharT, _Traits> __ostream_type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       explicit
+16535:       basic_iostream(basic_streambuf<_CharT, _Traits>* __sb)
+16535:       : __istream_type(__sb), __ostream_type(__sb) { }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       virtual
+16535:       ~basic_iostream() { }
+16535: 
+16535:     protected:
+16535:       basic_iostream()
+16535:       : __istream_type(), __ostream_type() { }
+16535: 
+16535: 
+16535:       basic_iostream(const basic_iostream&) = delete;
+16535: 
+16535:       basic_iostream(basic_iostream&& __rhs)
+16535:       : __istream_type(std::move(__rhs)), __ostream_type(*this)
+16535:       { }
+16535: 
+16535: 
+16535: 
+16535:       basic_iostream& operator=(const basic_iostream&) = delete;
+16535: 
+16535:       basic_iostream&
+16535:       operator=(basic_iostream&& __rhs)
+16535:       {
+16535:  swap(__rhs);
+16535:  return *this;
+16535:       }
+16535: 
+16535:       void
+16535:       swap(basic_iostream& __rhs)
+16535:       { __istream_type::swap(__rhs); }
+16535: 
+16535:     };
+16535: # 906 "/usr/include/c++/8/istream" 3
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     ws(basic_istream<_CharT, _Traits>& __is);
+16535: 
+16535: 
+16535:   template<typename _Ch, typename _Up>
+16535:     basic_istream<_Ch, _Up>&
+16535:     __is_convertible_to_basic_istream_test(basic_istream<_Ch, _Up>*);
+16535: 
+16535:   template<typename _Tp, typename = void>
+16535:     struct __is_convertible_to_basic_istream_impl
+16535:     {
+16535:       using __istream_type = void;
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     using __do_is_convertible_to_basic_istream_impl =
+16535:     decltype(__is_convertible_to_basic_istream_test
+16535:       (declval<typename remove_reference<_Tp>::type*>()));
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_convertible_to_basic_istream_impl
+16535:     <_Tp,
+16535:      __void_t<__do_is_convertible_to_basic_istream_impl<_Tp>>>
+16535:     {
+16535:       using __istream_type =
+16535:  __do_is_convertible_to_basic_istream_impl<_Tp>;
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_convertible_to_basic_istream
+16535:     : __is_convertible_to_basic_istream_impl<_Tp>
+16535:     {
+16535:     public:
+16535:       using type = __not_<is_void<
+16535:         typename __is_convertible_to_basic_istream_impl<_Tp>::__istream_type>>;
+16535:       constexpr static bool value = type::value;
+16535:     };
+16535: 
+16535:   template<typename _Istream, typename _Tp, typename = void>
+16535:     struct __is_extractable : false_type {};
+16535: 
+16535:   template<typename _Istream, typename _Tp>
+16535:     struct __is_extractable<_Istream, _Tp,
+16535:        __void_t<decltype(declval<_Istream&>()
+16535:            >> declval<_Tp>())>>
+16535:     : true_type {};
+16535: 
+16535:   template<typename _Istream>
+16535:     using __rvalue_istream_type =
+16535:       typename __is_convertible_to_basic_istream<
+16535:  _Istream>::__istream_type;
+16535: # 972 "/usr/include/c++/8/istream" 3
+16535:   template<typename _Istream, typename _Tp>
+16535:     inline
+16535:     typename enable_if<__and_<__not_<is_lvalue_reference<_Istream>>,
+16535:          __is_convertible_to_basic_istream<_Istream>,
+16535:          __is_extractable<
+16535:     __rvalue_istream_type<_Istream>,
+16535:     _Tp&&>>::value,
+16535:          __rvalue_istream_type<_Istream>>::type
+16535:     operator>>(_Istream&& __is, _Tp&& __x)
+16535:     {
+16535:       __rvalue_istream_type<_Istream> __ret_is = __is;
+16535:       __ret_is >> std::forward<_Tp>(__x);
+16535:       return __ret_is;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/istream.tcc" 1 3
+16535: # 37 "/usr/include/c++/8/bits/istream.tcc" 3
+16535:        
+16535: # 38 "/usr/include/c++/8/bits/istream.tcc" 3
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_istream<_CharT, _Traits>::sentry::
+16535:     sentry(basic_istream<_CharT, _Traits>& __in, bool __noskip) : _M_ok(false)
+16535:     {
+16535:       ios_base::iostate __err = ios_base::goodbit;
+16535:       if (__in.good())
+16535:  try
+16535:    {
+16535:      if (__in.tie())
+16535:        __in.tie()->flush();
+16535:      if (!__noskip && bool(__in.flags() & ios_base::skipws))
+16535:        {
+16535:   const __int_type __eof = traits_type::eof();
+16535:   __streambuf_type* __sb = __in.rdbuf();
+16535:   __int_type __c = __sb->sgetc();
+16535: 
+16535:   const __ctype_type& __ct = __check_facet(__in._M_ctype);
+16535:   while (!traits_type::eq_int_type(__c, __eof)
+16535:          && __ct.is(ctype_base::space,
+16535:       traits_type::to_char_type(__c)))
+16535:     __c = __sb->snextc();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (traits_type::eq_int_type(__c, __eof))
+16535:     __err |= ios_base::eofbit;
+16535:        }
+16535:    }
+16535:  catch(__cxxabiv1::__forced_unwind&)
+16535:    {
+16535:      __in._M_setstate(ios_base::badbit);
+16535:      throw;
+16535:    }
+16535:  catch(...)
+16535:    { __in._M_setstate(ios_base::badbit); }
+16535: 
+16535:       if (__in.good() && __err == ios_base::goodbit)
+16535:  _M_ok = true;
+16535:       else
+16535:  {
+16535:    __err |= ios_base::failbit;
+16535:    __in.setstate(__err);
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     template<typename _ValueT>
+16535:       basic_istream<_CharT, _Traits>&
+16535:       basic_istream<_CharT, _Traits>::
+16535:       _M_extract(_ValueT& __v)
+16535:       {
+16535:  sentry __cerb(*this, false);
+16535:  if (__cerb)
+16535:    {
+16535:      ios_base::iostate __err = ios_base::goodbit;
+16535:      try
+16535:        {
+16535:   const __num_get_type& __ng = __check_facet(this->_M_num_get);
+16535:   __ng.get(*this, 0, *this, __err, __v);
+16535:        }
+16535:      catch(__cxxabiv1::__forced_unwind&)
+16535:        {
+16535:   this->_M_setstate(ios_base::badbit);
+16535:   throw;
+16535:        }
+16535:      catch(...)
+16535:        { this->_M_setstate(ios_base::badbit); }
+16535:      if (__err)
+16535:        this->setstate(__err);
+16535:    }
+16535:  return *this;
+16535:       }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     basic_istream<_CharT, _Traits>::
+16535:     operator>>(short& __n)
+16535:     {
+16535: 
+16535: 
+16535:       sentry __cerb(*this, false);
+16535:       if (__cerb)
+16535:  {
+16535:    ios_base::iostate __err = ios_base::goodbit;
+16535:    try
+16535:      {
+16535:        long __l;
+16535:        const __num_get_type& __ng = __check_facet(this->_M_num_get);
+16535:        __ng.get(*this, 0, *this, __err, __l);
+16535: 
+16535: 
+16535: 
+16535:        if (__l < __gnu_cxx::__numeric_traits<short>::__min)
+16535:   {
+16535:     __err |= ios_base::failbit;
+16535:     __n = __gnu_cxx::__numeric_traits<short>::__min;
+16535:   }
+16535:        else if (__l > __gnu_cxx::__numeric_traits<short>::__max)
+16535:   {
+16535:     __err |= ios_base::failbit;
+16535:     __n = __gnu_cxx::__numeric_traits<short>::__max;
+16535:   }
+16535:        else
+16535:   __n = short(__l);
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        this->_M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { this->_M_setstate(ios_base::badbit); }
+16535:    if (__err)
+16535:      this->setstate(__err);
+16535:  }
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     basic_istream<_CharT, _Traits>::
+16535:     operator>>(int& __n)
+16535:     {
+16535: 
+16535: 
+16535:       sentry __cerb(*this, false);
+16535:       if (__cerb)
+16535:  {
+16535:    ios_base::iostate __err = ios_base::goodbit;
+16535:    try
+16535:      {
+16535:        long __l;
+16535:        const __num_get_type& __ng = __check_facet(this->_M_num_get);
+16535:        __ng.get(*this, 0, *this, __err, __l);
+16535: 
+16535: 
+16535: 
+16535:        if (__l < __gnu_cxx::__numeric_traits<int>::__min)
+16535:   {
+16535:     __err |= ios_base::failbit;
+16535:     __n = __gnu_cxx::__numeric_traits<int>::__min;
+16535:   }
+16535:        else if (__l > __gnu_cxx::__numeric_traits<int>::__max)
+16535:   {
+16535:     __err |= ios_base::failbit;
+16535:     __n = __gnu_cxx::__numeric_traits<int>::__max;
+16535:   }
+16535:        else
+16535:   __n = int(__l);
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        this->_M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { this->_M_setstate(ios_base::badbit); }
+16535:    if (__err)
+16535:      this->setstate(__err);
+16535:  }
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     basic_istream<_CharT, _Traits>::
+16535:     operator>>(__streambuf_type* __sbout)
+16535:     {
+16535:       ios_base::iostate __err = ios_base::goodbit;
+16535:       sentry __cerb(*this, false);
+16535:       if (__cerb && __sbout)
+16535:  {
+16535:    try
+16535:      {
+16535:        bool __ineof;
+16535:        if (!__copy_streambufs_eof(this->rdbuf(), __sbout, __ineof))
+16535:   __err |= ios_base::failbit;
+16535:        if (__ineof)
+16535:   __err |= ios_base::eofbit;
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        this->_M_setstate(ios_base::failbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { this->_M_setstate(ios_base::failbit); }
+16535:  }
+16535:       else if (!__sbout)
+16535:  __err |= ios_base::failbit;
+16535:       if (__err)
+16535:  this->setstate(__err);
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     typename basic_istream<_CharT, _Traits>::int_type
+16535:     basic_istream<_CharT, _Traits>::
+16535:     get(void)
+16535:     {
+16535:       const int_type __eof = traits_type::eof();
+16535:       int_type __c = __eof;
+16535:       _M_gcount = 0;
+16535:       ios_base::iostate __err = ios_base::goodbit;
+16535:       sentry __cerb(*this, true);
+16535:       if (__cerb)
+16535:  {
+16535:    try
+16535:      {
+16535:        __c = this->rdbuf()->sbumpc();
+16535: 
+16535:        if (!traits_type::eq_int_type(__c, __eof))
+16535:   _M_gcount = 1;
+16535:        else
+16535:   __err |= ios_base::eofbit;
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        this->_M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { this->_M_setstate(ios_base::badbit); }
+16535:  }
+16535:       if (!_M_gcount)
+16535:  __err |= ios_base::failbit;
+16535:       if (__err)
+16535:  this->setstate(__err);
+16535:       return __c;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     basic_istream<_CharT, _Traits>::
+16535:     get(char_type& __c)
+16535:     {
+16535:       _M_gcount = 0;
+16535:       ios_base::iostate __err = ios_base::goodbit;
+16535:       sentry __cerb(*this, true);
+16535:       if (__cerb)
+16535:  {
+16535:    try
+16535:      {
+16535:        const int_type __cb = this->rdbuf()->sbumpc();
+16535: 
+16535:        if (!traits_type::eq_int_type(__cb, traits_type::eof()))
+16535:   {
+16535:     _M_gcount = 1;
+16535:     __c = traits_type::to_char_type(__cb);
+16535:   }
+16535:        else
+16535:   __err |= ios_base::eofbit;
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        this->_M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { this->_M_setstate(ios_base::badbit); }
+16535:  }
+16535:       if (!_M_gcount)
+16535:  __err |= ios_base::failbit;
+16535:       if (__err)
+16535:  this->setstate(__err);
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     basic_istream<_CharT, _Traits>::
+16535:     get(char_type* __s, streamsize __n, char_type __delim)
+16535:     {
+16535:       _M_gcount = 0;
+16535:       ios_base::iostate __err = ios_base::goodbit;
+16535:       sentry __cerb(*this, true);
+16535:       if (__cerb)
+16535:  {
+16535:    try
+16535:      {
+16535:        const int_type __idelim = traits_type::to_int_type(__delim);
+16535:        const int_type __eof = traits_type::eof();
+16535:        __streambuf_type* __sb = this->rdbuf();
+16535:        int_type __c = __sb->sgetc();
+16535: 
+16535:        while (_M_gcount + 1 < __n
+16535:        && !traits_type::eq_int_type(__c, __eof)
+16535:        && !traits_type::eq_int_type(__c, __idelim))
+16535:   {
+16535:     *__s++ = traits_type::to_char_type(__c);
+16535:     ++_M_gcount;
+16535:     __c = __sb->snextc();
+16535:   }
+16535:        if (traits_type::eq_int_type(__c, __eof))
+16535:   __err |= ios_base::eofbit;
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        this->_M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { this->_M_setstate(ios_base::badbit); }
+16535:  }
+16535: 
+16535: 
+16535:       if (__n > 0)
+16535:  *__s = char_type();
+16535:       if (!_M_gcount)
+16535:  __err |= ios_base::failbit;
+16535:       if (__err)
+16535:  this->setstate(__err);
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     basic_istream<_CharT, _Traits>::
+16535:     get(__streambuf_type& __sb, char_type __delim)
+16535:     {
+16535:       _M_gcount = 0;
+16535:       ios_base::iostate __err = ios_base::goodbit;
+16535:       sentry __cerb(*this, true);
+16535:       if (__cerb)
+16535:  {
+16535:    try
+16535:      {
+16535:        const int_type __idelim = traits_type::to_int_type(__delim);
+16535:        const int_type __eof = traits_type::eof();
+16535:        __streambuf_type* __this_sb = this->rdbuf();
+16535:        int_type __c = __this_sb->sgetc();
+16535:        char_type __c2 = traits_type::to_char_type(__c);
+16535: 
+16535:        while (!traits_type::eq_int_type(__c, __eof)
+16535:        && !traits_type::eq_int_type(__c, __idelim)
+16535:        && !traits_type::eq_int_type(__sb.sputc(__c2), __eof))
+16535:   {
+16535:     ++_M_gcount;
+16535:     __c = __this_sb->snextc();
+16535:     __c2 = traits_type::to_char_type(__c);
+16535:   }
+16535:        if (traits_type::eq_int_type(__c, __eof))
+16535:   __err |= ios_base::eofbit;
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        this->_M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { this->_M_setstate(ios_base::badbit); }
+16535:  }
+16535:       if (!_M_gcount)
+16535:  __err |= ios_base::failbit;
+16535:       if (__err)
+16535:  this->setstate(__err);
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     basic_istream<_CharT, _Traits>::
+16535:     getline(char_type* __s, streamsize __n, char_type __delim)
+16535:     {
+16535:       _M_gcount = 0;
+16535:       ios_base::iostate __err = ios_base::goodbit;
+16535:       sentry __cerb(*this, true);
+16535:       if (__cerb)
+16535:         {
+16535:           try
+16535:             {
+16535:               const int_type __idelim = traits_type::to_int_type(__delim);
+16535:               const int_type __eof = traits_type::eof();
+16535:               __streambuf_type* __sb = this->rdbuf();
+16535:               int_type __c = __sb->sgetc();
+16535: 
+16535:               while (_M_gcount + 1 < __n
+16535:                      && !traits_type::eq_int_type(__c, __eof)
+16535:                      && !traits_type::eq_int_type(__c, __idelim))
+16535:                 {
+16535:                   *__s++ = traits_type::to_char_type(__c);
+16535:                   __c = __sb->snextc();
+16535:                   ++_M_gcount;
+16535:                 }
+16535:               if (traits_type::eq_int_type(__c, __eof))
+16535:                 __err |= ios_base::eofbit;
+16535:               else
+16535:                 {
+16535:                   if (traits_type::eq_int_type(__c, __idelim))
+16535:                     {
+16535:                       __sb->sbumpc();
+16535:                       ++_M_gcount;
+16535:                     }
+16535:                   else
+16535:                     __err |= ios_base::failbit;
+16535:                 }
+16535:             }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        this->_M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:           catch(...)
+16535:             { this->_M_setstate(ios_base::badbit); }
+16535:         }
+16535: 
+16535: 
+16535:       if (__n > 0)
+16535:  *__s = char_type();
+16535:       if (!_M_gcount)
+16535:         __err |= ios_base::failbit;
+16535:       if (__err)
+16535:         this->setstate(__err);
+16535:       return *this;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     basic_istream<_CharT, _Traits>::
+16535:     ignore(void)
+16535:     {
+16535:       _M_gcount = 0;
+16535:       sentry __cerb(*this, true);
+16535:       if (__cerb)
+16535:  {
+16535:    ios_base::iostate __err = ios_base::goodbit;
+16535:    try
+16535:      {
+16535:        const int_type __eof = traits_type::eof();
+16535:        __streambuf_type* __sb = this->rdbuf();
+16535: 
+16535:        if (traits_type::eq_int_type(__sb->sbumpc(), __eof))
+16535:   __err |= ios_base::eofbit;
+16535:        else
+16535:   _M_gcount = 1;
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        this->_M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { this->_M_setstate(ios_base::badbit); }
+16535:    if (__err)
+16535:      this->setstate(__err);
+16535:  }
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     basic_istream<_CharT, _Traits>::
+16535:     ignore(streamsize __n)
+16535:     {
+16535:       _M_gcount = 0;
+16535:       sentry __cerb(*this, true);
+16535:       if (__cerb && __n > 0)
+16535:         {
+16535:           ios_base::iostate __err = ios_base::goodbit;
+16535:           try
+16535:             {
+16535:               const int_type __eof = traits_type::eof();
+16535:               __streambuf_type* __sb = this->rdbuf();
+16535:               int_type __c = __sb->sgetc();
+16535: # 521 "/usr/include/c++/8/bits/istream.tcc" 3
+16535:        bool __large_ignore = false;
+16535:        while (true)
+16535:   {
+16535:     while (_M_gcount < __n
+16535:     && !traits_type::eq_int_type(__c, __eof))
+16535:       {
+16535:         ++_M_gcount;
+16535:         __c = __sb->snextc();
+16535:       }
+16535:     if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max
+16535:         && !traits_type::eq_int_type(__c, __eof))
+16535:       {
+16535:         _M_gcount =
+16535:    __gnu_cxx::__numeric_traits<streamsize>::__min;
+16535:         __large_ignore = true;
+16535:       }
+16535:     else
+16535:       break;
+16535:   }
+16535: 
+16535:        if (__large_ignore)
+16535:   _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max;
+16535: 
+16535:        if (traits_type::eq_int_type(__c, __eof))
+16535:                 __err |= ios_base::eofbit;
+16535:             }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        this->_M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:           catch(...)
+16535:             { this->_M_setstate(ios_base::badbit); }
+16535:           if (__err)
+16535:             this->setstate(__err);
+16535:         }
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     basic_istream<_CharT, _Traits>::
+16535:     ignore(streamsize __n, int_type __delim)
+16535:     {
+16535:       _M_gcount = 0;
+16535:       sentry __cerb(*this, true);
+16535:       if (__cerb && __n > 0)
+16535:         {
+16535:           ios_base::iostate __err = ios_base::goodbit;
+16535:           try
+16535:             {
+16535:               const int_type __eof = traits_type::eof();
+16535:               __streambuf_type* __sb = this->rdbuf();
+16535:               int_type __c = __sb->sgetc();
+16535: 
+16535: 
+16535:        bool __large_ignore = false;
+16535:        while (true)
+16535:   {
+16535:     while (_M_gcount < __n
+16535:     && !traits_type::eq_int_type(__c, __eof)
+16535:     && !traits_type::eq_int_type(__c, __delim))
+16535:       {
+16535:         ++_M_gcount;
+16535:         __c = __sb->snextc();
+16535:       }
+16535:     if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max
+16535:         && !traits_type::eq_int_type(__c, __eof)
+16535:         && !traits_type::eq_int_type(__c, __delim))
+16535:       {
+16535:         _M_gcount =
+16535:    __gnu_cxx::__numeric_traits<streamsize>::__min;
+16535:         __large_ignore = true;
+16535:       }
+16535:     else
+16535:       break;
+16535:   }
+16535: 
+16535:        if (__large_ignore)
+16535:   _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max;
+16535: 
+16535:               if (traits_type::eq_int_type(__c, __eof))
+16535:                 __err |= ios_base::eofbit;
+16535:        else if (traits_type::eq_int_type(__c, __delim))
+16535:   {
+16535:     if (_M_gcount
+16535:         < __gnu_cxx::__numeric_traits<streamsize>::__max)
+16535:       ++_M_gcount;
+16535:     __sb->sbumpc();
+16535:   }
+16535:             }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        this->_M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:           catch(...)
+16535:             { this->_M_setstate(ios_base::badbit); }
+16535:           if (__err)
+16535:             this->setstate(__err);
+16535:         }
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     typename basic_istream<_CharT, _Traits>::int_type
+16535:     basic_istream<_CharT, _Traits>::
+16535:     peek(void)
+16535:     {
+16535:       int_type __c = traits_type::eof();
+16535:       _M_gcount = 0;
+16535:       sentry __cerb(*this, true);
+16535:       if (__cerb)
+16535:  {
+16535:    ios_base::iostate __err = ios_base::goodbit;
+16535:    try
+16535:      {
+16535:        __c = this->rdbuf()->sgetc();
+16535:        if (traits_type::eq_int_type(__c, traits_type::eof()))
+16535:   __err |= ios_base::eofbit;
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        this->_M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { this->_M_setstate(ios_base::badbit); }
+16535:    if (__err)
+16535:      this->setstate(__err);
+16535:  }
+16535:       return __c;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     basic_istream<_CharT, _Traits>::
+16535:     read(char_type* __s, streamsize __n)
+16535:     {
+16535:       _M_gcount = 0;
+16535:       sentry __cerb(*this, true);
+16535:       if (__cerb)
+16535:  {
+16535:    ios_base::iostate __err = ios_base::goodbit;
+16535:    try
+16535:      {
+16535:        _M_gcount = this->rdbuf()->sgetn(__s, __n);
+16535:        if (_M_gcount != __n)
+16535:   __err |= (ios_base::eofbit | ios_base::failbit);
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        this->_M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { this->_M_setstate(ios_base::badbit); }
+16535:    if (__err)
+16535:      this->setstate(__err);
+16535:  }
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     streamsize
+16535:     basic_istream<_CharT, _Traits>::
+16535:     readsome(char_type* __s, streamsize __n)
+16535:     {
+16535:       _M_gcount = 0;
+16535:       sentry __cerb(*this, true);
+16535:       if (__cerb)
+16535:  {
+16535:    ios_base::iostate __err = ios_base::goodbit;
+16535:    try
+16535:      {
+16535: 
+16535:        const streamsize __num = this->rdbuf()->in_avail();
+16535:        if (__num > 0)
+16535:   _M_gcount = this->rdbuf()->sgetn(__s, std::min(__num, __n));
+16535:        else if (__num == -1)
+16535:   __err |= ios_base::eofbit;
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        this->_M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { this->_M_setstate(ios_base::badbit); }
+16535:    if (__err)
+16535:      this->setstate(__err);
+16535:  }
+16535:       return _M_gcount;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     basic_istream<_CharT, _Traits>::
+16535:     putback(char_type __c)
+16535:     {
+16535: 
+16535: 
+16535:       _M_gcount = 0;
+16535: 
+16535:       this->clear(this->rdstate() & ~ios_base::eofbit);
+16535:       sentry __cerb(*this, true);
+16535:       if (__cerb)
+16535:  {
+16535:    ios_base::iostate __err = ios_base::goodbit;
+16535:    try
+16535:      {
+16535:        const int_type __eof = traits_type::eof();
+16535:        __streambuf_type* __sb = this->rdbuf();
+16535:        if (!__sb
+16535:     || traits_type::eq_int_type(__sb->sputbackc(__c), __eof))
+16535:   __err |= ios_base::badbit;
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        this->_M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { this->_M_setstate(ios_base::badbit); }
+16535:    if (__err)
+16535:      this->setstate(__err);
+16535:  }
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     basic_istream<_CharT, _Traits>::
+16535:     unget(void)
+16535:     {
+16535: 
+16535: 
+16535:       _M_gcount = 0;
+16535: 
+16535:       this->clear(this->rdstate() & ~ios_base::eofbit);
+16535:       sentry __cerb(*this, true);
+16535:       if (__cerb)
+16535:  {
+16535:    ios_base::iostate __err = ios_base::goodbit;
+16535:    try
+16535:      {
+16535:        const int_type __eof = traits_type::eof();
+16535:        __streambuf_type* __sb = this->rdbuf();
+16535:        if (!__sb
+16535:     || traits_type::eq_int_type(__sb->sungetc(), __eof))
+16535:   __err |= ios_base::badbit;
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        this->_M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { this->_M_setstate(ios_base::badbit); }
+16535:    if (__err)
+16535:      this->setstate(__err);
+16535:  }
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     int
+16535:     basic_istream<_CharT, _Traits>::
+16535:     sync(void)
+16535:     {
+16535: 
+16535: 
+16535:       int __ret = -1;
+16535:       sentry __cerb(*this, true);
+16535:       if (__cerb)
+16535:  {
+16535:    ios_base::iostate __err = ios_base::goodbit;
+16535:    try
+16535:      {
+16535:        __streambuf_type* __sb = this->rdbuf();
+16535:        if (__sb)
+16535:   {
+16535:     if (__sb->pubsync() == -1)
+16535:       __err |= ios_base::badbit;
+16535:     else
+16535:       __ret = 0;
+16535:   }
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        this->_M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { this->_M_setstate(ios_base::badbit); }
+16535:    if (__err)
+16535:      this->setstate(__err);
+16535:  }
+16535:       return __ret;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     typename basic_istream<_CharT, _Traits>::pos_type
+16535:     basic_istream<_CharT, _Traits>::
+16535:     tellg(void)
+16535:     {
+16535: 
+16535: 
+16535:       pos_type __ret = pos_type(-1);
+16535:       sentry __cerb(*this, true);
+16535:       if (__cerb)
+16535:  {
+16535:    try
+16535:      {
+16535:        if (!this->fail())
+16535:   __ret = this->rdbuf()->pubseekoff(0, ios_base::cur,
+16535:         ios_base::in);
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        this->_M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { this->_M_setstate(ios_base::badbit); }
+16535:  }
+16535:       return __ret;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     basic_istream<_CharT, _Traits>::
+16535:     seekg(pos_type __pos)
+16535:     {
+16535: 
+16535: 
+16535: 
+16535:       this->clear(this->rdstate() & ~ios_base::eofbit);
+16535:       sentry __cerb(*this, true);
+16535:       if (__cerb)
+16535:  {
+16535:    ios_base::iostate __err = ios_base::goodbit;
+16535:    try
+16535:      {
+16535:        if (!this->fail())
+16535:   {
+16535: 
+16535:     const pos_type __p = this->rdbuf()->pubseekpos(__pos,
+16535:          ios_base::in);
+16535: 
+16535: 
+16535:     if (__p == pos_type(off_type(-1)))
+16535:       __err |= ios_base::failbit;
+16535:   }
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        this->_M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { this->_M_setstate(ios_base::badbit); }
+16535:    if (__err)
+16535:      this->setstate(__err);
+16535:  }
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     basic_istream<_CharT, _Traits>::
+16535:     seekg(off_type __off, ios_base::seekdir __dir)
+16535:     {
+16535: 
+16535: 
+16535: 
+16535:       this->clear(this->rdstate() & ~ios_base::eofbit);
+16535:       sentry __cerb(*this, true);
+16535:       if (__cerb)
+16535:  {
+16535:    ios_base::iostate __err = ios_base::goodbit;
+16535:    try
+16535:      {
+16535:        if (!this->fail())
+16535:   {
+16535: 
+16535:     const pos_type __p = this->rdbuf()->pubseekoff(__off, __dir,
+16535:          ios_base::in);
+16535: 
+16535: 
+16535:     if (__p == pos_type(off_type(-1)))
+16535:       __err |= ios_base::failbit;
+16535:   }
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        this->_M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { this->_M_setstate(ios_base::badbit); }
+16535:    if (__err)
+16535:      this->setstate(__err);
+16535:  }
+16535:       return *this;
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c)
+16535:     {
+16535:       typedef basic_istream<_CharT, _Traits> __istream_type;
+16535:       typedef typename __istream_type::int_type __int_type;
+16535: 
+16535:       typename __istream_type::sentry __cerb(__in, false);
+16535:       if (__cerb)
+16535:  {
+16535:    ios_base::iostate __err = ios_base::goodbit;
+16535:    try
+16535:      {
+16535:        const __int_type __cb = __in.rdbuf()->sbumpc();
+16535:        if (!_Traits::eq_int_type(__cb, _Traits::eof()))
+16535:   __c = _Traits::to_char_type(__cb);
+16535:        else
+16535:   __err |= (ios_base::eofbit | ios_base::failbit);
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        __in._M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { __in._M_setstate(ios_base::badbit); }
+16535:    if (__err)
+16535:      __in.setstate(__err);
+16535:  }
+16535:       return __in;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s)
+16535:     {
+16535:       typedef basic_istream<_CharT, _Traits> __istream_type;
+16535:       typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
+16535:       typedef typename _Traits::int_type int_type;
+16535:       typedef _CharT char_type;
+16535:       typedef ctype<_CharT> __ctype_type;
+16535: 
+16535:       streamsize __extracted = 0;
+16535:       ios_base::iostate __err = ios_base::goodbit;
+16535:       typename __istream_type::sentry __cerb(__in, false);
+16535:       if (__cerb)
+16535:  {
+16535:    try
+16535:      {
+16535: 
+16535:        streamsize __num = __in.width();
+16535:        if (__num <= 0)
+16535:   __num = __gnu_cxx::__numeric_traits<streamsize>::__max;
+16535: 
+16535:        const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc());
+16535: 
+16535:        const int_type __eof = _Traits::eof();
+16535:        __streambuf_type* __sb = __in.rdbuf();
+16535:        int_type __c = __sb->sgetc();
+16535: 
+16535:        while (__extracted < __num - 1
+16535:        && !_Traits::eq_int_type(__c, __eof)
+16535:        && !__ct.is(ctype_base::space,
+16535:      _Traits::to_char_type(__c)))
+16535:   {
+16535:     *__s++ = _Traits::to_char_type(__c);
+16535:     ++__extracted;
+16535:     __c = __sb->snextc();
+16535:   }
+16535:        if (_Traits::eq_int_type(__c, __eof))
+16535:   __err |= ios_base::eofbit;
+16535: 
+16535: 
+16535: 
+16535:        *__s = char_type();
+16535:        __in.width(0);
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        __in._M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { __in._M_setstate(ios_base::badbit); }
+16535:  }
+16535:       if (!__extracted)
+16535:  __err |= ios_base::failbit;
+16535:       if (__err)
+16535:  __in.setstate(__err);
+16535:       return __in;
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     ws(basic_istream<_CharT, _Traits>& __in)
+16535:     {
+16535:       typedef basic_istream<_CharT, _Traits> __istream_type;
+16535:       typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
+16535:       typedef typename __istream_type::int_type __int_type;
+16535:       typedef ctype<_CharT> __ctype_type;
+16535: 
+16535:       const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc());
+16535:       const __int_type __eof = _Traits::eof();
+16535:       __streambuf_type* __sb = __in.rdbuf();
+16535:       __int_type __c = __sb->sgetc();
+16535: 
+16535:       while (!_Traits::eq_int_type(__c, __eof)
+16535:       && __ct.is(ctype_base::space, _Traits::to_char_type(__c)))
+16535:  __c = __sb->snextc();
+16535: 
+16535:        if (_Traits::eq_int_type(__c, __eof))
+16535:   __in.setstate(ios_base::eofbit);
+16535:       return __in;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   extern template class basic_istream<char>;
+16535:   extern template istream& ws(istream&);
+16535:   extern template istream& operator>>(istream&, char&);
+16535:   extern template istream& operator>>(istream&, char*);
+16535:   extern template istream& operator>>(istream&, unsigned char&);
+16535:   extern template istream& operator>>(istream&, signed char&);
+16535:   extern template istream& operator>>(istream&, unsigned char*);
+16535:   extern template istream& operator>>(istream&, signed char*);
+16535: 
+16535:   extern template istream& istream::_M_extract(unsigned short&);
+16535:   extern template istream& istream::_M_extract(unsigned int&);
+16535:   extern template istream& istream::_M_extract(long&);
+16535:   extern template istream& istream::_M_extract(unsigned long&);
+16535:   extern template istream& istream::_M_extract(bool&);
+16535: 
+16535:   extern template istream& istream::_M_extract(long long&);
+16535:   extern template istream& istream::_M_extract(unsigned long long&);
+16535: 
+16535:   extern template istream& istream::_M_extract(float&);
+16535:   extern template istream& istream::_M_extract(double&);
+16535:   extern template istream& istream::_M_extract(long double&);
+16535:   extern template istream& istream::_M_extract(void*&);
+16535: 
+16535:   extern template class basic_iostream<char>;
+16535: 
+16535: 
+16535:   extern template class basic_istream<wchar_t>;
+16535:   extern template wistream& ws(wistream&);
+16535:   extern template wistream& operator>>(wistream&, wchar_t&);
+16535:   extern template wistream& operator>>(wistream&, wchar_t*);
+16535: 
+16535:   extern template wistream& wistream::_M_extract(unsigned short&);
+16535:   extern template wistream& wistream::_M_extract(unsigned int&);
+16535:   extern template wistream& wistream::_M_extract(long&);
+16535:   extern template wistream& wistream::_M_extract(unsigned long&);
+16535:   extern template wistream& wistream::_M_extract(bool&);
+16535: 
+16535:   extern template wistream& wistream::_M_extract(long long&);
+16535:   extern template wistream& wistream::_M_extract(unsigned long long&);
+16535: 
+16535:   extern template wistream& wistream::_M_extract(float&);
+16535:   extern template wistream& wistream::_M_extract(double&);
+16535:   extern template wistream& wistream::_M_extract(long double&);
+16535:   extern template wistream& wistream::_M_extract(void*&);
+16535: 
+16535:   extern template class basic_iostream<wchar_t>;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 992 "/usr/include/c++/8/istream" 2 3
+16535: # 31 "../../src/globals_inlines.hh" 2
+16535: 
+16535: # 1 "/usr/include/c++/8/cctype" 1 3
+16535: # 39 "/usr/include/c++/8/cctype" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/cctype" 3
+16535: # 33 "../../src/globals_inlines.hh" 2
+16535: 
+16535: 
+16535: 
+16535: # 35 "../../src/globals_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline dimension_type
+16535: not_a_dimension() {
+16535:   return std::numeric_limits<dimension_type>::max();
+16535: }
+16535: 
+16535: inline int32_t
+16535: hash_code_from_dimension(dimension_type dim) {
+16535:   const dimension_type divisor = 1U << (32 - 1);
+16535:   dim = dim % divisor;
+16535:   return static_cast<int32_t>(dim);
+16535: }
+16535: 
+16535: inline const Weightwatch_Traits::Threshold&
+16535: Weightwatch_Traits::get() {
+16535:   return weight;
+16535: }
+16535: 
+16535: inline bool
+16535: Weightwatch_Traits::less_than(const Threshold& a, const Threshold& b) {
+16535:   return b - a < (1ULL << (((sizeof(Threshold)) * static_cast<std::size_t>(8)) - 1));
+16535: }
+16535: 
+16535: inline Weightwatch_Traits::Delta
+16535: Weightwatch_Traits::compute_delta(unsigned long unscaled, unsigned scale) {
+16535:   if ((std::numeric_limits<Delta>::max() >> scale) < unscaled) {
+16535:     throw std::invalid_argument("PPL::Weightwatch_Traits::"
+16535:                                 "compute_delta(u, s):\n"
+16535:                                 "values of u and s cause wrap around.");
+16535:   }
+16535:   return static_cast<Delta>(unscaled) << scale;
+16535: }
+16535: 
+16535: inline void
+16535: Weightwatch_Traits::from_delta(Threshold& threshold, const Delta& delta) {
+16535:   threshold = weight + delta;
+16535: }
+16535: 
+16535: inline void
+16535: maybe_abandon() {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (Weightwatch_Traits::check_function != 0) {
+16535:     Weightwatch_Traits::check_function();
+16535:   }
+16535:   if (const Throwable* const p = abandon_expensive_computations) {
+16535:     p->throw_me();
+16535:   }
+16535: }
+16535: 
+16535: inline dimension_type
+16535: compute_capacity(const dimension_type requested_size,
+16535:                  const dimension_type maximum_size) {
+16535:   
+16535: # 92 "../../src/globals_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 92 "../../src/globals_inlines.hh"
+16535:                                        ;
+16535: 
+16535:   return (requested_size < maximum_size/2)
+16535:     ? (2*(requested_size + 1))
+16535:     : maximum_size;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename
+16535: Enable_If<Is_Native<T>::value, memory_size_type>::type
+16535: external_memory_in_bytes(const T&) {
+16535:   return 0;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename
+16535: Enable_If<Is_Native<T>::value, memory_size_type>::type
+16535: total_memory_in_bytes(const T&) {
+16535:   return sizeof(T);
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: external_memory_in_bytes(const mpz_class& x) {
+16535:   return static_cast<memory_size_type>(x.get_mpz_t()[0]._mp_alloc)
+16535:     * 8;
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: total_memory_in_bytes(const mpz_class& x) {
+16535:   return sizeof(x) + external_memory_in_bytes(x);
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: external_memory_in_bytes(const mpq_class& x) {
+16535:   return external_memory_in_bytes(x.get_num())
+16535:     + external_memory_in_bytes(x.get_den());
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: total_memory_in_bytes(const mpq_class& x) {
+16535:   return sizeof(x) + external_memory_in_bytes(x);
+16535: }
+16535: 
+16535: inline void
+16535: ascii_dump(std::ostream& s, Representation r) {
+16535:   if (r == DENSE) {
+16535:     s << "DENSE";
+16535:   }
+16535:   else {
+16535:     s << "SPARSE";
+16535:   }
+16535: }
+16535: 
+16535: inline bool
+16535: ascii_load(std::istream& is, Representation& r) {
+16535:   std::string s;
+16535:   if (!(is >> s)) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (s == "DENSE") {
+16535:     r = DENSE;
+16535:     return true;
+16535:   }
+16535:   if (s == "SPARSE") {
+16535:     r = SPARSE;
+16535:     return true;
+16535:   }
+16535:   return false;
+16535: }
+16535: 
+16535: inline bool
+16535: is_space(char c) {
+16535:   return isspace(c) != 0;
+16535: }
+16535: 
+16535: template <typename RA_Container>
+16535: inline typename RA_Container::iterator
+16535: nth_iter(RA_Container& cont, dimension_type n) {
+16535:   typedef typename RA_Container::difference_type diff_t;
+16535:   return cont.begin() + static_cast<diff_t>(n);
+16535: }
+16535: 
+16535: template <typename RA_Container>
+16535: inline typename RA_Container::const_iterator
+16535: nth_iter(const RA_Container& cont, dimension_type n) {
+16535:   typedef typename RA_Container::difference_type diff_t;
+16535:   return cont.begin() + static_cast<diff_t>(n);
+16535: }
+16535: 
+16535: inline dimension_type
+16535: least_significant_one_mask(const dimension_type i) {
+16535:   return i & (~i + 1U);
+16535: }
+16535: 
+16535: }
+16535: # 570 "../../src/globals_defs.hh" 2
+16535: # 28 "../../src/Variable_inlines.hh" 2
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline dimension_type
+16535: Variable::max_space_dimension() {
+16535:   return not_a_dimension() - 1;
+16535: }
+16535: 
+16535: inline
+16535: Variable::Variable(dimension_type i)
+16535:   : varid((i < max_space_dimension())
+16535:           ? i
+16535:           : (throw std::length_error("PPL::Variable::Variable(i):\n"
+16535:                                      "i exceeds the maximum allowed "
+16535:                                      "variable identifier."), i)) {
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Variable::id() const {
+16535:   return varid;
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Variable::space_dimension() const {
+16535:   return varid + 1;
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Variable::external_memory_in_bytes() const {
+16535:   return 0;
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Variable::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: inline void
+16535: Variable::set_output_function(output_function_type* p) {
+16535:   current_output_function = p;
+16535: }
+16535: 
+16535: inline Variable::output_function_type*
+16535: Variable::get_output_function() {
+16535:   return current_output_function;
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: less(const Variable v, const Variable w) {
+16535:   return v.id() < w.id();
+16535: }
+16535: 
+16535: inline bool
+16535: Variable::Compare::operator()(const Variable x, const Variable y) const {
+16535:   return less(x, y);
+16535: }
+16535: 
+16535: inline void
+16535: Variable::m_swap(Variable& v) {
+16535:   using std::swap;
+16535:   swap(varid, v.varid);
+16535: }
+16535: 
+16535: inline void
+16535: swap(Variable& x, Variable& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 156 "../../src/Variable_defs.hh" 2
+16535: # 28 "../../src/Float_inlines.hh" 2
+16535: # 1 "../../src/Linear_Form_defs.hh" 1
+16535: # 28 "../../src/Linear_Form_defs.hh"
+16535: # 1 "../../src/Linear_Expression_types.hh" 1
+16535: # 16 "../../src/Linear_Expression_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Linear_Expression;
+16535: 
+16535: }
+16535: # 29 "../../src/Linear_Form_defs.hh" 2
+16535: 
+16535: # 1 "../../src/Box_types.hh" 1
+16535: # 16 "../../src/Box_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Interval>
+16535: class Box;
+16535: 
+16535: class Box_Helpers;
+16535: 
+16535: }
+16535: # 31 "../../src/Linear_Form_defs.hh" 2
+16535: # 1 "../../src/Float_defs.hh" 1
+16535: # 32 "../../src/Linear_Form_defs.hh" 2
+16535: # 1 "/usr/include/c++/8/vector" 1 3
+16535: # 58 "/usr/include/c++/8/vector" 3
+16535:        
+16535: # 59 "/usr/include/c++/8/vector" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/stl_uninitialized.h" 1 3
+16535: # 67 "/usr/include/c++/8/bits/stl_uninitialized.h" 3
+16535: 
+16535: # 67 "/usr/include/c++/8/bits/stl_uninitialized.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   template<bool _TrivialValueTypes>
+16535:     struct __uninitialized_copy
+16535:     {
+16535:       template<typename _InputIterator, typename _ForwardIterator>
+16535:         static _ForwardIterator
+16535:         __uninit_copy(_InputIterator __first, _InputIterator __last,
+16535:         _ForwardIterator __result)
+16535:         {
+16535:    _ForwardIterator __cur = __result;
+16535:    try
+16535:      {
+16535:        for (; __first != __last; ++__first, (void)++__cur)
+16535:   std::_Construct(std::__addressof(*__cur), *__first);
+16535:        return __cur;
+16535:      }
+16535:    catch(...)
+16535:      {
+16535:        std::_Destroy(__result, __cur);
+16535:        throw;
+16535:      }
+16535:  }
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __uninitialized_copy<true>
+16535:     {
+16535:       template<typename _InputIterator, typename _ForwardIterator>
+16535:         static _ForwardIterator
+16535:         __uninit_copy(_InputIterator __first, _InputIterator __last,
+16535:         _ForwardIterator __result)
+16535:         { return std::copy(__first, __last, __result); }
+16535:     };
+16535: # 113 "/usr/include/c++/8/bits/stl_uninitialized.h" 3
+16535:   template<typename _InputIterator, typename _ForwardIterator>
+16535:     inline _ForwardIterator
+16535:     uninitialized_copy(_InputIterator __first, _InputIterator __last,
+16535:          _ForwardIterator __result)
+16535:     {
+16535:       typedef typename iterator_traits<_InputIterator>::value_type
+16535:  _ValueType1;
+16535:       typedef typename iterator_traits<_ForwardIterator>::value_type
+16535:  _ValueType2;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       typedef typename iterator_traits<_InputIterator>::reference _RefType1;
+16535:       typedef typename iterator_traits<_ForwardIterator>::reference _RefType2;
+16535:       const bool __assignable = is_assignable<_RefType2, _RefType1>::value;
+16535: 
+16535: 
+16535:       return std::__uninitialized_copy<__is_trivial(_ValueType1)
+16535:            && __is_trivial(_ValueType2)
+16535:            && __assignable>::
+16535:  __uninit_copy(__first, __last, __result);
+16535:     }
+16535: 
+16535: 
+16535:   template<bool _TrivialValueType>
+16535:     struct __uninitialized_fill
+16535:     {
+16535:       template<typename _ForwardIterator, typename _Tp>
+16535:         static void
+16535:         __uninit_fill(_ForwardIterator __first, _ForwardIterator __last,
+16535:         const _Tp& __x)
+16535:         {
+16535:    _ForwardIterator __cur = __first;
+16535:    try
+16535:      {
+16535:        for (; __cur != __last; ++__cur)
+16535:   std::_Construct(std::__addressof(*__cur), __x);
+16535:      }
+16535:    catch(...)
+16535:      {
+16535:        std::_Destroy(__first, __cur);
+16535:        throw;
+16535:      }
+16535:  }
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __uninitialized_fill<true>
+16535:     {
+16535:       template<typename _ForwardIterator, typename _Tp>
+16535:         static void
+16535:         __uninit_fill(_ForwardIterator __first, _ForwardIterator __last,
+16535:         const _Tp& __x)
+16535:         { std::fill(__first, __last, __x); }
+16535:     };
+16535: # 179 "/usr/include/c++/8/bits/stl_uninitialized.h" 3
+16535:   template<typename _ForwardIterator, typename _Tp>
+16535:     inline void
+16535:     uninitialized_fill(_ForwardIterator __first, _ForwardIterator __last,
+16535:          const _Tp& __x)
+16535:     {
+16535:       typedef typename iterator_traits<_ForwardIterator>::value_type
+16535:  _ValueType;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const bool __assignable = is_copy_assignable<_ValueType>::value;
+16535: 
+16535: 
+16535:       std::__uninitialized_fill<__is_trivial(_ValueType) && __assignable>::
+16535:  __uninit_fill(__first, __last, __x);
+16535:     }
+16535: 
+16535: 
+16535:   template<bool _TrivialValueType>
+16535:     struct __uninitialized_fill_n
+16535:     {
+16535:       template<typename _ForwardIterator, typename _Size, typename _Tp>
+16535:         static _ForwardIterator
+16535:         __uninit_fill_n(_ForwardIterator __first, _Size __n,
+16535:    const _Tp& __x)
+16535:         {
+16535:    _ForwardIterator __cur = __first;
+16535:    try
+16535:      {
+16535:        for (; __n > 0; --__n, (void) ++__cur)
+16535:   std::_Construct(std::__addressof(*__cur), __x);
+16535:        return __cur;
+16535:      }
+16535:    catch(...)
+16535:      {
+16535:        std::_Destroy(__first, __cur);
+16535:        throw;
+16535:      }
+16535:  }
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __uninitialized_fill_n<true>
+16535:     {
+16535:       template<typename _ForwardIterator, typename _Size, typename _Tp>
+16535:         static _ForwardIterator
+16535:         __uninit_fill_n(_ForwardIterator __first, _Size __n,
+16535:    const _Tp& __x)
+16535:         { return std::fill_n(__first, __n, __x); }
+16535:     };
+16535: # 242 "/usr/include/c++/8/bits/stl_uninitialized.h" 3
+16535:   template<typename _ForwardIterator, typename _Size, typename _Tp>
+16535:     inline _ForwardIterator
+16535:     uninitialized_fill_n(_ForwardIterator __first, _Size __n, const _Tp& __x)
+16535:     {
+16535:       typedef typename iterator_traits<_ForwardIterator>::value_type
+16535:  _ValueType;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const bool __assignable = is_copy_assignable<_ValueType>::value;
+16535: 
+16535:       return __uninitialized_fill_n<__is_trivial(_ValueType) && __assignable>::
+16535:  __uninit_fill_n(__first, __n, __x);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _InputIterator, typename _ForwardIterator,
+16535:     typename _Allocator>
+16535:     _ForwardIterator
+16535:     __uninitialized_copy_a(_InputIterator __first, _InputIterator __last,
+16535:       _ForwardIterator __result, _Allocator& __alloc)
+16535:     {
+16535:       _ForwardIterator __cur = __result;
+16535:       try
+16535:  {
+16535:    typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
+16535:    for (; __first != __last; ++__first, (void)++__cur)
+16535:      __traits::construct(__alloc, std::__addressof(*__cur), *__first);
+16535:    return __cur;
+16535:  }
+16535:       catch(...)
+16535:  {
+16535:    std::_Destroy(__result, __cur, __alloc);
+16535:    throw;
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _InputIterator, typename _ForwardIterator, typename _Tp>
+16535:     inline _ForwardIterator
+16535:     __uninitialized_copy_a(_InputIterator __first, _InputIterator __last,
+16535:       _ForwardIterator __result, allocator<_Tp>&)
+16535:     { return std::uninitialized_copy(__first, __last, __result); }
+16535: 
+16535:   template<typename _InputIterator, typename _ForwardIterator,
+16535:     typename _Allocator>
+16535:     inline _ForwardIterator
+16535:     __uninitialized_move_a(_InputIterator __first, _InputIterator __last,
+16535:       _ForwardIterator __result, _Allocator& __alloc)
+16535:     {
+16535:       return std::__uninitialized_copy_a(std::make_move_iterator(__first),
+16535:       std::make_move_iterator(__last),
+16535:       __result, __alloc);
+16535:     }
+16535: 
+16535:   template<typename _InputIterator, typename _ForwardIterator,
+16535:     typename _Allocator>
+16535:     inline _ForwardIterator
+16535:     __uninitialized_move_if_noexcept_a(_InputIterator __first,
+16535:            _InputIterator __last,
+16535:            _ForwardIterator __result,
+16535:            _Allocator& __alloc)
+16535:     {
+16535:       return std::__uninitialized_copy_a
+16535:  (std::__make_move_if_noexcept_iterator(__first),
+16535:   std::__make_move_if_noexcept_iterator(__last), __result, __alloc);
+16535:     }
+16535: 
+16535:   template<typename _ForwardIterator, typename _Tp, typename _Allocator>
+16535:     void
+16535:     __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last,
+16535:       const _Tp& __x, _Allocator& __alloc)
+16535:     {
+16535:       _ForwardIterator __cur = __first;
+16535:       try
+16535:  {
+16535:    typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
+16535:    for (; __cur != __last; ++__cur)
+16535:      __traits::construct(__alloc, std::__addressof(*__cur), __x);
+16535:  }
+16535:       catch(...)
+16535:  {
+16535:    std::_Destroy(__first, __cur, __alloc);
+16535:    throw;
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _ForwardIterator, typename _Tp, typename _Tp2>
+16535:     inline void
+16535:     __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last,
+16535:       const _Tp& __x, allocator<_Tp2>&)
+16535:     { std::uninitialized_fill(__first, __last, __x); }
+16535: 
+16535:   template<typename _ForwardIterator, typename _Size, typename _Tp,
+16535:     typename _Allocator>
+16535:     _ForwardIterator
+16535:     __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n,
+16535:         const _Tp& __x, _Allocator& __alloc)
+16535:     {
+16535:       _ForwardIterator __cur = __first;
+16535:       try
+16535:  {
+16535:    typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
+16535:    for (; __n > 0; --__n, (void) ++__cur)
+16535:      __traits::construct(__alloc, std::__addressof(*__cur), __x);
+16535:    return __cur;
+16535:  }
+16535:       catch(...)
+16535:  {
+16535:    std::_Destroy(__first, __cur, __alloc);
+16535:    throw;
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _ForwardIterator, typename _Size, typename _Tp,
+16535:     typename _Tp2>
+16535:     inline _ForwardIterator
+16535:     __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n,
+16535:         const _Tp& __x, allocator<_Tp2>&)
+16535:     { return std::uninitialized_fill_n(__first, __n, __x); }
+16535: # 378 "/usr/include/c++/8/bits/stl_uninitialized.h" 3
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _ForwardIterator, typename _Allocator>
+16535:     inline _ForwardIterator
+16535:     __uninitialized_copy_move(_InputIterator1 __first1,
+16535:          _InputIterator1 __last1,
+16535:          _InputIterator2 __first2,
+16535:          _InputIterator2 __last2,
+16535:          _ForwardIterator __result,
+16535:          _Allocator& __alloc)
+16535:     {
+16535:       _ForwardIterator __mid = std::__uninitialized_copy_a(__first1, __last1,
+16535:           __result,
+16535:           __alloc);
+16535:       try
+16535:  {
+16535:    return std::__uninitialized_move_a(__first2, __last2, __mid, __alloc);
+16535:  }
+16535:       catch(...)
+16535:  {
+16535:    std::_Destroy(__result, __mid, __alloc);
+16535:    throw;
+16535:  }
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _InputIterator1, typename _InputIterator2,
+16535:     typename _ForwardIterator, typename _Allocator>
+16535:     inline _ForwardIterator
+16535:     __uninitialized_move_copy(_InputIterator1 __first1,
+16535:          _InputIterator1 __last1,
+16535:          _InputIterator2 __first2,
+16535:          _InputIterator2 __last2,
+16535:          _ForwardIterator __result,
+16535:          _Allocator& __alloc)
+16535:     {
+16535:       _ForwardIterator __mid = std::__uninitialized_move_a(__first1, __last1,
+16535:           __result,
+16535:           __alloc);
+16535:       try
+16535:  {
+16535:    return std::__uninitialized_copy_a(__first2, __last2, __mid, __alloc);
+16535:  }
+16535:       catch(...)
+16535:  {
+16535:    std::_Destroy(__result, __mid, __alloc);
+16535:    throw;
+16535:  }
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _ForwardIterator, typename _Tp, typename _InputIterator,
+16535:     typename _Allocator>
+16535:     inline _ForwardIterator
+16535:     __uninitialized_fill_move(_ForwardIterator __result, _ForwardIterator __mid,
+16535:          const _Tp& __x, _InputIterator __first,
+16535:          _InputIterator __last, _Allocator& __alloc)
+16535:     {
+16535:       std::__uninitialized_fill_a(__result, __mid, __x, __alloc);
+16535:       try
+16535:  {
+16535:    return std::__uninitialized_move_a(__first, __last, __mid, __alloc);
+16535:  }
+16535:       catch(...)
+16535:  {
+16535:    std::_Destroy(__result, __mid, __alloc);
+16535:    throw;
+16535:  }
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _InputIterator, typename _ForwardIterator, typename _Tp,
+16535:     typename _Allocator>
+16535:     inline void
+16535:     __uninitialized_move_fill(_InputIterator __first1, _InputIterator __last1,
+16535:          _ForwardIterator __first2,
+16535:          _ForwardIterator __last2, const _Tp& __x,
+16535:          _Allocator& __alloc)
+16535:     {
+16535:       _ForwardIterator __mid2 = std::__uninitialized_move_a(__first1, __last1,
+16535:            __first2,
+16535:            __alloc);
+16535:       try
+16535:  {
+16535:    std::__uninitialized_fill_a(__mid2, __last2, __x, __alloc);
+16535:  }
+16535:       catch(...)
+16535:  {
+16535:    std::_Destroy(__first2, __mid2, __alloc);
+16535:    throw;
+16535:  }
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<bool _TrivialValueType>
+16535:     struct __uninitialized_default_1
+16535:     {
+16535:       template<typename _ForwardIterator>
+16535:         static void
+16535:         __uninit_default(_ForwardIterator __first, _ForwardIterator __last)
+16535:         {
+16535:    _ForwardIterator __cur = __first;
+16535:    try
+16535:      {
+16535:        for (; __cur != __last; ++__cur)
+16535:   std::_Construct(std::__addressof(*__cur));
+16535:      }
+16535:    catch(...)
+16535:      {
+16535:        std::_Destroy(__first, __cur);
+16535:        throw;
+16535:      }
+16535:  }
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __uninitialized_default_1<true>
+16535:     {
+16535:       template<typename _ForwardIterator>
+16535:         static void
+16535:         __uninit_default(_ForwardIterator __first, _ForwardIterator __last)
+16535:         {
+16535:    typedef typename iterator_traits<_ForwardIterator>::value_type
+16535:      _ValueType;
+16535: 
+16535:    std::fill(__first, __last, _ValueType());
+16535:  }
+16535:     };
+16535: 
+16535:   template<bool _TrivialValueType>
+16535:     struct __uninitialized_default_n_1
+16535:     {
+16535:       template<typename _ForwardIterator, typename _Size>
+16535:         static _ForwardIterator
+16535:         __uninit_default_n(_ForwardIterator __first, _Size __n)
+16535:         {
+16535:    _ForwardIterator __cur = __first;
+16535:    try
+16535:      {
+16535:        for (; __n > 0; --__n, (void) ++__cur)
+16535:   std::_Construct(std::__addressof(*__cur));
+16535:        return __cur;
+16535:      }
+16535:    catch(...)
+16535:      {
+16535:        std::_Destroy(__first, __cur);
+16535:        throw;
+16535:      }
+16535:  }
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __uninitialized_default_n_1<true>
+16535:     {
+16535:       template<typename _ForwardIterator, typename _Size>
+16535:         static _ForwardIterator
+16535:         __uninit_default_n(_ForwardIterator __first, _Size __n)
+16535:         {
+16535:    typedef typename iterator_traits<_ForwardIterator>::value_type
+16535:      _ValueType;
+16535: 
+16535:    return std::fill_n(__first, __n, _ValueType());
+16535:  }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _ForwardIterator>
+16535:     inline void
+16535:     __uninitialized_default(_ForwardIterator __first,
+16535:        _ForwardIterator __last)
+16535:     {
+16535:       typedef typename iterator_traits<_ForwardIterator>::value_type
+16535:  _ValueType;
+16535: 
+16535:       const bool __assignable = is_copy_assignable<_ValueType>::value;
+16535: 
+16535:       std::__uninitialized_default_1<__is_trivial(_ValueType)
+16535:          && __assignable>::
+16535:  __uninit_default(__first, __last);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _ForwardIterator, typename _Size>
+16535:     inline _ForwardIterator
+16535:     __uninitialized_default_n(_ForwardIterator __first, _Size __n)
+16535:     {
+16535:       typedef typename iterator_traits<_ForwardIterator>::value_type
+16535:  _ValueType;
+16535: 
+16535:       const bool __assignable = is_copy_assignable<_ValueType>::value;
+16535: 
+16535:       return __uninitialized_default_n_1<__is_trivial(_ValueType)
+16535:            && __assignable>::
+16535:  __uninit_default_n(__first, __n);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _ForwardIterator, typename _Allocator>
+16535:     void
+16535:     __uninitialized_default_a(_ForwardIterator __first,
+16535:          _ForwardIterator __last,
+16535:          _Allocator& __alloc)
+16535:     {
+16535:       _ForwardIterator __cur = __first;
+16535:       try
+16535:  {
+16535:    typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
+16535:    for (; __cur != __last; ++__cur)
+16535:      __traits::construct(__alloc, std::__addressof(*__cur));
+16535:  }
+16535:       catch(...)
+16535:  {
+16535:    std::_Destroy(__first, __cur, __alloc);
+16535:    throw;
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _ForwardIterator, typename _Tp>
+16535:     inline void
+16535:     __uninitialized_default_a(_ForwardIterator __first,
+16535:          _ForwardIterator __last,
+16535:          allocator<_Tp>&)
+16535:     { std::__uninitialized_default(__first, __last); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _ForwardIterator, typename _Size, typename _Allocator>
+16535:     _ForwardIterator
+16535:     __uninitialized_default_n_a(_ForwardIterator __first, _Size __n,
+16535:     _Allocator& __alloc)
+16535:     {
+16535:       _ForwardIterator __cur = __first;
+16535:       try
+16535:  {
+16535:    typedef __gnu_cxx::__alloc_traits<_Allocator> __traits;
+16535:    for (; __n > 0; --__n, (void) ++__cur)
+16535:      __traits::construct(__alloc, std::__addressof(*__cur));
+16535:    return __cur;
+16535:  }
+16535:       catch(...)
+16535:  {
+16535:    std::_Destroy(__first, __cur, __alloc);
+16535:    throw;
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _ForwardIterator, typename _Size, typename _Tp>
+16535:     inline _ForwardIterator
+16535:     __uninitialized_default_n_a(_ForwardIterator __first, _Size __n,
+16535:     allocator<_Tp>&)
+16535:     { return std::__uninitialized_default_n(__first, __n); }
+16535: 
+16535:   template<bool _TrivialValueType>
+16535:     struct __uninitialized_default_novalue_1
+16535:     {
+16535:       template<typename _ForwardIterator>
+16535:  static void
+16535:  __uninit_default_novalue(_ForwardIterator __first,
+16535:      _ForwardIterator __last)
+16535:  {
+16535:    _ForwardIterator __cur = __first;
+16535:    try
+16535:      {
+16535:        for (; __cur != __last; ++__cur)
+16535:   std::_Construct_novalue(std::__addressof(*__cur));
+16535:      }
+16535:    catch(...)
+16535:      {
+16535:        std::_Destroy(__first, __cur);
+16535:        throw;
+16535:      }
+16535:  }
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __uninitialized_default_novalue_1<true>
+16535:     {
+16535:       template<typename _ForwardIterator>
+16535:         static void
+16535:         __uninit_default_novalue(_ForwardIterator __first,
+16535:      _ForwardIterator __last)
+16535:  {
+16535:  }
+16535:     };
+16535: 
+16535:   template<bool _TrivialValueType>
+16535:     struct __uninitialized_default_novalue_n_1
+16535:     {
+16535:       template<typename _ForwardIterator, typename _Size>
+16535:  static _ForwardIterator
+16535:  __uninit_default_novalue_n(_ForwardIterator __first, _Size __n)
+16535:  {
+16535:    _ForwardIterator __cur = __first;
+16535:    try
+16535:      {
+16535:        for (; __n > 0; --__n, (void) ++__cur)
+16535:   std::_Construct_novalue(std::__addressof(*__cur));
+16535:        return __cur;
+16535:      }
+16535:    catch(...)
+16535:      {
+16535:        std::_Destroy(__first, __cur);
+16535:        throw;
+16535:      }
+16535:  }
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct __uninitialized_default_novalue_n_1<true>
+16535:     {
+16535:       template<typename _ForwardIterator, typename _Size>
+16535:  static _ForwardIterator
+16535:  __uninit_default_novalue_n(_ForwardIterator __first, _Size __n)
+16535:  { return std::next(__first, __n); }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _ForwardIterator>
+16535:     inline void
+16535:     __uninitialized_default_novalue(_ForwardIterator __first,
+16535:         _ForwardIterator __last)
+16535:     {
+16535:       typedef typename iterator_traits<_ForwardIterator>::value_type
+16535:  _ValueType;
+16535: 
+16535:       std::__uninitialized_default_novalue_1<
+16535:  is_trivially_default_constructible<_ValueType>::value>::
+16535:  __uninit_default_novalue(__first, __last);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _ForwardIterator, typename _Size>
+16535:     inline _ForwardIterator
+16535:     __uninitialized_default_novalue_n(_ForwardIterator __first, _Size __n)
+16535:     {
+16535:       typedef typename iterator_traits<_ForwardIterator>::value_type
+16535:  _ValueType;
+16535: 
+16535:       return __uninitialized_default_novalue_n_1<
+16535:  is_trivially_default_constructible<_ValueType>::value>::
+16535:  __uninit_default_novalue_n(__first, __n);
+16535:     }
+16535: 
+16535:   template<typename _InputIterator, typename _Size,
+16535:     typename _ForwardIterator>
+16535:     _ForwardIterator
+16535:     __uninitialized_copy_n(_InputIterator __first, _Size __n,
+16535:       _ForwardIterator __result, input_iterator_tag)
+16535:     {
+16535:       _ForwardIterator __cur = __result;
+16535:       try
+16535:  {
+16535:    for (; __n > 0; --__n, (void) ++__first, ++__cur)
+16535:      std::_Construct(std::__addressof(*__cur), *__first);
+16535:    return __cur;
+16535:  }
+16535:       catch(...)
+16535:  {
+16535:    std::_Destroy(__result, __cur);
+16535:    throw;
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Size,
+16535:     typename _ForwardIterator>
+16535:     inline _ForwardIterator
+16535:     __uninitialized_copy_n(_RandomAccessIterator __first, _Size __n,
+16535:       _ForwardIterator __result,
+16535:       random_access_iterator_tag)
+16535:     { return std::uninitialized_copy(__first, __first + __n, __result); }
+16535: 
+16535:   template<typename _InputIterator, typename _Size,
+16535:     typename _ForwardIterator>
+16535:     pair<_InputIterator, _ForwardIterator>
+16535:     __uninitialized_copy_n_pair(_InputIterator __first, _Size __n,
+16535:       _ForwardIterator __result, input_iterator_tag)
+16535:     {
+16535:       _ForwardIterator __cur = __result;
+16535:       try
+16535:  {
+16535:    for (; __n > 0; --__n, (void) ++__first, ++__cur)
+16535:      std::_Construct(std::__addressof(*__cur), *__first);
+16535:    return {__first, __cur};
+16535:  }
+16535:       catch(...)
+16535:  {
+16535:    std::_Destroy(__result, __cur);
+16535:    throw;
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _RandomAccessIterator, typename _Size,
+16535:     typename _ForwardIterator>
+16535:     inline pair<_RandomAccessIterator, _ForwardIterator>
+16535:     __uninitialized_copy_n_pair(_RandomAccessIterator __first, _Size __n,
+16535:       _ForwardIterator __result,
+16535:       random_access_iterator_tag)
+16535:     {
+16535:       auto __second_res = uninitialized_copy(__first, __first + __n, __result);
+16535:       auto __first_res = std::next(__first, __n);
+16535:       return {__first_res, __second_res};
+16535:     }
+16535: # 810 "/usr/include/c++/8/bits/stl_uninitialized.h" 3
+16535:   template<typename _InputIterator, typename _Size, typename _ForwardIterator>
+16535:     inline _ForwardIterator
+16535:     uninitialized_copy_n(_InputIterator __first, _Size __n,
+16535:     _ForwardIterator __result)
+16535:     { return std::__uninitialized_copy_n(__first, __n, __result,
+16535:       std::__iterator_category(__first)); }
+16535: 
+16535:   template<typename _InputIterator, typename _Size, typename _ForwardIterator>
+16535:     inline pair<_InputIterator, _ForwardIterator>
+16535:     __uninitialized_copy_n_pair(_InputIterator __first, _Size __n,
+16535:          _ForwardIterator __result)
+16535:     {
+16535:       return
+16535:  std::__uninitialized_copy_n_pair(__first, __n, __result,
+16535:       std::__iterator_category(__first));
+16535:     }
+16535: # 882 "/usr/include/c++/8/bits/stl_uninitialized.h" 3
+16535: 
+16535: }
+16535: # 64 "/usr/include/c++/8/vector" 2 3
+16535: # 1 "/usr/include/c++/8/bits/stl_vector.h" 1 3
+16535: # 74 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     struct _Vector_base
+16535:     {
+16535:       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
+16535:  rebind<_Tp>::other _Tp_alloc_type;
+16535:       typedef typename __gnu_cxx::__alloc_traits<_Tp_alloc_type>::pointer
+16535:         pointer;
+16535: 
+16535:       struct _Vector_impl
+16535:       : public _Tp_alloc_type
+16535:       {
+16535:  pointer _M_start;
+16535:  pointer _M_finish;
+16535:  pointer _M_end_of_storage;
+16535: 
+16535:  _Vector_impl()
+16535:  : _Tp_alloc_type(), _M_start(), _M_finish(), _M_end_of_storage()
+16535:  { }
+16535: 
+16535:  _Vector_impl(_Tp_alloc_type const& __a) noexcept
+16535:  : _Tp_alloc_type(__a), _M_start(), _M_finish(), _M_end_of_storage()
+16535:  { }
+16535: 
+16535: 
+16535:  _Vector_impl(_Tp_alloc_type&& __a) noexcept
+16535:  : _Tp_alloc_type(std::move(__a)),
+16535:    _M_start(), _M_finish(), _M_end_of_storage()
+16535:  { }
+16535: 
+16535: 
+16535:  void _M_swap_data(_Vector_impl& __x) noexcept
+16535:  {
+16535:    std::swap(_M_start, __x._M_start);
+16535:    std::swap(_M_finish, __x._M_finish);
+16535:    std::swap(_M_end_of_storage, __x._M_end_of_storage);
+16535:  }
+16535: # 231 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       };
+16535: 
+16535:     public:
+16535:       typedef _Alloc allocator_type;
+16535: 
+16535:       _Tp_alloc_type&
+16535:       _M_get_Tp_allocator() noexcept
+16535:       { return *static_cast<_Tp_alloc_type*>(&this->_M_impl); }
+16535: 
+16535:       const _Tp_alloc_type&
+16535:       _M_get_Tp_allocator() const noexcept
+16535:       { return *static_cast<const _Tp_alloc_type*>(&this->_M_impl); }
+16535: 
+16535:       allocator_type
+16535:       get_allocator() const noexcept
+16535:       { return allocator_type(_M_get_Tp_allocator()); }
+16535: 
+16535:       _Vector_base()
+16535:       : _M_impl() { }
+16535: 
+16535:       _Vector_base(const allocator_type& __a) noexcept
+16535:       : _M_impl(__a) { }
+16535: 
+16535:       _Vector_base(size_t __n)
+16535:       : _M_impl()
+16535:       { _M_create_storage(__n); }
+16535: 
+16535:       _Vector_base(size_t __n, const allocator_type& __a)
+16535:       : _M_impl(__a)
+16535:       { _M_create_storage(__n); }
+16535: 
+16535: 
+16535:       _Vector_base(_Tp_alloc_type&& __a) noexcept
+16535:       : _M_impl(std::move(__a)) { }
+16535: 
+16535:       _Vector_base(_Vector_base&& __x) noexcept
+16535:       : _M_impl(std::move(__x._M_get_Tp_allocator()))
+16535:       { this->_M_impl._M_swap_data(__x._M_impl); }
+16535: 
+16535:       _Vector_base(_Vector_base&& __x, const allocator_type& __a)
+16535:       : _M_impl(__a)
+16535:       {
+16535:  if (__x.get_allocator() == __a)
+16535:    this->_M_impl._M_swap_data(__x._M_impl);
+16535:  else
+16535:    {
+16535:      size_t __n = __x._M_impl._M_finish - __x._M_impl._M_start;
+16535:      _M_create_storage(__n);
+16535:    }
+16535:       }
+16535: 
+16535: 
+16535:       ~_Vector_base() noexcept
+16535:       {
+16535:  _M_deallocate(_M_impl._M_start,
+16535:         _M_impl._M_end_of_storage - _M_impl._M_start);
+16535:       }
+16535: 
+16535:     public:
+16535:       _Vector_impl _M_impl;
+16535: 
+16535:       pointer
+16535:       _M_allocate(size_t __n)
+16535:       {
+16535:  typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tr;
+16535:  return __n != 0 ? _Tr::allocate(_M_impl, __n) : pointer();
+16535:       }
+16535: 
+16535:       void
+16535:       _M_deallocate(pointer __p, size_t __n)
+16535:       {
+16535:  typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tr;
+16535:  if (__p)
+16535:    _Tr::deallocate(_M_impl, __p, __n);
+16535:       }
+16535: 
+16535:     private:
+16535:       void
+16535:       _M_create_storage(size_t __n)
+16535:       {
+16535:  this->_M_impl._M_start = this->_M_allocate(__n);
+16535:  this->_M_impl._M_finish = this->_M_impl._M_start;
+16535:  this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
+16535:       }
+16535:     };
+16535: # 338 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:   template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
+16535:     class vector : protected _Vector_base<_Tp, _Alloc>
+16535:     {
+16535: # 351 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       static_assert(is_same<typename remove_cv<_Tp>::type, _Tp>::value,
+16535:    "std::vector must have a non-const, non-volatile value_type");
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       typedef _Vector_base<_Tp, _Alloc> _Base;
+16535:       typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
+16535:       typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Alloc_traits;
+16535: 
+16535:     public:
+16535:       typedef _Tp value_type;
+16535:       typedef typename _Base::pointer pointer;
+16535:       typedef typename _Alloc_traits::const_pointer const_pointer;
+16535:       typedef typename _Alloc_traits::reference reference;
+16535:       typedef typename _Alloc_traits::const_reference const_reference;
+16535:       typedef __gnu_cxx::__normal_iterator<pointer, vector> iterator;
+16535:       typedef __gnu_cxx::__normal_iterator<const_pointer, vector>
+16535:       const_iterator;
+16535:       typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+16535:       typedef std::reverse_iterator<iterator> reverse_iterator;
+16535:       typedef size_t size_type;
+16535:       typedef ptrdiff_t difference_type;
+16535:       typedef _Alloc allocator_type;
+16535: 
+16535:     protected:
+16535:       using _Base::_M_allocate;
+16535:       using _Base::_M_deallocate;
+16535:       using _Base::_M_impl;
+16535:       using _Base::_M_get_Tp_allocator;
+16535: 
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       vector()
+16535: 
+16535:       noexcept(is_nothrow_default_constructible<_Alloc>::value)
+16535: 
+16535:       : _Base() { }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       explicit
+16535:       vector(const allocator_type& __a) noexcept
+16535:       : _Base(__a) { }
+16535: # 414 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       explicit
+16535:       vector(size_type __n, const allocator_type& __a = allocator_type())
+16535:       : _Base(__n, __a)
+16535:       { _M_default_initialize(__n); }
+16535: # 427 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       vector(size_type __n, const value_type& __value,
+16535:       const allocator_type& __a = allocator_type())
+16535:       : _Base(__n, __a)
+16535:       { _M_fill_initialize(__n, __value); }
+16535: # 458 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       vector(const vector& __x)
+16535:       : _Base(__x.size(),
+16535:  _Alloc_traits::_S_select_on_copy(__x._M_get_Tp_allocator()))
+16535:       {
+16535:  this->_M_impl._M_finish =
+16535:    std::__uninitialized_copy_a(__x.begin(), __x.end(),
+16535:           this->_M_impl._M_start,
+16535:           _M_get_Tp_allocator());
+16535:       }
+16535: # 476 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       vector(vector&& __x) noexcept
+16535:       : _Base(std::move(__x)) { }
+16535: 
+16535: 
+16535:       vector(const vector& __x, const allocator_type& __a)
+16535:       : _Base(__x.size(), __a)
+16535:       {
+16535:  this->_M_impl._M_finish =
+16535:    std::__uninitialized_copy_a(__x.begin(), __x.end(),
+16535:           this->_M_impl._M_start,
+16535:           _M_get_Tp_allocator());
+16535:       }
+16535: 
+16535: 
+16535:       vector(vector&& __rv, const allocator_type& __m)
+16535:       noexcept(_Alloc_traits::_S_always_equal())
+16535:       : _Base(std::move(__rv), __m)
+16535:       {
+16535:  if (__rv.get_allocator() != __m)
+16535:    {
+16535:      this->_M_impl._M_finish =
+16535:        std::__uninitialized_move_a(__rv.begin(), __rv.end(),
+16535:        this->_M_impl._M_start,
+16535:        _M_get_Tp_allocator());
+16535:      __rv.clear();
+16535:    }
+16535:       }
+16535: # 515 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       vector(initializer_list<value_type> __l,
+16535:       const allocator_type& __a = allocator_type())
+16535:       : _Base(__a)
+16535:       {
+16535:  _M_range_initialize(__l.begin(), __l.end(),
+16535:        random_access_iterator_tag());
+16535:       }
+16535: # 541 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       template<typename _InputIterator,
+16535:         typename = std::_RequireInputIter<_InputIterator>>
+16535:  vector(_InputIterator __first, _InputIterator __last,
+16535:         const allocator_type& __a = allocator_type())
+16535:  : _Base(__a)
+16535:  { _M_initialize_dispatch(__first, __last, __false_type()); }
+16535: # 565 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       ~vector() noexcept
+16535:       {
+16535:  std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
+16535:         _M_get_Tp_allocator());
+16535:  ;
+16535:       }
+16535: # 581 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       vector&
+16535:       operator=(const vector& __x);
+16535: # 595 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       vector&
+16535:       operator=(vector&& __x) noexcept(_Alloc_traits::_S_nothrow_move())
+16535:       {
+16535:  constexpr bool __move_storage =
+16535:    _Alloc_traits::_S_propagate_on_move_assign()
+16535:    || _Alloc_traits::_S_always_equal();
+16535:  _M_move_assign(std::move(__x), __bool_constant<__move_storage>());
+16535:  return *this;
+16535:       }
+16535: # 616 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       vector&
+16535:       operator=(initializer_list<value_type> __l)
+16535:       {
+16535:  this->_M_assign_aux(__l.begin(), __l.end(),
+16535:        random_access_iterator_tag());
+16535:  return *this;
+16535:       }
+16535: # 635 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       void
+16535:       assign(size_type __n, const value_type& __val)
+16535:       { _M_fill_assign(__n, __val); }
+16535: # 652 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       template<typename _InputIterator,
+16535:         typename = std::_RequireInputIter<_InputIterator>>
+16535:  void
+16535:  assign(_InputIterator __first, _InputIterator __last)
+16535:  { _M_assign_dispatch(__first, __last, __false_type()); }
+16535: # 680 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       void
+16535:       assign(initializer_list<value_type> __l)
+16535:       {
+16535:  this->_M_assign_aux(__l.begin(), __l.end(),
+16535:        random_access_iterator_tag());
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       using _Base::get_allocator;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       begin() noexcept
+16535:       { return iterator(this->_M_impl._M_start); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       begin() const noexcept
+16535:       { return const_iterator(this->_M_impl._M_start); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       end() noexcept
+16535:       { return iterator(this->_M_impl._M_finish); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       end() const noexcept
+16535:       { return const_iterator(this->_M_impl._M_finish); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       rbegin() noexcept
+16535:       { return reverse_iterator(end()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       rbegin() const noexcept
+16535:       { return const_reverse_iterator(end()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       rend() noexcept
+16535:       { return reverse_iterator(begin()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       rend() const noexcept
+16535:       { return const_reverse_iterator(begin()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       cbegin() const noexcept
+16535:       { return const_iterator(this->_M_impl._M_start); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       cend() const noexcept
+16535:       { return const_iterator(this->_M_impl._M_finish); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       crbegin() const noexcept
+16535:       { return const_reverse_iterator(end()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       crend() const noexcept
+16535:       { return const_reverse_iterator(begin()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       size_type
+16535:       size() const noexcept
+16535:       { return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); }
+16535: 
+16535: 
+16535:       size_type
+16535:       max_size() const noexcept
+16535:       { return _Alloc_traits::max_size(_M_get_Tp_allocator()); }
+16535: # 823 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       void
+16535:       resize(size_type __new_size)
+16535:       {
+16535:  if (__new_size > size())
+16535:    _M_default_append(__new_size - size());
+16535:  else if (__new_size < size())
+16535:    _M_erase_at_end(this->_M_impl._M_start + __new_size);
+16535:       }
+16535: # 843 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       void
+16535:       resize(size_type __new_size, const value_type& __x)
+16535:       {
+16535:  if (__new_size > size())
+16535:    _M_fill_insert(end(), __new_size - size(), __x);
+16535:  else if (__new_size < size())
+16535:    _M_erase_at_end(this->_M_impl._M_start + __new_size);
+16535:       }
+16535: # 875 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       void
+16535:       shrink_to_fit()
+16535:       { _M_shrink_to_fit(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       size_type
+16535:       capacity() const noexcept
+16535:       { return size_type(this->_M_impl._M_end_of_storage
+16535:     - this->_M_impl._M_start); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       bool
+16535:       empty() const noexcept
+16535:       { return begin() == end(); }
+16535: # 914 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       void
+16535:       reserve(size_type __n);
+16535: # 929 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       reference
+16535:       operator[](size_type __n) noexcept
+16535:       {
+16535:  ;
+16535:  return *(this->_M_impl._M_start + __n);
+16535:       }
+16535: # 947 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       const_reference
+16535:       operator[](size_type __n) const noexcept
+16535:       {
+16535:  ;
+16535:  return *(this->_M_impl._M_start + __n);
+16535:       }
+16535: 
+16535:     protected:
+16535: 
+16535:       void
+16535:       _M_range_check(size_type __n) const
+16535:       {
+16535:  if (__n >= this->size())
+16535:    __throw_out_of_range_fmt(("vector::_M_range_check: __n " "(which is %zu) >= this->size() " "(which is %zu)")
+16535: 
+16535:                             ,
+16535:        __n, this->size());
+16535:       }
+16535: 
+16535:     public:
+16535: # 978 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       reference
+16535:       at(size_type __n)
+16535:       {
+16535:  _M_range_check(__n);
+16535:  return (*this)[__n];
+16535:       }
+16535: # 996 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       const_reference
+16535:       at(size_type __n) const
+16535:       {
+16535:  _M_range_check(__n);
+16535:  return (*this)[__n];
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reference
+16535:       front() noexcept
+16535:       {
+16535:  ;
+16535:  return *begin();
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reference
+16535:       front() const noexcept
+16535:       {
+16535:  ;
+16535:  return *begin();
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reference
+16535:       back() noexcept
+16535:       {
+16535:  ;
+16535:  return *(end() - 1);
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reference
+16535:       back() const noexcept
+16535:       {
+16535:  ;
+16535:  return *(end() - 1);
+16535:       }
+16535: # 1054 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       _Tp*
+16535:       data() noexcept
+16535:       { return _M_data_ptr(this->_M_impl._M_start); }
+16535: 
+16535:       const _Tp*
+16535:       data() const noexcept
+16535:       { return _M_data_ptr(this->_M_impl._M_start); }
+16535: # 1073 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       void
+16535:       push_back(const value_type& __x)
+16535:       {
+16535:  if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
+16535:    {
+16535:      ;
+16535:      _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
+16535:          __x);
+16535:      ++this->_M_impl._M_finish;
+16535:      ;
+16535:    }
+16535:  else
+16535:    _M_realloc_insert(end(), __x);
+16535:       }
+16535: 
+16535: 
+16535:       void
+16535:       push_back(value_type&& __x)
+16535:       { emplace_back(std::move(__x)); }
+16535: 
+16535:       template<typename... _Args>
+16535: 
+16535: 
+16535: 
+16535:  void
+16535: 
+16535:  emplace_back(_Args&&... __args);
+16535: # 1111 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       void
+16535:       pop_back() noexcept
+16535:       {
+16535:  ;
+16535:  --this->_M_impl._M_finish;
+16535:  _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish);
+16535:  ;
+16535:       }
+16535: # 1133 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       template<typename... _Args>
+16535:  iterator
+16535:  emplace(const_iterator __position, _Args&&... __args)
+16535:  { return _M_emplace_aux(__position, std::forward<_Args>(__args)...); }
+16535: # 1149 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       iterator
+16535:       insert(const_iterator __position, const value_type& __x);
+16535: # 1179 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       iterator
+16535:       insert(const_iterator __position, value_type&& __x)
+16535:       { return _M_insert_rval(__position, std::move(__x)); }
+16535: # 1196 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       iterator
+16535:       insert(const_iterator __position, initializer_list<value_type> __l)
+16535:       {
+16535:  auto __offset = __position - cbegin();
+16535:  _M_range_insert(begin() + __offset, __l.begin(), __l.end(),
+16535:    std::random_access_iterator_tag());
+16535:  return begin() + __offset;
+16535:       }
+16535: # 1221 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       iterator
+16535:       insert(const_iterator __position, size_type __n, const value_type& __x)
+16535:       {
+16535:  difference_type __offset = __position - cbegin();
+16535:  _M_fill_insert(begin() + __offset, __n, __x);
+16535:  return begin() + __offset;
+16535:       }
+16535: # 1263 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       template<typename _InputIterator,
+16535:         typename = std::_RequireInputIter<_InputIterator>>
+16535:  iterator
+16535:  insert(const_iterator __position, _InputIterator __first,
+16535:         _InputIterator __last)
+16535:  {
+16535:    difference_type __offset = __position - cbegin();
+16535:    _M_insert_dispatch(begin() + __offset,
+16535:         __first, __last, __false_type());
+16535:    return begin() + __offset;
+16535:  }
+16535: # 1315 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       iterator
+16535: 
+16535:       erase(const_iterator __position)
+16535:       { return _M_erase(begin() + (__position - cbegin())); }
+16535: # 1342 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       iterator
+16535: 
+16535:       erase(const_iterator __first, const_iterator __last)
+16535:       {
+16535:  const auto __beg = begin();
+16535:  const auto __cbeg = cbegin();
+16535:  return _M_erase(__beg + (__first - __cbeg), __beg + (__last - __cbeg));
+16535:       }
+16535: # 1366 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       void
+16535:       swap(vector& __x) noexcept
+16535:       {
+16535: 
+16535: 
+16535:                                                           ;
+16535: 
+16535:  this->_M_impl._M_swap_data(__x._M_impl);
+16535:  _Alloc_traits::_S_on_swap(_M_get_Tp_allocator(),
+16535:       __x._M_get_Tp_allocator());
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       clear() noexcept
+16535:       { _M_erase_at_end(this->_M_impl._M_start); }
+16535: 
+16535:     protected:
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       template<typename _ForwardIterator>
+16535:  pointer
+16535:  _M_allocate_and_copy(size_type __n,
+16535:         _ForwardIterator __first, _ForwardIterator __last)
+16535:  {
+16535:    pointer __result = this->_M_allocate(__n);
+16535:    try
+16535:      {
+16535:        std::__uninitialized_copy_a(__first, __last, __result,
+16535:        _M_get_Tp_allocator());
+16535:        return __result;
+16535:      }
+16535:    catch(...)
+16535:      {
+16535:        _M_deallocate(__result, __n);
+16535:        throw;
+16535:      }
+16535:  }
+16535: # 1419 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       template<typename _Integer>
+16535:  void
+16535:  _M_initialize_dispatch(_Integer __n, _Integer __value, __true_type)
+16535:  {
+16535:    this->_M_impl._M_start = _M_allocate(static_cast<size_type>(__n));
+16535:    this->_M_impl._M_end_of_storage =
+16535:      this->_M_impl._M_start + static_cast<size_type>(__n);
+16535:    _M_fill_initialize(static_cast<size_type>(__n), __value);
+16535:  }
+16535: 
+16535: 
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
+16535:           __false_type)
+16535:  {
+16535:    typedef typename std::iterator_traits<_InputIterator>::
+16535:      iterator_category _IterCategory;
+16535:    _M_range_initialize(__first, __last, _IterCategory());
+16535:  }
+16535: 
+16535: 
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  _M_range_initialize(_InputIterator __first, _InputIterator __last,
+16535:        std::input_iterator_tag)
+16535:  {
+16535:    try {
+16535:      for (; __first != __last; ++__first)
+16535: 
+16535:        emplace_back(*__first);
+16535: 
+16535: 
+16535: 
+16535:    } catch(...) {
+16535:      clear();
+16535:      throw;
+16535:    }
+16535:  }
+16535: 
+16535: 
+16535:       template<typename _ForwardIterator>
+16535:  void
+16535:  _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last,
+16535:        std::forward_iterator_tag)
+16535:  {
+16535:    const size_type __n = std::distance(__first, __last);
+16535:    this->_M_impl._M_start = this->_M_allocate(__n);
+16535:    this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
+16535:    this->_M_impl._M_finish =
+16535:      std::__uninitialized_copy_a(__first, __last,
+16535:      this->_M_impl._M_start,
+16535:      _M_get_Tp_allocator());
+16535:  }
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_fill_initialize(size_type __n, const value_type& __value)
+16535:       {
+16535:  this->_M_impl._M_finish =
+16535:    std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, __value,
+16535:      _M_get_Tp_allocator());
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_default_initialize(size_type __n)
+16535:       {
+16535:  this->_M_impl._M_finish =
+16535:    std::__uninitialized_default_n_a(this->_M_impl._M_start, __n,
+16535:         _M_get_Tp_allocator());
+16535:       }
+16535: # 1502 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       template<typename _Integer>
+16535:  void
+16535:  _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
+16535:  { _M_fill_assign(__n, __val); }
+16535: 
+16535: 
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  _M_assign_dispatch(_InputIterator __first, _InputIterator __last,
+16535:       __false_type)
+16535:  { _M_assign_aux(__first, __last, std::__iterator_category(__first)); }
+16535: 
+16535: 
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  _M_assign_aux(_InputIterator __first, _InputIterator __last,
+16535:         std::input_iterator_tag);
+16535: 
+16535: 
+16535:       template<typename _ForwardIterator>
+16535:  void
+16535:  _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
+16535:         std::forward_iterator_tag);
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_fill_assign(size_type __n, const value_type& __val);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Integer>
+16535:  void
+16535:  _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __val,
+16535:       __true_type)
+16535:  { _M_fill_insert(__pos, __n, __val); }
+16535: 
+16535: 
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  _M_insert_dispatch(iterator __pos, _InputIterator __first,
+16535:       _InputIterator __last, __false_type)
+16535:  {
+16535:    _M_range_insert(__pos, __first, __last,
+16535:      std::__iterator_category(__first));
+16535:  }
+16535: 
+16535: 
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  _M_range_insert(iterator __pos, _InputIterator __first,
+16535:    _InputIterator __last, std::input_iterator_tag);
+16535: 
+16535: 
+16535:       template<typename _ForwardIterator>
+16535:  void
+16535:  _M_range_insert(iterator __pos, _ForwardIterator __first,
+16535:    _ForwardIterator __last, std::forward_iterator_tag);
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_fill_insert(iterator __pos, size_type __n, const value_type& __x);
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_default_append(size_type __n);
+16535: 
+16535:       bool
+16535:       _M_shrink_to_fit();
+16535: # 1589 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:       struct _Temporary_value
+16535:       {
+16535:  template<typename... _Args>
+16535:    explicit
+16535:    _Temporary_value(vector* __vec, _Args&&... __args) : _M_this(__vec)
+16535:    {
+16535:      _Alloc_traits::construct(_M_this->_M_impl, _M_ptr(),
+16535:          std::forward<_Args>(__args)...);
+16535:    }
+16535: 
+16535:  ~_Temporary_value()
+16535:  { _Alloc_traits::destroy(_M_this->_M_impl, _M_ptr()); }
+16535: 
+16535:  value_type&
+16535:  _M_val() { return *reinterpret_cast<_Tp*>(&__buf); }
+16535: 
+16535:       private:
+16535:  pointer
+16535:  _M_ptr() { return pointer_traits<pointer>::pointer_to(_M_val()); }
+16535: 
+16535:  vector* _M_this;
+16535:  typename aligned_storage<sizeof(_Tp), alignof(_Tp)>::type __buf;
+16535:       };
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Arg>
+16535:  void
+16535:  _M_insert_aux(iterator __position, _Arg&& __arg);
+16535: 
+16535:       template<typename... _Args>
+16535:  void
+16535:  _M_realloc_insert(iterator __position, _Args&&... __args);
+16535: 
+16535: 
+16535:       iterator
+16535:       _M_insert_rval(const_iterator __position, value_type&& __v);
+16535: 
+16535: 
+16535:       template<typename... _Args>
+16535:  iterator
+16535:  _M_emplace_aux(const_iterator __position, _Args&&... __args);
+16535: 
+16535: 
+16535:       iterator
+16535:       _M_emplace_aux(const_iterator __position, value_type&& __v)
+16535:       { return _M_insert_rval(__position, std::move(__v)); }
+16535: 
+16535: 
+16535: 
+16535:       size_type
+16535:       _M_check_len(size_type __n, const char* __s) const
+16535:       {
+16535:  if (max_size() - size() < __n)
+16535:    __throw_length_error((__s));
+16535: 
+16535:  const size_type __len = size() + std::max(size(), __n);
+16535:  return (__len < size() || __len > max_size()) ? max_size() : __len;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_erase_at_end(pointer __pos) noexcept
+16535:       {
+16535:  if (size_type __n = this->_M_impl._M_finish - __pos)
+16535:    {
+16535:      std::_Destroy(__pos, this->_M_impl._M_finish,
+16535:      _M_get_Tp_allocator());
+16535:      this->_M_impl._M_finish = __pos;
+16535:      ;
+16535:    }
+16535:       }
+16535: 
+16535:       iterator
+16535:       _M_erase(iterator __position);
+16535: 
+16535:       iterator
+16535:       _M_erase(iterator __first, iterator __last);
+16535: 
+16535: 
+16535:     private:
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_move_assign(vector&& __x, std::true_type) noexcept
+16535:       {
+16535:  vector __tmp(get_allocator());
+16535:  this->_M_impl._M_swap_data(__tmp._M_impl);
+16535:  this->_M_impl._M_swap_data(__x._M_impl);
+16535:  std::__alloc_on_move(_M_get_Tp_allocator(), __x._M_get_Tp_allocator());
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_move_assign(vector&& __x, std::false_type)
+16535:       {
+16535:  if (__x._M_get_Tp_allocator() == this->_M_get_Tp_allocator())
+16535:    _M_move_assign(std::move(__x), std::true_type());
+16535:  else
+16535:    {
+16535: 
+16535: 
+16535:      this->assign(std::__make_move_if_noexcept_iterator(__x.begin()),
+16535:     std::__make_move_if_noexcept_iterator(__x.end()));
+16535:      __x.clear();
+16535:    }
+16535:       }
+16535: 
+16535: 
+16535:       template<typename _Up>
+16535:  _Up*
+16535:  _M_data_ptr(_Up* __ptr) const noexcept
+16535:  { return __ptr; }
+16535: 
+16535: 
+16535:       template<typename _Ptr>
+16535:  typename std::pointer_traits<_Ptr>::element_type*
+16535:  _M_data_ptr(_Ptr __ptr) const
+16535:  { return empty() ? nullptr : std::__to_address(__ptr); }
+16535: # 1729 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:     };
+16535: # 1751 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:   template<typename _Tp, typename _Alloc>
+16535:     inline bool
+16535:     operator==(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
+16535:     { return (__x.size() == __y.size()
+16535:        && std::equal(__x.begin(), __x.end(), __y.begin())); }
+16535: # 1768 "/usr/include/c++/8/bits/stl_vector.h" 3
+16535:   template<typename _Tp, typename _Alloc>
+16535:     inline bool
+16535:     operator<(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
+16535:     { return std::lexicographical_compare(__x.begin(), __x.end(),
+16535:        __y.begin(), __y.end()); }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     inline bool
+16535:     operator!=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
+16535:     { return !(__x == __y); }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     inline bool
+16535:     operator>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
+16535:     { return __y < __x; }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     inline bool
+16535:     operator<=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
+16535:     { return !(__y < __x); }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     inline bool
+16535:     operator>=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
+16535:     { return !(__x < __y); }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     inline void
+16535:     swap(vector<_Tp, _Alloc>& __x, vector<_Tp, _Alloc>& __y)
+16535:     noexcept(noexcept(__x.swap(__y)))
+16535:     { __x.swap(__y); }
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 65 "/usr/include/c++/8/vector" 2 3
+16535: # 1 "/usr/include/c++/8/bits/stl_bvector.h" 1 3
+16535: # 64 "/usr/include/c++/8/bits/stl_bvector.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535:   typedef unsigned long _Bit_type;
+16535:   enum { _S_word_bit = int(8 * sizeof(_Bit_type)) };
+16535: 
+16535:   struct _Bit_reference
+16535:   {
+16535:     _Bit_type * _M_p;
+16535:     _Bit_type _M_mask;
+16535: 
+16535:     _Bit_reference(_Bit_type * __x, _Bit_type __y)
+16535:     : _M_p(__x), _M_mask(__y) { }
+16535: 
+16535:     _Bit_reference() noexcept : _M_p(0), _M_mask(0) { }
+16535: 
+16535:     operator bool() const noexcept
+16535:     { return !!(*_M_p & _M_mask); }
+16535: 
+16535:     _Bit_reference&
+16535:     operator=(bool __x) noexcept
+16535:     {
+16535:       if (__x)
+16535:  *_M_p |= _M_mask;
+16535:       else
+16535:  *_M_p &= ~_M_mask;
+16535:       return *this;
+16535:     }
+16535: 
+16535:     _Bit_reference&
+16535:     operator=(const _Bit_reference& __x) noexcept
+16535:     { return *this = bool(__x); }
+16535: 
+16535:     bool
+16535:     operator==(const _Bit_reference& __x) const
+16535:     { return bool(*this) == bool(__x); }
+16535: 
+16535:     bool
+16535:     operator<(const _Bit_reference& __x) const
+16535:     { return !bool(*this) && bool(__x); }
+16535: 
+16535:     void
+16535:     flip() noexcept
+16535:     { *_M_p ^= _M_mask; }
+16535:   };
+16535: 
+16535: 
+16535:   inline void
+16535:   swap(_Bit_reference __x, _Bit_reference __y) noexcept
+16535:   {
+16535:     bool __tmp = __x;
+16535:     __x = __y;
+16535:     __y = __tmp;
+16535:   }
+16535: 
+16535:   inline void
+16535:   swap(_Bit_reference __x, bool& __y) noexcept
+16535:   {
+16535:     bool __tmp = __x;
+16535:     __x = __y;
+16535:     __y = __tmp;
+16535:   }
+16535: 
+16535:   inline void
+16535:   swap(bool& __x, _Bit_reference __y) noexcept
+16535:   {
+16535:     bool __tmp = __x;
+16535:     __x = __y;
+16535:     __y = __tmp;
+16535:   }
+16535: 
+16535: 
+16535:   struct _Bit_iterator_base
+16535:   : public std::iterator<std::random_access_iterator_tag, bool>
+16535:   {
+16535:     _Bit_type * _M_p;
+16535:     unsigned int _M_offset;
+16535: 
+16535:     _Bit_iterator_base(_Bit_type * __x, unsigned int __y)
+16535:     : _M_p(__x), _M_offset(__y) { }
+16535: 
+16535:     void
+16535:     _M_bump_up()
+16535:     {
+16535:       if (_M_offset++ == int(_S_word_bit) - 1)
+16535:  {
+16535:    _M_offset = 0;
+16535:    ++_M_p;
+16535:  }
+16535:     }
+16535: 
+16535:     void
+16535:     _M_bump_down()
+16535:     {
+16535:       if (_M_offset-- == 0)
+16535:  {
+16535:    _M_offset = int(_S_word_bit) - 1;
+16535:    --_M_p;
+16535:  }
+16535:     }
+16535: 
+16535:     void
+16535:     _M_incr(ptrdiff_t __i)
+16535:     {
+16535:       difference_type __n = __i + _M_offset;
+16535:       _M_p += __n / int(_S_word_bit);
+16535:       __n = __n % int(_S_word_bit);
+16535:       if (__n < 0)
+16535:  {
+16535:    __n += int(_S_word_bit);
+16535:    --_M_p;
+16535:  }
+16535:       _M_offset = static_cast<unsigned int>(__n);
+16535:     }
+16535: 
+16535:     bool
+16535:     operator==(const _Bit_iterator_base& __i) const
+16535:     { return _M_p == __i._M_p && _M_offset == __i._M_offset; }
+16535: 
+16535:     bool
+16535:     operator<(const _Bit_iterator_base& __i) const
+16535:     {
+16535:       return _M_p < __i._M_p
+16535:      || (_M_p == __i._M_p && _M_offset < __i._M_offset);
+16535:     }
+16535: 
+16535:     bool
+16535:     operator!=(const _Bit_iterator_base& __i) const
+16535:     { return !(*this == __i); }
+16535: 
+16535:     bool
+16535:     operator>(const _Bit_iterator_base& __i) const
+16535:     { return __i < *this; }
+16535: 
+16535:     bool
+16535:     operator<=(const _Bit_iterator_base& __i) const
+16535:     { return !(__i < *this); }
+16535: 
+16535:     bool
+16535:     operator>=(const _Bit_iterator_base& __i) const
+16535:     { return !(*this < __i); }
+16535:   };
+16535: 
+16535:   inline ptrdiff_t
+16535:   operator-(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y)
+16535:   {
+16535:     return (int(_S_word_bit) * (__x._M_p - __y._M_p)
+16535:      + __x._M_offset - __y._M_offset);
+16535:   }
+16535: 
+16535:   struct _Bit_iterator : public _Bit_iterator_base
+16535:   {
+16535:     typedef _Bit_reference reference;
+16535:     typedef _Bit_reference* pointer;
+16535:     typedef _Bit_iterator iterator;
+16535: 
+16535:     _Bit_iterator() : _Bit_iterator_base(0, 0) { }
+16535: 
+16535:     _Bit_iterator(_Bit_type * __x, unsigned int __y)
+16535:     : _Bit_iterator_base(__x, __y) { }
+16535: 
+16535:     iterator
+16535:     _M_const_cast() const
+16535:     { return *this; }
+16535: 
+16535:     reference
+16535:     operator*() const
+16535:     { return reference(_M_p, 1UL << _M_offset); }
+16535: 
+16535:     iterator&
+16535:     operator++()
+16535:     {
+16535:       _M_bump_up();
+16535:       return *this;
+16535:     }
+16535: 
+16535:     iterator
+16535:     operator++(int)
+16535:     {
+16535:       iterator __tmp = *this;
+16535:       _M_bump_up();
+16535:       return __tmp;
+16535:     }
+16535: 
+16535:     iterator&
+16535:     operator--()
+16535:     {
+16535:       _M_bump_down();
+16535:       return *this;
+16535:     }
+16535: 
+16535:     iterator
+16535:     operator--(int)
+16535:     {
+16535:       iterator __tmp = *this;
+16535:       _M_bump_down();
+16535:       return __tmp;
+16535:     }
+16535: 
+16535:     iterator&
+16535:     operator+=(difference_type __i)
+16535:     {
+16535:       _M_incr(__i);
+16535:       return *this;
+16535:     }
+16535: 
+16535:     iterator&
+16535:     operator-=(difference_type __i)
+16535:     {
+16535:       *this += -__i;
+16535:       return *this;
+16535:     }
+16535: 
+16535:     iterator
+16535:     operator+(difference_type __i) const
+16535:     {
+16535:       iterator __tmp = *this;
+16535:       return __tmp += __i;
+16535:     }
+16535: 
+16535:     iterator
+16535:     operator-(difference_type __i) const
+16535:     {
+16535:       iterator __tmp = *this;
+16535:       return __tmp -= __i;
+16535:     }
+16535: 
+16535:     reference
+16535:     operator[](difference_type __i) const
+16535:     { return *(*this + __i); }
+16535:   };
+16535: 
+16535:   inline _Bit_iterator
+16535:   operator+(ptrdiff_t __n, const _Bit_iterator& __x)
+16535:   { return __x + __n; }
+16535: 
+16535:   struct _Bit_const_iterator : public _Bit_iterator_base
+16535:   {
+16535:     typedef bool reference;
+16535:     typedef bool const_reference;
+16535:     typedef const bool* pointer;
+16535:     typedef _Bit_const_iterator const_iterator;
+16535: 
+16535:     _Bit_const_iterator() : _Bit_iterator_base(0, 0) { }
+16535: 
+16535:     _Bit_const_iterator(_Bit_type * __x, unsigned int __y)
+16535:     : _Bit_iterator_base(__x, __y) { }
+16535: 
+16535:     _Bit_const_iterator(const _Bit_iterator& __x)
+16535:     : _Bit_iterator_base(__x._M_p, __x._M_offset) { }
+16535: 
+16535:     _Bit_iterator
+16535:     _M_const_cast() const
+16535:     { return _Bit_iterator(_M_p, _M_offset); }
+16535: 
+16535:     const_reference
+16535:     operator*() const
+16535:     { return _Bit_reference(_M_p, 1UL << _M_offset); }
+16535: 
+16535:     const_iterator&
+16535:     operator++()
+16535:     {
+16535:       _M_bump_up();
+16535:       return *this;
+16535:     }
+16535: 
+16535:     const_iterator
+16535:     operator++(int)
+16535:     {
+16535:       const_iterator __tmp = *this;
+16535:       _M_bump_up();
+16535:       return __tmp;
+16535:     }
+16535: 
+16535:     const_iterator&
+16535:     operator--()
+16535:     {
+16535:       _M_bump_down();
+16535:       return *this;
+16535:     }
+16535: 
+16535:     const_iterator
+16535:     operator--(int)
+16535:     {
+16535:       const_iterator __tmp = *this;
+16535:       _M_bump_down();
+16535:       return __tmp;
+16535:     }
+16535: 
+16535:     const_iterator&
+16535:     operator+=(difference_type __i)
+16535:     {
+16535:       _M_incr(__i);
+16535:       return *this;
+16535:     }
+16535: 
+16535:     const_iterator&
+16535:     operator-=(difference_type __i)
+16535:     {
+16535:       *this += -__i;
+16535:       return *this;
+16535:     }
+16535: 
+16535:     const_iterator
+16535:     operator+(difference_type __i) const
+16535:     {
+16535:       const_iterator __tmp = *this;
+16535:       return __tmp += __i;
+16535:     }
+16535: 
+16535:     const_iterator
+16535:     operator-(difference_type __i) const
+16535:     {
+16535:       const_iterator __tmp = *this;
+16535:       return __tmp -= __i;
+16535:     }
+16535: 
+16535:     const_reference
+16535:     operator[](difference_type __i) const
+16535:     { return *(*this + __i); }
+16535:   };
+16535: 
+16535:   inline _Bit_const_iterator
+16535:   operator+(ptrdiff_t __n, const _Bit_const_iterator& __x)
+16535:   { return __x + __n; }
+16535: 
+16535:   inline void
+16535:   __fill_bvector(_Bit_type * __v,
+16535:    unsigned int __first, unsigned int __last, bool __x)
+16535:   {
+16535:     const _Bit_type __fmask = ~0ul << __first;
+16535:     const _Bit_type __lmask = ~0ul >> (_S_word_bit - __last);
+16535:     const _Bit_type __mask = __fmask & __lmask;
+16535: 
+16535:     if (__x)
+16535:       *__v |= __mask;
+16535:     else
+16535:       *__v &= ~__mask;
+16535:   }
+16535: 
+16535:   inline void
+16535:   fill(_Bit_iterator __first, _Bit_iterator __last, const bool& __x)
+16535:   {
+16535:     if (__first._M_p != __last._M_p)
+16535:       {
+16535:  _Bit_type* __first_p = __first._M_p;
+16535:  if (__first._M_offset != 0)
+16535:    __fill_bvector(__first_p++, __first._M_offset, _S_word_bit, __x);
+16535: 
+16535:  __builtin_memset(__first_p, __x ? ~0 : 0,
+16535:     (__last._M_p - __first_p) * sizeof(_Bit_type));
+16535: 
+16535:  if (__last._M_offset != 0)
+16535:    __fill_bvector(__last._M_p, 0, __last._M_offset, __x);
+16535:       }
+16535:     else if (__first._M_offset != __last._M_offset)
+16535:       __fill_bvector(__first._M_p, __first._M_offset, __last._M_offset, __x);
+16535:   }
+16535: 
+16535:   template<typename _Alloc>
+16535:     struct _Bvector_base
+16535:     {
+16535:       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
+16535:         rebind<_Bit_type>::other _Bit_alloc_type;
+16535:       typedef typename __gnu_cxx::__alloc_traits<_Bit_alloc_type>
+16535:  _Bit_alloc_traits;
+16535:       typedef typename _Bit_alloc_traits::pointer _Bit_pointer;
+16535: 
+16535:       struct _Bvector_impl_data
+16535:       {
+16535:  _Bit_iterator _M_start;
+16535:  _Bit_iterator _M_finish;
+16535:  _Bit_pointer _M_end_of_storage;
+16535: 
+16535:  _Bvector_impl_data() noexcept
+16535:  : _M_start(), _M_finish(), _M_end_of_storage()
+16535:  { }
+16535: 
+16535: 
+16535:  _Bvector_impl_data(_Bvector_impl_data&& __x) noexcept
+16535:  : _M_start(__x._M_start), _M_finish(__x._M_finish)
+16535:  , _M_end_of_storage(__x._M_end_of_storage)
+16535:  { __x._M_reset(); }
+16535: 
+16535:  void
+16535:  _M_move_data(_Bvector_impl_data&& __x) noexcept
+16535:  {
+16535:    this->_M_start = __x._M_start;
+16535:    this->_M_finish = __x._M_finish;
+16535:    this->_M_end_of_storage = __x._M_end_of_storage;
+16535:    __x._M_reset();
+16535:  }
+16535: 
+16535: 
+16535:  void
+16535:  _M_reset() noexcept
+16535:  {
+16535:    _M_start = _M_finish = _Bit_iterator();
+16535:    _M_end_of_storage = _Bit_pointer();
+16535:  }
+16535:       };
+16535: 
+16535:       struct _Bvector_impl
+16535:  : public _Bit_alloc_type, public _Bvector_impl_data
+16535:  {
+16535:  public:
+16535:    _Bvector_impl() noexcept(is_nothrow_default_constructible<_Bit_alloc_type>::value)
+16535: 
+16535:    : _Bit_alloc_type()
+16535:    { }
+16535: 
+16535:    _Bvector_impl(const _Bit_alloc_type& __a) noexcept
+16535:    : _Bit_alloc_type(__a)
+16535:    { }
+16535: 
+16535: 
+16535:  _Bvector_impl(_Bvector_impl&&) = default;
+16535: 
+16535: 
+16535:  _Bit_type*
+16535:  _M_end_addr() const noexcept
+16535:  {
+16535:    if (this->_M_end_of_storage)
+16535:      return std::__addressof(this->_M_end_of_storage[-1]) + 1;
+16535:    return 0;
+16535:  }
+16535:       };
+16535: 
+16535:     public:
+16535:       typedef _Alloc allocator_type;
+16535: 
+16535:       _Bit_alloc_type&
+16535:       _M_get_Bit_allocator() noexcept
+16535:       { return this->_M_impl; }
+16535: 
+16535:       const _Bit_alloc_type&
+16535:       _M_get_Bit_allocator() const noexcept
+16535:       { return this->_M_impl; }
+16535: 
+16535:       allocator_type
+16535:       get_allocator() const noexcept
+16535:       { return allocator_type(_M_get_Bit_allocator()); }
+16535: 
+16535: 
+16535:       _Bvector_base() = default;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       _Bvector_base(const allocator_type& __a)
+16535:       : _M_impl(__a) { }
+16535: 
+16535: 
+16535:       _Bvector_base(_Bvector_base&&) = default;
+16535: 
+16535: 
+16535:       ~_Bvector_base()
+16535:       { this->_M_deallocate(); }
+16535: 
+16535:     protected:
+16535:       _Bvector_impl _M_impl;
+16535: 
+16535:       _Bit_pointer
+16535:       _M_allocate(size_t __n)
+16535:       { return _Bit_alloc_traits::allocate(_M_impl, _S_nword(__n)); }
+16535: 
+16535:       void
+16535:       _M_deallocate()
+16535:       {
+16535:  if (_M_impl._M_start._M_p)
+16535:    {
+16535:      const size_t __n = _M_impl._M_end_addr() - _M_impl._M_start._M_p;
+16535:      _Bit_alloc_traits::deallocate(_M_impl,
+16535:        _M_impl._M_end_of_storage - __n,
+16535:        __n);
+16535:      _M_impl._M_reset();
+16535:    }
+16535:       }
+16535: 
+16535: 
+16535:       void
+16535:       _M_move_data(_Bvector_base&& __x) noexcept
+16535:       { _M_impl._M_move_data(std::move(__x._M_impl)); }
+16535: 
+16535: 
+16535:       static size_t
+16535:       _S_nword(size_t __n)
+16535:       { return (__n + int(_S_word_bit) - 1) / int(_S_word_bit); }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: # 587 "/usr/include/c++/8/bits/stl_bvector.h" 3
+16535:   template<typename _Alloc>
+16535:     class vector<bool, _Alloc> : protected _Bvector_base<_Alloc>
+16535:     {
+16535:       typedef _Bvector_base<_Alloc> _Base;
+16535:       typedef typename _Base::_Bit_pointer _Bit_pointer;
+16535:       typedef typename _Base::_Bit_alloc_traits _Bit_alloc_traits;
+16535: 
+16535: 
+16535:       friend struct std::hash<vector>;
+16535: 
+16535: 
+16535:     public:
+16535:       typedef bool value_type;
+16535:       typedef size_t size_type;
+16535:       typedef ptrdiff_t difference_type;
+16535:       typedef _Bit_reference reference;
+16535:       typedef bool const_reference;
+16535:       typedef _Bit_reference* pointer;
+16535:       typedef const bool* const_pointer;
+16535:       typedef _Bit_iterator iterator;
+16535:       typedef _Bit_const_iterator const_iterator;
+16535:       typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+16535:       typedef std::reverse_iterator<iterator> reverse_iterator;
+16535:       typedef _Alloc allocator_type;
+16535: 
+16535:       allocator_type
+16535:       get_allocator() const
+16535:       { return _Base::get_allocator(); }
+16535: 
+16535:     protected:
+16535:       using _Base::_M_allocate;
+16535:       using _Base::_M_deallocate;
+16535:       using _Base::_S_nword;
+16535:       using _Base::_M_get_Bit_allocator;
+16535: 
+16535:     public:
+16535: 
+16535:       vector() = default;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       explicit
+16535:       vector(const allocator_type& __a)
+16535:       : _Base(__a) { }
+16535: 
+16535: 
+16535:       explicit
+16535:       vector(size_type __n, const allocator_type& __a = allocator_type())
+16535:       : vector(__n, false, __a)
+16535:       { }
+16535: 
+16535:       vector(size_type __n, const bool& __value,
+16535:       const allocator_type& __a = allocator_type())
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       : _Base(__a)
+16535:       {
+16535:  _M_initialize(__n);
+16535:  _M_initialize_value(__value);
+16535:       }
+16535: 
+16535:       vector(const vector& __x)
+16535:       : _Base(_Bit_alloc_traits::_S_select_on_copy(__x._M_get_Bit_allocator()))
+16535:       {
+16535:  _M_initialize(__x.size());
+16535:  _M_copy_aligned(__x.begin(), __x.end(), this->_M_impl._M_start);
+16535:       }
+16535: 
+16535: 
+16535:       vector(vector&&) = default;
+16535: 
+16535:       vector(vector&& __x, const allocator_type& __a)
+16535:       noexcept(_Bit_alloc_traits::_S_always_equal())
+16535:       : _Base(__a)
+16535:       {
+16535:  if (__x.get_allocator() == __a)
+16535:    this->_M_move_data(std::move(__x));
+16535:  else
+16535:    {
+16535:      _M_initialize(__x.size());
+16535:      _M_copy_aligned(__x.begin(), __x.end(), begin());
+16535:      __x.clear();
+16535:    }
+16535:       }
+16535: 
+16535:       vector(const vector& __x, const allocator_type& __a)
+16535:       : _Base(__a)
+16535:       {
+16535:  _M_initialize(__x.size());
+16535:  _M_copy_aligned(__x.begin(), __x.end(), this->_M_impl._M_start);
+16535:       }
+16535: 
+16535:       vector(initializer_list<bool> __l,
+16535:       const allocator_type& __a = allocator_type())
+16535:       : _Base(__a)
+16535:       {
+16535:  _M_initialize_range(__l.begin(), __l.end(),
+16535:        random_access_iterator_tag());
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       template<typename _InputIterator,
+16535:         typename = std::_RequireInputIter<_InputIterator>>
+16535:  vector(_InputIterator __first, _InputIterator __last,
+16535:         const allocator_type& __a = allocator_type())
+16535:  : _Base(__a)
+16535:  { _M_initialize_dispatch(__first, __last, __false_type()); }
+16535: # 710 "/usr/include/c++/8/bits/stl_bvector.h" 3
+16535:       ~vector() noexcept { }
+16535: 
+16535:       vector&
+16535:       operator=(const vector& __x)
+16535:       {
+16535:  if (&__x == this)
+16535:    return *this;
+16535: 
+16535:  if (_Bit_alloc_traits::_S_propagate_on_copy_assign())
+16535:    {
+16535:      if (this->_M_get_Bit_allocator() != __x._M_get_Bit_allocator())
+16535:        {
+16535:   this->_M_deallocate();
+16535:   std::__alloc_on_copy(_M_get_Bit_allocator(),
+16535:          __x._M_get_Bit_allocator());
+16535:   _M_initialize(__x.size());
+16535:        }
+16535:      else
+16535:        std::__alloc_on_copy(_M_get_Bit_allocator(),
+16535:        __x._M_get_Bit_allocator());
+16535:    }
+16535: 
+16535:  if (__x.size() > capacity())
+16535:    {
+16535:      this->_M_deallocate();
+16535:      _M_initialize(__x.size());
+16535:    }
+16535:  this->_M_impl._M_finish = _M_copy_aligned(__x.begin(), __x.end(),
+16535:         begin());
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535:       vector&
+16535:       operator=(vector&& __x) noexcept(_Bit_alloc_traits::_S_nothrow_move())
+16535:       {
+16535:  if (_Bit_alloc_traits::_S_propagate_on_move_assign()
+16535:      || this->_M_get_Bit_allocator() == __x._M_get_Bit_allocator())
+16535:    {
+16535:      this->_M_deallocate();
+16535:      this->_M_move_data(std::move(__x));
+16535:      std::__alloc_on_move(_M_get_Bit_allocator(),
+16535:      __x._M_get_Bit_allocator());
+16535:    }
+16535:  else
+16535:    {
+16535:      if (__x.size() > capacity())
+16535:        {
+16535:   this->_M_deallocate();
+16535:   _M_initialize(__x.size());
+16535:        }
+16535:      this->_M_impl._M_finish = _M_copy_aligned(__x.begin(), __x.end(),
+16535:             begin());
+16535:      __x.clear();
+16535:    }
+16535:  return *this;
+16535:       }
+16535: 
+16535:       vector&
+16535:       operator=(initializer_list<bool> __l)
+16535:       {
+16535:  this->assign (__l.begin(), __l.end());
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       assign(size_type __n, const bool& __x)
+16535:       { _M_fill_assign(__n, __x); }
+16535: 
+16535: 
+16535:       template<typename _InputIterator,
+16535:         typename = std::_RequireInputIter<_InputIterator>>
+16535:  void
+16535:  assign(_InputIterator __first, _InputIterator __last)
+16535:  { _M_assign_aux(__first, __last, std::__iterator_category(__first)); }
+16535: # 801 "/usr/include/c++/8/bits/stl_bvector.h" 3
+16535:       void
+16535:       assign(initializer_list<bool> __l)
+16535:       { _M_assign_aux(__l.begin(), __l.end(), random_access_iterator_tag()); }
+16535: 
+16535: 
+16535:       iterator
+16535:       begin() noexcept
+16535:       { return this->_M_impl._M_start; }
+16535: 
+16535:       const_iterator
+16535:       begin() const noexcept
+16535:       { return this->_M_impl._M_start; }
+16535: 
+16535:       iterator
+16535:       end() noexcept
+16535:       { return this->_M_impl._M_finish; }
+16535: 
+16535:       const_iterator
+16535:       end() const noexcept
+16535:       { return this->_M_impl._M_finish; }
+16535: 
+16535:       reverse_iterator
+16535:       rbegin() noexcept
+16535:       { return reverse_iterator(end()); }
+16535: 
+16535:       const_reverse_iterator
+16535:       rbegin() const noexcept
+16535:       { return const_reverse_iterator(end()); }
+16535: 
+16535:       reverse_iterator
+16535:       rend() noexcept
+16535:       { return reverse_iterator(begin()); }
+16535: 
+16535:       const_reverse_iterator
+16535:       rend() const noexcept
+16535:       { return const_reverse_iterator(begin()); }
+16535: 
+16535: 
+16535:       const_iterator
+16535:       cbegin() const noexcept
+16535:       { return this->_M_impl._M_start; }
+16535: 
+16535:       const_iterator
+16535:       cend() const noexcept
+16535:       { return this->_M_impl._M_finish; }
+16535: 
+16535:       const_reverse_iterator
+16535:       crbegin() const noexcept
+16535:       { return const_reverse_iterator(end()); }
+16535: 
+16535:       const_reverse_iterator
+16535:       crend() const noexcept
+16535:       { return const_reverse_iterator(begin()); }
+16535: 
+16535: 
+16535:       size_type
+16535:       size() const noexcept
+16535:       { return size_type(end() - begin()); }
+16535: 
+16535:       size_type
+16535:       max_size() const noexcept
+16535:       {
+16535:  const size_type __isize =
+16535:    __gnu_cxx::__numeric_traits<difference_type>::__max
+16535:    - int(_S_word_bit) + 1;
+16535:  const size_type __asize
+16535:    = _Bit_alloc_traits::max_size(_M_get_Bit_allocator());
+16535:  return (__asize <= __isize / int(_S_word_bit)
+16535:   ? __asize * int(_S_word_bit) : __isize);
+16535:       }
+16535: 
+16535:       size_type
+16535:       capacity() const noexcept
+16535:       { return size_type(const_iterator(this->_M_impl._M_end_addr(), 0)
+16535:     - begin()); }
+16535: 
+16535:       bool
+16535:       empty() const noexcept
+16535:       { return begin() == end(); }
+16535: 
+16535:       reference
+16535:       operator[](size_type __n)
+16535:       {
+16535:  return *iterator(this->_M_impl._M_start._M_p
+16535:     + __n / int(_S_word_bit), __n % int(_S_word_bit));
+16535:       }
+16535: 
+16535:       const_reference
+16535:       operator[](size_type __n) const
+16535:       {
+16535:  return *const_iterator(this->_M_impl._M_start._M_p
+16535:         + __n / int(_S_word_bit), __n % int(_S_word_bit));
+16535:       }
+16535: 
+16535:     protected:
+16535:       void
+16535:       _M_range_check(size_type __n) const
+16535:       {
+16535:  if (__n >= this->size())
+16535:    __throw_out_of_range_fmt(("vector<bool>::_M_range_check: __n " "(which is %zu) >= this->size() " "(which is %zu)")
+16535: 
+16535:                             ,
+16535:        __n, this->size());
+16535:       }
+16535: 
+16535:     public:
+16535:       reference
+16535:       at(size_type __n)
+16535:       { _M_range_check(__n); return (*this)[__n]; }
+16535: 
+16535:       const_reference
+16535:       at(size_type __n) const
+16535:       { _M_range_check(__n); return (*this)[__n]; }
+16535: 
+16535:       void
+16535:       reserve(size_type __n)
+16535:       {
+16535:  if (__n > max_size())
+16535:    __throw_length_error(("vector::reserve"));
+16535:  if (capacity() < __n)
+16535:    _M_reallocate(__n);
+16535:       }
+16535: 
+16535:       reference
+16535:       front()
+16535:       { return *begin(); }
+16535: 
+16535:       const_reference
+16535:       front() const
+16535:       { return *begin(); }
+16535: 
+16535:       reference
+16535:       back()
+16535:       { return *(end() - 1); }
+16535: 
+16535:       const_reference
+16535:       back() const
+16535:       { return *(end() - 1); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       data() noexcept { }
+16535: 
+16535:       void
+16535:       push_back(bool __x)
+16535:       {
+16535:  if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr())
+16535:    *this->_M_impl._M_finish++ = __x;
+16535:  else
+16535:    _M_insert_aux(end(), __x);
+16535:       }
+16535: 
+16535:       void
+16535:       swap(vector& __x) noexcept
+16535:       {
+16535:  std::swap(this->_M_impl._M_start, __x._M_impl._M_start);
+16535:  std::swap(this->_M_impl._M_finish, __x._M_impl._M_finish);
+16535:  std::swap(this->_M_impl._M_end_of_storage,
+16535:     __x._M_impl._M_end_of_storage);
+16535:  _Bit_alloc_traits::_S_on_swap(_M_get_Bit_allocator(),
+16535:           __x._M_get_Bit_allocator());
+16535:       }
+16535: 
+16535: 
+16535:       static void
+16535:       swap(reference __x, reference __y) noexcept
+16535:       {
+16535:  bool __tmp = __x;
+16535:  __x = __y;
+16535:  __y = __tmp;
+16535:       }
+16535: 
+16535:       iterator
+16535: 
+16535:       insert(const_iterator __position, const bool& __x = bool())
+16535: 
+16535: 
+16535: 
+16535:       {
+16535:  const difference_type __n = __position - begin();
+16535:  if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr()
+16535:      && __position == end())
+16535:    *this->_M_impl._M_finish++ = __x;
+16535:  else
+16535:    _M_insert_aux(__position._M_const_cast(), __x);
+16535:  return begin() + __n;
+16535:       }
+16535: 
+16535: 
+16535:       template<typename _InputIterator,
+16535:         typename = std::_RequireInputIter<_InputIterator>>
+16535:  iterator
+16535:  insert(const_iterator __position,
+16535:         _InputIterator __first, _InputIterator __last)
+16535:  {
+16535:    difference_type __offset = __position - cbegin();
+16535:    _M_insert_dispatch(__position._M_const_cast(),
+16535:         __first, __last, __false_type());
+16535:    return begin() + __offset;
+16535:  }
+16535: # 1017 "/usr/include/c++/8/bits/stl_bvector.h" 3
+16535:       iterator
+16535:       insert(const_iterator __position, size_type __n, const bool& __x)
+16535:       {
+16535:  difference_type __offset = __position - cbegin();
+16535:  _M_fill_insert(__position._M_const_cast(), __n, __x);
+16535:  return begin() + __offset;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       insert(const_iterator __p, initializer_list<bool> __l)
+16535:       { return this->insert(__p, __l.begin(), __l.end()); }
+16535: 
+16535: 
+16535:       void
+16535:       pop_back()
+16535:       { --this->_M_impl._M_finish; }
+16535: 
+16535:       iterator
+16535: 
+16535:       erase(const_iterator __position)
+16535: 
+16535: 
+16535: 
+16535:       { return _M_erase(__position._M_const_cast()); }
+16535: 
+16535:       iterator
+16535: 
+16535:       erase(const_iterator __first, const_iterator __last)
+16535: 
+16535: 
+16535: 
+16535:       { return _M_erase(__first._M_const_cast(), __last._M_const_cast()); }
+16535: 
+16535:       void
+16535:       resize(size_type __new_size, bool __x = bool())
+16535:       {
+16535:  if (__new_size < size())
+16535:    _M_erase_at_end(begin() + difference_type(__new_size));
+16535:  else
+16535:    insert(end(), __new_size - size(), __x);
+16535:       }
+16535: 
+16535: 
+16535:       void
+16535:       shrink_to_fit()
+16535:       { _M_shrink_to_fit(); }
+16535: 
+16535: 
+16535:       void
+16535:       flip() noexcept
+16535:       {
+16535:  _Bit_type * const __end = this->_M_impl._M_end_addr();
+16535:  for (_Bit_type * __p = this->_M_impl._M_start._M_p; __p != __end; ++__p)
+16535:    *__p = ~*__p;
+16535:       }
+16535: 
+16535:       void
+16535:       clear() noexcept
+16535:       { _M_erase_at_end(begin()); }
+16535: 
+16535: 
+16535:       template<typename... _Args>
+16535: 
+16535: 
+16535: 
+16535:  void
+16535: 
+16535:  emplace_back(_Args&&... __args)
+16535:  {
+16535:    push_back(bool(__args...));
+16535: 
+16535: 
+16535: 
+16535:  }
+16535: 
+16535:       template<typename... _Args>
+16535:  iterator
+16535:  emplace(const_iterator __pos, _Args&&... __args)
+16535:  { return insert(__pos, bool(__args...)); }
+16535: 
+16535: 
+16535:     protected:
+16535: 
+16535:       iterator
+16535:       _M_copy_aligned(const_iterator __first, const_iterator __last,
+16535:         iterator __result)
+16535:       {
+16535:  _Bit_type* __q = std::copy(__first._M_p, __last._M_p, __result._M_p);
+16535:  return std::copy(const_iterator(__last._M_p, 0), __last,
+16535:     iterator(__q, 0));
+16535:       }
+16535: 
+16535:       void
+16535:       _M_initialize(size_type __n)
+16535:       {
+16535:  if (__n)
+16535:    {
+16535:      _Bit_pointer __q = this->_M_allocate(__n);
+16535:      this->_M_impl._M_end_of_storage = __q + _S_nword(__n);
+16535:      this->_M_impl._M_start = iterator(std::__addressof(*__q), 0);
+16535:    }
+16535:  else
+16535:    {
+16535:      this->_M_impl._M_end_of_storage = _Bit_pointer();
+16535:      this->_M_impl._M_start = iterator(0, 0);
+16535:    }
+16535:  this->_M_impl._M_finish = this->_M_impl._M_start + difference_type(__n);
+16535: 
+16535:       }
+16535: 
+16535:       void
+16535:       _M_initialize_value(bool __x)
+16535:       {
+16535:  if (_Bit_type* __p = this->_M_impl._M_start._M_p)
+16535:    __builtin_memset(__p, __x ? ~0 : 0,
+16535:       (this->_M_impl._M_end_addr() - __p)
+16535:       * sizeof(_Bit_type));
+16535:       }
+16535: 
+16535:       void
+16535:       _M_reallocate(size_type __n);
+16535: 
+16535: 
+16535:       bool
+16535:       _M_shrink_to_fit();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Integer>
+16535:  void
+16535:  _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type)
+16535:  {
+16535:    _M_initialize(static_cast<size_type>(__n));
+16535:    _M_initialize_value(__x);
+16535:  }
+16535: 
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
+16535:           __false_type)
+16535:  { _M_initialize_range(__first, __last,
+16535:          std::__iterator_category(__first)); }
+16535: 
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  _M_initialize_range(_InputIterator __first, _InputIterator __last,
+16535:        std::input_iterator_tag)
+16535:  {
+16535:    for (; __first != __last; ++__first)
+16535:      push_back(*__first);
+16535:  }
+16535: 
+16535:       template<typename _ForwardIterator>
+16535:  void
+16535:  _M_initialize_range(_ForwardIterator __first, _ForwardIterator __last,
+16535:        std::forward_iterator_tag)
+16535:  {
+16535:    const size_type __n = std::distance(__first, __last);
+16535:    _M_initialize(__n);
+16535:    std::copy(__first, __last, this->_M_impl._M_start);
+16535:  }
+16535: # 1203 "/usr/include/c++/8/bits/stl_bvector.h" 3
+16535:       void
+16535:       _M_fill_assign(size_t __n, bool __x)
+16535:       {
+16535:  if (__n > size())
+16535:    {
+16535:      _M_initialize_value(__x);
+16535:      insert(end(), __n - size(), __x);
+16535:    }
+16535:  else
+16535:    {
+16535:      _M_erase_at_end(begin() + __n);
+16535:      _M_initialize_value(__x);
+16535:    }
+16535:       }
+16535: 
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  _M_assign_aux(_InputIterator __first, _InputIterator __last,
+16535:         std::input_iterator_tag)
+16535:  {
+16535:    iterator __cur = begin();
+16535:    for (; __first != __last && __cur != end(); ++__cur, ++__first)
+16535:      *__cur = *__first;
+16535:    if (__first == __last)
+16535:      _M_erase_at_end(__cur);
+16535:    else
+16535:      insert(end(), __first, __last);
+16535:  }
+16535: 
+16535:       template<typename _ForwardIterator>
+16535:  void
+16535:  _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
+16535:         std::forward_iterator_tag)
+16535:  {
+16535:    const size_type __len = std::distance(__first, __last);
+16535:    if (__len < size())
+16535:      _M_erase_at_end(std::copy(__first, __last, begin()));
+16535:    else
+16535:      {
+16535:        _ForwardIterator __mid = __first;
+16535:        std::advance(__mid, size());
+16535:        std::copy(__first, __mid, begin());
+16535:        insert(end(), __mid, __last);
+16535:      }
+16535:  }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Integer>
+16535:  void
+16535:  _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __x,
+16535:       __true_type)
+16535:  { _M_fill_insert(__pos, __n, __x); }
+16535: 
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  _M_insert_dispatch(iterator __pos,
+16535:       _InputIterator __first, _InputIterator __last,
+16535:       __false_type)
+16535:  { _M_insert_range(__pos, __first, __last,
+16535:      std::__iterator_category(__first)); }
+16535: 
+16535:       void
+16535:       _M_fill_insert(iterator __position, size_type __n, bool __x);
+16535: 
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  _M_insert_range(iterator __pos, _InputIterator __first,
+16535:    _InputIterator __last, std::input_iterator_tag)
+16535:  {
+16535:    for (; __first != __last; ++__first)
+16535:      {
+16535:        __pos = insert(__pos, *__first);
+16535:        ++__pos;
+16535:      }
+16535:  }
+16535: 
+16535:       template<typename _ForwardIterator>
+16535:  void
+16535:  _M_insert_range(iterator __position, _ForwardIterator __first,
+16535:    _ForwardIterator __last, std::forward_iterator_tag);
+16535: 
+16535:       void
+16535:       _M_insert_aux(iterator __position, bool __x);
+16535: 
+16535:       size_type
+16535:       _M_check_len(size_type __n, const char* __s) const
+16535:       {
+16535:  if (max_size() - size() < __n)
+16535:    __throw_length_error((__s));
+16535: 
+16535:  const size_type __len = size() + std::max(size(), __n);
+16535:  return (__len < size() || __len > max_size()) ? max_size() : __len;
+16535:       }
+16535: 
+16535:       void
+16535:       _M_erase_at_end(iterator __pos)
+16535:       { this->_M_impl._M_finish = __pos; }
+16535: 
+16535:       iterator
+16535:       _M_erase(iterator __pos);
+16535: 
+16535:       iterator
+16535:       _M_erase(iterator __first, iterator __last);
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Alloc>
+16535:     struct hash<std::vector<bool, _Alloc>>
+16535:     : public __hash_base<size_t, std::vector<bool, _Alloc>>
+16535:     {
+16535:       size_t
+16535:       operator()(const std::vector<bool, _Alloc>&) const noexcept;
+16535:     };
+16535: 
+16535: 
+16535: }
+16535: # 66 "/usr/include/c++/8/vector" 2 3
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/vector.tcc" 1 3
+16535: # 59 "/usr/include/c++/8/bits/vector.tcc" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     void
+16535:     vector<_Tp, _Alloc>::
+16535:     reserve(size_type __n)
+16535:     {
+16535:       if (__n > this->max_size())
+16535:  __throw_length_error(("vector::reserve"));
+16535:       if (this->capacity() < __n)
+16535:  {
+16535:    const size_type __old_size = size();
+16535:    pointer __tmp = _M_allocate_and_copy(__n,
+16535:      std::__make_move_if_noexcept_iterator(this->_M_impl._M_start),
+16535:      std::__make_move_if_noexcept_iterator(this->_M_impl._M_finish));
+16535:    ;
+16535:    std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
+16535:    _M_get_Tp_allocator());
+16535:    _M_deallocate(this->_M_impl._M_start,
+16535:    this->_M_impl._M_end_of_storage
+16535:    - this->_M_impl._M_start);
+16535:    this->_M_impl._M_start = __tmp;
+16535:    this->_M_impl._M_finish = __tmp + __old_size;
+16535:    this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
+16535:  }
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     template<typename... _Args>
+16535: 
+16535: 
+16535: 
+16535:       void
+16535: 
+16535:       vector<_Tp, _Alloc>::
+16535:       emplace_back(_Args&&... __args)
+16535:       {
+16535:  if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
+16535:    {
+16535:      ;
+16535:      _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
+16535:          std::forward<_Args>(__args)...);
+16535:      ++this->_M_impl._M_finish;
+16535:      ;
+16535:    }
+16535:  else
+16535:    _M_realloc_insert(end(), std::forward<_Args>(__args)...);
+16535: 
+16535: 
+16535: 
+16535:       }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     typename vector<_Tp, _Alloc>::iterator
+16535:     vector<_Tp, _Alloc>::
+16535: 
+16535:     insert(const_iterator __position, const value_type& __x)
+16535: 
+16535: 
+16535: 
+16535:     {
+16535:       const size_type __n = __position - begin();
+16535:       if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
+16535:  if (__position == end())
+16535:    {
+16535:      ;
+16535:      _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
+16535:          __x);
+16535:      ++this->_M_impl._M_finish;
+16535:      ;
+16535:    }
+16535:  else
+16535:    {
+16535: 
+16535:      const auto __pos = begin() + (__position - cbegin());
+16535: 
+16535: 
+16535:      _Temporary_value __x_copy(this, __x);
+16535:      _M_insert_aux(__pos, std::move(__x_copy._M_val()));
+16535: 
+16535: 
+16535: 
+16535:    }
+16535:       else
+16535: 
+16535:  _M_realloc_insert(begin() + (__position - cbegin()), __x);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       return iterator(this->_M_impl._M_start + __n);
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     typename vector<_Tp, _Alloc>::iterator
+16535:     vector<_Tp, _Alloc>::
+16535:     _M_erase(iterator __position)
+16535:     {
+16535:       if (__position + 1 != end())
+16535:  std::move(__position + 1, end(), __position);
+16535:       --this->_M_impl._M_finish;
+16535:       _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish);
+16535:       ;
+16535:       return __position;
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     typename vector<_Tp, _Alloc>::iterator
+16535:     vector<_Tp, _Alloc>::
+16535:     _M_erase(iterator __first, iterator __last)
+16535:     {
+16535:       if (__first != __last)
+16535:  {
+16535:    if (__last != end())
+16535:      std::move(__last, end(), __first);
+16535:    _M_erase_at_end(__first.base() + (end() - __last));
+16535:  }
+16535:       return __first;
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     vector<_Tp, _Alloc>&
+16535:     vector<_Tp, _Alloc>::
+16535:     operator=(const vector<_Tp, _Alloc>& __x)
+16535:     {
+16535:       if (&__x != this)
+16535:  {
+16535:    ;
+16535: 
+16535:    if (_Alloc_traits::_S_propagate_on_copy_assign())
+16535:      {
+16535:        if (!_Alloc_traits::_S_always_equal()
+16535:            && _M_get_Tp_allocator() != __x._M_get_Tp_allocator())
+16535:          {
+16535: 
+16535:     this->clear();
+16535:     _M_deallocate(this->_M_impl._M_start,
+16535:     this->_M_impl._M_end_of_storage
+16535:     - this->_M_impl._M_start);
+16535:     this->_M_impl._M_start = nullptr;
+16535:     this->_M_impl._M_finish = nullptr;
+16535:     this->_M_impl._M_end_of_storage = nullptr;
+16535:   }
+16535:        std::__alloc_on_copy(_M_get_Tp_allocator(),
+16535:        __x._M_get_Tp_allocator());
+16535:      }
+16535: 
+16535:    const size_type __xlen = __x.size();
+16535:    if (__xlen > capacity())
+16535:      {
+16535:        pointer __tmp = _M_allocate_and_copy(__xlen, __x.begin(),
+16535:          __x.end());
+16535:        std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
+16535:        _M_get_Tp_allocator());
+16535:        _M_deallocate(this->_M_impl._M_start,
+16535:        this->_M_impl._M_end_of_storage
+16535:        - this->_M_impl._M_start);
+16535:        this->_M_impl._M_start = __tmp;
+16535:        this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __xlen;
+16535:      }
+16535:    else if (size() >= __xlen)
+16535:      {
+16535:        std::_Destroy(std::copy(__x.begin(), __x.end(), begin()),
+16535:        end(), _M_get_Tp_allocator());
+16535:      }
+16535:    else
+16535:      {
+16535:        std::copy(__x._M_impl._M_start, __x._M_impl._M_start + size(),
+16535:    this->_M_impl._M_start);
+16535:        std::__uninitialized_copy_a(__x._M_impl._M_start + size(),
+16535:        __x._M_impl._M_finish,
+16535:        this->_M_impl._M_finish,
+16535:        _M_get_Tp_allocator());
+16535:      }
+16535:    this->_M_impl._M_finish = this->_M_impl._M_start + __xlen;
+16535:  }
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     void
+16535:     vector<_Tp, _Alloc>::
+16535:     _M_fill_assign(size_t __n, const value_type& __val)
+16535:     {
+16535:       if (__n > capacity())
+16535:  {
+16535:    vector __tmp(__n, __val, _M_get_Tp_allocator());
+16535:    __tmp._M_impl._M_swap_data(this->_M_impl);
+16535:  }
+16535:       else if (__n > size())
+16535:  {
+16535:    std::fill(begin(), end(), __val);
+16535:    const size_type __add = __n - size();
+16535:    ;
+16535:    this->_M_impl._M_finish =
+16535:      std::__uninitialized_fill_n_a(this->_M_impl._M_finish,
+16535:        __add, __val, _M_get_Tp_allocator());
+16535:    ;
+16535:  }
+16535:       else
+16535:         _M_erase_at_end(std::fill_n(this->_M_impl._M_start, __n, __val));
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     template<typename _InputIterator>
+16535:       void
+16535:       vector<_Tp, _Alloc>::
+16535:       _M_assign_aux(_InputIterator __first, _InputIterator __last,
+16535:       std::input_iterator_tag)
+16535:       {
+16535:  pointer __cur(this->_M_impl._M_start);
+16535:  for (; __first != __last && __cur != this->_M_impl._M_finish;
+16535:       ++__cur, ++__first)
+16535:    *__cur = *__first;
+16535:  if (__first == __last)
+16535:    _M_erase_at_end(__cur);
+16535:  else
+16535:    _M_range_insert(end(), __first, __last,
+16535:      std::__iterator_category(__first));
+16535:       }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     template<typename _ForwardIterator>
+16535:       void
+16535:       vector<_Tp, _Alloc>::
+16535:       _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
+16535:       std::forward_iterator_tag)
+16535:       {
+16535:  const size_type __len = std::distance(__first, __last);
+16535: 
+16535:  if (__len > capacity())
+16535:    {
+16535:      pointer __tmp(_M_allocate_and_copy(__len, __first, __last));
+16535:      ;
+16535:      std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
+16535:      _M_get_Tp_allocator());
+16535:      _M_deallocate(this->_M_impl._M_start,
+16535:      this->_M_impl._M_end_of_storage
+16535:      - this->_M_impl._M_start);
+16535:      this->_M_impl._M_start = __tmp;
+16535:      this->_M_impl._M_finish = this->_M_impl._M_start + __len;
+16535:      this->_M_impl._M_end_of_storage = this->_M_impl._M_finish;
+16535:    }
+16535:  else if (size() >= __len)
+16535:    _M_erase_at_end(std::copy(__first, __last, this->_M_impl._M_start));
+16535:  else
+16535:    {
+16535:      _ForwardIterator __mid = __first;
+16535:      std::advance(__mid, size());
+16535:      std::copy(__first, __mid, this->_M_impl._M_start);
+16535:      const size_type __attribute__((__unused__)) __n = __len - size();
+16535:      ;
+16535:      this->_M_impl._M_finish =
+16535:        std::__uninitialized_copy_a(__mid, __last,
+16535:        this->_M_impl._M_finish,
+16535:        _M_get_Tp_allocator());
+16535:      ;
+16535:    }
+16535:       }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     auto
+16535:     vector<_Tp, _Alloc>::
+16535:     _M_insert_rval(const_iterator __position, value_type&& __v) -> iterator
+16535:     {
+16535:       const auto __n = __position - cbegin();
+16535:       if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
+16535:  if (__position == cend())
+16535:    {
+16535:      ;
+16535:      _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
+16535:          std::move(__v));
+16535:      ++this->_M_impl._M_finish;
+16535:      ;
+16535:    }
+16535:  else
+16535:    _M_insert_aux(begin() + __n, std::move(__v));
+16535:       else
+16535:  _M_realloc_insert(begin() + __n, std::move(__v));
+16535: 
+16535:       return iterator(this->_M_impl._M_start + __n);
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     template<typename... _Args>
+16535:       auto
+16535:       vector<_Tp, _Alloc>::
+16535:       _M_emplace_aux(const_iterator __position, _Args&&... __args)
+16535:       -> iterator
+16535:       {
+16535:  const auto __n = __position - cbegin();
+16535:  if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
+16535:    if (__position == cend())
+16535:      {
+16535:        ;
+16535:        _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
+16535:            std::forward<_Args>(__args)...);
+16535:        ++this->_M_impl._M_finish;
+16535:        ;
+16535:      }
+16535:    else
+16535:      {
+16535: 
+16535: 
+16535: 
+16535:        _Temporary_value __tmp(this, std::forward<_Args>(__args)...);
+16535:        _M_insert_aux(begin() + __n, std::move(__tmp._M_val()));
+16535:      }
+16535:  else
+16535:    _M_realloc_insert(begin() + __n, std::forward<_Args>(__args)...);
+16535: 
+16535:  return iterator(this->_M_impl._M_start + __n);
+16535:       }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     template<typename _Arg>
+16535:       void
+16535:       vector<_Tp, _Alloc>::
+16535:       _M_insert_aux(iterator __position, _Arg&& __arg)
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     {
+16535:       ;
+16535:       _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
+16535:           std::move(*(this->_M_impl._M_finish - 1)));
+16535:       ++this->_M_impl._M_finish;
+16535:       ;
+16535: 
+16535: 
+16535: 
+16535:       std::move_backward(__position.base(), this->_M_impl._M_finish - 2, this->_M_impl._M_finish - 1)
+16535: 
+16535:                                      ;
+16535: 
+16535: 
+16535: 
+16535:       *__position = std::forward<_Arg>(__arg);
+16535: 
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     template<typename... _Args>
+16535:       void
+16535:       vector<_Tp, _Alloc>::
+16535:       _M_realloc_insert(iterator __position, _Args&&... __args)
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     {
+16535:       const size_type __len =
+16535:  _M_check_len(size_type(1), "vector::_M_realloc_insert");
+16535:       pointer __old_start = this->_M_impl._M_start;
+16535:       pointer __old_finish = this->_M_impl._M_finish;
+16535:       const size_type __elems_before = __position - begin();
+16535:       pointer __new_start(this->_M_allocate(__len));
+16535:       pointer __new_finish(__new_start);
+16535:       try
+16535:  {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:    _Alloc_traits::construct(this->_M_impl,
+16535:        __new_start + __elems_before,
+16535: 
+16535:        std::forward<_Args>(__args)...);
+16535: 
+16535: 
+16535: 
+16535:    __new_finish = pointer();
+16535: 
+16535:    __new_finish
+16535:      = std::__uninitialized_move_if_noexcept_a
+16535:      (__old_start, __position.base(),
+16535:       __new_start, _M_get_Tp_allocator());
+16535: 
+16535:    ++__new_finish;
+16535: 
+16535:    __new_finish
+16535:      = std::__uninitialized_move_if_noexcept_a
+16535:      (__position.base(), __old_finish,
+16535:       __new_finish, _M_get_Tp_allocator());
+16535:  }
+16535:       catch(...)
+16535:  {
+16535:    if (!__new_finish)
+16535:      _Alloc_traits::destroy(this->_M_impl,
+16535:        __new_start + __elems_before);
+16535:    else
+16535:      std::_Destroy(__new_start, __new_finish, _M_get_Tp_allocator());
+16535:    _M_deallocate(__new_start, __len);
+16535:    throw;
+16535:  }
+16535:       ;
+16535:       std::_Destroy(__old_start, __old_finish, _M_get_Tp_allocator());
+16535:       _M_deallocate(__old_start,
+16535:       this->_M_impl._M_end_of_storage - __old_start);
+16535:       this->_M_impl._M_start = __new_start;
+16535:       this->_M_impl._M_finish = __new_finish;
+16535:       this->_M_impl._M_end_of_storage = __new_start + __len;
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     void
+16535:     vector<_Tp, _Alloc>::
+16535:     _M_fill_insert(iterator __position, size_type __n, const value_type& __x)
+16535:     {
+16535:       if (__n != 0)
+16535:  {
+16535:    if (size_type(this->_M_impl._M_end_of_storage
+16535:    - this->_M_impl._M_finish) >= __n)
+16535:      {
+16535: 
+16535: 
+16535: 
+16535:        _Temporary_value __tmp(this, __x);
+16535:        value_type& __x_copy = __tmp._M_val();
+16535: 
+16535:        const size_type __elems_after = end() - __position;
+16535:        pointer __old_finish(this->_M_impl._M_finish);
+16535:        if (__elems_after > __n)
+16535:   {
+16535:     ;
+16535:     std::__uninitialized_move_a(this->_M_impl._M_finish - __n,
+16535:            this->_M_impl._M_finish,
+16535:            this->_M_impl._M_finish,
+16535:            _M_get_Tp_allocator());
+16535:     this->_M_impl._M_finish += __n;
+16535:     ;
+16535:     std::move_backward(__position.base(), __old_finish - __n, __old_finish)
+16535:                                         ;
+16535:     std::fill(__position.base(), __position.base() + __n,
+16535:        __x_copy);
+16535:   }
+16535:        else
+16535:   {
+16535:     ;
+16535:     this->_M_impl._M_finish =
+16535:       std::__uninitialized_fill_n_a(this->_M_impl._M_finish,
+16535:         __n - __elems_after,
+16535:         __x_copy,
+16535:         _M_get_Tp_allocator());
+16535:     ;
+16535:     std::__uninitialized_move_a(__position.base(), __old_finish,
+16535:            this->_M_impl._M_finish,
+16535:            _M_get_Tp_allocator());
+16535:     this->_M_impl._M_finish += __elems_after;
+16535:     ;
+16535:     std::fill(__position.base(), __old_finish, __x_copy);
+16535:   }
+16535:      }
+16535:    else
+16535:      {
+16535:        const size_type __len =
+16535:   _M_check_len(__n, "vector::_M_fill_insert");
+16535:        const size_type __elems_before = __position - begin();
+16535:        pointer __new_start(this->_M_allocate(__len));
+16535:        pointer __new_finish(__new_start);
+16535:        try
+16535:   {
+16535: 
+16535:     std::__uninitialized_fill_n_a(__new_start + __elems_before,
+16535:       __n, __x,
+16535:       _M_get_Tp_allocator());
+16535:     __new_finish = pointer();
+16535: 
+16535:     __new_finish
+16535:       = std::__uninitialized_move_if_noexcept_a
+16535:       (this->_M_impl._M_start, __position.base(),
+16535:        __new_start, _M_get_Tp_allocator());
+16535: 
+16535:     __new_finish += __n;
+16535: 
+16535:     __new_finish
+16535:       = std::__uninitialized_move_if_noexcept_a
+16535:       (__position.base(), this->_M_impl._M_finish,
+16535:        __new_finish, _M_get_Tp_allocator());
+16535:   }
+16535:        catch(...)
+16535:   {
+16535:     if (!__new_finish)
+16535:       std::_Destroy(__new_start + __elems_before,
+16535:       __new_start + __elems_before + __n,
+16535:       _M_get_Tp_allocator());
+16535:     else
+16535:       std::_Destroy(__new_start, __new_finish,
+16535:       _M_get_Tp_allocator());
+16535:     _M_deallocate(__new_start, __len);
+16535:     throw;
+16535:   }
+16535:        ;
+16535:        std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
+16535:        _M_get_Tp_allocator());
+16535:        _M_deallocate(this->_M_impl._M_start,
+16535:        this->_M_impl._M_end_of_storage
+16535:        - this->_M_impl._M_start);
+16535:        this->_M_impl._M_start = __new_start;
+16535:        this->_M_impl._M_finish = __new_finish;
+16535:        this->_M_impl._M_end_of_storage = __new_start + __len;
+16535:      }
+16535:  }
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     void
+16535:     vector<_Tp, _Alloc>::
+16535:     _M_default_append(size_type __n)
+16535:     {
+16535:       if (__n != 0)
+16535:  {
+16535:    const size_type __size = size();
+16535:    size_type __navail = size_type(this->_M_impl._M_end_of_storage
+16535:       - this->_M_impl._M_finish);
+16535: 
+16535:    if (__size > max_size() || __navail > max_size() - __size)
+16535:      __builtin_unreachable();
+16535: 
+16535:    if (__navail >= __n)
+16535:      {
+16535:        ;
+16535:        this->_M_impl._M_finish =
+16535:   std::__uninitialized_default_n_a(this->_M_impl._M_finish,
+16535:        __n, _M_get_Tp_allocator());
+16535:        ;
+16535:      }
+16535:    else
+16535:      {
+16535:        const size_type __len =
+16535:   _M_check_len(__n, "vector::_M_default_append");
+16535:        pointer __new_start(this->_M_allocate(__len));
+16535:        pointer __destroy_from = pointer();
+16535:        try
+16535:   {
+16535:     std::__uninitialized_default_n_a(__new_start + __size,
+16535:          __n, _M_get_Tp_allocator());
+16535:     __destroy_from = __new_start + __size;
+16535:     std::__uninitialized_move_if_noexcept_a(
+16535:         this->_M_impl._M_start, this->_M_impl._M_finish,
+16535:         __new_start, _M_get_Tp_allocator());
+16535:   }
+16535:        catch(...)
+16535:   {
+16535:     if (__destroy_from)
+16535:       std::_Destroy(__destroy_from, __destroy_from + __n,
+16535:       _M_get_Tp_allocator());
+16535:     _M_deallocate(__new_start, __len);
+16535:     throw;
+16535:   }
+16535:        ;
+16535:        std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
+16535:        _M_get_Tp_allocator());
+16535:        _M_deallocate(this->_M_impl._M_start,
+16535:        this->_M_impl._M_end_of_storage
+16535:        - this->_M_impl._M_start);
+16535:        this->_M_impl._M_start = __new_start;
+16535:        this->_M_impl._M_finish = __new_start + __size + __n;
+16535:        this->_M_impl._M_end_of_storage = __new_start + __len;
+16535:      }
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     bool
+16535:     vector<_Tp, _Alloc>::
+16535:     _M_shrink_to_fit()
+16535:     {
+16535:       if (capacity() == size())
+16535:  return false;
+16535:       ;
+16535:       return std::__shrink_to_fit_aux<vector>::_S_do_it(*this);
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     template<typename _InputIterator>
+16535:       void
+16535:       vector<_Tp, _Alloc>::
+16535:       _M_range_insert(iterator __pos, _InputIterator __first,
+16535:         _InputIterator __last, std::input_iterator_tag)
+16535:       {
+16535:  if (__pos == end())
+16535:    {
+16535:      for (; __first != __last; ++__first)
+16535:        insert(end(), *__first);
+16535:    }
+16535:  else if (__first != __last)
+16535:    {
+16535:      vector __tmp(__first, __last, _M_get_Tp_allocator());
+16535:      insert(__pos,
+16535:      std::make_move_iterator(__tmp.begin()),
+16535:      std::make_move_iterator(__tmp.end()));
+16535:    }
+16535:       }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     template<typename _ForwardIterator>
+16535:       void
+16535:       vector<_Tp, _Alloc>::
+16535:       _M_range_insert(iterator __position, _ForwardIterator __first,
+16535:         _ForwardIterator __last, std::forward_iterator_tag)
+16535:       {
+16535:  if (__first != __last)
+16535:    {
+16535:      const size_type __n = std::distance(__first, __last);
+16535:      if (size_type(this->_M_impl._M_end_of_storage
+16535:      - this->_M_impl._M_finish) >= __n)
+16535:        {
+16535:   const size_type __elems_after = end() - __position;
+16535:   pointer __old_finish(this->_M_impl._M_finish);
+16535:   if (__elems_after > __n)
+16535:     {
+16535:       ;
+16535:       std::__uninitialized_move_a(this->_M_impl._M_finish - __n,
+16535:       this->_M_impl._M_finish,
+16535:       this->_M_impl._M_finish,
+16535:       _M_get_Tp_allocator());
+16535:       this->_M_impl._M_finish += __n;
+16535:       ;
+16535:       std::move_backward(__position.base(), __old_finish - __n, __old_finish)
+16535:                                           ;
+16535:       std::copy(__first, __last, __position);
+16535:     }
+16535:   else
+16535:     {
+16535:       _ForwardIterator __mid = __first;
+16535:       std::advance(__mid, __elems_after);
+16535:       ;
+16535:       std::__uninitialized_copy_a(__mid, __last,
+16535:       this->_M_impl._M_finish,
+16535:       _M_get_Tp_allocator());
+16535:       this->_M_impl._M_finish += __n - __elems_after;
+16535:       ;
+16535:       std::__uninitialized_move_a(__position.base(),
+16535:       __old_finish,
+16535:       this->_M_impl._M_finish,
+16535:       _M_get_Tp_allocator());
+16535:       this->_M_impl._M_finish += __elems_after;
+16535:       ;
+16535:       std::copy(__first, __mid, __position);
+16535:     }
+16535:        }
+16535:      else
+16535:        {
+16535:   const size_type __len =
+16535:     _M_check_len(__n, "vector::_M_range_insert");
+16535:   pointer __new_start(this->_M_allocate(__len));
+16535:   pointer __new_finish(__new_start);
+16535:   try
+16535:     {
+16535:       __new_finish
+16535:         = std::__uninitialized_move_if_noexcept_a
+16535:         (this->_M_impl._M_start, __position.base(),
+16535:          __new_start, _M_get_Tp_allocator());
+16535:       __new_finish
+16535:         = std::__uninitialized_copy_a(__first, __last,
+16535:           __new_finish,
+16535:           _M_get_Tp_allocator());
+16535:       __new_finish
+16535:         = std::__uninitialized_move_if_noexcept_a
+16535:         (__position.base(), this->_M_impl._M_finish,
+16535:          __new_finish, _M_get_Tp_allocator());
+16535:     }
+16535:   catch(...)
+16535:     {
+16535:       std::_Destroy(__new_start, __new_finish,
+16535:       _M_get_Tp_allocator());
+16535:       _M_deallocate(__new_start, __len);
+16535:       throw;
+16535:     }
+16535:   ;
+16535:   std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
+16535:          _M_get_Tp_allocator());
+16535:   _M_deallocate(this->_M_impl._M_start,
+16535:          this->_M_impl._M_end_of_storage
+16535:          - this->_M_impl._M_start);
+16535:   this->_M_impl._M_start = __new_start;
+16535:   this->_M_impl._M_finish = __new_finish;
+16535:   this->_M_impl._M_end_of_storage = __new_start + __len;
+16535:        }
+16535:    }
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Alloc>
+16535:     void
+16535:     vector<bool, _Alloc>::
+16535:     _M_reallocate(size_type __n)
+16535:     {
+16535:       _Bit_pointer __q = this->_M_allocate(__n);
+16535:       iterator __start(std::__addressof(*__q), 0);
+16535:       iterator __finish(_M_copy_aligned(begin(), end(), __start));
+16535:       this->_M_deallocate();
+16535:       this->_M_impl._M_start = __start;
+16535:       this->_M_impl._M_finish = __finish;
+16535:       this->_M_impl._M_end_of_storage = __q + _S_nword(__n);
+16535:     }
+16535: 
+16535:   template<typename _Alloc>
+16535:     void
+16535:     vector<bool, _Alloc>::
+16535:     _M_fill_insert(iterator __position, size_type __n, bool __x)
+16535:     {
+16535:       if (__n == 0)
+16535:  return;
+16535:       if (capacity() - size() >= __n)
+16535:  {
+16535:    std::copy_backward(__position, end(),
+16535:         this->_M_impl._M_finish + difference_type(__n));
+16535:    std::fill(__position, __position + difference_type(__n), __x);
+16535:    this->_M_impl._M_finish += difference_type(__n);
+16535:  }
+16535:       else
+16535:  {
+16535:    const size_type __len =
+16535:      _M_check_len(__n, "vector<bool>::_M_fill_insert");
+16535:    _Bit_pointer __q = this->_M_allocate(__len);
+16535:    iterator __start(std::__addressof(*__q), 0);
+16535:    iterator __i = _M_copy_aligned(begin(), __position, __start);
+16535:    std::fill(__i, __i + difference_type(__n), __x);
+16535:    iterator __finish = std::copy(__position, end(),
+16535:      __i + difference_type(__n));
+16535:    this->_M_deallocate();
+16535:    this->_M_impl._M_end_of_storage = __q + _S_nword(__len);
+16535:    this->_M_impl._M_start = __start;
+16535:    this->_M_impl._M_finish = __finish;
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _Alloc>
+16535:     template<typename _ForwardIterator>
+16535:       void
+16535:       vector<bool, _Alloc>::
+16535:       _M_insert_range(iterator __position, _ForwardIterator __first,
+16535:         _ForwardIterator __last, std::forward_iterator_tag)
+16535:       {
+16535:  if (__first != __last)
+16535:    {
+16535:      size_type __n = std::distance(__first, __last);
+16535:      if (capacity() - size() >= __n)
+16535:        {
+16535:   std::copy_backward(__position, end(),
+16535:        this->_M_impl._M_finish
+16535:        + difference_type(__n));
+16535:   std::copy(__first, __last, __position);
+16535:   this->_M_impl._M_finish += difference_type(__n);
+16535:        }
+16535:      else
+16535:        {
+16535:   const size_type __len =
+16535:     _M_check_len(__n, "vector<bool>::_M_insert_range");
+16535:   _Bit_pointer __q = this->_M_allocate(__len);
+16535:   iterator __start(std::__addressof(*__q), 0);
+16535:   iterator __i = _M_copy_aligned(begin(), __position, __start);
+16535:   __i = std::copy(__first, __last, __i);
+16535:   iterator __finish = std::copy(__position, end(), __i);
+16535:   this->_M_deallocate();
+16535:   this->_M_impl._M_end_of_storage = __q + _S_nword(__len);
+16535:   this->_M_impl._M_start = __start;
+16535:   this->_M_impl._M_finish = __finish;
+16535:        }
+16535:    }
+16535:       }
+16535: 
+16535:   template<typename _Alloc>
+16535:     void
+16535:     vector<bool, _Alloc>::
+16535:     _M_insert_aux(iterator __position, bool __x)
+16535:     {
+16535:       if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr())
+16535:  {
+16535:    std::copy_backward(__position, this->_M_impl._M_finish,
+16535:         this->_M_impl._M_finish + 1);
+16535:    *__position = __x;
+16535:    ++this->_M_impl._M_finish;
+16535:  }
+16535:       else
+16535:  {
+16535:    const size_type __len =
+16535:      _M_check_len(size_type(1), "vector<bool>::_M_insert_aux");
+16535:    _Bit_pointer __q = this->_M_allocate(__len);
+16535:    iterator __start(std::__addressof(*__q), 0);
+16535:    iterator __i = _M_copy_aligned(begin(), __position, __start);
+16535:    *__i++ = __x;
+16535:    iterator __finish = std::copy(__position, end(), __i);
+16535:    this->_M_deallocate();
+16535:    this->_M_impl._M_end_of_storage = __q + _S_nword(__len);
+16535:    this->_M_impl._M_start = __start;
+16535:    this->_M_impl._M_finish = __finish;
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _Alloc>
+16535:     typename vector<bool, _Alloc>::iterator
+16535:     vector<bool, _Alloc>::
+16535:     _M_erase(iterator __position)
+16535:     {
+16535:       if (__position + 1 != end())
+16535:         std::copy(__position + 1, end(), __position);
+16535:       --this->_M_impl._M_finish;
+16535:       return __position;
+16535:     }
+16535: 
+16535:   template<typename _Alloc>
+16535:     typename vector<bool, _Alloc>::iterator
+16535:     vector<bool, _Alloc>::
+16535:     _M_erase(iterator __first, iterator __last)
+16535:     {
+16535:       if (__first != __last)
+16535:  _M_erase_at_end(std::copy(__last, end(), __first));
+16535:       return __first;
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _Alloc>
+16535:     bool
+16535:     vector<bool, _Alloc>::
+16535:     _M_shrink_to_fit()
+16535:     {
+16535:       if (capacity() - size() < int(_S_word_bit))
+16535:  return false;
+16535:       try
+16535:  {
+16535:    _M_reallocate(size());
+16535:    return true;
+16535:  }
+16535:       catch(...)
+16535:  { return false; }
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   template<typename _Alloc>
+16535:     size_t
+16535:     hash<std::vector<bool, _Alloc>>::
+16535:     operator()(const std::vector<bool, _Alloc>& __b) const noexcept
+16535:     {
+16535:       size_t __hash = 0;
+16535:       using std::_S_word_bit;
+16535:       using std::_Bit_type;
+16535: 
+16535:       const size_t __words = __b.size() / _S_word_bit;
+16535:       if (__words)
+16535:  {
+16535:    const size_t __clength = __words * sizeof(_Bit_type);
+16535:    __hash = std::_Hash_impl::hash(__b._M_impl._M_start._M_p, __clength);
+16535:  }
+16535: 
+16535:       const size_t __extrabits = __b.size() % _S_word_bit;
+16535:       if (__extrabits)
+16535:  {
+16535:    _Bit_type __hiword = *__b._M_impl._M_finish._M_p;
+16535:    __hiword &= ~((~static_cast<_Bit_type>(0)) << __extrabits);
+16535: 
+16535:    const size_t __clength
+16535:      = (__extrabits + 8 - 1) / 8;
+16535:    if (__words)
+16535:      __hash = std::_Hash_impl::hash(&__hiword, __clength, __hash);
+16535:    else
+16535:      __hash = std::_Hash_impl::hash(&__hiword, __clength);
+16535:  }
+16535: 
+16535:       return __hash;
+16535:     }
+16535: 
+16535: 
+16535: }
+16535: # 70 "/usr/include/c++/8/vector" 2 3
+16535: # 33 "../../src/Linear_Form_defs.hh" 2
+16535: 
+16535: 
+16535: # 34 "../../src/Linear_Form_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: void swap(Linear_Form<C>& x, Linear_Form<C>& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>
+16535: operator+(const Linear_Form<C>& f1, const Linear_Form<C>& f2);
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>
+16535: operator+(Variable v, const Linear_Form<C>& f);
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>
+16535: operator+(const Linear_Form<C>& f, Variable v);
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>
+16535: operator+(const C& n, const Linear_Form<C>& f);
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>
+16535: operator+(const Linear_Form<C>& f, const C& n);
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>
+16535: operator+(const Linear_Form<C>& f);
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>
+16535: operator-(const Linear_Form<C>& f);
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>
+16535: operator-(const Linear_Form<C>& f1, const Linear_Form<C>& f2);
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>
+16535: operator-(Variable v, const Linear_Form<C>& f);
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>
+16535: operator-(const Linear_Form<C>& f, Variable v);
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>
+16535: operator-(const C& n, const Linear_Form<C>& f);
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>
+16535: operator-(const Linear_Form<C>& f, const C& n);
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>
+16535: operator*(const C& n, const Linear_Form<C>& f);
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>
+16535: operator*(const Linear_Form<C>& f, const C& n);
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>&
+16535: operator+=(Linear_Form<C>& f1, const Linear_Form<C>& f2);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>&
+16535: operator+=(Linear_Form<C>& f, Variable v);
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>&
+16535: operator+=(Linear_Form<C>& f, const C& n);
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>&
+16535: operator-=(Linear_Form<C>& f1, const Linear_Form<C>& f2);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>&
+16535: operator-=(Linear_Form<C>& f, Variable v);
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>&
+16535: operator-=(Linear_Form<C>& f, const C& n);
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>&
+16535: operator*=(Linear_Form<C>& f, const C& n);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>&
+16535: operator/=(Linear_Form<C>& f, const C& n);
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: bool
+16535: operator==(const Linear_Form<C>& x, const Linear_Form<C>& y);
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: bool
+16535: operator!=(const Linear_Form<C>& x, const Linear_Form<C>& y);
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: template <typename C>
+16535: std::ostream& operator<<(std::ostream& s, const Linear_Form<C>& f);
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 260 "../../src/Linear_Form_defs.hh"
+16535: template <typename C>
+16535: class Parma_Polyhedra_Library::Linear_Form {
+16535: public:
+16535: 
+16535:   Linear_Form();
+16535: 
+16535: 
+16535:   Linear_Form(const Linear_Form& f);
+16535: 
+16535: 
+16535:   ~Linear_Form();
+16535: 
+16535: 
+16535:   explicit Linear_Form(const C& n);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Linear_Form(Variable v);
+16535: 
+16535: 
+16535:   Linear_Form(const Linear_Expression& e);
+16535: 
+16535: 
+16535:   static dimension_type max_space_dimension();
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535:   const C& coefficient(Variable v) const;
+16535: 
+16535: 
+16535:   const C& inhomogeneous_term() const;
+16535: 
+16535: 
+16535:   void negate();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535: 
+16535:   void m_swap(Linear_Form& y);
+16535: # 336 "../../src/Linear_Form_defs.hh"
+16535:   bool overflows() const;
+16535: # 365 "../../src/Linear_Form_defs.hh"
+16535:   void relative_error(Floating_Point_Format analyzed_format,
+16535:                       Linear_Form& result) const;
+16535: # 398 "../../src/Linear_Form_defs.hh"
+16535:   template <typename Target>
+16535:   bool intervalize(const FP_Oracle<Target,C>& oracle, C& result) const;
+16535: 
+16535: private:
+16535: 
+16535:   static C zero;
+16535: 
+16535: 
+16535:   typedef std::vector<C> vec_type;
+16535: 
+16535: 
+16535:   vec_type vec;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Linear_Form(dimension_type sz, bool);
+16535: # 426 "../../src/Linear_Form_defs.hh"
+16535:   Linear_Form(Variable v, Variable w);
+16535: 
+16535: 
+16535:   dimension_type size() const;
+16535: 
+16535: 
+16535:   void extend(dimension_type sz);
+16535: 
+16535: 
+16535:   C& operator[](dimension_type i);
+16535: 
+16535: 
+16535:   const C& operator[](dimension_type i) const;
+16535: 
+16535:   friend Linear_Form<C>
+16535:   operator+<C>(const Linear_Form<C>& f1, const Linear_Form<C>& f2);
+16535:   friend Linear_Form<C>
+16535:   operator+<C>(const C& n, const Linear_Form<C>& f);
+16535:   friend Linear_Form<C>
+16535:   operator+<C>(const Linear_Form<C>& f, const C& n);
+16535:   friend Linear_Form<C>
+16535:   operator+<C>(Variable v, const Linear_Form<C>& f);
+16535: 
+16535:   friend Linear_Form<C>
+16535:   operator-<C>(const Linear_Form<C>& f);
+16535: 
+16535:   friend Linear_Form<C>
+16535:   operator-<C>(const Linear_Form<C>& f1, const Linear_Form<C>& f2);
+16535:   friend Linear_Form<C>
+16535:   operator-<C>(const C& n, const Linear_Form<C>& f);
+16535:   friend Linear_Form<C>
+16535:   operator-<C>(const Linear_Form<C>& f, const C& n);
+16535:   friend Linear_Form<C>
+16535:   operator-<C>(Variable v, const Linear_Form<C>& f);
+16535:   friend Linear_Form<C>
+16535:   operator-<C>(const Linear_Form<C>& f, Variable v);
+16535: 
+16535:   friend Linear_Form<C>
+16535:   operator*<C>(const C& n, const Linear_Form<C>& f);
+16535:   friend Linear_Form<C>
+16535:   operator*<C>(const Linear_Form<C>& f, const C& n);
+16535: 
+16535:   friend Linear_Form<C>&
+16535:   operator+=<C>(Linear_Form<C>& f1, const Linear_Form<C>& f2);
+16535:   friend Linear_Form<C>&
+16535:   operator+=<C>(Linear_Form<C>& f, Variable v);
+16535:   friend Linear_Form<C>&
+16535:   operator+=<C>(Linear_Form<C>& f, const C& n);
+16535: 
+16535:   friend Linear_Form<C>&
+16535:   operator-=<C>(Linear_Form<C>& f1, const Linear_Form<C>& f2);
+16535:   friend Linear_Form<C>&
+16535:   operator-=<C>(Linear_Form<C>& f, Variable v);
+16535:   friend Linear_Form<C>&
+16535:   operator-=<C>(Linear_Form<C>& f, const C& n);
+16535: 
+16535:   friend Linear_Form<C>&
+16535:   operator*=<C>(Linear_Form<C>& f, const C& n);
+16535: 
+16535:   friend Linear_Form<C>&
+16535:   operator/=<C>(Linear_Form<C>& f, const C& n);
+16535: 
+16535:   friend bool
+16535:   operator==<C>(const Linear_Form<C>& x, const Linear_Form<C>& y);
+16535: 
+16535:   friend std::ostream&
+16535:   Parma_Polyhedra_Library::IO_Operators
+16535:   ::operator<<<C>(std::ostream& s, const Linear_Form<C>& f);
+16535: };
+16535: 
+16535: # 1 "../../src/Linear_Form_inlines.hh" 1
+16535: # 28 "../../src/Linear_Form_inlines.hh"
+16535: # 1 "/usr/include/c++/8/iostream" 1 3
+16535: # 36 "/usr/include/c++/8/iostream" 3
+16535:        
+16535: # 37 "/usr/include/c++/8/iostream" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 42 "/usr/include/c++/8/iostream" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 60 "/usr/include/c++/8/iostream" 3
+16535:   extern istream cin;
+16535:   extern ostream cout;
+16535:   extern ostream cerr;
+16535:   extern ostream clog;
+16535: 
+16535: 
+16535:   extern wistream wcin;
+16535:   extern wostream wcout;
+16535:   extern wostream wcerr;
+16535:   extern wostream wclog;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static ios_base::Init __ioinit;
+16535: 
+16535: 
+16535: }
+16535: # 29 "../../src/Linear_Form_inlines.hh" 2
+16535: 
+16535: 
+16535: 
+16535: # 31 "../../src/Linear_Form_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename C>
+16535: inline dimension_type
+16535: Linear_Form<C>::max_space_dimension() {
+16535:   return vec_type().max_size() - 1;
+16535: }
+16535: 
+16535: template <typename C>
+16535: inline
+16535: Linear_Form<C>::Linear_Form()
+16535:   : vec(1, zero) {
+16535:   vec.reserve(compute_capacity(1, vec_type().max_size()));
+16535: }
+16535: 
+16535: template <typename C>
+16535: inline
+16535: Linear_Form<C>::Linear_Form(dimension_type sz, bool)
+16535:   : vec(sz, zero) {
+16535:   vec.reserve(compute_capacity(sz, vec_type().max_size()));
+16535: }
+16535: 
+16535: template <typename C>
+16535: inline
+16535: Linear_Form<C>::Linear_Form(const Linear_Form& f)
+16535:   : vec(f.vec) {
+16535: }
+16535: 
+16535: template <typename C>
+16535: inline
+16535: Linear_Form<C>::~Linear_Form() {
+16535: }
+16535: 
+16535: template <typename C>
+16535: inline dimension_type
+16535: Linear_Form<C>::size() const {
+16535:   return vec.size();
+16535: }
+16535: 
+16535: template <typename C>
+16535: inline void
+16535: Linear_Form<C>::extend(dimension_type sz) {
+16535:   
+16535: # 73 "../../src/Linear_Form_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 73 "../../src/Linear_Form_inlines.hh"
+16535:                     ;
+16535:   vec.reserve(compute_capacity(sz, vec_type().max_size()));
+16535:   vec.resize(sz, zero);
+16535: }
+16535: 
+16535: template <typename C>
+16535: inline
+16535: Linear_Form<C>::Linear_Form(const C& n)
+16535:   : vec(1, n) {
+16535:   vec.reserve(compute_capacity(1, vec_type().max_size()));
+16535: }
+16535: 
+16535: template <typename C>
+16535: inline dimension_type
+16535: Linear_Form<C>::space_dimension() const {
+16535:   return size() - 1;
+16535: }
+16535: 
+16535: template <typename C>
+16535: inline const C&
+16535: Linear_Form<C>::coefficient(Variable v) const {
+16535:   if (v.space_dimension() > space_dimension()) {
+16535:     return zero;
+16535:   }
+16535:   return vec[v.id()+1];
+16535: }
+16535: 
+16535: template <typename C>
+16535: inline C&
+16535: Linear_Form<C>::operator[](dimension_type i) {
+16535:   
+16535: # 103 "../../src/Linear_Form_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 103 "../../src/Linear_Form_inlines.hh"
+16535:                    ;
+16535:   return vec[i];
+16535: }
+16535: 
+16535: template <typename C>
+16535: inline const C&
+16535: Linear_Form<C>::operator[](dimension_type i) const {
+16535:   
+16535: # 110 "../../src/Linear_Form_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 110 "../../src/Linear_Form_inlines.hh"
+16535:                    ;
+16535:   return vec[i];
+16535: }
+16535: 
+16535: template <typename C>
+16535: inline const C&
+16535: Linear_Form<C>::inhomogeneous_term() const {
+16535:   return vec[0];
+16535: }
+16535: 
+16535: template <typename C>
+16535: inline memory_size_type
+16535: Linear_Form<C>::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: inline Linear_Form<C>
+16535: operator+(const Linear_Form<C>& f) {
+16535:   return f;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: inline Linear_Form<C>
+16535: operator+(const Linear_Form<C>& f, const C& n) {
+16535:   return n + f;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: inline Linear_Form<C>
+16535: operator+(const Linear_Form<C>& f, const Variable v) {
+16535:   return v + f;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: inline Linear_Form<C>
+16535: operator-(const Linear_Form<C>& f, const C& n) {
+16535:   return -n + f;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: inline Linear_Form<C>
+16535: operator-(const Variable v, const Variable w) {
+16535:   return Linear_Form<C>(v, w);
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: inline Linear_Form<C>
+16535: operator*(const Linear_Form<C>& f, const C& n) {
+16535:   return n * f;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: inline Linear_Form<C>&
+16535: operator+=(Linear_Form<C>& f, const C& n) {
+16535:   f[0] += n;
+16535:   return f;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: inline Linear_Form<C>&
+16535: operator-=(Linear_Form<C>& f, const C& n) {
+16535:   f[0] -= n;
+16535:   return f;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: inline bool
+16535: operator!=(const Linear_Form<C>& x, const Linear_Form<C>& y) {
+16535:   return !(x == y);
+16535: }
+16535: 
+16535: template <typename C>
+16535: inline void
+16535: Linear_Form<C>::m_swap(Linear_Form& y) {
+16535:   using std::swap;
+16535:   swap(vec, y.vec);
+16535: }
+16535: 
+16535: template <typename C>
+16535: inline void
+16535: Linear_Form<C>::ascii_dump(std::ostream& s) const {
+16535:   using namespace IO_Operators;
+16535:   dimension_type space_dim = space_dimension();
+16535:   s << space_dim << "\n";
+16535:   for (dimension_type i = 0; i <= space_dim; ++i) {
+16535:     const char separator = ' ';
+16535:     s << vec[i] << separator;
+16535:   }
+16535:   s << "\n";
+16535: }
+16535: 
+16535: template <typename C>
+16535: inline bool
+16535: Linear_Form<C>::ascii_load(std::istream& s) {
+16535:   using namespace IO_Operators;
+16535:   dimension_type new_dim;
+16535:   if (!(s >> new_dim)) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   vec.resize(new_dim + 1, zero);
+16535:   for (dimension_type i = 0; i <= new_dim; ++i) {
+16535:     if (!(s >> vec[i])) {
+16535:       return false;
+16535:     }
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   return true;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: inline bool
+16535: Linear_Form<C>::overflows() const {
+16535:   if (!inhomogeneous_term().is_bounded()) {
+16535:     return true;
+16535:   }
+16535:   for (dimension_type i = space_dimension(); i-- > 0; ) {
+16535:     if (!coefficient(Variable(i)).is_bounded()) {
+16535:       return true;
+16535:     }
+16535:   }
+16535: 
+16535:   return false;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: inline void
+16535: swap(Linear_Form<C>& x, Linear_Form<C>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 497 "../../src/Linear_Form_defs.hh" 2
+16535: # 29 "../../src/Float_inlines.hh" 2
+16535: 
+16535: # 1 "/usr/include/c++/8/climits" 1 3
+16535: # 39 "/usr/include/c++/8/climits" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/climits" 3
+16535: 
+16535: 
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 1 3 4
+16535: # 43 "/usr/include/c++/8/climits" 2 3
+16535: # 31 "../../src/Float_inlines.hh" 2
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline int
+16535: float_ieee754_half::inf_sign() const {
+16535:   if (word == NEG_INF) {
+16535:     return -1;
+16535:   }
+16535:   if (word == POS_INF) {
+16535:     return 1;
+16535:   }
+16535:   return 0;
+16535: }
+16535: 
+16535: inline bool
+16535: float_ieee754_half::is_nan() const {
+16535:   return (word & ~SGN_MASK) > POS_INF;
+16535: }
+16535: 
+16535: inline int
+16535: float_ieee754_half::zero_sign() const {
+16535:   if (word == NEG_ZERO) {
+16535:     return -1;
+16535:   }
+16535:   if (word == POS_ZERO) {
+16535:     return 1;
+16535:   }
+16535:   return 0;
+16535: }
+16535: 
+16535: inline void
+16535: float_ieee754_half::negate() {
+16535:   word ^= SGN_MASK;
+16535: }
+16535: 
+16535: inline bool
+16535: float_ieee754_half::sign_bit() const {
+16535:   return (word & SGN_MASK) != 0;
+16535: }
+16535: 
+16535: inline void
+16535: float_ieee754_half::dec() {
+16535:   --word;
+16535: }
+16535: 
+16535: inline void
+16535: float_ieee754_half::inc() {
+16535:   ++word;
+16535: }
+16535: 
+16535: inline void
+16535: float_ieee754_half::set_max(bool negative) {
+16535:   word = WRD_MAX;
+16535:   if (negative) {
+16535:     word |= SGN_MASK;
+16535:   }
+16535: }
+16535: 
+16535: inline void
+16535: float_ieee754_half::build(bool negative, mpz_t mantissa, int exponent) {
+16535:   word = static_cast<uint16_t>(
+16535: # 91 "../../src/Float_inlines.hh" 3 4
+16535:                               __gmpz_get_ui
+16535: # 91 "../../src/Float_inlines.hh"
+16535:                                         (mantissa)
+16535:                                & ((1UL << MANTISSA_BITS) - 1));
+16535:   if (negative) {
+16535:     word |= SGN_MASK;
+16535:   }
+16535:   const int exponent_repr = exponent + EXPONENT_BIAS;
+16535:   ((void) 0);
+16535:   word |= static_cast<uint16_t>(exponent_repr) << MANTISSA_BITS;
+16535: }
+16535: 
+16535: inline int
+16535: float_ieee754_single::inf_sign() const {
+16535:   if (word == NEG_INF) {
+16535:     return -1;
+16535:   }
+16535:   if (word == POS_INF) {
+16535:     return 1;
+16535:   }
+16535:   return 0;
+16535: }
+16535: 
+16535: inline bool
+16535: float_ieee754_single::is_nan() const {
+16535:   return (word & ~SGN_MASK) > POS_INF;
+16535: }
+16535: 
+16535: inline int
+16535: float_ieee754_single::zero_sign() const {
+16535:   if (word == NEG_ZERO) {
+16535:     return -1;
+16535:   }
+16535:   if (word == POS_ZERO) {
+16535:     return 1;
+16535:   }
+16535:   return 0;
+16535: }
+16535: 
+16535: inline void
+16535: float_ieee754_single::negate() {
+16535:   word ^= SGN_MASK;
+16535: }
+16535: 
+16535: inline bool
+16535: float_ieee754_single::sign_bit() const {
+16535:   return (word & SGN_MASK) != 0;
+16535: }
+16535: 
+16535: inline void
+16535: float_ieee754_single::dec() {
+16535:   --word;
+16535: }
+16535: 
+16535: inline void
+16535: float_ieee754_single::inc() {
+16535:   ++word;
+16535: }
+16535: 
+16535: inline void
+16535: float_ieee754_single::set_max(bool negative) {
+16535:   word = WRD_MAX;
+16535:   if (negative) {
+16535:     word |= SGN_MASK;
+16535:   }
+16535: }
+16535: 
+16535: inline void
+16535: float_ieee754_single::build(bool negative, mpz_t mantissa, int exponent) {
+16535:   word = static_cast<uint32_t>(
+16535: # 158 "../../src/Float_inlines.hh" 3 4
+16535:                               __gmpz_get_ui
+16535: # 158 "../../src/Float_inlines.hh"
+16535:                                         (mantissa)
+16535:                                & ((1UL << MANTISSA_BITS) - 1));
+16535:   if (negative) {
+16535:     word |= SGN_MASK;
+16535:   }
+16535:   const int exponent_repr = exponent + EXPONENT_BIAS;
+16535:   ((void) 0);
+16535:   word |= static_cast<uint32_t>(exponent_repr) << MANTISSA_BITS;
+16535: }
+16535: 
+16535: inline int
+16535: float_ieee754_double::inf_sign() const {
+16535:   if (lsp != LSP_INF) {
+16535:     return 0;
+16535:   }
+16535:   if (msp == MSP_NEG_INF) {
+16535:     return -1;
+16535:   }
+16535:   if (msp == MSP_POS_INF) {
+16535:     return 1;
+16535:   }
+16535:   return 0;
+16535: }
+16535: 
+16535: inline bool
+16535: float_ieee754_double::is_nan() const {
+16535:   const uint32_t a = msp & ~MSP_SGN_MASK;
+16535:   return a > MSP_POS_INF || (a == MSP_POS_INF && lsp != LSP_INF);
+16535: }
+16535: 
+16535: inline int
+16535: float_ieee754_double::zero_sign() const {
+16535:   if (lsp != LSP_ZERO) {
+16535:     return 0;
+16535:   }
+16535:   if (msp == MSP_NEG_ZERO) {
+16535:     return -1;
+16535:   }
+16535:   if (msp == MSP_POS_ZERO) {
+16535:     return 1;
+16535:   }
+16535:   return 0;
+16535: }
+16535: 
+16535: inline void
+16535: float_ieee754_double::negate() {
+16535:   msp ^= MSP_SGN_MASK;
+16535: }
+16535: 
+16535: inline bool
+16535: float_ieee754_double::sign_bit() const {
+16535:   return (msp & MSP_SGN_MASK) != 0;
+16535: }
+16535: 
+16535: inline void
+16535: float_ieee754_double::dec() {
+16535:   if (lsp == 0) {
+16535:     --msp;
+16535:     lsp = LSP_MAX;
+16535:   }
+16535:   else {
+16535:     --lsp;
+16535:   }
+16535: }
+16535: 
+16535: inline void
+16535: float_ieee754_double::inc() {
+16535:   if (lsp == LSP_MAX) {
+16535:     ++msp;
+16535:     lsp = 0;
+16535:   }
+16535:   else {
+16535:     ++lsp;
+16535:   }
+16535: }
+16535: 
+16535: inline void
+16535: float_ieee754_double::set_max(bool negative) {
+16535:   msp = MSP_MAX;
+16535:   lsp = LSP_MAX;
+16535:   if (negative) {
+16535:     msp |= MSP_SGN_MASK;
+16535:   }
+16535: }
+16535: 
+16535: inline void
+16535: float_ieee754_double::build(bool negative, mpz_t mantissa, int exponent) {
+16535:   unsigned long m;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   m = 
+16535: # 251 "../../src/Float_inlines.hh" 3 4
+16535:      __gmpz_get_ui
+16535: # 251 "../../src/Float_inlines.hh"
+16535:                (mantissa);
+16535:   lsp = static_cast<uint32_t>(m & LSP_MAX);
+16535:   m >>= 32;
+16535: 
+16535:   msp = static_cast<uint32_t>(m & ((1UL << (MANTISSA_BITS - 32)) - 1));
+16535:   if (negative) {
+16535:     msp |= MSP_SGN_MASK;
+16535:   }
+16535:   const int exponent_repr = exponent + EXPONENT_BIAS;
+16535:   ((void) 0);
+16535:   msp |= static_cast<uint32_t>(exponent_repr) << (MANTISSA_BITS - 32);
+16535: }
+16535: 
+16535: inline int
+16535: float_ibm_single::inf_sign() const {
+16535:   if (word == NEG_INF) {
+16535:     return -1;
+16535:   }
+16535:   if (word == POS_INF) {
+16535:     return 1;
+16535:   }
+16535:   return 0;
+16535: }
+16535: 
+16535: inline bool
+16535: float_ibm_single::is_nan() const {
+16535:   return (word & ~SGN_MASK) > POS_INF;
+16535: }
+16535: 
+16535: inline int
+16535: float_ibm_single::zero_sign() const {
+16535:   if (word == NEG_ZERO) {
+16535:     return -1;
+16535:   }
+16535:   if (word == POS_ZERO) {
+16535:     return 1;
+16535:   }
+16535:   return 0;
+16535: }
+16535: 
+16535: inline void
+16535: float_ibm_single::negate() {
+16535:   word ^= SGN_MASK;
+16535: }
+16535: 
+16535: inline bool
+16535: float_ibm_single::sign_bit() const {
+16535:   return (word & SGN_MASK) != 0;
+16535: }
+16535: 
+16535: inline void
+16535: float_ibm_single::dec() {
+16535:   --word;
+16535: }
+16535: 
+16535: inline void
+16535: float_ibm_single::inc() {
+16535:   ++word;
+16535: }
+16535: 
+16535: inline void
+16535: float_ibm_single::set_max(bool negative) {
+16535:   word = WRD_MAX;
+16535:   if (negative) {
+16535:     word |= SGN_MASK;
+16535:   }
+16535: }
+16535: 
+16535: inline void
+16535: float_ibm_single::build(bool negative, mpz_t mantissa, int exponent) {
+16535:   word = static_cast<uint32_t>(
+16535: # 321 "../../src/Float_inlines.hh" 3 4
+16535:                               __gmpz_get_ui
+16535: # 321 "../../src/Float_inlines.hh"
+16535:                                         (mantissa)
+16535:                                & ((1UL << MANTISSA_BITS) - 1));
+16535:   if (negative) {
+16535:     word |= SGN_MASK;
+16535:   }
+16535:   const int exponent_repr = exponent + EXPONENT_BIAS;
+16535:   ((void) 0);
+16535:   word |= static_cast<uint32_t>(exponent_repr) << MANTISSA_BITS;
+16535: }
+16535: 
+16535: inline int
+16535: float_intel_double_extended::inf_sign() const {
+16535:   if (lsp != LSP_INF) {
+16535:     return 0;
+16535:   }
+16535:   const uint32_t a = msp & MSP_NEG_INF;
+16535:   if (a == MSP_NEG_INF) {
+16535:     return -1;
+16535:   }
+16535:   if (a == MSP_POS_INF) {
+16535:     return 1;
+16535:   }
+16535:   return 0;
+16535: }
+16535: 
+16535: inline bool
+16535: float_intel_double_extended::is_nan() const {
+16535:   return (msp & MSP_POS_INF) == MSP_POS_INF
+16535:     && lsp != LSP_INF;
+16535: }
+16535: 
+16535: inline int
+16535: float_intel_double_extended::zero_sign() const {
+16535:   if (lsp != LSP_ZERO) {
+16535:     return 0;
+16535:   }
+16535:   const uint32_t a = msp & MSP_NEG_INF;
+16535:   if (a == MSP_NEG_ZERO) {
+16535:     return -1;
+16535:   }
+16535:   if (a == MSP_POS_ZERO) {
+16535:     return 1;
+16535:   }
+16535:   return 0;
+16535: }
+16535: 
+16535: inline void
+16535: float_intel_double_extended::negate() {
+16535:   msp ^= MSP_SGN_MASK;
+16535: }
+16535: 
+16535: inline bool
+16535: float_intel_double_extended::sign_bit() const {
+16535:   return (msp & MSP_SGN_MASK) != 0;
+16535: }
+16535: 
+16535: inline void
+16535: float_intel_double_extended::dec() {
+16535:   if ((lsp & LSP_DMAX) == 0) {
+16535:     --msp;
+16535:     lsp = ((msp & MSP_NEG_INF) == 0) ? LSP_DMAX : LSP_NMAX;
+16535:   }
+16535:   else {
+16535:     --lsp;
+16535:   }
+16535: }
+16535: 
+16535: inline void
+16535: float_intel_double_extended::inc() {
+16535:   if ((lsp & LSP_DMAX) == LSP_DMAX) {
+16535:     ++msp;
+16535:     lsp = LSP_DMAX + 1;
+16535:   }
+16535:   else {
+16535:     ++lsp;
+16535:   }
+16535: }
+16535: 
+16535: inline void
+16535: float_intel_double_extended::set_max(bool negative) {
+16535:   msp = MSP_MAX;
+16535:   lsp = LSP_NMAX;
+16535:   if (negative) {
+16535:     msp |= MSP_SGN_MASK;
+16535:   }
+16535: }
+16535: 
+16535: inline void
+16535: float_intel_double_extended::build(bool negative,
+16535:                                    mpz_t mantissa, int exponent) {
+16535: 
+16535: 
+16535: 
+16535:   lsp = 
+16535: # 414 "../../src/Float_inlines.hh" 3 4
+16535:        __gmpz_get_ui
+16535: # 414 "../../src/Float_inlines.hh"
+16535:                  (mantissa);
+16535: 
+16535:   msp = (negative ? MSP_SGN_MASK : 0);
+16535:   const int exponent_repr = exponent + EXPONENT_BIAS;
+16535:   ((void) 0);
+16535:   msp |= static_cast<uint32_t>(exponent_repr);
+16535: }
+16535: 
+16535: inline int
+16535: float_ieee754_quad::inf_sign() const {
+16535:   if (lsp != LSP_INF) {
+16535:     return 0;
+16535:   }
+16535:   if (msp == MSP_NEG_INF) {
+16535:     return -1;
+16535:   }
+16535:   if (msp == MSP_POS_INF) {
+16535:     return 1;
+16535:   }
+16535:   return 0;
+16535: }
+16535: 
+16535: inline bool
+16535: float_ieee754_quad::is_nan() const {
+16535:   return (msp & ~MSP_SGN_MASK) == MSP_POS_INF
+16535:     && lsp != LSP_INF;
+16535: }
+16535: 
+16535: inline int
+16535: float_ieee754_quad::zero_sign() const {
+16535:   if (lsp != LSP_ZERO) {
+16535:     return 0;
+16535:   }
+16535:   if (msp == MSP_NEG_ZERO) {
+16535:     return -1;
+16535:   }
+16535:   if (msp == MSP_POS_ZERO) {
+16535:     return 1;
+16535:   }
+16535:   return 0;
+16535: }
+16535: 
+16535: inline void
+16535: float_ieee754_quad::negate() {
+16535:   msp ^= MSP_SGN_MASK;
+16535: }
+16535: 
+16535: inline bool
+16535: float_ieee754_quad::sign_bit() const {
+16535:   return (msp & MSP_SGN_MASK) != 0;
+16535: }
+16535: 
+16535: inline void
+16535: float_ieee754_quad::dec() {
+16535:   if (lsp == 0) {
+16535:     --msp;
+16535:     lsp = LSP_MAX;
+16535:   }
+16535:   else {
+16535:     --lsp;
+16535:   }
+16535: }
+16535: 
+16535: inline void
+16535: float_ieee754_quad::inc() {
+16535:   if (lsp == LSP_MAX) {
+16535:     ++msp;
+16535:     lsp = 0;
+16535:   }
+16535:   else {
+16535:     ++lsp;
+16535:   }
+16535: }
+16535: 
+16535: inline void
+16535: float_ieee754_quad::set_max(bool negative) {
+16535:   msp = MSP_MAX;
+16535:   lsp = LSP_MAX;
+16535:   if (negative) {
+16535:     msp |= MSP_SGN_MASK;
+16535:   }
+16535: }
+16535: 
+16535: inline void
+16535: float_ieee754_quad::build(bool negative, mpz_t mantissa, int exponent) {
+16535:   uint64_t parts[2];
+16535:   
+16535: # 500 "../../src/Float_inlines.hh" 3 4
+16535:  __gmpz_export
+16535: # 500 "../../src/Float_inlines.hh"
+16535:            (parts, 0, -1, sizeof(parts[0]), 0, 0, mantissa);
+16535:   lsp = parts[0];
+16535:   msp = parts[1];
+16535:   msp &= ((static_cast<uint64_t>(1) << (MANTISSA_BITS - 64)) - 1);
+16535:   if (negative) {
+16535:     msp |= MSP_SGN_MASK;
+16535:   }
+16535:   const int exponent_repr = exponent + EXPONENT_BIAS;
+16535:   ((void) 0);
+16535:   msp |= static_cast<uint64_t>(exponent_repr) << (MANTISSA_BITS - 64);
+16535: }
+16535: 
+16535: inline bool
+16535: is_less_precise_than(Floating_Point_Format f1, Floating_Point_Format f2) {
+16535:   return f1 < f2;
+16535: }
+16535: 
+16535: inline unsigned int
+16535: msb_position(unsigned long long v) {
+16535:   return static_cast<unsigned int>(((sizeof(v)) * static_cast<std::size_t>(8))) - 1U - clz(v);
+16535: }
+16535: 
+16535: template <typename FP_Interval_Type>
+16535: inline void
+16535: affine_form_image(std::map<dimension_type,
+16535:                            Linear_Form<FP_Interval_Type> >& lf_store,
+16535:                   const Variable var,
+16535:                   const Linear_Form<FP_Interval_Type>& lf) {
+16535: 
+16535:   lf_store[var.id()] = lf;
+16535: 
+16535:   discard_occurrences(lf_store, var);
+16535: }
+16535: 
+16535: 
+16535: inline
+16535: Float<float>::Float() {
+16535: }
+16535: 
+16535: inline
+16535: Float<float>::Float(float v) {
+16535:   u.number = v;
+16535: }
+16535: 
+16535: inline float
+16535: Float<float>::value() {
+16535:   return u.number;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: inline
+16535: Float<double>::Float() {
+16535: }
+16535: 
+16535: inline
+16535: Float<double>::Float(double v) {
+16535:   u.number = v;
+16535: }
+16535: 
+16535: inline double
+16535: Float<double>::value() {
+16535:   return u.number;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: inline
+16535: Float<long double>::Float() {
+16535: }
+16535: 
+16535: inline
+16535: Float<long double>::Float(long double v) {
+16535:   u.number = v;
+16535: }
+16535: 
+16535: inline long double
+16535: Float<long double>::value() {
+16535:   return u.number;
+16535: }
+16535: 
+16535: 
+16535: }
+16535: # 520 "../../src/Float_defs.hh" 2
+16535: # 1 "../../src/Float_templates.hh" 1
+16535: # 30 "../../src/Float_templates.hh"
+16535: # 1 "/usr/include/c++/8/cmath" 1 3
+16535: # 39 "/usr/include/c++/8/cmath" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/cmath" 3
+16535: # 31 "../../src/Float_templates.hh" 2
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type>
+16535: const FP_Interval_Type& compute_absolute_error(
+16535:                         const Floating_Point_Format analyzed_format) {
+16535:   typedef typename FP_Interval_Type::boundary_type analyzer_format;
+16535: 
+16535: 
+16535:   static const FP_Interval_Type ZERO_INTERVAL = FP_Interval_Type(0);
+16535: 
+16535:   static FP_Interval_Type ieee754_half_result = ZERO_INTERVAL;
+16535:   static FP_Interval_Type ieee754_single_result = ZERO_INTERVAL;
+16535:   static FP_Interval_Type ieee754_double_result = ZERO_INTERVAL;
+16535:   static FP_Interval_Type ibm_single_result = ZERO_INTERVAL;
+16535:   static FP_Interval_Type ieee754_quad_result = ZERO_INTERVAL;
+16535:   static FP_Interval_Type intel_double_extended_result = ZERO_INTERVAL;
+16535: 
+16535:   FP_Interval_Type* to_compute = 
+16535: # 49 "../../src/Float_templates.hh" 3 4
+16535:                                 __null
+16535: # 49 "../../src/Float_templates.hh"
+16535:                                     ;
+16535: 
+16535:   unsigned int f_base;
+16535:   int f_exponent_bias;
+16535:   unsigned int f_mantissa_bits;
+16535:   switch (analyzed_format) {
+16535:     case IEEE754_HALF:
+16535:       if (ieee754_half_result != ZERO_INTERVAL) {
+16535:         return ieee754_half_result;
+16535:       }
+16535:       to_compute = &ieee754_half_result;
+16535:       f_base = float_ieee754_half::BASE;
+16535:       f_exponent_bias = float_ieee754_half::EXPONENT_BIAS;
+16535:       f_mantissa_bits = float_ieee754_half::MANTISSA_BITS;
+16535:       break;
+16535:     case IEEE754_SINGLE:
+16535:       if (ieee754_single_result != ZERO_INTERVAL) {
+16535:         return ieee754_single_result;
+16535:       }
+16535: 
+16535:       to_compute = &ieee754_single_result;
+16535:       f_base = float_ieee754_single::BASE;
+16535:       f_exponent_bias = float_ieee754_single::EXPONENT_BIAS;
+16535:       f_mantissa_bits = float_ieee754_single::MANTISSA_BITS;
+16535:       break;
+16535:     case IEEE754_DOUBLE:
+16535:       if (ieee754_double_result != ZERO_INTERVAL) {
+16535:         return ieee754_double_result;
+16535:       }
+16535: 
+16535:       to_compute = &ieee754_double_result;
+16535:       f_base = float_ieee754_double::BASE;
+16535:       f_exponent_bias = float_ieee754_double::EXPONENT_BIAS;
+16535:       f_mantissa_bits = float_ieee754_double::MANTISSA_BITS;
+16535:       break;
+16535:     case IBM_SINGLE:
+16535:       if (ibm_single_result != ZERO_INTERVAL) {
+16535:         return ibm_single_result;
+16535:       }
+16535: 
+16535:       to_compute = &ibm_single_result;
+16535:       f_base = float_ibm_single::BASE;
+16535:       f_exponent_bias = float_ibm_single::EXPONENT_BIAS;
+16535:       f_mantissa_bits = float_ibm_single::MANTISSA_BITS;
+16535:       break;
+16535:     case IEEE754_QUAD:
+16535:       if (ieee754_quad_result != ZERO_INTERVAL) {
+16535:         return ieee754_quad_result;
+16535:       }
+16535: 
+16535:       to_compute = &ieee754_quad_result;
+16535:       f_base = float_ieee754_quad::BASE;
+16535:       f_exponent_bias = float_ieee754_quad::EXPONENT_BIAS;
+16535:       f_mantissa_bits = float_ieee754_quad::MANTISSA_BITS;
+16535:       break;
+16535:     case INTEL_DOUBLE_EXTENDED:
+16535:       if (intel_double_extended_result != ZERO_INTERVAL) {
+16535:         return intel_double_extended_result;
+16535:       }
+16535: 
+16535:       to_compute = &intel_double_extended_result;
+16535:       f_base = float_intel_double_extended::BASE;
+16535:       f_exponent_bias = float_intel_double_extended::EXPONENT_BIAS;
+16535:       f_mantissa_bits = float_intel_double_extended::MANTISSA_BITS;
+16535:       break;
+16535:     default:
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       break;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535:   analyzer_format omega;
+16535:   int power = static_cast<int>(msb_position(f_base))
+16535:     * ((1 - f_exponent_bias) - static_cast<int>(f_mantissa_bits));
+16535:   omega = std::max(static_cast<analyzer_format>(ldexp(1.0, power)),
+16535:                    std::numeric_limits<analyzer_format>::denorm_min());
+16535: 
+16535:   to_compute->build(i_constraint(GREATER_OR_EQUAL, -omega),
+16535:                     i_constraint(LESS_OR_EQUAL, omega));
+16535:   return *to_compute;
+16535: }
+16535: 
+16535: template <typename FP_Interval_Type>
+16535: void
+16535: discard_occurrences(std::map<dimension_type,
+16535:                              Linear_Form<FP_Interval_Type> >& lf_store,
+16535:                     Variable var) {
+16535:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
+16535:   typedef typename std::map<dimension_type, FP_Linear_Form>::iterator Iter;
+16535:   for (Iter i = lf_store.begin(); i != lf_store.end(); ) {
+16535:     if ((i->second).coefficient(var) != 0) {
+16535:       i = lf_store.erase(i);
+16535:     }
+16535:     else {
+16535:       ++i;
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: 
+16535: 
+16535: template <typename FP_Interval_Type>
+16535: void upper_bound_assign(std::map<dimension_type,
+16535:                                  Linear_Form<FP_Interval_Type> >& ls1,
+16535:                         const std::map<dimension_type,
+16535:                                        Linear_Form<FP_Interval_Type> >& ls2) {
+16535:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
+16535:   typedef typename std::map<dimension_type, FP_Linear_Form>::iterator Iter;
+16535:   typedef typename std::map<dimension_type,
+16535:                             FP_Linear_Form>::const_iterator Const_Iter;
+16535: 
+16535:   Const_Iter i2_end = ls2.end();
+16535:   for (Iter i1 = ls1.begin(), i1_end = ls1.end(); i1 != i1_end; ) {
+16535:     Const_Iter i2 = ls2.find(i1->first);
+16535:     if ((i2 == i2_end) || (i1->second != i2->second)) {
+16535:       i1 = ls1.erase(i1);
+16535:     }
+16535:     else {
+16535:       ++i1;
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: }
+16535: # 521 "../../src/Float_defs.hh" 2
+16535: # 32 "../../src/checked_defs.hh" 2
+16535: # 1 "/usr/include/c++/8/cassert" 1 3
+16535: # 41 "/usr/include/c++/8/cassert" 3
+16535:        
+16535: # 42 "/usr/include/c++/8/cassert" 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/assert.h" 1 3 4
+16535: # 44 "/usr/include/c++/8/cassert" 2 3
+16535: # 33 "../../src/checked_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Checked {
+16535: # 471 "../../src/checked_defs.hh"
+16535: template <typename Policy1, typename Policy2, typename Type1, typename Type2> struct copy_function_struct; template <typename Policy1, typename Policy2, typename Type1, typename Type2> inline void copy( Type1& arg1, const Type2& arg2) { return copy_function_struct<Policy1, Policy2, Type1, Type2>::function(arg1, arg2); }
+16535: 
+16535: template <typename Policy, typename From> struct sgn_function_struct; template <typename Policy, typename From> inline Result_Relation sgn(const From& arg) { return sgn_function_struct<Policy, From>::function(arg); }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Type1, typename Type2> struct cmp_function_struct; template <typename Policy1, typename Policy2, typename Type1, typename Type2> inline Result_Relation cmp(const Type1& arg1, const Type2& arg2) { return cmp_function_struct<Policy1, Policy2, Type1, Type2>::function(arg1, arg2); }
+16535: 
+16535: template <typename Policy, typename Type> struct classify_function_struct; template <typename Policy, typename Type> inline Result classify(const Type& arg, bool a1, bool a2, bool a3) { return classify_function_struct<Policy, Type>::function(arg, a1, a2, a3); }
+16535: 
+16535: template <typename Policy, typename Type> struct is_nan_function_struct; template <typename Policy, typename Type> inline bool is_nan(const Type& arg) { return is_nan_function_struct<Policy, Type>::function(arg); }
+16535: 
+16535: template <typename Policy, typename Type> struct is_minf_function_struct; template <typename Policy, typename Type> inline bool is_minf(const Type& arg) { return is_minf_function_struct<Policy, Type>::function(arg); }
+16535: 
+16535: template <typename Policy, typename Type> struct is_pinf_function_struct; template <typename Policy, typename Type> inline bool is_pinf(const Type& arg) { return is_pinf_function_struct<Policy, Type>::function(arg); }
+16535: 
+16535: template <typename Policy, typename Type> struct is_int_function_struct; template <typename Policy, typename Type> inline bool is_int(const Type& arg) { return is_int_function_struct<Policy, Type>::function(arg); }
+16535: 
+16535: template <typename Policy, typename Type> struct assign_special_function_struct; template <typename Policy, typename Type> inline Result assign_special( Type& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_function_struct<Policy, Type>::function(arg, a1, a2); }
+16535: 
+16535: template <typename Policy, typename Type> struct construct_special_function_struct; template <typename Policy, typename Type> inline Result construct_special( Type& arg, Result_Class a1, Rounding_Dir a2) { return construct_special_function_struct<Policy, Type>::function(arg, a1, a2); }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename To, typename From> struct construct_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result construct( To& arg1, const From& arg2, Rounding_Dir a1) { return construct_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1); }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename To, typename From> struct assign_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result assign( To& arg1, const From& arg2, Rounding_Dir a1) { return assign_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1); }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename To, typename From> struct floor_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result floor( To& arg1, const From& arg2, Rounding_Dir a1) { return floor_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1); }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename To, typename From> struct ceil_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result ceil( To& arg1, const From& arg2, Rounding_Dir a1) { return ceil_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1); }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename To, typename From> struct trunc_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result trunc( To& arg1, const From& arg2, Rounding_Dir a1) { return trunc_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1); }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename To, typename From> struct neg_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result neg( To& arg1, const From& arg2, Rounding_Dir a1) { return neg_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1); }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename To, typename From> struct abs_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result abs( To& arg1, const From& arg2, Rounding_Dir a1) { return abs_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1); }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename To, typename From> struct sqrt_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result sqrt( To& arg1, const From& arg2, Rounding_Dir a1) { return sqrt_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1); }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> struct add_function_struct; template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> inline Result add( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return add_function_struct<Policy1, Policy2, Policy3, To, From1, From2> ::function(arg1, arg2, arg3, a1); }
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> struct sub_function_struct; template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> inline Result sub( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return sub_function_struct<Policy1, Policy2, Policy3, To, From1, From2> ::function(arg1, arg2, arg3, a1); }
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> struct mul_function_struct; template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> inline Result mul( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return mul_function_struct<Policy1, Policy2, Policy3, To, From1, From2> ::function(arg1, arg2, arg3, a1); }
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> struct div_function_struct; template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> inline Result div( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return div_function_struct<Policy1, Policy2, Policy3, To, From1, From2> ::function(arg1, arg2, arg3, a1); }
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> struct rem_function_struct; template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> inline Result rem( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return rem_function_struct<Policy1, Policy2, Policy3, To, From1, From2> ::function(arg1, arg2, arg3, a1); }
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> struct idiv_function_struct; template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> inline Result idiv( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return idiv_function_struct<Policy1, Policy2, Policy3, To, From1, From2> ::function(arg1, arg2, arg3, a1); }
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename To, typename From> struct add_2exp_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result add_2exp( To& arg1, const From& arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1, a2); }
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename To, typename From> struct sub_2exp_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result sub_2exp( To& arg1, const From& arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1, a2); }
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename To, typename From> struct mul_2exp_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result mul_2exp( To& arg1, const From& arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1, a2); }
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename To, typename From> struct div_2exp_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result div_2exp( To& arg1, const From& arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1, a2); }
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename To, typename From> struct smod_2exp_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result smod_2exp( To& arg1, const From& arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1, a2); }
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename To, typename From> struct umod_2exp_function_struct; template <typename Policy1, typename Policy2, typename To, typename From> inline Result umod_2exp( To& arg1, const From& arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_function_struct<Policy1, Policy2, To, From>::function(arg1, arg2, a1, a2); }
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> struct add_mul_function_struct; template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> inline Result add_mul( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return add_mul_function_struct<Policy1, Policy2, Policy3, To, From1, From2> ::function(arg1, arg2, arg3, a1); }
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> struct sub_mul_function_struct; template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> inline Result sub_mul( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return sub_mul_function_struct<Policy1, Policy2, Policy3, To, From1, From2> ::function(arg1, arg2, arg3, a1); }
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> struct gcd_function_struct; template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> inline Result gcd( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return gcd_function_struct<Policy1, Policy2, Policy3, To, From1, From2> ::function(arg1, arg2, arg3, a1); }
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4,typename Policy5, typename To1, typename To2, typename To3, typename From1, typename From2> struct gcdext_function_struct; template <typename Policy1, typename Policy2, typename Policy3, typename Policy4,typename Policy5, typename To1, typename To2, typename To3, typename From1, typename From2> inline Result gcdext( To1& arg1, To2& arg2, To3& arg3, const From1& arg4, const From2& arg5, Rounding_Dir a1) { return gcdext_function_struct<Policy1, Policy2, Policy3, Policy4, Policy5, To1, To2, To3, From1, From2> ::function(arg1, arg2, arg3, arg4, arg5, a1); }
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> struct lcm_function_struct; template <typename Policy1, typename Policy2, typename Policy3, typename To, typename From1, typename From2> inline Result lcm( To& arg1, const From1& arg2, const From2& arg3, Rounding_Dir a1) { return lcm_function_struct<Policy1, Policy2, Policy3, To, From1, From2> ::function(arg1, arg2, arg3, a1); }
+16535: 
+16535: 
+16535: template <typename Policy, typename Type> struct input_function_struct; template <typename Policy, typename Type> inline Result input( Type& arg, std::istream& a1, Rounding_Dir a2) { return input_function_struct<Policy, Type>::function(arg, a1, a2); }
+16535: 
+16535: template <typename Policy, typename Type> struct output_function_struct; template <typename Policy, typename Type> inline Result output(std::ostream& b1, const Type& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_function_struct<Policy, Type>::function(b1, arg, a1, a2); }
+16535: # 577 "../../src/checked_defs.hh"
+16535: template <typename Policy, typename To>
+16535: Result round(To& to, Result r, Rounding_Dir dir);
+16535: 
+16535: Result input_mpq(mpq_class& to, std::istream& is);
+16535: 
+16535: std::string float_mpq_to_string(mpq_class& q);
+16535: 
+16535: }
+16535: 
+16535: struct Minus_Infinity {
+16535:   static const Result_Class vclass = VC_MINUS_INFINITY;
+16535: };
+16535: struct Plus_Infinity {
+16535:   static const Result_Class vclass = VC_PLUS_INFINITY;
+16535: };
+16535: struct Not_A_Number {
+16535:   static const Result_Class vclass = VC_NAN;
+16535: };
+16535: 
+16535: template <typename T>
+16535: struct Is_Special : public False { };
+16535: 
+16535: template <>
+16535: struct Is_Special<Minus_Infinity> : public True {};
+16535: 
+16535: template <>
+16535: struct Is_Special<Plus_Infinity> : public True {};
+16535: 
+16535: template <>
+16535: struct Is_Special<Not_A_Number> : public True {};
+16535: 
+16535: extern Minus_Infinity MINUS_INFINITY;
+16535: extern Plus_Infinity PLUS_INFINITY;
+16535: extern Not_A_Number NOT_A_NUMBER;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: struct Checked_Number_Transparent_Policy {
+16535: 
+16535:   enum const_bool_value_check_overflow { check_overflow = (false) };
+16535: 
+16535: 
+16535:   enum const_bool_value_check_inf_add_inf { check_inf_add_inf = (false) };
+16535: 
+16535: 
+16535:   enum const_bool_value_check_inf_sub_inf { check_inf_sub_inf = (false) };
+16535: 
+16535: 
+16535:   enum const_bool_value_check_inf_mul_zero { check_inf_mul_zero = (false) };
+16535: 
+16535: 
+16535:   enum const_bool_value_check_div_zero { check_div_zero = (false) };
+16535: 
+16535: 
+16535:   enum const_bool_value_check_inf_div_inf { check_inf_div_inf = (false) };
+16535: 
+16535: 
+16535:   enum const_bool_value_check_inf_mod { check_inf_mod = (false) };
+16535: 
+16535: 
+16535:   enum const_bool_value_check_sqrt_neg { check_sqrt_neg = (false) };
+16535: 
+16535: 
+16535:   enum const_bool_value_has_nan { has_nan = (std::numeric_limits<T>::has_quiet_NaN) };
+16535: 
+16535: 
+16535:   enum const_bool_value_has_infinity { has_infinity = (std::numeric_limits<T>::has_infinity) };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   enum const_bool_value_convertible { convertible = (true) };
+16535: 
+16535: 
+16535:   enum const_bool_value_fpu_check_inexact { fpu_check_inexact = (false) };
+16535: 
+16535: 
+16535:   enum const_bool_value_fpu_check_nan_result { fpu_check_nan_result = (false) };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Rounding_Dir ROUND_DEFAULT_CONSTRUCTOR = ROUND_NATIVE;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Rounding_Dir ROUND_DEFAULT_OPERATOR = ROUND_NATIVE;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Rounding_Dir ROUND_DEFAULT_INPUT = ROUND_NATIVE;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Rounding_Dir ROUND_DEFAULT_OUTPUT = ROUND_NATIVE;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Rounding_Dir ROUND_DEFAULT_FUNCTION = ROUND_NATIVE;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static void handle_result(Result r);
+16535: };
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: # 1 "../../src/checked_inlines.hh" 1
+16535: # 41 "../../src/checked_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Checked {
+16535: 
+16535: template <typename T1, typename T2>
+16535: struct Safe_Conversion : public False {
+16535: };
+16535: template <typename T>
+16535: struct Safe_Conversion<T, T> : public True {
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<signed short, char> : public True { };
+16535: 
+16535: template <> struct Safe_Conversion<signed short, signed char> : public True { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<signed short, unsigned char> : public True { };
+16535: 
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<signed int, char> : public True { };
+16535: 
+16535: template <> struct Safe_Conversion<signed int, signed char> : public True { };
+16535: template <> struct Safe_Conversion<signed int, signed short> : public True { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<signed int, unsigned char> : public True { };
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<signed int, unsigned short> : public True { };
+16535: 
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<signed long, char> : public True { };
+16535: 
+16535: template <> struct Safe_Conversion<signed long, signed char> : public True { };
+16535: template <> struct Safe_Conversion<signed long, signed short> : public True { };
+16535: template <> struct Safe_Conversion<signed long, signed int> : public True { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<signed long, unsigned char> : public True { };
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<signed long, unsigned short> : public True { };
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<signed long, unsigned int> : public True { };
+16535: 
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<signed long long, char> : public True { };
+16535: 
+16535: template <> struct Safe_Conversion<signed long long, signed char> : public True { };
+16535: template <> struct Safe_Conversion<signed long long, signed short> : public True { };
+16535: template <> struct Safe_Conversion<signed long long, signed int> : public True { };
+16535: template <> struct Safe_Conversion<signed long long, signed long> : public True { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<signed long long, unsigned char> : public True { };
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<signed long long, unsigned short> : public True { };
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<signed long long, unsigned int> : public True { };
+16535: # 127 "../../src/checked_inlines.hh"
+16535: template <> struct Safe_Conversion<unsigned short, unsigned char> : public True { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<unsigned int, unsigned char> : public True { };
+16535: template <> struct Safe_Conversion<unsigned int, unsigned short> : public True { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<unsigned long, unsigned char> : public True { };
+16535: template <> struct Safe_Conversion<unsigned long, unsigned short> : public True { };
+16535: template <> struct Safe_Conversion<unsigned long, unsigned int> : public True { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<unsigned long long, unsigned char> : public True { };
+16535: template <> struct Safe_Conversion<unsigned long long, unsigned short> : public True { };
+16535: template <> struct Safe_Conversion<unsigned long long, unsigned int> : public True { };
+16535: template <> struct Safe_Conversion<unsigned long long, unsigned long> : public True { };
+16535: 
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<float, char> : public True { };
+16535: template <> struct Safe_Conversion<float, signed char> : public True { };
+16535: template <> struct Safe_Conversion<float, unsigned char> : public True { };
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<float, signed short> : public True { };
+16535: template <> struct Safe_Conversion<float, unsigned short> : public True { };
+16535: # 174 "../../src/checked_inlines.hh"
+16535: template <> struct Safe_Conversion<double, char> : public True { };
+16535: template <> struct Safe_Conversion<double, signed char> : public True { };
+16535: template <> struct Safe_Conversion<double, unsigned char> : public True { };
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<double, signed short> : public True { };
+16535: template <> struct Safe_Conversion<double, unsigned short> : public True { };
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<double, signed int> : public True { };
+16535: template <> struct Safe_Conversion<double, unsigned int> : public True { };
+16535: # 194 "../../src/checked_inlines.hh"
+16535: template <> struct Safe_Conversion<double, float> : public True { };
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<long double, char> : public True { };
+16535: template <> struct Safe_Conversion<long double, signed char> : public True { };
+16535: template <> struct Safe_Conversion<long double, unsigned char> : public True { };
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<long double, signed short> : public True { };
+16535: template <> struct Safe_Conversion<long double, unsigned short> : public True { };
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<long double, signed int> : public True { };
+16535: template <> struct Safe_Conversion<long double, unsigned int> : public True { };
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<long double, signed long> : public True { };
+16535: template <> struct Safe_Conversion<long double, unsigned long> : public True { };
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<long double, signed long long> : public True { };
+16535: template <> struct Safe_Conversion<long double, unsigned long long> : public True { };
+16535: 
+16535: template <> struct Safe_Conversion<long double, float> : public True { };
+16535: template <> struct Safe_Conversion<long double, double> : public True { };
+16535: 
+16535: template <> struct Safe_Conversion<mpz_class, char> : public True { };
+16535: template <> struct Safe_Conversion<mpz_class, signed char> : public True { };
+16535: template <> struct Safe_Conversion<mpz_class, signed short> : public True { };
+16535: template <> struct Safe_Conversion<mpz_class, signed int> : public True { };
+16535: template <> struct Safe_Conversion<mpz_class, signed long> : public True { };
+16535: 
+16535: template <> struct Safe_Conversion<mpz_class, unsigned char> : public True { };
+16535: template <> struct Safe_Conversion<mpz_class, unsigned short> : public True { };
+16535: template <> struct Safe_Conversion<mpz_class, unsigned int> : public True { };
+16535: template <> struct Safe_Conversion<mpz_class, unsigned long> : public True { };
+16535: 
+16535: 
+16535: template <> struct Safe_Conversion<mpq_class, char> : public True { };
+16535: template <> struct Safe_Conversion<mpq_class, signed char> : public True { };
+16535: template <> struct Safe_Conversion<mpq_class, signed short> : public True { };
+16535: template <> struct Safe_Conversion<mpq_class, signed int> : public True { };
+16535: template <> struct Safe_Conversion<mpq_class, signed long> : public True { };
+16535: 
+16535: template <> struct Safe_Conversion<mpq_class, unsigned char> : public True { };
+16535: template <> struct Safe_Conversion<mpq_class, unsigned short> : public True { };
+16535: template <> struct Safe_Conversion<mpq_class, unsigned int> : public True { };
+16535: template <> struct Safe_Conversion<mpq_class, unsigned long> : public True { };
+16535: 
+16535: template <> struct Safe_Conversion<mpq_class, float> : public True { };
+16535: template <> struct Safe_Conversion<mpq_class, double> : public True { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy, typename Type>
+16535: struct construct_function_struct<Policy, Policy, Type, Type> {
+16535:   static inline Result function(Type& to, const Type& from, Rounding_Dir) {
+16535:     new(&to) Type(from);
+16535:     return V_EQ;
+16535:   }
+16535: };
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename To, typename From>
+16535: struct construct_function_struct {
+16535:   static inline Result function(To& to, const From& from, Rounding_Dir dir) {
+16535:     new(&to) To();
+16535:     return assign<To_Policy, From_Policy>(to, from, dir);
+16535:   }
+16535: };
+16535: 
+16535: template <typename To_Policy, typename To>
+16535: struct construct_special_function_struct {
+16535:   static inline Result function(To& to, Result_Class r, Rounding_Dir dir) {
+16535:     new(&to) To();
+16535:     return assign_special<To_Policy>(to, r, dir);
+16535:   }
+16535: };
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename To, typename From>
+16535: inline Result
+16535: assign_exact(To& to, const From& from, Rounding_Dir) {
+16535:   to = from;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline typename Enable_If<Is_Same<To_Policy, From_Policy>::value, void>::type
+16535: copy_generic(Type& to, const Type& from) {
+16535:   to = from;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename To, typename From>
+16535: inline Result
+16535: abs_generic(To& to, const From& from, Rounding_Dir dir) {
+16535:   if (from < 0) {
+16535:     return neg<To_Policy, From_Policy>(to, from, dir);
+16535:   }
+16535:   else {
+16535:     return assign<To_Policy, From_Policy>(to, from, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename To, typename From>
+16535: inline void
+16535: gcd_exact_no_abs(To& to, const From& x, const From& y) {
+16535:   To w_x = x;
+16535:   To w_y = y;
+16535:   To remainder;
+16535:   while (w_y != 0) {
+16535: 
+16535: 
+16535: 
+16535:     rem<To_Policy, From1_Policy, From2_Policy>(remainder, w_x, w_y,
+16535:                                                ROUND_NOT_NEEDED);
+16535:     w_x = w_y;
+16535:     w_y = remainder;
+16535:   }
+16535:   to = w_x;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename To, typename From1, typename From2>
+16535: inline Result
+16535: gcd_exact(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
+16535:   gcd_exact_no_abs<To_Policy, From1_Policy, From2_Policy>(to, x, y);
+16535:   return abs<To_Policy, To_Policy>(to, to, dir);
+16535: }
+16535: 
+16535: template <typename To1_Policy, typename To2_Policy, typename To3_Policy,
+16535:           typename From1_Policy, typename From2_Policy,
+16535:           typename To1, typename To2, typename To3,
+16535:           typename From1, typename From2>
+16535: inline Result
+16535: gcdext_exact(To1& to, To2& s, To3& t, const From1& x, const From2& y,
+16535:              Rounding_Dir dir) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (y == 0) {
+16535:     if (x == 0) {
+16535:       s = 0;
+16535:       t = 1;
+16535:       return V_EQ;
+16535:     }
+16535:     else {
+16535:       if (x < 0) {
+16535:         s = -1;
+16535:       }
+16535:       else {
+16535:         s = 1;
+16535:       }
+16535:       t = 0;
+16535:       return abs<To1_Policy, From1_Policy>(to, x, dir);
+16535:     }
+16535:   }
+16535: 
+16535:   s = 1;
+16535:   t = 0;
+16535:   bool negative_x = x < 0;
+16535:   bool negative_y = y < 0;
+16535: 
+16535:   Result r;
+16535:   r = abs<To1_Policy, From1_Policy>(to, x, dir);
+16535:   if (r != V_EQ) {
+16535:     return r;
+16535:   }
+16535: 
+16535:   From2 a_y;
+16535:   r = abs<To1_Policy, From2_Policy>(a_y, y, dir);
+16535:   if (r != V_EQ) {
+16535:     return r;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (to == a_y) {
+16535:     goto sign_check;
+16535:   }
+16535: 
+16535: 
+16535:   {
+16535:     To2 v1 = 0;
+16535:     To3 v2 = 1;
+16535:     To1 v3 = static_cast<To1>(a_y);
+16535:     while (true) {
+16535:       To1 q = to / v3;
+16535: 
+16535:       To1 t3 = to - q*v3;
+16535:       To2 t1 = s - static_cast<To2>(q)*v1;
+16535:       To3 t2 = t - static_cast<To3>(q)*v2;
+16535:       s = v1;
+16535:       t = v2;
+16535:       to = v3;
+16535:       if (t3 == 0) {
+16535:         break;
+16535:       }
+16535:       v1 = t1;
+16535:       v2 = t2;
+16535:       v3 = t3;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:  sign_check:
+16535: 
+16535:   if (negative_x) {
+16535:     r = neg<To2_Policy, To2_Policy>(s, s, dir);
+16535:     if (r != V_EQ) {
+16535:       return r;
+16535:     }
+16535:   }
+16535:   if (negative_y) {
+16535:     return neg<To3_Policy, To3_Policy>(t, t, dir);
+16535:   }
+16535:   return V_EQ;
+16535: 
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename To, typename From1, typename From2>
+16535: inline Result
+16535: lcm_gcd_exact(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
+16535:   if (x == 0 || y == 0) {
+16535:     to = 0;
+16535:     return V_EQ;
+16535:   }
+16535:   To a_x;
+16535:   To a_y;
+16535:   Result r;
+16535:   r = abs<From1_Policy, From1_Policy>(a_x, x, dir);
+16535:   if (r != V_EQ) {
+16535:     return r;
+16535:   }
+16535:   r = abs<From2_Policy, From2_Policy>(a_y, y, dir);
+16535:   if (r != V_EQ) {
+16535:     return r;
+16535:   }
+16535:   To gcd;
+16535:   gcd_exact_no_abs<To_Policy, From1_Policy, From2_Policy>(gcd, a_x, a_y);
+16535: 
+16535: 
+16535: 
+16535:   div<To_Policy, From1_Policy, To_Policy>(to, a_x, gcd, ROUND_NOT_NEEDED);
+16535:   return mul<To_Policy, To_Policy, From2_Policy>(to, to, a_y, dir);
+16535: }
+16535: 
+16535: template <typename Policy, typename Type>
+16535: inline Result_Relation
+16535: sgn_generic(const Type& x) {
+16535:   if (x > 0) {
+16535:     return VR_GT;
+16535:   }
+16535:   if (x == 0) {
+16535:     return VR_EQ;
+16535:   }
+16535:   return VR_LT;
+16535: }
+16535: 
+16535: template <typename T1, typename T2, typename Enable = void>
+16535: struct Safe_Int_Comparison : public False {
+16535: };
+16535: 
+16535: template <typename T1, typename T2>
+16535: struct Safe_Int_Comparison<T1, T2, typename Enable_If<(C_Integer<T1>::value && C_Integer<T2>::value)>::type>
+16535:   : public Bool<(C_Integer<T1>::is_signed
+16535:                  ? (C_Integer<T2>::is_signed
+16535:                     || sizeof(T2) < sizeof(T1)
+16535:                     || sizeof(T2) < sizeof(int))
+16535:                  : (!C_Integer<T2>::is_signed
+16535:                     || sizeof(T1) < sizeof(T2)
+16535:                     || sizeof(T1) < sizeof(int)))> {
+16535: };
+16535: 
+16535: 
+16535: template <typename T1, typename T2>
+16535: inline typename Enable_If<(Safe_Int_Comparison<T1, T2>::value
+16535:                            || Safe_Conversion<T1, T2>::value
+16535:                            || Safe_Conversion<T2, T1>::value), bool>::type
+16535: lt(const T1& x, const T2& y) {
+16535:   return x < y;
+16535: }
+16535: template <typename T1, typename T2>
+16535: inline typename Enable_If<(Safe_Int_Comparison<T1, T2>::value
+16535:                            || Safe_Conversion<T1, T2>::value
+16535:                            || Safe_Conversion<T2, T1>::value), bool>::type
+16535: le(const T1& x, const T2& y) {
+16535:   return x <= y;
+16535: }
+16535: template <typename T1, typename T2>
+16535: inline typename Enable_If<(Safe_Int_Comparison<T1, T2>::value
+16535:                            || Safe_Conversion<T1, T2>::value
+16535:                            || Safe_Conversion<T2, T1>::value), bool>::type
+16535: eq(const T1& x, const T2& y) {
+16535:   return x == y;
+16535: }
+16535: 
+16535: template <typename S, typename U>
+16535: inline typename Enable_If<(!Safe_Int_Comparison<S, U>::value
+16535:                            && C_Integer<U>::value
+16535:                            && C_Integer<S>::is_signed), bool>::type
+16535: lt(const S& x, const U& y) {
+16535:   return x < 0 || static_cast<typename C_Integer<S>::other_type>(x) < y;
+16535: }
+16535: 
+16535: template <typename U, typename S>
+16535: inline typename Enable_If<(!Safe_Int_Comparison<S, U>::value
+16535:                            && C_Integer<U>::value
+16535:                            && C_Integer<S>::is_signed), bool>::type
+16535: lt(const U& x, const S& y) {
+16535:   return y >= 0 && x < static_cast<typename C_Integer<S>::other_type>(y);
+16535: }
+16535: 
+16535: template <typename S, typename U>
+16535: inline typename Enable_If<(!Safe_Int_Comparison<S, U>::value
+16535:                            && C_Integer<U>::value
+16535:                            && C_Integer<S>::is_signed), bool>::type
+16535: le(const S& x, const U& y) {
+16535:   return x < 0 || static_cast<typename C_Integer<S>::other_type>(x) <= y;
+16535: }
+16535: 
+16535: template <typename U, typename S>
+16535: inline typename Enable_If<(!Safe_Int_Comparison<S, U>::value
+16535:                            && C_Integer<U>::value
+16535:                            && C_Integer<S>::is_signed), bool>::type
+16535: le(const U& x, const S& y) {
+16535:   return y >= 0 && x <= static_cast<typename C_Integer<S>::other_type>(y);
+16535: }
+16535: 
+16535: template <typename S, typename U>
+16535: inline typename Enable_If<(!Safe_Int_Comparison<S, U>::value
+16535:                            && C_Integer<U>::value
+16535:                            && C_Integer<S>::is_signed), bool>::type
+16535: eq(const S& x, const U& y) {
+16535:   return x >= 0 && static_cast<typename C_Integer<S>::other_type>(x) == y;
+16535: }
+16535: 
+16535: template <typename U, typename S>
+16535: inline typename Enable_If<(!Safe_Int_Comparison<S, U>::value
+16535:                            && C_Integer<U>::value
+16535:                            && C_Integer<S>::is_signed), bool>::type
+16535: eq(const U& x, const S& y) {
+16535:   return y >= 0 && x == static_cast<typename C_Integer<S>::other_type>(y);
+16535: }
+16535: 
+16535: template <typename T1, typename T2>
+16535: inline typename Enable_If<(!Safe_Conversion<T1, T2>::value
+16535:                            && !Safe_Conversion<T2, T1>::value
+16535:                            && (!C_Integer<T1>::value || !C_Integer<T2>::value)), bool>::type
+16535: eq(const T1& x, const T2& y) {
+16535:   Parma_Polyhedra_Library::Dirty_Temp<T1> holder_tmp; T1& tmp = holder_tmp.item();
+16535:   Result r = assign_r(tmp, y, ROUND_CHECK);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   return r == V_EQ && x == tmp;
+16535: }
+16535: 
+16535: template <typename T1, typename T2>
+16535: inline typename Enable_If<(!Safe_Conversion<T1, T2>::value
+16535:                            && !Safe_Conversion<T2, T1>::value
+16535:                            && (!C_Integer<T1>::value || !C_Integer<T2>::value)), bool>::type
+16535: lt(const T1& x, const T2& y) {
+16535:   Parma_Polyhedra_Library::Dirty_Temp<T1> holder_tmp; T1& tmp = holder_tmp.item();
+16535:   Result r = assign_r(tmp, y, ROUND_UP);
+16535:   if (!result_representable(r)) {
+16535:     return true;
+16535:   }
+16535:   switch (result_relation(r)) {
+16535:   case VR_EQ:
+16535:   case VR_LT:
+16535:   case VR_LE:
+16535:     return x < tmp;
+16535:   default:
+16535:     return false;
+16535:   }
+16535: }
+16535: 
+16535: template <typename T1, typename T2>
+16535: inline typename
+16535: Enable_If<(!Safe_Conversion<T1, T2>::value
+16535:            && !Safe_Conversion<T2, T1>::value
+16535:            && (!C_Integer<T1>::value || !C_Integer<T2>::value)), bool>::type
+16535: le(const T1& x, const T2& y) {
+16535:   Parma_Polyhedra_Library::Dirty_Temp<T1> holder_tmp; T1& tmp = holder_tmp.item();
+16535:   Result r = assign_r(tmp, y, (ROUND_UP | ROUND_STRICT_RELATION));
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   if (!result_representable(r)) {
+16535:     return true;
+16535:   }
+16535:   switch (result_relation(r)) {
+16535:   case VR_EQ:
+16535:     return x <= tmp;
+16535:   case VR_LT:
+16535:     return x < tmp;
+16535:   case VR_LE:
+16535:   case VR_GE:
+16535:   case VR_LGE:
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return false;
+16535:   default:
+16535:     return false;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2,
+16535:           typename Type1, typename Type2>
+16535: inline bool
+16535: lt_p(const Type1& x, const Type2& y) {
+16535:   return lt(x, y);
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2,
+16535:           typename Type1, typename Type2>
+16535: inline bool
+16535: le_p(const Type1& x, const Type2& y) {
+16535:   return le(x, y);
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2,
+16535:           typename Type1, typename Type2>
+16535: inline bool
+16535: eq_p(const Type1& x, const Type2& y) {
+16535:   return eq(x, y);
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2,
+16535:           typename Type1, typename Type2>
+16535: inline Result_Relation
+16535: cmp_generic(const Type1& x, const Type2& y) {
+16535:   if (lt(y, x)) {
+16535:     return VR_GT;
+16535:   }
+16535:   if (lt(x, y)) {
+16535:     return VR_LT;
+16535:   }
+16535:   return VR_EQ;
+16535: }
+16535: 
+16535: template <typename Policy, typename Type>
+16535: inline Result
+16535: assign_nan(Type& to, Result r) {
+16535:   assign_special<Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   return r;
+16535: }
+16535: 
+16535: template <typename Policy, typename Type>
+16535: inline Result
+16535: input_generic(Type& to, std::istream& is, Rounding_Dir dir) {
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
+16535:   Result r = input_mpq(q, is);
+16535:   Result_Class c = result_class(r);
+16535:   switch (c) {
+16535:   case VC_MINUS_INFINITY:
+16535:   case VC_PLUS_INFINITY:
+16535:     return assign_special<Policy>(to, c, dir);
+16535:   case VC_NAN:
+16535:     return assign_nan<Policy>(to, r);
+16535:   default:
+16535:     break;
+16535:   }
+16535:   ((void) 0);
+16535:   return assign<Policy, void>(to, q, dir);
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 701 "../../src/checked_defs.hh" 2
+16535: # 1 "../../src/checked_int_inlines.hh" 1
+16535: # 28 "../../src/checked_int_inlines.hh"
+16535: # 1 "/usr/include/c++/8/cerrno" 1 3
+16535: # 39 "/usr/include/c++/8/cerrno" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/cerrno" 3
+16535: # 29 "../../src/checked_int_inlines.hh" 2
+16535: # 1 "/usr/include/c++/8/cstdlib" 1 3
+16535: # 39 "/usr/include/c++/8/cstdlib" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/cstdlib" 3
+16535: # 30 "../../src/checked_int_inlines.hh" 2
+16535: # 1 "/usr/include/c++/8/climits" 1 3
+16535: # 39 "/usr/include/c++/8/climits" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/climits" 3
+16535: 
+16535: 
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 1 3 4
+16535: # 43 "/usr/include/c++/8/climits" 2 3
+16535: # 31 "../../src/checked_int_inlines.hh" 2
+16535: # 43 "../../src/checked_int_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Checked {
+16535: # 71 "../../src/checked_int_inlines.hh"
+16535: template <typename Policy, typename Type>
+16535: struct Extended_Int {
+16535:   static const Type plus_infinity = C_Integer<Type>::max;
+16535:   static const Type minus_infinity = ((C_Integer<Type>::min >= 0)
+16535:                                       ? (C_Integer<Type>::max - 1)
+16535:                                       : C_Integer<Type>::min);
+16535:   static const Type not_a_number
+16535:   = ((C_Integer<Type>::min >= 0)
+16535:      ? (C_Integer<Type>::max - 2 * (Policy::has_infinity ? 1 : 0))
+16535:      : (C_Integer<Type>::min + (Policy::has_infinity ? 1 : 0)));
+16535:   static const Type min
+16535:   = (C_Integer<Type>::min
+16535:      + ((C_Integer<Type>::min >= 0)
+16535:         ? 0
+16535:         : ((Policy::has_infinity ? 1 : 0) + (Policy::has_nan ? 1 : 0))));
+16535:   static const Type max
+16535:   = (C_Integer<Type>::max
+16535:      - ((C_Integer<Type>::min >= 0)
+16535:         ? (2 * (Policy::has_infinity ? 1 : 0) + (Policy::has_nan ? 1 : 0))
+16535:         : (Policy::has_infinity ? 1 : 0)));
+16535: };
+16535: 
+16535: template <typename Policy, typename To>
+16535: inline Result
+16535: set_neg_overflow_int(To& to, Rounding_Dir dir) {
+16535:   if (round_up(dir)) {
+16535:     to = Extended_Int<Policy, To>::min;
+16535:     return V_LT_INF;
+16535:   }
+16535:   else {
+16535:     if (Policy::has_infinity) {
+16535:       to = Extended_Int<Policy, To>::minus_infinity;
+16535:       return V_GT_MINUS_INFINITY;
+16535:     }
+16535:     return V_GT_MINUS_INFINITY | V_UNREPRESENTABLE;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Policy, typename To>
+16535: inline Result
+16535: set_pos_overflow_int(To& to, Rounding_Dir dir) {
+16535:   if (round_down(dir)) {
+16535:     to = Extended_Int<Policy, To>::max;
+16535:     return V_GT_SUP;
+16535:   }
+16535:   else {
+16535:     if (Policy::has_infinity) {
+16535:       to = Extended_Int<Policy, To>::plus_infinity;
+16535:       return V_LT_PLUS_INFINITY;
+16535:     }
+16535:     return V_LT_PLUS_INFINITY | V_UNREPRESENTABLE;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Policy, typename To>
+16535: inline Result
+16535: round_lt_int_no_overflow(To& to, Rounding_Dir dir) {
+16535:   if (round_down(dir)) {
+16535:     --to;
+16535:     return V_GT;
+16535:   }
+16535:   return V_LT;
+16535: }
+16535: 
+16535: template <typename Policy, typename To>
+16535: inline Result
+16535: round_gt_int_no_overflow(To& to, Rounding_Dir dir) {
+16535:   if (round_up(dir)) {
+16535:     ++to;
+16535:     return V_LT;
+16535:   }
+16535:   return V_GT;
+16535: }
+16535: 
+16535: template <typename Policy, typename To>
+16535: inline Result
+16535: round_lt_int(To& to, Rounding_Dir dir) {
+16535:   if (round_down(dir)) {
+16535:     if (to == Extended_Int<Policy, To>::min) {
+16535:       if (Policy::has_infinity) {
+16535:         to = Extended_Int<Policy, To>::minus_infinity;
+16535:         return V_GT_MINUS_INFINITY;
+16535:       }
+16535:       return V_GT_MINUS_INFINITY | V_UNREPRESENTABLE;
+16535:     }
+16535:     else {
+16535:       --to;
+16535:       return V_GT;
+16535:     }
+16535:   }
+16535:   return V_LT;
+16535: }
+16535: 
+16535: template <typename Policy, typename To>
+16535: inline Result
+16535: round_gt_int(To& to, Rounding_Dir dir) {
+16535:   if (round_up(dir)) {
+16535:     if (to == Extended_Int<Policy, To>::max) {
+16535:       if (Policy::has_infinity) {
+16535:         to = Extended_Int<Policy, To>::plus_infinity;
+16535:         return V_LT_PLUS_INFINITY;
+16535:       }
+16535:       return V_LT_PLUS_INFINITY | V_UNREPRESENTABLE;
+16535:     }
+16535:     else {
+16535:       ++to;
+16535:       return V_LT;
+16535:     }
+16535:   }
+16535:   return V_GT;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, char, char> { static inline void function( char& arg1, const char &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, signed char, signed char> { static inline void function( signed char& arg1, const signed char &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, signed short, signed short> { static inline void function( signed short& arg1, const signed short &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, signed int, signed int> { static inline void function( signed int& arg1, const signed int &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, signed long, signed long> { static inline void function( signed long& arg1, const signed long &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline void function( signed long long& arg1, const signed long long &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline void function( unsigned char& arg1, const unsigned char &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline void function( unsigned short& arg1, const unsigned short &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline void function( unsigned int& arg1, const unsigned int &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline void function( unsigned long& arg1, const unsigned long &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline void function( unsigned long long& arg1, const unsigned long long &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: 
+16535: template <typename Policy, typename Type>
+16535: inline Result
+16535: classify_int(const Type v, bool nan, bool inf, bool sign) {
+16535:   if (Policy::has_nan
+16535:       && (nan || sign)
+16535:       && v == Extended_Int<Policy, Type>::not_a_number) {
+16535:     return V_NAN;
+16535:   }
+16535:   if (!inf && !sign) {
+16535:     return V_LGE;
+16535:   }
+16535:   if (Policy::has_infinity) {
+16535:     if (v == Extended_Int<Policy, Type>::minus_infinity) {
+16535:       return inf ? V_EQ_MINUS_INFINITY : V_LT;
+16535:     }
+16535:     if (v == Extended_Int<Policy, Type>::plus_infinity) {
+16535:       return inf ? V_EQ_PLUS_INFINITY : V_GT;
+16535:     }
+16535:   }
+16535:   if (sign) {
+16535:     if (v < 0) {
+16535:       return V_LT;
+16535:     }
+16535:     if (v > 0) {
+16535:       return V_GT;
+16535:     }
+16535:     return V_EQ;
+16535:   }
+16535:   return V_LGE;
+16535: }
+16535: 
+16535: template <typename Policy> struct classify_function_struct<Policy, char> { static inline Result function(const char& arg, bool a1, bool a2, bool a3) { return classify_int<Policy>(arg, a1, a2, a3); } };
+16535: template <typename Policy> struct classify_function_struct<Policy, signed char> { static inline Result function(const signed char& arg, bool a1, bool a2, bool a3) { return classify_int<Policy>(arg, a1, a2, a3); } };
+16535: template <typename Policy> struct classify_function_struct<Policy, signed short> { static inline Result function(const signed short& arg, bool a1, bool a2, bool a3) { return classify_int<Policy>(arg, a1, a2, a3); } };
+16535: template <typename Policy> struct classify_function_struct<Policy, signed int> { static inline Result function(const signed int& arg, bool a1, bool a2, bool a3) { return classify_int<Policy>(arg, a1, a2, a3); } };
+16535: template <typename Policy> struct classify_function_struct<Policy, signed long> { static inline Result function(const signed long& arg, bool a1, bool a2, bool a3) { return classify_int<Policy>(arg, a1, a2, a3); } };
+16535: template <typename Policy> struct classify_function_struct<Policy, signed long long> { static inline Result function(const signed long long& arg, bool a1, bool a2, bool a3) { return classify_int<Policy>(arg, a1, a2, a3); } };
+16535: template <typename Policy> struct classify_function_struct<Policy, unsigned char> { static inline Result function(const unsigned char& arg, bool a1, bool a2, bool a3) { return classify_int<Policy>(arg, a1, a2, a3); } };
+16535: template <typename Policy> struct classify_function_struct<Policy, unsigned short> { static inline Result function(const unsigned short& arg, bool a1, bool a2, bool a3) { return classify_int<Policy>(arg, a1, a2, a3); } };
+16535: template <typename Policy> struct classify_function_struct<Policy, unsigned int> { static inline Result function(const unsigned int& arg, bool a1, bool a2, bool a3) { return classify_int<Policy>(arg, a1, a2, a3); } };
+16535: template <typename Policy> struct classify_function_struct<Policy, unsigned long> { static inline Result function(const unsigned long& arg, bool a1, bool a2, bool a3) { return classify_int<Policy>(arg, a1, a2, a3); } };
+16535: template <typename Policy> struct classify_function_struct<Policy, unsigned long long> { static inline Result function(const unsigned long long& arg, bool a1, bool a2, bool a3) { return classify_int<Policy>(arg, a1, a2, a3); } };
+16535: 
+16535: template <typename Policy, typename Type>
+16535: inline bool
+16535: is_nan_int(const Type v) {
+16535:   return Policy::has_nan && v == Extended_Int<Policy, Type>::not_a_number;
+16535: }
+16535: 
+16535: template <typename Policy> struct is_nan_function_struct<Policy, char> { static inline bool function(const char& arg) { return is_nan_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_nan_function_struct<Policy, signed char> { static inline bool function(const signed char& arg) { return is_nan_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_nan_function_struct<Policy, signed short> { static inline bool function(const signed short& arg) { return is_nan_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_nan_function_struct<Policy, signed int> { static inline bool function(const signed int& arg) { return is_nan_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_nan_function_struct<Policy, signed long> { static inline bool function(const signed long& arg) { return is_nan_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_nan_function_struct<Policy, signed long long> { static inline bool function(const signed long long& arg) { return is_nan_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_nan_function_struct<Policy, unsigned char> { static inline bool function(const unsigned char& arg) { return is_nan_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_nan_function_struct<Policy, unsigned short> { static inline bool function(const unsigned short& arg) { return is_nan_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_nan_function_struct<Policy, unsigned int> { static inline bool function(const unsigned int& arg) { return is_nan_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_nan_function_struct<Policy, unsigned long> { static inline bool function(const unsigned long& arg) { return is_nan_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_nan_function_struct<Policy, unsigned long long> { static inline bool function(const unsigned long long& arg) { return is_nan_int<Policy>(arg); } };
+16535: 
+16535: template <typename Policy, typename Type>
+16535: inline bool
+16535: is_minf_int(const Type v) {
+16535:   return Policy::has_infinity
+16535:     && v == Extended_Int<Policy, Type>::minus_infinity;
+16535: }
+16535: 
+16535: template <typename Policy> struct is_minf_function_struct<Policy, char> { static inline bool function(const char& arg) { return is_minf_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_minf_function_struct<Policy, signed char> { static inline bool function(const signed char& arg) { return is_minf_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_minf_function_struct<Policy, signed short> { static inline bool function(const signed short& arg) { return is_minf_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_minf_function_struct<Policy, signed int> { static inline bool function(const signed int& arg) { return is_minf_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_minf_function_struct<Policy, signed long> { static inline bool function(const signed long& arg) { return is_minf_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_minf_function_struct<Policy, signed long long> { static inline bool function(const signed long long& arg) { return is_minf_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_minf_function_struct<Policy, unsigned char> { static inline bool function(const unsigned char& arg) { return is_minf_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_minf_function_struct<Policy, unsigned short> { static inline bool function(const unsigned short& arg) { return is_minf_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_minf_function_struct<Policy, unsigned int> { static inline bool function(const unsigned int& arg) { return is_minf_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_minf_function_struct<Policy, unsigned long> { static inline bool function(const unsigned long& arg) { return is_minf_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_minf_function_struct<Policy, unsigned long long> { static inline bool function(const unsigned long long& arg) { return is_minf_int<Policy>(arg); } };
+16535: 
+16535: template <typename Policy, typename Type>
+16535: inline bool
+16535: is_pinf_int(const Type v) {
+16535:   return Policy::has_infinity
+16535:     && v == Extended_Int<Policy, Type>::plus_infinity;
+16535: }
+16535: 
+16535: template <typename Policy> struct is_pinf_function_struct<Policy, char> { static inline bool function(const char& arg) { return is_pinf_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_pinf_function_struct<Policy, signed char> { static inline bool function(const signed char& arg) { return is_pinf_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_pinf_function_struct<Policy, signed short> { static inline bool function(const signed short& arg) { return is_pinf_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_pinf_function_struct<Policy, signed int> { static inline bool function(const signed int& arg) { return is_pinf_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_pinf_function_struct<Policy, signed long> { static inline bool function(const signed long& arg) { return is_pinf_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_pinf_function_struct<Policy, signed long long> { static inline bool function(const signed long long& arg) { return is_pinf_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_pinf_function_struct<Policy, unsigned char> { static inline bool function(const unsigned char& arg) { return is_pinf_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_pinf_function_struct<Policy, unsigned short> { static inline bool function(const unsigned short& arg) { return is_pinf_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_pinf_function_struct<Policy, unsigned int> { static inline bool function(const unsigned int& arg) { return is_pinf_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_pinf_function_struct<Policy, unsigned long> { static inline bool function(const unsigned long& arg) { return is_pinf_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_pinf_function_struct<Policy, unsigned long long> { static inline bool function(const unsigned long long& arg) { return is_pinf_int<Policy>(arg); } };
+16535: 
+16535: template <typename Policy, typename Type>
+16535: inline bool
+16535: is_int_int(const Type v) {
+16535:   return !is_nan<Policy>(v);
+16535: }
+16535: 
+16535: template <typename Policy> struct is_int_function_struct<Policy, char> { static inline bool function(const char& arg) { return is_int_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_int_function_struct<Policy, signed char> { static inline bool function(const signed char& arg) { return is_int_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_int_function_struct<Policy, signed short> { static inline bool function(const signed short& arg) { return is_int_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_int_function_struct<Policy, signed int> { static inline bool function(const signed int& arg) { return is_int_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_int_function_struct<Policy, signed long> { static inline bool function(const signed long& arg) { return is_int_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_int_function_struct<Policy, signed long long> { static inline bool function(const signed long long& arg) { return is_int_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_int_function_struct<Policy, unsigned char> { static inline bool function(const unsigned char& arg) { return is_int_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_int_function_struct<Policy, unsigned short> { static inline bool function(const unsigned short& arg) { return is_int_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_int_function_struct<Policy, unsigned int> { static inline bool function(const unsigned int& arg) { return is_int_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_int_function_struct<Policy, unsigned long> { static inline bool function(const unsigned long& arg) { return is_int_int<Policy>(arg); } };
+16535: template <typename Policy> struct is_int_function_struct<Policy, unsigned long long> { static inline bool function(const unsigned long long& arg) { return is_int_int<Policy>(arg); } };
+16535: 
+16535: template <typename Policy, typename Type>
+16535: inline Result
+16535: assign_special_int(Type& v, Result_Class c, Rounding_Dir dir) {
+16535:   ((void) 0);
+16535:   switch (c) {
+16535:   case VC_NAN:
+16535:     if (Policy::has_nan) {
+16535:       v = Extended_Int<Policy, Type>::not_a_number;
+16535:       return V_NAN;
+16535:     }
+16535:     return V_NAN | V_UNREPRESENTABLE;
+16535:   case VC_MINUS_INFINITY:
+16535:     if (Policy::has_infinity) {
+16535:       v = Extended_Int<Policy, Type>::minus_infinity;
+16535:       return V_EQ_MINUS_INFINITY;
+16535:     }
+16535:     if (round_up(dir)) {
+16535:       v = Extended_Int<Policy, Type>::min;
+16535:       return V_LT_INF;
+16535:     }
+16535:     return V_EQ_MINUS_INFINITY | V_UNREPRESENTABLE;
+16535:   case VC_PLUS_INFINITY:
+16535:     if (Policy::has_infinity) {
+16535:       v = Extended_Int<Policy, Type>::plus_infinity;
+16535:       return V_EQ_PLUS_INFINITY;
+16535:     }
+16535:     if (round_down(dir)) {
+16535:       v = Extended_Int<Policy, Type>::max;
+16535:       return V_GT_SUP;
+16535:     }
+16535:     return V_EQ_PLUS_INFINITY | V_UNREPRESENTABLE;
+16535:   default:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return V_NAN | V_UNREPRESENTABLE;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Policy> struct assign_special_function_struct<Policy, char> { static inline Result function( char& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct assign_special_function_struct<Policy, signed char> { static inline Result function( signed char& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct assign_special_function_struct<Policy, signed short> { static inline Result function( signed short& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct assign_special_function_struct<Policy, signed int> { static inline Result function( signed int& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct assign_special_function_struct<Policy, signed long> { static inline Result function( signed long& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct assign_special_function_struct<Policy, signed long long> { static inline Result function( signed long long& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct assign_special_function_struct<Policy, unsigned char> { static inline Result function( unsigned char& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct assign_special_function_struct<Policy, unsigned short> { static inline Result function( unsigned short& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct assign_special_function_struct<Policy, unsigned int> { static inline Result function( unsigned int& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct assign_special_function_struct<Policy, unsigned long> { static inline Result function( unsigned long& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct assign_special_function_struct<Policy, unsigned long long> { static inline Result function( unsigned long long& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_int<Policy>(arg, a1, a2); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename To, typename From>
+16535: inline Result
+16535: assign_signed_int_signed_int(To& to, const From from, Rounding_Dir dir) {
+16535:   if (sizeof(To) < sizeof(From)
+16535:       || (sizeof(To) == sizeof(From)
+16535:       && (Extended_Int<To_Policy, To>::min > Extended_Int<From_Policy, From>::min
+16535:       || Extended_Int<To_Policy, To>::max < Extended_Int<From_Policy, From>::max))) {
+16535:     if (((To_Policy::check_overflow) ? (((from) < (static_cast<From>(Extended_Int<To_Policy, To>::min)))) : (
+16535: # 368 "../../src/checked_int_inlines.hh" 3 4
+16535:        (static_cast<void> (0))
+16535: # 368 "../../src/checked_int_inlines.hh"
+16535:        , false))
+16535: 
+16535:                                                                                    ) {
+16535:       return set_neg_overflow_int<To_Policy>(to, dir);
+16535:     }
+16535:     if (((To_Policy::check_overflow) ? (((from) > (static_cast<From>(Extended_Int<To_Policy, To>::max)))) : (
+16535: # 373 "../../src/checked_int_inlines.hh" 3 4
+16535:        (static_cast<void> (0))
+16535: # 373 "../../src/checked_int_inlines.hh"
+16535:        , false))
+16535: 
+16535:                                                                                    ) {
+16535:       return set_pos_overflow_int<To_Policy>(to, dir);
+16535:     }
+16535:   }
+16535:   to = static_cast<To>(from);
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename To, typename From>
+16535: inline Result
+16535: assign_signed_int_unsigned_int(To& to, const From from, Rounding_Dir dir) {
+16535:   if (sizeof(To) <= sizeof(From)) {
+16535:     if (((To_Policy::check_overflow) ? (from > static_cast<From>(Extended_Int<To_Policy, To>::max)) : (
+16535: # 387 "../../src/checked_int_inlines.hh" 3 4
+16535:        (static_cast<void> (0))
+16535: # 387 "../../src/checked_int_inlines.hh"
+16535:        , false))
+16535:                                                                            ) {
+16535:       return set_pos_overflow_int<To_Policy>(to, dir);
+16535:     }
+16535:   }
+16535:   to = static_cast<To>(from);
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename To, typename From>
+16535: inline Result
+16535: assign_unsigned_int_signed_int(To& to, const From from, Rounding_Dir dir) {
+16535:   if (((To_Policy::check_overflow) ? (from < 0) : (
+16535: # 399 "../../src/checked_int_inlines.hh" 3 4
+16535:      (static_cast<void> (0))
+16535: # 399 "../../src/checked_int_inlines.hh"
+16535:      , false))) {
+16535:     return set_neg_overflow_int<To_Policy>(to, dir);
+16535:   }
+16535:   if (sizeof(To) < sizeof(From)) {
+16535:     if (((To_Policy::check_overflow) ? (from > static_cast<From>(Extended_Int<To_Policy, To>::max)) : (
+16535: # 403 "../../src/checked_int_inlines.hh" 3 4
+16535:        (static_cast<void> (0))
+16535: # 403 "../../src/checked_int_inlines.hh"
+16535:        , false))
+16535:                                                                            ) {
+16535:       return set_pos_overflow_int<To_Policy>(to, dir);
+16535:     }
+16535:   }
+16535:   to = static_cast<To>(from);
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename To, typename From>
+16535: inline Result
+16535: assign_unsigned_int_unsigned_int(To& to, const From from, Rounding_Dir dir) {
+16535:   if (sizeof(To) < sizeof(From)
+16535:       || (sizeof(To) == sizeof(From)
+16535:       && Extended_Int<To_Policy, To>::max < Extended_Int<From_Policy, From>::max)) {
+16535:     if (((To_Policy::check_overflow) ? (((from) > (static_cast<From>(Extended_Int<To_Policy, To>::max)))) : (
+16535: # 418 "../../src/checked_int_inlines.hh" 3 4
+16535:        (static_cast<void> (0))
+16535: # 418 "../../src/checked_int_inlines.hh"
+16535:        , false))
+16535: 
+16535:                                                                                    ) {
+16535:       return set_pos_overflow_int<To_Policy>(to, dir);
+16535:     }
+16535:   }
+16535:   to = static_cast<To>(from);
+16535:   return V_EQ;
+16535: }
+16535: # 451 "../../src/checked_int_inlines.hh"
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, signed short> { static inline Result function( char& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, char> { static inline Result function( signed short& arg1, const char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, signed int> { static inline Result function( char& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, char> { static inline Result function( signed int& arg1, const char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, signed long> { static inline Result function( char& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, char> { static inline Result function( signed long& arg1, const char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, signed long long> { static inline Result function( char& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, char> { static inline Result function( signed long long& arg1, const char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, signed short> { static inline Result function( signed char& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, signed char> { static inline Result function( signed short& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, signed int> { static inline Result function( signed char& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, signed char> { static inline Result function( signed int& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, signed long> { static inline Result function( signed char& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, signed char> { static inline Result function( signed long& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, signed long long> { static inline Result function( signed char& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, signed char> { static inline Result function( signed long long& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, signed int> { static inline Result function( signed short& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, signed short> { static inline Result function( signed int& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, signed long> { static inline Result function( signed short& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, signed short> { static inline Result function( signed long& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, signed long long> { static inline Result function( signed short& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, signed short> { static inline Result function( signed long long& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, signed long> { static inline Result function( signed int& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, signed int> { static inline Result function( signed long& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, signed long long> { static inline Result function( signed int& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, signed int> { static inline Result function( signed long long& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, signed long long> { static inline Result function( signed long& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, signed long> { static inline Result function( signed long long& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, unsigned short> { static inline Result function( unsigned char& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, unsigned char> { static inline Result function( unsigned short& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, unsigned int> { static inline Result function( unsigned char& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, unsigned char> { static inline Result function( unsigned int& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, unsigned long> { static inline Result function( unsigned char& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, unsigned char> { static inline Result function( unsigned long& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, unsigned long long> { static inline Result function( unsigned char& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, unsigned char> { static inline Result function( unsigned long long& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, unsigned int> { static inline Result function( unsigned short& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, unsigned short> { static inline Result function( unsigned int& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, unsigned long> { static inline Result function( unsigned short& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, unsigned short> { static inline Result function( unsigned long& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, unsigned long long> { static inline Result function( unsigned short& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, unsigned short> { static inline Result function( unsigned long long& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, unsigned long> { static inline Result function( unsigned int& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, unsigned int> { static inline Result function( unsigned long& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, unsigned long long> { static inline Result function( unsigned int& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, unsigned int> { static inline Result function( unsigned long long& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, unsigned long long> { static inline Result function( unsigned long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, unsigned long> { static inline Result function( unsigned long long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, signed short> { static inline Result function( unsigned char& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, unsigned char> { static inline Result function( signed short& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, signed int> { static inline Result function( unsigned char& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, unsigned char> { static inline Result function( signed int& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, signed long> { static inline Result function( unsigned char& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, unsigned char> { static inline Result function( signed long& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, signed long long> { static inline Result function( unsigned char& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, unsigned char> { static inline Result function( signed long long& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, signed int> { static inline Result function( unsigned short& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, unsigned short> { static inline Result function( signed int& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, signed long> { static inline Result function( unsigned short& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, unsigned short> { static inline Result function( signed long& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, signed long long> { static inline Result function( unsigned short& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, unsigned short> { static inline Result function( signed long long& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, signed long> { static inline Result function( unsigned int& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, unsigned int> { static inline Result function( signed long& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, signed long long> { static inline Result function( unsigned int& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, unsigned int> { static inline Result function( signed long long& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, signed long long> { static inline Result function( unsigned long& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, unsigned long> { static inline Result function( signed long long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, unsigned char> { static inline Result function( char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, char> { static inline Result function( unsigned char& arg1, const char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, unsigned short> { static inline Result function( char& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, char> { static inline Result function( unsigned short& arg1, const char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, unsigned int> { static inline Result function( char& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, char> { static inline Result function( unsigned int& arg1, const char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, unsigned long> { static inline Result function( char& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, char> { static inline Result function( unsigned long& arg1, const char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, unsigned long long> { static inline Result function( char& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, char> { static inline Result function( unsigned long long& arg1, const char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, unsigned char> { static inline Result function( signed char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, signed char> { static inline Result function( unsigned char& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, unsigned short> { static inline Result function( signed char& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, signed char> { static inline Result function( unsigned short& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, unsigned int> { static inline Result function( signed char& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, signed char> { static inline Result function( unsigned int& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, unsigned long> { static inline Result function( signed char& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, signed char> { static inline Result function( unsigned long& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, unsigned long long> { static inline Result function( signed char& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, signed char> { static inline Result function( unsigned long long& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, unsigned short> { static inline Result function( signed short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, signed short> { static inline Result function( unsigned short& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, unsigned int> { static inline Result function( signed short& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, signed short> { static inline Result function( unsigned int& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, unsigned long> { static inline Result function( signed short& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, signed short> { static inline Result function( unsigned long& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, unsigned long long> { static inline Result function( signed short& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, signed short> { static inline Result function( unsigned long long& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, unsigned int> { static inline Result function( signed int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, signed int> { static inline Result function( unsigned int& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, unsigned long> { static inline Result function( signed int& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, signed int> { static inline Result function( unsigned long& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, unsigned long long> { static inline Result function( signed int& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, signed int> { static inline Result function( unsigned long long& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, unsigned long> { static inline Result function( signed long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, signed long> { static inline Result function( unsigned long& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, unsigned long long> { static inline Result function( signed long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, signed long> { static inline Result function( unsigned long long& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, unsigned long long> { static inline Result function( signed long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_signed_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } }; template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, signed long long> { static inline Result function( unsigned long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename To, typename From>
+16535: inline Result
+16535: assign_int_float(To& to, const From from, Rounding_Dir dir) {
+16535:   if (is_nan<From_Policy>(from)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (is_minf<From_Policy>(from)) {
+16535:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
+16535:   }
+16535:   else if (is_pinf<From_Policy>(from)) {
+16535:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:   }
+16535: # 565 "../../src/checked_int_inlines.hh"
+16535:   if (((To_Policy::check_overflow) ? ((from < Extended_Int<To_Policy, To>::min)) : (
+16535: # 565 "../../src/checked_int_inlines.hh" 3 4
+16535:      (static_cast<void> (0))
+16535: # 565 "../../src/checked_int_inlines.hh"
+16535:      , false))
+16535:                                                        ) {
+16535:     return set_neg_overflow_int<To_Policy>(to, dir);
+16535:   }
+16535:   if (((To_Policy::check_overflow) ? ((from > Extended_Int<To_Policy, To>::max)) : (
+16535: # 569 "../../src/checked_int_inlines.hh" 3 4
+16535:      (static_cast<void> (0))
+16535: # 569 "../../src/checked_int_inlines.hh"
+16535:      , false))
+16535:                                                        ) {
+16535:     return set_pos_overflow_int<To_Policy>(to, dir);
+16535:   }
+16535: 
+16535:   if (round_not_requested(dir)) {
+16535:     to = from;
+16535:     return V_LGE;
+16535:   }
+16535:   From i_from = rint(from);
+16535:   to = i_from;
+16535:   if (from == i_from) {
+16535:     return V_EQ;
+16535:   }
+16535:   if (round_direct(ROUND_UP)) {
+16535:     return round_lt_int<To_Policy>(to, dir);
+16535:   }
+16535:   if (round_direct(ROUND_DOWN)) {
+16535:     return round_gt_int<To_Policy>(to, dir);
+16535:   }
+16535:   if (from < i_from) {
+16535:     return round_lt_int<To_Policy>(to, dir);
+16535:   }
+16535:   ((void) 0);
+16535:   return round_gt_int<To_Policy>(to, dir);
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, float> { static inline Result function( char& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, float> { static inline Result function( signed char& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, float> { static inline Result function( signed short& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, float> { static inline Result function( signed int& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, float> { static inline Result function( signed long& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, float> { static inline Result function( signed long long& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, float> { static inline Result function( unsigned char& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, float> { static inline Result function( unsigned short& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, float> { static inline Result function( unsigned int& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, float> { static inline Result function( unsigned long& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, float> { static inline Result function( unsigned long long& arg1, const float &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, double> { static inline Result function( char& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, double> { static inline Result function( signed char& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, double> { static inline Result function( signed short& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, double> { static inline Result function( signed int& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, double> { static inline Result function( signed long& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, double> { static inline Result function( signed long long& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, double> { static inline Result function( unsigned char& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, double> { static inline Result function( unsigned short& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, double> { static inline Result function( unsigned int& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, double> { static inline Result function( unsigned long& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, double> { static inline Result function( unsigned long long& arg1, const double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, long double> { static inline Result function( char& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, long double> { static inline Result function( signed char& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, long double> { static inline Result function( signed short& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, long double> { static inline Result function( signed int& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, long double> { static inline Result function( signed long& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, long double> { static inline Result function( signed long long& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, long double> { static inline Result function( unsigned char& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, long double> { static inline Result function( unsigned short& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, long double> { static inline Result function( unsigned int& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, long double> { static inline Result function( unsigned long& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, long double> { static inline Result function( unsigned long long& arg1, const long double &arg2, Rounding_Dir a1) { return assign_int_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: # 639 "../../src/checked_int_inlines.hh"
+16535: template <typename To_Policy, typename From_Policy, typename To>
+16535: inline Result
+16535: assign_signed_int_mpz(To& to, const mpz_class& from, Rounding_Dir dir) {
+16535:   if (sizeof(To) <= sizeof(signed long)) {
+16535:     if (!To_Policy::check_overflow) {
+16535:       to = from.get_si();
+16535:       return V_EQ;
+16535:     }
+16535:     if (from.fits_slong_p()) {
+16535:       signed long v = from.get_si();
+16535:       if (((v) < ((Extended_Int<To_Policy, To>::min)))) {
+16535:         return set_neg_overflow_int<To_Policy>(to, dir);
+16535:       }
+16535:       if (((v) > ((Extended_Int<To_Policy, To>::max)))) {
+16535:         return set_pos_overflow_int<To_Policy>(to, dir);
+16535:       }
+16535:       to = v;
+16535:       return V_EQ;
+16535:     }
+16535:   }
+16535:   else {
+16535:     mpz_srcptr m = from.get_mpz_t();
+16535:     size_t sz = 
+16535: # 661 "../../src/checked_int_inlines.hh" 3 4
+16535:                __gmpz_size
+16535: # 661 "../../src/checked_int_inlines.hh"
+16535:                        (m);
+16535:     if (sz <= sizeof(To) / sizeof(mp_limb_t)) {
+16535:       if (sz == 0) {
+16535:         to = 0;
+16535:         return V_EQ;
+16535:       }
+16535:       To v;
+16535:       
+16535: # 668 "../../src/checked_int_inlines.hh" 3 4
+16535:      __gmpz_export
+16535: # 668 "../../src/checked_int_inlines.hh"
+16535:                (&v, 0, -1, sizeof(To), 0, 0, m);
+16535:       if (v >= 0) {
+16535:         if (::sgn(from) < 0) {
+16535:           return neg<To_Policy, To_Policy>(to, v, dir);
+16535:         }
+16535:         to = v;
+16535:         return V_EQ;
+16535:       }
+16535:     }
+16535:   }
+16535:   return (::sgn(from) < 0)
+16535:     ? set_neg_overflow_int<To_Policy>(to, dir)
+16535:     : set_pos_overflow_int<To_Policy>(to, dir);
+16535: }
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, mpz_class> { static inline Result function( char& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_signed_int_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, mpz_class> { static inline Result function( signed char& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_signed_int_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, mpz_class> { static inline Result function( signed short& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_signed_int_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, mpz_class> { static inline Result function( signed int& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_signed_int_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, mpz_class> { static inline Result function( signed long& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_signed_int_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, mpz_class> { static inline Result function( signed long long& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_signed_int_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename To>
+16535: inline Result
+16535: assign_unsigned_int_mpz(To& to, const mpz_class& from, Rounding_Dir dir) {
+16535:   if (((To_Policy::check_overflow) ? (::sgn(from) < 0) : (
+16535: # 695 "../../src/checked_int_inlines.hh" 3 4
+16535:      (static_cast<void> (0))
+16535: # 695 "../../src/checked_int_inlines.hh"
+16535:      , false))) {
+16535:     return set_neg_overflow_int<To_Policy>(to, dir);
+16535:   }
+16535:   if (sizeof(To) <= sizeof(unsigned long)) {
+16535:     if (!To_Policy::check_overflow) {
+16535:       to = static_cast<To>(from.get_ui());
+16535:       return V_EQ;
+16535:     }
+16535:     if (from.fits_ulong_p()) {
+16535:       const unsigned long v = from.get_ui();
+16535:       if (((v) > ((Extended_Int<To_Policy, To>::max)))) {
+16535:         return set_pos_overflow_int<To_Policy>(to, dir);
+16535:       }
+16535:       to = static_cast<To>(v);
+16535:       return V_EQ;
+16535:     }
+16535:   }
+16535:   else {
+16535:     const mpz_srcptr m = from.get_mpz_t();
+16535:     const size_t sz = 
+16535: # 714 "../../src/checked_int_inlines.hh" 3 4
+16535:                      __gmpz_size
+16535: # 714 "../../src/checked_int_inlines.hh"
+16535:                              (m);
+16535:     if (sz <= sizeof(To) / sizeof(mp_limb_t)) {
+16535:       if (sz == 0) {
+16535:         to = 0;
+16535:       }
+16535:       else {
+16535:         
+16535: # 720 "../../src/checked_int_inlines.hh" 3 4
+16535:        __gmpz_export
+16535: # 720 "../../src/checked_int_inlines.hh"
+16535:                  (&to, 0, -1, sizeof(To), 0, 0, m);
+16535:       }
+16535:       return V_EQ;
+16535:     }
+16535:   }
+16535:   return set_pos_overflow_int<To_Policy>(to, dir);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, mpz_class> { static inline Result function( unsigned char& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_unsigned_int_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, mpz_class> { static inline Result function( unsigned short& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_unsigned_int_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, mpz_class> { static inline Result function( unsigned int& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_unsigned_int_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, mpz_class> { static inline Result function( unsigned long& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_unsigned_int_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, mpz_class> { static inline Result function( unsigned long long& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_unsigned_int_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename To>
+16535: inline Result
+16535: assign_int_mpq(To& to, const mpq_class& from, Rounding_Dir dir) {
+16535:   mpz_srcptr n = from.get_num().get_mpz_t();
+16535:   mpz_srcptr d = from.get_den().get_mpz_t();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpz_class> holder_q; mpz_class& q = holder_q.item();
+16535:   mpz_ptr q_z = q.get_mpz_t();
+16535:   if (round_not_requested(dir)) {
+16535:     
+16535: # 745 "../../src/checked_int_inlines.hh" 3 4
+16535:    __gmpz_tdiv_q
+16535: # 745 "../../src/checked_int_inlines.hh"
+16535:              (q_z, n, d);
+16535:     Result r = assign<To_Policy, void>(to, q, dir);
+16535:     if (r != V_EQ) {
+16535:       return r;
+16535:     }
+16535:     return V_LGE;
+16535:   }
+16535:   mpz_t rem;
+16535:   int sign;
+16535:   
+16535: # 754 "../../src/checked_int_inlines.hh" 3 4
+16535:  __gmpz_init
+16535: # 754 "../../src/checked_int_inlines.hh"
+16535:          (rem);
+16535:   
+16535: # 755 "../../src/checked_int_inlines.hh" 3 4
+16535:  __gmpz_tdiv_qr
+16535: # 755 "../../src/checked_int_inlines.hh"
+16535:             (q_z, rem, n, d);
+16535:   sign = 
+16535: # 756 "../../src/checked_int_inlines.hh" 3 4
+16535:         ((
+16535: # 756 "../../src/checked_int_inlines.hh"
+16535:         rem
+16535: # 756 "../../src/checked_int_inlines.hh" 3 4
+16535:         )->_mp_size < 0 ? -1 : (
+16535: # 756 "../../src/checked_int_inlines.hh"
+16535:         rem
+16535: # 756 "../../src/checked_int_inlines.hh" 3 4
+16535:         )->_mp_size > 0)
+16535: # 756 "../../src/checked_int_inlines.hh"
+16535:                     ;
+16535:   
+16535: # 757 "../../src/checked_int_inlines.hh" 3 4
+16535:  __gmpz_clear
+16535: # 757 "../../src/checked_int_inlines.hh"
+16535:           (rem);
+16535:   Result r = assign<To_Policy, void>(to, q, dir);
+16535:   if (r != V_EQ) {
+16535:     return r;
+16535:   }
+16535:   switch (sign) {
+16535:   case -1:
+16535:     return round_lt_int<To_Policy>(to, dir);
+16535:   case 1:
+16535:     return round_gt_int<To_Policy>(to, dir);
+16535:   default:
+16535:     return V_EQ;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, char, mpq_class> { static inline Result function( char& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed char, mpq_class> { static inline Result function( signed char& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed short, mpq_class> { static inline Result function( signed short& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed int, mpq_class> { static inline Result function( signed int& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long, mpq_class> { static inline Result function( signed long& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, signed long long, mpq_class> { static inline Result function( signed long long& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned char, mpq_class> { static inline Result function( unsigned char& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned short, mpq_class> { static inline Result function( unsigned short& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned int, mpq_class> { static inline Result function( unsigned int& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long, mpq_class> { static inline Result function( unsigned long& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, unsigned long long, mpq_class> { static inline Result function( unsigned long long& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_int_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: # 821 "../../src/checked_int_inlines.hh"
+16535: template <typename T>
+16535: struct Larger;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <>
+16535: struct Larger<char> {
+16535:   enum const_bool_value_use_for_neg { use_for_neg = (true) };
+16535:   enum const_bool_value_use_for_add { use_for_add = (true) };
+16535:   enum const_bool_value_use_for_sub { use_for_sub = (true) };
+16535:   enum const_bool_value_use_for_mul { use_for_mul = (true) };
+16535:   typedef int_fast16_t type_for_neg;
+16535:   typedef int_fast16_t type_for_add;
+16535:   typedef int_fast16_t type_for_sub;
+16535:   typedef int_fast16_t type_for_mul;
+16535: };
+16535: 
+16535: template <>
+16535: struct Larger<signed char> {
+16535:   enum const_bool_value_use_for_neg { use_for_neg = (true) };
+16535:   enum const_bool_value_use_for_add { use_for_add = (true) };
+16535:   enum const_bool_value_use_for_sub { use_for_sub = (true) };
+16535:   enum const_bool_value_use_for_mul { use_for_mul = (true) };
+16535:   typedef int_fast16_t type_for_neg;
+16535:   typedef int_fast16_t type_for_add;
+16535:   typedef int_fast16_t type_for_sub;
+16535:   typedef int_fast16_t type_for_mul;
+16535: };
+16535: 
+16535: template <>
+16535: struct Larger<unsigned char> {
+16535:   enum const_bool_value_use_for_neg { use_for_neg = (true) };
+16535:   enum const_bool_value_use_for_add { use_for_add = (true) };
+16535:   enum const_bool_value_use_for_sub { use_for_sub = (true) };
+16535:   enum const_bool_value_use_for_mul { use_for_mul = (true) };
+16535:   typedef int_fast16_t type_for_neg;
+16535:   typedef uint_fast16_t type_for_add;
+16535:   typedef int_fast16_t type_for_sub;
+16535:   typedef uint_fast16_t type_for_mul;
+16535: };
+16535: 
+16535: template <>
+16535: struct Larger<signed short> {
+16535:   enum const_bool_value_use_for_neg { use_for_neg = (true) };
+16535:   enum const_bool_value_use_for_add { use_for_add = (true) };
+16535:   enum const_bool_value_use_for_sub { use_for_sub = (true) };
+16535:   enum const_bool_value_use_for_mul { use_for_mul = (true) };
+16535:   typedef int_fast32_t type_for_neg;
+16535:   typedef int_fast32_t type_for_add;
+16535:   typedef int_fast32_t type_for_sub;
+16535:   typedef int_fast32_t type_for_mul;
+16535: };
+16535: 
+16535: template <>
+16535: struct Larger<unsigned short> {
+16535:   enum const_bool_value_use_for_neg { use_for_neg = (true) };
+16535:   enum const_bool_value_use_for_add { use_for_add = (true) };
+16535:   enum const_bool_value_use_for_sub { use_for_sub = (true) };
+16535:   enum const_bool_value_use_for_mul { use_for_mul = (true) };
+16535:   typedef int_fast32_t type_for_neg;
+16535:   typedef uint_fast32_t type_for_add;
+16535:   typedef int_fast32_t type_for_sub;
+16535:   typedef uint_fast32_t type_for_mul;
+16535: };
+16535: 
+16535: template <>
+16535: struct Larger<signed int> {
+16535:   enum const_bool_value_use_for_neg { use_for_neg = ((64 == 64)) };
+16535:   enum const_bool_value_use_for_add { use_for_add = ((64 == 64)) };
+16535:   enum const_bool_value_use_for_sub { use_for_sub = ((64 == 64)) };
+16535:   enum const_bool_value_use_for_mul { use_for_mul = (true) };
+16535:   typedef int_fast64_t type_for_neg;
+16535:   typedef int_fast64_t type_for_add;
+16535:   typedef int_fast64_t type_for_sub;
+16535:   typedef int_fast64_t type_for_mul;
+16535: };
+16535: 
+16535: template <>
+16535: struct Larger<unsigned int> {
+16535:   enum const_bool_value_use_for_neg { use_for_neg = ((64 == 64)) };
+16535:   enum const_bool_value_use_for_add { use_for_add = ((64 == 64)) };
+16535:   enum const_bool_value_use_for_sub { use_for_sub = ((64 == 64)) };
+16535:   enum const_bool_value_use_for_mul { use_for_mul = (true) };
+16535:   typedef int_fast64_t type_for_neg;
+16535:   typedef uint_fast64_t type_for_add;
+16535:   typedef int_fast64_t type_for_sub;
+16535:   typedef uint_fast64_t type_for_mul;
+16535: };
+16535: 
+16535: template <>
+16535: struct Larger<signed long> {
+16535:   enum const_bool_value_use_for_neg { use_for_neg = (false) };
+16535:   enum const_bool_value_use_for_add { use_for_add = (false) };
+16535:   enum const_bool_value_use_for_sub { use_for_sub = (false) };
+16535:   enum const_bool_value_use_for_mul { use_for_mul = ((64 == 32)) };
+16535:   typedef int_fast64_t type_for_neg;
+16535:   typedef int_fast64_t type_for_add;
+16535:   typedef int_fast64_t type_for_sub;
+16535:   typedef int_fast64_t type_for_mul;
+16535: };
+16535: 
+16535: template <>
+16535: struct Larger<unsigned long> {
+16535:   enum const_bool_value_use_for_neg { use_for_neg = (false) };
+16535:   enum const_bool_value_use_for_add { use_for_add = (false) };
+16535:   enum const_bool_value_use_for_sub { use_for_sub = (false) };
+16535:   enum const_bool_value_use_for_mul { use_for_mul = ((64 == 32)) };
+16535:   typedef int_fast64_t type_for_neg;
+16535:   typedef uint_fast64_t type_for_add;
+16535:   typedef int_fast64_t type_for_sub;
+16535:   typedef uint_fast64_t type_for_mul;
+16535: };
+16535: 
+16535: template <>
+16535: struct Larger<signed long long> {
+16535:   enum const_bool_value_use_for_neg { use_for_neg = (false) };
+16535:   enum const_bool_value_use_for_add { use_for_add = (false) };
+16535:   enum const_bool_value_use_for_sub { use_for_sub = (false) };
+16535:   enum const_bool_value_use_for_mul { use_for_mul = (false) };
+16535:   typedef int_fast64_t type_for_neg;
+16535:   typedef int_fast64_t type_for_add;
+16535:   typedef int_fast64_t type_for_sub;
+16535:   typedef int_fast64_t type_for_mul;
+16535: };
+16535: 
+16535: template <>
+16535: struct Larger<unsigned long long> {
+16535:   enum const_bool_value_use_for_neg { use_for_neg = (false) };
+16535:   enum const_bool_value_use_for_add { use_for_add = (false) };
+16535:   enum const_bool_value_use_for_sub { use_for_sub = (false) };
+16535:   enum const_bool_value_use_for_mul { use_for_mul = (false) };
+16535:   typedef int_fast64_t type_for_neg;
+16535:   typedef uint_fast64_t type_for_add;
+16535:   typedef int_fast64_t type_for_sub;
+16535:   typedef uint_fast64_t type_for_mul;
+16535: };
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: neg_int_larger(Type& to, const Type x, Rounding_Dir dir) {
+16535:   typename Larger<Type>::type_for_neg l = x;
+16535:   l = -l;
+16535:   return assign<To_Policy, To_Policy>(to, l, dir);
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: add_int_larger(Type& to, const Type x, const Type y, Rounding_Dir dir) {
+16535:   typename Larger<Type>::type_for_add l = x;
+16535:   l += y;
+16535:   return assign<To_Policy, To_Policy>(to, l, dir);
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: sub_int_larger(Type& to, const Type x, const Type y, Rounding_Dir dir) {
+16535:   typename Larger<Type>::type_for_sub l = x;
+16535:   l -= y;
+16535:   return assign<To_Policy, To_Policy>(to, l, dir);
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: mul_int_larger(Type& to, const Type x, const Type y, Rounding_Dir dir) {
+16535:   typename Larger<Type>::type_for_mul l = x;
+16535:   l *= y;
+16535:   return assign<To_Policy, To_Policy>(to, l, dir);
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: neg_signed_int(Type& to, const Type from, Rounding_Dir dir) {
+16535:   if (To_Policy::check_overflow && Larger<Type>::use_for_neg) {
+16535:     return neg_int_larger<To_Policy, From_Policy>(to, from, dir);
+16535:   }
+16535:   if (((To_Policy::check_overflow) ? ((from < -Extended_Int<To_Policy, Type>::max)) : (
+16535: # 1003 "../../src/checked_int_inlines.hh" 3 4
+16535:      (static_cast<void> (0))
+16535: # 1003 "../../src/checked_int_inlines.hh"
+16535:      , false))
+16535:                                                            ) {
+16535:     return set_pos_overflow_int<To_Policy>(to, dir);
+16535:   }
+16535:   to = -from;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: neg_unsigned_int(Type& to, const Type from, Rounding_Dir dir) {
+16535:   if (To_Policy::check_overflow && Larger<Type>::use_for_neg) {
+16535:     return neg_int_larger<To_Policy, From_Policy>(to, from, dir);
+16535:   }
+16535:   if (((To_Policy::check_overflow) ? (from != 0) : (
+16535: # 1017 "../../src/checked_int_inlines.hh" 3 4
+16535:      (static_cast<void> (0))
+16535: # 1017 "../../src/checked_int_inlines.hh"
+16535:      , false))) {
+16535:     return set_neg_overflow_int<To_Policy>(to, dir);
+16535:   }
+16535:   to = from;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: add_signed_int(Type& to, const Type x, const Type y, Rounding_Dir dir) {
+16535:   if (To_Policy::check_overflow && Larger<Type>::use_for_add) {
+16535:     return add_int_larger<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
+16535:   }
+16535:   if (To_Policy::check_overflow) {
+16535:     if (y >= 0) {
+16535:       if (x > Extended_Int<To_Policy, Type>::max - y) {
+16535:         return set_pos_overflow_int<To_Policy>(to, dir);
+16535:       }
+16535:     }
+16535:     else if (x < Extended_Int<To_Policy, Type>::min - y) {
+16535:       return set_neg_overflow_int<To_Policy>(to, dir);
+16535:     }
+16535:   }
+16535:   to = x + y;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: add_unsigned_int(Type& to, const Type x, const Type y, Rounding_Dir dir) {
+16535:   if (To_Policy::check_overflow && Larger<Type>::use_for_add) {
+16535:     return add_int_larger<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
+16535:   }
+16535:   if (((To_Policy::check_overflow) ? ((x > Extended_Int<To_Policy, Type>::max - y)) : (
+16535: # 1052 "../../src/checked_int_inlines.hh" 3 4
+16535:      (static_cast<void> (0))
+16535: # 1052 "../../src/checked_int_inlines.hh"
+16535:      , false))
+16535:                                                            ) {
+16535:     return set_pos_overflow_int<To_Policy>(to, dir);
+16535:   }
+16535:   to = x + y;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: sub_signed_int(Type& to, const Type x, const Type y, Rounding_Dir dir) {
+16535:   if (To_Policy::check_overflow && Larger<Type>::use_for_sub) {
+16535:     return sub_int_larger<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
+16535:   }
+16535:   if (To_Policy::check_overflow) {
+16535:     if (y >= 0) {
+16535:       if (x < Extended_Int<To_Policy, Type>::min + y) {
+16535:         return set_neg_overflow_int<To_Policy>(to, dir);
+16535:       }
+16535:     }
+16535:     else if (x > Extended_Int<To_Policy, Type>::max + y) {
+16535:       return set_pos_overflow_int<To_Policy>(to, dir);
+16535:     }
+16535:   }
+16535:   to = x - y;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: sub_unsigned_int(Type& to, const Type x, const Type y, Rounding_Dir dir) {
+16535:   if (To_Policy::check_overflow && Larger<Type>::use_for_sub) {
+16535:     return sub_int_larger<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
+16535:   }
+16535:   if (((To_Policy::check_overflow) ? ((x < Extended_Int<To_Policy, Type>::min + y)) : (
+16535: # 1088 "../../src/checked_int_inlines.hh" 3 4
+16535:      (static_cast<void> (0))
+16535: # 1088 "../../src/checked_int_inlines.hh"
+16535:      , false))
+16535:                                                            ) {
+16535:     return set_neg_overflow_int<To_Policy>(to, dir);
+16535:   }
+16535:   to = x - y;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: mul_signed_int(Type& to, const Type x, const Type y, Rounding_Dir dir) {
+16535:   if (To_Policy::check_overflow && Larger<Type>::use_for_mul) {
+16535:     return mul_int_larger<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
+16535:   }
+16535:   if (!To_Policy::check_overflow) {
+16535:     to = x * y;
+16535:     return V_EQ;
+16535:   }
+16535:   if (y == 0) {
+16535:     to = 0;
+16535:     return V_EQ;
+16535:   }
+16535:   if (y == -1) {
+16535:     return neg_signed_int<To_Policy, From1_Policy>(to, x, dir);
+16535:   }
+16535:   if (x >= 0) {
+16535:     if (y > 0) {
+16535:       if (x > Extended_Int<To_Policy, Type>::max / y) {
+16535:         return set_pos_overflow_int<To_Policy>(to, dir);
+16535:       }
+16535:     }
+16535:     else {
+16535:       if (x > Extended_Int<To_Policy, Type>::min / y) {
+16535:         return set_neg_overflow_int<To_Policy>(to, dir);
+16535:       }
+16535:     }
+16535:   }
+16535:   else {
+16535:     if (y < 0) {
+16535:       if (x < Extended_Int<To_Policy, Type>::max / y) {
+16535:         return set_pos_overflow_int<To_Policy>(to, dir);
+16535:       }
+16535:     }
+16535:     else {
+16535:       if (x < Extended_Int<To_Policy, Type>::min / y) {
+16535:         return set_neg_overflow_int<To_Policy>(to, dir);
+16535:       }
+16535:     }
+16535:   }
+16535:   to = x * y;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: mul_unsigned_int(Type& to, const Type x, const Type y, Rounding_Dir dir) {
+16535:   if (To_Policy::check_overflow && Larger<Type>::use_for_mul) {
+16535:     return mul_int_larger<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
+16535:   }
+16535:   if (!To_Policy::check_overflow) {
+16535:     to = x * y;
+16535:     return V_EQ;
+16535:   }
+16535:   if (y == 0) {
+16535:     to = 0;
+16535:     return V_EQ;
+16535:   }
+16535:   if (x > Extended_Int<To_Policy, Type>::max / y) {
+16535:     return set_pos_overflow_int<To_Policy>(to, dir);
+16535:   }
+16535:   to = x * y;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: div_signed_int(Type& to, const Type x, const Type y, Rounding_Dir dir) {
+16535:   if (((To_Policy::check_div_zero) ? (y == 0) : (
+16535: # 1168 "../../src/checked_int_inlines.hh" 3 4
+16535:      (static_cast<void> (0))
+16535: # 1168 "../../src/checked_int_inlines.hh"
+16535:      , false))) {
+16535:     return assign_nan<To_Policy>(to, V_DIV_ZERO);
+16535:   }
+16535:   if (To_Policy::check_overflow && y == -1) {
+16535:     return neg_signed_int<To_Policy, From1_Policy>(to, x, dir);
+16535:   }
+16535:   to = x / y;
+16535:   if (round_not_requested(dir)) {
+16535:     return V_LGE;
+16535:   }
+16535:   if (y == -1) {
+16535:     return V_EQ;
+16535:   }
+16535:   Type m = x % y;
+16535:   if (m < 0) {
+16535:     return round_lt_int_no_overflow<To_Policy>(to, dir);
+16535:   }
+16535:   else if (m > 0) {
+16535:     return round_gt_int_no_overflow<To_Policy>(to, dir);
+16535:   }
+16535:   else {
+16535:     return V_EQ;
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: div_unsigned_int(Type& to, const Type x, const Type y, Rounding_Dir dir) {
+16535:   if (((To_Policy::check_div_zero) ? (y == 0) : (
+16535: # 1197 "../../src/checked_int_inlines.hh" 3 4
+16535:      (static_cast<void> (0))
+16535: # 1197 "../../src/checked_int_inlines.hh"
+16535:      , false))) {
+16535:     return assign_nan<To_Policy>(to, V_DIV_ZERO);
+16535:   }
+16535:   to = x / y;
+16535:   if (round_not_requested(dir)) {
+16535:     return V_GE;
+16535:   }
+16535:   Type m = x % y;
+16535:   if (m == 0) {
+16535:     return V_EQ;
+16535:   }
+16535:   return round_gt_int<To_Policy>(to, dir);
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: idiv_signed_int(Type& to, const Type x, const Type y, Rounding_Dir dir) {
+16535:   if (((To_Policy::check_div_zero) ? (y == 0) : (
+16535: # 1215 "../../src/checked_int_inlines.hh" 3 4
+16535:      (static_cast<void> (0))
+16535: # 1215 "../../src/checked_int_inlines.hh"
+16535:      , false))) {
+16535:     return assign_nan<To_Policy>(to, V_DIV_ZERO);
+16535:   }
+16535:   if (To_Policy::check_overflow && y == -1) {
+16535:     return neg_signed_int<To_Policy, From1_Policy>(to, x, dir);
+16535:   }
+16535:   to = x / y;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: idiv_unsigned_int(Type& to, const Type x, const Type y, Rounding_Dir) {
+16535:   if (((To_Policy::check_div_zero) ? (y == 0) : (
+16535: # 1229 "../../src/checked_int_inlines.hh" 3 4
+16535:      (static_cast<void> (0))
+16535: # 1229 "../../src/checked_int_inlines.hh"
+16535:      , false))) {
+16535:     return assign_nan<To_Policy>(to, V_DIV_ZERO);
+16535:   }
+16535:   to = x / y;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: rem_signed_int(Type& to, const Type x, const Type y, Rounding_Dir) {
+16535:   if (((To_Policy::check_div_zero) ? (y == 0) : (
+16535: # 1240 "../../src/checked_int_inlines.hh" 3 4
+16535:      (static_cast<void> (0))
+16535: # 1240 "../../src/checked_int_inlines.hh"
+16535:      , false))) {
+16535:     return assign_nan<To_Policy>(to, V_MOD_ZERO);
+16535:   }
+16535:   to = (y == -1) ? 0 : (x % y);
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: rem_unsigned_int(Type& to, const Type x, const Type y, Rounding_Dir) {
+16535:   if (((To_Policy::check_div_zero) ? (y == 0) : (
+16535: # 1251 "../../src/checked_int_inlines.hh" 3 4
+16535:      (static_cast<void> (0))
+16535: # 1251 "../../src/checked_int_inlines.hh"
+16535:      , false))) {
+16535:     return assign_nan<To_Policy>(to, V_MOD_ZERO);
+16535:   }
+16535:   to = x % y;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: div_2exp_unsigned_int(Type& to, const Type x, unsigned int exp,
+16535:                       Rounding_Dir dir) {
+16535:   if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8))) {
+16535:     to = 0;
+16535:     if (round_not_requested(dir)) {
+16535:       return V_GE;
+16535:     }
+16535:     if (x == 0) {
+16535:       return V_EQ;
+16535:     }
+16535:     return round_gt_int_no_overflow<To_Policy>(to, dir);
+16535:   }
+16535:   to = x >> exp;
+16535:   if (round_not_requested(dir)) {
+16535:     return V_GE;
+16535:   }
+16535:   if (x & ((Type(1) << exp) - 1)) {
+16535:     return round_gt_int_no_overflow<To_Policy>(to, dir);
+16535:   }
+16535:   else {
+16535:     return V_EQ;
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: div_2exp_signed_int(Type& to, const Type x, unsigned int exp,
+16535:                     Rounding_Dir dir) {
+16535:   if (x < 0) {
+16535:     if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8))) {
+16535:       to = 0;
+16535:       if (round_not_requested(dir)) {
+16535:         return V_LE;
+16535:       }
+16535:       return round_lt_int_no_overflow<To_Policy>(to, dir);
+16535:     }
+16535:     typedef typename C_Integer<Type>::other_type UType;
+16535:     UType ux = x;
+16535:     ux = -ux;
+16535:     to = ~Type(~-(ux >> exp));
+16535:     if (round_not_requested(dir)) {
+16535:       return V_LE;
+16535:     }
+16535:     if (ux & ((UType(1) << exp) -1)) {
+16535:       return round_lt_int_no_overflow<To_Policy>(to, dir);
+16535:     }
+16535:     return V_EQ;
+16535:   }
+16535:   else {
+16535:     if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8)) - 1) {
+16535:       to = 0;
+16535:       if (round_not_requested(dir)) {
+16535:         return V_GE;
+16535:       }
+16535:       if (x == 0) {
+16535:         return V_EQ;
+16535:       }
+16535:       return round_gt_int_no_overflow<To_Policy>(to, dir);
+16535:     }
+16535:     to = x >> exp;
+16535:     if (round_not_requested(dir)) {
+16535:       return V_GE;
+16535:     }
+16535:     if (x & ((Type(1) << exp) - 1)) {
+16535:       return round_gt_int_no_overflow<To_Policy>(to, dir);
+16535:     }
+16535:     else {
+16535:       return V_EQ;
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: add_2exp_unsigned_int(Type& to, const Type x, unsigned int exp,
+16535:                       Rounding_Dir dir) {
+16535:   if (!To_Policy::check_overflow) {
+16535:     to = x + (Type(1) << exp);
+16535:     return V_EQ;
+16535:   }
+16535:   if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8))) {
+16535:     return set_pos_overflow_int<To_Policy>(to, dir);
+16535:   }
+16535:   Type n = Type(1) << exp;
+16535:   return add_unsigned_int<To_Policy, From_Policy, void>(to, x, n, dir);
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: add_2exp_signed_int(Type& to, const Type x, unsigned int exp,
+16535:                     Rounding_Dir dir) {
+16535:   if (!To_Policy::check_overflow) {
+16535:     to = x + (Type(1) << exp);
+16535:     return V_EQ;
+16535:   }
+16535:   if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8))) {
+16535:     return set_pos_overflow_int<To_Policy>(to, dir);
+16535:   }
+16535:   if (exp == ((sizeof(Type)) * static_cast<std::size_t>(8)) - 1) {
+16535:     Type n = -2 * (Type(1) << (exp - 1));
+16535:     return sub_signed_int<To_Policy, From_Policy, void>(to, x, n, dir);
+16535:   }
+16535:   else {
+16535:     Type n = Type(1) << exp;
+16535:     return add_signed_int<To_Policy, From_Policy, void>(to, x, n, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: sub_2exp_unsigned_int(Type& to, const Type x, unsigned int exp,
+16535:                       Rounding_Dir dir) {
+16535:   if (!To_Policy::check_overflow) {
+16535:     to = x - (Type(1) << exp);
+16535:     return V_EQ;
+16535:   }
+16535:   if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8))) {
+16535:     return set_neg_overflow_int<To_Policy>(to, dir);
+16535:   }
+16535:   Type n = Type(1) << exp;
+16535:   return sub_unsigned_int<To_Policy, From_Policy, void>(to, x, n, dir);
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: sub_2exp_signed_int(Type& to, const Type x, unsigned int exp,
+16535:                     Rounding_Dir dir) {
+16535:   if (!To_Policy::check_overflow) {
+16535:     to = x - (Type(1) << exp);
+16535:     return V_EQ;
+16535:   }
+16535:   if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8))) {
+16535:     return set_neg_overflow_int<To_Policy>(to, dir);
+16535:   }
+16535:   if (exp == ((sizeof(Type)) * static_cast<std::size_t>(8)) - 1) {
+16535:     Type n = -2 * (Type(1) << (exp - 1));
+16535:     return add_signed_int<To_Policy, From_Policy, void>(to, x, n, dir);
+16535:   }
+16535:   else {
+16535:     Type n = Type(1) << exp;
+16535:     return sub_signed_int<To_Policy, From_Policy, void>(to, x, n, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: mul_2exp_unsigned_int(Type& to, const Type x, unsigned int exp,
+16535:                       Rounding_Dir dir) {
+16535:   if (!To_Policy::check_overflow) {
+16535:     to = x << exp;
+16535:     return V_EQ;
+16535:   }
+16535:   if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8))) {
+16535:     if (x == 0) {
+16535:       to = 0;
+16535:       return V_EQ;
+16535:     }
+16535:     return set_pos_overflow_int<To_Policy>(to, dir);
+16535:   }
+16535:   if (x > Extended_Int<To_Policy, Type>::max >> exp) {
+16535:     return set_pos_overflow_int<To_Policy>(to, dir);
+16535:   }
+16535:   to = x << exp;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: mul_2exp_signed_int(Type& to, const Type x, unsigned int exp,
+16535:                     Rounding_Dir dir) {
+16535:   if (x < 0) {
+16535:     if (!To_Policy::check_overflow) {
+16535:       to = x * (Type(1) << exp);
+16535:       return V_EQ;
+16535:     }
+16535:     if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8))) {
+16535:       return set_neg_overflow_int<To_Policy>(to, dir);
+16535:     }
+16535:     typedef typename C_Integer<Type>::other_type UType;
+16535:     UType mask = UType(-1) << (((sizeof(Type)) * static_cast<std::size_t>(8)) - exp - 1);
+16535:     UType ux = x;
+16535:     if ((ux & mask) != mask) {
+16535:       return set_neg_overflow_int<To_Policy>(to, dir);
+16535:     }
+16535:     ux <<= exp;
+16535:     Type n = ~(Type(~ux));
+16535:     if (((n) < ((Extended_Int<To_Policy, Type>::min)))) {
+16535:       return set_neg_overflow_int<To_Policy>(to, dir);
+16535:     }
+16535:     to = n;
+16535:   }
+16535:   else {
+16535:     if (!To_Policy::check_overflow) {
+16535:       to = x << exp;
+16535:       return V_EQ;
+16535:     }
+16535:     if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8)) - 1) {
+16535:       if (x == 0) {
+16535:         to = 0;
+16535:         return V_EQ;
+16535:       }
+16535:       return set_pos_overflow_int<To_Policy>(to, dir);
+16535:     }
+16535:     if (x > Extended_Int<To_Policy, Type>::max >> exp) {
+16535:       return set_pos_overflow_int<To_Policy>(to, dir);
+16535:     }
+16535:     to = x << exp;
+16535:   }
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: smod_2exp_unsigned_int(Type& to, const Type x, unsigned int exp,
+16535:                        Rounding_Dir dir) {
+16535:   if (exp > ((sizeof(Type)) * static_cast<std::size_t>(8))) {
+16535:     to = x;
+16535:   }
+16535:   else {
+16535:     Type v = (exp == ((sizeof(Type)) * static_cast<std::size_t>(8)) ? x : (x & ((Type(1) << exp) - 1)));
+16535:     if (v >= (Type(1) << (exp - 1))) {
+16535:       return set_neg_overflow_int<To_Policy>(to, dir);
+16535:     }
+16535:     else {
+16535:       to = v;
+16535:     }
+16535:   }
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: smod_2exp_signed_int(Type& to, const Type x, unsigned int exp,
+16535:                      Rounding_Dir) {
+16535:   if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8))) {
+16535:     to = x;
+16535:   }
+16535:   else {
+16535:     Type m = Type(1) << (exp - 1);
+16535:     to = (x & (m - 1)) - (x & m);
+16535:   }
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: umod_2exp_unsigned_int(Type& to, const Type x, unsigned int exp,
+16535:                        Rounding_Dir) {
+16535:   if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8))) {
+16535:     to = x;
+16535:   }
+16535:   else {
+16535:     to = x & ((Type(1) << exp) - 1);
+16535:   }
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: umod_2exp_signed_int(Type& to, const Type x, unsigned int exp,
+16535:                      Rounding_Dir dir) {
+16535:   if (exp >= ((sizeof(Type)) * static_cast<std::size_t>(8))) {
+16535:     if (x < 0) {
+16535:       return set_pos_overflow_int<To_Policy>(to, dir);
+16535:     }
+16535:     to = x;
+16535:   }
+16535:   else {
+16535:     to = x & ((Type(1) << exp) - 1);
+16535:   }
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Type>
+16535: inline void
+16535: isqrt_rem(Type& q, Type& r, const Type from) {
+16535:   q = 0;
+16535:   r = from;
+16535:   Type t(1);
+16535:   for (t <<= ((sizeof(Type)) * static_cast<std::size_t>(8)) - 2; t != 0; t >>= 2) {
+16535:     Type s = q + t;
+16535:     if (s <= r) {
+16535:       r -= s;
+16535:       q = s + t;
+16535:     }
+16535:     q >>= 1;
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: sqrt_unsigned_int(Type& to, const Type from, Rounding_Dir dir) {
+16535:   Type rem;
+16535:   isqrt_rem(to, rem, from);
+16535:   if (round_not_requested(dir)) {
+16535:     return V_GE;
+16535:   }
+16535:   if (rem == 0) {
+16535:     return V_EQ;
+16535:   }
+16535:   return round_gt_int<To_Policy>(to, dir);
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: sqrt_signed_int(Type& to, const Type from, Rounding_Dir dir) {
+16535:   if (((To_Policy::check_sqrt_neg) ? (from < 0) : (
+16535: # 1566 "../../src/checked_int_inlines.hh" 3 4
+16535:      (static_cast<void> (0))
+16535: # 1566 "../../src/checked_int_inlines.hh"
+16535:      , false))) {
+16535:     return assign_nan<To_Policy>(to, V_SQRT_NEG);
+16535:   }
+16535:   return sqrt_unsigned_int<To_Policy, From_Policy>(to, from, dir);
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: add_mul_int(Type& to, const Type x, const Type y, Rounding_Dir dir) {
+16535:   Type z;
+16535:   Result r = mul<To_Policy, From1_Policy, From2_Policy>(z, x, y, dir);
+16535:   switch (result_overflow(r)) {
+16535:   case 0:
+16535:     return add<To_Policy, To_Policy, To_Policy>(to, to, z, dir);
+16535:   case -1:
+16535:     if (to <= 0) {
+16535:       return set_neg_overflow_int<To_Policy>(to, dir);
+16535:     }
+16535:     return assign_nan<To_Policy>(to, V_UNKNOWN_NEG_OVERFLOW);
+16535:   case 1:
+16535:     if (to >= 0) {
+16535:       return set_pos_overflow_int<To_Policy>(to, dir);
+16535:     }
+16535:     return assign_nan<To_Policy>(to, V_UNKNOWN_POS_OVERFLOW);
+16535:   default:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return V_NAN;
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: sub_mul_int(Type& to, const Type x, const Type y, Rounding_Dir dir) {
+16535:   Type z;
+16535:   Result r = mul<To_Policy, From1_Policy, From2_Policy>(z, x, y, dir);
+16535:   switch (result_overflow(r)) {
+16535:   case 0:
+16535:     return sub<To_Policy, To_Policy, To_Policy>(to, to, z, dir);
+16535:   case -1:
+16535:     if (to >= 0) {
+16535:       return set_pos_overflow_int<To_Policy>(to, dir);
+16535:     }
+16535:     return assign_nan<To_Policy>(to, V_UNKNOWN_NEG_OVERFLOW);
+16535:   case 1:
+16535:     if (to <= 0) {
+16535:       return set_neg_overflow_int<To_Policy>(to, dir);
+16535:     }
+16535:     return assign_nan<To_Policy>(to, V_UNKNOWN_POS_OVERFLOW);
+16535:   default:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return V_NAN;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Policy, typename Type>
+16535: inline Result
+16535: output_char(std::ostream& os, Type& from,
+16535:             const Numeric_Format&, Rounding_Dir) {
+16535:   os << int(from);
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy, typename Type>
+16535: inline Result
+16535: output_int(std::ostream& os, Type& from, const Numeric_Format&, Rounding_Dir) {
+16535:   os << from;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_signed_int_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, Rounding_Dir a1) { return neg_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, Rounding_Dir a1) { return neg_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, Rounding_Dir a1) { return neg_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, Rounding_Dir a1) { return neg_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, Rounding_Dir a1) { return neg_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return neg_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return neg_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return neg_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return neg_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return neg_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return neg_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, char, char, char> { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return add_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, signed char, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return add_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, signed short, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return add_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, signed int, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return add_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, signed long, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return add_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, signed long long, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return add_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, unsigned char, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return add_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, unsigned short, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return add_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, unsigned int, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return add_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, unsigned long, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return add_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, unsigned long long, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return add_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, char, char, char> { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return sub_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, signed char, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return sub_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, signed short, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return sub_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, signed int, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return sub_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, signed long, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return sub_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, signed long long, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return sub_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, unsigned char, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return sub_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, unsigned short, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return sub_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, unsigned int, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return sub_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, unsigned long, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return sub_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, unsigned long long, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return sub_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, char, char, char> { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return mul_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, signed char, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return mul_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, signed short, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return mul_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, signed int, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return mul_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, signed long, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return mul_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, signed long long, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return mul_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, unsigned char, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return mul_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, unsigned short, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return mul_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, unsigned int, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return mul_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, unsigned long, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return mul_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, unsigned long long, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return mul_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, char, char, char> { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return div_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, signed char, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return div_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, signed short, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return div_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, signed int, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return div_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, signed long, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return div_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, signed long long, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return div_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, unsigned char, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return div_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, unsigned short, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return div_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, unsigned int, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return div_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, unsigned long, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return div_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, unsigned long long, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return div_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, char, char, char> { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return idiv_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, signed char, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return idiv_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, signed short, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return idiv_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, signed int, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return idiv_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, signed long, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return idiv_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, signed long long, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return idiv_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, unsigned char, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return idiv_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, unsigned short, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return idiv_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, unsigned int, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return idiv_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, unsigned long, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return idiv_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, unsigned long long, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return idiv_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, char, char, char> { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return rem_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, signed char, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return rem_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, signed short, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return rem_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, signed int, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return rem_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, signed long, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return rem_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, signed long long, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return rem_signed_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, unsigned char, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return rem_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, unsigned short, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return rem_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, unsigned int, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return rem_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, unsigned long, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return rem_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, unsigned long long, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return rem_unsigned_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_signed_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_unsigned_int<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, Rounding_Dir a1) { return sqrt_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, Rounding_Dir a1) { return sqrt_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, Rounding_Dir a1) { return sqrt_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, Rounding_Dir a1) { return sqrt_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, Rounding_Dir a1) { return sqrt_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return sqrt_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return sqrt_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return sqrt_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return sqrt_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return sqrt_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return sqrt_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, char, char> { static inline Result function( char& arg1, const char &arg2, Rounding_Dir a1) { return abs_generic<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, Rounding_Dir a1) { return abs_generic<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, Rounding_Dir a1) { return abs_generic<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, Rounding_Dir a1) { return abs_generic<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, Rounding_Dir a1) { return abs_generic<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, Rounding_Dir a1) { return abs_generic<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_unsigned_int_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, char, char, char> { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, signed char, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, signed short, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, signed int, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, signed long, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, signed long long, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, unsigned char, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, unsigned short, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, unsigned int, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, unsigned long, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, unsigned long long, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, char, char, char, char, char> { static inline Result function( char& arg1, char &arg2, char &arg3, const char &arg4, const char &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, signed char, signed char, signed char, signed char, signed char> { static inline Result function( signed char& arg1, signed char &arg2, signed char &arg3, const signed char &arg4, const signed char &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, signed short, signed short, signed short, signed short, signed short> { static inline Result function( signed short& arg1, signed short &arg2, signed short &arg3, const signed short &arg4, const signed short &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, signed int, signed int, signed int, signed int, signed int> { static inline Result function( signed int& arg1, signed int &arg2, signed int &arg3, const signed int &arg4, const signed int &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, signed long, signed long, signed long, signed long, signed long> { static inline Result function( signed long& arg1, signed long &arg2, signed long &arg3, const signed long &arg4, const signed long &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, signed long long, signed long long, signed long long, signed long long, signed long long> { static inline Result function( signed long long& arg1, signed long long &arg2, signed long long &arg3, const signed long long &arg4, const signed long long &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, unsigned char &arg2, unsigned char &arg3, const unsigned char &arg4, const unsigned char &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, unsigned short, unsigned short, unsigned short, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, unsigned short &arg2, unsigned short &arg3, const unsigned short &arg4, const unsigned short &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, unsigned int &arg2, unsigned int &arg3, const unsigned int &arg4, const unsigned int &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, unsigned long &arg2, unsigned long &arg3, const unsigned long &arg4, const unsigned long &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, unsigned long long, unsigned long long, unsigned long long, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, unsigned long long &arg2, unsigned long long &arg3, const unsigned long long &arg4, const unsigned long long &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, char, char, char> { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, signed char, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, signed short, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, signed int, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, signed long, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, signed long long, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, unsigned char, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, unsigned short, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, unsigned int, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, unsigned long, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, unsigned long long, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename Policy> struct sgn_function_struct<Policy, char> { static inline Result_Relation function(const char& arg) { return sgn_generic<Policy>(arg); } };
+16535: template <typename Policy> struct sgn_function_struct<Policy, signed char> { static inline Result_Relation function(const signed char& arg) { return sgn_generic<Policy>(arg); } };
+16535: template <typename Policy> struct sgn_function_struct<Policy, signed short> { static inline Result_Relation function(const signed short& arg) { return sgn_generic<Policy>(arg); } };
+16535: template <typename Policy> struct sgn_function_struct<Policy, signed int> { static inline Result_Relation function(const signed int& arg) { return sgn_generic<Policy>(arg); } };
+16535: template <typename Policy> struct sgn_function_struct<Policy, signed long> { static inline Result_Relation function(const signed long& arg) { return sgn_generic<Policy>(arg); } };
+16535: template <typename Policy> struct sgn_function_struct<Policy, signed long long> { static inline Result_Relation function(const signed long long& arg) { return sgn_generic<Policy>(arg); } };
+16535: template <typename Policy> struct sgn_function_struct<Policy, unsigned char> { static inline Result_Relation function(const unsigned char& arg) { return sgn_generic<Policy>(arg); } };
+16535: template <typename Policy> struct sgn_function_struct<Policy, unsigned short> { static inline Result_Relation function(const unsigned short& arg) { return sgn_generic<Policy>(arg); } };
+16535: template <typename Policy> struct sgn_function_struct<Policy, unsigned int> { static inline Result_Relation function(const unsigned int& arg) { return sgn_generic<Policy>(arg); } };
+16535: template <typename Policy> struct sgn_function_struct<Policy, unsigned long> { static inline Result_Relation function(const unsigned long& arg) { return sgn_generic<Policy>(arg); } };
+16535: template <typename Policy> struct sgn_function_struct<Policy, unsigned long long> { static inline Result_Relation function(const unsigned long long& arg) { return sgn_generic<Policy>(arg); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, char, char> { static inline Result_Relation function(const char& arg1, const char &arg2) { return cmp_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, signed char, signed char> { static inline Result_Relation function(const signed char& arg1, const signed char &arg2) { return cmp_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, signed short, signed short> { static inline Result_Relation function(const signed short& arg1, const signed short &arg2) { return cmp_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, signed int, signed int> { static inline Result_Relation function(const signed int& arg1, const signed int &arg2) { return cmp_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, signed long, signed long> { static inline Result_Relation function(const signed long& arg1, const signed long &arg2) { return cmp_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, signed long long, signed long long> { static inline Result_Relation function(const signed long long& arg1, const signed long long &arg2) { return cmp_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, unsigned char, unsigned char> { static inline Result_Relation function(const unsigned char& arg1, const unsigned char &arg2) { return cmp_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, unsigned short, unsigned short> { static inline Result_Relation function(const unsigned short& arg1, const unsigned short &arg2) { return cmp_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, unsigned int, unsigned int> { static inline Result_Relation function(const unsigned int& arg1, const unsigned int &arg2) { return cmp_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, unsigned long, unsigned long> { static inline Result_Relation function(const unsigned long& arg1, const unsigned long &arg2) { return cmp_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, unsigned long long, unsigned long long> { static inline Result_Relation function(const unsigned long long& arg1, const unsigned long long &arg2) { return cmp_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, char, char, char> { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return add_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, signed char, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return add_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, signed short, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return add_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, signed int, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return add_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, signed long, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return add_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, signed long long, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return add_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, unsigned char, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return add_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, unsigned short, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return add_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, unsigned int, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return add_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, unsigned long, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return add_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, unsigned long long, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return add_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, char, char, char> { static inline Result function( char& arg1, const char &arg2, const char &arg3, Rounding_Dir a1) { return sub_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, signed char, signed char, signed char> { static inline Result function( signed char& arg1, const signed char &arg2, const signed char &arg3, Rounding_Dir a1) { return sub_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, signed short, signed short, signed short> { static inline Result function( signed short& arg1, const signed short &arg2, const signed short &arg3, Rounding_Dir a1) { return sub_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, signed int, signed int, signed int> { static inline Result function( signed int& arg1, const signed int &arg2, const signed int &arg3, Rounding_Dir a1) { return sub_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, signed long, signed long, signed long> { static inline Result function( signed long& arg1, const signed long &arg2, const signed long &arg3, Rounding_Dir a1) { return sub_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, signed long long, signed long long, signed long long> { static inline Result function( signed long long& arg1, const signed long long &arg2, const signed long long &arg3, Rounding_Dir a1) { return sub_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, unsigned char, unsigned char, unsigned char> { static inline Result function( unsigned char& arg1, const unsigned char &arg2, const unsigned char &arg3, Rounding_Dir a1) { return sub_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, unsigned short, unsigned short, unsigned short> { static inline Result function( unsigned short& arg1, const unsigned short &arg2, const unsigned short &arg3, Rounding_Dir a1) { return sub_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, unsigned int, unsigned int, unsigned int> { static inline Result function( unsigned int& arg1, const unsigned int &arg2, const unsigned int &arg3, Rounding_Dir a1) { return sub_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, unsigned long, unsigned long, unsigned long> { static inline Result function( unsigned long& arg1, const unsigned long &arg2, const unsigned long &arg3, Rounding_Dir a1) { return sub_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, unsigned long long, unsigned long long, unsigned long long> { static inline Result function( unsigned long long& arg1, const unsigned long long &arg2, const unsigned long long &arg3, Rounding_Dir a1) { return sub_mul_int<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename Policy> struct input_function_struct<Policy, char> { static inline Result function( char& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct input_function_struct<Policy, signed char> { static inline Result function( signed char& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct input_function_struct<Policy, signed short> { static inline Result function( signed short& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct input_function_struct<Policy, signed int> { static inline Result function( signed int& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct input_function_struct<Policy, signed long> { static inline Result function( signed long& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct input_function_struct<Policy, signed long long> { static inline Result function( signed long long& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct input_function_struct<Policy, unsigned char> { static inline Result function( unsigned char& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct input_function_struct<Policy, unsigned short> { static inline Result function( unsigned short& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct input_function_struct<Policy, unsigned int> { static inline Result function( unsigned int& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct input_function_struct<Policy, unsigned long> { static inline Result function( unsigned long& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct input_function_struct<Policy, unsigned long long> { static inline Result function( unsigned long long& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
+16535: 
+16535: template <typename Policy> struct output_function_struct<Policy, char> { static inline Result function(std::ostream& b1, const char& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_char<Policy>(b1, arg, a1, a2); } };
+16535: template <typename Policy> struct output_function_struct<Policy, signed char> { static inline Result function(std::ostream& b1, const signed char& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_char<Policy>(b1, arg, a1, a2); } };
+16535: template <typename Policy> struct output_function_struct<Policy, signed short> { static inline Result function(std::ostream& b1, const signed short& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int<Policy>(b1, arg, a1, a2); } };
+16535: template <typename Policy> struct output_function_struct<Policy, signed int> { static inline Result function(std::ostream& b1, const signed int& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int<Policy>(b1, arg, a1, a2); } };
+16535: template <typename Policy> struct output_function_struct<Policy, signed long> { static inline Result function(std::ostream& b1, const signed long& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int<Policy>(b1, arg, a1, a2); } };
+16535: template <typename Policy> struct output_function_struct<Policy, signed long long> { static inline Result function(std::ostream& b1, const signed long long& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int<Policy>(b1, arg, a1, a2); } };
+16535: template <typename Policy> struct output_function_struct<Policy, unsigned char> { static inline Result function(std::ostream& b1, const unsigned char& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_char<Policy>(b1, arg, a1, a2); } };
+16535: template <typename Policy> struct output_function_struct<Policy, unsigned short> { static inline Result function(std::ostream& b1, const unsigned short& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int<Policy>(b1, arg, a1, a2); } };
+16535: template <typename Policy> struct output_function_struct<Policy, unsigned int> { static inline Result function(std::ostream& b1, const unsigned int& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int<Policy>(b1, arg, a1, a2); } };
+16535: template <typename Policy> struct output_function_struct<Policy, unsigned long> { static inline Result function(std::ostream& b1, const unsigned long& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int<Policy>(b1, arg, a1, a2); } };
+16535: template <typename Policy> struct output_function_struct<Policy, unsigned long long> { static inline Result function(std::ostream& b1, const unsigned long long& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_int<Policy>(b1, arg, a1, a2); } };
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 702 "../../src/checked_defs.hh" 2
+16535: # 1 "../../src/checked_float_inlines.hh" 1
+16535: # 28 "../../src/checked_float_inlines.hh"
+16535: # 1 "/usr/include/c++/8/cmath" 1 3
+16535: # 39 "/usr/include/c++/8/cmath" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/cmath" 3
+16535: # 29 "../../src/checked_float_inlines.hh" 2
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Checked {
+16535: 
+16535: inline float
+16535: multiply_add(float x, float y, float z) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   return x*y + z;
+16535: 
+16535: }
+16535: 
+16535: inline double
+16535: multiply_add(double x, double y, double z) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   return x*y + z;
+16535: 
+16535: }
+16535: 
+16535: inline long double
+16535: multiply_add(long double x, long double y, long double z) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   return x*y + z;
+16535: 
+16535: }
+16535: 
+16535: 
+16535: inline float
+16535: round_to_integer(float x) {
+16535:   return rintf(x);
+16535: }
+16535: 
+16535: 
+16535: inline double
+16535: round_to_integer(double x) {
+16535:   return rint(x);
+16535: }
+16535: 
+16535: 
+16535: inline long double
+16535: round_to_integer(long double x) {
+16535:   return rintl(x);
+16535: }
+16535: # 99 "../../src/checked_float_inlines.hh"
+16535: inline bool
+16535: fpu_direct_rounding(Rounding_Dir dir) {
+16535:   return round_direct(dir) || round_not_requested(dir);
+16535: }
+16535: 
+16535: inline bool
+16535: fpu_inverse_rounding(Rounding_Dir dir) {
+16535:   return round_inverse(dir);
+16535: }
+16535: # 133 "../../src/checked_float_inlines.hh"
+16535: inline void
+16535: limit_precision(const float& v) {
+16535:   PPL_CC_FLUSH(v);
+16535: }
+16535: 
+16535: inline void
+16535: limit_precision(const double& v) {
+16535:   PPL_CC_FLUSH(v);
+16535: }
+16535: 
+16535: inline void
+16535: limit_precision(const long double&) {
+16535: }
+16535: 
+16535: template <typename Policy, typename T>
+16535: inline Result
+16535: classify_float(const T v, bool nan, bool inf, bool sign) {
+16535:   Float<T> f(v);
+16535:   if ((nan || sign) && ((Policy::has_nan) ? (f.u.binary.is_nan()) : (
+16535: # 151 "../../src/checked_float_inlines.hh" 3 4
+16535:                       (static_cast<void> (0))
+16535: # 151 "../../src/checked_float_inlines.hh"
+16535:                       , false))) {
+16535:     return V_NAN;
+16535:   }
+16535:   if (inf) {
+16535:     if (Policy::has_infinity) {
+16535:       int sign_inf = f.u.binary.inf_sign();
+16535:       if (sign_inf < 0) {
+16535:         return V_EQ_MINUS_INFINITY;
+16535:       }
+16535:       if (sign_inf > 0) {
+16535:         return V_EQ_PLUS_INFINITY;
+16535:       }
+16535:     }
+16535:     else {
+16535:       ((void) 0);
+16535:     }
+16535:   }
+16535:   if (sign) {
+16535:     if (v < 0) {
+16535:       return V_LT;
+16535:     }
+16535:     if (v > 0) {
+16535:       return V_GT;
+16535:     }
+16535:     return V_EQ;
+16535:   }
+16535:   return V_LGE;
+16535: }
+16535: 
+16535: template <typename Policy, typename T>
+16535: inline bool
+16535: is_nan_float(const T v) {
+16535:   Float<T> f(v);
+16535:   return ((Policy::has_nan) ? (f.u.binary.is_nan()) : (
+16535: # 184 "../../src/checked_float_inlines.hh" 3 4
+16535:         (static_cast<void> (0))
+16535: # 184 "../../src/checked_float_inlines.hh"
+16535:         , false));
+16535: }
+16535: 
+16535: template <typename Policy, typename T>
+16535: inline bool
+16535: is_inf_float(const T v) {
+16535:   Float<T> f(v);
+16535:   return ((Policy::has_infinity) ? ((f.u.binary.inf_sign() != 0)) : (
+16535: # 191 "../../src/checked_float_inlines.hh" 3 4
+16535:         (static_cast<void> (0))
+16535: # 191 "../../src/checked_float_inlines.hh"
+16535:         , false));
+16535: }
+16535: template <typename Policy, typename T>
+16535: inline bool
+16535: is_minf_float(const T v) {
+16535:   Float<T> f(v);
+16535:   return ((Policy::has_infinity) ? ((f.u.binary.inf_sign() < 0)) : (
+16535: # 197 "../../src/checked_float_inlines.hh" 3 4
+16535:         (static_cast<void> (0))
+16535: # 197 "../../src/checked_float_inlines.hh"
+16535:         , false));
+16535: }
+16535: 
+16535: template <typename Policy, typename T>
+16535: inline bool
+16535: is_pinf_float(const T v) {
+16535:   Float<T> f(v);
+16535:   return ((Policy::has_infinity) ? ((f.u.binary.inf_sign() > 0)) : (
+16535: # 204 "../../src/checked_float_inlines.hh" 3 4
+16535:         (static_cast<void> (0))
+16535: # 204 "../../src/checked_float_inlines.hh"
+16535:         , false));
+16535: }
+16535: 
+16535: 
+16535: template <typename Policy, typename T>
+16535: inline bool
+16535: is_int_float(const T v) {
+16535:   return round_to_integer(v) == v;
+16535: }
+16535: 
+16535: template <typename Policy, typename T>
+16535: inline Result
+16535: assign_special_float(T& v, Result_Class c, Rounding_Dir) {
+16535:   ((void) 0);
+16535:   switch (c) {
+16535:   case VC_MINUS_INFINITY:
+16535:     v = -
+16535: # 220 "../../src/checked_float_inlines.hh" 3 4
+16535:         (__builtin_huge_val ())
+16535: # 220 "../../src/checked_float_inlines.hh"
+16535:                 ;
+16535:     return V_EQ_MINUS_INFINITY;
+16535:   case VC_PLUS_INFINITY:
+16535:     v = 
+16535: # 223 "../../src/checked_float_inlines.hh" 3 4
+16535:        (__builtin_huge_val ())
+16535: # 223 "../../src/checked_float_inlines.hh"
+16535:                ;
+16535:     return V_EQ_PLUS_INFINITY;
+16535:   case VC_NAN:
+16535:     v = 
+16535: # 226 "../../src/checked_float_inlines.hh" 3 4
+16535:        (__builtin_nanf (""))
+16535: # 226 "../../src/checked_float_inlines.hh"
+16535:               ;
+16535:     return V_NAN;
+16535:   default:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return V_NAN | V_UNREPRESENTABLE;
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: pred_float(T& v) {
+16535:   Float<T> f(v);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   if (f.u.binary.zero_sign() > 0) {
+16535:     f.u.binary.negate();
+16535:     f.u.binary.inc();
+16535:   }
+16535:   else if (f.u.binary.sign_bit()) {
+16535:     f.u.binary.inc();
+16535:   }
+16535:   else {
+16535:     f.u.binary.dec();
+16535:   }
+16535:   v = f.value();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: succ_float(T& v) {
+16535:   Float<T> f(v);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   if (f.u.binary.zero_sign() < 0) {
+16535:     f.u.binary.negate();
+16535:     f.u.binary.inc();
+16535:   }
+16535:   else if (!f.u.binary.sign_bit()) {
+16535:     f.u.binary.inc();
+16535:   }
+16535:   else {
+16535:     f.u.binary.dec();
+16535:   }
+16535:   v = f.value();
+16535: }
+16535: 
+16535: template <typename Policy, typename To>
+16535: inline Result
+16535: round_lt_float(To& to, Rounding_Dir dir) {
+16535:   if (round_down(dir)) {
+16535:     pred_float(to);
+16535:     return V_GT;
+16535:   }
+16535:   return V_LT;
+16535: }
+16535: 
+16535: template <typename Policy, typename To>
+16535: inline Result
+16535: round_gt_float(To& to, Rounding_Dir dir) {
+16535:   if (round_up(dir)) {
+16535:     succ_float(to);
+16535:     return V_LT;
+16535:   }
+16535:   return V_GT;
+16535: }
+16535: 
+16535: 
+16535: template <typename Policy>
+16535: inline void
+16535: prepare_inexact(Rounding_Dir dir) {
+16535:   if (Policy::fpu_check_inexact
+16535:       && !round_not_needed(dir) && round_strict_relation(dir)) {
+16535:     fpu_reset_inexact();
+16535:   }
+16535: }
+16535: 
+16535: template <typename Policy>
+16535: inline Result
+16535: result_relation(Rounding_Dir dir) {
+16535:   if (Policy::fpu_check_inexact
+16535:       && !round_not_needed(dir) && round_strict_relation(dir)) {
+16535:     switch (fpu_check_inexact()) {
+16535:     case 0:
+16535:       return V_EQ;
+16535:     case -1:
+16535:       goto unknown;
+16535:     case 1:
+16535:       break;
+16535:     }
+16535:     switch (round_dir(dir)) {
+16535:     case ROUND_DOWN:
+16535:       return V_GT;
+16535:     case ROUND_UP:
+16535:       return V_LT;
+16535:     default:
+16535:       return V_NE;
+16535:     }
+16535:   }
+16535:   else {
+16535:   unknown:
+16535:     switch (round_dir(dir)) {
+16535:     case ROUND_DOWN:
+16535:       return V_GE;
+16535:     case ROUND_UP:
+16535:       return V_LE;
+16535:     default:
+16535:       return V_LGE;
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename To, typename From>
+16535: inline Result
+16535: assign_float_float_exact(To& to, const From from, Rounding_Dir) {
+16535:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(from)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   to = from;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename To, typename From>
+16535: inline Result
+16535: assign_float_float_inexact(To& to, const From from, Rounding_Dir dir) {
+16535:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(from)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   prepare_inexact<To_Policy>(dir);
+16535:   if (fpu_direct_rounding(dir)) {
+16535:     to = from;
+16535:   }
+16535:   else if (fpu_inverse_rounding(dir)) {
+16535:     From tmp = -from;
+16535:     to = tmp;
+16535:     limit_precision(to);
+16535:     to = -to;
+16535:   }
+16535:   else {
+16535:     fpu_rounding_control_word_type old
+16535:       = fpu_save_rounding_direction(round_fpu_dir(dir));
+16535:     limit_precision(from);
+16535:     to = from;
+16535:     limit_precision(to);
+16535:     fpu_restore_rounding_direction(old);
+16535:   }
+16535:   return result_relation<To_Policy>(dir);
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename To, typename From>
+16535: inline Result
+16535: assign_float_float(To& to, const From from, Rounding_Dir dir) {
+16535:   if (sizeof(From) > sizeof(To)) {
+16535:     return assign_float_float_inexact<To_Policy, From_Policy>(to, from, dir);
+16535:   }
+16535:   else {
+16535:     return assign_float_float_exact<To_Policy, From_Policy>(to, from, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: floor_float(Type& to, const Type from, Rounding_Dir) {
+16535:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(from)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   if (fpu_direct_rounding(ROUND_DOWN)) {
+16535:     to = round_to_integer(from);
+16535:   }
+16535:   else if (fpu_inverse_rounding(ROUND_DOWN)) {
+16535:     to = round_to_integer(-from);
+16535:     limit_precision(to);
+16535:     to = -to;
+16535:   }
+16535:   else {
+16535:     fpu_rounding_control_word_type old
+16535:       = fpu_save_rounding_direction(round_fpu_dir(ROUND_DOWN));
+16535:     limit_precision(from);
+16535:     to = round_to_integer(from);
+16535:     limit_precision(to);
+16535:     fpu_restore_rounding_direction(old);
+16535:   }
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: ceil_float(Type& to, const Type from, Rounding_Dir) {
+16535:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(from)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   if (fpu_direct_rounding(ROUND_UP)) {
+16535:     to = round_to_integer(from);
+16535:   }
+16535:   else if (fpu_inverse_rounding(ROUND_UP)) {
+16535:     to = round_to_integer(-from);
+16535:     limit_precision(to);
+16535:     to = -to;
+16535:   }
+16535:   else {
+16535:     fpu_rounding_control_word_type old
+16535:       = fpu_save_rounding_direction(round_fpu_dir(ROUND_UP));
+16535:     limit_precision(from);
+16535:     to = round_to_integer(from);
+16535:     limit_precision(to);
+16535:     fpu_restore_rounding_direction(old);
+16535:   }
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: trunc_float(Type& to, const Type from, Rounding_Dir dir) {
+16535:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(from)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   if (from >= 0) {
+16535:     return floor<To_Policy, From_Policy>(to, from, dir);
+16535:   }
+16535:   else {
+16535:     return ceil<To_Policy, From_Policy>(to, from, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: neg_float(Type& to, const Type from, Rounding_Dir) {
+16535:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(from)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   to = -from;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: add_float(Type& to, const Type x, const Type y, Rounding_Dir dir) {
+16535:   if (To_Policy::check_inf_add_inf
+16535:       && is_inf_float<From1_Policy>(x) && x == -y) {
+16535:     return assign_nan<To_Policy>(to, V_INF_ADD_INF);
+16535:   }
+16535:   prepare_inexact<To_Policy>(dir);
+16535:   if (fpu_direct_rounding(dir)) {
+16535:     to = x + y;
+16535:   }
+16535:   else if (fpu_inverse_rounding(dir)) {
+16535:     to = -x - y;
+16535:     limit_precision(to);
+16535:     to = -to;
+16535:   }
+16535:   else {
+16535:     fpu_rounding_control_word_type old
+16535:       = fpu_save_rounding_direction(round_fpu_dir(dir));
+16535:     limit_precision(x);
+16535:     limit_precision(y);
+16535:     to = x + y;
+16535:     limit_precision(to);
+16535:     fpu_restore_rounding_direction(old);
+16535:   }
+16535:   if (To_Policy::fpu_check_nan_result && is_nan<To_Policy>(to)) {
+16535:     return V_NAN;
+16535:   }
+16535:   return result_relation<To_Policy>(dir);
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: sub_float(Type& to, const Type x, const Type y, Rounding_Dir dir) {
+16535:   if (To_Policy::check_inf_sub_inf
+16535:       && is_inf_float<From1_Policy>(x) && x == y) {
+16535:     return assign_nan<To_Policy>(to, V_INF_SUB_INF);
+16535:   }
+16535:   prepare_inexact<To_Policy>(dir);
+16535:   if (fpu_direct_rounding(dir)) {
+16535:     to = x - y;
+16535:   }
+16535:   else if (fpu_inverse_rounding(dir)) {
+16535:     to = y - x;
+16535:     limit_precision(to);
+16535:     to = -to;
+16535:   }
+16535:   else {
+16535:     fpu_rounding_control_word_type old
+16535:       = fpu_save_rounding_direction(round_fpu_dir(dir));
+16535:     limit_precision(x);
+16535:     limit_precision(y);
+16535:     to = x - y;
+16535:     limit_precision(to);
+16535:     fpu_restore_rounding_direction(old);
+16535:   }
+16535:   if (To_Policy::fpu_check_nan_result && is_nan<To_Policy>(to)) {
+16535:     return V_NAN;
+16535:   }
+16535:   return result_relation<To_Policy>(dir);
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: mul_float(Type& to, const Type x, const Type y, Rounding_Dir dir) {
+16535:   if (To_Policy::check_inf_mul_zero
+16535:       && ((x == 0 && is_inf_float<From2_Policy>(y))
+16535:           ||
+16535:           (y == 0 && is_inf_float<From1_Policy>(x)))) {
+16535:     return assign_nan<To_Policy>(to, V_INF_MUL_ZERO);
+16535:   }
+16535:   prepare_inexact<To_Policy>(dir);
+16535:   if (fpu_direct_rounding(dir)) {
+16535:     to = x * y;
+16535:   }
+16535:   else if (fpu_inverse_rounding(dir)) {
+16535:     to = x * -y;
+16535:     limit_precision(to);
+16535:     to = -to;
+16535:   }
+16535:   else {
+16535:     fpu_rounding_control_word_type old
+16535:       = fpu_save_rounding_direction(round_fpu_dir(dir));
+16535:     limit_precision(x);
+16535:     limit_precision(y);
+16535:     to = x * y;
+16535:     limit_precision(to);
+16535:     fpu_restore_rounding_direction(old);
+16535:   }
+16535:   if (To_Policy::fpu_check_nan_result && is_nan<To_Policy>(to)) {
+16535:     return V_NAN;
+16535:   }
+16535:   return result_relation<To_Policy>(dir);
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: div_float(Type& to, const Type x, const Type y, Rounding_Dir dir) {
+16535:   if (To_Policy::check_inf_div_inf
+16535:       && is_inf_float<From1_Policy>(x) && is_inf_float<From2_Policy>(y)) {
+16535:     return assign_nan<To_Policy>(to, V_INF_DIV_INF);
+16535:   }
+16535:   if (To_Policy::check_div_zero && y == 0) {
+16535:     return assign_nan<To_Policy>(to, V_DIV_ZERO);
+16535:   }
+16535:   prepare_inexact<To_Policy>(dir);
+16535:   if (fpu_direct_rounding(dir)) {
+16535:     to = x / y;
+16535:   }
+16535:   else if (fpu_inverse_rounding(dir)) {
+16535:     to = x / -y;
+16535:     limit_precision(to);
+16535:     to = -to;
+16535:   }
+16535:   else {
+16535:     fpu_rounding_control_word_type old
+16535:       = fpu_save_rounding_direction(round_fpu_dir(dir));
+16535:     limit_precision(x);
+16535:     limit_precision(y);
+16535:     to = x / y;
+16535:     limit_precision(to);
+16535:     fpu_restore_rounding_direction(old);
+16535:   }
+16535:   if (To_Policy::fpu_check_nan_result && is_nan<To_Policy>(to)) {
+16535:     return V_NAN;
+16535:   }
+16535:   return result_relation<To_Policy>(dir);
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: idiv_float(Type& to, const Type x, const Type y, Rounding_Dir dir) {
+16535:   Type temp;
+16535: 
+16535:   dir = round_dir(dir);
+16535:   Result r = div<To_Policy, From1_Policy, From2_Policy>(temp, x, y, dir);
+16535:   if (result_class(r) != VC_NORMAL) {
+16535:     to = temp;
+16535:     return r;
+16535:   }
+16535:   Result r1 = trunc<To_Policy, To_Policy>(to, temp, ROUND_NOT_NEEDED);
+16535:   ((void) 0);
+16535:   if (r == V_EQ || to != temp) {
+16535:     return r1;
+16535:   }
+16535: 
+16535:   return (dir == ROUND_UP) ? V_LE : V_GE;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: rem_float(Type& to, const Type x, const Type y, Rounding_Dir) {
+16535:   if (To_Policy::check_inf_mod && is_inf_float<From1_Policy>(x)) {
+16535:     return assign_nan<To_Policy>(to, V_INF_MOD);
+16535:   }
+16535:   if (To_Policy::check_div_zero && y == 0) {
+16535:     return assign_nan<To_Policy>(to, V_MOD_ZERO);
+16535:   }
+16535:   to = std::fmod(x, y);
+16535:   if (To_Policy::fpu_check_nan_result && is_nan<To_Policy>(to)) {
+16535:     return V_NAN;
+16535:   }
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: struct Float_2exp {
+16535:   enum const_bool_value_has_nan { has_nan = (false) };
+16535:   enum const_bool_value_has_infinity { has_infinity = (false) };
+16535: };
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: add_2exp_float(Type& to, const Type x, unsigned int exp, Rounding_Dir dir) {
+16535:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   ((void) 0);
+16535:   return
+16535:     add<To_Policy, From_Policy, Float_2exp>(to,
+16535:                                             x,
+16535:                                             Type(1ULL << exp),
+16535:                                             dir);
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: sub_2exp_float(Type& to, const Type x, unsigned int exp, Rounding_Dir dir) {
+16535:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   ((void) 0);
+16535:   return
+16535:     sub<To_Policy, From_Policy, Float_2exp>(to,
+16535:                                             x,
+16535:                                             Type(1ULL << exp),
+16535:                                             dir);
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: mul_2exp_float(Type& to, const Type x, unsigned int exp, Rounding_Dir dir) {
+16535:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   ((void) 0);
+16535:   return
+16535:     mul<To_Policy, From_Policy, Float_2exp>(to,
+16535:                                             x,
+16535:                                             Type(1ULL << exp),
+16535:                                             dir);
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: div_2exp_float(Type& to, const Type x, unsigned int exp, Rounding_Dir dir) {
+16535:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   ((void) 0);
+16535:   return
+16535:     div<To_Policy, From_Policy, Float_2exp>(to,
+16535:                                             x,
+16535:                                             Type(1ULL << exp),
+16535:                                             dir);
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: smod_2exp_float(Type& to, const Type x, unsigned int exp, Rounding_Dir dir) {
+16535:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   if (To_Policy::check_inf_mod && is_inf_float<From_Policy>(x)) {
+16535:     return assign_nan<To_Policy>(to, V_INF_MOD);
+16535:   }
+16535:   ((void) 0);
+16535:   Type m = 1ULL << exp;
+16535:   rem_float<To_Policy, From_Policy, Float_2exp>(to, x, m, ROUND_IGNORE);
+16535:   Type m2 = m / 2;
+16535:   if (to < -m2) {
+16535:     return add_float<To_Policy, From_Policy, Float_2exp>(to, to, m, dir);
+16535:   }
+16535:   else if (to >= m2) {
+16535:     return sub_float<To_Policy, From_Policy, Float_2exp>(to, to, m, dir);
+16535:   }
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: umod_2exp_float(Type& to, const Type x, unsigned int exp, Rounding_Dir dir) {
+16535:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   if (To_Policy::check_inf_mod && is_inf_float<From_Policy>(x)) {
+16535:     return assign_nan<To_Policy>(to, V_INF_MOD);
+16535:   }
+16535:   ((void) 0);
+16535:   Type m = 1ULL << exp;
+16535:   rem_float<To_Policy, From_Policy, Float_2exp>(to, x, m, ROUND_IGNORE);
+16535:   if (to < 0) {
+16535:     return add_float<To_Policy, From_Policy, Float_2exp>(to, to, m, dir);
+16535:   }
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: abs_float(Type& to, const Type from, Rounding_Dir) {
+16535:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(from)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   to = std::abs(from);
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename Type>
+16535: inline Result
+16535: sqrt_float(Type& to, const Type from, Rounding_Dir dir) {
+16535:   if (To_Policy::fpu_check_nan_result && is_nan<From_Policy>(from)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   if (To_Policy::check_sqrt_neg && from < 0) {
+16535:     return assign_nan<To_Policy>(to, V_SQRT_NEG);
+16535:   }
+16535:   prepare_inexact<To_Policy>(dir);
+16535:   if (fpu_direct_rounding(dir)) {
+16535:     to = std::sqrt(from);
+16535:   }
+16535:   else {
+16535:     fpu_rounding_control_word_type old
+16535:       = fpu_save_rounding_direction(round_fpu_dir(dir));
+16535:     limit_precision(from);
+16535:     to = std::sqrt(from);
+16535:     limit_precision(to);
+16535:     fpu_restore_rounding_direction(old);
+16535:   }
+16535:   return result_relation<To_Policy>(dir);
+16535: }
+16535: 
+16535: template <typename Policy, typename Type>
+16535: inline Result_Relation
+16535: sgn_float(const Type x) {
+16535:   if (x > 0) {
+16535:     return VR_GT;
+16535:   }
+16535:   if (x < 0) {
+16535:     return VR_LT;
+16535:   }
+16535:   if (x == 0) {
+16535:     return VR_EQ;
+16535:   }
+16535:   return VR_EMPTY;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Type>
+16535: inline Result_Relation
+16535: cmp_float(const Type x, const Type y) {
+16535:   if (x > y) {
+16535:     return VR_GT;
+16535:   }
+16535:   if (x < y) {
+16535:     return VR_LT;
+16535:   }
+16535:   if (x == y) {
+16535:     return VR_EQ;
+16535:   }
+16535:   return VR_EMPTY;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename To, typename From>
+16535: inline Result
+16535: assign_float_int_inexact(To& to, const From from, Rounding_Dir dir) {
+16535:   prepare_inexact<To_Policy>(dir);
+16535:   if (fpu_direct_rounding(dir)) {
+16535:     to = from;
+16535:   }
+16535:   else {
+16535:     fpu_rounding_control_word_type old
+16535:       = fpu_save_rounding_direction(round_fpu_dir(dir));
+16535:     to = from;
+16535:     limit_precision(to);
+16535:     fpu_restore_rounding_direction(old);
+16535:   }
+16535:   return result_relation<To_Policy>(dir);
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename To, typename From>
+16535: inline Result
+16535: assign_float_int(To& to, const From from, Rounding_Dir dir) {
+16535:   if (((sizeof(From)) * static_cast<std::size_t>(8)) > Float<To>::Binary::MANTISSA_BITS) {
+16535:     return assign_float_int_inexact<To_Policy, From_Policy>(to, from, dir);
+16535:   }
+16535:   else {
+16535:     return assign_exact<To_Policy, From_Policy>(to, from, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename Policy, typename T>
+16535: inline Result
+16535: set_neg_overflow_float(T& to, Rounding_Dir dir) {
+16535:   switch (round_dir(dir)) {
+16535:   case ROUND_UP:
+16535:     {
+16535:       Float<T> f;
+16535:       f.u.binary.set_max(true);
+16535:       to = f.value();
+16535:       return V_LT_INF;
+16535:     }
+16535:   case ROUND_DOWN:
+16535:   case ROUND_IGNORE:
+16535:     to = -
+16535: # 836 "../../src/checked_float_inlines.hh" 3 4
+16535:          (__builtin_huge_val ())
+16535: # 836 "../../src/checked_float_inlines.hh"
+16535:                  ;
+16535:     return V_GT_MINUS_INFINITY;
+16535:   default:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return V_GT_MINUS_INFINITY;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Policy, typename T>
+16535: inline Result
+16535: set_pos_overflow_float(T& to, Rounding_Dir dir) {
+16535:   switch (round_dir(dir)) {
+16535:   case ROUND_DOWN:
+16535:     {
+16535:       Float<T> f;
+16535:       f.u.binary.set_max(false);
+16535:       to = f.value();
+16535:       return V_GT_SUP;
+16535:     }
+16535:   case ROUND_UP:
+16535:   case ROUND_IGNORE:
+16535:     to = 
+16535: # 857 "../../src/checked_float_inlines.hh" 3 4
+16535:         (__builtin_huge_val ())
+16535: # 857 "../../src/checked_float_inlines.hh"
+16535:                 ;
+16535:     return V_LT_PLUS_INFINITY;
+16535:   default:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return V_LT_PLUS_INFINITY;
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename T>
+16535: inline Result
+16535: assign_float_mpz(T& to, const mpz_class& from, Rounding_Dir dir) {
+16535:   int sign = sgn(from);
+16535:   if (sign == 0) {
+16535:     to = 0;
+16535:     return V_EQ;
+16535:   }
+16535:   mpz_srcptr from_z = from.get_mpz_t();
+16535:   size_t exponent = 
+16535: # 874 "../../src/checked_float_inlines.hh" 3 4
+16535:                    __gmpz_sizeinbase
+16535: # 874 "../../src/checked_float_inlines.hh"
+16535:                                  (from_z, 2) - 1;
+16535:   if (exponent > size_t(Float<T>::Binary::EXPONENT_MAX)) {
+16535:     if (sign < 0) {
+16535:       return set_neg_overflow_float<To_Policy>(to, dir);
+16535:     }
+16535:     else {
+16535:       return set_pos_overflow_float<To_Policy>(to, dir);
+16535:     }
+16535:   }
+16535:   unsigned long zeroes = 
+16535: # 883 "../../src/checked_float_inlines.hh" 3 4
+16535:                         __gmpn_scan1
+16535: # 883 "../../src/checked_float_inlines.hh"
+16535:                                  (from_z->_mp_d, 0);
+16535:   size_t meaningful_bits = exponent - zeroes;
+16535:   mpz_t mantissa;
+16535:   
+16535: # 886 "../../src/checked_float_inlines.hh" 3 4
+16535:  __gmpz_init
+16535: # 886 "../../src/checked_float_inlines.hh"
+16535:          (mantissa);
+16535:   if (exponent > Float<T>::Binary::MANTISSA_BITS) {
+16535:     
+16535: # 888 "../../src/checked_float_inlines.hh" 3 4
+16535:    __gmpz_tdiv_q_2exp
+16535: # 888 "../../src/checked_float_inlines.hh"
+16535:                   (mantissa,
+16535:                     from_z,
+16535:                     exponent - Float<T>::Binary::MANTISSA_BITS);
+16535:   }
+16535:   else {
+16535:     
+16535: # 893 "../../src/checked_float_inlines.hh" 3 4
+16535:    __gmpz_mul_2exp
+16535: # 893 "../../src/checked_float_inlines.hh"
+16535:                (mantissa, from_z, Float<T>::Binary::MANTISSA_BITS - exponent);
+16535:   }
+16535:   Float<T> f;
+16535:   f.u.binary.build(sign < 0, mantissa, static_cast<long>(exponent));
+16535:   
+16535: # 897 "../../src/checked_float_inlines.hh" 3 4
+16535:  __gmpz_clear
+16535: # 897 "../../src/checked_float_inlines.hh"
+16535:           (mantissa);
+16535:   to = f.value();
+16535:   if (meaningful_bits > Float<T>::Binary::MANTISSA_BITS) {
+16535:     if (sign < 0) {
+16535:       return round_lt_float<To_Policy>(to, dir);
+16535:     }
+16535:     else {
+16535:       return round_gt_float<To_Policy>(to, dir);
+16535:     }
+16535:   }
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename T>
+16535: inline Result
+16535: assign_float_mpq(T& to, const mpq_class& from, Rounding_Dir dir) {
+16535:   const mpz_class& numer = from.get_num();
+16535:   const mpz_class& denom = from.get_den();
+16535:   if (denom == 1) {
+16535:     return assign_float_mpz<To_Policy, From_Policy>(to, numer, dir);
+16535:   }
+16535:   mpz_srcptr numer_z = numer.get_mpz_t();
+16535:   mpz_srcptr denom_z = denom.get_mpz_t();
+16535:   int sign = sgn(numer);
+16535:   long exponent = static_cast<long>(
+16535: # 921 "../../src/checked_float_inlines.hh" 3 4
+16535:                                    __gmpz_sizeinbase
+16535: # 921 "../../src/checked_float_inlines.hh"
+16535:                                                  (numer_z, 2))
+16535:     - static_cast<long>(
+16535: # 922 "../../src/checked_float_inlines.hh" 3 4
+16535:                        __gmpz_sizeinbase
+16535: # 922 "../../src/checked_float_inlines.hh"
+16535:                                      (denom_z, 2));
+16535:   if (exponent < Float<T>::Binary::EXPONENT_MIN_DENORM) {
+16535:     to = 0;
+16535:   inexact:
+16535:     if (sign < 0) {
+16535:       return round_lt_float<To_Policy>(to, dir);
+16535:     }
+16535:     else {
+16535:       return round_gt_float<To_Policy>(to, dir);
+16535:     }
+16535:   }
+16535:   if (exponent > Float<T>::Binary::EXPONENT_MAX + 1) {
+16535:   overflow:
+16535:     if (sign < 0) {
+16535:       return set_neg_overflow_float<To_Policy>(to, dir);
+16535:     }
+16535:     else {
+16535:       return set_pos_overflow_float<To_Policy>(to, dir);
+16535:     }
+16535:   }
+16535:   unsigned int needed_bits = Float<T>::Binary::MANTISSA_BITS + 1;
+16535:   if (exponent < Float<T>::Binary::EXPONENT_MIN) {
+16535:     long diff = Float<T>::Binary::EXPONENT_MIN - exponent;
+16535:     needed_bits -= static_cast<unsigned int>(diff);
+16535:   }
+16535:   mpz_t mantissa;
+16535:   
+16535: # 948 "../../src/checked_float_inlines.hh" 3 4
+16535:  __gmpz_init
+16535: # 948 "../../src/checked_float_inlines.hh"
+16535:          (mantissa);
+16535:   {
+16535:     long shift = static_cast<long>(needed_bits) - exponent;
+16535:     if (shift > 0) {
+16535:       
+16535: # 952 "../../src/checked_float_inlines.hh" 3 4
+16535:      __gmpz_mul_2exp
+16535: # 952 "../../src/checked_float_inlines.hh"
+16535:                  (mantissa, numer_z, static_cast<unsigned long>(shift));
+16535:       numer_z = mantissa;
+16535:     }
+16535:     else if (shift < 0) {
+16535:       shift = -shift;
+16535:       
+16535: # 957 "../../src/checked_float_inlines.hh" 3 4
+16535:      __gmpz_mul_2exp
+16535: # 957 "../../src/checked_float_inlines.hh"
+16535:                  (mantissa, denom_z, static_cast<unsigned long>(shift));
+16535:       denom_z = mantissa;
+16535:     }
+16535:   }
+16535:   mpz_t r;
+16535:   
+16535: # 962 "../../src/checked_float_inlines.hh" 3 4
+16535:  __gmpz_init
+16535: # 962 "../../src/checked_float_inlines.hh"
+16535:          (r);
+16535:   
+16535: # 963 "../../src/checked_float_inlines.hh" 3 4
+16535:  __gmpz_tdiv_qr
+16535: # 963 "../../src/checked_float_inlines.hh"
+16535:             (mantissa, r, numer_z, denom_z);
+16535:   size_t bits = 
+16535: # 964 "../../src/checked_float_inlines.hh" 3 4
+16535:                __gmpz_sizeinbase
+16535: # 964 "../../src/checked_float_inlines.hh"
+16535:                              (mantissa, 2);
+16535:   bool inexact = (
+16535: # 965 "../../src/checked_float_inlines.hh" 3 4
+16535:                  ((
+16535: # 965 "../../src/checked_float_inlines.hh"
+16535:                  r
+16535: # 965 "../../src/checked_float_inlines.hh" 3 4
+16535:                  )->_mp_size < 0 ? -1 : (
+16535: # 965 "../../src/checked_float_inlines.hh"
+16535:                  r
+16535: # 965 "../../src/checked_float_inlines.hh" 3 4
+16535:                  )->_mp_size > 0) 
+16535: # 965 "../../src/checked_float_inlines.hh"
+16535:                             != 0);
+16535:   
+16535: # 966 "../../src/checked_float_inlines.hh" 3 4
+16535:  __gmpz_clear
+16535: # 966 "../../src/checked_float_inlines.hh"
+16535:           (r);
+16535:   if (bits == needed_bits + 1) {
+16535:     inexact = (inexact || 
+16535: # 968 "../../src/checked_float_inlines.hh" 3 4
+16535:                          (((
+16535: # 968 "../../src/checked_float_inlines.hh"
+16535:                          mantissa
+16535: # 968 "../../src/checked_float_inlines.hh" 3 4
+16535:                          )->_mp_size != 0) & (static_cast<int> ((
+16535: # 968 "../../src/checked_float_inlines.hh"
+16535:                          mantissa
+16535: # 968 "../../src/checked_float_inlines.hh" 3 4
+16535:                          )->_mp_d[0])))
+16535: # 968 "../../src/checked_float_inlines.hh"
+16535:                                             );
+16535:     
+16535: # 969 "../../src/checked_float_inlines.hh" 3 4
+16535:    __gmpz_tdiv_q_2exp
+16535: # 969 "../../src/checked_float_inlines.hh"
+16535:                   (mantissa, mantissa, 1);
+16535:   }
+16535:   else {
+16535:     --exponent;
+16535:   }
+16535:   if (exponent > Float<T>::Binary::EXPONENT_MAX) {
+16535:     
+16535: # 975 "../../src/checked_float_inlines.hh" 3 4
+16535:    __gmpz_clear
+16535: # 975 "../../src/checked_float_inlines.hh"
+16535:             (mantissa);
+16535:     goto overflow;
+16535:   }
+16535:   else if (exponent < Float<T>::Binary::EXPONENT_MIN - 1) {
+16535: 
+16535:     exponent = Float<T>::Binary::EXPONENT_MIN - 1;
+16535:   }
+16535:   Float<T> f;
+16535:   f.u.binary.build(sign < 0, mantissa, exponent);
+16535:   
+16535: # 984 "../../src/checked_float_inlines.hh" 3 4
+16535:  __gmpz_clear
+16535: # 984 "../../src/checked_float_inlines.hh"
+16535:           (mantissa);
+16535:   to = f.value();
+16535:   if (inexact) {
+16535:     goto inexact;
+16535:   }
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename Type>
+16535: inline Result
+16535: add_mul_float(Type& to, const Type x, const Type y, Rounding_Dir dir) {
+16535:   if (To_Policy::check_inf_mul_zero
+16535:       && ((x == 0 && is_inf_float<From2_Policy>(y))
+16535:           ||
+16535:           (y == 0 && is_inf_float<From1_Policy>(x)))) {
+16535:     return assign_nan<To_Policy>(to, V_INF_MUL_ZERO);
+16535:   }
+16535: 
+16535:   prepare_inexact<To_Policy>(dir);
+16535:   if (fpu_direct_rounding(dir)) {
+16535:     to = multiply_add(x, y, to);
+16535:   }
+16535:   else if (fpu_inverse_rounding(dir)) {
+16535:     to = multiply_add(-x, y, -to);
+16535:     limit_precision(to);
+16535:     to = -to;
+16535:   }
+16535:   else {
+16535:     fpu_rounding_control_word_type old
+16535:       = fpu_save_rounding_direction(round_fpu_dir(dir));
+16535:     limit_precision(x);
+16535:     limit_precision(y);
+16535:     limit_precision(to);
+16535:     to = multiply_add(x, y, to);
+16535:     limit_precision(to);
+16535:     fpu_restore_rounding_direction(old);
+16535:   }
+16535:   if (To_Policy::fpu_check_nan_result && is_nan<To_Policy>(to)) {
+16535:     return V_NAN;
+16535:   }
+16535:   return result_relation<To_Policy>(dir);
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy, typename Type>
+16535: inline Result
+16535: sub_mul_float(Type& to, const Type x, const Type y, Rounding_Dir dir) {
+16535:   if (To_Policy::check_inf_mul_zero
+16535:       && ((x == 0 && is_inf_float<From2_Policy>(y))
+16535:           ||
+16535:           (y == 0 && is_inf_float<From1_Policy>(x)))) {
+16535:     return assign_nan<To_Policy>(to, V_INF_MUL_ZERO);
+16535:   }
+16535: 
+16535:   prepare_inexact<To_Policy>(dir);
+16535:   if (fpu_direct_rounding(dir)) {
+16535:     to = multiply_add(x, -y, to);
+16535:   }
+16535:   else if (fpu_inverse_rounding(dir)) {
+16535:     to = multiply_add(x, y, -to);
+16535:     limit_precision(to);
+16535:     to = -to;
+16535:   }
+16535:   else {
+16535:     fpu_rounding_control_word_type old
+16535:       = fpu_save_rounding_direction(round_fpu_dir(dir));
+16535:     limit_precision(x);
+16535:     limit_precision(y);
+16535:     limit_precision(to);
+16535:     to = multiply_add(x, -y, to);
+16535:     limit_precision(to);
+16535:     fpu_restore_rounding_direction(old);
+16535:   }
+16535:   if (To_Policy::fpu_check_nan_result && is_nan<To_Policy>(to)) {
+16535:     return V_NAN;
+16535:   }
+16535:   return result_relation<To_Policy>(dir);
+16535: }
+16535: 
+16535: template <typename From>
+16535: inline void
+16535: assign_mpq_numeric_float(mpq_class& to, const From from) {
+16535:   to = from;
+16535: }
+16535: 
+16535: template <>
+16535: inline void
+16535: assign_mpq_numeric_float(mpq_class& to, const long double from) {
+16535:   to = 0;
+16535:   if (from == 0.0L) {
+16535:     return;
+16535:   }
+16535:   mpz_class& num = to.get_num();
+16535:   mpz_class& den = to.get_den();
+16535:   int exp;
+16535:   long double n = std::frexp(from, &exp);
+16535:   bool neg = false;
+16535:   if (n < 0.0L) {
+16535:     neg = true;
+16535:     n = -n;
+16535:   }
+16535:   const long double mult = static_cast<long double>(
+16535: # 1085 "../../src/checked_float_inlines.hh" 3 4
+16535:                                                    (0x7fffffffffffffffL * 2UL + 1UL)
+16535: # 1085 "../../src/checked_float_inlines.hh"
+16535:                                                             ) + 1.0L;
+16535:   const unsigned int bits = sizeof(unsigned long) * 8;
+16535:   while (true) {
+16535:     n *= mult;
+16535:     exp -= bits;
+16535:     const long double intpart = std::floor(n);
+16535:     num += static_cast<unsigned long>(intpart);
+16535:     n -= intpart;
+16535:     if (n == 0.0L) {
+16535:       break;
+16535:     }
+16535:     num <<= bits;
+16535:   }
+16535:   if (exp < 0) {
+16535:     den <<= -exp;
+16535:   }
+16535:   else {
+16535:     num <<= exp;
+16535:   }
+16535:   if (neg) {
+16535:     to = -to;
+16535:   }
+16535:   to.canonicalize();
+16535: }
+16535: 
+16535: template <typename Policy, typename Type>
+16535: inline Result
+16535: output_float(std::ostream& os, const Type from, const Numeric_Format&,
+16535:              Rounding_Dir) {
+16535:   if (from == 0) {
+16535:     os << "0";
+16535:   }
+16535:   else if (is_minf<Policy>(from)) {
+16535:     os << "-inf";
+16535:   }
+16535:   else if (is_pinf<Policy>(from)) {
+16535:     os << "+inf";
+16535:   }
+16535:   else if (is_nan<Policy>(from)) {
+16535:     os << "nan";
+16535:   }
+16535:   else {
+16535:     mpq_class q;
+16535:     assign_mpq_numeric_float(q, from);
+16535:     std::string s = float_mpq_to_string(q);
+16535:     os << s;
+16535:   }
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, Rounding_Dir a1) { return assign_float_float_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, double> { static inline Result function( float& arg1, const double &arg2, Rounding_Dir a1) { return assign_float_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, float> { static inline Result function( double& arg1, const float &arg2, Rounding_Dir a1) { return assign_float_float_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, long double> { static inline Result function( float& arg1, const long double &arg2, Rounding_Dir a1) { return assign_float_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, float> { static inline Result function( long double& arg1, const float &arg2, Rounding_Dir a1) { return assign_float_float_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, Rounding_Dir a1) { return assign_float_float_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, long double> { static inline Result function( double& arg1, const long double &arg2, Rounding_Dir a1) { return assign_float_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, double> { static inline Result function( long double& arg1, const double &arg2, Rounding_Dir a1) { return assign_float_float_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, Rounding_Dir a1) { return assign_float_float_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy> struct classify_function_struct<Policy, float> { static inline Result function(const float& arg, bool a1, bool a2, bool a3) { return classify_float<Policy>(arg, a1, a2, a3); } };
+16535: template <typename Policy> struct is_nan_function_struct<Policy, float> { static inline bool function(const float& arg) { return is_nan_float<Policy>(arg); } };
+16535: template <typename Policy> struct is_minf_function_struct<Policy, float> { static inline bool function(const float& arg) { return is_minf_float<Policy>(arg); } };
+16535: template <typename Policy> struct is_pinf_function_struct<Policy, float> { static inline bool function(const float& arg) { return is_pinf_float<Policy>(arg); } };
+16535: template <typename Policy> struct assign_special_function_struct<Policy, float> { static inline Result function( float& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_float<Policy>(arg, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, char> { static inline Result function( float& arg1, const char &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, signed char> { static inline Result function( float& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, signed short> { static inline Result function( float& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, signed int> { static inline Result function( float& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, signed long> { static inline Result function( float& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, signed long long> { static inline Result function( float& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, unsigned char> { static inline Result function( float& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, unsigned short> { static inline Result function( float& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, unsigned int> { static inline Result function( float& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, unsigned long> { static inline Result function( float& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, unsigned long long> { static inline Result function( float& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, mpz_class> { static inline Result function( float& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_float_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, float, mpq_class> { static inline Result function( float& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_float_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, float, float> { static inline void function( float& arg1, const float &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy> struct is_int_function_struct<Policy, float> { static inline bool function(const float& arg) { return is_int_float<Policy>(arg); } };
+16535: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, Rounding_Dir a1) { return floor_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, Rounding_Dir a1) { return ceil_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, Rounding_Dir a1) { return trunc_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, Rounding_Dir a1) { return neg_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, Rounding_Dir a1) { return abs_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, float, float, float> { static inline Result function( float& arg1, const float &arg2, const float &arg3, Rounding_Dir a1) { return add_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, float, float, float> { static inline Result function( float& arg1, const float &arg2, const float &arg3, Rounding_Dir a1) { return sub_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, float, float, float> { static inline Result function( float& arg1, const float &arg2, const float &arg3, Rounding_Dir a1) { return mul_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, float, float, float> { static inline Result function( float& arg1, const float &arg2, const float &arg3, Rounding_Dir a1) { return div_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, float, float, float> { static inline Result function( float& arg1, const float &arg2, const float &arg3, Rounding_Dir a1) { return rem_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, float, float> { static inline Result function( float& arg1, const float &arg2, Rounding_Dir a1) { return sqrt_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, float, float, float> { static inline Result function( float& arg1, const float &arg2, const float &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, float, float, float, float, float> { static inline Result function( float& arg1, float &arg2, float &arg3, const float &arg4, const float &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, float, float, float> { static inline Result function( float& arg1, const float &arg2, const float &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy> struct sgn_function_struct<Policy, float> { static inline Result_Relation function(const float& arg) { return sgn_float<Policy>(arg); } };
+16535: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, float, float> { static inline Result_Relation function(const float& arg1, const float &arg2) { return cmp_float<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, float, float, float> { static inline Result function( float& arg1, const float &arg2, const float &arg3, Rounding_Dir a1) { return add_mul_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, float, float, float> { static inline Result function( float& arg1, const float &arg2, const float &arg3, Rounding_Dir a1) { return sub_mul_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy> struct input_function_struct<Policy, float> { static inline Result function( float& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct output_function_struct<Policy, float> { static inline Result function(std::ostream& b1, const float& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_float<Policy>(b1, arg, a1, a2); } };
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy> struct classify_function_struct<Policy, double> { static inline Result function(const double& arg, bool a1, bool a2, bool a3) { return classify_float<Policy>(arg, a1, a2, a3); } };
+16535: template <typename Policy> struct is_nan_function_struct<Policy, double> { static inline bool function(const double& arg) { return is_nan_float<Policy>(arg); } };
+16535: template <typename Policy> struct is_minf_function_struct<Policy, double> { static inline bool function(const double& arg) { return is_minf_float<Policy>(arg); } };
+16535: template <typename Policy> struct is_pinf_function_struct<Policy, double> { static inline bool function(const double& arg) { return is_pinf_float<Policy>(arg); } };
+16535: template <typename Policy> struct assign_special_function_struct<Policy, double> { static inline Result function( double& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_float<Policy>(arg, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, char> { static inline Result function( double& arg1, const char &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, signed char> { static inline Result function( double& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, signed short> { static inline Result function( double& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, signed int> { static inline Result function( double& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, signed long> { static inline Result function( double& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, signed long long> { static inline Result function( double& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, unsigned char> { static inline Result function( double& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, unsigned short> { static inline Result function( double& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, unsigned int> { static inline Result function( double& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, unsigned long> { static inline Result function( double& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, unsigned long long> { static inline Result function( double& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, mpz_class> { static inline Result function( double& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_float_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, double, mpq_class> { static inline Result function( double& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_float_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, double, double> { static inline void function( double& arg1, const double &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy> struct is_int_function_struct<Policy, double> { static inline bool function(const double& arg) { return is_int_float<Policy>(arg); } };
+16535: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, Rounding_Dir a1) { return floor_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, Rounding_Dir a1) { return ceil_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, Rounding_Dir a1) { return trunc_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, Rounding_Dir a1) { return neg_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, Rounding_Dir a1) { return abs_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, double, double, double> { static inline Result function( double& arg1, const double &arg2, const double &arg3, Rounding_Dir a1) { return add_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, double, double, double> { static inline Result function( double& arg1, const double &arg2, const double &arg3, Rounding_Dir a1) { return sub_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, double, double, double> { static inline Result function( double& arg1, const double &arg2, const double &arg3, Rounding_Dir a1) { return mul_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, double, double, double> { static inline Result function( double& arg1, const double &arg2, const double &arg3, Rounding_Dir a1) { return div_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, double, double, double> { static inline Result function( double& arg1, const double &arg2, const double &arg3, Rounding_Dir a1) { return rem_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, double, double> { static inline Result function( double& arg1, const double &arg2, Rounding_Dir a1) { return sqrt_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, double, double, double> { static inline Result function( double& arg1, const double &arg2, const double &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, double, double, double, double, double> { static inline Result function( double& arg1, double &arg2, double &arg3, const double &arg4, const double &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, double, double, double> { static inline Result function( double& arg1, const double &arg2, const double &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy> struct sgn_function_struct<Policy, double> { static inline Result_Relation function(const double& arg) { return sgn_float<Policy>(arg); } };
+16535: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, double, double> { static inline Result_Relation function(const double& arg1, const double &arg2) { return cmp_float<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, double, double, double> { static inline Result function( double& arg1, const double &arg2, const double &arg3, Rounding_Dir a1) { return add_mul_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, double, double, double> { static inline Result function( double& arg1, const double &arg2, const double &arg3, Rounding_Dir a1) { return sub_mul_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy> struct input_function_struct<Policy, double> { static inline Result function( double& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct output_function_struct<Policy, double> { static inline Result function(std::ostream& b1, const double& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_float<Policy>(b1, arg, a1, a2); } };
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy> struct classify_function_struct<Policy, long double> { static inline Result function(const long double& arg, bool a1, bool a2, bool a3) { return classify_float<Policy>(arg, a1, a2, a3); } };
+16535: template <typename Policy> struct is_nan_function_struct<Policy, long double> { static inline bool function(const long double& arg) { return is_nan_float<Policy>(arg); } };
+16535: template <typename Policy> struct is_minf_function_struct<Policy, long double> { static inline bool function(const long double& arg) { return is_minf_float<Policy>(arg); } };
+16535: template <typename Policy> struct is_pinf_function_struct<Policy, long double> { static inline bool function(const long double& arg) { return is_pinf_float<Policy>(arg); } };
+16535: template <typename Policy> struct assign_special_function_struct<Policy, long double> { static inline Result function( long double& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_float<Policy>(arg, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, char> { static inline Result function( long double& arg1, const char &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, signed char> { static inline Result function( long double& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, signed short> { static inline Result function( long double& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, signed int> { static inline Result function( long double& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, signed long> { static inline Result function( long double& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, signed long long> { static inline Result function( long double& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, unsigned char> { static inline Result function( long double& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, unsigned short> { static inline Result function( long double& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, unsigned int> { static inline Result function( long double& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, unsigned long> { static inline Result function( long double& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, unsigned long long> { static inline Result function( long double& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_float_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, mpz_class> { static inline Result function( long double& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_float_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, long double, mpq_class> { static inline Result function( long double& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_float_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, long double, long double> { static inline void function( long double& arg1, const long double &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy> struct is_int_function_struct<Policy, long double> { static inline bool function(const long double& arg) { return is_int_float<Policy>(arg); } };
+16535: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, Rounding_Dir a1) { return floor_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, Rounding_Dir a1) { return ceil_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, Rounding_Dir a1) { return trunc_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, Rounding_Dir a1) { return neg_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, Rounding_Dir a1) { return abs_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, long double, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, const long double &arg3, Rounding_Dir a1) { return add_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, long double, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, const long double &arg3, Rounding_Dir a1) { return sub_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, long double, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, const long double &arg3, Rounding_Dir a1) { return mul_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, long double, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, const long double &arg3, Rounding_Dir a1) { return div_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, long double, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, const long double &arg3, Rounding_Dir a1) { return rem_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_float<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, Rounding_Dir a1) { return sqrt_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, long double, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, const long double &arg3, Rounding_Dir a1) { return gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, long double, long double, long double, long double, long double> { static inline Result function( long double& arg1, long double &arg2, long double &arg3, const long double &arg4, const long double &arg5, Rounding_Dir a1) { return gcdext_exact<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, long double, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, const long double &arg3, Rounding_Dir a1) { return lcm_gcd_exact<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy> struct sgn_function_struct<Policy, long double> { static inline Result_Relation function(const long double& arg) { return sgn_float<Policy>(arg); } };
+16535: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, long double, long double> { static inline Result_Relation function(const long double& arg1, const long double &arg2) { return cmp_float<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, long double, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, const long double &arg3, Rounding_Dir a1) { return add_mul_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, long double, long double, long double> { static inline Result function( long double& arg1, const long double &arg2, const long double &arg3, Rounding_Dir a1) { return sub_mul_float<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: template <typename Policy> struct input_function_struct<Policy, long double> { static inline Result function( long double& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct output_function_struct<Policy, long double> { static inline Result function(std::ostream& b1, const long double& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_float<Policy>(b1, arg, a1, a2); } };
+16535: 
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 703 "../../src/checked_defs.hh" 2
+16535: # 1 "../../src/checked_mpz_inlines.hh" 1
+16535: # 27 "../../src/checked_mpz_inlines.hh"
+16535: # 1 "/usr/include/c++/8/sstream" 1 3
+16535: # 36 "/usr/include/c++/8/sstream" 3
+16535:        
+16535: # 37 "/usr/include/c++/8/sstream" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 41 "/usr/include/c++/8/sstream" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: namespace __cxx11 {
+16535: # 64 "/usr/include/c++/8/sstream" 3
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     class basic_stringbuf : public basic_streambuf<_CharT, _Traits>
+16535:     {
+16535:       struct __xfer_bufptrs;
+16535:     public:
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef _Traits traits_type;
+16535: 
+16535: 
+16535:       typedef _Alloc allocator_type;
+16535:       typedef typename traits_type::int_type int_type;
+16535:       typedef typename traits_type::pos_type pos_type;
+16535:       typedef typename traits_type::off_type off_type;
+16535: 
+16535:       typedef basic_streambuf<char_type, traits_type> __streambuf_type;
+16535:       typedef basic_string<char_type, _Traits, _Alloc> __string_type;
+16535:       typedef typename __string_type::size_type __size_type;
+16535: 
+16535:     protected:
+16535: 
+16535:       ios_base::openmode _M_mode;
+16535: 
+16535: 
+16535:       __string_type _M_string;
+16535: 
+16535:     public:
+16535: # 99 "/usr/include/c++/8/sstream" 3
+16535:       explicit
+16535:       basic_stringbuf(ios_base::openmode __mode = ios_base::in | ios_base::out)
+16535:       : __streambuf_type(), _M_mode(__mode), _M_string()
+16535:       { }
+16535: # 112 "/usr/include/c++/8/sstream" 3
+16535:       explicit
+16535:       basic_stringbuf(const __string_type& __str,
+16535:         ios_base::openmode __mode = ios_base::in | ios_base::out)
+16535:       : __streambuf_type(), _M_mode(),
+16535:  _M_string(__str.data(), __str.size(), __str.get_allocator())
+16535:       { _M_stringbuf_init(__mode); }
+16535: 
+16535: 
+16535:       basic_stringbuf(const basic_stringbuf&) = delete;
+16535: 
+16535:       basic_stringbuf(basic_stringbuf&& __rhs)
+16535:       : basic_stringbuf(std::move(__rhs), __xfer_bufptrs(__rhs, this))
+16535:       { __rhs._M_sync(const_cast<char_type*>(__rhs._M_string.data()), 0, 0); }
+16535: 
+16535: 
+16535: 
+16535:       basic_stringbuf&
+16535:       operator=(const basic_stringbuf&) = delete;
+16535: 
+16535:       basic_stringbuf&
+16535:       operator=(basic_stringbuf&& __rhs)
+16535:       {
+16535:  __xfer_bufptrs __st{__rhs, this};
+16535:  const __streambuf_type& __base = __rhs;
+16535:  __streambuf_type::operator=(__base);
+16535:  this->pubimbue(__rhs.getloc());
+16535:  _M_mode = __rhs._M_mode;
+16535:  _M_string = std::move(__rhs._M_string);
+16535:  __rhs._M_sync(const_cast<char_type*>(__rhs._M_string.data()), 0, 0);
+16535:  return *this;
+16535:       }
+16535: 
+16535:       void
+16535:       swap(basic_stringbuf& __rhs)
+16535:       {
+16535:  __xfer_bufptrs __l_st{*this, std::__addressof(__rhs)};
+16535:  __xfer_bufptrs __r_st{__rhs, this};
+16535:  __streambuf_type& __base = __rhs;
+16535:  __streambuf_type::swap(__base);
+16535:  __rhs.pubimbue(this->pubimbue(__rhs.getloc()));
+16535:  std::swap(_M_mode, __rhs._M_mode);
+16535:  std::swap(_M_string, __rhs._M_string);
+16535:       }
+16535: # 166 "/usr/include/c++/8/sstream" 3
+16535:       __string_type
+16535:       str() const
+16535:       {
+16535:  __string_type __ret(_M_string.get_allocator());
+16535:  if (this->pptr())
+16535:    {
+16535: 
+16535:      if (this->pptr() > this->egptr())
+16535:        __ret.assign(this->pbase(), this->pptr());
+16535:      else
+16535:        __ret.assign(this->pbase(), this->egptr());
+16535:    }
+16535:  else
+16535:    __ret = _M_string;
+16535:  return __ret;
+16535:       }
+16535: # 190 "/usr/include/c++/8/sstream" 3
+16535:       void
+16535:       str(const __string_type& __s)
+16535:       {
+16535: 
+16535: 
+16535:  _M_string.assign(__s.data(), __s.size());
+16535:  _M_stringbuf_init(_M_mode);
+16535:       }
+16535: 
+16535:     protected:
+16535: 
+16535:       void
+16535:       _M_stringbuf_init(ios_base::openmode __mode)
+16535:       {
+16535:  _M_mode = __mode;
+16535:  __size_type __len = 0;
+16535:  if (_M_mode & (ios_base::ate | ios_base::app))
+16535:    __len = _M_string.size();
+16535:  _M_sync(const_cast<char_type*>(_M_string.data()), 0, __len);
+16535:       }
+16535: 
+16535:       virtual streamsize
+16535:       showmanyc()
+16535:       {
+16535:  streamsize __ret = -1;
+16535:  if (_M_mode & ios_base::in)
+16535:    {
+16535:      _M_update_egptr();
+16535:      __ret = this->egptr() - this->gptr();
+16535:    }
+16535:  return __ret;
+16535:       }
+16535: 
+16535:       virtual int_type
+16535:       underflow();
+16535: 
+16535:       virtual int_type
+16535:       pbackfail(int_type __c = traits_type::eof());
+16535: 
+16535:       virtual int_type
+16535:       overflow(int_type __c = traits_type::eof());
+16535: # 243 "/usr/include/c++/8/sstream" 3
+16535:       virtual __streambuf_type*
+16535:       setbuf(char_type* __s, streamsize __n)
+16535:       {
+16535:  if (__s && __n >= 0)
+16535:    {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:      _M_string.clear();
+16535: 
+16535: 
+16535:      _M_sync(__s, __n, 0);
+16535:    }
+16535:  return this;
+16535:       }
+16535: 
+16535:       virtual pos_type
+16535:       seekoff(off_type __off, ios_base::seekdir __way,
+16535:        ios_base::openmode __mode = ios_base::in | ios_base::out);
+16535: 
+16535:       virtual pos_type
+16535:       seekpos(pos_type __sp,
+16535:        ios_base::openmode __mode = ios_base::in | ios_base::out);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_sync(char_type* __base, __size_type __i, __size_type __o);
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_update_egptr()
+16535:       {
+16535:  const bool __testin = _M_mode & ios_base::in;
+16535:  if (this->pptr() && this->pptr() > this->egptr())
+16535:    {
+16535:      if (__testin)
+16535:        this->setg(this->eback(), this->gptr(), this->pptr());
+16535:      else
+16535:        this->setg(this->pptr(), this->pptr(), this->pptr());
+16535:    }
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_pbump(char_type* __pbeg, char_type* __pend, off_type __off);
+16535: 
+16535:     private:
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       struct __xfer_bufptrs
+16535:       {
+16535:  __xfer_bufptrs(const basic_stringbuf& __from, basic_stringbuf* __to)
+16535:  : _M_to{__to}, _M_goff{-1, -1, -1}, _M_poff{-1, -1, -1}
+16535:  {
+16535:    const _CharT* const __str = __from._M_string.data();
+16535:    const _CharT* __end = nullptr;
+16535:    if (__from.eback())
+16535:      {
+16535:        _M_goff[0] = __from.eback() - __str;
+16535:        _M_goff[1] = __from.gptr() - __str;
+16535:        _M_goff[2] = __from.egptr() - __str;
+16535:        __end = __from.egptr();
+16535:      }
+16535:    if (__from.pbase())
+16535:      {
+16535:        _M_poff[0] = __from.pbase() - __str;
+16535:        _M_poff[1] = __from.pptr() - __from.pbase();
+16535:        _M_poff[2] = __from.epptr() - __str;
+16535:        if (__from.pptr() > __end)
+16535:   __end = __from.pptr();
+16535:      }
+16535: 
+16535: 
+16535:    if (__end)
+16535:      {
+16535: 
+16535: 
+16535:        auto& __mut_from = const_cast<basic_stringbuf&>(__from);
+16535:        __mut_from._M_string._M_length(__end - __str);
+16535:      }
+16535:  }
+16535: 
+16535:  ~__xfer_bufptrs()
+16535:  {
+16535:    char_type* __str = const_cast<char_type*>(_M_to->_M_string.data());
+16535:    if (_M_goff[0] != -1)
+16535:      _M_to->setg(__str+_M_goff[0], __str+_M_goff[1], __str+_M_goff[2]);
+16535:    if (_M_poff[0] != -1)
+16535:      _M_to->_M_pbump(__str+_M_poff[0], __str+_M_poff[2], _M_poff[1]);
+16535:  }
+16535: 
+16535:  basic_stringbuf* _M_to;
+16535:  off_type _M_goff[3];
+16535:  off_type _M_poff[3];
+16535:       };
+16535: # 357 "/usr/include/c++/8/sstream" 3
+16535:       basic_stringbuf(basic_stringbuf&& __rhs, __xfer_bufptrs&&)
+16535:       : __streambuf_type(static_cast<const __streambuf_type&>(__rhs)),
+16535:       _M_mode(__rhs._M_mode), _M_string(std::move(__rhs._M_string))
+16535:       { }
+16535: 
+16535:     };
+16535: # 380 "/usr/include/c++/8/sstream" 3
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     class basic_istringstream : public basic_istream<_CharT, _Traits>
+16535:     {
+16535:     public:
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef _Traits traits_type;
+16535: 
+16535: 
+16535:       typedef _Alloc allocator_type;
+16535:       typedef typename traits_type::int_type int_type;
+16535:       typedef typename traits_type::pos_type pos_type;
+16535:       typedef typename traits_type::off_type off_type;
+16535: 
+16535: 
+16535:       typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
+16535:       typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type;
+16535:       typedef basic_istream<char_type, traits_type> __istream_type;
+16535: 
+16535:     private:
+16535:       __stringbuf_type _M_stringbuf;
+16535: 
+16535:     public:
+16535: # 416 "/usr/include/c++/8/sstream" 3
+16535:       explicit
+16535:       basic_istringstream(ios_base::openmode __mode = ios_base::in)
+16535:       : __istream_type(), _M_stringbuf(__mode | ios_base::in)
+16535:       { this->init(&_M_stringbuf); }
+16535: # 434 "/usr/include/c++/8/sstream" 3
+16535:       explicit
+16535:       basic_istringstream(const __string_type& __str,
+16535:      ios_base::openmode __mode = ios_base::in)
+16535:       : __istream_type(), _M_stringbuf(__str, __mode | ios_base::in)
+16535:       { this->init(&_M_stringbuf); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       ~basic_istringstream()
+16535:       { }
+16535: 
+16535: 
+16535:       basic_istringstream(const basic_istringstream&) = delete;
+16535: 
+16535:       basic_istringstream(basic_istringstream&& __rhs)
+16535:       : __istream_type(std::move(__rhs)),
+16535:       _M_stringbuf(std::move(__rhs._M_stringbuf))
+16535:       { __istream_type::set_rdbuf(&_M_stringbuf); }
+16535: 
+16535: 
+16535: 
+16535:       basic_istringstream&
+16535:       operator=(const basic_istringstream&) = delete;
+16535: 
+16535:       basic_istringstream&
+16535:       operator=(basic_istringstream&& __rhs)
+16535:       {
+16535:  __istream_type::operator=(std::move(__rhs));
+16535:  _M_stringbuf = std::move(__rhs._M_stringbuf);
+16535:  return *this;
+16535:       }
+16535: 
+16535:       void
+16535:       swap(basic_istringstream& __rhs)
+16535:       {
+16535:  __istream_type::swap(__rhs);
+16535:  _M_stringbuf.swap(__rhs._M_stringbuf);
+16535:       }
+16535: # 485 "/usr/include/c++/8/sstream" 3
+16535:       __stringbuf_type*
+16535:       rdbuf() const
+16535:       { return const_cast<__stringbuf_type*>(&_M_stringbuf); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       __string_type
+16535:       str() const
+16535:       { return _M_stringbuf.str(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       str(const __string_type& __s)
+16535:       { _M_stringbuf.str(__s); }
+16535:     };
+16535: # 524 "/usr/include/c++/8/sstream" 3
+16535:   template <typename _CharT, typename _Traits, typename _Alloc>
+16535:     class basic_ostringstream : public basic_ostream<_CharT, _Traits>
+16535:     {
+16535:     public:
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef _Traits traits_type;
+16535: 
+16535: 
+16535:       typedef _Alloc allocator_type;
+16535:       typedef typename traits_type::int_type int_type;
+16535:       typedef typename traits_type::pos_type pos_type;
+16535:       typedef typename traits_type::off_type off_type;
+16535: 
+16535: 
+16535:       typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
+16535:       typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type;
+16535:       typedef basic_ostream<char_type, traits_type> __ostream_type;
+16535: 
+16535:     private:
+16535:       __stringbuf_type _M_stringbuf;
+16535: 
+16535:     public:
+16535: # 560 "/usr/include/c++/8/sstream" 3
+16535:       explicit
+16535:       basic_ostringstream(ios_base::openmode __mode = ios_base::out)
+16535:       : __ostream_type(), _M_stringbuf(__mode | ios_base::out)
+16535:       { this->init(&_M_stringbuf); }
+16535: # 578 "/usr/include/c++/8/sstream" 3
+16535:       explicit
+16535:       basic_ostringstream(const __string_type& __str,
+16535:      ios_base::openmode __mode = ios_base::out)
+16535:       : __ostream_type(), _M_stringbuf(__str, __mode | ios_base::out)
+16535:       { this->init(&_M_stringbuf); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       ~basic_ostringstream()
+16535:       { }
+16535: 
+16535: 
+16535:       basic_ostringstream(const basic_ostringstream&) = delete;
+16535: 
+16535:       basic_ostringstream(basic_ostringstream&& __rhs)
+16535:       : __ostream_type(std::move(__rhs)),
+16535:       _M_stringbuf(std::move(__rhs._M_stringbuf))
+16535:       { __ostream_type::set_rdbuf(&_M_stringbuf); }
+16535: 
+16535: 
+16535: 
+16535:       basic_ostringstream&
+16535:       operator=(const basic_ostringstream&) = delete;
+16535: 
+16535:       basic_ostringstream&
+16535:       operator=(basic_ostringstream&& __rhs)
+16535:       {
+16535:  __ostream_type::operator=(std::move(__rhs));
+16535:  _M_stringbuf = std::move(__rhs._M_stringbuf);
+16535:  return *this;
+16535:       }
+16535: 
+16535:       void
+16535:       swap(basic_ostringstream& __rhs)
+16535:       {
+16535:  __ostream_type::swap(__rhs);
+16535:  _M_stringbuf.swap(__rhs._M_stringbuf);
+16535:       }
+16535: # 629 "/usr/include/c++/8/sstream" 3
+16535:       __stringbuf_type*
+16535:       rdbuf() const
+16535:       { return const_cast<__stringbuf_type*>(&_M_stringbuf); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       __string_type
+16535:       str() const
+16535:       { return _M_stringbuf.str(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       str(const __string_type& __s)
+16535:       { _M_stringbuf.str(__s); }
+16535:     };
+16535: # 668 "/usr/include/c++/8/sstream" 3
+16535:   template <typename _CharT, typename _Traits, typename _Alloc>
+16535:     class basic_stringstream : public basic_iostream<_CharT, _Traits>
+16535:     {
+16535:     public:
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef _Traits traits_type;
+16535: 
+16535: 
+16535:       typedef _Alloc allocator_type;
+16535:       typedef typename traits_type::int_type int_type;
+16535:       typedef typename traits_type::pos_type pos_type;
+16535:       typedef typename traits_type::off_type off_type;
+16535: 
+16535: 
+16535:       typedef basic_string<_CharT, _Traits, _Alloc> __string_type;
+16535:       typedef basic_stringbuf<_CharT, _Traits, _Alloc> __stringbuf_type;
+16535:       typedef basic_iostream<char_type, traits_type> __iostream_type;
+16535: 
+16535:     private:
+16535:       __stringbuf_type _M_stringbuf;
+16535: 
+16535:     public:
+16535: # 703 "/usr/include/c++/8/sstream" 3
+16535:       explicit
+16535:       basic_stringstream(ios_base::openmode __m = ios_base::out | ios_base::in)
+16535:       : __iostream_type(), _M_stringbuf(__m)
+16535:       { this->init(&_M_stringbuf); }
+16535: # 719 "/usr/include/c++/8/sstream" 3
+16535:       explicit
+16535:       basic_stringstream(const __string_type& __str,
+16535:     ios_base::openmode __m = ios_base::out | ios_base::in)
+16535:       : __iostream_type(), _M_stringbuf(__str, __m)
+16535:       { this->init(&_M_stringbuf); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       ~basic_stringstream()
+16535:       { }
+16535: 
+16535: 
+16535:       basic_stringstream(const basic_stringstream&) = delete;
+16535: 
+16535:       basic_stringstream(basic_stringstream&& __rhs)
+16535:       : __iostream_type(std::move(__rhs)),
+16535:       _M_stringbuf(std::move(__rhs._M_stringbuf))
+16535:       { __iostream_type::set_rdbuf(&_M_stringbuf); }
+16535: 
+16535: 
+16535: 
+16535:       basic_stringstream&
+16535:       operator=(const basic_stringstream&) = delete;
+16535: 
+16535:       basic_stringstream&
+16535:       operator=(basic_stringstream&& __rhs)
+16535:       {
+16535:  __iostream_type::operator=(std::move(__rhs));
+16535:  _M_stringbuf = std::move(__rhs._M_stringbuf);
+16535:  return *this;
+16535:       }
+16535: 
+16535:       void
+16535:       swap(basic_stringstream& __rhs)
+16535:       {
+16535:  __iostream_type::swap(__rhs);
+16535:  _M_stringbuf.swap(__rhs._M_stringbuf);
+16535:       }
+16535: # 770 "/usr/include/c++/8/sstream" 3
+16535:       __stringbuf_type*
+16535:       rdbuf() const
+16535:       { return const_cast<__stringbuf_type*>(&_M_stringbuf); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       __string_type
+16535:       str() const
+16535:       { return _M_stringbuf.str(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       str(const __string_type& __s)
+16535:       { _M_stringbuf.str(__s); }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template <class _CharT, class _Traits, class _Allocator>
+16535:     inline void
+16535:     swap(basic_stringbuf<_CharT, _Traits, _Allocator>& __x,
+16535:   basic_stringbuf<_CharT, _Traits, _Allocator>& __y)
+16535:     { __x.swap(__y); }
+16535: 
+16535: 
+16535:   template <class _CharT, class _Traits, class _Allocator>
+16535:     inline void
+16535:     swap(basic_istringstream<_CharT, _Traits, _Allocator>& __x,
+16535:   basic_istringstream<_CharT, _Traits, _Allocator>& __y)
+16535:     { __x.swap(__y); }
+16535: 
+16535: 
+16535:   template <class _CharT, class _Traits, class _Allocator>
+16535:     inline void
+16535:     swap(basic_ostringstream<_CharT, _Traits, _Allocator>& __x,
+16535:   basic_ostringstream<_CharT, _Traits, _Allocator>& __y)
+16535:     { __x.swap(__y); }
+16535: 
+16535: 
+16535:   template <class _CharT, class _Traits, class _Allocator>
+16535:     inline void
+16535:     swap(basic_stringstream<_CharT, _Traits, _Allocator>& __x,
+16535:   basic_stringstream<_CharT, _Traits, _Allocator>& __y)
+16535:     { __x.swap(__y); }
+16535: 
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/sstream.tcc" 1 3
+16535: # 37 "/usr/include/c++/8/bits/sstream.tcc" 3
+16535:        
+16535: # 38 "/usr/include/c++/8/bits/sstream.tcc" 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   template <class _CharT, class _Traits, class _Alloc>
+16535:     typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type
+16535:     basic_stringbuf<_CharT, _Traits, _Alloc>::
+16535:     pbackfail(int_type __c)
+16535:     {
+16535:       int_type __ret = traits_type::eof();
+16535:       if (this->eback() < this->gptr())
+16535:  {
+16535: 
+16535: 
+16535:    const bool __testeof = traits_type::eq_int_type(__c, __ret);
+16535:    if (!__testeof)
+16535:      {
+16535:        const bool __testeq = traits_type::eq(traits_type::
+16535:           to_char_type(__c),
+16535:           this->gptr()[-1]);
+16535:        const bool __testout = this->_M_mode & ios_base::out;
+16535:        if (__testeq || __testout)
+16535:   {
+16535:     this->gbump(-1);
+16535:     if (!__testeq)
+16535:       *this->gptr() = traits_type::to_char_type(__c);
+16535:     __ret = __c;
+16535:   }
+16535:      }
+16535:    else
+16535:      {
+16535:        this->gbump(-1);
+16535:        __ret = traits_type::not_eof(__c);
+16535:      }
+16535:  }
+16535:       return __ret;
+16535:     }
+16535: 
+16535:   template <class _CharT, class _Traits, class _Alloc>
+16535:     typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type
+16535:     basic_stringbuf<_CharT, _Traits, _Alloc>::
+16535:     overflow(int_type __c)
+16535:     {
+16535:       const bool __testout = this->_M_mode & ios_base::out;
+16535:       if (__builtin_expect(!__testout, false))
+16535:  return traits_type::eof();
+16535: 
+16535:       const bool __testeof = traits_type::eq_int_type(__c, traits_type::eof());
+16535:       if (__builtin_expect(__testeof, false))
+16535:  return traits_type::not_eof(__c);
+16535: 
+16535:       const __size_type __capacity = _M_string.capacity();
+16535: 
+16535: 
+16535:       if ((this->epptr() - this->pbase()) < __capacity)
+16535:  {
+16535: 
+16535:    char_type* __base = const_cast<char_type*>(_M_string.data());
+16535:    _M_pbump(__base, __base + __capacity, this->pptr() - this->pbase());
+16535:    if (_M_mode & ios_base::in)
+16535:      {
+16535:        const __size_type __nget = this->gptr() - this->eback();
+16535:        const __size_type __eget = this->egptr() - this->eback();
+16535:        this->setg(__base, __base + __nget, __base + __eget + 1);
+16535:      }
+16535:    *this->pptr() = traits_type::to_char_type(__c);
+16535:    this->pbump(1);
+16535:    return __c;
+16535:  }
+16535: 
+16535: 
+16535:       const __size_type __max_size = _M_string.max_size();
+16535:       const bool __testput = this->pptr() < this->epptr();
+16535:       if (__builtin_expect(!__testput && __capacity == __max_size, false))
+16535:  return traits_type::eof();
+16535: 
+16535: 
+16535: 
+16535:       const char_type __conv = traits_type::to_char_type(__c);
+16535:       if (!__testput)
+16535:  {
+16535: # 129 "/usr/include/c++/8/bits/sstream.tcc" 3
+16535:    const __size_type __opt_len = std::max(__size_type(2 * __capacity),
+16535:        __size_type(512));
+16535:    const __size_type __len = std::min(__opt_len, __max_size);
+16535:    __string_type __tmp(_M_string.get_allocator());
+16535:    __tmp.reserve(__len);
+16535:    if (this->pbase())
+16535:      __tmp.assign(this->pbase(), this->epptr() - this->pbase());
+16535:    __tmp.push_back(__conv);
+16535:    _M_string.swap(__tmp);
+16535:    _M_sync(const_cast<char_type*>(_M_string.data()),
+16535:     this->gptr() - this->eback(), this->pptr() - this->pbase());
+16535:  }
+16535:       else
+16535:  *this->pptr() = __conv;
+16535:       this->pbump(1);
+16535:       return __c;
+16535:     }
+16535: 
+16535:   template <class _CharT, class _Traits, class _Alloc>
+16535:     typename basic_stringbuf<_CharT, _Traits, _Alloc>::int_type
+16535:     basic_stringbuf<_CharT, _Traits, _Alloc>::
+16535:     underflow()
+16535:     {
+16535:       int_type __ret = traits_type::eof();
+16535:       const bool __testin = this->_M_mode & ios_base::in;
+16535:       if (__testin)
+16535:  {
+16535: 
+16535:    _M_update_egptr();
+16535: 
+16535:    if (this->gptr() < this->egptr())
+16535:      __ret = traits_type::to_int_type(*this->gptr());
+16535:  }
+16535:       return __ret;
+16535:     }
+16535: 
+16535:   template <class _CharT, class _Traits, class _Alloc>
+16535:     typename basic_stringbuf<_CharT, _Traits, _Alloc>::pos_type
+16535:     basic_stringbuf<_CharT, _Traits, _Alloc>::
+16535:     seekoff(off_type __off, ios_base::seekdir __way, ios_base::openmode __mode)
+16535:     {
+16535:       pos_type __ret = pos_type(off_type(-1));
+16535:       bool __testin = (ios_base::in & this->_M_mode & __mode) != 0;
+16535:       bool __testout = (ios_base::out & this->_M_mode & __mode) != 0;
+16535:       const bool __testboth = __testin && __testout && __way != ios_base::cur;
+16535:       __testin &= !(__mode & ios_base::out);
+16535:       __testout &= !(__mode & ios_base::in);
+16535: 
+16535: 
+16535: 
+16535:       const char_type* __beg = __testin ? this->eback() : this->pbase();
+16535:       if ((__beg || !__off) && (__testin || __testout || __testboth))
+16535:  {
+16535:    _M_update_egptr();
+16535: 
+16535:    off_type __newoffi = __off;
+16535:    off_type __newoffo = __newoffi;
+16535:    if (__way == ios_base::cur)
+16535:      {
+16535:        __newoffi += this->gptr() - __beg;
+16535:        __newoffo += this->pptr() - __beg;
+16535:      }
+16535:    else if (__way == ios_base::end)
+16535:      __newoffo = __newoffi += this->egptr() - __beg;
+16535: 
+16535:    if ((__testin || __testboth)
+16535:        && __newoffi >= 0
+16535:        && this->egptr() - __beg >= __newoffi)
+16535:      {
+16535:        this->setg(this->eback(), this->eback() + __newoffi,
+16535:     this->egptr());
+16535:        __ret = pos_type(__newoffi);
+16535:      }
+16535:    if ((__testout || __testboth)
+16535:        && __newoffo >= 0
+16535:        && this->egptr() - __beg >= __newoffo)
+16535:      {
+16535:        _M_pbump(this->pbase(), this->epptr(), __newoffo);
+16535:        __ret = pos_type(__newoffo);
+16535:      }
+16535:  }
+16535:       return __ret;
+16535:     }
+16535: 
+16535:   template <class _CharT, class _Traits, class _Alloc>
+16535:     typename basic_stringbuf<_CharT, _Traits, _Alloc>::pos_type
+16535:     basic_stringbuf<_CharT, _Traits, _Alloc>::
+16535:     seekpos(pos_type __sp, ios_base::openmode __mode)
+16535:     {
+16535:       pos_type __ret = pos_type(off_type(-1));
+16535:       const bool __testin = (ios_base::in & this->_M_mode & __mode) != 0;
+16535:       const bool __testout = (ios_base::out & this->_M_mode & __mode) != 0;
+16535: 
+16535:       const char_type* __beg = __testin ? this->eback() : this->pbase();
+16535:       if ((__beg || !off_type(__sp)) && (__testin || __testout))
+16535:  {
+16535:    _M_update_egptr();
+16535: 
+16535:    const off_type __pos(__sp);
+16535:    const bool __testpos = (0 <= __pos
+16535:       && __pos <= this->egptr() - __beg);
+16535:    if (__testpos)
+16535:      {
+16535:        if (__testin)
+16535:   this->setg(this->eback(), this->eback() + __pos,
+16535:       this->egptr());
+16535:        if (__testout)
+16535:   _M_pbump(this->pbase(), this->epptr(), __pos);
+16535:        __ret = __sp;
+16535:      }
+16535:  }
+16535:       return __ret;
+16535:     }
+16535: 
+16535:   template <class _CharT, class _Traits, class _Alloc>
+16535:     void
+16535:     basic_stringbuf<_CharT, _Traits, _Alloc>::
+16535:     _M_sync(char_type* __base, __size_type __i, __size_type __o)
+16535:     {
+16535:       const bool __testin = _M_mode & ios_base::in;
+16535:       const bool __testout = _M_mode & ios_base::out;
+16535:       char_type* __endg = __base + _M_string.size();
+16535:       char_type* __endp = __base + _M_string.capacity();
+16535: 
+16535:       if (__base != _M_string.data())
+16535:  {
+16535: 
+16535:    __endg += __i;
+16535:    __i = 0;
+16535:    __endp = __endg;
+16535:  }
+16535: 
+16535:       if (__testin)
+16535:  this->setg(__base, __base + __i, __endg);
+16535:       if (__testout)
+16535:  {
+16535:    _M_pbump(__base, __endp, __o);
+16535: 
+16535: 
+16535: 
+16535:    if (!__testin)
+16535:      this->setg(__endg, __endg, __endg);
+16535:  }
+16535:     }
+16535: 
+16535:   template <class _CharT, class _Traits, class _Alloc>
+16535:     void
+16535:     basic_stringbuf<_CharT, _Traits, _Alloc>::
+16535:     _M_pbump(char_type* __pbeg, char_type* __pend, off_type __off)
+16535:     {
+16535:       this->setp(__pbeg, __pend);
+16535:       while (__off > __gnu_cxx::__numeric_traits<int>::__max)
+16535:  {
+16535:    this->pbump(__gnu_cxx::__numeric_traits<int>::__max);
+16535:    __off -= __gnu_cxx::__numeric_traits<int>::__max;
+16535:  }
+16535:       this->pbump(__off);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   extern template class basic_stringbuf<char>;
+16535:   extern template class basic_istringstream<char>;
+16535:   extern template class basic_ostringstream<char>;
+16535:   extern template class basic_stringstream<char>;
+16535: 
+16535: 
+16535:   extern template class basic_stringbuf<wchar_t>;
+16535:   extern template class basic_istringstream<wchar_t>;
+16535:   extern template class basic_ostringstream<wchar_t>;
+16535:   extern template class basic_stringstream<wchar_t>;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 828 "/usr/include/c++/8/sstream" 2 3
+16535: # 28 "../../src/checked_mpz_inlines.hh" 2
+16535: 
+16535: 
+16535: # 29 "../../src/checked_mpz_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Checked {
+16535: 
+16535: template <typename Policy>
+16535: inline Result
+16535: round_lt_mpz(mpz_class& to, Rounding_Dir dir) {
+16535:   if (round_down(dir)) {
+16535:     --to;
+16535:     return V_GT;
+16535:   }
+16535:   return V_LT;
+16535: }
+16535: 
+16535: template <typename Policy>
+16535: inline Result
+16535: round_gt_mpz(mpz_class& to, Rounding_Dir dir) {
+16535:   if (round_up(dir)) {
+16535:     ++to;
+16535:     return V_LT;
+16535:   }
+16535:   return V_GT;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: typedef decltype(__mpz_struct()._mp_size) mp_size_field_t;
+16535: # 64 "../../src/checked_mpz_inlines.hh"
+16535: inline mp_size_field_t
+16535: get_mp_size(const mpz_class &v) {
+16535:   return v.get_mpz_t()->_mp_size;
+16535: }
+16535: 
+16535: inline void
+16535: set_mp_size(mpz_class &v, mp_size_field_t size) {
+16535:   v.get_mpz_t()->_mp_size = size;
+16535: }
+16535: 
+16535: template <typename Policy>
+16535: inline Result
+16535: classify_mpz(const mpz_class& v, bool nan, bool inf, bool sign) {
+16535:   if (Policy::has_nan || Policy::has_infinity) {
+16535:     mp_size_field_t s = get_mp_size(v);
+16535:     if (Policy::has_nan
+16535:         && (nan || sign)
+16535:         && s == C_Integer<mp_size_field_t>::min + 1) {
+16535:       return V_NAN;
+16535:     }
+16535:     if (!inf && !sign) {
+16535:       return V_LGE;
+16535:     }
+16535:     if (Policy::has_infinity) {
+16535:       if (s == C_Integer<mp_size_field_t>::min) {
+16535:         return inf ? V_EQ_MINUS_INFINITY : V_LT;
+16535:       }
+16535:       if (s == C_Integer<mp_size_field_t>::max) {
+16535:         return inf ? V_EQ_PLUS_INFINITY : V_GT;
+16535:       }
+16535:     }
+16535:   }
+16535:   if (sign) {
+16535:     return static_cast<Result>(sgn<Policy>(v));
+16535:   }
+16535:   return V_LGE;
+16535: }
+16535: 
+16535: template <typename Policy> struct classify_function_struct<Policy, mpz_class> { static inline Result function(const mpz_class& arg, bool a1, bool a2, bool a3) { return classify_mpz<Policy>(arg, a1, a2, a3); } };
+16535: 
+16535: template <typename Policy>
+16535: inline bool
+16535: is_nan_mpz(const mpz_class& v) {
+16535:   return Policy::has_nan
+16535:     && get_mp_size(v) == C_Integer<mp_size_field_t>::min + 1;
+16535: }
+16535: 
+16535: template <typename Policy> struct is_nan_function_struct<Policy, mpz_class> { static inline bool function(const mpz_class& arg) { return is_nan_mpz<Policy>(arg); } };
+16535: 
+16535: template <typename Policy>
+16535: inline bool
+16535: is_minf_mpz(const mpz_class& v) {
+16535:   return Policy::has_infinity
+16535:     && get_mp_size(v) == C_Integer<mp_size_field_t>::min;
+16535: }
+16535: 
+16535: template <typename Policy> struct is_minf_function_struct<Policy, mpz_class> { static inline bool function(const mpz_class& arg) { return is_minf_mpz<Policy>(arg); } };
+16535: 
+16535: template <typename Policy>
+16535: inline bool
+16535: is_pinf_mpz(const mpz_class& v) {
+16535:   return Policy::has_infinity
+16535:     && get_mp_size(v) == C_Integer<mp_size_field_t>::max;
+16535: }
+16535: 
+16535: template <typename Policy> struct is_pinf_function_struct<Policy, mpz_class> { static inline bool function(const mpz_class& arg) { return is_pinf_mpz<Policy>(arg); } };
+16535: 
+16535: template <typename Policy>
+16535: inline bool
+16535: is_int_mpz(const mpz_class& v) {
+16535:   return !is_nan<Policy>(v);
+16535: }
+16535: 
+16535: template <typename Policy> struct is_int_function_struct<Policy, mpz_class> { static inline bool function(const mpz_class& arg) { return is_int_mpz<Policy>(arg); } };
+16535: 
+16535: template <typename Policy>
+16535: inline Result
+16535: assign_special_mpz(mpz_class& v, Result_Class c, Rounding_Dir) {
+16535:   switch (c) {
+16535:   case VC_NAN:
+16535:     if (Policy::has_nan) {
+16535:       set_mp_size(v, C_Integer<mp_size_field_t>::min + 1);
+16535:     }
+16535:     return V_NAN;
+16535:   case VC_MINUS_INFINITY:
+16535:     if (Policy::has_infinity) {
+16535:       set_mp_size(v, C_Integer<mp_size_field_t>::min);
+16535:       return V_EQ_MINUS_INFINITY;
+16535:     }
+16535:     return V_EQ_MINUS_INFINITY | V_UNREPRESENTABLE;
+16535:   case VC_PLUS_INFINITY:
+16535:     if (Policy::has_infinity) {
+16535:       set_mp_size(v, C_Integer<mp_size_field_t>::max);
+16535:       return V_EQ_PLUS_INFINITY;
+16535:     }
+16535:     return V_EQ_PLUS_INFINITY | V_UNREPRESENTABLE;
+16535:   default:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return V_NAN;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Policy> struct assign_special_function_struct<Policy, mpz_class> { static inline Result function( mpz_class& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_mpz<Policy>(arg, a1, a2); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy>
+16535: inline void
+16535: copy_mpz(mpz_class& to, const mpz_class& from) {
+16535:   if (is_nan_mpz<From_Policy>(from)) {
+16535:     ((void) 0);
+16535:   }
+16535:   else if (is_minf_mpz<From_Policy>(from) || is_pinf_mpz<From_Policy>(from)) {
+16535:     ((void) 0);
+16535:   }
+16535:   else {
+16535:     to = from;
+16535:     return;
+16535:   }
+16535:   set_mp_size(to, get_mp_size(from));
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline void function( mpz_class& arg1, const mpz_class &arg2) { return copy_mpz<Policy1, Policy2>(arg1, arg2); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename From>
+16535: inline Result
+16535: construct_mpz_base(mpz_class& to, const From from, Rounding_Dir) {
+16535:     new(&to) mpz_class(from);
+16535:     return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpz_class, char> { static inline Result function( mpz_class& arg1, const char &arg2, Rounding_Dir a1) { return construct_mpz_base<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpz_class, signed char> { static inline Result function( mpz_class& arg1, const signed char &arg2, Rounding_Dir a1) { return construct_mpz_base<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpz_class, signed short> { static inline Result function( mpz_class& arg1, const signed short &arg2, Rounding_Dir a1) { return construct_mpz_base<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpz_class, signed int> { static inline Result function( mpz_class& arg1, const signed int &arg2, Rounding_Dir a1) { return construct_mpz_base<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpz_class, signed long> { static inline Result function( mpz_class& arg1, const signed long &arg2, Rounding_Dir a1) { return construct_mpz_base<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpz_class, unsigned char> { static inline Result function( mpz_class& arg1, const unsigned char &arg2, Rounding_Dir a1) { return construct_mpz_base<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpz_class, unsigned short> { static inline Result function( mpz_class& arg1, const unsigned short &arg2, Rounding_Dir a1) { return construct_mpz_base<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpz_class, unsigned int> { static inline Result function( mpz_class& arg1, const unsigned int &arg2, Rounding_Dir a1) { return construct_mpz_base<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpz_class, unsigned long> { static inline Result function( mpz_class& arg1, const unsigned long &arg2, Rounding_Dir a1) { return construct_mpz_base<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename From>
+16535: inline Result
+16535: construct_mpz_float(mpz_class& to, const From& from, Rounding_Dir dir) {
+16535:   if (is_nan<From_Policy>(from)) {
+16535:     return construct_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (is_minf<From_Policy>(from)) {
+16535:     return construct_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
+16535:   }
+16535:   else if (is_pinf<From_Policy>(from)) {
+16535:     return construct_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:   }
+16535:   if (round_not_requested(dir)) {
+16535:     new(&to) mpz_class(from);
+16535:     return V_LGE;
+16535:   }
+16535:   From n = rint(from);
+16535:   new(&to) mpz_class(n);
+16535:   if (from == n) {
+16535:     return V_EQ;
+16535:   }
+16535:   if (from < 0) {
+16535:     return round_lt_mpz<To_Policy>(to, dir);
+16535:   }
+16535:   else {
+16535:     return round_gt_mpz<To_Policy>(to, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpz_class, float> { static inline Result function( mpz_class& arg1, const float &arg2, Rounding_Dir a1) { return construct_mpz_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpz_class, double> { static inline Result function( mpz_class& arg1, const double &arg2, Rounding_Dir a1) { return construct_mpz_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, char> { static inline Result function( mpz_class& arg1, const char &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, signed char> { static inline Result function( mpz_class& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, signed short> { static inline Result function( mpz_class& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, signed int> { static inline Result function( mpz_class& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, signed long> { static inline Result function( mpz_class& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, unsigned char> { static inline Result function( mpz_class& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, unsigned short> { static inline Result function( mpz_class& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, unsigned int> { static inline Result function( mpz_class& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, unsigned long> { static inline Result function( mpz_class& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename From>
+16535: inline Result
+16535: assign_mpz_signed_int(mpz_class& to, const From from, Rounding_Dir) {
+16535:   if (sizeof(From) <= sizeof(signed long)) {
+16535:     to = static_cast<signed long>(from);
+16535:   }
+16535:   else {
+16535:     mpz_ptr m = to.get_mpz_t();
+16535:     if (from >= 0) {
+16535:       
+16535: # 255 "../../src/checked_mpz_inlines.hh" 3 4
+16535:      __gmpz_import
+16535: # 255 "../../src/checked_mpz_inlines.hh"
+16535:                (m, 1, 1, sizeof(From), 0, 0, &from);
+16535:     }
+16535:     else {
+16535:       From n = -from;
+16535:       
+16535: # 259 "../../src/checked_mpz_inlines.hh" 3 4
+16535:      __gmpz_import
+16535: # 259 "../../src/checked_mpz_inlines.hh"
+16535:                (m, 1, 1, sizeof(From), 0, 0, &n);
+16535:       
+16535: # 260 "../../src/checked_mpz_inlines.hh" 3 4
+16535:      __gmpz_neg
+16535: # 260 "../../src/checked_mpz_inlines.hh"
+16535:             (m, m);
+16535:     }
+16535:   }
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, signed long long> { static inline Result function( mpz_class& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_mpz_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename From>
+16535: inline Result
+16535: assign_mpz_unsigned_int(mpz_class& to, const From from, Rounding_Dir) {
+16535:   if (sizeof(From) <= sizeof(unsigned long)) {
+16535:     to = static_cast<unsigned long>(from);
+16535:   }
+16535:   else {
+16535:     
+16535: # 275 "../../src/checked_mpz_inlines.hh" 3 4
+16535:    __gmpz_import
+16535: # 275 "../../src/checked_mpz_inlines.hh"
+16535:              (to.get_mpz_t(), 1, 1, sizeof(From), 0, 0, &from);
+16535:   }
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, unsigned long long> { static inline Result function( mpz_class& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_mpz_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename From>
+16535: inline Result
+16535: assign_mpz_float(mpz_class& to, const From from, Rounding_Dir dir) {
+16535:   if (is_nan<From_Policy>(from)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (is_minf<From_Policy>(from)) {
+16535:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
+16535:   }
+16535:   else if (is_pinf<From_Policy>(from)) {
+16535:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:   }
+16535:   if (round_not_requested(dir)) {
+16535:     to = from;
+16535:     return V_LGE;
+16535:   }
+16535:   From i_from = rint(from);
+16535:   to = i_from;
+16535:   if (from == i_from) {
+16535:     return V_EQ;
+16535:   }
+16535:   if (round_direct(ROUND_UP)) {
+16535:     return round_lt_mpz<To_Policy>(to, dir);
+16535:   }
+16535:   if (round_direct(ROUND_DOWN)) {
+16535:     return round_gt_mpz<To_Policy>(to, dir);
+16535:   }
+16535:   if (from < i_from) {
+16535:     return round_lt_mpz<To_Policy>(to, dir);
+16535:   }
+16535:   if (from > i_from) {
+16535:     return round_gt_mpz<To_Policy>(to, dir);
+16535:   }
+16535:   Parma_Polyhedra_Library::ppl_unreachable();
+16535:   return V_NAN;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, float> { static inline Result function( mpz_class& arg1, const float &arg2, Rounding_Dir a1) { return assign_mpz_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, double> { static inline Result function( mpz_class& arg1, const double &arg2, Rounding_Dir a1) { return assign_mpz_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename From>
+16535: inline Result
+16535: assign_mpz_long_double(mpz_class& to, const From& from, Rounding_Dir dir) {
+16535:   if (is_nan<From_Policy>(from)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (is_minf<From_Policy>(from)) {
+16535:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
+16535:   }
+16535:   else if (is_pinf<From_Policy>(from)) {
+16535:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:   }
+16535: 
+16535:   std::stringstream ss;
+16535:   output<From_Policy>(ss, from, Numeric_Format(), dir);
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_tmp; mpq_class& tmp = holder_tmp.item();
+16535: 
+16535: 
+16535: 
+16535:     input_mpq(tmp, ss);
+16535:   ((void) 0);
+16535:   return assign<To_Policy, From_Policy>(to, tmp, dir);
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, long double> { static inline Result function( mpz_class& arg1, const long double &arg2, Rounding_Dir a1) { return assign_mpz_long_double<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy>
+16535: inline Result
+16535: assign_mpz_mpq(mpz_class& to, const mpq_class& from, Rounding_Dir dir) {
+16535:   if (round_not_needed(dir)) {
+16535:     to = from.get_num();
+16535:     return V_LGE;
+16535:   }
+16535:   if (round_ignore(dir)) {
+16535:     to = from;
+16535:     return V_LGE;
+16535:   }
+16535:   const mpz_srcptr n = from.get_num().get_mpz_t();
+16535:   const mpz_srcptr d = from.get_den().get_mpz_t();
+16535:   if (round_down(dir)) {
+16535:     
+16535: # 362 "../../src/checked_mpz_inlines.hh" 3 4
+16535:    __gmpz_fdiv_q
+16535: # 362 "../../src/checked_mpz_inlines.hh"
+16535:              (to.get_mpz_t(), n, d);
+16535:     if (round_strict_relation(dir)) {
+16535:       return (
+16535: # 364 "../../src/checked_mpz_inlines.hh" 3 4
+16535:              __gmpz_divisible_p
+16535: # 364 "../../src/checked_mpz_inlines.hh"
+16535:                             (n, d) != 0) ? V_EQ : V_GT;
+16535:     }
+16535:     return V_GE;
+16535:   }
+16535:   else {
+16535:     ((void) 0);
+16535:     
+16535: # 370 "../../src/checked_mpz_inlines.hh" 3 4
+16535:    __gmpz_cdiv_q
+16535: # 370 "../../src/checked_mpz_inlines.hh"
+16535:              (to.get_mpz_t(), n, d);
+16535:     if (round_strict_relation(dir)) {
+16535:       return (
+16535: # 372 "../../src/checked_mpz_inlines.hh" 3 4
+16535:              __gmpz_divisible_p
+16535: # 372 "../../src/checked_mpz_inlines.hh"
+16535:                             (n, d) != 0) ? V_EQ : V_LT;
+16535:     }
+16535:     return V_LE;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpz_class, mpq_class> { static inline Result function( mpz_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_mpz_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy>
+16535: inline Result
+16535: neg_mpz(mpz_class& to, const mpz_class& from, Rounding_Dir) {
+16535:   
+16535: # 387 "../../src/checked_mpz_inlines.hh" 3 4
+16535:  __gmpz_neg
+16535: # 387 "../../src/checked_mpz_inlines.hh"
+16535:         (to.get_mpz_t(), from.get_mpz_t());
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return neg_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
+16535: inline Result
+16535: add_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y, Rounding_Dir) {
+16535:   to = x + y;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, mpz_class, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return add_mpz<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
+16535: inline Result
+16535: sub_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y, Rounding_Dir) {
+16535:   to = x - y;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, mpz_class, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return sub_mpz<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
+16535: inline Result
+16535: mul_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y, Rounding_Dir) {
+16535:   to = x * y;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, mpz_class, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return mul_mpz<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
+16535: inline Result
+16535: div_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y,
+16535:         Rounding_Dir dir) {
+16535:   if (((To_Policy::check_div_zero) ? (::sgn(y) == 0) : (
+16535: # 424 "../../src/checked_mpz_inlines.hh" 3 4
+16535:      (static_cast<void> (0))
+16535: # 424 "../../src/checked_mpz_inlines.hh"
+16535:      , false))) {
+16535:     return assign_nan<To_Policy>(to, V_DIV_ZERO);
+16535:   }
+16535:   const mpz_srcptr n = x.get_mpz_t();
+16535:   const mpz_srcptr d = y.get_mpz_t();
+16535:   if (round_not_needed(dir)) {
+16535:     
+16535: # 430 "../../src/checked_mpz_inlines.hh" 3 4
+16535:    __gmpz_divexact
+16535: # 430 "../../src/checked_mpz_inlines.hh"
+16535:                (to.get_mpz_t(), n, d);
+16535:     return V_LGE;
+16535:   }
+16535:   if (round_ignore(dir)) {
+16535:     
+16535: # 434 "../../src/checked_mpz_inlines.hh" 3 4
+16535:    __gmpz_cdiv_q
+16535: # 434 "../../src/checked_mpz_inlines.hh"
+16535:              (to.get_mpz_t(), n, d);
+16535:     return V_LE;
+16535:   }
+16535:   if (round_down(dir)) {
+16535:     
+16535: # 438 "../../src/checked_mpz_inlines.hh" 3 4
+16535:    __gmpz_fdiv_q
+16535: # 438 "../../src/checked_mpz_inlines.hh"
+16535:              (to.get_mpz_t(), n, d);
+16535:     if (round_strict_relation(dir)) {
+16535:       return (
+16535: # 440 "../../src/checked_mpz_inlines.hh" 3 4
+16535:              __gmpz_divisible_p
+16535: # 440 "../../src/checked_mpz_inlines.hh"
+16535:                             (n, d) != 0) ? V_EQ : V_GT;
+16535:     }
+16535:     return V_GE;
+16535:   }
+16535:   else {
+16535:     ((void) 0);
+16535:     
+16535: # 446 "../../src/checked_mpz_inlines.hh" 3 4
+16535:    __gmpz_cdiv_q
+16535: # 446 "../../src/checked_mpz_inlines.hh"
+16535:              (to.get_mpz_t(), n, d);
+16535:     if (round_strict_relation(dir)) {
+16535:       return (
+16535: # 448 "../../src/checked_mpz_inlines.hh" 3 4
+16535:              __gmpz_divisible_p
+16535: # 448 "../../src/checked_mpz_inlines.hh"
+16535:                             (n, d) != 0) ? V_EQ : V_LT;
+16535:     }
+16535:     return V_LE;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, mpz_class, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return div_mpz<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
+16535: inline Result
+16535: idiv_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y,
+16535:         Rounding_Dir) {
+16535:   if (((To_Policy::check_div_zero) ? (::sgn(y) == 0) : (
+16535: # 460 "../../src/checked_mpz_inlines.hh" 3 4
+16535:      (static_cast<void> (0))
+16535: # 460 "../../src/checked_mpz_inlines.hh"
+16535:      , false))) {
+16535:     return assign_nan<To_Policy>(to, V_DIV_ZERO);
+16535:   }
+16535:   mpz_srcptr n = x.get_mpz_t();
+16535:   mpz_srcptr d = y.get_mpz_t();
+16535:   
+16535: # 465 "../../src/checked_mpz_inlines.hh" 3 4
+16535:  __gmpz_tdiv_q
+16535: # 465 "../../src/checked_mpz_inlines.hh"
+16535:            (to.get_mpz_t(), n, d);
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, mpz_class, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return idiv_mpz<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
+16535: inline Result
+16535: rem_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y, Rounding_Dir) {
+16535:   if (((To_Policy::check_div_zero) ? (::sgn(y) == 0) : (
+16535: # 474 "../../src/checked_mpz_inlines.hh" 3 4
+16535:      (static_cast<void> (0))
+16535: # 474 "../../src/checked_mpz_inlines.hh"
+16535:      , false))) {
+16535:     return assign_nan<To_Policy>(to, V_MOD_ZERO);
+16535:   }
+16535:   to = x % y;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, mpz_class, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return rem_mpz<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy>
+16535: inline Result
+16535: add_2exp_mpz(mpz_class& to, const mpz_class& x, unsigned int exp,
+16535:              Rounding_Dir) {
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpz_class> holder_v; mpz_class& v = holder_v.item();
+16535:   v = 1;
+16535:   
+16535: # 489 "../../src/checked_mpz_inlines.hh" 3 4
+16535:  __gmpz_mul_2exp
+16535: # 489 "../../src/checked_mpz_inlines.hh"
+16535:              (v.get_mpz_t(), v.get_mpz_t(), exp);
+16535:   to = x + v;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_mpz<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy>
+16535: inline Result
+16535: sub_2exp_mpz(mpz_class& to, const mpz_class& x, unsigned int exp,
+16535:              Rounding_Dir) {
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpz_class> holder_v; mpz_class& v = holder_v.item();
+16535:   v = 1;
+16535:   
+16535: # 502 "../../src/checked_mpz_inlines.hh" 3 4
+16535:  __gmpz_mul_2exp
+16535: # 502 "../../src/checked_mpz_inlines.hh"
+16535:              (v.get_mpz_t(), v.get_mpz_t(), exp);
+16535:   to = x - v;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_mpz<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy>
+16535: inline Result
+16535: mul_2exp_mpz(mpz_class& to, const mpz_class& x, unsigned int exp,
+16535:              Rounding_Dir) {
+16535:   
+16535: # 513 "../../src/checked_mpz_inlines.hh" 3 4
+16535:  __gmpz_mul_2exp
+16535: # 513 "../../src/checked_mpz_inlines.hh"
+16535:              (to.get_mpz_t(), x.get_mpz_t(), exp);
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_mpz<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy>
+16535: inline Result
+16535: div_2exp_mpz(mpz_class& to, const mpz_class& x, unsigned int exp,
+16535:              Rounding_Dir dir) {
+16535:   const mpz_srcptr n = x.get_mpz_t();
+16535:   if (round_not_requested(dir)) {
+16535:     
+16535: # 525 "../../src/checked_mpz_inlines.hh" 3 4
+16535:    __gmpz_tdiv_q_2exp
+16535: # 525 "../../src/checked_mpz_inlines.hh"
+16535:                   (to.get_mpz_t(), x.get_mpz_t(), exp);
+16535:     return V_LGE;
+16535:   }
+16535:   if (round_down(dir)) {
+16535:     
+16535: # 529 "../../src/checked_mpz_inlines.hh" 3 4
+16535:    __gmpz_fdiv_q_2exp
+16535: # 529 "../../src/checked_mpz_inlines.hh"
+16535:                   (to.get_mpz_t(), n, exp);
+16535:     if (round_strict_relation(dir)) {
+16535:       return (
+16535: # 531 "../../src/checked_mpz_inlines.hh" 3 4
+16535:              __gmpz_divisible_2exp_p
+16535: # 531 "../../src/checked_mpz_inlines.hh"
+16535:                                  (n, exp) != 0) ? V_EQ : V_GT;
+16535:     }
+16535:     return V_GE;
+16535:   }
+16535:   else {
+16535:     ((void) 0);
+16535:     
+16535: # 537 "../../src/checked_mpz_inlines.hh" 3 4
+16535:    __gmpz_cdiv_q_2exp
+16535: # 537 "../../src/checked_mpz_inlines.hh"
+16535:                   (to.get_mpz_t(), n, exp);
+16535:     if (round_strict_relation(dir)) {
+16535:       return (
+16535: # 539 "../../src/checked_mpz_inlines.hh" 3 4
+16535:              __gmpz_divisible_2exp_p
+16535: # 539 "../../src/checked_mpz_inlines.hh"
+16535:                                  (n, exp) != 0) ? V_EQ : V_LT;
+16535:     }
+16535:     return V_LE;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_mpz<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy>
+16535: inline Result
+16535: smod_2exp_mpz(mpz_class& to, const mpz_class& x, unsigned int exp,
+16535:               Rounding_Dir) {
+16535:   if (
+16535: # 551 "../../src/checked_mpz_inlines.hh" 3 4
+16535:      __gmpz_tstbit
+16535: # 551 "../../src/checked_mpz_inlines.hh"
+16535:                (x.get_mpz_t(), exp - 1) != 0) {
+16535:     
+16535: # 552 "../../src/checked_mpz_inlines.hh" 3 4
+16535:    __gmpz_cdiv_r_2exp
+16535: # 552 "../../src/checked_mpz_inlines.hh"
+16535:                   (to.get_mpz_t(), x.get_mpz_t(), exp);
+16535:   }
+16535:   else {
+16535:     
+16535: # 555 "../../src/checked_mpz_inlines.hh" 3 4
+16535:    __gmpz_fdiv_r_2exp
+16535: # 555 "../../src/checked_mpz_inlines.hh"
+16535:                   (to.get_mpz_t(), x.get_mpz_t(), exp);
+16535:   }
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_mpz<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy>
+16535: inline Result
+16535: umod_2exp_mpz(mpz_class& to, const mpz_class& x, unsigned int exp,
+16535:               Rounding_Dir) {
+16535:   
+16535: # 566 "../../src/checked_mpz_inlines.hh" 3 4
+16535:  __gmpz_fdiv_r_2exp
+16535: # 566 "../../src/checked_mpz_inlines.hh"
+16535:                 (to.get_mpz_t(), x.get_mpz_t(), exp);
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_mpz<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy>
+16535: inline Result
+16535: abs_mpz(mpz_class& to, const mpz_class& from, Rounding_Dir) {
+16535:   to = abs(from);
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return abs_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
+16535: inline Result
+16535: add_mul_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y,
+16535:             Rounding_Dir) {
+16535:   
+16535: # 585 "../../src/checked_mpz_inlines.hh" 3 4
+16535:  __gmpz_addmul
+16535: # 585 "../../src/checked_mpz_inlines.hh"
+16535:            (to.get_mpz_t(), x.get_mpz_t(), y.get_mpz_t());
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, mpz_class, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return add_mul_mpz<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
+16535: inline Result
+16535: sub_mul_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y,
+16535:             Rounding_Dir) {
+16535:   
+16535: # 595 "../../src/checked_mpz_inlines.hh" 3 4
+16535:  __gmpz_submul
+16535: # 595 "../../src/checked_mpz_inlines.hh"
+16535:            (to.get_mpz_t(), x.get_mpz_t(), y.get_mpz_t());
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, mpz_class, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return sub_mul_mpz<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
+16535: inline Result
+16535: gcd_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y, Rounding_Dir) {
+16535:   
+16535: # 604 "../../src/checked_mpz_inlines.hh" 3 4
+16535:  __gmpz_gcd
+16535: # 604 "../../src/checked_mpz_inlines.hh"
+16535:         (to.get_mpz_t(), x.get_mpz_t(), y.get_mpz_t());
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct gcd_function_struct <Policy1, Policy2, Policy3, mpz_class, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return gcd_mpz<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
+16535: inline Result
+16535: gcdext_mpz(mpz_class& to, mpz_class& s, mpz_class& t,
+16535:            const mpz_class& x, const mpz_class& y,
+16535:            Rounding_Dir) {
+16535:   
+16535: # 615 "../../src/checked_mpz_inlines.hh" 3 4
+16535:  __gmpz_gcdext
+16535: # 615 "../../src/checked_mpz_inlines.hh"
+16535:            (to.get_mpz_t(), s.get_mpz_t(), t.get_mpz_t(),
+16535:              x.get_mpz_t(), y.get_mpz_t());
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3, typename Policy4, typename Policy5> struct gcdext_function_struct <Policy1, Policy2, Policy3, Policy4, Policy5, mpz_class, mpz_class, mpz_class, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, mpz_class &arg2, mpz_class &arg3, const mpz_class &arg4, const mpz_class &arg5, Rounding_Dir a1) { return gcdext_mpz<Policy1, Policy2, Policy3, Policy4, Policy5>(arg1, arg2, arg3, arg4, arg5, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
+16535: inline Result
+16535: lcm_mpz(mpz_class& to, const mpz_class& x, const mpz_class& y, Rounding_Dir) {
+16535:   
+16535: # 625 "../../src/checked_mpz_inlines.hh" 3 4
+16535:  __gmpz_lcm
+16535: # 625 "../../src/checked_mpz_inlines.hh"
+16535:         (to.get_mpz_t(), x.get_mpz_t(), y.get_mpz_t());
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct lcm_function_struct <Policy1, Policy2, Policy3, mpz_class, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, const mpz_class &arg3, Rounding_Dir a1) { return lcm_mpz<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy>
+16535: inline Result
+16535: sqrt_mpz(mpz_class& to, const mpz_class& from, Rounding_Dir dir) {
+16535:   if (((To_Policy::check_sqrt_neg) ? (from < 0) : (
+16535: # 634 "../../src/checked_mpz_inlines.hh" 3 4
+16535:      (static_cast<void> (0))
+16535: # 634 "../../src/checked_mpz_inlines.hh"
+16535:      , false))) {
+16535:     return assign_nan<To_Policy>(to, V_SQRT_NEG);
+16535:   }
+16535:   if (round_not_requested(dir)) {
+16535:     to = sqrt(from);
+16535:     return V_GE;
+16535:   }
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpz_class> holder_r; mpz_class& r = holder_r.item();
+16535:   
+16535: # 642 "../../src/checked_mpz_inlines.hh" 3 4
+16535:  __gmpz_sqrtrem
+16535: # 642 "../../src/checked_mpz_inlines.hh"
+16535:             (to.get_mpz_t(), r.get_mpz_t(), from.get_mpz_t());
+16535:   if (r == 0) {
+16535:     return V_EQ;
+16535:   }
+16535:   return round_gt_mpz<To_Policy>(to, dir);
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result function( mpz_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return sqrt_mpz<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename Policy, typename Type>
+16535: inline Result_Relation
+16535: sgn_mp(const Type& x) {
+16535:   const int sign = ::sgn(x);
+16535:   return (sign > 0) ? VR_GT : ((sign < 0) ? VR_LT : VR_EQ);
+16535: }
+16535: 
+16535: template <typename Policy> struct sgn_function_struct<Policy, mpz_class> { static inline Result_Relation function(const mpz_class& arg) { return sgn_mp<Policy>(arg); } };
+16535: template <typename Policy> struct sgn_function_struct<Policy, mpq_class> { static inline Result_Relation function(const mpq_class& arg) { return sgn_mp<Policy>(arg); } };
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Type>
+16535: inline Result_Relation
+16535: cmp_mp(const Type& x, const Type& y) {
+16535:   int i = ::cmp(x, y);
+16535:   return (i > 0) ? VR_GT : ((i < 0) ? VR_LT : VR_EQ);
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, mpz_class, mpz_class> { static inline Result_Relation function(const mpz_class& arg1, const mpz_class &arg2) { return cmp_mp<Policy1, Policy2>(arg1, arg2); } };
+16535: template <typename Policy1, typename Policy2> struct cmp_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result_Relation function(const mpq_class& arg1, const mpq_class &arg2) { return cmp_mp<Policy1, Policy2>(arg1, arg2); } };
+16535: 
+16535: template <typename Policy>
+16535: inline Result
+16535: output_mpz(std::ostream& os, const mpz_class& from, const Numeric_Format&,
+16535:            Rounding_Dir) {
+16535:   os << from;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy> struct input_function_struct<Policy, mpz_class> { static inline Result function( mpz_class& arg, std::istream& a1, Rounding_Dir a2) { return input_generic<Policy>(arg, a1, a2); } };
+16535: template <typename Policy> struct output_function_struct<Policy, mpz_class> { static inline Result function(std::ostream& b1, const mpz_class& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_mpz<Policy>(b1, arg, a1, a2); } };
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 704 "../../src/checked_defs.hh" 2
+16535: # 1 "../../src/checked_mpq_inlines.hh" 1
+16535: # 28 "../../src/checked_mpq_inlines.hh"
+16535: # 1 "/usr/include/c++/8/climits" 1 3
+16535: # 39 "/usr/include/c++/8/climits" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/climits" 3
+16535: 
+16535: 
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 1 3 4
+16535: # 43 "/usr/include/c++/8/climits" 2 3
+16535: # 29 "../../src/checked_mpq_inlines.hh" 2
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Checked {
+16535: 
+16535: template <typename Policy>
+16535: inline Result
+16535: classify_mpq(const mpq_class& v, bool nan, bool inf, bool sign) {
+16535:   if ((Policy::has_nan || Policy::has_infinity)
+16535:       && ::sgn(v.get_den()) == 0) {
+16535:     int s = ::sgn(v.get_num());
+16535:     if (Policy::has_nan && (nan || sign) && s == 0) {
+16535:       return V_NAN;
+16535:     }
+16535:     if (!inf && !sign) {
+16535:       return V_LGE;
+16535:     }
+16535:     if (Policy::has_infinity) {
+16535:       if (s < 0) {
+16535:         return inf ? V_EQ_MINUS_INFINITY : V_LT;
+16535:       }
+16535:       if (s > 0) {
+16535:         return inf ? V_EQ_PLUS_INFINITY : V_GT;
+16535:       }
+16535:     }
+16535:   }
+16535:   if (sign) {
+16535:     return static_cast<Result>(sgn<Policy>(v));
+16535:   }
+16535:   return V_LGE;
+16535: }
+16535: 
+16535: template <typename Policy> struct classify_function_struct<Policy, mpq_class> { static inline Result function(const mpq_class& arg, bool a1, bool a2, bool a3) { return classify_mpq<Policy>(arg, a1, a2, a3); } };
+16535: 
+16535: template <typename Policy>
+16535: inline bool
+16535: is_nan_mpq(const mpq_class& v) {
+16535:   return Policy::has_nan
+16535:     && ::sgn(v.get_den()) == 0
+16535:     && ::sgn(v.get_num()) == 0;
+16535: }
+16535: 
+16535: template <typename Policy> struct is_nan_function_struct<Policy, mpq_class> { static inline bool function(const mpq_class& arg) { return is_nan_mpq<Policy>(arg); } };
+16535: 
+16535: template <typename Policy>
+16535: inline bool
+16535: is_minf_mpq(const mpq_class& v) {
+16535:   return Policy::has_infinity
+16535:     && ::sgn(v.get_den()) == 0
+16535:     && ::sgn(v.get_num()) < 0;
+16535: }
+16535: 
+16535: template <typename Policy> struct is_minf_function_struct<Policy, mpq_class> { static inline bool function(const mpq_class& arg) { return is_minf_mpq<Policy>(arg); } };
+16535: 
+16535: template <typename Policy>
+16535: inline bool
+16535: is_pinf_mpq(const mpq_class& v) {
+16535:   return Policy::has_infinity
+16535:     && ::sgn(v.get_den()) == 0
+16535:     && ::sgn(v.get_num()) > 0;
+16535: }
+16535: 
+16535: template <typename Policy> struct is_pinf_function_struct<Policy, mpq_class> { static inline bool function(const mpq_class& arg) { return is_pinf_mpq<Policy>(arg); } };
+16535: 
+16535: template <typename Policy>
+16535: inline bool
+16535: is_int_mpq(const mpq_class& v) {
+16535:   if ((Policy::has_infinity || Policy::has_nan)
+16535:       && ::sgn(v.get_den()) == 0) {
+16535:     return !(Policy::has_nan && ::sgn(v.get_num()) == 0);
+16535:   }
+16535:   else {
+16535:     return v.get_den() == 1;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Policy> struct is_int_function_struct<Policy, mpq_class> { static inline bool function(const mpq_class& arg) { return is_int_mpq<Policy>(arg); } };
+16535: 
+16535: template <typename Policy>
+16535: inline Result
+16535: assign_special_mpq(mpq_class& v, Result_Class c, Rounding_Dir) {
+16535:   switch (c) {
+16535:   case VC_NAN:
+16535:     if (Policy::has_nan) {
+16535:       v.get_num() = 0;
+16535:       v.get_den() = 0;
+16535:       return V_NAN | V_UNREPRESENTABLE;
+16535:     }
+16535:     return V_NAN;
+16535:   case VC_MINUS_INFINITY:
+16535:     if (Policy::has_infinity) {
+16535:       v.get_num() = -1;
+16535:       v.get_den() = 0;
+16535:       return V_EQ_MINUS_INFINITY;
+16535:     }
+16535:     return V_EQ_MINUS_INFINITY | V_UNREPRESENTABLE;
+16535:   case VC_PLUS_INFINITY:
+16535:     if (Policy::has_infinity) {
+16535:       v.get_num() = 1;
+16535:       v.get_den() = 0;
+16535:       return V_EQ_PLUS_INFINITY;
+16535:     }
+16535:     return V_EQ_PLUS_INFINITY | V_UNREPRESENTABLE;
+16535:   default:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return V_NAN | V_UNREPRESENTABLE;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Policy> struct assign_special_function_struct<Policy, mpq_class> { static inline Result function( mpq_class& arg, Result_Class a1, Rounding_Dir a2) { return assign_special_mpq<Policy>(arg, a1, a2); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct copy_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline void function( mpq_class& arg1, const mpq_class &arg2) { return copy_generic<Policy1, Policy2>(arg1, arg2); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename From>
+16535: inline Result
+16535: construct_mpq_base(mpq_class& to, const From& from, Rounding_Dir) {
+16535:   new(&to) mpq_class(from);
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, mpz_class> { static inline Result function( mpq_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return construct_mpq_base<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, char> { static inline Result function( mpq_class& arg1, const char &arg2, Rounding_Dir a1) { return construct_mpq_base<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, signed char> { static inline Result function( mpq_class& arg1, const signed char &arg2, Rounding_Dir a1) { return construct_mpq_base<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, signed short> { static inline Result function( mpq_class& arg1, const signed short &arg2, Rounding_Dir a1) { return construct_mpq_base<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, signed int> { static inline Result function( mpq_class& arg1, const signed int &arg2, Rounding_Dir a1) { return construct_mpq_base<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, signed long> { static inline Result function( mpq_class& arg1, const signed long &arg2, Rounding_Dir a1) { return construct_mpq_base<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, unsigned char> { static inline Result function( mpq_class& arg1, const unsigned char &arg2, Rounding_Dir a1) { return construct_mpq_base<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, unsigned short> { static inline Result function( mpq_class& arg1, const unsigned short &arg2, Rounding_Dir a1) { return construct_mpq_base<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, unsigned int> { static inline Result function( mpq_class& arg1, const unsigned int &arg2, Rounding_Dir a1) { return construct_mpq_base<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, unsigned long> { static inline Result function( mpq_class& arg1, const unsigned long &arg2, Rounding_Dir a1) { return construct_mpq_base<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename From>
+16535: inline Result
+16535: construct_mpq_float(mpq_class& to, const From& from, Rounding_Dir dir) {
+16535:   if (is_nan<From_Policy>(from)) {
+16535:     return construct_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (is_minf<From_Policy>(from)) {
+16535:     return construct_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
+16535:   }
+16535:   else if (is_pinf<From_Policy>(from)) {
+16535:     return construct_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:   }
+16535:   new(&to) mpq_class(from);
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, float> { static inline Result function( mpq_class& arg1, const float &arg2, Rounding_Dir a1) { return construct_mpq_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct construct_function_struct<Policy1, Policy2, mpq_class, double> { static inline Result function( mpq_class& arg1, const double &arg2, Rounding_Dir a1) { return construct_mpq_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, mpz_class> { static inline Result function( mpq_class& arg1, const mpz_class &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, char> { static inline Result function( mpq_class& arg1, const char &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, signed char> { static inline Result function( mpq_class& arg1, const signed char &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, signed short> { static inline Result function( mpq_class& arg1, const signed short &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, signed int> { static inline Result function( mpq_class& arg1, const signed int &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, signed long> { static inline Result function( mpq_class& arg1, const signed long &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, unsigned char> { static inline Result function( mpq_class& arg1, const unsigned char &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, unsigned short> { static inline Result function( mpq_class& arg1, const unsigned short &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, unsigned int> { static inline Result function( mpq_class& arg1, const unsigned int &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, unsigned long> { static inline Result function( mpq_class& arg1, const unsigned long &arg2, Rounding_Dir a1) { return assign_exact<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename From>
+16535: inline Result
+16535: assign_mpq_float(mpq_class& to, const From& from, Rounding_Dir dir) {
+16535:   if (is_nan<From_Policy>(from)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (is_minf<From_Policy>(from)) {
+16535:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
+16535:   }
+16535:   else if (is_pinf<From_Policy>(from)) {
+16535:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:   }
+16535:   assign_mpq_numeric_float(to, from);
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, float> { static inline Result function( mpq_class& arg1, const float &arg2, Rounding_Dir a1) { return assign_mpq_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, double> { static inline Result function( mpq_class& arg1, const double &arg2, Rounding_Dir a1) { return assign_mpq_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, long double> { static inline Result function( mpq_class& arg1, const long double &arg2, Rounding_Dir a1) { return assign_mpq_float<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename From>
+16535: inline Result
+16535: assign_mpq_signed_int(mpq_class& to, const From from, Rounding_Dir) {
+16535:   if (sizeof(From) <= sizeof(signed long)) {
+16535:     to = static_cast<signed long>(from);
+16535:   }
+16535:   else {
+16535:     mpz_ptr m = to.get_num().get_mpz_t();
+16535:     if (from >= 0) {
+16535:       
+16535: # 221 "../../src/checked_mpq_inlines.hh" 3 4
+16535:      __gmpz_import
+16535: # 221 "../../src/checked_mpq_inlines.hh"
+16535:                (m, 1, 1, sizeof(From), 0, 0, &from);
+16535:     }
+16535:     else {
+16535:       From n = -from;
+16535:       
+16535: # 225 "../../src/checked_mpq_inlines.hh" 3 4
+16535:      __gmpz_import
+16535: # 225 "../../src/checked_mpq_inlines.hh"
+16535:                (m, 1, 1, sizeof(From), 0, 0, &n);
+16535:       
+16535: # 226 "../../src/checked_mpq_inlines.hh" 3 4
+16535:      __gmpz_neg
+16535: # 226 "../../src/checked_mpq_inlines.hh"
+16535:             (m, m);
+16535:     }
+16535:     to.get_den() = 1;
+16535:   }
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, signed long long> { static inline Result function( mpq_class& arg1, const signed long long &arg2, Rounding_Dir a1) { return assign_mpq_signed_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy, typename From>
+16535: inline Result
+16535: assign_mpq_unsigned_int(mpq_class& to, const From from, Rounding_Dir) {
+16535:   if (sizeof(From) <= sizeof(unsigned long)) {
+16535:     to = static_cast<unsigned long>(from);
+16535:   }
+16535:   else {
+16535:     
+16535: # 242 "../../src/checked_mpq_inlines.hh" 3 4
+16535:    __gmpz_import
+16535: # 242 "../../src/checked_mpq_inlines.hh"
+16535:              (to.get_num().get_mpz_t(), 1, 1, sizeof(From), 0, 0, &from);
+16535:     to.get_den() = 1;
+16535:   }
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct assign_function_struct<Policy1, Policy2, mpq_class, unsigned long long> { static inline Result function( mpq_class& arg1, const unsigned long long &arg2, Rounding_Dir a1) { return assign_mpq_unsigned_int<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy>
+16535: inline Result
+16535: floor_mpq(mpq_class& to, const mpq_class& from, Rounding_Dir) {
+16535:   
+16535: # 253 "../../src/checked_mpq_inlines.hh" 3 4
+16535:  __gmpz_fdiv_q
+16535: # 253 "../../src/checked_mpq_inlines.hh"
+16535:            (to.get_num().get_mpz_t(),
+16535:              from.get_num().get_mpz_t(), from.get_den().get_mpz_t());
+16535:   to.get_den() = 1;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct floor_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return floor_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy>
+16535: inline Result
+16535: ceil_mpq(mpq_class& to, const mpq_class& from, Rounding_Dir) {
+16535:   
+16535: # 264 "../../src/checked_mpq_inlines.hh" 3 4
+16535:  __gmpz_cdiv_q
+16535: # 264 "../../src/checked_mpq_inlines.hh"
+16535:            (to.get_num().get_mpz_t(),
+16535:              from.get_num().get_mpz_t(), from.get_den().get_mpz_t());
+16535:   to.get_den() = 1;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct ceil_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return ceil_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy>
+16535: inline Result
+16535: trunc_mpq(mpq_class& to, const mpq_class& from, Rounding_Dir) {
+16535:   
+16535: # 275 "../../src/checked_mpq_inlines.hh" 3 4
+16535:  __gmpz_tdiv_q
+16535: # 275 "../../src/checked_mpq_inlines.hh"
+16535:            (to.get_num().get_mpz_t(),
+16535:              from.get_num().get_mpz_t(), from.get_den().get_mpz_t());
+16535:   to.get_den() = 1;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct trunc_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return trunc_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy>
+16535: inline Result
+16535: neg_mpq(mpq_class& to, const mpq_class& from, Rounding_Dir) {
+16535:   
+16535: # 286 "../../src/checked_mpq_inlines.hh" 3 4
+16535:  __gmpq_neg
+16535: # 286 "../../src/checked_mpq_inlines.hh"
+16535:         (to.get_mpq_t(), from.get_mpq_t());
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct neg_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return neg_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
+16535: inline Result
+16535: add_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y, Rounding_Dir) {
+16535:   to = x + y;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_function_struct <Policy1, Policy2, Policy3, mpq_class, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return add_mpq<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
+16535: inline Result
+16535: sub_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y, Rounding_Dir) {
+16535:   to = x - y;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_function_struct <Policy1, Policy2, Policy3, mpq_class, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return sub_mpq<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
+16535: inline Result
+16535: mul_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y, Rounding_Dir) {
+16535:   to = x * y;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct mul_function_struct <Policy1, Policy2, Policy3, mpq_class, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return mul_mpq<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
+16535: inline Result
+16535: div_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y, Rounding_Dir) {
+16535:   if (((To_Policy::check_div_zero) ? (sgn(y) == 0) : (
+16535: # 322 "../../src/checked_mpq_inlines.hh" 3 4
+16535:      (static_cast<void> (0))
+16535: # 322 "../../src/checked_mpq_inlines.hh"
+16535:      , false))) {
+16535:     return assign_nan<To_Policy>(to, V_DIV_ZERO);
+16535:   }
+16535:   to = x / y;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct div_function_struct <Policy1, Policy2, Policy3, mpq_class, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return div_mpq<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
+16535: inline Result
+16535: idiv_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y, Rounding_Dir dir) {
+16535:   if (((To_Policy::check_div_zero) ? (sgn(y) == 0) : (
+16535: # 334 "../../src/checked_mpq_inlines.hh" 3 4
+16535:      (static_cast<void> (0))
+16535: # 334 "../../src/checked_mpq_inlines.hh"
+16535:      , false))) {
+16535:     return assign_nan<To_Policy>(to, V_DIV_ZERO);
+16535:   }
+16535:   to = x / y;
+16535:   return trunc<To_Policy, To_Policy>(to, to, dir);
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct idiv_function_struct <Policy1, Policy2, Policy3, mpq_class, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return idiv_mpq<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
+16535: inline Result
+16535: rem_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y, Rounding_Dir) {
+16535:   if (((To_Policy::check_div_zero) ? (sgn(y) == 0) : (
+16535: # 346 "../../src/checked_mpq_inlines.hh" 3 4
+16535:      (static_cast<void> (0))
+16535: # 346 "../../src/checked_mpq_inlines.hh"
+16535:      , false))) {
+16535:     return assign_nan<To_Policy>(to, V_MOD_ZERO);
+16535:   }
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_tmp; mpq_class& tmp = holder_tmp.item();
+16535:   tmp = x / y;
+16535:   tmp.get_num() %= tmp.get_den();
+16535:   to = tmp * y;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct rem_function_struct <Policy1, Policy2, Policy3, mpq_class, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return rem_mpq<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy>
+16535: inline Result
+16535: add_2exp_mpq(mpq_class& to, const mpq_class& x, unsigned int exp,
+16535:              Rounding_Dir) {
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpz_class> holder_v; mpz_class& v = holder_v.item();
+16535:   v = 1;
+16535:   
+16535: # 364 "../../src/checked_mpq_inlines.hh" 3 4
+16535:  __gmpz_mul_2exp
+16535: # 364 "../../src/checked_mpq_inlines.hh"
+16535:              (v.get_mpz_t(), v.get_mpz_t(), exp);
+16535:   to = x + v;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct add_2exp_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, unsigned int a1, Rounding_Dir a2) { return add_2exp_mpq<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy>
+16535: inline Result
+16535: sub_2exp_mpq(mpq_class& to, const mpq_class& x, unsigned int exp,
+16535:              Rounding_Dir) {
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpz_class> holder_v; mpz_class& v = holder_v.item();
+16535:   v = 1;
+16535:   
+16535: # 377 "../../src/checked_mpq_inlines.hh" 3 4
+16535:  __gmpz_mul_2exp
+16535: # 377 "../../src/checked_mpq_inlines.hh"
+16535:              (v.get_mpz_t(), v.get_mpz_t(), exp);
+16535:   to = x - v;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct sub_2exp_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, unsigned int a1, Rounding_Dir a2) { return sub_2exp_mpq<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy>
+16535: inline Result
+16535: mul_2exp_mpq(mpq_class& to, const mpq_class& x, unsigned int exp,
+16535:              Rounding_Dir) {
+16535:   
+16535: # 388 "../../src/checked_mpq_inlines.hh" 3 4
+16535:  __gmpz_mul_2exp
+16535: # 388 "../../src/checked_mpq_inlines.hh"
+16535:              (to.get_num().get_mpz_t(), x.get_num().get_mpz_t(), exp);
+16535:   to.get_den() = x.get_den();
+16535:   to.canonicalize();
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct mul_2exp_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, unsigned int a1, Rounding_Dir a2) { return mul_2exp_mpq<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy>
+16535: inline Result
+16535: div_2exp_mpq(mpq_class& to, const mpq_class& x, unsigned int exp,
+16535:              Rounding_Dir) {
+16535:   to.get_num() = x.get_num();
+16535:   
+16535: # 401 "../../src/checked_mpq_inlines.hh" 3 4
+16535:  __gmpz_mul_2exp
+16535: # 401 "../../src/checked_mpq_inlines.hh"
+16535:              (to.get_den().get_mpz_t(), x.get_den().get_mpz_t(), exp);
+16535:   to.canonicalize();
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct div_2exp_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, unsigned int a1, Rounding_Dir a2) { return div_2exp_mpq<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy>
+16535: inline Result
+16535: smod_2exp_mpq(mpq_class& to, const mpq_class& x, unsigned int exp,
+16535:               Rounding_Dir) {
+16535:   
+16535: # 412 "../../src/checked_mpq_inlines.hh" 3 4
+16535:  __gmpz_mul_2exp
+16535: # 412 "../../src/checked_mpq_inlines.hh"
+16535:              (to.get_den().get_mpz_t(), x.get_den().get_mpz_t(), exp);
+16535:   
+16535: # 413 "../../src/checked_mpq_inlines.hh" 3 4
+16535:  __gmpz_fdiv_r
+16535: # 413 "../../src/checked_mpq_inlines.hh"
+16535:            (to.get_num().get_mpz_t(), x.get_num().get_mpz_t(), to.get_den().get_mpz_t());
+16535:   
+16535: # 414 "../../src/checked_mpq_inlines.hh" 3 4
+16535:  __gmpz_fdiv_q_2exp
+16535: # 414 "../../src/checked_mpq_inlines.hh"
+16535:                 (to.get_den().get_mpz_t(), to.get_den().get_mpz_t(), 1);
+16535:   bool neg = to.get_num() >= to.get_den();
+16535:   
+16535: # 416 "../../src/checked_mpq_inlines.hh" 3 4
+16535:  __gmpz_mul_2exp
+16535: # 416 "../../src/checked_mpq_inlines.hh"
+16535:              (to.get_den().get_mpz_t(), to.get_den().get_mpz_t(), 1);
+16535:   if (neg) {
+16535:     to.get_num() -= to.get_den();
+16535:   }
+16535:   
+16535: # 420 "../../src/checked_mpq_inlines.hh" 3 4
+16535:  __gmpz_mul_2exp
+16535: # 420 "../../src/checked_mpq_inlines.hh"
+16535:              (to.get_num().get_mpz_t(), to.get_num().get_mpz_t(), exp);
+16535:   to.canonicalize();
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct smod_2exp_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, unsigned int a1, Rounding_Dir a2) { return smod_2exp_mpq<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy>
+16535: inline Result
+16535: umod_2exp_mpq(mpq_class& to, const mpq_class& x, unsigned int exp,
+16535:               Rounding_Dir) {
+16535:   
+16535: # 431 "../../src/checked_mpq_inlines.hh" 3 4
+16535:  __gmpz_mul_2exp
+16535: # 431 "../../src/checked_mpq_inlines.hh"
+16535:              (to.get_den().get_mpz_t(), x.get_den().get_mpz_t(), exp);
+16535:   
+16535: # 432 "../../src/checked_mpq_inlines.hh" 3 4
+16535:  __gmpz_fdiv_r
+16535: # 432 "../../src/checked_mpq_inlines.hh"
+16535:            (to.get_num().get_mpz_t(), x.get_num().get_mpz_t(), to.get_den().get_mpz_t());
+16535:   
+16535: # 433 "../../src/checked_mpq_inlines.hh" 3 4
+16535:  __gmpz_mul_2exp
+16535: # 433 "../../src/checked_mpq_inlines.hh"
+16535:              (to.get_num().get_mpz_t(), to.get_num().get_mpz_t(), exp);
+16535:   to.canonicalize();
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct umod_2exp_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, unsigned int a1, Rounding_Dir a2) { return umod_2exp_mpq<Policy1, Policy2>(arg1, arg2, a1, a2); } };
+16535: 
+16535: template <typename To_Policy, typename From_Policy>
+16535: inline Result
+16535: abs_mpq(mpq_class& to, const mpq_class& from, Rounding_Dir) {
+16535:   to = abs(from);
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct abs_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return abs_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
+16535: inline Result
+16535: add_mul_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y,
+16535:             Rounding_Dir) {
+16535:   to += x * y;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct add_mul_function_struct <Policy1, Policy2, Policy3, mpq_class, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return add_mul_mpq<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy>
+16535: inline Result
+16535: sub_mul_mpq(mpq_class& to, const mpq_class& x, const mpq_class& y,
+16535:             Rounding_Dir) {
+16535:   to -= x * y;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2, typename Policy3> struct sub_mul_function_struct <Policy1, Policy2, Policy3, mpq_class, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, const mpq_class &arg3, Rounding_Dir a1) { return sub_mul_mpq<Policy1, Policy2, Policy3>(arg1, arg2, arg3, a1); } };
+16535: 
+16535: extern unsigned irrational_precision;
+16535: 
+16535: template <typename To_Policy, typename From_Policy>
+16535: inline Result
+16535: sqrt_mpq(mpq_class& to, const mpq_class& from, Rounding_Dir dir) {
+16535:   if (((To_Policy::check_sqrt_neg) ? (from < 0) : (
+16535: # 474 "../../src/checked_mpq_inlines.hh" 3 4
+16535:      (static_cast<void> (0))
+16535: # 474 "../../src/checked_mpq_inlines.hh"
+16535:      , false))) {
+16535:     return assign_nan<To_Policy>(to, V_SQRT_NEG);
+16535:   }
+16535:   if (from == 0) {
+16535:     to = 0;
+16535:     return V_EQ;
+16535:   }
+16535:   bool gt1 = from.get_num() > from.get_den();
+16535:   const mpz_class& from_a = gt1 ? from.get_num() : from.get_den();
+16535:   const mpz_class& from_b = gt1 ? from.get_den() : from.get_num();
+16535:   mpz_class& to_a = gt1 ? to.get_num() : to.get_den();
+16535:   mpz_class& to_b = gt1 ? to.get_den() : to.get_num();
+16535:   Rounding_Dir rdir = gt1 ? dir : inverse(dir);
+16535:   mul_2exp<To_Policy, From_Policy>(to_a, from_a,
+16535:                                    2*irrational_precision, ROUND_IGNORE);
+16535:   Result r_div
+16535:     = div<To_Policy, To_Policy, To_Policy>(to_a, to_a, from_b, rdir);
+16535:   Result r_sqrt = sqrt<To_Policy, To_Policy>(to_a, to_a, rdir);
+16535:   to_b = 1;
+16535:   mul_2exp<To_Policy, To_Policy>(to_b, to_b,
+16535:                                  irrational_precision, ROUND_IGNORE);
+16535:   to.canonicalize();
+16535:   return (r_div != V_EQ) ? r_div : r_sqrt;
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2> struct sqrt_function_struct<Policy1, Policy2, mpq_class, mpq_class> { static inline Result function( mpq_class& arg1, const mpq_class &arg2, Rounding_Dir a1) { return sqrt_mpq<Policy1, Policy2>(arg1, arg2, a1); } };
+16535: 
+16535: template <typename Policy>
+16535: inline Result
+16535: input_mpq(mpq_class& to, std::istream& is, Rounding_Dir dir) {
+16535:   Result r = input_mpq(to, is);
+16535:   Result_Class c = result_class(r);
+16535:   switch (c) {
+16535:   case VC_MINUS_INFINITY:
+16535:   case VC_PLUS_INFINITY:
+16535:     return assign_special<Policy>(to, c, dir);
+16535:   case VC_NAN:
+16535:     return assign_nan<Policy>(to, r);
+16535:   default:
+16535:     return r;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Policy> struct input_function_struct<Policy, mpq_class> { static inline Result function( mpq_class& arg, std::istream& a1, Rounding_Dir a2) { return input_mpq<Policy>(arg, a1, a2); } };
+16535: 
+16535: template <typename Policy>
+16535: inline Result
+16535: output_mpq(std::ostream& os,
+16535:            const mpq_class& from,
+16535:            const Numeric_Format&,
+16535:            Rounding_Dir) {
+16535:   os << from;
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename Policy> struct output_function_struct<Policy, mpq_class> { static inline Result function(std::ostream& b1, const mpq_class& arg, const Numeric_Format& a1, Rounding_Dir a2) { return output_mpq<Policy>(b1, arg, a1, a2); } };
+16535: 
+16535: }
+16535: 
+16535: 
+16535: inline unsigned
+16535: irrational_precision() {
+16535:   return Checked::irrational_precision;
+16535: }
+16535: # 548 "../../src/checked_mpq_inlines.hh"
+16535: inline void
+16535: set_irrational_precision(const unsigned p) {
+16535:   if (p <= 0x7fffffff) {
+16535:     Checked::irrational_precision = p;
+16535:   }
+16535:   else {
+16535:     throw std::invalid_argument("PPL::set_irrational_precision(p)"
+16535:                                 " with p > INT_MAX");
+16535:   }
+16535: }
+16535: 
+16535: }
+16535: # 705 "../../src/checked_defs.hh" 2
+16535: # 1 "../../src/checked_ext_inlines.hh" 1
+16535: # 27 "../../src/checked_ext_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T> struct FPU_Related : public False {};
+16535: template <> struct FPU_Related<float> : public True {};
+16535: template <> struct FPU_Related<double> : public True {};
+16535: template <> struct FPU_Related<long double> : public True {};
+16535: 
+16535: namespace Checked {
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: handle_ext_natively(const T&) {
+16535:   return FPU_Related<T>::value;
+16535: }
+16535: 
+16535: template <typename Policy, typename Type>
+16535: inline bool
+16535: ext_to_handle(const Type& x) {
+16535:   return !handle_ext_natively(x)
+16535:     && (Policy::has_infinity || Policy::has_nan);
+16535: }
+16535: 
+16535: template <typename Policy, typename Type>
+16535: inline Result_Relation
+16535: sgn_ext(const Type& x) {
+16535:   if (!ext_to_handle<Policy>(x)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<Policy>(x)) {
+16535:     return VR_EMPTY;
+16535:   }
+16535:   else if (is_minf<Policy>(x)) {
+16535:     return VR_LT;
+16535:   }
+16535:   else if (is_pinf<Policy>(x)) {
+16535:     return VR_GT;
+16535:   }
+16535:   else {
+16535:   native:
+16535:     return sgn<Policy>(x);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy,
+16535:           typename To, typename From>
+16535: inline Result
+16535: construct_ext(To& to, const From& x, Rounding_Dir dir) {
+16535:   if (!ext_to_handle<From_Policy>(x)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<From_Policy>(x)) {
+16535:     return construct_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (is_minf<From_Policy>(x)) {
+16535:     return construct_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
+16535:   }
+16535:   else if (is_pinf<From_Policy>(x)) {
+16535:     return construct_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:   }
+16535:   else {
+16535:   native:
+16535:     return construct<To_Policy, From_Policy>(to, x, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy,
+16535:           typename To, typename From>
+16535: inline Result
+16535: assign_ext(To& to, const From& x, Rounding_Dir dir) {
+16535:   if (!ext_to_handle<From_Policy>(x)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (is_minf<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
+16535:   }
+16535:   else if (is_pinf<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:   }
+16535:   else {
+16535:   native:
+16535:     return assign<To_Policy, From_Policy>(to, x, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy,
+16535:           typename To, typename From>
+16535: inline Result
+16535: neg_ext(To& to, const From& x, Rounding_Dir dir) {
+16535:   if (!ext_to_handle<From_Policy>(x)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (is_minf<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:   }
+16535:   else if (is_pinf<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
+16535:   }
+16535:   else {
+16535:   native:
+16535:     return neg<To_Policy, From_Policy>(to, x, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy,
+16535:           typename To, typename From>
+16535: inline Result
+16535: floor_ext(To& to, const From& x, Rounding_Dir dir) {
+16535:   if (!ext_to_handle<From_Policy>(x)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (is_minf<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
+16535:   }
+16535:   else if (is_pinf<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:   }
+16535:   else {
+16535:   native:
+16535:     return floor<To_Policy, From_Policy>(to, x, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy,
+16535:           typename To, typename From>
+16535: inline Result
+16535: ceil_ext(To& to, const From& x, Rounding_Dir dir) {
+16535:   if (!ext_to_handle<From_Policy>(x)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (is_minf<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
+16535:   }
+16535:   else if (is_pinf<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:   }
+16535:   else {
+16535:   native:
+16535:     return ceil<To_Policy, From_Policy>(to, x, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy,
+16535:           typename To, typename From>
+16535: inline Result
+16535: trunc_ext(To& to, const From& x, Rounding_Dir dir) {
+16535:   if (!ext_to_handle<From_Policy>(x)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (is_minf<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
+16535:   }
+16535:   else if (is_pinf<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:   }
+16535:   else {
+16535:   native:
+16535:     return trunc<To_Policy, From_Policy>(to, x, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy,
+16535:           typename To, typename From>
+16535: inline Result
+16535: abs_ext(To& to, const From& x, Rounding_Dir dir) {
+16535:   if (!ext_to_handle<From_Policy>(x)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (is_minf<From_Policy>(x) || is_pinf<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:   }
+16535:   else {
+16535:   native:
+16535:     return abs<To_Policy, From_Policy>(to, x, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename To, typename From1, typename From2>
+16535: inline Result
+16535: add_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
+16535:   if (!ext_to_handle<From1_Policy>(x) && !ext_to_handle<From2_Policy>(y)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<From1_Policy>(x) || is_nan<From2_Policy>(y)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (is_minf<From1_Policy>(x)) {
+16535:     if (((To_Policy::check_inf_add_inf) ? (is_pinf<From2_Policy>(y)) : (
+16535: # 232 "../../src/checked_ext_inlines.hh" 3 4
+16535:        (static_cast<void> (0))
+16535: # 232 "../../src/checked_ext_inlines.hh"
+16535:        , false))) {
+16535:       goto inf_add_inf;
+16535:     }
+16535:     else {
+16535:       goto minf;
+16535:     }
+16535:   }
+16535:   else if (is_pinf<From1_Policy>(x)) {
+16535:     if (((To_Policy::check_inf_add_inf) ? (is_minf<From2_Policy>(y)) : (
+16535: # 240 "../../src/checked_ext_inlines.hh" 3 4
+16535:        (static_cast<void> (0))
+16535: # 240 "../../src/checked_ext_inlines.hh"
+16535:        , false))) {
+16535:     inf_add_inf:
+16535:       return assign_nan<To_Policy>(to, V_INF_ADD_INF);
+16535:     }
+16535:     else {
+16535:       goto pinf;
+16535:     }
+16535:   }
+16535:   else {
+16535:     if (is_minf<From2_Policy>(y)) {
+16535:     minf:
+16535:       return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
+16535:     }
+16535:     else if (is_pinf<From2_Policy>(y)) {
+16535:     pinf:
+16535:       return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:     }
+16535:     else {
+16535:     native:
+16535:       return add<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename To, typename From1, typename From2>
+16535: inline Result
+16535: sub_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
+16535:   if (!ext_to_handle<From1_Policy>(x) && !ext_to_handle<From2_Policy>(y)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<From1_Policy>(x) || is_nan<From2_Policy>(y)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (is_minf<From1_Policy>(x)) {
+16535:     if (((To_Policy::check_inf_sub_inf) ? (is_minf<From2_Policy>(y)) : (
+16535: # 275 "../../src/checked_ext_inlines.hh" 3 4
+16535:        (static_cast<void> (0))
+16535: # 275 "../../src/checked_ext_inlines.hh"
+16535:        , false))) {
+16535:       goto inf_sub_inf;
+16535:     }
+16535:     else {
+16535:       goto minf;
+16535:     }
+16535:   }
+16535:   else if (is_pinf<From1_Policy>(x)) {
+16535:     if (((To_Policy::check_inf_sub_inf) ? (is_pinf<From2_Policy>(y)) : (
+16535: # 283 "../../src/checked_ext_inlines.hh" 3 4
+16535:        (static_cast<void> (0))
+16535: # 283 "../../src/checked_ext_inlines.hh"
+16535:        , false))) {
+16535:     inf_sub_inf:
+16535:       return assign_nan<To_Policy>(to, V_INF_SUB_INF);
+16535:     }
+16535:     else {
+16535:       goto pinf;
+16535:     }
+16535:   }
+16535:   else {
+16535:     if (is_pinf<From2_Policy>(y)) {
+16535:     minf:
+16535:       return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
+16535:     }
+16535:     else if (is_minf<From2_Policy>(y)) {
+16535:     pinf:
+16535:       return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:     }
+16535:     else {
+16535:     native:
+16535:       return sub<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename To, typename From1, typename From2>
+16535: inline Result
+16535: mul_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
+16535:   if (!ext_to_handle<From1_Policy>(x) && !ext_to_handle<From2_Policy>(y)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<From1_Policy>(x) || is_nan<From2_Policy>(y)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   if (is_minf<From1_Policy>(x)) {
+16535:     switch (sgn_ext<From2_Policy>(y)) {
+16535:     case VR_LT:
+16535:       goto pinf;
+16535:     case VR_GT:
+16535:       goto minf;
+16535:     default:
+16535:       goto inf_mul_zero;
+16535:     }
+16535:   }
+16535:   else if (is_pinf<From1_Policy>(x)) {
+16535:     switch (sgn_ext<From2_Policy>(y)) {
+16535:     case VR_LT:
+16535:       goto minf;
+16535:     case VR_GT:
+16535:       goto pinf;
+16535:     default:
+16535:       goto inf_mul_zero;
+16535:     }
+16535:   }
+16535:   else {
+16535:     if (is_minf<From2_Policy>(y)) {
+16535:       switch (sgn<From1_Policy>(x)) {
+16535:       case VR_LT:
+16535:         goto pinf;
+16535:       case VR_GT:
+16535:         goto minf;
+16535:       default:
+16535:         goto inf_mul_zero;
+16535:       }
+16535:     }
+16535:     else if (is_pinf<From2_Policy>(y)) {
+16535:       switch (sgn<From1_Policy>(x)) {
+16535:       case VR_LT:
+16535:       minf:
+16535:         return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
+16535:       case VR_GT:
+16535:       pinf:
+16535:         return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:       default:
+16535:       inf_mul_zero:
+16535:         ((void) 0);
+16535:         return assign_nan<To_Policy>(to, V_INF_MUL_ZERO);
+16535:       }
+16535:     }
+16535:     else {
+16535:     native:
+16535:       return mul<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename To, typename From1, typename From2>
+16535: inline Result
+16535: add_mul_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
+16535:   if (!ext_to_handle<To_Policy>(to)
+16535:       && !ext_to_handle<From1_Policy>(x) && !ext_to_handle<From2_Policy>(y)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<To_Policy>(to)
+16535:       || is_nan<From1_Policy>(x) || is_nan<From2_Policy>(y)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   if (is_minf<From1_Policy>(x)) {
+16535:     switch (sgn_ext<From2_Policy>(y)) {
+16535:     case VR_LT:
+16535:       goto a_pinf;
+16535:     case VR_GT:
+16535:       goto a_minf;
+16535:     default:
+16535:       goto inf_mul_zero;
+16535:     }
+16535:   }
+16535:   else if (is_pinf<From1_Policy>(x)) {
+16535:     switch (sgn_ext<From2_Policy>(y)) {
+16535:     case VR_LT:
+16535:       goto a_minf;
+16535:     case VR_GT:
+16535:       goto a_pinf;
+16535:     default:
+16535:       goto inf_mul_zero;
+16535:     }
+16535:   }
+16535:   else {
+16535:     if (is_minf<From2_Policy>(y)) {
+16535:       switch (sgn<From1_Policy>(x)) {
+16535:       case VR_LT:
+16535:         goto a_pinf;
+16535:       case VR_GT:
+16535:         goto a_minf;
+16535:       default:
+16535:         goto inf_mul_zero;
+16535:       }
+16535:     }
+16535:     else if (is_pinf<From2_Policy>(y)) {
+16535:       switch (sgn<From1_Policy>(x)) {
+16535:       case VR_LT:
+16535:       a_minf:
+16535:         if (((To_Policy::check_inf_add_inf) ? (is_pinf<To_Policy>(to)) : (
+16535: # 417 "../../src/checked_ext_inlines.hh" 3 4
+16535:            (static_cast<void> (0))
+16535: # 417 "../../src/checked_ext_inlines.hh"
+16535:            , false))) {
+16535:           goto inf_add_inf;
+16535:         }
+16535:         else {
+16535:           goto minf;
+16535:         }
+16535:       case VR_GT:
+16535:       a_pinf:
+16535:         if (((To_Policy::check_inf_add_inf) ? (is_minf<To_Policy>(to)) : (
+16535: # 425 "../../src/checked_ext_inlines.hh" 3 4
+16535:            (static_cast<void> (0))
+16535: # 425 "../../src/checked_ext_inlines.hh"
+16535:            , false))) {
+16535:         inf_add_inf:
+16535:           return assign_nan<To_Policy>(to, V_INF_ADD_INF);
+16535:         }
+16535:         else {
+16535:           goto pinf;
+16535:         }
+16535:       default:
+16535:       inf_mul_zero:
+16535:         ((void) 0);
+16535:         return assign_nan<To_Policy>(to, V_INF_MUL_ZERO);
+16535:       }
+16535:     }
+16535:     else {
+16535:       if (is_minf<To_Policy>(to)) {
+16535:       minf:
+16535:         return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
+16535:       }
+16535:       if (is_pinf<To_Policy>(to)) {
+16535:       pinf:
+16535:         return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:       }
+16535:     native:
+16535:       return add_mul<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename To, typename From1, typename From2>
+16535: inline Result
+16535: sub_mul_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
+16535:   if (!ext_to_handle<To_Policy>(to)
+16535:       && !ext_to_handle<From1_Policy>(x) && !ext_to_handle<From2_Policy>(y)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<To_Policy>(to)
+16535:       || is_nan<From1_Policy>(x) || is_nan<From2_Policy>(y)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   if (is_minf<From1_Policy>(x)) {
+16535:     switch (sgn_ext<From2_Policy>(y)) {
+16535:     case VR_LT:
+16535:       goto a_pinf;
+16535:     case VR_GT:
+16535:       goto a_minf;
+16535:     default:
+16535:       goto inf_mul_zero;
+16535:     }
+16535:   }
+16535:   else if (is_pinf<From1_Policy>(x)) {
+16535:     switch (sgn_ext<From2_Policy>(y)) {
+16535:     case VR_LT:
+16535:       goto a_minf;
+16535:     case VR_GT:
+16535:       goto a_pinf;
+16535:     default:
+16535:       goto inf_mul_zero;
+16535:     }
+16535:   }
+16535:   else {
+16535:     if (is_minf<From2_Policy>(y)) {
+16535:       switch (sgn<From1_Policy>(x)) {
+16535:       case VR_LT:
+16535:         goto a_pinf;
+16535:       case VR_GT:
+16535:         goto a_minf;
+16535:       default:
+16535:         goto inf_mul_zero;
+16535:       }
+16535:     }
+16535:     else if (is_pinf<From2_Policy>(y)) {
+16535:       switch (sgn<From1_Policy>(x)) {
+16535:       case VR_LT:
+16535:       a_minf:
+16535:         if (((To_Policy::check_inf_sub_inf) ? (is_minf<To_Policy>(to)) : (
+16535: # 500 "../../src/checked_ext_inlines.hh" 3 4
+16535:            (static_cast<void> (0))
+16535: # 500 "../../src/checked_ext_inlines.hh"
+16535:            , false))) {
+16535:           goto inf_sub_inf;
+16535:         }
+16535:         else {
+16535:           goto pinf;
+16535:         }
+16535:       case VR_GT:
+16535:       a_pinf:
+16535:         if (((To_Policy::check_inf_sub_inf) ? (is_pinf<To_Policy>(to)) : (
+16535: # 508 "../../src/checked_ext_inlines.hh" 3 4
+16535:            (static_cast<void> (0))
+16535: # 508 "../../src/checked_ext_inlines.hh"
+16535:            , false))) {
+16535:         inf_sub_inf:
+16535:           return assign_nan<To_Policy>(to, V_INF_SUB_INF);
+16535:         }
+16535:         else {
+16535:           goto minf;
+16535:         }
+16535:       default:
+16535:       inf_mul_zero:
+16535:         ((void) 0);
+16535:         return assign_nan<To_Policy>(to, V_INF_MUL_ZERO);
+16535:       }
+16535:     }
+16535:     else {
+16535:       if (is_minf<To_Policy>(to)) {
+16535:       minf:
+16535:         return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
+16535:       }
+16535:       if (is_pinf<To_Policy>(to)) {
+16535:       pinf:
+16535:         return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:       }
+16535:     native:
+16535:       return sub_mul<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename To, typename From1, typename From2>
+16535: inline Result
+16535: div_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
+16535:   if (!ext_to_handle<From1_Policy>(x) && !ext_to_handle<From2_Policy>(y)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<From1_Policy>(x) || is_nan<From2_Policy>(y)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   if (is_minf<From1_Policy>(x)) {
+16535:     if (((To_Policy::check_inf_div_inf) ? (is_minf<From2_Policy>(y) || is_pinf<From2_Policy>(y)) : (
+16535: # 547 "../../src/checked_ext_inlines.hh" 3 4
+16535:        (static_cast<void> (0))
+16535: # 547 "../../src/checked_ext_inlines.hh"
+16535:        , false))
+16535:                                             ) {
+16535:       goto inf_div_inf;
+16535:     }
+16535:     else {
+16535:       switch (sgn<From2_Policy>(y)) {
+16535:       case VR_LT:
+16535:         goto pinf;
+16535:       case VR_GT:
+16535:         goto minf;
+16535:       default:
+16535:         goto div_zero;
+16535:       }
+16535:     }
+16535:   }
+16535:   else if (is_pinf<From1_Policy>(x)) {
+16535:     if (((To_Policy::check_inf_div_inf) ? (is_minf<From2_Policy>(y) || is_pinf<From2_Policy>(y)) : (
+16535: # 563 "../../src/checked_ext_inlines.hh" 3 4
+16535:        (static_cast<void> (0))
+16535: # 563 "../../src/checked_ext_inlines.hh"
+16535:        , false))
+16535:                                             ) {
+16535:     inf_div_inf:
+16535:       return assign_nan<To_Policy>(to, V_INF_DIV_INF);
+16535:     }
+16535:     else {
+16535:       switch (sgn<From2_Policy>(y)) {
+16535:       case VR_LT:
+16535:       minf:
+16535:         return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
+16535:       case VR_GT:
+16535:       pinf:
+16535:         return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:       default:
+16535:       div_zero:
+16535:         ((void) 0);
+16535:         return assign_nan<To_Policy>(to, V_DIV_ZERO);
+16535:       }
+16535:     }
+16535:   }
+16535:   else {
+16535:     if (is_minf<From2_Policy>(y) || is_pinf<From2_Policy>(y)) {
+16535:       to = 0;
+16535:       return V_EQ;
+16535:     }
+16535:     else {
+16535:     native:
+16535:       return div<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename To, typename From1, typename From2>
+16535: inline Result
+16535: idiv_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
+16535:   if (!ext_to_handle<From1_Policy>(x) && !ext_to_handle<From2_Policy>(y)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<From1_Policy>(x) || is_nan<From2_Policy>(y)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   if (is_minf<From1_Policy>(x)) {
+16535:     if (((To_Policy::check_inf_div_inf) ? (is_minf<From2_Policy>(y) || is_pinf<From2_Policy>(y)) : (
+16535: # 607 "../../src/checked_ext_inlines.hh" 3 4
+16535:        (static_cast<void> (0))
+16535: # 607 "../../src/checked_ext_inlines.hh"
+16535:        , false))
+16535:                                             ) {
+16535:       goto inf_div_inf;
+16535:     }
+16535:     else {
+16535:       switch (sgn<From2_Policy>(y)) {
+16535:       case VR_LT:
+16535:         goto pinf;
+16535:       case VR_GT:
+16535:         goto minf;
+16535:       default:
+16535:         goto div_zero;
+16535:       }
+16535:     }
+16535:   }
+16535:   else if (is_pinf<From1_Policy>(x)) {
+16535:     if (((To_Policy::check_inf_div_inf) ? (is_minf<From2_Policy>(y) || is_pinf<From2_Policy>(y)) : (
+16535: # 623 "../../src/checked_ext_inlines.hh" 3 4
+16535:        (static_cast<void> (0))
+16535: # 623 "../../src/checked_ext_inlines.hh"
+16535:        , false))
+16535:                                             ) {
+16535:     inf_div_inf:
+16535:       return assign_nan<To_Policy>(to, V_INF_DIV_INF);
+16535:     }
+16535:     else {
+16535:       switch (sgn<From2_Policy>(y)) {
+16535:       case VR_LT:
+16535:       minf:
+16535:         return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
+16535:       case VR_GT:
+16535:       pinf:
+16535:         return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:       default:
+16535:       div_zero:
+16535:         ((void) 0);
+16535:         return assign_nan<To_Policy>(to, V_DIV_ZERO);
+16535:       }
+16535:     }
+16535:   }
+16535:   else {
+16535:     if (is_minf<From2_Policy>(y) || is_pinf<From2_Policy>(y)) {
+16535:       to = 0;
+16535:       return V_EQ;
+16535:     }
+16535:     else {
+16535:     native:
+16535:       return idiv<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename To, typename From1, typename From2>
+16535: inline Result
+16535: rem_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
+16535:   if (!ext_to_handle<From1_Policy>(x) && !ext_to_handle<From2_Policy>(y)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<From1_Policy>(x) || is_nan<From2_Policy>(y)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (((To_Policy::check_inf_mod) ? (is_minf<From1_Policy>(x) || is_pinf<From1_Policy>(x)) : (
+16535: # 666 "../../src/checked_ext_inlines.hh" 3 4
+16535:           (static_cast<void> (0))
+16535: # 666 "../../src/checked_ext_inlines.hh"
+16535:           , false))
+16535:                                                ) {
+16535:     return assign_nan<To_Policy>(to, V_INF_MOD);
+16535:   }
+16535:   else {
+16535:     if (is_minf<From1_Policy>(y) || is_pinf<From2_Policy>(y)) {
+16535:       to = x;
+16535:       return V_EQ;
+16535:     }
+16535:     else {
+16535:     native:
+16535:       return rem<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy,
+16535:           typename To, typename From>
+16535: inline Result
+16535: add_2exp_ext(To& to, const From& x, unsigned int exp, Rounding_Dir dir) {
+16535:   if (!ext_to_handle<From_Policy>(x)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (is_minf<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
+16535:   }
+16535:   else if (is_pinf<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:   }
+16535:   else {
+16535:   native:
+16535:     return add_2exp<To_Policy, From_Policy>(to, x, exp, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy,
+16535:           typename To, typename From>
+16535: inline Result
+16535: sub_2exp_ext(To& to, const From& x, unsigned int exp, Rounding_Dir dir) {
+16535:   if (!ext_to_handle<From_Policy>(x)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (is_minf<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
+16535:   }
+16535:   else if (is_pinf<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:   }
+16535:   else {
+16535:   native:
+16535:     return sub_2exp<To_Policy, From_Policy>(to, x, exp, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy,
+16535:           typename To, typename From>
+16535: inline Result
+16535: mul_2exp_ext(To& to, const From& x, unsigned int exp, Rounding_Dir dir) {
+16535:   if (!ext_to_handle<From_Policy>(x)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (is_minf<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
+16535:   }
+16535:   else if (is_pinf<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:   }
+16535:   else {
+16535:   native:
+16535:     return mul_2exp<To_Policy, From_Policy>(to, x, exp, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy,
+16535:           typename To, typename From>
+16535: inline Result
+16535: div_2exp_ext(To& to, const From& x, unsigned int exp, Rounding_Dir dir) {
+16535:   if (!ext_to_handle<From_Policy>(x)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (is_minf<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_MINUS_INFINITY, dir);
+16535:   }
+16535:   else if (is_pinf<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:   }
+16535:   else {
+16535:   native:
+16535:     return div_2exp<To_Policy, From_Policy>(to, x, exp, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy,
+16535:           typename To, typename From>
+16535: inline Result
+16535: smod_2exp_ext(To& to, const From& x, unsigned int exp, Rounding_Dir dir) {
+16535:   if (!ext_to_handle<From_Policy>(x)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (((To_Policy::check_inf_mod) ? (is_minf<From_Policy>(x) || is_pinf<From_Policy>(x)) : (
+16535: # 780 "../../src/checked_ext_inlines.hh" 3 4
+16535:           (static_cast<void> (0))
+16535: # 780 "../../src/checked_ext_inlines.hh"
+16535:           , false))
+16535:                                               ) {
+16535:     return assign_nan<To_Policy>(to, V_INF_MOD);
+16535:   }
+16535:   else {
+16535:   native:
+16535:     return smod_2exp<To_Policy, From_Policy>(to, x, exp, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy,
+16535:           typename To, typename From>
+16535: inline Result
+16535: umod_2exp_ext(To& to, const From& x, unsigned int exp, Rounding_Dir dir) {
+16535:   if (!ext_to_handle<From_Policy>(x)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (((To_Policy::check_inf_mod) ? (is_minf<From_Policy>(x) || is_pinf<From_Policy>(x)) : (
+16535: # 800 "../../src/checked_ext_inlines.hh" 3 4
+16535:           (static_cast<void> (0))
+16535: # 800 "../../src/checked_ext_inlines.hh"
+16535:           , false))
+16535:                                               ) {
+16535:     return assign_nan<To_Policy>(to, V_INF_MOD);
+16535:   }
+16535:   else {
+16535:   native:
+16535:     return umod_2exp<To_Policy, From_Policy>(to, x, exp, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From_Policy,
+16535:           typename To, typename From>
+16535: inline Result
+16535: sqrt_ext(To& to, const From& x, Rounding_Dir dir) {
+16535:   if (!ext_to_handle<From_Policy>(x)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (is_minf<From_Policy>(x)) {
+16535:     return assign_nan<To_Policy>(to, V_SQRT_NEG);
+16535:   }
+16535:   else if (is_pinf<From_Policy>(x)) {
+16535:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:   }
+16535:   else {
+16535:   native:
+16535:     return sqrt<To_Policy, From_Policy>(to, x, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename To, typename From1, typename From2>
+16535: inline Result
+16535: gcd_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
+16535:   if (is_nan<From1_Policy>(x) || is_nan<From2_Policy>(y)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (is_minf<From1_Policy>(x) || is_pinf<From1_Policy>(x)) {
+16535:     return abs_ext<To_Policy, From2_Policy>(to, y, dir);
+16535:   }
+16535:   else if (is_minf<From2_Policy>(y) || is_pinf<From2_Policy>(y)) {
+16535:     return abs_ext<To_Policy, From1_Policy>(to, x, dir);
+16535:   }
+16535:   else {
+16535:     return gcd<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To1_Policy, typename To2_Policy, typename To3_Policy,
+16535:           typename From1_Policy, typename From2_Policy,
+16535:           typename To1, typename To2, typename To3,
+16535:           typename From1, typename From2>
+16535: inline Result
+16535: gcdext_ext(To1& to, To2& s, To3& t, const From1& x, const From2& y,
+16535:            Rounding_Dir dir) {
+16535:   if (is_nan<From1_Policy>(x) || is_nan<From2_Policy>(y)) {
+16535:     return assign_special<To1_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (is_minf<From1_Policy>(x) || is_pinf<From1_Policy>(x)) {
+16535:     s = 0;
+16535:     t = y > 0 ? -1 : 1;
+16535:     return abs_ext<To1_Policy, From2_Policy>(to, y, dir);
+16535:   }
+16535:   else if (is_minf<From2_Policy>(y) || is_pinf<From2_Policy>(y)) {
+16535:     s = x > 0 ? -1 : 1;
+16535:     t = 0;
+16535:     return abs_ext<To1_Policy, From1_Policy>(to, x, dir);
+16535:   }
+16535:   else {
+16535:     return gcdext<To1_Policy, To2_Policy, To3_Policy, From1_Policy, From2_Policy>(to, s, t, x, y, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Policy, typename From1_Policy, typename From2_Policy,
+16535:           typename To, typename From1, typename From2>
+16535: inline Result
+16535: lcm_ext(To& to, const From1& x, const From2& y, Rounding_Dir dir) {
+16535:   if (is_nan<From1_Policy>(x) || is_nan<From2_Policy>(y)) {
+16535:     return assign_special<To_Policy>(to, VC_NAN, ROUND_IGNORE);
+16535:   }
+16535:   else if (is_minf<From1_Policy>(x) || is_pinf<From1_Policy>(x)
+16535:            || is_minf<From2_Policy>(y) || is_pinf<From2_Policy>(y)) {
+16535:     return assign_special<To_Policy>(to, VC_PLUS_INFINITY, dir);
+16535:   }
+16535:   else {
+16535:     return lcm<To_Policy, From1_Policy, From2_Policy>(to, x, y, dir);
+16535:   }
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2,
+16535:           typename Type1, typename Type2>
+16535: inline Result_Relation
+16535: cmp_ext(const Type1& x, const Type2& y) {
+16535:   if (!ext_to_handle<Policy1>(x) && !ext_to_handle<Policy2>(y)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<Policy1>(x) || is_nan<Policy2>(y)) {
+16535:     return VR_EMPTY;
+16535:   }
+16535:   else if (is_minf<Policy1>(x)) {
+16535:     return is_minf<Policy2>(y) ? VR_EQ : VR_LT;
+16535:   }
+16535:   else if (is_pinf<Policy1>(x)) {
+16535:     return is_pinf<Policy2>(y) ? VR_EQ : VR_GT;
+16535:   }
+16535:   else {
+16535:     if (is_minf<Policy2>(y)) {
+16535:       return VR_GT;
+16535:     }
+16535:     if (is_pinf<Policy2>(y)) {
+16535:       return VR_LT;
+16535:     }
+16535:   native:
+16535:     return cmp<Policy1, Policy2>(x, y);
+16535:   }
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2,
+16535:           typename Type1, typename Type2>
+16535: inline bool
+16535: lt_ext(const Type1& x, const Type2& y) {
+16535:   if (!ext_to_handle<Policy1>(x) && !ext_to_handle<Policy2>(y)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<Policy1>(x) || is_nan<Policy2>(y)) {
+16535:     return false;
+16535:   }
+16535:   if (is_pinf<Policy1>(x) || is_minf<Policy2>(y)) {
+16535:     return false;
+16535:   }
+16535:   if (is_minf<Policy1>(x) || is_pinf<Policy2>(y)) {
+16535:     return true;
+16535:   }
+16535:  native:
+16535:   return lt_p<Policy1, Policy2>(x, y);
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2,
+16535:           typename Type1, typename Type2>
+16535: inline bool
+16535: gt_ext(const Type1& x, const Type2& y) {
+16535:   return lt_ext<Policy1, Policy2>(y, x);
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2,
+16535:           typename Type1, typename Type2>
+16535: inline bool
+16535: le_ext(const Type1& x, const Type2& y) {
+16535:   if (!ext_to_handle<Policy1>(x) && !ext_to_handle<Policy2>(y)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<Policy1>(x) || is_nan<Policy2>(y)) {
+16535:     return false;
+16535:   }
+16535:   if (is_minf<Policy1>(x) || is_pinf<Policy2>(y)) {
+16535:     return true;
+16535:   }
+16535:   if (is_pinf<Policy1>(x) || is_minf<Policy2>(y)) {
+16535:     return false;
+16535:   }
+16535:  native:
+16535:   return le_p<Policy1, Policy2>(x, y);
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2,
+16535:           typename Type1, typename Type2>
+16535: inline bool
+16535: ge_ext(const Type1& x, const Type2& y) {
+16535:   return le_ext<Policy1, Policy2>(y, x);
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2,
+16535:           typename Type1, typename Type2>
+16535: inline bool
+16535: eq_ext(const Type1& x, const Type2& y) {
+16535:   if (!ext_to_handle<Policy1>(x) && !ext_to_handle<Policy2>(y)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<Policy1>(x) || is_nan<Policy2>(y)) {
+16535:     return false;
+16535:   }
+16535:   if (is_minf<Policy1>(x)) {
+16535:     return is_minf<Policy2>(y);
+16535:   }
+16535:   if (is_pinf<Policy1>(x)) {
+16535:     return is_pinf<Policy2>(y);
+16535:   }
+16535:   else if (is_minf<Policy2>(y) || is_pinf<Policy2>(y)) {
+16535:     return false;
+16535:   }
+16535:  native:
+16535:   return eq_p<Policy1, Policy2>(x, y);
+16535: }
+16535: 
+16535: template <typename Policy1, typename Policy2,
+16535:           typename Type1, typename Type2>
+16535: inline bool
+16535: ne_ext(const Type1& x, const Type2& y) {
+16535:   return !eq_ext<Policy1, Policy2>(x, y);
+16535: }
+16535: 
+16535: template <typename Policy, typename Type>
+16535: inline Result
+16535: output_ext(std::ostream& os, const Type& x,
+16535:            const Numeric_Format& format, Rounding_Dir dir) {
+16535:   if (!ext_to_handle<Policy>(x)) {
+16535:     goto native;
+16535:   }
+16535:   if (is_nan<Policy>(x)) {
+16535:     os << "nan";
+16535:     return V_NAN;
+16535:   }
+16535:   if (is_minf<Policy>(x)) {
+16535:     os << "-inf";
+16535:     return V_EQ;
+16535:   }
+16535:   if (is_pinf<Policy>(x)) {
+16535:     os << "+inf";
+16535:     return V_EQ;
+16535:   }
+16535:  native:
+16535:   return output<Policy>(os, x, format, dir);
+16535: }
+16535: 
+16535: template <typename To_Policy, typename To>
+16535: inline Result
+16535: input_ext(To& to, std::istream& is, Rounding_Dir dir) {
+16535:   return input<To_Policy>(to, is, dir);
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 706 "../../src/checked_defs.hh" 2
+16535: # 29 "../../src/Checked_Number_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: struct Extended_Number_Policy {
+16535:   enum const_bool_value_check_overflow { check_overflow = (true) };
+16535:   enum const_bool_value_check_inf_add_inf { check_inf_add_inf = (false) };
+16535:   enum const_bool_value_check_inf_sub_inf { check_inf_sub_inf = (false) };
+16535:   enum const_bool_value_check_inf_mul_zero { check_inf_mul_zero = (false) };
+16535:   enum const_bool_value_check_div_zero { check_div_zero = (false) };
+16535:   enum const_bool_value_check_inf_div_inf { check_inf_div_inf = (false) };
+16535:   enum const_bool_value_check_inf_mod { check_inf_mod = (false) };
+16535:   enum const_bool_value_check_sqrt_neg { check_sqrt_neg = (false) };
+16535:   enum const_bool_value_has_nan { has_nan = (true) };
+16535:   enum const_bool_value_has_infinity { has_infinity = (true) };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   enum const_bool_value_fpu_check_inexact { fpu_check_inexact = (true) };
+16535:   enum const_bool_value_fpu_check_nan_result { fpu_check_nan_result = (true) };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static void handle_result(Result r);
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: struct Check_Overflow_Policy {
+16535:   enum const_bool_value_check_overflow { check_overflow = (true) };
+16535:   enum const_bool_value_check_inf_add_inf { check_inf_add_inf = (false) };
+16535:   enum const_bool_value_check_inf_sub_inf { check_inf_sub_inf = (false) };
+16535:   enum const_bool_value_check_inf_mul_zero { check_inf_mul_zero = (false) };
+16535:   enum const_bool_value_check_div_zero { check_div_zero = (false) };
+16535:   enum const_bool_value_check_inf_div_inf { check_inf_div_inf = (false) };
+16535:   enum const_bool_value_check_inf_mod { check_inf_mod = (false) };
+16535:   enum const_bool_value_check_sqrt_neg { check_sqrt_neg = (false) };
+16535:   enum const_bool_value_has_nan { has_nan = (std::numeric_limits<T>::has_quiet_NaN) };
+16535:   enum const_bool_value_has_infinity { has_infinity = (std::numeric_limits<T>::has_infinity) };
+16535:   enum const_bool_value_convertible { convertible = (true) };
+16535:   enum const_bool_value_fpu_check_inexact { fpu_check_inexact = (true) };
+16535:   enum const_bool_value_fpu_check_nan_result { fpu_check_nan_result = (true) };
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Enable = void>
+16535: struct Native_Checked_From_Wrapper;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: struct Native_Checked_From_Wrapper<T, typename Enable_If<Is_Native<T>::value>::type> {
+16535:   typedef Checked_Number_Transparent_Policy<T> Policy;
+16535:   static const T& raw_value(const T& v) {
+16535:     return v;
+16535:   }
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename P>
+16535: struct Native_Checked_From_Wrapper<Checked_Number<T, P> > {
+16535:   typedef P Policy;
+16535:   static const T& raw_value(const Checked_Number<T, P>& v) {
+16535:     return v.raw_value();
+16535:   }
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Enable = void>
+16535: struct Native_Checked_To_Wrapper;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: struct Native_Checked_To_Wrapper<T, typename Enable_If<Is_Native<T>::value>::type> {
+16535:   typedef Check_Overflow_Policy<T> Policy;
+16535:   static T& raw_value(T& v) {
+16535:     return v;
+16535:   }
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename P>
+16535: struct Native_Checked_To_Wrapper<Checked_Number<T, P> > {
+16535:   typedef P Policy;
+16535:   static T& raw_value(Checked_Number<T, P>& v) {
+16535:     return v.raw_value();
+16535:   }
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: struct Is_Checked : public False { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename P>
+16535: struct Is_Checked<Checked_Number<T, P> > : public True { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: struct Is_Native_Or_Checked
+16535:   : public Bool<Is_Native<T>::value || Is_Checked<T>::value> { };
+16535: # 169 "../../src/Checked_Number_defs.hh"
+16535: template <typename T, typename Policy>
+16535: class Checked_Number {
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Checked_Number();
+16535: 
+16535: 
+16535:   Checked_Number(const Checked_Number& y);
+16535: 
+16535: 
+16535:   template <typename From, typename From_Policy>
+16535:   Checked_Number(const Checked_Number<From, From_Policy>& y, Rounding_Dir dir);
+16535: 
+16535: 
+16535:   Checked_Number(char y, Rounding_Dir dir);
+16535: 
+16535: 
+16535:   Checked_Number(signed char y, Rounding_Dir dir);
+16535: 
+16535: 
+16535:   Checked_Number(signed short y, Rounding_Dir dir);
+16535: 
+16535: 
+16535:   Checked_Number(signed int y, Rounding_Dir dir);
+16535: 
+16535: 
+16535:   Checked_Number(signed long y, Rounding_Dir dir);
+16535: 
+16535: 
+16535:   Checked_Number(signed long long y, Rounding_Dir dir);
+16535: 
+16535: 
+16535:   Checked_Number(unsigned char y, Rounding_Dir dir);
+16535: 
+16535: 
+16535:   Checked_Number(unsigned short y, Rounding_Dir dir);
+16535: 
+16535: 
+16535:   Checked_Number(unsigned int y, Rounding_Dir dir);
+16535: 
+16535: 
+16535:   Checked_Number(unsigned long y, Rounding_Dir dir);
+16535: 
+16535: 
+16535:   Checked_Number(unsigned long long y, Rounding_Dir dir);
+16535: 
+16535: 
+16535: 
+16535:   Checked_Number(float y, Rounding_Dir dir);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Checked_Number(double y, Rounding_Dir dir);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Checked_Number(long double y, Rounding_Dir dir);
+16535: 
+16535: 
+16535: 
+16535:   Checked_Number(const mpq_class& y, Rounding_Dir dir);
+16535: 
+16535: 
+16535:   Checked_Number(const mpz_class& y, Rounding_Dir dir);
+16535: 
+16535: 
+16535:   Checked_Number(const char* y, Rounding_Dir dir);
+16535: 
+16535: 
+16535:   template <typename From>
+16535:   Checked_Number(const From&, Rounding_Dir dir,
+16535:                  typename Enable_If<Is_Special<From>::value, bool>::type
+16535:                  ignored = false);
+16535: 
+16535: 
+16535:   template <typename From, typename From_Policy>
+16535:   explicit Checked_Number(const Checked_Number<From, From_Policy>& y);
+16535: 
+16535: 
+16535:   Checked_Number(char y);
+16535: 
+16535: 
+16535:   Checked_Number(signed char y);
+16535: 
+16535: 
+16535:   Checked_Number(signed short y);
+16535: 
+16535: 
+16535:   Checked_Number(signed int y);
+16535: 
+16535: 
+16535:   Checked_Number(signed long y);
+16535: 
+16535: 
+16535:   Checked_Number(signed long long y);
+16535: 
+16535: 
+16535:   Checked_Number(unsigned char y);
+16535: 
+16535: 
+16535:   Checked_Number(unsigned short y);
+16535: 
+16535: 
+16535:   Checked_Number(unsigned int y);
+16535: 
+16535: 
+16535:   Checked_Number(unsigned long y);
+16535: 
+16535: 
+16535:   Checked_Number(unsigned long long y);
+16535: 
+16535: 
+16535:   Checked_Number(float y);
+16535: 
+16535: 
+16535:   Checked_Number(double y);
+16535: 
+16535: 
+16535:   Checked_Number(long double y);
+16535: 
+16535: 
+16535:   Checked_Number(const mpq_class& y);
+16535: 
+16535: 
+16535:   Checked_Number(const mpz_class& y);
+16535: 
+16535: 
+16535:   Checked_Number(const char* y);
+16535: 
+16535: 
+16535:   template <typename From>
+16535:   Checked_Number(const From&, typename Enable_If<Is_Special<From>::value, bool>::type ignored = false);
+16535: # 315 "../../src/Checked_Number_defs.hh"
+16535:   operator T() const;
+16535: 
+16535: 
+16535:   T& raw_value();
+16535: 
+16535: 
+16535:   const T& raw_value() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: # 338 "../../src/Checked_Number_defs.hh"
+16535:   Result classify(bool nan = true, bool inf = true, bool sign = true) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Checked_Number& operator=(const Checked_Number& y);
+16535: 
+16535: 
+16535:   template <typename From>
+16535:   Checked_Number& operator=(const From& y);
+16535: 
+16535: 
+16535:   template <typename From_Policy>
+16535:   Checked_Number& operator+=(const Checked_Number<T, From_Policy>& y);
+16535: 
+16535: 
+16535:   Checked_Number& operator+=(const T& y);
+16535: 
+16535: 
+16535:   template <typename From>
+16535:   typename Enable_If<Is_Native_Or_Checked<From>::value,
+16535:                      Checked_Number<T, Policy>&>::type
+16535:   operator+=(const From& y);
+16535: 
+16535: 
+16535:   template <typename From_Policy>
+16535:   Checked_Number& operator-=(const Checked_Number<T, From_Policy>& y);
+16535: 
+16535: 
+16535:   Checked_Number& operator-=(const T& y);
+16535: 
+16535: 
+16535:   template <typename From>
+16535:   typename Enable_If<Is_Native_Or_Checked<From>::value,
+16535:                      Checked_Number<T, Policy>&>::type
+16535:   operator-=(const From& y);
+16535: 
+16535: 
+16535:   template <typename From_Policy>
+16535:   Checked_Number& operator*=(const Checked_Number<T, From_Policy>& y);
+16535: 
+16535: 
+16535:   Checked_Number& operator*=(const T& y);
+16535: 
+16535: 
+16535:   template <typename From>
+16535:   typename Enable_If<Is_Native_Or_Checked<From>::value,
+16535:                      Checked_Number<T, Policy>&>::type
+16535:   operator*=(const From& y);
+16535: 
+16535: 
+16535:   template <typename From_Policy>
+16535:   Checked_Number& operator/=(const Checked_Number<T, From_Policy>& y);
+16535: 
+16535: 
+16535:   Checked_Number& operator/=(const T& y);
+16535: 
+16535: 
+16535:   template <typename From>
+16535:   typename Enable_If<Is_Native_Or_Checked<From>::value,
+16535:                      Checked_Number<T, Policy>&>::type
+16535:   operator/=(const From& y);
+16535: 
+16535: 
+16535:   template <typename From_Policy>
+16535:   Checked_Number& operator%=(const Checked_Number<T, From_Policy>& y);
+16535: 
+16535: 
+16535:   Checked_Number& operator%=(const T& y);
+16535: 
+16535: 
+16535:   template <typename From>
+16535:   typename Enable_If<Is_Native_Or_Checked<From>::value,
+16535:                      Checked_Number<T, Policy>& >::type
+16535:   operator%=(const From& y);
+16535: # 422 "../../src/Checked_Number_defs.hh"
+16535:   Checked_Number& operator++();
+16535: 
+16535: 
+16535:   Checked_Number operator++(int);
+16535: 
+16535: 
+16535:   Checked_Number& operator--();
+16535: 
+16535: 
+16535:   Checked_Number operator--(int);
+16535: 
+16535: 
+16535: 
+16535: private:
+16535: 
+16535:   T v;
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename P>
+16535: struct Slow_Copy<Checked_Number<T, P> > : public Bool<Slow_Copy<T>::value> {};
+16535: 
+16535: 
+16535: template <typename T>
+16535: typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
+16535: is_not_a_number(const T& x);
+16535: 
+16535: 
+16535: template <typename T>
+16535: typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
+16535: is_minus_infinity(const T& x);
+16535: 
+16535: 
+16535: template <typename T>
+16535: typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
+16535: is_plus_infinity(const T& x);
+16535: 
+16535: 
+16535: template <typename T>
+16535: typename Enable_If<Is_Native_Or_Checked<T>::value, int>::type
+16535: infinity_sign(const T& x);
+16535: 
+16535: 
+16535: template <typename T>
+16535: typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
+16535: is_integer(const T& x);
+16535: 
+16535: 
+16535: template <typename To, typename From>
+16535: typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Special<From>::value, Result>::type
+16535: construct(To& to, const From& x, Rounding_Dir dir);
+16535: 
+16535: 
+16535: template <typename To, typename From>
+16535: typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Special<From>::value, Result>::type
+16535: assign_r(To& to, const From& x, Rounding_Dir dir);
+16535: 
+16535: 
+16535: template <typename To>
+16535: typename Enable_If<Is_Native_Or_Checked<To>::value, Result>::type
+16535: assign_r(To& to, const char* x, Rounding_Dir dir);
+16535: 
+16535: 
+16535: template <typename To, typename To_Policy>
+16535: typename Enable_If<Is_Native_Or_Checked<To>::value, Result>::type
+16535: assign_r(To& to, char* x, Rounding_Dir dir);
+16535: # 498 "../../src/Checked_Number_defs.hh"
+16535: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type assign_r(To& to, const From& x, Rounding_Dir dir);
+16535: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type floor_assign_r(To& to, const From& x, Rounding_Dir dir);
+16535: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type ceil_assign_r(To& to, const From& x, Rounding_Dir dir);
+16535: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type trunc_assign_r(To& to, const From& x, Rounding_Dir dir);
+16535: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type neg_assign_r(To& to, const From& x, Rounding_Dir dir);
+16535: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type abs_assign_r(To& to, const From& x, Rounding_Dir dir);
+16535: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type sqrt_assign_r(To& to, const From& x, Rounding_Dir dir);
+16535: # 515 "../../src/Checked_Number_defs.hh"
+16535: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type add_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir);
+16535: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type sub_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir);
+16535: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type mul_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir);
+16535: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type div_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir);
+16535: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type smod_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir);
+16535: template <typename To, typename From> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type umod_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir);
+16535: # 532 "../../src/Checked_Number_defs.hh"
+16535: template <typename To, typename From1, typename From2> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type add_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir);
+16535: template <typename To, typename From1, typename From2> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type sub_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir);
+16535: template <typename To, typename From1, typename From2> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type mul_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir);
+16535: template <typename To, typename From1, typename From2> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type div_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir);
+16535: template <typename To, typename From1, typename From2> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type idiv_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir);
+16535: template <typename To, typename From1, typename From2> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type rem_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir);
+16535: template <typename To, typename From1, typename From2> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type gcd_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir);
+16535: template <typename To, typename From1, typename From2> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type lcm_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir);
+16535: template <typename To, typename From1, typename From2> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type add_mul_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir);
+16535: template <typename To, typename From1, typename From2> typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type sub_mul_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir);
+16535: # 558 "../../src/Checked_Number_defs.hh"
+16535: template <typename To1, typename To2, typename To3, typename From1, typename From2> typename Enable_If<Is_Native_Or_Checked<To1>::value && Is_Native_Or_Checked<To2>::value && Is_Native_Or_Checked<To3>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type gcdext_assign_r(To1& to, To2& s, To3& t, const From1& x, const From2& y, Rounding_Dir dir);
+16535: # 572 "../../src/Checked_Number_defs.hh"
+16535: template <typename T, typename Policy>
+16535: memory_size_type
+16535: total_memory_in_bytes(const Checked_Number<T, Policy>& x);
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: memory_size_type
+16535: external_memory_in_bytes(const Checked_Number<T, Policy>& x);
+16535: # 589 "../../src/Checked_Number_defs.hh"
+16535: template <typename T, typename Policy>
+16535: Checked_Number<T, Policy>
+16535: operator+(const Checked_Number<T, Policy>& x);
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: Checked_Number<T, Policy>
+16535: operator-(const Checked_Number<T, Policy>& x);
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: void
+16535: floor_assign(Checked_Number<T, Policy>& x);
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: void
+16535: floor_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y);
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: void
+16535: ceil_assign(Checked_Number<T, Policy>& x);
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: void
+16535: ceil_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y);
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: void
+16535: trunc_assign(Checked_Number<T, Policy>& x);
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: void
+16535: trunc_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y);
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: void
+16535: neg_assign(Checked_Number<T, Policy>& x);
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: void
+16535: neg_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y);
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: void
+16535: abs_assign(Checked_Number<T, Policy>& x);
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: void
+16535: abs_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y);
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: void
+16535: add_mul_assign(Checked_Number<T, Policy>& x,
+16535:                const Checked_Number<T, Policy>& y,
+16535:                const Checked_Number<T, Policy>& z);
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: void
+16535: sub_mul_assign(Checked_Number<T, Policy>& x,
+16535:                const Checked_Number<T, Policy>& y,
+16535:                const Checked_Number<T, Policy>& z);
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: void
+16535: gcd_assign(Checked_Number<T, Policy>& x,
+16535:            const Checked_Number<T, Policy>& y,
+16535:            const Checked_Number<T, Policy>& z);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: void
+16535: gcdext_assign(Checked_Number<T, Policy>& x,
+16535:               Checked_Number<T, Policy>& s,
+16535:               Checked_Number<T, Policy>& t,
+16535:               const Checked_Number<T, Policy>& y,
+16535:               const Checked_Number<T, Policy>& z);
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: void
+16535: lcm_assign(Checked_Number<T, Policy>& x,
+16535:            const Checked_Number<T, Policy>& y,
+16535:            const Checked_Number<T, Policy>& z);
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: void
+16535: mul_2exp_assign(Checked_Number<T, Policy>& x,
+16535:                 const Checked_Number<T, Policy>& y,
+16535:                 unsigned int exp);
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: void
+16535: div_2exp_assign(Checked_Number<T, Policy>& x,
+16535:                 const Checked_Number<T, Policy>& y,
+16535:                 unsigned int exp);
+16535: # 727 "../../src/Checked_Number_defs.hh"
+16535: template <typename T, typename Policy>
+16535: void
+16535: exact_div_assign(Checked_Number<T, Policy>& x,
+16535:                  const Checked_Number<T, Policy>& y,
+16535:                  const Checked_Number<T, Policy>& z);
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: void sqrt_assign(Checked_Number<T, Policy>& x,
+16535:                  const Checked_Number<T, Policy>& y);
+16535: # 747 "../../src/Checked_Number_defs.hh"
+16535: template <typename T1, typename T2>
+16535: inline
+16535: typename Enable_If<Is_Native_Or_Checked<T1>::value
+16535:                    && Is_Native_Or_Checked<T2>::value
+16535:                    && (Is_Checked<T1>::value || Is_Checked<T2>::value),
+16535:                    bool>::type
+16535: operator==(const T1& x, const T2& y);
+16535: 
+16535: 
+16535: template <typename T1, typename T2>
+16535: inline typename Enable_If<Is_Native_Or_Checked<T1>::value
+16535:                           && Is_Native_Or_Checked<T2>::value,
+16535:                           bool>::type
+16535: equal(const T1& x, const T2& y);
+16535: 
+16535: 
+16535: 
+16535: template <typename T1, typename T2>
+16535: inline
+16535: typename Enable_If<Is_Native_Or_Checked<T1>::value
+16535:                    && Is_Native_Or_Checked<T2>::value
+16535:                    && (Is_Checked<T1>::value || Is_Checked<T2>::value),
+16535:                    bool>::type
+16535: operator!=(const T1& x, const T2& y);
+16535: 
+16535: 
+16535: template <typename T1, typename T2>
+16535: inline typename Enable_If<Is_Native_Or_Checked<T1>::value
+16535:                           && Is_Native_Or_Checked<T2>::value,
+16535:                           bool>::type
+16535: not_equal(const T1& x, const T2& y);
+16535: 
+16535: 
+16535: 
+16535: template <typename T1, typename T2>
+16535: inline
+16535: typename Enable_If<Is_Native_Or_Checked<T1>::value
+16535:                    && Is_Native_Or_Checked<T2>::value
+16535:                    && (Is_Checked<T1>::value || Is_Checked<T2>::value),
+16535:                    bool>::type
+16535: operator>=(const T1& x, const T2& y);
+16535: 
+16535: 
+16535: template <typename T1, typename T2>
+16535: inline typename Enable_If<Is_Native_Or_Checked<T1>::value
+16535:                           && Is_Native_Or_Checked<T2>::value,
+16535:                           bool>::type
+16535: greater_or_equal(const T1& x, const T2& y);
+16535: 
+16535: 
+16535: 
+16535: template <typename T1, typename T2>
+16535: inline
+16535: typename Enable_If<Is_Native_Or_Checked<T1>::value
+16535:                    && Is_Native_Or_Checked<T2>::value
+16535:                    && (Is_Checked<T1>::value || Is_Checked<T2>::value),
+16535:                    bool>::type
+16535: operator>(const T1& x, const T2& y);
+16535: 
+16535: 
+16535: template <typename T1, typename T2>
+16535: inline typename Enable_If<Is_Native_Or_Checked<T1>::value
+16535:                           && Is_Native_Or_Checked<T2>::value,
+16535:                           bool>::type
+16535: greater_than(const T1& x, const T2& y);
+16535: 
+16535: 
+16535: 
+16535: template <typename T1, typename T2>
+16535: inline
+16535: typename Enable_If<Is_Native_Or_Checked<T1>::value
+16535:                    && Is_Native_Or_Checked<T2>::value
+16535:                    && (Is_Checked<T1>::value || Is_Checked<T2>::value),
+16535:                    bool>::type
+16535: operator<=(const T1& x, const T2& y);
+16535: 
+16535: 
+16535: template <typename T1, typename T2>
+16535: inline typename Enable_If<Is_Native_Or_Checked<T1>::value
+16535:                           && Is_Native_Or_Checked<T2>::value,
+16535:                           bool>::type
+16535: less_or_equal(const T1& x, const T2& y);
+16535: 
+16535: 
+16535: 
+16535: template <typename T1, typename T2>
+16535: inline
+16535: typename Enable_If<Is_Native_Or_Checked<T1>::value
+16535:                    && Is_Native_Or_Checked<T2>::value
+16535:                    && (Is_Checked<T1>::value || Is_Checked<T2>::value),
+16535:                    bool>::type
+16535: operator<(const T1& x, const T2& y);
+16535: 
+16535: 
+16535: template <typename T1, typename T2>
+16535: inline typename Enable_If<Is_Native_Or_Checked<T1>::value
+16535:                           && Is_Native_Or_Checked<T2>::value,
+16535:                           bool>::type
+16535: less_than(const T1& x, const T2& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename From>
+16535: inline typename Enable_If<Is_Native_Or_Checked<From>::value, int>::type
+16535:  sgn(const From& x);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename From1, typename From2>
+16535: inline typename Enable_If<Is_Native_Or_Checked<From1>::value
+16535:                           && Is_Native_Or_Checked<From2>::value,
+16535:                           int>::type
+16535: cmp(const From1& x, const From2& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: typename Enable_If<Is_Native_Or_Checked<T>::value, Result>::type
+16535: output(std::ostream& os,
+16535:        const T& x,
+16535:        const Numeric_Format& format,
+16535:        Rounding_Dir dir);
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: std::ostream&
+16535: operator<<(std::ostream& os, const Checked_Number<T, Policy>& x);
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: typename Enable_If<Is_Native_Or_Checked<T>::value, void>::type
+16535: ascii_dump(std::ostream& s, const T& t);
+16535: # 1019 "../../src/Checked_Number_defs.hh"
+16535: template <typename T>
+16535: typename Enable_If<Is_Native_Or_Checked<T>::value, Result>::type
+16535: input(T& x, std::istream& is, Rounding_Dir dir);
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: std::istream&
+16535: operator>>(std::istream& is, Checked_Number<T, Policy>& x);
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
+16535: ascii_load(std::ostream& s, T& t);
+16535: 
+16535: 
+16535: 
+16535: void throw_result_exception(Result r);
+16535: 
+16535: template <typename T>
+16535: T
+16535: plus_infinity();
+16535: 
+16535: template <typename T>
+16535: T
+16535: minus_infinity();
+16535: 
+16535: template <typename T>
+16535: T
+16535: not_a_number();
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: void swap(Checked_Number<T, Policy>& x, Checked_Number<T, Policy>& y);
+16535: 
+16535: template <typename T, typename Policy>
+16535: struct FPU_Related<Checked_Number<T, Policy> > : public FPU_Related<T> {};
+16535: 
+16535: template <typename T>
+16535: void maybe_reset_fpu_inexact();
+16535: 
+16535: template <typename T>
+16535: int maybe_check_fpu_inexact();
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Checked_Number_inlines.hh" 1
+16535: # 31 "../../src/Checked_Number_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: inline Rounding_Dir
+16535: rounding_dir(Rounding_Dir dir) {
+16535:   if (dir == ROUND_NOT_NEEDED) {
+16535: 
+16535: 
+16535: 
+16535:   }
+16535:   return dir;
+16535: }
+16535: 
+16535: inline Result
+16535: check_result(Result r, Rounding_Dir dir) {
+16535:   if (dir == ROUND_NOT_NEEDED) {
+16535: 
+16535: 
+16535: 
+16535:     return r;
+16535:   }
+16535:   return r;
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Checked_Number_Transparent_Policy<T>::handle_result(Result) {
+16535: }
+16535: 
+16535: inline void
+16535: Extended_Number_Policy::handle_result(Result r) {
+16535:   if (result_class(r) == VC_NAN) {
+16535:     throw_result_exception(r);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline
+16535: Checked_Number<T, Policy>::Checked_Number()
+16535:  : v(0) {
+16535: }
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline
+16535: Checked_Number<T, Policy>::Checked_Number(const Checked_Number& y) {
+16535: 
+16535:   Checked::copy<Policy, Policy>(v, y.raw_value());
+16535: }
+16535: 
+16535: template <typename T, typename Policy>
+16535: template <typename From, typename From_Policy>
+16535: inline
+16535: Checked_Number<T, Policy>
+16535: ::Checked_Number(const Checked_Number<From, From_Policy>& y,
+16535:                  Rounding_Dir dir) {
+16535: 
+16535:   Policy::handle_result(check_result(Checked::assign_ext<Policy, From_Policy>
+16535:                                      (v,
+16535:                                       y.raw_value(),
+16535:                                       rounding_dir(dir)),
+16535:                                      dir)
+16535:                         );
+16535: }
+16535: 
+16535: template <typename T, typename Policy>
+16535: template <typename From, typename From_Policy>
+16535: inline
+16535: Checked_Number<T, Policy>
+16535: ::Checked_Number(const Checked_Number<From, From_Policy>& y) {
+16535: 
+16535:   Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR;
+16535:   Policy::handle_result(check_result(Checked::assign_ext<Policy, From_Policy>
+16535:                                      (v,
+16535:                                       y.raw_value(),
+16535:                                       rounding_dir(dir)),
+16535:                                      dir));
+16535: }
+16535: # 133 "../../src/Checked_Number_inlines.hh"
+16535: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const char y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<char> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const char y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<char> > (v, y, rounding_dir(dir)), dir)); }
+16535: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const signed char y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<signed char> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const signed char y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<signed char> > (v, y, rounding_dir(dir)), dir)); }
+16535: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const signed short y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<signed short> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const signed short y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<signed short> > (v, y, rounding_dir(dir)), dir)); }
+16535: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const signed int y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<signed int> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const signed int y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<signed int> > (v, y, rounding_dir(dir)), dir)); }
+16535: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const signed long y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<signed long> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const signed long y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<signed long> > (v, y, rounding_dir(dir)), dir)); }
+16535: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const signed long long y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<signed long long> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const signed long long y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<signed long long> > (v, y, rounding_dir(dir)), dir)); }
+16535: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const unsigned char y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<unsigned char> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const unsigned char y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<unsigned char> > (v, y, rounding_dir(dir)), dir)); }
+16535: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const unsigned short y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<unsigned short> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const unsigned short y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<unsigned short> > (v, y, rounding_dir(dir)), dir)); }
+16535: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const unsigned int y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<unsigned int> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const unsigned int y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<unsigned int> > (v, y, rounding_dir(dir)), dir)); }
+16535: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const unsigned long y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<unsigned long> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const unsigned long y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<unsigned long> > (v, y, rounding_dir(dir)), dir)); }
+16535: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const unsigned long long y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<unsigned long long> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const unsigned long long y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<unsigned long long> > (v, y, rounding_dir(dir)), dir)); }
+16535: 
+16535: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const float y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<float> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const float y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<float> > (v, y, rounding_dir(dir)), dir)); }
+16535: 
+16535: 
+16535: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const double y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<double> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const double y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<double> > (v, y, rounding_dir(dir)), dir)); }
+16535: 
+16535: 
+16535: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const long double y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<long double> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const long double y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<long double> > (v, y, rounding_dir(dir)), dir)); }
+16535: 
+16535: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const mpq_class& y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<mpq_class&> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const mpq_class& y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<mpq_class&> > (v, y, rounding_dir(dir)), dir)); }
+16535: template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const mpz_class& y, Rounding_Dir dir) { Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<mpz_class&> > (v, y, rounding_dir(dir)), dir)); } template <typename T, typename Policy> inline Checked_Number<T, Policy>::Checked_Number(const mpz_class& y) { Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR; Policy::handle_result(check_result(Checked::assign_ext<Policy, Checked_Number_Transparent_Policy<mpz_class&> > (v, y, rounding_dir(dir)), dir)); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline
+16535: Checked_Number<T, Policy>::Checked_Number(const char* y, Rounding_Dir dir) {
+16535:   std::istringstream s(y);
+16535:   Policy::handle_result(check_result(Checked::input<Policy>(v,
+16535:                                                             s,
+16535:                                                             rounding_dir(dir)),
+16535:                                      dir));
+16535: }
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline
+16535: Checked_Number<T, Policy>::Checked_Number(const char* y) {
+16535:   std::istringstream s(y);
+16535:   Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR;
+16535:   Policy::handle_result(check_result(Checked::input<Policy>(v,
+16535:                                                             s,
+16535:                                                             rounding_dir(dir)),
+16535:                                      dir));
+16535: }
+16535: 
+16535: template <typename T, typename Policy>
+16535: template <typename From>
+16535: inline
+16535: Checked_Number<T, Policy>
+16535: ::Checked_Number(const From&,
+16535:                  Rounding_Dir dir,
+16535:                  typename Enable_If<Is_Special<From>::value, bool>::type) {
+16535:   Policy::handle_result(check_result(Checked::assign_special<Policy>(v,
+16535:                                                                      From::vclass,
+16535:                                                                      rounding_dir(dir)),
+16535:                                      dir));
+16535: }
+16535: 
+16535: template <typename T, typename Policy>
+16535: template <typename From>
+16535: inline
+16535: Checked_Number<T, Policy>::Checked_Number(const From&, typename Enable_If<Is_Special<From>::value, bool>::type) {
+16535:   Rounding_Dir dir = Policy::ROUND_DEFAULT_CONSTRUCTOR;
+16535:   Policy::handle_result(check_result(Checked::assign_special<Policy>(v,
+16535:                                                             From::vclass,
+16535:                                                             rounding_dir(dir)),
+16535:                                      dir));
+16535: }
+16535: 
+16535: template <typename To, typename From>
+16535: inline typename Enable_If<Is_Native_Or_Checked<To>::value
+16535:                           && Is_Special<From>::value, Result>::type
+16535: assign_r(To& to, const From&, Rounding_Dir dir) {
+16535:   return check_result(Checked::assign_special<typename Native_Checked_To_Wrapper<To>
+16535:                       ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to),
+16535:                                 From::vclass,
+16535:                                 rounding_dir(dir)),
+16535:                       dir);
+16535: }
+16535: 
+16535: template <typename To, typename From>
+16535: inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Special<From>::value, Result>::type
+16535: construct(To& to, const From&, Rounding_Dir dir) {
+16535:   return check_result(Checked::construct_special<typename Native_Checked_To_Wrapper<To>
+16535:                       ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to),
+16535:                                 From::vclass,
+16535:                                 rounding_dir(dir)),
+16535:                       dir);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
+16535: is_minus_infinity(const T& x) {
+16535:   return Checked::is_minf<typename Native_Checked_From_Wrapper<T>
+16535:     ::Policy>(Native_Checked_From_Wrapper<T>::raw_value(x));
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
+16535: is_plus_infinity(const T& x) {
+16535:   return Checked::is_pinf<typename Native_Checked_From_Wrapper<T>
+16535:     ::Policy>(Native_Checked_From_Wrapper<T>::raw_value(x));
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Enable_If<Is_Native_Or_Checked<T>::value, int>::type
+16535: infinity_sign(const T& x) {
+16535:   return is_minus_infinity(x) ? -1 : (is_plus_infinity(x) ? 1 : 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
+16535: is_not_a_number(const T& x) {
+16535:   return Checked::is_nan<typename Native_Checked_From_Wrapper<T>
+16535:     ::Policy>(Native_Checked_From_Wrapper<T>::raw_value(x));
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
+16535: is_integer(const T& x) {
+16535:   return Checked::is_int<typename Native_Checked_From_Wrapper<T>
+16535:     ::Policy>(Native_Checked_From_Wrapper<T>::raw_value(x));
+16535: }
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline
+16535: Checked_Number<T, Policy>::operator T() const {
+16535:   if (Policy::convertible) {
+16535:     return v;
+16535:   }
+16535: }
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline T&
+16535: Checked_Number<T, Policy>::raw_value() {
+16535:   return v;
+16535: }
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline const T&
+16535: Checked_Number<T, Policy>::raw_value() const {
+16535:   return v;
+16535: }
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline const T&
+16535: raw_value(const Checked_Number<T, Policy>& x) {
+16535:   return x.raw_value();
+16535: }
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline T&
+16535: raw_value(Checked_Number<T, Policy>& x) {
+16535:   return x.raw_value();
+16535: }
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline bool
+16535: Checked_Number<T, Policy>::OK() const {
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline Result
+16535: Checked_Number<T, Policy>::classify(bool nan, bool inf, bool sign) const {
+16535:   return Checked::classify<Policy>(v, nan, inf, sign);
+16535: }
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline bool
+16535: is_not_a_number(const Checked_Number<T, Policy>& x) {
+16535:   return Checked::is_nan<Policy>(x.raw_value());
+16535: }
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline bool
+16535: is_minus_infinity(const Checked_Number<T, Policy>& x) {
+16535:   return Checked::is_minf<Policy>(x.raw_value());
+16535: }
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline bool
+16535: is_plus_infinity(const Checked_Number<T, Policy>& x) {
+16535:   return Checked::is_pinf<Policy>(x.raw_value());
+16535: }
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline memory_size_type
+16535: total_memory_in_bytes(const Checked_Number<T, Policy>& x) {
+16535:   return total_memory_in_bytes(x.raw_value());
+16535: }
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline memory_size_type
+16535: external_memory_in_bytes(const Checked_Number<T, Policy>& x) {
+16535:   return external_memory_in_bytes(x.raw_value());
+16535: }
+16535: 
+16535: 
+16535: 
+16535: template <typename To>
+16535: inline typename Enable_If<Is_Native_Or_Checked<To>::value, Result>::type
+16535: assign_r(To& to, const char* x, Rounding_Dir dir) {
+16535:   std::istringstream s(x);
+16535:   return check_result(Checked::input<typename Native_Checked_To_Wrapper<To>
+16535:                       ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to),
+16535:                                 s,
+16535:                                 rounding_dir(dir)),
+16535:                       dir);
+16535: }
+16535: # 365 "../../src/Checked_Number_inlines.hh"
+16535: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type construct(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::construct_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), rounding_dir(dir)), dir); }
+16535: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type assign_r(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::assign_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), rounding_dir(dir)), dir); }
+16535: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type floor_assign_r(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::floor_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), rounding_dir(dir)), dir); }
+16535: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type ceil_assign_r(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::ceil_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), rounding_dir(dir)), dir); }
+16535: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type trunc_assign_r(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::trunc_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), rounding_dir(dir)), dir); }
+16535: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type neg_assign_r(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::neg_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), rounding_dir(dir)), dir); }
+16535: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type abs_assign_r(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::abs_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), rounding_dir(dir)), dir); }
+16535: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type sqrt_assign_r(To& to, const From& x, Rounding_Dir dir) { return check_result(Checked::sqrt_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), rounding_dir(dir)), dir); }
+16535: # 393 "../../src/Checked_Number_inlines.hh"
+16535: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type add_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { return check_result(Checked::add_2exp_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), exp, rounding_dir(dir)), dir); }
+16535: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type sub_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { return check_result(Checked::sub_2exp_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), exp, rounding_dir(dir)), dir); }
+16535: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type mul_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { return check_result(Checked::mul_2exp_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), exp, rounding_dir(dir)), dir); }
+16535: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type div_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { return check_result(Checked::div_2exp_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), exp, rounding_dir(dir)), dir); }
+16535: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type smod_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { return check_result(Checked::smod_2exp_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), exp, rounding_dir(dir)), dir); }
+16535: template <typename To, typename From> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From>::value, Result>::type umod_2exp_assign_r(To& to, const From& x, unsigned int exp, Rounding_Dir dir) { return check_result(Checked::umod_2exp_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From>::raw_value(x), exp, rounding_dir(dir)), dir); }
+16535: # 422 "../../src/Checked_Number_inlines.hh"
+16535: template <typename To, typename From1, typename From2> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type add_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::add_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From1> ::Policy, typename Native_Checked_From_Wrapper<From2> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From1>::raw_value(x), Native_Checked_From_Wrapper<From2>::raw_value(y), rounding_dir(dir)), dir); }
+16535: template <typename To, typename From1, typename From2> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type sub_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::sub_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From1> ::Policy, typename Native_Checked_From_Wrapper<From2> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From1>::raw_value(x), Native_Checked_From_Wrapper<From2>::raw_value(y), rounding_dir(dir)), dir); }
+16535: template <typename To, typename From1, typename From2> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type mul_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::mul_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From1> ::Policy, typename Native_Checked_From_Wrapper<From2> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From1>::raw_value(x), Native_Checked_From_Wrapper<From2>::raw_value(y), rounding_dir(dir)), dir); }
+16535: template <typename To, typename From1, typename From2> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type div_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::div_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From1> ::Policy, typename Native_Checked_From_Wrapper<From2> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From1>::raw_value(x), Native_Checked_From_Wrapper<From2>::raw_value(y), rounding_dir(dir)), dir); }
+16535: template <typename To, typename From1, typename From2> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type idiv_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::idiv_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From1> ::Policy, typename Native_Checked_From_Wrapper<From2> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From1>::raw_value(x), Native_Checked_From_Wrapper<From2>::raw_value(y), rounding_dir(dir)), dir); }
+16535: template <typename To, typename From1, typename From2> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type rem_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::rem_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From1> ::Policy, typename Native_Checked_From_Wrapper<From2> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From1>::raw_value(x), Native_Checked_From_Wrapper<From2>::raw_value(y), rounding_dir(dir)), dir); }
+16535: template <typename To, typename From1, typename From2> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type gcd_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::gcd_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From1> ::Policy, typename Native_Checked_From_Wrapper<From2> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From1>::raw_value(x), Native_Checked_From_Wrapper<From2>::raw_value(y), rounding_dir(dir)), dir); }
+16535: template <typename To, typename From1, typename From2> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type lcm_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::lcm_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From1> ::Policy, typename Native_Checked_From_Wrapper<From2> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From1>::raw_value(x), Native_Checked_From_Wrapper<From2>::raw_value(y), rounding_dir(dir)), dir); }
+16535: template <typename To, typename From1, typename From2> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type add_mul_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::add_mul_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From1> ::Policy, typename Native_Checked_From_Wrapper<From2> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From1>::raw_value(x), Native_Checked_From_Wrapper<From2>::raw_value(y), rounding_dir(dir)), dir); }
+16535: template <typename To, typename From1, typename From2> inline typename Enable_If<Is_Native_Or_Checked<To>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type sub_mul_assign_r(To& to, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::sub_mul_ext<typename Native_Checked_To_Wrapper<To> ::Policy, typename Native_Checked_From_Wrapper<From1> ::Policy, typename Native_Checked_From_Wrapper<From2> ::Policy>(Native_Checked_To_Wrapper<To>::raw_value(to), Native_Checked_From_Wrapper<From1>::raw_value(x), Native_Checked_From_Wrapper<From2>::raw_value(y), rounding_dir(dir)), dir); }
+16535: # 464 "../../src/Checked_Number_inlines.hh"
+16535: template <typename To1, typename To2, typename To3, typename From1, typename From2> inline typename Enable_If<Is_Native_Or_Checked<To1>::value && Is_Native_Or_Checked<To2>::value && Is_Native_Or_Checked<To3>::value && Is_Native_Or_Checked<From1>::value && Is_Native_Or_Checked<From2>::value, Result>::type gcdext_assign_r(To1& to, To2& s, To3& t, const From1& x, const From2& y, Rounding_Dir dir) { return check_result(Checked::gcdext_ext<typename Native_Checked_To_Wrapper<To1>::Policy, typename Native_Checked_To_Wrapper<To2>::Policy, typename Native_Checked_To_Wrapper<To3>::Policy, typename Native_Checked_From_Wrapper<From1>::Policy, typename Native_Checked_From_Wrapper<From2>::Policy> (Native_Checked_To_Wrapper<To1>::raw_value(to), Native_Checked_To_Wrapper<To2>::raw_value(s), Native_Checked_To_Wrapper<To3>::raw_value(t), Native_Checked_From_Wrapper<From1>::raw_value(x), Native_Checked_From_Wrapper<From2>::raw_value(y), rounding_dir(dir)), dir); }
+16535: # 485 "../../src/Checked_Number_inlines.hh"
+16535: template <typename T, typename Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator ++() { Policy::handle_result((add_assign_r)(*this, *this, T(1), Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> inline Checked_Number<T, Policy> Checked_Number<T, Policy>::operator ++(int) { T r = v; Policy::handle_result((add_assign_r)(*this, *this, T(1), Policy::ROUND_DEFAULT_OPERATOR)); return r;}
+16535: template <typename T, typename Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator --() { Policy::handle_result((sub_assign_r)(*this, *this, T(1), Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> inline Checked_Number<T, Policy> Checked_Number<T, Policy>::operator --(int) { T r = v; Policy::handle_result((sub_assign_r)(*this, *this, T(1), Policy::ROUND_DEFAULT_OPERATOR)); return r;}
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline Checked_Number<T, Policy>&
+16535: Checked_Number<T, Policy>::operator=(const Checked_Number<T, Policy>& y) {
+16535:   Checked::copy<Policy, Policy>(v, y.raw_value());
+16535:   return *this;
+16535: }
+16535: template <typename T, typename Policy>
+16535: template <typename From>
+16535: inline Checked_Number<T, Policy>&
+16535: Checked_Number<T, Policy>::operator=(const From& y) {
+16535:   Policy::handle_result(assign_r(*this, y, Policy::ROUND_DEFAULT_OPERATOR));
+16535:   return *this;
+16535: }
+16535: # 531 "../../src/Checked_Number_inlines.hh"
+16535: template <typename T, typename Policy> template <typename From_Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator +=(const Checked_Number<T, From_Policy>& y) { Policy::handle_result((add_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator +=(const T& y) { Policy::handle_result((add_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> template <typename From> inline typename Enable_If<Is_Native_Or_Checked<From>::value, Checked_Number<T, Policy>& >::type Checked_Number<T, Policy>::operator +=(const From& y) { Checked_Number<T, Policy> cy(y); Policy::handle_result((add_assign_r)(*this, *this, cy, Policy::ROUND_DEFAULT_OPERATOR)); return *this; }
+16535: template <typename T, typename Policy> template <typename From_Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator -=(const Checked_Number<T, From_Policy>& y) { Policy::handle_result((sub_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator -=(const T& y) { Policy::handle_result((sub_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> template <typename From> inline typename Enable_If<Is_Native_Or_Checked<From>::value, Checked_Number<T, Policy>& >::type Checked_Number<T, Policy>::operator -=(const From& y) { Checked_Number<T, Policy> cy(y); Policy::handle_result((sub_assign_r)(*this, *this, cy, Policy::ROUND_DEFAULT_OPERATOR)); return *this; }
+16535: template <typename T, typename Policy> template <typename From_Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator *=(const Checked_Number<T, From_Policy>& y) { Policy::handle_result((mul_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator *=(const T& y) { Policy::handle_result((mul_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> template <typename From> inline typename Enable_If<Is_Native_Or_Checked<From>::value, Checked_Number<T, Policy>& >::type Checked_Number<T, Policy>::operator *=(const From& y) { Checked_Number<T, Policy> cy(y); Policy::handle_result((mul_assign_r)(*this, *this, cy, Policy::ROUND_DEFAULT_OPERATOR)); return *this; }
+16535: template <typename T, typename Policy> template <typename From_Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator /=(const Checked_Number<T, From_Policy>& y) { Policy::handle_result((div_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator /=(const T& y) { Policy::handle_result((div_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> template <typename From> inline typename Enable_If<Is_Native_Or_Checked<From>::value, Checked_Number<T, Policy>& >::type Checked_Number<T, Policy>::operator /=(const From& y) { Checked_Number<T, Policy> cy(y); Policy::handle_result((div_assign_r)(*this, *this, cy, Policy::ROUND_DEFAULT_OPERATOR)); return *this; }
+16535: template <typename T, typename Policy> template <typename From_Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator %=(const Checked_Number<T, From_Policy>& y) { Policy::handle_result((rem_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> inline Checked_Number<T, Policy>& Checked_Number<T, Policy>::operator %=(const T& y) { Policy::handle_result((rem_assign_r)(*this, *this, y, Policy::ROUND_DEFAULT_OPERATOR)); return *this; } template <typename T, typename Policy> template <typename From> inline typename Enable_If<Is_Native_Or_Checked<From>::value, Checked_Number<T, Policy>& >::type Checked_Number<T, Policy>::operator %=(const From& y) { Checked_Number<T, Policy> cy(y); Policy::handle_result((rem_assign_r)(*this, *this, cy, Policy::ROUND_DEFAULT_OPERATOR)); return *this; }
+16535: # 565 "../../src/Checked_Number_inlines.hh"
+16535: template <typename T, typename Policy> inline Checked_Number<T, Policy> operator +(const Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y) { Checked_Number<T, Policy> r; Policy::handle_result((add_assign_r)(r, x, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template <typename Type, typename T, typename Policy> inline typename Enable_If<Is_Native<Type>::value, Checked_Number<T, Policy> >::type operator +(const Type& x, const Checked_Number<T, Policy>& y) { Checked_Number<T, Policy> r(x); Policy::handle_result((add_assign_r)(r, r, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template <typename T, typename Policy, typename Type> inline typename Enable_If<Is_Native<Type>::value, Checked_Number<T, Policy> >::type operator +(const Checked_Number<T, Policy>& x, const Type& y) { Checked_Number<T, Policy> r(y); Policy::handle_result((add_assign_r)(r, x, r, Policy::ROUND_DEFAULT_OPERATOR)); return r; }
+16535: template <typename T, typename Policy> inline Checked_Number<T, Policy> operator -(const Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y) { Checked_Number<T, Policy> r; Policy::handle_result((sub_assign_r)(r, x, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template <typename Type, typename T, typename Policy> inline typename Enable_If<Is_Native<Type>::value, Checked_Number<T, Policy> >::type operator -(const Type& x, const Checked_Number<T, Policy>& y) { Checked_Number<T, Policy> r(x); Policy::handle_result((sub_assign_r)(r, r, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template <typename T, typename Policy, typename Type> inline typename Enable_If<Is_Native<Type>::value, Checked_Number<T, Policy> >::type operator -(const Checked_Number<T, Policy>& x, const Type& y) { Checked_Number<T, Policy> r(y); Policy::handle_result((sub_assign_r)(r, x, r, Policy::ROUND_DEFAULT_OPERATOR)); return r; }
+16535: template <typename T, typename Policy> inline Checked_Number<T, Policy> operator *(const Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y) { Checked_Number<T, Policy> r; Policy::handle_result((mul_assign_r)(r, x, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template <typename Type, typename T, typename Policy> inline typename Enable_If<Is_Native<Type>::value, Checked_Number<T, Policy> >::type operator *(const Type& x, const Checked_Number<T, Policy>& y) { Checked_Number<T, Policy> r(x); Policy::handle_result((mul_assign_r)(r, r, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template <typename T, typename Policy, typename Type> inline typename Enable_If<Is_Native<Type>::value, Checked_Number<T, Policy> >::type operator *(const Checked_Number<T, Policy>& x, const Type& y) { Checked_Number<T, Policy> r(y); Policy::handle_result((mul_assign_r)(r, x, r, Policy::ROUND_DEFAULT_OPERATOR)); return r; }
+16535: template <typename T, typename Policy> inline Checked_Number<T, Policy> operator /(const Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y) { Checked_Number<T, Policy> r; Policy::handle_result((div_assign_r)(r, x, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template <typename Type, typename T, typename Policy> inline typename Enable_If<Is_Native<Type>::value, Checked_Number<T, Policy> >::type operator /(const Type& x, const Checked_Number<T, Policy>& y) { Checked_Number<T, Policy> r(x); Policy::handle_result((div_assign_r)(r, r, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template <typename T, typename Policy, typename Type> inline typename Enable_If<Is_Native<Type>::value, Checked_Number<T, Policy> >::type operator /(const Checked_Number<T, Policy>& x, const Type& y) { Checked_Number<T, Policy> r(y); Policy::handle_result((div_assign_r)(r, x, r, Policy::ROUND_DEFAULT_OPERATOR)); return r; }
+16535: template <typename T, typename Policy> inline Checked_Number<T, Policy> operator %(const Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y) { Checked_Number<T, Policy> r; Policy::handle_result((rem_assign_r)(r, x, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template <typename Type, typename T, typename Policy> inline typename Enable_If<Is_Native<Type>::value, Checked_Number<T, Policy> >::type operator %(const Type& x, const Checked_Number<T, Policy>& y) { Checked_Number<T, Policy> r(x); Policy::handle_result((rem_assign_r)(r, r, y, Policy::ROUND_DEFAULT_OPERATOR)); return r; } template <typename T, typename Policy, typename Type> inline typename Enable_If<Is_Native<Type>::value, Checked_Number<T, Policy> >::type operator %(const Checked_Number<T, Policy>& x, const Type& y) { Checked_Number<T, Policy> r(y); Policy::handle_result((rem_assign_r)(r, x, r, Policy::ROUND_DEFAULT_OPERATOR)); return r; }
+16535: # 587 "../../src/Checked_Number_inlines.hh"
+16535: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value && (Is_Checked<T1>::value || Is_Checked<T2>::value), bool>::type operator ==(const T1& x, const T2& y) { return Checked::eq_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
+16535: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value && (Is_Checked<T1>::value || Is_Checked<T2>::value), bool>::type operator !=(const T1& x, const T2& y) { return Checked::ne_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
+16535: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value && (Is_Checked<T1>::value || Is_Checked<T2>::value), bool>::type operator >=(const T1& x, const T2& y) { return Checked::ge_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
+16535: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value && (Is_Checked<T1>::value || Is_Checked<T2>::value), bool>::type operator >(const T1& x, const T2& y) { return Checked::gt_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
+16535: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value && (Is_Checked<T1>::value || Is_Checked<T2>::value), bool>::type operator <=(const T1& x, const T2& y) { return Checked::le_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
+16535: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value && (Is_Checked<T1>::value || Is_Checked<T2>::value), bool>::type operator <(const T1& x, const T2& y) { return Checked::lt_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
+16535: # 608 "../../src/Checked_Number_inlines.hh"
+16535: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value, bool>::type equal(const T1& x, const T2& y) { return Checked::eq_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
+16535: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value, bool>::type not_equal(const T1& x, const T2& y) { return Checked::ne_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
+16535: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value, bool>::type greater_or_equal(const T1& x, const T2& y) { return Checked::ge_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
+16535: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value, bool>::type greater_than(const T1& x, const T2& y) { return Checked::gt_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
+16535: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value, bool>::type less_or_equal(const T1& x, const T2& y) { return Checked::le_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
+16535: template <typename T1, typename T2> inline typename Enable_If<Is_Native_Or_Checked<T1>::value && Is_Native_Or_Checked<T2>::value, bool>::type less_than(const T1& x, const T2& y) { return Checked::lt_ext<typename Native_Checked_From_Wrapper<T1>::Policy, typename Native_Checked_From_Wrapper<T2>::Policy> (Native_Checked_From_Wrapper<T1>::raw_value(x), Native_Checked_From_Wrapper<T2>::raw_value(y)); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline Checked_Number<T, Policy>
+16535: operator+(const Checked_Number<T, Policy>& x) {
+16535:   return x;
+16535: }
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline Checked_Number<T, Policy>
+16535: operator-(const Checked_Number<T, Policy>& x) {
+16535:   Checked_Number<T, Policy> r;
+16535:   Policy::handle_result(neg_assign_r(r, x, Policy::ROUND_DEFAULT_OPERATOR));
+16535:   return r;
+16535: }
+16535: # 665 "../../src/Checked_Number_inlines.hh"
+16535: template <typename T, typename Policy> inline void sqrt_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y) { Policy::handle_result((sqrt_assign_r)(x, y, Policy::ROUND_DEFAULT_FUNCTION)); }
+16535: 
+16535: template <typename T, typename Policy> inline void floor_assign(Checked_Number<T, Policy>& x) { Policy::handle_result((floor_assign_r)(x, x, Policy::ROUND_DEFAULT_FUNCTION)); }
+16535: template <typename T, typename Policy> inline void floor_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y) { Policy::handle_result((floor_assign_r)(x, y, Policy::ROUND_DEFAULT_FUNCTION)); }
+16535: 
+16535: template <typename T, typename Policy> inline void ceil_assign(Checked_Number<T, Policy>& x) { Policy::handle_result((ceil_assign_r)(x, x, Policy::ROUND_DEFAULT_FUNCTION)); }
+16535: template <typename T, typename Policy> inline void ceil_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y) { Policy::handle_result((ceil_assign_r)(x, y, Policy::ROUND_DEFAULT_FUNCTION)); }
+16535: 
+16535: template <typename T, typename Policy> inline void trunc_assign(Checked_Number<T, Policy>& x) { Policy::handle_result((trunc_assign_r)(x, x, Policy::ROUND_DEFAULT_FUNCTION)); }
+16535: template <typename T, typename Policy> inline void trunc_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y) { Policy::handle_result((trunc_assign_r)(x, y, Policy::ROUND_DEFAULT_FUNCTION)); }
+16535: 
+16535: template <typename T, typename Policy> inline void neg_assign(Checked_Number<T, Policy>& x) { Policy::handle_result((neg_assign_r)(x, x, Policy::ROUND_DEFAULT_FUNCTION)); }
+16535: template <typename T, typename Policy> inline void neg_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y) { Policy::handle_result((neg_assign_r)(x, y, Policy::ROUND_DEFAULT_FUNCTION)); }
+16535: 
+16535: template <typename T, typename Policy> inline void abs_assign(Checked_Number<T, Policy>& x) { Policy::handle_result((abs_assign_r)(x, x, Policy::ROUND_DEFAULT_FUNCTION)); }
+16535: template <typename T, typename Policy> inline void abs_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y) { Policy::handle_result((abs_assign_r)(x, y, Policy::ROUND_DEFAULT_FUNCTION)); }
+16535: 
+16535: template <typename T, typename Policy> inline void add_mul_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y, const Checked_Number<T, Policy>& z) { Policy::handle_result((add_mul_assign_r)(x, y, z, Policy::ROUND_DEFAULT_FUNCTION)); }
+16535: 
+16535: template <typename T, typename Policy> inline void sub_mul_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y, const Checked_Number<T, Policy>& z) { Policy::handle_result((sub_mul_assign_r)(x, y, z, Policy::ROUND_DEFAULT_FUNCTION)); }
+16535: 
+16535: template <typename T, typename Policy> inline void rem_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y, const Checked_Number<T, Policy>& z) { Policy::handle_result((rem_assign_r)(x, y, z, Policy::ROUND_DEFAULT_FUNCTION)); }
+16535: 
+16535: template <typename T, typename Policy> inline void gcd_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y, const Checked_Number<T, Policy>& z) { Policy::handle_result((gcd_assign_r)(x, y, z, Policy::ROUND_DEFAULT_FUNCTION)); }
+16535: 
+16535: template <typename T, typename Policy> inline void gcdext_assign(Checked_Number<T, Policy>& x, Checked_Number<T, Policy>& s, Checked_Number<T, Policy>& t, const Checked_Number<T, Policy>& y, const Checked_Number<T, Policy>& z) { Policy::handle_result((gcdext_assign_r)(x, s, t, y, z, Policy::ROUND_DEFAULT_FUNCTION)); }
+16535: 
+16535: template <typename T, typename Policy> inline void lcm_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y, const Checked_Number<T, Policy>& z) { Policy::handle_result((lcm_assign_r)(x, y, z, Policy::ROUND_DEFAULT_FUNCTION)); }
+16535: # 708 "../../src/Checked_Number_inlines.hh"
+16535: template <typename T, typename Policy> inline void mul_2exp_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y, unsigned int exp) { Policy::handle_result((mul_2exp_assign_r)(x, y, exp, Policy::ROUND_DEFAULT_FUNCTION)); }
+16535: template <typename T, typename Policy> inline void div_2exp_assign(Checked_Number<T, Policy>& x, const Checked_Number<T, Policy>& y, unsigned int exp) { Policy::handle_result((div_2exp_assign_r)(x, y, exp, Policy::ROUND_DEFAULT_FUNCTION)); }
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline void
+16535: exact_div_assign(Checked_Number<T, Policy>& x,
+16535:                  const Checked_Number<T, Policy>& y,
+16535:                  const Checked_Number<T, Policy>& z) {
+16535:   Policy::handle_result(div_assign_r(x, y, z, ROUND_NOT_NEEDED));
+16535: }
+16535: 
+16535: 
+16535: template <typename From>
+16535: inline typename Enable_If<Is_Native_Or_Checked<From>::value, int>::type
+16535: sgn(const From& x) {
+16535:   Result_Relation r
+16535:     = Checked::sgn_ext<typename Native_Checked_From_Wrapper<From>::Policy>
+16535:         (Native_Checked_From_Wrapper<From>::raw_value(x));
+16535:   switch (r) {
+16535:   case VR_LT:
+16535:     return -1;
+16535:   case VR_EQ:
+16535:     return 0;
+16535:   case VR_GT:
+16535:     return 1;
+16535:   default:
+16535:     throw(0);
+16535:   }
+16535: }
+16535: 
+16535: 
+16535: template <typename From1, typename From2>
+16535: inline typename Enable_If<Is_Native_Or_Checked<From1>::value
+16535:                           && Is_Native_Or_Checked<From2>::value,
+16535:                           int>::type
+16535: cmp(const From1& x, const From2& y) {
+16535:   Result_Relation r
+16535:     = Checked::cmp_ext<typename Native_Checked_From_Wrapper<From1>::Policy,
+16535:                        typename Native_Checked_From_Wrapper<From2>::Policy>
+16535:                  (Native_Checked_From_Wrapper<From1>::raw_value(x),
+16535:                   Native_Checked_From_Wrapper<From2>::raw_value(y));
+16535:   switch (r) {
+16535:   case VR_LT:
+16535:     return -1;
+16535:   case VR_EQ:
+16535:     return 0;
+16535:   case VR_GT:
+16535:     return 1;
+16535:   default:
+16535:     throw(0);
+16535:   }
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: typename Enable_If<Is_Native_Or_Checked<T>::value, Result>::type
+16535: output(std::ostream& os, const T& x,
+16535:        const Numeric_Format& format, Rounding_Dir dir) {
+16535:   return check_result(Checked::output_ext<typename Native_Checked_From_Wrapper<T>::Policy>
+16535:                       (os,
+16535:                        Native_Checked_From_Wrapper<T>::raw_value(x),
+16535:                        format,
+16535:                        rounding_dir(dir)),
+16535:                       dir);
+16535: }
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline std::ostream&
+16535: operator<<(std::ostream& os, const Checked_Number<T, Policy>& x) {
+16535:   Policy::handle_result(output(os, x, Numeric_Format(), ROUND_IGNORE));
+16535:   return os;
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: typename Enable_If<Is_Native_Or_Checked<T>::value, Result>::type
+16535: input(T& x, std::istream& is, Rounding_Dir dir) {
+16535:   return check_result(Checked::input_ext<typename Native_Checked_To_Wrapper<T>::Policy>
+16535:                       (Native_Checked_To_Wrapper<T>::raw_value(x),
+16535:                        is,
+16535:                        rounding_dir(dir)),
+16535:                       dir);
+16535: }
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline std::istream& operator>>(std::istream& is,
+16535:                                 Checked_Number<T, Policy>& x) {
+16535:   Result r = input(x, is, Policy::ROUND_DEFAULT_INPUT);
+16535:   if (r == V_CVT_STR_UNK) {
+16535:     is.setstate(std::ios::failbit);
+16535:   }
+16535:   else {
+16535:     Policy::handle_result(r);
+16535:   }
+16535:   return is;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline T
+16535: plus_infinity() {
+16535:   return PLUS_INFINITY;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline T
+16535: minus_infinity() {
+16535:   return MINUS_INFINITY;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline T
+16535: not_a_number() {
+16535:   return NOT_A_NUMBER;
+16535: }
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline void
+16535: swap(Checked_Number<T, Policy>& x, Checked_Number<T, Policy>& y) {
+16535:   using std::swap;
+16535:   swap(x.raw_value(), y.raw_value());
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: maybe_reset_fpu_inexact() {
+16535:   if (FPU_Related<T>::value) {
+16535:     return fpu_reset_inexact();
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline int
+16535: maybe_check_fpu_inexact() {
+16535:   if (FPU_Related<T>::value) {
+16535:     return fpu_check_inexact();
+16535:   }
+16535:   else {
+16535:     return 0;
+16535:   }
+16535: }
+16535: 
+16535: }
+16535: # 1068 "../../src/Checked_Number_defs.hh" 2
+16535: # 1 "../../src/Checked_Number_templates.hh" 1
+16535: # 28 "../../src/Checked_Number_templates.hh"
+16535: # 1 "/usr/include/c++/8/iomanip" 1 3
+16535: # 36 "/usr/include/c++/8/iomanip" 3
+16535:        
+16535: # 37 "/usr/include/c++/8/iomanip" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/locale" 1 3
+16535: # 36 "/usr/include/c++/8/locale" 3
+16535:        
+16535: # 37 "/usr/include/c++/8/locale" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/locale_facets_nonio.h" 1 3
+16535: # 37 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:        
+16535: # 38 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535: 
+16535: # 1 "/usr/include/c++/8/ctime" 1 3
+16535: # 39 "/usr/include/c++/8/ctime" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/ctime" 3
+16535: # 58 "/usr/include/c++/8/ctime" 3
+16535: 
+16535: # 58 "/usr/include/c++/8/ctime" 3
+16535: namespace std
+16535: {
+16535:   using ::clock_t;
+16535:   using ::time_t;
+16535:   using ::tm;
+16535: 
+16535:   using ::clock;
+16535:   using ::difftime;
+16535:   using ::mktime;
+16535:   using ::time;
+16535:   using ::asctime;
+16535:   using ::ctime;
+16535:   using ::gmtime;
+16535:   using ::localtime;
+16535:   using ::strftime;
+16535: }
+16535: # 40 "/usr/include/c++/8/bits/locale_facets_nonio.h" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 52 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:   class time_base
+16535:   {
+16535:   public:
+16535:     enum dateorder { no_order, dmy, mdy, ymd, ydm };
+16535:   };
+16535: 
+16535:   template<typename _CharT>
+16535:     struct __timepunct_cache : public locale::facet
+16535:     {
+16535: 
+16535:       static const _CharT* _S_timezones[14];
+16535: 
+16535:       const _CharT* _M_date_format;
+16535:       const _CharT* _M_date_era_format;
+16535:       const _CharT* _M_time_format;
+16535:       const _CharT* _M_time_era_format;
+16535:       const _CharT* _M_date_time_format;
+16535:       const _CharT* _M_date_time_era_format;
+16535:       const _CharT* _M_am;
+16535:       const _CharT* _M_pm;
+16535:       const _CharT* _M_am_pm_format;
+16535: 
+16535: 
+16535:       const _CharT* _M_day1;
+16535:       const _CharT* _M_day2;
+16535:       const _CharT* _M_day3;
+16535:       const _CharT* _M_day4;
+16535:       const _CharT* _M_day5;
+16535:       const _CharT* _M_day6;
+16535:       const _CharT* _M_day7;
+16535: 
+16535: 
+16535:       const _CharT* _M_aday1;
+16535:       const _CharT* _M_aday2;
+16535:       const _CharT* _M_aday3;
+16535:       const _CharT* _M_aday4;
+16535:       const _CharT* _M_aday5;
+16535:       const _CharT* _M_aday6;
+16535:       const _CharT* _M_aday7;
+16535: 
+16535: 
+16535:       const _CharT* _M_month01;
+16535:       const _CharT* _M_month02;
+16535:       const _CharT* _M_month03;
+16535:       const _CharT* _M_month04;
+16535:       const _CharT* _M_month05;
+16535:       const _CharT* _M_month06;
+16535:       const _CharT* _M_month07;
+16535:       const _CharT* _M_month08;
+16535:       const _CharT* _M_month09;
+16535:       const _CharT* _M_month10;
+16535:       const _CharT* _M_month11;
+16535:       const _CharT* _M_month12;
+16535: 
+16535: 
+16535:       const _CharT* _M_amonth01;
+16535:       const _CharT* _M_amonth02;
+16535:       const _CharT* _M_amonth03;
+16535:       const _CharT* _M_amonth04;
+16535:       const _CharT* _M_amonth05;
+16535:       const _CharT* _M_amonth06;
+16535:       const _CharT* _M_amonth07;
+16535:       const _CharT* _M_amonth08;
+16535:       const _CharT* _M_amonth09;
+16535:       const _CharT* _M_amonth10;
+16535:       const _CharT* _M_amonth11;
+16535:       const _CharT* _M_amonth12;
+16535: 
+16535:       bool _M_allocated;
+16535: 
+16535:       __timepunct_cache(size_t __refs = 0) : facet(__refs),
+16535:       _M_date_format(0), _M_date_era_format(0), _M_time_format(0),
+16535:       _M_time_era_format(0), _M_date_time_format(0),
+16535:       _M_date_time_era_format(0), _M_am(0), _M_pm(0),
+16535:       _M_am_pm_format(0), _M_day1(0), _M_day2(0), _M_day3(0),
+16535:       _M_day4(0), _M_day5(0), _M_day6(0), _M_day7(0),
+16535:       _M_aday1(0), _M_aday2(0), _M_aday3(0), _M_aday4(0),
+16535:       _M_aday5(0), _M_aday6(0), _M_aday7(0), _M_month01(0),
+16535:       _M_month02(0), _M_month03(0), _M_month04(0), _M_month05(0),
+16535:       _M_month06(0), _M_month07(0), _M_month08(0), _M_month09(0),
+16535:       _M_month10(0), _M_month11(0), _M_month12(0), _M_amonth01(0),
+16535:       _M_amonth02(0), _M_amonth03(0), _M_amonth04(0),
+16535:       _M_amonth05(0), _M_amonth06(0), _M_amonth07(0),
+16535:       _M_amonth08(0), _M_amonth09(0), _M_amonth10(0),
+16535:       _M_amonth11(0), _M_amonth12(0), _M_allocated(false)
+16535:       { }
+16535: 
+16535:       ~__timepunct_cache();
+16535: 
+16535:     private:
+16535:       __timepunct_cache&
+16535:       operator=(const __timepunct_cache&);
+16535: 
+16535:       explicit
+16535:       __timepunct_cache(const __timepunct_cache&);
+16535:     };
+16535: 
+16535:   template<typename _CharT>
+16535:     __timepunct_cache<_CharT>::~__timepunct_cache()
+16535:     {
+16535:       if (_M_allocated)
+16535:  {
+16535: 
+16535:  }
+16535:     }
+16535: 
+16535: 
+16535:   template<>
+16535:     const char*
+16535:     __timepunct_cache<char>::_S_timezones[14];
+16535: 
+16535: 
+16535:   template<>
+16535:     const wchar_t*
+16535:     __timepunct_cache<wchar_t>::_S_timezones[14];
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     const _CharT* __timepunct_cache<_CharT>::_S_timezones[14];
+16535: 
+16535:   template<typename _CharT>
+16535:     class __timepunct : public locale::facet
+16535:     {
+16535:     public:
+16535: 
+16535:       typedef _CharT __char_type;
+16535:       typedef __timepunct_cache<_CharT> __cache_type;
+16535: 
+16535:     protected:
+16535:       __cache_type* _M_data;
+16535:       __c_locale _M_c_locale_timepunct;
+16535:       const char* _M_name_timepunct;
+16535: 
+16535:     public:
+16535: 
+16535:       static locale::id id;
+16535: 
+16535:       explicit
+16535:       __timepunct(size_t __refs = 0);
+16535: 
+16535:       explicit
+16535:       __timepunct(__cache_type* __cache, size_t __refs = 0);
+16535: # 206 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       explicit
+16535:       __timepunct(__c_locale __cloc, const char* __s, size_t __refs = 0);
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_put(_CharT* __s, size_t __maxlen, const _CharT* __format,
+16535:       const tm* __tm) const throw ();
+16535: 
+16535:       void
+16535:       _M_date_formats(const _CharT** __date) const
+16535:       {
+16535: 
+16535:  __date[0] = _M_data->_M_date_format;
+16535:  __date[1] = _M_data->_M_date_era_format;
+16535:       }
+16535: 
+16535:       void
+16535:       _M_time_formats(const _CharT** __time) const
+16535:       {
+16535: 
+16535:  __time[0] = _M_data->_M_time_format;
+16535:  __time[1] = _M_data->_M_time_era_format;
+16535:       }
+16535: 
+16535:       void
+16535:       _M_date_time_formats(const _CharT** __dt) const
+16535:       {
+16535: 
+16535:  __dt[0] = _M_data->_M_date_time_format;
+16535:  __dt[1] = _M_data->_M_date_time_era_format;
+16535:       }
+16535: 
+16535: 
+16535:       void
+16535:       _M_am_pm_format(const _CharT*) const
+16535:       { }
+16535: 
+16535: 
+16535:       void
+16535:       _M_am_pm(const _CharT** __ampm) const
+16535:       {
+16535:  __ampm[0] = _M_data->_M_am;
+16535:  __ampm[1] = _M_data->_M_pm;
+16535:       }
+16535: 
+16535:       void
+16535:       _M_days(const _CharT** __days) const
+16535:       {
+16535:  __days[0] = _M_data->_M_day1;
+16535:  __days[1] = _M_data->_M_day2;
+16535:  __days[2] = _M_data->_M_day3;
+16535:  __days[3] = _M_data->_M_day4;
+16535:  __days[4] = _M_data->_M_day5;
+16535:  __days[5] = _M_data->_M_day6;
+16535:  __days[6] = _M_data->_M_day7;
+16535:       }
+16535: 
+16535:       void
+16535:       _M_days_abbreviated(const _CharT** __days) const
+16535:       {
+16535:  __days[0] = _M_data->_M_aday1;
+16535:  __days[1] = _M_data->_M_aday2;
+16535:  __days[2] = _M_data->_M_aday3;
+16535:  __days[3] = _M_data->_M_aday4;
+16535:  __days[4] = _M_data->_M_aday5;
+16535:  __days[5] = _M_data->_M_aday6;
+16535:  __days[6] = _M_data->_M_aday7;
+16535:       }
+16535: 
+16535:       void
+16535:       _M_months(const _CharT** __months) const
+16535:       {
+16535:  __months[0] = _M_data->_M_month01;
+16535:  __months[1] = _M_data->_M_month02;
+16535:  __months[2] = _M_data->_M_month03;
+16535:  __months[3] = _M_data->_M_month04;
+16535:  __months[4] = _M_data->_M_month05;
+16535:  __months[5] = _M_data->_M_month06;
+16535:  __months[6] = _M_data->_M_month07;
+16535:  __months[7] = _M_data->_M_month08;
+16535:  __months[8] = _M_data->_M_month09;
+16535:  __months[9] = _M_data->_M_month10;
+16535:  __months[10] = _M_data->_M_month11;
+16535:  __months[11] = _M_data->_M_month12;
+16535:       }
+16535: 
+16535:       void
+16535:       _M_months_abbreviated(const _CharT** __months) const
+16535:       {
+16535:  __months[0] = _M_data->_M_amonth01;
+16535:  __months[1] = _M_data->_M_amonth02;
+16535:  __months[2] = _M_data->_M_amonth03;
+16535:  __months[3] = _M_data->_M_amonth04;
+16535:  __months[4] = _M_data->_M_amonth05;
+16535:  __months[5] = _M_data->_M_amonth06;
+16535:  __months[6] = _M_data->_M_amonth07;
+16535:  __months[7] = _M_data->_M_amonth08;
+16535:  __months[8] = _M_data->_M_amonth09;
+16535:  __months[9] = _M_data->_M_amonth10;
+16535:  __months[10] = _M_data->_M_amonth11;
+16535:  __months[11] = _M_data->_M_amonth12;
+16535:       }
+16535: 
+16535:     protected:
+16535:       virtual
+16535:       ~__timepunct();
+16535: 
+16535: 
+16535:       void
+16535:       _M_initialize_timepunct(__c_locale __cloc = 0);
+16535:     };
+16535: 
+16535:   template<typename _CharT>
+16535:     locale::id __timepunct<_CharT>::id;
+16535: 
+16535: 
+16535:   template<>
+16535:     void
+16535:     __timepunct<char>::_M_initialize_timepunct(__c_locale __cloc);
+16535: 
+16535:   template<>
+16535:     void
+16535:     __timepunct<char>::_M_put(char*, size_t, const char*, const tm*) const throw ();
+16535: 
+16535: 
+16535:   template<>
+16535:     void
+16535:     __timepunct<wchar_t>::_M_initialize_timepunct(__c_locale __cloc);
+16535: 
+16535:   template<>
+16535:     void
+16535:     __timepunct<wchar_t>::_M_put(wchar_t*, size_t, const wchar_t*,
+16535:      const tm*) const throw ();
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/time_members.h" 1 3
+16535: # 37 "/usr/include/x86_64-linux-gnu/c++/8/bits/time_members.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     __timepunct<_CharT>::__timepunct(size_t __refs)
+16535:     : facet(__refs), _M_data(0), _M_c_locale_timepunct(0),
+16535:       _M_name_timepunct(_S_get_c_name())
+16535:     { _M_initialize_timepunct(); }
+16535: 
+16535:   template<typename _CharT>
+16535:     __timepunct<_CharT>::__timepunct(__cache_type* __cache, size_t __refs)
+16535:     : facet(__refs), _M_data(__cache), _M_c_locale_timepunct(0),
+16535:       _M_name_timepunct(_S_get_c_name())
+16535:     { _M_initialize_timepunct(); }
+16535: 
+16535:   template<typename _CharT>
+16535:     __timepunct<_CharT>::__timepunct(__c_locale __cloc, const char* __s,
+16535:          size_t __refs)
+16535:     : facet(__refs), _M_data(0), _M_c_locale_timepunct(0),
+16535:       _M_name_timepunct(0)
+16535:     {
+16535:       if (__builtin_strcmp(__s, _S_get_c_name()) != 0)
+16535:  {
+16535:    const size_t __len = __builtin_strlen(__s) + 1;
+16535:    char* __tmp = new char[__len];
+16535:    __builtin_memcpy(__tmp, __s, __len);
+16535:    _M_name_timepunct = __tmp;
+16535:  }
+16535:       else
+16535:  _M_name_timepunct = _S_get_c_name();
+16535: 
+16535:       try
+16535:  { _M_initialize_timepunct(__cloc); }
+16535:       catch(...)
+16535:  {
+16535:    if (_M_name_timepunct != _S_get_c_name())
+16535:      delete [] _M_name_timepunct;
+16535:    throw;
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _CharT>
+16535:     __timepunct<_CharT>::~__timepunct()
+16535:     {
+16535:       if (_M_name_timepunct != _S_get_c_name())
+16535:  delete [] _M_name_timepunct;
+16535:       delete _M_data;
+16535:       _S_destroy_c_locale(_M_c_locale_timepunct);
+16535:     }
+16535: 
+16535: 
+16535: }
+16535: # 347 "/usr/include/c++/8/bits/locale_facets_nonio.h" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: namespace __cxx11 {
+16535: # 367 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:   template<typename _CharT, typename _InIter>
+16535:     class time_get : public locale::facet, public time_base
+16535:     {
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef _InIter iter_type;
+16535: 
+16535: 
+16535: 
+16535:       static locale::id id;
+16535: # 388 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       explicit
+16535:       time_get(size_t __refs = 0)
+16535:       : facet (__refs) { }
+16535: # 405 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       dateorder
+16535:       date_order() const
+16535:       { return this->do_date_order(); }
+16535: # 429 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       iter_type
+16535:       get_time(iter_type __beg, iter_type __end, ios_base& __io,
+16535:         ios_base::iostate& __err, tm* __tm) const
+16535:       { return this->do_get_time(__beg, __end, __io, __err, __tm); }
+16535: # 454 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       iter_type
+16535:       get_date(iter_type __beg, iter_type __end, ios_base& __io,
+16535:         ios_base::iostate& __err, tm* __tm) const
+16535:       { return this->do_get_date(__beg, __end, __io, __err, __tm); }
+16535: # 482 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       iter_type
+16535:       get_weekday(iter_type __beg, iter_type __end, ios_base& __io,
+16535:     ios_base::iostate& __err, tm* __tm) const
+16535:       { return this->do_get_weekday(__beg, __end, __io, __err, __tm); }
+16535: # 511 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       iter_type
+16535:       get_monthname(iter_type __beg, iter_type __end, ios_base& __io,
+16535:       ios_base::iostate& __err, tm* __tm) const
+16535:       { return this->do_get_monthname(__beg, __end, __io, __err, __tm); }
+16535: # 537 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       iter_type
+16535:       get_year(iter_type __beg, iter_type __end, ios_base& __io,
+16535:         ios_base::iostate& __err, tm* __tm) const
+16535:       { return this->do_get_year(__beg, __end, __io, __err, __tm); }
+16535: # 558 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       inline
+16535:       iter_type get(iter_type __s, iter_type __end, ios_base& __io,
+16535:                     ios_base::iostate& __err, tm* __tm, char __format,
+16535:                     char __modifier = 0) const
+16535:       {
+16535:         return this->do_get(__s, __end, __io, __err, __tm, __format,
+16535:                             __modifier);
+16535:       }
+16535: # 585 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       iter_type get(iter_type __s, iter_type __end, ios_base& __io,
+16535:                     ios_base::iostate& __err, tm* __tm, const char_type* __fmt,
+16535:                     const char_type* __fmtend) const;
+16535: 
+16535: 
+16535:     protected:
+16535: 
+16535:       virtual
+16535:       ~time_get() { }
+16535: # 605 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       virtual dateorder
+16535:       do_date_order() const;
+16535: # 623 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       virtual iter_type
+16535:       do_get_time(iter_type __beg, iter_type __end, ios_base& __io,
+16535:     ios_base::iostate& __err, tm* __tm) const;
+16535: # 642 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       virtual iter_type
+16535:       do_get_date(iter_type __beg, iter_type __end, ios_base& __io,
+16535:     ios_base::iostate& __err, tm* __tm) const;
+16535: # 661 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       virtual iter_type
+16535:       do_get_weekday(iter_type __beg, iter_type __end, ios_base&,
+16535:        ios_base::iostate& __err, tm* __tm) const;
+16535: # 680 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       virtual iter_type
+16535:       do_get_monthname(iter_type __beg, iter_type __end, ios_base&,
+16535:          ios_base::iostate& __err, tm* __tm) const;
+16535: # 699 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       virtual iter_type
+16535:       do_get_year(iter_type __beg, iter_type __end, ios_base& __io,
+16535:     ios_base::iostate& __err, tm* __tm) const;
+16535: # 722 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       virtual
+16535: 
+16535:       iter_type
+16535:       do_get(iter_type __s, iter_type __end, ios_base& __f,
+16535:              ios_base::iostate& __err, tm* __tm,
+16535:              char __format, char __modifier) const;
+16535: 
+16535: 
+16535: 
+16535:       iter_type
+16535:       _M_extract_num(iter_type __beg, iter_type __end, int& __member,
+16535:        int __min, int __max, size_t __len,
+16535:        ios_base& __io, ios_base::iostate& __err) const;
+16535: 
+16535: 
+16535:       iter_type
+16535:       _M_extract_name(iter_type __beg, iter_type __end, int& __member,
+16535:         const _CharT** __names, size_t __indexlen,
+16535:         ios_base& __io, ios_base::iostate& __err) const;
+16535: 
+16535: 
+16535:       iter_type
+16535:       _M_extract_wday_or_month(iter_type __beg, iter_type __end, int& __member,
+16535:           const _CharT** __names, size_t __indexlen,
+16535:           ios_base& __io, ios_base::iostate& __err) const;
+16535: 
+16535: 
+16535:       iter_type
+16535:       _M_extract_via_format(iter_type __beg, iter_type __end, ios_base& __io,
+16535:        ios_base::iostate& __err, tm* __tm,
+16535:        const _CharT* __format) const;
+16535:     };
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     locale::id time_get<_CharT, _InIter>::id;
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     class time_get_byname : public time_get<_CharT, _InIter>
+16535:     {
+16535:     public:
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef _InIter iter_type;
+16535: 
+16535:       explicit
+16535:       time_get_byname(const char*, size_t __refs = 0)
+16535:       : time_get<_CharT, _InIter>(__refs) { }
+16535: 
+16535: 
+16535:       explicit
+16535:       time_get_byname(const string& __s, size_t __refs = 0)
+16535:       : time_get_byname(__s.c_str(), __refs) { }
+16535: 
+16535: 
+16535:     protected:
+16535:       virtual
+16535:       ~time_get_byname() { }
+16535:     };
+16535: 
+16535: }
+16535: # 796 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:   template<typename _CharT, typename _OutIter>
+16535:     class time_put : public locale::facet
+16535:     {
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef _OutIter iter_type;
+16535: 
+16535: 
+16535: 
+16535:       static locale::id id;
+16535: # 817 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       explicit
+16535:       time_put(size_t __refs = 0)
+16535:       : facet(__refs) { }
+16535: # 836 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       iter_type
+16535:       put(iter_type __s, ios_base& __io, char_type __fill, const tm* __tm,
+16535:    const _CharT* __beg, const _CharT* __end) const;
+16535: # 856 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       iter_type
+16535:       put(iter_type __s, ios_base& __io, char_type __fill,
+16535:    const tm* __tm, char __format, char __mod = 0) const
+16535:       { return this->do_put(__s, __io, __fill, __tm, __format, __mod); }
+16535: 
+16535:     protected:
+16535: 
+16535:       virtual
+16535:       ~time_put()
+16535:       { }
+16535: # 883 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       virtual iter_type
+16535:       do_put(iter_type __s, ios_base& __io, char_type __fill, const tm* __tm,
+16535:       char __format, char __mod) const;
+16535:     };
+16535: 
+16535:   template<typename _CharT, typename _OutIter>
+16535:     locale::id time_put<_CharT, _OutIter>::id;
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _OutIter>
+16535:     class time_put_byname : public time_put<_CharT, _OutIter>
+16535:     {
+16535:     public:
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef _OutIter iter_type;
+16535: 
+16535:       explicit
+16535:       time_put_byname(const char*, size_t __refs = 0)
+16535:       : time_put<_CharT, _OutIter>(__refs)
+16535:       { }
+16535: 
+16535: 
+16535:       explicit
+16535:       time_put_byname(const string& __s, size_t __refs = 0)
+16535:       : time_put_byname(__s.c_str(), __refs) { }
+16535: 
+16535: 
+16535:     protected:
+16535:       virtual
+16535:       ~time_put_byname() { }
+16535:     };
+16535: # 928 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:   class money_base
+16535:   {
+16535:   public:
+16535:     enum part { none, space, symbol, sign, value };
+16535:     struct pattern { char field[4]; };
+16535: 
+16535:     static const pattern _S_default_pattern;
+16535: 
+16535:     enum
+16535:     {
+16535:       _S_minus,
+16535:       _S_zero,
+16535:       _S_end = 11
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:     static const char* _S_atoms;
+16535: 
+16535: 
+16535: 
+16535:     __attribute__ ((__const__)) static pattern
+16535:     _S_construct_pattern(char __precedes, char __space, char __posn) throw ();
+16535:   };
+16535: 
+16535:   template<typename _CharT, bool _Intl>
+16535:     struct __moneypunct_cache : public locale::facet
+16535:     {
+16535:       const char* _M_grouping;
+16535:       size_t _M_grouping_size;
+16535:       bool _M_use_grouping;
+16535:       _CharT _M_decimal_point;
+16535:       _CharT _M_thousands_sep;
+16535:       const _CharT* _M_curr_symbol;
+16535:       size_t _M_curr_symbol_size;
+16535:       const _CharT* _M_positive_sign;
+16535:       size_t _M_positive_sign_size;
+16535:       const _CharT* _M_negative_sign;
+16535:       size_t _M_negative_sign_size;
+16535:       int _M_frac_digits;
+16535:       money_base::pattern _M_pos_format;
+16535:       money_base::pattern _M_neg_format;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       _CharT _M_atoms[money_base::_S_end];
+16535: 
+16535:       bool _M_allocated;
+16535: 
+16535:       __moneypunct_cache(size_t __refs = 0) : facet(__refs),
+16535:       _M_grouping(0), _M_grouping_size(0), _M_use_grouping(false),
+16535:       _M_decimal_point(_CharT()), _M_thousands_sep(_CharT()),
+16535:       _M_curr_symbol(0), _M_curr_symbol_size(0),
+16535:       _M_positive_sign(0), _M_positive_sign_size(0),
+16535:       _M_negative_sign(0), _M_negative_sign_size(0),
+16535:       _M_frac_digits(0),
+16535:       _M_pos_format(money_base::pattern()),
+16535:       _M_neg_format(money_base::pattern()), _M_allocated(false)
+16535:       { }
+16535: 
+16535:       ~__moneypunct_cache();
+16535: 
+16535:       void
+16535:       _M_cache(const locale& __loc);
+16535: 
+16535:     private:
+16535:       __moneypunct_cache&
+16535:       operator=(const __moneypunct_cache&);
+16535: 
+16535:       explicit
+16535:       __moneypunct_cache(const __moneypunct_cache&);
+16535:     };
+16535: 
+16535:   template<typename _CharT, bool _Intl>
+16535:     __moneypunct_cache<_CharT, _Intl>::~__moneypunct_cache()
+16535:     {
+16535:       if (_M_allocated)
+16535:  {
+16535:    delete [] _M_grouping;
+16535:    delete [] _M_curr_symbol;
+16535:    delete [] _M_positive_sign;
+16535:    delete [] _M_negative_sign;
+16535:  }
+16535:     }
+16535: 
+16535: namespace __cxx11 {
+16535: # 1023 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:   template<typename _CharT, bool _Intl>
+16535:     class moneypunct : public locale::facet, public money_base
+16535:     {
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef basic_string<_CharT> string_type;
+16535: 
+16535:       typedef __moneypunct_cache<_CharT, _Intl> __cache_type;
+16535: 
+16535:     private:
+16535:       __cache_type* _M_data;
+16535: 
+16535:     public:
+16535: 
+16535: 
+16535:       static const bool intl = _Intl;
+16535: 
+16535:       static locale::id id;
+16535: # 1052 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       explicit
+16535:       moneypunct(size_t __refs = 0)
+16535:       : facet(__refs), _M_data(0)
+16535:       { _M_initialize_moneypunct(); }
+16535: # 1065 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       explicit
+16535:       moneypunct(__cache_type* __cache, size_t __refs = 0)
+16535:       : facet(__refs), _M_data(__cache)
+16535:       { _M_initialize_moneypunct(); }
+16535: # 1080 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       explicit
+16535:       moneypunct(__c_locale __cloc, const char* __s, size_t __refs = 0)
+16535:       : facet(__refs), _M_data(0)
+16535:       { _M_initialize_moneypunct(__cloc, __s); }
+16535: # 1094 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       char_type
+16535:       decimal_point() const
+16535:       { return this->do_decimal_point(); }
+16535: # 1107 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       char_type
+16535:       thousands_sep() const
+16535:       { return this->do_thousands_sep(); }
+16535: # 1137 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       string
+16535:       grouping() const
+16535:       { return this->do_grouping(); }
+16535: # 1150 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       string_type
+16535:       curr_symbol() const
+16535:       { return this->do_curr_symbol(); }
+16535: # 1167 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       string_type
+16535:       positive_sign() const
+16535:       { return this->do_positive_sign(); }
+16535: # 1184 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       string_type
+16535:       negative_sign() const
+16535:       { return this->do_negative_sign(); }
+16535: # 1200 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       int
+16535:       frac_digits() const
+16535:       { return this->do_frac_digits(); }
+16535: # 1236 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       pattern
+16535:       pos_format() const
+16535:       { return this->do_pos_format(); }
+16535: 
+16535:       pattern
+16535:       neg_format() const
+16535:       { return this->do_neg_format(); }
+16535: 
+16535: 
+16535:     protected:
+16535: 
+16535:       virtual
+16535:       ~moneypunct();
+16535: # 1258 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       virtual char_type
+16535:       do_decimal_point() const
+16535:       { return _M_data->_M_decimal_point; }
+16535: # 1270 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       virtual char_type
+16535:       do_thousands_sep() const
+16535:       { return _M_data->_M_thousands_sep; }
+16535: # 1283 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       virtual string
+16535:       do_grouping() const
+16535:       { return _M_data->_M_grouping; }
+16535: # 1296 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       virtual string_type
+16535:       do_curr_symbol() const
+16535:       { return _M_data->_M_curr_symbol; }
+16535: # 1309 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       virtual string_type
+16535:       do_positive_sign() const
+16535:       { return _M_data->_M_positive_sign; }
+16535: # 1322 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       virtual string_type
+16535:       do_negative_sign() const
+16535:       { return _M_data->_M_negative_sign; }
+16535: # 1336 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       virtual int
+16535:       do_frac_digits() const
+16535:       { return _M_data->_M_frac_digits; }
+16535: # 1350 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       virtual pattern
+16535:       do_pos_format() const
+16535:       { return _M_data->_M_pos_format; }
+16535: # 1364 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       virtual pattern
+16535:       do_neg_format() const
+16535:       { return _M_data->_M_neg_format; }
+16535: 
+16535: 
+16535:        void
+16535:        _M_initialize_moneypunct(__c_locale __cloc = 0,
+16535:     const char* __name = 0);
+16535:     };
+16535: 
+16535:   template<typename _CharT, bool _Intl>
+16535:     locale::id moneypunct<_CharT, _Intl>::id;
+16535: 
+16535:   template<typename _CharT, bool _Intl>
+16535:     const bool moneypunct<_CharT, _Intl>::intl;
+16535: 
+16535:   template<>
+16535:     moneypunct<char, true>::~moneypunct();
+16535: 
+16535:   template<>
+16535:     moneypunct<char, false>::~moneypunct();
+16535: 
+16535:   template<>
+16535:     void
+16535:     moneypunct<char, true>::_M_initialize_moneypunct(__c_locale, const char*);
+16535: 
+16535:   template<>
+16535:     void
+16535:     moneypunct<char, false>::_M_initialize_moneypunct(__c_locale, const char*);
+16535: 
+16535: 
+16535:   template<>
+16535:     moneypunct<wchar_t, true>::~moneypunct();
+16535: 
+16535:   template<>
+16535:     moneypunct<wchar_t, false>::~moneypunct();
+16535: 
+16535:   template<>
+16535:     void
+16535:     moneypunct<wchar_t, true>::_M_initialize_moneypunct(__c_locale,
+16535:        const char*);
+16535: 
+16535:   template<>
+16535:     void
+16535:     moneypunct<wchar_t, false>::_M_initialize_moneypunct(__c_locale,
+16535:         const char*);
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, bool _Intl>
+16535:     class moneypunct_byname : public moneypunct<_CharT, _Intl>
+16535:     {
+16535:     public:
+16535:       typedef _CharT char_type;
+16535:       typedef basic_string<_CharT> string_type;
+16535: 
+16535:       static const bool intl = _Intl;
+16535: 
+16535:       explicit
+16535:       moneypunct_byname(const char* __s, size_t __refs = 0)
+16535:       : moneypunct<_CharT, _Intl>(__refs)
+16535:       {
+16535:  if (__builtin_strcmp(__s, "C") != 0
+16535:      && __builtin_strcmp(__s, "POSIX") != 0)
+16535:    {
+16535:      __c_locale __tmp;
+16535:      this->_S_create_c_locale(__tmp, __s);
+16535:      this->_M_initialize_moneypunct(__tmp);
+16535:      this->_S_destroy_c_locale(__tmp);
+16535:    }
+16535:       }
+16535: 
+16535: 
+16535:       explicit
+16535:       moneypunct_byname(const string& __s, size_t __refs = 0)
+16535:       : moneypunct_byname(__s.c_str(), __refs) { }
+16535: 
+16535: 
+16535:     protected:
+16535:       virtual
+16535:       ~moneypunct_byname() { }
+16535:     };
+16535: 
+16535:   template<typename _CharT, bool _Intl>
+16535:     const bool moneypunct_byname<_CharT, _Intl>::intl;
+16535: 
+16535: }
+16535: 
+16535: namespace __cxx11 {
+16535: # 1467 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:   template<typename _CharT, typename _InIter>
+16535:     class money_get : public locale::facet
+16535:     {
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef _InIter iter_type;
+16535:       typedef basic_string<_CharT> string_type;
+16535: 
+16535: 
+16535: 
+16535:       static locale::id id;
+16535: # 1489 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       explicit
+16535:       money_get(size_t __refs = 0) : facet(__refs) { }
+16535: # 1519 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       iter_type
+16535:       get(iter_type __s, iter_type __end, bool __intl, ios_base& __io,
+16535:    ios_base::iostate& __err, long double& __units) const
+16535:       { return this->do_get(__s, __end, __intl, __io, __err, __units); }
+16535: # 1550 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       iter_type
+16535:       get(iter_type __s, iter_type __end, bool __intl, ios_base& __io,
+16535:    ios_base::iostate& __err, string_type& __digits) const
+16535:       { return this->do_get(__s, __end, __intl, __io, __err, __digits); }
+16535: 
+16535:     protected:
+16535: 
+16535:       virtual
+16535:       ~money_get() { }
+16535: # 1574 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       virtual iter_type
+16535:       do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io,
+16535:       ios_base::iostate& __err, long double& __units) const;
+16535: # 1586 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       virtual iter_type
+16535:       do_get(iter_type __s, iter_type __end, bool __intl, ios_base& __io,
+16535:       ios_base::iostate& __err, string_type& __digits) const;
+16535: # 1598 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       template<bool _Intl>
+16535:         iter_type
+16535:         _M_extract(iter_type __s, iter_type __end, ios_base& __io,
+16535:      ios_base::iostate& __err, string& __digits) const;
+16535:     };
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     locale::id money_get<_CharT, _InIter>::id;
+16535: # 1620 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:   template<typename _CharT, typename _OutIter>
+16535:     class money_put : public locale::facet
+16535:     {
+16535:     public:
+16535: 
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef _OutIter iter_type;
+16535:       typedef basic_string<_CharT> string_type;
+16535: 
+16535: 
+16535: 
+16535:       static locale::id id;
+16535: # 1641 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       explicit
+16535:       money_put(size_t __refs = 0) : facet(__refs) { }
+16535: # 1661 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       iter_type
+16535:       put(iter_type __s, bool __intl, ios_base& __io,
+16535:    char_type __fill, long double __units) const
+16535:       { return this->do_put(__s, __intl, __io, __fill, __units); }
+16535: # 1684 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       iter_type
+16535:       put(iter_type __s, bool __intl, ios_base& __io,
+16535:    char_type __fill, const string_type& __digits) const
+16535:       { return this->do_put(__s, __intl, __io, __fill, __digits); }
+16535: 
+16535:     protected:
+16535: 
+16535:       virtual
+16535:       ~money_put() { }
+16535: # 1719 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       virtual iter_type
+16535:       do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
+16535:       long double __units) const;
+16535: # 1743 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       virtual iter_type
+16535:       do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
+16535:       const string_type& __digits) const;
+16535: # 1755 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       template<bool _Intl>
+16535:         iter_type
+16535:         _M_insert(iter_type __s, ios_base& __io, char_type __fill,
+16535:     const string_type& __digits) const;
+16535:     };
+16535: 
+16535:   template<typename _CharT, typename _OutIter>
+16535:     locale::id money_put<_CharT, _OutIter>::id;
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   struct messages_base
+16535:   {
+16535:     typedef int catalog;
+16535:   };
+16535: 
+16535: namespace __cxx11 {
+16535: # 1798 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:   template<typename _CharT>
+16535:     class messages : public locale::facet, public messages_base
+16535:     {
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef basic_string<_CharT> string_type;
+16535: 
+16535: 
+16535:     protected:
+16535: 
+16535: 
+16535:       __c_locale _M_c_locale_messages;
+16535:       const char* _M_name_messages;
+16535: 
+16535:     public:
+16535: 
+16535:       static locale::id id;
+16535: # 1826 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       explicit
+16535:       messages(size_t __refs = 0);
+16535: # 1840 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       explicit
+16535:       messages(__c_locale __cloc, const char* __s, size_t __refs = 0);
+16535: # 1853 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       catalog
+16535:       open(const basic_string<char>& __s, const locale& __loc) const
+16535:       { return this->do_open(__s, __loc); }
+16535: # 1871 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       catalog
+16535:       open(const basic_string<char>&, const locale&, const char*) const;
+16535: # 1889 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       string_type
+16535:       get(catalog __c, int __set, int __msgid, const string_type& __s) const
+16535:       { return this->do_get(__c, __set, __msgid, __s); }
+16535: # 1900 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       void
+16535:       close(catalog __c) const
+16535:       { return this->do_close(__c); }
+16535: 
+16535:     protected:
+16535: 
+16535:       virtual
+16535:       ~messages();
+16535: # 1920 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       virtual catalog
+16535:       do_open(const basic_string<char>&, const locale&) const;
+16535: # 1939 "/usr/include/c++/8/bits/locale_facets_nonio.h" 3
+16535:       virtual string_type
+16535:       do_get(catalog, int, int, const string_type& __dfault) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       virtual void
+16535:       do_close(catalog) const;
+16535: 
+16535: 
+16535:       char*
+16535:       _M_convert_to_char(const string_type& __msg) const
+16535:       {
+16535: 
+16535:  return reinterpret_cast<char*>(const_cast<_CharT*>(__msg.c_str()));
+16535:       }
+16535: 
+16535: 
+16535:       string_type
+16535:       _M_convert_from_char(char*) const
+16535:       {
+16535: 
+16535:  return string_type();
+16535:       }
+16535:      };
+16535: 
+16535:   template<typename _CharT>
+16535:     locale::id messages<_CharT>::id;
+16535: 
+16535: 
+16535:   template<>
+16535:     string
+16535:     messages<char>::do_get(catalog, int, int, const string&) const;
+16535: 
+16535: 
+16535:   template<>
+16535:     wstring
+16535:     messages<wchar_t>::do_get(catalog, int, int, const wstring&) const;
+16535: 
+16535: 
+16535: 
+16535:    template<typename _CharT>
+16535:     class messages_byname : public messages<_CharT>
+16535:     {
+16535:     public:
+16535:       typedef _CharT char_type;
+16535:       typedef basic_string<_CharT> string_type;
+16535: 
+16535:       explicit
+16535:       messages_byname(const char* __s, size_t __refs = 0);
+16535: 
+16535: 
+16535:       explicit
+16535:       messages_byname(const string& __s, size_t __refs = 0)
+16535:       : messages_byname(__s.c_str(), __refs) { }
+16535: 
+16535: 
+16535:     protected:
+16535:       virtual
+16535:       ~messages_byname()
+16535:       { }
+16535:     };
+16535: 
+16535: }
+16535: 
+16535: 
+16535: }
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/c++/8/bits/messages_members.h" 1 3
+16535: # 36 "/usr/include/x86_64-linux-gnu/c++/8/bits/messages_members.h" 3
+16535: # 1 "/usr/include/libintl.h" 1 3 4
+16535: # 34 "/usr/include/libintl.h" 3 4
+16535: extern "C" {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *gettext (const char *__msgid)
+16535:      throw () __attribute__ ((__format_arg__ (1)));
+16535: 
+16535: 
+16535: 
+16535: extern char *dgettext (const char *__domainname, const char *__msgid)
+16535:      throw () __attribute__ ((__format_arg__ (2)));
+16535: extern char *__dgettext (const char *__domainname, const char *__msgid)
+16535:      throw () __attribute__ ((__format_arg__ (2)));
+16535: 
+16535: 
+16535: 
+16535: extern char *dcgettext (const char *__domainname,
+16535:    const char *__msgid, int __category)
+16535:      throw () __attribute__ ((__format_arg__ (2)));
+16535: extern char *__dcgettext (const char *__domainname,
+16535:      const char *__msgid, int __category)
+16535:      throw () __attribute__ ((__format_arg__ (2)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *ngettext (const char *__msgid1, const char *__msgid2,
+16535:          unsigned long int __n)
+16535:      throw () __attribute__ ((__format_arg__ (1))) __attribute__ ((__format_arg__ (2)));
+16535: 
+16535: 
+16535: 
+16535: extern char *dngettext (const char *__domainname, const char *__msgid1,
+16535:    const char *__msgid2, unsigned long int __n)
+16535:      throw () __attribute__ ((__format_arg__ (2))) __attribute__ ((__format_arg__ (3)));
+16535: 
+16535: 
+16535: 
+16535: extern char *dcngettext (const char *__domainname, const char *__msgid1,
+16535:     const char *__msgid2, unsigned long int __n,
+16535:     int __category)
+16535:      throw () __attribute__ ((__format_arg__ (2))) __attribute__ ((__format_arg__ (3)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern char *textdomain (const char *__domainname) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern char *bindtextdomain (const char *__domainname,
+16535:         const char *__dirname) throw ();
+16535: 
+16535: 
+16535: 
+16535: extern char *bind_textdomain_codeset (const char *__domainname,
+16535:           const char *__codeset) throw ();
+16535: # 121 "/usr/include/libintl.h" 3 4
+16535: }
+16535: # 37 "/usr/include/x86_64-linux-gnu/c++/8/bits/messages_members.h" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     messages<_CharT>::messages(size_t __refs)
+16535:     : facet(__refs), _M_c_locale_messages(_S_get_c_locale()),
+16535:       _M_name_messages(_S_get_c_name())
+16535:     { }
+16535: 
+16535:   template<typename _CharT>
+16535:     messages<_CharT>::messages(__c_locale __cloc, const char* __s,
+16535:           size_t __refs)
+16535:     : facet(__refs), _M_c_locale_messages(0), _M_name_messages(0)
+16535:     {
+16535:       if (__builtin_strcmp(__s, _S_get_c_name()) != 0)
+16535:  {
+16535:    const size_t __len = __builtin_strlen(__s) + 1;
+16535:    char* __tmp = new char[__len];
+16535:    __builtin_memcpy(__tmp, __s, __len);
+16535:    _M_name_messages = __tmp;
+16535:  }
+16535:       else
+16535:  _M_name_messages = _S_get_c_name();
+16535: 
+16535: 
+16535:       _M_c_locale_messages = _S_clone_c_locale(__cloc);
+16535:     }
+16535: 
+16535:   template<typename _CharT>
+16535:     typename messages<_CharT>::catalog
+16535:     messages<_CharT>::open(const basic_string<char>& __s, const locale& __loc,
+16535:       const char* __dir) const
+16535:     {
+16535:       bindtextdomain(__s.c_str(), __dir);
+16535:       return this->do_open(__s, __loc);
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     messages<_CharT>::~messages()
+16535:     {
+16535:       if (_M_name_messages != _S_get_c_name())
+16535:  delete [] _M_name_messages;
+16535:       _S_destroy_c_locale(_M_c_locale_messages);
+16535:     }
+16535: 
+16535:   template<typename _CharT>
+16535:     typename messages<_CharT>::catalog
+16535:     messages<_CharT>::do_open(const basic_string<char>& __s,
+16535:          const locale&) const
+16535:     {
+16535: 
+16535: 
+16535:       textdomain(__s.c_str());
+16535:       return 0;
+16535:     }
+16535: 
+16535:   template<typename _CharT>
+16535:     void
+16535:     messages<_CharT>::do_close(catalog) const
+16535:     { }
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     messages_byname<_CharT>::messages_byname(const char* __s, size_t __refs)
+16535:     : messages<_CharT>(__refs)
+16535:     {
+16535:       if (this->_M_name_messages != locale::facet::_S_get_c_name())
+16535:  {
+16535:    delete [] this->_M_name_messages;
+16535:    if (__builtin_strcmp(__s, locale::facet::_S_get_c_name()) != 0)
+16535:      {
+16535:        const size_t __len = __builtin_strlen(__s) + 1;
+16535:        char* __tmp = new char[__len];
+16535:        __builtin_memcpy(__tmp, __s, __len);
+16535:        this->_M_name_messages = __tmp;
+16535:      }
+16535:    else
+16535:      this->_M_name_messages = locale::facet::_S_get_c_name();
+16535:  }
+16535: 
+16535:       if (__builtin_strcmp(__s, "C") != 0
+16535:    && __builtin_strcmp(__s, "POSIX") != 0)
+16535:  {
+16535:    this->_S_destroy_c_locale(this->_M_c_locale_messages);
+16535:    this->_S_create_c_locale(this->_M_c_locale_messages, __s);
+16535:  }
+16535:     }
+16535: 
+16535: 
+16535:   template<>
+16535:     typename messages<char>::catalog
+16535:     messages<char>::do_open(const basic_string<char>&,
+16535:        const locale&) const;
+16535: 
+16535:   template<>
+16535:     void
+16535:     messages<char>::do_close(catalog) const;
+16535: 
+16535: 
+16535:   template<>
+16535:     typename messages<wchar_t>::catalog
+16535:     messages<wchar_t>::do_open(const basic_string<char>&,
+16535:           const locale&) const;
+16535: 
+16535:   template<>
+16535:     void
+16535:     messages<wchar_t>::do_close(catalog) const;
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 2011 "/usr/include/c++/8/bits/locale_facets_nonio.h" 2 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/codecvt.h" 1 3
+16535: # 39 "/usr/include/c++/8/bits/codecvt.h" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/bits/codecvt.h" 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535:   class codecvt_base
+16535:   {
+16535:   public:
+16535:     enum result
+16535:     {
+16535:       ok,
+16535:       partial,
+16535:       error,
+16535:       noconv
+16535:     };
+16535:   };
+16535: # 67 "/usr/include/c++/8/bits/codecvt.h" 3
+16535:   template<typename _InternT, typename _ExternT, typename _StateT>
+16535:     class __codecvt_abstract_base
+16535:     : public locale::facet, public codecvt_base
+16535:     {
+16535:     public:
+16535: 
+16535:       typedef codecvt_base::result result;
+16535:       typedef _InternT intern_type;
+16535:       typedef _ExternT extern_type;
+16535:       typedef _StateT state_type;
+16535: # 115 "/usr/include/c++/8/bits/codecvt.h" 3
+16535:       result
+16535:       out(state_type& __state, const intern_type* __from,
+16535:    const intern_type* __from_end, const intern_type*& __from_next,
+16535:    extern_type* __to, extern_type* __to_end,
+16535:    extern_type*& __to_next) const
+16535:       {
+16535:  return this->do_out(__state, __from, __from_end, __from_next,
+16535:        __to, __to_end, __to_next);
+16535:       }
+16535: # 154 "/usr/include/c++/8/bits/codecvt.h" 3
+16535:       result
+16535:       unshift(state_type& __state, extern_type* __to, extern_type* __to_end,
+16535:        extern_type*& __to_next) const
+16535:       { return this->do_unshift(__state, __to,__to_end,__to_next); }
+16535: # 195 "/usr/include/c++/8/bits/codecvt.h" 3
+16535:       result
+16535:       in(state_type& __state, const extern_type* __from,
+16535:   const extern_type* __from_end, const extern_type*& __from_next,
+16535:   intern_type* __to, intern_type* __to_end,
+16535:   intern_type*& __to_next) const
+16535:       {
+16535:  return this->do_in(__state, __from, __from_end, __from_next,
+16535:       __to, __to_end, __to_next);
+16535:       }
+16535: 
+16535:       int
+16535:       encoding() const throw()
+16535:       { return this->do_encoding(); }
+16535: 
+16535:       bool
+16535:       always_noconv() const throw()
+16535:       { return this->do_always_noconv(); }
+16535: 
+16535:       int
+16535:       length(state_type& __state, const extern_type* __from,
+16535:       const extern_type* __end, size_t __max) const
+16535:       { return this->do_length(__state, __from, __end, __max); }
+16535: 
+16535:       int
+16535:       max_length() const throw()
+16535:       { return this->do_max_length(); }
+16535: 
+16535:     protected:
+16535:       explicit
+16535:       __codecvt_abstract_base(size_t __refs = 0) : locale::facet(__refs) { }
+16535: 
+16535:       virtual
+16535:       ~__codecvt_abstract_base() { }
+16535: # 236 "/usr/include/c++/8/bits/codecvt.h" 3
+16535:       virtual result
+16535:       do_out(state_type& __state, const intern_type* __from,
+16535:       const intern_type* __from_end, const intern_type*& __from_next,
+16535:       extern_type* __to, extern_type* __to_end,
+16535:       extern_type*& __to_next) const = 0;
+16535: 
+16535:       virtual result
+16535:       do_unshift(state_type& __state, extern_type* __to,
+16535:    extern_type* __to_end, extern_type*& __to_next) const = 0;
+16535: 
+16535:       virtual result
+16535:       do_in(state_type& __state, const extern_type* __from,
+16535:      const extern_type* __from_end, const extern_type*& __from_next,
+16535:      intern_type* __to, intern_type* __to_end,
+16535:      intern_type*& __to_next) const = 0;
+16535: 
+16535:       virtual int
+16535:       do_encoding() const throw() = 0;
+16535: 
+16535:       virtual bool
+16535:       do_always_noconv() const throw() = 0;
+16535: 
+16535:       virtual int
+16535:       do_length(state_type&, const extern_type* __from,
+16535:   const extern_type* __end, size_t __max) const = 0;
+16535: 
+16535:       virtual int
+16535:       do_max_length() const throw() = 0;
+16535:     };
+16535: # 273 "/usr/include/c++/8/bits/codecvt.h" 3
+16535:    template<typename _InternT, typename _ExternT, typename _StateT>
+16535:     class codecvt
+16535:     : public __codecvt_abstract_base<_InternT, _ExternT, _StateT>
+16535:     {
+16535:     public:
+16535: 
+16535:       typedef codecvt_base::result result;
+16535:       typedef _InternT intern_type;
+16535:       typedef _ExternT extern_type;
+16535:       typedef _StateT state_type;
+16535: 
+16535:     protected:
+16535:       __c_locale _M_c_locale_codecvt;
+16535: 
+16535:     public:
+16535:       static locale::id id;
+16535: 
+16535:       explicit
+16535:       codecvt(size_t __refs = 0)
+16535:       : __codecvt_abstract_base<_InternT, _ExternT, _StateT> (__refs),
+16535:  _M_c_locale_codecvt(0)
+16535:       { }
+16535: 
+16535:       explicit
+16535:       codecvt(__c_locale __cloc, size_t __refs = 0);
+16535: 
+16535:     protected:
+16535:       virtual
+16535:       ~codecvt() { }
+16535: 
+16535:       virtual result
+16535:       do_out(state_type& __state, const intern_type* __from,
+16535:       const intern_type* __from_end, const intern_type*& __from_next,
+16535:       extern_type* __to, extern_type* __to_end,
+16535:       extern_type*& __to_next) const;
+16535: 
+16535:       virtual result
+16535:       do_unshift(state_type& __state, extern_type* __to,
+16535:    extern_type* __to_end, extern_type*& __to_next) const;
+16535: 
+16535:       virtual result
+16535:       do_in(state_type& __state, const extern_type* __from,
+16535:      const extern_type* __from_end, const extern_type*& __from_next,
+16535:      intern_type* __to, intern_type* __to_end,
+16535:      intern_type*& __to_next) const;
+16535: 
+16535:       virtual int
+16535:       do_encoding() const throw();
+16535: 
+16535:       virtual bool
+16535:       do_always_noconv() const throw();
+16535: 
+16535:       virtual int
+16535:       do_length(state_type&, const extern_type* __from,
+16535:   const extern_type* __end, size_t __max) const;
+16535: 
+16535:       virtual int
+16535:       do_max_length() const throw();
+16535:     };
+16535: 
+16535:   template<typename _InternT, typename _ExternT, typename _StateT>
+16535:     locale::id codecvt<_InternT, _ExternT, _StateT>::id;
+16535: 
+16535: 
+16535:   template<>
+16535:     class codecvt<char, char, mbstate_t>
+16535:     : public __codecvt_abstract_base<char, char, mbstate_t>
+16535:     {
+16535:       friend class messages<char>;
+16535: 
+16535:     public:
+16535: 
+16535:       typedef char intern_type;
+16535:       typedef char extern_type;
+16535:       typedef mbstate_t state_type;
+16535: 
+16535:     protected:
+16535:       __c_locale _M_c_locale_codecvt;
+16535: 
+16535:     public:
+16535:       static locale::id id;
+16535: 
+16535:       explicit
+16535:       codecvt(size_t __refs = 0);
+16535: 
+16535:       explicit
+16535:       codecvt(__c_locale __cloc, size_t __refs = 0);
+16535: 
+16535:     protected:
+16535:       virtual
+16535:       ~codecvt();
+16535: 
+16535:       virtual result
+16535:       do_out(state_type& __state, const intern_type* __from,
+16535:       const intern_type* __from_end, const intern_type*& __from_next,
+16535:       extern_type* __to, extern_type* __to_end,
+16535:       extern_type*& __to_next) const;
+16535: 
+16535:       virtual result
+16535:       do_unshift(state_type& __state, extern_type* __to,
+16535:    extern_type* __to_end, extern_type*& __to_next) const;
+16535: 
+16535:       virtual result
+16535:       do_in(state_type& __state, const extern_type* __from,
+16535:      const extern_type* __from_end, const extern_type*& __from_next,
+16535:      intern_type* __to, intern_type* __to_end,
+16535:      intern_type*& __to_next) const;
+16535: 
+16535:       virtual int
+16535:       do_encoding() const throw();
+16535: 
+16535:       virtual bool
+16535:       do_always_noconv() const throw();
+16535: 
+16535:       virtual int
+16535:       do_length(state_type&, const extern_type* __from,
+16535:   const extern_type* __end, size_t __max) const;
+16535: 
+16535:       virtual int
+16535:       do_max_length() const throw();
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<>
+16535:     class codecvt<wchar_t, char, mbstate_t>
+16535:     : public __codecvt_abstract_base<wchar_t, char, mbstate_t>
+16535:     {
+16535:       friend class messages<wchar_t>;
+16535: 
+16535:     public:
+16535: 
+16535:       typedef wchar_t intern_type;
+16535:       typedef char extern_type;
+16535:       typedef mbstate_t state_type;
+16535: 
+16535:     protected:
+16535:       __c_locale _M_c_locale_codecvt;
+16535: 
+16535:     public:
+16535:       static locale::id id;
+16535: 
+16535:       explicit
+16535:       codecvt(size_t __refs = 0);
+16535: 
+16535:       explicit
+16535:       codecvt(__c_locale __cloc, size_t __refs = 0);
+16535: 
+16535:     protected:
+16535:       virtual
+16535:       ~codecvt();
+16535: 
+16535:       virtual result
+16535:       do_out(state_type& __state, const intern_type* __from,
+16535:       const intern_type* __from_end, const intern_type*& __from_next,
+16535:       extern_type* __to, extern_type* __to_end,
+16535:       extern_type*& __to_next) const;
+16535: 
+16535:       virtual result
+16535:       do_unshift(state_type& __state,
+16535:    extern_type* __to, extern_type* __to_end,
+16535:    extern_type*& __to_next) const;
+16535: 
+16535:       virtual result
+16535:       do_in(state_type& __state,
+16535:       const extern_type* __from, const extern_type* __from_end,
+16535:       const extern_type*& __from_next,
+16535:       intern_type* __to, intern_type* __to_end,
+16535:       intern_type*& __to_next) const;
+16535: 
+16535:       virtual
+16535:       int do_encoding() const throw();
+16535: 
+16535:       virtual
+16535:       bool do_always_noconv() const throw();
+16535: 
+16535:       virtual
+16535:       int do_length(state_type&, const extern_type* __from,
+16535:       const extern_type* __end, size_t __max) const;
+16535: 
+16535:       virtual int
+16535:       do_max_length() const throw();
+16535:     };
+16535: # 467 "/usr/include/c++/8/bits/codecvt.h" 3
+16535:   template<>
+16535:     class codecvt<char16_t, char, mbstate_t>
+16535:     : public __codecvt_abstract_base<char16_t, char, mbstate_t>
+16535:     {
+16535:     public:
+16535: 
+16535:       typedef char16_t intern_type;
+16535:       typedef char extern_type;
+16535:       typedef mbstate_t state_type;
+16535: 
+16535:     public:
+16535:       static locale::id id;
+16535: 
+16535:       explicit
+16535:       codecvt(size_t __refs = 0)
+16535:       : __codecvt_abstract_base<char16_t, char, mbstate_t>(__refs) { }
+16535: 
+16535:     protected:
+16535:       virtual
+16535:       ~codecvt();
+16535: 
+16535:       virtual result
+16535:       do_out(state_type& __state, const intern_type* __from,
+16535:       const intern_type* __from_end, const intern_type*& __from_next,
+16535:       extern_type* __to, extern_type* __to_end,
+16535:       extern_type*& __to_next) const;
+16535: 
+16535:       virtual result
+16535:       do_unshift(state_type& __state,
+16535:    extern_type* __to, extern_type* __to_end,
+16535:    extern_type*& __to_next) const;
+16535: 
+16535:       virtual result
+16535:       do_in(state_type& __state,
+16535:       const extern_type* __from, const extern_type* __from_end,
+16535:       const extern_type*& __from_next,
+16535:       intern_type* __to, intern_type* __to_end,
+16535:       intern_type*& __to_next) const;
+16535: 
+16535:       virtual
+16535:       int do_encoding() const throw();
+16535: 
+16535:       virtual
+16535:       bool do_always_noconv() const throw();
+16535: 
+16535:       virtual
+16535:       int do_length(state_type&, const extern_type* __from,
+16535:       const extern_type* __end, size_t __max) const;
+16535: 
+16535:       virtual int
+16535:       do_max_length() const throw();
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<>
+16535:     class codecvt<char32_t, char, mbstate_t>
+16535:     : public __codecvt_abstract_base<char32_t, char, mbstate_t>
+16535:     {
+16535:     public:
+16535: 
+16535:       typedef char32_t intern_type;
+16535:       typedef char extern_type;
+16535:       typedef mbstate_t state_type;
+16535: 
+16535:     public:
+16535:       static locale::id id;
+16535: 
+16535:       explicit
+16535:       codecvt(size_t __refs = 0)
+16535:       : __codecvt_abstract_base<char32_t, char, mbstate_t>(__refs) { }
+16535: 
+16535:     protected:
+16535:       virtual
+16535:       ~codecvt();
+16535: 
+16535:       virtual result
+16535:       do_out(state_type& __state, const intern_type* __from,
+16535:       const intern_type* __from_end, const intern_type*& __from_next,
+16535:       extern_type* __to, extern_type* __to_end,
+16535:       extern_type*& __to_next) const;
+16535: 
+16535:       virtual result
+16535:       do_unshift(state_type& __state,
+16535:    extern_type* __to, extern_type* __to_end,
+16535:    extern_type*& __to_next) const;
+16535: 
+16535:       virtual result
+16535:       do_in(state_type& __state,
+16535:       const extern_type* __from, const extern_type* __from_end,
+16535:       const extern_type*& __from_next,
+16535:       intern_type* __to, intern_type* __to_end,
+16535:       intern_type*& __to_next) const;
+16535: 
+16535:       virtual
+16535:       int do_encoding() const throw();
+16535: 
+16535:       virtual
+16535:       bool do_always_noconv() const throw();
+16535: 
+16535:       virtual
+16535:       int do_length(state_type&, const extern_type* __from,
+16535:       const extern_type* __end, size_t __max) const;
+16535: 
+16535:       virtual int
+16535:       do_max_length() const throw();
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _InternT, typename _ExternT, typename _StateT>
+16535:     class codecvt_byname : public codecvt<_InternT, _ExternT, _StateT>
+16535:     {
+16535:     public:
+16535:       explicit
+16535:       codecvt_byname(const char* __s, size_t __refs = 0)
+16535:       : codecvt<_InternT, _ExternT, _StateT>(__refs)
+16535:       {
+16535:  if (__builtin_strcmp(__s, "C") != 0
+16535:      && __builtin_strcmp(__s, "POSIX") != 0)
+16535:    {
+16535:      this->_S_destroy_c_locale(this->_M_c_locale_codecvt);
+16535:      this->_S_create_c_locale(this->_M_c_locale_codecvt, __s);
+16535:    }
+16535:       }
+16535: 
+16535: 
+16535:       explicit
+16535:       codecvt_byname(const string& __s, size_t __refs = 0)
+16535:       : codecvt_byname(__s.c_str(), __refs) { }
+16535: 
+16535: 
+16535:     protected:
+16535:       virtual
+16535:       ~codecvt_byname() { }
+16535:     };
+16535: 
+16535: 
+16535:   template<>
+16535:     class codecvt_byname<char16_t, char, mbstate_t>
+16535:     : public codecvt<char16_t, char, mbstate_t>
+16535:     {
+16535:     public:
+16535:       explicit
+16535:       codecvt_byname(const char*, size_t __refs = 0)
+16535:       : codecvt<char16_t, char, mbstate_t>(__refs) { }
+16535: 
+16535:       explicit
+16535:       codecvt_byname(const string& __s, size_t __refs = 0)
+16535:       : codecvt_byname(__s.c_str(), __refs) { }
+16535: 
+16535:     protected:
+16535:       virtual
+16535:       ~codecvt_byname() { }
+16535:     };
+16535: 
+16535:   template<>
+16535:     class codecvt_byname<char32_t, char, mbstate_t>
+16535:     : public codecvt<char32_t, char, mbstate_t>
+16535:     {
+16535:     public:
+16535:       explicit
+16535:       codecvt_byname(const char*, size_t __refs = 0)
+16535:       : codecvt<char32_t, char, mbstate_t>(__refs) { }
+16535: 
+16535:       explicit
+16535:       codecvt_byname(const string& __s, size_t __refs = 0)
+16535:       : codecvt_byname(__s.c_str(), __refs) { }
+16535: 
+16535:     protected:
+16535:       virtual
+16535:       ~codecvt_byname() { }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   extern template class codecvt_byname<char, char, mbstate_t>;
+16535: 
+16535:   extern template
+16535:     const codecvt<char, char, mbstate_t>&
+16535:     use_facet<codecvt<char, char, mbstate_t> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<codecvt<char, char, mbstate_t> >(const locale&);
+16535: 
+16535: 
+16535:   extern template class codecvt_byname<wchar_t, char, mbstate_t>;
+16535: 
+16535:   extern template
+16535:     const codecvt<wchar_t, char, mbstate_t>&
+16535:     use_facet<codecvt<wchar_t, char, mbstate_t> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<codecvt<wchar_t, char, mbstate_t> >(const locale&);
+16535: 
+16535: 
+16535: 
+16535:   extern template class codecvt_byname<char16_t, char, mbstate_t>;
+16535:   extern template class codecvt_byname<char32_t, char, mbstate_t>;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 2014 "/usr/include/c++/8/bits/locale_facets_nonio.h" 2 3
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/locale_facets_nonio.tcc" 1 3
+16535: # 33 "/usr/include/c++/8/bits/locale_facets_nonio.tcc" 3
+16535:        
+16535: # 34 "/usr/include/c++/8/bits/locale_facets_nonio.tcc" 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   template<typename _CharT, bool _Intl>
+16535:     struct __use_cache<__moneypunct_cache<_CharT, _Intl> >
+16535:     {
+16535:       const __moneypunct_cache<_CharT, _Intl>*
+16535:       operator() (const locale& __loc) const
+16535:       {
+16535:  const size_t __i = moneypunct<_CharT, _Intl>::id._M_id();
+16535:  const locale::facet** __caches = __loc._M_impl->_M_caches;
+16535:  if (!__caches[__i])
+16535:    {
+16535:      __moneypunct_cache<_CharT, _Intl>* __tmp = 0;
+16535:      try
+16535:        {
+16535:   __tmp = new __moneypunct_cache<_CharT, _Intl>;
+16535:   __tmp->_M_cache(__loc);
+16535:        }
+16535:      catch(...)
+16535:        {
+16535:   delete __tmp;
+16535:   throw;
+16535:        }
+16535:      __loc._M_impl->_M_install_cache(__tmp, __i);
+16535:    }
+16535:  return static_cast<
+16535:    const __moneypunct_cache<_CharT, _Intl>*>(__caches[__i]);
+16535:       }
+16535:     };
+16535: 
+16535:   template<typename _CharT, bool _Intl>
+16535:     void
+16535:     __moneypunct_cache<_CharT, _Intl>::_M_cache(const locale& __loc)
+16535:     {
+16535:       const moneypunct<_CharT, _Intl>& __mp =
+16535:  use_facet<moneypunct<_CharT, _Intl> >(__loc);
+16535: 
+16535:       _M_decimal_point = __mp.decimal_point();
+16535:       _M_thousands_sep = __mp.thousands_sep();
+16535:       _M_frac_digits = __mp.frac_digits();
+16535: 
+16535:       char* __grouping = 0;
+16535:       _CharT* __curr_symbol = 0;
+16535:       _CharT* __positive_sign = 0;
+16535:       _CharT* __negative_sign = 0;
+16535:       try
+16535:  {
+16535:    const string& __g = __mp.grouping();
+16535:    _M_grouping_size = __g.size();
+16535:    __grouping = new char[_M_grouping_size];
+16535:    __g.copy(__grouping, _M_grouping_size);
+16535:    _M_use_grouping = (_M_grouping_size
+16535:         && static_cast<signed char>(__grouping[0]) > 0
+16535:         && (__grouping[0]
+16535:      != __gnu_cxx::__numeric_traits<char>::__max));
+16535: 
+16535:    const basic_string<_CharT>& __cs = __mp.curr_symbol();
+16535:    _M_curr_symbol_size = __cs.size();
+16535:    __curr_symbol = new _CharT[_M_curr_symbol_size];
+16535:    __cs.copy(__curr_symbol, _M_curr_symbol_size);
+16535: 
+16535:    const basic_string<_CharT>& __ps = __mp.positive_sign();
+16535:    _M_positive_sign_size = __ps.size();
+16535:    __positive_sign = new _CharT[_M_positive_sign_size];
+16535:    __ps.copy(__positive_sign, _M_positive_sign_size);
+16535: 
+16535:    const basic_string<_CharT>& __ns = __mp.negative_sign();
+16535:    _M_negative_sign_size = __ns.size();
+16535:    __negative_sign = new _CharT[_M_negative_sign_size];
+16535:    __ns.copy(__negative_sign, _M_negative_sign_size);
+16535: 
+16535:    _M_pos_format = __mp.pos_format();
+16535:    _M_neg_format = __mp.neg_format();
+16535: 
+16535:    const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__loc);
+16535:    __ct.widen(money_base::_S_atoms,
+16535:        money_base::_S_atoms + money_base::_S_end, _M_atoms);
+16535: 
+16535:    _M_grouping = __grouping;
+16535:    _M_curr_symbol = __curr_symbol;
+16535:    _M_positive_sign = __positive_sign;
+16535:    _M_negative_sign = __negative_sign;
+16535:    _M_allocated = true;
+16535:  }
+16535:       catch(...)
+16535:  {
+16535:    delete [] __grouping;
+16535:    delete [] __curr_symbol;
+16535:    delete [] __positive_sign;
+16535:    delete [] __negative_sign;
+16535:    throw;
+16535:  }
+16535:     }
+16535: 
+16535: namespace __cxx11 {
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     template<bool _Intl>
+16535:       _InIter
+16535:       money_get<_CharT, _InIter>::
+16535:       _M_extract(iter_type __beg, iter_type __end, ios_base& __io,
+16535:    ios_base::iostate& __err, string& __units) const
+16535:       {
+16535:  typedef char_traits<_CharT> __traits_type;
+16535:  typedef typename string_type::size_type size_type;
+16535:  typedef money_base::part part;
+16535:  typedef __moneypunct_cache<_CharT, _Intl> __cache_type;
+16535: 
+16535:  const locale& __loc = __io._M_getloc();
+16535:  const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
+16535: 
+16535:  __use_cache<__cache_type> __uc;
+16535:  const __cache_type* __lc = __uc(__loc);
+16535:  const char_type* __lit = __lc->_M_atoms;
+16535: 
+16535: 
+16535:  bool __negative = false;
+16535: 
+16535:  size_type __sign_size = 0;
+16535: 
+16535:  const bool __mandatory_sign = (__lc->_M_positive_sign_size
+16535:            && __lc->_M_negative_sign_size);
+16535: 
+16535:  string __grouping_tmp;
+16535:  if (__lc->_M_use_grouping)
+16535:    __grouping_tmp.reserve(32);
+16535: 
+16535:  int __last_pos = 0;
+16535: 
+16535:  int __n = 0;
+16535: 
+16535:  bool __testvalid = true;
+16535: 
+16535:  bool __testdecfound = false;
+16535: 
+16535: 
+16535:  string __res;
+16535:  __res.reserve(32);
+16535: 
+16535:  const char_type* __lit_zero = __lit + money_base::_S_zero;
+16535:  const money_base::pattern __p = __lc->_M_neg_format;
+16535:  for (int __i = 0; __i < 4 && __testvalid; ++__i)
+16535:    {
+16535:      const part __which = static_cast<part>(__p.field[__i]);
+16535:      switch (__which)
+16535:        {
+16535:        case money_base::symbol:
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (__io.flags() & ios_base::showbase || __sign_size > 1
+16535:       || __i == 0
+16535:       || (__i == 1 && (__mandatory_sign
+16535:          || (static_cast<part>(__p.field[0])
+16535:       == money_base::sign)
+16535:          || (static_cast<part>(__p.field[2])
+16535:       == money_base::space)))
+16535:       || (__i == 2 && ((static_cast<part>(__p.field[3])
+16535:           == money_base::value)
+16535:          || (__mandatory_sign
+16535:       && (static_cast<part>(__p.field[3])
+16535:           == money_base::sign)))))
+16535:     {
+16535:       const size_type __len = __lc->_M_curr_symbol_size;
+16535:       size_type __j = 0;
+16535:       for (; __beg != __end && __j < __len
+16535:       && *__beg == __lc->_M_curr_symbol[__j];
+16535:     ++__beg, (void)++__j);
+16535:       if (__j != __len
+16535:    && (__j || __io.flags() & ios_base::showbase))
+16535:         __testvalid = false;
+16535:     }
+16535:   break;
+16535:        case money_base::sign:
+16535: 
+16535:   if (__lc->_M_positive_sign_size && __beg != __end
+16535:       && *__beg == __lc->_M_positive_sign[0])
+16535:     {
+16535:       __sign_size = __lc->_M_positive_sign_size;
+16535:       ++__beg;
+16535:     }
+16535:   else if (__lc->_M_negative_sign_size && __beg != __end
+16535:     && *__beg == __lc->_M_negative_sign[0])
+16535:     {
+16535:       __negative = true;
+16535:       __sign_size = __lc->_M_negative_sign_size;
+16535:       ++__beg;
+16535:     }
+16535:   else if (__lc->_M_positive_sign_size
+16535:     && !__lc->_M_negative_sign_size)
+16535: 
+16535: 
+16535:     __negative = true;
+16535:   else if (__mandatory_sign)
+16535:     __testvalid = false;
+16535:   break;
+16535:        case money_base::value:
+16535: 
+16535: 
+16535:   for (; __beg != __end; ++__beg)
+16535:     {
+16535:       const char_type __c = *__beg;
+16535:       const char_type* __q = __traits_type::find(__lit_zero,
+16535:               10, __c);
+16535:       if (__q != 0)
+16535:         {
+16535:    __res += money_base::_S_atoms[__q - __lit];
+16535:    ++__n;
+16535:         }
+16535:       else if (__c == __lc->_M_decimal_point
+16535:         && !__testdecfound)
+16535:         {
+16535:    if (__lc->_M_frac_digits <= 0)
+16535:      break;
+16535: 
+16535:    __last_pos = __n;
+16535:    __n = 0;
+16535:    __testdecfound = true;
+16535:         }
+16535:       else if (__lc->_M_use_grouping
+16535:         && __c == __lc->_M_thousands_sep
+16535:         && !__testdecfound)
+16535:         {
+16535:    if (__n)
+16535:      {
+16535: 
+16535:        __grouping_tmp += static_cast<char>(__n);
+16535:        __n = 0;
+16535:      }
+16535:    else
+16535:      {
+16535:        __testvalid = false;
+16535:        break;
+16535:      }
+16535:         }
+16535:       else
+16535:         break;
+16535:     }
+16535:   if (__res.empty())
+16535:     __testvalid = false;
+16535:   break;
+16535:        case money_base::space:
+16535: 
+16535:   if (__beg != __end && __ctype.is(ctype_base::space, *__beg))
+16535:     ++__beg;
+16535:   else
+16535:     __testvalid = false;
+16535: 
+16535:        case money_base::none:
+16535: 
+16535:   if (__i != 3)
+16535:     for (; __beg != __end
+16535:     && __ctype.is(ctype_base::space, *__beg); ++__beg);
+16535:   break;
+16535:        }
+16535:    }
+16535: 
+16535: 
+16535:  if (__sign_size > 1 && __testvalid)
+16535:    {
+16535:      const char_type* __sign = __negative ? __lc->_M_negative_sign
+16535:                                           : __lc->_M_positive_sign;
+16535:      size_type __i = 1;
+16535:      for (; __beg != __end && __i < __sign_size
+16535:      && *__beg == __sign[__i]; ++__beg, (void)++__i);
+16535: 
+16535:      if (__i != __sign_size)
+16535:        __testvalid = false;
+16535:    }
+16535: 
+16535:  if (__testvalid)
+16535:    {
+16535: 
+16535:      if (__res.size() > 1)
+16535:        {
+16535:   const size_type __first = __res.find_first_not_of('0');
+16535:   const bool __only_zeros = __first == string::npos;
+16535:   if (__first)
+16535:     __res.erase(0, __only_zeros ? __res.size() - 1 : __first);
+16535:        }
+16535: 
+16535: 
+16535:      if (__negative && __res[0] != '0')
+16535:        __res.insert(__res.begin(), '-');
+16535: 
+16535: 
+16535:      if (__grouping_tmp.size())
+16535:        {
+16535: 
+16535:   __grouping_tmp += static_cast<char>(__testdecfound ? __last_pos
+16535:                          : __n);
+16535:   if (!std::__verify_grouping(__lc->_M_grouping,
+16535:          __lc->_M_grouping_size,
+16535:          __grouping_tmp))
+16535:     __err |= ios_base::failbit;
+16535:        }
+16535: 
+16535: 
+16535:      if (__testdecfound && __n != __lc->_M_frac_digits)
+16535:        __testvalid = false;
+16535:    }
+16535: 
+16535: 
+16535:  if (!__testvalid)
+16535:    __err |= ios_base::failbit;
+16535:  else
+16535:    __units.swap(__res);
+16535: 
+16535: 
+16535:  if (__beg == __end)
+16535:    __err |= ios_base::eofbit;
+16535:  return __beg;
+16535:       }
+16535: # 368 "/usr/include/c++/8/bits/locale_facets_nonio.tcc" 3
+16535:   template<typename _CharT, typename _InIter>
+16535:     _InIter
+16535:     money_get<_CharT, _InIter>::
+16535:     do_get(iter_type __beg, iter_type __end, bool __intl, ios_base& __io,
+16535:     ios_base::iostate& __err, long double& __units) const
+16535:     {
+16535:       string __str;
+16535:       __beg = __intl ? _M_extract<true>(__beg, __end, __io, __err, __str)
+16535:               : _M_extract<false>(__beg, __end, __io, __err, __str);
+16535:       std::__convert_to_v(__str.c_str(), __units, __err, _S_get_c_locale());
+16535:       return __beg;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     _InIter
+16535:     money_get<_CharT, _InIter>::
+16535:     do_get(iter_type __beg, iter_type __end, bool __intl, ios_base& __io,
+16535:     ios_base::iostate& __err, string_type& __digits) const
+16535:     {
+16535:       typedef typename string::size_type size_type;
+16535: 
+16535:       const locale& __loc = __io._M_getloc();
+16535:       const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
+16535: 
+16535:       string __str;
+16535:       __beg = __intl ? _M_extract<true>(__beg, __end, __io, __err, __str)
+16535:               : _M_extract<false>(__beg, __end, __io, __err, __str);
+16535:       const size_type __len = __str.size();
+16535:       if (__len)
+16535:  {
+16535:    __digits.resize(__len);
+16535:    __ctype.widen(__str.data(), __str.data() + __len, &__digits[0]);
+16535:  }
+16535:       return __beg;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _OutIter>
+16535:     template<bool _Intl>
+16535:       _OutIter
+16535:       money_put<_CharT, _OutIter>::
+16535:       _M_insert(iter_type __s, ios_base& __io, char_type __fill,
+16535:   const string_type& __digits) const
+16535:       {
+16535:  typedef typename string_type::size_type size_type;
+16535:  typedef money_base::part part;
+16535:  typedef __moneypunct_cache<_CharT, _Intl> __cache_type;
+16535: 
+16535:  const locale& __loc = __io._M_getloc();
+16535:  const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
+16535: 
+16535:  __use_cache<__cache_type> __uc;
+16535:  const __cache_type* __lc = __uc(__loc);
+16535:  const char_type* __lit = __lc->_M_atoms;
+16535: 
+16535: 
+16535: 
+16535:  const char_type* __beg = __digits.data();
+16535: 
+16535:  money_base::pattern __p;
+16535:  const char_type* __sign;
+16535:  size_type __sign_size;
+16535:  if (!(*__beg == __lit[money_base::_S_minus]))
+16535:    {
+16535:      __p = __lc->_M_pos_format;
+16535:      __sign = __lc->_M_positive_sign;
+16535:      __sign_size = __lc->_M_positive_sign_size;
+16535:    }
+16535:  else
+16535:    {
+16535:      __p = __lc->_M_neg_format;
+16535:      __sign = __lc->_M_negative_sign;
+16535:      __sign_size = __lc->_M_negative_sign_size;
+16535:      if (__digits.size())
+16535:        ++__beg;
+16535:    }
+16535: 
+16535: 
+16535:  size_type __len = __ctype.scan_not(ctype_base::digit, __beg,
+16535:         __beg + __digits.size()) - __beg;
+16535:  if (__len)
+16535:    {
+16535: 
+16535: 
+16535: 
+16535:      string_type __value;
+16535:      __value.reserve(2 * __len);
+16535: 
+16535: 
+16535: 
+16535:      long __paddec = __len - __lc->_M_frac_digits;
+16535:      if (__paddec > 0)
+16535:          {
+16535:   if (__lc->_M_frac_digits < 0)
+16535:     __paddec = __len;
+16535:     if (__lc->_M_grouping_size)
+16535:       {
+16535:       __value.assign(2 * __paddec, char_type());
+16535:        _CharT* __vend =
+16535:         std::__add_grouping(&__value[0], __lc->_M_thousands_sep,
+16535:        __lc->_M_grouping,
+16535:        __lc->_M_grouping_size,
+16535:        __beg, __beg + __paddec);
+16535:       __value.erase(__vend - &__value[0]);
+16535:       }
+16535:     else
+16535:     __value.assign(__beg, __paddec);
+16535:        }
+16535: 
+16535: 
+16535:      if (__lc->_M_frac_digits > 0)
+16535:        {
+16535:   __value += __lc->_M_decimal_point;
+16535:   if (__paddec >= 0)
+16535:     __value.append(__beg + __paddec, __lc->_M_frac_digits);
+16535:   else
+16535:     {
+16535: 
+16535:       __value.append(-__paddec, __lit[money_base::_S_zero]);
+16535:       __value.append(__beg, __len);
+16535:     }
+16535:          }
+16535: 
+16535: 
+16535:      const ios_base::fmtflags __f = __io.flags()
+16535:                                     & ios_base::adjustfield;
+16535:      __len = __value.size() + __sign_size;
+16535:      __len += ((__io.flags() & ios_base::showbase)
+16535:         ? __lc->_M_curr_symbol_size : 0);
+16535: 
+16535:      string_type __res;
+16535:      __res.reserve(2 * __len);
+16535: 
+16535:      const size_type __width = static_cast<size_type>(__io.width());
+16535:      const bool __testipad = (__f == ios_base::internal
+16535:          && __len < __width);
+16535: 
+16535:      for (int __i = 0; __i < 4; ++__i)
+16535:        {
+16535:   const part __which = static_cast<part>(__p.field[__i]);
+16535:   switch (__which)
+16535:     {
+16535:     case money_base::symbol:
+16535:       if (__io.flags() & ios_base::showbase)
+16535:         __res.append(__lc->_M_curr_symbol,
+16535:        __lc->_M_curr_symbol_size);
+16535:       break;
+16535:     case money_base::sign:
+16535: 
+16535: 
+16535: 
+16535:       if (__sign_size)
+16535:         __res += __sign[0];
+16535:       break;
+16535:     case money_base::value:
+16535:       __res += __value;
+16535:       break;
+16535:     case money_base::space:
+16535: 
+16535: 
+16535: 
+16535:       if (__testipad)
+16535:         __res.append(__width - __len, __fill);
+16535:       else
+16535:         __res += __fill;
+16535:       break;
+16535:     case money_base::none:
+16535:       if (__testipad)
+16535:         __res.append(__width - __len, __fill);
+16535:       break;
+16535:     }
+16535:        }
+16535: 
+16535: 
+16535:      if (__sign_size > 1)
+16535:        __res.append(__sign + 1, __sign_size - 1);
+16535: 
+16535: 
+16535:      __len = __res.size();
+16535:      if (__width > __len)
+16535:        {
+16535:   if (__f == ios_base::left)
+16535: 
+16535:     __res.append(__width - __len, __fill);
+16535:   else
+16535: 
+16535:     __res.insert(0, __width - __len, __fill);
+16535:   __len = __width;
+16535:        }
+16535: 
+16535: 
+16535:      __s = std::__write(__s, __res.data(), __len);
+16535:    }
+16535:  __io.width(0);
+16535:  return __s;
+16535:       }
+16535: # 574 "/usr/include/c++/8/bits/locale_facets_nonio.tcc" 3
+16535:   template<typename _CharT, typename _OutIter>
+16535:     _OutIter
+16535:     money_put<_CharT, _OutIter>::
+16535:     do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
+16535:     long double __units) const
+16535:     {
+16535:       const locale __loc = __io.getloc();
+16535:       const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
+16535: 
+16535: 
+16535:       int __cs_size = 64;
+16535:       char* __cs = static_cast<char*>(__builtin_alloca(__cs_size));
+16535: 
+16535: 
+16535:       int __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
+16535:      "%.*Lf", 0, __units);
+16535: 
+16535:       if (__len >= __cs_size)
+16535:  {
+16535:    __cs_size = __len + 1;
+16535:    __cs = static_cast<char*>(__builtin_alloca(__cs_size));
+16535:    __len = std::__convert_from_v(_S_get_c_locale(), __cs, __cs_size,
+16535:      "%.*Lf", 0, __units);
+16535:  }
+16535: # 606 "/usr/include/c++/8/bits/locale_facets_nonio.tcc" 3
+16535:       string_type __digits(__len, char_type());
+16535:       __ctype.widen(__cs, __cs + __len, &__digits[0]);
+16535:       return __intl ? _M_insert<true>(__s, __io, __fill, __digits)
+16535:              : _M_insert<false>(__s, __io, __fill, __digits);
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _OutIter>
+16535:     _OutIter
+16535:     money_put<_CharT, _OutIter>::
+16535:     do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
+16535:     const string_type& __digits) const
+16535:     { return __intl ? _M_insert<true>(__s, __io, __fill, __digits)
+16535:              : _M_insert<false>(__s, __io, __fill, __digits); }
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     time_base::dateorder
+16535:     time_get<_CharT, _InIter>::do_date_order() const
+16535:     { return time_base::no_order; }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     _InIter
+16535:     time_get<_CharT, _InIter>::
+16535:     _M_extract_via_format(iter_type __beg, iter_type __end, ios_base& __io,
+16535:      ios_base::iostate& __err, tm* __tm,
+16535:      const _CharT* __format) const
+16535:     {
+16535:       const locale& __loc = __io._M_getloc();
+16535:       const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc);
+16535:       const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
+16535:       const size_t __len = char_traits<_CharT>::length(__format);
+16535: 
+16535:       ios_base::iostate __tmperr = ios_base::goodbit;
+16535:       size_t __i = 0;
+16535:       for (; __beg != __end && __i < __len && !__tmperr; ++__i)
+16535:  {
+16535:    if (__ctype.narrow(__format[__i], 0) == '%')
+16535:      {
+16535: 
+16535:        char __c = __ctype.narrow(__format[++__i], 0);
+16535:        int __mem = 0;
+16535:        if (__c == 'E' || __c == 'O')
+16535:   __c = __ctype.narrow(__format[++__i], 0);
+16535:        switch (__c)
+16535:   {
+16535:     const char* __cs;
+16535:     _CharT __wcs[10];
+16535:   case 'a':
+16535: 
+16535:     const char_type* __days1[7];
+16535:     __tp._M_days_abbreviated(__days1);
+16535:     __beg = _M_extract_name(__beg, __end, __mem, __days1,
+16535:        7, __io, __tmperr);
+16535:     if (!__tmperr)
+16535:       __tm->tm_wday = __mem;
+16535:     break;
+16535:   case 'A':
+16535: 
+16535:     const char_type* __days2[7];
+16535:     __tp._M_days(__days2);
+16535:     __beg = _M_extract_name(__beg, __end, __mem, __days2,
+16535:        7, __io, __tmperr);
+16535:     if (!__tmperr)
+16535:       __tm->tm_wday = __mem;
+16535:     break;
+16535:   case 'h':
+16535:   case 'b':
+16535: 
+16535:     const char_type* __months1[12];
+16535:     __tp._M_months_abbreviated(__months1);
+16535:     __beg = _M_extract_name(__beg, __end, __mem,
+16535:        __months1, 12, __io, __tmperr);
+16535:     if (!__tmperr)
+16535:       __tm->tm_mon = __mem;
+16535:     break;
+16535:   case 'B':
+16535: 
+16535:     const char_type* __months2[12];
+16535:     __tp._M_months(__months2);
+16535:     __beg = _M_extract_name(__beg, __end, __mem,
+16535:        __months2, 12, __io, __tmperr);
+16535:     if (!__tmperr)
+16535:       __tm->tm_mon = __mem;
+16535:     break;
+16535:   case 'c':
+16535: 
+16535:     const char_type* __dt[2];
+16535:     __tp._M_date_time_formats(__dt);
+16535:     __beg = _M_extract_via_format(__beg, __end, __io, __tmperr,
+16535:       __tm, __dt[0]);
+16535:     break;
+16535:   case 'd':
+16535: 
+16535:     __beg = _M_extract_num(__beg, __end, __mem, 1, 31, 2,
+16535:       __io, __tmperr);
+16535:     if (!__tmperr)
+16535:       __tm->tm_mday = __mem;
+16535:     break;
+16535:   case 'e':
+16535: 
+16535: 
+16535:     if (__ctype.is(ctype_base::space, *__beg))
+16535:       __beg = _M_extract_num(++__beg, __end, __mem, 1, 9,
+16535:         1, __io, __tmperr);
+16535:     else
+16535:       __beg = _M_extract_num(__beg, __end, __mem, 10, 31,
+16535:         2, __io, __tmperr);
+16535:     if (!__tmperr)
+16535:       __tm->tm_mday = __mem;
+16535:     break;
+16535:   case 'D':
+16535: 
+16535:     __cs = "%m/%d/%y";
+16535:     __ctype.widen(__cs, __cs + 9, __wcs);
+16535:     __beg = _M_extract_via_format(__beg, __end, __io, __tmperr,
+16535:       __tm, __wcs);
+16535:     break;
+16535:   case 'H':
+16535: 
+16535:     __beg = _M_extract_num(__beg, __end, __mem, 0, 23, 2,
+16535:       __io, __tmperr);
+16535:     if (!__tmperr)
+16535:       __tm->tm_hour = __mem;
+16535:     break;
+16535:   case 'I':
+16535: 
+16535:     __beg = _M_extract_num(__beg, __end, __mem, 1, 12, 2,
+16535:       __io, __tmperr);
+16535:     if (!__tmperr)
+16535:       __tm->tm_hour = __mem;
+16535:     break;
+16535:   case 'm':
+16535: 
+16535:     __beg = _M_extract_num(__beg, __end, __mem, 1, 12, 2,
+16535:       __io, __tmperr);
+16535:     if (!__tmperr)
+16535:       __tm->tm_mon = __mem - 1;
+16535:     break;
+16535:   case 'M':
+16535: 
+16535:     __beg = _M_extract_num(__beg, __end, __mem, 0, 59, 2,
+16535:       __io, __tmperr);
+16535:     if (!__tmperr)
+16535:       __tm->tm_min = __mem;
+16535:     break;
+16535:   case 'n':
+16535:     if (__ctype.narrow(*__beg, 0) == '\n')
+16535:       ++__beg;
+16535:     else
+16535:       __tmperr |= ios_base::failbit;
+16535:     break;
+16535:   case 'R':
+16535: 
+16535:     __cs = "%H:%M";
+16535:     __ctype.widen(__cs, __cs + 6, __wcs);
+16535:     __beg = _M_extract_via_format(__beg, __end, __io, __tmperr,
+16535:       __tm, __wcs);
+16535:     break;
+16535:   case 'S':
+16535: 
+16535: 
+16535: 
+16535:     __beg = _M_extract_num(__beg, __end, __mem, 0, 60, 2,
+16535: 
+16535: 
+16535: 
+16535:       __io, __tmperr);
+16535:     if (!__tmperr)
+16535:     __tm->tm_sec = __mem;
+16535:     break;
+16535:   case 't':
+16535:     if (__ctype.narrow(*__beg, 0) == '\t')
+16535:       ++__beg;
+16535:     else
+16535:       __tmperr |= ios_base::failbit;
+16535:     break;
+16535:   case 'T':
+16535: 
+16535:     __cs = "%H:%M:%S";
+16535:     __ctype.widen(__cs, __cs + 9, __wcs);
+16535:     __beg = _M_extract_via_format(__beg, __end, __io, __tmperr,
+16535:       __tm, __wcs);
+16535:     break;
+16535:   case 'x':
+16535: 
+16535:     const char_type* __dates[2];
+16535:     __tp._M_date_formats(__dates);
+16535:     __beg = _M_extract_via_format(__beg, __end, __io, __tmperr,
+16535:       __tm, __dates[0]);
+16535:     break;
+16535:   case 'X':
+16535: 
+16535:     const char_type* __times[2];
+16535:     __tp._M_time_formats(__times);
+16535:     __beg = _M_extract_via_format(__beg, __end, __io, __tmperr,
+16535:       __tm, __times[0]);
+16535:     break;
+16535:   case 'y':
+16535:   case 'C':
+16535: 
+16535:   case 'Y':
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     __beg = _M_extract_num(__beg, __end, __mem, 0, 9999, 4,
+16535:       __io, __tmperr);
+16535:     if (!__tmperr)
+16535:       __tm->tm_year = __mem < 0 ? __mem + 100 : __mem - 1900;
+16535:     break;
+16535:   case 'Z':
+16535: 
+16535:     if (__ctype.is(ctype_base::upper, *__beg))
+16535:       {
+16535:         int __tmp;
+16535:         __beg = _M_extract_name(__beg, __end, __tmp,
+16535:            __timepunct_cache<_CharT>::_S_timezones,
+16535:            14, __io, __tmperr);
+16535: 
+16535: 
+16535:         if (__beg != __end && !__tmperr && __tmp == 0
+16535:      && (*__beg == __ctype.widen('-')
+16535:          || *__beg == __ctype.widen('+')))
+16535:    {
+16535:      __beg = _M_extract_num(__beg, __end, __tmp, 0, 23, 2,
+16535:        __io, __tmperr);
+16535:      __beg = _M_extract_num(__beg, __end, __tmp, 0, 59, 2,
+16535:        __io, __tmperr);
+16535:    }
+16535:       }
+16535:     else
+16535:       __tmperr |= ios_base::failbit;
+16535:     break;
+16535:   default:
+16535: 
+16535:     __tmperr |= ios_base::failbit;
+16535:   }
+16535:      }
+16535:    else
+16535:      {
+16535: 
+16535:        if (__format[__i] == *__beg)
+16535:   ++__beg;
+16535:        else
+16535:   __tmperr |= ios_base::failbit;
+16535:      }
+16535:  }
+16535: 
+16535:       if (__tmperr || __i != __len)
+16535:  __err |= ios_base::failbit;
+16535: 
+16535:       return __beg;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     _InIter
+16535:     time_get<_CharT, _InIter>::
+16535:     _M_extract_num(iter_type __beg, iter_type __end, int& __member,
+16535:      int __min, int __max, size_t __len,
+16535:      ios_base& __io, ios_base::iostate& __err) const
+16535:     {
+16535:       const locale& __loc = __io._M_getloc();
+16535:       const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
+16535: 
+16535: 
+16535:       int __mult = __len == 2 ? 10 : (__len == 4 ? 1000 : 1);
+16535: 
+16535:       ++__min;
+16535:       size_t __i = 0;
+16535:       int __value = 0;
+16535:       for (; __beg != __end && __i < __len; ++__beg, (void)++__i)
+16535:  {
+16535:    const char __c = __ctype.narrow(*__beg, '*');
+16535:    if (__c >= '0' && __c <= '9')
+16535:      {
+16535:        __value = __value * 10 + (__c - '0');
+16535:        const int __valuec = __value * __mult;
+16535:        if (__valuec > __max || __valuec + __mult < __min)
+16535:   break;
+16535:        __mult /= 10;
+16535:      }
+16535:    else
+16535:      break;
+16535:  }
+16535:       if (__i == __len)
+16535:  __member = __value;
+16535: 
+16535:       else if (__len == 4 && __i == 2)
+16535:  __member = __value - 100;
+16535:       else
+16535:  __err |= ios_base::failbit;
+16535: 
+16535:       return __beg;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     _InIter
+16535:     time_get<_CharT, _InIter>::
+16535:     _M_extract_name(iter_type __beg, iter_type __end, int& __member,
+16535:       const _CharT** __names, size_t __indexlen,
+16535:       ios_base& __io, ios_base::iostate& __err) const
+16535:     {
+16535:       typedef char_traits<_CharT> __traits_type;
+16535:       const locale& __loc = __io._M_getloc();
+16535:       const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
+16535: 
+16535:       int* __matches = static_cast<int*>(__builtin_alloca(sizeof(int)
+16535:          * __indexlen));
+16535:       size_t __nmatches = 0;
+16535:       size_t __pos = 0;
+16535:       bool __testvalid = true;
+16535:       const char_type* __name;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       if (__beg != __end)
+16535:  {
+16535:    const char_type __c = *__beg;
+16535:    for (size_t __i1 = 0; __i1 < __indexlen; ++__i1)
+16535:      if (__c == __names[__i1][0]
+16535:   || __c == __ctype.toupper(__names[__i1][0]))
+16535:        __matches[__nmatches++] = __i1;
+16535:  }
+16535: 
+16535:       while (__nmatches > 1)
+16535:  {
+16535: 
+16535:    size_t __minlen = __traits_type::length(__names[__matches[0]]);
+16535:    for (size_t __i2 = 1; __i2 < __nmatches; ++__i2)
+16535:      __minlen = std::min(__minlen,
+16535:          __traits_type::length(__names[__matches[__i2]]));
+16535:    ++__beg;
+16535:    ++__pos;
+16535:    if (__pos < __minlen && __beg != __end)
+16535:      for (size_t __i3 = 0; __i3 < __nmatches;)
+16535:        {
+16535:   __name = __names[__matches[__i3]];
+16535:   if (!(__name[__pos] == *__beg))
+16535:     __matches[__i3] = __matches[--__nmatches];
+16535:   else
+16535:     ++__i3;
+16535:        }
+16535:    else
+16535:      break;
+16535:  }
+16535: 
+16535:       if (__nmatches == 1)
+16535:  {
+16535: 
+16535:    ++__beg;
+16535:    ++__pos;
+16535:    __name = __names[__matches[0]];
+16535:    const size_t __len = __traits_type::length(__name);
+16535:    while (__pos < __len && __beg != __end && __name[__pos] == *__beg)
+16535:      ++__beg, (void)++__pos;
+16535: 
+16535:    if (__len == __pos)
+16535:      __member = __matches[0];
+16535:    else
+16535:      __testvalid = false;
+16535:  }
+16535:       else
+16535:  __testvalid = false;
+16535:       if (!__testvalid)
+16535:  __err |= ios_base::failbit;
+16535: 
+16535:       return __beg;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     _InIter
+16535:     time_get<_CharT, _InIter>::
+16535:     _M_extract_wday_or_month(iter_type __beg, iter_type __end, int& __member,
+16535:         const _CharT** __names, size_t __indexlen,
+16535:         ios_base& __io, ios_base::iostate& __err) const
+16535:     {
+16535:       typedef char_traits<_CharT> __traits_type;
+16535:       const locale& __loc = __io._M_getloc();
+16535:       const ctype<_CharT>& __ctype = use_facet<ctype<_CharT> >(__loc);
+16535: 
+16535:       int* __matches = static_cast<int*>(__builtin_alloca(2 * sizeof(int)
+16535:          * __indexlen));
+16535:       size_t __nmatches = 0;
+16535:       size_t* __matches_lengths = 0;
+16535:       size_t __pos = 0;
+16535: 
+16535:       if (__beg != __end)
+16535:  {
+16535:    const char_type __c = *__beg;
+16535:    for (size_t __i = 0; __i < 2 * __indexlen; ++__i)
+16535:      if (__c == __names[__i][0]
+16535:   || __c == __ctype.toupper(__names[__i][0]))
+16535:        __matches[__nmatches++] = __i;
+16535:  }
+16535: 
+16535:       if (__nmatches)
+16535:  {
+16535:    ++__beg;
+16535:    ++__pos;
+16535: 
+16535:    __matches_lengths
+16535:      = static_cast<size_t*>(__builtin_alloca(sizeof(size_t)
+16535:           * __nmatches));
+16535:    for (size_t __i = 0; __i < __nmatches; ++__i)
+16535:      __matches_lengths[__i]
+16535:        = __traits_type::length(__names[__matches[__i]]);
+16535:  }
+16535: 
+16535:       for (; __beg != __end; ++__beg, (void)++__pos)
+16535:  {
+16535:    size_t __nskipped = 0;
+16535:    const char_type __c = *__beg;
+16535:    for (size_t __i = 0; __i < __nmatches;)
+16535:      {
+16535:        const char_type* __name = __names[__matches[__i]];
+16535:        if (__pos >= __matches_lengths[__i])
+16535:   ++__nskipped, ++__i;
+16535:        else if (!(__name[__pos] == __c))
+16535:   {
+16535:     --__nmatches;
+16535:     __matches[__i] = __matches[__nmatches];
+16535:     __matches_lengths[__i] = __matches_lengths[__nmatches];
+16535:   }
+16535:        else
+16535:   ++__i;
+16535:      }
+16535:    if (__nskipped == __nmatches)
+16535:      break;
+16535:  }
+16535: 
+16535:       if ((__nmatches == 1 && __matches_lengths[0] == __pos)
+16535:    || (__nmatches == 2 && (__matches_lengths[0] == __pos
+16535:       || __matches_lengths[1] == __pos)))
+16535:  __member = (__matches[0] >= __indexlen
+16535:       ? __matches[0] - __indexlen : __matches[0]);
+16535:       else
+16535:  __err |= ios_base::failbit;
+16535: 
+16535:       return __beg;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     _InIter
+16535:     time_get<_CharT, _InIter>::
+16535:     do_get_time(iter_type __beg, iter_type __end, ios_base& __io,
+16535:   ios_base::iostate& __err, tm* __tm) const
+16535:     {
+16535:       const locale& __loc = __io._M_getloc();
+16535:       const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc);
+16535:       const char_type* __times[2];
+16535:       __tp._M_time_formats(__times);
+16535:       __beg = _M_extract_via_format(__beg, __end, __io, __err,
+16535:         __tm, __times[0]);
+16535:       if (__beg == __end)
+16535:  __err |= ios_base::eofbit;
+16535:       return __beg;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     _InIter
+16535:     time_get<_CharT, _InIter>::
+16535:     do_get_date(iter_type __beg, iter_type __end, ios_base& __io,
+16535:   ios_base::iostate& __err, tm* __tm) const
+16535:     {
+16535:       const locale& __loc = __io._M_getloc();
+16535:       const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc);
+16535:       const char_type* __dates[2];
+16535:       __tp._M_date_formats(__dates);
+16535:       __beg = _M_extract_via_format(__beg, __end, __io, __err,
+16535:         __tm, __dates[0]);
+16535:       if (__beg == __end)
+16535:  __err |= ios_base::eofbit;
+16535:       return __beg;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     _InIter
+16535:     time_get<_CharT, _InIter>::
+16535:     do_get_weekday(iter_type __beg, iter_type __end, ios_base& __io,
+16535:      ios_base::iostate& __err, tm* __tm) const
+16535:     {
+16535:       const locale& __loc = __io._M_getloc();
+16535:       const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc);
+16535:       const char_type* __days[14];
+16535:       __tp._M_days_abbreviated(__days);
+16535:       __tp._M_days(__days + 7);
+16535:       int __tmpwday;
+16535:       ios_base::iostate __tmperr = ios_base::goodbit;
+16535: 
+16535:       __beg = _M_extract_wday_or_month(__beg, __end, __tmpwday, __days, 7,
+16535:            __io, __tmperr);
+16535:       if (!__tmperr)
+16535:  __tm->tm_wday = __tmpwday;
+16535:       else
+16535:  __err |= ios_base::failbit;
+16535: 
+16535:       if (__beg == __end)
+16535:  __err |= ios_base::eofbit;
+16535:       return __beg;
+16535:      }
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     _InIter
+16535:     time_get<_CharT, _InIter>::
+16535:     do_get_monthname(iter_type __beg, iter_type __end,
+16535:                      ios_base& __io, ios_base::iostate& __err, tm* __tm) const
+16535:     {
+16535:       const locale& __loc = __io._M_getloc();
+16535:       const __timepunct<_CharT>& __tp = use_facet<__timepunct<_CharT> >(__loc);
+16535:       const char_type* __months[24];
+16535:       __tp._M_months_abbreviated(__months);
+16535:       __tp._M_months(__months + 12);
+16535:       int __tmpmon;
+16535:       ios_base::iostate __tmperr = ios_base::goodbit;
+16535: 
+16535:       __beg = _M_extract_wday_or_month(__beg, __end, __tmpmon, __months, 12,
+16535:            __io, __tmperr);
+16535:       if (!__tmperr)
+16535:  __tm->tm_mon = __tmpmon;
+16535:       else
+16535:  __err |= ios_base::failbit;
+16535: 
+16535:       if (__beg == __end)
+16535:  __err |= ios_base::eofbit;
+16535:       return __beg;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     _InIter
+16535:     time_get<_CharT, _InIter>::
+16535:     do_get_year(iter_type __beg, iter_type __end, ios_base& __io,
+16535:   ios_base::iostate& __err, tm* __tm) const
+16535:     {
+16535:       int __tmpyear;
+16535:       ios_base::iostate __tmperr = ios_base::goodbit;
+16535: 
+16535:       __beg = _M_extract_num(__beg, __end, __tmpyear, 0, 9999, 4,
+16535:         __io, __tmperr);
+16535:       if (!__tmperr)
+16535:  __tm->tm_year = __tmpyear < 0 ? __tmpyear + 100 : __tmpyear - 1900;
+16535:       else
+16535:  __err |= ios_base::failbit;
+16535: 
+16535:       if (__beg == __end)
+16535:  __err |= ios_base::eofbit;
+16535:       return __beg;
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     inline
+16535:     _InIter
+16535:     time_get<_CharT, _InIter>::
+16535:     get(iter_type __s, iter_type __end, ios_base& __io,
+16535:         ios_base::iostate& __err, tm* __tm, const char_type* __fmt,
+16535:         const char_type* __fmtend) const
+16535:     {
+16535:       const locale& __loc = __io._M_getloc();
+16535:       ctype<_CharT> const& __ctype = use_facet<ctype<_CharT> >(__loc);
+16535:       __err = ios_base::goodbit;
+16535:       while (__fmt != __fmtend &&
+16535:              __err == ios_base::goodbit)
+16535:         {
+16535:           if (__s == __end)
+16535:             {
+16535:               __err = ios_base::eofbit | ios_base::failbit;
+16535:               break;
+16535:             }
+16535:           else if (__ctype.narrow(*__fmt, 0) == '%')
+16535:             {
+16535:               char __format;
+16535:               char __mod = 0;
+16535:               if (++__fmt == __fmtend)
+16535:                 {
+16535:                   __err = ios_base::failbit;
+16535:                   break;
+16535:                 }
+16535:               const char __c = __ctype.narrow(*__fmt, 0);
+16535:               if (__c != 'E' && __c != 'O')
+16535:                 __format = __c;
+16535:               else if (++__fmt != __fmtend)
+16535:                 {
+16535:                   __mod = __c;
+16535:                   __format = __ctype.narrow(*__fmt, 0);
+16535:                 }
+16535:               else
+16535:                 {
+16535:                   __err = ios_base::failbit;
+16535:                   break;
+16535:                 }
+16535:               __s = this->do_get(__s, __end, __io, __err, __tm, __format,
+16535:      __mod);
+16535:               ++__fmt;
+16535:             }
+16535:           else if (__ctype.is(ctype_base::space, *__fmt))
+16535:             {
+16535:               ++__fmt;
+16535:               while (__fmt != __fmtend &&
+16535:                      __ctype.is(ctype_base::space, *__fmt))
+16535:                 ++__fmt;
+16535: 
+16535:               while (__s != __end &&
+16535:                      __ctype.is(ctype_base::space, *__s))
+16535:                 ++__s;
+16535:             }
+16535: 
+16535:           else if (__ctype.tolower(*__s) == __ctype.tolower(*__fmt) ||
+16535:                    __ctype.toupper(*__s) == __ctype.toupper(*__fmt))
+16535:             {
+16535:               ++__s;
+16535:               ++__fmt;
+16535:             }
+16535:           else
+16535:             {
+16535:               __err = ios_base::failbit;
+16535:               break;
+16535:             }
+16535:         }
+16535:       return __s;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _InIter>
+16535:     inline
+16535:     _InIter
+16535:     time_get<_CharT, _InIter>::
+16535:     do_get(iter_type __beg, iter_type __end, ios_base& __io,
+16535:            ios_base::iostate& __err, tm* __tm,
+16535:            char __format, char __mod) const
+16535:     {
+16535:       const locale& __loc = __io._M_getloc();
+16535:       ctype<_CharT> const& __ctype = use_facet<ctype<_CharT> >(__loc);
+16535:       __err = ios_base::goodbit;
+16535: 
+16535:       char_type __fmt[4];
+16535:       __fmt[0] = __ctype.widen('%');
+16535:       if (!__mod)
+16535:         {
+16535:           __fmt[1] = __format;
+16535:           __fmt[2] = char_type();
+16535:         }
+16535:       else
+16535:         {
+16535:           __fmt[1] = __mod;
+16535:           __fmt[2] = __format;
+16535:           __fmt[3] = char_type();
+16535:         }
+16535: 
+16535:       __beg = _M_extract_via_format(__beg, __end, __io, __err, __tm, __fmt);
+16535:       if (__beg == __end)
+16535:  __err |= ios_base::eofbit;
+16535:       return __beg;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _OutIter>
+16535:     _OutIter
+16535:     time_put<_CharT, _OutIter>::
+16535:     put(iter_type __s, ios_base& __io, char_type __fill, const tm* __tm,
+16535:  const _CharT* __beg, const _CharT* __end) const
+16535:     {
+16535:       const locale& __loc = __io._M_getloc();
+16535:       ctype<_CharT> const& __ctype = use_facet<ctype<_CharT> >(__loc);
+16535:       for (; __beg != __end; ++__beg)
+16535:  if (__ctype.narrow(*__beg, 0) != '%')
+16535:    {
+16535:      *__s = *__beg;
+16535:      ++__s;
+16535:    }
+16535:  else if (++__beg != __end)
+16535:    {
+16535:      char __format;
+16535:      char __mod = 0;
+16535:      const char __c = __ctype.narrow(*__beg, 0);
+16535:      if (__c != 'E' && __c != 'O')
+16535:        __format = __c;
+16535:      else if (++__beg != __end)
+16535:        {
+16535:   __mod = __c;
+16535:   __format = __ctype.narrow(*__beg, 0);
+16535:        }
+16535:      else
+16535:        break;
+16535:      __s = this->do_put(__s, __io, __fill, __tm, __format, __mod);
+16535:    }
+16535:  else
+16535:    break;
+16535:       return __s;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _OutIter>
+16535:     _OutIter
+16535:     time_put<_CharT, _OutIter>::
+16535:     do_put(iter_type __s, ios_base& __io, char_type, const tm* __tm,
+16535:     char __format, char __mod) const
+16535:     {
+16535:       const locale& __loc = __io._M_getloc();
+16535:       ctype<_CharT> const& __ctype = use_facet<ctype<_CharT> >(__loc);
+16535:       __timepunct<_CharT> const& __tp = use_facet<__timepunct<_CharT> >(__loc);
+16535: 
+16535: 
+16535: 
+16535:       const size_t __maxlen = 128;
+16535:       char_type __res[__maxlen];
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       char_type __fmt[4];
+16535:       __fmt[0] = __ctype.widen('%');
+16535:       if (!__mod)
+16535:  {
+16535:    __fmt[1] = __format;
+16535:    __fmt[2] = char_type();
+16535:  }
+16535:       else
+16535:  {
+16535:    __fmt[1] = __mod;
+16535:    __fmt[2] = __format;
+16535:    __fmt[3] = char_type();
+16535:  }
+16535: 
+16535:       __tp._M_put(__res, __maxlen, __fmt, __tm);
+16535: 
+16535: 
+16535:       return std::__write(__s, __res, char_traits<char_type>::length(__res));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   extern template class moneypunct<char, false>;
+16535:   extern template class moneypunct<char, true>;
+16535:   extern template class moneypunct_byname<char, false>;
+16535:   extern template class moneypunct_byname<char, true>;
+16535:   extern template class __cxx11:: money_get<char>;
+16535:   extern template class __cxx11:: money_put<char>;
+16535:   extern template class __timepunct<char>;
+16535:   extern template class time_put<char>;
+16535:   extern template class time_put_byname<char>;
+16535:   extern template class time_get<char>;
+16535:   extern template class time_get_byname<char>;
+16535:   extern template class messages<char>;
+16535:   extern template class messages_byname<char>;
+16535: 
+16535:   extern template
+16535:     const moneypunct<char, true>&
+16535:     use_facet<moneypunct<char, true> >(const locale&);
+16535: 
+16535:   extern template
+16535:     const moneypunct<char, false>&
+16535:     use_facet<moneypunct<char, false> >(const locale&);
+16535: 
+16535:   extern template
+16535:     const money_put<char>&
+16535:     use_facet<money_put<char> >(const locale&);
+16535: 
+16535:   extern template
+16535:     const money_get<char>&
+16535:     use_facet<money_get<char> >(const locale&);
+16535: 
+16535:   extern template
+16535:     const __timepunct<char>&
+16535:     use_facet<__timepunct<char> >(const locale&);
+16535: 
+16535:   extern template
+16535:     const time_put<char>&
+16535:     use_facet<time_put<char> >(const locale&);
+16535: 
+16535:   extern template
+16535:     const time_get<char>&
+16535:     use_facet<time_get<char> >(const locale&);
+16535: 
+16535:   extern template
+16535:     const messages<char>&
+16535:     use_facet<messages<char> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<moneypunct<char> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<money_put<char> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<money_get<char> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<__timepunct<char> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<time_put<char> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<time_get<char> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<messages<char> >(const locale&);
+16535: 
+16535: 
+16535:   extern template class moneypunct<wchar_t, false>;
+16535:   extern template class moneypunct<wchar_t, true>;
+16535:   extern template class moneypunct_byname<wchar_t, false>;
+16535:   extern template class moneypunct_byname<wchar_t, true>;
+16535:   extern template class __cxx11:: money_get<wchar_t>;
+16535:   extern template class __cxx11:: money_put<wchar_t>;
+16535:   extern template class __timepunct<wchar_t>;
+16535:   extern template class time_put<wchar_t>;
+16535:   extern template class time_put_byname<wchar_t>;
+16535:   extern template class time_get<wchar_t>;
+16535:   extern template class time_get_byname<wchar_t>;
+16535:   extern template class messages<wchar_t>;
+16535:   extern template class messages_byname<wchar_t>;
+16535: 
+16535:   extern template
+16535:     const moneypunct<wchar_t, true>&
+16535:     use_facet<moneypunct<wchar_t, true> >(const locale&);
+16535: 
+16535:   extern template
+16535:     const moneypunct<wchar_t, false>&
+16535:     use_facet<moneypunct<wchar_t, false> >(const locale&);
+16535: 
+16535:   extern template
+16535:     const money_put<wchar_t>&
+16535:     use_facet<money_put<wchar_t> >(const locale&);
+16535: 
+16535:   extern template
+16535:     const money_get<wchar_t>&
+16535:     use_facet<money_get<wchar_t> >(const locale&);
+16535: 
+16535:   extern template
+16535:     const __timepunct<wchar_t>&
+16535:     use_facet<__timepunct<wchar_t> >(const locale&);
+16535: 
+16535:   extern template
+16535:     const time_put<wchar_t>&
+16535:     use_facet<time_put<wchar_t> >(const locale&);
+16535: 
+16535:   extern template
+16535:     const time_get<wchar_t>&
+16535:     use_facet<time_get<wchar_t> >(const locale&);
+16535: 
+16535:   extern template
+16535:     const messages<wchar_t>&
+16535:     use_facet<messages<wchar_t> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<moneypunct<wchar_t> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<money_put<wchar_t> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<money_get<wchar_t> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<__timepunct<wchar_t> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<time_put<wchar_t> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<time_get<wchar_t> >(const locale&);
+16535: 
+16535:   extern template
+16535:     bool
+16535:     has_facet<messages<wchar_t> >(const locale&);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 2016 "/usr/include/c++/8/bits/locale_facets_nonio.h" 2 3
+16535: # 42 "/usr/include/c++/8/locale" 2 3
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/locale_conv.h" 1 3
+16535: # 41 "/usr/include/c++/8/bits/locale_conv.h" 3
+16535: # 1 "/usr/include/c++/8/bits/unique_ptr.h" 1 3
+16535: # 41 "/usr/include/c++/8/bits/unique_ptr.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: #pragma GCC diagnostic push
+16535: #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+16535:   template<typename> class auto_ptr;
+16535: #pragma GCC diagnostic pop
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct default_delete
+16535:     {
+16535: 
+16535:       constexpr default_delete() noexcept = default;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Up, typename = typename
+16535:         enable_if<is_convertible<_Up*, _Tp*>::value>::type>
+16535:         default_delete(const default_delete<_Up>&) noexcept { }
+16535: 
+16535: 
+16535:       void
+16535:       operator()(_Tp* __ptr) const
+16535:       {
+16535:  static_assert(!is_void<_Tp>::value,
+16535:         "can't delete pointer to incomplete type");
+16535:  static_assert(sizeof(_Tp)>0,
+16535:         "can't delete pointer to incomplete type");
+16535:  delete __ptr;
+16535:       }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct default_delete<_Tp[]>
+16535:     {
+16535:     public:
+16535: 
+16535:       constexpr default_delete() noexcept = default;
+16535: # 104 "/usr/include/c++/8/bits/unique_ptr.h" 3
+16535:       template<typename _Up, typename = typename
+16535:         enable_if<is_convertible<_Up(*)[], _Tp(*)[]>::value>::type>
+16535:         default_delete(const default_delete<_Up[]>&) noexcept { }
+16535: 
+16535: 
+16535:       template<typename _Up>
+16535:       typename enable_if<is_convertible<_Up(*)[], _Tp(*)[]>::value>::type
+16535:  operator()(_Up* __ptr) const
+16535:       {
+16535:  static_assert(sizeof(_Tp)>0,
+16535:         "can't delete pointer to incomplete type");
+16535:  delete [] __ptr;
+16535:       }
+16535:     };
+16535: 
+16535:   template <typename _Tp, typename _Dp>
+16535:     class __uniq_ptr_impl
+16535:     {
+16535:       template <typename _Up, typename _Ep, typename = void>
+16535:  struct _Ptr
+16535:  {
+16535:    using type = _Up*;
+16535:  };
+16535: 
+16535:       template <typename _Up, typename _Ep>
+16535:  struct
+16535:  _Ptr<_Up, _Ep, __void_t<typename remove_reference<_Ep>::type::pointer>>
+16535:  {
+16535:    using type = typename remove_reference<_Ep>::type::pointer;
+16535:  };
+16535: 
+16535:     public:
+16535:       using _DeleterConstraint = enable_if<
+16535:         __and_<__not_<is_pointer<_Dp>>,
+16535:         is_default_constructible<_Dp>>::value>;
+16535: 
+16535:       using pointer = typename _Ptr<_Tp, _Dp>::type;
+16535: 
+16535:       __uniq_ptr_impl() = default;
+16535:       __uniq_ptr_impl(pointer __p) : _M_t() { _M_ptr() = __p; }
+16535: 
+16535:       template<typename _Del>
+16535:       __uniq_ptr_impl(pointer __p, _Del&& __d)
+16535:  : _M_t(__p, std::forward<_Del>(__d)) { }
+16535: 
+16535:       pointer& _M_ptr() { return std::get<0>(_M_t); }
+16535:       pointer _M_ptr() const { return std::get<0>(_M_t); }
+16535:       _Dp& _M_deleter() { return std::get<1>(_M_t); }
+16535:       const _Dp& _M_deleter() const { return std::get<1>(_M_t); }
+16535: 
+16535:     private:
+16535:       tuple<pointer, _Dp> _M_t;
+16535:     };
+16535: 
+16535: 
+16535:   template <typename _Tp, typename _Dp = default_delete<_Tp>>
+16535:     class unique_ptr
+16535:     {
+16535:       template <class _Up>
+16535:       using _DeleterConstraint =
+16535:  typename __uniq_ptr_impl<_Tp, _Up>::_DeleterConstraint::type;
+16535: 
+16535:       __uniq_ptr_impl<_Tp, _Dp> _M_t;
+16535: 
+16535:     public:
+16535:       using pointer = typename __uniq_ptr_impl<_Tp, _Dp>::pointer;
+16535:       using element_type = _Tp;
+16535:       using deleter_type = _Dp;
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Up, typename _Ep>
+16535:  using __safe_conversion_up = __and_<
+16535:          is_convertible<typename unique_ptr<_Up, _Ep>::pointer, pointer>,
+16535:                 __not_<is_array<_Up>>,
+16535:                 __or_<__and_<is_reference<deleter_type>,
+16535:                              is_same<deleter_type, _Ep>>,
+16535:                       __and_<__not_<is_reference<deleter_type>>,
+16535:                              is_convertible<_Ep, deleter_type>>
+16535:                 >
+16535:               >;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       template <typename _Up = _Dp,
+16535:   typename = _DeleterConstraint<_Up>>
+16535:  constexpr unique_ptr() noexcept
+16535:  : _M_t()
+16535:  { }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       template <typename _Up = _Dp,
+16535:   typename = _DeleterConstraint<_Up>>
+16535:  explicit
+16535:  unique_ptr(pointer __p) noexcept
+16535:  : _M_t(__p)
+16535:         { }
+16535: # 215 "/usr/include/c++/8/bits/unique_ptr.h" 3
+16535:       unique_ptr(pointer __p,
+16535:    typename conditional<is_reference<deleter_type>::value,
+16535:      deleter_type, const deleter_type&>::type __d) noexcept
+16535:       : _M_t(__p, __d) { }
+16535: # 227 "/usr/include/c++/8/bits/unique_ptr.h" 3
+16535:       unique_ptr(pointer __p,
+16535:    typename remove_reference<deleter_type>::type&& __d) noexcept
+16535:       : _M_t(std::move(__p), std::move(__d))
+16535:       { static_assert(!std::is_reference<deleter_type>::value,
+16535:         "rvalue deleter bound to reference"); }
+16535: 
+16535: 
+16535:       template <typename _Up = _Dp,
+16535:   typename = _DeleterConstraint<_Up>>
+16535:  constexpr unique_ptr(nullptr_t) noexcept : _M_t() { }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       unique_ptr(unique_ptr&& __u) noexcept
+16535:       : _M_t(__u.release(), std::forward<deleter_type>(__u.get_deleter())) { }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Up, typename _Ep, typename = _Require<
+16535:                __safe_conversion_up<_Up, _Ep>,
+16535:         typename conditional<is_reference<_Dp>::value,
+16535:         is_same<_Ep, _Dp>,
+16535:         is_convertible<_Ep, _Dp>>::type>>
+16535:  unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept
+16535:  : _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter()))
+16535:  { }
+16535: 
+16535: 
+16535: #pragma GCC diagnostic push
+16535: #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+16535: 
+16535:       template<typename _Up, typename = _Require<
+16535:         is_convertible<_Up*, _Tp*>, is_same<_Dp, default_delete<_Tp>>>>
+16535:  unique_ptr(auto_ptr<_Up>&& __u) noexcept;
+16535: #pragma GCC diagnostic pop
+16535: 
+16535: 
+16535: 
+16535:       ~unique_ptr() noexcept
+16535:       {
+16535:  auto& __ptr = _M_t._M_ptr();
+16535:  if (__ptr != nullptr)
+16535:    get_deleter()(__ptr);
+16535:  __ptr = pointer();
+16535:       }
+16535: # 286 "/usr/include/c++/8/bits/unique_ptr.h" 3
+16535:       unique_ptr&
+16535:       operator=(unique_ptr&& __u) noexcept
+16535:       {
+16535:  reset(__u.release());
+16535:  get_deleter() = std::forward<deleter_type>(__u.get_deleter());
+16535:  return *this;
+16535:       }
+16535: # 301 "/usr/include/c++/8/bits/unique_ptr.h" 3
+16535:       template<typename _Up, typename _Ep>
+16535:         typename enable_if< __and_<
+16535:           __safe_conversion_up<_Up, _Ep>,
+16535:           is_assignable<deleter_type&, _Ep&&>
+16535:           >::value,
+16535:           unique_ptr&>::type
+16535:  operator=(unique_ptr<_Up, _Ep>&& __u) noexcept
+16535:  {
+16535:    reset(__u.release());
+16535:    get_deleter() = std::forward<_Ep>(__u.get_deleter());
+16535:    return *this;
+16535:  }
+16535: 
+16535: 
+16535:       unique_ptr&
+16535:       operator=(nullptr_t) noexcept
+16535:       {
+16535:  reset();
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       typename add_lvalue_reference<element_type>::type
+16535:       operator*() const
+16535:       {
+16535:  ;
+16535:  return *get();
+16535:       }
+16535: 
+16535: 
+16535:       pointer
+16535:       operator->() const noexcept
+16535:       {
+16535:  ;
+16535:  return get();
+16535:       }
+16535: 
+16535: 
+16535:       pointer
+16535:       get() const noexcept
+16535:       { return _M_t._M_ptr(); }
+16535: 
+16535: 
+16535:       deleter_type&
+16535:       get_deleter() noexcept
+16535:       { return _M_t._M_deleter(); }
+16535: 
+16535: 
+16535:       const deleter_type&
+16535:       get_deleter() const noexcept
+16535:       { return _M_t._M_deleter(); }
+16535: 
+16535: 
+16535:       explicit operator bool() const noexcept
+16535:       { return get() == pointer() ? false : true; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       pointer
+16535:       release() noexcept
+16535:       {
+16535:  pointer __p = get();
+16535:  _M_t._M_ptr() = pointer();
+16535:  return __p;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       reset(pointer __p = pointer()) noexcept
+16535:       {
+16535:  using std::swap;
+16535:  swap(_M_t._M_ptr(), __p);
+16535:  if (__p != pointer())
+16535:    get_deleter()(__p);
+16535:       }
+16535: 
+16535: 
+16535:       void
+16535:       swap(unique_ptr& __u) noexcept
+16535:       {
+16535:  using std::swap;
+16535:  swap(_M_t, __u._M_t);
+16535:       }
+16535: 
+16535: 
+16535:       unique_ptr(const unique_ptr&) = delete;
+16535:       unique_ptr& operator=(const unique_ptr&) = delete;
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Dp>
+16535:     class unique_ptr<_Tp[], _Dp>
+16535:     {
+16535:       template <typename _Up>
+16535:       using _DeleterConstraint =
+16535:  typename __uniq_ptr_impl<_Tp, _Up>::_DeleterConstraint::type;
+16535: 
+16535:       __uniq_ptr_impl<_Tp, _Dp> _M_t;
+16535: 
+16535:       template<typename _Up>
+16535:  using __remove_cv = typename remove_cv<_Up>::type;
+16535: 
+16535: 
+16535:       template<typename _Up>
+16535:  using __is_derived_Tp
+16535:    = __and_< is_base_of<_Tp, _Up>,
+16535:       __not_<is_same<__remove_cv<_Tp>, __remove_cv<_Up>>> >;
+16535: 
+16535:     public:
+16535:       using pointer = typename __uniq_ptr_impl<_Tp, _Dp>::pointer;
+16535:       using element_type = _Tp;
+16535:       using deleter_type = _Dp;
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Up, typename _Ep,
+16535:                typename _Up_up = unique_ptr<_Up, _Ep>,
+16535:         typename _Up_element_type = typename _Up_up::element_type>
+16535:  using __safe_conversion_up = __and_<
+16535:           is_array<_Up>,
+16535:           is_same<pointer, element_type*>,
+16535:           is_same<typename _Up_up::pointer, _Up_element_type*>,
+16535:           is_convertible<_Up_element_type(*)[], element_type(*)[]>,
+16535:           __or_<__and_<is_reference<deleter_type>, is_same<deleter_type, _Ep>>,
+16535:                 __and_<__not_<is_reference<deleter_type>>,
+16535:                        is_convertible<_Ep, deleter_type>>>
+16535:         >;
+16535: 
+16535: 
+16535:       template<typename _Up>
+16535:         using __safe_conversion_raw = __and_<
+16535:           __or_<__or_<is_same<_Up, pointer>,
+16535:                       is_same<_Up, nullptr_t>>,
+16535:                 __and_<is_pointer<_Up>,
+16535:                        is_same<pointer, element_type*>,
+16535:                        is_convertible<
+16535:                          typename remove_pointer<_Up>::type(*)[],
+16535:                          element_type(*)[]>
+16535:                 >
+16535:           >
+16535:         >;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       template <typename _Up = _Dp,
+16535:   typename = _DeleterConstraint<_Up>>
+16535:  constexpr unique_ptr() noexcept
+16535:  : _M_t()
+16535:  { }
+16535: # 470 "/usr/include/c++/8/bits/unique_ptr.h" 3
+16535:       template<typename _Up,
+16535:         typename _Vp = _Dp,
+16535:         typename = _DeleterConstraint<_Vp>,
+16535:         typename = typename enable_if<
+16535:                  __safe_conversion_raw<_Up>::value, bool>::type>
+16535:  explicit
+16535:  unique_ptr(_Up __p) noexcept
+16535:  : _M_t(__p)
+16535:         { }
+16535: # 488 "/usr/include/c++/8/bits/unique_ptr.h" 3
+16535:       template<typename _Up,
+16535:                typename = typename enable_if<
+16535:                  __safe_conversion_raw<_Up>::value, bool>::type>
+16535:       unique_ptr(_Up __p,
+16535:                  typename conditional<is_reference<deleter_type>::value,
+16535:                  deleter_type, const deleter_type&>::type __d) noexcept
+16535:       : _M_t(__p, __d) { }
+16535: # 504 "/usr/include/c++/8/bits/unique_ptr.h" 3
+16535:       template<typename _Up,
+16535:                typename = typename enable_if<
+16535:                  __safe_conversion_raw<_Up>::value, bool>::type>
+16535:       unique_ptr(_Up __p, typename
+16535:    remove_reference<deleter_type>::type&& __d) noexcept
+16535:       : _M_t(std::move(__p), std::move(__d))
+16535:       { static_assert(!is_reference<deleter_type>::value,
+16535:         "rvalue deleter bound to reference"); }
+16535: 
+16535: 
+16535:       unique_ptr(unique_ptr&& __u) noexcept
+16535:       : _M_t(__u.release(), std::forward<deleter_type>(__u.get_deleter())) { }
+16535: 
+16535: 
+16535:       template <typename _Up = _Dp,
+16535:   typename = _DeleterConstraint<_Up>>
+16535:  constexpr unique_ptr(nullptr_t) noexcept : _M_t() { }
+16535: 
+16535:       template<typename _Up, typename _Ep,
+16535:         typename = _Require<__safe_conversion_up<_Up, _Ep>>>
+16535:  unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept
+16535:  : _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter()))
+16535:  { }
+16535: 
+16535: 
+16535:       ~unique_ptr()
+16535:       {
+16535:  auto& __ptr = _M_t._M_ptr();
+16535:  if (__ptr != nullptr)
+16535:    get_deleter()(__ptr);
+16535:  __ptr = pointer();
+16535:       }
+16535: # 545 "/usr/include/c++/8/bits/unique_ptr.h" 3
+16535:       unique_ptr&
+16535:       operator=(unique_ptr&& __u) noexcept
+16535:       {
+16535:  reset(__u.release());
+16535:  get_deleter() = std::forward<deleter_type>(__u.get_deleter());
+16535:  return *this;
+16535:       }
+16535: # 560 "/usr/include/c++/8/bits/unique_ptr.h" 3
+16535:       template<typename _Up, typename _Ep>
+16535:  typename
+16535:  enable_if<__and_<__safe_conversion_up<_Up, _Ep>,
+16535:                          is_assignable<deleter_type&, _Ep&&>
+16535:                   >::value,
+16535:                   unique_ptr&>::type
+16535:  operator=(unique_ptr<_Up, _Ep>&& __u) noexcept
+16535:  {
+16535:    reset(__u.release());
+16535:    get_deleter() = std::forward<_Ep>(__u.get_deleter());
+16535:    return *this;
+16535:  }
+16535: 
+16535: 
+16535:       unique_ptr&
+16535:       operator=(nullptr_t) noexcept
+16535:       {
+16535:  reset();
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       typename std::add_lvalue_reference<element_type>::type
+16535:       operator[](size_t __i) const
+16535:       {
+16535:  ;
+16535:  return get()[__i];
+16535:       }
+16535: 
+16535: 
+16535:       pointer
+16535:       get() const noexcept
+16535:       { return _M_t._M_ptr(); }
+16535: 
+16535: 
+16535:       deleter_type&
+16535:       get_deleter() noexcept
+16535:       { return _M_t._M_deleter(); }
+16535: 
+16535: 
+16535:       const deleter_type&
+16535:       get_deleter() const noexcept
+16535:       { return _M_t._M_deleter(); }
+16535: 
+16535: 
+16535:       explicit operator bool() const noexcept
+16535:       { return get() == pointer() ? false : true; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       pointer
+16535:       release() noexcept
+16535:       {
+16535:  pointer __p = get();
+16535:  _M_t._M_ptr() = pointer();
+16535:  return __p;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       template <typename _Up,
+16535:                 typename = _Require<
+16535:                   __or_<is_same<_Up, pointer>,
+16535:                         __and_<is_same<pointer, element_type*>,
+16535:                                is_pointer<_Up>,
+16535:                                is_convertible<
+16535:                                  typename remove_pointer<_Up>::type(*)[],
+16535:                                  element_type(*)[]
+16535:                                >
+16535:                         >
+16535:                   >
+16535:                >>
+16535:       void
+16535:       reset(_Up __p) noexcept
+16535:       {
+16535:  pointer __ptr = __p;
+16535:  using std::swap;
+16535:  swap(_M_t._M_ptr(), __ptr);
+16535:  if (__ptr != nullptr)
+16535:    get_deleter()(__ptr);
+16535:       }
+16535: 
+16535:       void reset(nullptr_t = nullptr) noexcept
+16535:       {
+16535:         reset(pointer());
+16535:       }
+16535: 
+16535: 
+16535:       void
+16535:       swap(unique_ptr& __u) noexcept
+16535:       {
+16535:  using std::swap;
+16535:  swap(_M_t, __u._M_t);
+16535:       }
+16535: 
+16535: 
+16535:       unique_ptr(const unique_ptr&) = delete;
+16535:       unique_ptr& operator=(const unique_ptr&) = delete;
+16535:     };
+16535: 
+16535:   template<typename _Tp, typename _Dp>
+16535:     inline
+16535: 
+16535: 
+16535:     typename enable_if<__is_swappable<_Dp>::value>::type
+16535: 
+16535: 
+16535: 
+16535:     swap(unique_ptr<_Tp, _Dp>& __x,
+16535:   unique_ptr<_Tp, _Dp>& __y) noexcept
+16535:     { __x.swap(__y); }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Dp>
+16535:     typename enable_if<!__is_swappable<_Dp>::value>::type
+16535:     swap(unique_ptr<_Tp, _Dp>&,
+16535:   unique_ptr<_Tp, _Dp>&) = delete;
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Dp,
+16535:     typename _Up, typename _Ep>
+16535:     inline bool
+16535:     operator==(const unique_ptr<_Tp, _Dp>& __x,
+16535:         const unique_ptr<_Up, _Ep>& __y)
+16535:     { return __x.get() == __y.get(); }
+16535: 
+16535:   template<typename _Tp, typename _Dp>
+16535:     inline bool
+16535:     operator==(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) noexcept
+16535:     { return !__x; }
+16535: 
+16535:   template<typename _Tp, typename _Dp>
+16535:     inline bool
+16535:     operator==(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) noexcept
+16535:     { return !__x; }
+16535: 
+16535:   template<typename _Tp, typename _Dp,
+16535:     typename _Up, typename _Ep>
+16535:     inline bool
+16535:     operator!=(const unique_ptr<_Tp, _Dp>& __x,
+16535:         const unique_ptr<_Up, _Ep>& __y)
+16535:     { return __x.get() != __y.get(); }
+16535: 
+16535:   template<typename _Tp, typename _Dp>
+16535:     inline bool
+16535:     operator!=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) noexcept
+16535:     { return (bool)__x; }
+16535: 
+16535:   template<typename _Tp, typename _Dp>
+16535:     inline bool
+16535:     operator!=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) noexcept
+16535:     { return (bool)__x; }
+16535: 
+16535:   template<typename _Tp, typename _Dp,
+16535:     typename _Up, typename _Ep>
+16535:     inline bool
+16535:     operator<(const unique_ptr<_Tp, _Dp>& __x,
+16535:        const unique_ptr<_Up, _Ep>& __y)
+16535:     {
+16535:       typedef typename
+16535:  std::common_type<typename unique_ptr<_Tp, _Dp>::pointer,
+16535:                   typename unique_ptr<_Up, _Ep>::pointer>::type _CT;
+16535:       return std::less<_CT>()(__x.get(), __y.get());
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Dp>
+16535:     inline bool
+16535:     operator<(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
+16535:     { return std::less<typename unique_ptr<_Tp, _Dp>::pointer>()(__x.get(),
+16535:          nullptr); }
+16535: 
+16535:   template<typename _Tp, typename _Dp>
+16535:     inline bool
+16535:     operator<(nullptr_t, const unique_ptr<_Tp, _Dp>& __x)
+16535:     { return std::less<typename unique_ptr<_Tp, _Dp>::pointer>()(nullptr,
+16535:          __x.get()); }
+16535: 
+16535:   template<typename _Tp, typename _Dp,
+16535:     typename _Up, typename _Ep>
+16535:     inline bool
+16535:     operator<=(const unique_ptr<_Tp, _Dp>& __x,
+16535:         const unique_ptr<_Up, _Ep>& __y)
+16535:     { return !(__y < __x); }
+16535: 
+16535:   template<typename _Tp, typename _Dp>
+16535:     inline bool
+16535:     operator<=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
+16535:     { return !(nullptr < __x); }
+16535: 
+16535:   template<typename _Tp, typename _Dp>
+16535:     inline bool
+16535:     operator<=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x)
+16535:     { return !(__x < nullptr); }
+16535: 
+16535:   template<typename _Tp, typename _Dp,
+16535:     typename _Up, typename _Ep>
+16535:     inline bool
+16535:     operator>(const unique_ptr<_Tp, _Dp>& __x,
+16535:        const unique_ptr<_Up, _Ep>& __y)
+16535:     { return (__y < __x); }
+16535: 
+16535:   template<typename _Tp, typename _Dp>
+16535:     inline bool
+16535:     operator>(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
+16535:     { return std::less<typename unique_ptr<_Tp, _Dp>::pointer>()(nullptr,
+16535:          __x.get()); }
+16535: 
+16535:   template<typename _Tp, typename _Dp>
+16535:     inline bool
+16535:     operator>(nullptr_t, const unique_ptr<_Tp, _Dp>& __x)
+16535:     { return std::less<typename unique_ptr<_Tp, _Dp>::pointer>()(__x.get(),
+16535:          nullptr); }
+16535: 
+16535:   template<typename _Tp, typename _Dp,
+16535:     typename _Up, typename _Ep>
+16535:     inline bool
+16535:     operator>=(const unique_ptr<_Tp, _Dp>& __x,
+16535:         const unique_ptr<_Up, _Ep>& __y)
+16535:     { return !(__x < __y); }
+16535: 
+16535:   template<typename _Tp, typename _Dp>
+16535:     inline bool
+16535:     operator>=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t)
+16535:     { return !(__x < nullptr); }
+16535: 
+16535:   template<typename _Tp, typename _Dp>
+16535:     inline bool
+16535:     operator>=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x)
+16535:     { return !(nullptr < __x); }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Dp>
+16535:     struct hash<unique_ptr<_Tp, _Dp>>
+16535:     : public __hash_base<size_t, unique_ptr<_Tp, _Dp>>,
+16535:     private __poison_hash<typename unique_ptr<_Tp, _Dp>::pointer>
+16535:     {
+16535:       size_t
+16535:       operator()(const unique_ptr<_Tp, _Dp>& __u) const noexcept
+16535:       {
+16535:  typedef unique_ptr<_Tp, _Dp> _UP;
+16535:  return std::hash<typename _UP::pointer>()(__u.get());
+16535:       }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct _MakeUniq
+16535:     { typedef unique_ptr<_Tp> __single_object; };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct _MakeUniq<_Tp[]>
+16535:     { typedef unique_ptr<_Tp[]> __array; };
+16535: 
+16535:   template<typename _Tp, size_t _Bound>
+16535:     struct _MakeUniq<_Tp[_Bound]>
+16535:     { struct __invalid_type { }; };
+16535: 
+16535: 
+16535:   template<typename _Tp, typename... _Args>
+16535:     inline typename _MakeUniq<_Tp>::__single_object
+16535:     make_unique(_Args&&... __args)
+16535:     { return unique_ptr<_Tp>(new _Tp(std::forward<_Args>(__args)...)); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline typename _MakeUniq<_Tp>::__array
+16535:     make_unique(size_t __num)
+16535:     { return unique_ptr<_Tp>(new remove_extent_t<_Tp>[__num]()); }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename... _Args>
+16535:     inline typename _MakeUniq<_Tp>::__invalid_type
+16535:     make_unique(_Args&&...) = delete;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 42 "/usr/include/c++/8/bits/locale_conv.h" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _OutStr, typename _InChar, typename _Codecvt,
+16535:     typename _State, typename _Fn>
+16535:     bool
+16535:     __do_str_codecvt(const _InChar* __first, const _InChar* __last,
+16535:        _OutStr& __outstr, const _Codecvt& __cvt, _State& __state,
+16535:        size_t& __count, _Fn __fn)
+16535:     {
+16535:       if (__first == __last)
+16535:  {
+16535:    __outstr.clear();
+16535:    __count = 0;
+16535:    return true;
+16535:  }
+16535: 
+16535:       size_t __outchars = 0;
+16535:       auto __next = __first;
+16535:       const auto __maxlen = __cvt.max_length() + 1;
+16535: 
+16535:       codecvt_base::result __result;
+16535:       do
+16535:  {
+16535:    __outstr.resize(__outstr.size() + (__last - __next) * __maxlen);
+16535:    auto __outnext = &__outstr.front() + __outchars;
+16535:    auto const __outlast = &__outstr.back() + 1;
+16535:    __result = (__cvt.*__fn)(__state, __next, __last, __next,
+16535:      __outnext, __outlast, __outnext);
+16535:    __outchars = __outnext - &__outstr.front();
+16535:  }
+16535:       while (__result == codecvt_base::partial && __next != __last
+16535:       && (__outstr.size() - __outchars) < __maxlen);
+16535: 
+16535:       if (__result == codecvt_base::error)
+16535:  {
+16535:    __count = __next - __first;
+16535:    return false;
+16535:  }
+16535: 
+16535:       if (__result == codecvt_base::noconv)
+16535:  {
+16535:    __outstr.assign(__first, __last);
+16535:    __count = __last - __first;
+16535:  }
+16535:       else
+16535:  {
+16535:    __outstr.resize(__outchars);
+16535:    __count = __next - __first;
+16535:  }
+16535: 
+16535:       return true;
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc, typename _State>
+16535:     inline bool
+16535:     __str_codecvt_in(const char* __first, const char* __last,
+16535:        basic_string<_CharT, _Traits, _Alloc>& __outstr,
+16535:        const codecvt<_CharT, char, _State>& __cvt,
+16535:        _State& __state, size_t& __count)
+16535:     {
+16535:       using _Codecvt = codecvt<_CharT, char, _State>;
+16535:       using _ConvFn
+16535:  = codecvt_base::result
+16535:    (_Codecvt::*)(_State&, const char*, const char*, const char*&,
+16535:    _CharT*, _CharT*, _CharT*&) const;
+16535:       _ConvFn __fn = &codecvt<_CharT, char, _State>::in;
+16535:       return __do_str_codecvt(__first, __last, __outstr, __cvt, __state,
+16535:          __count, __fn);
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc, typename _State>
+16535:     inline bool
+16535:     __str_codecvt_in(const char* __first, const char* __last,
+16535:        basic_string<_CharT, _Traits, _Alloc>& __outstr,
+16535:        const codecvt<_CharT, char, _State>& __cvt)
+16535:     {
+16535:       _State __state = {};
+16535:       size_t __n;
+16535:       return __str_codecvt_in(__first, __last, __outstr, __cvt, __state, __n);
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc, typename _State>
+16535:     inline bool
+16535:     __str_codecvt_out(const _CharT* __first, const _CharT* __last,
+16535:         basic_string<char, _Traits, _Alloc>& __outstr,
+16535:         const codecvt<_CharT, char, _State>& __cvt,
+16535:         _State& __state, size_t& __count)
+16535:     {
+16535:       using _Codecvt = codecvt<_CharT, char, _State>;
+16535:       using _ConvFn
+16535:  = codecvt_base::result
+16535:    (_Codecvt::*)(_State&, const _CharT*, const _CharT*, const _CharT*&,
+16535:    char*, char*, char*&) const;
+16535:       _ConvFn __fn = &codecvt<_CharT, char, _State>::out;
+16535:       return __do_str_codecvt(__first, __last, __outstr, __cvt, __state,
+16535:          __count, __fn);
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc, typename _State>
+16535:     inline bool
+16535:     __str_codecvt_out(const _CharT* __first, const _CharT* __last,
+16535:         basic_string<char, _Traits, _Alloc>& __outstr,
+16535:         const codecvt<_CharT, char, _State>& __cvt)
+16535:     {
+16535:       _State __state = {};
+16535:       size_t __n;
+16535:       return __str_codecvt_out(__first, __last, __outstr, __cvt, __state, __n);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: namespace __cxx11 {
+16535: 
+16535: 
+16535:   template<typename _Codecvt, typename _Elem = wchar_t,
+16535:     typename _Wide_alloc = allocator<_Elem>,
+16535:     typename _Byte_alloc = allocator<char>>
+16535:     class wstring_convert
+16535:     {
+16535:     public:
+16535:       typedef basic_string<char, char_traits<char>, _Byte_alloc> byte_string;
+16535:       typedef basic_string<_Elem, char_traits<_Elem>, _Wide_alloc> wide_string;
+16535:       typedef typename _Codecvt::state_type state_type;
+16535:       typedef typename wide_string::traits_type::int_type int_type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       explicit
+16535:       wstring_convert(_Codecvt* __pcvt = new _Codecvt()) : _M_cvt(__pcvt)
+16535:       {
+16535:  if (!_M_cvt)
+16535:    __throw_logic_error("wstring_convert");
+16535:       }
+16535: # 198 "/usr/include/c++/8/bits/locale_conv.h" 3
+16535:       wstring_convert(_Codecvt* __pcvt, state_type __state)
+16535:       : _M_cvt(__pcvt), _M_state(__state), _M_with_cvtstate(true)
+16535:       {
+16535:  if (!_M_cvt)
+16535:    __throw_logic_error("wstring_convert");
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       explicit
+16535:       wstring_convert(const byte_string& __byte_err,
+16535:         const wide_string& __wide_err = wide_string())
+16535:       : _M_cvt(new _Codecvt),
+16535:  _M_byte_err_string(__byte_err), _M_wide_err_string(__wide_err),
+16535:  _M_with_strings(true)
+16535:       {
+16535:  if (!_M_cvt)
+16535:    __throw_logic_error("wstring_convert");
+16535:       }
+16535: 
+16535:       ~wstring_convert() = default;
+16535: 
+16535: 
+16535: 
+16535:       wstring_convert(const wstring_convert&) = delete;
+16535:       wstring_convert& operator=(const wstring_convert&) = delete;
+16535: 
+16535: 
+16535:       wide_string
+16535:       from_bytes(char __byte)
+16535:       {
+16535:  char __bytes[2] = { __byte };
+16535:  return from_bytes(__bytes, __bytes+1);
+16535:       }
+16535: 
+16535:       wide_string
+16535:       from_bytes(const char* __ptr)
+16535:       { return from_bytes(__ptr, __ptr+char_traits<char>::length(__ptr)); }
+16535: 
+16535:       wide_string
+16535:       from_bytes(const byte_string& __str)
+16535:       {
+16535:  auto __ptr = __str.data();
+16535:  return from_bytes(__ptr, __ptr + __str.size());
+16535:       }
+16535: 
+16535:       wide_string
+16535:       from_bytes(const char* __first, const char* __last)
+16535:       {
+16535:  if (!_M_with_cvtstate)
+16535:    _M_state = state_type();
+16535:  wide_string __out{ _M_wide_err_string.get_allocator() };
+16535:  if (__str_codecvt_in(__first, __last, __out, *_M_cvt, _M_state,
+16535:         _M_count))
+16535:    return __out;
+16535:  if (_M_with_strings)
+16535:    return _M_wide_err_string;
+16535:  __throw_range_error("wstring_convert::from_bytes");
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       byte_string
+16535:       to_bytes(_Elem __wchar)
+16535:       {
+16535:  _Elem __wchars[2] = { __wchar };
+16535:  return to_bytes(__wchars, __wchars+1);
+16535:       }
+16535: 
+16535:       byte_string
+16535:       to_bytes(const _Elem* __ptr)
+16535:       {
+16535:  return to_bytes(__ptr, __ptr+wide_string::traits_type::length(__ptr));
+16535:       }
+16535: 
+16535:       byte_string
+16535:       to_bytes(const wide_string& __wstr)
+16535:       {
+16535:  auto __ptr = __wstr.data();
+16535:  return to_bytes(__ptr, __ptr + __wstr.size());
+16535:       }
+16535: 
+16535:       byte_string
+16535:       to_bytes(const _Elem* __first, const _Elem* __last)
+16535:       {
+16535:  if (!_M_with_cvtstate)
+16535:    _M_state = state_type();
+16535:  byte_string __out{ _M_byte_err_string.get_allocator() };
+16535:  if (__str_codecvt_out(__first, __last, __out, *_M_cvt, _M_state,
+16535:          _M_count))
+16535:    return __out;
+16535:  if (_M_with_strings)
+16535:    return _M_byte_err_string;
+16535:  __throw_range_error("wstring_convert::to_bytes");
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       size_t converted() const noexcept { return _M_count; }
+16535: 
+16535: 
+16535:       state_type state() const { return _M_state; }
+16535: 
+16535:     private:
+16535:       unique_ptr<_Codecvt> _M_cvt;
+16535:       byte_string _M_byte_err_string;
+16535:       wide_string _M_wide_err_string;
+16535:       state_type _M_state = state_type();
+16535:       size_t _M_count = 0;
+16535:       bool _M_with_cvtstate = false;
+16535:       bool _M_with_strings = false;
+16535:     };
+16535: 
+16535: }
+16535: 
+16535: 
+16535:   template<typename _Codecvt, typename _Elem = wchar_t,
+16535:     typename _Tr = char_traits<_Elem>>
+16535:     class wbuffer_convert : public basic_streambuf<_Elem, _Tr>
+16535:     {
+16535:       typedef basic_streambuf<_Elem, _Tr> _Wide_streambuf;
+16535: 
+16535:     public:
+16535:       typedef typename _Codecvt::state_type state_type;
+16535: # 336 "/usr/include/c++/8/bits/locale_conv.h" 3
+16535:       explicit
+16535:       wbuffer_convert(streambuf* __bytebuf = 0, _Codecvt* __pcvt = new _Codecvt,
+16535:         state_type __state = state_type())
+16535:       : _M_buf(__bytebuf), _M_cvt(__pcvt), _M_state(__state)
+16535:       {
+16535:  if (!_M_cvt)
+16535:    __throw_logic_error("wbuffer_convert");
+16535: 
+16535:  _M_always_noconv = _M_cvt->always_noconv();
+16535: 
+16535:  if (_M_buf)
+16535:    {
+16535:      this->setp(_M_put_area, _M_put_area + _S_buffer_length);
+16535:      this->setg(_M_get_area + _S_putback_length,
+16535:          _M_get_area + _S_putback_length,
+16535:          _M_get_area + _S_putback_length);
+16535:    }
+16535:       }
+16535: 
+16535:       ~wbuffer_convert() = default;
+16535: 
+16535: 
+16535: 
+16535:       wbuffer_convert(const wbuffer_convert&) = delete;
+16535:       wbuffer_convert& operator=(const wbuffer_convert&) = delete;
+16535: 
+16535:       streambuf* rdbuf() const noexcept { return _M_buf; }
+16535: 
+16535:       streambuf*
+16535:       rdbuf(streambuf *__bytebuf) noexcept
+16535:       {
+16535:  auto __prev = _M_buf;
+16535:  _M_buf = __bytebuf;
+16535:  return __prev;
+16535:       }
+16535: 
+16535: 
+16535:       state_type state() const noexcept { return _M_state; }
+16535: 
+16535:     protected:
+16535:       int
+16535:       sync()
+16535:       { return _M_buf && _M_conv_put() && !_M_buf->pubsync() ? 0 : -1; }
+16535: 
+16535:       typename _Wide_streambuf::int_type
+16535:       overflow(typename _Wide_streambuf::int_type __out)
+16535:       {
+16535:  if (!_M_buf || !_M_conv_put())
+16535:    return _Tr::eof();
+16535:  else if (!_Tr::eq_int_type(__out, _Tr::eof()))
+16535:    return this->sputc(__out);
+16535:  return _Tr::not_eof(__out);
+16535:       }
+16535: 
+16535:       typename _Wide_streambuf::int_type
+16535:       underflow()
+16535:       {
+16535:  if (!_M_buf)
+16535:    return _Tr::eof();
+16535: 
+16535:  if (this->gptr() < this->egptr() || (_M_buf && _M_conv_get()))
+16535:    return _Tr::to_int_type(*this->gptr());
+16535:  else
+16535:    return _Tr::eof();
+16535:       }
+16535: 
+16535:       streamsize
+16535:       xsputn(const typename _Wide_streambuf::char_type* __s, streamsize __n)
+16535:       {
+16535:  if (!_M_buf || __n == 0)
+16535:    return 0;
+16535:  streamsize __done = 0;
+16535:  do
+16535:  {
+16535:    auto __nn = std::min<streamsize>(this->epptr() - this->pptr(),
+16535:         __n - __done);
+16535:    _Tr::copy(this->pptr(), __s + __done, __nn);
+16535:    this->pbump(__nn);
+16535:    __done += __nn;
+16535:  } while (__done < __n && _M_conv_put());
+16535:  return __done;
+16535:       }
+16535: 
+16535:     private:
+16535: 
+16535:       bool
+16535:       _M_conv_get()
+16535:       {
+16535:  const streamsize __pb1 = this->gptr() - this->eback();
+16535:  const streamsize __pb2 = _S_putback_length;
+16535:  const streamsize __npb = std::min(__pb1, __pb2);
+16535: 
+16535:  _Tr::move(_M_get_area + _S_putback_length - __npb,
+16535:     this->gptr() - __npb, __npb);
+16535: 
+16535:  streamsize __nbytes = sizeof(_M_get_buf) - _M_unconv;
+16535:  __nbytes = std::min(__nbytes, _M_buf->in_avail());
+16535:  if (__nbytes < 1)
+16535:    __nbytes = 1;
+16535:  __nbytes = _M_buf->sgetn(_M_get_buf + _M_unconv, __nbytes);
+16535:  if (__nbytes < 1)
+16535:    return false;
+16535:  __nbytes += _M_unconv;
+16535: 
+16535: 
+16535: 
+16535:  _Elem* __outbuf = _M_get_area + _S_putback_length;
+16535:  _Elem* __outnext = __outbuf;
+16535:  const char* __bnext = _M_get_buf;
+16535: 
+16535:  codecvt_base::result __result;
+16535:  if (_M_always_noconv)
+16535:    __result = codecvt_base::noconv;
+16535:  else
+16535:    {
+16535:      _Elem* __outend = _M_get_area + _S_buffer_length;
+16535: 
+16535:      __result = _M_cvt->in(_M_state,
+16535:       __bnext, __bnext + __nbytes, __bnext,
+16535:       __outbuf, __outend, __outnext);
+16535:    }
+16535: 
+16535:  if (__result == codecvt_base::noconv)
+16535:    {
+16535: 
+16535:      auto __get_buf = reinterpret_cast<const _Elem*>(_M_get_buf);
+16535:      _Tr::copy(__outbuf, __get_buf, __nbytes);
+16535:      _M_unconv = 0;
+16535:      return true;
+16535:    }
+16535: 
+16535:  if ((_M_unconv = _M_get_buf + __nbytes - __bnext))
+16535:    char_traits<char>::move(_M_get_buf, __bnext, _M_unconv);
+16535: 
+16535:  this->setg(__outbuf, __outbuf, __outnext);
+16535: 
+16535:  return __result != codecvt_base::error;
+16535:       }
+16535: 
+16535: 
+16535:       bool
+16535:       _M_put(...)
+16535:       { return false; }
+16535: 
+16535:       bool
+16535:       _M_put(const char* __p, streamsize __n)
+16535:       {
+16535:  if (_M_buf->sputn(__p, __n) < __n)
+16535:    return false;
+16535:  return true;
+16535:       }
+16535: 
+16535: 
+16535:       bool
+16535:       _M_conv_put()
+16535:       {
+16535:  _Elem* const __first = this->pbase();
+16535:  const _Elem* const __last = this->pptr();
+16535:  const streamsize __pending = __last - __first;
+16535: 
+16535:  if (_M_always_noconv)
+16535:    return _M_put(__first, __pending);
+16535: 
+16535:  char __outbuf[2 * _S_buffer_length];
+16535: 
+16535:  const _Elem* __next = __first;
+16535:  const _Elem* __start;
+16535:  do
+16535:    {
+16535:      __start = __next;
+16535:      char* __outnext = __outbuf;
+16535:      char* const __outlast = __outbuf + sizeof(__outbuf);
+16535:      auto __result = _M_cvt->out(_M_state, __next, __last, __next,
+16535:      __outnext, __outlast, __outnext);
+16535:      if (__result == codecvt_base::error)
+16535:        return false;
+16535:      else if (__result == codecvt_base::noconv)
+16535:        return _M_put(__next, __pending);
+16535: 
+16535:      if (!_M_put(__outbuf, __outnext - __outbuf))
+16535:        return false;
+16535:    }
+16535:  while (__next != __last && __next != __start);
+16535: 
+16535:  if (__next != __last)
+16535:    _Tr::move(__first, __next, __last - __next);
+16535: 
+16535:  this->pbump(__first - __next);
+16535:  return __next != __first;
+16535:       }
+16535: 
+16535:       streambuf* _M_buf;
+16535:       unique_ptr<_Codecvt> _M_cvt;
+16535:       state_type _M_state;
+16535: 
+16535:       static const streamsize _S_buffer_length = 32;
+16535:       static const streamsize _S_putback_length = 3;
+16535:       _Elem _M_put_area[_S_buffer_length];
+16535:       _Elem _M_get_area[_S_buffer_length];
+16535:       streamsize _M_unconv = 0;
+16535:       char _M_get_buf[_S_buffer_length-_S_putback_length];
+16535:       bool _M_always_noconv;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 44 "/usr/include/c++/8/locale" 2 3
+16535: # 44 "/usr/include/c++/8/iomanip" 2 3
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/quoted_string.h" 1 3
+16535: # 33 "/usr/include/c++/8/bits/quoted_string.h" 3
+16535:        
+16535: # 34 "/usr/include/c++/8/bits/quoted_string.h" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   namespace __detail {
+16535: 
+16535: 
+16535: 
+16535:     template<typename _String, typename _CharT>
+16535:       struct _Quoted_string
+16535:       {
+16535:  static_assert(is_reference<_String>::value
+16535:      || is_pointer<_String>::value,
+16535:         "String type must be pointer or reference");
+16535: 
+16535:  _Quoted_string(_String __str, _CharT __del, _CharT __esc)
+16535:  : _M_string(__str), _M_delim{__del}, _M_escape{__esc}
+16535:  { }
+16535: 
+16535:  _Quoted_string&
+16535:  operator=(_Quoted_string&) = delete;
+16535: 
+16535:  _String _M_string;
+16535:  _CharT _M_delim;
+16535:  _CharT _M_escape;
+16535:       };
+16535: # 91 "/usr/include/c++/8/bits/quoted_string.h" 3
+16535:     template<typename _CharT, typename _Traits>
+16535:       std::basic_ostream<_CharT, _Traits>&
+16535:       operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+16535:    const _Quoted_string<const _CharT*, _CharT>& __str)
+16535:       {
+16535:  std::basic_ostringstream<_CharT, _Traits> __ostr;
+16535:  __ostr << __str._M_delim;
+16535:  for (const _CharT* __c = __str._M_string; *__c; ++__c)
+16535:    {
+16535:      if (*__c == __str._M_delim || *__c == __str._M_escape)
+16535:        __ostr << __str._M_escape;
+16535:      __ostr << *__c;
+16535:    }
+16535:  __ostr << __str._M_delim;
+16535: 
+16535:  return __os << __ostr.str();
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     template<typename _CharT, typename _Traits, typename _String>
+16535:       std::basic_ostream<_CharT, _Traits>&
+16535:       operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+16535:    const _Quoted_string<_String, _CharT>& __str)
+16535:       {
+16535:  std::basic_ostringstream<_CharT, _Traits> __ostr;
+16535:  __ostr << __str._M_delim;
+16535:  for (auto __c : __str._M_string)
+16535:    {
+16535:      if (__c == __str._M_delim || __c == __str._M_escape)
+16535:        __ostr << __str._M_escape;
+16535:      __ostr << __c;
+16535:    }
+16535:  __ostr << __str._M_delim;
+16535: 
+16535:  return __os << __ostr.str();
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     template<typename _CharT, typename _Traits, typename _Alloc>
+16535:       std::basic_istream<_CharT, _Traits>&
+16535:       operator>>(std::basic_istream<_CharT, _Traits>& __is,
+16535:    const _Quoted_string<basic_string<_CharT, _Traits, _Alloc>&,
+16535:           _CharT>& __str)
+16535:       {
+16535:  _CharT __c;
+16535:  __is >> __c;
+16535:  if (!__is.good())
+16535:    return __is;
+16535:  if (__c != __str._M_delim)
+16535:    {
+16535:      __is.unget();
+16535:      __is >> __str._M_string;
+16535:      return __is;
+16535:    }
+16535:  __str._M_string.clear();
+16535:  std::ios_base::fmtflags __flags
+16535:    = __is.flags(__is.flags() & ~std::ios_base::skipws);
+16535:  do
+16535:    {
+16535:      __is >> __c;
+16535:      if (!__is.good())
+16535:        break;
+16535:      if (__c == __str._M_escape)
+16535:        {
+16535:   __is >> __c;
+16535:   if (!__is.good())
+16535:     break;
+16535:        }
+16535:      else if (__c == __str._M_delim)
+16535:        break;
+16535:      __str._M_string += __c;
+16535:    }
+16535:  while (true);
+16535:  __is.setf(__flags);
+16535: 
+16535:  return __is;
+16535:       }
+16535:   }
+16535: 
+16535: 
+16535: }
+16535: # 46 "/usr/include/c++/8/iomanip" 2 3
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   struct _Resetiosflags { ios_base::fmtflags _M_mask; };
+16535: # 65 "/usr/include/c++/8/iomanip" 3
+16535:   inline _Resetiosflags
+16535:   resetiosflags(ios_base::fmtflags __mask)
+16535:   { return { __mask }; }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     inline basic_istream<_CharT, _Traits>&
+16535:     operator>>(basic_istream<_CharT, _Traits>& __is, _Resetiosflags __f)
+16535:     {
+16535:       __is.setf(ios_base::fmtflags(0), __f._M_mask);
+16535:       return __is;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     inline basic_ostream<_CharT, _Traits>&
+16535:     operator<<(basic_ostream<_CharT, _Traits>& __os, _Resetiosflags __f)
+16535:     {
+16535:       __os.setf(ios_base::fmtflags(0), __f._M_mask);
+16535:       return __os;
+16535:     }
+16535: 
+16535: 
+16535:   struct _Setiosflags { ios_base::fmtflags _M_mask; };
+16535: # 95 "/usr/include/c++/8/iomanip" 3
+16535:   inline _Setiosflags
+16535:   setiosflags(ios_base::fmtflags __mask)
+16535:   { return { __mask }; }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     inline basic_istream<_CharT, _Traits>&
+16535:     operator>>(basic_istream<_CharT, _Traits>& __is, _Setiosflags __f)
+16535:     {
+16535:       __is.setf(__f._M_mask);
+16535:       return __is;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     inline basic_ostream<_CharT, _Traits>&
+16535:     operator<<(basic_ostream<_CharT, _Traits>& __os, _Setiosflags __f)
+16535:     {
+16535:       __os.setf(__f._M_mask);
+16535:       return __os;
+16535:     }
+16535: 
+16535: 
+16535:   struct _Setbase { int _M_base; };
+16535: # 126 "/usr/include/c++/8/iomanip" 3
+16535:   inline _Setbase
+16535:   setbase(int __base)
+16535:   { return { __base }; }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     inline basic_istream<_CharT, _Traits>&
+16535:     operator>>(basic_istream<_CharT, _Traits>& __is, _Setbase __f)
+16535:     {
+16535:       __is.setf(__f._M_base == 8 ? ios_base::oct :
+16535:   __f._M_base == 10 ? ios_base::dec :
+16535:   __f._M_base == 16 ? ios_base::hex :
+16535:   ios_base::fmtflags(0), ios_base::basefield);
+16535:       return __is;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     inline basic_ostream<_CharT, _Traits>&
+16535:     operator<<(basic_ostream<_CharT, _Traits>& __os, _Setbase __f)
+16535:     {
+16535:       __os.setf(__f._M_base == 8 ? ios_base::oct :
+16535:   __f._M_base == 10 ? ios_base::dec :
+16535:   __f._M_base == 16 ? ios_base::hex :
+16535:   ios_base::fmtflags(0), ios_base::basefield);
+16535:       return __os;
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _CharT>
+16535:     struct _Setfill { _CharT _M_c; };
+16535: # 163 "/usr/include/c++/8/iomanip" 3
+16535:   template<typename _CharT>
+16535:     inline _Setfill<_CharT>
+16535:     setfill(_CharT __c)
+16535:     { return { __c }; }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     inline basic_istream<_CharT, _Traits>&
+16535:     operator>>(basic_istream<_CharT, _Traits>& __is, _Setfill<_CharT> __f)
+16535:     {
+16535:       __is.fill(__f._M_c);
+16535:       return __is;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     inline basic_ostream<_CharT, _Traits>&
+16535:     operator<<(basic_ostream<_CharT, _Traits>& __os, _Setfill<_CharT> __f)
+16535:     {
+16535:       __os.fill(__f._M_c);
+16535:       return __os;
+16535:     }
+16535: 
+16535: 
+16535:   struct _Setprecision { int _M_n; };
+16535: # 194 "/usr/include/c++/8/iomanip" 3
+16535:   inline _Setprecision
+16535:   setprecision(int __n)
+16535:   { return { __n }; }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     inline basic_istream<_CharT, _Traits>&
+16535:     operator>>(basic_istream<_CharT, _Traits>& __is, _Setprecision __f)
+16535:     {
+16535:       __is.precision(__f._M_n);
+16535:       return __is;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     inline basic_ostream<_CharT, _Traits>&
+16535:     operator<<(basic_ostream<_CharT, _Traits>& __os, _Setprecision __f)
+16535:     {
+16535:       __os.precision(__f._M_n);
+16535:       return __os;
+16535:     }
+16535: 
+16535: 
+16535:   struct _Setw { int _M_n; };
+16535: # 224 "/usr/include/c++/8/iomanip" 3
+16535:   inline _Setw
+16535:   setw(int __n)
+16535:   { return { __n }; }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     inline basic_istream<_CharT, _Traits>&
+16535:     operator>>(basic_istream<_CharT, _Traits>& __is, _Setw __f)
+16535:     {
+16535:       __is.width(__f._M_n);
+16535:       return __is;
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     inline basic_ostream<_CharT, _Traits>&
+16535:     operator<<(basic_ostream<_CharT, _Traits>& __os, _Setw __f)
+16535:     {
+16535:       __os.width(__f._M_n);
+16535:       return __os;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _MoneyT>
+16535:     struct _Get_money { _MoneyT& _M_mon; bool _M_intl; };
+16535: # 257 "/usr/include/c++/8/iomanip" 3
+16535:   template<typename _MoneyT>
+16535:     inline _Get_money<_MoneyT>
+16535:     get_money(_MoneyT& __mon, bool __intl = false)
+16535:     { return { __mon, __intl }; }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _MoneyT>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     operator>>(basic_istream<_CharT, _Traits>& __is, _Get_money<_MoneyT> __f)
+16535:     {
+16535:       typename basic_istream<_CharT, _Traits>::sentry __cerb(__is, false);
+16535:       if (__cerb)
+16535:  {
+16535:    ios_base::iostate __err = ios_base::goodbit;
+16535:    try
+16535:      {
+16535:        typedef istreambuf_iterator<_CharT, _Traits> _Iter;
+16535:        typedef money_get<_CharT, _Iter> _MoneyGet;
+16535: 
+16535:        const _MoneyGet& __mg = use_facet<_MoneyGet>(__is.getloc());
+16535:        __mg.get(_Iter(__is.rdbuf()), _Iter(), __f._M_intl,
+16535:          __is, __err, __f._M_mon);
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        __is._M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { __is._M_setstate(ios_base::badbit); }
+16535:    if (__err)
+16535:      __is.setstate(__err);
+16535:  }
+16535:       return __is;
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _MoneyT>
+16535:     struct _Put_money { const _MoneyT& _M_mon; bool _M_intl; };
+16535: # 304 "/usr/include/c++/8/iomanip" 3
+16535:   template<typename _MoneyT>
+16535:     inline _Put_money<_MoneyT>
+16535:     put_money(const _MoneyT& __mon, bool __intl = false)
+16535:     { return { __mon, __intl }; }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _MoneyT>
+16535:     basic_ostream<_CharT, _Traits>&
+16535:     operator<<(basic_ostream<_CharT, _Traits>& __os, _Put_money<_MoneyT> __f)
+16535:     {
+16535:       typename basic_ostream<_CharT, _Traits>::sentry __cerb(__os);
+16535:       if (__cerb)
+16535:  {
+16535:    ios_base::iostate __err = ios_base::goodbit;
+16535:    try
+16535:      {
+16535:        typedef ostreambuf_iterator<_CharT, _Traits> _Iter;
+16535:        typedef money_put<_CharT, _Iter> _MoneyPut;
+16535: 
+16535:        const _MoneyPut& __mp = use_facet<_MoneyPut>(__os.getloc());
+16535:        if (__mp.put(_Iter(__os.rdbuf()), __f._M_intl, __os,
+16535:       __os.fill(), __f._M_mon).failed())
+16535:   __err |= ios_base::badbit;
+16535:      }
+16535:    catch(__cxxabiv1::__forced_unwind&)
+16535:      {
+16535:        __os._M_setstate(ios_base::badbit);
+16535:        throw;
+16535:      }
+16535:    catch(...)
+16535:      { __os._M_setstate(ios_base::badbit); }
+16535:    if (__err)
+16535:      __os.setstate(__err);
+16535:  }
+16535:       return __os;
+16535:     }
+16535: 
+16535:   template<typename _CharT>
+16535:     struct _Put_time
+16535:     {
+16535:       const std::tm* _M_tmb;
+16535:       const _CharT* _M_fmt;
+16535:     };
+16535: # 356 "/usr/include/c++/8/iomanip" 3
+16535:   template<typename _CharT>
+16535:     inline _Put_time<_CharT>
+16535:     put_time(const std::tm* __tmb, const _CharT* __fmt)
+16535:     { return { __tmb, __fmt }; }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_ostream<_CharT, _Traits>&
+16535:     operator<<(basic_ostream<_CharT, _Traits>& __os, _Put_time<_CharT> __f)
+16535:     {
+16535:       typename basic_ostream<_CharT, _Traits>::sentry __cerb(__os);
+16535:       if (__cerb)
+16535:         {
+16535:           ios_base::iostate __err = ios_base::goodbit;
+16535:           try
+16535:             {
+16535:               typedef ostreambuf_iterator<_CharT, _Traits> _Iter;
+16535:               typedef time_put<_CharT, _Iter> _TimePut;
+16535: 
+16535:               const _CharT* const __fmt_end = __f._M_fmt +
+16535:                 _Traits::length(__f._M_fmt);
+16535: 
+16535:               const _TimePut& __mp = use_facet<_TimePut>(__os.getloc());
+16535:               if (__mp.put(_Iter(__os.rdbuf()), __os, __os.fill(),
+16535:                            __f._M_tmb, __f._M_fmt, __fmt_end).failed())
+16535:                 __err |= ios_base::badbit;
+16535:             }
+16535:           catch(__cxxabiv1::__forced_unwind&)
+16535:             {
+16535:               __os._M_setstate(ios_base::badbit);
+16535:               throw;
+16535:             }
+16535:           catch(...)
+16535:             { __os._M_setstate(ios_base::badbit); }
+16535:           if (__err)
+16535:             __os.setstate(__err);
+16535:         }
+16535:       return __os;
+16535:     }
+16535: 
+16535:   template<typename _CharT>
+16535:     struct _Get_time
+16535:     {
+16535:       std::tm* _M_tmb;
+16535:       const _CharT* _M_fmt;
+16535:     };
+16535: # 411 "/usr/include/c++/8/iomanip" 3
+16535:   template<typename _CharT>
+16535:     inline _Get_time<_CharT>
+16535:     get_time(std::tm* __tmb, const _CharT* __fmt)
+16535:     { return { __tmb, __fmt }; }
+16535: 
+16535:   template<typename _CharT, typename _Traits>
+16535:     basic_istream<_CharT, _Traits>&
+16535:     operator>>(basic_istream<_CharT, _Traits>& __is, _Get_time<_CharT> __f)
+16535:     {
+16535:       typename basic_istream<_CharT, _Traits>::sentry __cerb(__is, false);
+16535:       if (__cerb)
+16535:         {
+16535:           ios_base::iostate __err = ios_base::goodbit;
+16535:           try
+16535:             {
+16535:               typedef istreambuf_iterator<_CharT, _Traits> _Iter;
+16535:               typedef time_get<_CharT, _Iter> _TimeGet;
+16535: 
+16535:               const _CharT* const __fmt_end = __f._M_fmt +
+16535:                 _Traits::length(__f._M_fmt);
+16535: 
+16535:               const _TimeGet& __mg = use_facet<_TimeGet>(__is.getloc());
+16535:               __mg.get(_Iter(__is.rdbuf()), _Iter(), __is,
+16535:                        __err, __f._M_tmb, __f._M_fmt, __fmt_end);
+16535:             }
+16535:           catch(__cxxabiv1::__forced_unwind&)
+16535:             {
+16535:               __is._M_setstate(ios_base::badbit);
+16535:               throw;
+16535:             }
+16535:           catch(...)
+16535:             { __is._M_setstate(ios_base::badbit); }
+16535:           if (__err)
+16535:             __is.setstate(__err);
+16535:         }
+16535:       return __is;
+16535:     }
+16535: # 459 "/usr/include/c++/8/iomanip" 3
+16535:   template<typename _CharT>
+16535:     inline auto
+16535:     quoted(const _CharT* __string,
+16535:     _CharT __delim = _CharT('"'), _CharT __escape = _CharT('\\'))
+16535:     {
+16535:       return __detail::_Quoted_string<const _CharT*, _CharT>(__string, __delim,
+16535:             __escape);
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline auto
+16535:     quoted(const basic_string<_CharT, _Traits, _Alloc>& __string,
+16535:     _CharT __delim = _CharT('"'), _CharT __escape = _CharT('\\'))
+16535:     {
+16535:       return __detail::_Quoted_string<
+16535:  const basic_string<_CharT, _Traits, _Alloc>&, _CharT>(
+16535:      __string, __delim, __escape);
+16535:     }
+16535: 
+16535:   template<typename _CharT, typename _Traits, typename _Alloc>
+16535:     inline auto
+16535:     quoted(basic_string<_CharT, _Traits, _Alloc>& __string,
+16535:     _CharT __delim = _CharT('"'), _CharT __escape = _CharT('\\'))
+16535:     {
+16535:       return __detail::_Quoted_string<
+16535:  basic_string<_CharT, _Traits, _Alloc>&, _CharT>(
+16535:      __string, __delim, __escape);
+16535:     }
+16535: # 508 "/usr/include/c++/8/iomanip" 3
+16535:   extern template ostream& operator<<(ostream&, _Setfill<char>);
+16535:   extern template ostream& operator<<(ostream&, _Setiosflags);
+16535:   extern template ostream& operator<<(ostream&, _Resetiosflags);
+16535:   extern template ostream& operator<<(ostream&, _Setbase);
+16535:   extern template ostream& operator<<(ostream&, _Setprecision);
+16535:   extern template ostream& operator<<(ostream&, _Setw);
+16535:   extern template istream& operator>>(istream&, _Setfill<char>);
+16535:   extern template istream& operator>>(istream&, _Setiosflags);
+16535:   extern template istream& operator>>(istream&, _Resetiosflags);
+16535:   extern template istream& operator>>(istream&, _Setbase);
+16535:   extern template istream& operator>>(istream&, _Setprecision);
+16535:   extern template istream& operator>>(istream&, _Setw);
+16535: 
+16535: 
+16535:   extern template wostream& operator<<(wostream&, _Setfill<wchar_t>);
+16535:   extern template wostream& operator<<(wostream&, _Setiosflags);
+16535:   extern template wostream& operator<<(wostream&, _Resetiosflags);
+16535:   extern template wostream& operator<<(wostream&, _Setbase);
+16535:   extern template wostream& operator<<(wostream&, _Setprecision);
+16535:   extern template wostream& operator<<(wostream&, _Setw);
+16535:   extern template wistream& operator>>(wistream&, _Setfill<wchar_t>);
+16535:   extern template wistream& operator>>(wistream&, _Setiosflags);
+16535:   extern template wistream& operator>>(wistream&, _Resetiosflags);
+16535:   extern template wistream& operator>>(wistream&, _Setbase);
+16535:   extern template wistream& operator>>(wistream&, _Setprecision);
+16535:   extern template wistream& operator>>(wistream&, _Setw);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 29 "../../src/Checked_Number_templates.hh" 2
+16535: 
+16535: 
+16535: 
+16535: # 31 "../../src/Checked_Number_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: typename Enable_If<Is_Native_Or_Checked<T>::value, void>::type
+16535: ascii_dump(std::ostream& s, const T& t) {
+16535:   if (std::numeric_limits<T>::is_exact) {
+16535: 
+16535:     s << t;
+16535:   }
+16535:   else {
+16535: 
+16535: 
+16535:     const std::ios::fmtflags old_flags = s.setf(std::ios::hex,
+16535:                                                 std::ios::basefield);
+16535:     const unsigned char* p = reinterpret_cast<const unsigned char*>(&t);
+16535:     for (unsigned i = 0; i < sizeof(T); ++i) {
+16535:       s << std::setw(2) << std::setfill('0') << static_cast<unsigned>(p[i]);
+16535:     }
+16535:     s.flags(old_flags);
+16535: 
+16535:     s << " (" << t << ")";
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
+16535: ascii_load(std::istream& s, T& t) {
+16535:   if (std::numeric_limits<T>::is_exact) {
+16535: 
+16535:     s >> t;
+16535:     return !s.fail();
+16535:   }
+16535:   else {
+16535: 
+16535: 
+16535:     std::string str;
+16535:     if (!(s >> str) || str.size() != 2*sizeof(T)) {
+16535:       return false;
+16535:     }
+16535:     unsigned char* p = reinterpret_cast<unsigned char*>(&t);
+16535: 
+16535:     for (unsigned i = 0; i < sizeof(T); ++i) {
+16535:       unsigned byte_value = 0;
+16535:       for (unsigned j = 0; j < 2; ++j) {
+16535:         byte_value <<= 4;
+16535:         unsigned half_byte_value;
+16535: 
+16535:         switch (str[2*i + j]) {
+16535:         case '0':
+16535:           half_byte_value = 0;
+16535:           break;
+16535:         case '1':
+16535:           half_byte_value = 1;
+16535:           break;
+16535:         case '2':
+16535:           half_byte_value = 2;
+16535:           break;
+16535:         case '3':
+16535:           half_byte_value = 3;
+16535:           break;
+16535:         case '4':
+16535:           half_byte_value = 4;
+16535:           break;
+16535:         case '5':
+16535:           half_byte_value = 5;
+16535:           break;
+16535:         case '6':
+16535:           half_byte_value = 6;
+16535:           break;
+16535:         case '7':
+16535:           half_byte_value = 7;
+16535:           break;
+16535:         case '8':
+16535:           half_byte_value = 8;
+16535:           break;
+16535:         case '9':
+16535:           half_byte_value = 9;
+16535:           break;
+16535:         case 'A':
+16535:         case 'a':
+16535:           half_byte_value = 10;
+16535:           break;
+16535:         case 'B':
+16535:         case 'b':
+16535:           half_byte_value = 11;
+16535:           break;
+16535:         case 'C':
+16535:         case 'c':
+16535:           half_byte_value = 12;
+16535:           break;
+16535:         case 'D':
+16535:         case 'd':
+16535:           half_byte_value = 13;
+16535:           break;
+16535:         case 'E':
+16535:         case 'e':
+16535:           half_byte_value = 14;
+16535:           break;
+16535:         case 'F':
+16535:         case 'f':
+16535:           half_byte_value = 15;
+16535:           break;
+16535:         default:
+16535:           return false;
+16535:         }
+16535:         byte_value += half_byte_value;
+16535:       }
+16535:       ((void) 0);
+16535:       p[i] = static_cast<unsigned char>(byte_value);
+16535:     }
+16535: 
+16535:     if (!(s >> str)) {
+16535:       return false;
+16535:     }
+16535:     const std::string::size_type sz = str.size();
+16535:     return sz > 2 && str[0] == '(' && str[sz-1] == ')';
+16535:   }
+16535: }
+16535: 
+16535: }
+16535: # 1069 "../../src/Checked_Number_defs.hh" 2
+16535: # 28 "../../src/checked_numeric_limits.hh" 2
+16535: 
+16535: 
+16535: 
+16535: namespace std {
+16535: 
+16535: using namespace Parma_Polyhedra_Library;
+16535: # 74 "../../src/checked_numeric_limits.hh"
+16535: template <typename Policy> class numeric_limits<Checked_Number<char, Policy> > : public numeric_limits<char> { private: typedef Checked_Number<char, Policy> Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int<Policy, char>::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int<Policy, char>::max; return v; } static Type infinity() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } };
+16535: 
+16535: template <typename Policy> class numeric_limits<Checked_Number<signed char, Policy> > : public numeric_limits<signed char> { private: typedef Checked_Number<signed char, Policy> Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int<Policy, signed char>::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int<Policy, signed char>::max; return v; } static Type infinity() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } };
+16535: template <typename Policy> class numeric_limits<Checked_Number<signed short, Policy> > : public numeric_limits<signed short> { private: typedef Checked_Number<signed short, Policy> Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int<Policy, signed short>::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int<Policy, signed short>::max; return v; } static Type infinity() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } };
+16535: template <typename Policy> class numeric_limits<Checked_Number<signed int, Policy> > : public numeric_limits<signed int> { private: typedef Checked_Number<signed int, Policy> Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int<Policy, signed int>::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int<Policy, signed int>::max; return v; } static Type infinity() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } };
+16535: template <typename Policy> class numeric_limits<Checked_Number<signed long, Policy> > : public numeric_limits<signed long> { private: typedef Checked_Number<signed long, Policy> Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int<Policy, signed long>::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int<Policy, signed long>::max; return v; } static Type infinity() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } };
+16535: template <typename Policy> class numeric_limits<Checked_Number<signed long long, Policy> > : public numeric_limits<signed long long> { private: typedef Checked_Number<signed long long, Policy> Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int<Policy, signed long long>::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int<Policy, signed long long>::max; return v; } static Type infinity() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } };
+16535: 
+16535: template <typename Policy> class numeric_limits<Checked_Number<unsigned char, Policy> > : public numeric_limits<unsigned char> { private: typedef Checked_Number<unsigned char, Policy> Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int<Policy, unsigned char>::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int<Policy, unsigned char>::max; return v; } static Type infinity() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } };
+16535: template <typename Policy> class numeric_limits<Checked_Number<unsigned short, Policy> > : public numeric_limits<unsigned short> { private: typedef Checked_Number<unsigned short, Policy> Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int<Policy, unsigned short>::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int<Policy, unsigned short>::max; return v; } static Type infinity() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } };
+16535: template <typename Policy> class numeric_limits<Checked_Number<unsigned int, Policy> > : public numeric_limits<unsigned int> { private: typedef Checked_Number<unsigned int, Policy> Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int<Policy, unsigned int>::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int<Policy, unsigned int>::max; return v; } static Type infinity() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } };
+16535: template <typename Policy> class numeric_limits<Checked_Number<unsigned long, Policy> > : public numeric_limits<unsigned long> { private: typedef Checked_Number<unsigned long, Policy> Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int<Policy, unsigned long>::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int<Policy, unsigned long>::max; return v; } static Type infinity() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } };
+16535: template <typename Policy> class numeric_limits<Checked_Number<unsigned long long, Policy> > : public numeric_limits<unsigned long long> { private: typedef Checked_Number<unsigned long long, Policy> Type; public: static const bool has_infinity = Policy::has_infinity; static const bool has_quiet_NaN = Policy::has_nan; static Type min() { Type v; v.raw_value() = Checked::Extended_Int<Policy, unsigned long long>::min; return v; } static Type max() { Type v; v.raw_value() = Checked::Extended_Int<Policy, unsigned long long>::max; return v; } static Type infinity() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY, ROUND_IGNORE); return v; } static Type quiet_NaN() { Type v; Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE); return v; } };
+16535: # 98 "../../src/checked_numeric_limits.hh"
+16535: template <typename Policy> struct numeric_limits<Checked_Number<float, Policy> > : public numeric_limits<float> { };
+16535: 
+16535: 
+16535: template <typename Policy> struct numeric_limits<Checked_Number<double, Policy> > : public numeric_limits<double> { };
+16535: 
+16535: 
+16535: template <typename Policy> struct numeric_limits<Checked_Number<long double, Policy> > : public numeric_limits<long double> { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy>
+16535: class
+16535: numeric_limits<Checked_Number<mpz_class, Policy> >
+16535:   : public numeric_limits<mpz_class> {
+16535: private:
+16535:   typedef Checked_Number<mpz_class, Policy> Type;
+16535: 
+16535: public:
+16535:   static const bool has_infinity = Policy::has_infinity;
+16535:   static const bool has_quiet_NaN = Policy::has_nan;
+16535: 
+16535:   static Type infinity() {
+16535:     Type v;
+16535:     Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY,
+16535:                                     ROUND_IGNORE);
+16535:     return v;
+16535:   }
+16535: 
+16535:   static Type quiet_NaN() {
+16535:     Type v;
+16535:     Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE);
+16535:     return v;
+16535:   }
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy>
+16535: class
+16535: numeric_limits<Checked_Number<mpq_class, Policy> >
+16535: : public numeric_limits<mpq_class> {
+16535: private:
+16535:   typedef Checked_Number<mpq_class, Policy> Type;
+16535: 
+16535: public:
+16535:   static const bool has_infinity = Policy::has_infinity;
+16535:   static const bool has_quiet_NaN = Policy::has_nan;
+16535: 
+16535:   static Type infinity() {
+16535:     Type v;
+16535:     Checked::assign_special<Policy>(v.raw_value(), VC_PLUS_INFINITY,
+16535:                                     ROUND_IGNORE);
+16535:     return v;
+16535:   }
+16535: 
+16535:   static Type quiet_NaN() {
+16535:     Type v;
+16535:     Checked::assign_special<Policy>(v.raw_value(), VC_NAN, ROUND_IGNORE);
+16535:     return v;
+16535:   }
+16535: };
+16535: 
+16535: }
+16535: # 4 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/stdiobuf_defs.hh" 1
+16535: # 27 "../../src/stdiobuf_defs.hh"
+16535: # 1 "../../src/stdiobuf_types.hh" 1
+16535: # 16 "../../src/stdiobuf_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class stdiobuf;
+16535: 
+16535: }
+16535: # 28 "../../src/stdiobuf_defs.hh" 2
+16535: # 1 "/usr/include/c++/8/cstdio" 1 3
+16535: # 39 "/usr/include/c++/8/cstdio" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/cstdio" 3
+16535: # 29 "../../src/stdiobuf_defs.hh" 2
+16535: 
+16535: 
+16535: class Parma_Polyhedra_Library::stdiobuf
+16535:   : public std::basic_streambuf<char, std::char_traits<char> > {
+16535: public:
+16535: 
+16535:   stdiobuf(FILE* file);
+16535: 
+16535: protected:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual int_type underflow();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual int_type uflow();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual std::streamsize xsgetn(char_type* s, std::streamsize n);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual int_type pbackfail(int_type c = traits_type::eof());
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual std::streamsize xsputn(const char_type* s, std::streamsize n);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual int_type overflow(int_type c);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual int sync();
+16535: 
+16535: private:
+16535: 
+16535:   typedef char char_type;
+16535: 
+16535: 
+16535:   typedef std::char_traits<char_type> traits_type;
+16535: 
+16535: 
+16535:   typedef traits_type::int_type int_type;
+16535: 
+16535: 
+16535:   FILE* fp;
+16535: 
+16535: 
+16535:   int_type unget_char_buf;
+16535: };
+16535: 
+16535: # 1 "../../src/stdiobuf_inlines.hh" 1
+16535: # 27 "../../src/stdiobuf_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline
+16535: stdiobuf::stdiobuf(FILE* file)
+16535:   : fp(file), unget_char_buf(traits_type::eof()) {
+16535: }
+16535: 
+16535: }
+16535: # 110 "../../src/stdiobuf_defs.hh" 2
+16535: # 5 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/c_streambuf_defs.hh" 1
+16535: # 27 "../../src/c_streambuf_defs.hh"
+16535: # 1 "../../src/c_streambuf_types.hh" 1
+16535: # 16 "../../src/c_streambuf_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class c_streambuf;
+16535: 
+16535: }
+16535: # 28 "../../src/c_streambuf_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: class Parma_Polyhedra_Library::c_streambuf
+16535:   : public std::basic_streambuf<char, std::char_traits<char> > {
+16535: public:
+16535: 
+16535:   c_streambuf();
+16535: 
+16535: 
+16535:   virtual ~c_streambuf();
+16535: 
+16535: protected:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual int_type underflow();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual int_type uflow();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual std::streamsize xsgetn(char_type* s, std::streamsize n);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual int_type pbackfail(int_type c = traits_type::eof());
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual std::streamsize xsputn(const char_type* s, std::streamsize n);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual int_type overflow(int_type c);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual int sync();
+16535: 
+16535: private:
+16535: 
+16535:   typedef char char_type;
+16535: 
+16535: 
+16535:   typedef std::char_traits<char_type> traits_type;
+16535: 
+16535: 
+16535:   typedef traits_type::int_type int_type;
+16535: 
+16535: 
+16535:   int_type unget_char_buf;
+16535: 
+16535: 
+16535:   int_type next_char_buf;
+16535: 
+16535:   virtual size_t cb_read(char *, size_t) {
+16535:     return 0;
+16535:   }
+16535:   virtual size_t cb_write(const char *, size_t) {
+16535:     return 0;
+16535:   }
+16535:   virtual int cb_sync() {
+16535:     return 0;
+16535:   }
+16535:   virtual int cb_flush() {
+16535:     return 0;
+16535:   }
+16535: };
+16535: 
+16535: # 1 "../../src/c_streambuf_inlines.hh" 1
+16535: # 27 "../../src/c_streambuf_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline
+16535: c_streambuf::c_streambuf()
+16535:   : unget_char_buf(traits_type::eof()), next_char_buf(traits_type::eof()) {
+16535: }
+16535: 
+16535: }
+16535: # 126 "../../src/c_streambuf_defs.hh" 2
+16535: # 6 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/Integer_Interval.hh" 1
+16535: # 27 "../../src/Integer_Interval.hh"
+16535: # 1 "../../src/Interval_defs.hh" 1
+16535: # 27 "../../src/Interval_defs.hh"
+16535: # 1 "../../src/Interval_types.hh" 1
+16535: # 16 "../../src/Interval_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Boundary, typename Info>
+16535: class Interval;
+16535: 
+16535: }
+16535: # 28 "../../src/Interval_defs.hh" 2
+16535: 
+16535: 
+16535: # 1 "../../src/assign_or_swap.hh" 1
+16535: # 28 "../../src/assign_or_swap.hh"
+16535: # 1 "../../src/Has_Assign_Or_Swap.hh" 1
+16535: # 29 "../../src/Has_Assign_Or_Swap.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Enable = void>
+16535: struct Has_Assign_Or_Swap : public False {
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: struct Has_Assign_Or_Swap<T,
+16535:                           typename Enable_If_Is<void (T::*)(T& x),
+16535:                                                 &T::assign_or_swap>::type>
+16535:   : public True {
+16535: };
+16535: 
+16535: }
+16535: # 29 "../../src/assign_or_swap.hh" 2
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: inline typename Enable_If<Has_Assign_Or_Swap<T>::value, void>::type
+16535: assign_or_swap(T& to, T& from) {
+16535:   to.assign_or_swap(from);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: inline typename Enable_If<!Has_Assign_Or_Swap<T>::value
+16535:                           && !Slow_Copy<T>::value, void>::type
+16535: assign_or_swap(T& to, T& from) {
+16535:   to = from;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: inline typename Enable_If<!Has_Assign_Or_Swap<T>::value
+16535:                           && Slow_Copy<T>::value, void>::type
+16535: assign_or_swap(T& to, T& from) {
+16535:   using std::swap;
+16535:   swap(to, from);
+16535: }
+16535: 
+16535: }
+16535: # 31 "../../src/Interval_defs.hh" 2
+16535: # 1 "../../src/intervals_defs.hh" 1
+16535: # 29 "../../src/intervals_defs.hh"
+16535: # 1 "/usr/include/c++/8/cstdlib" 1 3
+16535: # 39 "/usr/include/c++/8/cstdlib" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/cstdlib" 3
+16535: # 30 "../../src/intervals_defs.hh" 2
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: enum I_Result {
+16535: 
+16535: 
+16535: 
+16535:   I_EMPTY = 1U,
+16535: 
+16535: 
+16535: 
+16535:   I_SINGLETON = 2U,
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   I_SOME = 4U,
+16535: 
+16535: 
+16535: 
+16535:   I_UNIVERSE = 8U,
+16535: 
+16535: 
+16535: 
+16535:   I_NOT_EMPTY = I_SINGLETON | I_SOME | I_UNIVERSE,
+16535: 
+16535: 
+16535: 
+16535:   I_ANY = I_EMPTY | I_NOT_EMPTY,
+16535: 
+16535: 
+16535: 
+16535:   I_NOT_UNIVERSE = I_EMPTY | I_SINGLETON | I_SOME,
+16535: 
+16535: 
+16535: 
+16535:   I_NOT_DEGENERATE = I_SINGLETON | I_SOME,
+16535: 
+16535: 
+16535: 
+16535:   I_EXACT = 16,
+16535: 
+16535: 
+16535: 
+16535:   I_INEXACT = 32,
+16535: 
+16535: 
+16535: 
+16535:   I_CHANGED = 64,
+16535: 
+16535: 
+16535: 
+16535:   I_UNCHANGED = 128,
+16535: 
+16535: 
+16535: 
+16535:   I_SINGULARITIES = 256
+16535: };
+16535: 
+16535: inline I_Result
+16535: operator|(I_Result a, I_Result b) {
+16535:   return static_cast<I_Result>(static_cast<unsigned>(a)
+16535:                                | static_cast<unsigned>(b));
+16535: }
+16535: 
+16535: inline I_Result
+16535: operator&(I_Result a, I_Result b) {
+16535:   return static_cast<I_Result>(static_cast<unsigned>(a)
+16535:                                & static_cast<unsigned>(b));
+16535: }
+16535: 
+16535: inline I_Result
+16535: operator-(I_Result a, I_Result b) {
+16535:     return static_cast<I_Result>(static_cast<unsigned>(a)
+16535:                                  & ~static_cast<unsigned>(b));
+16535: }
+16535: 
+16535: template <typename Criteria, typename T>
+16535: struct Use_By_Ref;
+16535: 
+16535: struct Use_Slow_Copy;
+16535: template <typename T>
+16535: struct Use_By_Ref<Use_Slow_Copy, T>
+16535:   : public Bool<Slow_Copy<T>::value> {
+16535: };
+16535: 
+16535: struct By_Value;
+16535: template <typename T>
+16535: struct Use_By_Ref<By_Value, T>
+16535:   : public False {
+16535: };
+16535: 
+16535: struct By_Ref;
+16535: template <typename T>
+16535: struct Use_By_Ref<By_Ref, T>
+16535:   : public True {
+16535: };
+16535: 
+16535: template <typename T, typename Criteria = Use_Slow_Copy, typename Enable = void>
+16535: class Val_Or_Ref;
+16535: 
+16535: template <typename T, typename Criteria>
+16535: class Val_Or_Ref<T, Criteria,
+16535:                  typename Enable_If<!Use_By_Ref<Criteria, T>::value>::type> {
+16535:   T value;
+16535: public:
+16535:   typedef T Arg_Type;
+16535:   typedef T Return_Type;
+16535:   Val_Or_Ref()
+16535:     : value() {
+16535:   }
+16535:   explicit Val_Or_Ref(Arg_Type v, bool = false)
+16535:     : value(v) {
+16535:   }
+16535:   Val_Or_Ref& operator=(Arg_Type v) {
+16535:     value = v;
+16535:     return *this;
+16535:   }
+16535:   void set(Arg_Type v, bool = false) {
+16535:     value = v;
+16535:   }
+16535:   Return_Type get() const {
+16535:     return value;
+16535:   }
+16535:   operator Return_Type() const {
+16535:     return get();
+16535:   }
+16535: };
+16535: 
+16535: template <typename T, typename Criteria>
+16535: class Val_Or_Ref<T, Criteria,
+16535:                  typename Enable_If<Use_By_Ref<Criteria, T>::value>::type> {
+16535:   const T* ptr;
+16535: public:
+16535:   typedef T& Arg_Type;
+16535:   typedef const T& Return_Type;
+16535:   Val_Or_Ref()
+16535:     : ptr(0) {
+16535:   }
+16535:   explicit Val_Or_Ref(Arg_Type v)
+16535:     : ptr(&v) {
+16535:   }
+16535:   Val_Or_Ref(const T& v, bool)
+16535:     : ptr(&v) {
+16535:   }
+16535:   Val_Or_Ref& operator=(Arg_Type v) {
+16535:     ptr = &v;
+16535:     return *this;
+16535:   }
+16535:   void set(Arg_Type v) {
+16535:     ptr = &v;
+16535:   }
+16535:   void set(const T& v, bool) {
+16535:     ptr = &v;
+16535:   }
+16535:   Return_Type get() const {
+16535:     return *ptr;
+16535:   }
+16535:   operator Return_Type() const {
+16535:     return get();
+16535:   }
+16535: };
+16535: 
+16535: class I_Constraint_Base {
+16535: };
+16535: 
+16535: template <typename Derived>
+16535: class I_Constraint_Common : public I_Constraint_Base {
+16535: public:
+16535:   template <typename T>
+16535:   Result convert_real(T& to) const {
+16535:     const Derived& c = static_cast<const Derived&>(*this);
+16535:     Result r = c.rel();
+16535:     switch (r) {
+16535:     case V_EMPTY:
+16535:     case V_LGE:
+16535:       return r;
+16535:     case V_LE:
+16535:       r = assign_r(to, c.value(), (ROUND_UP | ROUND_STRICT_RELATION));
+16535:       r = result_relation_class(r);
+16535:       if (r == V_EQ) {
+16535:         return V_LE;
+16535:       }
+16535:       goto lt;
+16535:     case V_LT:
+16535:       r = assign_r(to, c.value(), ROUND_UP);
+16535:       r = result_relation_class(r);
+16535:     lt:
+16535:       switch (r) {
+16535:       case V_EMPTY:
+16535:       case V_LT_PLUS_INFINITY:
+16535:       case V_EQ_MINUS_INFINITY:
+16535:         return r;
+16535:       case V_LT:
+16535:       case V_LE:
+16535:       case V_EQ:
+16535:         return V_LT;
+16535:       default:
+16535:         break;
+16535:       }
+16535:       break;
+16535:     case V_GE:
+16535:       r = assign_r(to, c.value(), (ROUND_DOWN | ROUND_STRICT_RELATION));
+16535:       r = result_relation_class(r);
+16535:       if (r == V_EQ) {
+16535:         return V_GE;
+16535:       }
+16535:       goto gt;
+16535:     case V_GT:
+16535:       r = assign_r(to, c.value(), ROUND_DOWN);
+16535:       r = result_relation_class(r);
+16535:     gt:
+16535:       switch (r) {
+16535:       case V_EMPTY:
+16535:       case V_GT_MINUS_INFINITY:
+16535:       case V_EQ_PLUS_INFINITY:
+16535:         return r;
+16535:       case V_LT:
+16535:       case V_LE:
+16535:       case V_EQ:
+16535:         return V_GT;
+16535:       default:
+16535:         break;
+16535:       }
+16535:       break;
+16535:     case V_EQ:
+16535:       r = assign_r(to, c.value(), ROUND_CHECK);
+16535:       r = result_relation_class(r);
+16535:       ((void) 0);
+16535:       if (r == V_EQ) {
+16535:         return V_EQ;
+16535:       }
+16535:       else {
+16535:         return V_EMPTY;
+16535:       }
+16535:     case V_NE:
+16535:       r = assign_r(to, c.value(), ROUND_CHECK);
+16535:       r = result_relation_class(r);
+16535:       if (r == V_EQ) {
+16535:         return V_NE;
+16535:       }
+16535:       else {
+16535:         return V_LGE;
+16535:       }
+16535:     default:
+16535:       break;
+16535:     }
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return V_EMPTY;
+16535:   }
+16535:   template <typename T>
+16535:   Result convert_real(T& to1, Result& rel2, T& to2) const {
+16535:     const Derived& c = static_cast<const Derived&>(*this);
+16535:     Result rel1;
+16535:     if (c.rel() != V_EQ) {
+16535:       rel2 = convert(to2);
+16535:       return V_LGE;
+16535:     }
+16535:     rel2 = assign_r(to2, c.value(), ROUND_UP);
+16535:     rel2 = result_relation_class(rel2);
+16535:     switch (rel2) {
+16535:     case V_EMPTY:
+16535:     case V_EQ_MINUS_INFINITY:
+16535:     case V_EQ:
+16535:       return V_LGE;
+16535:     default:
+16535:       break;
+16535:     }
+16535:     rel1 = assign_r(to1, c.value(), ROUND_DOWN);
+16535:     rel1 = result_relation_class(rel1);
+16535:     switch (rel1) {
+16535:     case V_EQ:
+16535:       ((void) 0);
+16535:       goto eq;
+16535:     case V_EQ_PLUS_INFINITY:
+16535:     case V_EMPTY:
+16535:       rel2 = rel1;
+16535:       return V_LGE;
+16535:     case V_GE:
+16535:       if (rel2 == V_LE && to1 == to2) {
+16535:       eq:
+16535:         rel2 = V_EQ;
+16535:         return V_LGE;
+16535:       }
+16535: 
+16535:     case V_GT:
+16535:     case V_GT_MINUS_INFINITY:
+16535:       return rel1;
+16535:     default:
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       return V_EMPTY;
+16535:     }
+16535:     switch (rel2) {
+16535:     case V_LE:
+16535:     case V_LT:
+16535:     case V_LT_PLUS_INFINITY:
+16535:       return rel1;
+16535:     default:
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       return V_EMPTY;
+16535:     }
+16535:   }
+16535:   template <typename T>
+16535:   Result convert_integer(T& to) const {
+16535:     Result rel = convert_real(to);
+16535:     switch (rel) {
+16535:     case V_LT:
+16535:       if (is_integer(to)) {
+16535:         rel = sub_assign_r(to, to, T(1), (ROUND_UP | ROUND_STRICT_RELATION));
+16535:         rel = result_relation_class(rel);
+16535:         return (rel == V_EQ) ? V_LE : rel;
+16535:       }
+16535: 
+16535:     case V_LE:
+16535:       rel = floor_assign_r(to, to, ROUND_UP);
+16535:       rel = result_relation_class(rel);
+16535:       ((void) 0);
+16535:       return V_LE;
+16535:     case V_GT:
+16535:       if (is_integer(to)) {
+16535:         rel = add_assign_r(to, to, T(1), (ROUND_DOWN | ROUND_STRICT_RELATION));
+16535:         rel = result_relation_class(rel);
+16535:         return (rel == V_EQ) ? V_GE : rel;
+16535:       }
+16535: 
+16535:     case V_GE:
+16535:       rel = ceil_assign_r(to, to, ROUND_DOWN);
+16535:       rel = result_relation_class(rel);
+16535:       ((void) 0);
+16535:       return V_GE;
+16535:     case V_EQ:
+16535:       if (is_integer(to)) {
+16535:         return V_EQ;
+16535:       }
+16535:       return V_EMPTY;
+16535:     case V_NE:
+16535:       if (is_integer(to)) {
+16535:         return V_NE;
+16535:       }
+16535:       return V_LGE;
+16535:     default:
+16535:       return rel;
+16535:     }
+16535:   }
+16535: };
+16535: 
+16535: struct I_Constraint_Rel {
+16535:   Result rel;
+16535:   I_Constraint_Rel(Result r)
+16535:     : rel(r) {
+16535:     ((void) 0);
+16535:   }
+16535:   I_Constraint_Rel(Relation_Symbol r)
+16535:     : rel(static_cast<Result>(r)) {
+16535:   }
+16535:   operator Result() const {
+16535:     return rel;
+16535:   }
+16535: };
+16535: 
+16535: template <typename T, typename Val_Or_Ref_Criteria = Use_Slow_Copy,
+16535:           bool extended = false>
+16535: class I_Constraint
+16535:   : public I_Constraint_Common<I_Constraint<T, Val_Or_Ref_Criteria,
+16535:                                             extended> > {
+16535:   typedef Val_Or_Ref<T, Val_Or_Ref_Criteria> Val_Ref;
+16535:   typedef typename Val_Ref::Arg_Type Arg_Type;
+16535:   typedef typename Val_Ref::Return_Type Return_Type;
+16535:   Result rel_;
+16535:   Val_Ref value_;
+16535: public:
+16535:   typedef T value_type;
+16535:   explicit I_Constraint()
+16535:     : rel_(V_LGE) {
+16535:   }
+16535:   I_Constraint(I_Constraint_Rel r, Arg_Type v)
+16535:     : rel_(r), value_(v) {
+16535:   }
+16535:   I_Constraint(I_Constraint_Rel r, const T& v, bool force)
+16535:     : rel_(r), value_(v, force) {
+16535:   }
+16535:   template <typename U>
+16535:   I_Constraint(I_Constraint_Rel r, const U& v)
+16535:     : rel_(r), value_(v) {
+16535:   }
+16535:   void set(I_Constraint_Rel r, Arg_Type v) {
+16535:     rel_ = r;
+16535:     value_.set(v);
+16535:   }
+16535:   void set(I_Constraint_Rel r, const T& v, bool force) {
+16535:     rel_ = r;
+16535:     value_.set(v, force);
+16535:   }
+16535:   template <typename U>
+16535:   void set(I_Constraint_Rel r, const U& v) {
+16535:     rel_ = r;
+16535:     value_.set(v);
+16535:   }
+16535:   Return_Type value() const {
+16535:     return value_;
+16535:   }
+16535:   Result rel() const {
+16535:     return rel_;
+16535:   }
+16535: };
+16535: 
+16535: template <typename T>
+16535: inline I_Constraint<T>
+16535: i_constraint(I_Constraint_Rel rel, const T& v) {
+16535:   return I_Constraint<T>(rel, v);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline I_Constraint<T>
+16535: i_constraint(I_Constraint_Rel rel, const T& v, bool force) {
+16535:   return I_Constraint<T>(rel, v, force);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline I_Constraint<T>
+16535: i_constraint(I_Constraint_Rel rel, T& v) {
+16535:   return I_Constraint<T>(rel, v);
+16535: }
+16535: 
+16535: template <typename T, typename Val_Or_Ref_Criteria>
+16535: inline I_Constraint<T, Val_Or_Ref_Criteria>
+16535: i_constraint(I_Constraint_Rel rel, const T& v, const Val_Or_Ref_Criteria&) {
+16535:   return I_Constraint<T, Val_Or_Ref_Criteria>(rel, v);
+16535: }
+16535: 
+16535: template <typename T, typename Val_Or_Ref_Criteria>
+16535: inline I_Constraint<T, Val_Or_Ref_Criteria>
+16535: i_constraint(I_Constraint_Rel rel, const T& v, bool force,
+16535:              const Val_Or_Ref_Criteria&) {
+16535:   return I_Constraint<T, Val_Or_Ref_Criteria>(rel, v, force);
+16535: }
+16535: 
+16535: template <typename T, typename Val_Or_Ref_Criteria>
+16535: inline I_Constraint<T, Val_Or_Ref_Criteria>
+16535: i_constraint(I_Constraint_Rel rel, T& v, const Val_Or_Ref_Criteria&) {
+16535:   return I_Constraint<T, Val_Or_Ref_Criteria>(rel, v);
+16535: }
+16535: 
+16535: }
+16535: # 32 "../../src/Interval_defs.hh" 2
+16535: # 1 "../../src/Interval_Info_defs.hh" 1
+16535: # 27 "../../src/Interval_Info_defs.hh"
+16535: # 1 "../../src/Boundary_defs.hh" 1
+16535: # 29 "../../src/Boundary_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Boundary_NS {
+16535: 
+16535: struct Property {
+16535:   enum Type {
+16535:     SPECIAL_,
+16535:     OPEN_
+16535:   };
+16535:   typedef bool Value;
+16535:   static const Value default_value = true;
+16535:   static const Value unsupported_value = false;
+16535:   Property(Type t)
+16535:     : type(t) {
+16535:   }
+16535:   Type type;
+16535: };
+16535: 
+16535: static const Property SPECIAL(Property::SPECIAL_);
+16535: static const Property OPEN(Property::OPEN_);
+16535: 
+16535: enum Boundary_Type {
+16535:   LOWER = ROUND_DOWN,
+16535:   UPPER = ROUND_UP
+16535: };
+16535: 
+16535: inline Rounding_Dir
+16535: round_dir_check(Boundary_Type t, bool check = false) {
+16535:   if (check) {
+16535:     return static_cast<Rounding_Dir>(t) | ROUND_STRICT_RELATION;
+16535:   }
+16535:   else {
+16535:     return static_cast<Rounding_Dir>(t);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T, typename Info>
+16535: inline Result
+16535: special_set_boundary_infinity(Boundary_Type type, T&, Info& info) {
+16535:   ((void) 0);
+16535:   info.set_boundary_property(type, SPECIAL);
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename T, typename Info>
+16535: inline bool
+16535: special_is_open(Boundary_Type, const T&, const Info&) {
+16535:   return !Info::may_contain_infinity;
+16535: }
+16535: 
+16535: template <typename T, typename Info>
+16535: inline bool
+16535: normal_is_open(Boundary_Type type, const T& x, const Info& info) {
+16535:   if (Info::store_open) {
+16535:     return info.get_boundary_property(type, OPEN);
+16535:   }
+16535:   else {
+16535:     return !Info::store_special && !Info::may_contain_infinity
+16535:       && normal_is_boundary_infinity(type, x, info);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T, typename Info>
+16535: inline bool
+16535: is_open(Boundary_Type type, const T& x, const Info& info) {
+16535:   if (Info::store_open) {
+16535:     return info.get_boundary_property(type, OPEN);
+16535:   }
+16535:   else {
+16535:     return !Info::may_contain_infinity
+16535:       && is_boundary_infinity(type, x, info);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T, typename Info>
+16535: inline Result
+16535: set_unbounded(Boundary_Type type, T& x, Info& info) {
+16535:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_109 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(Info::store_special || std::numeric_limits<T>::is_bounded || std::numeric_limits<T>::has_infinity)>) }
+16535: 
+16535: 
+16535:                                                           ;
+16535:   Result r;
+16535:   if (Info::store_special) {
+16535:     r = special_set_boundary_infinity(type, x, info);
+16535:   }
+16535:   else if (type == LOWER) {
+16535:     r = assign_r(x, MINUS_INFINITY, ROUND_UP);
+16535:   }
+16535:   else {
+16535:     r = assign_r(x, PLUS_INFINITY, ROUND_DOWN);
+16535:   }
+16535:   if (result_relation(r) == VR_EQ && !Info::may_contain_infinity) {
+16535:     info.set_boundary_property(type, OPEN);
+16535:   }
+16535:   return r;
+16535: }
+16535: 
+16535: template <typename T, typename Info>
+16535: inline Result
+16535: set_minus_infinity(Boundary_Type type, T& x, Info& info, bool open = false) {
+16535:   if (open) {
+16535:     ((void) 0);
+16535:   }
+16535:   else {
+16535:     ((void) 0);
+16535:   }
+16535:   Result r;
+16535:   if (Info::store_special) {
+16535:     ((void) 0);
+16535:     r = special_set_boundary_infinity(type, x, info);
+16535:   }
+16535:   else {
+16535:     r = assign_r(x, MINUS_INFINITY, round_dir_check(type));
+16535:     ((void) 0);
+16535:   }
+16535:   if (open || result_relation(r) != VR_EQ) {
+16535:     info.set_boundary_property(type, OPEN);
+16535:   }
+16535:   return r;
+16535: }
+16535: 
+16535: template <typename T, typename Info>
+16535: inline Result
+16535: set_plus_infinity(Boundary_Type type, T& x, Info& info, bool open = false) {
+16535:   if (open) {
+16535:     ((void) 0);
+16535:   }
+16535:   else {
+16535:     ((void) 0);
+16535:   }
+16535:   Result r;
+16535:   if (Info::store_special) {
+16535:     ((void) 0);
+16535:     r = special_set_boundary_infinity(type, x, info);
+16535:   }
+16535:   else {
+16535:     r = assign_r(x, PLUS_INFINITY, round_dir_check(type));
+16535:     ((void) 0);
+16535:   }
+16535:   if (open || result_relation(r) != VR_EQ) {
+16535:     info.set_boundary_property(type, OPEN);
+16535:   }
+16535:   return r;
+16535: }
+16535: 
+16535: template <typename T, typename Info>
+16535: inline Result
+16535: set_boundary_infinity(Boundary_Type type, T& x, Info& info, bool open = false) {
+16535:   ((void) 0);
+16535:   Result r;
+16535:   if (Info::store_special) {
+16535:     r = special_set_boundary_infinity(type, x, info);
+16535:   }
+16535:   else if (type == LOWER) {
+16535:     r = assign_r(x, MINUS_INFINITY, round_dir_check(type));
+16535:   }
+16535:   else {
+16535:     r = assign_r(x, PLUS_INFINITY, round_dir_check(type));
+16535:   }
+16535:   ((void) 0);
+16535:   if (open) {
+16535:     info.set_boundary_property(type, OPEN);
+16535:   }
+16535:   return r;
+16535: }
+16535: 
+16535: template <typename T, typename Info>
+16535: inline bool
+16535: is_domain_inf(Boundary_Type type, const T& x, const Info& info) {
+16535:   if (Info::store_special && type == LOWER) {
+16535:     return info.get_boundary_property(type, SPECIAL);
+16535:   }
+16535:   else if (std::numeric_limits<T>::has_infinity) {
+16535:     return Parma_Polyhedra_Library::is_minus_infinity(x);
+16535:   }
+16535:   else if (std::numeric_limits<T>::is_bounded) {
+16535:     return x == std::numeric_limits<T>::min();
+16535:   }
+16535:   else {
+16535:     return false;
+16535:   }
+16535: }
+16535: 
+16535: template <typename T, typename Info>
+16535: inline bool
+16535: is_domain_sup(Boundary_Type type, const T& x, const Info& info) {
+16535:   if (Info::store_special && type == UPPER) {
+16535:     return info.get_boundary_property(type, SPECIAL);
+16535:   }
+16535:   else if (std::numeric_limits<T>::has_infinity) {
+16535:     return Parma_Polyhedra_Library::is_plus_infinity(x);
+16535:   }
+16535:   else if (std::numeric_limits<T>::is_bounded) {
+16535:       return x == std::numeric_limits<T>::max();
+16535:   }
+16535:   else {
+16535:     return false;
+16535:   }
+16535: }
+16535: 
+16535: template <typename T, typename Info>
+16535: inline bool
+16535: normal_is_boundary_infinity(Boundary_Type type, const T& x, const Info&) {
+16535:   if (!std::numeric_limits<T>::has_infinity) {
+16535:     return false;
+16535:   }
+16535:   if (type == LOWER) {
+16535:     return Parma_Polyhedra_Library::is_minus_infinity(x);
+16535:   }
+16535:   else {
+16535:     return Parma_Polyhedra_Library::is_plus_infinity(x);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T, typename Info>
+16535: inline bool
+16535: is_boundary_infinity(Boundary_Type type, const T& x, const Info& info) {
+16535:   if (Info::store_special) {
+16535:     return info.get_boundary_property(type, SPECIAL);
+16535:   }
+16535:   else {
+16535:     return normal_is_boundary_infinity(type, x, info);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T, typename Info>
+16535: inline bool
+16535: normal_is_reverse_infinity(Boundary_Type type, const T& x, const Info&) {
+16535:   if (!Info::may_contain_infinity) {
+16535:     return false;
+16535:   }
+16535:   else if (type == LOWER) {
+16535:     return Parma_Polyhedra_Library::is_plus_infinity(x);
+16535:   }
+16535:   else {
+16535:     return Parma_Polyhedra_Library::is_minus_infinity(x);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T, typename Info>
+16535: inline bool
+16535: is_minus_infinity(Boundary_Type type, const T& x, const Info& info) {
+16535:   if (type == LOWER) {
+16535:     if (Info::store_special) {
+16535:       return info.get_boundary_property(type, SPECIAL);
+16535:     }
+16535:     else {
+16535:       return normal_is_boundary_infinity(type, x, info);
+16535:     }
+16535:   }
+16535:   else {
+16535:     return !Info::store_special && normal_is_reverse_infinity(type, x, info);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T, typename Info>
+16535: inline bool
+16535: is_plus_infinity(Boundary_Type type, const T& x, const Info& info) {
+16535:   if (type == UPPER) {
+16535:     if (Info::store_special) {
+16535:       return info.get_boundary_property(type, SPECIAL);
+16535:     }
+16535:     else {
+16535:       return normal_is_boundary_infinity(type, x, info);
+16535:     }
+16535:   }
+16535:   else {
+16535:     return !Info::store_special && normal_is_reverse_infinity(type, x, info);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T, typename Info>
+16535: inline bool
+16535: is_reverse_infinity(Boundary_Type type, const T& x, const Info& info) {
+16535:   return normal_is_reverse_infinity(type, x, info);
+16535: }
+16535: 
+16535: template <typename T, typename Info>
+16535: inline int
+16535: infinity_sign(Boundary_Type type, const T& x, const Info& info) {
+16535:   if (is_boundary_infinity(type, x, info)) {
+16535:     return (type == LOWER) ? -1 : 1;
+16535:   }
+16535:   else if (is_reverse_infinity(type, x, info)) {
+16535:     return (type == UPPER) ? -1 : 1;
+16535:   }
+16535:   else {
+16535:     return 0;
+16535:   }
+16535: }
+16535: 
+16535: template <typename T, typename Info>
+16535: inline bool
+16535: is_boundary_infinity_closed(Boundary_Type type, const T& x, const Info& info) {
+16535:   return Info::may_contain_infinity
+16535:     && !info.get_boundary_property(type, OPEN)
+16535:     && is_boundary_infinity(type, x, info);
+16535: }
+16535: 
+16535: template <typename Info>
+16535: inline bool
+16535: boundary_infinity_is_open(Boundary_Type type, const Info& info) {
+16535:   return !Info::may_contain_infinity
+16535:     || info.get_boundary_property(type, OPEN);
+16535: }
+16535: 
+16535: template <typename T, typename Info>
+16535: inline int
+16535: sgn_b(Boundary_Type type, const T& x, const Info& info) {
+16535:   if (info.get_boundary_property(type, SPECIAL)) {
+16535:     return (type == LOWER) ? -1 : 1;
+16535:   }
+16535:   else {
+16535: 
+16535: 
+16535:     return Parma_Polyhedra_Library::sgn(x);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T, typename Info>
+16535: inline int
+16535: sgn(Boundary_Type type, const T& x, const Info& info) {
+16535:   int sign = sgn_b(type, x, info);
+16535:   if (x == 0 && info.get_boundary_property(type, OPEN)) {
+16535:     return (type == LOWER) ? -1 : 1;
+16535:   }
+16535:   else {
+16535:     return sign;
+16535:   }
+16535: }
+16535: 
+16535: template <typename T1, typename Info1, typename T2, typename Info2>
+16535: inline bool
+16535: eq(Boundary_Type type1, const T1& x1, const Info1& info1,
+16535:    Boundary_Type type2, const T2& x2, const Info2& info2) {
+16535:   if (type1 == type2) {
+16535:     if (is_open(type1, x1, info1)
+16535:         != is_open(type2, x2, info2)) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   else if (is_open(type1, x1, info1)
+16535:            || is_open(type2, x2, info2)) {
+16535:     return false;
+16535:   }
+16535:   if (is_minus_infinity(type1, x1, info1)) {
+16535:     return is_minus_infinity(type2, x2, info2);
+16535:   }
+16535:   else if (is_plus_infinity(type1, x1, info1)) {
+16535:     return is_plus_infinity(type2, x2, info2);
+16535:   }
+16535:   else if (is_minus_infinity(type2, x2, info2)
+16535:            || is_plus_infinity(type2, x2, info2)) {
+16535:     return false;
+16535:   }
+16535:   else {
+16535:     return equal(x1, x2);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T1, typename Info1, typename T2, typename Info2>
+16535: inline bool
+16535: lt(Boundary_Type type1, const T1& x1, const Info1& info1,
+16535:    Boundary_Type type2, const T2& x2, const Info2& info2) {
+16535:   if (is_open(type1, x1, info1)) {
+16535:     if (type1 == UPPER
+16535:         && (type2 == LOWER
+16535:             || !is_open(type2, x2, info2))) {
+16535:       goto le;
+16535:     }
+16535:   }
+16535:   else if (type2 == LOWER
+16535:            && is_open(type2, x2, info2)) {
+16535:   le:
+16535:     if (is_minus_infinity(type1, x1, info1)
+16535:         || is_plus_infinity(type2, x2, info2)) {
+16535:       return true;
+16535:     }
+16535:     if (is_plus_infinity(type1, x1, info1)
+16535:         || is_minus_infinity(type2, x2, info2)) {
+16535:       return false;
+16535:     }
+16535:     else {
+16535:       return less_or_equal(x1, x2);
+16535:     }
+16535:   }
+16535:   if (is_plus_infinity(type1, x1, info1)
+16535:       || is_minus_infinity(type2, x2, info2)) {
+16535:     return false;
+16535:   }
+16535:   if (is_minus_infinity(type1, x1, info1)
+16535:       || is_plus_infinity(type2, x2, info2)) {
+16535:     return true;
+16535:   }
+16535:   else {
+16535:     return less_than(x1, x2);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T1, typename Info1, typename T2, typename Info2>
+16535: inline bool
+16535: gt(Boundary_Type type1, const T1& x1, const Info1& info1,
+16535:    Boundary_Type type2, const T2& x2, const Info2& info2) {
+16535:   return lt(type2, x2, info2, type1, x1, info1);
+16535: }
+16535: 
+16535: template <typename T1, typename Info1, typename T2, typename Info2>
+16535: inline bool
+16535: le(Boundary_Type type1, const T1& x1, const Info1& info1,
+16535:    Boundary_Type type2, const T2& x2, const Info2& info2) {
+16535:   return !gt(type1, x1, info1, type2, x2, info2);
+16535: }
+16535: 
+16535: template <typename T1, typename Info1, typename T2, typename Info2>
+16535: inline bool
+16535: ge(Boundary_Type type1, const T1& x1, const Info1& info1,
+16535:    Boundary_Type type2, const T2& x2, const Info2& info2) {
+16535:   return !lt(type1, x1, info1, type2, x2, info2);
+16535: }
+16535: 
+16535: template <typename T, typename Info>
+16535: inline Result
+16535: adjust_boundary(Boundary_Type type, T& x, Info& info,
+16535:                 bool open, Result r) {
+16535:   r = result_relation_class(r);
+16535:   if (type == LOWER) {
+16535:     switch (r) {
+16535:     case V_GT_MINUS_INFINITY:
+16535:       open = true;
+16535: 
+16535:     case V_EQ_MINUS_INFINITY:
+16535:       if (!Info::store_special) {
+16535:         return r;
+16535:       }
+16535:       if (open) {
+16535:         info.set_boundary_property(type, OPEN);
+16535:       }
+16535:       return special_set_boundary_infinity(type, x, info);
+16535:     case V_GT:
+16535:       open = true;
+16535: 
+16535:     case V_GE:
+16535:     case V_EQ:
+16535:       if (open) {
+16535:         info.set_boundary_property(type, OPEN);
+16535:       }
+16535:       return r;
+16535:     default:
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       return V_NAN;
+16535:     }
+16535:   }
+16535:   else {
+16535:     switch (r) {
+16535:     case V_LT_PLUS_INFINITY:
+16535:       open = true;
+16535: 
+16535:     case V_EQ_PLUS_INFINITY:
+16535:       if (!Info::store_special) {
+16535:         return r;
+16535:       }
+16535:       if (open) {
+16535:         info.set_boundary_property(type, OPEN);
+16535:       }
+16535:       return special_set_boundary_infinity(type, x, info);
+16535:     case V_LT:
+16535:       open = true;
+16535: 
+16535:     case V_LE:
+16535:     case V_EQ:
+16535:       if (open) {
+16535:         info.set_boundary_property(type, OPEN);
+16535:       }
+16535:       return r;
+16535:     default:
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       return V_NAN;
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename To, typename To_Info, typename T, typename Info>
+16535: inline Result
+16535: complement(Boundary_Type to_type, To& to, To_Info& to_info,
+16535:            Boundary_Type type, const T& x, const Info& info) {
+16535:   ((void) 0);
+16535:   bool should_shrink;
+16535:   if (info.get_boundary_property(type, SPECIAL)) {
+16535:     should_shrink = !special_is_open(type, x, info);
+16535:     if (type == LOWER) {
+16535:       return set_minus_infinity(to_type, to, to_info, should_shrink);
+16535:     }
+16535:     else {
+16535:       return set_plus_infinity(to_type, to, to_info, should_shrink);
+16535:     }
+16535:   }
+16535:   should_shrink = !normal_is_open(type, x, info);
+16535:   bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open));
+16535:   Result r = assign_r(to, x, round_dir_check(to_type, check));
+16535:   return adjust_boundary(to_type, to, to_info, should_shrink, r);
+16535: }
+16535: 
+16535: template <typename To, typename To_Info, typename T, typename Info>
+16535: inline Result
+16535: assign(Boundary_Type to_type, To& to, To_Info& to_info,
+16535:        Boundary_Type type, const T& x, const Info& info,
+16535:        bool should_shrink = false) {
+16535:   ((void) 0);
+16535:   if (info.get_boundary_property(type, SPECIAL)) {
+16535:     should_shrink = (should_shrink || special_is_open(type, x, info));
+16535:     return set_boundary_infinity(to_type, to, to_info, should_shrink);
+16535:   }
+16535:   should_shrink = (should_shrink || normal_is_open(type, x, info));
+16535:   const bool check
+16535:     = (To_Info::check_inexact || (!should_shrink && To_Info::store_open));
+16535:   const Result r = assign_r(to, x, round_dir_check(to_type, check));
+16535:   return adjust_boundary(to_type, to, to_info, should_shrink, r);
+16535: }
+16535: 
+16535: template <typename To, typename To_Info, typename T, typename Info>
+16535: inline Result
+16535: min_assign(Boundary_Type to_type, To& to, To_Info& to_info,
+16535:            Boundary_Type type, const T& x, const Info& info) {
+16535:   if (lt(type, x, info, to_type, to, to_info)) {
+16535:     to_info.clear_boundary_properties(to_type);
+16535:     return assign(to_type, to, to_info, type, x, info);
+16535:   }
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To, typename To_Info, typename T1, typename Info1, typename T2, typename Info2>
+16535: inline Result
+16535: min_assign(Boundary_Type to_type, To& to, To_Info& to_info,
+16535:            Boundary_Type type1, const T1& x1, const Info1& info1,
+16535:            Boundary_Type type2, const T2& x2, const Info2& info2) {
+16535:   if (lt(type1, x1, info1, type2, x2, info2)) {
+16535:     return assign(to_type, to, to_info, type1, x1, info1);
+16535:   }
+16535:   else {
+16535:     return assign(to_type, to, to_info, type2, x2, info2);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To, typename To_Info, typename T, typename Info>
+16535: inline Result
+16535: max_assign(Boundary_Type to_type, To& to, To_Info& to_info,
+16535:            Boundary_Type type, const T& x, const Info& info) {
+16535:   if (gt(type, x, info, to_type, to, to_info)) {
+16535:     to_info.clear_boundary_properties(to_type);
+16535:     return assign(to_type, to, to_info, type, x, info);
+16535:   }
+16535:   return V_EQ;
+16535: }
+16535: 
+16535: template <typename To, typename To_Info, typename T1, typename Info1, typename T2, typename Info2>
+16535: inline Result
+16535: max_assign(Boundary_Type to_type, To& to, To_Info& to_info,
+16535:            Boundary_Type type1, const T1& x1, const Info1& info1,
+16535:            Boundary_Type type2, const T2& x2, const Info2& info2) {
+16535:   if (gt(type1, x1, info1, type2, x2, info2)) {
+16535:     return assign(to_type, to, to_info, type1, x1, info1);
+16535:   }
+16535:   else {
+16535:     return assign(to_type, to, to_info, type2, x2, info2);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To, typename To_Info, typename T, typename Info>
+16535: inline Result
+16535: neg_assign(Boundary_Type to_type, To& to, To_Info& to_info,
+16535:            Boundary_Type type, const T& x, const Info& info) {
+16535:   ((void) 0);
+16535:   bool should_shrink;
+16535:   if (info.get_boundary_property(type, SPECIAL)) {
+16535:     should_shrink = special_is_open(type, x, info);
+16535:     return set_boundary_infinity(to_type, to, to_info, should_shrink);
+16535:   }
+16535:   should_shrink = normal_is_open(type, x, info);
+16535:   bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open));
+16535:   Result r = neg_assign_r(to, x, round_dir_check(to_type, check));
+16535:   return adjust_boundary(to_type, to, to_info, should_shrink, r);
+16535: }
+16535: 
+16535: template <typename To, typename To_Info, typename T1, typename Info1, typename T2, typename Info2>
+16535: inline Result
+16535: add_assign(Boundary_Type to_type, To& to, To_Info& to_info,
+16535:            Boundary_Type type1, const T1& x1, const Info1& info1,
+16535:            Boundary_Type type2, const T2& x2, const Info2& info2) {
+16535:   ((void) 0);
+16535:   bool should_shrink;
+16535:   if (is_boundary_infinity(type1, x1, info1)) {
+16535:     should_shrink = (boundary_infinity_is_open(type1, info1)
+16535:                      && !is_boundary_infinity_closed(type2, x2, info2));
+16535:     return set_boundary_infinity(to_type, to, to_info, should_shrink);
+16535:   }
+16535:   else if (is_boundary_infinity(type2, x2, info2)) {
+16535:     should_shrink = (boundary_infinity_is_open(type2, info2)
+16535:                      && !is_boundary_infinity_closed(type1, x1, info1));
+16535:     return set_boundary_infinity(to_type, to, to_info, should_shrink);
+16535:   }
+16535:   should_shrink = (normal_is_open(type1, x1, info1)
+16535:                    || normal_is_open(type2, x2, info2));
+16535:   bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open));
+16535: 
+16535:   Result r = add_assign_r(to, x1, x2, round_dir_check(to_type, check));
+16535:   return adjust_boundary(to_type, to, to_info, should_shrink, r);
+16535: }
+16535: 
+16535: template <typename To, typename To_Info, typename T1, typename Info1, typename T2, typename Info2>
+16535: inline Result
+16535: sub_assign(Boundary_Type to_type, To& to, To_Info& to_info,
+16535:            Boundary_Type type1, const T1& x1, const Info1& info1,
+16535:            Boundary_Type type2, const T2& x2, const Info2& info2) {
+16535:   ((void) 0);
+16535:   bool should_shrink;
+16535:   if (is_boundary_infinity(type1, x1, info1)) {
+16535:     should_shrink = (boundary_infinity_is_open(type1, info1)
+16535:                      && !is_boundary_infinity_closed(type2, x2, info2));
+16535:     return set_boundary_infinity(to_type, to, to_info, should_shrink);
+16535:   }
+16535:   else if (is_boundary_infinity(type2, x2, info2)) {
+16535:     should_shrink = (boundary_infinity_is_open(type2, info2)
+16535:                      && !is_boundary_infinity_closed(type1, x1, info1));
+16535:     return set_boundary_infinity(to_type, to, to_info, should_shrink);
+16535:   }
+16535:   should_shrink = (normal_is_open(type1, x1, info1)
+16535:                    || normal_is_open(type2, x2, info2));
+16535:   bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open));
+16535: 
+16535:   Result r = sub_assign_r(to, x1, x2, round_dir_check(to_type, check));
+16535:   return adjust_boundary(to_type, to, to_info, should_shrink, r);
+16535: }
+16535: 
+16535: template <typename To, typename To_Info, typename T1, typename Info1, typename T2, typename Info2>
+16535: inline Result
+16535: mul_assign(Boundary_Type to_type, To& to, To_Info& to_info,
+16535:            Boundary_Type type1, const T1& x1, const Info1& info1,
+16535:            Boundary_Type type2, const T2& x2, const Info2& info2) {
+16535:   bool should_shrink;
+16535:   if (is_boundary_infinity(type1, x1, info1)) {
+16535:     should_shrink = (boundary_infinity_is_open(type1, info1)
+16535:                      && !is_boundary_infinity_closed(type2, x2, info2));
+16535:     return set_boundary_infinity(to_type, to, to_info, should_shrink);
+16535:   }
+16535:   else if (is_boundary_infinity(type2, x2, info2)) {
+16535:     should_shrink = (boundary_infinity_is_open(type2, info2)
+16535:                      && !is_boundary_infinity_closed(type1, x1, info1));
+16535:     return set_boundary_infinity(to_type, to, to_info, should_shrink);
+16535:   }
+16535:   should_shrink = (normal_is_open(type1, x1, info1)
+16535:                    || normal_is_open(type2, x2, info2));
+16535:   bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open));
+16535:   ((void) 0);
+16535: 
+16535:   Result r = mul_assign_r(to, x1, x2, round_dir_check(to_type, check));
+16535:   return adjust_boundary(to_type, to, to_info, should_shrink, r);
+16535: }
+16535: 
+16535: template <typename To, typename To_Info>
+16535: inline Result
+16535: set_zero(Boundary_Type to_type, To& to, To_Info& to_info, bool should_shrink) {
+16535:   bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open));
+16535:   Result r = assign_r(to, Constant<0>::value, round_dir_check(to_type, check));
+16535:   return adjust_boundary(to_type, to, to_info, should_shrink, r);
+16535: }
+16535: 
+16535: template <typename To, typename To_Info, typename T1, typename Info1, typename T2, typename Info2>
+16535: inline Result
+16535: mul_assign_z(Boundary_Type to_type, To& to, To_Info& to_info,
+16535:              Boundary_Type type1, const T1& x1, const Info1& info1, int x1s,
+16535:              Boundary_Type type2, const T2& x2, const Info2& info2, int x2s) {
+16535:   bool should_shrink;
+16535:   if (x1s != 0) {
+16535:     if (x2s != 0) {
+16535:       return mul_assign(to_type, to, to_info,
+16535:                         type1, x1, info1,
+16535:                         type2, x2, info2);
+16535:     }
+16535:     else {
+16535:       should_shrink = info2.get_boundary_property(type2, OPEN);
+16535:     }
+16535:   }
+16535:   else {
+16535:     should_shrink = (info1.get_boundary_property(type1, OPEN)
+16535:                      && (x2s != 0 || info2.get_boundary_property(type2, OPEN)));
+16535:   }
+16535:   return set_zero(to_type, to, to_info, should_shrink);
+16535: }
+16535: 
+16535: template <typename To, typename To_Info, typename T1, typename Info1, typename T2, typename Info2>
+16535: inline Result
+16535: div_assign(Boundary_Type to_type, To& to, To_Info& to_info,
+16535:            Boundary_Type type1, const T1& x1, const Info1& info1,
+16535:            Boundary_Type type2, const T2& x2, const Info2& info2) {
+16535:   bool should_shrink;
+16535:   if (is_boundary_infinity(type1, x1, info1)) {
+16535:     should_shrink = boundary_infinity_is_open(type1, info1);
+16535:     return set_boundary_infinity(to_type, to, to_info, should_shrink);
+16535:   }
+16535:   else if (is_boundary_infinity(type2, x2, info2)) {
+16535:     should_shrink = boundary_infinity_is_open(type2, info2);
+16535:     return set_zero(to_type, to, to_info, should_shrink);
+16535:   }
+16535:   should_shrink = (normal_is_open(type1, x1, info1)
+16535:                    || normal_is_open(type2, x2, info2));
+16535:   bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open));
+16535:   ((void) 0);
+16535: 
+16535:   Result r = div_assign_r(to, x1, x2, round_dir_check(to_type, check));
+16535:   return adjust_boundary(to_type, to, to_info, should_shrink, r);
+16535: }
+16535: 
+16535: 
+16535: template <typename To, typename To_Info, typename T1, typename Info1, typename T2, typename Info2>
+16535: inline Result
+16535: div_assign_z(Boundary_Type to_type, To& to, To_Info& to_info,
+16535:              Boundary_Type type1, const T1& x1, const Info1& info1, int x1s,
+16535:              Boundary_Type type2, const T2& x2, const Info2& info2, int x2s) {
+16535:   if (x1s != 0) {
+16535:     if (x2s != 0) {
+16535:       return div_assign(to_type, to, to_info,
+16535:                         type1, x1, info1,
+16535:                         type2, x2, info2);
+16535:     }
+16535:     else {
+16535:       return set_boundary_infinity(to_type, to, to_info, true);
+16535:     }
+16535:   }
+16535:   else {
+16535:     bool should_shrink = info1.get_boundary_property(type1, OPEN)
+16535:       && !is_boundary_infinity_closed(type2, x2, info2);
+16535:     return set_zero(to_type, to, to_info, should_shrink);
+16535:   }
+16535: }
+16535: 
+16535: template <typename To, typename To_Info, typename T, typename Info>
+16535: inline Result
+16535: umod_2exp_assign(Boundary_Type to_type, To& to, To_Info& to_info,
+16535:                  Boundary_Type type, const T& x, const Info& info,
+16535:                  unsigned int exp) {
+16535:   ((void) 0);
+16535:   bool should_shrink;
+16535:   if (is_boundary_infinity(type, x, info)) {
+16535:     should_shrink = boundary_infinity_is_open(type, info);
+16535:     return set_boundary_infinity(to_type, to, to_info, should_shrink);
+16535:   }
+16535:   should_shrink = normal_is_open(type, x, info);
+16535:   bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open));
+16535:   Result r = umod_2exp_assign_r(to, x, exp, round_dir_check(to_type, check));
+16535:   return adjust_boundary(to_type, to, to_info, should_shrink, r);
+16535: }
+16535: 
+16535: template <typename To, typename To_Info, typename T, typename Info>
+16535: inline Result
+16535: smod_2exp_assign(Boundary_Type to_type, To& to, To_Info& to_info,
+16535:                  Boundary_Type type, const T& x, const Info& info,
+16535:                  unsigned int exp) {
+16535:   ((void) 0);
+16535:   bool should_shrink;
+16535:   if (is_boundary_infinity(type, x, info)) {
+16535:     should_shrink = boundary_infinity_is_open(type, info);
+16535:     return set_boundary_infinity(to_type, to, to_info, should_shrink);
+16535:   }
+16535:   should_shrink = normal_is_open(type, x, info);
+16535:   bool check = (To_Info::check_inexact || (!should_shrink && To_Info::store_open));
+16535:   Result r = smod_2exp_assign_r(to, x, exp, round_dir_check(to_type, check));
+16535:   return adjust_boundary(to_type, to, to_info, should_shrink, r);
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 28 "../../src/Interval_Info_defs.hh" 2
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Interval_NS {
+16535: 
+16535: struct Property {
+16535:   enum Type {
+16535:     CARDINALITY_0_,
+16535:     CARDINALITY_1_,
+16535:     CARDINALITY_IS_
+16535:   };
+16535:   typedef bool Value;
+16535:   static const Value default_value = true;
+16535:   static const Value unsupported_value = false;
+16535:   Property(Type t)
+16535:     : type(t) {
+16535:   }
+16535:   Type type;
+16535: };
+16535: 
+16535: const Property CARDINALITY_0(Property::CARDINALITY_0_);
+16535: const Property CARDINALITY_1(Property::CARDINALITY_1_);
+16535: const Property CARDINALITY_IS(Property::CARDINALITY_IS_);
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: reset_bits(T& bits) {
+16535:   bits = 0;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: reset_bit(T& bits, unsigned int bit) {
+16535:   bits &= ~(static_cast<T>(1) << bit);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: set_bit(T& bits, unsigned int bit, bool value) {
+16535:   if (value) {
+16535:     bits |= static_cast<T>(1) << bit;
+16535:   }
+16535:   else {
+16535:     reset_bit(bits, bit);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: get_bit(const T& bits, unsigned int bit) {
+16535:   return (bits & (static_cast<T>(1) << bit)) != 0;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: set_bits(T& bits, unsigned int start, unsigned int len, T value) {
+16535:   bits &= ~(((static_cast<T>(1) << len) - 1) << start);
+16535:   bits |= value << start;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline T
+16535: get_bits(T& bits, unsigned int start, unsigned int len) {
+16535:   return (bits >> start) & ((static_cast<T>(1) << len) - 1);
+16535: }
+16535: 
+16535: }
+16535: 
+16535: using namespace Interval_NS;
+16535: using namespace Boundary_NS;
+16535: 
+16535: 
+16535: template <typename Policy>
+16535: class Interval_Info_Null {
+16535: public:
+16535:   enum const_bool_value_may_be_empty { may_be_empty = (Policy::may_be_empty) };
+16535:   enum const_bool_value_may_contain_infinity { may_contain_infinity = (Policy::may_contain_infinity) };
+16535:   enum const_bool_value_check_inexact { check_inexact = (Policy::check_inexact) };
+16535:   enum const_bool_value_store_special { store_special = (false) };
+16535:   enum const_bool_value_store_open { store_open = (false) };
+16535:   enum const_bool_value_cache_empty { cache_empty = (false) };
+16535:   enum const_bool_value_cache_singleton { cache_singleton = (false) };
+16535:   Interval_Info_Null() {
+16535:   }
+16535:   void clear() {
+16535:   }
+16535:   void clear_boundary_properties(Boundary_Type) {
+16535:   }
+16535: 
+16535:   template <typename Property>
+16535:   void set_boundary_property(Boundary_Type, const Property&, typename Property::Value = Property::default_value) {
+16535:   }
+16535:   template <typename Property>
+16535:   typename Property::Value get_boundary_property(Boundary_Type, const Property&) const {
+16535:     return Property::unsupported_value;
+16535:   }
+16535:   template <typename Property>
+16535:   void set_interval_property(const Property&, typename Property::Value = Property::default_value) {
+16535:   }
+16535:   template <typename Property>
+16535:   typename Property::Value get_interval_property(const Property&) const {
+16535:     return Property::unsupported_value;
+16535:   }
+16535: 
+16535: 
+16535:   void m_swap(Interval_Info_Null& y);
+16535: 
+16535:   void ascii_dump(std::ostream& s) const;
+16535:   bool ascii_load(std::istream& s);
+16535: };
+16535: 
+16535: template <typename Policy>
+16535: class Interval_Info_Null_Open : public Interval_Info_Null<Policy> {
+16535: public:
+16535:   enum const_bool_value_store_open { store_open = (true) };
+16535:   Interval_Info_Null_Open(bool o)
+16535:     : open(o) {
+16535:   }
+16535:   bool get_boundary_property(Boundary_Type,
+16535:                              const Boundary_NS::Property& p) const {
+16535:     if (p.type == Boundary_NS::Property::OPEN_) {
+16535:       return open;
+16535:     }
+16535:     else {
+16535:       return Boundary_NS::Property::unsupported_value;
+16535:     }
+16535:   }
+16535: 
+16535:   void ascii_dump(std::ostream& s) const;
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: private:
+16535:   bool open;
+16535: };
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: class Interval_Info_Bitset {
+16535: public:
+16535:   enum const_bool_value_may_be_empty { may_be_empty = (Policy::may_be_empty) };
+16535:   enum const_bool_value_may_contain_infinity { may_contain_infinity = (Policy::may_contain_infinity) };
+16535:   enum const_bool_value_check_inexact { check_inexact = (Policy::check_inexact) };
+16535:   enum const_bool_value_store_special { store_special = (Policy::store_special) };
+16535:   enum const_bool_value_store_open { store_open = (Policy::store_open) };
+16535:   enum const_bool_value_cache_empty { cache_empty = (Policy::cache_empty) };
+16535:   enum const_bool_value_cache_singleton { cache_singleton = (Policy::cache_singleton) };
+16535:   enum anonymous_enum_lower_special_bit { lower_special_bit = (Policy::next_bit) };
+16535:   enum anonymous_enum_lower_open_bit { lower_open_bit = (lower_special_bit + (store_special ? 1 : 0)) };
+16535:   enum anonymous_enum_upper_special_bit { upper_special_bit = (lower_open_bit + (store_open ? 1 : 0)) };
+16535:   enum anonymous_enum_upper_open_bit { upper_open_bit = (upper_special_bit + (store_special ? 1 : 0)) };
+16535:   enum anonymous_enum_cardinality_is_bit { cardinality_is_bit = (upper_open_bit + (store_open ? 1 : 0)) };
+16535:   enum anonymous_enum_cardinality_0_bit { cardinality_0_bit = (cardinality_is_bit + ((cache_empty || cache_singleton) ? 1 : 0)) }
+16535:                                                                ;
+16535:   enum anonymous_enum_cardinality_1_bit { cardinality_1_bit = (cardinality_0_bit + (cache_empty ? 1 : 0)) };
+16535:   enum anonymous_enum_next_bit { next_bit = (cardinality_1_bit + (cache_singleton ? 1 : 0)) };
+16535: 
+16535:   Interval_Info_Bitset() {
+16535: 
+16535: 
+16535:     clear();
+16535:   }
+16535: 
+16535:   void clear() {
+16535:     reset_bits(bitset);
+16535:   }
+16535:   void clear_boundary_properties(Boundary_Type t) {
+16535:     set_boundary_property(t, SPECIAL, false);
+16535:     set_boundary_property(t, OPEN, false);
+16535:   }
+16535:   void set_boundary_property(Boundary_Type t,
+16535:                              const Boundary_NS::Property& p,
+16535:                              bool value = true) {
+16535:     switch (p.type) {
+16535:     case Boundary_NS::Property::SPECIAL_:
+16535:       if (store_special) {
+16535:         if (t == LOWER) {
+16535:           set_bit(bitset, lower_special_bit, value);
+16535:         }
+16535:         else {
+16535:           set_bit(bitset, upper_special_bit, value);
+16535:         }
+16535:       }
+16535:       break;
+16535:     case Boundary_NS::Property::OPEN_:
+16535:       if (store_open) {
+16535:         if (t == LOWER) {
+16535:           set_bit(bitset, lower_open_bit, value);
+16535:         }
+16535:         else {
+16535:           set_bit(bitset, upper_open_bit, value);
+16535:         }
+16535:       }
+16535:       break;
+16535:     default:
+16535:       break;
+16535:     }
+16535:   }
+16535:   bool get_boundary_property(Boundary_Type t, const Boundary_NS::Property& p) const {
+16535:     switch (p.type) {
+16535:     case Boundary_NS::Property::SPECIAL_:
+16535:       if (!store_special) {
+16535:         return false;
+16535:       }
+16535:       if (t == LOWER) {
+16535:         return get_bit(bitset, lower_special_bit);
+16535:       }
+16535:       else {
+16535:         return get_bit(bitset, upper_special_bit);
+16535:       }
+16535:     case Boundary_NS::Property::OPEN_:
+16535:       if (!store_open) {
+16535:         return false;
+16535:       }
+16535:       else if (t == LOWER) {
+16535:         return get_bit(bitset, lower_open_bit);
+16535:       }
+16535:       else {
+16535:         return get_bit(bitset, upper_open_bit);
+16535:       }
+16535:     default:
+16535:       return false;
+16535:     }
+16535:   }
+16535:   void set_interval_property(const Interval_NS::Property& p, bool value = true) {
+16535:     switch (p.type) {
+16535:     case Interval_NS::Property::CARDINALITY_0_:
+16535:       if (cache_empty) {
+16535:         set_bit(bitset, cardinality_0_bit, value);
+16535:       }
+16535:       break;
+16535:     case Interval_NS::Property::CARDINALITY_1_:
+16535:       if (cache_singleton) {
+16535:         set_bit(bitset, cardinality_1_bit, value);
+16535:       }
+16535:       break;
+16535:     case Interval_NS::Property::CARDINALITY_IS_:
+16535:       if (cache_empty || cache_singleton) {
+16535:         set_bit(bitset, cardinality_is_bit, value);
+16535:       }
+16535:       break;
+16535:     default:
+16535:       break;
+16535:     }
+16535:   }
+16535:   bool get_interval_property(Interval_NS::Property p) const {
+16535:     switch (p.type) {
+16535:     case Interval_NS::Property::CARDINALITY_0_:
+16535:       return cache_empty && get_bit(bitset, cardinality_0_bit);
+16535:     case Interval_NS::Property::CARDINALITY_1_:
+16535:       return cache_singleton && get_bit(bitset, cardinality_1_bit);
+16535:     case Interval_NS::Property::CARDINALITY_IS_:
+16535:       return (cache_empty || cache_singleton)
+16535:         && get_bit(bitset, cardinality_is_bit);
+16535:     default:
+16535:       return false;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   void m_swap(Interval_Info_Bitset& y);
+16535: 
+16535:   void ascii_dump(std::ostream& s) const;
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: protected:
+16535:   T bitset;
+16535: };
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Interval_Info_inlines.hh" 1
+16535: # 29 "../../src/Interval_Info_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Policy>
+16535: inline void
+16535: Interval_Info_Null<Policy>::m_swap(Interval_Info_Null<Policy>&) {
+16535: }
+16535: 
+16535: template <typename Policy>
+16535: inline void
+16535: Interval_Info_Null<Policy>::ascii_dump(std::ostream&) const {
+16535: }
+16535: 
+16535: template <typename Policy>
+16535: inline bool
+16535: Interval_Info_Null<Policy>::ascii_load(std::istream&) {
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename Policy>
+16535: inline void
+16535: Interval_Info_Null_Open<Policy>::ascii_dump(std::ostream& s) const {
+16535:   s << (open ? "open" : "closed");
+16535: }
+16535: 
+16535: template <typename Policy>
+16535: inline bool
+16535: Interval_Info_Null_Open<Policy>::ascii_load(std::istream& s) {
+16535:   std::string str;
+16535:   if (!(s >> str)) {
+16535:     return false;
+16535:   }
+16535:   if (str == "open") {
+16535:     open = true;
+16535:     return true;
+16535:   }
+16535:   if (str == "closed") {
+16535:     open = false;
+16535:     return true;
+16535:   }
+16535:   return false;
+16535: }
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline void
+16535: Interval_Info_Bitset<T, Policy>::m_swap(Interval_Info_Bitset<T, Policy>& y) {
+16535:   using std::swap;
+16535:   swap(bitset, y.bitset);
+16535: }
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline void
+16535: Interval_Info_Bitset<T, Policy>::ascii_dump(std::ostream& s) const {
+16535:   const std::ios::fmtflags old_flags = s.setf(std::ios::hex,
+16535:                                               std::ios::basefield);
+16535:   s << bitset;
+16535:   s.flags(old_flags);
+16535: }
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline bool
+16535: Interval_Info_Bitset<T, Policy>::ascii_load(std::istream& s) {
+16535:   const std::ios::fmtflags old_flags = s.setf(std::ios::hex,
+16535:                                               std::ios::basefield);
+16535:   s >> bitset;
+16535:   s.flags(old_flags);
+16535:   return !s.fail();
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Policy>
+16535: inline void
+16535: swap(Interval_Info_Null<Policy>& x, Interval_Info_Null<Policy>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T, typename Policy>
+16535: inline void
+16535: swap(Interval_Info_Bitset<T, Policy>& x, Interval_Info_Bitset<T, Policy>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 300 "../../src/Interval_Info_defs.hh" 2
+16535: # 33 "../../src/Interval_defs.hh" 2
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: enum Ternary { T_YES, T_NO, T_MAYBE };
+16535: 
+16535: inline I_Result
+16535: combine(Result l, Result u) {
+16535:   const unsigned res
+16535:     = static_cast<unsigned>(l) | (static_cast<unsigned>(u) << 6);
+16535:   return static_cast<I_Result>(res);
+16535: }
+16535: 
+16535: struct Interval_Base {
+16535: };
+16535: 
+16535: using namespace Boundary_NS;
+16535: using namespace Interval_NS;
+16535: 
+16535: template <typename T, typename Enable = void>
+16535: struct Is_Singleton : public Is_Native_Or_Checked<T> {};
+16535: 
+16535: template <typename T>
+16535: struct Is_Interval : public Is_Same_Or_Derived<Interval_Base, T> {};
+16535: # 80 "../../src/Interval_defs.hh"
+16535: template <typename Boundary, typename Info>
+16535: class Interval : public Interval_Base, private Info {
+16535: private:
+16535:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_86 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!Info::store_special || !std::numeric_limits<Boundary>::has_infinity)>) }
+16535: 
+16535: 
+16535:                                                                      ;
+16535:   Info& w_info() const {
+16535:     return const_cast<Interval&>(*this);
+16535:   }
+16535: 
+16535: public:
+16535:   typedef Boundary boundary_type;
+16535:   typedef Info info_type;
+16535: 
+16535:   typedef Interval_NS::Property Property;
+16535: 
+16535:   template <typename T>
+16535:   typename Enable_If<Is_Singleton<T>::value || Is_Interval<T>::value, Interval&>::type
+16535:   operator=(const T& x) {
+16535:     assign(x);
+16535:     return *this;
+16535:   }
+16535: 
+16535:   template <typename T>
+16535:   typename Enable_If<Is_Singleton<T>::value || Is_Interval<T>::value, Interval&>::type
+16535:   operator+=(const T& x) {
+16535:     add_assign(*this, x);
+16535:     return *this;
+16535:   }
+16535:   template <typename T>
+16535:   typename Enable_If<Is_Singleton<T>::value || Is_Interval<T>::value, Interval&>::type
+16535:   operator-=(const T& x) {
+16535:     sub_assign(*this, x);
+16535:     return *this;
+16535:   }
+16535:   template <typename T>
+16535:   typename Enable_If<Is_Singleton<T>::value || Is_Interval<T>::value, Interval&>::type
+16535:   operator*=(const T& x) {
+16535:     mul_assign(*this, x);
+16535:     return *this;
+16535:   }
+16535:   template <typename T>
+16535:   typename Enable_If<Is_Singleton<T>::value || Is_Interval<T>::value, Interval&>::type
+16535:   operator/=(const T& x) {
+16535:     div_assign(*this, x);
+16535:     return *this;
+16535:   }
+16535: 
+16535: 
+16535:   void m_swap(Interval& y);
+16535: 
+16535:   Info& info() {
+16535:     return *this;
+16535:   }
+16535: 
+16535:   const Info& info() const {
+16535:     return *this;
+16535:   }
+16535: 
+16535:   Boundary& lower() {
+16535:     return lower_;
+16535:   }
+16535: 
+16535:   const Boundary& lower() const {
+16535:     return lower_;
+16535:   }
+16535: 
+16535:   Boundary& upper() {
+16535:     return upper_;
+16535:   }
+16535: 
+16535:   const Boundary& upper() const {
+16535:     return upper_;
+16535:   }
+16535: 
+16535:   I_Constraint<boundary_type> lower_constraint() const {
+16535:     ((void) 0);
+16535:     if (info().get_boundary_property(LOWER, SPECIAL)) {
+16535:       return I_Constraint<boundary_type>();
+16535:     }
+16535:     return i_constraint(lower_is_open() ? GREATER_THAN : GREATER_OR_EQUAL,
+16535:                         lower(), true);
+16535:   }
+16535:   I_Constraint<boundary_type> upper_constraint() const {
+16535:     ((void) 0);
+16535:     if (info().get_boundary_property(UPPER, SPECIAL)) {
+16535:       return I_Constraint<boundary_type>();
+16535:     }
+16535:     return i_constraint(upper_is_open() ? LESS_THAN : LESS_OR_EQUAL,
+16535:                         upper(), true);
+16535:   }
+16535: 
+16535:   bool is_empty() const {
+16535:     return lt(UPPER, upper(), info(), LOWER, lower(), info());
+16535:   }
+16535: 
+16535:   bool check_empty(I_Result r) const {
+16535:     return (r & I_ANY) == I_EMPTY
+16535:       || ((r & I_ANY) != I_NOT_EMPTY && is_empty());
+16535:   }
+16535: 
+16535:   bool is_singleton() const {
+16535:     return eq(LOWER, lower(), info(), UPPER, upper(), info());
+16535:   }
+16535: 
+16535:   bool lower_is_open() const {
+16535:     ((void) 0);
+16535:     return is_open(LOWER, lower(), info());
+16535:   }
+16535: 
+16535:   bool upper_is_open() const {
+16535:     ((void) 0);
+16535:     return is_open(UPPER, upper(), info());
+16535:   }
+16535: 
+16535:   bool lower_is_boundary_infinity() const {
+16535:     ((void) 0);
+16535:     return Boundary_NS::is_boundary_infinity(LOWER, lower(), info());
+16535:   }
+16535: 
+16535:   bool upper_is_boundary_infinity() const {
+16535:     ((void) 0);
+16535:     return Boundary_NS::is_boundary_infinity(UPPER, upper(), info());
+16535:   }
+16535: 
+16535:   bool lower_is_domain_inf() const {
+16535:     ((void) 0);
+16535:     return Boundary_NS::is_domain_inf(LOWER, lower(), info());
+16535:   }
+16535: 
+16535:   bool upper_is_domain_sup() const {
+16535:     ((void) 0);
+16535:     return Boundary_NS::is_domain_sup(UPPER, upper(), info());
+16535:   }
+16535: 
+16535:   bool is_bounded() const {
+16535:     ((void) 0);
+16535:     return !lower_is_boundary_infinity() && !upper_is_boundary_infinity();
+16535:   }
+16535: 
+16535:   bool is_universe() const {
+16535:     ((void) 0);
+16535:     return lower_is_domain_inf() && upper_is_domain_sup();
+16535:   }
+16535: 
+16535:   I_Result lower_extend() {
+16535:     info().clear_boundary_properties(LOWER);
+16535:     set_unbounded(LOWER, lower(), info());
+16535:     return I_ANY;
+16535:   }
+16535: 
+16535:   template <typename C>
+16535:   typename Enable_If<Is_Same_Or_Derived<I_Constraint_Base, C>::value, I_Result>::type
+16535:   lower_extend(const C& c);
+16535: 
+16535:   I_Result upper_extend() {
+16535:     info().clear_boundary_properties(UPPER);
+16535:     set_unbounded(UPPER, upper(), info());
+16535:     return I_ANY;
+16535:   }
+16535: 
+16535:   template <typename C>
+16535:   typename Enable_If<Is_Same_Or_Derived<I_Constraint_Base, C>::value, I_Result>::type
+16535:   upper_extend(const C& c);
+16535: 
+16535:   I_Result build() {
+16535:     return assign(UNIVERSE);
+16535:   }
+16535: 
+16535:   template <typename C>
+16535:   typename Enable_If<Is_Same_Or_Derived<I_Constraint_Base, C>::value, I_Result>::type
+16535:   build(const C& c) {
+16535:     Relation_Symbol rs;
+16535:     switch (c.rel()) {
+16535:     case V_LGE:
+16535:     case V_GT_MINUS_INFINITY:
+16535:     case V_LT_PLUS_INFINITY:
+16535:       return assign(UNIVERSE);
+16535:     default:
+16535:       return assign(EMPTY);
+16535:     case V_LT:
+16535:     case V_LE:
+16535:     case V_GT:
+16535:     case V_GE:
+16535:     case V_EQ:
+16535:     case V_NE:
+16535:       assign(UNIVERSE);
+16535:       rs = static_cast<Relation_Symbol>(c.rel());
+16535:       return refine_existential(rs, c.value());
+16535:     }
+16535:   }
+16535: 
+16535:   template <typename C1, typename C2>
+16535:   typename Enable_If<Is_Same_Or_Derived<I_Constraint_Base, C1>::value
+16535:                      &&
+16535:                      Is_Same_Or_Derived<I_Constraint_Base, C2>::value,
+16535:                      I_Result>::type
+16535:   build(const C1& c1, const C2& c2) {
+16535:     switch (c1.rel()) {
+16535:     case V_LGE:
+16535:       return build(c2);
+16535:     case V_NAN:
+16535:       return assign(EMPTY);
+16535:     default:
+16535:       break;
+16535:     }
+16535:     switch (c2.rel()) {
+16535:     case V_LGE:
+16535:       return build(c1);
+16535:     case V_NAN:
+16535:       return assign(EMPTY);
+16535:     default:
+16535:       break;
+16535:     }
+16535:     build(c1);
+16535:     const I_Result r = add_constraint(c2);
+16535:     return r - (I_CHANGED | I_UNCHANGED);
+16535:   }
+16535: 
+16535:   template <typename C>
+16535:   typename Enable_If<Is_Same_Or_Derived<I_Constraint_Base, C>::value, I_Result>::type
+16535:   add_constraint(const C& c) {
+16535:     Interval x;
+16535:     x.build(c);
+16535:     return intersect_assign(x);
+16535:   }
+16535: 
+16535:   I_Result assign(Degenerate_Element e) {
+16535:     I_Result r;
+16535:     info().clear();
+16535:     switch (e) {
+16535:     case EMPTY:
+16535:       lower_ = 1;
+16535:       upper_ = 0;
+16535:       r = I_EMPTY | I_EXACT;
+16535:       break;
+16535:     case UNIVERSE:
+16535:       set_unbounded(LOWER, lower(), info());
+16535:       set_unbounded(UPPER, upper(), info());
+16535:       r = I_UNIVERSE | I_EXACT;
+16535:       break;
+16535:     default:
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       r = I_EMPTY;
+16535:       break;
+16535:     }
+16535:     ((void) 0);
+16535:     return r;
+16535:   }
+16535: 
+16535:   template <typename From>
+16535:   typename Enable_If<Is_Special<From>::value, I_Result>::type
+16535:   assign(const From&) {
+16535:     info().clear();
+16535:     Result rl;
+16535:     Result ru;
+16535:     switch (From::vclass) {
+16535:     case VC_MINUS_INFINITY:
+16535:       rl = Boundary_NS::set_minus_infinity(LOWER, lower(), info());
+16535:       ru = Boundary_NS::set_minus_infinity(UPPER, upper(), info());
+16535:       break;
+16535:     case VC_PLUS_INFINITY:
+16535:       rl = Boundary_NS::set_plus_infinity(LOWER, lower(), info());
+16535:       ru = Boundary_NS::set_plus_infinity(UPPER, upper(), info());
+16535:       break;
+16535:     default:
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       rl = V_NAN;
+16535:       ru = V_NAN;
+16535:       break;
+16535:     }
+16535:     ((void) 0);
+16535:     return combine(rl, ru);
+16535:   }
+16535: 
+16535:   I_Result set_infinities() {
+16535:     info().clear();
+16535:     Result rl = Boundary_NS::set_minus_infinity(LOWER, lower(), info());
+16535:     Result ru = Boundary_NS::set_plus_infinity(UPPER, upper(), info());
+16535:     ((void) 0);
+16535:     return combine(rl, ru);
+16535:   }
+16535: 
+16535:   static bool is_always_topologically_closed() {
+16535:     return !Info::store_open;
+16535:   }
+16535: 
+16535:   bool is_topologically_closed() const {
+16535:     ((void) 0);
+16535:     return is_always_topologically_closed()
+16535:       || is_empty()
+16535:       || ((lower_is_boundary_infinity() || !lower_is_open())
+16535:           && (upper_is_boundary_infinity() || !upper_is_open()));
+16535:   }
+16535: 
+16535: 
+16535:   void topological_closure_assign() {
+16535:     if (!Info::store_open || is_empty()) {
+16535:       return;
+16535:     }
+16535:     if (lower_is_open() && !lower_is_boundary_infinity()) {
+16535:       info().set_boundary_property(LOWER, OPEN, false);
+16535:     }
+16535:     if (upper_is_open() && !upper_is_boundary_infinity()) {
+16535:       info().set_boundary_property(UPPER, OPEN, false);
+16535:     }
+16535:   }
+16535: 
+16535:   void remove_inf() {
+16535:     ((void) 0);
+16535:     if (!Info::store_open) {
+16535:       return;
+16535:     }
+16535:     info().set_boundary_property(LOWER, OPEN, true);
+16535:   }
+16535: 
+16535:   void remove_sup() {
+16535:     ((void) 0);
+16535:     if (!Info::store_open) {
+16535:       return;
+16535:     }
+16535:     info().set_boundary_property(UPPER, OPEN, true);
+16535:   }
+16535: 
+16535:   int infinity_sign() const {
+16535:     ((void) 0);
+16535:     if (is_reverse_infinity(LOWER, lower(), info())) {
+16535:       return 1;
+16535:     }
+16535:     else if (is_reverse_infinity(UPPER, upper(), info())) {
+16535:       return -1;
+16535:     }
+16535:     else {
+16535:       return 0;
+16535:     }
+16535:   }
+16535: 
+16535:   bool contains_integer_point() const {
+16535:     ((void) 0);
+16535:     if (is_empty()) {
+16535:       return false;
+16535:     }
+16535:     if (!is_bounded()) {
+16535:       return true;
+16535:     }
+16535:     Boundary l;
+16535:     if (lower_is_open()) {
+16535:       add_assign_r(l, lower(), Boundary(1), ROUND_DOWN);
+16535:       floor_assign_r(l, l, ROUND_DOWN);
+16535:     }
+16535:     else {
+16535:       ceil_assign_r(l, lower(), ROUND_DOWN);
+16535:     }
+16535:     Boundary u;
+16535:     if (upper_is_open()) {
+16535:       sub_assign_r(u, upper(), Boundary(1), ROUND_UP);
+16535:       ceil_assign_r(u, u, ROUND_UP);
+16535:     }
+16535:     else {
+16535:       floor_assign_r(u, upper(), ROUND_UP);
+16535:     }
+16535:     return u >= l;
+16535:   }
+16535: 
+16535:   void drop_some_non_integer_points() {
+16535:     if (is_empty()) {
+16535:       return;
+16535:     }
+16535:     if (lower_is_open() && !lower_is_boundary_infinity()) {
+16535:       add_assign_r(lower(), lower(), Boundary(1), ROUND_DOWN);
+16535:       floor_assign_r(lower(), lower(), ROUND_DOWN);
+16535:       info().set_boundary_property(LOWER, OPEN, false);
+16535:     }
+16535:     else {
+16535:       ceil_assign_r(lower(), lower(), ROUND_DOWN);
+16535:     }
+16535:     if (upper_is_open() && !upper_is_boundary_infinity()) {
+16535:       sub_assign_r(upper(), upper(), Boundary(1), ROUND_UP);
+16535:       ceil_assign_r(upper(), upper(), ROUND_UP);
+16535:       info().set_boundary_property(UPPER, OPEN, false);
+16535:     }
+16535:     else {
+16535:       floor_assign_r(upper(), upper(), ROUND_UP);
+16535:     }
+16535:   }
+16535: 
+16535:   template <typename From>
+16535:   typename Enable_If<Is_Singleton<From>::value || Is_Interval<From>::value, I_Result>::type
+16535:   wrap_assign(Bounded_Integer_Type_Width w,
+16535:               Bounded_Integer_Type_Representation r,
+16535:               const From& refinement) {
+16535:     if (is_empty()) {
+16535:       return I_EMPTY;
+16535:     }
+16535:     if (lower_is_boundary_infinity() || upper_is_boundary_infinity()) {
+16535:       return assign(refinement);
+16535:     }
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Boundary> holder_u; Boundary& u = holder_u.item();
+16535:     Result result = sub_2exp_assign_r(u, upper(), w, ROUND_UP);
+16535:     if (result_overflow(result) == 0 && u > lower()) {
+16535:       return assign(refinement);
+16535:     }
+16535:     info().clear();
+16535:     switch (r) {
+16535:     case UNSIGNED:
+16535:       umod_2exp_assign(LOWER, lower(), info(),
+16535:                        LOWER, lower(), info(), w);
+16535:       umod_2exp_assign(UPPER, upper(), info(),
+16535:                        UPPER, upper(), info(), w);
+16535:       break;
+16535:     case SIGNED_2_COMPLEMENT:
+16535:       smod_2exp_assign(LOWER, lower(), info(),
+16535:                        LOWER, lower(), info(), w);
+16535:       smod_2exp_assign(UPPER, upper(), info(),
+16535:                        UPPER, upper(), info(), w);
+16535:       break;
+16535:     default:
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       break;
+16535:     }
+16535:     if (le(LOWER, lower(), info(), UPPER, upper(), info())) {
+16535:       return intersect_assign(refinement);
+16535:     }
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Interval> holder_tmp; Interval& tmp = holder_tmp.item();
+16535:     tmp.info().clear();
+16535:     Boundary_NS::assign(LOWER, tmp.lower(), tmp.info(),
+16535:                         LOWER, lower(), info());
+16535:     set_unbounded(UPPER, tmp.upper(), tmp.info());
+16535:     tmp.intersect_assign(refinement);
+16535:     lower_extend();
+16535:     intersect_assign(refinement);
+16535:     return join_assign(tmp);
+16535:   }
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535:   void ascii_dump(std::ostream& s) const;
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535:   bool OK() const {
+16535:     if (!Info::may_be_empty && is_empty()) {
+16535: 
+16535: 
+16535: 
+16535:       return false;
+16535:     }
+16535: 
+16535:     if (is_open(LOWER, lower(), info())) {
+16535:       if (is_plus_infinity(LOWER, lower(), info())) {
+16535: 
+16535: 
+16535: 
+16535:       }
+16535:     }
+16535:     else if (!Info::may_contain_infinity
+16535:              && (is_minus_infinity(LOWER, lower(), info())
+16535:                  || is_plus_infinity(LOWER, lower(), info()))) {
+16535: 
+16535: 
+16535: 
+16535:       return false;
+16535:     }
+16535:     if (!info().get_boundary_property(LOWER, SPECIAL)) {
+16535:       if (is_not_a_number(lower())) {
+16535: 
+16535: 
+16535: 
+16535:         return false;
+16535:       }
+16535:     }
+16535: 
+16535:     if (is_open(UPPER, upper(), info())) {
+16535:       if (is_minus_infinity(UPPER, upper(), info())) {
+16535: 
+16535: 
+16535: 
+16535:       }
+16535:     }
+16535:     else if (!Info::may_contain_infinity
+16535:              && (is_minus_infinity(UPPER, upper(), info())
+16535:                  || is_plus_infinity(UPPER, upper(), info()))) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       return false;
+16535:     }
+16535:     if (!info().get_boundary_property(UPPER, SPECIAL)) {
+16535:       if (is_not_a_number(upper())) {
+16535: 
+16535: 
+16535: 
+16535:         return false;
+16535:       }
+16535:     }
+16535: 
+16535: 
+16535:     return true;
+16535:   }
+16535: 
+16535:   Interval() {
+16535:   }
+16535: 
+16535:   template <typename T>
+16535:   explicit Interval(const T& x) {
+16535:     assign(x);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   explicit Interval(const char* s);
+16535: 
+16535:   template <typename T>
+16535:   typename Enable_If<Is_Singleton<T>::value
+16535:                      || Is_Interval<T>::value, bool>::type
+16535:   contains(const T& y) const;
+16535: 
+16535:   template <typename T>
+16535:   typename Enable_If<Is_Singleton<T>::value
+16535:                      || Is_Interval<T>::value, bool>::type
+16535:   strictly_contains(const T& y) const;
+16535: 
+16535:   template <typename T>
+16535:   typename Enable_If<Is_Singleton<T>::value
+16535:                      || Is_Interval<T>::value, bool>::type
+16535:   is_disjoint_from(const T& y) const;
+16535: 
+16535: 
+16535:   template <typename From>
+16535:   typename Enable_If<Is_Singleton<From>::value
+16535:                      || Is_Interval<From>::value, I_Result>::type
+16535:   assign(const From& x);
+16535: 
+16535:   template <typename Type>
+16535:   typename Enable_If<Is_Singleton<Type>::value
+16535:                      || Is_Interval<Type>::value, bool>::type
+16535:   can_be_exactly_joined_to(const Type& x) const;
+16535: 
+16535:   template <typename From>
+16535:   typename Enable_If<Is_Singleton<From>::value
+16535:                      || Is_Interval<From>::value, I_Result>::type
+16535:   join_assign(const From& x);
+16535: 
+16535:   template <typename From1, typename From2>
+16535:   typename Enable_If<((Is_Singleton<From1>::value
+16535:                        || Is_Interval<From1>::value)
+16535:                       && (Is_Singleton<From2>::value
+16535:                           || Is_Interval<From2>::value)), I_Result>::type
+16535:   join_assign(const From1& x, const From2& y);
+16535: 
+16535:   template <typename From>
+16535:   typename Enable_If<Is_Singleton<From>::value
+16535:                      || Is_Interval<From>::value, I_Result>::type
+16535:   intersect_assign(const From& x);
+16535: 
+16535:   template <typename From1, typename From2>
+16535:   typename Enable_If<((Is_Singleton<From1>::value
+16535:                        || Is_Interval<From1>::value)
+16535:                       && (Is_Singleton<From2>::value
+16535:                           || Is_Interval<From2>::value)), I_Result>::type
+16535:   intersect_assign(const From1& x, const From2& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename From>
+16535:   typename Enable_If<Is_Singleton<From>::value
+16535:                      || Is_Interval<From>::value, I_Result>::type
+16535:   difference_assign(const From& x);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename From1, typename From2>
+16535:   typename Enable_If<((Is_Singleton<From1>::value
+16535:                        || Is_Interval<From1>::value)
+16535:                       && (Is_Singleton<From2>::value
+16535:                           || Is_Interval<From2>::value)), I_Result>::type
+16535:   difference_assign(const From1& x, const From2& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename From>
+16535:   typename Enable_If<Is_Singleton<From>::value
+16535:                      || Is_Interval<From>::value, I_Result>::type
+16535:   lower_approximation_difference_assign(const From& x);
+16535: # 685 "../../src/Interval_defs.hh"
+16535:   template <typename From>
+16535:   typename Enable_If<Is_Interval<From>::value, bool>::type
+16535:   simplify_using_context_assign(const From& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename From>
+16535:   typename Enable_If<Is_Interval<From>::value, void>::type
+16535:   empty_intersection_assign(const From& y);
+16535: # 712 "../../src/Interval_defs.hh"
+16535:   template <typename From>
+16535:   typename Enable_If<Is_Singleton<From>::value
+16535:                      || Is_Interval<From>::value, I_Result>::type
+16535:   refine_existential(Relation_Symbol rel, const From& x);
+16535: # 732 "../../src/Interval_defs.hh"
+16535:   template <typename From>
+16535:   typename Enable_If<Is_Singleton<From>::value
+16535:                      || Is_Interval<From>::value, I_Result>::type
+16535:   refine_universal(Relation_Symbol rel, const From& x);
+16535: 
+16535:   template <typename From>
+16535:   typename Enable_If<Is_Singleton<From>::value
+16535:                      || Is_Interval<From>::value, I_Result>::type
+16535:   neg_assign(const From& x);
+16535: 
+16535:   template <typename From1, typename From2>
+16535:   typename Enable_If<((Is_Singleton<From1>::value || Is_Interval<From1>::value)
+16535:                       && (Is_Singleton<From2>::value || Is_Interval<From2>::value)), I_Result>::type
+16535:   add_assign(const From1& x, const From2& y);
+16535: 
+16535:   template <typename From1, typename From2>
+16535:   typename Enable_If<((Is_Singleton<From1>::value || Is_Interval<From1>::value)
+16535:                       && (Is_Singleton<From2>::value || Is_Interval<From2>::value)), I_Result>::type
+16535:   sub_assign(const From1& x, const From2& y);
+16535: 
+16535:   template <typename From1, typename From2>
+16535:   typename Enable_If<((Is_Singleton<From1>::value || Is_Interval<From1>::value)
+16535:                       && (Is_Singleton<From2>::value || Is_Interval<From2>::value)), I_Result>::type
+16535:   mul_assign(const From1& x, const From2& y);
+16535: 
+16535:   template <typename From1, typename From2>
+16535:   typename Enable_If<((Is_Singleton<From1>::value || Is_Interval<From1>::value)
+16535:                       && (Is_Singleton<From2>::value || Is_Interval<From2>::value)), I_Result>::type
+16535:   div_assign(const From1& x, const From2& y);
+16535: 
+16535:   template <typename From, typename Iterator>
+16535:   typename Enable_If<Is_Interval<From>::value, void>::type
+16535:   CC76_widening_assign(const From& y, Iterator first, Iterator last);
+16535: 
+16535: private:
+16535:   Boundary lower_;
+16535:   Boundary upper_;
+16535: };
+16535: 
+16535: 
+16535: 
+16535: template <typename Boundary, typename Info>
+16535: void swap(Interval<Boundary, Info>& x, Interval<Boundary, Info>& y);
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Interval_inlines.hh" 1
+16535: # 27 "../../src/Interval_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Boundary, typename Info>
+16535: inline memory_size_type
+16535: Interval<Boundary, Info>::external_memory_in_bytes() const {
+16535:   return Parma_Polyhedra_Library::external_memory_in_bytes(lower())
+16535:     + Parma_Polyhedra_Library::external_memory_in_bytes(upper());
+16535: }
+16535: 
+16535: template <typename Boundary, typename Info>
+16535: inline memory_size_type
+16535: Interval<Boundary, Info>::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: template <typename Boundary, typename Info>
+16535: inline void
+16535: Interval<Boundary, Info>::m_swap(Interval<Boundary, Info>& y) {
+16535:   using std::swap;
+16535:   swap(lower(), y.lower());
+16535:   swap(upper(), y.upper());
+16535:   swap(info(), y.info());
+16535: }
+16535: 
+16535: template <typename Boundary, typename Info>
+16535: inline bool
+16535: f_is_empty(const Interval<Boundary, Info>& x) {
+16535:   return x.is_empty();
+16535: }
+16535: template <typename Boundary, typename Info>
+16535: inline bool
+16535: f_is_singleton(const Interval<Boundary, Info>& x) {
+16535:   return x.is_singleton();
+16535: }
+16535: template <typename Boundary, typename Info>
+16535: inline int
+16535: infinity_sign(const Interval<Boundary, Info>& x) {
+16535:   return x.infinity_sign();
+16535: }
+16535: 
+16535: namespace Interval_NS {
+16535: 
+16535: template <typename Boundary, typename Info>
+16535: inline const Boundary&
+16535: f_lower(const Interval<Boundary, Info>& x) {
+16535:   return x.lower();
+16535: }
+16535: template <typename Boundary, typename Info>
+16535: inline const Boundary&
+16535: f_upper(const Interval<Boundary, Info>& x) {
+16535:   return x.upper();
+16535: }
+16535: template <typename Boundary, typename Info>
+16535: inline const Info&
+16535: f_info(const Interval<Boundary, Info>& x) {
+16535:   return x.info();
+16535: }
+16535: 
+16535: struct Scalar_As_Interval_Policy {
+16535:   enum const_bool_value_may_be_empty { may_be_empty = (true) };
+16535:   enum const_bool_value_may_contain_infinity { may_contain_infinity = (true) };
+16535:   enum const_bool_value_check_inexact { check_inexact = (false) };
+16535: };
+16535: 
+16535: typedef Interval_Info_Null<Scalar_As_Interval_Policy>
+16535: Scalar_As_Interval_Info;
+16535: 
+16535: const Scalar_As_Interval_Info SCALAR_INFO;
+16535: 
+16535: typedef Interval_Info_Null_Open<Scalar_As_Interval_Policy>
+16535: Scalar_As_Interval_Info_Open;
+16535: 
+16535: template <typename T>
+16535: inline typename Enable_If<Is_Singleton<T>::value, const T&>::type
+16535: f_lower(const T& x) {
+16535:   return x;
+16535: }
+16535: template <typename T>
+16535: inline typename Enable_If<Is_Singleton<T>::value, const T&>::type
+16535: f_upper(const T& x) {
+16535:   return x;
+16535: }
+16535: template <typename T>
+16535: inline typename Enable_If<Is_Singleton<T>::value,
+16535:                           const Scalar_As_Interval_Info&>::type
+16535: f_info(const T&) {
+16535:   return SCALAR_INFO;
+16535: }
+16535: template <typename T>
+16535: inline typename Enable_If<Is_Singleton<T>::value,
+16535:                           Scalar_As_Interval_Info_Open>::type
+16535: f_info(const T&, bool open) {
+16535:   return Scalar_As_Interval_Info_Open(open);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Enable_If<Is_Singleton<T>::value, bool>::type
+16535: f_is_empty(const T& x) {
+16535:   return is_not_a_number(x);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Enable_If<Is_Singleton<T>::value, bool>::type
+16535: f_is_singleton(const T& x) {
+16535:   return !f_is_empty(x);
+16535: }
+16535: 
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Enable_If<Is_Singleton<T>::value
+16535:                           || Is_Interval<T>::value, bool>::type
+16535: is_singleton_integer(const T& x) {
+16535:   return is_singleton(x) && is_integer(f_lower(x));
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Enable_If<Is_Singleton<T>::value
+16535:                           || Is_Interval<T>::value, bool>::type
+16535: check_empty_arg(const T& x) {
+16535:   if (f_info(x).may_be_empty) {
+16535:     return f_is_empty(x);
+16535:   }
+16535:   else {
+16535:     ((void) 0);
+16535:     return false;
+16535:   }
+16535: }
+16535: 
+16535: template <typename T1, typename T2>
+16535: inline typename Enable_If<((Is_Singleton<T1>::value
+16535:                             || Is_Interval<T1>::value)
+16535:                            && (Is_Singleton<T2>::value
+16535:                                || Is_Interval<T2>::value)
+16535:                            && (Is_Interval<T1>::value
+16535:                                || Is_Interval<T2>::value)),
+16535:                           bool>::type
+16535: operator==(const T1& x, const T2& y) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   if (check_empty_arg(x)) {
+16535:     return check_empty_arg(y);
+16535:   }
+16535:   else if (check_empty_arg(y)) {
+16535:     return false;
+16535:   }
+16535:   return eq(LOWER, f_lower(x), f_info(x), LOWER, f_lower(y), f_info(y))
+16535:     && eq(UPPER, f_upper(x), f_info(x), UPPER, f_upper(y), f_info(y));
+16535: }
+16535: 
+16535: template <typename T1, typename T2>
+16535: inline typename Enable_If<((Is_Singleton<T1>::value
+16535:                             || Is_Interval<T1>::value)
+16535:                            && (Is_Singleton<T2>::value
+16535:                                || Is_Interval<T2>::value)
+16535:                            && (Is_Interval<T1>::value
+16535:                                || Is_Interval<T2>::value)),
+16535:                           bool>::type
+16535: operator!=(const T1& x, const T2& y) {
+16535:   return !(x == y);
+16535: }
+16535: 
+16535: template <typename Boundary, typename Info>
+16535: template <typename T>
+16535: inline typename Enable_If<Is_Singleton<T>::value
+16535:                           || Is_Interval<T>::value, bool>::type
+16535: Interval<Boundary, Info>::contains(const T& y) const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   if (check_empty_arg(y)) {
+16535:     return true;
+16535:   }
+16535:   if (check_empty_arg(*this)) {
+16535:     return false;
+16535:   }
+16535:   return le(LOWER, lower(), info(), LOWER, f_lower(y), f_info(y))
+16535:     && ge(UPPER, upper(), info(), UPPER, f_upper(y), f_info(y));
+16535: }
+16535: 
+16535: template <typename Boundary, typename Info>
+16535: template <typename T>
+16535: inline typename Enable_If<Is_Singleton<T>::value
+16535:                           || Is_Interval<T>::value, bool>::type
+16535: Interval<Boundary, Info>::strictly_contains(const T& y) const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   if (check_empty_arg(y)) {
+16535:     return !check_empty_arg(*this);
+16535:   }
+16535:   if (check_empty_arg(*this)) {
+16535:     return false;
+16535:   }
+16535:   return (lt(LOWER, lower(), info(), LOWER, f_lower(y), f_info(y))
+16535:           && ge(UPPER, upper(), info(), UPPER, f_upper(y), f_info(y)))
+16535:     || (le(LOWER, lower(), info(), LOWER, f_lower(y), f_info(y))
+16535:         && gt(UPPER, upper(), info(), UPPER, f_upper(y), f_info(y)));
+16535: }
+16535: 
+16535: template <typename Boundary, typename Info>
+16535: template <typename T>
+16535: inline typename Enable_If<Is_Singleton<T>::value
+16535:                           || Is_Interval<T>::value, bool>::type
+16535: Interval<Boundary, Info>::is_disjoint_from(const T& y) const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   if (check_empty_arg(*this) || check_empty_arg(y)) {
+16535:     return true;
+16535:   }
+16535:   return gt(LOWER, lower(), info(), UPPER, f_upper(y), f_info(y))
+16535:     || lt(UPPER, upper(), info(), LOWER, f_lower(y), f_info(y));
+16535: }
+16535: 
+16535: template <typename To_Boundary, typename To_Info>
+16535: template <typename From>
+16535: inline typename Enable_If<Is_Singleton<From>::value
+16535:                           || Is_Interval<From>::value, I_Result>::type
+16535: Interval<To_Boundary, To_Info>::assign(const From& x) {
+16535:   ((void) 0);
+16535:   if (check_empty_arg(x)) {
+16535:     return assign(EMPTY);
+16535:   }
+16535:   Parma_Polyhedra_Library::Dirty_Temp<To_Info> holder_to_info; To_Info& to_info = holder_to_info.item();
+16535:   to_info.clear();
+16535:   const Result rl = Boundary_NS::assign(LOWER, lower(), to_info,
+16535:                                         LOWER, f_lower(x), f_info(x));
+16535:   const Result ru = Boundary_NS::assign(UPPER, upper(), to_info,
+16535:                                         UPPER, f_upper(x), f_info(x));
+16535:   assign_or_swap(info(), to_info);
+16535:   ((void) 0);
+16535:   return combine(rl, ru);
+16535: }
+16535: 
+16535: template <typename To_Boundary, typename To_Info>
+16535: template <typename From>
+16535: inline typename Enable_If<Is_Singleton<From>::value
+16535:                           || Is_Interval<From>::value, I_Result>::type
+16535: Interval<To_Boundary, To_Info>::join_assign(const From& x) {
+16535:   ((void) 0);
+16535:   if (check_empty_arg(*this)) {
+16535:     return assign(x);
+16535:   }
+16535:   if (check_empty_arg(x)) {
+16535:     return combine(V_EQ, V_EQ);
+16535:   }
+16535:   Result rl;
+16535:   Result ru;
+16535:   rl = min_assign(LOWER, lower(), info(), LOWER, f_lower(x), f_info(x));
+16535:   ru = max_assign(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x));
+16535:   ((void) 0);
+16535:   return combine(rl, ru);
+16535: }
+16535: 
+16535: template <typename To_Boundary, typename To_Info>
+16535: template <typename From1, typename From2>
+16535: inline typename Enable_If<((Is_Singleton<From1>::value
+16535:                             || Is_Interval<From1>::value)
+16535:                            && (Is_Singleton<From2>::value
+16535:                                || Is_Interval<From2>::value)), I_Result>::type
+16535: Interval<To_Boundary, To_Info>::join_assign(const From1& x, const From2& y) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   if (check_empty_arg(x)) {
+16535:     return assign(y);
+16535:   }
+16535:   if (check_empty_arg(y)) {
+16535:     return assign(x);
+16535:   }
+16535:   Parma_Polyhedra_Library::Dirty_Temp<To_Info> holder_to_info; To_Info& to_info = holder_to_info.item();
+16535:   to_info.clear();
+16535:   Result rl;
+16535:   Result ru;
+16535:   rl = min_assign(LOWER, lower(), to_info,
+16535:                   LOWER, f_lower(x), f_info(x),
+16535:                   LOWER, f_lower(y), f_info(y));
+16535:   ru = max_assign(UPPER, upper(), to_info,
+16535:                   UPPER, f_upper(x), f_info(x),
+16535:                   UPPER, f_upper(y), f_info(y));
+16535:   assign_or_swap(info(), to_info);
+16535:   ((void) 0);
+16535:   return combine(rl, ru);
+16535: }
+16535: 
+16535: template <typename Boundary, typename Info>
+16535: template <typename Type>
+16535: inline typename Enable_If<Is_Singleton<Type>::value
+16535:                           || Is_Interval<Type>::value, bool>::type
+16535: Interval<Boundary, Info>::can_be_exactly_joined_to(const Type& x) const {
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Boundary> holder_b; Boundary& b = holder_b.item();
+16535:   if (gt(LOWER, lower(), info(), UPPER, f_upper(x), f_info(x))) {
+16535:     b = lower();
+16535:     return eq(LOWER, b, info(), UPPER, f_upper(x), f_info(x));
+16535:   }
+16535:   else if (lt(UPPER, upper(), info(), LOWER, f_lower(x), f_info(x))) {
+16535:     b = upper();
+16535:     return eq(UPPER, b, info(), LOWER, f_lower(x), f_info(x));
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: 
+16535: template <typename To_Boundary, typename To_Info>
+16535: template <typename From>
+16535: inline typename Enable_If<Is_Singleton<From>::value
+16535:                           || Is_Interval<From>::value, I_Result>::type
+16535: Interval<To_Boundary, To_Info>::intersect_assign(const From& x) {
+16535:   ((void) 0);
+16535:   max_assign(LOWER, lower(), info(), LOWER, f_lower(x), f_info(x));
+16535:   min_assign(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x));
+16535:   ((void) 0);
+16535:   return I_ANY;
+16535: }
+16535: 
+16535: template <typename To_Boundary, typename To_Info>
+16535: template <typename From1, typename From2>
+16535: inline typename Enable_If<((Is_Singleton<From1>::value
+16535:                             || Is_Interval<From1>::value)
+16535:                            && (Is_Singleton<From2>::value
+16535:                                || Is_Interval<From2>::value)), I_Result>::type
+16535: Interval<To_Boundary, To_Info>::intersect_assign(const From1& x,
+16535:                                                  const From2& y) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   Parma_Polyhedra_Library::Dirty_Temp<To_Info> holder_to_info; To_Info& to_info = holder_to_info.item();
+16535:   to_info.clear();
+16535:   max_assign(LOWER, lower(), to_info,
+16535:              LOWER, f_lower(x), f_info(x),
+16535:              LOWER, f_lower(y), f_info(y));
+16535:   min_assign(UPPER, upper(), to_info,
+16535:              UPPER, f_upper(x), f_info(x),
+16535:              UPPER, f_upper(y), f_info(y));
+16535:   assign_or_swap(info(), to_info);
+16535:   ((void) 0);
+16535:   return I_NOT_EMPTY;
+16535: }
+16535: 
+16535: template <typename To_Boundary, typename To_Info>
+16535: template <typename From>
+16535: inline typename Enable_If<Is_Singleton<From>::value
+16535:                           || Is_Interval<From>::value, I_Result>::type
+16535: Interval<To_Boundary, To_Info>::difference_assign(const From& x) {
+16535:   ((void) 0);
+16535:   if (lt(UPPER, upper(), info(), LOWER, f_lower(x), f_info(x))
+16535:       || gt(LOWER, lower(), info(), UPPER, f_upper(x), f_info(x))) {
+16535:     return combine(V_EQ, V_EQ);
+16535:   }
+16535:   bool nl = ge(LOWER, lower(), info(), LOWER, f_lower(x), f_info(x));
+16535:   bool nu = le(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x));
+16535:   Result rl = V_EQ;
+16535:   Result ru = V_EQ;
+16535:   if (nl) {
+16535:     if (nu) {
+16535:       return assign(EMPTY);
+16535:     }
+16535:     else {
+16535:       info().clear_boundary_properties(LOWER);
+16535:       rl = complement(LOWER, lower(), info(), UPPER, f_upper(x), f_info(x));
+16535:     }
+16535:   }
+16535:   else if (nu) {
+16535:     info().clear_boundary_properties(UPPER);
+16535:     ru = complement(UPPER, upper(), info(), LOWER, f_lower(x), f_info(x));
+16535:   }
+16535:   ((void) 0);
+16535:   return combine(rl, ru);
+16535: }
+16535: 
+16535: template <typename To_Boundary, typename To_Info>
+16535: template <typename From1, typename From2>
+16535: inline typename Enable_If<((Is_Singleton<From1>::value
+16535:                             || Is_Interval<From1>::value)
+16535:                            && (Is_Singleton<From2>::value
+16535:                                || Is_Interval<From2>::value)), I_Result>::type
+16535: Interval<To_Boundary, To_Info>::difference_assign(const From1& x,
+16535:                                                   const From2& y) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   Parma_Polyhedra_Library::Dirty_Temp<To_Info> holder_to_info; To_Info& to_info = holder_to_info.item();
+16535:   to_info.clear();
+16535:   if (lt(UPPER, f_upper(x), f_info(x), LOWER, f_lower(y), f_info(y))
+16535:       || gt(LOWER, f_lower(x), f_info(x), UPPER, f_upper(y), f_info(y))) {
+16535:     return assign(x);
+16535:   }
+16535:   bool nl = ge(LOWER, f_lower(x), f_info(x), LOWER, f_lower(y), f_info(y));
+16535:   bool nu = le(UPPER, f_upper(x), f_info(x), UPPER, f_upper(y), f_info(y));
+16535:   Result rl = V_EQ;
+16535:   Result ru = V_EQ;
+16535:   if (nl) {
+16535:     if (nu) {
+16535:       return assign(EMPTY);
+16535:     }
+16535:     else {
+16535:       rl = complement(LOWER, lower(), info(), UPPER, f_upper(y), f_info(y));
+16535:       ru = Boundary_NS::assign(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x));
+16535:     }
+16535:   }
+16535:   else if (nu) {
+16535:     ru = complement(UPPER, upper(), info(), LOWER, f_lower(y), f_info(y));
+16535:     rl = Boundary_NS::assign(LOWER, lower(), info(),
+16535:                              LOWER, f_lower(x), f_info(x));
+16535:   }
+16535:   assign_or_swap(info(), to_info);
+16535:   ((void) 0);
+16535:   return combine(rl, ru);
+16535: }
+16535: 
+16535: template <typename To_Boundary, typename To_Info>
+16535: template <typename From>
+16535: inline typename Enable_If<Is_Singleton<From>::value
+16535:                           || Is_Interval<From>::value, I_Result>::type
+16535: Interval<To_Boundary, To_Info>
+16535: ::refine_existential(Relation_Symbol rel, const From& x) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   if (check_empty_arg(x)) {
+16535:     return assign(EMPTY);
+16535:   }
+16535:   switch (rel) {
+16535:   case LESS_THAN:
+16535:     {
+16535:       if (lt(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x))) {
+16535:         return combine(V_EQ, V_EQ);
+16535:       }
+16535:       info().clear_boundary_properties(UPPER);
+16535:       Boundary_NS::assign(UPPER, upper(), info(),
+16535:                           UPPER, f_upper(x), f_info(x), true);
+16535:       return I_ANY;
+16535:     }
+16535:   case LESS_OR_EQUAL:
+16535:     {
+16535:       if (le(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x))) {
+16535:         return combine(V_EQ, V_EQ);
+16535:       }
+16535:       info().clear_boundary_properties(UPPER);
+16535:       Boundary_NS::assign(UPPER, upper(), info(),
+16535:                           UPPER, f_upper(x), f_info(x));
+16535:       return I_ANY;
+16535:     }
+16535:   case GREATER_THAN:
+16535:     {
+16535:       if (gt(LOWER, lower(), info(), LOWER, f_lower(x), f_info(x))) {
+16535:         return combine(V_EQ, V_EQ);
+16535:       }
+16535:       info().clear_boundary_properties(LOWER);
+16535:       Boundary_NS::assign(LOWER, lower(), info(),
+16535:                           LOWER, f_lower(x), f_info(x), true);
+16535:       return I_ANY;
+16535:     }
+16535:   case GREATER_OR_EQUAL:
+16535:     {
+16535:       if (ge(LOWER, lower(), info(), LOWER, f_lower(x), f_info(x))) {
+16535:         return combine(V_EQ, V_EQ);
+16535:       }
+16535:       info().clear_boundary_properties(LOWER);
+16535:       Boundary_NS::assign(LOWER, lower(), info(),
+16535:                           LOWER, f_lower(x), f_info(x));
+16535:       return I_ANY;
+16535:     }
+16535:   case EQUAL:
+16535:     return intersect_assign(x);
+16535:   case NOT_EQUAL:
+16535:     {
+16535:       if (!f_is_singleton(x)) {
+16535:         return combine(V_EQ, V_EQ);
+16535:       }
+16535:       if (check_empty_arg(*this)) {
+16535:         return I_EMPTY;
+16535:       }
+16535:       if (eq(LOWER, lower(), info(), LOWER, f_lower(x), f_info(x))) {
+16535:         remove_inf();
+16535:       }
+16535:       if (eq(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x))) {
+16535:         remove_sup();
+16535:       }
+16535:       return I_ANY;
+16535:     }
+16535:   default:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return I_EMPTY;
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Boundary, typename To_Info>
+16535: template <typename From>
+16535: inline typename Enable_If<Is_Singleton<From>::value
+16535:                           || Is_Interval<From>::value, I_Result>::type
+16535: Interval<To_Boundary, To_Info>::refine_universal(Relation_Symbol rel,
+16535:                                                  const From& x) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   if (check_empty_arg(x)) {
+16535:     return combine(V_EQ, V_EQ);
+16535:   }
+16535:   switch (rel) {
+16535:   case LESS_THAN:
+16535:     {
+16535:       if (lt(UPPER, upper(), info(), LOWER, f_lower(x), f_info(x))) {
+16535:         return combine(V_EQ, V_EQ);
+16535:       }
+16535:       info().clear_boundary_properties(UPPER);
+16535:       Result ru = Boundary_NS::assign(UPPER, upper(), info(),
+16535:                                       LOWER, f_lower(x), SCALAR_INFO,
+16535:                                       !is_open(LOWER, f_lower(x), f_info(x)));
+16535:       (void)(ru);
+16535:       return I_ANY;
+16535:     }
+16535:   case LESS_OR_EQUAL:
+16535:     {
+16535:       if (le(UPPER, upper(), info(), LOWER, f_lower(x), f_info(x))) {
+16535:         return combine(V_EQ, V_EQ);
+16535:       }
+16535:       info().clear_boundary_properties(UPPER);
+16535:       Result ru = Boundary_NS::assign(UPPER, upper(), info(),
+16535:                                       LOWER, f_lower(x), SCALAR_INFO);
+16535:       (void)(ru);
+16535:       return I_ANY;
+16535:     }
+16535:   case GREATER_THAN:
+16535:     {
+16535:       if (gt(LOWER, lower(), info(), UPPER, f_upper(x), f_info(x))) {
+16535:         return combine(V_EQ, V_EQ);
+16535:       }
+16535:       info().clear_boundary_properties(LOWER);
+16535:       Result rl = Boundary_NS::assign(LOWER, lower(), info(),
+16535:                                       UPPER, f_upper(x), SCALAR_INFO,
+16535:                                       !is_open(UPPER, f_upper(x), f_info(x)));
+16535:       (void)(rl);
+16535:       return I_ANY;
+16535:     }
+16535:   case GREATER_OR_EQUAL:
+16535:     {
+16535:       if (ge(LOWER, lower(), info(), UPPER, f_upper(x), f_info(x))) {
+16535:         return combine(V_EQ, V_EQ);
+16535:       }
+16535:       info().clear_boundary_properties(LOWER);
+16535:       Result rl = Boundary_NS::assign(LOWER, lower(), info(),
+16535:                                       UPPER, f_upper(x), SCALAR_INFO);
+16535:       (void)(rl);
+16535:       return I_ANY;
+16535:     }
+16535:   case EQUAL:
+16535:     if (!f_is_singleton(x)) {
+16535:       return assign(EMPTY);
+16535:     }
+16535:     return intersect_assign(x);
+16535:   case NOT_EQUAL:
+16535:     {
+16535:       if (check_empty_arg(*this)) {
+16535:         return I_EMPTY;
+16535:       }
+16535:       if (eq(LOWER, lower(), info(), LOWER, f_lower(x), f_info(x))) {
+16535:         remove_inf();
+16535:       }
+16535:       if (eq(UPPER, upper(), info(), UPPER, f_upper(x), f_info(x))) {
+16535:         remove_sup();
+16535:       }
+16535:       return I_ANY;
+16535:     }
+16535:   default:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return I_EMPTY;
+16535:   }
+16535: }
+16535: 
+16535: template <typename To_Boundary, typename To_Info>
+16535: template <typename From>
+16535: inline typename Enable_If<Is_Singleton<From>::value
+16535:                           || Is_Interval<From>::value, I_Result>::type
+16535: Interval<To_Boundary, To_Info>::neg_assign(const From& x) {
+16535:   ((void) 0);
+16535:   if (check_empty_arg(x)) {
+16535:     return assign(EMPTY);
+16535:   }
+16535:   Parma_Polyhedra_Library::Dirty_Temp<To_Info> holder_to_info; To_Info& to_info = holder_to_info.item();
+16535:   to_info.clear();
+16535:   Result rl;
+16535:   Result ru;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<To_Boundary> holder_to_lower; To_Boundary& to_lower = holder_to_lower.item();
+16535:   rl = Boundary_NS::neg_assign(LOWER, to_lower, to_info, UPPER, f_upper(x), f_info(x));
+16535:   ru = Boundary_NS::neg_assign(UPPER, upper(), to_info, LOWER, f_lower(x), f_info(x));
+16535:   assign_or_swap(lower(), to_lower);
+16535:   assign_or_swap(info(), to_info);
+16535:   ((void) 0);
+16535:   return combine(rl, ru);
+16535: }
+16535: 
+16535: template <typename To_Boundary, typename To_Info>
+16535: template <typename From1, typename From2>
+16535: inline typename Enable_If<((Is_Singleton<From1>::value
+16535:                             || Is_Interval<From1>::value)
+16535:                            && (Is_Singleton<From2>::value
+16535:                                || Is_Interval<From2>::value)), I_Result>::type
+16535: Interval<To_Boundary, To_Info>::add_assign(const From1& x, const From2& y) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   if (check_empty_arg(x) || check_empty_arg(y)) {
+16535:     return assign(EMPTY);
+16535:   }
+16535:   int inf_sign = Parma_Polyhedra_Library::infinity_sign(x);
+16535:   if (inf_sign != 0) {
+16535:     if (Parma_Polyhedra_Library::infinity_sign(y) == -inf_sign) {
+16535:       return assign(EMPTY);
+16535:     }
+16535:   }
+16535:   else {
+16535:     inf_sign = Parma_Polyhedra_Library::infinity_sign(y);
+16535:   }
+16535:   if (inf_sign < 0) {
+16535:     return assign(MINUS_INFINITY);
+16535:   }
+16535:   else if (inf_sign > 0) {
+16535:     return assign(PLUS_INFINITY);
+16535:   }
+16535:   Parma_Polyhedra_Library::Dirty_Temp<To_Info> holder_to_info; To_Info& to_info = holder_to_info.item();
+16535:   to_info.clear();
+16535:   Result rl = Boundary_NS::add_assign(LOWER, lower(), to_info,
+16535:                                       LOWER, f_lower(x), f_info(x),
+16535:                                       LOWER, f_lower(y), f_info(y));
+16535:   Result ru = Boundary_NS::add_assign(UPPER, upper(), to_info,
+16535:                                       UPPER, f_upper(x), f_info(x),
+16535:                                       UPPER, f_upper(y), f_info(y));
+16535:   assign_or_swap(info(), to_info);
+16535:   ((void) 0);
+16535:   return combine(rl, ru);
+16535: }
+16535: 
+16535: template <typename To_Boundary, typename To_Info>
+16535: template <typename From1, typename From2>
+16535: inline typename Enable_If<((Is_Singleton<From1>::value
+16535:                             || Is_Interval<From1>::value)
+16535:                            && (Is_Singleton<From2>::value
+16535:                                || Is_Interval<From2>::value)), I_Result>::type
+16535: Interval<To_Boundary, To_Info>::sub_assign(const From1& x, const From2& y) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   if (check_empty_arg(x) || check_empty_arg(y)) {
+16535:     return assign(EMPTY);
+16535:   }
+16535:   int inf_sign = Parma_Polyhedra_Library::infinity_sign(x);
+16535:   if (inf_sign != 0) {
+16535:     if (Parma_Polyhedra_Library::infinity_sign(y) == inf_sign) {
+16535:       return assign(EMPTY);
+16535:     }
+16535:   }
+16535:   else {
+16535:     inf_sign = -Parma_Polyhedra_Library::infinity_sign(y);
+16535:   }
+16535:   if (inf_sign < 0) {
+16535:     return assign(MINUS_INFINITY);
+16535:   }
+16535:   else if (inf_sign > 0) {
+16535:     return assign(PLUS_INFINITY);
+16535:   }
+16535:   Parma_Polyhedra_Library::Dirty_Temp<To_Info> holder_to_info; To_Info& to_info = holder_to_info.item();
+16535:   to_info.clear();
+16535:   Result rl;
+16535:   Result ru;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<To_Boundary> holder_to_lower; To_Boundary& to_lower = holder_to_lower.item();
+16535:   rl = Boundary_NS::sub_assign(LOWER, to_lower, to_info,
+16535:                                LOWER, f_lower(x), f_info(x),
+16535:                                UPPER, f_upper(y), f_info(y));
+16535:   ru = Boundary_NS::sub_assign(UPPER, upper(), to_info,
+16535:                                UPPER, f_upper(x), f_info(x),
+16535:                                LOWER, f_lower(y), f_info(y));
+16535:   assign_or_swap(lower(), to_lower);
+16535:   assign_or_swap(info(), to_info);
+16535:   ((void) 0);
+16535:   return combine(rl, ru);
+16535: }
+16535: # 708 "../../src/Interval_inlines.hh"
+16535: template <typename To_Boundary, typename To_Info>
+16535: template <typename From1, typename From2>
+16535: inline typename Enable_If<((Is_Singleton<From1>::value
+16535:                             || Is_Interval<From1>::value)
+16535:                            && (Is_Singleton<From2>::value
+16535:                                || Is_Interval<From2>::value)), I_Result>::type
+16535: Interval<To_Boundary, To_Info>::mul_assign(const From1& x, const From2& y) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   if (check_empty_arg(x) || check_empty_arg(y)) {
+16535:     return assign(EMPTY);
+16535:   }
+16535:   int xls = sgn_b(LOWER, f_lower(x), f_info(x));
+16535:   int xus = (xls > 0) ? 1 : sgn_b(UPPER, f_upper(x), f_info(x));
+16535:   int yls = sgn_b(LOWER, f_lower(y), f_info(y));
+16535:   int yus = (yls > 0) ? 1 : sgn_b(UPPER, f_upper(y), f_info(y));
+16535:   int inf_sign = Parma_Polyhedra_Library::infinity_sign(x);
+16535:   int ls;
+16535:   int us;
+16535:   if (inf_sign != 0) {
+16535:     ls = yls;
+16535:     us = yus;
+16535:     goto inf;
+16535:   }
+16535:   else {
+16535:     inf_sign = Parma_Polyhedra_Library::infinity_sign(y);
+16535:     if (inf_sign != 0) {
+16535:       ls = xls;
+16535:       us = xus;
+16535:     inf:
+16535:       if (ls == 0 && us == 0) {
+16535:         return assign(EMPTY);
+16535:       }
+16535:       if (ls == -us) {
+16535:         return set_infinities();
+16535:       }
+16535:       if (ls < 0 || us < 0) {
+16535:         inf_sign = -inf_sign;
+16535:       }
+16535:       if (inf_sign < 0) {
+16535:         return assign(MINUS_INFINITY);
+16535:       }
+16535:       else {
+16535:         return assign(PLUS_INFINITY);
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<To_Info> holder_to_info; To_Info& to_info = holder_to_info.item();
+16535:   to_info.clear();
+16535:   Result rl;
+16535:   Result ru;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<To_Boundary> holder_to_lower; To_Boundary& to_lower = holder_to_lower.item();
+16535: 
+16535:   if (xls >= 0) {
+16535:     if (yls >= 0) {
+16535: 
+16535:       rl = mul_assign_z(LOWER, to_lower, to_info,
+16535:                         LOWER, f_lower(x), f_info(x), xls,
+16535:                         LOWER, f_lower(y), f_info(y), yls);
+16535:       ru = mul_assign_z(UPPER, upper(), to_info,
+16535:                         UPPER, f_upper(x), f_info(x), xus,
+16535:                         UPPER, f_upper(y), f_info(y), yus);
+16535:     }
+16535:     else if (yus <= 0) {
+16535: 
+16535:       rl = mul_assign_z(LOWER, to_lower, to_info,
+16535:                         UPPER, f_upper(x), f_info(x), xus,
+16535:                         LOWER, f_lower(y), f_info(y), yls);
+16535:       ru = mul_assign_z(UPPER, upper(), to_info,
+16535:                         LOWER, f_lower(x), f_info(x), xls,
+16535:                         UPPER, f_upper(y), f_info(y), yus);
+16535:     }
+16535:     else {
+16535: 
+16535:       rl = mul_assign_z(LOWER, to_lower, to_info,
+16535:                         UPPER, f_upper(x), f_info(x), xus,
+16535:                         LOWER, f_lower(y), f_info(y), yls);
+16535:       ru = mul_assign_z(UPPER, upper(), to_info,
+16535:                         UPPER, f_upper(x), f_info(x), xus,
+16535:                         UPPER, f_upper(y), f_info(y), yus);
+16535:     }
+16535:   }
+16535:   else if (xus <= 0) {
+16535:     if (yls >= 0) {
+16535: 
+16535:       rl = mul_assign_z(LOWER, to_lower, to_info,
+16535:                         LOWER, f_lower(x), f_info(x), xls,
+16535:                         UPPER, f_upper(y), f_info(y), yus);
+16535:       ru = mul_assign_z(UPPER, upper(), to_info,
+16535:                         UPPER, f_upper(x), f_info(x), xus,
+16535:                         LOWER, f_lower(y), f_info(y), yls);
+16535:     }
+16535:     else if (yus <= 0) {
+16535: 
+16535:       rl = mul_assign_z(LOWER, to_lower, to_info,
+16535:                         UPPER, f_upper(x), f_info(x), xus,
+16535:                         UPPER, f_upper(y), f_info(y), yus);
+16535:       ru = mul_assign_z(UPPER, upper(), to_info,
+16535:                         LOWER, f_lower(x), f_info(x), xls,
+16535:                         LOWER, f_lower(y), f_info(y), yls);
+16535:     }
+16535:     else {
+16535: 
+16535:       rl = mul_assign_z(LOWER, to_lower, to_info,
+16535:                         LOWER, f_lower(x), f_info(x), xls,
+16535:                         UPPER, f_upper(y), f_info(y), yus);
+16535:       ru = mul_assign_z(UPPER, upper(), to_info,
+16535:                         LOWER, f_lower(x), f_info(x), xls,
+16535:                         LOWER, f_lower(y), f_info(y), yls);
+16535:     }
+16535:   }
+16535:   else if (yls >= 0) {
+16535: 
+16535:     rl = mul_assign_z(LOWER, to_lower, to_info,
+16535:                       LOWER, f_lower(x), f_info(x), xls,
+16535:                       UPPER, f_upper(y), f_info(y), yus);
+16535:     ru = mul_assign_z(UPPER, upper(), to_info,
+16535:                       UPPER, f_upper(x), f_info(x), xus,
+16535:                       UPPER, f_upper(y), f_info(y), yus);
+16535:   }
+16535:   else if (yus <= 0) {
+16535: 
+16535:     rl = mul_assign_z(LOWER, to_lower, to_info,
+16535:                       UPPER, f_upper(x), f_info(x), xus,
+16535:                       LOWER, f_lower(y), f_info(y), yls);
+16535:     ru = mul_assign_z(UPPER, upper(), to_info,
+16535:                       LOWER, f_lower(x), f_info(x), xls,
+16535:                       LOWER, f_lower(y), f_info(y), yls);
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::Dirty_Temp<To_Boundary> holder_tmp; To_Boundary& tmp = holder_tmp.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<To_Info> holder_tmp_info; To_Info& tmp_info = holder_tmp_info.item();
+16535:     tmp_info.clear();
+16535:     Result tmp_r;
+16535:     tmp_r = Boundary_NS::mul_assign(LOWER, tmp, tmp_info,
+16535:                                     UPPER, f_upper(x), f_info(x),
+16535:                                     LOWER, f_lower(y), f_info(y));
+16535:     rl = Boundary_NS::mul_assign(LOWER, to_lower, to_info,
+16535:                                  LOWER, f_lower(x), f_info(x),
+16535:                                  UPPER, f_upper(y), f_info(y));
+16535:     if (gt(LOWER, to_lower, to_info, LOWER, tmp, tmp_info)) {
+16535:       to_lower = tmp;
+16535:       rl = tmp_r;
+16535:     }
+16535:     tmp_info.clear();
+16535:     tmp_r = Boundary_NS::mul_assign(UPPER, tmp, tmp_info,
+16535:                                     UPPER, f_upper(x), f_info(x),
+16535:                                     UPPER, f_upper(y), f_info(y));
+16535:     ru = Boundary_NS::mul_assign(UPPER, upper(), to_info,
+16535:                                  LOWER, f_lower(x), f_info(x),
+16535:                                  LOWER, f_lower(y), f_info(y));
+16535:     if (lt(UPPER, upper(), to_info, UPPER, tmp, tmp_info)) {
+16535:       upper() = tmp;
+16535:       ru = tmp_r;
+16535:     }
+16535:   }
+16535:   assign_or_swap(lower(), to_lower);
+16535:   assign_or_swap(info(), to_info);
+16535:   ((void) 0);
+16535:   return combine(rl, ru);
+16535: }
+16535: # 883 "../../src/Interval_inlines.hh"
+16535: template <typename To_Boundary, typename To_Info>
+16535: template <typename From1, typename From2>
+16535: inline typename Enable_If<((Is_Singleton<From1>::value
+16535:                             || Is_Interval<From1>::value)
+16535:                            && (Is_Singleton<From2>::value
+16535:                                || Is_Interval<From2>::value)), I_Result>::type
+16535: Interval<To_Boundary, To_Info>::div_assign(const From1& x, const From2& y) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   if (check_empty_arg(x) || check_empty_arg(y)) {
+16535:     return assign(EMPTY);
+16535:   }
+16535:   int yls = sgn_b(LOWER, f_lower(y), f_info(y));
+16535:   int yus = (yls > 0) ? 1 : sgn_b(UPPER, f_upper(y), f_info(y));
+16535:   if (yls == 0 && yus == 0) {
+16535:     return assign(EMPTY);
+16535:   }
+16535:   int inf_sign = Parma_Polyhedra_Library::infinity_sign(x);
+16535:   if (inf_sign != 0) {
+16535:     if (Parma_Polyhedra_Library::infinity_sign(y) != 0) {
+16535:       return assign(EMPTY);
+16535:     }
+16535:     if (yls == -yus) {
+16535:       return set_infinities();
+16535:     }
+16535:     if (yls < 0 || yus < 0) {
+16535:       inf_sign = -inf_sign;
+16535:     }
+16535:     if (inf_sign < 0) {
+16535:       return assign(MINUS_INFINITY);
+16535:     }
+16535:     else {
+16535:       return assign(PLUS_INFINITY);
+16535:     }
+16535:   }
+16535:   int xls = sgn_b(LOWER, f_lower(x), f_info(x));
+16535:   int xus = (xls > 0) ? 1 : sgn_b(UPPER, f_upper(x), f_info(x));
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<To_Info> holder_to_info; To_Info& to_info = holder_to_info.item();
+16535:   to_info.clear();
+16535:   Result rl;
+16535:   Result ru;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<To_Boundary> holder_to_lower; To_Boundary& to_lower = holder_to_lower.item();
+16535:   if (yls >= 0) {
+16535:     if (xls >= 0) {
+16535:       rl = div_assign_z(LOWER, to_lower, to_info,
+16535:                         LOWER, f_lower(x), f_info(x), xls,
+16535:                         UPPER, f_upper(y), f_info(y), yus);
+16535:       ru = div_assign_z(UPPER, upper(), to_info,
+16535:                         UPPER, f_upper(x), f_info(x), xus,
+16535:                         LOWER, f_lower(y), f_info(y), yls);
+16535:     }
+16535:     else if (xus <= 0) {
+16535:       rl = div_assign_z(LOWER, to_lower, to_info,
+16535:                         LOWER, f_lower(x), f_info(x), xls,
+16535:                         LOWER, f_lower(y), f_info(y), yls);
+16535:       ru = div_assign_z(UPPER, upper(), to_info,
+16535:                         UPPER, f_upper(x), f_info(x), xus,
+16535:                         UPPER, f_upper(y), f_info(y), yus);
+16535:     }
+16535:     else {
+16535:       rl = div_assign_z(LOWER, to_lower, to_info,
+16535:                         LOWER, f_lower(x), f_info(x), xls,
+16535:                         LOWER, f_lower(y), f_info(y), yls);
+16535:       ru = div_assign_z(UPPER, upper(), to_info,
+16535:                         UPPER, f_upper(x), f_info(x), xus,
+16535:                         LOWER, f_lower(y), f_info(y), yls);
+16535:     }
+16535:   }
+16535:   else if (yus <= 0) {
+16535:     if (xls >= 0) {
+16535:       rl = div_assign_z(LOWER, to_lower, to_info,
+16535:                         UPPER, f_upper(x), f_info(x), xus,
+16535:                         UPPER, f_upper(y), f_info(y), yus);
+16535:       ru = div_assign_z(UPPER, upper(), to_info,
+16535:                         LOWER, f_lower(x), f_info(x), xls,
+16535:                         LOWER, f_lower(y), f_info(y), yls);
+16535:     }
+16535:     else if (xus <= 0) {
+16535:       rl = div_assign_z(LOWER, to_lower, to_info,
+16535:                         UPPER, f_upper(x), f_info(x), xus,
+16535:                         LOWER, f_lower(y), f_info(y), yls);
+16535:       ru = div_assign_z(UPPER, upper(), to_info,
+16535:                         LOWER, f_lower(x), f_info(x), xls,
+16535:                         UPPER, f_upper(y), f_info(y), yus);
+16535:     }
+16535:     else {
+16535:       rl = div_assign_z(LOWER, to_lower, to_info,
+16535:                         UPPER, f_upper(x), f_info(x), xus,
+16535:                         UPPER, f_upper(y), f_info(y), yus);
+16535:       ru = div_assign_z(UPPER, upper(), to_info,
+16535:                         LOWER, f_lower(x), f_info(x), xls,
+16535:                         UPPER, f_upper(y), f_info(y), yus);
+16535:     }
+16535:   }
+16535:   else {
+16535:     return static_cast<I_Result>(assign(UNIVERSE) | I_SINGULARITIES);
+16535:   }
+16535:   assign_or_swap(lower(), to_lower);
+16535:   assign_or_swap(info(), to_info);
+16535:   ((void) 0);
+16535:   return combine(rl, ru);
+16535: }
+16535: 
+16535: template <typename B, typename Info, typename T>
+16535: inline typename Enable_If<Is_Singleton<T>::value, Interval<B, Info> >::type
+16535: operator+(const Interval<B, Info>& x, const T& y) {
+16535:   Interval<B, Info> z;
+16535:   z.add_assign(x, y);
+16535:   return z;
+16535: }
+16535: 
+16535: template <typename B, typename Info, typename T>
+16535: inline typename Enable_If<Is_Singleton<T>::value, Interval<B, Info> >::type
+16535: operator+(const T& x, const Interval<B, Info>& y) {
+16535:   Interval<B, Info> z;
+16535:   z.add_assign(x, y);
+16535:   return z;
+16535: }
+16535: 
+16535: template <typename B, typename Info>
+16535: inline Interval<B, Info>
+16535: operator+(const Interval<B, Info>& x, const Interval<B, Info>& y) {
+16535:   Interval<B, Info> z;
+16535:   z.add_assign(x, y);
+16535:   return z;
+16535: }
+16535: 
+16535: template <typename B, typename Info, typename T>
+16535: inline typename Enable_If<Is_Singleton<T>::value, Interval<B, Info> >::type
+16535: operator-(const Interval<B, Info>& x, const T& y) {
+16535:   Interval<B, Info> z;
+16535:   z.sub_assign(x, y);
+16535:   return z;
+16535: }
+16535: 
+16535: template <typename B, typename Info, typename T>
+16535: inline typename Enable_If<Is_Singleton<T>::value, Interval<B, Info> >::type
+16535: operator-(const T& x, const Interval<B, Info>& y) {
+16535:   Interval<B, Info> z;
+16535:   z.sub_assign(x, y);
+16535:   return z;
+16535: }
+16535: 
+16535: template <typename B, typename Info>
+16535: inline Interval<B, Info>
+16535: operator-(const Interval<B, Info>& x, const Interval<B, Info>& y) {
+16535:   Interval<B, Info> z;
+16535:   z.sub_assign(x, y);
+16535:   return z;
+16535: }
+16535: 
+16535: template <typename B, typename Info, typename T>
+16535: inline typename Enable_If<Is_Singleton<T>::value, Interval<B, Info> >::type
+16535: operator*(const Interval<B, Info>& x, const T& y) {
+16535:   Interval<B, Info> z;
+16535:   z.mul_assign(x, y);
+16535:   return z;
+16535: }
+16535: 
+16535: template <typename B, typename Info, typename T>
+16535: inline typename Enable_If<Is_Singleton<T>::value, Interval<B, Info> >::type
+16535: operator*(const T& x, const Interval<B, Info>& y) {
+16535:   Interval<B, Info> z;
+16535:   z.mul_assign(x, y);
+16535:   return z;
+16535: }
+16535: 
+16535: template <typename B, typename Info>
+16535: inline Interval<B, Info>
+16535: operator*(const Interval<B, Info>& x, const Interval<B, Info>& y) {
+16535:   Interval<B, Info> z;
+16535:   z.mul_assign(x, y);
+16535:   return z;
+16535: }
+16535: 
+16535: template <typename B, typename Info, typename T>
+16535: inline typename Enable_If<Is_Singleton<T>::value, Interval<B, Info> >::type
+16535: operator/(const Interval<B, Info>& x, const T& y) {
+16535:   Interval<B, Info> z;
+16535:   z.div_assign(x, y);
+16535:   return z;
+16535: }
+16535: 
+16535: template <typename B, typename Info, typename T>
+16535: inline typename Enable_If<Is_Singleton<T>::value, Interval<B, Info> >::type
+16535: operator/(const T& x, const Interval<B, Info>& y) {
+16535:   Interval<B, Info> z;
+16535:   z.div_assign(x, y);
+16535:   return z;
+16535: }
+16535: 
+16535: template <typename B, typename Info>
+16535: inline Interval<B, Info>
+16535: operator/(const Interval<B, Info>& x, const Interval<B, Info>& y) {
+16535:   Interval<B, Info> z;
+16535:   z.div_assign(x, y);
+16535:   return z;
+16535: }
+16535: 
+16535: template <typename Boundary, typename Info>
+16535: inline std::ostream&
+16535: operator<<(std::ostream& os, const Interval<Boundary, Info>& x) {
+16535:   if (check_empty_arg(x)) {
+16535:     return os << "[]";
+16535:   }
+16535:   if (x.is_singleton()) {
+16535:     output(os, x.lower(), Numeric_Format(), ROUND_NOT_NEEDED);
+16535:     return os;
+16535:   }
+16535:   os << (x.lower_is_open() ? "(" : "[");
+16535:   if (x.info().get_boundary_property(LOWER, SPECIAL)) {
+16535:     os << "-inf";
+16535:   }
+16535:   else {
+16535:     output(os, x.lower(), Numeric_Format(), ROUND_NOT_NEEDED);
+16535:   }
+16535:   os << ", ";
+16535:   if (x.info().get_boundary_property(UPPER, SPECIAL)) {
+16535:     os << "+inf";
+16535:   }
+16535:   else {
+16535:     output(os, x.upper(), Numeric_Format(), ROUND_NOT_NEEDED);
+16535:   }
+16535:   os << (x.upper_is_open() ? ")" : "]");
+16535:   return os;
+16535: }
+16535: 
+16535: template <typename Boundary, typename Info>
+16535: inline void
+16535: Interval<Boundary, Info>::ascii_dump(std::ostream& s) const {
+16535:   using Parma_Polyhedra_Library::ascii_dump;
+16535:   s << "info ";
+16535:   info().ascii_dump(s);
+16535:   s << " lower ";
+16535:   ascii_dump(s, lower());
+16535:   s << " upper ";
+16535:   ascii_dump(s, upper());
+16535:   s << '\n';
+16535: }
+16535: 
+16535: template <typename Boundary, typename Info>
+16535: inline bool
+16535: Interval<Boundary, Info>::ascii_load(std::istream& s) {
+16535:   using Parma_Polyhedra_Library::ascii_load;
+16535:   std::string str;
+16535:   if (!(s >> str) || str != "info") {
+16535:     return false;
+16535:   }
+16535:   if (!info().ascii_load(s)) {
+16535:     return false;
+16535:   }
+16535:   if (!(s >> str) || str != "lower") {
+16535:     return false;
+16535:   }
+16535:   if (!ascii_load(s, lower())) {
+16535:     return false;
+16535:   }
+16535:   if (!(s >> str) || str != "upper") {
+16535:     return false;
+16535:   }
+16535:   if (!ascii_load(s, upper())) {
+16535:     return false;
+16535:   }
+16535:   ((void) 0);
+16535:   return true;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Interval_Boundary_Type> struct Select_Temp_Boundary_Type;
+16535: 
+16535: template <typename Interval_Boundary_Type>
+16535: struct Select_Temp_Boundary_Type {
+16535:   typedef Interval_Boundary_Type type;
+16535: };
+16535: 
+16535: 
+16535: template <>
+16535: struct Select_Temp_Boundary_Type<float> {
+16535:   typedef double type;
+16535: };
+16535: 
+16535: 
+16535: template <>
+16535: struct Select_Temp_Boundary_Type<char> {
+16535:   typedef signed long long type;
+16535: };
+16535: 
+16535: template <>
+16535: struct Select_Temp_Boundary_Type<signed char> {
+16535:   typedef signed long long type;
+16535: };
+16535: 
+16535: template <>
+16535: struct Select_Temp_Boundary_Type<unsigned char> {
+16535:   typedef signed long long type;
+16535: };
+16535: 
+16535: template <>
+16535: struct Select_Temp_Boundary_Type<signed short> {
+16535:   typedef signed long long type;
+16535: };
+16535: 
+16535: template <>
+16535: struct Select_Temp_Boundary_Type<unsigned short> {
+16535:   typedef signed long long type;
+16535: };
+16535: 
+16535: template <>
+16535: struct Select_Temp_Boundary_Type<signed int> {
+16535:   typedef signed long long type;
+16535: };
+16535: 
+16535: template <>
+16535: struct Select_Temp_Boundary_Type<unsigned int> {
+16535:   typedef signed long long type;
+16535: };
+16535: 
+16535: template <>
+16535: struct Select_Temp_Boundary_Type<signed long> {
+16535:   typedef signed long long type;
+16535: };
+16535: 
+16535: template <>
+16535: struct Select_Temp_Boundary_Type<unsigned long> {
+16535:   typedef signed long long type;
+16535: };
+16535: 
+16535: template <>
+16535: struct Select_Temp_Boundary_Type<unsigned long long> {
+16535:   typedef signed long long type;
+16535: };
+16535: 
+16535: 
+16535: template <typename Boundary, typename Info>
+16535: inline void
+16535: swap(Interval<Boundary, Info>& x, Interval<Boundary, Info>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 779 "../../src/Interval_defs.hh" 2
+16535: # 1 "../../src/Interval_templates.hh" 1
+16535: # 29 "../../src/Interval_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Boundary, typename Info>
+16535: template <typename C>
+16535: typename Enable_If<Is_Same_Or_Derived<I_Constraint_Base, C>::value, I_Result>::type
+16535: Interval<Boundary, Info>::lower_extend(const C& c) {
+16535:   ((void) 0);
+16535:   bool open;
+16535:   switch (c.rel()) {
+16535:   case V_LGE:
+16535:     return lower_extend();
+16535:   case V_NAN:
+16535:     return I_NOT_EMPTY | I_EXACT | I_UNCHANGED;
+16535:   case V_GT:
+16535:     open = true;
+16535:     break;
+16535:   case V_GE:
+16535:   case V_EQ:
+16535:     open = false;
+16535:     break;
+16535:   default:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return I_NOT_EMPTY | I_EXACT | I_UNCHANGED;
+16535:   }
+16535:   min_assign(LOWER, lower(), info(), LOWER, c.value(), f_info(c.value(), open));
+16535:   ((void) 0);
+16535:   return I_ANY;
+16535: }
+16535: 
+16535: template <typename Boundary, typename Info>
+16535: template <typename C>
+16535: typename Enable_If<Is_Same_Or_Derived<I_Constraint_Base, C>::value, I_Result>::type
+16535: Interval<Boundary, Info>::upper_extend(const C& c) {
+16535:   ((void) 0);
+16535:   bool open;
+16535:   switch (c.rel()) {
+16535:   case V_LGE:
+16535:     return lower_extend();
+16535:   case V_NAN:
+16535:     return I_NOT_EMPTY | I_EXACT | I_UNCHANGED;
+16535:   case V_LT:
+16535:     open = true;
+16535:     break;
+16535:   case V_LE:
+16535:   case V_EQ:
+16535:     open = false;
+16535:     break;
+16535:   default:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return I_NOT_EMPTY | I_EXACT | I_UNCHANGED;
+16535:   }
+16535:   max_assign(UPPER, upper(), info(), UPPER, c.value(), f_info(c.value(), open));
+16535:   ((void) 0);
+16535:   return I_ANY;
+16535: }
+16535: 
+16535: template <typename Boundary, typename Info>
+16535: template <typename From, typename Iterator>
+16535: typename Enable_If<Is_Interval<From>::value, void>::type
+16535: Interval<Boundary, Info>::CC76_widening_assign(const From& y,
+16535:                                                Iterator first,
+16535:                                                Iterator last) {
+16535: 
+16535:   ((void) 0);
+16535:   Interval<Boundary, Info>& x = *this;
+16535: 
+16535: 
+16535:   if (!x.upper_is_boundary_infinity()) {
+16535:     Boundary& x_ub = x.upper();
+16535:     const Boundary& y_ub = y.upper();
+16535:     ((void) 0);
+16535:     if (y_ub < x_ub) {
+16535:       Iterator k = std::lower_bound(first, last, x_ub);
+16535:       if (k != last) {
+16535:         if (x_ub < *k) {
+16535:           x_ub = *k;
+16535:         }
+16535:       }
+16535:       else {
+16535:         x.upper_extend();
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   if (!x.lower_is_boundary_infinity()) {
+16535:     Boundary& x_lb = x.lower();
+16535:     const Boundary& y_lb = y.lower();
+16535:     ((void) 0);
+16535:     if (y_lb > x_lb) {
+16535:       Iterator k = std::lower_bound(first, last, x_lb);
+16535:       if (k != last) {
+16535:         if (x_lb < *k) {
+16535:           if (k != first) {
+16535:             x_lb = *--k;
+16535:           }
+16535:           else {
+16535:             x.lower_extend();
+16535:           }
+16535:         }
+16535:       }
+16535:       else {
+16535:         if (k != first) {
+16535:           x_lb = *--k;
+16535:         }
+16535:         else {
+16535:           x.lower_extend();
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename Boundary, typename Info>
+16535: Interval<Boundary, Info>::Interval(const char* s) {
+16535: 
+16535:   Boundary lower_bound;
+16535:   Result lower_r = assign_r(lower_bound, s, ROUND_DOWN);
+16535:   if (lower_r == V_CVT_STR_UNK || lower_r == V_NAN) {
+16535:     throw std::invalid_argument("PPL::Interval(const char* s)"
+16535:                                 " with s invalid");
+16535:   }
+16535:   lower_r = result_relation_class(lower_r);
+16535: 
+16535: 
+16535:   Boundary upper_bound;
+16535:   Result upper_r = assign_r(upper_bound, s, ROUND_UP);
+16535:   ((void) 0);
+16535:   upper_r = result_relation_class(upper_r);
+16535: 
+16535: 
+16535:   bool lower_open = false;
+16535:   bool upper_open = false;
+16535:   bool lower_boundary_infinity = false;
+16535:   bool upper_boundary_infinity = false;
+16535:   switch (lower_r) {
+16535:   case V_EQ:
+16535:   case V_GE:
+16535:     break;
+16535:   case V_GT:
+16535:     lower_open = true;
+16535:     break;
+16535:   case V_GT_MINUS_INFINITY:
+16535:     lower_open = true;
+16535: 
+16535:   case V_EQ_MINUS_INFINITY:
+16535:     lower_boundary_infinity = true;
+16535:     break;
+16535:   case V_EQ_PLUS_INFINITY:
+16535:   case V_LT_PLUS_INFINITY:
+16535:     if (upper_r == V_EQ_PLUS_INFINITY || upper_r == V_LT_PLUS_INFINITY) {
+16535:       assign(UNIVERSE);
+16535:     }
+16535:     else {
+16535:       assign(EMPTY);
+16535:     }
+16535:     break;
+16535:   default:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     break;
+16535:   }
+16535:   switch (upper_r) {
+16535:   case V_EQ:
+16535:   case V_LE:
+16535:     break;
+16535:   case V_LT:
+16535:     upper_open = true;
+16535:     break;
+16535:   case V_EQ_MINUS_INFINITY:
+16535:   case V_GT_MINUS_INFINITY:
+16535:     if (lower_r == V_EQ_MINUS_INFINITY || lower_r == V_GT_MINUS_INFINITY) {
+16535:       assign(UNIVERSE);
+16535:     }
+16535:     else {
+16535:       assign(EMPTY);
+16535:     }
+16535:     break;
+16535:   case V_LT_PLUS_INFINITY:
+16535:     upper_open = true;
+16535: 
+16535:   case V_EQ_PLUS_INFINITY:
+16535:     upper_boundary_infinity = true;
+16535:     break;
+16535:   default:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     break;
+16535:   }
+16535: 
+16535:   if (!lower_boundary_infinity
+16535:       && !upper_boundary_infinity
+16535:       && (lower_bound > upper_bound
+16535:           || (lower_open && lower_bound == upper_bound))) {
+16535:     assign(EMPTY);
+16535:   }
+16535:   else {
+16535:     if (lower_boundary_infinity) {
+16535:       set_minus_infinity(LOWER, lower(), info(), lower_open);
+16535:     }
+16535:     else {
+16535:       Boundary_NS::assign(LOWER, lower(), info(),
+16535:                           LOWER, lower_bound, SCALAR_INFO, lower_open);
+16535:     }
+16535:     if (upper_boundary_infinity) {
+16535:       set_plus_infinity(UPPER, upper(), info(), upper_open);
+16535:     }
+16535:     else {
+16535:       Boundary_NS::assign(UPPER, upper(), info(),
+16535:                           UPPER, upper_bound, SCALAR_INFO, upper_open);
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: 
+16535: template <typename Boundary, typename Info>
+16535: inline std::istream&
+16535: operator>>(std::istream& is, Interval<Boundary, Info>& x) {
+16535:   Boundary lower_bound;
+16535:   Boundary upper_bound;
+16535:   bool lower_boundary_infinity = false;
+16535:   bool upper_boundary_infinity = false;
+16535:   bool lower_open = false;
+16535:   bool upper_open = false;
+16535:   Result lower_r;
+16535:   Result upper_r;
+16535: 
+16535: 
+16535:   char c;
+16535:   do {
+16535:     if (!is.get(c)) {
+16535:       goto fail;
+16535:     }
+16535:   } while (is_space(c));
+16535: 
+16535: 
+16535:   if (c == '(') {
+16535:     lower_open = true;
+16535:   }
+16535:   else if (c == '[') {
+16535:     if (!is.get(c)) {
+16535:       goto fail;
+16535:     }
+16535:     if (c == ']') {
+16535: 
+16535:       x.assign(EMPTY);
+16535:       return is;
+16535:     }
+16535:     else {
+16535:       is.unget();
+16535:     }
+16535:   }
+16535:   else {
+16535:     goto unexpected_char;
+16535:   }
+16535: 
+16535: 
+16535:   lower_r = input(lower_bound, is, ROUND_DOWN);
+16535:   if (lower_r == V_CVT_STR_UNK || lower_r == V_NAN) {
+16535:     goto fail;
+16535:   }
+16535:   lower_r = result_relation_class(lower_r);
+16535: 
+16535: 
+16535:   do {
+16535:     if (!is.get(c)) {
+16535:       goto fail;
+16535:     }
+16535:   } while (is_space(c));
+16535:   if (c != ',') {
+16535:     goto unexpected_char;
+16535:   }
+16535: 
+16535: 
+16535:   upper_r = input(upper_bound, is, ROUND_UP);
+16535:   if (upper_r == V_CVT_STR_UNK || upper_r == V_NAN) {
+16535:     goto fail;
+16535:   }
+16535:   upper_r = result_relation_class(upper_r);
+16535: 
+16535: 
+16535:   do {
+16535:     if (!is.get(c)) {
+16535:       goto fail;
+16535:     }
+16535:   } while (is_space(c));
+16535:   if (c == ')') {
+16535:     upper_open = true;
+16535:   }
+16535:   else if (c != ']') {
+16535:   unexpected_char:
+16535:     is.unget();
+16535:   fail:
+16535:     is.setstate(std::ios::failbit);
+16535:     return is;
+16535:   }
+16535: 
+16535: 
+16535:   switch (lower_r) {
+16535:   case V_EQ:
+16535:   case V_GE:
+16535:     break;
+16535:   case V_GT:
+16535:     lower_open = true;
+16535:     break;
+16535:   case V_GT_MINUS_INFINITY:
+16535:     lower_open = true;
+16535: 
+16535:   case V_EQ_MINUS_INFINITY:
+16535:     lower_boundary_infinity = true;
+16535:     break;
+16535:   case V_EQ_PLUS_INFINITY:
+16535:   case V_LT_PLUS_INFINITY:
+16535:     if (upper_r == V_EQ_PLUS_INFINITY || upper_r == V_LT_PLUS_INFINITY) {
+16535:       x.assign(UNIVERSE);
+16535:     }
+16535:     else {
+16535:       x.assign(EMPTY);
+16535:     }
+16535:     return is;
+16535:   default:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     break;
+16535:   }
+16535:   switch (upper_r) {
+16535:   case V_EQ:
+16535:   case V_LE:
+16535:     break;
+16535:   case V_LT:
+16535:     upper_open = true;
+16535:     break;
+16535:   case V_GT_MINUS_INFINITY:
+16535:     upper_open = true;
+16535: 
+16535:   case V_EQ_MINUS_INFINITY:
+16535:     if (lower_r == V_EQ_MINUS_INFINITY || lower_r == V_GT_MINUS_INFINITY) {
+16535:       x.assign(UNIVERSE);
+16535:     }
+16535:     else {
+16535:       x.assign(EMPTY);
+16535:     }
+16535:     return is;
+16535:   case V_EQ_PLUS_INFINITY:
+16535:   case V_LT_PLUS_INFINITY:
+16535:     upper_boundary_infinity = true;
+16535:     break;
+16535:   default:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     break;
+16535:   }
+16535: 
+16535:   if (!lower_boundary_infinity
+16535:       && !upper_boundary_infinity
+16535:       && (lower_bound > upper_bound
+16535:           || (lower_open && lower_bound == upper_bound))) {
+16535:     x.assign(EMPTY);
+16535:   }
+16535:   else {
+16535:     if (lower_boundary_infinity) {
+16535:       set_minus_infinity(LOWER, x.lower(), x.info(), lower_open);
+16535:     }
+16535:     else {
+16535:       assign(LOWER, x.lower(), x.info(),
+16535:              LOWER, lower_bound, SCALAR_INFO, lower_open);
+16535:     }
+16535:     if (upper_boundary_infinity) {
+16535:       set_plus_infinity(UPPER, x.upper(), x.info(), upper_open);
+16535:     }
+16535:     else {
+16535:       assign(UPPER, x.upper(), x.info(),
+16535:              UPPER, upper_bound, SCALAR_INFO, upper_open);
+16535:     }
+16535:   }
+16535:   return is;
+16535: }
+16535: 
+16535: template <typename Boundary, typename Info>
+16535: template <typename From>
+16535: typename Enable_If<Is_Interval<From>::value, bool>::type
+16535: Interval<Boundary, Info>::simplify_using_context_assign(const From& y) {
+16535: 
+16535:   if (lt(UPPER, upper(), info(), LOWER, f_lower(y), f_info(y))) {
+16535:     lower_extend();
+16535:     return false;
+16535:   }
+16535:   if (gt(LOWER, lower(), info(), UPPER, f_upper(y), f_info(y))) {
+16535:     upper_extend();
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (!upper_is_boundary_infinity() && !y.upper_is_boundary_infinity()
+16535:       && y.upper() <= upper()) {
+16535:     upper_extend();
+16535:   }
+16535: 
+16535:   if (!lower_is_boundary_infinity() && !y.lower_is_boundary_infinity()
+16535:       && y.lower() >= lower()) {
+16535:     lower_extend();
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename Boundary, typename Info>
+16535: template <typename From>
+16535: typename Enable_If<Is_Interval<From>::value, void>::type
+16535: Interval<Boundary, Info>::empty_intersection_assign(const From&) {
+16535: 
+16535:   assign(EMPTY);
+16535: }
+16535: 
+16535: }
+16535: # 780 "../../src/Interval_defs.hh" 2
+16535: # 28 "../../src/Integer_Interval.hh" 2
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: struct Integer_Interval_Info_Policy {
+16535:   enum const_bool_value_store_special { store_special = (true) };
+16535:   enum const_bool_value_store_open { store_open = (false) };
+16535:   enum const_bool_value_cache_empty { cache_empty = (true) };
+16535:   enum const_bool_value_cache_singleton { cache_singleton = (true) };
+16535:   enum anonymous_enum_next_bit { next_bit = (0) };
+16535:   enum const_bool_value_may_be_empty { may_be_empty = (true) };
+16535:   enum const_bool_value_may_contain_infinity { may_contain_infinity = (false) };
+16535:   enum const_bool_value_check_empty_result { check_empty_result = (false) };
+16535:   enum const_bool_value_check_inexact { check_inexact = (false) };
+16535: };
+16535: 
+16535: typedef Interval_Info_Bitset<unsigned int, Integer_Interval_Info_Policy> Integer_Interval_Info;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef Interval<mpz_class, Integer_Interval_Info> Integer_Interval;
+16535: 
+16535: }
+16535: # 7 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/initializer.hh" 1
+16535: # 27 "../../src/initializer.hh"
+16535: # 1 "../../src/Init_defs.hh" 1
+16535: # 30 "../../src/Init_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: # 40 "../../src/Init_defs.hh"
+16535: void set_rounding_for_PPL();
+16535: # 55 "../../src/Init_defs.hh"
+16535: void restore_pre_PPL_rounding();
+16535: 
+16535: }
+16535: # 72 "../../src/Init_defs.hh"
+16535: class Parma_Polyhedra_Library::Init {
+16535: public:
+16535: 
+16535:   Init();
+16535: 
+16535: 
+16535:   ~Init();
+16535: 
+16535: private:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const unsigned DEFAULT_IRRATIONAL_PRECISION = 128U;
+16535: 
+16535: 
+16535:   static unsigned int count;
+16535:   static fpu_rounding_direction_type old_rounding_direction;
+16535: 
+16535:   friend void set_rounding_for_PPL();
+16535:   friend void restore_pre_PPL_rounding();
+16535: };
+16535: 
+16535: # 1 "../../src/Init_inlines.hh" 1
+16535: # 30 "../../src/Init_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline void
+16535: set_rounding_for_PPL() {
+16535: 
+16535:     fpu_set_rounding_direction(round_fpu_dir(ROUND_DIRECT));
+16535: 
+16535: }
+16535: 
+16535: inline void
+16535: restore_pre_PPL_rounding() {
+16535: 
+16535:   fpu_set_rounding_direction(Init::old_rounding_direction);
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 98 "../../src/Init_defs.hh" 2
+16535: # 28 "../../src/initializer.hh" 2
+16535: 
+16535: 
+16535: 
+16535: static Parma_Polyhedra_Library::Init Parma_Polyhedra_Library_initializer;
+16535: # 48 "../../src/initializer.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: inline void
+16535: initialize() {
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: finalize() {
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 8 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/Linear_Expression_Impl_defs.hh" 1
+16535: # 27 "../../src/Linear_Expression_Impl_defs.hh"
+16535: # 1 "../../src/Linear_Expression_Impl_types.hh" 1
+16535: # 16 "../../src/Linear_Expression_Impl_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Row>
+16535: class Linear_Expression_Impl;
+16535: 
+16535: }
+16535: # 28 "../../src/Linear_Expression_Impl_defs.hh" 2
+16535: # 1 "../../src/Linear_Expression_Interface_defs.hh" 1
+16535: # 27 "../../src/Linear_Expression_Interface_defs.hh"
+16535: # 1 "../../src/Linear_Expression_Interface_types.hh" 1
+16535: # 16 "../../src/Linear_Expression_Interface_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Linear_Expression_Interface;
+16535: 
+16535: }
+16535: # 28 "../../src/Linear_Expression_Interface_defs.hh" 2
+16535: # 1 "../../src/Coefficient_defs.hh" 1
+16535: # 27 "../../src/Coefficient_defs.hh"
+16535: # 1 "../../src/Coefficient_types.hh" 1
+16535: # 19 "../../src/Coefficient_types.hh"
+16535: # 1 "../../src/GMP_Integer_types.hh" 1
+16535: # 20 "../../src/GMP_Integer_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: # 31 "../../src/GMP_Integer_types.hh"
+16535: typedef mpz_class GMP_Integer;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <>
+16535: struct Coefficient_traits_template<GMP_Integer> {
+16535: 
+16535:   typedef const GMP_Integer& const_reference;
+16535: };
+16535: 
+16535: }
+16535: # 20 "../../src/Coefficient_types.hh" 2
+16535: # 152 "../../src/Coefficient_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: # 172 "../../src/Coefficient_types.hh"
+16535: typedef mpz_class Coefficient;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef Coefficient_traits_template<Coefficient> Coefficient_traits;
+16535: 
+16535: }
+16535: # 28 "../../src/Coefficient_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "../../src/GMP_Integer_defs.hh" 1
+16535: # 31 "../../src/GMP_Integer_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: const mpz_class& raw_value(const GMP_Integer& x);
+16535: 
+16535: 
+16535: 
+16535: mpz_class& raw_value(GMP_Integer& x);
+16535: # 51 "../../src/GMP_Integer_defs.hh"
+16535: void neg_assign(GMP_Integer& x);
+16535: 
+16535: 
+16535: 
+16535: void neg_assign(GMP_Integer& x, const GMP_Integer& y);
+16535: 
+16535: 
+16535: 
+16535: void abs_assign(GMP_Integer& x);
+16535: 
+16535: 
+16535: 
+16535: void abs_assign(GMP_Integer& x, const GMP_Integer& y);
+16535: 
+16535: 
+16535: 
+16535: void rem_assign(GMP_Integer& x,
+16535:                 const GMP_Integer& y, const GMP_Integer& z);
+16535: 
+16535: 
+16535: 
+16535: void gcd_assign(GMP_Integer& x,
+16535:                 const GMP_Integer& y, const GMP_Integer& z);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: void gcdext_assign(GMP_Integer& x, GMP_Integer& s, GMP_Integer& t,
+16535:                    const GMP_Integer& y, const GMP_Integer& z);
+16535: 
+16535: 
+16535: 
+16535: void lcm_assign(GMP_Integer& x,
+16535:                 const GMP_Integer& y, const GMP_Integer& z);
+16535: 
+16535: 
+16535: 
+16535: void add_mul_assign(GMP_Integer& x,
+16535:                     const GMP_Integer& y, const GMP_Integer& z);
+16535: 
+16535: 
+16535: 
+16535: void sub_mul_assign(GMP_Integer& x,
+16535:                     const GMP_Integer& y, const GMP_Integer& z);
+16535: 
+16535: 
+16535: 
+16535: void mul_2exp_assign(GMP_Integer& x, const GMP_Integer& y, unsigned int exp);
+16535: 
+16535: 
+16535: 
+16535: void div_2exp_assign(GMP_Integer& x, const GMP_Integer& y, unsigned int exp);
+16535: # 113 "../../src/GMP_Integer_defs.hh"
+16535: void exact_div_assign(GMP_Integer& x,
+16535:                       const GMP_Integer& y, const GMP_Integer& z);
+16535: 
+16535: 
+16535: 
+16535: void sqrt_assign(GMP_Integer& x, const GMP_Integer& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: int cmp(const GMP_Integer& x, const GMP_Integer& y);
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/GMP_Integer_inlines.hh" 1
+16535: # 29 "../../src/GMP_Integer_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline void
+16535: neg_assign(GMP_Integer& x) {
+16535:   
+16535: # 33 "../../src/GMP_Integer_inlines.hh" 3 4
+16535:  __gmpz_neg
+16535: # 33 "../../src/GMP_Integer_inlines.hh"
+16535:         (x.get_mpz_t(), x.get_mpz_t());
+16535: }
+16535: 
+16535: inline void
+16535: neg_assign(GMP_Integer& x, const GMP_Integer& y) {
+16535:   
+16535: # 38 "../../src/GMP_Integer_inlines.hh" 3 4
+16535:  __gmpz_neg
+16535: # 38 "../../src/GMP_Integer_inlines.hh"
+16535:         (x.get_mpz_t(), y.get_mpz_t());
+16535: }
+16535: 
+16535: inline void
+16535: abs_assign(GMP_Integer& x) {
+16535:   
+16535: # 43 "../../src/GMP_Integer_inlines.hh" 3 4
+16535:  __gmpz_abs
+16535: # 43 "../../src/GMP_Integer_inlines.hh"
+16535:         (x.get_mpz_t(), x.get_mpz_t());
+16535: }
+16535: 
+16535: inline void
+16535: abs_assign(GMP_Integer& x, const GMP_Integer& y) {
+16535:   
+16535: # 48 "../../src/GMP_Integer_inlines.hh" 3 4
+16535:  __gmpz_abs
+16535: # 48 "../../src/GMP_Integer_inlines.hh"
+16535:         (x.get_mpz_t(), y.get_mpz_t());
+16535: }
+16535: 
+16535: inline void
+16535: gcd_assign(GMP_Integer& x, const GMP_Integer& y, const GMP_Integer& z) {
+16535:   
+16535: # 53 "../../src/GMP_Integer_inlines.hh" 3 4
+16535:  __gmpz_gcd
+16535: # 53 "../../src/GMP_Integer_inlines.hh"
+16535:         (x.get_mpz_t(), y.get_mpz_t(), z.get_mpz_t());
+16535: }
+16535: 
+16535: inline void
+16535: rem_assign(GMP_Integer& x, const GMP_Integer& y, const GMP_Integer& z) {
+16535:   
+16535: # 58 "../../src/GMP_Integer_inlines.hh" 3 4
+16535:  __gmpz_tdiv_r
+16535: # 58 "../../src/GMP_Integer_inlines.hh"
+16535:            (x.get_mpz_t(), y.get_mpz_t(), z.get_mpz_t());
+16535: }
+16535: 
+16535: inline void
+16535: gcdext_assign(GMP_Integer& x, GMP_Integer& s, GMP_Integer& t,
+16535:               const GMP_Integer& y, const GMP_Integer& z) {
+16535:   
+16535: # 64 "../../src/GMP_Integer_inlines.hh" 3 4
+16535:  __gmpz_gcdext
+16535: # 64 "../../src/GMP_Integer_inlines.hh"
+16535:            (x.get_mpz_t(),
+16535:              s.get_mpz_t(), t.get_mpz_t(),
+16535:              y.get_mpz_t(), z.get_mpz_t());
+16535: }
+16535: 
+16535: inline void
+16535: lcm_assign(GMP_Integer& x, const GMP_Integer& y, const GMP_Integer& z) {
+16535:   
+16535: # 71 "../../src/GMP_Integer_inlines.hh" 3 4
+16535:  __gmpz_lcm
+16535: # 71 "../../src/GMP_Integer_inlines.hh"
+16535:         (x.get_mpz_t(), y.get_mpz_t(), z.get_mpz_t());
+16535: }
+16535: 
+16535: inline void
+16535: add_mul_assign(GMP_Integer& x, const GMP_Integer& y, const GMP_Integer& z) {
+16535:   
+16535: # 76 "../../src/GMP_Integer_inlines.hh" 3 4
+16535:  __gmpz_addmul
+16535: # 76 "../../src/GMP_Integer_inlines.hh"
+16535:            (x.get_mpz_t(), y.get_mpz_t(), z.get_mpz_t());
+16535: }
+16535: 
+16535: inline void
+16535: sub_mul_assign(GMP_Integer& x, const GMP_Integer& y, const GMP_Integer& z) {
+16535:   
+16535: # 81 "../../src/GMP_Integer_inlines.hh" 3 4
+16535:  __gmpz_submul
+16535: # 81 "../../src/GMP_Integer_inlines.hh"
+16535:            (x.get_mpz_t(), y.get_mpz_t(), z.get_mpz_t());
+16535: }
+16535: 
+16535: inline void
+16535: mul_2exp_assign(GMP_Integer& x, const GMP_Integer& y, unsigned int exp) {
+16535:   
+16535: # 86 "../../src/GMP_Integer_inlines.hh" 3 4
+16535:  __gmpz_mul_2exp
+16535: # 86 "../../src/GMP_Integer_inlines.hh"
+16535:              (x.get_mpz_t(), y.get_mpz_t(), exp);
+16535: }
+16535: 
+16535: inline void
+16535: div_2exp_assign(GMP_Integer& x, const GMP_Integer& y, unsigned int exp) {
+16535:   
+16535: # 91 "../../src/GMP_Integer_inlines.hh" 3 4
+16535:  __gmpz_tdiv_q_2exp
+16535: # 91 "../../src/GMP_Integer_inlines.hh"
+16535:                 (x.get_mpz_t(), y.get_mpz_t(), exp);
+16535: }
+16535: 
+16535: inline void
+16535: exact_div_assign(GMP_Integer& x, const GMP_Integer& y, const GMP_Integer& z) {
+16535:   ((void) 0);
+16535:   
+16535: # 97 "../../src/GMP_Integer_inlines.hh" 3 4
+16535:  __gmpz_divexact
+16535: # 97 "../../src/GMP_Integer_inlines.hh"
+16535:              (x.get_mpz_t(), y.get_mpz_t(), z.get_mpz_t());
+16535: }
+16535: 
+16535: inline void
+16535: sqrt_assign(GMP_Integer& x, const GMP_Integer& y) {
+16535:   
+16535: # 102 "../../src/GMP_Integer_inlines.hh" 3 4
+16535:  __gmpz_sqrt
+16535: # 102 "../../src/GMP_Integer_inlines.hh"
+16535:          (x.get_mpz_t(), y.get_mpz_t());
+16535: }
+16535: 
+16535: inline int
+16535: cmp(const GMP_Integer& x, const GMP_Integer& y) {
+16535:   return 
+16535: # 107 "../../src/GMP_Integer_inlines.hh" 3 4
+16535:         __gmpz_cmp
+16535: # 107 "../../src/GMP_Integer_inlines.hh"
+16535:                (x.get_mpz_t(), y.get_mpz_t());
+16535: }
+16535: 
+16535: inline const mpz_class&
+16535: raw_value(const GMP_Integer& x) {
+16535:   return x;
+16535: }
+16535: 
+16535: inline mpz_class&
+16535: raw_value(GMP_Integer& x) {
+16535:   return x;
+16535: }
+16535: 
+16535: }
+16535: # 133 "../../src/GMP_Integer_defs.hh" 2
+16535: # 36 "../../src/Coefficient_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: void Coefficient_constants_initialize();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: void Coefficient_constants_finalize();
+16535: 
+16535: 
+16535: Coefficient_traits::const_reference Coefficient_zero();
+16535: 
+16535: 
+16535: Coefficient_traits::const_reference Coefficient_one();
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Coefficient_inlines.hh" 1
+16535: # 27 "../../src/Coefficient_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: # 57 "../../src/Coefficient_inlines.hh"
+16535: inline Coefficient_traits::const_reference
+16535: Coefficient_zero() {
+16535:   extern const Coefficient* Coefficient_zero_p;
+16535:   return *Coefficient_zero_p;
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: Coefficient_one() {
+16535:   extern const Coefficient* Coefficient_one_p;
+16535:   ((void) 0);
+16535:   return *Coefficient_one_p;
+16535: }
+16535: 
+16535: 
+16535: }
+16535: # 61 "../../src/Coefficient_defs.hh" 2
+16535: # 29 "../../src/Linear_Expression_Interface_defs.hh" 2
+16535: 
+16535: # 1 "../../src/Variables_Set_types.hh" 1
+16535: # 16 "../../src/Variables_Set_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Variables_Set;
+16535: 
+16535: }
+16535: # 31 "../../src/Linear_Expression_Interface_defs.hh" 2
+16535: # 1 "../../src/Dense_Row_types.hh" 1
+16535: # 16 "../../src/Dense_Row_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Dense_Row;
+16535: 
+16535: }
+16535: # 32 "../../src/Linear_Expression_Interface_defs.hh" 2
+16535: # 1 "../../src/Sparse_Row_types.hh" 1
+16535: # 16 "../../src/Sparse_Row_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Sparse_Row;
+16535: 
+16535: }
+16535: # 33 "../../src/Linear_Expression_Interface_defs.hh" 2
+16535: # 51 "../../src/Linear_Expression_Interface_defs.hh"
+16535: class Parma_Polyhedra_Library::Linear_Expression_Interface {
+16535: public:
+16535:   virtual ~Linear_Expression_Interface();
+16535: 
+16535:   virtual bool OK() const = 0;
+16535: 
+16535: 
+16535:   virtual Representation representation() const = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   class const_iterator_interface {
+16535:   public:
+16535:     typedef std::bidirectional_iterator_tag iterator_category;
+16535:     typedef const Coefficient value_type;
+16535:     typedef std::ptrdiff_t difference_type;
+16535:     typedef value_type* pointer;
+16535:     typedef Coefficient_traits::const_reference reference;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     virtual const_iterator_interface* clone() const = 0;
+16535: 
+16535:     virtual ~const_iterator_interface();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     virtual void operator++() = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     virtual void operator--() = 0;
+16535: 
+16535: 
+16535:     virtual reference operator*() const = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     virtual Variable variable() const = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     virtual bool operator==(const const_iterator_interface& x) const = 0;
+16535:   };
+16535: 
+16535: 
+16535: 
+16535:   virtual const_iterator_interface* begin() const = 0;
+16535: 
+16535: 
+16535: 
+16535:   virtual const_iterator_interface* end() const = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual const_iterator_interface* lower_bound(Variable v) const = 0;
+16535: 
+16535: 
+16535:   virtual dimension_type space_dimension() const = 0;
+16535: 
+16535: 
+16535:   virtual void set_space_dimension(dimension_type n) = 0;
+16535: 
+16535: 
+16535:   virtual Coefficient_traits::const_reference
+16535:   coefficient(Variable v) const = 0;
+16535: 
+16535: 
+16535:   virtual void
+16535:   set_coefficient(Variable v, Coefficient_traits::const_reference n) = 0;
+16535: 
+16535: 
+16535:   virtual Coefficient_traits::const_reference inhomogeneous_term() const = 0;
+16535: 
+16535: 
+16535:   virtual void
+16535:   set_inhomogeneous_term(Coefficient_traits::const_reference n) = 0;
+16535: # 158 "../../src/Linear_Expression_Interface_defs.hh"
+16535:   virtual void
+16535:   linear_combine(const Linear_Expression_Interface& y, Variable v) = 0;
+16535: 
+16535: 
+16535: 
+16535:   virtual void linear_combine(const Linear_Expression_Interface& y,
+16535:                               Coefficient_traits::const_reference c1,
+16535:                               Coefficient_traits::const_reference c2) = 0;
+16535: 
+16535: 
+16535: 
+16535:   virtual void linear_combine_lax(const Linear_Expression_Interface& y,
+16535:                                   Coefficient_traits::const_reference c1,
+16535:                                   Coefficient_traits::const_reference c2) = 0;
+16535: 
+16535: 
+16535:   virtual void swap_space_dimensions(Variable v1, Variable v2) = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void remove_space_dimensions(const Variables_Set& vars) = 0;
+16535: 
+16535: 
+16535: 
+16535:   virtual void shift_space_dimensions(Variable v, dimension_type n) = 0;
+16535: # 200 "../../src/Linear_Expression_Interface_defs.hh"
+16535:   virtual void
+16535:   permute_space_dimensions(const std::vector<Variable>& cycle) = 0;
+16535: 
+16535: 
+16535:   virtual bool is_zero() const = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual bool all_homogeneous_terms_are_zero() const = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual memory_size_type total_memory_in_bytes() const = 0;
+16535: 
+16535: 
+16535:   virtual memory_size_type external_memory_in_bytes() const = 0;
+16535: 
+16535: 
+16535:   virtual void ascii_dump(std::ostream& s) const = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual bool ascii_load(std::istream& s) = 0;
+16535: 
+16535: 
+16535: 
+16535:   virtual bool is_equal_to(const Linear_Expression_Interface& x) const = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void normalize() = 0;
+16535: 
+16535: 
+16535: 
+16535:   virtual void sign_normalize() = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void negate(dimension_type first, dimension_type last) = 0;
+16535: 
+16535:   virtual Linear_Expression_Interface&
+16535:   operator+=(Coefficient_traits::const_reference n) = 0;
+16535:   virtual Linear_Expression_Interface&
+16535:   operator-=(Coefficient_traits::const_reference n) = 0;
+16535: # 269 "../../src/Linear_Expression_Interface_defs.hh"
+16535:   virtual int compare(const Linear_Expression_Interface& y) const = 0;
+16535: 
+16535:   virtual Linear_Expression_Interface&
+16535:   operator+=(const Linear_Expression_Interface& e2) = 0;
+16535:   virtual Linear_Expression_Interface&
+16535:   operator+=(const Variable v) = 0;
+16535:   virtual Linear_Expression_Interface&
+16535:   operator-=(const Linear_Expression_Interface& e2) = 0;
+16535:   virtual Linear_Expression_Interface&
+16535:   operator-=(const Variable v) = 0;
+16535:   virtual Linear_Expression_Interface&
+16535:   operator*=(Coefficient_traits::const_reference n) = 0;
+16535:   virtual Linear_Expression_Interface&
+16535:   operator/=(Coefficient_traits::const_reference n) = 0;
+16535: 
+16535:   virtual void negate() = 0;
+16535: 
+16535:   virtual Linear_Expression_Interface&
+16535:   add_mul_assign(Coefficient_traits::const_reference n, const Variable v) = 0;
+16535: 
+16535:   virtual Linear_Expression_Interface&
+16535:   sub_mul_assign(Coefficient_traits::const_reference n, const Variable v) = 0;
+16535: 
+16535:   virtual void add_mul_assign(Coefficient_traits::const_reference factor,
+16535:                               const Linear_Expression_Interface& e2) = 0;
+16535: 
+16535:   virtual void sub_mul_assign(Coefficient_traits::const_reference factor,
+16535:                               const Linear_Expression_Interface& e2) = 0;
+16535: 
+16535:   virtual void print(std::ostream& s) const = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual bool all_zeroes(const Variables_Set& vars) const = 0;
+16535: 
+16535: 
+16535: 
+16535:   virtual bool have_a_common_variable(const Linear_Expression_Interface& x,
+16535:                                       Variable first, Variable last) const = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual Coefficient_traits::const_reference get(dimension_type i) const = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void set(dimension_type i, Coefficient_traits::const_reference n) = 0;
+16535: # 330 "../../src/Linear_Expression_Interface_defs.hh"
+16535:   virtual bool all_zeroes(dimension_type start, dimension_type end) const = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual dimension_type
+16535:   num_zeroes(dimension_type start, dimension_type end) const = 0;
+16535: # 348 "../../src/Linear_Expression_Interface_defs.hh"
+16535:   virtual Coefficient gcd(dimension_type start, dimension_type end) const = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void exact_div_assign(Coefficient_traits::const_reference c,
+16535:                                 dimension_type start, dimension_type end) = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void mul_assign(Coefficient_traits::const_reference n,
+16535:                           dimension_type start, dimension_type end) = 0;
+16535: # 381 "../../src/Linear_Expression_Interface_defs.hh"
+16535:   virtual void
+16535:   linear_combine(const Linear_Expression_Interface& y, dimension_type i) = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void linear_combine(const Linear_Expression_Interface& y,
+16535:                               Coefficient_traits::const_reference c1,
+16535:                               Coefficient_traits::const_reference c2,
+16535:                               dimension_type start, dimension_type end) = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void linear_combine_lax(const Linear_Expression_Interface& y,
+16535:                                   Coefficient_traits::const_reference c1,
+16535:                                   Coefficient_traits::const_reference c2,
+16535:                                   dimension_type start, dimension_type end) = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual dimension_type last_nonzero() const = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual dimension_type
+16535:   last_nonzero(dimension_type first, dimension_type last) const = 0;
+16535: 
+16535: 
+16535: 
+16535:   virtual dimension_type
+16535:   first_nonzero(dimension_type first, dimension_type last) const = 0;
+16535: # 431 "../../src/Linear_Expression_Interface_defs.hh"
+16535:   virtual bool
+16535:   all_zeroes_except(const Variables_Set& vars,
+16535:                     dimension_type start, dimension_type end) const = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void
+16535:   scalar_product_assign(Coefficient& result,
+16535:                         const Linear_Expression_Interface& y,
+16535:                         dimension_type start, dimension_type end) const = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual int
+16535:   scalar_product_sign(const Linear_Expression_Interface& y,
+16535:                       dimension_type start, dimension_type end) const = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void
+16535:   has_a_free_dimension_helper(std::set<dimension_type>& x) const = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual bool is_equal_to(const Linear_Expression_Interface& x,
+16535:                            dimension_type start, dimension_type end) const = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual bool is_equal_to(const Linear_Expression_Interface& x,
+16535:                            Coefficient_traits::const_reference c1,
+16535:                            Coefficient_traits::const_reference c2,
+16535:                            dimension_type start, dimension_type end) const = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void get_row(Dense_Row& r) const = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void get_row(Sparse_Row& r) const = 0;
+16535: };
+16535: # 29 "../../src/Linear_Expression_Impl_defs.hh" 2
+16535: 
+16535: 
+16535: # 1 "../../src/Variables_Set_defs.hh" 1
+16535: # 33 "../../src/Variables_Set_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: std::ostream&
+16535: operator<<(std::ostream& s, const Variables_Set& vs);
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: 
+16535: class Parma_Polyhedra_Library::Variables_Set
+16535:   : public std::set<dimension_type> {
+16535: private:
+16535:   typedef std::set<dimension_type> Base;
+16535: 
+16535: public:
+16535: 
+16535:   Variables_Set();
+16535: 
+16535: 
+16535:   explicit Variables_Set(const Variable v);
+16535: # 68 "../../src/Variables_Set_defs.hh"
+16535:   Variables_Set(const Variable v, const Variable w);
+16535: 
+16535: 
+16535:   static dimension_type max_space_dimension();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535:   void insert(Variable v);
+16535: 
+16535: 
+16535: 
+16535:   using Base::insert;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: };
+16535: 
+16535: # 1 "../../src/Variables_Set_inlines.hh" 1
+16535: # 30 "../../src/Variables_Set_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline
+16535: Variables_Set::Variables_Set()
+16535:   : Base() {
+16535: }
+16535: 
+16535: inline void
+16535: Variables_Set::insert(const Variable v) {
+16535:   insert(v.id());
+16535: }
+16535: 
+16535: inline
+16535: Variables_Set::Variables_Set(const Variable v)
+16535:   : Base() {
+16535:   insert(v);
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Variables_Set::max_space_dimension() {
+16535:   return Variable::max_space_dimension();
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Variables_Set::space_dimension() const {
+16535:   reverse_iterator i = rbegin();
+16535:   return (i == rend()) ? 0 : (*i + 1);
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Variables_Set::external_memory_in_bytes() const {
+16535: 
+16535: 
+16535: 
+16535:   enum color { red, black };
+16535:   return size() * (sizeof(color) + 3*sizeof(void*) + sizeof(dimension_type));
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Variables_Set::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: }
+16535: # 106 "../../src/Variables_Set_defs.hh" 2
+16535: # 32 "../../src/Linear_Expression_Impl_defs.hh" 2
+16535: # 1 "../../src/Dense_Row_defs.hh" 1
+16535: # 33 "../../src/Dense_Row_defs.hh"
+16535: # 1 "/usr/include/c++/8/memory" 1 3
+16535: # 46 "/usr/include/c++/8/memory" 3
+16535:        
+16535: # 47 "/usr/include/c++/8/memory" 3
+16535: # 67 "/usr/include/c++/8/memory" 3
+16535: # 1 "/usr/include/c++/8/bits/stl_raw_storage_iter.h" 1 3
+16535: # 59 "/usr/include/c++/8/bits/stl_raw_storage_iter.h" 3
+16535: 
+16535: # 59 "/usr/include/c++/8/bits/stl_raw_storage_iter.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <class _OutputIterator, class _Tp>
+16535:     class raw_storage_iterator
+16535:     : public iterator<output_iterator_tag, void, void, void, void>
+16535:     {
+16535:     protected:
+16535:       _OutputIterator _M_iter;
+16535: 
+16535:     public:
+16535:       explicit
+16535:       raw_storage_iterator(_OutputIterator __x)
+16535:       : _M_iter(__x) {}
+16535: 
+16535:       raw_storage_iterator&
+16535:       operator*() { return *this; }
+16535: 
+16535:       raw_storage_iterator&
+16535:       operator=(const _Tp& __element)
+16535:       {
+16535:  std::_Construct(std::__addressof(*_M_iter), __element);
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       raw_storage_iterator&
+16535:       operator=(_Tp&& __element)
+16535:       {
+16535:  std::_Construct(std::__addressof(*_M_iter), std::move(__element));
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535:       raw_storage_iterator&
+16535:       operator++()
+16535:       {
+16535:  ++_M_iter;
+16535:  return *this;
+16535:       }
+16535: 
+16535:       raw_storage_iterator
+16535:       operator++(int)
+16535:       {
+16535:  raw_storage_iterator __tmp = *this;
+16535:  ++_M_iter;
+16535:  return __tmp;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       _OutputIterator base() const { return _M_iter; }
+16535:     };
+16535: 
+16535: 
+16535: }
+16535: # 68 "/usr/include/c++/8/memory" 2 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/ext/concurrence.h" 1 3
+16535: # 32 "/usr/include/c++/8/ext/concurrence.h" 3
+16535:        
+16535: # 33 "/usr/include/c++/8/ext/concurrence.h" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   enum _Lock_policy { _S_single, _S_mutex, _S_atomic };
+16535: 
+16535: 
+16535: 
+16535:   static const _Lock_policy __default_lock_policy =
+16535: 
+16535: 
+16535: 
+16535:   _S_atomic;
+16535: # 67 "/usr/include/c++/8/ext/concurrence.h" 3
+16535:   class __concurrence_lock_error : public std::exception
+16535:   {
+16535:   public:
+16535:     virtual char const*
+16535:     what() const throw()
+16535:     { return "__gnu_cxx::__concurrence_lock_error"; }
+16535:   };
+16535: 
+16535:   class __concurrence_unlock_error : public std::exception
+16535:   {
+16535:   public:
+16535:     virtual char const*
+16535:     what() const throw()
+16535:     { return "__gnu_cxx::__concurrence_unlock_error"; }
+16535:   };
+16535: 
+16535:   class __concurrence_broadcast_error : public std::exception
+16535:   {
+16535:   public:
+16535:     virtual char const*
+16535:     what() const throw()
+16535:     { return "__gnu_cxx::__concurrence_broadcast_error"; }
+16535:   };
+16535: 
+16535:   class __concurrence_wait_error : public std::exception
+16535:   {
+16535:   public:
+16535:     virtual char const*
+16535:     what() const throw()
+16535:     { return "__gnu_cxx::__concurrence_wait_error"; }
+16535:   };
+16535: 
+16535: 
+16535:   inline void
+16535:   __throw_concurrence_lock_error()
+16535:   { (throw (__concurrence_lock_error())); }
+16535: 
+16535:   inline void
+16535:   __throw_concurrence_unlock_error()
+16535:   { (throw (__concurrence_unlock_error())); }
+16535: 
+16535: 
+16535:   inline void
+16535:   __throw_concurrence_broadcast_error()
+16535:   { (throw (__concurrence_broadcast_error())); }
+16535: 
+16535:   inline void
+16535:   __throw_concurrence_wait_error()
+16535:   { (throw (__concurrence_wait_error())); }
+16535: 
+16535: 
+16535:   class __mutex
+16535:   {
+16535:   private:
+16535: 
+16535:     __gthread_mutex_t _M_mutex = { { 0, 0, 0, 0, 0, 0, 0, { 0, 0 } } };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     __mutex(const __mutex&);
+16535:     __mutex& operator=(const __mutex&);
+16535: 
+16535:   public:
+16535:     __mutex()
+16535:     {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     }
+16535: # 147 "/usr/include/c++/8/ext/concurrence.h" 3
+16535:     void lock()
+16535:     {
+16535: 
+16535:       if (__gthread_active_p())
+16535:  {
+16535:    if (__gthread_mutex_lock(&_M_mutex) != 0)
+16535:      __throw_concurrence_lock_error();
+16535:  }
+16535: 
+16535:     }
+16535: 
+16535:     void unlock()
+16535:     {
+16535: 
+16535:       if (__gthread_active_p())
+16535:  {
+16535:    if (__gthread_mutex_unlock(&_M_mutex) != 0)
+16535:      __throw_concurrence_unlock_error();
+16535:  }
+16535: 
+16535:     }
+16535: 
+16535:     __gthread_mutex_t* gthread_mutex(void)
+16535:       { return &_M_mutex; }
+16535:   };
+16535: 
+16535:   class __recursive_mutex
+16535:   {
+16535:   private:
+16535: 
+16535:     __gthread_recursive_mutex_t _M_mutex = { { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, 0, { 0, 0 } } };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     __recursive_mutex(const __recursive_mutex&);
+16535:     __recursive_mutex& operator=(const __recursive_mutex&);
+16535: 
+16535:   public:
+16535:     __recursive_mutex()
+16535:     {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     }
+16535: # 202 "/usr/include/c++/8/ext/concurrence.h" 3
+16535:     void lock()
+16535:     {
+16535: 
+16535:       if (__gthread_active_p())
+16535:  {
+16535:    if (__gthread_recursive_mutex_lock(&_M_mutex) != 0)
+16535:      __throw_concurrence_lock_error();
+16535:  }
+16535: 
+16535:     }
+16535: 
+16535:     void unlock()
+16535:     {
+16535: 
+16535:       if (__gthread_active_p())
+16535:  {
+16535:    if (__gthread_recursive_mutex_unlock(&_M_mutex) != 0)
+16535:      __throw_concurrence_unlock_error();
+16535:  }
+16535: 
+16535:     }
+16535: 
+16535:     __gthread_recursive_mutex_t* gthread_recursive_mutex(void)
+16535:     { return &_M_mutex; }
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   class __scoped_lock
+16535:   {
+16535:   public:
+16535:     typedef __mutex __mutex_type;
+16535: 
+16535:   private:
+16535:     __mutex_type& _M_device;
+16535: 
+16535:     __scoped_lock(const __scoped_lock&);
+16535:     __scoped_lock& operator=(const __scoped_lock&);
+16535: 
+16535:   public:
+16535:     explicit __scoped_lock(__mutex_type& __name) : _M_device(__name)
+16535:     { _M_device.lock(); }
+16535: 
+16535:     ~__scoped_lock() throw()
+16535:     { _M_device.unlock(); }
+16535:   };
+16535: 
+16535: 
+16535:   class __cond
+16535:   {
+16535:   private:
+16535: 
+16535:     __gthread_cond_t _M_cond = { { {0}, {0}, {0, 0}, {0, 0}, 0, 0, {0, 0} } };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     __cond(const __cond&);
+16535:     __cond& operator=(const __cond&);
+16535: 
+16535:   public:
+16535:     __cond()
+16535:     {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     }
+16535: # 280 "/usr/include/c++/8/ext/concurrence.h" 3
+16535:     void broadcast()
+16535:     {
+16535: 
+16535:       if (__gthread_active_p())
+16535:  {
+16535:    if (__gthread_cond_broadcast(&_M_cond) != 0)
+16535:      __throw_concurrence_broadcast_error();
+16535:  }
+16535: 
+16535:     }
+16535: 
+16535:     void wait(__mutex *mutex)
+16535:     {
+16535: 
+16535:       {
+16535:    if (__gthread_cond_wait(&_M_cond, mutex->gthread_mutex()) != 0)
+16535:      __throw_concurrence_wait_error();
+16535:       }
+16535: 
+16535:     }
+16535: 
+16535:     void wait_recursive(__recursive_mutex *mutex)
+16535:     {
+16535: 
+16535:       {
+16535:    if (__gthread_cond_wait_recursive(&_M_cond,
+16535:          mutex->gthread_recursive_mutex())
+16535:        != 0)
+16535:      __throw_concurrence_wait_error();
+16535:       }
+16535: 
+16535:     }
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 75 "/usr/include/c++/8/memory" 2 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/shared_ptr.h" 1 3
+16535: # 52 "/usr/include/c++/8/bits/shared_ptr.h" 3
+16535: # 1 "/usr/include/c++/8/bits/shared_ptr_base.h" 1 3
+16535: # 53 "/usr/include/c++/8/bits/shared_ptr_base.h" 3
+16535: # 1 "/usr/include/c++/8/bits/allocated_ptr.h" 1 3
+16535: # 40 "/usr/include/c++/8/bits/allocated_ptr.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Alloc>
+16535:     struct __allocated_ptr
+16535:     {
+16535:       using pointer = typename allocator_traits<_Alloc>::pointer;
+16535:       using value_type = typename allocator_traits<_Alloc>::value_type;
+16535: 
+16535: 
+16535:       __allocated_ptr(_Alloc& __a, pointer __ptr) noexcept
+16535:       : _M_alloc(std::__addressof(__a)), _M_ptr(__ptr)
+16535:       { }
+16535: 
+16535: 
+16535:       template<typename _Ptr,
+16535:         typename _Req = _Require<is_same<_Ptr, value_type*>>>
+16535:       __allocated_ptr(_Alloc& __a, _Ptr __ptr)
+16535:       : _M_alloc(std::__addressof(__a)),
+16535:  _M_ptr(pointer_traits<pointer>::pointer_to(*__ptr))
+16535:       { }
+16535: 
+16535: 
+16535:       __allocated_ptr(__allocated_ptr&& __gd) noexcept
+16535:       : _M_alloc(__gd._M_alloc), _M_ptr(__gd._M_ptr)
+16535:       { __gd._M_ptr = nullptr; }
+16535: 
+16535: 
+16535:       ~__allocated_ptr()
+16535:       {
+16535:  if (_M_ptr != nullptr)
+16535:    std::allocator_traits<_Alloc>::deallocate(*_M_alloc, _M_ptr, 1);
+16535:       }
+16535: 
+16535: 
+16535:       __allocated_ptr&
+16535:       operator=(std::nullptr_t) noexcept
+16535:       {
+16535:  _M_ptr = nullptr;
+16535:  return *this;
+16535:       }
+16535: 
+16535: 
+16535:       value_type* get() { return std::__to_address(_M_ptr); }
+16535: 
+16535:     private:
+16535:       _Alloc* _M_alloc;
+16535:       pointer _M_ptr;
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Alloc>
+16535:     __allocated_ptr<_Alloc>
+16535:     __allocate_guarded(_Alloc& __a)
+16535:     {
+16535:       return { __a, std::allocator_traits<_Alloc>::allocate(__a, 1) };
+16535:     }
+16535: 
+16535: 
+16535: }
+16535: # 54 "/usr/include/c++/8/bits/shared_ptr_base.h" 2 3
+16535: # 1 "/usr/include/c++/8/bits/refwrap.h" 1 3
+16535: # 33 "/usr/include/c++/8/bits/refwrap.h" 3
+16535:        
+16535: # 34 "/usr/include/c++/8/bits/refwrap.h" 3
+16535: # 43 "/usr/include/c++/8/bits/refwrap.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes>
+16535:     struct _Maybe_unary_or_binary_function { };
+16535: 
+16535: 
+16535:   template<typename _Res, typename _T1>
+16535:     struct _Maybe_unary_or_binary_function<_Res, _T1>
+16535:     : std::unary_function<_T1, _Res> { };
+16535: 
+16535: 
+16535:   template<typename _Res, typename _T1, typename _T2>
+16535:     struct _Maybe_unary_or_binary_function<_Res, _T1, _T2>
+16535:     : std::binary_function<_T1, _T2, _Res> { };
+16535: 
+16535:   template<typename _Signature>
+16535:     struct _Mem_fn_traits;
+16535: 
+16535:   template<typename _Res, typename _Class, typename... _ArgTypes>
+16535:     struct _Mem_fn_traits_base
+16535:     {
+16535:       using __result_type = _Res;
+16535:       using __maybe_type
+16535:  = _Maybe_unary_or_binary_function<_Res, _Class*, _ArgTypes...>;
+16535:       using __arity = integral_constant<size_t, sizeof...(_ArgTypes)>;
+16535:     };
+16535: # 97 "/usr/include/c++/8/bits/refwrap.h" 3
+16535: template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) > : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) > : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const > : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const > : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile > : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile > : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile > : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile > : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; };
+16535: template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) &> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) &> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const &> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const &> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile &> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile &> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile &> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile &> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; };
+16535: template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) &&> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) &&> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const &&> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const &&> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile &&> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile &&> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile &&> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template<typename _Res, typename _Class, typename... _ArgTypes> struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile &&> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; };
+16535: # 111 "/usr/include/c++/8/bits/refwrap.h" 3
+16535:   template<typename _Functor, typename = __void_t<>>
+16535:     struct _Maybe_get_result_type
+16535:     { };
+16535: 
+16535:   template<typename _Functor>
+16535:     struct _Maybe_get_result_type<_Functor,
+16535:       __void_t<typename _Functor::result_type>>
+16535:     { typedef typename _Functor::result_type result_type; };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Functor>
+16535:     struct _Weak_result_type_impl
+16535:     : _Maybe_get_result_type<_Functor>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct _Weak_result_type_impl<_Res(_ArgTypes...) >
+16535:     { typedef _Res result_type; };
+16535: 
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct _Weak_result_type_impl<_Res(_ArgTypes......) >
+16535:     { typedef _Res result_type; };
+16535: 
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct _Weak_result_type_impl<_Res(*)(_ArgTypes...) >
+16535:     { typedef _Res result_type; };
+16535: 
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes >
+16535:     struct
+16535:     _Weak_result_type_impl<_Res(*)(_ArgTypes......) >
+16535:     { typedef _Res result_type; };
+16535: 
+16535: 
+16535:   template<typename _Functor,
+16535:     bool = is_member_function_pointer<_Functor>::value>
+16535:     struct _Weak_result_type_memfun
+16535:     : _Weak_result_type_impl<_Functor>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _MemFunPtr>
+16535:     struct _Weak_result_type_memfun<_MemFunPtr, true>
+16535:     {
+16535:       using result_type = typename _Mem_fn_traits<_MemFunPtr>::__result_type;
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Func, typename _Class>
+16535:     struct _Weak_result_type_memfun<_Func _Class::*, false>
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Functor>
+16535:     struct _Weak_result_type
+16535:     : _Weak_result_type_memfun<typename remove_cv<_Functor>::type>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp, typename = __void_t<>>
+16535:     struct _Refwrap_base_arg1
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct _Refwrap_base_arg1<_Tp,
+16535:          __void_t<typename _Tp::argument_type>>
+16535:     {
+16535:       typedef typename _Tp::argument_type argument_type;
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp, typename = __void_t<>>
+16535:     struct _Refwrap_base_arg2
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct _Refwrap_base_arg2<_Tp,
+16535:          __void_t<typename _Tp::first_argument_type,
+16535:            typename _Tp::second_argument_type>>
+16535:     {
+16535:       typedef typename _Tp::first_argument_type first_argument_type;
+16535:       typedef typename _Tp::second_argument_type second_argument_type;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct _Reference_wrapper_base
+16535:     : _Weak_result_type<_Tp>, _Refwrap_base_arg1<_Tp>, _Refwrap_base_arg2<_Tp>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Res, typename _T1 >
+16535:     struct _Reference_wrapper_base<_Res(_T1) >
+16535:     : unary_function<_T1, _Res>
+16535:     { };
+16535: 
+16535:   template<typename _Res, typename _T1>
+16535:     struct _Reference_wrapper_base<_Res(_T1) const>
+16535:     : unary_function<_T1, _Res>
+16535:     { };
+16535: 
+16535:   template<typename _Res, typename _T1>
+16535:     struct _Reference_wrapper_base<_Res(_T1) volatile>
+16535:     : unary_function<_T1, _Res>
+16535:     { };
+16535: 
+16535:   template<typename _Res, typename _T1>
+16535:     struct _Reference_wrapper_base<_Res(_T1) const volatile>
+16535:     : unary_function<_T1, _Res>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Res, typename _T1, typename _T2 >
+16535:     struct _Reference_wrapper_base<_Res(_T1, _T2) >
+16535:     : binary_function<_T1, _T2, _Res>
+16535:     { };
+16535: 
+16535:   template<typename _Res, typename _T1, typename _T2>
+16535:     struct _Reference_wrapper_base<_Res(_T1, _T2) const>
+16535:     : binary_function<_T1, _T2, _Res>
+16535:     { };
+16535: 
+16535:   template<typename _Res, typename _T1, typename _T2>
+16535:     struct _Reference_wrapper_base<_Res(_T1, _T2) volatile>
+16535:     : binary_function<_T1, _T2, _Res>
+16535:     { };
+16535: 
+16535:   template<typename _Res, typename _T1, typename _T2>
+16535:     struct _Reference_wrapper_base<_Res(_T1, _T2) const volatile>
+16535:     : binary_function<_T1, _T2, _Res>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Res, typename _T1 >
+16535:     struct _Reference_wrapper_base<_Res(*)(_T1) >
+16535:     : unary_function<_T1, _Res>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Res, typename _T1, typename _T2 >
+16535:     struct _Reference_wrapper_base<_Res(*)(_T1, _T2) >
+16535:     : binary_function<_T1, _T2, _Res>
+16535:     { };
+16535: 
+16535:   template<typename _Tp, bool = is_member_function_pointer<_Tp>::value>
+16535:     struct _Reference_wrapper_base_memfun
+16535:     : _Reference_wrapper_base<_Tp>
+16535:     { };
+16535: 
+16535:   template<typename _MemFunPtr>
+16535:     struct _Reference_wrapper_base_memfun<_MemFunPtr, true>
+16535:     : _Mem_fn_traits<_MemFunPtr>::__maybe_type
+16535:     {
+16535:       using result_type = typename _Mem_fn_traits<_MemFunPtr>::__result_type;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     class reference_wrapper
+16535:     : public _Reference_wrapper_base_memfun<typename remove_cv<_Tp>::type>
+16535:     {
+16535:       _Tp* _M_data;
+16535: 
+16535:     public:
+16535:       typedef _Tp type;
+16535: 
+16535:       reference_wrapper(_Tp& __indata) noexcept
+16535:       : _M_data(std::__addressof(__indata))
+16535:       { }
+16535: 
+16535:       reference_wrapper(_Tp&&) = delete;
+16535: 
+16535:       reference_wrapper(const reference_wrapper&) = default;
+16535: 
+16535:       reference_wrapper&
+16535:       operator=(const reference_wrapper&) = default;
+16535: 
+16535:       operator _Tp&() const noexcept
+16535:       { return this->get(); }
+16535: 
+16535:       _Tp&
+16535:       get() const noexcept
+16535:       { return *_M_data; }
+16535: 
+16535:       template<typename... _Args>
+16535:  typename result_of<_Tp&(_Args&&...)>::type
+16535:  operator()(_Args&&... __args) const
+16535:  {
+16535:    return std::__invoke(get(), std::forward<_Args>(__args)...);
+16535:  }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline reference_wrapper<_Tp>
+16535:     ref(_Tp& __t) noexcept
+16535:     { return reference_wrapper<_Tp>(__t); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline reference_wrapper<const _Tp>
+16535:     cref(const _Tp& __t) noexcept
+16535:     { return reference_wrapper<const _Tp>(__t); }
+16535: 
+16535:   template<typename _Tp>
+16535:     void ref(const _Tp&&) = delete;
+16535: 
+16535:   template<typename _Tp>
+16535:     void cref(const _Tp&&) = delete;
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline reference_wrapper<_Tp>
+16535:     ref(reference_wrapper<_Tp> __t) noexcept
+16535:     { return __t; }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline reference_wrapper<const _Tp>
+16535:     cref(reference_wrapper<_Tp> __t) noexcept
+16535:     { return { __t.get() }; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 55 "/usr/include/c++/8/bits/shared_ptr_base.h" 2 3
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: #pragma GCC diagnostic push
+16535: #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+16535:   template<typename> class auto_ptr;
+16535: #pragma GCC diagnostic pop
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   class bad_weak_ptr : public std::exception
+16535:   {
+16535:   public:
+16535:     virtual char const* what() const noexcept;
+16535: 
+16535:     virtual ~bad_weak_ptr() noexcept;
+16535:   };
+16535: 
+16535: 
+16535:   inline void
+16535:   __throw_bad_weak_ptr()
+16535:   { (throw (bad_weak_ptr())); }
+16535: 
+16535:   using __gnu_cxx::_Lock_policy;
+16535:   using __gnu_cxx::__default_lock_policy;
+16535:   using __gnu_cxx::_S_single;
+16535:   using __gnu_cxx::_S_mutex;
+16535:   using __gnu_cxx::_S_atomic;
+16535: 
+16535: 
+16535:   template<_Lock_policy _Lp>
+16535:     class _Mutex_base
+16535:     {
+16535:     protected:
+16535: 
+16535:       enum { _S_need_barriers = 0 };
+16535:     };
+16535: 
+16535:   template<>
+16535:     class _Mutex_base<_S_mutex>
+16535:     : public __gnu_cxx::__mutex
+16535:     {
+16535:     protected:
+16535: 
+16535: 
+16535: 
+16535:       enum { _S_need_barriers = 1 };
+16535:     };
+16535: 
+16535:   template<_Lock_policy _Lp = __default_lock_policy>
+16535:     class _Sp_counted_base
+16535:     : public _Mutex_base<_Lp>
+16535:     {
+16535:     public:
+16535:       _Sp_counted_base() noexcept
+16535:       : _M_use_count(1), _M_weak_count(1) { }
+16535: 
+16535:       virtual
+16535:       ~_Sp_counted_base() noexcept
+16535:       { }
+16535: 
+16535: 
+16535: 
+16535:       virtual void
+16535:       _M_dispose() noexcept = 0;
+16535: 
+16535: 
+16535:       virtual void
+16535:       _M_destroy() noexcept
+16535:       { delete this; }
+16535: 
+16535:       virtual void*
+16535:       _M_get_deleter(const std::type_info&) noexcept = 0;
+16535: 
+16535:       void
+16535:       _M_add_ref_copy()
+16535:       { __gnu_cxx::__atomic_add_dispatch(&_M_use_count, 1); }
+16535: 
+16535:       void
+16535:       _M_add_ref_lock();
+16535: 
+16535:       bool
+16535:       _M_add_ref_lock_nothrow();
+16535: 
+16535:       void
+16535:       _M_release() noexcept
+16535:       {
+16535: 
+16535:         ;
+16535:  if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1)
+16535:    {
+16535:             ;
+16535:      _M_dispose();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:      if (_Mutex_base<_Lp>::_S_need_barriers)
+16535:        {
+16535:   __atomic_thread_fence (4);
+16535:        }
+16535: 
+16535: 
+16535:             ;
+16535:      if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count,
+16535:              -1) == 1)
+16535:               {
+16535:                 ;
+16535:          _M_destroy();
+16535:               }
+16535:    }
+16535:       }
+16535: 
+16535:       void
+16535:       _M_weak_add_ref() noexcept
+16535:       { __gnu_cxx::__atomic_add_dispatch(&_M_weak_count, 1); }
+16535: 
+16535:       void
+16535:       _M_weak_release() noexcept
+16535:       {
+16535: 
+16535:         ;
+16535:  if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count, -1) == 1)
+16535:    {
+16535:             ;
+16535:      if (_Mutex_base<_Lp>::_S_need_barriers)
+16535:        {
+16535: 
+16535: 
+16535:   __atomic_thread_fence (4);
+16535:        }
+16535:      _M_destroy();
+16535:    }
+16535:       }
+16535: 
+16535:       long
+16535:       _M_get_use_count() const noexcept
+16535:       {
+16535: 
+16535: 
+16535:         return __atomic_load_n(&_M_use_count, 0);
+16535:       }
+16535: 
+16535:     private:
+16535:       _Sp_counted_base(_Sp_counted_base const&) = delete;
+16535:       _Sp_counted_base& operator=(_Sp_counted_base const&) = delete;
+16535: 
+16535:       _Atomic_word _M_use_count;
+16535:       _Atomic_word _M_weak_count;
+16535:     };
+16535: 
+16535:   template<>
+16535:     inline void
+16535:     _Sp_counted_base<_S_single>::
+16535:     _M_add_ref_lock()
+16535:     {
+16535:       if (_M_use_count == 0)
+16535:  __throw_bad_weak_ptr();
+16535:       ++_M_use_count;
+16535:     }
+16535: 
+16535:   template<>
+16535:     inline void
+16535:     _Sp_counted_base<_S_mutex>::
+16535:     _M_add_ref_lock()
+16535:     {
+16535:       __gnu_cxx::__scoped_lock sentry(*this);
+16535:       if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, 1) == 0)
+16535:  {
+16535:    _M_use_count = 0;
+16535:    __throw_bad_weak_ptr();
+16535:  }
+16535:     }
+16535: 
+16535:   template<>
+16535:     inline void
+16535:     _Sp_counted_base<_S_atomic>::
+16535:     _M_add_ref_lock()
+16535:     {
+16535: 
+16535:       _Atomic_word __count = _M_get_use_count();
+16535:       do
+16535:  {
+16535:    if (__count == 0)
+16535:      __throw_bad_weak_ptr();
+16535: 
+16535: 
+16535:  }
+16535:       while (!__atomic_compare_exchange_n(&_M_use_count, &__count, __count + 1,
+16535:        true, 4,
+16535:        0));
+16535:     }
+16535: 
+16535:   template<>
+16535:     inline bool
+16535:     _Sp_counted_base<_S_single>::
+16535:     _M_add_ref_lock_nothrow()
+16535:     {
+16535:       if (_M_use_count == 0)
+16535:  return false;
+16535:       ++_M_use_count;
+16535:       return true;
+16535:     }
+16535: 
+16535:   template<>
+16535:     inline bool
+16535:     _Sp_counted_base<_S_mutex>::
+16535:     _M_add_ref_lock_nothrow()
+16535:     {
+16535:       __gnu_cxx::__scoped_lock sentry(*this);
+16535:       if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, 1) == 0)
+16535:  {
+16535:    _M_use_count = 0;
+16535:    return false;
+16535:  }
+16535:       return true;
+16535:     }
+16535: 
+16535:   template<>
+16535:     inline bool
+16535:     _Sp_counted_base<_S_atomic>::
+16535:     _M_add_ref_lock_nothrow()
+16535:     {
+16535: 
+16535:       _Atomic_word __count = _M_get_use_count();
+16535:       do
+16535:  {
+16535:    if (__count == 0)
+16535:      return false;
+16535: 
+16535: 
+16535:  }
+16535:       while (!__atomic_compare_exchange_n(&_M_use_count, &__count, __count + 1,
+16535:        true, 4,
+16535:        0));
+16535:       return true;
+16535:     }
+16535: 
+16535:   template<>
+16535:     inline void
+16535:     _Sp_counted_base<_S_single>::_M_add_ref_copy()
+16535:     { ++_M_use_count; }
+16535: 
+16535:   template<>
+16535:     inline void
+16535:     _Sp_counted_base<_S_single>::_M_release() noexcept
+16535:     {
+16535:       if (--_M_use_count == 0)
+16535:         {
+16535:           _M_dispose();
+16535:           if (--_M_weak_count == 0)
+16535:             _M_destroy();
+16535:         }
+16535:     }
+16535: 
+16535:   template<>
+16535:     inline void
+16535:     _Sp_counted_base<_S_single>::_M_weak_add_ref() noexcept
+16535:     { ++_M_weak_count; }
+16535: 
+16535:   template<>
+16535:     inline void
+16535:     _Sp_counted_base<_S_single>::_M_weak_release() noexcept
+16535:     {
+16535:       if (--_M_weak_count == 0)
+16535:         _M_destroy();
+16535:     }
+16535: 
+16535:   template<>
+16535:     inline long
+16535:     _Sp_counted_base<_S_single>::_M_get_use_count() const noexcept
+16535:     { return _M_use_count; }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp = __default_lock_policy>
+16535:     class __shared_ptr;
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp = __default_lock_policy>
+16535:     class __weak_ptr;
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp = __default_lock_policy>
+16535:     class __enable_shared_from_this;
+16535: 
+16535:   template<typename _Tp>
+16535:     class shared_ptr;
+16535: 
+16535:   template<typename _Tp>
+16535:     class weak_ptr;
+16535: 
+16535:   template<typename _Tp>
+16535:     struct owner_less;
+16535: 
+16535:   template<typename _Tp>
+16535:     class enable_shared_from_this;
+16535: 
+16535:   template<_Lock_policy _Lp = __default_lock_policy>
+16535:     class __weak_count;
+16535: 
+16535:   template<_Lock_policy _Lp = __default_lock_policy>
+16535:     class __shared_count;
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Ptr, _Lock_policy _Lp>
+16535:     class _Sp_counted_ptr final : public _Sp_counted_base<_Lp>
+16535:     {
+16535:     public:
+16535:       explicit
+16535:       _Sp_counted_ptr(_Ptr __p) noexcept
+16535:       : _M_ptr(__p) { }
+16535: 
+16535:       virtual void
+16535:       _M_dispose() noexcept
+16535:       { delete _M_ptr; }
+16535: 
+16535:       virtual void
+16535:       _M_destroy() noexcept
+16535:       { delete this; }
+16535: 
+16535:       virtual void*
+16535:       _M_get_deleter(const std::type_info&) noexcept
+16535:       { return nullptr; }
+16535: 
+16535:       _Sp_counted_ptr(const _Sp_counted_ptr&) = delete;
+16535:       _Sp_counted_ptr& operator=(const _Sp_counted_ptr&) = delete;
+16535: 
+16535:     private:
+16535:       _Ptr _M_ptr;
+16535:     };
+16535: 
+16535:   template<>
+16535:     inline void
+16535:     _Sp_counted_ptr<nullptr_t, _S_single>::_M_dispose() noexcept { }
+16535: 
+16535:   template<>
+16535:     inline void
+16535:     _Sp_counted_ptr<nullptr_t, _S_mutex>::_M_dispose() noexcept { }
+16535: 
+16535:   template<>
+16535:     inline void
+16535:     _Sp_counted_ptr<nullptr_t, _S_atomic>::_M_dispose() noexcept { }
+16535: 
+16535:   template<int _Nm, typename _Tp,
+16535:     bool __use_ebo = !__is_final(_Tp) && __is_empty(_Tp)>
+16535:     struct _Sp_ebo_helper;
+16535: 
+16535: 
+16535:   template<int _Nm, typename _Tp>
+16535:     struct _Sp_ebo_helper<_Nm, _Tp, true> : private _Tp
+16535:     {
+16535:       explicit _Sp_ebo_helper(const _Tp& __tp) : _Tp(__tp) { }
+16535:       explicit _Sp_ebo_helper(_Tp&& __tp) : _Tp(std::move(__tp)) { }
+16535: 
+16535:       static _Tp&
+16535:       _S_get(_Sp_ebo_helper& __eboh) { return static_cast<_Tp&>(__eboh); }
+16535:     };
+16535: 
+16535: 
+16535:   template<int _Nm, typename _Tp>
+16535:     struct _Sp_ebo_helper<_Nm, _Tp, false>
+16535:     {
+16535:       explicit _Sp_ebo_helper(const _Tp& __tp) : _M_tp(__tp) { }
+16535:       explicit _Sp_ebo_helper(_Tp&& __tp) : _M_tp(std::move(__tp)) { }
+16535: 
+16535:       static _Tp&
+16535:       _S_get(_Sp_ebo_helper& __eboh)
+16535:       { return __eboh._M_tp; }
+16535: 
+16535:     private:
+16535:       _Tp _M_tp;
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Ptr, typename _Deleter, typename _Alloc, _Lock_policy _Lp>
+16535:     class _Sp_counted_deleter final : public _Sp_counted_base<_Lp>
+16535:     {
+16535:       class _Impl : _Sp_ebo_helper<0, _Deleter>, _Sp_ebo_helper<1, _Alloc>
+16535:       {
+16535:  typedef _Sp_ebo_helper<0, _Deleter> _Del_base;
+16535:  typedef _Sp_ebo_helper<1, _Alloc> _Alloc_base;
+16535: 
+16535:       public:
+16535:  _Impl(_Ptr __p, _Deleter __d, const _Alloc& __a) noexcept
+16535:  : _M_ptr(__p), _Del_base(std::move(__d)), _Alloc_base(__a)
+16535:  { }
+16535: 
+16535:  _Deleter& _M_del() noexcept { return _Del_base::_S_get(*this); }
+16535:  _Alloc& _M_alloc() noexcept { return _Alloc_base::_S_get(*this); }
+16535: 
+16535:  _Ptr _M_ptr;
+16535:       };
+16535: 
+16535:     public:
+16535:       using __allocator_type = __alloc_rebind<_Alloc, _Sp_counted_deleter>;
+16535: 
+16535: 
+16535:       _Sp_counted_deleter(_Ptr __p, _Deleter __d) noexcept
+16535:       : _M_impl(__p, std::move(__d), _Alloc()) { }
+16535: 
+16535: 
+16535:       _Sp_counted_deleter(_Ptr __p, _Deleter __d, const _Alloc& __a) noexcept
+16535:       : _M_impl(__p, std::move(__d), __a) { }
+16535: 
+16535:       ~_Sp_counted_deleter() noexcept { }
+16535: 
+16535:       virtual void
+16535:       _M_dispose() noexcept
+16535:       { _M_impl._M_del()(_M_impl._M_ptr); }
+16535: 
+16535:       virtual void
+16535:       _M_destroy() noexcept
+16535:       {
+16535:  __allocator_type __a(_M_impl._M_alloc());
+16535:  __allocated_ptr<__allocator_type> __guard_ptr{ __a, this };
+16535:  this->~_Sp_counted_deleter();
+16535:       }
+16535: 
+16535:       virtual void*
+16535:       _M_get_deleter(const std::type_info& __ti) noexcept
+16535:       {
+16535: 
+16535: 
+16535: 
+16535:         return __ti == typeid(_Deleter)
+16535:    ? std::__addressof(_M_impl._M_del())
+16535:    : nullptr;
+16535: 
+16535: 
+16535: 
+16535:       }
+16535: 
+16535:     private:
+16535:       _Impl _M_impl;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   struct _Sp_make_shared_tag
+16535:   {
+16535:   private:
+16535:     template<typename _Tp, typename _Alloc, _Lock_policy _Lp>
+16535:       friend class _Sp_counted_ptr_inplace;
+16535: 
+16535:     static const type_info&
+16535:     _S_ti() noexcept __attribute__ ((__visibility__ ("default")))
+16535:     {
+16535:       alignas(type_info) static constexpr char __tag[sizeof(type_info)] = { };
+16535:       return reinterpret_cast<const type_info&>(__tag);
+16535:     }
+16535:   };
+16535: 
+16535:   template<typename _Alloc>
+16535:     struct _Sp_alloc_shared_tag
+16535:     {
+16535:       const _Alloc& _M_a;
+16535:     };
+16535: 
+16535:   template<typename _Tp, typename _Alloc, _Lock_policy _Lp>
+16535:     class _Sp_counted_ptr_inplace final : public _Sp_counted_base<_Lp>
+16535:     {
+16535:       class _Impl : _Sp_ebo_helper<0, _Alloc>
+16535:       {
+16535:  typedef _Sp_ebo_helper<0, _Alloc> _A_base;
+16535: 
+16535:       public:
+16535:  explicit _Impl(_Alloc __a) noexcept : _A_base(__a) { }
+16535: 
+16535:  _Alloc& _M_alloc() noexcept { return _A_base::_S_get(*this); }
+16535: 
+16535:  __gnu_cxx::__aligned_buffer<_Tp> _M_storage;
+16535:       };
+16535: 
+16535:     public:
+16535:       using __allocator_type = __alloc_rebind<_Alloc, _Sp_counted_ptr_inplace>;
+16535: 
+16535:       template<typename... _Args>
+16535:  _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
+16535:  : _M_impl(__a)
+16535:  {
+16535: 
+16535: 
+16535:    allocator_traits<_Alloc>::construct(__a, _M_ptr(),
+16535:        std::forward<_Args>(__args)...);
+16535:  }
+16535: 
+16535:       ~_Sp_counted_ptr_inplace() noexcept { }
+16535: 
+16535:       virtual void
+16535:       _M_dispose() noexcept
+16535:       {
+16535:  allocator_traits<_Alloc>::destroy(_M_impl._M_alloc(), _M_ptr());
+16535:       }
+16535: 
+16535: 
+16535:       virtual void
+16535:       _M_destroy() noexcept
+16535:       {
+16535:  __allocator_type __a(_M_impl._M_alloc());
+16535:  __allocated_ptr<__allocator_type> __guard_ptr{ __a, this };
+16535:  this->~_Sp_counted_ptr_inplace();
+16535:       }
+16535: 
+16535:     private:
+16535:       friend class __shared_count<_Lp>;
+16535: 
+16535: 
+16535: 
+16535:       virtual void*
+16535:       _M_get_deleter(const std::type_info& __ti) noexcept override
+16535:       {
+16535: 
+16535: 
+16535:  if (&__ti == &_Sp_make_shared_tag::_S_ti())
+16535:    return const_cast<typename remove_cv<_Tp>::type*>(_M_ptr());
+16535: 
+16535: 
+16535: 
+16535:  else if (__ti == typeid(_Sp_make_shared_tag))
+16535:    return const_cast<typename remove_cv<_Tp>::type*>(_M_ptr());
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  return nullptr;
+16535:       }
+16535: 
+16535:       _Tp* _M_ptr() noexcept { return _M_impl._M_storage._M_ptr(); }
+16535: 
+16535:       _Impl _M_impl;
+16535:     };
+16535: 
+16535: 
+16535:   struct __sp_array_delete
+16535:   {
+16535:     template<typename _Yp>
+16535:       void operator()(_Yp* __p) const { delete[] __p; }
+16535:   };
+16535: 
+16535:   template<_Lock_policy _Lp>
+16535:     class __shared_count
+16535:     {
+16535:       template<typename _Tp>
+16535:  struct __not_alloc_shared_tag { using type = void; };
+16535: 
+16535:       template<typename _Tp>
+16535:  struct __not_alloc_shared_tag<_Sp_alloc_shared_tag<_Tp>> { };
+16535: 
+16535:     public:
+16535:       constexpr __shared_count() noexcept : _M_pi(0)
+16535:       { }
+16535: 
+16535:       template<typename _Ptr>
+16535:         explicit
+16535:  __shared_count(_Ptr __p) : _M_pi(0)
+16535:  {
+16535:    try
+16535:      {
+16535:        _M_pi = new _Sp_counted_ptr<_Ptr, _Lp>(__p);
+16535:      }
+16535:    catch(...)
+16535:      {
+16535:        delete __p;
+16535:        throw;
+16535:      }
+16535:  }
+16535: 
+16535:       template<typename _Ptr>
+16535:  __shared_count(_Ptr __p, false_type)
+16535:  : __shared_count(__p)
+16535:  { }
+16535: 
+16535:       template<typename _Ptr>
+16535:  __shared_count(_Ptr __p, true_type)
+16535:  : __shared_count(__p, __sp_array_delete{}, allocator<void>())
+16535:  { }
+16535: 
+16535:       template<typename _Ptr, typename _Deleter,
+16535:         typename = typename __not_alloc_shared_tag<_Deleter>::type>
+16535:  __shared_count(_Ptr __p, _Deleter __d)
+16535:  : __shared_count(__p, std::move(__d), allocator<void>())
+16535:  { }
+16535: 
+16535:       template<typename _Ptr, typename _Deleter, typename _Alloc,
+16535:         typename = typename __not_alloc_shared_tag<_Deleter>::type>
+16535:  __shared_count(_Ptr __p, _Deleter __d, _Alloc __a) : _M_pi(0)
+16535:  {
+16535:    typedef _Sp_counted_deleter<_Ptr, _Deleter, _Alloc, _Lp> _Sp_cd_type;
+16535:    try
+16535:      {
+16535:        typename _Sp_cd_type::__allocator_type __a2(__a);
+16535:        auto __guard = std::__allocate_guarded(__a2);
+16535:        _Sp_cd_type* __mem = __guard.get();
+16535:        ::new (__mem) _Sp_cd_type(__p, std::move(__d), std::move(__a));
+16535:        _M_pi = __mem;
+16535:        __guard = nullptr;
+16535:      }
+16535:    catch(...)
+16535:      {
+16535:        __d(__p);
+16535:        throw;
+16535:      }
+16535:  }
+16535: 
+16535:       template<typename _Tp, typename _Alloc, typename... _Args>
+16535:  __shared_count(_Tp*& __p, _Sp_alloc_shared_tag<_Alloc> __a,
+16535:          _Args&&... __args)
+16535:  {
+16535:    typedef _Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp> _Sp_cp_type;
+16535:    typename _Sp_cp_type::__allocator_type __a2(__a._M_a);
+16535:    auto __guard = std::__allocate_guarded(__a2);
+16535:    _Sp_cp_type* __mem = __guard.get();
+16535:    auto __pi = ::new (__mem)
+16535:      _Sp_cp_type(__a._M_a, std::forward<_Args>(__args)...);
+16535:    __guard = nullptr;
+16535:    _M_pi = __pi;
+16535:    __p = __pi->_M_ptr();
+16535:  }
+16535: 
+16535: 
+16535: #pragma GCC diagnostic push
+16535: #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+16535: 
+16535:       template<typename _Tp>
+16535:         explicit
+16535:  __shared_count(std::auto_ptr<_Tp>&& __r);
+16535: #pragma GCC diagnostic pop
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Tp, typename _Del>
+16535:         explicit
+16535:  __shared_count(std::unique_ptr<_Tp, _Del>&& __r) : _M_pi(0)
+16535:  {
+16535: 
+16535: 
+16535:    if (__r.get() == nullptr)
+16535:      return;
+16535: 
+16535:    using _Ptr = typename unique_ptr<_Tp, _Del>::pointer;
+16535:    using _Del2 = typename conditional<is_reference<_Del>::value,
+16535:        reference_wrapper<typename remove_reference<_Del>::type>,
+16535:        _Del>::type;
+16535:    using _Sp_cd_type
+16535:      = _Sp_counted_deleter<_Ptr, _Del2, allocator<void>, _Lp>;
+16535:    using _Alloc = allocator<_Sp_cd_type>;
+16535:    using _Alloc_traits = allocator_traits<_Alloc>;
+16535:    _Alloc __a;
+16535:    _Sp_cd_type* __mem = _Alloc_traits::allocate(__a, 1);
+16535:    _Alloc_traits::construct(__a, __mem, __r.release(),
+16535:        __r.get_deleter());
+16535:    _M_pi = __mem;
+16535:  }
+16535: 
+16535: 
+16535:       explicit __shared_count(const __weak_count<_Lp>& __r);
+16535: 
+16535: 
+16535:       explicit __shared_count(const __weak_count<_Lp>& __r, std::nothrow_t);
+16535: 
+16535:       ~__shared_count() noexcept
+16535:       {
+16535:  if (_M_pi != nullptr)
+16535:    _M_pi->_M_release();
+16535:       }
+16535: 
+16535:       __shared_count(const __shared_count& __r) noexcept
+16535:       : _M_pi(__r._M_pi)
+16535:       {
+16535:  if (_M_pi != 0)
+16535:    _M_pi->_M_add_ref_copy();
+16535:       }
+16535: 
+16535:       __shared_count&
+16535:       operator=(const __shared_count& __r) noexcept
+16535:       {
+16535:  _Sp_counted_base<_Lp>* __tmp = __r._M_pi;
+16535:  if (__tmp != _M_pi)
+16535:    {
+16535:      if (__tmp != 0)
+16535:        __tmp->_M_add_ref_copy();
+16535:      if (_M_pi != 0)
+16535:        _M_pi->_M_release();
+16535:      _M_pi = __tmp;
+16535:    }
+16535:  return *this;
+16535:       }
+16535: 
+16535:       void
+16535:       _M_swap(__shared_count& __r) noexcept
+16535:       {
+16535:  _Sp_counted_base<_Lp>* __tmp = __r._M_pi;
+16535:  __r._M_pi = _M_pi;
+16535:  _M_pi = __tmp;
+16535:       }
+16535: 
+16535:       long
+16535:       _M_get_use_count() const noexcept
+16535:       { return _M_pi != 0 ? _M_pi->_M_get_use_count() : 0; }
+16535: 
+16535:       bool
+16535:       _M_unique() const noexcept
+16535:       { return this->_M_get_use_count() == 1; }
+16535: 
+16535:       void*
+16535:       _M_get_deleter(const std::type_info& __ti) const noexcept
+16535:       { return _M_pi ? _M_pi->_M_get_deleter(__ti) : nullptr; }
+16535: 
+16535:       bool
+16535:       _M_less(const __shared_count& __rhs) const noexcept
+16535:       { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); }
+16535: 
+16535:       bool
+16535:       _M_less(const __weak_count<_Lp>& __rhs) const noexcept
+16535:       { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); }
+16535: 
+16535: 
+16535:       friend inline bool
+16535:       operator==(const __shared_count& __a, const __shared_count& __b) noexcept
+16535:       { return __a._M_pi == __b._M_pi; }
+16535: 
+16535:     private:
+16535:       friend class __weak_count<_Lp>;
+16535: 
+16535:       _Sp_counted_base<_Lp>* _M_pi;
+16535:     };
+16535: 
+16535: 
+16535:   template<_Lock_policy _Lp>
+16535:     class __weak_count
+16535:     {
+16535:     public:
+16535:       constexpr __weak_count() noexcept : _M_pi(nullptr)
+16535:       { }
+16535: 
+16535:       __weak_count(const __shared_count<_Lp>& __r) noexcept
+16535:       : _M_pi(__r._M_pi)
+16535:       {
+16535:  if (_M_pi != nullptr)
+16535:    _M_pi->_M_weak_add_ref();
+16535:       }
+16535: 
+16535:       __weak_count(const __weak_count& __r) noexcept
+16535:       : _M_pi(__r._M_pi)
+16535:       {
+16535:  if (_M_pi != nullptr)
+16535:    _M_pi->_M_weak_add_ref();
+16535:       }
+16535: 
+16535:       __weak_count(__weak_count&& __r) noexcept
+16535:       : _M_pi(__r._M_pi)
+16535:       { __r._M_pi = nullptr; }
+16535: 
+16535:       ~__weak_count() noexcept
+16535:       {
+16535:  if (_M_pi != nullptr)
+16535:    _M_pi->_M_weak_release();
+16535:       }
+16535: 
+16535:       __weak_count&
+16535:       operator=(const __shared_count<_Lp>& __r) noexcept
+16535:       {
+16535:  _Sp_counted_base<_Lp>* __tmp = __r._M_pi;
+16535:  if (__tmp != nullptr)
+16535:    __tmp->_M_weak_add_ref();
+16535:  if (_M_pi != nullptr)
+16535:    _M_pi->_M_weak_release();
+16535:  _M_pi = __tmp;
+16535:  return *this;
+16535:       }
+16535: 
+16535:       __weak_count&
+16535:       operator=(const __weak_count& __r) noexcept
+16535:       {
+16535:  _Sp_counted_base<_Lp>* __tmp = __r._M_pi;
+16535:  if (__tmp != nullptr)
+16535:    __tmp->_M_weak_add_ref();
+16535:  if (_M_pi != nullptr)
+16535:    _M_pi->_M_weak_release();
+16535:  _M_pi = __tmp;
+16535:  return *this;
+16535:       }
+16535: 
+16535:       __weak_count&
+16535:       operator=(__weak_count&& __r) noexcept
+16535:       {
+16535:  if (_M_pi != nullptr)
+16535:    _M_pi->_M_weak_release();
+16535:  _M_pi = __r._M_pi;
+16535:         __r._M_pi = nullptr;
+16535:  return *this;
+16535:       }
+16535: 
+16535:       void
+16535:       _M_swap(__weak_count& __r) noexcept
+16535:       {
+16535:  _Sp_counted_base<_Lp>* __tmp = __r._M_pi;
+16535:  __r._M_pi = _M_pi;
+16535:  _M_pi = __tmp;
+16535:       }
+16535: 
+16535:       long
+16535:       _M_get_use_count() const noexcept
+16535:       { return _M_pi != nullptr ? _M_pi->_M_get_use_count() : 0; }
+16535: 
+16535:       bool
+16535:       _M_less(const __weak_count& __rhs) const noexcept
+16535:       { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); }
+16535: 
+16535:       bool
+16535:       _M_less(const __shared_count<_Lp>& __rhs) const noexcept
+16535:       { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); }
+16535: 
+16535: 
+16535:       friend inline bool
+16535:       operator==(const __weak_count& __a, const __weak_count& __b) noexcept
+16535:       { return __a._M_pi == __b._M_pi; }
+16535: 
+16535:     private:
+16535:       friend class __shared_count<_Lp>;
+16535: 
+16535:       _Sp_counted_base<_Lp>* _M_pi;
+16535:     };
+16535: 
+16535: 
+16535:   template<_Lock_policy _Lp>
+16535:     inline
+16535:     __shared_count<_Lp>::__shared_count(const __weak_count<_Lp>& __r)
+16535:     : _M_pi(__r._M_pi)
+16535:     {
+16535:       if (_M_pi != nullptr)
+16535:  _M_pi->_M_add_ref_lock();
+16535:       else
+16535:  __throw_bad_weak_ptr();
+16535:     }
+16535: 
+16535: 
+16535:   template<_Lock_policy _Lp>
+16535:     inline
+16535:     __shared_count<_Lp>::
+16535:     __shared_count(const __weak_count<_Lp>& __r, std::nothrow_t)
+16535:     : _M_pi(__r._M_pi)
+16535:     {
+16535:       if (_M_pi != nullptr)
+16535:  if (!_M_pi->_M_add_ref_lock_nothrow())
+16535:    _M_pi = nullptr;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Yp_ptr, typename _Tp_ptr>
+16535:     struct __sp_compatible_with
+16535:     : false_type
+16535:     { };
+16535: 
+16535:   template<typename _Yp, typename _Tp>
+16535:     struct __sp_compatible_with<_Yp*, _Tp*>
+16535:     : is_convertible<_Yp*, _Tp*>::type
+16535:     { };
+16535: 
+16535:   template<typename _Up, size_t _Nm>
+16535:     struct __sp_compatible_with<_Up(*)[_Nm], _Up(*)[]>
+16535:     : true_type
+16535:     { };
+16535: 
+16535:   template<typename _Up, size_t _Nm>
+16535:     struct __sp_compatible_with<_Up(*)[_Nm], const _Up(*)[]>
+16535:     : true_type
+16535:     { };
+16535: 
+16535:   template<typename _Up, size_t _Nm>
+16535:     struct __sp_compatible_with<_Up(*)[_Nm], volatile _Up(*)[]>
+16535:     : true_type
+16535:     { };
+16535: 
+16535:   template<typename _Up, size_t _Nm>
+16535:     struct __sp_compatible_with<_Up(*)[_Nm], const volatile _Up(*)[]>
+16535:     : true_type
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Up, size_t _Nm, typename _Yp, typename = void>
+16535:     struct __sp_is_constructible_arrN
+16535:     : false_type
+16535:     { };
+16535: 
+16535:   template<typename _Up, size_t _Nm, typename _Yp>
+16535:     struct __sp_is_constructible_arrN<_Up, _Nm, _Yp, __void_t<_Yp[_Nm]>>
+16535:     : is_convertible<_Yp(*)[_Nm], _Up(*)[_Nm]>::type
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Up, typename _Yp, typename = void>
+16535:     struct __sp_is_constructible_arr
+16535:     : false_type
+16535:     { };
+16535: 
+16535:   template<typename _Up, typename _Yp>
+16535:     struct __sp_is_constructible_arr<_Up, _Yp, __void_t<_Yp[]>>
+16535:     : is_convertible<_Yp(*)[], _Up(*)[]>::type
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Yp>
+16535:     struct __sp_is_constructible;
+16535: 
+16535: 
+16535:   template<typename _Up, size_t _Nm, typename _Yp>
+16535:     struct __sp_is_constructible<_Up[_Nm], _Yp>
+16535:     : __sp_is_constructible_arrN<_Up, _Nm, _Yp>::type
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Up, typename _Yp>
+16535:     struct __sp_is_constructible<_Up[], _Yp>
+16535:     : __sp_is_constructible_arr<_Up, _Yp>::type
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Yp>
+16535:     struct __sp_is_constructible
+16535:     : is_convertible<_Yp*, _Tp*>::type
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp,
+16535:     bool = is_array<_Tp>::value, bool = is_void<_Tp>::value>
+16535:     class __shared_ptr_access
+16535:     {
+16535:     public:
+16535:       using element_type = _Tp;
+16535: 
+16535:       element_type&
+16535:       operator*() const noexcept
+16535:       {
+16535:  ;
+16535:  return *_M_get();
+16535:       }
+16535: 
+16535:       element_type*
+16535:       operator->() const noexcept
+16535:       {
+16535:  ;
+16535:  return _M_get();
+16535:       }
+16535: 
+16535:     private:
+16535:       element_type*
+16535:       _M_get() const noexcept
+16535:       { return static_cast<const __shared_ptr<_Tp, _Lp>*>(this)->get(); }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     class __shared_ptr_access<_Tp, _Lp, false, true>
+16535:     {
+16535:     public:
+16535:       using element_type = _Tp;
+16535: 
+16535:       element_type*
+16535:       operator->() const noexcept
+16535:       {
+16535:  auto __ptr = static_cast<const __shared_ptr<_Tp, _Lp>*>(this)->get();
+16535:  ;
+16535:  return __ptr;
+16535:       }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     class __shared_ptr_access<_Tp, _Lp, true, false>
+16535:     {
+16535:     public:
+16535:       using element_type = typename remove_extent<_Tp>::type;
+16535: 
+16535: 
+16535:       [[__deprecated__("shared_ptr<T[]>::operator* is absent from C++17")]]
+16535:       element_type&
+16535:       operator*() const noexcept
+16535:       {
+16535:  ;
+16535:  return *_M_get();
+16535:       }
+16535: 
+16535:       [[__deprecated__("shared_ptr<T[]>::operator-> is absent from C++17")]]
+16535:       element_type*
+16535:       operator->() const noexcept
+16535:       {
+16535:  ;
+16535:  return _M_get();
+16535:       }
+16535: 
+16535: 
+16535:       element_type&
+16535:       operator[](ptrdiff_t __i) const
+16535:       {
+16535:  ;
+16535:  ;
+16535:  return _M_get()[__i];
+16535:       }
+16535: 
+16535:     private:
+16535:       element_type*
+16535:       _M_get() const noexcept
+16535:       { return static_cast<const __shared_ptr<_Tp, _Lp>*>(this)->get(); }
+16535:     };
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     class __shared_ptr
+16535:     : public __shared_ptr_access<_Tp, _Lp>
+16535:     {
+16535:     public:
+16535:       using element_type = typename remove_extent<_Tp>::type;
+16535: 
+16535:     private:
+16535: 
+16535:       template<typename _Yp>
+16535:  using _SafeConv
+16535:    = typename enable_if<__sp_is_constructible<_Tp, _Yp>::value>::type;
+16535: 
+16535: 
+16535:       template<typename _Yp, typename _Res = void>
+16535:  using _Compatible = typename
+16535:    enable_if<__sp_compatible_with<_Yp*, _Tp*>::value, _Res>::type;
+16535: 
+16535: 
+16535:       template<typename _Yp>
+16535:  using _Assignable = _Compatible<_Yp, __shared_ptr&>;
+16535: 
+16535: 
+16535:       template<typename _Yp, typename _Del, typename _Res = void,
+16535:         typename _Ptr = typename unique_ptr<_Yp, _Del>::pointer>
+16535:  using _UniqCompatible = typename enable_if<__and_<
+16535:    __sp_compatible_with<_Yp*, _Tp*>, is_convertible<_Ptr, element_type*>
+16535:    >::value, _Res>::type;
+16535: 
+16535: 
+16535:       template<typename _Yp, typename _Del>
+16535:  using _UniqAssignable = _UniqCompatible<_Yp, _Del, __shared_ptr&>;
+16535: 
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       constexpr __shared_ptr() noexcept
+16535:       : _M_ptr(0), _M_refcount()
+16535:       { }
+16535: 
+16535:       template<typename _Yp, typename = _SafeConv<_Yp>>
+16535:  explicit
+16535:  __shared_ptr(_Yp* __p)
+16535:  : _M_ptr(__p), _M_refcount(__p, typename is_array<_Tp>::type())
+16535:  {
+16535:    static_assert( !is_void<_Yp>::value, "incomplete type" );
+16535:    static_assert( sizeof(_Yp) > 0, "incomplete type" );
+16535:    _M_enable_shared_from_this_with(__p);
+16535:  }
+16535: 
+16535:       template<typename _Yp, typename _Deleter, typename = _SafeConv<_Yp>>
+16535:  __shared_ptr(_Yp* __p, _Deleter __d)
+16535:  : _M_ptr(__p), _M_refcount(__p, std::move(__d))
+16535:  {
+16535:    static_assert(__is_invocable<_Deleter&, _Yp*&>::value,
+16535:        "deleter expression d(p) is well-formed");
+16535:    _M_enable_shared_from_this_with(__p);
+16535:  }
+16535: 
+16535:       template<typename _Yp, typename _Deleter, typename _Alloc,
+16535:         typename = _SafeConv<_Yp>>
+16535:  __shared_ptr(_Yp* __p, _Deleter __d, _Alloc __a)
+16535:  : _M_ptr(__p), _M_refcount(__p, std::move(__d), std::move(__a))
+16535:  {
+16535:    static_assert(__is_invocable<_Deleter&, _Yp*&>::value,
+16535:        "deleter expression d(p) is well-formed");
+16535:    _M_enable_shared_from_this_with(__p);
+16535:  }
+16535: 
+16535:       template<typename _Deleter>
+16535:  __shared_ptr(nullptr_t __p, _Deleter __d)
+16535:  : _M_ptr(0), _M_refcount(__p, std::move(__d))
+16535:  { }
+16535: 
+16535:       template<typename _Deleter, typename _Alloc>
+16535:         __shared_ptr(nullptr_t __p, _Deleter __d, _Alloc __a)
+16535:  : _M_ptr(0), _M_refcount(__p, std::move(__d), std::move(__a))
+16535:  { }
+16535: 
+16535:       template<typename _Yp>
+16535:  __shared_ptr(const __shared_ptr<_Yp, _Lp>& __r,
+16535:        element_type* __p) noexcept
+16535:  : _M_ptr(__p), _M_refcount(__r._M_refcount)
+16535:  { }
+16535: 
+16535:       __shared_ptr(const __shared_ptr&) noexcept = default;
+16535:       __shared_ptr& operator=(const __shared_ptr&) noexcept = default;
+16535:       ~__shared_ptr() = default;
+16535: 
+16535:       template<typename _Yp, typename = _Compatible<_Yp>>
+16535:  __shared_ptr(const __shared_ptr<_Yp, _Lp>& __r) noexcept
+16535:  : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount)
+16535:  { }
+16535: 
+16535:       __shared_ptr(__shared_ptr&& __r) noexcept
+16535:       : _M_ptr(__r._M_ptr), _M_refcount()
+16535:       {
+16535:  _M_refcount._M_swap(__r._M_refcount);
+16535:  __r._M_ptr = 0;
+16535:       }
+16535: 
+16535:       template<typename _Yp, typename = _Compatible<_Yp>>
+16535:  __shared_ptr(__shared_ptr<_Yp, _Lp>&& __r) noexcept
+16535:  : _M_ptr(__r._M_ptr), _M_refcount()
+16535:  {
+16535:    _M_refcount._M_swap(__r._M_refcount);
+16535:    __r._M_ptr = 0;
+16535:  }
+16535: 
+16535:       template<typename _Yp, typename = _Compatible<_Yp>>
+16535:  explicit __shared_ptr(const __weak_ptr<_Yp, _Lp>& __r)
+16535:  : _M_refcount(__r._M_refcount)
+16535:  {
+16535: 
+16535: 
+16535:    _M_ptr = __r._M_ptr;
+16535:  }
+16535: 
+16535: 
+16535:       template<typename _Yp, typename _Del,
+16535:         typename = _UniqCompatible<_Yp, _Del>>
+16535:  __shared_ptr(unique_ptr<_Yp, _Del>&& __r)
+16535:  : _M_ptr(__r.get()), _M_refcount()
+16535:  {
+16535:    auto __raw = __to_address(__r.get());
+16535:    _M_refcount = __shared_count<_Lp>(std::move(__r));
+16535:    _M_enable_shared_from_this_with(__raw);
+16535:  }
+16535: 
+16535: 
+16535:     protected:
+16535: 
+16535:       template<typename _Tp1, typename _Del,
+16535:         typename enable_if<__and_<
+16535:    __not_<is_array<_Tp>>, is_array<_Tp1>,
+16535:           is_convertible<typename unique_ptr<_Tp1, _Del>::pointer, _Tp*>
+16535:         >::value, bool>::type = true>
+16535:  __shared_ptr(unique_ptr<_Tp1, _Del>&& __r, __sp_array_delete)
+16535:  : _M_ptr(__r.get()), _M_refcount()
+16535:  {
+16535:    auto __raw = __to_address(__r.get());
+16535:    _M_refcount = __shared_count<_Lp>(std::move(__r));
+16535:    _M_enable_shared_from_this_with(__raw);
+16535:  }
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535: #pragma GCC diagnostic push
+16535: #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+16535: 
+16535:       template<typename _Yp, typename = _Compatible<_Yp>>
+16535:  __shared_ptr(auto_ptr<_Yp>&& __r);
+16535: #pragma GCC diagnostic pop
+16535: 
+16535: 
+16535:       constexpr __shared_ptr(nullptr_t) noexcept : __shared_ptr() { }
+16535: 
+16535:       template<typename _Yp>
+16535:  _Assignable<_Yp>
+16535:  operator=(const __shared_ptr<_Yp, _Lp>& __r) noexcept
+16535:  {
+16535:    _M_ptr = __r._M_ptr;
+16535:    _M_refcount = __r._M_refcount;
+16535:    return *this;
+16535:  }
+16535: 
+16535: 
+16535: #pragma GCC diagnostic push
+16535: #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+16535:       template<typename _Yp>
+16535:  _Assignable<_Yp>
+16535:  operator=(auto_ptr<_Yp>&& __r)
+16535:  {
+16535:    __shared_ptr(std::move(__r)).swap(*this);
+16535:    return *this;
+16535:  }
+16535: #pragma GCC diagnostic pop
+16535: 
+16535: 
+16535:       __shared_ptr&
+16535:       operator=(__shared_ptr&& __r) noexcept
+16535:       {
+16535:  __shared_ptr(std::move(__r)).swap(*this);
+16535:  return *this;
+16535:       }
+16535: 
+16535:       template<class _Yp>
+16535:  _Assignable<_Yp>
+16535:  operator=(__shared_ptr<_Yp, _Lp>&& __r) noexcept
+16535:  {
+16535:    __shared_ptr(std::move(__r)).swap(*this);
+16535:    return *this;
+16535:  }
+16535: 
+16535:       template<typename _Yp, typename _Del>
+16535:  _UniqAssignable<_Yp, _Del>
+16535:  operator=(unique_ptr<_Yp, _Del>&& __r)
+16535:  {
+16535:    __shared_ptr(std::move(__r)).swap(*this);
+16535:    return *this;
+16535:  }
+16535: 
+16535:       void
+16535:       reset() noexcept
+16535:       { __shared_ptr().swap(*this); }
+16535: 
+16535:       template<typename _Yp>
+16535:  _SafeConv<_Yp>
+16535:  reset(_Yp* __p)
+16535:  {
+16535: 
+16535:    ;
+16535:    __shared_ptr(__p).swap(*this);
+16535:  }
+16535: 
+16535:       template<typename _Yp, typename _Deleter>
+16535:  _SafeConv<_Yp>
+16535:  reset(_Yp* __p, _Deleter __d)
+16535:  { __shared_ptr(__p, std::move(__d)).swap(*this); }
+16535: 
+16535:       template<typename _Yp, typename _Deleter, typename _Alloc>
+16535:  _SafeConv<_Yp>
+16535:  reset(_Yp* __p, _Deleter __d, _Alloc __a)
+16535:         { __shared_ptr(__p, std::move(__d), std::move(__a)).swap(*this); }
+16535: 
+16535:       element_type*
+16535:       get() const noexcept
+16535:       { return _M_ptr; }
+16535: 
+16535:       explicit operator bool() const
+16535:       { return _M_ptr == 0 ? false : true; }
+16535: 
+16535:       bool
+16535:       unique() const noexcept
+16535:       { return _M_refcount._M_unique(); }
+16535: 
+16535:       long
+16535:       use_count() const noexcept
+16535:       { return _M_refcount._M_get_use_count(); }
+16535: 
+16535:       void
+16535:       swap(__shared_ptr<_Tp, _Lp>& __other) noexcept
+16535:       {
+16535:  std::swap(_M_ptr, __other._M_ptr);
+16535:  _M_refcount._M_swap(__other._M_refcount);
+16535:       }
+16535: 
+16535:       template<typename _Tp1>
+16535:  bool
+16535:  owner_before(__shared_ptr<_Tp1, _Lp> const& __rhs) const noexcept
+16535:  { return _M_refcount._M_less(__rhs._M_refcount); }
+16535: 
+16535:       template<typename _Tp1>
+16535:  bool
+16535:  owner_before(__weak_ptr<_Tp1, _Lp> const& __rhs) const noexcept
+16535:  { return _M_refcount._M_less(__rhs._M_refcount); }
+16535: 
+16535:     protected:
+16535: 
+16535:       template<typename _Alloc, typename... _Args>
+16535:  __shared_ptr(_Sp_alloc_shared_tag<_Alloc> __tag, _Args&&... __args)
+16535:  : _M_ptr(), _M_refcount(_M_ptr, __tag, std::forward<_Args>(__args)...)
+16535:  { _M_enable_shared_from_this_with(_M_ptr); }
+16535: 
+16535:       template<typename _Tp1, _Lock_policy _Lp1, typename _Alloc,
+16535:         typename... _Args>
+16535:  friend __shared_ptr<_Tp1, _Lp1>
+16535:  __allocate_shared(const _Alloc& __a, _Args&&... __args);
+16535: 
+16535: 
+16535: 
+16535:       __shared_ptr(const __weak_ptr<_Tp, _Lp>& __r, std::nothrow_t)
+16535:       : _M_refcount(__r._M_refcount, std::nothrow)
+16535:       {
+16535:  _M_ptr = _M_refcount._M_get_use_count() ? __r._M_ptr : nullptr;
+16535:       }
+16535: 
+16535:       friend class __weak_ptr<_Tp, _Lp>;
+16535: 
+16535:     private:
+16535: 
+16535:       template<typename _Yp>
+16535:  using __esft_base_t = decltype(__enable_shared_from_this_base(
+16535:        std::declval<const __shared_count<_Lp>&>(),
+16535:        std::declval<_Yp*>()));
+16535: 
+16535: 
+16535:       template<typename _Yp, typename = void>
+16535:  struct __has_esft_base
+16535:  : false_type { };
+16535: 
+16535:       template<typename _Yp>
+16535:  struct __has_esft_base<_Yp, __void_t<__esft_base_t<_Yp>>>
+16535:  : __not_<is_array<_Tp>> { };
+16535: 
+16535:       template<typename _Yp, typename _Yp2 = typename remove_cv<_Yp>::type>
+16535:  typename enable_if<__has_esft_base<_Yp2>::value>::type
+16535:  _M_enable_shared_from_this_with(_Yp* __p) noexcept
+16535:  {
+16535:    if (auto __base = __enable_shared_from_this_base(_M_refcount, __p))
+16535:      __base->_M_weak_assign(const_cast<_Yp2*>(__p), _M_refcount);
+16535:  }
+16535: 
+16535:       template<typename _Yp, typename _Yp2 = typename remove_cv<_Yp>::type>
+16535:  typename enable_if<!__has_esft_base<_Yp2>::value>::type
+16535:  _M_enable_shared_from_this_with(_Yp*) noexcept
+16535:  { }
+16535: 
+16535:       void*
+16535:       _M_get_deleter(const std::type_info& __ti) const noexcept
+16535:       { return _M_refcount._M_get_deleter(__ti); }
+16535: 
+16535:       template<typename _Tp1, _Lock_policy _Lp1> friend class __shared_ptr;
+16535:       template<typename _Tp1, _Lock_policy _Lp1> friend class __weak_ptr;
+16535: 
+16535:       template<typename _Del, typename _Tp1, _Lock_policy _Lp1>
+16535:  friend _Del* get_deleter(const __shared_ptr<_Tp1, _Lp1>&) noexcept;
+16535: 
+16535:       template<typename _Del, typename _Tp1>
+16535:  friend _Del* get_deleter(const shared_ptr<_Tp1>&) noexcept;
+16535: 
+16535:       element_type* _M_ptr;
+16535:       __shared_count<_Lp> _M_refcount;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
+16535:     inline bool
+16535:     operator==(const __shared_ptr<_Tp1, _Lp>& __a,
+16535:         const __shared_ptr<_Tp2, _Lp>& __b) noexcept
+16535:     { return __a.get() == __b.get(); }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline bool
+16535:     operator==(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
+16535:     { return !__a; }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline bool
+16535:     operator==(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
+16535:     { return !__a; }
+16535: 
+16535:   template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
+16535:     inline bool
+16535:     operator!=(const __shared_ptr<_Tp1, _Lp>& __a,
+16535:         const __shared_ptr<_Tp2, _Lp>& __b) noexcept
+16535:     { return __a.get() != __b.get(); }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline bool
+16535:     operator!=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
+16535:     { return (bool)__a; }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline bool
+16535:     operator!=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
+16535:     { return (bool)__a; }
+16535: 
+16535:   template<typename _Tp, typename _Up, _Lock_policy _Lp>
+16535:     inline bool
+16535:     operator<(const __shared_ptr<_Tp, _Lp>& __a,
+16535:        const __shared_ptr<_Up, _Lp>& __b) noexcept
+16535:     {
+16535:       using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type;
+16535:       using _Up_elt = typename __shared_ptr<_Up, _Lp>::element_type;
+16535:       using _Vp = typename common_type<_Tp_elt*, _Up_elt*>::type;
+16535:       return less<_Vp>()(__a.get(), __b.get());
+16535:     }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline bool
+16535:     operator<(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
+16535:     {
+16535:       using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type;
+16535:       return less<_Tp_elt*>()(__a.get(), nullptr);
+16535:     }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline bool
+16535:     operator<(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
+16535:     {
+16535:       using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type;
+16535:       return less<_Tp_elt*>()(nullptr, __a.get());
+16535:     }
+16535: 
+16535:   template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
+16535:     inline bool
+16535:     operator<=(const __shared_ptr<_Tp1, _Lp>& __a,
+16535:         const __shared_ptr<_Tp2, _Lp>& __b) noexcept
+16535:     { return !(__b < __a); }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline bool
+16535:     operator<=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
+16535:     { return !(nullptr < __a); }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline bool
+16535:     operator<=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
+16535:     { return !(__a < nullptr); }
+16535: 
+16535:   template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
+16535:     inline bool
+16535:     operator>(const __shared_ptr<_Tp1, _Lp>& __a,
+16535:        const __shared_ptr<_Tp2, _Lp>& __b) noexcept
+16535:     { return (__b < __a); }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline bool
+16535:     operator>(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
+16535:     { return nullptr < __a; }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline bool
+16535:     operator>(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
+16535:     { return __a < nullptr; }
+16535: 
+16535:   template<typename _Tp1, typename _Tp2, _Lock_policy _Lp>
+16535:     inline bool
+16535:     operator>=(const __shared_ptr<_Tp1, _Lp>& __a,
+16535:         const __shared_ptr<_Tp2, _Lp>& __b) noexcept
+16535:     { return !(__a < __b); }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline bool
+16535:     operator>=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept
+16535:     { return !(__a < nullptr); }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline bool
+16535:     operator>=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept
+16535:     { return !(nullptr < __a); }
+16535: 
+16535:   template<typename _Sp>
+16535:     struct _Sp_less : public binary_function<_Sp, _Sp, bool>
+16535:     {
+16535:       bool
+16535:       operator()(const _Sp& __lhs, const _Sp& __rhs) const noexcept
+16535:       {
+16535:  typedef typename _Sp::element_type element_type;
+16535:  return std::less<element_type*>()(__lhs.get(), __rhs.get());
+16535:       }
+16535:     };
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     struct less<__shared_ptr<_Tp, _Lp>>
+16535:     : public _Sp_less<__shared_ptr<_Tp, _Lp>>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline void
+16535:     swap(__shared_ptr<_Tp, _Lp>& __a, __shared_ptr<_Tp, _Lp>& __b) noexcept
+16535:     { __a.swap(__b); }
+16535: # 1544 "/usr/include/c++/8/bits/shared_ptr_base.h" 3
+16535:   template<typename _Tp, typename _Tp1, _Lock_policy _Lp>
+16535:     inline __shared_ptr<_Tp, _Lp>
+16535:     static_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept
+16535:     {
+16535:       using _Sp = __shared_ptr<_Tp, _Lp>;
+16535:       return _Sp(__r, static_cast<typename _Sp::element_type*>(__r.get()));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Tp1, _Lock_policy _Lp>
+16535:     inline __shared_ptr<_Tp, _Lp>
+16535:     const_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept
+16535:     {
+16535:       using _Sp = __shared_ptr<_Tp, _Lp>;
+16535:       return _Sp(__r, const_cast<typename _Sp::element_type*>(__r.get()));
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Tp1, _Lock_policy _Lp>
+16535:     inline __shared_ptr<_Tp, _Lp>
+16535:     dynamic_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept
+16535:     {
+16535:       using _Sp = __shared_ptr<_Tp, _Lp>;
+16535:       if (auto* __p = dynamic_cast<typename _Sp::element_type*>(__r.get()))
+16535:  return _Sp(__r, __p);
+16535:       return _Sp();
+16535:     }
+16535: # 1590 "/usr/include/c++/8/bits/shared_ptr_base.h" 3
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     class __weak_ptr
+16535:     {
+16535:       template<typename _Yp, typename _Res = void>
+16535:  using _Compatible = typename
+16535:    enable_if<__sp_compatible_with<_Yp*, _Tp*>::value, _Res>::type;
+16535: 
+16535: 
+16535:       template<typename _Yp>
+16535:  using _Assignable = _Compatible<_Yp, __weak_ptr&>;
+16535: 
+16535:     public:
+16535:       using element_type = typename remove_extent<_Tp>::type;
+16535: 
+16535:       constexpr __weak_ptr() noexcept
+16535:       : _M_ptr(nullptr), _M_refcount()
+16535:       { }
+16535: 
+16535:       __weak_ptr(const __weak_ptr&) noexcept = default;
+16535: 
+16535:       ~__weak_ptr() = default;
+16535: # 1626 "/usr/include/c++/8/bits/shared_ptr_base.h" 3
+16535:       template<typename _Yp, typename = _Compatible<_Yp>>
+16535:  __weak_ptr(const __weak_ptr<_Yp, _Lp>& __r) noexcept
+16535:  : _M_refcount(__r._M_refcount)
+16535:         { _M_ptr = __r.lock().get(); }
+16535: 
+16535:       template<typename _Yp, typename = _Compatible<_Yp>>
+16535:  __weak_ptr(const __shared_ptr<_Yp, _Lp>& __r) noexcept
+16535:  : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount)
+16535:  { }
+16535: 
+16535:       __weak_ptr(__weak_ptr&& __r) noexcept
+16535:       : _M_ptr(__r._M_ptr), _M_refcount(std::move(__r._M_refcount))
+16535:       { __r._M_ptr = nullptr; }
+16535: 
+16535:       template<typename _Yp, typename = _Compatible<_Yp>>
+16535:  __weak_ptr(__weak_ptr<_Yp, _Lp>&& __r) noexcept
+16535:  : _M_ptr(__r.lock().get()), _M_refcount(std::move(__r._M_refcount))
+16535:         { __r._M_ptr = nullptr; }
+16535: 
+16535:       __weak_ptr&
+16535:       operator=(const __weak_ptr& __r) noexcept = default;
+16535: 
+16535:       template<typename _Yp>
+16535:  _Assignable<_Yp>
+16535:  operator=(const __weak_ptr<_Yp, _Lp>& __r) noexcept
+16535:  {
+16535:    _M_ptr = __r.lock().get();
+16535:    _M_refcount = __r._M_refcount;
+16535:    return *this;
+16535:  }
+16535: 
+16535:       template<typename _Yp>
+16535:  _Assignable<_Yp>
+16535:  operator=(const __shared_ptr<_Yp, _Lp>& __r) noexcept
+16535:  {
+16535:    _M_ptr = __r._M_ptr;
+16535:    _M_refcount = __r._M_refcount;
+16535:    return *this;
+16535:  }
+16535: 
+16535:       __weak_ptr&
+16535:       operator=(__weak_ptr&& __r) noexcept
+16535:       {
+16535:  _M_ptr = __r._M_ptr;
+16535:  _M_refcount = std::move(__r._M_refcount);
+16535:  __r._M_ptr = nullptr;
+16535:  return *this;
+16535:       }
+16535: 
+16535:       template<typename _Yp>
+16535:  _Assignable<_Yp>
+16535:  operator=(__weak_ptr<_Yp, _Lp>&& __r) noexcept
+16535:  {
+16535:    _M_ptr = __r.lock().get();
+16535:    _M_refcount = std::move(__r._M_refcount);
+16535:    __r._M_ptr = nullptr;
+16535:    return *this;
+16535:  }
+16535: 
+16535:       __shared_ptr<_Tp, _Lp>
+16535:       lock() const noexcept
+16535:       { return __shared_ptr<element_type, _Lp>(*this, std::nothrow); }
+16535: 
+16535:       long
+16535:       use_count() const noexcept
+16535:       { return _M_refcount._M_get_use_count(); }
+16535: 
+16535:       bool
+16535:       expired() const noexcept
+16535:       { return _M_refcount._M_get_use_count() == 0; }
+16535: 
+16535:       template<typename _Tp1>
+16535:  bool
+16535:  owner_before(const __shared_ptr<_Tp1, _Lp>& __rhs) const noexcept
+16535:  { return _M_refcount._M_less(__rhs._M_refcount); }
+16535: 
+16535:       template<typename _Tp1>
+16535:  bool
+16535:  owner_before(const __weak_ptr<_Tp1, _Lp>& __rhs) const noexcept
+16535:  { return _M_refcount._M_less(__rhs._M_refcount); }
+16535: 
+16535:       void
+16535:       reset() noexcept
+16535:       { __weak_ptr().swap(*this); }
+16535: 
+16535:       void
+16535:       swap(__weak_ptr& __s) noexcept
+16535:       {
+16535:  std::swap(_M_ptr, __s._M_ptr);
+16535:  _M_refcount._M_swap(__s._M_refcount);
+16535:       }
+16535: 
+16535:     private:
+16535: 
+16535:       void
+16535:       _M_assign(_Tp* __ptr, const __shared_count<_Lp>& __refcount) noexcept
+16535:       {
+16535:  if (use_count() == 0)
+16535:    {
+16535:      _M_ptr = __ptr;
+16535:      _M_refcount = __refcount;
+16535:    }
+16535:       }
+16535: 
+16535:       template<typename _Tp1, _Lock_policy _Lp1> friend class __shared_ptr;
+16535:       template<typename _Tp1, _Lock_policy _Lp1> friend class __weak_ptr;
+16535:       friend class __enable_shared_from_this<_Tp, _Lp>;
+16535:       friend class enable_shared_from_this<_Tp>;
+16535: 
+16535:       element_type* _M_ptr;
+16535:       __weak_count<_Lp> _M_refcount;
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline void
+16535:     swap(__weak_ptr<_Tp, _Lp>& __a, __weak_ptr<_Tp, _Lp>& __b) noexcept
+16535:     { __a.swap(__b); }
+16535: 
+16535:   template<typename _Tp, typename _Tp1>
+16535:     struct _Sp_owner_less : public binary_function<_Tp, _Tp, bool>
+16535:     {
+16535:       bool
+16535:       operator()(const _Tp& __lhs, const _Tp& __rhs) const noexcept
+16535:       { return __lhs.owner_before(__rhs); }
+16535: 
+16535:       bool
+16535:       operator()(const _Tp& __lhs, const _Tp1& __rhs) const noexcept
+16535:       { return __lhs.owner_before(__rhs); }
+16535: 
+16535:       bool
+16535:       operator()(const _Tp1& __lhs, const _Tp& __rhs) const noexcept
+16535:       { return __lhs.owner_before(__rhs); }
+16535:     };
+16535: 
+16535:   template<>
+16535:     struct _Sp_owner_less<void, void>
+16535:     {
+16535:       template<typename _Tp, typename _Up>
+16535:  auto
+16535:  operator()(const _Tp& __lhs, const _Up& __rhs) const noexcept
+16535:  -> decltype(__lhs.owner_before(__rhs))
+16535:  { return __lhs.owner_before(__rhs); }
+16535: 
+16535:       using is_transparent = void;
+16535:     };
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     struct owner_less<__shared_ptr<_Tp, _Lp>>
+16535:     : public _Sp_owner_less<__shared_ptr<_Tp, _Lp>, __weak_ptr<_Tp, _Lp>>
+16535:     { };
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     struct owner_less<__weak_ptr<_Tp, _Lp>>
+16535:     : public _Sp_owner_less<__weak_ptr<_Tp, _Lp>, __shared_ptr<_Tp, _Lp>>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     class __enable_shared_from_this
+16535:     {
+16535:     protected:
+16535:       constexpr __enable_shared_from_this() noexcept { }
+16535: 
+16535:       __enable_shared_from_this(const __enable_shared_from_this&) noexcept { }
+16535: 
+16535:       __enable_shared_from_this&
+16535:       operator=(const __enable_shared_from_this&) noexcept
+16535:       { return *this; }
+16535: 
+16535:       ~__enable_shared_from_this() { }
+16535: 
+16535:     public:
+16535:       __shared_ptr<_Tp, _Lp>
+16535:       shared_from_this()
+16535:       { return __shared_ptr<_Tp, _Lp>(this->_M_weak_this); }
+16535: 
+16535:       __shared_ptr<const _Tp, _Lp>
+16535:       shared_from_this() const
+16535:       { return __shared_ptr<const _Tp, _Lp>(this->_M_weak_this); }
+16535: 
+16535: 
+16535:       __weak_ptr<_Tp, _Lp>
+16535:       weak_from_this() noexcept
+16535:       { return this->_M_weak_this; }
+16535: 
+16535:       __weak_ptr<const _Tp, _Lp>
+16535:       weak_from_this() const noexcept
+16535:       { return this->_M_weak_this; }
+16535: 
+16535: 
+16535:     private:
+16535:       template<typename _Tp1>
+16535:  void
+16535:  _M_weak_assign(_Tp1* __p, const __shared_count<_Lp>& __n) const noexcept
+16535:  { _M_weak_this._M_assign(__p, __n); }
+16535: 
+16535:       friend const __enable_shared_from_this*
+16535:       __enable_shared_from_this_base(const __shared_count<_Lp>&,
+16535:          const __enable_shared_from_this* __p)
+16535:       { return __p; }
+16535: 
+16535:       template<typename, _Lock_policy>
+16535:  friend class __shared_ptr;
+16535: 
+16535:       mutable __weak_ptr<_Tp, _Lp> _M_weak_this;
+16535:     };
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp, typename _Alloc, typename... _Args>
+16535:     inline __shared_ptr<_Tp, _Lp>
+16535:     __allocate_shared(const _Alloc& __a, _Args&&... __args)
+16535:     {
+16535:       return __shared_ptr<_Tp, _Lp>(_Sp_alloc_shared_tag<_Alloc>{__a},
+16535:         std::forward<_Args>(__args)...);
+16535:     }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp, typename... _Args>
+16535:     inline __shared_ptr<_Tp, _Lp>
+16535:     __make_shared(_Args&&... __args)
+16535:     {
+16535:       typedef typename std::remove_const<_Tp>::type _Tp_nc;
+16535:       return std::__allocate_shared<_Tp, _Lp>(std::allocator<_Tp_nc>(),
+16535:            std::forward<_Args>(__args)...);
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     struct hash<__shared_ptr<_Tp, _Lp>>
+16535:     : public __hash_base<size_t, __shared_ptr<_Tp, _Lp>>
+16535:     {
+16535:       size_t
+16535:       operator()(const __shared_ptr<_Tp, _Lp>& __s) const noexcept
+16535:       {
+16535:  return hash<typename __shared_ptr<_Tp, _Lp>::element_type*>()(
+16535:      __s.get());
+16535:       }
+16535:     };
+16535: 
+16535: 
+16535: }
+16535: # 53 "/usr/include/c++/8/bits/shared_ptr.h" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Ch, typename _Tr, typename _Tp, _Lock_policy _Lp>
+16535:     inline std::basic_ostream<_Ch, _Tr>&
+16535:     operator<<(std::basic_ostream<_Ch, _Tr>& __os,
+16535:         const __shared_ptr<_Tp, _Lp>& __p)
+16535:     {
+16535:       __os << __p.get();
+16535:       return __os;
+16535:     }
+16535: 
+16535:   template<typename _Del, typename _Tp, _Lock_policy _Lp>
+16535:     inline _Del*
+16535:     get_deleter(const __shared_ptr<_Tp, _Lp>& __p) noexcept
+16535:     {
+16535: 
+16535:       return static_cast<_Del*>(__p._M_get_deleter(typeid(_Del)));
+16535: 
+16535: 
+16535: 
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _Del, typename _Tp>
+16535:     inline _Del*
+16535:     get_deleter(const shared_ptr<_Tp>& __p) noexcept
+16535:     {
+16535: 
+16535:       return static_cast<_Del*>(__p._M_get_deleter(typeid(_Del)));
+16535: 
+16535: 
+16535: 
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     class shared_ptr : public __shared_ptr<_Tp>
+16535:     {
+16535:       template<typename... _Args>
+16535:  using _Constructible = typename enable_if<
+16535:    is_constructible<__shared_ptr<_Tp>, _Args...>::value
+16535:  >::type;
+16535: 
+16535:       template<typename _Arg>
+16535:  using _Assignable = typename enable_if<
+16535:    is_assignable<__shared_ptr<_Tp>&, _Arg>::value, shared_ptr&
+16535:  >::type;
+16535: 
+16535:     public:
+16535: 
+16535:       using element_type = typename __shared_ptr<_Tp>::element_type;
+16535: # 127 "/usr/include/c++/8/bits/shared_ptr.h" 3
+16535:       constexpr shared_ptr() noexcept : __shared_ptr<_Tp>() { }
+16535: 
+16535:       shared_ptr(const shared_ptr&) noexcept = default;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Yp, typename = _Constructible<_Yp*>>
+16535:  explicit
+16535:  shared_ptr(_Yp* __p) : __shared_ptr<_Tp>(__p) { }
+16535: # 154 "/usr/include/c++/8/bits/shared_ptr.h" 3
+16535:       template<typename _Yp, typename _Deleter,
+16535:         typename = _Constructible<_Yp*, _Deleter>>
+16535:  shared_ptr(_Yp* __p, _Deleter __d)
+16535:         : __shared_ptr<_Tp>(__p, std::move(__d)) { }
+16535: # 172 "/usr/include/c++/8/bits/shared_ptr.h" 3
+16535:       template<typename _Deleter>
+16535:  shared_ptr(nullptr_t __p, _Deleter __d)
+16535:         : __shared_ptr<_Tp>(__p, std::move(__d)) { }
+16535: # 191 "/usr/include/c++/8/bits/shared_ptr.h" 3
+16535:       template<typename _Yp, typename _Deleter, typename _Alloc,
+16535:         typename = _Constructible<_Yp*, _Deleter, _Alloc>>
+16535:  shared_ptr(_Yp* __p, _Deleter __d, _Alloc __a)
+16535:  : __shared_ptr<_Tp>(__p, std::move(__d), std::move(__a)) { }
+16535: # 211 "/usr/include/c++/8/bits/shared_ptr.h" 3
+16535:       template<typename _Deleter, typename _Alloc>
+16535:  shared_ptr(nullptr_t __p, _Deleter __d, _Alloc __a)
+16535:  : __shared_ptr<_Tp>(__p, std::move(__d), std::move(__a)) { }
+16535: # 233 "/usr/include/c++/8/bits/shared_ptr.h" 3
+16535:       template<typename _Yp>
+16535:  shared_ptr(const shared_ptr<_Yp>& __r, element_type* __p) noexcept
+16535:  : __shared_ptr<_Tp>(__r, __p) { }
+16535: # 244 "/usr/include/c++/8/bits/shared_ptr.h" 3
+16535:       template<typename _Yp,
+16535:         typename = _Constructible<const shared_ptr<_Yp>&>>
+16535:  shared_ptr(const shared_ptr<_Yp>& __r) noexcept
+16535:         : __shared_ptr<_Tp>(__r) { }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       shared_ptr(shared_ptr&& __r) noexcept
+16535:       : __shared_ptr<_Tp>(std::move(__r)) { }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Yp, typename = _Constructible<shared_ptr<_Yp>>>
+16535:  shared_ptr(shared_ptr<_Yp>&& __r) noexcept
+16535:  : __shared_ptr<_Tp>(std::move(__r)) { }
+16535: # 274 "/usr/include/c++/8/bits/shared_ptr.h" 3
+16535:       template<typename _Yp, typename = _Constructible<const weak_ptr<_Yp>&>>
+16535:  explicit shared_ptr(const weak_ptr<_Yp>& __r)
+16535:  : __shared_ptr<_Tp>(__r) { }
+16535: 
+16535: 
+16535: #pragma GCC diagnostic push
+16535: #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+16535:       template<typename _Yp, typename = _Constructible<auto_ptr<_Yp>>>
+16535:  shared_ptr(auto_ptr<_Yp>&& __r);
+16535: #pragma GCC diagnostic pop
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Yp, typename _Del,
+16535:         typename = _Constructible<unique_ptr<_Yp, _Del>>>
+16535:  shared_ptr(unique_ptr<_Yp, _Del>&& __r)
+16535:  : __shared_ptr<_Tp>(std::move(__r)) { }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Yp, typename _Del,
+16535:   _Constructible<unique_ptr<_Yp, _Del>, __sp_array_delete>* = 0>
+16535:  shared_ptr(unique_ptr<_Yp, _Del>&& __r)
+16535:  : __shared_ptr<_Tp>(std::move(__r), __sp_array_delete()) { }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       constexpr shared_ptr(nullptr_t) noexcept : shared_ptr() { }
+16535: 
+16535:       shared_ptr& operator=(const shared_ptr&) noexcept = default;
+16535: 
+16535:       template<typename _Yp>
+16535:  _Assignable<const shared_ptr<_Yp>&>
+16535:  operator=(const shared_ptr<_Yp>& __r) noexcept
+16535:  {
+16535:    this->__shared_ptr<_Tp>::operator=(__r);
+16535:    return *this;
+16535:  }
+16535: 
+16535: 
+16535: #pragma GCC diagnostic push
+16535: #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+16535:       template<typename _Yp>
+16535:  _Assignable<auto_ptr<_Yp>>
+16535:  operator=(auto_ptr<_Yp>&& __r)
+16535:  {
+16535:    this->__shared_ptr<_Tp>::operator=(std::move(__r));
+16535:    return *this;
+16535:  }
+16535: #pragma GCC diagnostic pop
+16535: 
+16535: 
+16535:       shared_ptr&
+16535:       operator=(shared_ptr&& __r) noexcept
+16535:       {
+16535:  this->__shared_ptr<_Tp>::operator=(std::move(__r));
+16535:  return *this;
+16535:       }
+16535: 
+16535:       template<class _Yp>
+16535:  _Assignable<shared_ptr<_Yp>>
+16535:  operator=(shared_ptr<_Yp>&& __r) noexcept
+16535:  {
+16535:    this->__shared_ptr<_Tp>::operator=(std::move(__r));
+16535:    return *this;
+16535:  }
+16535: 
+16535:       template<typename _Yp, typename _Del>
+16535:  _Assignable<unique_ptr<_Yp, _Del>>
+16535:  operator=(unique_ptr<_Yp, _Del>&& __r)
+16535:  {
+16535:    this->__shared_ptr<_Tp>::operator=(std::move(__r));
+16535:    return *this;
+16535:  }
+16535: 
+16535:     private:
+16535: 
+16535:       template<typename _Alloc, typename... _Args>
+16535:  shared_ptr(_Sp_alloc_shared_tag<_Alloc> __tag, _Args&&... __args)
+16535:  : __shared_ptr<_Tp>(__tag, std::forward<_Args>(__args)...)
+16535:  { }
+16535: 
+16535:       template<typename _Yp, typename _Alloc, typename... _Args>
+16535:  friend shared_ptr<_Yp>
+16535:  allocate_shared(const _Alloc& __a, _Args&&... __args);
+16535: 
+16535: 
+16535:       shared_ptr(const weak_ptr<_Tp>& __r, std::nothrow_t)
+16535:       : __shared_ptr<_Tp>(__r, std::nothrow) { }
+16535: 
+16535:       friend class weak_ptr<_Tp>;
+16535:     };
+16535: # 381 "/usr/include/c++/8/bits/shared_ptr.h" 3
+16535:   template<typename _Tp, typename _Up>
+16535:     inline bool
+16535:     operator==(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
+16535:     { return __a.get() == __b.get(); }
+16535: 
+16535:   template<typename _Tp>
+16535:     inline bool
+16535:     operator==(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
+16535:     { return !__a; }
+16535: 
+16535:   template<typename _Tp>
+16535:     inline bool
+16535:     operator==(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
+16535:     { return !__a; }
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     inline bool
+16535:     operator!=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
+16535:     { return __a.get() != __b.get(); }
+16535: 
+16535:   template<typename _Tp>
+16535:     inline bool
+16535:     operator!=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
+16535:     { return (bool)__a; }
+16535: 
+16535:   template<typename _Tp>
+16535:     inline bool
+16535:     operator!=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
+16535:     { return (bool)__a; }
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     inline bool
+16535:     operator<(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
+16535:     {
+16535:       using _Tp_elt = typename shared_ptr<_Tp>::element_type;
+16535:       using _Up_elt = typename shared_ptr<_Up>::element_type;
+16535:       using _Vp = typename common_type<_Tp_elt*, _Up_elt*>::type;
+16535:       return less<_Vp>()(__a.get(), __b.get());
+16535:     }
+16535: 
+16535:   template<typename _Tp>
+16535:     inline bool
+16535:     operator<(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
+16535:     {
+16535:       using _Tp_elt = typename shared_ptr<_Tp>::element_type;
+16535:       return less<_Tp_elt*>()(__a.get(), nullptr);
+16535:     }
+16535: 
+16535:   template<typename _Tp>
+16535:     inline bool
+16535:     operator<(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
+16535:     {
+16535:       using _Tp_elt = typename shared_ptr<_Tp>::element_type;
+16535:       return less<_Tp_elt*>()(nullptr, __a.get());
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     inline bool
+16535:     operator<=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
+16535:     { return !(__b < __a); }
+16535: 
+16535:   template<typename _Tp>
+16535:     inline bool
+16535:     operator<=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
+16535:     { return !(nullptr < __a); }
+16535: 
+16535:   template<typename _Tp>
+16535:     inline bool
+16535:     operator<=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
+16535:     { return !(__a < nullptr); }
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     inline bool
+16535:     operator>(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
+16535:     { return (__b < __a); }
+16535: 
+16535:   template<typename _Tp>
+16535:     inline bool
+16535:     operator>(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
+16535:     { return nullptr < __a; }
+16535: 
+16535:   template<typename _Tp>
+16535:     inline bool
+16535:     operator>(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
+16535:     { return __a < nullptr; }
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     inline bool
+16535:     operator>=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept
+16535:     { return !(__a < __b); }
+16535: 
+16535:   template<typename _Tp>
+16535:     inline bool
+16535:     operator>=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept
+16535:     { return !(__a < nullptr); }
+16535: 
+16535:   template<typename _Tp>
+16535:     inline bool
+16535:     operator>=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept
+16535:     { return !(nullptr < __a); }
+16535: 
+16535:   template<typename _Tp>
+16535:     struct less<shared_ptr<_Tp>> : public _Sp_less<shared_ptr<_Tp>>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline void
+16535:     swap(shared_ptr<_Tp>& __a, shared_ptr<_Tp>& __b) noexcept
+16535:     { __a.swap(__b); }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     inline shared_ptr<_Tp>
+16535:     static_pointer_cast(const shared_ptr<_Up>& __r) noexcept
+16535:     {
+16535:       using _Sp = shared_ptr<_Tp>;
+16535:       return _Sp(__r, static_cast<typename _Sp::element_type*>(__r.get()));
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     inline shared_ptr<_Tp>
+16535:     const_pointer_cast(const shared_ptr<_Up>& __r) noexcept
+16535:     {
+16535:       using _Sp = shared_ptr<_Tp>;
+16535:       return _Sp(__r, const_cast<typename _Sp::element_type*>(__r.get()));
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Up>
+16535:     inline shared_ptr<_Tp>
+16535:     dynamic_pointer_cast(const shared_ptr<_Up>& __r) noexcept
+16535:     {
+16535:       using _Sp = shared_ptr<_Tp>;
+16535:       if (auto* __p = dynamic_cast<typename _Sp::element_type*>(__r.get()))
+16535:  return _Sp(__r, __p);
+16535:       return _Sp();
+16535:     }
+16535: # 534 "/usr/include/c++/8/bits/shared_ptr.h" 3
+16535:   template<typename _Tp>
+16535:     class weak_ptr : public __weak_ptr<_Tp>
+16535:     {
+16535:       template<typename _Arg>
+16535:  using _Constructible = typename enable_if<
+16535:    is_constructible<__weak_ptr<_Tp>, _Arg>::value
+16535:  >::type;
+16535: 
+16535:       template<typename _Arg>
+16535:  using _Assignable = typename enable_if<
+16535:    is_assignable<__weak_ptr<_Tp>&, _Arg>::value, weak_ptr&
+16535:  >::type;
+16535: 
+16535:     public:
+16535:       constexpr weak_ptr() noexcept = default;
+16535: 
+16535:       template<typename _Yp,
+16535:         typename = _Constructible<const shared_ptr<_Yp>&>>
+16535:  weak_ptr(const shared_ptr<_Yp>& __r) noexcept
+16535:  : __weak_ptr<_Tp>(__r) { }
+16535: 
+16535:       weak_ptr(const weak_ptr&) noexcept = default;
+16535: 
+16535:       template<typename _Yp, typename = _Constructible<const weak_ptr<_Yp>&>>
+16535:  weak_ptr(const weak_ptr<_Yp>& __r) noexcept
+16535:  : __weak_ptr<_Tp>(__r) { }
+16535: 
+16535:       weak_ptr(weak_ptr&&) noexcept = default;
+16535: 
+16535:       template<typename _Yp, typename = _Constructible<weak_ptr<_Yp>>>
+16535:  weak_ptr(weak_ptr<_Yp>&& __r) noexcept
+16535:  : __weak_ptr<_Tp>(std::move(__r)) { }
+16535: 
+16535:       weak_ptr&
+16535:       operator=(const weak_ptr& __r) noexcept = default;
+16535: 
+16535:       template<typename _Yp>
+16535:  _Assignable<const weak_ptr<_Yp>&>
+16535:  operator=(const weak_ptr<_Yp>& __r) noexcept
+16535:  {
+16535:    this->__weak_ptr<_Tp>::operator=(__r);
+16535:    return *this;
+16535:  }
+16535: 
+16535:       template<typename _Yp>
+16535:  _Assignable<const shared_ptr<_Yp>&>
+16535:  operator=(const shared_ptr<_Yp>& __r) noexcept
+16535:  {
+16535:    this->__weak_ptr<_Tp>::operator=(__r);
+16535:    return *this;
+16535:  }
+16535: 
+16535:       weak_ptr&
+16535:       operator=(weak_ptr&& __r) noexcept = default;
+16535: 
+16535:       template<typename _Yp>
+16535:  _Assignable<weak_ptr<_Yp>>
+16535:  operator=(weak_ptr<_Yp>&& __r) noexcept
+16535:  {
+16535:    this->__weak_ptr<_Tp>::operator=(std::move(__r));
+16535:    return *this;
+16535:  }
+16535: 
+16535:       shared_ptr<_Tp>
+16535:       lock() const noexcept
+16535:       { return shared_ptr<_Tp>(*this, std::nothrow); }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline void
+16535:     swap(weak_ptr<_Tp>& __a, weak_ptr<_Tp>& __b) noexcept
+16535:     { __a.swap(__b); }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp = void>
+16535:     struct owner_less;
+16535: 
+16535: 
+16535:   template<>
+16535:     struct owner_less<void> : _Sp_owner_less<void, void>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct owner_less<shared_ptr<_Tp>>
+16535:     : public _Sp_owner_less<shared_ptr<_Tp>, weak_ptr<_Tp>>
+16535:     { };
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct owner_less<weak_ptr<_Tp>>
+16535:     : public _Sp_owner_less<weak_ptr<_Tp>, shared_ptr<_Tp>>
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     class enable_shared_from_this
+16535:     {
+16535:     protected:
+16535:       constexpr enable_shared_from_this() noexcept { }
+16535: 
+16535:       enable_shared_from_this(const enable_shared_from_this&) noexcept { }
+16535: 
+16535:       enable_shared_from_this&
+16535:       operator=(const enable_shared_from_this&) noexcept
+16535:       { return *this; }
+16535: 
+16535:       ~enable_shared_from_this() { }
+16535: 
+16535:     public:
+16535:       shared_ptr<_Tp>
+16535:       shared_from_this()
+16535:       { return shared_ptr<_Tp>(this->_M_weak_this); }
+16535: 
+16535:       shared_ptr<const _Tp>
+16535:       shared_from_this() const
+16535:       { return shared_ptr<const _Tp>(this->_M_weak_this); }
+16535: 
+16535: 
+16535: 
+16535:       weak_ptr<_Tp>
+16535:       weak_from_this() noexcept
+16535:       { return this->_M_weak_this; }
+16535: 
+16535:       weak_ptr<const _Tp>
+16535:       weak_from_this() const noexcept
+16535:       { return this->_M_weak_this; }
+16535: 
+16535: 
+16535:     private:
+16535:       template<typename _Tp1>
+16535:  void
+16535:  _M_weak_assign(_Tp1* __p, const __shared_count<>& __n) const noexcept
+16535:  { _M_weak_this._M_assign(__p, __n); }
+16535: 
+16535: 
+16535:       friend const enable_shared_from_this*
+16535:       __enable_shared_from_this_base(const __shared_count<>&,
+16535:          const enable_shared_from_this* __p)
+16535:       { return __p; }
+16535: 
+16535:       template<typename, _Lock_policy>
+16535:  friend class __shared_ptr;
+16535: 
+16535:       mutable weak_ptr<_Tp> _M_weak_this;
+16535:     };
+16535: # 701 "/usr/include/c++/8/bits/shared_ptr.h" 3
+16535:   template<typename _Tp, typename _Alloc, typename... _Args>
+16535:     inline shared_ptr<_Tp>
+16535:     allocate_shared(const _Alloc& __a, _Args&&... __args)
+16535:     {
+16535:       return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a},
+16535:         std::forward<_Args>(__args)...);
+16535:     }
+16535: # 716 "/usr/include/c++/8/bits/shared_ptr.h" 3
+16535:   template<typename _Tp, typename... _Args>
+16535:     inline shared_ptr<_Tp>
+16535:     make_shared(_Args&&... __args)
+16535:     {
+16535:       typedef typename std::remove_cv<_Tp>::type _Tp_nc;
+16535:       return std::allocate_shared<_Tp>(std::allocator<_Tp_nc>(),
+16535:            std::forward<_Args>(__args)...);
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct hash<shared_ptr<_Tp>>
+16535:     : public __hash_base<size_t, shared_ptr<_Tp>>
+16535:     {
+16535:       size_t
+16535:       operator()(const shared_ptr<_Tp>& __s) const noexcept
+16535:       {
+16535:  return std::hash<typename shared_ptr<_Tp>::element_type*>()(__s.get());
+16535:       }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 82 "/usr/include/c++/8/memory" 2 3
+16535: # 1 "/usr/include/c++/8/bits/shared_ptr_atomic.h" 1 3
+16535: # 33 "/usr/include/c++/8/bits/shared_ptr_atomic.h" 3
+16535: # 1 "/usr/include/c++/8/bits/atomic_base.h" 1 3
+16535: # 33 "/usr/include/c++/8/bits/atomic_base.h" 3
+16535:        
+16535: # 34 "/usr/include/c++/8/bits/atomic_base.h" 3
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/atomic_lockfree_defines.h" 1 3
+16535: # 33 "/usr/include/c++/8/bits/atomic_lockfree_defines.h" 3
+16535:        
+16535: # 34 "/usr/include/c++/8/bits/atomic_lockfree_defines.h" 3
+16535: # 38 "/usr/include/c++/8/bits/atomic_base.h" 2 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 55 "/usr/include/c++/8/bits/atomic_base.h" 3
+16535:   typedef enum memory_order
+16535:     {
+16535:       memory_order_relaxed,
+16535:       memory_order_consume,
+16535:       memory_order_acquire,
+16535:       memory_order_release,
+16535:       memory_order_acq_rel,
+16535:       memory_order_seq_cst
+16535:     } memory_order;
+16535: 
+16535:   enum __memory_order_modifier
+16535:     {
+16535:       __memory_order_mask = 0x0ffff,
+16535:       __memory_order_modifier_mask = 0xffff0000,
+16535:       __memory_order_hle_acquire = 0x10000,
+16535:       __memory_order_hle_release = 0x20000
+16535:     };
+16535: 
+16535:   constexpr memory_order
+16535:   operator|(memory_order __m, __memory_order_modifier __mod)
+16535:   {
+16535:     return memory_order(__m | int(__mod));
+16535:   }
+16535: 
+16535:   constexpr memory_order
+16535:   operator&(memory_order __m, __memory_order_modifier __mod)
+16535:   {
+16535:     return memory_order(__m & int(__mod));
+16535:   }
+16535: 
+16535: 
+16535:   constexpr memory_order
+16535:   __cmpexch_failure_order2(memory_order __m) noexcept
+16535:   {
+16535:     return __m == memory_order_acq_rel ? memory_order_acquire
+16535:       : __m == memory_order_release ? memory_order_relaxed : __m;
+16535:   }
+16535: 
+16535:   constexpr memory_order
+16535:   __cmpexch_failure_order(memory_order __m) noexcept
+16535:   {
+16535:     return memory_order(__cmpexch_failure_order2(__m & __memory_order_mask)
+16535:       | (__m & __memory_order_modifier_mask));
+16535:   }
+16535: 
+16535:   inline __attribute__((__always_inline__)) void
+16535:   atomic_thread_fence(memory_order __m) noexcept
+16535:   { __atomic_thread_fence(__m); }
+16535: 
+16535:   inline __attribute__((__always_inline__)) void
+16535:   atomic_signal_fence(memory_order __m) noexcept
+16535:   { __atomic_signal_fence(__m); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline _Tp
+16535:     kill_dependency(_Tp __y) noexcept
+16535:     {
+16535:       _Tp __ret(__y);
+16535:       return __ret;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _IntTp>
+16535:     struct __atomic_base;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct atomic;
+16535: 
+16535:   template<typename _Tp>
+16535:     struct atomic<_Tp*>;
+16535: 
+16535: 
+16535: 
+16535:     typedef bool __atomic_flag_data_type;
+16535: # 148 "/usr/include/c++/8/bits/atomic_base.h" 3
+16535:   extern "C" {
+16535: 
+16535:   struct __atomic_flag_base
+16535:   {
+16535:     __atomic_flag_data_type _M_i;
+16535:   };
+16535: 
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   struct atomic_flag : public __atomic_flag_base
+16535:   {
+16535:     atomic_flag() noexcept = default;
+16535:     ~atomic_flag() noexcept = default;
+16535:     atomic_flag(const atomic_flag&) = delete;
+16535:     atomic_flag& operator=(const atomic_flag&) = delete;
+16535:     atomic_flag& operator=(const atomic_flag&) volatile = delete;
+16535: 
+16535: 
+16535:     constexpr atomic_flag(bool __i) noexcept
+16535:       : __atomic_flag_base{ _S_init(__i) }
+16535:     { }
+16535: 
+16535:     inline __attribute__((__always_inline__)) bool
+16535:     test_and_set(memory_order __m = memory_order_seq_cst) noexcept
+16535:     {
+16535:       return __atomic_test_and_set (&_M_i, __m);
+16535:     }
+16535: 
+16535:     inline __attribute__((__always_inline__)) bool
+16535:     test_and_set(memory_order __m = memory_order_seq_cst) volatile noexcept
+16535:     {
+16535:       return __atomic_test_and_set (&_M_i, __m);
+16535:     }
+16535: 
+16535:     inline __attribute__((__always_inline__)) void
+16535:     clear(memory_order __m = memory_order_seq_cst) noexcept
+16535:     {
+16535:       memory_order __b = __m & __memory_order_mask;
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       __atomic_clear (&_M_i, __m);
+16535:     }
+16535: 
+16535:     inline __attribute__((__always_inline__)) void
+16535:     clear(memory_order __m = memory_order_seq_cst) volatile noexcept
+16535:     {
+16535:       memory_order __b = __m & __memory_order_mask;
+16535:       ;
+16535:       ;
+16535:       ;
+16535: 
+16535:       __atomic_clear (&_M_i, __m);
+16535:     }
+16535: 
+16535:   private:
+16535:     static constexpr __atomic_flag_data_type
+16535:     _S_init(bool __i)
+16535:     { return __i ? 1 : 0; }
+16535:   };
+16535: # 237 "/usr/include/c++/8/bits/atomic_base.h" 3
+16535:   template<typename _ITp>
+16535:     struct __atomic_base
+16535:     {
+16535:     private:
+16535:       typedef _ITp __int_type;
+16535: 
+16535:       static constexpr int _S_alignment =
+16535:  sizeof(_ITp) > alignof(_ITp) ? sizeof(_ITp) : alignof(_ITp);
+16535: 
+16535:       alignas(_S_alignment) __int_type _M_i;
+16535: 
+16535:     public:
+16535:       __atomic_base() noexcept = default;
+16535:       ~__atomic_base() noexcept = default;
+16535:       __atomic_base(const __atomic_base&) = delete;
+16535:       __atomic_base& operator=(const __atomic_base&) = delete;
+16535:       __atomic_base& operator=(const __atomic_base&) volatile = delete;
+16535: 
+16535: 
+16535:       constexpr __atomic_base(__int_type __i) noexcept : _M_i (__i) { }
+16535: 
+16535:       operator __int_type() const noexcept
+16535:       { return load(); }
+16535: 
+16535:       operator __int_type() const volatile noexcept
+16535:       { return load(); }
+16535: 
+16535:       __int_type
+16535:       operator=(__int_type __i) noexcept
+16535:       {
+16535:  store(__i);
+16535:  return __i;
+16535:       }
+16535: 
+16535:       __int_type
+16535:       operator=(__int_type __i) volatile noexcept
+16535:       {
+16535:  store(__i);
+16535:  return __i;
+16535:       }
+16535: 
+16535:       __int_type
+16535:       operator++(int) noexcept
+16535:       { return fetch_add(1); }
+16535: 
+16535:       __int_type
+16535:       operator++(int) volatile noexcept
+16535:       { return fetch_add(1); }
+16535: 
+16535:       __int_type
+16535:       operator--(int) noexcept
+16535:       { return fetch_sub(1); }
+16535: 
+16535:       __int_type
+16535:       operator--(int) volatile noexcept
+16535:       { return fetch_sub(1); }
+16535: 
+16535:       __int_type
+16535:       operator++() noexcept
+16535:       { return __atomic_add_fetch(&_M_i, 1, memory_order_seq_cst); }
+16535: 
+16535:       __int_type
+16535:       operator++() volatile noexcept
+16535:       { return __atomic_add_fetch(&_M_i, 1, memory_order_seq_cst); }
+16535: 
+16535:       __int_type
+16535:       operator--() noexcept
+16535:       { return __atomic_sub_fetch(&_M_i, 1, memory_order_seq_cst); }
+16535: 
+16535:       __int_type
+16535:       operator--() volatile noexcept
+16535:       { return __atomic_sub_fetch(&_M_i, 1, memory_order_seq_cst); }
+16535: 
+16535:       __int_type
+16535:       operator+=(__int_type __i) noexcept
+16535:       { return __atomic_add_fetch(&_M_i, __i, memory_order_seq_cst); }
+16535: 
+16535:       __int_type
+16535:       operator+=(__int_type __i) volatile noexcept
+16535:       { return __atomic_add_fetch(&_M_i, __i, memory_order_seq_cst); }
+16535: 
+16535:       __int_type
+16535:       operator-=(__int_type __i) noexcept
+16535:       { return __atomic_sub_fetch(&_M_i, __i, memory_order_seq_cst); }
+16535: 
+16535:       __int_type
+16535:       operator-=(__int_type __i) volatile noexcept
+16535:       { return __atomic_sub_fetch(&_M_i, __i, memory_order_seq_cst); }
+16535: 
+16535:       __int_type
+16535:       operator&=(__int_type __i) noexcept
+16535:       { return __atomic_and_fetch(&_M_i, __i, memory_order_seq_cst); }
+16535: 
+16535:       __int_type
+16535:       operator&=(__int_type __i) volatile noexcept
+16535:       { return __atomic_and_fetch(&_M_i, __i, memory_order_seq_cst); }
+16535: 
+16535:       __int_type
+16535:       operator|=(__int_type __i) noexcept
+16535:       { return __atomic_or_fetch(&_M_i, __i, memory_order_seq_cst); }
+16535: 
+16535:       __int_type
+16535:       operator|=(__int_type __i) volatile noexcept
+16535:       { return __atomic_or_fetch(&_M_i, __i, memory_order_seq_cst); }
+16535: 
+16535:       __int_type
+16535:       operator^=(__int_type __i) noexcept
+16535:       { return __atomic_xor_fetch(&_M_i, __i, memory_order_seq_cst); }
+16535: 
+16535:       __int_type
+16535:       operator^=(__int_type __i) volatile noexcept
+16535:       { return __atomic_xor_fetch(&_M_i, __i, memory_order_seq_cst); }
+16535: 
+16535:       bool
+16535:       is_lock_free() const noexcept
+16535:       {
+16535: 
+16535:  return __atomic_is_lock_free(sizeof(_M_i),
+16535:      reinterpret_cast<void *>(-__alignof(_M_i)));
+16535:       }
+16535: 
+16535:       bool
+16535:       is_lock_free() const volatile noexcept
+16535:       {
+16535: 
+16535:  return __atomic_is_lock_free(sizeof(_M_i),
+16535:      reinterpret_cast<void *>(-__alignof(_M_i)));
+16535:       }
+16535: 
+16535:       inline __attribute__((__always_inline__)) void
+16535:       store(__int_type __i, memory_order __m = memory_order_seq_cst) noexcept
+16535:       {
+16535:  memory_order __b = __m & __memory_order_mask;
+16535:  ;
+16535:  ;
+16535:  ;
+16535: 
+16535:  __atomic_store_n(&_M_i, __i, __m);
+16535:       }
+16535: 
+16535:       inline __attribute__((__always_inline__)) void
+16535:       store(__int_type __i,
+16535:      memory_order __m = memory_order_seq_cst) volatile noexcept
+16535:       {
+16535:  memory_order __b = __m & __memory_order_mask;
+16535:  ;
+16535:  ;
+16535:  ;
+16535: 
+16535:  __atomic_store_n(&_M_i, __i, __m);
+16535:       }
+16535: 
+16535:       inline __attribute__((__always_inline__)) __int_type
+16535:       load(memory_order __m = memory_order_seq_cst) const noexcept
+16535:       {
+16535:  memory_order __b = __m & __memory_order_mask;
+16535:  ;
+16535:  ;
+16535: 
+16535:  return __atomic_load_n(&_M_i, __m);
+16535:       }
+16535: 
+16535:       inline __attribute__((__always_inline__)) __int_type
+16535:       load(memory_order __m = memory_order_seq_cst) const volatile noexcept
+16535:       {
+16535:  memory_order __b = __m & __memory_order_mask;
+16535:  ;
+16535:  ;
+16535: 
+16535:  return __atomic_load_n(&_M_i, __m);
+16535:       }
+16535: 
+16535:       inline __attribute__((__always_inline__)) __int_type
+16535:       exchange(__int_type __i,
+16535:         memory_order __m = memory_order_seq_cst) noexcept
+16535:       {
+16535:  return __atomic_exchange_n(&_M_i, __i, __m);
+16535:       }
+16535: 
+16535: 
+16535:       inline __attribute__((__always_inline__)) __int_type
+16535:       exchange(__int_type __i,
+16535:         memory_order __m = memory_order_seq_cst) volatile noexcept
+16535:       {
+16535:  return __atomic_exchange_n(&_M_i, __i, __m);
+16535:       }
+16535: 
+16535:       inline __attribute__((__always_inline__)) bool
+16535:       compare_exchange_weak(__int_type& __i1, __int_type __i2,
+16535:        memory_order __m1, memory_order __m2) noexcept
+16535:       {
+16535:  memory_order __b2 = __m2 & __memory_order_mask;
+16535:  memory_order __b1 = __m1 & __memory_order_mask;
+16535:  ;
+16535:  ;
+16535:  ;
+16535: 
+16535:  return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, __m1, __m2);
+16535:       }
+16535: 
+16535:       inline __attribute__((__always_inline__)) bool
+16535:       compare_exchange_weak(__int_type& __i1, __int_type __i2,
+16535:        memory_order __m1,
+16535:        memory_order __m2) volatile noexcept
+16535:       {
+16535:  memory_order __b2 = __m2 & __memory_order_mask;
+16535:  memory_order __b1 = __m1 & __memory_order_mask;
+16535:  ;
+16535:  ;
+16535:  ;
+16535: 
+16535:  return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, __m1, __m2);
+16535:       }
+16535: 
+16535:       inline __attribute__((__always_inline__)) bool
+16535:       compare_exchange_weak(__int_type& __i1, __int_type __i2,
+16535:        memory_order __m = memory_order_seq_cst) noexcept
+16535:       {
+16535:  return compare_exchange_weak(__i1, __i2, __m,
+16535:          __cmpexch_failure_order(__m));
+16535:       }
+16535: 
+16535:       inline __attribute__((__always_inline__)) bool
+16535:       compare_exchange_weak(__int_type& __i1, __int_type __i2,
+16535:      memory_order __m = memory_order_seq_cst) volatile noexcept
+16535:       {
+16535:  return compare_exchange_weak(__i1, __i2, __m,
+16535:          __cmpexch_failure_order(__m));
+16535:       }
+16535: 
+16535:       inline __attribute__((__always_inline__)) bool
+16535:       compare_exchange_strong(__int_type& __i1, __int_type __i2,
+16535:          memory_order __m1, memory_order __m2) noexcept
+16535:       {
+16535:  memory_order __b2 = __m2 & __memory_order_mask;
+16535:  memory_order __b1 = __m1 & __memory_order_mask;
+16535:  ;
+16535:  ;
+16535:  ;
+16535: 
+16535:  return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, __m1, __m2);
+16535:       }
+16535: 
+16535:       inline __attribute__((__always_inline__)) bool
+16535:       compare_exchange_strong(__int_type& __i1, __int_type __i2,
+16535:          memory_order __m1,
+16535:          memory_order __m2) volatile noexcept
+16535:       {
+16535:  memory_order __b2 = __m2 & __memory_order_mask;
+16535:  memory_order __b1 = __m1 & __memory_order_mask;
+16535: 
+16535:  ;
+16535:  ;
+16535:  ;
+16535: 
+16535:  return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, __m1, __m2);
+16535:       }
+16535: 
+16535:       inline __attribute__((__always_inline__)) bool
+16535:       compare_exchange_strong(__int_type& __i1, __int_type __i2,
+16535:          memory_order __m = memory_order_seq_cst) noexcept
+16535:       {
+16535:  return compare_exchange_strong(__i1, __i2, __m,
+16535:            __cmpexch_failure_order(__m));
+16535:       }
+16535: 
+16535:       inline __attribute__((__always_inline__)) bool
+16535:       compare_exchange_strong(__int_type& __i1, __int_type __i2,
+16535:    memory_order __m = memory_order_seq_cst) volatile noexcept
+16535:       {
+16535:  return compare_exchange_strong(__i1, __i2, __m,
+16535:            __cmpexch_failure_order(__m));
+16535:       }
+16535: 
+16535:       inline __attribute__((__always_inline__)) __int_type
+16535:       fetch_add(__int_type __i,
+16535:   memory_order __m = memory_order_seq_cst) noexcept
+16535:       { return __atomic_fetch_add(&_M_i, __i, __m); }
+16535: 
+16535:       inline __attribute__((__always_inline__)) __int_type
+16535:       fetch_add(__int_type __i,
+16535:   memory_order __m = memory_order_seq_cst) volatile noexcept
+16535:       { return __atomic_fetch_add(&_M_i, __i, __m); }
+16535: 
+16535:       inline __attribute__((__always_inline__)) __int_type
+16535:       fetch_sub(__int_type __i,
+16535:   memory_order __m = memory_order_seq_cst) noexcept
+16535:       { return __atomic_fetch_sub(&_M_i, __i, __m); }
+16535: 
+16535:       inline __attribute__((__always_inline__)) __int_type
+16535:       fetch_sub(__int_type __i,
+16535:   memory_order __m = memory_order_seq_cst) volatile noexcept
+16535:       { return __atomic_fetch_sub(&_M_i, __i, __m); }
+16535: 
+16535:       inline __attribute__((__always_inline__)) __int_type
+16535:       fetch_and(__int_type __i,
+16535:   memory_order __m = memory_order_seq_cst) noexcept
+16535:       { return __atomic_fetch_and(&_M_i, __i, __m); }
+16535: 
+16535:       inline __attribute__((__always_inline__)) __int_type
+16535:       fetch_and(__int_type __i,
+16535:   memory_order __m = memory_order_seq_cst) volatile noexcept
+16535:       { return __atomic_fetch_and(&_M_i, __i, __m); }
+16535: 
+16535:       inline __attribute__((__always_inline__)) __int_type
+16535:       fetch_or(__int_type __i,
+16535:         memory_order __m = memory_order_seq_cst) noexcept
+16535:       { return __atomic_fetch_or(&_M_i, __i, __m); }
+16535: 
+16535:       inline __attribute__((__always_inline__)) __int_type
+16535:       fetch_or(__int_type __i,
+16535:         memory_order __m = memory_order_seq_cst) volatile noexcept
+16535:       { return __atomic_fetch_or(&_M_i, __i, __m); }
+16535: 
+16535:       inline __attribute__((__always_inline__)) __int_type
+16535:       fetch_xor(__int_type __i,
+16535:   memory_order __m = memory_order_seq_cst) noexcept
+16535:       { return __atomic_fetch_xor(&_M_i, __i, __m); }
+16535: 
+16535:       inline __attribute__((__always_inline__)) __int_type
+16535:       fetch_xor(__int_type __i,
+16535:   memory_order __m = memory_order_seq_cst) volatile noexcept
+16535:       { return __atomic_fetch_xor(&_M_i, __i, __m); }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _PTp>
+16535:     struct __atomic_base<_PTp*>
+16535:     {
+16535:     private:
+16535:       typedef _PTp* __pointer_type;
+16535: 
+16535:       __pointer_type _M_p;
+16535: 
+16535: 
+16535:       constexpr ptrdiff_t
+16535:       _M_type_size(ptrdiff_t __d) const { return __d * sizeof(_PTp); }
+16535: 
+16535:       constexpr ptrdiff_t
+16535:       _M_type_size(ptrdiff_t __d) const volatile { return __d * sizeof(_PTp); }
+16535: 
+16535:     public:
+16535:       __atomic_base() noexcept = default;
+16535:       ~__atomic_base() noexcept = default;
+16535:       __atomic_base(const __atomic_base&) = delete;
+16535:       __atomic_base& operator=(const __atomic_base&) = delete;
+16535:       __atomic_base& operator=(const __atomic_base&) volatile = delete;
+16535: 
+16535: 
+16535:       constexpr __atomic_base(__pointer_type __p) noexcept : _M_p (__p) { }
+16535: 
+16535:       operator __pointer_type() const noexcept
+16535:       { return load(); }
+16535: 
+16535:       operator __pointer_type() const volatile noexcept
+16535:       { return load(); }
+16535: 
+16535:       __pointer_type
+16535:       operator=(__pointer_type __p) noexcept
+16535:       {
+16535:  store(__p);
+16535:  return __p;
+16535:       }
+16535: 
+16535:       __pointer_type
+16535:       operator=(__pointer_type __p) volatile noexcept
+16535:       {
+16535:  store(__p);
+16535:  return __p;
+16535:       }
+16535: 
+16535:       __pointer_type
+16535:       operator++(int) noexcept
+16535:       { return fetch_add(1); }
+16535: 
+16535:       __pointer_type
+16535:       operator++(int) volatile noexcept
+16535:       { return fetch_add(1); }
+16535: 
+16535:       __pointer_type
+16535:       operator--(int) noexcept
+16535:       { return fetch_sub(1); }
+16535: 
+16535:       __pointer_type
+16535:       operator--(int) volatile noexcept
+16535:       { return fetch_sub(1); }
+16535: 
+16535:       __pointer_type
+16535:       operator++() noexcept
+16535:       { return __atomic_add_fetch(&_M_p, _M_type_size(1),
+16535:       memory_order_seq_cst); }
+16535: 
+16535:       __pointer_type
+16535:       operator++() volatile noexcept
+16535:       { return __atomic_add_fetch(&_M_p, _M_type_size(1),
+16535:       memory_order_seq_cst); }
+16535: 
+16535:       __pointer_type
+16535:       operator--() noexcept
+16535:       { return __atomic_sub_fetch(&_M_p, _M_type_size(1),
+16535:       memory_order_seq_cst); }
+16535: 
+16535:       __pointer_type
+16535:       operator--() volatile noexcept
+16535:       { return __atomic_sub_fetch(&_M_p, _M_type_size(1),
+16535:       memory_order_seq_cst); }
+16535: 
+16535:       __pointer_type
+16535:       operator+=(ptrdiff_t __d) noexcept
+16535:       { return __atomic_add_fetch(&_M_p, _M_type_size(__d),
+16535:       memory_order_seq_cst); }
+16535: 
+16535:       __pointer_type
+16535:       operator+=(ptrdiff_t __d) volatile noexcept
+16535:       { return __atomic_add_fetch(&_M_p, _M_type_size(__d),
+16535:       memory_order_seq_cst); }
+16535: 
+16535:       __pointer_type
+16535:       operator-=(ptrdiff_t __d) noexcept
+16535:       { return __atomic_sub_fetch(&_M_p, _M_type_size(__d),
+16535:       memory_order_seq_cst); }
+16535: 
+16535:       __pointer_type
+16535:       operator-=(ptrdiff_t __d) volatile noexcept
+16535:       { return __atomic_sub_fetch(&_M_p, _M_type_size(__d),
+16535:       memory_order_seq_cst); }
+16535: 
+16535:       bool
+16535:       is_lock_free() const noexcept
+16535:       {
+16535: 
+16535:  return __atomic_is_lock_free(sizeof(_M_p),
+16535:      reinterpret_cast<void *>(-__alignof(_M_p)));
+16535:       }
+16535: 
+16535:       bool
+16535:       is_lock_free() const volatile noexcept
+16535:       {
+16535: 
+16535:  return __atomic_is_lock_free(sizeof(_M_p),
+16535:      reinterpret_cast<void *>(-__alignof(_M_p)));
+16535:       }
+16535: 
+16535:       inline __attribute__((__always_inline__)) void
+16535:       store(__pointer_type __p,
+16535:      memory_order __m = memory_order_seq_cst) noexcept
+16535:       {
+16535:         memory_order __b = __m & __memory_order_mask;
+16535: 
+16535:  ;
+16535:  ;
+16535:  ;
+16535: 
+16535:  __atomic_store_n(&_M_p, __p, __m);
+16535:       }
+16535: 
+16535:       inline __attribute__((__always_inline__)) void
+16535:       store(__pointer_type __p,
+16535:      memory_order __m = memory_order_seq_cst) volatile noexcept
+16535:       {
+16535:  memory_order __b = __m & __memory_order_mask;
+16535:  ;
+16535:  ;
+16535:  ;
+16535: 
+16535:  __atomic_store_n(&_M_p, __p, __m);
+16535:       }
+16535: 
+16535:       inline __attribute__((__always_inline__)) __pointer_type
+16535:       load(memory_order __m = memory_order_seq_cst) const noexcept
+16535:       {
+16535:  memory_order __b = __m & __memory_order_mask;
+16535:  ;
+16535:  ;
+16535: 
+16535:  return __atomic_load_n(&_M_p, __m);
+16535:       }
+16535: 
+16535:       inline __attribute__((__always_inline__)) __pointer_type
+16535:       load(memory_order __m = memory_order_seq_cst) const volatile noexcept
+16535:       {
+16535:  memory_order __b = __m & __memory_order_mask;
+16535:  ;
+16535:  ;
+16535: 
+16535:  return __atomic_load_n(&_M_p, __m);
+16535:       }
+16535: 
+16535:       inline __attribute__((__always_inline__)) __pointer_type
+16535:       exchange(__pointer_type __p,
+16535:         memory_order __m = memory_order_seq_cst) noexcept
+16535:       {
+16535:  return __atomic_exchange_n(&_M_p, __p, __m);
+16535:       }
+16535: 
+16535: 
+16535:       inline __attribute__((__always_inline__)) __pointer_type
+16535:       exchange(__pointer_type __p,
+16535:         memory_order __m = memory_order_seq_cst) volatile noexcept
+16535:       {
+16535:  return __atomic_exchange_n(&_M_p, __p, __m);
+16535:       }
+16535: 
+16535:       inline __attribute__((__always_inline__)) bool
+16535:       compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
+16535:          memory_order __m1,
+16535:          memory_order __m2) noexcept
+16535:       {
+16535:  memory_order __b2 = __m2 & __memory_order_mask;
+16535:  memory_order __b1 = __m1 & __memory_order_mask;
+16535:  ;
+16535:  ;
+16535:  ;
+16535: 
+16535:  return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, __m1, __m2);
+16535:       }
+16535: 
+16535:       inline __attribute__((__always_inline__)) bool
+16535:       compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2,
+16535:          memory_order __m1,
+16535:          memory_order __m2) volatile noexcept
+16535:       {
+16535:  memory_order __b2 = __m2 & __memory_order_mask;
+16535:  memory_order __b1 = __m1 & __memory_order_mask;
+16535: 
+16535:  ;
+16535:  ;
+16535:  ;
+16535: 
+16535:  return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, __m1, __m2);
+16535:       }
+16535: 
+16535:       inline __attribute__((__always_inline__)) __pointer_type
+16535:       fetch_add(ptrdiff_t __d,
+16535:   memory_order __m = memory_order_seq_cst) noexcept
+16535:       { return __atomic_fetch_add(&_M_p, _M_type_size(__d), __m); }
+16535: 
+16535:       inline __attribute__((__always_inline__)) __pointer_type
+16535:       fetch_add(ptrdiff_t __d,
+16535:   memory_order __m = memory_order_seq_cst) volatile noexcept
+16535:       { return __atomic_fetch_add(&_M_p, _M_type_size(__d), __m); }
+16535: 
+16535:       inline __attribute__((__always_inline__)) __pointer_type
+16535:       fetch_sub(ptrdiff_t __d,
+16535:   memory_order __m = memory_order_seq_cst) noexcept
+16535:       { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), __m); }
+16535: 
+16535:       inline __attribute__((__always_inline__)) __pointer_type
+16535:       fetch_sub(ptrdiff_t __d,
+16535:   memory_order __m = memory_order_seq_cst) volatile noexcept
+16535:       { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), __m); }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 34 "/usr/include/c++/8/bits/shared_ptr_atomic.h" 2 3
+16535: 
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   struct _Sp_locker
+16535:   {
+16535:     _Sp_locker(const _Sp_locker&) = delete;
+16535:     _Sp_locker& operator=(const _Sp_locker&) = delete;
+16535: 
+16535: 
+16535:     explicit
+16535:     _Sp_locker(const void*) noexcept;
+16535:     _Sp_locker(const void*, const void*) noexcept;
+16535:     ~_Sp_locker();
+16535: 
+16535:   private:
+16535:     unsigned char _M_key1;
+16535:     unsigned char _M_key2;
+16535: 
+16535: 
+16535: 
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline bool
+16535:     atomic_is_lock_free(const __shared_ptr<_Tp, _Lp>* __p)
+16535:     {
+16535: 
+16535:       return __gthread_active_p() == 0;
+16535: 
+16535: 
+16535: 
+16535:     }
+16535: 
+16535:   template<typename _Tp>
+16535:     inline bool
+16535:     atomic_is_lock_free(const shared_ptr<_Tp>* __p)
+16535:     { return std::atomic_is_lock_free<_Tp, __default_lock_policy>(__p); }
+16535: # 96 "/usr/include/c++/8/bits/shared_ptr_atomic.h" 3
+16535:   template<typename _Tp>
+16535:     inline shared_ptr<_Tp>
+16535:     atomic_load_explicit(const shared_ptr<_Tp>* __p, memory_order)
+16535:     {
+16535:       _Sp_locker __lock{__p};
+16535:       return *__p;
+16535:     }
+16535: 
+16535:   template<typename _Tp>
+16535:     inline shared_ptr<_Tp>
+16535:     atomic_load(const shared_ptr<_Tp>* __p)
+16535:     { return std::atomic_load_explicit(__p, memory_order_seq_cst); }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline __shared_ptr<_Tp, _Lp>
+16535:     atomic_load_explicit(const __shared_ptr<_Tp, _Lp>* __p, memory_order)
+16535:     {
+16535:       _Sp_locker __lock{__p};
+16535:       return *__p;
+16535:     }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline __shared_ptr<_Tp, _Lp>
+16535:     atomic_load(const __shared_ptr<_Tp, _Lp>* __p)
+16535:     { return std::atomic_load_explicit(__p, memory_order_seq_cst); }
+16535: # 132 "/usr/include/c++/8/bits/shared_ptr_atomic.h" 3
+16535:   template<typename _Tp>
+16535:     inline void
+16535:     atomic_store_explicit(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r,
+16535:      memory_order)
+16535:     {
+16535:       _Sp_locker __lock{__p};
+16535:       __p->swap(__r);
+16535:     }
+16535: 
+16535:   template<typename _Tp>
+16535:     inline void
+16535:     atomic_store(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r)
+16535:     { std::atomic_store_explicit(__p, std::move(__r), memory_order_seq_cst); }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline void
+16535:     atomic_store_explicit(__shared_ptr<_Tp, _Lp>* __p,
+16535:      __shared_ptr<_Tp, _Lp> __r,
+16535:      memory_order)
+16535:     {
+16535:       _Sp_locker __lock{__p};
+16535:       __p->swap(__r);
+16535:     }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline void
+16535:     atomic_store(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp> __r)
+16535:     { std::atomic_store_explicit(__p, std::move(__r), memory_order_seq_cst); }
+16535: # 169 "/usr/include/c++/8/bits/shared_ptr_atomic.h" 3
+16535:   template<typename _Tp>
+16535:     inline shared_ptr<_Tp>
+16535:     atomic_exchange_explicit(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r,
+16535:         memory_order)
+16535:     {
+16535:       _Sp_locker __lock{__p};
+16535:       __p->swap(__r);
+16535:       return __r;
+16535:     }
+16535: 
+16535:   template<typename _Tp>
+16535:     inline shared_ptr<_Tp>
+16535:     atomic_exchange(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r)
+16535:     {
+16535:       return std::atomic_exchange_explicit(__p, std::move(__r),
+16535:         memory_order_seq_cst);
+16535:     }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline __shared_ptr<_Tp, _Lp>
+16535:     atomic_exchange_explicit(__shared_ptr<_Tp, _Lp>* __p,
+16535:         __shared_ptr<_Tp, _Lp> __r,
+16535:         memory_order)
+16535:     {
+16535:       _Sp_locker __lock{__p};
+16535:       __p->swap(__r);
+16535:       return __r;
+16535:     }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline __shared_ptr<_Tp, _Lp>
+16535:     atomic_exchange(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp> __r)
+16535:     {
+16535:       return std::atomic_exchange_explicit(__p, std::move(__r),
+16535:         memory_order_seq_cst);
+16535:     }
+16535: # 218 "/usr/include/c++/8/bits/shared_ptr_atomic.h" 3
+16535:   template<typename _Tp>
+16535:     bool
+16535:     atomic_compare_exchange_strong_explicit(shared_ptr<_Tp>* __p,
+16535:          shared_ptr<_Tp>* __v,
+16535:          shared_ptr<_Tp> __w,
+16535:          memory_order,
+16535:          memory_order)
+16535:     {
+16535:       shared_ptr<_Tp> __x;
+16535:       _Sp_locker __lock{__p, __v};
+16535:       owner_less<shared_ptr<_Tp>> __less;
+16535:       if (*__p == *__v && !__less(*__p, *__v) && !__less(*__v, *__p))
+16535:  {
+16535:    __x = std::move(*__p);
+16535:    *__p = std::move(__w);
+16535:    return true;
+16535:  }
+16535:       __x = std::move(*__v);
+16535:       *__v = *__p;
+16535:       return false;
+16535:     }
+16535: 
+16535:   template<typename _Tp>
+16535:     inline bool
+16535:     atomic_compare_exchange_strong(shared_ptr<_Tp>* __p, shared_ptr<_Tp>* __v,
+16535:      shared_ptr<_Tp> __w)
+16535:     {
+16535:       return std::atomic_compare_exchange_strong_explicit(__p, __v,
+16535:    std::move(__w), memory_order_seq_cst, memory_order_seq_cst);
+16535:     }
+16535: 
+16535:   template<typename _Tp>
+16535:     inline bool
+16535:     atomic_compare_exchange_weak_explicit(shared_ptr<_Tp>* __p,
+16535:        shared_ptr<_Tp>* __v,
+16535:        shared_ptr<_Tp> __w,
+16535:        memory_order __success,
+16535:        memory_order __failure)
+16535:     {
+16535:       return std::atomic_compare_exchange_strong_explicit(__p, __v,
+16535:    std::move(__w), __success, __failure);
+16535:     }
+16535: 
+16535:   template<typename _Tp>
+16535:     inline bool
+16535:     atomic_compare_exchange_weak(shared_ptr<_Tp>* __p, shared_ptr<_Tp>* __v,
+16535:      shared_ptr<_Tp> __w)
+16535:     {
+16535:       return std::atomic_compare_exchange_weak_explicit(__p, __v,
+16535:    std::move(__w), memory_order_seq_cst, memory_order_seq_cst);
+16535:     }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     bool
+16535:     atomic_compare_exchange_strong_explicit(__shared_ptr<_Tp, _Lp>* __p,
+16535:          __shared_ptr<_Tp, _Lp>* __v,
+16535:          __shared_ptr<_Tp, _Lp> __w,
+16535:          memory_order,
+16535:          memory_order)
+16535:     {
+16535:       __shared_ptr<_Tp, _Lp> __x;
+16535:       _Sp_locker __lock{__p, __v};
+16535:       owner_less<__shared_ptr<_Tp, _Lp>> __less;
+16535:       if (*__p == *__v && !__less(*__p, *__v) && !__less(*__v, *__p))
+16535:  {
+16535:    __x = std::move(*__p);
+16535:    *__p = std::move(__w);
+16535:    return true;
+16535:  }
+16535:       __x = std::move(*__v);
+16535:       *__v = *__p;
+16535:       return false;
+16535:     }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline bool
+16535:     atomic_compare_exchange_strong(__shared_ptr<_Tp, _Lp>* __p,
+16535:        __shared_ptr<_Tp, _Lp>* __v,
+16535:        __shared_ptr<_Tp, _Lp> __w)
+16535:     {
+16535:       return std::atomic_compare_exchange_strong_explicit(__p, __v,
+16535:    std::move(__w), memory_order_seq_cst, memory_order_seq_cst);
+16535:     }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline bool
+16535:     atomic_compare_exchange_weak_explicit(__shared_ptr<_Tp, _Lp>* __p,
+16535:        __shared_ptr<_Tp, _Lp>* __v,
+16535:        __shared_ptr<_Tp, _Lp> __w,
+16535:        memory_order __success,
+16535:        memory_order __failure)
+16535:     {
+16535:       return std::atomic_compare_exchange_strong_explicit(__p, __v,
+16535:    std::move(__w), __success, __failure);
+16535:     }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:     inline bool
+16535:     atomic_compare_exchange_weak(__shared_ptr<_Tp, _Lp>* __p,
+16535:      __shared_ptr<_Tp, _Lp>* __v,
+16535:      __shared_ptr<_Tp, _Lp> __w)
+16535:     {
+16535:       return std::atomic_compare_exchange_weak_explicit(__p, __v,
+16535:    std::move(__w), memory_order_seq_cst, memory_order_seq_cst);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 83 "/usr/include/c++/8/memory" 2 3
+16535: 
+16535: # 1 "/usr/include/c++/8/backward/auto_ptr.h" 1 3
+16535: # 36 "/usr/include/c++/8/backward/auto_ptr.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 47 "/usr/include/c++/8/backward/auto_ptr.h" 3
+16535:   template<typename _Tp1>
+16535:     struct auto_ptr_ref
+16535:     {
+16535:       _Tp1* _M_ptr;
+16535: 
+16535:       explicit
+16535:       auto_ptr_ref(_Tp1* __p): _M_ptr(__p) { }
+16535:     } __attribute__ ((__deprecated__));
+16535: 
+16535: #pragma GCC diagnostic push
+16535: #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+16535: # 88 "/usr/include/c++/8/backward/auto_ptr.h" 3
+16535:   template<typename _Tp>
+16535:     class auto_ptr
+16535:     {
+16535:     private:
+16535:       _Tp* _M_ptr;
+16535: 
+16535:     public:
+16535: 
+16535:       typedef _Tp element_type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       explicit
+16535:       auto_ptr(element_type* __p = 0) throw() : _M_ptr(__p) { }
+16535: # 114 "/usr/include/c++/8/backward/auto_ptr.h" 3
+16535:       auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) { }
+16535: # 126 "/usr/include/c++/8/backward/auto_ptr.h" 3
+16535:       template<typename _Tp1>
+16535:         auto_ptr(auto_ptr<_Tp1>& __a) throw() : _M_ptr(__a.release()) { }
+16535: # 137 "/usr/include/c++/8/backward/auto_ptr.h" 3
+16535:       auto_ptr&
+16535:       operator=(auto_ptr& __a) throw()
+16535:       {
+16535:  reset(__a.release());
+16535:  return *this;
+16535:       }
+16535: # 154 "/usr/include/c++/8/backward/auto_ptr.h" 3
+16535:       template<typename _Tp1>
+16535:         auto_ptr&
+16535:         operator=(auto_ptr<_Tp1>& __a) throw()
+16535:         {
+16535:    reset(__a.release());
+16535:    return *this;
+16535:  }
+16535: # 172 "/usr/include/c++/8/backward/auto_ptr.h" 3
+16535:       ~auto_ptr() { delete _M_ptr; }
+16535: # 182 "/usr/include/c++/8/backward/auto_ptr.h" 3
+16535:       element_type&
+16535:       operator*() const throw()
+16535:       {
+16535:  ;
+16535:  return *_M_ptr;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       element_type*
+16535:       operator->() const throw()
+16535:       {
+16535:  ;
+16535:  return _M_ptr;
+16535:       }
+16535: # 212 "/usr/include/c++/8/backward/auto_ptr.h" 3
+16535:       element_type*
+16535:       get() const throw() { return _M_ptr; }
+16535: # 226 "/usr/include/c++/8/backward/auto_ptr.h" 3
+16535:       element_type*
+16535:       release() throw()
+16535:       {
+16535:  element_type* __tmp = _M_ptr;
+16535:  _M_ptr = 0;
+16535:  return __tmp;
+16535:       }
+16535: # 241 "/usr/include/c++/8/backward/auto_ptr.h" 3
+16535:       void
+16535:       reset(element_type* __p = 0) throw()
+16535:       {
+16535:  if (__p != _M_ptr)
+16535:    {
+16535:      delete _M_ptr;
+16535:      _M_ptr = __p;
+16535:    }
+16535:       }
+16535: # 266 "/usr/include/c++/8/backward/auto_ptr.h" 3
+16535:       auto_ptr(auto_ptr_ref<element_type> __ref) throw()
+16535:       : _M_ptr(__ref._M_ptr) { }
+16535: 
+16535:       auto_ptr&
+16535:       operator=(auto_ptr_ref<element_type> __ref) throw()
+16535:       {
+16535:  if (__ref._M_ptr != this->get())
+16535:    {
+16535:      delete _M_ptr;
+16535:      _M_ptr = __ref._M_ptr;
+16535:    }
+16535:  return *this;
+16535:       }
+16535: 
+16535:       template<typename _Tp1>
+16535:         operator auto_ptr_ref<_Tp1>() throw()
+16535:         { return auto_ptr_ref<_Tp1>(this->release()); }
+16535: 
+16535:       template<typename _Tp1>
+16535:         operator auto_ptr<_Tp1>() throw()
+16535:         { return auto_ptr<_Tp1>(this->release()); }
+16535:     } __attribute__ ((__deprecated__));
+16535: 
+16535: 
+16535: 
+16535:   template<>
+16535:     class auto_ptr<void>
+16535:     {
+16535:     public:
+16535:       typedef void element_type;
+16535:     } __attribute__ ((__deprecated__));
+16535: 
+16535: 
+16535:   template<_Lock_policy _Lp>
+16535:   template<typename _Tp>
+16535:     inline
+16535:     __shared_count<_Lp>::__shared_count(std::auto_ptr<_Tp>&& __r)
+16535:     : _M_pi(new _Sp_counted_ptr<_Tp*, _Lp>(__r.get()))
+16535:     { __r.release(); }
+16535: 
+16535:   template<typename _Tp, _Lock_policy _Lp>
+16535:   template<typename _Tp1, typename>
+16535:     inline
+16535:     __shared_ptr<_Tp, _Lp>::__shared_ptr(std::auto_ptr<_Tp1>&& __r)
+16535:     : _M_ptr(__r.get()), _M_refcount()
+16535:     {
+16535:      
+16535:       static_assert( sizeof(_Tp1) > 0, "incomplete type" );
+16535:       _Tp1* __tmp = __r.get();
+16535:       _M_refcount = __shared_count<_Lp>(std::move(__r));
+16535:       _M_enable_shared_from_this_with(__tmp);
+16535:     }
+16535: 
+16535:   template<typename _Tp>
+16535:   template<typename _Tp1, typename>
+16535:     inline
+16535:     shared_ptr<_Tp>::shared_ptr(std::auto_ptr<_Tp1>&& __r)
+16535:     : __shared_ptr<_Tp>(std::move(__r)) { }
+16535: 
+16535:   template<typename _Tp, typename _Dp>
+16535:   template<typename _Up, typename>
+16535:     inline
+16535:     unique_ptr<_Tp, _Dp>::unique_ptr(auto_ptr<_Up>&& __u) noexcept
+16535:     : _M_t(__u.release(), deleter_type()) { }
+16535: 
+16535: 
+16535: #pragma GCC diagnostic pop
+16535: 
+16535: 
+16535: }
+16535: # 85 "/usr/include/c++/8/memory" 2 3
+16535: # 93 "/usr/include/c++/8/memory" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 113 "/usr/include/c++/8/memory" 3
+16535: inline void*
+16535: align(size_t __align, size_t __size, void*& __ptr, size_t& __space) noexcept
+16535: {
+16535:   const auto __intptr = reinterpret_cast<uintptr_t>(__ptr);
+16535:   const auto __aligned = (__intptr - 1u + __align) & -__align;
+16535:   const auto __diff = __aligned - __intptr;
+16535:   if ((__size + __diff) > __space)
+16535:     return nullptr;
+16535:   else
+16535:     {
+16535:       __space -= __diff;
+16535:       return __ptr = reinterpret_cast<void*>(__aligned);
+16535:     }
+16535: }
+16535: 
+16535: 
+16535: 
+16535: enum class pointer_safety { relaxed, preferred, strict };
+16535: 
+16535: inline void
+16535: declare_reachable(void*) { }
+16535: 
+16535: template <typename _Tp>
+16535:   inline _Tp*
+16535:   undeclare_reachable(_Tp* __p) { return __p; }
+16535: 
+16535: inline void
+16535: declare_no_pointers(char*, size_t) { }
+16535: 
+16535: inline void
+16535: undeclare_no_pointers(char*, size_t) { }
+16535: 
+16535: inline pointer_safety
+16535: get_pointer_safety() noexcept { return pointer_safety::relaxed; }
+16535: 
+16535: 
+16535: }
+16535: # 34 "../../src/Dense_Row_defs.hh" 2
+16535: # 42 "../../src/Dense_Row_defs.hh"
+16535: 
+16535: # 42 "../../src/Dense_Row_defs.hh"
+16535: class Parma_Polyhedra_Library::Dense_Row {
+16535: public:
+16535:   class iterator;
+16535:   class const_iterator;
+16535: 
+16535: 
+16535:   Dense_Row();
+16535: 
+16535:   explicit Dense_Row(const Sparse_Row& row);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Dense_Row(dimension_type sz);
+16535: # 69 "../../src/Dense_Row_defs.hh"
+16535:   Dense_Row(dimension_type sz, dimension_type capacity);
+16535: 
+16535: 
+16535:   Dense_Row(const Dense_Row& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Dense_Row(const Dense_Row& y, dimension_type capacity);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Dense_Row(const Dense_Row& y, dimension_type sz, dimension_type capacity);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Dense_Row(const Sparse_Row& y, dimension_type sz, dimension_type capacity);
+16535: 
+16535: 
+16535:   ~Dense_Row();
+16535: 
+16535: 
+16535:   Dense_Row& operator=(const Dense_Row& y);
+16535: 
+16535: 
+16535:   Dense_Row& operator=(const Sparse_Row& y);
+16535: 
+16535: 
+16535:   void m_swap(Dense_Row& y);
+16535: 
+16535: 
+16535:   void resize(dimension_type sz);
+16535: 
+16535: 
+16535:   void resize(dimension_type sz, dimension_type capacity);
+16535: 
+16535: 
+16535:   void clear();
+16535: # 127 "../../src/Dense_Row_defs.hh"
+16535:   void add_zeroes_and_shift(dimension_type n, dimension_type i);
+16535: # 136 "../../src/Dense_Row_defs.hh"
+16535:   void expand_within_capacity(dimension_type new_size);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void shrink(dimension_type new_size);
+16535: 
+16535: 
+16535:   static dimension_type max_size();
+16535: 
+16535: 
+16535:   dimension_type size() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Coefficient& operator[](dimension_type k);
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference operator[](dimension_type k) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void normalize();
+16535: 
+16535: 
+16535: 
+16535:   void swap_coefficients(dimension_type i, dimension_type j);
+16535: 
+16535: 
+16535: 
+16535:   void swap_coefficients(iterator i, iterator j);
+16535: 
+16535:   iterator begin();
+16535:   const_iterator begin() const;
+16535: 
+16535:   iterator end();
+16535:   const_iterator end() const;
+16535: 
+16535: 
+16535: 
+16535:   void reset(dimension_type i);
+16535: 
+16535: 
+16535: 
+16535:   void reset(dimension_type first, dimension_type last);
+16535: 
+16535: 
+16535: 
+16535:   iterator reset(iterator itr);
+16535: 
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference get(dimension_type i) const;
+16535: 
+16535: 
+16535:   iterator find(dimension_type i);
+16535: 
+16535: 
+16535:   const_iterator find(dimension_type i) const;
+16535: 
+16535: 
+16535:   iterator find(iterator itr, dimension_type i);
+16535: 
+16535: 
+16535:   const_iterator find(const_iterator itr, dimension_type i) const;
+16535: 
+16535: 
+16535:   iterator lower_bound(dimension_type i);
+16535: 
+16535: 
+16535:   const_iterator lower_bound(dimension_type i) const;
+16535: 
+16535: 
+16535:   iterator lower_bound(iterator itr, dimension_type i);
+16535: 
+16535: 
+16535:   const_iterator lower_bound(const_iterator itr, dimension_type i) const;
+16535: 
+16535: 
+16535:   iterator insert(dimension_type i, Coefficient_traits::const_reference x);
+16535: 
+16535: 
+16535:   iterator insert(dimension_type i);
+16535: 
+16535: 
+16535:   iterator insert(iterator itr, dimension_type i,
+16535:                        Coefficient_traits::const_reference x);
+16535: 
+16535: 
+16535:   iterator insert(iterator itr, dimension_type i);
+16535: # 258 "../../src/Dense_Row_defs.hh"
+16535:   template <typename Func1, typename Func2>
+16535:   void combine_needs_first(const Dense_Row& y,
+16535:                            const Func1& f, const Func2& g);
+16535: # 286 "../../src/Dense_Row_defs.hh"
+16535:   template <typename Func1, typename Func2>
+16535:   void combine_needs_second(const Dense_Row& y,
+16535:                             const Func1& g, const Func2& h);
+16535: # 318 "../../src/Dense_Row_defs.hh"
+16535:   template <typename Func1, typename Func2, typename Func3>
+16535:   void combine(const Dense_Row& y,
+16535:                const Func1& f, const Func2& g, const Func3& h);
+16535: # 342 "../../src/Dense_Row_defs.hh"
+16535:   void linear_combine(const Dense_Row& y,
+16535:                       Coefficient_traits::const_reference coeff1,
+16535:                       Coefficient_traits::const_reference coeff2);
+16535: # 354 "../../src/Dense_Row_defs.hh"
+16535:   void linear_combine(const Dense_Row& y,
+16535:                       Coefficient_traits::const_reference c1,
+16535:                       Coefficient_traits::const_reference c2,
+16535:                       dimension_type start, dimension_type end);
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes(dimension_type capacity) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes(dimension_type capacity) const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool OK(dimension_type row_size) const;
+16535: 
+16535: private:
+16535:   void init(const Sparse_Row& row);
+16535: 
+16535:   void destroy();
+16535: 
+16535:   struct Impl {
+16535: 
+16535:     Impl();
+16535: 
+16535:     ~Impl();
+16535: 
+16535: 
+16535:     dimension_type size;
+16535: 
+16535: 
+16535:     dimension_type capacity;
+16535: 
+16535: 
+16535:     std::allocator<Coefficient> coeff_allocator;
+16535: 
+16535: 
+16535: 
+16535:     Coefficient* vec;
+16535:   };
+16535: 
+16535:   Impl impl;
+16535: 
+16535: 
+16535:   dimension_type capacity() const;
+16535: };
+16535: 
+16535: class Parma_Polyhedra_Library::Dense_Row::iterator {
+16535: public:
+16535: 
+16535:   typedef std::bidirectional_iterator_tag iterator_category;
+16535:   typedef Coefficient value_type;
+16535:   typedef std::ptrdiff_t difference_type;
+16535:   typedef value_type* pointer;
+16535:   typedef value_type& reference;
+16535: 
+16535:   iterator();
+16535:   iterator(Dense_Row& r, dimension_type i);
+16535: 
+16535:   Coefficient& operator*();
+16535:   Coefficient_traits::const_reference operator*() const;
+16535: # 454 "../../src/Dense_Row_defs.hh"
+16535:   dimension_type index() const;
+16535: 
+16535:   iterator& operator++();
+16535:   iterator operator++(int);
+16535: 
+16535:   iterator& operator--();
+16535:   iterator operator--(int);
+16535: 
+16535:   bool operator==(const iterator& x) const;
+16535:   bool operator!=(const iterator& x) const;
+16535: 
+16535:   operator const_iterator() const;
+16535: 
+16535:   bool OK() const;
+16535: 
+16535: private:
+16535:   Dense_Row* row;
+16535:   dimension_type idx;
+16535: };
+16535: 
+16535: class Parma_Polyhedra_Library::Dense_Row::const_iterator {
+16535: public:
+16535: 
+16535:   typedef const Coefficient value_type;
+16535:   typedef std::ptrdiff_t difference_type;
+16535:   typedef value_type* pointer;
+16535:   typedef Coefficient_traits::const_reference reference;
+16535: 
+16535:   const_iterator();
+16535:   const_iterator(const Dense_Row& r, dimension_type i);
+16535: 
+16535:   Coefficient_traits::const_reference operator*() const;
+16535: # 494 "../../src/Dense_Row_defs.hh"
+16535:   dimension_type index() const;
+16535: 
+16535:   const_iterator& operator++();
+16535:   const_iterator operator++(int);
+16535: 
+16535:   const_iterator& operator--();
+16535:   const_iterator operator--(int);
+16535: 
+16535:   bool operator==(const const_iterator& x) const;
+16535:   bool operator!=(const const_iterator& x) const;
+16535: 
+16535:   bool OK() const;
+16535: 
+16535: private:
+16535:   const Dense_Row* row;
+16535:   dimension_type idx;
+16535: };
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: void swap(Dense_Row& x, Dense_Row& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: void iter_swap(std::vector<Dense_Row>::iterator x,
+16535:                std::vector<Dense_Row>::iterator y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: bool operator==(const Dense_Row& x, const Dense_Row& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: bool operator!=(const Dense_Row& x, const Dense_Row& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: void linear_combine(Dense_Row& x, const Dense_Row& y,
+16535:                     Coefficient_traits::const_reference coeff1,
+16535:                     Coefficient_traits::const_reference coeff2);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: void linear_combine(Dense_Row& x, const Dense_Row& y,
+16535:                     Coefficient_traits::const_reference c1,
+16535:                     Coefficient_traits::const_reference c2,
+16535:                     dimension_type start, dimension_type end);
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Dense_Row_inlines.hh" 1
+16535: # 32 "../../src/Dense_Row_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline
+16535: Dense_Row::Impl::Impl()
+16535:   : size(0), capacity(0), coeff_allocator(), vec(0) {
+16535: }
+16535: 
+16535: inline
+16535: Dense_Row::Impl::~Impl() {
+16535:   while (size != 0) {
+16535:     --size;
+16535:     vec[size].~Coefficient();
+16535:   }
+16535:   coeff_allocator.deallocate(vec, capacity);
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Dense_Row::max_size() {
+16535:   return std::numeric_limits<size_t>::max() / sizeof(Coefficient);
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Dense_Row::size() const {
+16535:   return impl.size;
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Dense_Row::capacity() const {
+16535:   return impl.capacity;
+16535: }
+16535: 
+16535: inline
+16535: Dense_Row::Dense_Row()
+16535:   : impl() {
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Dense_Row::Dense_Row(const dimension_type sz,
+16535:                      const dimension_type capacity)
+16535:   : impl() {
+16535: 
+16535:   resize(sz, capacity);
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Dense_Row::Dense_Row(const dimension_type sz)
+16535:   : impl() {
+16535: 
+16535:   resize(sz);
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Dense_Row::Dense_Row(const Dense_Row& y)
+16535:   : impl() {
+16535:   impl.coeff_allocator = y.impl.coeff_allocator;
+16535:   if (y.impl.vec != 0) {
+16535:     impl.capacity = y.capacity();
+16535:     impl.vec = impl.coeff_allocator.allocate(impl.capacity);
+16535:     while (impl.size != y.size()) {
+16535:       new(&impl.vec[impl.size]) Coefficient(y[impl.size]);
+16535:       ++impl.size;
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Dense_Row::Dense_Row(const Dense_Row& y,
+16535:                      const dimension_type capacity)
+16535:   : impl() {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535:   impl.capacity = capacity;
+16535:   impl.coeff_allocator = y.impl.coeff_allocator;
+16535:   impl.vec = impl.coeff_allocator.allocate(impl.capacity);
+16535: 
+16535:   if (y.impl.vec != 0) {
+16535:     while (impl.size != y.size()) {
+16535:       new(&impl.vec[impl.size]) Coefficient(y[impl.size]);
+16535:       ++impl.size;
+16535:     }
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Dense_Row::Dense_Row(const Dense_Row& y,
+16535:                      const dimension_type sz,
+16535:                      const dimension_type capacity)
+16535:   : impl() {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535:   impl.capacity = capacity;
+16535:   impl.coeff_allocator = y.impl.coeff_allocator;
+16535:   impl.vec = impl.coeff_allocator.allocate(impl.capacity);
+16535: 
+16535:   const dimension_type n = std::min(sz, y.size());
+16535:   while (impl.size != n) {
+16535:     new(&impl.vec[impl.size]) Coefficient(y[impl.size]);
+16535:     ++impl.size;
+16535:   }
+16535:   while (impl.size != sz) {
+16535:     new(&impl.vec[impl.size]) Coefficient();
+16535:     ++impl.size;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Dense_Row::~Dense_Row() {
+16535: 
+16535: }
+16535: 
+16535: inline void
+16535: Dense_Row::destroy() {
+16535:   resize(0);
+16535:   impl.coeff_allocator.deallocate(impl.vec, impl.capacity);
+16535: }
+16535: 
+16535: inline void
+16535: Dense_Row::m_swap(Dense_Row& y) {
+16535:   using std::swap;
+16535:   swap(impl.size, y.impl.size);
+16535:   swap(impl.capacity, y.impl.capacity);
+16535:   swap(impl.coeff_allocator, y.impl.coeff_allocator);
+16535:   swap(impl.vec, y.impl.vec);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline Dense_Row&
+16535: Dense_Row::operator=(const Dense_Row& y) {
+16535: 
+16535:   if (this != &y && size() == y.size()) {
+16535: 
+16535: 
+16535:     for (dimension_type i = size(); i-- > 0; ) {
+16535:       (*this)[i] = y[i];
+16535:     }
+16535: 
+16535:     return *this;
+16535:   }
+16535: 
+16535:   Dense_Row x(y);
+16535:   swap(*this, x);
+16535: 
+16535:   return *this;
+16535: }
+16535: 
+16535: inline Coefficient&
+16535: Dense_Row::operator[](const dimension_type k) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   return impl.vec[k];
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: Dense_Row::operator[](const dimension_type k) const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   return impl.vec[k];
+16535: }
+16535: 
+16535: inline void
+16535: Dense_Row::swap_coefficients(dimension_type i, dimension_type j) {
+16535:   std::swap((*this)[i], (*this)[j]);
+16535: }
+16535: 
+16535: inline void
+16535: Dense_Row::swap_coefficients(iterator i, iterator j) {
+16535:   std::swap(*i, *j);
+16535: }
+16535: 
+16535: inline void
+16535: Dense_Row::reset(dimension_type i) {
+16535:   (*this)[i] = 0;
+16535: }
+16535: 
+16535: inline Dense_Row::iterator
+16535: Dense_Row::reset(iterator itr) {
+16535:   *itr = 0;
+16535:   ++itr;
+16535:   return itr;
+16535: }
+16535: 
+16535: inline Dense_Row::iterator
+16535: Dense_Row::begin() {
+16535:   return iterator(*this, 0);
+16535: }
+16535: 
+16535: inline Dense_Row::const_iterator
+16535: Dense_Row::begin() const {
+16535:   return const_iterator(*this, 0);
+16535: }
+16535: 
+16535: inline Dense_Row::iterator
+16535: Dense_Row::end() {
+16535:   return iterator(*this, size());
+16535: }
+16535: 
+16535: inline Dense_Row::const_iterator
+16535: Dense_Row::end() const {
+16535:   return const_iterator(*this, size());
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: Dense_Row::get(dimension_type i) const {
+16535:   return (*this)[i];
+16535: }
+16535: 
+16535: inline Dense_Row::iterator
+16535: Dense_Row::find(dimension_type i) {
+16535:   return iterator(*this, i);
+16535: }
+16535: 
+16535: inline Dense_Row::const_iterator
+16535: Dense_Row::find(dimension_type i) const {
+16535:   return const_iterator(*this, i);
+16535: }
+16535: 
+16535: inline Dense_Row::iterator
+16535: Dense_Row::find(iterator itr, dimension_type i) {
+16535:   (void)itr;
+16535:   return iterator(*this, i);
+16535: }
+16535: 
+16535: inline Dense_Row::const_iterator
+16535: Dense_Row::find(const_iterator itr, dimension_type i) const {
+16535:   (void)itr;
+16535:   return const_iterator(*this, i);
+16535: }
+16535: 
+16535: inline Dense_Row::iterator
+16535: Dense_Row::lower_bound(dimension_type i) {
+16535:   return find(i);
+16535: }
+16535: 
+16535: inline Dense_Row::const_iterator
+16535: Dense_Row::lower_bound(dimension_type i) const {
+16535:   return find(i);
+16535: }
+16535: 
+16535: inline Dense_Row::iterator
+16535: Dense_Row::lower_bound(iterator itr, dimension_type i) {
+16535:   return find(itr, i);
+16535: }
+16535: 
+16535: inline Dense_Row::const_iterator
+16535: Dense_Row::lower_bound(const_iterator itr, dimension_type i) const {
+16535:   return find(itr, i);
+16535: }
+16535: 
+16535: inline Dense_Row::iterator
+16535: Dense_Row::insert(dimension_type i,
+16535:                   Coefficient_traits::const_reference x) {
+16535:   (*this)[i] = x;
+16535:   return find(i);
+16535: }
+16535: 
+16535: inline Dense_Row::iterator
+16535: Dense_Row::insert(dimension_type i) {
+16535:   return find(i);
+16535: }
+16535: 
+16535: inline Dense_Row::iterator
+16535: Dense_Row::insert(iterator itr, dimension_type i,
+16535:                   Coefficient_traits::const_reference x) {
+16535:   (void)itr;
+16535:   (*this)[i] = x;
+16535:   return find(i);
+16535: }
+16535: 
+16535: inline Dense_Row::iterator
+16535: Dense_Row::insert(iterator itr, dimension_type i) {
+16535:   (void)itr;
+16535:   return find(i);
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Dense_Row::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Dense_Row::total_memory_in_bytes(dimension_type capacity) const {
+16535:   return sizeof(*this) + external_memory_in_bytes(capacity);
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: operator!=(const Dense_Row& x, const Dense_Row& y) {
+16535:   return !(x == y);
+16535: }
+16535: 
+16535: 
+16535: inline
+16535: Dense_Row::iterator::iterator()
+16535:   : row(
+16535: # 349 "../../src/Dense_Row_inlines.hh" 3 4
+16535:        __null
+16535: # 349 "../../src/Dense_Row_inlines.hh"
+16535:            ), idx(0) {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Dense_Row::iterator::iterator(Dense_Row& r, dimension_type i)
+16535:   : row(&r), idx(i) {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline Coefficient&
+16535: Dense_Row::iterator::operator*() {
+16535:   ((void) 0);
+16535:   return (*row)[idx];
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: Dense_Row::iterator::operator*() const {
+16535:   ((void) 0);
+16535:   return (*row)[idx];
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Dense_Row::iterator::index() const {
+16535:   return idx;
+16535: }
+16535: 
+16535: inline Dense_Row::iterator&
+16535: Dense_Row::iterator::operator++() {
+16535:   ((void) 0);
+16535:   ++idx;
+16535:   ((void) 0);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline Dense_Row::iterator
+16535: Dense_Row::iterator::operator++(int) {
+16535:   iterator tmp(*this);
+16535:   ++(*this);
+16535:   return tmp;
+16535: }
+16535: 
+16535: inline Dense_Row::iterator&
+16535: Dense_Row::iterator::operator--() {
+16535:   ((void) 0);
+16535:   --idx;
+16535:   ((void) 0);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline Dense_Row::iterator
+16535: Dense_Row::iterator::operator--(int) {
+16535:   iterator tmp(*this);
+16535:   --(*this);
+16535:   return tmp;
+16535: }
+16535: 
+16535: inline bool
+16535: Dense_Row::iterator::operator==(const iterator& x) const {
+16535:   return (row == x.row) && (idx == x.idx);
+16535: }
+16535: 
+16535: inline bool
+16535: Dense_Row::iterator::operator!=(const iterator& x) const {
+16535:   return !(*this == x);
+16535: }
+16535: 
+16535: inline
+16535: Dense_Row::iterator::operator const_iterator() const {
+16535:   return const_iterator(*row, idx);
+16535: }
+16535: 
+16535: inline bool
+16535: Dense_Row::iterator::OK() const {
+16535:   if (row == 
+16535: # 423 "../../src/Dense_Row_inlines.hh" 3 4
+16535:             __null
+16535: # 423 "../../src/Dense_Row_inlines.hh"
+16535:                 ) {
+16535:     return true;
+16535:   }
+16535: 
+16535:   return (idx <= row->size());
+16535: }
+16535: 
+16535: 
+16535: inline
+16535: Dense_Row::const_iterator::const_iterator()
+16535:   : row(
+16535: # 433 "../../src/Dense_Row_inlines.hh" 3 4
+16535:        __null
+16535: # 433 "../../src/Dense_Row_inlines.hh"
+16535:            ), idx(0) {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Dense_Row::const_iterator::const_iterator(const Dense_Row& r,
+16535:                                           dimension_type i)
+16535:   : row(&r), idx(i) {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: Dense_Row::const_iterator::operator*() const {
+16535:   ((void) 0);
+16535:   return (*row)[idx];
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Dense_Row::const_iterator::index() const {
+16535:   return idx;
+16535: }
+16535: 
+16535: inline Dense_Row::const_iterator&
+16535: Dense_Row::const_iterator::operator++() {
+16535:   ((void) 0);
+16535:   ++idx;
+16535:   ((void) 0);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline Dense_Row::const_iterator
+16535: Dense_Row::const_iterator::operator++(int) {
+16535:   const_iterator tmp(*this);
+16535:   ++(*this);
+16535:   return tmp;
+16535: }
+16535: 
+16535: inline Dense_Row::const_iterator&
+16535: Dense_Row::const_iterator::operator--() {
+16535:   ((void) 0);
+16535:   --idx;
+16535:   ((void) 0);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline Dense_Row::const_iterator
+16535: Dense_Row::const_iterator::operator--(int) {
+16535:   const_iterator tmp(*this);
+16535:   --(*this);
+16535:   return tmp;
+16535: }
+16535: 
+16535: inline bool
+16535: Dense_Row::const_iterator::operator==(const const_iterator& x) const {
+16535:   return (row == x.row) && (idx == x.idx);
+16535: }
+16535: 
+16535: inline bool
+16535: Dense_Row::const_iterator::operator!=(const const_iterator& x) const {
+16535:   return !(*this == x);
+16535: }
+16535: 
+16535: inline bool
+16535: Dense_Row::const_iterator::OK() const {
+16535:   if (row == 
+16535: # 497 "../../src/Dense_Row_inlines.hh" 3 4
+16535:             __null
+16535: # 497 "../../src/Dense_Row_inlines.hh"
+16535:                 ) {
+16535:     return true;
+16535:   }
+16535: 
+16535:   return (idx <= row->size());
+16535: }
+16535: 
+16535: inline void
+16535: linear_combine(Dense_Row& x, const Dense_Row& y,
+16535:                Coefficient_traits::const_reference coeff1,
+16535:                Coefficient_traits::const_reference coeff2) {
+16535:   x.linear_combine(y, coeff1, coeff2);
+16535: }
+16535: 
+16535: inline void
+16535: linear_combine(Dense_Row& x, const Dense_Row& y,
+16535:                Coefficient_traits::const_reference c1,
+16535:                Coefficient_traits::const_reference c2,
+16535:                dimension_type start, dimension_type end) {
+16535:   x.linear_combine(y, c1, c2, start, end);
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: swap(Dense_Row& x, Dense_Row& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: iter_swap(std::vector<Dense_Row>::iterator x,
+16535:           std::vector<Dense_Row>::iterator y) {
+16535:   swap(*x, *y);
+16535: }
+16535: 
+16535: }
+16535: # 560 "../../src/Dense_Row_defs.hh" 2
+16535: # 1 "../../src/Dense_Row_templates.hh" 1
+16535: # 27 "../../src/Dense_Row_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: template <typename Func1, typename Func2>
+16535: void
+16535: Dense_Row::combine_needs_first(const Dense_Row& y, const Func1& ,
+16535:                                const Func2& g) {
+16535:   for (dimension_type i = size(); i-- > 0; ) {
+16535:     g((*this)[i], y[i]);
+16535:   }
+16535: }
+16535: 
+16535: template <typename Func1, typename Func2>
+16535: void
+16535: Dense_Row::combine_needs_second(const Dense_Row& y, const Func1& g,
+16535:                                 const Func2& ) {
+16535:   for (dimension_type i = size(); i-- > 0; ) {
+16535:     g((*this)[i], y[i]);
+16535:   }
+16535: }
+16535: 
+16535: template <typename Func1, typename Func2, typename Func3>
+16535: void
+16535: Dense_Row::combine(const Dense_Row& y, const Func1& , const Func2& g,
+16535:                    const Func3& ) {
+16535:   for (dimension_type i = size(); i-- > 0; ) {
+16535:     g((*this)[i], y[i]);
+16535:   }
+16535: }
+16535: 
+16535: }
+16535: # 561 "../../src/Dense_Row_defs.hh" 2
+16535: # 33 "../../src/Linear_Expression_Impl_defs.hh" 2
+16535: # 1 "../../src/Sparse_Row_defs.hh" 1
+16535: # 29 "../../src/Sparse_Row_defs.hh"
+16535: # 1 "../../src/CO_Tree_defs.hh" 1
+16535: # 27 "../../src/CO_Tree_defs.hh"
+16535: # 1 "../../src/CO_Tree_types.hh" 1
+16535: # 16 "../../src/CO_Tree_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class CO_Tree;
+16535: 
+16535: }
+16535: # 28 "../../src/CO_Tree_defs.hh" 2
+16535: # 53 "../../src/CO_Tree_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: # 103 "../../src/CO_Tree_defs.hh"
+16535: class CO_Tree {
+16535: 
+16535: public:
+16535:   class const_iterator;
+16535:   class iterator;
+16535: 
+16535: private:
+16535: 
+16535:   typedef unsigned height_t;
+16535: 
+16535:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_115 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(C_Integer<height_t>::max >= ((sizeof(dimension_type)) * static_cast<std::size_t>(8)))>) }
+16535: 
+16535:                                                                   ;
+16535: 
+16535:   class tree_iterator;
+16535: # 128 "../../src/CO_Tree_defs.hh"
+16535:   dimension_type dfs_index(const_iterator itr) const;
+16535: # 139 "../../src/CO_Tree_defs.hh"
+16535:   dimension_type dfs_index(iterator itr) const;
+16535: 
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef Coefficient data_type;
+16535:   typedef Coefficient_traits::const_reference data_type_const_reference;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   class const_iterator {
+16535:   private:
+16535:   public:
+16535: 
+16535:     typedef std::bidirectional_iterator_tag iterator_category;
+16535:     typedef const data_type value_type;
+16535:     typedef std::ptrdiff_t difference_type;
+16535:     typedef value_type* pointer;
+16535:     typedef data_type_const_reference reference;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     explicit const_iterator();
+16535: # 180 "../../src/CO_Tree_defs.hh"
+16535:     explicit const_iterator(const CO_Tree& tree);
+16535: # 195 "../../src/CO_Tree_defs.hh"
+16535:     const_iterator(const CO_Tree& tree, dimension_type i);
+16535: # 204 "../../src/CO_Tree_defs.hh"
+16535:     const_iterator(const const_iterator& itr);
+16535: # 213 "../../src/CO_Tree_defs.hh"
+16535:     const_iterator(const iterator& itr);
+16535: # 222 "../../src/CO_Tree_defs.hh"
+16535:     void m_swap(const_iterator& itr);
+16535: # 231 "../../src/CO_Tree_defs.hh"
+16535:     const_iterator& operator=(const const_iterator& itr);
+16535: # 240 "../../src/CO_Tree_defs.hh"
+16535:     const_iterator& operator=(const iterator& itr);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     const_iterator& operator++();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     const_iterator& operator--();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     const_iterator operator++(int);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     const_iterator operator--(int);
+16535: 
+16535: 
+16535:     data_type_const_reference operator*() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     dimension_type index() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     bool operator==(const const_iterator& x) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     bool operator!=(const const_iterator& x) const;
+16535: 
+16535:   private:
+16535: 
+16535:     bool OK() const;
+16535: 
+16535: 
+16535:     const dimension_type* current_index;
+16535: 
+16535: 
+16535:     const data_type* current_data;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     friend dimension_type CO_Tree::dfs_index(const_iterator itr) const;
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   class iterator {
+16535:   public:
+16535: 
+16535:     typedef std::bidirectional_iterator_tag iterator_category;
+16535:     typedef data_type value_type;
+16535:     typedef std::ptrdiff_t difference_type;
+16535:     typedef value_type* pointer;
+16535:     typedef value_type& reference;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     iterator();
+16535: # 335 "../../src/CO_Tree_defs.hh"
+16535:     explicit iterator(CO_Tree& tree);
+16535: # 350 "../../src/CO_Tree_defs.hh"
+16535:     iterator(CO_Tree& tree, dimension_type i);
+16535: # 362 "../../src/CO_Tree_defs.hh"
+16535:     explicit iterator(const tree_iterator& itr);
+16535: # 371 "../../src/CO_Tree_defs.hh"
+16535:     iterator(const iterator& itr);
+16535: # 380 "../../src/CO_Tree_defs.hh"
+16535:     void m_swap(iterator& itr);
+16535: # 389 "../../src/CO_Tree_defs.hh"
+16535:     iterator& operator=(const iterator& itr);
+16535: # 398 "../../src/CO_Tree_defs.hh"
+16535:     iterator& operator=(const tree_iterator& itr);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     iterator& operator++();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     iterator& operator--();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     iterator operator++(int);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     iterator operator--(int);
+16535: 
+16535: 
+16535:     data_type& operator*();
+16535: 
+16535: 
+16535:     data_type_const_reference operator*() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     dimension_type index() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     bool operator==(const iterator& x) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     bool operator!=(const iterator& x) const;
+16535: 
+16535:   private:
+16535: 
+16535:     bool OK() const;
+16535: 
+16535: 
+16535:     const dimension_type* current_index;
+16535: 
+16535: 
+16535:     data_type* current_data;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     friend const_iterator& const_iterator::operator=(const iterator&);
+16535:     friend dimension_type CO_Tree::dfs_index(iterator itr) const;
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   CO_Tree();
+16535: # 482 "../../src/CO_Tree_defs.hh"
+16535:   CO_Tree(const CO_Tree& y);
+16535: # 501 "../../src/CO_Tree_defs.hh"
+16535:   template <typename Iterator>
+16535:   CO_Tree(Iterator i, dimension_type n);
+16535: # 511 "../../src/CO_Tree_defs.hh"
+16535:   CO_Tree& operator=(const CO_Tree& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void clear();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   ~CO_Tree();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool empty() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type size() const;
+16535: 
+16535: 
+16535:   static dimension_type max_size();
+16535: 
+16535: 
+16535:   void dump_tree() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type external_memory_in_bytes() const;
+16535: # 566 "../../src/CO_Tree_defs.hh"
+16535:   iterator insert(dimension_type key);
+16535: # 587 "../../src/CO_Tree_defs.hh"
+16535:   iterator insert(dimension_type key, data_type_const_reference data);
+16535: # 615 "../../src/CO_Tree_defs.hh"
+16535:   iterator insert(iterator itr, dimension_type key);
+16535: # 645 "../../src/CO_Tree_defs.hh"
+16535:   iterator insert(iterator itr, dimension_type key,
+16535:                   data_type_const_reference data);
+16535: # 661 "../../src/CO_Tree_defs.hh"
+16535:   iterator erase(dimension_type key);
+16535: # 676 "../../src/CO_Tree_defs.hh"
+16535:   iterator erase(iterator itr);
+16535: # 690 "../../src/CO_Tree_defs.hh"
+16535:   void erase_element_and_shift_left(dimension_type key);
+16535: # 703 "../../src/CO_Tree_defs.hh"
+16535:   void increase_keys_from(dimension_type key, dimension_type n);
+16535: # 712 "../../src/CO_Tree_defs.hh"
+16535:   void fast_shift(dimension_type i, iterator itr);
+16535: # 723 "../../src/CO_Tree_defs.hh"
+16535:   void m_swap(CO_Tree& x);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   iterator begin();
+16535: # 740 "../../src/CO_Tree_defs.hh"
+16535:   const iterator& end();
+16535: 
+16535: 
+16535:   const_iterator begin() const;
+16535: 
+16535: 
+16535:   const const_iterator& end() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const_iterator cbegin() const;
+16535: # 763 "../../src/CO_Tree_defs.hh"
+16535:   const const_iterator& cend() const;
+16535: # 777 "../../src/CO_Tree_defs.hh"
+16535:   iterator bisect(dimension_type key);
+16535: # 791 "../../src/CO_Tree_defs.hh"
+16535:   const_iterator bisect(dimension_type key) const;
+16535: # 815 "../../src/CO_Tree_defs.hh"
+16535:   iterator bisect_in(iterator first, iterator last, dimension_type key);
+16535: # 839 "../../src/CO_Tree_defs.hh"
+16535:   const_iterator bisect_in(const_iterator first, const_iterator last,
+16535:                            dimension_type key) const;
+16535: # 860 "../../src/CO_Tree_defs.hh"
+16535:   iterator bisect_near(iterator hint, dimension_type key);
+16535: # 880 "../../src/CO_Tree_defs.hh"
+16535:   const_iterator bisect_near(const_iterator hint, dimension_type key) const;
+16535: 
+16535: private:
+16535: # 905 "../../src/CO_Tree_defs.hh"
+16535:   dimension_type bisect_in(dimension_type first, dimension_type last,
+16535:                            dimension_type key) const;
+16535: # 929 "../../src/CO_Tree_defs.hh"
+16535:   dimension_type bisect_near(dimension_type hint, dimension_type key) const;
+16535: # 954 "../../src/CO_Tree_defs.hh"
+16535:   tree_iterator insert_precise(dimension_type key,
+16535:                                data_type_const_reference data,
+16535:                                tree_iterator itr);
+16535: # 965 "../../src/CO_Tree_defs.hh"
+16535:   tree_iterator insert_precise_aux(dimension_type key,
+16535:                                    data_type_const_reference data,
+16535:                                    tree_iterator itr);
+16535: # 984 "../../src/CO_Tree_defs.hh"
+16535:   void insert_in_empty_tree(dimension_type key,
+16535:                             data_type_const_reference data);
+16535: # 1000 "../../src/CO_Tree_defs.hh"
+16535:   iterator erase(tree_iterator itr);
+16535: # 1009 "../../src/CO_Tree_defs.hh"
+16535:   void init(dimension_type n);
+16535: # 1018 "../../src/CO_Tree_defs.hh"
+16535:   void destroy();
+16535: 
+16535: 
+16535:   bool structure_OK() const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: # 1033 "../../src/CO_Tree_defs.hh"
+16535:   static unsigned integer_log2(dimension_type n);
+16535: # 1051 "../../src/CO_Tree_defs.hh"
+16535:   static bool is_less_than_ratio(dimension_type numer, dimension_type denom,
+16535:                                  dimension_type ratio);
+16535: # 1071 "../../src/CO_Tree_defs.hh"
+16535:   static bool is_greater_than_ratio(dimension_type numer, dimension_type denom,
+16535:                                     dimension_type ratio);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static void dump_subtree(tree_iterator itr);
+16535: # 1088 "../../src/CO_Tree_defs.hh"
+16535:   void rebuild_bigger_tree();
+16535: # 1100 "../../src/CO_Tree_defs.hh"
+16535:   void rebuild_smaller_tree();
+16535: # 1109 "../../src/CO_Tree_defs.hh"
+16535:   void refresh_cached_iterators();
+16535: # 1133 "../../src/CO_Tree_defs.hh"
+16535:   tree_iterator rebalance(tree_iterator itr, dimension_type key,
+16535:                           data_type_const_reference value);
+16535: # 1160 "../../src/CO_Tree_defs.hh"
+16535:   dimension_type compact_elements_in_the_rightmost_end(
+16535:     dimension_type last_in_subtree, dimension_type subtree_size,
+16535:     dimension_type key, data_type_const_reference value,
+16535:     bool add_element);
+16535: # 1191 "../../src/CO_Tree_defs.hh"
+16535:   void redistribute_elements_in_subtree(dimension_type root_index,
+16535:                                         dimension_type subtree_size,
+16535:                                         dimension_type last_used,
+16535:                                         dimension_type key,
+16535:                                         data_type_const_reference value,
+16535:                                         bool add_element);
+16535: # 1208 "../../src/CO_Tree_defs.hh"
+16535:   void move_data_from(CO_Tree& tree);
+16535: # 1221 "../../src/CO_Tree_defs.hh"
+16535:   void copy_data_from(const CO_Tree& tree);
+16535: # 1231 "../../src/CO_Tree_defs.hh"
+16535:   static dimension_type count_used_in_subtree(tree_iterator itr);
+16535: # 1249 "../../src/CO_Tree_defs.hh"
+16535:   static void move_data_element(data_type& to, data_type& from);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const dimension_type max_density_percent = 91;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const dimension_type min_density_percent = 38;
+16535: # 1271 "../../src/CO_Tree_defs.hh"
+16535:   static const dimension_type min_leaf_density_percent = 1;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const dimension_type unused_index = C_Integer<dimension_type>::max;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   iterator cached_end;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const_iterator cached_const_end;
+16535: 
+16535: 
+16535:   height_t max_depth;
+16535: # 1302 "../../src/CO_Tree_defs.hh"
+16535:   dimension_type* indexes;
+16535: 
+16535: 
+16535:   std::allocator<data_type> data_allocator;
+16535: # 1316 "../../src/CO_Tree_defs.hh"
+16535:   data_type* data;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type reserved_size;
+16535: 
+16535: 
+16535:   dimension_type size_;
+16535: };
+16535: 
+16535: class CO_Tree::tree_iterator {
+16535: 
+16535: public:
+16535: # 1341 "../../src/CO_Tree_defs.hh"
+16535:   explicit tree_iterator(CO_Tree& tree);
+16535: # 1353 "../../src/CO_Tree_defs.hh"
+16535:   tree_iterator(CO_Tree& tree, dimension_type i);
+16535: # 1365 "../../src/CO_Tree_defs.hh"
+16535:   tree_iterator(const iterator& itr, CO_Tree& tree);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   tree_iterator& operator=(const tree_iterator& itr);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   tree_iterator& operator=(const iterator& itr);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool operator==(const tree_iterator& itr) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool operator!=(const tree_iterator& itr) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void get_root();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void get_left_child();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void get_right_child();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void get_parent();
+16535: # 1433 "../../src/CO_Tree_defs.hh"
+16535:   void go_down_searching_key(dimension_type key);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void follow_left_children_with_value();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void follow_right_children_with_value();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_root() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_right_child() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_leaf() const;
+16535: 
+16535: 
+16535:   data_type& operator*();
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference operator*() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type& index();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type index() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type key() const;
+16535: 
+16535: 
+16535:   CO_Tree& tree;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type dfs_index() const;
+16535: # 1512 "../../src/CO_Tree_defs.hh"
+16535:   dimension_type get_offset() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   height_t depth() const;
+16535: 
+16535: private:
+16535: 
+16535:   bool OK() const;
+16535: 
+16535: 
+16535:   dimension_type i;
+16535: # 1534 "../../src/CO_Tree_defs.hh"
+16535:   dimension_type offset;
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: void swap(CO_Tree& x, CO_Tree& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: void swap(CO_Tree::const_iterator& x, CO_Tree::const_iterator& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: void swap(CO_Tree::iterator& x, CO_Tree::iterator& y);
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/CO_Tree_inlines.hh" 1
+16535: # 29 "../../src/CO_Tree_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline dimension_type
+16535: CO_Tree::dfs_index(const_iterator itr) const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   const std::ptrdiff_t index = itr.current_index - indexes;
+16535:   return static_cast<dimension_type>(index);
+16535: }
+16535: 
+16535: inline dimension_type
+16535: CO_Tree::dfs_index(iterator itr) const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   const std::ptrdiff_t index = itr.current_index - indexes;
+16535:   return static_cast<dimension_type>(index);
+16535: }
+16535: 
+16535: inline
+16535: CO_Tree::CO_Tree() {
+16535:   init(0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: CO_Tree::CO_Tree(const CO_Tree& y) {
+16535:   ((void) 0);
+16535:   data_allocator = y.data_allocator;
+16535:   init(y.reserved_size);
+16535:   copy_data_from(y);
+16535: }
+16535: 
+16535: inline CO_Tree&
+16535: CO_Tree::operator=(const CO_Tree& y) {
+16535:   if (this != &y) {
+16535:     destroy();
+16535:     data_allocator = y.data_allocator;
+16535:     init(y.reserved_size);
+16535:     copy_data_from(y);
+16535:   }
+16535:   return *this;
+16535: }
+16535: 
+16535: inline void
+16535: CO_Tree::clear() {
+16535:   *this = CO_Tree();
+16535: }
+16535: 
+16535: inline
+16535: CO_Tree::~CO_Tree() {
+16535: 
+16535:   destroy();
+16535: }
+16535: 
+16535: inline bool
+16535: CO_Tree::empty() const {
+16535:   return size_ == 0;
+16535: }
+16535: 
+16535: inline dimension_type
+16535: CO_Tree::size() const {
+16535:   return size_;
+16535: }
+16535: 
+16535: inline dimension_type
+16535: CO_Tree::max_size() {
+16535:   return C_Integer<dimension_type>::max/100;
+16535: }
+16535: 
+16535: inline void
+16535: CO_Tree::dump_tree() const {
+16535:   if (empty()) {
+16535:     std::cout << "(empty tree)" << std::endl;
+16535:   }
+16535:   else {
+16535:     dump_subtree(tree_iterator(*const_cast<CO_Tree*>(this)));
+16535:   }
+16535: }
+16535: 
+16535: inline CO_Tree::iterator
+16535: CO_Tree::insert(const dimension_type key) {
+16535:   if (empty()) {
+16535:     return insert(key, Coefficient_zero());
+16535:   }
+16535:   else {
+16535:     tree_iterator itr(*this);
+16535:     itr.go_down_searching_key(key);
+16535:     if (itr.index() == key) {
+16535:       return iterator(itr);
+16535:     }
+16535:     else {
+16535:       return iterator(insert_precise(key, Coefficient_zero(), itr));
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: inline CO_Tree::iterator
+16535: CO_Tree::insert(dimension_type key, data_type_const_reference data1) {
+16535:   if (empty()) {
+16535:     insert_in_empty_tree(key, data1);
+16535:     tree_iterator itr(*this);
+16535:     ((void) 0);
+16535:     return iterator(itr);
+16535:   }
+16535:   else {
+16535:     tree_iterator itr(*this);
+16535:     itr.go_down_searching_key(key);
+16535:     return iterator(insert_precise(key, data1, itr));
+16535:   }
+16535: }
+16535: 
+16535: inline CO_Tree::iterator
+16535: CO_Tree::erase(dimension_type key) {
+16535:   ((void) 0);
+16535: 
+16535:   if (empty()) {
+16535:     return end();
+16535:   }
+16535: 
+16535:   tree_iterator itr(*this);
+16535:   itr.go_down_searching_key(key);
+16535: 
+16535:   if (itr.index() == key) {
+16535:     return erase(itr);
+16535:   }
+16535: 
+16535:   iterator result(itr);
+16535:   if (result.index() < key) {
+16535:     ++result;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   return result;
+16535: }
+16535: 
+16535: inline CO_Tree::iterator
+16535: CO_Tree::erase(iterator itr) {
+16535:   ((void) 0);
+16535:   return erase(tree_iterator(itr, *this));
+16535: }
+16535: 
+16535: inline void
+16535: CO_Tree::m_swap(CO_Tree& x) {
+16535:   using std::swap;
+16535:   swap(max_depth, x.max_depth);
+16535:   swap(indexes, x.indexes);
+16535:   swap(data_allocator, x.data_allocator);
+16535:   swap(data, x.data);
+16535:   swap(reserved_size, x.reserved_size);
+16535:   swap(size_, x.size_);
+16535: 
+16535: 
+16535:   refresh_cached_iterators();
+16535:   x.refresh_cached_iterators();
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline CO_Tree::iterator
+16535: CO_Tree::begin() {
+16535:   return iterator(*this);
+16535: }
+16535: 
+16535: inline const CO_Tree::iterator&
+16535: CO_Tree::end() {
+16535:   return cached_end;
+16535: }
+16535: 
+16535: inline CO_Tree::const_iterator
+16535: CO_Tree::begin() const {
+16535:   return const_iterator(*this);
+16535: }
+16535: 
+16535: inline const CO_Tree::const_iterator&
+16535: CO_Tree::end() const {
+16535:   return cached_const_end;
+16535: }
+16535: 
+16535: inline CO_Tree::const_iterator
+16535: CO_Tree::cbegin() const {
+16535:   return const_iterator(*this);
+16535: }
+16535: 
+16535: inline const CO_Tree::const_iterator&
+16535: CO_Tree::cend() const {
+16535:   return cached_const_end;
+16535: }
+16535: 
+16535: inline CO_Tree::iterator
+16535: CO_Tree::bisect(dimension_type key) {
+16535:   if (empty()) {
+16535:     return end();
+16535:   }
+16535:   iterator last = end();
+16535:   --last;
+16535:   return bisect_in(begin(), last, key);
+16535: }
+16535: 
+16535: inline CO_Tree::const_iterator
+16535: CO_Tree::bisect(dimension_type key) const {
+16535:   if (empty()) {
+16535:     return end();
+16535:   }
+16535:   const_iterator last = end();
+16535:   --last;
+16535:   return bisect_in(begin(), last, key);
+16535: }
+16535: 
+16535: inline CO_Tree::iterator
+16535: CO_Tree::bisect_in(iterator first, iterator last, dimension_type key) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   const dimension_type index
+16535:     = bisect_in(dfs_index(first), dfs_index(last), key);
+16535:   return iterator(*this, index);
+16535: }
+16535: 
+16535: inline CO_Tree::const_iterator
+16535: CO_Tree::bisect_in(const_iterator first, const_iterator last,
+16535:                    dimension_type key) const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   const dimension_type index
+16535:     = bisect_in(dfs_index(first), dfs_index(last), key);
+16535:   return const_iterator(*this, index);
+16535: }
+16535: 
+16535: inline CO_Tree::iterator
+16535: CO_Tree::bisect_near(iterator hint, dimension_type key) {
+16535:   if (hint == end()) {
+16535:     return bisect(key);
+16535:   }
+16535:   const dimension_type index
+16535:     = bisect_near(dfs_index(hint), key);
+16535:   return iterator(*this, index);
+16535: }
+16535: 
+16535: inline CO_Tree::const_iterator
+16535: CO_Tree::bisect_near(const_iterator hint, dimension_type key) const {
+16535:   if (hint == end()) {
+16535:     return bisect(key);
+16535:   }
+16535:   const dimension_type index = bisect_near(dfs_index(hint), key);
+16535:   return const_iterator(*this, index);
+16535: }
+16535: 
+16535: inline void
+16535: CO_Tree::fast_shift(dimension_type i, iterator itr) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   indexes[dfs_index(itr)] = i;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline void
+16535: CO_Tree::insert_in_empty_tree(dimension_type key,
+16535:                               data_type_const_reference data1) {
+16535:   ((void) 0);
+16535:   rebuild_bigger_tree();
+16535:   tree_iterator itr(*this);
+16535:   ((void) 0);
+16535:   new(&(*itr)) data_type(data1);
+16535: 
+16535: 
+16535:   itr.index() = key;
+16535:   ++size_;
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline bool
+16535: CO_Tree::is_less_than_ratio(dimension_type numer, dimension_type denom,
+16535:                             dimension_type ratio) {
+16535:   ((void) 0);
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   return 100*numer < ratio*denom;
+16535: }
+16535: 
+16535: inline bool
+16535: CO_Tree::is_greater_than_ratio(dimension_type numer, dimension_type denom,
+16535:                                dimension_type ratio) {
+16535:   ((void) 0);
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   return 100*numer > ratio*denom;
+16535: }
+16535: 
+16535: inline void
+16535: CO_Tree::rebuild_smaller_tree() {
+16535:   ((void) 0);
+16535:   CO_Tree new_tree;
+16535:   new_tree.init(reserved_size / 2);
+16535:   new_tree.move_data_from(*this);
+16535:   m_swap(new_tree);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline void
+16535: CO_Tree::refresh_cached_iterators() {
+16535:   cached_end = iterator(*this, reserved_size + 1);
+16535:   cached_const_end = const_iterator(*this, reserved_size + 1);
+16535: }
+16535: 
+16535: inline void
+16535: CO_Tree::move_data_element(data_type& to, data_type& from) {
+16535: # 354 "../../src/CO_Tree_inlines.hh"
+16535:   std::memcpy(&to, &from, sizeof(data_type));
+16535: }
+16535: 
+16535: 
+16535: inline
+16535: CO_Tree::const_iterator::const_iterator()
+16535:   : current_index(0), current_data(0) {
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: CO_Tree::const_iterator::const_iterator(const CO_Tree& tree1)
+16535:   : current_index(&(tree1.indexes[1])), current_data(&(tree1.data[1])) {
+16535: 
+16535: 
+16535: 
+16535:   if (!tree1.empty()) {
+16535:     while (*current_index == unused_index) {
+16535:       ++current_index;
+16535:       ++current_data;
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: CO_Tree::const_iterator::const_iterator(const CO_Tree& tree1,
+16535:                                         dimension_type i)
+16535:   : current_index(&(tree1.indexes[i])), current_data(&(tree1.data[i])) {
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: CO_Tree::const_iterator::const_iterator(const const_iterator& itr2) {
+16535:   (*this) = itr2;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: CO_Tree::const_iterator::const_iterator(const iterator& itr2) {
+16535:   (*this) = itr2;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline void
+16535: CO_Tree::const_iterator::m_swap(const_iterator& itr) {
+16535:   using std::swap;
+16535:   swap(current_data, itr.current_data);
+16535:   swap(current_index, itr.current_index);
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline CO_Tree::const_iterator&
+16535: CO_Tree::const_iterator::operator=(const const_iterator& itr2) {
+16535:   current_index = itr2.current_index;
+16535:   current_data = itr2.current_data;
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline CO_Tree::const_iterator&
+16535: CO_Tree::const_iterator::operator=(const iterator& itr2) {
+16535:   current_index = itr2.current_index;
+16535:   current_data = itr2.current_data;
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline CO_Tree::const_iterator&
+16535: CO_Tree::const_iterator::operator++() {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:   ++current_index;
+16535:   ++current_data;
+16535:   while (*current_index == unused_index) {
+16535:     ++current_index;
+16535:     ++current_data;
+16535:   }
+16535:   ((void) 0);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline CO_Tree::const_iterator&
+16535: CO_Tree::const_iterator::operator--() {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   --current_index;
+16535:   --current_data;
+16535:   while (*current_index == unused_index) {
+16535:     --current_index;
+16535:     --current_data;
+16535:   }
+16535:   ((void) 0);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline CO_Tree::const_iterator
+16535: CO_Tree::const_iterator::operator++(int) {
+16535:   const_iterator itr(*this);
+16535:   ++(*this);
+16535:   return itr;
+16535: }
+16535: 
+16535: inline CO_Tree::const_iterator
+16535: CO_Tree::const_iterator::operator--(int) {
+16535:   const_iterator itr(*this);
+16535:   --(*this);
+16535:   return itr;
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: CO_Tree::const_iterator::operator*() const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:   return *current_data;
+16535: }
+16535: 
+16535: inline dimension_type
+16535: CO_Tree::const_iterator::index() const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:   return *current_index;
+16535: }
+16535: 
+16535: inline bool
+16535: CO_Tree::const_iterator::operator==(const const_iterator& x) const {
+16535:   ((void) 0)
+16535:                                                  ;
+16535:   ((void) 0);
+16535:   return (current_index == x.current_index);
+16535: }
+16535: 
+16535: inline bool
+16535: CO_Tree::const_iterator::operator!=(const const_iterator& x) const {
+16535:   return !(*this == x);
+16535: }
+16535: 
+16535: 
+16535: inline
+16535: CO_Tree::iterator::iterator()
+16535:   : current_index(0), current_data(0) {
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: CO_Tree::iterator::iterator(CO_Tree& tree1)
+16535:   : current_index(&(tree1.indexes[1])), current_data(&(tree1.data[1])) {
+16535: 
+16535: 
+16535: 
+16535:   if (!tree1.empty()) {
+16535:     while (*current_index == unused_index) {
+16535:       ++current_index;
+16535:       ++current_data;
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: CO_Tree::iterator::iterator(CO_Tree& tree1, dimension_type i)
+16535:   : current_index(&(tree1.indexes[i])), current_data(&(tree1.data[i])) {
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: CO_Tree::iterator::iterator(const tree_iterator& itr) {
+16535:   *this = itr;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: CO_Tree::iterator::iterator(const iterator& itr2) {
+16535:   (*this) = itr2;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline void
+16535: CO_Tree::iterator::m_swap(iterator& itr) {
+16535:   using std::swap;
+16535:   swap(current_data, itr.current_data);
+16535:   swap(current_index, itr.current_index);
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline CO_Tree::iterator&
+16535: CO_Tree::iterator::operator=(const tree_iterator& itr) {
+16535:   current_index = &(itr.tree.indexes[itr.dfs_index()]);
+16535:   current_data = &(itr.tree.data[itr.dfs_index()]);
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline CO_Tree::iterator&
+16535: CO_Tree::iterator::operator=(const iterator& itr2) {
+16535:   current_index = itr2.current_index;
+16535:   current_data = itr2.current_data;
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline CO_Tree::iterator&
+16535: CO_Tree::iterator::operator++() {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:   ++current_index;
+16535:   ++current_data;
+16535:   while (*current_index == unused_index) {
+16535:     ++current_index;
+16535:     ++current_data;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline CO_Tree::iterator&
+16535: CO_Tree::iterator::operator--() {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   --current_index;
+16535:   --current_data;
+16535:   while (*current_index == unused_index) {
+16535:     --current_index;
+16535:     --current_data;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline CO_Tree::iterator
+16535: CO_Tree::iterator::operator++(int) {
+16535:   iterator itr(*this);
+16535:   ++(*this);
+16535:   return itr;
+16535: }
+16535: 
+16535: inline CO_Tree::iterator
+16535: CO_Tree::iterator::operator--(int) {
+16535:   iterator itr(*this);
+16535:   --(*this);
+16535:   return itr;
+16535: }
+16535: 
+16535: inline CO_Tree::data_type&
+16535: CO_Tree::iterator::operator*() {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:   return *current_data;
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: CO_Tree::iterator::operator*() const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:   return *current_data;
+16535: }
+16535: 
+16535: inline dimension_type
+16535: CO_Tree::iterator::index() const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:   return *current_index;
+16535: }
+16535: 
+16535: inline bool
+16535: CO_Tree::iterator::operator==(const iterator& x) const {
+16535:   ((void) 0)
+16535:                                                  ;
+16535:   ((void) 0);
+16535:   return (current_index == x.current_index);
+16535: }
+16535: 
+16535: inline bool
+16535: CO_Tree::iterator::operator!=(const iterator& x) const {
+16535:   return !(*this == x);
+16535: }
+16535: 
+16535: 
+16535: inline
+16535: CO_Tree::tree_iterator::tree_iterator(CO_Tree& tree1)
+16535:   : tree(tree1) {
+16535:   ((void) 0);
+16535:   get_root();
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: CO_Tree::tree_iterator::tree_iterator(CO_Tree& tree1, dimension_type i1)
+16535:   : tree(tree1) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   i = i1;
+16535:   offset = least_significant_one_mask(i);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: CO_Tree::tree_iterator::tree_iterator(const iterator& itr, CO_Tree& tree1)
+16535:   : tree(tree1) {
+16535:   ((void) 0);
+16535:   *this = itr;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline CO_Tree::tree_iterator&
+16535: CO_Tree::tree_iterator::operator=(const tree_iterator& itr) {
+16535:   ((void) 0);
+16535:   i = itr.i;
+16535:   offset = itr.offset;
+16535:   return *this;
+16535: }
+16535: 
+16535: inline CO_Tree::tree_iterator&
+16535: CO_Tree::tree_iterator::operator=(const iterator& itr) {
+16535:   ((void) 0);
+16535:   i = tree.dfs_index(itr);
+16535:   offset = least_significant_one_mask(i);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline bool
+16535: CO_Tree::tree_iterator::operator==(const tree_iterator& itr) const {
+16535:   return i == itr.i;
+16535: }
+16535: 
+16535: inline bool
+16535: CO_Tree::tree_iterator::operator!=(const tree_iterator& itr) const {
+16535:   return !(*this == itr);
+16535: }
+16535: 
+16535: inline void
+16535: CO_Tree::tree_iterator::get_root() {
+16535:   i = tree.reserved_size / 2 + 1;
+16535:   offset = i;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline void
+16535: CO_Tree::tree_iterator::get_left_child() {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   offset /= 2;
+16535:   i -= offset;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline void
+16535: CO_Tree::tree_iterator::get_right_child() {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   offset /= 2;
+16535:   i += offset;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline void
+16535: CO_Tree::tree_iterator::get_parent() {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   i &= ~offset;
+16535:   offset *= 2;
+16535:   i |= offset;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline void
+16535: CO_Tree::tree_iterator::follow_left_children_with_value() {
+16535:   ((void) 0);
+16535:   const dimension_type* p = tree.indexes;
+16535:   p += i;
+16535:   p -= (offset - 1);
+16535:   while (*p == unused_index) {
+16535:     ++p;
+16535:   }
+16535:   const std::ptrdiff_t distance = p - tree.indexes;
+16535:   ((void) 0);
+16535:   i = static_cast<dimension_type>(distance);
+16535:   offset = least_significant_one_mask(i);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline void
+16535: CO_Tree::tree_iterator::follow_right_children_with_value() {
+16535:   ((void) 0);
+16535:   const dimension_type* p = tree.indexes;
+16535:   p += i;
+16535:   p += (offset - 1);
+16535:   while (*p == unused_index) {
+16535:     --p;
+16535:   }
+16535:   const std::ptrdiff_t distance = p - tree.indexes;
+16535:   ((void) 0);
+16535:   i = static_cast<dimension_type>(distance);
+16535:   offset = least_significant_one_mask(i);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline bool
+16535: CO_Tree::tree_iterator::is_root() const {
+16535: 
+16535:   ((void) 0);
+16535:   return offset == (tree.reserved_size / 2 + 1);
+16535: }
+16535: 
+16535: inline bool
+16535: CO_Tree::tree_iterator::is_right_child() const {
+16535:   if (is_root()) {
+16535:     return false;
+16535:   }
+16535:   return (i & (2*offset)) != 0;
+16535: }
+16535: 
+16535: inline bool
+16535: CO_Tree::tree_iterator::is_leaf() const {
+16535:   return offset == 1;
+16535: }
+16535: 
+16535: inline CO_Tree::data_type&
+16535: CO_Tree::tree_iterator::operator*() {
+16535:   return tree.data[i];
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: CO_Tree::tree_iterator::operator*() const {
+16535:   return tree.data[i];
+16535: }
+16535: 
+16535: inline dimension_type&
+16535: CO_Tree::tree_iterator::index() {
+16535:   return tree.indexes[i];
+16535: }
+16535: 
+16535: inline dimension_type
+16535: CO_Tree::tree_iterator::index() const {
+16535:   return tree.indexes[i];
+16535: }
+16535: 
+16535: inline dimension_type
+16535: CO_Tree::tree_iterator::dfs_index() const {
+16535:   return i;
+16535: }
+16535: 
+16535: inline dimension_type
+16535: CO_Tree::tree_iterator::get_offset() const {
+16535:   return offset;
+16535: }
+16535: 
+16535: inline CO_Tree::height_t
+16535: CO_Tree::tree_iterator::depth() const {
+16535:   return integer_log2((tree.reserved_size + 1) / offset);
+16535: }
+16535: 
+16535: inline void
+16535: swap(CO_Tree& x, CO_Tree& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: inline void
+16535: swap(CO_Tree::const_iterator& x, CO_Tree::const_iterator& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: inline void
+16535: swap(CO_Tree::iterator& x, CO_Tree::iterator& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 1558 "../../src/CO_Tree_defs.hh" 2
+16535: # 1 "../../src/CO_Tree_templates.hh" 1
+16535: # 27 "../../src/CO_Tree_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Iterator>
+16535: CO_Tree::CO_Tree(Iterator i, dimension_type n) {
+16535: 
+16535:   if (n == 0) {
+16535:     init(0);
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535:   const dimension_type new_max_depth = integer_log2(n) + 1;
+16535:   reserved_size = (static_cast<dimension_type>(1) << new_max_depth) - 1;
+16535: 
+16535:   if (is_greater_than_ratio(n, reserved_size, max_density_percent)
+16535:       && reserved_size != 3) {
+16535:     reserved_size = reserved_size*2 + 1;
+16535:   }
+16535: 
+16535:   init(reserved_size);
+16535: 
+16535:   tree_iterator root(*this);
+16535: # 57 "../../src/CO_Tree_templates.hh"
+16535:   static std::pair<dimension_type, signed char>
+16535:     stack[4U * ((sizeof(dimension_type)) * static_cast<std::size_t>(8)) + 1U];
+16535: 
+16535:   dimension_type stack_first_empty = 0;
+16535: # 71 "../../src/CO_Tree_templates.hh"
+16535:   stack[0].first = n;
+16535:   stack[0].second = 3;
+16535:   ++stack_first_empty;
+16535: 
+16535:   while (stack_first_empty != 0) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     const dimension_type top_n = stack[stack_first_empty - 1].first;
+16535:     const signed char top_operation = stack[stack_first_empty - 1].second;
+16535: 
+16535:     switch (top_operation) {
+16535: 
+16535:     case 0:
+16535:       root.get_parent();
+16535:       --stack_first_empty;
+16535:       continue;
+16535: 
+16535:     case 1:
+16535:       root.get_left_child();
+16535:       break;
+16535: 
+16535:     case 2:
+16535:       root.get_right_child();
+16535:       break;
+16535: # 108 "../../src/CO_Tree_templates.hh"
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:     if (top_n == 0) {
+16535:       --stack_first_empty;
+16535:     }
+16535:     else {
+16535:       if (top_n == 1) {
+16535:         ((void) 0);
+16535:         root.index() = i.index();
+16535:         new(&(*root)) data_type(*i);
+16535:         ++i;
+16535:         --stack_first_empty;
+16535:       }
+16535:       else {
+16535:         ((void) 0);
+16535: 
+16535:         const dimension_type half = (top_n + 1) / 2;
+16535:         stack[stack_first_empty - 1].second = 0;
+16535:         stack[stack_first_empty ] = std::make_pair(top_n - half, 2);
+16535:         stack[stack_first_empty + 1] = std::make_pair(1, 3);
+16535:         stack[stack_first_empty + 2].second = 0;
+16535:         stack[stack_first_empty + 3] = std::make_pair(half - 1, 1);
+16535:         stack_first_empty += 4;
+16535:       }
+16535:     }
+16535:   }
+16535:   size_ = n;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: }
+16535: # 1559 "../../src/CO_Tree_defs.hh" 2
+16535: # 30 "../../src/Sparse_Row_defs.hh" 2
+16535: # 58 "../../src/Sparse_Row_defs.hh"
+16535: class Parma_Polyhedra_Library::Sparse_Row {
+16535: 
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef CO_Tree::iterator iterator;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef CO_Tree::const_iterator const_iterator;
+16535: # 85 "../../src/Sparse_Row_defs.hh"
+16535:   explicit Sparse_Row(dimension_type n = 0);
+16535: # 99 "../../src/Sparse_Row_defs.hh"
+16535:   Sparse_Row(dimension_type n, dimension_type capacity);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Sparse_Row(const Sparse_Row& y, dimension_type capacity);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Sparse_Row(const Sparse_Row& y, dimension_type sz, dimension_type capacity);
+16535: # 122 "../../src/Sparse_Row_defs.hh"
+16535:   explicit Sparse_Row(const Dense_Row& row);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Sparse_Row(const Dense_Row& y, dimension_type sz, dimension_type capacity);
+16535: 
+16535:   Sparse_Row& operator=(const Dense_Row& row);
+16535: # 139 "../../src/Sparse_Row_defs.hh"
+16535:   void m_swap(Sparse_Row& x);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type size() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type num_stored_elements() const;
+16535: # 164 "../../src/Sparse_Row_defs.hh"
+16535:   void resize(dimension_type n);
+16535: # 176 "../../src/Sparse_Row_defs.hh"
+16535:   void expand_within_capacity(dimension_type n);
+16535: # 189 "../../src/Sparse_Row_defs.hh"
+16535:   void shrink(dimension_type n);
+16535: # 205 "../../src/Sparse_Row_defs.hh"
+16535:   void delete_element_and_shift(dimension_type i);
+16535: # 226 "../../src/Sparse_Row_defs.hh"
+16535:   void add_zeroes_and_shift(dimension_type n, dimension_type i);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   iterator begin();
+16535: # 243 "../../src/Sparse_Row_defs.hh"
+16535:   const iterator& end();
+16535: 
+16535: 
+16535:   const_iterator begin() const;
+16535: 
+16535: 
+16535:   const const_iterator& end() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const_iterator cbegin() const;
+16535: # 266 "../../src/Sparse_Row_defs.hh"
+16535:   const const_iterator& cend() const;
+16535: 
+16535: 
+16535:   static dimension_type max_size();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void clear();
+16535: # 293 "../../src/Sparse_Row_defs.hh"
+16535:   Coefficient& operator[](dimension_type i);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference operator[](dimension_type i) const;
+16535: # 311 "../../src/Sparse_Row_defs.hh"
+16535:   Coefficient_traits::const_reference get(dimension_type i) const;
+16535: # 323 "../../src/Sparse_Row_defs.hh"
+16535:   iterator find(dimension_type i);
+16535: # 341 "../../src/Sparse_Row_defs.hh"
+16535:   iterator find(iterator itr, dimension_type i);
+16535: # 353 "../../src/Sparse_Row_defs.hh"
+16535:   const_iterator find(dimension_type i) const;
+16535: # 371 "../../src/Sparse_Row_defs.hh"
+16535:   const_iterator find(const_iterator itr, dimension_type i) const;
+16535: # 387 "../../src/Sparse_Row_defs.hh"
+16535:   iterator lower_bound(dimension_type i);
+16535: # 409 "../../src/Sparse_Row_defs.hh"
+16535:   iterator lower_bound(iterator itr, dimension_type i);
+16535: # 426 "../../src/Sparse_Row_defs.hh"
+16535:   const_iterator lower_bound(dimension_type i) const;
+16535: # 448 "../../src/Sparse_Row_defs.hh"
+16535:   const_iterator lower_bound(const_iterator itr, dimension_type i) const;
+16535: # 465 "../../src/Sparse_Row_defs.hh"
+16535:   iterator insert(dimension_type i, Coefficient_traits::const_reference x);
+16535: # 488 "../../src/Sparse_Row_defs.hh"
+16535:   iterator insert(iterator itr, dimension_type i,
+16535:                   Coefficient_traits::const_reference x);
+16535: # 503 "../../src/Sparse_Row_defs.hh"
+16535:   iterator insert(dimension_type i);
+16535: # 523 "../../src/Sparse_Row_defs.hh"
+16535:   iterator insert(iterator itr, dimension_type i);
+16535: # 537 "../../src/Sparse_Row_defs.hh"
+16535:   void swap_coefficients(dimension_type i, dimension_type j);
+16535: # 547 "../../src/Sparse_Row_defs.hh"
+16535:   void fast_swap(dimension_type i, iterator itr);
+16535: # 559 "../../src/Sparse_Row_defs.hh"
+16535:   void swap_coefficients(iterator i, iterator j);
+16535: # 574 "../../src/Sparse_Row_defs.hh"
+16535:   iterator reset(iterator i);
+16535: # 592 "../../src/Sparse_Row_defs.hh"
+16535:   iterator reset(iterator first, iterator last);
+16535: # 606 "../../src/Sparse_Row_defs.hh"
+16535:   void reset(dimension_type i);
+16535: # 621 "../../src/Sparse_Row_defs.hh"
+16535:   void reset_after(dimension_type i);
+16535: # 630 "../../src/Sparse_Row_defs.hh"
+16535:   void normalize();
+16535: # 655 "../../src/Sparse_Row_defs.hh"
+16535:   template <typename Func1, typename Func2>
+16535:   void combine_needs_first(const Sparse_Row& y,
+16535:                            const Func1& f, const Func2& g);
+16535: # 683 "../../src/Sparse_Row_defs.hh"
+16535:   template <typename Func1, typename Func2>
+16535:   void combine_needs_second(const Sparse_Row& y,
+16535:                             const Func1& g, const Func2& h);
+16535: # 715 "../../src/Sparse_Row_defs.hh"
+16535:   template <typename Func1, typename Func2, typename Func3>
+16535:   void combine(const Sparse_Row& y,
+16535:                const Func1& f, const Func2& g, const Func3& h);
+16535: # 744 "../../src/Sparse_Row_defs.hh"
+16535:   void linear_combine(const Sparse_Row& y,
+16535:                       Coefficient_traits::const_reference coeff1,
+16535:                       Coefficient_traits::const_reference coeff2);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void linear_combine(const Sparse_Row& y,
+16535:                       Coefficient_traits::const_reference c1,
+16535:                       Coefficient_traits::const_reference c2,
+16535:                       dimension_type start, dimension_type end);
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: # 783 "../../src/Sparse_Row_defs.hh"
+16535:   memory_size_type external_memory_in_bytes(dimension_type capacity) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: # 800 "../../src/Sparse_Row_defs.hh"
+16535:   memory_size_type total_memory_in_bytes(dimension_type capacity) const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: # 812 "../../src/Sparse_Row_defs.hh"
+16535:   bool OK(dimension_type capacity) const;
+16535: 
+16535: private:
+16535: 
+16535:   CO_Tree tree;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type size_;
+16535: };
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: void swap(Parma_Polyhedra_Library::Sparse_Row& x,
+16535:           Parma_Polyhedra_Library::Sparse_Row& y);
+16535: 
+16535: void swap(Parma_Polyhedra_Library::Sparse_Row& x,
+16535:           Parma_Polyhedra_Library::Dense_Row& y);
+16535: 
+16535: void swap(Parma_Polyhedra_Library::Dense_Row& x,
+16535:           Parma_Polyhedra_Library::Sparse_Row& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: bool operator==(const Sparse_Row& x, const Sparse_Row& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: bool operator!=(const Sparse_Row& x, const Sparse_Row& y);
+16535: 
+16535: bool operator==(const Dense_Row& x, const Sparse_Row& y);
+16535: bool operator!=(const Dense_Row& x, const Sparse_Row& y);
+16535: 
+16535: bool operator==(const Sparse_Row& x, const Dense_Row& y);
+16535: bool operator!=(const Sparse_Row& x, const Dense_Row& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: void linear_combine(Sparse_Row& x, const Dense_Row& y,
+16535:                     Coefficient_traits::const_reference coeff1,
+16535:                     Coefficient_traits::const_reference coeff2);
+16535: # 876 "../../src/Sparse_Row_defs.hh"
+16535: void linear_combine(Sparse_Row& x, const Dense_Row& y,
+16535:                     Coefficient_traits::const_reference c1,
+16535:                     Coefficient_traits::const_reference c2,
+16535:                     dimension_type start, dimension_type end);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: void linear_combine(Dense_Row& x, const Sparse_Row& y,
+16535:                     Coefficient_traits::const_reference coeff1,
+16535:                     Coefficient_traits::const_reference coeff2);
+16535: # 898 "../../src/Sparse_Row_defs.hh"
+16535: void linear_combine(Dense_Row& x, const Sparse_Row& y,
+16535:                     Coefficient_traits::const_reference c1,
+16535:                     Coefficient_traits::const_reference c2,
+16535:                     dimension_type start, dimension_type end);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: void linear_combine(Sparse_Row& x, const Sparse_Row& y,
+16535:                     Coefficient_traits::const_reference coeff1,
+16535:                     Coefficient_traits::const_reference coeff2);
+16535: # 920 "../../src/Sparse_Row_defs.hh"
+16535: void linear_combine(Sparse_Row& x, const Sparse_Row& y,
+16535:                     Coefficient_traits::const_reference c1,
+16535:                     Coefficient_traits::const_reference c2,
+16535:                     dimension_type start, dimension_type end);
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Sparse_Row_inlines.hh" 1
+16535: # 29 "../../src/Sparse_Row_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline
+16535: Sparse_Row::Sparse_Row(dimension_type n)
+16535:   : size_(n) {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Sparse_Row::Sparse_Row(dimension_type n, dimension_type)
+16535:   : size_(n) {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Sparse_Row::Sparse_Row(const Sparse_Row& y, dimension_type)
+16535:   : tree(y.tree), size_(y.size_) {
+16535: }
+16535: 
+16535: inline
+16535: Sparse_Row::Sparse_Row(const Sparse_Row& y, dimension_type sz, dimension_type)
+16535:   : tree(y.begin(),
+16535:          std::distance(y.begin(), y.lower_bound(std::min(y.size(), sz)))),
+16535:     size_(sz) {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline void
+16535: Sparse_Row::m_swap(Sparse_Row& x) {
+16535:   using std::swap;
+16535:   swap(tree, x.tree);
+16535:   swap(size_, x.size_);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Sparse_Row::size() const {
+16535:   return size_;
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Sparse_Row::num_stored_elements() const {
+16535:   return tree.size();
+16535: }
+16535: 
+16535: inline void
+16535: Sparse_Row::resize(dimension_type n) {
+16535:   if (n < size_) {
+16535:     reset_after(n);
+16535:   }
+16535:   size_ = n;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline void
+16535: Sparse_Row::shrink(dimension_type n) {
+16535:   ((void) 0);
+16535:   resize(n);
+16535: }
+16535: 
+16535: inline void
+16535: Sparse_Row::expand_within_capacity(dimension_type n) {
+16535:   ((void) 0);
+16535:   resize(n);
+16535: }
+16535: 
+16535: inline void
+16535: Sparse_Row::delete_element_and_shift(dimension_type i) {
+16535:   ((void) 0);
+16535:   tree.erase_element_and_shift_left(i);
+16535:   --size_;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline void
+16535: Sparse_Row::add_zeroes_and_shift(dimension_type n, dimension_type i) {
+16535:   ((void) 0);
+16535:   tree.increase_keys_from(i, n);
+16535:   size_ += n;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline Sparse_Row::iterator
+16535: Sparse_Row::begin() {
+16535:   return tree.begin();
+16535: }
+16535: 
+16535: inline const Sparse_Row::iterator&
+16535: Sparse_Row::end() {
+16535:   return tree.end();
+16535: }
+16535: 
+16535: inline Sparse_Row::const_iterator
+16535: Sparse_Row::begin() const {
+16535:   return tree.cbegin();
+16535: }
+16535: 
+16535: inline const Sparse_Row::const_iterator&
+16535: Sparse_Row::end() const {
+16535:   return tree.cend();
+16535: }
+16535: 
+16535: inline Sparse_Row::const_iterator
+16535: Sparse_Row::cbegin() const {
+16535:   return tree.cbegin();
+16535: }
+16535: 
+16535: inline const Sparse_Row::const_iterator&
+16535: Sparse_Row::cend() const {
+16535:   return tree.cend();
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Sparse_Row::max_size() {
+16535:   return CO_Tree::max_size();
+16535: }
+16535: 
+16535: inline void
+16535: Sparse_Row::clear() {
+16535:   tree.clear();
+16535: }
+16535: 
+16535: inline Coefficient&
+16535: Sparse_Row::operator[](dimension_type i) {
+16535:   ((void) 0);
+16535:   iterator itr = insert(i);
+16535:   return *itr;
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: Sparse_Row::operator[](dimension_type i) const {
+16535:   return get(i);
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: Sparse_Row::get(dimension_type i) const {
+16535:   ((void) 0);
+16535:   if (tree.empty()) {
+16535:     return Coefficient_zero();
+16535:   }
+16535:   const_iterator itr = find(i);
+16535:   if (itr != end()) {
+16535:     return *itr;
+16535:   }
+16535:   else {
+16535:     return Coefficient_zero();
+16535:   }
+16535: }
+16535: 
+16535: inline Sparse_Row::iterator
+16535: Sparse_Row::find(dimension_type i) {
+16535:   ((void) 0);
+16535: 
+16535:   iterator itr = tree.bisect(i);
+16535: 
+16535:   if (itr != end() && itr.index() == i) {
+16535:     return itr;
+16535:   }
+16535:   return end();
+16535: }
+16535: 
+16535: inline Sparse_Row::iterator
+16535: Sparse_Row::find(iterator hint, dimension_type i) {
+16535:   ((void) 0);
+16535: 
+16535:   iterator itr = tree.bisect_near(hint, i);
+16535: 
+16535:   if (itr != end() && itr.index() == i) {
+16535:     return itr;
+16535:   }
+16535:   return end();
+16535: }
+16535: 
+16535: inline Sparse_Row::const_iterator
+16535: Sparse_Row::find(dimension_type i) const {
+16535:   ((void) 0);
+16535: 
+16535:   const_iterator itr = tree.bisect(i);
+16535: 
+16535:   if (itr != end() && itr.index() == i) {
+16535:     return itr;
+16535:   }
+16535: 
+16535:   return end();
+16535: }
+16535: 
+16535: inline Sparse_Row::const_iterator
+16535: Sparse_Row::find(const_iterator hint, dimension_type i) const {
+16535:   ((void) 0);
+16535: 
+16535:   const_iterator itr = tree.bisect_near(hint, i);
+16535: 
+16535:   if (itr != end() && itr.index() == i) {
+16535:     return itr;
+16535:   }
+16535:   return end();
+16535: }
+16535: 
+16535: inline Sparse_Row::iterator
+16535: Sparse_Row::lower_bound(dimension_type i) {
+16535:   ((void) 0);
+16535: 
+16535:   iterator itr = tree.bisect(i);
+16535: 
+16535:   if (itr == end()) {
+16535:     return end();
+16535:   }
+16535: 
+16535:   if (itr.index() < i) {
+16535:     ++itr;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: 
+16535:   return itr;
+16535: }
+16535: 
+16535: inline Sparse_Row::iterator
+16535: Sparse_Row::lower_bound(iterator hint, dimension_type i) {
+16535:   ((void) 0);
+16535: 
+16535:   iterator itr = tree.bisect_near(hint, i);
+16535: 
+16535:   if (itr == end()) {
+16535:     return end();
+16535:   }
+16535: 
+16535:   if (itr.index() < i) {
+16535:     ++itr;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: 
+16535:   return itr;
+16535: }
+16535: 
+16535: inline Sparse_Row::const_iterator
+16535: Sparse_Row::lower_bound(dimension_type i) const {
+16535:   ((void) 0);
+16535: 
+16535:   const_iterator itr = tree.bisect(i);
+16535: 
+16535:   if (itr == end()) {
+16535:     return end();
+16535:   }
+16535: 
+16535:   if (itr.index() < i) {
+16535:     ++itr;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: 
+16535:   return itr;
+16535: }
+16535: 
+16535: inline Sparse_Row::const_iterator
+16535: Sparse_Row::lower_bound(const_iterator hint, dimension_type i) const {
+16535:   ((void) 0);
+16535: 
+16535:   const_iterator itr = tree.bisect_near(hint, i);
+16535: 
+16535:   if (itr == end()) {
+16535:     return end();
+16535:   }
+16535: 
+16535:   if (itr.index() < i) {
+16535:     ++itr;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: 
+16535:   return itr;
+16535: }
+16535: 
+16535: inline Sparse_Row::iterator
+16535: Sparse_Row::insert(dimension_type i, Coefficient_traits::const_reference x) {
+16535:   ((void) 0);
+16535:   return tree.insert(i, x);
+16535: }
+16535: 
+16535: inline Sparse_Row::iterator
+16535: Sparse_Row::insert(iterator itr, dimension_type i,
+16535:                    Coefficient_traits::const_reference x) {
+16535:   ((void) 0);
+16535:   return tree.insert(itr, i, x);
+16535: }
+16535: 
+16535: inline Sparse_Row::iterator
+16535: Sparse_Row::insert(dimension_type i) {
+16535:   ((void) 0);
+16535:   return tree.insert(i);
+16535: }
+16535: 
+16535: inline Sparse_Row::iterator
+16535: Sparse_Row::insert(iterator itr, dimension_type i) {
+16535:   ((void) 0);
+16535:   return tree.insert(itr, i);
+16535: }
+16535: 
+16535: inline void
+16535: Sparse_Row::swap_coefficients(iterator i, iterator j) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   using std::swap;
+16535:   swap(*i, *j);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline void
+16535: Sparse_Row::fast_swap(dimension_type i, iterator itr) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   tree.fast_shift(i, itr);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline Sparse_Row::iterator
+16535: Sparse_Row::reset(iterator i) {
+16535:   iterator res = tree.erase(i);
+16535:   ((void) 0);
+16535:   return res;
+16535: }
+16535: 
+16535: inline void
+16535: Sparse_Row::reset(dimension_type i) {
+16535:   ((void) 0);
+16535: 
+16535:   tree.erase(i);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Sparse_Row::external_memory_in_bytes() const {
+16535:   return tree.external_memory_in_bytes();
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Sparse_Row::external_memory_in_bytes(dimension_type ) const {
+16535:   return external_memory_in_bytes();
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Sparse_Row::total_memory_in_bytes() const {
+16535:   return external_memory_in_bytes() + sizeof(*this);
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Sparse_Row::total_memory_in_bytes(dimension_type ) const {
+16535:   return total_memory_in_bytes();
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: inline void
+16535: swap(Sparse_Row& x, Sparse_Row& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 928 "../../src/Sparse_Row_defs.hh" 2
+16535: # 1 "../../src/Sparse_Row_templates.hh" 1
+16535: # 27 "../../src/Sparse_Row_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: template <typename Func1, typename Func2>
+16535: void
+16535: Sparse_Row::combine_needs_first(const Sparse_Row& y,
+16535:                                 const Func1& f, const Func2& g) {
+16535:   if (this == &y) {
+16535:     for (iterator i = begin(), i_end = end(); i != i_end; ++i) {
+16535:       g(*i, *i);
+16535:     }
+16535:   }
+16535:   else {
+16535:     iterator i = begin();
+16535: 
+16535: 
+16535: 
+16535:     const iterator& i_end = end();
+16535:     const_iterator j = y.begin();
+16535:     const_iterator j_end = y.end();
+16535:     while (i != i_end && j != j_end) {
+16535:       if (i.index() == j.index()) {
+16535:         g(*i, *j);
+16535:         if (*i == 0) {
+16535:           i = reset(i);
+16535:         }
+16535:         else {
+16535:           ++i;
+16535:         }
+16535:         ++j;
+16535:       }
+16535:       else
+16535:         if (i.index() < j.index()) {
+16535:           f(*i);
+16535:           if (*i == 0) {
+16535:             i = reset(i);
+16535:           }
+16535:           else {
+16535:             ++i;
+16535:           }
+16535:         }
+16535:         else {
+16535:           j = y.lower_bound(j, i.index());
+16535:         }
+16535:     }
+16535:     while (i != i_end) {
+16535:       f(*i);
+16535:       if (*i == 0) {
+16535:         i = reset(i);
+16535:       }
+16535:       else {
+16535:         ++i;
+16535:       }
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename Func1, typename Func2>
+16535: void
+16535: Sparse_Row::combine_needs_second(const Sparse_Row& y,
+16535:                                  const Func1& g,
+16535:                                  const Func2& ) {
+16535:   iterator i = begin();
+16535:   for (const_iterator j = y.begin(), j_end = y.end(); j != j_end; ++j) {
+16535:     i = insert(i, j.index());
+16535:     g(*i, *j);
+16535:     if (*i == 0) {
+16535:       i = reset(i);
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename Func1, typename Func2, typename Func3>
+16535: void
+16535: Sparse_Row::combine(const Sparse_Row& y, const Func1& f,
+16535:                     const Func2& g, const Func3& h) {
+16535:   if (this == &y) {
+16535:     for (iterator i = begin(), i_end = end(); i != i_end; ++i) {
+16535:       g(*i, *i);
+16535:     }
+16535:   }
+16535:   else {
+16535:     iterator i = begin();
+16535: 
+16535: 
+16535: 
+16535:     const iterator& i_end = end();
+16535:     const_iterator j = y.begin();
+16535:     const_iterator j_end = y.end();
+16535:     while (i != i_end && j != j_end) {
+16535:       if (i.index() == j.index()) {
+16535:         g(*i, *j);
+16535:         if (*i == 0) {
+16535:           i = reset(i);
+16535:         }
+16535:         else {
+16535:           ++i;
+16535:         }
+16535:         ++j;
+16535:       }
+16535:       else
+16535:         if (i.index() < j.index()) {
+16535:           f(*i);
+16535:           if (*i == 0) {
+16535:             i = reset(i);
+16535:           }
+16535:           else {
+16535:             ++i;
+16535:           }
+16535:         }
+16535:         else {
+16535:           ((void) 0);
+16535:           i = insert(i, j.index());
+16535:           h(*i, *j);
+16535:           if (*i == 0) {
+16535:             i = reset(i);
+16535:           }
+16535:           else {
+16535:             ++i;
+16535:           }
+16535:           ++j;
+16535:         }
+16535:     }
+16535:     ((void) 0);
+16535:     while (i != i_end) {
+16535:       f(*i);
+16535:       if (*i == 0) {
+16535:         i = reset(i);
+16535:       }
+16535:       else {
+16535:         ++i;
+16535:       }
+16535:     }
+16535:     while (j != j_end) {
+16535:       i = insert(i, j.index());
+16535:       h(*i, *j);
+16535:       if (*i == 0) {
+16535:         i = reset(i);
+16535:       }
+16535:       ++j;
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: }
+16535: # 929 "../../src/Sparse_Row_defs.hh" 2
+16535: # 34 "../../src/Linear_Expression_Impl_defs.hh" 2
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Row>
+16535: std::ostream&
+16535: operator<<(std::ostream& s, const Linear_Expression_Impl<Row>& e);
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 102 "../../src/Linear_Expression_Impl_defs.hh"
+16535: template <typename Row>
+16535: class Parma_Polyhedra_Library::Linear_Expression_Impl
+16535:   : public Linear_Expression_Interface {
+16535: public:
+16535: 
+16535:   Linear_Expression_Impl();
+16535: 
+16535: 
+16535:   Linear_Expression_Impl(const Linear_Expression_Impl& e);
+16535: 
+16535: 
+16535:   template <typename Row2>
+16535:   Linear_Expression_Impl(const Linear_Expression_Impl<Row2>& e);
+16535: 
+16535: 
+16535:   Linear_Expression_Impl(const Linear_Expression_Interface& e);
+16535: 
+16535: 
+16535:   virtual ~Linear_Expression_Impl();
+16535: 
+16535: 
+16535:   virtual bool OK() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   explicit Linear_Expression_Impl(Coefficient_traits::const_reference n);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Linear_Expression_Impl(Variable v);
+16535: 
+16535: 
+16535:   virtual Representation representation() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   class const_iterator: public const_iterator_interface {
+16535:   public:
+16535:     explicit const_iterator(const Row& row, dimension_type i);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     virtual const_iterator_interface* clone() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     virtual void operator++();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     virtual void operator--();
+16535: 
+16535: 
+16535:     virtual reference operator*() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     virtual Variable variable() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     virtual bool operator==(const const_iterator_interface& x) const;
+16535: 
+16535:   private:
+16535: 
+16535:     void skip_zeroes_forward();
+16535:     void skip_zeroes_backward();
+16535: 
+16535:     const Row* row;
+16535:     typename Row::const_iterator itr;
+16535:   };
+16535: 
+16535: 
+16535: 
+16535:   virtual const_iterator_interface* begin() const;
+16535: 
+16535: 
+16535: 
+16535:   virtual const_iterator_interface* end() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual const_iterator_interface* lower_bound(Variable v) const;
+16535: 
+16535: 
+16535:   static dimension_type max_space_dimension();
+16535: 
+16535: 
+16535:   virtual dimension_type space_dimension() const;
+16535: 
+16535: 
+16535:   virtual void set_space_dimension(dimension_type n);
+16535: 
+16535: 
+16535:   virtual Coefficient_traits::const_reference coefficient(Variable v) const;
+16535: 
+16535: 
+16535:   virtual void set_coefficient(Variable v,
+16535:                                Coefficient_traits::const_reference n);
+16535: 
+16535: 
+16535:   virtual Coefficient_traits::const_reference inhomogeneous_term() const;
+16535: 
+16535: 
+16535:   virtual void set_inhomogeneous_term(Coefficient_traits::const_reference n);
+16535: # 243 "../../src/Linear_Expression_Impl_defs.hh"
+16535:   virtual void linear_combine(const Linear_Expression_Interface& y, Variable v);
+16535: 
+16535: 
+16535: 
+16535:   virtual void linear_combine(const Linear_Expression_Interface& y,
+16535:                               Coefficient_traits::const_reference c1,
+16535:                               Coefficient_traits::const_reference c2);
+16535: 
+16535: 
+16535: 
+16535:   virtual void linear_combine_lax(const Linear_Expression_Interface& y,
+16535:                                   Coefficient_traits::const_reference c1,
+16535:                                   Coefficient_traits::const_reference c2);
+16535: 
+16535: 
+16535:   virtual void swap_space_dimensions(Variable v1, Variable v2);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void remove_space_dimensions(const Variables_Set& vars);
+16535: 
+16535: 
+16535: 
+16535:   virtual void shift_space_dimensions(Variable v, dimension_type n);
+16535: # 284 "../../src/Linear_Expression_Impl_defs.hh"
+16535:   virtual void permute_space_dimensions(const std::vector<Variable>& cycle);
+16535: 
+16535: 
+16535:   virtual bool is_zero() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual bool all_homogeneous_terms_are_zero() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   virtual memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   virtual void ascii_dump(std::ostream& s) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   Linear_Expression_Impl(const Linear_Expression_Interface& e,
+16535:                          dimension_type space_dim);
+16535: 
+16535: 
+16535: 
+16535:   virtual bool is_equal_to(const Linear_Expression_Interface& x) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void normalize();
+16535: 
+16535: 
+16535: 
+16535:   virtual void sign_normalize();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void negate(dimension_type first, dimension_type last);
+16535: 
+16535:   virtual Linear_Expression_Impl&
+16535:   operator+=(Coefficient_traits::const_reference n);
+16535:   virtual Linear_Expression_Impl&
+16535:   operator-=(Coefficient_traits::const_reference n);
+16535: # 357 "../../src/Linear_Expression_Impl_defs.hh"
+16535:   virtual int compare(const Linear_Expression_Interface& y) const;
+16535: 
+16535:   virtual Linear_Expression_Impl&
+16535:   operator+=(const Linear_Expression_Interface& e2);
+16535:   virtual Linear_Expression_Impl& operator+=(const Variable v);
+16535:   virtual Linear_Expression_Impl&
+16535:   operator-=(const Linear_Expression_Interface& e2);
+16535:   virtual Linear_Expression_Impl& operator-=(const Variable v);
+16535:   virtual Linear_Expression_Impl&
+16535:   operator*=(Coefficient_traits::const_reference n);
+16535:   virtual Linear_Expression_Impl&
+16535:   operator/=(Coefficient_traits::const_reference n);
+16535: 
+16535:   virtual void negate();
+16535: 
+16535:   virtual Linear_Expression_Impl&
+16535:   add_mul_assign(Coefficient_traits::const_reference n, const Variable v);
+16535: 
+16535:   virtual Linear_Expression_Impl&
+16535:   sub_mul_assign(Coefficient_traits::const_reference n, const Variable v);
+16535: 
+16535:   virtual void add_mul_assign(Coefficient_traits::const_reference factor,
+16535:                               const Linear_Expression_Interface& e2);
+16535: 
+16535:   virtual void sub_mul_assign(Coefficient_traits::const_reference factor,
+16535:                               const Linear_Expression_Interface& e2);
+16535: 
+16535:   virtual void print(std::ostream& s) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual bool all_zeroes(const Variables_Set& vars) const;
+16535: 
+16535: 
+16535: 
+16535:   virtual bool have_a_common_variable(const Linear_Expression_Interface& x,
+16535:                                       Variable first, Variable last) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual Coefficient_traits::const_reference get(dimension_type i) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void set(dimension_type i, Coefficient_traits::const_reference n);
+16535: # 416 "../../src/Linear_Expression_Impl_defs.hh"
+16535:   virtual bool all_zeroes(dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual dimension_type num_zeroes(dimension_type start, dimension_type end) const;
+16535: # 433 "../../src/Linear_Expression_Impl_defs.hh"
+16535:   virtual Coefficient gcd(dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void exact_div_assign(Coefficient_traits::const_reference c,
+16535:                                 dimension_type start, dimension_type end);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void mul_assign(Coefficient_traits::const_reference n,
+16535:                           dimension_type start, dimension_type end);
+16535: # 466 "../../src/Linear_Expression_Impl_defs.hh"
+16535:   virtual void
+16535:   linear_combine(const Linear_Expression_Interface& y, dimension_type i);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void linear_combine(const Linear_Expression_Interface& y,
+16535:                               Coefficient_traits::const_reference c1,
+16535:                               Coefficient_traits::const_reference c2,
+16535:                               dimension_type start, dimension_type end);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void linear_combine_lax(const Linear_Expression_Interface& y,
+16535:                                   Coefficient_traits::const_reference c1,
+16535:                                   Coefficient_traits::const_reference c2,
+16535:                                   dimension_type start, dimension_type end);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual dimension_type last_nonzero() const;
+16535: # 503 "../../src/Linear_Expression_Impl_defs.hh"
+16535:   virtual bool
+16535:   all_zeroes_except(const Variables_Set& vars,
+16535:                     dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void
+16535:   scalar_product_assign(Coefficient& result,
+16535:                         const Linear_Expression_Interface& y,
+16535:                         dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual int
+16535:   scalar_product_sign(const Linear_Expression_Interface& y,
+16535:                       dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual dimension_type
+16535:   first_nonzero(dimension_type first, dimension_type last) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual dimension_type
+16535:   last_nonzero(dimension_type first, dimension_type last) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void has_a_free_dimension_helper(std::set<dimension_type>& x) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual bool is_equal_to(const Linear_Expression_Interface& x,
+16535:                            dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual bool is_equal_to(const Linear_Expression_Interface& x,
+16535:                            Coefficient_traits::const_reference c1,
+16535:                            Coefficient_traits::const_reference c2,
+16535:                            dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void get_row(Dense_Row& r) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void get_row(Sparse_Row& r) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Linear_Expression_Impl(dimension_type space_dim, bool);
+16535: # 597 "../../src/Linear_Expression_Impl_defs.hh"
+16535:   template <typename Row2>
+16535:   void linear_combine(const Linear_Expression_Impl<Row2>& y, Variable v);
+16535: 
+16535: 
+16535: 
+16535:   template <typename Row2>
+16535:   void linear_combine(const Linear_Expression_Impl<Row2>& y,
+16535:                       Coefficient_traits::const_reference c1,
+16535:                       Coefficient_traits::const_reference c2);
+16535: 
+16535: 
+16535: 
+16535:   template <typename Row2>
+16535:   void linear_combine_lax(const Linear_Expression_Impl<Row2>& y,
+16535:                           Coefficient_traits::const_reference c1,
+16535:                           Coefficient_traits::const_reference c2);
+16535: 
+16535: 
+16535: 
+16535:   template <typename Row2>
+16535:   bool is_equal_to(const Linear_Expression_Impl<Row2>& x) const;
+16535: 
+16535:   template <typename Row2>
+16535:   Linear_Expression_Impl& operator+=(const Linear_Expression_Impl<Row2>& e2);
+16535:   template <typename Row2>
+16535:   Linear_Expression_Impl& operator-=(const Linear_Expression_Impl<Row2>& e2);
+16535: 
+16535:   template <typename Row2>
+16535:   Linear_Expression_Impl&
+16535:   sub_mul_assign(Coefficient_traits::const_reference n,
+16535:                  const Linear_Expression_Impl<Row2>& y,
+16535:                  dimension_type start, dimension_type end);
+16535: 
+16535:   template <typename Row2>
+16535:   void add_mul_assign(Coefficient_traits::const_reference factor,
+16535:                       const Linear_Expression_Impl<Row2>& e2);
+16535: 
+16535:   template <typename Row2>
+16535:   void sub_mul_assign(Coefficient_traits::const_reference factor,
+16535:                       const Linear_Expression_Impl<Row2>& e2);
+16535: # 653 "../../src/Linear_Expression_Impl_defs.hh"
+16535:   template <typename Row2>
+16535:   void linear_combine(const Linear_Expression_Impl<Row2>& y, dimension_type i);
+16535: 
+16535: 
+16535: 
+16535:   template <typename Row2>
+16535:   void linear_combine(const Linear_Expression_Impl<Row2>& y,
+16535:                       Coefficient_traits::const_reference c1,
+16535:                       Coefficient_traits::const_reference c2,
+16535:                       dimension_type start, dimension_type end);
+16535: 
+16535: 
+16535: 
+16535:   template <typename Row2>
+16535:   void linear_combine_lax(const Linear_Expression_Impl<Row2>& y,
+16535:                           Coefficient_traits::const_reference c1,
+16535:                           Coefficient_traits::const_reference c2,
+16535:                           dimension_type start, dimension_type end);
+16535: # 684 "../../src/Linear_Expression_Impl_defs.hh"
+16535:   template <typename Row2>
+16535:   int compare(const Linear_Expression_Impl<Row2>& y) const;
+16535: 
+16535: 
+16535:   template <typename Row2>
+16535:   void
+16535:   scalar_product_assign(Coefficient& result,
+16535:                         const Linear_Expression_Impl<Row2>& y,
+16535:                         dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535: 
+16535:   template <typename Row2>
+16535:   int scalar_product_sign(const Linear_Expression_Impl<Row2>& y,
+16535:                           dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535:   template <typename Row2>
+16535:   bool is_equal_to(const Linear_Expression_Impl<Row2>& x,
+16535:                    dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535: 
+16535:   template <typename Row2>
+16535:   bool is_equal_to(const Linear_Expression_Impl<Row2>& x,
+16535:                    Coefficient_traits::const_reference c1,
+16535:                    Coefficient_traits::const_reference c2,
+16535:                    dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535: 
+16535:   template <typename Row2>
+16535:   bool have_a_common_variable(const Linear_Expression_Impl<Row2>& x,
+16535:                               Variable first, Variable last) const;
+16535: 
+16535: private:
+16535: 
+16535:   void construct(const Linear_Expression_Interface& e);
+16535:   void construct(const Linear_Expression_Interface& e,
+16535:                  dimension_type space_dim);
+16535: 
+16535:   template <typename Row2>
+16535:   void construct(const Linear_Expression_Impl<Row2>& e);
+16535:   template <typename Row2>
+16535:   void construct(const Linear_Expression_Impl<Row2>& e,
+16535:                  dimension_type space_dim);
+16535: 
+16535:   Row row;
+16535: 
+16535:   template <typename Row2>
+16535:   friend class Linear_Expression_Impl;
+16535: 
+16535: };
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: template <>
+16535: bool
+16535: Linear_Expression_Impl<Dense_Row>::OK() const;
+16535: template <>
+16535: bool
+16535: Linear_Expression_Impl<Sparse_Row>::OK() const;
+16535: 
+16535: template <>
+16535: bool
+16535: Linear_Expression_Impl<Dense_Row>::all_homogeneous_terms_are_zero() const;
+16535: template <>
+16535: bool
+16535: Linear_Expression_Impl<Sparse_Row>::all_homogeneous_terms_are_zero() const;
+16535: 
+16535: template <>
+16535: bool
+16535: Linear_Expression_Impl<Dense_Row>::all_zeroes(dimension_type start,
+16535:                                               dimension_type end) const;
+16535: template <>
+16535: bool
+16535: Linear_Expression_Impl<Sparse_Row>::all_zeroes(dimension_type start,
+16535:                                                dimension_type end) const;
+16535: 
+16535: template <>
+16535: bool
+16535: Linear_Expression_Impl<Dense_Row>
+16535: ::all_zeroes(const Variables_Set& vars) const;
+16535: template <>
+16535: bool
+16535: Linear_Expression_Impl<Sparse_Row>
+16535: ::all_zeroes(const Variables_Set& vars) const;
+16535: 
+16535: template <>
+16535: bool
+16535: Linear_Expression_Impl<Dense_Row>
+16535: ::all_zeroes_except(const Variables_Set& vars,
+16535:                     dimension_type start, dimension_type end) const;
+16535: template <>
+16535: bool
+16535: Linear_Expression_Impl<Sparse_Row>
+16535: ::all_zeroes_except(const Variables_Set& vars,
+16535:                     dimension_type start, dimension_type end) const;
+16535: 
+16535: template <>
+16535: dimension_type
+16535: Linear_Expression_Impl<Dense_Row>
+16535: ::first_nonzero(dimension_type first, dimension_type last) const;
+16535: template <>
+16535: dimension_type
+16535: Linear_Expression_Impl<Sparse_Row>
+16535: ::first_nonzero(dimension_type first, dimension_type last) const;
+16535: 
+16535: template <>
+16535: Coefficient
+16535: Linear_Expression_Impl<Dense_Row>::gcd(dimension_type start,
+16535:                                        dimension_type end) const;
+16535: template <>
+16535: Coefficient
+16535: Linear_Expression_Impl<Sparse_Row>::gcd(dimension_type start,
+16535:                                         dimension_type end) const;
+16535: 
+16535: template <>
+16535: void
+16535: Linear_Expression_Impl<Dense_Row>
+16535: ::has_a_free_dimension_helper(std::set<dimension_type>& x) const;
+16535: template <>
+16535: void
+16535: Linear_Expression_Impl<Sparse_Row>
+16535: ::has_a_free_dimension_helper(std::set<dimension_type>& x) const;
+16535: 
+16535: template <>
+16535: template <>
+16535: bool
+16535: Linear_Expression_Impl<Dense_Row>
+16535: ::have_a_common_variable(const Linear_Expression_Impl<Dense_Row>& y,
+16535:                          Variable first, Variable last) const;
+16535: template <>
+16535: template <>
+16535: bool
+16535: Linear_Expression_Impl<Dense_Row>
+16535: ::have_a_common_variable(const Linear_Expression_Impl<Sparse_Row>& y,
+16535:                          Variable first, Variable last) const;
+16535: template <>
+16535: template <>
+16535: bool
+16535: Linear_Expression_Impl<Sparse_Row>
+16535: ::have_a_common_variable(const Linear_Expression_Impl<Dense_Row>& y,
+16535:                          Variable first, Variable last) const;
+16535: template <>
+16535: template <>
+16535: bool
+16535: Linear_Expression_Impl<Sparse_Row>
+16535: ::have_a_common_variable(const Linear_Expression_Impl<Sparse_Row>& y,
+16535:                          Variable first, Variable last) const;
+16535: 
+16535: template <>
+16535: bool
+16535: Linear_Expression_Impl<Dense_Row>::is_zero() const;
+16535: template <>
+16535: bool
+16535: Linear_Expression_Impl<Sparse_Row>::is_zero() const;
+16535: 
+16535: template <>
+16535: dimension_type
+16535: Linear_Expression_Impl<Dense_Row>::last_nonzero() const;
+16535: template <>
+16535: dimension_type
+16535: Linear_Expression_Impl<Sparse_Row>::last_nonzero() const;
+16535: 
+16535: template <>
+16535: dimension_type
+16535: Linear_Expression_Impl<Dense_Row>
+16535: ::last_nonzero(dimension_type first, dimension_type last) const;
+16535: template <>
+16535: dimension_type
+16535: Linear_Expression_Impl<Sparse_Row>
+16535: ::last_nonzero(dimension_type first, dimension_type last) const;
+16535: 
+16535: template <>
+16535: dimension_type
+16535: Linear_Expression_Impl<Dense_Row>::num_zeroes(dimension_type start,
+16535:                                               dimension_type end) const;
+16535: template <>
+16535: dimension_type
+16535: Linear_Expression_Impl<Sparse_Row>::num_zeroes(dimension_type start,
+16535:                                                dimension_type end) const;
+16535: 
+16535: template <>
+16535: void
+16535: Linear_Expression_Impl<Dense_Row>
+16535: ::remove_space_dimensions(const Variables_Set& vars);
+16535: template <>
+16535: void
+16535: Linear_Expression_Impl<Sparse_Row>
+16535: ::remove_space_dimensions(const Variables_Set& vars);
+16535: 
+16535: template <>
+16535: Representation
+16535: Linear_Expression_Impl<Dense_Row>::representation() const;
+16535: template <>
+16535: Representation
+16535: Linear_Expression_Impl<Sparse_Row>::representation() const;
+16535: 
+16535: template <>
+16535: void
+16535: Linear_Expression_Impl<Dense_Row>::const_iterator::skip_zeroes_backward();
+16535: template <>
+16535: void
+16535: Linear_Expression_Impl<Sparse_Row>::const_iterator::skip_zeroes_backward();
+16535: 
+16535: template <>
+16535: void
+16535: Linear_Expression_Impl<Dense_Row>::const_iterator::skip_zeroes_forward();
+16535: template <>
+16535: void
+16535: Linear_Expression_Impl<Sparse_Row>::const_iterator::skip_zeroes_forward();
+16535: 
+16535: }
+16535: 
+16535: 
+16535: # 1 "../../src/Linear_Expression_Impl_inlines.hh" 1
+16535: # 27 "../../src/Linear_Expression_Impl_inlines.hh"
+16535: # 1 "../../src/math_utilities_defs.hh" 1
+16535: # 31 "../../src/math_utilities_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: typename Enable_If<Is_Native_Or_Checked<T>::value, void>::type
+16535: numer_denom(const T& from,
+16535:             Coefficient& numer, Coefficient& denom);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: typename Enable_If<Is_Native_Or_Checked<T>::value, void>::type
+16535: div_round_up(T& to,
+16535:              Coefficient_traits::const_reference x,
+16535:              Coefficient_traits::const_reference y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename N>
+16535: void
+16535: min_assign(N& x, const N& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename N>
+16535: void
+16535: max_assign(N& x, const N& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
+16535: is_even(const T& x);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
+16535: is_additive_inverse(const T& x, const T& y);
+16535: # 88 "../../src/math_utilities_defs.hh"
+16535: void
+16535: normalize2(Coefficient_traits::const_reference x,
+16535:            Coefficient_traits::const_reference y,
+16535:            Coefficient& n_x, Coefficient& n_y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: bool
+16535: is_canonical(const mpq_class& x);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: T
+16535: low_bits_mask(unsigned n);
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/math_utilities_inlines.hh" 1
+16535: # 31 "../../src/math_utilities_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline void
+16535: normalize2(Coefficient_traits::const_reference x,
+16535:            Coefficient_traits::const_reference y,
+16535:            Coefficient& n_x, Coefficient& n_y) {
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_gcd; Parma_Polyhedra_Library::Coefficient& gcd = holder_gcd.item();
+16535:   gcd_assign(gcd, x, y);
+16535:   exact_div_assign(n_x, x, gcd);
+16535:   exact_div_assign(n_y, y, gcd);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline T
+16535: low_bits_mask(const unsigned n) {
+16535:   ((void) 0);
+16535:   return ~((~static_cast<T>(0)) << n);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Enable_If<Is_Native_Or_Checked<T>::value, void>::type
+16535: numer_denom(const T& from,
+16535:             Coefficient& numer, Coefficient& denom) {
+16535:   ((void) 0)
+16535: 
+16535:                                     ;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
+16535:   assign_r(q, from, ROUND_NOT_NEEDED);
+16535:   numer = q.get_num();
+16535:   denom = q.get_den();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Enable_If<Is_Native_Or_Checked<T>::value, void>::type
+16535: div_round_up(T& to,
+16535:              Coefficient_traits::const_reference x,
+16535:              Coefficient_traits::const_reference y) {
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_x; mpq_class& q_x = holder_q_x.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_y; mpq_class& q_y = holder_q_y.item();
+16535: 
+16535: 
+16535:   assign_r(q_x, x, ROUND_NOT_NEEDED);
+16535:   assign_r(q_y, y, ROUND_NOT_NEEDED);
+16535:   div_assign_r(q_x, q_x, q_y, ROUND_NOT_NEEDED);
+16535:   assign_r(to, q_x, ROUND_UP);
+16535: }
+16535: 
+16535: template <typename N>
+16535: inline void
+16535: min_assign(N& x, const N& y) {
+16535:   if (x > y) {
+16535:     x = y;
+16535:   }
+16535: }
+16535: 
+16535: template <typename N>
+16535: inline void
+16535: max_assign(N& x, const N& y) {
+16535:   if (x < y) {
+16535:     x = y;
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
+16535: is_even(const T& x) {
+16535:   T mod;
+16535:   return umod_2exp_assign_r(mod, x, 1, ROUND_DIRECT | ROUND_STRICT_RELATION) == V_EQ
+16535:     && mod == 0;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Enable_If<Is_Native_Or_Checked<T>::value, bool>::type
+16535: is_additive_inverse(const T& x, const T& y) {
+16535:   T negated_x;
+16535:   return neg_assign_r(negated_x, x, ROUND_DIRECT | ROUND_STRICT_RELATION) == V_EQ
+16535:     && negated_x == y;
+16535: }
+16535: 
+16535: inline bool
+16535: is_canonical(const mpq_class& x) {
+16535:   if (x.get_den() <= 0) {
+16535:     return false;
+16535:   }
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_temp; mpq_class& temp = holder_temp.item();
+16535:   temp = x;
+16535:   temp.canonicalize();
+16535:   return temp.get_num() == x.get_num();
+16535: }
+16535: 
+16535: }
+16535: # 109 "../../src/math_utilities_defs.hh" 2
+16535: # 28 "../../src/Linear_Expression_Impl_inlines.hh" 2
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Row>
+16535: inline dimension_type
+16535: Linear_Expression_Impl<Row>::max_space_dimension() {
+16535:   return Row::max_size() - 1;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline
+16535: Linear_Expression_Impl<Row>::Linear_Expression_Impl()
+16535:   : row(1) {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline
+16535: Linear_Expression_Impl<Row>
+16535: ::Linear_Expression_Impl(dimension_type space_dim, bool)
+16535:   : row(space_dim + 1) {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline
+16535: Linear_Expression_Impl<Row>::~Linear_Expression_Impl() {
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline
+16535: Linear_Expression_Impl<Row>
+16535: ::Linear_Expression_Impl(Coefficient_traits::const_reference n)
+16535:   : row(1) {
+16535:   if (n != 0) {
+16535:     row.insert(0, n);
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline dimension_type
+16535: Linear_Expression_Impl<Row>::space_dimension() const {
+16535:   return row.size() - 1;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_Expression_Impl<Row>::set_space_dimension(dimension_type n) {
+16535:   row.resize(n + 1);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline Coefficient_traits::const_reference
+16535: Linear_Expression_Impl<Row>::coefficient(Variable v) const {
+16535:   if (v.space_dimension() > space_dimension()) {
+16535:     return Coefficient_zero();
+16535:   }
+16535:   return row.get(v.id() + 1);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_Expression_Impl<Row>
+16535: ::set_coefficient(Variable v, Coefficient_traits::const_reference n) {
+16535:   ((void) 0);
+16535:   const dimension_type i = v.space_dimension();
+16535:   if (n == 0) {
+16535:     row.reset(i);
+16535:   }
+16535:   else {
+16535:     row.insert(i, n);
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline Coefficient_traits::const_reference
+16535: Linear_Expression_Impl<Row>::inhomogeneous_term() const {
+16535:   return row.get(0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_Expression_Impl<Row>
+16535: ::set_inhomogeneous_term(Coefficient_traits::const_reference n) {
+16535:   if (n == 0) {
+16535:     row.reset(0);
+16535:   }
+16535:   else {
+16535:     row.insert(0, n);
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_Expression_Impl<Row>::swap_space_dimensions(Variable v1, Variable v2) {
+16535:   row.swap_coefficients(v1.space_dimension(), v2.space_dimension());
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_Expression_Impl<Row>::shift_space_dimensions(Variable v,
+16535:                                                     dimension_type n) {
+16535:   row.add_zeroes_and_shift(n, v.space_dimension());
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline memory_size_type
+16535: Linear_Expression_Impl<Row>::external_memory_in_bytes() const {
+16535:   return row.external_memory_in_bytes();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline memory_size_type
+16535: Linear_Expression_Impl<Row>::total_memory_in_bytes() const {
+16535:   return external_memory_in_bytes() + sizeof(*this);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline Linear_Expression_Impl<Row>&
+16535: Linear_Expression_Impl<Row>::operator+=(Coefficient_traits::const_reference n) {
+16535:   typename Row::iterator itr = row.insert(0);
+16535:   (*itr) += n;
+16535:   if (*itr == 0) {
+16535:     row.reset(itr);
+16535:   }
+16535:   ((void) 0);
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline Linear_Expression_Impl<Row>&
+16535: Linear_Expression_Impl<Row>::operator-=(Coefficient_traits::const_reference n) {
+16535:   typename Row::iterator itr = row.insert(0);
+16535:   (*itr) -= n;
+16535:   if (*itr == 0) {
+16535:     row.reset(itr);
+16535:   }
+16535:   ((void) 0);
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_Expression_Impl<Row>::normalize() {
+16535:   row.normalize();
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <>
+16535: inline bool
+16535: Linear_Expression_Impl<Sparse_Row>::is_zero() const {
+16535:   return row.num_stored_elements() == 0;
+16535: }
+16535: 
+16535: template <>
+16535: inline bool
+16535: Linear_Expression_Impl<Sparse_Row>::all_homogeneous_terms_are_zero() const {
+16535:   return row.lower_bound(1) == row.end();
+16535: }
+16535: 
+16535: template <>
+16535: inline bool
+16535: Linear_Expression_Impl<Sparse_Row>::all_zeroes(dimension_type start,
+16535:                                                dimension_type end) const {
+16535:   return row.lower_bound(start) == row.lower_bound(end);
+16535: }
+16535: 
+16535: template <>
+16535: inline dimension_type
+16535: Linear_Expression_Impl<Sparse_Row>::num_zeroes(dimension_type start,
+16535:                                                dimension_type end) const {
+16535:   ((void) 0);
+16535:   return (end - start)
+16535:     - std::distance(row.lower_bound(start), row.lower_bound(end));
+16535: }
+16535: 
+16535: template <>
+16535: inline dimension_type
+16535: Linear_Expression_Impl<Sparse_Row>::last_nonzero() const {
+16535:   if (row.num_stored_elements() == 0) {
+16535:     return 0;
+16535:   }
+16535:   Sparse_Row::const_iterator i = row.end();
+16535:   --i;
+16535:   return i.index();
+16535: }
+16535: 
+16535: template <>
+16535: inline dimension_type
+16535: Linear_Expression_Impl<Sparse_Row>
+16535: ::first_nonzero(dimension_type first, dimension_type last) const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   Sparse_Row::const_iterator i = row.lower_bound(first);
+16535: 
+16535:   if (i != row.end() && i.index() < last) {
+16535:     return i.index();
+16535:   }
+16535:   else {
+16535:     return last;
+16535:   }
+16535: }
+16535: 
+16535: template <>
+16535: inline dimension_type
+16535: Linear_Expression_Impl<Sparse_Row>
+16535: ::last_nonzero(dimension_type first, dimension_type last) const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   Sparse_Row::const_iterator itr1 = row.lower_bound(first);
+16535:   Sparse_Row::const_iterator itr2 = row.lower_bound(last);
+16535: 
+16535:   if (itr1 == itr2) {
+16535:     return last;
+16535:   }
+16535: 
+16535:   --itr2;
+16535:   return itr2.index();
+16535: }
+16535: 
+16535: template <>
+16535: inline Representation
+16535: Linear_Expression_Impl<Dense_Row>::representation() const {
+16535:   return DENSE;
+16535: }
+16535: 
+16535: template <>
+16535: inline Representation
+16535: Linear_Expression_Impl<Sparse_Row>::representation() const {
+16535:   return SPARSE;
+16535: }
+16535: 
+16535: template <>
+16535: inline void
+16535: Linear_Expression_Impl<Sparse_Row>::const_iterator
+16535: ::skip_zeroes_forward() {
+16535: 
+16535: }
+16535: 
+16535: template <>
+16535: inline void
+16535: Linear_Expression_Impl<Sparse_Row>::const_iterator
+16535: ::skip_zeroes_backward() {
+16535: 
+16535: }
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: template <typename Row>
+16535: inline std::ostream&
+16535: operator<<(std::ostream& s, const Linear_Expression_Impl<Row>& e) {
+16535:   e.print(s);
+16535:   return s;
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 904 "../../src/Linear_Expression_Impl_defs.hh" 2
+16535: # 1 "../../src/Linear_Expression_Impl_templates.hh" 1
+16535: # 30 "../../src/Linear_Expression_Impl_templates.hh"
+16535: # 1 "../../src/Constraint_defs.hh" 1
+16535: # 27 "../../src/Constraint_defs.hh"
+16535: # 1 "../../src/Constraint_types.hh" 1
+16535: # 16 "../../src/Constraint_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Constraint;
+16535: 
+16535: }
+16535: # 28 "../../src/Constraint_defs.hh" 2
+16535: 
+16535: # 1 "../../src/Congruence_types.hh" 1
+16535: # 16 "../../src/Congruence_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Congruence;
+16535: 
+16535: }
+16535: # 30 "../../src/Constraint_defs.hh" 2
+16535: 
+16535: # 1 "../../src/Polyhedron_types.hh" 1
+16535: # 16 "../../src/Polyhedron_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Polyhedron;
+16535: 
+16535: }
+16535: # 32 "../../src/Constraint_defs.hh" 2
+16535: # 1 "../../src/termination_types.hh" 1
+16535: # 16 "../../src/termination_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Termination_Helpers;
+16535: 
+16535: }
+16535: # 33 "../../src/Constraint_defs.hh" 2
+16535: # 1 "../../src/Octagonal_Shape_types.hh" 1
+16535: # 16 "../../src/Octagonal_Shape_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: class Octagonal_Shape;
+16535: 
+16535: class Octagonal_Shape_Helper;
+16535: 
+16535: }
+16535: # 34 "../../src/Constraint_defs.hh" 2
+16535: # 1 "../../src/Grid_types.hh" 1
+16535: # 16 "../../src/Grid_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Grid;
+16535: 
+16535: }
+16535: # 35 "../../src/Constraint_defs.hh" 2
+16535: 
+16535: # 1 "../../src/Linear_Expression_defs.hh" 1
+16535: # 30 "../../src/Linear_Expression_defs.hh"
+16535: # 1 "../../src/Generator_types.hh" 1
+16535: # 16 "../../src/Generator_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Generator;
+16535: 
+16535: }
+16535: # 31 "../../src/Linear_Expression_defs.hh" 2
+16535: 
+16535: # 1 "../../src/Grid_Generator_types.hh" 1
+16535: # 16 "../../src/Grid_Generator_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Grid_Generator;
+16535: 
+16535: }
+16535: # 33 "../../src/Linear_Expression_defs.hh" 2
+16535: # 1 "../../src/Linear_System_types.hh" 1
+16535: # 16 "../../src/Linear_System_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Row>
+16535: class Linear_System;
+16535: 
+16535: template <typename Row>
+16535: class Linear_System_With_Bit_Matrix_iterator;
+16535: 
+16535: }
+16535: # 34 "../../src/Linear_Expression_defs.hh" 2
+16535: # 1 "../../src/Constraint_System_types.hh" 1
+16535: # 16 "../../src/Constraint_System_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Constraint_System;
+16535: class Constraint_System_const_iterator;
+16535: 
+16535: }
+16535: # 35 "../../src/Linear_Expression_defs.hh" 2
+16535: # 1 "../../src/Congruence_System_types.hh" 1
+16535: # 16 "../../src/Congruence_System_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Congruence_System;
+16535: 
+16535: }
+16535: # 36 "../../src/Linear_Expression_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: # 1 "../../src/PIP_Problem_types.hh" 1
+16535: # 16 "../../src/PIP_Problem_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: enum PIP_Problem_Status {
+16535: 
+16535:   UNFEASIBLE_PIP_PROBLEM,
+16535: 
+16535:   OPTIMIZED_PIP_PROBLEM
+16535: };
+16535: 
+16535: class PIP_Problem;
+16535: 
+16535: }
+16535: # 40 "../../src/Linear_Expression_defs.hh" 2
+16535: # 1 "../../src/BHRZ03_Certificate_types.hh" 1
+16535: # 16 "../../src/BHRZ03_Certificate_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class BHRZ03_Certificate;
+16535: 
+16535: }
+16535: # 41 "../../src/Linear_Expression_defs.hh" 2
+16535: # 1 "../../src/Scalar_Products_types.hh" 1
+16535: # 16 "../../src/Scalar_Products_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Scalar_Products;
+16535: class Topology_Adjusted_Scalar_Product_Sign;
+16535: class Topology_Adjusted_Scalar_Product_Assign;
+16535: 
+16535: }
+16535: # 42 "../../src/Linear_Expression_defs.hh" 2
+16535: # 1 "../../src/MIP_Problem_types.hh" 1
+16535: # 16 "../../src/MIP_Problem_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: enum MIP_Problem_Status {
+16535: 
+16535:   UNFEASIBLE_MIP_PROBLEM,
+16535: 
+16535:   UNBOUNDED_MIP_PROBLEM,
+16535: 
+16535:   OPTIMIZED_MIP_PROBLEM
+16535: };
+16535: 
+16535: class MIP_Problem;
+16535: 
+16535: }
+16535: # 43 "../../src/Linear_Expression_defs.hh" 2
+16535: 
+16535: # 1 "../../src/BD_Shape_types.hh" 1
+16535: # 16 "../../src/BD_Shape_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: class BD_Shape;
+16535: 
+16535: class BD_Shape_Helpers;
+16535: 
+16535: }
+16535: # 45 "../../src/Linear_Expression_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: # 1 "../../src/Expression_Adapter_defs.hh" 1
+16535: # 27 "../../src/Expression_Adapter_defs.hh"
+16535: # 1 "../../src/Expression_Adapter_types.hh" 1
+16535: # 16 "../../src/Expression_Adapter_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Expression_Adapter_Base;
+16535: 
+16535: template <typename T>
+16535: class Expression_Adapter;
+16535: 
+16535: template <typename T>
+16535: class Expression_Adapter_Transparent;
+16535: 
+16535: }
+16535: # 28 "../../src/Expression_Adapter_defs.hh" 2
+16535: # 36 "../../src/Expression_Adapter_defs.hh"
+16535: class Parma_Polyhedra_Library::Expression_Adapter_Base {
+16535: };
+16535: # 55 "../../src/Expression_Adapter_defs.hh"
+16535: template <typename T>
+16535: class Parma_Polyhedra_Library::Expression_Adapter
+16535:   : public Expression_Adapter_Base {
+16535: public:
+16535: 
+16535:   typedef Expression_Adapter<T> const_reference;
+16535: 
+16535:   typedef typename T::const_reference inner_type;
+16535: 
+16535:   typedef typename T::raw_type raw_type;
+16535: 
+16535: 
+16535:   inner_type inner() const;
+16535: 
+16535: 
+16535:   typedef typename raw_type::const_iterator const_iterator;
+16535: 
+16535: 
+16535:   Representation representation() const;
+16535: 
+16535: 
+16535:   const_iterator begin() const;
+16535: 
+16535: 
+16535:   const_iterator end() const;
+16535: 
+16535: 
+16535: 
+16535:   const_iterator lower_bound(Variable v) const;
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference coefficient(Variable v) const;
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference inhomogeneous_term() const;
+16535: 
+16535: 
+16535:   bool is_zero() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool all_homogeneous_terms_are_zero() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename Expression>
+16535:   bool is_equal_to(const Expression& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool all_zeroes(const Variables_Set& vars) const;
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference get(dimension_type i) const;
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference get(Variable v) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool all_zeroes(dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535:   dimension_type num_zeroes(dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Coefficient gcd(dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535: 
+16535:   dimension_type last_nonzero() const;
+16535: 
+16535: 
+16535: 
+16535:   dimension_type last_nonzero(dimension_type first, dimension_type last) const;
+16535: 
+16535: 
+16535: 
+16535:   dimension_type first_nonzero(dimension_type first, dimension_type last) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool all_zeroes_except(const Variables_Set& vars,
+16535:                          dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535:   void has_a_free_dimension_helper(std::set<dimension_type>& x) const;
+16535: 
+16535: 
+16535: 
+16535:   template <typename Expression>
+16535:   bool is_equal_to(const Expression& y,
+16535:                    dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535: 
+16535:   template <typename Expression>
+16535:   bool is_equal_to(const Expression& y,
+16535:                    Coefficient_traits::const_reference c1,
+16535:                    Coefficient_traits::const_reference c2,
+16535:                    dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535:   void get_row(Dense_Row& r) const;
+16535: 
+16535: 
+16535:   void get_row(Sparse_Row& r) const;
+16535: 
+16535: 
+16535: 
+16535:   template <typename Expression>
+16535:   bool have_a_common_variable(const Expression& y,
+16535:                               Variable first, Variable last) const;
+16535: 
+16535: protected:
+16535: 
+16535:   explicit Expression_Adapter(const raw_type& expr);
+16535: 
+16535:   const raw_type& raw_;
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: class Parma_Polyhedra_Library::Expression_Adapter_Transparent
+16535:   : public Expression_Adapter<T> {
+16535:   typedef Expression_Adapter<T> base_type;
+16535: public:
+16535: 
+16535:   typedef Expression_Adapter_Transparent<T> const_reference;
+16535: 
+16535:   typedef typename base_type::inner_type inner_type;
+16535: 
+16535:   typedef typename base_type::raw_type raw_type;
+16535: 
+16535: 
+16535:   typedef typename base_type::const_iterator const_iterator;
+16535: 
+16535: 
+16535:   explicit Expression_Adapter_Transparent(const raw_type& expr);
+16535: };
+16535: 
+16535: # 1 "../../src/Expression_Adapter_inlines.hh" 1
+16535: # 29 "../../src/Expression_Adapter_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: inline
+16535: Expression_Adapter<T>::Expression_Adapter(const raw_type& expr)
+16535:   : raw_(expr) {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Expression_Adapter<T>::inner_type
+16535: Expression_Adapter<T>::inner() const {
+16535:   return inner_type(raw_);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline Representation
+16535: Expression_Adapter<T>::representation() const {
+16535:   return inner().representation();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Expression_Adapter<T>::const_iterator
+16535: Expression_Adapter<T>::begin() const {
+16535:   return inner().begin();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Expression_Adapter<T>::const_iterator
+16535: Expression_Adapter<T>::end() const {
+16535:   return inner().end();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Expression_Adapter<T>::const_iterator
+16535: Expression_Adapter<T>::lower_bound(Variable v) const {
+16535:   return inner().lower_bound(v);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: Expression_Adapter<T>::space_dimension() const {
+16535:   return inner().space_dimension();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline Coefficient_traits::const_reference
+16535: Expression_Adapter<T>::coefficient(Variable v) const {
+16535:   return inner().coefficient(v);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline Coefficient_traits::const_reference
+16535: Expression_Adapter<T>::inhomogeneous_term() const {
+16535:   return inner().inhomogeneous_term();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Expression_Adapter<T>::is_zero() const {
+16535:   return inner().is_zero();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Expression_Adapter<T>::all_homogeneous_terms_are_zero() const {
+16535:   return inner().all_homogeneous_terms_are_zero();
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Expression>
+16535: inline bool
+16535: Expression_Adapter<T>::is_equal_to(const Expression& y) const {
+16535:   return inner().is_equal_to(y);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Expression_Adapter<T>
+16535: ::all_zeroes(const Variables_Set& vars) const {
+16535:   return inner().all_zeroes(vars);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline Coefficient_traits::const_reference
+16535: Expression_Adapter<T>::get(dimension_type i) const {
+16535:   return inner().get(i);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline Coefficient_traits::const_reference
+16535: Expression_Adapter<T>::get(Variable v) const {
+16535:   return inner().get(v);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Expression_Adapter<T>::all_zeroes(dimension_type start,
+16535:                                   dimension_type end) const {
+16535:   return inner().all_zeroes(start, end);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: Expression_Adapter<T>::num_zeroes(dimension_type start,
+16535:                                   dimension_type end) const {
+16535:   return inner().num_zeroes(start, end);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline Coefficient
+16535: Expression_Adapter<T>::gcd(dimension_type start,
+16535:                            dimension_type end) const {
+16535:   return inner().gcd(start, end);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: Expression_Adapter<T>::last_nonzero() const {
+16535:   return inner().last_nonzero();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: Expression_Adapter<T>::last_nonzero(dimension_type first,
+16535:                                     dimension_type last) const {
+16535:   return inner().last_nonzero(first, last);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: Expression_Adapter<T>::first_nonzero(dimension_type first,
+16535:                                      dimension_type last) const {
+16535:   return inner().first_nonzero(first, last);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Expression_Adapter<T>
+16535: ::all_zeroes_except(const Variables_Set& vars,
+16535:                     dimension_type start, dimension_type end) const {
+16535:   return inner().all_zeroes_except(vars, start, end);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Expression_Adapter<T>
+16535: ::has_a_free_dimension_helper(std::set<dimension_type>& x) const {
+16535:   inner().has_a_free_dimension_helper(x);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Expression>
+16535: inline bool
+16535: Expression_Adapter<T>
+16535: ::is_equal_to(const Expression& y,
+16535:               dimension_type start, dimension_type end) const {
+16535:   return inner().is_equal_to(y, start, end);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Expression>
+16535: inline bool
+16535: Expression_Adapter<T>
+16535: ::is_equal_to(const Expression& y,
+16535:               Coefficient_traits::const_reference c1,
+16535:               Coefficient_traits::const_reference c2,
+16535:               dimension_type start, dimension_type end) const {
+16535:   return inner().is_equal_to(y, c1, c2, start, end);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Expression_Adapter<T>::get_row(Dense_Row& r) const {
+16535:   inner().get_row(r);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Expression_Adapter<T>::get_row(Sparse_Row& r) const {
+16535:   inner().get_row(r);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Expression>
+16535: inline bool
+16535: Expression_Adapter<T>
+16535: ::have_a_common_variable(const Expression& y,
+16535:                          Variable first, Variable last) const {
+16535:   return inner().have_a_common_variable(y, first, last);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: Expression_Adapter_Transparent<T>
+16535: ::Expression_Adapter_Transparent(const raw_type& expr)
+16535:   : base_type(expr) {
+16535: }
+16535: 
+16535: }
+16535: # 215 "../../src/Expression_Adapter_defs.hh" 2
+16535: # 49 "../../src/Linear_Expression_defs.hh" 2
+16535: # 1 "../../src/Expression_Hide_Inhomo_types.hh" 1
+16535: # 16 "../../src/Expression_Hide_Inhomo_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: class Expression_Hide_Inhomo;
+16535: 
+16535: }
+16535: # 50 "../../src/Linear_Expression_defs.hh" 2
+16535: # 1 "../../src/Expression_Hide_Last_types.hh" 1
+16535: # 16 "../../src/Expression_Hide_Last_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: class Expression_Hide_Last;
+16535: 
+16535: }
+16535: # 51 "../../src/Linear_Expression_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression
+16535: operator+(const Linear_Expression& e1, const Linear_Expression& e2);
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression
+16535: operator+(Variable v, Variable w);
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression
+16535: operator+(Variable v, const Linear_Expression& e);
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression
+16535: operator+(const Linear_Expression& e, Variable v);
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression
+16535: operator+(Coefficient_traits::const_reference n, const Linear_Expression& e);
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression
+16535: operator+(const Linear_Expression& e, Coefficient_traits::const_reference n);
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression
+16535: operator+(const Linear_Expression& e);
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression
+16535: operator-(const Linear_Expression& e);
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression
+16535: operator-(const Linear_Expression& e1, const Linear_Expression& e2);
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression
+16535: operator-(Variable v, Variable w);
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression
+16535: operator-(Variable v, const Linear_Expression& e);
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression
+16535: operator-(const Linear_Expression& e, Variable v);
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression
+16535: operator-(Coefficient_traits::const_reference n, const Linear_Expression& e);
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression
+16535: operator-(const Linear_Expression& e, Coefficient_traits::const_reference n);
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression
+16535: operator*(Coefficient_traits::const_reference n, const Linear_Expression& e);
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression
+16535: operator*(const Linear_Expression& e, Coefficient_traits::const_reference n);
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression&
+16535: operator+=(Linear_Expression& e1, const Linear_Expression& e2);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression&
+16535: operator+=(Linear_Expression& e, Variable v);
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression&
+16535: operator+=(Linear_Expression& e, Coefficient_traits::const_reference n);
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression&
+16535: operator-=(Linear_Expression& e1, const Linear_Expression& e2);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression&
+16535: operator-=(Linear_Expression& e, Variable v);
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression&
+16535: operator-=(Linear_Expression& e, Coefficient_traits::const_reference n);
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression&
+16535: operator*=(Linear_Expression& e, Coefficient_traits::const_reference n);
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression&
+16535: operator/=(Linear_Expression& e, Coefficient_traits::const_reference n);
+16535: 
+16535: 
+16535: 
+16535: void
+16535: neg_assign(Linear_Expression& e);
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression&
+16535: add_mul_assign(Linear_Expression& e,
+16535:                Coefficient_traits::const_reference n, Variable v);
+16535: 
+16535: 
+16535: 
+16535: void add_mul_assign(Linear_Expression& e1,
+16535:                     Coefficient_traits::const_reference factor,
+16535:                     const Linear_Expression& e2);
+16535: 
+16535: 
+16535: 
+16535: void sub_mul_assign(Linear_Expression& e1,
+16535:                     Coefficient_traits::const_reference factor,
+16535:                     const Linear_Expression& e2);
+16535: 
+16535: 
+16535: 
+16535: Linear_Expression&
+16535: sub_mul_assign(Linear_Expression& e,
+16535:                Coefficient_traits::const_reference n, Variable v);
+16535: # 230 "../../src/Linear_Expression_defs.hh"
+16535: int compare(const Linear_Expression& x, const Linear_Expression& y);
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: std::ostream& operator<<(std::ostream& s, const Linear_Expression& e);
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 289 "../../src/Linear_Expression_defs.hh"
+16535: class Parma_Polyhedra_Library::Linear_Expression {
+16535: public:
+16535:   static const Representation default_representation = SPARSE;
+16535: 
+16535: 
+16535:   explicit Linear_Expression(Representation r = default_representation);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Linear_Expression(const Linear_Expression& e);
+16535: 
+16535: 
+16535:   Linear_Expression(const Linear_Expression& e, Representation r);
+16535: 
+16535: 
+16535:   typedef const Linear_Expression& const_reference;
+16535:   typedef Linear_Expression raw_type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename LE_Adapter>
+16535:   explicit
+16535:   Linear_Expression(const LE_Adapter& e,
+16535:                     typename
+16535:                     Enable_If<Is_Same_Or_Derived<Expression_Adapter_Base,
+16535:                                                  LE_Adapter>::value,
+16535:                               void*>::type = 0);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename LE_Adapter>
+16535:   Linear_Expression(const LE_Adapter& e,
+16535:                     Representation r,
+16535:                     typename
+16535:                     Enable_If<Is_Same_Or_Derived<Expression_Adapter_Base,
+16535:                                                  LE_Adapter>::value,
+16535:                               void*>::type = 0);
+16535: # 341 "../../src/Linear_Expression_defs.hh"
+16535:   template <typename LE_Adapter>
+16535:   explicit
+16535:   Linear_Expression(const LE_Adapter& e,
+16535:                     dimension_type space_dim,
+16535:                     typename
+16535:                     Enable_If<Is_Same_Or_Derived<Expression_Adapter_Base,
+16535:                                                  LE_Adapter>::value,
+16535:                               void*>::type = 0);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename LE_Adapter>
+16535:   Linear_Expression(const LE_Adapter& e,
+16535:                     dimension_type space_dim,
+16535:                     Representation r,
+16535:                     typename
+16535:                     Enable_If<Is_Same_Or_Derived<Expression_Adapter_Base,
+16535:                                                  LE_Adapter>::value,
+16535:                               void*>::type = 0);
+16535: 
+16535: 
+16535:   Linear_Expression& operator=(const Linear_Expression& e);
+16535: 
+16535: 
+16535:   ~Linear_Expression();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   explicit Linear_Expression(Coefficient_traits::const_reference n,
+16535:                              Representation r = default_representation);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Linear_Expression(Variable v, Representation r = default_representation);
+16535: 
+16535: 
+16535:   Representation representation() const;
+16535: 
+16535: 
+16535:   void set_representation(Representation r);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   class const_iterator {
+16535:   private:
+16535:   public:
+16535:     typedef std::bidirectional_iterator_tag iterator_category;
+16535:     typedef const Coefficient value_type;
+16535:     typedef std::ptrdiff_t difference_type;
+16535:     typedef value_type* pointer;
+16535:     typedef Coefficient_traits::const_reference reference;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     explicit const_iterator();
+16535: # 417 "../../src/Linear_Expression_defs.hh"
+16535:     const_iterator(const const_iterator& i);
+16535: 
+16535:     ~const_iterator();
+16535: # 428 "../../src/Linear_Expression_defs.hh"
+16535:     void m_swap(const_iterator& i);
+16535: # 437 "../../src/Linear_Expression_defs.hh"
+16535:     const_iterator& operator=(const const_iterator& i);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     const_iterator& operator++();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     const_iterator& operator--();
+16535: 
+16535: 
+16535:     reference operator*() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     Variable variable() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     bool operator==(const const_iterator& i) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     bool operator!=(const const_iterator& i) const;
+16535: 
+16535:   private:
+16535: 
+16535: 
+16535:     const_iterator(Linear_Expression_Interface::const_iterator_interface* i);
+16535: 
+16535:     Linear_Expression_Interface::const_iterator_interface* itr;
+16535: 
+16535:     friend class Linear_Expression;
+16535:   };
+16535: 
+16535: 
+16535: 
+16535:   const_iterator begin() const;
+16535: 
+16535: 
+16535: 
+16535:   const_iterator end() const;
+16535: 
+16535: 
+16535: 
+16535:   const_iterator lower_bound(Variable v) const;
+16535: 
+16535: 
+16535:   static dimension_type max_space_dimension();
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535:   void set_space_dimension(dimension_type n);
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference coefficient(Variable v) const;
+16535: 
+16535: 
+16535:   void set_coefficient(Variable v,
+16535:                        Coefficient_traits::const_reference n);
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference inhomogeneous_term() const;
+16535: 
+16535: 
+16535:   void set_inhomogeneous_term(Coefficient_traits::const_reference n);
+16535: # 535 "../../src/Linear_Expression_defs.hh"
+16535:   void linear_combine(const Linear_Expression& y, Variable v);
+16535: 
+16535: 
+16535: 
+16535:   void linear_combine(const Linear_Expression& y,
+16535:                       Coefficient_traits::const_reference c1,
+16535:                       Coefficient_traits::const_reference c2);
+16535: 
+16535: 
+16535: 
+16535:   void linear_combine_lax(const Linear_Expression& y,
+16535:                           Coefficient_traits::const_reference c1,
+16535:                           Coefficient_traits::const_reference c2);
+16535: 
+16535: 
+16535:   void swap_space_dimensions(Variable v1, Variable v2);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void remove_space_dimensions(const Variables_Set& vars);
+16535: 
+16535: 
+16535: 
+16535:   void shift_space_dimensions(Variable v, dimension_type n);
+16535: # 576 "../../src/Linear_Expression_defs.hh"
+16535:   void permute_space_dimensions(const std::vector<Variable>& cycle);
+16535: 
+16535: 
+16535:   bool is_zero() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool all_homogeneous_terms_are_zero() const;
+16535: 
+16535: 
+16535:   static void initialize();
+16535: 
+16535: 
+16535:   static void finalize();
+16535: 
+16535: 
+16535:   static const Linear_Expression& zero();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   void m_swap(Linear_Expression& y);
+16535: 
+16535: 
+16535:   Linear_Expression(const Linear_Expression& e, dimension_type space_dim);
+16535: 
+16535: 
+16535:   Linear_Expression(const Linear_Expression& e, dimension_type space_dim,
+16535:                     Representation r);
+16535: 
+16535: 
+16535: 
+16535:   bool is_equal_to(const Linear_Expression& x) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void normalize();
+16535: 
+16535: 
+16535: 
+16535:   void sign_normalize();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool all_zeroes(const Variables_Set& vars) const;
+16535: 
+16535: private:
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Linear_Expression* zero_p;
+16535: 
+16535:   Linear_Expression_Interface* impl;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Linear_Expression(dimension_type space_dim, bool,
+16535:                     Representation r = default_representation);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference get(dimension_type i) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void set(dimension_type i, Coefficient_traits::const_reference n);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference get(Variable v) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void set(Variable v, Coefficient_traits::const_reference n);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool all_zeroes(dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type num_zeroes(dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Coefficient gcd(dimension_type start, dimension_type end) const;
+16535: 
+16535:   void exact_div_assign(Coefficient_traits::const_reference c,
+16535:                         dimension_type start, dimension_type end);
+16535: # 725 "../../src/Linear_Expression_defs.hh"
+16535:   void linear_combine(const Linear_Expression& y, dimension_type i);
+16535: 
+16535: 
+16535: 
+16535:   void linear_combine(const Linear_Expression& y,
+16535:                       Coefficient_traits::const_reference c1,
+16535:                       Coefficient_traits::const_reference c2,
+16535:                       dimension_type start, dimension_type end);
+16535: 
+16535: 
+16535: 
+16535:   void linear_combine_lax(const Linear_Expression& y,
+16535:                           Coefficient_traits::const_reference c1,
+16535:                           Coefficient_traits::const_reference c2,
+16535:                           dimension_type start, dimension_type end);
+16535: 
+16535: 
+16535:   void mul_assign(Coefficient_traits::const_reference n,
+16535:                   dimension_type start, dimension_type end);
+16535: 
+16535: 
+16535: 
+16535:   dimension_type last_nonzero() const;
+16535: 
+16535: 
+16535: 
+16535:   dimension_type last_nonzero(dimension_type first, dimension_type last) const;
+16535: 
+16535: 
+16535: 
+16535:   dimension_type first_nonzero(dimension_type first, dimension_type last) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool all_zeroes_except(const Variables_Set& vars,
+16535:                          dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535:   void scalar_product_assign(Coefficient& result,
+16535:                              const Linear_Expression& y) const;
+16535: 
+16535: 
+16535:   void scalar_product_assign(Coefficient& result, const Linear_Expression& y,
+16535:                              dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535:   int scalar_product_sign(const Linear_Expression& y) const;
+16535: 
+16535: 
+16535: 
+16535:   int scalar_product_sign(const Linear_Expression& y,
+16535:                           dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535:   void has_a_free_dimension_helper(std::set<dimension_type>& x) const;
+16535: 
+16535: 
+16535:   bool is_equal_to(const Linear_Expression& x,
+16535:                    dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535: 
+16535:   bool is_equal_to(const Linear_Expression& x,
+16535:                    Coefficient_traits::const_reference c1,
+16535:                    Coefficient_traits::const_reference c2,
+16535:                    dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535:   void get_row(Dense_Row& r) const;
+16535: 
+16535: 
+16535:   void get_row(Sparse_Row& r) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool have_a_common_variable(const Linear_Expression& x,
+16535:                               Variable first, Variable last) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void negate(dimension_type first, dimension_type last);
+16535: 
+16535:   template <typename Row>
+16535:   friend class Linear_Expression_Impl;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   friend class Grid;
+16535:   friend class Congruence;
+16535:   friend class Polyhedron;
+16535:   friend class PIP_Tree_Node;
+16535:   friend class Grid_Generator;
+16535:   friend class Generator;
+16535:   friend class Constraint;
+16535:   friend class Constraint_System;
+16535:   friend class PIP_Problem;
+16535:   friend class BHRZ03_Certificate;
+16535:   friend class Scalar_Products;
+16535:   friend class MIP_Problem;
+16535:   friend class Box_Helpers;
+16535:   friend class Congruence_System;
+16535:   friend class BD_Shape_Helpers;
+16535:   friend class Octagonal_Shape_Helper;
+16535:   friend class Termination_Helpers;
+16535:   template <typename T>
+16535:   friend class BD_Shape;
+16535:   template <typename T>
+16535:   friend class Octagonal_Shape;
+16535:   template <typename T>
+16535:   friend class Linear_System;
+16535:   template <typename T>
+16535:   friend class Box;
+16535:   template <typename T>
+16535:   friend class Expression_Adapter;
+16535:   template <typename T>
+16535:   friend class Expression_Hide_Inhomo;
+16535:   template <typename T>
+16535:   friend class Expression_Hide_Last;
+16535: 
+16535:   friend Linear_Expression
+16535:   operator+(const Linear_Expression& e1, const Linear_Expression& e2);
+16535:   friend Linear_Expression
+16535:   operator+(Coefficient_traits::const_reference n, const Linear_Expression& e);
+16535:   friend Linear_Expression
+16535:   operator+(const Linear_Expression& e, Coefficient_traits::const_reference n);
+16535:   friend Linear_Expression
+16535:   operator+(Variable v, const Linear_Expression& e);
+16535:   friend Linear_Expression
+16535:   operator+(Variable v, Variable w);
+16535: 
+16535:   friend Linear_Expression
+16535:   operator-(const Linear_Expression& e);
+16535: 
+16535:   friend Linear_Expression
+16535:   operator-(const Linear_Expression& e1, const Linear_Expression& e2);
+16535:   friend Linear_Expression
+16535:   operator-(Variable v, Variable w);
+16535:   friend Linear_Expression
+16535:   operator-(Coefficient_traits::const_reference n, const Linear_Expression& e);
+16535:   friend Linear_Expression
+16535:   operator-(const Linear_Expression& e, Coefficient_traits::const_reference n);
+16535:   friend Linear_Expression
+16535:   operator-(Variable v, const Linear_Expression& e);
+16535:   friend Linear_Expression
+16535:   operator-(const Linear_Expression& e, Variable v);
+16535: 
+16535:   friend Linear_Expression
+16535:   operator*(Coefficient_traits::const_reference n, const Linear_Expression& e);
+16535:   friend Linear_Expression
+16535:   operator*(const Linear_Expression& e, Coefficient_traits::const_reference n);
+16535: 
+16535:   friend Linear_Expression&
+16535:   operator+=(Linear_Expression& e1, const Linear_Expression& e2);
+16535:   friend Linear_Expression&
+16535:   operator+=(Linear_Expression& e, Variable v);
+16535:   friend Linear_Expression&
+16535:   operator+=(Linear_Expression& e, Coefficient_traits::const_reference n);
+16535: 
+16535:   friend Linear_Expression&
+16535:   operator-=(Linear_Expression& e1, const Linear_Expression& e2);
+16535:   friend Linear_Expression&
+16535:   operator-=(Linear_Expression& e, Variable v);
+16535:   friend Linear_Expression&
+16535:   operator-=(Linear_Expression& e, Coefficient_traits::const_reference n);
+16535: 
+16535:   friend Linear_Expression&
+16535:   operator*=(Linear_Expression& e, Coefficient_traits::const_reference n);
+16535:   friend Linear_Expression&
+16535:   operator/=(Linear_Expression& e, Coefficient_traits::const_reference n);
+16535: 
+16535:   friend void
+16535:   neg_assign(Linear_Expression& e);
+16535: 
+16535:   friend Linear_Expression&
+16535:   add_mul_assign(Linear_Expression& e,
+16535:                  Coefficient_traits::const_reference n, Variable v);
+16535:   friend Linear_Expression&
+16535:   sub_mul_assign(Linear_Expression& e,
+16535:                  Coefficient_traits::const_reference n, Variable v);
+16535: 
+16535:   friend void
+16535:   add_mul_assign(Linear_Expression& e1,
+16535:                  Coefficient_traits::const_reference factor,
+16535:                  const Linear_Expression& e2);
+16535:   friend void
+16535:   sub_mul_assign(Linear_Expression& e1,
+16535:                  Coefficient_traits::const_reference factor,
+16535:                  const Linear_Expression& e2);
+16535: 
+16535:   friend int
+16535:   compare(const Linear_Expression& x, const Linear_Expression& y);
+16535: 
+16535:   friend std::ostream&
+16535:   Parma_Polyhedra_Library::IO_Operators
+16535:   ::operator<<(std::ostream& s, const Linear_Expression& e);
+16535: };
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: void swap(Linear_Expression& x, Linear_Expression& y);
+16535: 
+16535: 
+16535: 
+16535: void swap(Linear_Expression::const_iterator& x,
+16535:           Linear_Expression::const_iterator& y);
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Linear_Expression_inlines.hh" 1
+16535: # 29 "../../src/Linear_Expression_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline Linear_Expression&
+16535: Linear_Expression::operator=(const Linear_Expression& e) {
+16535:   Linear_Expression tmp = e;
+16535:   swap(*this, tmp);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline
+16535: Linear_Expression::~Linear_Expression() {
+16535:   delete impl;
+16535: }
+16535: 
+16535: inline Representation
+16535: Linear_Expression::representation() const {
+16535:   return impl->representation();
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Linear_Expression::space_dimension() const {
+16535:   return impl->space_dimension();
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression::set_space_dimension(dimension_type n) {
+16535:   impl->set_space_dimension(n);
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: Linear_Expression::coefficient(Variable v) const {
+16535:   return impl->coefficient(v);
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression
+16535: ::set_coefficient(Variable v, Coefficient_traits::const_reference n) {
+16535:   impl->set_coefficient(v, n);
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: Linear_Expression::inhomogeneous_term() const {
+16535:   return impl->inhomogeneous_term();
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression
+16535: ::set_inhomogeneous_term(Coefficient_traits::const_reference n) {
+16535:   impl->set_inhomogeneous_term(n);
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression::swap_space_dimensions(Variable v1, Variable v2) {
+16535:   impl->swap_space_dimensions(v1, v2);
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression::shift_space_dimensions(Variable v, dimension_type n) {
+16535:   impl->shift_space_dimensions(v, n);
+16535: }
+16535: 
+16535: inline bool
+16535: Linear_Expression::is_zero() const {
+16535:   return impl->is_zero();
+16535: }
+16535: 
+16535: inline bool
+16535: Linear_Expression::all_homogeneous_terms_are_zero() const {
+16535:   return impl->all_homogeneous_terms_are_zero();
+16535: }
+16535: 
+16535: inline const Linear_Expression&
+16535: Linear_Expression::zero() {
+16535:   ((void) 0);
+16535:   return *zero_p;
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Linear_Expression::external_memory_in_bytes() const {
+16535:   return impl->total_memory_in_bytes();
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Linear_Expression::total_memory_in_bytes() const {
+16535:   return external_memory_in_bytes() + sizeof(*this);
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression
+16535: operator+(const Linear_Expression& e) {
+16535:   return e;
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression
+16535: operator+(const Linear_Expression& e, Coefficient_traits::const_reference n) {
+16535:   Linear_Expression x = e;
+16535:   x += n;
+16535:   return x;
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression
+16535: operator+(const Linear_Expression& e, const Variable v) {
+16535:   Linear_Expression x = e;
+16535:   x += v;
+16535:   return x;
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression
+16535: operator-(const Linear_Expression& e, Coefficient_traits::const_reference n) {
+16535:   Linear_Expression x = e;
+16535:   x -= n;
+16535:   return x;
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression
+16535: operator-(const Variable v, const Variable w) {
+16535:   const dimension_type v_space_dim = v.space_dimension();
+16535:   const dimension_type w_space_dim = w.space_dimension();
+16535:   const dimension_type space_dim = std::max(v_space_dim, w_space_dim);
+16535:   if (space_dim > Linear_Expression::max_space_dimension()) {
+16535:     throw std::length_error("Linear_Expression "
+16535:                             "PPL::operator+(v, w):\n"
+16535:                             "v or w exceed the maximum allowed "
+16535:                             "space dimension.");
+16535:   }
+16535:   if (v_space_dim >= w_space_dim) {
+16535:     Linear_Expression e(v);
+16535:     e -= w;
+16535:     return e;
+16535:   }
+16535:   else {
+16535:     Linear_Expression e(w.space_dimension(), true);
+16535:     e -= w;
+16535:     e += v;
+16535:     return e;
+16535:   }
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression
+16535: operator*(const Linear_Expression& e, Coefficient_traits::const_reference n) {
+16535:   Linear_Expression x = e;
+16535:   x *= n;
+16535:   return x;
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression&
+16535: operator+=(Linear_Expression& e, Coefficient_traits::const_reference n) {
+16535:   *e.impl += n;
+16535:   return e;
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression&
+16535: operator-=(Linear_Expression& e, Coefficient_traits::const_reference n) {
+16535:   *e.impl -= n;
+16535:   return e;
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression::m_swap(Linear_Expression& y) {
+16535:   using std::swap;
+16535:   swap(impl, y.impl);
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression::normalize() {
+16535:   impl->normalize();
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression::ascii_dump(std::ostream& s) const {
+16535:   impl->ascii_dump(s);
+16535: }
+16535: 
+16535: inline bool
+16535: Linear_Expression::ascii_load(std::istream& s) {
+16535:   return impl->ascii_load(s);
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression::remove_space_dimensions(const Variables_Set& vars) {
+16535:   impl->remove_space_dimensions(vars);
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression::permute_space_dimensions(const std::vector<Variable>& cycle) {
+16535:   impl->permute_space_dimensions(cycle);
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression
+16535: operator+(const Linear_Expression& e1, const Linear_Expression& e2) {
+16535:   if (e1.space_dimension() >= e2.space_dimension()) {
+16535:     Linear_Expression e = e1;
+16535:     e += e2;
+16535:     return e;
+16535:   }
+16535:   else {
+16535:     Linear_Expression e = e2;
+16535:     e += e1;
+16535:     return e;
+16535:   }
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression
+16535: operator+(const Variable v, const Linear_Expression& e) {
+16535:   return e + v;
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression
+16535: operator+(Coefficient_traits::const_reference n,
+16535:                const Linear_Expression& e) {
+16535:   return e + n;
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression
+16535: operator+(const Variable v, const Variable w) {
+16535:   const dimension_type v_space_dim = v.space_dimension();
+16535:   const dimension_type w_space_dim = w.space_dimension();
+16535:   const dimension_type space_dim = std::max(v_space_dim, w_space_dim);
+16535:   if (space_dim > Linear_Expression::max_space_dimension()) {
+16535:     throw std::length_error("Linear_Expression "
+16535:                             "PPL::operator+(v, w):\n"
+16535:                             "v or w exceed the maximum allowed "
+16535:                             "space dimension.");
+16535:   }
+16535:   if (v_space_dim >= w_space_dim) {
+16535:     Linear_Expression e(v);
+16535:     e += w;
+16535:     return e;
+16535:   }
+16535:   else {
+16535:     Linear_Expression e(w);
+16535:     e += v;
+16535:     return e;
+16535:   }
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression
+16535: operator-(const Linear_Expression& e) {
+16535:   Linear_Expression r(e);
+16535:   neg_assign(r);
+16535:   return r;
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression
+16535: operator-(const Linear_Expression& e1, const Linear_Expression& e2) {
+16535:   if (e1.space_dimension() >= e2.space_dimension()) {
+16535:     Linear_Expression e = e1;
+16535:     e -= e2;
+16535:     return e;
+16535:   }
+16535:   else {
+16535:     Linear_Expression e = e2;
+16535:     neg_assign(e);
+16535:     e += e1;
+16535:     return e;
+16535:   }
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression
+16535: operator-(const Variable v, const Linear_Expression& e) {
+16535:   Linear_Expression result(e, std::max(v.space_dimension(), e.space_dimension()));
+16535:   result.negate(0, e.space_dimension() + 1);
+16535:   result += v;
+16535:   return result;
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression
+16535: operator-(const Linear_Expression& e, const Variable v) {
+16535:   Linear_Expression result(e, std::max(v.space_dimension(), e.space_dimension()));
+16535:   result -= v;
+16535:   return result;
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression
+16535: operator-(Coefficient_traits::const_reference n,
+16535:                const Linear_Expression& e) {
+16535:   Linear_Expression result(e);
+16535:   neg_assign(result);
+16535:   result += n;
+16535:   return result;
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression
+16535: operator*(Coefficient_traits::const_reference n,
+16535:                const Linear_Expression& e) {
+16535:   return e * n;
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression&
+16535: operator+=(Linear_Expression& e1, const Linear_Expression& e2) {
+16535:   *e1.impl += *e2.impl;
+16535:   return e1;
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression&
+16535: operator+=(Linear_Expression& e, const Variable v) {
+16535:   *e.impl += v;
+16535:   return e;
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression&
+16535: operator-=(Linear_Expression& e1, const Linear_Expression& e2) {
+16535:   *e1.impl -= *e2.impl;
+16535:   return e1;
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression&
+16535: operator-=(Linear_Expression& e, const Variable v) {
+16535:   *e.impl -= v;
+16535:   return e;
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression&
+16535: operator*=(Linear_Expression& e, Coefficient_traits::const_reference n) {
+16535:   *e.impl *= n;
+16535:   return e;
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression&
+16535: operator/=(Linear_Expression& e, Coefficient_traits::const_reference n) {
+16535:   *e.impl /= n;
+16535:   return e;
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: neg_assign(Linear_Expression& e) {
+16535:   e.impl->negate();
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression&
+16535: add_mul_assign(Linear_Expression& e,
+16535:                Coefficient_traits::const_reference n,
+16535:                const Variable v) {
+16535:   e.impl->add_mul_assign(n, v);
+16535:   return e;
+16535: }
+16535: 
+16535: 
+16535: inline Linear_Expression&
+16535: sub_mul_assign(Linear_Expression& e,
+16535:                     Coefficient_traits::const_reference n,
+16535:                     const Variable v) {
+16535:   e.impl->sub_mul_assign(n, v);
+16535:   return e;
+16535: }
+16535: 
+16535: inline void
+16535: add_mul_assign(Linear_Expression& e1,
+16535:                Coefficient_traits::const_reference factor,
+16535:                const Linear_Expression& e2) {
+16535:   e1.impl->add_mul_assign(factor, *e2.impl);
+16535: }
+16535: 
+16535: inline void
+16535: sub_mul_assign(Linear_Expression& e1,
+16535:                     Coefficient_traits::const_reference factor,
+16535:                     const Linear_Expression& e2) {
+16535:   e1.impl->sub_mul_assign(factor, *e2.impl);
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: Linear_Expression::get(dimension_type i) const {
+16535:   return impl->get(i);
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression::set(dimension_type i,
+16535:                        Coefficient_traits::const_reference n) {
+16535:   impl->set(i, n);
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: Linear_Expression::get(Variable v) const {
+16535:   return impl->get(v.space_dimension());
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression::set(Variable v,
+16535:                        Coefficient_traits::const_reference n) {
+16535:   impl->set(v.space_dimension(), n);
+16535: }
+16535: 
+16535: inline bool
+16535: Linear_Expression::all_zeroes(dimension_type start, dimension_type end) const {
+16535:   return impl->all_zeroes(start, end);
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Linear_Expression::num_zeroes(dimension_type start, dimension_type end) const {
+16535:   return impl->num_zeroes(start, end);
+16535: }
+16535: 
+16535: inline Coefficient
+16535: Linear_Expression::gcd(dimension_type start, dimension_type end) const {
+16535:   return impl->gcd(start, end);
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression
+16535: ::exact_div_assign(Coefficient_traits::const_reference c,
+16535:                    dimension_type start, dimension_type end) {
+16535:   impl->exact_div_assign(c, start, end);
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression
+16535: ::mul_assign(Coefficient_traits::const_reference c,
+16535:              dimension_type start, dimension_type end) {
+16535:   impl->mul_assign(c, start, end);
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression::sign_normalize() {
+16535:   impl->sign_normalize();
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression::negate(dimension_type first, dimension_type last) {
+16535:   impl->negate(first, last);
+16535: }
+16535: 
+16535: inline bool
+16535: Linear_Expression::all_zeroes(const Variables_Set& vars) const {
+16535:   return impl->all_zeroes(vars);
+16535: }
+16535: 
+16535: inline bool
+16535: Linear_Expression::all_zeroes_except(const Variables_Set& vars,
+16535:                                      dimension_type start,
+16535:                                      dimension_type end) const {
+16535:   return impl->all_zeroes_except(vars, start, end);
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Linear_Expression::last_nonzero() const {
+16535:   return impl->last_nonzero();
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression
+16535: ::scalar_product_assign(Coefficient& result, const Linear_Expression& y) const {
+16535:   scalar_product_assign(result, y, 0, space_dimension() + 1);
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression
+16535: ::scalar_product_assign(Coefficient& result, const Linear_Expression& y,
+16535:                         dimension_type start, dimension_type end) const {
+16535:   impl->scalar_product_assign(result, *(y.impl), start, end);
+16535: }
+16535: 
+16535: inline int
+16535: Linear_Expression
+16535: ::scalar_product_sign(const Linear_Expression& y) const {
+16535:   return scalar_product_sign(y, 0, space_dimension() + 1);
+16535: }
+16535: 
+16535: inline int
+16535: Linear_Expression
+16535: ::scalar_product_sign(const Linear_Expression& y,
+16535:                       dimension_type start, dimension_type end) const {
+16535:   return impl->scalar_product_sign(*(y.impl), start, end);
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Linear_Expression
+16535: ::first_nonzero(dimension_type first, dimension_type last) const {
+16535:   return impl->first_nonzero(first, last);
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Linear_Expression
+16535: ::last_nonzero(dimension_type first, dimension_type last) const {
+16535:   return impl->last_nonzero(first, last);
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression
+16535: ::has_a_free_dimension_helper(std::set<dimension_type>& x) const {
+16535:   return impl->has_a_free_dimension_helper(x);
+16535: }
+16535: 
+16535: inline bool
+16535: Linear_Expression
+16535: ::is_equal_to(const Linear_Expression& x,
+16535:               dimension_type start, dimension_type end) const {
+16535:   return impl->is_equal_to(*(x.impl), start, end);
+16535: }
+16535: 
+16535: inline bool
+16535: Linear_Expression
+16535: ::is_equal_to(const Linear_Expression& x,
+16535:               Coefficient_traits::const_reference c1,
+16535:               Coefficient_traits::const_reference c2,
+16535:               dimension_type start, dimension_type end) const {
+16535:   return impl->is_equal_to(*(x.impl), c1, c2, start, end);
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression
+16535: ::get_row(Dense_Row& r) const {
+16535:   return impl->get_row(r);
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression
+16535: ::get_row(Sparse_Row& r) const {
+16535:   return impl->get_row(r);
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression
+16535: ::linear_combine(const Linear_Expression& y, dimension_type i) {
+16535:   impl->linear_combine(*y.impl, i);
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression
+16535: ::linear_combine(const Linear_Expression& y,
+16535:                  Coefficient_traits::const_reference c1,
+16535:                  Coefficient_traits::const_reference c2) {
+16535:   impl->linear_combine(*y.impl, c1, c2);
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression
+16535: ::linear_combine_lax(const Linear_Expression& y,
+16535:                      Coefficient_traits::const_reference c1,
+16535:                      Coefficient_traits::const_reference c2) {
+16535:   impl->linear_combine_lax(*y.impl, c1, c2);
+16535: }
+16535: 
+16535: inline int
+16535: compare(const Linear_Expression& x, const Linear_Expression& y) {
+16535:   return x.impl->compare(*y.impl);
+16535: }
+16535: 
+16535: inline bool
+16535: Linear_Expression::is_equal_to(const Linear_Expression& x) const {
+16535:   return impl->is_equal_to(*x.impl);
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression::linear_combine(const Linear_Expression& y,
+16535:                                   Coefficient_traits::const_reference c1,
+16535:                                   Coefficient_traits::const_reference c2,
+16535:                                   dimension_type start,
+16535:                                   dimension_type end) {
+16535:   impl->linear_combine(*y.impl, c1, c2, start, end);
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression::linear_combine_lax(const Linear_Expression& y,
+16535:                                       Coefficient_traits::const_reference c1,
+16535:                                       Coefficient_traits::const_reference c2,
+16535:                                       dimension_type start,
+16535:                                       dimension_type end) {
+16535:   impl->linear_combine_lax(*y.impl, c1, c2, start, end);
+16535: }
+16535: 
+16535: inline bool
+16535: Linear_Expression
+16535: ::have_a_common_variable(const Linear_Expression& x,
+16535:                          Variable first, Variable last) const {
+16535:   return impl->have_a_common_variable(*(x.impl), first, last);
+16535: }
+16535: 
+16535: inline
+16535: Linear_Expression::const_iterator
+16535: ::const_iterator()
+16535:   : itr(
+16535: # 624 "../../src/Linear_Expression_inlines.hh" 3 4
+16535:        __null
+16535: # 624 "../../src/Linear_Expression_inlines.hh"
+16535:            ) {
+16535: }
+16535: 
+16535: inline
+16535: Linear_Expression::const_iterator
+16535: ::const_iterator(const const_iterator& i)
+16535:   : itr(i.itr->clone()) {
+16535: }
+16535: 
+16535: inline
+16535: Linear_Expression::const_iterator
+16535: ::~const_iterator() {
+16535: 
+16535:   delete itr;
+16535: }
+16535: 
+16535: inline void
+16535: Linear_Expression::const_iterator::m_swap(const_iterator& i) {
+16535:   using std::swap;
+16535:   swap(itr, i.itr);
+16535: }
+16535: 
+16535: inline Linear_Expression::const_iterator&
+16535: Linear_Expression::const_iterator
+16535: ::operator=(const const_iterator& i) {
+16535:   const_iterator tmp = i;
+16535:   using std::swap;
+16535:   swap(*this, tmp);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline Linear_Expression::const_iterator&
+16535: Linear_Expression::const_iterator
+16535: ::operator++() {
+16535:   ((void) 0);
+16535:   ++(*itr);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline Linear_Expression::const_iterator&
+16535: Linear_Expression::const_iterator
+16535: ::operator--() {
+16535:   ((void) 0);
+16535:   --(*itr);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline Linear_Expression::const_iterator::reference
+16535: Linear_Expression::const_iterator
+16535: ::operator*() const {
+16535:   ((void) 0);
+16535:   return *(*itr);
+16535: }
+16535: 
+16535: inline Variable
+16535: Linear_Expression::const_iterator
+16535: ::variable() const {
+16535:   ((void) 0);
+16535:   return itr->variable();
+16535: }
+16535: 
+16535: inline bool
+16535: Linear_Expression::const_iterator
+16535: ::operator==(const const_iterator& i) const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   return *itr == *(i.itr);
+16535: }
+16535: 
+16535: inline bool
+16535: Linear_Expression::const_iterator
+16535: ::operator!=(const const_iterator& i) const {
+16535:   return !(*this == i);
+16535: }
+16535: 
+16535: inline
+16535: Linear_Expression::const_iterator
+16535: ::const_iterator(Linear_Expression_Interface::const_iterator_interface* i)
+16535:   : itr(i) {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline Linear_Expression::const_iterator
+16535: Linear_Expression
+16535: ::begin() const {
+16535:   return const_iterator(impl->begin());
+16535: }
+16535: 
+16535: inline Linear_Expression::const_iterator
+16535: Linear_Expression
+16535: ::end() const {
+16535:   return const_iterator(impl->end());
+16535: }
+16535: 
+16535: inline Linear_Expression::const_iterator
+16535: Linear_Expression
+16535: ::lower_bound(Variable v) const {
+16535:   return const_iterator(impl->lower_bound(v));
+16535: }
+16535: 
+16535: template <typename LE_Adapter>
+16535: inline
+16535: Linear_Expression
+16535: ::Linear_Expression(const LE_Adapter& e,
+16535:                     typename Enable_If<Is_Same_Or_Derived<Expression_Adapter_Base,
+16535:                                                           LE_Adapter>::value,
+16535:                                        void*>::type)
+16535:   : impl(
+16535: # 731 "../../src/Linear_Expression_inlines.hh" 3 4
+16535:         __null
+16535: # 731 "../../src/Linear_Expression_inlines.hh"
+16535:             ) {
+16535:   Linear_Expression tmp(e.representation());
+16535:   tmp.set_space_dimension(e.space_dimension());
+16535:   tmp.set_inhomogeneous_term(e.inhomogeneous_term());
+16535:   for (typename LE_Adapter::const_iterator i = e.begin(),
+16535:          i_end = e.end(); i != i_end; ++i) {
+16535:     add_mul_assign(tmp, *i, i.variable());
+16535:   }
+16535:   using std::swap;
+16535:   swap(impl, tmp.impl);
+16535: }
+16535: 
+16535: template <typename LE_Adapter>
+16535: inline
+16535: Linear_Expression
+16535: ::Linear_Expression(const LE_Adapter& e,
+16535:                     Representation r,
+16535:                     typename Enable_If<Is_Same_Or_Derived<Expression_Adapter_Base,
+16535:                                                           LE_Adapter>::value,
+16535:                                        void*>::type)
+16535:   : impl(
+16535: # 751 "../../src/Linear_Expression_inlines.hh" 3 4
+16535:         __null
+16535: # 751 "../../src/Linear_Expression_inlines.hh"
+16535:             ) {
+16535:   Linear_Expression tmp(r);
+16535:   tmp.set_space_dimension(e.space_dimension());
+16535:   tmp.set_inhomogeneous_term(e.inhomogeneous_term());
+16535:   for (typename LE_Adapter::const_iterator i = e.begin(),
+16535:          i_end = e.end(); i != i_end; ++i) {
+16535:     add_mul_assign(tmp, *i, i.variable());
+16535:   }
+16535:   using std::swap;
+16535:   swap(impl, tmp.impl);
+16535: }
+16535: 
+16535: template <typename LE_Adapter>
+16535: inline
+16535: Linear_Expression
+16535: ::Linear_Expression(const LE_Adapter& e,
+16535:                     dimension_type space_dim,
+16535:                     typename Enable_If<Is_Same_Or_Derived<Expression_Adapter_Base,
+16535:                                                           LE_Adapter>::value,
+16535:                                        void*>::type)
+16535:   : impl(
+16535: # 771 "../../src/Linear_Expression_inlines.hh" 3 4
+16535:         __null
+16535: # 771 "../../src/Linear_Expression_inlines.hh"
+16535:             ) {
+16535:   Linear_Expression tmp(e.representation());
+16535:   tmp.set_space_dimension(space_dim);
+16535:   tmp.set_inhomogeneous_term(e.inhomogeneous_term());
+16535:   typedef typename LE_Adapter::const_iterator itr_t;
+16535:   itr_t i_end;
+16535:   if (space_dim <= e.space_dimension()) {
+16535:     i_end = e.lower_bound(Variable(space_dim));
+16535:   }
+16535:   else {
+16535:     i_end = e.end();
+16535:   }
+16535:   for (itr_t i = e.begin(); i != i_end; ++i) {
+16535:     add_mul_assign(tmp, *i, i.variable());
+16535:   }
+16535:   using std::swap;
+16535:   swap(impl, tmp.impl);
+16535: }
+16535: 
+16535: template <typename LE_Adapter>
+16535: inline
+16535: Linear_Expression
+16535: ::Linear_Expression(const LE_Adapter& e,
+16535:                     dimension_type space_dim,
+16535:                     Representation r,
+16535:                     typename Enable_If<Is_Same_Or_Derived<Expression_Adapter_Base,
+16535:                                                           LE_Adapter>::value,
+16535:                                        void*>::type)
+16535:   : impl(
+16535: # 799 "../../src/Linear_Expression_inlines.hh" 3 4
+16535:         __null
+16535: # 799 "../../src/Linear_Expression_inlines.hh"
+16535:             ) {
+16535:   Linear_Expression tmp(r);
+16535:   tmp.set_space_dimension(space_dim);
+16535:   tmp.set_inhomogeneous_term(e.inhomogeneous_term());
+16535:   typedef typename LE_Adapter::const_iterator itr_t;
+16535:   itr_t i_end;
+16535:   if (space_dim <= e.space_dimension()) {
+16535:     i_end = e.lower_bound(Variable(space_dim));
+16535:   }
+16535:   else {
+16535:     i_end = e.end();
+16535:   }
+16535:   for (itr_t i = e.begin(); i != i_end; ++i) {
+16535:     add_mul_assign(tmp, *i, i.variable());
+16535:   }
+16535:   using std::swap;
+16535:   swap(impl, tmp.impl);
+16535: }
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: inline std::ostream&
+16535: operator<<(std::ostream& s, const Linear_Expression& e) {
+16535:   e.impl->print(s);
+16535:   return s;
+16535: }
+16535: 
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: swap(Linear_Expression& x, Linear_Expression& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: swap(Linear_Expression::const_iterator& x,
+16535:      Linear_Expression::const_iterator& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 946 "../../src/Linear_Expression_defs.hh" 2
+16535: # 37 "../../src/Constraint_defs.hh" 2
+16535: 
+16535: # 1 "../../src/Topology_types.hh" 1
+16535: # 16 "../../src/Topology_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: enum Topology {
+16535:   NECESSARILY_CLOSED = 0,
+16535:   NOT_NECESSARILY_CLOSED = 1
+16535: };
+16535: 
+16535: }
+16535: # 39 "../../src/Constraint_defs.hh" 2
+16535: # 1 "../../src/Expression_Hide_Last_defs.hh" 1
+16535: # 36 "../../src/Expression_Hide_Last_defs.hh"
+16535: template <typename T>
+16535: class Parma_Polyhedra_Library::Expression_Hide_Last
+16535:   : public Expression_Adapter<T> {
+16535:   typedef Expression_Adapter<T> base_type;
+16535: public:
+16535: 
+16535:   typedef Expression_Hide_Last<T> const_reference;
+16535: 
+16535:   typedef typename base_type::inner_type inner_type;
+16535: 
+16535:   typedef typename base_type::raw_type raw_type;
+16535: 
+16535: 
+16535:   typedef typename base_type::const_iterator const_iterator;
+16535: 
+16535: 
+16535:   explicit Expression_Hide_Last(const raw_type& expr, bool hide_last);
+16535: 
+16535: 
+16535:   const_iterator end() const;
+16535: 
+16535: 
+16535: 
+16535:   const_iterator lower_bound(Variable v) const;
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference coefficient(Variable v) const;
+16535: 
+16535: 
+16535:   bool is_zero() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool all_homogeneous_terms_are_zero() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename Expression>
+16535:   bool is_equal_to(const Expression& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool all_zeroes(const Variables_Set& vars) const;
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference get(dimension_type i) const;
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference get(Variable v) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool all_zeroes(dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535:   dimension_type num_zeroes(dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Coefficient gcd(dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535: 
+16535:   dimension_type last_nonzero() const;
+16535: 
+16535: 
+16535: 
+16535:   dimension_type last_nonzero(dimension_type first, dimension_type last) const;
+16535: 
+16535: 
+16535: 
+16535:   dimension_type first_nonzero(dimension_type first, dimension_type last) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool all_zeroes_except(const Variables_Set& vars,
+16535:                          dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535:   void has_a_free_dimension_helper(std::set<dimension_type>& x) const;
+16535: 
+16535: 
+16535: 
+16535:   template <typename Expression>
+16535:   bool is_equal_to(const Expression& y,
+16535:                    dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535: 
+16535:   template <typename Expression>
+16535:   bool is_equal_to(const Expression& y,
+16535:                    Coefficient_traits::const_reference c1,
+16535:                    Coefficient_traits::const_reference c2,
+16535:                    dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535:   void get_row(Dense_Row& r) const;
+16535: 
+16535: 
+16535:   void get_row(Sparse_Row& r) const;
+16535: 
+16535: 
+16535: 
+16535:   template <typename Expression>
+16535:   bool have_a_common_variable(const Expression& y,
+16535:                               Variable first, Variable last) const;
+16535: 
+16535: private:
+16535: 
+16535:   const bool hide_last_;
+16535: };
+16535: 
+16535: # 1 "../../src/Expression_Hide_Last_inlines.hh" 1
+16535: # 29 "../../src/Expression_Hide_Last_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: inline
+16535: Expression_Hide_Last<T>::Expression_Hide_Last(const raw_type& expr,
+16535:                                               const bool hide_last)
+16535:   : base_type(expr), hide_last_(hide_last) {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: Expression_Hide_Last<T>::space_dimension() const {
+16535:   dimension_type dim = this->inner().space_dimension();
+16535:   if (hide_last_) {
+16535:     ((void) 0);
+16535:     --dim;
+16535:   }
+16535:   return dim;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Expression_Hide_Last<T>::const_iterator
+16535: Expression_Hide_Last<T>::end() const {
+16535:   if (hide_last_) {
+16535:     return this->inner().lower_bound(Variable(space_dimension()));
+16535:   }
+16535:   else {
+16535:     return this->inner().end();
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Expression_Hide_Last<T>::const_iterator
+16535: Expression_Hide_Last<T>::lower_bound(Variable v) const {
+16535:   ((void) 0);
+16535:   return this->inner().lower_bound(v);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline Coefficient_traits::const_reference
+16535: Expression_Hide_Last<T>::coefficient(Variable v) const {
+16535:   ((void) 0);
+16535:   return this->inner().coefficient(v);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Expression_Hide_Last<T>::is_zero() const {
+16535:   return this->inner().all_zeroes(0, space_dimension() + 1);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Expression_Hide_Last<T>::all_homogeneous_terms_are_zero() const {
+16535:   return this->inner().all_zeroes(1, space_dimension() + 1);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Expression>
+16535: inline bool
+16535: Expression_Hide_Last<T>
+16535: ::is_equal_to(const Expression& y) const {
+16535:   const dimension_type x_dim = space_dimension();
+16535:   const dimension_type y_dim = y.space_dimension();
+16535:   if (x_dim != y_dim) {
+16535:     return false;
+16535:   }
+16535:   return is_equal_to(y, 0, x_dim + 1);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Expression_Hide_Last<T>::all_zeroes(const Variables_Set& vars) const {
+16535:   ((void) 0);
+16535:   return this->inner().all_zeroes(vars);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline Coefficient_traits::const_reference
+16535: Expression_Hide_Last<T>::get(dimension_type i) const {
+16535:   ((void) 0);
+16535:   return this->inner().get(i);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline Coefficient_traits::const_reference
+16535: Expression_Hide_Last<T>::get(Variable v) const {
+16535:   ((void) 0);
+16535:   return this->inner().get(v);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Expression_Hide_Last<T>::all_zeroes(dimension_type start,
+16535:                                     dimension_type end) const {
+16535:   ((void) 0);
+16535:   return this->inner().all_zeroes(start, end);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: Expression_Hide_Last<T>::num_zeroes(dimension_type start,
+16535:                                     dimension_type end) const {
+16535:   ((void) 0);
+16535:   return this->inner().num_zeroes(start, end);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline Coefficient
+16535: Expression_Hide_Last<T>::gcd(dimension_type start,
+16535:                              dimension_type end) const {
+16535:   ((void) 0);
+16535:   return this->inner().gcd(start, end);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: Expression_Hide_Last<T>::last_nonzero() const {
+16535:   return this->inner().last_nonzero(0, space_dimension() + 1);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: Expression_Hide_Last<T>::last_nonzero(dimension_type first,
+16535:                                       dimension_type last) const {
+16535:   ((void) 0);
+16535:   return this->inner().last_nonzero(first, last);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: Expression_Hide_Last<T>::first_nonzero(dimension_type first,
+16535:                                        dimension_type last) const {
+16535:   ((void) 0);
+16535:   return this->inner().first_nonzero(first, last);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Expression_Hide_Last<T>
+16535: ::all_zeroes_except(const Variables_Set& vars,
+16535:                     dimension_type start, dimension_type end) const {
+16535:   ((void) 0);
+16535:   return this->inner().all_zeroes_except(vars, start, end);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Expression_Hide_Last<T>
+16535: ::has_a_free_dimension_helper(std::set<dimension_type>& x) const {
+16535:   if (x.empty()) {
+16535:     return;
+16535:   }
+16535:   ((void) 0);
+16535:   this->inner().has_a_free_dimension_helper(x);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Expression>
+16535: inline bool
+16535: Expression_Hide_Last<T>
+16535: ::is_equal_to(const Expression& y,
+16535:               dimension_type start, dimension_type end) const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   return this->inner().is_equal_to(y, start, end);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Expression>
+16535: inline bool
+16535: Expression_Hide_Last<T>
+16535: ::is_equal_to(const Expression& y,
+16535:               Coefficient_traits::const_reference c1,
+16535:               Coefficient_traits::const_reference c2,
+16535:               dimension_type start, dimension_type end) const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   return this->inner().is_equal_to(y, c1, c2, start, end);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Expression_Hide_Last<T>::get_row(Dense_Row& r) const {
+16535:   this->inner().get_row(r);
+16535:   if (hide_last_) {
+16535:     ((void) 0);
+16535:     r.resize(r.size() - 1);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Expression_Hide_Last<T>::get_row(Sparse_Row& r) const {
+16535:   this->inner().get_row(r);
+16535:   if (hide_last_) {
+16535:     ((void) 0);
+16535:     r.resize(r.size() - 1);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Expression>
+16535: inline bool
+16535: Expression_Hide_Last<T>
+16535: ::have_a_common_variable(const Expression& y,
+16535:                          Variable first, Variable last) const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   return this->inner().have_a_common_variable(y, first, last);
+16535: }
+16535: 
+16535: }
+16535: # 164 "../../src/Expression_Hide_Last_defs.hh" 2
+16535: # 40 "../../src/Constraint_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: Constraint
+16535: operator<(const Linear_Expression& e1, const Linear_Expression& e2);
+16535: 
+16535: 
+16535: 
+16535: Constraint
+16535: operator<(Variable v1, Variable v2);
+16535: 
+16535: 
+16535: 
+16535: Constraint
+16535: operator<(const Linear_Expression& e, Coefficient_traits::const_reference n);
+16535: 
+16535: 
+16535: 
+16535: Constraint
+16535: operator<(Coefficient_traits::const_reference n, const Linear_Expression& e);
+16535: 
+16535: 
+16535: 
+16535: Constraint
+16535: operator>(const Linear_Expression& e1, const Linear_Expression& e2);
+16535: 
+16535: 
+16535: 
+16535: Constraint
+16535: operator>(Variable v1, Variable v2);
+16535: 
+16535: 
+16535: 
+16535: Constraint
+16535: operator>(const Linear_Expression& e, Coefficient_traits::const_reference n);
+16535: 
+16535: 
+16535: 
+16535: Constraint
+16535: operator>(Coefficient_traits::const_reference n, const Linear_Expression& e);
+16535: 
+16535: 
+16535: 
+16535: Constraint
+16535: operator==(const Linear_Expression& e1, const Linear_Expression& e2);
+16535: 
+16535: 
+16535: 
+16535: Constraint
+16535: operator==(Variable v1, Variable v2);
+16535: 
+16535: 
+16535: 
+16535: Constraint
+16535: operator==(const Linear_Expression& e, Coefficient_traits::const_reference n);
+16535: 
+16535: 
+16535: 
+16535: Constraint
+16535: operator==(Coefficient_traits::const_reference n, const Linear_Expression& e);
+16535: 
+16535: 
+16535: 
+16535: Constraint
+16535: operator<=(const Linear_Expression& e1, const Linear_Expression& e2);
+16535: 
+16535: 
+16535: 
+16535: Constraint
+16535: operator<=(Variable v1, Variable v2);
+16535: 
+16535: 
+16535: 
+16535: Constraint
+16535: operator<=(const Linear_Expression& e, Coefficient_traits::const_reference n);
+16535: 
+16535: 
+16535: 
+16535: Constraint
+16535: operator<=(Coefficient_traits::const_reference n, const Linear_Expression& e);
+16535: 
+16535: 
+16535: 
+16535: Constraint
+16535: operator>=(const Linear_Expression& e1, const Linear_Expression& e2);
+16535: 
+16535: 
+16535: 
+16535: Constraint
+16535: operator>=(Variable v1, Variable v2);
+16535: 
+16535: 
+16535: 
+16535: Constraint
+16535: operator>=(const Linear_Expression& e, Coefficient_traits::const_reference n);
+16535: 
+16535: 
+16535: 
+16535: Constraint
+16535: operator>=(Coefficient_traits::const_reference n, const Linear_Expression& e);
+16535: # 182 "../../src/Constraint_defs.hh"
+16535: int compare(const Constraint& x, const Constraint& y);
+16535: 
+16535: }
+16535: # 284 "../../src/Constraint_defs.hh"
+16535: class Parma_Polyhedra_Library::Constraint {
+16535: public:
+16535: 
+16535: 
+16535:   enum Type {
+16535: 
+16535:     EQUALITY,
+16535: 
+16535:     NONSTRICT_INEQUALITY,
+16535: 
+16535:     STRICT_INEQUALITY
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Representation default_representation = SPARSE;
+16535: 
+16535: 
+16535:   explicit Constraint(Representation r = default_representation);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Constraint(const Constraint& c);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Constraint(const Constraint& c, dimension_type space_dim);
+16535: 
+16535: 
+16535:   Constraint(const Constraint& c, Representation r);
+16535: 
+16535: 
+16535:   Constraint(const Constraint& c, dimension_type space_dim,
+16535:              Representation r);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   explicit Constraint(const Congruence& cg,
+16535:                       Representation r = default_representation);
+16535: 
+16535: 
+16535:   ~Constraint();
+16535: 
+16535: 
+16535:   Representation representation() const;
+16535: 
+16535: 
+16535:   void set_representation(Representation r);
+16535: 
+16535: 
+16535:   Constraint& operator=(const Constraint& c);
+16535: 
+16535: 
+16535:   static dimension_type max_space_dimension();
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535: 
+16535:   void set_space_dimension(dimension_type space_dim);
+16535: 
+16535: 
+16535:   void swap_space_dimensions(Variable v1, Variable v2);
+16535: # 371 "../../src/Constraint_defs.hh"
+16535:   bool remove_space_dimensions(const Variables_Set& vars);
+16535: # 385 "../../src/Constraint_defs.hh"
+16535:   void permute_space_dimensions(const std::vector<Variable>& cycle);
+16535: 
+16535: 
+16535: 
+16535:   void shift_space_dimensions(Variable v, dimension_type n);
+16535: 
+16535: 
+16535:   Type type() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_equality() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_inequality() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_nonstrict_inequality() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_strict_inequality() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference coefficient(Variable v) const;
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference inhomogeneous_term() const;
+16535: 
+16535: 
+16535:   static void initialize();
+16535: 
+16535: 
+16535:   static void finalize();
+16535: 
+16535: 
+16535:   static const Constraint& zero_dim_false();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Constraint& zero_dim_positivity();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: # 463 "../../src/Constraint_defs.hh"
+16535:   bool is_tautological() const;
+16535: # 477 "../../src/Constraint_defs.hh"
+16535:   bool is_inconsistent() const;
+16535: # 487 "../../src/Constraint_defs.hh"
+16535:   bool is_equivalent_to(const Constraint& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_equal_to(const Constraint& y) const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   void m_swap(Constraint& y);
+16535: 
+16535: 
+16535:   static const Constraint& epsilon_geq_zero();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Constraint& epsilon_leq_one();
+16535: 
+16535: 
+16535:   typedef Expression_Hide_Last<Linear_Expression> expr_type;
+16535: 
+16535:   expr_type expression() const;
+16535: 
+16535: private:
+16535: 
+16535: 
+16535:   enum Kind {
+16535:     LINE_OR_EQUALITY = 0,
+16535:     RAY_OR_POINT_OR_INEQUALITY = 1
+16535:   };
+16535: 
+16535:   Linear_Expression expr;
+16535: 
+16535:   Kind kind_;
+16535: 
+16535:   Topology topology_;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Constraint* zero_dim_false_p;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Constraint* zero_dim_positivity_p;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Constraint* epsilon_geq_zero_p;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Constraint* epsilon_leq_one_p;
+16535: 
+16535: 
+16535:   Constraint(dimension_type space_dim, Kind kind, Topology topology,
+16535:              Representation r = default_representation);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Constraint(Linear_Expression& e, Kind kind, Topology topology);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Constraint(Linear_Expression& e, Type type, Topology topology);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_line_or_equality() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_ray_or_point_or_inequality() const;
+16535: 
+16535: 
+16535:   void set_is_line_or_equality();
+16535: 
+16535: 
+16535:   void set_is_ray_or_point_or_inequality();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Topology topology() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_not_necessarily_closed() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_necessarily_closed() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void set_topology(Topology x);
+16535: 
+16535: 
+16535:   void set_necessarily_closed();
+16535: 
+16535: 
+16535:   void set_not_necessarily_closed();
+16535: # 642 "../../src/Constraint_defs.hh"
+16535:   void set_space_dimension_no_ok(dimension_type space_dim);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void
+16535:   throw_invalid_argument(const char* method, const char* message) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void
+16535:   throw_dimension_incompatible(const char* method,
+16535:                                const char* name_var,
+16535:                                Variable v) const;
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference epsilon_coefficient() const;
+16535: 
+16535: 
+16535:   void set_epsilon_coefficient(Coefficient_traits::const_reference n);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void mark_as_necessarily_closed();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void mark_as_not_necessarily_closed();
+16535: 
+16535: 
+16535:   void set_is_equality();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void set_is_inequality();
+16535: # 703 "../../src/Constraint_defs.hh"
+16535:   void linear_combine(const Constraint& y, dimension_type i);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void sign_normalize();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void strong_normalize();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool check_strong_normalized() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static Constraint construct_epsilon_geq_zero();
+16535: 
+16535:   friend int
+16535:   compare(const Constraint& x, const Constraint& y);
+16535: 
+16535:   friend class Linear_System<Constraint>;
+16535:   friend class Constraint_System;
+16535:   friend class Polyhedron;
+16535:   friend class Scalar_Products;
+16535:   friend class Topology_Adjusted_Scalar_Product_Sign;
+16535:   friend class Termination_Helpers;
+16535:   friend class Grid;
+16535:   template <typename T>
+16535:   friend class Octagonal_Shape;
+16535: 
+16535:   friend Constraint
+16535:   operator<(const Linear_Expression& e1, const Linear_Expression& e2);
+16535: 
+16535:   friend Constraint
+16535:   operator<(Variable v1, Variable v2);
+16535: 
+16535:   friend Constraint
+16535:   operator<(const Linear_Expression& e, Coefficient_traits::const_reference n);
+16535: 
+16535:   friend Constraint
+16535:   operator<(Coefficient_traits::const_reference n, const Linear_Expression& e);
+16535: 
+16535:   friend Constraint
+16535:   operator>(const Linear_Expression& e1, const Linear_Expression& e2);
+16535: 
+16535:   friend Constraint
+16535:   operator>(Variable v1, Variable v2);
+16535: 
+16535:   friend Constraint
+16535:   operator>(const Linear_Expression& e, Coefficient_traits::const_reference n);
+16535: 
+16535:   friend Constraint
+16535:   operator>(Coefficient_traits::const_reference n, const Linear_Expression& e);
+16535: 
+16535:   friend Constraint
+16535:   operator==(const Linear_Expression& e1, const Linear_Expression& e2);
+16535: 
+16535:   friend Constraint
+16535:   operator==(Variable v1, Variable v2);
+16535: 
+16535:   friend Constraint
+16535:   operator==(const Linear_Expression& e, Coefficient_traits::const_reference n);
+16535: 
+16535:   friend Constraint
+16535:   operator==(Coefficient_traits::const_reference n, const Linear_Expression& e);
+16535: 
+16535:   friend Constraint
+16535:   operator<=(const Linear_Expression& e1, const Linear_Expression& e2);
+16535: 
+16535:   friend Constraint
+16535:   operator<=(Variable v1, Variable v2);
+16535: 
+16535:   friend Constraint
+16535:   operator<=(const Linear_Expression& e, Coefficient_traits::const_reference n);
+16535: 
+16535:   friend Constraint
+16535:   operator<=(Coefficient_traits::const_reference n, const Linear_Expression& e);
+16535: 
+16535:   friend Constraint
+16535:   operator>=(const Linear_Expression& e1, const Linear_Expression& e2);
+16535: 
+16535:   friend Constraint
+16535:   operator>=(Variable v1, Variable v2);
+16535: 
+16535:   friend Constraint
+16535:   operator>=(const Linear_Expression& e, Coefficient_traits::const_reference n);
+16535: 
+16535:   friend Constraint
+16535:   operator>=(Coefficient_traits::const_reference n, const Linear_Expression& e);
+16535: };
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: std::ostream& operator<<(std::ostream& s, const Constraint& c);
+16535: 
+16535: 
+16535: 
+16535: std::ostream& operator<<(std::ostream& s, const Constraint::Type& t);
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: bool
+16535: operator==(const Constraint& x, const Constraint& y);
+16535: 
+16535: 
+16535: 
+16535: bool
+16535: operator!=(const Constraint& x, const Constraint& y);
+16535: 
+16535: 
+16535: void swap(Constraint& x, Constraint& y);
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Constraint_inlines.hh" 1
+16535: # 29 "../../src/Constraint_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline bool
+16535: Constraint::is_necessarily_closed() const {
+16535:   return (topology_ == NECESSARILY_CLOSED);
+16535: }
+16535: 
+16535: inline bool
+16535: Constraint::is_not_necessarily_closed() const {
+16535:   return !is_necessarily_closed();
+16535: }
+16535: 
+16535: inline Constraint::expr_type
+16535: Constraint::expression() const {
+16535:   return expr_type(expr, is_not_necessarily_closed());
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Constraint::space_dimension() const {
+16535:   return expression().space_dimension();
+16535: }
+16535: 
+16535: inline void
+16535: Constraint::shift_space_dimensions(Variable v, dimension_type n) {
+16535:   expr.shift_space_dimensions(v, n);
+16535: }
+16535: 
+16535: inline bool
+16535: Constraint::is_line_or_equality() const {
+16535:   return (kind_ == LINE_OR_EQUALITY);
+16535: }
+16535: 
+16535: inline bool
+16535: Constraint::is_ray_or_point_or_inequality() const {
+16535:   return (kind_ == RAY_OR_POINT_OR_INEQUALITY);
+16535: }
+16535: 
+16535: inline Topology
+16535: Constraint::topology() const {
+16535:   return topology_;
+16535: }
+16535: 
+16535: inline void
+16535: Constraint::set_is_line_or_equality() {
+16535:   kind_ = LINE_OR_EQUALITY;
+16535: }
+16535: 
+16535: inline void
+16535: Constraint::set_is_ray_or_point_or_inequality() {
+16535:   kind_ = RAY_OR_POINT_OR_INEQUALITY;
+16535: }
+16535: 
+16535: inline void
+16535: Constraint::set_topology(Topology x) {
+16535:   if (topology() == x) {
+16535:     return;
+16535:   }
+16535:   if (topology() == NECESSARILY_CLOSED) {
+16535: 
+16535:     expr.set_space_dimension(expr.space_dimension() + 1);
+16535:   }
+16535:   else {
+16535:     ((void) 0);
+16535:     expr.set_space_dimension(expr.space_dimension() - 1);
+16535:   }
+16535:   topology_ = x;
+16535: }
+16535: 
+16535: inline void
+16535: Constraint::mark_as_necessarily_closed() {
+16535:   ((void) 0);
+16535:   topology_ = NECESSARILY_CLOSED;
+16535: }
+16535: 
+16535: inline void
+16535: Constraint::mark_as_not_necessarily_closed() {
+16535:   ((void) 0);
+16535:   topology_ = NOT_NECESSARILY_CLOSED;
+16535: }
+16535: 
+16535: inline void
+16535: Constraint::set_necessarily_closed() {
+16535:   set_topology(NECESSARILY_CLOSED);
+16535: }
+16535: 
+16535: inline void
+16535: Constraint::set_not_necessarily_closed() {
+16535:   set_topology(NOT_NECESSARILY_CLOSED);
+16535: }
+16535: 
+16535: inline
+16535: Constraint::Constraint(Representation r)
+16535:   : expr(r),
+16535:     kind_(RAY_OR_POINT_OR_INEQUALITY),
+16535:     topology_(NECESSARILY_CLOSED) {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Constraint::Constraint(dimension_type space_dim, Kind kind, Topology topology,
+16535:                        Representation r)
+16535:   : expr(r),
+16535:     kind_(kind),
+16535:     topology_(topology) {
+16535:   expr.set_space_dimension(space_dim + 1);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Constraint::Constraint(Linear_Expression& e, Kind kind, Topology topology)
+16535:   : kind_(kind),
+16535:     topology_(topology) {
+16535:   ((void) 0);
+16535:   swap(expr, e);
+16535:   if (topology == NOT_NECESSARILY_CLOSED) {
+16535: 
+16535:     expr.set_space_dimension(expr.space_dimension() + 1);
+16535:   }
+16535:   strong_normalize();
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Constraint::Constraint(Linear_Expression& e, Type type, Topology topology)
+16535:   : topology_(topology) {
+16535:   ((void) 0);
+16535:   swap(expr, e);
+16535:   if (topology == NOT_NECESSARILY_CLOSED) {
+16535:     expr.set_space_dimension(expr.space_dimension() + 1);
+16535:   }
+16535:   if (type == EQUALITY) {
+16535:     kind_ = LINE_OR_EQUALITY;
+16535:   }
+16535:   else {
+16535:     kind_ = RAY_OR_POINT_OR_INEQUALITY;
+16535:   }
+16535:   strong_normalize();
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Constraint::Constraint(const Constraint& c)
+16535:   : expr(c.expr),
+16535:     kind_(c.kind_),
+16535:     topology_(c.topology_) {
+16535: 
+16535: }
+16535: 
+16535: inline
+16535: Constraint::Constraint(const Constraint& c, Representation r)
+16535:   : expr(c.expr, r),
+16535:     kind_(c.kind_),
+16535:     topology_(c.topology_) {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Constraint::Constraint(const Constraint& c, const dimension_type space_dim)
+16535:   : expr(c.expr, c.is_necessarily_closed() ? space_dim : (space_dim + 1)),
+16535:     kind_(c.kind_), topology_(c.topology_) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Constraint::Constraint(const Constraint& c, const dimension_type space_dim,
+16535:                        Representation r)
+16535:   : expr(c.expr, c.is_necessarily_closed() ? space_dim : (space_dim + 1), r),
+16535:     kind_(c.kind_), topology_(c.topology_) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Constraint::~Constraint() {
+16535: }
+16535: 
+16535: inline Constraint&
+16535: Constraint::operator=(const Constraint& c) {
+16535:   Constraint tmp = c;
+16535:   swap(*this, tmp);
+16535: 
+16535:   return *this;
+16535: }
+16535: 
+16535: inline Representation
+16535: Constraint::representation() const {
+16535:   return expr.representation();
+16535: }
+16535: 
+16535: inline void
+16535: Constraint::set_representation(Representation r) {
+16535:   expr.set_representation(r);
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Constraint::max_space_dimension() {
+16535:   return Linear_Expression::max_space_dimension();
+16535: }
+16535: 
+16535: inline void
+16535: Constraint::set_space_dimension_no_ok(dimension_type space_dim) {
+16535:   const dimension_type old_expr_space_dim = expr.space_dimension();
+16535:   if (topology() == NECESSARILY_CLOSED) {
+16535:     expr.set_space_dimension(space_dim);
+16535:   }
+16535:   else {
+16535:     const dimension_type old_space_dim = space_dimension();
+16535:     if (space_dim > old_space_dim) {
+16535:       expr.set_space_dimension(space_dim + 1);
+16535:       expr.swap_space_dimensions(Variable(space_dim), Variable(old_space_dim));
+16535:     }
+16535:     else {
+16535:       expr.swap_space_dimensions(Variable(space_dim), Variable(old_space_dim));
+16535:       expr.set_space_dimension(space_dim + 1);
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535:   if (expr.space_dimension() < old_expr_space_dim) {
+16535:     strong_normalize();
+16535:   }
+16535: }
+16535: 
+16535: inline void
+16535: Constraint::set_space_dimension(dimension_type space_dim) {
+16535:   set_space_dimension_no_ok(space_dim);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline bool
+16535: Constraint::remove_space_dimensions(const Variables_Set& vars) {
+16535:   expr.remove_space_dimensions(vars);
+16535:   return true;
+16535: }
+16535: 
+16535: inline bool
+16535: Constraint::is_equality() const {
+16535:   return is_line_or_equality();
+16535: }
+16535: 
+16535: inline bool
+16535: Constraint::is_inequality() const {
+16535:   return is_ray_or_point_or_inequality();
+16535: }
+16535: 
+16535: inline Constraint::Type
+16535: Constraint::type() const {
+16535:   if (is_equality()) {
+16535:     return EQUALITY;
+16535:   }
+16535:   if (is_necessarily_closed()) {
+16535:     return NONSTRICT_INEQUALITY;
+16535:   }
+16535:   if (epsilon_coefficient() < 0) {
+16535:     return STRICT_INEQUALITY;
+16535:   }
+16535:   else {
+16535:     return NONSTRICT_INEQUALITY;
+16535:   }
+16535: }
+16535: 
+16535: inline bool
+16535: Constraint::is_nonstrict_inequality() const {
+16535:   return type() == NONSTRICT_INEQUALITY;
+16535: }
+16535: 
+16535: inline bool
+16535: Constraint::is_strict_inequality() const {
+16535:   return type() == STRICT_INEQUALITY;
+16535: }
+16535: 
+16535: inline void
+16535: Constraint::set_is_equality() {
+16535:   set_is_line_or_equality();
+16535: }
+16535: 
+16535: inline void
+16535: Constraint::set_is_inequality() {
+16535:   set_is_ray_or_point_or_inequality();
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: Constraint::coefficient(const Variable v) const {
+16535:   if (v.space_dimension() > space_dimension()) {
+16535:     throw_dimension_incompatible("coefficient(v)", "v", v);
+16535:   }
+16535:   return expr.coefficient(v);
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: Constraint::inhomogeneous_term() const {
+16535:   return expr.inhomogeneous_term();
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Constraint::external_memory_in_bytes() const {
+16535:   return expr.external_memory_in_bytes();
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Constraint::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: inline void
+16535: Constraint::strong_normalize() {
+16535:   expr.normalize();
+16535:   sign_normalize();
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: operator==(const Constraint& x, const Constraint& y) {
+16535:   return x.is_equivalent_to(y);
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: operator!=(const Constraint& x, const Constraint& y) {
+16535:   return !x.is_equivalent_to(y);
+16535: }
+16535: 
+16535: 
+16535: inline Constraint
+16535: operator==(const Linear_Expression& e1, const Linear_Expression& e2) {
+16535:   Linear_Expression diff(e1,
+16535:                          std::max(e1.space_dimension(), e2.space_dimension()),
+16535:                          Constraint::default_representation);
+16535:   diff -= e2;
+16535:   return Constraint(diff, Constraint::EQUALITY, NECESSARILY_CLOSED);
+16535: }
+16535: 
+16535: 
+16535: inline Constraint
+16535: operator==(Variable v1, Variable v2) {
+16535:   if (v1.space_dimension() > v2.space_dimension()) {
+16535:     swap(v1, v2);
+16535:   }
+16535:   ((void) 0);
+16535: 
+16535:   Linear_Expression diff(v1, Constraint::default_representation);
+16535:   diff -= v2;
+16535:   return Constraint(diff, Constraint::EQUALITY, NECESSARILY_CLOSED);
+16535: }
+16535: 
+16535: 
+16535: inline Constraint
+16535: operator>=(const Linear_Expression& e1, const Linear_Expression& e2) {
+16535:   Linear_Expression diff(e1,
+16535:                          std::max(e1.space_dimension(), e2.space_dimension()),
+16535:                          Constraint::default_representation);
+16535:   diff -= e2;
+16535:   return Constraint(diff, Constraint::NONSTRICT_INEQUALITY, NECESSARILY_CLOSED);
+16535: }
+16535: 
+16535: 
+16535: inline Constraint
+16535: operator>=(const Variable v1, const Variable v2) {
+16535:   Linear_Expression diff(Constraint::default_representation);
+16535:   diff.set_space_dimension(std::max(v1.space_dimension(),
+16535:                                     v2.space_dimension()));
+16535:   diff += v1;
+16535:   diff -= v2;
+16535:   return Constraint(diff, Constraint::NONSTRICT_INEQUALITY, NECESSARILY_CLOSED);
+16535: }
+16535: 
+16535: 
+16535: inline Constraint
+16535: operator>(const Linear_Expression& e1, const Linear_Expression& e2) {
+16535:   Linear_Expression diff(e1, Constraint::default_representation);
+16535:   diff -= e2;
+16535:   Constraint c(diff, Constraint::STRICT_INEQUALITY, NOT_NECESSARILY_CLOSED);
+16535: 
+16535: 
+16535:   c.set_epsilon_coefficient(-1);
+16535:   ((void) 0);
+16535: 
+16535:   return c;
+16535: }
+16535: 
+16535: 
+16535: inline Constraint
+16535: operator>(const Variable v1, const Variable v2) {
+16535:   Linear_Expression diff(Constraint::default_representation);
+16535:   diff.set_space_dimension(std::max(v1.space_dimension(),
+16535:                                     v2.space_dimension()));
+16535:   diff += v1;
+16535:   diff -= v2;
+16535:   Constraint c(diff, Constraint::STRICT_INEQUALITY, NOT_NECESSARILY_CLOSED);
+16535: 
+16535:   c.set_epsilon_coefficient(-1);
+16535:   ((void) 0);
+16535: 
+16535:   return c;
+16535: }
+16535: 
+16535: 
+16535: inline Constraint
+16535: operator==(Coefficient_traits::const_reference n, const Linear_Expression& e) {
+16535:   Linear_Expression diff(e, Constraint::default_representation);
+16535:   neg_assign(diff);
+16535:   diff += n;
+16535:   return Constraint(diff, Constraint::EQUALITY, NECESSARILY_CLOSED);
+16535: }
+16535: 
+16535: 
+16535: inline Constraint
+16535: operator>=(Coefficient_traits::const_reference n, const Linear_Expression& e) {
+16535:   Linear_Expression diff(e, Constraint::default_representation);
+16535:   neg_assign(diff);
+16535:   diff += n;
+16535:   return Constraint(diff, Constraint::NONSTRICT_INEQUALITY, NECESSARILY_CLOSED);
+16535: }
+16535: 
+16535: 
+16535: inline Constraint
+16535: operator>(Coefficient_traits::const_reference n, const Linear_Expression& e) {
+16535:   Linear_Expression diff(e, Constraint::default_representation);
+16535:   neg_assign(diff);
+16535:   diff += n;
+16535:   Constraint c(diff, Constraint::STRICT_INEQUALITY, NOT_NECESSARILY_CLOSED);
+16535: 
+16535: 
+16535:   c.set_epsilon_coefficient(-1);
+16535:   ((void) 0);
+16535: 
+16535:   return c;
+16535: }
+16535: 
+16535: 
+16535: inline Constraint
+16535: operator==(const Linear_Expression& e, Coefficient_traits::const_reference n) {
+16535:   Linear_Expression diff(e, Constraint::default_representation);
+16535:   diff -= n;
+16535:   return Constraint(diff, Constraint::EQUALITY, NECESSARILY_CLOSED);
+16535: }
+16535: 
+16535: 
+16535: inline Constraint
+16535: operator>=(const Linear_Expression& e, Coefficient_traits::const_reference n) {
+16535:   Linear_Expression diff(e, Constraint::default_representation);
+16535:   diff -= n;
+16535:   return Constraint(diff, Constraint::NONSTRICT_INEQUALITY, NECESSARILY_CLOSED);
+16535: }
+16535: 
+16535: 
+16535: inline Constraint
+16535: operator>(const Linear_Expression& e, Coefficient_traits::const_reference n) {
+16535:   Linear_Expression diff(e, Constraint::default_representation);
+16535:   diff -= n;
+16535:   Constraint c(diff, Constraint::STRICT_INEQUALITY, NOT_NECESSARILY_CLOSED);
+16535: 
+16535: 
+16535:   c.set_epsilon_coefficient(-1);
+16535:   ((void) 0);
+16535: 
+16535:   return c;
+16535: }
+16535: 
+16535: 
+16535: inline Constraint
+16535: operator<=(const Linear_Expression& e1, const Linear_Expression& e2) {
+16535:   return e2 >= e1;
+16535: }
+16535: 
+16535: 
+16535: inline Constraint
+16535: operator<=(const Variable v1, const Variable v2) {
+16535:   return v2 >= v1;
+16535: }
+16535: 
+16535: 
+16535: inline Constraint
+16535: operator<=(Coefficient_traits::const_reference n, const Linear_Expression& e) {
+16535:   return e >= n;
+16535: }
+16535: 
+16535: 
+16535: inline Constraint
+16535: operator<=(const Linear_Expression& e, Coefficient_traits::const_reference n) {
+16535:   return n >= e;
+16535: }
+16535: 
+16535: 
+16535: inline Constraint
+16535: operator<(const Linear_Expression& e1, const Linear_Expression& e2) {
+16535:   return e2 > e1;
+16535: }
+16535: 
+16535: 
+16535: inline Constraint
+16535: operator<(const Variable v1, const Variable v2) {
+16535:   return v2 > v1;
+16535: }
+16535: 
+16535: 
+16535: inline Constraint
+16535: operator<(Coefficient_traits::const_reference n, const Linear_Expression& e) {
+16535:   return e > n;
+16535: }
+16535: 
+16535: 
+16535: inline Constraint
+16535: operator<(const Linear_Expression& e, Coefficient_traits::const_reference n) {
+16535:   return n > e;
+16535: }
+16535: 
+16535: inline const Constraint&
+16535: Constraint::zero_dim_false() {
+16535:   ((void) 0);
+16535:   return *zero_dim_false_p;
+16535: }
+16535: 
+16535: inline const Constraint&
+16535: Constraint::zero_dim_positivity() {
+16535:   ((void) 0);
+16535:   return *zero_dim_positivity_p;
+16535: }
+16535: 
+16535: inline const Constraint&
+16535: Constraint::epsilon_geq_zero() {
+16535:   ((void) 0);
+16535:   return *epsilon_geq_zero_p;
+16535: }
+16535: 
+16535: inline const Constraint&
+16535: Constraint::epsilon_leq_one() {
+16535:   ((void) 0);
+16535:   return *epsilon_leq_one_p;
+16535: }
+16535: 
+16535: inline void
+16535: Constraint::m_swap(Constraint& y) {
+16535:   using std::swap;
+16535:   swap(expr, y.expr);
+16535:   swap(kind_, y.kind_);
+16535:   swap(topology_, y.topology_);
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: Constraint::epsilon_coefficient() const {
+16535:   ((void) 0);
+16535:   return expr.coefficient(Variable(expr.space_dimension() - 1));
+16535: }
+16535: 
+16535: inline void
+16535: Constraint::set_epsilon_coefficient(Coefficient_traits::const_reference n) {
+16535:   ((void) 0);
+16535:   expr.set_coefficient(Variable(expr.space_dimension() - 1), n);
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: swap(Constraint& x, Constraint& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 835 "../../src/Constraint_defs.hh" 2
+16535: # 31 "../../src/Linear_Expression_Impl_templates.hh" 2
+16535: # 1 "../../src/Generator_defs.hh" 1
+16535: # 31 "../../src/Generator_defs.hh"
+16535: # 1 "../../src/Generator_System_types.hh" 1
+16535: # 16 "../../src/Generator_System_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Generator_System;
+16535: class Generator_System_const_iterator;
+16535: 
+16535: }
+16535: # 32 "../../src/Generator_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: # 1 "../../src/Grid_Generator_System_types.hh" 1
+16535: # 16 "../../src/Grid_Generator_System_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Grid_Generator_System;
+16535: 
+16535: }
+16535: # 36 "../../src/Generator_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "../../src/distances_defs.hh" 1
+16535: # 27 "../../src/distances_defs.hh"
+16535: # 1 "../../src/distances_types.hh" 1
+16535: # 16 "../../src/distances_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Temp>
+16535: struct Rectilinear_Distance_Specialization;
+16535: 
+16535: template <typename Temp>
+16535: struct Euclidean_Distance_Specialization;
+16535: 
+16535: template <typename Temp>
+16535: struct L_Infinity_Distance_Specialization;
+16535: 
+16535: }
+16535: # 28 "../../src/distances_defs.hh" 2
+16535: 
+16535: 
+16535: template <typename Temp>
+16535: struct Parma_Polyhedra_Library::Rectilinear_Distance_Specialization {
+16535:   static void combine(Temp& running, const Temp& current, Rounding_Dir dir);
+16535: 
+16535:   static void finalize(Temp&, Rounding_Dir);
+16535: };
+16535: 
+16535: template <typename Temp>
+16535: struct Parma_Polyhedra_Library::Euclidean_Distance_Specialization {
+16535:   static void combine(Temp& running, Temp& current, Rounding_Dir dir);
+16535: 
+16535:   static void finalize(Temp& running, Rounding_Dir dir);
+16535: };
+16535: 
+16535: 
+16535: template <typename Temp>
+16535: struct Parma_Polyhedra_Library::L_Infinity_Distance_Specialization {
+16535:   static void combine(Temp& running, const Temp& current, Rounding_Dir);
+16535: 
+16535:   static void finalize(Temp&, Rounding_Dir);
+16535: };
+16535: 
+16535: # 1 "../../src/distances_inlines.hh" 1
+16535: # 29 "../../src/distances_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: template <typename To, typename From>
+16535: struct maybe_assign_struct {
+16535:   static inline Result
+16535:   function(const To*& top, To& tmp, const From& from, Rounding_Dir dir) {
+16535: 
+16535: 
+16535:     top = &tmp;
+16535:     return assign_r(tmp, from, dir);
+16535:   }
+16535: };
+16535: 
+16535: template <typename Type>
+16535: struct maybe_assign_struct<Type, Type> {
+16535:   static inline Result
+16535:   function(const Type*& top, Type&, const Type& from, Rounding_Dir) {
+16535: 
+16535:     top = &from;
+16535:     return V_EQ;
+16535:   }
+16535: };
+16535: # 62 "../../src/distances_inlines.hh"
+16535: template <typename To, typename From>
+16535: inline Result
+16535: maybe_assign(const To*& top, To& tmp, const From& from, Rounding_Dir dir) {
+16535:   return maybe_assign_struct<To, From>::function(top, tmp, from, dir);
+16535: }
+16535: 
+16535: template <typename Temp>
+16535: inline void
+16535: Rectilinear_Distance_Specialization<Temp>::combine(Temp& running,
+16535:                                                    const Temp& current,
+16535:                                                    Rounding_Dir dir) {
+16535:   add_assign_r(running, running, current, dir);
+16535: }
+16535: 
+16535: template <typename Temp>
+16535: inline void
+16535: Rectilinear_Distance_Specialization<Temp>::finalize(Temp&, Rounding_Dir) {
+16535: }
+16535: 
+16535: template <typename Temp>
+16535: inline void
+16535: Euclidean_Distance_Specialization<Temp>::combine(Temp& running,
+16535:                                                  Temp& current,
+16535:                                                  Rounding_Dir dir) {
+16535:   mul_assign_r(current, current, current, dir);
+16535:   add_assign_r(running, running, current, dir);
+16535: }
+16535: 
+16535: template <typename Temp>
+16535: inline void
+16535: Euclidean_Distance_Specialization<Temp>::finalize(Temp& running,
+16535:                                                   Rounding_Dir dir) {
+16535:   sqrt_assign_r(running, running, dir);
+16535: }
+16535: 
+16535: template <typename Temp>
+16535: inline void
+16535: L_Infinity_Distance_Specialization<Temp>::combine(Temp& running,
+16535:                                                   const Temp& current,
+16535:                                                   Rounding_Dir) {
+16535:   if (current > running) {
+16535:     running = current;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Temp>
+16535: inline void
+16535: L_Infinity_Distance_Specialization<Temp>::finalize(Temp&, Rounding_Dir) {
+16535: }
+16535: 
+16535: }
+16535: # 53 "../../src/distances_defs.hh" 2
+16535: # 43 "../../src/Generator_defs.hh" 2
+16535: 
+16535: 
+16535: # 1 "../../src/Expression_Hide_Inhomo_defs.hh" 1
+16535: # 41 "../../src/Expression_Hide_Inhomo_defs.hh"
+16535: template <typename T>
+16535: class Parma_Polyhedra_Library::Expression_Hide_Inhomo
+16535:   : public Expression_Adapter<T> {
+16535:   typedef Expression_Adapter<T> base_type;
+16535: public:
+16535: 
+16535:   typedef Expression_Hide_Inhomo<T> const_reference;
+16535: 
+16535:   typedef typename base_type::inner_type inner_type;
+16535: 
+16535:   typedef typename base_type::raw_type raw_type;
+16535: 
+16535: 
+16535:   explicit Expression_Hide_Inhomo(const raw_type& expr);
+16535: 
+16535: public:
+16535: 
+16535:   typedef typename base_type::const_iterator const_iterator;
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference inhomogeneous_term() const;
+16535: 
+16535: 
+16535:   bool is_zero() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename Expression>
+16535:   bool is_equal_to(const Expression& y) const;
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference get(dimension_type i) const;
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference get(Variable v) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool all_zeroes(const Variables_Set& vars) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool all_zeroes(dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type num_zeroes(dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Coefficient gcd(dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535: 
+16535:   dimension_type last_nonzero() const;
+16535: 
+16535: 
+16535: 
+16535:   dimension_type last_nonzero(dimension_type first, dimension_type last) const;
+16535: 
+16535: 
+16535: 
+16535:   dimension_type first_nonzero(dimension_type first, dimension_type last) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool all_zeroes_except(const Variables_Set& vars,
+16535:                          dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535:   void has_a_free_dimension_helper(std::set<dimension_type>& x) const;
+16535: 
+16535: 
+16535: 
+16535:   template <typename Expression>
+16535:   bool is_equal_to(const Expression& y,
+16535:                    dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535: 
+16535:   template <typename Expression>
+16535:   bool is_equal_to(const Expression& y,
+16535:                    Coefficient_traits::const_reference c1,
+16535:                    Coefficient_traits::const_reference c2,
+16535:                    dimension_type start, dimension_type end) const;
+16535: 
+16535: 
+16535:   void get_row(Dense_Row& r) const;
+16535: 
+16535: 
+16535:   void get_row(Sparse_Row& r) const;
+16535: };
+16535: 
+16535: # 1 "../../src/Expression_Hide_Inhomo_inlines.hh" 1
+16535: # 29 "../../src/Expression_Hide_Inhomo_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: Expression_Hide_Inhomo<T>::Expression_Hide_Inhomo(const raw_type& expr)
+16535:   : base_type(expr) {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline Coefficient_traits::const_reference
+16535: Expression_Hide_Inhomo<T>::inhomogeneous_term() const {
+16535: 
+16535:   return Coefficient_zero();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Expression_Hide_Inhomo<T>::is_zero() const {
+16535: 
+16535:   return this->inner().all_homogeneous_terms_are_zero();
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Expression>
+16535: inline bool
+16535: Expression_Hide_Inhomo<T>
+16535: ::is_equal_to(const Expression& y) const {
+16535:   const dimension_type x_dim = this->space_dimension();
+16535:   const dimension_type y_dim = y.space_dimension();
+16535:   if (x_dim != y_dim) {
+16535:     return false;
+16535:   }
+16535:   if (y.inhomogeneous_term() != 0) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   return this->inner().is_equal_to(y, 1, x_dim + 1);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline Coefficient_traits::const_reference
+16535: Expression_Hide_Inhomo<T>::get(dimension_type i) const {
+16535:   if (i == 0) {
+16535:     return Coefficient_zero();
+16535:   }
+16535:   else {
+16535:     return this->inner().get(i);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline Coefficient_traits::const_reference
+16535: Expression_Hide_Inhomo<T>::get(Variable v) const {
+16535:   return this->inner().get(v);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Expression_Hide_Inhomo<T>
+16535: ::all_zeroes(const Variables_Set& vars) const {
+16535:   return this->inner().all_zeroes(vars);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Expression_Hide_Inhomo<T>::all_zeroes(dimension_type start,
+16535:                                       dimension_type end) const {
+16535:   if (start == end) {
+16535:     return true;
+16535:   }
+16535:   if (start == 0) {
+16535:     ++start;
+16535:   }
+16535:   return this->inner().all_zeroes(start, end);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: Expression_Hide_Inhomo<T>::num_zeroes(dimension_type start,
+16535:                                       dimension_type end) const {
+16535:   if (start == end) {
+16535:     return 0;
+16535:   }
+16535:   dimension_type nz = 0;
+16535:   if (start == 0) {
+16535:     ++start;
+16535:     ++nz;
+16535:   }
+16535:   nz += this->inner().num_zeroes(start, end);
+16535:   return nz;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline Coefficient
+16535: Expression_Hide_Inhomo<T>::gcd(dimension_type start,
+16535:                                dimension_type end) const {
+16535:   if (start == end) {
+16535:     return Coefficient_zero();
+16535:   }
+16535:   if (start == 0) {
+16535:     ++start;
+16535:   }
+16535:   return this->inner().gcd(start, end);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: Expression_Hide_Inhomo<T>::last_nonzero() const {
+16535:   return this->inner().last_nonzero();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: Expression_Hide_Inhomo<T>::last_nonzero(dimension_type first,
+16535:                                         dimension_type last) const {
+16535:   if (first == last) {
+16535:     return last;
+16535:   }
+16535:   if (first == 0) {
+16535:     ++first;
+16535:   }
+16535:   return this->inner().last_nonzero(first, last);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: Expression_Hide_Inhomo<T>::first_nonzero(dimension_type first,
+16535:                                          dimension_type last) const {
+16535:   if (first == last) {
+16535:     return last;
+16535:   }
+16535:   if (first == 0) {
+16535:     ++first;
+16535:   }
+16535:   return this->inner().first_nonzero(first, last);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Expression_Hide_Inhomo<T>
+16535: ::all_zeroes_except(const Variables_Set& vars,
+16535:                     dimension_type start, dimension_type end) const {
+16535:   if (start == end) {
+16535:     return true;
+16535:   }
+16535:   if (start == 0) {
+16535:     ++start;
+16535:   }
+16535:   return this->inner().all_zeroes_except(vars, start, end);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Expression_Hide_Inhomo<T>
+16535: ::has_a_free_dimension_helper(std::set<dimension_type>& y) const {
+16535:   bool had_0 = (y.count(0) == 1);
+16535:   this->inner().has_a_free_dimension_helper(y);
+16535:   if (had_0) {
+16535:     y.insert(0);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Expression>
+16535: inline bool
+16535: Expression_Hide_Inhomo<T>
+16535: ::is_equal_to(const Expression& y,
+16535:               dimension_type start, dimension_type end) const {
+16535:   if (start == end) {
+16535:     return true;
+16535:   }
+16535:   if (start == 0) {
+16535:     ++start;
+16535:   }
+16535:   return this->inner().is_equal_to(y, start, end);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Expression>
+16535: inline bool
+16535: Expression_Hide_Inhomo<T>
+16535: ::is_equal_to(const Expression& y,
+16535:               Coefficient_traits::const_reference c1,
+16535:               Coefficient_traits::const_reference c2,
+16535:               dimension_type start, dimension_type end) const {
+16535:   if (start == end) {
+16535:     return true;
+16535:   }
+16535:   if (start == 0) {
+16535:     ++start;
+16535:   }
+16535:   return this->inner().is_equal_to(y, c1, c2, start, end);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Expression_Hide_Inhomo<T>::get_row(Dense_Row& r) const {
+16535:   this->inner().get_row(r);
+16535:   r.reset(0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Expression_Hide_Inhomo<T>::get_row(Sparse_Row& r) const {
+16535:   this->inner().get_row(r);
+16535:   r.reset(0);
+16535: }
+16535: 
+16535: }
+16535: # 146 "../../src/Expression_Hide_Inhomo_defs.hh" 2
+16535: # 46 "../../src/Generator_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: # 90 "../../src/Generator_defs.hh"
+16535: int compare(const Generator& x, const Generator& y);
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: std::ostream& operator<<(std::ostream& s, const Generator& g);
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: void swap(Generator& x, Generator& y);
+16535: 
+16535: }
+16535: # 285 "../../src/Generator_defs.hh"
+16535: class Parma_Polyhedra_Library::Generator {
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Representation default_representation = SPARSE;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static Generator line(const Linear_Expression& e,
+16535:                         Representation r = default_representation);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static Generator ray(const Linear_Expression& e,
+16535:                        Representation r = default_representation);
+16535: # 322 "../../src/Generator_defs.hh"
+16535:   static Generator point(const Linear_Expression& e
+16535:                          = Linear_Expression::zero(),
+16535:                          Coefficient_traits::const_reference d
+16535:                          = Coefficient_one(),
+16535:                          Representation r = default_representation);
+16535: 
+16535: 
+16535:   static Generator point(Representation r);
+16535: 
+16535: 
+16535:   static Generator point(const Linear_Expression& e,
+16535:                          Representation r);
+16535: 
+16535: 
+16535:   explicit Generator(Representation r = default_representation);
+16535: # 346 "../../src/Generator_defs.hh"
+16535:   static Generator
+16535:   closure_point(const Linear_Expression& e = Linear_Expression::zero(),
+16535:                 Coefficient_traits::const_reference d = Coefficient_one(),
+16535:                 Representation r = default_representation);
+16535: 
+16535: 
+16535:   static Generator
+16535:   closure_point(Representation r);
+16535: 
+16535: 
+16535:   static Generator
+16535:   closure_point(const Linear_Expression& e, Representation r);
+16535: 
+16535: 
+16535: 
+16535:   Generator(const Generator& g);
+16535: 
+16535: 
+16535:   Generator(const Generator& g, Representation r);
+16535: 
+16535: 
+16535: 
+16535:   Generator(const Generator& g, dimension_type space_dim);
+16535: 
+16535: 
+16535:   Generator(const Generator& g, dimension_type space_dim, Representation r);
+16535: 
+16535: 
+16535:   ~Generator();
+16535: 
+16535: 
+16535:   Generator& operator=(const Generator& g);
+16535: 
+16535: 
+16535:   Representation representation() const;
+16535: 
+16535: 
+16535:   void set_representation(Representation r);
+16535: 
+16535: 
+16535:   static dimension_type max_space_dimension();
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535: 
+16535:   void set_space_dimension(dimension_type space_dim);
+16535: 
+16535: 
+16535:   void swap_space_dimensions(Variable v1, Variable v2);
+16535: # 408 "../../src/Generator_defs.hh"
+16535:   bool remove_space_dimensions(const Variables_Set& vars);
+16535: # 422 "../../src/Generator_defs.hh"
+16535:   void permute_space_dimensions(const std::vector<Variable>& cycle);
+16535: 
+16535: 
+16535: 
+16535:   void shift_space_dimensions(Variable v, dimension_type n);
+16535: 
+16535: 
+16535:   enum Type {
+16535: 
+16535:     LINE,
+16535: 
+16535:     RAY,
+16535: 
+16535:     POINT,
+16535: 
+16535:     CLOSURE_POINT
+16535:   };
+16535: 
+16535: 
+16535:   Type type() const;
+16535: 
+16535: 
+16535:   bool is_line() const;
+16535: 
+16535: 
+16535:   bool is_ray() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_line_or_ray() const;
+16535: 
+16535: 
+16535:   bool is_point() const;
+16535: 
+16535: 
+16535:   bool is_closure_point() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference coefficient(Variable v) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference divisor() const;
+16535: 
+16535: 
+16535:   static void initialize();
+16535: 
+16535: 
+16535:   static void finalize();
+16535: 
+16535: 
+16535:   static const Generator& zero_dim_point();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Generator& zero_dim_closure_point();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_equivalent_to(const Generator& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_equal_to(const Generator& y) const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   void m_swap(Generator& y);
+16535: 
+16535: 
+16535:   typedef Expression_Hide_Last<Expression_Hide_Inhomo<Linear_Expression> >
+16535:   expr_type;
+16535: 
+16535:   expr_type expression() const;
+16535: 
+16535: private:
+16535: 
+16535:   enum Kind {
+16535:     LINE_OR_EQUALITY = 0,
+16535:     RAY_OR_POINT_OR_INEQUALITY = 1
+16535:   };
+16535: 
+16535: 
+16535:   Linear_Expression expr;
+16535: 
+16535: 
+16535:   Kind kind_;
+16535: 
+16535: 
+16535:   Topology topology_;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Generator* zero_dim_point_p;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Generator* zero_dim_closure_point_p;
+16535: # 570 "../../src/Generator_defs.hh"
+16535:   Generator(Linear_Expression& e, Type type, Topology topology);
+16535: 
+16535:   Generator(Linear_Expression& e, Kind kind, Topology topology);
+16535: 
+16535:   Generator(dimension_type space_dim, Kind kind, Topology topology,
+16535:             Representation r = default_representation);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_line_or_equality() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_ray_or_point_or_inequality() const;
+16535: 
+16535: 
+16535:   void set_is_line_or_equality();
+16535: 
+16535: 
+16535:   void set_is_ray_or_point_or_inequality();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Topology topology() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_not_necessarily_closed() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_necessarily_closed() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void set_topology(Topology x);
+16535: 
+16535: 
+16535:   void set_necessarily_closed();
+16535: 
+16535: 
+16535:   void set_not_necessarily_closed();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void mark_as_necessarily_closed();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void mark_as_not_necessarily_closed();
+16535: # 652 "../../src/Generator_defs.hh"
+16535:   void linear_combine(const Generator& y, dimension_type i);
+16535: # 661 "../../src/Generator_defs.hh"
+16535:   void set_space_dimension_no_ok(dimension_type space_dim);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void
+16535:   throw_dimension_incompatible(const char* method,
+16535:                                const char* v_name,
+16535:                                Variable v) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void
+16535:   throw_invalid_argument(const char* method, const char* reason) const;
+16535: 
+16535: 
+16535:   bool is_ray_or_point() const;
+16535: 
+16535: 
+16535:   void set_is_line();
+16535: 
+16535: 
+16535:   void set_is_ray_or_point();
+16535: # 695 "../../src/Generator_defs.hh"
+16535:   bool is_matching_closure_point(const Generator& p) const;
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference epsilon_coefficient() const;
+16535: 
+16535: 
+16535:   void set_epsilon_coefficient(Coefficient_traits::const_reference n);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void sign_normalize();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void strong_normalize();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool check_strong_normalized() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void fancy_print(std::ostream& s) const;
+16535: 
+16535:   friend class Expression_Adapter<Generator>;
+16535:   friend class Linear_System<Generator>;
+16535:   friend class Parma_Polyhedra_Library::Scalar_Products;
+16535:   friend class Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign;
+16535:   friend class Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Assign;
+16535:   friend class Parma_Polyhedra_Library::Generator_System;
+16535:   friend class Parma_Polyhedra_Library::Generator_System_const_iterator;
+16535: 
+16535:   friend class Parma_Polyhedra_Library::Polyhedron;
+16535: 
+16535:   friend class Parma_Polyhedra_Library::Grid_Generator_System;
+16535:   friend class Parma_Polyhedra_Library::MIP_Problem;
+16535:   friend class Parma_Polyhedra_Library::Grid;
+16535: 
+16535:   friend std::ostream&
+16535:   Parma_Polyhedra_Library::IO_Operators::operator<<(std::ostream& s,
+16535:                                                     const Generator& g);
+16535: 
+16535:   friend int
+16535:   compare(const Generator& x, const Generator& y);
+16535: };
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: Generator line(const Linear_Expression& e,
+16535:                Representation r = Generator::default_representation);
+16535: 
+16535: 
+16535: 
+16535: Generator ray(const Linear_Expression& e,
+16535:               Representation r = Generator::default_representation);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: Generator
+16535: point(const Linear_Expression& e = Linear_Expression::zero(),
+16535:       Coefficient_traits::const_reference d = Coefficient_one(),
+16535:       Representation r = Generator::default_representation);
+16535: 
+16535: 
+16535: 
+16535: Generator
+16535: point(Representation r);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: Generator
+16535: point(const Linear_Expression& e, Representation r);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: Generator
+16535: closure_point(const Linear_Expression& e = Linear_Expression::zero(),
+16535:               Coefficient_traits::const_reference d = Coefficient_one(),
+16535:               Representation r = Generator::default_representation);
+16535: 
+16535: 
+16535: 
+16535: Generator
+16535: closure_point(Representation r);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: Generator
+16535: closure_point(const Linear_Expression& e, Representation r);
+16535: 
+16535: 
+16535: 
+16535: bool operator==(const Generator& x, const Generator& y);
+16535: 
+16535: 
+16535: 
+16535: bool operator!=(const Generator& x, const Generator& y);
+16535: # 838 "../../src/Generator_defs.hh"
+16535: template <typename To>
+16535: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                  const Generator& x,
+16535:                                  const Generator& y,
+16535:                                  Rounding_Dir dir);
+16535: # 859 "../../src/Generator_defs.hh"
+16535: template <typename Temp, typename To>
+16535: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                  const Generator& x,
+16535:                                  const Generator& y,
+16535:                                  Rounding_Dir dir);
+16535: # 880 "../../src/Generator_defs.hh"
+16535: template <typename Temp, typename To>
+16535: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                  const Generator& x,
+16535:                                  const Generator& y,
+16535:                                  Rounding_Dir dir,
+16535:                                  Temp& tmp0,
+16535:                                  Temp& tmp1,
+16535:                                  Temp& tmp2);
+16535: # 904 "../../src/Generator_defs.hh"
+16535: template <typename To>
+16535: bool euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                const Generator& x,
+16535:                                const Generator& y,
+16535:                                Rounding_Dir dir);
+16535: # 925 "../../src/Generator_defs.hh"
+16535: template <typename Temp, typename To>
+16535: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                  const Generator& x,
+16535:                                  const Generator& y,
+16535:                                  Rounding_Dir dir);
+16535: # 946 "../../src/Generator_defs.hh"
+16535: template <typename Temp, typename To>
+16535: bool euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                const Generator& x,
+16535:                                const Generator& y,
+16535:                                Rounding_Dir dir,
+16535:                                Temp& tmp0,
+16535:                                Temp& tmp1,
+16535:                                Temp& tmp2);
+16535: # 970 "../../src/Generator_defs.hh"
+16535: template <typename To>
+16535: bool l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                 const Generator& x,
+16535:                                 const Generator& y,
+16535:                                 Rounding_Dir dir);
+16535: # 991 "../../src/Generator_defs.hh"
+16535: template <typename Temp, typename To>
+16535: bool l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                 const Generator& x,
+16535:                                 const Generator& y,
+16535:                                 Rounding_Dir dir);
+16535: # 1012 "../../src/Generator_defs.hh"
+16535: template <typename Temp, typename To>
+16535: bool l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                 const Generator& x,
+16535:                                 const Generator& y,
+16535:                                 Rounding_Dir dir,
+16535:                                 Temp& tmp0,
+16535:                                 Temp& tmp1,
+16535:                                 Temp& tmp2);
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: std::ostream& operator<<(std::ostream& s, const Generator::Type& t);
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Generator_inlines.hh" 1
+16535: # 27 "../../src/Generator_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline bool
+16535: Generator::is_necessarily_closed() const {
+16535:   return (topology() == NECESSARILY_CLOSED);
+16535: }
+16535: 
+16535: inline bool
+16535: Generator::is_not_necessarily_closed() const {
+16535:   return (topology() == NOT_NECESSARILY_CLOSED);
+16535: }
+16535: 
+16535: inline Generator::expr_type
+16535: Generator::expression() const {
+16535:   return expr_type(expr, is_not_necessarily_closed());
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Generator::space_dimension() const {
+16535:   return expression().space_dimension();
+16535: }
+16535: 
+16535: inline bool
+16535: Generator::is_line_or_equality() const {
+16535:   return (kind_ == LINE_OR_EQUALITY);
+16535: }
+16535: 
+16535: inline bool
+16535: Generator::is_ray_or_point_or_inequality() const {
+16535:   return (kind_ == RAY_OR_POINT_OR_INEQUALITY);
+16535: }
+16535: 
+16535: inline Topology
+16535: Generator::topology() const {
+16535:   return topology_;
+16535: }
+16535: 
+16535: inline void
+16535: Generator::set_is_line_or_equality() {
+16535:   kind_ = LINE_OR_EQUALITY;
+16535: }
+16535: 
+16535: inline void
+16535: Generator::set_is_ray_or_point_or_inequality() {
+16535:   kind_ = RAY_OR_POINT_OR_INEQUALITY;
+16535: }
+16535: 
+16535: inline void
+16535: Generator::set_topology(Topology x) {
+16535:   if (topology() == x) {
+16535:     return;
+16535:   }
+16535:   if (topology() == NECESSARILY_CLOSED) {
+16535: 
+16535:     expr.set_space_dimension(expr.space_dimension() + 1);
+16535:   }
+16535:   else {
+16535:     ((void) 0);
+16535:     expr.set_space_dimension(expr.space_dimension() - 1);
+16535:   }
+16535:   topology_ = x;
+16535: }
+16535: 
+16535: inline void
+16535: Generator::mark_as_necessarily_closed() {
+16535:   ((void) 0);
+16535:   topology_ = NECESSARILY_CLOSED;
+16535: }
+16535: 
+16535: inline void
+16535: Generator::mark_as_not_necessarily_closed() {
+16535:   ((void) 0);
+16535:   topology_ = NOT_NECESSARILY_CLOSED;
+16535: }
+16535: 
+16535: inline void
+16535: Generator::set_necessarily_closed() {
+16535:   set_topology(NECESSARILY_CLOSED);
+16535: }
+16535: 
+16535: inline void
+16535: Generator::set_not_necessarily_closed() {
+16535:   set_topology(NOT_NECESSARILY_CLOSED);
+16535: }
+16535: 
+16535: inline
+16535: Generator::Generator(Representation r)
+16535:   : expr(r),
+16535:     kind_(RAY_OR_POINT_OR_INEQUALITY),
+16535:     topology_(NECESSARILY_CLOSED) {
+16535:   expr.set_inhomogeneous_term(Coefficient_one());
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Generator::Generator(dimension_type space_dim, Kind kind, Topology topology,
+16535:                      Representation r)
+16535:   : expr(r),
+16535:     kind_(kind),
+16535:     topology_(topology) {
+16535:   if (is_necessarily_closed()) {
+16535:     expr.set_space_dimension(space_dim);
+16535:   }
+16535:   else {
+16535:     expr.set_space_dimension(space_dim + 1);
+16535:   }
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Generator::Generator(Linear_Expression& e, Type type, Topology topology)
+16535:   : topology_(topology) {
+16535:   ((void) 0);
+16535:   swap(expr, e);
+16535:   if (topology == NOT_NECESSARILY_CLOSED) {
+16535:     expr.set_space_dimension(expr.space_dimension() + 1);
+16535:   }
+16535:   if (type == LINE) {
+16535:     kind_ = LINE_OR_EQUALITY;
+16535:   }
+16535:   else {
+16535:     kind_ = RAY_OR_POINT_OR_INEQUALITY;
+16535:   }
+16535:   strong_normalize();
+16535: }
+16535: 
+16535: inline
+16535: Generator::Generator(Linear_Expression& e, Kind kind, Topology topology)
+16535:   : kind_(kind),
+16535:     topology_(topology) {
+16535:   swap(expr, e);
+16535:   if (topology == NOT_NECESSARILY_CLOSED) {
+16535:     expr.set_space_dimension(expr.space_dimension() + 1);
+16535:   }
+16535:   strong_normalize();
+16535: }
+16535: 
+16535: inline
+16535: Generator::Generator(const Generator& g)
+16535:   : expr(g.expr),
+16535:     kind_(g.kind_),
+16535:     topology_(g.topology_) {
+16535: }
+16535: 
+16535: inline
+16535: Generator::Generator(const Generator& g, Representation r)
+16535:   : expr(g.expr, r),
+16535:     kind_(g.kind_),
+16535:     topology_(g.topology_) {
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Generator::Generator(const Generator& g, dimension_type space_dim)
+16535:   : expr(g.expr, g.is_necessarily_closed() ? space_dim : (space_dim + 1)),
+16535:     kind_(g.kind_),
+16535:     topology_(g.topology_) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Generator::Generator(const Generator& g, dimension_type space_dim,
+16535:                      Representation r)
+16535:   : expr(g.expr, g.is_necessarily_closed() ? space_dim : (space_dim + 1), r),
+16535:     kind_(g.kind_),
+16535:     topology_(g.topology_) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Generator::~Generator() {
+16535: }
+16535: 
+16535: inline Generator&
+16535: Generator::operator=(const Generator& g) {
+16535:   Generator tmp = g;
+16535:   swap(*this, tmp);
+16535: 
+16535:   return *this;
+16535: }
+16535: 
+16535: inline Representation
+16535: Generator::representation() const {
+16535:   return expr.representation();
+16535: }
+16535: 
+16535: inline void
+16535: Generator::set_representation(Representation r) {
+16535:   expr.set_representation(r);
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Generator::max_space_dimension() {
+16535:   return Linear_Expression::max_space_dimension();
+16535: }
+16535: 
+16535: inline void
+16535: Generator::set_space_dimension_no_ok(dimension_type space_dim) {
+16535:   const dimension_type old_expr_space_dim = expr.space_dimension();
+16535:   if (topology() == NECESSARILY_CLOSED) {
+16535:     expr.set_space_dimension(space_dim);
+16535:   }
+16535:   else {
+16535:     const dimension_type old_space_dim = space_dimension();
+16535:     if (space_dim > old_space_dim) {
+16535:       expr.set_space_dimension(space_dim + 1);
+16535:       expr.swap_space_dimensions(Variable(space_dim), Variable(old_space_dim));
+16535:     }
+16535:     else {
+16535:       expr.swap_space_dimensions(Variable(space_dim), Variable(old_space_dim));
+16535:       expr.set_space_dimension(space_dim + 1);
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535:   if (expr.space_dimension() < old_expr_space_dim) {
+16535:     strong_normalize();
+16535:   }
+16535: }
+16535: 
+16535: inline void
+16535: Generator::set_space_dimension(dimension_type space_dim) {
+16535:   set_space_dimension_no_ok(space_dim);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline void
+16535: Generator::shift_space_dimensions(Variable v, dimension_type n) {
+16535:   expr.shift_space_dimensions(v, n);
+16535: }
+16535: 
+16535: inline bool
+16535: Generator::is_line() const {
+16535:   return is_line_or_equality();
+16535: }
+16535: 
+16535: inline bool
+16535: Generator::is_ray_or_point() const {
+16535:   return is_ray_or_point_or_inequality();
+16535: }
+16535: 
+16535: inline bool
+16535: Generator::is_line_or_ray() const {
+16535:   return expr.inhomogeneous_term() == 0;
+16535: }
+16535: 
+16535: inline bool
+16535: Generator::is_ray() const {
+16535:   return is_ray_or_point() && is_line_or_ray();
+16535: }
+16535: 
+16535: inline Generator::Type
+16535: Generator::type() const {
+16535:   if (is_line()) {
+16535:     return LINE;
+16535:   }
+16535:   if (is_line_or_ray()) {
+16535:     return RAY;
+16535:   }
+16535:   if (is_necessarily_closed()) {
+16535:     return POINT;
+16535:   }
+16535:   else {
+16535: 
+16535:     if (epsilon_coefficient() == 0) {
+16535:       return CLOSURE_POINT;
+16535:     }
+16535:     else {
+16535:       return POINT;
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: inline bool
+16535: Generator::is_point() const {
+16535:   return type() == POINT;
+16535: }
+16535: 
+16535: inline bool
+16535: Generator::is_closure_point() const {
+16535:   return type() == CLOSURE_POINT;
+16535: }
+16535: 
+16535: inline void
+16535: Generator::set_is_line() {
+16535:   set_is_line_or_equality();
+16535: }
+16535: 
+16535: inline void
+16535: Generator::set_is_ray_or_point() {
+16535:   set_is_ray_or_point_or_inequality();
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: Generator::coefficient(const Variable v) const {
+16535:   if (v.space_dimension() > space_dimension()) {
+16535:     throw_dimension_incompatible("coefficient(v)", "v", v);
+16535:   }
+16535:   return expr.coefficient(v);
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: Generator::divisor() const {
+16535:   Coefficient_traits::const_reference d = expr.inhomogeneous_term();
+16535:   if (!is_ray_or_point() || d == 0) {
+16535:     throw_invalid_argument("divisor()",
+16535:                            "*this is neither a point nor a closure point");
+16535:   }
+16535:   return d;
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: Generator::epsilon_coefficient() const {
+16535:   ((void) 0);
+16535:   return expr.coefficient(Variable(expr.space_dimension() - 1));
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: Generator::set_epsilon_coefficient(Coefficient_traits::const_reference n) {
+16535:   ((void) 0);
+16535:   expr.set_coefficient(Variable(expr.space_dimension() - 1), n);
+16535: }
+16535: 
+16535: 
+16535: inline memory_size_type
+16535: Generator::external_memory_in_bytes() const {
+16535:   return expr.external_memory_in_bytes();
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Generator::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: inline void
+16535: Generator::strong_normalize() {
+16535:   expr.normalize();
+16535:   sign_normalize();
+16535: }
+16535: 
+16535: inline const Generator&
+16535: Generator::zero_dim_point() {
+16535:   ((void) 0);
+16535:   return *zero_dim_point_p;
+16535: }
+16535: 
+16535: inline const Generator&
+16535: Generator::zero_dim_closure_point() {
+16535:   ((void) 0);
+16535:   return *zero_dim_closure_point_p;
+16535: }
+16535: 
+16535: 
+16535: inline Generator
+16535: line(const Linear_Expression& e, Representation r) {
+16535:   return Generator::line(e, r);
+16535: }
+16535: 
+16535: 
+16535: inline Generator
+16535: ray(const Linear_Expression& e, Representation r) {
+16535:   return Generator::ray(e, r);
+16535: }
+16535: 
+16535: 
+16535: inline Generator
+16535: point(const Linear_Expression& e, Coefficient_traits::const_reference d,
+16535:       Representation r) {
+16535:   return Generator::point(e, d, r);
+16535: }
+16535: 
+16535: 
+16535: inline Generator
+16535: point(Representation r) {
+16535:   return Generator::point(r);
+16535: }
+16535: 
+16535: 
+16535: inline Generator
+16535: point(const Linear_Expression& e, Representation r) {
+16535:   return Generator::point(e, r);
+16535: }
+16535: 
+16535: 
+16535: inline Generator
+16535: closure_point(const Linear_Expression& e,
+16535:               Coefficient_traits::const_reference d,
+16535:               Representation r) {
+16535:   return Generator::closure_point(e, d, r);
+16535: }
+16535: 
+16535: 
+16535: inline Generator
+16535: closure_point(Representation r) {
+16535:   return Generator::closure_point(r);
+16535: }
+16535: 
+16535: 
+16535: inline Generator
+16535: closure_point(const Linear_Expression& e,
+16535:               Representation r) {
+16535:   return Generator::closure_point(e, r);
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: operator==(const Generator& x, const Generator& y) {
+16535:   return x.is_equivalent_to(y);
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: operator!=(const Generator& x, const Generator& y) {
+16535:   return !x.is_equivalent_to(y);
+16535: }
+16535: 
+16535: inline void
+16535: Generator::ascii_dump(std::ostream& s) const {
+16535: 
+16535:   expr.ascii_dump(s);
+16535: 
+16535:   s << " ";
+16535: 
+16535:   switch (type()) {
+16535:   case Generator::LINE:
+16535:     s << "L ";
+16535:     break;
+16535:   case Generator::RAY:
+16535:     s << "R ";
+16535:     break;
+16535:   case Generator::POINT:
+16535:     s << "P ";
+16535:     break;
+16535:   case Generator::CLOSURE_POINT:
+16535:     s << "C ";
+16535:     break;
+16535:   }
+16535:   if (is_necessarily_closed()) {
+16535:     s << "(C)";
+16535:   }
+16535:   else {
+16535:     s << "(NNC)";
+16535:   }
+16535:   s << "\n";
+16535: }
+16535: 
+16535: inline bool
+16535: Generator::ascii_load(std::istream& s) {
+16535:   std::string str;
+16535: 
+16535:   expr.ascii_load(s);
+16535: 
+16535:   if (!(s >> str)) {
+16535:     return false;
+16535:   }
+16535:   if (str == "L") {
+16535:     set_is_line();
+16535:   }
+16535:   else if (str == "R" || str == "P" || str == "C") {
+16535:     set_is_ray_or_point();
+16535:   }
+16535:   else {
+16535:     return false;
+16535:   }
+16535: 
+16535:   std::string str2;
+16535: 
+16535:   if (!(s >> str2)) {
+16535:     return false;
+16535:   }
+16535:   if (str2 == "(C)") {
+16535:     if (is_not_necessarily_closed()) {
+16535: 
+16535:       mark_as_necessarily_closed();
+16535:     }
+16535:   }
+16535:   else {
+16535:     if (str2 == "(NNC)") {
+16535:       if (is_necessarily_closed()) {
+16535: 
+16535:         mark_as_not_necessarily_closed();
+16535:       }
+16535:     }
+16535:     else {
+16535:       return false;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   switch (type()) {
+16535:   case Generator::LINE:
+16535:     if (str != "L") {
+16535:       return false;
+16535:     }
+16535:     break;
+16535:   case Generator::RAY:
+16535:     if (str != "R") {
+16535:       return false;
+16535:     }
+16535:     break;
+16535:   case Generator::POINT:
+16535:     if (str != "P") {
+16535:       return false;
+16535:     }
+16535:     break;
+16535:   case Generator::CLOSURE_POINT:
+16535:     if (str != "C") {
+16535:       return false;
+16535:     }
+16535:     break;
+16535:   }
+16535: 
+16535:   return true;
+16535: }
+16535: 
+16535: inline void
+16535: Generator::m_swap(Generator& y) {
+16535:   using std::swap;
+16535:   swap(expr, y.expr);
+16535:   swap(kind_, y.kind_);
+16535:   swap(topology_, y.topology_);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Specialization, typename Temp, typename To>
+16535: inline bool
+16535: l_m_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                     const Generator& x,
+16535:                     const Generator& y,
+16535:                     const Rounding_Dir dir,
+16535:                     Temp& tmp0,
+16535:                     Temp& tmp1,
+16535:                     Temp& tmp2) {
+16535: 
+16535: 
+16535:   if (x.is_line_or_ray() || y.is_line_or_ray()) {
+16535:     return false;
+16535:   }
+16535:   const dimension_type x_space_dim = x.space_dimension();
+16535: 
+16535:   if (x_space_dim != y.space_dimension()) {
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535:   if (x_space_dim == 0) {
+16535:     assign_r(r, 0, ROUND_NOT_NEEDED);
+16535:     return true;
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_x_coord; mpq_class& x_coord = holder_x_coord.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_y_coord; mpq_class& y_coord = holder_y_coord.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_x_div; mpq_class& x_div = holder_x_div.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_y_div; mpq_class& y_div = holder_y_div.item();
+16535:   assign_r(x_div, x.divisor(), ROUND_NOT_NEEDED);
+16535:   assign_r(y_div, y.divisor(), ROUND_NOT_NEEDED);
+16535: 
+16535:   assign_r(tmp0, 0, ROUND_NOT_NEEDED);
+16535: 
+16535:   for (dimension_type i = x_space_dim; i-- > 0; ) {
+16535:     assign_r(x_coord, x.coefficient(Variable(i)), ROUND_NOT_NEEDED);
+16535:     div_assign_r(x_coord, x_coord, x_div, ROUND_NOT_NEEDED);
+16535:     assign_r(y_coord, y.coefficient(Variable(i)), ROUND_NOT_NEEDED);
+16535:     div_assign_r(y_coord, y_coord, y_div, ROUND_NOT_NEEDED);
+16535:     const Temp* tmp1p;
+16535:     const Temp* tmp2p;
+16535: 
+16535:     if (x_coord > y_coord) {
+16535:       maybe_assign(tmp1p, tmp1, x_coord, dir);
+16535:       maybe_assign(tmp2p, tmp2, y_coord, inverse(dir));
+16535:     }
+16535:     else {
+16535:       maybe_assign(tmp1p, tmp1, y_coord, dir);
+16535:       maybe_assign(tmp2p, tmp2, x_coord, inverse(dir));
+16535:     }
+16535:     sub_assign_r(tmp1, *tmp1p, *tmp2p, dir);
+16535:     ((void) 0);
+16535:     Specialization::combine(tmp0, tmp1, dir);
+16535:   }
+16535:   Specialization::finalize(tmp0, dir);
+16535:   assign_r(r, tmp0, dir);
+16535:   return true;
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To>
+16535: inline bool
+16535: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                             const Generator& x,
+16535:                             const Generator& y,
+16535:                             const Rounding_Dir dir,
+16535:                             Temp& tmp0,
+16535:                             Temp& tmp1,
+16535:                             Temp& tmp2) {
+16535:   return l_m_distance_assign<Rectilinear_Distance_Specialization<Temp> >
+16535:     (r, x, y, dir, tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To>
+16535: inline bool
+16535: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                             const Generator& x,
+16535:                             const Generator& y,
+16535:                             const Rounding_Dir dir) {
+16535:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
+16535:   return rectilinear_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename To>
+16535: inline bool
+16535: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                             const Generator& x,
+16535:                             const Generator& y,
+16535:                             const Rounding_Dir dir) {
+16535:   return rectilinear_distance_assign<To, To>(r, x, y, dir);
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To>
+16535: inline bool
+16535: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                           const Generator& x,
+16535:                           const Generator& y,
+16535:                           const Rounding_Dir dir,
+16535:                           Temp& tmp0,
+16535:                           Temp& tmp1,
+16535:                           Temp& tmp2) {
+16535:   return l_m_distance_assign<Euclidean_Distance_Specialization<Temp> >
+16535:     (r, x, y, dir, tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To>
+16535: inline bool
+16535: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                           const Generator& x,
+16535:                           const Generator& y,
+16535:                           const Rounding_Dir dir) {
+16535:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
+16535:   return euclidean_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename To>
+16535: inline bool
+16535: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                           const Generator& x,
+16535:                           const Generator& y,
+16535:                           const Rounding_Dir dir) {
+16535:   return euclidean_distance_assign<To, To>(r, x, y, dir);
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To>
+16535: inline bool
+16535: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                            const Generator& x,
+16535:                            const Generator& y,
+16535:                            const Rounding_Dir dir,
+16535:                            Temp& tmp0,
+16535:                            Temp& tmp1,
+16535:                            Temp& tmp2) {
+16535:   return l_m_distance_assign<L_Infinity_Distance_Specialization<Temp> >
+16535:     (r, x, y, dir, tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To>
+16535: inline bool
+16535: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                            const Generator& x,
+16535:                            const Generator& y,
+16535:                            const Rounding_Dir dir) {
+16535:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
+16535:   return l_infinity_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename To>
+16535: inline bool
+16535: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                            const Generator& x,
+16535:                            const Generator& y,
+16535:                            const Rounding_Dir dir) {
+16535:   return l_infinity_distance_assign<To, To>(r, x, y, dir);
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: swap(Generator& x, Generator& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 1032 "../../src/Generator_defs.hh" 2
+16535: # 32 "../../src/Linear_Expression_Impl_templates.hh" 2
+16535: # 1 "../../src/Grid_Generator_defs.hh" 1
+16535: # 43 "../../src/Grid_Generator_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: # 84 "../../src/Grid_Generator_defs.hh"
+16535: int compare(const Grid_Generator& x, const Grid_Generator& y);
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: std::ostream& operator<<(std::ostream& s, const Grid_Generator& g);
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: void swap(Grid_Generator& x, Grid_Generator& y);
+16535: 
+16535: }
+16535: # 271 "../../src/Grid_Generator_defs.hh"
+16535: class Parma_Polyhedra_Library::Grid_Generator {
+16535: public:
+16535: 
+16535: 
+16535:   enum Kind {
+16535:     LINE_OR_EQUALITY = 0,
+16535:     RAY_OR_POINT_OR_INEQUALITY = 1
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Representation default_representation = SPARSE;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static Grid_Generator grid_line(const Linear_Expression& e,
+16535:                                   Representation r = default_representation);
+16535: # 306 "../../src/Grid_Generator_defs.hh"
+16535:   static Grid_Generator parameter(const Linear_Expression& e
+16535:                                   = Linear_Expression::zero(),
+16535:                                   Coefficient_traits::const_reference d
+16535:                                   = Coefficient_one(),
+16535:                                   Representation r = default_representation);
+16535: 
+16535: 
+16535: 
+16535:   static Grid_Generator parameter(Representation r);
+16535: 
+16535: 
+16535:   static Grid_Generator parameter(const Linear_Expression& e,
+16535:                                   Representation r);
+16535: # 328 "../../src/Grid_Generator_defs.hh"
+16535:   static Grid_Generator grid_point(const Linear_Expression& e
+16535:                                    = Linear_Expression::zero(),
+16535:                                    Coefficient_traits::const_reference d
+16535:                                    = Coefficient_one(),
+16535:                                    Representation r = default_representation);
+16535: 
+16535: 
+16535:   static Grid_Generator grid_point(Representation r);
+16535: 
+16535: 
+16535:   static Grid_Generator grid_point(const Linear_Expression& e,
+16535:                                    Representation r);
+16535: 
+16535: 
+16535:   explicit Grid_Generator(Representation r = default_representation);
+16535: 
+16535: 
+16535: 
+16535:   Grid_Generator(const Grid_Generator& g);
+16535: 
+16535: 
+16535:   Grid_Generator(const Grid_Generator& g, Representation r);
+16535: 
+16535: 
+16535: 
+16535:   Grid_Generator(const Grid_Generator& g, dimension_type space_dim);
+16535: 
+16535: 
+16535:   Grid_Generator(const Grid_Generator& g, dimension_type space_dim,
+16535:                  Representation r);
+16535: 
+16535: 
+16535:   ~Grid_Generator();
+16535: 
+16535: 
+16535:   Grid_Generator& operator=(const Grid_Generator& g);
+16535: 
+16535: 
+16535:   Representation representation() const;
+16535: 
+16535: 
+16535:   void set_representation(Representation r);
+16535: 
+16535: 
+16535:   static dimension_type max_space_dimension();
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535: 
+16535:   void set_space_dimension(dimension_type space_dim);
+16535: 
+16535: 
+16535:   void swap_space_dimensions(Variable v1, Variable v2);
+16535: # 393 "../../src/Grid_Generator_defs.hh"
+16535:   bool remove_space_dimensions(const Variables_Set& vars);
+16535: # 407 "../../src/Grid_Generator_defs.hh"
+16535:   void permute_space_dimensions(const std::vector<Variable>& cycle);
+16535: 
+16535: 
+16535: 
+16535:   void shift_space_dimensions(Variable v, dimension_type n);
+16535: 
+16535: 
+16535:   enum Type {
+16535: 
+16535:     LINE,
+16535: 
+16535:     PARAMETER,
+16535: 
+16535:     POINT
+16535:   };
+16535: 
+16535: 
+16535:   Type type() const;
+16535: 
+16535: 
+16535:   bool is_line() const;
+16535: 
+16535: 
+16535:   bool is_parameter() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_line_or_parameter() const;
+16535: 
+16535: 
+16535:   bool is_point() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_parameter_or_point() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference coefficient(Variable v) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference divisor() const;
+16535: 
+16535: 
+16535:   static void initialize();
+16535: 
+16535: 
+16535:   static void finalize();
+16535: 
+16535: 
+16535:   static const Grid_Generator& zero_dim_point();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_equivalent_to(const Grid_Generator& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_equal_to(const Grid_Generator& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool all_homogeneous_terms_are_zero() const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   void m_swap(Grid_Generator& y);
+16535: # 524 "../../src/Grid_Generator_defs.hh"
+16535:   void scale_to_divisor(Coefficient_traits::const_reference d);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void set_divisor(Coefficient_traits::const_reference d);
+16535: 
+16535: 
+16535:   typedef Expression_Hide_Last<Expression_Hide_Inhomo<Linear_Expression> >
+16535:   expr_type;
+16535: 
+16535:   expr_type expression() const;
+16535: 
+16535: private:
+16535:   Linear_Expression expr;
+16535: 
+16535:   Kind kind_;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Grid_Generator* zero_dim_point_p;
+16535: 
+16535: 
+16535: 
+16535:   Grid_Generator(dimension_type space_dim, Kind kind, Topology topology,
+16535:                  Representation r = default_representation);
+16535: # 565 "../../src/Grid_Generator_defs.hh"
+16535:   Grid_Generator(Linear_Expression& e, Type t);
+16535: # 574 "../../src/Grid_Generator_defs.hh"
+16535:   void set_space_dimension_no_ok(dimension_type space_dim);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_equal_at_dimension(dimension_type dim,
+16535:                              const Grid_Generator& gg) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void fancy_print(std::ostream& s) const;
+16535: 
+16535: 
+16535:   void set_is_parameter();
+16535: 
+16535: 
+16535:   void set_is_line();
+16535: 
+16535: 
+16535:   void set_is_parameter_or_point();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Topology topology() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_not_necessarily_closed() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_necessarily_closed() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_line_or_equality() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_ray_or_point_or_inequality() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void set_topology(Topology x);
+16535: 
+16535: 
+16535:   void set_necessarily_closed();
+16535: 
+16535: 
+16535:   void set_not_necessarily_closed();
+16535: 
+16535: 
+16535:   void set_is_line_or_equality();
+16535: 
+16535: 
+16535:   void set_is_ray_or_point_or_inequality();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void sign_normalize();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void strong_normalize();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool check_strong_normalized() const;
+16535: # 680 "../../src/Grid_Generator_defs.hh"
+16535:   void linear_combine(const Grid_Generator& y, dimension_type i);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void
+16535:   throw_dimension_incompatible(const char* method,
+16535:                                const char* name_var,
+16535:                                const Variable v) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void
+16535:   throw_invalid_argument(const char* method, const char* reason) const;
+16535: 
+16535:   friend std::ostream&
+16535:   IO_Operators::operator<<(std::ostream& s, const Grid_Generator& g);
+16535: 
+16535:   friend int
+16535:   compare(const Grid_Generator& x, const Grid_Generator& y);
+16535: 
+16535:   friend class Expression_Adapter<Grid_Generator>;
+16535:   friend class Grid_Generator_System;
+16535:   friend class Grid;
+16535:   friend class Linear_System<Grid_Generator>;
+16535:   friend class Scalar_Products;
+16535:   friend class Topology_Adjusted_Scalar_Product_Sign;
+16535: };
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: Grid_Generator
+16535: grid_line(const Linear_Expression& e,
+16535:           Representation r = Grid_Generator::default_representation);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: Grid_Generator
+16535: parameter(const Linear_Expression& e = Linear_Expression::zero(),
+16535:           Coefficient_traits::const_reference d = Coefficient_one(),
+16535:           Representation r = Grid_Generator::default_representation);
+16535: 
+16535: 
+16535: 
+16535: Grid_Generator
+16535: parameter(Representation r);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: Grid_Generator
+16535: parameter(const Linear_Expression& e, Representation r);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: Grid_Generator
+16535: grid_point(const Linear_Expression& e = Linear_Expression::zero(),
+16535:            Coefficient_traits::const_reference d = Coefficient_one(),
+16535:            Representation r = Grid_Generator::default_representation);
+16535: 
+16535: 
+16535: 
+16535: Grid_Generator
+16535: grid_point(Representation r);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: Grid_Generator
+16535: grid_point(const Linear_Expression& e, Representation r);
+16535: 
+16535: 
+16535: 
+16535: bool operator==(const Grid_Generator& x, const Grid_Generator& y);
+16535: 
+16535: 
+16535: 
+16535: bool operator!=(const Grid_Generator& x, const Grid_Generator& y);
+16535: 
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: std::ostream& operator<<(std::ostream& s, const Grid_Generator::Type& t);
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Grid_Generator_inlines.hh" 1
+16535: # 27 "../../src/Grid_Generator_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline bool
+16535: Grid_Generator::is_necessarily_closed() const {
+16535:   return true;
+16535: }
+16535: 
+16535: inline bool
+16535: Grid_Generator::is_not_necessarily_closed() const {
+16535:   return false;
+16535: }
+16535: 
+16535: inline bool
+16535: Grid_Generator::is_line_or_equality() const {
+16535:   return (kind_ == LINE_OR_EQUALITY);
+16535: }
+16535: 
+16535: inline bool
+16535: Grid_Generator::is_ray_or_point_or_inequality() const {
+16535:   return (kind_ == RAY_OR_POINT_OR_INEQUALITY);
+16535: }
+16535: 
+16535: inline Topology
+16535: Grid_Generator::topology() const {
+16535:   return NECESSARILY_CLOSED;
+16535: }
+16535: 
+16535: inline void
+16535: Grid_Generator::set_is_line_or_equality() {
+16535:   kind_ = LINE_OR_EQUALITY;
+16535: }
+16535: 
+16535: inline void
+16535: Grid_Generator::set_is_ray_or_point_or_inequality() {
+16535:   kind_ = RAY_OR_POINT_OR_INEQUALITY;
+16535: }
+16535: 
+16535: inline void
+16535: Grid_Generator::set_topology(Topology x) {
+16535:   (void)(x);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline void
+16535: Grid_Generator::set_necessarily_closed() {
+16535:   set_topology(NECESSARILY_CLOSED);
+16535: }
+16535: 
+16535: inline void
+16535: Grid_Generator::set_not_necessarily_closed() {
+16535:   set_topology(NOT_NECESSARILY_CLOSED);
+16535: }
+16535: 
+16535: inline
+16535: Grid_Generator::Grid_Generator(Linear_Expression& e, Type type) {
+16535:   swap(expr, e);
+16535:   if (type == LINE) {
+16535:     kind_ = LINE_OR_EQUALITY;
+16535:   }
+16535:   else {
+16535:     kind_ = RAY_OR_POINT_OR_INEQUALITY;
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Grid_Generator::Grid_Generator(Representation r)
+16535:   : expr(Coefficient_one(), r),
+16535:     kind_(RAY_OR_POINT_OR_INEQUALITY) {
+16535:   expr.set_space_dimension(1);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Grid_Generator::Grid_Generator(const Grid_Generator& g)
+16535:   : expr(g.expr),
+16535:     kind_(g.kind_) {
+16535: }
+16535: 
+16535: inline
+16535: Grid_Generator::Grid_Generator(const Grid_Generator& g, Representation r)
+16535:   : expr(g.expr, r),
+16535:     kind_(g.kind_) {
+16535: }
+16535: 
+16535: inline
+16535: Grid_Generator::Grid_Generator(dimension_type space_dim, Kind kind,
+16535:                                Topology topology, Representation r)
+16535:   : expr(r),
+16535:     kind_(kind) {
+16535:   (void)(topology);
+16535:   ((void) 0);
+16535:   expr.set_space_dimension(space_dim + 1);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Grid_Generator::Grid_Generator(const Grid_Generator& g,
+16535:                                dimension_type space_dim)
+16535:   : expr(g.expr, space_dim + 1),
+16535:     kind_(g.kind_) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Grid_Generator::Grid_Generator(const Grid_Generator& g,
+16535:                                dimension_type space_dim, Representation r)
+16535:   : expr(g.expr, space_dim + 1, r),
+16535:     kind_(g.kind_) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Grid_Generator::~Grid_Generator() {
+16535: }
+16535: 
+16535: inline Grid_Generator::expr_type
+16535: Grid_Generator::expression() const {
+16535:   return expr_type(expr, true);
+16535: }
+16535: 
+16535: inline Representation
+16535: Grid_Generator::representation() const {
+16535:   return expr.representation();
+16535: }
+16535: 
+16535: inline void
+16535: Grid_Generator::set_representation(Representation r) {
+16535:   expr.set_representation(r);
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Grid_Generator::max_space_dimension() {
+16535:   return Linear_Expression::max_space_dimension() - 1;
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Grid_Generator::space_dimension() const {
+16535:   return expression().space_dimension();
+16535: }
+16535: 
+16535: inline void
+16535: Grid_Generator::set_space_dimension(dimension_type space_dim) {
+16535:   const dimension_type old_space_dim = space_dimension();
+16535:   if (space_dim > old_space_dim) {
+16535:     expr.set_space_dimension(space_dim + 1);
+16535:     expr.swap_space_dimensions(Variable(space_dim), Variable(old_space_dim));
+16535:   }
+16535:   else {
+16535:     expr.swap_space_dimensions(Variable(space_dim), Variable(old_space_dim));
+16535:     expr.set_space_dimension(space_dim + 1);
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline void
+16535: Grid_Generator::set_space_dimension_no_ok(dimension_type space_dim) {
+16535:   set_space_dimension(space_dim);
+16535: }
+16535: 
+16535: inline void
+16535: Grid_Generator::shift_space_dimensions(Variable v, dimension_type n) {
+16535:   expr.shift_space_dimensions(v, n);
+16535: }
+16535: 
+16535: inline Grid_Generator::Type
+16535: Grid_Generator::type() const {
+16535:   if (is_line()) {
+16535:     return LINE;
+16535:   }
+16535:   return is_point() ? POINT : PARAMETER;
+16535: }
+16535: 
+16535: inline bool
+16535: Grid_Generator::is_line() const {
+16535:   return is_line_or_equality();
+16535: }
+16535: 
+16535: inline bool
+16535: Grid_Generator::is_parameter() const {
+16535:   return is_parameter_or_point() && is_line_or_parameter();
+16535: }
+16535: 
+16535: inline bool
+16535: Grid_Generator::is_line_or_parameter() const {
+16535:   return expr.inhomogeneous_term() == 0;
+16535: }
+16535: 
+16535: inline bool
+16535: Grid_Generator::is_point() const {
+16535:   return !is_line_or_parameter();
+16535: }
+16535: 
+16535: inline bool
+16535: Grid_Generator::is_parameter_or_point() const {
+16535:   return is_ray_or_point_or_inequality();
+16535: }
+16535: 
+16535: inline void
+16535: Grid_Generator::set_divisor(Coefficient_traits::const_reference d) {
+16535:   ((void) 0);
+16535:   if (is_line_or_parameter()) {
+16535:     expr.set_coefficient(Variable(space_dimension()), d);
+16535:   }
+16535:   else {
+16535:     expr.set_inhomogeneous_term(d);
+16535:   }
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: Grid_Generator::divisor() const {
+16535:   if (is_line()) {
+16535:     throw_invalid_argument("divisor()", "*this is a line");
+16535:   }
+16535:   if (is_line_or_parameter()) {
+16535:     return expr.coefficient(Variable(space_dimension()));
+16535:   }
+16535:   else {
+16535:     return expr.inhomogeneous_term();
+16535:   }
+16535: }
+16535: 
+16535: inline bool
+16535: Grid_Generator::is_equal_at_dimension(dimension_type dim,
+16535:                                       const Grid_Generator& y) const {
+16535:   const Grid_Generator& x = *this;
+16535:   return x.expr.get(dim) * y.divisor() == y.expr.get(dim) * x.divisor();
+16535: }
+16535: 
+16535: inline void
+16535: Grid_Generator::set_is_line() {
+16535:   set_is_line_or_equality();
+16535: }
+16535: 
+16535: inline void
+16535: Grid_Generator::set_is_parameter_or_point() {
+16535:   set_is_ray_or_point_or_inequality();
+16535: }
+16535: 
+16535: inline Grid_Generator&
+16535: Grid_Generator::operator=(const Grid_Generator& g) {
+16535:   Grid_Generator tmp = g;
+16535:   swap(*this, tmp);
+16535: 
+16535:   return *this;
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: Grid_Generator::coefficient(const Variable v) const {
+16535:   if (v.space_dimension() > space_dimension()) {
+16535:     throw_dimension_incompatible("coefficient(v)", "v", v);
+16535:   }
+16535:   return expr.coefficient(v);
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Grid_Generator::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Grid_Generator::external_memory_in_bytes() const {
+16535:   return expr.external_memory_in_bytes();
+16535: }
+16535: 
+16535: inline const Grid_Generator&
+16535: Grid_Generator::zero_dim_point() {
+16535:   ((void) 0);
+16535:   return *zero_dim_point_p;
+16535: }
+16535: 
+16535: inline void
+16535: Grid_Generator::strong_normalize() {
+16535:   ((void) 0);
+16535:   expr.normalize();
+16535:   sign_normalize();
+16535: }
+16535: 
+16535: inline void
+16535: Grid_Generator::m_swap(Grid_Generator& y) {
+16535:   using std::swap;
+16535:   swap(expr, y.expr);
+16535:   swap(kind_, y.kind_);
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: operator==(const Grid_Generator& x, const Grid_Generator& y) {
+16535:   return x.is_equivalent_to(y);
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: operator!=(const Grid_Generator& x, const Grid_Generator& y) {
+16535:   return !(x == y);
+16535: }
+16535: 
+16535: 
+16535: inline Grid_Generator
+16535: grid_line(const Linear_Expression& e, Representation r) {
+16535:   return Grid_Generator::grid_line(e, r);
+16535: }
+16535: 
+16535: 
+16535: inline Grid_Generator
+16535: parameter(const Linear_Expression& e,
+16535:           Coefficient_traits::const_reference d, Representation r) {
+16535:   return Grid_Generator::parameter(e, d, r);
+16535: }
+16535: 
+16535: 
+16535: inline Grid_Generator
+16535: parameter(Representation r) {
+16535:   return Grid_Generator::parameter(r);
+16535: }
+16535: 
+16535: 
+16535: inline Grid_Generator
+16535: parameter(const Linear_Expression& e, Representation r) {
+16535:   return Grid_Generator::parameter(e, r);
+16535: }
+16535: 
+16535: 
+16535: inline Grid_Generator
+16535: grid_point(const Linear_Expression& e,
+16535:            Coefficient_traits::const_reference d, Representation r) {
+16535:   return Grid_Generator::grid_point(e, d, r);
+16535: }
+16535: 
+16535: 
+16535: inline Grid_Generator
+16535: grid_point(Representation r) {
+16535:   return Grid_Generator::grid_point(r);
+16535: }
+16535: 
+16535: 
+16535: inline Grid_Generator
+16535: grid_point(const Linear_Expression& e, Representation r) {
+16535:   return Grid_Generator::grid_point(e, r);
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: swap(Grid_Generator& x, Grid_Generator& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 795 "../../src/Grid_Generator_defs.hh" 2
+16535: # 33 "../../src/Linear_Expression_Impl_templates.hh" 2
+16535: # 1 "../../src/Congruence_defs.hh" 1
+16535: # 42 "../../src/Congruence_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: bool
+16535: operator==(const Congruence& x, const Congruence& y);
+16535: 
+16535: 
+16535: 
+16535: bool
+16535: operator!=(const Congruence& x, const Congruence& y);
+16535: 
+16535: }
+16535: # 161 "../../src/Congruence_defs.hh"
+16535: class Parma_Polyhedra_Library::Congruence {
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Representation default_representation = SPARSE;
+16535: 
+16535: 
+16535:   explicit Congruence(Representation r = default_representation);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Congruence(const Congruence& cg);
+16535: 
+16535: 
+16535:   Congruence(const Congruence& cg, Representation r);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   explicit Congruence(const Constraint& c,
+16535:                       Representation r = default_representation);
+16535: 
+16535: 
+16535:   ~Congruence();
+16535: 
+16535: 
+16535:   Congruence& operator=(const Congruence& y);
+16535: 
+16535: 
+16535:   Representation representation() const;
+16535: 
+16535: 
+16535:   void set_representation(Representation r);
+16535: 
+16535: 
+16535:   static dimension_type max_space_dimension();
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535:   void permute_space_dimensions(const std::vector<Variable>& cycles);
+16535: 
+16535: 
+16535:   typedef Expression_Adapter_Transparent<Linear_Expression> expr_type;
+16535: 
+16535:   expr_type expression() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference coefficient(Variable v) const;
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference inhomogeneous_term() const;
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference modulus() const;
+16535: 
+16535: 
+16535: 
+16535:   void set_modulus(Coefficient_traits::const_reference m);
+16535: 
+16535: 
+16535:   void scale(Coefficient_traits::const_reference factor);
+16535: 
+16535: 
+16535:   void affine_preimage(Variable v,
+16535:                        const Linear_Expression& expr,
+16535:                        Coefficient_traits::const_reference denominator);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Congruence&
+16535:   operator/=(Coefficient_traits::const_reference k);
+16535: # 261 "../../src/Congruence_defs.hh"
+16535:   bool is_tautological() const;
+16535: # 273 "../../src/Congruence_defs.hh"
+16535:   bool is_inconsistent() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_proper_congruence() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_equality() const;
+16535: 
+16535: 
+16535:   static void initialize();
+16535: 
+16535: 
+16535:   static void finalize();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Congruence& zero_dim_integrality();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Congruence& zero_dim_false();
+16535: 
+16535: 
+16535:   static Congruence
+16535:   create(const Linear_Expression& e1, const Linear_Expression& e2,
+16535:          Representation r = default_representation);
+16535: 
+16535: 
+16535:   static Congruence
+16535:   create(const Linear_Expression& e, Coefficient_traits::const_reference n,
+16535:          Representation r = default_representation);
+16535: 
+16535: 
+16535:   static Congruence
+16535:   create(Coefficient_traits::const_reference n, const Linear_Expression& e,
+16535:          Representation r = default_representation);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   void m_swap(Congruence& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Congruence(const Congruence& cg, dimension_type new_space_dimension);
+16535: 
+16535: 
+16535:   Congruence(const Congruence& cg, dimension_type new_space_dimension,
+16535:              Representation r);
+16535: 
+16535: 
+16535: 
+16535:   Congruence(const Constraint& cg, dimension_type new_space_dimension,
+16535:              Representation r = default_representation);
+16535: # 374 "../../src/Congruence_defs.hh"
+16535:   Congruence(Linear_Expression& le,
+16535:              Coefficient_traits::const_reference m, Recycle_Input);
+16535: 
+16535: 
+16535:   void swap_space_dimensions(Variable v1, Variable v2);
+16535: 
+16535: 
+16535: 
+16535:   void set_space_dimension(dimension_type n);
+16535: 
+16535: 
+16535: 
+16535:   void shift_space_dimensions(Variable v, dimension_type n);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void sign_normalize();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void normalize();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void strong_normalize();
+16535: 
+16535: private:
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Congruence* zero_dim_false_p;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Congruence* zero_dim_integrality_p;
+16535: 
+16535:   Linear_Expression expr;
+16535: 
+16535:   Coefficient modulus_;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_equal_at_dimension(Variable v,
+16535:                              const Congruence& cg) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void
+16535:   throw_invalid_argument(const char* method, const char* message) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void
+16535:   throw_dimension_incompatible(const char* method,
+16535:                                const char* v_name,
+16535:                                Variable v) const;
+16535: 
+16535:   friend bool
+16535:   operator==(const Congruence& x, const Congruence& y);
+16535: 
+16535:   friend bool
+16535:   operator!=(const Congruence& x, const Congruence& y);
+16535: 
+16535:   friend class Scalar_Products;
+16535:   friend class Grid;
+16535: };
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: std::ostream&
+16535: operator<<(std::ostream& s, const Congruence& c);
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: Congruence
+16535: operator%=(const Linear_Expression& e1, const Linear_Expression& e2);
+16535: 
+16535: 
+16535: 
+16535: Congruence
+16535: operator%=(const Linear_Expression& e, Coefficient_traits::const_reference n);
+16535: # 490 "../../src/Congruence_defs.hh"
+16535: Congruence
+16535: operator/(const Congruence& cg, Coefficient_traits::const_reference k);
+16535: 
+16535: 
+16535: 
+16535: Congruence
+16535: operator/(const Constraint& c, Coefficient_traits::const_reference m);
+16535: 
+16535: 
+16535: void
+16535: swap(Congruence& x, Congruence& y);
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Congruence_inlines.hh" 1
+16535: # 29 "../../src/Congruence_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline
+16535: Congruence::Congruence(Representation r)
+16535:   : expr(r) {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Congruence::Congruence(const Congruence& cg)
+16535:   : expr(cg.expr), modulus_(cg.modulus_) {
+16535: }
+16535: 
+16535: inline
+16535: Congruence::Congruence(const Congruence& cg, Representation r)
+16535:   : expr(cg.expr, r), modulus_(cg.modulus_) {
+16535: }
+16535: 
+16535: inline
+16535: Congruence::Congruence(const Congruence& cg,
+16535:                        dimension_type new_space_dimension)
+16535:   : expr(cg.expr, new_space_dimension), modulus_(cg.modulus_) {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Congruence::Congruence(const Congruence& cg,
+16535:                        dimension_type new_space_dimension,
+16535:                        Representation r)
+16535:   : expr(cg.expr, new_space_dimension, r), modulus_(cg.modulus_) {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline Representation
+16535: Congruence::representation() const {
+16535:   return expr.representation();
+16535: }
+16535: 
+16535: inline void
+16535: Congruence::set_representation(Representation r) {
+16535:   expr.set_representation(r);
+16535: }
+16535: 
+16535: inline Congruence::expr_type
+16535: Congruence::expression() const {
+16535:   return expr_type(expr);
+16535: }
+16535: 
+16535: inline void
+16535: Congruence::set_space_dimension(dimension_type n) {
+16535:   expr.set_space_dimension(n);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline void
+16535: Congruence::shift_space_dimensions(Variable v, dimension_type n) {
+16535:   expr.shift_space_dimensions(v, n);
+16535: }
+16535: 
+16535: inline
+16535: Congruence::~Congruence() {
+16535: }
+16535: 
+16535: inline
+16535: Congruence::Congruence(Linear_Expression& le,
+16535:                        Coefficient_traits::const_reference m,
+16535:                        Recycle_Input)
+16535:   : modulus_(m) {
+16535:   ((void) 0);
+16535:   swap(expr, le);
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline Congruence
+16535: Congruence::create(const Linear_Expression& e,
+16535:                    Coefficient_traits::const_reference n,
+16535:                    Representation r) {
+16535:   Linear_Expression diff(e, r);
+16535:   diff -= n;
+16535:   const Congruence cg(diff, 1, Recycle_Input());
+16535:   return cg;
+16535: }
+16535: 
+16535: inline Congruence
+16535: Congruence::create(Coefficient_traits::const_reference n,
+16535:                    const Linear_Expression& e,
+16535:                    Representation r) {
+16535:   Linear_Expression diff(e, r);
+16535:   diff -= n;
+16535:   const Congruence cg(diff, 1, Recycle_Input());
+16535:   return cg;
+16535: }
+16535: 
+16535: 
+16535: inline Congruence
+16535: operator%=(const Linear_Expression& e1, const Linear_Expression& e2) {
+16535:   return Congruence::create(e1, e2);
+16535: }
+16535: 
+16535: 
+16535: inline Congruence
+16535: operator%=(const Linear_Expression& e, Coefficient_traits::const_reference n) {
+16535:   return Congruence::create(e, n);
+16535: }
+16535: 
+16535: 
+16535: inline Congruence
+16535: operator/(const Congruence& cg, Coefficient_traits::const_reference k) {
+16535:   Congruence ret = cg;
+16535:   ret /= k;
+16535:   return ret;
+16535: }
+16535: 
+16535: inline const Congruence&
+16535: Congruence::zero_dim_integrality() {
+16535:   return *zero_dim_integrality_p;
+16535: }
+16535: 
+16535: inline const Congruence&
+16535: Congruence::zero_dim_false() {
+16535:   return *zero_dim_false_p;
+16535: }
+16535: 
+16535: inline Congruence&
+16535: Congruence::operator=(const Congruence& y) {
+16535:   Congruence tmp = y;
+16535:   swap(*this, tmp);
+16535:   return *this;
+16535: }
+16535: 
+16535: 
+16535: inline Congruence
+16535: operator/(const Constraint& c, Coefficient_traits::const_reference m) {
+16535:   Congruence ret(c);
+16535:   ret /= m;
+16535:   return ret;
+16535: }
+16535: 
+16535: inline Congruence&
+16535: Congruence::operator/=(Coefficient_traits::const_reference k) {
+16535:   if (k >= 0) {
+16535:     modulus_ *= k;
+16535:   }
+16535:   else {
+16535:     modulus_ *= -k;
+16535:   }
+16535:   return *this;
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: operator==(const Congruence& x, const Congruence& y) {
+16535:   if (x.space_dimension() != y.space_dimension()) {
+16535:     return false;
+16535:   }
+16535:   Congruence x_temp(x);
+16535:   Congruence y_temp(y);
+16535:   x_temp.strong_normalize();
+16535:   y_temp.strong_normalize();
+16535:   return x_temp.expr.is_equal_to(y_temp.expr)
+16535:     && x_temp.modulus() == y_temp.modulus();
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: operator!=(const Congruence& x, const Congruence& y) {
+16535:   return !(x == y);
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Congruence::max_space_dimension() {
+16535:   return Linear_Expression::max_space_dimension();
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Congruence::space_dimension() const {
+16535:   return expr.space_dimension();
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: Congruence::coefficient(const Variable v) const {
+16535:   if (v.space_dimension() > space_dimension()) {
+16535:     throw_dimension_incompatible("coefficient(v)", "v", v);
+16535:   }
+16535:   return expr.coefficient(v);
+16535: }
+16535: 
+16535: inline void
+16535: Congruence::permute_space_dimensions(const std::vector<Variable>& cycles) {
+16535:   expr.permute_space_dimensions(cycles);
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: Congruence::inhomogeneous_term() const {
+16535:   return expr.inhomogeneous_term();
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: Congruence::modulus() const {
+16535:   return modulus_;
+16535: }
+16535: 
+16535: inline void
+16535: Congruence::set_modulus(Coefficient_traits::const_reference m) {
+16535:   modulus_ = m;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline bool
+16535: Congruence::is_proper_congruence() const {
+16535:   return modulus() > 0;
+16535: }
+16535: 
+16535: inline bool
+16535: Congruence::is_equality() const {
+16535:   return modulus() == 0;
+16535: }
+16535: 
+16535: inline bool
+16535: Congruence::is_equal_at_dimension(Variable v,
+16535:                                   const Congruence& cg) const {
+16535:   return coefficient(v) * cg.modulus() == cg.coefficient(v) * modulus();
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Congruence::external_memory_in_bytes() const {
+16535:   return expr.external_memory_in_bytes()
+16535:          + Parma_Polyhedra_Library::external_memory_in_bytes(modulus_);
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Congruence::total_memory_in_bytes() const {
+16535:   return external_memory_in_bytes() + sizeof(*this);
+16535: }
+16535: 
+16535: inline void
+16535: Congruence::m_swap(Congruence& y) {
+16535:   using std::swap;
+16535:   swap(expr, y.expr);
+16535:   swap(modulus_, y.modulus_);
+16535: }
+16535: 
+16535: inline void
+16535: Congruence::swap_space_dimensions(Variable v1, Variable v2) {
+16535:   expr.swap_space_dimensions(v1, v2);
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: swap(Congruence& x, Congruence& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 505 "../../src/Congruence_defs.hh" 2
+16535: # 34 "../../src/Linear_Expression_Impl_templates.hh" 2
+16535: 
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Row>
+16535: Linear_Expression_Impl<Row>
+16535: ::Linear_Expression_Impl(const Linear_Expression_Impl& e) {
+16535:   construct(e);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: template <typename Row2>
+16535: Linear_Expression_Impl<Row>
+16535: ::Linear_Expression_Impl(const Linear_Expression_Impl<Row2>& e) {
+16535:   construct(e);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: Linear_Expression_Impl<Row>
+16535: ::Linear_Expression_Impl(const Linear_Expression_Interface& e) {
+16535:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
+16535:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
+16535:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&e)) {
+16535:     construct(*p);
+16535:   }
+16535:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&e)) {
+16535:     construct(*p);
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: Linear_Expression_Impl<Row>
+16535: ::Linear_Expression_Impl(const Linear_Expression_Interface& e,
+16535:                          dimension_type space_dim) {
+16535:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
+16535:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
+16535:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&e)) {
+16535:     construct(*p, space_dim);
+16535:   }
+16535:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&e)) {
+16535:     construct(*p, space_dim);
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: template <typename Row2>
+16535: void
+16535: Linear_Expression_Impl<Row>
+16535: ::linear_combine(const Linear_Expression_Impl<Row2>& y, Variable i) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   linear_combine(y, i.space_dimension());
+16535: }
+16535: 
+16535: template <typename Row>
+16535: template <typename Row2>
+16535: void
+16535: Linear_Expression_Impl<Row>
+16535: ::linear_combine(const Linear_Expression_Impl<Row2>& y, dimension_type i) {
+16535:   const Linear_Expression_Impl& x = *this;
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   Coefficient_traits::const_reference x_i = x.row.get(i);
+16535:   Coefficient_traits::const_reference y_i = y.row.get(i);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_normalized_x_v; Parma_Polyhedra_Library::Coefficient& normalized_x_v = holder_normalized_x_v.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_normalized_y_v; Parma_Polyhedra_Library::Coefficient& normalized_y_v = holder_normalized_y_v.item();
+16535:   normalize2(x_i, y_i, normalized_x_v, normalized_y_v);
+16535:   neg_assign(normalized_x_v);
+16535:   linear_combine(y, normalized_y_v, normalized_x_v);
+16535: 
+16535: 
+16535:   
+16535: # 116 "../../src/Linear_Expression_Impl_templates.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 116 "../../src/Linear_Expression_Impl_templates.hh"
+16535:                           ;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: template <typename Row2>
+16535: void
+16535: Linear_Expression_Impl<Row>
+16535: ::linear_combine(const Linear_Expression_Impl<Row2>& y,
+16535:                  Coefficient_traits::const_reference c1,
+16535:                  Coefficient_traits::const_reference c2) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   if (space_dimension() < y.space_dimension()) {
+16535:     set_space_dimension(y.space_dimension());
+16535:   }
+16535:   linear_combine(y, c1, c2, 0, y.space_dimension() + 1);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: template <typename Row2>
+16535: void
+16535: Linear_Expression_Impl<Row>
+16535: ::linear_combine_lax(const Linear_Expression_Impl<Row2>& y,
+16535:                      Coefficient_traits::const_reference c1,
+16535:                      Coefficient_traits::const_reference c2) {
+16535:   if (space_dimension() < y.space_dimension()) {
+16535:     set_space_dimension(y.space_dimension());
+16535:   }
+16535:   linear_combine_lax(y, c1, c2, 0, y.space_dimension() + 1);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: template <typename Row2>
+16535: int
+16535: Linear_Expression_Impl<Row>
+16535: ::compare(const Linear_Expression_Impl<Row2>& y) const {
+16535:   const Linear_Expression_Impl& x = *this;
+16535: 
+16535: 
+16535:   typename Row::const_iterator i = x.row.lower_bound(1);
+16535:   typename Row::const_iterator i_end = x.row.end();
+16535:   typename Row2::const_iterator j = y.row.lower_bound(1);
+16535:   typename Row2::const_iterator j_end = y.row.end();
+16535:   while (i != i_end && j != j_end) {
+16535:     if (i.index() < j.index()) {
+16535:       const int s = sgn(*i);
+16535:       if (s != 0) {
+16535:         return 2*s;
+16535:       }
+16535:       ++i;
+16535:       continue;
+16535:     }
+16535:     if (i.index() > j.index()) {
+16535:       const int s = sgn(*j);
+16535:       if (s != 0) {
+16535:         return -2*s;
+16535:       }
+16535:       ++j;
+16535:       continue;
+16535:     }
+16535:     ((void) 0);
+16535:     const int s = cmp(*i, *j);
+16535:     if (s < 0) {
+16535:       return -2;
+16535:     }
+16535:     if (s > 0) {
+16535:       return 2;
+16535:     }
+16535:     ((void) 0);
+16535:     ++i;
+16535:     ++j;
+16535:   }
+16535:   for ( ; i != i_end; ++i) {
+16535:     const int s = sgn(*i);
+16535:     if (s != 0) {
+16535:       return 2*s;
+16535:     }
+16535:   }
+16535:   for ( ; j != j_end; ++j) {
+16535:     const int s = sgn(*j);
+16535:     if (s != 0) {
+16535:       return -2*s;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const int comp = cmp(x.row.get(0), y.row.get(0));
+16535:   if (comp > 0) {
+16535:     return 1;
+16535:   }
+16535:   if (comp < 0) {
+16535:     return -1;
+16535:   }
+16535:   ((void) 0);
+16535: 
+16535: 
+16535:   return 0;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: Linear_Expression_Impl<Row>::Linear_Expression_Impl(const Variable v) {
+16535:   if (v.space_dimension() > max_space_dimension()) {
+16535:     throw std::length_error("Linear_Expression_Impl::"
+16535:                             "Linear_Expression_Impl(v):\n"
+16535:                             "v exceeds the maximum allowed "
+16535:                             "space dimension.");
+16535:   }
+16535:   set_space_dimension(v.space_dimension());
+16535:   (*this) += v;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: template <typename Row2>
+16535: bool
+16535: Linear_Expression_Impl<Row>
+16535: ::is_equal_to(const Linear_Expression_Impl<Row2>& x) const {
+16535:   return row == x.row;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>::get_row(Dense_Row& r) const {
+16535:   r = this->row;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>::get_row(Sparse_Row& r) const {
+16535:   r = this->row;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>
+16535: ::permute_space_dimensions(const std::vector<Variable>& cycle) {
+16535:   const dimension_type n = cycle.size();
+16535:   if (n < 2) {
+16535:     return;
+16535:   }
+16535: 
+16535:   if (n == 2) {
+16535:     row.swap_coefficients(cycle[0].space_dimension(),
+16535:                           cycle[1].space_dimension());
+16535:   }
+16535:   else {
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_tmp; Parma_Polyhedra_Library::Coefficient& tmp = holder_tmp.item();
+16535:     tmp = row.get(cycle.back().space_dimension());
+16535:     for (dimension_type i = n - 1; i-- > 0; ) {
+16535:       row.swap_coefficients(cycle[i + 1].space_dimension(),
+16535:                             cycle[i].space_dimension());
+16535:     }
+16535:     if (tmp == 0) {
+16535:       row.reset(cycle[0].space_dimension());
+16535:     }
+16535:     else {
+16535:       using std::swap;
+16535:       swap(tmp, row[cycle[0].space_dimension()]);
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: template <typename Row2>
+16535: Linear_Expression_Impl<Row>&
+16535: Linear_Expression_Impl<Row>::operator+=(const Linear_Expression_Impl<Row2>& e) {
+16535:   linear_combine(e, Coefficient_one(), Coefficient_one());
+16535:   return *this;
+16535: }
+16535: 
+16535: 
+16535: template <typename Row>
+16535: Linear_Expression_Impl<Row>&
+16535: Linear_Expression_Impl<Row>::operator+=(const Variable v) {
+16535:   const dimension_type v_space_dim = v.space_dimension();
+16535:   if (v_space_dim > Linear_Expression_Impl<Row>::max_space_dimension()) {
+16535:     throw std::length_error("Linear_Expression_Impl& "
+16535:                             "operator+=(e, v):\n"
+16535:                             "v exceeds the maximum allowed space dimension.");
+16535:   }
+16535:   if (space_dimension() < v_space_dim) {
+16535:     set_space_dimension(v_space_dim);
+16535:   }
+16535:   typename Row::iterator itr = row.insert(v_space_dim);
+16535:   ++(*itr);
+16535:   if (*itr == 0) {
+16535:     row.reset(itr);
+16535:   }
+16535:   ((void) 0);
+16535:   return *this;
+16535: }
+16535: 
+16535: 
+16535: template <typename Row>
+16535: template <typename Row2>
+16535: Linear_Expression_Impl<Row>&
+16535: Linear_Expression_Impl<Row>::operator-=(const Linear_Expression_Impl<Row2>& e2) {
+16535:   linear_combine(e2, Coefficient_one(), -1);
+16535:   return *this;
+16535: }
+16535: 
+16535: 
+16535: template <typename Row>
+16535: Linear_Expression_Impl<Row>&
+16535: Linear_Expression_Impl<Row>::operator-=(const Variable v) {
+16535:   const dimension_type v_space_dim = v.space_dimension();
+16535:   if (v_space_dim > Linear_Expression_Impl<Row>::max_space_dimension()) {
+16535:     throw std::length_error("Linear_Expression_Impl& "
+16535:                             "operator-=(e, v):\n"
+16535:                             "v exceeds the maximum allowed space dimension.");
+16535:   }
+16535:   if (space_dimension() < v_space_dim) {
+16535:     set_space_dimension(v_space_dim);
+16535:   }
+16535:   typename Row::iterator itr = row.insert(v_space_dim);
+16535:   --(*itr);
+16535:   if (*itr == 0) {
+16535:     row.reset(itr);
+16535:   }
+16535:   ((void) 0);
+16535:   return *this;
+16535: }
+16535: 
+16535: 
+16535: template <typename Row>
+16535: Linear_Expression_Impl<Row>&
+16535: Linear_Expression_Impl<Row>::operator*=(Coefficient_traits::const_reference n) {
+16535:   if (n == 0) {
+16535:     row.clear();
+16535:     ((void) 0);
+16535:     return *this;
+16535:   }
+16535:   for (typename Row::iterator i = row.begin(),
+16535:          i_end = row.end(); i != i_end; ++i) {
+16535:     (*i) *= n;
+16535:   }
+16535:   ((void) 0);
+16535:   return *this;
+16535: }
+16535: 
+16535: 
+16535: template <typename Row>
+16535: Linear_Expression_Impl<Row>&
+16535: Linear_Expression_Impl<Row>::operator/=(Coefficient_traits::const_reference n) {
+16535:   typename Row::iterator i = row.begin();
+16535:   const typename Row::iterator& i_end = row.end();
+16535:   while (i != i_end) {
+16535:     (*i) /= n;
+16535:     if (*i == 0) {
+16535:       i = row.reset(i);
+16535:     }
+16535:     else {
+16535:       ++i;
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535:   return *this;
+16535: }
+16535: 
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>::negate() {
+16535:   for (typename Row::iterator i = row.begin(),
+16535:          i_end = row.end(); i != i_end; ++i) {
+16535:     neg_assign(*i);
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: 
+16535: template <typename Row>
+16535: Linear_Expression_Impl<Row>&
+16535: Linear_Expression_Impl<Row>::add_mul_assign(Coefficient_traits::const_reference n,
+16535:                                             const Variable v) {
+16535:   const dimension_type v_space_dim = v.space_dimension();
+16535:   if (v_space_dim > Linear_Expression_Impl<Row>::max_space_dimension()) {
+16535:     throw std::length_error("Linear_Expression_Impl& "
+16535:                             "add_mul_assign(e, n, v):\n"
+16535:                             "v exceeds the maximum allowed space dimension.");
+16535:   }
+16535:   if (space_dimension() < v_space_dim) {
+16535:     set_space_dimension(v_space_dim);
+16535:   }
+16535:   if (n == 0) {
+16535:     return *this;
+16535:   }
+16535:   typename Row::iterator itr = row.insert(v_space_dim);
+16535:   (*itr) += n;
+16535:   if (*itr == 0) {
+16535:     row.reset(itr);
+16535:   }
+16535:   ((void) 0);
+16535:   return *this;
+16535: }
+16535: 
+16535: 
+16535: template <typename Row>
+16535: Linear_Expression_Impl<Row>&
+16535: Linear_Expression_Impl<Row>
+16535: ::sub_mul_assign(Coefficient_traits::const_reference n,
+16535:                  const Variable v) {
+16535:   const dimension_type v_space_dim = v.space_dimension();
+16535:   if (v_space_dim > Linear_Expression_Impl<Row>::max_space_dimension()) {
+16535:     throw std::length_error("Linear_Expression_Impl& "
+16535:                             "sub_mul_assign(e, n, v):\n"
+16535:                             "v exceeds the maximum allowed space dimension.");
+16535:   }
+16535:   if (space_dimension() < v_space_dim) {
+16535:     set_space_dimension(v_space_dim);
+16535:   }
+16535:   if (n == 0) {
+16535:     return *this;
+16535:   }
+16535:   typename Row::iterator itr = row.insert(v_space_dim);
+16535:   (*itr) -= n;
+16535:   if (*itr == 0) {
+16535:     row.reset(itr);
+16535:   }
+16535:   ((void) 0);
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: template <typename Row2>
+16535: void
+16535: Linear_Expression_Impl<Row>
+16535: ::add_mul_assign(Coefficient_traits::const_reference factor,
+16535:                  const Linear_Expression_Impl<Row2>& y) {
+16535:   if (factor != 0) {
+16535:     linear_combine(y, Coefficient_one(), factor);
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: template <typename Row2>
+16535: void
+16535: Linear_Expression_Impl<Row>
+16535: ::sub_mul_assign(Coefficient_traits::const_reference factor,
+16535:                  const Linear_Expression_Impl<Row2>& y) {
+16535:   if (factor != 0) {
+16535:     linear_combine(y, Coefficient_one(), -factor);
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>::print(std::ostream& s) const {
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_ev; Parma_Polyhedra_Library::Coefficient& ev = holder_ev.item();
+16535:   bool first = true;
+16535:   for (typename Row::const_iterator i = row.lower_bound(1), i_end = row.end();
+16535:        i != i_end; ++i) {
+16535:     ev = *i;
+16535:     if (ev == 0) {
+16535:       continue;
+16535:     }
+16535:     if (!first) {
+16535:       if (ev > 0) {
+16535:         s << " + ";
+16535:       }
+16535:       else {
+16535:         s << " - ";
+16535:         neg_assign(ev);
+16535:       }
+16535:     }
+16535:     else {
+16535:       first = false;
+16535:     }
+16535:     if (ev == -1) {
+16535:       s << "-";
+16535:     }
+16535:     else if (ev != 1) {
+16535:       s << ev << "*";
+16535:     }
+16535:     IO_Operators::operator<<(s, Variable(i.index() - 1));
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_it; Parma_Polyhedra_Library::Coefficient& it = holder_it.item();
+16535:   it = row[0];
+16535:   if (it != 0) {
+16535:     if (!first) {
+16535:       if (it > 0) {
+16535:         s << " + ";
+16535:       }
+16535:       else {
+16535:         s << " - ";
+16535:         neg_assign(it);
+16535:       }
+16535:     }
+16535:     else {
+16535:       first = false;
+16535:     }
+16535:     s << it;
+16535:   }
+16535: 
+16535:   if (first) {
+16535: 
+16535:     s << Coefficient_zero();
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: Coefficient_traits::const_reference
+16535: Linear_Expression_Impl<Row>::get(dimension_type i) const {
+16535:   return row.get(i);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>
+16535: ::set(dimension_type i, Coefficient_traits::const_reference n) {
+16535:   if (n == 0) {
+16535:     row.reset(i);
+16535:   }
+16535:   else {
+16535:     row.insert(i, n);
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>
+16535: ::exact_div_assign(Coefficient_traits::const_reference c,
+16535:                    dimension_type start, dimension_type end) {
+16535: 
+16535: 
+16535: 
+16535:   for (typename Row::iterator i = row.lower_bound(start),
+16535:          i_end = row.lower_bound(end); i != i_end; ++i) {
+16535:     Parma_Polyhedra_Library::exact_div_assign(*i, *i, c);
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>
+16535: ::mul_assign(Coefficient_traits::const_reference c,
+16535:                    dimension_type start, dimension_type end) {
+16535:   if (c == 0) {
+16535:     typename Row::iterator i = row.lower_bound(start);
+16535:     const typename Row::iterator& i_end = row.end();
+16535:     while (i != i_end && i.index() < end) {
+16535:       i = row.reset(i);
+16535:     }
+16535:   }
+16535:   else {
+16535:     for (typename Row::iterator
+16535:       i = row.lower_bound(start), i_end = row.lower_bound(end);
+16535:       i != i_end; ++i) {
+16535:       (*i) *= c;
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: template <typename Row2>
+16535: void
+16535: Linear_Expression_Impl<Row>
+16535: ::linear_combine(const Linear_Expression_Impl<Row2>& y,
+16535:                  Coefficient_traits::const_reference c1,
+16535:                  Coefficient_traits::const_reference c2,
+16535:                  dimension_type start, dimension_type end) {
+16535:   Parma_Polyhedra_Library::linear_combine(row, y.row, c1, c2, start, end);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: template <typename Row2>
+16535: void
+16535: Linear_Expression_Impl<Row>
+16535: ::linear_combine_lax(const Linear_Expression_Impl<Row2>& y,
+16535:                      Coefficient_traits::const_reference c1,
+16535:                      Coefficient_traits::const_reference c2,
+16535:                      dimension_type start, dimension_type end) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   if (c1 == 0) {
+16535:     if (c2 == 0) {
+16535:       ((void) 0);
+16535:       ((void) 0);
+16535:       typename Row::iterator i = row.lower_bound(start);
+16535:       const typename Row::iterator& i_end = row.end();
+16535:       while (i != i_end && i.index() < end) {
+16535:         i = row.reset(i);
+16535:       }
+16535:     }
+16535:     else {
+16535:       ((void) 0);
+16535:       ((void) 0);
+16535: 
+16535:       typename Row::iterator i = row.lower_bound(start);
+16535:       const typename Row::iterator& i_end = row.end();
+16535:       typename Row2::const_iterator j = y.row.lower_bound(start);
+16535:       typename Row2::const_iterator j_last = y.row.lower_bound(end);
+16535: 
+16535:       while (i != i_end && i.index() < end && j != j_last) {
+16535:         if (i.index() < j.index()) {
+16535:           i = row.reset(i);
+16535:           continue;
+16535:         }
+16535:         if (i.index() > j.index()) {
+16535:           i = row.insert(i, j.index(), *j);
+16535:           (*i) *= c2;
+16535:           ++i;
+16535:           ++j;
+16535:           continue;
+16535:         }
+16535:         ((void) 0);
+16535:         (*i) = (*j);
+16535:         (*i) *= c2;
+16535:         ++i;
+16535:         ++j;
+16535:       }
+16535:       while (i != i_end && i.index() < end) {
+16535:         i = row.reset(i);
+16535:       }
+16535:       while (j != j_last) {
+16535:         i = row.insert(i, j.index(), *j);
+16535:         (*i) *= c2;
+16535: 
+16535:         ++j;
+16535:       }
+16535:     }
+16535:   }
+16535:   else {
+16535:     if (c2 == 0) {
+16535:       ((void) 0);
+16535:       ((void) 0);
+16535:       for (typename Row::iterator i = row.lower_bound(start),
+16535:              i_end = row.lower_bound(end); i != i_end; ++i) {
+16535:         (*i) *= c1;
+16535:       }
+16535:     }
+16535:     else {
+16535:       ((void) 0);
+16535:       ((void) 0);
+16535:       Parma_Polyhedra_Library::linear_combine(row, y.row, c1, c2, start, end);
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>::sign_normalize() {
+16535:   typename Row::iterator i = row.lower_bound(1);
+16535:   typename Row::iterator i_end = row.end();
+16535: 
+16535:   for ( ; i != i_end; ++i) {
+16535:     if (*i != 0) {
+16535:       break;
+16535:     }
+16535:   }
+16535: 
+16535:   if (i != i_end && *i < 0) {
+16535:     for ( ; i != i_end; ++i) {
+16535:       neg_assign(*i);
+16535:     }
+16535: 
+16535:     typename Row::iterator first = row.begin();
+16535:     if (first != row.end() && first.index() == 0) {
+16535:       neg_assign(*first);
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>::negate(dimension_type first, dimension_type last) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   typename Row::iterator i = row.lower_bound(first);
+16535:   typename Row::iterator i_end = row.lower_bound(last);
+16535:   for ( ; i != i_end; ++i) {
+16535:     neg_assign(*i);
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: template <typename Row2>
+16535: void
+16535: Linear_Expression_Impl<Row>::construct(const Linear_Expression_Impl<Row2>& e) {
+16535:   row = e.row;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: template <typename Row2>
+16535: void
+16535: Linear_Expression_Impl<Row>::construct(const Linear_Expression_Impl<Row2>& e,
+16535:                                        dimension_type space_dim) {
+16535:   Row x(e.row, space_dim + 1, space_dim + 1);
+16535:   swap(row, x);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: template <typename Row2>
+16535: void
+16535: Linear_Expression_Impl<Row>
+16535: ::scalar_product_assign(Coefficient& result,
+16535:                         const Linear_Expression_Impl<Row2>& y,
+16535:                         dimension_type start, dimension_type end) const {
+16535:   const Linear_Expression_Impl<Row>& x = *this;
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   result = 0;
+16535:   typename Row ::const_iterator x_i = x.row.lower_bound(start);
+16535:   typename Row ::const_iterator x_end = x.row.lower_bound(end);
+16535:   typename Row2::const_iterator y_i = y.row.lower_bound(start);
+16535:   typename Row2::const_iterator y_end = y.row.lower_bound(end);
+16535:   while (x_i != x_end && y_i != y_end) {
+16535:     if (x_i.index() == y_i.index()) {
+16535:       Parma_Polyhedra_Library::add_mul_assign(result, *x_i, *y_i);
+16535:       ++x_i;
+16535:       ++y_i;
+16535:     }
+16535:     else {
+16535:       if (x_i.index() < y_i.index()) {
+16535:         ((void) 0);
+16535: 
+16535:         ++x_i;
+16535:       }
+16535:       else {
+16535:         ((void) 0);
+16535: 
+16535:         ++y_i;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: }
+16535: 
+16535: template <typename Row>
+16535: template <typename Row2>
+16535: int
+16535: Linear_Expression_Impl<Row>
+16535: ::scalar_product_sign(const Linear_Expression_Impl<Row2>& y,
+16535:                       dimension_type start, dimension_type end) const {
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_result; Parma_Polyhedra_Library::Coefficient& result = holder_result.item();
+16535:   scalar_product_assign(result, y, start, end);
+16535:   return sgn(result);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: template <typename Row2>
+16535: bool
+16535: Linear_Expression_Impl<Row>
+16535: ::is_equal_to(const Linear_Expression_Impl<Row2>& y,
+16535:               dimension_type start, dimension_type end) const {
+16535:   const Linear_Expression_Impl<Row>& x = *this;
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535:   typename Row::const_iterator i = x.row.lower_bound(start);
+16535:   typename Row::const_iterator i_end = x.row.lower_bound(end);
+16535:   typename Row2::const_iterator j = y.row.lower_bound(start);
+16535:   typename Row2::const_iterator j_end = y.row.lower_bound(end);
+16535:   while (i != i_end && j != j_end) {
+16535:     if (i.index() == j.index()) {
+16535:       if (*i != *j) {
+16535:         return false;
+16535:       }
+16535:       ++i;
+16535:       ++j;
+16535:     }
+16535:     else {
+16535:       if (i.index() < j.index()) {
+16535:         if (*i != 0) {
+16535:           return false;
+16535:         }
+16535:         ++i;
+16535:       }
+16535:       else {
+16535:         ((void) 0);
+16535:         if (*j != 0) {
+16535:           return false;
+16535:         }
+16535:         ++j;
+16535:       }
+16535:     }
+16535:   }
+16535:   for ( ; i != i_end; ++i) {
+16535:     if (*i != 0) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   for ( ; j != j_end; ++j) {
+16535:     if (*j != 0) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: template <typename Row2>
+16535: bool
+16535: Linear_Expression_Impl<Row>
+16535: ::is_equal_to(const Linear_Expression_Impl<Row2>& y,
+16535:               Coefficient_traits::const_reference c1,
+16535:               Coefficient_traits::const_reference c2,
+16535:               dimension_type start, dimension_type end) const {
+16535:   const Linear_Expression_Impl<Row>& x = *this;
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535: 
+16535:   if (c1 == 0) {
+16535:     if (c2 == 0) {
+16535:       return true;
+16535:     }
+16535:     else {
+16535:       return y.all_zeroes(start, end);
+16535:     }
+16535:   }
+16535:   if (c2 == 0) {
+16535:     return x.all_zeroes(start, end);
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   typename Row::const_iterator i = x.row.lower_bound(start);
+16535:   typename Row::const_iterator i_end = x.row.lower_bound(end);
+16535:   typename Row2::const_iterator j = y.row.lower_bound(start);
+16535:   typename Row2::const_iterator j_end = y.row.lower_bound(end);
+16535:   while (i != i_end && j != j_end) {
+16535:     if (i.index() == j.index()) {
+16535:       if ((*i) * c1 != (*j) * c2) {
+16535:         return false;
+16535:       }
+16535:       ++i;
+16535:       ++j;
+16535:     }
+16535:     else {
+16535:       if (i.index() < j.index()) {
+16535:         if (*i != 0) {
+16535:           return false;
+16535:         }
+16535:         ++i;
+16535:       }
+16535:       else {
+16535:         ((void) 0);
+16535:         if (*j != 0) {
+16535:           return false;
+16535:         }
+16535:         ++j;
+16535:       }
+16535:     }
+16535:   }
+16535:   for ( ; i != i_end; ++i) {
+16535:     if (*i != 0) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   for ( ; j != j_end; ++j) {
+16535:     if (*j != 0) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>
+16535: ::linear_combine(const Linear_Expression_Interface& y, Variable v) {
+16535:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
+16535:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
+16535:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
+16535:     linear_combine(*p, v);
+16535:   }
+16535:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
+16535:     linear_combine(*p, v);
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>
+16535: ::linear_combine(const Linear_Expression_Interface& y,
+16535:                  Coefficient_traits::const_reference c1,
+16535:                  Coefficient_traits::const_reference c2) {
+16535:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
+16535:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
+16535:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
+16535:     linear_combine(*p, c1, c2);
+16535:   }
+16535:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
+16535:     linear_combine(*p, c1, c2);
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>
+16535: ::linear_combine_lax(const Linear_Expression_Interface& y,
+16535:                      Coefficient_traits::const_reference c1,
+16535:                      Coefficient_traits::const_reference c2) {
+16535:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
+16535:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
+16535:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
+16535:     linear_combine_lax(*p, c1, c2);
+16535:   }
+16535:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
+16535:     linear_combine_lax(*p, c1, c2);
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: bool
+16535: Linear_Expression_Impl<Row>
+16535: ::is_equal_to(const Linear_Expression_Interface& y) const {
+16535:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
+16535:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
+16535:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
+16535:     return is_equal_to(*p);
+16535:   }
+16535:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
+16535:     return is_equal_to(*p);
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return false;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: Linear_Expression_Impl<Row>&
+16535: Linear_Expression_Impl<Row>
+16535: ::operator+=(const Linear_Expression_Interface& y) {
+16535:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
+16535:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
+16535:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
+16535:     return operator+=(*p);
+16535:   }
+16535:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
+16535:     return operator+=(*p);
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return *this;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: Linear_Expression_Impl<Row>&
+16535: Linear_Expression_Impl<Row>
+16535: ::operator-=(const Linear_Expression_Interface& y) {
+16535:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
+16535:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
+16535:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
+16535:     return operator-=(*p);
+16535:   }
+16535:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
+16535:     return operator-=(*p);
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return *this;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>
+16535: ::add_mul_assign(Coefficient_traits::const_reference factor,
+16535:                  const Linear_Expression_Interface& y) {
+16535:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
+16535:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
+16535:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
+16535:     add_mul_assign(factor, *p);
+16535:   }
+16535:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
+16535:     add_mul_assign(factor, *p);
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>
+16535: ::sub_mul_assign(Coefficient_traits::const_reference factor,
+16535:                  const Linear_Expression_Interface& y) {
+16535:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
+16535:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
+16535:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
+16535:     sub_mul_assign(factor, *p);
+16535:   }
+16535:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
+16535:     sub_mul_assign(factor, *p);
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>
+16535: ::linear_combine(const Linear_Expression_Interface& y, dimension_type i) {
+16535:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
+16535:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
+16535:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
+16535:     linear_combine(*p, i);
+16535:   }
+16535:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
+16535:     linear_combine(*p, i);
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>
+16535: ::linear_combine(const Linear_Expression_Interface& y,
+16535:                  Coefficient_traits::const_reference c1,
+16535:                  Coefficient_traits::const_reference c2,
+16535:                  dimension_type start, dimension_type end) {
+16535:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
+16535:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
+16535:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
+16535:     linear_combine(*p, c1, c2, start, end);
+16535:   }
+16535:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
+16535:     linear_combine(*p, c1, c2, start, end);
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>
+16535: ::linear_combine_lax(const Linear_Expression_Interface& y,
+16535:                      Coefficient_traits::const_reference c1,
+16535:                      Coefficient_traits::const_reference c2,
+16535:                      dimension_type start, dimension_type end) {
+16535:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
+16535:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
+16535:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
+16535:     linear_combine_lax(*p, c1, c2, start, end);
+16535:   }
+16535:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
+16535:     linear_combine_lax(*p, c1, c2, start, end);
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: int
+16535: Linear_Expression_Impl<Row>
+16535: ::compare(const Linear_Expression_Interface& y) const {
+16535:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
+16535:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
+16535:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
+16535:     return compare(*p);
+16535:   }
+16535:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
+16535:     return compare(*p);
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return 0;
+16535:   }
+16535: }
+16535: 
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>::construct(const Linear_Expression_Interface& y) {
+16535:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
+16535:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
+16535:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
+16535:     return construct(*p);
+16535:   }
+16535:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
+16535:     return construct(*p);
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>::construct(const Linear_Expression_Interface& y,
+16535:                                        dimension_type space_dim) {
+16535:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
+16535:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
+16535:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
+16535:     return construct(*p, space_dim);
+16535:   }
+16535:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
+16535:     return construct(*p, space_dim);
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>
+16535: ::scalar_product_assign(Coefficient& result,
+16535:                         const Linear_Expression_Interface& y,
+16535:                         dimension_type start, dimension_type end) const {
+16535:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
+16535:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
+16535:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
+16535:     scalar_product_assign(result, *p, start, end);
+16535:   }
+16535:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
+16535:     scalar_product_assign(result, *p, start, end);
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: int
+16535: Linear_Expression_Impl<Row>
+16535: ::scalar_product_sign(const Linear_Expression_Interface& y,
+16535:                       dimension_type start, dimension_type end) const {
+16535:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
+16535:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
+16535:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
+16535:     return scalar_product_sign(*p, start, end);
+16535:   }
+16535:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
+16535:     return scalar_product_sign(*p, start, end);
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return 0;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: bool
+16535: Linear_Expression_Impl<Row>
+16535: ::is_equal_to(const Linear_Expression_Interface& y,
+16535:               dimension_type start, dimension_type end) const {
+16535:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
+16535:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
+16535:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
+16535:     return is_equal_to(*p, start, end);
+16535:   }
+16535:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
+16535:     return is_equal_to(*p, start, end);
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return false;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: bool
+16535: Linear_Expression_Impl<Row>
+16535: ::is_equal_to(const Linear_Expression_Interface& y,
+16535:               Coefficient_traits::const_reference c1,
+16535:               Coefficient_traits::const_reference c2,
+16535:               dimension_type start, dimension_type end) const {
+16535:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
+16535:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
+16535:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
+16535:     return is_equal_to(*p, c1, c2, start, end);
+16535:   }
+16535:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
+16535:     return is_equal_to(*p, c1, c2, start, end);
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return false;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: bool
+16535: Linear_Expression_Impl<Row>
+16535: ::have_a_common_variable(const Linear_Expression_Interface& y,
+16535:                          Variable first, Variable last) const {
+16535:   typedef const Linear_Expression_Impl<Dense_Row>* Dense_Ptr;
+16535:   typedef const Linear_Expression_Impl<Sparse_Row>* Sparse_Ptr;
+16535:   if (const Dense_Ptr p = dynamic_cast<Dense_Ptr>(&y)) {
+16535:     return have_a_common_variable(*p, first, last);
+16535:   }
+16535:   else if (const Sparse_Ptr p = dynamic_cast<Sparse_Ptr>(&y)) {
+16535:     return have_a_common_variable(*p, first, last);
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return false;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: Linear_Expression_Interface::const_iterator_interface*
+16535: Linear_Expression_Impl<Row>::begin() const {
+16535:   return new const_iterator(row, 1);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: Linear_Expression_Interface::const_iterator_interface*
+16535: Linear_Expression_Impl<Row>::end() const {
+16535:   return new const_iterator(row, row.size());
+16535: }
+16535: 
+16535: template <typename Row>
+16535: Linear_Expression_Interface::const_iterator_interface*
+16535: Linear_Expression_Impl<Row>::lower_bound(Variable v) const {
+16535:   return new const_iterator(row, v.space_dimension());
+16535: }
+16535: 
+16535: template <typename Row>
+16535: Linear_Expression_Impl<Row>::const_iterator
+16535: ::const_iterator(const Row& r, dimension_type i)
+16535:   : row(&r), itr(r.lower_bound(i)) {
+16535:   skip_zeroes_forward();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: Linear_Expression_Interface::const_iterator_interface*
+16535: Linear_Expression_Impl<Row>::const_iterator
+16535: ::clone() const {
+16535:   return new const_iterator(*this);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>::const_iterator
+16535: ::operator++() {
+16535:   ++itr;
+16535:   skip_zeroes_forward();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>::const_iterator
+16535: ::operator--() {
+16535:   --itr;
+16535:   skip_zeroes_backward();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: typename Linear_Expression_Impl<Row>::const_iterator::reference
+16535: Linear_Expression_Impl<Row>::const_iterator
+16535: ::operator*() const {
+16535:   return *itr;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: Variable
+16535: Linear_Expression_Impl<Row>::const_iterator
+16535: ::variable() const {
+16535:   const dimension_type i = itr.index();
+16535:   ((void) 0);
+16535:   return Variable(i - 1);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: bool
+16535: Linear_Expression_Impl<Row>::const_iterator
+16535: ::operator==(const const_iterator_interface& x) const {
+16535:   const const_iterator* const p = dynamic_cast<const const_iterator*>(&x);
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   return itr == p->itr;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_Expression_Impl<Row>::ascii_dump(std::ostream& s) const {
+16535:   s << "size " << (space_dimension() + 1) << " ";
+16535:   for (dimension_type i = 0; i < row.size(); ++i) {
+16535:     s << row.get(i);
+16535:     if (i != row.size() - 1) {
+16535:       s << ' ';
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: bool
+16535: Linear_Expression_Impl<Row>::ascii_load(std::istream& s) {
+16535:   std::string str;
+16535: 
+16535:   if (!(s >> str)) {
+16535:     return false;
+16535:   }
+16535:   if (str != "size") {
+16535:     return false;
+16535:   }
+16535: 
+16535:   dimension_type new_size;
+16535:   if (!(s >> new_size)) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   row.resize(0);
+16535:   row.resize(new_size);
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_c; Parma_Polyhedra_Library::Coefficient& c = holder_c.item();
+16535: 
+16535:   for (dimension_type j = 0; j < new_size; ++j) {
+16535:     if (!(s >> c)) {
+16535:       return false;
+16535:     }
+16535:     if (c != 0) {
+16535:       row.insert(j, c);
+16535:     }
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: bool
+16535: Linear_Expression_Impl<Row>::OK() const {
+16535:   return row.OK();
+16535: }
+16535: 
+16535: }
+16535: # 905 "../../src/Linear_Expression_Impl_defs.hh" 2
+16535: # 9 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/Linear_Form_templates.hh" 1
+16535: # 29 "../../src/Linear_Form_templates.hh"
+16535: # 1 "../../src/Box_defs.hh" 1
+16535: # 42 "../../src/Box_defs.hh"
+16535: # 1 "../../src/Poly_Con_Relation_types.hh" 1
+16535: # 16 "../../src/Poly_Con_Relation_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Poly_Con_Relation;
+16535: 
+16535: }
+16535: # 43 "../../src/Box_defs.hh" 2
+16535: # 1 "../../src/Poly_Gen_Relation_types.hh" 1
+16535: # 16 "../../src/Poly_Gen_Relation_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Poly_Gen_Relation;
+16535: 
+16535: }
+16535: # 44 "../../src/Box_defs.hh" 2
+16535: 
+16535: 
+16535: # 1 "../../src/Partially_Reduced_Product_types.hh" 1
+16535: # 16 "../../src/Partially_Reduced_Product_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename D1, typename D2>
+16535: class Smash_Reduction;
+16535: 
+16535: template <typename D1, typename D2>
+16535: class Constraints_Reduction;
+16535: 
+16535: template <typename D1, typename D2>
+16535: class Congruences_Reduction;
+16535: 
+16535: template <typename D1, typename D2>
+16535: class Shape_Preserving_Reduction;
+16535: 
+16535: template <typename D1, typename D2>
+16535: class No_Reduction;
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: class Partially_Reduced_Product;
+16535: 
+16535: }
+16535: # 47 "../../src/Box_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: struct Interval_Base;
+16535: 
+16535: 
+16535: 
+16535: template <typename ITV>
+16535: void swap(Box<ITV>& x, Box<ITV>& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename ITV>
+16535: bool operator==(const Box<ITV>& x, const Box<ITV>& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename ITV>
+16535: bool operator!=(const Box<ITV>& x, const Box<ITV>& y);
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: template <typename ITV>
+16535: std::ostream& operator<<(std::ostream& s, const Box<ITV>& box);
+16535: 
+16535: }
+16535: # 98 "../../src/Box_defs.hh"
+16535: template <typename To, typename ITV>
+16535: bool
+16535: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                             const Box<ITV>& x,
+16535:                             const Box<ITV>& y,
+16535:                             Rounding_Dir dir);
+16535: # 116 "../../src/Box_defs.hh"
+16535: template <typename Temp, typename To, typename ITV>
+16535: bool
+16535: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                             const Box<ITV>& x,
+16535:                             const Box<ITV>& y,
+16535:                             Rounding_Dir dir);
+16535: # 134 "../../src/Box_defs.hh"
+16535: template <typename Temp, typename To, typename ITV>
+16535: bool
+16535: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                             const Box<ITV>& x,
+16535:                             const Box<ITV>& y,
+16535:                             Rounding_Dir dir,
+16535:                             Temp& tmp0,
+16535:                             Temp& tmp1,
+16535:                             Temp& tmp2);
+16535: # 155 "../../src/Box_defs.hh"
+16535: template <typename To, typename ITV>
+16535: bool
+16535: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                           const Box<ITV>& x,
+16535:                           const Box<ITV>& y,
+16535:                           Rounding_Dir dir);
+16535: # 173 "../../src/Box_defs.hh"
+16535: template <typename Temp, typename To, typename ITV>
+16535: bool
+16535: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                           const Box<ITV>& x,
+16535:                           const Box<ITV>& y,
+16535:                           Rounding_Dir dir);
+16535: # 191 "../../src/Box_defs.hh"
+16535: template <typename Temp, typename To, typename ITV>
+16535: bool
+16535: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                           const Box<ITV>& x,
+16535:                           const Box<ITV>& y,
+16535:                           Rounding_Dir dir,
+16535:                           Temp& tmp0,
+16535:                           Temp& tmp1,
+16535:                           Temp& tmp2);
+16535: # 212 "../../src/Box_defs.hh"
+16535: template <typename To, typename ITV>
+16535: bool
+16535: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                            const Box<ITV>& x,
+16535:                            const Box<ITV>& y,
+16535:                            Rounding_Dir dir);
+16535: # 230 "../../src/Box_defs.hh"
+16535: template <typename Temp, typename To, typename ITV>
+16535: bool
+16535: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                            const Box<ITV>& x,
+16535:                            const Box<ITV>& y,
+16535:                            Rounding_Dir dir);
+16535: # 248 "../../src/Box_defs.hh"
+16535: template <typename Temp, typename To, typename ITV>
+16535: bool
+16535: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                            const Box<ITV>& x,
+16535:                            const Box<ITV>& y,
+16535:                            Rounding_Dir dir,
+16535:                            Temp& tmp0,
+16535:                            Temp& tmp1,
+16535:                            Temp& tmp2);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Specialization,
+16535:           typename Temp, typename To, typename ITV>
+16535: bool
+16535: l_m_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                     const Box<ITV>& x, const Box<ITV>& y,
+16535:                     Rounding_Dir dir,
+16535:                     Temp& tmp0, Temp& tmp1, Temp& tmp2);
+16535: 
+16535: }
+16535: # 298 "../../src/Box_defs.hh"
+16535: template <typename ITV>
+16535: class Parma_Polyhedra_Library::Box {
+16535: public:
+16535: 
+16535:   typedef ITV interval_type;
+16535: 
+16535: 
+16535:   static dimension_type max_space_dimension();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static bool can_recycle_constraint_systems();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static bool can_recycle_congruence_systems();
+16535: # 328 "../../src/Box_defs.hh"
+16535:   explicit Box(dimension_type num_dimensions = 0,
+16535:                Degenerate_Element kind = UNIVERSE);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Box(const Box& y,
+16535:       Complexity_Class complexity = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename Other_ITV>
+16535:   explicit Box(const Box<Other_ITV>& y,
+16535:                Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 356 "../../src/Box_defs.hh"
+16535:   explicit Box(const Constraint_System& cs);
+16535: # 372 "../../src/Box_defs.hh"
+16535:   Box(const Constraint_System& cs, Recycle_Input dummy);
+16535: # 382 "../../src/Box_defs.hh"
+16535:   explicit Box(const Generator_System& gs);
+16535: # 399 "../../src/Box_defs.hh"
+16535:   Box(const Generator_System& gs, Recycle_Input dummy);
+16535: # 411 "../../src/Box_defs.hh"
+16535:   explicit Box(const Congruence_System& cgs);
+16535: # 427 "../../src/Box_defs.hh"
+16535:   Box(const Congruence_System& cgs, Recycle_Input dummy);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename T>
+16535:   explicit Box(const BD_Shape<T>& bds,
+16535:                Complexity_Class complexity = POLYNOMIAL_COMPLEXITY);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename T>
+16535:   explicit Box(const Octagonal_Shape<T>& oct,
+16535:                Complexity_Class complexity = POLYNOMIAL_COMPLEXITY);
+16535: # 454 "../../src/Box_defs.hh"
+16535:   explicit Box(const Polyhedron& ph,
+16535:                Complexity_Class complexity = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   explicit Box(const Grid& gr,
+16535:                Complexity_Class complexity = POLYNOMIAL_COMPLEXITY);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename D1, typename D2, typename R>
+16535:   explicit Box(const Partially_Reduced_Product<D1, D2, R>& dp,
+16535:                Complexity_Class complexity = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Box& operator=(const Box& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void m_swap(Box& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type affine_dimension() const;
+16535: 
+16535: 
+16535:   bool is_empty() const;
+16535: 
+16535: 
+16535:   bool is_universe() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_topologically_closed() const;
+16535: 
+16535: 
+16535:   bool is_discrete() const;
+16535: 
+16535: 
+16535:   bool is_bounded() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool contains_integer_point() const;
+16535: # 532 "../../src/Box_defs.hh"
+16535:   bool constrains(Variable var) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Poly_Con_Relation relation_with(const Constraint& c) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Poly_Con_Relation relation_with(const Congruence& cg) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Poly_Gen_Relation relation_with(const Generator& g) const;
+16535: # 562 "../../src/Box_defs.hh"
+16535:   bool bounds_from_above(const Linear_Expression& expr) const;
+16535: # 571 "../../src/Box_defs.hh"
+16535:   bool bounds_from_below(const Linear_Expression& expr) const;
+16535: # 597 "../../src/Box_defs.hh"
+16535:   bool maximize(const Linear_Expression& expr,
+16535:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum) const;
+16535: # 628 "../../src/Box_defs.hh"
+16535:   bool maximize(const Linear_Expression& expr,
+16535:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum,
+16535:                 Generator& g) const;
+16535: # 656 "../../src/Box_defs.hh"
+16535:   bool minimize(const Linear_Expression& expr,
+16535:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum) const;
+16535: # 687 "../../src/Box_defs.hh"
+16535:   bool minimize(const Linear_Expression& expr,
+16535:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum,
+16535:                 Generator& g) const;
+16535: # 719 "../../src/Box_defs.hh"
+16535:   bool frequency(const Linear_Expression& expr,
+16535:                  Coefficient& freq_n, Coefficient& freq_d,
+16535:                  Coefficient& val_n, Coefficient& val_d) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool contains(const Box& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool strictly_contains(const Box& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_disjoint_from(const Box& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: # 769 "../../src/Box_defs.hh"
+16535:   void add_constraint(const Constraint& c);
+16535: # 783 "../../src/Box_defs.hh"
+16535:   void add_constraints(const Constraint_System& cs);
+16535: # 801 "../../src/Box_defs.hh"
+16535:   void add_recycled_constraints(Constraint_System& cs);
+16535: # 813 "../../src/Box_defs.hh"
+16535:   void add_congruence(const Congruence& cg);
+16535: # 826 "../../src/Box_defs.hh"
+16535:   void add_congruences(const Congruence_System& cgs);
+16535: # 844 "../../src/Box_defs.hh"
+16535:   void add_recycled_congruences(Congruence_System& cgs);
+16535: # 855 "../../src/Box_defs.hh"
+16535:   void refine_with_constraint(const Constraint& c);
+16535: # 876 "../../src/Box_defs.hh"
+16535:   void refine_with_constraints(const Constraint_System& cs);
+16535: # 887 "../../src/Box_defs.hh"
+16535:   void refine_with_congruence(const Congruence& cg);
+16535: # 898 "../../src/Box_defs.hh"
+16535:   void refine_with_congruences(const Congruence_System& cgs);
+16535: # 909 "../../src/Box_defs.hh"
+16535:   void propagate_constraint(const Constraint& c);
+16535: # 928 "../../src/Box_defs.hh"
+16535:   void propagate_constraints(const Constraint_System& cs,
+16535:                              dimension_type max_iterations = 0);
+16535: # 941 "../../src/Box_defs.hh"
+16535:   void unconstrain(Variable var);
+16535: # 955 "../../src/Box_defs.hh"
+16535:   void unconstrain(const Variables_Set& vars);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void intersection_assign(const Box& y);
+16535: # 971 "../../src/Box_defs.hh"
+16535:   void upper_bound_assign(const Box& y);
+16535: # 981 "../../src/Box_defs.hh"
+16535:   bool upper_bound_assign_if_exact(const Box& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void difference_assign(const Box& y);
+16535: # 999 "../../src/Box_defs.hh"
+16535:   bool simplify_using_context_assign(const Box& y);
+16535: # 1022 "../../src/Box_defs.hh"
+16535:   void affine_image(Variable var,
+16535:                     const Linear_Expression& expr,
+16535:                     Coefficient_traits::const_reference denominator
+16535:                       = Coefficient_one());
+16535: # 1048 "../../src/Box_defs.hh"
+16535:   void affine_form_image(Variable var,
+16535:                          const Linear_Form<ITV>& lf);
+16535: # 1071 "../../src/Box_defs.hh"
+16535:   void affine_preimage(Variable var,
+16535:                        const Linear_Expression& expr,
+16535:                        Coefficient_traits::const_reference denominator
+16535:                          = Coefficient_one());
+16535: # 1100 "../../src/Box_defs.hh"
+16535:   void generalized_affine_image(Variable var,
+16535:                                 Relation_Symbol relsym,
+16535:                                 const Linear_Expression& expr,
+16535:                                 Coefficient_traits::const_reference denominator
+16535:                                   = Coefficient_one());
+16535: # 1130 "../../src/Box_defs.hh"
+16535:   void
+16535:   generalized_affine_preimage(Variable var,
+16535:                               Relation_Symbol relsym,
+16535:                               const Linear_Expression& expr,
+16535:                               Coefficient_traits::const_reference denominator
+16535:                               = Coefficient_one());
+16535: # 1155 "../../src/Box_defs.hh"
+16535:   void generalized_affine_image(const Linear_Expression& lhs,
+16535:                                 Relation_Symbol relsym,
+16535:                                 const Linear_Expression& rhs);
+16535: # 1177 "../../src/Box_defs.hh"
+16535:   void generalized_affine_preimage(const Linear_Expression& lhs,
+16535:                                    Relation_Symbol relsym,
+16535:                                    const Linear_Expression& rhs);
+16535: # 1206 "../../src/Box_defs.hh"
+16535:   void bounded_affine_image(Variable var,
+16535:                             const Linear_Expression& lb_expr,
+16535:                             const Linear_Expression& ub_expr,
+16535:                             Coefficient_traits::const_reference denominator
+16535:                             = Coefficient_one());
+16535: # 1237 "../../src/Box_defs.hh"
+16535:   void bounded_affine_preimage(Variable var,
+16535:                                const Linear_Expression& lb_expr,
+16535:                                const Linear_Expression& ub_expr,
+16535:                                Coefficient_traits::const_reference denominator
+16535:                                = Coefficient_one());
+16535: # 1250 "../../src/Box_defs.hh"
+16535:   void time_elapse_assign(const Box& y);
+16535: 
+16535: 
+16535:   void topological_closure_assign();
+16535: # 1295 "../../src/Box_defs.hh"
+16535:   void wrap_assign(const Variables_Set& vars,
+16535:                    Bounded_Integer_Type_Width w,
+16535:                    Bounded_Integer_Type_Representation r,
+16535:                    Bounded_Integer_Type_Overflow o,
+16535:                    const Constraint_System* cs_p = 0,
+16535:                    unsigned complexity_threshold = 16,
+16535:                    bool wrap_individually = true);
+16535: # 1314 "../../src/Box_defs.hh"
+16535:   void drop_some_non_integer_points(Complexity_Class complexity
+16535:                                     = ANY_COMPLEXITY);
+16535: # 1332 "../../src/Box_defs.hh"
+16535:   void drop_some_non_integer_points(const Variables_Set& vars,
+16535:                                     Complexity_Class complexity
+16535:                                     = ANY_COMPLEXITY);
+16535: # 1351 "../../src/Box_defs.hh"
+16535:   template <typename T>
+16535:   typename Enable_If<Is_Same<T, Box>::value
+16535:                      && Is_Same_Or_Derived<Interval_Base, ITV>::value,
+16535:                      void>::type
+16535:   CC76_widening_assign(const T& y, unsigned* tp = 0);
+16535: # 1373 "../../src/Box_defs.hh"
+16535:   template <typename T, typename Iterator>
+16535:   typename Enable_If<Is_Same<T, Box>::value
+16535:                      && Is_Same_Or_Derived<Interval_Base, ITV>::value,
+16535:                      void>::type
+16535:   CC76_widening_assign(const T& y,
+16535:                        Iterator first, Iterator last);
+16535: 
+16535: 
+16535:   void widening_assign(const Box& y, unsigned* tp = 0);
+16535: # 1403 "../../src/Box_defs.hh"
+16535:   void limited_CC76_extrapolation_assign(const Box& y,
+16535:                                          const Constraint_System& cs,
+16535:                                          unsigned* tp = 0);
+16535: # 1426 "../../src/Box_defs.hh"
+16535:   template <typename T>
+16535:   typename Enable_If<Is_Same<T, Box>::value
+16535:                      && Is_Same_Or_Derived<Interval_Base, ITV>::value,
+16535:                      void>::type
+16535:   CC76_narrowing_assign(const T& y);
+16535: # 1455 "../../src/Box_defs.hh"
+16535:   void add_space_dimensions_and_embed(dimension_type m);
+16535: # 1478 "../../src/Box_defs.hh"
+16535:   void add_space_dimensions_and_project(dimension_type m);
+16535: # 1503 "../../src/Box_defs.hh"
+16535:   void concatenate_assign(const Box& y);
+16535: # 1514 "../../src/Box_defs.hh"
+16535:   void remove_space_dimensions(const Variables_Set& vars);
+16535: # 1524 "../../src/Box_defs.hh"
+16535:   void remove_higher_space_dimensions(dimension_type new_dimension);
+16535: # 1563 "../../src/Box_defs.hh"
+16535:   template <typename Partial_Function>
+16535:   void map_space_dimensions(const Partial_Function& pfunc);
+16535: # 1587 "../../src/Box_defs.hh"
+16535:   void expand_space_dimension(Variable var, dimension_type m);
+16535: # 1612 "../../src/Box_defs.hh"
+16535:   void fold_space_dimensions(const Variables_Set& vars, Variable dest);
+16535: # 1622 "../../src/Box_defs.hh"
+16535:   const ITV& get_interval(Variable var) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void set_interval(Variable var, const ITV& i);
+16535: # 1663 "../../src/Box_defs.hh"
+16535:   bool has_lower_bound(Variable var,
+16535:                        Coefficient& n, Coefficient& d, bool& closed) const;
+16535: # 1697 "../../src/Box_defs.hh"
+16535:   bool has_upper_bound(Variable var,
+16535:                        Coefficient& n, Coefficient& d, bool& closed) const;
+16535: 
+16535: 
+16535:   Constraint_System constraints() const;
+16535: 
+16535: 
+16535:   Constraint_System minimized_constraints() const;
+16535: 
+16535: 
+16535:   Congruence_System congruences() const;
+16535: 
+16535: 
+16535:   Congruence_System minimized_congruences() const;
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   int32_t hash_code() const;
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: # 1735 "../../src/Box_defs.hh"
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: private:
+16535:   template <typename Other_ITV>
+16535:   friend class Parma_Polyhedra_Library::Box;
+16535: 
+16535:   friend bool
+16535:   operator==<ITV>(const Box<ITV>& x, const Box<ITV>& y);
+16535: 
+16535:   friend std::ostream&
+16535:   Parma_Polyhedra_Library
+16535:   ::IO_Operators::operator<<<>(std::ostream& s, const Box<ITV>& box);
+16535: 
+16535:   template <typename Specialization, typename Temp, typename To, typename I>
+16535:   friend bool Parma_Polyhedra_Library
+16535:   ::l_m_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                         const Box<I>& x, const Box<I>& y,
+16535:                         const Rounding_Dir dir,
+16535:                         Temp& tmp0, Temp& tmp1, Temp& tmp2);
+16535: 
+16535: 
+16535:   typedef std::vector<ITV> Sequence;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef ITV Tmp_Interval_Type;
+16535: 
+16535: 
+16535:   Sequence seq;
+16535: 
+16535: 
+16535: # 1 "../../src/Box_Status_idefs.hh" 1
+16535: # 43 "../../src/Box_Status_idefs.hh"
+16535: class Status;
+16535: 
+16535: class Status {
+16535: public:
+16535: 
+16535:   Status();
+16535: 
+16535: 
+16535:   Status(const Status& y);
+16535: 
+16535: 
+16535:   template <typename Other_ITV>
+16535:   Status(const typename Box<Other_ITV>::Status& y);
+16535: 
+16535: 
+16535: 
+16535:   bool test_empty_up_to_date() const;
+16535:   void reset_empty_up_to_date();
+16535:   void set_empty_up_to_date();
+16535: 
+16535:   bool test_empty() const;
+16535:   void reset_empty();
+16535:   void set_empty();
+16535: 
+16535:   bool test_universe() const;
+16535:   void reset_universe();
+16535:   void set_universe();
+16535: 
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: private:
+16535: 
+16535:   typedef unsigned int flags_t;
+16535: 
+16535: 
+16535: 
+16535:   static const flags_t NONE = 0U;
+16535:   static const flags_t EMPTY_UP_TO_DATE = 1U << 0;
+16535:   static const flags_t EMPTY = 1U << 1;
+16535:   static const flags_t UNIVERSE = 1U << 2;
+16535: 
+16535: 
+16535: 
+16535:   flags_t flags;
+16535: 
+16535: 
+16535:   Status(flags_t mask);
+16535: 
+16535: 
+16535:   bool test_all(flags_t mask) const;
+16535: 
+16535: 
+16535:   bool test_any(flags_t mask) const;
+16535: 
+16535: 
+16535:   void set(flags_t mask);
+16535: 
+16535: 
+16535:   void reset(flags_t mask);
+16535: };
+16535: # 1769 "../../src/Box_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535:   Status status;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool marked_empty() const;
+16535: 
+16535: public:
+16535: 
+16535:   void set_empty();
+16535: 
+16535: private:
+16535: 
+16535:   void set_nonempty();
+16535: 
+16535: 
+16535:   void set_empty_up_to_date();
+16535: 
+16535: 
+16535:   void reset_empty_up_to_date();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool check_empty() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const ITV& operator[](dimension_type k) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static I_Result
+16535:   refine_interval_no_check(ITV& itv,
+16535:                            Constraint::Type type,
+16535:                            Coefficient_traits::const_reference numer,
+16535:                            Coefficient_traits::const_reference denom);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void
+16535:   add_interval_constraint_no_check(dimension_type var_id,
+16535:                                    Constraint::Type type,
+16535:                                    Coefficient_traits::const_reference numer,
+16535:                                    Coefficient_traits::const_reference denom);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void add_constraint_no_check(const Constraint& c);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void add_constraints_no_check(const Constraint_System& cs);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void add_congruence_no_check(const Congruence& cg);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void add_congruences_no_check(const Congruence_System& cgs);
+16535: # 1856 "../../src/Box_defs.hh"
+16535:   void refine_no_check(const Constraint& c);
+16535: # 1870 "../../src/Box_defs.hh"
+16535:   void refine_no_check(const Constraint_System& cs);
+16535: # 1883 "../../src/Box_defs.hh"
+16535:   void refine_no_check(const Congruence& cg);
+16535: # 1896 "../../src/Box_defs.hh"
+16535:   void refine_no_check(const Congruence_System& cgs);
+16535: # 2058 "../../src/Box_defs.hh"
+16535:   void propagate_constraint_no_check(const Constraint& c);
+16535: # 2078 "../../src/Box_defs.hh"
+16535:   void propagate_constraints_no_check(const Constraint_System& cs,
+16535:                                       dimension_type max_iterations);
+16535: # 2098 "../../src/Box_defs.hh"
+16535:   bool bounds(const Linear_Expression& expr, bool from_above) const;
+16535: # 2130 "../../src/Box_defs.hh"
+16535:   bool max_min(const Linear_Expression& expr,
+16535:                bool maximize,
+16535:                Coefficient& ext_n, Coefficient& ext_d, bool& included,
+16535:                Generator& g) const;
+16535: # 2160 "../../src/Box_defs.hh"
+16535:   bool max_min(const Linear_Expression& expr,
+16535:                bool maximize,
+16535:                Coefficient& ext_n, Coefficient& ext_d, bool& included) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void get_limiting_box(const Constraint_System& cs,
+16535:                         Box& limiting_box) const;
+16535: 
+16535: 
+16535: 
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const Box& y) const;
+16535: 
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     dimension_type required_dim) const;
+16535: 
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const Constraint& c) const;
+16535: 
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const Congruence& cg) const;
+16535: 
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const Constraint_System& cs) const;
+16535: 
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const Congruence_System& cgs) const;
+16535: 
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const Generator& g) const;
+16535: 
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* le_name,
+16535:                                     const Linear_Expression& le) const;
+16535: 
+16535:   template <typename C>
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* lf_name,
+16535:                                     const Linear_Form<C>& lf) const;
+16535: 
+16535:   static void throw_constraint_incompatible(const char* method);
+16535: 
+16535:   static void throw_expression_too_complex(const char* method,
+16535:                                            const Linear_Expression& le);
+16535: 
+16535:   static void throw_invalid_argument(const char* method, const char* reason);
+16535: 
+16535: };
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: # 2237 "../../src/Box_defs.hh"
+16535: template <typename ITV>
+16535: Poly_Con_Relation
+16535: interval_relation(const ITV& i,
+16535:                   const Constraint::Type constraint_type,
+16535:                   Coefficient_traits::const_reference numer,
+16535:                   Coefficient_traits::const_reference denom
+16535:                   = Coefficient_one());
+16535: 
+16535: class Box_Helpers {
+16535: public:
+16535: # 2271 "../../src/Box_defs.hh"
+16535:   static bool extract_interval_constraint(const Constraint& c,
+16535:                                           dimension_type& c_num_vars,
+16535:                                           dimension_type& c_only_var);
+16535: 
+16535: 
+16535: 
+16535:   static bool extract_interval_congruence(const Congruence& cg,
+16535:                                           dimension_type& cg_num_vars,
+16535:                                           dimension_type& cg_only_var);
+16535: };
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Box_Status_inlines.hh" 1
+16535: # 29 "../../src/Box_Status_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename ITV>
+16535: inline
+16535: Box<ITV>::Status::Status(flags_t mask)
+16535:   : flags(mask) {
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline
+16535: Box<ITV>::Status::Status(const Status& y)
+16535:   : flags(y.flags) {
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: template <typename Other_ITV>
+16535: inline
+16535: Box<ITV>::Status::Status(const typename Box<Other_ITV>::Status& y)
+16535:   : flags(y.flags) {
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline
+16535: Box<ITV>::Status::Status()
+16535:   : flags(NONE) {
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline bool
+16535: Box<ITV>::Status::test_all(flags_t mask) const {
+16535:   return (flags & mask) == mask;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline bool
+16535: Box<ITV>::Status::test_any(flags_t mask) const {
+16535:   return (flags & mask) != 0;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::Status::set(flags_t mask) {
+16535:   flags |= mask;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::Status::reset(flags_t mask) {
+16535:   flags &= ~mask;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline bool
+16535: Box<ITV>::Status::test_empty_up_to_date() const {
+16535:   return test_any(EMPTY_UP_TO_DATE);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::Status::reset_empty_up_to_date() {
+16535:   reset(EMPTY_UP_TO_DATE);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::Status::set_empty_up_to_date() {
+16535:   set(EMPTY_UP_TO_DATE);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline bool
+16535: Box<ITV>::Status::test_empty() const {
+16535:   return test_any(EMPTY);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::Status::reset_empty() {
+16535:   reset(EMPTY);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::Status::set_empty() {
+16535:   set(EMPTY);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline bool
+16535: Box<ITV>::Status::test_universe() const {
+16535:   return test_any(UNIVERSE);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::Status::reset_universe() {
+16535:   reset(UNIVERSE);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::Status::set_universe() {
+16535:   set(UNIVERSE);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: bool
+16535: Box<ITV>::Status::OK() const {
+16535:   if (test_empty_up_to_date()
+16535:       && test_empty()
+16535:       && test_universe()) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535:   return true;
+16535: }
+16535: 
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: namespace Boxes {
+16535: 
+16535: 
+16535: extern const char* empty_up_to_date;
+16535: extern const char* empty;
+16535: extern const char* universe;
+16535: const char yes = '+';
+16535: const char no = '-';
+16535: const char separator = ' ';
+16535: # 172 "../../src/Box_Status_inlines.hh"
+16535: inline bool
+16535: get_field(std::istream& s, const char* keyword, bool& positive) {
+16535:   std::string str;
+16535:   if (!(s >> str)
+16535:       || (str[0] != yes && str[0] != no)
+16535:       || str.substr(1) != keyword) {
+16535:     return false;
+16535:   }
+16535:   positive = (str[0] == yes);
+16535:   return true;
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::Status::ascii_dump(std::ostream& s) const {
+16535:   using namespace Implementation::Boxes;
+16535:   s << (test_empty_up_to_date() ? yes : no) << empty_up_to_date << separator
+16535:     << (test_empty() ? yes : no) << empty << separator
+16535:     << (test_universe() ? yes : no) << universe << separator;
+16535: }
+16535: 
+16535: template <typename ITV> void Box<ITV>::Status::ascii_dump() const { ascii_dump(std::cerr); } template <typename ITV> void Box<ITV>::Status::print() const { std::cerr << "No user level output operator defined " << "for " "Box<ITV>::Status" << "." << std::endl; }
+16535: 
+16535: template <typename ITV>
+16535: bool
+16535: Box<ITV>::Status::ascii_load(std::istream& s) {
+16535:   using namespace Implementation::Boxes;
+16535:   bool positive = Suppress_Uninitialized_Warnings_Type<bool>::synonym();
+16535: 
+16535:   if (!get_field(s, Implementation::Boxes::empty_up_to_date, positive)) {
+16535:     return false;
+16535:   }
+16535:   if (positive) {
+16535:     set_empty_up_to_date();
+16535:   }
+16535: 
+16535:   if (!get_field(s, Implementation::Boxes::empty, positive)) {
+16535:     return false;
+16535:   }
+16535:   if (positive) {
+16535:     set_empty();
+16535:   }
+16535:   if (!get_field(s, universe, positive)) {
+16535:     return false;
+16535:   }
+16535:   if (positive) {
+16535:     set_universe();
+16535:   }
+16535:   else {
+16535:     reset_universe();
+16535:   }
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   return true;
+16535: }
+16535: 
+16535: }
+16535: # 2285 "../../src/Box_defs.hh" 2
+16535: # 1 "../../src/Box_inlines.hh" 1
+16535: # 28 "../../src/Box_inlines.hh"
+16535: # 1 "../../src/Constraint_System_defs.hh" 1
+16535: # 29 "../../src/Constraint_System_defs.hh"
+16535: # 1 "../../src/Linear_System_defs.hh" 1
+16535: # 29 "../../src/Linear_System_defs.hh"
+16535: # 1 "../../src/Swapping_Vector_defs.hh" 1
+16535: # 27 "../../src/Swapping_Vector_defs.hh"
+16535: # 1 "../../src/Swapping_Vector_types.hh" 1
+16535: # 16 "../../src/Swapping_Vector_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: class Swapping_Vector;
+16535: 
+16535: }
+16535: # 28 "../../src/Swapping_Vector_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: class Swapping_Vector {
+16535: 
+16535: public:
+16535:   typedef typename std::vector<T>::const_iterator const_iterator;
+16535:   typedef typename std::vector<T>::iterator iterator;
+16535:   typedef typename std::vector<T>::size_type size_type;
+16535: 
+16535:   Swapping_Vector();
+16535:   explicit Swapping_Vector(dimension_type new_size);
+16535:   Swapping_Vector(dimension_type new_size, const T& x);
+16535: 
+16535:   void clear();
+16535:   void reserve(dimension_type new_capacity);
+16535:   void resize(dimension_type new_size);
+16535:   void resize(dimension_type new_size, const T& x);
+16535: 
+16535:   dimension_type size() const;
+16535:   dimension_type capacity() const;
+16535:   bool empty() const;
+16535: 
+16535:   void m_swap(Swapping_Vector& v);
+16535: 
+16535:   T& operator[](dimension_type i);
+16535:   const T& operator[](dimension_type i) const;
+16535: 
+16535:   T& back();
+16535:   const T& back() const;
+16535: 
+16535:   void push_back(const T& x);
+16535:   void pop_back();
+16535: 
+16535:   iterator begin();
+16535:   iterator end();
+16535:   const_iterator begin() const;
+16535:   const_iterator end() const;
+16535: 
+16535:   iterator erase(iterator itr);
+16535:   iterator erase(iterator first, iterator last);
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535:   dimension_type max_num_rows();
+16535: 
+16535: private:
+16535:   std::vector<T> impl;
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: void swap(Swapping_Vector<T>& x, Swapping_Vector<T>& y);
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Swapping_Vector_inlines.hh" 1
+16535: # 29 "../../src/Swapping_Vector_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: inline
+16535: Swapping_Vector<T>::Swapping_Vector()
+16535:   : impl() {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: Swapping_Vector<T>::Swapping_Vector(dimension_type i)
+16535:   : impl() {
+16535: 
+16535: 
+16535:   resize(i);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: Swapping_Vector<T>::Swapping_Vector(dimension_type new_size, const T& x)
+16535:   : impl() {
+16535:   resize(new_size, x);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Swapping_Vector<T>::clear() {
+16535:   impl.clear();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Swapping_Vector<T>::reserve(dimension_type new_capacity) {
+16535:   if (impl.capacity() < new_capacity) {
+16535: 
+16535:     std::vector<T> new_impl;
+16535: 
+16535:     new_impl.reserve(compute_capacity(new_capacity, max_num_rows()));
+16535:     new_impl.resize(impl.size());
+16535: 
+16535:     using std::swap;
+16535: 
+16535: 
+16535:     for (dimension_type i = impl.size(); i-- > 0; ) {
+16535:       swap(new_impl[i], impl[i]);
+16535:     }
+16535: 
+16535: 
+16535:     swap(impl, new_impl);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Swapping_Vector<T>::resize(dimension_type new_size) {
+16535:   reserve(new_size);
+16535:   impl.resize(new_size);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Swapping_Vector<T>::resize(dimension_type new_size, const T& x) {
+16535:   reserve(new_size);
+16535:   impl.resize(new_size, x);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: Swapping_Vector<T>::size() const {
+16535:   return impl.size();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: Swapping_Vector<T>::capacity() const {
+16535:   return impl.capacity();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Swapping_Vector<T>::empty() const {
+16535:   return impl.empty();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Swapping_Vector<T>::m_swap(Swapping_Vector& v) {
+16535:   using std::swap;
+16535:   swap(impl, v.impl);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline T&
+16535: Swapping_Vector<T>::operator[](dimension_type i) {
+16535:   return impl[i];
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline const T&
+16535: Swapping_Vector<T>::operator[](dimension_type i) const {
+16535:   return impl[i];
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline T&
+16535: Swapping_Vector<T>::back() {
+16535:   return impl.back();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline const T&
+16535: Swapping_Vector<T>::back() const {
+16535:   return impl.back();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Swapping_Vector<T>::push_back(const T& x) {
+16535:   reserve(size() + 1);
+16535:   impl.push_back(x);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Swapping_Vector<T>::pop_back() {
+16535:   impl.pop_back();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline memory_size_type
+16535: Swapping_Vector<T>::external_memory_in_bytes() const {
+16535: 
+16535:   memory_size_type n = impl.capacity() * sizeof(T);
+16535:   for (const_iterator i = begin(), i_end = end(); i != i_end; ++i) {
+16535:     n += i->external_memory_in_bytes();
+16535:   }
+16535:   return n;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Swapping_Vector<T>::iterator
+16535: Swapping_Vector<T>::begin() {
+16535:   return impl.begin();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Swapping_Vector<T>::iterator
+16535: Swapping_Vector<T>::end() {
+16535:   return impl.end();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Swapping_Vector<T>::const_iterator
+16535: Swapping_Vector<T>::begin() const {
+16535:   return impl.begin();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Swapping_Vector<T>::const_iterator
+16535: Swapping_Vector<T>::end() const {
+16535:   return impl.end();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Swapping_Vector<T>::iterator
+16535: Swapping_Vector<T>::erase(iterator itr) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   const dimension_type old_i = itr - begin();
+16535:   dimension_type i = old_i;
+16535:   ++i;
+16535:   while (i != size()) {
+16535:     swap(impl[i-1], impl[i]);
+16535:   }
+16535:   impl.pop_back();
+16535:   return begin() + old_i;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Swapping_Vector<T>::iterator
+16535: Swapping_Vector<T>::erase(iterator first, iterator last) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   const iterator old_first = first;
+16535:   typedef typename std::iterator_traits<iterator>::difference_type diff_t;
+16535:   const diff_t k = last - first;
+16535:   const dimension_type n = static_cast<dimension_type>(end() - last);
+16535:   using std::swap;
+16535:   for (dimension_type i = 0; i < n; ++i, ++first) {
+16535:     swap(*first, *(first + k));
+16535:   }
+16535:   impl.erase(end() - k, end());
+16535:   return old_first;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: Swapping_Vector<T>::max_num_rows() {
+16535:   return impl.max_size();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: swap(Swapping_Vector<T>& vec1, Swapping_Vector<T>& vec2) {
+16535:   vec1.m_swap(vec2);
+16535: }
+16535: 
+16535: }
+16535: # 95 "../../src/Swapping_Vector_defs.hh" 2
+16535: # 30 "../../src/Linear_System_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "../../src/Bit_Row_types.hh" 1
+16535: # 16 "../../src/Bit_Row_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Bit_Row;
+16535: 
+16535: }
+16535: # 36 "../../src/Linear_System_defs.hh" 2
+16535: # 1 "../../src/Bit_Matrix_types.hh" 1
+16535: # 16 "../../src/Bit_Matrix_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Bit_Matrix;
+16535: 
+16535: }
+16535: # 37 "../../src/Linear_System_defs.hh" 2
+16535: # 60 "../../src/Linear_System_defs.hh"
+16535: template <typename Row>
+16535: class Parma_Polyhedra_Library::Linear_System {
+16535: public:
+16535: 
+16535: 
+16535:   typedef typename Swapping_Vector<Row>::const_iterator iterator;
+16535:   typedef typename Swapping_Vector<Row>::const_iterator const_iterator;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Linear_System(Topology topol, Representation r);
+16535: # 88 "../../src/Linear_System_defs.hh"
+16535:   Linear_System(Topology topol, dimension_type space_dim, Representation r);
+16535: # 98 "../../src/Linear_System_defs.hh"
+16535:   struct With_Pending {
+16535:   };
+16535: 
+16535: 
+16535:   Linear_System(const Linear_System& y);
+16535: 
+16535: 
+16535: 
+16535:   Linear_System(const Linear_System& y, Representation r);
+16535: 
+16535: 
+16535:   Linear_System(const Linear_System& y, With_Pending);
+16535: 
+16535: 
+16535:   Linear_System(const Linear_System& y, Representation r, With_Pending);
+16535: 
+16535: 
+16535:   Linear_System& operator=(const Linear_System& y);
+16535: 
+16535: 
+16535:   void assign_with_pending(const Linear_System& y);
+16535: 
+16535: 
+16535:   void m_swap(Linear_System& y);
+16535: 
+16535: 
+16535:   Representation representation() const;
+16535: 
+16535: 
+16535:   void set_representation(Representation r);
+16535: 
+16535: 
+16535:   static dimension_type max_space_dimension();
+16535: # 141 "../../src/Linear_System_defs.hh"
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535:   void set_space_dimension(dimension_type space_dim);
+16535: 
+16535: 
+16535:   void remove_trailing_rows(dimension_type n);
+16535: # 157 "../../src/Linear_System_defs.hh"
+16535:   void remove_row(dimension_type i, bool keep_sorted = false);
+16535: # 167 "../../src/Linear_System_defs.hh"
+16535:   void remove_rows(dimension_type first, dimension_type last,
+16535:                   bool keep_sorted = false);
+16535: # 177 "../../src/Linear_System_defs.hh"
+16535:   void remove_rows(const std::vector<dimension_type>& indexes);
+16535: # 186 "../../src/Linear_System_defs.hh"
+16535:   void remove_space_dimensions(const Variables_Set& vars);
+16535: 
+16535: 
+16535: 
+16535:   void shift_space_dimensions(Variable v, dimension_type n);
+16535: # 205 "../../src/Linear_System_defs.hh"
+16535:   void permute_space_dimensions(const std::vector<Variable>& cycle);
+16535: 
+16535: 
+16535:   void swap_space_dimensions(Variable v1, Variable v2);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const Row& operator[](dimension_type k) const;
+16535: 
+16535: 
+16535:   iterator begin();
+16535:   iterator end();
+16535:   const_iterator begin() const;
+16535:   const_iterator end() const;
+16535: 
+16535:   bool has_no_rows() const;
+16535:   dimension_type num_rows() const;
+16535: 
+16535: 
+16535:   void strong_normalize();
+16535: 
+16535: 
+16535:   void sign_normalize();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Topology topology() const;
+16535: 
+16535: 
+16535:   bool is_sorted() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_necessarily_closed() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type num_lines_or_equalities() const;
+16535: 
+16535: 
+16535:   dimension_type first_pending_row() const;
+16535: 
+16535: 
+16535:   dimension_type num_pending_rows() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool check_sorted() const;
+16535: 
+16535: 
+16535:   void set_topology(Topology t);
+16535: 
+16535: 
+16535:   void set_necessarily_closed();
+16535: 
+16535: 
+16535:   void set_not_necessarily_closed();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void mark_as_necessarily_closed();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void mark_as_not_necessarily_closed();
+16535: 
+16535: 
+16535:   void unset_pending_rows();
+16535: 
+16535: 
+16535:   void set_index_first_pending_row(dimension_type i);
+16535: 
+16535: 
+16535:   void set_sorted(bool b);
+16535: # 310 "../../src/Linear_System_defs.hh"
+16535:   void add_universe_rows_and_space_dimensions(dimension_type n);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void insert(const Row& r);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void insert_pending(const Row& r);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void insert(Row& r, Recycle_Input);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void insert_pending(Row& r, Recycle_Input);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void insert(const Linear_System& y);
+16535: 
+16535: 
+16535:   void insert_pending(const Linear_System& r);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void insert(Linear_System& r, Recycle_Input);
+16535: 
+16535: 
+16535: 
+16535:   void insert_pending(Linear_System& r, Recycle_Input);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void sort_rows();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void sort_rows(dimension_type first_row, dimension_type last_row);
+16535: # 375 "../../src/Linear_System_defs.hh"
+16535:   void merge_rows_assign(const Linear_System& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void sort_pending_and_remove_duplicates();
+16535: # 390 "../../src/Linear_System_defs.hh"
+16535:   void sort_and_remove_with_sat(Bit_Matrix& sat);
+16535: # 404 "../../src/Linear_System_defs.hh"
+16535:   dimension_type gauss(dimension_type n_lines_or_equalities);
+16535: # 416 "../../src/Linear_System_defs.hh"
+16535:   void back_substitute(dimension_type n_lines_or_equalities);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void simplify();
+16535: 
+16535: 
+16535:   void clear();
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: # 439 "../../src/Linear_System_defs.hh"
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Swapping_Vector<Row> rows;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535: private:
+16535: # 469 "../../src/Linear_System_defs.hh"
+16535:   void remove_row_no_ok(dimension_type i, bool keep_sorted = false);
+16535: # 478 "../../src/Linear_System_defs.hh"
+16535:   void insert_pending_no_ok(Row& r, Recycle_Input);
+16535: # 487 "../../src/Linear_System_defs.hh"
+16535:   void insert_no_ok(Row& r, Recycle_Input);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void set_space_dimension_no_ok(dimension_type space_dim);
+16535: # 506 "../../src/Linear_System_defs.hh"
+16535:   void swap_row_intervals(dimension_type first, dimension_type last,
+16535:                           dimension_type offset);
+16535: 
+16535: 
+16535: 
+16535:   dimension_type space_dimension_;
+16535: 
+16535: 
+16535: 
+16535:   Topology row_topology;
+16535: 
+16535: 
+16535:   dimension_type index_first_pending;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool sorted;
+16535: 
+16535:   Representation representation_;
+16535: 
+16535: 
+16535:   struct Row_Less_Than {
+16535:     bool operator()(const Row& x, const Row& y) const;
+16535:   };
+16535: 
+16535: 
+16535:   struct Unique_Compare {
+16535:     Unique_Compare(const Swapping_Vector<Row>& cont,
+16535:                    dimension_type base = 0);
+16535: 
+16535:     bool operator()(dimension_type i, dimension_type j) const;
+16535: 
+16535:     const Swapping_Vector<Row>& container;
+16535:     const dimension_type base_index;
+16535:   };
+16535: 
+16535:   friend class Polyhedron;
+16535:   friend class Generator_System;
+16535: };
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Row>
+16535: void swap(Parma_Polyhedra_Library::Linear_System<Row>& x,
+16535:           Parma_Polyhedra_Library::Linear_System<Row>& y);
+16535: 
+16535: }
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Row>
+16535: bool operator==(const Linear_System<Row>& x, const Linear_System<Row>& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Row>
+16535: bool operator!=(const Linear_System<Row>& x, const Linear_System<Row>& y);
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Linear_System_inlines.hh" 1
+16535: # 27 "../../src/Linear_System_inlines.hh"
+16535: # 1 "../../src/Bit_Row_defs.hh" 1
+16535: # 33 "../../src/Bit_Row_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: # 45 "../../src/Bit_Row_defs.hh"
+16535: void
+16535: iter_swap(std::vector<Bit_Row>::iterator x,
+16535:           std::vector<Bit_Row>::iterator y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: bool operator==(const Bit_Row& x, const Bit_Row& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: bool operator!=(const Bit_Row& x, const Bit_Row& y);
+16535: # 77 "../../src/Bit_Row_defs.hh"
+16535: int compare(const Bit_Row& x, const Bit_Row& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: bool subset_or_equal(const Bit_Row& x, const Bit_Row& y);
+16535: # 93 "../../src/Bit_Row_defs.hh"
+16535: bool subset_or_equal(const Bit_Row& x, const Bit_Row& y,
+16535:                      bool& strict_subset);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: bool strict_subset(const Bit_Row& x, const Bit_Row& y);
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: class Parma_Polyhedra_Library::Bit_Row {
+16535: public:
+16535: 
+16535:   Bit_Row();
+16535: 
+16535: 
+16535:   Bit_Row(const Bit_Row& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Bit_Row(const Bit_Row& y, const Bit_Row& z);
+16535: 
+16535: 
+16535:   ~Bit_Row();
+16535: 
+16535: 
+16535:   Bit_Row& operator=(const Bit_Row& y);
+16535: 
+16535: 
+16535:   void m_swap(Bit_Row& y);
+16535: 
+16535: 
+16535:   bool operator[](unsigned long k) const;
+16535: 
+16535: 
+16535:   void set(unsigned long k);
+16535: 
+16535: 
+16535:   void set_until(unsigned long k);
+16535: 
+16535: 
+16535:   void clear(unsigned long k);
+16535: 
+16535: 
+16535:   void clear_from(unsigned long k);
+16535: 
+16535: 
+16535:   void clear();
+16535: 
+16535: 
+16535:   void union_assign(const Bit_Row& x, const Bit_Row& y);
+16535: 
+16535: 
+16535:   void intersection_assign(const Bit_Row& x, const Bit_Row& y);
+16535: 
+16535: 
+16535:   void difference_assign(const Bit_Row& x, const Bit_Row& y);
+16535: 
+16535: 
+16535:   friend int compare(const Bit_Row& x, const Bit_Row& y);
+16535:   friend bool operator==(const Bit_Row& x, const Bit_Row& y);
+16535:   friend bool operator!=(const Bit_Row& x, const Bit_Row& y);
+16535:   friend bool subset_or_equal(const Bit_Row& x, const Bit_Row& y);
+16535:   friend bool subset_or_equal(const Bit_Row& x, const Bit_Row& y,
+16535:                               bool& strict_subset);
+16535:   friend bool strict_subset(const Bit_Row& x, const Bit_Row& y);
+16535: 
+16535: 
+16535:   unsigned long first() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   unsigned long next(unsigned long position) const;
+16535: 
+16535: 
+16535:   unsigned long last() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   unsigned long prev(unsigned long position) const;
+16535: 
+16535: 
+16535:   unsigned long count_ones() const;
+16535: 
+16535: 
+16535:   bool empty() const;
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535: private:
+16535: 
+16535:   mpz_t vec;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void union_helper(const Bit_Row& y, const Bit_Row& z);
+16535: };
+16535: 
+16535: # 1 "../../src/Bit_Row_inlines.hh" 1
+16535: # 40 "../../src/Bit_Row_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline
+16535: Bit_Row::Bit_Row() {
+16535:   
+16535: # 44 "../../src/Bit_Row_inlines.hh" 3 4
+16535:  __gmpz_init
+16535: # 44 "../../src/Bit_Row_inlines.hh"
+16535:          (vec);
+16535: }
+16535: 
+16535: inline
+16535: Bit_Row::Bit_Row(const Bit_Row& y) {
+16535:   
+16535: # 49 "../../src/Bit_Row_inlines.hh" 3 4
+16535:  __gmpz_init_set
+16535: # 49 "../../src/Bit_Row_inlines.hh"
+16535:              (vec, y.vec);
+16535: }
+16535: 
+16535: inline
+16535: Bit_Row::Bit_Row(const Bit_Row& y, const Bit_Row& z) {
+16535:   const mp_size_t y_size = y.vec->_mp_size;
+16535:   ((void) 0);
+16535:   const mp_size_t z_size = z.vec->_mp_size;
+16535:   ((void) 0);
+16535:   if (y_size < z_size) {
+16535:     ((void) 0)
+16535:                                                                         ;
+16535:     
+16535: # 61 "../../src/Bit_Row_inlines.hh" 3 4
+16535:    __gmpz_init2
+16535: # 61 "../../src/Bit_Row_inlines.hh"
+16535:             (vec, static_cast<unsigned long>(z_size) * ((8) * static_cast<std::size_t>(8)));
+16535:     union_helper(y, z);
+16535:   }
+16535:   else {
+16535:     ((void) 0)
+16535:                                                                         ;
+16535:     
+16535: # 67 "../../src/Bit_Row_inlines.hh" 3 4
+16535:    __gmpz_init2
+16535: # 67 "../../src/Bit_Row_inlines.hh"
+16535:             (vec, static_cast<unsigned long>(y_size) * ((8) * static_cast<std::size_t>(8)));
+16535:     union_helper(z, y);
+16535:   }
+16535: }
+16535: 
+16535: inline
+16535: Bit_Row::~Bit_Row() {
+16535:   
+16535: # 74 "../../src/Bit_Row_inlines.hh" 3 4
+16535:  __gmpz_clear
+16535: # 74 "../../src/Bit_Row_inlines.hh"
+16535:           (vec);
+16535: }
+16535: 
+16535: inline Bit_Row&
+16535: Bit_Row::operator=(const Bit_Row& y) {
+16535:   
+16535: # 79 "../../src/Bit_Row_inlines.hh" 3 4
+16535:  __gmpz_set
+16535: # 79 "../../src/Bit_Row_inlines.hh"
+16535:         (vec, y.vec);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline void
+16535: Bit_Row::set(const unsigned long k) {
+16535:   
+16535: # 85 "../../src/Bit_Row_inlines.hh" 3 4
+16535:  __gmpz_setbit
+16535: # 85 "../../src/Bit_Row_inlines.hh"
+16535:            (vec, k);
+16535: }
+16535: 
+16535: inline void
+16535: Bit_Row::clear(const unsigned long k) {
+16535:   
+16535: # 90 "../../src/Bit_Row_inlines.hh" 3 4
+16535:  __gmpz_clrbit
+16535: # 90 "../../src/Bit_Row_inlines.hh"
+16535:            (vec, k);
+16535: }
+16535: 
+16535: inline void
+16535: Bit_Row::clear_from(const unsigned long k) {
+16535:   
+16535: # 95 "../../src/Bit_Row_inlines.hh" 3 4
+16535:  __gmpz_tdiv_r_2exp
+16535: # 95 "../../src/Bit_Row_inlines.hh"
+16535:                 (vec, vec, k);
+16535: }
+16535: 
+16535: inline unsigned long
+16535: Bit_Row::count_ones() const {
+16535:   const mp_size_t x_size = vec->_mp_size;
+16535:   ((void) 0);
+16535:   return (x_size == 0) ? 0 : 
+16535: # 102 "../../src/Bit_Row_inlines.hh" 3 4
+16535:                             __gmpn_popcount
+16535: # 102 "../../src/Bit_Row_inlines.hh"
+16535:                                         (vec->_mp_d, x_size);
+16535: }
+16535: 
+16535: inline bool
+16535: Bit_Row::empty() const {
+16535:   return 
+16535: # 107 "../../src/Bit_Row_inlines.hh" 3 4
+16535:         ((
+16535: # 107 "../../src/Bit_Row_inlines.hh"
+16535:         vec
+16535: # 107 "../../src/Bit_Row_inlines.hh" 3 4
+16535:         )->_mp_size < 0 ? -1 : (
+16535: # 107 "../../src/Bit_Row_inlines.hh"
+16535:         vec
+16535: # 107 "../../src/Bit_Row_inlines.hh" 3 4
+16535:         )->_mp_size > 0) 
+16535: # 107 "../../src/Bit_Row_inlines.hh"
+16535:                      == 0;
+16535: }
+16535: 
+16535: inline void
+16535: Bit_Row::m_swap(Bit_Row& y) {
+16535:   
+16535: # 112 "../../src/Bit_Row_inlines.hh" 3 4
+16535:  __gmpz_swap
+16535: # 112 "../../src/Bit_Row_inlines.hh"
+16535:          (vec, y.vec);
+16535: }
+16535: 
+16535: inline void
+16535: Bit_Row::clear() {
+16535:   
+16535: # 117 "../../src/Bit_Row_inlines.hh" 3 4
+16535:  __gmpz_set_ui
+16535: # 117 "../../src/Bit_Row_inlines.hh"
+16535:            (vec, 0UL);
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Bit_Row::external_memory_in_bytes() const {
+16535:   return static_cast<memory_size_type>(vec[0]._mp_alloc) * 8;
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Bit_Row::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: inline void
+16535: Bit_Row::union_assign(const Bit_Row& x, const Bit_Row& y) {
+16535:   const mp_size_t x_size = x.vec->_mp_size;
+16535:   ((void) 0);
+16535:   const mp_size_t y_size = y.vec->_mp_size;
+16535:   ((void) 0);
+16535:   if (x_size < y_size) {
+16535:     ((void) 0)
+16535:                                                                         ;
+16535:     
+16535: # 139 "../../src/Bit_Row_inlines.hh" 3 4
+16535:    __gmpz_realloc2
+16535: # 139 "../../src/Bit_Row_inlines.hh"
+16535:                (vec, static_cast<unsigned long>(y_size) * ((8) * static_cast<std::size_t>(8)));
+16535:     union_helper(x, y);
+16535:   }
+16535:   else {
+16535:     ((void) 0)
+16535:                                                                         ;
+16535:     
+16535: # 145 "../../src/Bit_Row_inlines.hh" 3 4
+16535:    __gmpz_realloc2
+16535: # 145 "../../src/Bit_Row_inlines.hh"
+16535:                (vec, static_cast<unsigned long>(x_size) * ((8) * static_cast<std::size_t>(8)));
+16535:     union_helper(y, x);
+16535:   }
+16535: }
+16535: 
+16535: inline void
+16535: Bit_Row::intersection_assign(const Bit_Row& x, const Bit_Row& y) {
+16535:   
+16535: # 152 "../../src/Bit_Row_inlines.hh" 3 4
+16535:  __gmpz_and
+16535: # 152 "../../src/Bit_Row_inlines.hh"
+16535:         (vec, x.vec, y.vec);
+16535: }
+16535: 
+16535: inline void
+16535: Bit_Row::difference_assign(const Bit_Row& x, const Bit_Row& y) {
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpz_class> holder_complement_y; mpz_class& complement_y = holder_complement_y.item();
+16535:   
+16535: # 158 "../../src/Bit_Row_inlines.hh" 3 4
+16535:  __gmpz_com
+16535: # 158 "../../src/Bit_Row_inlines.hh"
+16535:         (complement_y.get_mpz_t(), y.vec);
+16535:   
+16535: # 159 "../../src/Bit_Row_inlines.hh" 3 4
+16535:  __gmpz_and
+16535: # 159 "../../src/Bit_Row_inlines.hh"
+16535:         (vec, x.vec, complement_y.get_mpz_t());
+16535: }
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: inline unsigned int
+16535: first_one(unsigned int u) {
+16535:   return ctz(u);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: inline unsigned int
+16535: first_one(unsigned long ul) {
+16535:   return ctz(ul);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: inline unsigned int
+16535: first_one(unsigned long long ull) {
+16535:   return ctz(ull);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: inline unsigned int
+16535: last_one(unsigned int u) {
+16535:   return static_cast<unsigned int>(((sizeof(u)) * static_cast<std::size_t>(8)))
+16535:     - 1U - clz(u);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: inline unsigned int
+16535: last_one(unsigned long ul) {
+16535:   return static_cast<unsigned int>(((sizeof(ul)) * static_cast<std::size_t>(8)))
+16535:     - 1U - clz(ul);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: inline unsigned int
+16535: last_one(unsigned long long ull) {
+16535:   return static_cast<unsigned int>(((sizeof(ull)) * static_cast<std::size_t>(8)))
+16535:     - 1U - clz(ull);
+16535: }
+16535: 
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: swap(Bit_Row& x, Bit_Row& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: iter_swap(std::vector<Bit_Row>::iterator x,
+16535:           std::vector<Bit_Row>::iterator y) {
+16535:   swap(*x, *y);
+16535: }
+16535: 
+16535: }
+16535: # 213 "../../src/Bit_Row_defs.hh" 2
+16535: # 28 "../../src/Linear_System_inlines.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Row>
+16535: inline memory_size_type
+16535: Linear_System<Row>::external_memory_in_bytes() const {
+16535:   return rows.external_memory_in_bytes();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline memory_size_type
+16535: Linear_System<Row>::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline bool
+16535: Linear_System<Row>::is_sorted() const {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   return sorted;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_System<Row>::set_sorted(const bool b) {
+16535:   sorted = b;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline
+16535: Linear_System<Row>::Linear_System(Topology topol, Representation r)
+16535:   : rows(),
+16535:     space_dimension_(0),
+16535:     row_topology(topol),
+16535:     index_first_pending(0),
+16535:     sorted(true),
+16535:     representation_(r) {
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline
+16535: Linear_System<Row>::Linear_System(Topology topol,
+16535:                                   dimension_type space_dim,
+16535:                                   Representation r)
+16535:   : rows(),
+16535:     space_dimension_(0),
+16535:     row_topology(topol),
+16535:     index_first_pending(0),
+16535:     sorted(true),
+16535:     representation_(r) {
+16535:   set_space_dimension(space_dim);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline dimension_type
+16535: Linear_System<Row>::first_pending_row() const {
+16535:   return index_first_pending;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline dimension_type
+16535: Linear_System<Row>::num_pending_rows() const {
+16535:   ((void) 0);
+16535:   return num_rows() - first_pending_row();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_System<Row>::unset_pending_rows() {
+16535:   index_first_pending = num_rows();
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_System<Row>::set_index_first_pending_row(const dimension_type i) {
+16535:   index_first_pending = i;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline
+16535: Linear_System<Row>::Linear_System(const Linear_System& y)
+16535:   : rows(y.rows),
+16535:     space_dimension_(y.space_dimension_),
+16535:     row_topology(y.row_topology),
+16535:     representation_(y.representation_) {
+16535: 
+16535:   sorted = (y.num_pending_rows() > 0) ? false : y.sorted;
+16535:   unset_pending_rows();
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline
+16535: Linear_System<Row>::Linear_System(const Linear_System& y, Representation r)
+16535:   : rows(),
+16535:     space_dimension_(y.space_dimension_),
+16535:     row_topology(y.row_topology),
+16535:     representation_(r) {
+16535:   rows.resize(y.num_rows());
+16535:   for (dimension_type i = 0; i < y.num_rows(); ++i) {
+16535: 
+16535:     Row row(y.rows[i], r);
+16535:     swap(rows[i], row);
+16535:   }
+16535: 
+16535:   sorted = (y.num_pending_rows() > 0) ? false : y.sorted;
+16535:   unset_pending_rows();
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline
+16535: Linear_System<Row>::Linear_System(const Linear_System& y, With_Pending)
+16535:   : rows(y.rows),
+16535:     space_dimension_(y.space_dimension_),
+16535:     row_topology(y.row_topology),
+16535:     index_first_pending(y.index_first_pending),
+16535:     sorted(y.sorted),
+16535:     representation_(y.representation_) {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline
+16535: Linear_System<Row>::Linear_System(const Linear_System& y, Representation r,
+16535:                                   With_Pending)
+16535:   : rows(),
+16535:     space_dimension_(y.space_dimension_),
+16535:     row_topology(y.row_topology),
+16535:     index_first_pending(y.index_first_pending),
+16535:     sorted(y.sorted),
+16535:     representation_(r) {
+16535:   rows.resize(y.num_rows());
+16535:   for (dimension_type i = 0; i < y.num_rows(); ++i) {
+16535: 
+16535:     Row row(y.rows[i], r);
+16535:     swap(rows[i], row);
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline Linear_System<Row>&
+16535: Linear_System<Row>::operator=(const Linear_System& y) {
+16535: 
+16535:   Linear_System<Row> tmp = y;
+16535:   swap(*this, tmp);
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_System<Row>::assign_with_pending(const Linear_System& y) {
+16535:   Linear_System<Row> tmp(y, With_Pending());
+16535:   swap(*this, tmp);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_System<Row>::m_swap(Linear_System& y) {
+16535:   using std::swap;
+16535:   swap(rows, y.rows);
+16535:   swap(space_dimension_, y.space_dimension_);
+16535:   swap(row_topology, y.row_topology);
+16535:   swap(index_first_pending, y.index_first_pending);
+16535:   swap(sorted, y.sorted);
+16535:   swap(representation_, y.representation_);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_System<Row>::clear() {
+16535: 
+16535:   rows.clear();
+16535:   index_first_pending = 0;
+16535:   sorted = true;
+16535:   space_dimension_ = 0;
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_System<Row>::mark_as_necessarily_closed() {
+16535:   ((void) 0);
+16535:   row_topology = NECESSARILY_CLOSED;
+16535:   ++space_dimension_;
+16535:   for (dimension_type i = num_rows(); i-- > 0; ) {
+16535:     rows[i].mark_as_necessarily_closed();
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_System<Row>::mark_as_not_necessarily_closed() {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   row_topology = NOT_NECESSARILY_CLOSED;
+16535:   --space_dimension_;
+16535:   for (dimension_type i = num_rows(); i-- > 0; ) {
+16535:     rows[i].mark_as_not_necessarily_closed();
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_System<Row>::set_topology(Topology t) {
+16535:   if (topology() == t) {
+16535:     return;
+16535:   }
+16535:   for (dimension_type i = num_rows(); i-- > 0; ) {
+16535:     rows[i].set_topology(t);
+16535:   }
+16535:   row_topology = t;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_System<Row>::set_necessarily_closed() {
+16535:   set_topology(NECESSARILY_CLOSED);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_System<Row>::set_not_necessarily_closed() {
+16535:   set_topology(NOT_NECESSARILY_CLOSED);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline bool
+16535: Linear_System<Row>::is_necessarily_closed() const {
+16535:   return row_topology == NECESSARILY_CLOSED;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline const Row&
+16535: Linear_System<Row>::operator[](const dimension_type k) const {
+16535:   return rows[k];
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline typename Linear_System<Row>::iterator
+16535: Linear_System<Row>::begin() {
+16535:   return rows.begin();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline typename Linear_System<Row>::iterator
+16535: Linear_System<Row>::end() {
+16535:   return rows.end();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline typename Linear_System<Row>::const_iterator
+16535: Linear_System<Row>::begin() const {
+16535:   return rows.begin();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline typename Linear_System<Row>::const_iterator
+16535: Linear_System<Row>::end() const {
+16535:   return rows.end();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline bool
+16535: Linear_System<Row>::has_no_rows() const {
+16535:   return rows.empty();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline dimension_type
+16535: Linear_System<Row>::num_rows() const {
+16535:   return rows.size();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline Topology
+16535: Linear_System<Row>::topology() const {
+16535:   return row_topology;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline Representation
+16535: Linear_System<Row>::representation() const {
+16535:   return representation_;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_System<Row>::set_representation(Representation r) {
+16535:   representation_ = r;
+16535:   for (dimension_type i = 0; i < rows.size(); ++i) {
+16535:     rows[i].set_representation(r);
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline dimension_type
+16535: Linear_System<Row>::max_space_dimension() {
+16535:   return Row::max_space_dimension();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline dimension_type
+16535: Linear_System<Row>::space_dimension() const {
+16535:   return space_dimension_;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_System<Row>::set_space_dimension_no_ok(dimension_type space_dim) {
+16535:   for (dimension_type i = rows.size(); i-- > 0; ) {
+16535:     rows[i].set_space_dimension_no_ok(space_dim);
+16535:   }
+16535:   space_dimension_ = space_dim;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_System<Row>::set_space_dimension(dimension_type space_dim) {
+16535:   set_space_dimension_no_ok(space_dim);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_System<Row>::remove_row_no_ok(const dimension_type i,
+16535:                                      const bool keep_sorted) {
+16535:   ((void) 0);
+16535:   const bool was_pending = (i >= index_first_pending);
+16535: 
+16535:   if (sorted && keep_sorted && !was_pending) {
+16535:     for (dimension_type j = i + 1; j < rows.size(); ++j) {
+16535:       swap(rows[j], rows[j-1]);
+16535:     }
+16535:     rows.pop_back();
+16535:   }
+16535:   else {
+16535:     if (!was_pending) {
+16535:       sorted = false;
+16535:     }
+16535:     const bool last_row_is_pending = (num_rows() - 1 >= index_first_pending);
+16535:     if (was_pending == last_row_is_pending) {
+16535: 
+16535:       swap(rows[i], rows.back());
+16535:     }
+16535:     else {
+16535: 
+16535:       ((void) 0);
+16535:       ((void) 0);
+16535: 
+16535: 
+16535:       swap(rows[i], rows[index_first_pending - 1]);
+16535: 
+16535: 
+16535: 
+16535:       swap(rows[i], rows.back());
+16535:     }
+16535:     rows.pop_back();
+16535:   }
+16535:   if (!was_pending) {
+16535: 
+16535:     --index_first_pending;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_System<Row>::remove_row(const dimension_type i, bool keep_sorted) {
+16535:   remove_row_no_ok(i, keep_sorted);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_System<Row>::remove_rows(dimension_type first,
+16535:                                 dimension_type last,
+16535:                                 bool keep_sorted) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   const dimension_type n = last - first;
+16535: 
+16535:   if (n == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: 
+16535:   const bool were_pending = (first >= index_first_pending);
+16535: 
+16535: 
+16535:   if (sorted && keep_sorted && !were_pending) {
+16535: 
+16535:     for (dimension_type i = last; i < rows.size(); ++i) {
+16535:       swap(rows[i], rows[i - n]);
+16535:     }
+16535: 
+16535:     rows.resize(rows.size() - n);
+16535: 
+16535: 
+16535:     index_first_pending -= n;
+16535: 
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type offset = rows.size() - n - first;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (index_first_pending == num_rows()) {
+16535: 
+16535:     ((void) 0);
+16535: 
+16535:     swap_row_intervals(first, last, offset);
+16535: 
+16535:     rows.resize(rows.size() - n);
+16535: 
+16535: 
+16535:     index_first_pending -= n;
+16535:   }
+16535:   else {
+16535: 
+16535:     if (were_pending) {
+16535: 
+16535: 
+16535: 
+16535:       swap_row_intervals(first, last, offset);
+16535: 
+16535:       rows.resize(rows.size() - n);
+16535: 
+16535: 
+16535:       index_first_pending -= n;
+16535:     }
+16535:     else {
+16535:       ((void) 0);
+16535:       ((void) 0);
+16535:       ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:       ((void) 0);
+16535:       swap_row_intervals(first, last, index_first_pending - last);
+16535: 
+16535: 
+16535:       index_first_pending -= n;
+16535:       first = index_first_pending;
+16535:       last = first + n;
+16535: 
+16535: 
+16535:       swap_row_intervals(first, last, num_rows() - last);
+16535: 
+16535: 
+16535:       rows.resize(rows.size() - n);
+16535:     }
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_System<Row>::swap_row_intervals(dimension_type first,
+16535:                                        dimension_type last,
+16535:                                        dimension_type offset) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: # 534 "../../src/Linear_System_inlines.hh"
+16535:   if (first + offset < last) {
+16535: 
+16535:     const dimension_type k = last - first - offset;
+16535:     last -= k;
+16535:     offset += k;
+16535:   }
+16535: 
+16535:   if (first == last) {
+16535: 
+16535:     return;
+16535:   }
+16535: 
+16535:   for (dimension_type i = first; i < last; ++i) {
+16535:     swap(rows[i], rows[i + offset]);
+16535:   }
+16535: 
+16535:   if (first < index_first_pending) {
+16535: 
+16535:     set_sorted(false);
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_System<Row>::remove_rows(const std::vector<dimension_type>& indexes) {
+16535: # 576 "../../src/Linear_System_inlines.hh"
+16535:   if (indexes.empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   const dimension_type rows_size = rows.size();
+16535:   typedef std::vector<dimension_type>::const_iterator itr_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type last_unused_row = indexes[0];
+16535:   dimension_type i = indexes[0];
+16535:   itr_t itr = indexes.begin();
+16535:   itr_t itr_end = indexes.end();
+16535:   while (itr != itr_end) {
+16535: 
+16535:     ((void) 0);
+16535:     if (*itr == i) {
+16535: 
+16535:       ++itr;
+16535:     }
+16535:     else {
+16535: 
+16535:       swap(rows[last_unused_row], rows[i]);
+16535:       ++last_unused_row;
+16535:     }
+16535:     ++i;
+16535:   }
+16535: 
+16535: 
+16535:   for ( ; i < rows_size; ++i) {
+16535:     swap(rows[last_unused_row], rows[i]);
+16535:     ++last_unused_row;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:   rows.resize(last_unused_row);
+16535: 
+16535: 
+16535:   if (indexes[0] >= index_first_pending) {
+16535: 
+16535:   }
+16535:   else {
+16535:     if (indexes.back() < index_first_pending) {
+16535: 
+16535:       index_first_pending -= indexes.size();
+16535:     }
+16535:     else {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       itr_t j = std::lower_bound(indexes.begin(), indexes.end(),
+16535:                                  index_first_pending);
+16535:       std::iterator_traits<itr_t>::difference_type
+16535:         non_pending = j - indexes.begin();
+16535:       index_first_pending -= static_cast<dimension_type>(non_pending);
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_System<Row>::remove_trailing_rows(const dimension_type n) {
+16535:   ((void) 0);
+16535:   rows.resize(rows.size() - n);
+16535:   if (first_pending_row() > rows.size()) {
+16535:     index_first_pending = rows.size();
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_System<Row>
+16535: ::permute_space_dimensions(const std::vector<Variable>& cycle) {
+16535:   for (dimension_type i = num_rows(); i-- > 0; ) {
+16535:     rows[i].permute_space_dimensions(cycle);
+16535:   }
+16535:   sorted = false;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Linear_System<Row>
+16535: ::swap_space_dimensions(Variable v1, Variable v2) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   for (dimension_type k = num_rows(); k-- > 0; ) {
+16535:     rows[k].swap_space_dimensions(v1, v2);
+16535:   }
+16535:   sorted = false;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: 
+16535: template <typename Row>
+16535: inline bool
+16535: operator!=(const Linear_System<Row>& x, const Linear_System<Row>& y) {
+16535:   return !(x == y);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline bool
+16535: Linear_System<Row>::Row_Less_Than::operator()(const Row& x,
+16535:                                               const Row& y) const {
+16535:   return compare(x, y) < 0;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline
+16535: Linear_System<Row>::Unique_Compare
+16535: ::Unique_Compare(const Swapping_Vector<Row>& cont,
+16535:                  dimension_type base)
+16535:   : container(cont), base_index(base) {
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline bool
+16535: Linear_System<Row>::Unique_Compare
+16535: ::operator()(dimension_type i, dimension_type j) const {
+16535:   return container[base_index + i].is_equal_to(container[base_index + j]);
+16535: }
+16535: 
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: swap(Linear_System<Row>& x, Linear_System<Row>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 580 "../../src/Linear_System_defs.hh" 2
+16535: # 1 "../../src/Linear_System_templates.hh" 1
+16535: # 27 "../../src/Linear_System_templates.hh"
+16535: # 1 "../../src/Bit_Matrix_defs.hh" 1
+16535: # 33 "../../src/Bit_Matrix_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: class Parma_Polyhedra_Library::Bit_Matrix {
+16535: public:
+16535: 
+16535:   Bit_Matrix();
+16535: 
+16535: 
+16535:   Bit_Matrix(dimension_type n_rows, dimension_type n_columns);
+16535: 
+16535: 
+16535:   Bit_Matrix(const Bit_Matrix& y);
+16535: 
+16535: 
+16535:   ~Bit_Matrix();
+16535: 
+16535: 
+16535:   Bit_Matrix& operator=(const Bit_Matrix& y);
+16535: 
+16535: 
+16535:   void m_swap(Bit_Matrix& y);
+16535: 
+16535: 
+16535:   Bit_Row& operator[](dimension_type k);
+16535: 
+16535: 
+16535:   const Bit_Row& operator[](dimension_type k) const;
+16535: 
+16535: 
+16535:   void clear();
+16535: 
+16535: 
+16535:   void transpose();
+16535: 
+16535: 
+16535:   void transpose_assign(const Bit_Matrix& y);
+16535: 
+16535: 
+16535:   static dimension_type max_num_rows();
+16535: 
+16535: 
+16535:   dimension_type num_columns() const;
+16535: 
+16535: 
+16535:   dimension_type num_rows() const;
+16535: 
+16535: 
+16535:   void sort_rows();
+16535: # 105 "../../src/Bit_Matrix_defs.hh"
+16535:   bool sorted_contains(const Bit_Row& row) const;
+16535: # 114 "../../src/Bit_Matrix_defs.hh"
+16535:   void add_recycled_row(Bit_Row& row);
+16535: 
+16535: 
+16535:   void remove_trailing_rows(dimension_type n);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void remove_trailing_columns(dimension_type n);
+16535: 
+16535: 
+16535:   void resize(dimension_type new_n_rows, dimension_type new_n_columns);
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: private:
+16535: 
+16535:   std::vector<Bit_Row> rows;
+16535: 
+16535: 
+16535:   dimension_type row_size;
+16535: 
+16535: 
+16535: 
+16535:   struct Bit_Row_Less_Than {
+16535:     bool operator()(const Bit_Row& x, const Bit_Row& y) const;
+16535:   };
+16535: 
+16535:   template <typename Row>
+16535:   friend class Parma_Polyhedra_Library::Linear_System;
+16535: };
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: bool operator==(const Bit_Matrix& x, const Bit_Matrix& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: bool operator!=(const Bit_Matrix& x, const Bit_Matrix& y);
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Bit_Matrix_inlines.hh" 1
+16535: # 30 "../../src/Bit_Matrix_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline
+16535: Bit_Matrix::Bit_Matrix()
+16535:   : rows(),
+16535:     row_size(0) {
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Bit_Matrix::max_num_rows() {
+16535:   return std::vector<Bit_Row>().max_size();
+16535: }
+16535: 
+16535: inline
+16535: Bit_Matrix::Bit_Matrix(const dimension_type n_rows,
+16535:                        const dimension_type n_columns)
+16535:   : rows(n_rows),
+16535:     row_size(n_columns) {
+16535: }
+16535: 
+16535: inline
+16535: Bit_Matrix::Bit_Matrix(const Bit_Matrix& y)
+16535:   : rows(y.rows),
+16535:     row_size(y.row_size) {
+16535: }
+16535: 
+16535: inline
+16535: Bit_Matrix::~Bit_Matrix() {
+16535: }
+16535: 
+16535: inline void
+16535: Bit_Matrix::remove_trailing_rows(const dimension_type n) {
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   if (n != 0) {
+16535:     rows.resize(rows.size() - n);
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline void
+16535: Bit_Matrix::remove_trailing_columns(const dimension_type n) {
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   row_size -= n;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline void
+16535: Bit_Matrix::m_swap(Bit_Matrix& y) {
+16535:   std::swap(row_size, y.row_size);
+16535:   std::swap(rows, y.rows);
+16535: }
+16535: 
+16535: inline Bit_Row&
+16535: Bit_Matrix::operator[](const dimension_type k) {
+16535:   ((void) 0);
+16535:   return rows[k];
+16535: }
+16535: 
+16535: inline const Bit_Row&
+16535: Bit_Matrix::operator[](const dimension_type k) const {
+16535:   ((void) 0);
+16535:   return rows[k];
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Bit_Matrix::num_columns() const {
+16535:   return row_size;
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Bit_Matrix::num_rows() const {
+16535:   return rows.size();
+16535: }
+16535: 
+16535: inline void
+16535: Bit_Matrix::clear() {
+16535: 
+16535:   std::vector<Bit_Row> tmp;
+16535:   std::swap(tmp, rows);
+16535:   row_size = 0;
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Bit_Matrix::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: inline bool
+16535: Bit_Matrix::Bit_Row_Less_Than::
+16535: operator()(const Bit_Row& x, const Bit_Row& y) const {
+16535:   return compare(x, y) < 0;
+16535: }
+16535: 
+16535: inline bool
+16535: Bit_Matrix::sorted_contains(const Bit_Row& row) const {
+16535:   ((void) 0);
+16535:   return std::binary_search(rows.begin(), rows.end(), row,
+16535:                             Bit_Row_Less_Than());
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: operator!=(const Bit_Matrix& x, const Bit_Matrix& y) {
+16535:   return !(x == y);
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: swap(Bit_Matrix& x, Bit_Matrix& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 186 "../../src/Bit_Matrix_defs.hh" 2
+16535: # 28 "../../src/Linear_System_templates.hh" 2
+16535: 
+16535: # 1 "../../src/Scalar_Products_defs.hh" 1
+16535: # 44 "../../src/Scalar_Products_defs.hh"
+16535: class Parma_Polyhedra_Library::Scalar_Products {
+16535: public:
+16535: 
+16535:   static void assign(Coefficient& z,
+16535:                      const Linear_Expression& x, const Linear_Expression& y);
+16535: 
+16535: 
+16535:   static void assign(Coefficient& z, const Constraint& c, const Generator& g);
+16535: 
+16535: 
+16535:   static void assign(Coefficient& z, const Generator& g, const Constraint& c);
+16535: 
+16535: 
+16535:   static void assign(Coefficient& z,
+16535:                      const Constraint& c, const Grid_Generator& gg);
+16535: 
+16535: 
+16535:   static void assign(Coefficient& z,
+16535:                      const Grid_Generator& gg, const Congruence& cg);
+16535: 
+16535: 
+16535:   static void assign(Coefficient& z,
+16535:                      const Congruence& cg, const Grid_Generator& gg);
+16535: 
+16535: 
+16535:   static int sign(const Linear_Expression& x, const Linear_Expression& y);
+16535: 
+16535: 
+16535:   static int sign(const Constraint& c, const Generator& g);
+16535: 
+16535: 
+16535:   static int sign(const Generator& g, const Constraint& c);
+16535: 
+16535: 
+16535:   static int sign(const Constraint& c, const Grid_Generator& g);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static void reduced_assign(Coefficient& z,
+16535:                              const Linear_Expression& x,
+16535:                              const Linear_Expression& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static void reduced_assign(Coefficient& z,
+16535:                              const Constraint& c, const Generator& g);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static void reduced_assign(Coefficient& z,
+16535:                              const Generator& g, const Constraint& c);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static void reduced_assign(Coefficient& z,
+16535:                              const Grid_Generator& gg, const Congruence& cg);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static int reduced_sign(const Linear_Expression& x,
+16535:                           const Linear_Expression& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static int reduced_sign(const Constraint& c, const Generator& g);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static int reduced_sign(const Generator& g, const Constraint& c);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static void homogeneous_assign(Coefficient& z,
+16535:                                  const Linear_Expression& x,
+16535:                                  const Linear_Expression& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static void homogeneous_assign(Coefficient& z,
+16535:                                  const Linear_Expression& e,
+16535:                                  const Generator& g);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static void homogeneous_assign(Coefficient& z,
+16535:                                  const Grid_Generator& gg,
+16535:                                  const Constraint& c);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static void homogeneous_assign(Coefficient& z,
+16535:                                  const Grid_Generator& gg,
+16535:                                  const Congruence& cg);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static void homogeneous_assign(Coefficient& z,
+16535:                                  const Linear_Expression& e,
+16535:                                  const Grid_Generator& g);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static int homogeneous_sign(const Linear_Expression& x,
+16535:                               const Linear_Expression& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static int homogeneous_sign(const Linear_Expression& e, const Generator& g);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static int homogeneous_sign(const Linear_Expression& e,
+16535:                               const Grid_Generator& g);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static int homogeneous_sign(const Grid_Generator& g, const Constraint& c);
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: class Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign {
+16535: public:
+16535: 
+16535:   Topology_Adjusted_Scalar_Product_Sign(const Constraint& c);
+16535: 
+16535: 
+16535:   Topology_Adjusted_Scalar_Product_Sign(const Generator& g);
+16535: 
+16535: 
+16535:   int operator()(const Constraint&, const Generator&) const;
+16535: 
+16535: 
+16535:   int operator()(const Generator&, const Constraint&) const;
+16535: 
+16535: private:
+16535: 
+16535:   typedef int (* const SPS_type)(const Linear_Expression&,
+16535:                                  const Linear_Expression&);
+16535: 
+16535: 
+16535:   SPS_type sps_fp;
+16535: };
+16535: # 30 "../../src/Linear_System_templates.hh" 2
+16535: # 1 "../../src/Scalar_Products_inlines.hh" 1
+16535: # 33 "../../src/Scalar_Products_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline int
+16535: Scalar_Products::sign(const Linear_Expression& x, const Linear_Expression& y) {
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_z; Parma_Polyhedra_Library::Coefficient& z = holder_z.item();
+16535:   assign(z, x, y);
+16535:   return sgn(z);
+16535: }
+16535: 
+16535: inline int
+16535: Scalar_Products::reduced_sign(const Linear_Expression& x,
+16535:                               const Linear_Expression& y) {
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_z; Parma_Polyhedra_Library::Coefficient& z = holder_z.item();
+16535:   reduced_assign(z, x, y);
+16535:   return sgn(z);
+16535: }
+16535: 
+16535: inline int
+16535: Scalar_Products::homogeneous_sign(const Linear_Expression& x,
+16535:                                   const Linear_Expression& y) {
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_z; Parma_Polyhedra_Library::Coefficient& z = holder_z.item();
+16535:   homogeneous_assign(z, x, y);
+16535:   return sgn(z);
+16535: }
+16535: 
+16535: inline int
+16535: Scalar_Products::sign(const Constraint& c, const Generator& g) {
+16535:   return sign(c.expr, g.expr);
+16535: }
+16535: 
+16535: inline int
+16535: Scalar_Products::sign(const Generator& g, const Constraint& c) {
+16535:   return sign(g.expr, c.expr);
+16535: }
+16535: 
+16535: inline int
+16535: Scalar_Products::sign(const Constraint& c, const Grid_Generator& g) {
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_z; Parma_Polyhedra_Library::Coefficient& z = holder_z.item();
+16535:   assign(z, c, g);
+16535:   return sgn(z);
+16535: }
+16535: 
+16535: inline int
+16535: Scalar_Products::reduced_sign(const Constraint& c, const Generator& g) {
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   return reduced_sign(c.expr, g.expr);
+16535: }
+16535: 
+16535: inline int
+16535: Scalar_Products::reduced_sign(const Generator& g, const Constraint& c) {
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   return reduced_sign(g.expr, c.expr);
+16535: }
+16535: 
+16535: inline void
+16535: Scalar_Products::homogeneous_assign(Coefficient& z,
+16535:                                     const Linear_Expression& e,
+16535:                                     const Generator& g) {
+16535:   homogeneous_assign(z, e, g.expr);
+16535: }
+16535: 
+16535: inline void
+16535: Scalar_Products::homogeneous_assign(Coefficient& z,
+16535:                                     const Linear_Expression& e,
+16535:                                     const Grid_Generator& g) {
+16535:   homogeneous_assign(z, e, g.expr);
+16535: }
+16535: 
+16535: inline int
+16535: Scalar_Products::homogeneous_sign(const Linear_Expression& e,
+16535:                                   const Generator& g) {
+16535:   return homogeneous_sign(e, g.expr);
+16535: }
+16535: 
+16535: inline int
+16535: Scalar_Products::homogeneous_sign(const Linear_Expression& e,
+16535:                                   const Grid_Generator& g) {
+16535:   return homogeneous_sign(e, g.expr);
+16535: }
+16535: 
+16535: inline int
+16535: Scalar_Products::homogeneous_sign(const Grid_Generator& g,
+16535:                                   const Constraint& c) {
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_z; Parma_Polyhedra_Library::Coefficient& z = holder_z.item();
+16535:   homogeneous_assign(z, g, c);
+16535:   return sgn(z);
+16535: }
+16535: 
+16535: inline
+16535: Topology_Adjusted_Scalar_Product_Sign
+16535: ::Topology_Adjusted_Scalar_Product_Sign(const Constraint& c)
+16535:   : sps_fp(c.is_necessarily_closed()
+16535:            ? static_cast<SPS_type>(&Scalar_Products::sign)
+16535:            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+16535: }
+16535: 
+16535: inline
+16535: Topology_Adjusted_Scalar_Product_Sign
+16535: ::Topology_Adjusted_Scalar_Product_Sign(const Generator& g)
+16535:   : sps_fp(g.is_necessarily_closed()
+16535:            ? static_cast<SPS_type>(&Scalar_Products::sign)
+16535:            : static_cast<SPS_type>(&Scalar_Products::reduced_sign)) {
+16535: }
+16535: 
+16535: inline int
+16535: Topology_Adjusted_Scalar_Product_Sign::operator()(const Constraint& c,
+16535:                                                   const Generator& g) const {
+16535:   ((void) 0);
+16535:   ((void) 0)
+16535: 
+16535:                                                                              ;
+16535:   return sps_fp(c.expr, g.expr);
+16535: }
+16535: 
+16535: inline int
+16535: Topology_Adjusted_Scalar_Product_Sign::operator()(const Generator& g,
+16535:                                                   const Constraint& c) const {
+16535:   ((void) 0);
+16535:   ((void) 0)
+16535: 
+16535:                                                                              ;
+16535:   return sps_fp(g.expr, c.expr);
+16535: }
+16535: 
+16535: }
+16535: # 31 "../../src/Linear_System_templates.hh" 2
+16535: # 1 "../../src/swapping_sort_templates.hh" 1
+16535: # 30 "../../src/swapping_sort_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: template <typename RA_Container, typename Compare>
+16535: struct Indirect_Sort_Compare {
+16535:   typedef typename RA_Container::size_type size_type;
+16535: 
+16535:   Indirect_Sort_Compare(const RA_Container& cont,
+16535:                         size_type base = 0,
+16535:                         Compare comp = Compare())
+16535:     : container(cont), base_index(base), compare(comp) {
+16535:   }
+16535: 
+16535:   bool operator()(size_type i, size_type j) const {
+16535:     return compare(container[base_index + i], container[base_index + j]);
+16535:   }
+16535: 
+16535:   const RA_Container& container;
+16535:   const size_type base_index;
+16535:   const Compare compare;
+16535: };
+16535: 
+16535: template <typename RA_Container>
+16535: struct Indirect_Unique_Compare {
+16535:   typedef typename RA_Container::size_type size_type;
+16535: 
+16535:   Indirect_Unique_Compare(const RA_Container& cont, size_type base = 0)
+16535:     : container(cont), base_index(base) {
+16535:   }
+16535: 
+16535:   bool operator()(size_type i, size_type j) const {
+16535:     return container[base_index + i] == container[base_index + j];
+16535:   }
+16535: 
+16535:   const RA_Container& container;
+16535:   const size_type base_index;
+16535: };
+16535: 
+16535: template <typename RA_Container>
+16535: struct Indirect_Swapper {
+16535:   typedef typename RA_Container::size_type size_type;
+16535: 
+16535:   Indirect_Swapper(RA_Container& cont, size_type base = 0)
+16535:     : container(cont), base_index(base) {
+16535:   }
+16535: 
+16535:   void operator()(size_type i, size_type j) const {
+16535:     using std::swap;
+16535:     swap(container[base_index + i], container[base_index + j]);
+16535:   }
+16535: 
+16535:   RA_Container& container;
+16535:   const size_type base_index;
+16535: };
+16535: 
+16535: template <typename RA_Container1, typename RA_Container2>
+16535: struct Indirect_Swapper2 {
+16535:   typedef typename RA_Container1::size_type size_type;
+16535: 
+16535:   Indirect_Swapper2(RA_Container1& cont1, RA_Container2& cont2)
+16535:     : container1(cont1), container2(cont2) {
+16535:   }
+16535: 
+16535:   void operator()(size_type i, size_type j) const {
+16535:     using std::swap;
+16535:     swap(container1[i], container1[j]);
+16535:     swap(container2[i], container2[j]);
+16535:   }
+16535: 
+16535:   RA_Container1& container1;
+16535:   RA_Container2& container2;
+16535: };
+16535: 
+16535: template <typename Sort_Comparer, typename Unique_Comparer, typename Swapper>
+16535: typename Sort_Comparer::size_type
+16535: indirect_sort_and_unique(typename Sort_Comparer::size_type num_elems,
+16535:                          Sort_Comparer sort_cmp,
+16535:                          Unique_Comparer unique_cmp,
+16535:                          Swapper indirect_swap) {
+16535:   typedef typename Sort_Comparer::size_type index_type;
+16535: 
+16535:   ((void) 0);
+16535:   std::vector<index_type> iv;
+16535:   iv.reserve(num_elems);
+16535:   for (index_type i = 0, i_end = num_elems; i != i_end; ++i) {
+16535:     iv.push_back(i);
+16535:   }
+16535: 
+16535:   typedef typename std::vector<index_type>::iterator Iter;
+16535:   const Iter iv_begin = iv.begin();
+16535:   Iter iv_end = iv.end();
+16535: 
+16535: 
+16535:   std::sort(iv_begin, iv_end, sort_cmp);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   for (index_type i = num_elems; i-- > 0; ) {
+16535:     if (i != iv[i]) {
+16535:       index_type dst = i;
+16535:       index_type src = iv[i];
+16535:       do {
+16535:         indirect_swap(src, dst);
+16535:         iv[dst] = dst;
+16535:         dst = src;
+16535:         src = iv[dst];
+16535:       } while (i != src);
+16535:       iv[dst] = dst;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   for (index_type i = num_elems; i-- > 0; ) {
+16535:     iv[i] = i;
+16535:   }
+16535: 
+16535: 
+16535:   iv_end = std::unique(iv_begin, iv_end, unique_cmp);
+16535: 
+16535:   const index_type num_sorted = static_cast<index_type>(iv_end - iv_begin);
+16535:   const index_type num_duplicates = num_elems - num_sorted;
+16535:   if (num_duplicates == 0) {
+16535:     return 0;
+16535:   }
+16535: 
+16535: 
+16535:   index_type dst = 0;
+16535:   while (dst < num_sorted && dst == iv[dst]) {
+16535:     ++dst;
+16535:   }
+16535:   if (dst == num_sorted) {
+16535:     return num_duplicates;
+16535:   }
+16535:   do {
+16535:     const index_type src = iv[dst];
+16535:     indirect_swap(src, dst);
+16535:     ++dst;
+16535:   }
+16535:   while (dst < num_sorted);
+16535:   return num_duplicates;
+16535: }
+16535: 
+16535: template <typename Iter>
+16535: Iter
+16535: swapping_unique(Iter first, Iter last) {
+16535:   return swapping_unique(first, last, std::iter_swap<Iter, Iter>);
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 32 "../../src/Linear_System_templates.hh" 2
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/deque" 1 3
+16535: # 58 "/usr/include/c++/8/deque" 3
+16535:        
+16535: # 59 "/usr/include/c++/8/deque" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/stl_deque.h" 1 3
+16535: # 68 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535: 
+16535: # 68 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: # 91 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:   constexpr inline size_t
+16535:   __deque_buf_size(size_t __size)
+16535:   { return (__size < 512
+16535:      ? size_t(512 / __size) : size_t(1)); }
+16535: # 108 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:   template<typename _Tp, typename _Ref, typename _Ptr>
+16535:     struct _Deque_iterator
+16535:     {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     private:
+16535:       template<typename _Up>
+16535:  using __ptr_to = typename pointer_traits<_Ptr>::template rebind<_Up>;
+16535:       template<typename _CvTp>
+16535:  using __iter = _Deque_iterator<_Tp, _CvTp&, __ptr_to<_CvTp>>;
+16535:     public:
+16535:       typedef __iter<_Tp> iterator;
+16535:       typedef __iter<const _Tp> const_iterator;
+16535:       typedef __ptr_to<_Tp> _Elt_pointer;
+16535:       typedef __ptr_to<_Elt_pointer> _Map_pointer;
+16535: 
+16535: 
+16535:       static size_t _S_buffer_size() noexcept
+16535:       { return __deque_buf_size(sizeof(_Tp)); }
+16535: 
+16535:       typedef std::random_access_iterator_tag iterator_category;
+16535:       typedef _Tp value_type;
+16535:       typedef _Ptr pointer;
+16535:       typedef _Ref reference;
+16535:       typedef size_t size_type;
+16535:       typedef ptrdiff_t difference_type;
+16535:       typedef _Deque_iterator _Self;
+16535: 
+16535:       _Elt_pointer _M_cur;
+16535:       _Elt_pointer _M_first;
+16535:       _Elt_pointer _M_last;
+16535:       _Map_pointer _M_node;
+16535: 
+16535:       _Deque_iterator(_Elt_pointer __x, _Map_pointer __y) noexcept
+16535:       : _M_cur(__x), _M_first(*__y),
+16535:  _M_last(*__y + _S_buffer_size()), _M_node(__y) { }
+16535: 
+16535:       _Deque_iterator() noexcept
+16535:       : _M_cur(), _M_first(), _M_last(), _M_node() { }
+16535: 
+16535:       _Deque_iterator(const iterator& __x) noexcept
+16535:       : _M_cur(__x._M_cur), _M_first(__x._M_first),
+16535:  _M_last(__x._M_last), _M_node(__x._M_node) { }
+16535: 
+16535:       iterator
+16535:       _M_const_cast() const noexcept
+16535:       { return iterator(_M_cur, _M_node); }
+16535: 
+16535:       reference
+16535:       operator*() const noexcept
+16535:       { return *_M_cur; }
+16535: 
+16535:       pointer
+16535:       operator->() const noexcept
+16535:       { return _M_cur; }
+16535: 
+16535:       _Self&
+16535:       operator++() noexcept
+16535:       {
+16535:  ++_M_cur;
+16535:  if (_M_cur == _M_last)
+16535:    {
+16535:      _M_set_node(_M_node + 1);
+16535:      _M_cur = _M_first;
+16535:    }
+16535:  return *this;
+16535:       }
+16535: 
+16535:       _Self
+16535:       operator++(int) noexcept
+16535:       {
+16535:  _Self __tmp = *this;
+16535:  ++*this;
+16535:  return __tmp;
+16535:       }
+16535: 
+16535:       _Self&
+16535:       operator--() noexcept
+16535:       {
+16535:  if (_M_cur == _M_first)
+16535:    {
+16535:      _M_set_node(_M_node - 1);
+16535:      _M_cur = _M_last;
+16535:    }
+16535:  --_M_cur;
+16535:  return *this;
+16535:       }
+16535: 
+16535:       _Self
+16535:       operator--(int) noexcept
+16535:       {
+16535:  _Self __tmp = *this;
+16535:  --*this;
+16535:  return __tmp;
+16535:       }
+16535: 
+16535:       _Self&
+16535:       operator+=(difference_type __n) noexcept
+16535:       {
+16535:  const difference_type __offset = __n + (_M_cur - _M_first);
+16535:  if (__offset >= 0 && __offset < difference_type(_S_buffer_size()))
+16535:    _M_cur += __n;
+16535:  else
+16535:    {
+16535:      const difference_type __node_offset =
+16535:        __offset > 0 ? __offset / difference_type(_S_buffer_size())
+16535:       : -difference_type((-__offset - 1)
+16535:            / _S_buffer_size()) - 1;
+16535:      _M_set_node(_M_node + __node_offset);
+16535:      _M_cur = _M_first + (__offset - __node_offset
+16535:      * difference_type(_S_buffer_size()));
+16535:    }
+16535:  return *this;
+16535:       }
+16535: 
+16535:       _Self
+16535:       operator+(difference_type __n) const noexcept
+16535:       {
+16535:  _Self __tmp = *this;
+16535:  return __tmp += __n;
+16535:       }
+16535: 
+16535:       _Self&
+16535:       operator-=(difference_type __n) noexcept
+16535:       { return *this += -__n; }
+16535: 
+16535:       _Self
+16535:       operator-(difference_type __n) const noexcept
+16535:       {
+16535:  _Self __tmp = *this;
+16535:  return __tmp -= __n;
+16535:       }
+16535: 
+16535:       reference
+16535:       operator[](difference_type __n) const noexcept
+16535:       { return *(*this + __n); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_set_node(_Map_pointer __new_node) noexcept
+16535:       {
+16535:  _M_node = __new_node;
+16535:  _M_first = *__new_node;
+16535:  _M_last = _M_first + difference_type(_S_buffer_size());
+16535:       }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Ref, typename _Ptr>
+16535:     inline bool
+16535:     operator==(const _Deque_iterator<_Tp, _Ref, _Ptr>& __x,
+16535:         const _Deque_iterator<_Tp, _Ref, _Ptr>& __y) noexcept
+16535:     { return __x._M_cur == __y._M_cur; }
+16535: 
+16535:   template<typename _Tp, typename _RefL, typename _PtrL,
+16535:     typename _RefR, typename _PtrR>
+16535:     inline bool
+16535:     operator==(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x,
+16535:         const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) noexcept
+16535:     { return __x._M_cur == __y._M_cur; }
+16535: 
+16535:   template<typename _Tp, typename _Ref, typename _Ptr>
+16535:     inline bool
+16535:     operator!=(const _Deque_iterator<_Tp, _Ref, _Ptr>& __x,
+16535:         const _Deque_iterator<_Tp, _Ref, _Ptr>& __y) noexcept
+16535:     { return !(__x == __y); }
+16535: 
+16535:   template<typename _Tp, typename _RefL, typename _PtrL,
+16535:     typename _RefR, typename _PtrR>
+16535:     inline bool
+16535:     operator!=(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x,
+16535:         const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) noexcept
+16535:     { return !(__x == __y); }
+16535: 
+16535:   template<typename _Tp, typename _Ref, typename _Ptr>
+16535:     inline bool
+16535:     operator<(const _Deque_iterator<_Tp, _Ref, _Ptr>& __x,
+16535:        const _Deque_iterator<_Tp, _Ref, _Ptr>& __y) noexcept
+16535:     { return (__x._M_node == __y._M_node) ? (__x._M_cur < __y._M_cur)
+16535:        : (__x._M_node < __y._M_node); }
+16535: 
+16535:   template<typename _Tp, typename _RefL, typename _PtrL,
+16535:     typename _RefR, typename _PtrR>
+16535:     inline bool
+16535:     operator<(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x,
+16535:        const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) noexcept
+16535:     { return (__x._M_node == __y._M_node) ? (__x._M_cur < __y._M_cur)
+16535:        : (__x._M_node < __y._M_node); }
+16535: 
+16535:   template<typename _Tp, typename _Ref, typename _Ptr>
+16535:     inline bool
+16535:     operator>(const _Deque_iterator<_Tp, _Ref, _Ptr>& __x,
+16535:        const _Deque_iterator<_Tp, _Ref, _Ptr>& __y) noexcept
+16535:     { return __y < __x; }
+16535: 
+16535:   template<typename _Tp, typename _RefL, typename _PtrL,
+16535:     typename _RefR, typename _PtrR>
+16535:     inline bool
+16535:     operator>(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x,
+16535:        const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) noexcept
+16535:     { return __y < __x; }
+16535: 
+16535:   template<typename _Tp, typename _Ref, typename _Ptr>
+16535:     inline bool
+16535:     operator<=(const _Deque_iterator<_Tp, _Ref, _Ptr>& __x,
+16535:         const _Deque_iterator<_Tp, _Ref, _Ptr>& __y) noexcept
+16535:     { return !(__y < __x); }
+16535: 
+16535:   template<typename _Tp, typename _RefL, typename _PtrL,
+16535:     typename _RefR, typename _PtrR>
+16535:     inline bool
+16535:     operator<=(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x,
+16535:         const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) noexcept
+16535:     { return !(__y < __x); }
+16535: 
+16535:   template<typename _Tp, typename _Ref, typename _Ptr>
+16535:     inline bool
+16535:     operator>=(const _Deque_iterator<_Tp, _Ref, _Ptr>& __x,
+16535:         const _Deque_iterator<_Tp, _Ref, _Ptr>& __y) noexcept
+16535:     { return !(__x < __y); }
+16535: 
+16535:   template<typename _Tp, typename _RefL, typename _PtrL,
+16535:     typename _RefR, typename _PtrR>
+16535:     inline bool
+16535:     operator>=(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x,
+16535:         const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) noexcept
+16535:     { return !(__x < __y); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Ref, typename _Ptr>
+16535:     inline typename _Deque_iterator<_Tp, _Ref, _Ptr>::difference_type
+16535:     operator-(const _Deque_iterator<_Tp, _Ref, _Ptr>& __x,
+16535:        const _Deque_iterator<_Tp, _Ref, _Ptr>& __y) noexcept
+16535:     {
+16535:       return typename _Deque_iterator<_Tp, _Ref, _Ptr>::difference_type
+16535:  (_Deque_iterator<_Tp, _Ref, _Ptr>::_S_buffer_size())
+16535:  * (__x._M_node - __y._M_node - 1) + (__x._M_cur - __x._M_first)
+16535:  + (__y._M_last - __y._M_cur);
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _RefL, typename _PtrL,
+16535:     typename _RefR, typename _PtrR>
+16535:     inline typename _Deque_iterator<_Tp, _RefL, _PtrL>::difference_type
+16535:     operator-(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x,
+16535:        const _Deque_iterator<_Tp, _RefR, _PtrR>& __y) noexcept
+16535:     {
+16535:       return typename _Deque_iterator<_Tp, _RefL, _PtrL>::difference_type
+16535:  (_Deque_iterator<_Tp, _RefL, _PtrL>::_S_buffer_size())
+16535:  * (__x._M_node - __y._M_node - 1) + (__x._M_cur - __x._M_first)
+16535:  + (__y._M_last - __y._M_cur);
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Ref, typename _Ptr>
+16535:     inline _Deque_iterator<_Tp, _Ref, _Ptr>
+16535:     operator+(ptrdiff_t __n, const _Deque_iterator<_Tp, _Ref, _Ptr>& __x)
+16535:     noexcept
+16535:     { return __x + __n; }
+16535: 
+16535:   template<typename _Tp>
+16535:     void
+16535:     fill(const _Deque_iterator<_Tp, _Tp&, _Tp*>&,
+16535:   const _Deque_iterator<_Tp, _Tp&, _Tp*>&, const _Tp&);
+16535: 
+16535:   template<typename _Tp>
+16535:     _Deque_iterator<_Tp, _Tp&, _Tp*>
+16535:     copy(_Deque_iterator<_Tp, const _Tp&, const _Tp*>,
+16535:   _Deque_iterator<_Tp, const _Tp&, const _Tp*>,
+16535:   _Deque_iterator<_Tp, _Tp&, _Tp*>);
+16535: 
+16535:   template<typename _Tp>
+16535:     inline _Deque_iterator<_Tp, _Tp&, _Tp*>
+16535:     copy(_Deque_iterator<_Tp, _Tp&, _Tp*> __first,
+16535:   _Deque_iterator<_Tp, _Tp&, _Tp*> __last,
+16535:   _Deque_iterator<_Tp, _Tp&, _Tp*> __result)
+16535:     { return std::copy(_Deque_iterator<_Tp, const _Tp&, const _Tp*>(__first),
+16535:          _Deque_iterator<_Tp, const _Tp&, const _Tp*>(__last),
+16535:          __result); }
+16535: 
+16535:   template<typename _Tp>
+16535:     _Deque_iterator<_Tp, _Tp&, _Tp*>
+16535:     copy_backward(_Deque_iterator<_Tp, const _Tp&, const _Tp*>,
+16535:     _Deque_iterator<_Tp, const _Tp&, const _Tp*>,
+16535:     _Deque_iterator<_Tp, _Tp&, _Tp*>);
+16535: 
+16535:   template<typename _Tp>
+16535:     inline _Deque_iterator<_Tp, _Tp&, _Tp*>
+16535:     copy_backward(_Deque_iterator<_Tp, _Tp&, _Tp*> __first,
+16535:     _Deque_iterator<_Tp, _Tp&, _Tp*> __last,
+16535:     _Deque_iterator<_Tp, _Tp&, _Tp*> __result)
+16535:     { return std::copy_backward(_Deque_iterator<_Tp,
+16535:     const _Tp&, const _Tp*>(__first),
+16535:     _Deque_iterator<_Tp,
+16535:     const _Tp&, const _Tp*>(__last),
+16535:     __result); }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     _Deque_iterator<_Tp, _Tp&, _Tp*>
+16535:     move(_Deque_iterator<_Tp, const _Tp&, const _Tp*>,
+16535:   _Deque_iterator<_Tp, const _Tp&, const _Tp*>,
+16535:   _Deque_iterator<_Tp, _Tp&, _Tp*>);
+16535: 
+16535:   template<typename _Tp>
+16535:     inline _Deque_iterator<_Tp, _Tp&, _Tp*>
+16535:     move(_Deque_iterator<_Tp, _Tp&, _Tp*> __first,
+16535:   _Deque_iterator<_Tp, _Tp&, _Tp*> __last,
+16535:   _Deque_iterator<_Tp, _Tp&, _Tp*> __result)
+16535:     { return std::move(_Deque_iterator<_Tp, const _Tp&, const _Tp*>(__first),
+16535:          _Deque_iterator<_Tp, const _Tp&, const _Tp*>(__last),
+16535:          __result); }
+16535: 
+16535:   template<typename _Tp>
+16535:     _Deque_iterator<_Tp, _Tp&, _Tp*>
+16535:     move_backward(_Deque_iterator<_Tp, const _Tp&, const _Tp*>,
+16535:     _Deque_iterator<_Tp, const _Tp&, const _Tp*>,
+16535:     _Deque_iterator<_Tp, _Tp&, _Tp*>);
+16535: 
+16535:   template<typename _Tp>
+16535:     inline _Deque_iterator<_Tp, _Tp&, _Tp*>
+16535:     move_backward(_Deque_iterator<_Tp, _Tp&, _Tp*> __first,
+16535:     _Deque_iterator<_Tp, _Tp&, _Tp*> __last,
+16535:     _Deque_iterator<_Tp, _Tp&, _Tp*> __result)
+16535:     { return std::move_backward(_Deque_iterator<_Tp,
+16535:     const _Tp&, const _Tp*>(__first),
+16535:     _Deque_iterator<_Tp,
+16535:     const _Tp&, const _Tp*>(__last),
+16535:     __result); }
+16535: # 460 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:   template<typename _Tp, typename _Alloc>
+16535:     class _Deque_base
+16535:     {
+16535:     protected:
+16535:       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
+16535:  rebind<_Tp>::other _Tp_alloc_type;
+16535:       typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Alloc_traits;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       typedef typename _Alloc_traits::pointer _Ptr;
+16535:       typedef typename _Alloc_traits::const_pointer _Ptr_const;
+16535: 
+16535: 
+16535:       typedef typename _Alloc_traits::template rebind<_Ptr>::other
+16535:  _Map_alloc_type;
+16535:       typedef __gnu_cxx::__alloc_traits<_Map_alloc_type> _Map_alloc_traits;
+16535: 
+16535:     public:
+16535:       typedef _Alloc allocator_type;
+16535:       typedef typename _Alloc_traits::size_type size_type;
+16535: 
+16535:       allocator_type
+16535:       get_allocator() const noexcept
+16535:       { return allocator_type(_M_get_Tp_allocator()); }
+16535: 
+16535:       typedef _Deque_iterator<_Tp, _Tp&, _Ptr> iterator;
+16535:       typedef _Deque_iterator<_Tp, const _Tp&, _Ptr_const> const_iterator;
+16535: 
+16535:       _Deque_base()
+16535:       : _M_impl()
+16535:       { _M_initialize_map(0); }
+16535: 
+16535:       _Deque_base(size_t __num_elements)
+16535:       : _M_impl()
+16535:       { _M_initialize_map(__num_elements); }
+16535: 
+16535:       _Deque_base(const allocator_type& __a, size_t __num_elements)
+16535:       : _M_impl(__a)
+16535:       { _M_initialize_map(__num_elements); }
+16535: 
+16535:       _Deque_base(const allocator_type& __a)
+16535:       : _M_impl(__a)
+16535:       { }
+16535: 
+16535: 
+16535:       _Deque_base(_Deque_base&& __x, false_type)
+16535:       : _M_impl(__x._M_move_impl())
+16535:       { }
+16535: 
+16535:       _Deque_base(_Deque_base&& __x, true_type)
+16535:       : _M_impl(std::move(__x._M_get_Tp_allocator()))
+16535:       {
+16535:  _M_initialize_map(0);
+16535:  if (__x._M_impl._M_map)
+16535:    this->_M_impl._M_swap_data(__x._M_impl);
+16535:       }
+16535: 
+16535:       _Deque_base(_Deque_base&& __x)
+16535:       : _Deque_base(std::move(__x), typename _Alloc_traits::is_always_equal{})
+16535:       { }
+16535: 
+16535:       _Deque_base(_Deque_base&& __x, const allocator_type& __a, size_type __n)
+16535:       : _M_impl(__a)
+16535:       {
+16535:  if (__x.get_allocator() == __a)
+16535:    {
+16535:      if (__x._M_impl._M_map)
+16535:        {
+16535:   _M_initialize_map(0);
+16535:   this->_M_impl._M_swap_data(__x._M_impl);
+16535:        }
+16535:    }
+16535:  else
+16535:    {
+16535:      _M_initialize_map(__n);
+16535:    }
+16535:       }
+16535: 
+16535: 
+16535:       ~_Deque_base() noexcept;
+16535: 
+16535:     protected:
+16535:       typedef typename iterator::_Map_pointer _Map_pointer;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       struct _Deque_impl
+16535:       : public _Tp_alloc_type
+16535:       {
+16535:  _Map_pointer _M_map;
+16535:  size_t _M_map_size;
+16535:  iterator _M_start;
+16535:  iterator _M_finish;
+16535: 
+16535:  _Deque_impl()
+16535:  : _Tp_alloc_type(), _M_map(), _M_map_size(0),
+16535:    _M_start(), _M_finish()
+16535:  { }
+16535: 
+16535:  _Deque_impl(const _Tp_alloc_type& __a) noexcept
+16535:  : _Tp_alloc_type(__a), _M_map(), _M_map_size(0),
+16535:    _M_start(), _M_finish()
+16535:  { }
+16535: 
+16535: 
+16535:  _Deque_impl(_Deque_impl&&) = default;
+16535: 
+16535:  _Deque_impl(_Tp_alloc_type&& __a) noexcept
+16535:  : _Tp_alloc_type(std::move(__a)), _M_map(), _M_map_size(0),
+16535:    _M_start(), _M_finish()
+16535:  { }
+16535: 
+16535: 
+16535:  void _M_swap_data(_Deque_impl& __x) noexcept
+16535:  {
+16535:    using std::swap;
+16535:    swap(this->_M_start, __x._M_start);
+16535:    swap(this->_M_finish, __x._M_finish);
+16535:    swap(this->_M_map, __x._M_map);
+16535:    swap(this->_M_map_size, __x._M_map_size);
+16535:  }
+16535:       };
+16535: 
+16535:       _Tp_alloc_type&
+16535:       _M_get_Tp_allocator() noexcept
+16535:       { return *static_cast<_Tp_alloc_type*>(&this->_M_impl); }
+16535: 
+16535:       const _Tp_alloc_type&
+16535:       _M_get_Tp_allocator() const noexcept
+16535:       { return *static_cast<const _Tp_alloc_type*>(&this->_M_impl); }
+16535: 
+16535:       _Map_alloc_type
+16535:       _M_get_map_allocator() const noexcept
+16535:       { return _Map_alloc_type(_M_get_Tp_allocator()); }
+16535: 
+16535:       _Ptr
+16535:       _M_allocate_node()
+16535:       {
+16535:  typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Traits;
+16535:  return _Traits::allocate(_M_impl, __deque_buf_size(sizeof(_Tp)));
+16535:       }
+16535: 
+16535:       void
+16535:       _M_deallocate_node(_Ptr __p) noexcept
+16535:       {
+16535:  typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Traits;
+16535:  _Traits::deallocate(_M_impl, __p, __deque_buf_size(sizeof(_Tp)));
+16535:       }
+16535: 
+16535:       _Map_pointer
+16535:       _M_allocate_map(size_t __n)
+16535:       {
+16535:  _Map_alloc_type __map_alloc = _M_get_map_allocator();
+16535:  return _Map_alloc_traits::allocate(__map_alloc, __n);
+16535:       }
+16535: 
+16535:       void
+16535:       _M_deallocate_map(_Map_pointer __p, size_t __n) noexcept
+16535:       {
+16535:  _Map_alloc_type __map_alloc = _M_get_map_allocator();
+16535:  _Map_alloc_traits::deallocate(__map_alloc, __p, __n);
+16535:       }
+16535: 
+16535:     protected:
+16535:       void _M_initialize_map(size_t);
+16535:       void _M_create_nodes(_Map_pointer __nstart, _Map_pointer __nfinish);
+16535:       void _M_destroy_nodes(_Map_pointer __nstart,
+16535:        _Map_pointer __nfinish) noexcept;
+16535:       enum { _S_initial_map_size = 8 };
+16535: 
+16535:       _Deque_impl _M_impl;
+16535: 
+16535: 
+16535:     private:
+16535:       _Deque_impl
+16535:       _M_move_impl()
+16535:       {
+16535:  if (!_M_impl._M_map)
+16535:    return std::move(_M_impl);
+16535: 
+16535: 
+16535:  _Tp_alloc_type __alloc{_M_get_Tp_allocator()};
+16535: 
+16535:  _Tp_alloc_type __sink __attribute((__unused__)) {std::move(__alloc)};
+16535: 
+16535:  _Deque_base __empty{__alloc};
+16535:  __empty._M_initialize_map(0);
+16535: 
+16535:  _Deque_impl __ret{std::move(_M_get_Tp_allocator())};
+16535:  _M_impl._M_swap_data(__ret);
+16535:  _M_impl._M_swap_data(__empty._M_impl);
+16535:  return __ret;
+16535:       }
+16535: 
+16535:     };
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     _Deque_base<_Tp, _Alloc>::
+16535:     ~_Deque_base() noexcept
+16535:     {
+16535:       if (this->_M_impl._M_map)
+16535:  {
+16535:    _M_destroy_nodes(this->_M_impl._M_start._M_node,
+16535:       this->_M_impl._M_finish._M_node + 1);
+16535:    _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size);
+16535:  }
+16535:     }
+16535: # 680 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:   template<typename _Tp, typename _Alloc>
+16535:     void
+16535:     _Deque_base<_Tp, _Alloc>::
+16535:     _M_initialize_map(size_t __num_elements)
+16535:     {
+16535:       const size_t __num_nodes = (__num_elements/ __deque_buf_size(sizeof(_Tp))
+16535:       + 1);
+16535: 
+16535:       this->_M_impl._M_map_size = std::max((size_t) _S_initial_map_size,
+16535:         size_t(__num_nodes + 2));
+16535:       this->_M_impl._M_map = _M_allocate_map(this->_M_impl._M_map_size);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       _Map_pointer __nstart = (this->_M_impl._M_map
+16535:           + (this->_M_impl._M_map_size - __num_nodes) / 2);
+16535:       _Map_pointer __nfinish = __nstart + __num_nodes;
+16535: 
+16535:       try
+16535:  { _M_create_nodes(__nstart, __nfinish); }
+16535:       catch(...)
+16535:  {
+16535:    _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size);
+16535:    this->_M_impl._M_map = _Map_pointer();
+16535:    this->_M_impl._M_map_size = 0;
+16535:    throw;
+16535:  }
+16535: 
+16535:       this->_M_impl._M_start._M_set_node(__nstart);
+16535:       this->_M_impl._M_finish._M_set_node(__nfinish - 1);
+16535:       this->_M_impl._M_start._M_cur = _M_impl._M_start._M_first;
+16535:       this->_M_impl._M_finish._M_cur = (this->_M_impl._M_finish._M_first
+16535:      + __num_elements
+16535:      % __deque_buf_size(sizeof(_Tp)));
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     void
+16535:     _Deque_base<_Tp, _Alloc>::
+16535:     _M_create_nodes(_Map_pointer __nstart, _Map_pointer __nfinish)
+16535:     {
+16535:       _Map_pointer __cur;
+16535:       try
+16535:  {
+16535:    for (__cur = __nstart; __cur < __nfinish; ++__cur)
+16535:      *__cur = this->_M_allocate_node();
+16535:  }
+16535:       catch(...)
+16535:  {
+16535:    _M_destroy_nodes(__nstart, __cur);
+16535:    throw;
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     void
+16535:     _Deque_base<_Tp, _Alloc>::
+16535:     _M_destroy_nodes(_Map_pointer __nstart,
+16535:        _Map_pointer __nfinish) noexcept
+16535:     {
+16535:       for (_Map_pointer __n = __nstart; __n < __nfinish; ++__n)
+16535:  _M_deallocate_node(*__n);
+16535:     }
+16535: # 831 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:   template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
+16535:     class deque : protected _Deque_base<_Tp, _Alloc>
+16535:     {
+16535: # 844 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       static_assert(is_same<typename remove_cv<_Tp>::type, _Tp>::value,
+16535:    "std::deque must have a non-const, non-volatile value_type");
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       typedef _Deque_base<_Tp, _Alloc> _Base;
+16535:       typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
+16535:       typedef typename _Base::_Alloc_traits _Alloc_traits;
+16535:       typedef typename _Base::_Map_pointer _Map_pointer;
+16535: 
+16535:     public:
+16535:       typedef _Tp value_type;
+16535:       typedef typename _Alloc_traits::pointer pointer;
+16535:       typedef typename _Alloc_traits::const_pointer const_pointer;
+16535:       typedef typename _Alloc_traits::reference reference;
+16535:       typedef typename _Alloc_traits::const_reference const_reference;
+16535:       typedef typename _Base::iterator iterator;
+16535:       typedef typename _Base::const_iterator const_iterator;
+16535:       typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+16535:       typedef std::reverse_iterator<iterator> reverse_iterator;
+16535:       typedef size_t size_type;
+16535:       typedef ptrdiff_t difference_type;
+16535:       typedef _Alloc allocator_type;
+16535: 
+16535:     protected:
+16535:       static size_t _S_buffer_size() noexcept
+16535:       { return __deque_buf_size(sizeof(_Tp)); }
+16535: 
+16535: 
+16535:       using _Base::_M_initialize_map;
+16535:       using _Base::_M_create_nodes;
+16535:       using _Base::_M_destroy_nodes;
+16535:       using _Base::_M_allocate_node;
+16535:       using _Base::_M_deallocate_node;
+16535:       using _Base::_M_allocate_map;
+16535:       using _Base::_M_deallocate_map;
+16535:       using _Base::_M_get_Tp_allocator;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       using _Base::_M_impl;
+16535: 
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       deque() : _Base() { }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       explicit
+16535:       deque(const allocator_type& __a)
+16535:       : _Base(__a, 0) { }
+16535: # 917 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       explicit
+16535:       deque(size_type __n, const allocator_type& __a = allocator_type())
+16535:       : _Base(__a, __n)
+16535:       { _M_default_initialize(); }
+16535: # 930 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       deque(size_type __n, const value_type& __value,
+16535:      const allocator_type& __a = allocator_type())
+16535:       : _Base(__a, __n)
+16535:       { _M_fill_initialize(__value); }
+16535: # 957 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       deque(const deque& __x)
+16535:       : _Base(_Alloc_traits::_S_select_on_copy(__x._M_get_Tp_allocator()),
+16535:        __x.size())
+16535:       { std::__uninitialized_copy_a(__x.begin(), __x.end(),
+16535:         this->_M_impl._M_start,
+16535:         _M_get_Tp_allocator()); }
+16535: # 972 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       deque(deque&& __x)
+16535:       : _Base(std::move(__x)) { }
+16535: 
+16535: 
+16535:       deque(const deque& __x, const allocator_type& __a)
+16535:       : _Base(__a, __x.size())
+16535:       { std::__uninitialized_copy_a(__x.begin(), __x.end(),
+16535:         this->_M_impl._M_start,
+16535:         _M_get_Tp_allocator()); }
+16535: 
+16535: 
+16535:       deque(deque&& __x, const allocator_type& __a)
+16535:       : _Base(std::move(__x), __a, __x.size())
+16535:       {
+16535:  if (__x.get_allocator() != __a)
+16535:    {
+16535:      std::__uninitialized_move_a(__x.begin(), __x.end(),
+16535:      this->_M_impl._M_start,
+16535:      _M_get_Tp_allocator());
+16535:      __x.clear();
+16535:    }
+16535:       }
+16535: # 1006 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       deque(initializer_list<value_type> __l,
+16535:      const allocator_type& __a = allocator_type())
+16535:       : _Base(__a)
+16535:       {
+16535:  _M_range_initialize(__l.begin(), __l.end(),
+16535:        random_access_iterator_tag());
+16535:       }
+16535: # 1031 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       template<typename _InputIterator,
+16535:         typename = std::_RequireInputIter<_InputIterator>>
+16535:  deque(_InputIterator __first, _InputIterator __last,
+16535:        const allocator_type& __a = allocator_type())
+16535:  : _Base(__a)
+16535:  { _M_initialize_dispatch(__first, __last, __false_type()); }
+16535: # 1054 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       ~deque()
+16535:       { _M_destroy_data(begin(), end(), _M_get_Tp_allocator()); }
+16535: # 1066 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       deque&
+16535:       operator=(const deque& __x);
+16535: # 1078 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       deque&
+16535:       operator=(deque&& __x) noexcept(_Alloc_traits::_S_always_equal())
+16535:       {
+16535:  using __always_equal = typename _Alloc_traits::is_always_equal;
+16535:  _M_move_assign1(std::move(__x), __always_equal{});
+16535:  return *this;
+16535:       }
+16535: # 1097 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       deque&
+16535:       operator=(initializer_list<value_type> __l)
+16535:       {
+16535:  _M_assign_aux(__l.begin(), __l.end(),
+16535:         random_access_iterator_tag());
+16535:  return *this;
+16535:       }
+16535: # 1116 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       void
+16535:       assign(size_type __n, const value_type& __val)
+16535:       { _M_fill_assign(__n, __val); }
+16535: # 1133 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       template<typename _InputIterator,
+16535:         typename = std::_RequireInputIter<_InputIterator>>
+16535:  void
+16535:  assign(_InputIterator __first, _InputIterator __last)
+16535:  { _M_assign_dispatch(__first, __last, __false_type()); }
+16535: # 1160 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       void
+16535:       assign(initializer_list<value_type> __l)
+16535:       { _M_assign_aux(__l.begin(), __l.end(), random_access_iterator_tag()); }
+16535: 
+16535: 
+16535: 
+16535:       allocator_type
+16535:       get_allocator() const noexcept
+16535:       { return _Base::get_allocator(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       begin() noexcept
+16535:       { return this->_M_impl._M_start; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       begin() const noexcept
+16535:       { return this->_M_impl._M_start; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       end() noexcept
+16535:       { return this->_M_impl._M_finish; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       end() const noexcept
+16535:       { return this->_M_impl._M_finish; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       rbegin() noexcept
+16535:       { return reverse_iterator(this->_M_impl._M_finish); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       rbegin() const noexcept
+16535:       { return const_reverse_iterator(this->_M_impl._M_finish); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       rend() noexcept
+16535:       { return reverse_iterator(this->_M_impl._M_start); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       rend() const noexcept
+16535:       { return const_reverse_iterator(this->_M_impl._M_start); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       cbegin() const noexcept
+16535:       { return this->_M_impl._M_start; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       cend() const noexcept
+16535:       { return this->_M_impl._M_finish; }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       crbegin() const noexcept
+16535:       { return const_reverse_iterator(this->_M_impl._M_finish); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       crend() const noexcept
+16535:       { return const_reverse_iterator(this->_M_impl._M_start); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       size_type
+16535:       size() const noexcept
+16535:       { return this->_M_impl._M_finish - this->_M_impl._M_start; }
+16535: 
+16535: 
+16535:       size_type
+16535:       max_size() const noexcept
+16535:       { return _Alloc_traits::max_size(_M_get_Tp_allocator()); }
+16535: # 1299 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       void
+16535:       resize(size_type __new_size)
+16535:       {
+16535:  const size_type __len = size();
+16535:  if (__new_size > __len)
+16535:    _M_default_append(__new_size - __len);
+16535:  else if (__new_size < __len)
+16535:    _M_erase_at_end(this->_M_impl._M_start
+16535:      + difference_type(__new_size));
+16535:       }
+16535: # 1321 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       void
+16535:       resize(size_type __new_size, const value_type& __x)
+16535:       {
+16535:  const size_type __len = size();
+16535:  if (__new_size > __len)
+16535:    _M_fill_insert(this->_M_impl._M_finish, __new_size - __len, __x);
+16535:  else if (__new_size < __len)
+16535:    _M_erase_at_end(this->_M_impl._M_start
+16535:      + difference_type(__new_size));
+16535:       }
+16535: # 1357 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       void
+16535:       shrink_to_fit() noexcept
+16535:       { _M_shrink_to_fit(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       bool
+16535:       empty() const noexcept
+16535:       { return this->_M_impl._M_finish == this->_M_impl._M_start; }
+16535: # 1382 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       reference
+16535:       operator[](size_type __n) noexcept
+16535:       {
+16535:  ;
+16535:  return this->_M_impl._M_start[difference_type(__n)];
+16535:       }
+16535: # 1400 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       const_reference
+16535:       operator[](size_type __n) const noexcept
+16535:       {
+16535:  ;
+16535:  return this->_M_impl._M_start[difference_type(__n)];
+16535:       }
+16535: 
+16535:     protected:
+16535: 
+16535:       void
+16535:       _M_range_check(size_type __n) const
+16535:       {
+16535:  if (__n >= this->size())
+16535:    __throw_out_of_range_fmt(("deque::_M_range_check: __n " "(which is %zu)>= this->size() " "(which is %zu)")
+16535: 
+16535:                             ,
+16535:        __n, this->size());
+16535:       }
+16535: 
+16535:     public:
+16535: # 1431 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       reference
+16535:       at(size_type __n)
+16535:       {
+16535:  _M_range_check(__n);
+16535:  return (*this)[__n];
+16535:       }
+16535: # 1449 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       const_reference
+16535:       at(size_type __n) const
+16535:       {
+16535:  _M_range_check(__n);
+16535:  return (*this)[__n];
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reference
+16535:       front() noexcept
+16535:       {
+16535:  ;
+16535:  return *begin();
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reference
+16535:       front() const noexcept
+16535:       {
+16535:  ;
+16535:  return *begin();
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reference
+16535:       back() noexcept
+16535:       {
+16535:  ;
+16535:  iterator __tmp = end();
+16535:  --__tmp;
+16535:  return *__tmp;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reference
+16535:       back() const noexcept
+16535:       {
+16535:  ;
+16535:  const_iterator __tmp = end();
+16535:  --__tmp;
+16535:  return *__tmp;
+16535:       }
+16535: # 1514 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       void
+16535:       push_front(const value_type& __x)
+16535:       {
+16535:  if (this->_M_impl._M_start._M_cur != this->_M_impl._M_start._M_first)
+16535:    {
+16535:      _Alloc_traits::construct(this->_M_impl,
+16535:          this->_M_impl._M_start._M_cur - 1,
+16535:          __x);
+16535:      --this->_M_impl._M_start._M_cur;
+16535:    }
+16535:  else
+16535:    _M_push_front_aux(__x);
+16535:       }
+16535: 
+16535: 
+16535:       void
+16535:       push_front(value_type&& __x)
+16535:       { emplace_front(std::move(__x)); }
+16535: 
+16535:       template<typename... _Args>
+16535: 
+16535: 
+16535: 
+16535:  void
+16535: 
+16535:  emplace_front(_Args&&... __args);
+16535: # 1551 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       void
+16535:       push_back(const value_type& __x)
+16535:       {
+16535:  if (this->_M_impl._M_finish._M_cur
+16535:      != this->_M_impl._M_finish._M_last - 1)
+16535:    {
+16535:      _Alloc_traits::construct(this->_M_impl,
+16535:          this->_M_impl._M_finish._M_cur, __x);
+16535:      ++this->_M_impl._M_finish._M_cur;
+16535:    }
+16535:  else
+16535:    _M_push_back_aux(__x);
+16535:       }
+16535: 
+16535: 
+16535:       void
+16535:       push_back(value_type&& __x)
+16535:       { emplace_back(std::move(__x)); }
+16535: 
+16535:       template<typename... _Args>
+16535: 
+16535: 
+16535: 
+16535:  void
+16535: 
+16535:  emplace_back(_Args&&... __args);
+16535: # 1587 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       void
+16535:       pop_front() noexcept
+16535:       {
+16535:  ;
+16535:  if (this->_M_impl._M_start._M_cur
+16535:      != this->_M_impl._M_start._M_last - 1)
+16535:    {
+16535:      _Alloc_traits::destroy(this->_M_impl,
+16535:        this->_M_impl._M_start._M_cur);
+16535:      ++this->_M_impl._M_start._M_cur;
+16535:    }
+16535:  else
+16535:    _M_pop_front_aux();
+16535:       }
+16535: # 1610 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       void
+16535:       pop_back() noexcept
+16535:       {
+16535:  ;
+16535:  if (this->_M_impl._M_finish._M_cur
+16535:      != this->_M_impl._M_finish._M_first)
+16535:    {
+16535:      --this->_M_impl._M_finish._M_cur;
+16535:      _Alloc_traits::destroy(this->_M_impl,
+16535:        this->_M_impl._M_finish._M_cur);
+16535:    }
+16535:  else
+16535:    _M_pop_back_aux();
+16535:       }
+16535: # 1635 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       template<typename... _Args>
+16535:  iterator
+16535:  emplace(const_iterator __position, _Args&&... __args);
+16535: # 1648 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       iterator
+16535:       insert(const_iterator __position, const value_type& __x);
+16535: # 1674 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       iterator
+16535:       insert(const_iterator __position, value_type&& __x)
+16535:       { return emplace(__position, std::move(__x)); }
+16535: # 1687 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       iterator
+16535:       insert(const_iterator __p, initializer_list<value_type> __l)
+16535:       {
+16535:  auto __offset = __p - cbegin();
+16535:  _M_range_insert_aux(__p._M_const_cast(), __l.begin(), __l.end(),
+16535:        std::random_access_iterator_tag());
+16535:  return begin() + __offset;
+16535:       }
+16535: # 1708 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       iterator
+16535:       insert(const_iterator __position, size_type __n, const value_type& __x)
+16535:       {
+16535:  difference_type __offset = __position - cbegin();
+16535:  _M_fill_insert(__position._M_const_cast(), __n, __x);
+16535:  return begin() + __offset;
+16535:       }
+16535: # 1742 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       template<typename _InputIterator,
+16535:         typename = std::_RequireInputIter<_InputIterator>>
+16535:  iterator
+16535:  insert(const_iterator __position, _InputIterator __first,
+16535:         _InputIterator __last)
+16535:  {
+16535:    difference_type __offset = __position - cbegin();
+16535:    _M_insert_dispatch(__position._M_const_cast(),
+16535:         __first, __last, __false_type());
+16535:    return begin() + __offset;
+16535:  }
+16535: # 1788 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       iterator
+16535: 
+16535:       erase(const_iterator __position)
+16535: 
+16535: 
+16535: 
+16535:       { return _M_erase(__position._M_const_cast()); }
+16535: # 1812 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       iterator
+16535: 
+16535:       erase(const_iterator __first, const_iterator __last)
+16535: 
+16535: 
+16535: 
+16535:       { return _M_erase(__first._M_const_cast(), __last._M_const_cast()); }
+16535: # 1831 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       void
+16535:       swap(deque& __x) noexcept
+16535:       {
+16535: 
+16535: 
+16535:                                                           ;
+16535: 
+16535:  _M_impl._M_swap_data(__x._M_impl);
+16535:  _Alloc_traits::_S_on_swap(_M_get_Tp_allocator(),
+16535:       __x._M_get_Tp_allocator());
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       clear() noexcept
+16535:       { _M_erase_at_end(begin()); }
+16535: 
+16535:     protected:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Integer>
+16535:  void
+16535:  _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type)
+16535:  {
+16535:    _M_initialize_map(static_cast<size_type>(__n));
+16535:    _M_fill_initialize(__x);
+16535:  }
+16535: 
+16535: 
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
+16535:           __false_type)
+16535:  {
+16535:    _M_range_initialize(__first, __last,
+16535:          std::__iterator_category(__first));
+16535:  }
+16535: # 1890 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  _M_range_initialize(_InputIterator __first, _InputIterator __last,
+16535:        std::input_iterator_tag);
+16535: 
+16535: 
+16535:       template<typename _ForwardIterator>
+16535:  void
+16535:  _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last,
+16535:        std::forward_iterator_tag);
+16535: # 1912 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       void
+16535:       _M_fill_initialize(const value_type& __value);
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_default_initialize();
+16535: # 1928 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       template<typename _Integer>
+16535:  void
+16535:  _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
+16535:  { _M_fill_assign(__n, __val); }
+16535: 
+16535: 
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  _M_assign_dispatch(_InputIterator __first, _InputIterator __last,
+16535:       __false_type)
+16535:  { _M_assign_aux(__first, __last, std::__iterator_category(__first)); }
+16535: 
+16535: 
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  _M_assign_aux(_InputIterator __first, _InputIterator __last,
+16535:         std::input_iterator_tag);
+16535: 
+16535: 
+16535:       template<typename _ForwardIterator>
+16535:  void
+16535:  _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
+16535:         std::forward_iterator_tag)
+16535:  {
+16535:    const size_type __len = std::distance(__first, __last);
+16535:    if (__len > size())
+16535:      {
+16535:        _ForwardIterator __mid = __first;
+16535:        std::advance(__mid, size());
+16535:        std::copy(__first, __mid, begin());
+16535:        _M_range_insert_aux(end(), __mid, __last,
+16535:       std::__iterator_category(__first));
+16535:      }
+16535:    else
+16535:      _M_erase_at_end(std::copy(__first, __last, begin()));
+16535:  }
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_fill_assign(size_type __n, const value_type& __val)
+16535:       {
+16535:  if (__n > size())
+16535:    {
+16535:      std::fill(begin(), end(), __val);
+16535:      _M_fill_insert(end(), __n - size(), __val);
+16535:    }
+16535:  else
+16535:    {
+16535:      _M_erase_at_end(begin() + difference_type(__n));
+16535:      std::fill(begin(), end(), __val);
+16535:    }
+16535:       }
+16535: # 1989 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       template<typename... _Args>
+16535:  void _M_push_back_aux(_Args&&... __args);
+16535: 
+16535:       template<typename... _Args>
+16535:  void _M_push_front_aux(_Args&&... __args);
+16535: 
+16535: 
+16535:       void _M_pop_back_aux();
+16535: 
+16535:       void _M_pop_front_aux();
+16535: # 2008 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       template<typename _Integer>
+16535:  void
+16535:  _M_insert_dispatch(iterator __pos,
+16535:       _Integer __n, _Integer __x, __true_type)
+16535:  { _M_fill_insert(__pos, __n, __x); }
+16535: 
+16535: 
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  _M_insert_dispatch(iterator __pos,
+16535:       _InputIterator __first, _InputIterator __last,
+16535:       __false_type)
+16535:  {
+16535:    _M_range_insert_aux(__pos, __first, __last,
+16535:          std::__iterator_category(__first));
+16535:  }
+16535: 
+16535: 
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  _M_range_insert_aux(iterator __pos, _InputIterator __first,
+16535:        _InputIterator __last, std::input_iterator_tag);
+16535: 
+16535: 
+16535:       template<typename _ForwardIterator>
+16535:  void
+16535:  _M_range_insert_aux(iterator __pos, _ForwardIterator __first,
+16535:        _ForwardIterator __last, std::forward_iterator_tag);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_fill_insert(iterator __pos, size_type __n, const value_type& __x);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       template<typename... _Args>
+16535:  iterator
+16535:  _M_insert_aux(iterator __pos, _Args&&... __args);
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_insert_aux(iterator __pos, size_type __n, const value_type& __x);
+16535: 
+16535: 
+16535:       template<typename _ForwardIterator>
+16535:  void
+16535:  _M_insert_aux(iterator __pos,
+16535:         _ForwardIterator __first, _ForwardIterator __last,
+16535:         size_type __n);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_destroy_data_aux(iterator __first, iterator __last);
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Alloc1>
+16535:  void
+16535:  _M_destroy_data(iterator __first, iterator __last, const _Alloc1&)
+16535:  { _M_destroy_data_aux(__first, __last); }
+16535: 
+16535:       void
+16535:       _M_destroy_data(iterator __first, iterator __last,
+16535:         const std::allocator<_Tp>&)
+16535:       {
+16535:  if (!__has_trivial_destructor(value_type))
+16535:    _M_destroy_data_aux(__first, __last);
+16535:       }
+16535: 
+16535: 
+16535:       void
+16535:       _M_erase_at_begin(iterator __pos)
+16535:       {
+16535:  _M_destroy_data(begin(), __pos, _M_get_Tp_allocator());
+16535:  _M_destroy_nodes(this->_M_impl._M_start._M_node, __pos._M_node);
+16535:  this->_M_impl._M_start = __pos;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_erase_at_end(iterator __pos)
+16535:       {
+16535:  _M_destroy_data(__pos, end(), _M_get_Tp_allocator());
+16535:  _M_destroy_nodes(__pos._M_node + 1,
+16535:     this->_M_impl._M_finish._M_node + 1);
+16535:  this->_M_impl._M_finish = __pos;
+16535:       }
+16535: 
+16535:       iterator
+16535:       _M_erase(iterator __pos);
+16535: 
+16535:       iterator
+16535:       _M_erase(iterator __first, iterator __last);
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_default_append(size_type __n);
+16535: 
+16535:       bool
+16535:       _M_shrink_to_fit();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       _M_reserve_elements_at_front(size_type __n)
+16535:       {
+16535:  const size_type __vacancies = this->_M_impl._M_start._M_cur
+16535:           - this->_M_impl._M_start._M_first;
+16535:  if (__n > __vacancies)
+16535:    _M_new_elements_at_front(__n - __vacancies);
+16535:  return this->_M_impl._M_start - difference_type(__n);
+16535:       }
+16535: 
+16535:       iterator
+16535:       _M_reserve_elements_at_back(size_type __n)
+16535:       {
+16535:  const size_type __vacancies = (this->_M_impl._M_finish._M_last
+16535:            - this->_M_impl._M_finish._M_cur) - 1;
+16535:  if (__n > __vacancies)
+16535:    _M_new_elements_at_back(__n - __vacancies);
+16535:  return this->_M_impl._M_finish + difference_type(__n);
+16535:       }
+16535: 
+16535:       void
+16535:       _M_new_elements_at_front(size_type __new_elements);
+16535: 
+16535:       void
+16535:       _M_new_elements_at_back(size_type __new_elements);
+16535: # 2158 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:       void
+16535:       _M_reserve_map_at_back(size_type __nodes_to_add = 1)
+16535:       {
+16535:  if (__nodes_to_add + 1 > this->_M_impl._M_map_size
+16535:      - (this->_M_impl._M_finish._M_node - this->_M_impl._M_map))
+16535:    _M_reallocate_map(__nodes_to_add, false);
+16535:       }
+16535: 
+16535:       void
+16535:       _M_reserve_map_at_front(size_type __nodes_to_add = 1)
+16535:       {
+16535:  if (__nodes_to_add > size_type(this->_M_impl._M_start._M_node
+16535:            - this->_M_impl._M_map))
+16535:    _M_reallocate_map(__nodes_to_add, true);
+16535:       }
+16535: 
+16535:       void
+16535:       _M_reallocate_map(size_type __nodes_to_add, bool __add_at_front);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_move_assign1(deque&& __x, true_type) noexcept
+16535:       {
+16535:  this->_M_impl._M_swap_data(__x._M_impl);
+16535:  __x.clear();
+16535:  std::__alloc_on_move(_M_get_Tp_allocator(), __x._M_get_Tp_allocator());
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_move_assign1(deque&& __x, false_type)
+16535:       {
+16535:  constexpr bool __move_storage =
+16535:    _Alloc_traits::_S_propagate_on_move_assign();
+16535:  _M_move_assign2(std::move(__x), __bool_constant<__move_storage>());
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       template<typename... _Args>
+16535:       void
+16535:       _M_replace_map(_Args&&... __args)
+16535:       {
+16535: 
+16535:  deque __newobj(std::forward<_Args>(__args)...);
+16535: 
+16535:  clear();
+16535:  _M_deallocate_node(*begin()._M_node);
+16535:  _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size);
+16535:  this->_M_impl._M_map = nullptr;
+16535:  this->_M_impl._M_map_size = 0;
+16535: 
+16535:  this->_M_impl._M_swap_data(__newobj._M_impl);
+16535:       }
+16535: 
+16535: 
+16535:       void
+16535:       _M_move_assign2(deque&& __x, true_type)
+16535:       {
+16535: 
+16535:  auto __alloc = __x._M_get_Tp_allocator();
+16535: 
+16535: 
+16535:  _M_replace_map(std::move(__x));
+16535: 
+16535:  _M_get_Tp_allocator() = std::move(__alloc);
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_move_assign2(deque&& __x, false_type)
+16535:       {
+16535:  if (__x._M_get_Tp_allocator() == this->_M_get_Tp_allocator())
+16535:    {
+16535: 
+16535: 
+16535:      _M_replace_map(std::move(__x), __x.get_allocator());
+16535:    }
+16535:  else
+16535:    {
+16535: 
+16535: 
+16535:      _M_assign_aux(std::__make_move_if_noexcept_iterator(__x.begin()),
+16535:      std::__make_move_if_noexcept_iterator(__x.end()),
+16535:      std::random_access_iterator_tag());
+16535:      __x.clear();
+16535:    }
+16535:       }
+16535: 
+16535:     };
+16535: # 2275 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:   template<typename _Tp, typename _Alloc>
+16535:     inline bool
+16535:     operator==(const deque<_Tp, _Alloc>& __x,
+16535:                          const deque<_Tp, _Alloc>& __y)
+16535:     { return __x.size() == __y.size()
+16535:       && std::equal(__x.begin(), __x.end(), __y.begin()); }
+16535: # 2293 "/usr/include/c++/8/bits/stl_deque.h" 3
+16535:   template<typename _Tp, typename _Alloc>
+16535:     inline bool
+16535:     operator<(const deque<_Tp, _Alloc>& __x,
+16535:        const deque<_Tp, _Alloc>& __y)
+16535:     { return std::lexicographical_compare(__x.begin(), __x.end(),
+16535:        __y.begin(), __y.end()); }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     inline bool
+16535:     operator!=(const deque<_Tp, _Alloc>& __x,
+16535:         const deque<_Tp, _Alloc>& __y)
+16535:     { return !(__x == __y); }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     inline bool
+16535:     operator>(const deque<_Tp, _Alloc>& __x,
+16535:        const deque<_Tp, _Alloc>& __y)
+16535:     { return __y < __x; }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     inline bool
+16535:     operator<=(const deque<_Tp, _Alloc>& __x,
+16535:         const deque<_Tp, _Alloc>& __y)
+16535:     { return !(__y < __x); }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     inline bool
+16535:     operator>=(const deque<_Tp, _Alloc>& __x,
+16535:         const deque<_Tp, _Alloc>& __y)
+16535:     { return !(__x < __y); }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     inline void
+16535:     swap(deque<_Tp,_Alloc>& __x, deque<_Tp,_Alloc>& __y)
+16535:     noexcept(noexcept(__x.swap(__y)))
+16535:     { __x.swap(__y); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 65 "/usr/include/c++/8/deque" 2 3
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/deque.tcc" 1 3
+16535: # 59 "/usr/include/c++/8/bits/deque.tcc" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename _Tp, typename _Alloc>
+16535:     void
+16535:     deque<_Tp, _Alloc>::
+16535:     _M_default_initialize()
+16535:     {
+16535:       _Map_pointer __cur;
+16535:       try
+16535:         {
+16535:           for (__cur = this->_M_impl._M_start._M_node;
+16535:         __cur < this->_M_impl._M_finish._M_node;
+16535:         ++__cur)
+16535:             std::__uninitialized_default_a(*__cur, *__cur + _S_buffer_size(),
+16535:         _M_get_Tp_allocator());
+16535:           std::__uninitialized_default_a(this->_M_impl._M_finish._M_first,
+16535:       this->_M_impl._M_finish._M_cur,
+16535:       _M_get_Tp_allocator());
+16535:         }
+16535:       catch(...)
+16535:         {
+16535:           std::_Destroy(this->_M_impl._M_start, iterator(*__cur, __cur),
+16535:    _M_get_Tp_allocator());
+16535:           throw;
+16535:         }
+16535:     }
+16535: 
+16535: 
+16535:   template <typename _Tp, typename _Alloc>
+16535:     deque<_Tp, _Alloc>&
+16535:     deque<_Tp, _Alloc>::
+16535:     operator=(const deque& __x)
+16535:     {
+16535:       if (&__x != this)
+16535:  {
+16535: 
+16535:    if (_Alloc_traits::_S_propagate_on_copy_assign())
+16535:      {
+16535:        if (!_Alloc_traits::_S_always_equal()
+16535:            && _M_get_Tp_allocator() != __x._M_get_Tp_allocator())
+16535:          {
+16535: 
+16535: 
+16535:     _M_replace_map(__x, __x.get_allocator());
+16535:     std::__alloc_on_copy(_M_get_Tp_allocator(),
+16535:            __x._M_get_Tp_allocator());
+16535:     return *this;
+16535:   }
+16535:        std::__alloc_on_copy(_M_get_Tp_allocator(),
+16535:        __x._M_get_Tp_allocator());
+16535:      }
+16535: 
+16535:    const size_type __len = size();
+16535:    if (__len >= __x.size())
+16535:      _M_erase_at_end(std::copy(__x.begin(), __x.end(),
+16535:           this->_M_impl._M_start));
+16535:    else
+16535:      {
+16535:        const_iterator __mid = __x.begin() + difference_type(__len);
+16535:        std::copy(__x.begin(), __mid, this->_M_impl._M_start);
+16535:        _M_range_insert_aux(this->_M_impl._M_finish, __mid, __x.end(),
+16535:       std::random_access_iterator_tag());
+16535:      }
+16535:  }
+16535:       return *this;
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     template<typename... _Args>
+16535: 
+16535: 
+16535: 
+16535:       void
+16535: 
+16535:       deque<_Tp, _Alloc>::
+16535:       emplace_front(_Args&&... __args)
+16535:       {
+16535:  if (this->_M_impl._M_start._M_cur != this->_M_impl._M_start._M_first)
+16535:    {
+16535:      _Alloc_traits::construct(this->_M_impl,
+16535:                               this->_M_impl._M_start._M_cur - 1,
+16535:                 std::forward<_Args>(__args)...);
+16535:      --this->_M_impl._M_start._M_cur;
+16535:    }
+16535:  else
+16535:    _M_push_front_aux(std::forward<_Args>(__args)...);
+16535: 
+16535: 
+16535: 
+16535:       }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     template<typename... _Args>
+16535: 
+16535: 
+16535: 
+16535:       void
+16535: 
+16535:       deque<_Tp, _Alloc>::
+16535:       emplace_back(_Args&&... __args)
+16535:       {
+16535:  if (this->_M_impl._M_finish._M_cur
+16535:      != this->_M_impl._M_finish._M_last - 1)
+16535:    {
+16535:      _Alloc_traits::construct(this->_M_impl,
+16535:                               this->_M_impl._M_finish._M_cur,
+16535:                 std::forward<_Args>(__args)...);
+16535:      ++this->_M_impl._M_finish._M_cur;
+16535:    }
+16535:  else
+16535:    _M_push_back_aux(std::forward<_Args>(__args)...);
+16535: 
+16535: 
+16535: 
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     template<typename... _Args>
+16535:       typename deque<_Tp, _Alloc>::iterator
+16535:       deque<_Tp, _Alloc>::
+16535:       emplace(const_iterator __position, _Args&&... __args)
+16535:       {
+16535:  if (__position._M_cur == this->_M_impl._M_start._M_cur)
+16535:    {
+16535:      emplace_front(std::forward<_Args>(__args)...);
+16535:      return this->_M_impl._M_start;
+16535:    }
+16535:  else if (__position._M_cur == this->_M_impl._M_finish._M_cur)
+16535:    {
+16535:      emplace_back(std::forward<_Args>(__args)...);
+16535:      iterator __tmp = this->_M_impl._M_finish;
+16535:      --__tmp;
+16535:      return __tmp;
+16535:    }
+16535:  else
+16535:    return _M_insert_aux(__position._M_const_cast(),
+16535:           std::forward<_Args>(__args)...);
+16535:       }
+16535: 
+16535: 
+16535:   template <typename _Tp, typename _Alloc>
+16535:     typename deque<_Tp, _Alloc>::iterator
+16535:     deque<_Tp, _Alloc>::
+16535: 
+16535:     insert(const_iterator __position, const value_type& __x)
+16535: 
+16535: 
+16535: 
+16535:     {
+16535:       if (__position._M_cur == this->_M_impl._M_start._M_cur)
+16535:  {
+16535:    push_front(__x);
+16535:    return this->_M_impl._M_start;
+16535:  }
+16535:       else if (__position._M_cur == this->_M_impl._M_finish._M_cur)
+16535:  {
+16535:    push_back(__x);
+16535:    iterator __tmp = this->_M_impl._M_finish;
+16535:    --__tmp;
+16535:    return __tmp;
+16535:  }
+16535:       else
+16535:  return _M_insert_aux(__position._M_const_cast(), __x);
+16535:    }
+16535: 
+16535:   template <typename _Tp, typename _Alloc>
+16535:     typename deque<_Tp, _Alloc>::iterator
+16535:     deque<_Tp, _Alloc>::
+16535:     _M_erase(iterator __position)
+16535:     {
+16535:       iterator __next = __position;
+16535:       ++__next;
+16535:       const difference_type __index = __position - begin();
+16535:       if (static_cast<size_type>(__index) < (size() >> 1))
+16535:  {
+16535:    if (__position != begin())
+16535:      std::move_backward(begin(), __position, __next);
+16535:    pop_front();
+16535:  }
+16535:       else
+16535:  {
+16535:    if (__next != end())
+16535:      std::move(__next, end(), __position);
+16535:    pop_back();
+16535:  }
+16535:       return begin() + __index;
+16535:     }
+16535: 
+16535:   template <typename _Tp, typename _Alloc>
+16535:     typename deque<_Tp, _Alloc>::iterator
+16535:     deque<_Tp, _Alloc>::
+16535:     _M_erase(iterator __first, iterator __last)
+16535:     {
+16535:       if (__first == __last)
+16535:  return __first;
+16535:       else if (__first == begin() && __last == end())
+16535:  {
+16535:    clear();
+16535:    return end();
+16535:  }
+16535:       else
+16535:  {
+16535:    const difference_type __n = __last - __first;
+16535:    const difference_type __elems_before = __first - begin();
+16535:    if (static_cast<size_type>(__elems_before) <= (size() - __n) / 2)
+16535:      {
+16535:        if (__first != begin())
+16535:   std::move_backward(begin(), __first, __last);
+16535:        _M_erase_at_begin(begin() + __n);
+16535:      }
+16535:    else
+16535:      {
+16535:        if (__last != end())
+16535:   std::move(__last, end(), __first);
+16535:        _M_erase_at_end(end() - __n);
+16535:      }
+16535:    return begin() + __elems_before;
+16535:  }
+16535:     }
+16535: 
+16535:   template <typename _Tp, class _Alloc>
+16535:     template <typename _InputIterator>
+16535:       void
+16535:       deque<_Tp, _Alloc>::
+16535:       _M_assign_aux(_InputIterator __first, _InputIterator __last,
+16535:       std::input_iterator_tag)
+16535:       {
+16535:         iterator __cur = begin();
+16535:         for (; __first != __last && __cur != end(); ++__cur, ++__first)
+16535:           *__cur = *__first;
+16535:         if (__first == __last)
+16535:           _M_erase_at_end(__cur);
+16535:         else
+16535:           _M_range_insert_aux(end(), __first, __last,
+16535:          std::__iterator_category(__first));
+16535:       }
+16535: 
+16535:   template <typename _Tp, typename _Alloc>
+16535:     void
+16535:     deque<_Tp, _Alloc>::
+16535:     _M_fill_insert(iterator __pos, size_type __n, const value_type& __x)
+16535:     {
+16535:       if (__pos._M_cur == this->_M_impl._M_start._M_cur)
+16535:  {
+16535:    iterator __new_start = _M_reserve_elements_at_front(__n);
+16535:    try
+16535:      {
+16535:        std::__uninitialized_fill_a(__new_start, this->_M_impl._M_start,
+16535:        __x, _M_get_Tp_allocator());
+16535:        this->_M_impl._M_start = __new_start;
+16535:      }
+16535:    catch(...)
+16535:      {
+16535:        _M_destroy_nodes(__new_start._M_node,
+16535:           this->_M_impl._M_start._M_node);
+16535:        throw;
+16535:      }
+16535:  }
+16535:       else if (__pos._M_cur == this->_M_impl._M_finish._M_cur)
+16535:  {
+16535:    iterator __new_finish = _M_reserve_elements_at_back(__n);
+16535:    try
+16535:      {
+16535:        std::__uninitialized_fill_a(this->_M_impl._M_finish,
+16535:        __new_finish, __x,
+16535:        _M_get_Tp_allocator());
+16535:        this->_M_impl._M_finish = __new_finish;
+16535:      }
+16535:    catch(...)
+16535:      {
+16535:        _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1,
+16535:           __new_finish._M_node + 1);
+16535:        throw;
+16535:      }
+16535:  }
+16535:       else
+16535:         _M_insert_aux(__pos, __n, __x);
+16535:     }
+16535: 
+16535: 
+16535:   template <typename _Tp, typename _Alloc>
+16535:     void
+16535:     deque<_Tp, _Alloc>::
+16535:     _M_default_append(size_type __n)
+16535:     {
+16535:       if (__n)
+16535:  {
+16535:    iterator __new_finish = _M_reserve_elements_at_back(__n);
+16535:    try
+16535:      {
+16535:        std::__uninitialized_default_a(this->_M_impl._M_finish,
+16535:           __new_finish,
+16535:           _M_get_Tp_allocator());
+16535:        this->_M_impl._M_finish = __new_finish;
+16535:      }
+16535:    catch(...)
+16535:      {
+16535:        _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1,
+16535:           __new_finish._M_node + 1);
+16535:        throw;
+16535:      }
+16535:  }
+16535:     }
+16535: 
+16535:   template <typename _Tp, typename _Alloc>
+16535:     bool
+16535:     deque<_Tp, _Alloc>::
+16535:     _M_shrink_to_fit()
+16535:     {
+16535:       const difference_type __front_capacity
+16535:  = (this->_M_impl._M_start._M_cur - this->_M_impl._M_start._M_first);
+16535:       if (__front_capacity == 0)
+16535:  return false;
+16535: 
+16535:       const difference_type __back_capacity
+16535:  = (this->_M_impl._M_finish._M_last - this->_M_impl._M_finish._M_cur);
+16535:       if (__front_capacity + __back_capacity < _S_buffer_size())
+16535:  return false;
+16535: 
+16535:       return std::__shrink_to_fit_aux<deque>::_S_do_it(*this);
+16535:     }
+16535: 
+16535: 
+16535:   template <typename _Tp, typename _Alloc>
+16535:     void
+16535:     deque<_Tp, _Alloc>::
+16535:     _M_fill_initialize(const value_type& __value)
+16535:     {
+16535:       _Map_pointer __cur;
+16535:       try
+16535:         {
+16535:           for (__cur = this->_M_impl._M_start._M_node;
+16535:         __cur < this->_M_impl._M_finish._M_node;
+16535:         ++__cur)
+16535:             std::__uninitialized_fill_a(*__cur, *__cur + _S_buffer_size(),
+16535:      __value, _M_get_Tp_allocator());
+16535:           std::__uninitialized_fill_a(this->_M_impl._M_finish._M_first,
+16535:           this->_M_impl._M_finish._M_cur,
+16535:           __value, _M_get_Tp_allocator());
+16535:         }
+16535:       catch(...)
+16535:         {
+16535:           std::_Destroy(this->_M_impl._M_start, iterator(*__cur, __cur),
+16535:    _M_get_Tp_allocator());
+16535:           throw;
+16535:         }
+16535:     }
+16535: 
+16535:   template <typename _Tp, typename _Alloc>
+16535:     template <typename _InputIterator>
+16535:       void
+16535:       deque<_Tp, _Alloc>::
+16535:       _M_range_initialize(_InputIterator __first, _InputIterator __last,
+16535:                           std::input_iterator_tag)
+16535:       {
+16535:         this->_M_initialize_map(0);
+16535:         try
+16535:           {
+16535:             for (; __first != __last; ++__first)
+16535: 
+16535:        emplace_back(*__first);
+16535: 
+16535: 
+16535: 
+16535:           }
+16535:         catch(...)
+16535:           {
+16535:             clear();
+16535:             throw;
+16535:           }
+16535:       }
+16535: 
+16535:   template <typename _Tp, typename _Alloc>
+16535:     template <typename _ForwardIterator>
+16535:       void
+16535:       deque<_Tp, _Alloc>::
+16535:       _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last,
+16535:                           std::forward_iterator_tag)
+16535:       {
+16535:         const size_type __n = std::distance(__first, __last);
+16535:         this->_M_initialize_map(__n);
+16535: 
+16535:         _Map_pointer __cur_node;
+16535:         try
+16535:           {
+16535:             for (__cur_node = this->_M_impl._M_start._M_node;
+16535:                  __cur_node < this->_M_impl._M_finish._M_node;
+16535:                  ++__cur_node)
+16535:        {
+16535:   _ForwardIterator __mid = __first;
+16535:   std::advance(__mid, _S_buffer_size());
+16535:   std::__uninitialized_copy_a(__first, __mid, *__cur_node,
+16535:          _M_get_Tp_allocator());
+16535:   __first = __mid;
+16535:        }
+16535:             std::__uninitialized_copy_a(__first, __last,
+16535:      this->_M_impl._M_finish._M_first,
+16535:      _M_get_Tp_allocator());
+16535:           }
+16535:         catch(...)
+16535:           {
+16535:             std::_Destroy(this->_M_impl._M_start,
+16535:      iterator(*__cur_node, __cur_node),
+16535:      _M_get_Tp_allocator());
+16535:             throw;
+16535:           }
+16535:       }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535: 
+16535:     template<typename... _Args>
+16535:       void
+16535:       deque<_Tp, _Alloc>::
+16535:       _M_push_back_aux(_Args&&... __args)
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       {
+16535:  _M_reserve_map_at_back();
+16535:  *(this->_M_impl._M_finish._M_node + 1) = this->_M_allocate_node();
+16535:  try
+16535:    {
+16535: 
+16535:      _Alloc_traits::construct(this->_M_impl,
+16535:                               this->_M_impl._M_finish._M_cur,
+16535:                 std::forward<_Args>(__args)...);
+16535: 
+16535: 
+16535: 
+16535:      this->_M_impl._M_finish._M_set_node(this->_M_impl._M_finish._M_node
+16535:       + 1);
+16535:      this->_M_impl._M_finish._M_cur = this->_M_impl._M_finish._M_first;
+16535:    }
+16535:  catch(...)
+16535:    {
+16535:      _M_deallocate_node(*(this->_M_impl._M_finish._M_node + 1));
+16535:      throw;
+16535:    }
+16535:       }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535: 
+16535:     template<typename... _Args>
+16535:       void
+16535:       deque<_Tp, _Alloc>::
+16535:       _M_push_front_aux(_Args&&... __args)
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       {
+16535:  _M_reserve_map_at_front();
+16535:  *(this->_M_impl._M_start._M_node - 1) = this->_M_allocate_node();
+16535:  try
+16535:    {
+16535:      this->_M_impl._M_start._M_set_node(this->_M_impl._M_start._M_node
+16535:             - 1);
+16535:      this->_M_impl._M_start._M_cur = this->_M_impl._M_start._M_last - 1;
+16535: 
+16535:      _Alloc_traits::construct(this->_M_impl,
+16535:                               this->_M_impl._M_start._M_cur,
+16535:                 std::forward<_Args>(__args)...);
+16535: 
+16535: 
+16535: 
+16535:    }
+16535:  catch(...)
+16535:    {
+16535:      ++this->_M_impl._M_start;
+16535:      _M_deallocate_node(*(this->_M_impl._M_start._M_node - 1));
+16535:      throw;
+16535:    }
+16535:       }
+16535: 
+16535: 
+16535:   template <typename _Tp, typename _Alloc>
+16535:     void deque<_Tp, _Alloc>::
+16535:     _M_pop_back_aux()
+16535:     {
+16535:       _M_deallocate_node(this->_M_impl._M_finish._M_first);
+16535:       this->_M_impl._M_finish._M_set_node(this->_M_impl._M_finish._M_node - 1);
+16535:       this->_M_impl._M_finish._M_cur = this->_M_impl._M_finish._M_last - 1;
+16535:       _Alloc_traits::destroy(_M_get_Tp_allocator(),
+16535:         this->_M_impl._M_finish._M_cur);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename _Tp, typename _Alloc>
+16535:     void deque<_Tp, _Alloc>::
+16535:     _M_pop_front_aux()
+16535:     {
+16535:       _Alloc_traits::destroy(_M_get_Tp_allocator(),
+16535:         this->_M_impl._M_start._M_cur);
+16535:       _M_deallocate_node(this->_M_impl._M_start._M_first);
+16535:       this->_M_impl._M_start._M_set_node(this->_M_impl._M_start._M_node + 1);
+16535:       this->_M_impl._M_start._M_cur = this->_M_impl._M_start._M_first;
+16535:     }
+16535: 
+16535:   template <typename _Tp, typename _Alloc>
+16535:     template <typename _InputIterator>
+16535:       void
+16535:       deque<_Tp, _Alloc>::
+16535:       _M_range_insert_aux(iterator __pos,
+16535:                           _InputIterator __first, _InputIterator __last,
+16535:                           std::input_iterator_tag)
+16535:       { std::copy(__first, __last, std::inserter(*this, __pos)); }
+16535: 
+16535:   template <typename _Tp, typename _Alloc>
+16535:     template <typename _ForwardIterator>
+16535:       void
+16535:       deque<_Tp, _Alloc>::
+16535:       _M_range_insert_aux(iterator __pos,
+16535:                           _ForwardIterator __first, _ForwardIterator __last,
+16535:                           std::forward_iterator_tag)
+16535:       {
+16535:         const size_type __n = std::distance(__first, __last);
+16535:         if (__pos._M_cur == this->_M_impl._M_start._M_cur)
+16535:    {
+16535:      iterator __new_start = _M_reserve_elements_at_front(__n);
+16535:      try
+16535:        {
+16535:   std::__uninitialized_copy_a(__first, __last, __new_start,
+16535:          _M_get_Tp_allocator());
+16535:   this->_M_impl._M_start = __new_start;
+16535:        }
+16535:      catch(...)
+16535:        {
+16535:   _M_destroy_nodes(__new_start._M_node,
+16535:      this->_M_impl._M_start._M_node);
+16535:   throw;
+16535:        }
+16535:    }
+16535:         else if (__pos._M_cur == this->_M_impl._M_finish._M_cur)
+16535:    {
+16535:      iterator __new_finish = _M_reserve_elements_at_back(__n);
+16535:      try
+16535:        {
+16535:   std::__uninitialized_copy_a(__first, __last,
+16535:          this->_M_impl._M_finish,
+16535:          _M_get_Tp_allocator());
+16535:   this->_M_impl._M_finish = __new_finish;
+16535:        }
+16535:      catch(...)
+16535:        {
+16535:   _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1,
+16535:      __new_finish._M_node + 1);
+16535:   throw;
+16535:        }
+16535:    }
+16535:         else
+16535:           _M_insert_aux(__pos, __first, __last, __n);
+16535:       }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535: 
+16535:     template<typename... _Args>
+16535:       typename deque<_Tp, _Alloc>::iterator
+16535:       deque<_Tp, _Alloc>::
+16535:       _M_insert_aux(iterator __pos, _Args&&... __args)
+16535:       {
+16535:  value_type __x_copy(std::forward<_Args>(__args)...);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  difference_type __index = __pos - this->_M_impl._M_start;
+16535:  if (static_cast<size_type>(__index) < size() / 2)
+16535:    {
+16535:      push_front(std::move(front()));
+16535:      iterator __front1 = this->_M_impl._M_start;
+16535:      ++__front1;
+16535:      iterator __front2 = __front1;
+16535:      ++__front2;
+16535:      __pos = this->_M_impl._M_start + __index;
+16535:      iterator __pos1 = __pos;
+16535:      ++__pos1;
+16535:      std::move(__front2, __pos1, __front1);
+16535:    }
+16535:  else
+16535:    {
+16535:      push_back(std::move(back()));
+16535:      iterator __back1 = this->_M_impl._M_finish;
+16535:      --__back1;
+16535:      iterator __back2 = __back1;
+16535:      --__back2;
+16535:      __pos = this->_M_impl._M_start + __index;
+16535:      std::move_backward(__pos, __back2, __back1);
+16535:    }
+16535:  *__pos = std::move(__x_copy);
+16535:  return __pos;
+16535:       }
+16535: 
+16535:   template <typename _Tp, typename _Alloc>
+16535:     void
+16535:     deque<_Tp, _Alloc>::
+16535:     _M_insert_aux(iterator __pos, size_type __n, const value_type& __x)
+16535:     {
+16535:       const difference_type __elems_before = __pos - this->_M_impl._M_start;
+16535:       const size_type __length = this->size();
+16535:       value_type __x_copy = __x;
+16535:       if (__elems_before < difference_type(__length / 2))
+16535:  {
+16535:    iterator __new_start = _M_reserve_elements_at_front(__n);
+16535:    iterator __old_start = this->_M_impl._M_start;
+16535:    __pos = this->_M_impl._M_start + __elems_before;
+16535:    try
+16535:      {
+16535:        if (__elems_before >= difference_type(__n))
+16535:   {
+16535:     iterator __start_n = (this->_M_impl._M_start
+16535:      + difference_type(__n));
+16535:     std::__uninitialized_move_a(this->_M_impl._M_start,
+16535:            __start_n, __new_start,
+16535:            _M_get_Tp_allocator());
+16535:     this->_M_impl._M_start = __new_start;
+16535:     std::move(__start_n, __pos, __old_start);
+16535:     std::fill(__pos - difference_type(__n), __pos, __x_copy);
+16535:   }
+16535:        else
+16535:   {
+16535:     std::__uninitialized_move_fill(this->_M_impl._M_start,
+16535:        __pos, __new_start,
+16535:        this->_M_impl._M_start,
+16535:        __x_copy,
+16535:        _M_get_Tp_allocator());
+16535:     this->_M_impl._M_start = __new_start;
+16535:     std::fill(__old_start, __pos, __x_copy);
+16535:   }
+16535:      }
+16535:    catch(...)
+16535:      {
+16535:        _M_destroy_nodes(__new_start._M_node,
+16535:           this->_M_impl._M_start._M_node);
+16535:        throw;
+16535:      }
+16535:  }
+16535:       else
+16535:  {
+16535:    iterator __new_finish = _M_reserve_elements_at_back(__n);
+16535:    iterator __old_finish = this->_M_impl._M_finish;
+16535:    const difference_type __elems_after =
+16535:      difference_type(__length) - __elems_before;
+16535:    __pos = this->_M_impl._M_finish - __elems_after;
+16535:    try
+16535:      {
+16535:        if (__elems_after > difference_type(__n))
+16535:   {
+16535:     iterator __finish_n = (this->_M_impl._M_finish
+16535:       - difference_type(__n));
+16535:     std::__uninitialized_move_a(__finish_n,
+16535:            this->_M_impl._M_finish,
+16535:            this->_M_impl._M_finish,
+16535:            _M_get_Tp_allocator());
+16535:     this->_M_impl._M_finish = __new_finish;
+16535:     std::move_backward(__pos, __finish_n, __old_finish);
+16535:     std::fill(__pos, __pos + difference_type(__n), __x_copy);
+16535:   }
+16535:        else
+16535:   {
+16535:     std::__uninitialized_fill_move(this->_M_impl._M_finish,
+16535:        __pos + difference_type(__n),
+16535:        __x_copy, __pos,
+16535:        this->_M_impl._M_finish,
+16535:        _M_get_Tp_allocator());
+16535:     this->_M_impl._M_finish = __new_finish;
+16535:     std::fill(__pos, __old_finish, __x_copy);
+16535:   }
+16535:      }
+16535:    catch(...)
+16535:      {
+16535:        _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1,
+16535:           __new_finish._M_node + 1);
+16535:        throw;
+16535:      }
+16535:  }
+16535:     }
+16535: 
+16535:   template <typename _Tp, typename _Alloc>
+16535:     template <typename _ForwardIterator>
+16535:       void
+16535:       deque<_Tp, _Alloc>::
+16535:       _M_insert_aux(iterator __pos,
+16535:                     _ForwardIterator __first, _ForwardIterator __last,
+16535:                     size_type __n)
+16535:       {
+16535:         const difference_type __elemsbefore = __pos - this->_M_impl._M_start;
+16535:         const size_type __length = size();
+16535:         if (static_cast<size_type>(__elemsbefore) < __length / 2)
+16535:    {
+16535:      iterator __new_start = _M_reserve_elements_at_front(__n);
+16535:      iterator __old_start = this->_M_impl._M_start;
+16535:      __pos = this->_M_impl._M_start + __elemsbefore;
+16535:      try
+16535:        {
+16535:   if (__elemsbefore >= difference_type(__n))
+16535:     {
+16535:       iterator __start_n = (this->_M_impl._M_start
+16535:        + difference_type(__n));
+16535:       std::__uninitialized_move_a(this->_M_impl._M_start,
+16535:       __start_n, __new_start,
+16535:       _M_get_Tp_allocator());
+16535:       this->_M_impl._M_start = __new_start;
+16535:       std::move(__start_n, __pos, __old_start);
+16535:       std::copy(__first, __last, __pos - difference_type(__n));
+16535:     }
+16535:   else
+16535:     {
+16535:       _ForwardIterator __mid = __first;
+16535:       std::advance(__mid, difference_type(__n) - __elemsbefore);
+16535:       std::__uninitialized_move_copy(this->_M_impl._M_start,
+16535:          __pos, __first, __mid,
+16535:          __new_start,
+16535:          _M_get_Tp_allocator());
+16535:       this->_M_impl._M_start = __new_start;
+16535:       std::copy(__mid, __last, __old_start);
+16535:     }
+16535:        }
+16535:      catch(...)
+16535:        {
+16535:   _M_destroy_nodes(__new_start._M_node,
+16535:      this->_M_impl._M_start._M_node);
+16535:   throw;
+16535:        }
+16535:    }
+16535:         else
+16535:         {
+16535:           iterator __new_finish = _M_reserve_elements_at_back(__n);
+16535:           iterator __old_finish = this->_M_impl._M_finish;
+16535:           const difference_type __elemsafter =
+16535:             difference_type(__length) - __elemsbefore;
+16535:           __pos = this->_M_impl._M_finish - __elemsafter;
+16535:           try
+16535:             {
+16535:               if (__elemsafter > difference_type(__n))
+16535:   {
+16535:     iterator __finish_n = (this->_M_impl._M_finish
+16535:       - difference_type(__n));
+16535:     std::__uninitialized_move_a(__finish_n,
+16535:            this->_M_impl._M_finish,
+16535:            this->_M_impl._M_finish,
+16535:            _M_get_Tp_allocator());
+16535:     this->_M_impl._M_finish = __new_finish;
+16535:     std::move_backward(__pos, __finish_n, __old_finish);
+16535:     std::copy(__first, __last, __pos);
+16535:   }
+16535:               else
+16535:   {
+16535:     _ForwardIterator __mid = __first;
+16535:     std::advance(__mid, __elemsafter);
+16535:     std::__uninitialized_copy_move(__mid, __last, __pos,
+16535:        this->_M_impl._M_finish,
+16535:        this->_M_impl._M_finish,
+16535:        _M_get_Tp_allocator());
+16535:     this->_M_impl._M_finish = __new_finish;
+16535:     std::copy(__first, __mid, __pos);
+16535:   }
+16535:             }
+16535:           catch(...)
+16535:             {
+16535:               _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1,
+16535:           __new_finish._M_node + 1);
+16535:               throw;
+16535:             }
+16535:         }
+16535:       }
+16535: 
+16535:    template<typename _Tp, typename _Alloc>
+16535:      void
+16535:      deque<_Tp, _Alloc>::
+16535:      _M_destroy_data_aux(iterator __first, iterator __last)
+16535:      {
+16535:        for (_Map_pointer __node = __first._M_node + 1;
+16535:      __node < __last._M_node; ++__node)
+16535:   std::_Destroy(*__node, *__node + _S_buffer_size(),
+16535:          _M_get_Tp_allocator());
+16535: 
+16535:        if (__first._M_node != __last._M_node)
+16535:   {
+16535:     std::_Destroy(__first._M_cur, __first._M_last,
+16535:     _M_get_Tp_allocator());
+16535:     std::_Destroy(__last._M_first, __last._M_cur,
+16535:     _M_get_Tp_allocator());
+16535:   }
+16535:        else
+16535:   std::_Destroy(__first._M_cur, __last._M_cur,
+16535:          _M_get_Tp_allocator());
+16535:      }
+16535: 
+16535:   template <typename _Tp, typename _Alloc>
+16535:     void
+16535:     deque<_Tp, _Alloc>::
+16535:     _M_new_elements_at_front(size_type __new_elems)
+16535:     {
+16535:       if (this->max_size() - this->size() < __new_elems)
+16535:  __throw_length_error(("deque::_M_new_elements_at_front"));
+16535: 
+16535:       const size_type __new_nodes = ((__new_elems + _S_buffer_size() - 1)
+16535:          / _S_buffer_size());
+16535:       _M_reserve_map_at_front(__new_nodes);
+16535:       size_type __i;
+16535:       try
+16535:         {
+16535:           for (__i = 1; __i <= __new_nodes; ++__i)
+16535:             *(this->_M_impl._M_start._M_node - __i) = this->_M_allocate_node();
+16535:         }
+16535:       catch(...)
+16535:         {
+16535:           for (size_type __j = 1; __j < __i; ++__j)
+16535:             _M_deallocate_node(*(this->_M_impl._M_start._M_node - __j));
+16535:           throw;
+16535:         }
+16535:     }
+16535: 
+16535:   template <typename _Tp, typename _Alloc>
+16535:     void
+16535:     deque<_Tp, _Alloc>::
+16535:     _M_new_elements_at_back(size_type __new_elems)
+16535:     {
+16535:       if (this->max_size() - this->size() < __new_elems)
+16535:  __throw_length_error(("deque::_M_new_elements_at_back"));
+16535: 
+16535:       const size_type __new_nodes = ((__new_elems + _S_buffer_size() - 1)
+16535:          / _S_buffer_size());
+16535:       _M_reserve_map_at_back(__new_nodes);
+16535:       size_type __i;
+16535:       try
+16535:         {
+16535:           for (__i = 1; __i <= __new_nodes; ++__i)
+16535:             *(this->_M_impl._M_finish._M_node + __i) = this->_M_allocate_node();
+16535:         }
+16535:       catch(...)
+16535:         {
+16535:           for (size_type __j = 1; __j < __i; ++__j)
+16535:             _M_deallocate_node(*(this->_M_impl._M_finish._M_node + __j));
+16535:           throw;
+16535:         }
+16535:     }
+16535: 
+16535:   template <typename _Tp, typename _Alloc>
+16535:     void
+16535:     deque<_Tp, _Alloc>::
+16535:     _M_reallocate_map(size_type __nodes_to_add, bool __add_at_front)
+16535:     {
+16535:       const size_type __old_num_nodes
+16535:  = this->_M_impl._M_finish._M_node - this->_M_impl._M_start._M_node + 1;
+16535:       const size_type __new_num_nodes = __old_num_nodes + __nodes_to_add;
+16535: 
+16535:       _Map_pointer __new_nstart;
+16535:       if (this->_M_impl._M_map_size > 2 * __new_num_nodes)
+16535:  {
+16535:    __new_nstart = this->_M_impl._M_map + (this->_M_impl._M_map_size
+16535:       - __new_num_nodes) / 2
+16535:                   + (__add_at_front ? __nodes_to_add : 0);
+16535:    if (__new_nstart < this->_M_impl._M_start._M_node)
+16535:      std::copy(this->_M_impl._M_start._M_node,
+16535:         this->_M_impl._M_finish._M_node + 1,
+16535:         __new_nstart);
+16535:    else
+16535:      std::copy_backward(this->_M_impl._M_start._M_node,
+16535:           this->_M_impl._M_finish._M_node + 1,
+16535:           __new_nstart + __old_num_nodes);
+16535:  }
+16535:       else
+16535:  {
+16535:    size_type __new_map_size = this->_M_impl._M_map_size
+16535:                               + std::max(this->_M_impl._M_map_size,
+16535:       __nodes_to_add) + 2;
+16535: 
+16535:    _Map_pointer __new_map = this->_M_allocate_map(__new_map_size);
+16535:    __new_nstart = __new_map + (__new_map_size - __new_num_nodes) / 2
+16535:                   + (__add_at_front ? __nodes_to_add : 0);
+16535:    std::copy(this->_M_impl._M_start._M_node,
+16535:       this->_M_impl._M_finish._M_node + 1,
+16535:       __new_nstart);
+16535:    _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size);
+16535: 
+16535:    this->_M_impl._M_map = __new_map;
+16535:    this->_M_impl._M_map_size = __new_map_size;
+16535:  }
+16535: 
+16535:       this->_M_impl._M_start._M_set_node(__new_nstart);
+16535:       this->_M_impl._M_finish._M_set_node(__new_nstart + __old_num_nodes - 1);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     void
+16535:     fill(const _Deque_iterator<_Tp, _Tp&, _Tp*>& __first,
+16535:   const _Deque_iterator<_Tp, _Tp&, _Tp*>& __last, const _Tp& __value)
+16535:     {
+16535:       typedef typename _Deque_iterator<_Tp, _Tp&, _Tp*>::_Self _Self;
+16535: 
+16535:       for (typename _Self::_Map_pointer __node = __first._M_node + 1;
+16535:            __node < __last._M_node; ++__node)
+16535:  std::fill(*__node, *__node + _Self::_S_buffer_size(), __value);
+16535: 
+16535:       if (__first._M_node != __last._M_node)
+16535:  {
+16535:    std::fill(__first._M_cur, __first._M_last, __value);
+16535:    std::fill(__last._M_first, __last._M_cur, __value);
+16535:  }
+16535:       else
+16535:  std::fill(__first._M_cur, __last._M_cur, __value);
+16535:     }
+16535: 
+16535:   template<typename _Tp>
+16535:     _Deque_iterator<_Tp, _Tp&, _Tp*>
+16535:     copy(_Deque_iterator<_Tp, const _Tp&, const _Tp*> __first,
+16535:   _Deque_iterator<_Tp, const _Tp&, const _Tp*> __last,
+16535:   _Deque_iterator<_Tp, _Tp&, _Tp*> __result)
+16535:     {
+16535:       typedef typename _Deque_iterator<_Tp, _Tp&, _Tp*>::_Self _Self;
+16535:       typedef typename _Self::difference_type difference_type;
+16535: 
+16535:       difference_type __len = __last - __first;
+16535:       while (__len > 0)
+16535:  {
+16535:    const difference_type __clen
+16535:      = std::min(__len, std::min(__first._M_last - __first._M_cur,
+16535:            __result._M_last - __result._M_cur));
+16535:    std::copy(__first._M_cur, __first._M_cur + __clen, __result._M_cur);
+16535:    __first += __clen;
+16535:    __result += __clen;
+16535:    __len -= __clen;
+16535:  }
+16535:       return __result;
+16535:     }
+16535: 
+16535:   template<typename _Tp>
+16535:     _Deque_iterator<_Tp, _Tp&, _Tp*>
+16535:     copy_backward(_Deque_iterator<_Tp, const _Tp&, const _Tp*> __first,
+16535:     _Deque_iterator<_Tp, const _Tp&, const _Tp*> __last,
+16535:     _Deque_iterator<_Tp, _Tp&, _Tp*> __result)
+16535:     {
+16535:       typedef typename _Deque_iterator<_Tp, _Tp&, _Tp*>::_Self _Self;
+16535:       typedef typename _Self::difference_type difference_type;
+16535: 
+16535:       difference_type __len = __last - __first;
+16535:       while (__len > 0)
+16535:  {
+16535:    difference_type __llen = __last._M_cur - __last._M_first;
+16535:    _Tp* __lend = __last._M_cur;
+16535: 
+16535:    difference_type __rlen = __result._M_cur - __result._M_first;
+16535:    _Tp* __rend = __result._M_cur;
+16535: 
+16535:    if (!__llen)
+16535:      {
+16535:        __llen = _Self::_S_buffer_size();
+16535:        __lend = *(__last._M_node - 1) + __llen;
+16535:      }
+16535:    if (!__rlen)
+16535:      {
+16535:        __rlen = _Self::_S_buffer_size();
+16535:        __rend = *(__result._M_node - 1) + __rlen;
+16535:      }
+16535: 
+16535:    const difference_type __clen = std::min(__len,
+16535:         std::min(__llen, __rlen));
+16535:    std::copy_backward(__lend - __clen, __lend, __rend);
+16535:    __last -= __clen;
+16535:    __result -= __clen;
+16535:    __len -= __clen;
+16535:  }
+16535:       return __result;
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     _Deque_iterator<_Tp, _Tp&, _Tp*>
+16535:     move(_Deque_iterator<_Tp, const _Tp&, const _Tp*> __first,
+16535:   _Deque_iterator<_Tp, const _Tp&, const _Tp*> __last,
+16535:   _Deque_iterator<_Tp, _Tp&, _Tp*> __result)
+16535:     {
+16535:       typedef typename _Deque_iterator<_Tp, _Tp&, _Tp*>::_Self _Self;
+16535:       typedef typename _Self::difference_type difference_type;
+16535: 
+16535:       difference_type __len = __last - __first;
+16535:       while (__len > 0)
+16535:  {
+16535:    const difference_type __clen
+16535:      = std::min(__len, std::min(__first._M_last - __first._M_cur,
+16535:            __result._M_last - __result._M_cur));
+16535:    std::move(__first._M_cur, __first._M_cur + __clen, __result._M_cur);
+16535:    __first += __clen;
+16535:    __result += __clen;
+16535:    __len -= __clen;
+16535:  }
+16535:       return __result;
+16535:     }
+16535: 
+16535:   template<typename _Tp>
+16535:     _Deque_iterator<_Tp, _Tp&, _Tp*>
+16535:     move_backward(_Deque_iterator<_Tp, const _Tp&, const _Tp*> __first,
+16535:     _Deque_iterator<_Tp, const _Tp&, const _Tp*> __last,
+16535:     _Deque_iterator<_Tp, _Tp&, _Tp*> __result)
+16535:     {
+16535:       typedef typename _Deque_iterator<_Tp, _Tp&, _Tp*>::_Self _Self;
+16535:       typedef typename _Self::difference_type difference_type;
+16535: 
+16535:       difference_type __len = __last - __first;
+16535:       while (__len > 0)
+16535:  {
+16535:    difference_type __llen = __last._M_cur - __last._M_first;
+16535:    _Tp* __lend = __last._M_cur;
+16535: 
+16535:    difference_type __rlen = __result._M_cur - __result._M_first;
+16535:    _Tp* __rend = __result._M_cur;
+16535: 
+16535:    if (!__llen)
+16535:      {
+16535:        __llen = _Self::_S_buffer_size();
+16535:        __lend = *(__last._M_node - 1) + __llen;
+16535:      }
+16535:    if (!__rlen)
+16535:      {
+16535:        __rlen = _Self::_S_buffer_size();
+16535:        __rend = *(__result._M_node - 1) + __rlen;
+16535:      }
+16535: 
+16535:    const difference_type __clen = std::min(__len,
+16535:         std::min(__llen, __rlen));
+16535:    std::move_backward(__lend - __clen, __lend, __rend);
+16535:    __last -= __clen;
+16535:    __result -= __clen;
+16535:    __len -= __clen;
+16535:  }
+16535:       return __result;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 67 "/usr/include/c++/8/deque" 2 3
+16535: # 36 "../../src/Linear_System_templates.hh" 2
+16535: 
+16535: 
+16535: # 37 "../../src/Linear_System_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Row>
+16535: dimension_type
+16535: Linear_System<Row>::num_lines_or_equalities() const {
+16535:   ((void) 0);
+16535:   const Linear_System& x = *this;
+16535:   dimension_type n = 0;
+16535:   for (dimension_type i = num_rows(); i-- > 0; ) {
+16535:     if (x[i].is_line_or_equality()) {
+16535:       ++n;
+16535:     }
+16535:   }
+16535:   return n;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_System<Row>::merge_rows_assign(const Linear_System& y) {
+16535:   ((void) 0);
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535:   Linear_System& x = *this;
+16535: 
+16535: 
+16535:   Swapping_Vector<Row> tmp;
+16535: 
+16535:   tmp.reserve(compute_capacity(x.rows.size() + y.rows.size(),
+16535:                                tmp.max_num_rows()));
+16535: 
+16535:   dimension_type xi = 0;
+16535:   const dimension_type x_num_rows = x.num_rows();
+16535:   dimension_type yi = 0;
+16535:   const dimension_type y_num_rows = y.num_rows();
+16535: 
+16535:   while (xi < x_num_rows && yi < y_num_rows) {
+16535:     const int comp = compare(x[xi], y[yi]);
+16535:     if (comp <= 0) {
+16535: 
+16535:       tmp.resize(tmp.size() + 1);
+16535:       swap(tmp.back(), x.rows[xi++]);
+16535:       tmp.back().set_representation(representation());
+16535:       if (comp == 0) {
+16535: 
+16535:         ++yi;
+16535:       }
+16535:     }
+16535:     else {
+16535: 
+16535:       tmp.resize(tmp.size() + 1);
+16535:       Row copy(y[yi++], space_dimension(), representation());
+16535:       swap(tmp.back(), copy);
+16535:     }
+16535:   }
+16535: 
+16535:   if (xi < x_num_rows) {
+16535:     while (xi < x_num_rows) {
+16535:       tmp.resize(tmp.size() + 1);
+16535:       swap(tmp.back(), x.rows[xi++]);
+16535:       tmp.back().set_representation(representation());
+16535:     }
+16535:   }
+16535:   else {
+16535:     while (yi < y_num_rows) {
+16535:       tmp.resize(tmp.size() + 1);
+16535:       Row copy(y[yi++], space_dimension(), representation());
+16535:       swap(tmp.back(), copy);
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   swap(tmp, rows);
+16535: 
+16535:   unset_pending_rows();
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_System<Row>::ascii_dump(std::ostream& s) const {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   s << "topology " << (is_necessarily_closed()
+16535:                        ? "NECESSARILY_CLOSED"
+16535:                        : "NOT_NECESSARILY_CLOSED")
+16535:     << "\n"
+16535:     << num_rows() << " x " << space_dimension() << " ";
+16535:   Parma_Polyhedra_Library::ascii_dump(s, representation());
+16535:   s << " " << (sorted ? "(sorted)" : "(not_sorted)")
+16535:     << "\n"
+16535:     << "index_first_pending " << first_pending_row()
+16535:     << "\n";
+16535:   for (dimension_type i = 0; i < rows.size(); ++i) {
+16535:     rows[i].ascii_dump(s);
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row> void Linear_System<Row>::ascii_dump() const { ascii_dump(std::cerr); } template <typename Row> void Linear_System<Row>::print() const { std::cerr << "No user level output operator defined " << "for " "Linear_System<Row>" << "." << std::endl; }
+16535: 
+16535: template <typename Row>
+16535: bool
+16535: Linear_System<Row>::ascii_load(std::istream& s) {
+16535:   std::string str;
+16535:   if (!(s >> str) || str != "topology") {
+16535:     return false;
+16535:   }
+16535:   if (!(s >> str)) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   clear();
+16535: 
+16535:   Topology t;
+16535:   if (str == "NECESSARILY_CLOSED") {
+16535:     t = NECESSARILY_CLOSED;
+16535:   }
+16535:   else {
+16535:     if (str != "NOT_NECESSARILY_CLOSED") {
+16535:       return false;
+16535:     }
+16535:     t = NOT_NECESSARILY_CLOSED;
+16535:   }
+16535: 
+16535:   set_topology(t);
+16535: 
+16535:   dimension_type nrows;
+16535:   dimension_type space_dims;
+16535:   if (!(s >> nrows)) {
+16535:     return false;
+16535:   }
+16535:   if (!(s >> str) || str != "x") {
+16535:     return false;
+16535:   }
+16535:   if (!(s >> space_dims)) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   space_dimension_ = space_dims;
+16535: 
+16535:   if (!Parma_Polyhedra_Library::ascii_load(s, representation_)) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (!(s >> str) || (str != "(sorted)" && str != "(not_sorted)")) {
+16535:     return false;
+16535:   }
+16535:   const bool sortedness = (str == "(sorted)");
+16535:   dimension_type index;
+16535:   if (!(s >> str) || str != "index_first_pending") {
+16535:     return false;
+16535:   }
+16535:   if (!(s >> index)) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   Row row;
+16535:   for (dimension_type i = 0; i < nrows; ++i) {
+16535:     if (!row.ascii_load(s)) {
+16535:       return false;
+16535:     }
+16535:     insert(row, Recycle_Input());
+16535:   }
+16535:   index_first_pending = index;
+16535:   sorted = sortedness;
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_System<Row>::insert(const Row& r) {
+16535:   Row tmp(r, representation());
+16535:   insert(tmp, Recycle_Input());
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_System<Row>::insert(Row& r, Recycle_Input) {
+16535:   insert_no_ok(r, Recycle_Input());
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_System<Row>::insert_no_ok(Row& r, Recycle_Input) {
+16535:   ((void) 0);
+16535: 
+16535:   ((void) 0);
+16535: 
+16535:   const bool was_sorted = is_sorted();
+16535: 
+16535:   insert_pending_no_ok(r, Recycle_Input());
+16535: 
+16535:   if (was_sorted) {
+16535:     const dimension_type nrows = num_rows();
+16535: 
+16535:     if (nrows > 1) {
+16535: 
+16535: 
+16535: 
+16535:       sorted = (compare(rows[nrows-2], rows[nrows-1]) <= 0);
+16535:     }
+16535:     else {
+16535: 
+16535:       sorted = true;
+16535:     }
+16535:   }
+16535: 
+16535:   unset_pending_rows();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_System<Row>::insert_pending_no_ok(Row& r, Recycle_Input) {
+16535: # 267 "../../src/Linear_System_templates.hh"
+16535:   ((void) 0);
+16535: 
+16535:   r.set_representation(representation());
+16535: 
+16535:   if (space_dimension() < r.space_dimension()) {
+16535:     set_space_dimension_no_ok(r.space_dimension());
+16535:   }
+16535:   else {
+16535:     r.set_space_dimension_no_ok(space_dimension());
+16535:   }
+16535: 
+16535:   rows.resize(rows.size() + 1);
+16535:   swap(rows.back(), r);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_System<Row>::insert_pending(const Row& r) {
+16535:   Row tmp(r, representation());
+16535:   insert_pending(tmp, Recycle_Input());
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_System<Row>::insert_pending(Row& r, Recycle_Input) {
+16535:   insert_pending_no_ok(r, Recycle_Input());
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_System<Row>::insert_pending(const Linear_System& y) {
+16535:   Linear_System tmp(y, representation(), With_Pending());
+16535:   insert_pending(tmp, Recycle_Input());
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_System<Row>::insert_pending(Linear_System& y, Recycle_Input) {
+16535:   Linear_System& x = *this;
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   for (dimension_type i = 0; i < y.num_rows(); ++i) {
+16535:     x.insert_pending(y.rows[i], Recycle_Input());
+16535:   }
+16535: 
+16535:   y.clear();
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_System<Row>::insert(const Linear_System& y) {
+16535:   Linear_System tmp(y, representation(), With_Pending());
+16535:   insert(tmp, Recycle_Input());
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_System<Row>::insert(Linear_System& y, Recycle_Input) {
+16535:   ((void) 0);
+16535: 
+16535: 
+16535:   if (y.has_no_rows()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   if (is_sorted()) {
+16535:     if (!y.is_sorted() || y.num_pending_rows() > 0) {
+16535:       sorted = false;
+16535:     }
+16535:     else {
+16535: 
+16535:       const dimension_type n_rows = num_rows();
+16535:       if (n_rows > 0) {
+16535:         sorted = (compare(rows[n_rows-1], y[0]) <= 0);
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   insert_pending(y, Recycle_Input());
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   unset_pending_rows();
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_System<Row>::remove_space_dimensions(const Variables_Set& vars) {
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (vars.empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   for (dimension_type i = 0; i < num_rows(); ) {
+16535:     const bool valid = rows[i].remove_space_dimensions(vars);
+16535:     if (!valid) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       remove_row_no_ok(i, false);
+16535:     }
+16535:     else {
+16535:       ++i;
+16535:     }
+16535:   }
+16535: 
+16535:   space_dimension_ -= vars.size();
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_System<Row>::shift_space_dimensions(Variable v, dimension_type n) {
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   for (dimension_type i = rows.size(); i-- > 0; ) {
+16535:     rows[i].shift_space_dimensions(v, n);
+16535:   }
+16535:   space_dimension_ += n;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_System<Row>::sort_rows() {
+16535: 
+16535:   sort_rows(0, first_pending_row());
+16535:   sorted = true;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_System<Row>::sort_rows(const dimension_type first_row,
+16535:                               const dimension_type last_row) {
+16535:   ((void) 0);
+16535: 
+16535:   ((void) 0)
+16535:                                                 ;
+16535: 
+16535:   const bool sorting_pending = (first_row >= first_pending_row());
+16535:   const dimension_type old_num_pending = num_pending_rows();
+16535: 
+16535:   const dimension_type num_elems = last_row - first_row;
+16535:   if (num_elems < 2) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   using namespace Implementation;
+16535:   typedef Swapping_Vector<Row> Cont;
+16535:   typedef Indirect_Sort_Compare<Cont, Row_Less_Than> Sort_Compare;
+16535:   typedef Indirect_Swapper<Cont> Swapper;
+16535:   const dimension_type num_duplicates
+16535:     = indirect_sort_and_unique(num_elems,
+16535:                                Sort_Compare(rows, first_row),
+16535:                                Unique_Compare(rows, first_row),
+16535:                                Swapper(rows, first_row));
+16535: 
+16535:   if (num_duplicates > 0) {
+16535:     typedef typename Cont::iterator Iter;
+16535:     typedef typename std::iterator_traits<Iter>::difference_type diff_t;
+16535:     Iter last = rows.begin() + static_cast<diff_t>(last_row);
+16535:     Iter first = last - + static_cast<diff_t>(num_duplicates);
+16535:     rows.erase(first, last);
+16535:   }
+16535: 
+16535:   if (sorting_pending) {
+16535:     ((void) 0);
+16535:     index_first_pending = num_rows() - (old_num_pending - num_duplicates);
+16535:   }
+16535:   else {
+16535:     index_first_pending = num_rows() - old_num_pending;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_System<Row>::strong_normalize() {
+16535:   const dimension_type nrows = rows.size();
+16535: 
+16535:   for (dimension_type i = nrows; i-- > 0; ) {
+16535:     rows[i].strong_normalize();
+16535:   }
+16535:   sorted = (nrows <= 1);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_System<Row>::sign_normalize() {
+16535:   const dimension_type nrows = rows.size();
+16535: 
+16535:   for (dimension_type i = nrows; i-- > 0; ) {
+16535:     rows[i].sign_normalize();
+16535:   }
+16535:   sorted = (nrows <= 1);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: 
+16535: template <typename Row>
+16535: bool
+16535: operator==(const Linear_System<Row>& x, const Linear_System<Row>& y) {
+16535:   if (x.space_dimension() != y.space_dimension()) {
+16535:     return false;
+16535:   }
+16535:   const dimension_type x_num_rows = x.num_rows();
+16535:   const dimension_type y_num_rows = y.num_rows();
+16535:   if (x_num_rows != y_num_rows) {
+16535:     return false;
+16535:   }
+16535:   if (x.first_pending_row() != y.first_pending_row()) {
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   for (dimension_type i = x_num_rows; i-- > 0; ) {
+16535:     if (x[i] != y[i]) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_System<Row>::sort_and_remove_with_sat(Bit_Matrix& sat) {
+16535: 
+16535:   ((void) 0);
+16535:   if (first_pending_row() <= 1) {
+16535:     set_sorted(true);
+16535:     return;
+16535:   }
+16535: 
+16535:   const dimension_type num_elems = sat.num_rows();
+16535: 
+16535: 
+16535:   typedef Swapping_Vector<Row> Cont;
+16535:   const Implementation::Indirect_Sort_Compare<Cont, Row_Less_Than>
+16535:     sort_cmp(rows);
+16535:   const Unique_Compare unique_cmp(rows);
+16535:   const Implementation::Indirect_Swapper2<Cont, Bit_Matrix> swapper(rows, sat);
+16535: 
+16535:   const dimension_type num_duplicates
+16535:     = Implementation::indirect_sort_and_unique(num_elems, sort_cmp,
+16535:                                                unique_cmp, swapper);
+16535: 
+16535:   const dimension_type new_first_pending_row
+16535:     = first_pending_row() - num_duplicates;
+16535: 
+16535:   if (num_pending_rows() > 0) {
+16535: 
+16535:     const dimension_type n_rows = num_rows() - 1;
+16535:     for (dimension_type i = 0; i < num_duplicates; ++i) {
+16535:       swap(rows[new_first_pending_row + i], rows[n_rows - i]);
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   rows.resize(rows.size() - num_duplicates);
+16535:   index_first_pending = new_first_pending_row;
+16535: 
+16535:   sat.remove_trailing_rows(num_duplicates);
+16535: 
+16535: 
+16535:   sorted = true;
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: dimension_type
+16535: Linear_System<Row>::gauss(const dimension_type n_lines_or_equalities) {
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type rank = 0;
+16535: 
+16535:   bool changed = false;
+16535: 
+16535:   const dimension_type num_cols
+16535:     = is_necessarily_closed() ? space_dimension() + 1 : space_dimension() + 2;
+16535: 
+16535: 
+16535: 
+16535:   for (dimension_type j = num_cols; j-- > 0; ) {
+16535:     for (dimension_type i = rank; i < n_lines_or_equalities; ++i) {
+16535: 
+16535: 
+16535:       if ((*this)[i].expr.get(j) == 0) {
+16535:         continue;
+16535:       }
+16535: 
+16535: 
+16535:       if (i > rank) {
+16535:         swap(rows[i], rows[rank]);
+16535: 
+16535:         changed = true;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       for (dimension_type k = i + 1; k < n_lines_or_equalities; ++k) {
+16535:         if (rows[k].expr.get(Variable(j - 1)) != 0) {
+16535:           rows[k].linear_combine(rows[rank], j);
+16535:           changed = true;
+16535:         }
+16535:       }
+16535: 
+16535:       ++rank;
+16535: 
+16535:       break;
+16535:     }
+16535:   }
+16535:   if (changed) {
+16535:     sorted = false;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   return rank;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_System<Row>
+16535: ::back_substitute(const dimension_type n_lines_or_equalities) {
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type nrows = num_rows();
+16535: 
+16535:   bool still_sorted = is_sorted();
+16535: 
+16535: 
+16535:   std::deque<bool> check_for_sortedness;
+16535:   if (still_sorted) {
+16535:     check_for_sortedness.insert(check_for_sortedness.end(), nrows, false);
+16535:   }
+16535: 
+16535:   for (dimension_type k = n_lines_or_equalities; k-- > 0; ) {
+16535: 
+16535: 
+16535: 
+16535:     Row& row_k = rows[k];
+16535:     const dimension_type j = row_k.expr.last_nonzero();
+16535: 
+16535:     ((void) 0);
+16535: 
+16535: 
+16535:     for (dimension_type i = k; i-- > 0; ) {
+16535:       Row& row_i = rows[i];
+16535:       if (row_i.expr.get(Variable(j - 1)) != 0) {
+16535: 
+16535: 
+16535:         row_i.linear_combine(row_k, j);
+16535:         if (still_sorted) {
+16535: 
+16535: 
+16535:           if (i > 0) {
+16535:             check_for_sortedness[i-1] = true;
+16535:           }
+16535:           check_for_sortedness[i] = true;
+16535:         }
+16535:       }
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     const bool have_to_negate = (row_k.expr.get(Variable(j - 1)) < 0);
+16535:     if (have_to_negate) {
+16535:       neg_assign(row_k.expr);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     for (dimension_type i = n_lines_or_equalities; i < nrows; ++i) {
+16535:       Row& row_i = rows[i];
+16535:       if (row_i.expr.get(Variable(j - 1)) != 0) {
+16535: 
+16535: 
+16535:         row_i.linear_combine(row_k, j);
+16535:         if (still_sorted) {
+16535: 
+16535: 
+16535:           if (i > n_lines_or_equalities) {
+16535:             check_for_sortedness[i-1] = true;
+16535:           }
+16535:           check_for_sortedness[i] = true;
+16535:         }
+16535:       }
+16535:     }
+16535:     if (have_to_negate) {
+16535: 
+16535:       neg_assign(row_k.expr);
+16535:     }
+16535: 
+16535:     ((void) 0);
+16535:   }
+16535: 
+16535: 
+16535:   for (dimension_type i = 0; still_sorted && i+1 < nrows; ++i) {
+16535:     if (check_for_sortedness[i]) {
+16535: 
+16535:       still_sorted = (compare((*this)[i], (*this)[i+1]) <= 0);
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   sorted = still_sorted;
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_System<Row>::simplify() {
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535:   const dimension_type old_nrows = num_rows();
+16535:   dimension_type nrows = old_nrows;
+16535:   dimension_type n_lines_or_equalities = 0;
+16535:   for (dimension_type i = 0; i < nrows; ++i) {
+16535:     if ((*this)[i].is_line_or_equality()) {
+16535:       if (n_lines_or_equalities < i) {
+16535:         swap(rows[i], rows[n_lines_or_equalities]);
+16535: 
+16535:         ((void) 0);
+16535:       }
+16535:       ++n_lines_or_equalities;
+16535:     }
+16535:   }
+16535: 
+16535:   const dimension_type rank = gauss(n_lines_or_equalities);
+16535: 
+16535:   if (rank < n_lines_or_equalities) {
+16535:     const dimension_type
+16535:       n_rays_or_points_or_inequalities = nrows - n_lines_or_equalities;
+16535:     const dimension_type
+16535:       num_swaps = std::min(n_lines_or_equalities - rank,
+16535:                            n_rays_or_points_or_inequalities);
+16535:     for (dimension_type i = num_swaps; i-- > 0; ) {
+16535:       swap(rows[--nrows], rows[rank + i]);
+16535:     }
+16535:     remove_trailing_rows(old_nrows - nrows);
+16535:     if (n_rays_or_points_or_inequalities > num_swaps) {
+16535:       set_sorted(false);
+16535:     }
+16535:     unset_pending_rows();
+16535:     n_lines_or_equalities = rank;
+16535:   }
+16535: 
+16535:   back_substitute(n_lines_or_equalities);
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_System<Row>
+16535: ::add_universe_rows_and_space_dimensions(const dimension_type n) {
+16535:   ((void) 0);
+16535:   const bool was_sorted = is_sorted();
+16535:   const dimension_type old_n_rows = num_rows();
+16535:   const dimension_type old_space_dim
+16535:     = is_necessarily_closed() ? space_dimension() : space_dimension() + 1;
+16535:   set_space_dimension(space_dimension() + n);
+16535:   rows.resize(rows.size() + n);
+16535: 
+16535:   for (dimension_type i = old_n_rows; i-- > 0; ) {
+16535:     swap(rows[i], rows[i + n]);
+16535:   }
+16535:   for (dimension_type i = n, c = old_space_dim; i-- > 0; ) {
+16535: 
+16535: 
+16535: 
+16535:     if (Variable(c).space_dimension() <= space_dimension()) {
+16535: 
+16535:       Linear_Expression le(representation());
+16535:       le.set_space_dimension(space_dimension());
+16535:       le += Variable(c);
+16535:       Row r(le, Row::LINE_OR_EQUALITY, row_topology);
+16535:       swap(r, rows[i]);
+16535:     }
+16535:     else {
+16535: 
+16535:       ((void) 0);
+16535:       Linear_Expression le(Variable(c), representation());
+16535:       Row r(le, Row::LINE_OR_EQUALITY, NECESSARILY_CLOSED);
+16535:       r.mark_as_not_necessarily_closed();
+16535:       swap(r, rows[i]);
+16535: 
+16535:     }
+16535:     ++c;
+16535:   }
+16535: 
+16535: 
+16535:   if (was_sorted) {
+16535:     sorted = (compare(rows[n-1], rows[n]) <= 0);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (!is_necessarily_closed()) {
+16535: 
+16535:     ((void) 0);
+16535:     if (!is_sorted()) {
+16535:       for (dimension_type i = n; i-- > 0; ) {
+16535:         rows[i].expr.swap_space_dimensions(Variable(old_space_dim - 1),
+16535:                                            Variable(old_space_dim - 1 + n));
+16535:         ((void) 0);
+16535:       }
+16535:     }
+16535:     else {
+16535:       dimension_type old_eps_index = old_space_dim - 1;
+16535: 
+16535: 
+16535:       for (dimension_type i = n; i-- > 0; ++old_eps_index) {
+16535:         rows[i].expr.swap_space_dimensions(Variable(old_eps_index),
+16535:                                            Variable(old_eps_index + 1));
+16535:         ((void) 0);
+16535:       }
+16535: 
+16535:       sorted = true;
+16535:     }
+16535:   }
+16535: 
+16535:   set_index_first_pending_row(index_first_pending + n);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Linear_System<Row>::sort_pending_and_remove_duplicates() {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type first_pending = first_pending_row();
+16535:   sort_rows(first_pending, num_rows());
+16535: 
+16535: 
+16535:   const dimension_type old_num_rows = num_rows();
+16535:   dimension_type num_rows = old_num_rows;
+16535: 
+16535:   dimension_type k1 = 0;
+16535:   dimension_type k2 = first_pending;
+16535:   dimension_type num_duplicates = 0;
+16535: 
+16535: 
+16535:   while (k1 < first_pending && k2 < num_rows) {
+16535:     const int cmp = compare(rows[k1], rows[k2]);
+16535:     if (cmp == 0) {
+16535: 
+16535:       ++num_duplicates;
+16535:       --num_rows;
+16535: 
+16535:       ++k1;
+16535: 
+16535:       if (k2 < num_rows) {
+16535:         swap(rows[k2], rows[k2 + num_duplicates]);
+16535:       }
+16535:     }
+16535:     else if (cmp < 0) {
+16535: 
+16535:       ++k1;
+16535:     }
+16535:     else {
+16535: 
+16535: 
+16535: 
+16535:       ++k2;
+16535:       if (num_duplicates > 0 && k2 < num_rows) {
+16535:         swap(rows[k2], rows[k2 + num_duplicates]);
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   if (num_duplicates > 0) {
+16535:     if (k2 < num_rows) {
+16535:       for (++k2; k2 < num_rows; ++k2) {
+16535:         swap(rows[k2], rows[k2 + num_duplicates]);
+16535:       }
+16535:     }
+16535:     rows.resize(num_rows);
+16535:   }
+16535:   sorted = true;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: bool
+16535: Linear_System<Row>::check_sorted() const {
+16535:   for (dimension_type i = first_pending_row(); i-- > 1; ) {
+16535:     if (compare(rows[i], rows[i-1]) < 0) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: bool
+16535: Linear_System<Row>::OK() const {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   for (dimension_type i = rows.size(); i-- > 0; ) {
+16535:     if (rows[i].representation() != representation()) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       return false;
+16535:     }
+16535:     if (rows[i].space_dimension() != space_dimension()) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       return false;
+16535:     }
+16535:   }
+16535: 
+16535:   for (dimension_type i = rows.size(); i-- > 0; ) {
+16535:     if (rows[i].topology() != topology()) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       return false;
+16535:     }
+16535: 
+16535:   }
+16535: 
+16535:   if (first_pending_row() > num_rows()) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type n_rows = num_rows();
+16535:   for (dimension_type i = 0; i < n_rows; ++i) {
+16535:     if (topology() != rows[i].topology()) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       return false;
+16535:     }
+16535: 
+16535:   }
+16535:   if (sorted && !check_sorted()) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535:   return true;
+16535: }
+16535: 
+16535: }
+16535: # 581 "../../src/Linear_System_defs.hh" 2
+16535: # 30 "../../src/Constraint_System_defs.hh" 2
+16535: # 38 "../../src/Constraint_System_defs.hh"
+16535: # 1 "/usr/include/c++/8/iterator" 1 3
+16535: # 58 "/usr/include/c++/8/iterator" 3
+16535:        
+16535: # 59 "/usr/include/c++/8/iterator" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/stream_iterator.h" 1 3
+16535: # 33 "/usr/include/c++/8/bits/stream_iterator.h" 3
+16535:        
+16535: # 34 "/usr/include/c++/8/bits/stream_iterator.h" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 37 "/usr/include/c++/8/bits/stream_iterator.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _CharT = char,
+16535:            typename _Traits = char_traits<_CharT>, typename _Dist = ptrdiff_t>
+16535:     class istream_iterator
+16535:     : public iterator<input_iterator_tag, _Tp, _Dist, const _Tp*, const _Tp&>
+16535:     {
+16535:     public:
+16535:       typedef _CharT char_type;
+16535:       typedef _Traits traits_type;
+16535:       typedef basic_istream<_CharT, _Traits> istream_type;
+16535: 
+16535:     private:
+16535:       istream_type* _M_stream;
+16535:       _Tp _M_value;
+16535:       bool _M_ok;
+16535: 
+16535:     public:
+16535: 
+16535:       constexpr istream_iterator()
+16535:       : _M_stream(0), _M_value(), _M_ok(false) {}
+16535: 
+16535: 
+16535:       istream_iterator(istream_type& __s)
+16535:       : _M_stream(std::__addressof(__s))
+16535:       { _M_read(); }
+16535: 
+16535:       istream_iterator(const istream_iterator& __obj)
+16535:       : _M_stream(__obj._M_stream), _M_value(__obj._M_value),
+16535:         _M_ok(__obj._M_ok)
+16535:       { }
+16535: 
+16535:       const _Tp&
+16535:       operator*() const
+16535:       {
+16535: 
+16535: 
+16535:                         ;
+16535:  return _M_value;
+16535:       }
+16535: 
+16535:       const _Tp*
+16535:       operator->() const { return std::__addressof((operator*())); }
+16535: 
+16535:       istream_iterator&
+16535:       operator++()
+16535:       {
+16535: 
+16535: 
+16535:                         ;
+16535:  _M_read();
+16535:  return *this;
+16535:       }
+16535: 
+16535:       istream_iterator
+16535:       operator++(int)
+16535:       {
+16535: 
+16535: 
+16535:                         ;
+16535:  istream_iterator __tmp = *this;
+16535:  _M_read();
+16535:  return __tmp;
+16535:       }
+16535: 
+16535:       bool
+16535:       _M_equal(const istream_iterator& __x) const
+16535:       { return (_M_ok == __x._M_ok) && (!_M_ok || _M_stream == __x._M_stream); }
+16535: 
+16535:     private:
+16535:       void
+16535:       _M_read()
+16535:       {
+16535:  _M_ok = (_M_stream && *_M_stream) ? true : false;
+16535:  if (_M_ok)
+16535:    {
+16535:      *_M_stream >> _M_value;
+16535:      _M_ok = *_M_stream ? true : false;
+16535:    }
+16535:       }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _CharT, typename _Traits, typename _Dist>
+16535:     inline bool
+16535:     operator==(const istream_iterator<_Tp, _CharT, _Traits, _Dist>& __x,
+16535:         const istream_iterator<_Tp, _CharT, _Traits, _Dist>& __y)
+16535:     { return __x._M_equal(__y); }
+16535: 
+16535: 
+16535:   template <class _Tp, class _CharT, class _Traits, class _Dist>
+16535:     inline bool
+16535:     operator!=(const istream_iterator<_Tp, _CharT, _Traits, _Dist>& __x,
+16535:         const istream_iterator<_Tp, _CharT, _Traits, _Dist>& __y)
+16535:     { return !__x._M_equal(__y); }
+16535: # 152 "/usr/include/c++/8/bits/stream_iterator.h" 3
+16535:   template<typename _Tp, typename _CharT = char,
+16535:            typename _Traits = char_traits<_CharT> >
+16535:     class ostream_iterator
+16535:     : public iterator<output_iterator_tag, void, void, void, void>
+16535:     {
+16535:     public:
+16535: 
+16535: 
+16535:       typedef _CharT char_type;
+16535:       typedef _Traits traits_type;
+16535:       typedef basic_ostream<_CharT, _Traits> ostream_type;
+16535: 
+16535: 
+16535:     private:
+16535:       ostream_type* _M_stream;
+16535:       const _CharT* _M_string;
+16535: 
+16535:     public:
+16535: 
+16535:       ostream_iterator(ostream_type& __s)
+16535:       : _M_stream(std::__addressof(__s)), _M_string(0) {}
+16535: # 184 "/usr/include/c++/8/bits/stream_iterator.h" 3
+16535:       ostream_iterator(ostream_type& __s, const _CharT* __c)
+16535:       : _M_stream(&__s), _M_string(__c) { }
+16535: 
+16535: 
+16535:       ostream_iterator(const ostream_iterator& __obj)
+16535:       : _M_stream(__obj._M_stream), _M_string(__obj._M_string) { }
+16535: 
+16535: 
+16535: 
+16535:       ostream_iterator&
+16535:       operator=(const _Tp& __value)
+16535:       {
+16535: 
+16535: 
+16535:                         ;
+16535:  *_M_stream << __value;
+16535:  if (_M_string) *_M_stream << _M_string;
+16535:  return *this;
+16535:       }
+16535: 
+16535:       ostream_iterator&
+16535:       operator*()
+16535:       { return *this; }
+16535: 
+16535:       ostream_iterator&
+16535:       operator++()
+16535:       { return *this; }
+16535: 
+16535:       ostream_iterator&
+16535:       operator++(int)
+16535:       { return *this; }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 67 "/usr/include/c++/8/iterator" 2 3
+16535: # 39 "../../src/Constraint_System_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 42 "../../src/Constraint_System_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: std::ostream& operator<<(std::ostream& s, const Constraint_System& cs);
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: bool operator==(const Constraint_System& x, const Constraint_System& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: bool operator!=(const Constraint_System& x, const Constraint_System& y);
+16535: 
+16535: 
+16535: void
+16535: swap(Constraint_System& x, Constraint_System& y);
+16535: 
+16535: }
+16535: # 137 "../../src/Constraint_System_defs.hh"
+16535: class Parma_Polyhedra_Library::Constraint_System {
+16535: public:
+16535:   typedef Constraint row_type;
+16535: 
+16535:   static const Representation default_representation = SPARSE;
+16535: 
+16535: 
+16535:   explicit Constraint_System(Representation r = default_representation);
+16535: 
+16535: 
+16535:   explicit Constraint_System(const Constraint& c,
+16535:                              Representation r = default_representation);
+16535: 
+16535: 
+16535:   explicit Constraint_System(const Congruence_System& cgs,
+16535:                              Representation r = default_representation);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Constraint_System(const Constraint_System& cs);
+16535: 
+16535: 
+16535:   Constraint_System(const Constraint_System& cs, Representation r);
+16535: 
+16535: 
+16535:   ~Constraint_System();
+16535: 
+16535: 
+16535:   Constraint_System& operator=(const Constraint_System& y);
+16535: 
+16535: 
+16535:   Representation representation() const;
+16535: 
+16535: 
+16535:   void set_representation(Representation r);
+16535: 
+16535: 
+16535:   static dimension_type max_space_dimension();
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535:   void set_space_dimension(dimension_type space_dim);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool has_equalities() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool has_strict_inequalities() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void insert(const Constraint& c);
+16535: 
+16535: 
+16535:   static void initialize();
+16535: 
+16535: 
+16535:   static void finalize();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Constraint_System& zero_dim_empty();
+16535: 
+16535:   typedef Constraint_System_const_iterator const_iterator;
+16535: 
+16535: 
+16535:   bool empty() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void clear();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const_iterator begin() const;
+16535: 
+16535: 
+16535:   const_iterator end() const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   void m_swap(Constraint_System& y);
+16535: 
+16535: private:
+16535:   Linear_System<Constraint> sys;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Constraint_System* zero_dim_empty_p;
+16535: 
+16535:   friend class Constraint_System_const_iterator;
+16535: 
+16535:   friend bool operator==(const Constraint_System& x,
+16535:                          const Constraint_System& y);
+16535: 
+16535: 
+16535:   explicit Constraint_System(Topology topol,
+16535:                              Representation r = default_representation);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Constraint_System(Topology topol, dimension_type space_dim,
+16535:                     Representation r = default_representation);
+16535: 
+16535: 
+16535:   dimension_type num_equalities() const;
+16535: 
+16535: 
+16535:   dimension_type num_inequalities() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void simplify();
+16535: # 303 "../../src/Constraint_System_defs.hh"
+16535:   bool adjust_topology_and_space_dimension(Topology new_topology,
+16535:                                            dimension_type new_space_dim);
+16535: 
+16535: 
+16535:   const Constraint& operator[](dimension_type k) const;
+16535: 
+16535: 
+16535:   bool satisfies_all_constraints(const Generator& g) const;
+16535: # 347 "../../src/Constraint_System_defs.hh"
+16535:   void affine_preimage(Variable v,
+16535:                        const Linear_Expression& expr,
+16535:                        Coefficient_traits::const_reference denominator);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void insert_pending(const Constraint& c);
+16535: 
+16535: 
+16535:   void add_low_level_constraints();
+16535: 
+16535: 
+16535:   Topology topology() const;
+16535: 
+16535:   dimension_type num_rows() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_necessarily_closed() const;
+16535: 
+16535: 
+16535:   dimension_type num_pending_rows() const;
+16535: 
+16535: 
+16535:   dimension_type first_pending_row() const;
+16535: 
+16535: 
+16535:   bool is_sorted() const;
+16535: 
+16535: 
+16535:   void unset_pending_rows();
+16535: 
+16535: 
+16535:   void set_index_first_pending_row(dimension_type i);
+16535: 
+16535: 
+16535:   void set_sorted(bool b);
+16535: # 398 "../../src/Constraint_System_defs.hh"
+16535:   void remove_row(dimension_type i, bool keep_sorted = false);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void remove_rows(const std::vector<dimension_type>& indexes);
+16535: # 416 "../../src/Constraint_System_defs.hh"
+16535:   void remove_rows(dimension_type first, dimension_type last,
+16535:                    bool keep_sorted = false);
+16535: 
+16535: 
+16535:   void remove_trailing_rows(dimension_type n);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void remove_space_dimensions(const Variables_Set& vars);
+16535: 
+16535: 
+16535: 
+16535:   void shift_space_dimensions(Variable v, dimension_type n);
+16535: # 446 "../../src/Constraint_System_defs.hh"
+16535:   void permute_space_dimensions(const std::vector<Variable>& cycle);
+16535: 
+16535: 
+16535:   void swap_space_dimensions(Variable v1, Variable v2);
+16535: 
+16535:   bool has_no_rows() const;
+16535: 
+16535: 
+16535:   void strong_normalize();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void sort_rows();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void insert_pending(Constraint& r, Recycle_Input);
+16535: 
+16535: 
+16535: 
+16535:   void insert_pending(Constraint_System& r, Recycle_Input);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void insert(Constraint& r, Recycle_Input);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void insert(Constraint_System& r, Recycle_Input);
+16535: 
+16535: 
+16535:   void insert_pending(const Constraint_System& r);
+16535: # 495 "../../src/Constraint_System_defs.hh"
+16535:   void merge_rows_assign(const Constraint_System& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void insert(const Constraint_System& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void mark_as_necessarily_closed();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void mark_as_not_necessarily_closed();
+16535: # 529 "../../src/Constraint_System_defs.hh"
+16535:   dimension_type gauss(dimension_type n_lines_or_equalities);
+16535: # 541 "../../src/Constraint_System_defs.hh"
+16535:   void back_substitute(dimension_type n_lines_or_equalities);
+16535: 
+16535: 
+16535:   void assign_with_pending(const Constraint_System& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void sort_pending_and_remove_duplicates();
+16535: # 559 "../../src/Constraint_System_defs.hh"
+16535:   void sort_and_remove_with_sat(Bit_Matrix& sat);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool check_sorted() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type num_lines_or_equalities() const;
+16535: # 586 "../../src/Constraint_System_defs.hh"
+16535:   void add_universe_rows_and_space_dimensions(dimension_type n);
+16535: 
+16535:   friend class Polyhedron;
+16535:   friend class Termination_Helpers;
+16535: };
+16535: # 610 "../../src/Constraint_System_defs.hh"
+16535: class Parma_Polyhedra_Library::Constraint_System_const_iterator
+16535:   : public std::iterator<std::forward_iterator_tag,
+16535:                          Constraint,
+16535:                          std::ptrdiff_t,
+16535:                          const Constraint*,
+16535:                          const Constraint&> {
+16535: public:
+16535: 
+16535:   Constraint_System_const_iterator();
+16535: 
+16535: 
+16535:   Constraint_System_const_iterator(const Constraint_System_const_iterator& y);
+16535: 
+16535: 
+16535:   ~Constraint_System_const_iterator();
+16535: 
+16535: 
+16535:   Constraint_System_const_iterator&
+16535:   operator=(const Constraint_System_const_iterator& y);
+16535: 
+16535: 
+16535:   const Constraint& operator*() const;
+16535: 
+16535: 
+16535:   const Constraint* operator->() const;
+16535: 
+16535: 
+16535:   Constraint_System_const_iterator& operator++();
+16535: 
+16535: 
+16535:   Constraint_System_const_iterator operator++(int);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool operator==(const Constraint_System_const_iterator& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool operator!=(const Constraint_System_const_iterator& y) const;
+16535: 
+16535: private:
+16535:   friend class Constraint_System;
+16535: 
+16535: 
+16535:   Linear_System<Constraint>::const_iterator i;
+16535: 
+16535: 
+16535:   const Linear_System<Constraint>* csp;
+16535: 
+16535: 
+16535:   Constraint_System_const_iterator(const Linear_System<Constraint>
+16535:                                    ::const_iterator& iter,
+16535:                                    const Constraint_System& cs);
+16535: 
+16535: 
+16535:   void skip_forward();
+16535: };
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: dimension_type
+16535: num_constraints(const Constraint_System& cs);
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 29 "../../src/Box_inlines.hh" 2
+16535: # 1 "../../src/Constraint_System_inlines.hh" 1
+16535: # 29 "../../src/Constraint_System_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline
+16535: Constraint_System::Constraint_System(Representation r)
+16535:   : sys(NECESSARILY_CLOSED, r) {
+16535: }
+16535: 
+16535: inline
+16535: Constraint_System::Constraint_System(const Constraint& c, Representation r)
+16535:   : sys(c.topology(), r) {
+16535:   sys.insert(c);
+16535: }
+16535: 
+16535: inline
+16535: Constraint_System::Constraint_System(const Constraint_System& cs)
+16535:   : sys(cs.sys) {
+16535: }
+16535: 
+16535: inline
+16535: Constraint_System::Constraint_System(const Constraint_System& cs,
+16535:                                      Representation r)
+16535:   : sys(cs.sys, r) {
+16535: }
+16535: 
+16535: inline
+16535: Constraint_System::Constraint_System(const Topology topol, Representation r)
+16535:   : sys(topol, r) {
+16535: }
+16535: 
+16535: inline
+16535: Constraint_System::Constraint_System(const Topology topol,
+16535:                                      const dimension_type space_dim,
+16535:                                      Representation r)
+16535:   : sys(topol, space_dim, r) {
+16535: }
+16535: 
+16535: inline
+16535: Constraint_System::~Constraint_System() {
+16535: }
+16535: 
+16535: inline Constraint_System&
+16535: Constraint_System::operator=(const Constraint_System& y) {
+16535:   Constraint_System tmp = y;
+16535:   swap(*this, tmp);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline const Constraint&
+16535: Constraint_System::operator[](const dimension_type k) const {
+16535:   return sys[k];
+16535: }
+16535: 
+16535: inline Representation
+16535: Constraint_System::representation() const {
+16535:   return sys.representation();
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::set_representation(Representation r) {
+16535:   sys.set_representation(r);
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Constraint_System::max_space_dimension() {
+16535:   return Linear_System<Constraint>::max_space_dimension();
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Constraint_System::space_dimension() const {
+16535:   return sys.space_dimension();
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::set_space_dimension(dimension_type space_dim) {
+16535:   return sys.set_space_dimension(space_dim);
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::clear() {
+16535:   sys.clear();
+16535: }
+16535: 
+16535: inline const Constraint_System&
+16535: Constraint_System::zero_dim_empty() {
+16535:   ((void) 0);
+16535:   return *zero_dim_empty_p;
+16535: }
+16535: 
+16535: inline
+16535: Constraint_System_const_iterator::Constraint_System_const_iterator()
+16535:   : i(), csp(0) {
+16535: }
+16535: 
+16535: inline
+16535: Constraint_System_const_iterator::Constraint_System_const_iterator(const Constraint_System_const_iterator& y)
+16535:   : i(y.i), csp(y.csp) {
+16535: }
+16535: 
+16535: inline
+16535: Constraint_System_const_iterator::~Constraint_System_const_iterator() {
+16535: }
+16535: 
+16535: inline Constraint_System_const_iterator&
+16535: Constraint_System_const_iterator::operator=(const Constraint_System_const_iterator& y) {
+16535:   i = y.i;
+16535:   csp = y.csp;
+16535:   return *this;
+16535: }
+16535: 
+16535: inline const Constraint&
+16535: Constraint_System_const_iterator::operator*() const {
+16535:   return *i;
+16535: }
+16535: 
+16535: inline const Constraint*
+16535: Constraint_System_const_iterator::operator->() const {
+16535:   return i.operator->();
+16535: }
+16535: 
+16535: inline Constraint_System_const_iterator&
+16535: Constraint_System_const_iterator::operator++() {
+16535:   ++i;
+16535:   skip_forward();
+16535:   return *this;
+16535: }
+16535: 
+16535: inline Constraint_System_const_iterator
+16535: Constraint_System_const_iterator::operator++(int) {
+16535:   const Constraint_System_const_iterator tmp = *this;
+16535:   operator++();
+16535:   return tmp;
+16535: }
+16535: 
+16535: inline bool
+16535: Constraint_System_const_iterator::operator==(const Constraint_System_const_iterator& y) const {
+16535:   return i == y.i;
+16535: }
+16535: 
+16535: inline bool
+16535: Constraint_System_const_iterator::operator!=(const Constraint_System_const_iterator& y) const {
+16535:   return i != y.i;
+16535: }
+16535: 
+16535: inline
+16535: Constraint_System_const_iterator::
+16535: Constraint_System_const_iterator(const Linear_System<Constraint>::const_iterator& iter,
+16535:                const Constraint_System& cs)
+16535:   : i(iter), csp(&cs.sys) {
+16535: }
+16535: 
+16535: inline Constraint_System_const_iterator
+16535: Constraint_System::begin() const {
+16535:   const_iterator i(sys.begin(), *this);
+16535:   i.skip_forward();
+16535:   return i;
+16535: }
+16535: 
+16535: inline Constraint_System_const_iterator
+16535: Constraint_System::end() const {
+16535:   const Constraint_System_const_iterator i(sys.end(), *this);
+16535:   return i;
+16535: }
+16535: 
+16535: inline bool
+16535: Constraint_System::empty() const {
+16535:   return begin() == end();
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::add_low_level_constraints() {
+16535:   if (sys.is_necessarily_closed()) {
+16535: 
+16535:     insert(Constraint::zero_dim_positivity());
+16535:   }
+16535:   else {
+16535: 
+16535:     insert(Constraint::epsilon_leq_one());
+16535:     insert(Constraint::epsilon_geq_zero());
+16535:   }
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::m_swap(Constraint_System& y) {
+16535:   swap(sys, y.sys);
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Constraint_System::external_memory_in_bytes() const {
+16535:   return sys.external_memory_in_bytes();
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Constraint_System::total_memory_in_bytes() const {
+16535:   return external_memory_in_bytes() + sizeof(*this);
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::simplify() {
+16535:   sys.simplify();
+16535: }
+16535: 
+16535: inline Topology
+16535: Constraint_System::topology() const {
+16535:   return sys.topology();
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Constraint_System::num_rows() const {
+16535:   return sys.num_rows();
+16535: }
+16535: 
+16535: inline bool
+16535: Constraint_System::is_necessarily_closed() const {
+16535:   return sys.is_necessarily_closed();
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Constraint_System::num_pending_rows() const {
+16535:   return sys.num_pending_rows();
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Constraint_System::first_pending_row() const {
+16535:   return sys.first_pending_row();
+16535: }
+16535: 
+16535: inline bool
+16535: Constraint_System::is_sorted() const {
+16535:   return sys.is_sorted();
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::unset_pending_rows() {
+16535:   sys.unset_pending_rows();
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::set_index_first_pending_row(dimension_type i) {
+16535:   sys.set_index_first_pending_row(i);
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::set_sorted(bool b) {
+16535:   sys.set_sorted(b);
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::remove_row(dimension_type i, bool keep_sorted) {
+16535:   sys.remove_row(i, keep_sorted);
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::remove_rows(dimension_type first, dimension_type last,
+16535:                                bool keep_sorted) {
+16535:   sys.remove_rows(first, last, keep_sorted);
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::remove_rows(const std::vector<dimension_type>& indexes) {
+16535:   sys.remove_rows(indexes);
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::remove_trailing_rows(dimension_type n) {
+16535:   sys.remove_trailing_rows(n);
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System
+16535: ::remove_space_dimensions(const Variables_Set& vars) {
+16535:   sys.remove_space_dimensions(vars);
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System
+16535: ::shift_space_dimensions(Variable v, dimension_type n) {
+16535:   sys.shift_space_dimensions(v, n);
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System
+16535: ::permute_space_dimensions(const std::vector<Variable>& cycle) {
+16535:   sys.permute_space_dimensions(cycle);
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System
+16535: ::swap_space_dimensions(Variable v1, Variable v2) {
+16535:   sys.swap_space_dimensions(v1, v2);
+16535: }
+16535: 
+16535: inline bool
+16535: Constraint_System::has_no_rows() const {
+16535:   return sys.has_no_rows();
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::strong_normalize() {
+16535:   sys.strong_normalize();
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::sort_rows() {
+16535:   sys.sort_rows();
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::insert_pending(Constraint_System& r, Recycle_Input) {
+16535:   sys.insert_pending(r.sys, Recycle_Input());
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::insert(Constraint_System& r, Recycle_Input) {
+16535:   sys.insert(r.sys, Recycle_Input());
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::insert_pending(const Constraint_System& r) {
+16535:   sys.insert_pending(r.sys);
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::merge_rows_assign(const Constraint_System& y) {
+16535:   sys.merge_rows_assign(y.sys);
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::insert(const Constraint_System& y) {
+16535:   sys.insert(y.sys);
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::mark_as_necessarily_closed() {
+16535:   sys.mark_as_necessarily_closed();
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::mark_as_not_necessarily_closed() {
+16535:   sys.mark_as_not_necessarily_closed();
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Constraint_System::gauss(dimension_type n_lines_or_equalities) {
+16535:   return sys.gauss(n_lines_or_equalities);
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::back_substitute(dimension_type n_lines_or_equalities) {
+16535:   sys.back_substitute(n_lines_or_equalities);
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::assign_with_pending(const Constraint_System& y) {
+16535:   sys.assign_with_pending(y.sys);
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::sort_pending_and_remove_duplicates() {
+16535:   sys.sort_pending_and_remove_duplicates();
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::sort_and_remove_with_sat(Bit_Matrix& sat) {
+16535:   sys.sort_and_remove_with_sat(sat);
+16535: }
+16535: 
+16535: inline bool
+16535: Constraint_System::check_sorted() const {
+16535:   return sys.check_sorted();
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Constraint_System::num_lines_or_equalities() const {
+16535:   return sys.num_lines_or_equalities();
+16535: }
+16535: 
+16535: inline void
+16535: Constraint_System::add_universe_rows_and_space_dimensions(dimension_type n) {
+16535:   sys.add_universe_rows_and_space_dimensions(n);
+16535: }
+16535: 
+16535: inline bool
+16535: operator==(const Constraint_System& x, const Constraint_System& y) {
+16535:   return x.sys == y.sys;
+16535: }
+16535: 
+16535: inline bool
+16535: operator!=(const Constraint_System& x, const Constraint_System& y) {
+16535:   return !(x == y);
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: swap(Constraint_System& x, Constraint_System& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: inline dimension_type
+16535: num_constraints(const Constraint_System& cs) {
+16535:   return static_cast<dimension_type>(std::distance(cs.begin(), cs.end()));
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 30 "../../src/Box_inlines.hh" 2
+16535: # 1 "../../src/Congruence_System_defs.hh" 1
+16535: # 38 "../../src/Congruence_System_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: bool
+16535: operator==(const Congruence_System& x, const Congruence_System& y);
+16535: 
+16535: }
+16535: # 103 "../../src/Congruence_System_defs.hh"
+16535: class Parma_Polyhedra_Library::Congruence_System {
+16535: public:
+16535: 
+16535:   typedef Congruence row_type;
+16535: 
+16535:   static const Representation default_representation = SPARSE;
+16535: 
+16535: 
+16535:   explicit Congruence_System(Representation r = default_representation);
+16535: 
+16535: 
+16535:   explicit Congruence_System(dimension_type d,
+16535:                              Representation r = default_representation);
+16535: 
+16535: 
+16535:   explicit Congruence_System(const Congruence& cg,
+16535:                              Representation r = default_representation);
+16535: # 129 "../../src/Congruence_System_defs.hh"
+16535:   explicit Congruence_System(const Constraint& c,
+16535:                              Representation r = default_representation);
+16535: 
+16535: 
+16535:   explicit Congruence_System(const Constraint_System& cs,
+16535:                              Representation r = default_representation);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Congruence_System(const Congruence_System& cgs);
+16535: 
+16535: 
+16535:   Congruence_System(const Congruence_System& cgs, Representation r);
+16535: 
+16535: 
+16535:   ~Congruence_System();
+16535: 
+16535: 
+16535:   Congruence_System& operator=(const Congruence_System& y);
+16535: 
+16535: 
+16535:   Representation representation() const;
+16535: 
+16535: 
+16535:   void set_representation(Representation r);
+16535: 
+16535: 
+16535:   static dimension_type max_space_dimension();
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_equal_to(const Congruence_System& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool has_linear_equalities() const;
+16535: 
+16535: 
+16535:   void clear();
+16535: # 187 "../../src/Congruence_System_defs.hh"
+16535:   void insert(const Congruence& cg);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void insert(Congruence& cg, Recycle_Input);
+16535: # 208 "../../src/Congruence_System_defs.hh"
+16535:   void insert(const Constraint& c);
+16535: # 218 "../../src/Congruence_System_defs.hh"
+16535:   void insert(const Congruence_System& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void insert(Congruence_System& cgs, Recycle_Input);
+16535: 
+16535: 
+16535:   static void initialize();
+16535: 
+16535: 
+16535:   static void finalize();
+16535: 
+16535: 
+16535:   static const Congruence_System& zero_dim_empty();
+16535: # 250 "../../src/Congruence_System_defs.hh"
+16535:   class const_iterator
+16535:     : public std::iterator<std::forward_iterator_tag,
+16535:                            Congruence,
+16535:                            std::ptrdiff_t,
+16535:                            const Congruence*,
+16535:                            const Congruence&> {
+16535:   public:
+16535: 
+16535:     const_iterator();
+16535: 
+16535: 
+16535:     const_iterator(const const_iterator& y);
+16535: 
+16535: 
+16535:     ~const_iterator();
+16535: 
+16535: 
+16535:     const_iterator& operator=(const const_iterator& y);
+16535: 
+16535: 
+16535:     const Congruence& operator*() const;
+16535: 
+16535: 
+16535:     const Congruence* operator->() const;
+16535: 
+16535: 
+16535:     const_iterator& operator++();
+16535: 
+16535: 
+16535:     const_iterator operator++(int);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     bool operator==(const const_iterator& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     bool operator!=(const const_iterator& y) const;
+16535: 
+16535:   private:
+16535:     friend class Congruence_System;
+16535: 
+16535: 
+16535:     Swapping_Vector<Congruence>::const_iterator i;
+16535: 
+16535: 
+16535:     const Swapping_Vector<Congruence>* csp;
+16535: 
+16535: 
+16535:     const_iterator(const Swapping_Vector<Congruence>::const_iterator& iter,
+16535:                    const Congruence_System& cgs);
+16535: 
+16535: 
+16535:     void skip_forward();
+16535:   };
+16535: 
+16535: 
+16535:   bool empty() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const_iterator begin() const;
+16535: 
+16535: 
+16535:   const_iterator end() const;
+16535: # 331 "../../src/Congruence_System_defs.hh"
+16535:   bool OK() const;
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   dimension_type num_equalities() const;
+16535: 
+16535: 
+16535:   dimension_type num_proper_congruences() const;
+16535: 
+16535: 
+16535:   void m_swap(Congruence_System& y);
+16535: # 372 "../../src/Congruence_System_defs.hh"
+16535:   void add_unit_rows_and_space_dimensions(dimension_type dims);
+16535: # 386 "../../src/Congruence_System_defs.hh"
+16535:   void permute_space_dimensions(const std::vector<Variable>& cycle);
+16535: 
+16535: 
+16535:   void swap_space_dimensions(Variable v1, Variable v2);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool set_space_dimension(dimension_type new_space_dim);
+16535: 
+16535: 
+16535: 
+16535: protected:
+16535: 
+16535:   bool satisfies_all_congruences(const Grid_Generator& g) const;
+16535: 
+16535: private:
+16535: 
+16535:   dimension_type num_rows() const;
+16535: 
+16535: 
+16535:   bool has_no_rows() const;
+16535: 
+16535: 
+16535:   const Congruence& operator[](dimension_type k) const;
+16535: 
+16535: 
+16535:   void normalize_moduli();
+16535: # 455 "../../src/Congruence_System_defs.hh"
+16535:   void affine_preimage(Variable v,
+16535:                        const Linear_Expression& expr,
+16535:                        Coefficient_traits::const_reference denominator);
+16535: # 472 "../../src/Congruence_System_defs.hh"
+16535:   void concatenate(const Congruence_System& y);
+16535: # 481 "../../src/Congruence_System_defs.hh"
+16535:   void insert_verbatim(Congruence& cg, Recycle_Input);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void remove_rows(dimension_type first, dimension_type last,
+16535:                    bool keep_sorted);
+16535: 
+16535:   void remove_trailing_rows(dimension_type n);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Congruence_System* zero_dim_empty_p;
+16535: 
+16535:   Swapping_Vector<Congruence> rows;
+16535: 
+16535:   dimension_type space_dimension_;
+16535: 
+16535:   Representation representation_;
+16535: # 514 "../../src/Congruence_System_defs.hh"
+16535:   bool has_a_free_dimension() const;
+16535: 
+16535:   friend class Grid;
+16535: 
+16535:   friend bool
+16535:   operator==(const Congruence_System& x, const Congruence_System& y);
+16535: };
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: std::ostream&
+16535: operator<<(std::ostream& s, const Congruence_System& cgs);
+16535: 
+16535: }
+16535: 
+16535: 
+16535: void
+16535: swap(Congruence_System& x, Congruence_System& y);
+16535: 
+16535: }
+16535: # 31 "../../src/Box_inlines.hh" 2
+16535: # 1 "../../src/Congruence_System_inlines.hh" 1
+16535: # 29 "../../src/Congruence_System_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline const Congruence&
+16535: Congruence_System::operator[](const dimension_type k) const {
+16535:   return rows[k];
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Congruence_System::num_rows() const {
+16535:   return rows.size();
+16535: }
+16535: 
+16535: inline bool
+16535: Congruence_System::has_no_rows() const {
+16535:   return num_rows() == 0;
+16535: }
+16535: 
+16535: inline void
+16535: Congruence_System::remove_trailing_rows(dimension_type n) {
+16535:   ((void) 0);
+16535:   rows.resize(num_rows() - n);
+16535: }
+16535: 
+16535: inline void
+16535: Congruence_System::insert(const Congruence& cg) {
+16535:   Congruence tmp = cg;
+16535:   insert(tmp, Recycle_Input());
+16535: }
+16535: 
+16535: inline void
+16535: Congruence_System::insert(Congruence& cg, Recycle_Input) {
+16535:   ((void) 0);
+16535:   cg.strong_normalize();
+16535:   ((void) 0);
+16535:   insert_verbatim(cg, Recycle_Input());
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Congruence_System::Congruence_System(Representation r)
+16535:   : rows(),
+16535:     space_dimension_(0),
+16535:     representation_(r) {
+16535: }
+16535: 
+16535: inline
+16535: Congruence_System::Congruence_System(const Congruence& cg, Representation r)
+16535:   : rows(),
+16535:     space_dimension_(0),
+16535:     representation_(r) {
+16535:   insert(cg);
+16535: }
+16535: 
+16535: inline
+16535: Congruence_System::Congruence_System(const Constraint& c, Representation r)
+16535:   : rows(),
+16535:     space_dimension_(0),
+16535:     representation_(r) {
+16535:   insert(c);
+16535: }
+16535: 
+16535: inline
+16535: Congruence_System::Congruence_System(const Congruence_System& cgs)
+16535:   : rows(cgs.rows),
+16535:     space_dimension_(cgs.space_dimension_),
+16535:     representation_(cgs.representation_) {
+16535: }
+16535: 
+16535: inline
+16535: Congruence_System::Congruence_System(const Congruence_System& cgs,
+16535:                                      Representation r)
+16535:   : rows(cgs.rows),
+16535:     space_dimension_(cgs.space_dimension_),
+16535:     representation_(r) {
+16535:   if (cgs.representation() != r) {
+16535:     for (dimension_type i = 0; i < num_rows(); ++i) {
+16535:       rows[i].set_representation(representation());
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: inline
+16535: Congruence_System::Congruence_System(const dimension_type d, Representation r)
+16535:   : rows(),
+16535:     space_dimension_(d),
+16535:     representation_(r) {
+16535: }
+16535: 
+16535: inline
+16535: Congruence_System::~Congruence_System() {
+16535: }
+16535: 
+16535: inline Congruence_System&
+16535: Congruence_System::operator=(const Congruence_System& y) {
+16535:   Congruence_System tmp = y;
+16535:   swap(*this, tmp);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline Representation
+16535: Congruence_System::representation() const {
+16535:   return representation_;
+16535: }
+16535: 
+16535: inline void
+16535: Congruence_System::set_representation(Representation r) {
+16535:   if (representation_ == r) {
+16535:     return;
+16535:   }
+16535:   representation_ = r;
+16535:   for (dimension_type i = 0; i < num_rows(); ++i) {
+16535:     rows[i].set_representation(r);
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Congruence_System::max_space_dimension() {
+16535:   return Congruence::max_space_dimension();
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Congruence_System::space_dimension() const {
+16535:   return space_dimension_;
+16535: }
+16535: 
+16535: inline void
+16535: Congruence_System::clear() {
+16535:   rows.clear();
+16535:   space_dimension_ = 0;
+16535: }
+16535: 
+16535: inline const Congruence_System&
+16535: Congruence_System::zero_dim_empty() {
+16535:   ((void) 0);
+16535:   return *zero_dim_empty_p;
+16535: }
+16535: 
+16535: inline
+16535: Congruence_System::const_iterator::const_iterator()
+16535:   : i(), csp(0) {
+16535: }
+16535: 
+16535: inline
+16535: Congruence_System::const_iterator::const_iterator(const const_iterator& y)
+16535:   : i(y.i), csp(y.csp) {
+16535: }
+16535: 
+16535: inline
+16535: Congruence_System::const_iterator::~const_iterator() {
+16535: }
+16535: 
+16535: inline Congruence_System::const_iterator&
+16535: Congruence_System::const_iterator::operator=(const const_iterator& y) {
+16535:   i = y.i;
+16535:   csp = y.csp;
+16535:   return *this;
+16535: }
+16535: 
+16535: inline const Congruence&
+16535: Congruence_System::const_iterator::operator*() const {
+16535:   return *i;
+16535: }
+16535: 
+16535: inline const Congruence*
+16535: Congruence_System::const_iterator::operator->() const {
+16535:   return i.operator->();
+16535: }
+16535: 
+16535: inline Congruence_System::const_iterator&
+16535: Congruence_System::const_iterator::operator++() {
+16535:   ++i;
+16535:   skip_forward();
+16535:   return *this;
+16535: }
+16535: 
+16535: inline Congruence_System::const_iterator
+16535: Congruence_System::const_iterator::operator++(int) {
+16535:   const const_iterator tmp = *this;
+16535:   operator++();
+16535:   return tmp;
+16535: }
+16535: 
+16535: inline bool
+16535: Congruence_System::const_iterator::operator==(const const_iterator& y) const {
+16535:   return i == y.i;
+16535: }
+16535: 
+16535: inline bool
+16535: Congruence_System::const_iterator::operator!=(const const_iterator& y) const {
+16535:   return i != y.i;
+16535: }
+16535: 
+16535: inline
+16535: Congruence_System::const_iterator::
+16535: const_iterator(const Swapping_Vector<Congruence>::const_iterator& iter,
+16535:                const Congruence_System& cgs)
+16535:   : i(iter), csp(&cgs.rows) {
+16535: }
+16535: 
+16535: inline Congruence_System::const_iterator
+16535: Congruence_System::begin() const {
+16535:   const_iterator i(rows.begin(), *this);
+16535:   i.skip_forward();
+16535:   return i;
+16535: }
+16535: 
+16535: inline Congruence_System::const_iterator
+16535: Congruence_System::end() const {
+16535:   const const_iterator i(rows.end(), *this);
+16535:   return i;
+16535: }
+16535: 
+16535: inline bool
+16535: Congruence_System::empty() const {
+16535:   return begin() == end();
+16535: }
+16535: 
+16535: inline void
+16535: Congruence_System::m_swap(Congruence_System& y) {
+16535:   using std::swap;
+16535:   swap(rows, y.rows);
+16535:   swap(space_dimension_, y.space_dimension_);
+16535:   swap(representation_, y.representation_);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Congruence_System::external_memory_in_bytes() const {
+16535:   return rows.external_memory_in_bytes();
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Congruence_System::total_memory_in_bytes() const {
+16535:   return rows.external_memory_in_bytes() + sizeof(*this);
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: swap(Congruence_System& x, Congruence_System& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 32 "../../src/Box_inlines.hh" 2
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename ITV>
+16535: inline bool
+16535: Box<ITV>::marked_empty() const {
+16535:   return status.test_empty_up_to_date() && status.test_empty();
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::set_empty() {
+16535:   status.set_empty();
+16535:   status.set_empty_up_to_date();
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::set_nonempty() {
+16535:   status.reset_empty();
+16535:   status.set_empty_up_to_date();
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::set_empty_up_to_date() {
+16535:   status.set_empty_up_to_date();
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::reset_empty_up_to_date() {
+16535:   return status.reset_empty_up_to_date();
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline
+16535: Box<ITV>::Box(const Box& y, Complexity_Class)
+16535:   : seq(y.seq), status(y.status) {
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline Box<ITV>&
+16535: Box<ITV>::operator=(const Box& y) {
+16535:   seq = y.seq;
+16535:   status = y.status;
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::m_swap(Box& y) {
+16535:   Box& x = *this;
+16535:   using std::swap;
+16535:   swap(x.seq, y.seq);
+16535:   swap(x.status, y.status);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline
+16535: Box<ITV>::Box(const Constraint_System& cs, Recycle_Input) {
+16535: 
+16535:   Box<ITV> tmp(cs);
+16535:   this->m_swap(tmp);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline
+16535: Box<ITV>::Box(const Generator_System& gs, Recycle_Input) {
+16535: 
+16535:   Box<ITV> tmp(gs);
+16535:   this->m_swap(tmp);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline
+16535: Box<ITV>::Box(const Congruence_System& cgs, Recycle_Input) {
+16535: 
+16535:   Box<ITV> tmp(cgs);
+16535:   this->m_swap(tmp);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline memory_size_type
+16535: Box<ITV>::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline dimension_type
+16535: Box<ITV>::space_dimension() const {
+16535:   return seq.size();
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline dimension_type
+16535: Box<ITV>::max_space_dimension() {
+16535: 
+16535: 
+16535:   return Sequence().max_size() - 1;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline int32_t
+16535: Box<ITV>::hash_code() const {
+16535:   return hash_code_from_dimension(space_dimension());
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline const ITV&
+16535: Box<ITV>::operator[](const dimension_type k) const {
+16535:   ((void) 0);
+16535:   return seq[k];
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline const ITV&
+16535: Box<ITV>::get_interval(const Variable var) const {
+16535:   if (space_dimension() < var.space_dimension()) {
+16535:     throw_dimension_incompatible("get_interval(v)", "v", var);
+16535:   }
+16535:   if (is_empty()) {
+16535:     static ITV empty_interval(EMPTY);
+16535:     return empty_interval;
+16535:   }
+16535: 
+16535:   return seq[var.id()];
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::set_interval(const Variable var, const ITV& i) {
+16535:   const dimension_type space_dim = space_dimension();
+16535:   if (space_dim < var.space_dimension()) {
+16535:     throw_dimension_incompatible("set_interval(v, i)", "v", var);
+16535:   }
+16535: 
+16535:   if (is_empty() && space_dim >= 2) {
+16535: 
+16535: 
+16535:     return;
+16535:   }
+16535:   seq[var.id()] = i;
+16535:   reset_empty_up_to_date();
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline bool
+16535: Box<ITV>::is_empty() const {
+16535:   return marked_empty() || check_empty();
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline bool
+16535: Box<ITV>::bounds_from_above(const Linear_Expression& expr) const {
+16535:   return bounds(expr, true);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline bool
+16535: Box<ITV>::bounds_from_below(const Linear_Expression& expr) const {
+16535:   return bounds(expr, false);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline bool
+16535: Box<ITV>::maximize(const Linear_Expression& expr,
+16535:                    Coefficient& sup_n, Coefficient& sup_d,
+16535:                    bool& maximum) const {
+16535:   return max_min(expr, true, sup_n, sup_d, maximum);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline bool
+16535: Box<ITV>::maximize(const Linear_Expression& expr,
+16535:                    Coefficient& sup_n, Coefficient& sup_d, bool& maximum,
+16535:                    Generator& g) const {
+16535:   return max_min(expr, true, sup_n, sup_d, maximum, g);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline bool
+16535: Box<ITV>::minimize(const Linear_Expression& expr,
+16535:                    Coefficient& inf_n, Coefficient& inf_d,
+16535:                    bool& minimum) const {
+16535:   return max_min(expr, false, inf_n, inf_d, minimum);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline bool
+16535: Box<ITV>::minimize(const Linear_Expression& expr,
+16535:                    Coefficient& inf_n, Coefficient& inf_d, bool& minimum,
+16535:                    Generator& g) const {
+16535:   return max_min(expr, false, inf_n, inf_d, minimum, g);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline bool
+16535: Box<ITV>::strictly_contains(const Box& y) const {
+16535:   const Box& x = *this;
+16535:   return x.contains(y) && !y.contains(x);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::expand_space_dimension(const Variable var,
+16535:                                  const dimension_type m) {
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535:   if (var.space_dimension() > space_dim) {
+16535:     throw_dimension_incompatible("expand_space_dimension(v, m)", "v", var);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (m > max_space_dimension() - space_dim) {
+16535:     throw_invalid_argument("expand_dimension(v, m)",
+16535:                            "adding m new space dimensions exceeds "
+16535:                            "the maximum allowed space dimension");
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   seq.insert(seq.end(), m, seq[var.id()]);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline bool
+16535: operator!=(const Box<ITV>& x, const Box<ITV>& y) {
+16535:   return !(x == y);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline bool
+16535: Box<ITV>::has_lower_bound(const Variable var,
+16535:                           Coefficient& n, Coefficient& d, bool& closed) const {
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   const dimension_type k = var.id();
+16535:   ((void) 0);
+16535:   const ITV& seq_k = seq[k];
+16535: 
+16535:   if (seq_k.lower_is_boundary_infinity()) {
+16535:     return false;
+16535:   }
+16535:   closed = !seq_k.lower_is_open();
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_lr; mpq_class& lr = holder_lr.item();
+16535:   assign_r(lr, seq_k.lower(), ROUND_NOT_NEEDED);
+16535:   n = lr.get_num();
+16535:   d = lr.get_den();
+16535: 
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline bool
+16535: Box<ITV>::has_upper_bound(const Variable var,
+16535:                           Coefficient& n, Coefficient& d, bool& closed) const {
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   const dimension_type k = var.id();
+16535:   ((void) 0);
+16535:   const ITV& seq_k = seq[k];
+16535: 
+16535:   if (seq_k.upper_is_boundary_infinity()) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   closed = !seq_k.upper_is_open();
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_ur; mpq_class& ur = holder_ur.item();
+16535:   assign_r(ur, seq_k.upper(), ROUND_NOT_NEEDED);
+16535:   n = ur.get_num();
+16535:   d = ur.get_den();
+16535: 
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::add_constraint(const Constraint& c) {
+16535:   const dimension_type c_space_dim = c.space_dimension();
+16535: 
+16535:   if (c_space_dim > space_dimension()) {
+16535:     throw_dimension_incompatible("add_constraint(c)", c);
+16535:   }
+16535: 
+16535:   add_constraint_no_check(c);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::add_constraints(const Constraint_System& cs) {
+16535: 
+16535:   if (cs.space_dimension() > space_dimension()) {
+16535:     throw_dimension_incompatible("add_constraints(cs)", cs);
+16535:   }
+16535: 
+16535:   add_constraints_no_check(cs);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Box<T>::add_recycled_constraints(Constraint_System& cs) {
+16535:   add_constraints(cs);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::add_congruence(const Congruence& cg) {
+16535:   const dimension_type cg_space_dim = cg.space_dimension();
+16535: 
+16535:   if (cg_space_dim > space_dimension()) {
+16535:     throw_dimension_incompatible("add_congruence(cg)", cg);
+16535:   }
+16535: 
+16535:   add_congruence_no_check(cg);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::add_congruences(const Congruence_System& cgs) {
+16535:   if (cgs.space_dimension() > space_dimension()) {
+16535:     throw_dimension_incompatible("add_congruences(cgs)", cgs);
+16535:   }
+16535:   add_congruences_no_check(cgs);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Box<T>::add_recycled_congruences(Congruence_System& cgs) {
+16535:   add_congruences(cgs);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Box<T>::can_recycle_constraint_systems() {
+16535:   return false;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Box<T>::can_recycle_congruence_systems() {
+16535:   return false;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Box<T>::widening_assign(const Box& y, unsigned* tp) {
+16535:   CC76_widening_assign(y, tp);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline Congruence_System
+16535: Box<ITV>::minimized_congruences() const {
+16535: 
+16535:   return congruences();
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline I_Result
+16535: Box<ITV>
+16535: ::refine_interval_no_check(ITV& itv,
+16535:                            const Constraint::Type type,
+16535:                            Coefficient_traits::const_reference numer,
+16535:                            Coefficient_traits::const_reference denom) {
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
+16535:   assign_r(q.get_num(), numer, ROUND_NOT_NEEDED);
+16535:   assign_r(q.get_den(), denom, ROUND_NOT_NEEDED);
+16535:   q.canonicalize();
+16535: 
+16535:   q = -q;
+16535: 
+16535:   Relation_Symbol rel_sym;
+16535:   switch (type) {
+16535:   case Constraint::EQUALITY:
+16535:     rel_sym = EQUAL;
+16535:     break;
+16535:   case Constraint::NONSTRICT_INEQUALITY:
+16535:     rel_sym = (denom > 0) ? GREATER_OR_EQUAL : LESS_OR_EQUAL;
+16535:     break;
+16535:   case Constraint::STRICT_INEQUALITY:
+16535:     rel_sym = (denom > 0) ? GREATER_THAN : LESS_THAN;
+16535:     break;
+16535:   default:
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return I_ANY;
+16535:   }
+16535:   I_Result res = itv.add_constraint(i_constraint(rel_sym, q));
+16535:   ((void) 0);
+16535:   return res;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>
+16535: ::add_interval_constraint_no_check(const dimension_type var_id,
+16535:                                    const Constraint::Type type,
+16535:                                    Coefficient_traits::const_reference numer,
+16535:                                    Coefficient_traits::const_reference denom) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   refine_interval_no_check(seq[var_id], type, numer, denom);
+16535: 
+16535: 
+16535: 
+16535:   reset_empty_up_to_date();
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::refine_with_constraint(const Constraint& c) {
+16535:   const dimension_type c_space_dim = c.space_dimension();
+16535: 
+16535:   if (c_space_dim > space_dimension()) {
+16535:     throw_dimension_incompatible("refine_with_constraint(c)", c);
+16535:   }
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   refine_no_check(c);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::refine_with_constraints(const Constraint_System& cs) {
+16535: 
+16535:   if (cs.space_dimension() > space_dimension()) {
+16535:     throw_dimension_incompatible("refine_with_constraints(cs)", cs);
+16535:   }
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535:   refine_no_check(cs);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::refine_with_congruence(const Congruence& cg) {
+16535:   const dimension_type cg_space_dim = cg.space_dimension();
+16535: 
+16535:   if (cg_space_dim > space_dimension()) {
+16535:     throw_dimension_incompatible("refine_with_congruence(cg)", cg);
+16535:   }
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535:   refine_no_check(cg);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::refine_with_congruences(const Congruence_System& cgs) {
+16535: 
+16535:   if (cgs.space_dimension() > space_dimension()) {
+16535:     throw_dimension_incompatible("refine_with_congruences(cgs)", cgs);
+16535:   }
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   refine_no_check(cgs);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::propagate_constraint(const Constraint& c) {
+16535:   const dimension_type c_space_dim = c.space_dimension();
+16535: 
+16535:   if (c_space_dim > space_dimension()) {
+16535:     throw_dimension_incompatible("propagate_constraint(c)", c);
+16535:   }
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535:   propagate_constraint_no_check(c);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::propagate_constraints(const Constraint_System& cs,
+16535:                                 const dimension_type max_iterations) {
+16535: 
+16535:   if (cs.space_dimension() > space_dimension()) {
+16535:     throw_dimension_incompatible("propagate_constraints(cs)", cs);
+16535:   }
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   propagate_constraints_no_check(cs, max_iterations);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::unconstrain(const Variable var) {
+16535:   const dimension_type var_id = var.id();
+16535: 
+16535:   if (space_dimension() < var_id + 1) {
+16535:     throw_dimension_incompatible("unconstrain(var)", var_id + 1);
+16535:   }
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   ITV& seq_var = seq[var_id];
+16535:   if (seq_var.is_empty()) {
+16535:     set_empty();
+16535:   }
+16535:   else {
+16535:     seq_var.assign(UNIVERSE);
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename ITV>
+16535: inline bool
+16535: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                             const Box<ITV>& x,
+16535:                             const Box<ITV>& y,
+16535:                             const Rounding_Dir dir,
+16535:                             Temp& tmp0,
+16535:                             Temp& tmp1,
+16535:                             Temp& tmp2) {
+16535:   return l_m_distance_assign<Rectilinear_Distance_Specialization<Temp> >
+16535:     (r, x, y, dir, tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename ITV>
+16535: inline bool
+16535: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                             const Box<ITV>& x,
+16535:                             const Box<ITV>& y,
+16535:                             const Rounding_Dir dir) {
+16535:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
+16535:   return rectilinear_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename To, typename ITV>
+16535: inline bool
+16535: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                             const Box<ITV>& x,
+16535:                             const Box<ITV>& y,
+16535:                             const Rounding_Dir dir) {
+16535: 
+16535: 
+16535:   return Parma_Polyhedra_Library
+16535:     ::rectilinear_distance_assign<To, To, ITV>(r, x, y, dir);
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename ITV>
+16535: inline bool
+16535: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                           const Box<ITV>& x,
+16535:                           const Box<ITV>& y,
+16535:                           const Rounding_Dir dir,
+16535:                           Temp& tmp0,
+16535:                           Temp& tmp1,
+16535:                           Temp& tmp2) {
+16535:   return l_m_distance_assign<Euclidean_Distance_Specialization<Temp> >
+16535:     (r, x, y, dir, tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename ITV>
+16535: inline bool
+16535: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                           const Box<ITV>& x,
+16535:                           const Box<ITV>& y,
+16535:                           const Rounding_Dir dir) {
+16535:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
+16535:   return euclidean_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename To, typename ITV>
+16535: inline bool
+16535: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                           const Box<ITV>& x,
+16535:                           const Box<ITV>& y,
+16535:                           const Rounding_Dir dir) {
+16535: 
+16535: 
+16535:   return Parma_Polyhedra_Library
+16535:     ::euclidean_distance_assign<To, To, ITV>(r, x, y, dir);
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename ITV>
+16535: inline bool
+16535: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                            const Box<ITV>& x,
+16535:                            const Box<ITV>& y,
+16535:                            const Rounding_Dir dir,
+16535:                            Temp& tmp0,
+16535:                            Temp& tmp1,
+16535:                            Temp& tmp2) {
+16535:   return l_m_distance_assign<L_Infinity_Distance_Specialization<Temp> >
+16535:     (r, x, y, dir, tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename ITV>
+16535: inline bool
+16535: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                            const Box<ITV>& x,
+16535:                            const Box<ITV>& y,
+16535:                            const Rounding_Dir dir) {
+16535:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
+16535:   return l_infinity_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename To, typename ITV>
+16535: inline bool
+16535: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                            const Box<ITV>& x,
+16535:                            const Box<ITV>& y,
+16535:                            const Rounding_Dir dir) {
+16535: 
+16535: 
+16535:   return Parma_Polyhedra_Library
+16535:     ::l_infinity_distance_assign<To, To, ITV>(r, x, y, dir);
+16535: }
+16535: 
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: swap(Box<ITV>& x, Box<ITV>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 2286 "../../src/Box_defs.hh" 2
+16535: # 1 "../../src/Box_templates.hh" 1
+16535: # 30 "../../src/Box_templates.hh"
+16535: # 1 "../../src/Generator_System_defs.hh" 1
+16535: # 33 "../../src/Generator_System_defs.hh"
+16535: # 1 "../../src/Poly_Con_Relation_defs.hh" 1
+16535: # 31 "../../src/Poly_Con_Relation_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: bool operator==(const Poly_Con_Relation& x, const Poly_Con_Relation& y);
+16535: 
+16535: 
+16535: 
+16535: bool operator!=(const Poly_Con_Relation& x, const Poly_Con_Relation& y);
+16535: 
+16535: 
+16535: 
+16535: Poly_Con_Relation operator&&(const Poly_Con_Relation& x,
+16535:                              const Poly_Con_Relation& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: Poly_Con_Relation operator-(const Poly_Con_Relation& x,
+16535:                             const Poly_Con_Relation& y);
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: std::ostream& operator<<(std::ostream& s, const Poly_Con_Relation& r);
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: class Parma_Polyhedra_Library::Poly_Con_Relation {
+16535: private:
+16535: 
+16535:   typedef unsigned int flags_t;
+16535: 
+16535: 
+16535: 
+16535:   static const flags_t NOTHING = 0U;
+16535:   static const flags_t IS_DISJOINT = 1U << 0;
+16535:   static const flags_t STRICTLY_INTERSECTS = 1U << 1;
+16535:   static const flags_t IS_INCLUDED = 1U << 2;
+16535:   static const flags_t SATURATES = 1U << 3;
+16535: 
+16535: 
+16535: 
+16535:   static const flags_t EVERYTHING
+16535:   = IS_DISJOINT
+16535:   | STRICTLY_INTERSECTS
+16535:   | IS_INCLUDED
+16535:   | SATURATES;
+16535: 
+16535: 
+16535:   flags_t flags;
+16535: 
+16535: 
+16535:   static bool implies(flags_t x, flags_t y);
+16535: 
+16535: 
+16535:   Poly_Con_Relation(flags_t mask);
+16535: 
+16535:   friend bool
+16535:   operator==(const Poly_Con_Relation& x, const Poly_Con_Relation& y);
+16535:   friend bool
+16535:   operator!=(const Poly_Con_Relation& x, const Poly_Con_Relation& y);
+16535: 
+16535:   friend Poly_Con_Relation
+16535:   operator&&(const Poly_Con_Relation& x, const Poly_Con_Relation& y);
+16535: 
+16535:   friend Poly_Con_Relation
+16535:   operator-(const Poly_Con_Relation& x, const Poly_Con_Relation& y);
+16535: 
+16535:   friend std::ostream&
+16535:   Parma_Polyhedra_Library::
+16535:   IO_Operators::operator<<(std::ostream& s, const Poly_Con_Relation& r);
+16535: 
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   flags_t get_flags() const;
+16535: 
+16535: public:
+16535: 
+16535:   static Poly_Con_Relation nothing();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static Poly_Con_Relation is_disjoint();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static Poly_Con_Relation strictly_intersects();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static Poly_Con_Relation is_included();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static Poly_Con_Relation saturates();
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535:   bool implies(const Poly_Con_Relation& y) const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: };
+16535: 
+16535: # 1 "../../src/Poly_Con_Relation_inlines.hh" 1
+16535: # 27 "../../src/Poly_Con_Relation_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline
+16535: Poly_Con_Relation::Poly_Con_Relation(flags_t mask)
+16535:   : flags(mask) {
+16535: }
+16535: 
+16535: inline Poly_Con_Relation::flags_t
+16535: Poly_Con_Relation::get_flags() const {
+16535:   return flags;
+16535: }
+16535: 
+16535: inline Poly_Con_Relation
+16535: Poly_Con_Relation::nothing() {
+16535:   return Poly_Con_Relation(NOTHING);
+16535: }
+16535: 
+16535: inline Poly_Con_Relation
+16535: Poly_Con_Relation::is_disjoint() {
+16535:   return Poly_Con_Relation(IS_DISJOINT);
+16535: }
+16535: 
+16535: inline Poly_Con_Relation
+16535: Poly_Con_Relation::strictly_intersects() {
+16535:   return Poly_Con_Relation(STRICTLY_INTERSECTS);
+16535: }
+16535: 
+16535: inline Poly_Con_Relation
+16535: Poly_Con_Relation::is_included() {
+16535:   return Poly_Con_Relation(IS_INCLUDED);
+16535: }
+16535: 
+16535: inline Poly_Con_Relation
+16535: Poly_Con_Relation::saturates() {
+16535:   return Poly_Con_Relation(SATURATES);
+16535: }
+16535: 
+16535: inline bool
+16535: Poly_Con_Relation::implies(flags_t x, flags_t y) {
+16535:   return (x & y) == y;
+16535: }
+16535: 
+16535: inline bool
+16535: Poly_Con_Relation::implies(const Poly_Con_Relation& y) const {
+16535:   return implies(flags, y.flags);
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: operator==(const Poly_Con_Relation& x, const Poly_Con_Relation& y) {
+16535:   return x.flags == y.flags;
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: operator!=(const Poly_Con_Relation& x, const Poly_Con_Relation& y) {
+16535:   return x.flags != y.flags;
+16535: }
+16535: 
+16535: 
+16535: inline Poly_Con_Relation
+16535: operator&&(const Poly_Con_Relation& x, const Poly_Con_Relation& y) {
+16535:   return Poly_Con_Relation(x.flags | y.flags);
+16535: }
+16535: 
+16535: 
+16535: inline Poly_Con_Relation
+16535: operator-(const Poly_Con_Relation& x, const Poly_Con_Relation& y) {
+16535:   return Poly_Con_Relation(x.flags & ~y.flags);
+16535: }
+16535: 
+16535: }
+16535: # 165 "../../src/Poly_Con_Relation_defs.hh" 2
+16535: # 34 "../../src/Generator_System_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: std::ostream& operator<<(std::ostream& s, const Generator_System& gs);
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: bool operator==(const Generator_System& x, const Generator_System& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: bool operator!=(const Generator_System& x, const Generator_System& y);
+16535: 
+16535: 
+16535: void
+16535: swap(Generator_System& x, Generator_System& y);
+16535: 
+16535: }
+16535: # 188 "../../src/Generator_System_defs.hh"
+16535: class Parma_Polyhedra_Library::Generator_System {
+16535: public:
+16535:   typedef Generator row_type;
+16535: 
+16535:   static const Representation default_representation = SPARSE;
+16535: 
+16535: 
+16535:   Generator_System(Representation r = default_representation);
+16535: 
+16535: 
+16535:   explicit Generator_System(const Generator& g,
+16535:                             Representation r = default_representation);
+16535: 
+16535: 
+16535: 
+16535:   Generator_System(const Generator_System& gs);
+16535: 
+16535: 
+16535:   Generator_System(const Generator_System& gs, Representation r);
+16535: 
+16535: 
+16535:   ~Generator_System();
+16535: 
+16535: 
+16535:   Generator_System& operator=(const Generator_System& y);
+16535: 
+16535: 
+16535:   Representation representation() const;
+16535: 
+16535: 
+16535:   void set_representation(Representation r);
+16535: 
+16535: 
+16535:   static dimension_type max_space_dimension();
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535:   void set_space_dimension(dimension_type space_dim);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void clear();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void insert(const Generator& g);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void insert(Generator& g, Recycle_Input);
+16535: 
+16535: 
+16535:   static void initialize();
+16535: 
+16535: 
+16535:   static void finalize();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Generator_System& zero_dim_univ();
+16535: 
+16535:   typedef Generator_System_const_iterator const_iterator;
+16535: 
+16535: 
+16535:   bool empty() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const_iterator begin() const;
+16535: 
+16535: 
+16535:   const_iterator end() const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: # 287 "../../src/Generator_System_defs.hh"
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   void m_swap(Generator_System& y);
+16535: 
+16535: private:
+16535: 
+16535:   bool has_no_rows() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void remove_space_dimensions(const Variables_Set& vars);
+16535: 
+16535: 
+16535: 
+16535:   void shift_space_dimensions(Variable v, dimension_type n);
+16535: # 326 "../../src/Generator_System_defs.hh"
+16535:   void permute_space_dimensions(const std::vector<Variable>& cycle);
+16535: 
+16535: 
+16535:   void swap_space_dimensions(Variable v1, Variable v2);
+16535: 
+16535:   dimension_type num_rows() const;
+16535: # 346 "../../src/Generator_System_defs.hh"
+16535:   void add_universe_rows_and_space_dimensions(dimension_type n);
+16535: 
+16535:   Topology topology() const;
+16535: 
+16535: 
+16535:   dimension_type first_pending_row() const;
+16535: 
+16535: 
+16535:   void unset_pending_rows();
+16535: 
+16535: 
+16535:   void set_sorted(bool b);
+16535: 
+16535: 
+16535:   bool is_sorted() const;
+16535: 
+16535: 
+16535:   void set_index_first_pending_row(dimension_type i);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_necessarily_closed() const;
+16535: 
+16535: 
+16535:   void assign_with_pending(const Generator_System& y);
+16535: 
+16535: 
+16535:   dimension_type num_pending_rows() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void sort_pending_and_remove_duplicates();
+16535: # 390 "../../src/Generator_System_defs.hh"
+16535:   void sort_and_remove_with_sat(Bit_Matrix& sat);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void sort_rows();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool check_sorted() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type num_lines_or_equalities() const;
+16535: # 418 "../../src/Generator_System_defs.hh"
+16535:   void remove_row(dimension_type i, bool keep_sorted = false);
+16535: # 428 "../../src/Generator_System_defs.hh"
+16535:   void remove_rows(dimension_type first, dimension_type last,
+16535:                    bool keep_sorted = false);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void remove_rows(const std::vector<dimension_type>& indexes);
+16535: 
+16535: 
+16535:   void remove_trailing_rows(dimension_type n);
+16535: # 454 "../../src/Generator_System_defs.hh"
+16535:   dimension_type gauss(dimension_type n_lines_or_equalities);
+16535: # 466 "../../src/Generator_System_defs.hh"
+16535:   void back_substitute(dimension_type n_lines_or_equalities);
+16535: 
+16535: 
+16535:   void strong_normalize();
+16535: # 479 "../../src/Generator_System_defs.hh"
+16535:   void merge_rows_assign(const Generator_System& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void insert(const Generator_System& y);
+16535: 
+16535: 
+16535:   void insert_pending(const Generator_System& r);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Generator_System* zero_dim_univ_p;
+16535: 
+16535:   friend class Generator_System_const_iterator;
+16535: 
+16535: 
+16535:   explicit Generator_System(Topology topol,
+16535:                             Representation r = default_representation);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Generator_System(Topology topol, dimension_type space_dim,
+16535:                    Representation r = default_representation);
+16535: # 517 "../../src/Generator_System_defs.hh"
+16535:   bool adjust_topology_and_space_dimension(Topology new_topology,
+16535:                                            dimension_type new_space_dim);
+16535: # 527 "../../src/Generator_System_defs.hh"
+16535:   void add_corresponding_points();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool has_points() const;
+16535: # 542 "../../src/Generator_System_defs.hh"
+16535:   void add_corresponding_closure_points();
+16535: # 554 "../../src/Generator_System_defs.hh"
+16535:   bool has_closure_points() const;
+16535: 
+16535: 
+16535: 
+16535:   void convert_into_non_necessarily_closed();
+16535: 
+16535: 
+16535:   const Generator& operator[](dimension_type k) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Poly_Con_Relation
+16535:   relation_with(const Constraint& c) const;
+16535: 
+16535: 
+16535:   bool satisfied_by_all_generators(const Constraint& c) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool satisfied_by_all_generators_C(const Constraint& c) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool satisfied_by_all_generators_NNC(const Constraint& c) const;
+16535: # 612 "../../src/Generator_System_defs.hh"
+16535:   void affine_image(Variable v,
+16535:                     const Linear_Expression& expr,
+16535:                     Coefficient_traits::const_reference denominator);
+16535: 
+16535: 
+16535:   dimension_type num_lines() const;
+16535: 
+16535: 
+16535:   dimension_type num_rays() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void remove_invalid_lines_and_rays();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void simplify();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void insert_pending(const Generator& g);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void insert_pending(Generator& g, Recycle_Input);
+16535: 
+16535:   Linear_System<Generator> sys;
+16535: 
+16535:   friend bool
+16535:   operator==(const Generator_System& x, const Generator_System& y);
+16535: 
+16535:   friend class Polyhedron;
+16535: };
+16535: # 680 "../../src/Generator_System_defs.hh"
+16535: class Parma_Polyhedra_Library::Generator_System_const_iterator
+16535:   : public std::iterator<std::forward_iterator_tag,
+16535:         Generator,
+16535:         std::ptrdiff_t,
+16535:         const Generator*,
+16535:         const Generator&> {
+16535: public:
+16535: 
+16535:   Generator_System_const_iterator();
+16535: 
+16535: 
+16535:   Generator_System_const_iterator(const Generator_System_const_iterator& y);
+16535: 
+16535: 
+16535:   ~Generator_System_const_iterator();
+16535: 
+16535: 
+16535:   Generator_System_const_iterator& operator=(const Generator_System_const_iterator& y);
+16535: 
+16535: 
+16535:   const Generator& operator*() const;
+16535: 
+16535: 
+16535:   const Generator* operator->() const;
+16535: 
+16535: 
+16535:   Generator_System_const_iterator& operator++();
+16535: 
+16535: 
+16535:   Generator_System_const_iterator operator++(int);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool operator==(const Generator_System_const_iterator& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool operator!=(const Generator_System_const_iterator& y) const;
+16535: 
+16535: private:
+16535:   friend class Generator_System;
+16535: 
+16535: 
+16535:   Linear_System<Generator>::const_iterator i;
+16535: 
+16535: 
+16535:   const Linear_System<Generator>* gsp;
+16535: 
+16535: 
+16535:   Generator_System_const_iterator(const Linear_System<Generator>::const_iterator& iter,
+16535:       const Generator_System& gsys);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void skip_forward();
+16535: };
+16535: # 31 "../../src/Box_templates.hh" 2
+16535: # 1 "../../src/Generator_System_inlines.hh" 1
+16535: # 29 "../../src/Generator_System_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline
+16535: Generator_System::Generator_System(Representation r)
+16535:   : sys(NECESSARILY_CLOSED, r) {
+16535: }
+16535: 
+16535: inline
+16535: Generator_System::Generator_System(const Generator& g, Representation r)
+16535:   : sys(g.topology(), r) {
+16535:   sys.insert(g);
+16535: }
+16535: 
+16535: inline
+16535: Generator_System::Generator_System(const Generator_System& gs)
+16535:   : sys(gs.sys) {
+16535: }
+16535: 
+16535: inline
+16535: Generator_System::Generator_System(const Generator_System& gs,
+16535:                                    Representation r)
+16535:   : sys(gs.sys, r) {
+16535: }
+16535: 
+16535: inline
+16535: Generator_System::Generator_System(const Topology topol, Representation r)
+16535:   : sys(topol, r) {
+16535: }
+16535: 
+16535: inline
+16535: Generator_System::Generator_System(const Topology topol,
+16535:                                    const dimension_type space_dim,
+16535:                                    Representation r)
+16535:   : sys(topol, space_dim, r) {
+16535: }
+16535: 
+16535: inline
+16535: Generator_System::~Generator_System() {
+16535: }
+16535: 
+16535: inline Generator_System&
+16535: Generator_System::operator=(const Generator_System& y) {
+16535:   Generator_System tmp = y;
+16535:   swap(*this, tmp);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline Representation
+16535: Generator_System::representation() const {
+16535:   return sys.representation();
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System::set_representation(Representation r) {
+16535:   sys.set_representation(r);
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Generator_System::max_space_dimension() {
+16535:   return Linear_System<Generator>::max_space_dimension();
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Generator_System::space_dimension() const {
+16535:   return sys.space_dimension();
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System::set_space_dimension(dimension_type space_dim) {
+16535:   const dimension_type old_space_dim = space_dimension();
+16535:   sys.set_space_dimension_no_ok(space_dim);
+16535: 
+16535:   if (space_dim < old_space_dim) {
+16535: 
+16535:     remove_invalid_lines_and_rays();
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System::clear() {
+16535:   sys.clear();
+16535: }
+16535: 
+16535: inline const Generator&
+16535: Generator_System::operator[](const dimension_type k) const {
+16535:   return sys[k];
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System
+16535: ::remove_space_dimensions(const Variables_Set& vars) {
+16535:   sys.remove_space_dimensions(vars);
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System
+16535: ::shift_space_dimensions(Variable v, dimension_type n) {
+16535:   sys.shift_space_dimensions(v, n);
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System
+16535: ::permute_space_dimensions(const std::vector<Variable>& cycle) {
+16535:   sys.permute_space_dimensions(cycle);
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System
+16535: ::swap_space_dimensions(Variable v1, Variable v2) {
+16535:   sys.swap_space_dimensions(v1, v2);
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Generator_System::num_rows() const {
+16535:   return sys.num_rows();
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System::add_universe_rows_and_space_dimensions(dimension_type n) {
+16535:   sys.add_universe_rows_and_space_dimensions(n);
+16535: }
+16535: 
+16535: inline Topology
+16535: Generator_System::topology() const {
+16535:   return sys.topology();
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Generator_System::first_pending_row() const {
+16535:   return sys.first_pending_row();
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System::unset_pending_rows() {
+16535:   sys.unset_pending_rows();
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System::set_sorted(bool b) {
+16535:   sys.set_sorted(b);
+16535: }
+16535: 
+16535: inline bool
+16535: Generator_System::is_sorted() const {
+16535:   return sys.is_sorted();
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System::set_index_first_pending_row(dimension_type i) {
+16535:   sys.set_index_first_pending_row(i);
+16535: }
+16535: 
+16535: inline bool
+16535: Generator_System::is_necessarily_closed() const {
+16535:   return sys.is_necessarily_closed();
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System::assign_with_pending(const Generator_System& y) {
+16535:   sys.assign_with_pending(y.sys);
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Generator_System::num_pending_rows() const {
+16535:   return sys.num_pending_rows();
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System::sort_pending_and_remove_duplicates() {
+16535:   return sys.sort_pending_and_remove_duplicates();
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System::sort_and_remove_with_sat(Bit_Matrix& sat) {
+16535:   sys.sort_and_remove_with_sat(sat);
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System::sort_rows() {
+16535:   sys.sort_rows();
+16535: }
+16535: 
+16535: inline bool
+16535: Generator_System::check_sorted() const {
+16535:   return sys.check_sorted();
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Generator_System::num_lines_or_equalities() const {
+16535:   return sys.num_lines_or_equalities();
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System::remove_row(dimension_type i, bool keep_sorted) {
+16535:   sys.remove_row(i, keep_sorted);
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System::remove_rows(dimension_type first, dimension_type last,
+16535:                               bool keep_sorted) {
+16535:   sys.remove_rows(first, last, keep_sorted);
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System::remove_rows(const std::vector<dimension_type>& indexes) {
+16535:   sys.remove_rows(indexes);
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System::remove_trailing_rows(dimension_type n) {
+16535:   sys.remove_trailing_rows(n);
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Generator_System::gauss(dimension_type n_lines_or_equalities) {
+16535:   return sys.gauss(n_lines_or_equalities);
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System::back_substitute(dimension_type n_lines_or_equalities) {
+16535:   sys.back_substitute(n_lines_or_equalities);
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System::strong_normalize() {
+16535:   sys.strong_normalize();
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System::merge_rows_assign(const Generator_System& y) {
+16535:   sys.merge_rows_assign(y.sys);
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System::insert(const Generator_System& y) {
+16535:   sys.insert(y.sys);
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System::insert_pending(const Generator_System& r) {
+16535:   sys.insert_pending(r.sys);
+16535: }
+16535: 
+16535: inline bool
+16535: operator==(const Generator_System& x, const Generator_System& y) {
+16535:   return x.sys == y.sys;
+16535: }
+16535: 
+16535: inline bool
+16535: operator!=(const Generator_System& x, const Generator_System& y) {
+16535:   return !(x == y);
+16535: }
+16535: 
+16535: inline
+16535: Generator_System_const_iterator::Generator_System_const_iterator()
+16535:   : i(), gsp(0) {
+16535: }
+16535: 
+16535: inline
+16535: Generator_System_const_iterator::Generator_System_const_iterator(const Generator_System_const_iterator& y)
+16535:   : i(y.i), gsp(y.gsp) {
+16535: }
+16535: 
+16535: inline
+16535: Generator_System_const_iterator::~Generator_System_const_iterator() {
+16535: }
+16535: 
+16535: inline
+16535: Generator_System_const_iterator&
+16535: Generator_System_const_iterator::operator=(const Generator_System_const_iterator& y) {
+16535:   i = y.i;
+16535:   gsp = y.gsp;
+16535:   return *this;
+16535: }
+16535: 
+16535: inline const Generator&
+16535: Generator_System_const_iterator::operator*() const {
+16535:   return *i;
+16535: }
+16535: 
+16535: inline const Generator*
+16535: Generator_System_const_iterator::operator->() const {
+16535:   return i.operator->();
+16535: }
+16535: 
+16535: inline Generator_System_const_iterator&
+16535: Generator_System_const_iterator::operator++() {
+16535:   ++i;
+16535:   if (!gsp->is_necessarily_closed()) {
+16535:     skip_forward();
+16535:   }
+16535:   return *this;
+16535: }
+16535: 
+16535: inline Generator_System_const_iterator
+16535: Generator_System_const_iterator::operator++(int) {
+16535:   const Generator_System_const_iterator tmp = *this;
+16535:   operator++();
+16535:   return tmp;
+16535: }
+16535: 
+16535: inline bool
+16535: Generator_System_const_iterator::operator==(const Generator_System_const_iterator& y) const {
+16535:   return i == y.i;
+16535: }
+16535: 
+16535: inline bool
+16535: Generator_System_const_iterator::operator!=(const Generator_System_const_iterator& y) const {
+16535:   return i != y.i;
+16535: }
+16535: 
+16535: inline
+16535: Generator_System_const_iterator::
+16535: Generator_System_const_iterator(const Linear_System<Generator>::const_iterator& iter,
+16535:                                 const Generator_System& gs)
+16535:   : i(iter), gsp(&gs.sys) {
+16535: }
+16535: 
+16535: inline bool
+16535: Generator_System::empty() const {
+16535:   return sys.has_no_rows();
+16535: }
+16535: 
+16535: inline bool
+16535: Generator_System::has_no_rows() const {
+16535:   return sys.has_no_rows();
+16535: }
+16535: 
+16535: inline Generator_System::const_iterator
+16535: Generator_System::begin() const {
+16535:   const_iterator i(sys.begin(), *this);
+16535:   if (!sys.is_necessarily_closed()) {
+16535:     i.skip_forward();
+16535:   }
+16535:   return i;
+16535: }
+16535: 
+16535: inline Generator_System::const_iterator
+16535: Generator_System::end() const {
+16535:   const const_iterator i(sys.end(), *this);
+16535:   return i;
+16535: }
+16535: 
+16535: inline const Generator_System&
+16535: Generator_System::zero_dim_univ() {
+16535:   ((void) 0);
+16535:   return *zero_dim_univ_p;
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System::m_swap(Generator_System& y) {
+16535:   swap(sys, y.sys);
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Generator_System::external_memory_in_bytes() const {
+16535:   return sys.external_memory_in_bytes();
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Generator_System::total_memory_in_bytes() const {
+16535:   return external_memory_in_bytes() + sizeof(*this);
+16535: }
+16535: 
+16535: inline void
+16535: Generator_System::simplify() {
+16535:   sys.simplify();
+16535:   remove_invalid_lines_and_rays();
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: swap(Generator_System& x, Generator_System& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 32 "../../src/Box_templates.hh" 2
+16535: 
+16535: # 1 "../../src/Poly_Gen_Relation_defs.hh" 1
+16535: # 31 "../../src/Poly_Gen_Relation_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: bool operator==(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y);
+16535: 
+16535: 
+16535: 
+16535: bool operator!=(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y);
+16535: 
+16535: 
+16535: 
+16535: Poly_Gen_Relation operator&&(const Poly_Gen_Relation& x,
+16535:                              const Poly_Gen_Relation& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: Poly_Gen_Relation operator-(const Poly_Gen_Relation& x,
+16535:                             const Poly_Gen_Relation& y);
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: std::ostream& operator<<(std::ostream& s, const Poly_Gen_Relation& r);
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: class Parma_Polyhedra_Library::Poly_Gen_Relation {
+16535: private:
+16535: 
+16535:   typedef unsigned int flags_t;
+16535: 
+16535: 
+16535: 
+16535:   static const flags_t NOTHING = 0U;
+16535:   static const flags_t SUBSUMES = 1U << 0;
+16535: 
+16535: 
+16535: 
+16535:   static const flags_t EVERYTHING
+16535:   = SUBSUMES;
+16535: 
+16535: 
+16535:   flags_t flags;
+16535: 
+16535: 
+16535:   static bool implies(flags_t x, flags_t y);
+16535: 
+16535: 
+16535:   Poly_Gen_Relation(flags_t mask);
+16535: 
+16535:   friend bool
+16535:   operator==(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y);
+16535:   friend bool
+16535:   operator!=(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y);
+16535: 
+16535:   friend Poly_Gen_Relation
+16535:   operator&&(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y);
+16535: 
+16535:   friend Poly_Gen_Relation
+16535:   operator-(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y);
+16535: 
+16535:   friend std::ostream&
+16535:   Parma_Polyhedra_Library::
+16535:   IO_Operators::operator<<(std::ostream& s, const Poly_Gen_Relation& r);
+16535: 
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   flags_t get_flags() const;
+16535: 
+16535: public:
+16535: 
+16535:   static Poly_Gen_Relation nothing();
+16535: 
+16535: 
+16535:   static Poly_Gen_Relation subsumes();
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535:   bool implies(const Poly_Gen_Relation& y) const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: };
+16535: 
+16535: # 1 "../../src/Poly_Gen_Relation_inlines.hh" 1
+16535: # 27 "../../src/Poly_Gen_Relation_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline
+16535: Poly_Gen_Relation::Poly_Gen_Relation(flags_t mask)
+16535:   : flags(mask) {
+16535: }
+16535: 
+16535: inline Poly_Gen_Relation::flags_t
+16535: Poly_Gen_Relation::get_flags() const {
+16535:   return flags;
+16535: }
+16535: 
+16535: inline Poly_Gen_Relation
+16535: Poly_Gen_Relation::nothing() {
+16535:   return Poly_Gen_Relation(NOTHING);
+16535: }
+16535: 
+16535: inline Poly_Gen_Relation
+16535: Poly_Gen_Relation::subsumes() {
+16535:   return Poly_Gen_Relation(SUBSUMES);
+16535: }
+16535: 
+16535: inline bool
+16535: Poly_Gen_Relation::implies(flags_t x, flags_t y) {
+16535:   return (x & y) == y;
+16535: }
+16535: 
+16535: inline bool
+16535: Poly_Gen_Relation::implies(const Poly_Gen_Relation& y) const {
+16535:   return implies(flags, y.flags);
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: operator==(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y) {
+16535:   return x.flags == y.flags;
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: operator!=(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y) {
+16535:   return x.flags != y.flags;
+16535: }
+16535: 
+16535: 
+16535: inline Poly_Gen_Relation
+16535: operator&&(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y) {
+16535:   return Poly_Gen_Relation(x.flags | y.flags);
+16535: }
+16535: 
+16535: 
+16535: inline Poly_Gen_Relation
+16535: operator-(const Poly_Gen_Relation& x, const Poly_Gen_Relation& y) {
+16535:   return Poly_Gen_Relation(x.flags & ~y.flags);
+16535: }
+16535: 
+16535: }
+16535: # 138 "../../src/Poly_Gen_Relation_defs.hh" 2
+16535: # 34 "../../src/Box_templates.hh" 2
+16535: # 1 "../../src/Polyhedron_defs.hh" 1
+16535: # 45 "../../src/Polyhedron_defs.hh"
+16535: # 1 "../../src/H79_Certificate_types.hh" 1
+16535: # 16 "../../src/H79_Certificate_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class H79_Certificate;
+16535: 
+16535: }
+16535: # 46 "../../src/Polyhedron_defs.hh" 2
+16535: # 54 "../../src/Polyhedron_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace IO_Operators {
+16535: # 67 "../../src/Polyhedron_defs.hh"
+16535: std::ostream&
+16535: operator<<(std::ostream& s, const Polyhedron& ph);
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: void swap(Polyhedron& x, Polyhedron& y);
+16535: # 84 "../../src/Polyhedron_defs.hh"
+16535: bool operator==(const Polyhedron& x, const Polyhedron& y);
+16535: # 94 "../../src/Polyhedron_defs.hh"
+16535: bool operator!=(const Polyhedron& x, const Polyhedron& y);
+16535: 
+16535: namespace Interfaces {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: bool is_necessarily_closed_for_interfaces(const Polyhedron& ph);
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 369 "../../src/Polyhedron_defs.hh"
+16535: class Parma_Polyhedra_Library::Polyhedron {
+16535: public:
+16535: 
+16535:   typedef Coefficient coefficient_type;
+16535: 
+16535: 
+16535:   static dimension_type max_space_dimension();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static bool can_recycle_constraint_systems();
+16535: 
+16535: 
+16535:   static void initialize();
+16535: 
+16535: 
+16535:   static void finalize();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static bool can_recycle_congruence_systems();
+16535: 
+16535: protected:
+16535: # 406 "../../src/Polyhedron_defs.hh"
+16535:   Polyhedron(Topology topol,
+16535:              dimension_type num_dimensions,
+16535:              Degenerate_Element kind);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Polyhedron(const Polyhedron& y,
+16535:              Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 430 "../../src/Polyhedron_defs.hh"
+16535:   Polyhedron(Topology topol, const Constraint_System& cs);
+16535: # 451 "../../src/Polyhedron_defs.hh"
+16535:   Polyhedron(Topology topol, Constraint_System& cs, Recycle_Input dummy);
+16535: # 467 "../../src/Polyhedron_defs.hh"
+16535:   Polyhedron(Topology topol, const Generator_System& gs);
+16535: # 489 "../../src/Polyhedron_defs.hh"
+16535:   Polyhedron(Topology topol, Generator_System& gs, Recycle_Input dummy);
+16535: # 505 "../../src/Polyhedron_defs.hh"
+16535:   template <typename Interval>
+16535:   Polyhedron(Topology topol, const Box<Interval>& box,
+16535:              Complexity_Class complexity = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Polyhedron& operator=(const Polyhedron& y);
+16535: 
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type affine_dimension() const;
+16535: 
+16535: 
+16535:   const Constraint_System& constraints() const;
+16535: 
+16535: 
+16535:   const Constraint_System& minimized_constraints() const;
+16535: 
+16535: 
+16535:   const Generator_System& generators() const;
+16535: 
+16535: 
+16535:   const Generator_System& minimized_generators() const;
+16535: 
+16535: 
+16535:   Congruence_System congruences() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Congruence_System minimized_congruences() const;
+16535: # 558 "../../src/Polyhedron_defs.hh"
+16535:   Poly_Con_Relation relation_with(const Constraint& c) const;
+16535: # 567 "../../src/Polyhedron_defs.hh"
+16535:   Poly_Gen_Relation relation_with(const Generator& g) const;
+16535: # 576 "../../src/Polyhedron_defs.hh"
+16535:   Poly_Con_Relation relation_with(const Congruence& cg) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_empty() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_universe() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_topologically_closed() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_disjoint_from(const Polyhedron& y) const;
+16535: 
+16535: 
+16535:   bool is_discrete() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_bounded() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool contains_integer_point() const;
+16535: # 626 "../../src/Polyhedron_defs.hh"
+16535:   bool constrains(Variable var) const;
+16535: # 635 "../../src/Polyhedron_defs.hh"
+16535:   bool bounds_from_above(const Linear_Expression& expr) const;
+16535: # 644 "../../src/Polyhedron_defs.hh"
+16535:   bool bounds_from_below(const Linear_Expression& expr) const;
+16535: # 670 "../../src/Polyhedron_defs.hh"
+16535:   bool maximize(const Linear_Expression& expr,
+16535:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum) const;
+16535: # 701 "../../src/Polyhedron_defs.hh"
+16535:   bool maximize(const Linear_Expression& expr,
+16535:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum,
+16535:                 Generator& g) const;
+16535: # 729 "../../src/Polyhedron_defs.hh"
+16535:   bool minimize(const Linear_Expression& expr,
+16535:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum) const;
+16535: # 760 "../../src/Polyhedron_defs.hh"
+16535:   bool minimize(const Linear_Expression& expr,
+16535:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum,
+16535:                 Generator& g) const;
+16535: # 792 "../../src/Polyhedron_defs.hh"
+16535:   bool frequency(const Linear_Expression& expr,
+16535:                  Coefficient& freq_n, Coefficient& freq_d,
+16535:                  Coefficient& val_n, Coefficient& val_d) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool contains(const Polyhedron& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool strictly_contains(const Polyhedron& y) const;
+16535: # 829 "../../src/Polyhedron_defs.hh"
+16535:   bool OK(bool check_not_empty = false) const;
+16535: # 848 "../../src/Polyhedron_defs.hh"
+16535:   void add_constraint(const Constraint& c);
+16535: # 859 "../../src/Polyhedron_defs.hh"
+16535:   void add_generator(const Generator& g);
+16535: # 870 "../../src/Polyhedron_defs.hh"
+16535:   void add_congruence(const Congruence& cg);
+16535: # 884 "../../src/Polyhedron_defs.hh"
+16535:   void add_constraints(const Constraint_System& cs);
+16535: # 902 "../../src/Polyhedron_defs.hh"
+16535:   void add_recycled_constraints(Constraint_System& cs);
+16535: # 917 "../../src/Polyhedron_defs.hh"
+16535:   void add_generators(const Generator_System& gs);
+16535: # 936 "../../src/Polyhedron_defs.hh"
+16535:   void add_recycled_generators(Generator_System& gs);
+16535: # 950 "../../src/Polyhedron_defs.hh"
+16535:   void add_congruences(const Congruence_System& cgs);
+16535: # 968 "../../src/Polyhedron_defs.hh"
+16535:   void add_recycled_congruences(Congruence_System& cgs);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void refine_with_constraint(const Constraint& c);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void refine_with_congruence(const Congruence& cg);
+16535: # 996 "../../src/Polyhedron_defs.hh"
+16535:   void refine_with_constraints(const Constraint_System& cs);
+16535: # 1008 "../../src/Polyhedron_defs.hh"
+16535:   void refine_with_congruences(const Congruence_System& cgs);
+16535: # 1035 "../../src/Polyhedron_defs.hh"
+16535:   template <typename FP_Format, typename Interval_Info>
+16535:   void refine_with_linear_form_inequality(
+16535:   const Linear_Form< Interval<FP_Format, Interval_Info> >& left,
+16535:   const Linear_Form< Interval<FP_Format, Interval_Info> >& right,
+16535:   bool is_strict = false);
+16535: # 1069 "../../src/Polyhedron_defs.hh"
+16535:   template <typename FP_Format, typename Interval_Info>
+16535:   void generalized_refine_with_linear_form_inequality(
+16535:   const Linear_Form< Interval<FP_Format, Interval_Info> >& left,
+16535:   const Linear_Form< Interval<FP_Format, Interval_Info> >& right,
+16535:   Relation_Symbol relsym);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename FP_Format, typename Interval_Info>
+16535:   void refine_fp_interval_abstract_store(
+16535:        Box< Interval<FP_Format, Interval_Info> >& store)
+16535:        const;
+16535: # 1095 "../../src/Polyhedron_defs.hh"
+16535:   void unconstrain(Variable var);
+16535: # 1109 "../../src/Polyhedron_defs.hh"
+16535:   void unconstrain(const Variables_Set& vars);
+16535: # 1118 "../../src/Polyhedron_defs.hh"
+16535:   void intersection_assign(const Polyhedron& y);
+16535: # 1127 "../../src/Polyhedron_defs.hh"
+16535:   void poly_hull_assign(const Polyhedron& y);
+16535: 
+16535: 
+16535:   void upper_bound_assign(const Polyhedron& y);
+16535: # 1141 "../../src/Polyhedron_defs.hh"
+16535:   void poly_difference_assign(const Polyhedron& y);
+16535: 
+16535: 
+16535:   void difference_assign(const Polyhedron& y);
+16535: # 1155 "../../src/Polyhedron_defs.hh"
+16535:   bool simplify_using_context_assign(const Polyhedron& y);
+16535: # 1246 "../../src/Polyhedron_defs.hh"
+16535:   void affine_image(Variable var,
+16535:                     const Linear_Expression& expr,
+16535:                     Coefficient_traits::const_reference denominator
+16535:                       = Coefficient_one());
+16535: # 1273 "../../src/Polyhedron_defs.hh"
+16535:   template <typename FP_Format, typename Interval_Info>
+16535:   void affine_form_image(Variable var,
+16535:   const Linear_Form<Interval <FP_Format, Interval_Info> >& lf);
+16535: # 1364 "../../src/Polyhedron_defs.hh"
+16535:   void affine_preimage(Variable var,
+16535:                        const Linear_Expression& expr,
+16535:                        Coefficient_traits::const_reference denominator
+16535:                          = Coefficient_one());
+16535: # 1395 "../../src/Polyhedron_defs.hh"
+16535:   void generalized_affine_image(Variable var,
+16535:                                 Relation_Symbol relsym,
+16535:                                 const Linear_Expression& expr,
+16535:                                 Coefficient_traits::const_reference denominator
+16535:                                 = Coefficient_one());
+16535: # 1427 "../../src/Polyhedron_defs.hh"
+16535:   void
+16535:   generalized_affine_preimage(Variable var,
+16535:                               Relation_Symbol relsym,
+16535:                               const Linear_Expression& expr,
+16535:                               Coefficient_traits::const_reference denominator
+16535:                               = Coefficient_one());
+16535: # 1454 "../../src/Polyhedron_defs.hh"
+16535:   void generalized_affine_image(const Linear_Expression& lhs,
+16535:                                 Relation_Symbol relsym,
+16535:                                 const Linear_Expression& rhs);
+16535: # 1478 "../../src/Polyhedron_defs.hh"
+16535:   void generalized_affine_preimage(const Linear_Expression& lhs,
+16535:                                    Relation_Symbol relsym,
+16535:                                    const Linear_Expression& rhs);
+16535: # 1508 "../../src/Polyhedron_defs.hh"
+16535:   void bounded_affine_image(Variable var,
+16535:                             const Linear_Expression& lb_expr,
+16535:                             const Linear_Expression& ub_expr,
+16535:                             Coefficient_traits::const_reference denominator
+16535:                             = Coefficient_one());
+16535: # 1540 "../../src/Polyhedron_defs.hh"
+16535:   void bounded_affine_preimage(Variable var,
+16535:                                const Linear_Expression& lb_expr,
+16535:                                const Linear_Expression& ub_expr,
+16535:                                Coefficient_traits::const_reference denominator
+16535:                                = Coefficient_one());
+16535: # 1554 "../../src/Polyhedron_defs.hh"
+16535:   void time_elapse_assign(const Polyhedron& y);
+16535: # 1565 "../../src/Polyhedron_defs.hh"
+16535:   void positive_time_elapse_assign(const Polyhedron& y);
+16535: # 1613 "../../src/Polyhedron_defs.hh"
+16535:   void wrap_assign(const Variables_Set& vars,
+16535:                    Bounded_Integer_Type_Width w,
+16535:                    Bounded_Integer_Type_Representation r,
+16535:                    Bounded_Integer_Type_Overflow o,
+16535:                    const Constraint_System* cs_p = 0,
+16535:                    unsigned complexity_threshold = 16,
+16535:                    bool wrap_individually = true);
+16535: # 1632 "../../src/Polyhedron_defs.hh"
+16535:   void drop_some_non_integer_points(Complexity_Class complexity
+16535:                                     = ANY_COMPLEXITY);
+16535: # 1650 "../../src/Polyhedron_defs.hh"
+16535:   void drop_some_non_integer_points(const Variables_Set& vars,
+16535:                                     Complexity_Class complexity
+16535:                                     = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535:   void topological_closure_assign();
+16535: # 1673 "../../src/Polyhedron_defs.hh"
+16535:   void BHRZ03_widening_assign(const Polyhedron& y, unsigned* tp = 0);
+16535: # 1696 "../../src/Polyhedron_defs.hh"
+16535:   void limited_BHRZ03_extrapolation_assign(const Polyhedron& y,
+16535:                                            const Constraint_System& cs,
+16535:                                            unsigned* tp = 0);
+16535: # 1721 "../../src/Polyhedron_defs.hh"
+16535:   void bounded_BHRZ03_extrapolation_assign(const Polyhedron& y,
+16535:                                            const Constraint_System& cs,
+16535:                                            unsigned* tp = 0);
+16535: # 1741 "../../src/Polyhedron_defs.hh"
+16535:   void H79_widening_assign(const Polyhedron& y, unsigned* tp = 0);
+16535: 
+16535: 
+16535:   void widening_assign(const Polyhedron& y, unsigned* tp = 0);
+16535: # 1767 "../../src/Polyhedron_defs.hh"
+16535:   void limited_H79_extrapolation_assign(const Polyhedron& y,
+16535:                                         const Constraint_System& cs,
+16535:                                         unsigned* tp = 0);
+16535: # 1792 "../../src/Polyhedron_defs.hh"
+16535:   void bounded_H79_extrapolation_assign(const Polyhedron& y,
+16535:                                         const Constraint_System& cs,
+16535:                                         unsigned* tp = 0);
+16535: # 1826 "../../src/Polyhedron_defs.hh"
+16535:   void add_space_dimensions_and_embed(dimension_type m);
+16535: # 1853 "../../src/Polyhedron_defs.hh"
+16535:   void add_space_dimensions_and_project(dimension_type m);
+16535: # 1866 "../../src/Polyhedron_defs.hh"
+16535:   void concatenate_assign(const Polyhedron& y);
+16535: # 1878 "../../src/Polyhedron_defs.hh"
+16535:   void remove_space_dimensions(const Variables_Set& vars);
+16535: # 1888 "../../src/Polyhedron_defs.hh"
+16535:   void remove_higher_space_dimensions(dimension_type new_dimension);
+16535: # 1930 "../../src/Polyhedron_defs.hh"
+16535:   template <typename Partial_Function>
+16535:   void map_space_dimensions(const Partial_Function& pfunc);
+16535: # 1954 "../../src/Polyhedron_defs.hh"
+16535:   void expand_space_dimension(Variable var, dimension_type m);
+16535: # 1979 "../../src/Polyhedron_defs.hh"
+16535:   void fold_space_dimensions(const Variables_Set& vars, Variable dest);
+16535: 
+16535: 
+16535: 
+16535:   friend bool operator==(const Polyhedron& x, const Polyhedron& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   ~Polyhedron();
+16535: # 1998 "../../src/Polyhedron_defs.hh"
+16535:   void m_swap(Polyhedron& y);
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   int32_t hash_code() const;
+16535: 
+16535: 
+16535: 
+16535: private:
+16535:   static const Representation default_con_sys_repr = DENSE;
+16535:   static const Representation default_gen_sys_repr = DENSE;
+16535: 
+16535: 
+16535:   Constraint_System con_sys;
+16535: 
+16535: 
+16535:   Generator_System gen_sys;
+16535: 
+16535: 
+16535:   Bit_Matrix sat_c;
+16535: 
+16535: 
+16535:   Bit_Matrix sat_g;
+16535: 
+16535: 
+16535: # 1 "../../src/Ph_Status_idefs.hh" 1
+16535: # 86 "../../src/Ph_Status_idefs.hh"
+16535: class Status {
+16535: public:
+16535: 
+16535:   Status();
+16535: 
+16535: 
+16535: 
+16535:   bool test_zero_dim_univ() const;
+16535:   void reset_zero_dim_univ();
+16535:   void set_zero_dim_univ();
+16535: 
+16535:   bool test_empty() const;
+16535:   void reset_empty();
+16535:   void set_empty();
+16535: 
+16535:   bool test_c_up_to_date() const;
+16535:   void reset_c_up_to_date();
+16535:   void set_c_up_to_date();
+16535: 
+16535:   bool test_g_up_to_date() const;
+16535:   void reset_g_up_to_date();
+16535:   void set_g_up_to_date();
+16535: 
+16535:   bool test_c_minimized() const;
+16535:   void reset_c_minimized();
+16535:   void set_c_minimized();
+16535: 
+16535:   bool test_g_minimized() const;
+16535:   void reset_g_minimized();
+16535:   void set_g_minimized();
+16535: 
+16535:   bool test_sat_c_up_to_date() const;
+16535:   void reset_sat_c_up_to_date();
+16535:   void set_sat_c_up_to_date();
+16535: 
+16535:   bool test_sat_g_up_to_date() const;
+16535:   void reset_sat_g_up_to_date();
+16535:   void set_sat_g_up_to_date();
+16535: 
+16535:   bool test_c_pending() const;
+16535:   void reset_c_pending();
+16535:   void set_c_pending();
+16535: 
+16535:   bool test_g_pending() const;
+16535:   void reset_g_pending();
+16535:   void set_g_pending();
+16535: 
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: private:
+16535: 
+16535:   typedef unsigned int flags_t;
+16535: 
+16535: 
+16535: 
+16535:   static const flags_t ZERO_DIM_UNIV = 0U;
+16535:   static const flags_t EMPTY = 1U << 0;
+16535:   static const flags_t C_UP_TO_DATE = 1U << 1;
+16535:   static const flags_t G_UP_TO_DATE = 1U << 2;
+16535:   static const flags_t C_MINIMIZED = 1U << 3;
+16535:   static const flags_t G_MINIMIZED = 1U << 4;
+16535:   static const flags_t SAT_C_UP_TO_DATE = 1U << 5;
+16535:   static const flags_t SAT_G_UP_TO_DATE = 1U << 6;
+16535:   static const flags_t CS_PENDING = 1U << 7;
+16535:   static const flags_t GS_PENDING = 1U << 8;
+16535: 
+16535: 
+16535: 
+16535:   flags_t flags;
+16535: 
+16535: 
+16535:   Status(flags_t mask);
+16535: 
+16535: 
+16535:   bool test_all(flags_t mask) const;
+16535: 
+16535: 
+16535:   bool test_any(flags_t mask) const;
+16535: 
+16535: 
+16535:   void set(flags_t mask);
+16535: 
+16535: 
+16535:   void reset(flags_t mask);
+16535: };
+16535: # 2043 "../../src/Polyhedron_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535:   Status status;
+16535: 
+16535: 
+16535:   dimension_type space_dim;
+16535: 
+16535: 
+16535:   Topology topology() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_necessarily_closed() const;
+16535: 
+16535:   friend bool
+16535:   Parma_Polyhedra_Library::Interfaces
+16535:   ::is_necessarily_closed_for_interfaces(const Polyhedron&);
+16535: # 2071 "../../src/Polyhedron_defs.hh"
+16535:   void refine_no_check(const Constraint& c);
+16535: # 2081 "../../src/Polyhedron_defs.hh"
+16535:   bool marked_empty() const;
+16535: 
+16535: 
+16535:   bool constraints_are_up_to_date() const;
+16535: 
+16535: 
+16535:   bool generators_are_up_to_date() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool constraints_are_minimized() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool generators_are_minimized() const;
+16535: 
+16535: 
+16535:   bool has_pending_constraints() const;
+16535: 
+16535: 
+16535:   bool has_pending_generators() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool has_something_pending() const;
+16535: 
+16535: 
+16535:   bool can_have_something_pending() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool sat_c_is_up_to_date() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool sat_g_is_up_to_date() const;
+16535: # 2139 "../../src/Polyhedron_defs.hh"
+16535:   void set_zero_dim_univ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void set_empty();
+16535: 
+16535: 
+16535:   void set_constraints_up_to_date();
+16535: 
+16535: 
+16535:   void set_generators_up_to_date();
+16535: 
+16535: 
+16535:   void set_constraints_minimized();
+16535: 
+16535: 
+16535:   void set_generators_minimized();
+16535: 
+16535: 
+16535:   void set_constraints_pending();
+16535: 
+16535: 
+16535:   void set_generators_pending();
+16535: 
+16535: 
+16535:   void set_sat_c_up_to_date();
+16535: 
+16535: 
+16535:   void set_sat_g_up_to_date();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void clear_empty();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void clear_constraints_up_to_date();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void clear_generators_up_to_date();
+16535: 
+16535: 
+16535:   void clear_constraints_minimized();
+16535: 
+16535: 
+16535:   void clear_generators_minimized();
+16535: 
+16535: 
+16535:   void clear_pending_constraints();
+16535: 
+16535: 
+16535:   void clear_pending_generators();
+16535: 
+16535: 
+16535:   void clear_sat_c_up_to_date();
+16535: 
+16535: 
+16535:   void clear_sat_g_up_to_date();
+16535: # 2227 "../../src/Polyhedron_defs.hh"
+16535:   bool process_pending() const;
+16535: # 2237 "../../src/Polyhedron_defs.hh"
+16535:   bool process_pending_constraints() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void process_pending_generators() const;
+16535: # 2252 "../../src/Polyhedron_defs.hh"
+16535:   void remove_pending_to_obtain_constraints() const;
+16535: # 2265 "../../src/Polyhedron_defs.hh"
+16535:   bool remove_pending_to_obtain_generators() const;
+16535: # 2278 "../../src/Polyhedron_defs.hh"
+16535:   void update_constraints() const;
+16535: # 2292 "../../src/Polyhedron_defs.hh"
+16535:   bool update_generators() const;
+16535: # 2309 "../../src/Polyhedron_defs.hh"
+16535:   void update_sat_c() const;
+16535: # 2326 "../../src/Polyhedron_defs.hh"
+16535:   void update_sat_g() const;
+16535: # 2338 "../../src/Polyhedron_defs.hh"
+16535:   void obtain_sorted_constraints() const;
+16535: # 2350 "../../src/Polyhedron_defs.hh"
+16535:   void obtain_sorted_generators() const;
+16535: # 2360 "../../src/Polyhedron_defs.hh"
+16535:   void obtain_sorted_constraints_with_sat_c() const;
+16535: # 2370 "../../src/Polyhedron_defs.hh"
+16535:   void obtain_sorted_generators_with_sat_g() const;
+16535: # 2386 "../../src/Polyhedron_defs.hh"
+16535:   bool minimize() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool strongly_minimize_constraints() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool strongly_minimize_generators() const;
+16535: 
+16535: 
+16535:   Constraint_System simplified_constraints() const;
+16535: 
+16535: 
+16535: 
+16535:   enum Three_Valued_Boolean {
+16535:     TVB_TRUE,
+16535:     TVB_FALSE,
+16535:     TVB_DONT_KNOW
+16535:   };
+16535: 
+16535: 
+16535:   Three_Valued_Boolean quick_equivalence_test(const Polyhedron& y) const;
+16535: 
+16535: 
+16535:   bool is_included_in(const Polyhedron& y) const;
+16535: # 2438 "../../src/Polyhedron_defs.hh"
+16535:   bool bounds(const Linear_Expression& expr, bool from_above) const;
+16535: # 2471 "../../src/Polyhedron_defs.hh"
+16535:   bool max_min(const Linear_Expression& expr,
+16535:                bool maximize,
+16535:                Coefficient& ext_n, Coefficient& ext_d, bool& included,
+16535:                Generator& g) const;
+16535: # 2483 "../../src/Polyhedron_defs.hh"
+16535:   void select_CH78_constraints(const Polyhedron& y,
+16535:                                Constraint_System& cs_selection) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void select_H79_constraints(const Polyhedron& y,
+16535:                               Constraint_System& cs_selected,
+16535:                               Constraint_System& cs_not_selected) const;
+16535: 
+16535:   bool BHRZ03_combining_constraints(const Polyhedron& y,
+16535:                                     const BHRZ03_Certificate& y_cert,
+16535:                                     const Polyhedron& H79,
+16535:                                     const Constraint_System& x_minus_H79_cs);
+16535: 
+16535:   bool BHRZ03_evolving_points(const Polyhedron& y,
+16535:                               const BHRZ03_Certificate& y_cert,
+16535:                               const Polyhedron& H79);
+16535: 
+16535:   bool BHRZ03_evolving_rays(const Polyhedron& y,
+16535:                             const BHRZ03_Certificate& y_cert,
+16535:                             const Polyhedron& H79);
+16535: 
+16535:   static void modify_according_to_evolution(Linear_Expression& ray,
+16535:                                             const Linear_Expression& x,
+16535:                                             const Linear_Expression& y);
+16535: # 2542 "../../src/Polyhedron_defs.hh"
+16535:   template <typename Linear_System1, typename Linear_System2>
+16535:   static void add_space_dimensions(Linear_System1& sys1,
+16535:                                    Linear_System2& sys2,
+16535:                                    Bit_Matrix& sat1,
+16535:                                    Bit_Matrix& sat2,
+16535:                                    dimension_type add_dim);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename Source_Linear_System, typename Dest_Linear_System>
+16535:   static bool minimize(bool con_to_gen,
+16535:                        Source_Linear_System& source,
+16535:                        Dest_Linear_System& dest,
+16535:                        Bit_Matrix& sat);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename Source_Linear_System1, typename Source_Linear_System2,
+16535:             typename Dest_Linear_System>
+16535:   static bool add_and_minimize(bool con_to_gen,
+16535:                                Source_Linear_System1& source1,
+16535:                                Dest_Linear_System& dest,
+16535:                                Bit_Matrix& sat,
+16535:                                const Source_Linear_System2& source2);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename Source_Linear_System, typename Dest_Linear_System>
+16535:   static bool add_and_minimize(bool con_to_gen,
+16535:                                Source_Linear_System& source,
+16535:                                Dest_Linear_System& dest,
+16535:                                Bit_Matrix& sat);
+16535: 
+16535: 
+16535: 
+16535:   template <typename Source_Linear_System, typename Dest_Linear_System>
+16535:   static dimension_type conversion(Source_Linear_System& source,
+16535:                                    dimension_type start,
+16535:                                    Dest_Linear_System& dest,
+16535:                                    Bit_Matrix& sat,
+16535:                                    dimension_type num_lines_or_equalities);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename Linear_System1>
+16535:   static dimension_type simplify(Linear_System1& sys, Bit_Matrix& sat);
+16535: # 2610 "../../src/Polyhedron_defs.hh"
+16535:   static dimension_type* simplify_num_saturators_p;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static size_t simplify_num_saturators_size;
+16535: 
+16535:   template <typename Interval> friend class Parma_Polyhedra_Library::Box;
+16535:   template <typename T> friend class Parma_Polyhedra_Library::BD_Shape;
+16535:   template <typename T> friend class Parma_Polyhedra_Library::Octagonal_Shape;
+16535:   friend class Parma_Polyhedra_Library::Grid;
+16535:   friend class Parma_Polyhedra_Library::BHRZ03_Certificate;
+16535:   friend class Parma_Polyhedra_Library::H79_Certificate;
+16535: 
+16535: protected:
+16535: # 2644 "../../src/Polyhedron_defs.hh"
+16535:   bool BFT00_poly_hull_assign_if_exact(const Polyhedron& y);
+16535: 
+16535:   bool BHZ09_poly_hull_assign_if_exact(const Polyhedron& y);
+16535:   bool BHZ09_C_poly_hull_assign_if_exact(const Polyhedron& y);
+16535:   bool BHZ09_NNC_poly_hull_assign_if_exact(const Polyhedron& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: protected:
+16535:   void throw_invalid_argument(const char* method, const char* reason) const;
+16535: 
+16535:   void throw_topology_incompatible(const char* method,
+16535:                                    const char* ph_name,
+16535:                                    const Polyhedron& ph) const;
+16535:   void throw_topology_incompatible(const char* method,
+16535:                                    const char* c_name,
+16535:                                    const Constraint& c) const;
+16535:   void throw_topology_incompatible(const char* method,
+16535:                                    const char* g_name,
+16535:                                    const Generator& g) const;
+16535:   void throw_topology_incompatible(const char* method,
+16535:                                    const char* cs_name,
+16535:                                    const Constraint_System& cs) const;
+16535:   void throw_topology_incompatible(const char* method,
+16535:                                    const char* gs_name,
+16535:                                    const Generator_System& gs) const;
+16535: 
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* other_name,
+16535:                                     dimension_type other_dim) const;
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* ph_name,
+16535:                                     const Polyhedron& ph) const;
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* le_name,
+16535:                                     const Linear_Expression& le) const;
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* c_name,
+16535:                                     const Constraint& c) const;
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* g_name,
+16535:                                     const Generator& g) const;
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* cg_name,
+16535:                                     const Congruence& cg) const;
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* cs_name,
+16535:                                     const Constraint_System& cs) const;
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* gs_name,
+16535:                                     const Generator_System& gs) const;
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* cgs_name,
+16535:                                     const Congruence_System& cgs) const;
+16535:   template <typename C>
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* lf_name,
+16535:                                     const Linear_Form<C>& lf) const;
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* var_name,
+16535:                                     Variable var) const;
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     dimension_type required_space_dim) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static dimension_type
+16535:   check_space_dimension_overflow(dimension_type dim, dimension_type max,
+16535:                                  const Topology topol,
+16535:                                  const char* method, const char* reason);
+16535: 
+16535:   static dimension_type
+16535:   check_space_dimension_overflow(dimension_type dim, const Topology topol,
+16535:                                  const char* method, const char* reason);
+16535: 
+16535:   template <typename Object>
+16535:   static Object&
+16535:   check_obj_space_dimension_overflow(Object& input, Topology topol,
+16535:                                      const char* method, const char* reason);
+16535: 
+16535:   void throw_invalid_generator(const char* method,
+16535:                                const char* g_name) const;
+16535: 
+16535:   void throw_invalid_generators(const char* method,
+16535:                                 const char* gs_name) const;
+16535: # 2751 "../../src/Polyhedron_defs.hh"
+16535:   void drop_some_non_integer_points(const Variables_Set* vars_p,
+16535:                                     Complexity_Class complexity);
+16535: # 2772 "../../src/Polyhedron_defs.hh"
+16535:   template <typename FP_Format, typename Interval_Info>
+16535:   void overapproximate_linear_form(
+16535:   const Linear_Form<Interval <FP_Format, Interval_Info> >& lf,
+16535:   const dimension_type lf_dimension,
+16535:   Linear_Form<Interval <FP_Format, Interval_Info> >& result);
+16535: # 2797 "../../src/Polyhedron_defs.hh"
+16535:   template <typename FP_Format, typename Interval_Info>
+16535:   static void convert_to_integer_expression(
+16535:               const Linear_Form<Interval <FP_Format, Interval_Info> >& lf,
+16535:               const dimension_type lf_dimension,
+16535:               Linear_Expression& result);
+16535: # 2829 "../../src/Polyhedron_defs.hh"
+16535:   template <typename FP_Format, typename Interval_Info>
+16535:   static void
+16535:   convert_to_integer_expressions(const Linear_Form<Interval<FP_Format,
+16535:                                                             Interval_Info> >&
+16535:                                  lf,
+16535:                                  const dimension_type lf_dimension,
+16535:                                  Linear_Expression& res,
+16535:                                  Coefficient& res_low_coeff,
+16535:                                  Coefficient& res_hi_coeff,
+16535:                                  Coefficient& denominator);
+16535: 
+16535:   template <typename Linear_System1, typename Row2>
+16535:   static bool
+16535:   add_to_system_and_check_independence(Linear_System1& eq_sys,
+16535:                                        const Row2& eq);
+16535: # 2852 "../../src/Polyhedron_defs.hh"
+16535:   void positive_time_elapse_assign_impl(const Polyhedron& y);
+16535: };
+16535: 
+16535: # 1 "../../src/Ph_Status_inlines.hh" 1
+16535: # 27 "../../src/Ph_Status_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline
+16535: Polyhedron::Status::Status(flags_t mask)
+16535:   : flags(mask) {
+16535: }
+16535: 
+16535: inline
+16535: Polyhedron::Status::Status()
+16535:   : flags(ZERO_DIM_UNIV) {
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::Status::test_all(flags_t mask) const {
+16535:   return (flags & mask) == mask;
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::Status::test_any(flags_t mask) const {
+16535:   return (flags & mask) != 0;
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::Status::set(flags_t mask) {
+16535:   flags |= mask;
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::Status::reset(flags_t mask) {
+16535:   flags &= ~mask;
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::Status::test_zero_dim_univ() const {
+16535:   return flags == ZERO_DIM_UNIV;
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::Status::reset_zero_dim_univ() {
+16535: 
+16535:   if (flags == ZERO_DIM_UNIV) {
+16535: 
+16535:     flags = EMPTY;
+16535:   }
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::Status::set_zero_dim_univ() {
+16535: 
+16535:   flags = ZERO_DIM_UNIV;
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::Status::test_empty() const {
+16535:   return test_any(EMPTY);
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::Status::reset_empty() {
+16535:   reset(EMPTY);
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::Status::set_empty() {
+16535:   flags = EMPTY;
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::Status::test_c_up_to_date() const {
+16535:   return test_any(C_UP_TO_DATE);
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::Status::reset_c_up_to_date() {
+16535:   reset(C_UP_TO_DATE);
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::Status::set_c_up_to_date() {
+16535:   set(C_UP_TO_DATE);
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::Status::test_g_up_to_date() const {
+16535:   return test_any(G_UP_TO_DATE);
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::Status::reset_g_up_to_date() {
+16535:   reset(G_UP_TO_DATE);
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::Status::set_g_up_to_date() {
+16535:   set(G_UP_TO_DATE);
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::Status::test_c_minimized() const {
+16535:   return test_any(C_MINIMIZED);
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::Status::reset_c_minimized() {
+16535:   reset(C_MINIMIZED);
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::Status::set_c_minimized() {
+16535:   set(C_MINIMIZED);
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::Status::test_g_minimized() const {
+16535:   return test_any(G_MINIMIZED);
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::Status::reset_g_minimized() {
+16535:   reset(G_MINIMIZED);
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::Status::set_g_minimized() {
+16535:   set(G_MINIMIZED);
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: Polyhedron::Status::test_c_pending() const {
+16535:   return test_any(CS_PENDING);
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::Status::reset_c_pending() {
+16535:   reset(CS_PENDING);
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::Status::set_c_pending() {
+16535:   set(CS_PENDING);
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::Status::test_g_pending() const {
+16535:   return test_any(GS_PENDING);
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::Status::reset_g_pending() {
+16535:   reset(GS_PENDING);
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::Status::set_g_pending() {
+16535:   set(GS_PENDING);
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: Polyhedron::Status::test_sat_c_up_to_date() const {
+16535:   return test_any(SAT_C_UP_TO_DATE);
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::Status::reset_sat_c_up_to_date() {
+16535:   reset(SAT_C_UP_TO_DATE);
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::Status::set_sat_c_up_to_date() {
+16535:   set(SAT_C_UP_TO_DATE);
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::Status::test_sat_g_up_to_date() const {
+16535:   return test_any(SAT_G_UP_TO_DATE);
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::Status::reset_sat_g_up_to_date() {
+16535:   reset(SAT_G_UP_TO_DATE);
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::Status::set_sat_g_up_to_date() {
+16535:   set(SAT_G_UP_TO_DATE);
+16535: }
+16535: 
+16535: }
+16535: # 2856 "../../src/Polyhedron_defs.hh" 2
+16535: # 1 "../../src/Polyhedron_inlines.hh" 1
+16535: # 32 "../../src/Polyhedron_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline memory_size_type
+16535: Polyhedron::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Polyhedron::space_dimension() const {
+16535:   return space_dim;
+16535: }
+16535: 
+16535: inline int32_t
+16535: Polyhedron::hash_code() const {
+16535:   return hash_code_from_dimension(space_dimension());
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Polyhedron::max_space_dimension() {
+16535:   using std::min;
+16535: 
+16535: 
+16535:   return min(std::numeric_limits<dimension_type>::max() - 1,
+16535:              min(Constraint_System::max_space_dimension(),
+16535:                  Generator_System::max_space_dimension()
+16535:                  )
+16535:              );
+16535: }
+16535: 
+16535: inline Topology
+16535: Polyhedron::topology() const {
+16535: 
+16535: 
+16535:   return con_sys.topology();
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::is_discrete() const {
+16535:   return affine_dimension() == 0;
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::is_necessarily_closed() const {
+16535: 
+16535: 
+16535:   return con_sys.is_necessarily_closed();
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::upper_bound_assign(const Polyhedron& y) {
+16535:   poly_hull_assign(y);
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::difference_assign(const Polyhedron& y) {
+16535:   poly_difference_assign(y);
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::widening_assign(const Polyhedron& y, unsigned* tp) {
+16535:   H79_widening_assign(y, tp);
+16535: }
+16535: 
+16535: inline
+16535: Polyhedron::~Polyhedron() {
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::m_swap(Polyhedron& y) {
+16535:   if (topology() != y.topology()) {
+16535:     throw_topology_incompatible("swap(y)", "y", y);
+16535:   }
+16535:   using std::swap;
+16535:   swap(con_sys, y.con_sys);
+16535:   swap(gen_sys, y.gen_sys);
+16535:   swap(sat_c, y.sat_c);
+16535:   swap(sat_g, y.sat_g);
+16535:   swap(status, y.status);
+16535:   swap(space_dim, y.space_dim);
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: swap(Polyhedron& x, Polyhedron& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::can_recycle_constraint_systems() {
+16535:   return true;
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::can_recycle_congruence_systems() {
+16535:   return false;
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::marked_empty() const {
+16535:   return status.test_empty();
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::constraints_are_up_to_date() const {
+16535:   return status.test_c_up_to_date();
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::generators_are_up_to_date() const {
+16535:   return status.test_g_up_to_date();
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::constraints_are_minimized() const {
+16535:   return status.test_c_minimized();
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::generators_are_minimized() const {
+16535:   return status.test_g_minimized();
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::sat_c_is_up_to_date() const {
+16535:   return status.test_sat_c_up_to_date();
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::sat_g_is_up_to_date() const {
+16535:   return status.test_sat_g_up_to_date();
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::has_pending_constraints() const {
+16535:   return status.test_c_pending();
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::has_pending_generators() const {
+16535:   return status.test_g_pending();
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::has_something_pending() const {
+16535:   return status.test_c_pending() || status.test_g_pending();
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::can_have_something_pending() const {
+16535:   return constraints_are_minimized()
+16535:     && generators_are_minimized()
+16535:     && (sat_c_is_up_to_date() || sat_g_is_up_to_date());
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::is_empty() const {
+16535:   if (marked_empty()) {
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (generators_are_up_to_date() && !has_pending_constraints()) {
+16535:     return false;
+16535:   }
+16535:   return !minimize();
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::set_constraints_up_to_date() {
+16535:   status.set_c_up_to_date();
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::set_generators_up_to_date() {
+16535:   status.set_g_up_to_date();
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::set_constraints_minimized() {
+16535:   set_constraints_up_to_date();
+16535:   status.set_c_minimized();
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::set_generators_minimized() {
+16535:   set_generators_up_to_date();
+16535:   status.set_g_minimized();
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::set_constraints_pending() {
+16535:   status.set_c_pending();
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::set_generators_pending() {
+16535:   status.set_g_pending();
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::set_sat_c_up_to_date() {
+16535:   status.set_sat_c_up_to_date();
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::set_sat_g_up_to_date() {
+16535:   status.set_sat_g_up_to_date();
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::clear_empty() {
+16535:   status.reset_empty();
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::clear_constraints_minimized() {
+16535:   status.reset_c_minimized();
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::clear_generators_minimized() {
+16535:   status.reset_g_minimized();
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::clear_pending_constraints() {
+16535:   status.reset_c_pending();
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::clear_pending_generators() {
+16535:   status.reset_g_pending();
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::clear_sat_c_up_to_date() {
+16535:   status.reset_sat_c_up_to_date();
+16535: 
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::clear_sat_g_up_to_date() {
+16535:   status.reset_sat_g_up_to_date();
+16535: 
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::clear_constraints_up_to_date() {
+16535:   clear_pending_constraints();
+16535:   clear_constraints_minimized();
+16535:   clear_sat_c_up_to_date();
+16535:   clear_sat_g_up_to_date();
+16535:   status.reset_c_up_to_date();
+16535: 
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::clear_generators_up_to_date() {
+16535:   clear_pending_generators();
+16535:   clear_generators_minimized();
+16535:   clear_sat_c_up_to_date();
+16535:   clear_sat_g_up_to_date();
+16535:   status.reset_g_up_to_date();
+16535: 
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::process_pending() const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535:   if (has_pending_constraints()) {
+16535:     return process_pending_constraints();
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   process_pending_generators();
+16535:   return true;
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::bounds_from_above(const Linear_Expression& expr) const {
+16535:   return bounds(expr, true);
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::bounds_from_below(const Linear_Expression& expr) const {
+16535:   return bounds(expr, false);
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::maximize(const Linear_Expression& expr,
+16535:                      Coefficient& sup_n, Coefficient& sup_d,
+16535:                      bool& maximum) const {
+16535:   Generator g(point());
+16535:   return max_min(expr, true, sup_n, sup_d, maximum, g);
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::maximize(const Linear_Expression& expr,
+16535:                      Coefficient& sup_n, Coefficient& sup_d, bool& maximum,
+16535:                      Generator& g) const {
+16535:   return max_min(expr, true, sup_n, sup_d, maximum, g);
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::minimize(const Linear_Expression& expr,
+16535:                      Coefficient& inf_n, Coefficient& inf_d,
+16535:                      bool& minimum) const {
+16535:   Generator g(point());
+16535:   return max_min(expr, false, inf_n, inf_d, minimum, g);
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::minimize(const Linear_Expression& expr,
+16535:                      Coefficient& inf_n, Coefficient& inf_d, bool& minimum,
+16535:                      Generator& g) const {
+16535:   return max_min(expr, false, inf_n, inf_d, minimum, g);
+16535: }
+16535: 
+16535: inline Constraint_System
+16535: Polyhedron::simplified_constraints() const {
+16535:   ((void) 0);
+16535:   Constraint_System cs(con_sys);
+16535:   if (cs.num_pending_rows() > 0) {
+16535:     cs.unset_pending_rows();
+16535:   }
+16535:   if (has_pending_constraints() || !constraints_are_minimized()) {
+16535:     cs.simplify();
+16535:   }
+16535:   return cs;
+16535: }
+16535: 
+16535: inline Congruence_System
+16535: Polyhedron::congruences() const {
+16535:   return Congruence_System(minimized_constraints());
+16535: }
+16535: 
+16535: inline Congruence_System
+16535: Polyhedron::minimized_congruences() const {
+16535:   return Congruence_System(minimized_constraints());
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::add_recycled_congruences(Congruence_System& cgs) {
+16535:   add_congruences(cgs);
+16535: }
+16535: 
+16535: template <typename FP_Format, typename Interval_Info>
+16535: inline void
+16535: Polyhedron::generalized_refine_with_linear_form_inequality(
+16535:             const Linear_Form< Interval<FP_Format, Interval_Info> >& left,
+16535:             const Linear_Form< Interval<FP_Format, Interval_Info> >& right,
+16535:             const Relation_Symbol relsym) {
+16535:   switch (relsym) {
+16535:   case EQUAL:
+16535: 
+16535:     refine_with_linear_form_inequality(left, right, false);
+16535:     refine_with_linear_form_inequality(right, left, false);
+16535:     break;
+16535:   case LESS_THAN:
+16535:     refine_with_linear_form_inequality(left, right, true);
+16535:     break;
+16535:   case LESS_OR_EQUAL:
+16535:     refine_with_linear_form_inequality(left, right, false);
+16535:     break;
+16535:   case GREATER_THAN:
+16535:     refine_with_linear_form_inequality(right, left, true);
+16535:     break;
+16535:   case GREATER_OR_EQUAL:
+16535:     refine_with_linear_form_inequality(right, left, false);
+16535:     break;
+16535:   case NOT_EQUAL:
+16535:     break;
+16535:   default:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     break;
+16535:   }
+16535: }
+16535: 
+16535: template <typename FP_Format, typename Interval_Info>
+16535: inline void
+16535: Polyhedron::
+16535: refine_fp_interval_abstract_store(
+16535:        Box< Interval<FP_Format, Interval_Info> >& store) const {
+16535: 
+16535: 
+16535:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_422 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<FP_Format>::is_exact)>) }
+16535: 
+16535:                                                      ;
+16535: 
+16535:   typedef Interval<FP_Format, Interval_Info> FP_Interval_Type;
+16535:   store.intersection_assign(Box<FP_Interval_Type>(*this));
+16535: 
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: operator!=(const Polyhedron& x, const Polyhedron& y) {
+16535:   return !(x == y);
+16535: }
+16535: 
+16535: inline bool
+16535: Polyhedron::strictly_contains(const Polyhedron& y) const {
+16535:   const Polyhedron& x = *this;
+16535:   return x.contains(y) && !y.contains(x);
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::drop_some_non_integer_points(Complexity_Class complexity) {
+16535:   const Variables_Set* const p_vs = 0;
+16535:   drop_some_non_integer_points(p_vs, complexity);
+16535: }
+16535: 
+16535: inline void
+16535: Polyhedron::drop_some_non_integer_points(const Variables_Set& vars,
+16535:                                          Complexity_Class complexity) {
+16535:   drop_some_non_integer_points(&vars, complexity);
+16535: }
+16535: 
+16535: 
+16535: namespace Interfaces {
+16535: 
+16535: inline bool
+16535: is_necessarily_closed_for_interfaces(const Polyhedron& ph) {
+16535:   return ph.is_necessarily_closed();
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 2857 "../../src/Polyhedron_defs.hh" 2
+16535: # 1 "../../src/Polyhedron_templates.hh" 1
+16535: # 28 "../../src/Polyhedron_templates.hh"
+16535: # 1 "../../src/MIP_Problem_defs.hh" 1
+16535: # 29 "../../src/MIP_Problem_defs.hh"
+16535: # 1 "../../src/Matrix_defs.hh" 1
+16535: # 27 "../../src/Matrix_defs.hh"
+16535: # 1 "../../src/Matrix_types.hh" 1
+16535: # 16 "../../src/Matrix_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Row>
+16535: class Matrix;
+16535: 
+16535: }
+16535: # 28 "../../src/Matrix_defs.hh" 2
+16535: # 36 "../../src/Matrix_defs.hh"
+16535: template <typename Row>
+16535: class Parma_Polyhedra_Library::Matrix {
+16535: 
+16535: public:
+16535:   typedef typename Swapping_Vector<Row>::iterator iterator;
+16535:   typedef typename Swapping_Vector<Row>::const_iterator const_iterator;
+16535: 
+16535: 
+16535:   static dimension_type max_num_rows();
+16535: 
+16535: 
+16535:   static dimension_type max_num_columns();
+16535: # 58 "../../src/Matrix_defs.hh"
+16535:   explicit Matrix(dimension_type n = 0);
+16535: # 72 "../../src/Matrix_defs.hh"
+16535:   Matrix(dimension_type num_rows, dimension_type num_columns);
+16535: # 82 "../../src/Matrix_defs.hh"
+16535:   void m_swap(Matrix& x);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type num_rows() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type num_columns() const;
+16535: 
+16535: 
+16535: 
+16535:   dimension_type capacity() const;
+16535: # 109 "../../src/Matrix_defs.hh"
+16535:   bool has_no_rows() const;
+16535: 
+16535: 
+16535:   void resize(dimension_type n);
+16535: 
+16535: 
+16535: 
+16535:   void reserve_rows(dimension_type n);
+16535: # 146 "../../src/Matrix_defs.hh"
+16535:   void resize(dimension_type num_rows, dimension_type num_columns);
+16535: # 164 "../../src/Matrix_defs.hh"
+16535:   void add_zero_rows_and_columns(dimension_type n, dimension_type m);
+16535: # 178 "../../src/Matrix_defs.hh"
+16535:   void add_zero_rows(dimension_type n);
+16535: # 191 "../../src/Matrix_defs.hh"
+16535:   void add_row(const Row& x);
+16535: # 205 "../../src/Matrix_defs.hh"
+16535:   void add_recycled_row(Row& y);
+16535: # 219 "../../src/Matrix_defs.hh"
+16535:   void remove_trailing_rows(dimension_type n);
+16535: 
+16535:   void remove_rows(iterator first, iterator last);
+16535: # 253 "../../src/Matrix_defs.hh"
+16535:   void permute_columns(const std::vector<dimension_type>& cycles);
+16535: 
+16535: 
+16535:   void swap_columns(dimension_type i, dimension_type j);
+16535: # 269 "../../src/Matrix_defs.hh"
+16535:   void add_zero_columns(dimension_type n);
+16535: # 290 "../../src/Matrix_defs.hh"
+16535:   void add_zero_columns(dimension_type n, dimension_type i);
+16535: # 308 "../../src/Matrix_defs.hh"
+16535:   void remove_column(dimension_type i);
+16535: # 326 "../../src/Matrix_defs.hh"
+16535:   void remove_trailing_columns(dimension_type n);
+16535: 
+16535: 
+16535:   void clear();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   iterator begin();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   iterator end();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const_iterator begin() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const_iterator end() const;
+16535: # 362 "../../src/Matrix_defs.hh"
+16535:   Row& operator[](dimension_type i);
+16535: # 371 "../../src/Matrix_defs.hh"
+16535:   const Row& operator[](dimension_type i) const;
+16535: # 380 "../../src/Matrix_defs.hh"
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535: private:
+16535: 
+16535:   Swapping_Vector<Row> rows;
+16535: 
+16535: 
+16535:   dimension_type num_columns_;
+16535: };
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Row>
+16535: void swap(Matrix<Row>& x, Matrix<Row>& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Row>
+16535: bool operator==(const Matrix<Row>& x, const Matrix<Row>& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Row>
+16535: bool operator!=(const Matrix<Row>& x, const Matrix<Row>& y);
+16535: 
+16535: }
+16535: 
+16535: 
+16535: # 1 "../../src/Matrix_inlines.hh" 1
+16535: # 27 "../../src/Matrix_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Row>
+16535: inline dimension_type
+16535: Matrix<Row>::max_num_rows() {
+16535:   return std::vector<Row>().max_size();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline dimension_type
+16535: Matrix<Row>::max_num_columns() {
+16535:   return Row::max_size();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Matrix<Row>::m_swap(Matrix& x) {
+16535:   using std::swap;
+16535:   swap(rows, x.rows);
+16535:   swap(num_columns_, x.num_columns_);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline dimension_type
+16535: Matrix<Row>::num_rows() const {
+16535:   return rows.size();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline dimension_type
+16535: Matrix<Row>::num_columns() const {
+16535:   return num_columns_;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline dimension_type
+16535: Matrix<Row>::capacity() const {
+16535:   return rows.capacity();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline bool
+16535: Matrix<Row>::has_no_rows() const {
+16535:   return num_rows() == 0;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Matrix<Row>::resize(dimension_type n) {
+16535:   resize(n, n);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Matrix<Row>::reserve_rows(dimension_type requested_capacity) {
+16535: 
+16535:   rows.reserve(requested_capacity);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Matrix<Row>::add_zero_rows_and_columns(dimension_type n, dimension_type m) {
+16535:   resize(num_rows() + n, num_columns() + m);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Matrix<Row>::add_zero_rows(dimension_type n) {
+16535:   resize(num_rows() + n, num_columns());
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Matrix<Row>::add_row(const Row& x) {
+16535: 
+16535:   Row row(x);
+16535:   add_zero_rows(1);
+16535: 
+16535:   swap(rows.back(), row);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Matrix<Row>::add_recycled_row(Row& x) {
+16535:   add_zero_rows(1);
+16535:   swap(rows.back(), x);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Matrix<Row>::remove_trailing_rows(dimension_type n) {
+16535:   resize(num_rows() - n, num_columns());
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Matrix<Row>::remove_rows(iterator first, iterator last) {
+16535:   rows.erase(first, last);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Matrix<Row>::add_zero_columns(dimension_type n) {
+16535:   resize(num_rows(), num_columns() + n);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Matrix<Row>::remove_trailing_columns(dimension_type n) {
+16535:   ((void) 0);
+16535:   resize(num_rows(), num_columns() - n);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: Matrix<Row>::clear() {
+16535:   resize(0, 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline typename Matrix<Row>::iterator
+16535: Matrix<Row>::begin() {
+16535:   return rows.begin();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline typename Matrix<Row>::iterator
+16535: Matrix<Row>::end() {
+16535:   return rows.end();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline typename Matrix<Row>::const_iterator
+16535: Matrix<Row>::begin() const {
+16535:   return rows.begin();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline typename Matrix<Row>::const_iterator
+16535: Matrix<Row>::end() const {
+16535:   return rows.end();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline Row&
+16535: Matrix<Row>::operator[](dimension_type i) {
+16535:   ((void) 0);
+16535:   return rows[i];
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline const Row&
+16535: Matrix<Row>::operator[](dimension_type i) const {
+16535:   ((void) 0);
+16535:   return rows[i];
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline memory_size_type
+16535: Matrix<Row>::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: inline void
+16535: swap(Matrix<Row>& x, Matrix<Row>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 435 "../../src/Matrix_defs.hh" 2
+16535: # 1 "../../src/Matrix_templates.hh" 1
+16535: # 27 "../../src/Matrix_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Row>
+16535: Matrix<Row>::Matrix(dimension_type n)
+16535:   : rows(n), num_columns_(n) {
+16535:   for (dimension_type i = 0; i < rows.size(); ++i) {
+16535:     rows[i].resize(num_columns_);
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: Matrix<Row>::Matrix(dimension_type num_rows, dimension_type num_columns)
+16535:   : rows(num_rows), num_columns_(num_columns) {
+16535:   for (dimension_type i = 0; i < rows.size(); ++i) {
+16535:     rows[i].resize(num_columns_);
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Matrix<Row>::resize(dimension_type num_rows, dimension_type num_columns) {
+16535:   const dimension_type old_num_rows = rows.size();
+16535:   rows.resize(num_rows);
+16535:   if (old_num_rows < num_rows) {
+16535:     for (dimension_type i = old_num_rows; i < num_rows; ++i) {
+16535:       rows[i].resize(num_columns);
+16535:     }
+16535:     if (num_columns_ != num_columns) {
+16535:       num_columns_ = num_columns;
+16535:       for (dimension_type i = 0; i < old_num_rows; ++i) {
+16535:         rows[i].resize(num_columns);
+16535:       }
+16535:     }
+16535:   }
+16535:   else
+16535:     if (num_columns_ != num_columns) {
+16535:       num_columns_ = num_columns;
+16535:       for (dimension_type i = 0; i < num_rows; ++i) {
+16535:         rows[i].resize(num_columns);
+16535:       }
+16535:     }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Matrix<Row>::permute_columns(const std::vector<dimension_type>& cycles) {
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_tmp; Parma_Polyhedra_Library::Coefficient& tmp = holder_tmp.item();
+16535:   const dimension_type n = cycles.size();
+16535:   ((void) 0);
+16535:   for (dimension_type k = num_rows(); k-- > 0; ) {
+16535:     Row& rows_k = (*this)[k];
+16535:     for (dimension_type i = 0, j = 0; i < n; i = ++j) {
+16535: 
+16535:       while (cycles[j] != 0) {
+16535:         ++j;
+16535:       }
+16535: 
+16535:       ((void) 0);
+16535:       if (j - i == 2) {
+16535: 
+16535:         rows_k.swap_coefficients(cycles[i], cycles[i + 1]);
+16535:       }
+16535:       else {
+16535: 
+16535:         tmp = rows_k.get(cycles[j - 1]);
+16535:         for (dimension_type l = (j - 1); l > i; --l) {
+16535:           rows_k.swap_coefficients(cycles[l-1], cycles[l]);
+16535:         }
+16535:         if (tmp == 0) {
+16535:           rows_k.reset(cycles[i]);
+16535:         }
+16535:         else {
+16535:           using std::swap;
+16535:           swap(tmp, rows_k[cycles[i]]);
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Matrix<Row>::swap_columns(dimension_type i, dimension_type j) {
+16535:   for (dimension_type k = num_rows(); k-- > 0; ) {
+16535:     (*this)[k].swap_coefficients(i, j);
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Matrix<Row>::add_zero_columns(dimension_type n, dimension_type i) {
+16535:   for (dimension_type j = rows.size(); j-- > 0; ) {
+16535:     rows[j].add_zeroes_and_shift(n, i);
+16535:   }
+16535:   num_columns_ += n;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Matrix<Row>::remove_column(dimension_type i) {
+16535:   for (dimension_type j = rows.size(); j-- > 0; ) {
+16535:     rows[j].delete_element_and_shift(i);
+16535:   }
+16535:   --num_columns_;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Row>
+16535: void
+16535: Matrix<Row>::ascii_dump(std::ostream& s) const {
+16535:   s << num_rows() << " x ";
+16535:   s << num_columns() << "\n";
+16535:   for (const_iterator i = begin(), i_end = end(); i !=i_end; ++i) {
+16535:     i->ascii_dump(s);
+16535:   }
+16535: }
+16535: 
+16535: template <typename Row> void Matrix<Row>::ascii_dump() const { ascii_dump(std::cerr); } template <typename Row> void Matrix<Row>::print() const { std::cerr << "No user level output operator defined " << "for " "Matrix<Row>" << "." << std::endl; }
+16535: 
+16535: template <typename Row>
+16535: bool
+16535: Matrix<Row>::ascii_load(std::istream& s) {
+16535:   std::string str;
+16535:   dimension_type new_num_rows;
+16535:   dimension_type new_num_cols;
+16535:   if (!(s >> new_num_rows)) {
+16535:     return false;
+16535:   }
+16535:   if (!(s >> str) || str != "x") {
+16535:     return false;
+16535:   }
+16535:   if (!(s >> new_num_cols)) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   for (iterator i = rows.begin(), i_end = rows.end();
+16535:        i != i_end; ++i) {
+16535:     i->clear();
+16535:   }
+16535: 
+16535:   resize(new_num_rows, new_num_cols);
+16535: 
+16535:   for (dimension_type row = 0; row < new_num_rows; ++row) {
+16535:     if (!rows[row].ascii_load(s)) {
+16535:       return false;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename Row>
+16535: memory_size_type
+16535: Matrix<Row>::external_memory_in_bytes() const {
+16535:   return rows.external_memory_in_bytes();
+16535: }
+16535: 
+16535: template <typename Row>
+16535: bool
+16535: Matrix<Row>::OK() const {
+16535:   for (const_iterator i = begin(), i_end = end(); i != i_end; ++i) {
+16535:     if (i->size() != num_columns_) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: 
+16535: template <typename Row>
+16535: bool
+16535: operator==(const Matrix<Row>& x, const Matrix<Row>& y) {
+16535:   if (x.num_rows() != y.num_rows()) {
+16535:     return false;
+16535:   }
+16535:   if (x.num_columns() != y.num_columns()) {
+16535:     return false;
+16535:   }
+16535:   for (dimension_type i = x.num_rows(); i-- > 0; ) {
+16535:     if (x[i] != y[i]) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: 
+16535: template <typename Row>
+16535: bool
+16535: operator!=(const Matrix<Row>& x, const Matrix<Row>& y) {
+16535:   return !(x == y);
+16535: }
+16535: 
+16535: }
+16535: # 436 "../../src/Matrix_defs.hh" 2
+16535: # 30 "../../src/MIP_Problem_defs.hh" 2
+16535: # 42 "../../src/MIP_Problem_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: std::ostream&
+16535: operator<<(std::ostream& s, const MIP_Problem& mip);
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: void swap(MIP_Problem& x, MIP_Problem& y);
+16535: 
+16535: }
+16535: # 87 "../../src/MIP_Problem_defs.hh"
+16535: class Parma_Polyhedra_Library::MIP_Problem {
+16535: public:
+16535: # 102 "../../src/MIP_Problem_defs.hh"
+16535:   explicit MIP_Problem(dimension_type dim = 0);
+16535: # 140 "../../src/MIP_Problem_defs.hh"
+16535:   template <typename In>
+16535:   MIP_Problem(dimension_type dim,
+16535:               In first, In last,
+16535:               const Variables_Set& int_vars,
+16535:               const Linear_Expression& obj = Linear_Expression::zero(),
+16535:               Optimization_Mode mode = MAXIMIZATION);
+16535: # 178 "../../src/MIP_Problem_defs.hh"
+16535:   template <typename In>
+16535:   MIP_Problem(dimension_type dim,
+16535:               In first, In last,
+16535:               const Linear_Expression& obj = Linear_Expression::zero(),
+16535:               Optimization_Mode mode = MAXIMIZATION);
+16535: # 209 "../../src/MIP_Problem_defs.hh"
+16535:   MIP_Problem(dimension_type dim,
+16535:               const Constraint_System& cs,
+16535:               const Linear_Expression& obj = Linear_Expression::zero(),
+16535:               Optimization_Mode mode = MAXIMIZATION);
+16535: 
+16535: 
+16535:   MIP_Problem(const MIP_Problem& y);
+16535: 
+16535: 
+16535:   ~MIP_Problem();
+16535: 
+16535: 
+16535:   MIP_Problem& operator=(const MIP_Problem& y);
+16535: 
+16535: 
+16535:   static dimension_type max_space_dimension();
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const Variables_Set& integer_space_dimensions() const;
+16535: 
+16535: private:
+16535: 
+16535:   typedef std::vector<Constraint*> Constraint_Sequence;
+16535: 
+16535: public:
+16535: 
+16535:   class const_iterator {
+16535:   private:
+16535:     typedef Constraint_Sequence::const_iterator Base;
+16535:     typedef std::iterator_traits<Base> Base_Traits;
+16535: 
+16535:   public:
+16535:     typedef Base_Traits::iterator_category iterator_category;
+16535:     typedef Base_Traits::difference_type difference_type;
+16535:     typedef const Constraint value_type;
+16535:     typedef const Constraint* pointer;
+16535:     typedef const Constraint& reference;
+16535: 
+16535: 
+16535:     difference_type operator-(const const_iterator& y) const;
+16535: 
+16535: 
+16535:     const_iterator& operator++();
+16535: 
+16535: 
+16535:     const_iterator& operator--();
+16535: 
+16535: 
+16535:     const_iterator operator++(int);
+16535: 
+16535: 
+16535:     const_iterator operator--(int);
+16535: 
+16535: 
+16535:     const_iterator& operator+=(difference_type n);
+16535: 
+16535: 
+16535:     const_iterator& operator-=(difference_type n);
+16535: 
+16535: 
+16535:     const_iterator operator+(difference_type n) const;
+16535: 
+16535: 
+16535:     const_iterator operator-(difference_type n) const;
+16535: 
+16535: 
+16535:     reference operator*() const;
+16535: 
+16535: 
+16535:     pointer operator->() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     bool operator==(const const_iterator& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     bool operator!=(const const_iterator& y) const;
+16535: 
+16535:   private:
+16535: 
+16535:     explicit const_iterator(Base b);
+16535: 
+16535: 
+16535:     Base itr;
+16535: 
+16535:     friend class MIP_Problem;
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const_iterator constraints_begin() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const_iterator constraints_end() const;
+16535: 
+16535: 
+16535:   const Linear_Expression& objective_function() const;
+16535: 
+16535: 
+16535:   Optimization_Mode optimization_mode() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void clear();
+16535: # 348 "../../src/MIP_Problem_defs.hh"
+16535:   void add_space_dimensions_and_embed(dimension_type m);
+16535: # 358 "../../src/MIP_Problem_defs.hh"
+16535:   void add_to_integer_space_dimensions(const Variables_Set& i_vars);
+16535: # 367 "../../src/MIP_Problem_defs.hh"
+16535:   void add_constraint(const Constraint& c);
+16535: # 377 "../../src/MIP_Problem_defs.hh"
+16535:   void add_constraints(const Constraint_System& cs);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void set_objective_function(const Linear_Expression& obj);
+16535: 
+16535: 
+16535:   void set_optimization_mode(Optimization_Mode mode);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_satisfiable() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   MIP_Problem_Status solve() const;
+16535: # 423 "../../src/MIP_Problem_defs.hh"
+16535:   void evaluate_objective_function(const Generator& evaluating_point,
+16535:                                    Coefficient& numer,
+16535:                                    Coefficient& denom) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const Generator& feasible_point() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const Generator& optimizing_point() const;
+16535: # 451 "../../src/MIP_Problem_defs.hh"
+16535:   void optimal_value(Coefficient& numer, Coefficient& denom) const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   void m_swap(MIP_Problem& y);
+16535: 
+16535: 
+16535:   enum Control_Parameter_Name {
+16535: 
+16535:     PRICING
+16535:   };
+16535: 
+16535: 
+16535:   enum Control_Parameter_Value {
+16535: 
+16535:     PRICING_STEEPEST_EDGE_FLOAT,
+16535: 
+16535:     PRICING_STEEPEST_EDGE_EXACT,
+16535: 
+16535:     PRICING_TEXTBOOK
+16535:   };
+16535: 
+16535: 
+16535:   Control_Parameter_Value
+16535:   get_control_parameter(Control_Parameter_Name name) const;
+16535: 
+16535: 
+16535:   void set_control_parameter(Control_Parameter_Value value);
+16535: 
+16535: private:
+16535: 
+16535:   dimension_type external_space_dim;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type internal_space_dim;
+16535: 
+16535: 
+16535:   typedef Sparse_Row Row;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Matrix<Row> tableau;
+16535: 
+16535:   typedef Row working_cost_type;
+16535: 
+16535: 
+16535:   working_cost_type working_cost;
+16535: # 530 "../../src/MIP_Problem_defs.hh"
+16535:   std::vector<std::pair<dimension_type, dimension_type> > mapping;
+16535: 
+16535: 
+16535:   std::vector<dimension_type> base;
+16535: 
+16535: 
+16535:   enum Status {
+16535: 
+16535:     UNSATISFIABLE,
+16535: 
+16535:     SATISFIABLE,
+16535: 
+16535:     UNBOUNDED,
+16535: 
+16535:     OPTIMIZED,
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     PARTIALLY_SATISFIABLE
+16535:   };
+16535: 
+16535: 
+16535:   Status status;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Control_Parameter_Value pricing;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool initialized;
+16535: 
+16535: 
+16535:   std::vector<Constraint*> input_cs;
+16535: # 582 "../../src/MIP_Problem_defs.hh"
+16535:   dimension_type inherited_constraints;
+16535: 
+16535: 
+16535:   dimension_type first_pending_constraint;
+16535: 
+16535: 
+16535:   Linear_Expression input_obj_function;
+16535: 
+16535: 
+16535:   Optimization_Mode opt_mode;
+16535: 
+16535: 
+16535:   Generator last_generator;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Variables_Set i_variables;
+16535: 
+16535: 
+16535:   struct RAII_Temporary_Real_Relaxation {
+16535:     MIP_Problem& lp;
+16535:     Variables_Set i_vars;
+16535: 
+16535:     RAII_Temporary_Real_Relaxation(MIP_Problem& mip)
+16535:       : lp(mip), i_vars() {
+16535: 
+16535:       using std::swap;
+16535:       swap(i_vars, lp.i_variables);
+16535:     }
+16535: 
+16535:     ~RAII_Temporary_Real_Relaxation() {
+16535: 
+16535:       using std::swap;
+16535:       swap(i_vars, lp.i_variables);
+16535:     }
+16535:   };
+16535:   friend struct RAII_Temporary_Real_Relaxation;
+16535: 
+16535: 
+16535:   struct Inherit_Constraints {};
+16535: 
+16535: 
+16535:   MIP_Problem(const MIP_Problem& y, Inherit_Constraints);
+16535: 
+16535: 
+16535:   void add_constraint_helper(const Constraint& c);
+16535: 
+16535: 
+16535:   void process_pending_constraints();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void second_phase();
+16535: # 654 "../../src/MIP_Problem_defs.hh"
+16535:   MIP_Problem_Status
+16535:   compute_tableau(std::vector<dimension_type>& worked_out_row);
+16535: # 708 "../../src/MIP_Problem_defs.hh"
+16535:   bool parse_constraints(dimension_type& additional_tableau_rows,
+16535:                          dimension_type& additional_slack_variables,
+16535:                          std::deque<bool>& is_tableau_constraint,
+16535:                          std::deque<bool>& is_satisfied_inequality,
+16535:                          std::deque<bool>& is_nonnegative_variable,
+16535:                          std::deque<bool>& is_remergeable_variable) const;
+16535: # 725 "../../src/MIP_Problem_defs.hh"
+16535:   dimension_type
+16535:   get_exiting_base_index(dimension_type entering_var_index) const;
+16535: # 743 "../../src/MIP_Problem_defs.hh"
+16535:   static void linear_combine(Row& x, const Row& y, const dimension_type k);
+16535: # 763 "../../src/MIP_Problem_defs.hh"
+16535:   static void linear_combine(Dense_Row& x, const Sparse_Row& y,
+16535:                              const dimension_type k);
+16535: 
+16535: 
+16535: 
+16535:   static bool is_unbounded_obj_function(
+16535:     const Linear_Expression& obj_function,
+16535:     const std::vector<std::pair<dimension_type, dimension_type> >& mapping,
+16535:     Optimization_Mode optimization_mode);
+16535: # 782 "../../src/MIP_Problem_defs.hh"
+16535:   void pivot(dimension_type entering_var_index,
+16535:              dimension_type exiting_base_index);
+16535: # 794 "../../src/MIP_Problem_defs.hh"
+16535:   dimension_type textbook_entering_index() const;
+16535: # 821 "../../src/MIP_Problem_defs.hh"
+16535:   dimension_type steepest_edge_exact_entering_index() const;
+16535: # 834 "../../src/MIP_Problem_defs.hh"
+16535:   dimension_type steepest_edge_float_entering_index() const;
+16535: # 844 "../../src/MIP_Problem_defs.hh"
+16535:   bool compute_simplex_using_exact_pricing();
+16535: # 855 "../../src/MIP_Problem_defs.hh"
+16535:   bool compute_simplex_using_steepest_edge_float();
+16535: # 873 "../../src/MIP_Problem_defs.hh"
+16535:   void erase_artificials(dimension_type begin_artificials,
+16535:                          dimension_type end_artificials);
+16535: 
+16535:   bool is_in_base(dimension_type var_index,
+16535:                   dimension_type& row_index) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void compute_generator() const;
+16535: # 897 "../../src/MIP_Problem_defs.hh"
+16535:   dimension_type merge_split_variable(dimension_type var_index);
+16535: 
+16535: 
+16535:   static bool is_satisfied(const Constraint& c, const Generator& g);
+16535: 
+16535: 
+16535:   static bool is_saturated(const Constraint& c, const Generator& g);
+16535: # 924 "../../src/MIP_Problem_defs.hh"
+16535:   static MIP_Problem_Status solve_mip(bool& have_incumbent_solution,
+16535:                                       mpq_class& incumbent_solution_value,
+16535:                                       Generator& incumbent_solution_point,
+16535:                                       MIP_Problem& mip,
+16535:                                       const Variables_Set& i_vars);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_lp_satisfiable() const;
+16535: # 949 "../../src/MIP_Problem_defs.hh"
+16535:   static bool is_mip_satisfiable(MIP_Problem& mip,
+16535:                                  const Variables_Set& i_vars,
+16535:                                  Generator& p);
+16535: # 968 "../../src/MIP_Problem_defs.hh"
+16535:   static bool choose_branching_variable(const MIP_Problem& mip,
+16535:                                         const Variables_Set& i_vars,
+16535:                                         dimension_type& branching_index);
+16535: };
+16535: 
+16535: # 1 "../../src/MIP_Problem_inlines.hh" 1
+16535: # 30 "../../src/MIP_Problem_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline dimension_type
+16535: MIP_Problem::max_space_dimension() {
+16535:   return Constraint::max_space_dimension();
+16535: }
+16535: 
+16535: inline dimension_type
+16535: MIP_Problem::space_dimension() const {
+16535:   return external_space_dim;
+16535: }
+16535: 
+16535: 
+16535: inline
+16535: MIP_Problem::MIP_Problem(const MIP_Problem& y)
+16535:   : external_space_dim(y.external_space_dim),
+16535:     internal_space_dim(y.internal_space_dim),
+16535:     tableau(y.tableau),
+16535:     working_cost(y.working_cost),
+16535:     mapping(y.mapping),
+16535:     base(y.base),
+16535:     status(y.status),
+16535:     pricing(y.pricing),
+16535:     initialized(y.initialized),
+16535:     input_cs(),
+16535:     inherited_constraints(0),
+16535:     first_pending_constraint(),
+16535:     input_obj_function(y.input_obj_function),
+16535:     opt_mode(y.opt_mode),
+16535:     last_generator(y.last_generator),
+16535:     i_variables(y.i_variables) {
+16535:   input_cs.reserve(y.input_cs.size());
+16535:   for (Constraint_Sequence::const_iterator i = y.input_cs.begin(),
+16535:          i_end = y.input_cs.end(); i != i_end; ++i) {
+16535:     add_constraint_helper(*(*i));
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: MIP_Problem::MIP_Problem(const MIP_Problem& y, Inherit_Constraints)
+16535:   : external_space_dim(y.external_space_dim),
+16535:     internal_space_dim(y.internal_space_dim),
+16535:     tableau(y.tableau),
+16535:     working_cost(y.working_cost),
+16535:     mapping(y.mapping),
+16535:     base(y.base),
+16535:     status(y.status),
+16535:     pricing(y.pricing),
+16535:     initialized(y.initialized),
+16535:     input_cs(y.input_cs),
+16535: 
+16535:     inherited_constraints(y.input_cs.size()),
+16535:     first_pending_constraint(y.first_pending_constraint),
+16535:     input_obj_function(y.input_obj_function),
+16535:     opt_mode(y.opt_mode),
+16535:     last_generator(y.last_generator),
+16535:     i_variables(y.i_variables) {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline void
+16535: MIP_Problem::add_constraint_helper(const Constraint& c) {
+16535: 
+16535:   const dimension_type size = input_cs.size();
+16535:   if (size == input_cs.capacity()) {
+16535:     const dimension_type max_size = input_cs.max_size();
+16535:     if (size == max_size) {
+16535:       throw std::length_error("MIP_Problem::add_constraint(): "
+16535:                               "too many constraints");
+16535:     }
+16535: 
+16535:     input_cs.reserve(compute_capacity(size + 1, max_size));
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   input_cs.push_back(new Constraint(c));
+16535: }
+16535: 
+16535: inline
+16535: MIP_Problem::~MIP_Problem() {
+16535: 
+16535: 
+16535:   for (Constraint_Sequence::const_iterator
+16535:          i = nth_iter(input_cs, inherited_constraints),
+16535:          i_end = input_cs.end(); i != i_end; ++i) {
+16535:     delete *i;
+16535:   }
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: MIP_Problem::set_optimization_mode(const Optimization_Mode mode) {
+16535:   if (opt_mode != mode) {
+16535:     opt_mode = mode;
+16535:     if (status == UNBOUNDED || status == OPTIMIZED) {
+16535:       status = SATISFIABLE;
+16535:     }
+16535:     ((void) 0);
+16535:   }
+16535: }
+16535: 
+16535: inline const Linear_Expression&
+16535: MIP_Problem::objective_function() const {
+16535:   return input_obj_function;
+16535: }
+16535: 
+16535: inline Optimization_Mode
+16535: MIP_Problem::optimization_mode() const {
+16535:   return opt_mode;
+16535: }
+16535: 
+16535: inline void
+16535: MIP_Problem::optimal_value(Coefficient& numer, Coefficient& denom) const {
+16535:   const Generator& g = optimizing_point();
+16535:   evaluate_objective_function(g, numer, denom);
+16535: }
+16535: 
+16535: inline MIP_Problem::const_iterator
+16535: MIP_Problem::constraints_begin() const {
+16535:   return const_iterator(input_cs.begin());
+16535: }
+16535: 
+16535: inline MIP_Problem::const_iterator
+16535: MIP_Problem::constraints_end() const {
+16535:   return const_iterator(input_cs.end());
+16535: }
+16535: 
+16535: inline const Variables_Set&
+16535: MIP_Problem::integer_space_dimensions() const {
+16535:   return i_variables;
+16535: }
+16535: 
+16535: inline MIP_Problem::Control_Parameter_Value
+16535: MIP_Problem::get_control_parameter(Control_Parameter_Name name) const {
+16535:   (void)(name);
+16535:   ((void) 0);
+16535:   return pricing;
+16535: }
+16535: 
+16535: inline void
+16535: MIP_Problem::set_control_parameter(Control_Parameter_Value value) {
+16535:   pricing = value;
+16535: }
+16535: 
+16535: inline void
+16535: MIP_Problem::m_swap(MIP_Problem& y) {
+16535:   using std::swap;
+16535:   swap(external_space_dim, y.external_space_dim);
+16535:   swap(internal_space_dim, y.internal_space_dim);
+16535:   swap(tableau, y.tableau);
+16535:   swap(working_cost, y.working_cost);
+16535:   swap(mapping, y.mapping);
+16535:   swap(initialized, y.initialized);
+16535:   swap(base, y.base);
+16535:   swap(status, y.status);
+16535:   swap(pricing, y.pricing);
+16535:   swap(input_cs, y.input_cs);
+16535:   swap(inherited_constraints, y.inherited_constraints);
+16535:   swap(first_pending_constraint, y.first_pending_constraint);
+16535:   swap(input_obj_function, y.input_obj_function);
+16535:   swap(opt_mode, y.opt_mode);
+16535:   swap(last_generator, y.last_generator);
+16535:   swap(i_variables, y.i_variables);
+16535: }
+16535: 
+16535: inline MIP_Problem&
+16535: MIP_Problem::operator=(const MIP_Problem& y) {
+16535:   MIP_Problem tmp(y);
+16535:   m_swap(tmp);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline void
+16535: MIP_Problem::clear() {
+16535:   MIP_Problem tmp;
+16535:   m_swap(tmp);
+16535: }
+16535: 
+16535: 
+16535: inline memory_size_type
+16535: MIP_Problem::external_memory_in_bytes() const {
+16535:   memory_size_type n
+16535:     = working_cost.external_memory_in_bytes()
+16535:     + tableau.external_memory_in_bytes()
+16535:     + input_obj_function.external_memory_in_bytes()
+16535:     + last_generator.external_memory_in_bytes();
+16535: 
+16535: 
+16535: 
+16535:   n += input_cs.capacity() * sizeof(Constraint*);
+16535:   for (Constraint_Sequence::const_iterator
+16535:          i = nth_iter(input_cs, inherited_constraints),
+16535:          i_end = input_cs.end(); i != i_end; ++i) {
+16535:     n += ((*i)->total_memory_in_bytes());
+16535:   }
+16535: 
+16535: 
+16535:   n += base.capacity() * sizeof(dimension_type);
+16535: 
+16535:   n += mapping.capacity() * sizeof(std::pair<dimension_type, dimension_type>);
+16535:   return n;
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: MIP_Problem::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: inline
+16535: MIP_Problem::const_iterator::const_iterator(Base b)
+16535:   : itr(b) {
+16535: }
+16535: 
+16535: inline MIP_Problem::const_iterator::difference_type
+16535: MIP_Problem::const_iterator::operator-(const const_iterator& y) const {
+16535:   return itr - y.itr;
+16535: }
+16535: 
+16535: inline MIP_Problem::const_iterator&
+16535: MIP_Problem::const_iterator::operator++() {
+16535:   ++itr;
+16535:   return *this;
+16535: }
+16535: 
+16535: inline MIP_Problem::const_iterator&
+16535: MIP_Problem::const_iterator::operator--() {
+16535:   --itr;
+16535:   return *this;
+16535: }
+16535: 
+16535: inline MIP_Problem::const_iterator
+16535: MIP_Problem::const_iterator::operator++(int) {
+16535:   const_iterator x = *this;
+16535:   operator++();
+16535:   return x;
+16535: }
+16535: 
+16535: inline MIP_Problem::const_iterator
+16535: MIP_Problem::const_iterator::operator--(int) {
+16535:   const_iterator x = *this;
+16535:   operator--();
+16535:   return x;
+16535: }
+16535: 
+16535: inline MIP_Problem::const_iterator
+16535: MIP_Problem::const_iterator::operator+(difference_type n) const {
+16535:   return const_iterator(itr + n);
+16535: }
+16535: 
+16535: inline MIP_Problem::const_iterator
+16535: MIP_Problem::const_iterator::operator-(difference_type n) const {
+16535:   return const_iterator(itr - n);
+16535: }
+16535: 
+16535: inline MIP_Problem::const_iterator&
+16535: MIP_Problem::const_iterator::operator+=(difference_type n) {
+16535:   itr += n;
+16535:   return *this;
+16535: }
+16535: 
+16535: inline MIP_Problem::const_iterator&
+16535: MIP_Problem::const_iterator::operator-=(difference_type n) {
+16535:   itr -= n;
+16535:   return *this;
+16535: }
+16535: 
+16535: inline MIP_Problem::const_iterator::reference
+16535: MIP_Problem::const_iterator::operator*() const {
+16535:   return *(*itr);
+16535: }
+16535: 
+16535: inline MIP_Problem::const_iterator::pointer
+16535: MIP_Problem::const_iterator::operator->() const {
+16535:   return *itr;
+16535: }
+16535: 
+16535: inline bool
+16535: MIP_Problem::const_iterator::operator==(const const_iterator& y) const {
+16535:   return itr == y.itr;
+16535: }
+16535: 
+16535: inline bool
+16535: MIP_Problem::const_iterator::operator!=(const const_iterator& y) const {
+16535:   return itr != y.itr;
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: swap(MIP_Problem& x, MIP_Problem& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 974 "../../src/MIP_Problem_defs.hh" 2
+16535: # 1 "../../src/MIP_Problem_templates.hh" 1
+16535: # 29 "../../src/MIP_Problem_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename In>
+16535: MIP_Problem::MIP_Problem(const dimension_type dim,
+16535:                          In first, In last,
+16535:                          const Variables_Set& int_vars,
+16535:                          const Linear_Expression& obj,
+16535:                          const Optimization_Mode mode)
+16535:   : external_space_dim(dim),
+16535:     internal_space_dim(0),
+16535:     tableau(),
+16535:     working_cost(0),
+16535:     mapping(),
+16535:     base(),
+16535:     status(PARTIALLY_SATISFIABLE),
+16535:     pricing(PRICING_STEEPEST_EDGE_FLOAT),
+16535:     initialized(false),
+16535:     input_cs(),
+16535:     inherited_constraints(0),
+16535:     first_pending_constraint(0),
+16535:     input_obj_function(obj),
+16535:     opt_mode(mode),
+16535:     last_generator(point()),
+16535:     i_variables(int_vars) {
+16535: 
+16535: 
+16535:   if (i_variables.space_dimension() > external_space_dim) {
+16535:     std::ostringstream s;
+16535:     s << "PPL::MIP_Problem::MIP_Problem"
+16535:       << "(dim, first, last, int_vars, obj, mode):\n"
+16535:       << "dim == "<< external_space_dim << " and int_vars.space_dimension() =="
+16535:       << " " << i_variables.space_dimension() << " are dimension"
+16535:       "incompatible.";
+16535:     throw std::invalid_argument(s.str());
+16535:   }
+16535: 
+16535: 
+16535:   if (dim > max_space_dimension()) {
+16535:     throw std::length_error("PPL::MIP_Problem:: MIP_Problem(dim, first, "
+16535:                             "last, int_vars, obj, mode):\n"
+16535:                             "dim exceeds the maximum allowed"
+16535:                             "space dimension.");
+16535:   }
+16535: 
+16535:   if (obj.space_dimension() > dim) {
+16535:     std::ostringstream s;
+16535:     s << "PPL::MIP_Problem::MIP_Problem(dim, first, last,"
+16535:       << "int_vars, obj, mode):\n"
+16535:       << "obj.space_dimension() == "<< obj.space_dimension()
+16535:       << " exceeds d == "<< dim << ".";
+16535:     throw std::invalid_argument(s.str());
+16535:   }
+16535: 
+16535:   try {
+16535:     for (In i = first; i != last; ++i) {
+16535:       if (i->is_strict_inequality()) {
+16535:         throw std::invalid_argument("PPL::MIP_Problem::"
+16535:                                     "MIP_Problem(dim, first, last, int_vars,"
+16535:                                     "obj, mode):\nrange [first, last) contains"
+16535:                                     "a strict inequality constraint.");
+16535:       }
+16535:       if (i->space_dimension() > dim) {
+16535:         std::ostringstream s;
+16535:         s << "PPL::MIP_Problem::"
+16535:           << "MIP_Problem(dim, first, last, int_vars, obj, mode):\n"
+16535:           << "range [first, last) contains a constraint having space"
+16535:           << "dimension  == " << i->space_dimension() << " that exceeds"
+16535:           "this->space_dimension == " << dim << ".";
+16535:         throw std::invalid_argument(s.str());
+16535:       }
+16535:       add_constraint_helper(*i);
+16535:     }
+16535:   } catch (...) {
+16535: 
+16535: 
+16535:     for (Constraint_Sequence::const_iterator
+16535:           i = input_cs.begin(), i_end = input_cs.end();
+16535:           i != i_end; ++i) {
+16535:       delete *i;
+16535:     }
+16535: 
+16535:     throw;
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename In>
+16535: MIP_Problem::MIP_Problem(dimension_type dim,
+16535:                          In first, In last,
+16535:                          const Linear_Expression& obj,
+16535:                          Optimization_Mode mode)
+16535:   : external_space_dim(dim),
+16535:     internal_space_dim(0),
+16535:     tableau(),
+16535:     working_cost(0),
+16535:     mapping(),
+16535:     base(),
+16535:     status(PARTIALLY_SATISFIABLE),
+16535:     pricing(PRICING_STEEPEST_EDGE_FLOAT),
+16535:     initialized(false),
+16535:     input_cs(),
+16535:     inherited_constraints(0),
+16535:     first_pending_constraint(0),
+16535:     input_obj_function(obj),
+16535:     opt_mode(mode),
+16535:     last_generator(point()),
+16535:     i_variables() {
+16535: 
+16535:   if (dim > max_space_dimension()) {
+16535:     throw std::length_error("PPL::MIP_Problem::"
+16535:                             "MIP_Problem(dim, first, last, obj, mode):\n"
+16535:                             "dim exceeds the maximum allowed space "
+16535:                             "dimension.");
+16535:   }
+16535: 
+16535:   if (obj.space_dimension() > dim) {
+16535:     std::ostringstream s;
+16535:     s << "PPL::MIP_Problem::MIP_Problem(dim, first, last,"
+16535:       << " obj, mode):\n"
+16535:       << "obj.space_dimension() == "<< obj.space_dimension()
+16535:       << " exceeds d == "<< dim << ".";
+16535:     throw std::invalid_argument(s.str());
+16535:   }
+16535: 
+16535:   try {
+16535:     for (In i = first; i != last; ++i) {
+16535:       if (i->is_strict_inequality()) {
+16535:         throw std::invalid_argument("PPL::MIP_Problem::"
+16535:                                     "MIP_Problem(dim, first, last, obj, mode):"
+16535:                                     "\n"
+16535:                                     "range [first, last) contains a strict "
+16535:                                     "inequality constraint.");
+16535:       }
+16535:       if (i->space_dimension() > dim) {
+16535:         std::ostringstream s;
+16535:         s << "PPL::MIP_Problem::"
+16535:           << "MIP_Problem(dim, first, last, obj, mode):\n"
+16535:           << "range [first, last) contains a constraint having space"
+16535:           << "dimension" << " == " << i->space_dimension() << " that exceeds"
+16535:           "this->space_dimension == " << dim << ".";
+16535:         throw std::invalid_argument(s.str());
+16535:       }
+16535:       add_constraint_helper(*i);
+16535:     }
+16535:   } catch (...) {
+16535: 
+16535: 
+16535:     for (Constraint_Sequence::const_iterator
+16535:           i = input_cs.begin(), i_end = input_cs.end();
+16535:           i != i_end; ++i) {
+16535:       delete *i;
+16535:     }
+16535: 
+16535:     throw;
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: }
+16535: # 975 "../../src/MIP_Problem_defs.hh" 2
+16535: # 29 "../../src/Polyhedron_templates.hh" 2
+16535: 
+16535: 
+16535: 
+16535: # 1 "../../src/Floating_Point_Expression_defs.hh" 1
+16535: # 27 "../../src/Floating_Point_Expression_defs.hh"
+16535: # 1 "../../src/Floating_Point_Expression_types.hh" 1
+16535: # 16 "../../src/Floating_Point_Expression_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: class Floating_Point_Expression;
+16535: 
+16535: }
+16535: # 28 "../../src/Floating_Point_Expression_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/cmath" 1 3
+16535: # 39 "/usr/include/c++/8/cmath" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/cmath" 3
+16535: # 32 "../../src/Floating_Point_Expression_defs.hh" 2
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: # 54 "../../src/Floating_Point_Expression_defs.hh"
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: class Floating_Point_Expression {
+16535: 
+16535: public:
+16535: 
+16535: 
+16535:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
+16535: # 70 "../../src/Floating_Point_Expression_defs.hh"
+16535:   typedef Box<FP_Interval_Type> FP_Interval_Abstract_Store;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef std::map<dimension_type, FP_Linear_Form>
+16535:           FP_Linear_Form_Abstract_Store;
+16535: 
+16535: 
+16535:   typedef typename FP_Interval_Type::boundary_type boundary_type;
+16535: 
+16535: 
+16535:   typedef typename FP_Interval_Type::info_type info_type;
+16535: 
+16535: 
+16535:   virtual ~Floating_Point_Expression();
+16535: # 114 "../../src/Floating_Point_Expression_defs.hh"
+16535:   virtual bool linearize(const FP_Interval_Abstract_Store& int_store,
+16535:                          const FP_Linear_Form_Abstract_Store& lf_store,
+16535:                          FP_Linear_Form& result) const = 0;
+16535: # 126 "../../src/Floating_Point_Expression_defs.hh"
+16535:   static FP_Interval_Type absolute_error;
+16535: # 136 "../../src/Floating_Point_Expression_defs.hh"
+16535:   static bool overflows(const FP_Linear_Form& lf);
+16535: # 163 "../../src/Floating_Point_Expression_defs.hh"
+16535:   static void relative_error(const FP_Linear_Form& lf,
+16535:                              FP_Linear_Form& result);
+16535: # 183 "../../src/Floating_Point_Expression_defs.hh"
+16535:   static void intervalize(const FP_Linear_Form& lf,
+16535:                           const FP_Interval_Abstract_Store& store,
+16535:                           FP_Interval_Type& result);
+16535: 
+16535: private:
+16535: # 198 "../../src/Floating_Point_Expression_defs.hh"
+16535:   static FP_Interval_Type compute_absolute_error();
+16535: 
+16535: };
+16535: 
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: FP_Interval_Type Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535:   ::absolute_error = compute_absolute_error();
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Floating_Point_Expression_inlines.hh" 1
+16535: # 30 "../../src/Floating_Point_Expression_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline
+16535: Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::~Floating_Point_Expression() {}
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline bool
+16535: Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::overflows(const FP_Linear_Form& lf) {
+16535:   if (!lf.inhomogeneous_term().is_bounded()) {
+16535:     return true;
+16535:   }
+16535: 
+16535:   dimension_type dimension = lf.space_dimension();
+16535:   for (dimension_type i = 0; i < dimension; ++i) {
+16535:     if (!lf.coefficient(Variable(i)).is_bounded()) {
+16535:       return true;
+16535:     }
+16535:   }
+16535: 
+16535:   return false;
+16535: }
+16535: 
+16535: }
+16535: # 210 "../../src/Floating_Point_Expression_defs.hh" 2
+16535: # 1 "../../src/Floating_Point_Expression_templates.hh" 1
+16535: # 29 "../../src/Floating_Point_Expression_templates.hh"
+16535: # 1 "/usr/include/c++/8/cmath" 1 3
+16535: # 39 "/usr/include/c++/8/cmath" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/cmath" 3
+16535: # 30 "../../src/Floating_Point_Expression_templates.hh" 2
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template<typename FP_Interval_Type, typename FP_Format>
+16535: void
+16535: Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::relative_error(const FP_Linear_Form& lf, FP_Linear_Form& result) {
+16535: 
+16535:   FP_Interval_Type error_propagator;
+16535:   boundary_type lb = -pow(FP_Format::BASE,
+16535:   -static_cast<typename Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535:   ::boundary_type>(FP_Format::MANTISSA_BITS));
+16535:   error_propagator.build(i_constraint(GREATER_OR_EQUAL, lb),
+16535:                          i_constraint(LESS_OR_EQUAL, -lb));
+16535: 
+16535: 
+16535:   const FP_Interval_Type* current_term = &lf.inhomogeneous_term();
+16535:   
+16535: # 47 "../../src/Floating_Point_Expression_templates.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 47 "../../src/Floating_Point_Expression_templates.hh"
+16535:                                    ;
+16535: 
+16535:   FP_Interval_Type
+16535:     current_multiplier(std::max(std::abs(current_term->lower()),
+16535:                                 std::abs(current_term->upper())));
+16535:   FP_Linear_Form current_result_term(current_multiplier);
+16535:   current_result_term *= error_propagator;
+16535:   result = FP_Linear_Form(current_result_term);
+16535: 
+16535: 
+16535:   dimension_type dimension = lf.space_dimension();
+16535:   for (dimension_type i = 0; i < dimension; ++i) {
+16535:     current_term = &lf.coefficient(Variable(i));
+16535:     
+16535: # 60 "../../src/Floating_Point_Expression_templates.hh" 3 4
+16535:    (static_cast<void> (0))
+16535: # 60 "../../src/Floating_Point_Expression_templates.hh"
+16535:                                      ;
+16535:     current_multiplier
+16535:       = FP_Interval_Type(std::max(std::abs(current_term->lower()),
+16535:                                   std::abs(current_term->upper())));
+16535:     current_result_term = FP_Linear_Form(Variable(i));
+16535:     current_result_term *= current_multiplier;
+16535:     current_result_term *= error_propagator;
+16535:     result += current_result_term;
+16535:   }
+16535: 
+16535:   return;
+16535: }
+16535: 
+16535: template<typename FP_Interval_Type, typename FP_Format>
+16535: void
+16535: Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::intervalize(const FP_Linear_Form& lf,
+16535:               const FP_Interval_Abstract_Store& store,
+16535:               FP_Interval_Type& result) {
+16535:   result = FP_Interval_Type(lf.inhomogeneous_term());
+16535:   dimension_type dimension = lf.space_dimension();
+16535:   
+16535: # 81 "../../src/Floating_Point_Expression_templates.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 81 "../../src/Floating_Point_Expression_templates.hh"
+16535:                                              ;
+16535:   for (dimension_type i = 0; i < dimension; ++i) {
+16535:     FP_Interval_Type current_addend = lf.coefficient(Variable(i));
+16535:     const FP_Interval_Type& curr_int = store.get_interval(Variable(i));
+16535:     current_addend *= curr_int;
+16535:     result += current_addend;
+16535:   }
+16535: 
+16535:   return;
+16535: }
+16535: 
+16535: template<typename FP_Interval_Type, typename FP_Format>
+16535: FP_Interval_Type
+16535: Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::compute_absolute_error() {
+16535:   typedef typename Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535:     ::boundary_type Boundary;
+16535:   boundary_type omega;
+16535:   omega = std::max(pow(static_cast<Boundary>(FP_Format::BASE),
+16535:                        static_cast<Boundary>(1 - FP_Format::EXPONENT_BIAS
+16535:                                              - FP_Format::MANTISSA_BITS)),
+16535:                    std::numeric_limits<Boundary>::denorm_min());
+16535:   FP_Interval_Type result;
+16535:   result.build(i_constraint(GREATER_OR_EQUAL, -omega),
+16535:                i_constraint(LESS_OR_EQUAL, omega));
+16535:   return result;
+16535: }
+16535: 
+16535: }
+16535: # 211 "../../src/Floating_Point_Expression_defs.hh" 2
+16535: # 33 "../../src/Polyhedron_templates.hh" 2
+16535: 
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Interval>
+16535: Polyhedron::Polyhedron(Topology topol,
+16535:                        const Box<Interval>& box,
+16535:                        Complexity_Class)
+16535:   : con_sys(topol, default_con_sys_repr),
+16535:     gen_sys(topol, default_gen_sys_repr),
+16535:     sat_c(),
+16535:     sat_g() {
+16535: 
+16535:   space_dim = box.space_dimension();
+16535: 
+16535: 
+16535:   if (box.is_empty()) {
+16535:     set_empty();
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     set_zero_dim_univ();
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   con_sys.set_space_dimension(space_dim);
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_l_n; Parma_Polyhedra_Library::Coefficient& l_n = holder_l_n.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_l_d; Parma_Polyhedra_Library::Coefficient& l_d = holder_l_d.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_u_n; Parma_Polyhedra_Library::Coefficient& u_n = holder_u_n.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_u_d; Parma_Polyhedra_Library::Coefficient& u_d = holder_u_d.item();
+16535: 
+16535:   if (topol == NECESSARILY_CLOSED) {
+16535:     for (dimension_type k = space_dim; k-- > 0; ) {
+16535:       const Variable v_k = Variable(k);
+16535: 
+16535:       bool l_closed = false;
+16535:       bool l_bounded = box.has_lower_bound(v_k, l_n, l_d, l_closed);
+16535: 
+16535:       bool u_closed = false;
+16535:       bool u_bounded = box.has_upper_bound(v_k, u_n, u_d, u_closed);
+16535: 
+16535: 
+16535:       if (l_bounded && u_bounded
+16535:           && l_closed && u_closed
+16535:           && l_n == u_n && l_d == u_d) {
+16535: 
+16535:         con_sys.insert(l_d * v_k == l_n);
+16535:       }
+16535:       else {
+16535:         if (l_bounded) {
+16535: 
+16535:           con_sys.insert(l_d * v_k >= l_n);
+16535:         }
+16535:         if (u_bounded) {
+16535: 
+16535:           con_sys.insert(u_d * v_k <= u_n);
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535:   else {
+16535: 
+16535:     for (dimension_type k = space_dim; k-- > 0; ) {
+16535:       const Variable v_k = Variable(k);
+16535: 
+16535:       bool l_closed = false;
+16535:       bool l_bounded = box.has_lower_bound(v_k, l_n, l_d, l_closed);
+16535: 
+16535:       bool u_closed = false;
+16535:       bool u_bounded = box.has_upper_bound(v_k, u_n, u_d, u_closed);
+16535: 
+16535: 
+16535:       if (l_bounded && u_bounded
+16535:           && l_closed && u_closed
+16535:           && l_n == u_n && l_d == u_d) {
+16535: 
+16535:         con_sys.insert(l_d * v_k == l_n);
+16535:       }
+16535:       else {
+16535: 
+16535:         if (l_bounded) {
+16535:           if (l_closed) {
+16535: 
+16535:             con_sys.insert(l_d * v_k >= l_n);
+16535:           }
+16535:           else {
+16535: 
+16535:             con_sys.insert(l_d * v_k > l_n);
+16535:           }
+16535:         }
+16535: 
+16535:         if (u_bounded) {
+16535:           if (u_closed) {
+16535: 
+16535:             con_sys.insert(u_d * v_k <= u_n);
+16535:           }
+16535:           else {
+16535: 
+16535:             con_sys.insert(u_d * v_k < u_n);
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   con_sys.add_low_level_constraints();
+16535: 
+16535: 
+16535:   set_constraints_up_to_date();
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Partial_Function>
+16535: void
+16535: Polyhedron::map_space_dimensions(const Partial_Function& pfunc) {
+16535:   if (space_dim == 0) {
+16535:     return;
+16535:   }
+16535:   if (pfunc.has_empty_codomain()) {
+16535: 
+16535:     if (marked_empty()
+16535:         || (has_pending_constraints()
+16535:             && !remove_pending_to_obtain_generators())
+16535:         || (!generators_are_up_to_date() && !update_generators())) {
+16535: 
+16535:       space_dim = 0;
+16535:       con_sys.clear();
+16535:     }
+16535:     else {
+16535: 
+16535:       set_zero_dim_univ();
+16535:     }
+16535: 
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535:   const dimension_type new_space_dimension = pfunc.max_in_codomain() + 1;
+16535: 
+16535:   if (new_space_dimension == space_dim) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     std::vector<Variable> cycle;
+16535:     cycle.reserve(space_dim);
+16535: 
+16535: 
+16535:     std::deque<bool> visited(space_dim);
+16535: 
+16535:     for (dimension_type i = space_dim; i-- > 0; ) {
+16535:       if (visited[i]) {
+16535:         continue;
+16535:       }
+16535: 
+16535:       dimension_type j = i;
+16535:       do {
+16535:         visited[j] = true;
+16535: 
+16535:         dimension_type k = 0;
+16535:         if (!pfunc.maps(j, k)) {
+16535:           throw_invalid_argument("map_space_dimensions(pfunc)",
+16535:                                  " pfunc is inconsistent");
+16535:         }
+16535:         if (k == j) {
+16535:           break;
+16535:         }
+16535: 
+16535:         cycle.push_back(Variable(j));
+16535: 
+16535:         j = k;
+16535:       } while (!visited[j]);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       if (constraints_are_up_to_date()) {
+16535:         con_sys.permute_space_dimensions(cycle);
+16535:       }
+16535: 
+16535:       if (generators_are_up_to_date()) {
+16535:         gen_sys.permute_space_dimensions(cycle);
+16535:       }
+16535: 
+16535:       cycle.clear();
+16535:     }
+16535: 
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const Generator_System& old_gensys = generators();
+16535: 
+16535:   if (old_gensys.has_no_rows()) {
+16535: 
+16535:     Polyhedron new_polyhedron(topology(), new_space_dimension, EMPTY);
+16535:     m_swap(new_polyhedron);
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   std::vector<dimension_type> pfunc_maps(space_dim, not_a_dimension());
+16535:   for (dimension_type j = space_dim; j-- > 0; ) {
+16535:     dimension_type pfunc_j;
+16535:     if (pfunc.maps(j, pfunc_j)) {
+16535:       pfunc_maps[j] = pfunc_j;
+16535:     }
+16535:   }
+16535: 
+16535:   Generator_System new_gensys;
+16535:   for (Generator_System::const_iterator i = old_gensys.begin(),
+16535:          old_gensys_end = old_gensys.end(); i != old_gensys_end; ++i) {
+16535:     const Generator& old_g = *i;
+16535:     const Generator::expr_type old_e = old_g.expression();
+16535:     Linear_Expression expr;
+16535:     expr.set_space_dimension(new_space_dimension);
+16535:     bool all_zeroes = true;
+16535:     for (Generator::expr_type::const_iterator j = old_e.begin(),
+16535:           j_end = old_e.end(); j != j_end; ++j) {
+16535:       const dimension_type mapped_id = pfunc_maps[j.variable().id()];
+16535:       if (mapped_id != not_a_dimension()) {
+16535:         add_mul_assign(expr, *j, Variable(mapped_id));
+16535:         all_zeroes = false;
+16535:       }
+16535:     }
+16535:     switch (old_g.type()) {
+16535:     case Generator::LINE:
+16535:       if (!all_zeroes) {
+16535:         new_gensys.insert(line(expr));
+16535:       }
+16535:       break;
+16535:     case Generator::RAY:
+16535:       if (!all_zeroes) {
+16535:         new_gensys.insert(ray(expr));
+16535:       }
+16535:       break;
+16535:     case Generator::POINT:
+16535: 
+16535:       new_gensys.insert(point(expr, old_g.divisor()));
+16535:       break;
+16535:     case Generator::CLOSURE_POINT:
+16535: 
+16535:       new_gensys.insert(closure_point(expr, old_g.divisor()));
+16535:       break;
+16535:     }
+16535:   }
+16535:   Polyhedron new_polyhedron(topology(), new_gensys);
+16535:   m_swap(new_polyhedron);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename FP_Format, typename Interval_Info>
+16535: void
+16535: Polyhedron::refine_with_linear_form_inequality(
+16535:   const Linear_Form< Interval<FP_Format, Interval_Info> >& left,
+16535:   const Linear_Form< Interval<FP_Format, Interval_Info> >& right,
+16535:   const bool is_strict) {
+16535: 
+16535: 
+16535:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_308 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<FP_Format>::is_exact)>) }
+16535: 
+16535:                                                                  ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type left_space_dim = left.space_dimension();
+16535:   if (space_dim < left_space_dim) {
+16535:     throw_dimension_incompatible(
+16535:           "refine_with_linear_form_inequality(l1, l2, s)", "l1", left);
+16535:   }
+16535: 
+16535:   const dimension_type right_space_dim = right.space_dimension();
+16535:   if (space_dim < right_space_dim) {
+16535:     throw_dimension_incompatible(
+16535:           "refine_with_linear_form_inequality(l1, l2, s)", "l2", right);
+16535:   }
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: 
+16535:   typedef Interval<FP_Format, Interval_Info> FP_Interval_Type;
+16535:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
+16535: 
+16535:   if (Floating_Point_Expression<FP_Interval_Type, float_ieee754_single>::
+16535:       overflows(left)) {
+16535:     return;
+16535:   }
+16535: 
+16535:   if (Floating_Point_Expression<FP_Interval_Type, float_ieee754_single>::
+16535:       overflows(right)) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   FP_Linear_Form left_minus_right(left);
+16535:   left_minus_right -= right;
+16535:   if (Floating_Point_Expression<FP_Interval_Type, float_ieee754_single>::
+16535:       overflows(left_minus_right)) {
+16535:     return;
+16535:   }
+16535: 
+16535:   dimension_type lf_space_dim = left_minus_right.space_dimension();
+16535:   FP_Linear_Form lf_approx;
+16535:   overapproximate_linear_form(left_minus_right, lf_space_dim, lf_approx);
+16535:   if (Floating_Point_Expression<FP_Interval_Type, float_ieee754_single>::
+16535:       overflows(lf_approx)) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   Linear_Expression lf_approx_le;
+16535:   convert_to_integer_expression(lf_approx, lf_space_dim, lf_approx_le);
+16535: 
+16535: 
+16535:   if (!is_strict || is_necessarily_closed()) {
+16535:     refine_with_constraint(lf_approx_le <= 0);
+16535:   }
+16535:   else {
+16535:     refine_with_constraint(lf_approx_le < 0);
+16535:   }
+16535: }
+16535: 
+16535: template <typename FP_Format, typename Interval_Info>
+16535: void
+16535: Polyhedron::affine_form_image(const Variable var,
+16535: const Linear_Form<Interval <FP_Format, Interval_Info> >& lf) {
+16535: 
+16535: 
+16535:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_378 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<FP_Format>::is_exact)>) }
+16535: 
+16535:                                                                  ;
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type lf_space_dim = lf.space_dimension();
+16535:   if (space_dim < lf_space_dim) {
+16535:     throw_dimension_incompatible("affine_form_image(v, l, s)", "l", lf);
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type var_id = var.id();
+16535:   if (space_dim < var_id + 1) {
+16535:     throw_dimension_incompatible("affine_form_image(v, l, s)", "v", var);
+16535:   }
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: 
+16535:   typedef Interval<FP_Format, Interval_Info> FP_Interval_Type;
+16535:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
+16535: 
+16535:   if (Floating_Point_Expression<FP_Interval_Type, float_ieee754_single>::
+16535:       overflows(lf)) {
+16535:     *this = Polyhedron(topology(), space_dim, UNIVERSE);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   FP_Linear_Form lf_approx;
+16535:   overapproximate_linear_form(lf, lf_space_dim, lf_approx);
+16535: 
+16535:   if (Floating_Point_Expression<FP_Interval_Type, float_ieee754_single>::
+16535:       overflows(lf_approx)) {
+16535:     *this = Polyhedron(topology(), space_dim, UNIVERSE);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   Linear_Expression lf_approx_le;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_lo_coeff; Parma_Polyhedra_Library::Coefficient& lo_coeff = holder_lo_coeff.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_hi_coeff; Parma_Polyhedra_Library::Coefficient& hi_coeff = holder_hi_coeff.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denominator; Parma_Polyhedra_Library::Coefficient& denominator = holder_denominator.item();
+16535:   convert_to_integer_expressions(lf_approx, lf_space_dim, lf_approx_le,
+16535:                                  lo_coeff, hi_coeff, denominator);
+16535: 
+16535: 
+16535:   bounded_affine_image(var, lf_approx_le + lo_coeff, lf_approx_le + hi_coeff,
+16535:                        denominator);
+16535: }
+16535: 
+16535: template <typename FP_Format, typename Interval_Info>
+16535: void
+16535: Polyhedron
+16535: ::overapproximate_linear_form(const Linear_Form<Interval <FP_Format, Interval_Info> >& lf,
+16535:                               const dimension_type lf_dimension,
+16535:                               Linear_Form<Interval <FP_Format, Interval_Info> >& result) {
+16535: 
+16535: 
+16535:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_438 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<FP_Format>::is_exact)>) }
+16535: 
+16535:                                                                  ;
+16535: 
+16535:   typedef Interval<FP_Format, Interval_Info> FP_Interval_Type;
+16535:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
+16535: 
+16535: 
+16535: 
+16535:   Box<FP_Interval_Type> box(*this);
+16535: 
+16535:   result = FP_Linear_Form(lf.inhomogeneous_term());
+16535: 
+16535:   const FP_Interval_Type aux_divisor1(static_cast<FP_Format>(0.5));
+16535:   FP_Interval_Type aux_divisor2(aux_divisor1);
+16535:   aux_divisor2.lower() = static_cast<FP_Format>(-0.5);
+16535: 
+16535:   for (dimension_type i = 0; i < lf_dimension; ++i) {
+16535:     Variable curr_var(i);
+16535:     const FP_Interval_Type& curr_coeff = lf.coefficient(curr_var);
+16535:     ((void) 0);
+16535:     FP_Format curr_lb = curr_coeff.lower();
+16535:     FP_Format curr_ub = curr_coeff.upper();
+16535:     if (curr_lb != 0 || curr_ub != 0) {
+16535:       const FP_Interval_Type& curr_int = box.get_interval(curr_var);
+16535:       FP_Interval_Type curr_addend(curr_ub - curr_lb);
+16535:       curr_addend *= aux_divisor2;
+16535:       curr_addend *= curr_int;
+16535:       result += curr_addend;
+16535:       curr_addend = FP_Interval_Type(curr_lb + curr_ub);
+16535:       curr_addend *= aux_divisor1;
+16535:       FP_Linear_Form curr_addend_lf(curr_var);
+16535:       curr_addend_lf *= curr_addend;
+16535:       result += curr_addend_lf;
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename FP_Format, typename Interval_Info>
+16535: void
+16535: Polyhedron::convert_to_integer_expression(
+16535:                 const Linear_Form<Interval <FP_Format, Interval_Info> >& lf,
+16535:                 const dimension_type lf_dimension,
+16535:                 Linear_Expression& result) {
+16535:   result = Linear_Expression();
+16535: 
+16535:   typedef Interval<FP_Format, Interval_Info> FP_Interval_Type;
+16535:   std::vector<Coefficient> numerators(lf_dimension+1);
+16535:   std::vector<Coefficient> denominators(lf_dimension+1);
+16535: 
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_lcm; Parma_Polyhedra_Library::Coefficient& lcm = holder_lcm.item();
+16535:   lcm = 1;
+16535:   const FP_Interval_Type& b = lf.inhomogeneous_term();
+16535: 
+16535:   numer_denom(b.lower(), numerators[lf_dimension],
+16535:                          denominators[lf_dimension]);
+16535:   if (numerators[lf_dimension] != 0) {
+16535:       lcm_assign(lcm, lcm, denominators[lf_dimension]);
+16535:   }
+16535: 
+16535:   for (dimension_type i = 0; i < lf_dimension; ++i) {
+16535:     const FP_Interval_Type& curr_int = lf.coefficient(Variable(i));
+16535:     numer_denom(curr_int.lower(), numerators[i], denominators[i]);
+16535:     if (numerators[i] != 0) {
+16535:       lcm_assign(lcm, lcm, denominators[i]);
+16535:     }
+16535:   }
+16535: 
+16535:   for (dimension_type i = 0; i < lf_dimension; ++i) {
+16535:     if (numerators[i] != 0) {
+16535:       exact_div_assign(denominators[i], lcm, denominators[i]);
+16535:       numerators[i] *= denominators[i];
+16535:       result += numerators[i] * Variable(i);
+16535:     }
+16535:   }
+16535: 
+16535:   if (numerators[lf_dimension] != 0) {
+16535:     exact_div_assign(denominators[lf_dimension],
+16535:                      lcm, denominators[lf_dimension]);
+16535:     numerators[lf_dimension] *= denominators[lf_dimension];
+16535:     result += numerators[lf_dimension];
+16535:   }
+16535: }
+16535: 
+16535: template <typename FP_Format, typename Interval_Info>
+16535: void
+16535: Polyhedron::convert_to_integer_expressions(
+16535:                 const Linear_Form<Interval <FP_Format, Interval_Info> >& lf,
+16535:                 const dimension_type lf_dimension, Linear_Expression& res,
+16535:                 Coefficient& res_low_coeff, Coefficient& res_hi_coeff,
+16535:                 Coefficient& denominator) {
+16535:   res = Linear_Expression();
+16535: 
+16535:   typedef Interval<FP_Format, Interval_Info> FP_Interval_Type;
+16535:   std::vector<Coefficient> numerators(lf_dimension+2);
+16535:   std::vector<Coefficient> denominators(lf_dimension+2);
+16535: 
+16535: 
+16535: 
+16535:   Coefficient& lcm = denominator;
+16535:   lcm = 1;
+16535:   const FP_Interval_Type& b = lf.inhomogeneous_term();
+16535:   numer_denom(b.lower(), numerators[lf_dimension], denominators[lf_dimension]);
+16535: 
+16535:   if (numerators[lf_dimension] != 0) {
+16535:       lcm_assign(lcm, lcm, denominators[lf_dimension]);
+16535:   }
+16535: 
+16535:   numer_denom(b.upper(), numerators[lf_dimension+1],
+16535:                          denominators[lf_dimension+1]);
+16535:   if (numerators[lf_dimension+1] != 0) {
+16535:       lcm_assign(lcm, lcm, denominators[lf_dimension+1]);
+16535:   }
+16535: 
+16535:   for (dimension_type i = 0; i < lf_dimension; ++i) {
+16535:     const FP_Interval_Type& curr_int = lf.coefficient(Variable(i));
+16535:     numer_denom(curr_int.lower(), numerators[i], denominators[i]);
+16535:     if (numerators[i] != 0) {
+16535:       lcm_assign(lcm, lcm, denominators[i]);
+16535:     }
+16535:   }
+16535: 
+16535:   for (dimension_type i = 0; i < lf_dimension; ++i) {
+16535:     if (numerators[i] != 0) {
+16535:       exact_div_assign(denominators[i], lcm, denominators[i]);
+16535:       numerators[i] *= denominators[i];
+16535:       res += numerators[i] * Variable(i);
+16535:     }
+16535:   }
+16535: 
+16535:   if (numerators[lf_dimension] != 0) {
+16535:     exact_div_assign(denominators[lf_dimension],
+16535:                      lcm, denominators[lf_dimension]);
+16535:     numerators[lf_dimension] *= denominators[lf_dimension];
+16535:     res_low_coeff = numerators[lf_dimension];
+16535:   }
+16535:   else {
+16535:     res_low_coeff = 0;
+16535:   }
+16535: 
+16535:   if (numerators[lf_dimension+1] != 0) {
+16535:     exact_div_assign(denominators[lf_dimension+1],
+16535:                      lcm, denominators[lf_dimension+1]);
+16535:     numerators[lf_dimension+1] *= denominators[lf_dimension+1];
+16535:     res_hi_coeff = numerators[lf_dimension+1];
+16535:   }
+16535:   else {
+16535:     res_hi_coeff = 0;
+16535:   }
+16535: }
+16535: 
+16535: template <typename C>
+16535: void
+16535: Polyhedron::throw_dimension_incompatible(const char* method,
+16535:                                          const char* lf_name,
+16535:                                          const Linear_Form<C>& lf) const {
+16535:   throw_dimension_incompatible(method, lf_name, lf.space_dimension());
+16535: }
+16535: 
+16535: template <typename Input>
+16535: Input&
+16535: Polyhedron::check_obj_space_dimension_overflow(Input& input,
+16535:                                                const Topology topol,
+16535:                                                const char* method,
+16535:                                                const char* reason) {
+16535:   check_space_dimension_overflow(input.space_dimension(),
+16535:                                  max_space_dimension(),
+16535:                                  topol, method, reason);
+16535:   return input;
+16535: }
+16535: 
+16535: }
+16535: # 2858 "../../src/Polyhedron_defs.hh" 2
+16535: # 1 "../../src/Polyhedron_chdims_templates.hh" 1
+16535: # 28 "../../src/Polyhedron_chdims_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Linear_System1, typename Linear_System2>
+16535: void
+16535: Polyhedron::add_space_dimensions(Linear_System1& sys1,
+16535:                                  Linear_System2& sys2,
+16535:                                  Bit_Matrix& sat1,
+16535:                                  Bit_Matrix& sat2,
+16535:                                  dimension_type add_dim) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535:   sys1.set_space_dimension(sys1.space_dimension() + add_dim);
+16535:   sys2.add_universe_rows_and_space_dimensions(add_dim);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   sat1.resize(sat1.num_rows() + add_dim, sat1.num_columns());
+16535: 
+16535:   for (dimension_type i = sat1.num_rows() - add_dim; i-- > 0; ) {
+16535:     swap(sat1[i], sat1[i+add_dim]);
+16535:   }
+16535: 
+16535:   sat2.transpose_assign(sat1);
+16535: }
+16535: 
+16535: }
+16535: # 2859 "../../src/Polyhedron_defs.hh" 2
+16535: # 1 "../../src/Polyhedron_conversion_templates.hh" 1
+16535: # 29 "../../src/Polyhedron_conversion_templates.hh"
+16535: # 1 "../../src/Polyhedron_defs.hh" 1
+16535: # 30 "../../src/Polyhedron_conversion_templates.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/climits" 1 3
+16535: # 39 "/usr/include/c++/8/climits" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/climits" 3
+16535: 
+16535: 
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 1 3 4
+16535: # 43 "/usr/include/c++/8/climits" 2 3
+16535: # 37 "../../src/Polyhedron_conversion_templates.hh" 2
+16535: # 52 "../../src/Polyhedron_conversion_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: # 367 "../../src/Polyhedron_conversion_templates.hh"
+16535: template <typename Source_Linear_System, typename Dest_Linear_System>
+16535: dimension_type
+16535: Polyhedron::conversion(Source_Linear_System& source,
+16535:                        const dimension_type start,
+16535:                        Dest_Linear_System& dest,
+16535:                        Bit_Matrix& sat,
+16535:                        dimension_type num_lines_or_equalities) {
+16535:   typedef typename Dest_Linear_System::row_type dest_row_type;
+16535:   typedef typename Source_Linear_System::row_type source_row_type;
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   const dimension_type source_space_dim = source.space_dimension();
+16535:   const dimension_type source_num_rows = source.num_rows();
+16535:   const dimension_type source_num_columns = source_space_dim
+16535:     + (source.is_necessarily_closed() ? 1U : 2U);
+16535: 
+16535: 
+16535:   dimension_type dest_num_rows = dest.num_rows();
+16535: 
+16535: 
+16535:   std::vector<dest_row_type> recyclable_dest_rows;
+16535: 
+16535:   using std::swap;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_normalized_sp_i; Parma_Polyhedra_Library::Coefficient& normalized_sp_i = holder_normalized_sp_i.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_normalized_sp_o; Parma_Polyhedra_Library::Coefficient& normalized_sp_o = holder_normalized_sp_o.item();
+16535: 
+16535:   bool dest_sorted = dest.is_sorted();
+16535:   const dimension_type dest_first_pending_row = dest.first_pending_row();
+16535: 
+16535: 
+16535:   std::vector<dimension_type> redundant_source_rows;
+16535: 
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<std::vector<dimension_type> > holder_sat_num_ones; std::vector<dimension_type>& sat_num_ones = holder_sat_num_ones.item();
+16535:   sat_num_ones.resize(dest_num_rows, 0);
+16535:   for (dimension_type i = dest_num_rows; i-- > 0; ) {
+16535:     sat_num_ones[i] = sat[i].count_ones();
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   for (dimension_type k = start; k < source_num_rows; ++k) {
+16535:     const source_row_type& source_k = source[k];
+16535: # 437 "../../src/Polyhedron_conversion_templates.hh"
+16535:     Parma_Polyhedra_Library::Dirty_Temp<std::vector<Coefficient> > holder_scalar_prod; std::vector<Coefficient>& scalar_prod = holder_scalar_prod.item();
+16535:     if (dest_num_rows > scalar_prod.size()) {
+16535:       scalar_prod.insert(scalar_prod.end(),
+16535:                          dest_num_rows - scalar_prod.size(),
+16535:                          Coefficient_zero());
+16535:     }
+16535: 
+16535: 
+16535:     dimension_type index_non_zero = 0;
+16535:     for ( ; index_non_zero < dest_num_rows; ++index_non_zero) {
+16535:       do { } while (false);
+16535:       Scalar_Products::assign(scalar_prod[index_non_zero],
+16535:                               source_k,
+16535:                               dest.sys.rows[index_non_zero]);
+16535:       do { Weightwatch_Traits::weight += (17)*(source_space_dim); } while (false);
+16535:       if (scalar_prod[index_non_zero] != 0) {
+16535: 
+16535:         break;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       maybe_abandon();
+16535:     }
+16535:     for (dimension_type i = index_non_zero + 1; i < dest_num_rows; ++i) {
+16535:       do { } while (false);
+16535:       Scalar_Products::assign(scalar_prod[i], source_k, dest.sys.rows[i]);
+16535:       do { Weightwatch_Traits::weight += (25)*(source_space_dim); } while (false);
+16535: 
+16535: 
+16535: 
+16535:       maybe_abandon();
+16535:     }
+16535: # 478 "../../src/Polyhedron_conversion_templates.hh"
+16535:     if (index_non_zero < num_lines_or_equalities) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       dest.sys.rows[index_non_zero].set_is_ray_or_point_or_inequality();
+16535: 
+16535: 
+16535: 
+16535:       if (scalar_prod[index_non_zero] < 0) {
+16535: 
+16535: 
+16535:         neg_assign(scalar_prod[index_non_zero]);
+16535:         neg_assign(dest.sys.rows[index_non_zero].expr);
+16535: 
+16535: 
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       dest_sorted = false;
+16535:       --num_lines_or_equalities;
+16535:       if (index_non_zero != num_lines_or_equalities) {
+16535:         swap(dest.sys.rows[index_non_zero],
+16535:              dest.sys.rows[num_lines_or_equalities]);
+16535:         swap(scalar_prod[index_non_zero],
+16535:              scalar_prod[num_lines_or_equalities]);
+16535:       }
+16535:       const dest_row_type& dest_nle = dest.sys.rows[num_lines_or_equalities];
+16535: # 523 "../../src/Polyhedron_conversion_templates.hh"
+16535:       Coefficient& scalar_prod_nle = scalar_prod[num_lines_or_equalities];
+16535:       ((void) 0);
+16535:       for (dimension_type
+16535:              i = index_non_zero; i < num_lines_or_equalities; ++i) {
+16535:         if (scalar_prod[i] != 0) {
+16535: # 540 "../../src/Polyhedron_conversion_templates.hh"
+16535:           normalize2(scalar_prod[i],
+16535:                      scalar_prod_nle,
+16535:                      normalized_sp_i,
+16535:                      normalized_sp_o);
+16535:           dest_row_type& dest_i = dest.sys.rows[i];
+16535:           neg_assign(normalized_sp_i);
+16535:           dest_i.expr.linear_combine(dest_nle.expr,
+16535:                                      normalized_sp_o, normalized_sp_i);
+16535:           dest_i.strong_normalize();
+16535: 
+16535: 
+16535:           scalar_prod[i] = 0;
+16535: 
+16535:         }
+16535:       }
+16535: # 563 "../../src/Polyhedron_conversion_templates.hh"
+16535:       for (dimension_type
+16535:              i = num_lines_or_equalities + 1; i < dest_num_rows; ++i) {
+16535:         if (scalar_prod[i] != 0) {
+16535: # 578 "../../src/Polyhedron_conversion_templates.hh"
+16535:           normalize2(scalar_prod[i],
+16535:                      scalar_prod_nle,
+16535:                      normalized_sp_i,
+16535:                      normalized_sp_o);
+16535:           dest_row_type& dest_i = dest.sys.rows[i];
+16535:           do { } while (false);
+16535:           neg_assign(normalized_sp_i);
+16535:           dest_i.expr.linear_combine(dest_nle.expr,
+16535:                                      normalized_sp_o, normalized_sp_i);
+16535:           dest_i.strong_normalize();
+16535: 
+16535: 
+16535:           scalar_prod[i] = 0;
+16535: 
+16535:           do { Weightwatch_Traits::weight += (41)*(source_space_dim); } while (false);
+16535:         }
+16535: 
+16535: 
+16535: 
+16535:         maybe_abandon();
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       Bit_Row& sat_nle = sat[num_lines_or_equalities];
+16535:       if (source_k.is_ray_or_point_or_inequality()) {
+16535:         sat_nle.set(k - redundant_source_rows.size());
+16535: 
+16535:         ++sat_num_ones[num_lines_or_equalities];
+16535: 
+16535:       }
+16535:       else {
+16535: 
+16535: 
+16535: 
+16535:         --dest_num_rows;
+16535:         swap(dest.sys.rows[num_lines_or_equalities],
+16535:              dest.sys.rows[dest_num_rows]);
+16535:         recyclable_dest_rows.resize(recyclable_dest_rows.size() + 1);
+16535:         swap(dest.sys.rows.back(), recyclable_dest_rows.back());
+16535:         dest.sys.rows.pop_back();
+16535:         ((void) 0);
+16535: 
+16535:         swap(scalar_prod_nle, scalar_prod[dest_num_rows]);
+16535:         swap(sat_nle, sat[dest_num_rows]);
+16535: 
+16535:         swap(sat_num_ones[num_lines_or_equalities],
+16535:              sat_num_ones[dest_num_rows]);
+16535: 
+16535: 
+16535:       }
+16535: 
+16535: 
+16535:       continue;
+16535:     }
+16535: 
+16535: 
+16535:     ((void) 0);
+16535: # 649 "../../src/Polyhedron_conversion_templates.hh"
+16535:     dimension_type lines_or_equal_bound = num_lines_or_equalities;
+16535:     dimension_type inf_bound = dest_num_rows;
+16535: 
+16535: 
+16535:     while (inf_bound > lines_or_equal_bound
+16535:            && scalar_prod[lines_or_equal_bound] == 0) {
+16535:       ++lines_or_equal_bound;
+16535:     }
+16535:     dimension_type sup_bound = lines_or_equal_bound;
+16535:     while (inf_bound > sup_bound) {
+16535:       const int sp_sign = sgn(scalar_prod[sup_bound]);
+16535:       if (sp_sign == 0) {
+16535: 
+16535:         swap(dest.sys.rows[sup_bound], dest.sys.rows[lines_or_equal_bound]);
+16535:         swap(scalar_prod[sup_bound], scalar_prod[lines_or_equal_bound]);
+16535:         swap(sat[sup_bound], sat[lines_or_equal_bound]);
+16535: 
+16535:         swap(sat_num_ones[sup_bound], sat_num_ones[lines_or_equal_bound]);
+16535: 
+16535:         ++lines_or_equal_bound;
+16535:         ++sup_bound;
+16535:         dest_sorted = false;
+16535:       }
+16535:       else if (sp_sign < 0) {
+16535: 
+16535:         --inf_bound;
+16535:         swap(dest.sys.rows[sup_bound], dest.sys.rows[inf_bound]);
+16535:         swap(sat[sup_bound], sat[inf_bound]);
+16535:         swap(scalar_prod[sup_bound], scalar_prod[inf_bound]);
+16535: 
+16535:         swap(sat_num_ones[sup_bound], sat_num_ones[inf_bound]);
+16535: 
+16535:         dest_sorted = false;
+16535:       }
+16535:       else {
+16535: 
+16535:         ++sup_bound;
+16535:       }
+16535:     }
+16535: 
+16535:     if (sup_bound == dest_num_rows) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       if (source_k.is_ray_or_point_or_inequality()) {
+16535:         redundant_source_rows.push_back(k);
+16535:       }
+16535:       else {
+16535: 
+16535: 
+16535: 
+16535:         ((void) 0);
+16535:         while (dest_num_rows != lines_or_equal_bound) {
+16535:           recyclable_dest_rows.resize(recyclable_dest_rows.size() + 1);
+16535:           swap(dest.sys.rows.back(), recyclable_dest_rows.back());
+16535:           dest.sys.rows.pop_back();
+16535:           --dest_num_rows;
+16535:           }
+16535:         ((void) 0);
+16535:       }
+16535: 
+16535: 
+16535:       continue;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:     if (sup_bound == num_lines_or_equalities) {
+16535: 
+16535: 
+16535: 
+16535:       ((void) 0);
+16535:       while (dest_num_rows != sup_bound) {
+16535:         recyclable_dest_rows.resize(recyclable_dest_rows.size() + 1);
+16535:         swap(dest.sys.rows.back(), recyclable_dest_rows.back());
+16535:         dest.sys.rows.pop_back();
+16535:         --dest_num_rows;
+16535:       }
+16535:       ((void) 0);
+16535: 
+16535: 
+16535:       continue;
+16535:     }
+16535: # 744 "../../src/Polyhedron_conversion_templates.hh"
+16535:     const dimension_type bound = dest_num_rows;
+16535: # 755 "../../src/Polyhedron_conversion_templates.hh"
+16535:     const dimension_type min_saturators
+16535:       = source_num_columns - num_lines_or_equalities - 2;
+16535: 
+16535:     const dimension_type max_saturators = k - redundant_source_rows.size();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     for (dimension_type i = lines_or_equal_bound; i < sup_bound; ++i) {
+16535:       for (dimension_type j = sup_bound; j < bound; ++j) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:         ((void) 0)
+16535:                                         ;
+16535:         ((void) 0)
+16535:                                         ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:         Bit_Row new_satrow(sat[i], sat[j]);
+16535: # 790 "../../src/Polyhedron_conversion_templates.hh"
+16535:         dimension_type new_satrow_ones = new_satrow.count_ones();
+16535: 
+16535: 
+16535: 
+16535:         const dimension_type num_common_satur
+16535:           = max_saturators - new_satrow_ones;
+16535:         if (num_common_satur < min_saturators) {
+16535: 
+16535:           continue;
+16535:         }
+16535: # 808 "../../src/Polyhedron_conversion_templates.hh"
+16535:         const dimension_type max_ones_i_j
+16535:           = std::max(sat_num_ones[i], sat_num_ones[j]);
+16535:         if (max_ones_i_j + 1 == new_satrow_ones) {
+16535: 
+16535:           goto are_adjacent;
+16535:         }
+16535: 
+16535: 
+16535: 
+16535:         {
+16535:           bool redundant = false;
+16535:           do { } while (false);
+16535:           for (dimension_type l = num_lines_or_equalities; l < bound; ++l) {
+16535:             if (l != i && l != j
+16535:                 && subset_or_equal(sat[l], new_satrow)) {
+16535: 
+16535: 
+16535:               redundant = true;
+16535:               break;
+16535:             }
+16535:           }
+16535:           ((void) 0);
+16535:           do { Weightwatch_Traits::weight += (15)*(bound - num_lines_or_equalities); } while (false);
+16535:           if (redundant) {
+16535: 
+16535:             continue;
+16535:           }
+16535:         }
+16535: 
+16535: 
+16535:       are_adjacent:
+16535: 
+16535: 
+16535: 
+16535:         dest_row_type new_row;
+16535:         if (recyclable_dest_rows.empty()) {
+16535:           sat.add_recycled_row(new_satrow);
+16535: 
+16535:           sat_num_ones.push_back(new_satrow_ones);
+16535: 
+16535:         }
+16535:         else {
+16535:           swap(new_row, recyclable_dest_rows.back());
+16535:           recyclable_dest_rows.pop_back();
+16535:           new_row.set_space_dimension_no_ok(source_space_dim);
+16535:           swap(sat[dest_num_rows], new_satrow);
+16535: 
+16535:           swap(sat_num_ones[dest_num_rows], new_satrow_ones);
+16535: 
+16535:         }
+16535: # 871 "../../src/Polyhedron_conversion_templates.hh"
+16535:         normalize2(scalar_prod[i],
+16535:                    scalar_prod[j],
+16535:                    normalized_sp_i,
+16535:                    normalized_sp_o);
+16535:         do { } while (false);
+16535: 
+16535:         neg_assign(normalized_sp_o);
+16535:         new_row = dest.sys.rows[j];
+16535: 
+16535:         ((void) 0);
+16535:         ((void) 0);
+16535:         new_row.expr.linear_combine(dest.sys.rows[i].expr,
+16535:                                     normalized_sp_i, normalized_sp_o);
+16535: 
+16535:         do { Weightwatch_Traits::weight += (86)*(source_space_dim); } while (false);
+16535:         new_row.strong_normalize();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:         ((void) 0);
+16535:         if (scalar_prod.size() <= dest_num_rows) {
+16535:           scalar_prod.push_back(Coefficient_zero());
+16535:         }
+16535:         else {
+16535:           scalar_prod[dest_num_rows] = Coefficient_zero();
+16535:         }
+16535:         dest.sys.rows.resize(dest.sys.rows.size() + 1);
+16535:         swap(dest.sys.rows.back(), new_row);
+16535: 
+16535:         ++dest_num_rows;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       maybe_abandon();
+16535:     }
+16535: 
+16535: 
+16535:     dimension_type j;
+16535:     if (source_k.is_ray_or_point_or_inequality()) {
+16535: 
+16535: 
+16535:       j = sup_bound;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const dimension_type new_k = k - redundant_source_rows.size();
+16535:       for (dimension_type l = lines_or_equal_bound;
+16535:            l < sup_bound; ++l) {
+16535:         sat[l].set(new_k);
+16535: 
+16535:         ++sat_num_ones[l];
+16535: 
+16535:       }
+16535:     }
+16535:     else {
+16535: 
+16535: 
+16535:       j = lines_or_equal_bound;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     dimension_type i = dest_num_rows;
+16535:     while (j < bound && i > bound) {
+16535:       --i;
+16535:       swap(dest.sys.rows[i], dest.sys.rows[j]);
+16535:       swap(scalar_prod[i], scalar_prod[j]);
+16535:       swap(sat[i], sat[j]);
+16535: 
+16535:       swap(sat_num_ones[i], sat_num_ones[j]);
+16535: 
+16535:       ++j;
+16535:       dest_sorted = false;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     const dimension_type new_num_rows = (j == bound) ? i : j;
+16535:     ((void) 0);
+16535:     while (dest_num_rows != new_num_rows) {
+16535:       recyclable_dest_rows.resize(recyclable_dest_rows.size() + 1);
+16535:       swap(dest.sys.rows.back(), recyclable_dest_rows.back());
+16535:       dest.sys.rows.pop_back();
+16535:       --dest_num_rows;
+16535:     }
+16535:     ((void) 0);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (redundant_source_rows.size() > 0) {
+16535:     source.remove_rows(redundant_source_rows);
+16535:     sat.remove_trailing_columns(redundant_source_rows.size());
+16535:   }
+16535: # 985 "../../src/Polyhedron_conversion_templates.hh"
+16535:   if (start > 0 && start < source.num_rows()) {
+16535:     source.set_sorted(compare(source[start - 1], source[start]) <= 0);
+16535:   }
+16535: 
+16535:   source.unset_pending_rows();
+16535: 
+16535: 
+16535: 
+16535:   if (!recyclable_dest_rows.empty()) {
+16535:     const dimension_type num_removed_rows = recyclable_dest_rows.size();
+16535:     sat.remove_trailing_rows(num_removed_rows);
+16535:   }
+16535:   if (dest_sorted) {
+16535: 
+16535: 
+16535: 
+16535:     for (dimension_type i = dest_first_pending_row;
+16535:          i < dest_num_rows; ++i) {
+16535:       if (compare(dest.sys.rows[i - 1], dest.sys.rows[i]) > 0) {
+16535:         dest_sorted = false;
+16535:         break;
+16535:       }
+16535:     }
+16535:   }
+16535: # 1017 "../../src/Polyhedron_conversion_templates.hh"
+16535:   dest.sys.index_first_pending = dest.num_rows();
+16535:   dest.set_sorted(dest_sorted);
+16535:   ((void) 0);
+16535: 
+16535:   return num_lines_or_equalities;
+16535: }
+16535: 
+16535: }
+16535: # 2860 "../../src/Polyhedron_defs.hh" 2
+16535: # 1 "../../src/Polyhedron_minimize_templates.hh" 1
+16535: # 31 "../../src/Polyhedron_minimize_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: # 69 "../../src/Polyhedron_minimize_templates.hh"
+16535: template <typename Source_Linear_System, typename Dest_Linear_System>
+16535: bool
+16535: Polyhedron::minimize(const bool con_to_gen,
+16535:                      Source_Linear_System& source,
+16535:                      Dest_Linear_System& dest,
+16535:                      Bit_Matrix& sat) {
+16535: 
+16535:   typedef typename Dest_Linear_System::row_type dest_row_type;
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535:   if (!source.is_sorted()) {
+16535:     source.sort_rows();
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type dest_num_rows
+16535:     = source.topology() == NECESSARILY_CLOSED ? source.space_dimension() + 1
+16535:                                               : source.space_dimension() + 2;
+16535: 
+16535:   dest.clear();
+16535:   dest.set_space_dimension(source.space_dimension());
+16535: 
+16535: 
+16535:   for (dimension_type i = 0; i < dest_num_rows; ++i) {
+16535:     Linear_Expression expr;
+16535:     expr.set_space_dimension(dest_num_rows - 1);
+16535:     if (i == 0) {
+16535:       expr += 1;
+16535:     }
+16535:     else {
+16535:       expr += Variable(i - 1);
+16535:     }
+16535:     dest_row_type dest_i(expr, dest_row_type::LINE_OR_EQUALITY, NECESSARILY_CLOSED);
+16535:     if (dest.topology() == NOT_NECESSARILY_CLOSED) {
+16535:       dest_i.mark_as_not_necessarily_closed();
+16535:     }
+16535:     dest.sys.insert_no_ok(dest_i, Recycle_Input());
+16535:   }
+16535: 
+16535: 
+16535:   dest.set_sorted(false);
+16535: # 141 "../../src/Polyhedron_minimize_templates.hh"
+16535:   Bit_Matrix tmp_sat(dest_num_rows, source.num_rows());
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type num_lines_or_equalities
+16535:     = conversion(source, 0U, dest, tmp_sat, dest_num_rows);
+16535: 
+16535:   dest_num_rows = dest.num_rows();
+16535: # 166 "../../src/Polyhedron_minimize_templates.hh"
+16535:   dimension_type first_point;
+16535:   if (dest.is_necessarily_closed()) {
+16535:     for (first_point = num_lines_or_equalities;
+16535:         first_point < dest_num_rows;
+16535:         ++first_point) {
+16535:       if (dest[first_point].expr.inhomogeneous_term() > 0) {
+16535:         break;
+16535:       }
+16535:     }
+16535:   }
+16535:   else {
+16535:     for (first_point = num_lines_or_equalities;
+16535:         first_point < dest_num_rows;
+16535:         ++first_point) {
+16535:       if (dest[first_point].expr.get(Variable(dest.space_dimension())) > 0) {
+16535:         break;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   if (first_point == dest_num_rows) {
+16535:     if (con_to_gen) {
+16535: 
+16535:       return true;
+16535:     }
+16535:     else {
+16535: # 200 "../../src/Polyhedron_minimize_templates.hh"
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       return false;
+16535:     }
+16535:   }
+16535:   else {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     sat.transpose_assign(tmp_sat);
+16535:     simplify(source, sat);
+16535:     return false;
+16535:   }
+16535: }
+16535: # 264 "../../src/Polyhedron_minimize_templates.hh"
+16535: template <typename Source_Linear_System1, typename Source_Linear_System2,
+16535:           typename Dest_Linear_System>
+16535: bool
+16535: Polyhedron::add_and_minimize(const bool con_to_gen,
+16535:                              Source_Linear_System1& source1,
+16535:                              Dest_Linear_System& dest,
+16535:                              Bit_Matrix& sat,
+16535:                              const Source_Linear_System2& source2) {
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535:   const dimension_type old_source1_num_rows = source1.num_rows();
+16535: 
+16535:   dimension_type k1 = 0;
+16535:   dimension_type k2 = 0;
+16535:   dimension_type source2_num_rows = source2.num_rows();
+16535:   while (k1 < old_source1_num_rows && k2 < source2_num_rows) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     const int cmp = compare(source1[k1], source2[k2]);
+16535:     if (cmp == 0) {
+16535: 
+16535:       ++k2;
+16535: 
+16535: 
+16535:       ++k1;
+16535:     }
+16535:     else if (cmp < 0) {
+16535: 
+16535:       ++k1;
+16535:     }
+16535:     else {
+16535: 
+16535: 
+16535: 
+16535:       source1.add_pending_row(source2[k2]);
+16535: 
+16535:       ++k2;
+16535:     }
+16535:   }
+16535: 
+16535:   if (k2 < source2_num_rows) {
+16535: 
+16535: 
+16535: 
+16535:     for ( ; k2 < source2_num_rows; ++k2) {
+16535:       source1.add_pending_row(source2[k2]);
+16535:     }
+16535:   }
+16535: 
+16535:   if (source1.num_pending_rows() == 0) {
+16535: 
+16535: 
+16535: 
+16535:     return false;
+16535:   }
+16535:   return add_and_minimize(con_to_gen, source1, dest, sat);
+16535: }
+16535: # 370 "../../src/Polyhedron_minimize_templates.hh"
+16535: template <typename Source_Linear_System, typename Dest_Linear_System>
+16535: bool
+16535: Polyhedron::add_and_minimize(const bool con_to_gen,
+16535:                              Source_Linear_System& source,
+16535:                              Dest_Linear_System& dest,
+16535:                              Bit_Matrix& sat) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:   sat.resize(dest.num_rows(), source.num_rows());
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type num_lines_or_equalities
+16535:     = conversion(source, source.first_pending_row(),
+16535:                  dest, sat,
+16535:                  dest.num_lines_or_equalities());
+16535: 
+16535: 
+16535:   const dimension_type dest_num_rows = dest.num_rows();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type first_point;
+16535:   if (dest.is_necessarily_closed()) {
+16535:     for (first_point = num_lines_or_equalities;
+16535:         first_point < dest_num_rows;
+16535:         ++first_point) {
+16535:       if (dest[first_point].expr.inhomogeneous_term() > 0) {
+16535:         break;
+16535:       }
+16535:     }
+16535:   }
+16535:   else {
+16535:     for (first_point = num_lines_or_equalities;
+16535:         first_point < dest_num_rows;
+16535:         ++first_point) {
+16535:       if (dest[first_point].expr.get(Variable(dest.space_dimension())) > 0) {
+16535:         break;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   if (first_point == dest_num_rows) {
+16535:     if (con_to_gen) {
+16535: 
+16535:       return true;
+16535:     }
+16535:     else {
+16535: # 434 "../../src/Polyhedron_minimize_templates.hh"
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       return false;
+16535:     }
+16535:   }
+16535:   else {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     sat.transpose();
+16535:     simplify(source, sat);
+16535: 
+16535:     sat.transpose();
+16535:     return false;
+16535:   }
+16535: }
+16535: 
+16535: }
+16535: # 2861 "../../src/Polyhedron_defs.hh" 2
+16535: # 1 "../../src/Polyhedron_simplify_templates.hh" 1
+16535: # 32 "../../src/Polyhedron_simplify_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: # 82 "../../src/Polyhedron_simplify_templates.hh"
+16535: template <typename Linear_System1>
+16535: dimension_type
+16535: Polyhedron::simplify(Linear_System1& sys, Bit_Matrix& sat) {
+16535:   dimension_type num_rows = sys.num_rows();
+16535:   const dimension_type num_cols_sat = sat.num_columns();
+16535: 
+16535:   using std::swap;
+16535: 
+16535: 
+16535:   dimension_type num_lines_or_equalities = 0;
+16535:   while (num_lines_or_equalities < num_rows
+16535:          && sys[num_lines_or_equalities].is_line_or_equality()) {
+16535:     ++num_lines_or_equalities;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (num_rows > simplify_num_saturators_size) {
+16535:     delete [] simplify_num_saturators_p;
+16535:     simplify_num_saturators_p = 0;
+16535:     simplify_num_saturators_size = 0;
+16535:     const size_t max_size
+16535:       = std::numeric_limits<size_t>::max() / sizeof(dimension_type);
+16535:     const size_t new_size = compute_capacity(num_rows, max_size);
+16535:     simplify_num_saturators_p = new dimension_type[new_size];
+16535:     simplify_num_saturators_size = new_size;
+16535:   }
+16535:   dimension_type* const num_saturators = simplify_num_saturators_p;
+16535: 
+16535:   bool sys_sorted = sys.is_sorted();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   for (dimension_type i = num_lines_or_equalities; i < num_rows; ++i) {
+16535:     if (sat[i].empty()) {
+16535: 
+16535: 
+16535: 
+16535:       sys.sys.rows[i].set_is_line_or_equality();
+16535: 
+16535:       sys.sys.rows[i].sign_normalize();
+16535: 
+16535: 
+16535:       if (i != num_lines_or_equalities) {
+16535:         sys.sys.rows[i].m_swap(sys.sys.rows[num_lines_or_equalities]);
+16535:         swap(sat[i], sat[num_lines_or_equalities]);
+16535:         swap(num_saturators[i], num_saturators[num_lines_or_equalities]);
+16535:       }
+16535:       ++num_lines_or_equalities;
+16535: 
+16535:       sys_sorted = false;
+16535:     }
+16535:     else {
+16535: 
+16535: 
+16535: 
+16535:       num_saturators[i] = num_cols_sat - sat[i].count_ones();
+16535:     }
+16535:   }
+16535: 
+16535:   sys.set_sorted(sys_sorted);
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type rank = sys.gauss(num_lines_or_equalities);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (rank < num_lines_or_equalities) {
+16535: # 169 "../../src/Polyhedron_simplify_templates.hh"
+16535:     for (dimension_type redundant = rank,
+16535:            erasing = num_rows;
+16535:          redundant < num_lines_or_equalities
+16535:            && erasing > num_lines_or_equalities;
+16535:          ) {
+16535:       --erasing;
+16535:       sys.remove_row(redundant);
+16535:       swap(sat[redundant], sat[erasing]);
+16535:       swap(num_saturators[redundant], num_saturators[erasing]);
+16535:       ++redundant;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     num_rows -= num_lines_or_equalities - rank;
+16535: 
+16535: 
+16535: 
+16535:     sys.remove_trailing_rows(sys.num_rows() - num_rows);
+16535: 
+16535:     ((void) 0);
+16535: 
+16535:     sat.remove_trailing_rows(num_lines_or_equalities - rank);
+16535: 
+16535: 
+16535:     num_lines_or_equalities = rank;
+16535:   }
+16535: 
+16535:   const dimension_type old_num_rows = sys.num_rows();
+16535: # 230 "../../src/Polyhedron_simplify_templates.hh"
+16535:   const dimension_type sys_num_columns
+16535:     = sys.topology() == NECESSARILY_CLOSED ? sys.space_dimension() + 1
+16535:                                            : sys.space_dimension() + 2;
+16535:   const dimension_type min_saturators
+16535:     = sys_num_columns - num_lines_or_equalities - 1;
+16535:   for (dimension_type i = num_lines_or_equalities; i < num_rows; ) {
+16535:     if (num_saturators[i] < min_saturators) {
+16535: 
+16535:       --num_rows;
+16535:       sys.remove_row(i);
+16535:       swap(sat[i], sat[num_rows]);
+16535:       swap(num_saturators[i], num_saturators[num_rows]);
+16535:     }
+16535:     else {
+16535:       ++i;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   for (dimension_type i = num_lines_or_equalities; i < num_rows; ) {
+16535:     bool redundant = false;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     for (dimension_type j = num_lines_or_equalities; j < num_rows; ) {
+16535:       if (i == j) {
+16535: 
+16535:         ++j;
+16535:       }
+16535:       else {
+16535: # 271 "../../src/Polyhedron_simplify_templates.hh"
+16535:         bool strict_subset;
+16535:         if (subset_or_equal(sat[j], sat[i], strict_subset)) {
+16535:           if (strict_subset) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:             redundant = true;
+16535:             break;
+16535:           }
+16535:           else {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:             --num_rows;
+16535:             sys.remove_row(j);
+16535:             ((void) 0);
+16535:             swap(sat[j], sat[num_rows]);
+16535:             swap(num_saturators[j], num_saturators[num_rows]);
+16535:           }
+16535:         }
+16535:         else {
+16535: 
+16535: 
+16535: 
+16535:           ++j;
+16535:         }
+16535:       }
+16535:     }
+16535:     if (redundant) {
+16535: 
+16535:       --num_rows;
+16535:       sys.remove_row(i);
+16535:       ((void) 0);
+16535:       swap(sat[i], sat[num_rows]);
+16535:       swap(num_saturators[i], num_saturators[num_rows]);
+16535:     }
+16535:     else {
+16535: 
+16535:       ++i;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   sat.remove_trailing_rows(old_num_rows - num_rows);
+16535: # 335 "../../src/Polyhedron_simplify_templates.hh"
+16535:   sys.back_substitute(num_lines_or_equalities);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   return num_lines_or_equalities;
+16535: }
+16535: 
+16535: }
+16535: # 2862 "../../src/Polyhedron_defs.hh" 2
+16535: # 35 "../../src/Box_templates.hh" 2
+16535: # 1 "../../src/Grid_defs.hh" 1
+16535: # 37 "../../src/Grid_defs.hh"
+16535: # 1 "../../src/Grid_Generator_System_defs.hh" 1
+16535: # 36 "../../src/Grid_Generator_System_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: std::ostream& operator<<(std::ostream& s, const Grid_Generator_System& gs);
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: void swap(Grid_Generator_System& x, Grid_Generator_System& y);
+16535: 
+16535: 
+16535: 
+16535: bool operator==(const Grid_Generator_System& x,
+16535:                 const Grid_Generator_System& y);
+16535: 
+16535: }
+16535: # 175 "../../src/Grid_Generator_System_defs.hh"
+16535: class Parma_Polyhedra_Library::Grid_Generator_System {
+16535: public:
+16535:   typedef Grid_Generator row_type;
+16535: 
+16535:   static const Representation default_representation = SPARSE;
+16535: 
+16535: 
+16535:   explicit Grid_Generator_System(Representation r = default_representation);
+16535: 
+16535: 
+16535:   explicit Grid_Generator_System(const Grid_Generator& g,
+16535:                                  Representation r = default_representation);
+16535: 
+16535: 
+16535:   explicit Grid_Generator_System(dimension_type dim,
+16535:                                  Representation r = default_representation);
+16535: 
+16535: 
+16535: 
+16535:   Grid_Generator_System(const Grid_Generator_System& gs);
+16535: 
+16535: 
+16535:   Grid_Generator_System(const Grid_Generator_System& gs, Representation r);
+16535: 
+16535: 
+16535:   ~Grid_Generator_System();
+16535: 
+16535: 
+16535:   Grid_Generator_System& operator=(const Grid_Generator_System& y);
+16535: 
+16535: 
+16535:   Representation representation() const;
+16535: 
+16535: 
+16535:   void set_representation(Representation r);
+16535: 
+16535: 
+16535:   static dimension_type max_space_dimension();
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void clear();
+16535: # 231 "../../src/Grid_Generator_System_defs.hh"
+16535:   void insert(const Grid_Generator& g);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void insert(Grid_Generator& g, Recycle_Input);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void insert(Grid_Generator_System& gs, Recycle_Input);
+16535: 
+16535: 
+16535:   static void initialize();
+16535: 
+16535: 
+16535:   static void finalize();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Grid_Generator_System& zero_dim_univ();
+16535: # 278 "../../src/Grid_Generator_System_defs.hh"
+16535:   class const_iterator
+16535:     : public std::iterator<std::forward_iterator_tag,
+16535:                            Grid_Generator,
+16535:                            std::ptrdiff_t,
+16535:                            const Grid_Generator*,
+16535:                            const Grid_Generator&> {
+16535:   public:
+16535: 
+16535:     const_iterator();
+16535: 
+16535: 
+16535:     const_iterator(const const_iterator& y);
+16535: 
+16535: 
+16535:     ~const_iterator();
+16535: 
+16535: 
+16535:     const_iterator& operator=(const const_iterator& y);
+16535: 
+16535: 
+16535:     const Grid_Generator& operator*() const;
+16535: 
+16535: 
+16535:     const Grid_Generator* operator->() const;
+16535: 
+16535: 
+16535:     const_iterator& operator++();
+16535: 
+16535: 
+16535:     const_iterator operator++(int);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     bool operator==(const const_iterator& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     bool operator!=(const const_iterator& y) const;
+16535: 
+16535:   private:
+16535:     friend class Grid_Generator_System;
+16535: 
+16535:     Linear_System<Grid_Generator>::const_iterator i;
+16535: 
+16535: 
+16535:     const_iterator(const Linear_System<Grid_Generator>::const_iterator& y);
+16535:   };
+16535: 
+16535: 
+16535:   bool empty() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const_iterator begin() const;
+16535: 
+16535: 
+16535:   const_iterator end() const;
+16535: 
+16535: 
+16535:   dimension_type num_rows() const;
+16535: 
+16535: 
+16535:   dimension_type num_parameters() const;
+16535: 
+16535: 
+16535:   dimension_type num_lines() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool has_points() const;
+16535: 
+16535: 
+16535:   bool is_equal_to(const Grid_Generator_System& y) const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: # 375 "../../src/Grid_Generator_System_defs.hh"
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   void m_swap(Grid_Generator_System& y);
+16535: 
+16535: private:
+16535: 
+16535:   const Grid_Generator& operator[](dimension_type k) const;
+16535: # 419 "../../src/Grid_Generator_System_defs.hh"
+16535:   void affine_image(Variable v,
+16535:                     const Linear_Expression& expr,
+16535:                     Coefficient_traits::const_reference denominator);
+16535: 
+16535: 
+16535:   void set_sorted(bool b);
+16535: # 441 "../../src/Grid_Generator_System_defs.hh"
+16535:   void add_universe_rows_and_columns(dimension_type dims);
+16535: 
+16535: 
+16535:   void set_space_dimension(dimension_type space_dim);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void remove_space_dimensions(const Variables_Set& vars);
+16535: 
+16535: 
+16535: 
+16535:   void shift_space_dimensions(Variable v, dimension_type n);
+16535: 
+16535: 
+16535:   void unset_pending_rows();
+16535: # 473 "../../src/Grid_Generator_System_defs.hh"
+16535:   void permute_space_dimensions(const std::vector<Variable>& cycle);
+16535: 
+16535:   bool has_no_rows() const;
+16535: 
+16535: 
+16535:   void remove_trailing_rows(dimension_type n);
+16535: 
+16535:   void insert_verbatim(const Grid_Generator& g);
+16535: 
+16535: 
+16535:   Topology topology() const;
+16535: 
+16535: 
+16535:   dimension_type first_pending_row() const;
+16535: 
+16535:   Linear_System<Grid_Generator> sys;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static const Grid_Generator_System* zero_dim_univ_p;
+16535: 
+16535:   friend bool
+16535:   operator==(const Grid_Generator_System& x, const Grid_Generator_System& y);
+16535: 
+16535: 
+16535:   void set_index_first_pending_row(dimension_type i);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void remove_invalid_lines_and_parameters();
+16535: 
+16535:   friend class Polyhedron;
+16535:   friend class Grid;
+16535: };
+16535: # 38 "../../src/Grid_defs.hh" 2
+16535: # 1 "../../src/Grid_Generator_System_inlines.hh" 1
+16535: # 29 "../../src/Grid_Generator_System_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline void
+16535: Grid_Generator_System::set_sorted(bool b) {
+16535:   sys.set_sorted(b);
+16535: }
+16535: 
+16535: inline void
+16535: Grid_Generator_System::unset_pending_rows() {
+16535:   sys.unset_pending_rows();
+16535: }
+16535: 
+16535: inline void
+16535: Grid_Generator_System::set_index_first_pending_row(const dimension_type i) {
+16535:   sys.set_index_first_pending_row(i);
+16535: }
+16535: 
+16535: inline void
+16535: Grid_Generator_System
+16535: ::permute_space_dimensions(const std::vector<Variable>& cycle) {
+16535:   return sys.permute_space_dimensions(cycle);
+16535: }
+16535: 
+16535: inline bool
+16535: Grid_Generator_System::is_equal_to(const Grid_Generator_System& y) const {
+16535:   return (sys == y.sys);
+16535: }
+16535: 
+16535: inline
+16535: Grid_Generator_System::Grid_Generator_System(Representation r)
+16535:   : sys(NECESSARILY_CLOSED, r) {
+16535:   sys.set_sorted(false);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Grid_Generator_System::Grid_Generator_System(const Grid_Generator_System& gs)
+16535:   : sys(gs.sys) {
+16535: }
+16535: 
+16535: inline
+16535: Grid_Generator_System::Grid_Generator_System(const Grid_Generator_System& gs,
+16535:                                              Representation r)
+16535:   : sys(gs.sys, r) {
+16535: }
+16535: 
+16535: inline
+16535: Grid_Generator_System::Grid_Generator_System(dimension_type dim,
+16535:                                              Representation r)
+16535:   : sys(NECESSARILY_CLOSED, r) {
+16535:   sys.set_space_dimension(dim);
+16535:   sys.set_sorted(false);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Grid_Generator_System::Grid_Generator_System(const Grid_Generator& g,
+16535:                                              Representation r)
+16535:   : sys(NECESSARILY_CLOSED, r) {
+16535:   sys.insert(g);
+16535:   sys.set_sorted(false);
+16535: }
+16535: 
+16535: inline
+16535: Grid_Generator_System::~Grid_Generator_System() {
+16535: }
+16535: 
+16535: inline Grid_Generator_System&
+16535: Grid_Generator_System::operator=(const Grid_Generator_System& y) {
+16535:   Grid_Generator_System tmp = y;
+16535:   swap(*this, tmp);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline Representation
+16535: Grid_Generator_System::representation() const {
+16535:   return sys.representation();
+16535: }
+16535: 
+16535: inline void
+16535: Grid_Generator_System::set_representation(Representation r) {
+16535:   sys.set_representation(r);
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Grid_Generator_System::max_space_dimension() {
+16535: 
+16535:   return Linear_System<Grid_Generator>::max_space_dimension() - 1;
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Grid_Generator_System::space_dimension() const {
+16535:   return sys.space_dimension();
+16535: }
+16535: 
+16535: inline const Grid_Generator_System&
+16535: Grid_Generator_System::zero_dim_univ() {
+16535:   ((void) 0);
+16535:   return *zero_dim_univ_p;
+16535: }
+16535: 
+16535: inline void
+16535: Grid_Generator_System::clear() {
+16535:   sys.clear();
+16535:   sys.set_sorted(false);
+16535:   sys.unset_pending_rows();
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline void
+16535: Grid_Generator_System::m_swap(Grid_Generator_System& y) {
+16535:   swap(sys, y.sys);
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Grid_Generator_System::external_memory_in_bytes() const {
+16535:   return sys.external_memory_in_bytes();
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Grid_Generator_System::total_memory_in_bytes() const {
+16535:   return external_memory_in_bytes() + sizeof(*this);
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Grid_Generator_System::num_rows() const {
+16535:   return sys.num_rows();
+16535: }
+16535: 
+16535: inline
+16535: Grid_Generator_System::const_iterator::const_iterator()
+16535:   : i() {
+16535: }
+16535: 
+16535: inline
+16535: Grid_Generator_System::const_iterator::const_iterator(const const_iterator& y)
+16535:   : i(y.i) {
+16535: }
+16535: 
+16535: inline
+16535: Grid_Generator_System::const_iterator::~const_iterator() {
+16535: }
+16535: 
+16535: inline Grid_Generator_System::const_iterator&
+16535: Grid_Generator_System::const_iterator::operator=(const const_iterator& y) {
+16535:   i = y.i;
+16535:   return *this;
+16535: }
+16535: 
+16535: inline const Grid_Generator&
+16535: Grid_Generator_System::const_iterator::operator*() const {
+16535:   return *i;
+16535: }
+16535: 
+16535: inline const Grid_Generator*
+16535: Grid_Generator_System::const_iterator::operator->() const {
+16535:   return i.operator->();
+16535: }
+16535: 
+16535: inline Grid_Generator_System::const_iterator&
+16535: Grid_Generator_System::const_iterator::operator++() {
+16535:   ++i;
+16535:   return *this;
+16535: }
+16535: 
+16535: inline Grid_Generator_System::const_iterator
+16535: Grid_Generator_System::const_iterator::operator++(int) {
+16535:   const const_iterator tmp = *this;
+16535:   operator++();
+16535:   return tmp;
+16535: }
+16535: 
+16535: inline bool
+16535: Grid_Generator_System
+16535: ::const_iterator::operator==(const const_iterator& y) const {
+16535:   return i == y.i;
+16535: }
+16535: 
+16535: inline bool
+16535: Grid_Generator_System
+16535: ::const_iterator::operator!=(const const_iterator& y) const {
+16535:   return i != y.i;
+16535: }
+16535: 
+16535: inline bool
+16535: Grid_Generator_System::empty() const {
+16535:   return sys.has_no_rows();
+16535: }
+16535: 
+16535: inline
+16535: Grid_Generator_System::const_iterator
+16535: ::const_iterator(const Linear_System<Grid_Generator>::const_iterator& y)
+16535:   : i(y) {
+16535: }
+16535: 
+16535: inline Grid_Generator_System::const_iterator
+16535: Grid_Generator_System::begin() const {
+16535:   return static_cast<Grid_Generator_System::const_iterator>(sys.begin());
+16535: }
+16535: 
+16535: inline Grid_Generator_System::const_iterator
+16535: Grid_Generator_System::end() const {
+16535:   return static_cast<Grid_Generator_System::const_iterator>(sys.end());
+16535: }
+16535: 
+16535: inline const Grid_Generator&
+16535: Grid_Generator_System::operator[](const dimension_type k) const {
+16535:   return sys[k];
+16535: }
+16535: 
+16535: inline bool
+16535: Grid_Generator_System::has_no_rows() const {
+16535:   return sys.has_no_rows();
+16535: }
+16535: 
+16535: inline void
+16535: Grid_Generator_System::remove_trailing_rows(dimension_type n) {
+16535:   sys.remove_trailing_rows(n);
+16535: }
+16535: 
+16535: inline void
+16535: Grid_Generator_System::insert_verbatim(const Grid_Generator& g) {
+16535:   sys.insert(g);
+16535: }
+16535: 
+16535: inline Topology
+16535: Grid_Generator_System::topology() const {
+16535:   return sys.topology();
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Grid_Generator_System::first_pending_row() const {
+16535:   return sys.first_pending_row();
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: operator==(const Grid_Generator_System& x,
+16535:            const Grid_Generator_System& y) {
+16535:   return x.is_equal_to(y);
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: swap(Grid_Generator_System& x, Grid_Generator_System& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 39 "../../src/Grid_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: # 1 "../../src/Grid_Certificate_types.hh" 1
+16535: # 16 "../../src/Grid_Certificate_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Grid_Certificate;
+16535: 
+16535: }
+16535: # 43 "../../src/Grid_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace IO_Operators {
+16535: # 63 "../../src/Grid_defs.hh"
+16535: std::ostream&
+16535: operator<<(std::ostream& s, const Grid& gr);
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: void swap(Grid& x, Grid& y);
+16535: # 80 "../../src/Grid_defs.hh"
+16535: bool operator==(const Grid& x, const Grid& y);
+16535: # 90 "../../src/Grid_defs.hh"
+16535: bool operator!=(const Grid& x, const Grid& y);
+16535: 
+16535: }
+16535: # 363 "../../src/Grid_defs.hh"
+16535: class Parma_Polyhedra_Library::Grid {
+16535: public:
+16535: 
+16535:   typedef Coefficient coefficient_type;
+16535: 
+16535: 
+16535:   static dimension_type max_space_dimension();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static bool can_recycle_congruence_systems();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static bool can_recycle_constraint_systems();
+16535: # 395 "../../src/Grid_defs.hh"
+16535:   explicit Grid(dimension_type num_dimensions = 0,
+16535:                 Degenerate_Element kind = UNIVERSE);
+16535: # 409 "../../src/Grid_defs.hh"
+16535:   explicit Grid(const Congruence_System& cgs);
+16535: # 427 "../../src/Grid_defs.hh"
+16535:   Grid(Congruence_System& cgs, Recycle_Input dummy);
+16535: # 443 "../../src/Grid_defs.hh"
+16535:   explicit Grid(const Constraint_System& cs);
+16535: # 464 "../../src/Grid_defs.hh"
+16535:   Grid(Constraint_System& cs, Recycle_Input dummy);
+16535: # 480 "../../src/Grid_defs.hh"
+16535:   explicit Grid(const Grid_Generator_System& ggs);
+16535: # 500 "../../src/Grid_defs.hh"
+16535:   Grid(Grid_Generator_System& ggs, Recycle_Input dummy);
+16535: # 518 "../../src/Grid_defs.hh"
+16535:   template <typename Interval>
+16535:   explicit Grid(const Box<Interval>& box,
+16535:                 Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 538 "../../src/Grid_defs.hh"
+16535:   template <typename U>
+16535:   explicit Grid(const BD_Shape<U>& bd,
+16535:                 Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 558 "../../src/Grid_defs.hh"
+16535:   template <typename U>
+16535:   explicit Grid(const Octagonal_Shape<U>& os,
+16535:                 Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 580 "../../src/Grid_defs.hh"
+16535:   explicit Grid(const Polyhedron& ph,
+16535:                 Complexity_Class complexity = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Grid(const Grid& y,
+16535:        Complexity_Class complexity = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Grid& operator=(const Grid& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type affine_dimension() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Constraint_System constraints() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Constraint_System minimized_constraints() const;
+16535: 
+16535: 
+16535:   const Congruence_System& congruences() const;
+16535: 
+16535: 
+16535:   const Congruence_System& minimized_congruences() const;
+16535: 
+16535: 
+16535:   const Grid_Generator_System& grid_generators() const;
+16535: 
+16535: 
+16535:   const Grid_Generator_System& minimized_grid_generators() const;
+16535: # 640 "../../src/Grid_defs.hh"
+16535:   Poly_Con_Relation relation_with(const Congruence& cg) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Poly_Gen_Relation
+16535:   relation_with(const Grid_Generator& g) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Poly_Gen_Relation
+16535:   relation_with(const Generator& g) const;
+16535: # 668 "../../src/Grid_defs.hh"
+16535:   Poly_Con_Relation relation_with(const Constraint& c) const;
+16535: 
+16535: 
+16535:   bool is_empty() const;
+16535: 
+16535: 
+16535:   bool is_universe() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_topologically_closed() const;
+16535: # 691 "../../src/Grid_defs.hh"
+16535:   bool is_disjoint_from(const Grid& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_discrete() const;
+16535: 
+16535: 
+16535:   bool is_bounded() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool contains_integer_point() const;
+16535: # 717 "../../src/Grid_defs.hh"
+16535:   bool constrains(Variable var) const;
+16535: # 726 "../../src/Grid_defs.hh"
+16535:   bool bounds_from_above(const Linear_Expression& expr) const;
+16535: # 735 "../../src/Grid_defs.hh"
+16535:   bool bounds_from_below(const Linear_Expression& expr) const;
+16535: # 764 "../../src/Grid_defs.hh"
+16535:   bool maximize(const Linear_Expression& expr,
+16535:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum) const;
+16535: # 798 "../../src/Grid_defs.hh"
+16535:   bool maximize(const Linear_Expression& expr,
+16535:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum,
+16535:                 Generator& point) const;
+16535: # 829 "../../src/Grid_defs.hh"
+16535:   bool minimize(const Linear_Expression& expr,
+16535:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum) const;
+16535: # 863 "../../src/Grid_defs.hh"
+16535:   bool minimize(const Linear_Expression& expr,
+16535:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum,
+16535:                 Generator& point) const;
+16535: # 897 "../../src/Grid_defs.hh"
+16535:   bool frequency(const Linear_Expression& expr,
+16535:                  Coefficient& freq_n, Coefficient& freq_d,
+16535:                  Coefficient& val_n, Coefficient& val_d) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool contains(const Grid& y) const;
+16535: # 915 "../../src/Grid_defs.hh"
+16535:   bool strictly_contains(const Grid& y) const;
+16535: # 934 "../../src/Grid_defs.hh"
+16535:   bool OK(bool check_not_empty = false) const;
+16535: # 947 "../../src/Grid_defs.hh"
+16535:   void add_congruence(const Congruence& cg);
+16535: # 957 "../../src/Grid_defs.hh"
+16535:   void add_grid_generator(const Grid_Generator& g);
+16535: # 968 "../../src/Grid_defs.hh"
+16535:   void add_congruences(const Congruence_System& cgs);
+16535: # 983 "../../src/Grid_defs.hh"
+16535:   void add_recycled_congruences(Congruence_System& cgs);
+16535: # 995 "../../src/Grid_defs.hh"
+16535:   void add_constraint(const Constraint& c);
+16535: # 1008 "../../src/Grid_defs.hh"
+16535:   void add_constraints(const Constraint_System& cs);
+16535: # 1025 "../../src/Grid_defs.hh"
+16535:   void add_recycled_constraints(Constraint_System& cs);
+16535: # 1035 "../../src/Grid_defs.hh"
+16535:   void refine_with_congruence(const Congruence& cg);
+16535: # 1045 "../../src/Grid_defs.hh"
+16535:   void refine_with_congruences(const Congruence_System& cgs);
+16535: # 1056 "../../src/Grid_defs.hh"
+16535:   void refine_with_constraint(const Constraint& c);
+16535: # 1066 "../../src/Grid_defs.hh"
+16535:   void refine_with_constraints(const Constraint_System& cs);
+16535: # 1081 "../../src/Grid_defs.hh"
+16535:   void add_grid_generators(const Grid_Generator_System& gs);
+16535: # 1098 "../../src/Grid_defs.hh"
+16535:   void add_recycled_grid_generators(Grid_Generator_System& gs);
+16535: # 1110 "../../src/Grid_defs.hh"
+16535:   void unconstrain(Variable var);
+16535: # 1124 "../../src/Grid_defs.hh"
+16535:   void unconstrain(const Variables_Set& vars);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void intersection_assign(const Grid& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void upper_bound_assign(const Grid& y);
+16535: # 1150 "../../src/Grid_defs.hh"
+16535:   bool upper_bound_assign_if_exact(const Grid& y);
+16535: # 1162 "../../src/Grid_defs.hh"
+16535:   void difference_assign(const Grid& y);
+16535: # 1173 "../../src/Grid_defs.hh"
+16535:   bool simplify_using_context_assign(const Grid& y);
+16535: # 1236 "../../src/Grid_defs.hh"
+16535:   void affine_image(Variable var,
+16535:                     const Linear_Expression& expr,
+16535:                     Coefficient_traits::const_reference denominator
+16535:                     = Coefficient_one());
+16535: # 1300 "../../src/Grid_defs.hh"
+16535:   void affine_preimage(Variable var,
+16535:                        const Linear_Expression& expr,
+16535:                        Coefficient_traits::const_reference denominator
+16535:                          = Coefficient_one());
+16535: # 1335 "../../src/Grid_defs.hh"
+16535:   void
+16535:   generalized_affine_image(Variable var,
+16535:                            Relation_Symbol relsym,
+16535:                            const Linear_Expression& expr,
+16535:                            Coefficient_traits::const_reference denominator
+16535:                            = Coefficient_one(),
+16535:                            Coefficient_traits::const_reference modulus
+16535:                            = Coefficient_zero());
+16535: # 1374 "../../src/Grid_defs.hh"
+16535:   void
+16535:   generalized_affine_preimage(Variable var,
+16535:                               Relation_Symbol relsym,
+16535:                               const Linear_Expression& expr,
+16535:                               Coefficient_traits::const_reference denominator
+16535:                               = Coefficient_one(),
+16535:                               Coefficient_traits::const_reference modulus
+16535:                               = Coefficient_zero());
+16535: # 1407 "../../src/Grid_defs.hh"
+16535:   void
+16535:   generalized_affine_image(const Linear_Expression& lhs,
+16535:                            Relation_Symbol relsym,
+16535:                            const Linear_Expression& rhs,
+16535:                            Coefficient_traits::const_reference modulus
+16535:                            = Coefficient_zero());
+16535: # 1438 "../../src/Grid_defs.hh"
+16535:   void
+16535:   generalized_affine_preimage(const Linear_Expression& lhs,
+16535:                               Relation_Symbol relsym,
+16535:                               const Linear_Expression& rhs,
+16535:                               Coefficient_traits::const_reference modulus
+16535:                               = Coefficient_zero());
+16535: # 1471 "../../src/Grid_defs.hh"
+16535:   void bounded_affine_image(Variable var,
+16535:                             const Linear_Expression& lb_expr,
+16535:                             const Linear_Expression& ub_expr,
+16535:                             Coefficient_traits::const_reference denominator
+16535:                             = Coefficient_one());
+16535: # 1503 "../../src/Grid_defs.hh"
+16535:   void bounded_affine_preimage(Variable var,
+16535:                                const Linear_Expression& lb_expr,
+16535:                                const Linear_Expression& ub_expr,
+16535:                                Coefficient_traits::const_reference denominator
+16535:                                = Coefficient_one());
+16535: # 1516 "../../src/Grid_defs.hh"
+16535:   void time_elapse_assign(const Grid& y);
+16535: # 1563 "../../src/Grid_defs.hh"
+16535:   void wrap_assign(const Variables_Set& vars,
+16535:                    Bounded_Integer_Type_Width w,
+16535:                    Bounded_Integer_Type_Representation r,
+16535:                    Bounded_Integer_Type_Overflow o,
+16535:                    const Constraint_System* cs_p = 0,
+16535:                    unsigned complexity_threshold = 16,
+16535:                    bool wrap_individually = true);
+16535: # 1579 "../../src/Grid_defs.hh"
+16535:   void drop_some_non_integer_points(Complexity_Class complexity
+16535:                                     = ANY_COMPLEXITY);
+16535: # 1594 "../../src/Grid_defs.hh"
+16535:   void drop_some_non_integer_points(const Variables_Set& vars,
+16535:                                     Complexity_Class complexity
+16535:                                     = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535:   void topological_closure_assign();
+16535: # 1616 "../../src/Grid_defs.hh"
+16535:   void congruence_widening_assign(const Grid& y, unsigned* tp = 
+16535: # 1616 "../../src/Grid_defs.hh" 3 4
+16535:                                                                __null
+16535: # 1616 "../../src/Grid_defs.hh"
+16535:                                                                    );
+16535: # 1633 "../../src/Grid_defs.hh"
+16535:   void generator_widening_assign(const Grid& y, unsigned* tp = 
+16535: # 1633 "../../src/Grid_defs.hh" 3 4
+16535:                                                               __null
+16535: # 1633 "../../src/Grid_defs.hh"
+16535:                                                                   );
+16535: # 1654 "../../src/Grid_defs.hh"
+16535:   void widening_assign(const Grid& y, unsigned* tp = 
+16535: # 1654 "../../src/Grid_defs.hh" 3 4
+16535:                                                     __null
+16535: # 1654 "../../src/Grid_defs.hh"
+16535:                                                         );
+16535: # 1676 "../../src/Grid_defs.hh"
+16535:   void limited_congruence_extrapolation_assign(const Grid& y,
+16535:                                                const Congruence_System& cgs,
+16535:                                                unsigned* tp = 
+16535: # 1678 "../../src/Grid_defs.hh" 3 4
+16535:                                                              __null
+16535: # 1678 "../../src/Grid_defs.hh"
+16535:                                                                  );
+16535: # 1700 "../../src/Grid_defs.hh"
+16535:   void limited_generator_extrapolation_assign(const Grid& y,
+16535:                                               const Congruence_System& cgs,
+16535:                                               unsigned* tp = 
+16535: # 1702 "../../src/Grid_defs.hh" 3 4
+16535:                                                             __null
+16535: # 1702 "../../src/Grid_defs.hh"
+16535:                                                                 );
+16535: # 1723 "../../src/Grid_defs.hh"
+16535:   void limited_extrapolation_assign(const Grid& y,
+16535:                                     const Congruence_System& cgs,
+16535:                                     unsigned* tp = 
+16535: # 1725 "../../src/Grid_defs.hh" 3 4
+16535:                                                   __null
+16535: # 1725 "../../src/Grid_defs.hh"
+16535:                                                       );
+16535: # 1758 "../../src/Grid_defs.hh"
+16535:   void add_space_dimensions_and_embed(dimension_type m);
+16535: # 1786 "../../src/Grid_defs.hh"
+16535:   void add_space_dimensions_and_project(dimension_type m);
+16535: # 1796 "../../src/Grid_defs.hh"
+16535:   void concatenate_assign(const Grid& y);
+16535: # 1808 "../../src/Grid_defs.hh"
+16535:   void remove_space_dimensions(const Variables_Set& vars);
+16535: # 1819 "../../src/Grid_defs.hh"
+16535:   void remove_higher_space_dimensions(dimension_type new_dimension);
+16535: # 1868 "../../src/Grid_defs.hh"
+16535:   template <typename Partial_Function>
+16535:   void map_space_dimensions(const Partial_Function& pfunc);
+16535: # 1894 "../../src/Grid_defs.hh"
+16535:   void expand_space_dimension(Variable var, dimension_type m);
+16535: # 1920 "../../src/Grid_defs.hh"
+16535:   void fold_space_dimensions(const Variables_Set& vars, Variable dest);
+16535: 
+16535: 
+16535: 
+16535:   friend bool operator==(const Grid& x, const Grid& y);
+16535: 
+16535:   friend class Parma_Polyhedra_Library::Grid_Certificate;
+16535: 
+16535:   template <typename Interval> friend class Parma_Polyhedra_Library::Box;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   ~Grid();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void m_swap(Grid& y);
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   int32_t hash_code() const;
+16535: 
+16535: 
+16535: 
+16535: private:
+16535: 
+16535: 
+16535:   Congruence_System con_sys;
+16535: 
+16535: 
+16535:   Grid_Generator_System gen_sys;
+16535: 
+16535: 
+16535: # 1 "../../src/Grid_Status_idefs.hh" 1
+16535: # 71 "../../src/Grid_Status_idefs.hh"
+16535: class Status {
+16535: public:
+16535: 
+16535:   Status();
+16535: 
+16535: 
+16535: 
+16535:   bool test_zero_dim_univ() const;
+16535:   void reset_zero_dim_univ();
+16535:   void set_zero_dim_univ();
+16535: 
+16535:   bool test_empty() const;
+16535:   void reset_empty();
+16535:   void set_empty();
+16535: 
+16535:   bool test_c_up_to_date() const;
+16535:   void reset_c_up_to_date();
+16535:   void set_c_up_to_date();
+16535: 
+16535:   bool test_g_up_to_date() const;
+16535:   void reset_g_up_to_date();
+16535:   void set_g_up_to_date();
+16535: 
+16535:   bool test_c_minimized() const;
+16535:   void reset_c_minimized();
+16535:   void set_c_minimized();
+16535: 
+16535:   bool test_g_minimized() const;
+16535:   void reset_g_minimized();
+16535:   void set_g_minimized();
+16535: 
+16535:   bool test_sat_c_up_to_date() const;
+16535:   void reset_sat_c_up_to_date();
+16535:   void set_sat_c_up_to_date();
+16535: 
+16535:   bool test_sat_g_up_to_date() const;
+16535:   void reset_sat_g_up_to_date();
+16535:   void set_sat_g_up_to_date();
+16535: 
+16535:   bool test_c_pending() const;
+16535:   void reset_c_pending();
+16535:   void set_c_pending();
+16535: 
+16535:   bool test_g_pending() const;
+16535:   void reset_g_pending();
+16535:   void set_g_pending();
+16535: 
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: private:
+16535: 
+16535:   typedef unsigned int flags_t;
+16535: 
+16535: 
+16535: 
+16535:   static const flags_t ZERO_DIM_UNIV = 0U;
+16535:   static const flags_t EMPTY = 1U << 0;
+16535:   static const flags_t C_UP_TO_DATE = 1U << 1;
+16535:   static const flags_t G_UP_TO_DATE = 1U << 2;
+16535:   static const flags_t C_MINIMIZED = 1U << 3;
+16535:   static const flags_t G_MINIMIZED = 1U << 4;
+16535:   static const flags_t SAT_C_UP_TO_DATE = 1U << 5;
+16535:   static const flags_t SAT_G_UP_TO_DATE = 1U << 6;
+16535:   static const flags_t CS_PENDING = 1U << 7;
+16535:   static const flags_t GS_PENDING = 1U << 8;
+16535: 
+16535: 
+16535: 
+16535:   flags_t flags;
+16535: 
+16535: 
+16535:   Status(flags_t mask);
+16535: 
+16535: 
+16535:   bool test_all(flags_t mask) const;
+16535: 
+16535: 
+16535:   bool test_any(flags_t mask) const;
+16535: 
+16535: 
+16535:   void set(flags_t mask);
+16535: 
+16535: 
+16535:   void reset(flags_t mask);
+16535: };
+16535: # 1977 "../../src/Grid_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535:   Status status;
+16535: 
+16535: 
+16535:   dimension_type space_dim;
+16535: 
+16535:   enum Dimension_Kind {
+16535:     PARAMETER = 0,
+16535:     LINE = 1,
+16535:     GEN_VIRTUAL = 2,
+16535:     PROPER_CONGRUENCE = PARAMETER,
+16535:     CON_VIRTUAL = LINE,
+16535:     EQUALITY = GEN_VIRTUAL
+16535:   };
+16535: 
+16535:   typedef std::vector<Dimension_Kind> Dimension_Kinds;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Dimension_Kinds dim_kinds;
+16535: # 2012 "../../src/Grid_defs.hh"
+16535:   void construct(dimension_type num_dimensions, Degenerate_Element kind);
+16535: # 2022 "../../src/Grid_defs.hh"
+16535:   void construct(Congruence_System& cgs);
+16535: # 2032 "../../src/Grid_defs.hh"
+16535:   void construct(Grid_Generator_System& ggs);
+16535: # 2042 "../../src/Grid_defs.hh"
+16535:   bool marked_empty() const;
+16535: 
+16535: 
+16535:   bool congruences_are_up_to_date() const;
+16535: 
+16535: 
+16535:   bool generators_are_up_to_date() const;
+16535: 
+16535: 
+16535:   bool congruences_are_minimized() const;
+16535: 
+16535: 
+16535:   bool generators_are_minimized() const;
+16535: # 2065 "../../src/Grid_defs.hh"
+16535:   void set_zero_dim_univ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void set_empty();
+16535: 
+16535: 
+16535:   void set_congruences_up_to_date();
+16535: 
+16535: 
+16535:   void set_generators_up_to_date();
+16535: 
+16535: 
+16535:   void set_congruences_minimized();
+16535: 
+16535: 
+16535:   void set_generators_minimized();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void clear_empty();
+16535: 
+16535: 
+16535:   void clear_congruences_up_to_date();
+16535: 
+16535: 
+16535:   void clear_generators_up_to_date();
+16535: 
+16535: 
+16535:   void clear_congruences_minimized();
+16535: 
+16535: 
+16535:   void clear_generators_minimized();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void update_congruences() const;
+16535: # 2122 "../../src/Grid_defs.hh"
+16535:   bool update_generators() const;
+16535: # 2138 "../../src/Grid_defs.hh"
+16535:   bool minimize() const;
+16535: 
+16535: 
+16535: 
+16535:   enum Three_Valued_Boolean {
+16535:     TVB_TRUE,
+16535:     TVB_FALSE,
+16535:     TVB_DONT_KNOW
+16535:   };
+16535: 
+16535: 
+16535:   Three_Valued_Boolean quick_equivalence_test(const Grid& y) const;
+16535: 
+16535: 
+16535:   bool is_included_in(const Grid& y) const;
+16535: # 2172 "../../src/Grid_defs.hh"
+16535:   bool bounds(const Linear_Expression& expr, const char* method_call) const;
+16535: # 2206 "../../src/Grid_defs.hh"
+16535:   bool max_min(const Linear_Expression& expr,
+16535:                const char* method_call,
+16535:                Coefficient& ext_n, Coefficient& ext_d, bool& included,
+16535:                Generator* point = 
+16535: # 2209 "../../src/Grid_defs.hh" 3 4
+16535:                                  __null
+16535: # 2209 "../../src/Grid_defs.hh"
+16535:                                      ) const;
+16535: # 2243 "../../src/Grid_defs.hh"
+16535:   bool frequency_no_check(const Linear_Expression& expr,
+16535:                 Coefficient& freq_n, Coefficient& freq_d,
+16535:                 Coefficient& val_n, Coefficient& val_d) const;
+16535: # 2257 "../../src/Grid_defs.hh"
+16535:   bool bounds_no_check(const Linear_Expression& expr) const;
+16535: # 2267 "../../src/Grid_defs.hh"
+16535:   void add_congruence_no_check(const Congruence& cg);
+16535: # 2282 "../../src/Grid_defs.hh"
+16535:   void add_constraint_no_check(const Constraint& c);
+16535: # 2295 "../../src/Grid_defs.hh"
+16535:   void refine_no_check(const Constraint& c);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void select_wider_congruences(const Grid& y,
+16535:                                 Congruence_System& selected_cgs) const;
+16535: 
+16535: 
+16535:   void select_wider_generators(const Grid& y,
+16535:                                Grid_Generator_System& widened_ggs) const;
+16535: # 2324 "../../src/Grid_defs.hh"
+16535:   void add_space_dimensions(Congruence_System& cgs,
+16535:                             Grid_Generator_System& gs,
+16535:                             dimension_type dims);
+16535: # 2342 "../../src/Grid_defs.hh"
+16535:   void add_space_dimensions(Grid_Generator_System& gs,
+16535:                             Congruence_System& cgs,
+16535:                             dimension_type dims);
+16535: # 2367 "../../src/Grid_defs.hh"
+16535:   static void
+16535:   normalize_divisors(Grid_Generator_System& sys,
+16535:                      Coefficient& divisor,
+16535:                      const Grid_Generator* first_point = 
+16535: # 2370 "../../src/Grid_defs.hh" 3 4
+16535:                                                         __null
+16535: # 2370 "../../src/Grid_defs.hh"
+16535:                                                             );
+16535: # 2381 "../../src/Grid_defs.hh"
+16535:   static void
+16535:   normalize_divisors(Grid_Generator_System& sys);
+16535: # 2401 "../../src/Grid_defs.hh"
+16535:   static void normalize_divisors(Grid_Generator_System& sys,
+16535:                                  Grid_Generator_System& gen_sys);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static void conversion(Congruence_System& source,
+16535:                          Grid_Generator_System& dest,
+16535:                          Dimension_Kinds& dim_kinds);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static void conversion(Grid_Generator_System& source,
+16535:                          Congruence_System& dest,
+16535:                          Dimension_Kinds& dim_kinds);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static bool simplify(Congruence_System& cgs,
+16535:                        Dimension_Kinds& dim_kinds);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static void simplify(Grid_Generator_System& ggs,
+16535:                        Dimension_Kinds& dim_kinds);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static void reduce_line_with_line(Grid_Generator& row,
+16535:                                     Grid_Generator& pivot,
+16535:                                     dimension_type column);
+16535: # 2452 "../../src/Grid_defs.hh"
+16535:   static void reduce_equality_with_equality(Congruence& row,
+16535:                                             const Congruence& pivot,
+16535:                                             dimension_type column);
+16535: # 2469 "../../src/Grid_defs.hh"
+16535:   template <typename R>
+16535:   static void reduce_pc_with_pc(R& row,
+16535:                                 R& pivot,
+16535:                                 dimension_type column,
+16535:                                 dimension_type start,
+16535:                                 dimension_type end);
+16535: # 2486 "../../src/Grid_defs.hh"
+16535:   static void reduce_parameter_with_line(Grid_Generator& row,
+16535:                                          const Grid_Generator& pivot,
+16535:                                          dimension_type column,
+16535:                                          Swapping_Vector<Grid_Generator>& sys,
+16535:                                          dimension_type num_columns);
+16535: # 2501 "../../src/Grid_defs.hh"
+16535:   static void reduce_congruence_with_equality(Congruence& row,
+16535:                                               const Congruence& pivot,
+16535:                                               dimension_type column,
+16535:                                               Swapping_Vector<Congruence>& sys);
+16535: # 2539 "../../src/Grid_defs.hh"
+16535:   template <typename M>
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static void reduce_reduced(Swapping_Vector<typename M::row_type>& sys,
+16535:                              dimension_type dim,
+16535:                              dimension_type pivot_index,
+16535:                              dimension_type start, dimension_type end,
+16535:                              const Dimension_Kinds& sys_dim_kinds,
+16535:                              bool generators = true);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static void multiply_grid(const Coefficient& multiplier,
+16535:                             Congruence& cg,
+16535:                             Swapping_Vector<Congruence>& dest,
+16535:                             dimension_type num_rows);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static void multiply_grid(const Coefficient& multiplier,
+16535:                             Grid_Generator& gen,
+16535:                             Swapping_Vector<Grid_Generator>& dest,
+16535:                             dimension_type num_rows);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static bool lower_triangular(const Congruence_System& sys,
+16535:                                const Dimension_Kinds& dim_kinds);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static bool upper_triangular(const Grid_Generator_System& sys,
+16535:                                const Dimension_Kinds& dim_kinds);
+16535: # 2608 "../../src/Grid_defs.hh"
+16535: protected:
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* other_name,
+16535:                                     dimension_type other_dim) const;
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* gr_name,
+16535:                                     const Grid& gr) const;
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* le_name,
+16535:                                     const Linear_Expression& le) const;
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* cg_name,
+16535:                                     const Congruence& cg) const;
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* c_name,
+16535:                                     const Constraint& c) const;
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* g_name,
+16535:                                     const Grid_Generator& g) const;
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* g_name,
+16535:                                     const Generator& g) const;
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* cgs_name,
+16535:                                     const Congruence_System& cgs) const;
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* cs_name,
+16535:                                     const Constraint_System& cs) const;
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* gs_name,
+16535:                                     const Grid_Generator_System& gs) const;
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* var_name,
+16535:                                     Variable var) const;
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     dimension_type required_space_dim) const;
+16535: 
+16535:   static void throw_invalid_argument(const char* method,
+16535:                                      const char* reason);
+16535:   static void throw_invalid_constraint(const char* method,
+16535:                                        const char* c_name);
+16535:   static void throw_invalid_constraints(const char* method,
+16535:                                         const char* cs_name);
+16535:   static void throw_invalid_generator(const char* method,
+16535:                                       const char* g_name);
+16535:   static void throw_invalid_generators(const char* method,
+16535:                                        const char* gs_name);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: };
+16535: 
+16535: # 1 "../../src/Grid_Status_inlines.hh" 1
+16535: # 27 "../../src/Grid_Status_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline
+16535: Grid::Status::Status(flags_t mask)
+16535:   : flags(mask) {
+16535: }
+16535: 
+16535: inline
+16535: Grid::Status::Status()
+16535:   : flags(ZERO_DIM_UNIV) {
+16535: }
+16535: 
+16535: inline bool
+16535: Grid::Status::test_all(flags_t mask) const {
+16535:   return (flags & mask) == mask;
+16535: }
+16535: 
+16535: inline bool
+16535: Grid::Status::test_any(flags_t mask) const {
+16535:   return (flags & mask) != 0;
+16535: }
+16535: 
+16535: inline void
+16535: Grid::Status::set(flags_t mask) {
+16535:   flags |= mask;
+16535: }
+16535: 
+16535: inline void
+16535: Grid::Status::reset(flags_t mask) {
+16535:   flags &= ~mask;
+16535: }
+16535: 
+16535: inline bool
+16535: Grid::Status::test_zero_dim_univ() const {
+16535:   return flags == ZERO_DIM_UNIV;
+16535: }
+16535: 
+16535: inline void
+16535: Grid::Status::reset_zero_dim_univ() {
+16535: 
+16535:   if (flags == ZERO_DIM_UNIV) {
+16535: 
+16535:     flags = EMPTY;
+16535:   }
+16535: }
+16535: 
+16535: inline void
+16535: Grid::Status::set_zero_dim_univ() {
+16535: 
+16535:   flags = ZERO_DIM_UNIV;
+16535: }
+16535: 
+16535: inline bool
+16535: Grid::Status::test_empty() const {
+16535:   return test_any(EMPTY);
+16535: }
+16535: 
+16535: inline void
+16535: Grid::Status::reset_empty() {
+16535:   reset(EMPTY);
+16535: }
+16535: 
+16535: inline void
+16535: Grid::Status::set_empty() {
+16535:   flags = EMPTY;
+16535: }
+16535: 
+16535: inline bool
+16535: Grid::Status::test_c_up_to_date() const {
+16535:   return test_any(C_UP_TO_DATE);
+16535: }
+16535: 
+16535: inline void
+16535: Grid::Status::reset_c_up_to_date() {
+16535:   reset(C_UP_TO_DATE);
+16535: }
+16535: 
+16535: inline void
+16535: Grid::Status::set_c_up_to_date() {
+16535:   set(C_UP_TO_DATE);
+16535: }
+16535: 
+16535: inline bool
+16535: Grid::Status::test_g_up_to_date() const {
+16535:   return test_any(G_UP_TO_DATE);
+16535: }
+16535: 
+16535: inline void
+16535: Grid::Status::reset_g_up_to_date() {
+16535:   reset(G_UP_TO_DATE);
+16535: }
+16535: 
+16535: inline void
+16535: Grid::Status::set_g_up_to_date() {
+16535:   set(G_UP_TO_DATE);
+16535: }
+16535: 
+16535: inline bool
+16535: Grid::Status::test_c_minimized() const {
+16535:   return test_any(C_MINIMIZED);
+16535: }
+16535: 
+16535: inline void
+16535: Grid::Status::reset_c_minimized() {
+16535:   reset(C_MINIMIZED);
+16535: }
+16535: 
+16535: inline void
+16535: Grid::Status::set_c_minimized() {
+16535:   set(C_MINIMIZED);
+16535: }
+16535: 
+16535: inline bool
+16535: Grid::Status::test_g_minimized() const {
+16535:   return test_any(G_MINIMIZED);
+16535: }
+16535: 
+16535: inline void
+16535: Grid::Status::reset_g_minimized() {
+16535:   reset(G_MINIMIZED);
+16535: }
+16535: 
+16535: inline void
+16535: Grid::Status::set_g_minimized() {
+16535:   set(G_MINIMIZED);
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: Grid::Status::test_c_pending() const {
+16535:   return test_any(CS_PENDING);
+16535: }
+16535: 
+16535: inline void
+16535: Grid::Status::reset_c_pending() {
+16535:   reset(CS_PENDING);
+16535: }
+16535: 
+16535: inline void
+16535: Grid::Status::set_c_pending() {
+16535:   set(CS_PENDING);
+16535: }
+16535: 
+16535: inline bool
+16535: Grid::Status::test_g_pending() const {
+16535:   return test_any(GS_PENDING);
+16535: }
+16535: 
+16535: inline void
+16535: Grid::Status::reset_g_pending() {
+16535:   reset(GS_PENDING);
+16535: }
+16535: 
+16535: inline void
+16535: Grid::Status::set_g_pending() {
+16535:   set(GS_PENDING);
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: Grid::Status::test_sat_c_up_to_date() const {
+16535:   return test_any(SAT_C_UP_TO_DATE);
+16535: }
+16535: 
+16535: inline void
+16535: Grid::Status::reset_sat_c_up_to_date() {
+16535:   reset(SAT_C_UP_TO_DATE);
+16535: }
+16535: 
+16535: inline void
+16535: Grid::Status::set_sat_c_up_to_date() {
+16535:   set(SAT_C_UP_TO_DATE);
+16535: }
+16535: 
+16535: inline bool
+16535: Grid::Status::test_sat_g_up_to_date() const {
+16535:   return test_any(SAT_G_UP_TO_DATE);
+16535: }
+16535: 
+16535: inline void
+16535: Grid::Status::reset_sat_g_up_to_date() {
+16535:   reset(SAT_G_UP_TO_DATE);
+16535: }
+16535: 
+16535: inline void
+16535: Grid::Status::set_sat_g_up_to_date() {
+16535:   set(SAT_G_UP_TO_DATE);
+16535: }
+16535: 
+16535: }
+16535: # 2662 "../../src/Grid_defs.hh" 2
+16535: # 1 "../../src/Grid_inlines.hh" 1
+16535: # 32 "../../src/Grid_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline bool
+16535: Grid::marked_empty() const {
+16535:   return status.test_empty();
+16535: }
+16535: 
+16535: inline bool
+16535: Grid::congruences_are_up_to_date() const {
+16535:   return status.test_c_up_to_date();
+16535: }
+16535: 
+16535: inline bool
+16535: Grid::generators_are_up_to_date() const {
+16535:   return status.test_g_up_to_date();
+16535: }
+16535: 
+16535: inline bool
+16535: Grid::congruences_are_minimized() const {
+16535:   return status.test_c_minimized();
+16535: }
+16535: 
+16535: inline bool
+16535: Grid::generators_are_minimized() const {
+16535:   return status.test_g_minimized();
+16535: }
+16535: 
+16535: inline void
+16535: Grid::set_generators_up_to_date() {
+16535:   status.set_g_up_to_date();
+16535: }
+16535: 
+16535: inline void
+16535: Grid::set_congruences_up_to_date() {
+16535:   status.set_c_up_to_date();
+16535: }
+16535: 
+16535: inline void
+16535: Grid::set_congruences_minimized() {
+16535:   set_congruences_up_to_date();
+16535:   status.set_c_minimized();
+16535: }
+16535: 
+16535: inline void
+16535: Grid::set_generators_minimized() {
+16535:   set_generators_up_to_date();
+16535:   status.set_g_minimized();
+16535: }
+16535: 
+16535: inline void
+16535: Grid::clear_empty() {
+16535:   status.reset_empty();
+16535: }
+16535: 
+16535: inline void
+16535: Grid::clear_congruences_minimized() {
+16535:   status.reset_c_minimized();
+16535: }
+16535: 
+16535: inline void
+16535: Grid::clear_generators_minimized() {
+16535:   status.reset_g_minimized();
+16535: }
+16535: 
+16535: inline void
+16535: Grid::clear_congruences_up_to_date() {
+16535:   clear_congruences_minimized();
+16535:   status.reset_c_up_to_date();
+16535: 
+16535: }
+16535: 
+16535: inline void
+16535: Grid::clear_generators_up_to_date() {
+16535:   clear_generators_minimized();
+16535:   status.reset_g_up_to_date();
+16535: 
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Grid::max_space_dimension() {
+16535: 
+16535: 
+16535:   return std::min(std::numeric_limits<dimension_type>::max() - 1,
+16535:                   std::min(Congruence_System::max_space_dimension(),
+16535:                            Grid_Generator_System::max_space_dimension()
+16535:                            )
+16535:                   );
+16535: }
+16535: 
+16535: inline
+16535: Grid::Grid(dimension_type num_dimensions,
+16535:            const Degenerate_Element kind)
+16535:   : con_sys(),
+16535:     gen_sys(check_space_dimension_overflow(num_dimensions,
+16535:                                            max_space_dimension(),
+16535:                                            "PPL::Grid::",
+16535:                                            "Grid(n, k)",
+16535:                                            "n exceeds the maximum "
+16535:                                            "allowed space dimension")) {
+16535:   construct(num_dimensions, kind);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Grid::Grid(const Congruence_System& cgs)
+16535:   : con_sys(check_space_dimension_overflow(cgs.space_dimension(),
+16535:                                            max_space_dimension(),
+16535:                                            "PPL::Grid::",
+16535:                                            "Grid(cgs)",
+16535:                                            "the space dimension of cgs "
+16535:                                            "exceeds the maximum allowed "
+16535:                                            "space dimension")),
+16535:     gen_sys(cgs.space_dimension()) {
+16535:   Congruence_System cgs_copy(cgs);
+16535:   construct(cgs_copy);
+16535: }
+16535: 
+16535: inline
+16535: Grid::Grid(Congruence_System& cgs, Recycle_Input)
+16535:   : con_sys(check_space_dimension_overflow(cgs.space_dimension(),
+16535:                                            max_space_dimension(),
+16535:                                            "PPL::Grid::",
+16535:                                            "Grid(cgs, recycle)",
+16535:                                            "the space dimension of cgs "
+16535:                                            "exceeds the maximum allowed "
+16535:                                            "space dimension")),
+16535:     gen_sys(cgs.space_dimension()) {
+16535:   construct(cgs);
+16535: }
+16535: 
+16535: inline
+16535: Grid::Grid(const Grid_Generator_System& ggs)
+16535:   : con_sys(check_space_dimension_overflow(ggs.space_dimension(),
+16535:                                            max_space_dimension(),
+16535:                                            "PPL::Grid::",
+16535:                                            "Grid(ggs)",
+16535:                                            "the space dimension of ggs "
+16535:                                            "exceeds the maximum allowed "
+16535:                                            "space dimension")),
+16535:     gen_sys(ggs.space_dimension()) {
+16535:   Grid_Generator_System ggs_copy(ggs);
+16535:   construct(ggs_copy);
+16535: }
+16535: 
+16535: inline
+16535: Grid::Grid(Grid_Generator_System& ggs, Recycle_Input)
+16535:   : con_sys(check_space_dimension_overflow(ggs.space_dimension(),
+16535:                                            max_space_dimension(),
+16535:                                            "PPL::Grid::",
+16535:                                            "Grid(ggs, recycle)",
+16535:                                            "the space dimension of ggs "
+16535:                                            "exceeds the maximum allowed "
+16535:                                            "space dimension")),
+16535:     gen_sys(ggs.space_dimension()) {
+16535:   construct(ggs);
+16535: }
+16535: 
+16535: template <typename U>
+16535: inline
+16535: Grid::Grid(const BD_Shape<U>& bd, Complexity_Class)
+16535:   : con_sys(check_space_dimension_overflow(bd.space_dimension(),
+16535:                                            max_space_dimension(),
+16535:                                            "PPL::Grid::",
+16535:                                            "Grid(bd)",
+16535:                                            "the space dimension of bd "
+16535:                                            "exceeds the maximum allowed "
+16535:                                            "space dimension")),
+16535:     gen_sys(bd.space_dimension()) {
+16535:   Congruence_System cgs = bd.congruences();
+16535:   construct(cgs);
+16535: }
+16535: 
+16535: template <typename U>
+16535: inline
+16535: Grid::Grid(const Octagonal_Shape<U>& os, Complexity_Class)
+16535:   : con_sys(check_space_dimension_overflow(os.space_dimension(),
+16535:                                            max_space_dimension(),
+16535:                                            "PPL::Grid::",
+16535:                                            "Grid(os)",
+16535:                                            "the space dimension of os "
+16535:                                            "exceeds the maximum allowed "
+16535:                                            "space dimension")),
+16535:     gen_sys(os.space_dimension()) {
+16535:   Congruence_System cgs = os.congruences();
+16535:   construct(cgs);
+16535: }
+16535: 
+16535: inline
+16535: Grid::~Grid() {
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Grid::space_dimension() const {
+16535:   return space_dim;
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: Grid::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: inline int32_t
+16535: Grid::hash_code() const {
+16535:   return hash_code_from_dimension(space_dimension());
+16535: }
+16535: 
+16535: inline Constraint_System
+16535: Grid::constraints() const {
+16535:   return Constraint_System(congruences());
+16535: }
+16535: 
+16535: inline Constraint_System
+16535: Grid::minimized_constraints() const {
+16535:   return Constraint_System(minimized_congruences());
+16535: }
+16535: 
+16535: inline void
+16535: Grid::m_swap(Grid& y) {
+16535:   using std::swap;
+16535:   swap(con_sys, y.con_sys);
+16535:   swap(gen_sys, y.gen_sys);
+16535:   swap(status, y.status);
+16535:   swap(space_dim, y.space_dim);
+16535:   swap(dim_kinds, y.dim_kinds);
+16535: }
+16535: 
+16535: inline void
+16535: Grid::add_congruence(const Congruence& cg) {
+16535: 
+16535:   if (space_dim < cg.space_dimension()) {
+16535:     throw_dimension_incompatible("add_congruence(cg)", "cg", cg);
+16535:   }
+16535: 
+16535:   if (!marked_empty()) {
+16535:     add_congruence_no_check(cg);
+16535:   }
+16535: }
+16535: 
+16535: inline void
+16535: Grid::add_congruences(const Congruence_System& cgs) {
+16535: 
+16535: 
+16535:   if (space_dim < cgs.space_dimension()) {
+16535:     throw_dimension_incompatible("add_congruences(cgs)", "cgs", cgs);
+16535:   }
+16535: 
+16535:   if (!marked_empty()) {
+16535:     Congruence_System cgs_copy = cgs;
+16535:     add_recycled_congruences(cgs_copy);
+16535:   }
+16535: }
+16535: 
+16535: inline void
+16535: Grid::refine_with_congruence(const Congruence& cg) {
+16535:   add_congruence(cg);
+16535: }
+16535: 
+16535: inline void
+16535: Grid::refine_with_congruences(const Congruence_System& cgs) {
+16535:   add_congruences(cgs);
+16535: }
+16535: 
+16535: inline bool
+16535: Grid::can_recycle_constraint_systems() {
+16535:   return true;
+16535: }
+16535: 
+16535: inline bool
+16535: Grid::can_recycle_congruence_systems() {
+16535:   return true;
+16535: }
+16535: 
+16535: inline void
+16535: Grid::add_constraint(const Constraint& c) {
+16535: 
+16535:   if (space_dim < c.space_dimension()) {
+16535:     throw_dimension_incompatible("add_constraint(c)", "c", c);
+16535:   }
+16535:   if (!marked_empty()) {
+16535:     add_constraint_no_check(c);
+16535:   }
+16535: }
+16535: 
+16535: inline void
+16535: Grid::add_recycled_constraints(Constraint_System& cs) {
+16535: 
+16535:   add_constraints(cs);
+16535: }
+16535: 
+16535: inline bool
+16535: Grid::bounds_from_above(const Linear_Expression& expr) const {
+16535:   return bounds(expr, "bounds_from_above(e)");
+16535: }
+16535: 
+16535: inline bool
+16535: Grid::bounds_from_below(const Linear_Expression& expr) const {
+16535:   return bounds(expr, "bounds_from_below(e)");
+16535: }
+16535: 
+16535: inline bool
+16535: Grid::maximize(const Linear_Expression& expr,
+16535:                Coefficient& sup_n, Coefficient& sup_d, bool& maximum) const {
+16535:   return max_min(expr, "maximize(e, ...)", sup_n, sup_d, maximum);
+16535: }
+16535: 
+16535: inline bool
+16535: Grid::maximize(const Linear_Expression& expr,
+16535:                Coefficient& sup_n, Coefficient& sup_d, bool& maximum,
+16535:                Generator& point) const {
+16535:   return max_min(expr, "maximize(e, ...)", sup_n, sup_d, maximum, &point);
+16535: }
+16535: 
+16535: inline bool
+16535: Grid::minimize(const Linear_Expression& expr,
+16535:                Coefficient& inf_n, Coefficient& inf_d, bool& minimum) const {
+16535:   return max_min(expr, "minimize(e, ...)", inf_n, inf_d, minimum);
+16535: }
+16535: 
+16535: inline bool
+16535: Grid::minimize(const Linear_Expression& expr,
+16535:                Coefficient& inf_n, Coefficient& inf_d, bool& minimum,
+16535:                Generator& point) const {
+16535:   return max_min(expr, "minimize(e, ...)", inf_n, inf_d, minimum, &point);
+16535: }
+16535: 
+16535: inline void
+16535: Grid::normalize_divisors(Grid_Generator_System& sys) {
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_divisor; Parma_Polyhedra_Library::Coefficient& divisor = holder_divisor.item();
+16535:   divisor = 1;
+16535:   normalize_divisors(sys, divisor);
+16535: }
+16535: 
+16535: 
+16535: inline bool
+16535: operator!=(const Grid& x, const Grid& y) {
+16535:   return !(x == y);
+16535: }
+16535: 
+16535: inline bool
+16535: Grid::strictly_contains(const Grid& y) const {
+16535:   const Grid& x = *this;
+16535:   return x.contains(y) && !y.contains(x);
+16535: }
+16535: 
+16535: inline void
+16535: Grid::topological_closure_assign() {
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: swap(Grid& x, Grid& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 2663 "../../src/Grid_defs.hh" 2
+16535: # 1 "../../src/Grid_templates.hh" 1
+16535: # 33 "../../src/Grid_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Interval>
+16535: Grid::Grid(const Box<Interval>& box, Complexity_Class)
+16535:   : con_sys(),
+16535:     gen_sys() {
+16535:   space_dim = check_space_dimension_overflow(box.space_dimension(),
+16535:                                              max_space_dimension(),
+16535:                                              "PPL::Grid::",
+16535:                                              "Grid(box, from_bounding_box)",
+16535:                                              "the space dimension of box "
+16535:                                              "exceeds the maximum allowed "
+16535:                                              "space dimension");
+16535: 
+16535:   if (box.is_empty()) {
+16535: 
+16535:     set_empty();
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535:   if (space_dim == 0) {
+16535:     set_zero_dim_univ();
+16535:   }
+16535:   else {
+16535: 
+16535:     con_sys.set_space_dimension(space_dim);
+16535:     gen_sys.set_space_dimension(space_dim);
+16535: 
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_l_n; Parma_Polyhedra_Library::Coefficient& l_n = holder_l_n.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_l_d; Parma_Polyhedra_Library::Coefficient& l_d = holder_l_d.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_u_n; Parma_Polyhedra_Library::Coefficient& u_n = holder_u_n.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_u_d; Parma_Polyhedra_Library::Coefficient& u_d = holder_u_d.item();
+16535:     gen_sys.insert(grid_point());
+16535:     for (dimension_type k = space_dim; k-- > 0; ) {
+16535:       const Variable v_k = Variable(k);
+16535:       bool closed = false;
+16535: 
+16535:       if (box.has_lower_bound(v_k, l_n, l_d, closed)) {
+16535:         if (box.has_upper_bound(v_k, u_n, u_d, closed)) {
+16535:           if (l_n * u_d == u_n * l_d) {
+16535: 
+16535: 
+16535:             con_sys.insert(l_d * v_k == l_n);
+16535: 
+16535: 
+16535: 
+16535:             Grid_Generator& point = gen_sys.sys.rows[0];
+16535: 
+16535: 
+16535: 
+16535:             const Coefficient& point_divisor = point.divisor();
+16535:             gcd_assign(u_n, l_d, point_divisor);
+16535: 
+16535:             exact_div_assign(u_n, point_divisor, u_n);
+16535:             if (l_d < 0) {
+16535:               neg_assign(u_n);
+16535:             }
+16535: 
+16535:             point.scale_to_divisor(l_d * u_n);
+16535: 
+16535:             if (l_d < 0) {
+16535:               neg_assign(u_n);
+16535:             }
+16535: 
+16535:             point.expr.set(Variable(k), l_n * u_n);
+16535:             ((void) 0);
+16535: 
+16535:             ((void) 0);
+16535: 
+16535:             continue;
+16535:           }
+16535:         }
+16535:       }
+16535: 
+16535:       gen_sys.insert(grid_line(v_k));
+16535:     }
+16535:     set_congruences_up_to_date();
+16535:     set_generators_up_to_date();
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename Partial_Function>
+16535: void
+16535: Grid::map_space_dimensions(const Partial_Function& pfunc) {
+16535:   if (space_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535:   if (pfunc.has_empty_codomain()) {
+16535: 
+16535:     if (marked_empty()
+16535:         || (!generators_are_up_to_date() && !update_generators())) {
+16535: 
+16535:       space_dim = 0;
+16535:       set_empty();
+16535:     }
+16535:     else {
+16535: 
+16535:       set_zero_dim_univ();
+16535:     }
+16535: 
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535:   dimension_type new_space_dimension = pfunc.max_in_codomain() + 1;
+16535: 
+16535:   if (new_space_dimension == space_dim) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     std::vector<Variable> cycle;
+16535:     cycle.reserve(space_dim);
+16535: 
+16535: 
+16535:     std::deque<bool> visited(space_dim);
+16535: 
+16535:     for (dimension_type i = space_dim; i-- > 0; ) {
+16535:       if (!visited[i]) {
+16535:         dimension_type j = i;
+16535:         do {
+16535:           visited[j] = true;
+16535: 
+16535:           dimension_type k = 0;
+16535:           if (!pfunc.maps(j, k)) {
+16535:             throw_invalid_argument("map_space_dimensions(pfunc)",
+16535:                                    " pfunc is inconsistent");
+16535:           }
+16535:           if (k == j) {
+16535:             break;
+16535:           }
+16535: 
+16535:           cycle.push_back(Variable(j));
+16535: 
+16535:           j = k;
+16535:         } while (!visited[j]);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:         if (cycle.size() >= 2) {
+16535: 
+16535:           if (congruences_are_up_to_date()) {
+16535:             con_sys.permute_space_dimensions(cycle);
+16535:             clear_congruences_minimized();
+16535:           }
+16535: 
+16535:           if (generators_are_up_to_date()) {
+16535:             gen_sys.permute_space_dimensions(cycle);
+16535:             clear_generators_minimized();
+16535:           }
+16535:         }
+16535: 
+16535:         cycle.clear();
+16535:       }
+16535:     }
+16535: 
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const Grid_Generator_System& old_gensys = grid_generators();
+16535: 
+16535:   if (old_gensys.has_no_rows()) {
+16535: 
+16535:     Grid new_grid(new_space_dimension, EMPTY);
+16535:     m_swap(new_grid);
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   std::vector<dimension_type> pfunc_maps(space_dim, not_a_dimension());
+16535:   for (dimension_type j = space_dim; j-- > 0; ) {
+16535:     dimension_type pfunc_j;
+16535:     if (pfunc.maps(j, pfunc_j)) {
+16535:       pfunc_maps[j] = pfunc_j;
+16535:     }
+16535:   }
+16535: 
+16535:   Grid_Generator_System new_gensys;
+16535: 
+16535:   new_gensys.set_sorted(false);
+16535: 
+16535:   Grid_Generator_System::const_iterator i;
+16535:   Grid_Generator_System::const_iterator old_gensys_end = old_gensys.end();
+16535:   for (i = old_gensys.begin(); i != old_gensys_end; ++i) {
+16535:     if (i->is_point()) {
+16535:       break;
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535:   const Coefficient& system_divisor = i->divisor();
+16535:   for (i = old_gensys.begin(); i != old_gensys_end; ++i) {
+16535:     const Grid_Generator& old_g = *i;
+16535:     const Grid_Generator::expr_type old_g_e = old_g.expression();
+16535:     Linear_Expression expr;
+16535:     expr.set_space_dimension(new_space_dimension);
+16535:     bool all_zeroes = true;
+16535:     for (Grid_Generator::expr_type::const_iterator j = old_g_e.begin(),
+16535:           j_end = old_g_e.end(); j != j_end; ++j) {
+16535:       const dimension_type mapped_id = pfunc_maps[j.variable().id()];
+16535:       if (mapped_id != not_a_dimension()) {
+16535:         add_mul_assign(expr, *j, Variable(mapped_id));
+16535:         all_zeroes = false;
+16535:       }
+16535:     }
+16535:     switch (old_g.type()) {
+16535:     case Grid_Generator::LINE:
+16535:       if (!all_zeroes) {
+16535:         new_gensys.insert(grid_line(expr));
+16535:       }
+16535:       break;
+16535:     case Grid_Generator::PARAMETER:
+16535:       if (!all_zeroes) {
+16535:         new_gensys.insert(parameter(expr, system_divisor));
+16535:       }
+16535:       break;
+16535:     case Grid_Generator::POINT:
+16535:       new_gensys.insert(grid_point(expr, old_g.divisor()));
+16535:       break;
+16535:     }
+16535:   }
+16535: 
+16535:   Grid new_grid(new_gensys);
+16535:   m_swap(new_grid);
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: template <typename M>
+16535: void
+16535: Grid::reduce_reduced(Swapping_Vector<typename M::row_type>& rows,
+16535:                      const dimension_type dim,
+16535:                      const dimension_type pivot_index,
+16535:                      const dimension_type start,
+16535:                      const dimension_type end,
+16535:                      const Dimension_Kinds& sys_dim_kinds,
+16535:                      const bool generators) {
+16535: 
+16535:   typedef typename M::row_type M_row_type;
+16535: 
+16535:   const M_row_type& pivot = rows[pivot_index];
+16535:   const Coefficient& pivot_dim = pivot.expr.get(dim);
+16535: 
+16535:   if (pivot_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_pivot_dim_half; Parma_Polyhedra_Library::Coefficient& pivot_dim_half = holder_pivot_dim_half.item();
+16535:   pivot_dim_half = (pivot_dim + 1) / 2;
+16535:   const Dimension_Kind row_kind = sys_dim_kinds[dim];
+16535:   const bool row_is_line_or_equality
+16535:     = (row_kind == (generators ? LINE : EQUALITY));
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_num_rows_to_subtract; Parma_Polyhedra_Library::Coefficient& num_rows_to_subtract = holder_num_rows_to_subtract.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_row_dim_remainder; Parma_Polyhedra_Library::Coefficient& row_dim_remainder = holder_row_dim_remainder.item();
+16535:   for (dimension_type kinds_index = dim,
+16535:          row_index = pivot_index; row_index-- > 0; ) {
+16535:     if (generators) {
+16535:       --kinds_index;
+16535: 
+16535:       while (sys_dim_kinds[kinds_index] == GEN_VIRTUAL) {
+16535:         --kinds_index;
+16535:       }
+16535:     }
+16535:     else {
+16535:       ++kinds_index;
+16535: 
+16535:       while (sys_dim_kinds[kinds_index] == CON_VIRTUAL) {
+16535:         ++kinds_index;
+16535:       }
+16535:     }
+16535: 
+16535: 
+16535:     if (row_is_line_or_equality
+16535:         || (row_kind == PARAMETER
+16535:             && sys_dim_kinds[kinds_index] == PARAMETER)) {
+16535:       M_row_type& row = rows[row_index];
+16535: 
+16535:       const Coefficient& row_dim = row.expr.get(dim);
+16535: 
+16535:       num_rows_to_subtract = row_dim / pivot_dim;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       row_dim_remainder = row_dim % pivot_dim;
+16535:       if (row_dim_remainder < 0) {
+16535:         if (row_dim_remainder <= -pivot_dim_half) {
+16535:           --num_rows_to_subtract;
+16535:         }
+16535:       }
+16535:       else if (row_dim_remainder > 0 && row_dim_remainder > pivot_dim_half) {
+16535:         ++num_rows_to_subtract;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       if (num_rows_to_subtract != 0) {
+16535:         row.expr.linear_combine(pivot.expr,
+16535:                                 Coefficient_one(), -num_rows_to_subtract,
+16535:                                 start, end + 1);
+16535:       }
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: }
+16535: # 2664 "../../src/Grid_defs.hh" 2
+16535: # 36 "../../src/Box_templates.hh" 2
+16535: 
+16535: 
+16535: # 1 "../../src/BD_Shape_defs.hh" 1
+16535: # 44 "../../src/BD_Shape_defs.hh"
+16535: # 1 "../../src/DB_Matrix_defs.hh" 1
+16535: # 27 "../../src/DB_Matrix_defs.hh"
+16535: # 1 "../../src/DB_Matrix_types.hh" 1
+16535: # 16 "../../src/DB_Matrix_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: class DB_Matrix;
+16535: 
+16535: }
+16535: # 28 "../../src/DB_Matrix_defs.hh" 2
+16535: 
+16535: # 1 "../../src/DB_Row_defs.hh" 1
+16535: # 27 "../../src/DB_Row_defs.hh"
+16535: # 1 "../../src/DB_Row_types.hh" 1
+16535: # 16 "../../src/DB_Row_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: class DB_Row_Impl_Handler;
+16535: 
+16535: template <typename T>
+16535: class DB_Row;
+16535: 
+16535: }
+16535: # 28 "../../src/DB_Row_defs.hh" 2
+16535: 
+16535: # 1 "../../src/Ptr_Iterator_defs.hh" 1
+16535: # 27 "../../src/Ptr_Iterator_defs.hh"
+16535: # 1 "../../src/Ptr_Iterator_types.hh" 1
+16535: # 16 "../../src/Ptr_Iterator_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: template <typename P>
+16535: class Ptr_Iterator;
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 28 "../../src/Ptr_Iterator_defs.hh" 2
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: template<typename P, typename Q>
+16535: bool operator==(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y);
+16535: 
+16535: template<typename P, typename Q>
+16535: bool operator!=(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y);
+16535: 
+16535: template<typename P, typename Q>
+16535: bool operator<(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y);
+16535: 
+16535: template<typename P, typename Q>
+16535: bool operator<=(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y);
+16535: 
+16535: template<typename P, typename Q>
+16535: bool operator>(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y);
+16535: 
+16535: template<typename P, typename Q>
+16535: bool operator>=(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y);
+16535: 
+16535: template<typename P, typename Q>
+16535: typename Ptr_Iterator<P>::difference_type
+16535: operator-(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y);
+16535: 
+16535: template<typename P>
+16535: Ptr_Iterator<P> operator+(typename Ptr_Iterator<P>::difference_type m,
+16535:                           const Ptr_Iterator<P>& y);
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename P>
+16535: class Parma_Polyhedra_Library::Implementation::Ptr_Iterator
+16535:   : public std::iterator<typename std::iterator_traits<P>::iterator_category,
+16535:                          typename std::iterator_traits<P>::value_type,
+16535:                          typename std::iterator_traits<P>::difference_type,
+16535:                          typename std::iterator_traits<P>::pointer,
+16535:                          typename std::iterator_traits<P>::reference> {
+16535: public:
+16535:   typedef typename std::iterator_traits<P>::difference_type difference_type;
+16535:   typedef typename std::iterator_traits<P>::reference reference;
+16535:   typedef typename std::iterator_traits<P>::pointer pointer;
+16535: 
+16535: 
+16535:   Ptr_Iterator();
+16535: 
+16535: 
+16535:   explicit Ptr_Iterator(const P& q);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename Q>
+16535:   Ptr_Iterator(const Ptr_Iterator<Q>& q);
+16535: 
+16535: 
+16535:   reference operator*() const;
+16535: 
+16535: 
+16535:   pointer operator->() const;
+16535: 
+16535: 
+16535:   reference operator[](const difference_type m) const;
+16535: 
+16535: 
+16535:   Ptr_Iterator& operator++();
+16535: 
+16535: 
+16535:   Ptr_Iterator operator++(int);
+16535: 
+16535: 
+16535:   Ptr_Iterator& operator--();
+16535: 
+16535: 
+16535:   Ptr_Iterator operator--(int);
+16535: 
+16535: 
+16535:   Ptr_Iterator& operator+=(const difference_type m);
+16535: 
+16535: 
+16535:   Ptr_Iterator& operator-=(const difference_type m);
+16535: 
+16535: 
+16535:   difference_type operator-(const Ptr_Iterator& y) const;
+16535: 
+16535: 
+16535:   Ptr_Iterator operator+(const difference_type m) const;
+16535: 
+16535: 
+16535:   Ptr_Iterator operator-(const difference_type m) const;
+16535: 
+16535: private:
+16535: 
+16535:   P p;
+16535: 
+16535: 
+16535:   const P& base() const;
+16535: 
+16535:   template <typename Q, typename R>
+16535:   friend bool Parma_Polyhedra_Library::Implementation::
+16535:   operator==(const Ptr_Iterator<Q>& x, const Ptr_Iterator<R>& y);
+16535: 
+16535:   template <typename Q, typename R>
+16535:   friend bool Parma_Polyhedra_Library::Implementation::
+16535:   operator!=(const Ptr_Iterator<Q>& x, const Ptr_Iterator<R>& y);
+16535: 
+16535:   template<typename Q, typename R>
+16535:   friend bool Parma_Polyhedra_Library::Implementation::
+16535:   operator<(const Ptr_Iterator<Q>& x, const Ptr_Iterator<R>& y);
+16535: 
+16535:   template<typename Q, typename R>
+16535:   friend bool Parma_Polyhedra_Library::Implementation::
+16535:   operator<=(const Ptr_Iterator<Q>& x, const Ptr_Iterator<R>& y);
+16535: 
+16535:   template<typename Q, typename R>
+16535:   friend bool Parma_Polyhedra_Library::Implementation::
+16535:   operator>(const Ptr_Iterator<Q>& x, const Ptr_Iterator<R>& y);
+16535: 
+16535:   template<typename Q, typename R>
+16535:   friend bool Parma_Polyhedra_Library::Implementation::
+16535:   operator>=(const Ptr_Iterator<Q>& x, const Ptr_Iterator<R>& y);
+16535: 
+16535:   template<typename Q, typename R>
+16535:   friend typename Ptr_Iterator<Q>::difference_type
+16535:   Parma_Polyhedra_Library::Implementation::
+16535:   operator-(const Ptr_Iterator<Q>& x, const Ptr_Iterator<R>& y);
+16535: 
+16535:   friend Ptr_Iterator<P>
+16535:   Parma_Polyhedra_Library::Implementation::
+16535:   operator+<>(typename Ptr_Iterator<P>::difference_type m,
+16535:               const Ptr_Iterator<P>& y);
+16535: };
+16535: 
+16535: # 1 "../../src/Ptr_Iterator_inlines.hh" 1
+16535: # 27 "../../src/Ptr_Iterator_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: template <typename P>
+16535: inline const P&
+16535: Ptr_Iterator<P>::base() const {
+16535:   return p;
+16535: }
+16535: 
+16535: template <typename P>
+16535: inline
+16535: Ptr_Iterator<P>::Ptr_Iterator()
+16535:   : p(P()) {
+16535: }
+16535: 
+16535: template <typename P>
+16535: inline
+16535: Ptr_Iterator<P>::Ptr_Iterator(const P& q)
+16535:   : p(q) {
+16535: }
+16535: 
+16535: template <typename P>
+16535: template <typename Q>
+16535: inline
+16535: Ptr_Iterator<P>::Ptr_Iterator(const Ptr_Iterator<Q>& q)
+16535:   : p(q.base()) {
+16535: }
+16535: 
+16535: template <typename P>
+16535: inline typename Ptr_Iterator<P>::reference
+16535: Ptr_Iterator<P>::operator*() const {
+16535:   return *p;
+16535: }
+16535: 
+16535: template <typename P>
+16535: inline typename Ptr_Iterator<P>::pointer
+16535: Ptr_Iterator<P>::operator->() const {
+16535:   return p;
+16535: }
+16535: 
+16535: template <typename P>
+16535: inline typename Ptr_Iterator<P>::reference
+16535: Ptr_Iterator<P>::operator[](const difference_type m) const {
+16535:   return p[m];
+16535: }
+16535: 
+16535: template <typename P>
+16535: inline Ptr_Iterator<P>&
+16535: Ptr_Iterator<P>::operator++() {
+16535:   ++p;
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename P>
+16535: inline Ptr_Iterator<P>
+16535: Ptr_Iterator<P>::operator++(int) {
+16535:   return Ptr_Iterator(p++);
+16535: }
+16535: 
+16535: template <typename P>
+16535: inline Ptr_Iterator<P>&
+16535: Ptr_Iterator<P>::operator--() {
+16535:   --p;
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename P>
+16535: inline Ptr_Iterator<P>
+16535: Ptr_Iterator<P>::operator--(int) {
+16535:   return Ptr_Iterator(p--);
+16535: }
+16535: 
+16535: 
+16535: template <typename P>
+16535: inline Ptr_Iterator<P>&
+16535: Ptr_Iterator<P>::operator+=(const difference_type m) {
+16535:   p += m;
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename P>
+16535: inline Ptr_Iterator<P>&
+16535: Ptr_Iterator<P>::operator-=(const difference_type m) {
+16535:   p -= m;
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename P>
+16535: inline typename Ptr_Iterator<P>::difference_type
+16535: Ptr_Iterator<P>::operator-(const Ptr_Iterator& y) const {
+16535:   return p - y.p;
+16535: }
+16535: 
+16535: template <typename P>
+16535: inline Ptr_Iterator<P>
+16535: Ptr_Iterator<P>::operator+(const difference_type m) const {
+16535:   return Ptr_Iterator(p + m);
+16535: }
+16535: 
+16535: template <typename P>
+16535: inline Ptr_Iterator<P>
+16535: Ptr_Iterator<P>::operator-(const difference_type m) const {
+16535:   return Ptr_Iterator(p - m);
+16535: }
+16535: 
+16535: template<typename P, typename Q>
+16535: inline bool
+16535: operator==(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y) {
+16535:   return x.base() == y.base();
+16535: }
+16535: 
+16535: template<typename P, typename Q>
+16535: inline bool
+16535: operator!=(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y) {
+16535:   return x.base() != y.base();
+16535: }
+16535: 
+16535: template<typename P, typename Q>
+16535: inline bool
+16535: operator<(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y) {
+16535:   return x.base() < y.base();
+16535: }
+16535: 
+16535: template<typename P, typename Q>
+16535: inline bool
+16535: operator<=(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y) {
+16535:   return x.base() <= y.base();
+16535: }
+16535: 
+16535: template<typename P, typename Q>
+16535: inline bool
+16535: operator>(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y) {
+16535:   return x.base() > y.base();
+16535: }
+16535: 
+16535: template<typename P, typename Q>
+16535: inline bool
+16535: operator>=(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y) {
+16535:   return x.base() >= y.base();
+16535: }
+16535: 
+16535: template<typename P, typename Q>
+16535: inline typename Ptr_Iterator<P>::difference_type
+16535: operator-(const Ptr_Iterator<P>& x, const Ptr_Iterator<Q>& y) {
+16535:   return x.base() - y.base();
+16535: }
+16535: 
+16535: template<typename P>
+16535: inline Ptr_Iterator<P>
+16535: operator+(typename Ptr_Iterator<P>::difference_type m,
+16535:           const Ptr_Iterator<P>& y) {
+16535:   return Ptr_Iterator<P>(m + y.base());
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 171 "../../src/Ptr_Iterator_defs.hh" 2
+16535: # 30 "../../src/DB_Row_defs.hh" 2
+16535: # 57 "../../src/DB_Row_defs.hh"
+16535: template <typename T>
+16535: class Parma_Polyhedra_Library::DB_Row_Impl_Handler {
+16535: public:
+16535: 
+16535:   DB_Row_Impl_Handler();
+16535: 
+16535: 
+16535:   ~DB_Row_Impl_Handler();
+16535: 
+16535:   class Impl;
+16535: 
+16535: 
+16535:   Impl* impl;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: private:
+16535: 
+16535:   DB_Row_Impl_Handler(const DB_Row_Impl_Handler&);
+16535: 
+16535: 
+16535:   DB_Row_Impl_Handler& operator=(const DB_Row_Impl_Handler&);
+16535: };
+16535: # 119 "../../src/DB_Row_defs.hh"
+16535: template <typename T>
+16535: class Parma_Polyhedra_Library::DB_Row : private DB_Row_Impl_Handler<T> {
+16535: public:
+16535: 
+16535:   DB_Row();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void construct(dimension_type sz);
+16535: # 145 "../../src/DB_Row_defs.hh"
+16535:   void construct(dimension_type sz, dimension_type capacity);
+16535: # 159 "../../src/DB_Row_defs.hh"
+16535:   template <typename U>
+16535:   void construct_upward_approximation(const DB_Row<U>& y,
+16535:                                       dimension_type capacity);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   DB_Row(dimension_type sz);
+16535: 
+16535: 
+16535:   DB_Row(dimension_type sz, dimension_type capacity);
+16535: 
+16535: 
+16535:   DB_Row(const DB_Row& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   DB_Row(const DB_Row& y, dimension_type capacity);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   DB_Row(const DB_Row& y, dimension_type sz, dimension_type capacity);
+16535: 
+16535: 
+16535:   ~DB_Row();
+16535: 
+16535: 
+16535:   DB_Row& operator=(const DB_Row& y);
+16535: 
+16535: 
+16535:   void m_swap(DB_Row& y);
+16535: 
+16535: 
+16535:   void assign(DB_Row& y);
+16535: # 208 "../../src/DB_Row_defs.hh"
+16535:   void allocate(dimension_type capacity);
+16535: # 218 "../../src/DB_Row_defs.hh"
+16535:   void expand_within_capacity(dimension_type new_size);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void shrink(dimension_type new_size);
+16535: 
+16535: 
+16535:   static dimension_type max_size();
+16535: 
+16535: 
+16535:   dimension_type size() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   T& operator[](dimension_type k);
+16535: 
+16535: 
+16535:   const T& operator[](dimension_type k) const;
+16535: 
+16535: 
+16535: 
+16535:   typedef Implementation::Ptr_Iterator<T*> iterator;
+16535: 
+16535: 
+16535:   typedef Implementation::Ptr_Iterator<const T*> const_iterator;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   iterator begin();
+16535: 
+16535: 
+16535:   iterator end();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const_iterator begin() const;
+16535: 
+16535: 
+16535:   const_iterator end() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes(dimension_type capacity) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes(dimension_type capacity) const;
+16535: 
+16535: 
+16535:   bool OK(dimension_type row_size, dimension_type row_capacity) const;
+16535: 
+16535: private:
+16535:   template <typename U> friend class Parma_Polyhedra_Library::DB_Row;
+16535: 
+16535: 
+16535:   void copy_construct_coefficients(const DB_Row& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: };
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: void swap(DB_Row<T>& x, DB_Row<T>& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: void iter_swap(typename std::vector<DB_Row<T> >::iterator x,
+16535:                typename std::vector<DB_Row<T> >::iterator y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: bool operator==(const DB_Row<T>& x, const DB_Row<T>& y);
+16535: 
+16535: 
+16535: template <typename T>
+16535: bool operator!=(const DB_Row<T>& x, const DB_Row<T>& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 351 "../../src/DB_Row_defs.hh"
+16535: template <typename T>
+16535: class Parma_Polyhedra_Library::DB_Row_Impl_Handler<T>::Impl {
+16535: public:
+16535: # 362 "../../src/DB_Row_defs.hh"
+16535:   static void* operator new(size_t fixed_size, dimension_type capacity);
+16535: 
+16535: 
+16535:   static void operator delete(void* p);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static void operator delete(void* p, dimension_type capacity);
+16535: 
+16535: 
+16535: 
+16535:   Impl();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   ~Impl();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void expand_within_capacity(dimension_type new_size);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void shrink(dimension_type new_size);
+16535: 
+16535: 
+16535:   void copy_construct_coefficients(const Impl& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename U>
+16535:   void construct_upward_approximation(const U& y);
+16535: 
+16535: 
+16535:   static dimension_type max_size();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type size() const;
+16535: 
+16535: 
+16535:   void set_size(dimension_type new_sz);
+16535: 
+16535: 
+16535:   void bump_size();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   T& operator[](dimension_type k);
+16535: 
+16535: 
+16535:   const T& operator[](dimension_type k) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes(dimension_type capacity) const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: private:
+16535:   friend class DB_Row<T>;
+16535: 
+16535: 
+16535:   dimension_type size_;
+16535: 
+16535: 
+16535:   T vec_[
+16535: 
+16535:           0
+16535: 
+16535: 
+16535: 
+16535:   ];
+16535: 
+16535: 
+16535:   Impl(const Impl& y);
+16535: 
+16535: 
+16535:   Impl& operator=(const Impl&);
+16535: 
+16535: 
+16535:   void copy_construct(const Impl& y);
+16535: };
+16535: 
+16535: # 1 "../../src/DB_Row_inlines.hh" 1
+16535: # 34 "../../src/DB_Row_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: inline void*
+16535: DB_Row_Impl_Handler<T>::Impl::operator new(const size_t fixed_size,
+16535:                                            const dimension_type capacity) {
+16535: 
+16535:   return ::operator new(fixed_size + capacity*sizeof(T));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: DB_Row_Impl_Handler<T>::Impl::operator delete(void* p) {
+16535:   ::operator delete(p);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: DB_Row_Impl_Handler<T>::Impl::operator delete(void* p, dimension_type) {
+16535:   ::operator delete(p);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline memory_size_type
+16535: DB_Row_Impl_Handler<T>::Impl
+16535: ::total_memory_in_bytes(dimension_type capacity) const {
+16535:   return
+16535:     sizeof(*this)
+16535:     + capacity*sizeof(T)
+16535: 
+16535: 
+16535: 
+16535:     + external_memory_in_bytes();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline memory_size_type
+16535: DB_Row_Impl_Handler<T>::Impl::total_memory_in_bytes() const {
+16535: 
+16535: 
+16535:   return total_memory_in_bytes(size_);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: DB_Row_Impl_Handler<T>::Impl::max_size() {
+16535:   return std::numeric_limits<size_t>::max() / sizeof(T);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: DB_Row_Impl_Handler<T>::Impl::size() const {
+16535:   return size_;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: DB_Row_Impl_Handler<T>::Impl::set_size(const dimension_type new_sz) {
+16535:   size_ = new_sz;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: DB_Row_Impl_Handler<T>::Impl::bump_size() {
+16535:   ++size_;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: DB_Row_Impl_Handler<T>::Impl::Impl()
+16535:   : size_(0) {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: DB_Row_Impl_Handler<T>::Impl::~Impl() {
+16535:   shrink(0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: DB_Row_Impl_Handler<T>::DB_Row_Impl_Handler()
+16535:   : impl(0) {
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: DB_Row_Impl_Handler<T>::~DB_Row_Impl_Handler() {
+16535:   delete impl;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline T&
+16535: DB_Row_Impl_Handler<T>::Impl::operator[](const dimension_type k) {
+16535:   ((void) 0);
+16535:   return vec_[k];
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline const T&
+16535: DB_Row_Impl_Handler<T>::Impl::operator[](const dimension_type k) const {
+16535:   ((void) 0);
+16535:   return vec_[k];
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: DB_Row<T>::max_size() {
+16535:   return DB_Row_Impl_Handler<T>::Impl::max_size();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: DB_Row<T>::size() const {
+16535:   return this->impl->size();
+16535: }
+16535: # 166 "../../src/DB_Row_inlines.hh"
+16535: template <typename T>
+16535: inline
+16535: DB_Row<T>::DB_Row()
+16535:   : DB_Row_Impl_Handler<T>() {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: DB_Row<T>::allocate(
+16535: 
+16535:                const
+16535: 
+16535:                dimension_type capacity) {
+16535:   DB_Row<T>& x = *this;
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   x.impl = new(capacity) typename DB_Row_Impl_Handler<T>::Impl();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: DB_Row<T>::expand_within_capacity(const dimension_type new_size) {
+16535:   DB_Row<T>& x = *this;
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:   x.impl->expand_within_capacity(new_size);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: DB_Row<T>::copy_construct_coefficients(const DB_Row& y) {
+16535:   DB_Row<T>& x = *this;
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:   x.impl->copy_construct_coefficients(*(y.impl));
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline void
+16535: DB_Row<T>::construct_upward_approximation(const DB_Row<U>& y,
+16535:                                           const dimension_type capacity) {
+16535:   DB_Row<T>& x = *this;
+16535:   ((void) 0);
+16535:   allocate(capacity);
+16535:   ((void) 0);
+16535:   x.impl->construct_upward_approximation(*(y.impl));
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: DB_Row<T>::construct(const dimension_type sz,
+16535:                      const dimension_type capacity) {
+16535:   ((void) 0);
+16535:   allocate(capacity);
+16535:   expand_within_capacity(sz);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: DB_Row<T>::construct(const dimension_type sz) {
+16535:   construct(sz, sz);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: DB_Row<T>::DB_Row(const dimension_type sz,
+16535:                   const dimension_type capacity)
+16535:   : DB_Row_Impl_Handler<T>() {
+16535:   construct(sz, capacity);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: DB_Row<T>::DB_Row(const dimension_type sz) {
+16535:   construct(sz);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: DB_Row<T>::DB_Row(const DB_Row& y)
+16535:   : DB_Row_Impl_Handler<T>() {
+16535:   if (y.impl != 0) {
+16535:     allocate(compute_capacity(y.size(), max_size()));
+16535:     copy_construct_coefficients(y);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: DB_Row<T>::DB_Row(const DB_Row& y,
+16535:                   const dimension_type capacity)
+16535:   : DB_Row_Impl_Handler<T>() {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   allocate(capacity);
+16535:   copy_construct_coefficients(y);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: DB_Row<T>::DB_Row(const DB_Row& y,
+16535:                   const dimension_type sz,
+16535:                   const dimension_type capacity)
+16535:   : DB_Row_Impl_Handler<T>() {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   allocate(capacity);
+16535:   copy_construct_coefficients(y);
+16535:   expand_within_capacity(sz);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: DB_Row<T>::~DB_Row() {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: DB_Row<T>::shrink(const dimension_type new_size) {
+16535:   DB_Row<T>& x = *this;
+16535:   ((void) 0);
+16535:   x.impl->shrink(new_size);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: DB_Row<T>::m_swap(DB_Row& y) {
+16535:   using std::swap;
+16535:   DB_Row<T>& x = *this;
+16535:   swap(x.impl, y.impl);
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: DB_Row<T>::assign(DB_Row& y) {
+16535:   DB_Row<T>& x = *this;
+16535:   x.impl = y.impl;
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline DB_Row<T>&
+16535: DB_Row<T>::operator=(const DB_Row& y) {
+16535:   DB_Row tmp(y);
+16535:   m_swap(tmp);
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline T&
+16535: DB_Row<T>::operator[](const dimension_type k) {
+16535:   DB_Row<T>& x = *this;
+16535:   return (*x.impl)[k];
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline const T&
+16535: DB_Row<T>::operator[](const dimension_type k) const {
+16535:   const DB_Row<T>& x = *this;
+16535:   return (*x.impl)[k];
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename DB_Row<T>::iterator
+16535: DB_Row<T>::begin() {
+16535:   DB_Row<T>& x = *this;
+16535:   return iterator(x.impl->vec_);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename DB_Row<T>::iterator
+16535: DB_Row<T>::end() {
+16535:   DB_Row<T>& x = *this;
+16535:   return iterator(x.impl->vec_ + x.impl->size_);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename DB_Row<T>::const_iterator
+16535: DB_Row<T>::begin() const {
+16535:   const DB_Row<T>& x = *this;
+16535:   return const_iterator(x.impl->vec_);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename DB_Row<T>::const_iterator
+16535: DB_Row<T>::end() const {
+16535:   const DB_Row<T>& x = *this;
+16535:   return const_iterator(x.impl->vec_ + x.impl->size_);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline memory_size_type
+16535: DB_Row<T>::external_memory_in_bytes(dimension_type capacity) const {
+16535:   const DB_Row<T>& x = *this;
+16535:   return x.impl->total_memory_in_bytes(capacity);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline memory_size_type
+16535: DB_Row<T>::total_memory_in_bytes(dimension_type capacity) const {
+16535:   return sizeof(*this) + external_memory_in_bytes(capacity);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline memory_size_type
+16535: DB_Row<T>::external_memory_in_bytes() const {
+16535:   const DB_Row<T>& x = *this;
+16535: 
+16535: 
+16535: 
+16535:   return x.impl->total_memory_in_bytes();
+16535: 
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline memory_size_type
+16535: DB_Row<T>::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: operator!=(const DB_Row<T>& x, const DB_Row<T>& y) {
+16535:   return !(x == y);
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: swap(DB_Row<T>& x, DB_Row<T>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: iter_swap(typename std::vector<DB_Row<T> >::iterator x,
+16535:           typename std::vector<DB_Row<T> >::iterator y) {
+16535:   swap(*x, *y);
+16535: }
+16535: 
+16535: }
+16535: # 468 "../../src/DB_Row_defs.hh" 2
+16535: # 1 "../../src/DB_Row_templates.hh" 1
+16535: # 29 "../../src/DB_Row_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: void
+16535: DB_Row_Impl_Handler<T>::Impl::construct_upward_approximation(const U& y) {
+16535:   const dimension_type y_size = y.size();
+16535: 
+16535: 
+16535:   for (dimension_type i = 0; i < y_size; ++i) {
+16535:     construct(vec_[i], y[i], ROUND_UP);
+16535:     bump_size();
+16535:   }
+16535: # 53 "../../src/DB_Row_templates.hh"
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: DB_Row_Impl_Handler<T>::
+16535: Impl::expand_within_capacity(const dimension_type new_size) {
+16535:   ((void) 0);
+16535: # 68 "../../src/DB_Row_templates.hh"
+16535:   for (dimension_type i = size(); i < new_size; ++i) {
+16535:     new(&vec_[i]) T(PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     bump_size();
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: DB_Row_Impl_Handler<T>::Impl::shrink(dimension_type new_size) {
+16535:   const dimension_type old_size = size();
+16535:   ((void) 0);
+16535: 
+16535:   set_size(new_size);
+16535: # 89 "../../src/DB_Row_templates.hh"
+16535:   for (dimension_type i = old_size; i-- > new_size; ) {
+16535:     vec_[i].~T();
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: DB_Row_Impl_Handler<T>::Impl::copy_construct_coefficients(const Impl& y) {
+16535:   const dimension_type y_size = y.size();
+16535: 
+16535: 
+16535:   for (dimension_type i = 0; i < y_size; ++i) {
+16535:     new(&vec_[i]) T(y.vec_[i]);
+16535:     bump_size();
+16535:   }
+16535: # 115 "../../src/DB_Row_templates.hh"
+16535: }
+16535: 
+16535: template <typename T>
+16535: memory_size_type
+16535: DB_Row_Impl_Handler<T>::Impl::external_memory_in_bytes() const {
+16535:   memory_size_type n = 0;
+16535:   for (dimension_type i = size(); i-- > 0; ) {
+16535:     n += Parma_Polyhedra_Library::external_memory_in_bytes(vec_[i]);
+16535:   }
+16535:   return n;
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: DB_Row<T>::OK(const dimension_type row_size,
+16535:               const dimension_type
+16535: 
+16535: 
+16535: 
+16535:               ) const {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const DB_Row<T>& x = *this;
+16535:   bool is_broken = false;
+16535: # 163 "../../src/DB_Row_templates.hh"
+16535:   if (x.size() != row_size) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     is_broken = true;
+16535:   }
+16535: # 183 "../../src/DB_Row_templates.hh"
+16535:   for (dimension_type i = x.size(); i-- > 0; ) {
+16535:     const T& element = x[i];
+16535: 
+16535:     if (!element.OK()) {
+16535:       is_broken = true;
+16535:       break;
+16535:     }
+16535: 
+16535:     if (is_not_a_number(element)) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       is_broken = true;
+16535:       break;
+16535:     }
+16535:   }
+16535: 
+16535:   return !is_broken;
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: bool
+16535: operator==(const DB_Row<T>& x, const DB_Row<T>& y) {
+16535:   if (x.size() != y.size()) {
+16535:     return false;
+16535:   }
+16535:   for (dimension_type i = x.size(); i-- > 0; ) {
+16535:     if (x[i] != y[i]) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: }
+16535: # 469 "../../src/DB_Row_defs.hh" 2
+16535: # 30 "../../src/DB_Matrix_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: std::ostream&
+16535: operator<<(std::ostream& s, const DB_Matrix<T>& c);
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 61 "../../src/DB_Matrix_defs.hh"
+16535: template <typename T>
+16535: class Parma_Polyhedra_Library::DB_Matrix {
+16535: public:
+16535: 
+16535:   static dimension_type max_num_rows();
+16535: 
+16535: 
+16535:   static dimension_type max_num_columns();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   DB_Matrix();
+16535: 
+16535: 
+16535:   explicit DB_Matrix(dimension_type n_rows);
+16535: 
+16535: 
+16535:   DB_Matrix(const DB_Matrix& y);
+16535: 
+16535: 
+16535:   template <typename U>
+16535:   explicit DB_Matrix(const DB_Matrix<U>& y);
+16535: 
+16535: 
+16535:   ~DB_Matrix();
+16535: 
+16535: 
+16535:   DB_Matrix& operator=(const DB_Matrix& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   class const_iterator {
+16535:   private:
+16535:     typedef typename std::vector<DB_Row<T> >::const_iterator Iter;
+16535: 
+16535:     Iter i;
+16535: 
+16535:   public:
+16535:     typedef std::forward_iterator_tag iterator_category;
+16535:     typedef typename std::iterator_traits<Iter>::value_type value_type;
+16535:     typedef typename std::iterator_traits<Iter>::difference_type
+16535:     difference_type;
+16535:     typedef typename std::iterator_traits<Iter>::pointer pointer;
+16535:     typedef typename std::iterator_traits<Iter>::reference reference;
+16535: 
+16535: 
+16535:     const_iterator();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     explicit const_iterator(const Iter& b);
+16535: 
+16535: 
+16535:     const_iterator(const const_iterator& y);
+16535: 
+16535: 
+16535:     const_iterator& operator=(const const_iterator& y);
+16535: 
+16535: 
+16535:     reference operator*() const;
+16535: 
+16535: 
+16535:     pointer operator->() const;
+16535: 
+16535: 
+16535:     const_iterator& operator++();
+16535: 
+16535: 
+16535:     const_iterator operator++(int);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     bool operator==(const const_iterator& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     bool operator!=(const const_iterator& y) const;
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const_iterator begin() const;
+16535: 
+16535: 
+16535:   const_iterator end() const;
+16535: 
+16535: private:
+16535:   template <typename U> friend class DB_Matrix;
+16535: 
+16535: 
+16535:   std::vector<DB_Row<T> > rows;
+16535: 
+16535: 
+16535:   dimension_type row_size;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type row_capacity;
+16535: 
+16535: public:
+16535: 
+16535:   void m_swap(DB_Matrix& y);
+16535: # 188 "../../src/DB_Matrix_defs.hh"
+16535:   void grow(dimension_type new_n_rows);
+16535: # 198 "../../src/DB_Matrix_defs.hh"
+16535:   void resize_no_copy(dimension_type new_n_rows);
+16535: 
+16535: 
+16535:   dimension_type num_rows() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   DB_Row<T>& operator[](dimension_type k);
+16535: 
+16535: 
+16535:   const DB_Row<T>& operator[](dimension_type k) const;
+16535: 
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: };
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: void swap(DB_Matrix<T>& x, DB_Matrix<T>& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: bool operator==(const DB_Matrix<T>& x, const DB_Matrix<T>& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: bool operator!=(const DB_Matrix<T>& x, const DB_Matrix<T>& y);
+16535: # 267 "../../src/DB_Matrix_defs.hh"
+16535: template <typename Temp, typename To, typename T>
+16535: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                  const DB_Matrix<T>& x,
+16535:                                  const DB_Matrix<T>& y,
+16535:                                  Rounding_Dir dir,
+16535:                                  Temp& tmp0,
+16535:                                  Temp& tmp1,
+16535:                                  Temp& tmp2);
+16535: # 289 "../../src/DB_Matrix_defs.hh"
+16535: template <typename Temp, typename To, typename T>
+16535: bool euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                const DB_Matrix<T>& x,
+16535:                                const DB_Matrix<T>& y,
+16535:                                Rounding_Dir dir,
+16535:                                Temp& tmp0,
+16535:                                Temp& tmp1,
+16535:                                Temp& tmp2);
+16535: # 311 "../../src/DB_Matrix_defs.hh"
+16535: template <typename Temp, typename To, typename T>
+16535: bool l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                 const DB_Matrix<T>& x,
+16535:                                 const DB_Matrix<T>& y,
+16535:                                 Rounding_Dir dir,
+16535:                                 Temp& tmp0,
+16535:                                 Temp& tmp1,
+16535:                                 Temp& tmp2);
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/DB_Matrix_inlines.hh" 1
+16535: # 33 "../../src/DB_Matrix_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: DB_Matrix<T>::m_swap(DB_Matrix& y) {
+16535:   using std::swap;
+16535:   swap(rows, y.rows);
+16535:   swap(row_size, y.row_size);
+16535:   swap(row_capacity, y.row_capacity);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: DB_Matrix<T>::max_num_rows() {
+16535:   return std::vector<DB_Row<T> >().max_size();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: DB_Matrix<T>::max_num_columns() {
+16535:   return DB_Row<T>::max_size();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline memory_size_type
+16535: DB_Matrix<T>::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: DB_Matrix<T>::const_iterator::const_iterator()
+16535:   : i(Iter()) {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: DB_Matrix<T>::const_iterator::const_iterator(const Iter& b)
+16535:   : i(b) {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: DB_Matrix<T>::const_iterator::const_iterator(const const_iterator& y)
+16535:   : i(y.i) {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename DB_Matrix<T>::const_iterator&
+16535: DB_Matrix<T>::const_iterator::operator=(const const_iterator& y) {
+16535:   i = y.i;
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename DB_Matrix<T>::const_iterator::reference
+16535: DB_Matrix<T>::const_iterator::operator*() const {
+16535:   return *i;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename DB_Matrix<T>::const_iterator::pointer
+16535: DB_Matrix<T>::const_iterator::operator->() const {
+16535:   return &*i;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename DB_Matrix<T>::const_iterator&
+16535: DB_Matrix<T>::const_iterator::operator++() {
+16535:   ++i;
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename DB_Matrix<T>::const_iterator
+16535: DB_Matrix<T>::const_iterator::operator++(int) {
+16535:   return const_iterator(i++);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: DB_Matrix<T>::const_iterator::operator==(const const_iterator& y) const {
+16535:   return i == y.i;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: DB_Matrix<T>::const_iterator::operator!=(const const_iterator& y) const {
+16535:   return !operator==(y);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename DB_Matrix<T>::const_iterator
+16535: DB_Matrix<T>::begin() const {
+16535:   return const_iterator(rows.begin());
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename DB_Matrix<T>::const_iterator
+16535: DB_Matrix<T>::end() const {
+16535:   return const_iterator(rows.end());
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: DB_Matrix<T>::DB_Matrix()
+16535:   : rows(),
+16535:     row_size(0),
+16535:     row_capacity(0) {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: DB_Matrix<T>::~DB_Matrix() {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline DB_Row<T>&
+16535: DB_Matrix<T>::operator[](const dimension_type k) {
+16535:   ((void) 0);
+16535:   return rows[k];
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline const DB_Row<T>&
+16535: DB_Matrix<T>::operator[](const dimension_type k) const {
+16535:   ((void) 0);
+16535:   return rows[k];
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: DB_Matrix<T>::num_rows() const {
+16535:   return rows.size();
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: operator!=(const DB_Matrix<T>& x, const DB_Matrix<T>& y) {
+16535:   return !(x == y);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: DB_Matrix<T>::DB_Matrix(const DB_Matrix& y)
+16535:   : rows(y.rows),
+16535:     row_size(y.row_size),
+16535:     row_capacity(compute_capacity(y.row_size, max_num_columns())) {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline DB_Matrix<T>&
+16535: DB_Matrix<T>::operator=(const DB_Matrix& y) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (this != &y) {
+16535: 
+16535:     rows = y.rows;
+16535:     row_size = y.row_size;
+16535: 
+16535: 
+16535:     row_capacity = compute_capacity(y.row_size, max_num_columns());
+16535:   }
+16535:   return *this;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Specialization, typename Temp, typename To, typename T>
+16535: inline bool
+16535: l_m_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                     const DB_Matrix<T>& x,
+16535:                     const DB_Matrix<T>& y,
+16535:                     const Rounding_Dir dir,
+16535:                     Temp& tmp0,
+16535:                     Temp& tmp1,
+16535:                     Temp& tmp2) {
+16535:   const dimension_type x_num_rows = x.num_rows();
+16535:   if (x_num_rows != y.num_rows()) {
+16535:     return false;
+16535:   }
+16535:   assign_r(tmp0, 0, ROUND_NOT_NEEDED);
+16535:   for (dimension_type i = x_num_rows; i-- > 0; ) {
+16535:     const DB_Row<T>& x_i = x[i];
+16535:     const DB_Row<T>& y_i = y[i];
+16535:     for (dimension_type j = x_num_rows; j-- > 0; ) {
+16535:       const T& x_i_j = x_i[j];
+16535:       const T& y_i_j = y_i[j];
+16535:       if (is_plus_infinity(x_i_j)) {
+16535:         if (is_plus_infinity(y_i_j)) {
+16535:           continue;
+16535:         }
+16535:         else {
+16535:         pinf:
+16535:           assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:           return true;
+16535:         }
+16535:       }
+16535:       else if (is_plus_infinity(y_i_j)) {
+16535:         goto pinf;
+16535:       }
+16535:       const Temp* tmp1p;
+16535:       const Temp* tmp2p;
+16535:       if (x_i_j > y_i_j) {
+16535:         maybe_assign(tmp1p, tmp1, x_i_j, dir);
+16535:         maybe_assign(tmp2p, tmp2, y_i_j, inverse(dir));
+16535:       }
+16535:       else {
+16535:         maybe_assign(tmp1p, tmp1, y_i_j, dir);
+16535:         maybe_assign(tmp2p, tmp2, x_i_j, inverse(dir));
+16535:       }
+16535:       sub_assign_r(tmp1, *tmp1p, *tmp2p, dir);
+16535:       ((void) 0);
+16535:       Specialization::combine(tmp0, tmp1, dir);
+16535:     }
+16535:   }
+16535:   Specialization::finalize(tmp0, dir);
+16535:   assign_r(r, tmp0, dir);
+16535:   return true;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename T>
+16535: inline bool
+16535: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                             const DB_Matrix<T>& x,
+16535:                             const DB_Matrix<T>& y,
+16535:                             const Rounding_Dir dir,
+16535:                             Temp& tmp0,
+16535:                             Temp& tmp1,
+16535:                             Temp& tmp2) {
+16535:   return
+16535:     l_m_distance_assign<Rectilinear_Distance_Specialization<Temp> >(r, x, y,
+16535:                                                                     dir,
+16535:                                                                     tmp0,
+16535:                                                                     tmp1,
+16535:                                                                     tmp2);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename T>
+16535: inline bool
+16535: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                           const DB_Matrix<T>& x,
+16535:                           const DB_Matrix<T>& y,
+16535:                           const Rounding_Dir dir,
+16535:                           Temp& tmp0,
+16535:                           Temp& tmp1,
+16535:                           Temp& tmp2) {
+16535:   return
+16535:     l_m_distance_assign<Euclidean_Distance_Specialization<Temp> >(r, x, y,
+16535:                                                                   dir,
+16535:                                                                   tmp0,
+16535:                                                                   tmp1,
+16535:                                                                   tmp2);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename T>
+16535: inline bool
+16535: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                            const DB_Matrix<T>& x,
+16535:                            const DB_Matrix<T>& y,
+16535:                            const Rounding_Dir dir,
+16535:                            Temp& tmp0,
+16535:                            Temp& tmp1,
+16535:                            Temp& tmp2) {
+16535:   return
+16535:     l_m_distance_assign<L_Infinity_Distance_Specialization<Temp> >(r, x, y,
+16535:                                                                    dir,
+16535:                                                                    tmp0,
+16535:                                                                    tmp1,
+16535:                                                                    tmp2);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: swap(DB_Matrix<T>& x, DB_Matrix<T>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 323 "../../src/DB_Matrix_defs.hh" 2
+16535: # 1 "../../src/DB_Matrix_templates.hh" 1
+16535: # 27 "../../src/DB_Matrix_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: DB_Matrix<T>::DB_Matrix(const dimension_type n_rows)
+16535:   : rows(n_rows),
+16535:     row_size(n_rows),
+16535:     row_capacity(compute_capacity(n_rows, max_num_columns())) {
+16535: 
+16535:   for (dimension_type i = 0; i < n_rows; ++i) {
+16535:     rows[i].construct(n_rows, row_capacity);
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: DB_Matrix<T>::DB_Matrix(const DB_Matrix<U>& y)
+16535:   : rows(y.rows.size()),
+16535:     row_size(y.row_size),
+16535:     row_capacity(compute_capacity(y.row_size, max_num_columns())) {
+16535: 
+16535:   for (dimension_type i = 0, n_rows = rows.size(); i < n_rows; ++i) {
+16535:     rows[i].construct_upward_approximation(y[i], row_capacity);
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: DB_Matrix<T>::grow(const dimension_type new_n_rows) {
+16535:   const dimension_type old_n_rows = rows.size();
+16535:   ((void) 0);
+16535: 
+16535:   if (new_n_rows > old_n_rows) {
+16535:     if (new_n_rows <= row_capacity) {
+16535: 
+16535:       if (rows.capacity() < new_n_rows) {
+16535: 
+16535:         std::vector<DB_Row<T> > new_rows;
+16535:         new_rows.reserve(compute_capacity(new_n_rows, max_num_rows()));
+16535:         new_rows.insert(new_rows.end(), new_n_rows, DB_Row<T>());
+16535: 
+16535:         dimension_type i = new_n_rows;
+16535:         while (i-- > old_n_rows) {
+16535:           new_rows[i].construct(new_n_rows, row_capacity);
+16535:         }
+16535: 
+16535:         ++i;
+16535:         while (i-- > 0) {
+16535:           swap(new_rows[i], rows[i]);
+16535:         }
+16535: 
+16535:         using std::swap;
+16535:         swap(rows, new_rows);
+16535:       }
+16535:       else {
+16535: 
+16535:         rows.insert(rows.end(), new_n_rows - old_n_rows, DB_Row<T>());
+16535:         for (dimension_type i = new_n_rows; i-- > old_n_rows; ) {
+16535:           rows[i].construct(new_n_rows, row_capacity);
+16535:         }
+16535:       }
+16535:     }
+16535:     else {
+16535: 
+16535:       DB_Matrix new_matrix;
+16535:       new_matrix.rows.reserve(compute_capacity(new_n_rows, max_num_rows()));
+16535:       new_matrix.rows.insert(new_matrix.rows.end(), new_n_rows, DB_Row<T>());
+16535: 
+16535:       new_matrix.row_size = new_n_rows;
+16535:       new_matrix.row_capacity = compute_capacity(new_n_rows,
+16535:                                                  max_num_columns());
+16535:       dimension_type i = new_n_rows;
+16535:       while (i-- > old_n_rows) {
+16535:         new_matrix.rows[i].construct(new_matrix.row_size,
+16535:                                      new_matrix.row_capacity);
+16535:       }
+16535: 
+16535:       ++i;
+16535:       while (i-- > 0) {
+16535: 
+16535:         DB_Row<T> new_row(rows[i],
+16535:                           new_matrix.row_size,
+16535:                           new_matrix.row_capacity);
+16535:         swap(new_matrix.rows[i], new_row);
+16535:       }
+16535: 
+16535:       m_swap(new_matrix);
+16535:       return;
+16535:     }
+16535:   }
+16535: 
+16535:   if (new_n_rows > row_size) {
+16535: 
+16535:     if (new_n_rows <= row_capacity) {
+16535: 
+16535:       for (dimension_type i = old_n_rows; i-- > 0; ) {
+16535:         rows[i].expand_within_capacity(new_n_rows);
+16535:       }
+16535:     }
+16535:     else {
+16535: 
+16535: 
+16535:       const dimension_type new_row_capacity
+16535:         = compute_capacity(new_n_rows, max_num_columns());
+16535:       for (dimension_type i = old_n_rows; i-- > 0; ) {
+16535: 
+16535:         DB_Row<T> new_row(rows[i], new_n_rows, new_row_capacity);
+16535:         swap(rows[i], new_row);
+16535:       }
+16535:       row_capacity = new_row_capacity;
+16535:     }
+16535: 
+16535:     row_size = new_n_rows;
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: DB_Matrix<T>::resize_no_copy(const dimension_type new_n_rows) {
+16535:   dimension_type old_n_rows = rows.size();
+16535: 
+16535:   if (new_n_rows > old_n_rows) {
+16535: 
+16535:     if (new_n_rows <= row_capacity) {
+16535: 
+16535:       if (rows.capacity() < new_n_rows) {
+16535: 
+16535:         std::vector<DB_Row<T> > new_rows;
+16535:         new_rows.reserve(compute_capacity(new_n_rows, max_num_rows()));
+16535:         new_rows.insert(new_rows.end(), new_n_rows, DB_Row<T>());
+16535: 
+16535: 
+16535:         dimension_type i = new_n_rows;
+16535:         while (i-- > old_n_rows) {
+16535:           new_rows[i].construct(new_n_rows, row_capacity);
+16535: 
+16535:         }
+16535:         ++i;
+16535:         while (i-- > 0) {
+16535:           swap(new_rows[i], rows[i]);
+16535:         }
+16535: 
+16535:         using std::swap;
+16535:         swap(rows, new_rows);
+16535:       }
+16535:       else {
+16535: 
+16535:         rows.insert(rows.end(), new_n_rows - old_n_rows, DB_Row<T>());
+16535: 
+16535: 
+16535:         for (dimension_type i = new_n_rows; i-- > old_n_rows; ) {
+16535:           rows[i].construct(new_n_rows, row_capacity);
+16535:         }
+16535:       }
+16535:     }
+16535:     else {
+16535: 
+16535:       DB_Matrix new_matrix(new_n_rows);
+16535:       m_swap(new_matrix);
+16535:       return;
+16535:     }
+16535:   }
+16535:   else if (new_n_rows < old_n_rows) {
+16535: 
+16535:     rows.resize(new_n_rows);
+16535: 
+16535:     for (dimension_type i = new_n_rows; i-- > 0; ) {
+16535:       rows[i].shrink(new_n_rows);
+16535:     }
+16535:     old_n_rows = new_n_rows;
+16535:   }
+16535: 
+16535:   if (new_n_rows > row_size) {
+16535: 
+16535:     if (new_n_rows <= row_capacity) {
+16535: 
+16535:       for (dimension_type i = old_n_rows; i-- > 0; ) {
+16535:         rows[i].expand_within_capacity(new_n_rows);
+16535:       }
+16535:     }
+16535:     else {
+16535: 
+16535: 
+16535:       const dimension_type new_row_capacity
+16535:         = compute_capacity(new_n_rows, max_num_columns());
+16535:       for (dimension_type i = old_n_rows; i-- > 0; ) {
+16535:         DB_Row<T> new_row(new_n_rows, new_row_capacity);
+16535:         swap(rows[i], new_row);
+16535:       }
+16535:       row_capacity = new_row_capacity;
+16535:     }
+16535:   }
+16535: 
+16535:   row_size = new_n_rows;
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: DB_Matrix<T>::ascii_dump(std::ostream& s) const {
+16535:   const DB_Matrix<T>& x = *this;
+16535:   const char separator = ' ';
+16535:   const dimension_type nrows = x.num_rows();
+16535:   s << nrows << separator << "\n";
+16535:   for (dimension_type i = 0; i < nrows; ++i) {
+16535:     for (dimension_type j = 0; j < nrows; ++j) {
+16535:       using namespace IO_Operators;
+16535:       s << x[i][j] << separator;
+16535:     }
+16535:     s << "\n";
+16535:   }
+16535: }
+16535: 
+16535: template <typename T> void DB_Matrix<T>::ascii_dump() const { ascii_dump(std::cerr); } template <typename T> void DB_Matrix<T>::print() const { using IO_Operators::operator<<; std::cerr << *this; }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: DB_Matrix<T>::ascii_load(std::istream& s) {
+16535:   dimension_type nrows;
+16535:   if (!(s >> nrows)) {
+16535:     return false;
+16535:   }
+16535:   resize_no_copy(nrows);
+16535:   DB_Matrix& x = *this;
+16535:   for (dimension_type i = 0; i < nrows; ++i) {
+16535:     for (dimension_type j = 0; j < nrows; ++j) {
+16535:       Result r = input(x[i][j], s, ROUND_CHECK);
+16535:       if (result_relation(r) != VR_EQ || is_minus_infinity(x[i][j])) {
+16535:         return false;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   return true;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: bool
+16535: operator==(const DB_Matrix<T>& x, const DB_Matrix<T>& y) {
+16535:   const dimension_type x_num_rows = x.num_rows();
+16535:   if (x_num_rows != y.num_rows()) {
+16535:     return false;
+16535:   }
+16535:   for (dimension_type i = x_num_rows; i-- > 0; ) {
+16535:     if (x[i] != y[i]) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename T>
+16535: memory_size_type
+16535: DB_Matrix<T>::external_memory_in_bytes() const {
+16535:   memory_size_type n = rows.capacity() * sizeof(DB_Row<T>);
+16535:   for (dimension_type i = num_rows(); i-- > 0; ) {
+16535:     n += rows[i].external_memory_in_bytes(row_capacity);
+16535:   }
+16535:   return n;
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: DB_Matrix<T>::OK() const {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (num_rows() != row_size) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     return false;
+16535:   }
+16535: 
+16535:   const DB_Matrix& x = *this;
+16535:   const dimension_type n_rows = x.num_rows();
+16535:   for (dimension_type i = 0; i < n_rows; ++i) {
+16535:     if (!x[i].OK(row_size, row_capacity)) {
+16535:       return false;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   return true;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: std::ostream&
+16535: IO_Operators::operator<<(std::ostream& s, const DB_Matrix<T>& c) {
+16535:   const dimension_type n = c.num_rows();
+16535:   for (dimension_type i = 0; i < n; ++i) {
+16535:     for (dimension_type j = 0; j < n; ++j) {
+16535:       s << c[i][j] << " ";
+16535:     }
+16535:     s << "\n";
+16535:   }
+16535:   return s;
+16535: }
+16535: 
+16535: }
+16535: # 324 "../../src/DB_Matrix_defs.hh" 2
+16535: # 45 "../../src/BD_Shape_defs.hh" 2
+16535: 
+16535: 
+16535: # 1 "../../src/WRD_coefficient_types_defs.hh" 1
+16535: # 29 "../../src/WRD_coefficient_types_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: struct WRD_Extended_Number_Policy {
+16535: 
+16535:   enum const_bool_value_check_overflow { check_overflow = (true) };
+16535: 
+16535: 
+16535:   enum const_bool_value_check_inf_add_inf { check_inf_add_inf = (false) };
+16535: 
+16535: 
+16535:   enum const_bool_value_check_inf_sub_inf { check_inf_sub_inf = (false) };
+16535: 
+16535: 
+16535:   enum const_bool_value_check_inf_mul_zero { check_inf_mul_zero = (false) };
+16535: 
+16535: 
+16535:   enum const_bool_value_check_div_zero { check_div_zero = (false) };
+16535: 
+16535: 
+16535:   enum const_bool_value_check_inf_div_inf { check_inf_div_inf = (false) };
+16535: 
+16535: 
+16535:   enum const_bool_value_check_inf_mod { check_inf_mod = (false) };
+16535: 
+16535: 
+16535:   enum const_bool_value_check_sqrt_neg { check_sqrt_neg = (false) };
+16535: 
+16535: 
+16535:   enum const_bool_value_has_nan { has_nan = (true) };
+16535: 
+16535: 
+16535:   enum const_bool_value_has_infinity { has_infinity = (true) };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   enum const_bool_value_fpu_check_inexact { fpu_check_inexact = (true) };
+16535: 
+16535: 
+16535:   enum const_bool_value_fpu_check_nan_result { fpu_check_nan_result = (false) };
+16535: # 87 "../../src/WRD_coefficient_types_defs.hh"
+16535:   static void handle_result(Result r);
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: struct Debug_WRD_Extended_Number_Policy {
+16535: 
+16535:   enum const_bool_value_check_overflow { check_overflow = (true) };
+16535: 
+16535: 
+16535:   enum const_bool_value_check_inf_add_inf { check_inf_add_inf = (true) };
+16535: 
+16535: 
+16535:   enum const_bool_value_check_inf_sub_inf { check_inf_sub_inf = (true) };
+16535: 
+16535: 
+16535:   enum const_bool_value_check_inf_mul_zero { check_inf_mul_zero = (true) };
+16535: 
+16535: 
+16535:   enum const_bool_value_check_div_zero { check_div_zero = (true) };
+16535: 
+16535: 
+16535:   enum const_bool_value_check_inf_div_inf { check_inf_div_inf = (true) };
+16535: 
+16535: 
+16535:   enum const_bool_value_check_inf_mod { check_inf_mod = (true) };
+16535: 
+16535: 
+16535:   enum const_bool_value_check_sqrt_neg { check_sqrt_neg = (true) };
+16535: 
+16535: 
+16535:   enum const_bool_value_has_nan { has_nan = (true) };
+16535: 
+16535: 
+16535:   enum const_bool_value_has_infinity { has_infinity = (true) };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   enum const_bool_value_fpu_check_inexact { fpu_check_inexact = (true) };
+16535: 
+16535: 
+16535:   enum const_bool_value_fpu_check_nan_result { fpu_check_nan_result = (true) };
+16535: # 146 "../../src/WRD_coefficient_types_defs.hh"
+16535:   static void handle_result(Result r);
+16535: };
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/WRD_coefficient_types_inlines.hh" 1
+16535: # 27 "../../src/WRD_coefficient_types_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline void
+16535: WRD_Extended_Number_Policy::handle_result(Result r) {
+16535:   if (result_class(r) == VC_NAN) {
+16535:     throw_result_exception(r);
+16535:   }
+16535: }
+16535: 
+16535: inline void
+16535: Debug_WRD_Extended_Number_Policy::handle_result(Result r) {
+16535:   if (result_class(r) == VC_NAN) {
+16535:     throw_result_exception(r);
+16535:   }
+16535: }
+16535: 
+16535: }
+16535: # 152 "../../src/WRD_coefficient_types_defs.hh" 2
+16535: # 48 "../../src/BD_Shape_defs.hh" 2
+16535: # 56 "../../src/BD_Shape_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace IO_Operators {
+16535: # 68 "../../src/BD_Shape_defs.hh"
+16535: template <typename T>
+16535: std::ostream&
+16535: operator<<(std::ostream& s, const BD_Shape<T>& bds);
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: void swap(BD_Shape<T>& x, BD_Shape<T>& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: bool operator==(const BD_Shape<T>& x, const BD_Shape<T>& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: bool operator!=(const BD_Shape<T>& x, const BD_Shape<T>& y);
+16535: # 106 "../../src/BD_Shape_defs.hh"
+16535: template <typename To, typename T>
+16535: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                  const BD_Shape<T>& x,
+16535:                                  const BD_Shape<T>& y,
+16535:                                  Rounding_Dir dir);
+16535: # 123 "../../src/BD_Shape_defs.hh"
+16535: template <typename Temp, typename To, typename T>
+16535: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                  const BD_Shape<T>& x,
+16535:                                  const BD_Shape<T>& y,
+16535:                                  Rounding_Dir dir);
+16535: # 140 "../../src/BD_Shape_defs.hh"
+16535: template <typename Temp, typename To, typename T>
+16535: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                  const BD_Shape<T>& x,
+16535:                                  const BD_Shape<T>& y,
+16535:                                  Rounding_Dir dir,
+16535:                                  Temp& tmp0,
+16535:                                  Temp& tmp1,
+16535:                                  Temp& tmp2);
+16535: # 160 "../../src/BD_Shape_defs.hh"
+16535: template <typename To, typename T>
+16535: bool euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                const BD_Shape<T>& x,
+16535:                                const BD_Shape<T>& y,
+16535:                                Rounding_Dir dir);
+16535: # 177 "../../src/BD_Shape_defs.hh"
+16535: template <typename Temp, typename To, typename T>
+16535: bool euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                const BD_Shape<T>& x,
+16535:                                const BD_Shape<T>& y,
+16535:                                Rounding_Dir dir);
+16535: # 194 "../../src/BD_Shape_defs.hh"
+16535: template <typename Temp, typename To, typename T>
+16535: bool euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                const BD_Shape<T>& x,
+16535:                                const BD_Shape<T>& y,
+16535:                                Rounding_Dir dir,
+16535:                                Temp& tmp0,
+16535:                                Temp& tmp1,
+16535:                                Temp& tmp2);
+16535: # 214 "../../src/BD_Shape_defs.hh"
+16535: template <typename To, typename T>
+16535: bool l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                 const BD_Shape<T>& x,
+16535:                                 const BD_Shape<T>& y,
+16535:                                 Rounding_Dir dir);
+16535: # 231 "../../src/BD_Shape_defs.hh"
+16535: template <typename Temp, typename To, typename T>
+16535: bool l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                 const BD_Shape<T>& x,
+16535:                                 const BD_Shape<T>& y,
+16535:                                 Rounding_Dir dir);
+16535: # 248 "../../src/BD_Shape_defs.hh"
+16535: template <typename Temp, typename To, typename T>
+16535: bool l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                 const BD_Shape<T>& x,
+16535:                                 const BD_Shape<T>& y,
+16535:                                 Rounding_Dir dir,
+16535:                                 Temp& tmp0,
+16535:                                 Temp& tmp1,
+16535:                                 Temp& tmp2);
+16535: 
+16535: 
+16535: 
+16535: class BD_Shape_Helpers {
+16535: public:
+16535: # 294 "../../src/BD_Shape_defs.hh"
+16535:   static bool extract_bounded_difference(const Constraint& c,
+16535:                                          dimension_type& c_num_vars,
+16535:                                          dimension_type& c_first_var,
+16535:                                          dimension_type& c_second_var,
+16535:                                          Coefficient& c_coeff);
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: void compute_leader_indices(const std::vector<dimension_type>& predecessor,
+16535:                             std::vector<dimension_type>& indices);
+16535: 
+16535: }
+16535: # 411 "../../src/BD_Shape_defs.hh"
+16535: template <typename T>
+16535: class Parma_Polyhedra_Library::BD_Shape {
+16535: private:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef Checked_Number<T, WRD_Extended_Number_Policy> N;
+16535: 
+16535: 
+16535: public:
+16535: 
+16535:   typedef T coefficient_type_base;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef N coefficient_type;
+16535: 
+16535: 
+16535:   static dimension_type max_space_dimension();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static bool can_recycle_constraint_systems();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static bool can_recycle_congruence_systems();
+16535: # 458 "../../src/BD_Shape_defs.hh"
+16535:   explicit BD_Shape(dimension_type num_dimensions = 0,
+16535:                     Degenerate_Element kind = UNIVERSE);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   BD_Shape(const BD_Shape& y,
+16535:            Complexity_Class complexity = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename U>
+16535:   explicit BD_Shape(const BD_Shape<U>& y,
+16535:                     Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 487 "../../src/BD_Shape_defs.hh"
+16535:   explicit BD_Shape(const Constraint_System& cs);
+16535: # 500 "../../src/BD_Shape_defs.hh"
+16535:   explicit BD_Shape(const Congruence_System& cgs);
+16535: # 510 "../../src/BD_Shape_defs.hh"
+16535:   explicit BD_Shape(const Generator_System& gs);
+16535: # 519 "../../src/BD_Shape_defs.hh"
+16535:   explicit BD_Shape(const Polyhedron& ph,
+16535:                     Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 538 "../../src/BD_Shape_defs.hh"
+16535:   template <typename Interval>
+16535:   explicit BD_Shape(const Box<Interval>& box,
+16535:                     Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 558 "../../src/BD_Shape_defs.hh"
+16535:   explicit BD_Shape(const Grid& grid,
+16535:                     Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 577 "../../src/BD_Shape_defs.hh"
+16535:   template <typename U>
+16535:   explicit BD_Shape(const Octagonal_Shape<U>& os,
+16535:                     Complexity_Class complexity = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   BD_Shape& operator=(const BD_Shape& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void m_swap(BD_Shape& y);
+16535: 
+16535: 
+16535:   ~BD_Shape();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type affine_dimension() const;
+16535: 
+16535: 
+16535:   Constraint_System constraints() const;
+16535: 
+16535: 
+16535:   Constraint_System minimized_constraints() const;
+16535: 
+16535: 
+16535:   Congruence_System congruences() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Congruence_System minimized_congruences() const;
+16535: # 633 "../../src/BD_Shape_defs.hh"
+16535:   bool bounds_from_above(const Linear_Expression& expr) const;
+16535: # 642 "../../src/BD_Shape_defs.hh"
+16535:   bool bounds_from_below(const Linear_Expression& expr) const;
+16535: # 668 "../../src/BD_Shape_defs.hh"
+16535:   bool maximize(const Linear_Expression& expr,
+16535:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum) const;
+16535: # 699 "../../src/BD_Shape_defs.hh"
+16535:   bool maximize(const Linear_Expression& expr,
+16535:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum,
+16535:                 Generator& g) const;
+16535: # 727 "../../src/BD_Shape_defs.hh"
+16535:   bool minimize(const Linear_Expression& expr,
+16535:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum) const;
+16535: # 758 "../../src/BD_Shape_defs.hh"
+16535:   bool minimize(const Linear_Expression& expr,
+16535:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum,
+16535:                 Generator& g) const;
+16535: # 790 "../../src/BD_Shape_defs.hh"
+16535:   bool frequency(const Linear_Expression& expr,
+16535:                  Coefficient& freq_n, Coefficient& freq_d,
+16535:                  Coefficient& val_n, Coefficient& val_d) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool contains(const BD_Shape& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool strictly_contains(const BD_Shape& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_disjoint_from(const BD_Shape& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Poly_Con_Relation relation_with(const Constraint& c) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Poly_Con_Relation relation_with(const Congruence& cg) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Poly_Gen_Relation relation_with(const Generator& g) const;
+16535: 
+16535: 
+16535:   bool is_empty() const;
+16535: 
+16535: 
+16535:   bool is_universe() const;
+16535: 
+16535: 
+16535:   bool is_discrete() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_topologically_closed() const;
+16535: 
+16535: 
+16535:   bool is_bounded() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool contains_integer_point() const;
+16535: # 868 "../../src/BD_Shape_defs.hh"
+16535:   bool constrains(Variable var) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: # 892 "../../src/BD_Shape_defs.hh"
+16535:   void add_constraint(const Constraint& c);
+16535: # 904 "../../src/BD_Shape_defs.hh"
+16535:   void add_congruence(const Congruence& cg);
+16535: # 918 "../../src/BD_Shape_defs.hh"
+16535:   void add_constraints(const Constraint_System& cs);
+16535: # 937 "../../src/BD_Shape_defs.hh"
+16535:   void add_recycled_constraints(Constraint_System& cs);
+16535: # 951 "../../src/BD_Shape_defs.hh"
+16535:   void add_congruences(const Congruence_System& cgs);
+16535: # 969 "../../src/BD_Shape_defs.hh"
+16535:   void add_recycled_congruences(Congruence_System& cgs);
+16535: # 981 "../../src/BD_Shape_defs.hh"
+16535:   void refine_with_constraint(const Constraint& c);
+16535: # 994 "../../src/BD_Shape_defs.hh"
+16535:   void refine_with_congruence(const Congruence& cg);
+16535: # 1007 "../../src/BD_Shape_defs.hh"
+16535:   void refine_with_constraints(const Constraint_System& cs);
+16535: # 1020 "../../src/BD_Shape_defs.hh"
+16535:   void refine_with_congruences(const Congruence_System& cgs);
+16535: # 1043 "../../src/BD_Shape_defs.hh"
+16535:   template <typename Interval_Info>
+16535:   void refine_with_linear_form_inequality(
+16535:                    const Linear_Form<Interval<T, Interval_Info> >& left,
+16535:                    const Linear_Form<Interval<T, Interval_Info> >& right);
+16535: # 1076 "../../src/BD_Shape_defs.hh"
+16535:   template <typename Interval_Info>
+16535:   void generalized_refine_with_linear_form_inequality(
+16535:                    const Linear_Form<Interval<T, Interval_Info> >& left,
+16535:                    const Linear_Form<Interval<T, Interval_Info> >& right,
+16535:                    Relation_Symbol relsym);
+16535: # 1112 "../../src/BD_Shape_defs.hh"
+16535:   template <typename U>
+16535:   void export_interval_constraints(U& dest) const;
+16535: # 1125 "../../src/BD_Shape_defs.hh"
+16535:   void unconstrain(Variable var);
+16535: # 1139 "../../src/BD_Shape_defs.hh"
+16535:   void unconstrain(const Variables_Set& vars);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void intersection_assign(const BD_Shape& y);
+16535: # 1155 "../../src/BD_Shape_defs.hh"
+16535:   void upper_bound_assign(const BD_Shape& y);
+16535: # 1165 "../../src/BD_Shape_defs.hh"
+16535:   bool upper_bound_assign_if_exact(const BD_Shape& y);
+16535: # 1181 "../../src/BD_Shape_defs.hh"
+16535:   bool integer_upper_bound_assign_if_exact(const BD_Shape& y);
+16535: # 1190 "../../src/BD_Shape_defs.hh"
+16535:   void difference_assign(const BD_Shape& y);
+16535: # 1201 "../../src/BD_Shape_defs.hh"
+16535:   bool simplify_using_context_assign(const BD_Shape& y);
+16535: # 1222 "../../src/BD_Shape_defs.hh"
+16535:   void affine_image(Variable var,
+16535:                     const Linear_Expression& expr,
+16535:                     Coefficient_traits::const_reference denominator
+16535:                     = Coefficient_one());
+16535: # 1244 "../../src/BD_Shape_defs.hh"
+16535:   template <typename Interval_Info>
+16535:   void affine_form_image(Variable var,
+16535:                         const Linear_Form<Interval<T, Interval_Info> >& lf);
+16535: # 1267 "../../src/BD_Shape_defs.hh"
+16535:   void affine_preimage(Variable var,
+16535:                        const Linear_Expression& expr,
+16535:                        Coefficient_traits::const_reference denominator
+16535:                        = Coefficient_one());
+16535: # 1296 "../../src/BD_Shape_defs.hh"
+16535:   void generalized_affine_image(Variable var,
+16535:                                 Relation_Symbol relsym,
+16535:                                 const Linear_Expression& expr,
+16535:                                 Coefficient_traits::const_reference denominator
+16535:                                 = Coefficient_one());
+16535: # 1321 "../../src/BD_Shape_defs.hh"
+16535:   void generalized_affine_image(const Linear_Expression& lhs,
+16535:                                 Relation_Symbol relsym,
+16535:                                 const Linear_Expression& rhs);
+16535: # 1349 "../../src/BD_Shape_defs.hh"
+16535:   void generalized_affine_preimage(Variable var,
+16535:                                    Relation_Symbol relsym,
+16535:                                    const Linear_Expression& expr,
+16535:                                    Coefficient_traits::const_reference
+16535:                                    denominator = Coefficient_one());
+16535: # 1374 "../../src/BD_Shape_defs.hh"
+16535:   void generalized_affine_preimage(const Linear_Expression& lhs,
+16535:                                    Relation_Symbol relsym,
+16535:                                    const Linear_Expression& rhs);
+16535: # 1404 "../../src/BD_Shape_defs.hh"
+16535:   void bounded_affine_image(Variable var,
+16535:                             const Linear_Expression& lb_expr,
+16535:                             const Linear_Expression& ub_expr,
+16535:                             Coefficient_traits::const_reference denominator
+16535:                             = Coefficient_one());
+16535: # 1436 "../../src/BD_Shape_defs.hh"
+16535:   void bounded_affine_preimage(Variable var,
+16535:                                const Linear_Expression& lb_expr,
+16535:                                const Linear_Expression& ub_expr,
+16535:                                Coefficient_traits::const_reference denominator
+16535:                                = Coefficient_one());
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void time_elapse_assign(const BD_Shape& y);
+16535: # 1496 "../../src/BD_Shape_defs.hh"
+16535:   void wrap_assign(const Variables_Set& vars,
+16535:                    Bounded_Integer_Type_Width w,
+16535:                    Bounded_Integer_Type_Representation r,
+16535:                    Bounded_Integer_Type_Overflow o,
+16535:                    const Constraint_System* cs_p = 0,
+16535:                    unsigned complexity_threshold = 16,
+16535:                    bool wrap_individually = true);
+16535: # 1515 "../../src/BD_Shape_defs.hh"
+16535:   void drop_some_non_integer_points(Complexity_Class complexity
+16535:                                     = ANY_COMPLEXITY);
+16535: # 1533 "../../src/BD_Shape_defs.hh"
+16535:   void drop_some_non_integer_points(const Variables_Set& vars,
+16535:                                     Complexity_Class complexity
+16535:                                     = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535:   void topological_closure_assign();
+16535: # 1555 "../../src/BD_Shape_defs.hh"
+16535:   void CC76_extrapolation_assign(const BD_Shape& y, unsigned* tp = 0);
+16535: # 1578 "../../src/BD_Shape_defs.hh"
+16535:   template <typename Iterator>
+16535:   void CC76_extrapolation_assign(const BD_Shape& y,
+16535:                                  Iterator first, Iterator last,
+16535:                                  unsigned* tp = 0);
+16535: # 1598 "../../src/BD_Shape_defs.hh"
+16535:   void BHMZ05_widening_assign(const BD_Shape& y, unsigned* tp = 0);
+16535: # 1620 "../../src/BD_Shape_defs.hh"
+16535:   void limited_BHMZ05_extrapolation_assign(const BD_Shape& y,
+16535:                                            const Constraint_System& cs,
+16535:                                            unsigned* tp = 0);
+16535: # 1643 "../../src/BD_Shape_defs.hh"
+16535:   void CC76_narrowing_assign(const BD_Shape& y);
+16535: # 1665 "../../src/BD_Shape_defs.hh"
+16535:   void limited_CC76_extrapolation_assign(const BD_Shape& y,
+16535:                                          const Constraint_System& cs,
+16535:                                          unsigned* tp = 0);
+16535: # 1684 "../../src/BD_Shape_defs.hh"
+16535:   void H79_widening_assign(const BD_Shape& y, unsigned* tp = 0);
+16535: 
+16535: 
+16535:   void widening_assign(const BD_Shape& y, unsigned* tp = 0);
+16535: # 1708 "../../src/BD_Shape_defs.hh"
+16535:   void limited_H79_extrapolation_assign(const BD_Shape& y,
+16535:                                         const Constraint_System& cs,
+16535:                                         unsigned* tp = 0);
+16535: # 1735 "../../src/BD_Shape_defs.hh"
+16535:   void add_space_dimensions_and_embed(dimension_type m);
+16535: # 1758 "../../src/BD_Shape_defs.hh"
+16535:   void add_space_dimensions_and_project(dimension_type m);
+16535: # 1768 "../../src/BD_Shape_defs.hh"
+16535:   void concatenate_assign(const BD_Shape& y);
+16535: # 1779 "../../src/BD_Shape_defs.hh"
+16535:   void remove_space_dimensions(const Variables_Set& vars);
+16535: # 1789 "../../src/BD_Shape_defs.hh"
+16535:   void remove_higher_space_dimensions(dimension_type new_dimension);
+16535: # 1828 "../../src/BD_Shape_defs.hh"
+16535:   template <typename Partial_Function>
+16535:   void map_space_dimensions(const Partial_Function& pfunc);
+16535: # 1852 "../../src/BD_Shape_defs.hh"
+16535:   void expand_space_dimension(Variable var, dimension_type m);
+16535: # 1877 "../../src/BD_Shape_defs.hh"
+16535:   void fold_space_dimensions(const Variables_Set& vars, Variable dest);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename Interval_Info>
+16535:   void refine_fp_interval_abstract_store(Box<Interval<T, Interval_Info> >&
+16535:                                          store) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   int32_t hash_code() const;
+16535: 
+16535:   friend bool operator==<T>(const BD_Shape<T>& x, const BD_Shape<T>& y);
+16535: 
+16535:   template <typename Temp, typename To, typename U>
+16535:   friend bool Parma_Polyhedra_Library
+16535:   ::rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                 const BD_Shape<U>& x, const BD_Shape<U>& y,
+16535:                                 const Rounding_Dir dir,
+16535:                                 Temp& tmp0, Temp& tmp1, Temp& tmp2);
+16535:   template <typename Temp, typename To, typename U>
+16535:   friend bool Parma_Polyhedra_Library
+16535:   ::euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                               const BD_Shape<U>& x, const BD_Shape<U>& y,
+16535:                               const Rounding_Dir dir,
+16535:                               Temp& tmp0, Temp& tmp1, Temp& tmp2);
+16535:   template <typename Temp, typename To, typename U>
+16535:   friend bool Parma_Polyhedra_Library
+16535:   ::l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                const BD_Shape<U>& x, const BD_Shape<U>& y,
+16535:                                const Rounding_Dir dir,
+16535:                                Temp& tmp0, Temp& tmp1, Temp& tmp2);
+16535: 
+16535: private:
+16535:   template <typename U> friend class Parma_Polyhedra_Library::BD_Shape;
+16535:   template <typename Interval> friend class Parma_Polyhedra_Library::Box;
+16535: 
+16535: 
+16535:   DB_Matrix<N> dbm;
+16535: 
+16535: 
+16535: # 1 "../../src/BDS_Status_idefs.hh" 1
+16535: # 50 "../../src/BDS_Status_idefs.hh"
+16535: class Status {
+16535: public:
+16535: 
+16535:   Status();
+16535: 
+16535: 
+16535: 
+16535:   bool test_zero_dim_univ() const;
+16535:   void reset_zero_dim_univ();
+16535:   void set_zero_dim_univ();
+16535: 
+16535:   bool test_empty() const;
+16535:   void reset_empty();
+16535:   void set_empty();
+16535: 
+16535:   bool test_shortest_path_closed() const;
+16535:   void reset_shortest_path_closed();
+16535:   void set_shortest_path_closed();
+16535: 
+16535:   bool test_shortest_path_reduced() const;
+16535:   void reset_shortest_path_reduced();
+16535:   void set_shortest_path_reduced();
+16535: 
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: private:
+16535: 
+16535:   typedef unsigned int flags_t;
+16535: 
+16535: 
+16535: 
+16535:   static const flags_t ZERO_DIM_UNIV = 0U;
+16535:   static const flags_t EMPTY = 1U << 0;
+16535:   static const flags_t SHORTEST_PATH_CLOSED = 1U << 1;
+16535:   static const flags_t SHORTEST_PATH_REDUCED = 1U << 2;
+16535: 
+16535: 
+16535: 
+16535:   flags_t flags;
+16535: 
+16535: 
+16535:   Status(flags_t mask);
+16535: 
+16535: 
+16535:   bool test_all(flags_t mask) const;
+16535: 
+16535: 
+16535:   bool test_any(flags_t mask) const;
+16535: 
+16535: 
+16535:   void set(flags_t mask);
+16535: 
+16535: 
+16535:   void reset(flags_t mask);
+16535: };
+16535: # 1944 "../../src/BD_Shape_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535:   Status status;
+16535: 
+16535: 
+16535:   Bit_Matrix redundancy_dbm;
+16535: 
+16535: 
+16535:   bool marked_zero_dim_univ() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool marked_empty() const;
+16535: # 1970 "../../src/BD_Shape_defs.hh"
+16535:   bool marked_shortest_path_closed() const;
+16535: # 1979 "../../src/BD_Shape_defs.hh"
+16535:   bool marked_shortest_path_reduced() const;
+16535: 
+16535: 
+16535:   void set_empty();
+16535: 
+16535: 
+16535:   void set_zero_dim_univ();
+16535: 
+16535: 
+16535:   void set_shortest_path_closed();
+16535: 
+16535: 
+16535:   void set_shortest_path_reduced();
+16535: 
+16535: 
+16535:   void reset_shortest_path_closed();
+16535: 
+16535: 
+16535:   void reset_shortest_path_reduced();
+16535: 
+16535: 
+16535:   void shortest_path_closure_assign() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void shortest_path_reduction_assign() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_shortest_path_reduced() const;
+16535: # 2027 "../../src/BD_Shape_defs.hh"
+16535:   void incremental_shortest_path_closure_assign(Variable var) const;
+16535: # 2046 "../../src/BD_Shape_defs.hh"
+16535:   bool bounds(const Linear_Expression& expr, bool from_above) const;
+16535: # 2079 "../../src/BD_Shape_defs.hh"
+16535:   bool max_min(const Linear_Expression& expr,
+16535:                bool maximize,
+16535:                Coefficient& ext_n, Coefficient& ext_d, bool& included,
+16535:                Generator& g) const;
+16535: # 2110 "../../src/BD_Shape_defs.hh"
+16535:   bool max_min(const Linear_Expression& expr,
+16535:                bool maximize,
+16535:                Coefficient& ext_n, Coefficient& ext_d, bool& included) const;
+16535: # 2128 "../../src/BD_Shape_defs.hh"
+16535:   bool BFT00_upper_bound_assign_if_exact(const BD_Shape& y);
+16535: # 2146 "../../src/BD_Shape_defs.hh"
+16535:   template <bool integer_upper_bound>
+16535:   bool BHZ09_upper_bound_assign_if_exact(const BD_Shape& y);
+16535: # 2159 "../../src/BD_Shape_defs.hh"
+16535:   void refine_no_check(const Constraint& c);
+16535: # 2173 "../../src/BD_Shape_defs.hh"
+16535:   void refine_no_check(const Congruence& cg);
+16535: 
+16535: 
+16535:   void add_dbm_constraint(dimension_type i, dimension_type j, const N& k);
+16535: 
+16535: 
+16535:   void add_dbm_constraint(dimension_type i, dimension_type j,
+16535:                           Coefficient_traits::const_reference numer,
+16535:                           Coefficient_traits::const_reference denom);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void refine(Variable var, Relation_Symbol relsym,
+16535:               const Linear_Expression& expr,
+16535:               Coefficient_traits::const_reference denominator
+16535:               = Coefficient_one());
+16535: 
+16535: 
+16535:   void forget_all_dbm_constraints(dimension_type v);
+16535: 
+16535:   void forget_binary_dbm_constraints(dimension_type v);
+16535: # 2214 "../../src/BD_Shape_defs.hh"
+16535:   void deduce_v_minus_u_bounds(dimension_type v,
+16535:                                dimension_type last_v,
+16535:                                const Linear_Expression& sc_expr,
+16535:                                Coefficient_traits::const_reference sc_denom,
+16535:                                const N& ub_v);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename Interval_Info>
+16535:   void inhomogeneous_affine_form_image(const dimension_type& var_id,
+16535:                                        const Interval<T, Interval_Info>& b);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename Interval_Info>
+16535:   void
+16535:   one_variable_affine_form_image(const dimension_type& var_id,
+16535:                                  const Interval<T, Interval_Info>& b,
+16535:                                  const Interval<T, Interval_Info>& w_coeff,
+16535:                                  const dimension_type& w_id,
+16535:                                  const dimension_type& space_dim);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename Interval_Info>
+16535:   void
+16535:   two_variables_affine_form_image(const dimension_type& var_id,
+16535:                                   const Linear_Form<Interval<T,Interval_Info> >& lf,
+16535:                                   const dimension_type& space_dim);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename Interval_Info>
+16535:   void
+16535:   left_inhomogeneous_refine(const dimension_type& right_t,
+16535:                             const dimension_type& right_w_id,
+16535:                             const Linear_Form<Interval<T, Interval_Info> >& left,
+16535:                             const Linear_Form<Interval<T, Interval_Info> >& right);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename Interval_Info>
+16535:   void
+16535:   left_one_var_refine(const dimension_type& left_w_id,
+16535:                       const dimension_type& right_t,
+16535:                       const dimension_type& right_w_id,
+16535:                       const Linear_Form<Interval<T, Interval_Info> >& left,
+16535:                       const Linear_Form<Interval<T, Interval_Info> >& right);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename Interval_Info>
+16535:   void general_refine(const dimension_type& left_w_id,
+16535:                       const dimension_type& right_w_id,
+16535:                       const Linear_Form<Interval<T, Interval_Info> >& left,
+16535:                       const Linear_Form<Interval<T, Interval_Info> >& right);
+16535: 
+16535:   template <typename Interval_Info>
+16535:   void linear_form_upper_bound(const Linear_Form<Interval<T, Interval_Info> >&
+16535:                                lf,
+16535:                                N& result) const;
+16535: # 2304 "../../src/BD_Shape_defs.hh"
+16535:   void deduce_u_minus_v_bounds(dimension_type v,
+16535:                                dimension_type last_v,
+16535:                                const Linear_Expression& sc_expr,
+16535:                                Coefficient_traits::const_reference sc_denom,
+16535:                                const N& minus_lb_v);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void get_limiting_shape(const Constraint_System& cs,
+16535:                           BD_Shape& limiting_shape) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void compute_predecessors(std::vector<dimension_type>& predecessor) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void compute_leaders(std::vector<dimension_type>& leaders) const;
+16535: 
+16535:   void drop_some_non_integer_points_helper(N& elem);
+16535: 
+16535:   friend std::ostream&
+16535:   Parma_Polyhedra_Library::IO_Operators
+16535:   ::operator<<<>(std::ostream& s, const BD_Shape<T>& c);
+16535: 
+16535: 
+16535: 
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const BD_Shape& y) const;
+16535: 
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     dimension_type required_dim) const;
+16535: 
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const Constraint& c) const;
+16535: 
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const Congruence& cg) const;
+16535: 
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const Generator& g) const;
+16535: 
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* le_name,
+16535:                                     const Linear_Expression& le) const;
+16535: 
+16535:   template<typename Interval_Info>
+16535:   void
+16535:   throw_dimension_incompatible(const char* method,
+16535:                                const char* lf_name,
+16535:                                const Linear_Form<Interval<T, Interval_Info> >&
+16535:                                lf) const;
+16535: 
+16535:   static void throw_expression_too_complex(const char* method,
+16535:                                            const Linear_Expression& le);
+16535: 
+16535:   static void throw_invalid_argument(const char* method, const char* reason);
+16535: 
+16535: };
+16535: 
+16535: # 1 "../../src/BDS_Status_inlines.hh" 1
+16535: # 27 "../../src/BDS_Status_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: inline
+16535: BD_Shape<T>::Status::Status(flags_t mask)
+16535:   : flags(mask) {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: BD_Shape<T>::Status::Status()
+16535:   : flags(ZERO_DIM_UNIV) {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::Status::test_all(flags_t mask) const {
+16535:   return (flags & mask) == mask;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::Status::test_any(flags_t mask) const {
+16535:   return (flags & mask) != 0;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::Status::set(flags_t mask) {
+16535:   flags |= mask;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::Status::reset(flags_t mask) {
+16535:   flags &= ~mask;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::Status::test_zero_dim_univ() const {
+16535:   return flags == ZERO_DIM_UNIV;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::Status::reset_zero_dim_univ() {
+16535: 
+16535:   if (flags == ZERO_DIM_UNIV) {
+16535: 
+16535:     flags = EMPTY;
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::Status::set_zero_dim_univ() {
+16535: 
+16535:   flags = ZERO_DIM_UNIV;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::Status::test_empty() const {
+16535:   return test_any(EMPTY);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::Status::reset_empty() {
+16535:   reset(EMPTY);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::Status::set_empty() {
+16535:   flags = EMPTY;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::Status::test_shortest_path_closed() const {
+16535:   return test_any(SHORTEST_PATH_CLOSED);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::Status::reset_shortest_path_closed() {
+16535: 
+16535:   reset(SHORTEST_PATH_CLOSED | SHORTEST_PATH_REDUCED);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::Status::set_shortest_path_closed() {
+16535:   set(SHORTEST_PATH_CLOSED);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::Status::test_shortest_path_reduced() const {
+16535:   return test_any(SHORTEST_PATH_REDUCED);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::Status::reset_shortest_path_reduced() {
+16535:   reset(SHORTEST_PATH_REDUCED);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::Status::set_shortest_path_reduced() {
+16535:   ((void) 0);
+16535:   set(SHORTEST_PATH_REDUCED);
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: BD_Shape<T>::Status::OK() const {
+16535:   if (test_zero_dim_univ()) {
+16535: 
+16535:     return true;
+16535:   }
+16535: 
+16535:   if (test_empty()) {
+16535:     Status copy = *this;
+16535:     copy.reset_empty();
+16535:     if (copy.test_zero_dim_univ()) {
+16535:       return true;
+16535:     }
+16535:     else {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       return false;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   if (test_shortest_path_reduced()) {
+16535:     if (test_shortest_path_closed()) {
+16535:       return true;
+16535:     }
+16535:     else {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       return false;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   return true;
+16535: }
+16535: 
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: namespace BD_Shapes {
+16535: 
+16535: 
+16535: extern const char* zero_dim_univ;
+16535: extern const char* empty;
+16535: extern const char* sp_closed;
+16535: extern const char* sp_reduced;
+16535: const char yes = '+';
+16535: const char no = '-';
+16535: const char separator = ' ';
+16535: # 207 "../../src/BDS_Status_inlines.hh"
+16535: inline bool
+16535: get_field(std::istream& s, const char* keyword, bool& positive) {
+16535:   std::string str;
+16535:   if (!(s >> str)
+16535:       || (str[0] != yes && str[0] != no)
+16535:       || str.substr(1) != keyword) {
+16535:     return false;
+16535:   }
+16535:   positive = (str[0] == yes);
+16535:   return true;
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::Status::ascii_dump(std::ostream& s) const {
+16535:   using namespace Implementation::BD_Shapes;
+16535:   s << (test_zero_dim_univ() ? yes : no) << zero_dim_univ << separator
+16535:     << (test_empty() ? yes : no) << empty << separator
+16535:     << separator
+16535:     << (test_shortest_path_closed() ? yes : no) << sp_closed << separator
+16535:     << (test_shortest_path_reduced() ? yes : no) << sp_reduced << separator;
+16535: }
+16535: 
+16535: template <typename T> void BD_Shape<T>::Status::ascii_dump() const { ascii_dump(std::cerr); } template <typename T> void BD_Shape<T>::Status::print() const { std::cerr << "No user level output operator defined " << "for " "BD_Shape<T>::Status" << "." << std::endl; }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: BD_Shape<T>::Status::ascii_load(std::istream& s) {
+16535:   using namespace Implementation::BD_Shapes;
+16535:   bool positive = Suppress_Uninitialized_Warnings_Type<bool>::synonym();
+16535: 
+16535:   if (!get_field(s, zero_dim_univ, positive)) {
+16535:     return false;
+16535:   }
+16535:   if (positive) {
+16535:     set_zero_dim_univ();
+16535:   }
+16535: 
+16535:   if (!get_field(s, empty, positive)) {
+16535:     return false;
+16535:   }
+16535:   if (positive) {
+16535:     set_empty();
+16535:   }
+16535: 
+16535:   if (!get_field(s, sp_closed, positive)) {
+16535:     return false;
+16535:   }
+16535:   if (positive) {
+16535:     set_shortest_path_closed();
+16535:   }
+16535:   else {
+16535:     reset_shortest_path_closed();
+16535:   }
+16535: 
+16535:   if (!get_field(s, sp_reduced, positive)) {
+16535:     return false;
+16535:   }
+16535:   if (positive) {
+16535:     set_shortest_path_reduced();
+16535:   }
+16535:   else {
+16535:     reset_shortest_path_reduced();
+16535:   }
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   return true;
+16535: }
+16535: 
+16535: }
+16535: # 2371 "../../src/BD_Shape_defs.hh" 2
+16535: # 1 "../../src/BD_Shape_inlines.hh" 1
+16535: # 29 "../../src/BD_Shape_inlines.hh"
+16535: # 1 "../../src/C_Polyhedron_defs.hh" 1
+16535: # 27 "../../src/C_Polyhedron_defs.hh"
+16535: # 1 "../../src/C_Polyhedron_types.hh" 1
+16535: # 16 "../../src/C_Polyhedron_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class C_Polyhedron;
+16535: 
+16535: }
+16535: # 28 "../../src/C_Polyhedron_defs.hh" 2
+16535: # 1 "../../src/NNC_Polyhedron_types.hh" 1
+16535: # 16 "../../src/NNC_Polyhedron_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class NNC_Polyhedron;
+16535: 
+16535: }
+16535: # 29 "../../src/C_Polyhedron_defs.hh" 2
+16535: # 59 "../../src/C_Polyhedron_defs.hh"
+16535: class Parma_Polyhedra_Library::C_Polyhedron : public Polyhedron {
+16535: public:
+16535: # 75 "../../src/C_Polyhedron_defs.hh"
+16535:   explicit C_Polyhedron(dimension_type num_dimensions = 0,
+16535:                         Degenerate_Element kind = UNIVERSE);
+16535: # 88 "../../src/C_Polyhedron_defs.hh"
+16535:   explicit C_Polyhedron(const Constraint_System& cs);
+16535: # 106 "../../src/C_Polyhedron_defs.hh"
+16535:   C_Polyhedron(Constraint_System& cs, Recycle_Input dummy);
+16535: # 119 "../../src/C_Polyhedron_defs.hh"
+16535:   explicit C_Polyhedron(const Generator_System& gs);
+16535: # 138 "../../src/C_Polyhedron_defs.hh"
+16535:   C_Polyhedron(Generator_System& gs, Recycle_Input dummy);
+16535: # 147 "../../src/C_Polyhedron_defs.hh"
+16535:   explicit C_Polyhedron(const Congruence_System& cgs);
+16535: # 163 "../../src/C_Polyhedron_defs.hh"
+16535:   C_Polyhedron(Congruence_System& cgs, Recycle_Input dummy);
+16535: # 175 "../../src/C_Polyhedron_defs.hh"
+16535:   explicit C_Polyhedron(const NNC_Polyhedron& y,
+16535:                         Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 194 "../../src/C_Polyhedron_defs.hh"
+16535:   template <typename Interval>
+16535:   explicit C_Polyhedron(const Box<Interval>& box,
+16535:                         Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 210 "../../src/C_Polyhedron_defs.hh"
+16535:   template <typename U>
+16535:   explicit C_Polyhedron(const BD_Shape<U>& bd,
+16535:                         Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 226 "../../src/C_Polyhedron_defs.hh"
+16535:   template <typename U>
+16535:   explicit C_Polyhedron(const Octagonal_Shape<U>& os,
+16535:                         Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 242 "../../src/C_Polyhedron_defs.hh"
+16535:   explicit C_Polyhedron(const Grid& grid,
+16535:                         Complexity_Class complexity = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   C_Polyhedron(const C_Polyhedron& y,
+16535:                Complexity_Class complexity = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   C_Polyhedron& operator=(const C_Polyhedron& y);
+16535: 
+16535: 
+16535:   C_Polyhedron& operator=(const NNC_Polyhedron& y);
+16535: 
+16535: 
+16535:   ~C_Polyhedron();
+16535: # 272 "../../src/C_Polyhedron_defs.hh"
+16535:   bool poly_hull_assign_if_exact(const C_Polyhedron& y);
+16535: 
+16535: 
+16535:   bool upper_bound_assign_if_exact(const C_Polyhedron& y);
+16535: # 286 "../../src/C_Polyhedron_defs.hh"
+16535:   void positive_time_elapse_assign(const Polyhedron& y);
+16535: };
+16535: 
+16535: # 1 "../../src/C_Polyhedron_inlines.hh" 1
+16535: # 30 "../../src/C_Polyhedron_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline
+16535: C_Polyhedron::~C_Polyhedron() {
+16535: }
+16535: 
+16535: inline
+16535: C_Polyhedron::C_Polyhedron(dimension_type num_dimensions,
+16535:                            Degenerate_Element kind)
+16535:   : Polyhedron(NECESSARILY_CLOSED,
+16535:                check_space_dimension_overflow(num_dimensions,
+16535:                                               NECESSARILY_CLOSED,
+16535:                                               "C_Polyhedron(n, k)",
+16535:                                               "n exceeds the maximum "
+16535:                                               "allowed space dimension"),
+16535:                kind) {
+16535: }
+16535: 
+16535: inline
+16535: C_Polyhedron::C_Polyhedron(const Constraint_System& cs)
+16535:   : Polyhedron(NECESSARILY_CLOSED,
+16535:                check_obj_space_dimension_overflow(cs, NECESSARILY_CLOSED,
+16535:                                                   "C_Polyhedron(cs)",
+16535:                                                   "the space dimension of cs "
+16535:                                                   "exceeds the maximum allowed "
+16535:                                                   "space dimension")) {
+16535: }
+16535: 
+16535: inline
+16535: C_Polyhedron::C_Polyhedron(Constraint_System& cs, Recycle_Input)
+16535:   : Polyhedron(NECESSARILY_CLOSED,
+16535:                check_obj_space_dimension_overflow(cs, NECESSARILY_CLOSED,
+16535:                                                   "C_Polyhedron(cs, recycle)",
+16535:                                                   "the space dimension of cs "
+16535:                                                   "exceeds the maximum allowed "
+16535:                                                   "space dimension"),
+16535:                Recycle_Input()) {
+16535: }
+16535: 
+16535: inline
+16535: C_Polyhedron::C_Polyhedron(const Generator_System& gs)
+16535:   : Polyhedron(NECESSARILY_CLOSED,
+16535:                check_obj_space_dimension_overflow(gs, NECESSARILY_CLOSED,
+16535:                                                   "C_Polyhedron(gs)",
+16535:                                                   "the space dimension of gs "
+16535:                                                   "exceeds the maximum allowed "
+16535:                                                   "space dimension")) {
+16535: }
+16535: 
+16535: inline
+16535: C_Polyhedron::C_Polyhedron(Generator_System& gs, Recycle_Input)
+16535:   : Polyhedron(NECESSARILY_CLOSED,
+16535:                check_obj_space_dimension_overflow(gs, NECESSARILY_CLOSED,
+16535:                                                   "C_Polyhedron(gs, recycle)",
+16535:                                                   "the space dimension of gs "
+16535:                                                   "exceeds the maximum allowed "
+16535:                                                   "space dimension"),
+16535:                Recycle_Input()) {
+16535: }
+16535: 
+16535: template <typename Interval>
+16535: inline
+16535: C_Polyhedron::C_Polyhedron(const Box<Interval>& box, Complexity_Class)
+16535:   : Polyhedron(NECESSARILY_CLOSED,
+16535:                check_obj_space_dimension_overflow(box, NECESSARILY_CLOSED,
+16535:                                                   "C_Polyhedron(box)",
+16535:                                                   "the space dimension of box "
+16535:                                                   "exceeds the maximum allowed "
+16535:                                                   "space dimension")) {
+16535: }
+16535: 
+16535: template <typename U>
+16535: inline
+16535: C_Polyhedron::C_Polyhedron(const BD_Shape<U>& bd, Complexity_Class)
+16535:   : Polyhedron(NECESSARILY_CLOSED,
+16535:                check_space_dimension_overflow(bd.space_dimension(),
+16535:                                               NECESSARILY_CLOSED,
+16535:                                               "C_Polyhedron(bd)",
+16535:                                               "the space dimension of bd "
+16535:                                               "exceeds the maximum allowed "
+16535:                                               "space dimension"),
+16535:                UNIVERSE) {
+16535:   add_constraints(bd.constraints());
+16535: }
+16535: 
+16535: template <typename U>
+16535: inline
+16535: C_Polyhedron::C_Polyhedron(const Octagonal_Shape<U>& os, Complexity_Class)
+16535:   : Polyhedron(NECESSARILY_CLOSED,
+16535:                check_space_dimension_overflow(os.space_dimension(),
+16535:                                               NECESSARILY_CLOSED,
+16535:                                               "C_Polyhedron(os)",
+16535:                                               "the space dimension of os "
+16535:                                               "exceeds the maximum allowed "
+16535:                                               "space dimension"),
+16535:                UNIVERSE) {
+16535:   add_constraints(os.constraints());
+16535: }
+16535: 
+16535: inline
+16535: C_Polyhedron::C_Polyhedron(const C_Polyhedron& y, Complexity_Class)
+16535:   : Polyhedron(y) {
+16535: }
+16535: 
+16535: inline C_Polyhedron&
+16535: C_Polyhedron::operator=(const C_Polyhedron& y) {
+16535:   Polyhedron::operator=(y);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline C_Polyhedron&
+16535: C_Polyhedron::operator=(const NNC_Polyhedron& y) {
+16535:   C_Polyhedron c_y(y);
+16535:   m_swap(c_y);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline bool
+16535: C_Polyhedron::upper_bound_assign_if_exact(const C_Polyhedron& y) {
+16535:   return poly_hull_assign_if_exact(y);
+16535: }
+16535: 
+16535: }
+16535: # 290 "../../src/C_Polyhedron_defs.hh" 2
+16535: # 30 "../../src/BD_Shape_inlines.hh" 2
+16535: 
+16535: # 1 "../../src/Octagonal_Shape_defs.hh" 1
+16535: # 36 "../../src/Octagonal_Shape_defs.hh"
+16535: # 1 "../../src/OR_Matrix_defs.hh" 1
+16535: # 27 "../../src/OR_Matrix_defs.hh"
+16535: # 1 "../../src/OR_Matrix_types.hh" 1
+16535: # 16 "../../src/OR_Matrix_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: class OR_Matrix;
+16535: 
+16535: }
+16535: # 28 "../../src/OR_Matrix_defs.hh" 2
+16535: # 50 "../../src/OR_Matrix_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: bool operator==(const OR_Matrix<T>& x, const OR_Matrix<T>& y);
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: std::ostream&
+16535: operator<<(std::ostream& s, const OR_Matrix<T>& m);
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 104 "../../src/OR_Matrix_defs.hh"
+16535: template <typename T>
+16535: class Parma_Polyhedra_Library::OR_Matrix {
+16535: private:
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename U>
+16535:   class Pseudo_Row {
+16535:   public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     template <typename V>
+16535:     Pseudo_Row(const Pseudo_Row<V>& y);
+16535: 
+16535: 
+16535:     ~Pseudo_Row();
+16535: 
+16535: 
+16535:     U& operator[](dimension_type k) const;
+16535: 
+16535: 
+16535:     Pseudo_Row();
+16535: 
+16535: 
+16535:     Pseudo_Row& operator=(const Pseudo_Row& y);
+16535: 
+16535: 
+16535:   private:
+16535: # 149 "../../src/OR_Matrix_defs.hh"
+16535:     explicit Pseudo_Row(U& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     U* first;
+16535: # 181 "../../src/OR_Matrix_defs.hh"
+16535:     template <typename V> friend class Pseudo_Row;
+16535:     template <typename V> friend class any_row_iterator;
+16535: 
+16535: 
+16535:     friend class OR_Matrix;
+16535:   };
+16535: 
+16535: public:
+16535: 
+16535:   typedef Pseudo_Row<T> row_reference_type;
+16535: 
+16535: 
+16535:   typedef Pseudo_Row<const T> const_row_reference_type;
+16535: 
+16535: private:
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename U>
+16535:   class any_row_iterator {
+16535:   public:
+16535:     typedef std::random_access_iterator_tag iterator_category;
+16535:     typedef Pseudo_Row<U> value_type;
+16535:     typedef long difference_type;
+16535:     typedef const Pseudo_Row<U>* pointer;
+16535:     typedef const Pseudo_Row<U>& reference;
+16535: 
+16535: 
+16535:     any_row_iterator(dimension_type n_rows);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     explicit any_row_iterator(U& base);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     template <typename V>
+16535:     any_row_iterator(const any_row_iterator<V>& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     template <typename V>
+16535:     any_row_iterator& operator=(const any_row_iterator<V>& y);
+16535: 
+16535: 
+16535:     reference operator*() const;
+16535: 
+16535: 
+16535:     pointer operator->() const;
+16535: 
+16535: 
+16535:     any_row_iterator& operator++();
+16535: 
+16535: 
+16535:     any_row_iterator operator++(int);
+16535: 
+16535: 
+16535:     any_row_iterator& operator--();
+16535: 
+16535: 
+16535:     any_row_iterator operator--(int);
+16535: 
+16535: 
+16535:     reference operator[](difference_type m) const;
+16535: 
+16535: 
+16535:     any_row_iterator& operator+=(difference_type m);
+16535: 
+16535: 
+16535:     template <typename Unsigned>
+16535:     typename Enable_If<(static_cast<Unsigned>(-1) > 0), any_row_iterator&>::type
+16535:     operator+=(Unsigned m);
+16535: 
+16535: 
+16535:     any_row_iterator& operator-=(difference_type m);
+16535: 
+16535: 
+16535:     difference_type operator-(const any_row_iterator& y) const;
+16535: 
+16535: 
+16535:     any_row_iterator operator+(difference_type m) const;
+16535: 
+16535: 
+16535:     template <typename Unsigned>
+16535:     typename Enable_If<(static_cast<Unsigned>(-1) > 0), any_row_iterator>::type
+16535:     operator+(Unsigned m) const;
+16535: 
+16535: 
+16535:     any_row_iterator operator-(difference_type m) const;
+16535: 
+16535: 
+16535:     bool operator==(const any_row_iterator& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     bool operator!=(const any_row_iterator& y) const;
+16535: 
+16535: 
+16535:     bool operator<(const any_row_iterator& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     bool operator<=(const any_row_iterator& y) const;
+16535: 
+16535: 
+16535:     bool operator>(const any_row_iterator& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     bool operator>=(const any_row_iterator& y) const;
+16535: 
+16535:     dimension_type row_size() const;
+16535: 
+16535:     dimension_type index() const;
+16535: 
+16535:   private:
+16535: 
+16535:     Pseudo_Row<U> value;
+16535: 
+16535: 
+16535:     dimension_type e;
+16535: 
+16535: 
+16535:     dimension_type i;
+16535: # 326 "../../src/OR_Matrix_defs.hh"
+16535:     template <typename V> friend class any_row_iterator;
+16535: 
+16535:   };
+16535: 
+16535: public:
+16535: 
+16535:   typedef any_row_iterator<T> row_iterator;
+16535: 
+16535: 
+16535:   typedef any_row_iterator<const T> const_row_iterator;
+16535: 
+16535: 
+16535:   typedef typename DB_Row<T>::iterator element_iterator;
+16535: 
+16535: 
+16535:   typedef typename DB_Row<T>::const_iterator const_element_iterator;
+16535: 
+16535: public:
+16535: 
+16535:   static dimension_type max_num_rows();
+16535: # 355 "../../src/OR_Matrix_defs.hh"
+16535:   OR_Matrix(dimension_type num_dimensions);
+16535: 
+16535: 
+16535:   OR_Matrix(const OR_Matrix& y);
+16535: 
+16535: 
+16535:   template <typename U>
+16535:   explicit OR_Matrix(const OR_Matrix<U>& y);
+16535: 
+16535: 
+16535:   ~OR_Matrix();
+16535: 
+16535: 
+16535:   OR_Matrix& operator=(const OR_Matrix& y);
+16535: 
+16535: private:
+16535:   template <typename U> friend class OR_Matrix;
+16535: # 381 "../../src/OR_Matrix_defs.hh"
+16535:   DB_Row<T> vec;
+16535: 
+16535: 
+16535:   dimension_type space_dim;
+16535: 
+16535: 
+16535:   dimension_type vec_capacity;
+16535: 
+16535: 
+16535:   OR_Matrix();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static dimension_type row_first_element_index(dimension_type k);
+16535: 
+16535: public:
+16535: 
+16535:   static dimension_type row_size(dimension_type k);
+16535: 
+16535: 
+16535:   void m_swap(OR_Matrix& y);
+16535: # 417 "../../src/OR_Matrix_defs.hh"
+16535:   void grow(dimension_type new_dim);
+16535: # 427 "../../src/OR_Matrix_defs.hh"
+16535:   void shrink(dimension_type new_dim);
+16535: # 441 "../../src/OR_Matrix_defs.hh"
+16535:   void resize_no_copy(dimension_type new_dim);
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535:   dimension_type num_rows() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   row_reference_type operator[](dimension_type k);
+16535: 
+16535: 
+16535:   const_row_reference_type operator[](dimension_type k) const;
+16535: # 464 "../../src/OR_Matrix_defs.hh"
+16535:   row_iterator row_begin();
+16535: 
+16535: 
+16535:   row_iterator row_end();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const_row_iterator row_begin() const;
+16535: 
+16535: 
+16535:   const_row_iterator row_end() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   element_iterator element_begin();
+16535: 
+16535: 
+16535:   element_iterator element_end();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const_element_iterator element_begin() const;
+16535: 
+16535: 
+16535:   const_element_iterator element_end() const;
+16535: 
+16535: 
+16535:   void clear();
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535:   friend bool operator==<T>(const OR_Matrix<T>& x, const OR_Matrix<T>& y);
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: };
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: void swap(OR_Matrix<T>& x, OR_Matrix<T>& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: bool operator!=(const OR_Matrix<T>& x, const OR_Matrix<T>& y);
+16535: # 552 "../../src/OR_Matrix_defs.hh"
+16535: template <typename Temp, typename To, typename T>
+16535: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                  const OR_Matrix<T>& x,
+16535:                                  const OR_Matrix<T>& y,
+16535:                                  Rounding_Dir dir,
+16535:                                  Temp& tmp0,
+16535:                                  Temp& tmp1,
+16535:                                  Temp& tmp2);
+16535: # 574 "../../src/OR_Matrix_defs.hh"
+16535: template <typename Temp, typename To, typename T>
+16535: bool euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                const OR_Matrix<T>& x,
+16535:                                const OR_Matrix<T>& y,
+16535:                                Rounding_Dir dir,
+16535:                                Temp& tmp0,
+16535:                                Temp& tmp1,
+16535:                                Temp& tmp2);
+16535: # 596 "../../src/OR_Matrix_defs.hh"
+16535: template <typename Temp, typename To, typename T>
+16535: bool l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                  const OR_Matrix<T>& x,
+16535:                                  const OR_Matrix<T>& y,
+16535:                                  Rounding_Dir dir,
+16535:                                  Temp& tmp0,
+16535:                                  Temp& tmp1,
+16535:                                  Temp& tmp2);
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/OR_Matrix_inlines.hh" 1
+16535: # 35 "../../src/OR_Matrix_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: OR_Matrix<T>::row_first_element_index(const dimension_type k) {
+16535:   return ((k + 1)*(k + 1))/2;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: OR_Matrix<T>::row_size(const dimension_type k) {
+16535:   return k + 2 - k % 2;
+16535: }
+16535: # 60 "../../src/OR_Matrix_inlines.hh"
+16535: template <typename T>
+16535: template <typename U>
+16535: inline
+16535: OR_Matrix<T>::Pseudo_Row<U>::Pseudo_Row()
+16535:   : first(0)
+16535: 
+16535: 
+16535: 
+16535: {
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline
+16535: OR_Matrix<T>::Pseudo_Row<U>::Pseudo_Row(U& y
+16535: 
+16535: 
+16535: 
+16535:                 )
+16535:   : first(&y)
+16535: 
+16535: 
+16535: 
+16535: {
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: template <typename V>
+16535: inline
+16535: OR_Matrix<T>::Pseudo_Row<U>::Pseudo_Row(const Pseudo_Row<V>& y)
+16535:   : first(y.first)
+16535: 
+16535: 
+16535: 
+16535: {
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline OR_Matrix<T>::Pseudo_Row<U>&
+16535: OR_Matrix<T>::Pseudo_Row<U>::operator=(const Pseudo_Row& y) {
+16535:   first = y.first;
+16535: 
+16535: 
+16535: 
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline
+16535: OR_Matrix<T>::Pseudo_Row<U>::~Pseudo_Row() {
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline U&
+16535: OR_Matrix<T>::Pseudo_Row<U>::operator[](const dimension_type k) const {
+16535: 
+16535: 
+16535: 
+16535:   return *(first + k);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline
+16535: OR_Matrix<T>::any_row_iterator<U>
+16535: ::any_row_iterator(const dimension_type n_rows)
+16535:   : value(),
+16535:     e(n_rows)
+16535: 
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline
+16535: OR_Matrix<T>::any_row_iterator<U>::any_row_iterator(U& base)
+16535:   : value(base
+16535: 
+16535: 
+16535: 
+16535:            ),
+16535:      e(0),
+16535:      i(0) {
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: template <typename V>
+16535: inline
+16535: OR_Matrix<T>::any_row_iterator<U>
+16535: ::any_row_iterator(const any_row_iterator<V>& y)
+16535:   : value(y.value),
+16535:     e(y.e),
+16535:     i(y.i) {
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: template <typename V>
+16535: inline typename OR_Matrix<T>::template any_row_iterator<U>&
+16535: OR_Matrix<T>::any_row_iterator<U>::operator=(const any_row_iterator<V>& y) {
+16535:   value = y.value;
+16535:   e = y.e;
+16535:   i = y.i;
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline typename OR_Matrix<T>::template any_row_iterator<U>::reference
+16535: OR_Matrix<T>::any_row_iterator<U>::operator*() const {
+16535:   return value;
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline typename OR_Matrix<T>::template any_row_iterator<U>::pointer
+16535: OR_Matrix<T>::any_row_iterator<U>::operator->() const {
+16535:   return &value;
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline typename OR_Matrix<T>::template any_row_iterator<U>&
+16535: OR_Matrix<T>::any_row_iterator<U>::operator++() {
+16535:   ++e;
+16535:   dimension_type increment = e;
+16535:   if (e % 2 != 0) {
+16535:     ++increment;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   i += increment;
+16535:   value.first += increment;
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline typename OR_Matrix<T>::template any_row_iterator<U>
+16535: OR_Matrix<T>::any_row_iterator<U>::operator++(int) {
+16535:   any_row_iterator old = *this;
+16535:   ++(*this);
+16535:   return old;
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline typename OR_Matrix<T>::template any_row_iterator<U>&
+16535: OR_Matrix<T>::any_row_iterator<U>::operator--() {
+16535:   dimension_type decrement = e + 1;
+16535:   --e;
+16535:   if (e % 2 != 0) {
+16535:     ++decrement;
+16535: 
+16535: 
+16535: 
+16535:   }
+16535:   i -= decrement;
+16535:   value.first -= decrement;
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline typename OR_Matrix<T>::template any_row_iterator<U>
+16535: OR_Matrix<T>::any_row_iterator<U>::operator--(int) {
+16535:   any_row_iterator old = *this;
+16535:   --(*this);
+16535:   return old;
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline typename OR_Matrix<T>::template any_row_iterator<U>&
+16535: OR_Matrix<T>::any_row_iterator<U>::operator+=(const difference_type m) {
+16535:   difference_type e_dt = static_cast<difference_type>(e);
+16535:   difference_type i_dt = static_cast<difference_type>(i);
+16535:   difference_type increment = m + (m * m) / 2 + m * e_dt;
+16535:   if (e_dt % 2 == 0 && m % 2 != 0) {
+16535:     ++increment;
+16535:   }
+16535:   e_dt += m;
+16535:   i_dt += increment;
+16535:   e = static_cast<dimension_type>(e_dt);
+16535:   i = static_cast<dimension_type>(i_dt);
+16535:   value.first += increment;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: template <typename Unsigned>
+16535: inline typename
+16535: Enable_If<(static_cast<Unsigned>(-1) > 0),
+16535:             typename OR_Matrix<T>::template any_row_iterator<U>& >::type
+16535: OR_Matrix<T>::any_row_iterator<U>::operator+=(Unsigned m) {
+16535:   dimension_type n = m;
+16535:   dimension_type increment = n + (n*n)/2 + n*e;
+16535:   if (e % 2 == 0 && n % 2 != 0) {
+16535:     ++increment;
+16535:   }
+16535:   e += n;
+16535:   i += increment;
+16535:   value.first += increment;
+16535: 
+16535: 
+16535: 
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline typename OR_Matrix<T>::template any_row_iterator<U>&
+16535: OR_Matrix<T>::any_row_iterator<U>::operator-=(difference_type m) {
+16535:   return *this += -m;
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline typename OR_Matrix<T>::template any_row_iterator<U>::difference_type
+16535: OR_Matrix<T>::any_row_iterator<U>::operator-(const any_row_iterator& y) const {
+16535:   return e - y.e;
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline typename OR_Matrix<T>::template any_row_iterator<U>
+16535: OR_Matrix<T>::any_row_iterator<U>::operator+(difference_type m) const {
+16535:   any_row_iterator r = *this;
+16535:   r += m;
+16535:   return r;
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: template <typename Unsigned>
+16535: inline typename
+16535: Enable_If<(static_cast<Unsigned>(-1) > 0),
+16535:             typename OR_Matrix<T>::template any_row_iterator<U> >::type
+16535: OR_Matrix<T>::any_row_iterator<U>::operator+(Unsigned m) const {
+16535:   any_row_iterator r = *this;
+16535:   r += m;
+16535:   return r;
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline typename OR_Matrix<T>::template any_row_iterator<U>
+16535: OR_Matrix<T>::any_row_iterator<U>::operator-(const difference_type m) const {
+16535:   any_row_iterator r = *this;
+16535:   r -= m;
+16535:   return r;
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline bool
+16535: OR_Matrix<T>::any_row_iterator<U>
+16535: ::operator==(const any_row_iterator& y) const {
+16535:   return e == y.e;
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline bool
+16535: OR_Matrix<T>::any_row_iterator<U>
+16535: ::operator!=(const any_row_iterator& y) const {
+16535:   return e != y.e;
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline bool
+16535: OR_Matrix<T>::any_row_iterator<U>::operator<(const any_row_iterator& y) const {
+16535:   return e < y.e;
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline bool
+16535: OR_Matrix<T>::any_row_iterator<U>
+16535: ::operator<=(const any_row_iterator& y) const {
+16535:   return e <= y.e;
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline bool
+16535: OR_Matrix<T>::any_row_iterator<U>::operator>(const any_row_iterator& y) const {
+16535:   return e > y.e;
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline bool
+16535: OR_Matrix<T>::any_row_iterator<U>
+16535: ::operator>=(const any_row_iterator& y) const {
+16535:   return e >= y.e;
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline dimension_type
+16535: OR_Matrix<T>::any_row_iterator<U>::row_size() const {
+16535:   return OR_Matrix::row_size(e);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline dimension_type
+16535: OR_Matrix<T>::any_row_iterator<U>::index() const {
+16535:   return e;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename OR_Matrix<T>::row_iterator
+16535: OR_Matrix<T>::row_begin() {
+16535:   return num_rows() == 0 ? row_iterator(0) : row_iterator(vec[0]);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename OR_Matrix<T>::row_iterator
+16535: OR_Matrix<T>::row_end() {
+16535:   return row_iterator(num_rows());
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename OR_Matrix<T>::const_row_iterator
+16535: OR_Matrix<T>::row_begin() const {
+16535:   return num_rows() == 0 ? const_row_iterator(0) : const_row_iterator(vec[0]);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename OR_Matrix<T>::const_row_iterator
+16535: OR_Matrix<T>::row_end() const {
+16535:   return const_row_iterator(num_rows());
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename OR_Matrix<T>::element_iterator
+16535: OR_Matrix<T>::element_begin() {
+16535:   return vec.begin();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename OR_Matrix<T>::element_iterator
+16535: OR_Matrix<T>::element_end() {
+16535:   return vec.end();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename OR_Matrix<T>::const_element_iterator
+16535: OR_Matrix<T>::element_begin() const {
+16535:   return vec.begin();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename OR_Matrix<T>::const_element_iterator
+16535: OR_Matrix<T>::element_end() const {
+16535:   return vec.end();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: OR_Matrix<T>::m_swap(OR_Matrix& y) {
+16535:   using std::swap;
+16535:   swap(vec, y.vec);
+16535:   swap(space_dim, y.space_dim);
+16535:   swap(vec_capacity, y.vec_capacity);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: inline dimension_type
+16535: isqrt(dimension_type x) {
+16535:   dimension_type r = 0;
+16535:   const dimension_type FIRST_BIT_MASK = 0x40000000U;
+16535:   for (dimension_type t = FIRST_BIT_MASK; t != 0; t >>= 2) {
+16535:     const dimension_type s = r + t;
+16535:     if (s <= x) {
+16535:       x -= s;
+16535:       r = s + t;
+16535:     }
+16535:     r >>= 1;
+16535:   }
+16535:   return r;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: OR_Matrix<T>::max_num_rows() {
+16535: 
+16535: 
+16535:   const dimension_type k = isqrt(2*DB_Row<T>::max_size() + 1);
+16535:   return (k - 1) - (k - 1) % 2;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline memory_size_type
+16535: OR_Matrix<T>::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: OR_Matrix<T>::OR_Matrix(const dimension_type num_dimensions)
+16535:   : vec(2*num_dimensions*(num_dimensions + 1)),
+16535:     space_dim(num_dimensions),
+16535:     vec_capacity(vec.size()) {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: OR_Matrix<T>::~OR_Matrix() {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename OR_Matrix<T>::row_reference_type
+16535: OR_Matrix<T>::operator[](dimension_type k) {
+16535:   return row_reference_type(vec[row_first_element_index(k)]
+16535: 
+16535: 
+16535: 
+16535:                             );
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename OR_Matrix<T>::const_row_reference_type
+16535: OR_Matrix<T>::operator[](dimension_type k) const {
+16535:   return const_row_reference_type(vec[row_first_element_index(k)]
+16535: 
+16535: 
+16535: 
+16535:                                   );
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: OR_Matrix<T>::space_dimension() const {
+16535:   return space_dim;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: OR_Matrix<T>::num_rows() const {
+16535:   return 2*space_dimension();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: OR_Matrix<T>::clear() {
+16535:   OR_Matrix<T>(0).m_swap(*this);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: operator==(const OR_Matrix<T>& x, const OR_Matrix<T>& y) {
+16535:   return x.space_dim == y.space_dim && x.vec == y.vec;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: operator!=(const OR_Matrix<T>& x, const OR_Matrix<T>& y) {
+16535:   return !(x == y);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: OR_Matrix<T>::OR_Matrix(const OR_Matrix& y)
+16535:   : vec(y.vec),
+16535:     space_dim(y.space_dim),
+16535:     vec_capacity(compute_capacity(y.vec.size(),
+16535:                                   DB_Row<T>::max_size())) {
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline
+16535: OR_Matrix<T>::OR_Matrix(const OR_Matrix<U>& y)
+16535:   : vec(),
+16535:     space_dim(y.space_dim),
+16535:     vec_capacity(compute_capacity(y.vec.size(),
+16535:                                   DB_Row<T>::max_size())) {
+16535:   vec.construct_upward_approximation(y.vec, vec_capacity);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline OR_Matrix<T>&
+16535: OR_Matrix<T>::operator=(const OR_Matrix& y) {
+16535:   vec = y.vec;
+16535:   space_dim = y.space_dim;
+16535:   vec_capacity = compute_capacity(y.vec.size(), DB_Row<T>::max_size());
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: OR_Matrix<T>::grow(const dimension_type new_dim) {
+16535:   ((void) 0);
+16535:   if (new_dim > space_dim) {
+16535:     const dimension_type new_size = 2*new_dim*(new_dim + 1);
+16535:     if (new_size <= vec_capacity) {
+16535: 
+16535:       vec.expand_within_capacity(new_size);
+16535:       space_dim = new_dim;
+16535:     }
+16535:     else {
+16535: 
+16535:       OR_Matrix<T> new_matrix(new_dim);
+16535:       element_iterator j = new_matrix.element_begin();
+16535:       for (element_iterator i = element_begin(),
+16535:              mend = element_end(); i != mend; ++i, ++j) {
+16535:         assign_or_swap(*j, *i);
+16535:       }
+16535:       m_swap(new_matrix);
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: OR_Matrix<T>::shrink(const dimension_type new_dim) {
+16535:   ((void) 0);
+16535:   const dimension_type new_size = 2*new_dim*(new_dim + 1);
+16535:   vec.shrink(new_size);
+16535:   space_dim = new_dim;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: OR_Matrix<T>::resize_no_copy(const dimension_type new_dim) {
+16535:   if (new_dim > space_dim) {
+16535:     const dimension_type new_size = 2*new_dim*(new_dim + 1);
+16535:     if (new_size <= vec_capacity) {
+16535: 
+16535:       vec.expand_within_capacity(new_size);
+16535:       space_dim = new_dim;
+16535:     }
+16535:     else {
+16535: 
+16535:       OR_Matrix<T> new_matrix(new_dim);
+16535:       m_swap(new_matrix);
+16535:     }
+16535:   }
+16535:   else if (new_dim < space_dim) {
+16535:     shrink(new_dim);
+16535:   }
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Specialization, typename Temp, typename To, typename T>
+16535: inline bool
+16535: l_m_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                     const OR_Matrix<T>& x,
+16535:                     const OR_Matrix<T>& y,
+16535:                     const Rounding_Dir dir,
+16535:                     Temp& tmp0,
+16535:                     Temp& tmp1,
+16535:                     Temp& tmp2) {
+16535:   if (x.num_rows() != y.num_rows()) {
+16535:     return false;
+16535:   }
+16535:   assign_r(tmp0, 0, ROUND_NOT_NEEDED);
+16535:   for (typename OR_Matrix<T>::const_element_iterator
+16535:          i = x.element_begin(), j = y.element_begin(),
+16535:          mat_end = x.element_end(); i != mat_end; ++i, ++j) {
+16535:     const T& x_i = *i;
+16535:     const T& y_i = *j;
+16535:     if (is_plus_infinity(x_i)) {
+16535:       if (is_plus_infinity(y_i)) {
+16535:         continue;
+16535:       }
+16535:       else {
+16535:       pinf:
+16535:         assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:         return true;
+16535:       }
+16535:     }
+16535:     else if (is_plus_infinity(y_i)) {
+16535:       goto pinf;
+16535:     }
+16535:     const Temp* tmp1p;
+16535:     const Temp* tmp2p;
+16535:     if (x_i > y_i) {
+16535:       maybe_assign(tmp1p, tmp1, x_i, dir);
+16535:       maybe_assign(tmp2p, tmp2, y_i, inverse(dir));
+16535:     }
+16535:     else {
+16535:       maybe_assign(tmp1p, tmp1, y_i, dir);
+16535:       maybe_assign(tmp2p, tmp2, x_i, inverse(dir));
+16535:     }
+16535:     sub_assign_r(tmp1, *tmp1p, *tmp2p, dir);
+16535:     ((void) 0);
+16535:     Specialization::combine(tmp0, tmp1, dir);
+16535:   }
+16535: 
+16535:   Specialization::finalize(tmp0, dir);
+16535:   assign_r(r, tmp0, dir);
+16535:   return true;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename T>
+16535: inline bool
+16535: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                             const OR_Matrix<T>& x,
+16535:                             const OR_Matrix<T>& y,
+16535:                             const Rounding_Dir dir,
+16535:                             Temp& tmp0,
+16535:                             Temp& tmp1,
+16535:                             Temp& tmp2) {
+16535:   return
+16535:     l_m_distance_assign<Rectilinear_Distance_Specialization<Temp> >(r, x, y,
+16535:                                                                     dir,
+16535:                                                                     tmp0,
+16535:                                                                     tmp1,
+16535:                                                                     tmp2);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename T>
+16535: inline bool
+16535: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                           const OR_Matrix<T>& x,
+16535:                           const OR_Matrix<T>& y,
+16535:                           const Rounding_Dir dir,
+16535:                           Temp& tmp0,
+16535:                           Temp& tmp1,
+16535:                           Temp& tmp2) {
+16535:   return
+16535:     l_m_distance_assign<Euclidean_Distance_Specialization<Temp> >(r, x, y,
+16535:                                                                   dir,
+16535:                                                                   tmp0,
+16535:                                                                   tmp1,
+16535:                                                                   tmp2);
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename T>
+16535: inline bool
+16535: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                            const OR_Matrix<T>& x,
+16535:                            const OR_Matrix<T>& y,
+16535:                            const Rounding_Dir dir,
+16535:                            Temp& tmp0,
+16535:                            Temp& tmp1,
+16535:                            Temp& tmp2) {
+16535:   return
+16535:     l_m_distance_assign<L_Infinity_Distance_Specialization<Temp> >(r, x, y,
+16535:                                                                    dir,
+16535:                                                                    tmp0,
+16535:                                                                    tmp1,
+16535:                                                                    tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: swap(OR_Matrix<T>& x, OR_Matrix<T>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 608 "../../src/OR_Matrix_defs.hh" 2
+16535: # 1 "../../src/OR_Matrix_templates.hh" 1
+16535: # 29 "../../src/OR_Matrix_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: memory_size_type
+16535: OR_Matrix<T>::external_memory_in_bytes() const{
+16535:   return vec.external_memory_in_bytes();
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: OR_Matrix<T>::OK() const {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type dim = space_dimension();
+16535:   if (vec.size() != 2*dim*(dim + 1)) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535:   if (!vec.OK(vec.size(), vec_capacity)) {
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: OR_Matrix<T>::ascii_dump(std::ostream& s) const {
+16535:   const OR_Matrix<T>& x = *this;
+16535:   const char separator = ' ';
+16535:   dimension_type space = x.space_dimension();
+16535:   s << space << separator << "\n";
+16535:   for (const_row_iterator i = x.row_begin(),
+16535:          x_row_end = x.row_end(); i != x_row_end; ++i) {
+16535:     const_row_reference_type r = *i;
+16535:     dimension_type rs = i.row_size();
+16535:     for (dimension_type j = 0; j < rs; ++j) {
+16535:       using namespace IO_Operators;
+16535:       s << r[j] << separator;
+16535:     }
+16535:     s << "\n";
+16535:   }
+16535: }
+16535: 
+16535: template <typename T> void OR_Matrix<T>::ascii_dump() const { ascii_dump(std::cerr); } template <typename T> void OR_Matrix<T>::print() const { using IO_Operators::operator<<; std::cerr << *this; }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: OR_Matrix<T>::ascii_load(std::istream& s) {
+16535:   dimension_type space;
+16535:   if (!(s >> space)) {
+16535:     return false;
+16535:   }
+16535:   resize_no_copy(space);
+16535:   for (row_iterator i = row_begin(),
+16535:          this_row_end = row_end(); i != this_row_end; ++i) {
+16535:     row_reference_type r_i = *i;
+16535:     const dimension_type rs = i.row_size();
+16535:     for (dimension_type j = 0; j < rs; ++j) {
+16535:       Result r = input(r_i[j], s, ROUND_CHECK);
+16535:       if (result_relation(r) != VR_EQ || is_minus_infinity(r_i[j])) {
+16535:         return false;
+16535:       }
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535:   return true;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: std::ostream&
+16535: IO_Operators::operator<<(std::ostream& s, const OR_Matrix<T>& m) {
+16535:   for (typename OR_Matrix<T>::const_row_iterator m_iter = m.row_begin(),
+16535:          m_end = m.row_end(); m_iter != m_end; ++m_iter) {
+16535:     typename OR_Matrix<T>::const_row_reference_type r_m = *m_iter;
+16535:     const dimension_type mr_size = m_iter.row_size();
+16535:     for (dimension_type j = 0; j < mr_size; ++j) {
+16535:       s << r_m[j] << " ";
+16535:     }
+16535:     s << "\n";
+16535:   }
+16535:   return s;
+16535: }
+16535: 
+16535: }
+16535: # 609 "../../src/OR_Matrix_defs.hh" 2
+16535: # 37 "../../src/Octagonal_Shape_defs.hh" 2
+16535: # 52 "../../src/Octagonal_Shape_defs.hh"
+16535: # 1 "/usr/include/c++/8/climits" 1 3
+16535: # 39 "/usr/include/c++/8/climits" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/climits" 3
+16535: 
+16535: 
+16535: # 1 "/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/limits.h" 1 3 4
+16535: # 43 "/usr/include/c++/8/climits" 2 3
+16535: # 53 "../../src/Octagonal_Shape_defs.hh" 2
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace IO_Operators {
+16535: # 67 "../../src/Octagonal_Shape_defs.hh"
+16535: template <typename T>
+16535: std::ostream&
+16535: operator<<(std::ostream& s, const Octagonal_Shape<T>& oct);
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: void swap(Octagonal_Shape<T>& x, Octagonal_Shape<T>& y);
+16535: # 85 "../../src/Octagonal_Shape_defs.hh"
+16535: template <typename T>
+16535: bool operator==(const Octagonal_Shape<T>& x, const Octagonal_Shape<T>& y);
+16535: # 95 "../../src/Octagonal_Shape_defs.hh"
+16535: template <typename T>
+16535: bool operator!=(const Octagonal_Shape<T>& x, const Octagonal_Shape<T>& y);
+16535: # 109 "../../src/Octagonal_Shape_defs.hh"
+16535: template <typename To, typename T>
+16535: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                  const Octagonal_Shape<T>& x,
+16535:                                  const Octagonal_Shape<T>& y,
+16535:                                  Rounding_Dir dir);
+16535: # 126 "../../src/Octagonal_Shape_defs.hh"
+16535: template <typename Temp, typename To, typename T>
+16535: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                  const Octagonal_Shape<T>& x,
+16535:                                  const Octagonal_Shape<T>& y,
+16535:                                  Rounding_Dir dir);
+16535: # 143 "../../src/Octagonal_Shape_defs.hh"
+16535: template <typename Temp, typename To, typename T>
+16535: bool rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                  const Octagonal_Shape<T>& x,
+16535:                                  const Octagonal_Shape<T>& y,
+16535:                                  Rounding_Dir dir,
+16535:                                  Temp& tmp0,
+16535:                                  Temp& tmp1,
+16535:                                  Temp& tmp2);
+16535: # 163 "../../src/Octagonal_Shape_defs.hh"
+16535: template <typename To, typename T>
+16535: bool euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                const Octagonal_Shape<T>& x,
+16535:                                const Octagonal_Shape<T>& y,
+16535:                                Rounding_Dir dir);
+16535: # 180 "../../src/Octagonal_Shape_defs.hh"
+16535: template <typename Temp, typename To, typename T>
+16535: bool euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                const Octagonal_Shape<T>& x,
+16535:                                const Octagonal_Shape<T>& y,
+16535:                                Rounding_Dir dir);
+16535: # 197 "../../src/Octagonal_Shape_defs.hh"
+16535: template <typename Temp, typename To, typename T>
+16535: bool euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                const Octagonal_Shape<T>& x,
+16535:                                const Octagonal_Shape<T>& y,
+16535:                                Rounding_Dir dir,
+16535:                                Temp& tmp0,
+16535:                                Temp& tmp1,
+16535:                                Temp& tmp2);
+16535: # 217 "../../src/Octagonal_Shape_defs.hh"
+16535: template <typename To, typename T>
+16535: bool l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                 const Octagonal_Shape<T>& x,
+16535:                                 const Octagonal_Shape<T>& y,
+16535:                                 Rounding_Dir dir);
+16535: # 234 "../../src/Octagonal_Shape_defs.hh"
+16535: template <typename Temp, typename To, typename T>
+16535: bool l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                 const Octagonal_Shape<T>& x,
+16535:                                 const Octagonal_Shape<T>& y,
+16535:                                 Rounding_Dir dir);
+16535: # 251 "../../src/Octagonal_Shape_defs.hh"
+16535: template <typename Temp, typename To, typename T>
+16535: bool l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                 const Octagonal_Shape<T>& x,
+16535:                                 const Octagonal_Shape<T>& y,
+16535:                                 Rounding_Dir dir,
+16535:                                 Temp& tmp0,
+16535:                                 Temp& tmp1,
+16535:                                 Temp& tmp2);
+16535: 
+16535: 
+16535: 
+16535: class Octagonal_Shape_Helper {
+16535: public:
+16535: # 304 "../../src/Octagonal_Shape_defs.hh"
+16535:   static bool extract_octagonal_difference(const Constraint& c,
+16535:                                            dimension_type c_space_dim,
+16535:                                            dimension_type& c_num_vars,
+16535:                                            dimension_type& c_first_var,
+16535:                                            dimension_type& c_second_var,
+16535:                                            Coefficient& c_coeff,
+16535:                                            Coefficient& c_term);
+16535: };
+16535: 
+16535: }
+16535: # 419 "../../src/Octagonal_Shape_defs.hh"
+16535: template <typename T>
+16535: class Parma_Polyhedra_Library::Octagonal_Shape {
+16535: private:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef Checked_Number<T, WRD_Extended_Number_Policy> N;
+16535: 
+16535: 
+16535: public:
+16535: 
+16535: 
+16535:   typedef T coefficient_type_base;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef N coefficient_type;
+16535: 
+16535: 
+16535:   static dimension_type max_space_dimension();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static bool can_recycle_constraint_systems();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static bool can_recycle_congruence_systems();
+16535: # 467 "../../src/Octagonal_Shape_defs.hh"
+16535:   explicit Octagonal_Shape(dimension_type num_dimensions = 0,
+16535:                            Degenerate_Element kind = UNIVERSE);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Octagonal_Shape(const Octagonal_Shape& y,
+16535:                   Complexity_Class complexity = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename U>
+16535:   explicit Octagonal_Shape(const Octagonal_Shape<U>& y,
+16535:                            Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 496 "../../src/Octagonal_Shape_defs.hh"
+16535:   explicit Octagonal_Shape(const Constraint_System& cs);
+16535: # 509 "../../src/Octagonal_Shape_defs.hh"
+16535:   explicit Octagonal_Shape(const Congruence_System& cgs);
+16535: # 519 "../../src/Octagonal_Shape_defs.hh"
+16535:   explicit Octagonal_Shape(const Generator_System& gs);
+16535: # 528 "../../src/Octagonal_Shape_defs.hh"
+16535:   explicit Octagonal_Shape(const Polyhedron& ph,
+16535:                            Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 547 "../../src/Octagonal_Shape_defs.hh"
+16535:   template <typename Interval>
+16535:   explicit Octagonal_Shape(const Box<Interval>& box,
+16535:                            Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 567 "../../src/Octagonal_Shape_defs.hh"
+16535:   explicit Octagonal_Shape(const Grid& grid,
+16535:                            Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 586 "../../src/Octagonal_Shape_defs.hh"
+16535:   template <typename U>
+16535:   explicit Octagonal_Shape(const BD_Shape<U>& bd,
+16535:                            Complexity_Class complexity = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Octagonal_Shape& operator=(const Octagonal_Shape& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void m_swap(Octagonal_Shape& y);
+16535: 
+16535: 
+16535:   ~Octagonal_Shape();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type affine_dimension() const;
+16535: 
+16535: 
+16535:   Constraint_System constraints() const;
+16535: 
+16535: 
+16535:   Constraint_System minimized_constraints() const;
+16535: 
+16535: 
+16535:   Congruence_System congruences() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Congruence_System minimized_congruences() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool contains(const Octagonal_Shape& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool strictly_contains(const Octagonal_Shape& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_disjoint_from(const Octagonal_Shape& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Poly_Con_Relation relation_with(const Constraint& c) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Poly_Con_Relation relation_with(const Congruence& cg) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Poly_Gen_Relation relation_with(const Generator& g) const;
+16535: 
+16535: 
+16535:   bool is_empty() const;
+16535: 
+16535: 
+16535:   bool is_universe() const;
+16535: 
+16535: 
+16535:   bool is_discrete() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_bounded() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_topologically_closed() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool contains_integer_point() const;
+16535: # 715 "../../src/Octagonal_Shape_defs.hh"
+16535:   bool constrains(Variable var) const;
+16535: # 724 "../../src/Octagonal_Shape_defs.hh"
+16535:   bool bounds_from_above(const Linear_Expression& expr) const;
+16535: # 733 "../../src/Octagonal_Shape_defs.hh"
+16535:   bool bounds_from_below(const Linear_Expression& expr) const;
+16535: # 759 "../../src/Octagonal_Shape_defs.hh"
+16535:   bool maximize(const Linear_Expression& expr,
+16535:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum) const;
+16535: # 790 "../../src/Octagonal_Shape_defs.hh"
+16535:   bool maximize(const Linear_Expression& expr,
+16535:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum,
+16535:                 Generator& g) const;
+16535: # 818 "../../src/Octagonal_Shape_defs.hh"
+16535:   bool minimize(const Linear_Expression& expr,
+16535:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum) const;
+16535: # 849 "../../src/Octagonal_Shape_defs.hh"
+16535:   bool minimize(const Linear_Expression& expr,
+16535:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum,
+16535:                 Generator& g) const;
+16535: # 881 "../../src/Octagonal_Shape_defs.hh"
+16535:   bool frequency(const Linear_Expression& expr,
+16535:                  Coefficient& freq_n, Coefficient& freq_d,
+16535:                  Coefficient& val_n, Coefficient& val_d) const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: # 904 "../../src/Octagonal_Shape_defs.hh"
+16535:   void add_constraint(const Constraint& c);
+16535: # 918 "../../src/Octagonal_Shape_defs.hh"
+16535:   void add_constraints(const Constraint_System& cs);
+16535: # 937 "../../src/Octagonal_Shape_defs.hh"
+16535:   void add_recycled_constraints(Constraint_System& cs);
+16535: # 949 "../../src/Octagonal_Shape_defs.hh"
+16535:   void add_congruence(const Congruence& cg);
+16535: # 962 "../../src/Octagonal_Shape_defs.hh"
+16535:   void add_congruences(const Congruence_System& cgs);
+16535: # 980 "../../src/Octagonal_Shape_defs.hh"
+16535:   void add_recycled_congruences(Congruence_System& cgs);
+16535: # 992 "../../src/Octagonal_Shape_defs.hh"
+16535:   void refine_with_constraint(const Constraint& c);
+16535: # 1005 "../../src/Octagonal_Shape_defs.hh"
+16535:   void refine_with_congruence(const Congruence& cg);
+16535: # 1018 "../../src/Octagonal_Shape_defs.hh"
+16535:   void refine_with_constraints(const Constraint_System& cs);
+16535: # 1031 "../../src/Octagonal_Shape_defs.hh"
+16535:   void refine_with_congruences(const Congruence_System& cgs);
+16535: # 1054 "../../src/Octagonal_Shape_defs.hh"
+16535:   template <typename Interval_Info>
+16535:   void refine_with_linear_form_inequality(
+16535:                    const Linear_Form< Interval<T, Interval_Info> >& left,
+16535:                    const Linear_Form< Interval<T, Interval_Info> >& right);
+16535: # 1087 "../../src/Octagonal_Shape_defs.hh"
+16535:   template <typename Interval_Info>
+16535:   void generalized_refine_with_linear_form_inequality(
+16535:                    const Linear_Form< Interval<T, Interval_Info> >& left,
+16535:                    const Linear_Form< Interval<T, Interval_Info> >& right,
+16535:                    Relation_Symbol relsym);
+16535: # 1103 "../../src/Octagonal_Shape_defs.hh"
+16535:   void unconstrain(Variable var);
+16535: # 1117 "../../src/Octagonal_Shape_defs.hh"
+16535:   void unconstrain(const Variables_Set& vars);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void intersection_assign(const Octagonal_Shape& y);
+16535: # 1133 "../../src/Octagonal_Shape_defs.hh"
+16535:   void upper_bound_assign(const Octagonal_Shape& y);
+16535: # 1145 "../../src/Octagonal_Shape_defs.hh"
+16535:   bool upper_bound_assign_if_exact(const Octagonal_Shape& y);
+16535: # 1168 "../../src/Octagonal_Shape_defs.hh"
+16535:   bool integer_upper_bound_assign_if_exact(const Octagonal_Shape& y);
+16535: # 1177 "../../src/Octagonal_Shape_defs.hh"
+16535:   void difference_assign(const Octagonal_Shape& y);
+16535: # 1188 "../../src/Octagonal_Shape_defs.hh"
+16535:   bool simplify_using_context_assign(const Octagonal_Shape& y);
+16535: # 1208 "../../src/Octagonal_Shape_defs.hh"
+16535:   void affine_image(Variable var,
+16535:                     const Linear_Expression& expr,
+16535:                     Coefficient_traits::const_reference denominator
+16535:                     = Coefficient_one());
+16535: # 1234 "../../src/Octagonal_Shape_defs.hh"
+16535:   template <typename Interval_Info>
+16535:   void affine_form_image(Variable var,
+16535:                         const Linear_Form< Interval<T, Interval_Info> >& lf);
+16535: # 1256 "../../src/Octagonal_Shape_defs.hh"
+16535:   void affine_preimage(Variable var,
+16535:                        const Linear_Expression& expr,
+16535:                        Coefficient_traits::const_reference denominator
+16535:                        = Coefficient_one());
+16535: # 1285 "../../src/Octagonal_Shape_defs.hh"
+16535:   void generalized_affine_image(Variable var,
+16535:                                 Relation_Symbol relsym,
+16535:                                 const Linear_Expression& expr,
+16535:                                 Coefficient_traits::const_reference denominator
+16535:                                 = Coefficient_one());
+16535: # 1310 "../../src/Octagonal_Shape_defs.hh"
+16535:   void generalized_affine_image(const Linear_Expression& lhs,
+16535:                                 Relation_Symbol relsym,
+16535:                                 const Linear_Expression& rhs);
+16535: # 1340 "../../src/Octagonal_Shape_defs.hh"
+16535:   void bounded_affine_image(Variable var,
+16535:                             const Linear_Expression& lb_expr,
+16535:                             const Linear_Expression& ub_expr,
+16535:                             Coefficient_traits::const_reference denominator
+16535:                             = Coefficient_one());
+16535: # 1370 "../../src/Octagonal_Shape_defs.hh"
+16535:   void generalized_affine_preimage(Variable var,
+16535:                                    Relation_Symbol relsym,
+16535:                                    const Linear_Expression& expr,
+16535:                                    Coefficient_traits::const_reference
+16535:                                    denominator = Coefficient_one());
+16535: # 1395 "../../src/Octagonal_Shape_defs.hh"
+16535:   void generalized_affine_preimage(const Linear_Expression& lhs,
+16535:                                    Relation_Symbol relsym,
+16535:                                    const Linear_Expression& rhs);
+16535: # 1425 "../../src/Octagonal_Shape_defs.hh"
+16535:   void bounded_affine_preimage(Variable var,
+16535:                                const Linear_Expression& lb_expr,
+16535:                                const Linear_Expression& ub_expr,
+16535:                                Coefficient_traits::const_reference denominator
+16535:                                = Coefficient_one());
+16535: # 1438 "../../src/Octagonal_Shape_defs.hh"
+16535:   void time_elapse_assign(const Octagonal_Shape& y);
+16535: # 1486 "../../src/Octagonal_Shape_defs.hh"
+16535:   void wrap_assign(const Variables_Set& vars,
+16535:                    Bounded_Integer_Type_Width w,
+16535:                    Bounded_Integer_Type_Representation r,
+16535:                    Bounded_Integer_Type_Overflow o,
+16535:                    const Constraint_System* cs_p = 0,
+16535:                    unsigned complexity_threshold = 16,
+16535:                    bool wrap_individually = true);
+16535: # 1505 "../../src/Octagonal_Shape_defs.hh"
+16535:   void drop_some_non_integer_points(Complexity_Class complexity
+16535:                                     = ANY_COMPLEXITY);
+16535: # 1523 "../../src/Octagonal_Shape_defs.hh"
+16535:   void drop_some_non_integer_points(const Variables_Set& vars,
+16535:                                     Complexity_Class complexity
+16535:                                     = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535:   void topological_closure_assign();
+16535: # 1545 "../../src/Octagonal_Shape_defs.hh"
+16535:   void CC76_extrapolation_assign(const Octagonal_Shape& y, unsigned* tp = 0);
+16535: # 1568 "../../src/Octagonal_Shape_defs.hh"
+16535:   template <typename Iterator>
+16535:   void CC76_extrapolation_assign(const Octagonal_Shape& y,
+16535:                                  Iterator first, Iterator last,
+16535:                                  unsigned* tp = 0);
+16535: # 1588 "../../src/Octagonal_Shape_defs.hh"
+16535:   void BHMZ05_widening_assign(const Octagonal_Shape& y, unsigned* tp = 0);
+16535: 
+16535: 
+16535:   void widening_assign(const Octagonal_Shape& y, unsigned* tp = 0);
+16535: # 1613 "../../src/Octagonal_Shape_defs.hh"
+16535:   void limited_BHMZ05_extrapolation_assign(const Octagonal_Shape& y,
+16535:                                            const Constraint_System& cs,
+16535:                                            unsigned* tp = 0);
+16535: # 1627 "../../src/Octagonal_Shape_defs.hh"
+16535:   void CC76_narrowing_assign(const Octagonal_Shape& y);
+16535: # 1649 "../../src/Octagonal_Shape_defs.hh"
+16535:   void limited_CC76_extrapolation_assign(const Octagonal_Shape& y,
+16535:                                          const Constraint_System& cs,
+16535:                                          unsigned* tp = 0);
+16535: # 1676 "../../src/Octagonal_Shape_defs.hh"
+16535:   void add_space_dimensions_and_embed(dimension_type m);
+16535: # 1699 "../../src/Octagonal_Shape_defs.hh"
+16535:   void add_space_dimensions_and_project(dimension_type m);
+16535: # 1709 "../../src/Octagonal_Shape_defs.hh"
+16535:   void concatenate_assign(const Octagonal_Shape& y);
+16535: # 1720 "../../src/Octagonal_Shape_defs.hh"
+16535:   void remove_space_dimensions(const Variables_Set& vars);
+16535: # 1730 "../../src/Octagonal_Shape_defs.hh"
+16535:   void remove_higher_space_dimensions(dimension_type new_dimension);
+16535: # 1768 "../../src/Octagonal_Shape_defs.hh"
+16535:   template <typename Partial_Function>
+16535:   void map_space_dimensions(const Partial_Function& pfunc);
+16535: # 1792 "../../src/Octagonal_Shape_defs.hh"
+16535:   void expand_space_dimension(Variable var, dimension_type m);
+16535: # 1817 "../../src/Octagonal_Shape_defs.hh"
+16535:   void fold_space_dimensions(const Variables_Set& vars, Variable dest);
+16535: # 1849 "../../src/Octagonal_Shape_defs.hh"
+16535:   template <typename U>
+16535:   void export_interval_constraints(U& dest) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename Interval_Info>
+16535:   void refine_fp_interval_abstract_store(
+16535:                           Box< Interval<T, Interval_Info> >& store) const;
+16535: 
+16535: 
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   int32_t hash_code() const;
+16535: 
+16535:   friend bool
+16535:   operator==<T>(const Octagonal_Shape<T>& x, const Octagonal_Shape<T>& y);
+16535: 
+16535:   template <typename Temp, typename To, typename U>
+16535:   friend bool Parma_Polyhedra_Library
+16535:   ::rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                 const Octagonal_Shape<U>& x,
+16535:                                 const Octagonal_Shape<U>& y,
+16535:                                 const Rounding_Dir dir,
+16535:                                 Temp& tmp0, Temp& tmp1, Temp& tmp2);
+16535:   template <typename Temp, typename To, typename U>
+16535:   friend bool Parma_Polyhedra_Library
+16535:   ::euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                               const Octagonal_Shape<U>& x,
+16535:                               const Octagonal_Shape<U>& y,
+16535:                               const Rounding_Dir dir,
+16535:                               Temp& tmp0, Temp& tmp1, Temp& tmp2);
+16535:   template <typename Temp, typename To, typename U>
+16535:   friend bool Parma_Polyhedra_Library
+16535:   ::l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                                const Octagonal_Shape<U>& x,
+16535:                                const Octagonal_Shape<U>& y,
+16535:                                const Rounding_Dir dir,
+16535:                                Temp& tmp0, Temp& tmp1, Temp& tmp2);
+16535: 
+16535: private:
+16535:   template <typename U> friend class Parma_Polyhedra_Library::Octagonal_Shape;
+16535:   template <typename Interval> friend class Parma_Polyhedra_Library::Box;
+16535: 
+16535: 
+16535:   OR_Matrix<N> matrix;
+16535: 
+16535: 
+16535:   dimension_type space_dim;
+16535: # 1928 "../../src/Octagonal_Shape_defs.hh"
+16535: # 1 "../../src/Og_Status_idefs.hh" 1
+16535: # 45 "../../src/Og_Status_idefs.hh"
+16535: class Status {
+16535: public:
+16535: 
+16535:   Status();
+16535: 
+16535: 
+16535: 
+16535:   bool test_zero_dim_univ() const;
+16535:   void reset_zero_dim_univ();
+16535:   void set_zero_dim_univ();
+16535: 
+16535:   bool test_empty() const;
+16535:   void reset_empty();
+16535:   void set_empty();
+16535: 
+16535:   bool test_strongly_closed() const;
+16535:   void reset_strongly_closed();
+16535:   void set_strongly_closed();
+16535: 
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void ascii_dump(std::ostream& s) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: private:
+16535: 
+16535:   typedef unsigned int flags_t;
+16535: 
+16535: 
+16535: 
+16535:   static const flags_t ZERO_DIM_UNIV = 0U;
+16535:   static const flags_t EMPTY = 1U << 0;
+16535:   static const flags_t STRONGLY_CLOSED = 1U << 1;
+16535: 
+16535: 
+16535: 
+16535:   flags_t flags;
+16535: 
+16535: 
+16535:   Status(flags_t mask);
+16535: 
+16535: 
+16535:   bool test_all(flags_t mask) const;
+16535: 
+16535: 
+16535:   bool test_any(flags_t mask) const;
+16535: 
+16535: 
+16535:   void set(flags_t mask);
+16535: 
+16535: 
+16535:   void reset(flags_t mask);
+16535: 
+16535: };
+16535: # 1929 "../../src/Octagonal_Shape_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535:   Status status;
+16535: 
+16535: 
+16535:   bool marked_zero_dim_univ() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool marked_empty() const;
+16535: # 1951 "../../src/Octagonal_Shape_defs.hh"
+16535:   bool marked_strongly_closed() const;
+16535: 
+16535: 
+16535:   void set_zero_dim_univ();
+16535: 
+16535: 
+16535:   void set_empty();
+16535: 
+16535: 
+16535:   void set_strongly_closed();
+16535: 
+16535: 
+16535:   void reset_strongly_closed();
+16535: 
+16535:   N& matrix_at(dimension_type i, dimension_type j);
+16535:   const N& matrix_at(dimension_type i, dimension_type j) const;
+16535: # 1978 "../../src/Octagonal_Shape_defs.hh"
+16535:   template <typename Interval_Info>
+16535:   void linear_form_upper_bound(
+16535:                    const Linear_Form< Interval<T, Interval_Info> >& lf,
+16535:                    N& result) const;
+16535: 
+16535: 
+16535:   static void interval_coefficient_upper_bound(const N& var_ub,
+16535:                                                const N& minus_var_ub,
+16535:                                                const N& int_ub, const N& int_lb,
+16535:                                                N& result);
+16535: # 1999 "../../src/Octagonal_Shape_defs.hh"
+16535:   void refine_no_check(const Constraint& c);
+16535: # 2013 "../../src/Octagonal_Shape_defs.hh"
+16535:   void refine_no_check(const Congruence& cg);
+16535: 
+16535: 
+16535:   void add_octagonal_constraint(dimension_type i,
+16535:                                 dimension_type j,
+16535:                                 const N& k);
+16535: 
+16535: 
+16535:   void add_octagonal_constraint(dimension_type i,
+16535:                                 dimension_type j,
+16535:                                 Coefficient_traits::const_reference numer,
+16535:                                 Coefficient_traits::const_reference denom);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void refine(Variable var,
+16535:               Relation_Symbol relsym,
+16535:               const Linear_Expression& expr,
+16535:               Coefficient_traits::const_reference denominator
+16535:               = Coefficient_one());
+16535: 
+16535: 
+16535:   void forget_all_octagonal_constraints(dimension_type v_id);
+16535: 
+16535: 
+16535:   void forget_binary_octagonal_constraints(dimension_type v_id);
+16535: # 2071 "../../src/Octagonal_Shape_defs.hh"
+16535:   void deduce_v_pm_u_bounds(dimension_type v_id,
+16535:                             dimension_type last_id,
+16535:                             const Linear_Expression& sc_expr,
+16535:                             Coefficient_traits::const_reference sc_denom,
+16535:                             const N& ub_v);
+16535: # 2105 "../../src/Octagonal_Shape_defs.hh"
+16535:   void deduce_minus_v_pm_u_bounds(dimension_type v_id,
+16535:                                   dimension_type last_id,
+16535:                                   const Linear_Expression& sc_expr,
+16535:                                   Coefficient_traits::const_reference sc_denom,
+16535:                                   const N& minus_lb_v);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void get_limiting_octagon(const Constraint_System& cs,
+16535:                             Octagonal_Shape& limiting_octagon) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void compute_successors(std::vector<dimension_type>& successor) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void compute_leaders(std::vector<dimension_type>& successor,
+16535:                        std::vector<dimension_type>& no_sing_leaders,
+16535:                        bool& exist_sing_class,
+16535:                        dimension_type& sing_leader) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void compute_leaders(std::vector<dimension_type>& leaders) const;
+16535: # 2146 "../../src/Octagonal_Shape_defs.hh"
+16535:   void non_redundant_matrix_entries(std::vector<Bit_Row>& non_redundant) const;
+16535: 
+16535: 
+16535:   void strong_reduction_assign() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_strongly_reduced() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_strong_coherent() const;
+16535: 
+16535:   bool tight_coherence_would_make_empty() const;
+16535: # 2172 "../../src/Octagonal_Shape_defs.hh"
+16535:   void strong_closure_assign() const;
+16535: 
+16535: 
+16535:   void strong_coherence_assign();
+16535: # 2185 "../../src/Octagonal_Shape_defs.hh"
+16535:   void tight_closure_assign();
+16535: # 2198 "../../src/Octagonal_Shape_defs.hh"
+16535:   void incremental_strong_closure_assign(Variable var) const;
+16535: # 2217 "../../src/Octagonal_Shape_defs.hh"
+16535:   bool bounds(const Linear_Expression& expr, bool from_above) const;
+16535: # 2245 "../../src/Octagonal_Shape_defs.hh"
+16535:   bool max_min(const Linear_Expression& expr,
+16535:                bool maximize,
+16535:                Coefficient& ext_n, Coefficient& ext_d, bool& included) const;
+16535: # 2280 "../../src/Octagonal_Shape_defs.hh"
+16535:   bool max_min(const Linear_Expression& expr,
+16535:                bool maximize,
+16535:                Coefficient& ext_n, Coefficient& ext_d, bool& included,
+16535:                Generator& g) const;
+16535: 
+16535:   void drop_some_non_integer_points_helper(N& elem);
+16535: 
+16535:   friend std::ostream&
+16535:   Parma_Polyhedra_Library::IO_Operators
+16535:   ::operator<<<>(std::ostream& s, const Octagonal_Shape<T>& c);
+16535: 
+16535: 
+16535: 
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const Octagonal_Shape& y) const;
+16535: 
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     dimension_type required_dim) const;
+16535: 
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const Constraint& c) const;
+16535: 
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const Congruence& cg) const;
+16535: 
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const Generator& g) const;
+16535: 
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* le_name,
+16535:                                     const Linear_Expression& le) const;
+16535: 
+16535:   template <typename C>
+16535:   void throw_dimension_incompatible(const char* method,
+16535:                                     const char* lf_name,
+16535:                                     const Linear_Form<C>& lf) const;
+16535: 
+16535:   static void throw_constraint_incompatible(const char* method);
+16535: 
+16535:   static void throw_expression_too_complex(const char* method,
+16535:                                            const Linear_Expression& le);
+16535: 
+16535:   static void throw_invalid_argument(const char* method, const char* reason);
+16535: 
+16535: };
+16535: 
+16535: # 1 "../../src/Og_Status_inlines.hh" 1
+16535: # 27 "../../src/Og_Status_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: inline
+16535: Octagonal_Shape<T>::Status::Status(flags_t mask)
+16535:   : flags(mask) {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: Octagonal_Shape<T>::Status::Status()
+16535:   : flags(ZERO_DIM_UNIV) {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Octagonal_Shape<T>::Status::test_all(flags_t mask) const {
+16535:   return (flags & mask) == mask;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Octagonal_Shape<T>::Status::test_any(flags_t mask) const {
+16535:   return (flags & mask) != 0;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::Status::set(flags_t mask) {
+16535:   flags |= mask;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::Status::reset(flags_t mask) {
+16535:   flags &= ~mask;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Octagonal_Shape<T>::Status::test_zero_dim_univ() const {
+16535:   return flags == ZERO_DIM_UNIV;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::Status::reset_zero_dim_univ() {
+16535: 
+16535:   if (flags == ZERO_DIM_UNIV) {
+16535: 
+16535:     flags = EMPTY;
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::Status::set_zero_dim_univ() {
+16535: 
+16535:   flags = ZERO_DIM_UNIV;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Octagonal_Shape<T>::Status::test_empty() const {
+16535:   return test_any(EMPTY);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::Status::reset_empty() {
+16535:   reset(EMPTY);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::Status::set_empty() {
+16535:   flags = EMPTY;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Octagonal_Shape<T>::Status::test_strongly_closed() const {
+16535:   return test_any(STRONGLY_CLOSED);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::Status::reset_strongly_closed() {
+16535:   reset(STRONGLY_CLOSED);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::Status::set_strongly_closed() {
+16535:   set(STRONGLY_CLOSED);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Octagonal_Shape<T>::Status::OK() const {
+16535:   if (test_zero_dim_univ()) {
+16535: 
+16535:     return true;
+16535:   }
+16535: 
+16535:   if (test_empty()) {
+16535:     Status copy = *this;
+16535:     copy.reset_empty();
+16535:     if (copy.test_zero_dim_univ()) {
+16535:       return true;
+16535:     }
+16535:     else {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       return false;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   return true;
+16535: }
+16535: 
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: namespace Octagonal_Shapes {
+16535: 
+16535: extern const char* zero_dim_univ;
+16535: extern const char* empty;
+16535: extern const char* strong_closed;
+16535: const char yes = '+';
+16535: const char no = '-';
+16535: const char separator = ' ';
+16535: # 170 "../../src/Og_Status_inlines.hh"
+16535: inline bool
+16535: get_field(std::istream& s, const char* keyword, bool& positive) {
+16535:   std::string str;
+16535:   if (!(s >> str)
+16535:       || (str[0] != yes && str[0] != no)
+16535:       || str.substr(1) != keyword) {
+16535:     return false;
+16535:   }
+16535:   positive = (str[0] == yes);
+16535:   return true;
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::Status::ascii_dump(std::ostream& s) const {
+16535:   using namespace Implementation::Octagonal_Shapes;
+16535:   s << (test_zero_dim_univ() ? yes : no) << zero_dim_univ
+16535:     << separator
+16535:     << (test_empty() ? yes : no) << empty
+16535:     << separator
+16535:     << separator
+16535:     << (test_strongly_closed() ? yes : no) << strong_closed
+16535:     << separator;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Octagonal_Shape<T>::Status::ascii_load(std::istream& s) {
+16535:   using namespace Implementation::Octagonal_Shapes;
+16535:   bool positive = Suppress_Uninitialized_Warnings_Type<bool>::synonym();
+16535: 
+16535:   if (!get_field(s, zero_dim_univ, positive)) {
+16535:     return false;
+16535:   }
+16535:   if (positive) {
+16535:     set_zero_dim_univ();
+16535:   }
+16535: 
+16535:   if (!get_field(s, empty, positive)) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (positive) {
+16535:     set_empty();
+16535:   }
+16535: 
+16535:   if (!get_field(s, strong_closed, positive)) {
+16535:     return false;
+16535:   }
+16535:   if (positive) {
+16535:     set_strongly_closed();
+16535:   }
+16535:   else {
+16535:     reset_strongly_closed();
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   return true;
+16535: }
+16535: 
+16535: }
+16535: # 2327 "../../src/Octagonal_Shape_defs.hh" 2
+16535: # 1 "../../src/Octagonal_Shape_inlines.hh" 1
+16535: # 31 "../../src/Octagonal_Shape_inlines.hh"
+16535: # 1 "../../src/BD_Shape_defs.hh" 1
+16535: # 32 "../../src/Octagonal_Shape_inlines.hh" 2
+16535: 
+16535: 
+16535: # 1 "../../src/wrap_assign.hh" 1
+16535: # 33 "../../src/wrap_assign.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: struct Wrap_Dim_Translations {
+16535:   Variable var;
+16535:   Coefficient first_quadrant;
+16535:   Coefficient last_quadrant;
+16535:   Wrap_Dim_Translations(Variable v,
+16535:                         Coefficient_traits::const_reference f,
+16535:                         Coefficient_traits::const_reference l)
+16535:     : var(v), first_quadrant(f), last_quadrant(l) {
+16535:   }
+16535: };
+16535: 
+16535: typedef std::vector<Wrap_Dim_Translations> Wrap_Translations;
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: wrap_assign_ind(PSET& pointset,
+16535:                 Variables_Set& vars,
+16535:                 Wrap_Translations::const_iterator first,
+16535:                 Wrap_Translations::const_iterator end,
+16535:                 Bounded_Integer_Type_Width w,
+16535:                 Coefficient_traits::const_reference min_value,
+16535:                 Coefficient_traits::const_reference max_value,
+16535:                 const Constraint_System& cs,
+16535:                 Coefficient& tmp1,
+16535:                 Coefficient& tmp2) {
+16535:   const dimension_type space_dim = pointset.space_dimension();
+16535:   for (Wrap_Translations::const_iterator i = first; i != end; ++i) {
+16535:     const Wrap_Dim_Translations& wrap_dim_translations = *i;
+16535:     const Variable x(wrap_dim_translations.var);
+16535:     const Coefficient& first_quadrant = wrap_dim_translations.first_quadrant;
+16535:     const Coefficient& last_quadrant = wrap_dim_translations.last_quadrant;
+16535:     Coefficient& quadrant = tmp1;
+16535:     Coefficient& shift = tmp2;
+16535:     PSET hull(space_dim, EMPTY);
+16535:     for (quadrant = first_quadrant; quadrant <= last_quadrant; ++quadrant) {
+16535:       PSET p(pointset);
+16535:       if (quadrant != 0) {
+16535:         mul_2exp_assign(shift, quadrant, w);
+16535:         p.affine_image(x, x - shift, 1);
+16535:       }
+16535: 
+16535:       vars.erase(x.id());
+16535: 
+16535: 
+16535: 
+16535:       if (vars.empty()) {
+16535:         p.refine_with_constraints(cs);
+16535:       }
+16535:       else {
+16535:         for (Constraint_System::const_iterator j = cs.begin(),
+16535:                cs_end = cs.end(); j != cs_end; ++j) {
+16535:           if (j->expression().all_zeroes(vars)) {
+16535: 
+16535:             p.refine_with_constraint(*j);
+16535:           }
+16535:         }
+16535:       }
+16535:       p.refine_with_constraint(min_value <= x);
+16535:       p.refine_with_constraint(x <= max_value);
+16535:       hull.upper_bound_assign(p);
+16535:     }
+16535:     pointset.m_swap(hull);
+16535:   }
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: wrap_assign_col(PSET& dest,
+16535:                 const PSET& src,
+16535:                 const Variables_Set& vars,
+16535:                 Wrap_Translations::const_iterator first,
+16535:                 Wrap_Translations::const_iterator end,
+16535:                 Bounded_Integer_Type_Width w,
+16535:                 Coefficient_traits::const_reference min_value,
+16535:                 Coefficient_traits::const_reference max_value,
+16535:                 const Constraint_System* cs_p,
+16535:                 Coefficient& tmp) {
+16535:   if (first == end) {
+16535:     PSET p(src);
+16535:     if (cs_p != 0) {
+16535:       p.refine_with_constraints(*cs_p);
+16535:     }
+16535:     for (Variables_Set::const_iterator i = vars.begin(),
+16535:            vars_end = vars.end(); i != vars_end; ++i) {
+16535:       const Variable x(*i);
+16535:       p.refine_with_constraint(min_value <= x);
+16535:       p.refine_with_constraint(x <= max_value);
+16535:     }
+16535:     dest.upper_bound_assign(p);
+16535:   }
+16535:   else {
+16535:     const Wrap_Dim_Translations& wrap_dim_translations = *first;
+16535:     const Variable x(wrap_dim_translations.var);
+16535:     const Coefficient& first_quadrant = wrap_dim_translations.first_quadrant;
+16535:     const Coefficient& last_quadrant = wrap_dim_translations.last_quadrant;
+16535:     Coefficient& shift = tmp;
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_quadrant; Parma_Polyhedra_Library::Coefficient& quadrant = holder_quadrant.item();
+16535:     for (quadrant = first_quadrant; quadrant <= last_quadrant; ++quadrant) {
+16535:       if (quadrant != 0) {
+16535:         mul_2exp_assign(shift, quadrant, w);
+16535:         PSET p(src);
+16535:         p.affine_image(x, x - shift, 1);
+16535:         wrap_assign_col(dest, p, vars, first+1, end, w, min_value, max_value,
+16535:                         cs_p, tmp);
+16535:       }
+16535:       else {
+16535:         wrap_assign_col(dest, src, vars, first+1, end, w, min_value, max_value,
+16535:                         cs_p, tmp);
+16535:       }
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: wrap_assign(PSET& pointset,
+16535:             const Variables_Set& vars,
+16535:             const Bounded_Integer_Type_Width w,
+16535:             const Bounded_Integer_Type_Representation r,
+16535:             const Bounded_Integer_Type_Overflow o,
+16535:             const Constraint_System* cs_p,
+16535:             const unsigned complexity_threshold,
+16535:             const bool wrap_individually,
+16535:             const char* class_name) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (cs_p != 0) {
+16535:     const dimension_type vars_space_dim = vars.space_dimension();
+16535:     if (cs_p->space_dimension() > vars_space_dim) {
+16535:       std::ostringstream s;
+16535:       s << "PPL::" << class_name << "::wrap_assign(..., cs_p, ...):"
+16535:         << std::endl
+16535:         << "vars.space_dimension() == " << vars_space_dim
+16535:         << ", cs_p->space_dimension() == " << cs_p->space_dimension() << ".";
+16535:       throw std::invalid_argument(s.str());
+16535:     }
+16535: # 191 "../../src/wrap_assign.hh"
+16535:   }
+16535: 
+16535: 
+16535:   if (vars.empty()) {
+16535:     if (cs_p != 0) {
+16535:       pointset.refine_with_constraints(*cs_p);
+16535:     }
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type space_dim = pointset.space_dimension();
+16535:   if (vars.space_dimension() > space_dim) {
+16535:     std::ostringstream s;
+16535:     s << "PPL::" << class_name << "::wrap_assign(vs, ...):" << std::endl
+16535:       << "this->space_dimension() == " << space_dim
+16535:       << ", required space dimension == " << vars.space_dimension() << ".";
+16535:     throw std::invalid_argument(s.str());
+16535:   }
+16535: 
+16535: 
+16535:   if (pointset.is_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_value; Parma_Polyhedra_Library::Coefficient& min_value = holder_min_value.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_value; Parma_Polyhedra_Library::Coefficient& max_value = holder_max_value.item();
+16535:   if (r == UNSIGNED) {
+16535:     min_value = 0;
+16535:     mul_2exp_assign(max_value, Coefficient_one(), w);
+16535:     --max_value;
+16535:   }
+16535:   else {
+16535:     ((void) 0);
+16535:     mul_2exp_assign(max_value, Coefficient_one(), w-1);
+16535:     neg_assign(min_value, max_value);
+16535:     --max_value;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Wrap_Translations translations;
+16535: 
+16535: 
+16535: 
+16535:   Variables_Set dimensions_to_be_translated;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   unsigned collective_wrap_complexity = 1;
+16535: 
+16535: 
+16535: 
+16535:   bool collective_wrap_too_complex = false;
+16535: 
+16535:   if (!wrap_individually) {
+16535:     translations.reserve(space_dim);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   Constraint_System full_range_bounds;
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_l_n; Parma_Polyhedra_Library::Coefficient& l_n = holder_l_n.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_l_d; Parma_Polyhedra_Library::Coefficient& l_d = holder_l_d.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_u_n; Parma_Polyhedra_Library::Coefficient& u_n = holder_u_n.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_u_d; Parma_Polyhedra_Library::Coefficient& u_d = holder_u_d.item();
+16535: 
+16535:   for (Variables_Set::const_iterator i = vars.begin(),
+16535:          vars_end = vars.end(); i != vars_end; ++i) {
+16535: 
+16535:     const Variable x(*i);
+16535: 
+16535:     bool extremum;
+16535: 
+16535:     if (!pointset.minimize(x, l_n, l_d, extremum)) {
+16535:     set_full_range:
+16535:       pointset.unconstrain(x);
+16535:       full_range_bounds.insert(min_value <= x);
+16535:       full_range_bounds.insert(x <= max_value);
+16535:       continue;
+16535:     }
+16535: 
+16535:     if (!pointset.maximize(x, u_n, u_d, extremum)) {
+16535:       goto set_full_range;
+16535:     }
+16535: 
+16535:     div_assign_r(l_n, l_n, l_d, ROUND_DOWN);
+16535:     div_assign_r(u_n, u_n, u_d, ROUND_DOWN);
+16535:     l_n -= min_value;
+16535:     u_n -= min_value;
+16535:     div_2exp_assign_r(l_n, l_n, w, ROUND_DOWN);
+16535:     div_2exp_assign_r(u_n, u_n, w, ROUND_DOWN);
+16535:     Coefficient& first_quadrant = l_n;
+16535:     const Coefficient& last_quadrant = u_n;
+16535: 
+16535: 
+16535:     if (first_quadrant == 0 && last_quadrant == 0) {
+16535:       continue;
+16535:     }
+16535: 
+16535: 
+16535:     if (o == OVERFLOW_IMPOSSIBLE) {
+16535:       if (first_quadrant < 0) {
+16535:         full_range_bounds.insert(min_value <= x);
+16535:       }
+16535:       if (last_quadrant > 0) {
+16535:         full_range_bounds.insert(x <= max_value);
+16535:       }
+16535:       continue;
+16535:     }
+16535: 
+16535:     if (o == OVERFLOW_UNDEFINED || collective_wrap_too_complex) {
+16535:       goto set_full_range;
+16535:     }
+16535: 
+16535:     Coefficient& quadrants = u_d;
+16535:     quadrants = last_quadrant - first_quadrant + 1;
+16535: 
+16535:     unsigned extension = Suppress_Uninitialized_Warnings_Type<unsigned>::synonym();
+16535:     Result res = assign_r(extension, quadrants, ROUND_IGNORE);
+16535:     if (result_overflow(res) != 0 || extension > complexity_threshold) {
+16535:       goto set_full_range;
+16535:     }
+16535: 
+16535:     if (!wrap_individually && !collective_wrap_too_complex) {
+16535:       res = mul_assign_r(collective_wrap_complexity,
+16535:                          collective_wrap_complexity, extension, ROUND_IGNORE);
+16535:       if (result_overflow(res) != 0
+16535:           || collective_wrap_complexity > complexity_threshold) {
+16535:         collective_wrap_too_complex = true;
+16535:       }
+16535:       if (collective_wrap_too_complex) {
+16535: 
+16535:         for (Wrap_Translations::const_iterator j = translations.begin(),
+16535:                translations_end = translations.end();
+16535:              j != translations_end;
+16535:              ++j) {
+16535:           const Variable y(j->var);
+16535:           pointset.unconstrain(y);
+16535:           full_range_bounds.insert(min_value <= y);
+16535:           full_range_bounds.insert(y <= max_value);
+16535:         }
+16535:       }
+16535:     }
+16535: 
+16535:     if (wrap_individually && cs_p == 0) {
+16535:       Coefficient& quadrant = first_quadrant;
+16535: 
+16535: 
+16535:       Coefficient& shift = l_d;
+16535:       PSET hull(space_dim, EMPTY);
+16535:       for ( ; quadrant <= last_quadrant; ++quadrant) {
+16535:         PSET p(pointset);
+16535:         if (quadrant != 0) {
+16535:           mul_2exp_assign(shift, quadrant, w);
+16535:           p.affine_image(x, x - shift, 1);
+16535:         }
+16535:         p.refine_with_constraint(min_value <= x);
+16535:         p.refine_with_constraint(x <= max_value);
+16535:         hull.upper_bound_assign(p);
+16535:       }
+16535:       pointset.m_swap(hull);
+16535:     }
+16535:     else if (wrap_individually || !collective_wrap_too_complex) {
+16535:       ((void) 0);
+16535:       dimensions_to_be_translated.insert(x);
+16535:       translations
+16535:         .push_back(Wrap_Dim_Translations(x, first_quadrant, last_quadrant));
+16535:     }
+16535:   }
+16535: 
+16535:   if (!translations.empty()) {
+16535:     if (wrap_individually) {
+16535:       ((void) 0);
+16535:       wrap_assign_ind(pointset, dimensions_to_be_translated,
+16535:                       translations.begin(), translations.end(),
+16535:                       w, min_value, max_value, *cs_p, l_n, l_d);
+16535:     }
+16535:     else {
+16535:       PSET hull(space_dim, EMPTY);
+16535:       wrap_assign_col(hull, pointset, dimensions_to_be_translated,
+16535:                       translations.begin(), translations.end(),
+16535:                       w, min_value, max_value, cs_p, l_n);
+16535:       pointset.m_swap(hull);
+16535:     }
+16535:   }
+16535: 
+16535:   if (cs_p != 0) {
+16535:     pointset.refine_with_constraints(*cs_p);
+16535:   }
+16535:   pointset.refine_with_constraints(full_range_bounds);
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 35 "../../src/Octagonal_Shape_inlines.hh" 2
+16535: 
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: namespace Octagonal_Shapes {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: inline dimension_type
+16535: coherent_index(const dimension_type i) {
+16535:   return (i % 2 != 0) ? (i-1) : (i+1);
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: Octagonal_Shape<T>::max_space_dimension() {
+16535:   return OR_Matrix<N>::max_num_rows()/2;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Octagonal_Shape<T>::marked_zero_dim_univ() const {
+16535:   return status.test_zero_dim_univ();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Octagonal_Shape<T>::marked_strongly_closed() const {
+16535:   return status.test_strongly_closed();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Octagonal_Shape<T>::marked_empty() const {
+16535:   return status.test_empty();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::set_zero_dim_univ() {
+16535:   status.set_zero_dim_univ();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::set_empty() {
+16535:   status.set_empty();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::set_strongly_closed() {
+16535:   status.set_strongly_closed();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::reset_strongly_closed() {
+16535:   status.reset_strongly_closed();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: Octagonal_Shape<T>::Octagonal_Shape(const dimension_type num_dimensions,
+16535:                                     const Degenerate_Element kind)
+16535:   : matrix(num_dimensions), space_dim(num_dimensions), status() {
+16535:   if (kind == EMPTY) {
+16535:     set_empty();
+16535:   }
+16535:   else if (num_dimensions > 0) {
+16535: 
+16535:     set_strongly_closed();
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: Octagonal_Shape<T>::Octagonal_Shape(const Octagonal_Shape& y, Complexity_Class)
+16535:   : matrix(y.matrix), space_dim(y.space_dim), status(y.status) {
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline
+16535: Octagonal_Shape<T>::Octagonal_Shape(const Octagonal_Shape<U>& y,
+16535:                                     Complexity_Class)
+16535: 
+16535: 
+16535:   : matrix((y.strong_closure_assign(), y.matrix)),
+16535:     space_dim(y.space_dim),
+16535:     status() {
+16535: 
+16535:   if (y.marked_empty()) {
+16535:     set_empty();
+16535:   }
+16535:   else if (y.marked_zero_dim_univ()) {
+16535:     set_zero_dim_univ();
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: Octagonal_Shape<T>::Octagonal_Shape(const Constraint_System& cs)
+16535:   : matrix(cs.space_dimension()),
+16535:     space_dim(cs.space_dimension()),
+16535:     status() {
+16535:   if (cs.space_dimension() > 0) {
+16535: 
+16535:     set_strongly_closed();
+16535:   }
+16535:   add_constraints(cs);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: Octagonal_Shape<T>::Octagonal_Shape(const Congruence_System& cgs)
+16535:   : matrix(cgs.space_dimension()),
+16535:     space_dim(cgs.space_dimension()),
+16535:     status() {
+16535:   if (cgs.space_dimension() > 0) {
+16535: 
+16535:     set_strongly_closed();
+16535:   }
+16535:   add_congruences(cgs);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Interval>
+16535: inline
+16535: Octagonal_Shape<T>::Octagonal_Shape(const Box<Interval>& box,
+16535:                                     Complexity_Class)
+16535:   : matrix(box.space_dimension()),
+16535:     space_dim(box.space_dimension()),
+16535:     status() {
+16535: 
+16535:   if (box.is_empty()) {
+16535:     set_empty();
+16535:   }
+16535:   else if (box.space_dimension() > 0) {
+16535: 
+16535:     set_strongly_closed();
+16535:     refine_with_constraints(box.constraints());
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: Octagonal_Shape<T>::Octagonal_Shape(const Grid& grid,
+16535:                                     Complexity_Class)
+16535:   : matrix(grid.space_dimension()),
+16535:     space_dim(grid.space_dimension()),
+16535:     status() {
+16535:   if (grid.space_dimension() > 0) {
+16535: 
+16535:     set_strongly_closed();
+16535:   }
+16535: 
+16535:   refine_with_congruences(grid.minimized_congruences());
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline
+16535: Octagonal_Shape<T>::Octagonal_Shape(const BD_Shape<U>& bd,
+16535:                                     Complexity_Class)
+16535:   : matrix(bd.space_dimension()),
+16535:     space_dim(bd.space_dimension()),
+16535:     status() {
+16535: 
+16535:   if (bd.is_empty()) {
+16535:     set_empty();
+16535:   }
+16535:   else if (bd.space_dimension() > 0) {
+16535: 
+16535:     set_strongly_closed();
+16535:     refine_with_constraints(bd.constraints());
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline Congruence_System
+16535: Octagonal_Shape<T>::congruences() const {
+16535:   return minimized_congruences();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline Octagonal_Shape<T>&
+16535: Octagonal_Shape<T>::operator=(const Octagonal_Shape& y) {
+16535:   matrix = y.matrix;
+16535:   space_dim = y.space_dim;
+16535:   status = y.status;
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: Octagonal_Shape<T>::~Octagonal_Shape() {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::m_swap(Octagonal_Shape& y) {
+16535:   using std::swap;
+16535:   swap(matrix, y.matrix);
+16535:   swap(space_dim, y.space_dim);
+16535:   swap(status, y.status);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: Octagonal_Shape<T>::space_dimension() const {
+16535:   return space_dim;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Octagonal_Shape<T>::is_discrete() const {
+16535:   return affine_dimension() == 0;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Octagonal_Shape<T>::is_empty() const {
+16535:   strong_closure_assign();
+16535:   return marked_empty();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Octagonal_Shape<T>::bounds_from_above(const Linear_Expression& expr) const {
+16535:   return bounds(expr, true);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Octagonal_Shape<T>::bounds_from_below(const Linear_Expression& expr) const {
+16535:   return bounds(expr, false);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Octagonal_Shape<T>::maximize(const Linear_Expression& expr,
+16535:                              Coefficient& sup_n, Coefficient& sup_d,
+16535:                              bool& maximum) const {
+16535:   return max_min(expr, true, sup_n, sup_d, maximum);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Octagonal_Shape<T>::maximize(const Linear_Expression& expr,
+16535:                              Coefficient& sup_n, Coefficient& sup_d,
+16535:                              bool& maximum,
+16535:                              Generator& g) const {
+16535:   return max_min(expr, true, sup_n, sup_d, maximum, g);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Octagonal_Shape<T>::minimize(const Linear_Expression& expr,
+16535:                              Coefficient& inf_n, Coefficient& inf_d,
+16535:                              bool& minimum) const {
+16535:   return max_min(expr, false, inf_n, inf_d, minimum);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Octagonal_Shape<T>::minimize(const Linear_Expression& expr,
+16535:                              Coefficient& inf_n, Coefficient& inf_d,
+16535:                              bool& minimum,
+16535:                              Generator& g) const {
+16535:   return max_min(expr, false, inf_n, inf_d, minimum, g);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Octagonal_Shape<T>::is_topologically_closed() const {
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::topological_closure_assign() {
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: operator==(const Octagonal_Shape<T>& x, const Octagonal_Shape<T>& y) {
+16535:   if (x.space_dim != y.space_dim) {
+16535: 
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (x.space_dim == 0) {
+16535:     if (x.marked_empty()) {
+16535:       return y.marked_empty();
+16535:     }
+16535:     else {
+16535:       return !y.marked_empty();
+16535:     }
+16535:   }
+16535: 
+16535:   x.strong_closure_assign();
+16535:   y.strong_closure_assign();
+16535: 
+16535: 
+16535:   if (x.marked_empty()) {
+16535:     return y.marked_empty();
+16535:   }
+16535:   if (y.marked_empty()) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   return x.matrix == y.matrix;
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: operator!=(const Octagonal_Shape<T>& x, const Octagonal_Shape<T>& y) {
+16535:   return !(x == y);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline const typename Octagonal_Shape<T>::coefficient_type&
+16535: Octagonal_Shape<T>::matrix_at(const dimension_type i,
+16535:                               const dimension_type j) const {
+16535:   ((void) 0);
+16535:   using namespace Implementation::Octagonal_Shapes;
+16535:   return (j < matrix.row_size(i))
+16535:     ? matrix[i][j]
+16535:     : matrix[coherent_index(j)][coherent_index(i)];
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename Octagonal_Shape<T>::coefficient_type&
+16535: Octagonal_Shape<T>::matrix_at(const dimension_type i,
+16535:                               const dimension_type j) {
+16535:   ((void) 0);
+16535:   using namespace Implementation::Octagonal_Shapes;
+16535:   return (j < matrix.row_size(i))
+16535:     ? matrix[i][j]
+16535:     : matrix[coherent_index(j)][coherent_index(i)];
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline Constraint_System
+16535: Octagonal_Shape<T>::minimized_constraints() const {
+16535:   strong_reduction_assign();
+16535:   return constraints();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::add_octagonal_constraint(const dimension_type i,
+16535:                                              const dimension_type j,
+16535:                                              const N& k) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   N& r_i_j = matrix[i][j];
+16535:   if (r_i_j > k) {
+16535:     r_i_j = k;
+16535:     if (marked_strongly_closed()) {
+16535:       reset_strongly_closed();
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>
+16535: ::add_octagonal_constraint(const dimension_type i,
+16535:                            const dimension_type j,
+16535:                            Coefficient_traits::const_reference numer,
+16535:                            Coefficient_traits::const_reference denom) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_k; N& k = holder_k.item();
+16535:   div_round_up(k, numer, denom);
+16535:   add_octagonal_constraint(i, j, k);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::add_constraints(const Constraint_System& cs) {
+16535:   for (Constraint_System::const_iterator i = cs.begin(),
+16535:          i_end = cs.end(); i != i_end; ++i) {
+16535:     add_constraint(*i);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::add_recycled_constraints(Constraint_System& cs) {
+16535:   add_constraints(cs);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::add_recycled_congruences(Congruence_System& cgs) {
+16535:   add_congruences(cgs);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::add_congruences(const Congruence_System& cgs) {
+16535:   for (Congruence_System::const_iterator i = cgs.begin(),
+16535:          cgs_end = cgs.end(); i != cgs_end; ++i) {
+16535:     add_congruence(*i);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::refine_with_constraint(const Constraint& c) {
+16535: 
+16535:   if (c.space_dimension() > space_dimension()) {
+16535:     throw_dimension_incompatible("refine_with_constraint(c)", c);
+16535:   }
+16535: 
+16535:   if (!marked_empty()) {
+16535:     refine_no_check(c);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::refine_with_constraints(const Constraint_System& cs) {
+16535: 
+16535:   if (cs.space_dimension() > space_dimension()) {
+16535:     throw_invalid_argument("refine_with_constraints(cs)",
+16535:                            "cs and *this are space-dimension incompatible");
+16535:   }
+16535: 
+16535:   for (Constraint_System::const_iterator i = cs.begin(),
+16535:          cs_end = cs.end(); !marked_empty() && i != cs_end; ++i) {
+16535:     refine_no_check(*i);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::refine_with_congruence(const Congruence& cg) {
+16535:   const dimension_type cg_space_dim = cg.space_dimension();
+16535: 
+16535:   if (cg_space_dim > space_dimension()) {
+16535:     throw_dimension_incompatible("refine_with_congruence(cg)", cg);
+16535:   }
+16535:   if (!marked_empty()) {
+16535:     refine_no_check(cg);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::refine_with_congruences(const Congruence_System& cgs) {
+16535: 
+16535:   if (cgs.space_dimension() > space_dimension()) {
+16535:     throw_invalid_argument("refine_with_congruences(cgs)",
+16535:                            "cgs and *this are space-dimension incompatible");
+16535:   }
+16535: 
+16535:   for (Congruence_System::const_iterator i = cgs.begin(),
+16535:          cgs_end = cgs.end(); !marked_empty() && i != cgs_end; ++i) {
+16535:     refine_no_check(*i);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::refine_no_check(const Congruence& cg) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535:   if (cg.is_proper_congruence()) {
+16535:     if (cg.is_inconsistent()) {
+16535:       set_empty();
+16535:     }
+16535: 
+16535:     return;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   Constraint c(cg);
+16535:   refine_no_check(c);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Octagonal_Shape<T>::can_recycle_constraint_systems() {
+16535:   return false;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Octagonal_Shape<T>::can_recycle_congruence_systems() {
+16535:   return false;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>
+16535: ::remove_higher_space_dimensions(const dimension_type new_dimension) {
+16535: 
+16535:   if (new_dimension > space_dim) {
+16535:     throw_dimension_incompatible("remove_higher_space_dimension(nd)",
+16535:                                  new_dimension);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (new_dimension == space_dim) {
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535:   strong_closure_assign();
+16535:   matrix.shrink(new_dimension);
+16535: 
+16535: 
+16535:   if (new_dimension == 0 && !marked_empty()) {
+16535:     set_zero_dim_univ();
+16535:   }
+16535:   space_dim = new_dimension;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::wrap_assign(const Variables_Set& vars,
+16535:                                 Bounded_Integer_Type_Width w,
+16535:                                 Bounded_Integer_Type_Representation r,
+16535:                                 Bounded_Integer_Type_Overflow o,
+16535:                                 const Constraint_System* cs_p,
+16535:                                 unsigned complexity_threshold,
+16535:                                 bool wrap_individually) {
+16535:   Implementation::wrap_assign(*this,
+16535:                               vars, w, r, o, cs_p,
+16535:                               complexity_threshold, wrap_individually,
+16535:                               "Octagonal_Shape");
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::widening_assign(const Octagonal_Shape& y, unsigned* tp) {
+16535:   BHMZ05_widening_assign(y, tp);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::CC76_extrapolation_assign(const Octagonal_Shape& y,
+16535:                                               unsigned* tp) {
+16535:   static N stop_points[] = {
+16535:     N(-2, ROUND_UP),
+16535:     N(-1, ROUND_UP),
+16535:     N( 0, ROUND_UP),
+16535:     N( 1, ROUND_UP),
+16535:     N( 2, ROUND_UP)
+16535:   };
+16535:   CC76_extrapolation_assign(y,
+16535:                             stop_points,
+16535:                             stop_points
+16535:                             + sizeof(stop_points)/sizeof(stop_points[0]),
+16535:                             tp);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::time_elapse_assign(const Octagonal_Shape& y) {
+16535: 
+16535:   if (space_dimension() != y.space_dimension()) {
+16535:     throw_dimension_incompatible("time_elapse_assign(y)", y);
+16535:   }
+16535: 
+16535: 
+16535:   C_Polyhedron ph_x(constraints());
+16535:   C_Polyhedron ph_y(y.constraints());
+16535:   ph_x.time_elapse_assign(ph_y);
+16535:   Octagonal_Shape<T> x(ph_x);
+16535:   m_swap(x);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: Octagonal_Shape<T>::strictly_contains(const Octagonal_Shape& y) const {
+16535:   const Octagonal_Shape<T>& x = *this;
+16535:   return x.contains(y) && !y.contains(x);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Interval_Info>
+16535: inline void
+16535: Octagonal_Shape<T>::generalized_refine_with_linear_form_inequality(
+16535:                     const Linear_Form< Interval<T, Interval_Info> >& left,
+16535:                     const Linear_Form< Interval<T, Interval_Info> >& right,
+16535:                     const Relation_Symbol relsym) {
+16535:   switch (relsym) {
+16535:   case EQUAL:
+16535: 
+16535:     refine_with_linear_form_inequality(left, right);
+16535:     refine_with_linear_form_inequality(right, left);
+16535:     break;
+16535:   case LESS_THAN:
+16535:   case LESS_OR_EQUAL:
+16535:     refine_with_linear_form_inequality(left, right);
+16535:     break;
+16535:   case GREATER_THAN:
+16535:   case GREATER_OR_EQUAL:
+16535:     refine_with_linear_form_inequality(right, left);
+16535:     break;
+16535:   case NOT_EQUAL:
+16535:     break;
+16535:   default:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     break;
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Interval_Info>
+16535: inline void
+16535: Octagonal_Shape<T>::
+16535: refine_fp_interval_abstract_store(
+16535:           Box< Interval<T, Interval_Info> >& store) const {
+16535: 
+16535: 
+16535:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_683 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<T>::is_exact)>) }
+16535: 
+16535:                                                      ;
+16535: 
+16535:   typedef Interval<T, Interval_Info> FP_Interval_Type;
+16535:   store.intersection_assign(Box<FP_Interval_Type>(*this));
+16535: 
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename T>
+16535: inline bool
+16535: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                             const Octagonal_Shape<T>& x,
+16535:                             const Octagonal_Shape<T>& y,
+16535:                             const Rounding_Dir dir,
+16535:                             Temp& tmp0,
+16535:                             Temp& tmp1,
+16535:                             Temp& tmp2) {
+16535: 
+16535:   if (x.space_dim != y.space_dim) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (x.space_dim == 0) {
+16535:     if (x.marked_empty() == y.marked_empty()) {
+16535:       assign_r(r, 0, ROUND_NOT_NEEDED);
+16535:     }
+16535:     else {
+16535:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     }
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   x.strong_closure_assign();
+16535:   y.strong_closure_assign();
+16535: 
+16535: 
+16535: 
+16535:   if (x.marked_empty() || y.marked_empty()) {
+16535:     if (x.marked_empty() == y.marked_empty()) {
+16535:       assign_r(r, 0, ROUND_NOT_NEEDED);
+16535:     }
+16535:     else {
+16535:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     }
+16535:     return true;
+16535:   }
+16535: 
+16535:   return rectilinear_distance_assign(r, x.matrix, y.matrix, dir,
+16535:                                      tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename T>
+16535: inline bool
+16535: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                             const Octagonal_Shape<T>& x,
+16535:                             const Octagonal_Shape<T>& y,
+16535:                             const Rounding_Dir dir) {
+16535:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
+16535:   return rectilinear_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename To, typename T>
+16535: inline bool
+16535: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                             const Octagonal_Shape<T>& x,
+16535:                             const Octagonal_Shape<T>& y,
+16535:                             const Rounding_Dir dir) {
+16535:   return rectilinear_distance_assign<To, To, T>(r, x, y, dir);
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename T>
+16535: inline bool
+16535: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                           const Octagonal_Shape<T>& x,
+16535:                           const Octagonal_Shape<T>& y,
+16535:                           const Rounding_Dir dir,
+16535:                           Temp& tmp0,
+16535:                           Temp& tmp1,
+16535:                           Temp& tmp2) {
+16535: 
+16535:   if (x.space_dim != y.space_dim) {
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535:   if (x.space_dim == 0) {
+16535:     if (x.marked_empty() == y.marked_empty()) {
+16535:       assign_r(r, 0, ROUND_NOT_NEEDED);
+16535:     }
+16535:     else {
+16535:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     }
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   x.strong_closure_assign();
+16535:   y.strong_closure_assign();
+16535: 
+16535: 
+16535: 
+16535:   if (x.marked_empty() || y.marked_empty()) {
+16535:     if (x.marked_empty() == y.marked_empty()) {
+16535:       assign_r(r, 0, ROUND_NOT_NEEDED);
+16535:     }
+16535:     else {
+16535:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     }
+16535:     return true;
+16535:   }
+16535: 
+16535:   return euclidean_distance_assign(r, x.matrix, y.matrix, dir,
+16535:                                    tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename T>
+16535: inline bool
+16535: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                           const Octagonal_Shape<T>& x,
+16535:                           const Octagonal_Shape<T>& y,
+16535:                           const Rounding_Dir dir) {
+16535:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
+16535:   return euclidean_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename To, typename T>
+16535: inline bool
+16535: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                           const Octagonal_Shape<T>& x,
+16535:                           const Octagonal_Shape<T>& y,
+16535:                           const Rounding_Dir dir) {
+16535:   return euclidean_distance_assign<To, To, T>(r, x, y, dir);
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename T>
+16535: inline bool
+16535: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                            const Octagonal_Shape<T>& x,
+16535:                            const Octagonal_Shape<T>& y,
+16535:                            const Rounding_Dir dir,
+16535:                            Temp& tmp0,
+16535:                            Temp& tmp1,
+16535:                            Temp& tmp2) {
+16535: 
+16535:   if (x.space_dim != y.space_dim) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (x.space_dim == 0) {
+16535:     if (x.marked_empty() == y.marked_empty()) {
+16535:       assign_r(r, 0, ROUND_NOT_NEEDED);
+16535:     }
+16535:     else {
+16535:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     }
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   x.strong_closure_assign();
+16535:   y.strong_closure_assign();
+16535: 
+16535: 
+16535: 
+16535:   if (x.marked_empty() || y.marked_empty()) {
+16535:     if (x.marked_empty() == y.marked_empty()) {
+16535:       assign_r(r, 0, ROUND_NOT_NEEDED);
+16535:     }
+16535:     else {
+16535:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     }
+16535:     return true;
+16535:   }
+16535: 
+16535:   return l_infinity_distance_assign(r, x.matrix, y.matrix, dir,
+16535:                                     tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename T>
+16535: inline bool
+16535: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                            const Octagonal_Shape<T>& x,
+16535:                            const Octagonal_Shape<T>& y,
+16535:                            const Rounding_Dir dir) {
+16535:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
+16535:   return l_infinity_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename To, typename T>
+16535: inline bool
+16535: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                            const Octagonal_Shape<T>& x,
+16535:                            const Octagonal_Shape<T>& y,
+16535:                            const Rounding_Dir dir) {
+16535:   return l_infinity_distance_assign<To, To, T>(r, x, y, dir);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline memory_size_type
+16535: Octagonal_Shape<T>::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline int32_t
+16535: Octagonal_Shape<T>::hash_code() const {
+16535:   return hash_code_from_dimension(space_dimension());
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Octagonal_Shape<T>::drop_some_non_integer_points_helper(N& elem) {
+16535:   if (!is_integer(elem)) {
+16535: 
+16535: 
+16535: 
+16535:     floor_assign_r(elem, elem, ROUND_DOWN);
+16535:     ((void) 0);
+16535:     reset_strongly_closed();
+16535:   }
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: swap(Octagonal_Shape<T>& x, Octagonal_Shape<T>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 2328 "../../src/Octagonal_Shape_defs.hh" 2
+16535: # 1 "../../src/Octagonal_Shape_templates.hh" 1
+16535: # 43 "../../src/Octagonal_Shape_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: Octagonal_Shape<T>::Octagonal_Shape(const Polyhedron& ph,
+16535:                                     const Complexity_Class complexity)
+16535:   : matrix(0), space_dim(0), status() {
+16535:   const dimension_type num_dimensions = ph.space_dimension();
+16535: 
+16535:   if (ph.marked_empty()) {
+16535:     *this = Octagonal_Shape(num_dimensions, EMPTY);
+16535:     return;
+16535:   }
+16535: 
+16535:   if (num_dimensions == 0) {
+16535:     *this = Octagonal_Shape(num_dimensions, UNIVERSE);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (complexity == ANY_COMPLEXITY
+16535:       || (!ph.has_pending_constraints() && ph.generators_are_up_to_date())) {
+16535:     *this = Octagonal_Shape(ph.generators());
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: 
+16535:   if (!ph.has_something_pending() && ph.constraints_are_minimized()) {
+16535: 
+16535: 
+16535:     if (ph.is_universe()) {
+16535:       *this = Octagonal_Shape(num_dimensions, UNIVERSE);
+16535:       return;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   for (Constraint_System::const_iterator i = ph.con_sys.begin(),
+16535:          cs_end = ph.con_sys.end(); i != cs_end; ++i) {
+16535:     if (i->is_inconsistent()) {
+16535:       *this = Octagonal_Shape(num_dimensions, EMPTY);
+16535:       return;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (complexity == SIMPLEX_COMPLEXITY) {
+16535:     MIP_Problem lp(num_dimensions);
+16535:     lp.set_optimization_mode(MAXIMIZATION);
+16535: 
+16535:     const Constraint_System& ph_cs = ph.constraints();
+16535:     if (!ph_cs.has_strict_inequalities()) {
+16535:       lp.add_constraints(ph_cs);
+16535:     }
+16535:     else {
+16535: 
+16535:       for (Constraint_System::const_iterator i = ph_cs.begin(),
+16535:              ph_cs_end = ph_cs.end(); i != ph_cs_end; ++i) {
+16535:         const Constraint& c = *i;
+16535:         if (c.is_strict_inequality()) {
+16535:           Linear_Expression expr(c.expression());
+16535:           lp.add_constraint(expr >= 0);
+16535:         }
+16535:         else {
+16535:           lp.add_constraint(c);
+16535:         }
+16535:       }
+16535:     }
+16535: 
+16535: 
+16535:     if (!lp.is_satisfiable()) {
+16535:       *this = Octagonal_Shape<T>(num_dimensions, EMPTY);
+16535:       return;
+16535:     }
+16535: 
+16535: 
+16535:     *this = Octagonal_Shape<T>(num_dimensions, UNIVERSE);
+16535: 
+16535:     Generator g(point());
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
+16535:     for (dimension_type i = 0; i < num_dimensions; ++i) {
+16535:       Variable x(i);
+16535: 
+16535:       lp.set_objective_function(x);
+16535:       if (lp.solve() == OPTIMIZED_MIP_PROBLEM) {
+16535:         g = lp.optimizing_point();
+16535:         lp.evaluate_objective_function(g, numer, denom);
+16535:         numer *= 2;
+16535:         div_round_up(matrix[2*i + 1][2*i], numer, denom);
+16535:       }
+16535: 
+16535:       for (dimension_type j = 0; j < i; ++j) {
+16535:         Variable y(j);
+16535:         lp.set_objective_function(x + y);
+16535:         if (lp.solve() == OPTIMIZED_MIP_PROBLEM) {
+16535:           g = lp.optimizing_point();
+16535:           lp.evaluate_objective_function(g, numer, denom);
+16535:           div_round_up(matrix[2*i + 1][2*j], numer, denom);
+16535:         }
+16535:       }
+16535: 
+16535:       for (dimension_type j = 0; j < num_dimensions; ++j) {
+16535:         if (i == j) {
+16535:           continue;
+16535:         }
+16535:         Variable y(j);
+16535:         lp.set_objective_function(x - y);
+16535:         if (lp.solve() == OPTIMIZED_MIP_PROBLEM) {
+16535:           g = lp.optimizing_point();
+16535:           lp.evaluate_objective_function(g, numer, denom);
+16535:           div_round_up(((i < j) ?
+16535:                         matrix[2*j][2*i]
+16535:                         : matrix[2*i + 1][2*j + 1]),
+16535:                        numer, denom);
+16535:         }
+16535:       }
+16535: 
+16535:       for (dimension_type j = 0; j < num_dimensions; ++j) {
+16535:         if (i == j) {
+16535:           continue;
+16535:         }
+16535:         Variable y(j);
+16535:         lp.set_objective_function(x - y);
+16535:         if (lp.solve() == OPTIMIZED_MIP_PROBLEM) {
+16535:           g = lp.optimizing_point();
+16535:           lp.evaluate_objective_function(g, numer, denom);
+16535:           div_round_up(((i < j)
+16535:                         ? matrix[2*j][2*i]
+16535:                         : matrix[2*i + 1][2*j + 1]),
+16535:                        numer, denom);
+16535:         }
+16535:       }
+16535: 
+16535:       for (dimension_type j = 0; j < i; ++j) {
+16535:         Variable y(j);
+16535:         lp.set_objective_function(-x - y);
+16535:         if (lp.solve() == OPTIMIZED_MIP_PROBLEM) {
+16535:           g = lp.optimizing_point();
+16535:           lp.evaluate_objective_function(g, numer, denom);
+16535:           div_round_up(matrix[2*i][2*j + 1], numer, denom);
+16535:         }
+16535:       }
+16535: 
+16535:       lp.set_objective_function(-x);
+16535:       if (lp.solve() == OPTIMIZED_MIP_PROBLEM) {
+16535:         g = lp.optimizing_point();
+16535:         lp.evaluate_objective_function(g, numer, denom);
+16535:         numer *= 2;
+16535:         div_round_up(matrix[2*i][2*i + 1], numer, denom);
+16535:       }
+16535:     }
+16535:     set_strongly_closed();
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   *this = Octagonal_Shape(num_dimensions, UNIVERSE);
+16535:   refine_with_constraints(ph.constraints());
+16535: }
+16535: 
+16535: template <typename T>
+16535: Octagonal_Shape<T>::Octagonal_Shape(const Generator_System& gs)
+16535:   : matrix(gs.space_dimension()),
+16535:     space_dim(gs.space_dimension()),
+16535:     status() {
+16535:   const Generator_System::const_iterator gs_begin = gs.begin();
+16535:   const Generator_System::const_iterator gs_end = gs.end();
+16535:   if (gs_begin == gs_end) {
+16535: 
+16535:     set_empty();
+16535:     return;
+16535:   }
+16535: 
+16535:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
+16535:   typename OR_Matrix<N>::row_iterator mat_begin = matrix.row_begin();
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_tmp; N& tmp = holder_tmp.item();
+16535:   bool mat_initialized = false;
+16535:   bool point_seen = false;
+16535: 
+16535:   for (Generator_System::const_iterator k = gs_begin; k != gs_end; ++k) {
+16535:     const Generator& g = *k;
+16535:     switch (g.type()) {
+16535:     case Generator::POINT:
+16535:       point_seen = true;
+16535: 
+16535:     case Generator::CLOSURE_POINT:
+16535:       if (!mat_initialized) {
+16535: 
+16535:         mat_initialized = true;
+16535:         const Coefficient& d = g.divisor();
+16535: 
+16535: 
+16535: 
+16535:         for (dimension_type i = 0; i < space_dim; ++i) {
+16535:           const Coefficient& g_i = g.coefficient(Variable(i));
+16535:           const dimension_type di = 2*i;
+16535:           row_reference x_i = *(mat_begin + di);
+16535:           row_reference x_ii = *(mat_begin + (di + 1));
+16535:           for (dimension_type j = 0; j < i; ++j) {
+16535:             const Coefficient& g_j = g.coefficient(Variable(j));
+16535:             const dimension_type dj = 2*j;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:             div_round_up(x_i[dj], g_j - g_i, d);
+16535:             div_round_up(x_ii[dj + 1], g_i - g_j, d);
+16535: 
+16535:             div_round_up(x_i[dj + 1], -g_j - g_i, d);
+16535:             div_round_up(x_ii[dj], g_i + g_j, d);
+16535:           }
+16535: 
+16535:           div_round_up(x_i[di + 1], -g_i - g_i, d);
+16535:           div_round_up(x_ii[di], g_i + g_i, d);
+16535:         }
+16535:       }
+16535:       else {
+16535: 
+16535: 
+16535:         const Coefficient& d = g.divisor();
+16535: 
+16535: 
+16535: 
+16535:         for (dimension_type i = 0; i < space_dim; ++i) {
+16535:           const Coefficient& g_i = g.coefficient(Variable(i));
+16535:           const dimension_type di = 2*i;
+16535:           row_reference x_i = *(mat_begin + di);
+16535:           row_reference x_ii = *(mat_begin + (di + 1));
+16535:           for (dimension_type j = 0; j < i; ++j) {
+16535:             const Coefficient& g_j = g.coefficient(Variable(j));
+16535:             const dimension_type dj = 2*j;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:             div_round_up(tmp, g_j - g_i, d);
+16535:             max_assign(x_i[dj], tmp);
+16535:             div_round_up(tmp, g_i - g_j, d);
+16535:             max_assign(x_ii[dj + 1], tmp);
+16535: 
+16535:             div_round_up(tmp, -g_j - g_i, d);
+16535:             max_assign(x_i[dj + 1], tmp);
+16535:             div_round_up(tmp, g_i + g_j, d);
+16535:             max_assign(x_ii[dj], tmp);
+16535:           }
+16535: 
+16535:           div_round_up(tmp, -g_i - g_i, d);
+16535:           max_assign(x_i[di + 1], tmp);
+16535:           div_round_up(tmp, g_i + g_i, d);
+16535:           max_assign(x_ii[di], tmp);
+16535:         }
+16535:       }
+16535:       break;
+16535:     default:
+16535: 
+16535:       break;
+16535:     }
+16535:   }
+16535: 
+16535:   if (!point_seen) {
+16535: 
+16535:     throw_invalid_argument("Octagonal_Shape(gs)",
+16535:                            "the non-empty generator system gs "
+16535:                            "contains no points.");
+16535:   }
+16535: 
+16535: 
+16535:   for (Generator_System::const_iterator k = gs_begin; k != gs_end; ++k) {
+16535:     const Generator& g = *k;
+16535:     switch (g.type()) {
+16535:     case Generator::LINE:
+16535: 
+16535: 
+16535: 
+16535:         for (dimension_type i = 0; i < space_dim; ++i) {
+16535:           const Coefficient& g_i = g.coefficient(Variable(i));
+16535:           const dimension_type di = 2*i;
+16535:           row_reference x_i = *(mat_begin + di);
+16535:           row_reference x_ii = *(mat_begin + (di + 1));
+16535:           for (dimension_type j = 0; j < i; ++j) {
+16535:             const Coefficient& g_j = g.coefficient(Variable(j));
+16535:             const dimension_type dj = 2*j;
+16535: 
+16535:             if (g_i != g_j) {
+16535: 
+16535:               assign_r(x_i[dj], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:               assign_r(x_ii[dj + 1], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:             }
+16535:             if (g_i != -g_j) {
+16535: 
+16535:               assign_r(x_i[dj + 1], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:               assign_r(x_ii[dj], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:             }
+16535:           }
+16535:           if (g_i != 0) {
+16535: 
+16535:             assign_r(x_i[di + 1], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:             assign_r(x_ii[di], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:           }
+16535:         }
+16535:       break;
+16535:     case Generator::RAY:
+16535: 
+16535: 
+16535: 
+16535:         for (dimension_type i = 0; i < space_dim; ++i) {
+16535:           const Coefficient& g_i = g.coefficient(Variable(i));
+16535:           const dimension_type di = 2*i;
+16535:           row_reference x_i = *(mat_begin + di);
+16535:           row_reference x_ii = *(mat_begin + (di + 1));
+16535:           for (dimension_type j = 0; j < i; ++j) {
+16535:             const Coefficient& g_j = g.coefficient(Variable(j));
+16535:             const dimension_type dj = 2*j;
+16535: 
+16535: 
+16535:             if (g_i < g_j) {
+16535: 
+16535:               assign_r(x_i[dj], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:             }
+16535:             if (g_i > g_j) {
+16535: 
+16535:               assign_r(x_ii[dj + 1], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:             }
+16535:             if (g_i < -g_j) {
+16535: 
+16535:               assign_r(x_i[dj + 1], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:             }
+16535:             if (g_i > -g_j) {
+16535: 
+16535:               assign_r(x_ii[dj], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:             }
+16535:           }
+16535: 
+16535:           if (g_i < 0) {
+16535: 
+16535:             assign_r(x_i[di + 1], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:           }
+16535:           if (g_i > 0) {
+16535: 
+16535:             assign_r(x_ii[di], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:           }
+16535:         }
+16535:       break;
+16535:     default:
+16535: 
+16535:       break;
+16535:     }
+16535:   }
+16535:   set_strongly_closed();
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::add_constraint(const Constraint& c) {
+16535:   const dimension_type c_space_dim = c.space_dimension();
+16535: 
+16535:   if (c_space_dim > space_dim) {
+16535:     throw_dimension_incompatible("add_constraint(c)", c);
+16535:   }
+16535: 
+16535:   if (c.is_strict_inequality()) {
+16535:     if (c.is_inconsistent()) {
+16535:       set_empty();
+16535:       return;
+16535:     }
+16535:     if (c.is_tautological()) {
+16535:       return;
+16535:     }
+16535: 
+16535:     throw_invalid_argument("add_constraint(c)",
+16535:                            "strict inequalities are not allowed");
+16535:   }
+16535: 
+16535:   dimension_type num_vars = 0;
+16535:   dimension_type i = 0;
+16535:   dimension_type j = 0;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_term; Parma_Polyhedra_Library::Coefficient& term = holder_term.item();
+16535: 
+16535:   if (!Octagonal_Shape_Helper
+16535:     ::extract_octagonal_difference(c, c_space_dim, num_vars,
+16535:                                    i, j, coeff, term)) {
+16535:     throw_invalid_argument("add_constraint(c)",
+16535:                            "c is not an octagonal constraint");
+16535:   }
+16535: 
+16535:   if (num_vars == 0) {
+16535: 
+16535:     if (c.inhomogeneous_term() < 0
+16535:         || (c.is_equality() && c.inhomogeneous_term() != 0)) {
+16535:       set_empty();
+16535:     }
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   typename OR_Matrix<N>::row_iterator i_iter = matrix.row_begin() + i;
+16535:   typename OR_Matrix<N>::row_reference_type m_i = *i_iter;
+16535:   N& m_i_j = m_i[j];
+16535: 
+16535:   if (coeff < 0) {
+16535:     neg_assign(coeff);
+16535:   }
+16535: 
+16535:   bool is_oct_changed = false;
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
+16535:   div_round_up(d, term, coeff);
+16535:   if (m_i_j > d) {
+16535:     m_i_j = d;
+16535:     is_oct_changed = true;
+16535:   }
+16535: 
+16535:   if (c.is_equality()) {
+16535: 
+16535:     if (i % 2 == 0) {
+16535:       ++i_iter;
+16535:     }
+16535:     else {
+16535:       --i_iter;
+16535:     }
+16535: 
+16535:     typename OR_Matrix<N>::row_reference_type m_ci = *i_iter;
+16535:     using namespace Implementation::Octagonal_Shapes;
+16535:     dimension_type cj = coherent_index(j);
+16535:     N& m_ci_cj = m_ci[cj];
+16535: 
+16535:     neg_assign(term);
+16535:     div_round_up(d, term, coeff);
+16535:     if (m_ci_cj > d) {
+16535:       m_ci_cj = d;
+16535:       is_oct_changed = true;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   if (is_oct_changed && marked_strongly_closed()) {
+16535:     reset_strongly_closed();
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::add_congruence(const Congruence& cg) {
+16535:   const dimension_type cg_space_dim = cg.space_dimension();
+16535: 
+16535: 
+16535:   if (space_dimension() < cg_space_dim) {
+16535:     throw_dimension_incompatible("add_congruence(cg)", cg);
+16535:   }
+16535: 
+16535: 
+16535:   if (cg.is_proper_congruence()) {
+16535:     if (cg.is_tautological()) {
+16535:       return;
+16535:     }
+16535:     if (cg.is_inconsistent()) {
+16535:       set_empty();
+16535:       return;
+16535:     }
+16535: 
+16535:     throw_invalid_argument("add_congruence(cg)",
+16535:                            "cg is a non-trivial, proper congruence");
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   Constraint c(cg);
+16535:   add_constraint(c);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Interval_Info>
+16535: void
+16535: Octagonal_Shape<T>::refine_with_linear_form_inequality(
+16535:                     const Linear_Form< Interval<T, Interval_Info> >& left,
+16535:                     const Linear_Form< Interval<T, Interval_Info> >& right) {
+16535: 
+16535: 
+16535:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_534 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<T>::is_exact)>) }
+16535: 
+16535:                                                      ;
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type left_space_dim = left.space_dimension();
+16535:   if (space_dim < left_space_dim) {
+16535:     throw_dimension_incompatible(
+16535:           "refine_with_linear_form_inequality(left, right)", "left", left);
+16535:   }
+16535: 
+16535:   const dimension_type right_space_dim = right.space_dimension();
+16535:   if (space_dim < right_space_dim) {
+16535:     throw_dimension_incompatible(
+16535:           "refine_with_linear_form_inequality(left, right)", "right", right);
+16535:   }
+16535: 
+16535: 
+16535:   dimension_type left_t = 0;
+16535: 
+16535:   dimension_type left_w_id = 0;
+16535: 
+16535: 
+16535:   dimension_type right_t = 0;
+16535: 
+16535:   dimension_type right_w_id = 0;
+16535: 
+16535: 
+16535:   for (dimension_type i = left_space_dim; i-- > 0; ) {
+16535:     if (left.coefficient(Variable(i)) != 0) {
+16535:       if (left_t++ == 1) {
+16535:         break;
+16535:       }
+16535:       else {
+16535:         left_w_id = i;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   for (dimension_type i = right_space_dim; i-- > 0; ) {
+16535:     if (right.coefficient(Variable(i)) != 0) {
+16535:       if (right_t++ == 1) {
+16535:         break;
+16535:       }
+16535:       else {
+16535:         right_w_id = i;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   typedef typename OR_Matrix<N>::row_iterator row_iterator;
+16535:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
+16535:   typedef Interval<T, Interval_Info> FP_Interval_Type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (left_t == 0) {
+16535:     if (right_t == 0) {
+16535: 
+16535: 
+16535:       ((void) 0);
+16535:       return;
+16535:     }
+16535: 
+16535:     if (right_t == 1) {
+16535: 
+16535: 
+16535:       const FP_Interval_Type& right_w_coeff =
+16535:                               right.coefficient(Variable(right_w_id));
+16535:       if (right_w_coeff == 1) {
+16535:         const dimension_type n_right = right_w_id * 2;
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_b_plus_minus_a_minus; N& b_plus_minus_a_minus = holder_b_plus_minus_a_minus.item();
+16535:         const FP_Interval_Type& left_a = left.inhomogeneous_term();
+16535:         const FP_Interval_Type& right_b = right.inhomogeneous_term();
+16535:         sub_assign_r(b_plus_minus_a_minus, right_b.upper(), left_a.lower(),
+16535:                      ROUND_UP);
+16535:         mul_2exp_assign_r(b_plus_minus_a_minus, b_plus_minus_a_minus, 1,
+16535:                           ROUND_UP);
+16535:         add_octagonal_constraint(n_right, n_right + 1, b_plus_minus_a_minus);
+16535:         ((void) 0);
+16535:         return;
+16535:       }
+16535: 
+16535:       if (right_w_coeff == -1) {
+16535:         const dimension_type n_right = right_w_id * 2;
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_b_plus_minus_a_minus; N& b_plus_minus_a_minus = holder_b_plus_minus_a_minus.item();
+16535:         const FP_Interval_Type& left_a = left.inhomogeneous_term();
+16535:         const FP_Interval_Type& right_b = right.inhomogeneous_term();
+16535:         sub_assign_r(b_plus_minus_a_minus, right_b.upper(), left_a.lower(),
+16535:                      ROUND_UP);
+16535:         mul_2exp_assign_r(b_plus_minus_a_minus, b_plus_minus_a_minus, 1,
+16535:                           ROUND_UP);
+16535:         add_octagonal_constraint(n_right + 1, n_right, b_plus_minus_a_minus);
+16535:         ((void) 0);
+16535:         return;
+16535:       }
+16535:     }
+16535:   }
+16535:   else if (left_t == 1) {
+16535:     if (right_t == 0) {
+16535: 
+16535: 
+16535:       const FP_Interval_Type& left_w_coeff =
+16535:                               left.coefficient(Variable(left_w_id));
+16535:       if (left_w_coeff == 1) {
+16535:         const dimension_type n_left = left_w_id * 2;
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item();
+16535:         const FP_Interval_Type& left_b = left.inhomogeneous_term();
+16535:         const FP_Interval_Type& right_a = right.inhomogeneous_term();
+16535:         sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(),
+16535:                      ROUND_UP);
+16535:         mul_2exp_assign_r(a_plus_minus_b_minus, a_plus_minus_b_minus, 1,
+16535:                           ROUND_UP);
+16535:         add_octagonal_constraint(n_left + 1, n_left, a_plus_minus_b_minus);
+16535:         ((void) 0);
+16535:         return;
+16535:       }
+16535: 
+16535:       if (left_w_coeff == -1) {
+16535:         const dimension_type n_left = left_w_id * 2;
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item();
+16535:         const FP_Interval_Type& left_b = left.inhomogeneous_term();
+16535:         const FP_Interval_Type& right_a = right.inhomogeneous_term();
+16535:         sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(),
+16535:                      ROUND_UP);
+16535:         mul_2exp_assign_r(a_plus_minus_b_minus, a_plus_minus_b_minus, 1,
+16535:                           ROUND_UP);
+16535:         add_octagonal_constraint(n_left, n_left + 1, a_plus_minus_b_minus);
+16535:         ((void) 0);
+16535:         return;
+16535:       }
+16535:     }
+16535: 
+16535:     if (right_t == 1) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const FP_Interval_Type& left_w_coeff =
+16535:                               left.coefficient(Variable(left_w_id));
+16535:       const FP_Interval_Type& right_w_coeff =
+16535:                               right.coefficient(Variable(right_w_id));
+16535:       bool is_left_coeff_one = (left_w_coeff == 1);
+16535:       bool is_left_coeff_minus_one = (left_w_coeff == -1);
+16535:       bool is_right_coeff_one = (right_w_coeff == 1);
+16535:       bool is_right_coeff_minus_one = (right_w_coeff == -1);
+16535:       if (left_w_id == right_w_id) {
+16535:         if ((is_left_coeff_one && is_right_coeff_one)
+16535:             || (is_left_coeff_minus_one && is_right_coeff_minus_one)) {
+16535: 
+16535:           ((void) 0);
+16535:           return;
+16535:         }
+16535:         if (is_left_coeff_one && is_right_coeff_minus_one) {
+16535: 
+16535: 
+16535:           const dimension_type n_left = left_w_id * 2;
+16535:           Parma_Polyhedra_Library::Dirty_Temp<N> holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item();
+16535:           const FP_Interval_Type& left_b = left.inhomogeneous_term();
+16535:           const FP_Interval_Type& right_a = right.inhomogeneous_term();
+16535:           sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(),
+16535:                        ROUND_UP);
+16535:           add_octagonal_constraint(n_left + 1, n_left, a_plus_minus_b_minus);
+16535:           ((void) 0);
+16535:           return;
+16535:         }
+16535:         if (is_left_coeff_minus_one && is_right_coeff_one) {
+16535: 
+16535: 
+16535:           const dimension_type n_left = left_w_id * 2;
+16535:           Parma_Polyhedra_Library::Dirty_Temp<N> holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item();
+16535:           const FP_Interval_Type& left_b = left.inhomogeneous_term();
+16535:           const FP_Interval_Type& right_a = right.inhomogeneous_term();
+16535:           sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(),
+16535:                        ROUND_UP);
+16535:           add_octagonal_constraint(n_left, n_left + 1, a_plus_minus_b_minus);
+16535:           ((void) 0);
+16535:           return;
+16535:         }
+16535:       }
+16535:       else if (is_left_coeff_one && is_right_coeff_one) {
+16535:         const dimension_type n_left = left_w_id * 2;
+16535:         const dimension_type n_right = right_w_id * 2;
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_c_plus_minus_a_minus; N& c_plus_minus_a_minus = holder_c_plus_minus_a_minus.item();
+16535:         const FP_Interval_Type& left_a = left.inhomogeneous_term();
+16535:         const FP_Interval_Type& right_c = right.inhomogeneous_term();
+16535:         sub_assign_r(c_plus_minus_a_minus, right_c.upper(), left_a.lower(),
+16535:                      ROUND_UP);
+16535:         if (left_w_id < right_w_id) {
+16535:           add_octagonal_constraint(n_right, n_left, c_plus_minus_a_minus);
+16535:         }
+16535:         else {
+16535:           add_octagonal_constraint(n_left + 1, n_right + 1,
+16535:                                    c_plus_minus_a_minus);
+16535:         }
+16535:         ((void) 0);
+16535:         return;
+16535:       }
+16535:       if (is_left_coeff_one && is_right_coeff_minus_one) {
+16535:         const dimension_type n_left = left_w_id * 2;
+16535:         const dimension_type n_right = right_w_id * 2;
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_c_plus_minus_a_minus; N& c_plus_minus_a_minus = holder_c_plus_minus_a_minus.item();
+16535:         const FP_Interval_Type& left_a = left.inhomogeneous_term();
+16535:         const FP_Interval_Type& right_c = right.inhomogeneous_term();
+16535:         sub_assign_r(c_plus_minus_a_minus, right_c.upper(), left_a.lower(),
+16535:                      ROUND_UP);
+16535:         if (left_w_id < right_w_id) {
+16535:           add_octagonal_constraint(n_right + 1, n_left, c_plus_minus_a_minus);
+16535:         }
+16535:         else {
+16535:           add_octagonal_constraint(n_left + 1, n_right, c_plus_minus_a_minus);
+16535:         }
+16535:         ((void) 0);
+16535:         return;
+16535:       }
+16535:       if (is_left_coeff_minus_one && is_right_coeff_one) {
+16535:         const dimension_type n_left = left_w_id * 2;
+16535:         const dimension_type n_right = right_w_id * 2;
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_c_plus_minus_a_minus; N& c_plus_minus_a_minus = holder_c_plus_minus_a_minus.item();
+16535:         const FP_Interval_Type& left_a = left.inhomogeneous_term();
+16535:         const FP_Interval_Type& right_c = right.inhomogeneous_term();
+16535:         sub_assign_r(c_plus_minus_a_minus, right_c.upper(), left_a.lower(),
+16535:                      ROUND_UP);
+16535:         if (left_w_id < right_w_id) {
+16535:           add_octagonal_constraint(n_right, n_left + 1, c_plus_minus_a_minus);
+16535:         }
+16535:         else {
+16535:           add_octagonal_constraint(n_left, n_right + 1, c_plus_minus_a_minus);
+16535:         }
+16535:         ((void) 0);
+16535:         return;
+16535:       }
+16535:       if (is_left_coeff_minus_one && is_right_coeff_minus_one) {
+16535:         const dimension_type n_left = left_w_id * 2;
+16535:         const dimension_type n_right = right_w_id * 2;
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_c_plus_minus_a_minus; N& c_plus_minus_a_minus = holder_c_plus_minus_a_minus.item();
+16535:         const FP_Interval_Type& left_a = left.inhomogeneous_term();
+16535:         const FP_Interval_Type& right_c = right.inhomogeneous_term();
+16535:         sub_assign_r(c_plus_minus_a_minus, right_c.upper(), left_a.lower(),
+16535:                      ROUND_UP);
+16535:         if (left_w_id < right_w_id) {
+16535:           add_octagonal_constraint(n_right + 1, n_left + 1,
+16535:                                    c_plus_minus_a_minus);
+16535:         }
+16535:         else {
+16535:           add_octagonal_constraint(n_left, n_right, c_plus_minus_a_minus);
+16535:         }
+16535:         ((void) 0);
+16535:         return;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_low_coeff; N& low_coeff = holder_low_coeff.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_high_coeff; N& high_coeff = holder_high_coeff.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_upper_bound; N& upper_bound = holder_upper_bound.item();
+16535: 
+16535:   Linear_Form<FP_Interval_Type> right_minus_left(right);
+16535:   right_minus_left -= left;
+16535: 
+16535:   dimension_type max_w_id = std::max(left_w_id, right_w_id);
+16535:   for (dimension_type first_v = 0; first_v < max_w_id; ++first_v) {
+16535:     for (dimension_type second_v = first_v + 1;
+16535:          second_v <= max_w_id; ++second_v) {
+16535:       const FP_Interval_Type& lfv_coefficient =
+16535:                         left.coefficient(Variable(first_v));
+16535:       const FP_Interval_Type& lsv_coefficient =
+16535:                         left.coefficient(Variable(second_v));
+16535:       const FP_Interval_Type& rfv_coefficient =
+16535:                         right.coefficient(Variable(first_v));
+16535:       const FP_Interval_Type& rsv_coefficient =
+16535:                         right.coefficient(Variable(second_v));
+16535: 
+16535: 
+16535:       bool do_update = false;
+16535:       assign_r(low_coeff, lfv_coefficient.lower(), ROUND_NOT_NEEDED);
+16535:       assign_r(high_coeff, lfv_coefficient.upper(), ROUND_NOT_NEEDED);
+16535:       if (low_coeff != 0 || high_coeff != 0) {
+16535:         assign_r(low_coeff, lsv_coefficient.lower(), ROUND_NOT_NEEDED);
+16535:         assign_r(high_coeff, lsv_coefficient.upper(), ROUND_NOT_NEEDED);
+16535:         if (low_coeff != 0 || high_coeff != 0) {
+16535:           do_update = true;
+16535:         }
+16535:         else {
+16535:           assign_r(low_coeff, rsv_coefficient.lower(), ROUND_NOT_NEEDED);
+16535:           assign_r(high_coeff, rsv_coefficient.upper(), ROUND_NOT_NEEDED);
+16535:           if (low_coeff != 0 || high_coeff != 0) {
+16535:             do_update = true;
+16535:           }
+16535:         }
+16535:       }
+16535:       else {
+16535:         assign_r(low_coeff, rfv_coefficient.lower(), ROUND_NOT_NEEDED);
+16535:         assign_r(high_coeff, rfv_coefficient.upper(), ROUND_NOT_NEEDED);
+16535:         if (low_coeff != 0 || high_coeff != 0) {
+16535:           assign_r(low_coeff, lsv_coefficient.lower(), ROUND_NOT_NEEDED);
+16535:           assign_r(high_coeff, lsv_coefficient.upper(), ROUND_NOT_NEEDED);
+16535:           if (low_coeff != 0 || high_coeff != 0) {
+16535:             do_update = true;
+16535:           }
+16535:           else {
+16535:             assign_r(low_coeff, rsv_coefficient.lower(), ROUND_NOT_NEEDED);
+16535:             assign_r(high_coeff, rsv_coefficient.upper(), ROUND_NOT_NEEDED);
+16535:             if (low_coeff != 0 || high_coeff != 0) {
+16535:               do_update = true;
+16535:             }
+16535:           }
+16535:         }
+16535:       }
+16535: 
+16535:       if (do_update) {
+16535:         Variable first(first_v);
+16535:         Variable second(second_v);
+16535:         dimension_type n_first_var = first_v * 2;
+16535:         dimension_type n_second_var = second_v * 2;
+16535:         linear_form_upper_bound(right_minus_left - first + second,
+16535:                                 upper_bound);
+16535:         add_octagonal_constraint(n_second_var + 1, n_first_var + 1,
+16535:                                  upper_bound);
+16535:         linear_form_upper_bound(right_minus_left + first + second,
+16535:                                 upper_bound);
+16535:         add_octagonal_constraint(n_second_var + 1, n_first_var, upper_bound);
+16535:         linear_form_upper_bound(right_minus_left - first - second,
+16535:                                 upper_bound);
+16535:         add_octagonal_constraint(n_second_var, n_first_var + 1, upper_bound);
+16535:         linear_form_upper_bound(right_minus_left + first - second,
+16535:                                 upper_bound);
+16535:         add_octagonal_constraint(n_second_var, n_first_var, upper_bound);
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   for (dimension_type v = 0; v <= max_w_id; ++v) {
+16535:     const FP_Interval_Type& lv_coefficient =
+16535:                         left.coefficient(Variable(v));
+16535:     const FP_Interval_Type& rv_coefficient =
+16535:                         right.coefficient(Variable(v));
+16535: 
+16535: 
+16535:     bool do_update = false;
+16535:     assign_r(low_coeff, lv_coefficient.lower(), ROUND_NOT_NEEDED);
+16535:     assign_r(high_coeff, lv_coefficient.upper(), ROUND_NOT_NEEDED);
+16535:     if (low_coeff != 0 || high_coeff != 0) {
+16535:       do_update = true;
+16535:     }
+16535:     else {
+16535:       assign_r(low_coeff, rv_coefficient.lower(), ROUND_NOT_NEEDED);
+16535:       assign_r(high_coeff, rv_coefficient.upper(), ROUND_NOT_NEEDED);
+16535:       if (low_coeff != 0 || high_coeff != 0) {
+16535:         do_update = true;
+16535:       }
+16535:     }
+16535: 
+16535:     if (do_update) {
+16535:       Variable var(v);
+16535:       dimension_type n_var = 2 * v;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       linear_form_upper_bound(right_minus_left + var, upper_bound);
+16535:       mul_2exp_assign_r(matrix[n_var + 1][n_var + 1], upper_bound, 1,
+16535:                         ROUND_UP);
+16535:       linear_form_upper_bound(right_minus_left - var, upper_bound);
+16535:       mul_2exp_assign_r(matrix[n_var][n_var], upper_bound, 1,
+16535:                         ROUND_UP);
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   row_iterator m_ite = matrix.row_begin();
+16535:   row_iterator m_end = matrix.row_end();
+16535:   for (dimension_type i = 0; m_ite != m_end; i += 2) {
+16535:     row_reference upper = *m_ite;
+16535:     N& ul = upper[i];
+16535:     add_octagonal_constraint(i, i + 1, ul);
+16535:     assign_r(ul, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     ++m_ite;
+16535:     row_reference lower = *m_ite;
+16535:     N& lr = lower[i + 1];
+16535:     add_octagonal_constraint(i + 1, i, lr);
+16535:     assign_r(lr, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     ++m_ite;
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::refine_no_check(const Constraint& c) {
+16535:   ((void) 0);
+16535:   const dimension_type c_space_dim = c.space_dimension();
+16535:   ((void) 0);
+16535: 
+16535:   dimension_type num_vars = 0;
+16535:   dimension_type i = 0;
+16535:   dimension_type j = 0;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_term; Parma_Polyhedra_Library::Coefficient& term = holder_term.item();
+16535: 
+16535:   if (!Octagonal_Shape_Helper
+16535:     ::extract_octagonal_difference(c, c_space_dim, num_vars,
+16535:                                    i, j, coeff, term)) {
+16535:     return;
+16535:   }
+16535: 
+16535:   if (num_vars == 0) {
+16535:     const Coefficient& c_inhomo = c.inhomogeneous_term();
+16535: 
+16535:     if (c_inhomo < 0
+16535:         || (c_inhomo != 0 && c.is_equality())
+16535:         || (c_inhomo == 0 && c.is_strict_inequality())) {
+16535:       set_empty();
+16535:     }
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   typename OR_Matrix<N>::row_iterator i_iter = matrix.row_begin() + i;
+16535:   typename OR_Matrix<N>::row_reference_type m_i = *i_iter;
+16535:   N& m_i_j = m_i[j];
+16535: 
+16535:   if (coeff < 0) {
+16535:     neg_assign(coeff);
+16535:   }
+16535: 
+16535:   bool is_oct_changed = false;
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
+16535:   div_round_up(d, term, coeff);
+16535:   if (m_i_j > d) {
+16535:     m_i_j = d;
+16535:     is_oct_changed = true;
+16535:   }
+16535: 
+16535:   if (c.is_equality()) {
+16535: 
+16535:     if (i % 2 == 0) {
+16535:       ++i_iter;
+16535:     }
+16535:     else {
+16535:       --i_iter;
+16535:     }
+16535: 
+16535:     typename OR_Matrix<N>::row_reference_type m_ci = *i_iter;
+16535:     using namespace Implementation::Octagonal_Shapes;
+16535:     dimension_type cj = coherent_index(j);
+16535:     N& m_ci_cj = m_ci[cj];
+16535: 
+16535:     neg_assign(term);
+16535:     div_round_up(d, term, coeff);
+16535:     if (m_ci_cj > d) {
+16535:       m_ci_cj = d;
+16535:       is_oct_changed = true;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   if (is_oct_changed && marked_strongly_closed()) {
+16535:     reset_strongly_closed();
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: dimension_type
+16535: Octagonal_Shape<T>::affine_dimension() const {
+16535:   const dimension_type n_rows = matrix.num_rows();
+16535: 
+16535:   if (n_rows == 0) {
+16535:     return 0;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   strong_closure_assign();
+16535:   if (marked_empty()) {
+16535:     return 0;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   std::vector<dimension_type> leaders;
+16535:   compute_leaders(leaders);
+16535: 
+16535: 
+16535: 
+16535:   dimension_type affine_dim = 0;
+16535:   for (dimension_type i = 0; i < n_rows; i += 2) {
+16535: 
+16535:     if (leaders[i] == i && leaders[i + 1] == i + 1) {
+16535:       ++affine_dim;
+16535:     }
+16535:   }
+16535: 
+16535:   return affine_dim;
+16535: }
+16535: 
+16535: template <typename T>
+16535: Congruence_System
+16535: Octagonal_Shape<T>::minimized_congruences() const {
+16535: 
+16535: 
+16535:   strong_closure_assign();
+16535:   Congruence_System cgs(space_dim);
+16535: 
+16535:   if (space_dim == 0) {
+16535:     if (marked_empty()) {
+16535:       cgs = Congruence_System::zero_dim_empty();
+16535:     }
+16535:     return cgs;
+16535:   }
+16535: 
+16535:   if (marked_empty()) {
+16535:     cgs.insert(Congruence::zero_dim_false());
+16535:     return cgs;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   std::vector<dimension_type> leaders;
+16535:   compute_leaders(leaders);
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
+16535:   for (dimension_type i = 0, i_end = 2*space_dim; i != i_end; i += 2) {
+16535:     const dimension_type lead_i = leaders[i];
+16535:     if (i == lead_i) {
+16535:       if (leaders[i + 1] == i) {
+16535: 
+16535:         goto singular;
+16535:       }
+16535:       else {
+16535: 
+16535:         continue;
+16535:       }
+16535:     }
+16535:     else {
+16535: 
+16535:       if (leaders[i + 1] == lead_i) {
+16535: 
+16535:         goto singular;
+16535:       }
+16535:       else {
+16535: 
+16535:         goto non_singular;
+16535:       }
+16535:     }
+16535: 
+16535:   singular:
+16535: 
+16535: 
+16535:     {
+16535:       const Variable x(i/2);
+16535:       const N& c_ii_i = matrix[i + 1][i];
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       numer_denom(c_ii_i, numer, denom);
+16535:       denom *= 2;
+16535:       cgs.insert(denom*x == numer);
+16535:     }
+16535:     continue;
+16535: 
+16535:   non_singular:
+16535: 
+16535: 
+16535:     {
+16535:       const N& c_i_li = matrix[i][lead_i];
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const Variable x(lead_i/2);
+16535:       const Variable y(i/2);
+16535:       numer_denom(c_i_li, numer, denom);
+16535:       if (lead_i % 2 == 0) {
+16535:         cgs.insert(denom*x - denom*y == numer);
+16535:       }
+16535:       else {
+16535:         cgs.insert(denom*x + denom*y + numer == 0);
+16535:       }
+16535:     }
+16535:     continue;
+16535:   }
+16535:   return cgs;
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::concatenate_assign(const Octagonal_Shape& y) {
+16535: 
+16535: 
+16535:   if (y.space_dim == 0) {
+16535:     if (y.marked_empty()) {
+16535:       set_empty();
+16535:     }
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (space_dim == 0 && marked_empty()) {
+16535:     add_space_dimensions_and_embed(y.space_dim);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   dimension_type old_num_rows = matrix.num_rows();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   add_space_dimensions_and_embed(y.space_dim);
+16535:   typename OR_Matrix<N>::const_element_iterator
+16535:     y_it = y.matrix.element_begin();
+16535:   for (typename OR_Matrix<N>::row_iterator
+16535:          i = matrix.row_begin() + old_num_rows,
+16535:          matrix_row_end = matrix.row_end(); i != matrix_row_end; ++i) {
+16535:     typename OR_Matrix<N>::row_reference_type r = *i;
+16535:     dimension_type rs_i = i.row_size();
+16535:     for (dimension_type j = old_num_rows; j < rs_i; ++j, ++y_it) {
+16535:       r[j] = *y_it;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   if (marked_strongly_closed()) {
+16535:     reset_strongly_closed();
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: Octagonal_Shape<T>::contains(const Octagonal_Shape& y) const {
+16535: 
+16535:   if (space_dim != y.space_dim) {
+16535:     throw_dimension_incompatible("contains(y)", y);
+16535:   }
+16535: 
+16535:   if (space_dim == 0) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     return marked_empty() ? y.marked_empty() : true;
+16535:   }
+16535: 
+16535: 
+16535:   y.strong_closure_assign();
+16535: 
+16535:   if (y.marked_empty()) {
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   if (is_empty()) {
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   for (typename OR_Matrix<N>::const_element_iterator
+16535:          i = matrix.element_begin(), j = y.matrix.element_begin(),
+16535:          matrix_element_end = matrix.element_end();
+16535:        i != matrix_element_end; ++i, ++j) {
+16535:     if (*i < *j) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: Octagonal_Shape<T>::is_disjoint_from(const Octagonal_Shape& y) const {
+16535: 
+16535:   if (space_dim != y.space_dim) {
+16535:     throw_dimension_incompatible("is_disjoint_from(y)", y);
+16535:   }
+16535: 
+16535: 
+16535:   strong_closure_assign();
+16535:   if (marked_empty()) {
+16535:     return true;
+16535:   }
+16535:   y.strong_closure_assign();
+16535:   if (y.marked_empty()) {
+16535:     return true;
+16535:   }
+16535: # 1257 "../../src/Octagonal_Shape_templates.hh"
+16535:   const dimension_type n_rows = matrix.num_rows();
+16535: 
+16535:   typedef typename OR_Matrix<N>::const_row_iterator row_iterator;
+16535:   typedef typename OR_Matrix<N>::const_row_reference_type row_reference;
+16535: 
+16535:   const row_iterator m_begin = matrix.row_begin();
+16535:   const row_iterator m_end = matrix.row_end();
+16535: 
+16535:   const row_iterator y_begin = y.matrix.row_begin();
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_neg_y_ci_cj; N& neg_y_ci_cj = holder_neg_y_ci_cj.item();
+16535:   for (row_iterator i_iter = m_begin; i_iter != m_end; ++i_iter) {
+16535:     using namespace Implementation::Octagonal_Shapes;
+16535:     const dimension_type i = i_iter.index();
+16535:     const dimension_type ci = coherent_index(i);
+16535:     const dimension_type rs_i = i_iter.row_size();
+16535:     row_reference m_i = *i_iter;
+16535:     for (dimension_type j = 0; j < n_rows; ++j) {
+16535:       const dimension_type cj = coherent_index(j);
+16535:       row_reference m_cj = *(m_begin + cj);
+16535:       const N& m_i_j = (j < rs_i) ? m_i[j] : m_cj[ci];
+16535:       row_reference y_ci = *(y_begin + ci);
+16535:       row_reference y_j = *(y_begin + j);
+16535:       const N& y_ci_cj = (j < rs_i) ? y_ci[cj] : y_j[i];
+16535:       neg_assign_r(neg_y_ci_cj, y_ci_cj, ROUND_UP);
+16535:       if (m_i_j < neg_y_ci_cj) {
+16535:         return true;
+16535:       }
+16535:     }
+16535:   }
+16535:   return false;
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: Octagonal_Shape<T>::is_universe() const {
+16535: 
+16535:   if (marked_empty()) {
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   for (typename OR_Matrix<N>::const_element_iterator
+16535:          i = matrix.element_begin(), matrix_element_end = matrix.element_end();
+16535:        i != matrix_element_end;
+16535:        ++i) {
+16535:     if (!is_plus_infinity(*i)) {
+16535:       return false;
+16535:     }
+16535:   }
+16535: 
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: Octagonal_Shape<T>::is_bounded() const {
+16535:   strong_closure_assign();
+16535: 
+16535:   if (marked_empty() || space_dim == 0) {
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   for (typename OR_Matrix<N>::const_row_iterator i = matrix.row_begin(),
+16535:          matrix_row_end = matrix.row_end(); i != matrix_row_end; ++i) {
+16535:     typename OR_Matrix<N>::const_row_reference_type x_i = *i;
+16535:     const dimension_type i_index = i.index();
+16535:     for (dimension_type j = i.row_size(); j-- > 0; ) {
+16535:       if (i_index != j) {
+16535:         if (is_plus_infinity(x_i[j])) {
+16535:           return false;
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: Octagonal_Shape<T>::contains_integer_point() const {
+16535: 
+16535:   if (is_empty()) {
+16535:     return false;
+16535:   }
+16535:   if (space_dim == 0) {
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   if (std::numeric_limits<T>::is_integer) {
+16535:     return !tight_coherence_would_make_empty();
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Octagonal_Shape<mpz_class> oct_z(space_dim);
+16535:   oct_z.reset_strongly_closed();
+16535: 
+16535:   typedef Octagonal_Shape<mpz_class>::N Z;
+16535:   bool all_integers = true;
+16535:   typename OR_Matrix<N>::const_element_iterator x_i = matrix.element_begin();
+16535:   for (typename OR_Matrix<Z>::element_iterator
+16535:          z_i = oct_z.matrix.element_begin(),
+16535:          z_end = oct_z.matrix.element_end(); z_i != z_end; ++z_i, ++x_i) {
+16535:     const N& d = *x_i;
+16535:     if (is_plus_infinity(d)) {
+16535:       continue;
+16535:     }
+16535:     if (is_integer(d)) {
+16535:       assign_r(*z_i, d, ROUND_NOT_NEEDED);
+16535:     }
+16535:     else {
+16535:       all_integers = false;
+16535:       assign_r(*z_i, d, ROUND_DOWN);
+16535:     }
+16535:   }
+16535: 
+16535:   if (all_integers) {
+16535: 
+16535:     oct_z.set_strongly_closed();
+16535:   }
+16535:   else {
+16535: 
+16535:     oct_z.strong_closure_assign();
+16535:     if (oct_z.marked_empty()) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return !oct_z.tight_coherence_would_make_empty();
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: Octagonal_Shape<T>::frequency(const Linear_Expression& expr,
+16535:                               Coefficient& freq_n, Coefficient& freq_d,
+16535:                               Coefficient& val_n, Coefficient& val_d) const {
+16535: 
+16535:   if (space_dim < expr.space_dimension()) {
+16535:     throw_dimension_incompatible("frequency(e, ...)", "e", expr);
+16535:   }
+16535: # 1415 "../../src/Octagonal_Shape_templates.hh"
+16535:   if (space_dim == 0) {
+16535:     if (is_empty()) {
+16535:       return false;
+16535:     }
+16535:     freq_n = 0;
+16535:     freq_d = 1;
+16535:     val_n = expr.inhomogeneous_term();
+16535:     val_d = 1;
+16535:     return true;
+16535:   }
+16535: 
+16535:   strong_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff_j; Parma_Polyhedra_Library::Coefficient& coeff_j = holder_coeff_j.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
+16535:   Linear_Expression le = expr;
+16535: 
+16535: 
+16535: 
+16535:   bool constant_v = false;
+16535: 
+16535:   typedef typename OR_Matrix<N>::const_row_iterator row_iterator;
+16535:   typedef typename OR_Matrix<N>::const_row_reference_type row_reference;
+16535: 
+16535:   const row_iterator m_begin = matrix.row_begin();
+16535:   const row_iterator m_end = matrix.row_end();
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_val_denom; Parma_Polyhedra_Library::Coefficient& val_denom = holder_val_denom.item();
+16535:   val_denom = 1;
+16535: 
+16535:   for (row_iterator i_iter = m_begin; i_iter != m_end; i_iter += 2) {
+16535:     constant_v = false;
+16535:     dimension_type i = i_iter.index();
+16535:     const Variable v(i/2);
+16535:     coeff = le.coefficient(v);
+16535:     if (coeff == 0) {
+16535:       constant_v = true;
+16535:       continue;
+16535:     }
+16535: 
+16535:     row_reference m_i = *i_iter;
+16535:     row_reference m_ii = *(i_iter + 1);
+16535:     const N& m_i_ii = m_i[i + 1];
+16535:     const N& m_ii_i = m_ii[i];
+16535:     if ((!is_plus_infinity(m_i_ii) && !is_plus_infinity(m_ii_i))
+16535:         && (is_additive_inverse(m_i_ii, m_ii_i))) {
+16535: 
+16535:       numer_denom(m_i_ii, numer, denom);
+16535:       denom *= 2;
+16535:       le -= coeff*v;
+16535:       le *= denom;
+16535:       le -= numer*coeff;
+16535:       val_denom *= denom;
+16535:       constant_v = true;
+16535:       continue;
+16535:     }
+16535: 
+16535: 
+16535:     else {
+16535:       ((void) 0);
+16535:       using namespace Implementation::Octagonal_Shapes;
+16535:       const dimension_type ci = coherent_index(i);
+16535:       for (row_iterator j_iter = i_iter; j_iter != m_end; j_iter += 2) {
+16535:         dimension_type j = j_iter.index();
+16535:         const Variable vj(j/2);
+16535:         coeff_j = le.coefficient(vj);
+16535:         if (coeff_j == 0) {
+16535: 
+16535:           continue;
+16535:         }
+16535:         const dimension_type cj = coherent_index(j);
+16535:         const dimension_type cjj = coherent_index(j + 1);
+16535: 
+16535:         row_reference m_j = *(m_begin + j);
+16535:         row_reference m_cj = *(m_begin + cj);
+16535:         const N& m_j_i = m_j[i];
+16535:         const N& m_i_j = m_cj[ci];
+16535:         if ((!is_plus_infinity(m_i_j) && !is_plus_infinity(m_j_i))
+16535:             && (is_additive_inverse(m_i_j, m_j_i))) {
+16535: 
+16535: 
+16535: 
+16535:           numer_denom(m_i_j, numer, denom);
+16535:           le -= coeff*v;
+16535:           le += coeff*vj;
+16535:           le *= denom;
+16535:           le -= numer*coeff;
+16535:           val_denom *= denom;
+16535:           constant_v = true;
+16535:           break;
+16535:         }
+16535: 
+16535:         m_j = *(m_begin + (j + 1));
+16535:         m_cj = *(m_begin + cjj);
+16535:         const N& m_j_i1 = m_j[i];
+16535:         const N& m_i_j1 = m_cj[ci];
+16535:         if ((!is_plus_infinity(m_i_j1) && !is_plus_infinity(m_j_i1))
+16535:             && (is_additive_inverse(m_i_j1, m_j_i1))) {
+16535: 
+16535: 
+16535: 
+16535:           numer_denom(m_i_j1, numer, denom);
+16535:           le -= coeff*v;
+16535:           le -= coeff*vj;
+16535:           le *= denom;
+16535:           le -= numer*coeff;
+16535:           val_denom *= denom;
+16535:           constant_v = true;
+16535:           break;
+16535:         }
+16535:       }
+16535:       if (!constant_v) {
+16535: 
+16535:         return false;
+16535:       }
+16535:     }
+16535:   }
+16535:   if (!constant_v) {
+16535: 
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535:   freq_n = 0;
+16535:   freq_d = 1;
+16535: 
+16535: 
+16535:   normalize2(le.inhomogeneous_term(), val_denom, val_n, val_d);
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: Octagonal_Shape<T>::constrains(const Variable var) const {
+16535: 
+16535:   const dimension_type var_space_dim = var.space_dimension();
+16535:   if (space_dimension() < var_space_dim) {
+16535:     throw_dimension_incompatible("constrains(v)", "v", var);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type n_v = 2*(var_space_dim - 1);
+16535:   typename OR_Matrix<N>::const_row_iterator m_iter = matrix.row_begin() + n_v;
+16535:   typename OR_Matrix<N>::const_row_reference_type r_v = *m_iter;
+16535:   typename OR_Matrix<N>::const_row_reference_type r_cv = *(++m_iter);
+16535:   for (dimension_type h = m_iter.row_size(); h-- > 0; ) {
+16535:     if (!is_plus_infinity(r_v[h]) || !is_plus_infinity(r_cv[h])) {
+16535:       return true;
+16535:     }
+16535:   }
+16535:   ++m_iter;
+16535:   for (typename OR_Matrix<N>::const_row_iterator m_end = matrix.row_end();
+16535:        m_iter != m_end; ++m_iter) {
+16535:     typename OR_Matrix<N>::const_row_reference_type r = *m_iter;
+16535:     if (!is_plus_infinity(r[n_v]) || !is_plus_infinity(r[n_v + 1])) {
+16535:       return true;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   return is_empty();
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: Octagonal_Shape<T>::is_strong_coherent() const {
+16535: 
+16535: 
+16535:   const dimension_type num_rows = matrix.num_rows();
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_semi_sum; N& semi_sum = holder_semi_sum.item();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   for (dimension_type i = num_rows; i-- > 0; ) {
+16535:     typename OR_Matrix<N>::const_row_iterator iter = matrix.row_begin() + i;
+16535:     typename OR_Matrix<N>::const_row_reference_type m_i = *iter;
+16535:     using namespace Implementation::Octagonal_Shapes;
+16535:     const N& m_i_ci = m_i[coherent_index(i)];
+16535:     for (dimension_type j = matrix.row_size(i); j-- > 0; ) {
+16535: 
+16535:       if (i != j) {
+16535:         const N& m_cj_j = matrix[coherent_index(j)][j];
+16535:         if (!is_plus_infinity(m_i_ci)
+16535:             && !is_plus_infinity(m_cj_j)) {
+16535: 
+16535: 
+16535:           add_assign_r(semi_sum, m_i_ci, m_cj_j, ROUND_UP);
+16535:           div_2exp_assign_r(semi_sum, semi_sum, 1, ROUND_UP);
+16535:           if (m_i[j] > semi_sum) {
+16535:             return false;
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: Octagonal_Shape<T>::is_strongly_reduced() const {
+16535: 
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return true;
+16535:   }
+16535: 
+16535:   Octagonal_Shape x = *this;
+16535: 
+16535: 
+16535:   for (typename OR_Matrix<N>::const_row_iterator iter = matrix.row_begin(),
+16535:          matrix_row_end = matrix.row_end(); iter != matrix_row_end; ++iter) {
+16535:     typename OR_Matrix<N>::const_row_reference_type m_i = *iter;
+16535:     const dimension_type i = iter.index();
+16535:     for (dimension_type j = iter.row_size(); j-- > 0; ) {
+16535:       if (!is_plus_infinity(m_i[j])) {
+16535:         Octagonal_Shape x_copy = *this;
+16535:         assign_r(x_copy.matrix[i][j], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:         if (x == x_copy) {
+16535:           return false;
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: Octagonal_Shape<T>::bounds(const Linear_Expression& expr,
+16535:                            const bool from_above) const {
+16535: 
+16535: 
+16535:   const dimension_type expr_space_dim = expr.space_dimension();
+16535:   if (space_dim < expr_space_dim) {
+16535:     throw_dimension_incompatible((from_above
+16535:                                   ? "bounds_from_above(e)"
+16535:                                   : "bounds_from_below(e)"), "e", expr);
+16535:   }
+16535:   strong_closure_assign();
+16535: 
+16535: 
+16535:   if (space_dim == 0 || marked_empty()) {
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   const Constraint& c = (from_above) ? expr <= 0 : expr >= 0;
+16535:   dimension_type num_vars = 0;
+16535:   dimension_type i = 0;
+16535:   dimension_type j = 0;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_term; Parma_Polyhedra_Library::Coefficient& term = holder_term.item();
+16535:   if (Octagonal_Shape_Helper
+16535:     ::extract_octagonal_difference(c, c.space_dimension(), num_vars,
+16535:                                    i, j, coeff, term)) {
+16535:     if (num_vars == 0) {
+16535:       return true;
+16535:     }
+16535: 
+16535:     typename OR_Matrix<N>::const_row_iterator i_iter = matrix.row_begin() + i;
+16535:     typename OR_Matrix<N>::const_row_reference_type m_i = *i_iter;
+16535:     return !is_plus_infinity(m_i[j]);
+16535:   }
+16535:   else {
+16535: 
+16535:     Optimization_Mode mode_bounds =
+16535:       from_above ? MAXIMIZATION : MINIMIZATION;
+16535:     MIP_Problem mip(space_dim, constraints(), expr, mode_bounds);
+16535:     return mip.solve() == OPTIMIZED_MIP_PROBLEM;
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: Octagonal_Shape<T>::max_min(const Linear_Expression& expr,
+16535:                             const bool maximize,
+16535:                             Coefficient& ext_n, Coefficient& ext_d,
+16535:                             bool& included) const {
+16535: 
+16535: 
+16535:   const dimension_type expr_space_dim = expr.space_dimension();
+16535:   if (space_dim < expr_space_dim) {
+16535:     throw_dimension_incompatible((maximize
+16535:                                   ? "maximize(e, ...)"
+16535:                                   : "minimize(e, ...)"), "e", expr);
+16535:   }
+16535: 
+16535:   if (space_dim == 0) {
+16535:     if (marked_empty()) {
+16535:       return false;
+16535:     }
+16535:     else {
+16535:       ext_n = expr.inhomogeneous_term();
+16535:       ext_d = 1;
+16535:       included = true;
+16535:       return true;
+16535:     }
+16535:   }
+16535: 
+16535:   strong_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   const Constraint& c = (maximize) ? expr <= 0 : expr >= 0;
+16535:   dimension_type num_vars = 0;
+16535:   dimension_type i = 0;
+16535:   dimension_type j = 0;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_term; Parma_Polyhedra_Library::Coefficient& term = holder_term.item();
+16535:   if (!Octagonal_Shape_Helper
+16535:     ::extract_octagonal_difference(c, c.space_dimension(), num_vars,
+16535:                                    i, j, coeff, term)) {
+16535: 
+16535:     Optimization_Mode max_min = (maximize) ? MAXIMIZATION : MINIMIZATION;
+16535:     MIP_Problem mip(space_dim, constraints(), expr, max_min);
+16535:     if (mip.solve() == OPTIMIZED_MIP_PROBLEM) {
+16535:       mip.optimal_value(ext_n, ext_d);
+16535:       included = true;
+16535:       return true;
+16535:     }
+16535:     else {
+16535: 
+16535:       return false;
+16535:     }
+16535:   }
+16535:   else {
+16535: 
+16535:     if (num_vars == 0) {
+16535:       ext_n = expr.inhomogeneous_term();
+16535:       ext_d = 1;
+16535:       included = true;
+16535:       return true;
+16535:     }
+16535: 
+16535: 
+16535:     typename OR_Matrix<N>::const_row_iterator i_iter = matrix.row_begin() + i;
+16535:     typename OR_Matrix<N>::const_row_reference_type m_i = *i_iter;
+16535:     Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
+16535:     if (!is_plus_infinity(m_i[j])) {
+16535:       const Coefficient& b = expr.inhomogeneous_term();
+16535:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item();
+16535:       neg_assign(minus_b, b);
+16535:       const Coefficient& sc_b = maximize ? b : minus_b;
+16535:       assign_r(d, sc_b, ROUND_UP);
+16535: 
+16535: 
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_expr; N& coeff_expr = holder_coeff_expr.item();
+16535:       const Coefficient& coeff_i = expr.coefficient(Variable(i/2));
+16535:       const int sign_i = sgn(coeff_i);
+16535:       if (sign_i > 0) {
+16535:         assign_r(coeff_expr, coeff_i, ROUND_UP);
+16535:       }
+16535:       else {
+16535:         Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_coeff_i; Parma_Polyhedra_Library::Coefficient& minus_coeff_i = holder_minus_coeff_i.item();
+16535:         neg_assign(minus_coeff_i, coeff_i);
+16535:         assign_r(coeff_expr, minus_coeff_i, ROUND_UP);
+16535:       }
+16535: 
+16535:       if (num_vars == 1) {
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_m_i_j; N& m_i_j = holder_m_i_j.item();
+16535:         div_2exp_assign_r(m_i_j, m_i[j], 1, ROUND_UP);
+16535:         add_mul_assign_r(d, coeff_expr, m_i_j, ROUND_UP);
+16535:       }
+16535:       else {
+16535:         add_mul_assign_r(d, coeff_expr, m_i[j], ROUND_UP);
+16535:       }
+16535:       numer_denom(d, ext_n, ext_d);
+16535:       if (!maximize) {
+16535:         neg_assign(ext_n);
+16535:       }
+16535:       included = true;
+16535:       return true;
+16535:     }
+16535: 
+16535: 
+16535:     return false;
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: Octagonal_Shape<T>::max_min(const Linear_Expression& expr,
+16535:                             const bool maximize,
+16535:                             Coefficient& ext_n, Coefficient& ext_d,
+16535:                             bool& included, Generator& g) const {
+16535: 
+16535: 
+16535:   const dimension_type expr_space_dim = expr.space_dimension();
+16535:   if (space_dim < expr_space_dim) {
+16535:     throw_dimension_incompatible((maximize
+16535:                                   ? "maximize(e, ...)"
+16535:                                   : "minimize(e, ...)"), "e", expr);
+16535:   }
+16535: 
+16535:   if (space_dim == 0) {
+16535:     if (marked_empty()) {
+16535:       return false;
+16535:     }
+16535:     else {
+16535:       ext_n = expr.inhomogeneous_term();
+16535:       ext_d = 1;
+16535:       included = true;
+16535:       g = point();
+16535:       return true;
+16535:     }
+16535:   }
+16535: 
+16535:   strong_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return false;
+16535:   }
+16535:   if (!is_universe()) {
+16535: 
+16535: 
+16535:     Optimization_Mode max_min = (maximize) ? MAXIMIZATION : MINIMIZATION;
+16535:     MIP_Problem mip(space_dim, constraints(), expr, max_min);
+16535:     if (mip.solve() == OPTIMIZED_MIP_PROBLEM) {
+16535:       g = mip.optimizing_point();
+16535:       mip.evaluate_objective_function(g, ext_n, ext_d);
+16535:       included = true;
+16535:       return true;
+16535:     }
+16535:   }
+16535: 
+16535:   return false;
+16535: }
+16535: 
+16535: template <typename T>
+16535: Poly_Con_Relation
+16535: Octagonal_Shape<T>::relation_with(const Congruence& cg) const {
+16535:   dimension_type cg_space_dim = cg.space_dimension();
+16535: 
+16535: 
+16535:   if (cg_space_dim > space_dim) {
+16535:     throw_dimension_incompatible("relation_with(cg)", cg);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (cg.is_equality()) {
+16535:     Constraint c(cg);
+16535:     return relation_with(c);
+16535:   }
+16535: 
+16535:   strong_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return Poly_Con_Relation::saturates()
+16535:       && Poly_Con_Relation::is_included()
+16535:       && Poly_Con_Relation::is_disjoint();
+16535:   }
+16535: 
+16535:   if (space_dim == 0) {
+16535:     if (cg.is_inconsistent()) {
+16535:       return Poly_Con_Relation::is_disjoint();
+16535:     }
+16535:     else {
+16535:       return Poly_Con_Relation::saturates()
+16535:         && Poly_Con_Relation::is_included();
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   Linear_Expression le(cg.expression());
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_numer; Parma_Polyhedra_Library::Coefficient& min_numer = holder_min_numer.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_denom; Parma_Polyhedra_Library::Coefficient& min_denom = holder_min_denom.item();
+16535:   bool min_included;
+16535:   bool bounded_below = minimize(le, min_numer, min_denom, min_included);
+16535: 
+16535: 
+16535: 
+16535:   if (!bounded_below) {
+16535:     return Poly_Con_Relation::strictly_intersects();
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_numer; Parma_Polyhedra_Library::Coefficient& max_numer = holder_max_numer.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_denom; Parma_Polyhedra_Library::Coefficient& max_denom = holder_max_denom.item();
+16535:   bool max_included;
+16535:   bool bounded_above = maximize(le, max_numer, max_denom, max_included);
+16535: 
+16535: 
+16535: 
+16535:   if (!bounded_above) {
+16535:     return Poly_Con_Relation::strictly_intersects();
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_signed_distance; Parma_Polyhedra_Library::Coefficient& signed_distance = holder_signed_distance.item();
+16535: 
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_value; Parma_Polyhedra_Library::Coefficient& min_value = holder_min_value.item();
+16535:   min_value = min_numer / min_denom;
+16535:   const Coefficient& modulus = cg.modulus();
+16535:   signed_distance = min_value % modulus;
+16535:   min_value -= signed_distance;
+16535:   if (min_value * min_denom < min_numer) {
+16535:     min_value += modulus;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_value; Parma_Polyhedra_Library::Coefficient& max_value = holder_max_value.item();
+16535:   max_value = max_numer / max_denom;
+16535:   signed_distance = max_value % modulus;
+16535:   max_value += signed_distance;
+16535:   if (max_value * max_denom > max_numer) {
+16535:     max_value -= modulus;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (max_value < min_value) {
+16535:     return Poly_Con_Relation::is_disjoint();
+16535:   }
+16535:   else {
+16535:     return Poly_Con_Relation::strictly_intersects();
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: Poly_Con_Relation
+16535: Octagonal_Shape<T>::relation_with(const Constraint& c) const {
+16535:   dimension_type c_space_dim = c.space_dimension();
+16535: 
+16535: 
+16535:   if (c_space_dim > space_dim) {
+16535:     throw_dimension_incompatible("relation_with(c)", c);
+16535:   }
+16535: 
+16535: 
+16535:   strong_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return Poly_Con_Relation::saturates()
+16535:       && Poly_Con_Relation::is_included()
+16535:       && Poly_Con_Relation::is_disjoint();
+16535:   }
+16535: 
+16535:   if (space_dim == 0) {
+16535: 
+16535:     if ((c.is_equality() && c.inhomogeneous_term() != 0)
+16535:         || (c.is_inequality() && c.inhomogeneous_term() < 0)) {
+16535:       return Poly_Con_Relation::is_disjoint();
+16535:     }
+16535:     else if (c.is_strict_inequality() && c.inhomogeneous_term() == 0) {
+16535: 
+16535: 
+16535:       return Poly_Con_Relation::saturates()
+16535:         && Poly_Con_Relation::is_disjoint();
+16535:     }
+16535: 
+16535: 
+16535:     else if (c.is_equality() || c.inhomogeneous_term() == 0) {
+16535:       return Poly_Con_Relation::saturates()
+16535:         && Poly_Con_Relation::is_included();
+16535:     }
+16535:     else {
+16535: 
+16535: 
+16535: 
+16535:       return Poly_Con_Relation::is_included();
+16535:     }
+16535:   }
+16535: 
+16535:   dimension_type num_vars = 0;
+16535:   dimension_type i = 0;
+16535:   dimension_type j = 0;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_c_term; Parma_Polyhedra_Library::Coefficient& c_term = holder_c_term.item();
+16535:   if (!Octagonal_Shape_Helper
+16535:     ::extract_octagonal_difference(c, c_space_dim, num_vars,
+16535:                                    i, j, coeff, c_term)) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     Linear_Expression le;
+16535:     le.set_space_dimension(c.space_dimension());
+16535:     le.linear_combine(c.expr, Coefficient_one(), Coefficient_one(),
+16535:                       1, c_space_dim + 1);
+16535: 
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_numer; Parma_Polyhedra_Library::Coefficient& max_numer = holder_max_numer.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_denom; Parma_Polyhedra_Library::Coefficient& max_denom = holder_max_denom.item();
+16535:     bool max_included;
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_numer; Parma_Polyhedra_Library::Coefficient& min_numer = holder_min_numer.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_denom; Parma_Polyhedra_Library::Coefficient& min_denom = holder_min_denom.item();
+16535:     bool min_included;
+16535:     bool bounded_above = maximize(le, max_numer, max_denom, max_included);
+16535:     bool bounded_below = minimize(le, min_numer, min_denom, min_included);
+16535:     if (!bounded_above) {
+16535:       if (!bounded_below) {
+16535:         return Poly_Con_Relation::strictly_intersects();
+16535:       }
+16535:       min_numer += c.inhomogeneous_term() * min_denom;
+16535:       switch (sgn(min_numer)) {
+16535:       case 1:
+16535:         if (c.is_equality()) {
+16535:           return Poly_Con_Relation::is_disjoint();
+16535:         }
+16535:         return Poly_Con_Relation::is_included();
+16535:       case 0:
+16535:         if (c.is_strict_inequality() || c.is_equality()) {
+16535:           return Poly_Con_Relation::strictly_intersects();
+16535:         }
+16535:         return Poly_Con_Relation::is_included();
+16535:       case -1:
+16535:         return Poly_Con_Relation::strictly_intersects();
+16535:       }
+16535:     }
+16535:     if (!bounded_below) {
+16535:       max_numer += c.inhomogeneous_term() * max_denom;
+16535:       switch (sgn(max_numer)) {
+16535:       case 1:
+16535:         return Poly_Con_Relation::strictly_intersects();
+16535:       case 0:
+16535:         if (c.is_strict_inequality()) {
+16535:           return Poly_Con_Relation::is_disjoint();
+16535:         }
+16535:         return Poly_Con_Relation::strictly_intersects();
+16535:       case -1:
+16535:         return Poly_Con_Relation::is_disjoint();
+16535:       }
+16535:     }
+16535:     else {
+16535:       max_numer += c.inhomogeneous_term() * max_denom;
+16535:       min_numer += c.inhomogeneous_term() * min_denom;
+16535:       switch (sgn(max_numer)) {
+16535:       case 1:
+16535:         switch (sgn(min_numer)) {
+16535:         case 1:
+16535:           if (c.is_equality()) {
+16535:             return Poly_Con_Relation::is_disjoint();
+16535:           }
+16535:           return Poly_Con_Relation::is_included();
+16535:         case 0:
+16535:           if (c.is_equality()) {
+16535:             return Poly_Con_Relation::strictly_intersects();
+16535:           }
+16535:           if (c.is_strict_inequality()) {
+16535:             return Poly_Con_Relation::strictly_intersects();
+16535:           }
+16535:           return Poly_Con_Relation::is_included();
+16535:         case -1:
+16535:           return Poly_Con_Relation::strictly_intersects();
+16535:         }
+16535:         Parma_Polyhedra_Library::ppl_unreachable();
+16535:         break;
+16535:       case 0:
+16535:         if (min_numer == 0) {
+16535:           if (c.is_strict_inequality()) {
+16535:             return Poly_Con_Relation::is_disjoint()
+16535:               && Poly_Con_Relation::saturates();
+16535:           }
+16535:           return Poly_Con_Relation::is_included()
+16535:             && Poly_Con_Relation::saturates();
+16535:         }
+16535:         if (c.is_strict_inequality()) {
+16535:           return Poly_Con_Relation::is_disjoint();
+16535:         }
+16535:         return Poly_Con_Relation::strictly_intersects();
+16535:       case -1:
+16535:         return Poly_Con_Relation::is_disjoint();
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   if (num_vars == 0) {
+16535: 
+16535:     switch (sgn(c.inhomogeneous_term())) {
+16535:     case -1:
+16535:       return Poly_Con_Relation::is_disjoint();
+16535:     case 0:
+16535:       if (c.is_strict_inequality()) {
+16535:         return Poly_Con_Relation::saturates()
+16535:           && Poly_Con_Relation::is_disjoint();
+16535:       }
+16535:       else {
+16535:         return Poly_Con_Relation::saturates()
+16535:           && Poly_Con_Relation::is_included();
+16535:       }
+16535:     case 1:
+16535:       if (c.is_equality()) {
+16535:         return Poly_Con_Relation::is_disjoint();
+16535:       }
+16535:       else {
+16535:         return Poly_Con_Relation::is_included();
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   typename OR_Matrix<N>::const_row_iterator i_iter = matrix.row_begin() + i;
+16535:   typename OR_Matrix<N>::const_row_reference_type m_i = *i_iter;
+16535:   const N& m_i_j = m_i[j];
+16535: 
+16535:   if (coeff < 0) {
+16535:     neg_assign(coeff);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (i % 2 == 0) {
+16535:     ++i_iter;
+16535:   }
+16535:   else {
+16535:     --i_iter;
+16535:   }
+16535:   typename OR_Matrix<N>::const_row_reference_type m_ci = *i_iter;
+16535:   using namespace Implementation::Octagonal_Shapes;
+16535:   const N& m_ci_cj = m_ci[coherent_index(j)];
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_x; mpq_class& q_x = holder_q_x.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_y; mpq_class& q_y = holder_q_y.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_d; mpq_class& d = holder_d.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_d1; mpq_class& d1 = holder_d1.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_c_denom; mpq_class& c_denom = holder_c_denom.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_denom; mpq_class& q_denom = holder_q_denom.item();
+16535:   assign_r(c_denom, coeff, ROUND_NOT_NEEDED);
+16535:   assign_r(d, c_term, ROUND_NOT_NEEDED);
+16535:   neg_assign_r(d1, d, ROUND_NOT_NEEDED);
+16535:   div_assign_r(d, d, c_denom, ROUND_NOT_NEEDED);
+16535:   div_assign_r(d1, d1, c_denom, ROUND_NOT_NEEDED);
+16535: 
+16535:   if (is_plus_infinity(m_i_j)) {
+16535:     if (!is_plus_infinity(m_ci_cj)) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       numer_denom(m_ci_cj, numer, denom);
+16535:       assign_r(q_denom, denom, ROUND_NOT_NEEDED);
+16535:       assign_r(q_y, numer, ROUND_NOT_NEEDED);
+16535:       div_assign_r(q_y, q_y, q_denom, ROUND_NOT_NEEDED);
+16535:       if (q_y < d1) {
+16535:         return Poly_Con_Relation::is_disjoint();
+16535:       }
+16535:       if (q_y == d1 && c.is_strict_inequality()) {
+16535:         return Poly_Con_Relation::is_disjoint();
+16535:       }
+16535:     }
+16535: 
+16535: 
+16535:     return Poly_Con_Relation::strictly_intersects();
+16535:   }
+16535: 
+16535: 
+16535:   numer_denom(m_i_j, numer, denom);
+16535:   assign_r(q_denom, denom, ROUND_NOT_NEEDED);
+16535:   assign_r(q_x, numer, ROUND_NOT_NEEDED);
+16535:   div_assign_r(q_x, q_x, q_denom, ROUND_NOT_NEEDED);
+16535: 
+16535:   if (!is_plus_infinity(m_ci_cj)) {
+16535:     numer_denom(m_ci_cj, numer, denom);
+16535:     assign_r(q_denom, denom, ROUND_NOT_NEEDED);
+16535:     assign_r(q_y, numer, ROUND_NOT_NEEDED);
+16535:     div_assign_r(q_y, q_y, q_denom, ROUND_NOT_NEEDED);
+16535:     if (q_x == d && q_y == d1) {
+16535:       if (c.is_strict_inequality()) {
+16535:         return Poly_Con_Relation::saturates()
+16535:           && Poly_Con_Relation::is_disjoint();
+16535:       }
+16535:       else {
+16535:         return Poly_Con_Relation::saturates()
+16535:           && Poly_Con_Relation::is_included();
+16535:       }
+16535:     }
+16535: 
+16535: 
+16535:     if (q_y < d1) {
+16535:       return Poly_Con_Relation::is_disjoint();
+16535:     }
+16535:     if (q_y == d1 && c.is_strict_inequality()) {
+16535:       return Poly_Con_Relation::is_disjoint();
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (d > q_x) {
+16535:     if (c.is_equality()) {
+16535:       return Poly_Con_Relation::is_disjoint();
+16535:     }
+16535:     else {
+16535:       return Poly_Con_Relation::is_included();
+16535:     }
+16535:   }
+16535: 
+16535:   if (d == q_x && c.is_nonstrict_inequality()) {
+16535:     return Poly_Con_Relation::is_included();
+16535:   }
+16535: 
+16535:   return Poly_Con_Relation::strictly_intersects();
+16535: }
+16535: 
+16535: template <typename T>
+16535: Poly_Gen_Relation
+16535: Octagonal_Shape<T>::relation_with(const Generator& g) const {
+16535:   const dimension_type g_space_dim = g.space_dimension();
+16535: 
+16535: 
+16535:   if (space_dim < g_space_dim) {
+16535:     throw_dimension_incompatible("relation_with(g)", g);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   strong_closure_assign();
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return Poly_Gen_Relation::nothing();
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return Poly_Gen_Relation::subsumes();
+16535:   }
+16535: 
+16535:   const bool is_line = g.is_line();
+16535:   const bool is_line_or_ray = g.is_line_or_ray();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename OR_Matrix<N>::const_row_iterator row_iterator;
+16535:   typedef typename OR_Matrix<N>::const_row_reference_type row_reference;
+16535: 
+16535:   const row_iterator m_begin = matrix.row_begin();
+16535:   const row_iterator m_end = matrix.row_end();
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_product; Parma_Polyhedra_Library::Coefficient& product = holder_product.item();
+16535: 
+16535: 
+16535:   for (row_iterator i_iter = m_begin; i_iter != m_end; i_iter += 2) {
+16535:     dimension_type i = i_iter.index();
+16535:     row_reference m_i = *i_iter;
+16535:     row_reference m_ii = *(i_iter + 1);
+16535:     const N& m_i_ii = m_i[i + 1];
+16535:     const N& m_ii_i = m_ii[i];
+16535: 
+16535:     const Variable x(i/2);
+16535:     const Coefficient& g_coeff_x
+16535:       = (x.space_dimension() > g_space_dim)
+16535:       ? Coefficient_zero()
+16535:       : g.coefficient(x);
+16535:     if (is_additive_inverse(m_i_ii, m_ii_i)) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       numer_denom(m_ii_i, numer, denom);
+16535:       denom *= 2;
+16535:       product = denom * g_coeff_x;
+16535: 
+16535: 
+16535:       if (!is_line_or_ray) {
+16535:         neg_assign(numer);
+16535:         add_mul_assign(product, numer, g.divisor());
+16535:       }
+16535:       if (product != 0) {
+16535:         return Poly_Gen_Relation::nothing();
+16535:       }
+16535:     }
+16535: 
+16535:     else {
+16535:       if (!is_plus_infinity(m_i_ii)) {
+16535: 
+16535: 
+16535: 
+16535:         numer_denom(m_i_ii, numer, denom);
+16535:         denom *= -2;
+16535:         product = denom * g_coeff_x;
+16535: 
+16535: 
+16535:         if (!is_line_or_ray) {
+16535:           neg_assign(numer);
+16535:           add_mul_assign(product, numer, g.divisor());
+16535:         }
+16535:         if (is_line && product != 0) {
+16535:           return Poly_Gen_Relation::nothing();
+16535:         }
+16535:         else
+16535: 
+16535: 
+16535: 
+16535: 
+16535:           if (product > 0) {
+16535:             return Poly_Gen_Relation::nothing();
+16535:           }
+16535:       }
+16535:       if (!is_plus_infinity(m_ii_i)) {
+16535: 
+16535:         numer_denom(m_ii_i, numer, denom);
+16535:         denom *= 2;
+16535:         product = denom * g_coeff_x;
+16535: 
+16535: 
+16535:         if (!is_line_or_ray) {
+16535:           neg_assign(numer);
+16535:           add_mul_assign(product, numer , g.divisor());
+16535:         }
+16535:         if (is_line && product != 0) {
+16535:           return Poly_Gen_Relation::nothing();
+16535:         }
+16535:         else {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:           if (product > 0) {
+16535:             return Poly_Gen_Relation::nothing();
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   for (row_iterator i_iter = m_begin ; i_iter != m_end; i_iter += 2) {
+16535:     dimension_type i = i_iter.index();
+16535:     row_reference m_i = *i_iter;
+16535:     row_reference m_ii = *(i_iter + 1);
+16535:     for (dimension_type j = 0; j < i; j += 2) {
+16535:       const N& m_i_j = m_i[j];
+16535:       const N& m_ii_jj = m_ii[j + 1];
+16535:       const N& m_ii_j = m_ii[j];
+16535:       const N& m_i_jj = m_i[j + 1];
+16535:       const Variable x(j/2);
+16535:       const Variable y(i/2);
+16535:       const Coefficient& g_coeff_x
+16535:         = (x.space_dimension() > g_space_dim)
+16535:         ? Coefficient_zero()
+16535:         : g.coefficient(x);
+16535:       const Coefficient& g_coeff_y
+16535:         = (y.space_dimension() > g_space_dim)
+16535:         ? Coefficient_zero()
+16535:         : g.coefficient(y);
+16535: 
+16535:       const bool difference_is_equality = is_additive_inverse(m_ii_jj, m_i_j);
+16535:       if (difference_is_equality) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:         numer_denom(m_i_j, numer, denom);
+16535:         product = denom * g_coeff_x;
+16535:         neg_assign(denom);
+16535:         add_mul_assign(product, denom, g_coeff_y);
+16535: 
+16535: 
+16535:         if (!is_line_or_ray) {
+16535:           neg_assign(numer);
+16535:           add_mul_assign(product, numer, g.divisor());
+16535:         }
+16535:         if (product != 0) {
+16535:           return Poly_Gen_Relation::nothing();
+16535:         }
+16535:       }
+16535:       else {
+16535:         if (!is_plus_infinity(m_i_j)) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:           numer_denom(m_i_j, numer, denom);
+16535:           product = denom * g_coeff_x;
+16535:           neg_assign(denom);
+16535:           add_mul_assign(product, denom, g_coeff_y);
+16535: 
+16535: 
+16535:           if (!is_line_or_ray) {
+16535:             neg_assign(numer);
+16535:             add_mul_assign(product, numer, g.divisor());
+16535:           }
+16535:           if (is_line && product != 0) {
+16535:             return Poly_Gen_Relation::nothing();
+16535:           }
+16535:           else if (product > 0) {
+16535:             return Poly_Gen_Relation::nothing();
+16535:           }
+16535:         }
+16535:         if (!is_plus_infinity(m_ii_jj)) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:           numer_denom(m_ii_jj, numer, denom);
+16535:           product = denom * g_coeff_y;
+16535:           neg_assign(denom);
+16535:           add_mul_assign(product, denom, g_coeff_x);
+16535: 
+16535: 
+16535:           if (!is_line_or_ray) {
+16535:             neg_assign(numer);
+16535:             add_mul_assign(product, numer, g.divisor());
+16535:           }
+16535:           if (is_line && product != 0) {
+16535:             return Poly_Gen_Relation::nothing();
+16535:           }
+16535:           else if (product > 0) {
+16535:             return Poly_Gen_Relation::nothing();
+16535:           }
+16535:         }
+16535:       }
+16535: 
+16535:       const bool sum_is_equality = is_additive_inverse(m_i_jj, m_ii_j);
+16535:       if (sum_is_equality) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:         numer_denom(m_ii_j, numer, denom);
+16535:         product = denom * g_coeff_x;
+16535:         add_mul_assign(product, denom, g_coeff_y);
+16535: 
+16535: 
+16535:         if (!is_line_or_ray) {
+16535:           neg_assign(numer);
+16535:           add_mul_assign(product, numer, g.divisor());
+16535:         }
+16535:         if (product != 0) {
+16535:           return Poly_Gen_Relation::nothing();
+16535:         }
+16535:       }
+16535:       else {
+16535:         if (!is_plus_infinity(m_i_jj)) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:           numer_denom(m_i_jj, numer, denom);
+16535:           neg_assign(denom);
+16535:           product = denom * g_coeff_x;
+16535:           add_mul_assign(product, denom, g_coeff_y);
+16535: 
+16535: 
+16535:           if (!is_line_or_ray) {
+16535:             neg_assign(numer);
+16535:             add_mul_assign(product, numer, g.divisor());
+16535:           }
+16535:           if (is_line && product != 0) {
+16535:             return Poly_Gen_Relation::nothing();
+16535:           }
+16535:           else if (product > 0) {
+16535:             return Poly_Gen_Relation::nothing();
+16535:           }
+16535:         }
+16535:         if (!is_plus_infinity(m_ii_j)) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:           numer_denom(m_ii_j, numer, denom);
+16535:           product = denom * g_coeff_x;
+16535:           add_mul_assign(product, denom, g_coeff_y);
+16535: 
+16535: 
+16535:           if (!is_line_or_ray) {
+16535:             neg_assign(numer);
+16535:             add_mul_assign(product, numer, g.divisor());
+16535:           }
+16535:           if (is_line && product != 0) {
+16535:             return Poly_Gen_Relation::nothing();
+16535:           }
+16535:           else if (product > 0) {
+16535:             return Poly_Gen_Relation::nothing();
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   return Poly_Gen_Relation::subsumes();
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::strong_closure_assign() const {
+16535: 
+16535:   if (marked_empty() || marked_strongly_closed() || space_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   Octagonal_Shape& x = const_cast<Octagonal_Shape<T>&>(*this);
+16535: 
+16535:   typedef typename OR_Matrix<N>::row_iterator row_iterator;
+16535:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
+16535: 
+16535:   const dimension_type n_rows = x.matrix.num_rows();
+16535:   const row_iterator m_begin = x.matrix.row_begin();
+16535:   const row_iterator m_end = x.matrix.row_end();
+16535: 
+16535: 
+16535:   for (row_iterator i = m_begin; i != m_end; ++i) {
+16535:     ((void) 0);
+16535:     assign_r((*i)[i.index()], 0, ROUND_NOT_NEEDED);
+16535:   }
+16535: # 2581 "../../src/Octagonal_Shape_templates.hh"
+16535:   typename OR_Matrix<N>::element_iterator iter_ij;
+16535:   std::vector<N> vec_k(n_rows);
+16535:   std::vector<N> vec_ck(n_rows);
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_sum1; N& sum1 = holder_sum1.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_sum2; N& sum2 = holder_sum2.item();
+16535:   row_reference x_k;
+16535:   row_reference x_ck;
+16535:   row_reference x_i;
+16535:   row_reference x_ci;
+16535: 
+16535: 
+16535: 
+16535:   for (int twice = 0; twice < 2; ++twice) {
+16535: 
+16535:     row_iterator x_k_iter = m_begin;
+16535:     row_iterator x_i_iter = m_begin;
+16535:     for (dimension_type k = 0; k < n_rows; k += 2) {
+16535:       const dimension_type ck = k + 1;
+16535: 
+16535:       iter_ij = x.matrix.element_begin();
+16535: 
+16535:       x_k = *x_k_iter;
+16535:       ++x_k_iter;
+16535:       x_ck = *x_k_iter;
+16535:       ++x_k_iter;
+16535: 
+16535:       for (dimension_type i = 0; i <= k; i += 2) {
+16535:         const dimension_type ci = i + 1;
+16535: 
+16535:         vec_k[i] = x_k[i];
+16535: 
+16535:         vec_k[ci] = x_k[ci];
+16535: 
+16535:         vec_ck[i] = x_ck[i];
+16535: 
+16535:         vec_ck[ci] = x_ck[ci];
+16535:       }
+16535:       x_i_iter = x_k_iter;
+16535:       for (dimension_type i = k + 2; i < n_rows; i += 2) {
+16535:         const dimension_type ci = i + 1;
+16535:         x_i = *x_i_iter;
+16535:         ++x_i_iter;
+16535:         x_ci = *x_i_iter;
+16535:         ++x_i_iter;
+16535: 
+16535:         vec_k[i] = x_ci[ck];
+16535: 
+16535:         vec_k[ci] = x_i[ck];
+16535: 
+16535:         vec_ck[i] = x_ci[k];
+16535: 
+16535:         vec_ck[ci] = x_i[k];
+16535:       }
+16535: 
+16535:       for (dimension_type i = 0; i < n_rows; ++i) {
+16535:         using namespace Implementation::Octagonal_Shapes;
+16535:         const dimension_type ci = coherent_index(i);
+16535:         const N& vec_k_ci = vec_k[ci];
+16535:         const N& vec_ck_ci = vec_ck[ci];
+16535: 
+16535: 
+16535:         for (dimension_type j = 0; j <= i; ) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:           add_assign_r(sum1, vec_ck_ci, vec_k[j], ROUND_UP);
+16535:           add_assign_r(sum2, vec_k_ci, vec_ck[j], ROUND_UP);
+16535:           min_assign(sum1, sum2);
+16535:           min_assign(*iter_ij, sum1);
+16535: 
+16535:           ++j;
+16535:           ++iter_ij;
+16535: 
+16535:           add_assign_r(sum1, vec_ck_ci, vec_k[j], ROUND_UP);
+16535:           add_assign_r(sum2, vec_k_ci, vec_ck[j], ROUND_UP);
+16535:           min_assign(sum1, sum2);
+16535:           min_assign(*iter_ij, sum1);
+16535: 
+16535:           ++j;
+16535:           ++iter_ij;
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   for (row_iterator i = m_begin; i != m_end; ++i) {
+16535:     N& x_i_i = (*i)[i.index()];
+16535:     if (sgn(x_i_i) < 0) {
+16535:       x.set_empty();
+16535:       return;
+16535:     }
+16535:     else {
+16535:       ((void) 0);
+16535: 
+16535:       assign_r(x_i_i, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   x.strong_coherence_assign();
+16535: 
+16535:   x.set_strongly_closed();
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::strong_coherence_assign() {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_semi_sum; N& semi_sum = holder_semi_sum.item();
+16535:   for (typename OR_Matrix<N>::row_iterator i_iter = matrix.row_begin(),
+16535:          i_end = matrix.row_end(); i_iter != i_end; ++i_iter) {
+16535:     typename OR_Matrix<N>::row_reference_type x_i = *i_iter;
+16535:     const dimension_type i = i_iter.index();
+16535:     using namespace Implementation::Octagonal_Shapes;
+16535:     const N& x_i_ci = x_i[coherent_index(i)];
+16535: 
+16535:     if (!is_plus_infinity(x_i_ci)) {
+16535:       for (dimension_type j = 0, rs_i = i_iter.row_size();
+16535:            j < rs_i; ++j) {
+16535:         if (i != j) {
+16535:           const N& x_cj_j = matrix[coherent_index(j)][j];
+16535:           if (!is_plus_infinity(x_cj_j)) {
+16535:             add_assign_r(semi_sum, x_i_ci, x_cj_j, ROUND_UP);
+16535:             div_2exp_assign_r(semi_sum, semi_sum, 1, ROUND_UP);
+16535:             min_assign(x_i[j], semi_sum);
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: Octagonal_Shape<T>::tight_coherence_would_make_empty() const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   for (dimension_type i = 0; i < 2*space_dim; i += 2) {
+16535:     const dimension_type ci = i + 1;
+16535:     const N& mat_i_ci = matrix[i][ci];
+16535:     if (!is_plus_infinity(mat_i_ci)
+16535: 
+16535:         && !is_even(mat_i_ci)
+16535: 
+16535:         && is_additive_inverse(mat_i_ci, matrix[ci][i])) {
+16535:       return true;
+16535:     }
+16535:   }
+16535:   return false;
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::tight_closure_assign() {
+16535:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_2746 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(std::numeric_limits<T>::is_integer)>) }
+16535: 
+16535:                                                           ;
+16535: 
+16535: 
+16535:   strong_closure_assign();
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535:   if (tight_coherence_would_make_empty()) {
+16535:     set_empty();
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::Dirty_Temp<N> holder_temp_one; N& temp_one = holder_temp_one.item();
+16535:     assign_r(temp_one, 1, ROUND_NOT_NEEDED);
+16535:     for (dimension_type i = 0; i < 2*space_dim; i += 2) {
+16535:       const dimension_type ci = i + 1;
+16535:       N& mat_i_ci = matrix[i][ci];
+16535:       if (!is_plus_infinity(mat_i_ci) && !is_even(mat_i_ci)) {
+16535:         sub_assign_r(mat_i_ci, mat_i_ci, temp_one, ROUND_UP);
+16535:       }
+16535:       N& mat_ci_i = matrix[ci][i];
+16535:       if (!is_plus_infinity(mat_ci_i) && !is_even(mat_ci_i)) {
+16535:         sub_assign_r(mat_ci_i, mat_ci_i, temp_one, ROUND_UP);
+16535:       }
+16535:     }
+16535: 
+16535:     strong_coherence_assign();
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>
+16535: ::incremental_strong_closure_assign(const Variable var) const {
+16535: 
+16535:   if (var.id() >= space_dim) {
+16535:     throw_dimension_incompatible("incremental_strong_closure_assign(v)",
+16535:                                  var.id());
+16535:   }
+16535: 
+16535: 
+16535:   if (marked_empty() || marked_strongly_closed()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   Octagonal_Shape& x = const_cast<Octagonal_Shape<T>&>(*this);
+16535: 
+16535:   typedef typename OR_Matrix<N>::row_iterator row_iterator;
+16535:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
+16535: 
+16535:   const row_iterator m_begin = x.matrix.row_begin();
+16535:   const row_iterator m_end = x.matrix.row_end();
+16535: 
+16535: 
+16535:   for (row_iterator i = m_begin; i != m_end; ++i) {
+16535:     ((void) 0);
+16535:     assign_r((*i)[i.index()], 0, ROUND_NOT_NEEDED);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type v = 2*var.id();
+16535:   const dimension_type cv = v + 1;
+16535:   row_iterator v_iter = m_begin + v;
+16535:   row_iterator cv_iter = v_iter + 1;
+16535:   row_reference x_v = *v_iter;
+16535:   row_reference x_cv = *cv_iter;
+16535:   const dimension_type rs_v = v_iter.row_size();
+16535:   const dimension_type n_rows = x.matrix.num_rows();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_sum; N& sum = holder_sum.item();
+16535:   using namespace Implementation::Octagonal_Shapes;
+16535:   for (row_iterator k_iter = m_begin; k_iter != m_end; ++k_iter) {
+16535:     const dimension_type k = k_iter.index();
+16535:     const dimension_type ck = coherent_index(k);
+16535:     const dimension_type rs_k = k_iter.row_size();
+16535:     row_reference x_k = *k_iter;
+16535:     row_reference x_ck = (k % 2 != 0) ? *(k_iter-1) : *(k_iter + 1);
+16535: 
+16535:     for (row_iterator i_iter = m_begin; i_iter != m_end; ++i_iter) {
+16535:       const dimension_type i = i_iter.index();
+16535:       const dimension_type ci = coherent_index(i);
+16535:       const dimension_type rs_i = i_iter.row_size();
+16535:       row_reference x_i = *i_iter;
+16535:       row_reference x_ci = (i % 2 != 0) ? *(i_iter-1) : *(i_iter + 1);
+16535: 
+16535:       const N& x_i_k = (k < rs_i) ? x_i[k] : x_ck[ci];
+16535:       if (!is_plus_infinity(x_i_k)) {
+16535:         const N& x_k_v = (v < rs_k) ? x_k[v] : x_cv[ck];
+16535:         if (!is_plus_infinity(x_k_v)) {
+16535:           add_assign_r(sum, x_i_k, x_k_v, ROUND_UP);
+16535:           N& x_i_v = (v < rs_i) ? x_i[v] : x_cv[ci];
+16535:           min_assign(x_i_v, sum);
+16535:         }
+16535:         const N& x_k_cv = (cv < rs_k) ? x_k[cv] : x_v[ck];
+16535:         if (!is_plus_infinity(x_k_cv)) {
+16535:           add_assign_r(sum, x_i_k, x_k_cv, ROUND_UP);
+16535:           N& x_i_cv = (cv < rs_i) ? x_i[cv] : x_v[ci];
+16535:           min_assign(x_i_cv, sum);
+16535:         }
+16535:       }
+16535:       const N& x_k_i = (i < rs_k) ? x_k[i] : x_ci[ck];
+16535:       if (!is_plus_infinity(x_k_i)) {
+16535:         const N& x_v_k = (k < rs_v) ? x_v[k] : x_ck[cv];
+16535:         if (!is_plus_infinity(x_v_k)) {
+16535:           N& x_v_i = (i < rs_v) ? x_v[i] : x_ci[cv];
+16535:           add_assign_r(sum, x_v_k, x_k_i, ROUND_UP);
+16535:           min_assign(x_v_i, sum);
+16535:         }
+16535:         const N& x_cv_k = (k < rs_v) ? x_cv[k] : x_ck[v];
+16535:         if (!is_plus_infinity(x_cv_k)) {
+16535:           N& x_cv_i = (i < rs_v) ? x_cv[i] : x_ci[v];
+16535:           add_assign_r(sum, x_cv_k, x_k_i, ROUND_UP);
+16535:           min_assign(x_cv_i, sum);
+16535:         }
+16535:       }
+16535: 
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   for (row_iterator i_iter = m_begin; i_iter != m_end; ++i_iter) {
+16535:     const dimension_type i = i_iter.index();
+16535:     const dimension_type ci = coherent_index(i);
+16535:     const dimension_type rs_i = i_iter.row_size();
+16535:     row_reference x_i = *i_iter;
+16535:     const N& x_i_v = (v < rs_i) ? x_i[v] : x_cv[ci];
+16535: 
+16535: 
+16535: 
+16535:     for (dimension_type j = 0; j < n_rows; ++j) {
+16535:       const dimension_type cj = coherent_index(j);
+16535:       row_reference x_cj = *(m_begin + cj);
+16535:       N& x_i_j = (j < rs_i) ? x_i[j] : x_cj[ci];
+16535:       if (!is_plus_infinity(x_i_v)) {
+16535:         const N& x_v_j = (j < rs_v) ? x_v[j] : x_cj[cv];
+16535:         if (!is_plus_infinity(x_v_j)) {
+16535:           add_assign_r(sum, x_i_v, x_v_j, ROUND_UP);
+16535:           min_assign(x_i_j, sum);
+16535:         }
+16535:       }
+16535:       const N& x_i_cv = (cv < rs_i) ? x_i[cv] : x_v[ci];
+16535:       if (!is_plus_infinity(x_i_cv)) {
+16535:         const N& x_cv_j = (j < rs_v) ? x_cv[j] : x_cj[v];
+16535:         if (!is_plus_infinity(x_cv_j)) {
+16535:           add_assign_r(sum, x_i_cv, x_cv_j, ROUND_UP);
+16535:           min_assign(x_i_j, sum);
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   for (row_iterator i = m_begin; i != m_end; ++i) {
+16535:     N& x_i_i = (*i)[i.index()];
+16535:     if (sgn(x_i_i) < 0) {
+16535:       x.set_empty();
+16535:       return;
+16535:     }
+16535:     else {
+16535: 
+16535:       ((void) 0);
+16535:       assign_r(x_i_i, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   x.strong_coherence_assign();
+16535: 
+16535:   x.set_strongly_closed();
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>
+16535: ::compute_successors(std::vector<dimension_type>& successor) const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type successor_size = matrix.num_rows();
+16535: 
+16535:   successor.reserve(successor_size);
+16535:   for (dimension_type i = 0; i < successor_size; ++i) {
+16535:     successor.push_back(i);
+16535:   }
+16535: 
+16535:   for (dimension_type i = successor_size; i-- > 0; ) {
+16535:     typename OR_Matrix<N>::const_row_iterator i_iter = matrix.row_begin() + i;
+16535:     typename OR_Matrix<N>::const_row_reference_type m_i = *i_iter;
+16535:     typename OR_Matrix<N>::const_row_reference_type m_ci
+16535:       = (i % 2 != 0) ? *(i_iter-1) : *(i_iter + 1);
+16535:     for (dimension_type j = 0; j < i; ++j) {
+16535: 
+16535: 
+16535:       using namespace Implementation::Octagonal_Shapes;
+16535:       dimension_type cj = coherent_index(j);
+16535:       if (is_additive_inverse(m_ci[cj], m_i[j])) {
+16535: 
+16535:         successor[j] = i;
+16535:       }
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>
+16535: ::compute_leaders(std::vector<dimension_type>& leaders) const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type leader_size = matrix.num_rows();
+16535: 
+16535:   leaders.reserve(leader_size);
+16535:   for (dimension_type i = 0; i < leader_size; ++i) {
+16535:     leaders.push_back(i);
+16535:   }
+16535: 
+16535:   for (typename OR_Matrix<N>::const_row_iterator i_iter = matrix.row_begin(),
+16535:          matrix_row_end = matrix.row_end();
+16535:        i_iter != matrix_row_end; ++i_iter) {
+16535:     typename OR_Matrix<N>::const_row_reference_type m_i = *i_iter;
+16535:     dimension_type i = i_iter.index();
+16535:     typename OR_Matrix<N>::const_row_reference_type m_ci
+16535:       = (i % 2 != 0) ? *(i_iter-1) : *(i_iter + 1);
+16535:     for (dimension_type j = 0; j < i; ++j) {
+16535:       using namespace Implementation::Octagonal_Shapes;
+16535:       dimension_type cj = coherent_index(j);
+16535:       if (is_additive_inverse(m_ci[cj], m_i[j])) {
+16535: 
+16535:         leaders[i] = leaders[j];
+16535:       }
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>
+16535: ::compute_leaders(std::vector<dimension_type>& successor,
+16535:                   std::vector<dimension_type>& no_sing_leaders,
+16535:                   bool& exist_sing_class,
+16535:                   dimension_type& sing_leader) const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   dimension_type successor_size = successor.size();
+16535:   std::deque<bool> dealt_with(successor_size, false);
+16535:   for (dimension_type i = 0; i < successor_size; ++i) {
+16535:     dimension_type next_i = successor[i];
+16535:     if (!dealt_with[i]) {
+16535: 
+16535: 
+16535:       using namespace Implementation::Octagonal_Shapes;
+16535:       if (next_i == coherent_index(i)) {
+16535:         exist_sing_class = true;
+16535:         sing_leader = i;
+16535:       }
+16535:       else {
+16535:         no_sing_leaders.push_back(i);
+16535:       }
+16535:     }
+16535: 
+16535:     dealt_with[next_i] = true;
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::strong_reduction_assign() const {
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return;
+16535:   }
+16535:   strong_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   std::vector<Bit_Row> non_red;
+16535:   non_redundant_matrix_entries(non_red);
+16535: 
+16535: 
+16535:   Octagonal_Shape<T>& x = const_cast<Octagonal_Shape<T>&>(*this);
+16535: 
+16535: 
+16535: 
+16535:   typename OR_Matrix<N>::element_iterator x_i = x.matrix.element_begin();
+16535:   for (dimension_type i = 0; i < 2 * space_dim; ++i) {
+16535:     const Bit_Row& non_red_i = non_red[i];
+16535:     for (dimension_type j = 0,
+16535:            j_end = OR_Matrix<N>::row_size(i); j < j_end; ++j, ++x_i) {
+16535:       if (!non_red_i[j]) {
+16535:         assign_r(*x_i, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:       }
+16535:     }
+16535:   }
+16535:   x.reset_strongly_closed();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>
+16535: ::non_redundant_matrix_entries(std::vector<Bit_Row>& non_redundant) const {
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:   non_redundant.resize(2*space_dim);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   std::vector<dimension_type> no_sing_leaders;
+16535:   dimension_type sing_leader = 0;
+16535:   bool exist_sing_class = false;
+16535:   std::vector<dimension_type> successor;
+16535:   compute_successors(successor);
+16535:   compute_leaders(successor, no_sing_leaders, exist_sing_class, sing_leader);
+16535:   const dimension_type num_no_sing_leaders = no_sing_leaders.size();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   for (dimension_type li = 0; li < num_no_sing_leaders; ++li) {
+16535:     const dimension_type i = no_sing_leaders[li];
+16535:     using namespace Implementation::Octagonal_Shapes;
+16535:     const dimension_type ci = coherent_index(i);
+16535:     typename OR_Matrix<N>::const_row_reference_type
+16535:       m_i = *(matrix.row_begin() + i);
+16535:     if (i % 2 == 0) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       if (i != successor[i]) {
+16535:         dimension_type j = i;
+16535:         dimension_type next_j = successor[j];
+16535:         while (j != next_j) {
+16535:           non_redundant[next_j].set(j);
+16535:           j = next_j;
+16535:           next_j = successor[j];
+16535:         }
+16535:         const dimension_type cj = coherent_index(j);
+16535:         non_redundant[cj].set(ci);
+16535:       }
+16535:     }
+16535: 
+16535:     dimension_type rs_li = (li % 2 != 0) ? li : (li + 1);
+16535: 
+16535:     Parma_Polyhedra_Library::Dirty_Temp<N> holder_tmp; N& tmp = holder_tmp.item();
+16535:     for (dimension_type lj = 0 ; lj <= rs_li; ++lj) {
+16535:       const dimension_type j = no_sing_leaders[lj];
+16535:       const dimension_type cj = coherent_index(j);
+16535:       const N& m_i_j = m_i[j];
+16535:       const N& m_i_ci = m_i[ci];
+16535:       bool to_add = true;
+16535: 
+16535: 
+16535: 
+16535:       if (j != ci) {
+16535:         add_assign_r(tmp, m_i_ci, matrix[cj][j], ROUND_UP);
+16535:         div_2exp_assign_r(tmp, tmp, 1, ROUND_UP);
+16535:         if (m_i_j >= tmp) {
+16535: 
+16535:           continue;
+16535:         }
+16535:       }
+16535: # 3140 "../../src/Octagonal_Shape_templates.hh"
+16535:       for (dimension_type lk = 0; lk < num_no_sing_leaders; ++lk) {
+16535:         const dimension_type k = no_sing_leaders[lk];
+16535:         if (k != i && k != j) {
+16535:           dimension_type ck = coherent_index(k);
+16535:           if (k < j) {
+16535: 
+16535:             add_assign_r(tmp, m_i[k], matrix[cj][ck], ROUND_UP);
+16535:           }
+16535:           else if (k < i) {
+16535: 
+16535:             add_assign_r(tmp, m_i[k], matrix[k][j], ROUND_UP);
+16535:           }
+16535:           else {
+16535: 
+16535:             add_assign_r(tmp, matrix[ck][ci], matrix[k][j], ROUND_UP);
+16535:           }
+16535: 
+16535:           if (m_i_j >= tmp) {
+16535:             to_add = false;
+16535:             break;
+16535:           }
+16535:         }
+16535:       }
+16535: 
+16535:       if (to_add) {
+16535: 
+16535:         non_redundant[i].set(j);
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (exist_sing_class) {
+16535:     non_redundant[sing_leader].set(sing_leader + 1);
+16535:     if (successor[sing_leader + 1] != sing_leader + 1) {
+16535:       dimension_type j = sing_leader;
+16535:       dimension_type next_j = successor[j + 1];
+16535:       while (next_j != j + 1) {
+16535:         non_redundant[next_j].set(j);
+16535:         j = next_j;
+16535:         next_j = successor[j + 1];
+16535:       }
+16535:       non_redundant[j + 1].set(j);
+16535:     }
+16535:     else {
+16535:       non_redundant[sing_leader + 1].set(sing_leader);
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::upper_bound_assign(const Octagonal_Shape& y) {
+16535: 
+16535:   if (space_dim != y.space_dim) {
+16535:     throw_dimension_incompatible("upper_bound_assign(y)", y);
+16535:   }
+16535: 
+16535: 
+16535:   y.strong_closure_assign();
+16535:   if (y.marked_empty()) {
+16535:     return;
+16535:   }
+16535:   strong_closure_assign();
+16535:   if (marked_empty()) {
+16535:     *this = y;
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   typename OR_Matrix<N>::const_element_iterator j = y.matrix.element_begin();
+16535:   for (typename OR_Matrix<N>::element_iterator i = matrix.element_begin(),
+16535:          matrix_element_end = matrix.element_end();
+16535:        i != matrix_element_end; ++i, ++j) {
+16535:     max_assign(*i, *j);
+16535:   }
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::difference_assign(const Octagonal_Shape& y) {
+16535: 
+16535:   if (space_dim != y.space_dim) {
+16535:     throw_dimension_incompatible("difference_assign(y)", y);
+16535:   }
+16535: 
+16535:   Octagonal_Shape& x = *this;
+16535: 
+16535: 
+16535: 
+16535:   x.strong_closure_assign();
+16535: 
+16535:   if (x.marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   if (y.marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (x.space_dim == 0) {
+16535:     x.set_empty();
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (y.contains(x)) {
+16535:     x.set_empty();
+16535:     return;
+16535:   }
+16535: 
+16535:   Octagonal_Shape new_oct(space_dim, EMPTY);
+16535: 
+16535: 
+16535: 
+16535:   const Constraint_System& y_cs = y.constraints();
+16535:   for (Constraint_System::const_iterator i = y_cs.begin(),
+16535:          y_cs_end = y_cs.end(); i != y_cs_end; ++i) {
+16535:     const Constraint& c = *i;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     if (x.relation_with(c).implies(Poly_Con_Relation::is_included())) {
+16535:       continue;
+16535:     }
+16535:     Octagonal_Shape z = x;
+16535:     const Linear_Expression e(c.expression());
+16535:     z.add_constraint(e <= 0);
+16535:     if (!z.is_empty()) {
+16535:       new_oct.upper_bound_assign(z);
+16535:     }
+16535:     if (c.is_equality()) {
+16535:       z = x;
+16535:       z.add_constraint(e >= 0);
+16535:       if (!z.is_empty()) {
+16535:         new_oct.upper_bound_assign(z);
+16535:       }
+16535:     }
+16535:   }
+16535:   *this = new_oct;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: Octagonal_Shape<T>::simplify_using_context_assign(const Octagonal_Shape& y) {
+16535:   Octagonal_Shape& x = *this;
+16535:   const dimension_type dim = x.space_dimension();
+16535: 
+16535:   if (dim != y.space_dimension()) {
+16535:     throw_dimension_incompatible("simplify_using_context_assign(y)", y);
+16535:   }
+16535: 
+16535: 
+16535:   if (dim == 0) {
+16535:     if (y.marked_empty()) {
+16535:       x.set_zero_dim_univ();
+16535:       return false;
+16535:     }
+16535:     else {
+16535:       return !x.marked_empty();
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (x.contains(y)) {
+16535:     Octagonal_Shape<T> res(dim, UNIVERSE);
+16535:     x.m_swap(res);
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535:   x.strong_closure_assign();
+16535:   if (x.marked_empty()) {
+16535: 
+16535:     dimension_type i;
+16535:     dimension_type j;
+16535: 
+16535:     for (i = 0; i < 2*dim; i += 2) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       if (!is_plus_infinity(y.matrix_at(i, i + 1))) {
+16535:         j = i + 1;
+16535:         goto found;
+16535:       }
+16535: 
+16535:       if (!is_plus_infinity(y.matrix_at(i + 1, i))) {
+16535:         j = i;
+16535:         ++i;
+16535:         goto found;
+16535:       }
+16535:     }
+16535: 
+16535: 
+16535:     for (i = 2; i < 2*dim; ++i) {
+16535:       for (j = 0; j < i; ++j) {
+16535: 
+16535:         if (!is_plus_infinity(y.matrix_at(i, j))) {
+16535:           goto found;
+16535:         }
+16535:       }
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:     return false;
+16535: 
+16535:   found:
+16535: 
+16535:     ((void) 0);
+16535:     Octagonal_Shape<T> res(dim, UNIVERSE);
+16535: 
+16535:     Parma_Polyhedra_Library::Dirty_Temp<N> holder_tmp; N& tmp = holder_tmp.item();
+16535:     assign_r(tmp, 1, ROUND_UP);
+16535:     add_assign_r(tmp, tmp, y.matrix_at(i, j), ROUND_UP);
+16535: 
+16535:     neg_assign_r(res.matrix_at(j, i), tmp, ROUND_DOWN);
+16535:     ((void) 0);
+16535:     x.m_swap(res);
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Octagonal_Shape<T> target = x;
+16535:   target.intersection_assign(y);
+16535:   const bool bool_result = !target.is_empty();
+16535: 
+16535: 
+16535: 
+16535:   std::vector<Bit_Row> x_non_redundant;
+16535:   x.non_redundant_matrix_entries(x_non_redundant);
+16535: 
+16535:   dimension_type x_num_non_redundant = 0;
+16535:   for (size_t i = x_non_redundant.size(); i-- > 0 ; ) {
+16535:     x_num_non_redundant += x_non_redundant[i].count_ones();
+16535:   }
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Octagonal_Shape<T> yy = y;
+16535: 
+16535: 
+16535:   Octagonal_Shape<T> res(dim, UNIVERSE);
+16535: 
+16535:   dimension_type res_num_non_redundant = 0;
+16535: 
+16535: 
+16535:   std::vector<dimension_type> x_leaders;
+16535:   x.compute_leaders(x_leaders);
+16535: 
+16535: 
+16535: 
+16535:   dimension_type sing_leader;
+16535:   for (sing_leader = 0; sing_leader < 2*dim; sing_leader += 2) {
+16535:     if (sing_leader == x_leaders[sing_leader]) {
+16535:       const N& x_s_ss = x.matrix_at(sing_leader, sing_leader + 1);
+16535:       const N& x_ss_s = x.matrix_at(sing_leader + 1, sing_leader);
+16535:       if (is_additive_inverse(x_s_ss, x_ss_s)) {
+16535: 
+16535:         break;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   for (dimension_type i = sing_leader; i < 2*dim; i += 2) {
+16535:     if (x_leaders[i] != sing_leader) {
+16535:       continue;
+16535:     }
+16535: 
+16535: 
+16535:     const N& x_i_ii = x.matrix_at(i, i + 1);
+16535:     N& yy_i_ii = yy.matrix_at(i, i + 1);
+16535:     if (x_i_ii < yy_i_ii) {
+16535: 
+16535:       res.matrix_at(i, i + 1) = x_i_ii;
+16535:       ++res_num_non_redundant;
+16535: 
+16535:       yy_i_ii = x_i_ii;
+16535:       yy.reset_strongly_closed();
+16535:     }
+16535:     const N& x_ii_i = x.matrix_at(i + 1, i);
+16535:     N& yy_ii_i = yy.matrix_at(i + 1, i);
+16535:     if (x_ii_i < yy_ii_i) {
+16535: 
+16535:       res.matrix_at(i + 1, i) = x_ii_i;
+16535:       ++res_num_non_redundant;
+16535: 
+16535:       yy_ii_i = x_ii_i;
+16535:       yy.reset_strongly_closed();
+16535:     }
+16535: 
+16535:     if (!yy.marked_strongly_closed()) {
+16535:       Variable var_i(i/2);
+16535:       yy.incremental_strong_closure_assign(var_i);
+16535:       if (target.contains(yy)) {
+16535: 
+16535:         if (res_num_non_redundant < x_num_non_redundant) {
+16535:           res.reset_strongly_closed();
+16535:           x.m_swap(res);
+16535:         }
+16535:         return bool_result;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   for (dimension_type i = 0; i < 2*dim; ++i) {
+16535:     const dimension_type j = x_leaders[i];
+16535:     if (j == i || j == sing_leader) {
+16535:       continue;
+16535:     }
+16535:     const N& x_i_j = x.matrix_at(i, j);
+16535:     ((void) 0);
+16535:     N& yy_i_j = yy.matrix_at(i, j);
+16535:     if (x_i_j < yy_i_j) {
+16535:       res.matrix_at(i, j) = x_i_j;
+16535:       ++res_num_non_redundant;
+16535: 
+16535:       yy_i_j = x_i_j;
+16535:       yy.reset_strongly_closed();
+16535:     }
+16535:     const N& x_j_i = x.matrix_at(j, i);
+16535:     N& yy_j_i = yy.matrix_at(j, i);
+16535:     ((void) 0);
+16535:     if (x_j_i < yy_j_i) {
+16535:       res.matrix_at(j, i) = x_j_i;
+16535:       ++res_num_non_redundant;
+16535: 
+16535:       yy_j_i = x_j_i;
+16535:       yy.reset_strongly_closed();
+16535:     }
+16535: 
+16535:     if (!yy.marked_strongly_closed()) {
+16535:       Variable var_j(j/2);
+16535:       yy.incremental_strong_closure_assign(var_j);
+16535:       if (target.contains(yy)) {
+16535: 
+16535:         if (res_num_non_redundant < x_num_non_redundant) {
+16535:           res.reset_strongly_closed();
+16535:           x.m_swap(res);
+16535:         }
+16535:         return bool_result;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   for (dimension_type i = 0; i < 2*dim; ++i) {
+16535:     if (i != x_leaders[i]) {
+16535:       continue;
+16535:     }
+16535:     const Bit_Row& x_non_redundant_i = x_non_redundant[i];
+16535:     for (dimension_type j = 0; j < 2*dim; ++j) {
+16535:       if (j != x_leaders[j]) {
+16535:         continue;
+16535:       }
+16535:       if (i >= j) {
+16535:         if (!x_non_redundant_i[j]) {
+16535:           continue;
+16535:         }
+16535:       }
+16535:       else if (!x_non_redundant[j][i]) {
+16535:         continue;
+16535:       }
+16535:       N& yy_i_j = yy.matrix_at(i, j);
+16535:       const N& x_i_j = x.matrix_at(i, j);
+16535:       if (x_i_j < yy_i_j) {
+16535:         res.matrix_at(i, j) = x_i_j;
+16535:         ++res_num_non_redundant;
+16535: 
+16535:         yy_i_j = x_i_j;
+16535:         yy.reset_strongly_closed();
+16535:         Variable var(i/2);
+16535:         yy.incremental_strong_closure_assign(var);
+16535:         if (target.contains(yy)) {
+16535: 
+16535:           if (res_num_non_redundant < x_num_non_redundant) {
+16535:             res.reset_strongly_closed();
+16535:             x.m_swap(res);
+16535:           }
+16535:           return bool_result;
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::ppl_unreachable();
+16535:   return false;
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::add_space_dimensions_and_embed(dimension_type m) {
+16535: 
+16535:   if (m == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535:   const dimension_type new_dim = space_dim + m;
+16535:   const bool was_zero_dim_univ = !marked_empty() && space_dim == 0;
+16535: 
+16535: 
+16535: 
+16535:   matrix.grow(new_dim);
+16535:   space_dim = new_dim;
+16535: 
+16535: 
+16535:   if (was_zero_dim_univ) {
+16535:     set_strongly_closed();
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::add_space_dimensions_and_project(dimension_type m) {
+16535: 
+16535:   if (m == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535:   const dimension_type n = matrix.num_rows();
+16535: 
+16535: 
+16535: 
+16535:   add_space_dimensions_and_embed(m);
+16535: 
+16535: 
+16535:   for (typename OR_Matrix<N>::row_iterator i = matrix.row_begin() + n,
+16535:          matrix_row_end = matrix.row_end(); i != matrix_row_end; i += 2) {
+16535:     typename OR_Matrix<N>::row_reference_type x_i = *i;
+16535:     typename OR_Matrix<N>::row_reference_type x_ci = *(i + 1);
+16535:     const dimension_type ind = i.index();
+16535:     assign_r(x_i[ind + 1], 0, ROUND_NOT_NEEDED);
+16535:     assign_r(x_ci[ind], 0, ROUND_NOT_NEEDED);
+16535:   }
+16535: 
+16535:   if (marked_strongly_closed()) {
+16535:     reset_strongly_closed();
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::remove_space_dimensions(const Variables_Set& vars) {
+16535: 
+16535: 
+16535: 
+16535:   if (vars.empty()) {
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type min_space_dim = vars.space_dimension();
+16535:   if (space_dim < min_space_dim) {
+16535:     throw_dimension_incompatible("remove_space_dimensions(vs)", min_space_dim);
+16535:   }
+16535: 
+16535:   const dimension_type new_space_dim = space_dim - vars.size();
+16535: 
+16535:   strong_closure_assign();
+16535: 
+16535: 
+16535:   if (new_space_dim == 0) {
+16535:     matrix.shrink(0);
+16535:     if (!marked_empty()) {
+16535: 
+16535:       set_zero_dim_univ();
+16535:     }
+16535:     space_dim = 0;
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename OR_Matrix<N>::element_iterator Elem_Iter;
+16535:   typedef typename std::iterator_traits<Elem_Iter>::difference_type diff_t;
+16535: 
+16535:   dimension_type first = *vars.begin();
+16535:   const dimension_type first_size = 2 * first * (first + 1);
+16535:   Elem_Iter iter = matrix.element_begin() + static_cast<diff_t>(first_size);
+16535: 
+16535:   for (dimension_type i = first + 1; i < space_dim; ++i) {
+16535:     if (vars.count(i) == 0) {
+16535:       typename OR_Matrix<N>::row_iterator row_iter = matrix.row_begin() + 2*i;
+16535:       typename OR_Matrix<N>::row_reference_type row_ref = *row_iter;
+16535:       typename OR_Matrix<N>::row_reference_type row_ref1 = *(++row_iter);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       for (dimension_type j = 0; j <= i; ++j) {
+16535:         if (vars.count(j) == 0) {
+16535:           assign_or_swap(*(iter++), row_ref[2*j]);
+16535:           assign_or_swap(*(iter++), row_ref[2*j + 1]);
+16535:         }
+16535:       }
+16535:       for (dimension_type j = 0; j <= i; ++j) {
+16535:         if (vars.count(j) == 0) {
+16535:           assign_or_swap(*(iter++), row_ref1[2*j]);
+16535:           assign_or_swap(*(iter++), row_ref1[2*j + 1]);
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   matrix.shrink(new_space_dim);
+16535:   space_dim = new_space_dim;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Partial_Function>
+16535: void
+16535: Octagonal_Shape<T>::map_space_dimensions(const Partial_Function& pfunc) {
+16535:   if (space_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535:   if (pfunc.has_empty_codomain()) {
+16535: 
+16535:     remove_higher_space_dimensions(0);
+16535:     return;
+16535:   }
+16535: 
+16535:   const dimension_type new_space_dim = pfunc.max_in_codomain() + 1;
+16535: 
+16535: 
+16535:   if (new_space_dim < space_dim) {
+16535:     strong_closure_assign();
+16535:   }
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     remove_higher_space_dimensions(new_space_dim);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   OR_Matrix<N> x(new_space_dim);
+16535: 
+16535:   typedef typename OR_Matrix<N>::row_iterator row_iterator;
+16535:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
+16535: 
+16535:   row_iterator m_begin = x.row_begin();
+16535: 
+16535:   for (row_iterator i_iter = matrix.row_begin(), i_end = matrix.row_end();
+16535:        i_iter != i_end; i_iter += 2) {
+16535:     dimension_type new_i;
+16535:     dimension_type i = i_iter.index()/2;
+16535: 
+16535: 
+16535: 
+16535:     if (pfunc.maps(i, new_i)) {
+16535:       row_reference r_i = *i_iter;
+16535:       row_reference r_ii = *(i_iter + 1);
+16535:       dimension_type double_new_i = 2*new_i;
+16535:       row_iterator x_iter = m_begin + double_new_i;
+16535:       row_reference x_i = *x_iter;
+16535:       row_reference x_ii = *(x_iter + 1);
+16535:       for (dimension_type j = 0; j <= i; ++j) {
+16535:         dimension_type new_j;
+16535: 
+16535:         if (pfunc.maps(j, new_j)) {
+16535:           dimension_type dj = 2*j;
+16535:           dimension_type double_new_j = 2*new_j;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:           if (new_i >= new_j) {
+16535:             assign_or_swap(x_i[double_new_j], r_i[dj]);
+16535:             assign_or_swap(x_ii[double_new_j], r_ii[dj]);
+16535:             assign_or_swap(x_ii[double_new_j + 1], r_ii[dj + 1]);
+16535:             assign_or_swap(x_i[double_new_j + 1], r_i[dj + 1]);
+16535:           }
+16535:           else {
+16535:             row_iterator x_j_iter = m_begin + double_new_j;
+16535:             row_reference x_j = *x_j_iter;
+16535:             row_reference x_jj = *(x_j_iter + 1);
+16535:             assign_or_swap(x_jj[double_new_i + 1], r_i[dj]);
+16535:             assign_or_swap(x_jj[double_new_i], r_ii[dj]);
+16535:             assign_or_swap(x_j[double_new_i + 1], r_i[dj + 1]);
+16535:             assign_or_swap(x_j[double_new_i], r_ii[dj + 1]);
+16535:           }
+16535: 
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   using std::swap;
+16535:   swap(matrix, x);
+16535:   space_dim = new_space_dim;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::intersection_assign(const Octagonal_Shape& y) {
+16535: 
+16535:   if (space_dim != y.space_dim) {
+16535:     throw_dimension_incompatible("intersection_assign(y)", y);
+16535:   }
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535:   if (y.marked_empty()) {
+16535:     set_empty();
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   bool changed = false;
+16535: 
+16535:   typename OR_Matrix<N>::const_element_iterator j = y.matrix.element_begin();
+16535:   for (typename OR_Matrix<N>::element_iterator i = matrix.element_begin(),
+16535:          matrix_element_end = matrix.element_end();
+16535:        i != matrix_element_end;
+16535:        ++i, ++j) {
+16535:     N& elem = *i;
+16535:     const N& y_elem = *j;
+16535:     if (y_elem < elem) {
+16535:       elem = y_elem;
+16535:       changed = true;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   if (changed && marked_strongly_closed()) {
+16535:     reset_strongly_closed();
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Iterator>
+16535: void
+16535: Octagonal_Shape<T>::CC76_extrapolation_assign(const Octagonal_Shape& y,
+16535:                                               Iterator first, Iterator last,
+16535:                                               unsigned* tp) {
+16535: 
+16535:   if (space_dim != y.space_dim) {
+16535:     throw_dimension_incompatible("CC76_extrapolation_assign(y)", y);
+16535:   }
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535:   strong_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535:   y.strong_closure_assign();
+16535: 
+16535:   if (y.marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   if (tp != 0 && *tp > 0) {
+16535:     Octagonal_Shape x_tmp(*this);
+16535:     x_tmp.CC76_extrapolation_assign(y, first, last, 0);
+16535: 
+16535:     if (!contains(x_tmp)) {
+16535:       --(*tp);
+16535:     }
+16535:     return;
+16535:   }
+16535: # 3858 "../../src/Octagonal_Shape_templates.hh"
+16535:   typename OR_Matrix<N>::const_element_iterator j = y.matrix.element_begin();
+16535:   for (typename OR_Matrix<N>::element_iterator i = matrix.element_begin(),
+16535:          matrix_element_end = matrix.element_end();
+16535:        i != matrix_element_end;
+16535:        ++i, ++j) {
+16535:     const N& y_elem = *j;
+16535:     N& elem = *i;
+16535:     if (y_elem < elem) {
+16535:       Iterator k = std::lower_bound(first, last, elem);
+16535:       if (k != last) {
+16535:         if (elem < *k) {
+16535:           assign_r(elem, *k, ROUND_UP);
+16535:         }
+16535:       }
+16535:       else {
+16535:         assign_r(elem, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   reset_strongly_closed();
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>
+16535: ::get_limiting_octagon(const Constraint_System& cs,
+16535:                        Octagonal_Shape& limiting_octagon) const {
+16535:   const dimension_type cs_space_dim = cs.space_dimension();
+16535: 
+16535:   ((void) 0);
+16535: 
+16535:   strong_closure_assign();
+16535:   bool is_oct_changed = false;
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_term; Parma_Polyhedra_Library::Coefficient& term = holder_term.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
+16535: 
+16535:   for (Constraint_System::const_iterator cs_i = cs.begin(),
+16535:          cs_end = cs.end(); cs_i != cs_end; ++cs_i) {
+16535:     const Constraint& c = *cs_i;
+16535:     dimension_type num_vars = 0;
+16535:     dimension_type i = 0;
+16535:     dimension_type j = 0;
+16535: 
+16535:     if (!Octagonal_Shape_Helper
+16535:       ::extract_octagonal_difference(c, cs_space_dim, num_vars, i, j,
+16535:                                      coeff, term)) {
+16535:       continue;
+16535:     }
+16535: 
+16535:     typedef typename OR_Matrix<N>::const_row_iterator Row_iterator;
+16535:     typedef typename OR_Matrix<N>::const_row_reference_type Row_reference;
+16535:     typedef typename OR_Matrix<N>::row_iterator row_iterator;
+16535:     typedef typename OR_Matrix<N>::row_reference_type row_reference;
+16535:     Row_iterator m_begin = matrix.row_begin();
+16535: 
+16535:     Row_iterator i_iter = m_begin + i;
+16535:     Row_reference m_i = *i_iter;
+16535:     OR_Matrix<N>& lo_mat = limiting_octagon.matrix;
+16535:     row_iterator lo_iter = lo_mat.row_begin() + i;
+16535:     row_reference lo_m_i = *lo_iter;
+16535:     N& lo_m_i_j = lo_m_i[j];
+16535:     if (coeff < 0) {
+16535:       neg_assign(coeff);
+16535:     }
+16535: 
+16535:     div_round_up(d, term, coeff);
+16535:     if (m_i[j] <= d) {
+16535:       if (c.is_inequality()) {
+16535:         if (lo_m_i_j > d) {
+16535:           lo_m_i_j = d;
+16535:           is_oct_changed = true;
+16535:         }
+16535:         else {
+16535: 
+16535:           if (i % 2 == 0) {
+16535:             ++i_iter;
+16535:             ++lo_iter;
+16535:           }
+16535:           else {
+16535:             --i_iter;
+16535:             --lo_iter;
+16535:           }
+16535:           Row_reference m_ci = *i_iter;
+16535:           row_reference lo_m_ci = *lo_iter;
+16535: 
+16535:           using namespace Implementation::Octagonal_Shapes;
+16535:           dimension_type cj = coherent_index(j);
+16535:           N& lo_m_ci_cj = lo_m_ci[cj];
+16535:           neg_assign(term);
+16535:           div_round_up(d, term, coeff);
+16535:           if (m_ci[cj] <= d && lo_m_ci_cj > d) {
+16535:             lo_m_ci_cj = d;
+16535:             is_oct_changed = true;
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   if (is_oct_changed && limiting_octagon.marked_strongly_closed()) {
+16535:     limiting_octagon.reset_strongly_closed();
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>
+16535: ::limited_CC76_extrapolation_assign(const Octagonal_Shape& y,
+16535:                                     const Constraint_System& cs,
+16535:                                     unsigned* tp) {
+16535: 
+16535: 
+16535:   if (space_dim != y.space_dim) {
+16535:     throw_dimension_incompatible("limited_CC76_extrapolation_assign(y, cs)",
+16535:                                  y);
+16535:   }
+16535: 
+16535:   const dimension_type cs_space_dim = cs.space_dimension();
+16535:   if (space_dim < cs_space_dim) {
+16535:     throw_constraint_incompatible("limited_CC76_extrapolation_assign(y, cs)");
+16535:   }
+16535: 
+16535: 
+16535:   if (cs.has_strict_inequalities()) {
+16535:     throw_constraint_incompatible("limited_CC76_extrapolation_assign(y, cs)");
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   if (y.marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   Octagonal_Shape limiting_octagon(space_dim, UNIVERSE);
+16535:   get_limiting_octagon(cs, limiting_octagon);
+16535:   CC76_extrapolation_assign(y, tp);
+16535:   intersection_assign(limiting_octagon);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::BHMZ05_widening_assign(const Octagonal_Shape& y,
+16535:                                            unsigned* tp) {
+16535: 
+16535:   if (space_dim != y.space_dim) {
+16535:     throw_dimension_incompatible("BHMZ05_widening_assign(y)", y);
+16535:   }
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535:   const dimension_type y_affine_dim = y.affine_dimension();
+16535: 
+16535: 
+16535: 
+16535:   if (y_affine_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type x_affine_dim = affine_dimension();
+16535:   ((void) 0);
+16535:   if (x_affine_dim != y_affine_dim) {
+16535:     return;
+16535:   }
+16535: 
+16535:   if (tp != 0 && *tp > 0) {
+16535:     Octagonal_Shape x_tmp(*this);
+16535:     x_tmp.BHMZ05_widening_assign(y, 0);
+16535: 
+16535:     if (!contains(x_tmp)) {
+16535:       --(*tp);
+16535:     }
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: 
+16535:   y.strong_reduction_assign();
+16535: 
+16535: 
+16535:   typename OR_Matrix<N>::const_element_iterator j = y.matrix.element_begin();
+16535:   for (typename OR_Matrix<N>::element_iterator i = matrix.element_begin(),
+16535:        matrix_element_end = matrix.element_end();
+16535:        i != matrix_element_end;
+16535:        ++i, ++j) {
+16535:     N& elem = *i;
+16535: 
+16535: 
+16535: 
+16535:     if (*j != elem) {
+16535:       assign_r(elem, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     }
+16535:   }
+16535:   reset_strongly_closed();
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>
+16535: ::limited_BHMZ05_extrapolation_assign(const Octagonal_Shape& y,
+16535:                                       const Constraint_System& cs,
+16535:                                       unsigned* tp) {
+16535: 
+16535: 
+16535:   if (space_dim != y.space_dim) {
+16535:     throw_dimension_incompatible("limited_BHMZ05_extrapolation_assign(y, cs)",
+16535:                                  y);
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type cs_space_dim = cs.space_dimension();
+16535:   if (space_dim < cs_space_dim) {
+16535:     throw_constraint_incompatible("limited_CH78_extrapolation_assign(y, cs)");
+16535:   }
+16535: 
+16535: 
+16535:   if (cs.has_strict_inequalities()) {
+16535:     throw_constraint_incompatible("limited_CH78_extrapolation_assign(y, cs)");
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   if (y.marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   Octagonal_Shape limiting_octagon(space_dim, UNIVERSE);
+16535:   get_limiting_octagon(cs, limiting_octagon);
+16535:   BHMZ05_widening_assign(y, tp);
+16535:   intersection_assign(limiting_octagon);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::CC76_narrowing_assign(const Octagonal_Shape& y) {
+16535: 
+16535:   if (space_dim != y.space_dim) {
+16535:     throw_dimension_incompatible("CC76_narrowing_assign(y)", y);
+16535:   }
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535:   y.strong_closure_assign();
+16535: 
+16535:   if (y.marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   strong_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   bool is_oct_changed = false;
+16535:   typename OR_Matrix<N>::const_element_iterator j = y.matrix.element_begin();
+16535:   for (typename OR_Matrix<N>::element_iterator i = matrix.element_begin(),
+16535:          matrix_element_end = matrix.element_end();
+16535:        i != matrix_element_end;
+16535:        ++i, ++j) {
+16535:     if (!is_plus_infinity(*i)
+16535:         && !is_plus_infinity(*j)
+16535:         && *i != *j) {
+16535:       *i = *j;
+16535:       is_oct_changed = true;
+16535:     }
+16535:   }
+16535: 
+16535:   if (is_oct_changed && marked_strongly_closed()) {
+16535:     reset_strongly_closed();
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>
+16535: ::deduce_v_pm_u_bounds(const dimension_type v_id,
+16535:                        const dimension_type last_id,
+16535:                        const Linear_Expression& sc_expr,
+16535:                        Coefficient_traits::const_reference sc_denom,
+16535:                        const N& ub_v) {
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_mpq_sc_denom; mpq_class& mpq_sc_denom = holder_mpq_sc_denom.item();
+16535:   assign_r(mpq_sc_denom, sc_denom, ROUND_NOT_NEEDED);
+16535: 
+16535: 
+16535:   const dimension_type n_v = 2*v_id;
+16535:   typename OR_Matrix<N>::row_reference_type m_cv = matrix[n_v + 1];
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_half; N& half = holder_half.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_minus_lb_u; mpq_class& minus_lb_u = holder_minus_lb_u.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_minus_q; mpq_class& minus_q = holder_minus_q.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_ub_u; mpq_class& ub_u = holder_ub_u.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_lb_u; mpq_class& lb_u = holder_lb_u.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_up_approx; N& up_approx = holder_up_approx.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_expr_u; Parma_Polyhedra_Library::Coefficient& minus_expr_u = holder_minus_expr_u.item();
+16535: 
+16535:   for (Linear_Expression::const_iterator u = sc_expr.begin(),
+16535:       u_end = sc_expr.lower_bound(Variable(last_id + 1)); u != u_end; ++u) {
+16535:     const dimension_type u_id = u.variable().id();
+16535: 
+16535:     if (u_id == v_id) {
+16535:       continue;
+16535:     }
+16535:     const Coefficient& expr_u = *u;
+16535: 
+16535:     const dimension_type n_u = u_id*2;
+16535: 
+16535:     if (expr_u > 0) {
+16535:       if (expr_u >= sc_denom) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:         div_2exp_assign_r(half, matrix[n_u + 1][n_u], 1, ROUND_UP);
+16535:         N& m_v_minus_u = (n_v < n_u) ? matrix[n_u][n_v] : m_cv[n_u + 1];
+16535:         sub_assign_r(m_v_minus_u, ub_v, half, ROUND_UP);
+16535:       }
+16535:       else {
+16535: 
+16535:         typename OR_Matrix<N>::row_reference_type m_u = matrix[n_u];
+16535:         const N& m_u_cu = m_u[n_u + 1];
+16535:         if (!is_plus_infinity(m_u_cu)) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:           assign_r(minus_lb_u, m_u_cu, ROUND_NOT_NEEDED);
+16535:           div_2exp_assign_r(minus_lb_u, minus_lb_u, 1, ROUND_NOT_NEEDED);
+16535:           assign_r(q, expr_u, ROUND_NOT_NEEDED);
+16535:           div_assign_r(q, q, mpq_sc_denom, ROUND_NOT_NEEDED);
+16535:           assign_r(ub_u, matrix[n_u + 1][n_u], ROUND_NOT_NEEDED);
+16535:           div_2exp_assign_r(ub_u, ub_u, 1, ROUND_NOT_NEEDED);
+16535: 
+16535:           add_assign_r(ub_u, ub_u, minus_lb_u, ROUND_NOT_NEEDED);
+16535: 
+16535:           sub_mul_assign_r(minus_lb_u, q, ub_u, ROUND_NOT_NEEDED);
+16535:           assign_r(up_approx, minus_lb_u, ROUND_UP);
+16535: 
+16535:           N& m_v_minus_u = (n_v < n_u) ? m_u[n_v] : m_cv[n_u + 1];
+16535:           add_assign_r(m_v_minus_u, ub_v, up_approx, ROUND_UP);
+16535:         }
+16535:       }
+16535:     }
+16535:     else {
+16535:       ((void) 0);
+16535: 
+16535:       neg_assign(minus_expr_u, expr_u);
+16535:       if (minus_expr_u >= sc_denom) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:         div_2exp_assign_r(half, matrix[n_u][n_u + 1], 1, ROUND_UP);
+16535:         N& m_v_plus_u = (n_v < n_u) ? matrix[n_u + 1][n_v] : m_cv[n_u];
+16535:         sub_assign_r(m_v_plus_u, ub_v, half, ROUND_UP);
+16535:       }
+16535:       else {
+16535: 
+16535:         typename OR_Matrix<N>::row_reference_type m_cu = matrix[n_u + 1];
+16535:         const N& m_cu_u = m_cu[n_u];
+16535:         if (!is_plus_infinity(m_cu_u)) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:           assign_r(ub_u, m_cu[n_u], ROUND_NOT_NEEDED);
+16535:           div_2exp_assign_r(ub_u, ub_u, 1, ROUND_NOT_NEEDED);
+16535:           assign_r(minus_q, minus_expr_u, ROUND_NOT_NEEDED);
+16535:           div_assign_r(minus_q, minus_q, mpq_sc_denom, ROUND_NOT_NEEDED);
+16535:           assign_r(lb_u, matrix[n_u][n_u + 1], ROUND_NOT_NEEDED);
+16535:           div_2exp_assign_r(lb_u, lb_u, 1, ROUND_NOT_NEEDED);
+16535:           neg_assign_r(lb_u, lb_u, ROUND_NOT_NEEDED);
+16535: 
+16535:           sub_assign_r(lb_u, lb_u, ub_u, ROUND_NOT_NEEDED);
+16535: 
+16535:           add_mul_assign_r(ub_u, minus_q, lb_u, ROUND_NOT_NEEDED);
+16535:           assign_r(up_approx, ub_u, ROUND_UP);
+16535: 
+16535:           N& m_v_plus_u = (n_v < n_u) ? m_cu[n_v] : m_cv[n_u];
+16535:           add_assign_r(m_v_plus_u, ub_v, up_approx, ROUND_UP);
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>
+16535: ::deduce_minus_v_pm_u_bounds(const dimension_type v_id,
+16535:                              const dimension_type last_id,
+16535:                              const Linear_Expression& sc_expr,
+16535:                              Coefficient_traits::const_reference sc_denom,
+16535:                              const N& minus_lb_v) {
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_mpq_sc_denom; mpq_class& mpq_sc_denom = holder_mpq_sc_denom.item();
+16535:   assign_r(mpq_sc_denom, sc_denom, ROUND_NOT_NEEDED);
+16535: 
+16535: 
+16535:   const dimension_type n_v = 2*v_id;
+16535:   typename OR_Matrix<N>::row_reference_type m_v = matrix[n_v];
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_half; N& half = holder_half.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_ub_u; mpq_class& ub_u = holder_ub_u.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_minus_lb_u; mpq_class& minus_lb_u = holder_minus_lb_u.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_up_approx; N& up_approx = holder_up_approx.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_expr_u; Parma_Polyhedra_Library::Coefficient& minus_expr_u = holder_minus_expr_u.item();
+16535: 
+16535:   for (Linear_Expression::const_iterator u = sc_expr.begin(),
+16535:       u_end = sc_expr.lower_bound(Variable(last_id + 1)); u != u_end; ++u) {
+16535:     const dimension_type u_id = u.variable().id();
+16535: 
+16535:     if (u_id == v_id) {
+16535:       continue;
+16535:     }
+16535:     const Coefficient& expr_u = *u;
+16535: 
+16535:     const dimension_type n_u = u_id*2;
+16535: 
+16535:     if (expr_u > 0) {
+16535:       if (expr_u >= sc_denom) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:         div_2exp_assign_r(half, matrix[n_u][n_u + 1], 1, ROUND_UP);
+16535:         N& m_u_minus_v = (n_v < n_u) ? matrix[n_u + 1][n_v + 1] : m_v[n_u];
+16535:         sub_assign_r(m_u_minus_v, minus_lb_v, half, ROUND_UP);
+16535:       }
+16535:       else {
+16535: 
+16535:         typename OR_Matrix<N>::row_reference_type m_cu = matrix[n_u + 1];
+16535:         const N& m_cu_u = m_cu[n_u];
+16535:         if (!is_plus_infinity(m_cu_u)) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:           assign_r(ub_u, m_cu[n_u], ROUND_NOT_NEEDED);
+16535:           div_2exp_assign_r(ub_u, ub_u, 1, ROUND_NOT_NEEDED);
+16535:           assign_r(q, expr_u, ROUND_NOT_NEEDED);
+16535:           div_assign_r(q, q, mpq_sc_denom, ROUND_NOT_NEEDED);
+16535:           assign_r(minus_lb_u, matrix[n_u][n_u + 1], ROUND_NOT_NEEDED);
+16535:           div_2exp_assign_r(minus_lb_u, minus_lb_u, 1, ROUND_NOT_NEEDED);
+16535: 
+16535:           add_assign_r(minus_lb_u, ub_u, minus_lb_u, ROUND_NOT_NEEDED);
+16535: 
+16535:           sub_mul_assign_r(ub_u, q, minus_lb_u, ROUND_NOT_NEEDED);
+16535:           assign_r(up_approx, ub_u, ROUND_UP);
+16535: 
+16535:           N& m_u_minus_v = (n_v < n_u) ? m_cu[n_v + 1] : m_v[n_u];
+16535:           add_assign_r(m_u_minus_v, minus_lb_v, up_approx, ROUND_UP);
+16535:         }
+16535:       }
+16535:     }
+16535:     else {
+16535:       ((void) 0);
+16535: 
+16535:       neg_assign(minus_expr_u, expr_u);
+16535:       if (minus_expr_u >= sc_denom) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:         div_2exp_assign_r(half, matrix[n_u + 1][n_u], 1, ROUND_UP);
+16535:         N& m_minus_v_minus_u = (n_v < n_u)
+16535:           ? matrix[n_u][n_v + 1]
+16535:           : m_v[n_u + 1];
+16535:         sub_assign_r(m_minus_v_minus_u, minus_lb_v, half, ROUND_UP);
+16535:       }
+16535:       else {
+16535: 
+16535:         typename OR_Matrix<N>::row_reference_type m_u = matrix[n_u];
+16535:         const N& m_u_cu = m_u[n_u + 1];
+16535:         if (!is_plus_infinity(m_u_cu)) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:           assign_r(ub_u, matrix[n_u + 1][n_u], ROUND_NOT_NEEDED);
+16535:           div_2exp_assign_r(ub_u, ub_u, 1, ROUND_NOT_NEEDED);
+16535:           assign_r(q, expr_u, ROUND_NOT_NEEDED);
+16535:           div_assign_r(q, q, mpq_sc_denom, ROUND_NOT_NEEDED);
+16535:           assign_r(minus_lb_u, m_u[n_u + 1], ROUND_NOT_NEEDED);
+16535:           div_2exp_assign_r(minus_lb_u, minus_lb_u, 1, ROUND_NOT_NEEDED);
+16535: 
+16535:           add_assign_r(ub_u, ub_u, minus_lb_u, ROUND_NOT_NEEDED);
+16535: 
+16535:           add_mul_assign_r(minus_lb_u, q, ub_u, ROUND_NOT_NEEDED);
+16535:           assign_r(up_approx, minus_lb_u, ROUND_UP);
+16535: 
+16535:           N& m_minus_v_minus_u = (n_v < n_u) ? m_u[n_v + 1] : m_v[n_u + 1];
+16535:           add_assign_r(m_minus_v_minus_u, minus_lb_v, up_approx, ROUND_UP);
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>
+16535: ::forget_all_octagonal_constraints(const dimension_type v_id) {
+16535:   ((void) 0);
+16535:   const dimension_type n_v = 2*v_id;
+16535:   typename OR_Matrix<N>::row_iterator m_iter = matrix.row_begin() + n_v;
+16535:   typename OR_Matrix<N>::row_reference_type r_v = *m_iter;
+16535:   typename OR_Matrix<N>::row_reference_type r_cv = *(++m_iter);
+16535:   for (dimension_type h = m_iter.row_size(); h-- > 0; ) {
+16535:     assign_r(r_v[h], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     assign_r(r_cv[h], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:   }
+16535:   ++m_iter;
+16535:   for (typename OR_Matrix<N>::row_iterator m_end = matrix.row_end();
+16535:        m_iter != m_end; ++m_iter) {
+16535:     typename OR_Matrix<N>::row_reference_type r = *m_iter;
+16535:     assign_r(r[n_v], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     assign_r(r[n_v + 1], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>
+16535: ::forget_binary_octagonal_constraints(const dimension_type v_id) {
+16535:   ((void) 0);
+16535:   const dimension_type n_v = 2*v_id;
+16535:   typename OR_Matrix<N>::row_iterator m_iter = matrix.row_begin() + n_v;
+16535:   typename OR_Matrix<N>::row_reference_type r_v = *m_iter;
+16535:   typename OR_Matrix<N>::row_reference_type r_cv = *(++m_iter);
+16535:   for (dimension_type k = n_v; k-- > 0; ) {
+16535:     assign_r(r_v[k], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     assign_r(r_cv[k], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:   }
+16535:   ++m_iter;
+16535:   for (typename OR_Matrix<N>::row_iterator m_end = matrix.row_end();
+16535:        m_iter != m_end; ++m_iter) {
+16535:     typename OR_Matrix<N>::row_reference_type r = *m_iter;
+16535:     assign_r(r[n_v], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     assign_r(r[n_v + 1], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::unconstrain(const Variable var) {
+16535: 
+16535:   const dimension_type var_id = var.id();
+16535:   if (space_dimension() < var_id + 1) {
+16535:     throw_dimension_incompatible("unconstrain(var)", var_id + 1);
+16535:   }
+16535: 
+16535: 
+16535:   strong_closure_assign();
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   forget_all_octagonal_constraints(var_id);
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::unconstrain(const Variables_Set& vars) {
+16535: 
+16535: 
+16535:   if (vars.empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type min_space_dim = vars.space_dimension();
+16535:   if (space_dimension() < min_space_dim) {
+16535:     throw_dimension_incompatible("unconstrain(vs)", min_space_dim);
+16535:   }
+16535: 
+16535: 
+16535:   strong_closure_assign();
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   for (Variables_Set::const_iterator vsi = vars.begin(),
+16535:          vsi_end = vars.end(); vsi != vsi_end; ++vsi) {
+16535:     forget_all_octagonal_constraints(*vsi);
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::refine(const Variable var,
+16535:                            const Relation_Symbol relsym,
+16535:                            const Linear_Expression& expr,
+16535:                            Coefficient_traits::const_reference denominator) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   const dimension_type var_id = var.id();
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535:   const Coefficient& b = expr.inhomogeneous_term();
+16535: 
+16535: 
+16535:   dimension_type t = 0;
+16535: 
+16535: 
+16535:   dimension_type w_id = expr.last_nonzero();
+16535: 
+16535:   if (w_id != 0) {
+16535:     ++t;
+16535:     if (!expr.all_zeroes(1, w_id)) {
+16535:       ++t;
+16535:     }
+16535:     --w_id;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename OR_Matrix<N>::row_iterator row_iterator;
+16535:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
+16535:   typedef typename OR_Matrix<N>::const_row_iterator Row_iterator;
+16535:   typedef typename OR_Matrix<N>::const_row_reference_type Row_reference;
+16535: 
+16535:   const row_iterator m_begin = matrix.row_begin();
+16535:   const dimension_type n_var = 2*var_id;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item();
+16535:   neg_assign(minus_denom, denominator);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (t == 1 && expr.coefficient(Variable(w_id)) != denominator
+16535:       && expr.coefficient(Variable(w_id)) != minus_denom) {
+16535:     t = 2;
+16535:   }
+16535:   if (t == 0) {
+16535: 
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_two_b; Parma_Polyhedra_Library::Coefficient& two_b = holder_two_b.item();
+16535:     two_b = 2*b;
+16535:     switch (relsym) {
+16535:     case EQUAL:
+16535: 
+16535:       add_octagonal_constraint(n_var + 1, n_var, two_b, denominator);
+16535:       add_octagonal_constraint(n_var, n_var + 1, two_b, minus_denom);
+16535:       break;
+16535:     case LESS_OR_EQUAL:
+16535: 
+16535:       add_octagonal_constraint(n_var + 1, n_var, two_b, denominator);
+16535:       break;
+16535:     case GREATER_OR_EQUAL:
+16535: 
+16535: 
+16535:       add_octagonal_constraint(n_var, n_var + 1, two_b, minus_denom);
+16535:       break;
+16535:     default:
+16535: 
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       break;
+16535:     }
+16535:   }
+16535:   else if (t == 1) {
+16535: 
+16535:     const Coefficient& w_coeff = expr.coefficient(Variable(w_id));
+16535:     const dimension_type n_w = 2*w_id;
+16535:     switch (relsym) {
+16535:     case EQUAL:
+16535:       if (w_coeff == denominator) {
+16535: 
+16535:         if (var_id < w_id) {
+16535:           add_octagonal_constraint(n_w, n_var, b, denominator);
+16535:           add_octagonal_constraint(n_w + 1, n_var + 1, b, minus_denom);
+16535:         }
+16535:         else {
+16535:           add_octagonal_constraint(n_var + 1, n_w + 1, b, denominator);
+16535:           add_octagonal_constraint(n_var, n_w, b, minus_denom);
+16535:         }
+16535:       }
+16535:       else {
+16535: 
+16535:         if (var_id < w_id) {
+16535:           add_octagonal_constraint(n_w + 1, n_var, b, denominator);
+16535:           add_octagonal_constraint(n_w, n_var + 1, b, minus_denom);
+16535:         }
+16535:         else {
+16535:           add_octagonal_constraint(n_var + 1, n_w, b, denominator);
+16535:           add_octagonal_constraint(n_var, n_w + 1, b, minus_denom);
+16535:         }
+16535:       }
+16535:       break;
+16535:     case LESS_OR_EQUAL:
+16535:       {
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
+16535:         div_round_up(d, b, denominator);
+16535: 
+16535: 
+16535:         if (w_coeff == denominator) {
+16535: 
+16535:           if (var_id < w_id) {
+16535:             add_octagonal_constraint(n_w, n_var, d);
+16535:           }
+16535:           else {
+16535:             add_octagonal_constraint(n_var + 1, n_w + 1, d);
+16535:           }
+16535:         }
+16535:         else if (w_coeff == minus_denom) {
+16535: 
+16535:           if (var_id < w_id) {
+16535:             add_octagonal_constraint(n_w + 1, n_var, d);
+16535:           }
+16535:           else {
+16535:             add_octagonal_constraint(n_var + 1, n_w, d);
+16535:           }
+16535:         }
+16535:         break;
+16535:       }
+16535: 
+16535:     case GREATER_OR_EQUAL:
+16535:       {
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
+16535:         div_round_up(d, b, minus_denom);
+16535: 
+16535: 
+16535:         if (w_coeff == denominator) {
+16535: 
+16535: 
+16535:           if (var_id < w_id) {
+16535:             add_octagonal_constraint(n_w + 1, n_var + 1, d);
+16535:           }
+16535:           else {
+16535:             add_octagonal_constraint(n_var, n_w, d);
+16535:           }
+16535:         }
+16535:         else if (w_coeff == minus_denom) {
+16535: 
+16535: 
+16535:           if (var_id < w_id) {
+16535:             add_octagonal_constraint(n_w, n_var + 1, d);
+16535:           }
+16535:           else {
+16535:             add_octagonal_constraint(n_var, n_w + 1, d);
+16535:           }
+16535:         }
+16535:         break;
+16535:       }
+16535: 
+16535:     default:
+16535: 
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       break;
+16535:     }
+16535:   }
+16535:   else {
+16535: 
+16535: 
+16535:     const bool is_sc = (denominator > 0);
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item();
+16535:     neg_assign(minus_b, b);
+16535:     const Coefficient& sc_b = is_sc ? b : minus_b;
+16535:     const Coefficient& minus_sc_b = is_sc ? minus_b : b;
+16535:     const Coefficient& sc_denom = is_sc ? denominator : minus_denom;
+16535:     const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator;
+16535: 
+16535: 
+16535: 
+16535:     Linear_Expression minus_expr;
+16535:     if (!is_sc) {
+16535:       minus_expr = -expr;
+16535:     }
+16535:     const Linear_Expression& sc_expr = is_sc ? expr : minus_expr;
+16535: 
+16535:     Parma_Polyhedra_Library::Dirty_Temp<N> holder_sum; N& sum = holder_sum.item();
+16535: 
+16535:     dimension_type pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
+16535: 
+16535:     dimension_type pinf_count = 0;
+16535: 
+16535:     switch (relsym) {
+16535:     case EQUAL:
+16535:       {
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_neg_sum; N& neg_sum = holder_neg_sum.item();
+16535: 
+16535:         dimension_type neg_pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
+16535: 
+16535:         dimension_type neg_pinf_count = 0;
+16535: 
+16535: 
+16535:         assign_r(sum, sc_b, ROUND_UP);
+16535:         assign_r(neg_sum, minus_sc_b, ROUND_UP);
+16535: 
+16535: 
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_i; N& coeff_i = holder_coeff_i.item();
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_half; N& half = holder_half.item();
+16535:         Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item();
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_minus_coeff_i; N& minus_coeff_i = holder_minus_coeff_i.item();
+16535: 
+16535: 
+16535:         for (Row_iterator m_iter = m_begin,
+16535:                m_iter_end = m_begin + (2 * w_id + 2);
+16535:              m_iter != m_iter_end; ) {
+16535:           const dimension_type n_i = m_iter.index();
+16535:           const dimension_type id = n_i/2;
+16535:           Row_reference m_i = *m_iter;
+16535:           ++m_iter;
+16535:           Row_reference m_ci = *m_iter;
+16535:           ++m_iter;
+16535:           const Coefficient& sc_i = sc_expr.coefficient(Variable(id));
+16535:           const int sign_i = sgn(sc_i);
+16535:           if (sign_i > 0) {
+16535:             assign_r(coeff_i, sc_i, ROUND_UP);
+16535: 
+16535:             if (pinf_count <= 1) {
+16535:               const N& double_approx_i = m_ci[n_i];
+16535:               if (!is_plus_infinity(double_approx_i)) {
+16535: 
+16535:                 div_2exp_assign_r(half, double_approx_i, 1, ROUND_UP);
+16535:                 add_mul_assign_r(sum, coeff_i, half, ROUND_UP);
+16535:               }
+16535:               else {
+16535:                 ++pinf_count;
+16535:                 pinf_index = id;
+16535:               }
+16535:             }
+16535: 
+16535:             if (neg_pinf_count <= 1) {
+16535:               const N& double_approx_minus_i = m_i[n_i + 1];
+16535:               if (!is_plus_infinity(double_approx_minus_i)) {
+16535: 
+16535:                 div_2exp_assign_r(half, double_approx_minus_i, 1, ROUND_UP);
+16535:                 add_mul_assign_r(neg_sum, coeff_i, half, ROUND_UP);
+16535:               }
+16535:               else {
+16535:                 ++neg_pinf_count;
+16535:                 neg_pinf_index = id;
+16535:               }
+16535:             }
+16535:           }
+16535:           else if (sign_i < 0) {
+16535:             neg_assign_r(minus_sc_i, sc_i, ROUND_NOT_NEEDED);
+16535:             assign_r(minus_coeff_i, minus_sc_i, ROUND_UP);
+16535: 
+16535:             if (pinf_count <= 1) {
+16535:               const N& double_approx_minus_i = m_i[n_i + 1];
+16535:               if (!is_plus_infinity(double_approx_minus_i)) {
+16535: 
+16535:                 div_2exp_assign_r(half, double_approx_minus_i, 1, ROUND_UP);
+16535:                 add_mul_assign_r(sum, minus_coeff_i, half, ROUND_UP);
+16535:               }
+16535:               else {
+16535:                 ++pinf_count;
+16535:                 pinf_index = id;
+16535:               }
+16535:             }
+16535: 
+16535:             if (neg_pinf_count <= 1) {
+16535:               const N& double_approx_i = m_ci[n_i];
+16535:               if (!is_plus_infinity(double_approx_i)) {
+16535: 
+16535:                 div_2exp_assign_r(half, double_approx_i, 1, ROUND_UP);
+16535:                 add_mul_assign_r(neg_sum, minus_coeff_i, half, ROUND_UP);
+16535:               }
+16535:               else {
+16535:                 ++neg_pinf_count;
+16535:                 neg_pinf_index = id;
+16535:               }
+16535:             }
+16535:           }
+16535:         }
+16535: 
+16535:         if (pinf_count > 1 && neg_pinf_count > 1) {
+16535:           ((void) 0);
+16535:           return;
+16535:         }
+16535: 
+16535: 
+16535:         reset_strongly_closed();
+16535: 
+16535: 
+16535:         if (pinf_count <= 1) {
+16535: 
+16535:           if (sc_denom != 1) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:             Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
+16535:             assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
+16535:             neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
+16535:             div_assign_r(sum, sum, down_sc_denom, ROUND_UP);
+16535:           }
+16535: 
+16535:           if (pinf_count == 0) {
+16535: 
+16535:             Parma_Polyhedra_Library::Dirty_Temp<N> holder_double_sum; N& double_sum = holder_double_sum.item();
+16535:             mul_2exp_assign_r(double_sum, sum, 1, ROUND_UP);
+16535:             matrix[n_var + 1][n_var] = double_sum;
+16535: 
+16535:             deduce_v_pm_u_bounds(var_id, w_id, sc_expr, sc_denom, sum);
+16535:           }
+16535:           else {
+16535: 
+16535:             if (pinf_index != var_id) {
+16535:               const Coefficient& ppi
+16535:                 = sc_expr.coefficient(Variable(pinf_index));
+16535:               if (ppi == sc_denom) {
+16535: 
+16535:                 if (var_id < pinf_index) {
+16535:                   matrix[2*pinf_index][n_var] = sum;
+16535:                 }
+16535:                 else {
+16535:                   matrix[n_var + 1][2*pinf_index + 1] = sum;
+16535:                 }
+16535:               }
+16535:               else {
+16535:                 if (ppi == minus_sc_denom) {
+16535: 
+16535:                   if (var_id < pinf_index) {
+16535:                     matrix[2*pinf_index + 1][n_var] = sum;
+16535:                   }
+16535:                   else {
+16535:                     matrix[n_var + 1][2*pinf_index] = sum;
+16535:                   }
+16535:                 }
+16535:               }
+16535:             }
+16535:           }
+16535:         }
+16535: 
+16535: 
+16535:         if (neg_pinf_count <= 1) {
+16535: 
+16535:           if (sc_denom != 1) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:             Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
+16535:             assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
+16535:             neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
+16535:             div_assign_r(neg_sum, neg_sum, down_sc_denom, ROUND_UP);
+16535:           }
+16535: 
+16535:           if (neg_pinf_count == 0) {
+16535: 
+16535:             Parma_Polyhedra_Library::Dirty_Temp<N> holder_double_neg_sum; N& double_neg_sum = holder_double_neg_sum.item();
+16535:             mul_2exp_assign_r(double_neg_sum, neg_sum, 1, ROUND_UP);
+16535:             matrix[n_var][n_var + 1] = double_neg_sum;
+16535: 
+16535:             deduce_minus_v_pm_u_bounds(var_id, w_id, sc_expr, sc_denom,
+16535:                                        neg_sum);
+16535:           }
+16535:           else {
+16535: 
+16535:             if (neg_pinf_index != var_id) {
+16535:               const Coefficient& npi
+16535:                 = sc_expr.coefficient(Variable(neg_pinf_index));
+16535:               if (npi == sc_denom) {
+16535: 
+16535: 
+16535:                 if (neg_pinf_index < var_id) {
+16535:                   matrix[n_var][2*neg_pinf_index] = neg_sum;
+16535:                 }
+16535:                 else {
+16535:                   matrix[2*neg_pinf_index + 1][n_var + 1] = neg_sum;
+16535:                 }
+16535:               }
+16535:               else {
+16535:                 if (npi == minus_sc_denom) {
+16535: 
+16535: 
+16535:                   if (neg_pinf_index < var_id) {
+16535:                     matrix[n_var][2*neg_pinf_index + 1] = neg_sum;
+16535:                   }
+16535:                   else {
+16535:                     matrix[2*neg_pinf_index][n_var + 1] = neg_sum;
+16535:                   }
+16535:                 }
+16535:               }
+16535:             }
+16535:           }
+16535:         }
+16535:         break;
+16535:       }
+16535: 
+16535:     case LESS_OR_EQUAL:
+16535:       {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:         assign_r(sum, sc_b, ROUND_UP);
+16535: 
+16535: 
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_i; N& coeff_i = holder_coeff_i.item();
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_approx_i; N& approx_i = holder_approx_i.item();
+16535:         Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item();
+16535: 
+16535: 
+16535:         for (row_iterator m_iter = m_begin,
+16535:                m_iter_end = m_begin + (2 * w_id + 2);
+16535:              m_iter != m_iter_end; ) {
+16535:           const dimension_type n_i = m_iter.index();
+16535:           const dimension_type id = n_i/2;
+16535:           row_reference m_i = *m_iter;
+16535:           ++m_iter;
+16535:           row_reference m_ci = *m_iter;
+16535:           ++m_iter;
+16535:           const Coefficient& sc_i = sc_expr.coefficient(Variable(id));
+16535:           const int sign_i = sgn(sc_i);
+16535:           if (sign_i == 0) {
+16535:             continue;
+16535:           }
+16535: 
+16535:           const N& double_approx_i = (sign_i > 0) ? m_ci[n_i] : m_i[n_i + 1];
+16535:           if (is_plus_infinity(double_approx_i)) {
+16535:             if (++pinf_count > 1) {
+16535:               break;
+16535:             }
+16535:             pinf_index = id;
+16535:             continue;
+16535:           }
+16535:           if (sign_i > 0) {
+16535:             assign_r(coeff_i, sc_i, ROUND_UP);
+16535:           }
+16535:           else {
+16535:             neg_assign(minus_sc_i, sc_i);
+16535:             assign_r(coeff_i, minus_sc_i, ROUND_UP);
+16535:           }
+16535:           div_2exp_assign_r(approx_i, double_approx_i, 1, ROUND_UP);
+16535:           add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP);
+16535:         }
+16535: 
+16535:         if (sc_denom != 1) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:           Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
+16535:           assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
+16535:           neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
+16535:           div_assign_r(sum, sum, down_sc_denom, ROUND_UP);
+16535:         }
+16535: 
+16535:         if (pinf_count == 0) {
+16535: 
+16535:           Parma_Polyhedra_Library::Dirty_Temp<N> holder_double_sum; N& double_sum = holder_double_sum.item();
+16535:           mul_2exp_assign_r(double_sum, sum, 1, ROUND_UP);
+16535:           add_octagonal_constraint(n_var + 1, n_var, double_sum);
+16535: 
+16535:           deduce_v_pm_u_bounds(var_id, w_id, sc_expr, sc_denom, sum);
+16535:         }
+16535:         else if (pinf_count == 1) {
+16535:           dimension_type pinf_ind = 2*pinf_index;
+16535:           if (expr.coefficient(Variable(pinf_index)) == denominator ) {
+16535: 
+16535:             if (var_id < pinf_index) {
+16535:               add_octagonal_constraint(pinf_ind, n_var, sum);
+16535:             }
+16535:             else {
+16535:               add_octagonal_constraint(n_var + 1, pinf_ind + 1, sum);
+16535:             }
+16535:           }
+16535:           else {
+16535:             if (expr.coefficient(Variable(pinf_index)) == minus_denom) {
+16535: 
+16535:               if (var_id < pinf_index) {
+16535:                 add_octagonal_constraint(pinf_ind + 1, n_var, sum);
+16535:               }
+16535:               else {
+16535:                 add_octagonal_constraint(n_var + 1, pinf_ind, sum);
+16535:               }
+16535:             }
+16535:           }
+16535:         }
+16535:         break;
+16535:       }
+16535: 
+16535:     case GREATER_OR_EQUAL:
+16535:       {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:         assign_r(sum, minus_sc_b, ROUND_UP);
+16535: 
+16535: 
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_i; N& coeff_i = holder_coeff_i.item();
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_approx_i; N& approx_i = holder_approx_i.item();
+16535:         Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item();
+16535:         for (row_iterator m_iter = m_begin,
+16535:                m_iter_end = m_begin + (2 * w_id + 2);
+16535:              m_iter != m_iter_end; ) {
+16535:           const dimension_type n_i = m_iter.index();
+16535:           const dimension_type id = n_i/2;
+16535:           row_reference m_i = *m_iter;
+16535:           ++m_iter;
+16535:           row_reference m_ci = *m_iter;
+16535:           ++m_iter;
+16535:           const Coefficient& sc_i = sc_expr.coefficient(Variable(id));
+16535:           const int sign_i = sgn(sc_i);
+16535:           if (sign_i == 0) {
+16535:             continue;
+16535:           }
+16535: 
+16535:           const N& double_approx_i = (sign_i > 0) ? m_i[n_i + 1] : m_ci[n_i];
+16535:           if (is_plus_infinity(double_approx_i)) {
+16535:             if (++pinf_count > 1) {
+16535:               break;
+16535:             }
+16535:             pinf_index = id;
+16535:             continue;
+16535:           }
+16535:           if (sign_i > 0) {
+16535:             assign_r(coeff_i, sc_i, ROUND_UP);
+16535:           }
+16535:           else {
+16535:             neg_assign(minus_sc_i, sc_i);
+16535:             assign_r(coeff_i, minus_sc_i, ROUND_UP);
+16535:           }
+16535:           div_2exp_assign_r(approx_i, double_approx_i, 1, ROUND_UP);
+16535:           add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP);
+16535:         }
+16535: 
+16535: 
+16535:         if (sc_denom != 1) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:           Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
+16535:           assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
+16535:           neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
+16535:           div_assign_r(sum, sum, down_sc_denom, ROUND_UP);
+16535:         }
+16535: 
+16535:         if (pinf_count == 0) {
+16535: 
+16535:           Parma_Polyhedra_Library::Dirty_Temp<N> holder_double_sum; N& double_sum = holder_double_sum.item();
+16535:           mul_2exp_assign_r(double_sum, sum, 1, ROUND_UP);
+16535:           add_octagonal_constraint(n_var, n_var + 1, double_sum);
+16535: 
+16535:           deduce_minus_v_pm_u_bounds(var_id, pinf_index, sc_expr, sc_denom,
+16535:                                      sum);
+16535:         }
+16535:         else if (pinf_count == 1) {
+16535:           dimension_type pinf_ind = 2*pinf_index;
+16535:           if (expr.coefficient(Variable(pinf_index)) == denominator) {
+16535: 
+16535: 
+16535:             if (pinf_index < var_id) {
+16535:               add_octagonal_constraint(n_var, pinf_ind, sum);
+16535:             }
+16535:             else {
+16535:               add_octagonal_constraint(pinf_ind + 1, n_var, sum);
+16535:             }
+16535:           }
+16535:           else {
+16535:             if (expr.coefficient(Variable(pinf_index)) == minus_denom) {
+16535: 
+16535: 
+16535:               if (pinf_index < var_id) {
+16535:                 add_octagonal_constraint(n_var, pinf_ind + 1, sum);
+16535:               }
+16535:               else {
+16535:                 add_octagonal_constraint(pinf_ind, n_var + 1, sum);
+16535:               }
+16535:             }
+16535:           }
+16535:         }
+16535:         break;
+16535:       }
+16535: 
+16535:     default:
+16535: 
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       break;
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::affine_image(const Variable var,
+16535:                                  const Linear_Expression& expr,
+16535:                                  Coefficient_traits::const_reference
+16535:                                  denominator) {
+16535: 
+16535:   if (denominator == 0) {
+16535:     throw_invalid_argument("affine_image(v, e, d)", "d == 0");
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type expr_space_dim = expr.space_dimension();
+16535:   if (space_dim < expr_space_dim) {
+16535:     throw_dimension_incompatible("affine_image(v, e, d)", "e", expr);
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type var_id = var.id();
+16535:   if (space_dim < var_id + 1) {
+16535:     throw_dimension_incompatible("affine_image(v, e, d)", var_id + 1);
+16535:   }
+16535: 
+16535:   strong_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   dimension_type t = 0;
+16535: 
+16535:   dimension_type w_id = expr.last_nonzero();
+16535: 
+16535:   if (w_id != 0) {
+16535:     ++t;
+16535:     if (!expr.all_zeroes(1, w_id)) {
+16535:       ++t;
+16535:     }
+16535:     --w_id;
+16535:   }
+16535: 
+16535:   typedef typename OR_Matrix<N>::row_iterator row_iterator;
+16535:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
+16535:   typedef typename OR_Matrix<N>::const_row_iterator Row_iterator;
+16535:   typedef typename OR_Matrix<N>::const_row_reference_type Row_reference;
+16535:   using std::swap;
+16535: 
+16535:   const dimension_type n_var = 2*var_id;
+16535:   const Coefficient& b = expr.inhomogeneous_term();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item();
+16535:   neg_assign_r(minus_denom, denominator, ROUND_NOT_NEEDED);
+16535: # 5179 "../../src/Octagonal_Shape_templates.hh"
+16535:   if (t == 0) {
+16535: 
+16535: 
+16535:     forget_all_octagonal_constraints(var_id);
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_two_b; Parma_Polyhedra_Library::Coefficient& two_b = holder_two_b.item();
+16535:     two_b = 2*b;
+16535: 
+16535:     add_octagonal_constraint(n_var + 1, n_var, two_b, denominator);
+16535:     add_octagonal_constraint(n_var, n_var + 1, two_b, minus_denom);
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535:   if (t == 1) {
+16535: 
+16535:     const Coefficient& w_coeff = expr.coefficient(Variable(w_id));
+16535:     if (w_coeff == denominator || w_coeff == minus_denom) {
+16535: 
+16535:       if (w_id == var_id) {
+16535: 
+16535:         const bool sign_symmetry = (w_coeff != denominator);
+16535:         if (!sign_symmetry && b == 0) {
+16535: 
+16535:           return;
+16535:         }
+16535: 
+16535: 
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
+16535:         div_round_up(d, b, denominator);
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_minus_d; N& minus_d = holder_minus_d.item();
+16535:         div_round_up(minus_d, b, minus_denom);
+16535:         if (sign_symmetry) {
+16535:           swap(d, minus_d);
+16535:         }
+16535:         const row_iterator m_begin = matrix.row_begin();
+16535:         const row_iterator m_end = matrix.row_end();
+16535:         row_iterator m_iter = m_begin + n_var;
+16535:         row_reference m_v = *m_iter;
+16535:         ++m_iter;
+16535:         row_reference m_cv = *m_iter;
+16535:         ++m_iter;
+16535: 
+16535:         for (dimension_type j = n_var; j-- > 0; ) {
+16535:           N& m_v_j = m_v[j];
+16535:           add_assign_r(m_v_j, m_v_j, minus_d, ROUND_UP);
+16535:           N& m_cv_j = m_cv[j];
+16535:           add_assign_r(m_cv_j, m_cv_j, d, ROUND_UP);
+16535:           if (sign_symmetry) {
+16535:             swap(m_v_j, m_cv_j);
+16535:           }
+16535:         }
+16535:         for ( ; m_iter != m_end; ++m_iter) {
+16535:           row_reference m_i = *m_iter;
+16535:           N& m_i_v = m_i[n_var];
+16535:           add_assign_r(m_i_v, m_i_v, d, ROUND_UP);
+16535:           N& m_i_cv = m_i[n_var + 1];
+16535:           add_assign_r(m_i_cv, m_i_cv, minus_d, ROUND_UP);
+16535:           if (sign_symmetry) {
+16535:             swap(m_i_v, m_i_cv);
+16535:           }
+16535:         }
+16535: 
+16535:         mul_2exp_assign_r(d, d, 1, ROUND_UP);
+16535:         N& m_cv_v = m_cv[n_var];
+16535:         add_assign_r(m_cv_v, m_cv_v, d, ROUND_UP);
+16535:         mul_2exp_assign_r(minus_d, minus_d, 1, ROUND_UP);
+16535:         N& m_v_cv = m_v[n_var + 1];
+16535:         add_assign_r(m_v_cv, m_v_cv, minus_d, ROUND_UP);
+16535:         if (sign_symmetry) {
+16535:           swap(m_cv_v, m_v_cv);
+16535:         }
+16535: 
+16535:       }
+16535:       else {
+16535: 
+16535: 
+16535: 
+16535:         forget_all_octagonal_constraints(var_id);
+16535:         const dimension_type n_w = 2*w_id;
+16535: 
+16535:         if (w_coeff == denominator) {
+16535:           if (var_id < w_id) {
+16535:             add_octagonal_constraint(n_w, n_var, b, denominator);
+16535:             add_octagonal_constraint(n_w + 1, n_var + 1, b, minus_denom);
+16535:           }
+16535:           else {
+16535:             add_octagonal_constraint(n_var + 1, n_w + 1, b, denominator);
+16535:             add_octagonal_constraint(n_var, n_w, b, minus_denom);
+16535:           }
+16535:         }
+16535:         else {
+16535: 
+16535:           if (var_id < w_id) {
+16535:             add_octagonal_constraint(n_w + 1, n_var, b, denominator);
+16535:             add_octagonal_constraint(n_w, n_var + 1, b, minus_denom);
+16535:           }
+16535:           else {
+16535:             add_octagonal_constraint(n_var + 1, n_w, b, denominator);
+16535:             add_octagonal_constraint(n_var, n_w + 1, b, minus_denom);
+16535:           }
+16535:         }
+16535:         incremental_strong_closure_assign(var);
+16535:       }
+16535:       ((void) 0);
+16535:       return;
+16535:     }
+16535:   }
+16535: # 5299 "../../src/Octagonal_Shape_templates.hh"
+16535:   const bool is_sc = (denominator > 0);
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item();
+16535:   neg_assign_r(minus_b, b, ROUND_NOT_NEEDED);
+16535: 
+16535:   const Coefficient& sc_b = is_sc ? b : minus_b;
+16535:   const Coefficient& minus_sc_b = is_sc ? minus_b : b;
+16535:   const Coefficient& sc_denom = is_sc ? denominator : minus_denom;
+16535:   const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator;
+16535: 
+16535: 
+16535: 
+16535:   Linear_Expression minus_expr;
+16535:   if (!is_sc) {
+16535:     minus_expr = -expr;
+16535:   }
+16535:   const Linear_Expression& sc_expr = is_sc ? expr : minus_expr;
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_pos_sum; N& pos_sum = holder_pos_sum.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_neg_sum; N& neg_sum = holder_neg_sum.item();
+16535: 
+16535:   dimension_type pos_pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
+16535:   dimension_type neg_pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
+16535: 
+16535:   dimension_type pos_pinf_count = 0;
+16535:   dimension_type neg_pinf_count = 0;
+16535: 
+16535: 
+16535:   assign_r(pos_sum, sc_b, ROUND_UP);
+16535:   assign_r(neg_sum, minus_sc_b, ROUND_UP);
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_i; N& coeff_i = holder_coeff_i.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_minus_coeff_i; N& minus_coeff_i = holder_minus_coeff_i.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_half; N& half = holder_half.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item();
+16535: 
+16535: 
+16535:   const row_iterator m_begin = matrix.row_begin();
+16535:   for (Row_iterator m_iter = m_begin, m_iter_end = m_begin + (2 * w_id + 2);
+16535:        m_iter != m_iter_end; ) {
+16535:     const dimension_type n_i = m_iter.index();
+16535:     const dimension_type id = n_i/2;
+16535:     Row_reference m_i = *m_iter;
+16535:     ++m_iter;
+16535:     Row_reference m_ci = *m_iter;
+16535:     ++m_iter;
+16535:     const Coefficient& sc_i = sc_expr.coefficient(Variable(id));
+16535:     const int sign_i = sgn(sc_i);
+16535:     if (sign_i > 0) {
+16535:       assign_r(coeff_i, sc_i, ROUND_UP);
+16535: 
+16535:       if (pos_pinf_count <= 1) {
+16535:         const N& double_up_approx_i = m_ci[n_i];
+16535:         if (!is_plus_infinity(double_up_approx_i)) {
+16535: 
+16535:           div_2exp_assign_r(half, double_up_approx_i, 1, ROUND_UP);
+16535:           add_mul_assign_r(pos_sum, coeff_i, half, ROUND_UP);
+16535:         }
+16535:         else {
+16535:           ++pos_pinf_count;
+16535:           pos_pinf_index = id;
+16535:         }
+16535:       }
+16535: 
+16535:       if (neg_pinf_count <= 1) {
+16535:         const N& double_up_approx_minus_i = m_i[n_i + 1];
+16535:         if (!is_plus_infinity(double_up_approx_minus_i)) {
+16535: 
+16535:           div_2exp_assign_r(half, double_up_approx_minus_i, 1, ROUND_UP);
+16535:           add_mul_assign_r(neg_sum, coeff_i, half, ROUND_UP);
+16535:         }
+16535:         else {
+16535:           ++neg_pinf_count;
+16535:           neg_pinf_index = id;
+16535:         }
+16535:       }
+16535:     }
+16535:     else if (sign_i < 0) {
+16535:       neg_assign_r(minus_sc_i, sc_i, ROUND_NOT_NEEDED);
+16535:       assign_r(minus_coeff_i, minus_sc_i, ROUND_UP);
+16535: 
+16535:       if (pos_pinf_count <= 1) {
+16535:         const N& double_up_approx_minus_i = m_i[n_i + 1];
+16535:         if (!is_plus_infinity(double_up_approx_minus_i)) {
+16535: 
+16535:           div_2exp_assign_r(half, double_up_approx_minus_i, 1, ROUND_UP);
+16535:           add_mul_assign_r(pos_sum, minus_coeff_i, half, ROUND_UP);
+16535:         }
+16535:         else {
+16535:           ++pos_pinf_count;
+16535:           pos_pinf_index = id;
+16535:         }
+16535:       }
+16535: 
+16535:       if (neg_pinf_count <= 1) {
+16535:         const N& double_up_approx_i = m_ci[n_i];
+16535:         if (!is_plus_infinity(double_up_approx_i)) {
+16535: 
+16535:           div_2exp_assign_r(half, double_up_approx_i, 1, ROUND_UP);
+16535:           add_mul_assign_r(neg_sum, minus_coeff_i, half, ROUND_UP);
+16535:         }
+16535:         else {
+16535:           ++neg_pinf_count;
+16535:           neg_pinf_index = id;
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   forget_all_octagonal_constraints(var_id);
+16535: 
+16535:   if (pos_pinf_count > 1 && neg_pinf_count > 1) {
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   reset_strongly_closed();
+16535: 
+16535: 
+16535:   if (pos_pinf_count <= 1) {
+16535: 
+16535:     if (sc_denom != 1) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
+16535:       assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
+16535:       neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
+16535:       div_assign_r(pos_sum, pos_sum, down_sc_denom, ROUND_UP);
+16535:     }
+16535: 
+16535:     if (pos_pinf_count == 0) {
+16535: 
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_double_pos_sum; N& double_pos_sum = holder_double_pos_sum.item();
+16535:       mul_2exp_assign_r(double_pos_sum, pos_sum, 1, ROUND_UP);
+16535:       matrix[n_var + 1][n_var] = double_pos_sum;
+16535: 
+16535:       deduce_v_pm_u_bounds(var_id, w_id, sc_expr, sc_denom, pos_sum);
+16535:     }
+16535:     else {
+16535: 
+16535:       if (pos_pinf_index != var_id) {
+16535:         const Coefficient& ppi = sc_expr.coefficient(Variable(pos_pinf_index));
+16535:         if (ppi == sc_denom) {
+16535: 
+16535:           if (var_id < pos_pinf_index) {
+16535:             matrix[2*pos_pinf_index][n_var] = pos_sum;
+16535:           }
+16535:           else {
+16535:             matrix[n_var + 1][2*pos_pinf_index + 1] = pos_sum;
+16535:           }
+16535:         }
+16535:         else {
+16535:           if (ppi == minus_sc_denom) {
+16535: 
+16535:             if (var_id < pos_pinf_index) {
+16535:               matrix[2*pos_pinf_index + 1][n_var] = pos_sum;
+16535:             }
+16535:             else {
+16535:               matrix[n_var + 1][2*pos_pinf_index] = pos_sum;
+16535:             }
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   if (neg_pinf_count <= 1) {
+16535: 
+16535:     if (sc_denom != 1) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
+16535:       assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
+16535:       neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
+16535:       div_assign_r(neg_sum, neg_sum, down_sc_denom, ROUND_UP);
+16535:     }
+16535: 
+16535:     if (neg_pinf_count == 0) {
+16535: 
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_double_neg_sum; N& double_neg_sum = holder_double_neg_sum.item();
+16535:       mul_2exp_assign_r(double_neg_sum, neg_sum, 1, ROUND_UP);
+16535:       matrix[n_var][n_var + 1] = double_neg_sum;
+16535: 
+16535:       deduce_minus_v_pm_u_bounds(var_id, w_id, sc_expr, sc_denom, neg_sum);
+16535:     }
+16535:     else {
+16535: 
+16535:       if (neg_pinf_index != var_id) {
+16535:         const Coefficient& npi = sc_expr.coefficient(Variable(neg_pinf_index));
+16535:         if (npi == sc_denom) {
+16535: 
+16535: 
+16535:           if (neg_pinf_index < var_id) {
+16535:             matrix[n_var][2*neg_pinf_index] = neg_sum;
+16535:           }
+16535:           else {
+16535:             matrix[2*neg_pinf_index + 1][n_var + 1] = neg_sum;
+16535:           }
+16535:         }
+16535:         else {
+16535:           if (npi == minus_sc_denom) {
+16535: 
+16535: 
+16535:             if (neg_pinf_index < var_id) {
+16535:               matrix[n_var][2*neg_pinf_index + 1] = neg_sum;
+16535:             }
+16535:             else {
+16535:               matrix[2*neg_pinf_index][n_var + 1] = neg_sum;
+16535:             }
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   incremental_strong_closure_assign(var);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Interval_Info>
+16535: void
+16535: Octagonal_Shape<T>::affine_form_image(const Variable var,
+16535:                     const Linear_Form< Interval<T, Interval_Info> >& lf) {
+16535: 
+16535:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_5533 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<T>::is_exact)>) }
+16535: 
+16535:                                        ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type lf_space_dim = lf.space_dimension();
+16535:   if (space_dim < lf_space_dim) {
+16535:     throw_dimension_incompatible("affine_form_image(v, l)", "l", lf);
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type var_id = var.id();
+16535:   if (space_dim < var_id + 1) {
+16535:     throw_dimension_incompatible("affine_form_image(v, l)", var.id() + 1);
+16535:   }
+16535: 
+16535:   strong_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   dimension_type t = 0;
+16535: 
+16535:   dimension_type w_id = 0;
+16535: 
+16535: 
+16535:   for (dimension_type i = lf_space_dim; i-- > 0; ) {
+16535:     if (lf.coefficient(Variable(i)) != 0) {
+16535:       if (t++ == 1) {
+16535:         break;
+16535:       }
+16535:       else {
+16535:         w_id = i;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   typedef typename OR_Matrix<N>::row_iterator row_iterator;
+16535:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
+16535:   typedef Interval<T, Interval_Info> FP_Interval_Type;
+16535:   using std::swap;
+16535: 
+16535:   const dimension_type n_var = 2*var_id;
+16535:   const FP_Interval_Type& b = lf.inhomogeneous_term();
+16535: # 5588 "../../src/Octagonal_Shape_templates.hh"
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_b_ub; N& b_ub = holder_b_ub.item();
+16535:   assign_r(b_ub, b.upper(), ROUND_NOT_NEEDED);
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_b_mlb; N& b_mlb = holder_b_mlb.item();
+16535:   neg_assign_r(b_mlb, b.lower(), ROUND_NOT_NEEDED);
+16535: 
+16535:   if (t == 0) {
+16535: 
+16535:     forget_all_octagonal_constraints(var_id);
+16535:     mul_2exp_assign_r(b_mlb, b_mlb, 1, ROUND_UP);
+16535:     mul_2exp_assign_r(b_ub, b_ub, 1, ROUND_UP);
+16535: 
+16535:     add_octagonal_constraint(n_var + 1, n_var, b_ub);
+16535:     add_octagonal_constraint(n_var, n_var + 1, b_mlb);
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   bool is_b_zero = (b_mlb == 0 && b_ub == 0);
+16535: 
+16535:   if (t == 1) {
+16535: 
+16535:     const FP_Interval_Type& w_coeff = lf.coefficient(Variable(w_id));
+16535: 
+16535:     bool is_w_coeff_one = (w_coeff == 1);
+16535: 
+16535:     bool is_w_coeff_minus_one = (w_coeff == -1);
+16535:     if (is_w_coeff_one || is_w_coeff_minus_one) {
+16535: 
+16535:       if (w_id == var_id) {
+16535: 
+16535:         if (is_w_coeff_one && is_b_zero) {
+16535: 
+16535:           return;
+16535:         }
+16535: 
+16535: 
+16535:         if (is_w_coeff_minus_one) {
+16535:           swap(b_ub, b_mlb);
+16535:         }
+16535:         const row_iterator m_begin = matrix.row_begin();
+16535:         const row_iterator m_end = matrix.row_end();
+16535:         row_iterator m_iter = m_begin + n_var;
+16535:         row_reference m_v = *m_iter;
+16535:         ++m_iter;
+16535:         row_reference m_cv = *m_iter;
+16535:         ++m_iter;
+16535: 
+16535:         for (dimension_type j = n_var; j-- > 0; ) {
+16535:           N& m_v_j = m_v[j];
+16535:           add_assign_r(m_v_j, m_v_j, b_mlb, ROUND_UP);
+16535:           N& m_cv_j = m_cv[j];
+16535:           add_assign_r(m_cv_j, m_cv_j, b_ub, ROUND_UP);
+16535:           if (is_w_coeff_minus_one) {
+16535:             swap(m_v_j, m_cv_j);
+16535:           }
+16535:         }
+16535:         for ( ; m_iter != m_end; ++m_iter) {
+16535:           row_reference m_i = *m_iter;
+16535:           N& m_i_v = m_i[n_var];
+16535:           add_assign_r(m_i_v, m_i_v, b_ub, ROUND_UP);
+16535:           N& m_i_cv = m_i[n_var + 1];
+16535:           add_assign_r(m_i_cv, m_i_cv, b_mlb, ROUND_UP);
+16535:           if (is_w_coeff_minus_one) {
+16535:             swap(m_i_v, m_i_cv);
+16535:           }
+16535:         }
+16535: 
+16535:         mul_2exp_assign_r(b_ub, b_ub, 1, ROUND_UP);
+16535:         N& m_cv_v = m_cv[n_var];
+16535:         add_assign_r(m_cv_v, m_cv_v, b_ub, ROUND_UP);
+16535:         mul_2exp_assign_r(b_mlb, b_mlb, 1, ROUND_UP);
+16535:         N& m_v_cv = m_v[n_var + 1];
+16535:         add_assign_r(m_v_cv, m_v_cv, b_mlb, ROUND_UP);
+16535:         if (is_w_coeff_minus_one) {
+16535:           swap(m_cv_v, m_v_cv);
+16535:         }
+16535: 
+16535:       }
+16535:       else {
+16535: 
+16535: 
+16535: 
+16535:         forget_all_octagonal_constraints(var_id);
+16535:         const dimension_type n_w = 2*w_id;
+16535:         if (is_w_coeff_one) {
+16535: 
+16535: 
+16535:           if (var_id < w_id) {
+16535:             add_octagonal_constraint(n_w, n_var, b_ub);
+16535:             add_octagonal_constraint(n_w + 1, n_var + 1, b_mlb);
+16535:           }
+16535:           else {
+16535:             add_octagonal_constraint(n_var + 1, n_w + 1, b_ub);
+16535:             add_octagonal_constraint(n_var, n_w, b_mlb);
+16535:           }
+16535:         }
+16535:         else {
+16535: 
+16535: 
+16535:           if (var_id < w_id) {
+16535:             add_octagonal_constraint(n_w + 1, n_var, b_ub);
+16535:             add_octagonal_constraint(n_w, n_var + 1, b_mlb);
+16535:           }
+16535:           else {
+16535:             add_octagonal_constraint(n_var + 1, n_w, b_ub);
+16535:             add_octagonal_constraint(n_var, n_w + 1, b_mlb);
+16535:           }
+16535:         }
+16535:         incremental_strong_closure_assign(var);
+16535:       }
+16535:       ((void) 0);
+16535:       return;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   reset_strongly_closed();
+16535: 
+16535:   Linear_Form<FP_Interval_Type> minus_lf(lf);
+16535:   minus_lf.negate();
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_upper_bound; N& upper_bound = holder_upper_bound.item();
+16535: 
+16535:   row_iterator m_iter = matrix.row_begin();
+16535:   m_iter += n_var;
+16535:   row_reference var_ite = *m_iter;
+16535:   ++m_iter;
+16535:   row_reference var_cv_ite = *m_iter;
+16535:   ++m_iter;
+16535:   row_iterator m_end = matrix.row_end();
+16535: 
+16535: 
+16535:   for (dimension_type curr_var = var_id,
+16535:          n_curr_var = n_var - 2; curr_var-- > 0; ) {
+16535:     Variable current(curr_var);
+16535:     linear_form_upper_bound(lf + current, upper_bound);
+16535:     assign_r(var_cv_ite[n_curr_var], upper_bound, ROUND_NOT_NEEDED);
+16535:     linear_form_upper_bound(lf - current, upper_bound);
+16535:     assign_r(var_cv_ite[n_curr_var + 1], upper_bound, ROUND_NOT_NEEDED);
+16535:     linear_form_upper_bound(minus_lf + current, upper_bound);
+16535:     assign_r(var_ite[n_curr_var], upper_bound, ROUND_NOT_NEEDED);
+16535:     linear_form_upper_bound(minus_lf - current, upper_bound);
+16535:     assign_r(var_ite[n_curr_var + 1], upper_bound, ROUND_NOT_NEEDED);
+16535:     n_curr_var -= 2;
+16535:   }
+16535:   for (dimension_type curr_var = var_id + 1; m_iter != m_end; ++m_iter) {
+16535:     row_reference m_v_ite = *m_iter;
+16535:     ++m_iter;
+16535:     row_reference m_cv_ite = *m_iter;
+16535:     Variable current(curr_var);
+16535:     linear_form_upper_bound(lf + current, upper_bound);
+16535:     assign_r(m_cv_ite[n_var], upper_bound, ROUND_NOT_NEEDED);
+16535:     linear_form_upper_bound(lf - current, upper_bound);
+16535:     assign_r(m_v_ite[n_var], upper_bound, ROUND_NOT_NEEDED);
+16535:     linear_form_upper_bound(minus_lf + current, upper_bound);
+16535:     assign_r(m_cv_ite[n_var + 1], upper_bound, ROUND_NOT_NEEDED);
+16535:     linear_form_upper_bound(minus_lf - current, upper_bound);
+16535:     assign_r(m_v_ite[n_var + 1], upper_bound, ROUND_NOT_NEEDED);
+16535:     ++curr_var;
+16535:   }
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_lf_ub; N& lf_ub = holder_lf_ub.item();
+16535:   linear_form_upper_bound(lf, lf_ub);
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_minus_lf_ub; N& minus_lf_ub = holder_minus_lf_ub.item();
+16535:   linear_form_upper_bound(minus_lf, minus_lf_ub);
+16535:   mul_2exp_assign_r(lf_ub, lf_ub, 1, ROUND_UP);
+16535:   assign_r(matrix[n_var + 1][n_var], lf_ub, ROUND_NOT_NEEDED);
+16535:   mul_2exp_assign_r(minus_lf_ub, minus_lf_ub, 1, ROUND_UP);
+16535:   assign_r(matrix[n_var][n_var + 1], minus_lf_ub, ROUND_NOT_NEEDED);
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Interval_Info>
+16535: void
+16535: Octagonal_Shape<T>::
+16535: linear_form_upper_bound(const Linear_Form< Interval<T, Interval_Info> >& lf,
+16535:                         N& result) const {
+16535: 
+16535: 
+16535:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_5779 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<T>::is_exact)>) }
+16535: 
+16535:                                                      ;
+16535: 
+16535:   const dimension_type lf_space_dimension = lf.space_dimension();
+16535:   ((void) 0);
+16535: 
+16535:   typedef Interval<T, Interval_Info> FP_Interval_Type;
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_curr_lb; N& curr_lb = holder_curr_lb.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_curr_ub; N& curr_ub = holder_curr_ub.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_curr_var_ub; N& curr_var_ub = holder_curr_var_ub.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_curr_minus_var_ub; N& curr_minus_var_ub = holder_curr_minus_var_ub.item();
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_first_comparison_term; N& first_comparison_term = holder_first_comparison_term.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_second_comparison_term; N& second_comparison_term = holder_second_comparison_term.item();
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_negator; N& negator = holder_negator.item();
+16535: 
+16535:   assign_r(result, lf.inhomogeneous_term().upper(), ROUND_NOT_NEEDED);
+16535: 
+16535:   for (dimension_type curr_var = 0, n_var = 0; curr_var < lf_space_dimension;
+16535:        ++curr_var) {
+16535:     const FP_Interval_Type& curr_coefficient =
+16535:                             lf.coefficient(Variable(curr_var));
+16535:     assign_r(curr_lb, curr_coefficient.lower(), ROUND_NOT_NEEDED);
+16535:     assign_r(curr_ub, curr_coefficient.upper(), ROUND_NOT_NEEDED);
+16535:     if (curr_lb != 0 || curr_ub != 0) {
+16535:       assign_r(curr_var_ub, matrix[n_var + 1][n_var], ROUND_NOT_NEEDED);
+16535:       div_2exp_assign_r(curr_var_ub, curr_var_ub, 1, ROUND_UP);
+16535:       neg_assign_r(curr_minus_var_ub, matrix[n_var][n_var + 1],
+16535:                    ROUND_NOT_NEEDED);
+16535:       div_2exp_assign_r(curr_minus_var_ub, curr_minus_var_ub, 1, ROUND_DOWN);
+16535: 
+16535:       if (curr_lb == 1 && curr_ub == 1) {
+16535:         add_assign_r(result, result, std::max(curr_var_ub, curr_minus_var_ub),
+16535:                      ROUND_UP);
+16535:       }
+16535:       else if (curr_lb == -1 && curr_ub == -1) {
+16535:         neg_assign_r(negator, std::min(curr_var_ub, curr_minus_var_ub),
+16535:                      ROUND_NOT_NEEDED);
+16535:         add_assign_r(result, result, negator, ROUND_UP);
+16535:       }
+16535:       else {
+16535: 
+16535:         assign_r(first_comparison_term, 0, ROUND_NOT_NEEDED);
+16535:         assign_r(second_comparison_term, 0, ROUND_NOT_NEEDED);
+16535:         add_mul_assign_r(first_comparison_term, curr_var_ub, curr_ub,
+16535:                          ROUND_UP);
+16535:         add_mul_assign_r(second_comparison_term, curr_var_ub, curr_lb,
+16535:                          ROUND_UP);
+16535:         assign_r(first_comparison_term, std::max(first_comparison_term,
+16535:                                                  second_comparison_term),
+16535:                  ROUND_NOT_NEEDED);
+16535:         assign_r(second_comparison_term, 0, ROUND_NOT_NEEDED);
+16535:         add_mul_assign_r(second_comparison_term, curr_minus_var_ub, curr_ub,
+16535:                          ROUND_UP);
+16535:         assign_r(first_comparison_term, std::max(first_comparison_term,
+16535:                                                  second_comparison_term),
+16535:                  ROUND_NOT_NEEDED);
+16535:         assign_r(second_comparison_term, 0, ROUND_NOT_NEEDED);
+16535:         add_mul_assign_r(second_comparison_term, curr_minus_var_ub, curr_lb,
+16535:                          ROUND_UP);
+16535:         assign_r(first_comparison_term, std::max(first_comparison_term,
+16535:                                                  second_comparison_term),
+16535:                  ROUND_NOT_NEEDED);
+16535: 
+16535:         add_assign_r(result, result, first_comparison_term, ROUND_UP);
+16535:       }
+16535:     }
+16535: 
+16535:     n_var += 2;
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::
+16535: interval_coefficient_upper_bound(const N& var_ub, const N& minus_var_ub,
+16535:                                  const N& int_ub, const N& int_lb,
+16535:                                  N& result) {
+16535: 
+16535: 
+16535:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_5862 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<T>::is_exact)>) }
+16535: 
+16535:                                                      ;
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_second_comparison_term; N& second_comparison_term = holder_second_comparison_term.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_third_comparison_term; N& third_comparison_term = holder_third_comparison_term.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_fourth_comparison_term; N& fourth_comparison_term = holder_fourth_comparison_term.item();
+16535: 
+16535:   assign_r(result, 0, ROUND_NOT_NEEDED);
+16535:   assign_r(second_comparison_term, 0, ROUND_NOT_NEEDED);
+16535:   assign_r(third_comparison_term, 0, ROUND_NOT_NEEDED);
+16535:   assign_r(fourth_comparison_term, 0, ROUND_NOT_NEEDED);
+16535: 
+16535:   add_mul_assign_r(result, var_ub, int_ub, ROUND_UP);
+16535:   add_mul_assign_r(second_comparison_term, minus_var_ub, int_ub, ROUND_UP);
+16535:   add_mul_assign_r(third_comparison_term, var_ub, int_lb, ROUND_UP);
+16535:   add_mul_assign_r(fourth_comparison_term, minus_var_ub, int_lb, ROUND_UP);
+16535: 
+16535:   assign_r(result, std::max(result, second_comparison_term), ROUND_NOT_NEEDED);
+16535:   assign_r(result, std::max(result, third_comparison_term), ROUND_NOT_NEEDED);
+16535:   assign_r(result, std::max(result, fourth_comparison_term), ROUND_NOT_NEEDED);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::affine_preimage(const Variable var,
+16535:                                     const Linear_Expression& expr,
+16535:                                     Coefficient_traits::const_reference
+16535:                                     denominator) {
+16535: 
+16535: 
+16535:   if (denominator == 0) {
+16535:     throw_invalid_argument("affine_preimage(v, e, d)", "d == 0");
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type expr_space_dim = expr.space_dimension();
+16535:   if (space_dim < expr_space_dim) {
+16535:     throw_dimension_incompatible("affine_preimage(v, e, d)", "e", expr);
+16535:   }
+16535: 
+16535: 
+16535:   dimension_type var_id = var.id();
+16535:   if (space_dim < var_id + 1) {
+16535:     throw_dimension_incompatible("affine_preimage(v, e, d)", var_id + 1);
+16535:   }
+16535: 
+16535:   strong_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   const Coefficient& b = expr.inhomogeneous_term();
+16535: 
+16535: 
+16535: 
+16535:   dimension_type t = 0;
+16535: 
+16535: 
+16535:   dimension_type w_id = expr.last_nonzero();
+16535: 
+16535:   if (w_id != 0) {
+16535:     ++t;
+16535:     if (!expr.all_zeroes(1, w_id)) {
+16535:       ++t;
+16535:     }
+16535:     --w_id;
+16535:   }
+16535: # 5942 "../../src/Octagonal_Shape_templates.hh"
+16535:   if (t == 0) {
+16535: 
+16535:     forget_all_octagonal_constraints(var_id);
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535:   if (t == 1) {
+16535: 
+16535:     const Coefficient& w_coeff = expr.coefficient(Variable(w_id));
+16535:     if (w_coeff == denominator || w_coeff == -denominator) {
+16535: 
+16535:       if (w_id == var_id) {
+16535: 
+16535:         affine_image(var, denominator*var - b, w_coeff);
+16535:       }
+16535:       else {
+16535: 
+16535: 
+16535:         forget_all_octagonal_constraints(var_id);
+16535:         ((void) 0);
+16535:       }
+16535:       return;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const Coefficient& coeff_v = expr.coefficient(var);
+16535:   if (coeff_v != 0) {
+16535:     if (coeff_v > 0) {
+16535: 
+16535:       Linear_Expression inverse = ((coeff_v + denominator)*var);
+16535:       inverse -= expr;
+16535:       affine_image(var, inverse, coeff_v);
+16535:     }
+16535:     else {
+16535: 
+16535:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_coeff_v; Parma_Polyhedra_Library::Coefficient& minus_coeff_v = holder_minus_coeff_v.item();
+16535:       neg_assign(minus_coeff_v, coeff_v);
+16535:       Linear_Expression inverse = ((minus_coeff_v - denominator)*var);
+16535:       inverse += expr;
+16535:       affine_image(var, inverse, minus_coeff_v);
+16535:     }
+16535:   }
+16535:   else {
+16535: 
+16535:     forget_all_octagonal_constraints(var_id);
+16535:     ((void) 0);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>
+16535: ::generalized_affine_image(const Variable var,
+16535:                            const Relation_Symbol relsym,
+16535:                            const Linear_Expression& expr ,
+16535:                            Coefficient_traits::const_reference denominator) {
+16535: 
+16535:   if (denominator == 0) {
+16535:     throw_invalid_argument("generalized_affine_image(v, r, e, d)", "d == 0");
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type expr_space_dim = expr.space_dimension();
+16535:   if (space_dim < expr_space_dim) {
+16535:     throw_dimension_incompatible("generalized_affine_image(v, r, e, d)", "e",
+16535:                                  expr);
+16535:   }
+16535: 
+16535: 
+16535:   dimension_type var_id = var.id();
+16535:   if (space_dim < var_id + 1) {
+16535:     throw_dimension_incompatible("generalized_affine_image(v, r, e, d)",
+16535:                                  var_id + 1);
+16535:   }
+16535: 
+16535: 
+16535:   if (relsym == LESS_THAN || relsym == GREATER_THAN) {
+16535:     throw_invalid_argument("generalized_affine_image(v, r, e, d)",
+16535:                            "r is a strict relation symbol");
+16535:   }
+16535: 
+16535:   if (relsym == NOT_EQUAL) {
+16535:     throw_invalid_argument("generalized_affine_image(v, r, e, d)",
+16535:                            "r is the disequality relation symbol");
+16535:   }
+16535: 
+16535:   if (relsym == EQUAL) {
+16535: 
+16535: 
+16535:     affine_image(var, expr, denominator);
+16535:     return;
+16535:   }
+16535: 
+16535:   strong_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   dimension_type t = 0;
+16535: 
+16535:   dimension_type w_id = expr.last_nonzero();
+16535: 
+16535:   if (w_id != 0) {
+16535:     ++t;
+16535:     if (!expr.all_zeroes(1, w_id)) {
+16535:       ++t;
+16535:     }
+16535:     --w_id;
+16535:   }
+16535: 
+16535:   typedef typename OR_Matrix<N>::row_iterator row_iterator;
+16535:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
+16535:   typedef typename OR_Matrix<N>::const_row_iterator Row_iterator;
+16535:   typedef typename OR_Matrix<N>::const_row_reference_type Row_reference;
+16535: 
+16535:   const row_iterator m_begin = matrix.row_begin();
+16535:   const row_iterator m_end = matrix.row_end();
+16535:   const dimension_type n_var = 2*var_id;
+16535:   const Coefficient& b = expr.inhomogeneous_term();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item();
+16535:   neg_assign_r(minus_denom, denominator, ROUND_NOT_NEEDED);
+16535: # 6082 "../../src/Octagonal_Shape_templates.hh"
+16535:   if (t == 0) {
+16535: 
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_two_b; Parma_Polyhedra_Library::Coefficient& two_b = holder_two_b.item();
+16535:     two_b = 2*b;
+16535: 
+16535:     forget_all_octagonal_constraints(var_id);
+16535: 
+16535:     reset_strongly_closed();
+16535:     switch (relsym) {
+16535:     case LESS_OR_EQUAL:
+16535: 
+16535:       add_octagonal_constraint(n_var + 1, n_var, two_b, denominator);
+16535:       break;
+16535:     case GREATER_OR_EQUAL:
+16535: 
+16535: 
+16535:       add_octagonal_constraint(n_var, n_var + 1, two_b, minus_denom);
+16535:       break;
+16535:     default:
+16535: 
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       break;
+16535:     }
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535:   if (t == 1) {
+16535: 
+16535:     const Coefficient& w_coeff = expr.coefficient(Variable(w_id));
+16535:     if (w_coeff == denominator || w_coeff == minus_denom) {
+16535: 
+16535:       switch (relsym) {
+16535:       case LESS_OR_EQUAL:
+16535:         {
+16535:           Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
+16535:           div_round_up(d, b, denominator);
+16535:           if (w_id == var_id) {
+16535: 
+16535: 
+16535:             reset_strongly_closed();
+16535:             if (w_coeff == denominator) {
+16535: 
+16535: 
+16535: 
+16535:               row_iterator m_iter = m_begin + n_var;
+16535:               row_reference m_v = *m_iter;
+16535:               N& m_v_cv = m_v[n_var + 1];
+16535:               ++m_iter;
+16535:               row_reference m_cv = *m_iter;
+16535:               N& m_cv_v = m_cv[n_var];
+16535:               ++m_iter;
+16535: 
+16535:               for ( ; m_iter != m_end; ++m_iter) {
+16535:                 row_reference m_i = *m_iter;
+16535:                 N& m_i_v = m_i[n_var];
+16535:                 add_assign_r(m_i_v, m_i_v, d, ROUND_UP);
+16535:                 assign_r(m_i[n_var + 1], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:               }
+16535:               for (dimension_type k = n_var; k-- > 0; ) {
+16535:                 assign_r(m_v[k], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:                 add_assign_r(m_cv[k], m_cv[k], d, ROUND_UP);
+16535:               }
+16535:               mul_2exp_assign_r(d, d, 1, ROUND_UP);
+16535:               add_assign_r(m_cv_v, m_cv_v, d, ROUND_UP);
+16535:               assign_r(m_v_cv, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:             }
+16535:             else {
+16535: 
+16535: 
+16535:               N& m_v_cv = matrix[n_var][n_var + 1];
+16535:               mul_2exp_assign_r(d, d, 1, ROUND_UP);
+16535:               add_assign_r(matrix[n_var + 1][n_var], m_v_cv, d, ROUND_UP);
+16535:               assign_r(m_v_cv, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:               forget_binary_octagonal_constraints(var_id);
+16535:             }
+16535:           }
+16535:           else {
+16535: 
+16535: 
+16535: 
+16535:             forget_all_octagonal_constraints(var_id);
+16535:             const dimension_type n_w = 2*w_id;
+16535:             if (w_coeff == denominator) {
+16535: 
+16535:               if (var_id < w_id) {
+16535:                 add_octagonal_constraint(n_w, n_var, b, denominator);
+16535:               }
+16535:               else {
+16535:                 add_octagonal_constraint(n_var + 1, n_w + 1, b, denominator);
+16535:               }
+16535:             }
+16535:             else {
+16535: 
+16535:               if (var_id < w_id) {
+16535:                 add_octagonal_constraint(n_w + 1, n_var, b, denominator);
+16535:               }
+16535:               else {
+16535:                 add_octagonal_constraint(n_var + 1, n_w, b, denominator);
+16535:               }
+16535:             }
+16535:           }
+16535:           break;
+16535:         }
+16535: 
+16535:       case GREATER_OR_EQUAL:
+16535:         {
+16535:           Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
+16535:           div_round_up(d, b, minus_denom);
+16535:           if (w_id == var_id) {
+16535: 
+16535: 
+16535:             reset_strongly_closed();
+16535:             if (w_coeff == denominator) {
+16535: 
+16535: 
+16535: 
+16535:               row_iterator m_iter = m_begin + n_var;
+16535:               row_reference m_v = *m_iter;
+16535:               N& m_v_cv = m_v[n_var + 1];
+16535:               ++m_iter;
+16535:               row_reference m_cv = *m_iter;
+16535:               N& m_cv_v = m_cv[n_var];
+16535:               ++m_iter;
+16535: 
+16535:               for ( ; m_iter != m_end; ++m_iter) {
+16535:                 row_reference m_i = *m_iter;
+16535:                 assign_r(m_i[n_var], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:                 add_assign_r(m_i[n_var + 1], m_i[n_var + 1], d, ROUND_UP);
+16535:               }
+16535:               for (dimension_type k = n_var; k-- > 0; ) {
+16535:                 add_assign_r(m_v[k], m_v[k], d, ROUND_UP);
+16535:                 assign_r(m_cv[k], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:               }
+16535:               mul_2exp_assign_r(d, d, 1, ROUND_UP);
+16535:               add_assign_r(m_v_cv, m_v_cv, d, ROUND_UP);
+16535:               assign_r(m_cv_v, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:             }
+16535:             else {
+16535: 
+16535: 
+16535:               N& m_cv_v = matrix[n_var + 1][n_var];
+16535:               mul_2exp_assign_r(d, d, 1, ROUND_UP);
+16535:               add_assign_r(matrix[n_var][n_var + 1], m_cv_v, d, ROUND_UP);
+16535:               assign_r(m_cv_v, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:               forget_binary_octagonal_constraints(var_id);
+16535:             }
+16535:           }
+16535:           else {
+16535: 
+16535: 
+16535: 
+16535:             forget_all_octagonal_constraints(var_id);
+16535:             const dimension_type n_w = 2*w_id;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:             if (w_coeff == denominator) {
+16535: 
+16535: 
+16535:               if (var_id < w_id) {
+16535:                 add_octagonal_constraint(n_w + 1, n_var + 1, b, minus_denom);
+16535:               }
+16535:               else {
+16535:                 add_octagonal_constraint(n_var, n_w, b, minus_denom);
+16535:               }
+16535:             }
+16535:             else {
+16535: 
+16535: 
+16535:               if (var_id < w_id) {
+16535:                 add_octagonal_constraint(n_w, n_var + 1, b, minus_denom);
+16535:               }
+16535:               else {
+16535:                 add_octagonal_constraint(n_var, n_w + 1, b, minus_denom);
+16535:               }
+16535:             }
+16535:           }
+16535:           break;
+16535:         }
+16535: 
+16535:       default:
+16535: 
+16535:         Parma_Polyhedra_Library::ppl_unreachable();
+16535:         break;
+16535:       }
+16535:       ((void) 0);
+16535:       return;
+16535:     }
+16535:   }
+16535: # 6281 "../../src/Octagonal_Shape_templates.hh"
+16535:   const bool is_sc = (denominator > 0);
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item();
+16535:   neg_assign(minus_b, b);
+16535:   const Coefficient& sc_b = is_sc ? b : minus_b;
+16535:   const Coefficient& minus_sc_b = is_sc ? minus_b : b;
+16535:   const Coefficient& sc_denom = is_sc ? denominator : minus_denom;
+16535:   const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator;
+16535: 
+16535: 
+16535: 
+16535:   Linear_Expression minus_expr;
+16535:   if (!is_sc) {
+16535:     minus_expr = -expr;
+16535:   }
+16535:   const Linear_Expression& sc_expr = is_sc ? expr : minus_expr;
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_sum; N& sum = holder_sum.item();
+16535: 
+16535:   dimension_type pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
+16535: 
+16535:   dimension_type pinf_count = 0;
+16535: 
+16535:   switch (relsym) {
+16535:   case LESS_OR_EQUAL:
+16535:     {
+16535: 
+16535: 
+16535: 
+16535:       assign_r(sum, sc_b, ROUND_UP);
+16535: 
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_i; N& coeff_i = holder_coeff_i.item();
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_approx_i; N& approx_i = holder_approx_i.item();
+16535:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item();
+16535: 
+16535: 
+16535:       for (Row_iterator m_iter = m_begin, m_iter_end = m_begin + (2 * w_id + 2);
+16535:            m_iter != m_iter_end; ) {
+16535:         const dimension_type n_i = m_iter.index();
+16535:         const dimension_type id = n_i/2;
+16535:         Row_reference m_i = *m_iter;
+16535:         ++m_iter;
+16535:         Row_reference m_ci = *m_iter;
+16535:         ++m_iter;
+16535:         const Coefficient& sc_i = sc_expr.coefficient(Variable(id));
+16535:         const int sign_i = sgn(sc_i);
+16535:         if (sign_i == 0) {
+16535:           continue;
+16535:         }
+16535: 
+16535:         const N& double_approx_i = (sign_i > 0) ? m_ci[n_i] : m_i[n_i + 1];
+16535:         if (is_plus_infinity(double_approx_i)) {
+16535:           if (++pinf_count > 1) {
+16535:             break;
+16535:           }
+16535:           pinf_index = id;
+16535:           continue;
+16535:         }
+16535:         if (sign_i > 0) {
+16535:           assign_r(coeff_i, sc_i, ROUND_UP);
+16535:         }
+16535:         else {
+16535:           neg_assign(minus_sc_i, sc_i);
+16535:           assign_r(coeff_i, minus_sc_i, ROUND_UP);
+16535:         }
+16535:         div_2exp_assign_r(approx_i, double_approx_i, 1, ROUND_UP);
+16535:         add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP);
+16535:       }
+16535: 
+16535:       forget_all_octagonal_constraints(var_id);
+16535:       reset_strongly_closed();
+16535: 
+16535:       if (pinf_count > 1) {
+16535:         ((void) 0);
+16535:         return;
+16535:       }
+16535: 
+16535: 
+16535:       if (sc_denom != 1) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
+16535:         assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
+16535:         neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
+16535:         div_assign_r(sum, sum, down_sc_denom, ROUND_UP);
+16535:       }
+16535: 
+16535:       if (pinf_count == 0) {
+16535: 
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_double_sum; N& double_sum = holder_double_sum.item();
+16535:         mul_2exp_assign_r(double_sum, sum, 1, ROUND_UP);
+16535:         matrix[n_var + 1][n_var] = double_sum;
+16535: 
+16535:         deduce_v_pm_u_bounds(var_id, w_id, sc_expr, sc_denom, sum);
+16535:       }
+16535:       else if (pinf_count == 1) {
+16535:         if (pinf_index != var_id) {
+16535:           const Coefficient& pi = expr.coefficient(Variable(pinf_index));
+16535:           if (pi == denominator ) {
+16535: 
+16535:             if (var_id < pinf_index) {
+16535:               matrix[2*pinf_index][n_var] = sum;
+16535:             }
+16535:             else {
+16535:               matrix[n_var + 1][2*pinf_index + 1] = sum;
+16535:             }
+16535:           }
+16535:           else {
+16535:             if (pi == minus_denom) {
+16535: 
+16535:               if (var_id < pinf_index) {
+16535:                 matrix[2*pinf_index + 1][n_var] = sum;
+16535:               }
+16535:               else {
+16535:                 matrix[n_var + 1][2*pinf_index] = sum;
+16535:               }
+16535:             }
+16535:           }
+16535:         }
+16535:       }
+16535:       break;
+16535:     }
+16535: 
+16535:   case GREATER_OR_EQUAL:
+16535:     {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       assign_r(sum, minus_sc_b, ROUND_UP);
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_i; N& coeff_i = holder_coeff_i.item();
+16535:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item();
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_approx_i; N& approx_i = holder_approx_i.item();
+16535: 
+16535:       for (Row_iterator m_iter = m_begin, m_iter_end = m_begin + (2 * w_id + 2);
+16535:            m_iter != m_iter_end; ) {
+16535:         const dimension_type n_i = m_iter.index();
+16535:         const dimension_type id = n_i/2;
+16535:         Row_reference m_i = *m_iter;
+16535:         ++m_iter;
+16535:         Row_reference m_ci = *m_iter;
+16535:         ++m_iter;
+16535:         const Coefficient& sc_i = sc_expr.coefficient(Variable(id));
+16535:         const int sign_i = sgn(sc_i);
+16535:         if (sign_i == 0) {
+16535:           continue;
+16535:         }
+16535: 
+16535:         const N& double_approx_i = (sign_i > 0) ? m_i[n_i + 1] : m_ci[n_i];
+16535:         if (is_plus_infinity(double_approx_i)) {
+16535:           if (++pinf_count > 1) {
+16535:             break;
+16535:           }
+16535:           pinf_index = id;
+16535:           continue;
+16535:         }
+16535:         if (sign_i > 0) {
+16535:           assign_r(coeff_i, sc_i, ROUND_UP);
+16535:         }
+16535:         else {
+16535:           neg_assign(minus_sc_i, sc_i);
+16535:           assign_r(coeff_i, minus_sc_i, ROUND_UP);
+16535:         }
+16535:         div_2exp_assign_r(approx_i, double_approx_i, 1, ROUND_UP);
+16535:         add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP);
+16535:       }
+16535: 
+16535: 
+16535:       forget_all_octagonal_constraints(var_id);
+16535:       reset_strongly_closed();
+16535: 
+16535:       if (pinf_count > 1) {
+16535:         ((void) 0);
+16535:         return;
+16535:       }
+16535: 
+16535: 
+16535:       if (sc_denom != 1) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
+16535:         assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
+16535:         neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
+16535:         div_assign_r(sum, sum, down_sc_denom, ROUND_UP);
+16535:       }
+16535: 
+16535:       if (pinf_count == 0) {
+16535: 
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_double_sum; N& double_sum = holder_double_sum.item();
+16535:         mul_2exp_assign_r(double_sum, sum, 1, ROUND_UP);
+16535:         matrix[n_var][n_var + 1] = double_sum;
+16535: 
+16535:         deduce_minus_v_pm_u_bounds(var_id, pinf_index, sc_expr, sc_denom, sum);
+16535:       }
+16535:       else if (pinf_count == 1) {
+16535:         if (pinf_index != var_id) {
+16535:           const Coefficient& pi = expr.coefficient(Variable(pinf_index));
+16535:           if (pi == denominator) {
+16535: 
+16535: 
+16535:             if (pinf_index < var_id) {
+16535:               matrix[n_var][2*pinf_index] = sum;
+16535:             }
+16535:             else {
+16535:               matrix[2*pinf_index + 1][n_var + 1] = sum;
+16535:             }
+16535:           }
+16535:           else {
+16535:             if (pi == minus_denom) {
+16535: 
+16535: 
+16535:               if (pinf_index < var_id) {
+16535:                 matrix[n_var][2*pinf_index + 1] = sum;
+16535:               }
+16535:               else {
+16535:                 matrix[2*pinf_index][n_var + 1] = sum;
+16535:               }
+16535:             }
+16535:           }
+16535:         }
+16535:       }
+16535:       break;
+16535:     }
+16535: 
+16535:   default:
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     break;
+16535:   }
+16535:   incremental_strong_closure_assign(var);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::generalized_affine_image(const Linear_Expression& lhs,
+16535:                                              const Relation_Symbol relsym,
+16535:                                              const Linear_Expression& rhs) {
+16535: 
+16535: 
+16535: 
+16535:   dimension_type lhs_space_dim = lhs.space_dimension();
+16535:   if (space_dim < lhs_space_dim) {
+16535:     throw_dimension_incompatible("generalized_affine_image(e1, r, e2)",
+16535:                                  "e1", lhs);
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type rhs_space_dim = rhs.space_dimension();
+16535:   if (space_dim < rhs_space_dim) {
+16535:     throw_dimension_incompatible("generalized_affine_image(e1, r, e2)",
+16535:                                  "e2", rhs);
+16535:   }
+16535: 
+16535: 
+16535:   if (relsym == LESS_THAN || relsym == GREATER_THAN) {
+16535:     throw_invalid_argument("generalized_affine_image(e1, r, e2)",
+16535:                            "r is a strict relation symbol");
+16535:   }
+16535: 
+16535:   if (relsym == NOT_EQUAL) {
+16535:     throw_invalid_argument("generalized_affine_image(e1, r, e2)",
+16535:                            "r is the disequality relation symbol");
+16535:   }
+16535: 
+16535:   strong_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   dimension_type t_lhs = 0;
+16535: 
+16535:   dimension_type j_lhs = lhs.last_nonzero();
+16535: 
+16535:   if (j_lhs != 0) {
+16535:     ++t_lhs;
+16535:     if (!lhs.all_zeroes(1, j_lhs)) {
+16535:       ++t_lhs;
+16535:     }
+16535:     --j_lhs;
+16535:   }
+16535: 
+16535:   const Coefficient& b_lhs = lhs.inhomogeneous_term();
+16535: 
+16535:   if (t_lhs == 0) {
+16535: # 6583 "../../src/Octagonal_Shape_templates.hh"
+16535:     switch (relsym) {
+16535:     case LESS_OR_EQUAL:
+16535:       refine_no_check(lhs <= rhs);
+16535:       break;
+16535:     case EQUAL:
+16535:       refine_no_check(lhs == rhs);
+16535:       break;
+16535:     case GREATER_OR_EQUAL:
+16535:       refine_no_check(lhs >= rhs);
+16535:       break;
+16535:     default:
+16535: 
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       break;
+16535:     }
+16535:   }
+16535: 
+16535:   else if (t_lhs == 1) {
+16535: 
+16535: 
+16535: 
+16535:     Variable v(j_lhs);
+16535: 
+16535:     const Coefficient& denom = lhs.coefficient(v);
+16535:     Relation_Symbol new_relsym = relsym;
+16535:     if (denom < 0) {
+16535:       if (relsym == LESS_OR_EQUAL) {
+16535:         new_relsym = GREATER_OR_EQUAL;
+16535:       }
+16535:       else if (relsym == GREATER_OR_EQUAL) {
+16535:         new_relsym = LESS_OR_EQUAL;
+16535:       }
+16535:     }
+16535:     Linear_Expression expr = rhs - b_lhs;
+16535:     generalized_affine_image(v, new_relsym, expr, denom);
+16535:   }
+16535:   else {
+16535: 
+16535: 
+16535:     std::vector<Variable> lhs_vars;
+16535:     for (Linear_Expression::const_iterator i = lhs.begin(), i_end = lhs.end();
+16535:           i != i_end; ++i) {
+16535:       lhs_vars.push_back(i.variable());
+16535:     }
+16535: 
+16535:     const dimension_type num_common_dims = std::min(lhs_space_dim, rhs_space_dim);
+16535:     if (!lhs.have_a_common_variable(rhs, Variable(0), Variable(num_common_dims))) {
+16535: 
+16535: 
+16535:       for (dimension_type i = lhs_vars.size(); i-- > 0; ) {
+16535:         dimension_type lhs_vars_i = lhs_vars[i].id();
+16535:         forget_all_octagonal_constraints(lhs_vars_i);
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       switch (relsym) {
+16535:       case LESS_OR_EQUAL:
+16535:         refine_no_check(lhs <= rhs);
+16535:         break;
+16535:       case EQUAL:
+16535:         refine_no_check(lhs == rhs);
+16535:         break;
+16535:       case GREATER_OR_EQUAL:
+16535:         refine_no_check(lhs >= rhs);
+16535:         break;
+16535:       default:
+16535: 
+16535:         Parma_Polyhedra_Library::ppl_unreachable();
+16535:         break;
+16535:       }
+16535:     }
+16535:     else {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       for (dimension_type i = lhs_vars.size(); i-- > 0; ) {
+16535:         dimension_type lhs_vars_i = lhs_vars[i].id();
+16535:         forget_all_octagonal_constraints(lhs_vars_i);
+16535:       }
+16535: # 6711 "../../src/Octagonal_Shape_templates.hh"
+16535:     }
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::bounded_affine_image(const Variable var,
+16535:                                          const Linear_Expression& lb_expr,
+16535:                                          const Linear_Expression& ub_expr,
+16535:                                          Coefficient_traits::const_reference
+16535:                                          denominator) {
+16535: 
+16535:   if (denominator == 0) {
+16535:     throw_invalid_argument("bounded_affine_image(v, lb, ub, d)", "d == 0");
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type var_id = var.id();
+16535:   if (space_dim < var_id + 1) {
+16535:     throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)",
+16535:                                  var_id + 1);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type lb_space_dim = lb_expr.space_dimension();
+16535:   if (space_dim < lb_space_dim) {
+16535:     throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)",
+16535:                                  "lb", lb_expr);
+16535:   }
+16535:   const dimension_type ub_space_dim = ub_expr.space_dimension();
+16535:   if (space_dim < ub_space_dim) {
+16535:     throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)",
+16535:                                  "ub", ub_expr);
+16535:   }
+16535: 
+16535:   strong_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   dimension_type t = 0;
+16535: 
+16535:   dimension_type w_id = lb_expr.last_nonzero();
+16535: 
+16535:   if (w_id != 0) {
+16535:     ++t;
+16535:     if (!lb_expr.all_zeroes(1, w_id)) {
+16535:       ++t;
+16535:     }
+16535:     --w_id;
+16535:   }
+16535: 
+16535:   typedef typename OR_Matrix<N>::row_iterator row_iterator;
+16535:   typedef typename OR_Matrix<N>::const_row_iterator Row_iterator;
+16535:   typedef typename OR_Matrix<N>::const_row_reference_type Row_reference;
+16535: 
+16535:   const row_iterator m_begin = matrix.row_begin();
+16535:   const dimension_type n_var = 2*var_id;
+16535:   const Coefficient& b = lb_expr.inhomogeneous_term();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item();
+16535:   neg_assign_r(minus_denom, denominator, ROUND_NOT_NEEDED);
+16535: # 6788 "../../src/Octagonal_Shape_templates.hh"
+16535:   if (t == 0) {
+16535: 
+16535:     generalized_affine_image(var,
+16535:                              LESS_OR_EQUAL,
+16535:                              ub_expr,
+16535:                              denominator);
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_two_b; Parma_Polyhedra_Library::Coefficient& two_b = holder_two_b.item();
+16535:     two_b = 2*b;
+16535: 
+16535:     add_octagonal_constraint(n_var, n_var + 1, two_b, minus_denom);
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535:   if (t == 1) {
+16535: 
+16535:     const Coefficient& w_coeff = lb_expr.coefficient(Variable(w_id));
+16535:     if (w_coeff == denominator || w_coeff == minus_denom) {
+16535: 
+16535:       if (w_id == var_id) {
+16535: 
+16535: 
+16535:         const Variable new_var(space_dim);
+16535:         add_space_dimensions_and_embed(1);
+16535: 
+16535: 
+16535:         affine_image(new_var, lb_expr, denominator);
+16535: 
+16535:         strong_closure_assign();
+16535:         ((void) 0);
+16535: 
+16535:         generalized_affine_image(var,
+16535:                                  LESS_OR_EQUAL,
+16535:                                  ub_expr,
+16535:                                  denominator);
+16535: 
+16535:         refine_no_check(var >= new_var);
+16535: 
+16535:         remove_higher_space_dimensions(space_dim-1);
+16535:         return;
+16535:       }
+16535:       else {
+16535: 
+16535:         generalized_affine_image(var,
+16535:                                  LESS_OR_EQUAL,
+16535:                                  ub_expr,
+16535:                                  denominator);
+16535: 
+16535: 
+16535:         const dimension_type n_w = 2*w_id;
+16535: 
+16535:         if (w_coeff == denominator) {
+16535:           if (var_id < w_id) {
+16535:             add_octagonal_constraint(n_w + 1, n_var + 1, b, minus_denom);
+16535:           }
+16535:           else {
+16535:             add_octagonal_constraint(n_var, n_w, b, minus_denom);
+16535:           }
+16535:         }
+16535:         else {
+16535: 
+16535:           if (var_id < w_id) {
+16535:             add_octagonal_constraint(n_w, n_var + 1, b, minus_denom);
+16535:           }
+16535:           else {
+16535:             add_octagonal_constraint(n_var, n_w + 1, b, minus_denom);
+16535:           }
+16535:         }
+16535:         ((void) 0);
+16535:         return;
+16535:       }
+16535:     }
+16535:   }
+16535: # 6874 "../../src/Octagonal_Shape_templates.hh"
+16535:   const bool is_sc = (denominator > 0);
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item();
+16535:   neg_assign_r(minus_b, b, ROUND_NOT_NEEDED);
+16535: 
+16535:   const Coefficient& minus_sc_b = is_sc ? minus_b : b;
+16535:   const Coefficient& sc_denom = is_sc ? denominator : minus_denom;
+16535:   const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator;
+16535: 
+16535: 
+16535: 
+16535:   Linear_Expression minus_expr;
+16535:   if (!is_sc) {
+16535:     minus_expr = -lb_expr;
+16535:   }
+16535:   const Linear_Expression& sc_expr = is_sc ? lb_expr : minus_expr;
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_neg_sum; N& neg_sum = holder_neg_sum.item();
+16535: 
+16535:   dimension_type neg_pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
+16535: 
+16535:   dimension_type neg_pinf_count = 0;
+16535: 
+16535: 
+16535:   assign_r(neg_sum, minus_sc_b, ROUND_UP);
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_i; N& coeff_i = holder_coeff_i.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_minus_coeff_i; N& minus_coeff_i = holder_minus_coeff_i.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_half; N& half = holder_half.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item();
+16535: 
+16535: 
+16535:   for (Row_iterator m_iter = m_begin, m_iter_end = m_begin + (2 * w_id + 2);
+16535:        m_iter != m_iter_end; ) {
+16535:     const dimension_type n_i = m_iter.index();
+16535:     const dimension_type id = n_i/2;
+16535:     Row_reference m_i = *m_iter;
+16535:     ++m_iter;
+16535:     Row_reference m_ci = *m_iter;
+16535:     ++m_iter;
+16535:     const Coefficient& sc_i = sc_expr.coefficient(Variable(id));
+16535:     const int sign_i = sgn(sc_i);
+16535:     if (sign_i > 0) {
+16535:       assign_r(coeff_i, sc_i, ROUND_UP);
+16535: 
+16535:       if (neg_pinf_count <= 1) {
+16535:         const N& double_up_approx_minus_i = m_i[n_i + 1];
+16535:         if (!is_plus_infinity(double_up_approx_minus_i)) {
+16535: 
+16535:           div_2exp_assign_r(half, double_up_approx_minus_i, 1, ROUND_UP);
+16535:           add_mul_assign_r(neg_sum, coeff_i, half, ROUND_UP);
+16535:         }
+16535:         else {
+16535:           ++neg_pinf_count;
+16535:           neg_pinf_index = id;
+16535:         }
+16535:       }
+16535:     }
+16535:     else if (sign_i < 0) {
+16535:       neg_assign_r(minus_sc_i, sc_i, ROUND_NOT_NEEDED);
+16535:       assign_r(minus_coeff_i, minus_sc_i, ROUND_UP);
+16535: 
+16535:       if (neg_pinf_count <= 1) {
+16535:         const N& double_up_approx_i = m_ci[n_i];
+16535:         if (!is_plus_infinity(double_up_approx_i)) {
+16535: 
+16535:           div_2exp_assign_r(half, double_up_approx_i, 1, ROUND_UP);
+16535:           add_mul_assign_r(neg_sum, minus_coeff_i, half, ROUND_UP);
+16535:         }
+16535:         else {
+16535:           ++neg_pinf_count;
+16535:           neg_pinf_index = id;
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   generalized_affine_image(var,
+16535:                            LESS_OR_EQUAL,
+16535:                            ub_expr,
+16535:                            denominator);
+16535: 
+16535: 
+16535:   if (neg_pinf_count > 1) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   reset_strongly_closed();
+16535: 
+16535: 
+16535:   if (neg_pinf_count <= 1) {
+16535: 
+16535:     if (sc_denom != 1) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
+16535:       assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
+16535:       neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
+16535:       div_assign_r(neg_sum, neg_sum, down_sc_denom, ROUND_UP);
+16535:     }
+16535: 
+16535:     if (neg_pinf_count == 0) {
+16535: 
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_double_neg_sum; N& double_neg_sum = holder_double_neg_sum.item();
+16535:       mul_2exp_assign_r(double_neg_sum, neg_sum, 1, ROUND_UP);
+16535:       matrix[n_var][n_var + 1] = double_neg_sum;
+16535: 
+16535:       deduce_minus_v_pm_u_bounds(var_id, w_id, sc_expr, sc_denom, neg_sum);
+16535:     }
+16535:     else
+16535: 
+16535:       if (neg_pinf_index != var_id) {
+16535:         const Coefficient& npi = sc_expr.coefficient(Variable(neg_pinf_index));
+16535:         if (npi == sc_denom) {
+16535: 
+16535: 
+16535:           if (neg_pinf_index < var_id) {
+16535:             matrix[n_var][2*neg_pinf_index] = neg_sum;
+16535:           }
+16535:           else {
+16535:             matrix[2*neg_pinf_index + 1][n_var + 1] = neg_sum;
+16535:           }
+16535:         }
+16535:         else {
+16535:           if (npi == minus_sc_denom) {
+16535: 
+16535: 
+16535:             if (neg_pinf_index < var_id) {
+16535:               matrix[n_var][2*neg_pinf_index + 1] = neg_sum;
+16535:             }
+16535:             else {
+16535:               matrix[2*neg_pinf_index][n_var + 1] = neg_sum;
+16535:             }
+16535:           }
+16535:         }
+16535:       }
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>
+16535: ::generalized_affine_preimage(const Variable var,
+16535:                               const Relation_Symbol relsym,
+16535:                               const Linear_Expression& expr,
+16535:                               Coefficient_traits::const_reference
+16535:                               denominator) {
+16535: 
+16535:   if (denominator == 0) {
+16535:     throw_invalid_argument("generalized_affine_preimage(v, r, e, d)", "d == 0");
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type expr_space_dim = expr.space_dimension();
+16535:   if (space_dim < expr_space_dim) {
+16535:     throw_dimension_incompatible("generalized_affine_preimage(v, r, e, d)",
+16535:                                  "e", expr);
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type var_id = var.id();
+16535:   if (space_dim < var_id + 1) {
+16535:     throw_dimension_incompatible("generalized_affine_preimage(v, r, e, d)",
+16535:                                  var_id + 1);
+16535:   }
+16535: 
+16535: 
+16535:   if (relsym == LESS_THAN || relsym == GREATER_THAN) {
+16535:     throw_invalid_argument("generalized_affine_preimage(v, r, e, d)",
+16535:                            "r is a strict relation symbol");
+16535:   }
+16535: 
+16535:   if (relsym == NOT_EQUAL) {
+16535:     throw_invalid_argument("generalized_affine_preimage(v, r, e, d)",
+16535:                            "r is the disequality relation symbol");
+16535:   }
+16535: 
+16535:   if (relsym == EQUAL) {
+16535: 
+16535: 
+16535:     affine_preimage(var, expr, denominator);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   strong_closure_assign();
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   const Coefficient& expr_v = expr.coefficient(var);
+16535:   if (expr_v != 0) {
+16535:     const Relation_Symbol reversed_relsym = (relsym == LESS_OR_EQUAL)
+16535:       ? GREATER_OR_EQUAL : LESS_OR_EQUAL;
+16535:     const Linear_Expression inverse
+16535:       = expr - (expr_v + denominator)*var;
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inverse_denom; Parma_Polyhedra_Library::Coefficient& inverse_denom = holder_inverse_denom.item();
+16535:     neg_assign(inverse_denom, expr_v);
+16535:     const Relation_Symbol inverse_relsym
+16535:       = (sgn(denominator) == sgn(inverse_denom)) ? relsym : reversed_relsym;
+16535:     generalized_affine_image(var, inverse_relsym, inverse, inverse_denom);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   refine(var, relsym, expr, denominator);
+16535: 
+16535: 
+16535:   if (is_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   forget_all_octagonal_constraints(var_id);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>
+16535: ::generalized_affine_preimage(const Linear_Expression& lhs,
+16535:                               const Relation_Symbol relsym,
+16535:                               const Linear_Expression& rhs) {
+16535: 
+16535: 
+16535: 
+16535:   dimension_type lhs_space_dim = lhs.space_dimension();
+16535:   if (space_dim < lhs_space_dim) {
+16535:     throw_dimension_incompatible("generalized_affine_preimage(e1, r, e2)",
+16535:                                  "e1", lhs);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type rhs_space_dim = rhs.space_dimension();
+16535:   if (space_dim < rhs_space_dim) {
+16535:     throw_dimension_incompatible("generalized_affine_preimage(e1, r, e2)",
+16535:                                  "e2", rhs);
+16535:   }
+16535: 
+16535: 
+16535:   if (relsym == LESS_THAN || relsym == GREATER_THAN) {
+16535:     throw_invalid_argument("generalized_affine_preimage(e1, r, e2)",
+16535:                            "r is a strict relation symbol");
+16535:   }
+16535: 
+16535:   if (relsym == NOT_EQUAL) {
+16535:     throw_invalid_argument("generalized_affine_preimage(e1, r, e2)",
+16535:                            "r is the disequality relation symbol");
+16535:   }
+16535:   strong_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   dimension_type t_lhs = 0;
+16535: 
+16535:   dimension_type j_lhs = lhs.last_nonzero();
+16535: 
+16535:   if (j_lhs != 0) {
+16535:     ++t_lhs;
+16535:     if (!lhs.all_zeroes(1, j_lhs)) {
+16535:       ++t_lhs;
+16535:     }
+16535:     --j_lhs;
+16535:   }
+16535: 
+16535:   const Coefficient& b_lhs = lhs.inhomogeneous_term();
+16535: 
+16535: 
+16535: 
+16535:   if (t_lhs == 0) {
+16535:     generalized_affine_image(lhs, relsym, rhs);
+16535:     return;
+16535:   }
+16535: 
+16535:   else if (t_lhs == 1) {
+16535: 
+16535: 
+16535: 
+16535:     Variable v(j_lhs);
+16535: 
+16535:     const Coefficient& denom = lhs.coefficient(v);
+16535:     Relation_Symbol new_relsym = relsym;
+16535:     if (denom < 0) {
+16535:       if (relsym == LESS_OR_EQUAL) {
+16535:         new_relsym = GREATER_OR_EQUAL;
+16535:       }
+16535:       else if (relsym == GREATER_OR_EQUAL) {
+16535:         new_relsym = LESS_OR_EQUAL;
+16535:       }
+16535:     }
+16535:     Linear_Expression expr = rhs - b_lhs;
+16535:     generalized_affine_preimage(v, new_relsym, expr, denom);
+16535:   }
+16535: 
+16535:   else {
+16535: 
+16535: 
+16535:     std::vector<Variable> lhs_vars;
+16535:     for (Linear_Expression::const_iterator i = lhs.begin(), i_end = lhs.end();
+16535:           i != i_end; ++i) {
+16535:       lhs_vars.push_back(i.variable());
+16535:     }
+16535: 
+16535:     const dimension_type num_common_dims = std::min(lhs_space_dim, rhs_space_dim);
+16535:     if (!lhs.have_a_common_variable(rhs, Variable(0), Variable(num_common_dims))) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       switch (relsym) {
+16535:       case LESS_OR_EQUAL:
+16535:         refine_no_check(lhs <= rhs);
+16535:         break;
+16535:       case EQUAL:
+16535:         refine_no_check(lhs == rhs);
+16535:         break;
+16535:       case GREATER_OR_EQUAL:
+16535:         refine_no_check(lhs >= rhs);
+16535:         break;
+16535:       default:
+16535: 
+16535:         Parma_Polyhedra_Library::ppl_unreachable();
+16535:         break;
+16535:       }
+16535: 
+16535: 
+16535:       if (is_empty()) {
+16535:         return;
+16535:       }
+16535: 
+16535:       for (dimension_type i = lhs_vars.size(); i-- > 0; ) {
+16535:         dimension_type lhs_vars_i = lhs_vars[i].id();
+16535:         forget_all_octagonal_constraints(lhs_vars_i);
+16535:       }
+16535:     }
+16535:     else {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const Variable new_var(space_dim);
+16535:       add_space_dimensions_and_embed(1);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       affine_image(new_var, lhs);
+16535: 
+16535: 
+16535:       strong_closure_assign();
+16535:       ((void) 0);
+16535:       for (dimension_type i = lhs_vars.size(); i-- > 0; ) {
+16535:         dimension_type lhs_vars_i = lhs_vars[i].id();
+16535:         forget_all_octagonal_constraints(lhs_vars_i);
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       switch (relsym) {
+16535:       case LESS_OR_EQUAL:
+16535:         refine_no_check(new_var <= rhs);
+16535:         break;
+16535:       case EQUAL:
+16535:         refine_no_check(new_var == rhs);
+16535:         break;
+16535:       case GREATER_OR_EQUAL:
+16535:         refine_no_check(new_var >= rhs);
+16535:         break;
+16535:       default:
+16535: 
+16535:         Parma_Polyhedra_Library::ppl_unreachable();
+16535:         break;
+16535:       }
+16535: 
+16535:       remove_higher_space_dimensions(space_dim-1);
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::bounded_affine_preimage(const Variable var,
+16535:                                             const Linear_Expression& lb_expr,
+16535:                                             const Linear_Expression& ub_expr,
+16535:                                             Coefficient_traits::const_reference
+16535:                                             denominator) {
+16535: 
+16535:   if (denominator == 0) {
+16535:     throw_invalid_argument("bounded_affine_preimage(v, lb, ub, d)", "d == 0");
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type var_id = var.id();
+16535:   if (space_dim < var_id + 1) {
+16535:     throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)",
+16535:                                  var_id + 1);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type lb_space_dim = lb_expr.space_dimension();
+16535:   if (space_dim < lb_space_dim) {
+16535:     throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)",
+16535:                                  "lb", lb_expr);
+16535:   }
+16535:   const dimension_type ub_space_dim = ub_expr.space_dimension();
+16535:   if (space_dim < ub_space_dim) {
+16535:     throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)",
+16535:                                  "ub", ub_expr);
+16535:   }
+16535: 
+16535:   strong_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   if (ub_expr.coefficient(var) == 0) {
+16535:     refine(var, LESS_OR_EQUAL, ub_expr, denominator);
+16535:     generalized_affine_preimage(var, GREATER_OR_EQUAL,
+16535:                                 lb_expr, denominator);
+16535:     return;
+16535:   }
+16535:   if (lb_expr.coefficient(var) == 0) {
+16535:     refine(var, GREATER_OR_EQUAL, lb_expr, denominator);
+16535:     generalized_affine_preimage(var, LESS_OR_EQUAL,
+16535:                                 ub_expr, denominator);
+16535:     return;
+16535:   }
+16535: 
+16535:   const Coefficient& expr_v = lb_expr.coefficient(var);
+16535: 
+16535: 
+16535:   const Variable new_var(space_dim);
+16535:   add_space_dimensions_and_embed(1);
+16535:   const Linear_Expression lb_inverse
+16535:     = lb_expr - (expr_v + denominator)*var;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inverse_denom; Parma_Polyhedra_Library::Coefficient& inverse_denom = holder_inverse_denom.item();
+16535:   neg_assign(inverse_denom, expr_v);
+16535:   affine_image(new_var, lb_inverse, inverse_denom);
+16535:   strong_closure_assign();
+16535:   ((void) 0);
+16535:   generalized_affine_preimage(var, LESS_OR_EQUAL,
+16535:                               ub_expr, denominator);
+16535:   if (sgn(denominator) == sgn(inverse_denom)) {
+16535:     refine_no_check(var >= new_var) ;
+16535:   }
+16535:   else {
+16535:     refine_no_check(var <= new_var);
+16535:   }
+16535: 
+16535:   remove_higher_space_dimensions(space_dim-1);
+16535: }
+16535: 
+16535: template <typename T>
+16535: Constraint_System
+16535: Octagonal_Shape<T>::constraints() const {
+16535:   Constraint_System cs;
+16535:   cs.set_space_dimension(space_dim);
+16535: 
+16535:   if (space_dim == 0) {
+16535:     if (marked_empty()) {
+16535:       cs = Constraint_System::zero_dim_empty();
+16535:     }
+16535:     return cs;
+16535:   }
+16535: 
+16535:   if (marked_empty()) {
+16535:     cs.insert(Constraint::zero_dim_false());
+16535:     return cs;
+16535:   }
+16535: 
+16535:   typedef typename OR_Matrix<N>::const_row_iterator row_iterator;
+16535:   typedef typename OR_Matrix<N>::const_row_reference_type row_reference;
+16535: 
+16535:   row_iterator m_begin = matrix.row_begin();
+16535:   row_iterator m_end = matrix.row_end();
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_a; Parma_Polyhedra_Library::Coefficient& a = holder_a.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_b; Parma_Polyhedra_Library::Coefficient& b = holder_b.item();
+16535: 
+16535: 
+16535:   for (row_iterator i_iter = m_begin; i_iter != m_end; ) {
+16535:     const dimension_type i = i_iter.index();
+16535:     const Variable x(i/2);
+16535:     const N& c_i_ii = (*i_iter)[i + 1];
+16535:     ++i_iter;
+16535:     const N& c_ii_i = (*i_iter)[i];
+16535:     ++i_iter;
+16535: 
+16535:     if (is_additive_inverse(c_i_ii, c_ii_i)) {
+16535: 
+16535:       numer_denom(c_ii_i, b, a);
+16535:       a *= 2;
+16535:       cs.insert(a*x == b);
+16535:     }
+16535:     else {
+16535: 
+16535:       if (!is_plus_infinity(c_i_ii)) {
+16535:         numer_denom(c_i_ii, b, a);
+16535:         a *= 2;
+16535:         cs.insert(-a*x <= b);
+16535:       }
+16535:       if (!is_plus_infinity(c_ii_i)) {
+16535:         numer_denom(c_ii_i, b, a);
+16535:         a *= 2;
+16535:         cs.insert(a*x <= b);
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   for (row_iterator i_iter = m_begin; i_iter != m_end; ) {
+16535:     const dimension_type i = i_iter.index();
+16535:     row_reference r_i = *i_iter;
+16535:     ++i_iter;
+16535:     row_reference r_ii = *i_iter;
+16535:     ++i_iter;
+16535:     const Variable y(i/2);
+16535:     for (dimension_type j = 0; j < i; j += 2) {
+16535:       const N& c_i_j = r_i[j];
+16535:       const N& c_ii_jj = r_ii[j + 1];
+16535:       const Variable x(j/2);
+16535:       if (is_additive_inverse(c_ii_jj, c_i_j)) {
+16535: 
+16535:         numer_denom(c_i_j, b, a);
+16535:         cs.insert(a*x - a*y == b);
+16535:       }
+16535:       else {
+16535: 
+16535:         if (!is_plus_infinity(c_i_j)) {
+16535:           numer_denom(c_i_j, b, a);
+16535:           cs.insert(a*x - a*y <= b);
+16535:         }
+16535:         if (!is_plus_infinity(c_ii_jj)) {
+16535:           numer_denom(c_ii_jj, b, a);
+16535:           cs.insert(a*y - a*x <= b);
+16535:         }
+16535:       }
+16535: 
+16535:       const N& c_ii_j = r_ii[j];
+16535:       const N& c_i_jj = r_i[j + 1];
+16535:       if (is_additive_inverse(c_i_jj, c_ii_j)) {
+16535: 
+16535:         numer_denom(c_ii_j, b, a);
+16535:         cs.insert(a*x + a*y == b);
+16535:       }
+16535:       else {
+16535: 
+16535:         if (!is_plus_infinity(c_i_jj)) {
+16535:           numer_denom(c_i_jj, b, a);
+16535:           cs.insert(-a*x - a*y <= b);
+16535:         }
+16535:         if (!is_plus_infinity(c_ii_j)) {
+16535:           numer_denom(c_ii_j, b, a);
+16535:           cs.insert(a*x + a*y <= b);
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535:   return cs;
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::expand_space_dimension(Variable var, dimension_type m) {
+16535: 
+16535:   const dimension_type var_id = var.id();
+16535:   if (var_id + 1 > space_dim) {
+16535:     throw_dimension_incompatible("expand_space_dimension(v, m)", var_id + 1);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (m > max_space_dimension() - space_dim) {
+16535:     throw_invalid_argument("expand_dimension(v, m)",
+16535:                            "adding m new space dimensions exceeds "
+16535:                            "the maximum allowed space dimension");
+16535:   }
+16535: 
+16535:   if (m == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535:   const dimension_type old_num_rows = matrix.num_rows();
+16535: 
+16535: 
+16535:   add_space_dimensions_and_embed(m);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename OR_Matrix<N>::row_iterator row_iterator;
+16535:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
+16535:   typedef typename OR_Matrix<N>::const_row_iterator Row_iterator;
+16535:   typedef typename OR_Matrix<N>::const_row_reference_type Row_reference;
+16535: 
+16535:   const row_iterator m_begin = matrix.row_begin();
+16535:   const row_iterator m_end = matrix.row_end();
+16535:   const dimension_type n_var = 2*var_id;
+16535:   Row_iterator v_iter = m_begin + n_var;
+16535:   Row_reference m_v = *v_iter;
+16535:   Row_reference m_cv = *(v_iter + 1);
+16535: 
+16535:   for (row_iterator i_iter = m_begin + old_num_rows; i_iter != m_end;
+16535:        i_iter += 2) {
+16535:     row_reference m_i = *i_iter;
+16535:     row_reference m_ci = *(i_iter + 1);
+16535:     const dimension_type i = i_iter.index();
+16535:     const dimension_type ci = i + 1;
+16535:     m_i[ci] = m_v[n_var + 1];
+16535:     m_ci[i] = m_cv[n_var];
+16535:     for (dimension_type j = 0; j < n_var; ++j) {
+16535:       m_i[j] = m_v[j];
+16535:       m_ci[j] = m_cv[j];
+16535:     }
+16535:     for (dimension_type j = n_var + 2; j < old_num_rows; ++j) {
+16535:       row_iterator j_iter = m_begin + j;
+16535:       row_reference m_cj = (j % 2 != 0) ? *(j_iter-1) : *(j_iter + 1);
+16535:       m_i[j] = m_cj[n_var + 1];
+16535:       m_ci[j] = m_cj[n_var];
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   if (marked_strongly_closed()) {
+16535:     reset_strongly_closed();
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::fold_space_dimensions(const Variables_Set& vars,
+16535:                                           Variable dest) {
+16535: 
+16535:   if (dest.space_dimension() > space_dim) {
+16535:     throw_dimension_incompatible("fold_space_dimensions(vs, v)", "v", dest);
+16535:   }
+16535: 
+16535:   if (vars.empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   if (vars.space_dimension() > space_dim) {
+16535:     throw_dimension_incompatible("fold_space_dimensions(vs, v)",
+16535:                                  vars.space_dimension());
+16535:   }
+16535: 
+16535: 
+16535:   if (vars.find(dest.id()) != vars.end()) {
+16535:     throw_invalid_argument("fold_space_dimensions(vs, v)",
+16535:                            "v should not occur in vs");
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename OR_Matrix<N>::row_iterator row_iterator;
+16535:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
+16535: 
+16535:   const row_iterator m_begin = matrix.row_begin();
+16535: 
+16535:   strong_closure_assign();
+16535:   const dimension_type n_rows = matrix.num_rows();
+16535:   const dimension_type n_dest = 2*dest.id();
+16535:   row_iterator v_iter = m_begin + n_dest;
+16535:   row_reference m_v = *v_iter;
+16535:   row_reference m_cv = *(v_iter + 1);
+16535:   for (Variables_Set::const_iterator i = vars.begin(),
+16535:          vs_end = vars.end(); i != vs_end; ++i) {
+16535:     const dimension_type tbf_id = *i;
+16535:     const dimension_type tbf_var = 2*tbf_id;
+16535:     row_iterator tbf_iter = m_begin + tbf_var;
+16535:     row_reference m_tbf = *tbf_iter;
+16535:     row_reference m_ctbf = *(tbf_iter + 1);
+16535:     max_assign(m_v[n_dest + 1], m_tbf[tbf_var + 1]);
+16535:     max_assign(m_cv[n_dest], m_ctbf[tbf_var]);
+16535: 
+16535:     const dimension_type min_id = std::min(n_dest, tbf_var);
+16535:     const dimension_type max_id = std::max(n_dest, tbf_var);
+16535: 
+16535:     using namespace Implementation::Octagonal_Shapes;
+16535:     for (dimension_type j = 0; j < min_id; ++j) {
+16535:       const dimension_type cj = coherent_index(j);
+16535:       max_assign(m_v[j], m_tbf[j]);
+16535:       max_assign(m_cv[j], m_ctbf[j]);
+16535:       max_assign(m_cv[cj], m_ctbf[cj]);
+16535:       max_assign(m_v[cj], m_tbf[cj]);
+16535:     }
+16535:     for (dimension_type j = min_id + 2; j < max_id; ++j) {
+16535:       const dimension_type cj = coherent_index(j);
+16535:       row_iterator j_iter = m_begin + j;
+16535:       row_reference m_j = *j_iter;
+16535:       row_reference m_cj = (j % 2 != 0) ? *(j_iter-1) : *(j_iter + 1);
+16535:       if (n_dest == min_id) {
+16535:         max_assign(m_cj[n_dest + 1], m_tbf[j]);
+16535:         max_assign(m_cj[n_dest], m_ctbf[j]);
+16535:         max_assign(m_j[n_dest], m_ctbf[cj]);
+16535:         max_assign(m_j[n_dest + 1], m_tbf[cj]);
+16535:       }
+16535:       else {
+16535:         max_assign(m_v[j], m_cj[tbf_var + 1]);
+16535:         max_assign(m_cv[j], m_cj[tbf_var]);
+16535:         max_assign(m_cv[cj], m_j[tbf_var]);
+16535:         max_assign(m_v[cj], m_j[tbf_var + 1]);
+16535:       }
+16535:     }
+16535:     for (dimension_type j = max_id + 2; j < n_rows; ++j) {
+16535:       row_iterator j_iter = m_begin + j;
+16535:       row_reference m_j = *j_iter;
+16535:       row_reference m_cj = (j % 2 != 0) ? *(j_iter-1) : *(j_iter + 1);
+16535:       max_assign(m_cj[n_dest + 1], m_cj[tbf_var + 1]);
+16535:       max_assign(m_cj[n_dest], m_cj[tbf_var]);
+16535:       max_assign(m_j[n_dest], m_j[tbf_var]);
+16535:       max_assign(m_j[n_dest + 1], m_j[tbf_var + 1]);
+16535:     }
+16535:   }
+16535:   remove_space_dimensions(vars);
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: Octagonal_Shape<T>::upper_bound_assign_if_exact(const Octagonal_Shape& y) {
+16535: 
+16535: 
+16535: 
+16535:   const Octagonal_Shape& x = *this;
+16535:   const dimension_type x_space_dim = x.space_dimension();
+16535: 
+16535:   if (x_space_dim != y.space_dimension()) {
+16535:     throw_dimension_incompatible("upper_bound_assign_if_exact(y)", y);
+16535:   }
+16535: 
+16535: 
+16535:   if (x_space_dim == 0) {
+16535:     upper_bound_assign(y);
+16535:     return true;
+16535:   }
+16535: 
+16535:   if (x.marked_empty()) {
+16535:     *this = y;
+16535:     return true;
+16535:   }
+16535:   else if (y.is_empty()) {
+16535:     return true;
+16535:   }
+16535:   else if (x.is_empty()) {
+16535:     *this = y;
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535:   Octagonal_Shape<T> ub(x);
+16535:   ub.upper_bound_assign(y);
+16535: 
+16535: 
+16535: 
+16535:   std::vector<Bit_Row> x_non_red;
+16535:   x.non_redundant_matrix_entries(x_non_red);
+16535:   std::vector<Bit_Row> y_non_red;
+16535:   y.non_redundant_matrix_entries(y_non_red);
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_lhs; N& lhs = holder_lhs.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_lhs_copy; N& lhs_copy = holder_lhs_copy.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_rhs; N& rhs = holder_rhs.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_temp_zero; N& temp_zero = holder_temp_zero.item();
+16535:   assign_r(temp_zero, 0, ROUND_NOT_NEEDED);
+16535: 
+16535:   typedef typename OR_Matrix<N>::const_row_iterator row_iterator;
+16535:   typedef typename OR_Matrix<N>::const_row_reference_type row_reference;
+16535:   const dimension_type n_rows = x.matrix.num_rows();
+16535:   const row_iterator x_m_begin = x.matrix.row_begin();
+16535:   const row_iterator y_m_begin = y.matrix.row_begin();
+16535:   const row_iterator ub_m_begin = ub.matrix.row_begin();
+16535: 
+16535:   for (dimension_type i = n_rows; i-- > 0; ) {
+16535:     const Bit_Row& x_non_red_i = x_non_red[i];
+16535:     using namespace Implementation::Octagonal_Shapes;
+16535:     const dimension_type ci = coherent_index(i);
+16535:     const dimension_type row_size_i = OR_Matrix<N>::row_size(i);
+16535:     row_reference x_i = *(x_m_begin + i);
+16535:     row_reference y_i = *(y_m_begin + i);
+16535:     row_reference ub_i = *(ub_m_begin + i);
+16535:     const N& ub_i_ci = ub_i[ci];
+16535:     for (dimension_type j = row_size_i; j-- > 0; ) {
+16535: 
+16535:       if (!x_non_red_i[j]) {
+16535:         continue;
+16535:       }
+16535:       const N& x_i_j = x_i[j];
+16535: 
+16535:       if (x_i_j >= y_i[j]) {
+16535:         continue;
+16535:       }
+16535: 
+16535:       const dimension_type cj = coherent_index(j);
+16535:       const dimension_type row_size_cj = OR_Matrix<N>::row_size(cj);
+16535:       row_reference ub_cj = *(ub_m_begin + cj);
+16535:       const N& ub_cj_j = ub_cj[j];
+16535:       for (dimension_type k = 0; k < n_rows; ++k) {
+16535:         const Bit_Row& y_non_red_k = y_non_red[k];
+16535:         const dimension_type ck = coherent_index(k);
+16535:         const dimension_type row_size_k = OR_Matrix<N>::row_size(k);
+16535:         row_reference x_k = *(x_m_begin + k);
+16535:         row_reference y_k = *(y_m_begin + k);
+16535:         row_reference ub_k = *(ub_m_begin + k);
+16535:         const N& ub_k_ck = ub_k[ck];
+16535: 
+16535: 
+16535: 
+16535:         const N& ub_k_j
+16535:           = (k == j)
+16535:           ? temp_zero
+16535:           : ((j < row_size_k) ? ub_k[j] : ub_cj[ck]);
+16535:         const N& ub_i_ck
+16535:           = (i == ck)
+16535:           ? temp_zero
+16535:           : ((ck < row_size_i) ? ub_i[ck] : ub_k[ci]);
+16535: 
+16535:         for (dimension_type ell = row_size_k; ell-- > 0; ) {
+16535: 
+16535:           if (!y_non_red_k[ell]) {
+16535:             continue;
+16535:           }
+16535:           const N& y_k_ell = y_k[ell];
+16535: 
+16535:           if (y_k_ell >= x_k[ell]) {
+16535:             continue;
+16535:           }
+16535:           const dimension_type cell = coherent_index(ell);
+16535:           row_reference ub_cell = *(ub_m_begin + cell);
+16535:           const N& ub_i_ell
+16535:             = (i == ell)
+16535:             ? temp_zero
+16535:             : ((ell < row_size_i) ? ub_i[ell] : ub_cell[ci]);
+16535:           const N& ub_cj_ell
+16535:             = (cj == ell)
+16535:             ? temp_zero
+16535:             : ((ell < row_size_cj) ? ub_cj[ell] : ub_cell[j]);
+16535: 
+16535:           add_assign_r(lhs, x_i_j, y_k_ell, ROUND_UP);
+16535:           add_assign_r(rhs, ub_i_ell, ub_k_j, ROUND_UP);
+16535:           if (lhs >= rhs) {
+16535:             continue;
+16535:           }
+16535: 
+16535:           add_assign_r(rhs, ub_i_ck, ub_cj_ell, ROUND_UP);
+16535:           if (lhs >= rhs) {
+16535:             continue;
+16535:           }
+16535: 
+16535:           assign_r(lhs_copy, lhs, ROUND_NOT_NEEDED);
+16535:           add_assign_r(lhs, lhs_copy, x_i_j, ROUND_UP);
+16535:           add_assign_r(rhs, ub_i_ell, ub_i_ck, ROUND_UP);
+16535:           add_assign_r(rhs, rhs, ub_cj_j, ROUND_UP);
+16535:           if (lhs >= rhs) {
+16535:             continue;
+16535:           }
+16535: 
+16535:           add_assign_r(rhs, ub_k_j, ub_cj_ell, ROUND_UP);
+16535:           add_assign_r(rhs, rhs, ub_i_ci, ROUND_UP);
+16535:           if (lhs >= rhs) {
+16535:             continue;
+16535:           }
+16535: 
+16535:           add_assign_r(lhs, lhs_copy, y_k_ell, ROUND_UP);
+16535:           add_assign_r(rhs, ub_i_ell, ub_cj_ell, ROUND_UP);
+16535:           add_assign_r(rhs, rhs, ub_k_ck, ROUND_UP);
+16535:           if (lhs >= rhs) {
+16535:             continue;
+16535:           }
+16535: 
+16535:           add_assign_r(rhs, ub_k_j, ub_i_ck, ROUND_UP);
+16535:           add_assign_r(rhs, rhs, ub_cell[ell], ROUND_UP);
+16535:           if (lhs < rhs) {
+16535: 
+16535: 
+16535:             return false;
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   m_swap(ub);
+16535:   ((void) 0);
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: Octagonal_Shape<T>
+16535: ::integer_upper_bound_assign_if_exact(const Octagonal_Shape& y) {
+16535:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_7801 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(std::numeric_limits<T>::is_integer)>) }
+16535: 
+16535: 
+16535:                                                           ;
+16535: 
+16535:   const Octagonal_Shape& x = *this;
+16535:   const dimension_type x_space_dim = x.space_dimension();
+16535: 
+16535:   if (x_space_dim != y.space_dimension()) {
+16535:     throw_dimension_incompatible("integer_upper_bound_assign_if_exact(y)", y);
+16535:   }
+16535: 
+16535:   if (x_space_dim == 0) {
+16535:     upper_bound_assign(y);
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (x.marked_empty()) {
+16535:     *this = y;
+16535:     tight_closure_assign();
+16535:     return true;
+16535:   }
+16535:   else if (y.marked_empty()) {
+16535:     tight_closure_assign();
+16535:     return true;
+16535:   }
+16535:   else if (x.is_empty() || x.tight_coherence_would_make_empty()) {
+16535:     *this = y;
+16535:     tight_closure_assign();
+16535:     return true;
+16535:   }
+16535:   else if (y.is_empty() || y.tight_coherence_would_make_empty()) {
+16535:     tight_closure_assign();
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535: 
+16535:   Octagonal_Shape<T> tx(x);
+16535:   tx.tight_closure_assign();
+16535:   Octagonal_Shape<T> ty(y);
+16535:   ty.tight_closure_assign();
+16535:   Octagonal_Shape<T> ub(tx);
+16535:   ub.upper_bound_assign(ty);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   std::vector<Bit_Row> tx_non_red;
+16535:   tx.non_redundant_matrix_entries(tx_non_red);
+16535:   std::vector<Bit_Row> ty_non_red;
+16535:   ty.non_redundant_matrix_entries(ty_non_red);
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_lhs_i_j; N& lhs_i_j = holder_lhs_i_j.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_lhs_k_ell; N& lhs_k_ell = holder_lhs_k_ell.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_lhs; N& lhs = holder_lhs.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_lhs_copy; N& lhs_copy = holder_lhs_copy.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_rhs; N& rhs = holder_rhs.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_temp_zero; N& temp_zero = holder_temp_zero.item();
+16535:   assign_r(temp_zero, 0, ROUND_NOT_NEEDED);
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_temp_one; N& temp_one = holder_temp_one.item();
+16535:   assign_r(temp_one, 1, ROUND_NOT_NEEDED);
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_temp_two; N& temp_two = holder_temp_two.item();
+16535:   assign_r(temp_two, 2, ROUND_NOT_NEEDED);
+16535: 
+16535:   typedef typename OR_Matrix<N>::const_row_iterator row_iterator;
+16535:   typedef typename OR_Matrix<N>::const_row_reference_type row_reference;
+16535:   const dimension_type n_rows = tx.matrix.num_rows();
+16535:   const row_iterator tx_m_begin = tx.matrix.row_begin();
+16535:   const row_iterator ty_m_begin = ty.matrix.row_begin();
+16535:   const row_iterator ub_m_begin = ub.matrix.row_begin();
+16535: 
+16535:   for (dimension_type i = n_rows; i-- > 0; ) {
+16535:     const Bit_Row& tx_non_red_i = tx_non_red[i];
+16535:     using namespace Implementation::Octagonal_Shapes;
+16535:     const dimension_type ci = coherent_index(i);
+16535:     const dimension_type row_size_i = OR_Matrix<N>::row_size(i);
+16535:     row_reference tx_i = *(tx_m_begin + i);
+16535:     row_reference ty_i = *(ty_m_begin + i);
+16535:     row_reference ub_i = *(ub_m_begin + i);
+16535:     const N& ub_i_ci = ub_i[ci];
+16535:     for (dimension_type j = row_size_i; j-- > 0; ) {
+16535: 
+16535:       if (!tx_non_red_i[j]) {
+16535:         continue;
+16535:       }
+16535:       const N& tx_i_j = tx_i[j];
+16535:       const dimension_type cj = coherent_index(j);
+16535:       const N& eps_i_j = (i == cj) ? temp_two : temp_one;
+16535: 
+16535:       add_assign_r(lhs_i_j, tx_i_j, eps_i_j, ROUND_NOT_NEEDED);
+16535:       if (lhs_i_j > ty_i[j]) {
+16535:         continue;
+16535:       }
+16535:       const dimension_type row_size_cj = OR_Matrix<N>::row_size(cj);
+16535:       row_reference ub_cj = *(ub_m_begin + cj);
+16535:       const N& ub_cj_j = ub_cj[j];
+16535:       for (dimension_type k = 0; k < n_rows; ++k) {
+16535:         const Bit_Row& ty_non_red_k = ty_non_red[k];
+16535:         const dimension_type ck = coherent_index(k);
+16535:         const dimension_type row_size_k = OR_Matrix<N>::row_size(k);
+16535:         row_reference tx_k = *(tx_m_begin + k);
+16535:         row_reference ty_k = *(ty_m_begin + k);
+16535:         row_reference ub_k = *(ub_m_begin + k);
+16535:         const N& ub_k_ck = ub_k[ck];
+16535: 
+16535: 
+16535: 
+16535:         const N& ub_k_j
+16535:           = (k == j)
+16535:           ? temp_zero
+16535:           : ((j < row_size_k) ? ub_k[j] : ub_cj[ck]);
+16535:         const N& ub_i_ck
+16535:           = (i == ck)
+16535:           ? temp_zero
+16535:           : ((ck < row_size_i) ? ub_i[ck] : ub_k[ci]);
+16535: 
+16535:         for (dimension_type ell = row_size_k; ell-- > 0; ) {
+16535: 
+16535:           if (!ty_non_red_k[ell]) {
+16535:             continue;
+16535:           }
+16535:           const N& ty_k_ell = ty_k[ell];
+16535:           const dimension_type cell = coherent_index(ell);
+16535:           const N& eps_k_ell = (k == cell) ? temp_two : temp_one;
+16535: 
+16535:           add_assign_r(lhs_k_ell, ty_k_ell, eps_k_ell, ROUND_NOT_NEEDED);
+16535:           if (lhs_k_ell > tx_k[ell]) {
+16535:             continue;
+16535:           }
+16535:           row_reference ub_cell = *(ub_m_begin + cell);
+16535:           const N& ub_i_ell
+16535:             = (i == ell)
+16535:             ? temp_zero
+16535:             : ((ell < row_size_i) ? ub_i[ell] : ub_cell[ci]);
+16535:           const N& ub_cj_ell
+16535:             = (cj == ell)
+16535:             ? temp_zero
+16535:             : ((ell < row_size_cj) ? ub_cj[ell] : ub_cell[j]);
+16535: 
+16535:           add_assign_r(lhs, lhs_i_j, lhs_k_ell, ROUND_NOT_NEEDED);
+16535:           add_assign_r(rhs, ub_i_ell, ub_k_j, ROUND_NOT_NEEDED);
+16535:           if (lhs > rhs) {
+16535:             continue;
+16535:           }
+16535: 
+16535:           add_assign_r(rhs, ub_i_ck, ub_cj_ell, ROUND_NOT_NEEDED);
+16535:           if (lhs > rhs) {
+16535:             continue;
+16535:           }
+16535: 
+16535:           assign_r(lhs_copy, lhs, ROUND_NOT_NEEDED);
+16535:           add_assign_r(lhs, lhs, lhs_i_j, ROUND_NOT_NEEDED);
+16535:           add_assign_r(rhs, ub_i_ell, ub_i_ck, ROUND_NOT_NEEDED);
+16535:           add_assign_r(rhs, rhs, ub_cj_j, ROUND_NOT_NEEDED);
+16535:           if (lhs > rhs) {
+16535:             continue;
+16535:           }
+16535: 
+16535:           add_assign_r(rhs, ub_k_j, ub_cj_ell, ROUND_NOT_NEEDED);
+16535:           add_assign_r(rhs, rhs, ub_i_ci, ROUND_NOT_NEEDED);
+16535:           if (lhs > rhs) {
+16535:             continue;
+16535:           }
+16535: 
+16535:           add_assign_r(lhs, lhs_copy, lhs_k_ell, ROUND_NOT_NEEDED);
+16535:           add_assign_r(rhs, ub_i_ell, ub_cj_ell, ROUND_NOT_NEEDED);
+16535:           add_assign_r(rhs, rhs, ub_k_ck, ROUND_NOT_NEEDED);
+16535:           if (lhs > rhs) {
+16535:             continue;
+16535:           }
+16535: 
+16535:           add_assign_r(rhs, ub_k_j, ub_i_ck, ROUND_NOT_NEEDED);
+16535:           add_assign_r(rhs, rhs, ub_cell[ell], ROUND_NOT_NEEDED);
+16535:           if (lhs <= rhs) {
+16535: 
+16535: 
+16535:             return false;
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   m_swap(ub);
+16535:   ((void) 0);
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::drop_some_non_integer_points(Complexity_Class) {
+16535:   if (std::numeric_limits<T>::is_integer) {
+16535:     return;
+16535:   }
+16535: 
+16535:   strong_closure_assign();
+16535:   if (space_dim == 0 || marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   for (typename OR_Matrix<N>::element_iterator i = matrix.element_begin(),
+16535:          i_end = matrix.element_end(); i != i_end; ++i) {
+16535:     drop_some_non_integer_points_helper(*i);
+16535:   }
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_temp_one; N& temp_one = holder_temp_one.item();
+16535:   assign_r(temp_one, 1, ROUND_NOT_NEEDED);
+16535:   for (dimension_type i = 0; i < 2*space_dim; i += 2) {
+16535:     const dimension_type ci = i + 1;
+16535:     N& mat_i_ci = matrix[i][ci];
+16535:     if (!is_plus_infinity(mat_i_ci) && !is_even(mat_i_ci)) {
+16535:       sub_assign_r(mat_i_ci, mat_i_ci, temp_one, ROUND_UP);
+16535:       reset_strongly_closed();
+16535:     }
+16535:     N& mat_ci_i = matrix[ci][i];
+16535:     if (!is_plus_infinity(mat_ci_i) && !is_even(mat_ci_i)) {
+16535:       sub_assign_r(mat_ci_i, mat_ci_i, temp_one, ROUND_UP);
+16535:       reset_strongly_closed();
+16535:     }
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>
+16535: ::drop_some_non_integer_points(const Variables_Set& vars,
+16535:                                Complexity_Class) {
+16535: 
+16535:   const dimension_type min_space_dim = vars.space_dimension();
+16535:   if (space_dimension() < min_space_dim) {
+16535:     throw_dimension_incompatible("drop_some_non_integer_points(vs, cmpl)",
+16535:                                  min_space_dim);
+16535:   }
+16535: 
+16535:   if (std::numeric_limits<T>::is_integer || min_space_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535:   strong_closure_assign();
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_temp_one; N& temp_one = holder_temp_one.item();
+16535:   assign_r(temp_one, 1, ROUND_NOT_NEEDED);
+16535: 
+16535:   const Variables_Set::const_iterator v_begin = vars.begin();
+16535:   const Variables_Set::const_iterator v_end = vars.end();
+16535:   ((void) 0);
+16535:   typedef typename OR_Matrix<N>::row_reference_type row_reference;
+16535:   for (Variables_Set::const_iterator v_i = v_begin; v_i != v_end; ++v_i) {
+16535:     const dimension_type i = 2 * (*v_i);
+16535:     const dimension_type ci = i + 1;
+16535:     row_reference m_i = matrix[i];
+16535:     row_reference m_ci = matrix[ci];
+16535: 
+16535: 
+16535:     N& m_i_ci = m_i[ci];
+16535:     if (!is_plus_infinity(m_i_ci)) {
+16535:       drop_some_non_integer_points_helper(m_i_ci);
+16535:       if (!is_even(m_i_ci)) {
+16535:         sub_assign_r(m_i_ci, m_i_ci, temp_one, ROUND_UP);
+16535:         reset_strongly_closed();
+16535:       }
+16535:     }
+16535:     N& m_ci_i = m_ci[i];
+16535:     if (!is_plus_infinity(m_ci_i)) {
+16535:       drop_some_non_integer_points_helper(m_ci_i);
+16535:       if (!is_even(m_ci_i)) {
+16535:         sub_assign_r(m_ci_i, m_ci_i, temp_one, ROUND_UP);
+16535:         reset_strongly_closed();
+16535:       }
+16535:     }
+16535: 
+16535: 
+16535:     for (Variables_Set::const_iterator v_j = v_begin; v_j != v_i; ++v_j) {
+16535:       const dimension_type j = 2 * (*v_j);
+16535:       const dimension_type cj = j + 1;
+16535:       drop_some_non_integer_points_helper(m_i[j]);
+16535:       drop_some_non_integer_points_helper(m_i[cj]);
+16535:       drop_some_non_integer_points_helper(m_ci[j]);
+16535:       drop_some_non_integer_points_helper(m_ci[cj]);
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: void
+16535: Octagonal_Shape<T>
+16535: ::export_interval_constraints(U& dest) const {
+16535:   if (space_dim > dest.space_dimension()) {
+16535:     throw std::invalid_argument(
+16535:                "Octagonal_Shape<T>::export_interval_constraints");
+16535:   }
+16535: 
+16535:   strong_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     dest.set_empty();
+16535:     return;
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_lb; N& lb = holder_lb.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_ub; N& ub = holder_ub.item();
+16535:   for (dimension_type i = space_dim; i-- > 0; ) {
+16535:     const dimension_type ii = 2*i;
+16535:     const dimension_type cii = ii + 1;
+16535: 
+16535: 
+16535:     const N& twice_ub = matrix[cii][ii];
+16535:     if (!is_plus_infinity(twice_ub)) {
+16535:       assign_r(ub, twice_ub, ROUND_NOT_NEEDED);
+16535:       div_2exp_assign_r(ub, ub, 1, ROUND_UP);
+16535: 
+16535:       if (!dest.restrict_upper(i, ub.raw_value())) {
+16535:         return;
+16535:       }
+16535:     }
+16535: 
+16535: 
+16535:     const N& twice_lb = matrix[ii][cii];
+16535:     if (!is_plus_infinity(twice_lb)) {
+16535:       assign_r(lb, twice_lb, ROUND_NOT_NEEDED);
+16535:       neg_assign_r(lb, lb, ROUND_NOT_NEEDED);
+16535:       div_2exp_assign_r(lb, lb, 1, ROUND_DOWN);
+16535: 
+16535:       if (!dest.restrict_lower(i, lb.raw_value())) {
+16535:         return;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: std::ostream&
+16535: IO_Operators::operator<<(std::ostream& s, const Octagonal_Shape<T>& oct) {
+16535: 
+16535:   if (oct.marked_empty()) {
+16535:     s << "false";
+16535:     return s;
+16535:   }
+16535:   if (oct.is_universe()) {
+16535:     s << "true";
+16535:     return s;
+16535:   }
+16535: 
+16535:   typedef typename Octagonal_Shape<T>::coefficient_type N;
+16535:   typedef typename OR_Matrix<N>::const_row_iterator row_iterator;
+16535:   typedef typename OR_Matrix<N>::const_row_reference_type row_reference;
+16535: 
+16535: 
+16535:   bool first = true;
+16535: 
+16535:   row_iterator m_begin = oct.matrix.row_begin();
+16535:   row_iterator m_end = oct.matrix.row_end();
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_negation; N& negation = holder_negation.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_half; N& half = holder_half.item();
+16535: 
+16535: 
+16535:   for (row_iterator i_iter = m_begin; i_iter != m_end; ) {
+16535:     const dimension_type i = i_iter.index();
+16535:     const Variable v_i(i/2);
+16535:     const N& c_i_ii = (*i_iter)[i + 1];
+16535:     ++i_iter;
+16535:     const N& c_ii_i = (*i_iter)[i];
+16535:     ++i_iter;
+16535: 
+16535:     if (is_additive_inverse(c_i_ii, c_ii_i)) {
+16535: 
+16535:       ((void) 0);
+16535:       if (first) {
+16535:         first = false;
+16535:       }
+16535:       else {
+16535:         s << ", ";
+16535:       }
+16535: 
+16535: 
+16535:       if (div_2exp_assign_r(half, c_ii_i, 1,
+16535:                             ROUND_UP | ROUND_STRICT_RELATION)
+16535:           == V_EQ) {
+16535:         s << v_i << " = " << half;
+16535:       }
+16535:       else {
+16535:         s << "2*" << v_i << " = " << c_ii_i;
+16535:       }
+16535:     }
+16535:     else {
+16535: 
+16535:       if (!is_plus_infinity(c_i_ii)) {
+16535:         if (first) {
+16535:           first = false;
+16535:         }
+16535:         else {
+16535:           s << ", ";
+16535:         }
+16535:         neg_assign_r(negation, c_i_ii, ROUND_NOT_NEEDED);
+16535: 
+16535: 
+16535:         if (div_2exp_assign_r(half, negation, 1,
+16535:                               ROUND_UP | ROUND_STRICT_RELATION)
+16535:             == V_EQ) {
+16535:           s << v_i << " >= " << half;
+16535:         }
+16535:         else {
+16535:           s << "2*" << v_i << " >= " << negation;
+16535:         }
+16535:       }
+16535:       if (!is_plus_infinity(c_ii_i)) {
+16535:         if (first) {
+16535:           first = false;
+16535:         }
+16535:         else {
+16535:           s << ", ";
+16535:         }
+16535: 
+16535: 
+16535:         if (div_2exp_assign_r(half, c_ii_i, 1,
+16535:                               ROUND_UP | ROUND_STRICT_RELATION)
+16535:             == V_EQ) {
+16535:           s << v_i << " <= " << half;
+16535:         }
+16535:         else {
+16535:           s << "2*" << v_i << " <= " << c_ii_i;
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   for (row_iterator i_iter = m_begin; i_iter != m_end; ) {
+16535:     const dimension_type i = i_iter.index();
+16535:     const Variable v_i(i/2);
+16535:     row_reference r_i = *i_iter;
+16535:     ++i_iter;
+16535:     row_reference r_ii = *i_iter;
+16535:     ++i_iter;
+16535: 
+16535:     for (dimension_type j = 0; j < i; j += 2) {
+16535:       const Variable v_j(j/2);
+16535: 
+16535:       const N& c_ii_jj = r_ii[j + 1];
+16535:       const N& c_i_j = r_i[j];
+16535: 
+16535:       if (is_additive_inverse(c_ii_jj, c_i_j)) {
+16535: 
+16535:         ((void) 0);
+16535:         if (first) {
+16535:           first = false;
+16535:         }
+16535:         else {
+16535:           s << ", ";
+16535:         }
+16535:         if (sgn(c_i_j) >= 0) {
+16535:           s << v_j << " - " << v_i << " = " << c_i_j;
+16535:         }
+16535:         else {
+16535:           s << v_i << " - " << v_j << " = " << c_ii_jj;
+16535:         }
+16535:       }
+16535:       else {
+16535: 
+16535:         if (!is_plus_infinity(c_i_j)) {
+16535:           if (first) {
+16535:             first = false;
+16535:           }
+16535:           else {
+16535:             s << ", ";
+16535:           }
+16535:           if (sgn(c_i_j) >= 0) {
+16535:             s << v_j << " - " << v_i << " <= " << c_i_j;
+16535:           }
+16535:           else {
+16535:             neg_assign_r(negation, c_i_j, ROUND_DOWN);
+16535:             s << v_i << " - " << v_j << " >= " << negation;
+16535:           }
+16535:         }
+16535:         if (!is_plus_infinity(c_ii_jj)) {
+16535:           if (first) {
+16535:             first = false;
+16535:           }
+16535:           else {
+16535:             s << ", ";
+16535:           }
+16535:           if (sgn(c_ii_jj) >= 0) {
+16535:             s << v_i << " - " << v_j << " <= " << c_ii_jj;
+16535:           }
+16535:           else {
+16535:             neg_assign_r(negation, c_ii_jj, ROUND_DOWN);
+16535:             s << v_j << " - " << v_i << " >= " << negation;
+16535:           }
+16535:         }
+16535:       }
+16535: 
+16535:       const N& c_i_jj = r_i[j + 1];
+16535:       const N& c_ii_j = r_ii[j];
+16535: 
+16535:       if (is_additive_inverse(c_i_jj, c_ii_j)) {
+16535: 
+16535:         ((void) 0);
+16535:         if (first) {
+16535:           first = false;
+16535:         }
+16535:         else {
+16535:           s << ", ";
+16535:         }
+16535:         s << v_j << " + " << v_i << " = " << c_ii_j;
+16535:       }
+16535:       else {
+16535: 
+16535:         if (!is_plus_infinity(c_i_jj)) {
+16535:           if (first) {
+16535:             first = false;
+16535:           }
+16535:           else {
+16535:             s << ", ";
+16535:           }
+16535:           neg_assign_r(negation, c_i_jj, ROUND_DOWN);
+16535:           s << v_j << " + " << v_i << " >= " << negation;
+16535:         }
+16535:         if (!is_plus_infinity(c_ii_j)) {
+16535:           if (first) {
+16535:             first = false;
+16535:           }
+16535:           else {
+16535:             s << ", ";
+16535:           }
+16535:           s << v_j << " + " << v_i << " <= " << c_ii_j;
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535:   return s;
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::ascii_dump(std::ostream& s) const {
+16535:   s << "space_dim "
+16535:     << space_dim
+16535:     << "\n";
+16535:   status.ascii_dump(s);
+16535:   s << "\n";
+16535:   matrix.ascii_dump(s);
+16535: }
+16535: 
+16535: template <typename T> void Octagonal_Shape<T>::ascii_dump() const { ascii_dump(std::cerr); } template <typename T> void Octagonal_Shape<T>::print() const { using IO_Operators::operator<<; std::cerr << *this; }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: Octagonal_Shape<T>::ascii_load(std::istream& s) {
+16535:   std::string str;
+16535: 
+16535:   if (!(s >> str) || str != "space_dim") {
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (!(s >> space_dim)) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (!status.ascii_load(s)) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (!matrix.ascii_load(s)) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename T>
+16535: memory_size_type
+16535: Octagonal_Shape<T>::external_memory_in_bytes() const {
+16535:   return matrix.external_memory_in_bytes();
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: Octagonal_Shape<T>::OK() const {
+16535: 
+16535:   if (!matrix.OK()) {
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535:   if (!status.OK()) {
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   for (typename OR_Matrix<N>::const_row_iterator i = matrix.row_begin(),
+16535:          matrix_row_end = matrix.row_end(); i != matrix_row_end; ++i) {
+16535:     typename OR_Matrix<N>::const_row_reference_type x_i = *i;
+16535:     for (dimension_type j = i.row_size(); j-- > 0; ) {
+16535:       if (is_minus_infinity(x_i[j])) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:         return false;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   for (typename OR_Matrix<N>::const_row_iterator i = matrix.row_begin(),
+16535:          m_end = matrix.row_end(); i != m_end; ++i) {
+16535:     typename OR_Matrix<N>::const_row_reference_type r = *i;
+16535:     const N& m_i_i = r[i.index()];
+16535:     if (!is_plus_infinity(m_i_i)) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       return false;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (std::numeric_limits<coefficient_type_base>::is_exact) {
+16535: 
+16535: 
+16535:     if (marked_strongly_closed()) {
+16535:       Octagonal_Shape x = *this;
+16535:       x.reset_strongly_closed();
+16535:       x.strong_closure_assign();
+16535:       if (x.matrix != matrix) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:         return false;
+16535:       }
+16535:     }
+16535: 
+16535: 
+16535:     if (marked_strongly_closed()) {
+16535:       if (!is_strong_coherent()) {
+16535: 
+16535: 
+16535: 
+16535:         return false;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   return true;
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>
+16535: ::throw_dimension_incompatible(const char* method,
+16535:                                const Octagonal_Shape& y) const {
+16535:   std::ostringstream s;
+16535:   s << "PPL::Octagonal_Shape::" << method << ":\n"
+16535:     << "this->space_dimension() == " << space_dimension()
+16535:     << ", y->space_dimension() == " << y.space_dimension() << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>
+16535: ::throw_dimension_incompatible(const char* method,
+16535:                                dimension_type required_dim) const {
+16535:   std::ostringstream s;
+16535:   s << "PPL::Octagonal_Shape::" << method << ":\n"
+16535:     << "this->space_dimension() == " << space_dimension()
+16535:     << ", required dimension == " << required_dim << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::throw_dimension_incompatible(const char* method,
+16535:                                                  const Constraint& c) const {
+16535:   std::ostringstream s;
+16535:   s << "PPL::Octagonal_Shape::" << method << ":\n"
+16535:     << "this->space_dimension() == " << space_dimension()
+16535:     << ", c->space_dimension == " << c.space_dimension() << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::throw_dimension_incompatible(const char* method,
+16535:                                                  const Congruence& cg) const {
+16535:   std::ostringstream s;
+16535:   s << "PPL::Octagonal_Shape::" << method << ":\n"
+16535:     << "this->space_dimension() == " << space_dimension()
+16535:     << ", cg->space_dimension == " << cg.space_dimension() << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::throw_dimension_incompatible(const char* method,
+16535:                                                  const Generator& g) const {
+16535:   std::ostringstream s;
+16535:   s << "PPL::Octagonal_Shape::" << method << ":\n"
+16535:     << "this->space_dimension() == " << space_dimension()
+16535:     << ", g->space_dimension == " << g.space_dimension() << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::throw_constraint_incompatible(const char* method) {
+16535:   std::ostringstream s;
+16535:   s << "PPL::Octagonal_Shape::" << method << ":\n"
+16535:     << "the constraint is incompatible.";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::throw_expression_too_complex(const char* method,
+16535:                                                  const Linear_Expression& le) {
+16535:   using namespace IO_Operators;
+16535:   std::ostringstream s;
+16535:   s << "PPL::Octagonal_Shape::" << method << ":\n"
+16535:     << le << " is too complex.";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>
+16535: ::throw_dimension_incompatible(const char* method,
+16535:                                const char* le_name,
+16535:                                const Linear_Expression& le) const {
+16535:   std::ostringstream s;
+16535:   s << "PPL::Octagonal_Shape::" << method << ":\n"
+16535:     << "this->space_dimension() == " << space_dimension()
+16535:     << ", " << le_name << "->space_dimension() == "
+16535:     << le.space_dimension() << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename C>
+16535: void
+16535: Octagonal_Shape<T>
+16535: ::throw_dimension_incompatible(const char* method,
+16535:                                const char* lf_name,
+16535:                                const Linear_Form<C>& lf) const {
+16535:   std::ostringstream s;
+16535:   s << "PPL::Octagonal_Shape::" << method << ":\n"
+16535:     << "this->space_dimension() == " << space_dimension()
+16535:     << ", " << lf_name << "->space_dimension() == "
+16535:     << lf.space_dimension() << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: Octagonal_Shape<T>::throw_invalid_argument(const char* method,
+16535:                                            const char* reason) {
+16535:   std::ostringstream s;
+16535:   s << "PPL::Octagonal_Shape::" << method << ":\n"
+16535:     << reason << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: }
+16535: # 2329 "../../src/Octagonal_Shape_defs.hh" 2
+16535: # 32 "../../src/BD_Shape_inlines.hh" 2
+16535: # 42 "../../src/BD_Shape_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: BD_Shape<T>::max_space_dimension() {
+16535: 
+16535: 
+16535:   return std::min(DB_Matrix<N>::max_num_rows() - 1,
+16535:                   DB_Matrix<N>::max_num_columns() - 1);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::marked_zero_dim_univ() const {
+16535:   return status.test_zero_dim_univ();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::marked_empty() const {
+16535:   return status.test_empty();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::marked_shortest_path_closed() const {
+16535:   return status.test_shortest_path_closed();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::marked_shortest_path_reduced() const {
+16535:   return status.test_shortest_path_reduced();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::set_zero_dim_univ() {
+16535:   status.set_zero_dim_univ();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::set_empty() {
+16535:   status.set_empty();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::set_shortest_path_closed() {
+16535:   status.set_shortest_path_closed();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::set_shortest_path_reduced() {
+16535:   status.set_shortest_path_reduced();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::reset_shortest_path_closed() {
+16535:   status.reset_shortest_path_closed();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::reset_shortest_path_reduced() {
+16535:   status.reset_shortest_path_reduced();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: BD_Shape<T>::BD_Shape(const dimension_type num_dimensions,
+16535:                       const Degenerate_Element kind)
+16535:   : dbm(num_dimensions + 1), status(), redundancy_dbm() {
+16535:   if (kind == EMPTY) {
+16535:     set_empty();
+16535:   }
+16535:   else {
+16535:     if (num_dimensions > 0) {
+16535: 
+16535:       set_shortest_path_closed();
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: BD_Shape<T>::BD_Shape(const BD_Shape& y, Complexity_Class)
+16535:   : dbm(y.dbm), status(y.status), redundancy_dbm() {
+16535:   if (y.marked_shortest_path_reduced()) {
+16535:     redundancy_dbm = y.redundancy_dbm;
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline
+16535: BD_Shape<T>::BD_Shape(const BD_Shape<U>& y, Complexity_Class)
+16535: 
+16535: 
+16535:   : dbm((y.shortest_path_closure_assign(), y.dbm)),
+16535:     status(),
+16535:     redundancy_dbm() {
+16535: 
+16535:   if (y.marked_empty()) {
+16535:     set_empty();
+16535:   }
+16535:   else if (y.marked_zero_dim_univ()) {
+16535:     set_zero_dim_univ();
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline Congruence_System
+16535: BD_Shape<T>::congruences() const {
+16535:   return minimized_congruences();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::add_constraints(const Constraint_System& cs) {
+16535:   for (Constraint_System::const_iterator i = cs.begin(),
+16535:          cs_end = cs.end(); i != cs_end; ++i) {
+16535:     add_constraint(*i);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::add_recycled_constraints(Constraint_System& cs) {
+16535:   add_constraints(cs);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::add_congruences(const Congruence_System& cgs) {
+16535:   for (Congruence_System::const_iterator i = cgs.begin(),
+16535:          cgs_end = cgs.end(); i != cgs_end; ++i) {
+16535:     add_congruence(*i);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::add_recycled_congruences(Congruence_System& cgs) {
+16535:   add_congruences(cgs);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::refine_with_constraint(const Constraint& c) {
+16535:   const dimension_type c_space_dim = c.space_dimension();
+16535: 
+16535:   if (c_space_dim > space_dimension()) {
+16535:     throw_dimension_incompatible("refine_with_constraint(c)", c);
+16535:   }
+16535: 
+16535:   if (!marked_empty()) {
+16535:     refine_no_check(c);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::refine_with_constraints(const Constraint_System& cs) {
+16535: 
+16535:   if (cs.space_dimension() > space_dimension()) {
+16535:     throw_invalid_argument("refine_with_constraints(cs)",
+16535:                            "cs and *this are space-dimension incompatible");
+16535:   }
+16535: 
+16535:   for (Constraint_System::const_iterator i = cs.begin(),
+16535:          cs_end = cs.end(); !marked_empty() && i != cs_end; ++i) {
+16535:     refine_no_check(*i);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::refine_with_congruence(const Congruence& cg) {
+16535:   const dimension_type cg_space_dim = cg.space_dimension();
+16535: 
+16535:   if (cg_space_dim > space_dimension()) {
+16535:     throw_dimension_incompatible("refine_with_congruence(cg)", cg);
+16535:   }
+16535: 
+16535:   if (!marked_empty()) {
+16535:     refine_no_check(cg);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::refine_with_congruences(const Congruence_System& cgs) {
+16535: 
+16535:   if (cgs.space_dimension() > space_dimension()) {
+16535:     throw_invalid_argument("refine_with_congruences(cgs)",
+16535:                            "cgs and *this are space-dimension incompatible");
+16535:   }
+16535: 
+16535:   for (Congruence_System::const_iterator i = cgs.begin(),
+16535:          cgs_end = cgs.end(); !marked_empty() && i != cgs_end; ++i) {
+16535:     refine_no_check(*i);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::refine_no_check(const Congruence& cg) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535:   if (cg.is_proper_congruence()) {
+16535:     if (cg.is_inconsistent()) {
+16535:       set_empty();
+16535:     }
+16535: 
+16535:     return;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   Constraint c(cg);
+16535:   refine_no_check(c);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::can_recycle_constraint_systems() {
+16535:   return false;
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::can_recycle_congruence_systems() {
+16535:   return false;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: BD_Shape<T>::BD_Shape(const Constraint_System& cs)
+16535:   : dbm(cs.space_dimension() + 1), status(), redundancy_dbm() {
+16535:   if (cs.space_dimension() > 0) {
+16535: 
+16535:     set_shortest_path_closed();
+16535:   }
+16535:   add_constraints(cs);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Interval>
+16535: inline
+16535: BD_Shape<T>::BD_Shape(const Box<Interval>& box,
+16535:                       Complexity_Class)
+16535:   : dbm(box.space_dimension() + 1), status(), redundancy_dbm() {
+16535: 
+16535:   if (box.is_empty()) {
+16535:     set_empty();
+16535:   }
+16535:   else if (box.space_dimension() > 0) {
+16535: 
+16535:     set_shortest_path_closed();
+16535:     refine_with_constraints(box.constraints());
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: BD_Shape<T>::BD_Shape(const Grid& grid,
+16535:                       Complexity_Class)
+16535:   : dbm(grid.space_dimension() + 1), status(), redundancy_dbm() {
+16535:   if (grid.space_dimension() > 0) {
+16535: 
+16535:     set_shortest_path_closed();
+16535:   }
+16535: 
+16535:   refine_with_congruences(grid.minimized_congruences());
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: inline
+16535: BD_Shape<T>::BD_Shape(const Octagonal_Shape<U>& os,
+16535:                       Complexity_Class)
+16535:   : dbm(os.space_dimension() + 1), status(), redundancy_dbm() {
+16535: 
+16535:   if (os.is_empty()) {
+16535:     set_empty();
+16535:   }
+16535:   else if (os.space_dimension() > 0) {
+16535: 
+16535:     set_shortest_path_closed();
+16535:     refine_with_constraints(os.constraints());
+16535: 
+16535: 
+16535: 
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline BD_Shape<T>&
+16535: BD_Shape<T>::operator=(const BD_Shape& y) {
+16535:   dbm = y.dbm;
+16535:   status = y.status;
+16535:   if (y.marked_shortest_path_reduced()) {
+16535:     redundancy_dbm = y.redundancy_dbm;
+16535:   }
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: BD_Shape<T>::~BD_Shape() {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::m_swap(BD_Shape& y) {
+16535:   using std::swap;
+16535:   swap(dbm, y.dbm);
+16535:   swap(status, y.status);
+16535:   swap(redundancy_dbm, y.redundancy_dbm);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline dimension_type
+16535: BD_Shape<T>::space_dimension() const {
+16535:   return dbm.num_rows() - 1;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::is_empty() const {
+16535:   shortest_path_closure_assign();
+16535:   return marked_empty();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::bounds_from_above(const Linear_Expression& expr) const {
+16535:   return bounds(expr, true);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::bounds_from_below(const Linear_Expression& expr) const {
+16535:   return bounds(expr, false);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::maximize(const Linear_Expression& expr,
+16535:                       Coefficient& sup_n, Coefficient& sup_d,
+16535:                       bool& maximum) const {
+16535:   return max_min(expr, true, sup_n, sup_d, maximum);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::maximize(const Linear_Expression& expr,
+16535:                       Coefficient& sup_n, Coefficient& sup_d, bool& maximum,
+16535:                       Generator& g) const {
+16535:   return max_min(expr, true, sup_n, sup_d, maximum, g);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::minimize(const Linear_Expression& expr,
+16535:                       Coefficient& inf_n, Coefficient& inf_d,
+16535:                       bool& minimum) const {
+16535:   return max_min(expr, false, inf_n, inf_d, minimum);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::minimize(const Linear_Expression& expr,
+16535:                       Coefficient& inf_n, Coefficient& inf_d, bool& minimum,
+16535:                       Generator& g) const {
+16535:   return max_min(expr, false, inf_n, inf_d, minimum, g);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::is_topologically_closed() const {
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::is_discrete() const {
+16535:   return affine_dimension() == 0;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::topological_closure_assign() {
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: operator==(const BD_Shape<T>& x, const BD_Shape<T>& y) {
+16535:   const dimension_type x_space_dim = x.space_dimension();
+16535: 
+16535:   if (x_space_dim != y.space_dimension()) {
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535:   if (x_space_dim == 0) {
+16535:     if (x.marked_empty()) {
+16535:       return y.marked_empty();
+16535:     }
+16535:     else {
+16535:       return !y.marked_empty();
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   x.shortest_path_closure_assign();
+16535:   y.shortest_path_closure_assign();
+16535: 
+16535: 
+16535: 
+16535:   if (x.marked_empty()) {
+16535:     return y.marked_empty();
+16535:   }
+16535:   if (y.marked_empty()) {
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535:   return x.dbm == y.dbm;
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: operator!=(const BD_Shape<T>& x, const BD_Shape<T>& y) {
+16535:   return !(x == y);
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename T>
+16535: inline bool
+16535: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                             const BD_Shape<T>& x,
+16535:                             const BD_Shape<T>& y,
+16535:                             const Rounding_Dir dir,
+16535:                             Temp& tmp0,
+16535:                             Temp& tmp1,
+16535:                             Temp& tmp2) {
+16535:   const dimension_type x_space_dim = x.space_dimension();
+16535: 
+16535:   if (x_space_dim != y.space_dimension()) {
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535:   if (x_space_dim == 0) {
+16535:     if (x.marked_empty() == y.marked_empty()) {
+16535:       assign_r(r, 0, ROUND_NOT_NEEDED);
+16535:     }
+16535:     else {
+16535:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     }
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   x.shortest_path_closure_assign();
+16535:   y.shortest_path_closure_assign();
+16535: 
+16535: 
+16535: 
+16535:   if (x.marked_empty() || y.marked_empty()) {
+16535:     if (x.marked_empty() == y.marked_empty()) {
+16535:       assign_r(r, 0, ROUND_NOT_NEEDED);
+16535:     }
+16535:     else {
+16535:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     }
+16535:     return true;
+16535:   }
+16535: 
+16535:   return rectilinear_distance_assign(r, x.dbm, y.dbm, dir, tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename T>
+16535: inline bool
+16535: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                             const BD_Shape<T>& x,
+16535:                             const BD_Shape<T>& y,
+16535:                             const Rounding_Dir dir) {
+16535:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
+16535:   return rectilinear_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename To, typename T>
+16535: inline bool
+16535: rectilinear_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                             const BD_Shape<T>& x,
+16535:                             const BD_Shape<T>& y,
+16535:                             const Rounding_Dir dir) {
+16535:   return rectilinear_distance_assign<To, To, T>(r, x, y, dir);
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename T>
+16535: inline bool
+16535: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                           const BD_Shape<T>& x,
+16535:                           const BD_Shape<T>& y,
+16535:                           const Rounding_Dir dir,
+16535:                           Temp& tmp0,
+16535:                           Temp& tmp1,
+16535:                           Temp& tmp2) {
+16535:   const dimension_type x_space_dim = x.space_dimension();
+16535: 
+16535:   if (x_space_dim != y.space_dimension()) {
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535:   if (x_space_dim == 0) {
+16535:     if (x.marked_empty() == y.marked_empty()) {
+16535:       assign_r(r, 0, ROUND_NOT_NEEDED);
+16535:     }
+16535:     else {
+16535:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     }
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   x.shortest_path_closure_assign();
+16535:   y.shortest_path_closure_assign();
+16535: 
+16535: 
+16535: 
+16535:   if (x.marked_empty() || y.marked_empty()) {
+16535:     if (x.marked_empty() == y.marked_empty()) {
+16535:       assign_r(r, 0, ROUND_NOT_NEEDED);
+16535:     }
+16535:     else {
+16535:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     }
+16535:     return true;
+16535:   }
+16535: 
+16535:   return euclidean_distance_assign(r, x.dbm, y.dbm, dir, tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename T>
+16535: inline bool
+16535: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                           const BD_Shape<T>& x,
+16535:                           const BD_Shape<T>& y,
+16535:                           const Rounding_Dir dir) {
+16535:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
+16535:   return euclidean_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename To, typename T>
+16535: inline bool
+16535: euclidean_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                           const BD_Shape<T>& x,
+16535:                           const BD_Shape<T>& y,
+16535:                           const Rounding_Dir dir) {
+16535:   return euclidean_distance_assign<To, To, T>(r, x, y, dir);
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename T>
+16535: inline bool
+16535: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                            const BD_Shape<T>& x,
+16535:                            const BD_Shape<T>& y,
+16535:                            const Rounding_Dir dir,
+16535:                            Temp& tmp0,
+16535:                            Temp& tmp1,
+16535:                            Temp& tmp2) {
+16535:   const dimension_type x_space_dim = x.space_dimension();
+16535: 
+16535:   if (x_space_dim != y.space_dimension()) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (x_space_dim == 0) {
+16535:     if (x.marked_empty() == y.marked_empty()) {
+16535:       assign_r(r, 0, ROUND_NOT_NEEDED);
+16535:     }
+16535:     else {
+16535:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     }
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   x.shortest_path_closure_assign();
+16535:   y.shortest_path_closure_assign();
+16535: 
+16535: 
+16535: 
+16535:   if (x.marked_empty() || y.marked_empty()) {
+16535:     if (x.marked_empty() == y.marked_empty()) {
+16535:       assign_r(r, 0, ROUND_NOT_NEEDED);
+16535:     }
+16535:     else {
+16535:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     }
+16535:     return true;
+16535:   }
+16535: 
+16535:   return l_infinity_distance_assign(r, x.dbm, y.dbm, dir, tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename Temp, typename To, typename T>
+16535: inline bool
+16535: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                            const BD_Shape<T>& x,
+16535:                            const BD_Shape<T>& y,
+16535:                            const Rounding_Dir dir) {
+16535:   typedef Checked_Number<Temp, Extended_Number_Policy> Checked_Temp;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp0; Checked_Temp& tmp0 = holder_tmp0.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp1; Checked_Temp& tmp1 = holder_tmp1.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Checked_Temp> holder_tmp2; Checked_Temp& tmp2 = holder_tmp2.item();
+16535:   return l_infinity_distance_assign(r, x, y, dir, tmp0, tmp1, tmp2);
+16535: }
+16535: 
+16535: 
+16535: template <typename To, typename T>
+16535: inline bool
+16535: l_infinity_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                            const BD_Shape<T>& x,
+16535:                            const BD_Shape<T>& y,
+16535:                            const Rounding_Dir dir) {
+16535:   return l_infinity_distance_assign<To, To, T>(r, x, y, dir);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::add_dbm_constraint(const dimension_type i,
+16535:                                 const dimension_type j,
+16535:                                 const N& k) {
+16535: 
+16535:   ((void) 0);
+16535:   N& dbm_ij = dbm[i][j];
+16535:   if (dbm_ij > k) {
+16535:     dbm_ij = k;
+16535:     if (marked_shortest_path_closed()) {
+16535:       reset_shortest_path_closed();
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::add_dbm_constraint(const dimension_type i,
+16535:                                 const dimension_type j,
+16535:                                 Coefficient_traits::const_reference numer,
+16535:                                 Coefficient_traits::const_reference denom) {
+16535: 
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_k; N& k = holder_k.item();
+16535:   div_round_up(k, numer, denom);
+16535:   add_dbm_constraint(i, j, k);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::time_elapse_assign(const BD_Shape& y) {
+16535: 
+16535:   if (space_dimension() != y.space_dimension()) {
+16535:     throw_dimension_incompatible("time_elapse_assign(y)", y);
+16535:   }
+16535: 
+16535: 
+16535:   C_Polyhedron ph_x(constraints());
+16535:   C_Polyhedron ph_y(y.constraints());
+16535:   ph_x.time_elapse_assign(ph_y);
+16535:   BD_Shape<T> x(ph_x);
+16535:   m_swap(x);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::strictly_contains(const BD_Shape& y) const {
+16535:   const BD_Shape<T>& x = *this;
+16535:   return x.contains(y) && !y.contains(x);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::upper_bound_assign_if_exact(const BD_Shape& y) {
+16535:   if (space_dimension() != y.space_dimension()) {
+16535:     throw_dimension_incompatible("upper_bound_assign_if_exact(y)", y);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   const bool integer_upper_bound = false;
+16535:   return BHZ09_upper_bound_assign_if_exact<integer_upper_bound>(y);
+16535: 
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: BD_Shape<T>::integer_upper_bound_assign_if_exact(const BD_Shape& y) {
+16535:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_769 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(std::numeric_limits<T>::is_integer)>) }
+16535: 
+16535:                                                           ;
+16535:   if (space_dimension() != y.space_dimension()) {
+16535:     throw_dimension_incompatible("integer_upper_bound_assign_if_exact(y)", y);
+16535:   }
+16535:   const bool integer_upper_bound = true;
+16535:   return BHZ09_upper_bound_assign_if_exact<integer_upper_bound>(y);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>
+16535: ::remove_higher_space_dimensions(const dimension_type new_dimension) {
+16535: 
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535:   if (new_dimension > space_dim) {
+16535:     throw_dimension_incompatible("remove_higher_space_dimensions(nd)",
+16535:                                  new_dimension);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (new_dimension == space_dim) {
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   shortest_path_closure_assign();
+16535:   dbm.resize_no_copy(new_dimension + 1);
+16535: 
+16535: 
+16535: 
+16535:   if (marked_shortest_path_reduced()) {
+16535:     reset_shortest_path_reduced();
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (new_dimension == 0 && !marked_empty()) {
+16535:     set_zero_dim_univ();
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::wrap_assign(const Variables_Set& vars,
+16535:                          Bounded_Integer_Type_Width w,
+16535:                          Bounded_Integer_Type_Representation r,
+16535:                          Bounded_Integer_Type_Overflow o,
+16535:                          const Constraint_System* cs_p,
+16535:                          unsigned complexity_threshold,
+16535:                          bool wrap_individually) {
+16535:   Implementation::wrap_assign(*this,
+16535:                               vars, w, r, o, cs_p,
+16535:                               complexity_threshold, wrap_individually,
+16535:                               "BD_Shape");
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::CC76_extrapolation_assign(const BD_Shape& y, unsigned* tp) {
+16535:   static N stop_points[] = {
+16535:     N(-2, ROUND_UP),
+16535:     N(-1, ROUND_UP),
+16535:     N( 0, ROUND_UP),
+16535:     N( 1, ROUND_UP),
+16535:     N( 2, ROUND_UP)
+16535:   };
+16535:   CC76_extrapolation_assign(y,
+16535:                             stop_points,
+16535:                             stop_points
+16535:                             + sizeof(stop_points)/sizeof(stop_points[0]),
+16535:                             tp);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::H79_widening_assign(const BD_Shape& y, unsigned* tp) {
+16535: 
+16535: 
+16535:   C_Polyhedron ph_x(constraints());
+16535:   C_Polyhedron ph_y(y.constraints());
+16535:   ph_x.H79_widening_assign(ph_y, tp);
+16535:   BD_Shape x(ph_x);
+16535:   m_swap(x);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::widening_assign(const BD_Shape& y, unsigned* tp) {
+16535:   H79_widening_assign(y, tp);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::limited_H79_extrapolation_assign(const BD_Shape& y,
+16535:                                               const Constraint_System& cs,
+16535:                                               unsigned* tp) {
+16535: 
+16535: 
+16535:   C_Polyhedron ph_x(constraints());
+16535:   C_Polyhedron ph_y(y.constraints());
+16535:   ph_x.limited_H79_extrapolation_assign(ph_y, cs, tp);
+16535:   BD_Shape x(ph_x);
+16535:   m_swap(x);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline memory_size_type
+16535: BD_Shape<T>::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline int32_t
+16535: BD_Shape<T>::hash_code() const {
+16535:   return hash_code_from_dimension(space_dimension());
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Interval_Info>
+16535: inline void
+16535: BD_Shape<T>::generalized_refine_with_linear_form_inequality(
+16535:              const Linear_Form<Interval<T, Interval_Info> >& left,
+16535:              const Linear_Form<Interval<T, Interval_Info> >& right,
+16535:              const Relation_Symbol relsym) {
+16535:   switch (relsym) {
+16535:   case EQUAL:
+16535: 
+16535:     refine_with_linear_form_inequality(left, right);
+16535:     refine_with_linear_form_inequality(right, left);
+16535:     break;
+16535:   case LESS_THAN:
+16535:   case LESS_OR_EQUAL:
+16535:     refine_with_linear_form_inequality(left, right);
+16535:     break;
+16535:   case GREATER_THAN:
+16535:   case GREATER_OR_EQUAL:
+16535:     refine_with_linear_form_inequality(right, left);
+16535:     break;
+16535:   case NOT_EQUAL:
+16535:     break;
+16535:   default:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Interval_Info>
+16535: inline void
+16535: BD_Shape<T>
+16535: ::refine_fp_interval_abstract_store(Box<Interval<T, Interval_Info> >&
+16535:                                     store) const {
+16535: 
+16535: 
+16535:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_931 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<T>::is_exact)>) }
+16535: 
+16535:                                                      ;
+16535: 
+16535:   typedef Interval<T, Interval_Info> FP_Interval_Type;
+16535:   store.intersection_assign(Box<FP_Interval_Type>(*this));
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: BD_Shape<T>::drop_some_non_integer_points_helper(N& elem) {
+16535:   if (!is_integer(elem)) {
+16535:     Result r = floor_assign_r(elem, elem, ROUND_DOWN);
+16535:     (void)(r);
+16535:     ((void) 0);
+16535:     reset_shortest_path_closed();
+16535:   }
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: swap(BD_Shape<T>& x, BD_Shape<T>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 2372 "../../src/BD_Shape_defs.hh" 2
+16535: # 1 "../../src/BD_Shape_templates.hh" 1
+16535: # 47 "../../src/BD_Shape_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename T>
+16535: BD_Shape<T>::BD_Shape(const Congruence_System& cgs)
+16535:   : dbm(cgs.space_dimension() + 1),
+16535:     status(),
+16535:     redundancy_dbm() {
+16535:   add_congruences(cgs);
+16535: }
+16535: 
+16535: template <typename T>
+16535: BD_Shape<T>::BD_Shape(const Generator_System& gs)
+16535:   : dbm(gs.space_dimension() + 1), status(), redundancy_dbm() {
+16535:   const Generator_System::const_iterator gs_begin = gs.begin();
+16535:   const Generator_System::const_iterator gs_end = gs.end();
+16535:   if (gs_begin == gs_end) {
+16535: 
+16535:     set_empty();
+16535:     return;
+16535:   }
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535:   DB_Row<N>& dbm_0 = dbm[0];
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_tmp; N& tmp = holder_tmp.item();
+16535: 
+16535:   bool dbm_initialized = false;
+16535:   bool point_seen = false;
+16535: 
+16535:   for (Generator_System::const_iterator gs_i = gs_begin;
+16535:        gs_i != gs_end; ++gs_i) {
+16535:     const Generator& g = *gs_i;
+16535:     switch (g.type()) {
+16535:     case Generator::POINT:
+16535:       point_seen = true;
+16535: 
+16535:     case Generator::CLOSURE_POINT:
+16535:       if (!dbm_initialized) {
+16535: 
+16535:         dbm_initialized = true;
+16535:         const Coefficient& d = g.divisor();
+16535: 
+16535: 
+16535:         for (dimension_type i = space_dim; i > 0; --i) {
+16535:           const Coefficient& g_i = g.expression().get(Variable(i - 1));
+16535:           DB_Row<N>& dbm_i = dbm[i];
+16535:           for (dimension_type j = space_dim; j > 0; --j) {
+16535:             if (i != j) {
+16535:               const Coefficient& g_j = g.expression().get(Variable(j - 1));
+16535:               div_round_up(dbm_i[j], g_j - g_i, d);
+16535:             }
+16535:           }
+16535:           div_round_up(dbm_i[0], -g_i, d);
+16535:         }
+16535:         for (dimension_type j = space_dim; j > 0; --j) {
+16535:           const Coefficient& g_j = g.expression().get(Variable(j - 1));
+16535:           div_round_up(dbm_0[j], g_j, d);
+16535:         }
+16535: 
+16535:       }
+16535:       else {
+16535: 
+16535: 
+16535:         const Coefficient& d = g.divisor();
+16535: 
+16535: 
+16535:         for (dimension_type i = space_dim; i > 0; --i) {
+16535:           const Coefficient& g_i = g.expression().get(Variable(i - 1));
+16535:           DB_Row<N>& dbm_i = dbm[i];
+16535: 
+16535:           for (dimension_type j = space_dim; j > 0; --j) {
+16535:             const Coefficient& g_j = g.expression().get(Variable(j - 1));
+16535:             div_round_up(tmp, g_j - g_i, d);
+16535:             max_assign(dbm_i[j], tmp);
+16535:           }
+16535:           div_round_up(tmp, -g_i, d);
+16535:           max_assign(dbm_i[0], tmp);
+16535:         }
+16535:         for (dimension_type j = space_dim; j > 0; --j) {
+16535:           const Coefficient& g_j = g.expression().get(Variable(j - 1));
+16535:           div_round_up(tmp, g_j, d);
+16535:           max_assign(dbm_0[j], tmp);
+16535:         }
+16535:       }
+16535:       break;
+16535:     default:
+16535: 
+16535:       break;
+16535:     }
+16535:   }
+16535: 
+16535:   if (!point_seen) {
+16535: 
+16535:     throw_invalid_argument("BD_Shape(gs)",
+16535:                            "the non-empty generator system gs "
+16535:                            "contains no points.");
+16535:   }
+16535: 
+16535: 
+16535:   for (Generator_System::const_iterator gs_i = gs_begin;
+16535:        gs_i != gs_end; ++gs_i) {
+16535:     const Generator& g = *gs_i;
+16535:     switch (g.type()) {
+16535:     case Generator::LINE:
+16535: 
+16535: 
+16535:       for (dimension_type i = space_dim; i > 0; --i) {
+16535:         const Coefficient& g_i = g.expression().get(Variable(i - 1));
+16535:         DB_Row<N>& dbm_i = dbm[i];
+16535: 
+16535:         for (dimension_type j = space_dim; j > 0; --j) {
+16535:           if (g_i != g.expression().get(Variable(j - 1))) {
+16535:             assign_r(dbm_i[j], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:           }
+16535:         }
+16535:         if (g_i != 0) {
+16535:           assign_r(dbm_i[0], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:         }
+16535:       }
+16535:       for (Generator::expr_type::const_iterator i = g.expression().begin(),
+16535:             i_end = g.expression().end(); i != i_end; ++i) {
+16535:         assign_r(dbm_0[i.variable().space_dimension()],
+16535:                  PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:       }
+16535:       break;
+16535:     case Generator::RAY:
+16535: 
+16535: 
+16535:       for (dimension_type i = space_dim; i > 0; --i) {
+16535:         const Coefficient& g_i = g.expression().get(Variable(i - 1));
+16535:         DB_Row<N>& dbm_i = dbm[i];
+16535: 
+16535:         for (dimension_type j = space_dim; j > 0; --j) {
+16535:           if (g_i < g.expression().get(Variable(j - 1))) {
+16535:             assign_r(dbm_i[j], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:           }
+16535:         }
+16535:         if (g_i < 0) {
+16535:           assign_r(dbm_i[0], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:         }
+16535:       }
+16535:       for (Generator::expr_type::const_iterator i = g.expression().begin(),
+16535:             i_end = g.expression().end(); i != i_end; ++i) {
+16535:         if (*i > 0) {
+16535:           assign_r(dbm_0[i.variable().space_dimension()],
+16535:                    PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:         }
+16535:       }
+16535:       break;
+16535:     default:
+16535: 
+16535:       break;
+16535:     }
+16535:   }
+16535:   set_shortest_path_closed();
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: BD_Shape<T>::BD_Shape(const Polyhedron& ph, const Complexity_Class complexity)
+16535:   : dbm(), status(), redundancy_dbm() {
+16535:   const dimension_type num_dimensions = ph.space_dimension();
+16535: 
+16535:   if (ph.marked_empty()) {
+16535:     *this = BD_Shape<T>(num_dimensions, EMPTY);
+16535:     return;
+16535:   }
+16535: 
+16535:   if (num_dimensions == 0) {
+16535:     *this = BD_Shape<T>(num_dimensions, UNIVERSE);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (complexity == ANY_COMPLEXITY
+16535:       || (!ph.has_pending_constraints() && ph.generators_are_up_to_date())) {
+16535:     *this = BD_Shape<T>(ph.generators());
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: 
+16535:   if (!ph.has_something_pending() && ph.constraints_are_minimized()) {
+16535: 
+16535: 
+16535:     if (ph.is_universe()) {
+16535:       *this = BD_Shape<T>(num_dimensions, UNIVERSE);
+16535:       return;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   for (Constraint_System::const_iterator i = ph.con_sys.begin(),
+16535:          cs_end = ph.con_sys.end(); i != cs_end; ++i) {
+16535:     if (i->is_inconsistent()) {
+16535:       *this = BD_Shape<T>(num_dimensions, EMPTY);
+16535:       return;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (complexity == SIMPLEX_COMPLEXITY) {
+16535:     MIP_Problem lp(num_dimensions);
+16535:     lp.set_optimization_mode(MAXIMIZATION);
+16535: 
+16535:     const Constraint_System& ph_cs = ph.constraints();
+16535:     if (!ph_cs.has_strict_inequalities()) {
+16535:       lp.add_constraints(ph_cs);
+16535:     }
+16535:     else {
+16535: 
+16535:       for (Constraint_System::const_iterator i = ph_cs.begin(),
+16535:              ph_cs_end = ph_cs.end(); i != ph_cs_end; ++i) {
+16535:         const Constraint& c = *i;
+16535:         if (c.is_strict_inequality()) {
+16535:           Linear_Expression expr(c.expression());
+16535:           lp.add_constraint(expr >= 0);
+16535:         }
+16535:         else {
+16535:           lp.add_constraint(c);
+16535:         }
+16535:       }
+16535:     }
+16535: 
+16535: 
+16535:     if (!lp.is_satisfiable()) {
+16535:       *this = BD_Shape<T>(num_dimensions, EMPTY);
+16535:       return;
+16535:     }
+16535: 
+16535: 
+16535:     *this = BD_Shape<T>(num_dimensions, UNIVERSE);
+16535: 
+16535:     Generator g(point());
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
+16535:     for (dimension_type i = 1; i <= num_dimensions; ++i) {
+16535:       Variable x(i-1);
+16535: 
+16535:       lp.set_objective_function(x);
+16535:       if (lp.solve() == OPTIMIZED_MIP_PROBLEM) {
+16535:         g = lp.optimizing_point();
+16535:         lp.evaluate_objective_function(g, numer, denom);
+16535:         div_round_up(dbm[0][i], numer, denom);
+16535:       }
+16535: 
+16535:       for (dimension_type j = 1; j <= num_dimensions; ++j) {
+16535:         if (i == j) {
+16535:           continue;
+16535:         }
+16535:         Variable y(j-1);
+16535:         lp.set_objective_function(x - y);
+16535:         if (lp.solve() == OPTIMIZED_MIP_PROBLEM) {
+16535:           g = lp.optimizing_point();
+16535:           lp.evaluate_objective_function(g, numer, denom);
+16535:           div_round_up(dbm[j][i], numer, denom);
+16535:         }
+16535:       }
+16535: 
+16535:       lp.set_objective_function(-x);
+16535:       if (lp.solve() == OPTIMIZED_MIP_PROBLEM) {
+16535:         g = lp.optimizing_point();
+16535:         lp.evaluate_objective_function(g, numer, denom);
+16535:         div_round_up(dbm[i][0], numer, denom);
+16535:       }
+16535:     }
+16535:     set_shortest_path_closed();
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   *this = BD_Shape<T>(num_dimensions, UNIVERSE);
+16535:   refine_with_constraints(ph.constraints());
+16535: }
+16535: 
+16535: template <typename T>
+16535: dimension_type
+16535: BD_Shape<T>::affine_dimension() const {
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return 0;
+16535:   }
+16535: 
+16535: 
+16535:   shortest_path_closure_assign();
+16535:   if (marked_empty()) {
+16535:     return 0;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   std::vector<dimension_type> predecessor;
+16535:   compute_predecessors(predecessor);
+16535: 
+16535: 
+16535: 
+16535:   dimension_type affine_dim = 0;
+16535: 
+16535:   for (dimension_type i = 1; i <= space_dim; ++i) {
+16535:     if (predecessor[i] == i) {
+16535:       ++affine_dim;
+16535:     }
+16535:   }
+16535:   return affine_dim;
+16535: }
+16535: 
+16535: template <typename T>
+16535: Congruence_System
+16535: BD_Shape<T>::minimized_congruences() const {
+16535: 
+16535: 
+16535:   shortest_path_closure_assign();
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535:   Congruence_System cgs(space_dim);
+16535: 
+16535:   if (space_dim == 0) {
+16535:     if (marked_empty()) {
+16535:       cgs = Congruence_System::zero_dim_empty();
+16535:     }
+16535:     return cgs;
+16535:   }
+16535: 
+16535:   if (marked_empty()) {
+16535:     cgs.insert(Congruence::zero_dim_false());
+16535:     return cgs;
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
+16535: 
+16535: 
+16535:   std::vector<dimension_type> leaders;
+16535:   compute_leaders(leaders);
+16535: 
+16535: 
+16535:   const DB_Row<N>& dbm_0 = dbm[0];
+16535:   for (dimension_type i = 1; i <= space_dim; ++i) {
+16535:     const dimension_type leader = leaders[i];
+16535:     if (i != leader) {
+16535: 
+16535:       if (leader == 0) {
+16535: 
+16535:         ((void) 0);
+16535:         numer_denom(dbm_0[i], numer, denom);
+16535:         cgs.insert(denom*Variable(i-1) == numer);
+16535:       }
+16535:       else {
+16535: 
+16535:         ((void) 0);
+16535:         numer_denom(dbm[i][leader], numer, denom);
+16535:         cgs.insert(denom*Variable(leader-1) - denom*Variable(i-1) == numer);
+16535:       }
+16535:     }
+16535:   }
+16535:   return cgs;
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::add_constraint(const Constraint& c) {
+16535: 
+16535:   if (c.space_dimension() > space_dimension()) {
+16535:     throw_dimension_incompatible("add_constraint(c)", c);
+16535:   }
+16535: 
+16535:   if (c.is_strict_inequality()) {
+16535:     if (c.is_inconsistent()) {
+16535:       set_empty();
+16535:       return;
+16535:     }
+16535:     if (c.is_tautological()) {
+16535:       return;
+16535:     }
+16535: 
+16535:     throw_invalid_argument("add_constraint(c)",
+16535:                            "strict inequalities are not allowed");
+16535:   }
+16535: 
+16535:   dimension_type num_vars = 0;
+16535:   dimension_type i = 0;
+16535:   dimension_type j = 0;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
+16535: 
+16535:   if (!BD_Shape_Helpers::extract_bounded_difference(c, num_vars, i, j, coeff)) {
+16535:     throw_invalid_argument("add_constraint(c)",
+16535:                            "c is not a bounded difference constraint");
+16535:   }
+16535:   const Coefficient& inhomo = c.inhomogeneous_term();
+16535:   if (num_vars == 0) {
+16535: 
+16535:     if (inhomo < 0
+16535:         || (inhomo != 0 && c.is_equality())) {
+16535:       set_empty();
+16535:     }
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   const bool negative = (coeff < 0);
+16535:   if (negative) {
+16535:     neg_assign(coeff);
+16535:   }
+16535:   bool changed = false;
+16535:   N& x = negative ? dbm[i][j] : dbm[j][i];
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
+16535:   div_round_up(d, inhomo, coeff);
+16535:   if (x > d) {
+16535:     x = d;
+16535:     changed = true;
+16535:   }
+16535: 
+16535:   if (c.is_equality()) {
+16535:     N& y = negative ? dbm[j][i] : dbm[i][j];
+16535: 
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_c_term; Parma_Polyhedra_Library::Coefficient& minus_c_term = holder_minus_c_term.item();
+16535:     neg_assign(minus_c_term, inhomo);
+16535:     div_round_up(d, minus_c_term, coeff);
+16535:     if (y > d) {
+16535:       y = d;
+16535:       changed = true;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (changed && marked_shortest_path_closed()) {
+16535:     reset_shortest_path_closed();
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::add_congruence(const Congruence& cg) {
+16535:   const dimension_type cg_space_dim = cg.space_dimension();
+16535: 
+16535: 
+16535:   if (space_dimension() < cg_space_dim) {
+16535:     throw_dimension_incompatible("add_congruence(cg)", cg);
+16535:   }
+16535: 
+16535:   if (cg.is_proper_congruence()) {
+16535:     if (cg.is_tautological()) {
+16535:       return;
+16535:     }
+16535:     if (cg.is_inconsistent()) {
+16535:       set_empty();
+16535:       return;
+16535:     }
+16535: 
+16535:     throw_invalid_argument("add_congruence(cg)",
+16535:                            "cg is a non-trivial, proper congruence");
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   Constraint c(cg);
+16535:   add_constraint(c);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::refine_no_check(const Constraint& c) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535:   dimension_type num_vars = 0;
+16535:   dimension_type i = 0;
+16535:   dimension_type j = 0;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
+16535: 
+16535:   if (!BD_Shape_Helpers::extract_bounded_difference(c, num_vars, i, j, coeff)) {
+16535:     return;
+16535:   }
+16535:   const Coefficient& inhomo = c.inhomogeneous_term();
+16535:   if (num_vars == 0) {
+16535: 
+16535:     if (inhomo < 0
+16535:         || (c.is_equality() && inhomo != 0)
+16535:         || (c.is_strict_inequality() && inhomo == 0)) {
+16535:       set_empty();
+16535:     }
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   const bool negative = (coeff < 0);
+16535:   N& x = negative ? dbm[i][j] : dbm[j][i];
+16535:   N& y = negative ? dbm[j][i] : dbm[i][j];
+16535:   if (negative) {
+16535:     neg_assign(coeff);
+16535:   }
+16535:   bool changed = false;
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
+16535:   div_round_up(d, inhomo, coeff);
+16535:   if (x > d) {
+16535:     x = d;
+16535:     changed = true;
+16535:   }
+16535: 
+16535:   if (c.is_equality()) {
+16535: 
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_c_term; Parma_Polyhedra_Library::Coefficient& minus_c_term = holder_minus_c_term.item();
+16535:     neg_assign(minus_c_term, inhomo);
+16535:     div_round_up(d, minus_c_term, coeff);
+16535:     if (y > d) {
+16535:       y = d;
+16535:       changed = true;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (changed && marked_shortest_path_closed()) {
+16535:     reset_shortest_path_closed();
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::concatenate_assign(const BD_Shape& y) {
+16535:   BD_Shape& x = *this;
+16535: 
+16535:   const dimension_type x_space_dim = x.space_dimension();
+16535:   const dimension_type y_space_dim = y.space_dimension();
+16535: 
+16535: 
+16535: 
+16535:   if (y_space_dim == 0 && y.marked_empty()) {
+16535:     set_empty();
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (x_space_dim == 0 && marked_empty()) {
+16535:     dbm.grow(y_space_dim + 1);
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   add_space_dimensions_and_embed(y_space_dim);
+16535:   const dimension_type new_space_dim = x_space_dim + y_space_dim;
+16535:   for (dimension_type i = x_space_dim + 1; i <= new_space_dim; ++i) {
+16535:     DB_Row<N>& dbm_i = dbm[i];
+16535:     dbm_i[0] = y.dbm[i - x_space_dim][0];
+16535:     dbm[0][i] = y.dbm[0][i - x_space_dim];
+16535:     for (dimension_type j = x_space_dim + 1; j <= new_space_dim; ++j) {
+16535:       dbm_i[j] = y.dbm[i - x_space_dim][j - x_space_dim];
+16535:     }
+16535:   }
+16535: 
+16535:   if (marked_shortest_path_closed()) {
+16535:     reset_shortest_path_closed();
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: BD_Shape<T>::contains(const BD_Shape& y) const {
+16535:   const BD_Shape<T>& x = *this;
+16535:   const dimension_type x_space_dim = x.space_dimension();
+16535: 
+16535: 
+16535:   if (x_space_dim != y.space_dimension()) {
+16535:     throw_dimension_incompatible("contains(y)", y);
+16535:   }
+16535:   if (x_space_dim == 0) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     return marked_empty() ? y.marked_empty() : true;
+16535:   }
+16535: # 663 "../../src/BD_Shape_templates.hh"
+16535:   y.shortest_path_closure_assign();
+16535: 
+16535:   if (y.marked_empty()) {
+16535:     return true;
+16535:   }
+16535: 
+16535:   if (x.is_empty()) {
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535:   for (dimension_type i = x_space_dim + 1; i-- > 0; ) {
+16535:     const DB_Row<N>& x_dbm_i = x.dbm[i];
+16535:     const DB_Row<N>& y_dbm_i = y.dbm[i];
+16535:     for (dimension_type j = x_space_dim + 1; j-- > 0; ) {
+16535:       if (x_dbm_i[j] < y_dbm_i[j]) {
+16535:         return false;
+16535:       }
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: BD_Shape<T>::is_disjoint_from(const BD_Shape& y) const {
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535:   if (space_dim != y.space_dimension()) {
+16535:     throw_dimension_incompatible("is_disjoint_from(y)", y);
+16535:   }
+16535: 
+16535: 
+16535:   shortest_path_closure_assign();
+16535:   if (marked_empty()) {
+16535:     return true;
+16535:   }
+16535:   y.shortest_path_closure_assign();
+16535:   if (y.marked_empty()) {
+16535:     return true;
+16535:   }
+16535: # 716 "../../src/BD_Shape_templates.hh"
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_tmp; N& tmp = holder_tmp.item();
+16535:   for (dimension_type i = space_dim+1; i-- > 0; ) {
+16535:     const DB_Row<N>& x_i = dbm[i];
+16535:     for (dimension_type j = space_dim+1; j-- > 0; ) {
+16535:       neg_assign_r(tmp, y.dbm[j][i], ROUND_UP);
+16535:       if (x_i[j] < tmp) {
+16535:         return true;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   return false;
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: BD_Shape<T>::is_universe() const {
+16535:   if (marked_empty()) {
+16535:     return false;
+16535:   }
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
+16535:     const DB_Row<N>& dbm_i = dbm[i];
+16535:     for (dimension_type j = space_dim + 1; j-- > 0; ) {
+16535:       if (!is_plus_infinity(dbm_i[j])) {
+16535:         return false;
+16535:       }
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: BD_Shape<T>::is_bounded() const {
+16535:   shortest_path_closure_assign();
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535:   if (marked_empty() || space_dim == 0) {
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
+16535:     const DB_Row<N>& dbm_i = dbm[i];
+16535:     for (dimension_type j = space_dim + 1; j-- > 0; ) {
+16535:       if (i != j) {
+16535:         if (is_plus_infinity(dbm_i[j])) {
+16535:           return false;
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: BD_Shape<T>::contains_integer_point() const {
+16535: 
+16535:   if (is_empty()) {
+16535:     return false;
+16535:   }
+16535:   const dimension_type space_dim = space_dimension();
+16535:   if (space_dim == 0) {
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   if (std::numeric_limits<T>::is_integer) {
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   BD_Shape<mpz_class> bds_z(space_dim);
+16535:   typedef BD_Shape<mpz_class>::N Z;
+16535:   bds_z.reset_shortest_path_closed();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_tmp; N& tmp = holder_tmp.item();
+16535:   bool all_integers = true;
+16535:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
+16535:     DB_Row<Z>& z_i = bds_z.dbm[i];
+16535:     const DB_Row<N>& dbm_i = dbm[i];
+16535:     for (dimension_type j = space_dim + 1; j-- > 0; ) {
+16535:       const N& dbm_i_j = dbm_i[j];
+16535:       if (is_plus_infinity(dbm_i_j)) {
+16535:         continue;
+16535:       }
+16535:       if (is_integer(dbm_i_j)) {
+16535:         assign_r(z_i[j], dbm_i_j, ROUND_NOT_NEEDED);
+16535:       }
+16535:       else {
+16535:         all_integers = false;
+16535:         Z& z_i_j = z_i[j];
+16535: 
+16535:         neg_assign_r(tmp, dbm_i_j, ROUND_NOT_NEEDED);
+16535:         assign_r(z_i_j, tmp, ROUND_UP);
+16535:         neg_assign_r(z_i_j, z_i_j, ROUND_NOT_NEEDED);
+16535:       }
+16535:     }
+16535:   }
+16535:   return all_integers || !bds_z.is_empty();
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: BD_Shape<T>::frequency(const Linear_Expression& expr,
+16535:                        Coefficient& freq_n, Coefficient& freq_d,
+16535:                        Coefficient& val_n, Coefficient& val_d) const {
+16535:   dimension_type space_dim = space_dimension();
+16535: 
+16535:   if (space_dim < expr.space_dimension()) {
+16535:     throw_dimension_incompatible("frequency(e, ...)", "e", expr);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     if (is_empty()) {
+16535:       return false;
+16535:     }
+16535:     freq_n = 0;
+16535:     freq_d = 1;
+16535:     val_n = expr.inhomogeneous_term();
+16535:     val_d = 1;
+16535:     return true;
+16535:   }
+16535: 
+16535:   shortest_path_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_tmp; N& tmp = holder_tmp.item();
+16535:   Linear_Expression le = expr;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_val_denom; Parma_Polyhedra_Library::Coefficient& val_denom = holder_val_denom.item();
+16535:   val_denom = 1;
+16535: 
+16535: 
+16535: 
+16535:   for (dimension_type i = dbm.num_rows(); i-- > 1; ) {
+16535:     const Variable v(i-1);
+16535:     coeff = le.coefficient(v);
+16535:     if (coeff == 0) {
+16535:       continue;
+16535:     }
+16535:     const DB_Row<N>& dbm_i = dbm[i];
+16535: 
+16535:     assign_r(tmp, dbm_i[0], ROUND_NOT_NEEDED);
+16535:     if (is_additive_inverse(dbm[0][i], tmp)) {
+16535: 
+16535:       numer_denom(tmp, numer, denom);
+16535:       sub_mul_assign(le, coeff, v);
+16535:       le *= denom;
+16535:       le -= numer*coeff;
+16535:       val_denom *= denom;
+16535:       continue;
+16535:     }
+16535: 
+16535: 
+16535:     else {
+16535:       bool constant_v = false;
+16535:       for (Linear_Expression::const_iterator j = le.begin(),
+16535:             j_end = le.lower_bound(Variable(i - 1)); j != j_end; ++j) {
+16535:         const Variable vj = j.variable();
+16535:         const dimension_type j_dim = vj.space_dimension();
+16535:         assign_r(tmp, dbm_i[j_dim], ROUND_NOT_NEEDED);
+16535:         if (is_additive_inverse(dbm[j_dim][i], tmp)) {
+16535: 
+16535: 
+16535: 
+16535:           numer_denom(tmp, numer, denom);
+16535: 
+16535: 
+16535:           sub_mul_assign(le, coeff, v);
+16535:           add_mul_assign(le, coeff, vj);
+16535:           le *= denom;
+16535:           le -= numer*coeff;
+16535:           val_denom *= denom;
+16535:           constant_v = true;
+16535:           break;
+16535:         }
+16535:       }
+16535:       if (!constant_v) {
+16535: 
+16535:         return false;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   freq_n = 0;
+16535:   freq_d = 1;
+16535: 
+16535: 
+16535:   normalize2(le.inhomogeneous_term(), val_denom, val_n, val_d);
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: BD_Shape<T>::constrains(const Variable var) const {
+16535: 
+16535:   const dimension_type var_space_dim = var.space_dimension();
+16535:   if (space_dimension() < var_space_dim) {
+16535:     throw_dimension_incompatible("constrains(v)", "v", var);
+16535:   }
+16535:   shortest_path_closure_assign();
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return true;
+16535:   }
+16535: 
+16535:   const DB_Row<N>& dbm_v = dbm[var_space_dim];
+16535:   for (dimension_type i = dbm.num_rows(); i-- > 0; ) {
+16535:     if (!is_plus_infinity(dbm_v[i])
+16535:         || !is_plus_infinity(dbm[i][var_space_dim])) {
+16535:       return true;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   return is_empty();
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>
+16535: ::compute_predecessors(std::vector<dimension_type>& predecessor) const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type predecessor_size = dbm.num_rows();
+16535: 
+16535:   predecessor.reserve(predecessor_size);
+16535:   for (dimension_type i = 0; i < predecessor_size; ++i) {
+16535:     predecessor.push_back(i);
+16535:   }
+16535: 
+16535:   for (dimension_type i = predecessor_size; i-- > 1; ) {
+16535:     if (i == predecessor[i]) {
+16535:       const DB_Row<N>& dbm_i = dbm[i];
+16535:       for (dimension_type j = i; j-- > 0; ) {
+16535:         if (j == predecessor[j]
+16535:             && is_additive_inverse(dbm[j][i], dbm_i[j])) {
+16535: 
+16535:           predecessor[i] = j;
+16535:           break;
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::compute_leaders(std::vector<dimension_type>& leaders) const {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535:   compute_predecessors(leaders);
+16535: 
+16535:   ((void) 0);
+16535:   for (dimension_type i = 1, l_size = leaders.size(); i != l_size; ++i) {
+16535:     const dimension_type leaders_i = leaders[i];
+16535:     ((void) 0);
+16535:     if (leaders_i != i) {
+16535:       const dimension_type leaders_leaders_i = leaders[leaders_i];
+16535:       ((void) 0);
+16535:       leaders[i] = leaders_leaders_i;
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: BD_Shape<T>::is_shortest_path_reduced() const {
+16535: 
+16535:   if (marked_empty()) {
+16535:     return true;
+16535:   }
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (!marked_shortest_path_reduced()) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   const BD_Shape x_copy = *this;
+16535:   x_copy.shortest_path_closure_assign();
+16535: 
+16535:   if (x_copy.marked_empty()) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   std::vector<dimension_type> leader(space_dim + 1);
+16535: 
+16535: 
+16535:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
+16535:     leader[i] = i;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   for (dimension_type i = 0; i < space_dim; ++i) {
+16535:     const DB_Row<N>& x_copy_dbm_i = x_copy.dbm[i];
+16535:     for (dimension_type j = i + 1; j <= space_dim; ++j) {
+16535:       if (is_additive_inverse(x_copy.dbm[j][i], x_copy_dbm_i[j])) {
+16535: 
+16535: 
+16535:         leader[j] = leader[i];
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_c; N& c = holder_c.item();
+16535:   for (dimension_type k = 0; k <= space_dim; ++k) {
+16535:     if (leader[k] == k) {
+16535:       const DB_Row<N>& x_k = x_copy.dbm[k];
+16535:       for (dimension_type i = 0; i <= space_dim; ++i) {
+16535:         if (leader[i] == i) {
+16535:           const DB_Row<N>& x_i = x_copy.dbm[i];
+16535:           const Bit_Row& redundancy_i = redundancy_dbm[i];
+16535:           const N& x_i_k = x_i[k];
+16535:           for (dimension_type j = 0; j <= space_dim; ++j) {
+16535:             if (leader[j] == j) {
+16535:               const N& x_i_j = x_i[j];
+16535:               if (!is_plus_infinity(x_i_j)) {
+16535:                 add_assign_r(c, x_i_k, x_k[j], ROUND_UP);
+16535:                 if (x_i_j >= c && !redundancy_i[j]) {
+16535:                   return false;
+16535:                 }
+16535:               }
+16535:             }
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   std::vector<dimension_type> var_conn(space_dim + 1);
+16535:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
+16535:     var_conn[i] = space_dim + 1;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   for (dimension_type i = 0; i <= space_dim; ++i) {
+16535: 
+16535: 
+16535:     dimension_type t = 0;
+16535:     dimension_type leader_i = leader[i];
+16535: 
+16535:     if (leader_i == i) {
+16535:       for (dimension_type j = 0; j <= space_dim; ++j) {
+16535:         dimension_type leader_j = leader[j];
+16535: 
+16535: 
+16535:         if (j != leader_j) {
+16535:           if (!redundancy_dbm[i][j]) {
+16535:             if (t == 1) {
+16535: 
+16535:               return false;
+16535:             }
+16535:             else {
+16535:               if (leader_j != i) {
+16535: 
+16535:                 return false;
+16535:               }
+16535:               else {
+16535:                 ++t;
+16535:                 var_conn[i] = j;
+16535:               }
+16535:             }
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535: 
+16535:     else {
+16535:       for (dimension_type j = 0; j <= space_dim; ++j) {
+16535:         if (!redundancy_dbm[i][j]) {
+16535:           dimension_type leader_j = leader[j];
+16535:           if (leader_i != leader_j) {
+16535: 
+16535:             return false;
+16535:           }
+16535:           else {
+16535:             if (t == 1) {
+16535: 
+16535:               return false;
+16535:             }
+16535:             else {
+16535:               ++t;
+16535:               var_conn[i] = j;
+16535:             }
+16535:           }
+16535: 
+16535: 
+16535:           if (t == 0) {
+16535:             return false;
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   std::vector<bool> just_checked(space_dim + 1);
+16535:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
+16535:     just_checked[i] = false;
+16535:   }
+16535: 
+16535: 
+16535:   for (dimension_type i = 0; i <= space_dim; ++i) {
+16535: 
+16535:     if (!just_checked[i]) {
+16535:       dimension_type v_con = var_conn[i];
+16535: 
+16535: 
+16535:       if (v_con != space_dim + 1) {
+16535: 
+16535: 
+16535:         while (v_con != i) {
+16535:           just_checked[v_con] = true;
+16535:           v_con = var_conn[v_con];
+16535: 
+16535: 
+16535:           if (just_checked[v_con]) {
+16535:             return false;
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535:     just_checked[i] = true;
+16535:   }
+16535: 
+16535: 
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: BD_Shape<T>::bounds(const Linear_Expression& expr,
+16535:                     const bool from_above) const {
+16535: 
+16535: 
+16535:   const dimension_type expr_space_dim = expr.space_dimension();
+16535:   const dimension_type space_dim = space_dimension();
+16535:   if (space_dim < expr_space_dim) {
+16535:     throw_dimension_incompatible((from_above
+16535:                                   ? "bounds_from_above(e)"
+16535:                                   : "bounds_from_below(e)"), "e", expr);
+16535:   }
+16535:   shortest_path_closure_assign();
+16535: 
+16535:   if (space_dim == 0 || marked_empty()) {
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   const Constraint& c = from_above ? expr <= 0 : expr >= 0;
+16535:   dimension_type num_vars = 0;
+16535:   dimension_type i = 0;
+16535:   dimension_type j = 0;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
+16535: 
+16535:   if (BD_Shape_Helpers::extract_bounded_difference(c, num_vars, i, j, coeff)) {
+16535:     if (num_vars == 0) {
+16535: 
+16535:       return true;
+16535:     }
+16535: 
+16535:     const N& x = (coeff < 0) ? dbm[i][j] : dbm[j][i];
+16535:     return !is_plus_infinity(x);
+16535:   }
+16535:   else {
+16535: 
+16535:     Optimization_Mode mode_bounds
+16535:       = from_above ? MAXIMIZATION : MINIMIZATION;
+16535:     MIP_Problem mip(space_dim, constraints(), expr, mode_bounds);
+16535: 
+16535:     return mip.solve() == OPTIMIZED_MIP_PROBLEM;
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: BD_Shape<T>::max_min(const Linear_Expression& expr,
+16535:                      const bool maximize,
+16535:                      Coefficient& ext_n, Coefficient& ext_d,
+16535:                      bool& included) const {
+16535: 
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535:   const dimension_type expr_space_dim = expr.space_dimension();
+16535:   if (space_dim < expr_space_dim) {
+16535:     throw_dimension_incompatible((maximize
+16535:                                   ? "maximize(e, ...)"
+16535:                                   : "minimize(e, ...)"), "e", expr);
+16535:   }
+16535: 
+16535:   if (space_dim == 0) {
+16535:     if (marked_empty()) {
+16535:       return false;
+16535:     }
+16535:     else {
+16535:       ext_n = expr.inhomogeneous_term();
+16535:       ext_d = 1;
+16535:       included = true;
+16535:       return true;
+16535:     }
+16535:   }
+16535: 
+16535:   shortest_path_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535:   const Constraint& c = maximize ? expr <= 0 : expr >= 0;
+16535:   dimension_type num_vars = 0;
+16535:   dimension_type i = 0;
+16535:   dimension_type j = 0;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
+16535: 
+16535:   if (!BD_Shape_Helpers::extract_bounded_difference(c, num_vars, i, j, coeff)) {
+16535:     Optimization_Mode mode_max_min
+16535:       = maximize ? MAXIMIZATION : MINIMIZATION;
+16535:     MIP_Problem mip(space_dim, constraints(), expr, mode_max_min);
+16535:     if (mip.solve() == OPTIMIZED_MIP_PROBLEM) {
+16535:       mip.optimal_value(ext_n, ext_d);
+16535:       included = true;
+16535:       return true;
+16535:     }
+16535:     else {
+16535: 
+16535:       return false;
+16535:     }
+16535:   }
+16535:   else {
+16535: 
+16535:     if (num_vars == 0) {
+16535: 
+16535:       ext_n = expr.inhomogeneous_term();
+16535:       ext_d = 1;
+16535:       included = true;
+16535:       return true;
+16535:     }
+16535: 
+16535: 
+16535:     const N& x = (coeff < 0) ? dbm[i][j] : dbm[j][i];
+16535:     if (!is_plus_infinity(x)) {
+16535: 
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
+16535:       const Coefficient& b = expr.inhomogeneous_term();
+16535:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item();
+16535:       neg_assign(minus_b, b);
+16535:       const Coefficient& sc_b = maximize ? b : minus_b;
+16535:       assign_r(d, sc_b, ROUND_UP);
+16535: 
+16535: 
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_expr; N& coeff_expr = holder_coeff_expr.item();
+16535:       ((void) 0);
+16535:       const Coefficient& coeff_i = expr.get(Variable(i - 1));
+16535:       const int sign_i = sgn(coeff_i);
+16535:       if (sign_i > 0) {
+16535:         assign_r(coeff_expr, coeff_i, ROUND_UP);
+16535:       }
+16535:       else {
+16535:         Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_coeff_i; Parma_Polyhedra_Library::Coefficient& minus_coeff_i = holder_minus_coeff_i.item();
+16535:         neg_assign(minus_coeff_i, coeff_i);
+16535:         assign_r(coeff_expr, minus_coeff_i, ROUND_UP);
+16535:       }
+16535: 
+16535:       add_mul_assign_r(d, coeff_expr, x, ROUND_UP);
+16535:       numer_denom(d, ext_n, ext_d);
+16535:       if (!maximize) {
+16535:         neg_assign(ext_n);
+16535:       }
+16535:       included = true;
+16535:       return true;
+16535:     }
+16535: 
+16535: 
+16535:     return false;
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: BD_Shape<T>::max_min(const Linear_Expression& expr,
+16535:                      const bool maximize,
+16535:                      Coefficient& ext_n, Coefficient& ext_d,
+16535:                      bool& included,
+16535:                      Generator& g) const {
+16535: 
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535:   const dimension_type expr_space_dim = expr.space_dimension();
+16535:   if (space_dim < expr_space_dim) {
+16535:     throw_dimension_incompatible((maximize
+16535:                                   ? "maximize(e, ...)"
+16535:                                   : "minimize(e, ...)"), "e", expr);
+16535:   }
+16535: 
+16535:   if (space_dim == 0) {
+16535:     if (marked_empty()) {
+16535:       return false;
+16535:     }
+16535:     else {
+16535:       ext_n = expr.inhomogeneous_term();
+16535:       ext_d = 1;
+16535:       included = true;
+16535:       g = point();
+16535:       return true;
+16535:     }
+16535:   }
+16535: 
+16535:   shortest_path_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return false;
+16535:   }
+16535:   Optimization_Mode mode_max_min
+16535:     = maximize ? MAXIMIZATION : MINIMIZATION;
+16535:   MIP_Problem mip(space_dim, constraints(), expr, mode_max_min);
+16535:   if (mip.solve() == OPTIMIZED_MIP_PROBLEM) {
+16535:     g = mip.optimizing_point();
+16535:     mip.evaluate_objective_function(g, ext_n, ext_d);
+16535:     included = true;
+16535:     return true;
+16535:   }
+16535: 
+16535:   return false;
+16535: }
+16535: 
+16535: template <typename T>
+16535: Poly_Con_Relation
+16535: BD_Shape<T>::relation_with(const Congruence& cg) const {
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535: 
+16535:   if (cg.space_dimension() > space_dim) {
+16535:     throw_dimension_incompatible("relation_with(cg)", cg);
+16535:   }
+16535: 
+16535: 
+16535:   if (cg.is_equality()) {
+16535:     Constraint c(cg);
+16535:     return relation_with(c);
+16535:   }
+16535: 
+16535:   shortest_path_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return Poly_Con_Relation::saturates()
+16535:       && Poly_Con_Relation::is_included()
+16535:       && Poly_Con_Relation::is_disjoint();
+16535:   }
+16535:   if (space_dim == 0) {
+16535:     if (cg.is_inconsistent()) {
+16535:       return Poly_Con_Relation::is_disjoint();
+16535:     }
+16535:     else {
+16535:       return Poly_Con_Relation::saturates()
+16535:         && Poly_Con_Relation::is_included();
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   Linear_Expression le = Linear_Expression(cg.expression());
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_numer; Parma_Polyhedra_Library::Coefficient& min_numer = holder_min_numer.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_denom; Parma_Polyhedra_Library::Coefficient& min_denom = holder_min_denom.item();
+16535:   bool min_included;
+16535:   bool bounded_below = minimize(le, min_numer, min_denom, min_included);
+16535: 
+16535: 
+16535: 
+16535:   if (!bounded_below) {
+16535:     return Poly_Con_Relation::strictly_intersects();
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_numer; Parma_Polyhedra_Library::Coefficient& max_numer = holder_max_numer.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_denom; Parma_Polyhedra_Library::Coefficient& max_denom = holder_max_denom.item();
+16535:   bool max_included;
+16535:   bool bounded_above = maximize(le, max_numer, max_denom, max_included);
+16535: 
+16535: 
+16535: 
+16535:   if (!bounded_above) {
+16535:     return Poly_Con_Relation::strictly_intersects();
+16535:   }
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_signed_distance; Parma_Polyhedra_Library::Coefficient& signed_distance = holder_signed_distance.item();
+16535: 
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_value; Parma_Polyhedra_Library::Coefficient& min_value = holder_min_value.item();
+16535:   min_value = min_numer / min_denom;
+16535:   const Coefficient& modulus = cg.modulus();
+16535:   signed_distance = min_value % modulus;
+16535:   min_value -= signed_distance;
+16535:   if (min_value * min_denom < min_numer) {
+16535:     min_value += modulus;
+16535:   }
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_value; Parma_Polyhedra_Library::Coefficient& max_value = holder_max_value.item();
+16535:   max_value = max_numer / max_denom;
+16535:   signed_distance = max_value % modulus;
+16535:   max_value += signed_distance;
+16535:   if (max_value * max_denom > max_numer) {
+16535:     max_value -= modulus;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (max_value < min_value) {
+16535:     return Poly_Con_Relation::is_disjoint();
+16535:   }
+16535:   else {
+16535:     return Poly_Con_Relation::strictly_intersects();
+16535:   }
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: Poly_Con_Relation
+16535: BD_Shape<T>::relation_with(const Constraint& c) const {
+16535:   const dimension_type c_space_dim = c.space_dimension();
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535: 
+16535:   if (c_space_dim > space_dim) {
+16535:     throw_dimension_incompatible("relation_with(c)", c);
+16535:   }
+16535:   shortest_path_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return Poly_Con_Relation::saturates()
+16535:       && Poly_Con_Relation::is_included()
+16535:       && Poly_Con_Relation::is_disjoint();
+16535:   }
+16535:   if (space_dim == 0) {
+16535:     if ((c.is_equality() && c.inhomogeneous_term() != 0)
+16535:         || (c.is_inequality() && c.inhomogeneous_term() < 0)) {
+16535:       return Poly_Con_Relation::is_disjoint();
+16535:     }
+16535:     else if (c.is_strict_inequality() && c.inhomogeneous_term() == 0) {
+16535: 
+16535: 
+16535:       return Poly_Con_Relation::saturates()
+16535:         && Poly_Con_Relation::is_disjoint();
+16535:     }
+16535:     else if (c.is_equality() || c.inhomogeneous_term() == 0) {
+16535:       return Poly_Con_Relation::saturates()
+16535:         && Poly_Con_Relation::is_included();
+16535:     }
+16535:     else {
+16535: 
+16535: 
+16535: 
+16535:       return Poly_Con_Relation::is_included();
+16535:     }
+16535:   }
+16535: 
+16535:   dimension_type num_vars = 0;
+16535:   dimension_type i = 0;
+16535:   dimension_type j = 0;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
+16535:   if (!BD_Shape_Helpers::extract_bounded_difference(c, num_vars, i, j, coeff)) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     Linear_Expression le(c.expression());
+16535:     le.set_inhomogeneous_term(Coefficient_zero());
+16535: 
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_numer; Parma_Polyhedra_Library::Coefficient& max_numer = holder_max_numer.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_denom; Parma_Polyhedra_Library::Coefficient& max_denom = holder_max_denom.item();
+16535:     bool max_included;
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_numer; Parma_Polyhedra_Library::Coefficient& min_numer = holder_min_numer.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_denom; Parma_Polyhedra_Library::Coefficient& min_denom = holder_min_denom.item();
+16535:     bool min_included;
+16535:     bool bounded_above = maximize(le, max_numer, max_denom, max_included);
+16535:     bool bounded_below = minimize(le, min_numer, min_denom, min_included);
+16535:     if (!bounded_above) {
+16535:       if (!bounded_below) {
+16535:         return Poly_Con_Relation::strictly_intersects();
+16535:       }
+16535:       min_numer += c.inhomogeneous_term() * min_denom;
+16535:       switch (sgn(min_numer)) {
+16535:       case 1:
+16535:         if (c.is_equality()) {
+16535:           return Poly_Con_Relation::is_disjoint();
+16535:         }
+16535:         return Poly_Con_Relation::is_included();
+16535:       case 0:
+16535:         if (c.is_strict_inequality() || c.is_equality()) {
+16535:           return Poly_Con_Relation::strictly_intersects();
+16535:         }
+16535:         return Poly_Con_Relation::is_included();
+16535:       case -1:
+16535:         return Poly_Con_Relation::strictly_intersects();
+16535:       }
+16535:     }
+16535:     if (!bounded_below) {
+16535:       max_numer += c.inhomogeneous_term() * max_denom;
+16535:       switch (sgn(max_numer)) {
+16535:       case 1:
+16535:         return Poly_Con_Relation::strictly_intersects();
+16535:       case 0:
+16535:         if (c.is_strict_inequality()) {
+16535:           return Poly_Con_Relation::is_disjoint();
+16535:         }
+16535:         return Poly_Con_Relation::strictly_intersects();
+16535:       case -1:
+16535:         return Poly_Con_Relation::is_disjoint();
+16535:       }
+16535:     }
+16535:     else {
+16535:       max_numer += c.inhomogeneous_term() * max_denom;
+16535:       min_numer += c.inhomogeneous_term() * min_denom;
+16535:       switch (sgn(max_numer)) {
+16535:       case 1:
+16535:         switch (sgn(min_numer)) {
+16535:         case 1:
+16535:           if (c.is_equality()) {
+16535:             return Poly_Con_Relation::is_disjoint();
+16535:           }
+16535:           return Poly_Con_Relation::is_included();
+16535:         case 0:
+16535:           if (c.is_equality()) {
+16535:             return Poly_Con_Relation::strictly_intersects();
+16535:           }
+16535:           if (c.is_strict_inequality()) {
+16535:             return Poly_Con_Relation::strictly_intersects();
+16535:           }
+16535:           return Poly_Con_Relation::is_included();
+16535:         case -1:
+16535:           return Poly_Con_Relation::strictly_intersects();
+16535:         }
+16535:         Parma_Polyhedra_Library::ppl_unreachable();
+16535:         break;
+16535:       case 0:
+16535:         if (min_numer == 0) {
+16535:           if (c.is_strict_inequality()) {
+16535:             return Poly_Con_Relation::is_disjoint()
+16535:               && Poly_Con_Relation::saturates();
+16535:           }
+16535:           return Poly_Con_Relation::is_included()
+16535:             && Poly_Con_Relation::saturates();
+16535:         }
+16535:         if (c.is_strict_inequality()) {
+16535:           return Poly_Con_Relation::is_disjoint();
+16535:         }
+16535:         return Poly_Con_Relation::strictly_intersects();
+16535:       case -1:
+16535:         return Poly_Con_Relation::is_disjoint();
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   if (num_vars == 0) {
+16535: 
+16535:     switch (sgn(c.inhomogeneous_term())) {
+16535:     case -1:
+16535:       return Poly_Con_Relation::is_disjoint();
+16535:     case 0:
+16535:       if (c.is_strict_inequality()) {
+16535:         return Poly_Con_Relation::saturates()
+16535:           && Poly_Con_Relation::is_disjoint();
+16535:       }
+16535:       else {
+16535:         return Poly_Con_Relation::saturates()
+16535:           && Poly_Con_Relation::is_included();
+16535:       }
+16535:     case 1:
+16535:       if (c.is_equality()) {
+16535:         return Poly_Con_Relation::is_disjoint();
+16535:       }
+16535:       else {
+16535:         return Poly_Con_Relation::is_included();
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   const bool negative = (coeff < 0);
+16535:   const N& x = negative ? dbm[i][j] : dbm[j][i];
+16535:   const N& y = negative ? dbm[j][i] : dbm[i][j];
+16535:   if (negative) {
+16535:     neg_assign(coeff);
+16535:   }
+16535: # 1672 "../../src/BD_Shape_templates.hh"
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_x; mpq_class& q_x = holder_q_x.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_y; mpq_class& q_y = holder_q_y.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_d; mpq_class& d = holder_d.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_d1; mpq_class& d1 = holder_d1.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_c_denom; mpq_class& c_denom = holder_c_denom.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_denom; mpq_class& q_denom = holder_q_denom.item();
+16535:   assign_r(c_denom, coeff, ROUND_NOT_NEEDED);
+16535:   assign_r(d, c.inhomogeneous_term(), ROUND_NOT_NEEDED);
+16535:   neg_assign_r(d1, d, ROUND_NOT_NEEDED);
+16535:   div_assign_r(d, d, c_denom, ROUND_NOT_NEEDED);
+16535:   div_assign_r(d1, d1, c_denom, ROUND_NOT_NEEDED);
+16535: 
+16535:   if (is_plus_infinity(x)) {
+16535:     if (!is_plus_infinity(y)) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
+16535:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
+16535:       numer_denom(y, numer, denom);
+16535:       assign_r(q_denom, denom, ROUND_NOT_NEEDED);
+16535:       assign_r(q_y, numer, ROUND_NOT_NEEDED);
+16535:       div_assign_r(q_y, q_y, q_denom, ROUND_NOT_NEEDED);
+16535:       if (q_y < d1) {
+16535:         return Poly_Con_Relation::is_disjoint();
+16535:       }
+16535:       if (q_y == d1 && c.is_strict_inequality()) {
+16535:         return Poly_Con_Relation::is_disjoint();
+16535:       }
+16535:     }
+16535: 
+16535: 
+16535:     return Poly_Con_Relation::strictly_intersects();
+16535:   }
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
+16535:   numer_denom(x, numer, denom);
+16535:   assign_r(q_denom, denom, ROUND_NOT_NEEDED);
+16535:   assign_r(q_x, numer, ROUND_NOT_NEEDED);
+16535:   div_assign_r(q_x, q_x, q_denom, ROUND_NOT_NEEDED);
+16535: 
+16535:   if (!is_plus_infinity(y)) {
+16535:     numer_denom(y, numer, denom);
+16535:     assign_r(q_denom, denom, ROUND_NOT_NEEDED);
+16535:     assign_r(q_y, numer, ROUND_NOT_NEEDED);
+16535:     div_assign_r(q_y, q_y, q_denom, ROUND_NOT_NEEDED);
+16535:     if (q_x == d && q_y == d1) {
+16535:       if (c.is_strict_inequality()) {
+16535:         return Poly_Con_Relation::saturates()
+16535:           && Poly_Con_Relation::is_disjoint();
+16535:       }
+16535:       else {
+16535:         return Poly_Con_Relation::saturates()
+16535:           && Poly_Con_Relation::is_included();
+16535:       }
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:     if (q_y < d1) {
+16535:       return Poly_Con_Relation::is_disjoint();
+16535:     }
+16535:     if (q_y == d1 && c.is_strict_inequality()) {
+16535:       return Poly_Con_Relation::is_disjoint();
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (d > q_x) {
+16535:     if (c.is_equality()) {
+16535:       return Poly_Con_Relation::is_disjoint();
+16535:     }
+16535:     else {
+16535:       return Poly_Con_Relation::is_included();
+16535:     }
+16535:   }
+16535: 
+16535:   if (d == q_x && c.is_nonstrict_inequality()) {
+16535:     return Poly_Con_Relation::is_included();
+16535:   }
+16535: 
+16535:   return Poly_Con_Relation::strictly_intersects();
+16535: }
+16535: 
+16535: template <typename T>
+16535: Poly_Gen_Relation
+16535: BD_Shape<T>::relation_with(const Generator& g) const {
+16535:   const dimension_type space_dim = space_dimension();
+16535:   const dimension_type g_space_dim = g.space_dimension();
+16535: 
+16535: 
+16535:   if (space_dim < g_space_dim) {
+16535:     throw_dimension_incompatible("relation_with(g)", g);
+16535:   }
+16535:   shortest_path_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return Poly_Gen_Relation::nothing();
+16535:   }
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return Poly_Gen_Relation::subsumes();
+16535:   }
+16535:   const bool is_line = g.is_line();
+16535:   const bool is_line_or_ray = g.is_line_or_ray();
+16535: # 1792 "../../src/BD_Shape_templates.hh"
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_product; Parma_Polyhedra_Library::Coefficient& product = holder_product.item();
+16535: 
+16535: 
+16535:   for (dimension_type i = 0; i <= space_dim; ++i) {
+16535:     const Coefficient& g_coeff_y = (i > g_space_dim || i == 0)
+16535:       ? Coefficient_zero() : g.coefficient(Variable(i-1));
+16535:     const DB_Row<N>& dbm_i = dbm[i];
+16535:     for (dimension_type j = i + 1; j <= space_dim; ++j) {
+16535:       const Coefficient& g_coeff_x = (j > g_space_dim)
+16535:         ? Coefficient_zero() : g.coefficient(Variable(j-1));
+16535:       const N& dbm_ij = dbm_i[j];
+16535:       const N& dbm_ji = dbm[j][i];
+16535:       if (is_additive_inverse(dbm_ji, dbm_ij)) {
+16535: 
+16535: 
+16535:         numer_denom(dbm_ij, numer, denom);
+16535:         product = g_coeff_y;
+16535:         product -= g_coeff_x;
+16535:         product *= denom;
+16535:         if (!is_line_or_ray) {
+16535:           add_mul_assign(product, numer, g.divisor());
+16535:         }
+16535:         if (product != 0) {
+16535:           return Poly_Gen_Relation::nothing();
+16535:         }
+16535:       }
+16535:       else {
+16535: 
+16535:         if (!is_plus_infinity(dbm_ij)) {
+16535: 
+16535: 
+16535: 
+16535:           numer_denom(dbm_ij, numer, denom);
+16535:           product = g_coeff_y;
+16535:           product -= g_coeff_x;
+16535:           product *= denom;
+16535:           if (!is_line_or_ray) {
+16535:             add_mul_assign(product, numer, g.divisor());
+16535:           }
+16535:           if (is_line) {
+16535:             if (product != 0) {
+16535: 
+16535:               return Poly_Gen_Relation::nothing();
+16535:             }
+16535:           }
+16535:           else {
+16535: 
+16535:             if (product < 0) {
+16535:               return Poly_Gen_Relation::nothing();
+16535:             }
+16535:           }
+16535:         }
+16535: 
+16535:         if (!is_plus_infinity(dbm_ji)) {
+16535: 
+16535: 
+16535:           numer_denom(dbm_ji, numer, denom);
+16535:           product = 0;
+16535:           add_mul_assign(product, denom, g_coeff_x);
+16535:           add_mul_assign(product, -denom, g_coeff_y);
+16535:           if (!is_line_or_ray) {
+16535:             add_mul_assign(product, numer, g.divisor());
+16535:           }
+16535:           if (is_line) {
+16535:             if (product != 0) {
+16535: 
+16535:               return Poly_Gen_Relation::nothing();
+16535:             }
+16535:           }
+16535:           else {
+16535: 
+16535:             if (product < 0) {
+16535:               return Poly_Gen_Relation::nothing();
+16535:             }
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   return Poly_Gen_Relation::subsumes();
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::shortest_path_closure_assign() const {
+16535: 
+16535:   if (marked_empty() || marked_shortest_path_closed()) {
+16535:     return;
+16535:   }
+16535:   const dimension_type num_dimensions = space_dimension();
+16535: 
+16535:   if (num_dimensions == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   BD_Shape& x = const_cast<BD_Shape<T>&>(*this);
+16535: 
+16535: 
+16535:   for (dimension_type h = num_dimensions + 1; h-- > 0; ) {
+16535:     ((void) 0);
+16535:     assign_r(x.dbm[h][h], 0, ROUND_NOT_NEEDED);
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_sum; N& sum = holder_sum.item();
+16535:   for (dimension_type k = num_dimensions + 1; k-- > 0; ) {
+16535:     const DB_Row<N>& x_dbm_k = x.dbm[k];
+16535:     for (dimension_type i = num_dimensions + 1; i-- > 0; ) {
+16535:       DB_Row<N>& x_dbm_i = x.dbm[i];
+16535:       const N& x_dbm_i_k = x_dbm_i[k];
+16535:       if (!is_plus_infinity(x_dbm_i_k)) {
+16535:         for (dimension_type j = num_dimensions + 1; j-- > 0; ) {
+16535:           const N& x_dbm_k_j = x_dbm_k[j];
+16535:           if (!is_plus_infinity(x_dbm_k_j)) {
+16535: 
+16535:             add_assign_r(sum, x_dbm_i_k, x_dbm_k_j, ROUND_UP);
+16535:             min_assign(x_dbm_i[j], sum);
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   for (dimension_type h = num_dimensions + 1; h-- > 0; ) {
+16535:     N& x_dbm_hh = x.dbm[h][h];
+16535:     if (sgn(x_dbm_hh) < 0) {
+16535:       x.set_empty();
+16535:       return;
+16535:     }
+16535:     else {
+16535:       ((void) 0);
+16535: 
+16535:       assign_r(x_dbm_hh, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   x.set_shortest_path_closed();
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::incremental_shortest_path_closure_assign(Variable var) const {
+16535: 
+16535:   if (marked_empty() || marked_shortest_path_closed()) {
+16535:     return;
+16535:   }
+16535:   const dimension_type num_dimensions = space_dimension();
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:   BD_Shape& x = const_cast<BD_Shape&>(*this);
+16535: 
+16535: 
+16535:   for (dimension_type h = num_dimensions + 1; h-- > 0; ) {
+16535:     ((void) 0);
+16535:     assign_r(x.dbm[h][h], 0, ROUND_NOT_NEEDED);
+16535:   }
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_sum; N& sum = holder_sum.item();
+16535:   const dimension_type v = var.id() + 1;
+16535:   DB_Row<N>& x_v = x.dbm[v];
+16535: 
+16535:   for (dimension_type k = num_dimensions + 1; k-- > 0; ) {
+16535:     DB_Row<N>& x_k = x.dbm[k];
+16535:     const N& x_v_k = x_v[k];
+16535:     const N& x_k_v = x_k[v];
+16535:     const bool x_v_k_finite = !is_plus_infinity(x_v_k);
+16535:     const bool x_k_v_finite = !is_plus_infinity(x_k_v);
+16535: 
+16535:     if (x_v_k_finite) {
+16535:       if (x_k_v_finite) {
+16535: 
+16535:         for (dimension_type i = num_dimensions + 1; i-- > 0; ) {
+16535:           DB_Row<N>& x_i = x.dbm[i];
+16535:           const N& x_i_k = x_i[k];
+16535:           if (!is_plus_infinity(x_i_k)) {
+16535:             add_assign_r(sum, x_i_k, x_k_v, ROUND_UP);
+16535:             min_assign(x_i[v], sum);
+16535:           }
+16535:           const N& x_k_i = x_k[i];
+16535:           if (!is_plus_infinity(x_k_i)) {
+16535:             add_assign_r(sum, x_v_k, x_k_i, ROUND_UP);
+16535:             min_assign(x_v[i], sum);
+16535:           }
+16535:         }
+16535:       }
+16535:       else {
+16535: 
+16535:         for (dimension_type i = num_dimensions + 1; i-- > 0; ) {
+16535:           const N& x_k_i = x_k[i];
+16535:           if (!is_plus_infinity(x_k_i)) {
+16535:             add_assign_r(sum, x_v_k, x_k_i, ROUND_UP);
+16535:             min_assign(x_v[i], sum);
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535:     else if (x_k_v_finite) {
+16535: 
+16535:       for (dimension_type i = num_dimensions + 1; i-- > 0; ) {
+16535:         DB_Row<N>& x_i = x.dbm[i];
+16535:         const N& x_i_k = x_i[k];
+16535:         if (!is_plus_infinity(x_i_k)) {
+16535:           add_assign_r(sum, x_i_k, x_k_v, ROUND_UP);
+16535:           min_assign(x_i[v], sum);
+16535:         }
+16535:       }
+16535:     }
+16535:     else {
+16535: 
+16535:       continue;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   for (dimension_type i = num_dimensions + 1; i-- > 0; ) {
+16535:     DB_Row<N>& x_i = x.dbm[i];
+16535:     const N& x_i_v = x_i[v];
+16535:     if (!is_plus_infinity(x_i_v)) {
+16535:       for (dimension_type j = num_dimensions + 1; j-- > 0; ) {
+16535:         const N& x_v_j = x_v[j];
+16535:         if (!is_plus_infinity(x_v_j)) {
+16535:           add_assign_r(sum, x_i_v, x_v_j, ROUND_UP);
+16535:           min_assign(x_i[j], sum);
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   for (dimension_type h = num_dimensions + 1; h-- > 0; ) {
+16535:     N& x_dbm_hh = x.dbm[h][h];
+16535:     if (sgn(x_dbm_hh) < 0) {
+16535:       x.set_empty();
+16535:       return;
+16535:     }
+16535:     else {
+16535:       ((void) 0);
+16535: 
+16535:       assign_r(x_dbm_hh, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   x.set_shortest_path_closed();
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::shortest_path_reduction_assign() const {
+16535: 
+16535:   if (marked_shortest_path_reduced()) {
+16535:     return;
+16535:   }
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535:   shortest_path_closure_assign();
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   std::vector<dimension_type> predecessor;
+16535:   compute_predecessors(predecessor);
+16535:   std::vector<dimension_type> leaders;
+16535:   compute_leader_indices(predecessor, leaders);
+16535:   const dimension_type num_leaders = leaders.size();
+16535: 
+16535:   Bit_Matrix redundancy(space_dim + 1, space_dim + 1);
+16535: 
+16535: 
+16535:   Bit_Row& red_0 = redundancy[0];
+16535:   for (dimension_type j = space_dim + 1; j-- > 0; ) {
+16535:     red_0.set(j);
+16535:   }
+16535:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
+16535:     redundancy[i] = red_0;
+16535:   }
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_c; N& c = holder_c.item();
+16535:   for (dimension_type l_i = 0; l_i < num_leaders; ++l_i) {
+16535:     const dimension_type i = leaders[l_i];
+16535:     const DB_Row<N>& dbm_i = dbm[i];
+16535:     Bit_Row& redundancy_i = redundancy[i];
+16535:     for (dimension_type l_j = 0; l_j < num_leaders; ++l_j) {
+16535:       const dimension_type j = leaders[l_j];
+16535:       if (redundancy_i[j]) {
+16535:         const N& dbm_i_j = dbm_i[j];
+16535:         redundancy_i.clear(j);
+16535:         for (dimension_type l_k = 0; l_k < num_leaders; ++l_k) {
+16535:           const dimension_type k = leaders[l_k];
+16535:           add_assign_r(c, dbm_i[k], dbm[k][j], ROUND_UP);
+16535:           if (dbm_i_j >= c) {
+16535:             redundancy_i.set(j);
+16535:             break;
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   std::deque<bool> dealt_with(space_dim + 1, false);
+16535:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
+16535: 
+16535: 
+16535:     if (i != predecessor[i] && !dealt_with[i]) {
+16535:       dimension_type j = i;
+16535:       while (true) {
+16535:         const dimension_type predecessor_j = predecessor[j];
+16535:         if (j == predecessor_j) {
+16535: 
+16535:           ((void) 0);
+16535:           redundancy[i].clear(j);
+16535: 
+16535: 
+16535:           break;
+16535:         }
+16535: 
+16535:         ((void) 0);
+16535:         redundancy[predecessor_j].clear(j);
+16535:         dealt_with[predecessor_j] = true;
+16535:         j = predecessor_j;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   BD_Shape<T>& x = const_cast<BD_Shape<T>&>(*this);
+16535:   using std::swap;
+16535:   swap(x.redundancy_dbm, redundancy);
+16535:   x.set_shortest_path_reduced();
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::upper_bound_assign(const BD_Shape& y) {
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535: 
+16535:   if (space_dim != y.space_dimension()) {
+16535:     throw_dimension_incompatible("upper_bound_assign(y)", y);
+16535:   }
+16535: 
+16535:   y.shortest_path_closure_assign();
+16535:   if (y.marked_empty()) {
+16535:     return;
+16535:   }
+16535:   shortest_path_closure_assign();
+16535:   if (marked_empty()) {
+16535:     *this = y;
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
+16535:     DB_Row<N>& dbm_i = dbm[i];
+16535:     const DB_Row<N>& y_dbm_i = y.dbm[i];
+16535:     for (dimension_type j = space_dim + 1; j-- > 0; ) {
+16535:       N& dbm_ij = dbm_i[j];
+16535:       const N& y_dbm_ij = y_dbm_i[j];
+16535:       if (dbm_ij < y_dbm_ij) {
+16535:         dbm_ij = y_dbm_ij;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   if (marked_shortest_path_reduced()) {
+16535:     reset_shortest_path_reduced();
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: BD_Shape<T>::BFT00_upper_bound_assign_if_exact(const BD_Shape& y) {
+16535: 
+16535:   const BD_Shape& x = *this;
+16535:   const dimension_type x_space_dim = x.space_dimension();
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535:   if (x_space_dim == 0) {
+16535:     upper_bound_assign(y);
+16535:     return true;
+16535:   }
+16535: 
+16535:   if (x.marked_empty()) {
+16535:     *this = y;
+16535:     return true;
+16535:   }
+16535:   else if (y.is_empty()) {
+16535:     return true;
+16535:   }
+16535:   else if (x.is_empty()) {
+16535:     *this = y;
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Variable epsilon(x_space_dim);
+16535:   Linear_Expression zero_expr;
+16535:   zero_expr.set_space_dimension(x_space_dim + 1);
+16535:   Linear_Expression db_expr;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Constraint_System env_cs;
+16535:   Constraint_System x_cs_removed;
+16535:   Constraint_System y_cs_removed;
+16535:   x.shortest_path_reduction_assign();
+16535:   y.shortest_path_reduction_assign();
+16535:   for (dimension_type i = x_space_dim + 1; i-- > 0; ) {
+16535:     const Bit_Row& x_red_i = x.redundancy_dbm[i];
+16535:     const Bit_Row& y_red_i = y.redundancy_dbm[i];
+16535:     const DB_Row<N>& x_dbm_i = x.dbm[i];
+16535:     const DB_Row<N>& y_dbm_i = y.dbm[i];
+16535:     for (dimension_type j = x_space_dim + 1; j-- > 0; ) {
+16535:       if (x_red_i[j] && y_red_i[j]) {
+16535:         continue;
+16535:       }
+16535:       if (!x_red_i[j]) {
+16535:         const N& x_dbm_ij = x_dbm_i[j];
+16535:         ((void) 0);
+16535:         numer_denom(x_dbm_ij, numer, denom);
+16535: 
+16535:         db_expr = zero_expr;
+16535:         if (i > 0) {
+16535:           db_expr += Variable(i-1);
+16535:         }
+16535:         if (j > 0) {
+16535:           db_expr -= Variable(j-1);
+16535:         }
+16535:         if (denom != 1) {
+16535:           db_expr *= denom;
+16535:         }
+16535:         db_expr += numer;
+16535:         if (x_dbm_ij >= y_dbm_i[j]) {
+16535:           env_cs.insert(db_expr >= 0);
+16535:         }
+16535:         else {
+16535:           db_expr += epsilon;
+16535:           x_cs_removed.insert(db_expr == 0);
+16535:         }
+16535:       }
+16535:       if (!y_red_i[j]) {
+16535:         const N& y_dbm_ij = y_dbm_i[j];
+16535:         const N& x_dbm_ij = x_dbm_i[j];
+16535:         ((void) 0);
+16535:         numer_denom(y_dbm_ij, numer, denom);
+16535: 
+16535:         db_expr = zero_expr;
+16535:         if (i > 0) {
+16535:           db_expr += Variable(i-1);
+16535:         }
+16535:         if (j > 0) {
+16535:           db_expr -= Variable(j-1);
+16535:         }
+16535:         if (denom != 1) {
+16535:           db_expr *= denom;
+16535:         }
+16535:         db_expr += numer;
+16535:         if (y_dbm_ij >= x_dbm_ij) {
+16535: 
+16535:           if (!x_red_i[j] && x_dbm_ij == y_dbm_ij) {
+16535:             continue;
+16535:           }
+16535:           env_cs.insert(db_expr >= 0);
+16535:         }
+16535:         else {
+16535:           db_expr += epsilon;
+16535:           y_cs_removed.insert(db_expr == 0);
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   if (x_cs_removed.empty()) {
+16535: 
+16535:     return true;
+16535:   }
+16535:   if (y_cs_removed.empty()) {
+16535: 
+16535:     *this = y;
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   MIP_Problem env_lp(x_space_dim + 1, env_cs, epsilon, MAXIMIZATION);
+16535: 
+16535:   env_lp.solve();
+16535:   ((void) 0);
+16535: 
+16535: 
+16535:   for (Constraint_System::const_iterator i = x_cs_removed.begin(),
+16535:          i_end = x_cs_removed.end(); i != i_end; ++i) {
+16535:     MIP_Problem lp_i(env_lp);
+16535:     lp_i.add_constraint(*i);
+16535: 
+16535:     if (lp_i.solve() == UNFEASIBLE_MIP_PROBLEM) {
+16535:       continue;
+16535:     }
+16535:     for (Constraint_System::const_iterator j = y_cs_removed.begin(),
+16535:            j_end = y_cs_removed.end(); j != j_end; ++j) {
+16535:       MIP_Problem lp_ij(lp_i);
+16535:       lp_ij.add_constraint(*j);
+16535: 
+16535:       switch (lp_ij.solve()) {
+16535:       case UNFEASIBLE_MIP_PROBLEM:
+16535: 
+16535:         Parma_Polyhedra_Library::ppl_unreachable();
+16535:         return false;
+16535:       case UNBOUNDED_MIP_PROBLEM:
+16535:         return false;
+16535:       case OPTIMIZED_MIP_PROBLEM:
+16535:         lp_ij.optimal_value(numer, denom);
+16535:         if (numer > 0) {
+16535:           return false;
+16535:         }
+16535:         break;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   upper_bound_assign(y);
+16535:   ((void) 0);
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <bool integer_upper_bound>
+16535: bool
+16535: BD_Shape<T>::BHZ09_upper_bound_assign_if_exact(const BD_Shape& y) {
+16535:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_2368 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!integer_upper_bound || std::numeric_limits<T>::is_integer)>) }
+16535: 
+16535: 
+16535: 
+16535:                                                               ;
+16535: 
+16535: 
+16535: 
+16535:   const BD_Shape& x = *this;
+16535:   const dimension_type x_space_dim = x.space_dimension();
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535:   if (x_space_dim == 0) {
+16535:     upper_bound_assign(y);
+16535:     return true;
+16535:   }
+16535: 
+16535:   if (x.marked_empty()) {
+16535:     *this = y;
+16535:     return true;
+16535:   }
+16535:   else if (y.is_empty()) {
+16535:     return true;
+16535:   }
+16535:   else if (x.is_empty()) {
+16535:     *this = y;
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   x.shortest_path_reduction_assign();
+16535:   y.shortest_path_reduction_assign();
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535:   BD_Shape<T> ub(x);
+16535:   ub.upper_bound_assign(y);
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_lhs; N& lhs = holder_lhs.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_rhs; N& rhs = holder_rhs.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_temp_zero; N& temp_zero = holder_temp_zero.item();
+16535:   assign_r(temp_zero, 0, ROUND_NOT_NEEDED);
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_temp_one; N& temp_one = holder_temp_one.item();
+16535:   if (integer_upper_bound) {
+16535:     assign_r(temp_one, 1, ROUND_NOT_NEEDED);
+16535:   }
+16535:   for (dimension_type i = x_space_dim + 1; i-- > 0; ) {
+16535:     const DB_Row<N>& x_i = x.dbm[i];
+16535:     const Bit_Row& x_red_i = x.redundancy_dbm[i];
+16535:     const DB_Row<N>& y_i = y.dbm[i];
+16535:     const DB_Row<N>& ub_i = ub.dbm[i];
+16535:     for (dimension_type j = x_space_dim + 1; j-- > 0; ) {
+16535: 
+16535:       if (x_red_i[j]) {
+16535:         continue;
+16535:       }
+16535: 
+16535:       ((void) 0);
+16535:       const N& x_i_j = x_i[j];
+16535:       if (x_i_j < y_i[j]) {
+16535:         for (dimension_type k = x_space_dim + 1; k-- > 0; ) {
+16535:           const DB_Row<N>& x_k = x.dbm[k];
+16535:           const DB_Row<N>& y_k = y.dbm[k];
+16535:           const Bit_Row& y_red_k = y.redundancy_dbm[k];
+16535:           const DB_Row<N>& ub_k = ub.dbm[k];
+16535:           const N& ub_k_j = (k == j) ? temp_zero : ub_k[j];
+16535:           for (dimension_type ell = x_space_dim + 1; ell-- > 0; ) {
+16535: 
+16535:             if (y_red_k[ell]) {
+16535:               continue;
+16535:             }
+16535: 
+16535:             ((void) 0);
+16535:             const N& y_k_ell = y_k[ell];
+16535:             if (y_k_ell < x_k[ell]) {
+16535: 
+16535: 
+16535:               add_assign_r(lhs, x_i_j, y_k_ell, ROUND_UP);
+16535:               const N& ub_i_ell = (i == ell) ? temp_zero : ub_i[ell];
+16535:               add_assign_r(rhs, ub_i_ell, ub_k_j, ROUND_UP);
+16535:               if (integer_upper_bound) {
+16535: 
+16535: 
+16535:                 add_assign_r(lhs, lhs, temp_one, ROUND_NOT_NEEDED);
+16535:               }
+16535: 
+16535:               if (lhs < rhs) {
+16535:                 return false;
+16535:               }
+16535:             }
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   m_swap(ub);
+16535:   ((void) 0);
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::difference_assign(const BD_Shape& y) {
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535: 
+16535:   if (space_dim != y.space_dimension()) {
+16535:     throw_dimension_incompatible("difference_assign(y)", y);
+16535:   }
+16535:   BD_Shape new_bd_shape(space_dim, EMPTY);
+16535: 
+16535:   BD_Shape& x = *this;
+16535: 
+16535:   x.shortest_path_closure_assign();
+16535: 
+16535: 
+16535:   if (x.marked_empty()) {
+16535:     return;
+16535:   }
+16535:   y.shortest_path_closure_assign();
+16535: 
+16535: 
+16535:   if (y.marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     x.set_empty();
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (y.contains(x)) {
+16535:     x.set_empty();
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const Constraint_System& y_cs = y.constraints();
+16535:   for (Constraint_System::const_iterator i = y_cs.begin(),
+16535:          y_cs_end = y_cs.end(); i != y_cs_end; ++i) {
+16535:     const Constraint& c = *i;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     if (x.relation_with(c).implies(Poly_Con_Relation::is_included())) {
+16535:       continue;
+16535:     }
+16535:     BD_Shape z = x;
+16535:     const Linear_Expression e(c.expression());
+16535:     z.add_constraint(e <= 0);
+16535:     if (!z.is_empty()) {
+16535:       new_bd_shape.upper_bound_assign(z);
+16535:     }
+16535:     if (c.is_equality()) {
+16535:       z = x;
+16535:       z.add_constraint(e >= 0);
+16535:       if (!z.is_empty()) {
+16535:         new_bd_shape.upper_bound_assign(z);
+16535:       }
+16535:     }
+16535:   }
+16535:   *this = new_bd_shape;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: BD_Shape<T>::simplify_using_context_assign(const BD_Shape& y) {
+16535:   BD_Shape& x = *this;
+16535:   const dimension_type dim = x.space_dimension();
+16535: 
+16535:   if (dim != y.space_dimension()) {
+16535:     throw_dimension_incompatible("simplify_using_context_assign(y)", y);
+16535:   }
+16535: 
+16535:   if (dim == 0) {
+16535:     if (y.marked_empty()) {
+16535:       x.set_zero_dim_univ();
+16535:       return false;
+16535:     }
+16535:     else {
+16535:       return !x.marked_empty();
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   y.shortest_path_closure_assign();
+16535:   if (x.contains(y)) {
+16535:     BD_Shape<T> res(dim, UNIVERSE);
+16535:     x.m_swap(res);
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535:   x.shortest_path_closure_assign();
+16535:   if (x.marked_empty()) {
+16535: 
+16535:     dimension_type i;
+16535:     dimension_type j;
+16535: 
+16535:     i = 0;
+16535:     const DB_Row<N>& y_dbm_0 = y.dbm[0];
+16535:     for (j = 1; j <= dim; ++j) {
+16535:       if (!is_plus_infinity(y_dbm_0[j])) {
+16535: 
+16535: 
+16535: 
+16535:         goto found;
+16535:       }
+16535:     }
+16535:     j = 0;
+16535:     for (i = 1; i <= dim; ++i) {
+16535:       if (!is_plus_infinity(y.dbm[i][0])) {
+16535: 
+16535: 
+16535: 
+16535:         goto found;
+16535:       }
+16535:     }
+16535: 
+16535:     for (i = 1; i <= dim; ++i) {
+16535:       const DB_Row<N>& y_dbm_i = y.dbm[i];
+16535:       for (j = 1; j <= dim; ++j) {
+16535:         if (!is_plus_infinity(y_dbm_i[j])) {
+16535: 
+16535: 
+16535: 
+16535:           goto found;
+16535:         }
+16535:       }
+16535:     }
+16535: 
+16535: 
+16535:     return false;
+16535: 
+16535:   found:
+16535: 
+16535:     ((void) 0);
+16535:     BD_Shape<T> res(dim, UNIVERSE);
+16535:     Parma_Polyhedra_Library::Dirty_Temp<N> holder_tmp; N& tmp = holder_tmp.item();
+16535:     assign_r(tmp, 1, ROUND_UP);
+16535:     add_assign_r(tmp, tmp, y.dbm[i][j], ROUND_UP);
+16535:     ((void) 0);
+16535: 
+16535:     neg_assign_r(res.dbm[j][i], tmp, ROUND_DOWN);
+16535:     x.m_swap(res);
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   BD_Shape<T> target = x;
+16535:   target.intersection_assign(y);
+16535:   const bool bool_result = !target.is_empty();
+16535: 
+16535: 
+16535:   x.shortest_path_reduction_assign();
+16535: 
+16535:   dimension_type x_num_non_redundant = (dim+1)*(dim+1);
+16535:   for (dimension_type i = dim + 1; i-- > 0; ) {
+16535:     x_num_non_redundant -= x.redundancy_dbm[i].count_ones();
+16535:   }
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   BD_Shape<T> yy = y;
+16535: 
+16535: 
+16535:   BD_Shape<T> res(dim, UNIVERSE);
+16535: 
+16535:   dimension_type res_num_non_redundant = 0;
+16535: 
+16535: 
+16535:   std::vector<dimension_type> x_leaders;
+16535:   x.compute_leaders(x_leaders);
+16535: 
+16535: 
+16535:   const DB_Row<N>& x_dbm_0 = x.dbm[0];
+16535:   DB_Row<N>& yy_dbm_0 = yy.dbm[0];
+16535:   DB_Row<N>& res_dbm_0 = res.dbm[0];
+16535:   for (dimension_type j = 1; j <= dim; ++j) {
+16535: 
+16535: 
+16535:     if (x_leaders[j] != 0) {
+16535:       continue;
+16535:     }
+16535:     ((void) 0);
+16535:     if (x_dbm_0[j] < yy_dbm_0[j]) {
+16535:       res_dbm_0[j] = x_dbm_0[j];
+16535:       ++res_num_non_redundant;
+16535: 
+16535:       yy_dbm_0[j] = x_dbm_0[j];
+16535:       yy.reset_shortest_path_closed();
+16535:     }
+16535:     ((void) 0);
+16535:     if (x.dbm[j][0] < yy.dbm[j][0]) {
+16535:       res.dbm[j][0] = x.dbm[j][0];
+16535:       ++res_num_non_redundant;
+16535: 
+16535:       yy.dbm[j][0] = x.dbm[j][0];
+16535:       yy.reset_shortest_path_closed();
+16535:     }
+16535: 
+16535:     if (!yy.marked_shortest_path_closed()) {
+16535:       Variable var_j(j-1);
+16535:       yy.incremental_shortest_path_closure_assign(var_j);
+16535:       if (target.contains(yy)) {
+16535: 
+16535:         if (res_num_non_redundant < x_num_non_redundant) {
+16535:           res.reset_shortest_path_closed();
+16535:           x.m_swap(res);
+16535:         }
+16535:         return bool_result;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   for (dimension_type i = 2; i <= dim; ++i) {
+16535:     const dimension_type j = x_leaders[i];
+16535:     if (j == i || j == 0) {
+16535:       continue;
+16535:     }
+16535:     ((void) 0);
+16535:     if (x.dbm[i][j] < yy.dbm[i][j]) {
+16535:       res.dbm[i][j] = x.dbm[i][j];
+16535:       ++res_num_non_redundant;
+16535: 
+16535:       yy.dbm[i][j] = x.dbm[i][j];
+16535:       yy.reset_shortest_path_closed();
+16535:     }
+16535:     ((void) 0);
+16535:     if (x.dbm[j][i] < yy.dbm[j][i]) {
+16535:       res.dbm[j][i] = x.dbm[j][i];
+16535:       ++res_num_non_redundant;
+16535: 
+16535:       yy.dbm[j][i] = x.dbm[j][i];
+16535:       yy.reset_shortest_path_closed();
+16535:     }
+16535: 
+16535:     if (!yy.marked_shortest_path_closed()) {
+16535:       Variable var_j(j-1);
+16535:       yy.incremental_shortest_path_closure_assign(var_j);
+16535:       if (target.contains(yy)) {
+16535: 
+16535:         if (res_num_non_redundant < x_num_non_redundant) {
+16535:           res.reset_shortest_path_closed();
+16535:           x.m_swap(res);
+16535:         }
+16535:         return bool_result;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   for (dimension_type i = 0; i <= dim; ++i) {
+16535:     if (i != x_leaders[i]) {
+16535:       continue;
+16535:     }
+16535:     const DB_Row<N>& x_dbm_i = x.dbm[i];
+16535:     const Bit_Row& x_redundancy_dbm_i = x.redundancy_dbm[i];
+16535:     DB_Row<N>& yy_dbm_i = yy.dbm[i];
+16535:     DB_Row<N>& res_dbm_i = res.dbm[i];
+16535:     for (dimension_type j = 0; j <= dim; ++j) {
+16535:       if (j != x_leaders[j] || x_redundancy_dbm_i[j]) {
+16535:         continue;
+16535:       }
+16535:       N& yy_dbm_ij = yy_dbm_i[j];
+16535:       const N& x_dbm_ij = x_dbm_i[j];
+16535:       if (x_dbm_ij < yy_dbm_ij) {
+16535:         res_dbm_i[j] = x_dbm_ij;
+16535:         ++res_num_non_redundant;
+16535: 
+16535:         yy_dbm_ij = x_dbm_ij;
+16535:         yy.reset_shortest_path_closed();
+16535:         ((void) 0);
+16535:         Variable var(((i > 0) ? i : j) - 1);
+16535:         yy.incremental_shortest_path_closure_assign(var);
+16535:         if (target.contains(yy)) {
+16535: 
+16535:           if (res_num_non_redundant < x_num_non_redundant) {
+16535:             res.reset_shortest_path_closed();
+16535:             x.m_swap(res);
+16535:           }
+16535:           return bool_result;
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::ppl_unreachable();
+16535:   return false;
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::add_space_dimensions_and_embed(const dimension_type m) {
+16535: 
+16535:   if (m == 0) {
+16535:     return;
+16535:   }
+16535:   const dimension_type space_dim = space_dimension();
+16535:   const dimension_type new_space_dim = space_dim + m;
+16535:   const bool was_zero_dim_univ = (!marked_empty() && space_dim == 0);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dbm.grow(new_space_dim + 1);
+16535: 
+16535: 
+16535: 
+16535:   if (marked_shortest_path_reduced()) {
+16535:     reset_shortest_path_reduced();
+16535:   }
+16535: 
+16535: 
+16535:   if (was_zero_dim_univ) {
+16535:     set_shortest_path_closed();
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::add_space_dimensions_and_project(const dimension_type m) {
+16535: 
+16535:   if (m == 0) {
+16535:     return;
+16535:   }
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     dbm.grow(m + 1);
+16535:     if (!marked_empty()) {
+16535:       for (dimension_type i = m + 1; i-- > 0; ) {
+16535:         DB_Row<N>& dbm_i = dbm[i];
+16535:         for (dimension_type j = m + 1; j-- > 0; ) {
+16535:           if (i != j) {
+16535:             assign_r(dbm_i[j], 0, ROUND_NOT_NEEDED);
+16535:           }
+16535:         }
+16535:       }
+16535:       set_shortest_path_closed();
+16535:     }
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type new_space_dim = space_dim + m;
+16535:   dbm.grow(new_space_dim + 1);
+16535: 
+16535: 
+16535:   DB_Row<N>& dbm_0 = dbm[0];
+16535:   for (dimension_type i = space_dim + 1; i <= new_space_dim; ++i) {
+16535:     assign_r(dbm[i][0], 0, ROUND_NOT_NEEDED);
+16535:     assign_r(dbm_0[i], 0, ROUND_NOT_NEEDED);
+16535:   }
+16535: 
+16535:   if (marked_shortest_path_closed()) {
+16535:     reset_shortest_path_closed();
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::remove_space_dimensions(const Variables_Set& vars) {
+16535: 
+16535: 
+16535: 
+16535:   if (vars.empty()) {
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535:   const dimension_type old_space_dim = space_dimension();
+16535: 
+16535: 
+16535:   const dimension_type min_space_dim = vars.space_dimension();
+16535:   if (old_space_dim < min_space_dim) {
+16535:     throw_dimension_incompatible("remove_space_dimensions(vs)", min_space_dim);
+16535:   }
+16535: 
+16535:   shortest_path_closure_assign();
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type new_space_dim = old_space_dim - vars.size();
+16535:   if (new_space_dim == 0) {
+16535:     dbm.resize_no_copy(1);
+16535:     if (!marked_empty()) {
+16535: 
+16535:       set_zero_dim_univ();
+16535:     }
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     dbm.resize_no_copy(new_space_dim + 1);
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (marked_shortest_path_reduced()) {
+16535:     reset_shortest_path_reduced();
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   Variables_Set::const_iterator vsi = vars.begin();
+16535:   Variables_Set::const_iterator vsi_end = vars.end();
+16535:   dimension_type dst = *vsi + 1;
+16535:   dimension_type src = dst + 1;
+16535:   for (++vsi; vsi != vsi_end; ++vsi) {
+16535:     const dimension_type vsi_next = *vsi + 1;
+16535: 
+16535: 
+16535:     while (src < vsi_next) {
+16535:       using std::swap;
+16535:       swap(dbm[dst], dbm[src]);
+16535:       for (dimension_type i = old_space_dim + 1; i-- > 0; ) {
+16535:         DB_Row<N>& dbm_i = dbm[i];
+16535:         assign_or_swap(dbm_i[dst], dbm_i[src]);
+16535:       }
+16535:       ++dst;
+16535:       ++src;
+16535:     }
+16535:     ++src;
+16535:   }
+16535: 
+16535: 
+16535:   while (src <= old_space_dim) {
+16535:     using std::swap;
+16535:     swap(dbm[dst], dbm[src]);
+16535:     for (dimension_type i = old_space_dim + 1; i-- > 0; ) {
+16535:       DB_Row<N>& dbm_i = dbm[i];
+16535:       assign_or_swap(dbm_i[dst], dbm_i[src]);
+16535:     }
+16535:     ++src;
+16535:     ++dst;
+16535:   }
+16535: 
+16535: 
+16535:   dbm.resize_no_copy(new_space_dim + 1);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Partial_Function>
+16535: void
+16535: BD_Shape<T>::map_space_dimensions(const Partial_Function& pfunc) {
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return;
+16535:   }
+16535:   if (pfunc.has_empty_codomain()) {
+16535: 
+16535:     remove_higher_space_dimensions(0);
+16535:     return;
+16535:   }
+16535: 
+16535:   const dimension_type new_space_dim = pfunc.max_in_codomain() + 1;
+16535: 
+16535: 
+16535:   if (new_space_dim < space_dim) {
+16535:     shortest_path_closure_assign();
+16535:   }
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     remove_higher_space_dimensions(new_space_dim);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (marked_shortest_path_reduced()) {
+16535:     reset_shortest_path_reduced();
+16535:   }
+16535: 
+16535:   DB_Matrix<N> x(new_space_dim+1);
+16535: 
+16535: 
+16535: 
+16535:   DB_Row<N>& dbm_0 = dbm[0];
+16535:   DB_Row<N>& x_0 = x[0];
+16535:   for (dimension_type j = 1; j <= space_dim; ++j) {
+16535:     dimension_type new_j;
+16535:     if (pfunc.maps(j - 1, new_j)) {
+16535:       assign_or_swap(x_0[new_j + 1], dbm_0[j]);
+16535:       assign_or_swap(x[new_j + 1][0], dbm[j][0]);
+16535:     }
+16535:   }
+16535: 
+16535:   for (dimension_type i = 1; i <= space_dim; ++i) {
+16535:     dimension_type new_i;
+16535:     if (pfunc.maps(i - 1, new_i)) {
+16535:       DB_Row<N>& dbm_i = dbm[i];
+16535:       ++new_i;
+16535:       DB_Row<N>& x_new_i = x[new_i];
+16535:       for (dimension_type j = i+1; j <= space_dim; ++j) {
+16535:         dimension_type new_j;
+16535:         if (pfunc.maps(j - 1, new_j)) {
+16535:           ++new_j;
+16535:           assign_or_swap(x_new_i[new_j], dbm_i[j]);
+16535:           assign_or_swap(x[new_j][new_i], dbm[j][i]);
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   using std::swap;
+16535:   swap(dbm, x);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::intersection_assign(const BD_Shape& y) {
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535: 
+16535:   if (space_dim != y.space_dimension()) {
+16535:     throw_dimension_incompatible("intersection_assign(y)", y);
+16535:   }
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535:   if (y.marked_empty()) {
+16535:     set_empty();
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   bool changed = false;
+16535:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
+16535:     DB_Row<N>& dbm_i = dbm[i];
+16535:     const DB_Row<N>& y_dbm_i = y.dbm[i];
+16535:     for (dimension_type j = space_dim + 1; j-- > 0; ) {
+16535:       N& dbm_ij = dbm_i[j];
+16535:       const N& y_dbm_ij = y_dbm_i[j];
+16535:       if (dbm_ij > y_dbm_ij) {
+16535:         dbm_ij = y_dbm_ij;
+16535:         changed = true;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   if (changed && marked_shortest_path_closed()) {
+16535:     reset_shortest_path_closed();
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Iterator>
+16535: void
+16535: BD_Shape<T>::CC76_extrapolation_assign(const BD_Shape& y,
+16535:                                        Iterator first, Iterator last,
+16535:                                        unsigned* tp) {
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535: 
+16535:   if (space_dim != y.space_dimension()) {
+16535:     throw_dimension_incompatible("CC76_extrapolation_assign(y)", y);
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return;
+16535:   }
+16535:   shortest_path_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535:   y.shortest_path_closure_assign();
+16535: 
+16535:   if (y.marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   if (tp != 0 && *tp > 0) {
+16535:     BD_Shape<T> x_tmp(*this);
+16535:     x_tmp.CC76_extrapolation_assign(y, first, last, 0);
+16535: 
+16535:     if (!contains(x_tmp)) {
+16535:       --(*tp);
+16535:     }
+16535:     return;
+16535:   }
+16535: # 3108 "../../src/BD_Shape_templates.hh"
+16535:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
+16535:     DB_Row<N>& dbm_i = dbm[i];
+16535:     const DB_Row<N>& y_dbm_i = y.dbm[i];
+16535:     for (dimension_type j = space_dim + 1; j-- > 0; ) {
+16535:       N& dbm_ij = dbm_i[j];
+16535:       const N& y_dbm_ij = y_dbm_i[j];
+16535:       if (y_dbm_ij < dbm_ij) {
+16535:         Iterator k = std::lower_bound(first, last, dbm_ij);
+16535:         if (k != last) {
+16535:           if (dbm_ij < *k) {
+16535:             assign_r(dbm_ij, *k, ROUND_UP);
+16535:           }
+16535:         }
+16535:         else {
+16535:           assign_r(dbm_ij, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535:   reset_shortest_path_closed();
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::get_limiting_shape(const Constraint_System& cs,
+16535:                                 BD_Shape& limiting_shape) const {
+16535: 
+16535:   ((void) 0);
+16535: 
+16535:   shortest_path_closure_assign();
+16535:   bool changed = false;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_coeff; Parma_Polyhedra_Library::Coefficient& coeff = holder_coeff.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_c_term; Parma_Polyhedra_Library::Coefficient& minus_c_term = holder_minus_c_term.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_d1; N& d1 = holder_d1.item();
+16535:   for (Constraint_System::const_iterator cs_i = cs.begin(),
+16535:          cs_end = cs.end(); cs_i != cs_end; ++cs_i) {
+16535:     const Constraint& c = *cs_i;
+16535:     dimension_type num_vars = 0;
+16535:     dimension_type i = 0;
+16535:     dimension_type j = 0;
+16535: 
+16535:     if (BD_Shape_Helpers::extract_bounded_difference(c, num_vars, i, j, coeff)) {
+16535: 
+16535: 
+16535:       const bool negative = (coeff < 0);
+16535:       const N& x = negative ? dbm[i][j] : dbm[j][i];
+16535:       const N& y = negative ? dbm[j][i] : dbm[i][j];
+16535:       DB_Matrix<N>& ls_dbm = limiting_shape.dbm;
+16535:       if (negative) {
+16535:         neg_assign(coeff);
+16535:       }
+16535: 
+16535:       div_round_up(d, c.inhomogeneous_term(), coeff);
+16535:       if (x <= d) {
+16535:         if (c.is_inequality()) {
+16535:           N& ls_x = negative ? ls_dbm[i][j] : ls_dbm[j][i];
+16535:           if (ls_x > d) {
+16535:             ls_x = d;
+16535:             changed = true;
+16535:           }
+16535:         }
+16535:         else {
+16535: 
+16535:           neg_assign(minus_c_term, c.inhomogeneous_term());
+16535:           div_round_up(d1, minus_c_term, coeff);
+16535:           if (y <= d1) {
+16535:             N& ls_x = negative ? ls_dbm[i][j] : ls_dbm[j][i];
+16535:             N& ls_y = negative ? ls_dbm[j][i] : ls_dbm[i][j];
+16535:             if ((ls_x >= d && ls_y > d1) || (ls_x > d && ls_y >= d1)) {
+16535:               ls_x = d;
+16535:               ls_y = d1;
+16535:               changed = true;
+16535:             }
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (changed && limiting_shape.marked_shortest_path_closed()) {
+16535:     limiting_shape.reset_shortest_path_closed();
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::limited_CC76_extrapolation_assign(const BD_Shape& y,
+16535:                                                const Constraint_System& cs,
+16535:                                                unsigned* tp) {
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535:   if (space_dim != y.space_dimension()) {
+16535:     throw_dimension_incompatible("limited_CC76_extrapolation_assign(y, cs)",
+16535:                                  y);
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type cs_space_dim = cs.space_dimension();
+16535:   if (space_dim < cs_space_dim) {
+16535:     throw_invalid_argument("limited_CC76_extrapolation_assign(y, cs)",
+16535:                            "cs is space_dimension incompatible");
+16535:   }
+16535: 
+16535: 
+16535:   if (cs.has_strict_inequalities()) {
+16535:     throw_invalid_argument("limited_CC76_extrapolation_assign(y, cs)",
+16535:                            "cs has strict inequalities");
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   if (y.marked_empty()) {
+16535:     return;
+16535:   }
+16535:   BD_Shape<T> limiting_shape(space_dim, UNIVERSE);
+16535:   get_limiting_shape(cs, limiting_shape);
+16535:   CC76_extrapolation_assign(y, tp);
+16535:   intersection_assign(limiting_shape);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::BHMZ05_widening_assign(const BD_Shape& y, unsigned* tp) {
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535: 
+16535:   if (space_dim != y.space_dimension()) {
+16535:     throw_dimension_incompatible("BHMZ05_widening_assign(y)", y);
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535:   const dimension_type y_affine_dim = y.affine_dimension();
+16535: 
+16535: 
+16535: 
+16535:   if (y_affine_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type x_affine_dim = affine_dimension();
+16535:   ((void) 0);
+16535:   if (x_affine_dim != y_affine_dim) {
+16535:     return;
+16535:   }
+16535: 
+16535:   if (tp != 0 && *tp > 0) {
+16535:     BD_Shape<T> x_tmp(*this);
+16535:     x_tmp.BHMZ05_widening_assign(y, 0);
+16535: 
+16535:     if (!contains(x_tmp)) {
+16535:       --(*tp);
+16535:     }
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: 
+16535:   y.shortest_path_reduction_assign();
+16535: 
+16535: 
+16535:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
+16535:     DB_Row<N>& dbm_i = dbm[i];
+16535:     const DB_Row<N>& y_dbm_i = y.dbm[i];
+16535:     const Bit_Row& y_redundancy_i = y.redundancy_dbm[i];
+16535:     for (dimension_type j = space_dim + 1; j-- > 0; ) {
+16535:       N& dbm_ij = dbm_i[j];
+16535: 
+16535: 
+16535: 
+16535:       if (y_redundancy_i[j] || y_dbm_i[j] != dbm_ij) {
+16535:         assign_r(dbm_ij, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   reset_shortest_path_closed();
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::limited_BHMZ05_extrapolation_assign(const BD_Shape& y,
+16535:                                                  const Constraint_System& cs,
+16535:                                                  unsigned* tp) {
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535:   if (space_dim != y.space_dimension()) {
+16535:     throw_dimension_incompatible("limited_BHMZ05_extrapolation_assign(y, cs)",
+16535:                                  y);
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type cs_space_dim = cs.space_dimension();
+16535:   if (space_dim < cs_space_dim) {
+16535:     throw_invalid_argument("limited_BHMZ05_extrapolation_assign(y, cs)",
+16535:                            "cs is space-dimension incompatible");
+16535:   }
+16535: 
+16535:   if (cs.has_strict_inequalities()) {
+16535:     throw_invalid_argument("limited_BHMZ05_extrapolation_assign(y, cs)",
+16535:                            "cs has strict inequalities");
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   if (y.marked_empty()) {
+16535:     return;
+16535:   }
+16535:   BD_Shape<T> limiting_shape(space_dim, UNIVERSE);
+16535:   get_limiting_shape(cs, limiting_shape);
+16535:   BHMZ05_widening_assign(y, tp);
+16535:   intersection_assign(limiting_shape);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::CC76_narrowing_assign(const BD_Shape& y) {
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535: 
+16535:   if (space_dim != y.space_dimension()) {
+16535:     throw_dimension_incompatible("CC76_narrowing_assign(y)", y);
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return;
+16535:   }
+16535:   y.shortest_path_closure_assign();
+16535: 
+16535:   if (y.marked_empty()) {
+16535:     return;
+16535:   }
+16535:   shortest_path_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   bool changed = false;
+16535:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
+16535:     DB_Row<N>& dbm_i = dbm[i];
+16535:     const DB_Row<N>& y_dbm_i = y.dbm[i];
+16535:     for (dimension_type j = space_dim + 1; j-- > 0; ) {
+16535:       N& dbm_ij = dbm_i[j];
+16535:       const N& y_dbm_ij = y_dbm_i[j];
+16535:       if (!is_plus_infinity(dbm_ij)
+16535:           && !is_plus_infinity(y_dbm_ij)
+16535:           && dbm_ij != y_dbm_ij) {
+16535:         dbm_ij = y_dbm_ij;
+16535:         changed = true;
+16535:       }
+16535:     }
+16535:   }
+16535:   if (changed && marked_shortest_path_closed()) {
+16535:     reset_shortest_path_closed();
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>
+16535: ::deduce_v_minus_u_bounds(const dimension_type v,
+16535:                           const dimension_type last_v,
+16535:                           const Linear_Expression& sc_expr,
+16535:                           Coefficient_traits::const_reference sc_denom,
+16535:                           const N& ub_v) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: # 3423 "../../src/BD_Shape_templates.hh"
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_mpq_sc_denom; mpq_class& mpq_sc_denom = holder_mpq_sc_denom.item();
+16535:   assign_r(mpq_sc_denom, sc_denom, ROUND_NOT_NEEDED);
+16535:   const DB_Row<N>& dbm_0 = dbm[0];
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_minus_lb_u; mpq_class& minus_lb_u = holder_minus_lb_u.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_ub_u; mpq_class& ub_u = holder_ub_u.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_up_approx; N& up_approx = holder_up_approx.item();
+16535:   for (Linear_Expression::const_iterator u = sc_expr.begin(),
+16535:         u_end = sc_expr.lower_bound(Variable(last_v)); u != u_end; ++u) {
+16535:     const dimension_type u_dim = u.variable().space_dimension();
+16535:     if (u_dim == v) {
+16535:       continue;
+16535:     }
+16535:     const Coefficient& expr_u = *u;
+16535:     if (expr_u < 0) {
+16535:       continue;
+16535:     }
+16535:     ((void) 0);
+16535:     if (expr_u >= sc_denom) {
+16535: 
+16535:       sub_assign_r(dbm[u_dim][v], ub_v, dbm_0[u_dim], ROUND_UP);
+16535:     }
+16535:     else {
+16535:       DB_Row<N>& dbm_u = dbm[u_dim];
+16535:       const N& dbm_u0 = dbm_u[0];
+16535:       if (!is_plus_infinity(dbm_u0)) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:         assign_r(minus_lb_u, dbm_u0, ROUND_NOT_NEEDED);
+16535:         assign_r(q, expr_u, ROUND_NOT_NEEDED);
+16535:         div_assign_r(q, q, mpq_sc_denom, ROUND_NOT_NEEDED);
+16535:         assign_r(ub_u, dbm_0[u_dim], ROUND_NOT_NEEDED);
+16535: 
+16535:         add_assign_r(ub_u, ub_u, minus_lb_u, ROUND_NOT_NEEDED);
+16535: 
+16535:         sub_mul_assign_r(minus_lb_u, q, ub_u, ROUND_NOT_NEEDED);
+16535:         assign_r(up_approx, minus_lb_u, ROUND_UP);
+16535: 
+16535:         add_assign_r(dbm_u[v], ub_v, up_approx, ROUND_UP);
+16535:       }
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>
+16535: ::deduce_u_minus_v_bounds(const dimension_type v,
+16535:                           const dimension_type last_v,
+16535:                           const Linear_Expression& sc_expr,
+16535:                           Coefficient_traits::const_reference sc_denom,
+16535:                           const N& minus_lb_v) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: # 3490 "../../src/BD_Shape_templates.hh"
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_mpq_sc_denom; mpq_class& mpq_sc_denom = holder_mpq_sc_denom.item();
+16535:   assign_r(mpq_sc_denom, sc_denom, ROUND_NOT_NEEDED);
+16535:   DB_Row<N>& dbm_0 = dbm[0];
+16535:   DB_Row<N>& dbm_v = dbm[v];
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_ub_u; mpq_class& ub_u = holder_ub_u.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_minus_lb_u; mpq_class& minus_lb_u = holder_minus_lb_u.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_up_approx; N& up_approx = holder_up_approx.item();
+16535: 
+16535:   for (Linear_Expression::const_iterator u = sc_expr.begin(),
+16535:         u_end = sc_expr.lower_bound(Variable(last_v)); u != u_end; ++u) {
+16535:     const Variable u_var = u.variable();
+16535:     const dimension_type u_dim = u_var.space_dimension();
+16535:     if (u_var.space_dimension() == v) {
+16535:       continue;
+16535:     }
+16535:     const Coefficient& expr_u = *u;
+16535:     if (expr_u < 0) {
+16535:       continue;
+16535:     }
+16535:     ((void) 0);
+16535:     if (expr_u >= sc_denom) {
+16535: 
+16535: 
+16535:       sub_assign_r(dbm_v[u_dim], minus_lb_v, dbm[u_dim][0], ROUND_UP);
+16535:     }
+16535:     else {
+16535:       const N& dbm_0u = dbm_0[u_dim];
+16535:       if (!is_plus_infinity(dbm_0u)) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:         assign_r(ub_u, dbm_0u, ROUND_NOT_NEEDED);
+16535:         assign_r(q, expr_u, ROUND_NOT_NEEDED);
+16535:         div_assign_r(q, q, mpq_sc_denom, ROUND_NOT_NEEDED);
+16535:         assign_r(minus_lb_u, dbm[u_dim][0], ROUND_NOT_NEEDED);
+16535: 
+16535:         add_assign_r(minus_lb_u, minus_lb_u, ub_u, ROUND_NOT_NEEDED);
+16535: 
+16535:         sub_mul_assign_r(ub_u, q, minus_lb_u, ROUND_NOT_NEEDED);
+16535:         assign_r(up_approx, ub_u, ROUND_UP);
+16535: 
+16535:         add_assign_r(dbm_v[u_dim], up_approx, minus_lb_v, ROUND_UP);
+16535:       }
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::forget_all_dbm_constraints(const dimension_type v) {
+16535:   ((void) 0);
+16535:   DB_Row<N>& dbm_v = dbm[v];
+16535:   for (dimension_type i = dbm.num_rows(); i-- > 0; ) {
+16535:     assign_r(dbm_v[i], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     assign_r(dbm[i][v], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::forget_binary_dbm_constraints(const dimension_type v) {
+16535:   ((void) 0);
+16535:   DB_Row<N>& dbm_v = dbm[v];
+16535:   for (dimension_type i = dbm.num_rows()-1; i > 0; --i) {
+16535:     assign_r(dbm_v[i], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     assign_r(dbm[i][v], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::unconstrain(const Variable var) {
+16535: 
+16535:   const dimension_type var_space_dim = var.space_dimension();
+16535:   if (space_dimension() < var_space_dim) {
+16535:     throw_dimension_incompatible("unconstrain(var)", var_space_dim);
+16535:   }
+16535: 
+16535: 
+16535:   shortest_path_closure_assign();
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535:   forget_all_dbm_constraints(var_space_dim);
+16535: 
+16535:   reset_shortest_path_reduced();
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::unconstrain(const Variables_Set& vars) {
+16535: 
+16535: 
+16535:   if (vars.empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   const dimension_type min_space_dim = vars.space_dimension();
+16535:   if (space_dimension() < min_space_dim) {
+16535:     throw_dimension_incompatible("unconstrain(vs)", min_space_dim);
+16535:   }
+16535: 
+16535: 
+16535:   shortest_path_closure_assign();
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535:   for (Variables_Set::const_iterator vsi = vars.begin(),
+16535:          vsi_end = vars.end(); vsi != vsi_end; ++vsi) {
+16535:     forget_all_dbm_constraints(*vsi + 1);
+16535:   }
+16535: 
+16535:   reset_shortest_path_reduced();
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::refine(const Variable var,
+16535:                     const Relation_Symbol relsym,
+16535:                     const Linear_Expression& expr,
+16535:                     Coefficient_traits::const_reference denominator) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   const dimension_type v = var.id() + 1;
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535:   const Coefficient& b = expr.inhomogeneous_term();
+16535: 
+16535: 
+16535:   dimension_type t = 0;
+16535: 
+16535:   dimension_type w = expr.last_nonzero();
+16535: 
+16535:   if (w != 0) {
+16535:     ++t;
+16535:     if (!expr.all_zeroes(1, w)) {
+16535:       ++t;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (t == 1 && expr.get(Variable(w - 1)) != denominator) {
+16535:     t = 2;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const DB_Row<N>& dbm_0 = dbm[0];
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item();
+16535:   neg_assign(minus_denom, denominator);
+16535: 
+16535:   if (t == 0) {
+16535: 
+16535:     switch (relsym) {
+16535:     case EQUAL:
+16535: 
+16535:       add_dbm_constraint(0, v, b, denominator);
+16535:       add_dbm_constraint(v, 0, b, minus_denom);
+16535:       break;
+16535:     case LESS_OR_EQUAL:
+16535: 
+16535:       add_dbm_constraint(0, v, b, denominator);
+16535:       break;
+16535:     case GREATER_OR_EQUAL:
+16535: 
+16535: 
+16535:       add_dbm_constraint(v, 0, b, minus_denom);
+16535:       break;
+16535:     default:
+16535: 
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       break;
+16535:     }
+16535:     return;
+16535:   }
+16535: 
+16535:   if (t == 1) {
+16535: 
+16535:     ((void) 0);
+16535:     Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
+16535:     switch (relsym) {
+16535:     case EQUAL:
+16535: 
+16535:       div_round_up(d, b, denominator);
+16535:       add_dbm_constraint(w, v, d);
+16535: 
+16535: 
+16535:       div_round_up(d, b, minus_denom);
+16535:       add_dbm_constraint(v, w, d);
+16535:       break;
+16535:     case LESS_OR_EQUAL:
+16535: 
+16535:       div_round_up(d, b, denominator);
+16535:       add_dbm_constraint(w, v, d);
+16535:       break;
+16535:     case GREATER_OR_EQUAL:
+16535: 
+16535: 
+16535:       div_round_up(d, b, minus_denom);
+16535:       add_dbm_constraint(v, w, d);
+16535:       break;
+16535:     default:
+16535: 
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       break;
+16535:     }
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const bool is_sc = (denominator > 0);
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item();
+16535:   neg_assign(minus_b, b);
+16535:   const Coefficient& sc_b = is_sc ? b : minus_b;
+16535:   const Coefficient& minus_sc_b = is_sc ? minus_b : b;
+16535:   const Coefficient& sc_denom = is_sc ? denominator : minus_denom;
+16535:   const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator;
+16535: 
+16535: 
+16535: 
+16535:   Linear_Expression minus_expr;
+16535:   if (!is_sc) {
+16535:     minus_expr = -expr;
+16535:   }
+16535:   const Linear_Expression& sc_expr = is_sc ? expr : minus_expr;
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_sum; N& sum = holder_sum.item();
+16535: 
+16535:   dimension_type pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
+16535: 
+16535:   dimension_type pinf_count = 0;
+16535: 
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_i; N& coeff_i = holder_coeff_i.item();
+16535: 
+16535:   switch (relsym) {
+16535:   case EQUAL:
+16535:     {
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_neg_sum; N& neg_sum = holder_neg_sum.item();
+16535: 
+16535:       dimension_type neg_pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
+16535: 
+16535:       dimension_type neg_pinf_count = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       assign_r(sum, sc_b, ROUND_UP);
+16535:       assign_r(neg_sum, minus_sc_b, ROUND_UP);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       for (Linear_Expression::const_iterator i = sc_expr.begin(),
+16535:             i_end = sc_expr.lower_bound(Variable(w)); i != i_end; ++i) {
+16535:         const dimension_type i_dim = i.variable().space_dimension();
+16535:         const Coefficient& sc_i = *i;
+16535:         const int sign_i = sgn(sc_i);
+16535:         ((void) 0);
+16535:         if (sign_i > 0) {
+16535:           assign_r(coeff_i, sc_i, ROUND_UP);
+16535: 
+16535:           if (pinf_count <= 1) {
+16535:             const N& approx_i = dbm_0[i_dim];
+16535:             if (!is_plus_infinity(approx_i)) {
+16535:               add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP);
+16535:             }
+16535:             else {
+16535:               ++pinf_count;
+16535:               pinf_index = i_dim;
+16535:             }
+16535:           }
+16535: 
+16535:           if (neg_pinf_count <= 1) {
+16535:             const N& approx_minus_i = dbm[i_dim][0];
+16535:             if (!is_plus_infinity(approx_minus_i)) {
+16535:               add_mul_assign_r(neg_sum, coeff_i, approx_minus_i, ROUND_UP);
+16535:             }
+16535:             else {
+16535:               ++neg_pinf_count;
+16535:               neg_pinf_index = i_dim;
+16535:             }
+16535:           }
+16535:         }
+16535:         else {
+16535:           ((void) 0);
+16535:           neg_assign(minus_sc_i, sc_i);
+16535: 
+16535:           assign_r(coeff_i, minus_sc_i, ROUND_UP);
+16535: 
+16535:           if (pinf_count <= 1) {
+16535:             const N& approx_minus_i = dbm[i_dim][0];
+16535:             if (!is_plus_infinity(approx_minus_i)) {
+16535:               add_mul_assign_r(sum, coeff_i, approx_minus_i, ROUND_UP);
+16535:             }
+16535:             else {
+16535:               ++pinf_count;
+16535:               pinf_index = i_dim;
+16535:             }
+16535:           }
+16535: 
+16535:           if (neg_pinf_count <= 1) {
+16535:             const N& approx_i = dbm_0[i_dim];
+16535:             if (!is_plus_infinity(approx_i)) {
+16535:               add_mul_assign_r(neg_sum, coeff_i, approx_i, ROUND_UP);
+16535:             }
+16535:             else {
+16535:               ++neg_pinf_count;
+16535:               neg_pinf_index = i_dim;
+16535:             }
+16535:           }
+16535:         }
+16535:       }
+16535: 
+16535:       if (pinf_count > 1 && neg_pinf_count > 1) {
+16535:         ((void) 0);
+16535:         return;
+16535:       }
+16535: 
+16535: 
+16535:       reset_shortest_path_closed();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
+16535:       assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
+16535:       neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
+16535: 
+16535: 
+16535:       if (pinf_count <= 1) {
+16535: 
+16535:         if (down_sc_denom != 1) {
+16535:           div_assign_r(sum, sum, down_sc_denom, ROUND_UP);
+16535:         }
+16535: 
+16535:         if (pinf_count == 0) {
+16535: 
+16535:           dbm[0][v] = sum;
+16535: 
+16535:           deduce_v_minus_u_bounds(v, w, sc_expr, sc_denom, sum);
+16535:         }
+16535:         else {
+16535: 
+16535:           if (pinf_index != v
+16535:               && sc_expr.get(Variable(pinf_index - 1)) == sc_denom) {
+16535: 
+16535:             dbm[pinf_index][v] = sum;
+16535:           }
+16535:         }
+16535:       }
+16535: 
+16535: 
+16535:       if (neg_pinf_count <= 1) {
+16535: 
+16535:         if (down_sc_denom != 1) {
+16535:           div_assign_r(neg_sum, neg_sum, down_sc_denom, ROUND_UP);
+16535:         }
+16535: 
+16535:         if (neg_pinf_count == 0) {
+16535: 
+16535:           DB_Row<N>& dbm_v = dbm[v];
+16535:           dbm_v[0] = neg_sum;
+16535: 
+16535:           deduce_u_minus_v_bounds(v, w, sc_expr, sc_denom, neg_sum);
+16535:         }
+16535: 
+16535:         else if (neg_pinf_index != v
+16535:               && sc_expr.get(Variable(neg_pinf_index - 1)) == sc_denom) {
+16535: 
+16535: 
+16535:             dbm[v][neg_pinf_index] = neg_sum;
+16535:         }
+16535:       }
+16535:     }
+16535:     break;
+16535: 
+16535:   case LESS_OR_EQUAL:
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     assign_r(sum, sc_b, ROUND_UP);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     for (Linear_Expression::const_iterator i = sc_expr.begin(),
+16535:           i_end = sc_expr.lower_bound(Variable(w)); i != i_end; ++i) {
+16535:       const Coefficient& sc_i = *i;
+16535:       const dimension_type i_dim = i.variable().space_dimension();
+16535:       const int sign_i = sgn(sc_i);
+16535:       ((void) 0);
+16535: 
+16535:       const N& approx_i = (sign_i > 0) ? dbm_0[i_dim] : dbm[i_dim][0];
+16535:       if (is_plus_infinity(approx_i)) {
+16535:         if (++pinf_count > 1) {
+16535:           break;
+16535:         }
+16535:         pinf_index = i_dim;
+16535:         continue;
+16535:       }
+16535:       if (sign_i > 0) {
+16535:         assign_r(coeff_i, sc_i, ROUND_UP);
+16535:       }
+16535:       else {
+16535:         neg_assign(minus_sc_i, sc_i);
+16535:         assign_r(coeff_i, minus_sc_i, ROUND_UP);
+16535:       }
+16535:       add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP);
+16535:     }
+16535: 
+16535: 
+16535:     if (sc_denom != 1) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
+16535:       assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
+16535:       neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
+16535:       div_assign_r(sum, sum, down_sc_denom, ROUND_UP);
+16535:     }
+16535: 
+16535:     if (pinf_count == 0) {
+16535: 
+16535:       add_dbm_constraint(0, v, sum);
+16535: 
+16535:       deduce_v_minus_u_bounds(v, w, sc_expr, sc_denom, sum);
+16535:     }
+16535:     else if (pinf_count == 1) {
+16535:       if (expr.get(Variable(pinf_index - 1)) == denominator) {
+16535: 
+16535:         add_dbm_constraint(pinf_index, v, sum);
+16535:       }
+16535:     }
+16535:     break;
+16535: 
+16535:   case GREATER_OR_EQUAL:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     assign_r(sum, minus_sc_b, ROUND_UP);
+16535: 
+16535: 
+16535:     for (Linear_Expression::const_iterator i = sc_expr.begin(),
+16535:           i_end = sc_expr.lower_bound(Variable(w)); i != i_end; ++i) {
+16535:       const Coefficient& sc_i = *i;
+16535:       const dimension_type i_dim = i.variable().space_dimension();
+16535:       const int sign_i = sgn(sc_i);
+16535:       ((void) 0);
+16535: 
+16535:       const N& approx_i = (sign_i > 0) ? dbm[i_dim][0] : dbm_0[i_dim];
+16535:       if (is_plus_infinity(approx_i)) {
+16535:         if (++pinf_count > 1) {
+16535:           break;
+16535:         }
+16535:         pinf_index = i_dim;
+16535:         continue;
+16535:       }
+16535:       if (sign_i > 0) {
+16535:         assign_r(coeff_i, sc_i, ROUND_UP);
+16535:       }
+16535:       else {
+16535:         neg_assign(minus_sc_i, sc_i);
+16535:         assign_r(coeff_i, minus_sc_i, ROUND_UP);
+16535:       }
+16535:       add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP);
+16535:     }
+16535: 
+16535: 
+16535:     if (sc_denom != 1) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
+16535:       assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
+16535:       neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
+16535:       div_assign_r(sum, sum, down_sc_denom, ROUND_UP);
+16535:     }
+16535: 
+16535:     if (pinf_count == 0) {
+16535: 
+16535:       add_dbm_constraint(v, 0, sum);
+16535: 
+16535:       deduce_u_minus_v_bounds(v, w, sc_expr, sc_denom, sum);
+16535:     }
+16535:     else if (pinf_count == 1) {
+16535:       if (pinf_index != v
+16535:           && expr.get(Variable(pinf_index - 1)) == denominator) {
+16535: 
+16535: 
+16535:         add_dbm_constraint(v, pinf_index, sum);
+16535:       }
+16535:     }
+16535:     break;
+16535: 
+16535:   default:
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     break;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::affine_image(const Variable var,
+16535:                           const Linear_Expression& expr,
+16535:                           Coefficient_traits::const_reference denominator) {
+16535: 
+16535:   if (denominator == 0) {
+16535:     throw_invalid_argument("affine_image(v, e, d)", "d == 0");
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535:   const dimension_type expr_space_dim = expr.space_dimension();
+16535:   if (space_dim < expr_space_dim) {
+16535:     throw_dimension_incompatible("affine_image(v, e, d)", "e", expr);
+16535:   }
+16535: 
+16535:   const dimension_type v = var.id() + 1;
+16535:   if (v > space_dim) {
+16535:     throw_dimension_incompatible("affine_image(v, e, d)", var.id());
+16535:   }
+16535: 
+16535:   shortest_path_closure_assign();
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535:   const Coefficient& b = expr.inhomogeneous_term();
+16535: 
+16535: 
+16535:   dimension_type t = 0;
+16535: 
+16535:   dimension_type w = expr.last_nonzero();
+16535: 
+16535:   if (w != 0) {
+16535:     ++t;
+16535:     if (!expr.all_zeroes(1, w)) {
+16535:       ++t;
+16535:     }
+16535:   }
+16535: # 4071 "../../src/BD_Shape_templates.hh"
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item();
+16535:   neg_assign(minus_denom, denominator);
+16535: 
+16535:   if (t == 0) {
+16535: 
+16535: 
+16535:     forget_all_dbm_constraints(v);
+16535: 
+16535:     if (marked_shortest_path_reduced()) {
+16535:       reset_shortest_path_reduced();
+16535:     }
+16535: 
+16535:     add_dbm_constraint(0, v, b, denominator);
+16535:     add_dbm_constraint(v, 0, b, minus_denom);
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535:   if (t == 1) {
+16535: 
+16535:     const Coefficient& a = expr.get(Variable(w - 1));
+16535:     if (a == denominator || a == minus_denom) {
+16535: 
+16535:       if (w == v) {
+16535: 
+16535:         if (a == denominator) {
+16535:           if (b == 0) {
+16535: 
+16535:             return;
+16535:           }
+16535:           else {
+16535: 
+16535: 
+16535:             Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
+16535:             div_round_up(d, b, denominator);
+16535:             Parma_Polyhedra_Library::Dirty_Temp<N> holder_c; N& c = holder_c.item();
+16535:             div_round_up(c, b, minus_denom);
+16535:             DB_Row<N>& dbm_v = dbm[v];
+16535:             for (dimension_type i = space_dim + 1; i-- > 0; ) {
+16535:               N& dbm_vi = dbm_v[i];
+16535:               add_assign_r(dbm_vi, dbm_vi, c, ROUND_UP);
+16535:               N& dbm_iv = dbm[i][v];
+16535:               add_assign_r(dbm_iv, dbm_iv, d, ROUND_UP);
+16535:             }
+16535: 
+16535:           }
+16535:         }
+16535:         else {
+16535: 
+16535: 
+16535:           forget_binary_dbm_constraints(v);
+16535: 
+16535:           using std::swap;
+16535:           swap(dbm[v][0], dbm[0][v]);
+16535: 
+16535:           reset_shortest_path_closed();
+16535:           if (b != 0) {
+16535: 
+16535: 
+16535:             Parma_Polyhedra_Library::Dirty_Temp<N> holder_c; N& c = holder_c.item();
+16535:             div_round_up(c, b, minus_denom);
+16535:             N& dbm_v0 = dbm[v][0];
+16535:             add_assign_r(dbm_v0, dbm_v0, c, ROUND_UP);
+16535:             Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
+16535:             div_round_up(d, b, denominator);
+16535:             N& dbm_0v = dbm[0][v];
+16535:             add_assign_r(dbm_0v, dbm_0v, d, ROUND_UP);
+16535:           }
+16535:         }
+16535:       }
+16535:       else {
+16535: 
+16535: 
+16535: 
+16535:         forget_all_dbm_constraints(v);
+16535: 
+16535:         if (marked_shortest_path_reduced()) {
+16535:           reset_shortest_path_reduced();
+16535:         }
+16535:         if (a == denominator) {
+16535: 
+16535:           add_dbm_constraint(w, v, b, denominator);
+16535:           add_dbm_constraint(v, w, b, minus_denom);
+16535:         }
+16535:         else {
+16535: 
+16535: 
+16535: 
+16535:           const N& dbm_w0 = dbm[w][0];
+16535:           if (!is_plus_infinity(dbm_w0)) {
+16535: 
+16535:             Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
+16535:             div_round_up(d, b, denominator);
+16535:             add_assign_r(dbm[0][v], d, dbm_w0, ROUND_UP);
+16535:             reset_shortest_path_closed();
+16535:           }
+16535:           const N& dbm_0w = dbm[0][w];
+16535:           if (!is_plus_infinity(dbm_0w)) {
+16535: 
+16535:             Parma_Polyhedra_Library::Dirty_Temp<N> holder_c; N& c = holder_c.item();
+16535:             div_round_up(c, b, minus_denom);
+16535:             add_assign_r(dbm[v][0], dbm_0w, c, ROUND_UP);
+16535:             reset_shortest_path_closed();
+16535:           }
+16535:         }
+16535:       }
+16535:       ((void) 0);
+16535:       return;
+16535:     }
+16535:   }
+16535: # 4194 "../../src/BD_Shape_templates.hh"
+16535:   const bool is_sc = (denominator > 0);
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item();
+16535:   neg_assign(minus_b, b);
+16535:   const Coefficient& sc_b = is_sc ? b : minus_b;
+16535:   const Coefficient& minus_sc_b = is_sc ? minus_b : b;
+16535:   const Coefficient& sc_denom = is_sc ? denominator : minus_denom;
+16535:   const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator;
+16535: 
+16535: 
+16535: 
+16535:   Linear_Expression minus_expr;
+16535:   if (!is_sc) {
+16535:     minus_expr = -expr;
+16535:   }
+16535:   const Linear_Expression& sc_expr = is_sc ? expr : minus_expr;
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_pos_sum; N& pos_sum = holder_pos_sum.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_neg_sum; N& neg_sum = holder_neg_sum.item();
+16535: 
+16535:   dimension_type pos_pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
+16535:   dimension_type neg_pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
+16535: 
+16535:   dimension_type pos_pinf_count = 0;
+16535:   dimension_type neg_pinf_count = 0;
+16535: 
+16535: 
+16535:   assign_r(pos_sum, sc_b, ROUND_UP);
+16535:   assign_r(neg_sum, minus_sc_b, ROUND_UP);
+16535: 
+16535: 
+16535:   const DB_Row<N>& dbm_0 = dbm[0];
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_i; N& coeff_i = holder_coeff_i.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item();
+16535: 
+16535: 
+16535: 
+16535:   for (Linear_Expression::const_iterator i = sc_expr.begin(),
+16535:         i_end = sc_expr.lower_bound(Variable(w)); i != i_end; ++i) {
+16535:     const Coefficient& sc_i = *i;
+16535:     const dimension_type i_dim = i.variable().space_dimension();
+16535:     const int sign_i = sgn(sc_i);
+16535:     if (sign_i > 0) {
+16535:       assign_r(coeff_i, sc_i, ROUND_UP);
+16535: 
+16535:       if (pos_pinf_count <= 1) {
+16535:         const N& up_approx_i = dbm_0[i_dim];
+16535:         if (!is_plus_infinity(up_approx_i)) {
+16535:           add_mul_assign_r(pos_sum, coeff_i, up_approx_i, ROUND_UP);
+16535:         }
+16535:         else {
+16535:           ++pos_pinf_count;
+16535:           pos_pinf_index = i_dim;
+16535:         }
+16535:       }
+16535: 
+16535:       if (neg_pinf_count <= 1) {
+16535:         const N& up_approx_minus_i = dbm[i_dim][0];
+16535:         if (!is_plus_infinity(up_approx_minus_i)) {
+16535:           add_mul_assign_r(neg_sum, coeff_i, up_approx_minus_i, ROUND_UP);
+16535:         }
+16535:         else {
+16535:           ++neg_pinf_count;
+16535:           neg_pinf_index = i_dim;
+16535:         }
+16535:       }
+16535:     }
+16535:     else {
+16535:       ((void) 0);
+16535:       neg_assign(minus_sc_i, sc_i);
+16535: 
+16535:       assign_r(coeff_i, minus_sc_i, ROUND_UP);
+16535: 
+16535:       if (pos_pinf_count <= 1) {
+16535:         const N& up_approx_minus_i = dbm[i_dim][0];
+16535:         if (!is_plus_infinity(up_approx_minus_i)) {
+16535:           add_mul_assign_r(pos_sum, coeff_i, up_approx_minus_i, ROUND_UP);
+16535:         }
+16535:         else {
+16535:           ++pos_pinf_count;
+16535:           pos_pinf_index = i_dim;
+16535:         }
+16535:       }
+16535: 
+16535:       if (neg_pinf_count <= 1) {
+16535:         const N& up_approx_i = dbm_0[i_dim];
+16535:         if (!is_plus_infinity(up_approx_i)) {
+16535:           add_mul_assign_r(neg_sum, coeff_i, up_approx_i, ROUND_UP);
+16535:         }
+16535:         else {
+16535:           ++neg_pinf_count;
+16535:           neg_pinf_index = i_dim;
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   forget_all_dbm_constraints(v);
+16535: 
+16535:   if (marked_shortest_path_reduced()) {
+16535:     reset_shortest_path_reduced();
+16535:   }
+16535: 
+16535:   if (pos_pinf_count > 1 && neg_pinf_count > 1) {
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   reset_shortest_path_closed();
+16535: 
+16535: 
+16535:   if (pos_pinf_count <= 1) {
+16535: 
+16535:     if (sc_denom != 1) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
+16535:       assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
+16535:       neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
+16535:       div_assign_r(pos_sum, pos_sum, down_sc_denom, ROUND_UP);
+16535:     }
+16535: 
+16535:     if (pos_pinf_count == 0) {
+16535: 
+16535:       dbm[0][v] = pos_sum;
+16535: 
+16535:       deduce_v_minus_u_bounds(v, w, sc_expr, sc_denom, pos_sum);
+16535:     }
+16535:     else if (pos_pinf_index != v
+16535:           && sc_expr.get(Variable(pos_pinf_index - 1)) == sc_denom) {
+16535: 
+16535:         dbm[pos_pinf_index][v] = pos_sum;
+16535:       }
+16535:   }
+16535: 
+16535: 
+16535:   if (neg_pinf_count <= 1) {
+16535: 
+16535:     if (sc_denom != 1) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
+16535:       assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
+16535:       neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
+16535:       div_assign_r(neg_sum, neg_sum, down_sc_denom, ROUND_UP);
+16535:     }
+16535: 
+16535:     if (neg_pinf_count == 0) {
+16535: 
+16535:       DB_Row<N>& dbm_v = dbm[v];
+16535:       dbm_v[0] = neg_sum;
+16535: 
+16535:       deduce_u_minus_v_bounds(v, w, sc_expr, sc_denom, neg_sum);
+16535:     }
+16535: 
+16535:     else if (neg_pinf_index != v
+16535:           && sc_expr.get(Variable(neg_pinf_index - 1)) == sc_denom) {
+16535: 
+16535: 
+16535:         dbm[v][neg_pinf_index] = neg_sum;
+16535:     }
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Interval_Info>
+16535: void
+16535: BD_Shape<T>::affine_form_image(const Variable var,
+16535:                     const Linear_Form< Interval<T, Interval_Info> >& lf) {
+16535: 
+16535: 
+16535:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_4375 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<T>::is_exact)>) }
+16535: 
+16535:                                                     ;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535:   const dimension_type lf_space_dim = lf.space_dimension();
+16535:   if (space_dim < lf_space_dim) {
+16535:     throw_dimension_incompatible("affine_form_image(var_id, l)", "l", lf);
+16535:   }
+16535: 
+16535:   const dimension_type var_id = var.id() + 1;
+16535:   if (space_dim < var_id) {
+16535:     throw_dimension_incompatible("affine_form_image(var_id, l)", var.id());
+16535:   }
+16535: 
+16535:   shortest_path_closure_assign();
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   dimension_type t = 0;
+16535: 
+16535:   dimension_type w_id = 0;
+16535: 
+16535:   for (dimension_type i = lf_space_dim; i-- > 0; ) {
+16535:     if (lf.coefficient(Variable(i)) != 0) {
+16535:       if (t++ == 1) {
+16535:         break;
+16535:       }
+16535:       else {
+16535:         w_id = i + 1;
+16535:       }
+16535:     }
+16535:   }
+16535:   typedef Interval<T, Interval_Info> FP_Interval_Type;
+16535: 
+16535:   const FP_Interval_Type& b = lf.inhomogeneous_term();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (t == 0) {
+16535:     inhomogeneous_affine_form_image(var_id, b);
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535:   else if (t == 1) {
+16535:     const FP_Interval_Type& w_coeff = lf.coefficient(Variable(w_id - 1));
+16535:     if (w_coeff == 1 || w_coeff == -1) {
+16535:       one_variable_affine_form_image(var_id, b, w_coeff, w_id, space_dim);
+16535:       ((void) 0);
+16535:       return;
+16535:     }
+16535:   }
+16535:   two_variables_affine_form_image(var_id, lf, space_dim);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: template <typename Interval_Info>
+16535: void
+16535: BD_Shape<T>
+16535: ::inhomogeneous_affine_form_image(const dimension_type& var_id,
+16535:                                   const Interval<T, Interval_Info>& b) {
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_b_ub; N& b_ub = holder_b_ub.item();
+16535:   assign_r(b_ub, b.upper(), ROUND_NOT_NEEDED);
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_b_mlb; N& b_mlb = holder_b_mlb.item();
+16535:   neg_assign_r(b_mlb, b.lower(), ROUND_NOT_NEEDED);
+16535: 
+16535: 
+16535:   forget_all_dbm_constraints(var_id);
+16535: 
+16535:   if (marked_shortest_path_reduced()) {
+16535:     reset_shortest_path_reduced();
+16535:   }
+16535: 
+16535:   add_dbm_constraint(0, var_id, b_ub);
+16535:   add_dbm_constraint(var_id, 0, b_mlb);
+16535:   return;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: template <typename Interval_Info>
+16535: void BD_Shape<T>
+16535: ::one_variable_affine_form_image(const dimension_type& var_id,
+16535:                             const Interval<T, Interval_Info>& b,
+16535:                             const Interval<T, Interval_Info>& w_coeff,
+16535:                             const dimension_type& w_id,
+16535:                             const dimension_type& space_dim) {
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_b_ub; N& b_ub = holder_b_ub.item();
+16535:   assign_r(b_ub, b.upper(), ROUND_NOT_NEEDED);
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_b_mlb; N& b_mlb = holder_b_mlb.item();
+16535:   neg_assign_r(b_mlb, b.lower(), ROUND_NOT_NEEDED);
+16535: 
+16535: 
+16535:   bool is_w_coeff_one = (w_coeff == 1);
+16535: 
+16535:   if (w_id == var_id) {
+16535: 
+16535:     bool is_b_zero = (b_mlb == 0 && b_ub == 0);
+16535: 
+16535:     if (is_w_coeff_one) {
+16535:       if (is_b_zero) {
+16535: 
+16535:         return;
+16535:       }
+16535:       else {
+16535: 
+16535: 
+16535:         DB_Row<N>& dbm_v = dbm[var_id];
+16535:         for (dimension_type i = space_dim + 1; i-- > 0; ) {
+16535:           N& dbm_vi = dbm_v[i];
+16535:           add_assign_r(dbm_vi, dbm_vi, b_mlb, ROUND_UP);
+16535:           N& dbm_iv = dbm[i][var_id];
+16535:           add_assign_r(dbm_iv, dbm_iv, b_ub, ROUND_UP);
+16535:         }
+16535: 
+16535:       }
+16535:     }
+16535:     else {
+16535: 
+16535: 
+16535:       forget_binary_dbm_constraints(var_id);
+16535:       using std::swap;
+16535:       swap(dbm[var_id][0], dbm[0][var_id]);
+16535: 
+16535:       reset_shortest_path_closed();
+16535:       if (!is_b_zero) {
+16535: 
+16535: 
+16535:         N& dbm_v0 = dbm[var_id][0];
+16535:         add_assign_r(dbm_v0, dbm_v0, b_mlb, ROUND_UP);
+16535:         N& dbm_0v = dbm[0][var_id];
+16535:         add_assign_r(dbm_0v, dbm_0v, b_ub, ROUND_UP);
+16535:       }
+16535:     }
+16535:   }
+16535:   else {
+16535: 
+16535: 
+16535: 
+16535:     forget_all_dbm_constraints(var_id);
+16535: 
+16535:     if (marked_shortest_path_reduced()) {
+16535:       reset_shortest_path_reduced();
+16535:     }
+16535:     if (is_w_coeff_one) {
+16535: 
+16535: 
+16535:       add_dbm_constraint(w_id, var_id, b_ub);
+16535:       add_dbm_constraint(var_id, w_id, b_mlb);
+16535:     }
+16535:     else {
+16535: 
+16535: 
+16535:       const N& mlb_w = dbm[w_id][0];
+16535:       if (!is_plus_infinity(mlb_w)) {
+16535: 
+16535:         add_assign_r(dbm[0][var_id], b_ub, mlb_w, ROUND_UP);
+16535:         reset_shortest_path_closed();
+16535:       }
+16535:       const N& ub_w = dbm[0][w_id];
+16535:       if (!is_plus_infinity(ub_w)) {
+16535: 
+16535:         add_assign_r(dbm[var_id][0], ub_w, b_mlb, ROUND_UP);
+16535:         reset_shortest_path_closed();
+16535:       }
+16535:     }
+16535:   }
+16535:   return;
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: template <typename Interval_Info>
+16535: void BD_Shape<T>
+16535: ::two_variables_affine_form_image(const dimension_type& var_id,
+16535:            const Linear_Form< Interval<T, Interval_Info> >& lf,
+16535:                              const dimension_type& space_dim) {
+16535: 
+16535:   if (marked_shortest_path_reduced()) {
+16535:     reset_shortest_path_reduced();
+16535:   }
+16535:   reset_shortest_path_closed();
+16535: 
+16535:   Linear_Form< Interval<T, Interval_Info> > minus_lf(lf);
+16535:   minus_lf.negate();
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_upper_bound; N& upper_bound = holder_upper_bound.item();
+16535: 
+16535: 
+16535:   for (dimension_type curr_var = 1; curr_var < var_id; ++curr_var) {
+16535:     Variable current(curr_var - 1);
+16535:     linear_form_upper_bound(lf - current, upper_bound);
+16535:     assign_r(dbm[curr_var][var_id], upper_bound, ROUND_NOT_NEEDED);
+16535:     linear_form_upper_bound(minus_lf + current, upper_bound);
+16535:     assign_r(dbm[var_id][curr_var], upper_bound, ROUND_NOT_NEEDED);
+16535:   }
+16535:   for (dimension_type curr_var = var_id + 1; curr_var <= space_dim;
+16535:                                                       ++curr_var) {
+16535:     Variable current(curr_var - 1);
+16535:     linear_form_upper_bound(lf - current, upper_bound);
+16535:     assign_r(dbm[curr_var][var_id], upper_bound, ROUND_NOT_NEEDED);
+16535:     linear_form_upper_bound(minus_lf + current, upper_bound);
+16535:     assign_r(dbm[var_id][curr_var], upper_bound, ROUND_NOT_NEEDED);
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_lf_ub; N& lf_ub = holder_lf_ub.item();
+16535:   linear_form_upper_bound(lf, lf_ub);
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_minus_lf_ub; N& minus_lf_ub = holder_minus_lf_ub.item();
+16535:   linear_form_upper_bound(minus_lf, minus_lf_ub);
+16535:   assign_r(dbm[0][var_id], lf_ub, ROUND_NOT_NEEDED);
+16535:   assign_r(dbm[var_id][0], minus_lf_ub, ROUND_NOT_NEEDED);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Interval_Info>
+16535: void BD_Shape<T>::refine_with_linear_form_inequality(
+16535:                    const Linear_Form< Interval<T, Interval_Info> >& left,
+16535:                    const Linear_Form< Interval<T, Interval_Info> >& right) {
+16535: 
+16535:     enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_4611 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<T>::is_exact)>) }
+16535: 
+16535:                                                     ;
+16535: 
+16535: 
+16535:     ((void) 0);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     const dimension_type left_space_dim = left.space_dimension();
+16535:     const dimension_type space_dim = space_dimension();
+16535:     if (space_dim < left_space_dim) {
+16535:       throw_dimension_incompatible(
+16535:           "refine_with_linear_form_inequality(left, right)", "left", left);
+16535:     }
+16535:     const dimension_type right_space_dim = right.space_dimension();
+16535:     if (space_dim < right_space_dim) {
+16535:       throw_dimension_incompatible(
+16535:           "refine_with_linear_form_inequality(left, right)", "right", right);
+16535:     }
+16535: 
+16535: 
+16535:   dimension_type left_t = 0;
+16535: 
+16535:   dimension_type left_w_id = 0;
+16535: 
+16535: 
+16535:   dimension_type right_t = 0;
+16535: 
+16535:   dimension_type right_w_id = 0;
+16535: 
+16535:   typedef Interval<T, Interval_Info> FP_Interval_Type;
+16535: 
+16535: 
+16535:   for (dimension_type i = left_space_dim; i-- > 0; ) {
+16535:     if (left.coefficient(Variable(i)) != 0) {
+16535:       if (left_t++ == 1) {
+16535:         break;
+16535:       }
+16535:       else {
+16535:         left_w_id = i;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   for (dimension_type i = right_space_dim; i-- > 0; ) {
+16535:     if (right.coefficient(Variable(i)) != 0) {
+16535:       if (right_t++ == 1) {
+16535:         break;
+16535:       }
+16535:       else {
+16535:         right_w_id = i;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   const FP_Interval_Type& left_w_coeff =
+16535:           left.coefficient(Variable(left_w_id));
+16535:   const FP_Interval_Type& right_w_coeff =
+16535:           right.coefficient(Variable(right_w_id));
+16535: 
+16535:   if (left_t == 0) {
+16535:     if (right_t == 0) {
+16535: 
+16535: 
+16535:       ((void) 0);
+16535:       return;
+16535:     }
+16535:     else if (right_w_coeff == 1 || right_w_coeff == -1) {
+16535:       left_inhomogeneous_refine(right_t, right_w_id, left, right);
+16535:       ((void) 0);
+16535:       return;
+16535:     }
+16535:   }
+16535:   else if (left_t == 1) {
+16535:     if (left_w_coeff == 1 || left_w_coeff == -1) {
+16535:       if (right_t == 0 || (right_w_coeff == 1 || right_w_coeff == -1)) {
+16535:         left_one_var_refine(left_w_id, right_t, right_w_id, left, right);
+16535:         ((void) 0);
+16535:         return;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   general_refine(left_w_id, right_w_id, left, right);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename U>
+16535: void
+16535: BD_Shape<T>
+16535: ::export_interval_constraints(U& dest) const {
+16535:   const dimension_type space_dim = space_dimension();
+16535:   if (space_dim > dest.space_dimension()) {
+16535:     throw std::invalid_argument(
+16535:                "BD_Shape<T>::export_interval_constraints");
+16535:   }
+16535: 
+16535: 
+16535:   shortest_path_closure_assign();
+16535: 
+16535:   if (marked_empty()) {
+16535:     dest.set_empty();
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_tmp; N& tmp = holder_tmp.item();
+16535:   const DB_Row<N>& dbm_0 = dbm[0];
+16535:   for (dimension_type i = space_dim; i-- > 0; ) {
+16535: 
+16535:     const N& u = dbm_0[i+1];
+16535:     if (!is_plus_infinity(u)) {
+16535:       if (!dest.restrict_upper(i, u.raw_value())) {
+16535:         return;
+16535:       }
+16535:     }
+16535: 
+16535:     const N& negated_l = dbm[i+1][0];
+16535:     if (!is_plus_infinity(negated_l)) {
+16535:       neg_assign_r(tmp, negated_l, ROUND_DOWN);
+16535:       if (!dest.restrict_lower(i, tmp.raw_value())) {
+16535:         return;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Interval_Info>
+16535: void
+16535: BD_Shape<T>::left_inhomogeneous_refine(const dimension_type& right_t,
+16535:                                        const dimension_type& right_w_id,
+16535:                     const Linear_Form< Interval<T, Interval_Info> >& left,
+16535:                     const Linear_Form< Interval<T, Interval_Info> >& right) {
+16535: 
+16535:   typedef Interval<T, Interval_Info> FP_Interval_Type;
+16535: 
+16535:   if (right_t == 1) {
+16535: 
+16535: 
+16535:       const FP_Interval_Type& right_w_coeff =
+16535:                               right.coefficient(Variable(right_w_id));
+16535:       if (right_w_coeff == 1) {
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_b_plus_minus_a_minus; N& b_plus_minus_a_minus = holder_b_plus_minus_a_minus.item();
+16535:         const FP_Interval_Type& left_a = left.inhomogeneous_term();
+16535:         const FP_Interval_Type& right_b = right.inhomogeneous_term();
+16535:         sub_assign_r(b_plus_minus_a_minus, right_b.upper(), left_a.lower(),
+16535:                      ROUND_UP);
+16535:         add_dbm_constraint(right_w_id+1, 0, b_plus_minus_a_minus);
+16535:         return;
+16535:       }
+16535: 
+16535:       if (right_w_coeff == -1) {
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_b_plus_minus_a_minus; N& b_plus_minus_a_minus = holder_b_plus_minus_a_minus.item();
+16535:         const FP_Interval_Type& left_a = left.inhomogeneous_term();
+16535:         const FP_Interval_Type& right_b = right.inhomogeneous_term();
+16535:         sub_assign_r(b_plus_minus_a_minus, right_b.upper(), left_a.lower(),
+16535:                      ROUND_UP);
+16535:         add_dbm_constraint(0, right_w_id+1, b_plus_minus_a_minus);
+16535:         return;
+16535:       }
+16535:     }
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: template <typename Interval_Info>
+16535: void
+16535: BD_Shape<T>
+16535: ::left_one_var_refine(const dimension_type& left_w_id,
+16535:                       const dimension_type& right_t,
+16535:                       const dimension_type& right_w_id,
+16535:                 const Linear_Form< Interval<T, Interval_Info> >& left,
+16535:                 const Linear_Form< Interval<T, Interval_Info> >& right) {
+16535: 
+16535:   typedef Interval<T, Interval_Info> FP_Interval_Type;
+16535: 
+16535:     if (right_t == 0) {
+16535: 
+16535: 
+16535:       const FP_Interval_Type& left_w_coeff =
+16535:         left.coefficient(Variable(left_w_id));
+16535: 
+16535:       if (left_w_coeff == 1) {
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item();
+16535:         const FP_Interval_Type& left_b = left.inhomogeneous_term();
+16535:         const FP_Interval_Type& right_a = right.inhomogeneous_term();
+16535:         sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(),
+16535:                      ROUND_UP);
+16535:         add_dbm_constraint(0, left_w_id+1, a_plus_minus_b_minus);
+16535:         return;
+16535:       }
+16535: 
+16535:       if (left_w_coeff == -1) {
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item();
+16535:         const FP_Interval_Type& left_b = left.inhomogeneous_term();
+16535:         const FP_Interval_Type& right_a = right.inhomogeneous_term();
+16535:         sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(),
+16535:                      ROUND_UP);
+16535:         add_dbm_constraint(left_w_id+1, 0, a_plus_minus_b_minus);
+16535:         return;
+16535:       }
+16535:     }
+16535:     else if (right_t == 1) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const FP_Interval_Type& left_w_coeff =
+16535:                               left.coefficient(Variable(left_w_id));
+16535: 
+16535:       const FP_Interval_Type& right_w_coeff =
+16535:                               right.coefficient(Variable(right_w_id));
+16535: 
+16535:       bool is_left_coeff_one = (left_w_coeff == 1);
+16535:       bool is_left_coeff_minus_one = (left_w_coeff == -1);
+16535:       bool is_right_coeff_one = (right_w_coeff == 1);
+16535:       bool is_right_coeff_minus_one = (right_w_coeff == -1);
+16535:       if (left_w_id == right_w_id) {
+16535:         if ((is_left_coeff_one && is_right_coeff_one)
+16535:             ||
+16535:             (is_left_coeff_minus_one && is_right_coeff_minus_one)) {
+16535: 
+16535:           return;
+16535:         }
+16535:         if (is_left_coeff_one && is_right_coeff_minus_one) {
+16535: 
+16535:           Parma_Polyhedra_Library::Dirty_Temp<N> holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item();
+16535:           const FP_Interval_Type& left_b = left.inhomogeneous_term();
+16535:           const FP_Interval_Type& right_a = right.inhomogeneous_term();
+16535:           sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(),
+16535:                        ROUND_UP);
+16535:           div_2exp_assign_r(a_plus_minus_b_minus, a_plus_minus_b_minus, 1,
+16535:                             ROUND_UP);
+16535:           add_dbm_constraint(0, left_w_id + 1, a_plus_minus_b_minus);
+16535:           return;
+16535:         }
+16535:         if (is_left_coeff_minus_one && is_right_coeff_one) {
+16535: 
+16535:           Parma_Polyhedra_Library::Dirty_Temp<N> holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item();
+16535:           const FP_Interval_Type& left_b = left.inhomogeneous_term();
+16535:           const FP_Interval_Type& right_a = right.inhomogeneous_term();
+16535:           sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(),
+16535:                        ROUND_UP);
+16535:           div_2exp_assign_r(a_plus_minus_b_minus, a_plus_minus_b_minus, 1,
+16535:                             ROUND_UP);
+16535:           add_dbm_constraint(right_w_id + 1, 0, a_plus_minus_b_minus);
+16535:           return;
+16535:         }
+16535:       }
+16535:       else if (is_left_coeff_minus_one && is_right_coeff_one) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item();
+16535:         const FP_Interval_Type& left_b = left.inhomogeneous_term();
+16535:         const FP_Interval_Type& right_a = right.inhomogeneous_term();
+16535:         sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(),
+16535:                        ROUND_UP);
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_ub; N& ub = holder_ub.item();
+16535:         ub = dbm[0][right_w_id + 1];
+16535:         if (!is_plus_infinity(ub)) {
+16535:           add_assign_r(ub, ub, a_plus_minus_b_minus, ROUND_UP);
+16535:           add_dbm_constraint(left_w_id + 1, 0, ub);
+16535:         }
+16535:         ub = dbm[0][left_w_id + 1];
+16535:         if (!is_plus_infinity(ub)) {
+16535:           add_assign_r(ub, ub, a_plus_minus_b_minus, ROUND_UP);
+16535:           add_dbm_constraint(right_w_id + 1, 0, ub);
+16535:         }
+16535:         return;
+16535:       }
+16535:       if (is_left_coeff_one && is_right_coeff_minus_one) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_a_plus_minus_b_minus; N& a_plus_minus_b_minus = holder_a_plus_minus_b_minus.item();
+16535:         const FP_Interval_Type& left_b = left.inhomogeneous_term();
+16535:         const FP_Interval_Type& right_a = right.inhomogeneous_term();
+16535:         sub_assign_r(a_plus_minus_b_minus, right_a.upper(), left_b.lower(),
+16535:                        ROUND_UP);
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_ub; N& ub = holder_ub.item();
+16535:         ub = dbm[right_w_id + 1][0];
+16535:         if (!is_plus_infinity(ub)) {
+16535:           add_assign_r(ub, ub, a_plus_minus_b_minus, ROUND_UP);
+16535:           add_dbm_constraint(0, left_w_id + 1, ub);
+16535:         }
+16535:         ub = dbm[left_w_id + 1][0];
+16535:         if (!is_plus_infinity(ub)) {
+16535:           add_assign_r(ub, ub, a_plus_minus_b_minus, ROUND_UP);
+16535:           add_dbm_constraint(0, right_w_id + 1, ub);
+16535:         }
+16535:             return;
+16535:       }
+16535:       if (is_left_coeff_one && is_right_coeff_one) {
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_c_plus_minus_a_minus; N& c_plus_minus_a_minus = holder_c_plus_minus_a_minus.item();
+16535:         const FP_Interval_Type& left_a = left.inhomogeneous_term();
+16535:         const FP_Interval_Type& right_c = right.inhomogeneous_term();
+16535:         sub_assign_r(c_plus_minus_a_minus, right_c.upper(), left_a.lower(),
+16535:                      ROUND_UP);
+16535:         add_dbm_constraint(right_w_id+1, left_w_id+1, c_plus_minus_a_minus);
+16535:         return;
+16535:       }
+16535:       if (is_left_coeff_minus_one && is_right_coeff_minus_one) {
+16535:         Parma_Polyhedra_Library::Dirty_Temp<N> holder_c_plus_minus_a_minus; N& c_plus_minus_a_minus = holder_c_plus_minus_a_minus.item();
+16535:         const FP_Interval_Type& left_a = left.inhomogeneous_term();
+16535:         const FP_Interval_Type& right_c = right.inhomogeneous_term();
+16535:         sub_assign_r(c_plus_minus_a_minus, right_c.upper(), left_a.lower(),
+16535:                      ROUND_UP);
+16535:         add_dbm_constraint(left_w_id+1, right_w_id+1, c_plus_minus_a_minus);
+16535:         return;
+16535:       }
+16535:     }
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Interval_Info>
+16535: void
+16535: BD_Shape<T>
+16535: ::general_refine(const dimension_type& left_w_id,
+16535:                  const dimension_type& right_w_id,
+16535:                  const Linear_Form< Interval<T, Interval_Info> >& left,
+16535:                  const Linear_Form< Interval<T, Interval_Info> >& right) {
+16535: 
+16535:   typedef Interval<T, Interval_Info> FP_Interval_Type;
+16535:   Linear_Form<FP_Interval_Type> right_minus_left(right);
+16535:   right_minus_left -= left;
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_low_coeff; N& low_coeff = holder_low_coeff.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_high_coeff; N& high_coeff = holder_high_coeff.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_upper_bound; N& upper_bound = holder_upper_bound.item();
+16535: 
+16535:   dimension_type max_w_id = std::max(left_w_id, right_w_id);
+16535: 
+16535:   for (dimension_type first_v = 0; first_v < max_w_id; ++first_v) {
+16535:     for (dimension_type second_v = first_v+1;
+16535:          second_v <= max_w_id; ++second_v) {
+16535:       const FP_Interval_Type& lfv_coefficient =
+16535:         left.coefficient(Variable(first_v));
+16535:       const FP_Interval_Type& lsv_coefficient =
+16535:         left.coefficient(Variable(second_v));
+16535:       const FP_Interval_Type& rfv_coefficient =
+16535:         right.coefficient(Variable(first_v));
+16535:       const FP_Interval_Type& rsv_coefficient =
+16535:         right.coefficient(Variable(second_v));
+16535: 
+16535: 
+16535:       bool do_update = false;
+16535:       assign_r(low_coeff, lfv_coefficient.lower(), ROUND_NOT_NEEDED);
+16535:       assign_r(high_coeff, lfv_coefficient.upper(), ROUND_NOT_NEEDED);
+16535:       if (low_coeff != 0 || high_coeff != 0) {
+16535:         assign_r(low_coeff, lsv_coefficient.lower(), ROUND_NOT_NEEDED);
+16535:         assign_r(high_coeff, lsv_coefficient.upper(), ROUND_NOT_NEEDED);
+16535:         if (low_coeff != 0 || high_coeff != 0) {
+16535:           do_update = true;
+16535:         }
+16535:         else {
+16535:           assign_r(low_coeff, rsv_coefficient.lower(), ROUND_NOT_NEEDED);
+16535:           assign_r(high_coeff, rsv_coefficient.upper(), ROUND_NOT_NEEDED);
+16535:           if (low_coeff != 0 || high_coeff != 0) {
+16535:             do_update = true;
+16535:           }
+16535:         }
+16535:       }
+16535:       else {
+16535:         assign_r(low_coeff, rfv_coefficient.lower(), ROUND_NOT_NEEDED);
+16535:         assign_r(high_coeff, rfv_coefficient.upper(), ROUND_NOT_NEEDED);
+16535:         if (low_coeff != 0 || high_coeff != 0) {
+16535:           assign_r(low_coeff, lsv_coefficient.lower(), ROUND_NOT_NEEDED);
+16535:           assign_r(high_coeff, lsv_coefficient.upper(), ROUND_NOT_NEEDED);
+16535:           if (low_coeff != 0 || high_coeff != 0) {
+16535:             do_update = true;
+16535:           }
+16535:           else {
+16535:             assign_r(low_coeff, rsv_coefficient.lower(), ROUND_NOT_NEEDED);
+16535:             assign_r(high_coeff, rsv_coefficient.upper(), ROUND_NOT_NEEDED);
+16535:             if (low_coeff != 0 || high_coeff != 0) {
+16535:               do_update = true;
+16535:             }
+16535:           }
+16535:         }
+16535:       }
+16535: 
+16535:       if (do_update) {
+16535:         Variable first(first_v);
+16535:         Variable second(second_v);
+16535:         dimension_type n_first_var = first_v +1 ;
+16535:         dimension_type n_second_var = second_v + 1;
+16535:         linear_form_upper_bound(right_minus_left - first + second,
+16535:                                 upper_bound);
+16535:         add_dbm_constraint(n_first_var, n_second_var, upper_bound);
+16535:         linear_form_upper_bound(right_minus_left + first - second,
+16535:                                 upper_bound);
+16535:         add_dbm_constraint(n_second_var, n_first_var, upper_bound);
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   for (dimension_type v = 0; v < max_w_id; ++v) {
+16535:     const FP_Interval_Type& lv_coefficient =
+16535:       left.coefficient(Variable(v));
+16535:     const FP_Interval_Type& rv_coefficient =
+16535:       right.coefficient(Variable(v));
+16535: 
+16535: 
+16535:     bool do_update = false;
+16535:     assign_r(low_coeff, lv_coefficient.lower(), ROUND_NOT_NEEDED);
+16535:     assign_r(high_coeff, lv_coefficient.upper(), ROUND_NOT_NEEDED);
+16535:     if (low_coeff != 0 || high_coeff != 0) {
+16535:       do_update = true;
+16535:     }
+16535:     else {
+16535:       assign_r(low_coeff, rv_coefficient.lower(), ROUND_NOT_NEEDED);
+16535:       assign_r(high_coeff, rv_coefficient.upper(), ROUND_NOT_NEEDED);
+16535:       if (low_coeff != 0 || high_coeff != 0) {
+16535:         do_update = true;
+16535:       }
+16535:     }
+16535: 
+16535:     if (do_update) {
+16535:       Variable var(v);
+16535:       dimension_type n_var = v + 1;
+16535:       linear_form_upper_bound(right_minus_left + var, upper_bound);
+16535:       add_dbm_constraint(0, n_var, upper_bound);
+16535:       linear_form_upper_bound(right_minus_left - var, upper_bound);
+16535:       add_dbm_constraint(n_var, 0, upper_bound);
+16535:     }
+16535:   }
+16535: 
+16535: }
+16535: 
+16535: template <typename T>
+16535: template <typename Interval_Info>
+16535: void
+16535: BD_Shape<T>::
+16535: linear_form_upper_bound(const Linear_Form< Interval<T, Interval_Info> >& lf,
+16535:                         N& result) const {
+16535: 
+16535: 
+16535:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_5061 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<T>::is_exact)>) }
+16535: 
+16535:                                                      ;
+16535: 
+16535:   const dimension_type lf_space_dimension = lf.space_dimension();
+16535:   ((void) 0);
+16535: 
+16535:   typedef Interval<T, Interval_Info> FP_Interval_Type;
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_curr_lb; N& curr_lb = holder_curr_lb.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_curr_ub; N& curr_ub = holder_curr_ub.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_curr_var_ub; N& curr_var_ub = holder_curr_var_ub.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_curr_minus_var_ub; N& curr_minus_var_ub = holder_curr_minus_var_ub.item();
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_first_comparison_term; N& first_comparison_term = holder_first_comparison_term.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_second_comparison_term; N& second_comparison_term = holder_second_comparison_term.item();
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_negator; N& negator = holder_negator.item();
+16535: 
+16535:   assign_r(result, lf.inhomogeneous_term().upper(), ROUND_NOT_NEEDED);
+16535: 
+16535:   for (dimension_type curr_var = 0, n_var = 0; curr_var < lf_space_dimension;
+16535:        ++curr_var) {
+16535:     n_var = curr_var + 1;
+16535:     const FP_Interval_Type&
+16535:       curr_coefficient = lf.coefficient(Variable(curr_var));
+16535:     assign_r(curr_lb, curr_coefficient.lower(), ROUND_NOT_NEEDED);
+16535:     assign_r(curr_ub, curr_coefficient.upper(), ROUND_NOT_NEEDED);
+16535:     if (curr_lb != 0 || curr_ub != 0) {
+16535:       assign_r(curr_var_ub, dbm[0][n_var], ROUND_NOT_NEEDED);
+16535:       neg_assign_r(curr_minus_var_ub, dbm[n_var][0], ROUND_NOT_NEEDED);
+16535: 
+16535:       if (curr_lb == 1 && curr_ub == 1) {
+16535:         add_assign_r(result, result, std::max(curr_var_ub, curr_minus_var_ub),
+16535:                      ROUND_UP);
+16535:       }
+16535:       else if (curr_lb == -1 && curr_ub == -1) {
+16535:         neg_assign_r(negator, std::min(curr_var_ub, curr_minus_var_ub),
+16535:                      ROUND_NOT_NEEDED);
+16535:         add_assign_r(result, result, negator, ROUND_UP);
+16535:       }
+16535:       else {
+16535: 
+16535:         assign_r(first_comparison_term, 0, ROUND_NOT_NEEDED);
+16535:         assign_r(second_comparison_term, 0, ROUND_NOT_NEEDED);
+16535:         add_mul_assign_r(first_comparison_term, curr_var_ub, curr_ub,
+16535:                          ROUND_UP);
+16535:         add_mul_assign_r(second_comparison_term, curr_var_ub, curr_lb,
+16535:                          ROUND_UP);
+16535:         assign_r(first_comparison_term, std::max(first_comparison_term,
+16535:                                                  second_comparison_term),
+16535:                  ROUND_NOT_NEEDED);
+16535:         assign_r(second_comparison_term, 0, ROUND_NOT_NEEDED);
+16535:         add_mul_assign_r(second_comparison_term, curr_minus_var_ub, curr_ub,
+16535:                          ROUND_UP);
+16535:         assign_r(first_comparison_term, std::max(first_comparison_term,
+16535:                                                  second_comparison_term),
+16535:                  ROUND_NOT_NEEDED);
+16535:         assign_r(second_comparison_term, 0, ROUND_NOT_NEEDED);
+16535:         add_mul_assign_r(second_comparison_term, curr_minus_var_ub, curr_lb,
+16535:                          ROUND_UP);
+16535:         assign_r(first_comparison_term, std::max(first_comparison_term,
+16535:                                                  second_comparison_term),
+16535:                  ROUND_NOT_NEEDED);
+16535: 
+16535:         add_assign_r(result, result, first_comparison_term, ROUND_UP);
+16535:       }
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::affine_preimage(const Variable var,
+16535:                              const Linear_Expression& expr,
+16535:                              Coefficient_traits::const_reference denominator) {
+16535: 
+16535:   if (denominator == 0) {
+16535:     throw_invalid_argument("affine_preimage(v, e, d)", "d == 0");
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535:   const dimension_type expr_space_dim = expr.space_dimension();
+16535:   if (space_dim < expr_space_dim) {
+16535:     throw_dimension_incompatible("affine_preimage(v, e, d)", "e", expr);
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type v = var.id() + 1;
+16535:   if (v > space_dim) {
+16535:     throw_dimension_incompatible("affine_preimage(v, e, d)", var.id());
+16535:   }
+16535: 
+16535:   shortest_path_closure_assign();
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535:   const Coefficient& b = expr.inhomogeneous_term();
+16535: 
+16535: 
+16535:   dimension_type t = 0;
+16535: 
+16535:   dimension_type j = expr.last_nonzero();
+16535: 
+16535:   if (j != 0) {
+16535:     ++t;
+16535:     if (!expr.all_zeroes(1, j)) {
+16535:       ++t;
+16535:     }
+16535:   }
+16535: # 5179 "../../src/BD_Shape_templates.hh"
+16535:   if (t == 0) {
+16535: 
+16535:     forget_all_dbm_constraints(v);
+16535: 
+16535:     if (marked_shortest_path_reduced()) {
+16535:       reset_shortest_path_reduced();
+16535:     }
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535:   if (t == 1) {
+16535: 
+16535:     const Coefficient& a = expr.get(Variable(j - 1));
+16535:     if (a == denominator || a == -denominator) {
+16535: 
+16535:       if (j == var.space_dimension()) {
+16535: 
+16535:         affine_image(var, denominator*var - b, a);
+16535:       }
+16535:       else {
+16535: 
+16535: 
+16535:         forget_all_dbm_constraints(v);
+16535: 
+16535:         if (marked_shortest_path_reduced()) {
+16535:           reset_shortest_path_reduced();
+16535:         }
+16535:         ((void) 0);
+16535:       }
+16535:       return;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const Coefficient& expr_v = expr.coefficient(var);
+16535:   if (expr_v != 0) {
+16535: 
+16535:     Linear_Expression inverse((expr_v + denominator)*var);
+16535:     inverse -= expr;
+16535:     affine_image(var, inverse, expr_v);
+16535:   }
+16535:   else {
+16535: 
+16535:     forget_all_dbm_constraints(v);
+16535: 
+16535:     if (marked_shortest_path_reduced()) {
+16535:       reset_shortest_path_reduced();
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>
+16535: ::bounded_affine_image(const Variable var,
+16535:                        const Linear_Expression& lb_expr,
+16535:                        const Linear_Expression& ub_expr,
+16535:                        Coefficient_traits::const_reference denominator) {
+16535: 
+16535:   if (denominator == 0) {
+16535:     throw_invalid_argument("bounded_affine_image(v, lb, ub, d)", "d == 0");
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type bds_space_dim = space_dimension();
+16535:   const dimension_type v = var.id() + 1;
+16535:   if (v > bds_space_dim) {
+16535:     throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)",
+16535:                                  "v", var);
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type lb_space_dim = lb_expr.space_dimension();
+16535:   if (bds_space_dim < lb_space_dim) {
+16535:     throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)",
+16535:                                  "lb", lb_expr);
+16535:   }
+16535:   const dimension_type ub_space_dim = ub_expr.space_dimension();
+16535:   if (bds_space_dim < ub_space_dim) {
+16535:     throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)",
+16535:                                  "ub", ub_expr);
+16535:   }
+16535: 
+16535:   shortest_path_closure_assign();
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535:   const Coefficient& b = ub_expr.inhomogeneous_term();
+16535: 
+16535: 
+16535:   dimension_type t = 0;
+16535: 
+16535:   dimension_type w = ub_expr.last_nonzero();
+16535: 
+16535:   if (w != 0) {
+16535:     ++t;
+16535:     if (!ub_expr.all_zeroes(1, w)) {
+16535:       ++t;
+16535:     }
+16535:   }
+16535: # 5292 "../../src/BD_Shape_templates.hh"
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item();
+16535:   neg_assign(minus_denom, denominator);
+16535: 
+16535:   if (t == 0) {
+16535: 
+16535:     generalized_affine_image(var,
+16535:                              GREATER_OR_EQUAL,
+16535:                              lb_expr,
+16535:                              denominator);
+16535: 
+16535:     add_dbm_constraint(0, v, b, denominator);
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535:   if (t == 1) {
+16535: 
+16535:     const Coefficient& a = ub_expr.get(Variable(w - 1));
+16535:     if (a == denominator || a == minus_denom) {
+16535: 
+16535:       if (w == v) {
+16535: 
+16535: 
+16535:         const Variable new_var(bds_space_dim);
+16535:         add_space_dimensions_and_embed(1);
+16535: 
+16535:         affine_image(new_var, ub_expr, denominator);
+16535: 
+16535:         shortest_path_closure_assign();
+16535:         ((void) 0);
+16535: 
+16535:         generalized_affine_image(var,
+16535:                                  GREATER_OR_EQUAL,
+16535:                                  lb_expr,
+16535:                                  denominator);
+16535: 
+16535:         add_constraint(var <= new_var);
+16535: 
+16535:         remove_higher_space_dimensions(bds_space_dim);
+16535:         return;
+16535:       }
+16535:       else {
+16535: 
+16535: 
+16535: 
+16535:         generalized_affine_image(var,
+16535:                                  GREATER_OR_EQUAL,
+16535:                                  lb_expr,
+16535:                                  denominator);
+16535:         if (a == denominator) {
+16535: 
+16535:           add_dbm_constraint(w, v, b, denominator);
+16535:         }
+16535:         else {
+16535: 
+16535: 
+16535: 
+16535:           const N& dbm_w0 = dbm[w][0];
+16535:           if (!is_plus_infinity(dbm_w0)) {
+16535: 
+16535:             Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
+16535:             div_round_up(d, b, denominator);
+16535:             add_assign_r(dbm[0][v], d, dbm_w0, ROUND_UP);
+16535:             reset_shortest_path_closed();
+16535:           }
+16535:         }
+16535:         ((void) 0);
+16535:         return;
+16535:       }
+16535:     }
+16535:   }
+16535: # 5373 "../../src/BD_Shape_templates.hh"
+16535:   const bool is_sc = (denominator > 0);
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item();
+16535:   neg_assign(minus_b, b);
+16535:   const Coefficient& sc_b = is_sc ? b : minus_b;
+16535:   const Coefficient& sc_denom = is_sc ? denominator : minus_denom;
+16535:   const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator;
+16535: 
+16535: 
+16535: 
+16535:   Linear_Expression minus_expr;
+16535:   if (!is_sc) {
+16535:     minus_expr = -ub_expr;
+16535:   }
+16535:   const Linear_Expression& sc_expr = is_sc ? ub_expr : minus_expr;
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_pos_sum; N& pos_sum = holder_pos_sum.item();
+16535: 
+16535:   dimension_type pos_pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
+16535: 
+16535:   dimension_type pos_pinf_count = 0;
+16535: 
+16535: 
+16535:   assign_r(pos_sum, sc_b, ROUND_UP);
+16535: 
+16535: 
+16535:   const DB_Row<N>& dbm_0 = dbm[0];
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_i; N& coeff_i = holder_coeff_i.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item();
+16535: 
+16535: 
+16535:   for (Linear_Expression::const_iterator i = sc_expr.begin(),
+16535:         i_end = sc_expr.lower_bound(Variable(w)); i != i_end; ++i) {
+16535:     const Coefficient& sc_i = *i;
+16535:     const dimension_type i_dim = i.variable().space_dimension();
+16535:     const int sign_i = sgn(sc_i);
+16535:     if (sign_i > 0) {
+16535:       assign_r(coeff_i, sc_i, ROUND_UP);
+16535: 
+16535:       if (pos_pinf_count <= 1) {
+16535:         const N& up_approx_i = dbm_0[i_dim];
+16535:         if (!is_plus_infinity(up_approx_i)) {
+16535:           add_mul_assign_r(pos_sum, coeff_i, up_approx_i, ROUND_UP);
+16535:         }
+16535:         else {
+16535:           ++pos_pinf_count;
+16535:           pos_pinf_index = i_dim;
+16535:         }
+16535:       }
+16535:     }
+16535:     else {
+16535:       ((void) 0);
+16535:       neg_assign(minus_sc_i, sc_i);
+16535: 
+16535:       assign_r(coeff_i, minus_sc_i, ROUND_UP);
+16535: 
+16535:       if (pos_pinf_count <= 1) {
+16535:         const N& up_approx_minus_i = dbm[i_dim][0];
+16535:         if (!is_plus_infinity(up_approx_minus_i)) {
+16535:           add_mul_assign_r(pos_sum, coeff_i, up_approx_minus_i, ROUND_UP);
+16535:         }
+16535:         else {
+16535:           ++pos_pinf_count;
+16535:           pos_pinf_index = i_dim;
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   generalized_affine_image(var,
+16535:                            GREATER_OR_EQUAL,
+16535:                            lb_expr,
+16535:                            denominator);
+16535: 
+16535:   if (pos_pinf_count > 1) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   reset_shortest_path_closed();
+16535: 
+16535: 
+16535:   if (pos_pinf_count <= 1) {
+16535: 
+16535:     if (sc_denom != 1) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
+16535:       assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
+16535:       neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
+16535:       div_assign_r(pos_sum, pos_sum, down_sc_denom, ROUND_UP);
+16535:     }
+16535: 
+16535:     if (pos_pinf_count == 0) {
+16535: 
+16535:       dbm[0][v] = pos_sum;
+16535: 
+16535:       deduce_v_minus_u_bounds(v, w, sc_expr, sc_denom, pos_sum);
+16535:     }
+16535: 
+16535:     else if (pos_pinf_index != v
+16535:              && sc_expr.get(Variable(pos_pinf_index - 1)) == sc_denom) {
+16535: 
+16535:         dbm[pos_pinf_index][v] = pos_sum;
+16535:       }
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>
+16535: ::bounded_affine_preimage(const Variable var,
+16535:                           const Linear_Expression& lb_expr,
+16535:                           const Linear_Expression& ub_expr,
+16535:                           Coefficient_traits::const_reference denominator) {
+16535: 
+16535:   if (denominator == 0) {
+16535:     throw_invalid_argument("bounded_affine_preimage(v, lb, ub, d)", "d == 0");
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535:   const dimension_type v = var.id() + 1;
+16535:   if (v > space_dim) {
+16535:     throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)",
+16535:                                  "v", var);
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type lb_space_dim = lb_expr.space_dimension();
+16535:   if (space_dim < lb_space_dim) {
+16535:     throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)",
+16535:                                  "lb", lb_expr);
+16535:   }
+16535:   const dimension_type ub_space_dim = ub_expr.space_dimension();
+16535:   if (space_dim < ub_space_dim) {
+16535:     throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)",
+16535:                                  "ub", ub_expr);
+16535:   }
+16535: 
+16535:   shortest_path_closure_assign();
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535:   if (ub_expr.coefficient(var) == 0) {
+16535:     refine(var, LESS_OR_EQUAL, ub_expr, denominator);
+16535:     generalized_affine_preimage(var, GREATER_OR_EQUAL,
+16535:                                 lb_expr, denominator);
+16535:     return;
+16535:   }
+16535:   if (lb_expr.coefficient(var) == 0) {
+16535:     refine(var, GREATER_OR_EQUAL, lb_expr, denominator);
+16535:     generalized_affine_preimage(var, LESS_OR_EQUAL,
+16535:                                 ub_expr, denominator);
+16535:     return;
+16535:   }
+16535: 
+16535:   const Coefficient& lb_expr_v = lb_expr.coefficient(var);
+16535: 
+16535: 
+16535:   const Variable new_var(space_dim);
+16535:   add_space_dimensions_and_embed(1);
+16535:   const Linear_Expression lb_inverse
+16535:     = lb_expr - (lb_expr_v + denominator)*var;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_lb_inverse_denom; Parma_Polyhedra_Library::Coefficient& lb_inverse_denom = holder_lb_inverse_denom.item();
+16535:   neg_assign(lb_inverse_denom, lb_expr_v);
+16535:   affine_image(new_var, lb_inverse, lb_inverse_denom);
+16535:   shortest_path_closure_assign();
+16535:   ((void) 0);
+16535:   generalized_affine_preimage(var, LESS_OR_EQUAL,
+16535:                               ub_expr, denominator);
+16535:   if (sgn(denominator) == sgn(lb_inverse_denom)) {
+16535:     add_constraint(var >= new_var);
+16535:   }
+16535:   else {
+16535:     add_constraint(var <= new_var);
+16535:   }
+16535: 
+16535:   remove_higher_space_dimensions(space_dim);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::generalized_affine_image(const Variable var,
+16535:                                       const Relation_Symbol relsym,
+16535:                                       const Linear_Expression& expr,
+16535:                                       Coefficient_traits::const_reference
+16535:                                       denominator) {
+16535: 
+16535:   if (denominator == 0) {
+16535:     throw_invalid_argument("generalized_affine_image(v, r, e, d)", "d == 0");
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535:   const dimension_type expr_space_dim = expr.space_dimension();
+16535:   if (space_dim < expr_space_dim) {
+16535:     throw_dimension_incompatible("generalized_affine_image(v, r, e, d)",
+16535:                                  "e", expr);
+16535:   }
+16535: 
+16535:   const dimension_type v = var.id() + 1;
+16535:   if (v > space_dim) {
+16535:     throw_dimension_incompatible("generalized_affine_image(v, r, e, d)",
+16535:                                  var.id());
+16535:   }
+16535: 
+16535:   if (relsym == LESS_THAN || relsym == GREATER_THAN) {
+16535:     throw_invalid_argument("generalized_affine_image(v, r, e, d)",
+16535:                            "r is a strict relation symbol");
+16535:   }
+16535: 
+16535:   if (relsym == NOT_EQUAL) {
+16535:     throw_invalid_argument("generalized_affine_image(v, r, e, d)",
+16535:                            "r is the disequality relation symbol");
+16535:   }
+16535:   if (relsym == EQUAL) {
+16535: 
+16535: 
+16535:     affine_image(var, expr, denominator);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   shortest_path_closure_assign();
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535:   const Coefficient& b = expr.inhomogeneous_term();
+16535: 
+16535: 
+16535:   dimension_type t = 0;
+16535: 
+16535:   dimension_type w = expr.last_nonzero();
+16535: 
+16535:   if (w != 0) {
+16535:     ++t;
+16535:     if (!expr.all_zeroes(1, w)) {
+16535:       ++t;
+16535:     }
+16535:   }
+16535: # 5626 "../../src/BD_Shape_templates.hh"
+16535:   DB_Row<N>& dbm_0 = dbm[0];
+16535:   DB_Row<N>& dbm_v = dbm[v];
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_denom; Parma_Polyhedra_Library::Coefficient& minus_denom = holder_minus_denom.item();
+16535:   neg_assign(minus_denom, denominator);
+16535: 
+16535:   if (t == 0) {
+16535: 
+16535: 
+16535:     forget_all_dbm_constraints(v);
+16535: 
+16535:     reset_shortest_path_closed();
+16535:     switch (relsym) {
+16535:     case LESS_OR_EQUAL:
+16535: 
+16535:       add_dbm_constraint(0, v, b, denominator);
+16535:       break;
+16535:     case GREATER_OR_EQUAL:
+16535: 
+16535: 
+16535:       add_dbm_constraint(v, 0, b, minus_denom);
+16535:       break;
+16535:     default:
+16535: 
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       break;
+16535:     }
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535:   if (t == 1) {
+16535: 
+16535:     const Coefficient& a = expr.get(Variable(w - 1));
+16535:     if (a == denominator || a == minus_denom) {
+16535: 
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_d; N& d = holder_d.item();
+16535:       switch (relsym) {
+16535:       case LESS_OR_EQUAL:
+16535:         div_round_up(d, b, denominator);
+16535:         if (w == v) {
+16535: 
+16535: 
+16535:           reset_shortest_path_closed();
+16535:           if (a == denominator) {
+16535: 
+16535: 
+16535: 
+16535:             for (dimension_type i = space_dim + 1; i-- > 0; ) {
+16535:               N& dbm_iv = dbm[i][v];
+16535:               add_assign_r(dbm_iv, dbm_iv, d, ROUND_UP);
+16535:               assign_r(dbm_v[i], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:             }
+16535:           }
+16535:           else {
+16535: 
+16535: 
+16535: 
+16535:             N& dbm_v0 = dbm_v[0];
+16535:             add_assign_r(dbm_0[v], dbm_v0, d, ROUND_UP);
+16535: 
+16535:             assign_r(dbm_v0, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:             forget_binary_dbm_constraints(v);
+16535:           }
+16535:         }
+16535:         else {
+16535: 
+16535: 
+16535: 
+16535:           forget_all_dbm_constraints(v);
+16535: 
+16535:           if (marked_shortest_path_reduced()) {
+16535:             reset_shortest_path_reduced();
+16535:           }
+16535:           if (a == denominator) {
+16535: 
+16535:             add_dbm_constraint(w, v, d);
+16535:           }
+16535:           else {
+16535: 
+16535: 
+16535: 
+16535:             const N& dbm_w0 = dbm[w][0];
+16535:             if (!is_plus_infinity(dbm_w0)) {
+16535: 
+16535:               add_assign_r(dbm_0[v], d, dbm_w0, ROUND_UP);
+16535: 
+16535:               reset_shortest_path_closed();
+16535:             }
+16535:           }
+16535:         }
+16535:         break;
+16535: 
+16535:       case GREATER_OR_EQUAL:
+16535:         div_round_up(d, b, minus_denom);
+16535:         if (w == v) {
+16535: 
+16535: 
+16535:           reset_shortest_path_closed();
+16535:           if (a == denominator) {
+16535: 
+16535: 
+16535: 
+16535:             for (dimension_type i = space_dim + 1; i-- > 0; ) {
+16535:               N& dbm_vi = dbm_v[i];
+16535:               add_assign_r(dbm_vi, dbm_vi, d, ROUND_UP);
+16535:               assign_r(dbm[i][v], PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:             }
+16535:           }
+16535:           else {
+16535: 
+16535: 
+16535: 
+16535:             N& dbm_0v = dbm_0[v];
+16535:             add_assign_r(dbm_v[0], dbm_0v, d, ROUND_UP);
+16535: 
+16535:             assign_r(dbm_0v, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:             forget_binary_dbm_constraints(v);
+16535:           }
+16535:         }
+16535:         else {
+16535: 
+16535: 
+16535: 
+16535:           forget_all_dbm_constraints(v);
+16535: 
+16535:           if (marked_shortest_path_reduced()) {
+16535:             reset_shortest_path_reduced();
+16535:           }
+16535:           if (a == denominator) {
+16535: 
+16535: 
+16535:             add_dbm_constraint(v, w, d);
+16535:           }
+16535:           else {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:             const N& dbm_0w = dbm_0[w];
+16535:             if (!is_plus_infinity(dbm_0w)) {
+16535: 
+16535:               add_assign_r(dbm_v[0], dbm_0w, d, ROUND_UP);
+16535: 
+16535:               reset_shortest_path_closed();
+16535:             }
+16535:           }
+16535:         }
+16535:         break;
+16535: 
+16535:       default:
+16535: 
+16535:         Parma_Polyhedra_Library::ppl_unreachable();
+16535:         break;
+16535:       }
+16535:       ((void) 0);
+16535:       return;
+16535:     }
+16535:   }
+16535: # 5792 "../../src/BD_Shape_templates.hh"
+16535:   const bool is_sc = (denominator > 0);
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_b; Parma_Polyhedra_Library::Coefficient& minus_b = holder_minus_b.item();
+16535:   neg_assign(minus_b, b);
+16535:   const Coefficient& sc_b = is_sc ? b : minus_b;
+16535:   const Coefficient& minus_sc_b = is_sc ? minus_b : b;
+16535:   const Coefficient& sc_denom = is_sc ? denominator : minus_denom;
+16535:   const Coefficient& minus_sc_denom = is_sc ? minus_denom : denominator;
+16535: 
+16535: 
+16535: 
+16535:   Linear_Expression minus_expr;
+16535:   if (!is_sc) {
+16535:     minus_expr = -expr;
+16535:   }
+16535:   const Linear_Expression& sc_expr = is_sc ? expr : minus_expr;
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_sum; N& sum = holder_sum.item();
+16535: 
+16535:   dimension_type pinf_index = Suppress_Uninitialized_Warnings_Type<dimension_type>::synonym();
+16535: 
+16535:   dimension_type pinf_count = 0;
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<N> holder_coeff_i; N& coeff_i = holder_coeff_i.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_minus_sc_i; Parma_Polyhedra_Library::Coefficient& minus_sc_i = holder_minus_sc_i.item();
+16535: 
+16535:   switch (relsym) {
+16535:   case LESS_OR_EQUAL:
+16535: 
+16535: 
+16535: 
+16535:     assign_r(sum, sc_b, ROUND_UP);
+16535: 
+16535: 
+16535: 
+16535:     ((void) 0);
+16535:     for (Linear_Expression::const_iterator i = sc_expr.begin(),
+16535:         i_end = sc_expr.lower_bound(Variable(w)); i != i_end; ++i) {
+16535:       const Coefficient& sc_i = *i;
+16535:       const dimension_type i_dim = i.variable().space_dimension();
+16535:       const int sign_i = sgn(sc_i);
+16535:       ((void) 0);
+16535: 
+16535:       const N& approx_i = (sign_i > 0) ? dbm_0[i_dim] : dbm[i_dim][0];
+16535:       if (is_plus_infinity(approx_i)) {
+16535:         if (++pinf_count > 1) {
+16535:           break;
+16535:         }
+16535:         pinf_index = i_dim;
+16535:         continue;
+16535:       }
+16535:       if (sign_i > 0) {
+16535:         assign_r(coeff_i, sc_i, ROUND_UP);
+16535:       }
+16535:       else {
+16535:         neg_assign(minus_sc_i, sc_i);
+16535:         assign_r(coeff_i, minus_sc_i, ROUND_UP);
+16535:       }
+16535:       add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP);
+16535:     }
+16535: 
+16535: 
+16535:     forget_all_dbm_constraints(v);
+16535: 
+16535:     if (marked_shortest_path_reduced()) {
+16535:       reset_shortest_path_reduced();
+16535:     }
+16535: 
+16535:     if (pinf_count > 1) {
+16535:       ((void) 0);
+16535:       return;
+16535:     }
+16535: 
+16535: 
+16535:     if (sc_denom != 1) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
+16535:       assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
+16535:       neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
+16535:       div_assign_r(sum, sum, down_sc_denom, ROUND_UP);
+16535:     }
+16535: 
+16535:     if (pinf_count == 0) {
+16535: 
+16535:       add_dbm_constraint(0, v, sum);
+16535: 
+16535:       deduce_v_minus_u_bounds(v, w, sc_expr, sc_denom, sum);
+16535:     }
+16535:     else if (pinf_count == 1) {
+16535:       if (pinf_index != v
+16535:           && expr.get(Variable(pinf_index - 1)) == denominator) {
+16535: 
+16535:         add_dbm_constraint(pinf_index, v, sum);
+16535:       }
+16535:     }
+16535:     break;
+16535: 
+16535:   case GREATER_OR_EQUAL:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     assign_r(sum, minus_sc_b, ROUND_UP);
+16535: 
+16535:     for (Linear_Expression::const_iterator i = sc_expr.begin(),
+16535:         i_end = sc_expr.lower_bound(Variable(w)); i != i_end; ++i) {
+16535:       const Coefficient& sc_i = *i;
+16535:       const int sign_i = sgn(sc_i);
+16535:       ((void) 0);
+16535:       const dimension_type i_dim = i.variable().space_dimension();
+16535: 
+16535:       const N& approx_i = (sign_i > 0) ? dbm[i_dim][0] : dbm_0[i_dim];
+16535:       if (is_plus_infinity(approx_i)) {
+16535:         if (++pinf_count > 1) {
+16535:           break;
+16535:         }
+16535:         pinf_index = i_dim;
+16535:         continue;
+16535:       }
+16535:       if (sign_i > 0) {
+16535:         assign_r(coeff_i, sc_i, ROUND_UP);
+16535:       }
+16535:       else {
+16535:         neg_assign(minus_sc_i, sc_i);
+16535:         assign_r(coeff_i, minus_sc_i, ROUND_UP);
+16535:       }
+16535:       add_mul_assign_r(sum, coeff_i, approx_i, ROUND_UP);
+16535:     }
+16535: 
+16535: 
+16535:     forget_all_dbm_constraints(v);
+16535: 
+16535:     if (marked_shortest_path_reduced()) {
+16535:       reset_shortest_path_reduced();
+16535:     }
+16535: 
+16535:     if (pinf_count > 1) {
+16535:       ((void) 0);
+16535:       return;
+16535:     }
+16535: 
+16535: 
+16535:     if (sc_denom != 1) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_down_sc_denom; N& down_sc_denom = holder_down_sc_denom.item();
+16535:       assign_r(down_sc_denom, minus_sc_denom, ROUND_UP);
+16535:       neg_assign_r(down_sc_denom, down_sc_denom, ROUND_UP);
+16535:       div_assign_r(sum, sum, down_sc_denom, ROUND_UP);
+16535:     }
+16535: 
+16535:     if (pinf_count == 0) {
+16535: 
+16535:       add_dbm_constraint(v, 0, sum);
+16535: 
+16535:       deduce_u_minus_v_bounds(v, w, sc_expr, sc_denom, sum);
+16535:     }
+16535:     else if (pinf_count == 1) {
+16535:       if (pinf_index != v
+16535:           && expr.get(Variable(pinf_index - 1)) == denominator) {
+16535: 
+16535: 
+16535:         add_dbm_constraint(v, pinf_index, sum);
+16535:       }
+16535:     }
+16535:     break;
+16535: 
+16535:   default:
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     break;
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::generalized_affine_image(const Linear_Expression& lhs,
+16535:                                       const Relation_Symbol relsym,
+16535:                                       const Linear_Expression& rhs) {
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535:   const dimension_type lhs_space_dim = lhs.space_dimension();
+16535:   if (space_dim < lhs_space_dim) {
+16535:     throw_dimension_incompatible("generalized_affine_image(e1, r, e2)",
+16535:                                  "e1", lhs);
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type rhs_space_dim = rhs.space_dimension();
+16535:   if (space_dim < rhs_space_dim) {
+16535:     throw_dimension_incompatible("generalized_affine_image(e1, r, e2)",
+16535:                                  "e2", rhs);
+16535:   }
+16535: 
+16535:   if (relsym == LESS_THAN || relsym == GREATER_THAN) {
+16535:     throw_invalid_argument("generalized_affine_image(e1, r, e2)",
+16535:                            "r is a strict relation symbol");
+16535:   }
+16535: 
+16535:   if (relsym == NOT_EQUAL) {
+16535:     throw_invalid_argument("generalized_affine_image(e1, r, e2)",
+16535:                            "r is the disequality relation symbol");
+16535:   }
+16535: 
+16535:   shortest_path_closure_assign();
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   dimension_type t_lhs = 0;
+16535: 
+16535:   dimension_type j_lhs = lhs.last_nonzero();
+16535: 
+16535:   if (j_lhs != 0) {
+16535:     ++t_lhs;
+16535:     if (!lhs.all_zeroes(1, j_lhs)) {
+16535:       ++t_lhs;
+16535:     }
+16535:     --j_lhs;
+16535:   }
+16535: 
+16535:   const Coefficient& b_lhs = lhs.inhomogeneous_term();
+16535: 
+16535:   if (t_lhs == 0) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     switch (relsym) {
+16535:     case LESS_OR_EQUAL:
+16535:       refine_no_check(lhs <= rhs);
+16535:       break;
+16535:     case EQUAL:
+16535:       refine_no_check(lhs == rhs);
+16535:       break;
+16535:     case GREATER_OR_EQUAL:
+16535:       refine_no_check(lhs >= rhs);
+16535:       break;
+16535:     default:
+16535: 
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       break;
+16535:     }
+16535:   }
+16535:   else if (t_lhs == 1) {
+16535: 
+16535: 
+16535: 
+16535:     Variable v(j_lhs);
+16535: 
+16535:     const Coefficient& denom = lhs.coefficient(v);
+16535:     Relation_Symbol new_relsym = relsym;
+16535:     if (denom < 0) {
+16535:       if (relsym == LESS_OR_EQUAL) {
+16535:         new_relsym = GREATER_OR_EQUAL;
+16535:       }
+16535:       else if (relsym == GREATER_OR_EQUAL) {
+16535:         new_relsym = LESS_OR_EQUAL;
+16535:       }
+16535:     }
+16535:     Linear_Expression expr = rhs - b_lhs;
+16535:     generalized_affine_image(v, new_relsym, expr, denom);
+16535:   }
+16535:   else {
+16535: 
+16535: 
+16535:     std::vector<Variable> lhs_vars;
+16535:     for (Linear_Expression::const_iterator i = lhs.begin(), i_end = lhs.end();
+16535:           i != i_end; ++i) {
+16535:       lhs_vars.push_back(i.variable());
+16535:     }
+16535:     const dimension_type num_common_dims = std::min(lhs_space_dim, rhs_space_dim);
+16535:     if (!lhs.have_a_common_variable(rhs, Variable(0), Variable(num_common_dims))) {
+16535: 
+16535: 
+16535:       for (dimension_type i = lhs_vars.size(); i-- > 0; ) {
+16535:         forget_all_dbm_constraints(lhs_vars[i].id() + 1);
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       switch (relsym) {
+16535:       case LESS_OR_EQUAL:
+16535:         refine_no_check(lhs <= rhs);
+16535:         break;
+16535:       case EQUAL:
+16535:         refine_no_check(lhs == rhs);
+16535:         break;
+16535:       case GREATER_OR_EQUAL:
+16535:         refine_no_check(lhs >= rhs);
+16535:         break;
+16535:       default:
+16535: 
+16535:         Parma_Polyhedra_Library::ppl_unreachable();
+16535:         break;
+16535:       }
+16535:     }
+16535:     else {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       for (dimension_type i = lhs_vars.size(); i-- > 0; ) {
+16535:         forget_all_dbm_constraints(lhs_vars[i].id() + 1);
+16535:       }
+16535: # 6155 "../../src/BD_Shape_templates.hh"
+16535:     }
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::generalized_affine_preimage(const Variable var,
+16535:                                          const Relation_Symbol relsym,
+16535:                                          const Linear_Expression& expr,
+16535:                                          Coefficient_traits::const_reference
+16535:                                          denominator) {
+16535: 
+16535:   if (denominator == 0) {
+16535:     throw_invalid_argument("generalized_affine_preimage(v, r, e, d)",
+16535:                            "d == 0");
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535:   const dimension_type expr_space_dim = expr.space_dimension();
+16535:   if (space_dim < expr_space_dim) {
+16535:     throw_dimension_incompatible("generalized_affine_preimage(v, r, e, d)",
+16535:                                  "e", expr);
+16535:   }
+16535: 
+16535:   const dimension_type v = var.id() + 1;
+16535:   if (v > space_dim) {
+16535:     throw_dimension_incompatible("generalized_affine_preimage(v, r, e, d)",
+16535:                                  var.id());
+16535:   }
+16535: 
+16535:   if (relsym == LESS_THAN || relsym == GREATER_THAN) {
+16535:     throw_invalid_argument("generalized_affine_preimage(v, r, e, d)",
+16535:                            "r is a strict relation symbol");
+16535:   }
+16535: 
+16535:   if (relsym == NOT_EQUAL) {
+16535:     throw_invalid_argument("generalized_affine_preimage(v, r, e, d)",
+16535:                            "r is the disequality relation symbol");
+16535:   }
+16535:   if (relsym == EQUAL) {
+16535: 
+16535: 
+16535:     affine_preimage(var, expr, denominator);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   shortest_path_closure_assign();
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   const Coefficient& expr_v = expr.coefficient(var);
+16535:   if (expr_v != 0) {
+16535:     const Relation_Symbol reversed_relsym = (relsym == LESS_OR_EQUAL)
+16535:       ? GREATER_OR_EQUAL : LESS_OR_EQUAL;
+16535:     const Linear_Expression inverse
+16535:       = expr - (expr_v + denominator)*var;
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inverse_denom; Parma_Polyhedra_Library::Coefficient& inverse_denom = holder_inverse_denom.item();
+16535:     neg_assign(inverse_denom, expr_v);
+16535:     const Relation_Symbol inverse_relsym
+16535:       = (sgn(denominator) == sgn(inverse_denom)) ? relsym : reversed_relsym;
+16535:     generalized_affine_image(var, inverse_relsym, inverse, inverse_denom);
+16535:     return;
+16535:   }
+16535: 
+16535:   refine(var, relsym, expr, denominator);
+16535: 
+16535:   if (is_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   forget_all_dbm_constraints(v);
+16535: 
+16535:   if (marked_shortest_path_reduced()) {
+16535:     reset_shortest_path_reduced();
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::generalized_affine_preimage(const Linear_Expression& lhs,
+16535:                                          const Relation_Symbol relsym,
+16535:                                          const Linear_Expression& rhs) {
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type bds_space_dim = space_dimension();
+16535:   const dimension_type lhs_space_dim = lhs.space_dimension();
+16535:   if (bds_space_dim < lhs_space_dim) {
+16535:     throw_dimension_incompatible("generalized_affine_preimage(e1, r, e2)",
+16535:                                  "e1", lhs);
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type rhs_space_dim = rhs.space_dimension();
+16535:   if (bds_space_dim < rhs_space_dim) {
+16535:     throw_dimension_incompatible("generalized_affine_preimage(e1, r, e2)",
+16535:                                  "e2", rhs);
+16535:   }
+16535: 
+16535:   if (relsym == LESS_THAN || relsym == GREATER_THAN) {
+16535:     throw_invalid_argument("generalized_affine_preimage(e1, r, e2)",
+16535:                            "r is a strict relation symbol");
+16535:   }
+16535: 
+16535:   if (relsym == NOT_EQUAL) {
+16535:     throw_invalid_argument("generalized_affine_preimage(e1, r, e2)",
+16535:                            "r is the disequality relation symbol");
+16535:   }
+16535: 
+16535:   shortest_path_closure_assign();
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   dimension_type t_lhs = 0;
+16535: 
+16535:   dimension_type j_lhs = lhs.last_nonzero();
+16535: 
+16535:   if (j_lhs != 0) {
+16535:     ++t_lhs;
+16535:     if (!lhs.all_zeroes(1, j_lhs)) {
+16535:       ++t_lhs;
+16535:     }
+16535:     --j_lhs;
+16535:   }
+16535: 
+16535:   const Coefficient& b_lhs = lhs.inhomogeneous_term();
+16535: 
+16535:   if (t_lhs == 0) {
+16535: 
+16535: 
+16535:     generalized_affine_image(lhs, relsym, rhs);
+16535:     return;
+16535:   }
+16535:   else if (t_lhs == 1) {
+16535: 
+16535: 
+16535: 
+16535:     Variable v(j_lhs);
+16535: 
+16535:     const Coefficient& denom = lhs.coefficient(v);
+16535:     Relation_Symbol new_relsym = relsym;
+16535:     if (denom < 0) {
+16535:       if (relsym == LESS_OR_EQUAL) {
+16535:         new_relsym = GREATER_OR_EQUAL;
+16535:       }
+16535:       else if (relsym == GREATER_OR_EQUAL) {
+16535:         new_relsym = LESS_OR_EQUAL;
+16535:       }
+16535:     }
+16535:     Linear_Expression expr = rhs - b_lhs;
+16535:     generalized_affine_preimage(v, new_relsym, expr, denom);
+16535:   }
+16535:   else {
+16535: 
+16535: 
+16535:     std::vector<Variable> lhs_vars;
+16535:     for (Linear_Expression::const_iterator i = lhs.begin(), i_end = lhs.end();
+16535:           i != i_end; ++i) {
+16535:       lhs_vars.push_back(i.variable());
+16535:     }
+16535:     const dimension_type num_common_dims = std::min(lhs_space_dim, rhs_space_dim);
+16535:     if (!lhs.have_a_common_variable(rhs, Variable(0), Variable(num_common_dims))) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       switch (relsym) {
+16535:       case LESS_OR_EQUAL:
+16535:         refine_no_check(lhs <= rhs);
+16535:         break;
+16535:       case EQUAL:
+16535:         refine_no_check(lhs == rhs);
+16535:         break;
+16535:       case GREATER_OR_EQUAL:
+16535:         refine_no_check(lhs >= rhs);
+16535:         break;
+16535:       default:
+16535: 
+16535:         Parma_Polyhedra_Library::ppl_unreachable();
+16535:         break;
+16535:       }
+16535: 
+16535: 
+16535:       if (is_empty()) {
+16535:         return;
+16535:       }
+16535: 
+16535:       for (dimension_type i = lhs_vars.size(); i-- > 0; ) {
+16535:         forget_all_dbm_constraints(lhs_vars[i].id() + 1);
+16535:       }
+16535:     }
+16535:     else {
+16535: 
+16535: 
+16535: 
+16535:       const Variable new_var(bds_space_dim);
+16535:       add_space_dimensions_and_embed(1);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       affine_image(new_var, lhs);
+16535: 
+16535: 
+16535:       shortest_path_closure_assign();
+16535:       ((void) 0);
+16535:       for (dimension_type i = lhs_vars.size(); i-- > 0; ) {
+16535:         forget_all_dbm_constraints(lhs_vars[i].id() + 1);
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       switch (relsym) {
+16535:       case LESS_OR_EQUAL:
+16535:         refine_no_check(new_var <= rhs);
+16535:         break;
+16535:       case EQUAL:
+16535:         refine_no_check(new_var == rhs);
+16535:         break;
+16535:       case GREATER_OR_EQUAL:
+16535:         refine_no_check(new_var >= rhs);
+16535:         break;
+16535:       default:
+16535: 
+16535:         Parma_Polyhedra_Library::ppl_unreachable();
+16535:         break;
+16535:       }
+16535: 
+16535:       remove_higher_space_dimensions(bds_space_dim);
+16535:     }
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: Constraint_System
+16535: BD_Shape<T>::constraints() const {
+16535:   const dimension_type space_dim = space_dimension();
+16535:   Constraint_System cs;
+16535:   cs.set_space_dimension(space_dim);
+16535: 
+16535:   if (space_dim == 0) {
+16535:     if (marked_empty()) {
+16535:       cs = Constraint_System::zero_dim_empty();
+16535:     }
+16535:     return cs;
+16535:   }
+16535: 
+16535:   if (marked_empty()) {
+16535:     cs.insert(Constraint::zero_dim_false());
+16535:     return cs;
+16535:   }
+16535: 
+16535:   if (marked_shortest_path_reduced()) {
+16535: 
+16535:     cs = minimized_constraints();
+16535:     return cs;
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_a; Parma_Polyhedra_Library::Coefficient& a = holder_a.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_b; Parma_Polyhedra_Library::Coefficient& b = holder_b.item();
+16535: 
+16535:   const DB_Row<N>& dbm_0 = dbm[0];
+16535:   for (dimension_type j = 1; j <= space_dim; ++j) {
+16535:     const Variable x(j-1);
+16535:     const N& dbm_0j = dbm_0[j];
+16535:     const N& dbm_j0 = dbm[j][0];
+16535:     if (is_additive_inverse(dbm_j0, dbm_0j)) {
+16535: 
+16535:       numer_denom(dbm_0j, b, a);
+16535:       cs.insert(a*x == b);
+16535:     }
+16535:     else {
+16535: 
+16535:       if (!is_plus_infinity(dbm_0j)) {
+16535:         numer_denom(dbm_0j, b, a);
+16535:         cs.insert(a*x <= b);
+16535:       }
+16535:       if (!is_plus_infinity(dbm_j0)) {
+16535:         numer_denom(dbm_j0, b, a);
+16535:         cs.insert(-a*x <= b);
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   for (dimension_type i = 1; i <= space_dim; ++i) {
+16535:     const Variable y(i-1);
+16535:     const DB_Row<N>& dbm_i = dbm[i];
+16535:     for (dimension_type j = i + 1; j <= space_dim; ++j) {
+16535:       const Variable x(j-1);
+16535:       const N& dbm_ij = dbm_i[j];
+16535:       const N& dbm_ji = dbm[j][i];
+16535:       if (is_additive_inverse(dbm_ji, dbm_ij)) {
+16535: 
+16535:         numer_denom(dbm_ij, b, a);
+16535:         cs.insert(a*x - a*y == b);
+16535:       }
+16535:       else {
+16535: 
+16535:         if (!is_plus_infinity(dbm_ij)) {
+16535:           numer_denom(dbm_ij, b, a);
+16535:           cs.insert(a*x - a*y <= b);
+16535:         }
+16535:         if (!is_plus_infinity(dbm_ji)) {
+16535:           numer_denom(dbm_ji, b, a);
+16535:           cs.insert(a*y - a*x <= b);
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535:   return cs;
+16535: }
+16535: 
+16535: template <typename T>
+16535: Constraint_System
+16535: BD_Shape<T>::minimized_constraints() const {
+16535:   shortest_path_reduction_assign();
+16535:   const dimension_type space_dim = space_dimension();
+16535:   Constraint_System cs;
+16535:   cs.set_space_dimension(space_dim);
+16535: 
+16535:   if (space_dim == 0) {
+16535:     if (marked_empty()) {
+16535:       cs = Constraint_System::zero_dim_empty();
+16535:     }
+16535:     return cs;
+16535:   }
+16535: 
+16535:   if (marked_empty()) {
+16535:     cs.insert(Constraint::zero_dim_false());
+16535:     return cs;
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
+16535: 
+16535: 
+16535:   std::vector<dimension_type> leaders;
+16535:   compute_leaders(leaders);
+16535:   std::vector<dimension_type> leader_indices;
+16535:   compute_leader_indices(leaders, leader_indices);
+16535:   const dimension_type num_leaders = leader_indices.size();
+16535: 
+16535: 
+16535:   const DB_Row<N>& dbm_0 = dbm[0];
+16535:   for (dimension_type i = 1; i <= space_dim; ++i) {
+16535:     const dimension_type leader = leaders[i];
+16535:     if (i != leader) {
+16535: 
+16535:       if (leader == 0) {
+16535: 
+16535:         ((void) 0);
+16535:         numer_denom(dbm_0[i], numer, denom);
+16535:         cs.insert(denom*Variable(i-1) == numer);
+16535:       }
+16535:       else {
+16535: 
+16535:         ((void) 0);
+16535:         numer_denom(dbm[i][leader], numer, denom);
+16535:         cs.insert(denom*Variable(leader-1) - denom*Variable(i-1) == numer);
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   const Bit_Row& red_0 = redundancy_dbm[0];
+16535:   for (dimension_type l_i = 1; l_i < num_leaders; ++l_i) {
+16535:     const dimension_type i = leader_indices[l_i];
+16535:     if (!red_0[i]) {
+16535:       numer_denom(dbm_0[i], numer, denom);
+16535:       cs.insert(denom*Variable(i-1) <= numer);
+16535:     }
+16535:     if (!redundancy_dbm[i][0]) {
+16535:       numer_denom(dbm[i][0], numer, denom);
+16535:       cs.insert(-denom*Variable(i-1) <= numer);
+16535:     }
+16535:   }
+16535: 
+16535:   for (dimension_type l_i = 1; l_i < num_leaders; ++l_i) {
+16535:     const dimension_type i = leader_indices[l_i];
+16535:     const DB_Row<N>& dbm_i = dbm[i];
+16535:     const Bit_Row& red_i = redundancy_dbm[i];
+16535:     for (dimension_type l_j = l_i + 1; l_j < num_leaders; ++l_j) {
+16535:       const dimension_type j = leader_indices[l_j];
+16535:       if (!red_i[j]) {
+16535:         numer_denom(dbm_i[j], numer, denom);
+16535:         cs.insert(denom*Variable(j-1) - denom*Variable(i-1) <= numer);
+16535:       }
+16535:       if (!redundancy_dbm[j][i]) {
+16535:         numer_denom(dbm[j][i], numer, denom);
+16535:         cs.insert(denom*Variable(i-1) - denom*Variable(j-1) <= numer);
+16535:       }
+16535:     }
+16535:   }
+16535:   return cs;
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::expand_space_dimension(Variable var, dimension_type m) {
+16535:   dimension_type old_dim = space_dimension();
+16535: 
+16535:   if (var.space_dimension() > old_dim) {
+16535:     throw_dimension_incompatible("expand_space_dimension(v, m)", "v", var);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (m > max_space_dimension() - space_dimension()) {
+16535:     throw_invalid_argument("expand_dimension(v, m)",
+16535:                            "adding m new space dimensions exceeds "
+16535:                            "the maximum allowed space dimension");
+16535:   }
+16535: 
+16535:   if (m == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535:   add_space_dimensions_and_embed(m);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type v_id = var.id() + 1;
+16535:   const DB_Row<N>& dbm_v = dbm[v_id];
+16535:   for (dimension_type i = old_dim + 1; i-- > 0; ) {
+16535:     DB_Row<N>& dbm_i = dbm[i];
+16535:     const N& dbm_i_v = dbm[i][v_id];
+16535:     const N& dbm_v_i = dbm_v[i];
+16535:     for (dimension_type j = old_dim+1; j < old_dim+m+1; ++j) {
+16535:       dbm_i[j] = dbm_i_v;
+16535:       dbm[j][i] = dbm_v_i;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   if (marked_shortest_path_closed()) {
+16535:     reset_shortest_path_closed();
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::fold_space_dimensions(const Variables_Set& vars,
+16535:                                    Variable dest) {
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535:   if (dest.space_dimension() > space_dim) {
+16535:     throw_dimension_incompatible("fold_space_dimensions(vs, v)",
+16535:                                  "v", dest);
+16535:   }
+16535: 
+16535:   if (vars.empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   if (vars.space_dimension() > space_dim) {
+16535:     throw_dimension_incompatible("fold_space_dimensions(vs, v)",
+16535:                                  vars.space_dimension());
+16535:   }
+16535: 
+16535:   if (vars.find(dest.id()) != vars.end()) {
+16535:     throw_invalid_argument("fold_space_dimensions(vs, v)",
+16535:                            "v should not occur in vs");
+16535:   }
+16535:   shortest_path_closure_assign();
+16535:   if (!marked_empty()) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     const dimension_type v_id = dest.id() + 1;
+16535:     DB_Row<N>& dbm_v = dbm[v_id];
+16535:     for (Variables_Set::const_iterator i = vars.begin(),
+16535:            vs_end = vars.end(); i != vs_end; ++i) {
+16535:       const dimension_type to_be_folded_id = *i + 1;
+16535:       const DB_Row<N>& dbm_to_be_folded_id = dbm[to_be_folded_id];
+16535:       for (dimension_type j = space_dim + 1; j-- > 0; ) {
+16535:         max_assign(dbm[j][v_id], dbm[j][to_be_folded_id]);
+16535:         max_assign(dbm_v[j], dbm_to_be_folded_id[j]);
+16535:       }
+16535:     }
+16535:   }
+16535:   remove_space_dimensions(vars);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::drop_some_non_integer_points(Complexity_Class) {
+16535:   if (std::numeric_limits<T>::is_integer) {
+16535:     return;
+16535:   }
+16535:   const dimension_type space_dim = space_dimension();
+16535:   shortest_path_closure_assign();
+16535:   if (space_dim == 0 || marked_empty()) {
+16535:     return;
+16535:   }
+16535:   for (dimension_type i = space_dim + 1; i-- > 0; ) {
+16535:     DB_Row<N>& dbm_i = dbm[i];
+16535:     for (dimension_type j = space_dim + 1; j-- > 0; ) {
+16535:       if (i != j) {
+16535:         drop_some_non_integer_points_helper(dbm_i[j]);
+16535:       }
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::drop_some_non_integer_points(const Variables_Set& vars,
+16535:                                           Complexity_Class) {
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535:   const dimension_type min_space_dim = vars.space_dimension();
+16535:   if (space_dim < min_space_dim) {
+16535:     throw_dimension_incompatible("drop_some_non_integer_points(vs, cmpl)",
+16535:                                  min_space_dim);
+16535:   }
+16535:   if (std::numeric_limits<T>::is_integer || min_space_dim == 0) {
+16535:     return;
+16535:   }
+16535:   shortest_path_closure_assign();
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535:   const Variables_Set::const_iterator v_begin = vars.begin();
+16535:   const Variables_Set::const_iterator v_end = vars.end();
+16535:   ((void) 0);
+16535: 
+16535:   DB_Row<N>& dbm_0 = dbm[0];
+16535:   for (Variables_Set::const_iterator v_i = v_begin; v_i != v_end; ++v_i) {
+16535:     const dimension_type i = *v_i + 1;
+16535:     drop_some_non_integer_points_helper(dbm_0[i]);
+16535:     drop_some_non_integer_points_helper(dbm[i][0]);
+16535:   }
+16535: 
+16535: 
+16535:   for (Variables_Set::const_iterator v_i = v_begin; v_i != v_end; ++v_i) {
+16535:     const dimension_type i = *v_i + 1;
+16535:     DB_Row<N>& dbm_i = dbm[i];
+16535:     for (Variables_Set::const_iterator v_j = v_begin; v_j != v_end; ++v_j) {
+16535:       const dimension_type j = *v_j + 1;
+16535:       if (i != j) {
+16535:         drop_some_non_integer_points_helper(dbm_i[j]);
+16535:       }
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: std::ostream&
+16535: IO_Operators::operator<<(std::ostream& s, const BD_Shape<T>& bds) {
+16535:   typedef typename BD_Shape<T>::coefficient_type N;
+16535:   if (bds.is_universe()) {
+16535:     s << "true";
+16535:   }
+16535:   else {
+16535: 
+16535:     dimension_type n = bds.space_dimension();
+16535:     if (bds.marked_empty()) {
+16535:       s << "false";
+16535:     }
+16535:     else {
+16535:       Parma_Polyhedra_Library::Dirty_Temp<N> holder_v; N& v = holder_v.item();
+16535:       bool first = true;
+16535:       for (dimension_type i = 0; i <= n; ++i) {
+16535:         for (dimension_type j = i + 1; j <= n; ++j) {
+16535:           const N& c_i_j = bds.dbm[i][j];
+16535:           const N& c_j_i = bds.dbm[j][i];
+16535:           if (is_additive_inverse(c_j_i, c_i_j)) {
+16535: 
+16535:             if (first) {
+16535:               first = false;
+16535:             }
+16535:             else {
+16535:               s << ", ";
+16535:             }
+16535:             if (i == 0) {
+16535: 
+16535:               s << Variable(j - 1);
+16535:               s << " = " << c_i_j;
+16535:             }
+16535:             else {
+16535: 
+16535:               if (sgn(c_i_j) >= 0) {
+16535:                 s << Variable(j - 1);
+16535:                 s << " - ";
+16535:                 s << Variable(i - 1);
+16535:                 s << " = " << c_i_j;
+16535:               }
+16535:               else {
+16535:                 s << Variable(i - 1);
+16535:                 s << " - ";
+16535:                 s << Variable(j - 1);
+16535:                 s << " = " << c_j_i;
+16535:               }
+16535:             }
+16535:           }
+16535:           else {
+16535: 
+16535:             if (!is_plus_infinity(c_j_i)) {
+16535:               if (first) {
+16535:                 first = false;
+16535:               }
+16535:               else {
+16535:                 s << ", ";
+16535:               }
+16535:               if (i == 0) {
+16535: 
+16535:                 s << Variable(j - 1);
+16535:                 neg_assign_r(v, c_j_i, ROUND_DOWN);
+16535:                 s << " >= " << v;
+16535:               }
+16535:               else {
+16535: 
+16535:                 if (sgn(c_j_i) >= 0) {
+16535:                   s << Variable(i - 1);
+16535:                   s << " - ";
+16535:                   s << Variable(j - 1);
+16535:                   s << " <= " << c_j_i;
+16535:                 }
+16535:                 else {
+16535:                   s << Variable(j - 1);
+16535:                   s << " - ";
+16535:                   s << Variable(i - 1);
+16535:                   neg_assign_r(v, c_j_i, ROUND_DOWN);
+16535:                   s << " >= " << v;
+16535:                 }
+16535:               }
+16535:             }
+16535:             if (!is_plus_infinity(c_i_j)) {
+16535:               if (first) {
+16535:                 first = false;
+16535:               }
+16535:               else {
+16535:                 s << ", ";
+16535:               }
+16535:               if (i == 0) {
+16535: 
+16535:                 s << Variable(j - 1);
+16535:                 s << " <= " << c_i_j;
+16535:               }
+16535:               else {
+16535: 
+16535:                 if (sgn(c_i_j) >= 0) {
+16535:                   s << Variable(j - 1);
+16535:                   s << " - ";
+16535:                   s << Variable(i - 1);
+16535:                   s << " <= " << c_i_j;
+16535:                 }
+16535:                 else {
+16535:                   s << Variable(i - 1);
+16535:                   s << " - ";
+16535:                   s << Variable(j - 1);
+16535:                   neg_assign_r(v, c_i_j, ROUND_DOWN);
+16535:                   s << " >= " << v;
+16535:                 }
+16535:               }
+16535:             }
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535:   return s;
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::ascii_dump(std::ostream& s) const {
+16535:   status.ascii_dump(s);
+16535:   s << "\n";
+16535:   dbm.ascii_dump(s);
+16535:   s << "\n";
+16535:   redundancy_dbm.ascii_dump(s);
+16535: }
+16535: 
+16535: template <typename T> void BD_Shape<T>::ascii_dump() const { ascii_dump(std::cerr); } template <typename T> void BD_Shape<T>::print() const { using IO_Operators::operator<<; std::cerr << *this; }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: BD_Shape<T>::ascii_load(std::istream& s) {
+16535:   if (!status.ascii_load(s)) {
+16535:     return false;
+16535:   }
+16535:   if (!dbm.ascii_load(s)) {
+16535:     return false;
+16535:   }
+16535:   if (!redundancy_dbm.ascii_load(s)) {
+16535:     return false;
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename T>
+16535: memory_size_type
+16535: BD_Shape<T>::external_memory_in_bytes() const {
+16535:   return dbm.external_memory_in_bytes()
+16535:     + redundancy_dbm.external_memory_in_bytes();
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: BD_Shape<T>::OK() const {
+16535: 
+16535:   if (!dbm.OK()) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (!status.OK()) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (marked_empty()) {
+16535:     return true;
+16535:   }
+16535: 
+16535:   for (dimension_type i = dbm.num_rows(); i-- > 0; ) {
+16535:     for (dimension_type j = dbm.num_rows(); j-- > 0; ) {
+16535:       if (is_minus_infinity(dbm[i][j])) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:         return false;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   for (dimension_type i = dbm.num_rows(); i-- > 0; ) {
+16535:     if (!is_plus_infinity(dbm[i][i])) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       return false;
+16535:     }
+16535:   }
+16535: 
+16535:   if (marked_shortest_path_closed()) {
+16535:     BD_Shape x = *this;
+16535:     x.reset_shortest_path_closed();
+16535:     x.shortest_path_closure_assign();
+16535:     if (x.dbm != dbm) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       return false;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (std::numeric_limits<coefficient_type_base>::is_exact) {
+16535: 
+16535: 
+16535:     if (marked_shortest_path_reduced()) {
+16535: 
+16535:       for (dimension_type i = dbm.num_rows(); i-- > 0; ) {
+16535:         for (dimension_type j = dbm.num_rows(); j-- > 0; ) {
+16535:           if (!redundancy_dbm[i][j] && is_plus_infinity(dbm[i][j])) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:             return false;
+16535:           }
+16535:         }
+16535:       }
+16535:       BD_Shape x = *this;
+16535:       x.reset_shortest_path_reduced();
+16535:       x.shortest_path_reduction_assign();
+16535:       if (x.redundancy_dbm != redundancy_dbm) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:         return false;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::throw_dimension_incompatible(const char* method,
+16535:                                           const BD_Shape& y) const {
+16535:   std::ostringstream s;
+16535:   s << "PPL::BD_Shape::" << method << ":" << std::endl
+16535:     << "this->space_dimension() == " << space_dimension()
+16535:     << ", y->space_dimension() == " << y.space_dimension() << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::throw_dimension_incompatible(const char* method,
+16535:                                           dimension_type required_dim) const {
+16535:   std::ostringstream s;
+16535:   s << "PPL::BD_Shape::" << method << ":" << std::endl
+16535:     << "this->space_dimension() == " << space_dimension()
+16535:     << ", required dimension == " << required_dim << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::throw_dimension_incompatible(const char* method,
+16535:                                           const Constraint& c) const {
+16535:   std::ostringstream s;
+16535:   s << "PPL::BD_Shape::" << method << ":" << std::endl
+16535:     << "this->space_dimension() == " << space_dimension()
+16535:     << ", c->space_dimension == " << c.space_dimension() << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::throw_dimension_incompatible(const char* method,
+16535:                                           const Congruence& cg) const {
+16535:   std::ostringstream s;
+16535:   s << "PPL::BD_Shape::" << method << ":" << std::endl
+16535:     << "this->space_dimension() == " << space_dimension()
+16535:     << ", cg->space_dimension == " << cg.space_dimension() << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::throw_dimension_incompatible(const char* method,
+16535:                                           const Generator& g) const {
+16535:   std::ostringstream s;
+16535:   s << "PPL::BD_Shape::" << method << ":" << std::endl
+16535:     << "this->space_dimension() == " << space_dimension()
+16535:     << ", g->space_dimension == " << g.space_dimension() << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::throw_expression_too_complex(const char* method,
+16535:                                           const Linear_Expression& le) {
+16535:   using namespace IO_Operators;
+16535:   std::ostringstream s;
+16535:   s << "PPL::BD_Shape::" << method << ":" << std::endl
+16535:     << le << " is too complex.";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::throw_dimension_incompatible(const char* method,
+16535:                                           const char* le_name,
+16535:                                           const Linear_Expression& le) const {
+16535:   std::ostringstream s;
+16535:   s << "PPL::BD_Shape::" << method << ":" << std::endl
+16535:     << "this->space_dimension() == " << space_dimension()
+16535:     << ", " << le_name << "->space_dimension() == "
+16535:     << le.space_dimension() << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename T>
+16535: template<typename Interval_Info>
+16535: void
+16535: BD_Shape<T>::throw_dimension_incompatible(const char* method,
+16535:                                           const char* lf_name,
+16535:                                           const Linear_Form< Interval<T,
+16535:                                           Interval_Info> >& lf) const {
+16535:   std::ostringstream s;
+16535:   s << "PPL::BD_Shape::" << method << ":" << std::endl
+16535:     << "this->space_dimension() == " << space_dimension()
+16535:     << ", " << lf_name << "->space_dimension() == "
+16535:     << lf.space_dimension() << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: BD_Shape<T>::throw_invalid_argument(const char* method, const char* reason) {
+16535:   std::ostringstream s;
+16535:   s << "PPL::BD_Shape::" << method << ":" << std::endl
+16535:     << reason << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: }
+16535: # 2373 "../../src/BD_Shape_defs.hh" 2
+16535: # 39 "../../src/Box_templates.hh" 2
+16535: 
+16535: 
+16535: # 1 "../../src/Rational_Interval.hh" 1
+16535: # 30 "../../src/Rational_Interval.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: struct Rational_Interval_Info_Policy {
+16535:   enum const_bool_value_store_special { store_special = (true) };
+16535:   enum const_bool_value_store_open { store_open = (true) };
+16535:   enum const_bool_value_cache_empty { cache_empty = (true) };
+16535:   enum const_bool_value_cache_singleton { cache_singleton = (true) };
+16535:   enum const_bool_value_cache_normalized { cache_normalized = (false) };
+16535:   enum anonymous_enum_next_bit { next_bit = (0) };
+16535:   enum const_bool_value_may_be_empty { may_be_empty = (true) };
+16535:   enum const_bool_value_may_contain_infinity { may_contain_infinity = (false) };
+16535:   enum const_bool_value_check_inexact { check_inexact = (false) };
+16535: };
+16535: 
+16535: typedef Interval_Info_Bitset<unsigned int,
+16535:                              Rational_Interval_Info_Policy> Rational_Interval_Info;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef Interval<mpq_class, Rational_Interval_Info> Rational_Interval;
+16535: 
+16535: }
+16535: # 42 "../../src/Box_templates.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename ITV>
+16535: inline
+16535: Box<ITV>::Box(dimension_type num_dimensions, Degenerate_Element kind)
+16535:   : seq(check_space_dimension_overflow(num_dimensions,
+16535:                                        max_space_dimension(),
+16535:                                        "PPL::Box::",
+16535:                                        "Box(n, k)",
+16535:                                        "n exceeds the maximum "
+16535:                                        "allowed space dimension")),
+16535:     status() {
+16535: 
+16535: 
+16535:   if (kind == UNIVERSE) {
+16535:     for (dimension_type i = num_dimensions; i-- > 0; ) {
+16535:       seq[i].assign(UNIVERSE);
+16535:     }
+16535:     set_empty_up_to_date();
+16535:   }
+16535:   else {
+16535:     set_empty();
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline
+16535: Box<ITV>::Box(const Constraint_System& cs)
+16535:   : seq(check_space_dimension_overflow(cs.space_dimension(),
+16535:                                        max_space_dimension(),
+16535:                                        "PPL::Box::",
+16535:                                        "Box(cs)",
+16535:                                        "cs exceeds the maximum "
+16535:                                        "allowed space dimension")),
+16535:     status() {
+16535: 
+16535:   for (dimension_type i = cs.space_dimension(); i-- > 0; ) {
+16535:     seq[i].assign(UNIVERSE);
+16535:   }
+16535:   add_constraints_no_check(cs);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline
+16535: Box<ITV>::Box(const Congruence_System& cgs)
+16535:   : seq(check_space_dimension_overflow(cgs.space_dimension(),
+16535:                                        max_space_dimension(),
+16535:                                        "PPL::Box::",
+16535:                                        "Box(cgs)",
+16535:                                        "cgs exceeds the maximum "
+16535:                                        "allowed space dimension")),
+16535:     status() {
+16535: 
+16535:   for (dimension_type i = cgs.space_dimension(); i-- > 0; ) {
+16535:     seq[i].assign(UNIVERSE);
+16535:   }
+16535:   add_congruences_no_check(cgs);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: template <typename Other_ITV>
+16535: inline
+16535: Box<ITV>::Box(const Box<Other_ITV>& y, Complexity_Class)
+16535:   : seq(y.space_dimension()),
+16535: 
+16535: 
+16535:     status() {
+16535: 
+16535:   if (y.marked_empty()) {
+16535:     set_empty();
+16535:   }
+16535: 
+16535:   if (!y.marked_empty()) {
+16535:     for (dimension_type k = y.space_dimension(); k-- > 0; ) {
+16535:       seq[k].assign(y.seq[k]);
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: Box<ITV>::Box(const Generator_System& gs)
+16535:   : seq(check_space_dimension_overflow(gs.space_dimension(),
+16535:                                        max_space_dimension(),
+16535:                                        "PPL::Box::",
+16535:                                        "Box(gs)",
+16535:                                        "gs exceeds the maximum "
+16535:                                        "allowed space dimension")),
+16535:     status() {
+16535:   const Generator_System::const_iterator gs_begin = gs.begin();
+16535:   const Generator_System::const_iterator gs_end = gs.end();
+16535:   if (gs_begin == gs_end) {
+16535: 
+16535:     set_empty();
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   set_empty_up_to_date();
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
+16535:   bool point_seen = false;
+16535: 
+16535:   for (Generator_System::const_iterator
+16535:          gs_i = gs_begin; gs_i != gs_end; ++gs_i) {
+16535:     const Generator& g = *gs_i;
+16535:     if (g.is_point()) {
+16535:       const Coefficient& d = g.divisor();
+16535:       if (point_seen) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:         for (dimension_type i = space_dim; i-- > 0; ) {
+16535:           assign_r(q.get_num(), g.coefficient(Variable(i)), ROUND_NOT_NEEDED);
+16535:           assign_r(q.get_den(), d, ROUND_NOT_NEEDED);
+16535:           q.canonicalize();
+16535:           Parma_Polyhedra_Library::Dirty_Temp<ITV> holder_iq; ITV& iq = holder_iq.item();
+16535:           iq.build(i_constraint(EQUAL, q));
+16535:           seq[i].join_assign(iq);
+16535:         }
+16535:       }
+16535:       else {
+16535: 
+16535:         point_seen = true;
+16535: 
+16535: 
+16535: 
+16535:         for (dimension_type i = space_dim; i-- > 0; ) {
+16535:           assign_r(q.get_num(), g.coefficient(Variable(i)), ROUND_NOT_NEEDED);
+16535:           assign_r(q.get_den(), d, ROUND_NOT_NEEDED);
+16535:           q.canonicalize();
+16535:           seq[i].build(i_constraint(EQUAL, q));
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   if (!point_seen) {
+16535: 
+16535:     throw std::invalid_argument("PPL::Box<ITV>::Box(gs):\n"
+16535:                                 "the non-empty generator system gs "
+16535:                                 "contains no points.");
+16535:   }
+16535: 
+16535: 
+16535:   for (Generator_System::const_iterator gs_i = gs_begin;
+16535:        gs_i != gs_end; ++gs_i) {
+16535:     const Generator& g = *gs_i;
+16535:     switch (g.type()) {
+16535:     case Generator::LINE:
+16535:       for (Generator::expr_type::const_iterator i = g.expression().begin(),
+16535:               i_end = g.expression().end();
+16535:               i != i_end; ++i) {
+16535:           seq[i.variable().id()].assign(UNIVERSE);
+16535:       }
+16535:       break;
+16535:     case Generator::RAY:
+16535:       for (Generator::expr_type::const_iterator i = g.expression().begin(),
+16535:               i_end = g.expression().end();
+16535:               i != i_end; ++i) {
+16535:         switch (sgn(*i)) {
+16535:         case 1:
+16535:           seq[i.variable().id()].upper_extend();
+16535:           break;
+16535:         case -1:
+16535:           seq[i.variable().id()].lower_extend();
+16535:           break;
+16535:         default:
+16535:           Parma_Polyhedra_Library::ppl_unreachable();
+16535:           break;
+16535:         }
+16535:       }
+16535:       break;
+16535:     case Generator::CLOSURE_POINT:
+16535:       {
+16535:         const Coefficient& d = g.divisor();
+16535: 
+16535: 
+16535: 
+16535:         for (dimension_type i = space_dim; i-- > 0; ) {
+16535:           assign_r(q.get_num(), g.coefficient(Variable(i)), ROUND_NOT_NEEDED);
+16535:           assign_r(q.get_den(), d, ROUND_NOT_NEEDED);
+16535:           q.canonicalize();
+16535:           ITV& seq_i = seq[i];
+16535:           seq_i.lower_extend(i_constraint(GREATER_THAN, q));
+16535:           seq_i.upper_extend(i_constraint(LESS_THAN, q));
+16535:         }
+16535:       }
+16535:       break;
+16535:     default:
+16535: 
+16535:       break;
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: template <typename T>
+16535: Box<ITV>::Box(const BD_Shape<T>& bds, Complexity_Class)
+16535:   : seq(check_space_dimension_overflow(bds.space_dimension(),
+16535:                                        max_space_dimension(),
+16535:                                        "PPL::Box::",
+16535:                                        "Box(bds)",
+16535:                                        "bds exceeds the maximum "
+16535:                                        "allowed space dimension")),
+16535:     status() {
+16535: 
+16535:   bds.shortest_path_closure_assign();
+16535:   if (bds.marked_empty()) {
+16535:     set_empty();
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   set_empty_up_to_date();
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535:   if (space_dim == 0) {
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535:   typedef typename BD_Shape<T>::coefficient_type Coeff;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Coeff> holder_tmp; Coeff& tmp = holder_tmp.item();
+16535:   const DB_Row<Coeff>& dbm_0 = bds.dbm[0];
+16535:   for (dimension_type i = space_dim; i-- > 0; ) {
+16535:     I_Constraint<Coeff> lower;
+16535:     I_Constraint<Coeff> upper;
+16535:     ITV& seq_i = seq[i];
+16535: 
+16535: 
+16535:     const Coeff& u = dbm_0[i+1];
+16535:     if (!is_plus_infinity(u)) {
+16535:       upper.set(LESS_OR_EQUAL, u, true);
+16535:     }
+16535: 
+16535: 
+16535:     const Coeff& negated_l = bds.dbm[i+1][0];
+16535:     if (!is_plus_infinity(negated_l)) {
+16535:       neg_assign_r(tmp, negated_l, ROUND_DOWN);
+16535:       lower.set(GREATER_OR_EQUAL, tmp);
+16535:     }
+16535: 
+16535:     seq_i.build(lower, upper);
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: template <typename T>
+16535: Box<ITV>::Box(const Octagonal_Shape<T>& oct, Complexity_Class)
+16535:   : seq(check_space_dimension_overflow(oct.space_dimension(),
+16535:                                        max_space_dimension(),
+16535:                                        "PPL::Box::",
+16535:                                        "Box(oct)",
+16535:                                        "oct exceeds the maximum "
+16535:                                        "allowed space dimension")),
+16535:     status() {
+16535: 
+16535:   oct.strong_closure_assign();
+16535:   if (oct.marked_empty()) {
+16535:     set_empty();
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   set_empty_up_to_date();
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535:   if (space_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_lower_bound; mpq_class& lower_bound = holder_lower_bound.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_upper_bound; mpq_class& upper_bound = holder_upper_bound.item();
+16535:   for (dimension_type i = space_dim; i-- > 0; ) {
+16535:     typedef typename Octagonal_Shape<T>::coefficient_type Coeff;
+16535:     I_Constraint<mpq_class> lower;
+16535:     I_Constraint<mpq_class> upper;
+16535:     ITV& seq_i = seq[i];
+16535:     const dimension_type ii = 2*i;
+16535:     const dimension_type cii = ii + 1;
+16535: 
+16535: 
+16535:     const Coeff& twice_ub = oct.matrix[cii][ii];
+16535:     if (!is_plus_infinity(twice_ub)) {
+16535:       assign_r(upper_bound, twice_ub, ROUND_NOT_NEEDED);
+16535:       div_2exp_assign_r(upper_bound, upper_bound, 1, ROUND_NOT_NEEDED);
+16535:       upper.set(LESS_OR_EQUAL, upper_bound);
+16535:     }
+16535: 
+16535: 
+16535:     const Coeff& twice_lb = oct.matrix[ii][cii];
+16535:     if (!is_plus_infinity(twice_lb)) {
+16535:       assign_r(lower_bound, twice_lb, ROUND_NOT_NEEDED);
+16535:       neg_assign_r(lower_bound, lower_bound, ROUND_NOT_NEEDED);
+16535:       div_2exp_assign_r(lower_bound, lower_bound, 1, ROUND_NOT_NEEDED);
+16535:       lower.set(GREATER_OR_EQUAL, lower_bound);
+16535:     }
+16535:     seq_i.build(lower, upper);
+16535:   }
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: Box<ITV>::Box(const Polyhedron& ph, Complexity_Class complexity)
+16535:   : seq(check_space_dimension_overflow(ph.space_dimension(),
+16535:                                        max_space_dimension(),
+16535:                                        "PPL::Box::",
+16535:                                        "Box(ph)",
+16535:                                        "ph exceeds the maximum "
+16535:                                        "allowed space dimension")),
+16535:     status() {
+16535: 
+16535:   set_empty_up_to_date();
+16535: 
+16535: 
+16535: 
+16535:   if (ph.marked_empty()) {
+16535:     set_empty();
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type space_dim = ph.space_dimension();
+16535:   if (space_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   if (ph.generators_are_up_to_date() && !ph.has_pending_constraints()) {
+16535:     Box tmp(ph.generators());
+16535:     m_swap(tmp);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: 
+16535:   if (complexity == POLYNOMIAL_COMPLEXITY) {
+16535: 
+16535:     for (dimension_type i = space_dim; i-- > 0; ) {
+16535:       seq[i].assign(UNIVERSE);
+16535:     }
+16535: 
+16535:     const Constraint_System cs = ph.simplified_constraints();
+16535: 
+16535: 
+16535: 
+16535:     const dimension_type max_iterations = 20;
+16535:     propagate_constraints_no_check(cs, max_iterations);
+16535:   }
+16535:   else if (complexity == SIMPLEX_COMPLEXITY) {
+16535:     MIP_Problem lp(space_dim);
+16535:     const Constraint_System& ph_cs = ph.constraints();
+16535:     if (!ph_cs.has_strict_inequalities()) {
+16535:       lp.add_constraints(ph_cs);
+16535:     }
+16535:     else {
+16535: 
+16535:       for (Constraint_System::const_iterator i = ph_cs.begin(),
+16535:              ph_cs_end = ph_cs.end(); i != ph_cs_end; ++i) {
+16535:         const Constraint& c = *i;
+16535:         if (c.is_strict_inequality()) {
+16535:           const Linear_Expression expr(c.expression());
+16535:           lp.add_constraint(expr >= 0);
+16535:         }
+16535:         else {
+16535:           lp.add_constraint(c);
+16535:         }
+16535:       }
+16535:     }
+16535: 
+16535:     if (!lp.is_satisfiable()) {
+16535:       set_empty();
+16535:       return;
+16535:     }
+16535: 
+16535:     Generator g(point());
+16535:     Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_lower_bound; mpq_class& lower_bound = holder_lower_bound.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_upper_bound; mpq_class& upper_bound = holder_upper_bound.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_bound_numer; Parma_Polyhedra_Library::Coefficient& bound_numer = holder_bound_numer.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_bound_denom; Parma_Polyhedra_Library::Coefficient& bound_denom = holder_bound_denom.item();
+16535:     for (dimension_type i = space_dim; i-- > 0; ) {
+16535:       I_Constraint<mpq_class> lower;
+16535:       I_Constraint<mpq_class> upper;
+16535:       ITV& seq_i = seq[i];
+16535:       lp.set_objective_function(Variable(i));
+16535: 
+16535:       lp.set_optimization_mode(MAXIMIZATION);
+16535:       if (lp.solve() == OPTIMIZED_MIP_PROBLEM) {
+16535:         g = lp.optimizing_point();
+16535:         lp.evaluate_objective_function(g, bound_numer, bound_denom);
+16535:         assign_r(upper_bound.get_num(), bound_numer, ROUND_NOT_NEEDED);
+16535:         assign_r(upper_bound.get_den(), bound_denom, ROUND_NOT_NEEDED);
+16535:         ((void) 0);
+16535:         upper.set(LESS_OR_EQUAL, upper_bound);
+16535:       }
+16535: 
+16535:       lp.set_optimization_mode(MINIMIZATION);
+16535:       if (lp.solve() == OPTIMIZED_MIP_PROBLEM) {
+16535:         g = lp.optimizing_point();
+16535:         lp.evaluate_objective_function(g, bound_numer, bound_denom);
+16535:         assign_r(lower_bound.get_num(), bound_numer, ROUND_NOT_NEEDED);
+16535:         assign_r(lower_bound.get_den(), bound_denom, ROUND_NOT_NEEDED);
+16535:         ((void) 0);
+16535:         lower.set(GREATER_OR_EQUAL, lower_bound);
+16535:       }
+16535:       seq_i.build(lower, upper);
+16535:     }
+16535:   }
+16535:   else {
+16535:     ((void) 0);
+16535:     if (ph.is_empty()) {
+16535:       set_empty();
+16535:     }
+16535:     else {
+16535:       Box tmp(ph.generators());
+16535:       m_swap(tmp);
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: Box<ITV>::Box(const Grid& gr, Complexity_Class)
+16535:   : seq(check_space_dimension_overflow(gr.space_dimension(),
+16535:                                        max_space_dimension(),
+16535:                                        "PPL::Box::",
+16535:                                        "Box(gr)",
+16535:                                        "gr exceeds the maximum "
+16535:                                        "allowed space dimension")),
+16535:     status() {
+16535: 
+16535:   if (gr.marked_empty()) {
+16535:     set_empty();
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   set_empty_up_to_date();
+16535: 
+16535:   const dimension_type space_dim = gr.space_dimension();
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535:   if (!gr.generators_are_up_to_date() && !gr.update_generators()) {
+16535: 
+16535:     set_empty();
+16535:     return;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_bound; mpq_class& bound = holder_bound.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_bound_numer; Parma_Polyhedra_Library::Coefficient& bound_numer = holder_bound_numer.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_bound_denom; Parma_Polyhedra_Library::Coefficient& bound_denom = holder_bound_denom.item();
+16535:   for (dimension_type i = space_dim; i-- > 0; ) {
+16535:     ITV& seq_i = seq[i];
+16535:     Variable var(i);
+16535:     bool max;
+16535:     if (gr.maximize(var, bound_numer, bound_denom, max)) {
+16535:       assign_r(bound.get_num(), bound_numer, ROUND_NOT_NEEDED);
+16535:       assign_r(bound.get_den(), bound_denom, ROUND_NOT_NEEDED);
+16535:       bound.canonicalize();
+16535:       seq_i.build(i_constraint(EQUAL, bound));
+16535:     }
+16535:     else {
+16535:       seq_i.assign(UNIVERSE);
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: template <typename D1, typename D2, typename R>
+16535: Box<ITV>::Box(const Partially_Reduced_Product<D1, D2, R>& dp,
+16535:               Complexity_Class complexity)
+16535:   : seq(), status() {
+16535:   check_space_dimension_overflow(dp.space_dimension(),
+16535:                                  max_space_dimension(),
+16535:                                  "PPL::Box::",
+16535:                                  "Box(dp)",
+16535:                                  "dp exceeds the maximum "
+16535:                                  "allowed space dimension");
+16535:   Box tmp1(dp.domain1(), complexity);
+16535:   Box tmp2(dp.domain2(), complexity);
+16535:   tmp1.intersection_assign(tmp2);
+16535:   m_swap(tmp1);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::add_space_dimensions_and_embed(const dimension_type m) {
+16535: 
+16535:   if (m == 0) {
+16535:     return;
+16535:   }
+16535:   check_space_dimension_overflow(m, max_space_dimension() - space_dimension(),
+16535:                                  "PPL::Box::",
+16535:                                  "add_space_dimensions_and_embed(m)",
+16535:                                  "adding m new space dimensions exceeds "
+16535:                                  "the maximum allowed space dimension");
+16535: 
+16535: 
+16535:   seq.insert(seq.end(), m, ITV(UNIVERSE));
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::add_space_dimensions_and_project(const dimension_type m) {
+16535: 
+16535:   if (m == 0) {
+16535:     return;
+16535:   }
+16535:   check_space_dimension_overflow(m, max_space_dimension() - space_dimension(),
+16535:                                  "PPL::Box::",
+16535:                                  "add_space_dimensions_and_project(m)",
+16535:                                  "adding m new space dimensions exceeds "
+16535:                                  "the maximum allowed space dimension");
+16535: 
+16535:   seq.insert(seq.end(), m, ITV(0));
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: bool
+16535: operator==(const Box<ITV>& x, const Box<ITV>& y) {
+16535:   const dimension_type x_space_dim = x.space_dimension();
+16535:   if (x_space_dim != y.space_dimension()) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (x.is_empty()) {
+16535:     return y.is_empty();
+16535:   }
+16535: 
+16535:   if (y.is_empty()) {
+16535:     return x.is_empty();
+16535:   }
+16535: 
+16535:   for (dimension_type k = x_space_dim; k-- > 0; ) {
+16535:     if (x.seq[k] != y.seq[k]) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: bool
+16535: Box<ITV>::bounds(const Linear_Expression& expr, const bool from_above) const {
+16535: 
+16535:   const dimension_type expr_space_dim = expr.space_dimension();
+16535:   const dimension_type space_dim = space_dimension();
+16535:   if (space_dim < expr_space_dim) {
+16535:     throw_dimension_incompatible((from_above
+16535:                                   ? "bounds_from_above(e)"
+16535:                                   : "bounds_from_below(e)"), "e", expr);
+16535:   }
+16535: 
+16535:   if (space_dim == 0 || is_empty()) {
+16535:     return true;
+16535:   }
+16535:   const int from_above_sign = from_above ? 1 : -1;
+16535: 
+16535: 
+16535:   for (Linear_Expression::const_iterator i = expr.begin(),
+16535:           i_end = expr.end(); i != i_end; ++i) {
+16535:     const Variable v = i.variable();
+16535:     switch (sgn(*i) * from_above_sign) {
+16535:     case 1:
+16535:       if (seq[v.id()].upper_is_boundary_infinity()) {
+16535:         return false;
+16535:       }
+16535:       break;
+16535:     case 0:
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       break;
+16535:     case -1:
+16535:       if (seq[v.id()].lower_is_boundary_infinity()) {
+16535:         return false;
+16535:       }
+16535:       break;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: Poly_Con_Relation
+16535: interval_relation(const ITV& i,
+16535:                   const Constraint::Type constraint_type,
+16535:                   Coefficient_traits::const_reference numer,
+16535:                   Coefficient_traits::const_reference denom) {
+16535: 
+16535:   if (i.is_universe()) {
+16535:     return Poly_Con_Relation::strictly_intersects();
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_bound; mpq_class& bound = holder_bound.item();
+16535:   assign_r(bound.get_num(), numer, ROUND_NOT_NEEDED);
+16535:   assign_r(bound.get_den(), denom, ROUND_NOT_NEEDED);
+16535:   bound.canonicalize();
+16535:   neg_assign_r(bound, bound, ROUND_NOT_NEEDED);
+16535:   const bool is_lower_bound = (denom > 0);
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_bound_diff; mpq_class& bound_diff = holder_bound_diff.item();
+16535:   if (constraint_type == Constraint::EQUALITY) {
+16535:     if (i.lower_is_boundary_infinity()) {
+16535:       ((void) 0);
+16535:       assign_r(bound_diff, i.upper(), ROUND_NOT_NEEDED);
+16535:       sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED);
+16535:       switch (sgn(bound_diff)) {
+16535:       case 1:
+16535:         return Poly_Con_Relation::strictly_intersects();
+16535:       case 0:
+16535:         return i.upper_is_open()
+16535:           ? Poly_Con_Relation::is_disjoint()
+16535:           : Poly_Con_Relation::strictly_intersects();
+16535:       case -1:
+16535:         return Poly_Con_Relation::is_disjoint();
+16535:       }
+16535:     }
+16535:     else {
+16535:       assign_r(bound_diff, i.lower(), ROUND_NOT_NEEDED);
+16535:       sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED);
+16535:       switch (sgn(bound_diff)) {
+16535:       case 1:
+16535:         return Poly_Con_Relation::is_disjoint();
+16535:       case 0:
+16535:         if (i.lower_is_open()) {
+16535:           return Poly_Con_Relation::is_disjoint();
+16535:         }
+16535:         if (i.is_singleton()) {
+16535:           return Poly_Con_Relation::is_included()
+16535:             && Poly_Con_Relation::saturates();
+16535:         }
+16535:         return Poly_Con_Relation::strictly_intersects();
+16535:       case -1:
+16535:         if (i.upper_is_boundary_infinity()) {
+16535:           return Poly_Con_Relation::strictly_intersects();
+16535:         }
+16535:         else {
+16535:           assign_r(bound_diff, i.upper(), ROUND_NOT_NEEDED);
+16535:           sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED);
+16535:           switch (sgn(bound_diff)) {
+16535:           case 1:
+16535:             return Poly_Con_Relation::strictly_intersects();
+16535:           case 0:
+16535:             if (i.upper_is_open()) {
+16535:               return Poly_Con_Relation::is_disjoint();
+16535:             }
+16535:             else {
+16535:               return Poly_Con_Relation::strictly_intersects();
+16535:             }
+16535:           case -1:
+16535:             return Poly_Con_Relation::is_disjoint();
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   if (is_lower_bound) {
+16535:     if (i.lower_is_boundary_infinity()) {
+16535:       ((void) 0);
+16535:       assign_r(bound_diff, i.upper(), ROUND_NOT_NEEDED);
+16535:       sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED);
+16535:       switch (sgn(bound_diff)) {
+16535:       case 1:
+16535:         return Poly_Con_Relation::strictly_intersects();
+16535:       case 0:
+16535:         if (constraint_type == Constraint::STRICT_INEQUALITY
+16535:             || i.upper_is_open()) {
+16535:           return Poly_Con_Relation::is_disjoint();
+16535:         }
+16535:         else {
+16535:           return Poly_Con_Relation::strictly_intersects();
+16535:         }
+16535:       case -1:
+16535:         return Poly_Con_Relation::is_disjoint();
+16535:       }
+16535:     }
+16535:     else {
+16535:       assign_r(bound_diff, i.lower(), ROUND_NOT_NEEDED);
+16535:       sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED);
+16535:       switch (sgn(bound_diff)) {
+16535:       case 1:
+16535:         return Poly_Con_Relation::is_included();
+16535:       case 0:
+16535:         if (constraint_type == Constraint::NONSTRICT_INEQUALITY
+16535:             || i.lower_is_open()) {
+16535:           Poly_Con_Relation result = Poly_Con_Relation::is_included();
+16535:           if (i.is_singleton()) {
+16535:             result = result && Poly_Con_Relation::saturates();
+16535:           }
+16535:           return result;
+16535:         }
+16535:         else {
+16535:           ((void) 0)
+16535:                                        ;
+16535:           if (i.is_singleton()) {
+16535:             return Poly_Con_Relation::is_disjoint()
+16535:               && Poly_Con_Relation::saturates();
+16535:           }
+16535:           else {
+16535:             return Poly_Con_Relation::strictly_intersects();
+16535:           }
+16535:         }
+16535:       case -1:
+16535:         if (i.upper_is_boundary_infinity()) {
+16535:           return Poly_Con_Relation::strictly_intersects();
+16535:         }
+16535:         else {
+16535:           assign_r(bound_diff, i.upper(), ROUND_NOT_NEEDED);
+16535:           sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED);
+16535:           switch (sgn(bound_diff)) {
+16535:           case 1:
+16535:             return Poly_Con_Relation::strictly_intersects();
+16535:           case 0:
+16535:             if (constraint_type == Constraint::STRICT_INEQUALITY
+16535:                 || i.upper_is_open()) {
+16535:               return Poly_Con_Relation::is_disjoint();
+16535:             }
+16535:             else {
+16535:               return Poly_Con_Relation::strictly_intersects();
+16535:             }
+16535:           case -1:
+16535:             return Poly_Con_Relation::is_disjoint();
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535:   else {
+16535: 
+16535:     if (i.upper_is_boundary_infinity()) {
+16535:       return Poly_Con_Relation::strictly_intersects();
+16535:     }
+16535:     else {
+16535:       assign_r(bound_diff, i.upper(), ROUND_NOT_NEEDED);
+16535:       sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED);
+16535:       switch (sgn(bound_diff)) {
+16535:       case -1:
+16535:         return Poly_Con_Relation::is_included();
+16535:       case 0:
+16535:         if (constraint_type == Constraint::NONSTRICT_INEQUALITY
+16535:             || i.upper_is_open()) {
+16535:           Poly_Con_Relation result = Poly_Con_Relation::is_included();
+16535:           if (i.is_singleton()) {
+16535:             result = result && Poly_Con_Relation::saturates();
+16535:           }
+16535:           return result;
+16535:         }
+16535:         else {
+16535:           ((void) 0)
+16535:                                        ;
+16535:           if (i.is_singleton()) {
+16535:             return Poly_Con_Relation::is_disjoint()
+16535:               && Poly_Con_Relation::saturates();
+16535:           }
+16535:           else {
+16535:             return Poly_Con_Relation::strictly_intersects();
+16535:           }
+16535:         }
+16535:       case 1:
+16535:         if (i.lower_is_boundary_infinity()) {
+16535:           return Poly_Con_Relation::strictly_intersects();
+16535:         }
+16535:         else {
+16535:           assign_r(bound_diff, i.lower(), ROUND_NOT_NEEDED);
+16535:           sub_assign_r(bound_diff, bound_diff, bound, ROUND_NOT_NEEDED);
+16535:           switch (sgn(bound_diff)) {
+16535:           case -1:
+16535:             return Poly_Con_Relation::strictly_intersects();
+16535:           case 0:
+16535:             if (constraint_type == Constraint::STRICT_INEQUALITY
+16535:                 || i.lower_is_open()) {
+16535:               return Poly_Con_Relation::is_disjoint();
+16535:             }
+16535:             else {
+16535:               return Poly_Con_Relation::strictly_intersects();
+16535:             }
+16535:           case 1:
+16535:             return Poly_Con_Relation::is_disjoint();
+16535:           }
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::ppl_unreachable();
+16535:   return Poly_Con_Relation::nothing();
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: Poly_Con_Relation
+16535: Box<ITV>::relation_with(const Congruence& cg) const {
+16535:   const dimension_type cg_space_dim = cg.space_dimension();
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535: 
+16535:   if (cg_space_dim > space_dim) {
+16535:     throw_dimension_incompatible("relation_with(cg)", cg);
+16535:   }
+16535:   if (is_empty()) {
+16535:     return Poly_Con_Relation::saturates()
+16535:       && Poly_Con_Relation::is_included()
+16535:       && Poly_Con_Relation::is_disjoint();
+16535:   }
+16535: 
+16535:   if (space_dim == 0) {
+16535:     if (cg.is_inconsistent()) {
+16535:       return Poly_Con_Relation::is_disjoint();
+16535:     }
+16535:     else {
+16535:       return Poly_Con_Relation::saturates()
+16535:         && Poly_Con_Relation::is_included();
+16535:     }
+16535:   }
+16535: 
+16535:   if (cg.is_equality()) {
+16535:     const Constraint c(cg);
+16535:     return relation_with(c);
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Rational_Interval> holder_r; Rational_Interval& r = holder_r.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Rational_Interval> holder_t; Rational_Interval& t = holder_t.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_m; mpq_class& m = holder_m.item();
+16535:   r = 0;
+16535:   for (Congruence::expr_type::const_iterator i = cg.expression().begin(),
+16535:       i_end = cg.expression().end(); i != i_end; ++i) {
+16535:     const Coefficient& cg_i = *i;
+16535:     const Variable v = i.variable();
+16535:     assign_r(m, cg_i, ROUND_NOT_NEEDED);
+16535: 
+16535:     t.build(seq[v.id()].lower_constraint(), seq[v.id()].upper_constraint());
+16535:     t *= m;
+16535:     r += t;
+16535:   }
+16535: 
+16535:   if (r.lower_is_boundary_infinity() || r.upper_is_boundary_infinity()) {
+16535:     return Poly_Con_Relation::strictly_intersects();
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_lower; Parma_Polyhedra_Library::Coefficient& lower = holder_lower.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_mod; Parma_Polyhedra_Library::Coefficient& mod = holder_mod.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_v; Parma_Polyhedra_Library::Coefficient& v = holder_v.item();
+16535:   mod = cg.modulus();
+16535:   v = cg.inhomogeneous_term() % mod;
+16535:   assign_r(lower, r.lower(), ROUND_DOWN);
+16535:   v -= ((lower / mod) * mod);
+16535:   if (v + lower > 0) {
+16535:     v -= mod;
+16535:   }
+16535:   return interval_relation(r, Constraint::EQUALITY, v);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: Poly_Con_Relation
+16535: Box<ITV>::relation_with(const Constraint& c) const {
+16535:   const dimension_type c_space_dim = c.space_dimension();
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535: 
+16535:   if (c_space_dim > space_dim) {
+16535:     throw_dimension_incompatible("relation_with(c)", c);
+16535:   }
+16535: 
+16535:   if (is_empty()) {
+16535:     return Poly_Con_Relation::saturates()
+16535:       && Poly_Con_Relation::is_included()
+16535:       && Poly_Con_Relation::is_disjoint();
+16535:   }
+16535: 
+16535:   if (space_dim == 0) {
+16535:     if ((c.is_equality() && c.inhomogeneous_term() != 0)
+16535:         || (c.is_inequality() && c.inhomogeneous_term() < 0)) {
+16535:       return Poly_Con_Relation::is_disjoint();
+16535:     }
+16535:     else if (c.is_strict_inequality() && c.inhomogeneous_term() == 0) {
+16535: 
+16535: 
+16535:       return Poly_Con_Relation::saturates()
+16535:         && Poly_Con_Relation::is_disjoint();
+16535:     }
+16535:     else if (c.is_equality() || c.inhomogeneous_term() == 0) {
+16535:       return Poly_Con_Relation::saturates()
+16535:         && Poly_Con_Relation::is_included();
+16535:     }
+16535:     else {
+16535: 
+16535: 
+16535: 
+16535:       return Poly_Con_Relation::is_included();
+16535:     }
+16535:   }
+16535: 
+16535:   dimension_type c_num_vars = 0;
+16535:   dimension_type c_only_var = 0;
+16535: 
+16535:   if (Box_Helpers::extract_interval_constraint(c, c_num_vars, c_only_var)) {
+16535:     if (c_num_vars == 0) {
+16535: 
+16535:       switch (sgn(c.inhomogeneous_term())) {
+16535:       case -1:
+16535:         return Poly_Con_Relation::is_disjoint();
+16535:       case 0:
+16535:         if (c.is_strict_inequality()) {
+16535:           return Poly_Con_Relation::saturates()
+16535:             && Poly_Con_Relation::is_disjoint();
+16535:         }
+16535:         else {
+16535:           return Poly_Con_Relation::saturates()
+16535:             && Poly_Con_Relation::is_included();
+16535:         }
+16535:       case 1:
+16535:         return Poly_Con_Relation::is_included();
+16535:       }
+16535:     }
+16535:     else {
+16535: 
+16535:       return interval_relation(seq[c_only_var],
+16535:                                c.type(),
+16535:                                c.inhomogeneous_term(),
+16535:                                c.coefficient(Variable(c_only_var)));
+16535:     }
+16535:   }
+16535:   else {
+16535: 
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Rational_Interval> holder_r; Rational_Interval& r = holder_r.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Rational_Interval> holder_t; Rational_Interval& t = holder_t.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_m; mpq_class& m = holder_m.item();
+16535:     r = 0;
+16535:     const Constraint::expr_type& e = c.expression();
+16535:     for (Constraint::expr_type::const_iterator i = e.begin(), i_end = e.end();
+16535:           i != i_end; ++i) {
+16535:       assign_r(m, *i, ROUND_NOT_NEEDED);
+16535:       const Variable v = i.variable();
+16535: 
+16535:       t.build(seq[v.id()].lower_constraint(), seq[v.id()].upper_constraint());
+16535:       t *= m;
+16535:       r += t;
+16535:     }
+16535:     return interval_relation(r,
+16535:                              c.type(),
+16535:                              c.inhomogeneous_term());
+16535:   }
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::ppl_unreachable();
+16535:   return Poly_Con_Relation::nothing();
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: Poly_Gen_Relation
+16535: Box<ITV>::relation_with(const Generator& g) const {
+16535:   const dimension_type space_dim = space_dimension();
+16535:   const dimension_type g_space_dim = g.space_dimension();
+16535: 
+16535: 
+16535:   if (space_dim < g_space_dim) {
+16535:     throw_dimension_incompatible("relation_with(g)", g);
+16535:   }
+16535: 
+16535: 
+16535:   if (is_empty()) {
+16535:     return Poly_Gen_Relation::nothing();
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return Poly_Gen_Relation::subsumes();
+16535:   }
+16535: 
+16535:   if (g.is_line_or_ray()) {
+16535:     if (g.is_line()) {
+16535:       const Generator::expr_type& e = g.expression();
+16535:       for (Generator::expr_type::const_iterator i = e.begin(), i_end = e.end();
+16535:            i != i_end; ++i) {
+16535:         if (!seq[i.variable().id()].is_universe()) {
+16535:           return Poly_Gen_Relation::nothing();
+16535:         }
+16535:       }
+16535:       return Poly_Gen_Relation::subsumes();
+16535:     }
+16535:     else {
+16535:       ((void) 0);
+16535:       const Generator::expr_type& e = g.expression();
+16535:       for (Generator::expr_type::const_iterator i = e.begin(), i_end = e.end();
+16535:            i != i_end; ++i) {
+16535:         const Variable v = i.variable();
+16535:         switch (sgn(*i)) {
+16535:         case 1:
+16535:           if (!seq[v.id()].upper_is_boundary_infinity()) {
+16535:             return Poly_Gen_Relation::nothing();
+16535:           }
+16535:           break;
+16535:         case 0:
+16535:           Parma_Polyhedra_Library::ppl_unreachable();
+16535:           break;
+16535:         case -1:
+16535:           if (!seq[v.id()].lower_is_boundary_infinity()) {
+16535:             return Poly_Gen_Relation::nothing();
+16535:           }
+16535:           break;
+16535:         }
+16535:       }
+16535:       return Poly_Gen_Relation::subsumes();
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   const Coefficient& g_divisor = g.divisor();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_g_coord; mpq_class& g_coord = holder_g_coord.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_bound; mpq_class& bound = holder_bound.item();
+16535: 
+16535: 
+16535: 
+16535:   for (dimension_type i = g_space_dim; i-- > 0; ) {
+16535:     const ITV& seq_i = seq[i];
+16535:     if (seq_i.is_universe()) {
+16535:       continue;
+16535:     }
+16535:     assign_r(g_coord.get_num(), g.coefficient(Variable(i)), ROUND_NOT_NEEDED);
+16535:     assign_r(g_coord.get_den(), g_divisor, ROUND_NOT_NEEDED);
+16535:     g_coord.canonicalize();
+16535: 
+16535:     if (!seq_i.lower_is_boundary_infinity()) {
+16535:       assign_r(bound, seq_i.lower(), ROUND_NOT_NEEDED);
+16535:       if (g_coord <= bound) {
+16535:         if (seq_i.lower_is_open()) {
+16535:           if (g.is_point() || g_coord != bound) {
+16535:             return Poly_Gen_Relation::nothing();
+16535:           }
+16535:         }
+16535:         else if (g_coord != bound) {
+16535:           return Poly_Gen_Relation::nothing();
+16535:         }
+16535:       }
+16535:     }
+16535: 
+16535:     if (!seq_i.upper_is_boundary_infinity()) {
+16535:       assign_r(bound, seq_i.upper(), ROUND_NOT_NEEDED);
+16535:       if (g_coord >= bound) {
+16535:         if (seq_i.upper_is_open()) {
+16535:           if (g.is_point() || g_coord != bound) {
+16535:             return Poly_Gen_Relation::nothing();
+16535:           }
+16535:         }
+16535:         else if (g_coord != bound) {
+16535:           return Poly_Gen_Relation::nothing();
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535:   return Poly_Gen_Relation::subsumes();
+16535: }
+16535: 
+16535: 
+16535: template <typename ITV>
+16535: bool
+16535: Box<ITV>::max_min(const Linear_Expression& expr,
+16535:                   const bool maximize,
+16535:                   Coefficient& ext_n, Coefficient& ext_d,
+16535:                   bool& included) const {
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535:   const dimension_type expr_space_dim = expr.space_dimension();
+16535:   if (space_dim < expr_space_dim) {
+16535:     throw_dimension_incompatible((maximize
+16535:                                   ? "maximize(e, ...)"
+16535:                                   : "minimize(e, ...)"), "e", expr);
+16535:   }
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     if (marked_empty()) {
+16535:       return false;
+16535:     }
+16535:     else {
+16535:       ext_n = expr.inhomogeneous_term();
+16535:       ext_d = 1;
+16535:       included = true;
+16535:       return true;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   if (is_empty()) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_result; mpq_class& result = holder_result.item();
+16535:   assign_r(result, expr.inhomogeneous_term(), ROUND_NOT_NEEDED);
+16535:   bool is_included = true;
+16535:   const int maximize_sign = maximize ? 1 : -1;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_bound_i; mpq_class& bound_i = holder_bound_i.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_expr_i; mpq_class& expr_i = holder_expr_i.item();
+16535:   for (Linear_Expression::const_iterator i = expr.begin(),
+16535:           i_end = expr.end(); i != i_end; ++i) {
+16535:     const ITV& seq_i = seq[i.variable().id()];
+16535:     assign_r(expr_i, *i, ROUND_NOT_NEEDED);
+16535:     switch (sgn(expr_i) * maximize_sign) {
+16535:     case 1:
+16535:       if (seq_i.upper_is_boundary_infinity()) {
+16535:         return false;
+16535:       }
+16535:       assign_r(bound_i, seq_i.upper(), ROUND_NOT_NEEDED);
+16535:       add_mul_assign_r(result, bound_i, expr_i, ROUND_NOT_NEEDED);
+16535:       if (seq_i.upper_is_open()) {
+16535:         is_included = false;
+16535:       }
+16535:       break;
+16535:     case 0:
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       break;
+16535:     case -1:
+16535:       if (seq_i.lower_is_boundary_infinity()) {
+16535:         return false;
+16535:       }
+16535:       assign_r(bound_i, seq_i.lower(), ROUND_NOT_NEEDED);
+16535:       add_mul_assign_r(result, bound_i, expr_i, ROUND_NOT_NEEDED);
+16535:       if (seq_i.lower_is_open()) {
+16535:         is_included = false;
+16535:       }
+16535:       break;
+16535:     }
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   ext_n = result.get_num();
+16535:   ext_d = result.get_den();
+16535:   included = is_included;
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: bool
+16535: Box<ITV>::max_min(const Linear_Expression& expr,
+16535:                   const bool maximize,
+16535:                   Coefficient& ext_n, Coefficient& ext_d,
+16535:                   bool& included,
+16535:                   Generator& g) const {
+16535:   if (!max_min(expr, maximize, ext_n, ext_d, included)) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   Linear_Expression g_expr;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_g_divisor; Parma_Polyhedra_Library::Coefficient& g_divisor = holder_g_divisor.item();
+16535:   g_divisor = 1;
+16535:   const int maximize_sign = maximize ? 1 : -1;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_g_coord; mpq_class& g_coord = holder_g_coord.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_lcm; Parma_Polyhedra_Library::Coefficient& lcm = holder_lcm.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_factor; Parma_Polyhedra_Library::Coefficient& factor = holder_factor.item();
+16535: 
+16535: 
+16535:   for (dimension_type i = space_dimension(); i-- > 0; ) {
+16535:     const ITV& seq_i = seq[i];
+16535:     switch (sgn(expr.coefficient(Variable(i))) * maximize_sign) {
+16535:     case 1:
+16535:       assign_r(g_coord, seq_i.upper(), ROUND_NOT_NEEDED);
+16535:       break;
+16535:     case 0:
+16535: 
+16535: 
+16535: 
+16535:       if (seq_i.contains(0)) {
+16535:         continue;
+16535:       }
+16535:       if (!seq_i.lower_is_boundary_infinity()) {
+16535:         if (seq_i.lower_is_open()) {
+16535:           if (!seq_i.upper_is_boundary_infinity()) {
+16535:             if (seq_i.upper_is_open()) {
+16535: 
+16535:               assign_r(g_coord, seq_i.lower(), ROUND_NOT_NEEDED);
+16535:               Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_seq_i_upper; mpq_class& q_seq_i_upper = holder_q_seq_i_upper.item();
+16535:               assign_r(q_seq_i_upper, seq_i.upper(), ROUND_NOT_NEEDED);
+16535:               g_coord += q_seq_i_upper;
+16535:               g_coord /= 2;
+16535:             }
+16535:             else {
+16535: 
+16535:               assign_r(g_coord, seq_i.upper(), ROUND_NOT_NEEDED);
+16535:             }
+16535:           }
+16535:           else {
+16535: 
+16535:             assign_r(g_coord, seq_i.lower(), ROUND_NOT_NEEDED);
+16535:             ++g_coord;
+16535:           }
+16535:         }
+16535:         else {
+16535: 
+16535:           assign_r(g_coord, seq_i.lower(), ROUND_NOT_NEEDED);
+16535:         }
+16535:       }
+16535:       else {
+16535: 
+16535: 
+16535:         ((void) 0);
+16535:         assign_r(g_coord, seq_i.upper(), ROUND_NOT_NEEDED);
+16535:         if (seq_i.upper_is_open()) {
+16535:           --g_coord;
+16535:         }
+16535:       }
+16535:       break;
+16535:     case -1:
+16535:       assign_r(g_coord, seq_i.lower(), ROUND_NOT_NEEDED);
+16535:       break;
+16535:     }
+16535: 
+16535:     assign_r(denom, g_coord.get_den(), ROUND_NOT_NEEDED);
+16535:     lcm_assign(lcm, g_divisor, denom);
+16535:     exact_div_assign(factor, lcm, g_divisor);
+16535:     g_expr *= factor;
+16535:     exact_div_assign(factor, lcm, denom);
+16535:     assign_r(numer, g_coord.get_num(), ROUND_NOT_NEEDED);
+16535:     numer *= factor;
+16535:     g_expr += numer * Variable(i);
+16535:     g_divisor = lcm;
+16535:   }
+16535:   g = Generator::point(g_expr, g_divisor);
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: bool
+16535: Box<ITV>::contains(const Box& y) const {
+16535:   const Box& x = *this;
+16535: 
+16535:   if (x.space_dimension() != y.space_dimension()) {
+16535:     x.throw_dimension_incompatible("contains(y)", y);
+16535:   }
+16535: 
+16535: 
+16535:   if (y.is_empty()) {
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   if (x.is_empty()) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   for (dimension_type k = x.seq.size(); k-- > 0; ) {
+16535: 
+16535:     if (!x.seq[k].contains(y.seq[k])) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: bool
+16535: Box<ITV>::is_disjoint_from(const Box& y) const {
+16535:   const Box& x = *this;
+16535: 
+16535:   if (x.space_dimension() != y.space_dimension()) {
+16535:     x.throw_dimension_incompatible("is_disjoint_from(y)", y);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (x.marked_empty() || y.marked_empty()) {
+16535:     return true;
+16535:   }
+16535: 
+16535:   for (dimension_type k = x.seq.size(); k-- > 0; ) {
+16535: 
+16535:     if (x.seq[k].is_disjoint_from(y.seq[k])) {
+16535:       return true;
+16535:     }
+16535:   }
+16535:   return false;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline bool
+16535: Box<ITV>::upper_bound_assign_if_exact(const Box& y) {
+16535:   Box& x = *this;
+16535: 
+16535: 
+16535:   if (x.space_dimension() != y.space_dimension()) {
+16535:     x.throw_dimension_incompatible("upper_bound_assign_if_exact(y)", y);
+16535:   }
+16535: 
+16535: 
+16535:   if (y.is_empty()) {
+16535:     return true;
+16535:   }
+16535:   if (x.is_empty()) {
+16535:     x = y;
+16535:     return true;
+16535:   }
+16535: 
+16535:   bool x_j_does_not_contain_y_j = false;
+16535:   bool y_j_does_not_contain_x_j = false;
+16535: 
+16535:   for (dimension_type i = x.seq.size(); i-- > 0; ) {
+16535:     const ITV& x_seq_i = x.seq[i];
+16535:     const ITV& y_seq_i = y.seq[i];
+16535: 
+16535:     if (!x_seq_i.can_be_exactly_joined_to(y_seq_i)) {
+16535:       return false;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     bool y_i_does_not_contain_x_i = !y_seq_i.contains(x_seq_i);
+16535:     if (y_i_does_not_contain_x_i && x_j_does_not_contain_y_j) {
+16535:       return false;
+16535:     }
+16535:     if (!x_seq_i.contains(y_seq_i)) {
+16535:       if (y_j_does_not_contain_x_j) {
+16535:         return false;
+16535:       }
+16535:       else {
+16535:         x_j_does_not_contain_y_j = true;
+16535:       }
+16535:     }
+16535:     if (y_i_does_not_contain_x_i) {
+16535:       y_j_does_not_contain_x_j = true;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   for (dimension_type k = x.seq.size(); k-- > 0; ) {
+16535:     x.seq[k].join_assign(y.seq[k]);
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: bool
+16535: Box<ITV>::OK() const {
+16535:   if (status.test_empty_up_to_date() && !status.test_empty()) {
+16535:     Box tmp = *this;
+16535:     tmp.reset_empty_up_to_date();
+16535:     if (tmp.check_empty()) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       return false;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   if (!marked_empty()) {
+16535:     for (dimension_type k = seq.size(); k-- > 0; ) {
+16535:       if (!seq[k].OK()) {
+16535:         return false;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: dimension_type
+16535: Box<ITV>::affine_dimension() const {
+16535:   dimension_type d = space_dimension();
+16535: 
+16535:   if (d == 0) {
+16535:     return 0;
+16535:   }
+16535: 
+16535: 
+16535:   if (is_empty()) {
+16535:     return 0;
+16535:   }
+16535: 
+16535:   for (dimension_type k = d; k-- > 0; ) {
+16535:     if (seq[k].is_singleton()) {
+16535:       --d;
+16535:     }
+16535:   }
+16535: 
+16535:   return d;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: bool
+16535: Box<ITV>::check_empty() const {
+16535:   ((void) 0);
+16535:   Box<ITV>& x = const_cast<Box<ITV>&>(*this);
+16535:   for (dimension_type k = seq.size(); k-- > 0; ) {
+16535:     if (seq[k].is_empty()) {
+16535:       x.set_empty();
+16535:       return true;
+16535:     }
+16535:   }
+16535:   x.set_nonempty();
+16535:   return false;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: bool
+16535: Box<ITV>::is_universe() const {
+16535:   if (marked_empty()) {
+16535:     return false;
+16535:   }
+16535:   for (dimension_type k = seq.size(); k-- > 0; ) {
+16535:     if (!seq[k].is_universe()) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: bool
+16535: Box<ITV>::is_topologically_closed() const {
+16535:   if (ITV::is_always_topologically_closed() || is_empty()) {
+16535:     return true;
+16535:   }
+16535: 
+16535:   for (dimension_type k = seq.size(); k-- > 0; ) {
+16535:     if (!seq[k].is_topologically_closed()) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: bool
+16535: Box<ITV>::is_discrete() const {
+16535:   if (is_empty()) {
+16535:     return true;
+16535:   }
+16535:   for (dimension_type k = seq.size(); k-- > 0; ) {
+16535:     if (!seq[k].is_singleton()) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: bool
+16535: Box<ITV>::is_bounded() const {
+16535:   if (is_empty()) {
+16535:     return true;
+16535:   }
+16535:   for (dimension_type k = seq.size(); k-- > 0; ) {
+16535:     if (!seq[k].is_bounded()) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: bool
+16535: Box<ITV>::contains_integer_point() const {
+16535:   if (marked_empty()) {
+16535:     return false;
+16535:   }
+16535:   for (dimension_type k = seq.size(); k-- > 0; ) {
+16535:     if (!seq[k].contains_integer_point()) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: bool
+16535: Box<ITV>::frequency(const Linear_Expression& expr,
+16535:                   Coefficient& freq_n, Coefficient& freq_d,
+16535:                   Coefficient& val_n, Coefficient& val_d) const {
+16535:   dimension_type space_dim = space_dimension();
+16535: 
+16535:   if (space_dim < expr.space_dimension()) {
+16535:     throw_dimension_incompatible("frequency(e, ...)", "e", expr);
+16535:   }
+16535: # 1552 "../../src/Box_templates.hh"
+16535:   if (space_dim == 0) {
+16535:     if (is_empty()) {
+16535:       return false;
+16535:     }
+16535:     freq_n = 0;
+16535:     freq_d = 1;
+16535:     val_n = expr.inhomogeneous_term();
+16535:     val_d = 1;
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   if (is_empty()) {
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer; Parma_Polyhedra_Library::Coefficient& numer = holder_numer.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_tmp; mpq_class& tmp = holder_tmp.item();
+16535:   Coefficient c = expr.inhomogeneous_term();
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_val_denom; Parma_Polyhedra_Library::Coefficient& val_denom = holder_val_denom.item();
+16535:   val_denom = 1;
+16535: 
+16535:   for (Linear_Expression::const_iterator i = expr.begin(), i_end = expr.end();
+16535:        i != i_end; ++i) {
+16535:     const ITV& seq_i = seq[i.variable().id()];
+16535: 
+16535:     if (seq_i.is_singleton()) {
+16535: 
+16535:       assign_r(tmp, seq_i.lower(), ROUND_NOT_NEEDED);
+16535:       numer = tmp.get_num();
+16535:       denom = tmp.get_den();
+16535:       c *= denom;
+16535:       c += numer * val_denom * (*i);
+16535:       val_denom *= denom;
+16535:       continue;
+16535:     }
+16535: 
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535:   freq_n = 0;
+16535:   freq_d = 1;
+16535: 
+16535: 
+16535:   normalize2(c, val_denom, val_n, val_d);
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: bool
+16535: Box<ITV>::constrains(Variable var) const {
+16535: 
+16535:   const dimension_type var_space_dim = var.space_dimension();
+16535:   if (space_dimension() < var_space_dim) {
+16535:     throw_dimension_incompatible("constrains(v)", "v", var);
+16535:   }
+16535: 
+16535:   if (marked_empty() || !seq[var_space_dim-1].is_universe()) {
+16535:     return true;
+16535:   }
+16535: 
+16535:   return is_empty();
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::unconstrain(const Variables_Set& vars) {
+16535: 
+16535: 
+16535: 
+16535:   if (vars.empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type min_space_dim = vars.space_dimension();
+16535:   if (space_dimension() < min_space_dim) {
+16535:     throw_dimension_incompatible("unconstrain(vs)", min_space_dim);
+16535:   }
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   for (Variables_Set::const_iterator vsi = vars.begin(),
+16535:          vsi_end = vars.end(); vsi != vsi_end; ++vsi) {
+16535:     ITV& seq_vsi = seq[*vsi];
+16535:     if (!seq_vsi.is_empty()) {
+16535:       seq_vsi.assign(UNIVERSE);
+16535:     }
+16535:     else {
+16535:       set_empty();
+16535:       break;
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::topological_closure_assign() {
+16535:   if (ITV::is_always_topologically_closed() || is_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   for (dimension_type k = seq.size(); k-- > 0; ) {
+16535:     seq[k].topological_closure_assign();
+16535:   }
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::wrap_assign(const Variables_Set& vars,
+16535:                       Bounded_Integer_Type_Width w,
+16535:                       Bounded_Integer_Type_Representation r,
+16535:                       Bounded_Integer_Type_Overflow o,
+16535:                       const Constraint_System* cs_p,
+16535:                       unsigned complexity_threshold,
+16535:                       bool wrap_individually) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   (void)(wrap_individually);
+16535:   (void)(complexity_threshold);
+16535:   Box& x = *this;
+16535: 
+16535: 
+16535:   const dimension_type vars_space_dim = vars.space_dimension();
+16535:   if (cs_p != 0 && cs_p->space_dimension() > vars_space_dim) {
+16535:     std::ostringstream s;
+16535:     s << "PPL::Box<ITV>::wrap_assign(vars, w, r, o, cs_p, ...):"
+16535:       << std::endl
+16535:       << "vars.space_dimension() == " << vars_space_dim
+16535:       << ", cs_p->space_dimension() == " << cs_p->space_dimension() << ".";
+16535:     throw std::invalid_argument(s.str());
+16535:   }
+16535: 
+16535: 
+16535:   if (vars.empty()) {
+16535:     if (cs_p != 0) {
+16535:       refine_with_constraints(*cs_p);
+16535:     }
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type space_dim = x.space_dimension();
+16535:   if (space_dim < vars_space_dim) {
+16535:     std::ostringstream s;
+16535:     s << "PPL::Box<ITV>::wrap_assign(vars, ...):"
+16535:       << std::endl
+16535:       << "this->space_dimension() == " << space_dim
+16535:       << ", required space dimension == " << vars_space_dim << ".";
+16535:     throw std::invalid_argument(s.str());
+16535:   }
+16535: 
+16535: 
+16535:   if (x.is_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_value; Parma_Polyhedra_Library::Coefficient& min_value = holder_min_value.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_value; Parma_Polyhedra_Library::Coefficient& max_value = holder_max_value.item();
+16535:   if (r == UNSIGNED) {
+16535:     min_value = 0;
+16535:     mul_2exp_assign(max_value, Coefficient_one(), w);
+16535:     --max_value;
+16535:   }
+16535:   else {
+16535:     ((void) 0);
+16535:     mul_2exp_assign(max_value, Coefficient_one(), w-1);
+16535:     neg_assign(min_value, max_value);
+16535:     --max_value;
+16535:   }
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<ITV> holder_integer_quadrant_itv; ITV& integer_quadrant_itv = holder_integer_quadrant_itv.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<ITV> holder_rational_quadrant_itv; ITV& rational_quadrant_itv = holder_rational_quadrant_itv.item();
+16535:   {
+16535:     I_Constraint<Coefficient> lower = i_constraint(GREATER_OR_EQUAL, min_value);
+16535:     I_Constraint<Coefficient> upper = i_constraint(LESS_OR_EQUAL, max_value);
+16535:     integer_quadrant_itv.build(lower, upper);
+16535: 
+16535:     if (o == OVERFLOW_UNDEFINED) {
+16535:       ++max_value;
+16535:       upper = i_constraint(LESS_THAN, max_value);
+16535:       rational_quadrant_itv.build(lower, upper);
+16535:     }
+16535:   }
+16535: 
+16535:   const Variables_Set::const_iterator vs_end = vars.end();
+16535: 
+16535:   if (cs_p == 0) {
+16535: 
+16535:     switch (o) {
+16535:     case OVERFLOW_WRAPS:
+16535:       for (Variables_Set::const_iterator i = vars.begin(); i != vs_end; ++i) {
+16535:         x.seq[*i].wrap_assign(w, r, integer_quadrant_itv);
+16535:       }
+16535:       reset_empty_up_to_date();
+16535:       break;
+16535:     case OVERFLOW_UNDEFINED:
+16535:       for (Variables_Set::const_iterator i = vars.begin(); i != vs_end; ++i) {
+16535:         ITV& x_seq_v = x.seq[*i];
+16535:         if (!rational_quadrant_itv.contains(x_seq_v)) {
+16535:           x_seq_v.assign(integer_quadrant_itv);
+16535:         }
+16535:       }
+16535:       break;
+16535:     case OVERFLOW_IMPOSSIBLE:
+16535:       for (Variables_Set::const_iterator i = vars.begin(); i != vs_end; ++i) {
+16535:         x.seq[*i].intersect_assign(integer_quadrant_itv);
+16535:       }
+16535:       reset_empty_up_to_date();
+16535:       break;
+16535:     }
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   const Constraint_System& cs = *cs_p;
+16535: 
+16535:   typedef std::map<dimension_type, std::vector<const Constraint*> > map_type;
+16535:   map_type var_cs_map;
+16535:   for (Constraint_System::const_iterator i = cs.begin(),
+16535:          i_end = cs.end(); i != i_end; ++i) {
+16535:     const Constraint& c = *i;
+16535:     dimension_type c_num_vars = 0;
+16535:     dimension_type c_only_var = 0;
+16535:     if (Box_Helpers::extract_interval_constraint(c, c_num_vars, c_only_var)) {
+16535:       if (c_num_vars == 1) {
+16535: 
+16535:         ((void) 0);
+16535: 
+16535:         if (vars.find(c_only_var) != vs_end) {
+16535:           var_cs_map[c_only_var].push_back(&c);
+16535:         }
+16535:       }
+16535:       else {
+16535:         ((void) 0);
+16535: 
+16535:         ((void) 0);
+16535:         x.set_empty();
+16535:         return;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<ITV> holder_refinement_itv; ITV& refinement_itv = holder_refinement_itv.item();
+16535:   const map_type::const_iterator var_cs_map_end = var_cs_map.end();
+16535: 
+16535:   for (Variables_Set::const_iterator i = vars.begin(); i != vs_end; ++i) {
+16535:     const dimension_type v = *i;
+16535:     refinement_itv = integer_quadrant_itv;
+16535: 
+16535:     map_type::const_iterator var_cs_map_iter = var_cs_map.find(v);
+16535:     if (var_cs_map_iter != var_cs_map_end) {
+16535: 
+16535:       const map_type::mapped_type& var_cs = var_cs_map_iter->second;
+16535:       for (dimension_type j = var_cs.size(); j-- > 0; ) {
+16535:         const Constraint& c = *var_cs[j];
+16535:         refine_interval_no_check(refinement_itv,
+16535:                                  c.type(),
+16535:                                  c.inhomogeneous_term(),
+16535:                                  c.coefficient(Variable(v)));
+16535:       }
+16535:     }
+16535: 
+16535:     ITV& x_seq_v = x.seq[v];
+16535:     switch (o) {
+16535:     case OVERFLOW_WRAPS:
+16535:       x_seq_v.wrap_assign(w, r, refinement_itv);
+16535:       break;
+16535:     case OVERFLOW_UNDEFINED:
+16535:       if (!rational_quadrant_itv.contains(x_seq_v)) {
+16535:         x_seq_v.assign(UNIVERSE);
+16535:       }
+16535:       break;
+16535:     case OVERFLOW_IMPOSSIBLE:
+16535:       x_seq_v.intersect_assign(refinement_itv);
+16535:       break;
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535: 
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::drop_some_non_integer_points(Complexity_Class) {
+16535:   if (std::numeric_limits<typename ITV::boundary_type>::is_integer
+16535:       && !ITV::info_type::store_open) {
+16535:     return;
+16535:   }
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   for (dimension_type k = seq.size(); k-- > 0; ) {
+16535:     seq[k].drop_some_non_integer_points();
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::drop_some_non_integer_points(const Variables_Set& vars,
+16535:                                        Complexity_Class) {
+16535: 
+16535:   const dimension_type min_space_dim = vars.space_dimension();
+16535:   if (space_dimension() < min_space_dim) {
+16535:     throw_dimension_incompatible("drop_some_non_integer_points(vs, cmpl)",
+16535:                                  min_space_dim);
+16535:   }
+16535:   if (std::numeric_limits<typename ITV::boundary_type>::is_integer
+16535:       && !ITV::info_type::store_open) {
+16535:     return;
+16535:   }
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   for (Variables_Set::const_iterator v_i = vars.begin(),
+16535:          v_end = vars.end(); v_i != v_end; ++v_i) {
+16535:     seq[*v_i].drop_some_non_integer_points();
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::intersection_assign(const Box& y) {
+16535:   Box& x = *this;
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535: 
+16535:   if (space_dim != y.space_dimension()) {
+16535:     x.throw_dimension_incompatible("intersection_assign(y)", y);
+16535:   }
+16535: 
+16535: 
+16535:   if (x.marked_empty()) {
+16535:     return;
+16535:   }
+16535:   if (y.marked_empty()) {
+16535:     x.set_empty();
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   reset_empty_up_to_date();
+16535: 
+16535:   for (dimension_type k = space_dim; k-- > 0; ) {
+16535:     x.seq[k].intersect_assign(y.seq[k]);
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::upper_bound_assign(const Box& y) {
+16535:   Box& x = *this;
+16535: 
+16535: 
+16535:   if (x.space_dimension() != y.space_dimension()) {
+16535:     x.throw_dimension_incompatible("upper_bound_assign(y)", y);
+16535:   }
+16535: 
+16535: 
+16535:   if (y.is_empty()) {
+16535:     return;
+16535:   }
+16535:   if (x.is_empty()) {
+16535:     x = y;
+16535:     return;
+16535:   }
+16535: 
+16535:   for (dimension_type k = x.seq.size(); k-- > 0; ) {
+16535:     x.seq[k].join_assign(y.seq[k]);
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::concatenate_assign(const Box& y) {
+16535:   Box& x = *this;
+16535:   const dimension_type x_space_dim = x.space_dimension();
+16535:   const dimension_type y_space_dim = y.space_dimension();
+16535: 
+16535: 
+16535:   if (y.marked_empty()) {
+16535:     x.set_empty();
+16535:   }
+16535: 
+16535: 
+16535:   if (y_space_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535:   check_space_dimension_overflow(y.space_dimension(),
+16535:                                  max_space_dimension() - space_dimension(),
+16535:                                  "PPL::Box::",
+16535:                                  "concatenate_assign(y)",
+16535:                                  "concatenation exceeds the maximum "
+16535:                                  "allowed space dimension");
+16535: 
+16535: 
+16535:   x.seq.reserve(x_space_dim + y_space_dim);
+16535: 
+16535: 
+16535: 
+16535:   if (x.marked_empty()) {
+16535:     x.seq.insert(x.seq.end(), y_space_dim, ITV(EMPTY));
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   std::copy(y.seq.begin(), y.seq.end(),
+16535:             std::back_insert_iterator<Sequence>(x.seq));
+16535: 
+16535:   if (!y.status.test_empty_up_to_date()) {
+16535:     reset_empty_up_to_date();
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::difference_assign(const Box& y) {
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535: 
+16535:   if (space_dim != y.space_dimension()) {
+16535:     throw_dimension_incompatible("difference_assign(y)", y);
+16535:   }
+16535: 
+16535:   Box& x = *this;
+16535:   if (x.is_empty() || y.is_empty()) {
+16535:     return;
+16535:   }
+16535:   switch (space_dim) {
+16535:   case 0:
+16535: 
+16535: 
+16535:     x.set_empty();
+16535:     break;
+16535: 
+16535:   case 1:
+16535:     x.seq[0].difference_assign(y.seq[0]);
+16535:     if (x.seq[0].is_empty()) {
+16535:       x.set_empty();
+16535:     }
+16535:     break;
+16535: 
+16535:   default:
+16535:     {
+16535:       dimension_type index_non_contained = space_dim;
+16535:       dimension_type number_non_contained = 0;
+16535:       for (dimension_type i = space_dim; i-- > 0; ) {
+16535:         if (!y.seq[i].contains(x.seq[i])) {
+16535:           if (++number_non_contained == 1) {
+16535:             index_non_contained = i;
+16535:           }
+16535:           else {
+16535:             break;
+16535:           }
+16535:         }
+16535:       }
+16535: 
+16535:       switch (number_non_contained) {
+16535:       case 0:
+16535: 
+16535:         x.set_empty();
+16535:         break;
+16535:       case 1:
+16535:         x.seq[index_non_contained]
+16535:           .difference_assign(y.seq[index_non_contained]);
+16535:         if (x.seq[index_non_contained].is_empty()) {
+16535:           x.set_empty();
+16535:         }
+16535:         break;
+16535:       default:
+16535: 
+16535:         break;
+16535:       }
+16535:     }
+16535:     break;
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: bool
+16535: Box<ITV>::simplify_using_context_assign(const Box& y) {
+16535:   Box& x = *this;
+16535:   const dimension_type num_dims = x.space_dimension();
+16535: 
+16535:   if (num_dims != y.space_dimension()) {
+16535:     x.throw_dimension_incompatible("simplify_using_context_assign(y)", y);
+16535:   }
+16535: 
+16535: 
+16535:   if (num_dims == 0) {
+16535:     if (y.marked_empty()) {
+16535:       x.set_nonempty();
+16535:       return false;
+16535:     }
+16535:     else {
+16535:       return !x.marked_empty();
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   if (y.is_empty()) {
+16535:     for (dimension_type i = num_dims; i-- > 0; ) {
+16535:       x.seq[i].assign(UNIVERSE);
+16535:     }
+16535:     x.set_nonempty();
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (x.is_empty()) {
+16535: 
+16535:     for (dimension_type i = 0; i < num_dims; ++i) {
+16535:       if (y.seq[i].is_universe()) {
+16535:         x.seq[i].assign(UNIVERSE);
+16535:       }
+16535:       else {
+16535: 
+16535:         ITV& seq_i = x.seq[i];
+16535:         seq_i.empty_intersection_assign(y.seq[i]);
+16535:         if (seq_i.is_empty()) {
+16535: 
+16535: 
+16535:           seq_i.assign(UNIVERSE);
+16535:           continue;
+16535:         }
+16535: 
+16535: 
+16535:         for (++i; i < num_dims; ++i) {
+16535:           x.seq[i].assign(UNIVERSE);
+16535:         }
+16535:         x.set_nonempty();
+16535:         ((void) 0);
+16535:         return false;
+16535:       }
+16535:     }
+16535: 
+16535: 
+16535:     ((void) 0);
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535:   for (dimension_type i = 0; i < num_dims; ++i) {
+16535:     if (!x.seq[i].simplify_using_context_assign(y.seq[i])) {
+16535:       ((void) 0);
+16535: 
+16535: 
+16535:       for (dimension_type j = num_dims; j-- > i; ) {
+16535:         x.seq[j].assign(UNIVERSE);
+16535:       }
+16535:       for (dimension_type j = i; j-- > 0; ) {
+16535:         x.seq[j].assign(UNIVERSE);
+16535:       }
+16535:       ((void) 0);
+16535:       return false;
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::time_elapse_assign(const Box& y) {
+16535:   Box& x = *this;
+16535:   const dimension_type x_space_dim = x.space_dimension();
+16535: 
+16535: 
+16535:   if (x_space_dim != y.space_dimension()) {
+16535:     x.throw_dimension_incompatible("time_elapse_assign(y)", y);
+16535:   }
+16535: 
+16535: 
+16535:   if (x_space_dim == 0) {
+16535:     if (y.marked_empty()) {
+16535:       x.set_empty();
+16535:     }
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (x.marked_empty() || y.marked_empty()
+16535:       || x.is_empty() || y.is_empty()) {
+16535:     x.set_empty();
+16535:     return;
+16535:   }
+16535: 
+16535:   for (dimension_type i = x_space_dim; i-- > 0; ) {
+16535:     ITV& x_seq_i = x.seq[i];
+16535:     const ITV& y_seq_i = y.seq[i];
+16535:     if (!x_seq_i.lower_is_boundary_infinity()) {
+16535:       if (y_seq_i.lower_is_boundary_infinity() || y_seq_i.lower() < 0) {
+16535:         x_seq_i.lower_extend();
+16535:       }
+16535:     }
+16535:     if (!x_seq_i.upper_is_boundary_infinity()) {
+16535:       if (y_seq_i.upper_is_boundary_infinity() || y_seq_i.upper() > 0) {
+16535:         x_seq_i.upper_extend();
+16535:       }
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: inline void
+16535: Box<ITV>::remove_space_dimensions(const Variables_Set& vars) {
+16535: 
+16535: 
+16535: 
+16535:   if (vars.empty()) {
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535:   const dimension_type old_space_dim = space_dimension();
+16535: 
+16535: 
+16535:   const dimension_type vsi_space_dim = vars.space_dimension();
+16535:   if (old_space_dim < vsi_space_dim) {
+16535:     throw_dimension_incompatible("remove_space_dimensions(vs)",
+16535:                                  vsi_space_dim);
+16535:   }
+16535: 
+16535:   const dimension_type new_space_dim = old_space_dim - vars.size();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (is_empty() || new_space_dim == 0) {
+16535:     seq.resize(new_space_dim);
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   Variables_Set::const_iterator vsi = vars.begin();
+16535:   Variables_Set::const_iterator vsi_end = vars.end();
+16535:   dimension_type dst = *vsi;
+16535:   dimension_type src = dst + 1;
+16535:   for (++vsi; vsi != vsi_end; ++vsi) {
+16535:     const dimension_type vsi_next = *vsi;
+16535: 
+16535:     while (src < vsi_next) {
+16535:       swap(seq[dst++], seq[src++]);
+16535:     }
+16535:     ++src;
+16535:   }
+16535: 
+16535: 
+16535:   while (src < old_space_dim) {
+16535:     swap(seq[dst++], seq[src++]);
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   seq.resize(new_space_dim);
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::remove_higher_space_dimensions(const dimension_type new_dimension) {
+16535: 
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535:   if (new_dimension > space_dim) {
+16535:     throw_dimension_incompatible("remove_higher_space_dimensions(nd)",
+16535:                                  new_dimension);
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   if (new_dimension == space_dim) {
+16535:     ((void) 0);
+16535:     return;
+16535:   }
+16535: 
+16535:   seq.resize(new_dimension);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: template <typename Partial_Function>
+16535: void
+16535: Box<ITV>::map_space_dimensions(const Partial_Function& pfunc) {
+16535:   const dimension_type space_dim = space_dimension();
+16535:   if (space_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535:   if (pfunc.has_empty_codomain()) {
+16535: 
+16535:     remove_higher_space_dimensions(0);
+16535:     return;
+16535:   }
+16535: 
+16535:   const dimension_type new_space_dim = pfunc.max_in_codomain() + 1;
+16535: 
+16535:   if (is_empty()) {
+16535:     remove_higher_space_dimensions(new_space_dim);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   Box<ITV> tmp(new_space_dim);
+16535: 
+16535:   for (dimension_type i = 0; i < space_dim; ++i) {
+16535:     dimension_type new_i;
+16535:     if (pfunc.maps(i, new_i)) {
+16535:       swap(seq[i], tmp.seq[new_i]);
+16535:     }
+16535:   }
+16535:   m_swap(tmp);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::fold_space_dimensions(const Variables_Set& vars,
+16535:                                 const Variable dest) {
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535:   if (dest.space_dimension() > space_dim) {
+16535:     throw_dimension_incompatible("fold_space_dimensions(vs, v)", "v", dest);
+16535:   }
+16535: 
+16535: 
+16535:   if (vars.empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   if (vars.space_dimension() > space_dim) {
+16535:     throw_dimension_incompatible("fold_space_dimensions(vs, v)",
+16535:                                  vars.space_dimension());
+16535:   }
+16535: 
+16535:   if (vars.find(dest.id()) != vars.end()) {
+16535:     throw_invalid_argument("fold_space_dimensions(vs, v)",
+16535:                            "v should not occur in vs");
+16535:   }
+16535: 
+16535: 
+16535:   if (!is_empty()) {
+16535: 
+16535: 
+16535:     ITV& seq_v = seq[dest.id()];
+16535:     for (Variables_Set::const_iterator i = vars.begin(),
+16535:            vs_end = vars.end(); i != vs_end; ++i) {
+16535:       seq_v.join_assign(seq[*i]);
+16535:     }
+16535:   }
+16535:   remove_space_dimensions(vars);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::add_constraint_no_check(const Constraint& c) {
+16535:   ((void) 0);
+16535: 
+16535:   dimension_type c_num_vars = 0;
+16535:   dimension_type c_only_var = 0;
+16535: 
+16535:   if (!Box_Helpers::extract_interval_constraint(c, c_num_vars, c_only_var)) {
+16535:     throw_invalid_argument("add_constraint(c)",
+16535:                            "c is not an interval constraint");
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (c.is_strict_inequality() && c_num_vars != 0
+16535:       && ITV::is_always_topologically_closed()) {
+16535:     throw_invalid_argument("add_constraint(c)",
+16535:                            "c is a nontrivial strict constraint");
+16535:   }
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   const Coefficient& n = c.inhomogeneous_term();
+16535:   if (c_num_vars == 0) {
+16535: 
+16535:     if (n < 0
+16535:         || (c.is_equality() && n != 0)
+16535:         || (c.is_strict_inequality() && n == 0)) {
+16535:       set_empty();
+16535:     }
+16535:     return;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   const Coefficient& d = c.coefficient(Variable(c_only_var));
+16535:   add_interval_constraint_no_check(c_only_var, c.type(), n, d);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::add_constraints_no_check(const Constraint_System& cs) {
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:   for (Constraint_System::const_iterator i = cs.begin(),
+16535:          cs_end = cs.end(); i != cs_end; ++i) {
+16535:     add_constraint_no_check(*i);
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::add_congruence_no_check(const Congruence& cg) {
+16535:   ((void) 0);
+16535: 
+16535: 
+16535:   if (cg.is_proper_congruence()) {
+16535:     if (cg.is_inconsistent()) {
+16535:       set_empty();
+16535:       return;
+16535:     }
+16535:     else if (cg.is_tautological()) {
+16535:       return;
+16535:     }
+16535:     else {
+16535:       throw_invalid_argument("add_congruence(cg)",
+16535:                              "cg is a nontrivial proper congruence");
+16535:     }
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   dimension_type cg_num_vars = 0;
+16535:   dimension_type cg_only_var = 0;
+16535: 
+16535:   if (!Box_Helpers::extract_interval_congruence(cg, cg_num_vars, cg_only_var)) {
+16535:     throw_invalid_argument("add_congruence(cg)",
+16535:                            "cg is not an interval congruence");
+16535:   }
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   const Coefficient& n = cg.inhomogeneous_term();
+16535:   if (cg_num_vars == 0) {
+16535: 
+16535:     if (n != 0) {
+16535:       set_empty();
+16535:     }
+16535:     return;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   const Coefficient& d = cg.coefficient(Variable(cg_only_var));
+16535:   add_interval_constraint_no_check(cg_only_var, Constraint::EQUALITY, n, d);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::add_congruences_no_check(const Congruence_System& cgs) {
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:   for (Congruence_System::const_iterator i = cgs.begin(),
+16535:          cgs_end = cgs.end(); i != cgs_end; ++i) {
+16535:     add_congruence_no_check(*i);
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::refine_no_check(const Constraint& c) {
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: 
+16535:   dimension_type c_num_vars = 0;
+16535:   dimension_type c_only_var = 0;
+16535: 
+16535:   if (!Box_Helpers::extract_interval_constraint(c, c_num_vars, c_only_var)) {
+16535:     propagate_constraint_no_check(c);
+16535:     return;
+16535:   }
+16535: 
+16535:   const Coefficient& n = c.inhomogeneous_term();
+16535:   if (c_num_vars == 0) {
+16535: 
+16535:     if (n < 0
+16535:         || (c.is_equality() && n != 0)
+16535:         || (c.is_strict_inequality() && n == 0)) {
+16535:       set_empty();
+16535:     }
+16535:     return;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   const Coefficient& d = c.coefficient(Variable(c_only_var));
+16535:   add_interval_constraint_no_check(c_only_var, c.type(), n, d);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::refine_no_check(const Constraint_System& cs) {
+16535:   ((void) 0);
+16535:   for (Constraint_System::const_iterator i = cs.begin(),
+16535:          cs_end = cs.end(); !marked_empty() && i != cs_end; ++i) {
+16535:     refine_no_check(*i);
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::refine_no_check(const Congruence& cg) {
+16535:   ((void) 0);
+16535: 
+16535:   ((void) 0);
+16535: 
+16535:   if (cg.is_proper_congruence()) {
+16535: 
+16535: 
+16535:     if (cg.is_inconsistent()) {
+16535:       set_empty();
+16535:     }
+16535:     return;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535:   Constraint c(cg);
+16535:   refine_no_check(c);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::refine_no_check(const Congruence_System& cgs) {
+16535:   ((void) 0);
+16535:   for (Congruence_System::const_iterator i = cgs.begin(),
+16535:          cgs_end = cgs.end(); !marked_empty() && i != cgs_end; ++i) {
+16535:     refine_no_check(*i);
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: namespace Boxes {
+16535: 
+16535: inline bool
+16535: propagate_constraint_check_result(Result r, Ternary& open) {
+16535:   r = result_relation_class(r);
+16535:   switch (r) {
+16535:   case V_GT_MINUS_INFINITY:
+16535:   case V_LT_PLUS_INFINITY:
+16535:     return true;
+16535:   case V_LT:
+16535:   case V_GT:
+16535:     open = T_YES;
+16535:     return false;
+16535:   case V_LE:
+16535:   case V_GE:
+16535:     if (open == T_NO) {
+16535:       open = T_MAYBE;
+16535:     }
+16535:     return false;
+16535:   case V_EQ:
+16535:     return false;
+16535:   default:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     return true;
+16535:   }
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::propagate_constraint_no_check(const Constraint& c) {
+16535:   using namespace Implementation::Boxes;
+16535: 
+16535:   ((void) 0);
+16535: 
+16535:   typedef
+16535:     typename Select_Temp_Boundary_Type<typename ITV::boundary_type>::type
+16535:     Temp_Boundary_Type;
+16535: 
+16535:   const dimension_type c_space_dim = c.space_dimension();
+16535:   const Constraint::Type c_type = c.type();
+16535:   const Coefficient& c_inhomogeneous_term = c.inhomogeneous_term();
+16535: 
+16535: 
+16535:   const dimension_type last_k
+16535:     = c.expression().last_nonzero(1, c_space_dim + 1);
+16535:   if (last_k == c_space_dim + 1) {
+16535: 
+16535:     if (c_inhomogeneous_term < 0
+16535:         || (c_inhomogeneous_term == 0
+16535:             && c_type != Constraint::NONSTRICT_INEQUALITY)) {
+16535:       set_empty();
+16535:     }
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   Temp_Boundary_Type t_bound;
+16535:   Temp_Boundary_Type t_a;
+16535:   Temp_Boundary_Type t_x;
+16535:   Ternary open;
+16535:   const Constraint::expr_type c_e = c.expression();
+16535:   for (Constraint::expr_type::const_iterator k = c_e.begin(),
+16535:          k_end = c_e.lower_bound(Variable(last_k)); k != k_end; ++k) {
+16535:     const Coefficient& a_k = *k;
+16535:     const Variable k_var = k.variable();
+16535:     const int sgn_a_k = sgn(a_k);
+16535:     if (sgn_a_k == 0) {
+16535:       continue;
+16535:     }
+16535:     Result r;
+16535:     if (sgn_a_k > 0) {
+16535:       open = (c_type == Constraint::STRICT_INEQUALITY) ? T_YES : T_NO;
+16535:       if (open == T_NO) {
+16535:         maybe_reset_fpu_inexact<Temp_Boundary_Type>();
+16535:       }
+16535:       r = assign_r(t_bound, c_inhomogeneous_term, ROUND_UP);
+16535:       if (propagate_constraint_check_result(r, open)) {
+16535:         goto maybe_refine_upper_1;
+16535:       }
+16535:       r = neg_assign_r(t_bound, t_bound, ROUND_DOWN);
+16535:       if (propagate_constraint_check_result(r, open)) {
+16535:         goto maybe_refine_upper_1;
+16535:       }
+16535:       for (Constraint::expr_type::const_iterator i = c_e.begin(),
+16535:             i_end = c_e.lower_bound(Variable(last_k)); i != i_end; ++i) {
+16535:         const Variable i_var = i.variable();
+16535:         if (i_var.id() == k_var.id()) {
+16535:           continue;
+16535:         }
+16535:         const Coefficient& a_i = *i;
+16535:         const int sgn_a_i = sgn(a_i);
+16535:         ITV& x_i = seq[i_var.id()];
+16535:         if (sgn_a_i < 0) {
+16535:           if (x_i.lower_is_boundary_infinity()) {
+16535:             goto maybe_refine_upper_1;
+16535:           }
+16535:           r = assign_r(t_a, a_i, ROUND_DOWN);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto maybe_refine_upper_1;
+16535:           }
+16535:           r = assign_r(t_x, x_i.lower(), ROUND_DOWN);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto maybe_refine_upper_1;
+16535:           }
+16535:           if (x_i.lower_is_open()) {
+16535:             open = T_YES;
+16535:           }
+16535:           r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_DOWN);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto maybe_refine_upper_1;
+16535:           }
+16535:         }
+16535:         else {
+16535:           ((void) 0);
+16535:           if (x_i.upper_is_boundary_infinity()) {
+16535:             goto maybe_refine_upper_1;
+16535:           }
+16535:           r = assign_r(t_a, a_i, ROUND_UP);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto maybe_refine_upper_1;
+16535:           }
+16535:           r = assign_r(t_x, x_i.upper(), ROUND_UP);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto maybe_refine_upper_1;
+16535:           }
+16535:           if (x_i.upper_is_open()) {
+16535:             open = T_YES;
+16535:           }
+16535:           r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_DOWN);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto maybe_refine_upper_1;
+16535:           }
+16535:         }
+16535:       }
+16535:       r = assign_r(t_a, a_k, ROUND_UP);
+16535:       if (propagate_constraint_check_result(r, open)) {
+16535:         goto maybe_refine_upper_1;
+16535:       }
+16535:       r = div_assign_r(t_bound, t_bound, t_a, ROUND_DOWN);
+16535:       if (propagate_constraint_check_result(r, open)) {
+16535:         goto maybe_refine_upper_1;
+16535:       }
+16535: 
+16535: 
+16535:       if (open == T_MAYBE
+16535:           && maybe_check_fpu_inexact<Temp_Boundary_Type>() == 1) {
+16535:         open = T_YES;
+16535:       }
+16535:       {
+16535:         const Relation_Symbol rel
+16535:           = (open == T_YES) ? GREATER_THAN : GREATER_OR_EQUAL;
+16535:         seq[k_var.id()].add_constraint(i_constraint(rel, t_bound));
+16535:       }
+16535:       reset_empty_up_to_date();
+16535:     maybe_refine_upper_1:
+16535:       if (c_type != Constraint::EQUALITY) {
+16535:         continue;
+16535:       }
+16535:       open = T_NO;
+16535:       maybe_reset_fpu_inexact<Temp_Boundary_Type>();
+16535:       r = assign_r(t_bound, c_inhomogeneous_term, ROUND_DOWN);
+16535:       if (propagate_constraint_check_result(r, open)) {
+16535:         goto next_k;
+16535:       }
+16535:       r = neg_assign_r(t_bound, t_bound, ROUND_UP);
+16535:       if (propagate_constraint_check_result(r, open)) {
+16535:         goto next_k;
+16535:       }
+16535:       for (Constraint::expr_type::const_iterator i = c_e.begin(),
+16535:             i_end = c_e.lower_bound(Variable(c_space_dim)); i != i_end; ++i) {
+16535:         const Variable i_var = i.variable();
+16535:         if (i_var.id() == k_var.id()) {
+16535:           continue;
+16535:         }
+16535:         const Coefficient& a_i = *i;
+16535:         const int sgn_a_i = sgn(a_i);
+16535:         ITV& x_i = seq[i_var.id()];
+16535:         if (sgn_a_i < 0) {
+16535:           if (x_i.upper_is_boundary_infinity()) {
+16535:             goto next_k;
+16535:           }
+16535:           r = assign_r(t_a, a_i, ROUND_UP);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto next_k;
+16535:           }
+16535:           r = assign_r(t_x, x_i.upper(), ROUND_UP);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto next_k;
+16535:           }
+16535:           if (x_i.upper_is_open()) {
+16535:             open = T_YES;
+16535:           }
+16535:           r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_UP);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto next_k;
+16535:           }
+16535:         }
+16535:         else {
+16535:           ((void) 0);
+16535:           if (x_i.lower_is_boundary_infinity()) {
+16535:             goto next_k;
+16535:           }
+16535:           r = assign_r(t_a, a_i, ROUND_DOWN);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto next_k;
+16535:           }
+16535:           r = assign_r(t_x, x_i.lower(), ROUND_DOWN);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto next_k;
+16535:           }
+16535:           if (x_i.lower_is_open()) {
+16535:             open = T_YES;
+16535:           }
+16535:           r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_UP);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto next_k;
+16535:           }
+16535:         }
+16535:       }
+16535:       r = assign_r(t_a, a_k, ROUND_DOWN);
+16535:       if (propagate_constraint_check_result(r, open)) {
+16535:         goto next_k;
+16535:       }
+16535:       r = div_assign_r(t_bound, t_bound, t_a, ROUND_UP);
+16535:       if (propagate_constraint_check_result(r, open)) {
+16535:         goto next_k;
+16535:       }
+16535: 
+16535: 
+16535:       if (open == T_MAYBE
+16535:           && maybe_check_fpu_inexact<Temp_Boundary_Type>() == 1) {
+16535:         open = T_YES;
+16535:       }
+16535:       const Relation_Symbol rel
+16535:         = (open == T_YES) ? LESS_THAN : LESS_OR_EQUAL;
+16535:       seq[k_var.id()].add_constraint(i_constraint(rel, t_bound));
+16535:       reset_empty_up_to_date();
+16535:     }
+16535:     else {
+16535:       ((void) 0);
+16535:       open = (c_type == Constraint::STRICT_INEQUALITY) ? T_YES : T_NO;
+16535:       if (open == T_NO) {
+16535:         maybe_reset_fpu_inexact<Temp_Boundary_Type>();
+16535:       }
+16535:       r = assign_r(t_bound, c_inhomogeneous_term, ROUND_UP);
+16535:       if (propagate_constraint_check_result(r, open)) {
+16535:         goto maybe_refine_upper_2;
+16535:       }
+16535:       r = neg_assign_r(t_bound, t_bound, ROUND_DOWN);
+16535:       if (propagate_constraint_check_result(r, open)) {
+16535:         goto maybe_refine_upper_2;
+16535:       }
+16535:       for (Constraint::expr_type::const_iterator i = c_e.begin(),
+16535:             i_end = c_e.lower_bound(Variable(c_space_dim)); i != i_end; ++i) {
+16535:         const Variable i_var = i.variable();
+16535:         if (i_var.id() == k_var.id()) {
+16535:           continue;
+16535:         }
+16535:         const Coefficient& a_i = *i;
+16535:         const int sgn_a_i = sgn(a_i);
+16535:         ITV& x_i = seq[i_var.id()];
+16535:         if (sgn_a_i < 0) {
+16535:           if (x_i.lower_is_boundary_infinity()) {
+16535:             goto maybe_refine_upper_2;
+16535:           }
+16535:           r = assign_r(t_a, a_i, ROUND_DOWN);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto maybe_refine_upper_2;
+16535:           }
+16535:           r = assign_r(t_x, x_i.lower(), ROUND_DOWN);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto maybe_refine_upper_2;
+16535:           }
+16535:           if (x_i.lower_is_open()) {
+16535:             open = T_YES;
+16535:           }
+16535:           r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_UP);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto maybe_refine_upper_2;
+16535:           }
+16535:         }
+16535:         else {
+16535:           ((void) 0);
+16535:           if (x_i.upper_is_boundary_infinity()) {
+16535:             goto maybe_refine_upper_2;
+16535:           }
+16535:           r = assign_r(t_a, a_i, ROUND_UP);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto maybe_refine_upper_2;
+16535:           }
+16535:           r = assign_r(t_x, x_i.upper(), ROUND_UP);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto maybe_refine_upper_2;
+16535:           }
+16535:           if (x_i.upper_is_open()) {
+16535:             open = T_YES;
+16535:           }
+16535:           r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_DOWN);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto maybe_refine_upper_2;
+16535:           }
+16535:         }
+16535:       }
+16535:       r = assign_r(t_a, a_k, ROUND_UP);
+16535:       if (propagate_constraint_check_result(r, open)) {
+16535:         goto maybe_refine_upper_2;
+16535:       }
+16535:       r = div_assign_r(t_bound, t_bound, t_a, ROUND_UP);
+16535:       if (propagate_constraint_check_result(r, open)) {
+16535:         goto maybe_refine_upper_2;
+16535:       }
+16535: 
+16535:       if (open == T_MAYBE
+16535:           && maybe_check_fpu_inexact<Temp_Boundary_Type>() == 1) {
+16535:         open = T_YES;
+16535:       }
+16535:       {
+16535:         const Relation_Symbol rel
+16535:           = (open == T_YES) ? LESS_THAN : LESS_OR_EQUAL;
+16535:         seq[k_var.id()].add_constraint(i_constraint(rel, t_bound));
+16535:       }
+16535:       reset_empty_up_to_date();
+16535:     maybe_refine_upper_2:
+16535:       if (c_type != Constraint::EQUALITY) {
+16535:         continue;
+16535:       }
+16535:       open = T_NO;
+16535:       maybe_reset_fpu_inexact<Temp_Boundary_Type>();
+16535:       r = assign_r(t_bound, c_inhomogeneous_term, ROUND_DOWN);
+16535:       if (propagate_constraint_check_result(r, open)) {
+16535:         goto next_k;
+16535:       }
+16535:       r = neg_assign_r(t_bound, t_bound, ROUND_UP);
+16535:       if (propagate_constraint_check_result(r, open)) {
+16535:         goto next_k;
+16535:       }
+16535:       for (Constraint::expr_type::const_iterator i = c_e.begin(),
+16535:             i_end = c_e.lower_bound(Variable(c_space_dim)); i != i_end; ++i) {
+16535:         const Variable i_var = i.variable();
+16535:         if (i_var.id() == k_var.id()) {
+16535:           continue;
+16535:         }
+16535:         const Coefficient& a_i = *i;
+16535:         const int sgn_a_i = sgn(a_i);
+16535:         ITV& x_i = seq[i_var.id()];
+16535:         if (sgn_a_i < 0) {
+16535:           if (x_i.upper_is_boundary_infinity()) {
+16535:             goto next_k;
+16535:           }
+16535:           r = assign_r(t_a, a_i, ROUND_UP);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto next_k;
+16535:           }
+16535:           r = assign_r(t_x, x_i.upper(), ROUND_UP);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto next_k;
+16535:           }
+16535:           if (x_i.upper_is_open()) {
+16535:             open = T_YES;
+16535:           }
+16535:           r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_UP);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto next_k;
+16535:           }
+16535:         }
+16535:         else {
+16535:           ((void) 0);
+16535:           if (x_i.lower_is_boundary_infinity()) {
+16535:             goto next_k;
+16535:           }
+16535:           r = assign_r(t_a, a_i, ROUND_DOWN);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto next_k;
+16535:           }
+16535:           r = assign_r(t_x, x_i.lower(), ROUND_DOWN);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto next_k;
+16535:           }
+16535:           if (x_i.lower_is_open()) {
+16535:             open = T_YES;
+16535:           }
+16535:           r = sub_mul_assign_r(t_bound, t_a, t_x, ROUND_UP);
+16535:           if (propagate_constraint_check_result(r, open)) {
+16535:             goto next_k;
+16535:           }
+16535:         }
+16535:       }
+16535:       r = assign_r(t_a, a_k, ROUND_DOWN);
+16535:       if (propagate_constraint_check_result(r, open)) {
+16535:         goto next_k;
+16535:       }
+16535:       r = div_assign_r(t_bound, t_bound, t_a, ROUND_DOWN);
+16535:       if (propagate_constraint_check_result(r, open)) {
+16535:         goto next_k;
+16535:       }
+16535: 
+16535: 
+16535:       if (open == T_MAYBE
+16535:           && maybe_check_fpu_inexact<Temp_Boundary_Type>() == 1) {
+16535:         open = T_YES;
+16535:       }
+16535:       const Relation_Symbol rel
+16535:         = (open == T_YES) ? GREATER_THAN : GREATER_OR_EQUAL;
+16535:       seq[k_var.id()].add_constraint(i_constraint(rel, t_bound));
+16535:       reset_empty_up_to_date();
+16535:     }
+16535:   next_k:
+16535:     ;
+16535:   }
+16535: }
+16535: # 3027 "../../src/Box_templates.hh"
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>
+16535: ::propagate_constraints_no_check(const Constraint_System& cs,
+16535:                                  const dimension_type max_iterations) {
+16535:   const dimension_type space_dim = space_dimension();
+16535:   ((void) 0);
+16535: 
+16535:   const Constraint_System::const_iterator cs_begin = cs.begin();
+16535:   const Constraint_System::const_iterator cs_end = cs.end();
+16535:   const dimension_type propagation_weight
+16535:     = Implementation::num_constraints(cs) * space_dim;
+16535: 
+16535:   Sequence copy;
+16535:   bool changed;
+16535:   dimension_type num_iterations = 0;
+16535:   do {
+16535:     do { } while (false);
+16535:     ++num_iterations;
+16535:     copy = seq;
+16535:     for (Constraint_System::const_iterator i = cs_begin; i != cs_end; ++i) {
+16535:       propagate_constraint_no_check(*i);
+16535:     }
+16535: 
+16535:     do { Weightwatch_Traits::weight += (40)*(propagation_weight); } while (false);
+16535: 
+16535: 
+16535: 
+16535:     maybe_abandon();
+16535: 
+16535: 
+16535: 
+16535:     if (num_iterations == max_iterations) {
+16535:       break;
+16535:     }
+16535: 
+16535:     changed = (copy != seq);
+16535:   } while (changed);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::affine_image(const Variable var,
+16535:                        const Linear_Expression& expr,
+16535:                        Coefficient_traits::const_reference denominator) {
+16535: 
+16535:   if (denominator == 0) {
+16535:     throw_invalid_argument("affine_image(v, e, d)", "d == 0");
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535:   const dimension_type expr_space_dim = expr.space_dimension();
+16535:   if (space_dim < expr_space_dim) {
+16535:     throw_dimension_incompatible("affine_image(v, e, d)", "e", expr);
+16535:   }
+16535: 
+16535:   const dimension_type var_space_dim = var.space_dimension();
+16535:   if (space_dim < var_space_dim) {
+16535:     throw_dimension_incompatible("affine_image(v, e, d)", "v", var);
+16535:   }
+16535: 
+16535:   if (is_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   Tmp_Interval_Type expr_value;
+16535:   Tmp_Interval_Type temp0;
+16535:   Tmp_Interval_Type temp1;
+16535:   expr_value.assign(expr.inhomogeneous_term());
+16535:   for (Linear_Expression::const_iterator i = expr.begin(),
+16535:           i_end = expr.end(); i != i_end; ++i) {
+16535:     temp0.assign(*i);
+16535:     temp1.assign(seq[i.variable().id()]);
+16535:     temp0.mul_assign(temp0, temp1);
+16535:     expr_value.add_assign(expr_value, temp0);
+16535:   }
+16535:   if (denominator != 1) {
+16535:     temp0.assign(denominator);
+16535:     expr_value.div_assign(expr_value, temp0);
+16535:   }
+16535:   seq[var.id()].assign(expr_value);
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::affine_form_image(const Variable var,
+16535:                             const Linear_Form<ITV>& lf) {
+16535: 
+16535: 
+16535:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_3121 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<typename ITV::boundary_type> ::is_exact)>) }
+16535: 
+16535:                                                                       ;
+16535: 
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535:   const dimension_type lf_space_dim = lf.space_dimension();
+16535:   if (space_dim < lf_space_dim) {
+16535:     throw_dimension_incompatible("affine_form_image(var, lf)", "lf", lf);
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type var_space_dim = var.space_dimension();
+16535:   if (space_dim < var_space_dim) {
+16535:     throw_dimension_incompatible("affine_form_image(var, lf)", "var", var);
+16535:   }
+16535: 
+16535:   if (is_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   ITV result = lf.inhomogeneous_term();
+16535:   for (dimension_type i = 0; i < lf_space_dim; ++i) {
+16535:     ITV current_addend = lf.coefficient(Variable(i));
+16535:     const ITV& curr_int = seq[i];
+16535:     current_addend *= curr_int;
+16535:     result += current_addend;
+16535:   }
+16535: 
+16535:   seq[var.id()].assign(result);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::affine_preimage(const Variable var,
+16535:                           const Linear_Expression& expr,
+16535:                           Coefficient_traits::const_reference
+16535:                           denominator) {
+16535: 
+16535:   if (denominator == 0) {
+16535:     throw_invalid_argument("affine_preimage(v, e, d)", "d == 0");
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type x_space_dim = space_dimension();
+16535:   const dimension_type expr_space_dim = expr.space_dimension();
+16535:   if (x_space_dim < expr_space_dim) {
+16535:     throw_dimension_incompatible("affine_preimage(v, e, d)", "e", expr);
+16535:   }
+16535: 
+16535:   const dimension_type var_space_dim = var.space_dimension();
+16535:   if (x_space_dim < var_space_dim) {
+16535:     throw_dimension_incompatible("affine_preimage(v, e, d)", "v", var);
+16535:   }
+16535: 
+16535:   if (is_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   const Coefficient& expr_v = expr.coefficient(var);
+16535:   const bool invertible = (expr_v != 0);
+16535:   if (!invertible) {
+16535:     Tmp_Interval_Type expr_value;
+16535:     Tmp_Interval_Type temp0;
+16535:     Tmp_Interval_Type temp1;
+16535:     expr_value.assign(expr.inhomogeneous_term());
+16535:     for (Linear_Expression::const_iterator i = expr.begin(),
+16535:             i_end = expr.end(); i != i_end; ++i) {
+16535:       temp0.assign(*i);
+16535:       temp1.assign(seq[i.variable().id()]);
+16535:       temp0.mul_assign(temp0, temp1);
+16535:       expr_value.add_assign(expr_value, temp0);
+16535:     }
+16535:     if (denominator != 1) {
+16535:       temp0.assign(denominator);
+16535:       expr_value.div_assign(expr_value, temp0);
+16535:     }
+16535:     ITV& x_seq_v = seq[var.id()];
+16535:     expr_value.intersect_assign(x_seq_v);
+16535:     if (expr_value.is_empty()) {
+16535:       set_empty();
+16535:     }
+16535:     else {
+16535:       x_seq_v.assign(UNIVERSE);
+16535:     }
+16535:   }
+16535:   else {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     Linear_Expression inverse;
+16535:     inverse -= expr;
+16535:     inverse += (expr_v + denominator) * var;
+16535:     affine_image(var, inverse, expr_v);
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>
+16535: ::bounded_affine_image(const Variable var,
+16535:                        const Linear_Expression& lb_expr,
+16535:                        const Linear_Expression& ub_expr,
+16535:                        Coefficient_traits::const_reference denominator) {
+16535: 
+16535:   if (denominator == 0) {
+16535:     throw_invalid_argument("bounded_affine_image(v, lb, ub, d)", "d == 0");
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535: 
+16535:   const dimension_type lb_space_dim = lb_expr.space_dimension();
+16535:   if (space_dim < lb_space_dim) {
+16535:     throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)",
+16535:                                  "lb", lb_expr);
+16535:   }
+16535:   const dimension_type ub_space_dim = ub_expr.space_dimension();
+16535:   if (space_dim < ub_space_dim) {
+16535:     throw_dimension_incompatible("bounded_affine_image(v, lb, ub, d)",
+16535:                                  "ub", ub_expr);
+16535:   }
+16535: 
+16535:   const dimension_type var_space_dim = var.space_dimension();
+16535:   if (space_dim < var_space_dim) {
+16535:     throw_dimension_incompatible("affine_image(v, e, d)", "v", var);
+16535:   }
+16535: 
+16535:   if (is_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   if (denominator > 0) {
+16535:     refine_with_constraint(lb_expr <= ub_expr);
+16535:   }
+16535:   else {
+16535:     refine_with_constraint(lb_expr >= ub_expr);
+16535:   }
+16535: 
+16535: 
+16535:   if (lb_expr.coefficient(var) == 0) {
+16535: 
+16535:     generalized_affine_image(var,
+16535:                              LESS_OR_EQUAL,
+16535:                              ub_expr,
+16535:                              denominator);
+16535:     if (denominator > 0) {
+16535:       refine_with_constraint(lb_expr <= denominator*var);
+16535:     }
+16535:     else {
+16535:       refine_with_constraint(denominator*var <= lb_expr);
+16535:     }
+16535:   }
+16535:   else if (ub_expr.coefficient(var) == 0) {
+16535: 
+16535:     generalized_affine_image(var,
+16535:                              GREATER_OR_EQUAL,
+16535:                              lb_expr,
+16535:                              denominator);
+16535:     if (denominator > 0) {
+16535:       refine_with_constraint(denominator*var <= ub_expr);
+16535:     }
+16535:     else {
+16535:       refine_with_constraint(ub_expr <= denominator*var);
+16535:     }
+16535:   }
+16535:   else {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_numer; Parma_Polyhedra_Library::Coefficient& max_numer = holder_max_numer.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_denom; Parma_Polyhedra_Library::Coefficient& max_denom = holder_max_denom.item();
+16535:     bool max_included;
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_numer; Parma_Polyhedra_Library::Coefficient& min_numer = holder_min_numer.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_denom; Parma_Polyhedra_Library::Coefficient& min_denom = holder_min_denom.item();
+16535:     bool min_included;
+16535:     ITV& seq_v = seq[var.id()];
+16535:     if (maximize(ub_expr, max_numer, max_denom, max_included)) {
+16535:       if (minimize(lb_expr, min_numer, min_denom, min_included)) {
+16535: 
+16535: 
+16535: 
+16535:         min_denom *= denominator;
+16535:         Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q1; mpq_class& q1 = holder_q1.item();
+16535:         Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q2; mpq_class& q2 = holder_q2.item();
+16535:         assign_r(q1.get_num(), min_numer, ROUND_NOT_NEEDED);
+16535:         assign_r(q1.get_den(), min_denom, ROUND_NOT_NEEDED);
+16535:         q1.canonicalize();
+16535: 
+16535: 
+16535:         max_denom *= denominator;
+16535:         assign_r(q2.get_num(), max_numer, ROUND_NOT_NEEDED);
+16535:         assign_r(q2.get_den(), max_denom, ROUND_NOT_NEEDED);
+16535:         q2.canonicalize();
+16535: 
+16535:         if (denominator > 0) {
+16535:           Relation_Symbol gr = min_included ? GREATER_OR_EQUAL : GREATER_THAN;
+16535:           Relation_Symbol lr = max_included ? LESS_OR_EQUAL : LESS_THAN;
+16535:           seq_v.build(i_constraint(gr, q1), i_constraint(lr, q2));
+16535:         }
+16535:         else {
+16535:           Relation_Symbol gr = max_included ? GREATER_OR_EQUAL : GREATER_THAN;
+16535:           Relation_Symbol lr = min_included ? LESS_OR_EQUAL : LESS_THAN;
+16535:           seq_v.build(i_constraint(gr, q2), i_constraint(lr, q1));
+16535:         }
+16535:       }
+16535:       else {
+16535: 
+16535: 
+16535: 
+16535:         Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
+16535:         max_denom *= denominator;
+16535:         assign_r(q.get_num(), max_numer, ROUND_NOT_NEEDED);
+16535:         assign_r(q.get_den(), max_denom, ROUND_NOT_NEEDED);
+16535:         q.canonicalize();
+16535:         Relation_Symbol rel = (denominator > 0)
+16535:           ? (max_included ? LESS_OR_EQUAL : LESS_THAN)
+16535:           : (max_included ? GREATER_OR_EQUAL : GREATER_THAN);
+16535:         seq_v.build(i_constraint(rel, q));
+16535:       }
+16535:     }
+16535:     else if (minimize(lb_expr, min_numer, min_denom, min_included)) {
+16535: 
+16535: 
+16535: 
+16535:         min_denom *= denominator;
+16535:         Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
+16535:         assign_r(q.get_num(), min_numer, ROUND_NOT_NEEDED);
+16535:         assign_r(q.get_den(), min_denom, ROUND_NOT_NEEDED);
+16535:         q.canonicalize();
+16535: 
+16535:         Relation_Symbol rel = (denominator > 0)
+16535:           ? (min_included ? GREATER_OR_EQUAL : GREATER_THAN)
+16535:           : (min_included ? LESS_OR_EQUAL : LESS_THAN);
+16535:         seq_v.build(i_constraint(rel, q));
+16535:     }
+16535:     else {
+16535: 
+16535: 
+16535: 
+16535:       seq_v.assign(UNIVERSE);
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>
+16535: ::bounded_affine_preimage(const Variable var,
+16535:                           const Linear_Expression& lb_expr,
+16535:                           const Linear_Expression& ub_expr,
+16535:                           Coefficient_traits::const_reference denominator) {
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535:   if (denominator == 0) {
+16535:     throw_invalid_argument("bounded_affine_preimage(v, lb, ub, d)", "d == 0");
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type var_space_dim = var.space_dimension();
+16535:   if (space_dim < var_space_dim) {
+16535:     throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)",
+16535:                                  "v", var);
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type lb_space_dim = lb_expr.space_dimension();
+16535:   if (space_dim < lb_space_dim) {
+16535:     throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)",
+16535:                                  "lb", lb_expr);
+16535:   }
+16535:   const dimension_type ub_space_dim = ub_expr.space_dimension();
+16535:   if (space_dim < ub_space_dim) {
+16535:     throw_dimension_incompatible("bounded_affine_preimage(v, lb, ub, d)",
+16535:                                  "ub", ub_expr);
+16535:   }
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   const bool negative_denom = (denominator < 0);
+16535:   const Coefficient& lb_var_coeff = lb_expr.coefficient(var);
+16535:   const Coefficient& ub_var_coeff = ub_expr.coefficient(var);
+16535: 
+16535: 
+16535: 
+16535:   if (lb_var_coeff == ub_var_coeff) {
+16535:     if (negative_denom) {
+16535:       refine_with_constraint(lb_expr >= ub_expr);
+16535:     }
+16535:     else {
+16535:       refine_with_constraint(lb_expr <= ub_expr);
+16535:     }
+16535:   }
+16535: 
+16535:   ITV& seq_var = seq[var.id()];
+16535:   if (!seq_var.is_universe()) {
+16535: 
+16535: 
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_pos_denominator; Parma_Polyhedra_Library::Coefficient& pos_denominator = holder_pos_denominator.item();
+16535:     pos_denominator = denominator;
+16535:     if (negative_denom) {
+16535:       neg_assign(pos_denominator, pos_denominator);
+16535:     }
+16535: 
+16535: 
+16535:     bool open_lower = seq_var.lower_is_open();
+16535:     bool unbounded_lower = seq_var.lower_is_boundary_infinity();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_seq_var_lower; mpq_class& q_seq_var_lower = holder_q_seq_var_lower.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer_lower; Parma_Polyhedra_Library::Coefficient& numer_lower = holder_numer_lower.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom_lower; Parma_Polyhedra_Library::Coefficient& denom_lower = holder_denom_lower.item();
+16535:     if (!unbounded_lower) {
+16535:       assign_r(q_seq_var_lower, seq_var.lower(), ROUND_NOT_NEEDED);
+16535:       assign_r(numer_lower, q_seq_var_lower.get_num(), ROUND_NOT_NEEDED);
+16535:       assign_r(denom_lower, q_seq_var_lower.get_den(), ROUND_NOT_NEEDED);
+16535:       if (negative_denom) {
+16535:         neg_assign(denom_lower, denom_lower);
+16535:       }
+16535:       numer_lower *= pos_denominator;
+16535:       seq_var.lower_extend();
+16535:     }
+16535:     bool open_upper = seq_var.upper_is_open();
+16535:     bool unbounded_upper = seq_var.upper_is_boundary_infinity();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_seq_var_upper; mpq_class& q_seq_var_upper = holder_q_seq_var_upper.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_numer_upper; Parma_Polyhedra_Library::Coefficient& numer_upper = holder_numer_upper.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom_upper; Parma_Polyhedra_Library::Coefficient& denom_upper = holder_denom_upper.item();
+16535:     if (!unbounded_upper) {
+16535:       assign_r(q_seq_var_upper, seq_var.upper(), ROUND_NOT_NEEDED);
+16535:       assign_r(numer_upper, q_seq_var_upper.get_num(), ROUND_NOT_NEEDED);
+16535:       assign_r(denom_upper, q_seq_var_upper.get_den(), ROUND_NOT_NEEDED);
+16535:       if (negative_denom) {
+16535:         neg_assign(denom_upper, denom_upper);
+16535:       }
+16535:       numer_upper *= pos_denominator;
+16535:       seq_var.upper_extend();
+16535:     }
+16535: 
+16535:     if (!unbounded_lower) {
+16535: 
+16535: 
+16535: 
+16535:       Linear_Expression revised_lb_expr(ub_expr);
+16535:       revised_lb_expr -= ub_var_coeff * var;
+16535:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_d; Parma_Polyhedra_Library::Coefficient& d = holder_d.item();
+16535:       neg_assign(d, denom_lower);
+16535:       revised_lb_expr *= d;
+16535:       revised_lb_expr += numer_lower;
+16535: 
+16535: 
+16535: 
+16535:       bool included;
+16535:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
+16535:       if (minimize(revised_lb_expr, numer_lower, denom, included)) {
+16535:         denom_lower *= (denom * ub_var_coeff);
+16535:         Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
+16535:         assign_r(q.get_num(), numer_lower, ROUND_NOT_NEEDED);
+16535:         assign_r(q.get_den(), denom_lower, ROUND_NOT_NEEDED);
+16535:         q.canonicalize();
+16535:         if (!included) {
+16535:           open_lower = true;
+16535:         }
+16535:         Relation_Symbol rel;
+16535:         if ((ub_var_coeff >= 0) ? !negative_denom : negative_denom) {
+16535:           rel = open_lower ? GREATER_THAN : GREATER_OR_EQUAL;
+16535:         }
+16535:         else {
+16535:           rel = open_lower ? LESS_THAN : LESS_OR_EQUAL;
+16535:         }
+16535:         seq_var.add_constraint(i_constraint(rel, q));
+16535:         if (seq_var.is_empty()) {
+16535:           set_empty();
+16535:           return;
+16535:         }
+16535:       }
+16535:     }
+16535: 
+16535:     if (!unbounded_upper) {
+16535: 
+16535: 
+16535: 
+16535:       Linear_Expression revised_ub_expr(lb_expr);
+16535:       revised_ub_expr -= lb_var_coeff * var;
+16535:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_d; Parma_Polyhedra_Library::Coefficient& d = holder_d.item();
+16535:       neg_assign(d, denom_upper);
+16535:       revised_ub_expr *= d;
+16535:       revised_ub_expr += numer_upper;
+16535: 
+16535: 
+16535: 
+16535:       bool included;
+16535:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
+16535:       if (maximize(revised_ub_expr, numer_upper, denom, included)) {
+16535:         denom_upper *= (denom * lb_var_coeff);
+16535:         Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q; mpq_class& q = holder_q.item();
+16535:         assign_r(q.get_num(), numer_upper, ROUND_NOT_NEEDED);
+16535:         assign_r(q.get_den(), denom_upper, ROUND_NOT_NEEDED);
+16535:         q.canonicalize();
+16535:         if (!included) {
+16535:           open_upper = true;
+16535:         }
+16535:         Relation_Symbol rel;
+16535:         if ((lb_var_coeff >= 0) ? !negative_denom : negative_denom) {
+16535:           rel = open_upper ? LESS_THAN : LESS_OR_EQUAL;
+16535:         }
+16535:         else {
+16535:           rel = open_upper ? GREATER_THAN : GREATER_OR_EQUAL;
+16535:         }
+16535:         seq_var.add_constraint(i_constraint(rel, q));
+16535:         if (seq_var.is_empty()) {
+16535:           set_empty();
+16535:           return;
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (lb_var_coeff != ub_var_coeff) {
+16535:     if (denominator > 0) {
+16535:       refine_with_constraint(lb_expr <= ub_expr);
+16535:     }
+16535:     else {
+16535:       refine_with_constraint(lb_expr >= ub_expr);
+16535:     }
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>
+16535: ::generalized_affine_image(const Variable var,
+16535:                            const Relation_Symbol relsym,
+16535:                            const Linear_Expression& expr,
+16535:                            Coefficient_traits::const_reference denominator) {
+16535: 
+16535:   if (denominator == 0) {
+16535:     throw_invalid_argument("generalized_affine_image(v, r, e, d)", "d == 0");
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535: 
+16535:   if (space_dim < expr.space_dimension()) {
+16535:     throw_dimension_incompatible("generalized_affine_image(v, r, e, d)",
+16535:                                  "e", expr);
+16535:   }
+16535: 
+16535:   const dimension_type var_space_dim = var.space_dimension();
+16535:   if (space_dim < var_space_dim) {
+16535:     throw_dimension_incompatible("generalized_affine_image(v, r, e, d)",
+16535:                                  "v", var);
+16535:   }
+16535: 
+16535: 
+16535:   if (relsym == NOT_EQUAL) {
+16535:     throw_invalid_argument("generalized_affine_image(v, r, e, d)",
+16535:                            "r is the disequality relation symbol");
+16535:   }
+16535: 
+16535: 
+16535:   affine_image(var, expr, denominator);
+16535: 
+16535:   if (relsym == EQUAL) {
+16535: 
+16535:     return;
+16535:   }
+16535: 
+16535:   if (is_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   ITV& seq_var = seq[var.id()];
+16535:   switch (relsym) {
+16535:   case LESS_OR_EQUAL:
+16535:     seq_var.lower_extend();
+16535:     break;
+16535:   case LESS_THAN:
+16535:     seq_var.lower_extend();
+16535:     if (!seq_var.upper_is_boundary_infinity()) {
+16535:       seq_var.remove_sup();
+16535:     }
+16535:     break;
+16535:   case GREATER_OR_EQUAL:
+16535:     seq_var.upper_extend();
+16535:     break;
+16535:   case GREATER_THAN:
+16535:     seq_var.upper_extend();
+16535:     if (!seq_var.lower_is_boundary_infinity()) {
+16535:       seq_var.remove_inf();
+16535:     }
+16535:     break;
+16535:   default:
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     break;
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>
+16535: ::generalized_affine_preimage(const Variable var,
+16535:                               const Relation_Symbol relsym,
+16535:                               const Linear_Expression& expr,
+16535:                               Coefficient_traits::const_reference denominator)
+16535: {
+16535: 
+16535:   if (denominator == 0) {
+16535:     throw_invalid_argument("generalized_affine_preimage(v, r, e, d)",
+16535:                            "d == 0");
+16535:   }
+16535: 
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535: 
+16535:   if (space_dim < expr.space_dimension()) {
+16535:     throw_dimension_incompatible("generalized_affine_preimage(v, r, e, d)",
+16535:                                  "e", expr);
+16535:   }
+16535: 
+16535:   const dimension_type var_space_dim = var.space_dimension();
+16535:   if (space_dim < var_space_dim) {
+16535:     throw_dimension_incompatible("generalized_affine_preimage(v, r, e, d)",
+16535:                                  "v", var);
+16535:   }
+16535: 
+16535:   if (relsym == NOT_EQUAL) {
+16535:     throw_invalid_argument("generalized_affine_preimage(v, r, e, d)",
+16535:                            "r is the disequality relation symbol");
+16535:   }
+16535: 
+16535: 
+16535:   if (relsym == EQUAL) {
+16535:     affine_preimage(var, expr, denominator);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   Relation_Symbol reversed_relsym;
+16535:   switch (relsym) {
+16535:   case LESS_THAN:
+16535:     reversed_relsym = GREATER_THAN;
+16535:     break;
+16535:   case LESS_OR_EQUAL:
+16535:     reversed_relsym = GREATER_OR_EQUAL;
+16535:     break;
+16535:   case GREATER_OR_EQUAL:
+16535:     reversed_relsym = LESS_OR_EQUAL;
+16535:     break;
+16535:   case GREATER_THAN:
+16535:     reversed_relsym = LESS_THAN;
+16535:     break;
+16535:   default:
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     break;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   const Coefficient& var_coefficient = expr.coefficient(var);
+16535:   if (var_coefficient != 0) {
+16535:     Linear_Expression inverse_expr
+16535:       = expr - (denominator + var_coefficient) * var;
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inverse_denominator; Parma_Polyhedra_Library::Coefficient& inverse_denominator = holder_inverse_denominator.item();
+16535:     neg_assign(inverse_denominator, var_coefficient);
+16535:     Relation_Symbol inverse_relsym
+16535:       = (sgn(denominator) == sgn(inverse_denominator))
+16535:       ? relsym
+16535:       : reversed_relsym;
+16535:     generalized_affine_image(var, inverse_relsym, inverse_expr,
+16535:                              inverse_denominator);
+16535:     return;
+16535:   }
+16535: # 3716 "../../src/Box_templates.hh"
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_numer; Parma_Polyhedra_Library::Coefficient& max_numer = holder_max_numer.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_denom; Parma_Polyhedra_Library::Coefficient& max_denom = holder_max_denom.item();
+16535:   bool max_included;
+16535:   bool bound_above = maximize(denominator*var, max_numer, max_denom, max_included);
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_numer; Parma_Polyhedra_Library::Coefficient& min_numer = holder_min_numer.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_denom; Parma_Polyhedra_Library::Coefficient& min_denom = holder_min_denom.item();
+16535:   bool min_included;
+16535:   bool bound_below = minimize(denominator*var, min_numer, min_denom, min_included);
+16535: 
+16535:   const Relation_Symbol corrected_relsym
+16535:     = (denominator > 0) ? relsym : reversed_relsym;
+16535: 
+16535: 
+16535:   Linear_Expression revised_expr;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_d; Parma_Polyhedra_Library::Coefficient& d = holder_d.item();
+16535:   if (corrected_relsym == LESS_THAN || corrected_relsym == LESS_OR_EQUAL) {
+16535:     if (bound_below) {
+16535:       revised_expr = expr;
+16535:       revised_expr.set_inhomogeneous_term(Coefficient_zero());
+16535:       revised_expr *= d;
+16535:     }
+16535:   }
+16535:   else {
+16535:     if (bound_above) {
+16535:       revised_expr = expr;
+16535:       revised_expr.set_inhomogeneous_term(Coefficient_zero());
+16535:       revised_expr *= max_denom;
+16535:     }
+16535:   }
+16535: 
+16535:   switch (corrected_relsym) {
+16535:   case LESS_THAN:
+16535:     if (bound_below) {
+16535:       refine_with_constraint(min_numer < revised_expr);
+16535:     }
+16535:     break;
+16535:   case LESS_OR_EQUAL:
+16535:     if (bound_below) {
+16535:       (min_included)
+16535:         ? refine_with_constraint(min_numer <= revised_expr)
+16535:         : refine_with_constraint(min_numer < revised_expr);
+16535:     }
+16535:     break;
+16535:   case GREATER_OR_EQUAL:
+16535:     if (bound_above) {
+16535:       (max_included)
+16535:         ? refine_with_constraint(max_numer >= revised_expr)
+16535:         : refine_with_constraint(max_numer > revised_expr);
+16535:     }
+16535:     break;
+16535:   case GREATER_THAN:
+16535:     if (bound_above) {
+16535:       refine_with_constraint(max_numer > revised_expr);
+16535:     }
+16535:     break;
+16535:   default:
+16535: 
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     break;
+16535:   }
+16535: 
+16535:   if (is_empty()) {
+16535:     return;
+16535:   }
+16535:   ITV& seq_v = seq[var.id()];
+16535:   seq_v.assign(UNIVERSE);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>
+16535: ::generalized_affine_image(const Linear_Expression& lhs,
+16535:                            const Relation_Symbol relsym,
+16535:                            const Linear_Expression& rhs) {
+16535: 
+16535: 
+16535: 
+16535:   dimension_type lhs_space_dim = lhs.space_dimension();
+16535:   const dimension_type space_dim = space_dimension();
+16535:   if (space_dim < lhs_space_dim) {
+16535:     throw_dimension_incompatible("generalized_affine_image(e1, r, e2)",
+16535:                                  "e1", lhs);
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type rhs_space_dim = rhs.space_dimension();
+16535:   if (space_dim < rhs_space_dim) {
+16535:     throw_dimension_incompatible("generalized_affine_image(e1, r, e2)",
+16535:                                  "e2", rhs);
+16535:   }
+16535: 
+16535: 
+16535:   if (relsym == NOT_EQUAL) {
+16535:     throw_invalid_argument("generalized_affine_image(e1, r, e2)",
+16535:                            "r is the disequality relation symbol");
+16535:   }
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_numer; Parma_Polyhedra_Library::Coefficient& max_numer = holder_max_numer.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_denom; Parma_Polyhedra_Library::Coefficient& max_denom = holder_max_denom.item();
+16535:   bool max_included;
+16535:   bool max_rhs = maximize(rhs, max_numer, max_denom, max_included);
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_numer; Parma_Polyhedra_Library::Coefficient& min_numer = holder_min_numer.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_denom; Parma_Polyhedra_Library::Coefficient& min_denom = holder_min_denom.item();
+16535:   bool min_included;
+16535:   bool min_rhs = minimize(rhs, min_numer, min_denom, min_included);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool has_var = false;
+16535:   dimension_type has_var_id = lhs.last_nonzero();
+16535: 
+16535:   if (has_var_id != 0) {
+16535:     has_var = true;
+16535:     --has_var_id;
+16535:     dimension_type other_var = lhs.first_nonzero(1, has_var_id + 1);
+16535:     --other_var;
+16535:     if (other_var != has_var_id) {
+16535: 
+16535: 
+16535:       ITV& seq_var = seq[has_var_id];
+16535:       seq_var.assign(UNIVERSE);
+16535: 
+16535: 
+16535: 
+16535:       ITV& seq_i = seq[other_var];
+16535:       seq_i.assign(UNIVERSE);
+16535:       ((void) 0);
+16535:       return;
+16535:     }
+16535:   }
+16535: 
+16535:   if (has_var) {
+16535: 
+16535:     ITV& seq_var = seq[has_var_id];
+16535: 
+16535: 
+16535: 
+16535:     const Coefficient& inhomo = lhs.inhomogeneous_term();
+16535:     const Coefficient& coeff = lhs.coefficient(Variable(has_var_id));
+16535:     Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_max; mpq_class& q_max = holder_q_max.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<mpq_class> holder_q_min; mpq_class& q_min = holder_q_min.item();
+16535:     if (max_rhs) {
+16535:       max_numer -= inhomo * max_denom;
+16535:       max_denom *= coeff;
+16535:       assign_r(q_max.get_num(), max_numer, ROUND_NOT_NEEDED);
+16535:       assign_r(q_max.get_den(), max_denom, ROUND_NOT_NEEDED);
+16535:       q_max.canonicalize();
+16535:     }
+16535:     if (min_rhs) {
+16535:       min_numer -= inhomo * min_denom;
+16535:       min_denom *= coeff;
+16535:       assign_r(q_min.get_num(), min_numer, ROUND_NOT_NEEDED);
+16535:       assign_r(q_min.get_den(), min_denom, ROUND_NOT_NEEDED);
+16535:       q_min.canonicalize();
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:     if (coeff > 0) {
+16535: 
+16535:       switch (relsym) {
+16535:       case LESS_OR_EQUAL:
+16535:         if (max_rhs) {
+16535:           Relation_Symbol rel = max_included ? LESS_OR_EQUAL : LESS_THAN;
+16535:           seq_var.build(i_constraint(rel, q_max));
+16535:         }
+16535:         else {
+16535:           seq_var.assign(UNIVERSE);
+16535:         }
+16535:         break;
+16535:       case LESS_THAN:
+16535:         if (max_rhs) {
+16535:           seq_var.build(i_constraint(LESS_THAN, q_max));
+16535:         }
+16535:         else {
+16535:           seq_var.assign(UNIVERSE);
+16535:         }
+16535:         break;
+16535:       case EQUAL:
+16535:         {
+16535:           I_Constraint<mpq_class> l;
+16535:           I_Constraint<mpq_class> u;
+16535:           if (max_rhs) {
+16535:             u.set(max_included ? LESS_OR_EQUAL : LESS_THAN, q_max);
+16535:           }
+16535:           if (min_rhs) {
+16535:             l.set(min_included ? GREATER_OR_EQUAL : GREATER_THAN, q_min);
+16535:           }
+16535:           seq_var.build(l, u);
+16535:           break;
+16535:         }
+16535:       case GREATER_OR_EQUAL:
+16535:         if (min_rhs) {
+16535:           Relation_Symbol rel = min_included ? GREATER_OR_EQUAL : GREATER_THAN;
+16535:           seq_var.build(i_constraint(rel, q_min));
+16535:         }
+16535:         else {
+16535:           seq_var.assign(UNIVERSE);
+16535:         }
+16535:         break;
+16535:       case GREATER_THAN:
+16535:         if (min_rhs) {
+16535:           seq_var.build(i_constraint(GREATER_THAN, q_min));
+16535:         }
+16535:         else {
+16535:           seq_var.assign(UNIVERSE);
+16535:         }
+16535:         break;
+16535:       default:
+16535: 
+16535:         Parma_Polyhedra_Library::ppl_unreachable();
+16535:         break;
+16535:       }
+16535:     }
+16535:     else {
+16535: 
+16535:       switch (relsym) {
+16535:       case GREATER_OR_EQUAL:
+16535:         if (min_rhs) {
+16535:           Relation_Symbol rel = min_included ? LESS_OR_EQUAL : LESS_THAN;
+16535:           seq_var.build(i_constraint(rel, q_min));
+16535:         }
+16535:         else {
+16535:           seq_var.assign(UNIVERSE);
+16535:         }
+16535:         break;
+16535:       case GREATER_THAN:
+16535:         if (min_rhs) {
+16535:           seq_var.build(i_constraint(LESS_THAN, q_min));
+16535:         }
+16535:         else {
+16535:           seq_var.assign(UNIVERSE);
+16535:         }
+16535:         break;
+16535:       case EQUAL:
+16535:         {
+16535:           I_Constraint<mpq_class> l;
+16535:           I_Constraint<mpq_class> u;
+16535:           if (max_rhs) {
+16535:             l.set(max_included ? GREATER_OR_EQUAL : GREATER_THAN, q_max);
+16535:           }
+16535:           if (min_rhs) {
+16535:             u.set(min_included ? LESS_OR_EQUAL : LESS_THAN, q_min);
+16535:           }
+16535:           seq_var.build(l, u);
+16535:           break;
+16535:         }
+16535:       case LESS_OR_EQUAL:
+16535:         if (max_rhs) {
+16535:           Relation_Symbol rel = max_included ? GREATER_OR_EQUAL : GREATER_THAN;
+16535:           seq_var.build(i_constraint(rel, q_max));
+16535:         }
+16535:         else {
+16535:           seq_var.assign(UNIVERSE);
+16535:         }
+16535:         break;
+16535:       case LESS_THAN:
+16535:         if (max_rhs) {
+16535:           seq_var.build(i_constraint(GREATER_THAN, q_max));
+16535:         }
+16535:         else {
+16535:           seq_var.assign(UNIVERSE);
+16535:         }
+16535:         break;
+16535:       default:
+16535: 
+16535:         Parma_Polyhedra_Library::ppl_unreachable();
+16535:         break;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   else {
+16535: 
+16535: 
+16535:     const Coefficient& inhomo = lhs.inhomogeneous_term();
+16535:     switch (relsym) {
+16535:     case LESS_THAN:
+16535:       refine_with_constraint(inhomo < rhs);
+16535:       break;
+16535:     case LESS_OR_EQUAL:
+16535:       refine_with_constraint(inhomo <= rhs);
+16535:       break;
+16535:     case EQUAL:
+16535:       refine_with_constraint(inhomo == rhs);
+16535:       break;
+16535:     case GREATER_OR_EQUAL:
+16535:       refine_with_constraint(inhomo >= rhs);
+16535:       break;
+16535:     case GREATER_THAN:
+16535:       refine_with_constraint(inhomo > rhs);
+16535:       break;
+16535:     default:
+16535: 
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       break;
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::generalized_affine_preimage(const Linear_Expression& lhs,
+16535:                                       const Relation_Symbol relsym,
+16535:                                       const Linear_Expression& rhs) {
+16535: 
+16535: 
+16535: 
+16535:   dimension_type lhs_space_dim = lhs.space_dimension();
+16535:   const dimension_type space_dim = space_dimension();
+16535:   if (space_dim < lhs_space_dim) {
+16535:     throw_dimension_incompatible("generalized_affine_image(e1, r, e2)",
+16535:                                  "e1", lhs);
+16535:   }
+16535: 
+16535: 
+16535:   const dimension_type rhs_space_dim = rhs.space_dimension();
+16535:   if (space_dim < rhs_space_dim) {
+16535:     throw_dimension_incompatible("generalized_affine_image(e1, r, e2)",
+16535:                                  "e2", rhs);
+16535:   }
+16535: 
+16535: 
+16535:   if (relsym == NOT_EQUAL) {
+16535:     throw_invalid_argument("generalized_affine_image(e1, r, e2)",
+16535:                            "r is the disequality relation symbol");
+16535:   }
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   Linear_Expression revised_lhs = lhs;
+16535:   Linear_Expression revised_rhs = rhs;
+16535:   for (Linear_Expression::const_iterator i = lhs.begin(),
+16535:          i_end = lhs.end(); i != i_end; ++i) {
+16535:     const Variable var = i.variable();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_tmp; Parma_Polyhedra_Library::Coefficient& tmp = holder_tmp.item();
+16535:     tmp = *i;
+16535:     tmp += rhs.coefficient(var);
+16535:     sub_mul_assign(revised_rhs, tmp, var);
+16535:     sub_mul_assign(revised_lhs, tmp, var);
+16535:   }
+16535:   generalized_affine_image(revised_lhs, relsym, revised_rhs);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: template <typename T, typename Iterator>
+16535: typename Enable_If<Is_Same<T, Box<ITV> >::value
+16535:                    && Is_Same_Or_Derived<Interval_Base, ITV>::value,
+16535:                    void>::type
+16535: Box<ITV>::CC76_widening_assign(const T& y, Iterator first, Iterator last) {
+16535:   if (y.is_empty()) {
+16535:     return;
+16535:   }
+16535:   for (dimension_type i = seq.size(); i-- > 0; ) {
+16535:     seq[i].CC76_widening_assign(y.seq[i], first, last);
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: template <typename T>
+16535: typename Enable_If<Is_Same<T, Box<ITV> >::value
+16535:                    && Is_Same_Or_Derived<Interval_Base, ITV>::value,
+16535:                    void>::type
+16535: Box<ITV>::CC76_widening_assign(const T& y, unsigned* tp) {
+16535:   static typename ITV::boundary_type stop_points[] = {
+16535:     typename ITV::boundary_type(-2),
+16535:     typename ITV::boundary_type(-1),
+16535:     typename ITV::boundary_type(0),
+16535:     typename ITV::boundary_type(1),
+16535:     typename ITV::boundary_type(2)
+16535:   };
+16535: 
+16535:   Box& x = *this;
+16535: 
+16535:   if (tp != 0 && *tp > 0) {
+16535:     Box<ITV> x_tmp(x);
+16535:     x_tmp.CC76_widening_assign(y, 0);
+16535: 
+16535:     if (!x.contains(x_tmp)) {
+16535:       --(*tp);
+16535:     }
+16535:     return;
+16535:   }
+16535:   x.CC76_widening_assign(y,
+16535:                          stop_points,
+16535:                          stop_points
+16535:                          + sizeof(stop_points)/sizeof(stop_points[0]));
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::get_limiting_box(const Constraint_System& cs,
+16535:                            Box& limiting_box) const {
+16535: 
+16535:   ((void) 0);
+16535: 
+16535:   for (Constraint_System::const_iterator cs_i = cs.begin(),
+16535:          cs_end = cs.end(); cs_i != cs_end; ++cs_i) {
+16535:     const Constraint& c = *cs_i;
+16535:     dimension_type c_num_vars = 0;
+16535:     dimension_type c_only_var = 0;
+16535: 
+16535:     if (!Box_Helpers::extract_interval_constraint(c, c_num_vars, c_only_var)) {
+16535:       continue;
+16535:     }
+16535: 
+16535:     if (c_num_vars != 0) {
+16535: 
+16535: 
+16535:       const Coefficient& n = c.inhomogeneous_term();
+16535:       const Coefficient& d = c.coefficient(Variable(c_only_var));
+16535:       if (interval_relation(seq[c_only_var], c.type(), n, d)
+16535:           == Poly_Con_Relation::is_included()) {
+16535:         limiting_box.add_interval_constraint_no_check(c_only_var, c.type(),
+16535:                                                       n, d);
+16535:       }
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::limited_CC76_extrapolation_assign(const Box& y,
+16535:                                             const Constraint_System& cs,
+16535:                                             unsigned* tp) {
+16535:   Box& x = *this;
+16535:   const dimension_type space_dim = x.space_dimension();
+16535: 
+16535: 
+16535:   if (space_dim != y.space_dimension()) {
+16535:     throw_dimension_incompatible("limited_CC76_extrapolation_assign(y, cs)",
+16535:                                   y);
+16535:   }
+16535: 
+16535:   const dimension_type cs_space_dim = cs.space_dimension();
+16535:   if (space_dim < cs_space_dim) {
+16535:     throw_constraint_incompatible("limited_CC76_extrapolation_assign(y, cs)");
+16535:   }
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535:   if (marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   if (y.marked_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   Box limiting_box(space_dim, UNIVERSE);
+16535:   get_limiting_box(cs, limiting_box);
+16535: 
+16535:   x.CC76_widening_assign(y, tp);
+16535: 
+16535: 
+16535:   intersection_assign(limiting_box);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: template <typename T>
+16535: typename Enable_If<Is_Same<T, Box<ITV> >::value
+16535:                    && Is_Same_Or_Derived<Interval_Base, ITV>::value,
+16535:                    void>::type
+16535: Box<ITV>::CC76_narrowing_assign(const T& y) {
+16535:   const dimension_type space_dim = space_dimension();
+16535: 
+16535: 
+16535:   if (space_dim != y.space_dimension()) {
+16535:     throw_dimension_incompatible("CC76_narrowing_assign(y)", y);
+16535:   }
+16535: 
+16535: 
+16535:   ((void) 0);
+16535: 
+16535: 
+16535: 
+16535:   if (space_dim == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535:   if (y.is_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   if (is_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   for (dimension_type i = space_dim; i-- > 0; ) {
+16535:     ITV& x_i = seq[i];
+16535:     const ITV& y_i = y.seq[i];
+16535:     if (!x_i.lower_is_boundary_infinity()
+16535:         && !y_i.lower_is_boundary_infinity()
+16535:         && x_i.lower() != y_i.lower()) {
+16535:       x_i.lower() = y_i.lower();
+16535:     }
+16535:     if (!x_i.upper_is_boundary_infinity()
+16535:         && !y_i.upper_is_boundary_infinity()
+16535:         && x_i.upper() != y_i.upper()) {
+16535:       x_i.upper() = y_i.upper();
+16535:     }
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: Constraint_System
+16535: Box<ITV>::constraints() const {
+16535:   const dimension_type space_dim = space_dimension();
+16535:   Constraint_System cs;
+16535:   cs.set_space_dimension(space_dim);
+16535: 
+16535:   if (space_dim == 0) {
+16535:     if (marked_empty()) {
+16535:       cs = Constraint_System::zero_dim_empty();
+16535:     }
+16535:     return cs;
+16535:   }
+16535: 
+16535:   if (marked_empty()) {
+16535:     cs.insert(Constraint::zero_dim_false());
+16535:     return cs;
+16535:   }
+16535: 
+16535:   for (dimension_type k = 0; k < space_dim; ++k) {
+16535:     const Variable v_k = Variable(k);
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_n; Parma_Polyhedra_Library::Coefficient& n = holder_n.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_d; Parma_Polyhedra_Library::Coefficient& d = holder_d.item();
+16535:     bool closed = false;
+16535:     if (has_lower_bound(v_k, n, d, closed)) {
+16535:       if (closed) {
+16535:         cs.insert(d * v_k >= n);
+16535:       }
+16535:       else {
+16535:         cs.insert(d * v_k > n);
+16535:       }
+16535:     }
+16535:     if (has_upper_bound(v_k, n, d, closed)) {
+16535:       if (closed) {
+16535:         cs.insert(d * v_k <= n);
+16535:       }
+16535:       else {
+16535:         cs.insert(d * v_k < n);
+16535:       }
+16535:     }
+16535:   }
+16535:   return cs;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: Constraint_System
+16535: Box<ITV>::minimized_constraints() const {
+16535:   const dimension_type space_dim = space_dimension();
+16535:   Constraint_System cs;
+16535:   cs.set_space_dimension(space_dim);
+16535: 
+16535:   if (space_dim == 0) {
+16535:     if (marked_empty()) {
+16535:       cs = Constraint_System::zero_dim_empty();
+16535:     }
+16535:     return cs;
+16535:   }
+16535: 
+16535: 
+16535:   if (is_empty()) {
+16535:     cs.insert(Constraint::zero_dim_false());
+16535:     return cs;
+16535:   }
+16535: 
+16535:   for (dimension_type k = 0; k < space_dim; ++k) {
+16535:     const Variable v_k = Variable(k);
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_n; Parma_Polyhedra_Library::Coefficient& n = holder_n.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_d; Parma_Polyhedra_Library::Coefficient& d = holder_d.item();
+16535:     bool closed = false;
+16535:     if (has_lower_bound(v_k, n, d, closed)) {
+16535:       if (closed) {
+16535: 
+16535:         if (seq[k].is_singleton()) {
+16535:           cs.insert(d * v_k == n);
+16535:           continue;
+16535:         }
+16535:         else {
+16535:           cs.insert(d * v_k >= n);
+16535:         }
+16535:       }
+16535:       else {
+16535:         cs.insert(d * v_k > n);
+16535:       }
+16535:     }
+16535:     if (has_upper_bound(v_k, n, d, closed)) {
+16535:       if (closed) {
+16535:         cs.insert(d * v_k <= n);
+16535:       }
+16535:       else {
+16535:         cs.insert(d * v_k < n);
+16535:       }
+16535:     }
+16535:   }
+16535:   return cs;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: Congruence_System
+16535: Box<ITV>::congruences() const {
+16535:   const dimension_type space_dim = space_dimension();
+16535:   Congruence_System cgs(space_dim);
+16535: 
+16535:   if (space_dim == 0) {
+16535:     if (marked_empty()) {
+16535:       cgs = Congruence_System::zero_dim_empty();
+16535:     }
+16535:     return cgs;
+16535:   }
+16535: 
+16535: 
+16535:   if (is_empty()) {
+16535:     cgs.insert(Congruence::zero_dim_false());
+16535:     return cgs;
+16535:   }
+16535: 
+16535:   for (dimension_type k = 0; k < space_dim; ++k) {
+16535:     const Variable v_k = Variable(k);
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_n; Parma_Polyhedra_Library::Coefficient& n = holder_n.item();
+16535:     Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_d; Parma_Polyhedra_Library::Coefficient& d = holder_d.item();
+16535:     bool closed = false;
+16535:     if (has_lower_bound(v_k, n, d, closed) && closed) {
+16535: 
+16535:       if (seq[k].is_singleton()) {
+16535:         cgs.insert((d * v_k %= n) / 0);
+16535:       }
+16535:     }
+16535:   }
+16535:   return cgs;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: memory_size_type
+16535: Box<ITV>::external_memory_in_bytes() const {
+16535:   memory_size_type n = seq.capacity() * sizeof(ITV);
+16535:   for (dimension_type k = seq.size(); k-- > 0; ) {
+16535:     n += seq[k].external_memory_in_bytes();
+16535:   }
+16535:   return n;
+16535: }
+16535: 
+16535: 
+16535: template <typename ITV>
+16535: std::ostream&
+16535: IO_Operators::operator<<(std::ostream& s, const Box<ITV>& box) {
+16535:   if (box.is_empty()) {
+16535:     s << "false";
+16535:   }
+16535:   else if (box.is_universe()) {
+16535:     s << "true";
+16535:   }
+16535:   else {
+16535:     for (dimension_type k = 0,
+16535:            space_dim = box.space_dimension(); k < space_dim; ) {
+16535:       s << Variable(k) << " in " << box[k];
+16535:       ++k;
+16535:       if (k < space_dim) {
+16535:         s << ", ";
+16535:       }
+16535:       else {
+16535:         break;
+16535:       }
+16535:     }
+16535:   }
+16535:   return s;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::ascii_dump(std::ostream& s) const {
+16535:   const char separator = ' ';
+16535:   status.ascii_dump(s);
+16535:   const dimension_type space_dim = space_dimension();
+16535:   s << "space_dim" << separator << space_dim;
+16535:   s << "\n";
+16535:   for (dimension_type i = 0; i < space_dim; ++i) {
+16535:     seq[i].ascii_dump(s);
+16535:   }
+16535: }
+16535: 
+16535: template <typename ITV> void Box<ITV>::ascii_dump() const { ascii_dump(std::cerr); } template <typename ITV> void Box<ITV>::print() const { using IO_Operators::operator<<; std::cerr << *this; }
+16535: 
+16535: template <typename ITV>
+16535: bool
+16535: Box<ITV>::ascii_load(std::istream& s) {
+16535:   if (!status.ascii_load(s)) {
+16535:     return false;
+16535:   }
+16535:   std::string str;
+16535:   dimension_type space_dim;
+16535:   if (!(s >> str) || str != "space_dim") {
+16535:     return false;
+16535:   }
+16535:   if (!(s >> space_dim)) {
+16535:     return false;
+16535:   }
+16535:   seq.clear();
+16535:   ITV seq_i;
+16535:   for (dimension_type i = 0; i < space_dim; ++i) {
+16535:     if (seq_i.ascii_load(s)) {
+16535:       seq.push_back(seq_i);
+16535:     }
+16535:     else {
+16535:       return false;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::throw_dimension_incompatible(const char* method,
+16535:                                        const Box& y) const {
+16535:   std::ostringstream s;
+16535:   s << "PPL::Box::" << method << ":" << std::endl
+16535:     << "this->space_dimension() == " << this->space_dimension()
+16535:     << ", y->space_dimension() == " << y.space_dimension() << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>
+16535: ::throw_dimension_incompatible(const char* method,
+16535:                                dimension_type required_dim) const {
+16535:   std::ostringstream s;
+16535:   s << "PPL::Box::" << method << ":" << std::endl
+16535:     << "this->space_dimension() == " << space_dimension()
+16535:     << ", required dimension == " << required_dim << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::throw_dimension_incompatible(const char* method,
+16535:                                        const Constraint& c) const {
+16535:   std::ostringstream s;
+16535:   s << "PPL::Box::" << method << ":" << std::endl
+16535:     << "this->space_dimension() == " << space_dimension()
+16535:     << ", c->space_dimension == " << c.space_dimension() << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::throw_dimension_incompatible(const char* method,
+16535:                                        const Congruence& cg) const {
+16535:   std::ostringstream s;
+16535:   s << "PPL::Box::" << method << ":" << std::endl
+16535:     << "this->space_dimension() == " << space_dimension()
+16535:     << ", cg->space_dimension == " << cg.space_dimension() << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::throw_dimension_incompatible(const char* method,
+16535:                                        const Constraint_System& cs) const {
+16535:   std::ostringstream s;
+16535:   s << "PPL::Box::" << method << ":" << std::endl
+16535:     << "this->space_dimension() == " << space_dimension()
+16535:     << ", cs->space_dimension == " << cs.space_dimension() << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::throw_dimension_incompatible(const char* method,
+16535:                                        const Congruence_System& cgs) const {
+16535:   std::ostringstream s;
+16535:   s << "PPL::Box::" << method << ":" << std::endl
+16535:     << "this->space_dimension() == " << space_dimension()
+16535:     << ", cgs->space_dimension == " << cgs.space_dimension() << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::throw_dimension_incompatible(const char* method,
+16535:                                        const Generator& g) const {
+16535:   std::ostringstream s;
+16535:   s << "PPL::Box::" << method << ":" << std::endl
+16535:     << "this->space_dimension() == " << space_dimension()
+16535:     << ", g->space_dimension == " << g.space_dimension() << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::throw_constraint_incompatible(const char* method) {
+16535:   std::ostringstream s;
+16535:   s << "PPL::Box::" << method << ":" << std::endl
+16535:     << "the constraint is incompatible.";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::throw_expression_too_complex(const char* method,
+16535:                                        const Linear_Expression& le) {
+16535:   using namespace IO_Operators;
+16535:   std::ostringstream s;
+16535:   s << "PPL::Box::" << method << ":" << std::endl
+16535:     << le << " is too complex.";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::throw_dimension_incompatible(const char* method,
+16535:                                        const char* le_name,
+16535:                                        const Linear_Expression& le) const {
+16535:   std::ostringstream s;
+16535:   s << "PPL::Box::" << method << ":" << std::endl
+16535:     << "this->space_dimension() == " << space_dimension()
+16535:     << ", " << le_name << "->space_dimension() == "
+16535:     << le.space_dimension() << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: template <typename C>
+16535: void
+16535: Box<ITV>::throw_dimension_incompatible(const char* method,
+16535:                                        const char* lf_name,
+16535:                                        const Linear_Form<C>& lf) const {
+16535:   std::ostringstream s;
+16535:   s << "PPL::Box::" << method << ":\n"
+16535:     << "this->space_dimension() == " << space_dimension()
+16535:     << ", " << lf_name << "->space_dimension() == "
+16535:     << lf.space_dimension() << ".";
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: template <typename ITV>
+16535: void
+16535: Box<ITV>::throw_invalid_argument(const char* method, const char* reason) {
+16535:   std::ostringstream s;
+16535:   s << "PPL::Box::" << method << ":" << std::endl
+16535:     << reason;
+16535:   throw std::invalid_argument(s.str());
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename Specialization,
+16535:           typename Temp, typename To, typename ITV>
+16535: bool
+16535: l_m_distance_assign(Checked_Number<To, Extended_Number_Policy>& r,
+16535:                     const Box<ITV>& x, const Box<ITV>& y,
+16535:                     const Rounding_Dir dir,
+16535:                     Temp& tmp0, Temp& tmp1, Temp& tmp2) {
+16535:   const dimension_type x_space_dim = x.space_dimension();
+16535: 
+16535:   if (x_space_dim != y.space_dimension()) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (x_space_dim == 0) {
+16535:     if (x.marked_empty() == y.marked_empty()) {
+16535:       assign_r(r, 0, ROUND_NOT_NEEDED);
+16535:     }
+16535:     else {
+16535:       assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:     }
+16535:     return true;
+16535:   }
+16535: 
+16535: 
+16535:   (void) x.is_empty();
+16535:   (void) y.is_empty();
+16535: 
+16535: 
+16535:   if (x.marked_empty() || y.marked_empty()) {
+16535:     if (x.marked_empty() == y.marked_empty()) {
+16535:       assign_r(r, 0, ROUND_NOT_NEEDED);
+16535:       return true;
+16535:     }
+16535:     else {
+16535:       goto pinf;
+16535:     }
+16535:   }
+16535: 
+16535:   assign_r(tmp0, 0, ROUND_NOT_NEEDED);
+16535:   for (dimension_type i = x_space_dim; i-- > 0; ) {
+16535:     const ITV& x_i = x.seq[i];
+16535:     const ITV& y_i = y.seq[i];
+16535: 
+16535:     if (x_i.lower_is_boundary_infinity()) {
+16535:       if (!y_i.lower_is_boundary_infinity()) {
+16535:         goto pinf;
+16535:       }
+16535:     }
+16535:     else if (y_i.lower_is_boundary_infinity()) {
+16535:       goto pinf;
+16535:     }
+16535:     else {
+16535:       const Temp* tmp1p;
+16535:       const Temp* tmp2p;
+16535:       if (x_i.lower() > y_i.lower()) {
+16535:         maybe_assign(tmp1p, tmp1, x_i.lower(), dir);
+16535:         maybe_assign(tmp2p, tmp2, y_i.lower(), inverse(dir));
+16535:       }
+16535:       else {
+16535:         maybe_assign(tmp1p, tmp1, y_i.lower(), dir);
+16535:         maybe_assign(tmp2p, tmp2, x_i.lower(), inverse(dir));
+16535:       }
+16535:       sub_assign_r(tmp1, *tmp1p, *tmp2p, dir);
+16535:       ((void) 0);
+16535:       Specialization::combine(tmp0, tmp1, dir);
+16535:     }
+16535: 
+16535:     if (x_i.upper_is_boundary_infinity()) {
+16535:       if (y_i.upper_is_boundary_infinity()) {
+16535:         continue;
+16535:       }
+16535:       else {
+16535:         goto pinf;
+16535:       }
+16535:     }
+16535:     else if (y_i.upper_is_boundary_infinity()) {
+16535:       goto pinf;
+16535:     }
+16535:     else {
+16535:       const Temp* tmp1p;
+16535:       const Temp* tmp2p;
+16535:       if (x_i.upper() > y_i.upper()) {
+16535:         maybe_assign(tmp1p, tmp1, x_i.upper(), dir);
+16535:         maybe_assign(tmp2p, tmp2, y_i.upper(), inverse(dir));
+16535:       }
+16535:       else {
+16535:         maybe_assign(tmp1p, tmp1, y_i.upper(), dir);
+16535:         maybe_assign(tmp2p, tmp2, x_i.upper(), inverse(dir));
+16535:       }
+16535:       sub_assign_r(tmp1, *tmp1p, *tmp2p, dir);
+16535:       ((void) 0);
+16535:       Specialization::combine(tmp0, tmp1, dir);
+16535:     }
+16535:   }
+16535:   Specialization::finalize(tmp0, dir);
+16535:   assign_r(r, tmp0, dir);
+16535:   return true;
+16535: 
+16535:  pinf:
+16535:   assign_r(r, PLUS_INFINITY, ROUND_NOT_NEEDED);
+16535:   return true;
+16535: }
+16535: 
+16535: }
+16535: # 2287 "../../src/Box_defs.hh" 2
+16535: # 30 "../../src/Linear_Form_templates.hh" 2
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/cmath" 1 3
+16535: # 39 "/usr/include/c++/8/cmath" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/cmath" 3
+16535: # 33 "../../src/Linear_Form_templates.hh" 2
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>::Linear_Form(const Variable v)
+16535:   : vec() {
+16535:   const dimension_type space_dim = v.space_dimension();
+16535:   if (space_dim > max_space_dimension()) {
+16535:     throw std::length_error("Linear_Form<C>::"
+16535:                             "Linear_Form(v):\n"
+16535:                             "v exceeds the maximum allowed "
+16535:                             "space dimension.");
+16535:   }
+16535:   vec.reserve(compute_capacity(space_dim+1, vec_type().max_size()));
+16535:   vec.resize(space_dim+1, zero);
+16535:   vec[v.space_dimension()] = C(typename C::boundary_type(1));
+16535: }
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>::Linear_Form(const Variable v, const Variable w)
+16535:   : vec() {
+16535:   const dimension_type v_space_dim = v.space_dimension();
+16535:   const dimension_type w_space_dim = w.space_dimension();
+16535:   const dimension_type space_dim = std::max(v_space_dim, w_space_dim);
+16535:   if (space_dim > max_space_dimension()) {
+16535:     throw std::length_error("Linear_Form<C>::"
+16535:                             "Linear_Form(v, w):\n"
+16535:                             "v or w exceed the maximum allowed "
+16535:                             "space dimension.");
+16535:   }
+16535:   vec.reserve(compute_capacity(space_dim+1, vec_type().max_size()));
+16535:   vec.resize(space_dim+1, zero);
+16535:   if (v_space_dim != w_space_dim) {
+16535:     vec[v_space_dim] = C(typename C::boundary_type(1));
+16535:     vec[w_space_dim] = C(typename C::boundary_type(-1));
+16535:   }
+16535: }
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>::Linear_Form(const Linear_Expression& e)
+16535:   : vec() {
+16535:   const dimension_type space_dim = e.space_dimension();
+16535:   if (space_dim > max_space_dimension()) {
+16535:     throw std::length_error("Linear_Form<C>::"
+16535:                             "Linear_Form(e):\n"
+16535:                             "e exceeds the maximum allowed "
+16535:                             "space dimension.");
+16535:   }
+16535:   vec.reserve(compute_capacity(space_dim+1, vec_type().max_size()));
+16535:   vec.resize(space_dim+1);
+16535:   for (dimension_type i = space_dim; i-- > 0; )
+16535:     vec[i+1] = e.coefficient(Variable(i));
+16535:   vec[0] = e.inhomogeneous_term();
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>
+16535: operator+(const Linear_Form<C>& f1, const Linear_Form<C>& f2) {
+16535:   dimension_type f1_size = f1.size();
+16535:   dimension_type f2_size = f2.size();
+16535:   dimension_type min_size;
+16535:   dimension_type max_size;
+16535:   const Linear_Form<C>* p_e_max;
+16535:   if (f1_size > f2_size) {
+16535:     min_size = f2_size;
+16535:     max_size = f1_size;
+16535:     p_e_max = &f1;
+16535:   }
+16535:   else {
+16535:     min_size = f1_size;
+16535:     max_size = f2_size;
+16535:     p_e_max = &f2;
+16535:   }
+16535: 
+16535:   Linear_Form<C> r(max_size, false);
+16535:   dimension_type i = max_size;
+16535:   while (i > min_size) {
+16535:     --i;
+16535:     r[i] = p_e_max->vec[i];
+16535:   }
+16535:   while (i > 0) {
+16535:     --i;
+16535:     r[i] = f1[i];
+16535:     r[i] += f2[i];
+16535:   }
+16535:   return r;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>
+16535: operator+(const Variable v, const Linear_Form<C>& f) {
+16535:   const dimension_type v_space_dim = v.space_dimension();
+16535:   if (v_space_dim > Linear_Form<C>::max_space_dimension()) {
+16535:     throw std::length_error("Linear_Form "
+16535:                             "operator+(v, f):\n"
+16535:                             "v exceeds the maximum allowed "
+16535:                             "space dimension.");
+16535:   }
+16535:   Linear_Form<C> r(f);
+16535:   if (v_space_dim > f.space_dimension()) {
+16535:     r.extend(v_space_dim+1);
+16535:   }
+16535:   r[v_space_dim] += C(typename C::boundary_type(1));
+16535:   return r;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>
+16535: operator+(const C& n, const Linear_Form<C>& f) {
+16535:   Linear_Form<C> r(f);
+16535:   r[0] += n;
+16535:   return r;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>
+16535: operator-(const Linear_Form<C>& f) {
+16535:   Linear_Form<C> r(f);
+16535:   for (dimension_type i = f.size(); i-- > 0; ) {
+16535:     r[i].neg_assign(r[i]);
+16535:   }
+16535:   return r;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>
+16535: operator-(const Linear_Form<C>& f1, const Linear_Form<C>& f2) {
+16535:   dimension_type f1_size = f1.size();
+16535:   dimension_type f2_size = f2.size();
+16535:   if (f1_size > f2_size) {
+16535:     Linear_Form<C> r(f1_size, false);
+16535:     dimension_type i = f1_size;
+16535:     while (i > f2_size) {
+16535:       --i;
+16535:       r[i] = f1[i];
+16535:     }
+16535:     while (i > 0) {
+16535:       --i;
+16535:       r[i] = f1[i];
+16535:       r[i] -= f2[i];
+16535:     }
+16535:     return r;
+16535:   }
+16535:   else {
+16535:     Linear_Form<C> r(f2_size, false);
+16535:     dimension_type i = f2_size;
+16535:     while (i > f1_size) {
+16535:       --i;
+16535:       r[i].neg_assign(f2[i]);
+16535:     }
+16535:     while (i > 0) {
+16535:       --i;
+16535:       r[i] = f1[i];
+16535:       r[i] -= f2[i];
+16535:     }
+16535:     return r;
+16535:   }
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>
+16535: operator-(const Variable v, const Linear_Form<C>& f) {
+16535:   const dimension_type v_space_dim = v.space_dimension();
+16535:   if (v_space_dim > Linear_Form<C>::max_space_dimension()) {
+16535:     throw std::length_error("Linear_Form "
+16535:                             "operator-(v, e):\n"
+16535:                             "v exceeds the maximum allowed "
+16535:                             "space dimension.");
+16535:   }
+16535:   Linear_Form<C> r(f);
+16535:   if (v_space_dim > f.space_dimension()) {
+16535:     r.extend(v_space_dim+1);
+16535:   }
+16535:   for (dimension_type i = f.size(); i-- > 0; ) {
+16535:     r[i].neg_assign(r[i]);
+16535:   }
+16535:   r[v_space_dim] += C(typename C::boundary_type(1));
+16535:   return r;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>
+16535: operator-(const Linear_Form<C>& f, const Variable v) {
+16535:   const dimension_type v_space_dim = v.space_dimension();
+16535:   if (v_space_dim > Linear_Form<C>::max_space_dimension()) {
+16535:     throw std::length_error("Linear_Form "
+16535:                             "operator-(e, v):\n"
+16535:                             "v exceeds the maximum allowed "
+16535:                             "space dimension.");
+16535:   }
+16535:   Linear_Form<C> r(f);
+16535:   if (v_space_dim > f.space_dimension()) {
+16535:     r.extend(v_space_dim+1);
+16535:   }
+16535:   r[v_space_dim] -= C(typename C::boundary_type(1));
+16535:   return r;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>
+16535: operator-(const C& n, const Linear_Form<C>& f) {
+16535:   Linear_Form<C> r(f);
+16535:   for (dimension_type i = f.size(); i-- > 0; ) {
+16535:     r[i].neg_assign(r[i]);
+16535:   }
+16535:   r[0] += n;
+16535:   return r;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>
+16535: operator*(const C& n, const Linear_Form<C>& f) {
+16535:   Linear_Form<C> r(f);
+16535:   for (dimension_type i = f.size(); i-- > 0; ) {
+16535:     r[i] *= n;
+16535:   }
+16535:   return r;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>&
+16535: operator+=(Linear_Form<C>& f1, const Linear_Form<C>& f2) {
+16535:   dimension_type f1_size = f1.size();
+16535:   dimension_type f2_size = f2.size();
+16535:   if (f1_size < f2_size) {
+16535:     f1.extend(f2_size);
+16535:   }
+16535:   for (dimension_type i = f2_size; i-- > 0; ) {
+16535:     f1[i] += f2[i];
+16535:   }
+16535:   return f1;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>&
+16535: operator+=(Linear_Form<C>& f, const Variable v) {
+16535:   const dimension_type v_space_dim = v.space_dimension();
+16535:   if (v_space_dim > Linear_Form<C>::max_space_dimension()) {
+16535:     throw std::length_error("Linear_Form<C>& "
+16535:                             "operator+=(e, v):\n"
+16535:                             "v exceeds the maximum allowed space dimension.");
+16535:   }
+16535:   if (v_space_dim > f.space_dimension()) {
+16535:     f.extend(v_space_dim+1);
+16535:   }
+16535:   f[v_space_dim] += C(typename C::boundary_type(1));
+16535:   return f;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>&
+16535: operator-=(Linear_Form<C>& f1, const Linear_Form<C>& f2) {
+16535:   dimension_type f1_size = f1.size();
+16535:   dimension_type f2_size = f2.size();
+16535:   if (f1_size < f2_size) {
+16535:     f1.extend(f2_size);
+16535:   }
+16535:   for (dimension_type i = f2_size; i-- > 0; ) {
+16535:     f1[i] -= f2[i];
+16535:   }
+16535:   return f1;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>&
+16535: operator-=(Linear_Form<C>& f, const Variable v) {
+16535:   const dimension_type v_space_dim = v.space_dimension();
+16535:   if (v_space_dim > Linear_Form<C>::max_space_dimension()) {
+16535:     throw std::length_error("Linear_Form<C>& "
+16535:                             "operator-=(e, v):\n"
+16535:                             "v exceeds the maximum allowed space dimension.");
+16535:   }
+16535:   if (v_space_dim > f.space_dimension()) {
+16535:     f.extend(v_space_dim+1);
+16535:   }
+16535:   f[v_space_dim] -= C(typename C::boundary_type(1));
+16535:   return f;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>&
+16535: operator*=(Linear_Form<C>& f, const C& n) {
+16535:   dimension_type f_size = f.size();
+16535:   for (dimension_type i = f_size; i-- > 0; ) {
+16535:     f[i] *= n;
+16535:   }
+16535:   return f;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: Linear_Form<C>&
+16535: operator/=(Linear_Form<C>& f, const C& n) {
+16535:   dimension_type f_size = f.size();
+16535:   for (dimension_type i = f_size; i-- > 0; ) {
+16535:     f[i] /= n;
+16535:   }
+16535:   return f;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: inline bool
+16535: operator==(const Linear_Form<C>& x, const Linear_Form<C>& y) {
+16535:   const dimension_type x_size = x.size();
+16535:   const dimension_type y_size = y.size();
+16535:   if (x_size >= y_size) {
+16535:     for (dimension_type i = y_size; i-- > 0; ) {
+16535:       if (x[i] != y[i]) {
+16535:         return false;
+16535:       }
+16535:     }
+16535:     for (dimension_type i = x_size; --i >= y_size; ) {
+16535:       if (x[i] != x.zero) {
+16535:         return false;
+16535:       }
+16535:     }
+16535:   }
+16535:   else {
+16535:     for (dimension_type i = x_size; i-- > 0; ) {
+16535:       if (x[i] != y[i]) {
+16535:         return false;
+16535:       }
+16535:     }
+16535:     for (dimension_type i = y_size; --i >= x_size; ) {
+16535:       if (y[i] != x.zero) {
+16535:         return false;
+16535:       }
+16535:     }
+16535: 
+16535:   }
+16535: 
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename C>
+16535: void
+16535: Linear_Form<C>::negate() {
+16535:   for (dimension_type i = vec.size(); i-- > 0; ) {
+16535:     vec[i].neg_assign(vec[i]);
+16535:   }
+16535:   return;
+16535: }
+16535: 
+16535: template <typename C>
+16535: inline memory_size_type
+16535: Linear_Form<C>::external_memory_in_bytes() const {
+16535:   memory_size_type n = 0;
+16535:   for (dimension_type i = size(); i-- > 0; ) {
+16535:     n += vec[i].external_memory_in_bytes();
+16535:   }
+16535:   n += vec.capacity()*sizeof(C);
+16535:   return n;
+16535: }
+16535: 
+16535: template <typename C>
+16535: bool
+16535: Linear_Form<C>::OK() const {
+16535:   for (dimension_type i = size(); i-- > 0; ) {
+16535:     if (!vec[i].OK()) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: void
+16535: Linear_Form<C>::relative_error(
+16535:                 const Floating_Point_Format analyzed_format,
+16535:                 Linear_Form& result) const {
+16535:   typedef typename C::boundary_type analyzer_format;
+16535: 
+16535: 
+16535:   unsigned int f_base;
+16535:   unsigned int f_mantissa_bits;
+16535:   switch (analyzed_format) {
+16535:     case IEEE754_HALF:
+16535:       f_base = float_ieee754_half::BASE;
+16535:       f_mantissa_bits = float_ieee754_half::MANTISSA_BITS;
+16535:       break;
+16535:     case IEEE754_SINGLE:
+16535:       f_base = float_ieee754_single::BASE;
+16535:       f_mantissa_bits = float_ieee754_single::MANTISSA_BITS;
+16535:       break;
+16535:     case IEEE754_DOUBLE:
+16535:       f_base = float_ieee754_double::BASE;
+16535:       f_mantissa_bits = float_ieee754_double::MANTISSA_BITS;
+16535:       break;
+16535:     case IBM_SINGLE:
+16535:       f_base = float_ibm_single::BASE;
+16535:       f_mantissa_bits = float_ibm_single::MANTISSA_BITS;
+16535:       break;
+16535:     case IEEE754_QUAD:
+16535:       f_base = float_ieee754_quad::BASE;
+16535:       f_mantissa_bits = float_ieee754_quad::MANTISSA_BITS;
+16535:       break;
+16535:     case INTEL_DOUBLE_EXTENDED:
+16535:       f_base = float_intel_double_extended::BASE;
+16535:       f_mantissa_bits = float_intel_double_extended::MANTISSA_BITS;
+16535:       break;
+16535:     default:
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       break;
+16535:   }
+16535: 
+16535:   C error_propagator;
+16535: 
+16535:   unsigned int u_power = msb_position(f_base) * f_mantissa_bits;
+16535:   int neg_power = -static_cast<int>(u_power);
+16535:   analyzer_format lb = static_cast<analyzer_format>(ldexp(1.0, neg_power));
+16535: 
+16535:   error_propagator.build(i_constraint(GREATER_OR_EQUAL, -lb),
+16535:                          i_constraint(LESS_OR_EQUAL, lb));
+16535: 
+16535: 
+16535:   const C* current_term = &inhomogeneous_term();
+16535:   
+16535: # 465 "../../src/Linear_Form_templates.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 465 "../../src/Linear_Form_templates.hh"
+16535:                                    ;
+16535: 
+16535:   C current_multiplier(std::max(std::abs(current_term->lower()),
+16535:                                 std::abs(current_term->upper())));
+16535:   Linear_Form current_result_term(current_multiplier);
+16535:   current_result_term *= error_propagator;
+16535:   result = Linear_Form(current_result_term);
+16535: 
+16535: 
+16535:   dimension_type dimension = space_dimension();
+16535:   for (dimension_type i = 0; i < dimension; ++i) {
+16535:     current_term = &coefficient(Variable(i));
+16535:     
+16535: # 477 "../../src/Linear_Form_templates.hh" 3 4
+16535:    (static_cast<void> (0))
+16535: # 477 "../../src/Linear_Form_templates.hh"
+16535:                                      ;
+16535:     current_multiplier = C(std::max(std::abs(current_term->lower()),
+16535:                                     std::abs(current_term->upper())));
+16535:     current_result_term = Linear_Form(Variable(i));
+16535:     current_result_term *= current_multiplier;
+16535:     current_result_term *= error_propagator;
+16535:     result += current_result_term;
+16535:   }
+16535: 
+16535:   return;
+16535: }
+16535: 
+16535: template <typename C>
+16535: template <typename Target>
+16535: bool
+16535: Linear_Form<C>::intervalize(const FP_Oracle<Target,C>& oracle,
+16535:                             C& result) const {
+16535:   result = C(inhomogeneous_term());
+16535:   dimension_type dimension = space_dimension();
+16535:   for (dimension_type i = 0; i < dimension; ++i) {
+16535:     C current_addend = coefficient(Variable(i));
+16535:     C curr_int;
+16535:     if (!oracle.get_interval(i, curr_int)) {
+16535:       return false;
+16535:     }
+16535:     current_addend *= curr_int;
+16535:     result += current_addend;
+16535:   }
+16535: 
+16535:   return true;
+16535: }
+16535: 
+16535: 
+16535: template <typename C>
+16535: std::ostream&
+16535: IO_Operators::operator<<(std::ostream& s, const Linear_Form<C>& f) {
+16535:   const dimension_type num_variables = f.space_dimension();
+16535:   bool first = true;
+16535:   for (dimension_type v = 0; v < num_variables; ++v) {
+16535:     const C& fv = f[v+1];
+16535:     if (fv != typename C::boundary_type(0)) {
+16535:       if (first) {
+16535:         if (fv == typename C::boundary_type(-1)) {
+16535:           s << "-";
+16535:         }
+16535:         else if (fv != typename C::boundary_type(1)) {
+16535:           s << fv << "*";
+16535:         }
+16535:         first = false;
+16535:       }
+16535:       else {
+16535:         if (fv == typename C::boundary_type(-1)) {
+16535:           s << " - ";
+16535:         }
+16535:         else {
+16535:           s << " + ";
+16535:           if (fv != typename C::boundary_type(1)) {
+16535:             s << fv << "*";
+16535:           }
+16535:         }
+16535:       }
+16535:       s << Variable(v);
+16535:     }
+16535:   }
+16535: 
+16535:   const C& it = f[0];
+16535:   if (it != 0) {
+16535:     if (!first) {
+16535:         s << " + ";
+16535:     }
+16535:     else {
+16535:       first = false;
+16535:     }
+16535:     s << it;
+16535:   }
+16535: 
+16535:   if (first) {
+16535: 
+16535:     s << Linear_Form<C>::zero;
+16535:   }
+16535:   return s;
+16535: }
+16535: 
+16535: template <typename C> void Linear_Form<C>::ascii_dump() const { ascii_dump(std::cerr); } template <typename C> void Linear_Form<C>::print() const { using IO_Operators::operator<<; std::cerr << *this; }
+16535: 
+16535: template <typename C>
+16535: C Linear_Form<C>::zero(typename C::boundary_type(0));
+16535: 
+16535: }
+16535: # 10 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/linearize.hh" 1
+16535: # 27 "../../src/linearize.hh"
+16535: # 1 "../../src/Concrete_Expression_defs.hh" 1
+16535: # 31 "../../src/Concrete_Expression_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: class Concrete_Expression_Type {
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static Concrete_Expression_Type
+16535:   bounded_integer(Bounded_Integer_Type_Width width,
+16535:                   Bounded_Integer_Type_Representation representation,
+16535:                   Bounded_Integer_Type_Overflow overflow);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static Concrete_Expression_Type
+16535:   floating_point(Floating_Point_Format format);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_bounded_integer() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_floating_point() const;
+16535: # 70 "../../src/Concrete_Expression_defs.hh"
+16535:   Bounded_Integer_Type_Width bounded_integer_type_width() const;
+16535: # 79 "../../src/Concrete_Expression_defs.hh"
+16535:   Bounded_Integer_Type_Representation
+16535:   bounded_integer_type_representation() const;
+16535: # 89 "../../src/Concrete_Expression_defs.hh"
+16535:   Bounded_Integer_Type_Overflow
+16535:   bounded_integer_type_overflow() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Floating_Point_Format floating_point_format() const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535: private:
+16535: 
+16535:   struct Implementation {
+16535:     bool bounded_integer:1;
+16535:     unsigned int bounded_integer_type_width:23;
+16535:     unsigned int bounded_integer_type_representation:2;
+16535:     unsigned int bounded_integer_type_overflow:2;
+16535:     unsigned int floating_point_format:4;
+16535:   };
+16535: 
+16535: 
+16535:   Concrete_Expression_Type(Implementation implementation);
+16535: 
+16535: 
+16535:   Implementation impl;
+16535: };
+16535: 
+16535: 
+16535: template <typename Target>
+16535: class Concrete_Expression_Common {
+16535: public:
+16535: 
+16535:   Concrete_Expression_Type type() const;
+16535: 
+16535: 
+16535:   Concrete_Expression_Kind kind() const;
+16535: 
+16535: 
+16535:   template <template <typename T> class Derived>
+16535:   bool is() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <template <typename T> class Derived>
+16535:   Derived<Target>* as();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <template <typename T> class Derived>
+16535:   const Derived<Target>* as() const;
+16535: 
+16535: };
+16535: 
+16535: 
+16535: template <typename Target>
+16535: class Binary_Operator_Common {
+16535: public:
+16535: 
+16535:   Concrete_Expression_BOP binary_operator() const;
+16535: 
+16535: 
+16535:   const Concrete_Expression<Target>* left_hand_side() const;
+16535: 
+16535: 
+16535:   const Concrete_Expression<Target>* right_hand_side() const;
+16535: };
+16535: 
+16535: 
+16535: template <typename Target>
+16535: class Unary_Operator_Common {
+16535: public:
+16535: 
+16535:   Concrete_Expression_UOP unary_operator() const;
+16535: 
+16535: 
+16535:   const Concrete_Expression<Target>* argument() const;
+16535: };
+16535: 
+16535: 
+16535: template <typename Target>
+16535: class Cast_Operator_Common {
+16535: 
+16535:   const Concrete_Expression<Target>* argument() const;
+16535: };
+16535: 
+16535: 
+16535: template <typename Target>
+16535: class Integer_Constant_Common {
+16535: };
+16535: 
+16535: 
+16535: template <typename Target>
+16535: class Floating_Point_Constant_Common {
+16535: };
+16535: 
+16535: 
+16535: template <typename Target>
+16535: class Approximable_Reference_Common {
+16535: };
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Concrete_Expression_inlines.hh" 1
+16535: # 27 "../../src/Concrete_Expression_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline
+16535: Concrete_Expression_Type
+16535: ::Concrete_Expression_Type(Implementation implementation)
+16535:   : impl(implementation) {
+16535: }
+16535: 
+16535: inline Concrete_Expression_Type
+16535: Concrete_Expression_Type
+16535: ::bounded_integer(const Bounded_Integer_Type_Width width,
+16535:                   const Bounded_Integer_Type_Representation representation,
+16535:                   const Bounded_Integer_Type_Overflow overflow) {
+16535:   Implementation impl;
+16535:   impl.bounded_integer = true;
+16535:   impl.bounded_integer_type_width = width;
+16535:   impl.bounded_integer_type_representation = representation;
+16535:   impl.bounded_integer_type_overflow = overflow;
+16535: 
+16535:   impl.floating_point_format = IEEE754_HALF;
+16535:   return Concrete_Expression_Type(impl);
+16535: }
+16535: 
+16535: inline Concrete_Expression_Type
+16535: Concrete_Expression_Type
+16535: ::floating_point(const Floating_Point_Format format) {
+16535:   Implementation impl;
+16535:   impl.bounded_integer = false;
+16535:   impl.floating_point_format = format;
+16535: 
+16535:   impl.bounded_integer_type_width = BITS_128;
+16535:   impl.bounded_integer_type_representation = SIGNED_2_COMPLEMENT;
+16535:   impl.bounded_integer_type_overflow = OVERFLOW_IMPOSSIBLE;
+16535:   return Concrete_Expression_Type(impl);
+16535: }
+16535: 
+16535: inline bool
+16535: Concrete_Expression_Type::is_bounded_integer() const {
+16535:   return impl.bounded_integer;
+16535: }
+16535: 
+16535: inline bool
+16535: Concrete_Expression_Type::is_floating_point() const {
+16535:   return !impl.bounded_integer;
+16535: }
+16535: 
+16535: inline Bounded_Integer_Type_Width
+16535: Concrete_Expression_Type::bounded_integer_type_width() const {
+16535:   const unsigned int u = impl.bounded_integer_type_width;
+16535:   return static_cast<Bounded_Integer_Type_Width>(u);
+16535: }
+16535: 
+16535: inline Bounded_Integer_Type_Representation
+16535: Concrete_Expression_Type::bounded_integer_type_representation() const {
+16535:   const unsigned int u = impl.bounded_integer_type_representation;
+16535:   return static_cast<Bounded_Integer_Type_Representation>(u);
+16535: }
+16535: 
+16535: inline Bounded_Integer_Type_Overflow
+16535: Concrete_Expression_Type::bounded_integer_type_overflow() const {
+16535:   const unsigned int u = impl.bounded_integer_type_overflow;
+16535:   return static_cast<Bounded_Integer_Type_Overflow>(u);
+16535: }
+16535: 
+16535: inline Floating_Point_Format
+16535: Concrete_Expression_Type::floating_point_format() const {
+16535:   const unsigned int u = impl.floating_point_format;
+16535:   return static_cast<Floating_Point_Format>(u);
+16535: }
+16535: 
+16535: template <typename Target>
+16535: template <template <typename T> class Derived>
+16535: inline bool
+16535: Concrete_Expression_Common<Target>::is() const {
+16535:   return static_cast<const Concrete_Expression<Target>*>(this)->kind() ==
+16535:          Derived<Target>::KIND;
+16535: }
+16535: 
+16535: template <typename Target>
+16535: template <template <typename T> class Derived>
+16535: inline Derived<Target>*
+16535: Concrete_Expression_Common<Target>::as() {
+16535:   ((void) 0);
+16535:   return static_cast<Derived<Target>*>(this);
+16535: }
+16535: 
+16535: template <typename Target>
+16535: template <template <typename T> class Derived>
+16535: inline const Derived<Target>*
+16535: Concrete_Expression_Common<Target>::as() const {
+16535:   ((void) 0);
+16535:   return static_cast<const Derived<Target>*>(this);
+16535: }
+16535: 
+16535: }
+16535: # 200 "../../src/Concrete_Expression_defs.hh" 2
+16535: # 28 "../../src/linearize.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: # 108 "../../src/linearize.hh"
+16535: template <typename Target, typename FP_Interval_Type>
+16535: static bool
+16535: add_linearize(const Binary_Operator<Target>& bop_expr,
+16535:               const FP_Oracle<Target,FP_Interval_Type>& oracle,
+16535:               const std::map<dimension_type, Linear_Form<FP_Interval_Type> >&
+16535:               lf_store,
+16535:               Linear_Form<FP_Interval_Type>& result) {
+16535:   ((void) 0);
+16535: 
+16535:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
+16535: 
+16535:   if (!linearize(*(bop_expr.left_hand_side()), oracle, lf_store, result)) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   Floating_Point_Format analyzed_format =
+16535:     bop_expr.type().floating_point_format();
+16535:   FP_Linear_Form rel_error;
+16535:   result.relative_error(analyzed_format, rel_error);
+16535:   result += rel_error;
+16535:   FP_Linear_Form linearized_second_operand;
+16535:   if (!linearize(*(bop_expr.right_hand_side()), oracle, lf_store,
+16535:                  linearized_second_operand)) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   result += linearized_second_operand;
+16535:   linearized_second_operand.relative_error(analyzed_format, rel_error);
+16535:   result += rel_error;
+16535:   FP_Interval_Type absolute_error =
+16535:                    compute_absolute_error<FP_Interval_Type>(analyzed_format);
+16535:   result += absolute_error;
+16535:   return !result.overflows();
+16535: }
+16535: # 222 "../../src/linearize.hh"
+16535: template <typename Target, typename FP_Interval_Type>
+16535: static bool
+16535: sub_linearize(const Binary_Operator<Target>& bop_expr,
+16535:               const FP_Oracle<Target,FP_Interval_Type>& oracle,
+16535:               const std::map<dimension_type, Linear_Form<FP_Interval_Type> >& lf_store,
+16535:               Linear_Form<FP_Interval_Type>& result) {
+16535:   ((void) 0);
+16535: 
+16535:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
+16535: 
+16535:   if (!linearize(*(bop_expr.left_hand_side()), oracle, lf_store, result)) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   Floating_Point_Format analyzed_format =
+16535:     bop_expr.type().floating_point_format();
+16535:   FP_Linear_Form rel_error;
+16535:   result.relative_error(analyzed_format, rel_error);
+16535:   result += rel_error;
+16535:   FP_Linear_Form linearized_second_operand;
+16535:   if (!linearize(*(bop_expr.right_hand_side()), oracle, lf_store,
+16535:                  linearized_second_operand)) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   result -= linearized_second_operand;
+16535:   linearized_second_operand.relative_error(analyzed_format, rel_error);
+16535:   result += rel_error;
+16535:   FP_Interval_Type absolute_error =
+16535:                    compute_absolute_error<FP_Interval_Type>(analyzed_format);
+16535:   result += absolute_error;
+16535:   return !result.overflows();
+16535: }
+16535: # 364 "../../src/linearize.hh"
+16535: template <typename Target, typename FP_Interval_Type>
+16535: static bool
+16535: mul_linearize(const Binary_Operator<Target>& bop_expr,
+16535:               const FP_Oracle<Target,FP_Interval_Type>& oracle,
+16535:               const std::map<dimension_type, Linear_Form<FP_Interval_Type> >& lf_store,
+16535:               Linear_Form<FP_Interval_Type>& result) {
+16535:   ((void) 0);
+16535: 
+16535:   typedef typename FP_Interval_Type::boundary_type analyzer_format;
+16535:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
+16535: # 388 "../../src/linearize.hh"
+16535:   bool intervalize_first;
+16535:   FP_Linear_Form linearized_first_operand;
+16535:   if (!linearize(*(bop_expr.left_hand_side()), oracle, lf_store,
+16535:                  linearized_first_operand)) {
+16535:     return false;
+16535:   }
+16535:   FP_Interval_Type intervalized_first_operand;
+16535:   if (!linearized_first_operand.intervalize(oracle,
+16535:                                             intervalized_first_operand)) {
+16535:     return false;
+16535:   }
+16535:   FP_Linear_Form linearized_second_operand;
+16535:   if (!linearize(*(bop_expr.right_hand_side()), oracle, lf_store,
+16535:                  linearized_second_operand)) {
+16535:     return false;
+16535:   }
+16535:   FP_Interval_Type intervalized_second_operand;
+16535:   if (!linearized_second_operand.intervalize(oracle,
+16535:                                              intervalized_second_operand)) {
+16535:     return false;
+16535:   }
+16535: 
+16535: 
+16535:   if (intervalized_first_operand.is_bounded()) {
+16535:     if (intervalized_second_operand.is_bounded()) {
+16535:       analyzer_format first_interval_size
+16535:         = intervalized_first_operand.upper()
+16535:         - intervalized_first_operand.lower();
+16535:       analyzer_format second_interval_size
+16535:         = intervalized_second_operand.upper()
+16535:         - intervalized_second_operand.lower();
+16535:       if (first_interval_size <= second_interval_size) {
+16535:         intervalize_first = true;
+16535:       }
+16535:       else {
+16535:         intervalize_first = false;
+16535:       }
+16535:     }
+16535:     else {
+16535:       intervalize_first = true;
+16535:     }
+16535:   }
+16535:   else {
+16535:     if (intervalized_second_operand.is_bounded()) {
+16535:       intervalize_first = false;
+16535:     }
+16535:     else {
+16535:       return false;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   Floating_Point_Format analyzed_format =
+16535:     bop_expr.type().floating_point_format();
+16535:   if (intervalize_first) {
+16535:     linearized_second_operand.relative_error(analyzed_format, result);
+16535:     linearized_second_operand *= intervalized_first_operand;
+16535:     result *= intervalized_first_operand;
+16535:     result += linearized_second_operand;
+16535:   }
+16535:   else {
+16535:     linearized_first_operand.relative_error(analyzed_format, result);
+16535:     linearized_first_operand *= intervalized_second_operand;
+16535:     result *= intervalized_second_operand;
+16535:     result += linearized_first_operand;
+16535:   }
+16535: 
+16535:   FP_Interval_Type absolute_error =
+16535:                    compute_absolute_error<FP_Interval_Type>(analyzed_format);
+16535:   result += absolute_error;
+16535:   return !result.overflows();
+16535: }
+16535: # 558 "../../src/linearize.hh"
+16535: template <typename Target, typename FP_Interval_Type>
+16535: static bool
+16535: div_linearize(const Binary_Operator<Target>& bop_expr,
+16535:               const FP_Oracle<Target,FP_Interval_Type>& oracle,
+16535:               const std::map<dimension_type, Linear_Form<FP_Interval_Type> >& lf_store,
+16535:               Linear_Form<FP_Interval_Type>& result) {
+16535:   ((void) 0);
+16535: 
+16535:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
+16535: 
+16535:   FP_Linear_Form linearized_second_operand;
+16535:   if (!linearize(*(bop_expr.right_hand_side()), oracle, lf_store,
+16535:                  linearized_second_operand)) {
+16535:     return false;
+16535:   }
+16535:   FP_Interval_Type intervalized_second_operand;
+16535:   if (!linearized_second_operand.intervalize(oracle,
+16535:                                              intervalized_second_operand)) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   if ((intervalized_second_operand.lower_is_boundary_infinity()
+16535:        || intervalized_second_operand.lower() <= 0) &&
+16535:       (intervalized_second_operand.upper_is_boundary_infinity()
+16535:        || intervalized_second_operand.upper() >= 0)) {
+16535:     return false;
+16535:   }
+16535:   if (!linearize(*(bop_expr.left_hand_side()), oracle, lf_store, result)) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   Floating_Point_Format analyzed_format =
+16535:     bop_expr.type().floating_point_format();
+16535:   FP_Linear_Form rel_error;
+16535:   result.relative_error(analyzed_format, rel_error);
+16535:   result /= intervalized_second_operand;
+16535:   rel_error /= intervalized_second_operand;
+16535:   result += rel_error;
+16535:   FP_Interval_Type absolute_error =
+16535:                    compute_absolute_error<FP_Interval_Type>(analyzed_format);
+16535:   result += absolute_error;
+16535:   return !result.overflows();
+16535: }
+16535: # 633 "../../src/linearize.hh"
+16535: template <typename Target, typename FP_Interval_Type>
+16535: static bool
+16535: cast_linearize(const Cast_Operator<Target>& cast_expr,
+16535:                const FP_Oracle<Target,FP_Interval_Type>& oracle,
+16535:                const std::map<dimension_type, Linear_Form<FP_Interval_Type> >& lf_store,
+16535:                Linear_Form<FP_Interval_Type>& result) {
+16535:   typedef typename FP_Interval_Type::boundary_type analyzer_format;
+16535:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
+16535: 
+16535:   Floating_Point_Format analyzed_format =
+16535:     cast_expr.type().floating_point_format();
+16535:   const Concrete_Expression<Target>* cast_arg = cast_expr.argument();
+16535:   if (cast_arg->type().is_floating_point()) {
+16535:     if (!linearize(*cast_arg, oracle, lf_store, result)) {
+16535:       return false;
+16535:     }
+16535:     if (!is_less_precise_than(analyzed_format,
+16535:                               cast_arg->type().floating_point_format())
+16535:         || result == FP_Linear_Form(FP_Interval_Type(0))
+16535:         || result == FP_Linear_Form(FP_Interval_Type(1))) {
+16535: # 661 "../../src/linearize.hh"
+16535:       return true;
+16535:     }
+16535:   }
+16535:   else {
+16535:     FP_Interval_Type expr_value;
+16535:     if (!oracle.get_integer_expr_value(*cast_arg, expr_value))
+16535:       return false;
+16535:     result = FP_Linear_Form(expr_value);
+16535:     if (is_less_precise_than(Float<analyzer_format>::Binary::floating_point_format, analyzed_format)
+16535:         || result == FP_Linear_Form(FP_Interval_Type(0))
+16535:         || result == FP_Linear_Form(FP_Interval_Type(1))) {
+16535: # 680 "../../src/linearize.hh"
+16535:       return true;
+16535:     }
+16535:   }
+16535: 
+16535:   FP_Linear_Form rel_error;
+16535:   result.relative_error(analyzed_format, rel_error);
+16535:   result += rel_error;
+16535:   FP_Interval_Type absolute_error =
+16535:                    compute_absolute_error<FP_Interval_Type>(analyzed_format);
+16535:   result += absolute_error;
+16535:   return !result.overflows();
+16535: }
+16535: # 727 "../../src/linearize.hh"
+16535: template <typename Target, typename FP_Interval_Type>
+16535: bool
+16535: linearize(const Concrete_Expression<Target>& expr,
+16535:           const FP_Oracle<Target,FP_Interval_Type>& oracle,
+16535:           const std::map<dimension_type, Linear_Form<FP_Interval_Type> >& lf_store,
+16535:           Linear_Form<FP_Interval_Type>& result) {
+16535:   typedef typename FP_Interval_Type::boundary_type analyzer_format;
+16535:   typedef Linear_Form<FP_Interval_Type> FP_Linear_Form;
+16535:   typedef std::map<dimension_type, FP_Linear_Form>
+16535:     FP_Linear_Form_Abstract_Store;
+16535: 
+16535:   ((void) 0);
+16535: 
+16535:   enum anonymous_enum_compile_time_check___LINE__ { compile_time_check_742 = sizeof(Parma_Polyhedra_Library::Compile_Time_Check<(!std::numeric_limits<analyzer_format>::is_exact)>) }
+16535: 
+16535:                                                                                          ;
+16535: 
+16535:   switch(expr.kind()) {
+16535:   case Integer_Constant<Target>::KIND:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     break;
+16535:   case Floating_Point_Constant<Target>::KIND:
+16535:   {
+16535:     const Floating_Point_Constant<Target>* fpc_expr =
+16535:       expr.template as<Floating_Point_Constant>();
+16535:     FP_Interval_Type constant_value;
+16535:     if (!oracle.get_fp_constant_value(*fpc_expr, constant_value)) {
+16535:       return false;
+16535:     }
+16535:     result = FP_Linear_Form(constant_value);
+16535:     return true;
+16535:   }
+16535:   case Unary_Operator<Target>::KIND:
+16535:   {
+16535:     const Unary_Operator<Target>* uop_expr =
+16535:       expr.template as<Unary_Operator>();
+16535:     switch (uop_expr->unary_operator()) {
+16535:     case Unary_Operator<Target>::UPLUS:
+16535:       return linearize(*(uop_expr->argument()), oracle, lf_store, result);
+16535:     case Unary_Operator<Target>::UMINUS:
+16535:       if (!linearize(*(uop_expr->argument()), oracle, lf_store, result)) {
+16535:         return false;
+16535:       }
+16535: 
+16535:       result.negate();
+16535:       return true;
+16535:     case Unary_Operator<Target>::BNOT:
+16535:       throw std::runtime_error("PPL internal error: unimplemented");
+16535:       break;
+16535:     default:
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       break;
+16535:     }
+16535:     break;
+16535:   }
+16535:   case Binary_Operator<Target>::KIND:
+16535:   {
+16535:     const Binary_Operator<Target>* bop_expr =
+16535:       expr.template as<Binary_Operator>();
+16535:     switch (bop_expr->binary_operator()) {
+16535:     case Binary_Operator<Target>::ADD:
+16535:       return add_linearize(*bop_expr, oracle, lf_store, result);
+16535:     case Binary_Operator<Target>::SUB:
+16535:       return sub_linearize(*bop_expr, oracle, lf_store, result);
+16535:     case Binary_Operator<Target>::MUL:
+16535:       return mul_linearize(*bop_expr, oracle, lf_store, result);
+16535:     case Binary_Operator<Target>::DIV:
+16535:       return div_linearize(*bop_expr, oracle, lf_store, result);
+16535:     case Binary_Operator<Target>::REM:
+16535:     case Binary_Operator<Target>::BAND:
+16535:     case Binary_Operator<Target>::BOR:
+16535:     case Binary_Operator<Target>::BXOR:
+16535:     case Binary_Operator<Target>::LSHIFT:
+16535:     case Binary_Operator<Target>::RSHIFT:
+16535: 
+16535:       return false;
+16535:     default:
+16535:       Parma_Polyhedra_Library::ppl_unreachable();
+16535:       return false;
+16535:     }
+16535:     break;
+16535:   }
+16535:   case Approximable_Reference<Target>::KIND:
+16535:   {
+16535:     const Approximable_Reference<Target>* ref_expr =
+16535:       expr.template as<Approximable_Reference>();
+16535:     std::set<dimension_type> associated_dimensions;
+16535:     if (!oracle.get_associated_dimensions(*ref_expr, associated_dimensions)
+16535:         || associated_dimensions.empty()) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       return false;
+16535:     }
+16535: 
+16535:     if (associated_dimensions.size() == 1) {
+16535: 
+16535: 
+16535: 
+16535:       dimension_type variable_index = *associated_dimensions.begin();
+16535:       ((void) 0);
+16535: 
+16535:       typename FP_Linear_Form_Abstract_Store::const_iterator
+16535:         variable_value = lf_store.find(variable_index);
+16535:       if (variable_value == lf_store.end()) {
+16535:         result = FP_Linear_Form(Variable(variable_index));
+16535:         return true;
+16535:       }
+16535: 
+16535:       result = FP_Linear_Form(variable_value->second);
+16535: 
+16535: 
+16535:       return !result.overflows();
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     ((void) 0);
+16535:     std::set<dimension_type>::const_iterator i
+16535:       = associated_dimensions.begin();
+16535:     std::set<dimension_type>::const_iterator i_end
+16535:       = associated_dimensions.end();
+16535:     FP_Interval_Type lub(EMPTY);
+16535:     for (; i != i_end; ++i) {
+16535:       FP_Interval_Type curr_int;
+16535:       ((void) 0);
+16535:       if (!oracle.get_interval(*i, curr_int)) {
+16535:         return false;
+16535:       }
+16535: 
+16535:       lub.join_assign(curr_int);
+16535:     }
+16535: 
+16535:     result = FP_Linear_Form(lub);
+16535:     return !result.overflows();
+16535:   }
+16535:   case Cast_Operator<Target>::KIND:
+16535:   {
+16535:     const Cast_Operator<Target>* cast_expr =
+16535:       expr.template as<Cast_Operator>();
+16535:     return cast_linearize(*cast_expr, oracle, lf_store, result);
+16535:   }
+16535:   default:
+16535:     Parma_Polyhedra_Library::ppl_unreachable();
+16535:     break;
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::ppl_unreachable();
+16535:   return false;
+16535: }
+16535: 
+16535: }
+16535: # 11 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/PIP_Tree_defs.hh" 1
+16535: # 27 "../../src/PIP_Tree_defs.hh"
+16535: # 1 "../../src/PIP_Tree_types.hh" 1
+16535: # 16 "../../src/PIP_Tree_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class PIP_Tree_Node;
+16535: class PIP_Solution_Node;
+16535: class PIP_Decision_Node;
+16535: 
+16535: typedef const PIP_Tree_Node* PIP_Tree;
+16535: 
+16535: }
+16535: # 28 "../../src/PIP_Tree_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "../../src/PIP_Problem_defs.hh" 1
+16535: # 40 "../../src/PIP_Problem_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: std::ostream&
+16535: operator<<(std::ostream& s, const PIP_Problem& pip);
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: void swap(PIP_Problem& x, PIP_Problem& y);
+16535: 
+16535: }
+16535: # 493 "../../src/PIP_Problem_defs.hh"
+16535: class Parma_Polyhedra_Library::PIP_Problem {
+16535: public:
+16535: # 509 "../../src/PIP_Problem_defs.hh"
+16535:   explicit PIP_Problem(dimension_type dim = 0);
+16535: # 538 "../../src/PIP_Problem_defs.hh"
+16535:   template <typename In>
+16535:   PIP_Problem(dimension_type dim, In first, In last,
+16535:               const Variables_Set& p_vars);
+16535: 
+16535: 
+16535:   PIP_Problem(const PIP_Problem& y);
+16535: 
+16535: 
+16535:   ~PIP_Problem();
+16535: 
+16535: 
+16535:   PIP_Problem& operator=(const PIP_Problem& y);
+16535: 
+16535: 
+16535:   static dimension_type max_space_dimension();
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const Variables_Set& parameter_space_dimensions() const;
+16535: 
+16535: private:
+16535: 
+16535:   typedef std::vector<Constraint> Constraint_Sequence;
+16535: 
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef Constraint_Sequence::const_iterator const_iterator;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const_iterator constraints_begin() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const_iterator constraints_end() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void clear();
+16535: # 614 "../../src/PIP_Problem_defs.hh"
+16535:   void add_space_dimensions_and_embed(dimension_type m_vars,
+16535:                                       dimension_type m_params);
+16535: # 625 "../../src/PIP_Problem_defs.hh"
+16535:   void add_to_parameter_space_dimensions(const Variables_Set& p_vars);
+16535: # 634 "../../src/PIP_Problem_defs.hh"
+16535:   void add_constraint(const Constraint& c);
+16535: # 643 "../../src/PIP_Problem_defs.hh"
+16535:   void add_constraints(const Constraint_System& cs);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_satisfiable() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   PIP_Problem_Status solve() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   PIP_Tree solution() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   PIP_Tree optimizing_solution() const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: # 687 "../../src/PIP_Problem_defs.hh"
+16535:   void print_solution(std::ostream& s, int indent = 0) const;
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   void m_swap(PIP_Problem& y);
+16535: 
+16535: 
+16535:   enum Control_Parameter_Name {
+16535: 
+16535:     CUTTING_STRATEGY,
+16535: 
+16535:     PIVOT_ROW_STRATEGY,
+16535: 
+16535: 
+16535: 
+16535:     CONTROL_PARAMETER_NAME_SIZE
+16535:   };
+16535: 
+16535: 
+16535:   enum Control_Parameter_Value {
+16535: 
+16535:     CUTTING_STRATEGY_FIRST,
+16535: 
+16535:     CUTTING_STRATEGY_DEEPEST,
+16535: 
+16535:     CUTTING_STRATEGY_ALL,
+16535: 
+16535: 
+16535:     PIVOT_ROW_STRATEGY_FIRST,
+16535: 
+16535:     PIVOT_ROW_STRATEGY_MAX_COLUMN,
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     CONTROL_PARAMETER_VALUE_SIZE
+16535:   };
+16535: 
+16535: 
+16535:   Control_Parameter_Value
+16535:   get_control_parameter(Control_Parameter_Name name) const;
+16535: 
+16535: 
+16535:   void set_control_parameter(Control_Parameter_Value value);
+16535: 
+16535: 
+16535:   void set_big_parameter_dimension(dimension_type big_dim);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type get_big_parameter_dimension() const;
+16535: 
+16535: private:
+16535: 
+16535:   void control_parameters_init();
+16535: 
+16535: 
+16535:   void control_parameters_copy(const PIP_Problem& y);
+16535: 
+16535: 
+16535:   dimension_type external_space_dim;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type internal_space_dim;
+16535: 
+16535: 
+16535:   enum Status {
+16535: 
+16535:     UNSATISFIABLE,
+16535: 
+16535:     OPTIMIZED,
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     PARTIALLY_SATISFIABLE
+16535:   };
+16535: 
+16535: 
+16535:   Status status;
+16535: 
+16535: 
+16535:   PIP_Tree_Node* current_solution;
+16535: 
+16535: 
+16535:   Constraint_Sequence input_cs;
+16535: 
+16535: 
+16535:   dimension_type first_pending_constraint;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Variables_Set parameters;
+16535: 
+16535: 
+16535:   typedef Sparse_Row Row;
+16535: # 815 "../../src/PIP_Problem_defs.hh"
+16535:   Matrix<Row> initial_context;
+16535: 
+16535: 
+16535:   Control_Parameter_Value
+16535:   control_parameters[CONTROL_PARAMETER_NAME_SIZE];
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type big_parameter_dimension;
+16535: 
+16535:   friend class PIP_Solution_Node;
+16535: };
+16535: 
+16535: # 1 "../../src/PIP_Problem_inlines.hh" 1
+16535: # 27 "../../src/PIP_Problem_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline dimension_type
+16535: PIP_Problem::space_dimension() const {
+16535:   return external_space_dim;
+16535: }
+16535: 
+16535: inline dimension_type
+16535: PIP_Problem::max_space_dimension() {
+16535:   return Constraint::max_space_dimension();
+16535: }
+16535: 
+16535: inline PIP_Problem::const_iterator
+16535: PIP_Problem::constraints_begin() const {
+16535:   return input_cs.begin();
+16535: }
+16535: 
+16535: inline PIP_Problem::const_iterator
+16535: PIP_Problem::constraints_end() const {
+16535:   return input_cs.end();
+16535: }
+16535: 
+16535: inline const Variables_Set&
+16535: PIP_Problem::parameter_space_dimensions() const {
+16535:   return parameters;
+16535: }
+16535: 
+16535: inline void
+16535: PIP_Problem::m_swap(PIP_Problem& y) {
+16535:   using std::swap;
+16535:   swap(external_space_dim, y.external_space_dim);
+16535:   swap(internal_space_dim, y.internal_space_dim);
+16535:   swap(status, y.status);
+16535:   swap(current_solution, y.current_solution);
+16535:   swap(input_cs, y.input_cs);
+16535:   swap(first_pending_constraint, y.first_pending_constraint);
+16535:   swap(parameters, y.parameters);
+16535:   swap(initial_context, y.initial_context);
+16535:   for (dimension_type i = CONTROL_PARAMETER_NAME_SIZE; i-- > 0; ) {
+16535:     swap(control_parameters[i], y.control_parameters[i]);
+16535:   }
+16535:   swap(big_parameter_dimension, y.big_parameter_dimension);
+16535: }
+16535: 
+16535: inline PIP_Problem&
+16535: PIP_Problem::operator=(const PIP_Problem& y) {
+16535:   PIP_Problem tmp(y);
+16535:   m_swap(tmp);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline PIP_Problem::Control_Parameter_Value
+16535: PIP_Problem::get_control_parameter(Control_Parameter_Name name) const {
+16535:   ((void) 0);
+16535:   return control_parameters[name];
+16535: }
+16535: 
+16535: inline dimension_type
+16535: PIP_Problem::get_big_parameter_dimension() const {
+16535:   return big_parameter_dimension;
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: swap(PIP_Problem& x, PIP_Problem& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 831 "../../src/PIP_Problem_defs.hh" 2
+16535: # 1 "../../src/PIP_Problem_templates.hh" 1
+16535: # 29 "../../src/PIP_Problem_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename In>
+16535: PIP_Problem::PIP_Problem(dimension_type dim,
+16535:                          In first, In last,
+16535:                          const Variables_Set& p_vars)
+16535:   : external_space_dim(dim),
+16535:     internal_space_dim(0),
+16535:     status(PARTIALLY_SATISFIABLE),
+16535:     current_solution(0),
+16535:     input_cs(),
+16535:     first_pending_constraint(0),
+16535:     parameters(p_vars),
+16535:     initial_context(),
+16535:     big_parameter_dimension(not_a_dimension()) {
+16535: 
+16535: 
+16535:   if (p_vars.space_dimension() > external_space_dim) {
+16535:     std::ostringstream s;
+16535:     s << "PPL::PIP_Problem::PIP_Problem(dim, first, last, p_vars):\n"
+16535:       << "dim == " << external_space_dim
+16535:       << " and p_vars.space_dimension() == "
+16535:       << p_vars.space_dimension()
+16535:       << " are dimension incompatible.";
+16535:     throw std::invalid_argument(s.str());
+16535:   }
+16535: 
+16535: 
+16535:   if (dim > max_space_dimension()) {
+16535:     throw std::length_error("PPL::PIP_Problem::"
+16535:                             "PIP_Problem(dim, first, last, p_vars):\n"
+16535:                             "dim exceeds the maximum allowed "
+16535:                             "space dimension.");
+16535:   }
+16535: 
+16535:   for (In i = first; i != last; ++i) {
+16535:     if (i->space_dimension() > dim) {
+16535:       std::ostringstream s;
+16535:       s << "PPL::PIP_Problem::"
+16535:         << "PIP_Problem(dim, first, last, p_vars):\n"
+16535:         << "range [first, last) contains a constraint having space "
+16535:         << "dimension == " << i->space_dimension()
+16535:         << " that exceeds this->space_dimension == " << dim << ".";
+16535:       throw std::invalid_argument(s.str());
+16535:     }
+16535:     input_cs.push_back(*i);
+16535:   }
+16535:   control_parameters_init();
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: }
+16535: # 832 "../../src/PIP_Problem_defs.hh" 2
+16535: # 36 "../../src/PIP_Tree_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: # 50 "../../src/PIP_Tree_defs.hh"
+16535: class PIP_Tree_Node {
+16535: protected:
+16535: 
+16535:   explicit PIP_Tree_Node(const PIP_Problem* owner);
+16535: 
+16535: 
+16535:   PIP_Tree_Node(const PIP_Tree_Node& y);
+16535: 
+16535: 
+16535:   const PIP_Problem* get_owner() const;
+16535: 
+16535: 
+16535:   virtual void set_owner(const PIP_Problem* owner) = 0;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual bool check_ownership(const PIP_Problem* owner) const = 0;
+16535: 
+16535: public:
+16535: 
+16535:   typedef Sparse_Row Row;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual PIP_Tree_Node* clone() const = 0;
+16535: 
+16535: 
+16535:   virtual ~PIP_Tree_Node();
+16535: 
+16535: 
+16535:   virtual bool OK() const = 0;
+16535: 
+16535: 
+16535:   virtual const PIP_Solution_Node* as_solution() const = 0;
+16535: 
+16535: 
+16535:   virtual const PIP_Decision_Node* as_decision() const = 0;
+16535: # 99 "../../src/PIP_Tree_defs.hh"
+16535:   const Constraint_System& constraints() const;
+16535: 
+16535:   class Artificial_Parameter;
+16535: 
+16535: 
+16535:   typedef std::vector<Artificial_Parameter> Artificial_Parameter_Sequence;
+16535: 
+16535: 
+16535:   Artificial_Parameter_Sequence::const_iterator art_parameter_begin() const;
+16535: 
+16535: 
+16535:   Artificial_Parameter_Sequence::const_iterator art_parameter_end() const;
+16535: 
+16535: 
+16535:   dimension_type art_parameter_count() const;
+16535: # 123 "../../src/PIP_Tree_defs.hh"
+16535:   void print(std::ostream& s, int indent = 0) const;
+16535: 
+16535: 
+16535:   void ascii_dump(std::ostream& s) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   virtual memory_size_type total_memory_in_bytes() const = 0;
+16535: 
+16535:   virtual memory_size_type external_memory_in_bytes() const = 0;
+16535: 
+16535: protected:
+16535: 
+16535:   typedef std::vector<Constraint> Constraint_Sequence;
+16535: 
+16535: 
+16535: 
+16535:   friend class PIP_Problem;
+16535:   friend class PIP_Decision_Node;
+16535:   friend class PIP_Solution_Node;
+16535: 
+16535: 
+16535:   const PIP_Problem* owner_;
+16535: 
+16535: 
+16535:   const PIP_Decision_Node* parent_;
+16535: 
+16535: 
+16535:   Constraint_System constraints_;
+16535: 
+16535: 
+16535:   Artificial_Parameter_Sequence artificial_parameters;
+16535: 
+16535: 
+16535:   const PIP_Decision_Node* parent() const;
+16535: 
+16535: 
+16535:   void set_parent(const PIP_Decision_Node* p);
+16535: # 188 "../../src/PIP_Tree_defs.hh"
+16535:   virtual void update_tableau(const PIP_Problem& pip,
+16535:                               dimension_type external_space_dim,
+16535:                               dimension_type first_pending_constraint,
+16535:                               const Constraint_Sequence& input_cs,
+16535:                               const Variables_Set& parameters) = 0;
+16535: # 219 "../../src/PIP_Tree_defs.hh"
+16535:   virtual PIP_Tree_Node* solve(const PIP_Problem& pip,
+16535:                                bool check_feasible_context,
+16535:                                const Matrix<Row>& context,
+16535:                                const Variables_Set& params,
+16535:                                dimension_type space_dim,
+16535:                                int indent_level) = 0;
+16535: 
+16535: 
+16535:   void add_constraint(const Row& row, const Variables_Set& parameters);
+16535: 
+16535: 
+16535:   void parent_merge();
+16535: # 249 "../../src/PIP_Tree_defs.hh"
+16535:   virtual void print_tree(std::ostream& s,
+16535:                           int indent,
+16535:                           const std::vector<bool>& pip_dim_is_param,
+16535:                           dimension_type first_art_dim) const = 0;
+16535: 
+16535: 
+16535:   static void
+16535:   indent_and_print(std::ostream& s, int indent, const char* str);
+16535: # 266 "../../src/PIP_Tree_defs.hh"
+16535:   static bool compatibility_check(Matrix<Row>& s);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static bool compatibility_check(const Matrix<Row>& context, const Row& row);
+16535: 
+16535: };
+16535: # 285 "../../src/PIP_Tree_defs.hh"
+16535: class PIP_Tree_Node::Artificial_Parameter
+16535:   : public Linear_Expression {
+16535: public:
+16535: 
+16535:   Artificial_Parameter();
+16535: # 308 "../../src/PIP_Tree_defs.hh"
+16535:   Artificial_Parameter(const Linear_Expression& expr,
+16535:                        Coefficient_traits::const_reference d);
+16535: 
+16535: 
+16535:   Artificial_Parameter(const Artificial_Parameter& y);
+16535: 
+16535: 
+16535:   Coefficient_traits::const_reference denominator() const;
+16535: 
+16535: 
+16535:   void m_swap(Artificial_Parameter& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool operator==(const Artificial_Parameter& y) const;
+16535: 
+16535:   bool operator!=(const Artificial_Parameter& y) const;
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535: private:
+16535: 
+16535:   Coefficient denom;
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: void
+16535: swap(PIP_Tree_Node::Artificial_Parameter& x,
+16535:      PIP_Tree_Node::Artificial_Parameter& y);
+16535: 
+16535: 
+16535: 
+16535: class PIP_Solution_Node : public PIP_Tree_Node {
+16535: public:
+16535: 
+16535: 
+16535:   explicit PIP_Solution_Node(const PIP_Problem* owner);
+16535: 
+16535: 
+16535:   virtual PIP_Tree_Node* clone() const;
+16535: 
+16535: 
+16535:   virtual ~PIP_Solution_Node();
+16535: 
+16535: 
+16535:   virtual bool OK() const;
+16535: 
+16535: 
+16535:   virtual const PIP_Solution_Node* as_solution() const;
+16535: 
+16535: 
+16535:   virtual const PIP_Decision_Node* as_decision() const;
+16535: # 394 "../../src/PIP_Tree_defs.hh"
+16535:   const Linear_Expression& parametric_values(Variable var) const;
+16535: 
+16535: 
+16535:   void ascii_dump(std::ostream& os) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& is);
+16535: 
+16535: 
+16535:   virtual memory_size_type total_memory_in_bytes() const;
+16535: 
+16535:   virtual memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: private:
+16535: 
+16535:   struct Tableau {
+16535: 
+16535:     Matrix<Row> s;
+16535: 
+16535:     Matrix<Row> t;
+16535: 
+16535:     Coefficient denom;
+16535: 
+16535: 
+16535:     Tableau();
+16535: 
+16535:     Tableau(const Tableau& y);
+16535: 
+16535:     ~Tableau();
+16535: 
+16535: 
+16535:     bool is_integer() const;
+16535: 
+16535: 
+16535:     void scale(Coefficient_traits::const_reference ratio);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     void normalize();
+16535: # 490 "../../src/PIP_Tree_defs.hh"
+16535:     bool is_better_pivot(const std::vector<dimension_type>& mapping,
+16535:                          const std::vector<bool>& basis,
+16535:                          const dimension_type row_0,
+16535:                          const dimension_type col_0,
+16535:                          const dimension_type row_1,
+16535:                          const dimension_type col_1) const;
+16535: 
+16535: 
+16535:     Coefficient_traits::const_reference denominator() const;
+16535: 
+16535: 
+16535:     void ascii_dump(std::ostream& os) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     bool ascii_load(std::istream& is);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535:     bool OK() const;
+16535:   };
+16535: 
+16535: 
+16535:   Tableau tableau;
+16535: # 543 "../../src/PIP_Tree_defs.hh"
+16535:   std::vector<bool> basis;
+16535: # 555 "../../src/PIP_Tree_defs.hh"
+16535:   std::vector<dimension_type> mapping;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   std::vector<dimension_type> var_row;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   std::vector<dimension_type> var_column;
+16535: # 584 "../../src/PIP_Tree_defs.hh"
+16535:   dimension_type special_equality_row;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type big_dimension;
+16535: 
+16535: 
+16535:   enum Row_Sign {
+16535: 
+16535:     UNKNOWN,
+16535: 
+16535:     ZERO,
+16535: 
+16535:     POSITIVE,
+16535: 
+16535:     NEGATIVE,
+16535: 
+16535:     MIXED
+16535:   };
+16535: 
+16535: 
+16535:   std::vector<Row_Sign> sign;
+16535: 
+16535: 
+16535:   std::vector<Linear_Expression> solution;
+16535: 
+16535: 
+16535:   bool solution_valid;
+16535: 
+16535: 
+16535:   static Row_Sign row_sign(const Row& x,
+16535:                            dimension_type big_dimension);
+16535: 
+16535: protected:
+16535: 
+16535:   PIP_Solution_Node(const PIP_Solution_Node& y);
+16535: 
+16535: 
+16535:   struct No_Constraints {};
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   PIP_Solution_Node(const PIP_Solution_Node& y, No_Constraints);
+16535: 
+16535: 
+16535:   friend bool PIP_Problem::ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   virtual void set_owner(const PIP_Problem* owner);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual bool check_ownership(const PIP_Problem* owner) const;
+16535: 
+16535: 
+16535:   virtual void update_tableau(const PIP_Problem& pip,
+16535:                               dimension_type external_space_dim,
+16535:                               dimension_type first_pending_constraint,
+16535:                               const Constraint_Sequence& input_cs,
+16535:                               const Variables_Set& parameters);
+16535: # 660 "../../src/PIP_Tree_defs.hh"
+16535:   void update_solution(const std::vector<bool>& pip_dim_is_param) const;
+16535: 
+16535: 
+16535:   void update_solution() const;
+16535: 
+16535: 
+16535:   virtual PIP_Tree_Node* solve(const PIP_Problem& pip,
+16535:                                bool check_feasible_context,
+16535:                                const Matrix<Row>& context,
+16535:                                const Variables_Set& params,
+16535:                                dimension_type space_dim,
+16535:                                int indent_level);
+16535: # 694 "../../src/PIP_Tree_defs.hh"
+16535:   void generate_cut(dimension_type index, Variables_Set& parameters,
+16535:                     Matrix<Row>& context, dimension_type& space_dimension,
+16535:                     int indent_level);
+16535: 
+16535: 
+16535:   virtual void print_tree(std::ostream& s, int indent,
+16535:                           const std::vector<bool>& pip_dim_is_param,
+16535:                           dimension_type first_art_dim) const;
+16535: 
+16535: };
+16535: 
+16535: 
+16535: 
+16535: class PIP_Decision_Node : public PIP_Tree_Node {
+16535: public:
+16535: 
+16535:   virtual PIP_Tree_Node* clone() const;
+16535: 
+16535: 
+16535:   virtual ~PIP_Decision_Node();
+16535: 
+16535: 
+16535:   virtual bool OK() const;
+16535: 
+16535: 
+16535:   virtual const PIP_Decision_Node* as_decision() const;
+16535: 
+16535: 
+16535:   virtual const PIP_Solution_Node* as_solution() const;
+16535: 
+16535: 
+16535:   const PIP_Tree_Node* child_node(bool b) const;
+16535: 
+16535: 
+16535:   PIP_Tree_Node* child_node(bool b);
+16535: 
+16535: 
+16535:   void ascii_dump(std::ostream& s) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   virtual memory_size_type total_memory_in_bytes() const;
+16535: 
+16535:   virtual memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: private:
+16535: 
+16535:   friend class PIP_Solution_Node;
+16535: 
+16535: 
+16535:   friend bool PIP_Problem::ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   PIP_Tree_Node* false_child;
+16535: 
+16535: 
+16535:   PIP_Tree_Node* true_child;
+16535: # 780 "../../src/PIP_Tree_defs.hh"
+16535:   explicit PIP_Decision_Node(const PIP_Problem* owner,
+16535:                              PIP_Tree_Node* fcp,
+16535:                              PIP_Tree_Node* tcp);
+16535: 
+16535: 
+16535:   virtual void set_owner(const PIP_Problem* owner);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual bool check_ownership(const PIP_Problem* owner) const;
+16535: 
+16535: protected:
+16535: 
+16535:   PIP_Decision_Node(const PIP_Decision_Node& y);
+16535: 
+16535: 
+16535:   virtual void update_tableau(const PIP_Problem& pip,
+16535:                               dimension_type external_space_dim,
+16535:                               dimension_type first_pending_constraint,
+16535:                               const Constraint_Sequence& input_cs,
+16535:                               const Variables_Set& parameters);
+16535: 
+16535: 
+16535:   virtual PIP_Tree_Node* solve(const PIP_Problem& pip,
+16535:                                bool check_feasible_context,
+16535:                                const Matrix<Row>& context,
+16535:                                const Variables_Set& params,
+16535:                                dimension_type space_dim,
+16535:                                int indent_level);
+16535: 
+16535: 
+16535:   virtual void print_tree(std::ostream& s, int indent,
+16535:                           const std::vector<bool>& pip_dim_is_param,
+16535:                           dimension_type first_art_dim) const;
+16535: 
+16535: };
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: std::ostream& operator<<(std::ostream& os, const PIP_Tree_Node& x);
+16535: 
+16535: 
+16535: 
+16535: std::ostream& operator<<(std::ostream& os,
+16535:                          const PIP_Tree_Node::Artificial_Parameter& x);
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/PIP_Tree_inlines.hh" 1
+16535: # 27 "../../src/PIP_Tree_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline
+16535: PIP_Solution_Node::Tableau::Tableau()
+16535:   : s(), t(), denom(1) {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: PIP_Solution_Node::Tableau::Tableau(const Tableau& y)
+16535:   : s(y.s), t(y.t), denom(y.denom) {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: PIP_Solution_Node::Tableau::~Tableau() {
+16535: }
+16535: 
+16535: inline bool
+16535: PIP_Solution_Node::Tableau::is_integer() const {
+16535:   return denom == 1;
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: PIP_Solution_Node::Tableau::denominator() const {
+16535:   return denom;
+16535: }
+16535: 
+16535: inline void
+16535: PIP_Tree_Node::set_parent(const PIP_Decision_Node* p) {
+16535:   parent_ = p;
+16535: }
+16535: 
+16535: inline const PIP_Decision_Node*
+16535: PIP_Tree_Node::parent() const {
+16535:   return parent_;
+16535: }
+16535: 
+16535: inline const PIP_Problem*
+16535: PIP_Tree_Node::get_owner() const {
+16535:   return owner_;
+16535: }
+16535: 
+16535: inline const Constraint_System&
+16535: PIP_Tree_Node::constraints() const {
+16535:   return constraints_;
+16535: }
+16535: 
+16535: inline PIP_Tree_Node::Artificial_Parameter_Sequence::const_iterator
+16535: PIP_Tree_Node::art_parameter_begin() const {
+16535:   return artificial_parameters.begin();
+16535: }
+16535: 
+16535: inline PIP_Tree_Node::Artificial_Parameter_Sequence::const_iterator
+16535: PIP_Tree_Node::art_parameter_end() const {
+16535:   return artificial_parameters.end();
+16535: }
+16535: 
+16535: inline dimension_type
+16535: PIP_Tree_Node::art_parameter_count() const {
+16535:   return artificial_parameters.size();
+16535: }
+16535: 
+16535: inline
+16535: const PIP_Tree_Node*
+16535: PIP_Decision_Node::child_node(bool b) const {
+16535:   return b ? true_child : false_child;
+16535: }
+16535: 
+16535: inline
+16535: PIP_Tree_Node*
+16535: PIP_Decision_Node::child_node(bool b) {
+16535:   return b ? true_child : false_child;
+16535: }
+16535: 
+16535: inline
+16535: PIP_Tree_Node::Artificial_Parameter::Artificial_Parameter()
+16535:   : Linear_Expression(), denom(1) {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: PIP_Tree_Node::Artificial_Parameter
+16535: ::Artificial_Parameter(const Artificial_Parameter& y)
+16535:   : Linear_Expression(y), denom(y.denom) {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline Coefficient_traits::const_reference
+16535: PIP_Tree_Node::Artificial_Parameter::denominator() const {
+16535:   return denom;
+16535: }
+16535: 
+16535: inline void
+16535: PIP_Tree_Node::Artificial_Parameter::m_swap(Artificial_Parameter& y) {
+16535:   Linear_Expression::m_swap(y);
+16535:   using std::swap;
+16535:   swap(denom, y.denom);
+16535: }
+16535: 
+16535: 
+16535: inline void
+16535: swap(PIP_Tree_Node::Artificial_Parameter& x,
+16535:      PIP_Tree_Node::Artificial_Parameter& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 835 "../../src/PIP_Tree_defs.hh" 2
+16535: # 12 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/BHRZ03_Certificate_defs.hh" 1
+16535: # 42 "../../src/BHRZ03_Certificate_defs.hh"
+16535: class Parma_Polyhedra_Library::BHRZ03_Certificate {
+16535: public:
+16535: 
+16535:   BHRZ03_Certificate();
+16535: 
+16535: 
+16535:   BHRZ03_Certificate(const Polyhedron& ph);
+16535: 
+16535: 
+16535:   BHRZ03_Certificate(const BHRZ03_Certificate& y);
+16535: 
+16535: 
+16535:   ~BHRZ03_Certificate();
+16535: # 66 "../../src/BHRZ03_Certificate_defs.hh"
+16535:   int compare(const BHRZ03_Certificate& y) const;
+16535: 
+16535: 
+16535:   int compare(const Polyhedron& ph) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_stabilizing(const Polyhedron& ph) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   struct Compare {
+16535: 
+16535:     bool operator()(const BHRZ03_Certificate& x,
+16535:                     const BHRZ03_Certificate& y) const;
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535: private:
+16535: 
+16535:   dimension_type affine_dim;
+16535: 
+16535:   dimension_type lin_space_dim;
+16535: 
+16535:   dimension_type num_constraints;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type num_points;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   std::vector<dimension_type> num_rays_null_coord;
+16535: };
+16535: 
+16535: # 1 "../../src/BHRZ03_Certificate_inlines.hh" 1
+16535: # 29 "../../src/BHRZ03_Certificate_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline
+16535: BHRZ03_Certificate::BHRZ03_Certificate()
+16535:   : affine_dim(0), lin_space_dim(0), num_constraints(0), num_points(1),
+16535:     num_rays_null_coord() {
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: BHRZ03_Certificate::BHRZ03_Certificate(const BHRZ03_Certificate& y)
+16535:   : affine_dim(y.affine_dim), lin_space_dim(y.lin_space_dim),
+16535:     num_constraints(y.num_constraints), num_points(y.num_points),
+16535:     num_rays_null_coord(y.num_rays_null_coord) {
+16535: }
+16535: 
+16535: inline
+16535: BHRZ03_Certificate::~BHRZ03_Certificate() {
+16535: }
+16535: 
+16535: inline bool
+16535: BHRZ03_Certificate::is_stabilizing(const Polyhedron& ph) const {
+16535:   return compare(ph) == 1;
+16535: }
+16535: 
+16535: inline bool
+16535: BHRZ03_Certificate::Compare::operator()(const BHRZ03_Certificate& x,
+16535:                                         const BHRZ03_Certificate& y) const {
+16535: 
+16535: 
+16535:   return x.compare(y) == 1;
+16535: }
+16535: 
+16535: }
+16535: # 116 "../../src/BHRZ03_Certificate_defs.hh" 2
+16535: # 13 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/H79_Certificate_defs.hh" 1
+16535: # 40 "../../src/H79_Certificate_defs.hh"
+16535: class Parma_Polyhedra_Library::H79_Certificate {
+16535: public:
+16535: 
+16535:   H79_Certificate();
+16535: 
+16535: 
+16535:   template <typename PH>
+16535:   H79_Certificate(const PH& ph);
+16535: 
+16535: 
+16535:   H79_Certificate(const Polyhedron& ph);
+16535: 
+16535: 
+16535:   H79_Certificate(const H79_Certificate& y);
+16535: 
+16535: 
+16535:   ~H79_Certificate();
+16535: # 68 "../../src/H79_Certificate_defs.hh"
+16535:   int compare(const H79_Certificate& y) const;
+16535: 
+16535: 
+16535:   template <typename PH>
+16535:   int compare(const PH& ph) const;
+16535: 
+16535: 
+16535:   int compare(const Polyhedron& ph) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   struct Compare {
+16535: 
+16535:     bool operator()(const H79_Certificate& x,
+16535:                     const H79_Certificate& y) const;
+16535:   };
+16535: 
+16535: private:
+16535: 
+16535:   dimension_type affine_dim;
+16535: 
+16535:   dimension_type num_constraints;
+16535: };
+16535: 
+16535: # 1 "../../src/H79_Certificate_inlines.hh" 1
+16535: # 29 "../../src/H79_Certificate_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline
+16535: H79_Certificate::H79_Certificate()
+16535:   : affine_dim(0), num_constraints(0) {
+16535: 
+16535: }
+16535: 
+16535: inline
+16535: H79_Certificate::H79_Certificate(const H79_Certificate& y)
+16535:   : affine_dim(y.affine_dim), num_constraints(y.num_constraints) {
+16535: }
+16535: 
+16535: inline
+16535: H79_Certificate::~H79_Certificate() {
+16535: }
+16535: 
+16535: inline bool
+16535: H79_Certificate::Compare::operator()(const H79_Certificate& x,
+16535:                                      const H79_Certificate& y) const {
+16535: 
+16535: 
+16535:   return x.compare(y) == 1;
+16535: }
+16535: 
+16535: template <typename PH>
+16535: inline
+16535: H79_Certificate::H79_Certificate(const PH& ph)
+16535:   : affine_dim(0), num_constraints(0) {
+16535:   H79_Certificate cert(Polyhedron(NECESSARILY_CLOSED, ph.constraints()));
+16535:   affine_dim = cert.affine_dim;
+16535:   num_constraints = cert.num_constraints;
+16535: }
+16535: 
+16535: template <typename PH>
+16535: inline int
+16535: H79_Certificate::compare(const PH& ph) const {
+16535:   return this->compare(Polyhedron(NECESSARILY_CLOSED, ph.constraints()));
+16535: }
+16535: 
+16535: }
+16535: # 96 "../../src/H79_Certificate_defs.hh" 2
+16535: # 14 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/Grid_Certificate_defs.hh" 1
+16535: # 43 "../../src/Grid_Certificate_defs.hh"
+16535: class Parma_Polyhedra_Library::Grid_Certificate {
+16535: public:
+16535: 
+16535:   Grid_Certificate();
+16535: 
+16535: 
+16535:   Grid_Certificate(const Grid& gr);
+16535: 
+16535: 
+16535:   Grid_Certificate(const Grid_Certificate& y);
+16535: 
+16535: 
+16535:   ~Grid_Certificate();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   int compare(const Grid_Certificate& y) const;
+16535: 
+16535: 
+16535:   int compare(const Grid& gr) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_stabilizing(const Grid& gr) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   struct Compare {
+16535: 
+16535:     bool operator()(const Grid_Certificate& x,
+16535:                     const Grid_Certificate& y) const;
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535: private:
+16535: 
+16535: 
+16535:   dimension_type num_equalities;
+16535: 
+16535: 
+16535:   dimension_type num_proper_congruences;
+16535: };
+16535: 
+16535: # 1 "../../src/Grid_Certificate_inlines.hh" 1
+16535: # 29 "../../src/Grid_Certificate_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline
+16535: Grid_Certificate::Grid_Certificate()
+16535:   : num_equalities(0), num_proper_congruences(0) {
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: inline
+16535: Grid_Certificate::Grid_Certificate(const Grid_Certificate& y)
+16535:   : num_equalities(y.num_equalities),
+16535:     num_proper_congruences(y.num_proper_congruences) {
+16535: }
+16535: 
+16535: inline
+16535: Grid_Certificate::~Grid_Certificate() {
+16535: }
+16535: 
+16535: inline bool
+16535: Grid_Certificate::is_stabilizing(const Grid& gr) const {
+16535:   return compare(gr) == 1;
+16535: }
+16535: 
+16535: inline bool
+16535: Grid_Certificate::Compare::operator()(const Grid_Certificate& x,
+16535:                                       const Grid_Certificate& y) const {
+16535: 
+16535: 
+16535:   return x.compare(y) == 1;
+16535: }
+16535: 
+16535: }
+16535: # 102 "../../src/Grid_Certificate_defs.hh" 2
+16535: # 15 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/Partial_Function_defs.hh" 1
+16535: # 27 "../../src/Partial_Function_defs.hh"
+16535: # 1 "../../src/Partial_Function_types.hh" 1
+16535: # 16 "../../src/Partial_Function_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Partial_Function;
+16535: 
+16535: }
+16535: # 28 "../../src/Partial_Function_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Partial_Function {
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Partial_Function();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool has_empty_codomain() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type max_in_codomain() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool maps(dimension_type i, dimension_type& j) const;
+16535: 
+16535:   void print(std::ostream& s) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void insert(dimension_type i, dimension_type j);
+16535: 
+16535: private:
+16535:   std::vector<dimension_type> vec;
+16535:   dimension_type max;
+16535: 
+16535: 
+16535: 
+16535: };
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Partial_Function_inlines.hh" 1
+16535: # 30 "../../src/Partial_Function_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline
+16535: Partial_Function::Partial_Function()
+16535:   : max(0) {
+16535: }
+16535: 
+16535: inline bool
+16535: Partial_Function::has_empty_codomain() const {
+16535:   ((void) 0);
+16535:   return vec.empty();
+16535: }
+16535: 
+16535: inline dimension_type
+16535: Partial_Function::max_in_codomain() const {
+16535:   if (has_empty_codomain()) {
+16535:     throw std::runtime_error("Partial_Function::max_in_codomain() called"
+16535:                              " when has_empty_codomain()");
+16535:   }
+16535:   ((void) 0)
+16535:                                           ;
+16535:   return max;
+16535: }
+16535: 
+16535: inline void
+16535: Partial_Function::insert(dimension_type i, dimension_type j) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const dimension_type sz = vec.size();
+16535:   if (i >= sz) {
+16535:     vec.insert(vec.end(), i - sz + 1, not_a_dimension());
+16535:   }
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   vec[i] = j;
+16535: 
+16535: 
+16535:   if (j > max) {
+16535:     max = j;
+16535:   }
+16535:   ((void) 0)
+16535:                                           ;
+16535: }
+16535: 
+16535: inline bool
+16535: Partial_Function::maps(dimension_type i, dimension_type& j) const {
+16535:   if (i >= vec.size()) {
+16535:     return false;
+16535:   }
+16535:   const dimension_type vec_i = vec[i];
+16535:   if (vec_i == not_a_dimension()) {
+16535:     return false;
+16535:   }
+16535:   j = vec_i;
+16535:   return true;
+16535: }
+16535: 
+16535: }
+16535: # 86 "../../src/Partial_Function_defs.hh" 2
+16535: # 16 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/Widening_Function_defs.hh" 1
+16535: # 27 "../../src/Widening_Function_defs.hh"
+16535: # 1 "../../src/Widening_Function_types.hh" 1
+16535: # 16 "../../src/Widening_Function_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename PSET>
+16535: class Widening_Function;
+16535: 
+16535: template <typename PSET, typename CSYS>
+16535: class Limited_Widening_Function;
+16535: 
+16535: }
+16535: # 28 "../../src/Widening_Function_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename PSET>
+16535: class Parma_Polyhedra_Library::Widening_Function {
+16535: public:
+16535: 
+16535:   typedef void (PSET::* Widening_Method)(const PSET&, unsigned*);
+16535: 
+16535: 
+16535:   explicit
+16535:   Widening_Function(Widening_Method wm);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void operator()(PSET& x, const PSET& y, unsigned* tp = 0) const;
+16535: 
+16535: private:
+16535: 
+16535:   Widening_Method w_method;
+16535: };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename PSET, typename CSYS>
+16535: class Parma_Polyhedra_Library::Limited_Widening_Function {
+16535: public:
+16535: 
+16535:   typedef void (PSET::* Limited_Widening_Method)(const PSET&,
+16535:                                                  const CSYS&,
+16535:                                                  unsigned*);
+16535: # 77 "../../src/Widening_Function_defs.hh"
+16535:   Limited_Widening_Function(Limited_Widening_Method lwm,
+16535:                             const CSYS& cs);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void operator()(PSET& x, const PSET& y, unsigned* tp = 0) const;
+16535: 
+16535: private:
+16535: 
+16535:   Limited_Widening_Method lw_method;
+16535: 
+16535:   const CSYS& limiting_cs;
+16535: };
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: # 104 "../../src/Widening_Function_defs.hh"
+16535: template <typename PSET>
+16535: Widening_Function<PSET>
+16535: widen_fun_ref(void (PSET::* wm)(const PSET&, unsigned*));
+16535: # 118 "../../src/Widening_Function_defs.hh"
+16535: template <typename PSET, typename CSYS>
+16535: Limited_Widening_Function<PSET, CSYS>
+16535: widen_fun_ref(void (PSET::* lwm)(const PSET&, const CSYS&, unsigned*),
+16535:               const CSYS& cs);
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Widening_Function_inlines.hh" 1
+16535: # 29 "../../src/Widening_Function_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename PSET>
+16535: Widening_Function<PSET>::Widening_Function(Widening_Method wm)
+16535:   : w_method(wm) {
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline void
+16535: Widening_Function<PSET>::
+16535: operator()(PSET& x, const PSET& y, unsigned* tp) const {
+16535:   (x.*w_method)(y, tp);
+16535: }
+16535: 
+16535: template <typename PSET, typename CSYS>
+16535: Limited_Widening_Function<PSET, CSYS>::
+16535: Limited_Widening_Function(Limited_Widening_Method lwm,
+16535:                           const CSYS& cs)
+16535:   : lw_method(lwm), limiting_cs(cs) {
+16535: }
+16535: 
+16535: template <typename PSET, typename CSYS>
+16535: inline void
+16535: Limited_Widening_Function<PSET, CSYS>::
+16535: operator()(PSET& x, const PSET& y, unsigned* tp) const {
+16535:   (x.*lw_method)(y, limiting_cs, tp);
+16535: }
+16535: 
+16535: 
+16535: template <typename PSET>
+16535: inline Widening_Function<PSET>
+16535: widen_fun_ref(void (PSET::* wm)(const PSET&, unsigned*)) {
+16535:   return Widening_Function<PSET>(wm);
+16535: }
+16535: 
+16535: 
+16535: template <typename PSET, typename CSYS>
+16535: inline Limited_Widening_Function<PSET, CSYS>
+16535: widen_fun_ref(void (PSET::* lwm)(const PSET&, const CSYS&, unsigned*),
+16535:               const CSYS& cs) {
+16535:   return Limited_Widening_Function<PSET, CSYS>(lwm, cs);
+16535: }
+16535: 
+16535: }
+16535: # 126 "../../src/Widening_Function_defs.hh" 2
+16535: # 17 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/max_space_dimension.hh" 1
+16535: # 29 "../../src/max_space_dimension.hh"
+16535: # 1 "../../src/NNC_Polyhedron_defs.hh" 1
+16535: # 46 "../../src/NNC_Polyhedron_defs.hh"
+16535: class Parma_Polyhedra_Library::NNC_Polyhedron : public Polyhedron {
+16535: public:
+16535: # 62 "../../src/NNC_Polyhedron_defs.hh"
+16535:   explicit NNC_Polyhedron(dimension_type num_dimensions = 0,
+16535:                           Degenerate_Element kind = UNIVERSE);
+16535: # 72 "../../src/NNC_Polyhedron_defs.hh"
+16535:   explicit NNC_Polyhedron(const Constraint_System& cs);
+16535: # 87 "../../src/NNC_Polyhedron_defs.hh"
+16535:   NNC_Polyhedron(Constraint_System& cs, Recycle_Input dummy);
+16535: # 99 "../../src/NNC_Polyhedron_defs.hh"
+16535:   explicit NNC_Polyhedron(const Generator_System& gs);
+16535: # 117 "../../src/NNC_Polyhedron_defs.hh"
+16535:   NNC_Polyhedron(Generator_System& gs, Recycle_Input dummy);
+16535: # 128 "../../src/NNC_Polyhedron_defs.hh"
+16535:   explicit NNC_Polyhedron(const Congruence_System& cgs);
+16535: # 144 "../../src/NNC_Polyhedron_defs.hh"
+16535:   NNC_Polyhedron(Congruence_System& cgs, Recycle_Input dummy);
+16535: # 154 "../../src/NNC_Polyhedron_defs.hh"
+16535:   explicit NNC_Polyhedron(const C_Polyhedron& y,
+16535:                           Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 173 "../../src/NNC_Polyhedron_defs.hh"
+16535:   template <typename Interval>
+16535:   explicit NNC_Polyhedron(const Box<Interval>& box,
+16535:                           Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 189 "../../src/NNC_Polyhedron_defs.hh"
+16535:   explicit NNC_Polyhedron(const Grid& grid,
+16535:                           Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 204 "../../src/NNC_Polyhedron_defs.hh"
+16535:   template <typename U>
+16535:   explicit NNC_Polyhedron(const BD_Shape<U>& bd,
+16535:                           Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 220 "../../src/NNC_Polyhedron_defs.hh"
+16535:   template <typename U>
+16535:   explicit NNC_Polyhedron(const Octagonal_Shape<U>& os,
+16535:                           Complexity_Class complexity = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535:   NNC_Polyhedron(const NNC_Polyhedron& y,
+16535:                  Complexity_Class complexity = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   NNC_Polyhedron& operator=(const NNC_Polyhedron& y);
+16535: 
+16535: 
+16535:   NNC_Polyhedron& operator=(const C_Polyhedron& y);
+16535: 
+16535: 
+16535:   ~NNC_Polyhedron();
+16535: # 248 "../../src/NNC_Polyhedron_defs.hh"
+16535:   bool poly_hull_assign_if_exact(const NNC_Polyhedron& y);
+16535: 
+16535: 
+16535:   bool upper_bound_assign_if_exact(const NNC_Polyhedron& y);
+16535: # 262 "../../src/NNC_Polyhedron_defs.hh"
+16535:   void positive_time_elapse_assign(const Polyhedron& y);
+16535: };
+16535: 
+16535: # 1 "../../src/NNC_Polyhedron_inlines.hh" 1
+16535: # 29 "../../src/NNC_Polyhedron_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: inline
+16535: NNC_Polyhedron::~NNC_Polyhedron() {
+16535: }
+16535: 
+16535: inline
+16535: NNC_Polyhedron::NNC_Polyhedron(dimension_type num_dimensions,
+16535:                                Degenerate_Element kind)
+16535:   : Polyhedron(NOT_NECESSARILY_CLOSED,
+16535:                check_space_dimension_overflow(num_dimensions,
+16535:                                               NOT_NECESSARILY_CLOSED,
+16535:                                               "NNC_Polyhedron(n, k)",
+16535:                                               "n exceeds the maximum "
+16535:                                               "allowed space dimension"),
+16535:                kind) {
+16535: }
+16535: 
+16535: inline
+16535: NNC_Polyhedron::NNC_Polyhedron(const Constraint_System& cs)
+16535:   : Polyhedron(NOT_NECESSARILY_CLOSED,
+16535:                check_obj_space_dimension_overflow(cs, NOT_NECESSARILY_CLOSED,
+16535:                                                   "NNC_Polyhedron(cs)",
+16535:                                                   "the space dimension of cs "
+16535:                                                   "exceeds the maximum allowed "
+16535:                                                   "space dimension")) {
+16535: }
+16535: 
+16535: inline
+16535: NNC_Polyhedron::NNC_Polyhedron(Constraint_System& cs, Recycle_Input)
+16535:   : Polyhedron(NOT_NECESSARILY_CLOSED,
+16535:                check_obj_space_dimension_overflow(cs, NOT_NECESSARILY_CLOSED,
+16535:                                                   "NNC_Polyhedron(cs, recycle)",
+16535:                                                   "the space dimension of cs "
+16535:                                                   "exceeds the maximum allowed "
+16535:                                                   "space dimension"),
+16535:                Recycle_Input()) {
+16535: }
+16535: 
+16535: inline
+16535: NNC_Polyhedron::NNC_Polyhedron(const Generator_System& gs)
+16535:   : Polyhedron(NOT_NECESSARILY_CLOSED,
+16535:                check_obj_space_dimension_overflow(gs, NOT_NECESSARILY_CLOSED,
+16535:                                                   "NNC_Polyhedron(gs)",
+16535:                                                   "the space dimension of gs "
+16535:                                                   "exceeds the maximum allowed "
+16535:                                                   "space dimension")) {
+16535: }
+16535: 
+16535: inline
+16535: NNC_Polyhedron::NNC_Polyhedron(Generator_System& gs, Recycle_Input)
+16535:   : Polyhedron(NOT_NECESSARILY_CLOSED,
+16535:                check_obj_space_dimension_overflow(gs, NOT_NECESSARILY_CLOSED,
+16535:                                                   "NNC_Polyhedron(gs, recycle)",
+16535:                                                   "the space dimension of gs "
+16535:                                                   "exceeds the maximum allowed "
+16535:                                                   "space dimension"),
+16535:                Recycle_Input()) {
+16535: }
+16535: 
+16535: template <typename Interval>
+16535: inline
+16535: NNC_Polyhedron::NNC_Polyhedron(const Box<Interval>& box, Complexity_Class)
+16535:   : Polyhedron(NOT_NECESSARILY_CLOSED,
+16535:                check_obj_space_dimension_overflow(box, NOT_NECESSARILY_CLOSED,
+16535:                                                   "NNC_Polyhedron(box)",
+16535:                                                   "the space dimension of box "
+16535:                                                   "exceeds the maximum allowed "
+16535:                                                   "space dimension")) {
+16535: }
+16535: 
+16535: template <typename U>
+16535: inline
+16535: NNC_Polyhedron::NNC_Polyhedron(const BD_Shape<U>& bd, Complexity_Class)
+16535:   : Polyhedron(NOT_NECESSARILY_CLOSED,
+16535:                check_space_dimension_overflow(bd.space_dimension(),
+16535:                                               NOT_NECESSARILY_CLOSED,
+16535:                                               "NNC_Polyhedron(bd)",
+16535:                                               "the space dimension of bd "
+16535:                                               "exceeds the maximum allowed "
+16535:                                               "space dimension"),
+16535:                UNIVERSE) {
+16535:   add_constraints(bd.constraints());
+16535: }
+16535: 
+16535: template <typename U>
+16535: inline
+16535: NNC_Polyhedron::NNC_Polyhedron(const Octagonal_Shape<U>& os, Complexity_Class)
+16535:   : Polyhedron(NOT_NECESSARILY_CLOSED,
+16535:                check_space_dimension_overflow(os.space_dimension(),
+16535:                                               NOT_NECESSARILY_CLOSED,
+16535:                                               "NNC_Polyhedron(os)",
+16535:                                               "the space dimension of os "
+16535:                                               "exceeds the maximum allowed "
+16535:                                               "space dimension"),
+16535:                UNIVERSE) {
+16535:   add_constraints(os.constraints());
+16535: }
+16535: 
+16535: inline
+16535: NNC_Polyhedron::NNC_Polyhedron(const NNC_Polyhedron& y, Complexity_Class)
+16535:   : Polyhedron(y) {
+16535: }
+16535: 
+16535: inline NNC_Polyhedron&
+16535: NNC_Polyhedron::operator=(const NNC_Polyhedron& y) {
+16535:   Polyhedron::operator=(y);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline NNC_Polyhedron&
+16535: NNC_Polyhedron::operator=(const C_Polyhedron& y) {
+16535:   NNC_Polyhedron nnc_y(y);
+16535:   m_swap(nnc_y);
+16535:   return *this;
+16535: }
+16535: 
+16535: inline bool
+16535: NNC_Polyhedron::upper_bound_assign_if_exact(const NNC_Polyhedron& y) {
+16535:   return poly_hull_assign_if_exact(y);
+16535: }
+16535: 
+16535: inline void
+16535: NNC_Polyhedron::positive_time_elapse_assign(const Polyhedron& y) {
+16535:   Polyhedron::positive_time_elapse_assign_impl(y);
+16535: }
+16535: 
+16535: }
+16535: # 266 "../../src/NNC_Polyhedron_defs.hh" 2
+16535: # 30 "../../src/max_space_dimension.hh" 2
+16535: 
+16535: # 1 "../../src/Rational_Box.hh" 1
+16535: # 30 "../../src/Rational_Box.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef Box<Rational_Interval> Rational_Box;
+16535: 
+16535: }
+16535: # 32 "../../src/max_space_dimension.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: inline dimension_type
+16535: max_space_dimension() {
+16535: 
+16535: 
+16535:   static bool computed = false;
+16535:   static dimension_type d = not_a_dimension();
+16535:   if (!computed) {
+16535:     d = Variable::max_space_dimension();
+16535:     d = std::min(d, C_Polyhedron::max_space_dimension());
+16535:     d = std::min(d, NNC_Polyhedron::max_space_dimension());
+16535:     d = std::min(d, Grid::max_space_dimension());
+16535: 
+16535:     d = std::min(d, Rational_Box::max_space_dimension());
+16535:     d = std::min(d, BD_Shape<int8_t>::max_space_dimension());
+16535:     d = std::min(d, BD_Shape<int16_t>::max_space_dimension());
+16535:     d = std::min(d, BD_Shape<int32_t>::max_space_dimension());
+16535:     d = std::min(d, BD_Shape<int64_t>::max_space_dimension());
+16535:     d = std::min(d, BD_Shape<float>::max_space_dimension());
+16535:     d = std::min(d, BD_Shape<double>::max_space_dimension());
+16535:     d = std::min(d, BD_Shape<long double>::max_space_dimension());
+16535:     d = std::min(d, BD_Shape<mpz_class>::max_space_dimension());
+16535:     d = std::min(d, BD_Shape<mpq_class>::max_space_dimension());
+16535:     d = std::min(d, Octagonal_Shape<int8_t>::max_space_dimension());
+16535:     d = std::min(d, Octagonal_Shape<int16_t>::max_space_dimension());
+16535:     d = std::min(d, Octagonal_Shape<int32_t>::max_space_dimension());
+16535:     d = std::min(d, Octagonal_Shape<int64_t>::max_space_dimension());
+16535:     d = std::min(d, Octagonal_Shape<float>::max_space_dimension());
+16535:     d = std::min(d, Octagonal_Shape<double>::max_space_dimension());
+16535:     d = std::min(d, Octagonal_Shape<long double>::max_space_dimension());
+16535:     d = std::min(d, Octagonal_Shape<mpz_class>::max_space_dimension());
+16535:     d = std::min(d, Octagonal_Shape<mpq_class>::max_space_dimension());
+16535:     computed = true;
+16535:   }
+16535:   return d;
+16535: }
+16535: 
+16535: }
+16535: # 18 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/algorithms.hh" 1
+16535: # 28 "../../src/algorithms.hh"
+16535: # 1 "../../src/Pointset_Powerset_defs.hh" 1
+16535: # 27 "../../src/Pointset_Powerset_defs.hh"
+16535: # 1 "../../src/Pointset_Powerset_types.hh" 1
+16535: # 16 "../../src/Pointset_Powerset_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename PSET>
+16535: class Pointset_Powerset;
+16535: 
+16535: }
+16535: # 28 "../../src/Pointset_Powerset_defs.hh" 2
+16535: # 38 "../../src/Pointset_Powerset_defs.hh"
+16535: # 1 "../../src/Partially_Reduced_Product_defs.hh" 1
+16535: # 50 "../../src/Partially_Reduced_Product_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: std::ostream&
+16535: operator<<(std::ostream& s, const Partially_Reduced_Product<D1, D2, R>& dp);
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: void swap(Partially_Reduced_Product<D1, D2, R>& x,
+16535:           Partially_Reduced_Product<D1, D2, R>& y);
+16535: # 79 "../../src/Partially_Reduced_Product_defs.hh"
+16535: template <typename D1, typename D2, typename R>
+16535: bool operator==(const Partially_Reduced_Product<D1, D2, R>& x,
+16535:                 const Partially_Reduced_Product<D1, D2, R>& y);
+16535: # 91 "../../src/Partially_Reduced_Product_defs.hh"
+16535: template <typename D1, typename D2, typename R>
+16535: bool operator!=(const Partially_Reduced_Product<D1, D2, R>& x,
+16535:                 const Partially_Reduced_Product<D1, D2, R>& y);
+16535: 
+16535: }
+16535: # 106 "../../src/Partially_Reduced_Product_defs.hh"
+16535: template <typename D1, typename D2>
+16535: class Parma_Polyhedra_Library::Smash_Reduction {
+16535: public:
+16535: 
+16535:   Smash_Reduction();
+16535: # 125 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void product_reduce(D1& d1, D2& d2);
+16535: 
+16535: 
+16535:   ~Smash_Reduction();
+16535: };
+16535: # 140 "../../src/Partially_Reduced_Product_defs.hh"
+16535: template <typename D1, typename D2>
+16535: class Parma_Polyhedra_Library::Constraints_Reduction {
+16535: public:
+16535: 
+16535:   Constraints_Reduction();
+16535: # 168 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void product_reduce(D1& d1, D2& d2);
+16535: 
+16535: 
+16535:   ~Constraints_Reduction();
+16535: };
+16535: # 198 "../../src/Partially_Reduced_Product_defs.hh"
+16535: template <typename D1, typename D2>
+16535: class Parma_Polyhedra_Library::Congruences_Reduction {
+16535: public:
+16535: 
+16535:   Congruences_Reduction();
+16535: # 225 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void product_reduce(D1& d1, D2& d2);
+16535: 
+16535: 
+16535:   ~Congruences_Reduction();
+16535: };
+16535: # 248 "../../src/Partially_Reduced_Product_defs.hh"
+16535: template <typename D1, typename D2>
+16535: class Parma_Polyhedra_Library::Shape_Preserving_Reduction {
+16535: public:
+16535: 
+16535:   Shape_Preserving_Reduction();
+16535: # 275 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void product_reduce(D1& d1, D2& d2);
+16535: 
+16535: 
+16535:   ~Shape_Preserving_Reduction();
+16535: };
+16535: # 288 "../../src/Partially_Reduced_Product_defs.hh"
+16535: template <typename D1, typename D2>
+16535: class Parma_Polyhedra_Library::No_Reduction {
+16535: public:
+16535: 
+16535:   No_Reduction();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void product_reduce(D1& d1, D2& d2);
+16535: 
+16535: 
+16535:   ~No_Reduction();
+16535: };
+16535: # 417 "../../src/Partially_Reduced_Product_defs.hh"
+16535: template <typename D1, typename D2, typename R>
+16535: class Parma_Polyhedra_Library::Partially_Reduced_Product {
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static dimension_type max_space_dimension();
+16535: # 438 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   explicit Partially_Reduced_Product(dimension_type num_dimensions = 0,
+16535:                                      Degenerate_Element kind = UNIVERSE);
+16535: # 452 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   explicit Partially_Reduced_Product(const Congruence_System& cgs);
+16535: # 466 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   explicit Partially_Reduced_Product(Congruence_System& cgs);
+16535: # 479 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   explicit Partially_Reduced_Product(const Constraint_System& cs);
+16535: # 492 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   explicit Partially_Reduced_Product(Constraint_System& cs);
+16535: # 512 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   explicit
+16535:   Partially_Reduced_Product(const C_Polyhedron& ph,
+16535:                             Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 534 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   explicit
+16535:   Partially_Reduced_Product(const NNC_Polyhedron& ph,
+16535:                             Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 553 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   explicit
+16535:   Partially_Reduced_Product(const Grid& gr,
+16535:                             Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 572 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   template <typename Interval>
+16535:   Partially_Reduced_Product(const Box<Interval>& box,
+16535:                             Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 591 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   template <typename U>
+16535:   Partially_Reduced_Product(const BD_Shape<U>& bd,
+16535:                             Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 610 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   template <typename U>
+16535:   Partially_Reduced_Product(const Octagonal_Shape<U>& os,
+16535:                             Complexity_Class complexity = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535:   Partially_Reduced_Product(const Partially_Reduced_Product& y,
+16535:                             Complexity_Class complexity = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename E1, typename E2, typename S>
+16535:   explicit
+16535:   Partially_Reduced_Product(const Partially_Reduced_Product<E1, E2, S>& y,
+16535:                             Complexity_Class complexity = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Partially_Reduced_Product& operator=(const Partially_Reduced_Product& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type affine_dimension() const;
+16535: 
+16535: 
+16535:   const D1& domain1() const;
+16535: 
+16535: 
+16535:   const D2& domain2() const;
+16535: 
+16535: 
+16535:   Constraint_System constraints() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Constraint_System minimized_constraints() const;
+16535: 
+16535: 
+16535:   Congruence_System congruences() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Congruence_System minimized_congruences() const;
+16535: # 691 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   Poly_Con_Relation relation_with(const Constraint& c) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Poly_Con_Relation relation_with(const Congruence& cg) const;
+16535: # 712 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   Poly_Gen_Relation relation_with(const Generator& g) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_empty() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_universe() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_topologically_closed() const;
+16535: # 739 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   bool is_disjoint_from(const Partially_Reduced_Product& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_discrete() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_bounded() const;
+16535: # 760 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   bool constrains(Variable var) const;
+16535: # 769 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   bool bounds_from_above(const Linear_Expression& expr) const;
+16535: # 778 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   bool bounds_from_below(const Linear_Expression& expr) const;
+16535: # 804 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   bool maximize(const Linear_Expression& expr,
+16535:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum) const;
+16535: # 835 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   bool maximize(const Linear_Expression& expr,
+16535:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum,
+16535:                 Generator& g) const;
+16535: # 863 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   bool minimize(const Linear_Expression& expr,
+16535:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum) const;
+16535: # 894 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   bool minimize(const Linear_Expression& expr,
+16535:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum,
+16535:                 Generator& g) const;
+16535: # 905 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   bool contains(const Partially_Reduced_Product& y) const;
+16535: # 914 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   bool strictly_contains(const Partially_Reduced_Product& y) const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: # 929 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void add_constraint(const Constraint& c);
+16535: # 940 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void refine_with_constraint(const Constraint& c);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void add_congruence(const Congruence& cg);
+16535: # 959 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void refine_with_congruence(const Congruence& cg);
+16535: # 969 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void add_congruences(const Congruence_System& cgs);
+16535: # 980 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void refine_with_congruences(const Congruence_System& cgs);
+16535: # 994 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void add_recycled_congruences(Congruence_System& cgs);
+16535: # 1004 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void add_constraints(const Constraint_System& cs);
+16535: # 1015 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void refine_with_constraints(const Constraint_System& cs);
+16535: # 1029 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void add_recycled_constraints(Constraint_System& cs);
+16535: # 1041 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void unconstrain(Variable var);
+16535: # 1055 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void unconstrain(const Variables_Set& vars);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void intersection_assign(const Partially_Reduced_Product& y);
+16535: # 1072 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void upper_bound_assign(const Partially_Reduced_Product& y);
+16535: # 1083 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   bool upper_bound_assign_if_exact(const Partially_Reduced_Product& y);
+16535: # 1092 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void difference_assign(const Partially_Reduced_Product& y);
+16535: # 1116 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void affine_image(Variable var,
+16535:                     const Linear_Expression& expr,
+16535:                     Coefficient_traits::const_reference denominator
+16535:                     = Coefficient_one());
+16535: # 1141 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void affine_preimage(Variable var,
+16535:                        const Linear_Expression& expr,
+16535:                        Coefficient_traits::const_reference denominator
+16535:                          = Coefficient_one());
+16535: # 1173 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void generalized_affine_image(Variable var,
+16535:                                 Relation_Symbol relsym,
+16535:                                 const Linear_Expression& expr,
+16535:                                 Coefficient_traits::const_reference denominator
+16535:                                 = Coefficient_one());
+16535: # 1206 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void
+16535:   generalized_affine_preimage(Variable var,
+16535:                               Relation_Symbol relsym,
+16535:                               const Linear_Expression& expr,
+16535:                               Coefficient_traits::const_reference denominator
+16535:                               = Coefficient_one());
+16535: # 1234 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void generalized_affine_image(const Linear_Expression& lhs,
+16535:                                 Relation_Symbol relsym,
+16535:                                 const Linear_Expression& rhs);
+16535: # 1259 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void generalized_affine_preimage(const Linear_Expression& lhs,
+16535:                                    Relation_Symbol relsym,
+16535:                                    const Linear_Expression& rhs);
+16535: # 1289 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void bounded_affine_image(Variable var,
+16535:                             const Linear_Expression& lb_expr,
+16535:                             const Linear_Expression& ub_expr,
+16535:                             Coefficient_traits::const_reference denominator
+16535:                             = Coefficient_one());
+16535: # 1321 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void bounded_affine_preimage(Variable var,
+16535:                                const Linear_Expression& lb_expr,
+16535:                                const Linear_Expression& ub_expr,
+16535:                                Coefficient_traits::const_reference denominator
+16535:                                = Coefficient_one());
+16535: # 1335 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void time_elapse_assign(const Partially_Reduced_Product& y);
+16535: 
+16535: 
+16535:   void topological_closure_assign();
+16535: # 1364 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void widening_assign(const Partially_Reduced_Product& y,
+16535:                        unsigned* tp = 
+16535: # 1365 "../../src/Partially_Reduced_Product_defs.hh" 3 4
+16535:                                      __null
+16535: # 1365 "../../src/Partially_Reduced_Product_defs.hh"
+16535:                                          );
+16535: # 1378 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void drop_some_non_integer_points(Complexity_Class complexity
+16535:                                     = ANY_COMPLEXITY);
+16535: # 1396 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void drop_some_non_integer_points(const Variables_Set& vars,
+16535:                                     Complexity_Class complexity
+16535:                                     = ANY_COMPLEXITY);
+16535: # 1416 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void add_space_dimensions_and_embed(dimension_type m);
+16535: # 1429 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void add_space_dimensions_and_project(dimension_type m);
+16535: # 1441 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void concatenate_assign(const Partially_Reduced_Product& y);
+16535: # 1453 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void remove_space_dimensions(const Variables_Set& vars);
+16535: # 1463 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void remove_higher_space_dimensions(dimension_type new_dimension);
+16535: # 1513 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   template <typename Partial_Function>
+16535:   void map_space_dimensions(const Partial_Function& pfunc);
+16535: # 1539 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void expand_space_dimension(Variable var, dimension_type m);
+16535: # 1565 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   void fold_space_dimensions(const Variables_Set& vars, Variable dest);
+16535: 
+16535: 
+16535: 
+16535:   friend bool operator==<>(const Partially_Reduced_Product<D1, D2, R>& x,
+16535:                            const Partially_Reduced_Product<D1, D2, R>& y);
+16535: 
+16535:   friend std::ostream&
+16535:   Parma_Polyhedra_Library::IO_Operators::
+16535:   operator<<<>(std::ostream& s, const Partially_Reduced_Product<D1, D2, R>& dp);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   ~Partially_Reduced_Product();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void m_swap(Partially_Reduced_Product& y);
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   int32_t hash_code() const;
+16535: # 1619 "../../src/Partially_Reduced_Product_defs.hh"
+16535:   bool reduce() const;
+16535: 
+16535: protected:
+16535: 
+16535:   typedef D1 Domain1;
+16535: 
+16535: 
+16535:   typedef D2 Domain2;
+16535: 
+16535: 
+16535:   D1 d1;
+16535: 
+16535: 
+16535:   D2 d2;
+16535: 
+16535: protected:
+16535: 
+16535:   void clear_reduced_flag() const;
+16535: 
+16535: 
+16535:   void set_reduced_flag() const;
+16535: 
+16535: 
+16535:   bool is_reduced() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool reduced;
+16535: 
+16535: private:
+16535:   void throw_space_dimension_overflow(const char* method,
+16535:                                       const char* reason);
+16535: };
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: # 1665 "../../src/Partially_Reduced_Product_defs.hh"
+16535: template <typename D1, typename D2>
+16535: class Domain_Product {
+16535: public:
+16535:   typedef Partially_Reduced_Product<D1, D2, No_Reduction<D1, D2> >
+16535:   Direct_Product;
+16535: 
+16535:   typedef Partially_Reduced_Product<D1, D2, Smash_Reduction<D1, D2> >
+16535:   Smash_Product;
+16535: 
+16535:   typedef Partially_Reduced_Product<D1, D2, Constraints_Reduction<D1, D2> >
+16535:   Constraints_Product;
+16535: 
+16535:   typedef Partially_Reduced_Product<D1, D2, Congruences_Reduction<D1, D2> >
+16535:   Congruences_Product;
+16535: 
+16535:   typedef Partially_Reduced_Product<D1, D2, Shape_Preserving_Reduction<D1, D2> >
+16535:   Shape_Preserving_Product;
+16535: };
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Partially_Reduced_Product_inlines.hh" 1
+16535: # 33 "../../src/Partially_Reduced_Product_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline dimension_type
+16535: Partially_Reduced_Product<D1, D2, R>::max_space_dimension() {
+16535:   return (D1::max_space_dimension() < D2::max_space_dimension())
+16535:     ? D1::max_space_dimension()
+16535:     : D2::max_space_dimension();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::Partially_Reduced_Product(dimension_type num_dimensions,
+16535:                             const Degenerate_Element kind)
+16535:   : d1(num_dimensions <= max_space_dimension()
+16535:        ? num_dimensions
+16535:        : (throw_space_dimension_overflow("Partially_Reduced_Product(n, k)",
+16535:                                          "n exceeds the maximum "
+16535:                                          "allowed space dimension"),
+16535:           num_dimensions),
+16535:        kind),
+16535:     d2(num_dimensions, kind) {
+16535:   set_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::Partially_Reduced_Product(const Congruence_System& cgs)
+16535:   : d1(cgs), d2(cgs) {
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::Partially_Reduced_Product(Congruence_System& cgs)
+16535:   : d1(const_cast<const Congruence_System&>(cgs)), d2(cgs) {
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::Partially_Reduced_Product(const Constraint_System& cs)
+16535:   : d1(cs), d2(cs) {
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::Partially_Reduced_Product(Constraint_System& cs)
+16535:   : d1(const_cast<const Constraint_System&>(cs)), d2(cs) {
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::Partially_Reduced_Product(const C_Polyhedron& ph,
+16535:                             Complexity_Class complexity)
+16535:   : d1(ph, complexity), d2(ph, complexity) {
+16535:   set_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::Partially_Reduced_Product(const NNC_Polyhedron& ph,
+16535:                             Complexity_Class complexity)
+16535:   : d1(ph, complexity), d2(ph, complexity) {
+16535:   set_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::Partially_Reduced_Product(const Grid& gr, Complexity_Class)
+16535:   : d1(gr), d2(gr) {
+16535:   set_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: template <typename Interval>
+16535: inline
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::Partially_Reduced_Product(const Box<Interval>& box, Complexity_Class)
+16535:   : d1(box), d2(box) {
+16535:   set_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: template <typename U>
+16535: inline
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::Partially_Reduced_Product(const BD_Shape<U>& bd, Complexity_Class)
+16535:   : d1(bd), d2(bd) {
+16535:   set_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: template <typename U>
+16535: inline
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::Partially_Reduced_Product(const Octagonal_Shape<U>& os, Complexity_Class)
+16535:   : d1(os), d2(os) {
+16535:   set_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::Partially_Reduced_Product(const Partially_Reduced_Product& y,
+16535:                             Complexity_Class)
+16535:   : d1(y.d1), d2(y.d2) {
+16535:   reduced = y.reduced;
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: template <typename E1, typename E2, typename S>
+16535: inline
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::Partially_Reduced_Product(const Partially_Reduced_Product<E1, E2, S>& y,
+16535:                             Complexity_Class complexity)
+16535:   : d1(y.space_dimension()), d2(y.space_dimension()), reduced(false) {
+16535:   Partially_Reduced_Product<D1, D2, R> pg1(y.domain1(), complexity);
+16535:   Partially_Reduced_Product<D1, D2, R> pg2(y.domain2(), complexity);
+16535:   pg1.intersection_assign(pg2);
+16535:   m_swap(pg1);
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline
+16535: Partially_Reduced_Product<D1, D2, R>::~Partially_Reduced_Product() {
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline memory_size_type
+16535: Partially_Reduced_Product<D1, D2, R>::external_memory_in_bytes() const {
+16535:   return d1.external_memory_in_bytes() + d2.external_memory_in_bytes();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline memory_size_type
+16535: Partially_Reduced_Product<D1, D2, R>::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline dimension_type
+16535: Partially_Reduced_Product<D1, D2, R>::space_dimension() const {
+16535:   ((void) 0);
+16535:   return d1.space_dimension();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline dimension_type
+16535: Partially_Reduced_Product<D1, D2, R>::affine_dimension() const {
+16535:   reduce();
+16535:   const dimension_type d1_dim = d1.affine_dimension();
+16535:   const dimension_type d2_dim = d2.affine_dimension();
+16535:   return std::min(d1_dim, d2_dim);
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::unconstrain(const Variable var) {
+16535:   reduce();
+16535:   d1.unconstrain(var);
+16535:   d2.unconstrain(var);
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>::unconstrain(const Variables_Set& vars) {
+16535:   reduce();
+16535:   d1.unconstrain(vars);
+16535:   d2.unconstrain(vars);
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::intersection_assign(const Partially_Reduced_Product& y) {
+16535:   d1.intersection_assign(y.d1);
+16535:   d2.intersection_assign(y.d2);
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::difference_assign(const Partially_Reduced_Product& y) {
+16535:   reduce();
+16535:   y.reduce();
+16535:   d1.difference_assign(y.d1);
+16535:   d2.difference_assign(y.d2);
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::upper_bound_assign(const Partially_Reduced_Product& y) {
+16535:   reduce();
+16535:   y.reduce();
+16535:   d1.upper_bound_assign(y.d1);
+16535:   d2.upper_bound_assign(y.d2);
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline bool
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::upper_bound_assign_if_exact(const Partially_Reduced_Product& y) {
+16535:   reduce();
+16535:   y.reduce();
+16535:   D1 d1_copy = d1;
+16535:   bool ub_exact = d1_copy.upper_bound_assign_if_exact(y.d1);
+16535:   if (!ub_exact) {
+16535:     return false;
+16535:   }
+16535:   ub_exact = d2.upper_bound_assign_if_exact(y.d2);
+16535:   if (!ub_exact) {
+16535:     return false;
+16535:   }
+16535:   using std::swap;
+16535:   swap(d1, d1_copy);
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::affine_image(Variable var,
+16535:                const Linear_Expression& expr,
+16535:                Coefficient_traits::const_reference denominator) {
+16535:   d1.affine_image(var, expr, denominator);
+16535:   d2.affine_image(var, expr, denominator);
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::affine_preimage(Variable var,
+16535:                   const Linear_Expression& expr,
+16535:                   Coefficient_traits::const_reference denominator) {
+16535:   d1.affine_preimage(var, expr, denominator);
+16535:   d2.affine_preimage(var, expr, denominator);
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::generalized_affine_image(Variable var,
+16535:                            const Relation_Symbol relsym,
+16535:                            const Linear_Expression& expr,
+16535:                            Coefficient_traits::const_reference denominator) {
+16535:   d1.generalized_affine_image(var, relsym, expr, denominator);
+16535:   d2.generalized_affine_image(var, relsym, expr, denominator);
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::generalized_affine_preimage(Variable var,
+16535:                               const Relation_Symbol relsym,
+16535:                               const Linear_Expression& expr,
+16535:                               Coefficient_traits::const_reference denominator) {
+16535:   d1.generalized_affine_preimage(var, relsym, expr, denominator);
+16535:   d2.generalized_affine_preimage(var, relsym, expr, denominator);
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::generalized_affine_image(const Linear_Expression& lhs,
+16535:                            const Relation_Symbol relsym,
+16535:                            const Linear_Expression& rhs) {
+16535:   d1.generalized_affine_image(lhs, relsym, rhs);
+16535:   d2.generalized_affine_image(lhs, relsym, rhs);
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::generalized_affine_preimage(const Linear_Expression& lhs,
+16535:                               const Relation_Symbol relsym,
+16535:                               const Linear_Expression& rhs) {
+16535:   d1.generalized_affine_preimage(lhs, relsym, rhs);
+16535:   d2.generalized_affine_preimage(lhs, relsym, rhs);
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::bounded_affine_image(Variable var,
+16535:                        const Linear_Expression& lb_expr,
+16535:                        const Linear_Expression& ub_expr,
+16535:                        Coefficient_traits::const_reference denominator) {
+16535:   d1.bounded_affine_image(var, lb_expr, ub_expr, denominator);
+16535:   d2.bounded_affine_image(var, lb_expr, ub_expr, denominator);
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::bounded_affine_preimage(Variable var,
+16535:                           const Linear_Expression& lb_expr,
+16535:                           const Linear_Expression& ub_expr,
+16535:                           Coefficient_traits::const_reference denominator) {
+16535:   d1.bounded_affine_preimage(var, lb_expr, ub_expr, denominator);
+16535:   d2.bounded_affine_preimage(var, lb_expr, ub_expr, denominator);
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::time_elapse_assign(const Partially_Reduced_Product& y) {
+16535:   reduce();
+16535:   y.reduce();
+16535:   d1.time_elapse_assign(y.d1);
+16535:   d2.time_elapse_assign(y.d2);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>::topological_closure_assign() {
+16535:   d1.topological_closure_assign();
+16535:   d2.topological_closure_assign();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>::m_swap(Partially_Reduced_Product& y) {
+16535:   using std::swap;
+16535:   swap(d1, y.d1);
+16535:   swap(d2, y.d2);
+16535:   swap(reduced, y.reduced);
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>::add_constraint(const Constraint& c) {
+16535:   d1.add_constraint(c);
+16535:   d2.add_constraint(c);
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>::refine_with_constraint(const Constraint& c) {
+16535:   d1.refine_with_constraint(c);
+16535:   d2.refine_with_constraint(c);
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>::add_congruence(const Congruence& cg) {
+16535:   d1.add_congruence(cg);
+16535:   d2.add_congruence(cg);
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>::refine_with_congruence(const Congruence& cg) {
+16535:   d1.refine_with_congruence(cg);
+16535:   d2.refine_with_congruence(cg);
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::add_constraints(const Constraint_System& cs) {
+16535:   d1.add_constraints(cs);
+16535:   d2.add_constraints(cs);
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::refine_with_constraints(const Constraint_System& cs) {
+16535:   d1.refine_with_constraints(cs);
+16535:   d2.refine_with_constraints(cs);
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::add_congruences(const Congruence_System& cgs) {
+16535:   d1.add_congruences(cgs);
+16535:   d2.add_congruences(cgs);
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::refine_with_congruences(const Congruence_System& cgs) {
+16535:   d1.refine_with_congruences(cgs);
+16535:   d2.refine_with_congruences(cgs);
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::drop_some_non_integer_points(Complexity_Class complexity) {
+16535:   reduce();
+16535:   d1.drop_some_non_integer_points(complexity);
+16535:   d2.drop_some_non_integer_points(complexity);
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::drop_some_non_integer_points(const Variables_Set& vars,
+16535:                                     Complexity_Class complexity) {
+16535:   reduce();
+16535:   d1.drop_some_non_integer_points(vars, complexity);
+16535:   d2.drop_some_non_integer_points(vars, complexity);
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline Partially_Reduced_Product<D1, D2, R>&
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::operator=(const Partially_Reduced_Product& y) {
+16535:   d1 = y.d1;
+16535:   d2 = y.d2;
+16535:   reduced = y.reduced;
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline const D1&
+16535: Partially_Reduced_Product<D1, D2, R>::domain1() const {
+16535:   reduce();
+16535:   return d1;
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline const D2&
+16535: Partially_Reduced_Product<D1, D2, R>::domain2() const {
+16535:   reduce();
+16535:   return d2;
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline bool
+16535: Partially_Reduced_Product<D1, D2, R>::is_empty() const {
+16535:   reduce();
+16535:   return d1.is_empty() || d2.is_empty();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline bool
+16535: Partially_Reduced_Product<D1, D2, R>::is_universe() const {
+16535:   return d1.is_universe() && d2.is_universe();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline bool
+16535: Partially_Reduced_Product<D1, D2, R>::is_topologically_closed() const {
+16535:   reduce();
+16535:   return d1.is_topologically_closed() && d2.is_topologically_closed();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline bool
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::is_disjoint_from(const Partially_Reduced_Product& y) const {
+16535:   reduce();
+16535:   y.reduce();
+16535:   return d1.is_disjoint_from(y.d1) || d2.is_disjoint_from(y.d2);
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline bool
+16535: Partially_Reduced_Product<D1, D2, R>::is_discrete() const {
+16535:   reduce();
+16535:   return d1.is_discrete() || d2.is_discrete();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline bool
+16535: Partially_Reduced_Product<D1, D2, R>::is_bounded() const {
+16535:   reduce();
+16535:   return d1.is_bounded() || d2.is_bounded();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline bool
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::bounds_from_above(const Linear_Expression& expr) const {
+16535:   reduce();
+16535:   return d1.bounds_from_above(expr) || d2.bounds_from_above(expr);
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline bool
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::bounds_from_below(const Linear_Expression& expr) const {
+16535:   reduce();
+16535:   return d1.bounds_from_below(expr) || d2.bounds_from_below(expr);
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline bool
+16535: Partially_Reduced_Product<D1, D2, R>::constrains(Variable var) const {
+16535:   reduce();
+16535:   return d1.constrains(var) || d2.constrains(var);
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::widening_assign(const Partially_Reduced_Product& y,
+16535:                   unsigned* tp) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   reduce();
+16535:   y.reduce();
+16535:   d1.widening_assign(y.d1, tp);
+16535:   d2.widening_assign(y.d2, tp);
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::add_space_dimensions_and_embed(dimension_type m) {
+16535:   d1.add_space_dimensions_and_embed(m);
+16535:   d2.add_space_dimensions_and_embed(m);
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::add_space_dimensions_and_project(dimension_type m) {
+16535:   d1.add_space_dimensions_and_project(m);
+16535:   d2.add_space_dimensions_and_project(m);
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::concatenate_assign(const Partially_Reduced_Product& y) {
+16535:   d1.concatenate_assign(y.d1);
+16535:   d2.concatenate_assign(y.d2);
+16535:   if (!is_reduced() || !y.is_reduced()) {
+16535:     clear_reduced_flag();
+16535:   }
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::remove_space_dimensions(const Variables_Set& vars) {
+16535:   d1.remove_space_dimensions(vars);
+16535:   d2.remove_space_dimensions(vars);
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::remove_higher_space_dimensions(dimension_type new_dimension) {
+16535:   d1.remove_higher_space_dimensions(new_dimension);
+16535:   d2.remove_higher_space_dimensions(new_dimension);
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: template <typename Partial_Function>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::map_space_dimensions(const Partial_Function& pfunc) {
+16535:   d1.map_space_dimensions(pfunc);
+16535:   d2.map_space_dimensions(pfunc);
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::expand_space_dimension(Variable var, dimension_type m) {
+16535:   d1.expand_space_dimension(var, m);
+16535:   d2.expand_space_dimension(var, m);
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::fold_space_dimensions(const Variables_Set& vars,
+16535:                         Variable dest) {
+16535:   d1.fold_space_dimensions(vars, dest);
+16535:   d2.fold_space_dimensions(vars, dest);
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline bool
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::contains(const Partially_Reduced_Product& y) const {
+16535:   reduce();
+16535:   y.reduce();
+16535:   return d1.contains(y.d1) && d2.contains(y.d2);
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline bool
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::strictly_contains(const Partially_Reduced_Product& y) const {
+16535:   reduce();
+16535:   y.reduce();
+16535:   return (d1.contains(y.d1) && d2.strictly_contains(y.d2))
+16535:     || (d2.contains(y.d2) && d1.strictly_contains(y.d1));
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline bool
+16535: Partially_Reduced_Product<D1, D2, R>::reduce() const {
+16535:   Partially_Reduced_Product& dp
+16535:     = const_cast<Partially_Reduced_Product&>(*this);
+16535:   if (dp.is_reduced()) {
+16535:     return false;
+16535:   }
+16535:   R r;
+16535:   r.product_reduce(dp.d1, dp.d2);
+16535:   set_reduced_flag();
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline bool
+16535: Partially_Reduced_Product<D1, D2, R>::is_reduced() const {
+16535:   return reduced;
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>::clear_reduced_flag() const {
+16535:   const_cast<Partially_Reduced_Product&>(*this).reduced = false;
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>::set_reduced_flag() const {
+16535:   const_cast<Partially_Reduced_Product&>(*this).reduced = true;
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R> void Partially_Reduced_Product<D1, D2, R>::ascii_dump() const { ascii_dump(std::cerr); } template <typename D1, typename D2, typename R> void Partially_Reduced_Product<D1, D2, R>::print() const { using IO_Operators::operator<<; std::cerr << *this; }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: Partially_Reduced_Product<D1, D2, R>::ascii_dump(std::ostream& s) const {
+16535:   const char yes = '+';
+16535:   const char no = '-';
+16535:   s << "Partially_Reduced_Product\n";
+16535:   s << (reduced ? yes : no) << "reduced\n";
+16535:   s << "Domain 1:\n";
+16535:   d1.ascii_dump(s);
+16535:   s << "Domain 2:\n";
+16535:   d2.ascii_dump(s);
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline int32_t
+16535: Partially_Reduced_Product<D1, D2, R>::hash_code() const {
+16535:   return hash_code_from_dimension(space_dimension());
+16535: }
+16535: 
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline bool
+16535: operator==(const Partially_Reduced_Product<D1, D2, R>& x,
+16535:            const Partially_Reduced_Product<D1, D2, R>& y) {
+16535:   x.reduce();
+16535:   y.reduce();
+16535:   return x.d1 == y.d1 && x.d2 == y.d2;
+16535: }
+16535: 
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline bool
+16535: operator!=(const Partially_Reduced_Product<D1, D2, R>& x,
+16535:            const Partially_Reduced_Product<D1, D2, R>& y) {
+16535:   return !(x == y);
+16535: }
+16535: 
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline std::ostream&
+16535: IO_Operators::operator<<(std::ostream& s,
+16535:                          const Partially_Reduced_Product<D1, D2, R>& dp) {
+16535:   return s << "Domain 1:\n"
+16535:            << dp.d1
+16535:            << "Domain 2:\n"
+16535:            << dp.d2;
+16535: }
+16535: 
+16535: }
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename D1, typename D2>
+16535: inline
+16535: No_Reduction<D1, D2>::No_Reduction() {
+16535: }
+16535: 
+16535: template <typename D1, typename D2>
+16535: void No_Reduction<D1, D2>::product_reduce(D1&, D2&) {
+16535: }
+16535: 
+16535: template <typename D1, typename D2>
+16535: inline
+16535: No_Reduction<D1, D2>::~No_Reduction() {
+16535: }
+16535: 
+16535: template <typename D1, typename D2>
+16535: inline
+16535: Smash_Reduction<D1, D2>::Smash_Reduction() {
+16535: }
+16535: 
+16535: template <typename D1, typename D2>
+16535: inline
+16535: Smash_Reduction<D1, D2>::~Smash_Reduction() {
+16535: }
+16535: 
+16535: template <typename D1, typename D2>
+16535: inline
+16535: Constraints_Reduction<D1, D2>::Constraints_Reduction() {
+16535: }
+16535: 
+16535: template <typename D1, typename D2>
+16535: inline
+16535: Constraints_Reduction<D1, D2>::~Constraints_Reduction() {
+16535: }
+16535: 
+16535: template <typename D1, typename D2>
+16535: inline
+16535: Congruences_Reduction<D1, D2>::Congruences_Reduction() {
+16535: }
+16535: 
+16535: template <typename D1, typename D2>
+16535: inline
+16535: Congruences_Reduction<D1, D2>::~Congruences_Reduction() {
+16535: }
+16535: 
+16535: template <typename D1, typename D2>
+16535: inline
+16535: Shape_Preserving_Reduction<D1, D2>::Shape_Preserving_Reduction() {
+16535: }
+16535: 
+16535: template <typename D1, typename D2>
+16535: inline
+16535: Shape_Preserving_Reduction<D1, D2>::~Shape_Preserving_Reduction() {
+16535: }
+16535: 
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline void
+16535: swap(Partially_Reduced_Product<D1, D2, R>& x,
+16535:      Partially_Reduced_Product<D1, D2, R>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 1687 "../../src/Partially_Reduced_Product_defs.hh" 2
+16535: # 1 "../../src/Partially_Reduced_Product_templates.hh" 1
+16535: # 34 "../../src/Partially_Reduced_Product_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::throw_space_dimension_overflow(const char* method,
+16535:                                  const char* reason) {
+16535:   std::ostringstream s;
+16535:   s << "PPL::Partially_Reduced_Product::" << method << ":" << std::endl
+16535:     << reason << ".";
+16535:   throw std::length_error(s.str());
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: Constraint_System
+16535: Partially_Reduced_Product<D1, D2, R>::constraints() const {
+16535:   reduce();
+16535:   Constraint_System cs = d2.constraints();
+16535:   const Constraint_System& cs1 = d1.constraints();
+16535:   for (Constraint_System::const_iterator i = cs1.begin(),
+16535:          cs_end = cs1.end(); i != cs_end; ++i) {
+16535:     cs.insert(*i);
+16535:   }
+16535:   return cs;
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: Constraint_System
+16535: Partially_Reduced_Product<D1, D2, R>::minimized_constraints() const {
+16535:   reduce();
+16535:   Constraint_System cs = d2.constraints();
+16535:   const Constraint_System& cs1 = d1.constraints();
+16535:   for (Constraint_System::const_iterator i = cs1.begin(),
+16535:          cs_end = cs1.end(); i != cs_end; ++i) {
+16535:     cs.insert(*i);
+16535:   }
+16535:   if (cs.has_strict_inequalities()) {
+16535:     NNC_Polyhedron ph(cs);
+16535:     return ph.minimized_constraints();
+16535:   }
+16535:   else {
+16535:     C_Polyhedron ph(cs);
+16535:     return ph.minimized_constraints();
+16535:   }
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: Congruence_System
+16535: Partially_Reduced_Product<D1, D2, R>::congruences() const {
+16535:   reduce();
+16535:   Congruence_System cgs = d2.congruences();
+16535:   const Congruence_System& cgs1 = d1.congruences();
+16535:   for (Congruence_System::const_iterator i = cgs1.begin(),
+16535:          cgs_end = cgs1.end(); i != cgs_end; ++i) {
+16535:     cgs.insert(*i);
+16535:   }
+16535:   return cgs;
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: Congruence_System
+16535: Partially_Reduced_Product<D1, D2, R>::minimized_congruences() const {
+16535:   reduce();
+16535:   Congruence_System cgs = d2.congruences();
+16535:   const Congruence_System& cgs1 = d1.congruences();
+16535:   for (Congruence_System::const_iterator i = cgs1.begin(),
+16535:          cgs_end = cgs1.end(); i != cgs_end; ++i) {
+16535:     cgs.insert(*i);
+16535:   }
+16535:   Grid gr(cgs);
+16535:   return gr.minimized_congruences();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::add_recycled_constraints(Constraint_System& cs) {
+16535:   if (d1.can_recycle_constraint_systems()) {
+16535:     d2.refine_with_constraints(cs);
+16535:     d1.add_recycled_constraints(cs);
+16535:   }
+16535:   else {
+16535:     if (d2.can_recycle_constraint_systems()) {
+16535:       d1.refine_with_constraints(cs);
+16535:       d2.add_recycled_constraints(cs);
+16535:     }
+16535:     else {
+16535:       d1.add_constraints(cs);
+16535:       d2.add_constraints(cs);
+16535:     }
+16535:   }
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: void
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::add_recycled_congruences(Congruence_System& cgs) {
+16535:   if (d1.can_recycle_congruence_systems()) {
+16535:     d2.refine_with_congruences(cgs);
+16535:     d1.add_recycled_congruences(cgs);
+16535:   }
+16535:   else {
+16535:     if (d2.can_recycle_congruence_systems()) {
+16535:       d1.refine_with_congruences(cgs);
+16535:       d2.add_recycled_congruences(cgs);
+16535:     }
+16535:     else {
+16535:       d1.add_congruences(cgs);
+16535:       d2.add_congruences(cgs);
+16535:     }
+16535:   }
+16535:   clear_reduced_flag();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: Poly_Gen_Relation
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::relation_with(const Generator& g) const {
+16535:   reduce();
+16535:   if (Poly_Gen_Relation::nothing() == d1.relation_with(g)
+16535:       || Poly_Gen_Relation::nothing() == d2.relation_with(g)) {
+16535:     return Poly_Gen_Relation::nothing();
+16535:   }
+16535:   else {
+16535:     return Poly_Gen_Relation::subsumes();
+16535:   }
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: Poly_Con_Relation
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::relation_with(const Constraint& c) const {
+16535:   reduce();
+16535:   Poly_Con_Relation relation1 = d1.relation_with(c);
+16535:   Poly_Con_Relation relation2 = d2.relation_with(c);
+16535: 
+16535:   Poly_Con_Relation result = Poly_Con_Relation::nothing();
+16535: 
+16535:   if (relation1.implies(Poly_Con_Relation::is_included())) {
+16535:     result = result && Poly_Con_Relation::is_included();
+16535:   }
+16535:   else if (relation2.implies(Poly_Con_Relation::is_included())) {
+16535:     result = result && Poly_Con_Relation::is_included();
+16535:   }
+16535:   if (relation1.implies(Poly_Con_Relation::saturates())) {
+16535:     result = result && Poly_Con_Relation::saturates();
+16535:   }
+16535:   else if (relation2.implies(Poly_Con_Relation::saturates())) {
+16535:     result = result && Poly_Con_Relation::saturates();
+16535:   }
+16535:   if (relation1.implies(Poly_Con_Relation::is_disjoint())) {
+16535:     result = result && Poly_Con_Relation::is_disjoint();
+16535:   }
+16535:   else if (relation2.implies(Poly_Con_Relation::is_disjoint())) {
+16535:     result = result && Poly_Con_Relation::is_disjoint();
+16535:   }
+16535: 
+16535:   return result;
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: Poly_Con_Relation
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::relation_with(const Congruence& cg) const {
+16535:   reduce();
+16535:   Poly_Con_Relation relation1 = d1.relation_with(cg);
+16535:   Poly_Con_Relation relation2 = d2.relation_with(cg);
+16535: 
+16535:   Poly_Con_Relation result = Poly_Con_Relation::nothing();
+16535: 
+16535:   if (relation1.implies(Poly_Con_Relation::is_included())) {
+16535:     result = result && Poly_Con_Relation::is_included();
+16535:   }
+16535:   else if (relation2.implies(Poly_Con_Relation::is_included())) {
+16535:     result = result && Poly_Con_Relation::is_included();
+16535:   }
+16535:   if (relation1.implies(Poly_Con_Relation::saturates())) {
+16535:     result = result && Poly_Con_Relation::saturates();
+16535:   }
+16535:   else if (relation2.implies(Poly_Con_Relation::saturates())) {
+16535:     result = result && Poly_Con_Relation::saturates();
+16535:   }
+16535:   if (relation1.implies(Poly_Con_Relation::is_disjoint())) {
+16535:     result = result && Poly_Con_Relation::is_disjoint();
+16535:   }
+16535:   else if (relation2.implies(Poly_Con_Relation::is_disjoint())) {
+16535:     result = result && Poly_Con_Relation::is_disjoint();
+16535:   }
+16535: 
+16535:   return result;
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: bool
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::maximize(const Linear_Expression& expr,
+16535:            Coefficient& sup_n,
+16535:            Coefficient& sup_d,
+16535:            bool& maximum) const {
+16535:   reduce();
+16535: 
+16535:   if (is_empty()) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_sup1_n; Parma_Polyhedra_Library::Coefficient& sup1_n = holder_sup1_n.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_sup1_d; Parma_Polyhedra_Library::Coefficient& sup1_d = holder_sup1_d.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_sup2_n; Parma_Polyhedra_Library::Coefficient& sup2_n = holder_sup2_n.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_sup2_d; Parma_Polyhedra_Library::Coefficient& sup2_d = holder_sup2_d.item();
+16535:   bool maximum1;
+16535:   bool maximum2;
+16535:   bool r1 = d1.maximize(expr, sup1_n, sup1_d, maximum1);
+16535:   bool r2 = d2.maximize(expr, sup2_n, sup2_d, maximum2);
+16535: 
+16535:   if (!r1 && !r2) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (!r1) {
+16535:     sup_n = sup2_n;
+16535:     sup_d = sup2_d;
+16535:     maximum = maximum2;
+16535:     return true;
+16535:   }
+16535: 
+16535:   if (!r2) {
+16535:     sup_n = sup1_n;
+16535:     sup_d = sup1_d;
+16535:     maximum = maximum1;
+16535:     return true;
+16535:   }
+16535: 
+16535:   if (sup2_d * sup1_n >= sup1_d * sup2_n) {
+16535:     sup_n = sup1_n;
+16535:     sup_d = sup1_d;
+16535:     maximum = maximum1;
+16535:   }
+16535:   else {
+16535:     sup_n = sup2_n;
+16535:     sup_d = sup2_d;
+16535:     maximum = maximum2;
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: bool
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::minimize(const Linear_Expression& expr,
+16535:            Coefficient& inf_n,
+16535:            Coefficient& inf_d,
+16535:            bool& minimum) const {
+16535:   reduce();
+16535: 
+16535:   if (is_empty()) {
+16535:     return false;
+16535:   }
+16535:   ((void) 0);
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inf1_n; Parma_Polyhedra_Library::Coefficient& inf1_n = holder_inf1_n.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inf1_d; Parma_Polyhedra_Library::Coefficient& inf1_d = holder_inf1_d.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inf2_n; Parma_Polyhedra_Library::Coefficient& inf2_n = holder_inf2_n.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inf2_d; Parma_Polyhedra_Library::Coefficient& inf2_d = holder_inf2_d.item();
+16535:   bool minimum1;
+16535:   bool minimum2;
+16535:   bool r1 = d1.minimize(expr, inf1_n, inf1_d, minimum1);
+16535:   bool r2 = d2.minimize(expr, inf2_n, inf2_d, minimum2);
+16535: 
+16535:   if (!r1 && !r2) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (!r1) {
+16535:     inf_n = inf2_n;
+16535:     inf_d = inf2_d;
+16535:     minimum = minimum2;
+16535:     return true;
+16535:   }
+16535: 
+16535:   if (!r2) {
+16535:     inf_n = inf1_n;
+16535:     inf_d = inf1_d;
+16535:     minimum = minimum1;
+16535:     return true;
+16535:   }
+16535: 
+16535:   if (inf2_d * inf1_n <= inf1_d * inf2_n) {
+16535:     inf_n = inf1_n;
+16535:     inf_d = inf1_d;
+16535:     minimum = minimum1;
+16535:   }
+16535:   else {
+16535:     inf_n = inf2_n;
+16535:     inf_d = inf2_d;
+16535:     minimum = minimum2;
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: bool
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::maximize(const Linear_Expression& expr,
+16535:            Coefficient& sup_n,
+16535:            Coefficient& sup_d,
+16535:            bool& maximum,
+16535:            Generator& g) const {
+16535:   reduce();
+16535: 
+16535:   if (is_empty()) {
+16535:     return false;
+16535:   }
+16535:   ((void) 0);
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_sup1_n; Parma_Polyhedra_Library::Coefficient& sup1_n = holder_sup1_n.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_sup1_d; Parma_Polyhedra_Library::Coefficient& sup1_d = holder_sup1_d.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_sup2_n; Parma_Polyhedra_Library::Coefficient& sup2_n = holder_sup2_n.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_sup2_d; Parma_Polyhedra_Library::Coefficient& sup2_d = holder_sup2_d.item();
+16535:   bool maximum1;
+16535:   bool maximum2;
+16535:   Generator g1(point());
+16535:   Generator g2(point());
+16535:   bool r1 = d1.maximize(expr, sup1_n, sup1_d, maximum1, g1);
+16535:   bool r2 = d2.maximize(expr, sup2_n, sup2_d, maximum2, g2);
+16535: 
+16535:   if (!r1 && !r2) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (!r1) {
+16535:     sup_n = sup2_n;
+16535:     sup_d = sup2_d;
+16535:     maximum = maximum2;
+16535:     g = g2;
+16535:     return true;
+16535:   }
+16535: 
+16535:   if (!r2) {
+16535:     sup_n = sup1_n;
+16535:     sup_d = sup1_d;
+16535:     maximum = maximum1;
+16535:     g = g1;
+16535:     return true;
+16535:   }
+16535: 
+16535:   if (sup2_d * sup1_n >= sup1_d * sup2_n) {
+16535:     sup_n = sup1_n;
+16535:     sup_d = sup1_d;
+16535:     maximum = maximum1;
+16535:     g = g1;
+16535:   }
+16535:   else {
+16535:     sup_n = sup2_n;
+16535:     sup_d = sup2_d;
+16535:     maximum = maximum2;
+16535:     g = g2;
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: bool
+16535: Partially_Reduced_Product<D1, D2, R>
+16535: ::minimize(const Linear_Expression& expr,
+16535:            Coefficient& inf_n,
+16535:            Coefficient& inf_d,
+16535:            bool& minimum,
+16535:            Generator& g) const {
+16535:   reduce();
+16535: 
+16535:   if (is_empty()) {
+16535:     return false;
+16535:   }
+16535:   ((void) 0);
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inf1_n; Parma_Polyhedra_Library::Coefficient& inf1_n = holder_inf1_n.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inf1_d; Parma_Polyhedra_Library::Coefficient& inf1_d = holder_inf1_d.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inf2_n; Parma_Polyhedra_Library::Coefficient& inf2_n = holder_inf2_n.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_inf2_d; Parma_Polyhedra_Library::Coefficient& inf2_d = holder_inf2_d.item();
+16535:   bool minimum1;
+16535:   bool minimum2;
+16535:   Generator g1(point());
+16535:   Generator g2(point());
+16535:   bool r1 = d1.minimize(expr, inf1_n, inf1_d, minimum1, g1);
+16535:   bool r2 = d2.minimize(expr, inf2_n, inf2_d, minimum2, g2);
+16535: 
+16535:   if (!r1 && !r2) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (!r1) {
+16535:     inf_n = inf2_n;
+16535:     inf_d = inf2_d;
+16535:     minimum = minimum2;
+16535:     g = g2;
+16535:     return true;
+16535:   }
+16535: 
+16535:   if (!r2) {
+16535:     inf_n = inf1_n;
+16535:     inf_d = inf1_d;
+16535:     minimum = minimum1;
+16535:     g = g1;
+16535:     return true;
+16535:   }
+16535: 
+16535:   if (inf2_d * inf1_n <= inf1_d * inf2_n) {
+16535:     inf_n = inf1_n;
+16535:     inf_d = inf1_d;
+16535:     minimum = minimum1;
+16535:     g = g1;
+16535:   }
+16535:   else {
+16535:     inf_n = inf2_n;
+16535:     inf_d = inf2_d;
+16535:     minimum = minimum2;
+16535:     g = g2;
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: inline bool
+16535: Partially_Reduced_Product<D1, D2, R>::OK() const {
+16535:   if (reduced) {
+16535:     Partially_Reduced_Product<D1, D2, R> dp1 = *this;
+16535:     Partially_Reduced_Product<D1, D2, R> dp2 = *this;
+16535: 
+16535:     dp1.clear_reduced_flag();
+16535:     dp1.reduce();
+16535:     if (dp1 != dp2) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return d1.OK() && d2.OK();
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: bool
+16535: Partially_Reduced_Product<D1, D2, R>::ascii_load(std::istream& s) {
+16535:   const char yes = '+';
+16535:   const char no = '-';
+16535:   std::string str;
+16535:   if (!(s >> str) || str != "Partially_Reduced_Product") {
+16535:     return false;
+16535:   }
+16535:   if (!(s >> str)
+16535:       || (str[0] != yes && str[0] != no)
+16535:       || str.substr(1) != "reduced") {
+16535:     return false;
+16535:   }
+16535:   reduced = (str[0] == yes);
+16535:   if (!(s >> str) || str != "Domain") {
+16535:     return false;
+16535:   }
+16535:   if (!(s >> str) || str != "1:") {
+16535:     return false;
+16535:   }
+16535:   if (!d1.ascii_load(s)) {
+16535:     return false;
+16535:   }
+16535:   if (!(s >> str) || str != "Domain") {
+16535:     return false;
+16535:   }
+16535:   if (!(s >> str) || str != "2:") {
+16535:     return false;
+16535:   }
+16535:   return d2.ascii_load(s);
+16535: }
+16535: 
+16535: template <typename D1, typename D2>
+16535: void Smash_Reduction<D1, D2>::product_reduce(D1& d1, D2& d2) {
+16535:   using std::swap;
+16535:   if (d2.is_empty()) {
+16535:     if (!d1.is_empty()) {
+16535:       D1 new_d1(d1.space_dimension(), EMPTY);
+16535:       swap(d1, new_d1);
+16535:     }
+16535:   }
+16535:   else if (d1.is_empty()) {
+16535:     D2 new_d2(d2.space_dimension(), EMPTY);
+16535:     swap(d2, new_d2);
+16535:   }
+16535: }
+16535: 
+16535: template <typename D1, typename D2>
+16535: void Constraints_Reduction<D1, D2>::product_reduce(D1& d1, D2& d2) {
+16535:   if (d1.is_empty() || d2.is_empty()) {
+16535: 
+16535:     Parma_Polyhedra_Library::Smash_Reduction<D1, D2> sr;
+16535:     sr.product_reduce(d1, d2);
+16535:     return;
+16535:   }
+16535:   else {
+16535:     using std::swap;
+16535:     dimension_type space_dim = d1.space_dimension();
+16535:     d1.refine_with_constraints(d2.minimized_constraints());
+16535:     if (d1.is_empty()) {
+16535:       D2 new_d2(space_dim, EMPTY);
+16535:       swap(d2, new_d2);
+16535:       return;
+16535:     }
+16535:     d2.refine_with_constraints(d1.minimized_constraints());
+16535:     if (d2.is_empty()) {
+16535:       D1 new_d1(space_dim, EMPTY);
+16535:       swap(d1, new_d1);
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename D1, typename D2>
+16535: bool shrink_to_congruence_no_check(D1& d1, D2& d2, const Congruence& cg) {
+16535: 
+16535:   ((void) 0);
+16535: 
+16535:   ((void) 0);
+16535: 
+16535:   Linear_Expression e(cg.expression());
+16535: 
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_numer; Parma_Polyhedra_Library::Coefficient& max_numer = holder_max_numer.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_denom; Parma_Polyhedra_Library::Coefficient& max_denom = holder_max_denom.item();
+16535:   bool max_included;
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_numer; Parma_Polyhedra_Library::Coefficient& min_numer = holder_min_numer.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_denom; Parma_Polyhedra_Library::Coefficient& min_denom = holder_min_denom.item();
+16535:   if (d2.maximize(e, max_numer, max_denom, max_included)) {
+16535:     bool min_included;
+16535:     if (d2.minimize(e, min_numer, min_denom, min_included)) {
+16535: 
+16535:       max_numer *= min_denom;
+16535:       min_numer *= max_denom;
+16535:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_denom; Parma_Polyhedra_Library::Coefficient& denom = holder_denom.item();
+16535:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_mod; Parma_Polyhedra_Library::Coefficient& mod = holder_mod.item();
+16535:       denom = max_denom * min_denom;
+16535:       mod = cg.modulus() * denom;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_mod2; Parma_Polyhedra_Library::Coefficient& mod2 = holder_mod2.item();
+16535:       mod2 = 2 * mod;
+16535:       if (max_numer - min_numer < mod2
+16535:           || (max_numer - min_numer == mod2 && (!max_included || !min_included)))
+16535:         {
+16535:           Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_shrink_amount; Parma_Polyhedra_Library::Coefficient& shrink_amount = holder_shrink_amount.item();
+16535:           Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_max_decreased; Parma_Polyhedra_Library::Coefficient& max_decreased = holder_max_decreased.item();
+16535:           Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_min_increased; Parma_Polyhedra_Library::Coefficient& min_increased = holder_min_increased.item();
+16535: 
+16535:           shrink_amount = max_numer % mod;
+16535:           if (!max_included && shrink_amount == 0) {
+16535:             shrink_amount = mod;
+16535:           }
+16535:           if (shrink_amount < 0) {
+16535:             shrink_amount += mod;
+16535:           }
+16535:           max_decreased = max_numer - shrink_amount;
+16535: 
+16535:           shrink_amount = min_numer % mod;
+16535:           if (!min_included && shrink_amount == 0) {
+16535:             shrink_amount = - mod;
+16535:           }
+16535:           if (shrink_amount > 0) {
+16535:             shrink_amount -= mod;
+16535:           }
+16535:           min_increased = min_numer - shrink_amount;
+16535:           if (max_decreased == min_increased) {
+16535: 
+16535: 
+16535:             Constraint new_c(denom * e == min_increased);
+16535:             d1.refine_with_constraint(new_c);
+16535:             d2.refine_with_constraint(new_c);
+16535:             return true;
+16535:           }
+16535:           else {
+16535:             if (max_decreased < min_increased) {
+16535:               using std::swap;
+16535: 
+16535: 
+16535:               D1 new_d1(d1.space_dimension(), EMPTY);
+16535:               swap(d1, new_d1);
+16535:               D2 new_d2(d2.space_dimension(), EMPTY);
+16535:               swap(d2, new_d2);
+16535:               return false;
+16535:             }
+16535:           }
+16535:         }
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename D1, typename D2>
+16535: void
+16535: Congruences_Reduction<D1, D2>::product_reduce(D1& d1, D2& d2) {
+16535:   if (d1.is_empty() || d2.is_empty()) {
+16535: 
+16535:     Parma_Polyhedra_Library::Smash_Reduction<D1, D2> sr;
+16535:     sr.product_reduce(d1, d2);
+16535:     return;
+16535:   }
+16535: 
+16535:   const Congruence_System cgs1 = d1.minimized_congruences();
+16535:   for (Congruence_System::const_iterator i = cgs1.begin(),
+16535:          cgs_end = cgs1.end(); i != cgs_end; ++i) {
+16535:     const Congruence& cg1 = *i;
+16535:     if (cg1.is_equality()) {
+16535:       d2.refine_with_congruence(cg1);
+16535:     }
+16535:     else {
+16535:       if (!Parma_Polyhedra_Library::
+16535:           shrink_to_congruence_no_check(d1, d2, cg1)) {
+16535: 
+16535:         return;
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   const Congruence_System cgs2 = d2.minimized_congruences();
+16535:   for (Congruence_System::const_iterator i = cgs2.begin(),
+16535:          cgs_end = cgs2.end(); i != cgs_end; ++i) {
+16535:     const Congruence& cg2 = *i;
+16535:     if (cg2.is_equality()) {
+16535:       d1.refine_with_congruence(cg2);
+16535:     }
+16535:     else {
+16535:       if (!Parma_Polyhedra_Library::
+16535:           shrink_to_congruence_no_check(d2, d1, cg2)) {
+16535: 
+16535:         return;
+16535:       }
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: template <typename D1, typename D2>
+16535: void
+16535: Shape_Preserving_Reduction<D1, D2>::product_reduce(D1& d1, D2& d2) {
+16535: 
+16535:   Parma_Polyhedra_Library::Congruences_Reduction<D1, D2> cgr;
+16535:   cgr.product_reduce(d1, d2);
+16535:   if (d1.is_empty()) {
+16535:     return;
+16535:   }
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_freq_n; Parma_Polyhedra_Library::Coefficient& freq_n = holder_freq_n.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_freq_d; Parma_Polyhedra_Library::Coefficient& freq_d = holder_freq_d.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_val_n; Parma_Polyhedra_Library::Coefficient& val_n = holder_val_n.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_val_d; Parma_Polyhedra_Library::Coefficient& val_d = holder_val_d.item();
+16535: 
+16535: 
+16535:   Constraint_System cs = d2.minimized_constraints();
+16535:   Constraint_System refining_cs;
+16535:   for (Constraint_System::const_iterator i = cs.begin(),
+16535:          cs_end = cs.end(); i != cs_end; ++i) {
+16535:     const Constraint& c = *i;
+16535:     if (c.is_equality()) {
+16535:       continue;
+16535:     }
+16535: 
+16535: 
+16535:     Linear_Expression le(c.expression());
+16535:     if (!d1.frequency(le, freq_n, freq_d, val_n, val_d)) {
+16535: 
+16535:       continue;
+16535:     }
+16535:     if (val_n == 0) {
+16535: 
+16535:       continue;
+16535:     }
+16535: 
+16535: 
+16535:     if (val_n < 0) {
+16535:       val_n = val_n*freq_d + val_d*freq_n;
+16535:       val_d *= freq_d;
+16535:     }
+16535:     le *= val_d;
+16535:     le -= val_n;
+16535:     refining_cs.insert(le >= 0);
+16535:   }
+16535:   d2.refine_with_constraints(refining_cs);
+16535: 
+16535: 
+16535:   cs = d1.minimized_constraints();
+16535:   refining_cs.clear();
+16535:   for (Constraint_System::const_iterator i = cs.begin(),
+16535:          cs_end = cs.end(); i != cs_end; ++i) {
+16535:     const Constraint& c = *i;
+16535:     if (c.is_equality()) {
+16535: 
+16535:       continue;
+16535:     }
+16535: 
+16535: 
+16535:     Linear_Expression le(c.expression());
+16535:     if (!d2.frequency(le, freq_n, freq_d, val_n, val_d)) {
+16535: 
+16535:       continue;
+16535:     }
+16535:     if (val_n == 0) {
+16535: 
+16535:       continue;
+16535:     }
+16535: 
+16535: 
+16535:     if (val_n < 0) {
+16535:       val_n = val_n*freq_d + val_d*freq_n;
+16535:       val_d *= freq_d;
+16535:     }
+16535:     le *= val_d;
+16535:     le -= val_n;
+16535:     refining_cs.insert(le >= 0);
+16535:   }
+16535:   d1.refine_with_constraints(refining_cs);
+16535: 
+16535: 
+16535: 
+16535:   Parma_Polyhedra_Library::Constraints_Reduction<D1, D2> cr;
+16535:   cr.product_reduce(d1, d2);
+16535: }
+16535: 
+16535: }
+16535: # 1688 "../../src/Partially_Reduced_Product_defs.hh" 2
+16535: # 39 "../../src/Pointset_Powerset_defs.hh" 2
+16535: 
+16535: # 1 "../../src/Determinate_defs.hh" 1
+16535: # 27 "../../src/Determinate_defs.hh"
+16535: # 1 "../../src/Determinate_types.hh" 1
+16535: # 16 "../../src/Determinate_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename PSET>
+16535: class Determinate;
+16535: 
+16535: }
+16535: # 28 "../../src/Determinate_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: template <typename PSET>
+16535: void swap(Determinate<PSET>& x, Determinate<PSET>& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename PSET>
+16535: bool operator==(const Determinate<PSET>& x, const Determinate<PSET>& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename PSET>
+16535: bool operator!=(const Determinate<PSET>& x, const Determinate<PSET>& y);
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: template <typename PSET>
+16535: std::ostream&
+16535: operator<<(std::ostream&, const Determinate<PSET>&);
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 83 "../../src/Determinate_defs.hh"
+16535: template <typename PSET>
+16535: class Parma_Polyhedra_Library::Determinate {
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Determinate(const PSET& pset);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Determinate(const Constraint_System& cs);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Determinate(const Congruence_System& cgs);
+16535: 
+16535: 
+16535:   Determinate(const Determinate& y);
+16535: 
+16535: 
+16535:   ~Determinate();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const PSET& pointset() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_top() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_bottom() const;
+16535: 
+16535: 
+16535:   bool definitely_entails(const Determinate& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_definitely_equivalent_to(const Determinate& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static bool has_nontrivial_weakening();
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: # 169 "../../src/Determinate_defs.hh"
+16535:   void upper_bound_assign(const Determinate& y);
+16535: 
+16535: 
+16535:   void meet_assign(const Determinate& y);
+16535: 
+16535: 
+16535:   void weakening_assign(const Determinate& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void concatenate_assign(const Determinate& y);
+16535: 
+16535: 
+16535:   PSET& pointset();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void mutate();
+16535: 
+16535: 
+16535:   Determinate& operator=(const Determinate& y);
+16535: 
+16535: 
+16535:   void m_swap(Determinate& y);
+16535: # 217 "../../src/Determinate_defs.hh"
+16535:   template <typename Binary_Operator_Assign>
+16535:   class Binary_Operator_Assign_Lifter {
+16535:   public:
+16535: 
+16535:     explicit
+16535:     Binary_Operator_Assign_Lifter(Binary_Operator_Assign op_assign);
+16535: 
+16535: 
+16535:     void operator()(Determinate& x, const Determinate& y) const;
+16535: 
+16535:   private:
+16535: 
+16535:     Binary_Operator_Assign op_assign_;
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename Binary_Operator_Assign>
+16535:   static Binary_Operator_Assign_Lifter<Binary_Operator_Assign>
+16535:   lift_op_assign(Binary_Operator_Assign op_assign);
+16535: 
+16535: private:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   class Rep {
+16535:   private:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     mutable unsigned long references;
+16535: 
+16535: 
+16535:     Rep& operator=(const Rep& y);
+16535: 
+16535: 
+16535:     Rep(const Rep& y);
+16535: 
+16535: 
+16535:     Rep();
+16535: 
+16535:   public:
+16535: 
+16535:     PSET pset;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     Rep(dimension_type num_dimensions, Degenerate_Element kind);
+16535: 
+16535: 
+16535:     Rep(const PSET& p);
+16535: 
+16535: 
+16535:     Rep(const Constraint_System& cs);
+16535: 
+16535: 
+16535:     Rep(const Congruence_System& cgs);
+16535: 
+16535: 
+16535:     ~Rep();
+16535: 
+16535: 
+16535:     void new_reference() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     bool del_reference() const;
+16535: 
+16535: 
+16535:     bool is_shared() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     memory_size_type external_memory_in_bytes() const;
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Rep* prep;
+16535: 
+16535:   friend bool
+16535:   operator==<PSET>(const Determinate<PSET>& x, const Determinate<PSET>& y);
+16535: 
+16535:   friend bool
+16535:   operator!=<PSET>(const Determinate<PSET>& x, const Determinate<PSET>& y);
+16535: };
+16535: 
+16535: # 1 "../../src/Determinate_inlines.hh" 1
+16535: # 29 "../../src/Determinate_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename PSET>
+16535: inline
+16535: Determinate<PSET>::Rep::Rep(dimension_type num_dimensions,
+16535:                           Degenerate_Element kind)
+16535:   : references(0), pset(num_dimensions, kind) {
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline
+16535: Determinate<PSET>::Rep::Rep(const PSET& p)
+16535:   : references(0), pset(p) {
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline
+16535: Determinate<PSET>::Rep::Rep(const Constraint_System& cs)
+16535:   : references(0), pset(cs) {
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline
+16535: Determinate<PSET>::Rep::Rep(const Congruence_System& cgs)
+16535:   : references(0), pset(cgs) {
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline
+16535: Determinate<PSET>::Rep::~Rep() {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline void
+16535: Determinate<PSET>::Rep::new_reference() const {
+16535:   ++references;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline bool
+16535: Determinate<PSET>::Rep::del_reference() const {
+16535:   return --references == 0;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline bool
+16535: Determinate<PSET>::Rep::is_shared() const {
+16535:   return references > 1;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline memory_size_type
+16535: Determinate<PSET>::Rep::external_memory_in_bytes() const {
+16535:   return pset.external_memory_in_bytes();
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline memory_size_type
+16535: Determinate<PSET>::Rep::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline
+16535: Determinate<PSET>::Determinate(const PSET& pset)
+16535:   : prep(new Rep(pset)) {
+16535:   prep->new_reference();
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline
+16535: Determinate<PSET>::Determinate(const Constraint_System& cs)
+16535:   : prep(new Rep(cs)) {
+16535:   prep->new_reference();
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline
+16535: Determinate<PSET>::Determinate(const Congruence_System& cgs)
+16535:   : prep(new Rep(cgs)) {
+16535:   prep->new_reference();
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline
+16535: Determinate<PSET>::Determinate(const Determinate& y)
+16535:   : prep(y.prep) {
+16535:   prep->new_reference();
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline
+16535: Determinate<PSET>::~Determinate() {
+16535:   if (prep->del_reference()) {
+16535:     delete prep;
+16535:   }
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline Determinate<PSET>&
+16535: Determinate<PSET>::operator=(const Determinate& y) {
+16535:   y.prep->new_reference();
+16535:   if (prep->del_reference()) {
+16535:     delete prep;
+16535:   }
+16535:   prep = y.prep;
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline void
+16535: Determinate<PSET>::m_swap(Determinate& y) {
+16535:   using std::swap;
+16535:   swap(prep, y.prep);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline void
+16535: Determinate<PSET>::mutate() {
+16535:   if (prep->is_shared()) {
+16535:     Rep* const new_prep = new Rep(prep->pset);
+16535:     (void) prep->del_reference();
+16535:     new_prep->new_reference();
+16535:     prep = new_prep;
+16535:   }
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline const PSET&
+16535: Determinate<PSET>::pointset() const {
+16535:   return prep->pset;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline PSET&
+16535: Determinate<PSET>::pointset() {
+16535:   mutate();
+16535:   return prep->pset;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline void
+16535: Determinate<PSET>::upper_bound_assign(const Determinate& y) {
+16535:   pointset().upper_bound_assign(y.pointset());
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline void
+16535: Determinate<PSET>::meet_assign(const Determinate& y) {
+16535:   pointset().intersection_assign(y.pointset());
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline bool
+16535: Determinate<PSET>::has_nontrivial_weakening() {
+16535: 
+16535: 
+16535: 
+16535:   return false;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline void
+16535: Determinate<PSET>::weakening_assign(const Determinate& y) {
+16535: 
+16535: 
+16535: 
+16535:   pointset().difference_assign(y.pointset());
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline void
+16535: Determinate<PSET>::concatenate_assign(const Determinate& y) {
+16535:   pointset().concatenate_assign(y.pointset());
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline bool
+16535: Determinate<PSET>::definitely_entails(const Determinate& y) const {
+16535:   return prep == y.prep || y.prep->pset.contains(prep->pset);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline bool
+16535: Determinate<PSET>::is_definitely_equivalent_to(const Determinate& y) const {
+16535:   return prep == y.prep || prep->pset == y.prep->pset;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline bool
+16535: Determinate<PSET>::is_top() const {
+16535:   return prep->pset.is_universe();
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline bool
+16535: Determinate<PSET>::is_bottom() const {
+16535:   return prep->pset.is_empty();
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline memory_size_type
+16535: Determinate<PSET>::external_memory_in_bytes() const {
+16535:   return prep->total_memory_in_bytes();
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline memory_size_type
+16535: Determinate<PSET>::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline bool
+16535: Determinate<PSET>::OK() const {
+16535:   return prep->pset.OK();
+16535: }
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: template <typename PSET>
+16535: inline std::ostream&
+16535: operator<<(std::ostream& s, const Determinate<PSET>& x) {
+16535:   s << x.pointset();
+16535:   return s;
+16535: }
+16535: 
+16535: }
+16535: 
+16535: 
+16535: template <typename PSET>
+16535: inline bool
+16535: operator==(const Determinate<PSET>& x, const Determinate<PSET>& y) {
+16535:   return x.prep == y.prep || x.prep->pset == y.prep->pset;
+16535: }
+16535: 
+16535: 
+16535: template <typename PSET>
+16535: inline bool
+16535: operator!=(const Determinate<PSET>& x, const Determinate<PSET>& y) {
+16535:   return x.prep != y.prep && x.prep->pset != y.prep->pset;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: template <typename Binary_Operator_Assign>
+16535: inline
+16535: Determinate<PSET>::Binary_Operator_Assign_Lifter<Binary_Operator_Assign>::
+16535: Binary_Operator_Assign_Lifter(Binary_Operator_Assign op_assign)
+16535:   : op_assign_(op_assign) {
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: template <typename Binary_Operator_Assign>
+16535: inline void
+16535: Determinate<PSET>::Binary_Operator_Assign_Lifter<Binary_Operator_Assign>::
+16535: operator()(Determinate& x, const Determinate& y) const {
+16535:   op_assign_(x.pointset(), y.pointset());
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: template <typename Binary_Operator_Assign>
+16535: inline
+16535: Determinate<PSET>::Binary_Operator_Assign_Lifter<Binary_Operator_Assign>
+16535: Determinate<PSET>::lift_op_assign(Binary_Operator_Assign op_assign) {
+16535:   return Binary_Operator_Assign_Lifter<Binary_Operator_Assign>(op_assign);
+16535: }
+16535: 
+16535: 
+16535: template <typename PSET>
+16535: inline void
+16535: swap(Determinate<PSET>& x, Determinate<PSET>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 329 "../../src/Determinate_defs.hh" 2
+16535: # 41 "../../src/Pointset_Powerset_defs.hh" 2
+16535: # 1 "../../src/Powerset_defs.hh" 1
+16535: # 27 "../../src/Powerset_defs.hh"
+16535: # 1 "../../src/Powerset_types.hh" 1
+16535: # 16 "../../src/Powerset_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename D>
+16535: class Powerset;
+16535: 
+16535: }
+16535: # 28 "../../src/Powerset_defs.hh" 2
+16535: 
+16535: # 1 "../../src/iterator_to_const_defs.hh" 1
+16535: # 27 "../../src/iterator_to_const_defs.hh"
+16535: # 1 "../../src/iterator_to_const_types.hh" 1
+16535: # 16 "../../src/iterator_to_const_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Container>
+16535: class iterator_to_const;
+16535: 
+16535: template <typename Container>
+16535: class const_iterator_to_const;
+16535: 
+16535: }
+16535: # 28 "../../src/iterator_to_const_defs.hh" 2
+16535: # 49 "../../src/iterator_to_const_defs.hh"
+16535: template <typename Container>
+16535: class Parma_Polyhedra_Library::iterator_to_const {
+16535: private:
+16535: 
+16535:   typedef typename Container::iterator Base;
+16535: 
+16535: 
+16535:   typedef typename
+16535:   std::iterator_traits<typename Container::const_iterator> Traits;
+16535: 
+16535: 
+16535:   Base base;
+16535: 
+16535: 
+16535:   iterator_to_const(const Base& b);
+16535: 
+16535:   friend class const_iterator_to_const<Container>;
+16535:   template <typename T> friend class Powerset;
+16535: 
+16535: public:
+16535: 
+16535: 
+16535:   typedef typename Traits::iterator_category iterator_category;
+16535:   typedef typename Traits::value_type value_type;
+16535:   typedef typename Traits::difference_type difference_type;
+16535:   typedef typename Traits::pointer pointer;
+16535:   typedef typename Traits::reference reference;
+16535: 
+16535: 
+16535:   iterator_to_const();
+16535: 
+16535: 
+16535:   iterator_to_const(const iterator_to_const& y);
+16535: 
+16535: 
+16535:   reference operator*() const;
+16535: 
+16535: 
+16535:   pointer operator->() const;
+16535: 
+16535: 
+16535:   iterator_to_const& operator++();
+16535: 
+16535: 
+16535:   iterator_to_const operator++(int);
+16535: 
+16535: 
+16535:   iterator_to_const& operator--();
+16535: 
+16535: 
+16535:   iterator_to_const operator--(int);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool operator==(const iterator_to_const& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool operator!=(const iterator_to_const& y) const;
+16535: };
+16535: # 122 "../../src/iterator_to_const_defs.hh"
+16535: template <typename Container>
+16535: class Parma_Polyhedra_Library::const_iterator_to_const {
+16535: private:
+16535: 
+16535:   typedef typename Container::const_iterator Base;
+16535: 
+16535: 
+16535:   typedef typename std::iterator_traits<Base> Traits;
+16535: 
+16535: 
+16535:   Base base;
+16535: 
+16535: 
+16535:   const_iterator_to_const(const Base& b);
+16535: 
+16535:   friend class iterator_to_const<Container>;
+16535:   template <typename T> friend class Powerset;
+16535: 
+16535: public:
+16535: 
+16535:   typedef typename Traits::iterator_category iterator_category;
+16535:   typedef typename Traits::value_type value_type;
+16535:   typedef typename Traits::difference_type difference_type;
+16535:   typedef typename Traits::pointer pointer;
+16535:   typedef typename Traits::reference reference;
+16535: 
+16535: 
+16535:   const_iterator_to_const();
+16535: 
+16535: 
+16535:   const_iterator_to_const(const const_iterator_to_const& y);
+16535: 
+16535: 
+16535:   const_iterator_to_const(const iterator_to_const<Container>& y);
+16535: 
+16535: 
+16535:   reference operator*() const;
+16535: 
+16535: 
+16535:   pointer operator->() const;
+16535: 
+16535: 
+16535:   const_iterator_to_const& operator++();
+16535: 
+16535: 
+16535:   const_iterator_to_const operator++(int);
+16535: 
+16535: 
+16535:   const_iterator_to_const& operator--();
+16535: 
+16535: 
+16535:   const_iterator_to_const operator--(int);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool operator==(const const_iterator_to_const& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool operator!=(const const_iterator_to_const& y) const;
+16535: };
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: # 198 "../../src/iterator_to_const_defs.hh"
+16535: template <typename Container>
+16535: bool
+16535: operator==(const iterator_to_const<Container>& x,
+16535:            const const_iterator_to_const<Container>& y);
+16535: # 211 "../../src/iterator_to_const_defs.hh"
+16535: template <typename Container>
+16535: bool
+16535: operator!=(const iterator_to_const<Container>& x,
+16535:            const const_iterator_to_const<Container>& y);
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/iterator_to_const_inlines.hh" 1
+16535: # 28 "../../src/iterator_to_const_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Container>
+16535: inline
+16535: iterator_to_const<Container>::iterator_to_const()
+16535:   : base() {
+16535: }
+16535: 
+16535: template <typename Container>
+16535: inline
+16535: iterator_to_const<Container>::iterator_to_const(const iterator_to_const& y)
+16535:   : base(y.base) {
+16535: }
+16535: 
+16535: template <typename Container>
+16535: inline
+16535: iterator_to_const<Container>::iterator_to_const(const Base& b)
+16535:   : base(b) {
+16535: }
+16535: 
+16535: template <typename Container>
+16535: inline typename iterator_to_const<Container>::reference
+16535: iterator_to_const<Container>::operator*() const {
+16535:   return *base;
+16535: }
+16535: 
+16535: template <typename Container>
+16535: inline typename iterator_to_const<Container>::pointer
+16535: iterator_to_const<Container>::operator->() const {
+16535:   return &*base;
+16535: }
+16535: 
+16535: template <typename Container>
+16535: inline iterator_to_const<Container>&
+16535: iterator_to_const<Container>::operator++() {
+16535:   ++base;
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename Container>
+16535: inline iterator_to_const<Container>
+16535: iterator_to_const<Container>::operator++(int) {
+16535:   iterator_to_const tmp = *this;
+16535:   operator++();
+16535:   return tmp;
+16535: }
+16535: 
+16535: template <typename Container>
+16535: inline iterator_to_const<Container>&
+16535: iterator_to_const<Container>::operator--() {
+16535:   --base;
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename Container>
+16535: inline iterator_to_const<Container>
+16535: iterator_to_const<Container>::operator--(int) {
+16535:   iterator_to_const tmp = *this;
+16535:   operator--();
+16535:   return tmp;
+16535: }
+16535: 
+16535: template <typename Container>
+16535: inline bool
+16535: iterator_to_const<Container>::operator==(const iterator_to_const& y) const {
+16535:   return base == y.base;
+16535: }
+16535: 
+16535: template <typename Container>
+16535: inline bool
+16535: iterator_to_const<Container>::operator!=(const iterator_to_const& y) const {
+16535:   return !operator==(y);
+16535: }
+16535: 
+16535: template <typename Container>
+16535: inline
+16535: const_iterator_to_const<Container>::const_iterator_to_const()
+16535:   : base() {
+16535: }
+16535: 
+16535: template <typename Container>
+16535: inline
+16535: const_iterator_to_const<Container>
+16535: ::const_iterator_to_const(const const_iterator_to_const& y)
+16535:   : base(y.base) {
+16535: }
+16535: 
+16535: template <typename Container>
+16535: inline
+16535: const_iterator_to_const<Container>::const_iterator_to_const(const Base& b)
+16535:   : base(b) {
+16535: }
+16535: 
+16535: template <typename Container>
+16535: inline typename const_iterator_to_const<Container>::reference
+16535: const_iterator_to_const<Container>::operator*() const {
+16535:   return *base;
+16535: }
+16535: 
+16535: template <typename Container>
+16535: inline typename const_iterator_to_const<Container>::pointer
+16535: const_iterator_to_const<Container>::operator->() const {
+16535:   return &*base;
+16535: }
+16535: 
+16535: template <typename Container>
+16535: inline const_iterator_to_const<Container>&
+16535: const_iterator_to_const<Container>::operator++() {
+16535:   ++base;
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename Container>
+16535: inline const_iterator_to_const<Container>
+16535: const_iterator_to_const<Container>::operator++(int) {
+16535:   const_iterator_to_const tmp = *this;
+16535:   operator++();
+16535:   return tmp;
+16535: }
+16535: 
+16535: template <typename Container>
+16535: inline const_iterator_to_const<Container>&
+16535: const_iterator_to_const<Container>::operator--() {
+16535:   --base;
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename Container>
+16535: inline const_iterator_to_const<Container>
+16535: const_iterator_to_const<Container>::operator--(int) {
+16535:   const_iterator_to_const tmp = *this;
+16535:   operator--();
+16535:   return tmp;
+16535: }
+16535: 
+16535: template <typename Container>
+16535: inline bool
+16535: const_iterator_to_const<Container>
+16535: ::operator==(const const_iterator_to_const& y) const {
+16535:   return base == y.base;
+16535: }
+16535: 
+16535: template <typename Container>
+16535: inline bool
+16535: const_iterator_to_const<Container>
+16535: ::operator!=(const const_iterator_to_const& y) const {
+16535:   return !operator==(y);
+16535: }
+16535: 
+16535: template <typename Container>
+16535: inline
+16535: const_iterator_to_const<Container>
+16535: ::const_iterator_to_const(const iterator_to_const<Container>& y)
+16535:   : base(y.base) {
+16535: }
+16535: 
+16535: 
+16535: template <typename Container>
+16535: inline bool
+16535: operator==(const iterator_to_const<Container>& x,
+16535:            const const_iterator_to_const<Container>& y) {
+16535:   return const_iterator_to_const<Container>(x).operator==(y);
+16535: }
+16535: 
+16535: 
+16535: template <typename Container>
+16535: inline bool
+16535: operator!=(const iterator_to_const<Container>& x,
+16535:            const const_iterator_to_const<Container>& y) {
+16535:   return !(x == y);
+16535: }
+16535: 
+16535: }
+16535: # 219 "../../src/iterator_to_const_defs.hh" 2
+16535: # 30 "../../src/Powerset_defs.hh" 2
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/list" 1 3
+16535: # 58 "/usr/include/c++/8/list" 3
+16535:        
+16535: # 59 "/usr/include/c++/8/list" 3
+16535: 
+16535: 
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/bits/stl_list.h" 1 3
+16535: # 67 "/usr/include/c++/8/bits/stl_list.h" 3
+16535: 
+16535: # 67 "/usr/include/c++/8/bits/stl_list.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535:   namespace __detail
+16535:   {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     struct _List_node_base
+16535:     {
+16535:       _List_node_base* _M_next;
+16535:       _List_node_base* _M_prev;
+16535: 
+16535:       static void
+16535:       swap(_List_node_base& __x, _List_node_base& __y) noexcept;
+16535: 
+16535:       void
+16535:       _M_transfer(_List_node_base* const __first,
+16535:     _List_node_base* const __last) noexcept;
+16535: 
+16535:       void
+16535:       _M_reverse() noexcept;
+16535: 
+16535:       void
+16535:       _M_hook(_List_node_base* const __position) noexcept;
+16535: 
+16535:       void
+16535:       _M_unhook() noexcept;
+16535:     };
+16535: 
+16535: 
+16535:     struct _List_node_header : public _List_node_base
+16535:     {
+16535: 
+16535:       std::size_t _M_size;
+16535: 
+16535: 
+16535:       _List_node_header() noexcept
+16535:       { _M_init(); }
+16535: 
+16535: 
+16535:       _List_node_header(_List_node_header&& __x) noexcept
+16535:       : _List_node_base{ __x._M_next, __x._M_prev }
+16535: 
+16535:       , _M_size(__x._M_size)
+16535: 
+16535:       {
+16535:  if (__x._M_base()->_M_next == __x._M_base())
+16535:    this->_M_next = this->_M_prev = this;
+16535:  else
+16535:    {
+16535:      this->_M_next->_M_prev = this->_M_prev->_M_next = this->_M_base();
+16535:      __x._M_init();
+16535:    }
+16535:       }
+16535: 
+16535:       void
+16535:       _M_move_nodes(_List_node_header&& __x)
+16535:       {
+16535:  _List_node_base* const __xnode = __x._M_base();
+16535:  if (__xnode->_M_next == __xnode)
+16535:    _M_init();
+16535:  else
+16535:    {
+16535:      _List_node_base* const __node = this->_M_base();
+16535:      __node->_M_next = __xnode->_M_next;
+16535:      __node->_M_prev = __xnode->_M_prev;
+16535:      __node->_M_next->_M_prev = __node->_M_prev->_M_next = __node;
+16535: 
+16535:      _M_size = __x._M_size;
+16535: 
+16535:      __x._M_init();
+16535:    }
+16535:       }
+16535: 
+16535: 
+16535:       void
+16535:       _M_init() noexcept
+16535:       {
+16535:  this->_M_next = this->_M_prev = this;
+16535: 
+16535:  this->_M_size = 0;
+16535: 
+16535:       }
+16535: 
+16535:     private:
+16535:       _List_node_base* _M_base() { return this; }
+16535:     };
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct _List_node : public __detail::_List_node_base
+16535:     {
+16535: 
+16535:       __gnu_cxx::__aligned_membuf<_Tp> _M_storage;
+16535:       _Tp* _M_valptr() { return _M_storage._M_ptr(); }
+16535:       _Tp const* _M_valptr() const { return _M_storage._M_ptr(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct _List_iterator
+16535:     {
+16535:       typedef _List_iterator<_Tp> _Self;
+16535:       typedef _List_node<_Tp> _Node;
+16535: 
+16535:       typedef ptrdiff_t difference_type;
+16535:       typedef std::bidirectional_iterator_tag iterator_category;
+16535:       typedef _Tp value_type;
+16535:       typedef _Tp* pointer;
+16535:       typedef _Tp& reference;
+16535: 
+16535:       _List_iterator() noexcept
+16535:       : _M_node() { }
+16535: 
+16535:       explicit
+16535:       _List_iterator(__detail::_List_node_base* __x) noexcept
+16535:       : _M_node(__x) { }
+16535: 
+16535:       _Self
+16535:       _M_const_cast() const noexcept
+16535:       { return *this; }
+16535: 
+16535: 
+16535:       reference
+16535:       operator*() const noexcept
+16535:       { return *static_cast<_Node*>(_M_node)->_M_valptr(); }
+16535: 
+16535:       pointer
+16535:       operator->() const noexcept
+16535:       { return static_cast<_Node*>(_M_node)->_M_valptr(); }
+16535: 
+16535:       _Self&
+16535:       operator++() noexcept
+16535:       {
+16535:  _M_node = _M_node->_M_next;
+16535:  return *this;
+16535:       }
+16535: 
+16535:       _Self
+16535:       operator++(int) noexcept
+16535:       {
+16535:  _Self __tmp = *this;
+16535:  _M_node = _M_node->_M_next;
+16535:  return __tmp;
+16535:       }
+16535: 
+16535:       _Self&
+16535:       operator--() noexcept
+16535:       {
+16535:  _M_node = _M_node->_M_prev;
+16535:  return *this;
+16535:       }
+16535: 
+16535:       _Self
+16535:       operator--(int) noexcept
+16535:       {
+16535:  _Self __tmp = *this;
+16535:  _M_node = _M_node->_M_prev;
+16535:  return __tmp;
+16535:       }
+16535: 
+16535:       bool
+16535:       operator==(const _Self& __x) const noexcept
+16535:       { return _M_node == __x._M_node; }
+16535: 
+16535:       bool
+16535:       operator!=(const _Self& __x) const noexcept
+16535:       { return _M_node != __x._M_node; }
+16535: 
+16535: 
+16535:       __detail::_List_node_base* _M_node;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct _List_const_iterator
+16535:     {
+16535:       typedef _List_const_iterator<_Tp> _Self;
+16535:       typedef const _List_node<_Tp> _Node;
+16535:       typedef _List_iterator<_Tp> iterator;
+16535: 
+16535:       typedef ptrdiff_t difference_type;
+16535:       typedef std::bidirectional_iterator_tag iterator_category;
+16535:       typedef _Tp value_type;
+16535:       typedef const _Tp* pointer;
+16535:       typedef const _Tp& reference;
+16535: 
+16535:       _List_const_iterator() noexcept
+16535:       : _M_node() { }
+16535: 
+16535:       explicit
+16535:       _List_const_iterator(const __detail::_List_node_base* __x)
+16535:       noexcept
+16535:       : _M_node(__x) { }
+16535: 
+16535:       _List_const_iterator(const iterator& __x) noexcept
+16535:       : _M_node(__x._M_node) { }
+16535: 
+16535:       iterator
+16535:       _M_const_cast() const noexcept
+16535:       { return iterator(const_cast<__detail::_List_node_base*>(_M_node)); }
+16535: 
+16535: 
+16535:       reference
+16535:       operator*() const noexcept
+16535:       { return *static_cast<_Node*>(_M_node)->_M_valptr(); }
+16535: 
+16535:       pointer
+16535:       operator->() const noexcept
+16535:       { return static_cast<_Node*>(_M_node)->_M_valptr(); }
+16535: 
+16535:       _Self&
+16535:       operator++() noexcept
+16535:       {
+16535:  _M_node = _M_node->_M_next;
+16535:  return *this;
+16535:       }
+16535: 
+16535:       _Self
+16535:       operator++(int) noexcept
+16535:       {
+16535:  _Self __tmp = *this;
+16535:  _M_node = _M_node->_M_next;
+16535:  return __tmp;
+16535:       }
+16535: 
+16535:       _Self&
+16535:       operator--() noexcept
+16535:       {
+16535:  _M_node = _M_node->_M_prev;
+16535:  return *this;
+16535:       }
+16535: 
+16535:       _Self
+16535:       operator--(int) noexcept
+16535:       {
+16535:  _Self __tmp = *this;
+16535:  _M_node = _M_node->_M_prev;
+16535:  return __tmp;
+16535:       }
+16535: 
+16535:       bool
+16535:       operator==(const _Self& __x) const noexcept
+16535:       { return _M_node == __x._M_node; }
+16535: 
+16535:       bool
+16535:       operator!=(const _Self& __x) const noexcept
+16535:       { return _M_node != __x._M_node; }
+16535: 
+16535: 
+16535:       const __detail::_List_node_base* _M_node;
+16535:     };
+16535: 
+16535:   template<typename _Val>
+16535:     inline bool
+16535:     operator==(const _List_iterator<_Val>& __x,
+16535:         const _List_const_iterator<_Val>& __y) noexcept
+16535:     { return __x._M_node == __y._M_node; }
+16535: 
+16535:   template<typename _Val>
+16535:     inline bool
+16535:     operator!=(const _List_iterator<_Val>& __x,
+16535:         const _List_const_iterator<_Val>& __y) noexcept
+16535:     { return __x._M_node != __y._M_node; }
+16535: 
+16535: namespace __cxx11 {
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     class _List_base
+16535:     {
+16535:     protected:
+16535:       typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template
+16535:  rebind<_Tp>::other _Tp_alloc_type;
+16535:       typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tp_alloc_traits;
+16535:       typedef typename _Tp_alloc_traits::template
+16535:  rebind<_List_node<_Tp> >::other _Node_alloc_type;
+16535:       typedef __gnu_cxx::__alloc_traits<_Node_alloc_type> _Node_alloc_traits;
+16535: 
+16535: 
+16535:       static size_t
+16535:       _S_distance(const __detail::_List_node_base* __first,
+16535:     const __detail::_List_node_base* __last)
+16535:       {
+16535:  size_t __n = 0;
+16535:  while (__first != __last)
+16535:    {
+16535:      __first = __first->_M_next;
+16535:      ++__n;
+16535:    }
+16535:  return __n;
+16535:       }
+16535: 
+16535: 
+16535:       struct _List_impl
+16535:       : public _Node_alloc_type
+16535:       {
+16535:  __detail::_List_node_header _M_node;
+16535: 
+16535:  _List_impl() noexcept(is_nothrow_default_constructible<_Node_alloc_type>::value)
+16535: 
+16535:  : _Node_alloc_type()
+16535:  { }
+16535: 
+16535:  _List_impl(const _Node_alloc_type& __a) noexcept
+16535:  : _Node_alloc_type(__a)
+16535:  { }
+16535: 
+16535: 
+16535:  _List_impl(_List_impl&&) = default;
+16535: 
+16535:  _List_impl(_Node_alloc_type&& __a, _List_impl&& __x)
+16535:  : _Node_alloc_type(std::move(__a)), _M_node(std::move(__x._M_node))
+16535:  { }
+16535: 
+16535:  _List_impl(_Node_alloc_type&& __a) noexcept
+16535:  : _Node_alloc_type(std::move(__a))
+16535:  { }
+16535: 
+16535:       };
+16535: 
+16535:       _List_impl _M_impl;
+16535: 
+16535: 
+16535:       size_t _M_get_size() const { return _M_impl._M_node._M_size; }
+16535: 
+16535:       void _M_set_size(size_t __n) { _M_impl._M_node._M_size = __n; }
+16535: 
+16535:       void _M_inc_size(size_t __n) { _M_impl._M_node._M_size += __n; }
+16535: 
+16535:       void _M_dec_size(size_t __n) { _M_impl._M_node._M_size -= __n; }
+16535: 
+16535: 
+16535:       size_t
+16535:       _M_distance(const __detail::_List_node_base* __first,
+16535:     const __detail::_List_node_base* __last) const
+16535:       { return _S_distance(__first, __last); }
+16535: 
+16535: 
+16535:       size_t _M_node_count() const { return _M_get_size(); }
+16535: # 448 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       typename _Node_alloc_traits::pointer
+16535:       _M_get_node()
+16535:       { return _Node_alloc_traits::allocate(_M_impl, 1); }
+16535: 
+16535:       void
+16535:       _M_put_node(typename _Node_alloc_traits::pointer __p) noexcept
+16535:       { _Node_alloc_traits::deallocate(_M_impl, __p, 1); }
+16535: 
+16535:   public:
+16535:       typedef _Alloc allocator_type;
+16535: 
+16535:       _Node_alloc_type&
+16535:       _M_get_Node_allocator() noexcept
+16535:       { return _M_impl; }
+16535: 
+16535:       const _Node_alloc_type&
+16535:       _M_get_Node_allocator() const noexcept
+16535:       { return _M_impl; }
+16535: 
+16535: 
+16535:       _List_base() = default;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       _List_base(const _Node_alloc_type& __a) noexcept
+16535:       : _M_impl(__a)
+16535:       { }
+16535: 
+16535: 
+16535:       _List_base(_List_base&&) = default;
+16535: 
+16535: 
+16535:       _List_base(_List_base&& __x, _Node_alloc_type&& __a)
+16535:       : _M_impl(std::move(__a))
+16535:       {
+16535:  if (__x._M_get_Node_allocator() == _M_get_Node_allocator())
+16535:    _M_move_nodes(std::move(__x));
+16535: 
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       _List_base(_Node_alloc_type&& __a, _List_base&& __x)
+16535:       : _M_impl(std::move(__a), std::move(__x._M_impl))
+16535:       { }
+16535: 
+16535: 
+16535:       _List_base(_Node_alloc_type&& __a)
+16535:       : _M_impl(std::move(__a))
+16535:       { }
+16535: 
+16535:       void
+16535:       _M_move_nodes(_List_base&& __x)
+16535:       { _M_impl._M_node._M_move_nodes(std::move(__x._M_impl._M_node)); }
+16535: 
+16535: 
+16535: 
+16535:       ~_List_base() noexcept
+16535:       { _M_clear(); }
+16535: 
+16535:       void
+16535:       _M_clear() noexcept;
+16535: 
+16535:       void
+16535:       _M_init() noexcept
+16535:       { this->_M_impl._M_node._M_init(); }
+16535:     };
+16535: # 563 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:   template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
+16535:     class list : protected _List_base<_Tp, _Alloc>
+16535:     {
+16535: # 576 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       static_assert(is_same<typename remove_cv<_Tp>::type, _Tp>::value,
+16535:    "std::list must have a non-const, non-volatile value_type");
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       typedef _List_base<_Tp, _Alloc> _Base;
+16535:       typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
+16535:       typedef typename _Base::_Tp_alloc_traits _Tp_alloc_traits;
+16535:       typedef typename _Base::_Node_alloc_type _Node_alloc_type;
+16535:       typedef typename _Base::_Node_alloc_traits _Node_alloc_traits;
+16535: 
+16535:     public:
+16535:       typedef _Tp value_type;
+16535:       typedef typename _Tp_alloc_traits::pointer pointer;
+16535:       typedef typename _Tp_alloc_traits::const_pointer const_pointer;
+16535:       typedef typename _Tp_alloc_traits::reference reference;
+16535:       typedef typename _Tp_alloc_traits::const_reference const_reference;
+16535:       typedef _List_iterator<_Tp> iterator;
+16535:       typedef _List_const_iterator<_Tp> const_iterator;
+16535:       typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+16535:       typedef std::reverse_iterator<iterator> reverse_iterator;
+16535:       typedef size_t size_type;
+16535:       typedef ptrdiff_t difference_type;
+16535:       typedef _Alloc allocator_type;
+16535: 
+16535:     protected:
+16535: 
+16535: 
+16535:       typedef _List_node<_Tp> _Node;
+16535: 
+16535:       using _Base::_M_impl;
+16535:       using _Base::_M_put_node;
+16535:       using _Base::_M_get_node;
+16535:       using _Base::_M_get_Node_allocator;
+16535: # 638 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       template<typename... _Args>
+16535:  _Node*
+16535:  _M_create_node(_Args&&... __args)
+16535:  {
+16535:    auto __p = this->_M_get_node();
+16535:    auto& __alloc = _M_get_Node_allocator();
+16535:    __allocated_ptr<_Node_alloc_type> __guard{__alloc, __p};
+16535:    _Node_alloc_traits::construct(__alloc, __p->_M_valptr(),
+16535:      std::forward<_Args>(__args)...);
+16535:    __guard = nullptr;
+16535:    return __p;
+16535:  }
+16535: 
+16535: 
+16535: 
+16535:       static size_t
+16535:       _S_distance(const_iterator __first, const_iterator __last)
+16535:       { return std::distance(__first, __last); }
+16535: 
+16535: 
+16535:       size_t
+16535:       _M_node_count() const
+16535:       { return this->_M_get_size(); }
+16535: # 673 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       list() = default;
+16535: # 690 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       explicit
+16535:       list(const allocator_type& __a) noexcept
+16535:       : _Base(_Node_alloc_type(__a)) { }
+16535: # 703 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       explicit
+16535:       list(size_type __n, const allocator_type& __a = allocator_type())
+16535:       : _Base(_Node_alloc_type(__a))
+16535:       { _M_default_initialize(__n); }
+16535: # 716 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       list(size_type __n, const value_type& __value,
+16535:     const allocator_type& __a = allocator_type())
+16535:       : _Base(_Node_alloc_type(__a))
+16535:       { _M_fill_initialize(__n, __value); }
+16535: # 743 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       list(const list& __x)
+16535:       : _Base(_Node_alloc_traits::
+16535:        _S_select_on_copy(__x._M_get_Node_allocator()))
+16535:       { _M_initialize_dispatch(__x.begin(), __x.end(), __false_type()); }
+16535: # 756 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       list(list&&) = default;
+16535: # 766 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       list(initializer_list<value_type> __l,
+16535:     const allocator_type& __a = allocator_type())
+16535:       : _Base(_Node_alloc_type(__a))
+16535:       { _M_initialize_dispatch(__l.begin(), __l.end(), __false_type()); }
+16535: 
+16535:       list(const list& __x, const allocator_type& __a)
+16535:       : _Base(_Node_alloc_type(__a))
+16535:       { _M_initialize_dispatch(__x.begin(), __x.end(), __false_type()); }
+16535: 
+16535:     private:
+16535:       list(list&& __x, const allocator_type& __a, true_type) noexcept
+16535:       : _Base(_Node_alloc_type(__a), std::move(__x))
+16535:       { }
+16535: 
+16535:       list(list&& __x, const allocator_type& __a, false_type)
+16535:       : _Base(_Node_alloc_type(__a))
+16535:       {
+16535:  if (__x._M_get_Node_allocator() == this->_M_get_Node_allocator())
+16535:    this->_M_move_nodes(std::move(__x));
+16535:  else
+16535:    insert(begin(), std::__make_move_if_noexcept_iterator(__x.begin()),
+16535:      std::__make_move_if_noexcept_iterator(__x.end()));
+16535:       }
+16535: 
+16535:     public:
+16535:       list(list&& __x, const allocator_type& __a)
+16535:       noexcept(_Node_alloc_traits::_S_always_equal())
+16535:       : list(std::move(__x), __a,
+16535:       typename _Node_alloc_traits::is_always_equal{})
+16535:       { }
+16535: # 809 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       template<typename _InputIterator,
+16535:         typename = std::_RequireInputIter<_InputIterator>>
+16535:  list(_InputIterator __first, _InputIterator __last,
+16535:       const allocator_type& __a = allocator_type())
+16535:  : _Base(_Node_alloc_type(__a))
+16535:  { _M_initialize_dispatch(__first, __last, __false_type()); }
+16535: # 835 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       ~list() = default;
+16535: # 846 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       list&
+16535:       operator=(const list& __x);
+16535: # 860 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       list&
+16535:       operator=(list&& __x)
+16535:       noexcept(_Node_alloc_traits::_S_nothrow_move())
+16535:       {
+16535:  constexpr bool __move_storage =
+16535:    _Node_alloc_traits::_S_propagate_on_move_assign()
+16535:    || _Node_alloc_traits::_S_always_equal();
+16535:  _M_move_assign(std::move(__x), __bool_constant<__move_storage>());
+16535:  return *this;
+16535:       }
+16535: # 878 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       list&
+16535:       operator=(initializer_list<value_type> __l)
+16535:       {
+16535:  this->assign(__l.begin(), __l.end());
+16535:  return *this;
+16535:       }
+16535: # 896 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       void
+16535:       assign(size_type __n, const value_type& __val)
+16535:       { _M_fill_assign(__n, __val); }
+16535: # 913 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       template<typename _InputIterator,
+16535:         typename = std::_RequireInputIter<_InputIterator>>
+16535:  void
+16535:  assign(_InputIterator __first, _InputIterator __last)
+16535:  { _M_assign_dispatch(__first, __last, __false_type()); }
+16535: # 937 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       void
+16535:       assign(initializer_list<value_type> __l)
+16535:       { this->_M_assign_dispatch(__l.begin(), __l.end(), __false_type()); }
+16535: 
+16535: 
+16535: 
+16535:       allocator_type
+16535:       get_allocator() const noexcept
+16535:       { return allocator_type(_Base::_M_get_Node_allocator()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       begin() noexcept
+16535:       { return iterator(this->_M_impl._M_node._M_next); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       begin() const noexcept
+16535:       { return const_iterator(this->_M_impl._M_node._M_next); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       iterator
+16535:       end() noexcept
+16535:       { return iterator(&this->_M_impl._M_node); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       end() const noexcept
+16535:       { return const_iterator(&this->_M_impl._M_node); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       rbegin() noexcept
+16535:       { return reverse_iterator(end()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       rbegin() const noexcept
+16535:       { return const_reverse_iterator(end()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reverse_iterator
+16535:       rend() noexcept
+16535:       { return reverse_iterator(begin()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       rend() const noexcept
+16535:       { return const_reverse_iterator(begin()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       cbegin() const noexcept
+16535:       { return const_iterator(this->_M_impl._M_node._M_next); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_iterator
+16535:       cend() const noexcept
+16535:       { return const_iterator(&this->_M_impl._M_node); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       crbegin() const noexcept
+16535:       { return const_reverse_iterator(end()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reverse_iterator
+16535:       crend() const noexcept
+16535:       { return const_reverse_iterator(begin()); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       bool
+16535:       empty() const noexcept
+16535:       { return this->_M_impl._M_node._M_next == &this->_M_impl._M_node; }
+16535: 
+16535: 
+16535:       size_type
+16535:       size() const noexcept
+16535:       { return _M_node_count(); }
+16535: 
+16535: 
+16535:       size_type
+16535:       max_size() const noexcept
+16535:       { return _Node_alloc_traits::max_size(_M_get_Node_allocator()); }
+16535: # 1086 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       void
+16535:       resize(size_type __new_size);
+16535: # 1099 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       void
+16535:       resize(size_type __new_size, const value_type& __x);
+16535: # 1121 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       reference
+16535:       front() noexcept
+16535:       { return *begin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reference
+16535:       front() const noexcept
+16535:       { return *begin(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       reference
+16535:       back() noexcept
+16535:       {
+16535:  iterator __tmp = end();
+16535:  --__tmp;
+16535:  return *__tmp;
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       const_reference
+16535:       back() const noexcept
+16535:       {
+16535:  const_iterator __tmp = end();
+16535:  --__tmp;
+16535:  return *__tmp;
+16535:       }
+16535: # 1168 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       void
+16535:       push_front(const value_type& __x)
+16535:       { this->_M_insert(begin(), __x); }
+16535: 
+16535: 
+16535:       void
+16535:       push_front(value_type&& __x)
+16535:       { this->_M_insert(begin(), std::move(__x)); }
+16535: 
+16535:       template<typename... _Args>
+16535: 
+16535: 
+16535: 
+16535:  void
+16535: 
+16535:  emplace_front(_Args&&... __args)
+16535:  {
+16535:    this->_M_insert(begin(), std::forward<_Args>(__args)...);
+16535: 
+16535: 
+16535: 
+16535:  }
+16535: # 1204 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       void
+16535:       pop_front() noexcept
+16535:       { this->_M_erase(begin()); }
+16535: # 1218 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       void
+16535:       push_back(const value_type& __x)
+16535:       { this->_M_insert(end(), __x); }
+16535: 
+16535: 
+16535:       void
+16535:       push_back(value_type&& __x)
+16535:       { this->_M_insert(end(), std::move(__x)); }
+16535: 
+16535:       template<typename... _Args>
+16535: 
+16535: 
+16535: 
+16535:  void
+16535: 
+16535:  emplace_back(_Args&&... __args)
+16535:  {
+16535:    this->_M_insert(end(), std::forward<_Args>(__args)...);
+16535: 
+16535: 
+16535: 
+16535:  }
+16535: # 1253 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       void
+16535:       pop_back() noexcept
+16535:       { this->_M_erase(iterator(this->_M_impl._M_node._M_prev)); }
+16535: # 1270 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       template<typename... _Args>
+16535:  iterator
+16535:  emplace(const_iterator __position, _Args&&... __args);
+16535: # 1285 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       iterator
+16535:       insert(const_iterator __position, const value_type& __x);
+16535: # 1315 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       iterator
+16535:       insert(const_iterator __position, value_type&& __x)
+16535:       { return emplace(__position, std::move(__x)); }
+16535: # 1334 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       iterator
+16535:       insert(const_iterator __p, initializer_list<value_type> __l)
+16535:       { return this->insert(__p, __l.begin(), __l.end()); }
+16535: # 1354 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       iterator
+16535:       insert(const_iterator __position, size_type __n, const value_type& __x);
+16535: # 1393 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       template<typename _InputIterator,
+16535:         typename = std::_RequireInputIter<_InputIterator>>
+16535:  iterator
+16535:  insert(const_iterator __position, _InputIterator __first,
+16535:         _InputIterator __last);
+16535: # 1437 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       iterator
+16535: 
+16535:       erase(const_iterator __position) noexcept;
+16535: # 1462 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       iterator
+16535: 
+16535:       erase(const_iterator __first, const_iterator __last) noexcept
+16535: 
+16535: 
+16535: 
+16535:       {
+16535:  while (__first != __last)
+16535:    __first = erase(__first);
+16535:  return __last._M_const_cast();
+16535:       }
+16535: # 1485 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       void
+16535:       swap(list& __x) noexcept
+16535:       {
+16535:  __detail::_List_node_base::swap(this->_M_impl._M_node,
+16535:      __x._M_impl._M_node);
+16535: 
+16535:  size_t __xsize = __x._M_get_size();
+16535:  __x._M_set_size(this->_M_get_size());
+16535:  this->_M_set_size(__xsize);
+16535: 
+16535:  _Node_alloc_traits::_S_on_swap(this->_M_get_Node_allocator(),
+16535:            __x._M_get_Node_allocator());
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       clear() noexcept
+16535:       {
+16535:  _Base::_M_clear();
+16535:  _Base::_M_init();
+16535:       }
+16535: # 1524 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       void
+16535: 
+16535:       splice(const_iterator __position, list&& __x) noexcept
+16535: 
+16535: 
+16535: 
+16535:       {
+16535:  if (!__x.empty())
+16535:    {
+16535:      _M_check_equal_allocators(__x);
+16535: 
+16535:      this->_M_transfer(__position._M_const_cast(),
+16535:          __x.begin(), __x.end());
+16535: 
+16535:      this->_M_inc_size(__x._M_get_size());
+16535:      __x._M_set_size(0);
+16535:    }
+16535:       }
+16535: 
+16535: 
+16535:       void
+16535:       splice(const_iterator __position, list& __x) noexcept
+16535:       { splice(__position, std::move(__x)); }
+16535: # 1560 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       void
+16535:       splice(const_iterator __position, list&& __x, const_iterator __i) noexcept
+16535: # 1575 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       {
+16535:  iterator __j = __i._M_const_cast();
+16535:  ++__j;
+16535:  if (__position == __i || __position == __j)
+16535:    return;
+16535: 
+16535:  if (this != std::__addressof(__x))
+16535:    _M_check_equal_allocators(__x);
+16535: 
+16535:  this->_M_transfer(__position._M_const_cast(),
+16535:      __i._M_const_cast(), __j);
+16535: 
+16535:  this->_M_inc_size(1);
+16535:  __x._M_dec_size(1);
+16535:       }
+16535: # 1602 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       void
+16535:       splice(const_iterator __position, list& __x, const_iterator __i) noexcept
+16535:       { splice(__position, std::move(__x), __i); }
+16535: # 1621 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       void
+16535:       splice(const_iterator __position, list&& __x, const_iterator __first,
+16535:       const_iterator __last) noexcept
+16535: # 1641 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       {
+16535:  if (__first != __last)
+16535:    {
+16535:      if (this != std::__addressof(__x))
+16535:        _M_check_equal_allocators(__x);
+16535: 
+16535:      size_t __n = _S_distance(__first, __last);
+16535:      this->_M_inc_size(__n);
+16535:      __x._M_dec_size(__n);
+16535: 
+16535:      this->_M_transfer(__position._M_const_cast(),
+16535:          __first._M_const_cast(),
+16535:          __last._M_const_cast());
+16535:    }
+16535:       }
+16535: # 1671 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       void
+16535:       splice(const_iterator __position, list& __x, const_iterator __first,
+16535:       const_iterator __last) noexcept
+16535:       { splice(__position, std::move(__x), __first, __last); }
+16535: # 1688 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       void
+16535:       remove(const _Tp& __value);
+16535: # 1702 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       template<typename _Predicate>
+16535:  void
+16535:  remove_if(_Predicate);
+16535: # 1716 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       void
+16535:       unique();
+16535: # 1731 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       template<typename _BinaryPredicate>
+16535:  void
+16535:  unique(_BinaryPredicate);
+16535: # 1745 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       void
+16535:       merge(list&& __x);
+16535: 
+16535:       void
+16535:       merge(list& __x)
+16535:       { merge(std::move(__x)); }
+16535: # 1770 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       template<typename _StrictWeakOrdering>
+16535:  void
+16535:  merge(list&& __x, _StrictWeakOrdering __comp);
+16535: 
+16535:       template<typename _StrictWeakOrdering>
+16535:  void
+16535:  merge(list& __x, _StrictWeakOrdering __comp)
+16535:  { merge(std::move(__x), __comp); }
+16535: # 1789 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       void
+16535:       reverse() noexcept
+16535:       { this->_M_impl._M_node._M_reverse(); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       sort();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       template<typename _StrictWeakOrdering>
+16535:  void
+16535:  sort(_StrictWeakOrdering);
+16535: 
+16535:     protected:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Integer>
+16535:  void
+16535:  _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type)
+16535:  { _M_fill_initialize(static_cast<size_type>(__n), __x); }
+16535: 
+16535: 
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
+16535:           __false_type)
+16535:  {
+16535:    for (; __first != __last; ++__first)
+16535: 
+16535:      emplace_back(*__first);
+16535: 
+16535: 
+16535: 
+16535:  }
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_fill_initialize(size_type __n, const value_type& __x)
+16535:       {
+16535:  for (; __n; --__n)
+16535:    push_back(__x);
+16535:       }
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_default_initialize(size_type __n)
+16535:       {
+16535:  for (; __n; --__n)
+16535:    emplace_back();
+16535:       }
+16535: 
+16535: 
+16535:       void
+16535:       _M_default_append(size_type __n);
+16535: # 1867 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:       template<typename _Integer>
+16535:  void
+16535:  _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
+16535:  { _M_fill_assign(__n, __val); }
+16535: 
+16535: 
+16535:       template<typename _InputIterator>
+16535:  void
+16535:  _M_assign_dispatch(_InputIterator __first, _InputIterator __last,
+16535:       __false_type);
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_fill_assign(size_type __n, const value_type& __val);
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_transfer(iterator __position, iterator __first, iterator __last)
+16535:       { __position._M_node->_M_transfer(__first._M_node, __last._M_node); }
+16535: # 1899 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:      template<typename... _Args>
+16535:        void
+16535:        _M_insert(iterator __position, _Args&&... __args)
+16535:        {
+16535:   _Node* __tmp = _M_create_node(std::forward<_Args>(__args)...);
+16535:   __tmp->_M_hook(__position._M_node);
+16535:   this->_M_inc_size(1);
+16535:        }
+16535: 
+16535: 
+16535: 
+16535:       void
+16535:       _M_erase(iterator __position) noexcept
+16535:       {
+16535:  this->_M_dec_size(1);
+16535:  __position._M_node->_M_unhook();
+16535:  _Node* __n = static_cast<_Node*>(__position._M_node);
+16535: 
+16535:  _Node_alloc_traits::destroy(_M_get_Node_allocator(), __n->_M_valptr());
+16535: 
+16535: 
+16535: 
+16535: 
+16535:  _M_put_node(__n);
+16535:       }
+16535: 
+16535: 
+16535:       void
+16535:       _M_check_equal_allocators(list& __x) noexcept
+16535:       {
+16535:  if (std::__alloc_neq<typename _Base::_Node_alloc_type>::
+16535:      _S_do_it(_M_get_Node_allocator(), __x._M_get_Node_allocator()))
+16535:    __builtin_abort();
+16535:       }
+16535: 
+16535: 
+16535:       const_iterator
+16535:       _M_resize_pos(size_type& __new_size) const;
+16535: 
+16535: 
+16535:       void
+16535:       _M_move_assign(list&& __x, true_type) noexcept
+16535:       {
+16535:  this->_M_clear();
+16535:  this->_M_move_nodes(std::move(__x));
+16535:  std::__alloc_on_move(this->_M_get_Node_allocator(),
+16535:         __x._M_get_Node_allocator());
+16535:       }
+16535: 
+16535:       void
+16535:       _M_move_assign(list&& __x, false_type)
+16535:       {
+16535:  if (__x._M_get_Node_allocator() == this->_M_get_Node_allocator())
+16535:    _M_move_assign(std::move(__x), true_type{});
+16535:  else
+16535: 
+16535: 
+16535:    _M_assign_dispatch(std::__make_move_if_noexcept_iterator(__x.begin()),
+16535:         std::__make_move_if_noexcept_iterator(__x.end()),
+16535:         __false_type{});
+16535:       }
+16535: 
+16535:     };
+16535: # 1973 "/usr/include/c++/8/bits/stl_list.h" 3
+16535: }
+16535: # 1985 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:   template<typename _Tp, typename _Alloc>
+16535:     inline bool
+16535:     operator==(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y)
+16535:     {
+16535: 
+16535:       if (__x.size() != __y.size())
+16535:  return false;
+16535: 
+16535: 
+16535:       typedef typename list<_Tp, _Alloc>::const_iterator const_iterator;
+16535:       const_iterator __end1 = __x.end();
+16535:       const_iterator __end2 = __y.end();
+16535: 
+16535:       const_iterator __i1 = __x.begin();
+16535:       const_iterator __i2 = __y.begin();
+16535:       while (__i1 != __end1 && __i2 != __end2 && *__i1 == *__i2)
+16535:  {
+16535:    ++__i1;
+16535:    ++__i2;
+16535:  }
+16535:       return __i1 == __end1 && __i2 == __end2;
+16535:     }
+16535: # 2019 "/usr/include/c++/8/bits/stl_list.h" 3
+16535:   template<typename _Tp, typename _Alloc>
+16535:     inline bool
+16535:     operator<(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y)
+16535:     { return std::lexicographical_compare(__x.begin(), __x.end(),
+16535:        __y.begin(), __y.end()); }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     inline bool
+16535:     operator!=(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y)
+16535:     { return !(__x == __y); }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     inline bool
+16535:     operator>(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y)
+16535:     { return __y < __x; }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     inline bool
+16535:     operator<=(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y)
+16535:     { return !(__y < __x); }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     inline bool
+16535:     operator>=(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y)
+16535:     { return !(__x < __y); }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     inline void
+16535:     swap(list<_Tp, _Alloc>& __x, list<_Tp, _Alloc>& __y)
+16535:     noexcept(noexcept(__x.swap(__y)))
+16535:     { __x.swap(__y); }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     inline ptrdiff_t
+16535:     __distance(std::_List_iterator<_Tp> __first,
+16535:         std::_List_iterator<_Tp> __last,
+16535:         input_iterator_tag __tag)
+16535:     {
+16535:       typedef std::_List_const_iterator<_Tp> _CIter;
+16535:       return std::__distance(_CIter(__first), _CIter(__last), __tag);
+16535:     }
+16535: 
+16535:   template<typename _Tp>
+16535:     inline ptrdiff_t
+16535:     __distance(std::_List_const_iterator<_Tp> __first,
+16535:         std::_List_const_iterator<_Tp> __last,
+16535:         input_iterator_tag)
+16535:     {
+16535:       typedef __detail::_List_node_header _Sentinel;
+16535:       std::_List_const_iterator<_Tp> __beyond = __last;
+16535:       ++__beyond;
+16535:       const bool __whole = __first == __beyond;
+16535:       if (__builtin_constant_p (__whole) && __whole)
+16535:  return static_cast<const _Sentinel*>(__last._M_node)->_M_size;
+16535: 
+16535:       ptrdiff_t __n = 0;
+16535:       while (__first != __last)
+16535:  {
+16535:    ++__first;
+16535:    ++__n;
+16535:  }
+16535:       return __n;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 64 "/usr/include/c++/8/list" 2 3
+16535: # 1 "/usr/include/c++/8/bits/list.tcc" 1 3
+16535: # 59 "/usr/include/c++/8/bits/list.tcc" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     void
+16535:     _List_base<_Tp, _Alloc>::
+16535:     _M_clear() noexcept
+16535:     {
+16535:       typedef _List_node<_Tp> _Node;
+16535:       __detail::_List_node_base* __cur = _M_impl._M_node._M_next;
+16535:       while (__cur != &_M_impl._M_node)
+16535:  {
+16535:    _Node* __tmp = static_cast<_Node*>(__cur);
+16535:    __cur = __tmp->_M_next;
+16535:    _Tp* __val = __tmp->_M_valptr();
+16535: 
+16535:    _Node_alloc_traits::destroy(_M_get_Node_allocator(), __val);
+16535: 
+16535: 
+16535: 
+16535:    _M_put_node(__tmp);
+16535:  }
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     template<typename... _Args>
+16535:       typename list<_Tp, _Alloc>::iterator
+16535:       list<_Tp, _Alloc>::
+16535:       emplace(const_iterator __position, _Args&&... __args)
+16535:       {
+16535:  _Node* __tmp = _M_create_node(std::forward<_Args>(__args)...);
+16535:  __tmp->_M_hook(__position._M_const_cast()._M_node);
+16535:  this->_M_inc_size(1);
+16535:  return iterator(__tmp);
+16535:       }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     typename list<_Tp, _Alloc>::iterator
+16535:     list<_Tp, _Alloc>::
+16535: 
+16535:     insert(const_iterator __position, const value_type& __x)
+16535: 
+16535: 
+16535: 
+16535:     {
+16535:       _Node* __tmp = _M_create_node(__x);
+16535:       __tmp->_M_hook(__position._M_const_cast()._M_node);
+16535:       this->_M_inc_size(1);
+16535:       return iterator(__tmp);
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     typename list<_Tp, _Alloc>::iterator
+16535:     list<_Tp, _Alloc>::
+16535:     insert(const_iterator __position, size_type __n, const value_type& __x)
+16535:     {
+16535:       if (__n)
+16535:  {
+16535:    list __tmp(__n, __x, get_allocator());
+16535:    iterator __it = __tmp.begin();
+16535:    splice(__position, __tmp);
+16535:    return __it;
+16535:  }
+16535:       return __position._M_const_cast();
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     template<typename _InputIterator, typename>
+16535:       typename list<_Tp, _Alloc>::iterator
+16535:       list<_Tp, _Alloc>::
+16535:       insert(const_iterator __position, _InputIterator __first,
+16535:       _InputIterator __last)
+16535:       {
+16535:  list __tmp(__first, __last, get_allocator());
+16535:  if (!__tmp.empty())
+16535:    {
+16535:      iterator __it = __tmp.begin();
+16535:      splice(__position, __tmp);
+16535:      return __it;
+16535:    }
+16535:  return __position._M_const_cast();
+16535:       }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     typename list<_Tp, _Alloc>::iterator
+16535:     list<_Tp, _Alloc>::
+16535: 
+16535:     erase(const_iterator __position) noexcept
+16535: 
+16535: 
+16535: 
+16535:     {
+16535:       iterator __ret = iterator(__position._M_node->_M_next);
+16535:       _M_erase(__position._M_const_cast());
+16535:       return __ret;
+16535:     }
+16535: # 173 "/usr/include/c++/8/bits/list.tcc" 3
+16535:   template<typename _Tp, typename _Alloc>
+16535:     typename list<_Tp, _Alloc>::const_iterator
+16535:     list<_Tp, _Alloc>::
+16535:     _M_resize_pos(size_type& __new_size) const
+16535:     {
+16535:       const_iterator __i;
+16535: 
+16535:       const size_type __len = size();
+16535:       if (__new_size < __len)
+16535:  {
+16535:    if (__new_size <= __len / 2)
+16535:      {
+16535:        __i = begin();
+16535:        std::advance(__i, __new_size);
+16535:      }
+16535:    else
+16535:      {
+16535:        __i = end();
+16535:        ptrdiff_t __num_erase = __len - __new_size;
+16535:        std::advance(__i, -__num_erase);
+16535:      }
+16535:    __new_size = 0;
+16535:    return __i;
+16535:  }
+16535:       else
+16535:  __i = end();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       __new_size -= __len;
+16535:       return __i;
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     void
+16535:     list<_Tp, _Alloc>::
+16535:     _M_default_append(size_type __n)
+16535:     {
+16535:       size_type __i = 0;
+16535:       try
+16535:  {
+16535:    for (; __i < __n; ++__i)
+16535:      emplace_back();
+16535:  }
+16535:       catch(...)
+16535:  {
+16535:    for (; __i; --__i)
+16535:      pop_back();
+16535:    throw;
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     void
+16535:     list<_Tp, _Alloc>::
+16535:     resize(size_type __new_size)
+16535:     {
+16535:       const_iterator __i = _M_resize_pos(__new_size);
+16535:       if (__new_size)
+16535:  _M_default_append(__new_size);
+16535:       else
+16535:         erase(__i, end());
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     void
+16535:     list<_Tp, _Alloc>::
+16535:     resize(size_type __new_size, const value_type& __x)
+16535:     {
+16535:       const_iterator __i = _M_resize_pos(__new_size);
+16535:       if (__new_size)
+16535:         insert(end(), __new_size, __x);
+16535:       else
+16535:         erase(__i, end());
+16535:     }
+16535: # 265 "/usr/include/c++/8/bits/list.tcc" 3
+16535:   template<typename _Tp, typename _Alloc>
+16535:     list<_Tp, _Alloc>&
+16535:     list<_Tp, _Alloc>::
+16535:     operator=(const list& __x)
+16535:     {
+16535:       if (this != std::__addressof(__x))
+16535:  {
+16535: 
+16535:    if (_Node_alloc_traits::_S_propagate_on_copy_assign())
+16535:      {
+16535:               auto& __this_alloc = this->_M_get_Node_allocator();
+16535:               auto& __that_alloc = __x._M_get_Node_allocator();
+16535:               if (!_Node_alloc_traits::_S_always_equal()
+16535:            && __this_alloc != __that_alloc)
+16535:          {
+16535: 
+16535:     clear();
+16535:   }
+16535:        std::__alloc_on_copy(__this_alloc, __that_alloc);
+16535:             }
+16535: 
+16535:    _M_assign_dispatch(__x.begin(), __x.end(), __false_type());
+16535:  }
+16535:       return *this;
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     void
+16535:     list<_Tp, _Alloc>::
+16535:     _M_fill_assign(size_type __n, const value_type& __val)
+16535:     {
+16535:       iterator __i = begin();
+16535:       for (; __i != end() && __n > 0; ++__i, --__n)
+16535:         *__i = __val;
+16535:       if (__n > 0)
+16535:         insert(end(), __n, __val);
+16535:       else
+16535:         erase(__i, end());
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     template <typename _InputIterator>
+16535:       void
+16535:       list<_Tp, _Alloc>::
+16535:       _M_assign_dispatch(_InputIterator __first2, _InputIterator __last2,
+16535:     __false_type)
+16535:       {
+16535:         iterator __first1 = begin();
+16535:         iterator __last1 = end();
+16535:         for (; __first1 != __last1 && __first2 != __last2;
+16535:       ++__first1, ++__first2)
+16535:           *__first1 = *__first2;
+16535:         if (__first2 == __last2)
+16535:           erase(__first1, __last1);
+16535:         else
+16535:           insert(__last1, __first2, __last2);
+16535:       }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     void
+16535:     list<_Tp, _Alloc>::
+16535:     remove(const value_type& __value)
+16535:     {
+16535:       iterator __first = begin();
+16535:       iterator __last = end();
+16535:       iterator __extra = __last;
+16535:       while (__first != __last)
+16535:  {
+16535:    iterator __next = __first;
+16535:    ++__next;
+16535:    if (*__first == __value)
+16535:      {
+16535: 
+16535: 
+16535: 
+16535:        if (std::__addressof(*__first) != std::__addressof(__value))
+16535:   _M_erase(__first);
+16535:        else
+16535:   __extra = __first;
+16535:      }
+16535:    __first = __next;
+16535:  }
+16535:       if (__extra != __last)
+16535:  _M_erase(__extra);
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     void
+16535:     list<_Tp, _Alloc>::
+16535:     unique()
+16535:     {
+16535:       iterator __first = begin();
+16535:       iterator __last = end();
+16535:       if (__first == __last)
+16535:  return;
+16535:       iterator __next = __first;
+16535:       while (++__next != __last)
+16535:  {
+16535:    if (*__first == *__next)
+16535:      _M_erase(__next);
+16535:    else
+16535:      __first = __next;
+16535:    __next = __first;
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     void
+16535:     list<_Tp, _Alloc>::
+16535: 
+16535:     merge(list&& __x)
+16535: 
+16535: 
+16535: 
+16535:     {
+16535: 
+16535: 
+16535:       if (this != std::__addressof(__x))
+16535:  {
+16535:    _M_check_equal_allocators(__x);
+16535: 
+16535:    iterator __first1 = begin();
+16535:    iterator __last1 = end();
+16535:    iterator __first2 = __x.begin();
+16535:    iterator __last2 = __x.end();
+16535:    const size_t __orig_size = __x.size();
+16535:    try {
+16535:      while (__first1 != __last1 && __first2 != __last2)
+16535:        if (*__first2 < *__first1)
+16535:   {
+16535:     iterator __next = __first2;
+16535:     _M_transfer(__first1, __first2, ++__next);
+16535:     __first2 = __next;
+16535:   }
+16535:        else
+16535:   ++__first1;
+16535:      if (__first2 != __last2)
+16535:        _M_transfer(__last1, __first2, __last2);
+16535: 
+16535:      this->_M_inc_size(__x._M_get_size());
+16535:      __x._M_set_size(0);
+16535:    }
+16535:    catch(...)
+16535:      {
+16535:        const size_t __dist = std::distance(__first2, __last2);
+16535:        this->_M_inc_size(__orig_size - __dist);
+16535:        __x._M_set_size(__dist);
+16535:        throw;
+16535:      }
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     template <typename _StrictWeakOrdering>
+16535:       void
+16535:       list<_Tp, _Alloc>::
+16535: 
+16535:       merge(list&& __x, _StrictWeakOrdering __comp)
+16535: 
+16535: 
+16535: 
+16535:       {
+16535: 
+16535: 
+16535:  if (this != std::__addressof(__x))
+16535:    {
+16535:      _M_check_equal_allocators(__x);
+16535: 
+16535:      iterator __first1 = begin();
+16535:      iterator __last1 = end();
+16535:      iterator __first2 = __x.begin();
+16535:      iterator __last2 = __x.end();
+16535:      const size_t __orig_size = __x.size();
+16535:      try
+16535:        {
+16535:   while (__first1 != __last1 && __first2 != __last2)
+16535:     if (__comp(*__first2, *__first1))
+16535:       {
+16535:         iterator __next = __first2;
+16535:         _M_transfer(__first1, __first2, ++__next);
+16535:         __first2 = __next;
+16535:       }
+16535:     else
+16535:       ++__first1;
+16535:   if (__first2 != __last2)
+16535:     _M_transfer(__last1, __first2, __last2);
+16535: 
+16535:   this->_M_inc_size(__x._M_get_size());
+16535:   __x._M_set_size(0);
+16535:        }
+16535:      catch(...)
+16535:        {
+16535:   const size_t __dist = std::distance(__first2, __last2);
+16535:   this->_M_inc_size(__orig_size - __dist);
+16535:   __x._M_set_size(__dist);
+16535:   throw;
+16535:        }
+16535:    }
+16535:       }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     void
+16535:     list<_Tp, _Alloc>::
+16535:     sort()
+16535:     {
+16535: 
+16535:       if (this->_M_impl._M_node._M_next != &this->_M_impl._M_node
+16535:    && this->_M_impl._M_node._M_next->_M_next != &this->_M_impl._M_node)
+16535:       {
+16535:         list __carry;
+16535:         list __tmp[64];
+16535:         list * __fill = __tmp;
+16535:         list * __counter;
+16535:  try
+16535:    {
+16535:      do
+16535:        {
+16535:   __carry.splice(__carry.begin(), *this, begin());
+16535: 
+16535:   for(__counter = __tmp;
+16535:       __counter != __fill && !__counter->empty();
+16535:       ++__counter)
+16535:     {
+16535:       __counter->merge(__carry);
+16535:       __carry.swap(*__counter);
+16535:     }
+16535:   __carry.swap(*__counter);
+16535:   if (__counter == __fill)
+16535:     ++__fill;
+16535:        }
+16535:      while ( !empty() );
+16535: 
+16535:      for (__counter = __tmp + 1; __counter != __fill; ++__counter)
+16535:        __counter->merge(*(__counter - 1));
+16535:      swap( *(__fill - 1) );
+16535:    }
+16535:  catch(...)
+16535:    {
+16535:      this->splice(this->end(), __carry);
+16535:      for (int __i = 0; __i < sizeof(__tmp)/sizeof(__tmp[0]); ++__i)
+16535:        this->splice(this->end(), __tmp[__i]);
+16535:      throw;
+16535:    }
+16535:       }
+16535:     }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     template <typename _Predicate>
+16535:       void
+16535:       list<_Tp, _Alloc>::
+16535:       remove_if(_Predicate __pred)
+16535:       {
+16535:         iterator __first = begin();
+16535:         iterator __last = end();
+16535:         while (__first != __last)
+16535:    {
+16535:      iterator __next = __first;
+16535:      ++__next;
+16535:      if (__pred(*__first))
+16535:        _M_erase(__first);
+16535:      __first = __next;
+16535:    }
+16535:       }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     template <typename _BinaryPredicate>
+16535:       void
+16535:       list<_Tp, _Alloc>::
+16535:       unique(_BinaryPredicate __binary_pred)
+16535:       {
+16535:         iterator __first = begin();
+16535:         iterator __last = end();
+16535:         if (__first == __last)
+16535:    return;
+16535:         iterator __next = __first;
+16535:         while (++__next != __last)
+16535:    {
+16535:      if (__binary_pred(*__first, *__next))
+16535:        _M_erase(__next);
+16535:      else
+16535:        __first = __next;
+16535:      __next = __first;
+16535:    }
+16535:       }
+16535: 
+16535:   template<typename _Tp, typename _Alloc>
+16535:     template <typename _StrictWeakOrdering>
+16535:       void
+16535:       list<_Tp, _Alloc>::
+16535:       sort(_StrictWeakOrdering __comp)
+16535:       {
+16535: 
+16535:  if (this->_M_impl._M_node._M_next != &this->_M_impl._M_node
+16535:      && this->_M_impl._M_node._M_next->_M_next != &this->_M_impl._M_node)
+16535:    {
+16535:      list __carry;
+16535:      list __tmp[64];
+16535:      list * __fill = __tmp;
+16535:      list * __counter;
+16535:      try
+16535:        {
+16535:   do
+16535:     {
+16535:       __carry.splice(__carry.begin(), *this, begin());
+16535: 
+16535:       for(__counter = __tmp;
+16535:    __counter != __fill && !__counter->empty();
+16535:    ++__counter)
+16535:         {
+16535:    __counter->merge(__carry, __comp);
+16535:    __carry.swap(*__counter);
+16535:         }
+16535:       __carry.swap(*__counter);
+16535:       if (__counter == __fill)
+16535:         ++__fill;
+16535:     }
+16535:   while ( !empty() );
+16535: 
+16535:   for (__counter = __tmp + 1; __counter != __fill; ++__counter)
+16535:     __counter->merge(*(__counter - 1), __comp);
+16535:   swap(*(__fill - 1));
+16535:        }
+16535:      catch(...)
+16535:        {
+16535:   this->splice(this->end(), __carry);
+16535:   for (int __i = 0; __i < sizeof(__tmp)/sizeof(__tmp[0]); ++__i)
+16535:     this->splice(this->end(), __tmp[__i]);
+16535:   throw;
+16535:        }
+16535:    }
+16535:       }
+16535: 
+16535: 
+16535: 
+16535: }
+16535: # 65 "/usr/include/c++/8/list" 2 3
+16535: # 33 "../../src/Powerset_defs.hh" 2
+16535: 
+16535: 
+16535: # 34 "../../src/Powerset_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: template <typename D>
+16535: void swap(Powerset<D>& x, Powerset<D>& y);
+16535: 
+16535: 
+16535: 
+16535: template <typename D>
+16535: bool
+16535: operator==(const Powerset<D>& x, const Powerset<D>& y);
+16535: 
+16535: 
+16535: 
+16535: template <typename D>
+16535: bool
+16535: operator!=(const Powerset<D>& x, const Powerset<D>& y);
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: 
+16535: template <typename D>
+16535: std::ostream&
+16535: operator<<(std::ostream& s, const Powerset<D>& x);
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 151 "../../src/Powerset_defs.hh"
+16535: template <typename D>
+16535: class Parma_Polyhedra_Library::Powerset {
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Powerset();
+16535: 
+16535: 
+16535:   Powerset(const Powerset& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   explicit Powerset(const D& d);
+16535: 
+16535: 
+16535:   ~Powerset();
+16535: # 186 "../../src/Powerset_defs.hh"
+16535:   bool definitely_entails(const Powerset& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_top() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_bottom() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535: 
+16535:   bool OK(bool disallow_bottom = false) const;
+16535: 
+16535: 
+16535: 
+16535: protected:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef std::list<D> Sequence;
+16535: 
+16535: 
+16535:   typedef typename Sequence::iterator Sequence_iterator;
+16535: 
+16535: 
+16535:   typedef typename Sequence::const_iterator Sequence_const_iterator;
+16535: 
+16535: 
+16535:   Sequence sequence;
+16535: 
+16535: 
+16535:   mutable bool reduced;
+16535: 
+16535: public:
+16535: 
+16535:   typedef typename Sequence::size_type size_type;
+16535:   typedef typename Sequence::value_type value_type;
+16535: # 255 "../../src/Powerset_defs.hh"
+16535:   typedef iterator_to_const<Sequence> iterator;
+16535: 
+16535: 
+16535:   typedef const_iterator_to_const<Sequence> const_iterator;
+16535: 
+16535: 
+16535:   typedef std::reverse_iterator<iterator> reverse_iterator;
+16535: 
+16535: 
+16535:   typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+16535: # 277 "../../src/Powerset_defs.hh"
+16535:   void omega_reduce() const;
+16535: 
+16535: 
+16535:   size_type size() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool empty() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   iterator begin();
+16535: 
+16535: 
+16535:   iterator end();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const_iterator begin() const;
+16535: 
+16535: 
+16535:   const_iterator end() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   reverse_iterator rbegin();
+16535: 
+16535: 
+16535:   reverse_iterator rend();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   const_reverse_iterator rbegin() const;
+16535: 
+16535: 
+16535:   const_reverse_iterator rend() const;
+16535: 
+16535: 
+16535:   void add_disjunct(const D& d);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   iterator drop_disjunct(iterator position);
+16535: 
+16535: 
+16535:   void drop_disjuncts(iterator first, iterator last);
+16535: 
+16535: 
+16535:   void clear();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Powerset& operator=(const Powerset& y);
+16535: 
+16535: 
+16535:   void m_swap(Powerset& y);
+16535: 
+16535: 
+16535:   void least_upper_bound_assign(const Powerset& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void upper_bound_assign(const Powerset& y);
+16535: # 367 "../../src/Powerset_defs.hh"
+16535:   bool upper_bound_assign_if_exact(const Powerset& y);
+16535: 
+16535: 
+16535:   void meet_assign(const Powerset& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void collapse();
+16535: 
+16535: 
+16535: 
+16535: protected:
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_omega_reduced() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void collapse(unsigned max_disjuncts);
+16535: # 408 "../../src/Powerset_defs.hh"
+16535:   iterator add_non_bottom_disjunct_preserve_reduction(const D& d,
+16535:                                                       iterator first,
+16535:                                                       iterator last);
+16535: # 419 "../../src/Powerset_defs.hh"
+16535:   void add_non_bottom_disjunct_preserve_reduction(const D& d);
+16535: # 429 "../../src/Powerset_defs.hh"
+16535:   template <typename Binary_Operator_Assign>
+16535:   void pairwise_apply_assign(const Powerset& y,
+16535:                              Binary_Operator_Assign op_assign);
+16535: 
+16535: private:
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool check_omega_reduced() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void collapse(Sequence_iterator sink);
+16535: };
+16535: 
+16535: # 1 "../../src/Powerset_inlines.hh" 1
+16535: # 30 "../../src/Powerset_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename D>
+16535: inline typename Powerset<D>::iterator
+16535: Powerset<D>::begin() {
+16535:   return sequence.begin();
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline typename Powerset<D>::iterator
+16535: Powerset<D>::end() {
+16535:   return sequence.end();
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline typename Powerset<D>::const_iterator
+16535: Powerset<D>::begin() const {
+16535:   return sequence.begin();
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline typename Powerset<D>::const_iterator
+16535: Powerset<D>::end() const {
+16535:   return sequence.end();
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline typename Powerset<D>::reverse_iterator
+16535: Powerset<D>::rbegin() {
+16535:   return reverse_iterator(end());
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline typename Powerset<D>::reverse_iterator
+16535: Powerset<D>::rend() {
+16535:   return reverse_iterator(begin());
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline typename Powerset<D>::const_reverse_iterator
+16535: Powerset<D>::rbegin() const {
+16535:   return const_reverse_iterator(end());
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline typename Powerset<D>::const_reverse_iterator
+16535: Powerset<D>::rend() const {
+16535:   return const_reverse_iterator(begin());
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline typename Powerset<D>::size_type
+16535: Powerset<D>::size() const {
+16535:   return sequence.size();
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline bool
+16535: Powerset<D>::empty() const {
+16535:   return sequence.empty();
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline typename Powerset<D>::iterator
+16535: Powerset<D>::drop_disjunct(iterator position) {
+16535:   return sequence.erase(position.base);
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline void
+16535: Powerset<D>::drop_disjuncts(iterator first, iterator last) {
+16535:   sequence.erase(first.base, last.base);
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline void
+16535: Powerset<D>::clear() {
+16535:   sequence.clear();
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline
+16535: Powerset<D>::Powerset(const Powerset& y)
+16535:   : sequence(y.sequence), reduced(y.reduced) {
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline Powerset<D>&
+16535: Powerset<D>::operator=(const Powerset& y) {
+16535:   sequence = y.sequence;
+16535:   reduced = y.reduced;
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline void
+16535: Powerset<D>::m_swap(Powerset& y) {
+16535:   std::swap(sequence, y.sequence);
+16535:   std::swap(reduced, y.reduced);
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline
+16535: Powerset<D>::Powerset()
+16535:   : sequence(), reduced(true) {
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline
+16535: Powerset<D>::Powerset(const D& d)
+16535:   : sequence(), reduced(false) {
+16535:   sequence.push_back(d);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline
+16535: Powerset<D>::~Powerset() {
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline void
+16535: Powerset<D>::add_non_bottom_disjunct_preserve_reduction(const D& d) {
+16535: 
+16535:   add_non_bottom_disjunct_preserve_reduction(d, begin(), end());
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline void
+16535: Powerset<D>::add_disjunct(const D& d) {
+16535:   sequence.push_back(d);
+16535:   reduced = false;
+16535: }
+16535: 
+16535: 
+16535: template <typename D>
+16535: inline
+16535: bool operator!=(const Powerset<D>& x, const Powerset<D>& y) {
+16535:   return !(x == y);
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline bool
+16535: Powerset<D>::is_top() const {
+16535: 
+16535:   omega_reduce();
+16535:   const_iterator xi = begin();
+16535:   const_iterator x_end = end();
+16535:   return xi != x_end && xi->is_top() && ++xi == x_end;
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline bool
+16535: Powerset<D>::is_bottom() const {
+16535: 
+16535:   omega_reduce();
+16535:   return empty();
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline void
+16535: Powerset<D>::collapse() {
+16535:   if (!empty()) {
+16535:     collapse(sequence.begin());
+16535:   }
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline void
+16535: Powerset<D>::meet_assign(const Powerset& y) {
+16535:   pairwise_apply_assign(y, std::mem_fun_ref(&D::meet_assign));
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline void
+16535: Powerset<D>::upper_bound_assign(const Powerset& y) {
+16535:   least_upper_bound_assign(y);
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline bool
+16535: Powerset<D>::upper_bound_assign_if_exact(const Powerset& y) {
+16535:   least_upper_bound_assign(y);
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename D>
+16535: inline memory_size_type
+16535: Powerset<D>::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: 
+16535: template <typename D>
+16535: inline void
+16535: swap(Powerset<D>& x, Powerset<D>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 448 "../../src/Powerset_defs.hh" 2
+16535: # 1 "../../src/Powerset_templates.hh" 1
+16535: # 32 "../../src/Powerset_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename D>
+16535: void
+16535: Powerset<D>::collapse(const Sequence_iterator sink) {
+16535:   ((void) 0);
+16535:   D& d = *sink;
+16535:   iterator x_sink = sink;
+16535:   iterator next_x_sink = x_sink;
+16535:   ++next_x_sink;
+16535:   iterator x_end = end();
+16535:   for (const_iterator xi = next_x_sink; xi != x_end; ++xi) {
+16535:     d.upper_bound_assign(*xi);
+16535:   }
+16535: 
+16535:   drop_disjuncts(next_x_sink, x_end);
+16535: 
+16535: 
+16535:   for (iterator xi = begin(); xi != x_sink; ) {
+16535:     if (xi->definitely_entails(d)) {
+16535:       xi = drop_disjunct(xi);
+16535:     }
+16535:     else {
+16535:       ++xi;
+16535:     }
+16535:   }
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename D>
+16535: void
+16535: Powerset<D>::omega_reduce() const {
+16535:   if (reduced) {
+16535:     return;
+16535:   }
+16535:   Powerset& x = const_cast<Powerset&>(*this);
+16535: 
+16535:   for (iterator xi = x.begin(), x_end = x.end(); xi != x_end; ) {
+16535:     if (xi->is_bottom()) {
+16535:       xi = x.drop_disjunct(xi);
+16535:     }
+16535:     else {
+16535:       ++xi;
+16535:     }
+16535:   }
+16535: 
+16535:   for (iterator xi = x.begin(); xi != x.end(); ) {
+16535:     const D& xv = *xi;
+16535:     bool dropping_xi = false;
+16535:     for (iterator yi = x.begin(); yi != x.end(); ) {
+16535:       if (xi == yi) {
+16535:         ++yi;
+16535:       }
+16535:       else {
+16535:         const D& yv = *yi;
+16535:         if (yv.definitely_entails(xv)) {
+16535:           yi = x.drop_disjunct(yi);
+16535:         }
+16535:         else if (xv.definitely_entails(yv)) {
+16535:           dropping_xi = true;
+16535:           break;
+16535:         }
+16535:         else {
+16535:           ++yi;
+16535:         }
+16535:       }
+16535:     }
+16535:     if (dropping_xi) {
+16535:       xi = x.drop_disjunct(xi);
+16535:     }
+16535:     else {
+16535:       ++xi;
+16535:     }
+16535:     if (abandon_expensive_computations != 0 && xi != x.end()) {
+16535: 
+16535:       x.collapse(xi.base);
+16535:       break;
+16535:     }
+16535:   }
+16535:   reduced = true;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename D>
+16535: void
+16535: Powerset<D>::collapse(const unsigned max_disjuncts) {
+16535:   ((void) 0);
+16535: 
+16535:   omega_reduce();
+16535:   size_type n = size();
+16535:   if (n > max_disjuncts) {
+16535: 
+16535:     iterator i = begin();
+16535:     std::advance(i, max_disjuncts-1);
+16535: 
+16535: 
+16535:     collapse(i.base);
+16535:   }
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename D>
+16535: bool
+16535: Powerset<D>::check_omega_reduced() const {
+16535:   for (const_iterator x_begin = begin(), x_end = end(),
+16535:          xi = x_begin; xi != x_end; ++xi) {
+16535:     const D& xv = *xi;
+16535:     if (xv.is_bottom()) {
+16535:       return false;
+16535:     }
+16535:     for (const_iterator yi = x_begin; yi != x_end; ++yi) {
+16535:       if (xi == yi) {
+16535:         continue;
+16535:       }
+16535:       const D& yv = *yi;
+16535:       if (xv.definitely_entails(yv) || yv.definitely_entails(xv)) {
+16535:         return false;
+16535:       }
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename D>
+16535: bool
+16535: Powerset<D>::is_omega_reduced() const {
+16535:   if (!reduced && check_omega_reduced()) {
+16535:     reduced = true;
+16535:   }
+16535:   return reduced;
+16535: }
+16535: 
+16535: template <typename D>
+16535: typename Powerset<D>::iterator
+16535: Powerset<D>::add_non_bottom_disjunct_preserve_reduction(const D& d,
+16535:                                                         iterator first,
+16535:                                                         iterator last) {
+16535:   ((void) 0);
+16535:   for (iterator xi = first; xi != last; ) {
+16535:     const D& xv = *xi;
+16535:     if (d.definitely_entails(xv)) {
+16535:       return first;
+16535:     }
+16535:     else if (xv.definitely_entails(d)) {
+16535:       if (xi == first) {
+16535:         ++first;
+16535:       }
+16535:       xi = drop_disjunct(xi);
+16535:     }
+16535:     else {
+16535:       ++xi;
+16535:     }
+16535:   }
+16535:   sequence.push_back(d);
+16535:   ((void) 0);
+16535:   return first;
+16535: }
+16535: 
+16535: template <typename D>
+16535: bool
+16535: Powerset<D>::definitely_entails(const Powerset& y) const {
+16535:   const Powerset<D>& x = *this;
+16535:   bool found = true;
+16535:   for (const_iterator xi = x.begin(),
+16535:          x_end = x.end(); found && xi != x_end; ++xi) {
+16535:     found = false;
+16535:     for (const_iterator yi = y.begin(),
+16535:            y_end = y.end(); !found && yi != y_end; ++yi) {
+16535:       found = (*xi).definitely_entails(*yi);
+16535:     }
+16535:   }
+16535:   return found;
+16535: }
+16535: 
+16535: 
+16535: template <typename D>
+16535: bool
+16535: operator==(const Powerset<D>& x, const Powerset<D>& y) {
+16535:   x.omega_reduce();
+16535:   y.omega_reduce();
+16535:   if (x.size() != y.size()) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   Powerset<D> z = y;
+16535:   for (typename Powerset<D>::const_iterator xi = x.begin(),
+16535:          x_end = x.end(); xi != x_end; ++xi) {
+16535:     typename Powerset<D>::iterator zi = z.begin();
+16535:     typename Powerset<D>::iterator z_end = z.end();
+16535:     zi = std::find(zi, z_end, *xi);
+16535:     if (zi == z_end) {
+16535:       return false;
+16535:     }
+16535:     else {
+16535:       z.drop_disjunct(zi);
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename D>
+16535: template <typename Binary_Operator_Assign>
+16535: void
+16535: Powerset<D>::pairwise_apply_assign(const Powerset& y,
+16535:                                    Binary_Operator_Assign op_assign) {
+16535: 
+16535:   omega_reduce();
+16535:   y.omega_reduce();
+16535:   Sequence new_sequence;
+16535:   for (const_iterator xi = begin(), x_end = end(),
+16535:          y_begin = y.begin(), y_end = y.end(); xi != x_end; ++xi) {
+16535:     for (const_iterator yi = y_begin; yi != y_end; ++yi) {
+16535:       D zi = *xi;
+16535:       op_assign(zi, *yi);
+16535:       if (!zi.is_bottom()) {
+16535:         new_sequence.push_back(zi);
+16535:       }
+16535:     }
+16535:   }
+16535: 
+16535:   std::swap(sequence, new_sequence);
+16535:   reduced = false;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename D>
+16535: void
+16535: Powerset<D>::least_upper_bound_assign(const Powerset& y) {
+16535: 
+16535:   omega_reduce();
+16535:   y.omega_reduce();
+16535:   iterator old_begin = begin();
+16535:   iterator old_end = end();
+16535:   for (const_iterator i = y.begin(), y_end = y.end(); i != y_end; ++i) {
+16535:     old_begin = add_non_bottom_disjunct_preserve_reduction(*i,
+16535:                                                            old_begin,
+16535:                                                            old_end);
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: namespace IO_Operators {
+16535: 
+16535: 
+16535: template <typename D>
+16535: std::ostream&
+16535: operator<<(std::ostream& s, const Powerset<D>& x) {
+16535:   if (x.is_bottom()) {
+16535:     s << "false";
+16535:   }
+16535:   else if (x.is_top()) {
+16535:     s << "true";
+16535:   }
+16535:   else {
+16535:     for (typename Powerset<D>::const_iterator i = x.begin(),
+16535:            x_end = x.end(); i != x_end; ) {
+16535:       s << "{ " << *i << " }";
+16535:       ++i;
+16535:       if (i != x_end) {
+16535:         s << ", ";
+16535:       }
+16535:     }
+16535:   }
+16535:   return s;
+16535: }
+16535: 
+16535: }
+16535: 
+16535: template <typename D>
+16535: memory_size_type
+16535: Powerset<D>::external_memory_in_bytes() const {
+16535:   memory_size_type bytes = 0;
+16535:   for (const_iterator xi = begin(), x_end = end(); xi != x_end; ++xi) {
+16535:     bytes += xi->total_memory_in_bytes();
+16535: 
+16535: 
+16535: 
+16535:     bytes += 2*sizeof(D*);
+16535:   }
+16535:   return bytes;
+16535: }
+16535: 
+16535: template <typename D>
+16535: bool
+16535: Powerset<D>::OK(const bool disallow_bottom) const {
+16535:   for (const_iterator xi = begin(), x_end = end(); xi != x_end; ++xi) {
+16535:     if (!xi->OK()) {
+16535:       return false;
+16535:     }
+16535:     if (disallow_bottom && xi->is_bottom()) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       return false;
+16535:     }
+16535:   }
+16535:   if (reduced && !check_omega_reduced()) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     return false;
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: }
+16535: # 449 "../../src/Powerset_defs.hh" 2
+16535: # 42 "../../src/Pointset_Powerset_defs.hh" 2
+16535: # 60 "../../src/Pointset_Powerset_defs.hh"
+16535: template <typename PSET>
+16535: class Parma_Polyhedra_Library::Pointset_Powerset
+16535:   : public Parma_Polyhedra_Library::Powerset
+16535: <Parma_Polyhedra_Library::Determinate<PSET> > {
+16535: public:
+16535:   typedef PSET element_type;
+16535: 
+16535: private:
+16535:   typedef Determinate<PSET> Det_PSET;
+16535:   typedef Powerset<Det_PSET> Base;
+16535: 
+16535: public:
+16535: 
+16535:   static dimension_type max_space_dimension();
+16535: # 86 "../../src/Pointset_Powerset_defs.hh"
+16535:   explicit
+16535:   Pointset_Powerset(dimension_type num_dimensions = 0,
+16535:                     Degenerate_Element kind = UNIVERSE);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Pointset_Powerset(const Pointset_Powerset& y,
+16535:                     Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 107 "../../src/Pointset_Powerset_defs.hh"
+16535:   template <typename QH>
+16535:   explicit Pointset_Powerset(const Pointset_Powerset<QH>& y,
+16535:                              Complexity_Class complexity = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename QH1, typename QH2, typename R>
+16535:   explicit
+16535:   Pointset_Powerset(const Partially_Reduced_Product<QH1, QH2, R>& prp,
+16535:                     Complexity_Class complexity = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   explicit Pointset_Powerset(const Constraint_System& cs);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   explicit Pointset_Powerset(const Congruence_System& cgs);
+16535: # 152 "../../src/Pointset_Powerset_defs.hh"
+16535:   explicit Pointset_Powerset(const C_Polyhedron& ph,
+16535:                              Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 173 "../../src/Pointset_Powerset_defs.hh"
+16535:   explicit Pointset_Powerset(const NNC_Polyhedron& ph,
+16535:                              Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 193 "../../src/Pointset_Powerset_defs.hh"
+16535:   explicit Pointset_Powerset(const Grid& gr,
+16535:                              Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 213 "../../src/Pointset_Powerset_defs.hh"
+16535:   template <typename T>
+16535:   explicit Pointset_Powerset(const Octagonal_Shape<T>& os,
+16535:                              Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 234 "../../src/Pointset_Powerset_defs.hh"
+16535:   template <typename T>
+16535:   explicit Pointset_Powerset(const BD_Shape<T>& bds,
+16535:                              Complexity_Class complexity = ANY_COMPLEXITY);
+16535: # 254 "../../src/Pointset_Powerset_defs.hh"
+16535:   template <typename Interval>
+16535:   explicit Pointset_Powerset(const Box<Interval>& box,
+16535:                              Complexity_Class complexity = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   dimension_type space_dimension() const;
+16535: 
+16535: 
+16535:   dimension_type affine_dimension() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_empty() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_universe() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_topologically_closed() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_bounded() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_disjoint_from(const Pointset_Powerset& y) const;
+16535: 
+16535: 
+16535:   bool is_discrete() const;
+16535: # 323 "../../src/Pointset_Powerset_defs.hh"
+16535:   bool constrains(Variable var) const;
+16535: # 332 "../../src/Pointset_Powerset_defs.hh"
+16535:   bool bounds_from_above(const Linear_Expression& expr) const;
+16535: # 341 "../../src/Pointset_Powerset_defs.hh"
+16535:   bool bounds_from_below(const Linear_Expression& expr) const;
+16535: # 367 "../../src/Pointset_Powerset_defs.hh"
+16535:   bool maximize(const Linear_Expression& expr,
+16535:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum) const;
+16535: # 398 "../../src/Pointset_Powerset_defs.hh"
+16535:   bool maximize(const Linear_Expression& expr,
+16535:                 Coefficient& sup_n, Coefficient& sup_d, bool& maximum,
+16535:                 Generator& g) const;
+16535: # 426 "../../src/Pointset_Powerset_defs.hh"
+16535:   bool minimize(const Linear_Expression& expr,
+16535:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum) const;
+16535: # 458 "../../src/Pointset_Powerset_defs.hh"
+16535:   bool minimize(const Linear_Expression& expr,
+16535:                 Coefficient& inf_n, Coefficient& inf_d, bool& minimum,
+16535:                 Generator& g) const;
+16535: # 473 "../../src/Pointset_Powerset_defs.hh"
+16535:   bool geometrically_covers(const Pointset_Powerset& y) const;
+16535: # 486 "../../src/Pointset_Powerset_defs.hh"
+16535:   bool geometrically_equals(const Pointset_Powerset& y) const;
+16535: # 496 "../../src/Pointset_Powerset_defs.hh"
+16535:   bool contains(const Pointset_Powerset& y) const;
+16535: # 506 "../../src/Pointset_Powerset_defs.hh"
+16535:   bool strictly_contains(const Pointset_Powerset& y) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool contains_integer_point() const;
+16535: # 521 "../../src/Pointset_Powerset_defs.hh"
+16535:   Poly_Con_Relation relation_with(const Constraint& c) const;
+16535: # 530 "../../src/Pointset_Powerset_defs.hh"
+16535:   Poly_Gen_Relation relation_with(const Generator& g) const;
+16535: # 539 "../../src/Pointset_Powerset_defs.hh"
+16535:   Poly_Con_Relation relation_with(const Congruence& cg) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   int32_t hash_code() const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: # 574 "../../src/Pointset_Powerset_defs.hh"
+16535:   void add_disjunct(const PSET& ph);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void add_constraint(const Constraint& c);
+16535: # 593 "../../src/Pointset_Powerset_defs.hh"
+16535:   void refine_with_constraint(const Constraint& c);
+16535: # 604 "../../src/Pointset_Powerset_defs.hh"
+16535:   void add_constraints(const Constraint_System& cs);
+16535: # 615 "../../src/Pointset_Powerset_defs.hh"
+16535:   void refine_with_constraints(const Constraint_System& cs);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void add_congruence(const Congruence& cg);
+16535: # 634 "../../src/Pointset_Powerset_defs.hh"
+16535:   void refine_with_congruence(const Congruence& cg);
+16535: # 645 "../../src/Pointset_Powerset_defs.hh"
+16535:   void add_congruences(const Congruence_System& cgs);
+16535: # 656 "../../src/Pointset_Powerset_defs.hh"
+16535:   void refine_with_congruences(const Congruence_System& cgs);
+16535: # 668 "../../src/Pointset_Powerset_defs.hh"
+16535:   void unconstrain(Variable var);
+16535: # 682 "../../src/Pointset_Powerset_defs.hh"
+16535:   void unconstrain(const Variables_Set& vars);
+16535: # 695 "../../src/Pointset_Powerset_defs.hh"
+16535:   void drop_some_non_integer_points(Complexity_Class complexity
+16535:                                     = ANY_COMPLEXITY);
+16535: # 713 "../../src/Pointset_Powerset_defs.hh"
+16535:   void drop_some_non_integer_points(const Variables_Set& vars,
+16535:                                     Complexity_Class complexity
+16535:                                     = ANY_COMPLEXITY);
+16535: 
+16535: 
+16535:   void topological_closure_assign();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void intersection_assign(const Pointset_Powerset& y);
+16535: # 735 "../../src/Pointset_Powerset_defs.hh"
+16535:   void difference_assign(const Pointset_Powerset& y);
+16535: # 746 "../../src/Pointset_Powerset_defs.hh"
+16535:   bool simplify_using_context_assign(const Pointset_Powerset& y);
+16535: # 769 "../../src/Pointset_Powerset_defs.hh"
+16535:   void affine_image(Variable var,
+16535:                     const Linear_Expression& expr,
+16535:                     Coefficient_traits::const_reference denominator
+16535:                       = Coefficient_one());
+16535: # 795 "../../src/Pointset_Powerset_defs.hh"
+16535:   void affine_preimage(Variable var,
+16535:                     const Linear_Expression& expr,
+16535:                     Coefficient_traits::const_reference denominator
+16535:                       = Coefficient_one());
+16535: # 826 "../../src/Pointset_Powerset_defs.hh"
+16535:   void generalized_affine_image(Variable var,
+16535:                                 Relation_Symbol relsym,
+16535:                                 const Linear_Expression& expr,
+16535:                                 Coefficient_traits::const_reference denominator
+16535:                                   = Coefficient_one());
+16535: # 858 "../../src/Pointset_Powerset_defs.hh"
+16535:   void
+16535:   generalized_affine_preimage(Variable var,
+16535:                               Relation_Symbol relsym,
+16535:                               const Linear_Expression& expr,
+16535:                               Coefficient_traits::const_reference denominator
+16535:                               = Coefficient_one());
+16535: # 885 "../../src/Pointset_Powerset_defs.hh"
+16535:   void generalized_affine_image(const Linear_Expression& lhs,
+16535:                                 Relation_Symbol relsym,
+16535:                                 const Linear_Expression& rhs);
+16535: # 909 "../../src/Pointset_Powerset_defs.hh"
+16535:   void generalized_affine_preimage(const Linear_Expression& lhs,
+16535:                                    Relation_Symbol relsym,
+16535:                                    const Linear_Expression& rhs);
+16535: # 939 "../../src/Pointset_Powerset_defs.hh"
+16535:   void bounded_affine_image(Variable var,
+16535:                             const Linear_Expression& lb_expr,
+16535:                             const Linear_Expression& ub_expr,
+16535:                             Coefficient_traits::const_reference denominator
+16535:                             = Coefficient_one());
+16535: # 971 "../../src/Pointset_Powerset_defs.hh"
+16535:   void bounded_affine_preimage(Variable var,
+16535:                                const Linear_Expression& lb_expr,
+16535:                                const Linear_Expression& ub_expr,
+16535:                                Coefficient_traits::const_reference denominator
+16535:                                = Coefficient_one());
+16535: # 985 "../../src/Pointset_Powerset_defs.hh"
+16535:   void time_elapse_assign(const Pointset_Powerset& y);
+16535: # 1033 "../../src/Pointset_Powerset_defs.hh"
+16535:   void wrap_assign(const Variables_Set& vars,
+16535:                    Bounded_Integer_Type_Width w,
+16535:                    Bounded_Integer_Type_Representation r,
+16535:                    Bounded_Integer_Type_Overflow o,
+16535:                    const Constraint_System* cs_p = 0,
+16535:                    unsigned complexity_threshold = 16,
+16535:                    bool wrap_individually = true);
+16535: # 1049 "../../src/Pointset_Powerset_defs.hh"
+16535:   void pairwise_reduce();
+16535: # 1078 "../../src/Pointset_Powerset_defs.hh"
+16535:   template <typename Widening>
+16535:   void BGP99_extrapolation_assign(const Pointset_Powerset& y,
+16535:                                   Widening widen_fun,
+16535:                                   unsigned max_disjuncts);
+16535: # 1111 "../../src/Pointset_Powerset_defs.hh"
+16535:   template <typename Cert, typename Widening>
+16535:   void BHZ03_widening_assign(const Pointset_Powerset& y, Widening widen_fun);
+16535: # 1123 "../../src/Pointset_Powerset_defs.hh"
+16535:   Pointset_Powerset& operator=(const Pointset_Powerset& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename QH>
+16535:   Pointset_Powerset& operator=(const Pointset_Powerset<QH>& y);
+16535: 
+16535: 
+16535:   void m_swap(Pointset_Powerset& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void add_space_dimensions_and_embed(dimension_type m);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void add_space_dimensions_and_project(dimension_type m);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   void concatenate_assign(const Pointset_Powerset& y);
+16535: # 1166 "../../src/Pointset_Powerset_defs.hh"
+16535:   void remove_space_dimensions(const Variables_Set& vars);
+16535: # 1176 "../../src/Pointset_Powerset_defs.hh"
+16535:   void remove_higher_space_dimensions(dimension_type new_dimension);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename Partial_Function>
+16535:   void map_space_dimensions(const Partial_Function& pfunc);
+16535: # 1210 "../../src/Pointset_Powerset_defs.hh"
+16535:   void expand_space_dimension(Variable var, dimension_type m);
+16535: # 1236 "../../src/Pointset_Powerset_defs.hh"
+16535:   void fold_space_dimensions(const Variables_Set& vars, Variable dest);
+16535: 
+16535: 
+16535: 
+16535: public:
+16535:   typedef typename Base::size_type size_type;
+16535:   typedef typename Base::value_type value_type;
+16535:   typedef typename Base::iterator iterator;
+16535:   typedef typename Base::const_iterator const_iterator;
+16535:   typedef typename Base::reverse_iterator reverse_iterator;
+16535:   typedef typename Base::const_reverse_iterator const_reverse_iterator;
+16535: 
+16535:   void ascii_dump() const; void ascii_dump(std::ostream& s) const; void print() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ascii_load(std::istream& s);
+16535: 
+16535: private:
+16535:   typedef typename Base::Sequence Sequence;
+16535:   typedef typename Base::Sequence_iterator Sequence_iterator;
+16535:   typedef typename Base::Sequence_const_iterator Sequence_const_iterator;
+16535: 
+16535: 
+16535:   dimension_type space_dim;
+16535: # 1274 "../../src/Pointset_Powerset_defs.hh"
+16535:   bool intersection_preserving_enlarge_element(PSET& dest) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename Widening>
+16535:   void BGP99_heuristics_assign(const Pointset_Powerset& y, Widening widen_fun);
+16535: 
+16535: 
+16535:   template <typename Cert>
+16535:   void collect_certificates(std::map<Cert, size_type,
+16535:                                      typename Cert::Compare>& cert_ms) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename Cert>
+16535:   bool is_cert_multiset_stabilizing(const std::map<Cert, size_type,
+16535:                                                    typename Cert::Compare>&
+16535:                                     y_cert_ms) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template <typename Cons_or_Congr>
+16535:   Poly_Con_Relation relation_with_aux(const Cons_or_Congr& c) const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   friend class Pointset_Powerset<NNC_Polyhedron>;
+16535: };
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: template <typename PSET>
+16535: void swap(Pointset_Powerset<PSET>& x, Pointset_Powerset<PSET>& y);
+16535: # 1338 "../../src/Pointset_Powerset_defs.hh"
+16535: template <typename PSET>
+16535: std::pair<PSET, Pointset_Powerset<NNC_Polyhedron> >
+16535: linear_partition(const PSET& p, const PSET& q);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: bool
+16535: check_containment(const NNC_Polyhedron& ph,
+16535:                   const Pointset_Powerset<NNC_Polyhedron>& ps);
+16535: # 1374 "../../src/Pointset_Powerset_defs.hh"
+16535: std::pair<Grid, Pointset_Powerset<Grid> >
+16535: approximate_partition(const Grid& p, const Grid& q, bool& finite_partition);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: bool
+16535: check_containment(const Grid& ph,
+16535:                   const Pointset_Powerset<Grid>& ps);
+16535: # 1397 "../../src/Pointset_Powerset_defs.hh"
+16535: template <typename PSET>
+16535: bool
+16535: check_containment(const PSET& ph, const Pointset_Powerset<PSET>& ps);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <>
+16535: template <typename QH>
+16535: Pointset_Powerset<NNC_Polyhedron>
+16535: ::Pointset_Powerset(const Pointset_Powerset<QH>& y,
+16535:                     Complexity_Class);
+16535: 
+16535: 
+16535: 
+16535: template <>
+16535: template <>
+16535: Pointset_Powerset<NNC_Polyhedron>
+16535: ::Pointset_Powerset(const Pointset_Powerset<C_Polyhedron>& y,
+16535:                     Complexity_Class);
+16535: 
+16535: template <>
+16535: template <>
+16535: Pointset_Powerset<NNC_Polyhedron>
+16535: ::Pointset_Powerset(const Pointset_Powerset<Grid>& y,
+16535:                     Complexity_Class);
+16535: 
+16535: template <>
+16535: template <>
+16535: Pointset_Powerset<C_Polyhedron>
+16535: ::Pointset_Powerset(const Pointset_Powerset<NNC_Polyhedron>& y,
+16535:                     Complexity_Class);
+16535: 
+16535: template <>
+16535: void
+16535: Pointset_Powerset<NNC_Polyhedron>
+16535: ::difference_assign(const Pointset_Powerset& y);
+16535: 
+16535: template <>
+16535: void
+16535: Pointset_Powerset<Grid>
+16535: ::difference_assign(const Pointset_Powerset& y);
+16535: 
+16535: template <>
+16535: bool
+16535: Pointset_Powerset<NNC_Polyhedron>
+16535: ::geometrically_covers(const Pointset_Powerset& y) const;
+16535: 
+16535: template <>
+16535: bool
+16535: Pointset_Powerset<Grid>
+16535: ::geometrically_covers(const Pointset_Powerset& y) const;
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Pointset_Powerset_inlines.hh" 1
+16535: # 38 "../../src/Pointset_Powerset_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename PSET>
+16535: inline dimension_type
+16535: Pointset_Powerset<PSET>::space_dimension() const {
+16535:   return space_dim;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline dimension_type
+16535: Pointset_Powerset<PSET>::max_space_dimension() {
+16535:   return PSET::max_space_dimension();
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline
+16535: Pointset_Powerset<PSET>::Pointset_Powerset(dimension_type num_dimensions,
+16535:                                            Degenerate_Element kind)
+16535:   : Base(), space_dim(num_dimensions) {
+16535:   Pointset_Powerset& x = *this;
+16535:   if (kind == UNIVERSE) {
+16535:     x.sequence.push_back(Determinate<PSET>(PSET(num_dimensions, kind)));
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline
+16535: Pointset_Powerset<PSET>::Pointset_Powerset(const Pointset_Powerset& y,
+16535:                                            Complexity_Class)
+16535:   : Base(y), space_dim(y.space_dim) {
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline
+16535: Pointset_Powerset<PSET>::Pointset_Powerset(const C_Polyhedron& ph,
+16535:                                            Complexity_Class complexity)
+16535:   : Base(), space_dim(ph.space_dimension()) {
+16535:   Pointset_Powerset& x = *this;
+16535:   if (complexity == ANY_COMPLEXITY) {
+16535:     if (ph.is_empty()) {
+16535:       return;
+16535:     }
+16535:   }
+16535:   else {
+16535:     x.reduced = false;
+16535:   }
+16535:   x.sequence.push_back(Determinate<PSET>(PSET(ph, complexity)));
+16535:   x.reduced = false;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline
+16535: Pointset_Powerset<PSET>::Pointset_Powerset(const NNC_Polyhedron& ph,
+16535:                                            Complexity_Class complexity)
+16535:   : Base(), space_dim(ph.space_dimension()) {
+16535:   Pointset_Powerset& x = *this;
+16535:   if (complexity == ANY_COMPLEXITY) {
+16535:     if (ph.is_empty()) {
+16535:       return;
+16535:     }
+16535:   }
+16535:   else {
+16535:     x.reduced = false;
+16535:   }
+16535:   x.sequence.push_back(Determinate<PSET>(PSET(ph, complexity)));
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline
+16535: Pointset_Powerset<PSET>::Pointset_Powerset(const Grid& gr,
+16535:                                            Complexity_Class)
+16535:   : Base(), space_dim(gr.space_dimension()) {
+16535:   Pointset_Powerset& x = *this;
+16535:   if (!gr.is_empty()) {
+16535:     x.sequence.push_back(Determinate<PSET>(PSET(gr)));
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: template <typename QH1, typename QH2, typename R>
+16535: inline
+16535: Pointset_Powerset<PSET>
+16535: ::Pointset_Powerset(const Partially_Reduced_Product<QH1, QH2, R>& prp,
+16535:                     Complexity_Class complexity)
+16535:   : Base(), space_dim(prp.space_dimension()) {
+16535:   Pointset_Powerset& x = *this;
+16535:   if (complexity == ANY_COMPLEXITY) {
+16535:     if (prp.is_empty()) {
+16535:       return;
+16535:     }
+16535:   }
+16535:   else {
+16535:     x.reduced = false;
+16535:   }
+16535:   x.sequence.push_back(Determinate<PSET>(PSET(prp, complexity)));
+16535:   x.reduced = false;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: template <typename Interval>
+16535: Pointset_Powerset<PSET>::Pointset_Powerset(const Box<Interval>& box,
+16535:                                            Complexity_Class)
+16535:   : Base(), space_dim(box.space_dimension()) {
+16535:   Pointset_Powerset& x = *this;
+16535:   if (!box.is_empty()) {
+16535:     x.sequence.push_back(Determinate<PSET>(PSET(box)));
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: template <typename T>
+16535: Pointset_Powerset<PSET>::Pointset_Powerset(const Octagonal_Shape<T>& os,
+16535:                                            Complexity_Class)
+16535:   : Base(), space_dim(os.space_dimension()) {
+16535:   Pointset_Powerset& x = *this;
+16535:   if (!os.is_empty()) {
+16535:     x.sequence.push_back(Determinate<PSET>(PSET(os)));
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: template <typename T>
+16535: Pointset_Powerset<PSET>::Pointset_Powerset(const BD_Shape<T>& bds,
+16535:                                            Complexity_Class)
+16535:   : Base(), space_dim(bds.space_dimension()) {
+16535:   Pointset_Powerset& x = *this;
+16535:   if (!bds.is_empty()) {
+16535:     x.sequence.push_back(Determinate<PSET>(PSET(bds)));
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline
+16535: Pointset_Powerset<PSET>::Pointset_Powerset(const Constraint_System& cs)
+16535:   : Base(Determinate<PSET>(cs)), space_dim(cs.space_dimension()) {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline
+16535: Pointset_Powerset<PSET>::Pointset_Powerset(const Congruence_System& cgs)
+16535:   : Base(Determinate<PSET>(cgs)), space_dim(cgs.space_dimension()) {
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline Pointset_Powerset<PSET>&
+16535: Pointset_Powerset<PSET>::operator=(const Pointset_Powerset& y) {
+16535:   Pointset_Powerset& x = *this;
+16535:   x.Base::operator=(y);
+16535:   x.space_dim = y.space_dim;
+16535:   return x;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline void
+16535: Pointset_Powerset<PSET>::m_swap(Pointset_Powerset& y) {
+16535:   Pointset_Powerset& x = *this;
+16535:   x.Base::m_swap(y);
+16535:   using std::swap;
+16535:   swap(x.space_dim, y.space_dim);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: template <typename QH>
+16535: inline Pointset_Powerset<PSET>&
+16535: Pointset_Powerset<PSET>::operator=(const Pointset_Powerset<QH>& y) {
+16535:   Pointset_Powerset& x = *this;
+16535:   Pointset_Powerset<PSET> ps(y);
+16535:   swap(x, ps);
+16535:   return x;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline void
+16535: Pointset_Powerset<PSET>::intersection_assign(const Pointset_Powerset& y) {
+16535:   Pointset_Powerset& x = *this;
+16535:   x.pairwise_apply_assign(y,
+16535:                           Det_PSET::lift_op_assign(std::mem_fun_ref(&PSET::intersection_assign)));
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline void
+16535: Pointset_Powerset<PSET>::time_elapse_assign(const Pointset_Powerset& y) {
+16535:   Pointset_Powerset& x = *this;
+16535:   x.pairwise_apply_assign(y,
+16535:                           Det_PSET::lift_op_assign(std::mem_fun_ref(&PSET::time_elapse_assign)));
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline Poly_Con_Relation
+16535: Pointset_Powerset<PSET>::relation_with(const Constraint& c) const {
+16535:   return relation_with_aux(c);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline Poly_Con_Relation
+16535: Pointset_Powerset<PSET>::relation_with(const Congruence& cg) const {
+16535:   return relation_with_aux(cg);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline bool
+16535: Pointset_Powerset<PSET>
+16535: ::geometrically_covers(const Pointset_Powerset& y) const {
+16535: 
+16535:   const Pointset_Powerset<NNC_Polyhedron> xx(*this);
+16535:   const Pointset_Powerset<NNC_Polyhedron> yy(y);
+16535:   return xx.geometrically_covers(yy);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline bool
+16535: Pointset_Powerset<PSET>
+16535: ::geometrically_equals(const Pointset_Powerset& y) const {
+16535: 
+16535:   const Pointset_Powerset<NNC_Polyhedron> xx(*this);
+16535:   const Pointset_Powerset<NNC_Polyhedron> yy(y);
+16535:   return xx.geometrically_covers(yy) && yy.geometrically_covers(xx);
+16535: }
+16535: 
+16535: template <>
+16535: inline bool
+16535: Pointset_Powerset<Grid>
+16535: ::geometrically_equals(const Pointset_Powerset& y) const {
+16535:   const Pointset_Powerset& x = *this;
+16535:   return x.geometrically_covers(y) && y.geometrically_covers(x);
+16535: }
+16535: 
+16535: template <>
+16535: inline bool
+16535: Pointset_Powerset<NNC_Polyhedron>
+16535: ::geometrically_equals(const Pointset_Powerset& y) const {
+16535:   const Pointset_Powerset& x = *this;
+16535:   return x.geometrically_covers(y) && y.geometrically_covers(x);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline memory_size_type
+16535: Pointset_Powerset<PSET>::external_memory_in_bytes() const {
+16535:   return Base::external_memory_in_bytes();
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline memory_size_type
+16535: Pointset_Powerset<PSET>::total_memory_in_bytes() const {
+16535:   return sizeof(*this) + external_memory_in_bytes();
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline int32_t
+16535: Pointset_Powerset<PSET>::hash_code() const {
+16535:   return hash_code_from_dimension(space_dimension());
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: inline void
+16535: Pointset_Powerset<PSET>
+16535: ::difference_assign(const Pointset_Powerset& y) {
+16535: 
+16535:   Pointset_Powerset<NNC_Polyhedron> nnc_this(*this);
+16535:   Pointset_Powerset<NNC_Polyhedron> nnc_y(y);
+16535:   nnc_this.difference_assign(nnc_y);
+16535:   *this = nnc_this;
+16535: }
+16535: 
+16535: 
+16535: template <typename PSET>
+16535: inline bool
+16535: check_containment(const PSET& ph, const Pointset_Powerset<PSET>& ps) {
+16535: 
+16535:   const NNC_Polyhedron ph_nnc = NNC_Polyhedron(ph.constraints());
+16535:   const Pointset_Powerset<NNC_Polyhedron> ps_nnc(ps);
+16535:   return check_containment(ph_nnc, ps_nnc);
+16535: }
+16535: 
+16535: 
+16535: template <>
+16535: inline bool
+16535: check_containment(const C_Polyhedron& ph,
+16535:                   const Pointset_Powerset<C_Polyhedron>& ps) {
+16535:   return check_containment(NNC_Polyhedron(ph),
+16535:                            Pointset_Powerset<NNC_Polyhedron>(ps));
+16535: }
+16535: 
+16535: 
+16535: template <typename PSET>
+16535: inline void
+16535: swap(Pointset_Powerset<PSET>& x, Pointset_Powerset<PSET>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 1454 "../../src/Pointset_Powerset_defs.hh" 2
+16535: # 1 "../../src/Pointset_Powerset_templates.hh" 1
+16535: # 40 "../../src/Pointset_Powerset_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>::add_disjunct(const PSET& ph) {
+16535:   Pointset_Powerset& x = *this;
+16535:   if (x.space_dimension() != ph.space_dimension()) {
+16535:     std::ostringstream s;
+16535:     s << "PPL::Pointset_Powerset<PSET>::add_disjunct(ph):\n"
+16535:       << "this->space_dimension() == " << x.space_dimension() << ", "
+16535:       << "ph.space_dimension() == " << ph.space_dimension() << ".";
+16535:     throw std::invalid_argument(s.str());
+16535:   }
+16535:   x.sequence.push_back(Determinate<PSET>(ph));
+16535:   x.reduced = false;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <>
+16535: template <typename QH>
+16535: Pointset_Powerset<NNC_Polyhedron>
+16535: ::Pointset_Powerset(const Pointset_Powerset<QH>& y,
+16535:                     Complexity_Class complexity)
+16535:   : Base(), space_dim(y.space_dimension()) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (typename Pointset_Powerset<QH>::const_iterator i = y.begin(),
+16535:          y_end = y.end(); i != y_end; ++i) {
+16535:     x.sequence.push_back(Determinate<NNC_Polyhedron>
+16535:                          (NNC_Polyhedron(i->pointset(), complexity)));
+16535: 
+16535:   }
+16535: # 80 "../../src/Pointset_Powerset_templates.hh"
+16535:   x.reduced = y.reduced;
+16535: 
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: template <typename QH>
+16535: Pointset_Powerset<PSET>
+16535: ::Pointset_Powerset(const Pointset_Powerset<QH>& y,
+16535:                     Complexity_Class complexity)
+16535:   : Base(), space_dim(y.space_dimension()) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (typename Pointset_Powerset<QH>::const_iterator i = y.begin(),
+16535:          y_end = y.end(); i != y_end; ++i) {
+16535:     x.sequence.push_back(Determinate<PSET>(PSET(i->pointset(), complexity)));
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   x.reduced = false;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>::concatenate_assign(const Pointset_Powerset& y) {
+16535:   Pointset_Powerset& x = *this;
+16535: 
+16535:   x.omega_reduce();
+16535:   y.omega_reduce();
+16535:   Pointset_Powerset<PSET> new_x(x.space_dim + y.space_dim, EMPTY);
+16535:   for (const_iterator xi = x.begin(), x_end = x.end(),
+16535:          y_begin = y.begin(), y_end = y.end(); xi != x_end; ) {
+16535:     for (const_iterator yi = y_begin; yi != y_end; ++yi) {
+16535:       Det_PSET zi = *xi;
+16535:       zi.concatenate_assign(*yi);
+16535:       ((void) 0);
+16535:       new_x.sequence.push_back(zi);
+16535:     }
+16535:     ++xi;
+16535:     if ((abandon_expensive_computations != 0)
+16535:         && (xi != x_end) && (y_begin != y_end)) {
+16535: 
+16535:       PSET x_ph = xi->pointset();
+16535:       for (++xi; xi != x_end; ++xi) {
+16535:         x_ph.upper_bound_assign(xi->pointset());
+16535:       }
+16535:       const_iterator yi = y_begin;
+16535:       PSET y_ph = yi->pointset();
+16535:       for (++yi; yi != y_end; ++yi) {
+16535:         y_ph.upper_bound_assign(yi->pointset());
+16535:       }
+16535:       x_ph.concatenate_assign(y_ph);
+16535:       swap(x, new_x);
+16535:       x.add_disjunct(x_ph);
+16535:       ((void) 0);
+16535:       return;
+16535:     }
+16535:   }
+16535:   swap(x, new_x);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>::add_constraint(const Constraint& c) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().add_constraint(c);
+16535:   }
+16535:   x.reduced = false;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>::refine_with_constraint(const Constraint& c) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().refine_with_constraint(c);
+16535:   }
+16535:   x.reduced = false;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>::add_constraints(const Constraint_System& cs) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().add_constraints(cs);
+16535:   }
+16535:   x.reduced = false;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>::refine_with_constraints(const Constraint_System& cs) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().refine_with_constraints(cs);
+16535:   }
+16535:   x.reduced = false;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>::add_congruence(const Congruence& cg) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().add_congruence(cg);
+16535:   }
+16535:   x.reduced = false;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>::refine_with_congruence(const Congruence& cg) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().refine_with_congruence(cg);
+16535:   }
+16535:   x.reduced = false;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>::add_congruences(const Congruence_System& cgs) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().add_congruences(cgs);
+16535:   }
+16535:   x.reduced = false;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>::refine_with_congruences(const Congruence_System& cgs) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().refine_with_congruences(cgs);
+16535:   }
+16535:   x.reduced = false;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>::unconstrain(const Variable var) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().unconstrain(var);
+16535:     x.reduced = false;
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>::unconstrain(const Variables_Set& vars) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().unconstrain(vars);
+16535:     x.reduced = false;
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>::add_space_dimensions_and_embed(dimension_type m) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().add_space_dimensions_and_embed(m);
+16535:   }
+16535:   x.space_dim += m;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>::add_space_dimensions_and_project(dimension_type m) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().add_space_dimensions_and_project(m);
+16535:   }
+16535:   x.space_dim += m;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>::remove_space_dimensions(const Variables_Set& vars) {
+16535:   Pointset_Powerset& x = *this;
+16535:   Variables_Set::size_type num_removed = vars.size();
+16535:   if (num_removed > 0) {
+16535:     for (Sequence_iterator si = x.sequence.begin(),
+16535:            s_end = x.sequence.end(); si != s_end; ++si) {
+16535:       si->pointset().remove_space_dimensions(vars);
+16535:       x.reduced = false;
+16535:     }
+16535:     x.space_dim -= num_removed;
+16535:     ((void) 0);
+16535:   }
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>
+16535: ::remove_higher_space_dimensions(dimension_type new_dimension) {
+16535:   Pointset_Powerset& x = *this;
+16535:   if (new_dimension < x.space_dim) {
+16535:     for (Sequence_iterator si = x.sequence.begin(),
+16535:            s_end = x.sequence.end(); si != s_end; ++si) {
+16535:       si->pointset().remove_higher_space_dimensions(new_dimension);
+16535:       x.reduced = false;
+16535:     }
+16535:     x.space_dim = new_dimension;
+16535:     ((void) 0);
+16535:   }
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: template <typename Partial_Function>
+16535: void
+16535: Pointset_Powerset<PSET>::map_space_dimensions(const Partial_Function& pfunc) {
+16535:   Pointset_Powerset& x = *this;
+16535:   if (x.is_bottom()) {
+16535:     dimension_type n = 0;
+16535:     for (dimension_type i = x.space_dim; i-- > 0; ) {
+16535:       dimension_type new_i;
+16535:       if (pfunc.maps(i, new_i)) {
+16535:         ++n;
+16535:       }
+16535:     }
+16535:     x.space_dim = n;
+16535:   }
+16535:   else {
+16535:     Sequence_iterator s_begin = x.sequence.begin();
+16535:     for (Sequence_iterator si = s_begin,
+16535:            s_end = x.sequence.end(); si != s_end; ++si) {
+16535:       si->pointset().map_space_dimensions(pfunc);
+16535:     }
+16535:     x.space_dim = s_begin->pointset().space_dimension();
+16535:     x.reduced = false;
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>::expand_space_dimension(Variable var,
+16535:                                                 dimension_type m) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().expand_space_dimension(var, m);
+16535:   }
+16535:   x.space_dim += m;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>::fold_space_dimensions(const Variables_Set& vars,
+16535:                                                Variable dest) {
+16535:   Pointset_Powerset& x = *this;
+16535:   Variables_Set::size_type num_folded = vars.size();
+16535:   if (num_folded > 0) {
+16535:     for (Sequence_iterator si = x.sequence.begin(),
+16535:            s_end = x.sequence.end(); si != s_end; ++si) {
+16535:       si->pointset().fold_space_dimensions(vars, dest);
+16535:     }
+16535:   }
+16535:   x.space_dim -= num_folded;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>::affine_image(Variable var,
+16535:                                       const Linear_Expression& expr,
+16535:                                       Coefficient_traits::const_reference
+16535:                                       denominator) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().affine_image(var, expr, denominator);
+16535: 
+16535: 
+16535: 
+16535:     x.reduced = false;
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>::affine_preimage(Variable var,
+16535:                                          const Linear_Expression& expr,
+16535:                                          Coefficient_traits::const_reference
+16535:                                          denominator) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().affine_preimage(var, expr, denominator);
+16535: 
+16535: 
+16535: 
+16535:     x.reduced = false;
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>
+16535: ::generalized_affine_image(const Linear_Expression& lhs,
+16535:                            const Relation_Symbol relsym,
+16535:                            const Linear_Expression& rhs) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().generalized_affine_image(lhs, relsym, rhs);
+16535:     x.reduced = false;
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>
+16535: ::generalized_affine_preimage(const Linear_Expression& lhs,
+16535:                               const Relation_Symbol relsym,
+16535:                               const Linear_Expression& rhs) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().generalized_affine_preimage(lhs, relsym, rhs);
+16535:     x.reduced = false;
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>
+16535: ::generalized_affine_image(Variable var,
+16535:                            const Relation_Symbol relsym,
+16535:                            const Linear_Expression& expr,
+16535:                            Coefficient_traits::const_reference denominator) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().generalized_affine_image(var, relsym, expr, denominator);
+16535:     x.reduced = false;
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>
+16535: ::generalized_affine_preimage(Variable var,
+16535:                               const Relation_Symbol relsym,
+16535:                               const Linear_Expression& expr,
+16535:                               Coefficient_traits::const_reference
+16535:                               denominator) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().generalized_affine_preimage(var, relsym, expr, denominator);
+16535:     x.reduced = false;
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>
+16535: ::bounded_affine_image(Variable var,
+16535:                        const Linear_Expression& lb_expr,
+16535:                        const Linear_Expression& ub_expr,
+16535:                        Coefficient_traits::const_reference denominator) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().bounded_affine_image(var, lb_expr, ub_expr, denominator);
+16535:     x.reduced = false;
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>
+16535: ::bounded_affine_preimage(Variable var,
+16535:                           const Linear_Expression& lb_expr,
+16535:                           const Linear_Expression& ub_expr,
+16535:                           Coefficient_traits::const_reference denominator) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().bounded_affine_preimage(var, lb_expr, ub_expr,
+16535:                                           denominator);
+16535:     x.reduced = false;
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: dimension_type
+16535: Pointset_Powerset<PSET>::affine_dimension() const {
+16535: 
+16535: 
+16535:   const Pointset_Powerset& x = *this;
+16535:   C_Polyhedron x_ph(space_dim, EMPTY);
+16535: 
+16535:   for (Sequence_const_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     PSET pi(si->pointset());
+16535:     if (!pi.is_empty()) {
+16535:       C_Polyhedron phi(space_dim);
+16535:       const Constraint_System& cs = pi.minimized_constraints();
+16535:       for (Constraint_System::const_iterator i = cs.begin(),
+16535:              cs_end = cs.end(); i != cs_end; ++i) {
+16535:         const Constraint& c = *i;
+16535:         if (c.is_equality()) {
+16535:           phi.add_constraint(c);
+16535:         }
+16535:       }
+16535:       x_ph.poly_hull_assign(phi);
+16535:     }
+16535:   }
+16535: 
+16535:   return x_ph.affine_dimension();
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: Pointset_Powerset<PSET>::is_universe() const {
+16535:   const Pointset_Powerset& x = *this;
+16535: 
+16535:   if (x.is_omega_reduced()) {
+16535:     return x.size() == 1 && x.begin()->pointset().is_universe();
+16535:   }
+16535: 
+16535: 
+16535:   for (const_iterator x_i = x.begin(), x_end = x.end();
+16535:        x_i != x_end; ++x_i) {
+16535:     if (x_i->pointset().is_universe()) {
+16535: 
+16535:       if (x.size() > 1) {
+16535:         Pointset_Powerset<PSET> universe(x.space_dimension(), UNIVERSE);
+16535:         Pointset_Powerset& xx = const_cast<Pointset_Powerset&>(x);
+16535:         swap(xx, universe);
+16535:       }
+16535:       return true;
+16535:     }
+16535:   }
+16535:   return false;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: Pointset_Powerset<PSET>::is_empty() const {
+16535:   const Pointset_Powerset& x = *this;
+16535:   for (Sequence_const_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     if (!si->pointset().is_empty()) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: Pointset_Powerset<PSET>::is_discrete() const {
+16535:   const Pointset_Powerset& x = *this;
+16535:   for (Sequence_const_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     if (!si->pointset().is_discrete()) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: Pointset_Powerset<PSET>::is_topologically_closed() const {
+16535:   const Pointset_Powerset& x = *this;
+16535: 
+16535: 
+16535:   x.omega_reduce();
+16535:   for (Sequence_const_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     if (!si->pointset().is_topologically_closed()) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: Pointset_Powerset<PSET>::is_bounded() const {
+16535:   const Pointset_Powerset& x = *this;
+16535:   for (Sequence_const_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     if (!si->pointset().is_bounded()) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: Pointset_Powerset<PSET>::constrains(Variable var) const {
+16535:   const Pointset_Powerset& x = *this;
+16535: 
+16535:   const dimension_type var_space_dim = var.space_dimension();
+16535:   if (x.space_dimension() < var_space_dim) {
+16535:     std::ostringstream s;
+16535:     s << "PPL::Pointset_Powerset<PSET>::constrains(v):\n"
+16535:       << "this->space_dimension() == " << x.space_dimension() << ", "
+16535:       << "v.space_dimension() == " << var_space_dim << ".";
+16535:     throw std::invalid_argument(s.str());
+16535:   }
+16535: 
+16535:   x.omega_reduce();
+16535: 
+16535:   if (x.is_empty()) {
+16535:     return true;
+16535:   }
+16535:   for (const_iterator x_i = x.begin(), x_end = x.end();
+16535:        x_i != x_end; ++x_i) {
+16535:     if (x_i->pointset().constrains(var)) {
+16535:       return true;
+16535:     }
+16535:   }
+16535:   return false;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: Pointset_Powerset<PSET>::is_disjoint_from(const Pointset_Powerset& y) const {
+16535:   const Pointset_Powerset& x = *this;
+16535:   for (Sequence_const_iterator si = x.sequence.begin(),
+16535:          x_s_end = x.sequence.end(); si != x_s_end; ++si) {
+16535:     const PSET& pi = si->pointset();
+16535:     for (Sequence_const_iterator sj = y.sequence.begin(),
+16535:            y_s_end = y.sequence.end(); sj != y_s_end; ++sj) {
+16535:       const PSET& pj = sj->pointset();
+16535:       if (!pi.is_disjoint_from(pj)) {
+16535:         return false;
+16535:       }
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>
+16535: ::drop_some_non_integer_points(const Variables_Set& vars,
+16535:                                Complexity_Class complexity) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().drop_some_non_integer_points(vars, complexity);
+16535:   }
+16535:   x.reduced = false;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>
+16535: ::drop_some_non_integer_points(Complexity_Class complexity) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().drop_some_non_integer_points(complexity);
+16535:   }
+16535:   x.reduced = false;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>::topological_closure_assign() {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().topological_closure_assign();
+16535:   }
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: Pointset_Powerset<PSET>
+16535: ::intersection_preserving_enlarge_element(PSET& dest) const {
+16535: 
+16535:   const Pointset_Powerset& context = *this;
+16535:   ((void) 0);
+16535:   bool nonempty_intersection = false;
+16535: 
+16535:   PSET enlarged(context.space_dimension(), UNIVERSE);
+16535:   for (Sequence_const_iterator si = context.sequence.begin(),
+16535:          s_end = context.sequence.end(); si != s_end; ++si) {
+16535:     PSET context_i(si->pointset());
+16535:     context_i.intersection_assign(enlarged);
+16535:     PSET enlarged_i(dest);
+16535:     if (enlarged_i.simplify_using_context_assign(context_i)) {
+16535:       nonempty_intersection = true;
+16535:     }
+16535: 
+16535:     enlarged.intersection_assign(enlarged_i);
+16535:   }
+16535:   swap(dest, enlarged);
+16535:   return nonempty_intersection;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: Pointset_Powerset<PSET>
+16535: ::simplify_using_context_assign(const Pointset_Powerset& y) {
+16535:   Pointset_Powerset& x = *this;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   x.omega_reduce();
+16535:   if (x.is_empty()) {
+16535:     return false;
+16535:   }
+16535:   y.omega_reduce();
+16535:   if (y.is_empty()) {
+16535:     x = y;
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (y.size() == 1) {
+16535: 
+16535:     const PSET& y_i = y.sequence.begin()->pointset();
+16535:     for (Sequence_iterator si = x.sequence.begin(),
+16535:            s_end = x.sequence.end(); si != s_end; ) {
+16535:       PSET& x_i = si->pointset();
+16535:       if (x_i.simplify_using_context_assign(y_i)) {
+16535:         ++si;
+16535:       }
+16535:       else {
+16535: 
+16535:         si = x.sequence.erase(si);
+16535:       }
+16535:     }
+16535:   }
+16535:   else {
+16535: 
+16535:     for (Sequence_iterator si = x.sequence.begin(),
+16535:            s_end = x.sequence.end(); si != s_end; ) {
+16535:       if (y.intersection_preserving_enlarge_element(si->pointset())) {
+16535:         ++si;
+16535:       }
+16535:       else {
+16535: 
+16535:         si = x.sequence.erase(si);
+16535:       }
+16535:     }
+16535:   }
+16535:   x.reduced = false;
+16535:   ((void) 0);
+16535:   return !x.sequence.empty();
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: Pointset_Powerset<PSET>::contains(const Pointset_Powerset& y) const {
+16535:   const Pointset_Powerset& x = *this;
+16535:   for (Sequence_const_iterator si = y.sequence.begin(),
+16535:          y_s_end = y.sequence.end(); si != y_s_end; ++si) {
+16535:     const PSET& pi = si->pointset();
+16535:     bool pi_is_contained = false;
+16535:     for (Sequence_const_iterator sj = x.sequence.begin(),
+16535:            x_s_end = x.sequence.end();
+16535:          (sj != x_s_end && !pi_is_contained);
+16535:          ++sj) {
+16535:       const PSET& pj = sj->pointset();
+16535:       if (pj.contains(pi)) {
+16535:         pi_is_contained = true;
+16535:       }
+16535:     }
+16535:     if (!pi_is_contained) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: Pointset_Powerset<PSET>::strictly_contains(const Pointset_Powerset& y) const {
+16535: 
+16535: 
+16535: 
+16535:   const Pointset_Powerset& x = *this;
+16535:   x.omega_reduce();
+16535:   for (Sequence_const_iterator si = y.sequence.begin(),
+16535:          y_s_end = y.sequence.end(); si != y_s_end; ++si) {
+16535:     const PSET& pi = si->pointset();
+16535:     bool pi_is_strictly_contained = false;
+16535:     for (Sequence_const_iterator sj = x.sequence.begin(),
+16535:            x_s_end = x.sequence.end();
+16535:          (sj != x_s_end && !pi_is_strictly_contained); ++sj) {
+16535:       const PSET& pj = sj->pointset();
+16535:       if (pj.strictly_contains(pi)) {
+16535:         pi_is_strictly_contained = true;
+16535:       }
+16535:     }
+16535:     if (!pi_is_strictly_contained) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: template <typename Cons_or_Congr>
+16535: Poly_Con_Relation
+16535: Pointset_Powerset<PSET>::relation_with_aux(const Cons_or_Congr& c) const {
+16535:   const Pointset_Powerset& x = *this;
+16535: 
+16535: 
+16535:   bool is_included = true;
+16535: 
+16535:   bool is_disjoint = true;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool is_strictly_intersecting = false;
+16535:   bool included_once = false;
+16535:   bool disjoint_once = false;
+16535: 
+16535:   bool saturates = true;
+16535:   for (Sequence_const_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     Poly_Con_Relation relation_i = si->pointset().relation_with(c);
+16535:     if (relation_i.implies(Poly_Con_Relation::is_included())) {
+16535:       included_once = true;
+16535:     }
+16535:     else {
+16535:       is_included = false;
+16535:     }
+16535:     if (relation_i.implies(Poly_Con_Relation::is_disjoint())) {
+16535:       disjoint_once = true;
+16535:     }
+16535:     else {
+16535:       is_disjoint = false;
+16535:     }
+16535:     if (relation_i.implies(Poly_Con_Relation::strictly_intersects())) {
+16535:       is_strictly_intersecting = true;
+16535:     }
+16535:     if (!relation_i.implies(Poly_Con_Relation::saturates())) {
+16535:       saturates = false;
+16535:     }
+16535:   }
+16535: 
+16535:   Poly_Con_Relation result = Poly_Con_Relation::nothing();
+16535:   if (is_included) {
+16535:     result = result && Poly_Con_Relation::is_included();
+16535:   }
+16535:   if (is_disjoint) {
+16535:     result = result && Poly_Con_Relation::is_disjoint();
+16535:   }
+16535:   if (is_strictly_intersecting || (included_once && disjoint_once)) {
+16535:     result = result && Poly_Con_Relation::strictly_intersects();
+16535:   }
+16535:   if (saturates) {
+16535:     result = result && Poly_Con_Relation::saturates();
+16535:   }
+16535:   return result;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: Poly_Gen_Relation
+16535: Pointset_Powerset<PSET>::relation_with(const Generator& g) const {
+16535:   const Pointset_Powerset& x = *this;
+16535: 
+16535:   for (Sequence_const_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     Poly_Gen_Relation relation_i = si->pointset().relation_with(g);
+16535:     if (relation_i.implies(Poly_Gen_Relation::subsumes())) {
+16535:       return Poly_Gen_Relation::subsumes();
+16535:     }
+16535:   }
+16535: 
+16535:   return Poly_Gen_Relation::nothing();
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: Pointset_Powerset<PSET>
+16535: ::bounds_from_above(const Linear_Expression& expr) const {
+16535:   const Pointset_Powerset& x = *this;
+16535:   x.omega_reduce();
+16535:   for (Sequence_const_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     if (!si->pointset().bounds_from_above(expr)) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: Pointset_Powerset<PSET>
+16535: ::bounds_from_below(const Linear_Expression& expr) const {
+16535:   const Pointset_Powerset& x = *this;
+16535:   x.omega_reduce();
+16535:   for (Sequence_const_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     if (!si->pointset().bounds_from_below(expr)) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: Pointset_Powerset<PSET>::maximize(const Linear_Expression& expr,
+16535:                                   Coefficient& sup_n,
+16535:                                   Coefficient& sup_d,
+16535:                                   bool& maximum) const {
+16535:   const Pointset_Powerset& x = *this;
+16535:   x.omega_reduce();
+16535:   if (x.is_empty()) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   bool first = true;
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_best_sup_n; Parma_Polyhedra_Library::Coefficient& best_sup_n = holder_best_sup_n.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_best_sup_d; Parma_Polyhedra_Library::Coefficient& best_sup_d = holder_best_sup_d.item();
+16535:   best_sup_n = 0;
+16535:   best_sup_d = 1;
+16535:   bool best_max = false;
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_iter_sup_n; Parma_Polyhedra_Library::Coefficient& iter_sup_n = holder_iter_sup_n.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_iter_sup_d; Parma_Polyhedra_Library::Coefficient& iter_sup_d = holder_iter_sup_d.item();
+16535:   iter_sup_n = 0;
+16535:   iter_sup_d = 1;
+16535:   bool iter_max = false;
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_tmp; Parma_Polyhedra_Library::Coefficient& tmp = holder_tmp.item();
+16535: 
+16535:   for (Sequence_const_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     if (!si->pointset().maximize(expr, iter_sup_n, iter_sup_d, iter_max)) {
+16535:       return false;
+16535:     }
+16535:     else
+16535:       if (first) {
+16535:         first = false;
+16535:         best_sup_n = iter_sup_n;
+16535:         best_sup_d = iter_sup_d;
+16535:         best_max = iter_max;
+16535:       }
+16535:       else {
+16535:         tmp = (best_sup_n * iter_sup_d) - (iter_sup_n * best_sup_d);
+16535:         if (tmp < 0) {
+16535:           best_sup_n = iter_sup_n;
+16535:           best_sup_d = iter_sup_d;
+16535:           best_max = iter_max;
+16535:         }
+16535:         else if (tmp == 0) {
+16535:           best_max = (best_max || iter_max);
+16535:         }
+16535:       }
+16535:   }
+16535:   sup_n = best_sup_n;
+16535:   sup_d = best_sup_d;
+16535:   maximum = best_max;
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: Pointset_Powerset<PSET>::maximize(const Linear_Expression& expr,
+16535:                                   Coefficient& sup_n,
+16535:                                   Coefficient& sup_d,
+16535:                                   bool& maximum,
+16535:                                   Generator& g) const {
+16535:   const Pointset_Powerset& x = *this;
+16535:   x.omega_reduce();
+16535:   if (x.is_empty()) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   bool first = true;
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_best_sup_n; Parma_Polyhedra_Library::Coefficient& best_sup_n = holder_best_sup_n.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_best_sup_d; Parma_Polyhedra_Library::Coefficient& best_sup_d = holder_best_sup_d.item();
+16535:   best_sup_n = 0;
+16535:   best_sup_d = 1;
+16535:   bool best_max = false;
+16535:   Generator best_g = point();
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_iter_sup_n; Parma_Polyhedra_Library::Coefficient& iter_sup_n = holder_iter_sup_n.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_iter_sup_d; Parma_Polyhedra_Library::Coefficient& iter_sup_d = holder_iter_sup_d.item();
+16535:   iter_sup_n = 0;
+16535:   iter_sup_d = 1;
+16535:   bool iter_max = false;
+16535:   Generator iter_g = point();
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_tmp; Parma_Polyhedra_Library::Coefficient& tmp = holder_tmp.item();
+16535: 
+16535:   for (Sequence_const_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     if (!si->pointset().maximize(expr,
+16535:                                  iter_sup_n, iter_sup_d, iter_max, iter_g)) {
+16535:       return false;
+16535:     }
+16535:     else {
+16535:       if (first) {
+16535:         first = false;
+16535:         best_sup_n = iter_sup_n;
+16535:         best_sup_d = iter_sup_d;
+16535:         best_max = iter_max;
+16535:         best_g = iter_g;
+16535:       }
+16535:       else {
+16535:         tmp = (best_sup_n * iter_sup_d) - (iter_sup_n * best_sup_d);
+16535:         if (tmp < 0) {
+16535:           best_sup_n = iter_sup_n;
+16535:           best_sup_d = iter_sup_d;
+16535:           best_max = iter_max;
+16535:           best_g = iter_g;
+16535:         }
+16535:         else if (tmp == 0) {
+16535:           best_max = (best_max || iter_max);
+16535:           best_g = iter_g;
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535:   sup_n = best_sup_n;
+16535:   sup_d = best_sup_d;
+16535:   maximum = best_max;
+16535:   g = best_g;
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: Pointset_Powerset<PSET>::minimize(const Linear_Expression& expr,
+16535:                                   Coefficient& inf_n,
+16535:                                   Coefficient& inf_d,
+16535:                                   bool& minimum) const {
+16535:   const Pointset_Powerset& x = *this;
+16535:   x.omega_reduce();
+16535:   if (x.is_empty()) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   bool first = true;
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_best_inf_n; Parma_Polyhedra_Library::Coefficient& best_inf_n = holder_best_inf_n.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_best_inf_d; Parma_Polyhedra_Library::Coefficient& best_inf_d = holder_best_inf_d.item();
+16535:   best_inf_n = 0;
+16535:   best_inf_d = 1;
+16535:   bool best_min = false;
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_iter_inf_n; Parma_Polyhedra_Library::Coefficient& iter_inf_n = holder_iter_inf_n.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_iter_inf_d; Parma_Polyhedra_Library::Coefficient& iter_inf_d = holder_iter_inf_d.item();
+16535:   iter_inf_n = 0;
+16535:   iter_inf_d = 1;
+16535:   bool iter_min = false;
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_tmp; Parma_Polyhedra_Library::Coefficient& tmp = holder_tmp.item();
+16535: 
+16535:   for (Sequence_const_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     if (!si->pointset().minimize(expr, iter_inf_n, iter_inf_d, iter_min)) {
+16535:       return false;
+16535:     }
+16535:     else {
+16535:       if (first) {
+16535:         first = false;
+16535:         best_inf_n = iter_inf_n;
+16535:         best_inf_d = iter_inf_d;
+16535:         best_min = iter_min;
+16535:       }
+16535:       else {
+16535:         tmp = (best_inf_n * iter_inf_d) - (iter_inf_n * best_inf_d);
+16535:         if (tmp > 0) {
+16535:           best_inf_n = iter_inf_n;
+16535:           best_inf_d = iter_inf_d;
+16535:           best_min = iter_min;
+16535:         }
+16535:         else if (tmp == 0) {
+16535:           best_min = (best_min || iter_min);
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535:   inf_n = best_inf_n;
+16535:   inf_d = best_inf_d;
+16535:   minimum = best_min;
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: Pointset_Powerset<PSET>::minimize(const Linear_Expression& expr,
+16535:                                   Coefficient& inf_n,
+16535:                                   Coefficient& inf_d,
+16535:                                   bool& minimum,
+16535:                                   Generator& g) const {
+16535:   const Pointset_Powerset& x = *this;
+16535:   x.omega_reduce();
+16535:   if (x.is_empty()) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   bool first = true;
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_best_inf_n; Parma_Polyhedra_Library::Coefficient& best_inf_n = holder_best_inf_n.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_best_inf_d; Parma_Polyhedra_Library::Coefficient& best_inf_d = holder_best_inf_d.item();
+16535:   best_inf_n = 0;
+16535:   best_inf_d = 1;
+16535:   bool best_min = false;
+16535:   Generator best_g = point();
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_iter_inf_n; Parma_Polyhedra_Library::Coefficient& iter_inf_n = holder_iter_inf_n.item();
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_iter_inf_d; Parma_Polyhedra_Library::Coefficient& iter_inf_d = holder_iter_inf_d.item();
+16535:   iter_inf_n = 0;
+16535:   iter_inf_d = 1;
+16535:   bool iter_min = false;
+16535:   Generator iter_g = point();
+16535: 
+16535:   Parma_Polyhedra_Library::Dirty_Temp<Parma_Polyhedra_Library::Coefficient> holder_tmp; Parma_Polyhedra_Library::Coefficient& tmp = holder_tmp.item();
+16535: 
+16535:   for (Sequence_const_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     if (!si->pointset().minimize(expr,
+16535:                                  iter_inf_n, iter_inf_d, iter_min, iter_g)) {
+16535:       return false;
+16535:     }
+16535:     else {
+16535:       if (first) {
+16535:         first = false;
+16535:         best_inf_n = iter_inf_n;
+16535:         best_inf_d = iter_inf_d;
+16535:         best_min = iter_min;
+16535:         best_g = iter_g;
+16535:       }
+16535:       else {
+16535:         tmp = (best_inf_n * iter_inf_d) - (iter_inf_n * best_inf_d);
+16535:         if (tmp > 0) {
+16535:           best_inf_n = iter_inf_n;
+16535:           best_inf_d = iter_inf_d;
+16535:           best_min = iter_min;
+16535:           best_g = iter_g;
+16535:         }
+16535:         else if (tmp == 0) {
+16535:           best_min = (best_min || iter_min);
+16535:           best_g = iter_g;
+16535:         }
+16535:       }
+16535:     }
+16535:   }
+16535:   inf_n = best_inf_n;
+16535:   inf_d = best_inf_d;
+16535:   minimum = best_min;
+16535:   g = best_g;
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: Pointset_Powerset<PSET>::contains_integer_point() const {
+16535:   const Pointset_Powerset& x = *this;
+16535:   for (Sequence_const_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     if (si->pointset().contains_integer_point()) {
+16535:       return true;
+16535:     }
+16535:   }
+16535:   return false;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>::wrap_assign(const Variables_Set& vars,
+16535:                                      Bounded_Integer_Type_Width w,
+16535:                                      Bounded_Integer_Type_Representation r,
+16535:                                      Bounded_Integer_Type_Overflow o,
+16535:                                      const Constraint_System* cs_p,
+16535:                                      unsigned complexity_threshold,
+16535:                                      bool wrap_individually) {
+16535:   Pointset_Powerset& x = *this;
+16535:   for (Sequence_iterator si = x.sequence.begin(),
+16535:          s_end = x.sequence.end(); si != s_end; ++si) {
+16535:     si->pointset().wrap_assign(vars, w, r, o, cs_p,
+16535:                                complexity_threshold, wrap_individually);
+16535:   }
+16535:   x.reduced = false;
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>::pairwise_reduce() {
+16535:   Pointset_Powerset& x = *this;
+16535: 
+16535:   x.omega_reduce();
+16535: 
+16535:   size_type n = x.size();
+16535:   size_type deleted;
+16535:   do {
+16535:     Pointset_Powerset new_x(x.space_dim, EMPTY);
+16535:     std::deque<bool> marked(n, false);
+16535:     deleted = 0;
+16535:     Sequence_iterator s_begin = x.sequence.begin();
+16535:     Sequence_iterator s_end = x.sequence.end();
+16535:     unsigned si_index = 0;
+16535:     for (Sequence_iterator si = s_begin; si != s_end; ++si, ++si_index) {
+16535:       if (marked[si_index]) {
+16535:         continue;
+16535:       }
+16535:       PSET& pi = si->pointset();
+16535:       Sequence_const_iterator sj = si;
+16535:       unsigned sj_index = si_index;
+16535:       for (++sj, ++sj_index; sj != s_end; ++sj, ++sj_index) {
+16535:         if (marked[sj_index]) {
+16535:           continue;
+16535:         }
+16535:         const PSET& pj = sj->pointset();
+16535:         if (pi.upper_bound_assign_if_exact(pj)) {
+16535:           marked[si_index] = true;
+16535:           marked[sj_index] = true;
+16535:           new_x.add_non_bottom_disjunct_preserve_reduction(pi);
+16535:           ++deleted;
+16535:           goto next;
+16535:         }
+16535:       }
+16535:     next:
+16535:       ;
+16535:     }
+16535:     iterator new_x_begin = new_x.begin();
+16535:     iterator new_x_end = new_x.end();
+16535:     unsigned xi_index = 0;
+16535:     for (const_iterator xi = x.begin(),
+16535:            x_end = x.end(); xi != x_end; ++xi, ++xi_index) {
+16535:       if (!marked[xi_index]) {
+16535:         new_x_begin
+16535:           = new_x.add_non_bottom_disjunct_preserve_reduction(*xi,
+16535:                                                              new_x_begin,
+16535:                                                              new_x_end);
+16535:       }
+16535:     }
+16535:     using std::swap;
+16535:     swap(x.sequence, new_x.sequence);
+16535:     n -= deleted;
+16535:   } while (deleted > 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: template <typename Widening>
+16535: void
+16535: Pointset_Powerset<PSET>::
+16535: BGP99_heuristics_assign(const Pointset_Powerset& y, Widening widen_fun) {
+16535: 
+16535:   Pointset_Powerset& x = *this;
+16535: # 1295 "../../src/Pointset_Powerset_templates.hh"
+16535:   size_type n = x.size();
+16535:   Pointset_Powerset new_x(x.space_dim, EMPTY);
+16535:   std::deque<bool> marked(n, false);
+16535:   const_iterator x_begin = x.begin();
+16535:   const_iterator x_end = x.end();
+16535:   unsigned i_index = 0;
+16535:   for (const_iterator i = x_begin,
+16535:          y_begin = y.begin(), y_end = y.end();
+16535:          i != x_end; ++i, ++i_index) {
+16535:     for (const_iterator j = y_begin; j != y_end; ++j) {
+16535:       const PSET& pi = i->pointset();
+16535:       const PSET& pj = j->pointset();
+16535:       if (pi.contains(pj)) {
+16535:         PSET pi_copy = pi;
+16535:         widen_fun(pi_copy, pj);
+16535:         new_x.add_non_bottom_disjunct_preserve_reduction(pi_copy);
+16535:         marked[i_index] = true;
+16535:       }
+16535:     }
+16535:   }
+16535:   iterator new_x_begin = new_x.begin();
+16535:   iterator new_x_end = new_x.end();
+16535:   i_index = 0;
+16535:   for (const_iterator i = x_begin; i != x_end; ++i, ++i_index) {
+16535:     if (!marked[i_index]) {
+16535:       new_x_begin
+16535:         = new_x.add_non_bottom_disjunct_preserve_reduction(*i,
+16535:                                                            new_x_begin,
+16535:                                                            new_x_end);
+16535:     }
+16535:   }
+16535:   using std::swap;
+16535:   swap(x.sequence, new_x.sequence);
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: template <typename Widening>
+16535: void
+16535: Pointset_Powerset<PSET>::
+16535: BGP99_extrapolation_assign(const Pointset_Powerset& y,
+16535:                            Widening widen_fun,
+16535:                            unsigned max_disjuncts) {
+16535: 
+16535:   Pointset_Powerset& x = *this;
+16535: # 1351 "../../src/Pointset_Powerset_templates.hh"
+16535:   x.pairwise_reduce();
+16535:   if (max_disjuncts != 0) {
+16535:     x.collapse(max_disjuncts);
+16535:   }
+16535:   x.BGP99_heuristics_assign(y, widen_fun);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: template <typename Cert>
+16535: void
+16535: Pointset_Powerset<PSET>::
+16535: collect_certificates(std::map<Cert, size_type,
+16535:                      typename Cert::Compare>& cert_ms) const {
+16535:   const Pointset_Powerset& x = *this;
+16535:   ((void) 0);
+16535:   ((void) 0);
+16535:   for (const_iterator i = x.begin(), end = x.end(); i != end; ++i) {
+16535:     Cert ph_cert(i->pointset());
+16535:     ++cert_ms[ph_cert];
+16535:   }
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: template <typename Cert>
+16535: bool
+16535: Pointset_Powerset<PSET>::
+16535: is_cert_multiset_stabilizing(const std::map<Cert, size_type,
+16535:                              typename Cert::Compare>& y_cert_ms) const {
+16535:   typedef std::map<Cert, size_type, typename Cert::Compare> Cert_Multiset;
+16535:   Cert_Multiset x_cert_ms;
+16535:   collect_certificates(x_cert_ms);
+16535:   typename Cert_Multiset::const_iterator xi = x_cert_ms.begin();
+16535:   typename Cert_Multiset::const_iterator x_cert_ms_end = x_cert_ms.end();
+16535:   typename Cert_Multiset::const_iterator yi = y_cert_ms.begin();
+16535:   typename Cert_Multiset::const_iterator y_cert_ms_end = y_cert_ms.end();
+16535:   while (xi != x_cert_ms_end && yi != y_cert_ms_end) {
+16535:     const Cert& xi_cert = xi->first;
+16535:     const Cert& yi_cert = yi->first;
+16535:     switch (xi_cert.compare(yi_cert)) {
+16535:     case 0:
+16535: 
+16535:       {
+16535:         const size_type& xi_count = xi->second;
+16535:         const size_type& yi_count = yi->second;
+16535:         if (xi_count == yi_count) {
+16535: 
+16535:           ++xi;
+16535:           ++yi;
+16535:         }
+16535:         else {
+16535: 
+16535:           return xi_count < yi_count;
+16535:         }
+16535:         break;
+16535:       }
+16535:     case 1:
+16535: 
+16535:       return false;
+16535: 
+16535:     case -1:
+16535: 
+16535:       return true;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   return yi != y_cert_ms_end;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: template <typename Cert, typename Widening>
+16535: void
+16535: Pointset_Powerset<PSET>::BHZ03_widening_assign(const Pointset_Powerset& y,
+16535:                                                Widening widen_fun) {
+16535: 
+16535:   Pointset_Powerset& x = *this;
+16535: # 1440 "../../src/Pointset_Powerset_templates.hh"
+16535:   ((void) 0);
+16535:   if (y.size() == 0) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   PSET x_hull(x.space_dim, EMPTY);
+16535:   for (const_iterator i = x.begin(), x_end = x.end(); i != x_end; ++i) {
+16535:     x_hull.upper_bound_assign(i->pointset());
+16535:   }
+16535: 
+16535: 
+16535:   PSET y_hull(y.space_dim, EMPTY);
+16535:   for (const_iterator i = y.begin(), y_end = y.end(); i != y_end; ++i) {
+16535:     y_hull.upper_bound_assign(i->pointset());
+16535:   }
+16535: 
+16535:   const Cert y_hull_cert(y_hull);
+16535: 
+16535: 
+16535:   int hull_stabilization = y_hull_cert.compare(x_hull);
+16535:   if (hull_stabilization == 1) {
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   const bool y_is_not_a_singleton = y.size() > 1;
+16535: 
+16535: 
+16535: 
+16535:   typedef std::map<Cert, size_type, typename Cert::Compare> Cert_Multiset;
+16535:   Cert_Multiset y_cert_ms;
+16535:   bool y_cert_ms_computed = false;
+16535: 
+16535:   if (hull_stabilization == 0 && y_is_not_a_singleton) {
+16535: 
+16535:     y.collect_certificates(y_cert_ms);
+16535:     y_cert_ms_computed = true;
+16535: 
+16535:     if (x.is_cert_multiset_stabilizing(y_cert_ms)) {
+16535:       return;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535:   Pointset_Powerset<PSET> bgp99_heuristics = x;
+16535:   bgp99_heuristics.BGP99_heuristics_assign(y, widen_fun);
+16535: 
+16535: 
+16535:   PSET bgp99_heuristics_hull(x.space_dim, EMPTY);
+16535:   for (const_iterator i = bgp99_heuristics.begin(),
+16535:          b_h_end = bgp99_heuristics.end(); i != b_h_end; ++i) {
+16535:     bgp99_heuristics_hull.upper_bound_assign(i->pointset());
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   hull_stabilization = y_hull_cert.compare(bgp99_heuristics_hull);
+16535:   if (hull_stabilization == 1) {
+16535: 
+16535:     swap(x, bgp99_heuristics);
+16535:     return;
+16535:   }
+16535:   else if (hull_stabilization == 0 && y_is_not_a_singleton) {
+16535: 
+16535:     if (!y_cert_ms_computed) {
+16535:       y.collect_certificates(y_cert_ms);
+16535:       y_cert_ms_computed = true;
+16535:     }
+16535:     if (bgp99_heuristics.is_cert_multiset_stabilizing(y_cert_ms)) {
+16535:       swap(x, bgp99_heuristics);
+16535:       return;
+16535:     }
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     Pointset_Powerset<PSET> reduced_bgp99_heuristics(bgp99_heuristics);
+16535:     reduced_bgp99_heuristics.pairwise_reduce();
+16535:     if (reduced_bgp99_heuristics.is_cert_multiset_stabilizing(y_cert_ms)) {
+16535:       swap(x, reduced_bgp99_heuristics);
+16535:       return;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (bgp99_heuristics_hull.strictly_contains(y_hull)) {
+16535: 
+16535:     PSET ph = bgp99_heuristics_hull;
+16535:     widen_fun(ph, y_hull);
+16535: 
+16535:     ph.difference_assign(bgp99_heuristics_hull);
+16535:     x.add_disjunct(ph);
+16535:     return;
+16535:   }
+16535: 
+16535: 
+16535:   Pointset_Powerset<PSET> x_hull_singleton(x.space_dim, EMPTY);
+16535:   x_hull_singleton.add_disjunct(x_hull);
+16535:   swap(x, x_hull_singleton);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Pointset_Powerset<PSET>::ascii_dump(std::ostream& s) const {
+16535:   const Pointset_Powerset& x = *this;
+16535:   s << "size " << x.size()
+16535:     << "\nspace_dim " << x.space_dim
+16535:     << "\n";
+16535:   for (const_iterator xi = x.begin(), x_end = x.end();
+16535:        xi != x_end; ++xi) {
+16535:     xi->pointset().ascii_dump(s);
+16535:   }
+16535: }
+16535: 
+16535: template <typename PSET> void Pointset_Powerset<PSET>::ascii_dump() const { ascii_dump(std::cerr); } template <typename PSET> void Pointset_Powerset<PSET>::print() const { using IO_Operators::operator<<; std::cerr << *this; }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: Pointset_Powerset<PSET>::ascii_load(std::istream& s) {
+16535:   Pointset_Powerset& x = *this;
+16535:   std::string str;
+16535: 
+16535:   if (!(s >> str) || str != "size") {
+16535:     return false;
+16535:   }
+16535: 
+16535:   size_type sz;
+16535: 
+16535:   if (!(s >> sz)) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (!(s >> str) || str != "space_dim") {
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (!(s >> x.space_dim)) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   Pointset_Powerset new_x(x.space_dim, EMPTY);
+16535:   while (sz-- > 0) {
+16535:     PSET ph;
+16535:     if (!ph.ascii_load(s)) {
+16535:       return false;
+16535:     }
+16535:     new_x.add_disjunct(ph);
+16535:   }
+16535:   swap(x, new_x);
+16535: 
+16535: 
+16535:   ((void) 0);
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: Pointset_Powerset<PSET>::OK() const {
+16535:   const Pointset_Powerset& x = *this;
+16535:   for (const_iterator xi = x.begin(), x_end = x.end(); xi != x_end; ++xi) {
+16535:     const PSET& pi = xi->pointset();
+16535:     if (pi.space_dimension() != x.space_dim) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       return false;
+16535:     }
+16535:   }
+16535:   return x.Base::OK();
+16535: }
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: namespace Pointset_Powersets {
+16535: # 1628 "../../src/Pointset_Powerset_templates.hh"
+16535: template <typename PSET>
+16535: void
+16535: linear_partition_aux(const Constraint& c,
+16535:                      PSET& pset,
+16535:                      Pointset_Powerset<NNC_Polyhedron>& r) {
+16535:   const Linear_Expression le(c.expression());
+16535:   const Constraint& neg_c = c.is_strict_inequality() ? (le <= 0) : (le < 0);
+16535:   NNC_Polyhedron nnc_ph_pset(pset);
+16535:   nnc_ph_pset.add_constraint(neg_c);
+16535:   if (!nnc_ph_pset.is_empty()) {
+16535:     r.add_disjunct(nnc_ph_pset);
+16535:   }
+16535:   pset.add_constraint(c);
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: template <typename PSET>
+16535: std::pair<PSET, Pointset_Powerset<NNC_Polyhedron> >
+16535: linear_partition(const PSET& p, const PSET& q) {
+16535:   using Implementation::Pointset_Powersets::linear_partition_aux;
+16535: 
+16535:   Pointset_Powerset<NNC_Polyhedron> r(p.space_dimension(), EMPTY);
+16535:   PSET pset = q;
+16535:   const Constraint_System& p_constraints = p.constraints();
+16535:   for (Constraint_System::const_iterator i = p_constraints.begin(),
+16535:          p_constraints_end = p_constraints.end();
+16535:        i != p_constraints_end;
+16535:        ++i) {
+16535:     const Constraint& c = *i;
+16535:     if (c.is_equality()) {
+16535:       const Linear_Expression le(c.expression());
+16535:       linear_partition_aux(le <= 0, pset, r);
+16535:       linear_partition_aux(le >= 0, pset, r);
+16535:     }
+16535:     else {
+16535:       linear_partition_aux(c, pset, r);
+16535:     }
+16535:   }
+16535:   return std::make_pair(pset, r);
+16535: }
+16535: 
+16535: }
+16535: # 1455 "../../src/Pointset_Powerset_defs.hh" 2
+16535: # 29 "../../src/algorithms.hh" 2
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: # 42 "../../src/algorithms.hh"
+16535: template <typename PH>
+16535: bool
+16535: poly_hull_assign_if_exact(PH& p, const PH& q);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename PH>
+16535: bool
+16535: poly_hull_assign_if_exact(PH& p, const PH& q) {
+16535:   PH poly_hull = p;
+16535:   NNC_Polyhedron nnc_p(p);
+16535:   poly_hull.poly_hull_assign(q);
+16535:   std::pair<PH, Pointset_Powerset<NNC_Polyhedron> >
+16535:     partition = linear_partition(q, poly_hull);
+16535:   const Pointset_Powerset<NNC_Polyhedron>& s = partition.second;
+16535:   typedef Pointset_Powerset<NNC_Polyhedron>::const_iterator iter;
+16535:   for (iter i = s.begin(), s_end = s.end(); i != s_end; ++i) {
+16535: 
+16535: 
+16535: 
+16535:     if (!nnc_p.contains(i->pointset())) {
+16535:       return false;
+16535:     }
+16535:   }
+16535:   p = poly_hull;
+16535:   return true;
+16535: }
+16535: 
+16535: }
+16535: # 19 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/termination_defs.hh" 1
+16535: # 34 "../../src/termination_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Termination_Helpers {
+16535: public:
+16535:   static void
+16535:   all_affine_ranking_functions_PR(const Constraint_System& cs_before,
+16535:                                   const Constraint_System& cs_after,
+16535:                                   NNC_Polyhedron& mu_space);
+16535:   static bool
+16535:   one_affine_ranking_function_PR(const Constraint_System& cs_before,
+16535:                                  const Constraint_System& cs_after,
+16535:                                  Generator& mu);
+16535:   static bool
+16535:   one_affine_ranking_function_PR_original(const Constraint_System& cs,
+16535:                                           Generator& mu);
+16535:   static void
+16535:   all_affine_ranking_functions_PR_original(const Constraint_System& cs,
+16535:                                            NNC_Polyhedron& mu_space);
+16535: 
+16535:   template <typename PSET>
+16535:   static void
+16535:   assign_all_inequalities_approximation(const PSET& pset_before,
+16535:                                         const PSET& pset_after,
+16535:                                         Constraint_System& cs);
+16535: };
+16535: # 92 "../../src/termination_defs.hh"
+16535: template <typename PSET>
+16535: bool
+16535: termination_test_MS(const PSET& pset);
+16535: # 134 "../../src/termination_defs.hh"
+16535: template <typename PSET>
+16535: bool
+16535: termination_test_MS_2(const PSET& pset_before, const PSET& pset_after);
+16535: # 176 "../../src/termination_defs.hh"
+16535: template <typename PSET>
+16535: bool
+16535: one_affine_ranking_function_MS(const PSET& pset, Generator& mu);
+16535: # 227 "../../src/termination_defs.hh"
+16535: template <typename PSET>
+16535: bool
+16535: one_affine_ranking_function_MS_2(const PSET& pset_before,
+16535:                                  const PSET& pset_after,
+16535:                                  Generator& mu);
+16535: # 271 "../../src/termination_defs.hh"
+16535: template <typename PSET>
+16535: void
+16535: all_affine_ranking_functions_MS(const PSET& pset, C_Polyhedron& mu_space);
+16535: # 322 "../../src/termination_defs.hh"
+16535: template <typename PSET>
+16535: void
+16535: all_affine_ranking_functions_MS_2(const PSET& pset_before,
+16535:                                   const PSET& pset_after,
+16535:                                   C_Polyhedron& mu_space);
+16535: # 374 "../../src/termination_defs.hh"
+16535: template <typename PSET>
+16535: void
+16535: all_affine_quasi_ranking_functions_MS(const PSET& pset,
+16535:                                       C_Polyhedron& decreasing_mu_space,
+16535:                                       C_Polyhedron& bounded_mu_space);
+16535: # 435 "../../src/termination_defs.hh"
+16535: template <typename PSET>
+16535: void
+16535: all_affine_quasi_ranking_functions_MS_2(const PSET& pset_before,
+16535:                                         const PSET& pset_after,
+16535:                                         C_Polyhedron& decreasing_mu_space,
+16535:                                         C_Polyhedron& bounded_mu_space);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: termination_test_PR(const PSET& pset);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: termination_test_PR_2(const PSET& pset_before, const PSET& pset_after);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: one_affine_ranking_function_PR(const PSET& pset, Generator& mu);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: one_affine_ranking_function_PR_2(const PSET& pset_before,
+16535:                                  const PSET& pset_after,
+16535:                                  Generator& mu);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: all_affine_ranking_functions_PR(const PSET& pset, NNC_Polyhedron& mu_space);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: all_affine_ranking_functions_PR_2(const PSET& pset_before,
+16535:                                   const PSET& pset_after,
+16535:                                   NNC_Polyhedron& mu_space);
+16535: 
+16535: 
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/termination_templates.hh" 1
+16535: # 42 "../../src/termination_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: namespace Termination {
+16535: # 160 "../../src/termination_templates.hh"
+16535: void
+16535: assign_all_inequalities_approximation(const Constraint_System& cs_in,
+16535:                                       Constraint_System& cs_out);
+16535: 
+16535: template <typename PSET>
+16535: inline void
+16535: assign_all_inequalities_approximation(const PSET& pset,
+16535:                                       Constraint_System& cs) {
+16535:   assign_all_inequalities_approximation(pset.minimized_constraints(), cs);
+16535: }
+16535: 
+16535: template <>
+16535: void
+16535: assign_all_inequalities_approximation(const C_Polyhedron& ph,
+16535:                                       Constraint_System& cs);
+16535: 
+16535: bool
+16535: termination_test_MS(const Constraint_System& cs);
+16535: 
+16535: bool
+16535: one_affine_ranking_function_MS(const Constraint_System& cs,
+16535:                                Generator& mu);
+16535: 
+16535: void
+16535: all_affine_ranking_functions_MS(const Constraint_System& cs,
+16535:                                 C_Polyhedron& mu_space);
+16535: 
+16535: void
+16535: all_affine_quasi_ranking_functions_MS(const Constraint_System& cs,
+16535:                                       C_Polyhedron& decreasing_mu_space,
+16535:                                       C_Polyhedron& bounded_mu_space);
+16535: 
+16535: bool
+16535: termination_test_PR(const Constraint_System& cs_before,
+16535:                     const Constraint_System& cs_after);
+16535: 
+16535: bool
+16535: one_affine_ranking_function_PR(const Constraint_System& cs_before,
+16535:                                const Constraint_System& cs_after,
+16535:                                Generator& mu);
+16535: 
+16535: void
+16535: all_affine_ranking_functions_PR(const Constraint_System& cs_before,
+16535:                                 const Constraint_System& cs_after,
+16535:                                 NNC_Polyhedron& mu_space);
+16535: 
+16535: bool
+16535: termination_test_PR_original(const Constraint_System& cs);
+16535: 
+16535: bool
+16535: one_affine_ranking_function_PR_original(const Constraint_System& cs,
+16535:                                         Generator& mu);
+16535: 
+16535: void
+16535: all_affine_ranking_functions_PR_original(const Constraint_System& cs,
+16535:                                          NNC_Polyhedron& mu_space);
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: Termination_Helpers
+16535: ::assign_all_inequalities_approximation(const PSET& pset_before,
+16535:                                         const PSET& pset_after,
+16535:                                         Constraint_System& cs) {
+16535:   Implementation::Termination
+16535:     ::assign_all_inequalities_approximation(pset_before, cs);
+16535:   cs.shift_space_dimensions(Variable(0), cs.space_dimension());
+16535:   Constraint_System cs_after;
+16535:   Implementation::Termination
+16535:     ::assign_all_inequalities_approximation(pset_after, cs_after);
+16535: 
+16535:   for (Constraint_System::const_iterator i = cs_after.begin(),
+16535:          cs_after_end = cs_after.end(); i != cs_after_end; ++i) {
+16535:     cs.insert(*i);
+16535:   }
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: termination_test_MS(const PSET& pset) {
+16535:   const dimension_type space_dim = pset.space_dimension();
+16535:   if (space_dim % 2 != 0) {
+16535:     std::ostringstream s;
+16535:     s << "PPL::termination_test_MS(pset):\n"
+16535:          "pset.space_dimension() == " << space_dim
+16535:       << " is odd.";
+16535:     throw std::invalid_argument(s.str());
+16535:   }
+16535: 
+16535:   using namespace Implementation::Termination;
+16535:   Constraint_System cs;
+16535:   assign_all_inequalities_approximation(pset, cs);
+16535:   return termination_test_MS(cs);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: termination_test_MS_2(const PSET& pset_before, const PSET& pset_after) {
+16535:   const dimension_type before_space_dim = pset_before.space_dimension();
+16535:   const dimension_type after_space_dim = pset_after.space_dimension();
+16535:   if (after_space_dim != 2*before_space_dim) {
+16535:     std::ostringstream s;
+16535:     s << "PPL::termination_test_MS_2(pset_before, pset_after):\n"
+16535:          "pset_before.space_dimension() == " << before_space_dim
+16535:       << ", pset_after.space_dimension() == " << after_space_dim
+16535:       << ";\nthe latter should be twice the former.";
+16535:     throw std::invalid_argument(s.str());
+16535:   }
+16535: 
+16535:   using namespace Implementation::Termination;
+16535:   Constraint_System cs;
+16535:   Termination_Helpers
+16535:     ::assign_all_inequalities_approximation(pset_before, pset_after, cs);
+16535:   return termination_test_MS(cs);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: one_affine_ranking_function_MS(const PSET& pset, Generator& mu) {
+16535:   const dimension_type space_dim = pset.space_dimension();
+16535:   if (space_dim % 2 != 0) {
+16535:     std::ostringstream s;
+16535:     s << "PPL::one_affine_ranking_function_MS(pset, mu):\n"
+16535:          "pset.space_dimension() == " << space_dim
+16535:       << " is odd.";
+16535:     throw std::invalid_argument(s.str());
+16535:   }
+16535: 
+16535:   using namespace Implementation::Termination;
+16535:   Constraint_System cs;
+16535:   assign_all_inequalities_approximation(pset, cs);
+16535:   return one_affine_ranking_function_MS(cs, mu);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: one_affine_ranking_function_MS_2(const PSET& pset_before,
+16535:                                  const PSET& pset_after,
+16535:                                  Generator& mu) {
+16535:   const dimension_type before_space_dim = pset_before.space_dimension();
+16535:   const dimension_type after_space_dim = pset_after.space_dimension();
+16535:   if (after_space_dim != 2*before_space_dim) {
+16535:     std::ostringstream s;
+16535:     s << "PPL::one_affine_ranking_function_MS_2(pset_before, pset_after, mu):\n"
+16535:          "pset_before.space_dimension() == " << before_space_dim
+16535:       << ", pset_after.space_dimension() == " << after_space_dim
+16535:       << ";\nthe latter should be twice the former.";
+16535:     throw std::invalid_argument(s.str());
+16535:   }
+16535: 
+16535:   using namespace Implementation::Termination;
+16535:   Constraint_System cs;
+16535:   Termination_Helpers
+16535:     ::assign_all_inequalities_approximation(pset_before, pset_after, cs);
+16535:   return one_affine_ranking_function_MS(cs, mu);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: all_affine_ranking_functions_MS(const PSET& pset, C_Polyhedron& mu_space) {
+16535:   const dimension_type space_dim = pset.space_dimension();
+16535:   if (space_dim % 2 != 0) {
+16535:     std::ostringstream s;
+16535:     s << "PPL::all_affine_ranking_functions_MS(pset, mu_space):\n"
+16535:          "pset.space_dimension() == " << space_dim
+16535:       << " is odd.";
+16535:     throw std::invalid_argument(s.str());
+16535:   }
+16535: 
+16535:   if (pset.is_empty()) {
+16535:     mu_space = C_Polyhedron(1 + space_dim/2, UNIVERSE);
+16535:     return;
+16535:   }
+16535: 
+16535:   using namespace Implementation::Termination;
+16535:   Constraint_System cs;
+16535:   assign_all_inequalities_approximation(pset, cs);
+16535:   all_affine_ranking_functions_MS(cs, mu_space);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: all_affine_ranking_functions_MS_2(const PSET& pset_before,
+16535:                                   const PSET& pset_after,
+16535:                                   C_Polyhedron& mu_space) {
+16535:   const dimension_type before_space_dim = pset_before.space_dimension();
+16535:   const dimension_type after_space_dim = pset_after.space_dimension();
+16535:   if (after_space_dim != 2*before_space_dim) {
+16535:     std::ostringstream s;
+16535:     s << "PPL::all_affine_ranking_functions_MS_2"
+16535:       << "(pset_before, pset_after, mu_space):\n"
+16535:       << "pset_before.space_dimension() == " << before_space_dim
+16535:       << ", pset_after.space_dimension() == " << after_space_dim
+16535:       << ";\nthe latter should be twice the former.";
+16535:     throw std::invalid_argument(s.str());
+16535:   }
+16535: 
+16535:   if (pset_before.is_empty()) {
+16535:     mu_space = C_Polyhedron(1 + before_space_dim, UNIVERSE);
+16535:     return;
+16535:   }
+16535: 
+16535:   using namespace Implementation::Termination;
+16535:   Constraint_System cs;
+16535:   Termination_Helpers
+16535:     ::assign_all_inequalities_approximation(pset_before, pset_after, cs);
+16535:   all_affine_ranking_functions_MS(cs, mu_space);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: all_affine_quasi_ranking_functions_MS(const PSET& pset,
+16535:                                       C_Polyhedron& decreasing_mu_space,
+16535:                                       C_Polyhedron& bounded_mu_space) {
+16535:   const dimension_type space_dim = pset.space_dimension();
+16535:   if (space_dim % 2 != 0) {
+16535:     std::ostringstream s;
+16535:     s << "PPL::all_affine_quasi_ranking_functions_MS"
+16535:       << "(pset, decr_space, bounded_space):\n"
+16535:       << "pset.space_dimension() == " << space_dim
+16535:       << " is odd.";
+16535:     throw std::invalid_argument(s.str());
+16535:   }
+16535: 
+16535:   if (pset.is_empty()) {
+16535:     decreasing_mu_space = C_Polyhedron(1 + space_dim/2, UNIVERSE);
+16535:     bounded_mu_space = decreasing_mu_space;
+16535:     return;
+16535:   }
+16535: 
+16535:   using namespace Implementation::Termination;
+16535:   Constraint_System cs;
+16535:   assign_all_inequalities_approximation(pset, cs);
+16535:   all_affine_quasi_ranking_functions_MS(cs,
+16535:                                         decreasing_mu_space,
+16535:                                         bounded_mu_space);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: all_affine_quasi_ranking_functions_MS_2(const PSET& pset_before,
+16535:                                         const PSET& pset_after,
+16535:                                         C_Polyhedron& decreasing_mu_space,
+16535:                                         C_Polyhedron& bounded_mu_space) {
+16535:   const dimension_type before_space_dim = pset_before.space_dimension();
+16535:   const dimension_type after_space_dim = pset_after.space_dimension();
+16535:   if (after_space_dim != 2*before_space_dim) {
+16535:     std::ostringstream s;
+16535:     s << "PPL::all_affine_quasi_ranking_functions_MS_2"
+16535:       << "(pset_before, pset_after, decr_space, bounded_space):\n"
+16535:       << "pset_before.space_dimension() == " << before_space_dim
+16535:       << ", pset_after.space_dimension() == " << after_space_dim
+16535:       << ";\nthe latter should be twice the former.";
+16535:     throw std::invalid_argument(s.str());
+16535:   }
+16535: 
+16535:   if (pset_before.is_empty()) {
+16535:     decreasing_mu_space = C_Polyhedron(1 + before_space_dim, UNIVERSE);
+16535:     bounded_mu_space = decreasing_mu_space;
+16535:     return;
+16535:   }
+16535: 
+16535:   using namespace Implementation::Termination;
+16535:   Constraint_System cs;
+16535:   Termination_Helpers
+16535:     ::assign_all_inequalities_approximation(pset_before, pset_after, cs);
+16535:   all_affine_quasi_ranking_functions_MS(cs,
+16535:                                         decreasing_mu_space,
+16535:                                         bounded_mu_space);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: termination_test_PR_2(const PSET& pset_before, const PSET& pset_after) {
+16535:   const dimension_type before_space_dim = pset_before.space_dimension();
+16535:   const dimension_type after_space_dim = pset_after.space_dimension();
+16535:   if (after_space_dim != 2*before_space_dim) {
+16535:     std::ostringstream s;
+16535:     s << "PPL::termination_test_PR_2(pset_before, pset_after):\n"
+16535:       << "pset_before.space_dimension() == " << before_space_dim
+16535:       << ", pset_after.space_dimension() == " << after_space_dim
+16535:       << ";\nthe latter should be twice the former.";
+16535:     throw std::invalid_argument(s.str());
+16535:   }
+16535: 
+16535:   using namespace Implementation::Termination;
+16535:   Constraint_System cs_before;
+16535:   Constraint_System cs_after;
+16535:   assign_all_inequalities_approximation(pset_before, cs_before);
+16535:   assign_all_inequalities_approximation(pset_after, cs_after);
+16535:   return termination_test_PR(cs_before, cs_after);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: termination_test_PR(const PSET& pset) {
+16535:   const dimension_type space_dim = pset.space_dimension();
+16535:   if (space_dim % 2 != 0) {
+16535:     std::ostringstream s;
+16535:     s << "PPL::termination_test_PR(pset):\n"
+16535:       << "pset.space_dimension() == " << space_dim
+16535:       << " is odd.";
+16535:     throw std::invalid_argument(s.str());
+16535:   }
+16535: 
+16535:   using namespace Implementation::Termination;
+16535:   Constraint_System cs;
+16535:   assign_all_inequalities_approximation(pset, cs);
+16535:   return termination_test_PR_original(cs);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: one_affine_ranking_function_PR_2(const PSET& pset_before,
+16535:                                  const PSET& pset_after,
+16535:                                  Generator& mu) {
+16535:   const dimension_type before_space_dim = pset_before.space_dimension();
+16535:   const dimension_type after_space_dim = pset_after.space_dimension();
+16535:   if (after_space_dim != 2*before_space_dim) {
+16535:     std::ostringstream s;
+16535:     s << "PPL::one_affine_ranking_function_PR_2"
+16535:       << "(pset_before, pset_after, mu):\n"
+16535:       << "pset_before.space_dimension() == " << before_space_dim
+16535:       << ", pset_after.space_dimension() == " << after_space_dim
+16535:       << ";\nthe latter should be twice the former.";
+16535:     throw std::invalid_argument(s.str());
+16535:   }
+16535: 
+16535:   using namespace Implementation::Termination;
+16535:   Constraint_System cs_before;
+16535:   Constraint_System cs_after;
+16535:   assign_all_inequalities_approximation(pset_before, cs_before);
+16535:   assign_all_inequalities_approximation(pset_after, cs_after);
+16535:   return one_affine_ranking_function_PR(cs_before, cs_after, mu);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: bool
+16535: one_affine_ranking_function_PR(const PSET& pset, Generator& mu) {
+16535:   const dimension_type space_dim = pset.space_dimension();
+16535:   if (space_dim % 2 != 0) {
+16535:     std::ostringstream s;
+16535:     s << "PPL::one_affine_ranking_function_PR(pset, mu):\n"
+16535:       << "pset.space_dimension() == " << space_dim
+16535:       << " is odd.";
+16535:     throw std::invalid_argument(s.str());
+16535:   }
+16535: 
+16535:   using namespace Implementation::Termination;
+16535:   Constraint_System cs;
+16535:   assign_all_inequalities_approximation(pset, cs);
+16535:   return one_affine_ranking_function_PR_original(cs, mu);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: all_affine_ranking_functions_PR_2(const PSET& pset_before,
+16535:                                   const PSET& pset_after,
+16535:                                   NNC_Polyhedron& mu_space) {
+16535:   const dimension_type before_space_dim = pset_before.space_dimension();
+16535:   const dimension_type after_space_dim = pset_after.space_dimension();
+16535:   if (after_space_dim != 2*before_space_dim) {
+16535:     std::ostringstream s;
+16535:     s << "PPL::all_affine_ranking_functions_MS_2"
+16535:       << "(pset_before, pset_after, mu_space):\n"
+16535:       << "pset_before.space_dimension() == " << before_space_dim
+16535:       << ", pset_after.space_dimension() == " << after_space_dim
+16535:       << ";\nthe latter should be twice the former.";
+16535:     throw std::invalid_argument(s.str());
+16535:   }
+16535: 
+16535:   if (pset_before.is_empty()) {
+16535:     mu_space = NNC_Polyhedron(1 + before_space_dim);
+16535:     return;
+16535:   }
+16535: 
+16535:   using namespace Implementation::Termination;
+16535:   Constraint_System cs_before;
+16535:   Constraint_System cs_after;
+16535:   assign_all_inequalities_approximation(pset_before, cs_before);
+16535:   assign_all_inequalities_approximation(pset_after, cs_after);
+16535:   all_affine_ranking_functions_PR(cs_before, cs_after, mu_space);
+16535: }
+16535: 
+16535: template <typename PSET>
+16535: void
+16535: all_affine_ranking_functions_PR(const PSET& pset,
+16535:                                 NNC_Polyhedron& mu_space) {
+16535:   const dimension_type space_dim = pset.space_dimension();
+16535:   if (space_dim % 2 != 0) {
+16535:     std::ostringstream s;
+16535:     s << "PPL::all_affine_ranking_functions_PR(pset, mu_space):\n"
+16535:       << "pset.space_dimension() == " << space_dim
+16535:       << " is odd.";
+16535:     throw std::invalid_argument(s.str());
+16535:   }
+16535: 
+16535:   if (pset.is_empty()) {
+16535:     mu_space = NNC_Polyhedron(1 + space_dim/2);
+16535:     return;
+16535:   }
+16535: 
+16535:   using namespace Implementation::Termination;
+16535:   Constraint_System cs;
+16535:   assign_all_inequalities_approximation(pset, cs);
+16535:   all_affine_ranking_functions_PR_original(cs, mu_space);
+16535: }
+16535: 
+16535: }
+16535: # 501 "../../src/termination_defs.hh" 2
+16535: # 20 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/wrap_string.hh" 1
+16535: # 29 "../../src/wrap_string.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace IO_Operators {
+16535: # 50 "../../src/wrap_string.hh"
+16535: std::string
+16535: wrap_string(const std::string& src_string,
+16535:             unsigned indent_depth,
+16535:             unsigned preferred_first_line_length,
+16535:             unsigned preferred_line_length);
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 21 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/Cast_Floating_Point_Expression_defs.hh" 1
+16535: # 30 "../../src/Cast_Floating_Point_Expression_defs.hh"
+16535: # 1 "../../src/Cast_Floating_Point_Expression_types.hh" 1
+16535: # 16 "../../src/Cast_Floating_Point_Expression_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: class Cast_Floating_Point_Expression;
+16535: 
+16535: }
+16535: # 31 "../../src/Cast_Floating_Point_Expression_defs.hh" 2
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: template<typename FP_Interval_Type, typename FP_Format>
+16535: void
+16535: swap(Cast_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
+16535:      Cast_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y);
+16535: # 89 "../../src/Cast_Floating_Point_Expression_defs.hh"
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: class Cast_Floating_Point_Expression
+16535:   : public Floating_Point_Expression<FP_Interval_Type, FP_Format> {
+16535: 
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535:   FP_Linear_Form FP_Linear_Form;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535:   FP_Interval_Abstract_Store FP_Interval_Abstract_Store;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535:   FP_Linear_Form_Abstract_Store FP_Linear_Form_Abstract_Store;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Cast_Floating_Point_Expression(
+16535:     Floating_Point_Expression<FP_Interval_Type, FP_Format>* const expr);
+16535: 
+16535: 
+16535:   ~Cast_Floating_Point_Expression();
+16535: # 148 "../../src/Cast_Floating_Point_Expression_defs.hh"
+16535:   bool linearize(const FP_Interval_Abstract_Store& int_store,
+16535:                  const FP_Linear_Form_Abstract_Store& lf_store,
+16535:                  FP_Linear_Form& result) const;
+16535: 
+16535: 
+16535:   void m_swap(Cast_Floating_Point_Expression& y);
+16535: 
+16535: private:
+16535: 
+16535: 
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>* expr;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Cast_Floating_Point_Expression(
+16535:                           const Cast_Floating_Point_Expression& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Cast_Floating_Point_Expression& operator=(
+16535:                           const Cast_Floating_Point_Expression& y);
+16535: 
+16535: };
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Cast_Floating_Point_Expression_inlines.hh" 1
+16535: # 29 "../../src/Cast_Floating_Point_Expression_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline
+16535: Cast_Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535: Cast_Floating_Point_Expression(
+16535: Floating_Point_Expression<FP_Interval_Type, FP_Format>* const e)
+16535:   : expr(e) {
+16535:   
+16535: # 37 "../../src/Cast_Floating_Point_Expression_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 37 "../../src/Cast_Floating_Point_Expression_inlines.hh"
+16535:                ;
+16535: }
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline
+16535: Cast_Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535: ~Cast_Floating_Point_Expression() {
+16535:   delete expr;
+16535: }
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline void
+16535: Cast_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::m_swap(Cast_Floating_Point_Expression& y) {
+16535:   swap(expr, y.expr);
+16535: }
+16535: 
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline void
+16535: swap(Cast_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
+16535:      Cast_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 181 "../../src/Cast_Floating_Point_Expression_defs.hh" 2
+16535: # 22 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/Cast_Floating_Point_Expression_templates.hh" 1
+16535: # 28 "../../src/Cast_Floating_Point_Expression_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: bool Cast_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::linearize(const FP_Interval_Abstract_Store& int_store,
+16535:             const FP_Linear_Form_Abstract_Store& lf_store,
+16535:             FP_Linear_Form& result) const {
+16535:   if (!expr->linearize(int_store, lf_store, result)) {
+16535:     return false;
+16535:   }
+16535:   FP_Linear_Form rel_error;
+16535:   relative_error(result, rel_error);
+16535:   result += rel_error;
+16535:   result += this->absolute_error;
+16535:   return !this->overflows(result);
+16535: }
+16535: 
+16535: }
+16535: # 23 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/Constant_Floating_Point_Expression_defs.hh" 1
+16535: # 30 "../../src/Constant_Floating_Point_Expression_defs.hh"
+16535: # 1 "../../src/Constant_Floating_Point_Expression_types.hh" 1
+16535: # 16 "../../src/Constant_Floating_Point_Expression_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: class Constant_Floating_Point_Expression;
+16535: 
+16535: }
+16535: # 31 "../../src/Constant_Floating_Point_Expression_defs.hh" 2
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: template<typename FP_Interval_Type, typename FP_Format>
+16535: void swap(Constant_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
+16535:           Constant_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y);
+16535: # 60 "../../src/Constant_Floating_Point_Expression_defs.hh"
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: class Constant_Floating_Point_Expression
+16535:   : public Floating_Point_Expression<FP_Interval_Type, FP_Format> {
+16535: 
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535:   FP_Linear_Form FP_Linear_Form;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535:   FP_Interval_Abstract_Store FP_Interval_Abstract_Store;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535:   FP_Linear_Form_Abstract_Store FP_Linear_Form_Abstract_Store;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::boundary_type
+16535:   boundary_type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::info_type info_type;
+16535: # 111 "../../src/Constant_Floating_Point_Expression_defs.hh"
+16535:   Constant_Floating_Point_Expression(const boundary_type lower_bound,
+16535:                                      const boundary_type upper_bound);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Constant_Floating_Point_Expression(const char* str_value);
+16535: 
+16535: 
+16535:   ~Constant_Floating_Point_Expression();
+16535: # 140 "../../src/Constant_Floating_Point_Expression_defs.hh"
+16535:   bool linearize(const FP_Interval_Abstract_Store& int_store,
+16535:                  const FP_Linear_Form_Abstract_Store& lf_store,
+16535:                  FP_Linear_Form& result) const;
+16535: 
+16535: 
+16535:   void m_swap(Constant_Floating_Point_Expression& y);
+16535: 
+16535: private:
+16535: 
+16535:   FP_Interval_Type value;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Constant_Floating_Point_Expression(
+16535:                           const Constant_Floating_Point_Expression& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Constant_Floating_Point_Expression& operator=(
+16535:                           const Constant_Floating_Point_Expression& y);
+16535: 
+16535: };
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Constant_Floating_Point_Expression_inlines.hh" 1
+16535: # 29 "../../src/Constant_Floating_Point_Expression_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline
+16535: Constant_Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535: Constant_Floating_Point_Expression(const char* str_value)
+16535:   : value(str_value) {}
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline
+16535: Constant_Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535: Constant_Floating_Point_Expression(const boundary_type lb,
+16535:                                    const boundary_type ub) {
+16535:   
+16535: # 42 "../../src/Constant_Floating_Point_Expression_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 42 "../../src/Constant_Floating_Point_Expression_inlines.hh"
+16535:                  ;
+16535:   value.build(i_constraint(GREATER_OR_EQUAL, lb),
+16535:               i_constraint(LESS_OR_EQUAL, ub));
+16535: }
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline
+16535: Constant_Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535: ~Constant_Floating_Point_Expression() {}
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline void
+16535: Constant_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::m_swap(Constant_Floating_Point_Expression& y) {
+16535:   using std::swap;
+16535:   swap(value, y.value);
+16535: }
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline bool
+16535: Constant_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::linearize(const FP_Interval_Abstract_Store&,
+16535:             const FP_Linear_Form_Abstract_Store&,
+16535:             FP_Linear_Form& result) const {
+16535:   result = FP_Linear_Form(value);
+16535:   return true;
+16535: }
+16535: 
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline void
+16535: swap(Constant_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
+16535:      Constant_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 172 "../../src/Constant_Floating_Point_Expression_defs.hh" 2
+16535: # 24 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/Variable_Floating_Point_Expression_defs.hh" 1
+16535: # 30 "../../src/Variable_Floating_Point_Expression_defs.hh"
+16535: # 1 "../../src/Variable_Floating_Point_Expression_types.hh" 1
+16535: # 16 "../../src/Variable_Floating_Point_Expression_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: class Variable_Floating_Point_Expression;
+16535: 
+16535: }
+16535: # 31 "../../src/Variable_Floating_Point_Expression_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: template<typename FP_Interval_Type, typename FP_Format>
+16535: void swap(Variable_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
+16535:           Variable_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y);
+16535: # 63 "../../src/Variable_Floating_Point_Expression_defs.hh"
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: class Variable_Floating_Point_Expression
+16535: : public Floating_Point_Expression<FP_Interval_Type, FP_Format> {
+16535: 
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535:   FP_Linear_Form FP_Linear_Form;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535:   FP_Interval_Abstract_Store FP_Interval_Abstract_Store;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535:   FP_Linear_Form_Abstract_Store FP_Linear_Form_Abstract_Store;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::boundary_type
+16535:   boundary_type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::info_type info_type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   explicit Variable_Floating_Point_Expression(const dimension_type v_index);
+16535: 
+16535: 
+16535:   ~Variable_Floating_Point_Expression();
+16535: # 140 "../../src/Variable_Floating_Point_Expression_defs.hh"
+16535:   bool linearize(const FP_Interval_Abstract_Store& int_store,
+16535:                  const FP_Linear_Form_Abstract_Store& lf_store,
+16535:                  FP_Linear_Form& result) const;
+16535: # 154 "../../src/Variable_Floating_Point_Expression_defs.hh"
+16535:   void linear_form_assign(const FP_Linear_Form& lf,
+16535:                                 FP_Linear_Form_Abstract_Store& lf_store) const;
+16535: 
+16535: 
+16535:   void m_swap(Variable_Floating_Point_Expression& y);
+16535: 
+16535: private:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Variable_Floating_Point_Expression(
+16535:                           const Variable_Floating_Point_Expression& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Variable_Floating_Point_Expression& operator=(
+16535:                           const Variable_Floating_Point_Expression& y);
+16535: 
+16535: 
+16535:   dimension_type variable_index;
+16535: 
+16535: };
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Variable_Floating_Point_Expression_inlines.hh" 1
+16535: # 29 "../../src/Variable_Floating_Point_Expression_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline
+16535: Variable_Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535: Variable_Floating_Point_Expression(const dimension_type v_index)
+16535:   : variable_index(v_index) {}
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline
+16535: Variable_Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535: ~Variable_Floating_Point_Expression() {}
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline void
+16535: Variable_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::m_swap(Variable_Floating_Point_Expression& y) {
+16535:   using std::swap;
+16535:   swap(variable_index, y.variable_index);
+16535: }
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline bool
+16535: Variable_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::linearize(const FP_Interval_Abstract_Store&,
+16535:             const FP_Linear_Form_Abstract_Store& lf_store,
+16535:             FP_Linear_Form& result) const {
+16535:   typename FP_Linear_Form_Abstract_Store::const_iterator
+16535:            variable_value = lf_store.find(variable_index);
+16535: 
+16535:   if (variable_value == lf_store.end()) {
+16535:     result = FP_Linear_Form(Variable(variable_index));
+16535:     return true;
+16535:   }
+16535: 
+16535:   result = FP_Linear_Form(variable_value->second);
+16535:   return !this->overflows(result);
+16535: }
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline void
+16535: Variable_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::linear_form_assign(const FP_Linear_Form& lf,
+16535:                            FP_Linear_Form_Abstract_Store& lf_store) const {
+16535:   for (typename FP_Linear_Form_Abstract_Store::iterator
+16535:          i = lf_store.begin(); i != lf_store.end(); ) {
+16535:     if ((i->second).coefficient(Variable(variable_index)) != 0) {
+16535:       i = lf_store.erase(i);
+16535:     }
+16535:     else {
+16535:       ++i;
+16535:     }
+16535:   }
+16535:   lf_store[variable_index] = lf;
+16535:   return;
+16535: }
+16535: 
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline void
+16535: swap(Variable_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
+16535:      Variable_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 186 "../../src/Variable_Floating_Point_Expression_defs.hh" 2
+16535: # 25 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/Sum_Floating_Point_Expression_defs.hh" 1
+16535: # 30 "../../src/Sum_Floating_Point_Expression_defs.hh"
+16535: # 1 "../../src/Sum_Floating_Point_Expression_types.hh" 1
+16535: # 16 "../../src/Sum_Floating_Point_Expression_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: class Sum_Floating_Point_Expression;
+16535: 
+16535: }
+16535: # 31 "../../src/Sum_Floating_Point_Expression_defs.hh" 2
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: void swap(Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
+16535:           Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y);
+16535: # 94 "../../src/Sum_Floating_Point_Expression_defs.hh"
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: class Sum_Floating_Point_Expression
+16535:   : public Floating_Point_Expression<FP_Interval_Type, FP_Format> {
+16535: 
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535:   ::FP_Linear_Form FP_Linear_Form;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535:   ::FP_Interval_Abstract_Store FP_Interval_Abstract_Store;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535:   FP_Linear_Form_Abstract_Store FP_Linear_Form_Abstract_Store;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::boundary_type
+16535:   boundary_type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::info_type info_type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Sum_Floating_Point_Expression(
+16535:            Floating_Point_Expression<FP_Interval_Type, FP_Format>* const x,
+16535:            Floating_Point_Expression<FP_Interval_Type, FP_Format>* const y);
+16535: 
+16535: 
+16535:   ~Sum_Floating_Point_Expression();
+16535: # 174 "../../src/Sum_Floating_Point_Expression_defs.hh"
+16535:   bool linearize(const FP_Interval_Abstract_Store& int_store,
+16535:                  const FP_Linear_Form_Abstract_Store& lf_store,
+16535:                  FP_Linear_Form& result) const;
+16535: 
+16535: 
+16535:   void m_swap(Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y);
+16535: 
+16535: private:
+16535: 
+16535: 
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>* first_operand;
+16535: 
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>* second_operand;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Sum_Floating_Point_Expression(
+16535:          const Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>& e);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>&
+16535:   operator=(const Sum_Floating_Point_Expression<FP_Interval_Type,
+16535:             FP_Format>& e);
+16535: 
+16535: 
+16535: };
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Sum_Floating_Point_Expression_inlines.hh" 1
+16535: # 30 "../../src/Sum_Floating_Point_Expression_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline
+16535: Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::Sum_Floating_Point_Expression(
+16535:          Floating_Point_Expression<FP_Interval_Type, FP_Format>* const x,
+16535:          Floating_Point_Expression<FP_Interval_Type, FP_Format>* const y)
+16535:   : first_operand(x), second_operand(y) {
+16535:   
+16535: # 39 "../../src/Sum_Floating_Point_Expression_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 39 "../../src/Sum_Floating_Point_Expression_inlines.hh"
+16535:                ;
+16535:   
+16535: # 40 "../../src/Sum_Floating_Point_Expression_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 40 "../../src/Sum_Floating_Point_Expression_inlines.hh"
+16535:                ;
+16535: }
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline
+16535: Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::~Sum_Floating_Point_Expression() {
+16535:   delete first_operand;
+16535:   delete second_operand;
+16535: }
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline void
+16535: Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::m_swap(Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y) {
+16535:   using std::swap;
+16535:   swap(first_operand, y.first_operand);
+16535:   swap(second_operand, y.second_operand);
+16535: }
+16535: 
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline void
+16535: swap(Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
+16535:      Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 211 "../../src/Sum_Floating_Point_Expression_defs.hh" 2
+16535: # 1 "../../src/Sum_Floating_Point_Expression_templates.hh" 1
+16535: # 28 "../../src/Sum_Floating_Point_Expression_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: bool Sum_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::linearize(const FP_Interval_Abstract_Store& int_store,
+16535:             const FP_Linear_Form_Abstract_Store& lf_store,
+16535:             FP_Linear_Form& result) const {
+16535:   if (!first_operand->linearize(int_store, lf_store, result)) {
+16535:     return false;
+16535:   }
+16535:   FP_Linear_Form rel_error;
+16535:   relative_error(result, rel_error);
+16535:   result += rel_error;
+16535:   FP_Linear_Form linearized_second_operand;
+16535:   if (!second_operand->linearize(int_store, lf_store,
+16535:                                 linearized_second_operand)) {
+16535:     return false;
+16535:   }
+16535:   result += linearized_second_operand;
+16535:   relative_error(linearized_second_operand, rel_error);
+16535:   result += rel_error;
+16535:   result += this->absolute_error;
+16535:   return !this->overflows(result);
+16535: }
+16535: 
+16535: }
+16535: # 212 "../../src/Sum_Floating_Point_Expression_defs.hh" 2
+16535: # 26 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/Difference_Floating_Point_Expression_defs.hh" 1
+16535: # 30 "../../src/Difference_Floating_Point_Expression_defs.hh"
+16535: # 1 "../../src/Difference_Floating_Point_Expression_types.hh" 1
+16535: # 16 "../../src/Difference_Floating_Point_Expression_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: class Difference_Floating_Point_Expression;
+16535: 
+16535: }
+16535: # 31 "../../src/Difference_Floating_Point_Expression_defs.hh" 2
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: void
+16535: swap(Difference_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
+16535:      Difference_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y);
+16535: # 100 "../../src/Difference_Floating_Point_Expression_defs.hh"
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: class Difference_Floating_Point_Expression
+16535:   : public Floating_Point_Expression<FP_Interval_Type, FP_Format> {
+16535: 
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535:   ::FP_Linear_Form FP_Linear_Form;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535:   ::FP_Interval_Abstract_Store FP_Interval_Abstract_Store;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535:   ::FP_Linear_Form_Abstract_Store FP_Linear_Form_Abstract_Store;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::boundary_type
+16535:   boundary_type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::info_type info_type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Difference_Floating_Point_Expression(
+16535:            Floating_Point_Expression<FP_Interval_Type, FP_Format>* const x,
+16535:            Floating_Point_Expression<FP_Interval_Type, FP_Format>* const y);
+16535: 
+16535: 
+16535:   ~Difference_Floating_Point_Expression();
+16535: # 180 "../../src/Difference_Floating_Point_Expression_defs.hh"
+16535:   bool linearize(const FP_Interval_Abstract_Store& int_store,
+16535:                  const FP_Linear_Form_Abstract_Store& lf_store,
+16535:                  FP_Linear_Form& result) const;
+16535: 
+16535: 
+16535:   void m_swap(Difference_Floating_Point_Expression<FP_Interval_Type,
+16535:                                                    FP_Format>& y);
+16535: 
+16535: private:
+16535: 
+16535: 
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>* first_operand;
+16535: 
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>* second_operand;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Difference_Floating_Point_Expression(
+16535:          const Difference_Floating_Point_Expression<FP_Interval_Type,
+16535:                                                     FP_Format>& e);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Difference_Floating_Point_Expression<FP_Interval_Type, FP_Format>&
+16535:   operator=(const Difference_Floating_Point_Expression<FP_Interval_Type,
+16535:                                                        FP_Format>& e);
+16535: 
+16535: 
+16535: };
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Difference_Floating_Point_Expression_inlines.hh" 1
+16535: # 30 "../../src/Difference_Floating_Point_Expression_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline
+16535: Difference_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::Difference_Floating_Point_Expression(
+16535:          Floating_Point_Expression<FP_Interval_Type, FP_Format>* const x,
+16535:          Floating_Point_Expression<FP_Interval_Type, FP_Format>* const y)
+16535:   : first_operand(x), second_operand(y) {
+16535:   
+16535: # 39 "../../src/Difference_Floating_Point_Expression_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 39 "../../src/Difference_Floating_Point_Expression_inlines.hh"
+16535:                ;
+16535:   
+16535: # 40 "../../src/Difference_Floating_Point_Expression_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 40 "../../src/Difference_Floating_Point_Expression_inlines.hh"
+16535:                ;
+16535: }
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline
+16535: Difference_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::~Difference_Floating_Point_Expression() {
+16535:   delete first_operand;
+16535:   delete second_operand;
+16535: }
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline void
+16535: Difference_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::m_swap(Difference_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y) {
+16535:   using std::swap;
+16535:   swap(first_operand, y.first_operand);
+16535:   swap(second_operand, y.second_operand);
+16535: }
+16535: 
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline void
+16535: swap(Difference_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
+16535:      Difference_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 219 "../../src/Difference_Floating_Point_Expression_defs.hh" 2
+16535: # 1 "../../src/Difference_Floating_Point_Expression_templates.hh" 1
+16535: # 28 "../../src/Difference_Floating_Point_Expression_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: bool Difference_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::linearize(const FP_Interval_Abstract_Store& int_store,
+16535:             const FP_Linear_Form_Abstract_Store& lf_store,
+16535:             FP_Linear_Form& result) const {
+16535:   if (!first_operand->linearize(int_store, lf_store, result)) {
+16535:     return false;
+16535:   }
+16535:   FP_Linear_Form rel_error;
+16535:   relative_error(result, rel_error);
+16535:   result += rel_error;
+16535:   FP_Linear_Form linearized_second_operand;
+16535:   if (!second_operand->linearize(int_store, lf_store,
+16535:                       linearized_second_operand)) {
+16535:     return false;
+16535:   }
+16535:   result -= linearized_second_operand;
+16535:   relative_error(linearized_second_operand, rel_error);
+16535:   result += rel_error;
+16535:   result += this->absolute_error;
+16535:   return !this->overflows(result);
+16535: }
+16535: 
+16535: }
+16535: # 220 "../../src/Difference_Floating_Point_Expression_defs.hh" 2
+16535: # 27 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/Multiplication_Floating_Point_Expression_defs.hh" 1
+16535: # 30 "../../src/Multiplication_Floating_Point_Expression_defs.hh"
+16535: # 1 "../../src/Multiplication_Floating_Point_Expression_types.hh" 1
+16535: # 16 "../../src/Multiplication_Floating_Point_Expression_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: class Multiplication_Floating_Point_Expression;
+16535: 
+16535: }
+16535: # 31 "../../src/Multiplication_Floating_Point_Expression_defs.hh" 2
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: void
+16535: swap(Multiplication_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
+16535:      Multiplication_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y);
+16535: # 130 "../../src/Multiplication_Floating_Point_Expression_defs.hh"
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: class Multiplication_Floating_Point_Expression
+16535:   : public Floating_Point_Expression<FP_Interval_Type, FP_Format> {
+16535: 
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535:   ::FP_Linear_Form FP_Linear_Form;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535:   ::FP_Interval_Abstract_Store FP_Interval_Abstract_Store;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535:   FP_Linear_Form_Abstract_Store FP_Linear_Form_Abstract_Store;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::boundary_type
+16535:   boundary_type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::info_type info_type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Multiplication_Floating_Point_Expression(
+16535:            Floating_Point_Expression<FP_Interval_Type, FP_Format>* const x,
+16535:            Floating_Point_Expression<FP_Interval_Type, FP_Format>* const y);
+16535: 
+16535: 
+16535:   ~Multiplication_Floating_Point_Expression();
+16535: # 210 "../../src/Multiplication_Floating_Point_Expression_defs.hh"
+16535:   bool linearize(const FP_Interval_Abstract_Store& int_store,
+16535:                          const FP_Linear_Form_Abstract_Store& lf_store,
+16535:                        FP_Linear_Form& result) const;
+16535: 
+16535: 
+16535:   void m_swap(Multiplication_Floating_Point_Expression<FP_Interval_Type,
+16535:                                                        FP_Format>& y);
+16535: 
+16535: private:
+16535: 
+16535: 
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>* first_operand;
+16535: 
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>* second_operand;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Multiplication_Floating_Point_Expression(
+16535:          const Multiplication_Floating_Point_Expression<FP_Interval_Type,
+16535:                                                         FP_Format>& e);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Multiplication_Floating_Point_Expression<FP_Interval_Type, FP_Format>&
+16535:   operator=(const Multiplication_Floating_Point_Expression<FP_Interval_Type,
+16535:             FP_Format>& e);
+16535: 
+16535: 
+16535: };
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Multiplication_Floating_Point_Expression_inlines.hh" 1
+16535: # 30 "../../src/Multiplication_Floating_Point_Expression_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline
+16535: Multiplication_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::Multiplication_Floating_Point_Expression(
+16535:          Floating_Point_Expression<FP_Interval_Type, FP_Format>* const x,
+16535:          Floating_Point_Expression<FP_Interval_Type, FP_Format>* const y)
+16535:   : first_operand(x), second_operand(y) {
+16535:   
+16535: # 39 "../../src/Multiplication_Floating_Point_Expression_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 39 "../../src/Multiplication_Floating_Point_Expression_inlines.hh"
+16535:                ;
+16535:   
+16535: # 40 "../../src/Multiplication_Floating_Point_Expression_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 40 "../../src/Multiplication_Floating_Point_Expression_inlines.hh"
+16535:                ;
+16535: }
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline
+16535: Multiplication_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::~Multiplication_Floating_Point_Expression() {
+16535:   delete first_operand;
+16535:   delete second_operand;
+16535: }
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline void
+16535: Multiplication_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::m_swap(Multiplication_Floating_Point_Expression<FP_Interval_Type,
+16535:                                                   FP_Format>& y) {
+16535:   using std::swap;
+16535:   swap(first_operand, y.first_operand);
+16535:   swap(second_operand, y.second_operand);
+16535: }
+16535: 
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline void
+16535: swap(Multiplication_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
+16535:      Multiplication_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 249 "../../src/Multiplication_Floating_Point_Expression_defs.hh" 2
+16535: # 1 "../../src/Multiplication_Floating_Point_Expression_templates.hh" 1
+16535: # 28 "../../src/Multiplication_Floating_Point_Expression_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: bool Multiplication_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::linearize(const FP_Interval_Abstract_Store& int_store,
+16535:             const FP_Linear_Form_Abstract_Store& lf_store,
+16535:             FP_Linear_Form& result) const {
+16535: # 48 "../../src/Multiplication_Floating_Point_Expression_templates.hh"
+16535:   bool intervalize_first;
+16535:   FP_Linear_Form linearized_first_operand;
+16535:   if (!first_operand->linearize(int_store, lf_store,
+16535:                                linearized_first_operand)) {
+16535:     return false;
+16535:   }
+16535:   FP_Interval_Type intervalized_first_operand;
+16535:   this->intervalize(linearized_first_operand, int_store,
+16535:                     intervalized_first_operand);
+16535:   FP_Linear_Form linearized_second_operand;
+16535:   if (!second_operand->linearize(int_store, lf_store,
+16535:                                 linearized_second_operand)) {
+16535:     return false;
+16535:   }
+16535:   FP_Interval_Type intervalized_second_operand;
+16535:   this->intervalize(linearized_second_operand, int_store,
+16535:                     intervalized_second_operand);
+16535: 
+16535: 
+16535:   if (intervalized_first_operand.is_bounded()) {
+16535:     if (intervalized_second_operand.is_bounded()) {
+16535:       boundary_type first_interval_size
+16535:         = intervalized_first_operand.upper()
+16535:         - intervalized_first_operand.lower();
+16535:       boundary_type second_interval_size
+16535:         = intervalized_second_operand.upper()
+16535:         - intervalized_second_operand.lower();
+16535:       if (first_interval_size <= second_interval_size) {
+16535:         intervalize_first = true;
+16535:       }
+16535:       else {
+16535:         intervalize_first = false;
+16535:       }
+16535:     }
+16535:     else {
+16535:       intervalize_first = true;
+16535:     }
+16535:   }
+16535:   else {
+16535:     if (intervalized_second_operand.is_bounded()) {
+16535:       intervalize_first = false;
+16535:     }
+16535:     else {
+16535:       return false;
+16535:     }
+16535:   }
+16535: 
+16535: 
+16535: 
+16535:   if (intervalize_first) {
+16535:     relative_error(linearized_second_operand, result);
+16535:     linearized_second_operand *= intervalized_first_operand;
+16535:     result *= intervalized_first_operand;
+16535:     result += linearized_second_operand;
+16535:   }
+16535:   else {
+16535:     relative_error(linearized_first_operand, result);
+16535:     linearized_first_operand *= intervalized_second_operand;
+16535:     result *= intervalized_second_operand;
+16535:     result += linearized_first_operand;
+16535:   }
+16535: 
+16535:   result += this->absolute_error;
+16535:   return !this->overflows(result);
+16535: }
+16535: 
+16535: }
+16535: # 250 "../../src/Multiplication_Floating_Point_Expression_defs.hh" 2
+16535: # 28 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/Division_Floating_Point_Expression_defs.hh" 1
+16535: # 30 "../../src/Division_Floating_Point_Expression_defs.hh"
+16535: # 1 "../../src/Division_Floating_Point_Expression_types.hh" 1
+16535: # 16 "../../src/Division_Floating_Point_Expression_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: class Division_Floating_Point_Expression;
+16535: 
+16535: }
+16535: # 31 "../../src/Division_Floating_Point_Expression_defs.hh" 2
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: void swap(Division_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
+16535:           Division_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y);
+16535: # 117 "../../src/Division_Floating_Point_Expression_defs.hh"
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: class Division_Floating_Point_Expression
+16535:   : public Floating_Point_Expression<FP_Interval_Type, FP_Format> {
+16535: 
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535:   ::FP_Linear_Form FP_Linear_Form;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535:   ::FP_Interval_Abstract_Store FP_Interval_Abstract_Store;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535:   FP_Linear_Form_Abstract_Store FP_Linear_Form_Abstract_Store;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::boundary_type
+16535:   boundary_type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::info_type info_type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Division_Floating_Point_Expression(
+16535:            Floating_Point_Expression<FP_Interval_Type, FP_Format>* const num,
+16535:            Floating_Point_Expression<FP_Interval_Type, FP_Format>* const den);
+16535: 
+16535: 
+16535:   ~Division_Floating_Point_Expression();
+16535: # 197 "../../src/Division_Floating_Point_Expression_defs.hh"
+16535:   bool linearize(const FP_Interval_Abstract_Store& int_store,
+16535:                  const FP_Linear_Form_Abstract_Store& lf_store,
+16535:                  FP_Linear_Form& result) const;
+16535: 
+16535: 
+16535:   void m_swap(Division_Floating_Point_Expression<FP_Interval_Type,
+16535:                                                  FP_Format>& y);
+16535: 
+16535: private:
+16535: 
+16535: 
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>* first_operand;
+16535: 
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>* second_operand;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Division_Floating_Point_Expression(
+16535:          const Division_Floating_Point_Expression<FP_Interval_Type,
+16535:                                                   FP_Format>& e);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Division_Floating_Point_Expression<FP_Interval_Type, FP_Format>&
+16535:   operator=(const Division_Floating_Point_Expression<FP_Interval_Type,
+16535:             FP_Format>& e);
+16535: 
+16535: };
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Division_Floating_Point_Expression_inlines.hh" 1
+16535: # 29 "../../src/Division_Floating_Point_Expression_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline
+16535: Division_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::Division_Floating_Point_Expression(
+16535:          Floating_Point_Expression<FP_Interval_Type, FP_Format>* const num,
+16535:          Floating_Point_Expression<FP_Interval_Type, FP_Format>* const den)
+16535:   : first_operand(num), second_operand(den) {
+16535:   
+16535: # 38 "../../src/Division_Floating_Point_Expression_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 38 "../../src/Division_Floating_Point_Expression_inlines.hh"
+16535:                  ;
+16535:   
+16535: # 39 "../../src/Division_Floating_Point_Expression_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 39 "../../src/Division_Floating_Point_Expression_inlines.hh"
+16535:                  ;
+16535: }
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline
+16535: Division_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::~Division_Floating_Point_Expression() {
+16535:   delete first_operand;
+16535:   delete second_operand;
+16535: }
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline void
+16535: Division_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::m_swap(Division_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y) {
+16535:   using std::swap;
+16535:   swap(first_operand, y.first_operand);
+16535:   swap(second_operand, y.second_operand);
+16535: }
+16535: 
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline void
+16535: swap(Division_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
+16535:      Division_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 235 "../../src/Division_Floating_Point_Expression_defs.hh" 2
+16535: # 1 "../../src/Division_Floating_Point_Expression_templates.hh" 1
+16535: # 28 "../../src/Division_Floating_Point_Expression_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: bool Division_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::linearize(const FP_Interval_Abstract_Store& int_store,
+16535:             const FP_Linear_Form_Abstract_Store& lf_store,
+16535:             FP_Linear_Form& result) const {
+16535:   FP_Linear_Form linearized_second_operand;
+16535:   if (!second_operand->linearize(int_store, lf_store,
+16535:                                 linearized_second_operand)) {
+16535:     return false;
+16535:   }
+16535:   FP_Interval_Type intervalized_second_operand;
+16535:   this->intervalize(linearized_second_operand, int_store,
+16535:                     intervalized_second_operand);
+16535: 
+16535: 
+16535:   if (intervalized_second_operand.lower() <= 0
+16535:       && intervalized_second_operand.upper() >= 0) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   if (!first_operand->linearize(int_store, lf_store, result)) {
+16535:     return false;
+16535:   }
+16535:   FP_Linear_Form rel_error;
+16535:   relative_error(result, rel_error);
+16535:   result /= intervalized_second_operand;
+16535:   rel_error /= intervalized_second_operand;
+16535:   result += rel_error;
+16535:   result += this->absolute_error;
+16535:   return !this->overflows(result);
+16535: }
+16535: 
+16535: }
+16535: # 236 "../../src/Division_Floating_Point_Expression_defs.hh" 2
+16535: # 29 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/Opposite_Floating_Point_Expression_defs.hh" 1
+16535: # 30 "../../src/Opposite_Floating_Point_Expression_defs.hh"
+16535: # 1 "../../src/Opposite_Floating_Point_Expression_types.hh" 1
+16535: # 16 "../../src/Opposite_Floating_Point_Expression_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: class Opposite_Floating_Point_Expression;
+16535: 
+16535: }
+16535: # 31 "../../src/Opposite_Floating_Point_Expression_defs.hh" 2
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: template<typename FP_Interval_Type, typename FP_Format>
+16535: void swap(Opposite_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
+16535:           Opposite_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y);
+16535: # 80 "../../src/Opposite_Floating_Point_Expression_defs.hh"
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: class Opposite_Floating_Point_Expression
+16535:   : public Floating_Point_Expression<FP_Interval_Type, FP_Format> {
+16535: 
+16535: public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535:   FP_Linear_Form FP_Linear_Form;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535:   FP_Interval_Abstract_Store FP_Interval_Abstract_Store;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535:   FP_Linear_Form_Abstract_Store FP_Linear_Form_Abstract_Store;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::boundary_type
+16535:   boundary_type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   typedef typename
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>::info_type info_type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   explicit Opposite_Floating_Point_Expression(
+16535:            Floating_Point_Expression<FP_Interval_Type, FP_Format>* const op);
+16535: 
+16535: 
+16535:   ~Opposite_Floating_Point_Expression();
+16535: # 159 "../../src/Opposite_Floating_Point_Expression_defs.hh"
+16535:   bool linearize(const FP_Interval_Abstract_Store& int_store,
+16535:                  const FP_Linear_Form_Abstract_Store& lf_store,
+16535:                  FP_Linear_Form& result) const;
+16535: 
+16535: 
+16535:   void m_swap(Opposite_Floating_Point_Expression& y);
+16535: 
+16535: private:
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Opposite_Floating_Point_Expression(
+16535:                           const Opposite_Floating_Point_Expression& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Opposite_Floating_Point_Expression& operator=(
+16535:                           const Opposite_Floating_Point_Expression& y);
+16535: 
+16535: 
+16535:   Floating_Point_Expression<FP_Interval_Type, FP_Format>* operand;
+16535: 
+16535: };
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Opposite_Floating_Point_Expression_inlines.hh" 1
+16535: # 29 "../../src/Opposite_Floating_Point_Expression_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline
+16535: Opposite_Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535: Opposite_Floating_Point_Expression(
+16535:          Floating_Point_Expression<FP_Interval_Type, FP_Format>* const op)
+16535:   : operand(op)
+16535: {
+16535:   
+16535: # 38 "../../src/Opposite_Floating_Point_Expression_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 38 "../../src/Opposite_Floating_Point_Expression_inlines.hh"
+16535:                 ;
+16535: }
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline
+16535: Opposite_Floating_Point_Expression<FP_Interval_Type, FP_Format>::
+16535: ~Opposite_Floating_Point_Expression() {
+16535:   delete operand;
+16535: }
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline void
+16535: Opposite_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::m_swap(Opposite_Floating_Point_Expression& y) {
+16535:   using std::swap;
+16535:   swap(operand, y.operand);
+16535: }
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline bool
+16535: Opposite_Floating_Point_Expression<FP_Interval_Type, FP_Format>
+16535: ::linearize(const FP_Interval_Abstract_Store& int_store,
+16535:             const FP_Linear_Form_Abstract_Store& lf_store,
+16535:             FP_Linear_Form& result) const {
+16535:   if (!operand->linearize(int_store, lf_store, result)) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   result.negate();
+16535:   return true;
+16535: }
+16535: 
+16535: 
+16535: template <typename FP_Interval_Type, typename FP_Format>
+16535: inline void
+16535: swap(Opposite_Floating_Point_Expression<FP_Interval_Type, FP_Format>& x,
+16535:      Opposite_Floating_Point_Expression<FP_Interval_Type, FP_Format>& y) {
+16535:   x.m_swap(y);
+16535: }
+16535: 
+16535: }
+16535: # 192 "../../src/Opposite_Floating_Point_Expression_defs.hh" 2
+16535: # 30 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/Watchdog_defs.hh" 1
+16535: # 27 "../../src/Watchdog_defs.hh"
+16535: # 1 "../../src/Watchdog_types.hh" 1
+16535: # 16 "../../src/Watchdog_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Watchdog;
+16535: 
+16535: }
+16535: # 28 "../../src/Watchdog_defs.hh" 2
+16535: # 1 "../../src/Time_defs.hh" 1
+16535: # 27 "../../src/Time_defs.hh"
+16535: # 1 "../../src/Time_types.hh" 1
+16535: # 16 "../../src/Time_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: namespace Watchdog {
+16535: 
+16535: class Time;
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 28 "../../src/Time_defs.hh" 2
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: namespace Watchdog {
+16535: 
+16535: 
+16535: bool operator==(const Time& x, const Time& y);
+16535: 
+16535: 
+16535: bool operator!=(const Time& x, const Time& y);
+16535: 
+16535: 
+16535: bool operator<(const Time& x, const Time& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: bool operator<=(const Time& x, const Time& y);
+16535: 
+16535: 
+16535: bool operator>(const Time& x, const Time& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: bool operator>=(const Time& x, const Time& y);
+16535: 
+16535: 
+16535: Time operator+(const Time& x, const Time& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: Time operator-(const Time& x, const Time& y);
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: 
+16535: class Parma_Polyhedra_Library::Implementation::Watchdog::Time {
+16535: public:
+16535: 
+16535:   Time();
+16535: 
+16535: 
+16535:   explicit Time(long centisecs);
+16535: 
+16535: 
+16535:   Time(long s, long m);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   long seconds() const;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   long microseconds() const;
+16535: 
+16535: 
+16535:   Time& operator+=(const Time& y);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Time& operator-=(const Time& y);
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535: private:
+16535: 
+16535:   static const long USECS_PER_SEC = 1000000L;
+16535: 
+16535: 
+16535:   static const long CSECS_PER_SEC = 100L;
+16535: 
+16535: 
+16535:   long secs;
+16535: 
+16535: 
+16535:   long microsecs;
+16535: };
+16535: 
+16535: # 1 "../../src/Time_inlines.hh" 1
+16535: # 27 "../../src/Time_inlines.hh"
+16535: # 1 "/usr/include/c++/8/cassert" 1 3
+16535: # 41 "/usr/include/c++/8/cassert" 3
+16535:        
+16535: # 42 "/usr/include/c++/8/cassert" 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/assert.h" 1 3 4
+16535: # 44 "/usr/include/c++/8/cassert" 2 3
+16535: # 28 "../../src/Time_inlines.hh" 2
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: namespace Watchdog {
+16535: 
+16535: inline
+16535: Time::Time()
+16535:   : secs(0), microsecs(0) {
+16535:   
+16535: # 38 "../../src/Time_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 38 "../../src/Time_inlines.hh"
+16535:              ;
+16535: }
+16535: 
+16535: inline
+16535: Time::Time(long centisecs)
+16535:   : secs(centisecs / CSECS_PER_SEC),
+16535:     microsecs((centisecs % CSECS_PER_SEC) * (USECS_PER_SEC/CSECS_PER_SEC)) {
+16535:   
+16535: # 45 "../../src/Time_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 45 "../../src/Time_inlines.hh"
+16535:              ;
+16535: }
+16535: 
+16535: inline
+16535: Time::Time(long s, long m)
+16535:   : secs(s),
+16535:     microsecs(m) {
+16535:   if (microsecs >= USECS_PER_SEC) {
+16535:     secs += microsecs / USECS_PER_SEC;
+16535:     microsecs %= USECS_PER_SEC;
+16535:   }
+16535:   
+16535: # 56 "../../src/Time_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 56 "../../src/Time_inlines.hh"
+16535:              ;
+16535: }
+16535: 
+16535: inline long
+16535: Time::seconds() const {
+16535:   return secs;
+16535: }
+16535: 
+16535: inline long
+16535: Time::microseconds() const {
+16535:   return microsecs;
+16535: }
+16535: 
+16535: inline Time&
+16535: Time::operator+=(const Time& y) {
+16535:   long r_secs = secs + y.secs;
+16535:   long r_microsecs = microsecs + y.microsecs;
+16535:   if (r_microsecs >= USECS_PER_SEC) {
+16535:     ++r_secs;
+16535:     r_microsecs %= USECS_PER_SEC;
+16535:   }
+16535:   secs = r_secs;
+16535:   microsecs = r_microsecs;
+16535:   
+16535: # 79 "../../src/Time_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 79 "../../src/Time_inlines.hh"
+16535:              ;
+16535:   return *this;
+16535: }
+16535: 
+16535: inline Time&
+16535: Time::operator-=(const Time& y) {
+16535:   long r_secs = secs - y.secs;
+16535:   long r_microsecs = microsecs - y.microsecs;
+16535:   if (r_microsecs < 0) {
+16535:     --r_secs;
+16535:     r_microsecs += USECS_PER_SEC;
+16535:   }
+16535:   if (r_secs < 0) {
+16535:     r_secs = 0;
+16535:     r_microsecs = 0;
+16535:   }
+16535:   secs = r_secs;
+16535:   microsecs = r_microsecs;
+16535:   
+16535: # 97 "../../src/Time_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 97 "../../src/Time_inlines.hh"
+16535:              ;
+16535:   return *this;
+16535: }
+16535: 
+16535: inline Time
+16535: operator+(const Time& x, const Time& y) {
+16535:   Time z = x;
+16535:   z += y;
+16535:   return z;
+16535: }
+16535: 
+16535: inline Time
+16535: operator-(const Time& x, const Time& y) {
+16535:   Time z = x;
+16535:   z -= y;
+16535:   return z;
+16535: }
+16535: 
+16535: inline bool
+16535: operator==(const Time& x, const Time& y) {
+16535:   
+16535: # 117 "../../src/Time_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 117 "../../src/Time_inlines.hh"
+16535:                          ;
+16535:   return x.seconds() == y.seconds() && y.microseconds() == y.microseconds();
+16535: }
+16535: 
+16535: inline bool
+16535: operator!=(const Time& x, const Time& y) {
+16535:   
+16535: # 123 "../../src/Time_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 123 "../../src/Time_inlines.hh"
+16535:                          ;
+16535:   return !(x == y);
+16535: }
+16535: 
+16535: inline bool
+16535: operator<(const Time& x, const Time& y) {
+16535:   
+16535: # 129 "../../src/Time_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 129 "../../src/Time_inlines.hh"
+16535:                          ;
+16535:   return x.seconds() < y.seconds()
+16535:     || (x.seconds() == y.seconds() && x.microseconds() < y.microseconds());
+16535: }
+16535: 
+16535: inline bool
+16535: operator<=(const Time& x, const Time& y) {
+16535:   return x < y || x == y;
+16535: }
+16535: 
+16535: inline bool
+16535: operator>(const Time& x, const Time& y) {
+16535:   return y < x;
+16535: }
+16535: 
+16535: inline bool
+16535: operator>=(const Time& x, const Time& y) {
+16535:   return y <= x;
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 125 "../../src/Time_defs.hh" 2
+16535: # 29 "../../src/Watchdog_defs.hh" 2
+16535: # 1 "../../src/Handler_types.hh" 1
+16535: # 16 "../../src/Handler_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: namespace Watchdog {
+16535: 
+16535: class Handler;
+16535: 
+16535: template <typename Flag_Base, typename Flag>
+16535: class Handler_Flag;
+16535: 
+16535: class Handler_Function;
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 30 "../../src/Watchdog_defs.hh" 2
+16535: # 1 "../../src/Pending_List_defs.hh" 1
+16535: # 27 "../../src/Pending_List_defs.hh"
+16535: # 1 "../../src/Pending_List_types.hh" 1
+16535: # 16 "../../src/Pending_List_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: namespace Watchdog {
+16535: 
+16535: template <typename Traits>
+16535: class Pending_List;
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 28 "../../src/Pending_List_defs.hh" 2
+16535: # 1 "../../src/Pending_Element_defs.hh" 1
+16535: # 27 "../../src/Pending_Element_defs.hh"
+16535: # 1 "../../src/Pending_Element_types.hh" 1
+16535: # 16 "../../src/Pending_Element_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: namespace Watchdog {
+16535: 
+16535: template <class Threshold>
+16535: class Pending_Element;
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 28 "../../src/Pending_Element_defs.hh" 2
+16535: # 1 "../../src/Doubly_Linked_Object_defs.hh" 1
+16535: # 27 "../../src/Doubly_Linked_Object_defs.hh"
+16535: # 1 "../../src/Doubly_Linked_Object_types.hh" 1
+16535: # 16 "../../src/Doubly_Linked_Object_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: class Doubly_Linked_Object;
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 28 "../../src/Doubly_Linked_Object_defs.hh" 2
+16535: # 1 "../../src/EList_types.hh" 1
+16535: # 16 "../../src/EList_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: template <typename T>
+16535: class EList;
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 29 "../../src/Doubly_Linked_Object_defs.hh" 2
+16535: # 1 "../../src/EList_Iterator_types.hh" 1
+16535: # 16 "../../src/EList_Iterator_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: template <typename T>
+16535: class EList_Iterator;
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 30 "../../src/Doubly_Linked_Object_defs.hh" 2
+16535: 
+16535: 
+16535: class Parma_Polyhedra_Library::Implementation::Doubly_Linked_Object {
+16535: public:
+16535: 
+16535:   Doubly_Linked_Object();
+16535: 
+16535: 
+16535:   Doubly_Linked_Object(Doubly_Linked_Object* f, Doubly_Linked_Object* b);
+16535: 
+16535: 
+16535:   void insert_before(Doubly_Linked_Object& y);
+16535: 
+16535: 
+16535:   void insert_after(Doubly_Linked_Object& y);
+16535: 
+16535: 
+16535:   Doubly_Linked_Object* erase();
+16535: 
+16535: 
+16535:   ~Doubly_Linked_Object();
+16535: 
+16535: private:
+16535: 
+16535:   Doubly_Linked_Object* next;
+16535: 
+16535: 
+16535:   Doubly_Linked_Object* prev;
+16535: 
+16535:   template <typename T> friend class EList;
+16535:   template <typename T> friend class EList_Iterator;
+16535: };
+16535: 
+16535: # 1 "../../src/Doubly_Linked_Object_inlines.hh" 1
+16535: # 27 "../../src/Doubly_Linked_Object_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: inline
+16535: Doubly_Linked_Object::Doubly_Linked_Object() {
+16535: }
+16535: 
+16535: inline
+16535: Doubly_Linked_Object::Doubly_Linked_Object(Doubly_Linked_Object* f,
+16535:                                            Doubly_Linked_Object* b)
+16535:   : next(f),
+16535:     prev(b) {
+16535: }
+16535: 
+16535: inline void
+16535: Doubly_Linked_Object::insert_before(Doubly_Linked_Object& y) {
+16535:   y.next = this;
+16535:   y.prev = prev;
+16535:   prev->next = &y;
+16535:   prev = &y;
+16535: }
+16535: 
+16535: inline void
+16535: Doubly_Linked_Object::insert_after(Doubly_Linked_Object& y) {
+16535:   y.next = next;
+16535:   y.prev = this;
+16535:   next->prev = &y;
+16535:   next = &y;
+16535: }
+16535: 
+16535: inline Doubly_Linked_Object*
+16535: Doubly_Linked_Object::erase() {
+16535:   next->prev = prev;
+16535:   prev->next = next;
+16535:   return next;
+16535: }
+16535: 
+16535: inline
+16535: Doubly_Linked_Object::~Doubly_Linked_Object() {
+16535:   erase();
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 64 "../../src/Doubly_Linked_Object_defs.hh" 2
+16535: # 29 "../../src/Pending_Element_defs.hh" 2
+16535: # 38 "../../src/Pending_Element_defs.hh"
+16535: template <typename Threshold>
+16535: class Parma_Polyhedra_Library::Implementation::Watchdog::Pending_Element
+16535:   : public Doubly_Linked_Object {
+16535: public:
+16535: 
+16535:   Pending_Element(const Threshold& deadline,
+16535:                   const Handler& handler,
+16535:                   bool& expired_flag);
+16535: 
+16535: 
+16535:   void assign(const Threshold& deadline,
+16535:               const Handler& handler,
+16535:               bool& expired_flag);
+16535: 
+16535: 
+16535:   const Threshold& deadline() const;
+16535: 
+16535: 
+16535:   const Handler& handler() const;
+16535: 
+16535: 
+16535:   bool& expired_flag() const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535: private:
+16535: 
+16535:   Threshold d;
+16535: 
+16535: 
+16535:   const Handler* p_h;
+16535: 
+16535: 
+16535:   bool* p_f;
+16535: };
+16535: 
+16535: # 1 "../../src/Pending_Element_inlines.hh" 1
+16535: # 27 "../../src/Pending_Element_inlines.hh"
+16535: # 1 "/usr/include/c++/8/cassert" 1 3
+16535: # 41 "/usr/include/c++/8/cassert" 3
+16535:        
+16535: # 42 "/usr/include/c++/8/cassert" 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/assert.h" 1 3 4
+16535: # 44 "/usr/include/c++/8/cassert" 2 3
+16535: # 28 "../../src/Pending_Element_inlines.hh" 2
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: namespace Watchdog {
+16535: 
+16535: template <typename Threshold>
+16535: inline bool
+16535: Pending_Element<Threshold>::OK() const {
+16535:   return true;
+16535: }
+16535: 
+16535: template <typename Threshold>
+16535: inline
+16535: Pending_Element<Threshold>::Pending_Element(const Threshold& deadline,
+16535:                                             const Handler& handler,
+16535:                                             bool& expired_flag)
+16535:   : d(deadline), p_h(&handler), p_f(&expired_flag) {
+16535:   
+16535: # 47 "../../src/Pending_Element_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 47 "../../src/Pending_Element_inlines.hh"
+16535:              ;
+16535: }
+16535: 
+16535: template <typename Threshold>
+16535: inline void
+16535: Pending_Element<Threshold>::assign(const Threshold& deadline,
+16535:                                    const Handler& handler,
+16535:                                    bool& expired_flag) {
+16535:   d = deadline;
+16535:   p_h = &handler;
+16535:   p_f = &expired_flag;
+16535:   
+16535: # 58 "../../src/Pending_Element_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 58 "../../src/Pending_Element_inlines.hh"
+16535:              ;
+16535: }
+16535: 
+16535: template <typename Threshold>
+16535: inline const Threshold&
+16535: Pending_Element<Threshold>::deadline() const {
+16535:   return d;
+16535: }
+16535: 
+16535: template <typename Threshold>
+16535: inline const Handler&
+16535: Pending_Element<Threshold>::handler() const {
+16535:   return *p_h;
+16535: }
+16535: 
+16535: template <typename Threshold>
+16535: inline bool&
+16535: Pending_Element<Threshold>::expired_flag() const {
+16535:   return *p_f;
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 76 "../../src/Pending_Element_defs.hh" 2
+16535: # 29 "../../src/Pending_List_defs.hh" 2
+16535: # 1 "../../src/EList_defs.hh" 1
+16535: # 29 "../../src/EList_defs.hh"
+16535: # 1 "../../src/EList_Iterator_defs.hh" 1
+16535: # 30 "../../src/EList_Iterator_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: 
+16535: template <typename T>
+16535: bool operator==(const EList_Iterator<T>& x, const EList_Iterator<T>& y);
+16535: 
+16535: 
+16535: template <typename T>
+16535: bool operator!=(const EList_Iterator<T>& x, const EList_Iterator<T>& y);
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: 
+16535: template <typename T>
+16535: class Parma_Polyhedra_Library::Implementation::EList_Iterator {
+16535: public:
+16535: 
+16535:   EList_Iterator();
+16535: 
+16535: 
+16535:   explicit EList_Iterator(Doubly_Linked_Object* p);
+16535: 
+16535: 
+16535:   EList_Iterator& operator=(Doubly_Linked_Object* p);
+16535: 
+16535: 
+16535:   T* operator->();
+16535: 
+16535: 
+16535:   T& operator*();
+16535: 
+16535: 
+16535:   EList_Iterator& operator++();
+16535: 
+16535: 
+16535:   EList_Iterator operator++(int);
+16535: 
+16535: 
+16535:   EList_Iterator& operator--();
+16535: 
+16535: 
+16535:   EList_Iterator operator--(int);
+16535: 
+16535: private:
+16535: 
+16535:   Doubly_Linked_Object* ptr;
+16535: 
+16535:   friend bool operator==<T>(const EList_Iterator& x, const EList_Iterator& y);
+16535: 
+16535:   friend bool operator!=<T>(const EList_Iterator& x, const EList_Iterator& y);
+16535: };
+16535: 
+16535: # 1 "../../src/EList_Iterator_inlines.hh" 1
+16535: # 29 "../../src/EList_Iterator_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: template <typename T>
+16535: inline
+16535: EList_Iterator<T>::EList_Iterator() {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: EList_Iterator<T>::EList_Iterator(Doubly_Linked_Object* p)
+16535:   : ptr(p) {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline EList_Iterator<T>&
+16535: EList_Iterator<T>::operator=(Doubly_Linked_Object* p) {
+16535:   ptr = p;
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline T*
+16535: EList_Iterator<T>::operator->() {
+16535:   return static_cast<T*>(ptr);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline T&
+16535: EList_Iterator<T>::operator*() {
+16535:   return *operator->();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline EList_Iterator<T>&
+16535: EList_Iterator<T>::operator++() {
+16535:   ptr = ptr->next;
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline EList_Iterator<T>
+16535: EList_Iterator<T>::operator++(int) {
+16535:   EList_Iterator tmp = *this;
+16535:   ++*this;
+16535:   return tmp;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline EList_Iterator<T>&
+16535: EList_Iterator<T>::operator--() {
+16535:   ptr = ptr->prev;
+16535:   return *this;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline EList_Iterator<T>
+16535: EList_Iterator<T>::operator--(int) {
+16535:   EList_Iterator tmp = *this;
+16535:   --*this;
+16535:   return tmp;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: operator==(const EList_Iterator<T>& x, const EList_Iterator<T>& y) {
+16535:   return x.ptr == y.ptr;
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: operator!=(const EList_Iterator<T>& x, const EList_Iterator<T>& y) {
+16535:   return x.ptr != y.ptr;
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 87 "../../src/EList_Iterator_defs.hh" 2
+16535: # 30 "../../src/EList_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: template <typename T>
+16535: class Parma_Polyhedra_Library::Implementation::EList
+16535:   : private Doubly_Linked_Object {
+16535: public:
+16535: 
+16535:   typedef EList_Iterator<const T> const_iterator;
+16535: 
+16535: 
+16535:   typedef EList_Iterator<T> iterator;
+16535: 
+16535: 
+16535:   EList();
+16535: 
+16535: 
+16535:   ~EList();
+16535: 
+16535: 
+16535:   void push_front(T& obj);
+16535: 
+16535: 
+16535:   void push_back(T& obj);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   iterator insert(iterator position, T& obj);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   iterator erase(iterator position);
+16535: 
+16535: 
+16535:   bool empty() const;
+16535: 
+16535: 
+16535:   iterator begin();
+16535: 
+16535: 
+16535:   iterator end();
+16535: 
+16535: 
+16535:   const_iterator begin() const;
+16535: 
+16535: 
+16535:   const_iterator end() const;
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: };
+16535: 
+16535: # 1 "../../src/EList_inlines.hh" 1
+16535: # 27 "../../src/EList_inlines.hh"
+16535: # 1 "/usr/include/c++/8/cassert" 1 3
+16535: # 41 "/usr/include/c++/8/cassert" 3
+16535:        
+16535: # 42 "/usr/include/c++/8/cassert" 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/assert.h" 1 3 4
+16535: # 44 "/usr/include/c++/8/cassert" 2 3
+16535: # 28 "../../src/EList_inlines.hh" 2
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: template <typename T>
+16535: inline
+16535: EList<T>::EList()
+16535:   : Doubly_Linked_Object(this, this) {
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: EList<T>::push_front(T& obj) {
+16535:   next->insert_before(obj);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: EList<T>::push_back(T& obj) {
+16535:   prev->insert_after(obj);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename EList<T>::iterator
+16535: EList<T>::insert(iterator position, T& obj) {
+16535:   position->insert_before(obj);
+16535:   return iterator(&obj);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename EList<T>::iterator
+16535: EList<T>::begin() {
+16535:   return iterator(next);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename EList<T>::iterator
+16535: EList<T>::end() {
+16535:   return iterator(this);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename EList<T>::const_iterator
+16535: EList<T>::begin() const {
+16535:   return const_iterator(next);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename EList<T>::const_iterator
+16535: EList<T>::end() const {
+16535:   return const_iterator(const_cast<EList<T>*>(this));
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: EList<T>::empty() const {
+16535:   return begin() == end();
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline typename EList<T>::iterator
+16535: EList<T>::erase(iterator position) {
+16535:   
+16535: # 91 "../../src/EList_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 91 "../../src/EList_inlines.hh"
+16535:                  ;
+16535:   return iterator(position->erase());
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline
+16535: EList<T>::~EList() {
+16535: 
+16535:   for (iterator i = begin(), lend = end(), next; i != lend; i = next) {
+16535:     next = erase(i);
+16535:     delete &*i;
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline bool
+16535: EList<T>::OK() const {
+16535:   for (const_iterator i = begin(), lend = end(); i != lend; ++i) {
+16535:     if (!i->OK()) {
+16535:       return false;
+16535:     }
+16535:   }
+16535: 
+16535:   return true;
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 89 "../../src/EList_defs.hh" 2
+16535: # 30 "../../src/Pending_List_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: template <typename Traits>
+16535: class Parma_Polyhedra_Library::Implementation::Watchdog::Pending_List {
+16535: public:
+16535: 
+16535:   typedef typename EList<Pending_Element<typename Traits::Threshold> >::iterator iterator;
+16535: 
+16535: 
+16535:   typedef typename EList<Pending_Element<typename Traits::Threshold> >::const_iterator const_iterator;
+16535: 
+16535: 
+16535:   Pending_List();
+16535: 
+16535: 
+16535:   ~Pending_List();
+16535: 
+16535: 
+16535:   iterator insert(const typename Traits::Threshold& deadline,
+16535:                   const Handler& handler,
+16535:                   bool& expired_flag);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   iterator erase(iterator position);
+16535: 
+16535: 
+16535:   bool empty() const;
+16535: 
+16535: 
+16535:   iterator begin();
+16535: 
+16535: 
+16535:   iterator end();
+16535: 
+16535: 
+16535:   bool OK() const;
+16535: 
+16535: private:
+16535:   EList<Pending_Element<typename Traits::Threshold> > active_list;
+16535:   EList<Pending_Element<typename Traits::Threshold> > free_list;
+16535: };
+16535: 
+16535: # 1 "../../src/Pending_List_inlines.hh" 1
+16535: # 27 "../../src/Pending_List_inlines.hh"
+16535: # 1 "/usr/include/c++/8/cassert" 1 3
+16535: # 41 "/usr/include/c++/8/cassert" 3
+16535:        
+16535: # 42 "/usr/include/c++/8/cassert" 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/assert.h" 1 3 4
+16535: # 44 "/usr/include/c++/8/cassert" 2 3
+16535: # 28 "../../src/Pending_List_inlines.hh" 2
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: namespace Watchdog {
+16535: 
+16535: template <typename Traits>
+16535: inline
+16535: Pending_List<Traits>::Pending_List()
+16535:   : active_list(),
+16535:     free_list() {
+16535:   
+16535: # 40 "../../src/Pending_List_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 40 "../../src/Pending_List_inlines.hh"
+16535:              ;
+16535: }
+16535: 
+16535: template <typename Traits>
+16535: inline
+16535: Pending_List<Traits>::~Pending_List() {
+16535: }
+16535: 
+16535: template <typename Traits>
+16535: inline typename Pending_List<Traits>::iterator
+16535: Pending_List<Traits>::begin() {
+16535:   return active_list.begin();
+16535: }
+16535: 
+16535: template <typename Traits>
+16535: inline typename Pending_List<Traits>::iterator
+16535: Pending_List<Traits>::end() {
+16535:   return active_list.end();
+16535: }
+16535: 
+16535: template <typename Traits>
+16535: inline bool
+16535: Pending_List<Traits>::empty() const {
+16535:   return active_list.empty();
+16535: }
+16535: 
+16535: template <typename Traits>
+16535: inline typename Pending_List<Traits>::iterator
+16535: Pending_List<Traits>::erase(iterator position) {
+16535:   
+16535: # 69 "../../src/Pending_List_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 69 "../../src/Pending_List_inlines.hh"
+16535:                  ;
+16535:   iterator next = active_list.erase(position);
+16535:   free_list.push_back(*position);
+16535:   
+16535: # 72 "../../src/Pending_List_inlines.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 72 "../../src/Pending_List_inlines.hh"
+16535:              ;
+16535:   return next;
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 77 "../../src/Pending_List_defs.hh" 2
+16535: # 1 "../../src/Pending_List_templates.hh" 1
+16535: # 29 "../../src/Pending_List_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: namespace Watchdog {
+16535: 
+16535: template <typename Traits>
+16535: typename Pending_List<Traits>::iterator
+16535: Pending_List<Traits>::insert(const typename Traits::Threshold& deadline,
+16535:                              const Handler& handler,
+16535:                              bool& expired_flag) {
+16535:   iterator position = active_list.begin();
+16535:   for (iterator active_list_end = active_list.end();
+16535:        position != active_list_end
+16535:          && Traits::less_than(position->deadline(), deadline);
+16535:        ++position) {
+16535:   }
+16535:   iterator pending_element_p;
+16535: 
+16535:   if (free_list.empty()) {
+16535:     pending_element_p
+16535:       = new Pending_Element<typename Traits::Threshold>(deadline,
+16535:                                                         handler,
+16535:                                                         expired_flag);
+16535:   }
+16535:   else {
+16535:     pending_element_p = free_list.begin();
+16535:     free_list.erase(pending_element_p);
+16535:     pending_element_p->assign(deadline, handler, expired_flag);
+16535:   }
+16535:   iterator r = active_list.insert(position, *pending_element_p);
+16535:   
+16535: # 60 "../../src/Pending_List_templates.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 60 "../../src/Pending_List_templates.hh"
+16535:              ;
+16535:   return r;
+16535: }
+16535: 
+16535: template <typename Traits>
+16535: bool
+16535: Pending_List<Traits>::OK() const {
+16535:   if (!active_list.OK()) {
+16535:     return false;
+16535:   }
+16535:   if (!free_list.OK()) {
+16535:     return false;
+16535:   }
+16535: 
+16535:   const typename Traits::Threshold* old;
+16535:   const_iterator i = active_list.begin();
+16535:   old = &i->deadline();
+16535:   ++i;
+16535:   for (const_iterator active_list_end = active_list.end(); i != active_list_end; ++i) {
+16535:     const typename Traits::Threshold& t = i->deadline();
+16535:     if (Traits::less_than(t, *old)) {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       return false;
+16535:     }
+16535:     old = &t;
+16535:   }
+16535:   return true;
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 78 "../../src/Pending_List_defs.hh" 2
+16535: # 31 "../../src/Watchdog_defs.hh" 2
+16535: # 1 "/usr/include/c++/8/cassert" 1 3
+16535: # 41 "/usr/include/c++/8/cassert" 3
+16535:        
+16535: # 42 "/usr/include/c++/8/cassert" 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/assert.h" 1 3 4
+16535: # 44 "/usr/include/c++/8/cassert" 2 3
+16535: # 32 "../../src/Watchdog_defs.hh" 2
+16535: # 1 "/usr/include/c++/8/functional" 1 3
+16535: # 46 "/usr/include/c++/8/functional" 3
+16535:        
+16535: # 47 "/usr/include/c++/8/functional" 3
+16535: # 59 "/usr/include/c++/8/functional" 3
+16535: # 1 "/usr/include/c++/8/bits/std_function.h" 1 3
+16535: # 33 "/usr/include/c++/8/bits/std_function.h" 3
+16535:        
+16535: # 34 "/usr/include/c++/8/bits/std_function.h" 3
+16535: # 47 "/usr/include/c++/8/bits/std_function.h" 3
+16535: 
+16535: # 47 "/usr/include/c++/8/bits/std_function.h" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   class bad_function_call : public std::exception
+16535:   {
+16535:   public:
+16535:     virtual ~bad_function_call() noexcept;
+16535: 
+16535:     const char* what() const noexcept;
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_location_invariant
+16535:     : is_trivially_copyable<_Tp>::type
+16535:     { };
+16535: 
+16535:   class _Undefined_class;
+16535: 
+16535:   union _Nocopy_types
+16535:   {
+16535:     void* _M_object;
+16535:     const void* _M_const_object;
+16535:     void (*_M_function_pointer)();
+16535:     void (_Undefined_class::*_M_member_pointer)();
+16535:   };
+16535: 
+16535:   union [[gnu::may_alias]] _Any_data
+16535:   {
+16535:     void* _M_access() { return &_M_pod_data[0]; }
+16535:     const void* _M_access() const { return &_M_pod_data[0]; }
+16535: 
+16535:     template<typename _Tp>
+16535:       _Tp&
+16535:       _M_access()
+16535:       { return *static_cast<_Tp*>(_M_access()); }
+16535: 
+16535:     template<typename _Tp>
+16535:       const _Tp&
+16535:       _M_access() const
+16535:       { return *static_cast<const _Tp*>(_M_access()); }
+16535: 
+16535:     _Nocopy_types _M_unused;
+16535:     char _M_pod_data[sizeof(_Nocopy_types)];
+16535:   };
+16535: 
+16535:   enum _Manager_operation
+16535:   {
+16535:     __get_type_info,
+16535:     __get_functor_ptr,
+16535:     __clone_functor,
+16535:     __destroy_functor
+16535:   };
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     struct _Simple_type_wrapper
+16535:     {
+16535:       _Simple_type_wrapper(_Tp __value) : __value(__value) { }
+16535: 
+16535:       _Tp __value;
+16535:     };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_location_invariant<_Simple_type_wrapper<_Tp> >
+16535:     : __is_location_invariant<_Tp>
+16535:     { };
+16535: 
+16535:   template<typename _Signature>
+16535:     class function;
+16535: 
+16535: 
+16535:   class _Function_base
+16535:   {
+16535:   public:
+16535:     static const std::size_t _M_max_size = sizeof(_Nocopy_types);
+16535:     static const std::size_t _M_max_align = __alignof__(_Nocopy_types);
+16535: 
+16535:     template<typename _Functor>
+16535:       class _Base_manager
+16535:       {
+16535:       protected:
+16535:  static const bool __stored_locally =
+16535:  (__is_location_invariant<_Functor>::value
+16535:   && sizeof(_Functor) <= _M_max_size
+16535:   && __alignof__(_Functor) <= _M_max_align
+16535:   && (_M_max_align % __alignof__(_Functor) == 0));
+16535: 
+16535:  typedef integral_constant<bool, __stored_locally> _Local_storage;
+16535: 
+16535: 
+16535:  static _Functor*
+16535:  _M_get_pointer(const _Any_data& __source)
+16535:  {
+16535:    const _Functor* __ptr =
+16535:      __stored_locally? std::__addressof(__source._M_access<_Functor>())
+16535:                                  : __source._M_access<_Functor*>();
+16535:    return const_cast<_Functor*>(__ptr);
+16535:  }
+16535: 
+16535: 
+16535: 
+16535:  static void
+16535:  _M_clone(_Any_data& __dest, const _Any_data& __source, true_type)
+16535:  {
+16535:    ::new (__dest._M_access()) _Functor(__source._M_access<_Functor>());
+16535:  }
+16535: 
+16535: 
+16535: 
+16535:  static void
+16535:  _M_clone(_Any_data& __dest, const _Any_data& __source, false_type)
+16535:  {
+16535:    __dest._M_access<_Functor*>() =
+16535:      new _Functor(*__source._M_access<_Functor*>());
+16535:  }
+16535: 
+16535: 
+16535: 
+16535:  static void
+16535:  _M_destroy(_Any_data& __victim, true_type)
+16535:  {
+16535:    __victim._M_access<_Functor>().~_Functor();
+16535:  }
+16535: 
+16535: 
+16535:  static void
+16535:  _M_destroy(_Any_data& __victim, false_type)
+16535:  {
+16535:    delete __victim._M_access<_Functor*>();
+16535:  }
+16535: 
+16535:       public:
+16535:  static bool
+16535:  _M_manager(_Any_data& __dest, const _Any_data& __source,
+16535:      _Manager_operation __op)
+16535:  {
+16535:    switch (__op)
+16535:      {
+16535: 
+16535:      case __get_type_info:
+16535:        __dest._M_access<const type_info*>() = &typeid(_Functor);
+16535:        break;
+16535: 
+16535:      case __get_functor_ptr:
+16535:        __dest._M_access<_Functor*>() = _M_get_pointer(__source);
+16535:        break;
+16535: 
+16535:      case __clone_functor:
+16535:        _M_clone(__dest, __source, _Local_storage());
+16535:        break;
+16535: 
+16535:      case __destroy_functor:
+16535:        _M_destroy(__dest, _Local_storage());
+16535:        break;
+16535:      }
+16535:    return false;
+16535:  }
+16535: 
+16535:  static void
+16535:  _M_init_functor(_Any_data& __functor, _Functor&& __f)
+16535:  { _M_init_functor(__functor, std::move(__f), _Local_storage()); }
+16535: 
+16535:  template<typename _Signature>
+16535:    static bool
+16535:    _M_not_empty_function(const function<_Signature>& __f)
+16535:    { return static_cast<bool>(__f); }
+16535: 
+16535:  template<typename _Tp>
+16535:    static bool
+16535:    _M_not_empty_function(_Tp* __fp)
+16535:    { return __fp != nullptr; }
+16535: 
+16535:  template<typename _Class, typename _Tp>
+16535:    static bool
+16535:    _M_not_empty_function(_Tp _Class::* __mp)
+16535:    { return __mp != nullptr; }
+16535: 
+16535:  template<typename _Tp>
+16535:    static bool
+16535:    _M_not_empty_function(const _Tp&)
+16535:    { return true; }
+16535: 
+16535:       private:
+16535:  static void
+16535:  _M_init_functor(_Any_data& __functor, _Functor&& __f, true_type)
+16535:  { ::new (__functor._M_access()) _Functor(std::move(__f)); }
+16535: 
+16535:  static void
+16535:  _M_init_functor(_Any_data& __functor, _Functor&& __f, false_type)
+16535:  { __functor._M_access<_Functor*>() = new _Functor(std::move(__f)); }
+16535:       };
+16535: 
+16535:     _Function_base() : _M_manager(nullptr) { }
+16535: 
+16535:     ~_Function_base()
+16535:     {
+16535:       if (_M_manager)
+16535:  _M_manager(_M_functor, _M_functor, __destroy_functor);
+16535:     }
+16535: 
+16535:     bool _M_empty() const { return !_M_manager; }
+16535: 
+16535:     typedef bool (*_Manager_type)(_Any_data&, const _Any_data&,
+16535:       _Manager_operation);
+16535: 
+16535:     _Any_data _M_functor;
+16535:     _Manager_type _M_manager;
+16535:   };
+16535: 
+16535:   template<typename _Signature, typename _Functor>
+16535:     class _Function_handler;
+16535: 
+16535:   template<typename _Res, typename _Functor, typename... _ArgTypes>
+16535:     class _Function_handler<_Res(_ArgTypes...), _Functor>
+16535:     : public _Function_base::_Base_manager<_Functor>
+16535:     {
+16535:       typedef _Function_base::_Base_manager<_Functor> _Base;
+16535: 
+16535:     public:
+16535:       static _Res
+16535:       _M_invoke(const _Any_data& __functor, _ArgTypes&&... __args)
+16535:       {
+16535:  return (*_Base::_M_get_pointer(__functor))(
+16535:      std::forward<_ArgTypes>(__args)...);
+16535:       }
+16535:     };
+16535: 
+16535:   template<typename _Functor, typename... _ArgTypes>
+16535:     class _Function_handler<void(_ArgTypes...), _Functor>
+16535:     : public _Function_base::_Base_manager<_Functor>
+16535:     {
+16535:       typedef _Function_base::_Base_manager<_Functor> _Base;
+16535: 
+16535:      public:
+16535:       static void
+16535:       _M_invoke(const _Any_data& __functor, _ArgTypes&&... __args)
+16535:       {
+16535:  (*_Base::_M_get_pointer(__functor))(
+16535:      std::forward<_ArgTypes>(__args)...);
+16535:       }
+16535:     };
+16535: 
+16535:   template<typename _Class, typename _Member, typename _Res,
+16535:     typename... _ArgTypes>
+16535:     class _Function_handler<_Res(_ArgTypes...), _Member _Class::*>
+16535:     : public _Function_handler<void(_ArgTypes...), _Member _Class::*>
+16535:     {
+16535:       typedef _Function_handler<void(_ArgTypes...), _Member _Class::*>
+16535:  _Base;
+16535: 
+16535:      public:
+16535:       static _Res
+16535:       _M_invoke(const _Any_data& __functor, _ArgTypes&&... __args)
+16535:       {
+16535:  return std::__invoke(_Base::_M_get_pointer(__functor)->__value,
+16535:         std::forward<_ArgTypes>(__args)...);
+16535:       }
+16535:     };
+16535: 
+16535:   template<typename _Class, typename _Member, typename... _ArgTypes>
+16535:     class _Function_handler<void(_ArgTypes...), _Member _Class::*>
+16535:     : public _Function_base::_Base_manager<
+16535:    _Simple_type_wrapper< _Member _Class::* > >
+16535:     {
+16535:       typedef _Member _Class::* _Functor;
+16535:       typedef _Simple_type_wrapper<_Functor> _Wrapper;
+16535:       typedef _Function_base::_Base_manager<_Wrapper> _Base;
+16535: 
+16535:     public:
+16535:       static bool
+16535:       _M_manager(_Any_data& __dest, const _Any_data& __source,
+16535:    _Manager_operation __op)
+16535:       {
+16535:  switch (__op)
+16535:    {
+16535: 
+16535:    case __get_type_info:
+16535:      __dest._M_access<const type_info*>() = &typeid(_Functor);
+16535:      break;
+16535: 
+16535:    case __get_functor_ptr:
+16535:      __dest._M_access<_Functor*>() =
+16535:        &_Base::_M_get_pointer(__source)->__value;
+16535:      break;
+16535: 
+16535:    default:
+16535:      _Base::_M_manager(__dest, __source, __op);
+16535:    }
+16535:  return false;
+16535:       }
+16535: 
+16535:       static void
+16535:       _M_invoke(const _Any_data& __functor, _ArgTypes&&... __args)
+16535:       {
+16535:  std::__invoke(_Base::_M_get_pointer(__functor)->__value,
+16535:         std::forward<_ArgTypes>(__args)...);
+16535:       }
+16535:     };
+16535: 
+16535:   template<typename _From, typename _To>
+16535:     using __check_func_return_type
+16535:       = __or_<is_void<_To>, is_same<_From, _To>, is_convertible<_From, _To>>;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes>
+16535:     class function<_Res(_ArgTypes...)>
+16535:     : public _Maybe_unary_or_binary_function<_Res, _ArgTypes...>,
+16535:       private _Function_base
+16535:     {
+16535:       template<typename _Func,
+16535:         typename _Res2 = typename result_of<_Func&(_ArgTypes...)>::type>
+16535:  struct _Callable : __check_func_return_type<_Res2, _Res> { };
+16535: 
+16535: 
+16535: 
+16535:       template<typename _Tp>
+16535:  struct _Callable<function, _Tp> : false_type { };
+16535: 
+16535:       template<typename _Cond, typename _Tp>
+16535:  using _Requires = typename enable_if<_Cond::value, _Tp>::type;
+16535: 
+16535:     public:
+16535:       typedef _Res result_type;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       function() noexcept
+16535:       : _Function_base() { }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       function(nullptr_t) noexcept
+16535:       : _Function_base() { }
+16535: # 413 "/usr/include/c++/8/bits/std_function.h" 3
+16535:       function(const function& __x);
+16535: # 422 "/usr/include/c++/8/bits/std_function.h" 3
+16535:       function(function&& __x) noexcept : _Function_base()
+16535:       {
+16535:  __x.swap(*this);
+16535:       }
+16535: # 443 "/usr/include/c++/8/bits/std_function.h" 3
+16535:       template<typename _Functor,
+16535:         typename = _Requires<__not_<is_same<_Functor, function>>, void>,
+16535:         typename = _Requires<_Callable<_Functor>, void>>
+16535:  function(_Functor);
+16535: # 460 "/usr/include/c++/8/bits/std_function.h" 3
+16535:       function&
+16535:       operator=(const function& __x)
+16535:       {
+16535:  function(__x).swap(*this);
+16535:  return *this;
+16535:       }
+16535: # 478 "/usr/include/c++/8/bits/std_function.h" 3
+16535:       function&
+16535:       operator=(function&& __x) noexcept
+16535:       {
+16535:  function(std::move(__x)).swap(*this);
+16535:  return *this;
+16535:       }
+16535: # 492 "/usr/include/c++/8/bits/std_function.h" 3
+16535:       function&
+16535:       operator=(nullptr_t) noexcept
+16535:       {
+16535:  if (_M_manager)
+16535:    {
+16535:      _M_manager(_M_functor, _M_functor, __destroy_functor);
+16535:      _M_manager = nullptr;
+16535:      _M_invoker = nullptr;
+16535:    }
+16535:  return *this;
+16535:       }
+16535: # 520 "/usr/include/c++/8/bits/std_function.h" 3
+16535:       template<typename _Functor>
+16535:  _Requires<_Callable<typename decay<_Functor>::type>, function&>
+16535:  operator=(_Functor&& __f)
+16535:  {
+16535:    function(std::forward<_Functor>(__f)).swap(*this);
+16535:    return *this;
+16535:  }
+16535: 
+16535: 
+16535:       template<typename _Functor>
+16535:  function&
+16535:  operator=(reference_wrapper<_Functor> __f) noexcept
+16535:  {
+16535:    function(__f).swap(*this);
+16535:    return *this;
+16535:  }
+16535: # 546 "/usr/include/c++/8/bits/std_function.h" 3
+16535:       void swap(function& __x) noexcept
+16535:       {
+16535:  std::swap(_M_functor, __x._M_functor);
+16535:  std::swap(_M_manager, __x._M_manager);
+16535:  std::swap(_M_invoker, __x._M_invoker);
+16535:       }
+16535: # 563 "/usr/include/c++/8/bits/std_function.h" 3
+16535:       explicit operator bool() const noexcept
+16535:       { return !_M_empty(); }
+16535: # 576 "/usr/include/c++/8/bits/std_function.h" 3
+16535:       _Res operator()(_ArgTypes... __args) const;
+16535: # 589 "/usr/include/c++/8/bits/std_function.h" 3
+16535:       const type_info& target_type() const noexcept;
+16535: # 602 "/usr/include/c++/8/bits/std_function.h" 3
+16535:       template<typename _Functor> _Functor* target() noexcept;
+16535: 
+16535:       template<typename _Functor> const _Functor* target() const noexcept;
+16535: 
+16535: 
+16535: 
+16535:     private:
+16535:       using _Invoker_type = _Res (*)(const _Any_data&, _ArgTypes&&...);
+16535:       _Invoker_type _M_invoker;
+16535:   };
+16535: # 651 "/usr/include/c++/8/bits/std_function.h" 3
+16535:   template<typename _Res, typename... _ArgTypes>
+16535:     function<_Res(_ArgTypes...)>::
+16535:     function(const function& __x)
+16535:     : _Function_base()
+16535:     {
+16535:       if (static_cast<bool>(__x))
+16535:  {
+16535:    __x._M_manager(_M_functor, __x._M_functor, __clone_functor);
+16535:    _M_invoker = __x._M_invoker;
+16535:    _M_manager = __x._M_manager;
+16535:  }
+16535:     }
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes>
+16535:     template<typename _Functor, typename, typename>
+16535:       function<_Res(_ArgTypes...)>::
+16535:       function(_Functor __f)
+16535:       : _Function_base()
+16535:       {
+16535:  typedef _Function_handler<_Res(_ArgTypes...), _Functor> _My_handler;
+16535: 
+16535:  if (_My_handler::_M_not_empty_function(__f))
+16535:    {
+16535:      _My_handler::_M_init_functor(_M_functor, std::move(__f));
+16535:      _M_invoker = &_My_handler::_M_invoke;
+16535:      _M_manager = &_My_handler::_M_manager;
+16535:    }
+16535:       }
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes>
+16535:     _Res
+16535:     function<_Res(_ArgTypes...)>::
+16535:     operator()(_ArgTypes... __args) const
+16535:     {
+16535:       if (_M_empty())
+16535:  __throw_bad_function_call();
+16535:       return _M_invoker(_M_functor, std::forward<_ArgTypes>(__args)...);
+16535:     }
+16535: 
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes>
+16535:     const type_info&
+16535:     function<_Res(_ArgTypes...)>::
+16535:     target_type() const noexcept
+16535:     {
+16535:       if (_M_manager)
+16535:  {
+16535:    _Any_data __typeinfo_result;
+16535:    _M_manager(__typeinfo_result, _M_functor, __get_type_info);
+16535:    return *__typeinfo_result._M_access<const type_info*>();
+16535:  }
+16535:       else
+16535:  return typeid(void);
+16535:     }
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes>
+16535:     template<typename _Functor>
+16535:       _Functor*
+16535:       function<_Res(_ArgTypes...)>::
+16535:       target() noexcept
+16535:       {
+16535:  const function* __const_this = this;
+16535:  const _Functor* __func = __const_this->template target<_Functor>();
+16535:  return const_cast<_Functor*>(__func);
+16535:       }
+16535: 
+16535:   template<typename _Res, typename... _ArgTypes>
+16535:     template<typename _Functor>
+16535:       const _Functor*
+16535:       function<_Res(_ArgTypes...)>::
+16535:       target() const noexcept
+16535:       {
+16535:  if (typeid(_Functor) == target_type() && _M_manager)
+16535:    {
+16535:      _Any_data __ptr;
+16535:      _M_manager(__ptr, _M_functor, __get_functor_ptr);
+16535:      return __ptr._M_access<const _Functor*>();
+16535:    }
+16535:  else
+16535:    return nullptr;
+16535:       }
+16535: # 743 "/usr/include/c++/8/bits/std_function.h" 3
+16535:   template<typename _Res, typename... _Args>
+16535:     inline bool
+16535:     operator==(const function<_Res(_Args...)>& __f, nullptr_t) noexcept
+16535:     { return !static_cast<bool>(__f); }
+16535: 
+16535: 
+16535:   template<typename _Res, typename... _Args>
+16535:     inline bool
+16535:     operator==(nullptr_t, const function<_Res(_Args...)>& __f) noexcept
+16535:     { return !static_cast<bool>(__f); }
+16535: # 761 "/usr/include/c++/8/bits/std_function.h" 3
+16535:   template<typename _Res, typename... _Args>
+16535:     inline bool
+16535:     operator!=(const function<_Res(_Args...)>& __f, nullptr_t) noexcept
+16535:     { return static_cast<bool>(__f); }
+16535: 
+16535: 
+16535:   template<typename _Res, typename... _Args>
+16535:     inline bool
+16535:     operator!=(nullptr_t, const function<_Res(_Args...)>& __f) noexcept
+16535:     { return static_cast<bool>(__f); }
+16535: # 782 "/usr/include/c++/8/bits/std_function.h" 3
+16535:   template<typename _Res, typename... _Args>
+16535:     inline void
+16535:     swap(function<_Res(_Args...)>& __x, function<_Res(_Args...)>& __y) noexcept
+16535:     { __x.swap(__y); }
+16535: 
+16535: 
+16535: }
+16535: # 60 "/usr/include/c++/8/functional" 2 3
+16535: # 68 "/usr/include/c++/8/functional" 3
+16535: namespace std __attribute__ ((__visibility__ ("default")))
+16535: {
+16535: 
+16535: # 86 "/usr/include/c++/8/functional" 3
+16535:   template<typename _MemFunPtr,
+16535:     bool __is_mem_fn = is_member_function_pointer<_MemFunPtr>::value>
+16535:     class _Mem_fn_base
+16535:     : public _Mem_fn_traits<_MemFunPtr>::__maybe_type
+16535:     {
+16535:       using _Traits = _Mem_fn_traits<_MemFunPtr>;
+16535: 
+16535:       using _Arity = typename _Traits::__arity;
+16535:       using _Varargs = typename _Traits::__vararg;
+16535: 
+16535:       template<typename _Func, typename... _BoundArgs>
+16535:  friend struct _Bind_check_arity;
+16535: 
+16535:       _MemFunPtr _M_pmf;
+16535: 
+16535:     public:
+16535: 
+16535:       using result_type = typename _Traits::__result_type;
+16535: 
+16535:       explicit constexpr
+16535:       _Mem_fn_base(_MemFunPtr __pmf) noexcept : _M_pmf(__pmf) { }
+16535: 
+16535:       template<typename... _Args>
+16535:  auto
+16535:  operator()(_Args&&... __args) const
+16535:  noexcept(noexcept(
+16535:        std::__invoke(_M_pmf, std::forward<_Args>(__args)...)))
+16535:  -> decltype(std::__invoke(_M_pmf, std::forward<_Args>(__args)...))
+16535:  { return std::__invoke(_M_pmf, std::forward<_Args>(__args)...); }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _MemObjPtr>
+16535:     class _Mem_fn_base<_MemObjPtr, false>
+16535:     {
+16535:       using _Arity = integral_constant<size_t, 0>;
+16535:       using _Varargs = false_type;
+16535: 
+16535:       template<typename _Func, typename... _BoundArgs>
+16535:  friend struct _Bind_check_arity;
+16535: 
+16535:       _MemObjPtr _M_pm;
+16535: 
+16535:     public:
+16535:       explicit constexpr
+16535:       _Mem_fn_base(_MemObjPtr __pm) noexcept : _M_pm(__pm) { }
+16535: 
+16535:       template<typename _Tp>
+16535:  auto
+16535:  operator()(_Tp&& __obj) const
+16535:  noexcept(noexcept(std::__invoke(_M_pm, std::forward<_Tp>(__obj))))
+16535:  -> decltype(std::__invoke(_M_pm, std::forward<_Tp>(__obj)))
+16535:  { return std::__invoke(_M_pm, std::forward<_Tp>(__obj)); }
+16535:     };
+16535: 
+16535:   template<typename _MemberPointer>
+16535:     struct _Mem_fn;
+16535: 
+16535:   template<typename _Res, typename _Class>
+16535:     struct _Mem_fn<_Res _Class::*>
+16535:     : _Mem_fn_base<_Res _Class::*>
+16535:     {
+16535:       using _Mem_fn_base<_Res _Class::*>::_Mem_fn_base;
+16535:     };
+16535: # 158 "/usr/include/c++/8/functional" 3
+16535:   template<typename _Tp, typename _Class>
+16535:     inline _Mem_fn<_Tp _Class::*>
+16535:     mem_fn(_Tp _Class::* __pm) noexcept
+16535:     {
+16535:       return _Mem_fn<_Tp _Class::*>(__pm);
+16535:     }
+16535: # 173 "/usr/include/c++/8/functional" 3
+16535:   template<typename _Tp>
+16535:     struct is_bind_expression
+16535:     : public false_type { };
+16535: # 184 "/usr/include/c++/8/functional" 3
+16535:   template<typename _Tp>
+16535:     struct is_placeholder
+16535:     : public integral_constant<int, 0>
+16535:     { };
+16535: # 199 "/usr/include/c++/8/functional" 3
+16535:   template<int _Num> struct _Placeholder { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   namespace placeholders
+16535:   {
+16535: 
+16535: 
+16535: 
+16535: 
+16535:     extern const _Placeholder<1> _1;
+16535:     extern const _Placeholder<2> _2;
+16535:     extern const _Placeholder<3> _3;
+16535:     extern const _Placeholder<4> _4;
+16535:     extern const _Placeholder<5> _5;
+16535:     extern const _Placeholder<6> _6;
+16535:     extern const _Placeholder<7> _7;
+16535:     extern const _Placeholder<8> _8;
+16535:     extern const _Placeholder<9> _9;
+16535:     extern const _Placeholder<10> _10;
+16535:     extern const _Placeholder<11> _11;
+16535:     extern const _Placeholder<12> _12;
+16535:     extern const _Placeholder<13> _13;
+16535:     extern const _Placeholder<14> _14;
+16535:     extern const _Placeholder<15> _15;
+16535:     extern const _Placeholder<16> _16;
+16535:     extern const _Placeholder<17> _17;
+16535:     extern const _Placeholder<18> _18;
+16535:     extern const _Placeholder<19> _19;
+16535:     extern const _Placeholder<20> _20;
+16535:     extern const _Placeholder<21> _21;
+16535:     extern const _Placeholder<22> _22;
+16535:     extern const _Placeholder<23> _23;
+16535:     extern const _Placeholder<24> _24;
+16535:     extern const _Placeholder<25> _25;
+16535:     extern const _Placeholder<26> _26;
+16535:     extern const _Placeholder<27> _27;
+16535:     extern const _Placeholder<28> _28;
+16535:     extern const _Placeholder<29> _29;
+16535:   }
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<int _Num>
+16535:     struct is_placeholder<_Placeholder<_Num> >
+16535:     : public integral_constant<int, _Num>
+16535:     { };
+16535: 
+16535:   template<int _Num>
+16535:     struct is_placeholder<const _Placeholder<_Num> >
+16535:     : public integral_constant<int, _Num>
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535:   template<std::size_t __i, typename _Tuple>
+16535:     using _Safe_tuple_element_t
+16535:       = typename enable_if<(__i < tuple_size<_Tuple>::value),
+16535:       tuple_element<__i, _Tuple>>::type::type;
+16535: # 275 "/usr/include/c++/8/functional" 3
+16535:   template<typename _Arg,
+16535:     bool _IsBindExp = is_bind_expression<_Arg>::value,
+16535:     bool _IsPlaceholder = (is_placeholder<_Arg>::value > 0)>
+16535:     class _Mu;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp>
+16535:     class _Mu<reference_wrapper<_Tp>, false, false>
+16535:     {
+16535:     public:
+16535: 
+16535: 
+16535: 
+16535: 
+16535:       template<typename _CVRef, typename _Tuple>
+16535:  _Tp&
+16535:  operator()(_CVRef& __arg, _Tuple&) const volatile
+16535:  { return __arg.get(); }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Arg>
+16535:     class _Mu<_Arg, true, false>
+16535:     {
+16535:     public:
+16535:       template<typename _CVArg, typename... _Args>
+16535:  auto
+16535:  operator()(_CVArg& __arg,
+16535:      tuple<_Args...>& __tuple) const volatile
+16535:  -> decltype(__arg(declval<_Args>()...))
+16535:  {
+16535: 
+16535:    typedef typename _Build_index_tuple<sizeof...(_Args)>::__type
+16535:      _Indexes;
+16535:    return this->__call(__arg, __tuple, _Indexes());
+16535:  }
+16535: 
+16535:     private:
+16535: 
+16535: 
+16535:       template<typename _CVArg, typename... _Args, std::size_t... _Indexes>
+16535:  auto
+16535:  __call(_CVArg& __arg, tuple<_Args...>& __tuple,
+16535:         const _Index_tuple<_Indexes...>&) const volatile
+16535:  -> decltype(__arg(declval<_Args>()...))
+16535:  {
+16535:    return __arg(std::get<_Indexes>(std::move(__tuple))...);
+16535:  }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Arg>
+16535:     class _Mu<_Arg, false, true>
+16535:     {
+16535:     public:
+16535:       template<typename _Tuple>
+16535:  _Safe_tuple_element_t<(is_placeholder<_Arg>::value - 1), _Tuple>&&
+16535:  operator()(const volatile _Arg&, _Tuple& __tuple) const volatile
+16535:  {
+16535:    return
+16535:      ::std::get<(is_placeholder<_Arg>::value - 1)>(std::move(__tuple));
+16535:  }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Arg>
+16535:     class _Mu<_Arg, false, false>
+16535:     {
+16535:     public:
+16535:       template<typename _CVArg, typename _Tuple>
+16535:  _CVArg&&
+16535:  operator()(_CVArg&& __arg, _Tuple&) const volatile
+16535:  { return std::forward<_CVArg>(__arg); }
+16535:     };
+16535: 
+16535: 
+16535:   template<std::size_t _Ind, typename... _Tp>
+16535:     inline auto
+16535:     __volget(volatile tuple<_Tp...>& __tuple)
+16535:     -> __tuple_element_t<_Ind, tuple<_Tp...>> volatile&
+16535:     { return std::get<_Ind>(const_cast<tuple<_Tp...>&>(__tuple)); }
+16535: 
+16535: 
+16535:   template<std::size_t _Ind, typename... _Tp>
+16535:     inline auto
+16535:     __volget(const volatile tuple<_Tp...>& __tuple)
+16535:     -> __tuple_element_t<_Ind, tuple<_Tp...>> const volatile&
+16535:     { return std::get<_Ind>(const_cast<const tuple<_Tp...>&>(__tuple)); }
+16535: 
+16535: 
+16535:   template<typename _Signature>
+16535:     struct _Bind;
+16535: 
+16535:    template<typename _Functor, typename... _Bound_args>
+16535:     class _Bind<_Functor(_Bound_args...)>
+16535:     : public _Weak_result_type<_Functor>
+16535:     {
+16535:       typedef typename _Build_index_tuple<sizeof...(_Bound_args)>::__type
+16535:  _Bound_indexes;
+16535: 
+16535:       _Functor _M_f;
+16535:       tuple<_Bound_args...> _M_bound_args;
+16535: 
+16535: 
+16535:       template<typename _Result, typename... _Args, std::size_t... _Indexes>
+16535:  _Result
+16535:  __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>)
+16535:  {
+16535:    return std::__invoke(_M_f,
+16535:        _Mu<_Bound_args>()(std::get<_Indexes>(_M_bound_args), __args)...
+16535:        );
+16535:  }
+16535: 
+16535: 
+16535:       template<typename _Result, typename... _Args, std::size_t... _Indexes>
+16535:  _Result
+16535:  __call_c(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) const
+16535:  {
+16535:    return std::__invoke(_M_f,
+16535:        _Mu<_Bound_args>()(std::get<_Indexes>(_M_bound_args), __args)...
+16535:        );
+16535:  }
+16535: 
+16535: 
+16535:       template<typename _Result, typename... _Args, std::size_t... _Indexes>
+16535:  _Result
+16535:  __call_v(tuple<_Args...>&& __args,
+16535:    _Index_tuple<_Indexes...>) volatile
+16535:  {
+16535:    return std::__invoke(_M_f,
+16535:        _Mu<_Bound_args>()(__volget<_Indexes>(_M_bound_args), __args)...
+16535:        );
+16535:  }
+16535: 
+16535: 
+16535:       template<typename _Result, typename... _Args, std::size_t... _Indexes>
+16535:  _Result
+16535:  __call_c_v(tuple<_Args...>&& __args,
+16535:      _Index_tuple<_Indexes...>) const volatile
+16535:  {
+16535:    return std::__invoke(_M_f,
+16535:        _Mu<_Bound_args>()(__volget<_Indexes>(_M_bound_args), __args)...
+16535:        );
+16535:  }
+16535: 
+16535:       template<typename _BoundArg, typename _CallArgs>
+16535:  using _Mu_type = decltype(
+16535:      _Mu<typename remove_cv<_BoundArg>::type>()(
+16535:        std::declval<_BoundArg&>(), std::declval<_CallArgs&>()) );
+16535: 
+16535:       template<typename _Fn, typename _CallArgs, typename... _BArgs>
+16535:  using _Res_type_impl
+16535:    = typename result_of< _Fn&(_Mu_type<_BArgs, _CallArgs>&&...) >::type;
+16535: 
+16535:       template<typename _CallArgs>
+16535:  using _Res_type = _Res_type_impl<_Functor, _CallArgs, _Bound_args...>;
+16535: 
+16535:       template<typename _CallArgs>
+16535:  using __dependent = typename
+16535:    enable_if<bool(tuple_size<_CallArgs>::value+1), _Functor>::type;
+16535: 
+16535:       template<typename _CallArgs, template<class> class __cv_quals>
+16535:  using _Res_type_cv = _Res_type_impl<
+16535:    typename __cv_quals<__dependent<_CallArgs>>::type,
+16535:    _CallArgs,
+16535:    typename __cv_quals<_Bound_args>::type...>;
+16535: 
+16535:      public:
+16535:       template<typename... _Args>
+16535:  explicit _Bind(const _Functor& __f, _Args&&... __args)
+16535:  : _M_f(__f), _M_bound_args(std::forward<_Args>(__args)...)
+16535:  { }
+16535: 
+16535:       template<typename... _Args>
+16535:  explicit _Bind(_Functor&& __f, _Args&&... __args)
+16535:  : _M_f(std::move(__f)), _M_bound_args(std::forward<_Args>(__args)...)
+16535:  { }
+16535: 
+16535:       _Bind(const _Bind&) = default;
+16535: 
+16535:       _Bind(_Bind&& __b)
+16535:       : _M_f(std::move(__b._M_f)), _M_bound_args(std::move(__b._M_bound_args))
+16535:       { }
+16535: 
+16535: 
+16535:       template<typename... _Args,
+16535:         typename _Result = _Res_type<tuple<_Args...>>>
+16535:  _Result
+16535:  operator()(_Args&&... __args)
+16535:  {
+16535:    return this->__call<_Result>(
+16535:        std::forward_as_tuple(std::forward<_Args>(__args)...),
+16535:        _Bound_indexes());
+16535:  }
+16535: 
+16535: 
+16535:       template<typename... _Args,
+16535:         typename _Result = _Res_type_cv<tuple<_Args...>, add_const>>
+16535:  _Result
+16535:  operator()(_Args&&... __args) const
+16535:  {
+16535:    return this->__call_c<_Result>(
+16535:        std::forward_as_tuple(std::forward<_Args>(__args)...),
+16535:        _Bound_indexes());
+16535:  }
+16535: # 505 "/usr/include/c++/8/functional" 3
+16535:       template<typename... _Args,
+16535:         typename _Result = _Res_type_cv<tuple<_Args...>, add_volatile>>
+16535: 
+16535:  _Result
+16535:  operator()(_Args&&... __args) volatile
+16535:  {
+16535:    return this->__call_v<_Result>(
+16535:        std::forward_as_tuple(std::forward<_Args>(__args)...),
+16535:        _Bound_indexes());
+16535:  }
+16535: 
+16535: 
+16535:       template<typename... _Args,
+16535:         typename _Result = _Res_type_cv<tuple<_Args...>, add_cv>>
+16535: 
+16535:  _Result
+16535:  operator()(_Args&&... __args) const volatile
+16535:  {
+16535:    return this->__call_c_v<_Result>(
+16535:        std::forward_as_tuple(std::forward<_Args>(__args)...),
+16535:        _Bound_indexes());
+16535:  }
+16535:     };
+16535: 
+16535: 
+16535:   template<typename _Result, typename _Signature>
+16535:     struct _Bind_result;
+16535: 
+16535:   template<typename _Result, typename _Functor, typename... _Bound_args>
+16535:     class _Bind_result<_Result, _Functor(_Bound_args...)>
+16535:     {
+16535:       typedef typename _Build_index_tuple<sizeof...(_Bound_args)>::__type
+16535:  _Bound_indexes;
+16535: 
+16535:       _Functor _M_f;
+16535:       tuple<_Bound_args...> _M_bound_args;
+16535: 
+16535: 
+16535:       template<typename _Res>
+16535:  using __enable_if_void
+16535:    = typename enable_if<is_void<_Res>{}>::type;
+16535: 
+16535:       template<typename _Res>
+16535:  using __disable_if_void
+16535:    = typename enable_if<!is_void<_Res>{}, _Result>::type;
+16535: 
+16535: 
+16535:       template<typename _Res, typename... _Args, std::size_t... _Indexes>
+16535:  __disable_if_void<_Res>
+16535:  __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>)
+16535:  {
+16535:    return std::__invoke(_M_f, _Mu<_Bound_args>()
+16535:         (std::get<_Indexes>(_M_bound_args), __args)...);
+16535:  }
+16535: 
+16535: 
+16535:       template<typename _Res, typename... _Args, std::size_t... _Indexes>
+16535:  __enable_if_void<_Res>
+16535:  __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>)
+16535:  {
+16535:    std::__invoke(_M_f, _Mu<_Bound_args>()
+16535:         (std::get<_Indexes>(_M_bound_args), __args)...);
+16535:  }
+16535: 
+16535: 
+16535:       template<typename _Res, typename... _Args, std::size_t... _Indexes>
+16535:  __disable_if_void<_Res>
+16535:  __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) const
+16535:  {
+16535:    return std::__invoke(_M_f, _Mu<_Bound_args>()
+16535:         (std::get<_Indexes>(_M_bound_args), __args)...);
+16535:  }
+16535: 
+16535: 
+16535:       template<typename _Res, typename... _Args, std::size_t... _Indexes>
+16535:  __enable_if_void<_Res>
+16535:  __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) const
+16535:  {
+16535:    std::__invoke(_M_f, _Mu<_Bound_args>()
+16535:         (std::get<_Indexes>(_M_bound_args), __args)...);
+16535:  }
+16535: 
+16535: 
+16535:       template<typename _Res, typename... _Args, std::size_t... _Indexes>
+16535:  __disable_if_void<_Res>
+16535:  __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) volatile
+16535:  {
+16535:    return std::__invoke(_M_f, _Mu<_Bound_args>()
+16535:         (__volget<_Indexes>(_M_bound_args), __args)...);
+16535:  }
+16535: 
+16535: 
+16535:       template<typename _Res, typename... _Args, std::size_t... _Indexes>
+16535:  __enable_if_void<_Res>
+16535:  __call(tuple<_Args...>&& __args, _Index_tuple<_Indexes...>) volatile
+16535:  {
+16535:    std::__invoke(_M_f, _Mu<_Bound_args>()
+16535:         (__volget<_Indexes>(_M_bound_args), __args)...);
+16535:  }
+16535: 
+16535: 
+16535:       template<typename _Res, typename... _Args, std::size_t... _Indexes>
+16535:  __disable_if_void<_Res>
+16535:  __call(tuple<_Args...>&& __args,
+16535:         _Index_tuple<_Indexes...>) const volatile
+16535:  {
+16535:    return std::__invoke(_M_f, _Mu<_Bound_args>()
+16535:         (__volget<_Indexes>(_M_bound_args), __args)...);
+16535:  }
+16535: 
+16535: 
+16535:       template<typename _Res, typename... _Args, std::size_t... _Indexes>
+16535:  __enable_if_void<_Res>
+16535:  __call(tuple<_Args...>&& __args,
+16535:         _Index_tuple<_Indexes...>) const volatile
+16535:  {
+16535:    std::__invoke(_M_f, _Mu<_Bound_args>()
+16535:         (__volget<_Indexes>(_M_bound_args), __args)...);
+16535:  }
+16535: 
+16535:     public:
+16535:       typedef _Result result_type;
+16535: 
+16535:       template<typename... _Args>
+16535:  explicit _Bind_result(const _Functor& __f, _Args&&... __args)
+16535:  : _M_f(__f), _M_bound_args(std::forward<_Args>(__args)...)
+16535:  { }
+16535: 
+16535:       template<typename... _Args>
+16535:  explicit _Bind_result(_Functor&& __f, _Args&&... __args)
+16535:  : _M_f(std::move(__f)), _M_bound_args(std::forward<_Args>(__args)...)
+16535:  { }
+16535: 
+16535:       _Bind_result(const _Bind_result&) = default;
+16535: 
+16535:       _Bind_result(_Bind_result&& __b)
+16535:       : _M_f(std::move(__b._M_f)), _M_bound_args(std::move(__b._M_bound_args))
+16535:       { }
+16535: 
+16535: 
+16535:       template<typename... _Args>
+16535:  result_type
+16535:  operator()(_Args&&... __args)
+16535:  {
+16535:    return this->__call<_Result>(
+16535:        std::forward_as_tuple(std::forward<_Args>(__args)...),
+16535:        _Bound_indexes());
+16535:  }
+16535: 
+16535: 
+16535:       template<typename... _Args>
+16535:  result_type
+16535:  operator()(_Args&&... __args) const
+16535:  {
+16535:    return this->__call<_Result>(
+16535:        std::forward_as_tuple(std::forward<_Args>(__args)...),
+16535:        _Bound_indexes());
+16535:  }
+16535: 
+16535: 
+16535:       template<typename... _Args>
+16535: 
+16535:  result_type
+16535:  operator()(_Args&&... __args) volatile
+16535:  {
+16535:    return this->__call<_Result>(
+16535:        std::forward_as_tuple(std::forward<_Args>(__args)...),
+16535:        _Bound_indexes());
+16535:  }
+16535: 
+16535: 
+16535:       template<typename... _Args>
+16535: 
+16535:  result_type
+16535:  operator()(_Args&&... __args) const volatile
+16535:  {
+16535:    return this->__call<_Result>(
+16535:        std::forward_as_tuple(std::forward<_Args>(__args)...),
+16535:        _Bound_indexes());
+16535:  }
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Signature>
+16535:     struct is_bind_expression<_Bind<_Signature> >
+16535:     : public true_type { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Signature>
+16535:     struct is_bind_expression<const _Bind<_Signature> >
+16535:     : public true_type { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Signature>
+16535:     struct is_bind_expression<volatile _Bind<_Signature> >
+16535:     : public true_type { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Signature>
+16535:     struct is_bind_expression<const volatile _Bind<_Signature>>
+16535:     : public true_type { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Result, typename _Signature>
+16535:     struct is_bind_expression<_Bind_result<_Result, _Signature>>
+16535:     : public true_type { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Result, typename _Signature>
+16535:     struct is_bind_expression<const _Bind_result<_Result, _Signature>>
+16535:     : public true_type { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Result, typename _Signature>
+16535:     struct is_bind_expression<volatile _Bind_result<_Result, _Signature>>
+16535:     : public true_type { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Result, typename _Signature>
+16535:     struct is_bind_expression<const volatile _Bind_result<_Result, _Signature>>
+16535:     : public true_type { };
+16535: 
+16535:   template<typename _Func, typename... _BoundArgs>
+16535:     struct _Bind_check_arity { };
+16535: 
+16535:   template<typename _Ret, typename... _Args, typename... _BoundArgs>
+16535:     struct _Bind_check_arity<_Ret (*)(_Args...), _BoundArgs...>
+16535:     {
+16535:       static_assert(sizeof...(_BoundArgs) == sizeof...(_Args),
+16535:                    "Wrong number of arguments for function");
+16535:     };
+16535: 
+16535:   template<typename _Ret, typename... _Args, typename... _BoundArgs>
+16535:     struct _Bind_check_arity<_Ret (*)(_Args......), _BoundArgs...>
+16535:     {
+16535:       static_assert(sizeof...(_BoundArgs) >= sizeof...(_Args),
+16535:                    "Wrong number of arguments for function");
+16535:     };
+16535: 
+16535:   template<typename _Tp, typename _Class, typename... _BoundArgs>
+16535:     struct _Bind_check_arity<_Tp _Class::*, _BoundArgs...>
+16535:     {
+16535:       using _Arity = typename _Mem_fn<_Tp _Class::*>::_Arity;
+16535:       using _Varargs = typename _Mem_fn<_Tp _Class::*>::_Varargs;
+16535:       static_assert(_Varargs::value
+16535:       ? sizeof...(_BoundArgs) >= _Arity::value + 1
+16535:       : sizeof...(_BoundArgs) == _Arity::value + 1,
+16535:       "Wrong number of arguments for pointer-to-member");
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Tp, typename _Tp2 = typename decay<_Tp>::type>
+16535:     using __is_socketlike = __or_<is_integral<_Tp2>, is_enum<_Tp2>>;
+16535: 
+16535:   template<bool _SocketLike, typename _Func, typename... _BoundArgs>
+16535:     struct _Bind_helper
+16535:     : _Bind_check_arity<typename decay<_Func>::type, _BoundArgs...>
+16535:     {
+16535:       typedef typename decay<_Func>::type __func_type;
+16535:       typedef _Bind<__func_type(typename decay<_BoundArgs>::type...)> type;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Func, typename... _BoundArgs>
+16535:     struct _Bind_helper<true, _Func, _BoundArgs...>
+16535:     { };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Func, typename... _BoundArgs>
+16535:     inline typename
+16535:     _Bind_helper<__is_socketlike<_Func>::value, _Func, _BoundArgs...>::type
+16535:     bind(_Func&& __f, _BoundArgs&&... __args)
+16535:     {
+16535:       typedef _Bind_helper<false, _Func, _BoundArgs...> __helper_type;
+16535:       return typename __helper_type::type(std::forward<_Func>(__f),
+16535:        std::forward<_BoundArgs>(__args)...);
+16535:     }
+16535: 
+16535:   template<typename _Result, typename _Func, typename... _BoundArgs>
+16535:     struct _Bindres_helper
+16535:     : _Bind_check_arity<typename decay<_Func>::type, _BoundArgs...>
+16535:     {
+16535:       typedef typename decay<_Func>::type __functor_type;
+16535:       typedef _Bind_result<_Result,
+16535:       __functor_type(typename decay<_BoundArgs>::type...)>
+16535:  type;
+16535:     };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Result, typename _Func, typename... _BoundArgs>
+16535:     inline
+16535:     typename _Bindres_helper<_Result, _Func, _BoundArgs...>::type
+16535:     bind(_Func&& __f, _BoundArgs&&... __args)
+16535:     {
+16535:       typedef _Bindres_helper<_Result, _Func, _BoundArgs...> __helper_type;
+16535:       return typename __helper_type::type(std::forward<_Func>(__f),
+16535:        std::forward<_BoundArgs>(__args)...);
+16535:     }
+16535: 
+16535: 
+16535: 
+16535:   template<typename _Fn>
+16535:     class _Not_fn
+16535:     {
+16535:       template<typename _Fn2, typename... _Args>
+16535:  using __inv_res_t = typename __invoke_result<_Fn2, _Args...>::type;
+16535: 
+16535:       template<typename _Tp>
+16535:  static decltype(!std::declval<_Tp>())
+16535:  _S_not() noexcept(noexcept(!std::declval<_Tp>()));
+16535: 
+16535:     public:
+16535:       template<typename _Fn2>
+16535:  _Not_fn(_Fn2&& __fn, int)
+16535:  : _M_fn(std::forward<_Fn2>(__fn)) { }
+16535: 
+16535:       _Not_fn(const _Not_fn& __fn) = default;
+16535:       _Not_fn(_Not_fn&& __fn) = default;
+16535:       ~_Not_fn() = default;
+16535: # 873 "/usr/include/c++/8/functional" 3
+16535:       template<typename... _Args> decltype(_S_not<__inv_res_t<_Fn &, _Args...>>()) operator()(_Args&&... __args) & noexcept(__is_nothrow_invocable<_Fn &, _Args...>::value && noexcept(_S_not<__inv_res_t<_Fn &, _Args...>>())) { return !std::__invoke(std::forward< _Fn & >(_M_fn), std::forward<_Args>(__args)...); }
+16535:       template<typename... _Args> decltype(_S_not<__inv_res_t<_Fn const &, _Args...>>()) operator()(_Args&&... __args) const & noexcept(__is_nothrow_invocable<_Fn const &, _Args...>::value && noexcept(_S_not<__inv_res_t<_Fn const &, _Args...>>())) { return !std::__invoke(std::forward< _Fn const & >(_M_fn), std::forward<_Args>(__args)...); }
+16535:       template<typename... _Args> decltype(_S_not<__inv_res_t<_Fn &&, _Args...>>()) operator()(_Args&&... __args) && noexcept(__is_nothrow_invocable<_Fn &&, _Args...>::value && noexcept(_S_not<__inv_res_t<_Fn &&, _Args...>>())) { return !std::__invoke(std::forward< _Fn && >(_M_fn), std::forward<_Args>(__args)...); }
+16535:       template<typename... _Args> decltype(_S_not<__inv_res_t<_Fn const &&, _Args...>>()) operator()(_Args&&... __args) const && noexcept(__is_nothrow_invocable<_Fn const &&, _Args...>::value && noexcept(_S_not<__inv_res_t<_Fn const &&, _Args...>>())) { return !std::__invoke(std::forward< _Fn const && >(_M_fn), std::forward<_Args>(__args)...); }
+16535: 
+16535: 
+16535:     private:
+16535:       _Fn _M_fn;
+16535:     };
+16535: 
+16535:   template<typename _Tp, typename _Pred>
+16535:     struct __is_byte_like : false_type { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_byte_like<_Tp, equal_to<_Tp>>
+16535:     : __bool_constant<sizeof(_Tp) == 1 && is_integral<_Tp>::value> { };
+16535: 
+16535:   template<typename _Tp>
+16535:     struct __is_byte_like<_Tp, equal_to<void>>
+16535:     : __bool_constant<sizeof(_Tp) == 1 && is_integral<_Tp>::value> { };
+16535: # 1193 "/usr/include/c++/8/functional" 3
+16535: 
+16535: }
+16535: # 33 "../../src/Watchdog_defs.hh" 2
+16535: 
+16535: 
+16535: # 1 "/usr/include/x86_64-linux-gnu/sys/time.h" 1 3 4
+16535: # 34 "/usr/include/x86_64-linux-gnu/sys/time.h" 3 4
+16535: extern "C" {
+16535: # 52 "/usr/include/x86_64-linux-gnu/sys/time.h" 3 4
+16535: struct timezone
+16535:   {
+16535:     int tz_minuteswest;
+16535:     int tz_dsttime;
+16535:   };
+16535: 
+16535: typedef struct timezone *__restrict __timezone_ptr_t;
+16535: # 68 "/usr/include/x86_64-linux-gnu/sys/time.h" 3 4
+16535: extern int gettimeofday (struct timeval *__restrict __tv,
+16535:     __timezone_ptr_t __tz) throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int settimeofday (const struct timeval *__tv,
+16535:     const struct timezone *__tz)
+16535:      throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int adjtime (const struct timeval *__delta,
+16535:       struct timeval *__olddelta) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: enum __itimer_which
+16535:   {
+16535: 
+16535:     ITIMER_REAL = 0,
+16535: 
+16535: 
+16535:     ITIMER_VIRTUAL = 1,
+16535: 
+16535: 
+16535: 
+16535:     ITIMER_PROF = 2
+16535: 
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: struct itimerval
+16535:   {
+16535: 
+16535:     struct timeval it_interval;
+16535: 
+16535:     struct timeval it_value;
+16535:   };
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: typedef int __itimer_which_t;
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int getitimer (__itimer_which_t __which,
+16535:         struct itimerval *__value) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int setitimer (__itimer_which_t __which,
+16535:         const struct itimerval *__restrict __new,
+16535:         struct itimerval *__restrict __old) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int utimes (const char *__file, const struct timeval __tvp[2])
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: 
+16535: extern int lutimes (const char *__file, const struct timeval __tvp[2])
+16535:      throw () __attribute__ ((__nonnull__ (1)));
+16535: 
+16535: 
+16535: extern int futimes (int __fd, const struct timeval __tvp[2]) throw ();
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: extern int futimesat (int __fd, const char *__file,
+16535:         const struct timeval __tvp[2]) throw ();
+16535: # 186 "/usr/include/x86_64-linux-gnu/sys/time.h" 3 4
+16535: }
+16535: # 36 "../../src/Watchdog_defs.hh" 2
+16535: 
+16535: 
+16535: 
+16535: # 38 "../../src/Watchdog_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: extern "C" void PPL_handle_timeout(int signum);
+16535: 
+16535: struct Watchdog_Traits {
+16535:   typedef Implementation::Watchdog::Time Threshold;
+16535:   static bool less_than(const Threshold& a, const Threshold& b) {
+16535:     return a < b;
+16535:   }
+16535: };
+16535: 
+16535: 
+16535: class Watchdog {
+16535: public:
+16535:   template <typename Flag_Base, typename Flag>
+16535:   Watchdog(long csecs, const Flag_Base* volatile& holder, Flag& flag);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   Watchdog(long csecs, void (* const function)());
+16535: 
+16535: 
+16535:   ~Watchdog();
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   static void initialize();
+16535: 
+16535:   static void finalize();
+16535: 
+16535: private:
+16535: 
+16535:   bool expired;
+16535: 
+16535:   typedef Implementation::Watchdog::Pending_List<Watchdog_Traits>
+16535:   WD_Pending_List;
+16535: 
+16535:   typedef Implementation::Watchdog::Handler
+16535:   WD_Handler;
+16535: 
+16535:   const WD_Handler& handler;
+16535:   WD_Pending_List::iterator pending_position;
+16535: 
+16535: 
+16535:   Watchdog(const Watchdog&);
+16535: 
+16535:   Watchdog& operator=(const Watchdog&);
+16535: 
+16535: 
+16535:   static itimerval current_timer_status;
+16535: 
+16535: 
+16535:   static void get_timer(Implementation::Watchdog::Time& time);
+16535: 
+16535: 
+16535:   static itimerval signal_once;
+16535: 
+16535: 
+16535:   static Implementation::Watchdog::Time last_time_requested;
+16535: 
+16535: 
+16535:   static void set_timer(const Implementation::Watchdog::Time& time);
+16535: 
+16535: 
+16535:   static void stop_timer();
+16535: 
+16535: 
+16535:   static void reschedule();
+16535: 
+16535: 
+16535:   static Implementation::Watchdog::Time reschedule_time;
+16535: 
+16535: 
+16535:   static Implementation::Watchdog::Time time_so_far;
+16535: 
+16535: 
+16535:   static WD_Pending_List pending;
+16535: 
+16535: 
+16535:   static void handle_timeout(int);
+16535: 
+16535: 
+16535:   static WD_Pending_List::iterator
+16535:   new_watchdog_event(long csecs,
+16535:                      const WD_Handler& handler,
+16535:                      bool& expired_flag);
+16535: 
+16535: 
+16535:   void remove_watchdog_event(WD_Pending_List::iterator position);
+16535: 
+16535: 
+16535:   static volatile bool alarm_clock_running;
+16535: 
+16535: 
+16535:   static volatile bool in_critical_section;
+16535: 
+16535:   friend void PPL_handle_timeout(int signum);
+16535: 
+16535: 
+16535: };
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../src/Watchdog_inlines.hh" 1
+16535: # 27 "../../src/Watchdog_inlines.hh"
+16535: # 1 "../../src/Handler_defs.hh" 1
+16535: # 30 "../../src/Handler_defs.hh"
+16535: class Parma_Polyhedra_Library::Implementation::Watchdog::Handler {
+16535: public:
+16535: 
+16535:   virtual void act() const = 0;
+16535: 
+16535: 
+16535:   virtual ~Handler();
+16535: };
+16535: # 60 "../../src/Handler_defs.hh"
+16535: template <typename Flag_Base, typename Flag>
+16535: class Parma_Polyhedra_Library::Implementation::Watchdog::Handler_Flag
+16535:   : public Handler {
+16535: public:
+16535: 
+16535:   Handler_Flag(const Flag_Base* volatile& holder, Flag& flag);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   virtual void act() const;
+16535: 
+16535: private:
+16535: 
+16535:   const Flag_Base* volatile& h;
+16535:   Flag& f;
+16535: };
+16535: 
+16535: 
+16535: class Parma_Polyhedra_Library::Implementation::Watchdog::Handler_Function
+16535:   : public Handler {
+16535: public:
+16535: 
+16535:   Handler_Function(void (* const function)());
+16535: 
+16535: 
+16535:   virtual void act() const;
+16535: 
+16535: private:
+16535: 
+16535:   void (* const f)();
+16535: };
+16535: 
+16535: # 1 "../../src/Handler_inlines.hh" 1
+16535: # 27 "../../src/Handler_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: 
+16535: namespace Watchdog {
+16535: 
+16535: template <typename Flag_Base, typename Flag>
+16535: Handler_Flag<Flag_Base, Flag>::Handler_Flag(const Flag_Base* volatile& holder,
+16535:                                             Flag& flag)
+16535:   : h(holder), f(flag) {
+16535: }
+16535: 
+16535: template <typename Flag_Base, typename Flag>
+16535: void
+16535: Handler_Flag<Flag_Base, Flag>::act() const {
+16535:   if (h == 0 || static_cast<const Flag&>(*h).priority() < f.priority()) {
+16535:     h = &f;
+16535:   }
+16535: }
+16535: 
+16535: inline
+16535: Handler_Function::Handler_Function(void (* const function)())
+16535:   : f(function) {
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: }
+16535: # 95 "../../src/Handler_defs.hh" 2
+16535: # 28 "../../src/Watchdog_inlines.hh" 2
+16535: 
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: 
+16535: 
+16535: template <typename Flag_Base, typename Flag>
+16535: Watchdog::Watchdog(long csecs,
+16535:                    const Flag_Base* volatile& holder,
+16535:                    Flag& flag)
+16535:   : expired(false),
+16535:     handler(*new
+16535:             Implementation::Watchdog::Handler_Flag<Flag_Base, Flag>(holder,
+16535:                                                                     flag)) {
+16535:   if (csecs == 0) {
+16535:     throw std::invalid_argument("Watchdog constructor called with a"
+16535:                                 " non-positive number of centiseconds");
+16535:   }
+16535:   in_critical_section = true;
+16535:   pending_position = new_watchdog_event(csecs, handler, expired);
+16535:   in_critical_section = false;
+16535: }
+16535: 
+16535: inline
+16535: Watchdog::Watchdog(long csecs, void (* const function)())
+16535:   : expired(false),
+16535:     handler(*new Implementation::Watchdog::Handler_Function(function)) {
+16535:   if (csecs == 0) {
+16535:     throw std::invalid_argument("Watchdog constructor called with a"
+16535:                                 " non-positive number of centiseconds");
+16535:   }
+16535:   in_critical_section = true;
+16535:   pending_position = new_watchdog_event(csecs, handler, expired);
+16535:   in_critical_section = false;
+16535: }
+16535: 
+16535: inline
+16535: Watchdog::~Watchdog() {
+16535:   if (!expired) {
+16535:     in_critical_section = true;
+16535:     remove_watchdog_event(pending_position);
+16535:     in_critical_section = false;
+16535:   }
+16535:   delete &handler;
+16535: }
+16535: 
+16535: inline void
+16535: Watchdog::reschedule() {
+16535:   set_timer(reschedule_time);
+16535: }
+16535: # 101 "../../src/Watchdog_inlines.hh"
+16535: }
+16535: # 146 "../../src/Watchdog_defs.hh" 2
+16535: # 31 "../../src/ppl_include_files.hh" 2
+16535: # 1 "../../src/Threshold_Watcher_defs.hh" 1
+16535: # 27 "../../src/Threshold_Watcher_defs.hh"
+16535: # 1 "../../src/Threshold_Watcher_types.hh" 1
+16535: # 16 "../../src/Threshold_Watcher_types.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Traits>
+16535: class Threshold_Watcher;
+16535: 
+16535: }
+16535: # 28 "../../src/Threshold_Watcher_defs.hh" 2
+16535: 
+16535: 
+16535: # 1 "/usr/include/c++/8/cassert" 1 3
+16535: # 41 "/usr/include/c++/8/cassert" 3
+16535:        
+16535: # 42 "/usr/include/c++/8/cassert" 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/assert.h" 1 3 4
+16535: # 44 "/usr/include/c++/8/cassert" 2 3
+16535: # 31 "../../src/Threshold_Watcher_defs.hh" 2
+16535: # 39 "../../src/Threshold_Watcher_defs.hh"
+16535: template <typename Traits>
+16535: class Parma_Polyhedra_Library::Threshold_Watcher {
+16535: public:
+16535:   template <typename Flag_Base, typename Flag>
+16535:   Threshold_Watcher(const typename Traits::Delta& delta,
+16535:                     const Flag_Base* volatile& holder,
+16535:                     Flag& flag);
+16535: 
+16535:   Threshold_Watcher(const typename Traits::Delta& delta,
+16535:                     void (*function)());
+16535: 
+16535:   ~Threshold_Watcher();
+16535: 
+16535: private:
+16535:   typedef Implementation::Watchdog::Pending_List<Traits> TW_Pending_List;
+16535:   typedef Implementation::Watchdog::Handler TW_Handler;
+16535: 
+16535:   bool expired;
+16535:   const TW_Handler& handler;
+16535:   typename TW_Pending_List::iterator pending_position;
+16535: 
+16535: 
+16535:   Threshold_Watcher(const Threshold_Watcher&);
+16535:   Threshold_Watcher& operator=(const Threshold_Watcher&);
+16535: 
+16535:   struct Initialize {
+16535: 
+16535:     TW_Pending_List pending;
+16535:   };
+16535:   static Initialize init;
+16535: 
+16535: 
+16535:   static typename TW_Pending_List::iterator
+16535:   add_threshold(typename Traits::Threshold threshold,
+16535:                 const TW_Handler& handler,
+16535:                 bool& expired_flag);
+16535: 
+16535: 
+16535:   static typename TW_Pending_List::iterator
+16535:   remove_threshold(typename TW_Pending_List::iterator position);
+16535: 
+16535: 
+16535:   static void check();
+16535: 
+16535: };
+16535: 
+16535: 
+16535: 
+16535: template <typename Traits>
+16535: typename
+16535: Parma_Polyhedra_Library::Threshold_Watcher<Traits>::Initialize
+16535: Parma_Polyhedra_Library::Threshold_Watcher<Traits>::init;
+16535: 
+16535: # 1 "../../src/Threshold_Watcher_inlines.hh" 1
+16535: # 30 "../../src/Threshold_Watcher_inlines.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Traits>
+16535: template <typename Flag_Base, typename Flag>
+16535: Threshold_Watcher<Traits>
+16535: ::Threshold_Watcher(const typename Traits::Delta& delta,
+16535:                     const Flag_Base* volatile& holder,
+16535:                     Flag& flag)
+16535:   : expired(false),
+16535:     handler(*new
+16535:             Implementation::Watchdog::Handler_Flag<Flag_Base, Flag>(holder,
+16535:                                                                     flag)) {
+16535:   typename Traits::Threshold threshold;
+16535:   Traits::from_delta(threshold, delta);
+16535:   if (!Traits::less_than(Traits::get(), threshold)) {
+16535:     throw std::invalid_argument("Threshold_Watcher constructor called with a"
+16535:                                 " threshold already reached");
+16535:   }
+16535:   pending_position = add_threshold(threshold, handler, expired);
+16535: }
+16535: 
+16535: template <typename Traits>
+16535: inline
+16535: Threshold_Watcher<Traits>
+16535: ::Threshold_Watcher(const typename Traits::Delta& delta, void (*function)())
+16535:   : expired(false),
+16535:     handler(*new Implementation::Watchdog::Handler_Function(function)) {
+16535:   typename Traits::Threshold threshold;
+16535:   Traits::from_delta(threshold, delta);
+16535:   if (!Traits::less_than(Traits::get(), threshold)) {
+16535:     throw std::invalid_argument("Threshold_Watcher constructor called with a"
+16535:                                 " threshold already reached");
+16535:   }
+16535:   pending_position = add_threshold(threshold, handler, expired);
+16535: }
+16535: 
+16535: }
+16535: # 93 "../../src/Threshold_Watcher_defs.hh" 2
+16535: # 1 "../../src/Threshold_Watcher_templates.hh" 1
+16535: # 27 "../../src/Threshold_Watcher_templates.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: template <typename Traits>
+16535: typename Threshold_Watcher<Traits>::TW_Pending_List::iterator
+16535: Threshold_Watcher<Traits>::add_threshold(typename Traits::Threshold threshold,
+16535:                                          const TW_Handler& handler,
+16535:                                          bool& expired_flag) {
+16535:   Traits::check_function = Threshold_Watcher::check;
+16535:   return init.pending.insert(threshold, handler, expired_flag);
+16535: }
+16535: 
+16535: template <typename Traits>
+16535: typename Threshold_Watcher<Traits>::TW_Pending_List::iterator
+16535: Threshold_Watcher<Traits>
+16535: ::remove_threshold(typename TW_Pending_List::iterator position) {
+16535:   typename TW_Pending_List::iterator i = init.pending.erase(position);
+16535:   if (init.pending.empty()) {
+16535:     Traits::check_function = 0;
+16535:   }
+16535:   return i;
+16535: }
+16535: 
+16535: template <typename Traits>
+16535: Threshold_Watcher<Traits>::~Threshold_Watcher() {
+16535:   if (!expired) {
+16535:     remove_threshold(pending_position);
+16535:   }
+16535:   delete &handler;
+16535: }
+16535: 
+16535: template <typename Traits>
+16535: void
+16535: Threshold_Watcher<Traits>::check() {
+16535:   typename TW_Pending_List::iterator i = init.pending.begin();
+16535:   
+16535: # 61 "../../src/Threshold_Watcher_templates.hh" 3 4
+16535:  (static_cast<void> (0))
+16535: # 61 "../../src/Threshold_Watcher_templates.hh"
+16535:                                 ;
+16535:   const typename Traits::Threshold& current = Traits::get();
+16535:   while (!Traits::less_than(current, i->deadline())) {
+16535:     i->handler().act();
+16535:     i->expired_flag() = true;
+16535:     i = remove_threshold(i);
+16535:     if (i == init.pending.end()) {
+16535:       break;
+16535:     }
+16535:   }
+16535: }
+16535: 
+16535: }
+16535: # 94 "../../src/Threshold_Watcher_defs.hh" 2
+16535: # 31 "../../src/ppl_include_files.hh" 2
+16535: # 39 "../../src/ppl_header.hh" 2
+16535: # 114 "../../src/ppl_header.hh"
+16535: # 1 "/usr/include/c++/8/cassert" 1 3
+16535: # 41 "/usr/include/c++/8/cassert" 3
+16535:        
+16535: # 42 "/usr/include/c++/8/cassert" 3
+16535: 
+16535: 
+16535: # 1 "/usr/include/assert.h" 1 3 4
+16535: # 44 "/usr/include/c++/8/cassert" 2 3
+16535: # 115 "../../src/ppl_header.hh" 2
+16535: # 28 "../../tests/ppl_test.hh" 2
+16535: # 1 "../../tests/Random_Number_Generator_defs.hh" 1
+16535: # 27 "../../tests/Random_Number_Generator_defs.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: class Random_Number_Generator {
+16535: public:
+16535:   Random_Number_Generator();
+16535: 
+16535:   explicit Random_Number_Generator(unsigned long seed);
+16535: 
+16535:   template <typename T>
+16535:   void get(T& x, unsigned int info);
+16535: 
+16535: private:
+16535:   gmp_randclass rand;
+16535:   unsigned int max_bits;
+16535: };
+16535: 
+16535: }
+16535: 
+16535: # 1 "../../tests/Random_Number_Generator_inlines.hh" 1
+16535: # 27 "../../tests/Random_Number_Generator_inlines.hh"
+16535: # 1 "/usr/include/c++/8/ctime" 1 3
+16535: # 39 "/usr/include/c++/8/ctime" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/ctime" 3
+16535: # 28 "../../tests/Random_Number_Generator_inlines.hh" 2
+16535: 
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Implementation {
+16535: namespace Random_Numbers {
+16535: 
+16535: template <typename T>
+16535: class Random_Number_Generator_Aux {
+16535: public:
+16535:   Random_Number_Generator_Aux(unsigned int max_bits) {
+16535:     if (std::numeric_limits<T>::is_bounded) {
+16535:       assign_r(zmin, std::numeric_limits<T>::min(), ROUND_NOT_NEEDED);
+16535:       assign_r(zrange, std::numeric_limits<T>::max(), ROUND_NOT_NEEDED);
+16535:       zrange -= zmin;
+16535:       ++zrange;
+16535:     }
+16535:     else if (std::numeric_limits<T>::is_signed) {
+16535:       zmin = 1;
+16535:       zmin <<= (max_bits - 1);
+16535:       zmin = -zmin;
+16535:     }
+16535:     else {
+16535:       assign_r(zmin, std::numeric_limits<T>::min(), ROUND_NOT_NEEDED);
+16535:     }
+16535:   }
+16535:   mpz_class zmin;
+16535:   mpz_class zrange;
+16535: };
+16535: 
+16535: }
+16535: }
+16535: 
+16535: inline
+16535: Random_Number_Generator::Random_Number_Generator()
+16535:   : rand(
+16535: # 62 "../../tests/Random_Number_Generator_inlines.hh" 3 4
+16535:         __gmp_randinit_default
+16535: # 62 "../../tests/Random_Number_Generator_inlines.hh"
+16535:                             ), max_bits(512) {
+16535: 
+16535:   rand.seed((unsigned long) time(0));
+16535: }
+16535: 
+16535: inline
+16535: Random_Number_Generator::Random_Number_Generator(const unsigned long seed)
+16535:   : rand(
+16535: # 69 "../../tests/Random_Number_Generator_inlines.hh" 3 4
+16535:         __gmp_randinit_default
+16535: # 69 "../../tests/Random_Number_Generator_inlines.hh"
+16535:                             ), max_bits(512) {
+16535: 
+16535:   rand.seed(seed);
+16535: }
+16535: 
+16535: template <typename T>
+16535: inline void
+16535: Random_Number_Generator::get(T& x, unsigned int) {
+16535:   using Implementation::Random_Numbers::Random_Number_Generator_Aux;
+16535:   static Random_Number_Generator_Aux<T> aux(max_bits);
+16535:   mpz_class n;
+16535:   if (std::numeric_limits<T>::is_bounded) {
+16535:     n = rand.get_z_range(aux.zrange);
+16535:   }
+16535:   else {
+16535:     n = rand.get_z_bits(max_bits);
+16535:   }
+16535:   n += aux.zmin;
+16535:   assign_r(x, n, ROUND_NOT_NEEDED);
+16535: }
+16535: 
+16535: }
+16535: # 46 "../../tests/Random_Number_Generator_defs.hh" 2
+16535: # 29 "../../tests/ppl_test.hh" 2
+16535: # 38 "../../tests/ppl_test.hh"
+16535: # 1 "/usr/include/c++/8/cstdlib" 1 3
+16535: # 39 "/usr/include/c++/8/cstdlib" 3
+16535:        
+16535: # 40 "/usr/include/c++/8/cstdlib" 3
+16535: # 39 "../../tests/ppl_test.hh" 2
+16535: # 352 "../../tests/ppl_test.hh"
+16535: namespace Parma_Polyhedra_Library {
+16535: 
+16535: namespace Test {
+16535: 
+16535: static bool
+16535: check_noisy(const char*
+16535: 
+16535:             environment_variable
+16535: 
+16535: ) {
+16535: 
+16535:   return getenv(environment_variable) != 0;
+16535: # 375 "../../tests/ppl_test.hh"
+16535: }
+16535: 
+16535: template<typename CharT, typename Traits = std::char_traits<CharT> >
+16535: class nullbuf : public std::basic_streambuf<CharT, Traits> {
+16535: protected:
+16535:   virtual typename Traits::int_type overflow(typename Traits::int_type c) {
+16535:     return Traits::not_eof(c);
+16535:   }
+16535: };
+16535: 
+16535: template <class CharT, class Traits = std::char_traits<CharT> >
+16535: class noisy_ostream : public std::basic_ostream<CharT, Traits> {
+16535: private:
+16535:   nullbuf<CharT, Traits> black_hole;
+16535: 
+16535: public:
+16535:   noisy_ostream(const std::basic_ostream<CharT, Traits>& os,
+16535:                 const char* environment_variable)
+16535:     : std::basic_ostream<CharT, Traits>(check_noisy(environment_variable)
+16535:                                         ? os.rdbuf()
+16535:                                         : &black_hole) {
+16535:   }
+16535: };
+16535: 
+16535: static noisy_ostream<char> nout(std::cout, "PPL_NOISY_TESTS");
+16535: static noisy_ostream<char> vnout(std::cout, "PPL_VERY_NOISY_TESTS");
+16535: 
+16535: void
+16535: set_handlers();
+16535: 
+16535: 
+16535: typedef long double long_double;
+16535: 
+16535: struct Floating_Real_Open_Interval_Info_Policy {
+16535:   enum const_bool_value_store_special { store_special = (false) };
+16535:   enum const_bool_value_store_open { store_open = (true) };
+16535:   enum const_bool_value_cache_empty { cache_empty = (true) };
+16535:   enum const_bool_value_cache_singleton { cache_singleton = (true) };
+16535:   enum const_bool_value_cache_normalized { cache_normalized = (false) };
+16535:   enum anonymous_enum_next_bit { next_bit = (0) };
+16535:   enum const_bool_value_may_be_empty { may_be_empty = (true) };
+16535:   enum const_bool_value_may_contain_infinity { may_contain_infinity = (false) };
+16535:   enum const_bool_value_check_empty_result { check_empty_result = (false) };
+16535:   enum const_bool_value_check_inexact { check_inexact = (false) };
+16535: };
+16535: 
+16535: struct Floating_Real_Closed_Interval_Info_Policy {
+16535:   enum const_bool_value_store_special { store_special = (false) };
+16535:   enum const_bool_value_store_open { store_open = (false) };
+16535:   enum const_bool_value_cache_empty { cache_empty = (false) };
+16535:   enum const_bool_value_cache_singleton { cache_singleton = (true) };
+16535:   enum const_bool_value_cache_normalized { cache_normalized = (false) };
+16535:   enum anonymous_enum_next_bit { next_bit = (0) };
+16535:   enum const_bool_value_may_be_empty { may_be_empty = (false) };
+16535:   enum const_bool_value_may_contain_infinity { may_contain_infinity = (false) };
+16535:   enum const_bool_value_check_empty_result { check_empty_result = (false) };
+16535:   enum const_bool_value_check_inexact { check_inexact = (false) };
+16535: };
+16535: 
+16535: typedef Interval_Info_Bitset<unsigned int,
+16535:                              Floating_Real_Open_Interval_Info_Policy> Floating_Real_Open_Interval_Info;
+16535: 
+16535: typedef Interval<float, Floating_Real_Open_Interval_Info> fl_r_oc;
+16535: typedef Interval<double, Floating_Real_Open_Interval_Info> db_r_oc;
+16535: typedef Interval<long double, Floating_Real_Open_Interval_Info> ld_r_oc;
+16535: 
+16535: struct Rational_Real_Open_Interval_Info_Policy {
+16535:   enum const_bool_value_store_special { store_special = (true) };
+16535:   enum const_bool_value_store_open { store_open = (true) };
+16535:   enum const_bool_value_cache_empty { cache_empty = (true) };
+16535:   enum const_bool_value_cache_singleton { cache_singleton = (true) };
+16535:   enum const_bool_value_cache_normalized { cache_normalized = (false) };
+16535:   enum anonymous_enum_next_bit { next_bit = (0) };
+16535:   enum const_bool_value_may_be_empty { may_be_empty = (true) };
+16535:   enum const_bool_value_may_contain_infinity { may_contain_infinity = (false) };
+16535:   enum const_bool_value_check_empty_result { check_empty_result = (false) };
+16535:   enum const_bool_value_check_inexact { check_inexact = (false) };
+16535: };
+16535: 
+16535: typedef Interval_Info_Bitset<unsigned int,
+16535:                              Rational_Real_Open_Interval_Info_Policy> Rational_Real_Open_Interval_Info;
+16535: 
+16535: typedef Interval<mpq_class, Rational_Real_Open_Interval_Info> rt_r_oc;
+16535: 
+16535: 
+16535: typedef Box<rt_r_oc> TBox;
+16535: 
+16535: 
+16535: typedef BD_Shape<mpq_class> TBD_Shape;
+16535: 
+16535: 
+16535: typedef Octagonal_Shape<mpq_class> TOctagonal_Shape;
+16535: # 499 "../../tests/ppl_test.hh"
+16535: template <typename Shape>
+16535: inline bool
+16535: has_exact_coefficient_type(const Shape&) {
+16535:   return std::numeric_limits<typename Shape::coefficient_type>::is_exact;
+16535: }
+16535: 
+16535: template <typename Interval>
+16535: inline bool
+16535: has_exact_coefficient_type(const Box<Interval>&) {
+16535:   return std::numeric_limits<typename Interval::boundary_type>::is_exact;
+16535: }
+16535: 
+16535: bool
+16535: check_distance(const Checked_Number<mpq_class, Extended_Number_Policy>& d,
+16535:                const char* max_d_s, const char* d_name);
+16535: 
+16535: template <typename T>
+16535: bool
+16535: check_result_i(const BD_Shape<T>& computed_result,
+16535:                const BD_Shape<mpq_class>& known_result,
+16535:                const char* max_r_d_s,
+16535:                const char* max_e_d_s,
+16535:                const char* max_l_d_s) {
+16535:   BD_Shape<mpq_class> q_computed_result(computed_result);
+16535: 
+16535:   if (max_r_d_s == 0 && max_e_d_s == 0 && max_l_d_s == 0) {
+16535:     if (q_computed_result != known_result) {
+16535:       using IO_Operators::operator<<;
+16535:       nout << "Equality does not hold:"
+16535:            << "\ncomputed result is\n"
+16535:            << q_computed_result
+16535:            << "\nknown result is\n"
+16535:            << known_result
+16535:            << std::endl;
+16535:       return false;
+16535:     }
+16535:     else
+16535:       return true;
+16535:   }
+16535: 
+16535:   if (!q_computed_result.contains(known_result)) {
+16535:     using IO_Operators::operator<<;
+16535:     nout << "Containment does not hold:"
+16535:          << "\ncomputed result is\n"
+16535:          << q_computed_result
+16535:          << "\nknown result is\n"
+16535:          << known_result
+16535:          << std::endl;
+16535:     return false;
+16535:   }
+16535: 
+16535:   Checked_Number<mpq_class, Extended_Number_Policy> r_d;
+16535:   rectilinear_distance_assign(r_d, known_result, q_computed_result, ROUND_UP);
+16535:   Checked_Number<mpq_class, Extended_Number_Policy> e_d;
+16535:   euclidean_distance_assign(e_d, known_result, q_computed_result, ROUND_UP);
+16535:   Checked_Number<mpq_class, Extended_Number_Policy> l_d;
+16535:   l_infinity_distance_assign(l_d, known_result, q_computed_result, ROUND_UP);
+16535:   bool ok_r = check_distance(r_d, max_r_d_s, "rectilinear");
+16535:   bool ok_e = check_distance(e_d, max_e_d_s, "euclidean");
+16535:   bool ok_l = check_distance(l_d, max_l_d_s, "l_infinity");
+16535:   bool ok = ok_r && ok_e && ok_l;
+16535:   if (!ok) {
+16535:     using IO_Operators::operator<<;
+16535:     nout << "Computed result is\n"
+16535:          << q_computed_result
+16535:          << "\nknown result is\n"
+16535:          << known_result
+16535:          << std::endl;
+16535:   }
+16535:   return ok;
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: check_result(const BD_Shape<T>& computed_result,
+16535:              const BD_Shape<mpq_class>& known_result,
+16535:              const char* max_r_d_s,
+16535:              const char* max_e_d_s,
+16535:              const char* max_l_d_s) {
+16535:   return std::numeric_limits<T>::is_integer
+16535:     ? check_result_i(computed_result, known_result,
+16535:                      "+inf", "+inf", "+inf")
+16535:     : check_result_i(computed_result, known_result,
+16535:                      max_r_d_s, max_e_d_s, max_l_d_s);
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: check_result(const BD_Shape<T>& computed_result,
+16535:              const BD_Shape<T>& known_result) {
+16535:   if (computed_result == known_result)
+16535:     return true;
+16535:   else {
+16535:     using IO_Operators::operator<<;
+16535:     nout << "Equality does not hold:"
+16535:          << "\ncomputed result is\n"
+16535:          << computed_result
+16535:          << "\nknown result is\n"
+16535:          << known_result
+16535:          << std::endl;
+16535:     return false;
+16535:   }
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: check_result(const BD_Shape<T>& computed_result,
+16535:              const BD_Shape<mpq_class>& known_result) {
+16535:   return std::numeric_limits<T>::is_integer
+16535:     ? check_result_i(computed_result, known_result, "+inf", "+inf", "+inf")
+16535:     : check_result_i(computed_result, known_result, 0, 0, 0);
+16535: }
+16535: 
+16535: bool
+16535: check_result(const BD_Shape<mpq_class>& computed_result,
+16535:              const BD_Shape<mpq_class>& known_result);
+16535: 
+16535: template <typename T>
+16535: bool
+16535: check_result_i(const Octagonal_Shape<T>& computed_result,
+16535:                const Octagonal_Shape<mpq_class>& known_result,
+16535:                const char* max_r_d_s,
+16535:                const char* max_e_d_s,
+16535:                const char* max_l_d_s) {
+16535:   Octagonal_Shape<mpq_class> q_computed_result(computed_result);
+16535: 
+16535:   if (max_r_d_s == 0 && max_e_d_s == 0 && max_l_d_s == 0) {
+16535:     if (q_computed_result != known_result) {
+16535:       using IO_Operators::operator<<;
+16535:       nout << "Equality does not hold:"
+16535:            << "\ncomputed result is\n"
+16535:            << q_computed_result
+16535:            << "\nknown result is\n"
+16535:            << known_result
+16535:            << std::endl;
+16535:       return false;
+16535:     }
+16535:     else
+16535:       return true;
+16535:   }
+16535: 
+16535:   if (!q_computed_result.contains(known_result)) {
+16535:     using IO_Operators::operator<<;
+16535:     nout << "Containment does not hold:"
+16535:          << "\ncomputed result is\n"
+16535:          << q_computed_result
+16535:          << "\nknown result is\n"
+16535:          << known_result
+16535:          << std::endl;
+16535:     return false;
+16535:   }
+16535: 
+16535:   Checked_Number<mpq_class, Extended_Number_Policy> r_d;
+16535:   rectilinear_distance_assign(r_d, known_result, q_computed_result, ROUND_UP);
+16535:   Checked_Number<mpq_class, Extended_Number_Policy> e_d;
+16535:   euclidean_distance_assign(e_d, known_result, q_computed_result, ROUND_UP);
+16535:   Checked_Number<mpq_class, Extended_Number_Policy> l_d;
+16535:   l_infinity_distance_assign(l_d, known_result, q_computed_result, ROUND_UP);
+16535:   bool ok_r = check_distance(r_d, max_r_d_s, "rectilinear");
+16535:   bool ok_e = check_distance(e_d, max_e_d_s, "euclidean");
+16535:   bool ok_l = check_distance(l_d, max_l_d_s, "l_infinity");
+16535:   bool ok = ok_r && ok_e && ok_l;
+16535:   if (!ok) {
+16535:     using IO_Operators::operator<<;
+16535:     nout << "Computed result is\n"
+16535:          << q_computed_result
+16535:          << "\nknown result is\n"
+16535:          << known_result
+16535:          << std::endl;
+16535:   }
+16535:   return ok;
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: check_result(const Octagonal_Shape<T>& computed_result,
+16535:              const Octagonal_Shape<mpq_class>& known_result,
+16535:              const char* max_r_d_s,
+16535:              const char* max_e_d_s,
+16535:              const char* max_l_d_s) {
+16535:   return std::numeric_limits<T>::is_integer
+16535:     ? check_result_i(computed_result, known_result,
+16535:                      "+inf", "+inf", "+inf")
+16535:     : check_result_i(computed_result, known_result,
+16535:                      max_r_d_s, max_e_d_s, max_l_d_s);
+16535: }
+16535: 
+16535: template <>
+16535: inline bool
+16535: check_result(const Octagonal_Shape<mpq_class>& computed_result,
+16535:              const Octagonal_Shape<mpq_class>& known_result,
+16535:              const char*,
+16535:              const char*,
+16535:              const char*) {
+16535:   return check_result_i(computed_result, known_result,
+16535:                         0, 0, 0);
+16535: }
+16535: 
+16535: template <typename T>
+16535: bool
+16535: check_result(const Octagonal_Shape<T>& computed_result,
+16535:              const Octagonal_Shape<mpq_class>& known_result) {
+16535:   return std::numeric_limits<T>::is_integer
+16535:     ? check_result_i(computed_result, known_result, "+inf", "+inf", "+inf")
+16535:     : check_result_i(computed_result, known_result, 0, 0, 0);
+16535: }
+16535: 
+16535: 
+16535: template <typename Interval>
+16535: bool
+16535: check_result_i(const Box<Interval>& computed_result,
+16535:                const Rational_Box& known_result,
+16535:                const char* max_r_d_s,
+16535:                const char* max_e_d_s,
+16535:                const char* max_l_d_s) {
+16535:   Rational_Box q_computed_result(computed_result);
+16535: 
+16535:   if (max_r_d_s == 0 && max_e_d_s == 0 && max_l_d_s == 0) {
+16535:     if (q_computed_result != known_result) {
+16535:       using IO_Operators::operator<<;
+16535:       nout << "Equality does not hold:"
+16535:            << "\ncomputed result is\n"
+16535:            << q_computed_result
+16535:            << "\nknown result is\n"
+16535:            << known_result
+16535:            << std::endl;
+16535:       return false;
+16535:     }
+16535:     else
+16535:       return true;
+16535:   }
+16535: 
+16535:   if (!q_computed_result.contains(known_result)) {
+16535:     using IO_Operators::operator<<;
+16535:     nout << "Containment does not hold:"
+16535:          << "\ncomputed result is\n"
+16535:          << q_computed_result
+16535:          << "\nknown result is\n"
+16535:          << known_result
+16535:          << std::endl;
+16535:     nout << "Individual dimensions where containment does not hold"
+16535:          << "\n(Variable: computed-result known-result):\n";
+16535:     for (dimension_type i = 0; i < computed_result.space_dimension(); ++i) {
+16535:       if (!q_computed_result.get_interval(Variable(i))
+16535:           .contains(known_result.get_interval(Variable(i)))) {
+16535:         using IO_Operators::operator<<;
+16535:         nout << Variable(i) << ": "
+16535:              << q_computed_result.get_interval(Variable(i))
+16535:              << ' '
+16535:              << known_result.get_interval(Variable(i))
+16535:              << std::endl;
+16535:       }
+16535:     }
+16535:     return false;
+16535:   }
+16535: 
+16535:   Checked_Number<mpq_class, Extended_Number_Policy> r_d;
+16535:   rectilinear_distance_assign(r_d, known_result, q_computed_result, ROUND_UP);
+16535:   Checked_Number<mpq_class, Extended_Number_Policy> e_d;
+16535:   euclidean_distance_assign(e_d, known_result, q_computed_result, ROUND_UP);
+16535:   Checked_Number<mpq_class, Extended_Number_Policy> l_d;
+16535:   l_infinity_distance_assign(l_d, known_result, q_computed_result, ROUND_UP);
+16535:   bool ok_r = check_distance(r_d, max_r_d_s, "rectilinear");
+16535:   bool ok_e = check_distance(e_d, max_e_d_s, "euclidean");
+16535:   bool ok_l = check_distance(l_d, max_l_d_s, "l_infinity");
+16535:   bool ok = ok_r && ok_e && ok_l;
+16535:   if (!ok) {
+16535:     using IO_Operators::operator<<;
+16535:     nout << "Computed result is\n"
+16535:          << q_computed_result
+16535:          << "\nknown result is\n"
+16535:          << known_result
+16535:          << std::endl;
+16535:   }
+16535:   return ok;
+16535: }
+16535: 
+16535: template <typename Interval>
+16535: bool
+16535: check_result(const Box<Interval>& computed_result,
+16535:              const Rational_Box& known_result,
+16535:              const char* max_r_d_s,
+16535:              const char* max_e_d_s,
+16535:              const char* max_l_d_s) {
+16535:   return std::numeric_limits<typename Interval::boundary_type>::is_integer
+16535:     ? check_result_i(computed_result, known_result,
+16535:                      "+inf", "+inf", "+inf")
+16535:     : check_result_i(computed_result, known_result,
+16535:                      max_r_d_s, max_e_d_s, max_l_d_s);
+16535: }
+16535: 
+16535: template <typename Interval>
+16535: bool
+16535: check_result(const Box<Interval>& computed_result,
+16535:              const Box<Interval>& known_result) {
+16535:   if (computed_result == known_result)
+16535:     return true;
+16535:   else {
+16535:     using IO_Operators::operator<<;
+16535:     nout << "Equality does not hold:"
+16535:          << "\ncomputed result is\n"
+16535:          << computed_result
+16535:          << "\nknown result is\n"
+16535:          << known_result
+16535:          << std::endl;
+16535:     return false;
+16535:   }
+16535: }
+16535: 
+16535: template <typename Interval>
+16535: bool
+16535: check_result(const Box<Interval>& computed_result,
+16535:              const Rational_Box& known_result) {
+16535:   return std::numeric_limits<typename Interval::boundary_type>::is_integer
+16535:     ? check_result_i(computed_result, known_result, "+inf", "+inf", "+inf")
+16535:     : check_result_i(computed_result, known_result, 0, 0, 0);
+16535: }
+16535: 
+16535: bool
+16535: check_result(const Rational_Box& computed_result,
+16535:              const Rational_Box& known_result);
+16535: 
+16535: bool
+16535: check_result(const Generator& computed_result,
+16535:              const Generator& known_result,
+16535:              const char* max_r_d_s,
+16535:              const char* max_e_d_s,
+16535:              const char* max_l_d_s);
+16535: 
+16535: bool
+16535: check_result(const Checked_Number<mpq_class, Extended_Number_Policy>& computed,
+16535:              const Checked_Number<mpq_class, Extended_Number_Policy>& known,
+16535:              const char* max_r_d_s);
+16535: 
+16535: class FCAIBVP;
+16535: 
+16535: bool
+16535: operator==(const FCAIBVP& x, const FCAIBVP& y);
+16535: 
+16535: bool
+16535: operator!=(const FCAIBVP& x, const FCAIBVP& y);
+16535: 
+16535: std::ostream&
+16535: operator<<(std::ostream& s, const FCAIBVP& x);
+16535: 
+16535: 
+16535: 
+16535: 
+16535: 
+16535: class FCAIBVP {
+16535: private:
+16535:   typedef size_t dim_t;
+16535: 
+16535:   typedef std::set<dim_t> Set;
+16535: 
+16535:   Set set;
+16535: 
+16535: public:
+16535:   FCAIBVP();
+16535: 
+16535:   explicit FCAIBVP(const Variable x);
+16535: 
+16535:   explicit FCAIBVP(const Variables_Set& y);
+16535: 
+16535:   FCAIBVP(const FCAIBVP& y, unsigned offset);
+16535: 
+16535:   memory_size_type total_memory_in_bytes() const;
+16535: 
+16535:   memory_size_type external_memory_in_bytes() const;
+16535: 
+16535:   bool is_top() const;
+16535: 
+16535:   bool is_bottom() const;
+16535: 
+16535:   bool definitely_entails(const FCAIBVP& y) const;
+16535: 
+16535:   void upper_bound_assign(const FCAIBVP& y);
+16535: 
+16535:   void difference_assign(const FCAIBVP& y);
+16535: 
+16535:   void meet_assign(const FCAIBVP& y);
+16535: 
+16535:   void weakening_assign(const FCAIBVP& y);
+16535: 
+16535:   static bool has_nontrivial_weakening();
+16535: 
+16535:   bool OK() const;
+16535: 
+16535:   friend std::ostream&
+16535:   Parma_Polyhedra_Library::Test::operator<<(std::ostream& s,
+16535:                                             const FCAIBVP& x);
+16535: };
+16535: 
+16535: inline
+16535: FCAIBVP::FCAIBVP()
+16535:   : set() {
+16535: }
+16535: 
+16535: inline
+16535: FCAIBVP::FCAIBVP(const Variable x)
+16535:   : set() {
+16535:   set.insert(x.id());
+16535: }
+16535: 
+16535: inline
+16535: FCAIBVP::FCAIBVP(const Variables_Set& y)
+16535:   : set() {
+16535:   for (Variables_Set::const_iterator i = y.begin(),
+16535:          y_end = y.end(); i != y_end; ++i)
+16535:     set.insert(*i);
+16535: }
+16535: 
+16535: inline
+16535: FCAIBVP::FCAIBVP(const FCAIBVP& y, unsigned offset)
+16535:   : set() {
+16535:   for (Set::const_iterator i = y.set.begin(),
+16535:          y_set_end = y.set.end(); i != y_set_end; ++i)
+16535:     set.insert(*i + offset);
+16535: }
+16535: 
+16535: inline memory_size_type
+16535: FCAIBVP::total_memory_in_bytes() const {
+16535:   return 1;
+16535: }
+16535: 
+16535: inline bool
+16535: FCAIBVP::is_top() const {
+16535:   return set.empty();
+16535: }
+16535: 
+16535: inline bool
+16535: FCAIBVP::is_bottom() const {
+16535:   return false;
+16535: }
+16535: 
+16535: inline bool
+16535: FCAIBVP::definitely_entails(const FCAIBVP& y) const{
+16535:   const FCAIBVP& x = *this;
+16535:   return std::includes(x.set.begin(), x.set.end(),
+16535:                        y.set.begin(), y.set.end());
+16535: }
+16535: 
+16535: inline void
+16535: FCAIBVP::upper_bound_assign(const FCAIBVP& y) {
+16535:   FCAIBVP& x = *this;
+16535:   FCAIBVP z;
+16535:   std::set_intersection(x.set.begin(), x.set.end(),
+16535:                         y.set.begin(), y.set.end(),
+16535:                         std::inserter(z.set, z.set.begin()));
+16535:   using std::swap;
+16535:   swap(x, z);
+16535: }
+16535: 
+16535: inline void
+16535: FCAIBVP::difference_assign(const FCAIBVP& y) {
+16535:   FCAIBVP& x = *this;
+16535:   FCAIBVP z;
+16535:   std::set_difference(x.set.begin(), x.set.end(),
+16535:                       y.set.begin(), y.set.end(),
+16535:                       std::inserter(z.set, z.set.begin()));
+16535:   using std::swap;
+16535:   swap(x, z);
+16535: }
+16535: 
+16535: inline void
+16535: FCAIBVP::meet_assign(const FCAIBVP& y) {
+16535:   set.insert(y.set.begin(), y.set.end());
+16535: }
+16535: 
+16535: inline void
+16535: FCAIBVP::weakening_assign(const FCAIBVP& y) {
+16535:   difference_assign(y);
+16535: }
+16535: 
+16535: inline bool
+16535: FCAIBVP::has_nontrivial_weakening() {
+16535:   return true;
+16535: }
+16535: 
+16535: inline bool
+16535: FCAIBVP::OK() const {
+16535:   return true;
+16535: }
+16535: 
+16535: inline bool
+16535: operator==(const FCAIBVP& x, const FCAIBVP& y) {
+16535:   return x.definitely_entails(y) && y.definitely_entails(x);
+16535: }
+16535: 
+16535: inline bool
+16535: operator!=(const FCAIBVP& x, const FCAIBVP& y) {
+16535:   return !(x == y);
+16535: }
+16535: 
+16535: void
+16535: print_constraint(const Constraint& c,
+16535:                  const std::string& intro = "",
+16535:                  std::ostream& s = nout);
+16535: 
+16535: void
+16535: print_constraints(const Constraint_System& cs,
+16535:                   const std::string& intro = "",
+16535:                   std::ostream& s = nout);
+16535: 
+16535: void
+16535: print_constraints(const Polyhedron& ph,
+16535:                   const std::string& intro = "",
+16535:                   std::ostream& s = nout);
+16535: # 1015 "../../tests/ppl_test.hh"
+16535: template <typename Interval>
+16535: void
+16535: print_constraints(const Box<Interval>& box,
+16535:                   const std::string& intro = "",
+16535:                   std::ostream& s = nout) {
+16535:   if (!intro.empty())
+16535:     s << intro << std::endl;
+16535:   using IO_Operators::operator<<;
+16535:   s << box << std::endl;
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: print_constraints(const BD_Shape<T>& bd,
+16535:                   const std::string& intro = "",
+16535:                   std::ostream& s = nout) {
+16535:   if (!intro.empty())
+16535:     s << intro << std::endl;
+16535:   using IO_Operators::operator<<;
+16535:   s << bd << std::endl;
+16535: }
+16535: 
+16535: template <typename T>
+16535: void
+16535: print_constraints(const Octagonal_Shape<T>& oc,
+16535:                   const std::string& intro = "",
+16535:                   std::ostream& s = nout) {
+16535:   if (!intro.empty())
+16535:     s << intro << std::endl;
+16535:   using IO_Operators::operator<<;
+16535:   s << oc << std::endl;
+16535: }
+16535: 
+16535: template <typename PH>
+16535: void
+16535: print_constraints(const Pointset_Powerset<PH>& pps,
+16535:                   const std::string& intro = "",
+16535:                   std::ostream& s = nout) {
+16535:   if (!intro.empty())
+16535:     s << intro << std::endl;
+16535:   using IO_Operators::operator<<;
+16535:   s << pps << std::endl;
+16535: }
+16535: 
+16535: template <typename PH>
+16535: void
+16535: print_congruences(const Pointset_Powerset<PH>& pps,
+16535:                   const std::string& intro = "",
+16535:                   std::ostream& s = nout) {
+16535:   if (!intro.empty())
+16535:     s << intro << std::endl;
+16535:   using IO_Operators::operator<<;
+16535:   s << pps << std::endl;
+16535: }
+16535: # 1083 "../../tests/ppl_test.hh"
+16535: void
+16535: print_congruence(const Congruence& c,
+16535:                  const std::string& intro = "",
+16535:                  std::ostream& s = nout);
+16535: 
+16535: void
+16535: print_congruences(const Congruence_System& cgs,
+16535:                   const std::string& intro = "",
+16535:                   std::ostream& s = nout);
+16535: 
+16535: void
+16535: print_congruences(const Grid& gr,
+16535:                   const std::string& intro = "",
+16535:                   std::ostream& s = nout);
+16535: 
+16535: void
+16535: print_generator(const Generator& g,
+16535:                 const std::string& intro = "",
+16535:                 std::ostream& s = nout);
+16535: 
+16535: void
+16535: print_generator(const Grid_Generator& g,
+16535:                 const std::string& intro = "",
+16535:                 std::ostream& s = nout);
+16535: 
+16535: void
+16535: print_generators(const Generator_System& gs,
+16535:                  const std::string& intro = "",
+16535:                  std::ostream& s = nout);
+16535: 
+16535: void
+16535: print_generators(const Grid_Generator_System& gs,
+16535:                  const std::string& intro = "",
+16535:                  std::ostream& s = nout);
+16535: 
+16535: void
+16535: print_generators(const Polyhedron& ph,
+16535:                  const std::string& intro = "",
+16535:                  std::ostream& s = nout);
+16535: 
+16535: void
+16535: print_generators(const Grid& gr,
+16535:                  const std::string& intro = "",
+16535:                  std::ostream& s = nout);
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: void
+16535: print_constraints(const Partially_Reduced_Product<D1, D2, R>& pd,
+16535:                   const std::string& intro = "",
+16535:                   std::ostream& s = nout) {
+16535:   print_constraints(pd.constraints(), intro, s);
+16535: }
+16535: 
+16535: template <typename D1, typename D2, typename R>
+16535: void
+16535: print_congruences(const Partially_Reduced_Product<D1, D2, R>& pd,
+16535:                   const std::string& intro = "",
+16535:                   std::ostream& s = nout) {
+16535:   print_congruences(pd.congruences(), intro, s);
+16535: }
+16535: 
+16535: void
+16535: print_function(const Parma_Polyhedra_Library::Partial_Function& function,
+16535:                const std::string& intro = "",
+16535:                std::ostream& s = nout);
+16535: 
+16535: }
+16535: 
+16535: }
+16535: 
+16535: 
+16535: 
+16535: using namespace Parma_Polyhedra_Library;
+16535: using namespace Parma_Polyhedra_Library::Test;
+16535: using std::endl;
+16535: # 26 "equals1.cc" 2
+16535: 
+16535: namespace {
+16535: 
+16535: 
+16535: bool
+16535: test01() {
+16535:   Variable x(0);
+16535:   Pointset_Powerset<TBox> pps_box(1);
+16535:   Constraint_System cs;
+16535:   cs.insert(x >= 5);
+16535:   cs.insert(x <= 3);
+16535:   pps_box.add_constraints(cs);
+16535: 
+16535:   Pointset_Powerset<TBox> pps_box1(1, EMPTY);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ok = pps_box.geometrically_equals(pps_box1);
+16535:   bool ok1 = pps_box.geometrically_equals(pps_box1);
+16535: 
+16535:   return ok && ok1;
+16535: }
+16535: 
+16535: 
+16535: bool
+16535: test02() {
+16535:   Variable x(0);
+16535:   Pointset_Powerset<TBox> pps_box(1);
+16535:   Constraint_System cs;
+16535:   cs.insert(x >= 5);
+16535:   cs.insert(x >= 8);
+16535:   pps_box.add_constraints(cs);
+16535: 
+16535:   Pointset_Powerset<TBox> pps_box1(1);
+16535:   cs.clear();
+16535:   cs.insert(x >= 8);
+16535:   pps_box1.add_constraints(cs);
+16535: 
+16535: 
+16535: 
+16535: 
+16535:   bool ok = pps_box.geometrically_equals(pps_box1);
+16535:   bool ok1 = pps_box.geometrically_equals(pps_box1);
+16535: 
+16535:   return ok && ok1;
+16535: }
+16535: 
+16535: }
+16535: 
+16535: int main() try { set_handlers(); bool succeeded = false; bool overflow = false; (void) overflow; std::list<std::string> failed_tests; std::list<std::string> unexpectedly_succeeded_tests;
+16535:   nout << "\n=== " "test01" " ===" << std::endl; try { overflow = false; succeeded = test01(); } catch (const std::overflow_error& e) { nout << "arithmetic overflow (" << e.what() << ")" << std::endl; overflow = true; succeeded = false; } catch (const std::exception& e) { nout << "std::exception caught: " << e.what() << " (type == " << typeid(e).name() << ")" << std::endl; succeeded = false; } catch (...) { nout << "unknown exception caught" << std::endl; succeeded = false; }; if (!succeeded) failed_tests.push_back("test01");;
+16535:   nout << "\n=== " "test02" " ===" << std::endl; try { overflow = false; succeeded = test02(); } catch (const std::overflow_error& e) { nout << "arithmetic overflow (" << e.what() << ")" << std::endl; overflow = true; succeeded = false; } catch (const std::exception& e) { nout << "std::exception caught: " << e.what() << " (type == " << typeid(e).name() << ")" << std::endl; succeeded = false; } catch (...) { nout << "unknown exception caught" << std::endl; succeeded = false; }; if (!succeeded) failed_tests.push_back("test02");;
+16535: if (!failed_tests.empty()) { std::cerr << "tests failed: "; std::copy(failed_tests.begin(), failed_tests.end(), std::ostream_iterator<std::string>(std::cerr, " ")); std::cerr << std::endl; return 1; } if (!unexpectedly_succeeded_tests.empty()) { std::cerr << "tests unexpectedly succeeded: "; std::copy(unexpectedly_succeeded_tests.begin(), unexpectedly_succeeded_tests.end(), std::ostream_iterator<std::string>(std::cerr, " ")); std::cerr << std::endl; return 1; } return 0; } catch (const std::overflow_error& e) { std::cerr << "arithmetic overflow (" << e.what() << ")" << std::endl; exit(1); } catch (const std::exception& e) { std::cerr << "std::exception caught: " << e.what() << " (type == " << typeid(e).name() << ")" << std::endl; exit(1); }
 === END GCC DUMP ===
 make[5]: *** [Makefile:1289: equals1.o] Error 1
 make[5]: *** Waiting for unfinished jobs....
+libtool: link: g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -Wl,-z -Wl,relro -o .libs/affinedimension1 affinedimension1.o  ../../utils/libppl_utils.a ../../tests/libppl_tests.a ../../src/.libs/libppl.so -lgmpxx -lgmp
 make[5]: Leaving directory '/build/ppl-1.2/tests/Powerset'
 make[4]: *** [Makefile:1840: check-am] Error 2
 make[4]: Leaving directory '/build/ppl-1.2/tests/Powerset'
@@ -254167,7 +254197,7 @@
 make[3]: Leaving directory '/build/ppl-1.2/tests'
 make[2]: *** [Makefile:565: check-recursive] Error 1
 make[2]: Leaving directory '/build/ppl-1.2'
-dh_auto_test: make -j16 check VERBOSE=1 returned exit code 2
+dh_auto_test: make -j15 check VERBOSE=1 returned exit code 2
 make[1]: Leaving directory '/build/ppl-1.2'
    debian/rules override_dh_auto_test-indep
 make[1]: Entering directory '/build/ppl-1.2'
@@ -254200,7 +254230,7 @@
 make[3]: Entering directory '/build/ppl-1.2/src'
 make[4]: Entering directory '/build/ppl-1.2/src'
  /bin/mkdir -p '/build/ppl-1.2/debian/tmp/usr/lib/x86_64-linux-gnu'
- /bin/bash ../libtool   --mode=install /usr/bin/install -c   libppl.la '/build/ppl-1.2/debian/tmp/usr/lib/x86_64-linux-gnu'
+ /bin/sh ../libtool   --mode=install /usr/bin/install -c   libppl.la '/build/ppl-1.2/debian/tmp/usr/lib/x86_64-linux-gnu'
 libtool: install: /usr/bin/install -c .libs/libppl.so.14.0.0 /build/ppl-1.2/debian/tmp/usr/lib/x86_64-linux-gnu/libppl.so.14.0.0
 libtool: install: (cd /build/ppl-1.2/debian/tmp/usr/lib/x86_64-linux-gnu && { ln -s -f libppl.so.14.0.0 libppl.so.14 || { rm -f libppl.so.14 && ln -s libppl.so.14.0.0 libppl.so.14; }; })
 libtool: install: (cd /build/ppl-1.2/debian/tmp/usr/lib/x86_64-linux-gnu && { ln -s -f libppl.so.14.0.0 libppl.so || { rm -f libppl.so && ln -s libppl.so.14.0.0 libppl.so; }; })
@@ -254210,7 +254240,7 @@
 libtool: install: ranlib /build/ppl-1.2/debian/tmp/usr/lib/x86_64-linux-gnu/libppl.a
 libtool: warning: remember to run 'libtool --finish /usr/lib/x86_64-linux-gnu'
  /bin/mkdir -p '/build/ppl-1.2/debian/tmp/usr/bin'
-  /bin/bash ../libtool   --mode=install /usr/bin/install -c ppl-config '/build/ppl-1.2/debian/tmp/usr/bin'
+  /bin/sh ../libtool   --mode=install /usr/bin/install -c ppl-config '/build/ppl-1.2/debian/tmp/usr/bin'
 libtool: warning: 'libppl.la' has not been installed in '/usr/lib/x86_64-linux-gnu'
 libtool: install: /usr/bin/install -c .libs/ppl-config /build/ppl-1.2/debian/tmp/usr/bin/ppl-config
  /bin/mkdir -p '/build/ppl-1.2/debian/tmp/usr/include/x86_64-linux-gnu'
@@ -254331,9 +254361,9 @@
 make[6]: Entering directory '/build/ppl-1.2/interfaces/C'
 make[7]: Entering directory '/build/ppl-1.2/interfaces/C'
  /bin/mkdir -p '/build/ppl-1.2/debian/tmp/usr/lib/x86_64-linux-gnu'
- /bin/bash ../../libtool   --mode=install /usr/bin/install -c   libppl_c.la '/build/ppl-1.2/debian/tmp/usr/lib/x86_64-linux-gnu'
+ /bin/sh ../../libtool   --mode=install /usr/bin/install -c   libppl_c.la '/build/ppl-1.2/debian/tmp/usr/lib/x86_64-linux-gnu'
 libtool: warning: relinking 'libppl_c.la'
-libtool: install: (cd /build/ppl-1.2/interfaces/C; /bin/bash "/build/ppl-1.2/libtool"  --tag CXX --mode=relink g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -version-info 4:0:0 -Wl,-z,relro -o libppl_c.la -rpath /usr/lib/x86_64-linux-gnu ppl_c_implementation_common.lo ppl_c_Polyhedron.lo ppl_c_Grid.lo ppl_c_Rational_Box.lo ppl_c_BD_Shape_mpz_class.lo ppl_c_BD_Shape_mpq_class.lo ppl_c_Octagonal_Shape_mpz_class.lo ppl_c_Octagonal_Shape_mpq_class.lo ppl_c_Constraints_Product_C_Polyhedron_Grid.lo ppl_c_Pointset_Powerset_C_Polyhedron.lo ppl_c_Pointset_Powerset_NNC_Polyhedron.lo ppl_c_Double_Box.lo ppl_c_BD_Shape_double.lo ppl_c_Octagonal_Shape_double.lo ../../src/libppl.la -lgmpxx -lgmp -inst-prefix-dir /build/ppl-1.2/debian/tmp)
+libtool: install: (cd /build/ppl-1.2/interfaces/C; /bin/sh "/build/ppl-1.2/libtool"  --tag CXX --mode=relink g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -version-info 4:0:0 -Wl,-z,relro -o libppl_c.la -rpath /usr/lib/x86_64-linux-gnu ppl_c_implementation_common.lo ppl_c_Polyhedron.lo ppl_c_Grid.lo ppl_c_Rational_Box.lo ppl_c_BD_Shape_mpz_class.lo ppl_c_BD_Shape_mpq_class.lo ppl_c_Octagonal_Shape_mpz_class.lo ppl_c_Octagonal_Shape_mpq_class.lo ppl_c_Constraints_Product_C_Polyhedron_Grid.lo ppl_c_Pointset_Powerset_C_Polyhedron.lo ppl_c_Pointset_Powerset_NNC_Polyhedron.lo ppl_c_Double_Box.lo ppl_c_BD_Shape_double.lo ppl_c_Octagonal_Shape_double.lo ../../src/libppl.la -lgmpxx -lgmp -inst-prefix-dir /build/ppl-1.2/debian/tmp)
 libtool: relink: g++  -fPIC -DPIC -shared -nostdlib /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/8/crtbeginS.o  .libs/ppl_c_implementation_common.o .libs/ppl_c_Polyhedron.o .libs/ppl_c_Grid.o .libs/ppl_c_Rational_Box.o .libs/ppl_c_BD_Shape_mpz_class.o .libs/ppl_c_BD_Shape_mpq_class.o .libs/ppl_c_Octagonal_Shape_mpz_class.o .libs/ppl_c_Octagonal_Shape_mpq_class.o .libs/ppl_c_Constraints_Product_C_Polyhedron_Grid.o .libs/ppl_c_Pointset_Powerset_C_Polyhedron.o .libs/ppl_c_Pointset_Powerset_NNC_Polyhedron.o .libs/ppl_c_Double_Box.o .libs/ppl_c_BD_Shape_double.o .libs/ppl_c_Octagonal_Shape_double.o   -L/build/ppl-1.2/debian/tmp/usr/lib/x86_64-linux-gnu -L/usr/lib/x86_64-linux-gnu -lppl -lgmpxx -lgmp -L/usr/lib/gcc/x86_64-linux-gnu/8 -L/usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/8/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/8/../../.. -lstdc++ -lm -lc -lgcc_s /usr/lib/gcc/x86_64-linux-gnu/8/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crtn.o  -g -O2 -g -O2 -fstack-protector-strong -g -Wl,-z -Wl,relro   -Wl,-soname -Wl,libppl_c.so.4 -o .libs/libppl_c.so.4.0.0
 libtool: install: /usr/bin/install -c .libs/libppl_c.so.4.0.0T /build/ppl-1.2/debian/tmp/usr/lib/x86_64-linux-gnu/libppl_c.so.4.0.0
 libtool: install: (cd /build/ppl-1.2/debian/tmp/usr/lib/x86_64-linux-gnu && { ln -s -f libppl_c.so.4.0.0 libppl_c.so.4 || { rm -f libppl_c.so.4 && ln -s libppl_c.so.4.0.0 libppl_c.so.4; }; })
@@ -254378,9 +254408,9 @@
 make[6]: Entering directory '/build/ppl-1.2/interfaces/Prolog/SWI'
 make[7]: Entering directory '/build/ppl-1.2/interfaces/Prolog/SWI'
  /bin/mkdir -p '/build/ppl-1.2/debian/tmp/usr/lib/x86_64-linux-gnu/ppl'
- /bin/bash ../../../libtool   --mode=install /usr/bin/install -c   libppl_swiprolog.la '/build/ppl-1.2/debian/tmp/usr/lib/x86_64-linux-gnu/ppl'
+ /bin/sh ../../../libtool   --mode=install /usr/bin/install -c   libppl_swiprolog.la '/build/ppl-1.2/debian/tmp/usr/lib/x86_64-linux-gnu/ppl'
 libtool: warning: relinking 'libppl_swiprolog.la'
-libtool: install: (cd /build/ppl-1.2/interfaces/Prolog/SWI; /bin/bash "/build/ppl-1.2/libtool"  --tag CXX --mode=relink g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -module -avoid-version -Wl,-z,relro -o libppl_swiprolog.la -rpath /usr/lib/x86_64-linux-gnu/ppl swi_efli.lo ppl_swiprolog.lo ppl_prolog_common.lo ppl_prolog_Polyhedron.lo ppl_prolog_Grid.lo ppl_prolog_Rational_Box.lo ppl_prolog_BD_Shape_mpz_class.lo ppl_prolog_BD_Shape_mpq_class.lo ppl_prolog_Octagonal_Shape_mpz_class.lo ppl_prolog_Octagonal_Shape_mpq_class.lo ppl_prolog_Constraints_Product_C_Polyhedron_Grid.lo ppl_prolog_Pointset_Powerset_C_Polyhedron.lo ppl_prolog_Pointset_Powerset_NNC_Polyhedron.lo ppl_prolog_Double_Box.lo ppl_prolog_BD_Shape_double.lo ppl_prolog_Octagonal_Shape_double.lo ../../../src/libppl.la -lgmpxx -lgmp -L/usr/lib/swi-prolog/lib/x86_64-linux -L/usr/lib/swi-prolog/lib -lswipl -inst-prefix-dir /build/ppl-1.2/debian/tmp)
+libtool: install: (cd /build/ppl-1.2/interfaces/Prolog/SWI; /bin/sh "/build/ppl-1.2/libtool"  --tag CXX --mode=relink g++ -g -O2 -frounding-math -g -O2 -ffile-prefix-map=/build/ppl-1.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -g -fpermissive -W -Wall -module -avoid-version -Wl,-z,relro -o libppl_swiprolog.la -rpath /usr/lib/x86_64-linux-gnu/ppl swi_efli.lo ppl_swiprolog.lo ppl_prolog_common.lo ppl_prolog_Polyhedron.lo ppl_prolog_Grid.lo ppl_prolog_Rational_Box.lo ppl_prolog_BD_Shape_mpz_class.lo ppl_prolog_BD_Shape_mpq_class.lo ppl_prolog_Octagonal_Shape_mpz_class.lo ppl_prolog_Octagonal_Shape_mpq_class.lo ppl_prolog_Constraints_Product_C_Polyhedron_Grid.lo ppl_prolog_Pointset_Powerset_C_Polyhedron.lo ppl_prolog_Pointset_Powerset_NNC_Polyhedron.lo ppl_prolog_Double_Box.lo ppl_prolog_BD_Shape_double.lo ppl_prolog_Octagonal_Shape_double.lo ../../../src/libppl.la -lgmpxx -lgmp -L/usr/lib/swi-prolog/lib/x86_64-linux -L/usr/lib/swi-prolog/lib -lswipl -inst-prefix-dir /build/ppl-1.2/debian/tmp)
 libtool: relink: g++  -fPIC -DPIC -shared -nostdlib /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/8/crtbeginS.o  .libs/swi_efli.o .libs/ppl_swiprolog.o .libs/ppl_prolog_common.o .libs/ppl_prolog_Polyhedron.o .libs/ppl_prolog_Grid.o .libs/ppl_prolog_Rational_Box.o .libs/ppl_prolog_BD_Shape_mpz_class.o .libs/ppl_prolog_BD_Shape_mpq_class.o .libs/ppl_prolog_Octagonal_Shape_mpz_class.o .libs/ppl_prolog_Octagonal_Shape_mpq_class.o .libs/ppl_prolog_Constraints_Product_C_Polyhedron_Grid.o .libs/ppl_prolog_Pointset_Powerset_C_Polyhedron.o .libs/ppl_prolog_Pointset_Powerset_NNC_Polyhedron.o .libs/ppl_prolog_Double_Box.o .libs/ppl_prolog_BD_Shape_double.o .libs/ppl_prolog_Octagonal_Shape_double.o   -L/build/ppl-1.2/debian/tmp/usr/lib/x86_64-linux-gnu -L/usr/lib/x86_64-linux-gnu -lppl -lgmpxx -lgmp -L/usr/lib/swi-prolog/lib/x86_64-linux -L/usr/lib/swi-prolog/lib -lswipl -L/usr/lib/gcc/x86_64-linux-gnu/8 -L/usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/8/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/8/../../.. -lstdc++ -lm -lc -lgcc_s /usr/lib/gcc/x86_64-linux-gnu/8/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crtn.o  -g -O2 -g -O2 -fstack-protector-strong -g -Wl,-z -Wl,relro   -Wl,-soname -Wl,libppl_swiprolog.so -o .libs/libppl_swiprolog.so
 libtool: install: /usr/bin/install -c .libs/libppl_swiprolog.soT /build/ppl-1.2/debian/tmp/usr/lib/x86_64-linux-gnu/ppl/libppl_swiprolog.so
 libtool: install: /usr/bin/install -c .libs/libppl_swiprolog.lai /build/ppl-1.2/debian/tmp/usr/lib/x86_64-linux-gnu/ppl/libppl_swiprolog.la
@@ -254410,7 +254440,7 @@
 make[4]: Entering directory '/build/ppl-1.2/demos/ppl_pips'
 make[5]: Entering directory '/build/ppl-1.2/demos/ppl_pips'
  /bin/mkdir -p '/build/ppl-1.2/debian/tmp/usr/bin'
-  /bin/bash ../../libtool   --mode=install /usr/bin/install -c ppl_pips '/build/ppl-1.2/debian/tmp/usr/bin'
+  /bin/sh ../../libtool   --mode=install /usr/bin/install -c ppl_pips '/build/ppl-1.2/debian/tmp/usr/bin'
 libtool: warning: '../../src/libppl.la' has not been installed in '/usr/lib/x86_64-linux-gnu'
 libtool: install: /usr/bin/install -c .libs/ppl_pips /build/ppl-1.2/debian/tmp/usr/bin/ppl_pips
  /bin/mkdir -p '/build/ppl-1.2/debian/tmp/usr/share/man/man1'
@@ -254433,10 +254463,10 @@
   test -f $ball || test -f ./$ball \
     || false || make $ball; \
   dir=`basename $ball .tar.gz`; \
-  /bin/bash ../mkinstalldirs /build/ppl-1.2/debian/tmp/usr/share/doc/ppl/$dir; \
+  /bin/sh ../mkinstalldirs /build/ppl-1.2/debian/tmp/usr/share/doc/ppl/$dir; \
   gunzip -c `if test -f $ball; then echo .; else echo .; fi`/$ball | tar xf - ; \
   if test -d $dir/ocamldoc; then \
-    /bin/bash ../mkinstalldirs /build/ppl-1.2/debian/tmp/usr/share/doc/ppl/$dir/ocamldoc; \
+    /bin/sh ../mkinstalldirs /build/ppl-1.2/debian/tmp/usr/share/doc/ppl/$dir/ocamldoc; \
     for file in $dir/ocamldoc/*; do \
       /usr/bin/install -c -m 644 $file \
         /build/ppl-1.2/debian/tmp/usr/share/doc/ppl/$dir/ocamldoc/`basename $file`; \
@@ -254446,19 +254476,19 @@
     /usr/bin/install -c -m 644 $file /build/ppl-1.2/debian/tmp/usr/share/doc/ppl/$dir/`basename $file`; \
   done; \
 done
-/bin/bash ../mkinstalldirs /build/ppl-1.2/debian/tmp/usr/share/doc/ppl
+/bin/sh ../mkinstalldirs /build/ppl-1.2/debian/tmp/usr/share/doc/ppl
 for file in gpl.pdf fdl.pdf ppl-user-1.2.pdf ppl-user-c-interface-1.2.pdf   ppl-user-prolog-interface-1.2.pdf; do \
   test -f $file || test -f ./$file \
     || false || make $file; \
   /usr/bin/install -c -m 644 `if test -f $file; then echo .; else echo .; fi`/$file /build/ppl-1.2/debian/tmp/usr/share/doc/ppl/$file; \
 done
-/bin/bash ../mkinstalldirs /build/ppl-1.2/debian/tmp/usr/share/doc/ppl
+/bin/sh ../mkinstalldirs /build/ppl-1.2/debian/tmp/usr/share/doc/ppl
 for file in gpl.ps.gz fdl.ps.gz ppl-user-1.2.ps.gz ppl-user-c-interface-1.2.ps.gz   ppl-user-prolog-interface-1.2.ps.gz; do \
   test -f $file || test -f ./$file \
     || false || make $file; \
   /usr/bin/install -c -m 644 `if test -f $file; then echo .; else echo .; fi`/$file /build/ppl-1.2/debian/tmp/usr/share/doc/ppl/$file; \
 done
-/bin/bash ../mkinstalldirs /build/ppl-1.2/debian/tmp/usr/share/doc/ppl
+/bin/sh ../mkinstalldirs /build/ppl-1.2/debian/tmp/usr/share/doc/ppl
 for file in ./*.txt ./README.doc; do \
   /usr/bin/install -c -m 644 $file /build/ppl-1.2/debian/tmp/usr/share/doc/ppl/`basename $file`; \
 done
@@ -254519,28 +254549,30 @@
 dpkg-gencontrol: warning: Depends field of package libppl-dev: substitution variable ${shlibs:Depends} used, but is not defined
    dh_md5sums
    dh_builddeb
-dpkg-deb: building package 'libppl14-dbgsym' in '../libppl14-dbgsym_1.2-7_amd64.deb'.
-dpkg-deb: building package 'libppl-dev' in '../libppl-dev_1.2-7_amd64.deb'.
 dpkg-deb: building package 'libppl14' in '../libppl14_1.2-7_amd64.deb'.
+dpkg-deb: building package 'libppl-dev' in '../libppl-dev_1.2-7_amd64.deb'.
+dpkg-deb: building package 'libppl14-dbgsym' in '../libppl14-dbgsym_1.2-7_amd64.deb'.
 dpkg-deb: building package 'ppl-dev' in '../ppl-dev_1.2-7_amd64.deb'.
+dpkg-deb: building package 'libppl-c4-dbgsym' in '../libppl-c4-dbgsym_1.2-7_amd64.deb'.
 dpkg-deb: building package 'ppl-dev-dbgsym' in '../ppl-dev-dbgsym_1.2-7_amd64.deb'.
-dpkg-deb: building package 'libppl-doc' in '../libppl-doc_1.2-7_all.deb'.
 dpkg-deb: building package 'libppl-c4' in '../libppl-c4_1.2-7_amd64.deb'.
-dpkg-deb: building package 'libppl-c4-dbgsym' in '../libppl-c4-dbgsym_1.2-7_amd64.deb'.
 dpkg-deb: building package 'libppl-swi' in '../libppl-swi_1.2-7_amd64.deb'.
 dpkg-deb: building package 'libppl-swi-dbgsym' in '../libppl-swi-dbgsym_1.2-7_amd64.deb'.
+dpkg-deb: building package 'libppl-doc' in '../libppl-doc_1.2-7_all.deb'.
  dpkg-genbuildinfo --build=binary
  dpkg-genchanges --build=binary >../ppl_1.2-7_amd64.changes
 dpkg-genchanges: info: binary-only upload (no source code included)
  dpkg-source --after-build .
 dpkg-buildpackage: info: binary-only upload (no source included)
 I: copying local configuration
+I: user script /srv/workspace/pbuilder/44001/tmp/hooks/B01_cleanup starting
+I: user script /srv/workspace/pbuilder/44001/tmp/hooks/B01_cleanup finished
 I: unmounting dev/ptmx filesystem
 I: unmounting dev/pts filesystem
 I: unmounting dev/shm filesystem
 I: unmounting proc filesystem
 I: unmounting sys filesystem
 I: cleaning the build env 
-I: removing directory /srv/workspace/pbuilder/39463 and its subdirectories
-I: Current time: Sun Sep 18 16:27:30 -12 2022
-I: pbuilder-time-stamp: 1663561650
+I: removing directory /srv/workspace/pbuilder/44001 and its subdirectories
+I: Current time: Tue Aug 17 12:25:25 +14 2021
+I: pbuilder-time-stamp: 1629152725